ZGlmZiAtLWdpdCBhL2djYy8uZ2RiaW5pdCBiL2djYy8uZ2RiaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE3NThiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjLy5nZGJpbml0CkBAIC0wLDAgKzEsOTUgQEAKK2RlZmluZSBwcgorc2V0IGRlYnVnX3J0eCAoJCkKK2VuZAorCitkb2N1bWVudCBwcgorUHJpbnQgdGhlIGZ1bGwgc3RydWN0dXJlIG9mIHRoZSBydHggdGhhdCBpcyAkLgorV29ya3Mgb25seSB3aGVuIGFuIGluZmVyaW9yIGlzIGV4ZWN1dGluZy4KK2VuZAorCitkZWZpbmUgcHJsCitzZXQgZGVidWdfcnR4X2xpc3QgKCQsIGRlYnVnX3J0eF9jb3VudCkKK2VuZAorCitkb2N1bWVudCBwcmwKK1ByaW50IHRoZSBmdWxsIHN0cnVjdHVyZSBvZiBhbGwgcnR4IGluc25zIGJlZ2lubmluZyBhdCAkLgorV29ya3Mgb25seSB3aGVuIGFuIGluZmVyaW9yIGlzIGV4ZWN1dGluZy4KK1VzZXMgdmFyaWFibGUgZGVidWdfcnR4X2NvdW50IHRvIGNvbnRyb2wgbnVtYmVyIG9mIGluc25zIHByaW50ZWQ6CisgIGRlYnVnX3J0eF9jb3VudCA+IDA6IHByaW50IGZyb20gJCBvbi4KKyAgZGVidWdfcnR4X2NvdW50IDwgMDogcHJpbnQgYSB3aW5kb3cgYXJvdW5kICQuCisKK1RoZXJlIGlzIGFsc28gZGVidWdfcnR4X2ZpbmQgKHJ0eCwgdWlkKSB0aGF0IHdpbGwgc2NhbiBhIGxpc3QgZm9yIFVJRCBhbmQgcHJpbnQKK2l0IHVzaW5nIGRlYnVnX3J0eF9saXN0LiBVc2FnZSBleGFtcGxlOiBzZXQgJGZvbz1kZWJ1Z19ydHhfZmluZChmaXJzdCwgNDIpCitlbmQKKworZGVmaW5lIHB0CitzZXQgZGVidWdfdHJlZSAoJCkKK2VuZAorCitkb2N1bWVudCBwdAorUHJpbnQgdGhlIGZ1bGwgc3RydWN0dXJlIG9mIHRoZSB0cmVlIHRoYXQgaXMgJC4KK1dvcmtzIG9ubHkgd2hlbiBhbiBpbmZlcmlvciBpcyBleGVjdXRpbmcuCitlbmQKKworZGVmaW5lIHB0Yworb3V0cHV0IChlbnVtIHRyZWVfY29kZSkgJC5jb21tb24uY29kZQorZWNobyBcbgorZW5kCisKK2RvY3VtZW50IHB0YworUHJpbnQgdGhlIHRyZWUtY29kZSBvZiB0aGUgdHJlZSBub2RlIHRoYXQgaXMgJC4KK2VuZAorCitkZWZpbmUgcGRuCitvdXRwdXQgJC5kZWNsLm5hbWUtPmlkZW50aWZpZXIucG9pbnRlcgorZWNobyBcbgorZW5kCisKK2RvY3VtZW50IHBkbgorUHJpbnQgdGhlIG5hbWUgb2YgdGhlIGRlY2wtbm9kZSB0aGF0IGlzICQuCitlbmQKKworZGVmaW5lIHB0bgorb3V0cHV0ICQudHlwZS5uYW1lLT5kZWNsLm5hbWUtPmlkZW50aWZpZXIucG9pbnRlcgorZWNobyBcbgorZW5kCisKK2RvY3VtZW50IHB0bgorUHJpbnQgdGhlIG5hbWUgb2YgdGhlIHR5cGUtbm9kZSB0aGF0IGlzICQuCitlbmQKKworZGVmaW5lIHByYworb3V0cHV0IChlbnVtIHJ0eF9jb2RlKSAkLmNvZGUKK2VjaG8gXCAoCitvdXRwdXQgJC5tb2RlCitlY2hvIClcbgorZW5kCisKK2RvY3VtZW50IHByYworUHJpbnQgdGhlIHJ0eC1jb2RlIGFuZCBtYWNoaW5lIG1vZGUgb2YgdGhlIHJ0eCB0aGF0IGlzICQuCitlbmQKKworZGVmaW5lIHBpCitwcmludCAkLmZsZFswXS5ydHhANworZW5kCisKK2RvY3VtZW50IHBpCitQcmludCB0aGUgZmllbGRzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgJC4KK2VuZAorCitkZWZpbmUgcGJzCitzZXQgcHJpbnRfYmluZGluZ19zdGFjayAoKQorZW5kCisKK2RvY3VtZW50IHBicworSW4gY2MxcGx1cywgcHJpbnQgdGhlIGN1cnJlbnQgYmluZGluZyBzdGFjaywgZnJhbWUgYnkgZnJhbWUsIHVwIHRvIGFuZAoraW5jbHVkaW5nIHRoZSBnbG9iYWwgYmluZGluZyBsZXZlbC4KK2VuZAorCisjIERvbid0IGxldCBhYm9ydCBhY3R1YWxseSBydW4sIGFzIGl0IHdpbGwgbWFrZQorIyBzdGRpbyBzdG9wIHdvcmtpbmcgYW5kIHRoZXJlZm9yZSB0aGUgYHByJyBjb21tYW5kIGJlbG93IGFzIHdlbGwuCitiIGFib3J0CisKKyMgTWFrZSBnZGIgY29tcGxhaW4gYWJvdXQgc3ltYm9sIHJlYWRpbmcgZXJyb3JzLiAgVGhpcyBpcyBzbyB0aGF0IGdjYworIyBkZXZlbG9wZXJzIGNhbiBzZWUgYW5kIGZpeCBidWdzIGluIGdjYyBkZWJ1ZyBvdXRwdXQuCitzZXQgY29tcGxhaW50cyAyMApkaWZmIC0tZ2l0IGEvZ2NjL0NPUFlJTkcgYi9nY2MvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDU0OWJlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZ2NjL0NPUFlJTkcuTElCIGIvZ2NjL0NPUFlJTkcuTElCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWEzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvQ09QWUlORy5MSUIKQEAgLTAsMCArMSw0ODIgQEAKKwkJICBHTlUgTElCUkFSWSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgR1BMLiAgSXQgaXMKKyBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55CitvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91IGNhbiB1c2UgaXQgZm9yCit5b3VyIGxpYnJhcmllcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmCit5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBhIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQKK3RoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorbGlicmFyeS4gIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbAordmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbgordGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorDAorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZQorc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QKK3RyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiAgVG8gcHJldmVudCB0aGlzLAord2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzCitmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiAgVGhpcworbGljZW5zZSwgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbgorZGVzaWduYXRlZCBsaWJyYXJpZXMuICBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5CitvbmU7IGJlIHN1cmUgdG8gcmVhZCBpdCBpbiBmdWxsLCBhbmQgZG9uJ3QgYXNzdW1lIHRoYXQgYW55dGhpbmcgaW4gaXQgaXMKK3RoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgorCisgIFRoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0Cit0aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYQorcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiAgTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzCithbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiAgSG93ZXZlciwgaW4KK2EgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEKK2Rlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQordHJlYXRzIGl0IGFzIHN1Y2guCisKKyAgQmVjYXVzZSBvZiB0aGlzIGJsdXJyZWQgZGlzdGluY3Rpb24sIHVzaW5nIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZQorc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gIFdlCitjb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgorCisgIEhvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlCit1c2VycyBvZiB0aG9zZSBwcm9ncmFtcyBvZiBhbGwgYmVuZWZpdCBmcm9tIHRoZSBmcmVlIHN0YXR1cyBvZiB0aGUKK2xpYnJhcmllcyB0aGVtc2VsdmVzLiAgVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8KK3Blcm1pdCBkZXZlbG9wZXJzIG9mIG5vbi1mcmVlIHByb2dyYW1zIHRvIHVzZSBmcmVlIGxpYnJhcmllcywgd2hpbGUKK3ByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZQorbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAgKFdlIGhhdmUgbm90IHNlZW4gaG93IHRvIGFjaGlldmUKK3RoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcworY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pICBUaGUgaG9wZSBpcyB0aGF0IHRoaXMKK3dpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5Cit3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCisMCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IHdoaWNoCitjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZAorcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuICBFYWNoIGxpY2Vuc2VlIGlzCithZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorICAKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorDAorICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCit0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAorc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKK3RoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgorZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KK3VuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQoraXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAorbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKK2Zyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCitzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKK0xpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKK2xpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCit3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCit0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKK2NyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAorY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKK2xpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKyAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKK3RoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQorZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCitXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQorbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKK3RocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKK3N0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQorZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAorZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQord29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKK0xpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKyAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgorQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisMCisgIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21waWxlIG9yCitsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQord29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCitMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKK3RoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKK2R1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCitvZiB0aGVzZSB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZworICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgorICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCisgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKKyAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKKyAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQorICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCisgICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKKyAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKKyAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgorICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCisgICAgYikgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKKyAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMKKyAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCisgICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgYykgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBkKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkKK2Rpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgorY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgord2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwordGhlIGV4ZWN1dGFibGUuCisKKyAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKK3Jlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKK2FjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKK3VzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKK2Rpc3RyaWJ1dGUuCisMCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAorYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCithbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKK3NvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cworZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKK3dyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorICAgICBBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3LCBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCmRpZmYgLS1naXQgYS9nY2MvQ2hhbmdlTG9nIGIvZ2NjL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTQ4M2JhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL0NoYW5nZUxvZwpAQCAtMCwwICsxLDEwNjUyIEBACitTYXQgQXVnICAyIDE4OjUwOjQzIDE5OTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiB0cmVlLmMgKGludF9maXRzX3R5cGVfcCk6IE5lZ2F0aXZlIGludHMgbmV2ZXIgZml0IHVuc2lnbmVkCisJdHlwZXMsIGFuZCB1bnNpZ25lZCBpbnRzIHdpdGggdG9wLWJpdC1zZXQgbmV2ZXIgZml0IHNpZ25lZCB0eXBlcy4KKworU2F0IEF1ZyAgMiAxNjoyNTo0MyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAZnJvYm5pdHouZ251LmFpLm1pdC5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChFWFRSQV9DX09CSlMpOiBSZW1vdmVkLgorCShDX0FORF9PQkpDX09CSlMpOiAgTmV3LiAgU3Vic3VtZXMgRVhUUkFfQ19PQkpTIGFuZCBPQkpDX0NDT01NT04uCisJKiBvYmpjL01ha2UtbGFuZy5pbiAoT0JKQ19DQ09NTU9OKTogIFJlbW92ZWQuCisKK1NhdCBBdWcgIDIgMTY6MTE6NTcgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEJ1aWxkIC5nZGJpbml0IGZvciB0b3AgbGV2ZWwgYnVpbGQgZGlyIGhlcmUuCisJKEFDX09VVFBVVCk6IFBhc3Mgb2xkc3R5bGVfc3ViZGlycyB0byBjb25maWd1cmUubGFuZy4KKwkqIGNvbmZpZ3VyZS5sYW5nOiBGaXggYnVpbGRpbmcgb2YgLmdkYmluaXQgZm9yIG9sZHN0eWxlIGxhbmcgc3ViZGlycy4KKworU2F0IEF1ZyAgMiAxMzo0ODoxNSAxOTk3ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogSWdub3JlIHBhcmFkb3hpY2FsIFNVQlJFR3MgdW5sZXNzIHdlIGFyZQorCWxvb2tpbmcgZm9yIHN1Y2guCisKK1NhdCBBdWcgIDIgMTM6MjU6MzMgMTk5NyAgVHJpc3RhbiBHaW5nb2xkICAoZ2luZ29sZEBlbWFpbC5lbnN0LmZyKQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IElmIC1mY2hlY2stbWVtb3J5LXVzYWdlLCB1c2UgcHNldWRvLXJlZ2lzdGVyLAorCWNoZWNrIGluZGlyZWN0bHkgY2FsbGVkIGZ1bmN0aW9uIGlzIGV4ZWN1dGFibGUsIGFuZCBzZXQgcmlnaHRzIG9mCisJbWVtb3J5IGZvciBhZ2dyZWdhdGUgYXMgd3JpdGUgb25seS4KKwkoc3RvcmVfb25lX2FyZyk6IElmIC1mY2hlY2stbWVtb3J5LXVzYWdlLCBzZXQgcmlnaHRzIGZvciBwdXNoZWQKKwlzdGFjayBhcmd1bWVudC4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZAorCV9fYnVpbHRpbl9hZ2dyZWdhdGVfaW5jb21pbmdfYWRkcmVzcy4KKwkqIGV4cGxvdy5jIChleHByX3NpemUpOiBDYWxsIGV4cGFuZF9leHByIHdpdGggYXBwcm9wcmlhdGUgZmxhZy4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fQUdHUkVHQVRFX0lOQ09NSU5HX0FERFJFU1MpOgorCU5ldyBjYXNlLgorCShleHBhbmRfYXNzaWdubWVudCwgZXhwYW5kX2V4cHIsIGVtaXRfcHVzaF9pbnNuLCBzdG9yZV9leHByKToKKwlJbnNlcnQgY2FsbHMgdG8gY2hrcl9jaGVja19hZGRyLCBjaGtyX3NldF9yaWdodCwgYW5kIGNoa3JfY29weV9iaXRtYXAKKwl3aGVuIC1mY2hlY2stbWVtb3J5LXVzYWdlLgorCShnZXRfcHVzaF9hZGRyZXNzLCBnZXRfbWVtb3J5X3VzYWdlX2Zyb21fbW9kaWZpZXIpOiBOZXcgZnVuY3Rpb25zLgorCSogZXhwci5oOiBBZGQgZXhwYW5kX21vZGlmaWVyIGZsYWdzLgorCShjaGtyXypfbGliZnVuYyk6IE5ldyBkZWNscy4KKwkobWVtb3J5X3VzZV9tb2RlKTogTmV3IGRlY2xhcmF0aW9uLgorCSogZmxhZ3MuaCAoZmxhZ19jaGVja19tZW1vcnlfdXNhZ2UsIGZsYWdfcHJlZml4X2Z1bmN0aW9uX25hbWUpOiBOZXcKKwlkZWNsYXJhdGlvbi4KKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjaywgYXNzaWduX3Bhcm1zKTogSWYKKwktZmNoZWNrLW1lbW9yeS11c2FnZSwgc2V0IHRoZSByaWdodHMgb2YgcHVzaGVkIHZhcmlhYmxlLgorCSogb3B0YWJzLmMgKGNoa3Jfe2NoZWNrX2FkZHIsc2V0X3JpZ2h0fV9saWJmdW5jKTogTmV3IGRlZmluaXRpb25zLgorCShjaGtyX3tjb3B5X2JpdG1hcCxjaGVja19leGVjfV9saWJmdW5jKTogTGlrZXdpc2UuCisJKGluaXRfb3B0YWJzKTogSW5pdGlhbGl6ZSB0aGVzZSBjaGtyXypfbGliZnVuYy4KKwkqIHN0bXQuYyAoZXhwYW5kX2NvbXB1dGVkX2dvdG8pOiBJZiAtZmNoZWNrLW1lbW9yeS11c2FnZSwgY2hlY2sgdGhhdAorCWNvbXB1dGVkIGFkZHJlc3Mgb2YgYSBnb3RvIGlzIGV4ZWN1dGFibGUuCisJKGV4cGFuZF9hc20sIGV4cGFuZF9hc21fb3BlcmFuZHMpOiBJZiAtZmNoZWNrLW1lbW9yeS11c2FnZSwKKwlkaXNhbGxvdyBhc20gc3RhdG1lbnRzLgorCSogdG9wbGV2LmMgKGZsYWdfY2hlY2tfbWVtb3J5X3VzYWdlLCBmbGFnX3ByZWZpeF9mdW5jdGlvbl9uYW1lKTogTmV3CisJdmFyaWFibGUuCisJKGZfb3B0aW9ucyk6IEFkZCBgY2hlY2stbWVtb3J5LXVzYWdlJyBhbmQgYHByZWZpeF9mdW5jdGlvbl9uYW1lJy4KKwkobWFpbik6IERpc2FibGUgYC1mb21pdC1mcmFtZS1wb2ludGVyJyBpZiBgLWZjaGVjay1tZW1vcnktdXNhZ2UnIGlzIHNldAorCWFuZCB0aGUgbWFjaGluZSBjYW4ndCBkZWJ1ZyB3aXRob3V0IHRoZSBmcmFtZSBwb2ludGVyLgorCSogdHJlZS5oIChidWlsdF9pbl9mdW5jdGlvbik6IEFkZCBCVUlMVF9JTl9BR0dSRUdBVEVfSU5DT01JTkdfQUREUkVTUy4KKwkqIHZhcmFzbS5jIChtYWtlX2Z1bmN0aW9uX3J0bCwgbWFrZV9kZWNsX3J0bCk6IEFkZCBhIHByZWZpeCB3aGVuCisJZmxhZ19wcmVmaXhfZnVuY3Rpb25fbmFtZV91c2FnZSBpcyBzZXQuCisJKGFzc2VtYmxlX25hbWUpOiBTdHJpcCB0aGUgQ0hLUl9QUkVGSVguCisJKiBhbHBoYS5jIChhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogSWYgLWZjaGVjay1tZW1vcnktdXNhZ2UsCisJc2V0IHJpZ2h0cyBvZiBzYXZlZCByZWdpc3RlcnMuCisJKiBjbGlwcGVyLmMgKGNsaXBwZXJfYnVpbHRpbl9zYXZlcmVncyk6IExpa2V3aXNlLgorCSogbTg4ay5jIChtODhrX2J1aWx0aW5fc2F2ZXJlZ3MpOiBMaWtld2lzZS4KKwkqIHBhLmMgKGhwcGFfYnVpbHRpbl9zYXZlcmVncyk6IExpa2V3aXNlLgorCSogc3BhcmMuYyAoc3BhcmNfYnVpbHRpbl9zYXZlcmVncyk6IExpa2V3aXNlLgorCitTYXQgQXVnICAyIDA4OjAxOjEyIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEdpdmUgZXJyb3IgZm9yIGBsb25nIGRvdWJsZScgYW5kCisJcmVmaW5lIHRleHQgb2Ygc29tZSBlcnJvciBtZXNzYWdlcy4KKworCSogYWxwaGEuaCAoRkxPQVRfVkFMVUVfVFlQRSwgSU5USUZZLCBGTE9BVElGWSwgRkxPQVRfQVJHX1RZUEUpOiBEZWZpbmUuCisJKiBpODYwLmggKEZMT0FUX1ZBTFVFX1RZUEUpOiBGaXggdHlwbzsgd2FzIEZMT0FUX1RZUEVfVkFMTFVFLgorCisJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogQWxsb3cgc3RhY2tfc2xvdCB0byBiZSBTUCBpbgorCUFSR1NfR1JPV19ET1dOV0FSRCBjYXNlLgorCisJKiBjLWRlY2wuYyAocGFybWxpc3RfdGFnc193YXJuaW5nKTogT25seSBzdXBwcmVzcyB3YXJuaW5nIG9uCisJdW5pb24gaWYgYW5vbnltb3VzLgorCisJKiBsaWJnY2MyLmMgKF90cmFtcG9saW5lKTogUmV3b3JrIGxhc3QgY2hhbmdlOyBib3RoIGdldHBhZ2VzaXplCisgCWFuZCBtcHJvdGVjdCBhcmUgaW4gY3lnd2luMzIuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQWRkIElOX0FERFIgdG8gSU5fQUREUl9BRERSIHdoZW4gY29tcHV0aW5nCisJbmVlZHMgc2luY2UgdGhleSBjb25mbGljdC4KKworCSogcHJpbnQtcnRsLmMgKGluZGVudCk6IE1vdmUgdG8gZmlsZSBsZXZlbDsgd2FzIHN0YXRpYyBpbiBwcmludF9ydHguCisJKHByaW50X2lubGluZV9ydHgpOiBOZXcgZnVuY3Rpb24uCisJKiByZWxvYWQuYyAoZGVidWdfcmVsb2FkKTogUmV3b3JrIHRvIG1ha2Ugb3V0cHV0IG1vcmUgY29tcGFjdC4KKworCSogZHdhcmZvdXQuYyAob3V0cHV0X2NvbXBpbGVfdW5pdF9kaWUpOiBBZGQgc3VwcG9ydCBmb3IgUGFzY2FsLgorCSogZHdhcmYyb3V0LmMgKGdlbl9jb21waWxlX3VuaXRfZGllKTogTGlrZXdpc2UuCisKKwkqIGMtdHlwZWNrLmMgKGx2YWx1ZV9wLCBjYXNlIEJJTkRfRVhQUiwgUlRMX0VYUFIpOiBSZXR1cm4gMSBpZiBhcnJheS4KKworCSogTWFrZWZpbGUuaW4gKE9CSkNfT0JKQyk6IERlbGV0ZSBmcm9tIGhlcmUuCisKKwkqIHZhcmFzbS5jIChjb21wYXJlX2NvbnN0YW50XzEsIGNhc2UgU1RSSU5HX0NTVCk6IENvbXBhcmUgVFlQRV9NT0RFLgorCShyZWNvcmRfY29uc3RhbnRfMSwgY2FzZSBTVFJJTkdfQ1NUKTogUmVjb3JkIFRZUEVfTU9ERS4KKworCSogdHJlZS5jIChjb250YWluc190aGlzX3BsYWNlaG9sZGVyX3ApOiBEZWxldGUuCisJKGNvbnRhaW5zX3BsYWNlaG9sZGVyX3ApOiBOb3cgY29udGFpbnMgY29kZSBmcm9tIGFib3ZlIGZ1bmN0aW9uLgorCShjb250YWluc19wbGFjZWhvbGRlcl9wLCBjYXNlICdyJyk6IERvbid0IGxvb2sgYXQgb2Zmc2V0IGluZm8uCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFBMQUNFSE9MREVSX0VYUFIpOiBGaW5kIGlubmVybW9zdAorCW1hdGNoaW5nIGFuZCBkb24ndCBjaGVjayBjb250YWluc19wbGFjZWhvbGRlcl9wLgorCitGcmkgQXVnICAxIDE3OjE1OjA3IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgorCisJKiBvYmpjL29iamMtYWN0LmMgKGxhbmdfaW5pdCk6ICBEb24ndCBjaGVja19uZXdsaW5lICNpZiBVU0VfQ1BQTElCLgorCSogYy1sZXguYyAobGFuZ19pbml0KTogIFJlbW92ZSAocmVjZW50bHkgbW92ZWQgaGVyZSkuCisJKiBjLWxhbmcuYyAobGFuZ19pbml0KTogIFJlc3RvcmUsIGJ1dCBhZGQgI2lmICFVU0VfQ1BQTElCLgorCitGcmkgQXVnICAxIDExOjI2OjQ1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuYyAocGFfcmVvcmcpOiBFeHBsb2RlIEFERFJfRElGRl9WRUMgaW5zbnMgdG9vLgorCitUaHUgSnVsIDMxIDE5OjM3OjIyIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbGliZ2NjMi5jIChnZXRwYWdlc2l6ZSk6IERvbid0IGNvbXBpbGUgaWYgX19DWUdXSU4zMl9fLgorCitUaHUgSnVsIDMxIDE2OjA0OjQyIDE5OTcgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2LmMgKG91dHB1dF90b19yZWcsIG91dHB1dF9maXhfdHJ1bmMpOiBVc2Ugc2NyYXRjaCBtZW1vcnksCisJaWYgYXZhaWxhYmxlLCBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGV4dGVuZGluZyB0aGUgc3RhY2suCisJKHB1dF9jb25kaXRpb25fY29kZSwgcHJpbnRfb3BlcmFuZCk6IEFkZGVkIHJldmVyc2VfY2MgdG8gcmV2ZXJzZSB0aGUKKwljb21wYXJpc29uIHdoZW4gJGFoIGlzIGFjY2Vzc2VkIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgZWZsYWdzCisKKwkqIGkzODYubWQgKCp0cnVuYyopOiBVc2Ugc2NyYXRjaCBtZW1vcnkgZm9yIG91dHB1dF9maXhfdHJ1bmMuCisJKG1vdnNpY2NfMSwgbW92aGljY18xKSBDaGFuZ2UgYWx0ZXJuYXRpdmUgMyB0bzogCisJakNDIEwxOyBtb3Y7IGptcCBMMjsgTDE6bW92OyBMMjoKKwkobW92c2ZjYywgbW92ZGZjYywgbW92eGZjYyk6IEZvcmNlIGNvbnN0YW50IG9wZXJhbmRzIHRvIG1lbW9yeS4KKwkobW92c2ZjY18xLCBtb3ZkZmNjXzEsIG1vdnhmY2NfMSk6IENoYW5nZSBhbHRlcm5hdGl2ZSAzIGFzIGFib3ZlLgorCitUaHUgSnVsIDMxIDE2OjA0OjQyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogaTM4Ni5oIChNQVhfRklYRURfTU9ERV9TSVpFKTogRGVmaW5lLgorCitUaHUgSnVsIDMxIDE2OjA0OjQyIDE5OTcgICBSb2JlcnQgTGlwZSA8cm9iZXJ0bEBkZ2lpLmNvbT4KKwkKKwkqIGkzODYvc2NvNS5oIChTV0lUQ0hFU19ORUVEX1NQQUNFUykgRGVmaW5lLgorCVJlcXVpcmVkIGJ5IHRoZSBDT0ZGIChidXQgbm90IEVMRikgbGlua2VyLgorCitXZWQgSnVsIDMwIDE1OjAzOjUyIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgorCisJKiBkZW1hbmdsZS5oIChETUdMX0pBVkEpOiAgTmV3IG9wdGlvbiB0byByZXF1ZXN0IEphdmEgZGVtYW5nbGluZy4KKwkqIGNwbHVzLWRlbS5jOiAgVmFyaW91cyBjaGFuZ2VzIHRvIHByb2R1Y2UgSmF2YSBvdXRwdXQgd2hlbiBwYXNzZWQKKwlETUdMX0pBVkEuICBUaHVzICI6OiIgYmVjb21lcyAiLiIgYW5kICJKQXJyYXk8Rm9vPiIgYmVjb21lcyAiRm9vW10iLgorCShtYWluKTogIFN1cHBvcnQgLS1qYXZhIGFuZCAtaiBmbGFncyB0byBzZXQgRE1HTF9KQVZBLgorCitXZWQgSnVsIDMwIDA4OjU2OjA4IDE5OTcgIFBoaWxpcCBCbHVuZGVsbCAgPFBoaWxpcC5CbHVuZGVsbEBwb2JveC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoYXJtLSotKik6IFJlcGxhY2Ugd2l0aCBhcm0tKi1hb3V0LgorCSogYXJtL2FvdXQuaCAoU0VUX0FTTV9PUCk6IERlZmluZSBieSBkZWZhdWx0LgorCSogYXJtL3Jpc2NpeC5oIChTRVRfQVNNX09QOiBVbmRlZmluZS4KKwkqIGFybS5oIChDUFBfU1BFQyk6IEFkZCAlKHN1YnRhcmdldF9jcHBfc3BlYykuCisJKFNVQlRBUkdFVF9DUFBfU1BFQyk6IE5ldyBtYWNyby4KKwkqIGFybS9saW51eC5oOiBJbmNsdWRlIGFvdXQuaCByYXRoZXIgdGhhbiBhcm0uaCBkaXJlY3RseS4KKwkoVEFSR0VUX0NQVV9ERUZBVUxUKTogRGVmaW5lLgorCSh7QVNNLENQUH1fU1BFQyk6IFJlbW92ZS4KKwkqIGFybS90LWxpbnV4IChNVUxUSUxJQl9PUFRJT05TKTogVXNlIC1tYXBjcy1OTiBpbnN0ZWFkIG9mIC1tTi4KKwkoTElCMUFTTVNSQyk6IFVzZSBnZW5lcmljIEFSTSB2ZXJzaW9uLgorCShDUk9TU19MSUJHQ0MxKTogRGVmaW5lLgorCSogYXJtL2xpYjFmdW5jcy1saW51eC5hc206IFJlbW92ZS4KKworVHVlIEp1bCAyOSAxNzo1Nzo0NyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KKworCSogQWRkIGhvb2tzIGZvciB1c2luZyBhdXRjb25mLXN0eWxlIE1ha2VmaWxlLmluIGluIGxhbmd1YWdlIHN1YmRpcnMuCisJKiBjb25maWd1cmUuaW4gKGFsbF9vdXRwdXRzLCBvbGRzdHlsZV9zdWJkaXJzKTogIE5ldyB2YXJpYWJsZXMuCisJUGFzcyBhbGxfb3V0cHV0cyB0byBBQ19PVVRQVVQuCisJKiBjb25maWd1cmUubGFuZzogIE9ubHkgaXRlcmF0ZSBvdmVyIG9sZHN0eWxlX3N1YmRpcnMuCisKKwkqIFBhdGNoZXMgdG8gdXNlIGNwcGxpYiB3aXRoIGNjMSAjaWYgVVNFX0NQUExJQi4KKwkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtYy1jcHBsaWIpOiAgTmV3IG9wdGlvbi4KKwkoZXh0cmFfY19mbGFncywgZXh0cmFfY19vYmpzKTogIE5ldyB2YXJpYWJsZXMuCisJKiBNYWtlZmlsZS5pbiAoRVhUUkFfQ19PQkpTKTogIE5ldyB2YXJpYWJsZS4KKwkoSU5URVJOQUxfQ0ZMQUdTKTogIEFkZCBAZXh0cmFfY19mbGFnc0AuCisJKENfT0JKUyk6ICBBZGQgJChFWFRSQV9DX09CSlMpLgorCSogYy1sZXguYyAoZ2VuZXJhbGx5KTogIFJlcGxhY2UgZ2V0YyBhbmQgdW5nZXRjIGJ5IG1hY3JvcyBHRVRDIGFuZAorCVVOR0VUQy4gIEF2b2lkIGV4cGxpY2l0IHJlZmVyZW5jZXMgdG8gZmlucHV0LgorCSh5eV9nZXRfdG9rZW4pOiAgTmV3IGZ1bmN0aW9uLCB0aGF0IGNhbGxzIGNwcF9nZXRfdG9rZW4uCisJKGluaXRfcGFyc2UpOiAgTmV3IGZ1bmN0aW9uIC0gY2FsbHMgaW5pdF9sZXguCisJKGZpbmlzaF9wYXJzZSk6ICBOZXcgZnVuY3Rpb24gKGNhbGxlZCBieSBjb21waWxlX2ZpbGUpLgorCShHRVRfRElSRUNUSVZFX0xJTkUpOiAgTmV3IG1hY3JvIHdyYXBwZXIgcmVwbGFjZXMgZ2V0X2RpcmVjdGl2ZV9saW5lLgorCShsYW5nX2luaXQpOiAgRG9uJ3QgY2hlY2tfbmV3bGluZSAtIGFscmVhZHkga25vdyBtYWluX2lucHV0X2ZpbGVuYW1lLgorCShoYW5kbGVfc3lzdl9wcmFnbWEpOiAgUmVtb3ZlIEZJTEUqIHBhcmFtZXRlci4KKwkqIHRvcGxldi5jIChmaW5wdXQpOiAgUmVtb3ZlICNpZiBVU0VfQ1BQTElCLgorCShjb21waWxlX2ZpbGUpOiAgI2lmIFVTRV9DUFBMSUIgZG9uJ3Qgb3BlbiBpbnB1dCBmaWxlIGhlcmUsCisJZG8gaXQgaW4gY3BwX3N0YXJ0X3JlYWQuICBDYWxsIGluaXRfcGFyc2UgaW5zdGVhZCBvZiBpbml0X2xleC4KKwlBdCBlbmQsIGNhbGwgZmluaXNoX3BhcnNlIGluc3RlYWQgb2YgZmNsb3NlKGZpbnB1dCkuCisKK01vbiBKdWwgMjggMTU6NDg6MjkgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgeG1hbGxvYyBpbnN0ZWFkIG9mCisJYWxsb2NhIGZvciB0aGUgTEFCRUxfTUFQLgorCShzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6IExpa2V3aXNlLgorCitNb24gSnVsIDI4IDExOjIyOjE2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IEFsc28gZW1pdCBhbnkgZGVmZXJyZWQgVFJFRV9QVUJMSUMgaW5saW5lcy4KKwkocmVzdF9vZl9jb21waWxhdGlvbik6IFVzZSBkZWNsX3ByaW50YWJsZV9uYW1lIGluc3RlYWQgb2YgREVDTF9OQU1FCisJdG8gaWRlbnRpZnkgZnVuY3Rpb25zIGluIHRoZSBSVEwgZHVtcCBmaWxlcy4KKworCSogZHdhcmYyb3V0LmMgKGFkZF9sb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiAKKyAJbGVhZl9yZW51bWJlcl9yZWdzX2luc24uICBBbHNvIGVsaW1pbmF0ZV9yZWdzIGhlcmUuCisJKGFkZF9BVF9sb2NhdGlvbl9kZXNjcmlwdGlvbik6IE5vdCBoZXJlLiAgRG9uJ3QgZW1pdCBhbnl0aGluZyAKKwlmb3IgYSB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuIG9wdGltaXplZCBhd2F5LgorCShhZGRfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogTGlrZXdpc2UuCisKKwkqIGR3YXJmb3V0LmMgKGxvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6CisgCWxlYWZfcmVudW1iZXJfcmVnc19pbnNuLiAgQWxzbyBlbGltaW5hdGVfcmVncyBoZXJlLgorCShsb2NhdGlvbl9hdHRyaWJ1dGUpOiBOb3QgaGVyZS4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBGaXggYW5jaWVudCBjb2RlIHRvIG1hdGNoIGFuY2llbnQKKwljb21tZW50LiAgVXNlIG1vZGUgb2YgZmllbGQgZm9yIG9uZS1maWVsZCBzdHJ1Y3RzLgorCitTdW4gSnVsIDI3IDEyOjA5OjAyIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjaywgdHJhbXBvbGluZV9hZGRyZXNzKTogVHJlYXQKKwlpbmxpbmVfZnVuY3Rpb25fZGVjbCBsaWtlIGN1cnJlbnRfZnVuY3Rpb25fZGVjbC4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgTEFCRUxfREVDTCk6IExpa2V3aXNlLgorCShleHBhbmRfZXhwciwgY2FzZSBTQVZFX0VYUFIpOiBIYW5kbGUgdG9wLWxldmVsIFNBVkVfRVhQUiBieQorCW1vdmluZyBpbnRvIGN1cnJlbnQgZnVuY3Rpb247IGFib3J0IGlmIGluIGluY29ycmVjdCBjb250ZXh0LgorCSogZm9sZC1jb25zdC5jIChmb2xkX3JhbmdlX3Rlc3QsIGZvbGQpOiBBdm9pZCBtYWtpbmcgU0FWRV9FWFBSCisJaWYgYXQgdG9wIGxldmVsLgorCisJKiBkd2FyZm91dC5jIChBU01fT1VUUFVUX1NPVVJDRV9GSUxFTkFNRSk6IERlbGV0ZSBkZWZhdWx0IHZhbHVlLgorCisJKiBhbHBoYS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1uby1ieXRlLgorCisJKiBleHByLmMgKGdldF9pbm5lcl91bmFsaWduZWRfcCk6IERlbGV0ZWQuCisJKGV4cGFuZF9hc3NpZ25tZW50KTogUmVtb3ZlIHNwZWNpYWwtY2FzZSBvZiBjb25zdGFudCBhcnJheS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQVJSQVlfUkVGKTogTGlrZXdpc2UsIGFuZCBjbGVhbiB1cCByZW1haW5pbmcgY29kZS4KKworCSogZXhwbG93LmMgKHByb2JlX3N0YWNrX3JhbmdlKTogRG8gcHJvYmluZyB3aXRoIGxvb3AgaWYgbW9yZQorCXRoYW4gYSBzbWFsbCBudW1iZXIuCisKK0ZyaSBKdWwgMjUgMTU6NDI6MzQgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlLmluOiBGaW5pc2ggZml4aW5nIGNhbGN1bGF0aW9uIGlmIGRlZmF1bHQgdGhyZWFkCisJc3VwcG9ydCBpcyBlbmFibGVkLgorCitGcmkgSnVsIDI1IDE1OjMwOjA5IDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKG5hdGl2ZSk6IERlcGVuZCBvbiBjb25maWcuaC4KKwkoZ2NjLm8pOiBEZXBlbmQgb24gTWFrZWZpbGUsIG5vdCBjb25maWcuc3RhdHVzLgorCitGcmkgSnVsIDI1IDEwOjU2OjUwIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuYyAocGFfcmVvcmcpOiBJZiBUQVJHRVRfQklHX1NXSVRDSCwgdGhlbiBkbyBub3QgZXhwbG9kZQorCUFERFJfVkVDIGluc25zLiAgU2xpZ2h0bHkgcmV3b3JrIGNvZGUgd2hpY2ggZXhwbG9kZXMgQUREUl9WRUMKKwlpbnNucy4KKwkqIHBhLmggKFRBUkdFVF9CSUdfU1dJVENIKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgImJpZy1zd2l0Y2giIGFuZCAibm8tYmlnLXN3aXRjaCIuCisJKENBU0VfVkVDVE9SX01PREUpOiBVc2UgVEkgb3IgREkgZGVwZW5kaW5nIG9uIFRBUkdFVF9CSUdfU1dJVENILgorCShDQVNFX0RST1BTX1RIUk9VR0gpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkoQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQpOiBSZXdyaXRlIHRvIGhhbmRsZSBUQVJHRVRfQklHX1NXSVRDSC4KKwkoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogTGlrZXdpc2UuCisJKiBwYS5tZCAoY2FzZXNpKTogUmV3b3JrIHRvIGF2b2lkIHNvbWUgcG90ZW50aWFsIGxvbmcgYnJhbmNoCisJcHJvYmxlbXMgKGFsc28gbWFrZXMgZ2VuZXJhdGVkIGNvZGUgZmFzdGVyISkuICBIYW5kbGUKKwlUQVJHRVRfQklHX1NXSVRDSC4KKwkoY2FzZXNpMCk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKworRnJpIEp1bCAyNSAwODozNjo0NyAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBjYWxscy5jOiAoZXhwYW5kX2NhbGwpOiBJZiAtZnN0YWNrLWNoZWNrIGFuZCB0ZW1wIG5lZWRlZAorCWZvciBhcmcgaXMgdG9vIGxhcmdlLCB1c2UgYWxsb2NhLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBNT0RJRllfRVhQUik6IERvbid0IHByZWV4cGFuZCBjYWxscworCWlmIExIUyBpcyBhbiBpbmRpcmVjdCB2aWEgYSBjb25zdGFudCBwb2ludGVyLgorCitUaHUgSnVsIDI0IDIxOjQ5OjExIDE5OTcgIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgorCisJKiBiaXRtYXAuYyAoYml0bWFwX29wZXJhdGlvbik6IFJlc2V0IENVUlJFTlQgb24gZGVmZXJyZWQgZGVsZXRpb24uCisKK1dlZCBKdWwgMjMgMjM6NTI6MTQgMTk5NyAgQ2hyaXMgU21pdGggIDxjc21pdGhAY29udmV4LmhwLmNvbT4KKworCSogY29udmV4LmggKENIRUNLX0ZMT0FUX1ZBTFVFKTogRml4IE9WRVJGTE9XIGNhcGl0YWxpemF0aW9uLgorCitXZWQgSnVsIDIzIDEzOjAwOjQ3IDE5OTcgIFJpY2hhcmQgRWFybnNoYXcgPHJlYXJuc2hhQGNhbWJyaWRnZS5hcm0uY29tPgorCisJKiBjb25maWd1cmUuaW4gKGFybS0qLW5ldGJzZCopOiBGaXggdHlwbyBzZXR0aW5nIHRtYWtlX2ZpbGUuCisKK1dlZCBKdWwgMjMgMDY6Mzk6MzUgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogY29uZmlndXJlLmluIChhbHBoYSopOiBQdXQgcXVvdGVzIGFyb3VuZCBNQVNLX0dBUy4KKworVHVlIEp1bCAyMiAxNToyNDo0NSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgorCisJKiB0cmVlLmMgKGFycmF5X3R5cGVfbmVsdHMpOiBNYWtlIHN1cmUgdGhlIGRvbWFpbiBvZiBUWVBFIGlzIHNldAorCWJlZm9yZSB3ZSB0cnkgdG8gdXNlIGl0LgorCitUdWUgSnVsIDIyIDEyOjI2OjEzIDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMuYyAoZ2VuX3Y5X3NjYyk6IEhhbmRsZSBlYXJseSBjbG9iYmVyIG9mIHJlc3VsdC4KKwkqIHNwYXJjLm1kIChzZXFkaV9zcGVjaWFsKTogRG9uJ3QgY2xvYmJlciAleGNjLgorCShzbmVkaV9zcGVjaWFsLCBzZXFkaV9zcGVjaWFsX3RydW5jLCBzbmVkaV9zcGVjaWFsX3RydW5jKTogTGlrZXdpc2UuCisJKHNuZWRpX3plcm8sIG5lZ19zbmVkaV96ZXJvLCBzZXFkaV96ZXJvLCBuZWdfc2VxZGlfemVybyk6IExpa2V3aXNlLgorIAkoc25lZGlfemVyb190cnVuYywgc2VxZGlfemVyb190cnVuYyk6IExpa2V3aXNlLiBSZW5hbWVkIGZyb20gLi4uX3NwNjQuCisJKHNuZWRpX3plcm9fdHJ1bmNfc3AzMiwgc2VxZGlfemVyb190cnVuY19zcDMyKTogRGVsZXRlLgorCisJKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBQYXNzIHhtYWtlX2ZpbGUsIHRtYWtlX2ZpbGUgdG8KKwljb25maWd1cmUuZnJhZworCShkaXN0Y2xlYW4pOiBEZWxldGUgTWFrZS1ob3N0LCBNYWtlLXRhcmdldC4KKwkqIGNvbmZpZ3VyZS5pbiAoaG9zdF9vdmVycmlkZXMpOiBTZXQgdG8gTWFrZS1ob3N0LgorCShkZXBfaG9zdF94bWFrZWZpbGUpOiBMb29wIG92ZXIgYWxsIGVsZW1lbnRzIGluIGhvc3RfbWFrZV9maWxlLgorCSh0YXJnZXRfb3ZlcnJpZGVzKTogU2V0IHRvIE1ha2UtdGFyZ2V0LgorCShkZXBfdG1ha2VfZmlsZSk6ICBMb29wIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRtYWtlX2ZpbGUuCisJKGNvbmZpZ3VyZS5mcmFnKTogUGFzcyBkZXBfaG9zdF94bWFrZV9maWxlLCBkZXBfdG1ha2VfZmlsZS4KKwkqIGNvbmZpZ3VyZS5mcmFnOiBOZXcgYXJndW1lbnRzIHhtYWtlX2ZpbGVzLCB0bWFrZV9maWxlcy4KKwlCdWlsZCBNYWtlLWhvc3QsIE1ha2UtdGFyZ2V0LgorCitNb24gSnVsIDIxIDIzOjE3OjQ0IDE5OTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgkKKworCSogb2JqYy9NYWtlLWxhbmcuaW4sIG9iamMvTWFrZWZpbGUuaW46IENvbW1lbnQgb3V0IGxpbmVzIGNvbnRhaW5pbmcKKwlqdXN0IGZvcm1mZWVkcy4KKworTW9uIEp1bCAyMSAxNDowNTo0NiAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSk6IERlcGVuZCBvbiBjb25maWcuc3RhdHVzIGluc3RlYWQKKwlvZiBjb25maWd1cmUuCisJKGNvbmZpZy5zdGF0dXMpOiBEZXBlbmQgb24gY29uZmlndXJlLiAgUnVuIGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisJaWYgb3V0IG9mIGRhdGUuCisJKGNzdGFtcC1oLmluKTogVXNlIGVjaG8gaW5zdGVhZCBvZiB0b3VjaC4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX21lbV9jb25mbGljdF9wKTogUmVzdG9yZSBoYW5kbGluZyBvZgorCShtZW06QkxLIGNvbnN0MF9ydHgpIG1lYW5pbmcgYWxsIG1lbW9yeSBpcyBjbG9iYmVyZWQuCisKK01vbiBKdWwgMjEgMDY6MjA6MTAgMTk5NyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIG02OGsubWQgKGlvcnNpX3pleHRoaV9hc2hsMTYpOiBNYXJrIG91dHB1dCBvcGVyYW5kIGFzIGVhcmx5Y2xvYmJlci4KKworU3VuIEp1bCAyMCAwNjoxMTozMCAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBjb25maWd1cmUuaW4gKGFscGhhKi0qLSopOiBTZXQgY3B1X3R5cGUgdG8gYWxwaGEuCisJQ2hhbmdlICJhbHBoYS0iIHRvICJhbHBoYSotIiBpbiBhbGwgZW50cmllcy4KKwlTZXQgdGFyZ2V0X2NwdV9kZWZhdWx0IGZvciBldjUgYW5kIGV2NTYgc3lzdGVtcy4KKwlVc2Ugc3ltYm9saWMgbmFtZXMgZm9yIHRhcmdldF9jcHVfZGVmYXVsdC4KKwkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgZGVmYXVsdCBmb3IgYWxwaGFfY3B1CisJZnJvbSBUQVJHRVRfQ1BVX0RFRkFVTFQuCisJKiBhbHBoYS5oIChNQVNLX0NQVV9FVjUpOiBOZXcgbWFjcm8uCisKKwkqIHRyZWUuYyAoY29udGFpbnNfcGxhY2Vob2xkZXJfcCk6IENhbGwgY29udGFpbnNfdGhpc19wbGFjZWhvbGRlcl9wLgorCShjb250YWluc190aGlzX3BsYWNlaG9sZGVyX3ApOiBSZW5hbWVkIGZyb20gY29udGFpbnNfcGxhY2Vob2xkZXJfcC4KKwlBZGRlZCBuZXcgYXJnLCBQTC4KKwlSZXdvcmsgdG8gbWFrZSBtb3JlIGNvbnNpc3RlbnQsIGNoZWNrIG1vcmUgY29kZXMsIGFuZCBhdm9pZAorCXVuZGVmaW5lZCBmaWVsZHMuCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFBMQUNFSE9MREVSX0VYUFIpOiBQaWNrIG91dGVybW9zdAorCW9iamVjdCBpbiBwbGFjZWhvbGRlcl9saXN0IG9mIHJpZ2h0IHR5cGUgd2l0aG91dCBhIFBMQUNFSE9MREVSX0VYUFIuCisKK1NhdCBKdWwgMTkgMTg6MDA6MDEgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogYWxwaGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IEFsbG93IHByb2Nlc3NvciBvZiBldjU2IG9yIDIxMTY0YS4KKwkoaW5wdXRfb3BlcmFuZCwgY2FzZSBNRU0pOiBDb3JyZWN0IHRlc3QgaW52b2x2aW5nIFRBUkdFVF9CWVRFX09QUy4KKwkqIGFscGhhLmggKFNFQ09OREFSWV97SU4sT1VUfVBVVF9SRUxPQURfQ0xBU1MpOiBEb24ndCBuZWVkIGZvcgorCVFJbW9kZSBvciBISW1vZGUgaWYgVEFSR0VUX0JZVEVfT1BTLgorCShBU01fRklMRV9TVEFSVCk6IFdyaXRlIGEgLmFyY2ggZGlyZWN0aXZlLgorCShTVEFDS19DSEVDS19CVUlMVElOKTogTmV3IG1hY3JvLgorCSogYWxwaGEubWQgKHt6ZXJvXyx9ZXh0ZW5kW3FoXWlbZHNoXWkyKTogUmV3b3JrIFRBUkdFVF9CWVRFX09QUyBjYXNlcy4KKwkobW92W2hxXWkpOiBMaWtld2lzZS4KKwkoZXh0ZW5kW3FoXWlbaHNkXWkyeCk6IEFkZCBtaXNzaW5nIGNhc2VzIGFuZCBmaXggdHlwbyBpbiBjb25zdHJhaW50LgorCShyZWxvYWRfe2luLG91dH1bcWhdaSk6IERpc2FibGUgZm9yIFRBUkdFVF9CWVRFX09QUy4KKworRnJpIEp1bCAxOCAyMzoyNDo1NyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogRG9uJ3QgdXNlIEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FIGZvcgorCWxvY2FsIGRlY2xzIHdpdGggVFJFRV9QVUJMSUMgc2V0LgorCShiY19tYWtlX2RlY2xfcnRsKTogTGlrZXdpc2UuCisKK0ZyaSBKdWwgMTggMjI6MTY6MjggMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEludm9rZSBBQ19DT05GSUdfSEVBREVSLgorCUNoZWNrIGZvciBzdHJpbmcuaCwgc3RyaW5ncy5oLCBzdGRsaWIuaCwgdGltZS5oLCB1bmlzdGQuaC4KKwlDaGVjayBmb3Igd2hldGhlciBtYWxsb2MvcmVhbGxvYy9mcmVlIG5lZWQgdG8gYmUgZGVjbGFyZWQuCisJKGxpbmtzKTogUmVuYW1lIGNvbmZpZy5oIHRvIGNvbmZpZzIuaC4KKwkoQUNfT1VUUFVUKTogQ3JlYXRlIGNzdGFtcC1oLgorCSogTWFrZWZpbGUuaW4gKGNvbmZpZy5pbixjc3RhbXAtaC5pbik6IEFkZCBydWxlcyBmb3IuCisJKGNvbmZpZy5oLGNzdGFtcC1oKTogQWRkIHJ1bGVzIGZvci4KKwkoZGlzdGNsZWFuKTogRGVsZXRlIGNvbmZpZzIuaCwgY3N0YW1wLWguCisJKEFMTF9DRkxBR1MpOiBBZGQgQERFRlNALgorCSogYWNsb2NhbC5tNCwgYWNjb25maWcuaDogTmV3IGZpbGVzLgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogRGVsZXRlIE1ha2UtaG9zdCwgTWFrZS10YXJnZXQuCisJKiBjb25maWd1cmUuaW4gKGhvc3Rfb3ZlcnJpZGVzKTogU2V0IHRvIGhvc3RfeG1ha2VfZmlsZSwgZG9uJ3QgY3JlYXRlCisJTWFrZS1ob3N0LgorCSh0YXJnZXRfb3ZlcnJpZGVzKTogU2V0IHRvIHRtYWtlX2ZpbGUsIGRvbid0IGNyZWF0ZSBNYWtlLXRhcmdldC4KKwkobGFuZ3VhZ2Ugc3ViZGlyIHN1cHBvcnQpOiBLZWVwIHRvZ2V0aGVyLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogU2V0IERFQ0xfQUJTVFJBQ1RfT1JJR0lOIHRvIG9sZGRlY2wKKwlpZiBpbmxpbmUgZnVuY3Rpb24gYW5kIG5vdCBuZXcgZGVmaW5pdGlvbi4KKworCSogY29uZmlndXJlLmluOiBEb24ndCBsb29wIHRyeWluZyB0byBjb25maWd1cmUgbGFuZ3VhZ2Ugc3ViZGlycy4KKwlEb24ndCBwYXNzIHRvIGNvbmZpZ3VyZS5sYW5nIHZhcmlhYmxlcyBpdCBkb2Vzbid0IHVzZS4KKwkqIGNvbmZpZ3VyZS5sYW5nOiBEZWxldGUgdG9wIGxldmVsIGRpcmVjdG9yeSBmcm9tIGxvb3AuCisJRGVsZXRlIGNvZGUgbm90IHVzZWZ1bCBmb3IgbGFuZ3VhZ2Ugc3ViZGlycy4KKworRnJpIEp1bCAxOCAwODoxMjo1MyAxOTk3ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQ2FsbCByZWxvYWRfY3NlX3JlZ3MgaGVyZS4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRG9uJ3QgY2FsbCBpdCBoZXJlLgorCShyZWxvYWRfY3NlX21lbV9jb25mbGljdF9wKTogUmVtb3ZlIE1FTV9PRkZTRVQgYW5kIE1FTV9NT0RFIGFyZ3MuCisJKHJlbG9hZF9jc2VfbWVtX2NvbmZsaWN0X3AsIGNhc2UgTUVNKTogQ2FsbCBhbnRpX2RlcGVuZGVuY2UuCisJKHJlbG9hZF9jc2VfaW52YWxpZGF0ZV9tZW0pOiBVcGRhdGUgY2FsbCB0byByZWxvYWRfY3NlX21lbV9jb25mbGljdF9wLgorCShyZWxvYWRfY3NlX3JlZ3MpOiBObyBsb25nZXIgc3RhdGljLgorCUNhbGwgaW5pdF9hbGlhc19hbmFseXNpcy4KKwlJZ25vcmUgQ0xPQkJFUiBpbiBhIFBBUkFMTEVMLgorCitGcmkgSnVsIDE4IDA2OjQ0OjIyIDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBvYmpjL01ha2UtbGFuZy5pbiAob2JqYy1oZWFkZXJzKTogRml4IGNvbW1hbmQgZm9yIHRoZSBuZXcgYnVpbGQKKwlkaXJlY3RvcnkgbGF5b3V0LCBkb24ndCBwYXNzIHNyY2RpciB2YXJpYWJsZS4KKwkqIG9iamMvTWFrZWZpbGUuaW4gKGNvcHktaGVhZGVycyk6IFVzZSAkKHNyY2RpcikgZnJvbSB0aGlzCisJbWFrZWZpbGUsIG5vdCB0aGUgcGFyZW50J3MuCisKK1RodSBKdWwgMTcgMTY6MDM6MDMgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUubGFuZyAoRVhUUkFfSEVBREVSUyxFWFRSQV9QQVNTRVMsRVhUUkFfUEFSVFMpOiBEZWxldGUuCisJKEVYVFJBX1BST0dSQU1TLEVYVFJBX09CSlMsRVhUUkFfR0NDX09CSlMsTURfREVQUyk6IERlbGV0ZS4KKwkodmVyc2lvbikgRGVsZXRlIGR1cGxpY2F0ZSBlbnRyeS4KKwkqIGNvbmZpZ3VyZS5pbiAobWVyZ2VkX2ZyYWdzKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZS4KKwkoZXh0cmFfaGVhZGVyc19saXN0KTogTW92ZSBzZXR0aW5nIG91dHNpZGUgb2Ygc3ViZGlyIGxvb3AuCisJKGV4dHJhX2hlYWRlcnMsZXh0cmFfcGFzc2VzKTogRG9uJ3QgcGFzcyB0byBjb25maWd1cmUubGFuZy4KKwkoZXh0cmFfcHJvZ3JhbXMsZXh0cmFfcGFydHMsZXh0cmFfb2Jqcyk6IExpa2V3aXNlLgorCShob3N0X2V4dHJhX2djY19vYmpzLGd4eF9pbmNsdWRlX2RpcixtZF9jcHBmbGFncyk6IExpa2V3aXNlLgorCitUaHUgSnVsIDE3IDA3OjAwOjQzIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGV4cHIuaCAoU1RBQ0tfQ0hFQ0tfKik6IFByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMuCisJKHByb2JlX3N0YWNrX3JhbmdlKTogTmV3IGRlY2xhcmF0aW9uLgorCSogZmxhZ3MuaCAoZmxhZ19zdGFja19jaGVjayk6IExpa2V3aXNlLgorCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBDYWxsIHByb2JlX3N0YWNrX3JhbmdlLgorCShlbWl0X3N0YWNrX3Byb2JlLCBwcm9iZV9zdGFja19yYW5nZSk6IE5ldyBmdW5jdGlvbnMuCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogSWYgZnVuY3Rpb24gaXMgbm9uLWxlYWYgYW5kIHN0YWNrIAorCWNoZWNraW5nIGlzIHJlcXVlc3RlZCwgZW1pdCBuZWVkZWQgcHJvYmVzLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBJZiBjaGVja2luZyBzdGFjaywgdmVyaWZ5IGZyYW1lIHNtYWxsIGVub3VnaC4KKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBJZiBzdGFjayBjaGVja2luZywgdXNlIGFsbG9jYSBmb3IgbGFyZ2UgdmFycy4KKwkqIHRvcGxldi5jIChmbGFnX3N0YWNrX2NoZWNrKTogTmV3IHZhcmlhYmxlLgorCShmX29wdGlvbnMpOiBBZGQgInN0YWNrLWNoZWNrIi4KKworCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogUGFzcyBGSVJTVF9QU0VVRE9fUkVHSVNURVIgdG8KKwljYWxsIHRvIEVYRUNVVEVfSUZfU0VUX0lOX1JFR19TRVQuCisKK1dlZCBKdWwgMTYgMTQ6NTE6MDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBpOTYwLmggKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IFVzZSBzdGFuZGFyZCBtZXRob2QgdG8gY29udmVydCBBTElHTgorCXRvIHBvd2VyLW9mLXR3byBvZiBieXRlcy4KKworCSogc3BhcmMuaCAoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IERlZmluZS4KKwkqIHNwYXJjL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBVbmRlZiBiZWZvcmUgZGVmaW5pdGlvbi4KKworV2VkIEp1bCAxNiAxNDozNDowOSAxOTk3ICBLbGF1cyBFc3BlbmxhdWIgIChrZXNwZW5sYUBoeWRyYS5pbmZvcm1hdGlrLnVuaS11bG0uZGUpCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogSW5pdGlhbGl6ZSBhbGwgYXJndmVjIGVsZW1lbnRzLgorCitXZWQgSnVsIDE2IDE0OjMxOjM5IDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogUGFzcyBGSVJTVF9QU0VVRE9fUkVHSVNURVIgdG8KKwljYWxsIHRvIEVYRUNVVEVfSUZfU0VUX0lOX1JFR19TRVQuCisKK1dlZCBKdWwgMTYgMTA6NTc6MDMgMTk5NyAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAY2FtYnJpZGdlLmFybS5jb20pCisKKwkqIEZyb20gUm9iIEJsYWNrIChyLmJsYWNrQGljLmFjLnVrKSBhbmQgTWFyayBCcmluaWNvbWJlCisJKGFtYkBwaHlzaWcucGgua2NsLmFjLnVrKToKKwkqIGNvbmZpZ3VyZS5pbiAoYXJtLSotbmV0YnNkKik6IE5ldyBjb25maWd1cmF0aW9uLgorCSogYXJtL25ldGJzZC5oLCBhcm0vdC1uZXRic2QsIGFybS94bS1uZXRic2QuaDogTmV3IGZpbGVzLgorCQorV2VkIEp1bCAxNiAxMDo1NzowMyAxOTk3ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBjYW1icmlkZ2UuYXJtLmNvbSkKKworCSogYXJtLmMgKHR1bmVfZmxhZ3MpOiBOZXcgdmFyaWFibGUuCisJKHRhcmdldF97Y3B1LGZwZX1fbmFtZSk6IERlbGV0ZS4KKwkoYXJtX2ZwdV9hcmNoKTogTmV3IHZhcmlhYmxlLgorCShhcm1fc2VsZWN0KTogQWxzbyBhbGxvdyAtbWFyY2g9Li4uIHRvIGNvbmZpZ3VyZSBqdXN0IHRoZSAKKwlhcmNoaXRlY3R1cmUuCisJKGFsbF9wcm9jcyk6IEFsbG93IGFybXZ7MiwyYSwzLDNtLDQsNHR9IGZvciB1c2Ugd2l0aCAtbWFyY2g9LgorCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IEhhbmRsZSAtbWFyY2g9LCBidXQgZG9uJ3QgbGV0IC1tY3B1PQorCWFuZCAtbXR1bmU9IG1hdGNoIHRoZSBhcmNoaXRlY3R1cmUgbmFtZXMsIHNpbmNlIHdlIGNhbiBvbmx5CisJdHVuZSBmb3IgYW4gaW1wbGVtZW50YXRpb24uICBSZXdvcmsgc2VsZWN0aW9uIG9mIHR1bmluZyBvcHRpb25zCisJZm9yIGZsb2F0aW5nIHBvaW50LgorCSh1c2VfcmV0dXJuX2luc24pOiBTdXBwb3J0IGludGVyd29ya2luZyB3aXRoIFRodW1iIGNvZGUuCisJKGFybV9ydHhfY29zdHMpOiBSZXdvcmsgbXVsdGlwbHkgY29zdHMgc28gdGhhdCBjb3N0IGlzIGJhc2VkIG9uCisJdGhlIHR1bmUsIG5vdCB0aGUgYXJjaGl0ZWN0dXJlLgorCShmX3JlZ2lzdGVyX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24pOiBTdXBwb3J0IGludGVyd29ya2luZyB3aXRoIFRodW1iIGNvZGUuCisJKG91dHB1dF9mdW5jX2VwaWxvZ3VlKTogU3VwcG9ydCBpbnRlcndvcmtpbmcgd2l0aCBUaHVtYiBjb2RlLgorCVJlbW92ZSByZWR1bmRhbnQgY2FsY3VsYXRpb24gb2YgY29kZV9zaXplLiBVc2UgZmxvYXRpbmctcG9pbnQKKwlsb2FkLW11bHRpcGxlcyBpZiBwZXJtaXR0ZWQuCisJKGVtaXRfc2ZtKTogTmV3IGZ1bmN0aW9uLgorCShhcm1fZXhwYW5kX3Byb2xvZ3VlKTogVXNlIGZsb2F0aW5nLXBvaW50IHN0b3JlLW11bHRpcGxlcyBpZiAKKwlwZXJtaXR0ZWQuCisKKwkqIGFybS5oIChDUFBfQ1BVX0FSQ0hfU1BFQyk6IEhhbmRsZSAtbWFyY2g9Li4uCisJKFRBUkdFVF9PUFRJT05TKTogQWRkIGFyY2g9IGFuZCBmcD0uICBEZWxldGUgZnBlPS4KKwkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfTk9ORSwgZm9yIHVzZSBpbiBhbGxfcHJvY3MgdGFibGUuCisJKEZQX0RFRkFVTFQpOiBEZWZhdWx0IGZsb2F0aW5nIHBvaW50IGFyY2hpdGVjdHVyZSBmb3IgZ2VuZXJpYyAKKwliYWNrLWVuZC4KKwkoUFJFRElDQVRFX0NPREVTKTogQWRkIGZfcmVnaXN0ZXJfb3BlcmFuZC4KKworCSogYXJtLm1kICgqcHVzaF9mcF9tdWx0aSk6IE5ldyBwYXR0ZXJuLgorCisKK1R1ZSBKdWwgMTUgMjI6MDg6NDcgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbiAoZXhlZXh0KTogU2V0IHRvIGJ1aWxkX2V4ZWV4dCBub3QgZXhlZXh0LgorCSogY29uZmlndXJlLmluIChleGVleHQpOiBEZWxldGUgcmVkdW5kYW50IHNldCBhbmQgQUNfU1VCU1QgY2FsbC4KKwlDaGFuZ2UgcmVtYWluaW5nIEFDX1NVQlNUIHRvIHVzZSBidWlsZF9leGVleHQgaW5zdGVhZCBvZiBleGVleHQuCisKK1R1ZSBKdWwgMTUgMTU6NDg6MjUgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlLmluOiBGaXggY2FsY3VsYXRpb24gaWYgZGVmYXVsdCB0aHJlYWQgc3VwcG9ydCBpcyBlbmFibGVkLgorCitUdWUgSnVsIDE1IDEzOjM4OjQ2IDE5OTcgIE1pa2UgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBydGwuaCAocmVwbGFjZV9yZWdzKTogRGVjbGFyZS4KKworTW9uIEp1bCAxNCAxNjoxODoxOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGk5NjAuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IERlZmluZS4KKworCSogZHdhcmYyb3V0LmMgKGdlbl9zdWJwcm9ncmFtX2RpZSk6IFJlbW92ZSB1bnJlYWNoYWJsZSBhbmQgcmVkdW5kYW50CisgCWNvZGUuCisKK01vbiBKdWwgMTQgMTQ6MjI6NDUgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBjYWxscy5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IFVzZSByaWdodCBpbmRleCBpbnRvIGFyZ3ZlYyBhcnJheQorCXdoZW4gaXRlcmF0aW5nIG92ZXIgYXJndW1lbnRzIHdoaWNoIG5lZWQgdG8gYmUgcHVzaGVkIG9uIHRoZSBzdGFjay4KKwkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KKworTW9uIEp1bCAxNCAwODoxNzo0MSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBnY2MuYyAoY29udmVydF9maWxlbmFtZSk6IEZpeCB0eXBvLgorCitNb24gSnVsIDE0IDA4OjEwOjEyIDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBjb25maWd1cmUuaW46IENsZWFyIGhlYWRlcnMgYW5kIGxpYjJmdW5jcyBiZWZvcmUgcmUtcmVhZGluZworCWNvbmZpZy1sYW5nLmluLgorCisJKiBtNjhrL2xpbnV4LmggKExJTktfU1BFQyk6IEZpeCBsYXN0IGNoYW5nZS4KKworTW9uIEp1bCAxNCAwODowMzozOCAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUuaW4gKHNwYXJjLSotbGludXgtZ251eyosbGliYzEqfSk6IEFkZCBzcGFyYy90LWxpbnV4LgorCSogc3BhcmMvdC1saW51eDogTmV3IGZpbGUuCisKKwkqIGFscGhhL2VsZi5oIChMSU5LX1NQRUMpOiBGaXggdHlwby4KKwkqIGNvbmZpZ3VyZS5pbiAoYWxwaGEtKi1saW51eC1nbnUqKTogU2V0IHRtYWtlX2ZpbGUuCisJKiBhbHBoYS90LWxpbnV4OiBOZXcgZmlsZS4KKworTW9uIEp1bCAxNCAwNzo0MTozNyAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgorCisJKiBtNjhrLmMgKG91dHB1dF97YW5kLGlvcix4b3J9c2kzKTogTmV3IGZ1bmN0aW9ucyBmcm9tIHBhdHRlcm5zIGJvZGllcy4KKwkqIG02OGsuaCAob3V0cHV0X3thbmQsaW9yLHhvcn1zaTMpOiBOZXcgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKwkqIG02OGsubWQgKGFkZGRpMywgc3ViZGkzKTogQWxsb3cgY29uc3RhbnQgb3BlcmFuZC4KKwkoYW5kZGkzLCBpb3JkaTMsIHhvcmRpMyk6IE5ldyBwYXR0ZXJucy4KKwkoe2FuZCxpb3IseG9yfXNpM19pbnRlcm5hbCk6IFVzZSBjb3JyZXNwb25kaW5nIG91dHB1dF8/Pz9zaTMgZnVuY3Rpb24uCisKK01vbiBKdWwgMTQgMDc6MzM6MTEgMTk5NyAgRmlsYSBLb2xvZG55ICA8ZmlsYUBpYmkuY29tPgorCisJKiBjb25maWd1cmUuaW4gKCotKi1nbnUqKTogQWRkIGNydHtiZWdpbixlbmR9Uy5vIHRvIGV4dHJhX3BhcnRzLgorCitNb24gSnVsIDE0IDA3OjI2OjM2IDE5OTcgIENyYWlnIEJ1cmxleSAgPGJ1cmxleUBnbnUuYWkubWl0LmVkdT4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogSWYgbG93IHBhcnQgb2Ygc2l6ZQorCWRvZXNuJ3QgZml0IGluIGFuIGludCwgdmFyaWFibGUgaXMgdG9vIGxhcmdlLgorCitNb24gSnVsIDE0IDA2OjUxOjM3IDE5OTcgIE1pa2UgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBiaXRtYXAue2gsY306IE5ldyBmaWxlcy4KKwkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGJpdG1hcC5vLgorCShCQVNJQ19CTE9DS19IKTogTmV3IG1ha2UgdmFyaWFibGUgZm9yIGJhc2ljLWJsb2NrLmgsIGJpdG1hcC5oLgorCSh7Zmxvdyxjb21iaW5lLHJlZ2NsYXNzLGxvY2FsLWFsbG9jLHJlbG9hZDEscmVvcmcsc2NoZWR9Lm8pOiBVc2UKKwlCQVNJQ19CTE9DS19IIHZhcmlhYmxlIGluc3RlYWQgb2YgYmFzaWMtYmxvY2suaC4KKwkqIGJhc2ljLWJsb2NrLmggKCpSRUdfU0VUKTogRGVsZXRlIG9sZCBpbXBsZW1lbnRhdGlvbjsgdXNlIGJpdG1hcC5oLgorCShyZWdzZXRfe3NpemUsYnl0ZXN9KTogRGVsZXRlLgorCShyZWdzX2xpdmVfYXRfc2V0am1wKTogRGVjbGFyZS4KKwkoRVhFQ1VURV9JRl9TRVRfQU5EX1JFU0VUX0lOX1JFR19TRVQpOiBEZWxldGUuCisJKiBmbG93LmMgKGluaXRfcmVnc2V0X3ZlY3Rvcik6IE1ha2UgZ2xvYmFsOyBkb24ndCB0YWtlIGJhc2ljIGJsb2NrCisJdGltZXMgIyBvZiBwc2VkdW9zIGFzIGFyZ3VtZW50LgorCShsaWZlX2FuYWx5c2lzKTogQ2hhbmdlIGFsbCBpbml0X3JlZ3NldF92ZWN0b3IgY2FsbHMuCisJVXNlIGZyZWVfcmVnc2V0X3ZlY3RvciB0byByZWxlYXNlIGFycmF5cyBvbmx5IGZsb3cgdXNlcyBhdCBlbmQuCisJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogQ2hhbmdlIGluaXRfcmVnc2V0X3ZlY3RvciBjYWxsLgorCURvbid0IHNldCByZWdzZXRfe3NpemUsYnl0ZXN9LgorCShmcmVlX3JlZ3NldF92ZWN0b3IpOiBDYWxsIEZSRUVfUkVHX1NFVCB0byByZWxlYXNlIGFueQorCW1lbW9yeSBhbGxvY2F0ZWQgYnkgZWFjaCB2ZWN0b3IuCisJKHByb3BhZ2F0ZV9ibG9jayk6IENhbGwgRlJFRV9SRUdfU0VUIG9uIGRlYWQvbGl2ZS4KKwkobWFya191c2VkX3JlZ3MpOiBEb24ndCB1c2UgUkVHU0VUX0VMVF9UWVBFIGFueW1vcmUuCisJKiBvdXRwdXQuaCAoYWxsb2NhdGVfZm9yX2xpZmVfYW5hbHlzaXMpOiBBZGQgZGVjbGFyYXRpb24uCisJKHJlZ25vX3VuaW5pdGlhbGl6ZWQsIHJlZ25vX2Nsb2JiZXJlZF9hdF9zZXRqbXApOiBMaWtld2lzZS4KKwkoZHVtcF9mbG93X2luZm8sIGZsb3dfYW5hbHlzaXMpOiBMaWtld2lzZS4KKwkqIHJlZ2NsYXNzLmMgKGluaXRfcmVnX3NldHMpOiBJbnZva2UgSU5JVF9PTkNFX1JFR19TRVQuCisJKGFsbG9jYXRlX3JlZ19pbmZvKTogSW52b2tlIE1BWF9SRUdOT19SRUdfU0VULgorCShyZWdzZXRfcmVsZWFzZV9tZW1vcnkpOiBGcmVlIGJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQgc3RvcmFnZS4KKwkqIHJlb3JnLmMgKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGVzLgorCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBGcmVlIHNwYWNlIGFzc29jaWF0ZWQgd2l0aAorCXJlZ19wZW5kaW5nX3NldHMgYW5kIG9sZF9saXZlX3JlZ3MuCisJKHNjaGVkdWxlX2luc25zKTogRnJlZSBiYl97ZGVhZCxsaXZlfV9yZWdzIG9uIGZpcnN0IHBhc3MuCisJKHNjaGVkX2FuYWx5emVfaW5zbik6IFVzZSBFWEVDVVRFX0lGX1NFVF9JTl9SRUdfU0VUIGFuZCB0aGVuIGNsZWFyLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIHJlZ3NldF9yZWxlYXNlX21lbW9yeS4KKworTW9uIEp1bCAxNCAwMDoxNDoxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChtYWluKTogUHJlZmVyIERXQVJGIDIgb3Igc3RhYnMgd2l0aCAtZ2dkYi4KKwkqIG5zMzJrL3RlazYwMDAuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogREJYX0RFQlVHLgorCSogYWxwaGEuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogU0RCX0RFQlVHLgorCSogbWlwcy5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBTREJfREVCVUcuCisKK1N1biBKdWwgMTMgMTU6MTE6MDggMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogc3R1cGlkLmMgKHN0dXBpZF9tYXJrX3JlZnMpOiBJZiBzZXR0aW5nIHJlZyBzZXQgb25seSBpbiB0aGlzCisJaW5zbiBhbmQgbm90IHJlZmVyZW5jZWQsIG1ha2UgUkVHX1VOVVNFRCBub3RlLgorCitTdW4gSnVsIDEzIDE0OjAzOjE5IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogSWYgLXNhdmUtdGVtcHMgYW5kIC1waXBlIHdlcmUgc3BlY2lmaWVkCisJdG9nZXRoZXIsIGRvbid0IGRvIC1waXBlLgorCitTdW4gSnVsIDEzIDEyOjI3OjAzIDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogZ2NjLmMgKG1haW4pOiBIYW5kbGUgYmxhbmsgaW4gdmVyc2lvbl9zdHJpbmcgd2hlbiBjb21wYXJpbmcKKwl3aXRoIGNvbXBpbGVyX3ZlcnNpb24uCisKK1NhdCBKdWwgMTIgMDE6NTM6NTUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBzcGFyYy5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBGaXggb2Zmc2V0IGZyb20gQ0ZBLgorCShzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IExpa2V3aXNlLgorCitGcmkgSnVsIDExIDA5OjQ5OjE1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKwkKKwkqIG1pcHMuYyAoZXBpbG9ndWVfcmVnX21lbnRpb25lZF9wKTogRGVsZXRlIHVudXNlZCBmdW5jdGlvbi4KKwkobWlwc19lcGlsb2d1ZV9kZWxheV9zbG90cyk6IExpa2V3aXNlLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IEdyZWF0bHkgc2ltcGxpZnkuCisJKG1pcHNfZXhwYW5kX2VwaWxvZ3VlKTogSWYgd2UgaGF2ZSBhIG51bGwgcHJvbG9ndWUvZXBpbG9ndWUsCisJdGhlbiB1c2UgYSBub3JtYWwgcmV0dXJuIGluc24uICBFbWl0IGJsb2NrYWdlIGluc25zIGJlZm9yZQorCXN0YWNrIHBvaW50ZXIgYWRqdXN0bWVudHMuCisJKG1pcHNfY2FuX3VzZV9yZXR1cm5faW5zbik6IFJlbmFtZWQgZnJvbSBzaW1wbGVfZXBpbG9ndWVfcC4gIEFsbAorCWNhbGxlcnMgY2hhbmdlZC4gIERvIG5vdCB1c2UgcmV0dXJuIGluc25zIGlmICQzMSBpcyBsaXZlIGluIHRoZQorCWZ1bmN0aW9uIG9yIGlmIGdlbmVyYXRpbmcgcHJvZmlsaW5nIGluZm9ybWF0aW9uLgorCSogbWlwcy5oIChERUxBWV9TTE9UU19GT1JfRVBJTE9HVUUpOiBEZWxldGUuCisJKEVMSUdJQkxFX0ZPUl9FUElMT0dVRV9ERUxBWSk6IExpa2V3aXNlLgorCSogbWlwcy5tZCAocmV0dXJuKTogUmVtb3ZlIGV4cGFuZGVyIGFuZCBjaGFuZ2UgdGhlIHBhdHRlcm4gdG8KKwlsb29rIGxpa2UgYSBzdGFuZGFyZCAicmV0dXJuIiBpbnNuLgorCShyZXR1cm5faW50ZXJuYWwpOiBTaG93IHVzZSBvZiAkMzEgZXhwbGljdGx5LgorCShlcGlsb2d1ZSBleHBhbmRlcik6IEVuYWJsZS4KKworVGh1IEp1bCAxMCAxMzowNDo1MyAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGNjY3AuYyAoSU5PX1RfRVEpOiBSZXR1cm4gMCBmb3IgTVNET1MuCisKKwkqIE1ha2VmaWxlLmluIChDQyk6IFVzZSBhdXRvY29uZiB2YWx1ZS4KKworVHVlIEp1bCAgOCAxODowODowMCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChnZW5fc3VicHJvZ3JhbV9kaWUpOiBXaGVuIGhhbmRsaW5nIGRlY2xhcmF0aW9ucywgdGVzdAorCURFQ0xfQ09OVEVYVCBub3QgZGVjbF9jbGFzc19jb250ZXh0IGJlZm9yZSBlcXVhdGVfZGVjbF9udW1iZXJfdG9fZGllLgorCitUdWUgSnVsICA4IDE2OjQ3OjEzIDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAubWQgKG1vdnNpIGRlZmluZV9zcGxpdCk6IFVzZSB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAorCW5vdCB1bnNpZ25lZC4KKworU2F0IEp1bCAgNyAwMDowMTo0MSAxOTk3ICBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGVuZy5hc2NlbmQuY29tPgorCisJKiBpMzg2L3Qtc29sMiAoY3J0WzFpbl0ubyk6IEFsc28gZGVwZW5kIG9uICQoR0NDX1BBU1NFUykuCisKK0ZyaSBKdWwgIDQgMTE6NDU6MzkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBkd2FyZjJvdXQuYyAoRFdBUkZfQ0lFX0hFQURFUl9TSVpFLCBEV0FSRl9GREVfSEVBREVSX1NJWkUsCisgCXNpemVfb2ZfY2ZpLCBzaXplX29mX2ZkZSwgY2FsY19mZGVfc2l6ZXMsIG5leHRfZmRlX29mZnNldCwKKyAJY2llX3NpemUpOiBMb3NlLgorCShBU01fT1VUUFVUX0RXQVJGX1NUUklORyk6IE1vdmUgZWFybGllci4KKwkoSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUKTogUHJvdmlkZSBkZWZhdWx0LgorCShpbml0aWFsX3JldHVybl9zYXZlKTogQWRqdXN0IGZvciBDRkEgb2Zmc2V0LgorCShkd2FyZjJvdXRfZnJhbWVfZGVidWcpOiBMb29rdXAgaW5pdGlhbCBDRkEgb2Zmc2V0IHdoZW4gc2V0dGluZyB1cC4KKwkob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IFVzZSBsYWJlbCBzdWJ0cmFjdGlvbiBmb3IgbGVuZ3RoIGZpZWxkcy4KKyAgCUFkZCBwb2ludGVyIHRvIGV4Y2VwdGlvbiByZWdpb24gaW5mb3JtYXRpb24gaW4gZm9yX2VoIGNhc2UuCisJKGR3YXJmMm91dF9kb19mcmFtZSk6IE5ldyBmbi4KKwkoZHdhcmYyb3V0X2ZyYW1lX2luaXQpOiBVc2UgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VULgorCShkd2FyZjJvdXRfZnJhbWVfZmluaXNoKTogRG9uJ3QgYm90aGVyIGVtaXR0aW5nIC5kZWJ1Z19mcmFtZSBmb3IKKwlub24tSXJpeCB0YXJnZXRzLiAgSnVzdCBlbWl0IC5laF9mcmFtZS4KKwkob3V0cHV0X2RpZSk6IFJlZmVyIHRvIGFuIEZERSB3aXRoIGxhYmVsIHN1YnRyYWN0aW9uLgorCSogaTM4Ni5oIChJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQpOiBEZWZpbmUuCisJKiBkZWZhdWx0cy5oIChEV0FSRjJfVU5XSU5EX0lORk8pOiBEZWZpbmUgaWYKKyAJSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYIGlzIHByb3ZpZGVkLgorCSogZmluYWwuYyAoZmluYWwpOiBEb24ndCBjYWxsIGR3YXJmMm91dF9mcmFtZV9kZWJ1ZyB1bmxlc3Mgd2UgYXJlCisgCWRvaW5nIGR3YXJmIDIuCisKK1RodSBKdWwgIDMgMTc6Mzc6NTIgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBmcC1iaXQuYyAodW5wYWNrX2QpOiBDaGVjayBmcmFjdGlvbiBub3Qgc2lnbiB0byBkaXN0aW5xdWlzaCBRTmFOLgorCitXZWQgSnVsICAyIDA5OjQ4OjAzIDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IE1ha2Ugc3VyZSByZWdpc3RlciBkb2VzIG5vdCBleGNlZWQgdGhlCisJdGFibGUgc2l6ZSB3aGVuIGxvb2tpbmcgdXAgdGhlIGxhc3QgVUlELgorCitXZWQgSnVsICAyIDA3OjQ3OjQ0IDE5OTcgIE5pY2sgQnVycmV0dCAgPG4uYS5idXJyZXR0QGJ0aW50ZXJuZXQuY29tPgorCisJKiBnZW5vdXRwdXQuYyAocHJvY2Vzc190ZW1wbGF0ZSk6IFBsYWNlIGluY3JlbWVudCBleHByZXNzaW9uCisJb3V0c2lkZSBvZiBwdXRjaGFyIGZ1bmN0aW9uIGNhbGwuCisKK1dlZCBKdWwgIDIgMDY6NTY6NTIgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMvbGludXguaCAoTElCR0NDX1NQRUMpOiBSZW1vdmVkLgorCShDQzFfU1BFQyk6IEFkZCAle3Byb2ZpbGU6LXB9LgorCSh7Q1BQLExJQixMSU5LfV9TUEVDKTogQ2hvb3NlIGdsaWJjIDEgb3IgMiBkZXBlbmRpbmcgb24gVVNFX0dOVUxJQkNfMS4KKwkqIGNvbmZpZ3VyZS5pbiAoc3BhcmMtKi1saW51eC1nbnVsaWJjMSopOiBOZXcgY29uZmlndXJhdGlvbi4KKworCSogY29uZmlndXJlLmluIChwb3dlcnBjLSotbGludXhnbnUqKTogRGVmYXVsdCB0aHJlYWRfZmlsZSBpcyBwb3NpeC4KKwlTZXQgeG1ha2VfZmlsZSB0byB4LWxpbnV4LiAgQWRkIGV4dHJhX3BhcnRzLgorCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1BFQyk6IERlZmluZWQuCisKKwkqIG02OGsvbGludXguaCAoTElOS19TUEVDKTogUGFzcyAtc2hhcmVkIGZvciAtc2hhcmVkLgorCSh7Q1BQLExJTkt9X1NQRUMpOiBDaG9vc2UgZm9yIGdsaWJjIDEgb3IgMiBkZXBlbmRpbmcgb24gVVNFX0dOVUxJQkNfMS4KKwkqIGNvbmZpZ3VyZS5pbiAobTY4ay0qLWxpbnV4LWdudSopOiBEZWZhdWx0IHRocmVhZF9maWxlIGlzIGBwb3NpeCcuCisJKG02OGstKi1saW51eC1nbnVsaWJjMSk6IE5ldyBjb25maWd1cmF0aW9uLgorCisJKiBhbHBoYS9lbGYuaCAoTElOS19TUEVDKTogQ2hhbmdlIGxkLWdudS5zby4xIHRvIGxkLWxpbnV4LnNvLjIuCisJKiBjb25maWd1cmUuaW4gKGFscGhhLSotbGludXgtZ251Kik6IERlZmF1bHQgdGhyZWFkX2ZpbGUgaXMgYHBvc2l4Jy4KKworV2VkIEp1bCAgMiAwNjoxMjozNyAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBhbHBoYS5tZCAoZGl2c2kzLCBtb2RzaTMsIHVkaXZzaTMpOiBDb21tZW50IG91dC4KKwkoZXh0ZW5kc2ZzZDJfbm9fdHApOiBBZGQgYWx0ZXJuYXRpdmUgd2l0aCBvdXRwdXQgaW4gTUVNLCBpbnB1dCBpbiBSRUcuCisKKwkqIGNvbmZpZ3VyZS5pbiAoKi1saW51eCopOiBBZGQgIi1nbnUiIHRvIG5hbWVzIHRvIG1hdGNoLgorCisJKiBsaWJnY2MyLmMgKF90cmFtcG9saW5lKTogQWRkIHN0ZGNhbGwgYXR0cmlidXRlIHRvIFZpcnR1YWxQcm90ZWN0CisJb24gaTM4Ni4KKworCSogb2JqYy9vYmpjLmdwZXJmOiBSZW5hbWVkIGZyb20gZ3BlcmYuCisKK1dlZCBKdWwgIDIgMDU6NDI6MTkgMTk5NyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIG9iamMvTWFrZS1sYW5nLmluICgkKHNyY2Rpcikvb2JqYy9vYmpjLXBhcnNlLmMpOiBGaXggY29tbWFuZAorCXRvIHVzZSB0aGUgcmlnaHQgZmlsZSBuYW1lcy4KKworVHVlIEp1bCAgMSAyMzoyNTo0MiAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiByZW9yZy5jIChyZWR1bmRhbnRfaW5zbik6IElmIElOU04gb3IgcG9zc2libGUgbWF0Y2ggaGFzIFJFR19VTlVTRUQKKwlub3RlLCBkb24ndCBoYXZlIG1hdGNoLgorCitUdWUgSnVsICAxIDE4OjM2OjI0IDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChtaXBzX291dHB1dF9leHRlcm5hbCk6IERvbid0IG91dHB1dCAuZXh0ZXJuJ3MgZm9yCisJdmFyaWFibGVzIGluIHVzZXIgc3BlY2lmaWVkIHNlY3Rpb25zIHVubGVzcyB0aGV5J3JlIC5zYnNzLy5zZGF0YS4KKworVHVlIEp1bCAgMSAxODozMDoyNiAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNzZS5jIChmaW5kX2Jlc3RfYWRkcik6IEFkZCBtaXNzaW5nIHJ0eF9jb3N0IGFyZ3VtZW50cy4KKworCSogZnAtYml0LmMgKGZsb2F0X3RvX3VzaSk6IE1vdmUgY29kZSBmb3IgbmVnYXRpdmUgbnVtYmVycyBiZWZvcmUgY29kZQorCWZvciBpbmZpbml0eS4gIE1vZGlmeSBpbmZpbnR5IGNvZGUgdG8gb25seSBoYW5kbGUgcG9zaXRpdmUgaW5maW5pdGllcy4KKworVHVlIEp1bCAgMSAxMToxNjo0MSAxOTk3ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CisKKwkqIGZpeGluYy5zY286IFJlc3RvcmUgcHdkIGFmdGVyY29weS4KKwlDb252ZXJ0IGRlY2xhcmF0aW9uIG9mIGFicyBpbiBtYXRoLmggdG8gcHJvdG90eXBlLgorCUZpeCBzdGF0aWMgZnVuY3Rpb25zIGluIHN5cy9zdGF0LmggZm9yIEMrKy4KKworVHVlIEp1bCAgMSAxMDo1NTo0NyAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kICh7YWRkLGlvcix4b3J9c2kzKTogQ2hhbmdlIHRvIHVzZSBkZWZpbmVfZXhwYW5kIHdyYXBwZXIKKwlhbmQgc3BsaXQgYWRkL2lvci94b3Igb2YgbGFyZ2UgY29uc3RhbnRzIGVhcmx5LgorCShhbmRzaTMpOiBSZW1vdmUgNi8yOSBjb2RlIHRvIGRvIGFuZCBvZiBsYXJnZSBjb25zdGFudHMuCisJKG5vciwgbmFuZCwgZXF2LCBtYXNraXIpOiBBZGQgbmFtZXMgdG8gYWxsIGxvZ2ljYWwgZGVmaW5lX2luc25zLgorCitUdWUgSnVsICAxIDA5OjAzOjM1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogaDgzMDAuaCAoQklHR0VTVF9GSUVMRF9BTElHTk1FTlQpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIG1pcHMuaCAoQklHR0VTVF9GSUVMRF9BTElHTk1FTlQpOiBMaWtld2lzZS4KKworTW9uIEp1biAzMCAxNDo1ODowMCAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHNoLmMgKHNoX2V4cGFuZF9lcGlsb2d1ZSk6IEVtaXQgYmxvY2thZ2UgaW5zbiBiZWZvcmUgY3V0dGluZworCWJhY2sgc3RhY2suCisKK1N1biBKdW4gMjkgMTE6Mjc6MDcgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5oIChUQVJHRVRfRkxBR1MpOiBBZGQgLW17LG5vLX11cGRhdGUgdG8gc3VwcHJlc3MKKwljcmVhdGluZyBsb2FkL3N0b3JlIHdpdGggdXBkYXRlIGluc3RydWN0aW9ucywgYW5kIGFsc28KKwktbXssbm8tfWZ1c2VkLW1hZGQgdG8gc3VwcHJlc3MgdGhlIGdlbmVyYXRpb24gb2YgZnVzZWQgYWRkIGFuZAorCW11bHRpcGx5IGluc3RydWN0aW9ucy4gIE1vdmUgZGVidWcgZmxhZ3MgdG8gVEFSR0VUX09QVElPTlMuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERvbid0IGFsbG93IFBSRV97SU5DLERFQ30gaWYgLW1uby11cGRhdGUuCisJKEdPX0lGX01PREVfREVQRU5ERU5UX0FERFJFU1MpOiBEaXR0by4KKwkocnM2MDAwX2RlYnVnX3tuYW1lLHN0YWNrLGFyZ30pOiBBZGQgZGVjbGFyYXRpb25zLgorCSh0b2NfaW5pdGlhbGl6ZWQpOiBMaWtld2lzZS4KKwkoZ290X25vX2NvbnN0X29wZXJhbmQpOiBMaWtld2lzZS4KKwkoUFJFRElDQVRFX0NPREVTKTogQWRkIGdvdF9ub19jb25zdF9vcGVyYW5kLgorCSh0b2Nfc2VjdGlvbik6IE1ha2UgdG9jX2luaXRpYWxpemVkIGEgZ2xvYmFsLgorCShSVFhfQ09TVFMpOiBTZXQgYXBwcm9wcmlhdGUgY29zdHMgZm9yIGFkZCwgbG9naWNhbCBvcGVyYXRvcnMgdGhhdAorCWFyZSByZWFsbHkgdHdvIGluc3RydWN0aW9ucy4KKwkKKwkqIHJzNjAwMC5jIChyczYwMDBfZGVidWdfe25hbWUsc3RhY2ssYXJnfSk6IEFkZCBkZWZpbml0aW9ucy4KKwkocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBQcm9jZXNzIGRlYnVnIGZsYWdzLgorCSh0b2NfaW5pdGlhbGl6ZWQpOiBHbG9iYWwgdG8gc2F5IHRvYyBpbml0aWFsaXplZC4KKwkoc21hbGxfZGF0YV9vcGVyYW5kKTogVXNlICNpZiBUQVJHRVRfRUxGLCBub3QgI2lmZGVmIFRBUkdFVF9TREFUQS4KKwkocnM2MDAwX2luaXRfZXhwYW5kZXJzKTogTGlrZXdpc2UuCisJKFNNQUxMX0RBVEFfUkVMT0MpOiBMaWtld2lzZS4KKwkoZ290X25vX2NvbnN0X29wZXJhbmQpOiBSZWNvZ25pemUgU1lNQk9MX1JFRiBhbmQgTEFCRUxfUkVGLgorCShyczYwMDBfbWFrZXNfY2FsbHMpOiBTeXN0ZW0gViBwcm9maWxpbmcgZG9lc24ndCBjb3VudCBhcyBhIGNhbGwuCisJKHJzNjAwMF9zdGFja19pbmZvKTogTGlrZXdpc2UuCisJKHJzNjAwMF9vdXRwdXRfbG9hZF90b2NfdGFibGUpOiBUYWtlIHJlZ2lzdGVyIG51bWJlciBhcmd1bWVudCB0bworCWRldGVybWluZSByZWdpc3RlciB0byBsb2FkLiAgR2VuZXJhdGUgY29ycmVjdCBjb2RlIGlmIG1vcmUgdGhhbgorCW9uZSB0b2MgdGFibGUgaXMgZG9uZSBpbiBTeXN0ZW0gViBkdWUgdG8gcHJvZmlsaW5nIG9yIG5vbi1sb2NhbAorCWdvdG9zLiAgSWYgU3lzdGVtIFYgdG9jIGlzIG5vdCBpbml0aWFsaXplZCwgaW5pdGlhbGl6ZSBpdCBub3cuCisJKHJzNjAwMF9hbGxvY2F0ZV9zdGFja19zcGFjZSk6IE1vdmUgY29kZSBmcm9tIG91dHB1dF9wcm9sb2cgdG8KKwlhbGxvY2F0ZSBzdGFjayBzcGFjZS4gIFRha2UgLW1uby11cGRhdGUgaW50byBhY2NvdW50LgorCShvdXRwdXRfcHJvbG9nKTogQ2FsbCByczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UuICBPbmx5IHNldAorCXJzNjAwMF9waWNfZnVuY19sYWJlbG5vIGlmIG5vdCBwcm9maWxpbmcuCisJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IEltcGxlbWVudCBTeXN0ZW0gViBwcm9maWxpbmcuCisJKGFuZF9vcGVyYW5kKTogRG9uJ3QgY2FsbCByZWdfb3Jfc2hvcnRfb3BlcmFuZC4KKwkocnM2MDAwX2ZpbmFsaXplX3BpYyk6IElmIG5vdCBvcHRpbWl6aW5nLCBpbnNlcnQgYSBVU0Ugb2YgdGhlIEdPVAorCXJlZ2lzdGVyIGFzIHRoZSBsYXN0IGluc24uCisJCisJKiByczYwMDAubWQgKGxvYWQvc3RvcmUgdXBkYXRlKTogVGFrZSAtbW5vLXVwZGF0ZSBpbnRvIGFjY291bnQuCisJSWYgLW1zb2Z0LWZsb2F0LCBzdXBwb3J0IFNGIGxvYWQvc3RvcmUgd2l0aCB1cGRhdGUgdG8gR1BSIHJlZ3MuCisJKGFsbG9jYXRlX3N0YWNrKTogVGFrZSAtbW5vLXVwZGF0ZSBpbnRvIGFjY291bnQuCisJKGFkZC9zdWJ0cmFjdCArIG11bHRpcGx5IGluc3RydWN0aW9ucyk6IFRha2UgLW1uby1mdXNlZC1tYWRkIGludG8KKwlhY2NvdW50LgorCShub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogU3BlY2lmeSByZWdpc3RlciAjIHRvIGxvYWQuCisJKHthZGQsYW5kLGlvcix4b3J9c2kzKTogUmVjb2duaXplIG9wZXJhdGlvbiBkb25lIHdpdGggZnVsbCAzMiBiaXQKKwljb25zdGFudCwgc3BsaXR0aW5nIGxhdHRlciBpZiBuZWVkIGJlLgorCShhbmRzaTMgZGVmaW5lX3NwbGl0KTogRml4IHVwIHNwbGl0dGluZyBhbmRzaTMgb2YgbGFyZ2UgY29uc3RhbnQuCisJKHtpb3IseG9yfXNpMyBkZWZpbmVfc3BsaXQpOiBVc2UgR0VOX0lOVCB0byBjcmVhdGUgaW50ZWdlciBydHgKKwl2YWx1ZXMuCisJKG1vdnNpX2dvdHssX2ludGVybmFsfSk6IFNwbGl0IHRoZSBsb2FkIG9mIGEgQ09OU1QgaW50byBsb2FkIG9mCisJdGhlIFNZTUJPTF9SRUYvTEFCRUxfUkVGIGFuZCBhbiBhZGQuCisJKG1vdnNpKTogS25vdyB0aGF0IGFkZHNpMyBjYW4gaGFuZGxlIGxhcmdlIHZhbHVlcyBub3cgZm9yIE5ULgorCisJKiBzeXN2NC5oIChUQVJHRVRfU0RBVEEpOiBSZW1vdmUgZXhwbGljaXQgYml0IGZvciAtbXNkYXRhLgorCShTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IExpa2V3aXNlLgorCShBU01fT1VUUFVUX0FMSUdORURfTE9DQUwpOiBMaWtld2lzZS4KKwkoU1VCVEFSR0VUX1NXSVRDSEVTKTogSW5kaWNhdGUgLW17LG5vLX1zZGF0YSBkb2Vzbid0IHNldCBhbnkgZmxhZ3MuCisJKEFTTV9TUEVDKTogT25seSBwYXNzIC1teyxuby19cmVnLW5hbWVzIGlmIGFzc2VtYmxpbmcgLnMvLlMgZmlsZXMuCisJKENDMV9TUEVDKTogSWYgLW1zZGF0YSwgaW52b2tlIGNvbXBpbGVyIHdpdGggLW1zZGF0YT1kZWZhdWx0LgorCShQUk9GSUxFX0JFRk9SRV9QUk9MT0dVRSk6IExpa2V3aXNlLgorCShSUzYwMDBfTUNPVU5UKTogRGVmaW5lIGFzICJfbWNvdW50Ii4KKwkodG9jX3NlY3Rpb24pOiBNYWtlIHRvY19pbml0aWFsaXplZCBhIGdsb2JhbC4KKworRnJpIEp1biAyNyAxOTowMToxMSAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvdC1saW51eC1nbnVsaWJjMTogTmV3IGZpbGUuCisJKiBjb25maWd1cmUuaW4gKGlbMzQ1Nl04Ni0qLWxpbnV4Kik6IERlZmF1bHQgdGhyZWFkX2ZpbGUgaXMgYHBvc2l4Jy4KKwkoaVszNDU2XTg2LSotbGludXgqZ251bGliYzEpOiBOZXcgY2FzZS4KKwkqIGNvbmZpZy9saW51eC5oIChMSUJfU1BFQyk6IENob29zZSBmb3IgZ2xpYmMgMSBvciAyIGRlcGVuZGluZworCW9uIFVTRV9HTlVMSUJDXzEuCisJKiBpMzg2L2xpbnV4LmggKENQUF9TUEVDLCBMSU5LX1NQRUMpOiBMaWtld2lzZS4KKworRnJpIEp1biAyNyAxOTowMDo1MiAxOTk3ICBSYWxmIEJhZWNobGUgIDxyYWxmQHdhbGRvcmYtZ21iaC5kZT4KKworCSogY29uZmlnL2xpbnV4LmggKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IFVuZGVmaW5lIGJlZm9yZSBkZWZpbmUuCisKK0ZyaSBKdW4gMjcgMTg6MzU6MDQgMTk5NyAgQWxhbiBNb2RyYSAgPGFsYW5Ac3ByaS5sZXZlbHMudW5pc2EuZWR1LmF1PgorCQorIAkqIGNvbmZpZ3VyZS5pbjogQ2xlYW4gdXAgTWFrZS17aG9zdCx0YXJnZXQsaG9va3N9IGluIGFsbAorCXN1YmRpcnMsIG5vdCBqdXN0ICcuJy4KKwkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEZWxldGUgKi9NYWtlLXtob3N0LHRhcmdldCxsYW5nLGhvb2tzfS4KKworRnJpIEp1biAyNyAxODoyNzoxMSAxOTk3ICBGaWxhIEtvbG9kbnkgIDxmaWxhQGliaS5jb20+CisKKwkqIGNvbmZpZy94bS1nbnUuaCAoZmNudGwuaCk6IE9ubHkgaW5jbHVkZSBpZiBub3QgYnVpbGRpbmcgbGliZ2NjLmEuCisKK0ZyaSBKdW4gMjcgMTg6MTc6NDQgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuZnJhZzogUmV3cml0ZS4KKworCSogb2JqYy9NYWtlLWxhbmcuaW4gKE9CSkNfQ0NPTU1PTik6IE9iamVjdCBmaWxlcyBkb24ndCBnbyBpbiBzcmNkaXIuCisJKE9CSkNfT0JKUyk6IExpa2V3aXNlLgorCShPQkpDX08pOiBMaWtld2lzZS4KKwkob2JqYy1wYXJzZS5vLCBvYmpjLWFjdC5vKTogRml4IHJ1bGVzLgorCShvYmpjL2xpYm9iamMgZmlsZXMpOiBGaXggcnVsZXMuCisKK0ZyaSBKdW4gMjcgMTM6MjM6MzggMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUB0cGdpLmNvbS5hdT4KKworCSogZnAtYml0LmMgKGZsb2F0X3RvX3NpKTogQ29ycmVjdCByZXR1cm4gdmFsdWUgd2hlbiBJbmYuCisKK0ZyaSBKdW4gMjcgMTA6NDc6MDkgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIE1ha2VmaWxlLmluIChETExUT09MKTogRGVmaW5lLmUKKwkqIG9iamMvTWFrZS1sYW5nLmluIChsaWJvYmpjX2VudHJ5Lm8sIGxpYm9iamNfcy5hLCBsaWJvYmpjLmRsbCk6CisJTmV3IHRhcmdldHMuCisJKG9iamMuaW5zdGFsbC1ub3JtYWwpOiBJbnN0YWxsIE9iamVjdGl2ZS1DIHJ1bnRpbWUgYXMgYSBETEwuCisJKG9iamMubW9zdGx5Y2xlYW4pOiBDbGVhbiB1cCBmaWxlcyB1c2VkIHRvIGJ1aWxkIERMTC4KKwkqIG9iamMvbGlib2JqYy5kZWY6IE5ldyBmaWxlLgorCSogb2JqYy9saWJvYmpjX2VudHJ5LmM6IE5ldyBmaWxlLgorCisJKiBvYmpjL3NlbmRtc2cuYyAoc2VhcmNoX2Zvcl9tZXRob2RfaW5fbGlzdCk6IE5vIGxvbmdlciBzdGF0aWMuCisKKwkqIE1ha2VmaWxlLmluIChHQ0NfVEhSRUFEX0ZJTEUpOiBSZW5hbWVkIGZyb20gT0JKQ19USFJFQURfRklMRS4KKwkqIGNvbmZpZ3VyZS5sYW5nIChHQ0NfVEhSRUFEX0ZJTEUpOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtdGhyZWFkcyk6IE5ldyBwYXJhbWV0ZXIuCisJKiBvYmpjL01ha2UtbGFuZy5pbiAoT0JKQ19USFJFQURfRklMRSk6IE5ldyBkZWZpbml0aW9uLmUKKwkqIG9iamMvY29uZmlnLWxhbmcuaW46IFByaW50IG1lc3NhZ2UgYWJvdXQgT2JqQyB0aHJlYWQgZmlsZS4KKworCSogY2NjcC5jIChJTk9fVF9FUSk6IERlZmluZSBmb3IgV2luMzIgYnV0IG5vdCBDeWd3aW4zMi4KKwkqIGkzODYvbWluZ3czMi5oOiBOZXcgZmlsZS4KKwkqIGkzODYveG0tbWluZ3czMi5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2XTg2LSotbWluZ3czMik6IE5ldyB0YXJnZXQuCisJKiBwcm90b2l6ZS5jIChsaW5rKTogRWxpbWluYXRlIGRlZmluaXRpb24gb24gV2luMzIuCisKKwkqIG9iamMvdGhyLXBvc2l4LmMgKF9fb2JqY190aHJlYWRfeWllbGQpOiBVc2Ugc2NoZWRfeWllbGQgaW5zdGVhZC4KKworRnJpIEp1biAyNyAxMDozNjo0MSAxOTk3ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQsIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOgorCVJvdW5kIHVwIHdoZW4gY2FsY3VsYXRpbmcgcG9zc2libGUgZW5kIGFkZHJlc3MuCisKK1dlZCBKdW4gMjUgMTk6NTQ6MjkgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiB1bnJvbGwuYyAoZmluYWxfZ2l2X3ZhbHVlKTogVmVyaWZ5IHRoYXQgYmwtPmluaXRpYWxfdmFsdWUgaXMKKwlpbnZhcmlhbnQgYmVmb3JlIHRyeWluZyB0byB1c2UgaXQuCisKK1dlZCBKdW4gMjUgMTg6MTM6MDUgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9zeXN2NC5oIChXQ0hBUl9UWVBFeyxfU0laRX0pOiBNYWtlIHdjaGFyX3QgbG9uZyBhcyBwZXIKKwlBQkkgc3BlYy4KKworV2VkIEp1biAyNSAxNjo1NjoxNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHNwYXJjLmggKElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCk6IERlZmluZS4KKwkoREJYX1JFR0lTVEVSX05VTUJFUik6IEZpeCBmcmFtZSBwb2ludGVyIHJlZ25vIGZvciAtbWZsYXQuCisJKiBzb2wyLmggKERCWF9SRUdJU1RFUl9OVU1CRVIpOiBMaWtld2lzZS4KKwkqIHNwYXJjLmMgKHNhdmVfcmVncyk6IEVtaXQgZHdhcmYyIGZyYW1lIGRlYnVnIGluZm8uCisJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgc3BhcmNfZmxhdF9zYXZlX3Jlc3RvcmUsCisJc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBMaWtld2lzZS4KKworCSogZHdhcmYyLmggKGVudW0gZHdhcmZfY2FsbF9mcmFtZV9pbmZvKTogQWRkIERXX0NGQV9HTlVfd2luZG93X3NhdmUuCisJKiBkd2FyZjJvdXQuYyAoZHdhcmZfY2ZpX25hbWUsIG91dHB1dF9jZmkpOiBTdXBwb3J0IGl0LgorCShkd2FyZjJvdXRfY2ZpX2xhYmVsKTogTWFrZSBub24tc3RhdGljLgorCShpbml0aWFsX3JldHVybl9zYXZlKTogU3VwcG9ydCBQTFVTLgorCShkd2FyZjJvdXRfd2luZG93X3NhdmUsIGR3YXJmMm91dF9yZXR1cm5fc2F2ZSwgCisJZHdhcmYyb3V0X3JldHVybl9yZWcpOiBOZXcgZm5zLgorCisJKiBkd2FyZjJvdXQuYyAoU0VDVElPTl9GT1JNQVQpOiBVc2UgUFVTSFNFQ1RJT05fRk9STUFULCBpZiBkZWZpbmVkLgorCShERUJVR19JTkZPX1NFQ1RJT04pOiBSZW5hbWUgZnJvbSBERUJVR19TRUNUSU9OLgorCShERUJVR19MSU5FX1NFQ1RJT04pOiBSZW5hbWUgZnJvbSBMSU5FX1NFQ1RJT04uCisJKiBtaXBzL2lyaXM2Lmg6IExpa2V3aXNlLgorCitXZWQgSnVuIDI1IDE2OjI1OjQxIDE5OTcgIFNjb3R0IENocmlzdGxleSA8c2NvdHRjQG5ldC1jb21tdW5pdHkuY29tPgorCisJKiBNYWtlZmlsZS5pbiAoR0NDX1BBU1NFUyk6IERvbid0IGRlZmluZSB3aXRoICQoZXhlZXh0KS4KKwkqIGNvbmZpZ3VyZS5pbiAoe2NjLHN0YWdlX3ByZWZpeH1fc2V0X2J5X2NvbmZpZ3VyZSk6IEVsaW1pbmF0ZSBleHRyYQorCWNvbW1hIGFuZCBkb24ndCBwYXNzIHZhbHVlIHRvIGNvbmZpZ3VyZS5sYW5nLgorCSogb2JqYy9NYWtlLWxhbmcuaW4gKG9iamMtcnVudGltZSk6IEFkZCBvYmpjLWhlYWRlcnMuCisKKwkqIGNvbmZpZ3VyZS5pbjogRXhlY3V0ZSBjb25maWd1cmUuZnJhZyBpbiBhIHNoZWxsLgorCisJKiBjb25maWd1cmUuaW4gKGNyb3NzX292ZXJyaWRlcywgYnVpbGRfb3ZlcnJpZGVzKTogRGVmYXVsdCB0bworCS9kZXYvbnVsbCB0byBoZWxwIHBsYXRmb3JtcyB3aGVyZSBzZWQgY2Fubm90IGhhbmRsZSBlbXB0eSBmaWxlbmFtZXMuCisKKwkqIFJlb3JnYW5pemUgdGhyZWFkIGltcGxlbWVudGF0aW9uIHRvIG1ha2UgYSBjbGVhcmx5IGRlZmluZWQKKwlmcm9udC1lbmQvYmFjay1lbmQgaW50ZXJmYWNlLgorCSogb2JqYy90aHIte2RlY29zZjEsaXJpeCxtYWNoLG9zMixwb3NpeCxwdGhyZWFkcyxzaW5nbGV9LmM6IENvbXBsZXRlbHkKKwlyZXdvcmsgYWNjb3JkaW5nIHRvIG5ldyBpbnRlcmZhY2UuCisJKiBvYmpjL3Roci17c29sYXJpcyx3aW4zMn0uYzogTGlrZXdpc2UuCisJKiBvYmpjL3Roci5jOiBMaWtld2lzZS4KKwkqIG9iamMvdGhyLmg6IERlZmluZSBmcm9udC1lbmQvYmFjay1lbmQgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQKKwlzdHJ1Y3R1cmVzLgorCitXZWQgSnVuIDI1IDE2OjE0OjEwIDE5OTcgIE92aWRpdSBQcmVkZXNjdSA8b3ZpZGl1QG5ldC1jb21tdW5pdHkuY29tPgorCisJKiBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiArbG9hZC4KKwkqIG9iamMvaW5pdC5jIChvYmpjX3NlbmRfbG9hZCk6IE5ldyBmdW5jdGlvbi4KKwkob2JqY19jbGFzc190cmVlKTogTmV3IHN0cnVjdHVyZS4KKwkoY3JlYXRlX3RyZWVfb2Zfc3ViY2xhc3Nlc19pbmhlcml0ZWRfZnJvbSk6IE5ldyBmdW5jdGlvbi4KKwkoX19vYmpjX3RyZWVfaW5zZXJ0X2NsYXNzKTogTmV3IGZ1bmN0aW9uLgorCShvYmpjX3RyZWVfaW5zZXJ0X2NsYXNzKTogTmV3IGZ1bmN0aW9uLgorCShvYmpjX3ByZW9yZGVyX3RyYXZlcnNlKTogTmV3IGZ1bmN0aW9uLgorCShvYmpjX3Bvc3RvcmRlcl90cmF2ZXJzZSk6IE5ldyBmdW5jdGlvbi4KKwkoX19vYmpjX3RyZWVfcHJpbnQpOiBOZXcgZnVuY3Rpb24uCisJKF9fb2JqY19kZXN0cm95X2NsYXNzX3RyZWVfbm9kZSk6IE5ldyBmdW5jdGlvbi4KKwkoY2xhc3NfaXNfc3ViY2xhc3Nfb2ZfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCisJKF9fb2JqY19leGVjX2NsYXNzKTogQWxsb2NhdGUgY2xhc3MgdHJlZSBsaXN0IGFuZCBsb2FkIGhhc2ggdGFibGUuCisJKF9fb2JqY19zZW5kX21lc3NhZ2VfaW5fbGlzdCk6IFJld3JpdGUgdXNpbmcgaGFzaCB0YWJsZS4KKwkoX19vYmpjX3NlbmRfbG9hZCk6IFJlbW92ZSBjYWxscyB0byBfb2JqY19sb2FkX2NhbGxiYWNrLgorCShvYmpjX3NlbmRfbG9hZCk6IE1ha2Ugc3RhdGljLiAgQ3JlYXRlIFRyZWUgb2YgY2xhc3NlcyByZXNlbWJsaW5nCisJY2xhc3MgaGllcmFyY2h5IGZvciBhbGwgbW9kdWxlcy4gIENhbGwgX19vYmpjX3NlbmRfbG9hZCBvbiBhbGwgb2YgCisJdGhlIG1vZHVsZXMgaW4gX19vYmpjX21vZHVsZV9saXN0LgorCShfX29iamNfY3JlYXRlX2NsYXNzZXNfdHJlZSk6IE5ldyBmdW5jdGlvbi4KKworCSogb2JqYy9lbmNvZGluZy5oIChtZXRob2RfZ2V0X3NpemVvZl9hcmd1bWVudHMpOiBGaXggdHlwby4KKwkqIG9iamMvb2JqYy1hcGkuaCAoT0JKQ19FUlJfQkFEX1NUQVRFKTogTmV3IGVycm9yIGNvZGUuCisJT24gTmVYVCByZWRlZmluZSBvYmplY3RfY29weSBhbmQgb2JqZWN0X2Rpc3Bvc2UgdG8gYXZvaWQKKwlhIGNvbmZsaWN0IHdpdGggdGhvc2UgZGVmaW5lZCBpbiBzeXN0ZW0gbGlicmFyeS4KKwkqIG9iamMvc2VsZWN0b3IuYyAoX19vYmpjX3JlZ2lzdGVyX2luc3RhbmNlX21ldGhvZHNfdG9fY2xhc3MpOiBOZXcgCisJZnVuY3Rpb24uCisJKiBvYmpjL3J1bnRpbWUuaDogTGlrZXdpc2UuICBBZGQgbWlzc2luZyBmdW5jdGlvbiBwcm90b3R5cGVzLgorCitXZWQgSnVuIDI1IDE1OjA5OjAxIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSk6IEV4ZWN1dGUgY29uZmlndXJlLmZyYWcgZnJvbSBzcmNkaXIuCisKKwkqIE1ha2VmaWxlLmluIChjb25maWd1cmUpOiBUYXJnZXQgaXMgJChzcmNkaXIpL2NvbmZpZ3VyZS4KKworVHVlIEp1biAyNCAxNToxODoxNCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG02OGsuaCAoTElNSVRfUkVMT0FEX0NMQVNTKTogRGVmaW5lLgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBXaGVuIGNoZWNraW5nIGVhcmx5Y2xvYmJlcnMsIHVzZQorCW9wZXJhbmRzX21hdGNoX3AgaW5zdGVhZCBvZiBydHhfZXF1YWxfcC4KKworCSogZHdhcmZvdXQuYyAoZmllbGRfYnl0ZV9vZmZzZXQpOiBDaGVjayBmb3Igb2JqZWN0X29mZnNldF9pbl9iaXRzCisJZ3JlYXRlciB0aGFuIGJpdHBvc19pbnQgYW5kIHJlY29tcHV0ZSBvYmplY3Rfb2Zmc2V0X2luX2J5dGVzIGlmIHRydWUuCisKKwkqIG1pcHMubWQgKG1vdmRpX2ludGVybmFsKTogQWRkIHgvSiBhbHRlcm5hdGl2ZS4KKwkobW92ZGlfaW50ZXJuYWwyKTogQWRkIHgvSiBhbHRlcm5hdGl2ZTsgY2hhbmdlIGEvSSB0byBhL0ouCisJKG1vdnNpX2ludGVybmFsMSwgbW92c2lfaW50ZXJuYWwyKTogQ2hhbmdlIHgvSSBhbHRlcm5hdGl2ZSB0byB4L0ouCisKK1R1ZSBKdW4gMjQgMDg6NDk6NTYgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IEZpeCB0eXBvLgorCitNb24gSnVuIDIzIDIyOjQ4OjAwIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogdW5yb2xsLmMgKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogU2V0IHNwbGl0dGFibGVfcmVnc191cGRhdGVzIHRvCisJYml2X2NvdW50IGZvciByZWR1Y2VkIGdpdnMuCisKK01vbiBKdW4gMjMgMTA6NTE6NTMgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMjAwLmMsIG1uMTAyMDAuaCwgbW4xMDIwMC5tZDogTmV3IGZpbGVzIGZvciBtbjEwMjAwIHBvcnQuCisJKiBsaWIxZnVuY3MuYXNtLCBkaXZtb2QuYywgdWRpdm1vZC5jLCB1ZGl2bW9kc2k0LmM6IExpa2V3aXNlLgorCSogdC1tbjEwMjAwLCB4bS1tbjEwMjAwLmgsIHZhLW1uMTAyMDAuaDogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogQWRkIHZhLW1uMTAyMDAuaC4KKwkqIHZhcmFyZ3MuaCwgc3RkYXJnLmg6IEluY2x1ZGUgdmEtbW4xMDIwMC5oLgorCSogY29uZmlndXJlLmluIChtbjEwMjAwLSotKik6IE5ldyB0YXJnZXQuCisJCitTdW4gSnVuIDIyIDA2OjQ3OjE5IDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUpOiBEb24ndCBkbyBhbnl0aGluZyBmb3IgQVNNX09QRVJBTkRTIGluc24uCisKK1N1biBKdW4gMjIgMDY6Mjk6MjggMTk5NyAgSi4gS2VhbiBKb2huc3RvbiAgPGprakBzY28uY29tPgorCisJKiBnaW5jbHVkZS9zdGRhcmcuaDogUHJvdGVjdCB2YV9saXN0IGRlZmluaXRpb24gZnJvbSBTQ08gaGVhZGVycy4KKwkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogTGlrZXdpc2UuCisKK1NhdCBKdW4gMjEgMjA6NTY6MjMgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIE1ha2UgT2JqQyBhIGZyb250LWVuZCBsYW5ndWFnZS4KKwkqIE1ha2VmaWxlLmluIChMQU5HVUFHRVMsIENPTVBJTEVSUywgLlBIT05ZLCBzdG1wLWludC1oZHJzKTogUmVtb3ZlCisJc3BlY2lmaWMgcmVmZXJlbmNlcyB0byBPYmpDIGNvbXBpbGVyIGFuZCBzb3VyY2UgZmlsZXMuCisJKHttb3N0bHksZGlzdCxtYWludGFpbmVyLH1jbGVhbiwgaW5zdGFsbC1ub3JtYWwpOiBMaWtld2lzZQorCShPQkpDX09CSlMsIE9CSkMsIE9CSkVDVElWRS1DLCBjYzFvYmosIG9iamMtcnVudGltZSk6IFJ1bGVzIGRlbGV0ZWQuCisJKGxpYm9iamMuYSwgc3VibGlib2JqYy5hLCBvYmpjLXBhcnNlLntvLCBjLCB5fSk6IFJ1bGVzIGRlbGV0ZWQuCisJKG9iamMtaGVhZGVycywgaW5zdGFsbC1saWJvYmpjKTogUnVsZXMgZGVsZXRlZC4KKwkqIG9iamMvTWFrZS1sYW5nLmluOiBOZXcgZmlsZTsgZnJvbSBydWxlcyBkZWxldGVkIGFib3ZlLgorCSogb2JqYy9jb25maWctbGFuZy5pbjogTmV3IGZpbGUuCisJKiBvYmpjL01ha2VmaWxlLmluOiBDaGFuZ2VzIHRvIHN1cHBvcnQgT2JqQyBhcyBhIGZyb250LWVuZCBsYW5ndWFnZTsKKwlyZW5hbWVkIGZyb20gTWFrZWZpbGUuaW4uCisJKiBvYmpjLWFjdC57YyxofSwgb2JqYy1wYXJzZS57Yyx5fSwgb2JqYy10cmVlLmRlZjogTW92ZWQgdG8gb2JqYyBkaXIuCisKK1NhdCBKdW4gMjEgMDc6NTQ6MzYgMTk5NyAgUm9iZXJ0IExpcGUgPHJvYmVydGxAZGdpaS5jb20+CisKKwkqIGZpeGluYy5zY28gKG1hdGguaCk6IENvcnJlY3QgdGhlIGNvbGxpc2lvbiBvZiAiZXhjZXB0aW9uIi4KKworU2F0IEp1biAyMSAwNjo1MTo0MCAxOTk3ICBQZXRlciBHZXJ3aW5za2kgIDxwZXRlckBhZ25lcy5kaWRhLnBoeXNpay51bmktZXNzZW4uZGU+CisKKwkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9nKTogTmFtZSBpcyAiR05VIFBhc2NhbCIsIG5vdCBhbGwgY2Fwcy4KKworU2F0IEp1biAyMSAwNjoyOToxOSAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobWFpbik6IENoZWNrIGZvciBhbmQgcmVhZCAke2xpYmRpcn0vZ2NjLWxpYi9zcGVjcyB0bworCW92ZXJyaWRlIHRoZSBkZWZhdWx0IHNwZWNzLgorCitGcmkgSnVuIDIwIDE3OjIwOjE1IDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChvdXRwdXRfYmxvY2tfbW92ZSk6IFdoZW4gbG9hZGluZyBhZGRyZXNzZXMgaW50byByZWdpc3RlcnMsCisJYWRkIGNoZWNrcyBmb3IgQUJJX04zMiBhbmQgQUJJXzY0LgorCShtaXBzX2V4cGFuZF9wcm9sb2d1ZSk6IEFkZCBjaGVjayBmb3IgU0ltb2RlIGluIGNvZGUgc3BsaXR0aW5nCisJdHNpemVfcnR4IHdoZW4gaXQgaXMgbGFyZ2VfaW50LgorCitGcmkgSnVuIDIwIDA5OjA3OjMxIDE5OTcgIFJ1c3NlbGwgS2luZyAgPHJtazkyQGVjcy5zb3Rvbi5hYy51az4KKworCSogY29uZmlndXJlLmluIChhcm0tKi1saW51eGFvdXQpOiBOZXcgdGFyZ2V0LgorCSogYXJtL2xpYjFmdW5jcy1saW51eC5hc20sIGFybS9saW51eC1nYXMuaDogTmV3IGZpbGVzLgorCSogYXJtL2xpbnV4LmgsIGFybS90LWxpbnV4LCBhcm0veG0tbGludXguaDogTmV3IGZpbGUuCisJKiB4bS1saW51eC5oOiBVbmRlZiBzb21lIG1hY3JvcyBiZWZvcmUgZGVmaW5pbmcgdGhlbS4KKworVGh1IEp1biAxOSAyMToxODoyMCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChvdXRwdXRfbGluZV9pbmZvKTogQWx3YXlzIHVzZSBEV19MTkVfc2V0X2FkZHJlc3MgaW5zdGVhZAorCW9mIERXX0xOU19maXhlZF9hZHZhbmNlX3BjIGZvciBsaW5lIG51bWJlciBhZGRyZXNzZXMuCisJKHNpemVfb2ZfbGluZV9pbmZvKTogQWRqdXN0IHNpemUgY2FsY3VsYXRpb24gYXMgcGVyIGFib3ZlIGNoYW5nZS4KKwkodGV4dF9lbmRfbGFiZWwpOiBNYWtlIGl0IHN0YXRpYy4KKworVGh1IEp1biAxOSAxNDo1NTo0OSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgorCisJKiB0b3BsZXYuYyAoeG1hbGxvYyk6IE9ubHkgZ2l2ZSB0aGUgZmF0YWwgbXNnIGlmIFNJWkUgaXMgbm9uLXplcm8uCisKK1N1biBBcHIgMjcgMjM6MTk6MTMgMTk5NyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzIuYyAoX19laF90eXBlKTogIFJlbW92ZSBgZXh0ZXJuJyB0byBtYWtlIHRoaXMgYSBkZWZpbml0aW9uLgorCitXZWQgSnVuIDE4IDE4OjEwOjE2IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGVfZmllbGRzKTogIFNraXAgZmllbGQgaWYgREVDTF9JR05PUkVEX1AuCisKK1dlZCBKdW4gMTggMTg6MDQ6MzMgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBleGNlcHQuYyAoZW5kX2VoX3Vud2luZGVyKTogSWYgd2UgaGF2ZSBhIHJldHVybiBpbnN0cnVjdGlvbiwgd2UKKwloYXZlIHRvIG1ha2Ugc3VyZSB3ZSB1c2UgaXQgYW5kIGRvbid0IGZhbGwgb2ZmIHRoZSBlbmQgb2YgdGhlCisJZnVuY3Rpb24gaW4gdGhlIHVud2luZGVyLgorCitXZWQgSnVuIDE4IDE0OjI3OjU4IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKyAKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBGaXggZW5kIGNhc2UgYnVnLgorIAorVHVlIEp1biAxNyAxODozNTo1NyAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzIuYyAoX19laF9wY250aHJvdyk6IEFkZCBzdXBwb3J0IC1mbm8tc2psai1leGNlcHRpb25zCisJLWZQSUMgZXhjZXB0aW9uIGhhbmRsaW5nIG9uIHRoZSBTUEFSQy4KKwkqIHNwYXJjLmggKERPTlRfQUNDRVNTX0dCTFNfQUZURVJfRVBJTE9HVUUpOiBMaWtld2lzZS4KKwkqIGxpYmdjYzIuYyAoX19laF9mZmV0bW5wYyk6IFJlbW92ZS4KKworTW9uIEp1biAxNiAyMDoyODo1MSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGNvbGxlY3QyLmMgKGV4dHJhY3Rfc3RyaW5nKTogTnVsbC10ZXJtaW5hdGUuCisKK01vbiBKdW4gMTYgMTQ6Mzg6NDQgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGNvbWJpbmUuYyAoc2V0X25vbnplcm9fYml0c19hbmRfc2lnbl9jb3BpZXMpOiBVc2UgUkVHX1NFVCBtYWNyb3MKKwlpbnN0ZWFkIG9mIGRvaW5nIGJpdCBvcGVyYXRpb25zIGRpcmVjdGx5LgorCSh0cnlfY29tYmluZSxyZWdfZGVhZF9hdF9wKTogRGl0dG8uCisJKiBjYWxsZXItc2F2ZS5jIChzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBEaXR0by4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRGl0dG8uCisJKiBsb2NhbC1hbGxvYy5jICh1cGRhdGVfZXF1aXZfcmVncyxibG9ja19hbGxvYyk6IERpdHRvLgorCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBEaXRvLgorCitTdW4gSnVuIDE1IDIwOjQ2OjEyIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IEhhbmRsZSBJT1IuCisJKHN0cnVjdCBsaW1ib19kaWVfc3RydWN0KTogRGVmaW5lLgorCShUWVBFX0RFQ0xfSVNfU1RVQik6IENhbGwgZGVjbF91bHRpbWF0ZV9vcmlnaW4gaWYgREVDTF9BQlRSQUNUX09SSUdJTgorCWlzIHNldC4KKwkobGltYm9fZGllX2NvdW50KTogRGVsZXRlLgorCShsaWJtb19kaWVfbGlzdCk6IERlZmluZS4KKwkobmV3X2RpZSk6IEFkZCBkaWUgdG8gbGltYm9fZGllX2xpc3QgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcKKwlsaW1ib19kaWVfY291bnQuCisJKGFkZF9BVF9sb2NhdGlvbl9kZXNjcmlwdGlvbik6IFJlbmFtZWQgZnJvbSBhZGRfbG9jYXRpb25fYXR0cmlidXRlLgorCU5ldyBwYXJhbWV0ZXIgYXR0cl9raW5kLgorCShhZGRfbG9jYXRpb25fb3JfY29uc3RfdmFsdWVfYXR0cmlidXRlLCBnZW5fc3VicHJvZ3JhbV9kaWUsCisJYWRkX2JvdW5kX2luZm8pOiBDaGFuZ2UgY2FsbCB0byBhZGRfQVRfbG9jYXRpb25fZGVzY3JpcHRpb24uCisJKGFkZF9ib3VuZF9pbmZvKTogQWRkIGNhbGwgdG8gY29udGFpbnNfcGxhY2Vob2xkZXJfcC4gIElnbm9yZQorCU1BWF9FWFBSIGFuZCBWQVJfREVDTC4KKwkoYWRkX3N1YnNjcmlwdF9pbmZvKTogSWdub3JlIHRoZSBpbmRleCB0eXBlIGlmIGl0IGlzIGFuIHVubmFtZWQKKwlpbnRlZ3JhbCB0eXBlLgorCShzY29wZV9kaWVfZm9yKTogTW92ZSBjaGVjayBmb3IgZnVuY3Rpb24tbG9jYWwgdGFncyBhZnRlciBjb2RlIHNldHRpbmcKKwljb250YWluaW5nX3Njb3BlLCBhbmQgYWRkIGNoZWNrIGZvciBub24tTlVMTCBjb250YWluaW5nX3Njb3BlCisJKGFkZF90eXBlX2F0dHJpYnV0ZSk6IElmIHVubmFtZWQgdHlwZSwgdXNlIFRSRUVfVFlQRSBpbnN0ZWFkLgorCShnZW5fZW51bWVyYXRpb25fdHlwZV9kaWUsIGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBDYWxsCisJYWRkX2NoaWxkX2RpZSBpZiBkaWVfcGFyZW50IGlzIE5VTEwuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IElmZGVmIG91dCBEV19BVF9zdGF0aWNfbGluayBjb2RlLgorCShkZWNsc19mb3Jfc2NvcGUpOiBEZWxldGUgZGVjcmVtZW50IG9mIGxpbWJvX2RpZV9jb3VudC4KKwkoZHdhcmYyb3V0X2ZpbmlzaCk6IEFkZCBjb2RlIHRvIHRyYXZlcnNlIHRoZSBsaW1ib19kaWVfbGlzdCwgYW5kCisJY2FsbCBhZGRfY2hpbGRfZGllIGlmIGRpZV9wYXJlbnQgaXMgTlVMTC4gIERlbGV0ZSBsaW1ib19kaWVfY291bnQgY29kZS4KKwkqIG1pcHMuYyAobWlwc19leHBhbmRfcHJvbG9ndWUpOiBJZiB0c2l6ZV9ydHggaXMgbGFyZ2VfaW50LCBlbWl0IHR3bworCWluc25zIGluc3RlYWQgb2Ygb25lIHNwbGl0YWJsZSBpbnNuLCBzZXR0aW5nIFJUWF9GUkFNRV9SRUxBVEVEX1AuCisKK0ZyaSBKdW4gMTMgMTk6MzM6MzUgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IEFsc28gZml4IEFJWCBOVUxMIG1hY3JvIGluIHN5cy97ZGlyLHBhcmFtLHR5cGVzfS5oLgorCitUaHUgSnVuIDEyIDIyOjUzOjEyIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbTY4ay5tZCAobW92W3Foc11pKTogUmVtb3ZlIHBhaXIgb2YgY29uc3RyYWludHMgd2hpY2ggYWxsb3cKKwlvZmZzZXRhYmxlIG1lbW9yeSBhZGRyZXNzZXMgdG8gYmUgbW92ZWQgdG8gdGhlIHNhbWUgZm9yIFRBUkdFVF81MjAwLgorCitUaHUgSnVuIDEyIDE1OjMzOjAxIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuaCAoU0VMRUNUX1JUWF9TRUNUSU9OKTogUGxhY2Ugc3ltYm9saWMgb3BlcmFuZHMgaW50byB0aGUKKwlkYXRhIHNlY3Rpb24uCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IFJld3JpdGUgY29kZSB0byBoYW5kbGUgYXJpdGhtZXRpYworCWludm9sdmluZyBwbGFiZWxzLgorCitXZWQgSnVuIDExIDA4OjU3OjE0IDE5OTcgIEguSi4gTHUgIChoamxAZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAodW5zYXZlX2V4cHJfbm93KTogQXZvaWQgcmVjdXJzaW5nIGludG8gdGhlIHBhcnRzIG9mCisJdGhlIHRyZWUgdGhhdCBhcmUgUlRMLgorCitUaHUgSnVuIDEyIDA5OjQzOjU1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcmVvcmcuYyAoZW1pdF9kZWxheV9zZXF1ZW5jZSk6IENhbGwgc2V0X25ld19maXJzdF9hbmRfbGFzdF9pbnNuCisJYWZ0ZXIgdGhlIG5ldyBzZXF1ZW5jZSBpbnNuIGhhcyBiZWVuIHNwbGljZWQgaW50byB0aGUgaW5zbiBjaGFpbi4KKworV2VkIEp1biAxMSAyMzoxMDo0OSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBVc2UgImNhbGwiIGluc3RlYWQgb2YgImNhbGxzIgorCWZvciBjYWxscyB0byBuYW1lZCBmdW5jdGlvbnMuCisKK1dlZCBKdW4gMTEgMDA6MjI6MzQgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjogUmVzdG9yZSBjaGFuZ2VzIGZyb20gRmViIDE1IHRvIEFwciAxMworCWxvc3QgZHVyaW5nIGNvbnZlcnNpb24gdG8gYXV0b2NvbmYuCisKK1R1ZSBKdW4gMTAgMTg6MjM6MzUgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsX2NsZWFudXApOiBBdm9pZCBjb3JlIGR1bXBpbmcgd2hlbiBleGNlcHRpb25zCisJYXJlbid0IG9uLgorCQorVHVlIEp1biAxMCAxODoyMjozMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGNvbGxlY3QyLmMgKGV4dHJhY3Rfc3RyaW5nKTogTmV3IGZuLgorCShtYWluKTogVXNlIGl0LgorCitUdWUgSnVuIDEwIDE3OjQwOjE1IDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChlbWl0X2dyb3VwX2xvYWQpOiBBZGQgY2FzZSB1c2luZyBnZW5fbG93cGFydC4gCisKK1R1ZSBKdW4gMTAgMTc6MTQ6NTggMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9yczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBJZiAtbWNwdT00MDMsIHNldAorCS1tc3RyaWN0LWFsaWduIGFzIHdlbGwuCisKKwkqIHJzNjAwMC90LXBwY3ssZ2FzfSAoTVVMVElMSUJfRVhUUkFfT1BUUyk6IEJ1aWxkIGxpYnJhcmllcyB3aXRoCisJLW1zdHJpY3QtYWxpZ24uCisKKwkqIGNvbmZpZ3VyZS5pbiAoe3Bvd2VycGMscnM2MDAwfSotKi0qKTogQWRkIGVtYmVkZGVkIHRhcmdldHMgdG8KKwktLXdpdGgtY3B1PW4gc3VwcG9ydC4KKworVHVlIEp1biAxMCAwNzowNjoxMiAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogRml4IHR5cG8gaW4gSnVuIDQgY2hhbmdlLgorCitNb24gSnVuICA5IDIwOjI2OjI2IDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKE1BWUJFX1VTRV9DT0xMRUNUMik6IFJlbmFtZWQgZnJvbSBNQVlCRV9VU0VfQ09MTEVDVC4KKworTW9uIEp1biAgOSAxOTo0MjoyMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IGRvIENPTkRfRVhQUiAtPiBNSU5fRVhQUiBmb2xkaW5nIGlmIGl0CisJbG9zZXMgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBiZSBuZWVkZWQgYnkgYSBsYXRlciB1c2UgYXMgYW4gbHZhbHVlLgorCitNb24gSnVuICA5IDE5OjEwOjUwIDE5OTcgIEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogRG9uJ3Qgb3ZlcnJpZGUgYSB1c2VyJ3Mgc2V0dGluZyBmb3IgcHJlZml4CisJb24gcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBuYXRpdmUgcHJlZml4LgorCitNb24gSnVuICA5IDE5OjAwOjQ5IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQG1lbGFuZ2UuZ251LmFpLm1pdC5lZHU+CisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogVXNlIHRoZSBtb2RlIG9mIEZOREVDTCdzCisJcmVzdWx0IHJ0bCwgbm90IHRoZSByZXN1bHQgdHlwZSBpdHNlbGYsIGluIHNldHRpbmcgQVJSSVZJTkdfTU9ERS4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBVc2UgeG1hbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYSBmb3IgdGhlIGxhYmVsCisJb2Zmc2V0cyBpbiBPRkZTRVRTX0FUIGFuZCBPRkZTRVRTX0tOT1dOX0FULgorCitNb24gSnVuICA5IDE1OjE2OjUyIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEVsaW1pbmF0ZSBtb3JlIGRlYWQgY29kZSwgZW5hYmxlcworCWRlYWQgdGhyb3dzIHRvIGJlIGVsaW1pbmF0ZWQuCisKK01vbiBKdW4gIDkgMTc6MTU6NTAgMTk5NyAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CisKKwkqIGFscGhhLmMgKGNoZWNrX2Zsb2F0X3ZhbHVlKTogIFVuZGVyZmxvdyBhbmQgb3ZlcmZsb3cgY29uc3RhbnRzCisJYXJlIGRpZmZlcmVudCBmb3IgRkxPQVRfVkFYIGFuZCBkZWZhdWx0IHRhcmdldHMuCisKK01vbiBKdW4gIDkgMTY6NDg6MjEgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSk6IFByb2Nlc3MgbGFuZ3VhZ2UgZnJhZ21lbnRzLgorCSogY29uZmlndXJlLmZyYWc6IE5ldyBmaWxlLgorCSogY29uZmlndXJlLmluOiBNb3ZlIGxhbmd1YWdlIGZyYWdtZW50IHByb2Nlc3NpbmcgdG8gY29uZmlndXJlLmxhbmcuZQorCisJKiBNYWtlZmlsZS5pbiAoR0NDX1BBU1NFUyk6IFByZXZlbnQgYWxsIGNvbXBpbGVycyBmcm9tIGJlaW5nCisJYnVpbHQgd2hlbiBvbmx5IHRoZSBDIGNvbXBpbGVyIGlzIG5lZWRlZC4KKworCSogY29uZmlndXJlLmluIChjcm9zc19vdmVycmlkZXMsIGJ1aWxkX292ZXJyaWRlcyk6IFVzZSBhYnNvbHV0ZQorCXBhdGggdG8gR0NDIHRvcC1sZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorCisJKiBjb25maWd1cmUuaW46IFNhdmUgdGFyZ2V0IGFsaWFzIGZvciBsYW5ndWFnZSBkaXJlY3Rvcmllcy4KKworCSogY29uZmlndXJlLmluICh3aXRoLWd4eC1pbmNsdWRlLWRpcik6IE5ldyBwYXJhbWV0ZXIgZm9yCisJc2V0dGluZyB0aGUgZysrIGhlYWRlciBmaWxlIGRpcmVjdG9yeS4KKwkqIE1ha2VmaWxlLmluIChneHhfaW5jbHVkZV9kaXIpOiBVc2UgYXV0b2NvbmYgdmFyaWFibGUuCisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIHBhcmFtZXRlciBmb3Igc2V0dGluZyBsb2NhbCBwcmVmaXguCisKKwkqIGNvbmZpZ3VyZS5sYW5nOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZS5pbjogTW92ZSBsYW5ndWFnZSBzdWJkaXJlY3RvcnkgTWFrZWZpbGUgcHJvY2Vzc2luZworCWludG8gY29uZmlndXJlLmxhbmcuCisKK01vbiBKdW4gIDkgMTY6NDQ6NDcgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzY2hlZC5jIChhdHRhY2hfZGVhdGhzKTogRml4IHR5cG8gaW4gSnVuIDQgY2hhbmdlLgorCitNb24gSnVuICA5IDE1OjEzOjAwIDE5OTcgIE1hcmMgTGVobWFubiAgKHBjZ0Bnb29mLmNvbSkKKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX2VuZF9mdW5jdGlvbik6IFN3aXRjaCBiYWNrIHRvIGZ1bmN0aW9uCisJc2VjdGlvbiBhZnRlciBvdXRwdXR0aW5nIGNvbnN0YW50IHBvb2wuCisKK01vbiBKdW4gIDkgMTQ6NDc6MjIgMTk5NyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHRyZWUuYyAoY2hhbmdlX21haW5fdmFyaWFudCk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisJKGJ1aWxkX2FycmF5X3R5cGUpOiBSZW1vdmUgb2Jzb2xldGUgcmVmZXJlbmNlcyB0bworCWNoYW5nZV9tYWluX3ZhcmlhbnQuCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IExpa2V3aXNlLgorCisJKiBjLWNvbW1vbi5jIChjX2J1aWxkX3R5cGVfdmFyaWFudCk6IERvbid0IGZ1dHogd2l0aCBtYWluIHR5cGUKKwl2YXJpYW50IG9mIGFycmF5IHNpbmNlIEMgU3RhbmRhcmQgcmVxdWlyZXMgbWFpbiB0eXBlIHZhcmlhbnQgb2YKKwlhcnJheS1vZi1jb25zdCBhbHNvIGJlIGFycmF5LW9mLWNvbnN0LgorCisJKiBNYWtlZmlsZS5pbjogQ29tbWVudCBvdXQgbGluZXMgY29udGFpbmluZyBqdXN0IGZvcm1mZWVkcy4KKworCSogTWFrZWZpbGUuaW4gKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcuYmFrLgorCShtYWludGFpbmVyLWNsZWFuKTogT3V0cHV0IHdhcm5pbmcuCisJRG8gbm90IHJlbW92ZSBgY29uZmlndXJlJy4KKworTW9uIEp1biAgOSAxNDo0NDoxNyAxOTk3ICBKLlQuIENvbmtsaW4gIDxqdGNAbmV0YnNkLm9yZz4KKworCSogY29uZmlndXJlLmluICgqLSotbmV0YnNkKTogUmVzdG9yZSBjaGFuZ2VzIG9mIEFwciAxM3RoIGxvc3QgaW4KKwlhdXRvY29uZiBjb252ZXJzaW9uOiB0bWFrZV9maWxlIG5vdyB0LW5ldGJzZDsgZGVsZXRlIHhtYWtlX2ZpbGUuCisKK01vbiBKdW4gIDkgMTQ6Mzk6MjkgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9GUkFNRV9BRERSRVNTKToKKwlVc2UgY29ycmVjdCBmdW5jdGlvbiBuYW1lIGluIGVycm9yIG1lc3NhZ2UuCisKKwkqIE1ha2VmaWxlLmluIChkaWZmKTogRXhjbHVkZSBiaS1wYXJzZXIuaC4KKworCSogaTM4Ni5oIChDQzFfQ1BVX1NQRUMpOiBSZW5hbWVkLCB3YXMgQ0MxX1NQRUMuCisJKENDMV9TUEVDKTogTmV3IG1hY3JvLgorCShFWFRSQV9TUEVDUyk6IEFkZCAiY2MxX2NwdSIuCisJKiBpMzg2L2xpbnV4LmggKENDMV9TUEVDKTogTmV3IG1hY3JvLgorCitNb24gSnVuICA5IDEzOjIzOjA2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CisKKwkqIG02OGsvbmV4dC5oIChUQVJHRVRfREVGQVVMVCk6IFVzZSBNQVNLXzY4MDQwLAorCW5vdCBNQVNLXzY4MDQwX0FMU08uCisJKiBtNjhrL21vdDMzMDAuaCwgbTY4ay9jY3VyLUdBUy5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgorCisJKiBtNjhrLmggKE1BQ0hJTkVfU1RBVEVfe1NBVkUsUkVTVE9SRX0pOiBUZXN0ICNpZmRlZiBfX21jZjUyMDAwX18sCisJbm90IGlmIChUQVJHRVRfNTIwMDApOyBmaXhlZCBmb3IgbWM2ODAwMCBjYXNlLgorCisJKiBtNjhrL21vdDMzMDAuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19tYzY4MDIwX18gaWYgbm8gLW1bY102ODAwMAorCWNvbW1hbmQtbGluZSBvcHRpb24gZ2l2ZW4uCisKK01vbiBKdW4gIDkgMDk6MTk6MTcgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKHRhcmdldF9hbGlhcyk6IFN1YnN0aXR1dGUgd2l0aCB0YXJnZXRfYWxpYXMuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFVzZSBzaW5nbGVfc2V0IHRvIGNoZWNrIGNjX3N0YXR1cy5mbGFncy4KKworTW9uIEp1biAgOSAwOTowOTowNyAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBDb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSAnYScgZmxhZworCXdoaWNoIGFkZHMgYW5vdGhlciBwb2ludGVyIGxldmVsLgorCitTdW4gSnVuICA4IDAwOjM0OjI1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEubWQgKGNvbmRpdGlvbmFsIGJyYW5jaCBpbnNucyk6IEdldCBsZW5ndGggcmlnaHQgZm9yIGJyYW5jaGVzCisJdG8gdGFyZ2V0cyB3aGljaCBjYW4gbm90IGJlIHJlYWNoZWQgd2l0aCBhICJibCIgaW5zdHJ1Y3Rpb24uCisJKiBwYS5jIChvdXRwdXRfY2JyYW5jaCk6IEhhbmRsZSBicmFuY2hlcyB0byB0YXJnZXRzIHdoaWNoIGNhbiBub3QKKwliZSByZWFjaGVkIHdpdGggYSAiYmwiIGluc3RydWN0aW9uLgorCisgICAgICAgICogcGEubWQgKGFsdGVybmF0ZSBkYnJhIHBhdHRlcm4pOiBSZW1vdmUgaW5jb3JyZWN0IHBhdHRlcm4uCisKK1NhdCBKdW4gIDcgMjM6MzA6MjUgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5jIChzdHJ1Y3QgZGVmZXJfcGxhYik6IFJlbmFtZWQgdG8gc3RydWN0IGRlZmVycmVkX3BsYWJlbC4KKwlSZW1vdmUgInN5bWJvbCIgZmllbGQgYW5kIHJlcGxhY2Ugd2l0aCAibmFtZSIgZmllbGQuCisJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IERvbid0IG91dHB1dCBkZWZlcnJlZCBwbGFiZWxzIGhlcmUuCisJKG91dHB1dF9kZWZlcnJlZF9sYWJlbHMpOiBOZXcgZnVuY3Rpb24uICBPdXRwdXQgdGhlbSBoZXJlIGluc3RlYWQuCisJKG91dHB1dF9jYWxsKTogUmV3cml0ZSBsb25nIGNhbGwgc3VwcG9ydC4KKwkqIHBhLmggKEFTTV9GSUxFX0VORCk6IERlZmluZS4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogTmV2ZXIgYWNjZXB0IGEgZnVuY3Rpb25fbGFiZWxfb3BlcmFuZC4KKwkqIHBhLm1kIChISUdIIGFuZCBMT19TVU0gb2YgZnVuY3Rpb24gYWRkcmVzcyk6IFJlbW92ZSBwYXR0ZXJucy4KKworRnJpIEp1biAgNiAxNjowOTowNCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzIuYyAoX19laF9mZmV0bW5wYyk6IEFkZCBzdXBwb3J0IGZvciBtYWNoaW5lcyB0aGF0IGNhbm5vdAorCWFjY2VzcyBnbG9iYWxzIGFmdGVyIHRocm93J3MgZXBpbG9ndWUgd2hlbiAtZm5vLXNqbGotZXhjZXB0aW9ucyBpcworCXVzZWQuCisJKiByczYwMDAuYyAoRE9OVF9BQ0NFU1NfR0JMU19BRlRFUl9FUElMT0dVRSk6IExpa2V3aXNlLgorCSogbWlwcy5oIChET05UX0FDQ0VTU19HQkxTX0FGVEVSX0VQSUxPR1VFKTogTGlrZXdpc2UuCisJKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogRml4IFJFVFVSTl9BRERSRVNTX1BPSU5URVJfUkVHTlVNCisJZm9yIDY0IGJpdCB3b3Jkcywgd2l0aCAzMiBiaXQgcG9pbnRlcnMgYW5kIHZhcmlhYmxlIGVuZGlhbm5lc3MuCisKK0ZyaSBKdW4gIDYgMTc6Mjc6NTggMTk5NyAgTWlrZSBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJlZ2NsYXNzLmMgKGFsbG9jYXRlX3JlZ19pbmZvKTogRml4IG9mZiBieSBvbmUgZXJyb3IuCisKK0ZyaSBKdW4gIDYgMTc6MTc6NDEgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBiYXNpYy1ibG9jay5oIChFWEVDVVRFX0lGX1NFVF9JTl9SRUdfU0VUKTogRml4IHNldHRpbmcgb2Ygc2Nhbl9yc18uCisJKEVYRUNVVEVfSUZfU0VUX0FORF9SRVNFVF9JTl9SRUdfU0VUKTogTGlrZXdpc2UuCisJKEVYRUNVVEVfSUZfQU5EX0lOX1JFR19TRVQpOiBMaWtld2lzZS4KKwkoRVhFQ1VURV9JRl9BTkRfQ09NUExfSU5fUkVHX1NFVCk6IExpa2V3aXNlLgorCitGcmkgSnVuICA2IDE1OjQyOjU5IDE5OTcgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2LmMgKG5vdGljZV9jY191cGRhdGUpOiBTZXQgQ0NfRkNPTUkgaXMgdGhpcyBpcyBhIGZsb2F0IGNvbXBhcmUuCisKK0ZyaSBKdW4gIDYgMTU6MTI6MzggMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBiYXNpYy1ibG9jay5oIChSRUdfU0VUX1RPX0hBUkRfUkVHX1NFVCk6IEZpeCB0eXBvLgorCisJKiBzY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogV2hlbiBhZGQgZXh0cmEgUkVHX0RFQUQgbm90ZSBmb3Igb3JpZ2luYWwKKwlkZXN0LCBoYW5kbGUgY2FzZSB3aGVyZSBsYXN0IGluc24gYm90aCB1c2VzIGFuZCBzZXRzIGRlc3QuCisKK1RodSBKdW4gIDUgMjI6MTk6MzYgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBmaXhpbmMuaXJpeDogQWRkIGRlY2xhcmF0aW9uIG9mIF9fdmZvcmsgdG8gdW5pc3RkLmguCisKKwkqIGk5NjAvdng5NjAtY29mZi5oIChDUFBfU1BFQyk6IEFsd2F5cyBkZWZpbmUgQ1BVLCBldmVuIGlmIHRoZXkKKwl1c2UgLWFuc2k7IHRoZSBWeFdvcmtzIGhlYWRlcnMgYXNzdW1lIGl0J3MgYWx3YXlzIHByZXNlbnQuCisJKiBzcGFyYy92eHNwYXJjLmggKENQUF9TUEVDKTogRGVmaW5lLCBhZGRpbmcgdGhlIENQVSBkZWZpbml0aW9uIHRvCisJd2hhdCBjYW1lIGZyb20gc3BhcmMuaC4KKwkoQ1BQX1BSRURFRklORVMpOiBEb24ndCBkZWZpbmUgaXQgaGVyZS4KKworVGh1IEp1biAgNSAxMzo0MDozMyAxOTk3ICBNaWtlIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogYmFzaWMtYmxvY2suYyAoT0JTVEFDS19BTExPQ19SRUdfU0VUKTogUmVuYW1lIGZyb20KKwlPQkFMTE9DX1JFR19TRVQuICBBZGQgb2JzdGFjayBwb2ludGVyIHBhcmFtZXRlci4KKworCSogZmxvdy5jIChmdW5jdGlvbl9vYnN0YWNrKTogQWRkIGRlY2xhcmF0aW9uLgorCShsaWZlX2FuYWx5c2lzKTogRG9uJ3QgYWxsb2NhdGUgdGhlIHNwYWNlIHRvIGhvbGQgdG8gdmVjdG9yIG9mCisJcmVnc2V0cyBoZXJlLgorCShpbml0X3JlZ3NldF92ZWN0b3IpOiBBZGQgcG9pbnRlciBwYXJhbWV0ZXIgYW5kIGRlbGV0ZSBzcGFjZQorCXBhcmFtdGVyLiAgVXNlIE9CU1RBQ0tfQUxMT0NfUkVHX1NFVCB0byBhbGxvY2F0ZS4gIENoYW5nZSBjYWxsZXJzLgorCShwcm9wYWdhdGVfYmxvY2spOiBVc2UgQUxMT0NBX1JFR19TRVQgaW5zdGVhZCBvZiBiYXJlIGFsbG9jYS4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBGaXggdHlwbyBpbiB5ZXN0ZXJkYXkncyBjaGFuZ2VzLgorCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogRGl0dG8uCisKK1RodSBKdW4gIDUgMDk6NDQ6NDkgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBzaC5jICh0cmFwX2V4aXQsIHNwX3N3aXRjaCk6IE5ldyB2YXJpYWJsZXMuCisJKHByaW50X29wZXJhbmQsIGNhc2UgJ0AnKTogSWYgdHJhcF9leGl0IGlzIG5vbnplcm8sIHRoZW4gdXNlCisJYSB0cmFwYSBpbnN0ZWFkIG9mIGFuIHJ0ZS9ydHMgdG8gZXhpdCB0aGUgY3VycmVudCBmdW5jdGlvbi4KKwkoc2hfZXhwYW5kX3Byb2xvZ3VlKTogU3dpdGNoIHN0YWNrcyBhdCBmdW5jdGlvbiBlbnRyeSBhcyBuZWVkZWQuCisJKHNoX2V4cGFuZF9lcGlsb2d1ZSk6IFNpbWlsYXJseSBhdCBmdW5jdGlvbiBleGl0LgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IENsZWFyIHRyYXBfZXhpdCBhbmQgc3Bfc3dpdGNoIHRvby4KKwkoc2hfdmFsaWRfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KKwkqIHNoLmggKFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUpOiBEZWZpbmUuCisJKHNwX3N3aXRjaCk6IERlY2xhcmUuCisJKiBzaC5tZCAoc3Bfc3dpdGNoXzEsIHNwX3N3aXRjaF8yKTogTmV3IG5hbWVkIHBhdHRlcm5zLgorCitXZWQgSnVuICA0IDE4OjExOjE0IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBiYXNpYy1ibG9jay5oIChSRUdTRVRfRUxUX0JJVFMpOiBNYWtlIHRoaXMgZXhwbGljaXRseSB1bnNpZ25lZCwgc28KKwl0aGF0IGRpdmlzaW9uIGFuZCBtb2R1bHVzIG9mIFJFR1NFVF9FTFRfQklUUyB1c2VzIGEgcHVyZSBzaGlmdC4KKwkoKl9SRUdfU0VUKTogTmV3IG1hY3JvcyB0byBhYnN0cmFjdCB0aGUgcmVnaXN0ZXIgc2V0IGludGVyZmFjZS4KKworCSogY2FsbGVyLXNhdmUuYyAoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogVXNlIG5ldyAqX1JFR19TRVQKKwltYWNyb3MuCisJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXMscHJvcGFnYXRlX2Jsb2NrLGluc25fZGVhZF9wKTogRGl0dG8uCisJKHJlZ25vX3VuaW5pdGlhbGl6ZWQscmVnbm9fY2xvYmJlcmVkX2F0X3NldGptcCxtYXJrX3NldF8xKTogRGl0dG8uCisJKG1hcmtfdXNlZF9yZWdzLGR1bXBfZmxvd19pbmZvLGdsb2JhbF9jb25mbGljdHMpOiBEaXR0by4KKwlnbG9iYWwuYyAobWFya19lbGltaW5hdGlvbik6IERpdHRvLgorCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogRGl0dG8uCisJKiBzY2hlZC5jIChzY2hlZF97YW5hbHl6ZV97MSxpbnNufSxub3RlX3NldH0pOiBEaXR0by4KKwkoYmlydGhpbmdfaW5zbl9wLGF0dGFjaF9kZWF0aHMsdW5saW5rX25vdGVzLHNjaGVkdWxlX2Jsb2NrKTogRGl0dG8uCisKKwkqIHNjaGVkLmMgKHNvbWV0aW1lcyBzdHJ1Y3R1cmUpOiBEZWxldGUgb2Zmc2V0LCBiaXQgZmllbGRzLCByZXBsYWNlCisJd2l0aCByZWduby4KKwkobmV3X3NvbWV0aW1lc19saXZlKTogVGFrZSByZWdubyBhcmd1bWVudCwgbm90IG9mZnNldCBhbmQgYml0LgorCUNoYW5nZSBhbGwgY2FsbGVycy4KKworVHVlIEp1biAgMyAxOToxODozNiAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBGaXggQUlYIE5VTEwgbWFjcm8gdXNlIG9mIHZvaWQqLgorCitUdWUgSnVuICAzIDE1OjIxOjA0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogc3BhcmMuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IEhhbmRsZSAtZnBpYy4KKworTW9uIEp1biAgMiAxNjo1Mzo1MyAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogbG9vcC5jIChuX3RpbWVzX3tzZXQsdXNlZH0pOiBNYWtlIHR5cGUgaW50LCBub3Qgc2hvcnQuCisJKHNjYW5fbG9vcCk6IG5fdGltZXN7c2V0LHVzZWR9IGFyZSBub3cgaW50IHBvaW50ZXJzLgorCisJKiBzY2hlZC5jIChzY2hlZF9yZWdfbl9kZWF0aHMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorCShzdHJ1Y3Qgc29tZXRpbWVzKTogTWFrZSBmaWVsZHMgaW50IHNpemVkLCBub3Qgc2hvcnQuCisJKHNjaGVkdWxlX2luc25zKTogRG9uJ3Qgc2V0IHNjaGVkX3JlZ19uX2RlYXRocywgbm9ib2R5IHVzZXMgaXQuCisKKwkqIHJlZ2NsYXNzLmMgKGFsbG9jYXRlX3JlZ19pbmZvKTogQWxsb2NhdGUgdGhlIHNwYWNlIGZvcgorCXJlZ19yZW51bWJlciwgYnV0IGRvbid0IHNldCByZWdfcmVudW1iZXIgdW5sZXNzIG5ldyBhcmd1bWVudAorCVJFTlVNQkVSX1AgaXMgc2V0LiAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBmb3IgdGhlIGZ1bmN0aW9uIGFuZAorCXdlIG5lZWQgdG8gZ3JvdyBzcGFjZSwgdXNlIGZyZWUveG1hbGxvYyBpbnN0ZWFkIG9mIHJlYWxsb2Mgc2luY2Ugd2UKKwl3aWxsIGJlIGluaXRpYWxpemluZyB0aGUgd2hvbGUgYXJyYXkuICBJZiBudW1iZXIgb2YgcmVnaXN0ZXJzIGlzIDwKKwkwLCBqdXN0IGZyZWUgdXAgdGhlIHNwYWNlLgorCShyZWdfc2Nhbik6IFVwZGF0ZSBhbGxvY2F0ZV9yZWdfaW5mbyBjYWxsLgorCisJKiByZWdzLmggKGFsbG9jYXRlX3JlZ19pbmZvKTogQ2hhbmdlIHByb3RvdHlwZS4KKworCSogZmxvdy5jIChhbGxvY2F0ZV9mb3JfbGlmZV9hbmFseXNpcyk6IFVwZGF0ZSBhbGxvY2F0ZV9yZWdfaW5mbworCWNhbGwuCisKKwkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogQ2FsbCBhbGxvY2F0ZV9yZWdfaW5mbyB0byBhbGxvY2F0ZQorCWFuZCBpbml0aWFsaXplIHRoZSByZWdfcmVudW1iZXIgYXJyYXkuCisJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBEaXR0by4KKworTW9uIEp1biAgMiAxNDo1MDowNiAxOTk3ICBEYXZlIE1pbGxlciAgPGRhdmVtQGplbm9sYW4ucnV0Z2Vycy5lZHU+CisKKwkqIHNwYXJjL3NwYXJjLm1kICh2OSBlcS9uZSBjb25kIG1vdmUgcGF0dGVybnMpOiBBZGQgZWFybHkgY2xvYmJlcgorCWNvbnN0cmFpbnQgdG8gZGVzdGluYXRpb24uCisKK0ZyaSBNYXkgMzAgMTE6MDA6NDQgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJlZ3MuaCAocmVnX2luZm8pOiBOZXcgc3RydWN0dXJlIHRvIGdyb3VwIHRoZSBhcnJheXMgaW5kZXhlZCBieQorCXJlZ2lzdGVyIG51bWJlciBjcmVhdGVkIGJ5IHJlZ19zY2FuIGFuZCBmbG93X2FuYWx5c2lzIHRoYXQgYXJlCisJZ2xvYmFsbHkgdmlzaWFibGUuCisJKHJlZ19uX2luZm8pOiBQb2ludGVyIHRvIHRoZSByZWdpc3RlciBpbmZvcm1hdGlvbiBhcnJheS4KKwkocmVnX25fe3JlZnMsc2V0cyxkZWF0aHMsY2FsbHNfY3Jvc3NlZH0pOiBEZWxldGUgdmFyaWFibGVzLgorCShyZWdfY2hhbmdlc19zaXplKTogRGl0dG8uCisJKFJFR19OX3tSRUZTLFNFVFMsREVBVEhTLENBTExTX0NST1NTRUR9KTogTmV3IG1hY3JvcyB0byByZWZlcmVuY2UKKwlyZWdfbl9pbmZvLgorCShSRUdfe0NIQU5HRVNfU0laRSx7RklSU1QsTEFTVCxMQVNUX05PVEV9X1VJRH0pOiBEaXR0by4KKwkoYWxsb2NhdGVfcmVnX2luZm8pOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIGJhc2ljLWJsb2NrLmggKHJlZ19iYXNpY19ibG9jayk6IERlbGV0ZS4KKwkoUkVHX0JBU0lDX0JMT0NLKTogVXNlIHJlZ19uX2luZm8gc3RydWN0dXJlLgorCisJKiBjYWxsZXItc2F2ZS5jOiBDaGFuZ2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGFib3ZlIGFycmF5cyB0byB1c2UKKwl0aGUgY29ycmVzcG9uZGluZyBtYWNybyB0byBhY2Nlc3MgdGhlIHJlZ19uX2luZm8gYXJyYXkuCisJKiBjb21iaW5lLmMsIGNzZS5jLCBmbG93LmMsIGdsb2JhbC5jLCBqdW1wLmMsIGxvY2FsLWFsbG9jLmM6IERpdHRvLgorCSogbG9vcC5jLCByZWdjbGFzcy5jLCByZWxvYWQxLmMsIHNjaGVkLmMsIHN0dXBpZC5jLCB1bnJvbGwuYzogRGl0dG8uCisKKwkqIHJlZ2NsYXNzLmMgKGFsbG9jYXRlX3JlZ19pbmZvKTogTmV3IGZ1bmN0aW9uIHRvIGFsbG9jYXRlIHRoZQorCXJlZ19pbmZvIGFycmF5IGFuZCBpbml0aWFsaXplIHRoZSBhcHByb3ByaWF0ZSBmaWVsZHMuCisJKHJlZ19zY2FuKTogQ2FsbCBpdC4KKworCSogZmxvdy5jIChhbGxvY2F0ZV9mb3JfbGlmZV9hbmFseXNpcyk6IENhbGwgYWxsb2NhdGVfcmVnX2luZm8gdG8gZG8KKwl0aGUgYWN0dWFsIGFsbG9jYXRpb24uCisKK1RodSBNYXkgMjkgMTU6NDI6NTkgMTk5NyAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYubWQgKG1vdnNmY2NfMSwgbW92ZGZjY18xLCBtb3Z4ZmNjXzEpOiBVc2Ugc2luZ2xlbW92ZV9zdHJpbmcKKwlmb3IgZmxvYXQgY29uZGl0aW9uYWwgbW92ZSB3aGVuIGRlc3RpbmF0aW9uIGFuZCBvcGVyYW5kcyBhbGwgZGlmZmVyLgorCQorCSogaTM4Ni5oIChBU01fT1VUUFVUX1JFR197UFVTSCxQT1B9KTogYWRkICUlIGJlZm9yZSByZWdpc3RlciBuYW1lLgorCisJKiBnbzMyLmggKEFTTV9PVVRQVVRfQUxJR04pOiBVc2UgLnAyYWxpZ24sIG5vdCBieXRlIGFsaWdubWVudHMuIAorCitXZWQgTWF5IDI4IDIwOjQ0OjAwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZXhjZXB0LmMgKHB1c2hfZWhfZW50cnkpOiBFbGltaW5hdGUgc3RhcnQgb2YgZXhjZXB0aW9uIHJlZ2lvbgorCWxhYmVsLCBhcyBpdCBpc24ndCB1c2VkLiAgUmVuYW1lIGVuZF9sYWJlbCB0byBvdXRlcl9jb250ZXh0LgorCShleHBhbmRfZWhfcmVnaW9uX3N0YXJ0X2Zvcl9kZWNsKTogTGlrZXdpc2UuCisJKGV4cGFuZF9sZWZ0b3Zlcl9jbGVhbnVwcyk6IExpa2V3aXNlLgorCShleHBhbmRfc3RhcnRfYWxsX2NhdGNoKTogTGlrZXdpc2UuCisJKiBleGNlcHQuaCAoZWhfZW50cnkpOiBMaWtld2lzZS4KKwkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmVnaW9uX2VuZCk6IExpa2V3aXNlLiAgSnVtcCBhcm91bmQgdGhlIG5vcAorCXRoYXQgd2UgaW5zZXJ0LCBzbyB0aGF0IHdlIGNhbiBvcHRpbWl6ZSBpdCBhd2F5LCBpZiBpdCBpcyB1bnVzZWQsCisJYWxzbyBzbyB0aGF0IGZsb3cgYW5hbHlzaXMgY2FuIHRlbGwgaWYgd2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBlbmQKKwlvZiBhIGZ1bmN0aW9uIG9yIG5vdCBzbyB0aGF0IGl0IGNhbiBrbm93IGlmIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zCisJYSB2YWx1ZSwgaW4gZmFjdCBkb2VzIG9yIG5vdC4KKworV2VkIE1heSAyOCAxMDo1MDowOSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLm1kIChqdW1wKTogSGFuZGxlIG91dCBvZiByYW5nZSB1bmNvbmRpdGlvbmFsIGp1bXAKKwl3aGVuIG5vdCBvcHRpbWl6aW5nLgorCitUaHUgTWF5IDIyIDAwOjU3OjA3IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlY29yZF9zZXQpOiBJZ25vcmUgdmFsdWVzIGZvciBTUkVHIGlmCisJdGhlaXIgbW9kZSBpcyBuYXJyb3dlciB0aGFuIERFU1RfTU9ERS4KKworCSogcGEuaCAoREZNT0RFX1JFVFVSTl9TVFJJTkcpOiBEZWZpbmUuCisJKFNGTU9ERV9SRVRVUk5fU1RSSU5HKTogTGlrZXdpc2UuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBVc2UgdGhlbS4KKworV2VkIE1heSAyMSAyMzozMjowMiAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAubWQgKHJlbG9hZF9pbnNpKTogSGFuZGxlIFNVQlJFRyBwcm9wZXJseS4KKworVHVlIE1heSAyMCAyMjozMjoxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZGVmX2NmYSk6IFNldCBjZmFfcmVnIGF0IHRoZSB0b3AuCisKK1R1ZSBNYXkgMjAgMTY6NTc6NTAgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IEhhbmRsZSBgSicuCisJKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IFByaW50ICJjb21wbGV4IiBmb3IgaXQuCisKK01vbiBNYXkgMTkgMjE6MDE6NTMgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtNjhrLmMgKG91dHB1dF9tb3ZlX3FpbW9kZSk6IEFkZCBjb2xkZmlyZSBzdXBwb3J0LgorCSogbTY4ay5oIChQVVNIX1JPVU5ESU5HKTogQWRkIGNvbGRmaXJlIHN1cHBvcnQuCisJKiBtNjhrLm1kIChzY2MwX2RpLCBzY2NfZGksIHNlcSwgc25lLCBzZ3QsIHNndHUsIHNsdCwgc2x0dSwgc2dlLCBzZ2V1LAorCXNsZSwgc2xldSk6IEFkZCBjb2xkZmlyZSBzdXBwb3J0LgorCitNb24gTWF5IDE5IDE3OjUzOjM0IDE5OTcgIE1pa2UgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAvcnM2MDAwLmM6IChyczYwMDBfcGljX2Z1bmNfbGFiZWxubyk6IE5ldyB2YXJpYWJsZSB0byBob2xkCisJdGhlIHBpYyBsYWJlbCBudW1iZXIgZm9yIHRoZSBmdW5jdGlvbidzIExDTCBsYWJlbC4KKwkocnM2MDAwX291dHB1dF9sb2FkX3RvY190YWJsZSk6IFVzZSBpdC4KKwkob3V0cHV0X3Byb2xvZyk6IFN0b3JlIGN1cnJlbnQgdmFsdWUuCisKK1N1biBNYXkgMTggMTY6MzI6MDggMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZy9kYnhjb2ZmLmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBVc2UgdGhlIG1hY3JvcworCUFTTV97R0VORVJBVEUsT1VUUFVUfV9JTlRFUk5BTF9MQUJFTCB0byBjcmVhdGUvb3V0cHV0IHRoZSBsaW5lCisJbnVtYmVyIGxhYmVsLgorCitTdW4gTWF5IDE4IDEzOjU1OjEyIDE5OTcgIEpvaG4gVmlja2VycyAoam9obkByaGl6aWsuZGVtb24uY28udWspCisKKyAgICAgICAgKiBtNjhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBuZXcgdGFyZ2V0IG5hbWUsIGNwdTMyLgorCitTdW4gTWF5IDE4IDEzOjUwOjEwIDE5OTcgIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgorCisJKiBjY2NwLmMgKFZNU193cml0ZSwgVk1TX3JlYWQpOiBEZWxldGUuCisJKHNhZmVfd3JpdGUpOiBJZiBNQVhfV1JJVEVfTEVOIGlzIGRlZmluZWQsIGxpbWl0CisJaW5jcmVtZW50YWwgd3JpdGUgYXR0ZW1wdHMgdG8gdGhhdCBhbW91bnQuCisJKHNhZmVfcmVhZCk6IEFuYWxvZ291cyBzaXR1YXRpb24gZm9yIE1BWF9SRUFEX0xFTi4KKwkqIGNwcGxpYi5jIChzYWZlX3JlYWQpOiBMaWtld2lzZS4KKwkqIHZheC94bS12bXMuaCAoTUFYX1dSSVRFX0xFTiwgTUFYX1JFQURfTEVOKTogRGVmaW5lLgorCisJKiB2YXgveG0tdm1zLmggKGdldF9keW5hbWljX2hhbmRsZXJfY2hhaW5fbGliZnVuYyk6IE5ldyBtYWNyby4KKwkocHJvdGVjdF9jbGVhbnVwX2FjdGlvbnNfd2l0aF90ZXJtaW5hdGUpOiBOZXcgbWFjcm8uCisKK1N1biBNYXkgMTggMDg6NTA6MjUgMTk5NyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIG02OGsvbGludXguaCAoQVNNX0NPTU1FTlRfU1RBUlQpOiBEZWZpbmUuCisJKiBtNjhrL2xpbnV4LWFvdXQuaCAoQVNNX0NPTU1FTlRfU1RBUlQpOiBEZWZpbmUuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdub19lcXVhbF9wKTogQ2hlY2sgZm9yIHZhbHVlIHVzaW5nIG1vcmUKKwl0aGFuIG9uZSByZWdpc3RlciBvbiBhIGJpZyBlbmRpYW4gbWFjaGluZS4KKworU3VuIE1heSAxOCAwODozOTo1OSAxOTk3ICBWaW5jZSBEZWwgVmVjY2hpbyAgPHZkZWx2ZWNjQHNwZC5hbmFsb2cuY29tPgorCisJKiBsb29wLmMgKG1heWJlX2VsaW1pbmF0ZV9iaXZfMSk6IEluIChzZXQgKGNjMCkgPGJpdj4pIGNhc2UsCisJc3dhcCBjb21wYXJlIG9wZXJhbmRzIHdoZW4gbXVsdF92YWwgPCAwIGluIG9uZSBhZGRpdGlvbmFsIHBsYWNlLgorCitTdW4gTWF5IDE4IDA4OjMzOjMwIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGR3YXJmMm91dC5jIChBU01fQ09NTUVOVF9TVEFSVCk6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24uCisKKwkqIE1ha2VmaWxlLmluIChtYWludGFpbmVyLWNsYWVhbik6IERlbGV0ZSBjb25maWd1cmUuCisKK1N1biBNYXkgMTggMDg6MzE6NTkgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIHRvIHV0aWxpemUgYXV0b2NvbmYgdmFyaWFibGVzLgorCSogY29uZmlndXJlOiBOb3cgYW4gb3V0cHV0IGZpbGUuCisKK1N1biBNYXkgMTggMDc6NDg6MzEgMTk5NyAgSi5ULiBDb25rbGluICA8anRjQG5ldGJzZC5vcmc+CisKKwkqIG02OGsubWQgKG1vdltxaHNdaSxtb3ZzdHJpY3RbcXNdaSwgbXVsc2kzKTogVXNlICdRJyBjb25zdHJhaW50CisJZm9yIFRBUkdFVF81MjAwLgorCSogbTY4ay5oIChFWFRSQV9DT05TVFJBSU5UKTogTmV3IG1hY3JvLiAKKworCSogbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgNjgwMjAtNjAuCisJTWFzayBvdXQgYml0cyB3aGljaCBpbmRpY2F0ZSBhIHBhcnRpY3VsYXIgcHJvY2Vzc29yIHdoZW4gYSBkaWZmZXJlbnQKKwlwcm9jZXNzb3IgaXMgc2VsZWN0ZWQuCisJKE1BU0tfNjgwNDBfQUxTTyk6IFJlbW92ZS4KKwkoTUFTS182ODA0MCk6IENoYW5nZSB0byBiZSBhIHNpbmdsZSBiaXQuCisKKwkqIG02OGsuaCAoVEFSR0VUX0FMSUdOX0lOVCwgTUFTS19BTElHTl9JTlQpOiBOZXcgbWFjcm9zLgorCShCSUdHRVNUX0FMSUdOTUVOVCk6IERldGVybWluZSBhY2NvcmRpbmcgdG8gVEFSR0VUX0FMSUdOX0lOVC4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGFsaWduLWludCBhbmQgbm8tYWxpZ24taW50LgorCisJKiBtNjhrLm1kIChtb3ZbcWhzXWl9KTogQWRkIHBhaXIgb2YgY29uc3RyYWludHMgd2hpY2ggYWxsb3cKKwlvZmZzZXRhYmxlIG1lbW9yeSBhZGRyZXNzZXMgdG8gYmUgbW92ZWQgdG8gdGhlIHNhbWUgZm9yIFRBUkdFVF81MjAwLgorCisJKiBtNjhrLmMgKG91dHB1dF9tb3ZlX3N0cmljdHtoaSxxaX0pOiBOZXcgZnVuY3Rpb25zLgorCSogbTY4ay5oIChvdXRwdXRfbW92ZV9zdHJpY3R7aGkscWl9KTogRGVjbGFyZS4KKwkqIG02OGsubWQgKG1vdnN0cmljdCopOiBDaGFuZ2VkIGludG8gZGVmaW5lX2V4cGFuZHMuCisJU3BsaXQgaW5zbnMgaW50byBtNjhrIGFuZCBjb2xkZmlyZSBzcGVjaWZpYyB2ZXJzaW9ucyB3aXRoIGFwcHJvcHJpYXRlCisgCWNvbnN0cmFpbnRzLgorCitTdW4gTWF5IDE4IDA3OjI2OjQwIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CisKKwkqIGxpYmdjYzIuYyAoYXRleGl0KTogQ2FzdCBtYWxsb2MgYW5kIHJlYWxsb2MgY2FsbHMuCisKK1NhdCBNYXkgMTcgMTY6MjY6NTEgMTk5NyAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgorCisJKiBmaW5hbC5jIChwcm9maWxlX2Z1bmN0aW9uKTogQ2FsbCBmdW5jdGlvbl9zZWN0aW9uLCBub3QKKwl0ZXh0X3NlY3Rpb24uCisKK1NhdCBNYXkgMTcgMTY6MDE6MDAgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogY3NlLmMgKG5vdHJlZ19jb3N0KTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbSBDT1NUIG1hY3JvLgorCShDT1NUKTogVXNlIG5vdHJlZ19jb3N0LgorCitTYXQgTWF5IDE3IDE1OjEzOjIzIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IHJlY29yZCBhIFNSQyB0aGF0J3MgYSBNRU0gYW5kIHRoZSBzYW1lCisJYXMgYSBSRUdfRVFVSVYgbm90ZSBpZiBERVNUIGlzIHNldCBtb3JlIHRoYW4gb25jZS4KKworRnJpIE1heSAxNiAxNDo1MDo1NyAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEhhbmRsZSBsb2FkaW5nIGEgZ2VuZXJhbCByZWdpc3RlcgorCWZyb20gYSBzY2FsZWQgaW5kZXhlZCBtZW1vcnkgYWRkcmVzcy4KKwkqIHBhLm1kIChtb3ZkZiwgbW92ZGkpOiBBbGxvdyBzY2FsZWQgbG9hZHMgaW50byBnZW5lcmFsIHJlZ2lzdGVycy4KKworRnJpIE1heSAxNiAxMzozMTowOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5jIChyczYwMDBfc3RhY2tfaW5mbyk6IE9ubHkgZG8gZWFiaSBzZXR1cCBmb3IgIm1haW4iLAorCXdoZW4gbWFpbiBpcyB0aGUgZ2xvYmFsIG1haW4sIG5vdCBzb21lIG5lc3RlZCByb3V0aW5lIHRoYXQKKwloYXBwZW5zIHRvIGJlIGNhbGxlZCBtYWluLgorCitUaHUgTWF5IDE1IDE3OjE5OjUwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBJZiB0aGUgbWFjaGluZSBuZWVkcyB0bworCXBlcmZvcm0gYW55IGFjdGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGFuIGV4cGNldGlvbiBoYW5kbGVyIHRoYXQKKwloYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUsIHVzZSBnZW5fZXhjZXB0aW9uX3JlY2VpdmVyIHRvIGVtaXQgaXQuCisJKGV4cGFuZF9sZWZ0b3Zlcl9jbGVhbnVwcyk6IExpa2V3aXNlLgorCSogYWxwaGEvYWxwaGEubWQgKGV4Y2VwdGlvbl9yZWNlaXZlcik6IFVzZSBpdC4KKwkqIHBhL3BhLmggKGV4Y2VwdGlvbl9yZWNlaXZlcik6IFVzZSBpdC4KKworVGh1IE1heSAxNSAwODozNjo1OSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfZnVuY3Rpb25fZW5kKTogRG9uJ3Qgc3VidHJhY3Qgb25lIGZyb20KKwl0aGUgZW5kIG9mIGZ1bmN0aW9uIHNjb3Bpbmcgc3RhYi4KKworV2VkIE1heSAxNCAyMzoyNzowOSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAubWQgKGFkZGRpMywgc3ViZGkzKTogUmVtb3ZlIGV4cGFuZGVycyBhbmQgcGF0dGVybnMuCisKK1dlZCBNYXkgMTQgMTg6NTE6MzUgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogTWFrZSBzdXJlIHdlIGZpbmlzaCBvZmYgYW55CisJbGVmdG92ZXIgZXhjZXB0aW9uIGhhbmRsZXJzLgorCitUdWUgTWF5IDEzIDE0OjA3OjAxIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbl9zZXRqbXApOiBSZW1vdmUgc2V0dGluZyBvZgorCWN1cnJlbnRfZnVuY3Rpb25faGFzX25vbmxvY2FsX2dvdG8sIGFzIHRoaXMgaXNuJ3QgYSBnb3RvLgorCitUdWUgTWF5IDEzIDE0OjQ3OjQwIDE5OTcgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGNhbWJyaWRnZS5hcm0uY29tKQorCisJKiBhcm0uaCAoQ1BQX1NQRUMpOiBGaXggdHlwbyBpbnZva2luZyBjcHBfZW5kaWFuLgorCSogYXJtL3Qtc2VtaSAoTElCMkZVTkNTX0VYVFJBKTogQnVpbGQgZnAtYml0LmMgd2hlbiBjb21waWxpbmcKKwl3aXRoIC1tc29mdC1mbG9hdC4KKwkqIGFybS5jOiBBZGQgcHJvdG90eXBlcyBmb3IgYWxsIHN0YXRpYyBmdW5jdGlvbnMuCisJKG91dHB1dF9tdWx0aV9pbW1lZGlhdGUsIGludF9sb2cyKTogTWFrZSBzdGF0aWMuCisKKwkqIGFybS5oICgqX1NQRUMpOiBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gbWxlL21iZS4KKwkqIGFybS9jb2ZmLmggKE1VTFRJTElCX0RFRkFVTFRTKTogTGlrZXdpc2UuCisJKiBhcm0vdC1iYXJlIChNVUxUSUxJQl9PUFRJT05TKTogQ2hhbmdlIG9wdGlvbnMgbWJlL21sZSB0byBtYmlnLWVuZGlhbgorCWFuZCBtbGl0dGxlLWVuZGlhbi4KKwkoTVVMVElMSUJfTUFUQ0hFUyk6IE5vdGhpbmcgbWF0Y2hlcyB0aGF0IG1hdHRlcnMuCisKK01vbiBNYXkgMTIgMjA6NDI6MjAgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaCk6IElmIHRoZSBtYWNoaW5lIG5lZWRzIGEKKwlub25sb2NhbF9nb3RvX3JlY2VpdmVyLCBhZGQgb25lIGF0IHRoZSBzdGFydCBvZiB0aGUgZXhjZXB0aW9uCisJaGFuZGxlci4KKwkoZXhwYW5kX2xlZnRvdmVyX2NsZWFudXBzKTogTGlrZXdpc2UuCisKK01vbiBNYXkgMTIgMTc6MzY6MjggMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtaXBzLmMgKG1vdmVfb3BlcmFuZCk6IEFjY2VwdCBhbnkgZ2VuZXJhbCBvcGVyYW5kIGFmdGVyIHJlbG9hZAorCWhhcyBzdGFydGVkLgorCitGcmkgTWF5ICA5IDE0OjI5OjMzIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogbW4xMDMwMC5tZCAodWRpdm1vZGhpNCwgZGl2bW9kaGk0KTogUmVtb3ZlIGV4cGFuZGVyLCBnaXZlCisJY29ycmVzcG9uZGluZyBwYXR0ZXJuIFt1XWRpdm1vZGhpcjQgbmFtZS4gIENsZWFyIE1EUiByZWdpc3RlcgorCWluIHRoZSB1ZGl2bW9kaGk0IHBhdHRlcm4gaXRzZWxmLgorCShjbGVhcl9tZHIpOiBEZWxldGUgcGF0dGVybi4KKworVGh1IE1heSAgOCAxODoyMDozMCAxOTk3IFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhd0BjYW1icmlkZ2UuYXJtLmNvbSkKKworCSogYXJtL2FvdXQuaCAoQVNNX09VVFBVVF9MT05HX0RPVUJMRSk6IERlbGV0ZSBjYWxsIHRvIAorCWFybV9pbmNyZWFzZV9sb2NhdGlvbi4KKwkoQVNNX09VVFBVVF97RE9VQkxFLEZMT0FULElOVCxTSE9SVCxDSEFSLEJZVEUsQVNDSUksU0tJUH0pOiBMaWtld2lzZS4KKwkoQVNNX09VVFBVVF9BTElHTik6IERlbGV0ZSBhbGwgY29kZSByZWZlcmluZyB0byBhcm1fdGV4dF9sb2NhdGlvbi4KKworCSogYXJtLmMgKGFybV9pbmNyZWFzZV9sb2NhdGlvbiwgZ2V0X3Byb2xvZ3VlX3NpemUpOiBEZWxldGUuCisJKGFybV9uYWtlZF9mdW5jdGlvbl9wKTogQWRkIGRlY2xhcmF0aW9uLgorCShhcm1fcGljX3JlZ2lzdGVyKTogRGVmaW5lLgorCShhbGxfcHJvY3MpOiBEZWxldGUgZW50cmllcyBmb3IgYXJtezYwLDYyMCw3MCw3ZCw3ZGksNzAwaSw3MTBjfTsgYWRkCisJZW50cmllcyBmb3IgYXJtezdtLDc1MDBmZSw4fSwgc3Ryb25nYXJtIGFuZCBzdHJvbmdhcm0xMTAuCisJKGFybV9vdmVycmlkZV9vcHRpb25zKTogUmV3b3JrIHNvIHRoYXQgY29uZmlndXJlIGNhbiBwcm9wZXJseSBzZXQKKwl0aGUgZGVmYXVsdCBwcm9jZXNzb3IgdHlwZS4gQWRkIGEgd2FybmluZyB0aGF0IFBJQyBjb2RlIGlzIG5vdCB5ZXQgCisJc3VwcG9ydGVkLgorCShsZWdpdGltYXRlX3BpY19vcGVyYW5kX3AsIGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBOZXcgZnVuY3Rpb25zLgorCShpc19waWMsIGFybV9maW5hbGl6ZV9waWMpOiBOZXcgZnVuY3Rpb25zLgorCShhcm1fYWRqdXN0X2Nvc3QpOiBOZXcgZnVuY3Rpb24uCisJKGNvbnN0X3Bvb2xfb2Zmc2V0LCBhcm1fYmFja3dhcmRzX2JyYW5jaCwgc2hvcnRfYnJhbmNoKTogRGVsZXRlLgorCShhcm1faW5zbl9ub3RfdGFyZ2V0ZWQpOiBEZWxldGUuCisJKGFkZF9jb25zdGFudCk6IElmIGdlbmVyYXRpbmcgQU9GIHN5bnRheCwgdGhlbiBoYW5kbGUgcGljIHNwZWNpYWxseS4KKwkob3V0cHV0X2FzY2lpX3BzZXVkb19vcCk6IERlbGV0ZSBjYWxscyB0byBhcm1faW5jcmVhc2VfbG9jYXRpb24uCisJKGZ1bmN0aW9uX3JlYWxseV9jbG9iYmVyc19scik6IENhbGxzIGZvbGxvd2VkIGJ5IGEgYmFycmllciBkb24ndAorCWNsb2JiZXIgdGhlIGxpbmsgcmVnaXN0ZXIuCisJKG91dHB1dF9mdW5jX3Byb2xvZ3VlKTogSGFuZGxlIEFPRiBzeW50YXggcGljIGNvZGUuCisJKG91dHB1dF9mdW5jX2VwaWxvZ3VlKTogSGFuZGxlIGNhc2VzIHdoZXJlIGxyX3NhdmVfZWxpbWluYXRlZCBpcyBzZXQuCisJRGVsZXRlIGNhbGwgdG8gYXJtX2luY3JlYXNlX2xvY2F0aW9uLgorCShhcm1fYXNtX291dHB1dF9sYWJlbCk6IFNpbXBsaWZ5LCBzaW5jZSB3ZSBuby1sb25nZXIgbmVlZCB0byBjYWNoZSB0aGUKKwlsYWJlbCdzIGFkZHJlc3MuCisJKGFvZl9waWNfZW50cnkpOiBOZXcgZnVuY3Rpb24gdG8ga2VlcCB0cmFjayBvZiBwaWMgc3ltYm9scy4KKwkoYW9mX2R1bXBfcGljX3RhYmxlKTogTmV3IGZ1bmN0aW9uLgorCisJKiBhcm0uaCAoVEFSR0VUX0NQVV9hcm0qLCBUQVJHRVRfQ1BVX3N0cm9uZ2FybSosIFRBUkdFVF9DUFVfZ2VuZXJpYyk6CisJZGVmaW5lLgorCShDUFBfQVJDSF9ERUZBVUxUX1NQRUMpOiBTZXQgdXAgYmFzZWQgb24gc2V0dGluZyBvZiBUQVJHRVRfQ1BVX0RFRkFVTFQuCisJKENQUF9TUEVDKTogU3BsaXQgdXAgaW50byBzdWItcnVsZSBjYWxscy4KKwkoQ1BQX0NQVV9TUEVDKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbi4KKwkoQ1BQX0FQQ1NfUENfU1BFQywgQ1BQX0FQQ1NfUENfREVGQVVMVF9TUEVDKTogQWRkIGRlZmluaXRpb25zLgorCShDUFBfRkxPQVRfU1BFQywgQ1BQX0ZMT0FUX0RFRkFVTFRfU1BFQyk6IEFkZCBkZWZpbml0aW9ucy4KKwkoQ1BQX0VORElBTl9TUEVDLCBDUFBfRU5ESUFOX0RFRkFVTFRfU1BFQyk6IEFkZCBkZWZpbml0aW9ucy4KKwkoQ0MxX1NQRUMpOiBNYXAgbGVnYWN5IC1tWzIzNl0gb250byAtbWNwdT0uLiBhbmQgLW1hcGNzLXsyNiwzMn0gYXMKKwlhcHByb3ByaWF0ZS4gU2ltaWxhcmx5IGZvciAtbWJlIGFuZCAtbWxlIHRvIC1te2JpZyxsaXR0bGV9LWVuZGlhbi4KKwkoRVhUUkFfU1BFQ1MpOiBEZWZpbmUuCisJKGVudW0gcHJvY2Vzc29yX3R5cGUpOiBOZXcgdHlwZXMgZm9yIGFybTggYW5kIHN0cm9uZ2FybS4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBIYW5kbGUgZmxhZ19waWMuCisJKExFR0lUSU1JWkVfQUREUkVTUyk6IExpa2V3aXNlLgorCShBREpVU1RfQ09TVCk6IERlZmluZS4KKwkoUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pOiBEZWZpbmUuCisJKEZJTkFMSVpFX1BJQyk6IERlZmluZS4KKwkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogRGVmaW5lLgorCShPVVRQVVRfSU5UX0FERFJfQ09OU1QpOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBEZWxldGUgY2FsbHMgdG8gYXJtX2luY3JlYXNlX2xvY2F0aW9uLgorCShNQVNLX1JFVFVSTl9BRERSKTogVXNlIFRBUkdFVF9BUENTXzMyIG5vdCBUQVJHRVRfNi4KKworCSogYXJtLm1kIChhdHRyIGNwdSk6IEFkZCBuZXcgY3B1IHR5cGVzIGZvciBhcm04IGFuZCBzdHJvbmdhcm0uCisJKGF0dHIgbGRzY2hlZCk6IE5ldyBhdHRyaWJ1dGUsIHNldCBpZiBwcm9jZXNzb3IgaGFzIGEgbG9hZF9kZWxheSBzbG90LgorCShmdW5jdGlvbl91bml0IGNvcmUpOiBSZXdvcmsgdG8gaGFuZGxlIGxvYWQgZGVsYXkgc2xvdHMuCisJKGZ1bmN0aW9uX3VuaXQgbG9hZGVyKTogTmV3IGZ1bmN0aW9uIHVuaXQuCisJKG1vdnNpKTogSGFuZGxlIHBpYy4KKwkocGljX2xvYWRfYWRkcik6IE5ldyBleHBhbmQuCisJKCpwaWNfbG9hZF9hZGRyX2Jhc2VkX2luc24sIHBpY19hZGRfZG90X3BsdXNfZWlnaHQpOiBOZXcgcGF0dGVybnMuCisJKHBlZXBob2xlcyB0byBjYXVzZSBmbG93IHRvIHJldHVybiB0byBhIGxhYmVsIGFmdGVyIGEgZnVuY3Rpb24gY2FsbCk6CisJRGVsZXRlLCB0aGVzZSBoYXZlIGJlZW4gZGlzYWJsZWQgZm9yIGEgd2hpbGUgbm93LgorCisJKiBhcm0vcmlzY2l4LmggKENQUF9TUEVDKTogUmV3cml0ZSB1c2luZyBuZXcgc3ViLWNvbXBvbmVudHMuCisJKFNVQlRBUkdFVF9DUFVfREVGQVVMVCk6IFNldCB0byBUQVJHRVRfQ1BVX2FybTIuCisJKiBhcm0vcmlzY2l4MS0xLmggKENQUF9TUEVDKTogUmV3cml0ZSB1c2luZyBuZXcgc3ViLWNvbXBvbmVudHMuCisJKFNVQlRBUkdFVF9DUFVfREVGQVVMVCk6IFNldCB0byBUQVJHRVRfQ1BVX2FybTIuCisJKiBhcm0vc2VtaS5oOiAoQ1BQX1NQRUMpOiBEZWxldGUuCisJKFBST0NFU1NPUl9ERUZBVUxUKTogRGVsZXRlLgorCShDUFBfQVBDU19QQ19ERUZBVUxUX1NQRUMpOiBEZWZpbmUuCisJKiBhcm0vc2VtaWFvZi5oIChDUFBfU1BFQyk6IERlbGV0ZS4KKwkoQ1BQX0FQQ1NfUENfREVGQVVMVF9TUEVDKTogRGVmaW5lLgorCSogYXJtL3Qtc2VtaSAoTElCR0NDMV9URVNUKTogRG9uJ3QgYnVpbGQgaXQuCisJKE1VTFRJTElCX3tPUFRJT05TLERJUk5BTUVTLEVYQ0VQVElPTlN9KTogQnVpbGQgYSBzdWl0YWJsZSBzZXQgb2YKKwljcm9zcyBsaWJyYXJpZXMuCisJKExJQkdDQyk6IFNldCB0byBzdG1wLW11bHRpbGliLgorCShJTlNUQUxMX0xJQkdDQyk6IFNldCB0byBpbnN0YWxsLW11bHRpbGliLgorCitUaHUgTWF5ICA4IDE1OjIwOjQ2IDE5OTcgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2LmMgKG91dHB1dF9mbG9hdF9jb21wYXJlKTogRm9yIHBlbnRpdW1wcm8gdXNlIGZjb21pcAorCWZvbGxvd2VkIGJ5IGEgZmxvYXQgc3RhY2sgcG9wIGZvciAiY29tcGFyZTtwb3A7cG9wIiBjYXNlcy4KKworVGh1IE1heSAgOCAxMzoyMDoyMCAxOTk3ICBDaHJpcyBUb3JlayAgPHRvcmVrQGVsZi5ic2RpLmNvbT4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCB0cnV0aF9hbmRvcik6IERpc2FibGUgb3B0aW1pemF0aW9uIGZvciAKKwlzaWRlIGVmZmVjdHMgb24gUkhTLgorCitXZWQgTWF5ICA3IDE1OjQzOjU3IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZXhjZXB0LmMgKHN0YXJ0X2R5bmFtaWNfaGFuZGxlcik6IEZpeCBzbyB0aGF0IHdlIGNhbiB1c2UKKwlfX2J1aWx0aW5fc2V0am1wLCBhbmQgZGVmYXVsdCB0byB1c2luZyBfX2J1aWx0aW5fc2V0am1wIGluc3RlYWQgb2YKKwlzZXRqbXAuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluX3NldGptcCk6IE5ldyByb3V0aW5lLCBzcGxpdCBvdXQgZnJvbQorCWV4aXN0aW5nIGlubGluZSBjb2RlIGZyb20gZXhwYW5kX2J1aWx0aW4uCisJKGV4cGFuZF9idWlsdGluKTogU3BsaXQgb3V0IGNvZGUgaW50byBleHBhbmRfYnVpbHRpbl9zZXRqbXAuCisJKiBleHByLmggKGV4cGFuZF9idWlsdGluX3NldGptcCk6IEFkZCBkZWNsYXJhdGlvbi4KKwkqIGxpYmdjYzIuYyAoX19zanRocm93KTogRGVmYXVsdCB0byB1c2luZyBfX2J1aWx0aW5fc2V0am1wIGluc3RlYWQKKwlvZiBzZXRqbXAuCisJKF9fc2pwb3BudGhyb3cpOiBMaWtld2lzZS4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IExpa2V3aXNlLgorCitXZWQgTWF5ICA3IDE4OjAxOjI0IDE5OTcgIFNhbXVlbCBGaWd1ZXJvYSAgPFNhbXVlbF9GaWd1ZXJvYUBuZXh0LmNvbT4KKworCSogcnM2MDAwLm1kIChpbnN2KTogT25seSBjb21iaW5lIGluc2VydCB3aXRoIHNoaWZ0IGlmCisJcmVtYWluaW5nIHNvdXJjZSBiaXRzID49IGRlc3RpbmF0aW9uIGZpZWxkIHNpemUuCisKK1R1ZSBNYXkgIDYgMTU6NDg6NTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQGdlcmJpbC5jeWdudXMuY29tPgorCisJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2JlZ2luX3Byb2xvZ3VlKTogSW5jcmVtZW50CisgCWN1cnJlbnRfZnVuY2RlZl9udW1iZXIgaGVyZS4KKwkoZHdhcmYyb3V0X2VuZF9lcGlsb2d1ZSk6IE5vdCBoZXJlLgorCitNb24gTWF5ICA1IDE4OjUyOjMyIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogaDgzMDAuYyAobm90aWNlX3VwZGF0ZV9jYyk6IFVzZSBDQ19TRVRfWk4gYW5kIENDX1NFVF9aTlYuCisJKHNoaWZ0X29uZSwgc2hpZnRfdHdvKTogU2V0IENDX05PX0NBUlJZIGFzIG5lZWRlZC4gIFJlbW92ZQorCXJlZmVyZW5jZXMgdG8gQ0NfT1ZFUkZMT1dfMC4KKwkoZW1pdF9hX3NoaWZ0KTogU2ltaWxhcmx5LgorCSogaDgzMDAuaCAoQ0NfT1ZFUkZMT1dfMCk6IFJlbW92ZS4KKwkqIGg4MzAwLm1kOiBVc2Ugc2V0X3puIGFuZCBzZXRfem52IGZvciBjYzAgdHJhY2tpbmcuCisJKGJDQyk6IFJlc3RvcmUgdGhlIGNvbXBhcmlzb24gaXMgQ0NfT1ZFUkZMT1dfVU5VU0FCTEUgaXMgc2V0IGFuZAorCXRoZSBjb21wYXJpc29uIG5lZWRzIHRoZSBvdmVyZmxvdyBiaXRzLgorCisJKiBtbjEwMzAwLmMgKG5vdGljZV91cGRhdGVfY2MpOiBVc2UgQ0NfU0VUX1pOIGFuZCBDQ19TRVRfWk5WLgorCSogbW4xMDMwMC5oIChDQ19OT19DQVJSWSk6IERlZmluZS4KKwkqIG1uMTAzMDAubWQ6IFVzZSAic2V0X3puIiBhbmQgInNldF96bnYiIHRvIG1vcmUgYWNjdXJhdGVseQorCWRlc2NyaWJlIGNjMCBzdGF0dXMuCisKK0ZyaSBNYXkgIDIgMTc6MDA6MzMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBkd2FyZjJvdXQuYzogUmVvcmdhbml6ZSwgbW92aW5nIC5kZWJ1Z19mcmFtZSBzdXBwb3J0IHRvIHRoZSB0b3AKKwlvZiB0aGUgZmlsZSwgYW5kIGNvbXBpbGUgaXQgaWYgSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYIGlzIGRlZmluZWQKKwlldmVuIGlmIERXQVJGMl9ERUJVR0dJTkdfSU5GTyBpc24ndC4KKwkoRUhfRlJBTUVfU0VDVElPTik6IE5ldyBtYWNyby4KKwkob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IEhhbmRsZSAuZWhfZnJhbWUgdmFyaWFudC4KKwkoZHdhcmYyb3V0X2RlZl9jZmEpOiBVcGRhdGUgY2ZhXyp7cmVnLG9mZnNldH0uCisJKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IE1vdmUgY2ZhXyp7cmVnLG9mZnNldH0gdG8gZmlsZSBzY29wZS4KKwkoZHdhcmYyb3V0X2VuZF9lcGlsb2d1ZSk6IEluY3JlbWVudCBjdXJyZW50X2Z1bmNkZWZfbnVtYmVyIGhlcmUuCisJKGR3YXJmMm91dF9kZWNsKTogTm90IGhlcmUuCisJKGR3YXJmMm91dF9mcmFtZV9pbml0LCBkd2FyZjJvdXRfZnJhbWVfZmluaXNoKTogTmV3IGZucy4KKwkoZHdhcmYyb3V0X2luaXQsIGR3YXJmMm91dF9maW5pc2gpOiBDYWxsIHRoZW0uCisJKG91dHB1dF9kaWUpOiBBZGQgbWlzc2luZyAnY2FzZSA4OicKKwkoZHdhcmYyb3V0X2RlY2wpOiBSZXZlcnQgb3RoZXIgY29udGV4dF9kaWUgPSBOVUxMIGNoYW5nZS4KKwkoYWRkX2JvdW5kX2luZm8pOiBSZXN0b3JlIGRlZmF1bHQgY2FzZS4KKworRnJpIE1heSAgMiAxNTozMDoxNiAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQHNlYmEuY3lnbnVzLmNvbT4KKworCSogbTMyci9tMzJyLmggKExJVF9OQU1FX1ApOiBOZXcgbWFjcm8uCisJKFNNQUxMX05BTUVfUCk6IFVzZSBpdC4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTik6IERvbid0IG91dHB1dCB0byBzY29tbW9uIGlmIC1tc2RhdGE9bm9uZS4KKwkqIG0zMnIvbTMyci5jIChhZGRyMjRfb3BlcmFuZCk6IEhhbmRsZSBsaXRlcmFscy4KKwkobTMycl9vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBVc2UgSU1NRURJQVRFX1BSRUZJWC4KKwkobTMycl9vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBMaWtld2lzZS4gIFVzZSBzaG9ydGVyIGFkZCBpbnNuIGlmCisJYWJsZS4KKworRnJpIE1heSAgMiAxNDo0MDo0NCAxOTk3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmggKFJTNjAwMF9BTElHTik6IE1hY3JvIHJlbmFtZWQgZnJvbSBBTElHTi4KKwkqIHJzNjAwMC5jIChyczYwMDBfc3RhY2tfaW5mbyk6IFVzZSBpdC4KKworRnJpIE1heSAgMiAxNDoxNTo1NCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9ub29wX3NldF9wKTogV2hlbiBjaGVja2luZyB0aGUgdmFsdWVzCisJZXF1aXZhbGVudCB0byBzcmVnLCBtYWtlIHN1cmUgdGhlIG1vZGUgaXMgcmlnaHQuCisKK0ZyaSBNYXkgIDIgMTI6NTM6MDMgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfaW52YWxpZGF0ZV9yZWdubyk6IFByb3Blcmx5IHNldAorCXRoZSBtb2RlIGZvciBpbnZhbGlkYXRlX3JlZ25vX3J0eC4KKworVGh1IE1heSAgMSAxNDo1NzozNSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLm1kIChjYWxsX2ludGVybmFsX3N5bXJlZik6IEZpeCB0eXBvLgorCitUaHUgTWF5ICAxIDE0OjQ0OjE3IDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChtaXBzX2FzbV9maWxlX3N0YXJ0KTogVXNlIG5ldyBtYWNybyBUQVJHRVRfRklMRV9TV0lUQ0hJTkcuCisJKG1pcHNfYXNtX2ZpbGVfZW5kKTogTGlrZXdpc2UuCisJKiBtaXBzLmggKFRBUkdFVF9GSUxFX1NXSVRDSElORyk6IERlZmluZS4KKwkoTk9fREJYX0ZVTkNUSU9OX0VORCk6IERlZmluZS4KKworVGh1IE1heSAgMSAwOTowODo0MCAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogbTY4ay5jIChvdXRwdXRfYWRkc2kzKTogUmVwbGFjZSAiXFw7IiBieSAiXG5cdCIgaW4KKwlhc3NlbWJsZXIgdGVtcGxhdGVzLgorCitUaHUgTWF5ICAxIDA5OjAwOjQyIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMsIGNhc2UgU1VCUkVHKTogQ2FuY2VsIGNoYW5nZXMgb25jZQorCWRvbmUgd2l0aCByZXN1bHQuCisKK1dlZCBBcHIgMzAgMTk6NDU6NTYgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtaXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgbWlwc19zcGxpdF9hZGRyZXNzZXMgb25seSBpZgorCVRBUkdFVF9TUExJVF9BRERSRVNTRVMgaXMgc2V0LgorCSogbWlwcy5oIChNQVNLX1NQTElUX0FERFIsIFRBUkdFVF9TUExJVF9BRERSRVNTRVMpOiBOZXcgbWFjcm9zLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1zcGxpdC1hZGRyZXNzZXMsIC1tbm8tc3BsaXQtYWRkcmVzc2VzLgorCSogY29uZmlndXJlIChtaXBzKi0qLWVjb2ZmKiwgbWlwcyotKi1lbGYqKTogU2V0IE1BU0tfU1BMSVRfQUREUgorCWJpdCBpbiB0YXJnZXRfY3B1X2RlZmF1bHQyLgorCisJKiBmbGFncy5oIChjdXJyZW50X2Z1bmN0aW9uX2lzX3RodW5rKTogQWRkIGV4dGVybiB0byBkZWNsYXJhdGlvbi4KKworCSogZGJ4b3V0LmMgKGRieG91dF9mdW5jdGlvbik6IFRlc3QgTk9fREJYX0ZVTkNUSU9OX0VORCBhdCBydW4gdGltZQorCWluc3RlYWQgb2YgY29tcGlsZSB0aW1lLgorCisJKiB1bnJvbGwuYyAoc2V0X2RvbWluYXRlc191c2UpOiBJbiBzZWNvbmQgbG9vcCwgYWRkIGNoZWNrIGZvciBjb3B5X2VuZC4KKworCSogbWlwcy5tZCAocGFyYWRveGljYWxfZXh0ZW5kaGlkaTIsIHBhcmFkb3hpY2FsX2V4dGVuZHFpZGkyKTogTmV3CisJcGF0dGVybnMuCisKK1dlZCBBcHIgMzAgMDI6MjM6MjQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBvdXRwdXQuaCAobmFtZWRfc2VjdGlvbik6IEFkZCByZWxvYyBhcmd1bWVudC4KKwkoREVDTF9SRUFET05MWV9TRUNUSU9OKTogTmV3IG1hY3JvLgorCSogdmFyYXNtLmMgKG5hbWVkX3NlY3Rpb24pOiBBZGQgcmVsb2MgYXJndW1lbnQsIHBhc3MgaXQgdG8KKyAJQVNNX09VVFBVVF9TRUNUSU9OX05BTUUuCisJKFVOSVFVRV9TRUNUSU9OLCBVTklRVUVfU0VDVElPTl9QKTogUHJvdmlkZSBkZWZhdWx0cy4KKwkoZnVuY3Rpb25fc2VjdGlvbik6IFBhc3MgcmVsb2MgYXJndW1lbnQgdG8gbmFtZWRfc2VjdGlvbi4KKwkodmFyaWFibGVfc2VjdGlvbiwgZXhjZXB0aW9uX3NlY3Rpb24pOiBMaWtld2lzZS4KKwkob3V0cHV0X2NvbnN0YW50X2RlZl9jb250ZW50cyk6IExpa2V3aXNlLgorCShhc3NlbWJsZV9zdGFydF9mdW5jdGlvbik6IFVzZSBVTklRVUVfU0VDVElPTl9QLiAgVU5JUVVFX1NFQ1RJT04gaXMKKyAJbm93IGEgc3RhdGVtZW50LgorCShhc3NlbWJsZV92YXJpYWJsZSk6IExpa2V3aXNlLgorCSogbWlwcy9pcmlzNi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IEFkZCByZWxvYyBhcmcsCisgCXVzZSBERUNMX1JFQURPTkxZX1NFQ1RJT04uCisJKiBwc29zLmgsIHB0eDQuaCwgYTI5ay5oLCBhbHBoYS9lbGYuaCwgYXJtL2NvZmYuaCwgaDgzMDAuaDogTGlrZXdpc2UuCisJKiBpMzg2L2dvMzIuaCwgaTM4Ni9zY281LmgsIG02OGsvY29mZi5oLCBtaXBzL2VsZjY0Lmg6IExpa2V3aXNlLgorCSogbWlwcy9uZXRic2QuaCwgcGEuaCwgcnM2MDAwL3N5c3Y0LmgsIHNoLmgsIHNwYXJjL3N5c3Y0Lmg6IExpa2V3aXNlLgorCSogY29uZmlnL3N2cjQuaAkoU0VMRUNUX1NFQ1RJT04pOiBVc2UgREVDTF9SRUFET05MWV9TRUNUSU9OLgorCShBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IExpa2V3aXNlLCBhZGQgcmVsb2MgYXJndW1lbnQuCisJKE1BS0VfREVDTF9PTkVfT05MWSk6IEp1c3Qgc2V0IERFQ0xfV0VBSy4KKwkoVU5JUVVFX1NFQ1RJT04sIFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCisJKiBpMzg2L2N5Z3dpbjMyLmggKFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCisJKFNVUFBPUlRTX09ORV9PTkxZKTogRGVmaW5lLgorCShNQUtFX0RFQ0xfT05FX09OTFkpOiBMb3NlLgorCShBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IEFkZCByZWxvYyBhcmcsIHVzZSBERUNMX1JFQURPTkxZX1NFQ1RJT04uCisJKiBpMzg2L3dpbm50LmMgKGkzODZfcGVfdW5pcXVlX3NlY3Rpb24pOiBBZGQgcmVsb2MgYXJnLCAKKwl1c2UgREVDTF9SRUFET05MWV9TRUNUSU9OLgorCisJKiBtaXBzL2lyaXM2LmggKENUT1JTX1NFQ1RJT05fQVNNX09QKTogQ2hhbmdlIGFsaWdtZW50IGJhc2VkIG9uIEFCSS4KKwkoRFRPUlNfU0VDVElPTl9BU01fT1ApOiBMaWtld2lzZS4KKworVHVlIEFwciAyOSAxNjowODowNyAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhL2xpYjFmdW5jcy5hc20gKGRpdm5vcm0sIG1vZG5vcm0sIGV4aXRkaXYpOiBGaXggY29kZSB0bworCW5lZ2F0ZSBTSW1vZGUgdmFsdWVzLgorCitUdWUgQXByIDI5IDEyOjU0OjE0IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZXhjZXB0LmMgKGV4cGFuZF9laF9yZWdpb25fc3RhcnRfdHJlZSk6IEFkZCBERUNMIGFyZ3VtZW50IHNvIHdlCisgCWNhbiBiZXR0ZXIgdHJhY2sgd2h5IHRoZSByZWdpb24gd2FzIG1hZGUgZm9yIGVycm9yIHJlcG9ydGluZy4KKwkqIGV4Y2VwdC5oIChleHBhbmRfZWhfcmVnaW9uX3N0YXJ0X3RyZWUpOiBMaWtld2lzZS4KKwkqIHRyZWUuaCAoZXhwYW5kX2RoY19jbGVhbnVwKTogTGlrZXdpc2UuCisJKGV4cGFuZF9kY2NfY2xlYW51cCk6IExpa2V3aXNlLgorCSogZXhjZXB0LmMgKGV4cGFuZF9laF9yZWdpb25fc3RhcnRfZm9yX2RlY2wpOiBOZXcgcm91dGluZS4KKwkqIGV4Y2VwdC5oIChleHBhbmRfZWhfcmVnaW9uX3N0YXJ0X2Zvcl9kZWNsKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsX2NsZWFudXApOiBBZGQgREVDTCB0byBjYWxsIG9mCisJZXhwYW5kX2VoX3JlZ2lvbl9zdGFydF90cmVlLgorCShleHBhbmRfZGNjX2NsZWFudXApOiBMaWtld2lzZS4KKwkoZXhwYW5kX2RoY19jbGVhbnVwKTogTGlrZXdpc2UuCisJCisJKGV4cGFuZF9zdGFydF9jYXNlKTogU3dpdGNoZXMgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGNvbnRleHRzLgorCShleHBhbmRfc3RhcnRfY2FzZV9kdW1teSk6IExpa2V3aXNlLgorCShleHBhbmRfc3RhcnRfY2FzZV9kdW1teSk6IExpa2V3aXNlLgorCShleHBhbmRfZW5kX2Nhc2UpOiBMaWtld2lzZS4KKworVHVlIEFwciAyOSAxMTo0NTowOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZGVjbCk6IFVuZG8gZWFybGllciBjaGFuZ2UuCisJKGNvbnN0YW50X3NpemUpOiBMaWtld2lzZS4KKwkoZ2VuX3N1YnByb2dyYW1fZGllKTogSGFuZGxlIE5VTEwgY29udGV4dF9kaWUuCisKKwkqIG1pcHMvaXJpczYuaCAoQVNNX09VVFBVVF9DT05TVFJVQ1RPUik6IEZpeCBmb3IgLW1hYmk9NjQuCisJKEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IExpa2V3aXNlLgorCitNb24gQXByIDI4IDA5OjEwOjE5IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogaDgzMDAuYyAocHVzaF9vcmRlciwgcG9wX29yZGVyKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIKKwllbnRyaWVzLgorCitGcmkgQXByIDI1IDE5OjM5OjQzIDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogaDgzMDAuYyAob3V0cHV0X2FkZHNfc3Vicyk6IGNoZWNrIGZvciBhZGRpbmcgMC4KKworRnJpIEFwciAyNSAxNDo1MjozMSAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoaVszNDU2XTg2LSotZnJlZWJzZGVsZiosIGlbMzQ1Nl04Ni0qLWZyZWVic2QqKTogVXNlCisJdC1mcmVlYnNkIGluc3RlYWQgb2YgeC1mcmVlYnNkLgorCSogaTM4Ni90LWZyZWVic2Q6IFJlbmFtZWQgZnJvbSB4LWZyZWVic2QuCisKK0ZyaSBBcHIgMjUgMTI6MTY6MjAgMTk5NyAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGdvMzIuaCAoREJYXyopOiBVc2UgZGVmaW5pdGlvbnMgZnJvbSBjb25maWcvZGJ4Y29mZi5oIGluc3RlYWQuCisKK0ZyaSBBcHIgMjUgMTE6NTU6NTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBpMzg2L2N5Z3dpbjMyLmggKE1VTFRJUExFX1NZTUJPTF9TUEFDRVMpOiBEZWZpbmUuCisKK1RodSBBcHIgMjQgMTg6MzI6NTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBpMzg2L3dpbm50LmMgKGkzODZfcGVfdW5pcXVlX3NlY3Rpb24pOiBOZXcgZm4uCisJKiBpMzg2L2N5Z3dpbjMyLmggKFVOSVFVRV9TRUNUSU9OKTogRGVmaW5lLgorCShNQUtFX0RFQ0xfT05FX09OTFkpOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogU3VwcG9ydCBERUNMX09ORV9PTkxZLgorCisJKiBjLWRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogRG9uJ3Qgc2V0IERFQ0xfQVJUSUZJQ0lBTC4KKworVGh1IEFwciAyNCAxNzoxMToyMyAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG02OGsuaCAoTUFDSElORV9TVEFURV9TQVZFLCBNQUNISU5FX1NUQVRFX1JFU1RPUkUpOiBBZGQKKwlUQVJHRVRfNTIwMCBzdXBwb3J0LgorCitUaHUgQXByIDI0IDE2OjM5OjI1IDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIHN0bXQuYyAocHVzaGNhc2VfcmFuZ2UpOiBDaGVjayBmb3IgbnVsbCByYW5nZSBmaXJzdC4KKworV2VkIEFwciAyMyAyMzowNjoyOCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWNvcmRfc2V0KTogVXNlIHB1c2hfb3BlcmFuZCB0byBjaGVjayBmb3IKKyAJY2hhbmdlcyB0byB0aGUgc3RhY2sgcG9pbnRlci4KKworV2VkIEFwciAyMyAxOTo1NjowMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSWYgd2UncmUgaW4gYSB0aHVuaywgcGFzcyB0aHJvdWdoIGludmlzaWJsZQorIAlyZWZlcmVuY2VzIGluc3RlYWQgb2YgbWFraW5nIGEgY29weS4KKwkqIGZsYWdzLmg6IEFkZCBjdXJyZW50X2Z1bmN0aW9uX2lzX3RodW5rLgorCSogZnVuY3Rpb24uYzogTGlrZXdpc2UuCisJKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplIGl0LgorCShwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBTYXZlIGl0LgorCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogUmVzdG9yZSBpdC4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEFkZCBpc190aHVuay4KKworV2VkIEFwciAyMyAxNzo0NzoyNSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IEhhbmRsZSBtb3JlIGNhc2VzIHdoZXJlIHdlCisJbmVlZCBzZWNvbmRhcnkgcmVsb2Fkcy4KKwkoaW1wb3NzaWJsZV9wbHVzX29wZXJhbmQpOiBBY2NlcHQgYW55dGhpbmcgdGhhdCBpbnZvbHZlcyBhZGRpdGlvbgorCW9mIHRoZSBzdGFjayBwb2ludGVyLgorCSogbW4xMDMwMC5tZCAocmVsb2FkX2luc2kpOiBBbHdheXMgbG9hZCB0aGUgc3RhY2sgcG9pbnRlciBpbnRvCisJdGhlIGRlc3RpbmF0aW9uICh3aGljaCBpcyBhbHdheXMgYW4gYWRkcmVzcyByZWdpc3RlcikuCisJKiBtbjEwMzAwLmggKFNUT1JFX0ZMQUdfVkFMVUUpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIHhtLW1uMTAzMDAuaDogRGVjbGFyZSBtYWxsb2MsIHJlYWxsb2MsIGNhbGxvYyBhbmQgZnJlZS4KKworV2VkIEFwciAyMyAxNDoyODozMCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuaCAoc2p0aHJvd19saWJmdW5jKTogQWRkIHN1cHBvcnQgZm9yIHNldGptcC9sb25nam1wIGJhc2VkCisJZXhjZXB0aW9uIGhhbmRsaW5nLgorCShzanBvcG50aHJvd19saWJmdW5jKTogTGlrZXdpc2UuCisJKHRlcm1pbmF0ZV9saWJmdW5jKTogTGlrZXdpc2UuCisJKHNldGptcF9saWJmdW5jKTogTGlrZXdpc2UuCisJKGxvbmdqbXBfbGliZnVuYyk6IExpa2V3aXNlLgorCShnZXRfZHluYW1pY19oYW5kbGVyX2NoYWluX2xpYmZ1bmMpOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgVFJZX0NBVENIX0VYUFIpOiBMaWtld2lzZS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgUE9QRENDX0VYUFIpOiBMaWtld2lzZS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgUE9QREhDX0VYUFIpOiBMaWtld2lzZS4KKwkqIHN0bXQuYyAobWFya19ibG9ja19hc19laF9yZWdpb24pOiBMaWtld2lzZS4KKwkobWFya19ibG9ja19hc19ub3RfZWhfcmVnaW9uKTogTGlrZXdpc2UuCisJKGlzX2VoX3JlZ2lvbik6IExpa2V3aXNlLgorCShjb25kaXRpb25hbF9jb250ZXh0KTogTGlrZXdpc2UuCisJKGV4cGFuZF9zdGFydF9iaW5kaW5ncyk6IExpa2V3aXNlLgorCShleHBhbmRfZW5kX2JpbmRpbmdzKTogTGlrZXdpc2UuCisJKGV4cGFuZF9kZWNsX2NsZWFudXApOiBMaWtld2lzZS4KKwkoZXhwYW5kX2RjY19jbGVhbnVwKTogTGlrZXdpc2UuCisJKGV4cGFuZF9kaGNfY2xlYW51cCk6IExpa2V3aXNlLgorCShleHBhbmRfY2xlYW51cHMpOiBMaWtld2lzZS4KKwkqIHRyZWUuaCAobWFya19ibG9ja19hc19laF9yZWdpb24pOiBMaWtld2lzZS4KKwkobWFya19ibG9ja19hc19ub3RfZWhfcmVnaW9uKTogTGlrZXdpc2UuCisJKGlzX2VoX3JlZ2lvbik6IExpa2V3aXNlLgorCShjb25kaXRpb25hbF9jb250ZXh0KTogTGlrZXdpc2UuCisJKGV4cGFuZF9kaGNfY2xlYW51cCk6IExpa2V3aXNlLgorCSogZXhjZXB0LmMgKGV4Y2VwdGlvbl92aWFfbG9uZ2ptcCk6IExpa2V3aXNlLgorCShwcm90ZWN0X2NsZWFudXBfYWN0aW9uc193aXRoX3Rlcm1pbmF0ZSk6IExpa2V3aXNlLgorCShjdXJyZW50X2Z1bmN0aW9uX2RoYyk6IExpa2V3aXNlLgorCShjdXJyZW50X2Z1bmN0aW9uX2RjYyk6IExpa2V3aXNlLgorCShhZGRfcGFydGlhbF9lbnRyeSk6IExpa2V3aXNlLgorCShnZXRfZHluYW1pY19oYW5kbGVyX2NoYWluKTogTGlrZXdpc2UuCisJKGdldF9keW5hbWljX2NsZWFudXBfY2hhaW4pOiBMaWtld2lzZS4KKwkoc3RhcnRfZHluYW1pY19jbGVhbnVwKTogTGlrZXdpc2UuCisJKHN0YXJ0X2R5bmFtaWNfaGFuZGxlcik6IExpa2V3aXNlLgorCShleHBhbmRfZWhfcmVnaW9uX3N0YXJ0X3RyZWUpOiBMaWtld2lzZS4KKwkoZXhwYW5kX2VoX3JlZ2lvbl9zdGFydCk6IExpa2V3aXNlLgorCShleHBhbmRfZWhfcmVnaW9uX2VuZCk6IExpa2V3aXNlLgorCShlbWl0X3Rocm93KTogTGlrZXdpc2UuCisJKGV4cGFuZF9sZWZ0b3Zlcl9jbGVhbnVwcyk6IExpa2V3aXNlLgorCShleHBhbmRfc3RhcnRfYWxsX2NhdGNoKTogTGlrZXdpc2UuCisJKGV4cGFuZF9lbmRfYWxsX2NhdGNoKTogTGlrZXdpc2UuCisJKHByb3RlY3Rfd2l0aF90ZXJtaW5hdGUpOiBMaWtld2lzZS4KKwkoc3RhcnRfZWhfdW53aW5kZXIpOiBMaWtld2lzZS4KKwkoZW5kX2VoX3Vud2luZGVyKTogTGlrZXdpc2UuCisJKGluaXRfZWhfZm9yX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKHNhdmVfZWhfc3RhdHVzKTogTGlrZXdpc2UuCisJKHJlc3RvcmVfZWhfc3RhdHVzKTogTGlrZXdpc2UuCisJKGV4Y2VwdGlvbl9vcHRpbWl6ZSk6IExpa2V3aXNlLgorCSogb3B0YWJzLmMgKHNqdGhyb3dfbGliZnVuYyk6IExpa2V3aXNlLgorCShzanBvcG50aHJvd19saWJmdW5jKTogTGlrZXdpc2UuCisJKHRlcm1pbmF0ZV9saWJmdW5jKTogTGlrZXdpc2UuCisJKHNldGptcF9saWJmdW5jKTogTGlrZXdpc2UuCisJKGxvbmdqbXBfbGliZnVuYyk6IExpa2V3aXNlLgorCShnZXRfZHluYW1pY19oYW5kbGVyX2NoYWluX2xpYmZ1bmMpOiBMaWtld2lzZS4KKwkoaW5pdF9vcHRhYnMpOiBMaWtld2lzZS4KKwkqIGV4Y2VwdC5oOiBMaWtld2lzZS4KKwkqIGxpYmdjYzIuYyAoX19kZWZhdWx0X3Rlcm1pbmF0ZSk6IExpa2V3aXNlLgorCShfX3Rlcm1pbmF0ZSk6IExpa2V3aXNlLgorCShfX2dldF9keW5hbWljX2hhbmRsZXJfY2hhaW4pOiBMaWtld2lzZS4KKwkoX19zanRocm93KTogTGlrZXdpc2UuCisJKF9fc2pwb3BudGhyb3cpOiBMaWtld2lzZS4KKwkqIHRvcGxldi5jIChmX29wdGlvbnMpOiBMaWtld2lzZS4KKwkqIHRyZWUuZGVmIChUUllfQ0FUQ0hfRVhQUik6IExpa2V3aXNlLgorCShQT1BESENfRVhQUik6IExpa2V3aXNlLgorCShQT1BEQ0NfRVhQUik6IExpa2V3aXNlLgorCSogY29uZmlnL3BhL3BhLmg6IEpNUF9CVUZfU0laRSBkZWZpbmUuCisJKiBjb25maWcvc3BhcmMvc3BhcmMuaDogSk1QX0JVRl9TSVpFIGRlZmluZS4KKworCSogZXhwci5oIChjbGVhbnVwc190aGlzX2NhbGwpOiBUcmFuc2Zvcm0gdXNlcyBvZiBjbGVhbnVwc190aGlzX2NhbGwKKwlpbnRvIHVzZXMgb2YgdGhlIGNsZWFudXBzIG1hbmFnZWQgYnkgdGhlIGJsb2NrIGNvZGUKKwkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzIGFuZCBmcmllbmRzKS4gIFJlbW92ZSBkZWZlcl9jbGVhbnVwc190byBhbmQKKwlleHBhbmRfY2xlYW51cHNfdG8sIGFuZCB1c2Ugc3RhcnRfY2xlYW51cF9kZWZlcmFsIGFuZAorCWVuZF9jbGVhbnVwX2RlZmVyYWwgaW5zdGVhZC4gIEFkZCBleGNlcHRpb25fcmVnaW9uLAorCXRhcmdldF90ZW1wX3Nsb3RfbGV2ZWwsIGNvbmRpdGlvbmFsX2NvZGUsCisJbGFzdF91bmNvbmRpdGlvbmFsX2NsZWFudXAgYW5kIGNsZWFudXBfcHRyIHRvIHN0cnVjdCBuZXN0aW5nIHRvCisJZmFjaWxpdGF0ZSBjb25kaXRpb25hbCBjbGVhbnVwcy4KKwkqIGV4cHIuYyAoY2xlYW51cHNfdGhpc19jYWxsKTogTGlrZXdpc2UuCisJKGluaXRfZXhwcik6IExpa2V3aXNlLgorCShzYXZlX2V4cHJfc3RhdHVzKTogTGlrZXdpc2UuCisJKHJlc3RvcmVfZXhwcl9zdGF0dXMpOiBMaWtld2lzZS4KKwkoc3RvcmVfZXhwcik6IExpa2V3aXNlLgorCShleHBhbmRfZXhwcik6IExpa2V3aXNlLgorCShkZWZlcl9jbGVhbnVwc190byk6IExpa2V3aXNlLgorCShleHBhbmRfY2xlYW51cHNfdG8pOiBMaWtld2lzZS4KKwkoZG9fanVtcCwgY2FzZSBUUlVUSF9BTkRJRl9FWFBSKTogTGlrZXdpc2UuCisJKGRvX2p1bXAsIGNhc2UgVFJVVEhfT1JJRl9FWFBSKTogTGlrZXdpc2UuCisJKGRvX2p1bXAsIGNhc2UgQ09ORF9FWFBSKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKHN0cnVjdCBuZXN0aW5nKTogTGlrZXdpc2UuCisJKGV4cGFuZF9yZXR1cm4pOiBMaWtld2lzZS4KKwkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzKTogTGlrZXdpc2UuCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBMaWtld2lzZS4KKwkoZXhwYW5kX2NsZWFudXBzKTogTGlrZXdpc2UuCisJKHN0YXJ0X2NsZWFudXBfZGVmZXJhbCk6IExpa2V3aXNlLgkKKwkoZW5kX2NsZWFudXBfZGVmZXJhbCk6IExpa2V3aXNlLgkKKwkqIHRyZWUuaCAoc3RhcnRfY2xlYW51cF9kZWZlcmFsKTogTGlrZXdpc2UuCisJKGVuZF9jbGVhbnVwX2RlZmVyYWwpOiBMaWtld2lzZS4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBMaWtld2lzZS4KKworCSogZXhjZXB0LmMgKGFzeW5jaHJvbm91c19leGNlcHRpb25zKTogU3VwcG9ydAorCS1mYXN5bmNocm9ub3VzX2V4Y2VwdGlvbnMuCisJKGNhbl90aHJvdyk6IExpa2V3aXNlLgorCSogdG9wbGV2LmMgKGZfb3B0aW9ucyk6IExpa2V3aXNlLgorCisJKiBmbGFncy5oIChmbGFnX3Nob3J0X3RlbXBzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIHNob3J0IHRlbXBzLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBMaWtld2lzZS4KKwkqIHRvcGxldi5jIChmbGFnX3Nob3J0X3RlbXBzKTogTGlrZXdpc2UuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X3RhcmdldF90ZW1wcyk6IEFkZCBmb3IgY29udmVuaWVuY2UuCisJKGV4cGFuZF9lbmRfdGFyZ2V0X3RlbXBzKTogTGlrZXdpc2UuCisJKiBleGNlcHQuYyAoanVtcGlmX3J0eCk6IExpa2V3aXNlLgorCSogZXhjZXB0LmMgKGp1bXBpZm5vdF9ydHgpOiBMaWtld2lzZS4KKworCSogc3RtdC5jOiBSZW1vdmUgYWxsIHRyYWNlcyBvZiBlbXB0eV9jbGVhbnVwX2xpc3QuCisKK1dlZCBBcHIgMjMgMTc6MjY6NDAgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfbWVtX2NvbmZsaWN0X3ApOiBEb24ndCBhc3N1bWUgdGhhdCBhCisJU1VCUkVHIGNhbiBub3QgY29uZmxpY3Qgd2l0aCBhIE1FTS4KKworV2VkIEFwciAyMyAwOTo0ODo1OCAxOTk3ICBPbGl2ZXIgS2VsbG9nZyAgKG9saXZlci5rZWxsb2dnQHNwYWNlLm90bi5kYXNhLmRlKQorCisJKiAxNzUwYS5tZCAoY21waGkpOiBGaXhlZCB3aGVuIG5leHQgQ0MgdXNlciBpcyB1bnNpZ25lZC4KKwkobW92W2hxXWktWzIzXSk6IE5ldyBwYXR0ZXJucyBmb3IgbWVtLWluZGlyZWN0IG1vdmVzLgorCShtb3ZoZixtb3Z0cWYpOiBDb3JyZWN0ZWQuCisJKiAxNzUwYS5jIChtZW1vcF92YWxpZCk6IE1lbW9yeSBpbmRpcmVjdGlvbiBub3cgdmFsaWQuCisJKG5vbmluZGlyZWN0X29wZXJhbmQpOiBSZW1vdmUuCisJKHByaW50X29wZXJhbmQpOiBGaXggdGhlICdKJyBvdXRwdXQgbW9kaWZpZXIuCisJKiAxNzUwYS5oIChGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKTogTm90IHJlcXVpcmVkLgorCShJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VULEZJWF9GUkFNRV9QT0lOVEVSX0FERFJFU1MpOiBVbmRlZmluZS4KKwkoRlVOQ1RJT05fUFJPTE9HVUUsRlVOQ1RJT05fRVBJTE9HVUUpOiBIb25vciAtZm9taXQtZnJhbWUtcG9pbnRlci4KKwkoRUxJTUlOQUJMRV9SRUdTLENBTl9FTElNSU5BVEUsSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBEZWZpbmVkLgorCShQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogQ29ycmVjdGVkLgorCShDT05TVF9DT1NUUyxBRERSRVNTX0NPU1QsUkVHSVNURVJfTU9WRV9DT1NULE1FTU9SWV9NT1ZFX0NPU1QpOgorCVNsaWdodCBhZGp1c3RtZW50cy4KKwkoQVNNX0FQUF9PTixBU01fQVBQX09GRik6IENvcnJlY3RlZC4KKwkqIG1zMTc1MC5pbmMgKERVQ1IuTSxEVUMuTSk6IERlZmluZWQuCisKK1dlZCBBcHIgMjMgMDk6NDE6MzUgMTk5NyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IEZpeCBsYXN0IGFyZ3VtZW50IG9mIHRoZSBjYWxsIHRvCisJZmluZF9kdW1teV9yZWxvYWQuCisKK1dlZCBBcHIgMjMgMDk6Mjk6MTQgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogY29uZmlndXJlIChpWzM0NTZdODYtbmV4dC0qLCBtNjhrLW5leHQtbmV4dHN0ZXB7MiwzfSopOgorCVJlbW92ZSBvdXRfZmlsZSBhbmQgYWRkIGV4dHJhX29ianMuCisJKiBjb25maWcvbmV4dHN0ZXAuYzogQWRkIGluY2x1ZGVzIGZvciBjb25maWcuaCwgc3RkaW8uaCwgYW5kIGZsYWdzLmguCisJKiB7aTM4NixtNjhrfS90LW5leHQgKG5leHRzdGVwLm8pOiBOZXcgcnVsZS4KKwkqIG02OGsvbmV4dC5oOiBSZW1vdmUgaW5jbHVkZSBvZiBtYWNobW9kZS5oLgorCSoge2kzODYsbTY4a30vbmV4dC5jOiBGaWxlcyBkZWxldGVkLgorCitUdWUgQXByIDIyIDIwOjQ1OjI5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogc3BhcmMuaCAoREJYX0NPTlRJTl9MRU5HVEgpOiBTaHJpbmsgdG8gMTAwMC4KKworVHVlIEFwciAyMiAxODoyMToyMCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChnZW5fdmFyaWFibGVfZGlyKTogIEFkZCB0ZXN0IGZvciBEV19BVF9kZWNsYXJhdGlvbiB0bworCXRoZSBvbGRfZGllIGlmIHN0YXRlbWVudCwgYW5kIGRlbGV0ZSBhc3NlcnRpb24gZm9yIGl0LgorCShkZWNsX3VsdGltYXRlX29yaWdpbik6IFJlbW92ZSBsYXN0IGNoYW5nZS4KKworVHVlIEFwciAyMiAxMDoyMjoyNyAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAuYyAoZXhwYW5kX3Byb2xvZ3VlKTogRW5kIHRoZSBjdXJyZW50IHNlcXVlbmNlIGJlZm9yZQorCWNvdW50aW5nIHRoZSB0c3QgaW5zbnMgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBTdGFydCBhIG5ldworCW9uZSBiZWZvcmUgZW1pdHRpbmcgYW55IHByb2xvZ3VlIGluc3RydWN0aW9ucy4KKworCSogbW4xMDMwMC5oIChSRUdJU1RFUl9NT1ZFX0NPU1QpOiBCdW1wIHVwIGNvc3Qgb2YgbW92ZXMgaW4gdGhlCisJc2FtZSBjbGFzcy4KKworCSogbW4xMDMwMC5tZCAodW50eXBlZF9jYWxsKTogTmV3IGV4cGFuZGVyLgorCitNb24gQXByIDIxIDE2OjMwOjIxIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBQTFVTKTogV2hlbiBzZWVpbmcgaWYgbmVnYXRpdmUgb2YgY29uc3RhbnQKKwlpcyBhcm91bmQsIG1ha2Ugc3VyZSBub3QgZGVhbGluZyB3aXRoIGxhcmdlc3QgbmVnYXRpdmUuCisKK01vbiBBcHIgMjEgMTM6NTc6NTMgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtaXBzL3QtZWNvZmY6IFNldCBUQVJHRVRfTElCR0NDMl9DRkxBR1MgaW5zdGVhZCBvZiBMSUJHQ0MyX0NGTEFHUy4KKworCSogbTY4ay5jIChvdXRwdXRfYWRkc2kzKTogTmV3IGZ1bmN0aW9uLiAgRnJvbSBhZGRzaTMgcGF0dGVybi4KKwkqIG02OGsuaCAob3V0cHV0X2FkZHNpMyk6IEFkZCBkZWNsYXJhdGlvbi4KKwkqIG02OGsubWQgKG1vdnFpKzIpOiBBZGQgYWRkcmVzcyByZWdpc3RlcnMuCisJKG1vdnhmKzEpOiBEaXNhYmxlIGZvciBUQVJHRVRfNTIwMC4KKwkobW92eGYrMik6IE5ldyBwYXR0ZXJuIGZvciBUQVJHRVRfNTIwMC4KKwkoYWRkc2kzKTogQWRkIGRlZmluZV9leHBhbmQuICBNb3ZlIGNvZGUgdG8gb3V0cHV0X2FkZHNpMy4KKwkoYWRkc2kzX2ludGVybmFsKTogUmVuYW1lZCBmcm9tIGFkZHNpMy4gIERpc2FibGUgZm9yIFRBUkdFVF81MjAwLgorCShhZGRzaTNfNTIwMCk6IE5ldyBwYXR0ZXJuIGZvciBUQVJHRVRfNTIwMC4KKworU3VuIEFwciAyMCAxMDo0NTozNSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IENvbnN0YW50cyBhcmUgbm90IGVxdWFsIGlmIHRoZXJlCisJaGFzIGJlZW4gYW4gb3ZlcmZsb3cuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBTaG9ydGVuICJicmFuY2gtcHJvYmFiaWxpdGllcyIgaW4KKyAJb3V0cHV0IG9mIHRpbWVzLgorCisJKiBhbHBoYS92bXMuaCAoTU9EW1NEXUkzX0xJQkNBTEwpOiBDYWxsIG90cyRyZW0sIG5vdCBvdHMkbW9kLgorCShEV0FSRjJfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCisKKwkqIGFscGhhLmMgKGFscGhhX25lZWRfbGlua2FnZSk6IENhbGwgZ2V0X2lkZW50aWZpZXIuCisKKwkqIHJzNjAwMC5jIChyczYwMDBfb3V0cHV0X2xvYWRfdG9jX3RhYmxlKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfcHJvbG9nKTogQ2FsbCBpdCBpbnN0ZWFkIG9mIGRvaW5nIGl0IGRpcmVjdGx5LgorCSogcnM2MDAwLm1kIChub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogTmV3IHBhdHRlcm4uCisKKwkqIGR3YXJmMm91dC5jOiBNYWpvciBjbGVhbnVwOyBtb3N0bHkgcmVmb3JtYXR0aW5nLgorCUluY2x1ZGUgZXhwci5oLgorCVVuZGVmaW5lIGlubGluZSBpZm5kZWYgX19HTlVDX187IG5ldmVyIGRlZmluZSB0byBpbmNsdWRlIHN0YXRpYy4KKwlBZGQgInN0YXRpYyIgdG8gaGVhZGVyIG9mIGFsbCBpbmxpbmVkIGZ1bmN0aW9ucy4KKwlBZGQgZGVjbGFyYXRpb25zIGZvciBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2l0aCBwcm90b3R5cGVzLgorCShhZGRyX2NvbnN0X3RvX3N0cmluZyk6IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UXyogbWFjcm9zLgorCShhZGRfQVRfKiwgbmV3X3tkaWUsbG9jX2Rlc2NyLGNmaSk6IERvbid0IGNoZWNrIGZvciB4bWFsbG9jCisJcmV0dXJuaW5nIHplcm8uCisJKG1vZGlmaWVkX3R5cGVfZGllKTogQWRkIG1pc3NpbmcgcGFybSBvbiByZWN1cnNpdmUgY2FsbC4KKwkoe3JlZyxiYXNlZH1fbG9jX2Rlc2NyaXB0b3IpOiBBZGQgbWlzc2luZyBhcmcgdG8gY2FsbCB0byBuZXdfbG9jX2Rlc2NyLgorCShhZGRfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogVXNlIFJFQUxfVkFMVUVfVFlQRSBmb3IgZnAgY2FsY3VsYXRpb25zLgorCShvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQWRkIG1pc3NpbmcgYXJnIHRvIG91dHB1dF9jZmkgY2FsbC4KKwkoZHdhcmYyb3V0X2RlZl9jZmEpOiBMb2NhbCB2YXJpYWJsZSBPTERfUkVHIG11c3QgYmUgdW5zaWduZWQgbG9uZy4KKwkqIE1ha2VmaWxlLmluIChkd2FyZjJvdXQubyk6IEluY2x1ZGVzIGV4cHIuaC4KKwkKKwkqIGR3YXJmMm91dC5jOiBDYXN0IGZpcnN0IGFyZyBpbiBhbGwgY2FsbHMgdG8gYnplcm8gdG8gY2hhciAqLgorCShkZWNsX3VsdGltYXRlX29yaWdpbik6IFJldHVybiBOVUxMIGlmIGVxdWFsIHRvIGRlY2wuCisJKGNvbnN0YW50X3NpemUpOiBOZXZlciByZXR1cm4gbW9yZSB0aGFuIDQuCisJKHZhbHVlX2Zvcm1hdCwgY2FzZSA4KTogTmV3IGNhc2UuCisJKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IFVzZSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLgorCShiYXNlZF9sb2NfZGVzY3IpOiBMaWtld2lzZS4KKwkoYWRkX2JvdW5kX2luZm8pOiBEZWxldGUgZGVmYXVsdCBjYXNlLgorCUFkZCBjYXNlcyBmb3IgQ09OVkVSVF9FWFBSIGFuZCBOT05fTFZBTFVFX0VYUFI7IHRyZWF0IGxpa2UgTk9QX0VYUFIuCisJQ2hhbmdlIE5PUF9FWFBSIHRvIHRvIHJlY3Vyc2l2ZSBjYWxsLgorCShhZGRfdHlwZV9hdHRyaWJ1dGUpOiBJZ25vcmUgdW5uYW1lZCBzdWJ0eXBlIG9mIGludGVncmFsIG9yIEZQLgorCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBVc2UgcmVnX2xvY19kZXNjcmlwdG9yLgorCShkd2FyZjJvdXRfZGVjbCk6IElnbm9yZSBuZXN0ZWQgZnVuY3Rpb25zLgorCisJKiBmaXgtaGVhZGVyLmMsIHByb3RvaXplLmMsIGdjb3YuYzogVXNlIHN5bWJvbGljIGNvZGVzIGZvciBleGl0LgorCisJKiBmaW5hbC5jIChwcm9maWxlX2Z1bmN0aW9uKTogT25seSBjYWxsIEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0KKwlpZiBkZWZpbmVkLgorCisJKiBleHByLmMgKHttb3ZlLGNsZWFyfV9ieV9waWVjZXNfMSwgZXhwYW5kX2Fzc2lnbm1lbnQpOiBFbnN1cmUKKwl3ZSBoYXZlIHVuc2hhcmVkIHJ0eCBiZWZvcmUgY2hhbmdpbmcgZmxhZ3MuCisJKHN0b3JlX3tjb25zdHJ1Y3RvcixmaWVsZH0pOiBMaWtld2lzZS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IExpa2V3aXNlLgorCShzdG9yZV9leHByKTogQ2hlY2sgaWYgVEVNUCBhbmQgVEFSR0VUIGFyZSBzYW1lIHdpdGggcnR4X2VxdWFsX3AuCisKKwkqIGVtaXQtcnRsLmMgKGNoYW5nZV9hZGRyZXNzLCBpbml0X2VtaXQpOiBEZWxldGUgZm9yd2FyZCByZWZlcmVuY2VzLgorCShydGxfb2JzdGFjaywgc3RhY2tfZGVwdGgsIG1heF9zdGFja19kZXB0aCk6IERlbGV0ZSBleHRlcm4gZGVjbHMuCisKK0ZyaSBBcHIgMTggMTg6MjU6NTIgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV9kZWNscyk6IEZvciBERUNMX0lOQ09NSU5HX1JUTCwgdXNlIG1heAorCW9mIHR5cGUgc2l6ZSBhbmQgbW9kZSBzaXplIGluIGluc3RhbnRpYXRlX2RlY2wgY2FsbC4KKworCSogZml4aW5jbHVkZXMgKHN5cy9sY19jb3JlLmgpOiBGaXggT1NGMS80LnggbmFtZXNwYWNlIHBvbGx1dGlvbi4KKworV2VkIEFwciAxNiAxOTozNjo1MyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChhZGRfYm91bmRfaW5mbyk6IFVzZSBhIERJRSBpbnN0ZWFkIG9mIGEgbG9jYXRpb24KKwlleHByZXNzaW9uIGZvciB2YXJpYWJsZSBib3VuZHMuICBUcnVzdCBhIE1FTSBydHggZXZlbiB3aGVuCisJb3B0aW1pemluZy4KKwkoRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTik6IERlZmF1bHQgdG8gRklSU1RfUFNFVURPX1JFR0lTVEVSLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFJUTF9FWFBSKTogSWYgdGhlcmUgaXMgbm8gc2VxdWVuY2UsCisgCWRvbid0IHNldCBpdCB0byBjb25zdDBfcnR4LgorCSogdHJlZS5jIChhcnJheV90eXBlX25lbHRzKTogRG9uJ3QgcmV0dXJuIGFueSBTQVZFX0VYUFJzLgorCitNb24gQXByIDE0IDE4OjEyOjU3IDE5OTcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuaCAoUlM2MDAwX0lUUlVOQywgUlM2MDAwX1VJVFJVTkMpOiBQcmVwZW5kIHVuZGVyc2NvcmVzLgorCShSUzYwMDBfTUNPVU5UKTogTmV3IG1hY3JvLgorCShBU01fRklMRV9TVEFSVCk6IFVzZSBSUzYwMDBfTUNPVU5ULgorCSogcnM2MDAwLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IFVzZSBSUzYwMDBfTUNPVU5ULgorCSogcnM2MDAwL2FpeDMxLmggKFJTNjAwMF97SVRSVU5DLFVJVFJVTkMsTUNPVU5UfSk6IE5ldyBtYWNyb3MuCisKK01vbiBBcHIgMTQgMTQ6Mzc6MjcgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMzAwLmMgKGNhbl91c2VfcmV0dXJuX2luc24pOiBJbmNsdWRlIG91dGdvaW5nIGFyZ3VtZW50CisJYXJlYSBpbiBzaXplIGNvbXB1dGF0aW9uLgorCShleHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4gIE5vIGxvbmdlciBkaWRkbGUgd2l0aCBzZXF1ZW5jZXMuCisJUHV0IHJlZ2lzdGVyIHNhdmVzIGp1c3QgYmVmb3JlIG91dGdvaW5nIGFyZ3VtZW50IGFyZWEuCisJKGV4cGFuZF9lcGlsb2d1ZSk6IFNpbWlsYXJseS4KKwkoaW1wb3NzaWJsZV9wbHVzX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKiBtbjEwMzAwLmggKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBOZXZlciByZXF1aXJlIGEgZnJhbWUgcG9pbnRlci4KKwkoQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTLCBPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRSk6IERlZmluZS4KKwkoaW1wb3NzaWJsZV9wbHVzX29wZXJhbmQpOiBEZWNsYXJlLgorCSogbW4xMDMwMC5tZCAocmVsb2FkX2luc2kpOiBOZXcgZXhwYW5kZXIgdG8gaGFuZGxlIHBhdGhvbG9naWNhbAorCXJlbG9hZCBjYXNlcy4KKwkoYWRkc2kzKTogRml4IENDIHN0YXR1cy4KKworCSogbW4xMDMwMC5oIChGVU5DVElPTl9WQUxVRSk6IFJldHVybiBhZGRyZXNzZXMgaW4gJGEwLgorCShGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCSogbW4xMDMwMC5tZCAoY2FsbF92YWx1ZV9pbnRlcm5hbCk6IEFsbG93IG91dHB1dCB0byBiZSBpbiBhbgorCWFkZHJlc3MgcmVnaXN0ZXIuCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogSGFuZGxlIHNhdmluZyBvZiBzdGFjayBzbG90cyB3aGVuCisJQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIGlzIGRlZmluZWQuCisJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTGlrZXdpc2UuCisKK01vbiBBcHIgMTQgMTQ6NDg6MTUgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5tZCAoeHRyY3RfbGVmdCwgeHRyY3RfcmlnaHQpOiBOZXcgcGF0dGVybnMuCisKKwkqIGNvbWJpbmUuYyAoZ2V0X2xhc3RfdmFsdWVfdmFsaWRhdGUpOiBOZXcgYXJndW1lbnQgaW5zbi4KKwlBZGQgY2hlY2sgZm9yIG1lbW9yeSByZWZlcmVuY2UgY2xvYmJlcmVkIGJ5IGxhdGVyIHN0b3JlLgorCShyZWNvcmRfdmFsdWVfZm9yX3JlZywgZ2V0X2xhc3RfdmFsdWVzKTogUGFzcyBpbiBuZXcgYXJndW1lbnQuCisKK01vbiBBcHIgMTQgMTQ6MDM6MTggMTk5NyAgTWlrZSBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAocG93ZXJwYyAtLXdpdGgtY3B1PXgpOiBBZGQgZW1iZWRkZWQgcG93ZXJwY3MgYW5kIDYwNGUuCisKKwkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IFJlY29nbml6ZSAtbWNwdT04MDEsIC1tY3B1PTgyMywKKwlhbmQgLW1jcHU9NjA0ZS4KKworU3VuIEFwciAxMyAxODo0MzoxNiAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIHJlbG9hZDEuYyAoaW52YWxpZGF0ZV9yZWdub19ydHgpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgorCShyZWxvYWRfY3NlX2ludmFsaWRhdGVfcmVnbm8pOiBDaGVjayB3aGV0aGVyIGFueSBlYXJsaWVyIHJlZ2lzdGVycworCWhhdmUgYSBtdWx0aS1yZWdpc3RlciB2YWx1ZSB3aGljaCBpbmNsdWRlcyB0aGUgcmVnaXN0ZXIgd2UgYXJlCisJaW52YWxpZGF0aW5nLgorCShyZWxvYWRfY3NlX3JlZ3MpOiBJbml0aWFsaXplIGludmFsaWRhdGVfcmVnbm9fcnR4LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfcmVjb3JkX3NldCk6IFdoZW4gc2V0dGluZyByZWdfdmFsdWVzIGZvciBhCisJY29weSBmcm9tIG9uZSByZWdpc3RlciB0byBhbm90aGVyLCB1c2UgZ2VuX2xvd3BhcnRfY29tbW9uIHRvCisJYWRqdXN0IHRoZSB2YWx1ZSBjb3JyZWN0bHkgaWYgdGhlIG1vZGUgY2hhbmdlcy4KKworU3VuIEFwciAxMyAxNzoyNDo0OCAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAobW92ZV9ibG9ja19mcm9tX3JlZyk6IFRyeSB1c2luZyBhbiBpbnRlZ3JhbCBtb3Ygb3BlcmF0aW9uCisJZmlyc3QuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogV2hlbiBjb3B5aW5nIHVuYWxpZ25lZCB2YWx1ZXMgaW50byBhIHJlZ2lzdGVyLAorCXplcm8gb3V0IHRoZSByZWdpc3RlciBmaXJzdCByYXRoZXIgdGhhbiBlbWl0dGluZyBhIGNsb2JiZXIuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IElmIEZSQU1FX0dST1dTX0RPV05XQVJECisJYW5kIHJlZ25vID09IFZJUlRVQUxfU1RBQ0tfVkFSU19SRUdOVU0sCXJvdW5kIHNpemUgb2Ygc3RhY2sgc2xvdCB1cAorCWJlZm9yZSBjYWxsaW5nIGFzc2lnbl9zdGFja190ZW1wLgorCitTdW4gQXByIDEzIDE1OjI5OjM4IDE5OTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorCisJKiBlbnF1aXJlLmMgKGZha2VfZl9yZXApOiBBZGQgbWlzc2luZyBlbGVtZW50IG5hbWUgaW4gY2FzdC4KKworU3VuIEFwciAxMyAxNToyMDowNSAxOTk3ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQsIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOgorCUZpeCBzaWduIGJ1ZyBpbiBsYXN0IGNoYW5nZS4KKworU3VuIEFwciAxMyAxNTowMzozOCAxOTk3ICBKLlQuIENvbmtsaW4gIDxqdGNAbmV0YnNkLm9yZz4KKwkKKwkqIG02OGsubWQgKG1vdnN0cmljdGhpKTogUmVtb3ZlIGV4dHJhbmVvdXMgY29tcGFyaXNvbnMuCisKKwkqIGNvbmZpZ3VyZSAoKi0qLW5ldGJzZCk6IHRtYWtlX2ZpbGUgbm93IHQtbmV0YnNkOyBkZWxldGUgeG1ha2VfZmlsZS4KKwkqIGNvbmZpZy90LW5ldGJzZDogTmV3IGZpbGUuCisJKiBjb25maWcveC1uZXRic2Q6IFJlbW92ZWQuCisKK1N1biBBcHIgMTMgMTQ6NTE6MjUgMTk5NyAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBjc2UuYyAoY2Fub25fcmVnLCBjc2VfaW5zbik6IERvbid0IGV4YW1pbmUgaW5zbl9uX2R1cHMgaWYKKwlyZWNvZ19tZW1vaXplZCBmYWlscyB0byBmaW5kIGEgbWF0Y2guCisKK1N1biBBcHIgMTMgMTQ6MTc6MjYgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2Vfbm9vcF9zZXRfcCk6IEFkZCBpbnNuIHBhcmFtZXRlci4gIENoYW5nZQorCWFsbCBjYWxsZXJzLiAgSWYgZGVsZXRpbmcgdGhlIGluc3RydWN0aW9uLCByZW1vdmUgYW55IGVhcmxpZXIKKwlSRUdfREVBRCBub3RlIGZvciBEUkVHLgorCShyZWxvYWRfY3NlX3NpbXBsaWZ5X3NldCk6IElmIHNpbXBsaWZ5aW5nLCByZW1vdmUgYW55IGVhcmxpZXIKKwlSRUdfREVBRCBub3RlIGZvciB0aGUgbmV3IHNvdXJjZSByZWdpc3Rlci4KKworU3VuIEFwciAxMyAxNDoxMjowOCAxOTk3ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KKworCSogbGliZ2NjMiAoTF9iYiwgTF9leGl0KTogVXNlIDAgcmF0aGVyIHRoYW4gTlVMTCBmb3IgbnVsbCBwb2ludGVycy4KKworU3VuIEFwciAxMyAxMjo1MzowMyAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogbTY4ay9saW51eC5oIChBU01fU1BFQyk6IERlZmluZS4KKwkoU1RSVUNUX1ZBTFVFX1JFR05VTSwgU1RBVElDX0NIQUlOX1JFR05VTSwgSU5JVElBTElaRV9UUkFNUE9MSU5FKToKKwlSZW1vdmUgZGVmaW5pdGlvbnMsIHVuZG9pbmcgdGhlIGNoYW5nZSBvZiBNYXIgMjAgMTk5Ni4gCisKKwkqIG02OGsuYyAob3V0cHV0X21vdmVfcWltb2RlKTogT3B0aW1pemUgcHVzaGluZyBvbmUgYnl0ZSBpZiBzb3VyY2UKKwlvcGVyYW5kIGRvZXMgbm90IHVzZSBzdGFjayBwb2ludGVyLgorCisJKiBtNjhrLm1kIChyb3RsW3NocV1pMywgcm90bFtocV1pMysxKTogRG9uJ3QgZGlyZWN0bHkgbW9kaWZ5IG9wZXJhbmQuCisKKwkqIG02OGsubWQgKHRzdGRpKTogQWRkIG1pc3NpbmcgcGFyYWxsZWwgYXJvdW5kIHRoZSBwYXR0ZXJuLgorCitTdW4gQXByIDEzIDEyOjUxOjAwIDE5OTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMsIGNwcGxpYi5jIChkb19pbmNsdWRlKTogRGlhZ25vc2UgI2ltcG9ydCBhbmQKKwkjaW5jbHVkZV9uZXh0IGlmIHBlZGFudGljIGFuZCBpZiBub3QgaW4gYSBzeXN0ZW0gaGVhZGVyLgorCShkb193YXJuaW5nKTogI3dhcm5pbmcgbm93IGNhdXNlcyBhbiBlcnJvciBpZiAtcGVkYW50aWMtZXJyb3JzCisJaXMgZ2l2ZW47IHRoaXMgaXMgbmVlZGVkIHNpbmNlICN3YXJuaW5nIGlzbid0IEFOU0kuCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBBZGQgLVd1bmRlZiwgLVduby11bmRlZi4KKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiBJZ25vcmUgLVd1bmRlZiwgLVduby11bmRlZi4KKworCSogY2NjcC5jLCBjZXhwLnkgKHdhcm5fdW5kZWYpOiBOZXcgdmFyaWFibGUuCisJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9vcHRpb25zKTogTmV3IG1lbWJlciB3YXJuX3VuZGVmLgorCShDUFBfV0FSTl9VTkRFRik6IE5ldyBtYWNyby4KKworCSogY2NjcC5jIChtYWluKSwgY3BwbGliLmMgKGNwcF9oYW5kbGVfb3B0aW9ucyk6IFNldCB3YXJuX3VuZGVmCisJZnJvbSAtV3VuZGVmIGFuZCAtV25vLXVuZGVmLgorCisJKiBjcHBleHAuYyAoY3BwX2xleCkgTmV3IGFyZyBza2lwX2V2YWx1YXRpb24uCisJKGNwcF9wYXJzZV9leHByKTogUGFzcyBza2lwX2V2YWx1YXRpb24gdG8gY3BwX2xleC4KKwlBYm9ydCBpZiBjcHBfbGV4IHJldHVybnMgTkFNRS4KKworCSogY2V4cC55IChleHApLCBjcHBleHAuYyAoY3BwX2xleCk6IE9wdGlvbmFsbHkgd2FybiBhYm91dCB1bmRlZmluZWQKKwlpZGVudGlmaWVycyB0aGF0IGV2YWx1YXRlIHRvIDAuCisKK1N1biBBcHIgMTMgMTE6NDM6MTYgMTk5NyAgSm9lbCBTaGVycmlsbCAgPGpvZWxAT0FSY29ycC5jb20+CisKKyAgICAgICAgKiBjb25maWd1cmUgKGhwcGExLjEtKi1ydGVtcyopOiBOZXcgdGFyZ2V0LgorICAgICAgICAqIG1pcHMvcnRlbXMuaDogTmV3IGZpbGUuCisKK1N1biBBcHIgMTMgMDk6NDg6MjYgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogZ2Nvdi5jIChwcmludF91c2FnZSwgb3Blbl9maWxlcyk6IFVzZSBGQVRBTF9FWElUX0NPREUuCisJKiBjb2xsZWN0Mi5jIChmYXRhbF9wZXJyb3IsIGZhdGFsLCBjb2xsZWN0X3dhaXQpOiBMaWtld2lzZS4KKworCSogc3BhcmMuYyAoZWxpZ2libGVfZm9yX2RlbGF5X3Nsb3QpOiBDbGVhbiB1cCBhbmQgbWFrZSB0byBhZ3JlZQorCXByZWNpc2VseSB3aXRoIHBhdHRlcm5zIGluIE1EIGZpbGUuCisJKiBzcGFyYy5tZCAoKnJldHVybl9hZGRzaSk6IENoYW5nZSBjb25kaXRpb24gdG8gZXhjbHVkZSBib3RoIGludHMuCisJKCpyZXR1cm5fYWRkZGkpOiBMaWtld2lzZS4KKwkoKnJldHVybl9zdWJzaSk6IE5ldyBwYXR0ZXJuLgorCisJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xLCBjYXNlIE1JTlVTKTogTmV3IGNhc2UuCisJCitTdW4gQXByIDEzIDA4OjIwOjI0IDE5OTcgIFRob21hcyBCdXNobmVsbCAgPHRob21hc0BnbnUuYWkubWl0LmVkdT4KKworCSogaTM4Ni9nbnUuaCAoVEFSR0VUX1ZFUlNJT04pOiBSZWRlZmluZS4KKworU3VuIEFwciAxMyAwODoxNTozMSAxOTk3ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CisKKwkqIGMtdHlwZWNrLmMgKGxvb2t1cF9maWVsZCk6IERvbid0IHJlY3Vyc2UgdW5sZXNzIEZJRUxEIGlzCisJYSBSRUNPUkRfVFlQRSBvciBVTklPTl9UWVBFLgorCisJKiBmaW5hbC5jIChwcm9maWxlX2Z1bmN0aW9uKTogU2F2ZSB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyCisJYXJvdW5kIHRoZSBjYWxsIHRvIHRoZSBwcm9maWxlciBmdW5jdGlvbi4KKworCSogbG9vcC5jIChpbnZhcmlhbnRfcCwgY2FzZSBSRUcpOiBQb2ludGVycyBpbnRvIGZyYW1lIGFyZSBub3QKKwlpbnZhcmlhbnRzIGlmIGZ1bmN0aW9uIGhhcyBub25sb2NhbCBnb3Rvcy4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgZnVuY3Rpb24gaGFzIG5vbmxvY2FsIGxhYmVsLCBtYXJrIGFsbAorCWNhbGxlci1zYXZlZCByZWdzIGFzIHVzZWQuCisKK0ZyaSBBcHIgMTEgMTY6NDk6MDYgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBzZWJhLmN5Z251cy5jb20+CisKKwkqIG0zMnIuaCAoUkVHX0FMTE9DX09SREVSKTogUmVzdG9yZSB0byBvcmlnaW5hbCBzZXR0aW5nLgorCisJKiBtMzJyLmggKFVQUEVSMTZfUCk6IEZpeCBjYWxjdWxhdGlvbi4KKwkqIG0zMnIuYyAodHdvX2luc25fY29uc3Rfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkobTMycl9wcmludF9vcGVyYW5kKTogSGFuZGxlICdYJy4KKwkqIG0zMnIubWQgKG1vdnNpKTogVHdlYWsuCisJKCptb3ZzaV9pbnNuKTogT3V0cHV0IGhleCB2YWx1ZSBvZiBjb25zdGFudHMgdG9vLgorCShtb3ZzaSBkZWZpbmVfc3BsaXQpOiBBZGQuCisJKGFuZHNpMyxvcnNpMyx4b3JzaTMpOiBPdXRwdXQgaGV4IHZhbHVlIG9mIGNvbnN0YW50cyB0b28uCisKK1RodSBBcHIgMTAgMTg6Mzk6MzMgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5tZCAoc25lKTogTW9kaWZpZWQgdG8gdXNlIG5lZ2MgaW5zdGVhZCBvZiB4b3IuCisJKHNuZSsxKTogTmV3IGRlZmluZV9zcGxpdCBmb3IgbmV3IHNuZSBwYXR0ZXJuLgorCSogc2guYyAob3V0cHV0X3N0YWNrX2FkanVzdCk6IFJlb3JnYW5pemUgY29kZSBmb3IgcmVhZGFiaWxpdHkuCisJSWYgc2l6ZSBpcyBuZWdhdGl2ZSwgbmVnYXRlIGFuZCBzdWJ0cmFjdCBpdCBpbnN0ZWFkIG9mIGFkZGluZyBpdC4KKworV2VkIEFwciAgOSAxMzo1MTowNyAxOTk3ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHNoLmMgKG91dHB1dF9zdGFja19hZGp1c3QpOiBXaGVuIHNwbGl0dGluZyBhbiBhZGp1c3RtZW50IGludG8gdHdvCisJcGFydHMsIG1ha2Ugc3VyZSB0aGUgc3RhY2sgaXMgYWxpZ25lZCBhdCBhbGwgdGltZXMuCisKK1R1ZSBBcHIgIDggMTI6MzQ6MzggMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMzAwLmggKFJFVFVSTl9BRERSX1JUWCk6IERlZmluZS4KKworTW9uIEFwciAgNyAxOToxOTo1NyAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAuYyAoY291bnRfdHN0X2luc25zKTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfcHJvbG9ndWUpOiBMb2FkIHplcm8gaW50byBkYXRhIGFuZC9vciBhZGRyZXNzIHJlZ2lzdGVycworCWlmIGFueSBhcmUgZnJlZSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBvcHRpbWl6YWJsZSB0c3QgaW5zbnMuCisJKG91dHB1dF90c3QpOiBJZiBhIHN1aXRhYmxlIHJlZ2lzdGVyIGlzIGtub3duIHRvIGhhdmUgdGhlCisJdmFsdWUgemVybywgdXNlIGl0IGluc3RlYWQgb2Ygc2VhcmNoaW5nIGZvciBhIHN1aXRhYmxlIHJlZ2lzdGVyLgorCSogbW4xMDMwMC5oICh6ZXJvX2RyZWcsIHplcm9fYXJlZyk6IERlY2xhcmUuCisJKEZSQU1FX1BPSU5URVJfTkVFREVEKTogRnJhbWUgcG9pbnRlcnMgYXJlIG5vdCBuZWVkZWQgaWYgdGhlCisJb3V0Z29pbmcgYXJndW1lbnQgc2l6ZSBpcyB6ZXJvLgorCSogbW4xMDMwMC5tZCAobW92WFgpOiBPcHRpbWl6ZSBsb2FkaW5nIHplcm8gaW50byBhbiBhZGRyZXNzCisJcmVnaXN0ZXIgaWYgcG9zc2libGUuICBPcHRpbWl6ZSBsb2FkaW5nIGEgREYvREkgbW9kZSB2YWx1ZQorCWludG8gYW4gYWRkcmVzcyByZWdpc3RlciBmcm9tIGEgY29uc3RhbnQgbWVtb3J5IGFkZHJlc3MuCisJKGFkZHNpMyk6IFByb3ZpZGUgYWx0ZXJuYXRpdmUgd2hpY2ggZG9lc24ndCByZXF1aXJlIGEgbWF0Y2hpbmcKKwlpbm91dCBvcGVyYW5kLgorCShyZXR1cm4pOiBPcHRpbWl6ZSBjb25zZWN1dGl2ZSByZXR1cm4gaW5zdHJ1Y3Rpb25zLgorCitNb24gQXByICA3IDE3OjMwOjM1IDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogbWlwcy9pcmlzNS5oIChTVUJUQVJHRVRfQ0MxX1NQRUMpOiBEZWZpbmUuCisJKExJTktfU1BFQywgU1RBUlRGSUxFX1NQRUMpOiBTdXBwb3J0IC1zdGF0aWMuCisJKiBtaXBzL2lyaXM2LmggKFNVQlRBUkdFVF9DQzFfU1BFQyk6IERlZmluZS4KKwkoU1RBUlRGSUxFX1NQRUMsIExJTktfU1BFQyk6IFN1cHBvcnQgLXN0YXRpYy4KKwkqIG1pcHMuaDogKFNVQlRBUkdFVF9DQzFfU1BFQyk6IERlZmluZS4KKwkoQ0MxX1NQRUMpOiBBZGQgc3VidGFyZ2V0X2NjMV9zcGVjLgorCShFWFRSQV9TUEVDUyk6IEFkZCBzdWJ0YXJnZXRfY2MxX3NwZWMuCisKK1N1biBBcHIgIDYgMTI6MjQ6NTMgMTk5NyAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBhcm0ubWQgKGluY3NjYyk6IFVzZSBhIG1hdGNoX29wZXJhbmQgd2l0aCBjY19yZWdpc3RlciB0byBtYXRjaAorCXRoZSBjb25kaXRpb24gY29kZSByZWdpc3Rlci4KKwkoZGVjc2NjLCAqY29uZGJyYW5jaCwgKmNvbmRicmFuY2hfcmV2ZXJzZWQsICptb3Zfc2NjKTogTGlrZXdpc2UuCisJKCptb3ZfbmVnc2NjLCAqbW92X25vdHNjYywgKmNvbmRfcmV0dXJuKTogTGlrZXdpc2UuCisJKCpjb25kX3JldHVybl9pbnZlcnRlZCwgKmlvcl9zY2MsICpjb25kX21vdmUpOiBMaWtld2lzZS4KKwkoaW5zdik6IE5ldyBleHBhbmQuCisJKGFuZHNpX25vdHNpX3NpKTogUmVuYW1lZCBmcm9tICphbmRzaV9ub3RzaV9zaS4KKwkoYW5kc2lfbm90X3NoaWZ0c2lfc2kpOiBOZXcgaW5zbi4KKwkoKm1pbm1heF9hcml0aHNpKTogRG9uJ3QgbWF0Y2ggdGhpcyBpbnNuIGlmIG9wZXJhbmQxIGlzIGFuCisJZWxpbWluYWJsZSByZWdpc3Rlci4KKwkoe3Npbixjb3N9Kik6IERlbGV0ZSwgc2luY2UgdGhlIEFSTSBhbHdheXMgZW11bGF0ZXMgdGhlc2UgaXRzCisJZmFzdGVyIHRvIGNhbGwgYSBsaWJyYXJ5IGZ1bmN0aW9uLgorCShtb3ZzaWNjLCAqbW92c2ljY19pbnNuKTogTWFrZSBvcGVyYW5kMCBhbiBzX3JlZ2lzdGVyX29wZXJhbmQsCisJYW5kIG9wZXJhbmQzIGFuIGFybV9ub3Rfb3BlcmFuZC4gIFVzZSBjY19yZWdpc3RlciB0byBtYXRjaCB0aGUKKwljb25kaXRpb24gY29kZSByZWdpc3Rlci4KKwkobW92W3NkXWZjYyopOiBNYWtlIG9wZXJhbmRbMCwyXSBzX3JlZ2lzdGVyX29wZXJhbmRzLCBhbmQgb3BlcmFuZDMKKwl0aGUgbm9ubWVtb3J5X29wZXJhbmQuICBVc2UgY2NfcmVnaXN0ZXIgdG8gbWF0Y2ggdGhlIGNvbmRpdGlvbgorCWNvZGUgcmVnaXN0ZXIuCisJKCppZmNvbXBhcmVfcGx1c19tb3ZlKTogTW92ZSBiZWZvcmUgKmlmY29tcGFyZV9hcml0aF9tb3ZlLiAgSnVzdCBkbworCWEgc3BsaXQgZm9yIHRoZSBvdXRwdXQuCisJKCppZmNvbXBhcmVfbW92ZV9wbHVzKTogU2ltaWxhcmx5LCBidXQgcmVsYXRpdmUKKwl0byAqaWZjb21wYXJlX21vdmVfYXJpdGguCisJKCppZl9wbHVzX21vdmUsICppZl9tb3ZlX3BsdXMpOiBOZXcgcGF0dGVybnMuCisJKCppZmNvbXBhcmVfYXJpdGhfYXJpdGgpOiBTaW1wbGlmeSB0aGUgYWx0ZXJuYXRpdmVzIGRvd24gdG8ganVzdCBvbmUsCisJYW5kIHNwbGl0IHRoZSBpbnNuIGJlZm9yZSBvdXRwdXQuCisJKCppZl9hcml0aF9hcml0aCwgKmlmX2FyaXRoX21vdmUsICppZl9tb3ZlX2FyaXRoKTogTmV3IHBhdHRlcm5zLgorCSgqaWZjb21wYXJlX21vdmVfbm90LCAqaWZjb21wYXJlX25vdF9tb3ZlKTogU2ltcGxpZnkgYW5kIHNwbGl0IHRoZQorCWluc24gYmVmb3JlIG91dHB1dC4KKwkoKmlmX21vdmVfbm90LCAqaWZfbm90X21vdmUpOiBOZXcgcGF0dGVybnMuCisJKCppZmNvbXBhcmVfc2hpZnRfbW92ZSwgKmlmY29tcGFyZV9tb3ZlX3NoaWZ0KTogU2ltcGxpZnkgYW5kIHNwbGl0IHRoZQorCWluc24gYmVmb3JlIG91dHB1dC4KKwkoKmlmX3NoaWZ0X21vdmUsICppZl9tb3ZlX3NoaWZ0KTogTmV3IHBhdHRlcm5zLgorCSgqaWZjb21wYXJlX3NoaWZ0X3NoaWZ0KTogU2ltcGxpZnkgYW5kIHNwbGl0IHRoZSBpbnNuIGJlZm9yZSBvdXRwdXQuCisJKCppZl9zaGlmdF9zaGlmdCk6IE5ldyBwYXR0ZXJuLgorCSgqaWZjb21wYXJlX25vdF9hcml0aCwgKmlmY29tcGFyZV9hcml0aF9ub3QpOiBTaW1wbGlmeSBhbmQgc3BsaXQgdGhlCisJaW5zbiBiZWZvcmUgb3V0cHV0LgorCSgqaWZfbm90X2FyaXRoLCAqaWZfYXJpdGhfbm90KTogTmV3IHBhdHRlcm5zLgorCSgqaWZjb21wYXJlX25lZ19tb3ZlLCAqaWZjb21wYXJlX21vdmVfbmVnKTogU2ltcGxpZnkgYW5kIHNwbGl0IHRoZQorCWluc24gYmVmb3JlIG91dHB1dC4KKwkoKmlmX25lZ19tb3ZlLCAqaWZfbW92ZV9uZWcpOiBOZXcgcGF0dGVybnMuCisKK1NhdCBBcHIgIDUgMjA6MTc6NDMgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9zb2wtY2kuYXNtIChfZW52aXJvbik6IERvbid0IG1ha2UgX2VudnJpb24gYSBjb21tb24KKwl2YXJpYWJsZSwgdGhlIGxhc3Rlc3QgYXNzZW1ibGVyIGRvZXNuJ3QgbGV0IGNvbW1vbiB2YXJpYWJsZXMgYWxzbworCWJlIGEgd2VhayBzeW1ib2wuCisKK0ZyaSBBcHIgIDQgMTg6MzA6MTIgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiByczYwMDAvcnM2MDAwLm1kIChhZGRkaTMpOiBVc2Ugbm9uX3Nob3J0X2NpbnRfb3BlcmFuZCBpbnN0ZWFkIG9mCisJbm9uX2FkZF9jaW50X29wZXJhbmQuCisKK1RodSBBcHIgIDMgMTU6MDg6MzkgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMzAwLmMgKGNhbl91c2VfcmV0dXJuX2luc24pOiBBZGQgc2l6ZSBvZiBmaXhlZCBzdGFjayBzcGFjZQorCWZvciBmdW5jdGlvbiBjYWxscyBpbnRvIHRoZSBzaXplIG9mIHRoZSBmcmFtZS4gICovCisJKGV4cGFuZF9wcm9sb2d1ZSwgZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisJKGluaXRpYWxfb2Zmc2V0KTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLi4KKwkqIG1uMTAzMDAuaCAoT1VUR09JTkdfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UpOiBObyBsb25nZXIgZGVmaW5lLgorCShTVEFDS19QT0lOVEVSX09GRlNFVCk6IERlZmluZS4KKwkqIG1uMTAzMDAubWQgKGNhbGwsIGNhbGxfdmFsdWUgZXhwYW5kZXJzKTogRG9uJ3QgYWRqdXN0IHRoZSBzdGFjaworCXBvaW50ZXIgaGVyZSBhbnltb3JlLgorCisJKiBtbjEwMzAwLm1kIChhc2hsc2kzKTogUmVtb3ZlIHNvbWUgYWx0ZXJuYXRpdmVzIHdoaWNoIGFyZSBubyBsb25nZXIKKwluZWVkZWQgb3IgZGVzaXJlZC4KKworVGh1IEFwciAgMyAxNTowNjo1MyAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGxvY2FsLWFsbG9jLmMgKG5vX2NvbmZsaWN0X3ApOiBSZWplY3Qgc2VxdWVuY2VzIHdpdGggZm9yZWlnbiBpbnNucy4KKworCSogY29tYmluZS5jIChtb3ZlX2RlYXRocyk6IEhhbmRsZSBwYXJ0aWFsIFJFR19ERUFEIG5vdGUgZm9yCisJbXVsdGktcmVnIGhhcmQgcmVnaXN0ZXIuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IEVtaXQgcXVldWUgYWZ0ZXIgZXhwYW5kaW5nCisJZWFjaCBkeW5hbWljIHBhcmFtZXRlciB0eXBlLgorCisJKiBtaXBzLmMgKG1pcHNfbW92ZV8yd29yZHMpOiBBZGQgU0lHTl9FWFRFTkQgc3VwcG9ydCBmb3IgU1lNQk9MX1JFRiwKKwlMQUJFTF9SRUYsIGFuZCBDT05TVCBvcGVyYW5kcy4KKworCSogZHdhcmYyb3V0LmM6IERlbGV0ZSBjb21tZW50IHJlZmVycmluZyB0byBSRUFETUUuRFdBUkYuCisKK1dlZCBBcHIgIDIgMTc6MjE6MjMgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiByczYwMDAubWQgKGFzaHJkaTNfcG93ZXIpOiBNYXJrIGFsdGVybmF0aXZlIDAgYXMgZWFybHlfY2xvYmJlcgorCW91dHB1dC4KKworCSogcnM2MDAwLm1kIChhYnNzaTNfbm9wb3dlciBkZWZpbmVfc3BsaXQpOiBTd2l0Y2ggb3BlcmFuZHMgb2YgTUlOVVMuCisJKG5hYnNzaTNfbm9wb3dlciBkZWZpbmVfc3BsaXQpOiBMaWtld2lzZS4KKworVHVlIEFwciAgMSAxOTozMDowMSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisJCisJKiBsaWJnY2MyLmMgKGZpbmRfZXhjZXB0aW9uX3RhYmxlKTogRml4IHRvIGxvZ2ljIHRvIGRlYWwgd2l0aAorCWZ1bmN0aW9ucyB0aGF0IGFyZSBpbiB0aGVpciBvd24gc2VjdGlvbiwgc3VjaCBhcyB0ZW1wbGF0ZQorCWluc3RhbnRpYXRpb25zLCB0aGF0IGNhdXNlIG92ZXJsYXBwaW5nIEVIIHRhYmxlcy4KKworVHVlIEFwciAgMSAxNzoxNjoyMiAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgdmEtbW4xMDMwMC5oCisKKwkqIGdpbmNsdWRlL3N0ZGFyZy5oOiBJbmNsdWRlIHZhLW1uMTAzMDAuaC4KKwkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogTGlrZXdpc2UuCisJKiBnaW5jbHVkZS92YS1tbjEwMzAwLmg6IE5ldyBmaWxlLgorCSogbW4xMDMwMC5jIChleHBhbmRfcHJvbG9ndWUpOiBJZiBjdXJyZW50X2Z1bmN0aW9uX3ZhcmFyZ3MgaXMgbm9uemVybywKKwlmbHVzaCBkMC9kMSBiYWNrIGludG8gc3RhY2suCisJKG1uMTAzMDBfYnVpbHRpbl9zYXZlcmVncyk6IE5ldyBmdW5jdGlvbi4KKwkoZnVuY3Rpb25fYXJnLCBmdW5jdGlvbl9hcmdfcGFydGlhbF9ucmVncyk6IE5ldyBmdW5jdGlvbnMuCisJKGluaXRpYWxfb2Zmc2V0KTogVHdlYWsgbm93IHRoYXQgdGhlIFJQIHNhdmUgYXJlYSBpcyBhbGxvY2F0ZWQKKwlhbmQgZGVhbGxvY2F0ZWQgYXJvdW5kIGVhY2ggY2FsbCBhZ2Fpbi4KKwkqIG1uMTAzMDAuaCAoRklSU1RfUEFSTV9PRkZTRVQpOiBOb3cgNC4KKwkoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IFJlcXVpcmUgZnJhbWUgcG9pbnRlciBmb3IgYWxsIG5vbi1sZWFmIGZjbnMuCisJKFJFR19QQVJNX1NUQUNLX1NQQUNFKTogTm93IDggYnl0ZXMuCisJKEZVTkNUSU9OX0FSR19SRUdOT19QKTogVXBkYXRlIGZvciBuZXcgcGFyYW1ldGVyIHBhc3NpbmcgY29udmVudGlvbnMuCisJKENVTVVMQVRJVkVfQVJHUywgSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkoRlVOQ1RJT05fQVJHX0FEVkFOQ0UsIEZVTkNUSU9OX0FSRyk6IExpa2V3aXNlLgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUyk6IExpa2V3aXNlLgorCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogRG9uJ3QgY2xvYmJlciBkMCBhbnltb3JlLgorCShUUkFNUE9MSU5FX1NJWkUsIElOSVRJQUxJWkVfVFJBTVBPTElORSk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKwkoRVhQQU5EX0JVSUxUSU5fU0FWRVJFR1MpOiBEZWZpbmUuCisJKiBtbjEwMzAwLm1kIChjYWxsLCBjYWxsX3ZhbHVlIHBhdHRlcm5zKTogQWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUKKwlzdGFjayBzbG90IGZvciByZXR1cm4gcG9pbnRlciBhcm91bmQgZWFjaCBjYWxsLgorCisJKiBtbjEwMzAwLmggKFJUWF9DT1NUUyk6IFJlZmluZS4KKwkoQ0FTRV9WQUxVRVNfVEhSRVNISE9MRCwgTk9fRlVOQ1RJT05fQ1NFKTogTGlrZXdpc2UuCisJKiBtbjEwMzAwLmMgKG91dHB1dF90c3QpOiBOZXcgZnVuY3Rpb24uCisJKiBtbjEwMzAwLm1kIChtb3ZkaSwgbW92ZGYpOiBJbXByb3ZlIGNvZGUgdG8gbG9hZCBjb25zdGFudHMgaW50byByZWdzLgorCSh0c3QgaW5zbnMpOiBVc2Ugb3V0cHV0X3RzdCB0byBvcHRpbWl6ZSBzb21lIGNhc2VzLiAgQWRkIHZlcnNpb25zIHRvCisJZW5jb3VyYWdlIG1vcmUgemVybyBleHRlbnNpb25zIGluc3RlYWQgb2Ygc2lnbiBleHRlbnNpb25zIG9mIEhJbW9kZQorCWFuZCBRSW1vZGUgdmFsdWVzLgorCShkaXZzaTMsIHVkaXZzaTMpOiBSZW1vdmUgcGF0dGVybnMuICBSZXBsYWNlZCBieS4uLgorCShkaXZtb2RzaTQsIHVkaXZtb2RzaTQpOiBOZXcgZXhwYW5kZXJzL3BhdHRlcm5zLgorCShhbmRzaTMpOiBPcHRpbWl6ZSAiYW5kIiBvcGVyYXRpb25zIHdpdGggY2VydGFpbiBjb25zdGFudHMuCisKK1R1ZSBBcHIgIDEgMDk6MTQ6MjkgMTk5NyAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBzaC5oOiAoQURKVVNUX0NPU1RTKTogRGVmaW5lLgorCitGcmkgTWFyIDI4IDE3OjQ2OjEzIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKExBTkdVQUdFUyk6IEFkZCBnY292LgorCShPQkpTKTogQWRkIHByb2ZpbGUuby4KKwkoU1RBR0VTVFVGRik6IEFkZCBnY292LgorCShwcm9maWxlLm8sIGdjb3YubywgZ2Nvdik6IEFkZCBydWxlcyB0byBidWlsZCB0aGVtLgorCShjcHAuaW5mbywgZ2NjLmluZm8sIGdjYy5kdmkpOiBBZGQgZ2Nvdi50ZXhpLgorCShpbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgZ2Nvdi4KKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IEhhbmRsZSBSRUdfQlJfUFJPQiBhbmQgUkVHX0VYRUNfQ09VTlQKKwlSRUdfTk9URVMuCisJKiBzcGFyYy5oIChPVkVSUklERV9PUFRJT05TKTogQ2hlY2sgcHJvZmlsZV9hcmNfZmxhZy4KKwkqIGZpbmFsLmMgKExPTkdfVFlQRV9TSVpFKTogRGVmaW5lLgorCShjb3VudF9pbnN0cnVtZW50ZWRfYXJjcyk6IE5ldyB2YXJpYWJsZS4KKwkoZW5kX2ZpbmFsLCBwcm9maWxlX2FmdGVyX3Byb2xvZ3VlLCBsZWFmX2Z1bmN0aW9uX3ApOiBBZGQgc3VwcG9ydAorCWZvciBwcm9maWxlX2FyY19mbGFnLgorCShhZGRfYmIpOiBPbmx5IGNhbGwgQ0NfU1RBVFVTX0lOSVQgaWYgSEFWRV9jYzAuCisJKiBmbGFncy5oIChwcm9maWxlX2FyY19mbGFnLCBmbGFnX3Rlc3RfY292ZXJhZ2UsCisJZmxhZ19icmFuY2hfcHJvYmFiaWxpdGllcyk6IERlY2xhcmUuCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogT3V0cHV0IE5PVEVfUkVQRUFURURfTElORV9OVU1CRVIKKwlmb3IgbGFzdCBsaW5lIG9mIGZ1bmN0aW9uLgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBPdXRwdXQKKwlOT1RFX1JFUEVBVEVEX0xJTkVfTlVNQkVSIGFmdGVyIGlubGluZWQgY2FsbC4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSwgZm9sbG93X2p1bXBzLCBtYXJrX2p1bXBfbGFiZWwpOiBEaXNhYmxlIHNvbWUKKyAJb3B0aW1pemF0aW9ucyB3aGVuIGZsYWdfdGVzdF9jb3ZlcmFnZSBhbmQgdGhlcmUgaXMgYSBsaW5lIG51bWJlciBub3RlCisgCWluIHRoZSB3YXkuCisJKGludmVydF9qdW1wKTogQWRkIFJFR19CUl9QUk9CIHdoZW4gZmxhZ19icmFuY2hfcHJvYmFiaWxpbHRpZXMuCisJKiBsaWJnY2MyLmMgKF9fYmJfZXhpdF9mdW5jKTogU3VwcG9ydCBnY292IHN0eWxlIG91dHB1dC4KKwkqIHJlb3JnLmMgKG1vc3RseV90cnVlX2p1bXApOiBVc2UgUkVHX0JSX1BST0Igbm90ZXMgd2hlbgorCWZsYWdfYnJhbmNoX3Byb2JhYmlsaXRpZXMuCisJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgTk9URV9SRVBFQVRFRF9MSU5FX05VTUJFUi4KKwkocmVnX25vdGVfbmFtZSk6IEFkZCBSRUdfQlJfUFJPQiBhbmQgUkVHX0VYRUNfQ09VTlQuCisJKiBydGwuaCAoZW51bSByZWdfbm90ZSk6IEFkZCBSRUdfQlJfUFJPQiBhbmQgUkVHX0VYRUNfQ09VTlQuCisJKFJFR19CUl9QUk9CX0JBU0UpOiBEZWZpbmUuCisJKE5PVEVfUkVQRUFURURfTElORV9OVU1CRVIpOiBEZWZpbmUuCisJKiBzY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogSGFuZGxlIFJFR19FWEVDX0NPVU5UIGFuZCBSRUdfQlJfUFJPQgorCW5vdGVzLgorCSogdG9wbGV2LmMgKGJyYW5jaF9wcm9iX2R1bXAsIHByb2ZpbGVfYXJjX2ZsYWcsIGZsYWdfdGVzdF9jb3ZlcmFnZSwKKwlmbGFnX2JyYW5jaF9wcm9iYWJpbGl0aWVzLCBicmFuY2hfcHJvYl9kdW1wX2ZpbGUsIGJyYW5jaF9wcm9iX3RpbWUpOgorCU5ldyB2YXJpYWJsZXMuCisJKGZfb3B0aW9ucyk6IEFkZCBwcm9maWxlLWFyY3MsIHRlc3QtY292ZXJhZ2UsIGFuZAorCWJyYW5jaC1wcm9iYWJpbGl0aWVzLgorCShjb21waWxlX2ZpbGUpOiBTZXQgYnJhbmNoX3Byb2JfdGltZS4gIFBhc3MgZmxhZ190ZXN0X2NvdmVyYWdlIHRvCisJaW5pdF9lbWl0X29uY2UuICBIYW5kbGUgYnJhbmNoX3Byb2JfZHVtcC4gIENhbGwgaW5pdF9icmFuY2hfcHJvYi4KKwlDYWxsIGVuZF9icmFuY2hfcHJvYi4gQ2FsbCBvdXRwdXRfZnVuY19zdGFydF9wcm9maWxlci4KKwkocmVzdF9vZl9jb21waWxhdGlvbik6IEhhbmRsZSBicmFuY2hfcHJvYl9kdW1wLiAgQ2FsbCBuZXcKKwlicmFuY2hfcHJvYiBwYXNzLgorCShtYWluKTogU2V0IGJyYW5jaF9wcm9iX2R1bXAuCisJKiBnY292LmMsIHByb2ZpbGUuYywgZ2Nvdi1pby5oLCBnY292LnRleGk6IE5ldyBmaWxlcy4KKworVGh1IE1hciAyNyAxNjo1Mjo1MiAxOTk3ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworCSogaTM4Ni5oIChDUFBfQ1BVX0RFRkFVTFQpOiBEZWZpbmUgaWYgVEFSR0VUX0NQVV9ERUZBVUxUIGlzIG5vdCBzZXQuCisJKiBpMzg2LmggKFNUQUNLX0JPVU5EQVJZKTogRGVmaW5lIHRvIGFsd2F5cyBiZSAzMi4KKworCUZyb20gSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCSogaTM4Ni5tZDogKHplcm9fZXh0ZW5kaGlzaTIrWzEyXSk6IHVzZSB0cnVlX3JlZ251bSBpbnN0ZWFkIG9mIFJFR05PIGZvcgorIAlvcGVyYW5kIDAuICAKKwkoemVyb19leHRlbmRxaXNpMiszOiB1c2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgaW5zdGVhZCBvZiBSRUdOTworIAljb21wYXJpc29uOyB1c2UgdHJ1ZV9yZWdudW0gaW5zdGVhZCBvZiBSRUdOTyBmb3IgcnR4IGdlbmVyYXRpb24uCisKK1dlZCBNYXIgMjYgMTI6MzQ6MjEgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENhbGwgcmVsb2FkX2NzZV9yZWdzLgorCShyZWdfdmFsdWVzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKwkocmVsb2FkX2NzZV9pbnZhbGlkYXRlX3JlZ25vKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkocmVsb2FkX2NzZV9tZW1fY29uZmxpY3RfcCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCisJKHJlbG9hZF9jc2VfaW52YWxpZGF0ZV9tZW0pOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgorCShyZWxvYWRfY3NlX2ludmFsaWRhdGVfcnR4KTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkocmVsb2FkX2NzZV9yZWdzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkocmVsb2FkX2NzZV9yZWdub19lcXVhbF9wKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkocmVsb2FkX2NzZV9ub29wX3NldF9wKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkocmVsb2FkX2NzZV9zaW1wbGlmeV9zZXQpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgorCShyZWxvYWRfY3NlX2NoZWNrX2Nsb2JiZXJlZCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCisJKHJlbG9hZF9jc2VfY2hlY2tfc3JjKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKwkocmVsb2FkX2NzZV9jaGVja19jbG9iYmVyKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkocmVsb2FkX2NzZV9yZWNvcmRfc2V0KTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKworV2VkIE1hciAyNiAwNzozNDowNiAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKworCSogZ2luY2x1ZGUvc3RkYXJnLmggKF9fdmFfY29weSk6IE5ldyBkZWZpbml0aW9uLgorCitUdWUgTWFyIDI1IDEzOjQzOjM2IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBnY2MuYyAoaW5pdF9zcGVjKTogSWYgLXYsIHByaW50IG91dCB0aGF0IHRoZSBkZWZhdWx0IHNwZWMgdmFsdWVzCisJd2VyZSBiZWluZyB1c2VkLiAgRml4IHByb3RvdHlwZSB0byByZWZsZWN0IG5vIGFyZ3VtZW50cy4KKwkoc2V0X3NwZWMpOiBJZiBzcGVjcyBoYXMgbm90IGJlZW4gc2V0LCBzZXQgaXQgdXAgd2l0aCB0aGUgZGVmYXVsdAorCXNwZWNzLgorCShyZWFkX3NwZWNzKTogTW92ZSB0byBsYXRlciBpbiB0aGUgZmlsZSBzbyB0aGF0IHN0YXJ0ZmlsZV9wcmVmaXhlcworCWhhcyBiZWVuIGRlY2xhcmVkLiAgUHJvY2VzcyAiJWluY2x1ZGUgPGZpbGU+IiB0byBpbmNsdWRlIGFub3RoZXIKKwlzcGVjcyBmaWxlLCBhYm9ydGluZyBpZiB0aGUgZmlsZSBjYW4ndCBiZSBmb3VuZC4gIFByb2Nlc3MKKwkiJWluY2x1ZGVfbm9lcnIgPGZpbGU+OiB0byBpbmNsdWRlIGFub3RoZXIgc3BlY3MgZmlsZSwgZ2l2aW5nIG5vCisJZXJyb3IgaWYgdGhlIGZpbGUgY2FuJ3QgYmUgZm91bmQuICBQcm9jZXNzICIlcmVuYW1lIHZhcjEgdmFyMiIgdG8KKwlyZW5hbWUgYSBzcGVjcyB2YXJpYWJsZS4gIFRha2UgbmV3IGFyZ3VtZW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIKKwl3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgbWFpbiBmaWxlLiAgT25seSBwcm9jZXNzICUgY29tbWFuZHMgaWYgdGhpcworCWlzIG5vdCB0aGUgbWFpbiBzcGVjcyBmaWxlLiAgQ2hhbmdlIGNhbGxlcnMuCisJKG1haW4pOiBEbyBub3QgY2FsbCBpbml0X3NwZWMgaWYgYSBzcGVjcyBmaWxlIHdhcyBmb3VuZC4KKwkoc2V0X3NwZWMscmVhZF9zcGVjcyxkb19zcGVjXzEpOiBJZiBERUJVR19TUEVDUyBpcyBkZWZpbmVkLCBwcmludAorCWRlYnVnIGluZm9ybWF0aW9uLgorCQorVHVlIE1hciAyNSAxNDo0Mzo1OCAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBEZWxldGUgZW1pc3Npb24gb2YgQ0xPQkJFUgorCXdoZW4gZG9pbmcgcGFydGlhbCBwdXNoLCBubyBsb25nZXIgbmVjZXNzYXJ5LgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBQZWR3YXJuIHF1YWxpZmllZCB2b2lkIGZ1bmN0aW9uIHJldHVybgorCXR5cGUuCisKK1R1ZSBNYXIgMjUgMTQ6Mjg6MTUgMTk5NyAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiByZWxvYWQuYyAoZmluZF9kdW1teV9yZWxvYWQpOiBOZXcgcGFyYW1ldGVyIGVhcmx5Y2xvYmJlci4gIElmIHNldAorCXRoZW4gZG9uJ3QgdXNlIElOIGZvciB0aGUgcmVsb2FkIGlmIGl0IGFsc28gYXBwZWFycyBlbHNld2hlcmUgaW4KKwl0aGUgaW5zbi4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisKK1R1ZSBNYXIgMjUgMTM6MjA6MTggMTk5NyAgSi5ULiBDb25rbGluCTxqdGNAY3lnbnVzLmNvbT4KKworCSogbTY4ay9sYjFzZjY4LmFzbSAodWRpdnNpMyk6IEZpeCBodW5rIGZyb20gcHJldmlvdXMgcGF0Y2ggdGhhdAorCWRpZCBub3QgYXBwbHkgY29ycmVjdGx5LgorCisJKiBtNjhrLm1kICh0YWJsZWp1bXApOiBVc2UgZXh0bCB0byBleHBsaWNpdGx5IHNpZ24gZXh0ZW5kCisJaW5kZXggcmVnaXN0ZXJvbiBUQVJHRVRfNTIwMC4KKwkqIG02OGsve2Fwb2xsbzY4LmgsY29mZi5oLGxpbnV4LmgsbW90MzMwMC5oLHBiYi5ofSAKKwkoQVNNX1JFVFVSTl9DQVNFX0pVTVApOiBMaWtld2lzZS4KKworCSogbTY4ay5tZCAobXVsc2kzKTogQ2hhbmdlZCBpbnRvIGRlZmluZV9leHBhbmQuICBTcGxpdCBpbnNuIGludG8KKyAJbTY4ayBhbmQgY29sZGZpcmUgc3BlY2lmaWMgdmVyc2lvbnMgd2l0aCBhcHByb3ByaWF0ZSBjb25zdHJhaW50cy4KKworCSogbTY4ay5tZCAobW92cWkpOiBEaXNhYmxlIHVzZSBvZiBhZGRyZXNzIHJlZ2lzdGVycyBmb3IgCisJVEFSR0VUXzUyMDAuCisKKwkqIG02OGsvbGIxc2Y2OC5hc20gKF9fbW9kc2kzLCBfX3Vtb2RzaTMpOiBVc2UgbXVsc2wgaW5zdHJ1Y3Rpb24KKwlpbnN0ZWFkIG9mIF9fbXVsc2kzIGZ1bmN0aW9uIGNhbGwgb24gdGhlIGNvbGRmaXJlLgorCisJKiBtNjhrLm1kIChibmUwX2RpKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIG02OGsubWQgKHhvcnNpM181MjAwKTogQ29ycmVjdCBjb25zdHJhaW50cy4KKworCSogbTY4ay5jIChvdXRwdXRfbW92ZV97c2ksaGkscWl9bW9kZSk6IE5ldyBmdW5jdGlvbnMuCisJKiBtNjhrLmggKG91dHB1dF9tb3ZlX3tzaSxoaSxxaX1tb2RlKTogRGVjbGFyZS4KKworCSogbTY4ay5tZCAobW92ZXtzaSxoaSxxaSxkaX0pOiBDaGFuZ2VkIGludG8gZGVmaW5lX2V4cGFuZHMuICBTcGxpdAorCWluc25zIGludG8gbTY4ayBhbmQgY29sZGZpcmUgc3BlY2lmaWMgdmVyc2lvbnMgd2l0aCBhcHByb3ByaWF0ZQorCWNvbnN0cmFpbnRzLgorCitUdWUgTWFyIDI1IDEyOjE4OjQxIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChHQ0NfUEFTU0VTKTogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZTsgdXNlCisgCWNjMSQoZXhlZXh0KS4KKworTW9uIE1hciAyNCAxNjoxMjoyMCAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIG0zMnIvKjogTmV3IGZpbGVzLgorCSogY29uZmlnLnN1YjogQWRkIG0zMnIuCisJKiBjb25maWd1cmU6IEFkZCBtMzJyLgorCSogbG9uZ2xvbmcuaDogQWRkIG0zMnIgc3VwcG9ydC4KKwkqIGdpbmNsdWRlL3tzdGRhcmcuaCx2YXJhcmdzLmh9OiBBZGQgbTMyciBzdXBwb3J0LgorCSogZ2luY2x1ZGUvdmEtbTMyci5oOiBOZXcgZmlsZS4KKworTW9uIE1hciAyNCAxNTo1MzoxNSAxOTk3ICBKb2VsIFNoZXJyaWxsIDxqb2VsQE9BUmNvcnAuY29tPgorCisJKiByczYwMDAvcnRlbXMuaDogQ2hhbmdlIHRvIGEgbmVhciBjbG9uZSBvZiB0aGUgcG93ZXJwYy1lYWJpIHRhcmdldC4KKwkqIGNvbmZpZ3VyZSAocG93ZXJwYyotKi1ydGVtcyk6IE1vdmUgYmVmb3JlIExpbnV4IGNvbmZpZ3VyYXRpb24uCisKK01vbiBNYXIgMjQgMTQ6MjY6MzcgMTk5NyAgR2F2aW4gS29jaCAgPGdhdmluQGN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3ZhLW1pcHMuaDogIEZvciBsaXR0bGUgZW5kaWFuLCBlYWJpLCBvYmplY3RzCisJbGVzcyB0aGFuIF9fdmFfcmVnX3NpemUgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMuCisKK0ZyaSBNYXIgMjEgMDA6NDg6MDIgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMzAwLmMgKHByaW50X29wZXJhbmQpOiBIYW5kbGUgJ04nLgorCisJKiBtbjEwMzAwLmMgKGV4cGFuZF9lcGlsb2d1ZSk6IENvcnJlY3RseSBoYW5kbGUgZnVuY3Rpb25zCisJd2l0aCBsYXJnZSBmcmFtZXMsIGJ1dCBubyBjYWxsZWUgcmVnaXN0ZXIgc2F2ZXMuCisKKwkqIG1uMTMwMC5tZCAobW92ZGYsIG1vdmRpKTogSGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzLgorCisJKiBwYS5jIChjb21wdXRlX21vdnN0cnNpX2xlbmd0aCk6IEhhbmRsZSByZXNpZHVhbHMgY29ycmVjdGx5LgorCitUaHUgTWFyIDIwIDEzOjUzOjMwIDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAuYyAoZWFzeV9mcF9jb25zdGFudCk6IElmIC1tcmVsb2NhdGFibGUsIGNvbnNpZGVyIGFsbCBmcAorCWNvbnN0YW50cyB0byBiZSBoYXJkLgorCitNb24gTWFyIDIwIDEzOjUzOjMwIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKyAKKwkqIHJzNjAwMC5tZCAobW92ZGYvbW92c2YgZGVmaW5lX3NwbGl0cyk6IEFkZCBTVUJSRUcgc3VwcG9ydC4KKyAKKwkqIHJzNjAwMC5jIChmcF9yZWdfb3JfbWVtX29wZXJhbmQpOiBEZWxldGUuCisJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogUmVtb3ZlIGZwX3JlZ19vcl9tZW1fb3BlcmFuZC4KKwkoZnBfcmVnX29yX21lbV9vcGVyYW5kKTogRGVsZXRlIGRlY2xhcmF0aW9uLgorCSogcnM2MDAwLm1kIChtb3ZzZl9oYXJkZmxvYXQpOiBVc2Ugbm9uaW1tZWRpYXRlX29wZXJhbmQgaW5zdGVhZAorCW9mIGZwX3JlZ19vcl9tZW1fb3BlcmFuZC4KKworVGh1IE1hciAyMCAwODo1MjoyNyAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAubWQgKGNtcHNpKTogSGFuZGxlIGNvbXBhcmluZyBhIHJlZ2lzdGVyIHdpdGgKKwlpdHNlbGYgYnkgYWRkaW5nIHplcm8gdG8gdGhlIHJlZy4gIFogYml0IGZvciBzdWNoIGFuIGluc24gaXMKKwlpbnZlcnRlZC4KKwkqIG1uMTAzMDAuYyAobm90aWNlX3VwZGF0ZV9jYyk6IEhhbmRsZSBDQ19JTlZFUlQuCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IERvbid0IGxvc2UgZm9yIGEgc2Vjb25kYXJ5IHJlbG9hZAorCXRvIHRoZSBTQVIgcmVnaXN0ZXIgaWYgdGhlIGlucHV0IGlzIGEgTUVNIHdpdGggYW4gb2Zmc2V0IHRoYXQgd29uJ3QKKwlmaXQgaW4gMTRiaXRzLgorCitXZWQgTWFyIDE5IDE3OjEwOjQ0IDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBtNjhrL2xpbnV4LmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBEZWZpbmUuCisKK1dlZCBNYXIgMTkgMTY6NTk6MzQgMTk5NyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYywgY3BwbGliLmMgKGRvX2Vycm9yLCBkb193YXJuaW5nKTogRml4IG1lbW9yeSBsZWFrLgorCisJKiBjY2NwLmMgKG91dHB1dF9saW5lX2RpcmVjdGl2ZSk6IERvIG5vdCBvdXRwdXQgbmVnYXRpdmUgbGluZQorCW51bWJlcnMgd2hlbiBhbmFseXppbmcgZGlyZWN0aXZlcyBsaWtlIGAjbGluZSAwJy4KKworCSogY2V4cC55IChwYXJzZV9udW1iZXIsIHl5bGV4KSwgY2NjcC5jIChyZXNjYW4pLCBjcHBsaWIuYworCShjcHBfZ2V0X3Rva2VuKTogVW5sZXNzIC1sYW5nLWM4OSBpcyBzcGVjaWZpZWQsIGFsbG93IEM5WC1zdHlsZQorCWhleGFkZWNpbWFsIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgcHJlcHJvY2Vzc29yIG51bWJlcnMuCisJKiBjY2NwLmMgKGM4OSk6IE5ldyBkZWNsLgorCShtYWluKTogU2V0IGl0IHRvIDEgaWYgLWxhbmctYzg5LgorCSogY3BwbGliLmggKHN0cnVjdCBjcHBfb3B0aW9ucyk6IE5ldyBtZW1iZXIgYzg5LgorCShDUFBfQzg5KTogTmV3IG1hY3JvLgorCSogY3BwbGliLmMgKHVuc2FmZV9jaGFycyk6IGBwJyBpcyB1bnNhZmUgYmVmb3JlIGAtJyBvciBgKycsIHNpbmNlIGl0CisJbWlnaHQgZ2VuZXJhdGUgYSBDOVgtc3R5bGUgaGV4YWRlY2ltYWwgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgorCShjcHBfaGFuZGxlX29wdGlvbnMpOiBTZXQgYzg5IG9wdGlvbiB0byAxIGlmIC1sYW5nLWM4OS4KKworVHVlIE1hciAxOCAxNzowNTo1NyAxOTk3ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworICAgICAgICAqIGkzODYuaCAoU1RBQ0tfQk9VTkRBUlkpOiBEZXRlcm1pbmUgYWNjb3JkaW5nIHRvIFRBUkdFVF9BTElHTl9ET1VCTEUuCisJCisJKiBpMzg2LmMgKG92ZXJyaWRlX29wdGlvbnMpIE1ha2UgdGhlIGRlZmF1bHQgYWxpZ25tZW50IDQgZm9yIDQ4NiwKKwlvdGhlcndpc2UgMi4KKwkKKwkqIGkzODYvZnJlZWJzZC1lbGYuaCAoQ1BQX1NQRUMpOiBSZW1vdmUgVEFSR0VUX0NQVV9ERUZBVUxUIHJlZmVyZW5jZS4KKwkqIGkzODYvbGludXh7LC1hb3V0LC1vbGRsZH0uaCAoQ1BQX1NQRUMpOiBMaWtld2lzZS4KKwkKKwkqIGkzODYvZ28zMi5oIChEQlhfREVCVUdHSU5HX0lORk8sIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSwKKwlOT19TVEFCX0gsIEFTTV9GSUxFX1NUQVJULCBEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFLAorCURCWF9GVU5DVElPTl9GSVJTVCwgREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCwKKwlBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogQWRkZWQgdG8gc3VwcG9ydCBzdGFicy4KKwkoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBTdXBwb3J0IHNlY3Rpb24gYXR0cmlidXRlLgorCitUdWUgTWFyIDE4IDE2OjEyOjI4IDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZmluYWwuYyAoc2hvcnRlbl9icmFuY2hlcyk6IFNwbGl0IGFsbCBpbnNucyBiZWZvcmUgY29tcHV0aW5nIGluc24KKwlsZW5ndGhzLgorCShmaW5hbF9zY2FuX2luc24sIGNhc2UgZGVmYXVsdCk6IElmIEhBVkVfQVRUUl9sZW5ndGggZGVmaW5lZCwgY2FsbAorCWFib3J0IGZvciBhbnkgaW5zbiB0aGF0IGhhcyBhICcjJyBvdXRwdXQgdGVtcGxhdGUuCisKKwkqIGV4cHIuYyAoZW1pdF9ncm91cF9sb2FkKTogQ2FsbCBvcGVyYW5kX3N1YndvcmQgaW5zdGVhZCBvZiBjcmVhdGluZworCWFuIGV4cGxpY2l0IFNVQlJFRy4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3AsIGNhc2UKKwlSRUxPQURfRk9SX09QRVJBTkRfQUREUkVTUyk6IENvbmZsaWN0cyB3aXRoIFJFTE9BRF9GT1JfT1BBRERSX0FERFIKKwlyZWxvYWRzLgorCisJKiBjb25maWd1cmUgKGFscGhhLWRlYy1vc2ZbMjM0NTY3ODldKik6IFVzZSBpbnN0YWxsLWhlYWRlcnMtY3BpbworCWZvciBvc2Y0LgorCisJKiBnY2MuYyAoaW5pdF9zcGVjKTogRGVsZXRlIHBhcmFtZXRlci4gIEFsd2F5cyBpbml0aWFsaXplIGV4dHJhX3NwZWNzLgorCShwcm9jZXNzX2NvbW1hbmQsIG1haW4pOiBDaGFuZ2UgYWxsIGNhbGxlcnMuCisKKwkqIGNvbWJpbmUuYyAoaWZfdGhlbl9lbHNlX2NvbmQpOiBDYWxsIGNvcHlfcnR4IHRvIHByZXZlbnQgc2hhcmluZy4KKworVHVlIE1hciAxOCAxNDo1OToxMiAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEFkZCBhIFJFR19FUVVJViBub3RlIHRvIHRoZQorIAlpbnN0cnVjdGlvbiB3aGljaCBjb3BpZXMgYSBwYXJhbWV0ZXIgaW50byBhIHBzZXVkby1yZWdpc3RlcgorIAl3aGVuZXZlciB0aGVyZSBpcyBhbiBhc3NvY2lhdGVkIHN0YWNrIHNsb3QsIGV2ZW4gaWYgdGhlIHBhcmFtZXRlcgorIAlhY3R1YWxseSBhcnJpdmVkIGluIGEgcmVnaXN0ZXIuCisKK1R1ZSBNYXIgMTggMTQ6MjQ6NDggMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKGFscGhhLWRlYy1vc2ZbMjNdKTogU2VwYXJhdGUgb3NmWzIzXSBjYXNlLgorCSogYWxwaGEuaCAoTElCX1NQRUMpOiAtbHByb2YxIHJlcXVpcmVzIC1scGRmIGZvciBPU0YgNC4KKwkqIGFscGhhL29zZjJvcjMuaDogTmV3IGZpbGUuCisKK1R1ZSBNYXIgMTggMTE6MzI6MTAgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtNjhrLmMgKG02OGtfbGFzdF9jb21wYXJlX2hhZF9mcF9vcGVyYW5kcyk6IE5ldyB2YXJpYWJsZS4KKwkqIG02OGsuaCAobTY4a19sYXN0X2NvbXBhcmVfaGFkX2ZwX29wZXJhbmRzKTogRGVjbGFyZSBpdC4KKwkqIG02OGsubWQgKHRzdCosIGNtcCopOiBUdXJuIGludG8gZGVmaW5lX2V4cGFuZC9kZWZpbmVfaW5zbiBwYWlycy4KKwlLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGVzdC9jb21wYXJlIGhhcyBmcCBvcGVyYW5kcy4KKwkoc2VxLCBzbmUsIHNndCwgc2x0LCBzZ2UsIHNsZSk6IFR1cm4gaW50byBkZWZpbmVfZXhwYW5kL2RlZmluZV9pbnNuCisJcGFpcnMuICBNYWtlIGV4cGFuZGVycyBGQUlMIGlmIFRBUkdFVF82ODA2MCBhbmQgbGFzdCBjb21wYXJpc29uL3Rlc3QKKwloYWQgZnAgb3BlcmFuZHMuCisKK1R1ZSBNYXIgMTggMDQ6Mjk6MjkgMTk5NyAgUmljaGFyZCBFYXJuc2hhdyA8cmVhcm5zaGFAYXJtbHRkLmNvLnVrPgorCisJKiBhcm0ubWQgKG1vdmhpKTogSGFuZGxlIGdlbmVyYXRpb24gb2YgbGFyZ2UgY29uc3RhbnRzIGR1cmluZworCWFuZCBhZnRlciByZWxvYWQuCisKK01vbiBNYXIgMTcgMTc6MzA6MjQgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBnbWljcm8uaCAoUkVUVVJOX1BPUFNfQVJHUyk6IE1ha2Ugc3VyZSBGVU5ERUNMIGlzIG5vbi1uaWwKKwliZWZvcmUgd2UgdHJ5IHRvIHVzZSBpdC4KKwkqIG02OGsuaCAoUkVUVVJOX1BPUFNfQVJHUyk6IExpa2V3aXNlLgorCSogbnMzMmsuaCAoUkVUVVJOX1BPUFNfQVJHUyk6IExpa2V3aXNlLgorCSogcHlyLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBMaWtld2lzZS4KKworTW9uIE1hciAxNyAxNzoxMzo0NCAxOTk3ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQsIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOgorCU9ubHkgYWRkIHBhZGRpbmcgaWYgYSBiaXQgZmllbGQgd291bGQgb3RoZXJ3aXNlIHNwYW4gbW9yZSB1bml0cworCW9mIGFsaWdubWVudCB0aGFuIGl0cyBiYXNlIHR5cGUuCisKK01vbiBNYXIgMTcgMTc6MDM6NTUgMTk5NyAgSi5ULiBDb25rbGluICA8anRjQGN5Z251cy5jb20+CisKKwkqIG02OGsubWQgKGJlcTBfZGksIGJuZTBfZGksIGJnZTBfZGksIGJsdDBfZGkpOiBVc2UgY21wdyAjMAorIAlpbnN0ZWFkIG9mIHRzdGwgd2hlbiB0ZXN0aW5nIGFkZHJlc3MgcmVnaXN0ZXJzIG9uIHRoZSA2ODAwMC4KKwkKKwkqIG02OGsvbGIxc2Y2OC5hc206IEZpeCBwcm9sb2d1ZXMvZXBpbG9ndWVzIHRvIGRlYWwgd2l0aCB0aGUgbGFjaworIAlvZiBwcmVkZWNyZW1lbnQvcG9zdGluY3JlbWVudCBhZGRyZXNzaW5nIG1vZGVzIGluIHRoZSBjb2xkZmlyZQorCW1vdmVtbCBpbnN0cnVjdGlvbi4KKworTW9uIE1hciAxNyAxNzowMDoxNCAxOTk3ICBTY290dCBDaHJpc3RsZXkgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KKworCSogRml4IGxvbmcgc3RhbmRpbmcgYnVnIHdoZXJlIGZpcnN0IG1ldGhvZCBjYWxsIGZvciBhIGNsYXNzIGNvdWxkCisJcmVzdWx0IGluIGEgZ2FyYmxlZCBzdGFjayBvciBwcm9kdWNlIGFuIGluY29ycmVjdCByZXR1cm4gdmFsdWUuCisJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2Jsb2NrX3JldHVybik6IFJlbW92ZSBmdW5jdGlvbi4KKwkoX19vYmpjX3dvcmRfcmV0dXJuLCBfX29iamNfZG91YmxlX3JldHVybik6IFJlbW92ZSBmdW5jdGlvbnMuCisJKF9fb2JqY19nZXRfZm9yd2FyZF9pbXApOiBOZXcgZnVuY3Rpb24uCisJKF9fb2JqY19pbml0X2Rpc3BhdGNoX3RhYmxlcyk6IEluc3RhbGwgemVybyBpbnN0ZWFkIG9mCisJX19vYmpjX2luaXRfaW5zdGFsbF9kdGFibGUuCisJKF9fb2JqY19pbml0X2luc3RhbGxfZHRhYmxlKTogTm8gbG9uZ2VyIGNhbGwgdGhlIG1ldGhvZCBidXQKKwlhbGxvdyBvYmpjX21zZ19sb29rdXAgcmV0dXJuIGl0IGZvciBub3JtYWwgZXhlY3V0aW9uLgorCShvYmpfbXNnX2xvb2t1cCk6IERpZmZlcmVudGlhdGUgYmV0d2VlbiB3aGVuIGEgbWV0aG9kIGlzbid0CisJaW1wbGVtZW50ZWQgYW5kIHdoZW4gdGhlIGRpc3BhdGNoIHRhYmxlIG5lZWRzIHRvIGJlIGluc3RhbGxlZC4KKwlSZXR1cm4gdGhlIElNUCB3aGVuIHRoZSBkaXNwYXRjaCB0YWJsZSBpcyBpbnN0YWxsZWQgdmVyc3VzCisJaGF2aW5nIF9fb2JqY19pbml0X2luc3RhbGxfZHRhYmxlIGNhbGwgaXQuCisJKGdldF9pbXApOiBJbnN0YWxsIGRpc3BhdGNoIHRhYmxlIGlmIG5lZWRlZCBhbmQgcmV0dXJuIElNUAorCWZyb20gdGhlIG5ld2x5IGluc3RhbGxlZCBkaXNwYXRjaCB0YWJsZS4KKwkoX19vYmpjX3Jlc3BvbmRzX3RvKTogSW5zdGFsbCBkaXNwYXRjaCB0YWJsZSBpZiBuZWVkZWQgYmVmb3JlCisJY2hlY2tpbmcgaWYgbWV0aG9kIGlzIGltcGxlbWVudGVkLgorCitNb24gTWFyIDE3IDE2OjI5OjM4IDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIHRyZWUuYyAoYnVpbGRfe2luZGV4LHJhbmdlfV90eXBlKTogRW5zdXJlIGV4cHJlc3Npb25zIGZvciBtaW4KKwlhbmQgbWF4IHZhbHVlIGFyZSBpbiBzYW1lIG9ic3RhY2sgYXMgdHlwZS4KKworTW9uIE1hciAxNyAxNTo0NDoxOCAxOTk3ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KKworCSogY2NjcC5jIFsjaWYgVk1TXSAoT19SRE9OTFksIE9fV1JPTkxZKTogRGVsZXRlIChyZWR1bmRhbnQpLgorCShCU1RSSU5HKTogRGVsZXRlIChvYnNvbGV0ZTsgdXNhZ2Ugb2NjdXJzIHByaW9yIHRvIGRlZmluaXRpb24pLgorCShkb19pbmNsdWRlKTogSGFuZGxlIG9sZCBWQVggQyBzdHlsZSBpbmNsdWRlcyBiZXR0ZXIuCisKK01vbiBNYXIgMTcgMTM6NDY6NDcgMTk5NyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNleHAueSwgY3BwZXhwLmMgKHBhcnNlX251bWJlcik6IEludmFsaWQgaW50ZWdlciBjb25zdGFudHMgYXJlCisJZXJyb3JzIGlmIHBlZGFudGljLgorCSogY2V4cC55ICh5eWxleCk6IEludmFsaWQgbXVsdGlieXRlIGNoYXJhY3RlcnMgYXJlIGVycm9ycyBpZiBwZWRhbnRpYy4KKwkqIGNwcGV4cC5jIChjcHBfbGV4KTogTGlrZXdpc2UuCisJKiBjcHBleHAuYyAoY3BwX3BhcnNlX2VzY2FwZSk6IENoYXJhY3RlciBjb25zdGFudHMgdGhhdCBkbyBub3QgZml0IGFyZQorCWVycm9ycyBpZiBwZWRhbnRpYy4KKworCSogYy1wYXJzZS5pbiAoZXhwcl9ub19jb21tYXMpOiBEbyBub3Qgc3RvcmUgdGVtcG9yYXJ5CisJc2tpcF9ldmFsdWF0aW9uIGluY3JlbWVudHMgb24geWFjYyB2YWx1ZSBzdGFjay4KKworU3VuIE1hciAxNiAxOTo1NDo0OSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFBMQUNFSE9MREVSX0VYUFIpOiBSZWZpbmUgd2hpY2gKKwlvYmplY3QgaXMgcGlja2VkLgorCitTdW4gTWFyIDE2IDE1OjQ1OjQ1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBBZGp1c3QgQkVORUZJVCBhcHByb3ByaWF0ZWx5IGlmIGFuCisJYXV0b2luY3JlbWVudCBtZW1vcnkgcmVmZXJlbmNlIHdpbGwgZWxpbWluYXRlIGFkZCBpbnNucy4KKworU3VuIE1hciAxNiAwODo0MTo0MCAxOTk3ICBTY290dCBDaHJpc3RsZXkgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KKworCSogaTM4Ni5tZCAodW50eXBlZF9jYWxsKTogUmUtZW5hYmxlIGNvZGUuCisJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2Jsb2NrX3JldHVybik6IE5ldyBmdW5jdGlvbi4KKwkoX19vYmpjX3dvcmRfcmV0dXJuLCBfX29iamNfZG91YmxlX3JldHVybik6IE5ldyBmdW5jdGlvbnMuCisJKF9fb2JqY19pbml0X2luc3RhbGxfZHRhYmxlKTogQ2FsbCBhcHByb3ByaWF0ZSByZXR1cm4gZnVuY3Rpb24KKwliYXNlZCB1cG9uIG1ldGhvZCB0eXBlLgorCSogb2JqYy90aHItcHRocmVhZHMuYzogQ29ycmVjdCBpbmNsdWRlIHBhdGguCisKK1NhdCBNYXIgMTUgMDc6NTg6MzMgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIG9iamMtYWN0LmMgKE9CSkNfVkVSU0lPTik6IEluY3JlbWVudCB2ZXJzaW9uLgorCSogb2JqYy9pbml0LmMgKE9CSkNfVkVSU0lPTik6IExpa2V3aXNlLgorCitTYXQgTWFyIDE1IDA3OjU4OjAwIDE5OTcgIE92aWRpdSBQcmVkZXNjdSA8b3ZpZGl1QG5ldC1jb21tdW5pdHkuY29tPgorCisJKiBJbXBsZW1lbnQgK2xvYWQuCisJKiBvYmpjL2luaXQuYyAob2JqY19zZW5kX2xvYWQsIF9fb2JqY19zZW5kX2xvYWQpOiBOZXcgZnVuY3Rpb25zLgorCShfX29iamNfc2VuZF9tZXNzYWdlX2luX2xpc3QpOiBOZXcgZnVuY3Rpb24uCisJKF9fb2JqY19mb3JjZV9saW5raW5nKTogTmV3IGZ1bmN0aW9uLgorCShfX29iamNfZXhlY19jbGFzcyk6IERvbid0IGNhbGwgX29iamNfbG9hZF9jYWxsYmFjayBoZXJlLgorCSogb2JqYy9saW5raW5nLm06IE5ldyBmaWxlLgorCSogb2JqYy9zZW5kbXNnLmMgKGNsYXNzX2FkZF9tZXRob2RfbGlzdCk6IENoZWNrIGZvciB0aGUgK2xvYWQgbWV0aG9kCisJd2hlbiBhZGRpbmcgYSBtZXRob2RzIGxpc3QgdG8gYSBjbGFzcy4KKwkqIG9iamMvTWFrZWZpbGUgKE9CSkNfTyk6IEFkZCBsaW5raW5nLm0uCisKKwkqIEFsbG93IG1ldGhvZHMgZGVmaW5lZCBpbiBjYXRlZ29yaWVzIHRvIG92ZXJyaWRlIG1ldGhvZHMgdGhhdCBhcmUKKwlkZWZpbmVkIGluIHRoZSBjbGFzcyBpbXBsZW1lbnRhdGlvbi4KKwkqIG9iamMvc2VuZG1zZy5jIChfX29iamNfaW5zdGFsbF9tZXRob2RzX2luX2R0YWJsZSk6IE5ldyBmdW5jdGlvbi4KKwkoY2xhc3NfYWRkX21ldGhvZF9saXN0KTogRG9uJ3QgY2hlY2sgYW55bW9yZSBmb3IgZHVwbGljYXRlIG1ldGhvZHMuCisKKwkqIGNvbmZpZy9uZXh0c3RlcC5oIChJTkNMVURFX0RFRkFVTFRTKTogRGVmaW5lIHRvIHNvbWV0aGluZyB1c2VmdWwKKwl3aGVuIGNyb3NzLWNvbXBpbGluZy4KKworCSogVGhlIHN0YXRpYyBpbnN0YW5jZXMgbGlzdCBtb3ZlZCBmcm9tIHRoZSBvYmpjX21vZHVsZSBzdHJ1Y3QgdG8gCisJb2JqY19zeW10YWIgc3RydWN0LCBhdCB0aGUgZW5kIG9mIGRlZnMgYXJyYXkuIFRoaXMgbm93IGFsbG93cyB0aGUgTmVYVAorCWdkYiB0byB3b3JrIHdpdGggYmluYXJpZXMgZ2VuZXJhdGVkIGZvciB0aGUgR05VIE9iakMgcnVudGltZS4KKwkqIG9iamMtYWN0LmMgKGJ1aWxkX29iamNfc3ltdGFiX3RlbXBsYXRlKTogTWFrZSBzdXJlCisJZGVmcyBpbiBvYmpjX3N5bXRhYiBpcyBhIE5VTEwgdGVybWluYXRlZCBhcnJheS4KKwkoaW5pdF9kZWZfbGlzdCk6IEF0dGFjaCBzdGF0aWNzIHRvIGVuZCBvZiBkZWYgbGlzdC4KKwkoaW5pdF9vYmpjX3N5bXRhYik6IFRha2Ugc3RhdGljcyBsaXN0IGludG8gYWNjb3VudC4KKwkoaW5pdF9tb2R1bGVfZGVzY3JpcHRvciwgYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiBEb24ndCBhZGQgc3RhdGljcy4KKwkoZ2VuZXJhdGVfc3RhdGljX3JlZmVyZW5jZXMpOiBJbmRpY2F0ZSB0aGF0IHN0YXRpY3MgYXJlIHVzZWQuCisJKGZpbmlzaF9vYmpjKTogUHJvY2VzcyBzdGF0aWNzIGluIHRoZSBiZWdpbm5pbmcuCisJKiBvYmpjL29iamMtYXBpLmggKG9iamNfbW9kdWxlKTogRWxpbWluYXRlIHN0YXRpY3MgdmFyaWFibGUuCisJKiBvYmpjL2luaXQuYyAoX19vYmpjX2V4ZWNfY2xhc3MpOiBBY2Nlc3Mgc3RhdGljcyBmcm9tIHRoZWlyCisJbmV3IHBsYWNlIGluIHRoZSBkZWZzIHZhcmlhYmxlLgorCitTYXQgTWFyIDE1IDA3OjI5OjE1IDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogcmVsb2FkLmM6IEluY2x1ZGUgZXhwci5oLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzcywgZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IE5ldyBhcmd1bWVudCBJTlNOLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogUmVsb2FkIGluc2lkZSBvZiBwe3JlLG9zdH1fe2luLGRlfWMKKwlpbnN0ZWFkIG9mIGVudGlyZSBwe3JlLG9zdH1fe2luLGRlfWMgd2hlcmUgYXBwcm9wcmlhdGUuCisJKiBNYWtlZmlsZS5pbiAocmVsb2FkLm8pOiBBZGRlZCBleHByLmggdG8gZGVwZW5kZW5jaWVzIGxpc3QuCisKK1NhdCBNYXIgMTUgMDc6MTc6MTIgMTk5NyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAdGFtdS5lZHU+CisKKwkqIHJlbG9hZC5oIChlbGltaW5hdGVfcmVncyk6IEFkZCBTVE9SSU5HIGFyZy4KKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBMaWtld2lzZS4KKwkoZWxpbWluYXRlX3JlZ3MsIGNhc2UgU0VUKTogUGFzcyB0aGF0IHdlIGFyZSBzdG9yaW5nIHRvIHJlY3Vyc2l2ZSBjYWxsLgorCShlbGltaW5hdGVfcmVncywgY2FzZSBTVUJSRUcpOiBJZiBzdG9yaW5nIGFuZCBzYW1lIG51bWJlciBvZiB3b3JkcywKKwl1c2UgbGFyZ2VyIG1vZGUuCisJKiBjYWxsZXItc2F2ZS5jLCBkYnhvdXQuYywgZHdhcmZvdXQuYywgZHdhcmYyb3V0LmMsIHJlbG9hZC5jLCBzZGJvdXQuYzoKKwlDaGFuZ2UgYWxsIGNhbGxzIHRvIGVsaW1pbmF0ZV9yZWdzLgorCitGcmkgTWFyIDE0IDE0OjE4OjQ5IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY3BsdXMtZGVtLmM6IEFkZCBwcm90b3R5cGVzIGZvciBhbGwgc3RhdGljIGZ1bmN0aW9ucy4KKwkobXlzdHJzdHIpOiBNYWtlIHN0YXRpYy4gIE1ha2UgYXJndW1lbnRzIGFuZCByZXN1bHQgY29uc3QuCisJKGNwbHVzX21hdGNoKTogUmVtb3ZlOyBub3QgdXNlZC4KKworRnJpIE1hciAxNCAxMDoxNTozNSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAuYyAoY29uc3RfY29zdHMpOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorCSogbW4xMDMwMC5oIChDT05TVF9DT1NUUyk6IFJld29yayB0byBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KKworCSogbW4xMDMwMC5jIChwcmludF9vcGVyYW5kKTogSGFuZGxlICdIJyBhbmQgJ0wnIG91dHB1dAorCW1vZGlmZXJzIGZvciBoaWdoL2xvdyBwYXJ0IG9mIGEgNjRiaXQgdmFsdWUuCisJKiBtbjEwMzAwLmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBIYW5kbGUgJ0cnCisJKExFR0lUSU1BVEVfQ09OU1RBTlRfUCk6IEFsbG93IGFueSBjb25zdGFudC4KKwkqIG1uMTAzMDAubWQgKG1vdmRpLCBtb3ZkZik6IEltcGxlbWVudC4KKwkoYWRkZGkzLCBzdWJkaTMpOiBOZXcgZXhwYW5kZXJzIGFuZCBwYXR0ZXJucy4KKworCSogbW4xMDMwMC5jIChwcmludF9vcGVyYW5kKTogSGFuZGxlICdBJyBtb2RpZmllciBmb3IgYW4KKwlhZGRyZXNzIHdoaWNoIGNhbid0IGJlIHNpbXBsZSByZWdpc3RlciBpbmRpcmVjdC4KKwkqIG1uMTAzMDAuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEhhbmRsZSAnUicgZm9yIGJpdCBvcHMuCisJKiBtbjEwMzAwLm1kOiBBZGQgcGF0dGVybnMgdG8gdGVzdCwgc2V0IGFuZCBjbGVhciBiaXRmaWVsZHMuCisKKwkqIG1uMTAzMDAuYyAoY2FuX3VzZV9yZXR1cm5faW5zbik6IE5ldyBmdW5jdGlvbi4KKwkoZXhwYW5kX2VwaWxvZ3VlKTogRW1pdCBhIFJFVFVSTiBpbnNuIGlmIHBvc3NpYmxlLgorCSogbW4xMDMwMC5tZCAocmV0dXJuKTogTmV3IHBhdHRlcm4uCisKKwkqIG1uMTAzMDAuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogSGFuZGxlICdOJy4KKwkqIG1uMTAzMDAubWQgKGFuZHNpMyk6IENhdGNoICJhbmQgMjU1LGRuIiBhbmQgImFuZCA2NTUzNSxkbiIKKwl3aGljaCB3ZXJlIG5vdCB0dXJuZWQgaW50byB6ZXJvX2V4dGVuZCBwYXR0ZXJucy4KKworCSogbW4xMDMwMC5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBIYW5kbGUgc3ltYm9saWMKKwljb25zdGFudCBhcyBhbiBpbmRleC9iYXNlIHRvby4KKworCSogbW4xMDMwMC5tZCAobW92c2kpOiBBbGxvdyBTUCB0byBiZSBsb2FkZWQvc2F2ZWQgd2l0aAorCXJlZytkOCBhZGRyZXNzZXMuCisKKwkqIG1uMTAzMDAubWQgKGNtcHNpKTogQWxsb3cgc2Vjb25kIG9wZXJhbmQgdG8gYmUgYSBjb25zdGFudC4KKwkoc3Vic2kzKTogTGlrZXdpc2UuCisKKwkqIG1uMTAzMDAubWQgKHNpZ24gZXh0ZW5zaW9uIHBhdHRlcm5zKTogRml4IHRoaW5rbyB3aGVuCisJZXh0ZW5kaW5nIGZyb20gbWVtb3J5LgorCisJKiBtbjEwMzAwLm1kICh0c3QgcGVlcGhvbGVzKTogQWRkIHBlZXBob2xlcyBmb3IgdGVzdC9icmFuY2gKKwliYXNlZCBvbiBOIGJpdCBiZWluZyBzZXQvY2xlYXIgYW5kIHRoZSBkYXRhIHZhbHVlIGJlaW5nIHRlc3RlZCBkaWVzLgorCitUdWUgTWFyIDExIDE3OjA3OjUxIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogbW4xMDMwMC5jIChleHBhbmRfcHJvbG9ndWUpOiBSZXdvcmsgc28gdGhhdCBlbGltaW5hdGluZworCXRoZSBmcmFtZSBwb2ludGVyIHByb2R1Y2VzIGZhc3Rlci9zbWFsbGVyIGNvZGUuCisJKGV4cGFuZF9lcGlsb2d1ZSk6IExpa2V3aXNlLgorCShpbml0aWFsX29mZnNldCk6IE5ldyBmdW5jdGlvbiBmb3IgYXJndW1lbnQgcG9pbnRlciBhbmQgZnJhbWUgcG9pbnRlcgorCWVsaW1pbmF0aW9uLgorCSogbW4xMDMwMC5oIChGSVJTVF9QU0VVRE9fUkVHSVNURVIpOiBCdW1wIHRvIDEwLgorCShGSVhFRF9SRUdJU1RFUlMpOiBBZGQgYXJndW1lbnQgcG9pbnRlciByZWdpc3RlciwgaXQncyBhIGZha2UgZml4ZWQKKwlyZWdpc3Rlci4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUywgUkVHX0FMTE9DX09SREVSKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCShSRUdOT19SRUdfQ0xBU1MsIFJFR19DTEFTU19DT05URU5UUyk6IExpa2V3aXNlLgorCShSRUdfT0tfRk9SX0JBU0VfUCwgUkVHSVNURVJfTkFNRVMpOiBMaWtld2lzZS4KKwkocmVnX2NsYXNzLCBSRUdfQ0xBU1NfTkFNRVMpOiBEZWxldGUgdW53YW50ZWQgREFUQV9PUl9TUF9SRUdTIGNsYXNzLgorCShQUkVGRVJSRURfT1VUUFVUX1JFTE9BRF9DTEFTUyk6IERlZmluZS4KKwkoRklSU1RfUEFSTV9PRkZTRVQpOiBObyBsb25nZXIgaW5jbHVkZSByZWdpc3RlciBzYXZlIGFyZWEgaW4KKwljb21wdXRhdGlvbi4KKwkoU1RBQ0tfUE9JTlRFUl9SRUdOVU0pOiBJcyBub3cgcmVnaXN0ZXIgOS4KKwkoQVJHX1BPSU5URVJfUkVHTlVNKTogSXMgbm93IHJlZ2lzdGVyIDguCisJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBSZWZpbmUuCisJKEVMSU1JTkFCTEVfUkVHUywgSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBEZWZpbmUuCisJKENBTl9ERVVHX1dJVEhPVVRfRlApOiBEZWZpbmUuCisJKiBtbjEwMzAwLm1kIChyZXR1cm5faW50ZXJuYWwpOiBCcmVhayBpbnRvIHR3byBwYXR0ZXJucy4KKwkKKwkqIG1uMTAzMDAuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogSGFuZGxlICdNJyB0b28uCisJKFJFR0lTVEVSX01PVkVfQ09TVCk6IEZpeCBlcnJvcnMgYW5kIHJlZmluZS4KKworCSogbW4xMDMwMC5jIChub3RpY2VfdXBkYXRlX2NjKTogU0VUX1pOX0MwIGluc25zIGxlYXZlIHRoZQorCW92ZXJmbG93IGJpdCBpbiBhbiB1bnVzZWFibGUgc3RhdGUuICBSZW5hbWUgQ0NfU0VUIHRvIENDX1RTVC4KKwkqIG1uMTAzMDAubWQgKGNjIGF0dHJpYnV0ZXMpOiAic2V0IiBpcyBnb25lLCByZXBsYWNlZCBieQorCSJ0c3QiLiAgVXBkYXRlIGF0dHJpYnV0ZXMgb24gdmFyaW91cyBpbnNucy4KKworCSogbW4xMDMwMC5tZDogSW1wcm92ZSBzaWduIGFuZCB6ZXJvIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMuCisJKGFzaGxzaTMpOiBJbXByb3ZlLiAgSGFuZGxlIGFkZHJlc3MgcmVnaXN0ZXJzIHRvby4KKwkoYWRkIHBlZXBob2xlKTogQ29tYmluZSB0d28gY29uc2VjdXRpdmUgYWRqdXN0bWVudHMgb2YgYSByZWdpc3RlcgorCWludG8gYSBzaW5nbGUgYWRqdXN0bWVudC4KKworVHVlIE1hciAxMSAxNzoxODo0MCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBtZWxhbmdlLmdudS5haS5taXQuZWR1PgorCisJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBDYWxsIGRlbWFuZ2xlZF9mdW5kX3R5cGUgZm9yIG90aGVyCisJX190KiBzeW1ib2xzLgorCitNb24gTWFyIDEwIDE2OjEwOjM0IDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGVtaXQtcnRsLmMgKHN1YnJlZ19sb3dwYXJ0X3ApOiBSZXR1cm4gMCBpZiBTVUJSRUdfUkVHIGlzIFZPSURtb2RlLgorCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgsIGNhc2UgU1VCUkVHKTogRml4IGRpcmVjdGlvbiBvZiB0ZXN0IHdoZW4KKwljYWxsaW5nIG9wZXJhbmRfc3Vid29yZDsgdXNlIGlubGluZSBjb2RlIGludGVhZCBvZiBzdWJyZWdfbG93cGFydF9wLgorCitGcmkgTWFyICA3IDA5OjIyOjI4IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogbW4xMDMwMC5jIChleHBhbmRfe3BybyxlcGl9bG9ndWUpOiBSZXdvcmsgdG8gYXZvaWQKKwl1bm5lY2Vzc2FyeSAiYWRkIiBvcGVyYXRpb25zLgorCShleHBhbmRfZXBpbG9ndWUpOiBMaWtld2lzZS4KKwkqIG1uMTAzMDAuaCAoU1RBUlRJTkdfRlJBTUVfT0ZGU0VUKTogSXMgemVybyBhZnRlciB0aGUgbGFzdAorCXJvdW5kIG9mIHByb2xvZ3VlL2VwaWxvZ3VlIGNoYW5nZXMuCisJKEZJUlNUX1BBUk1fT0ZGU0VUKTogSXMgbm93IDE2ICgtNCBmb3IgUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgKyAyMCBmb3IKKwlyZWdpc3RlciBzYXZlIGFyZWEpLgorCShSRUdfUEFSTV9TVEFDS19TUEFDRSk6IERlZmluZSBhcyA0IGJ5dGVzLgorCShPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRSk6IERlZmluZSBzbyBjYWxsZXIgYWxsb2NhdGVzIGl0LgorCSogbW4xMDMwMC5tZCAoY2FsbHssX3ZhbHVlfSBleHBhbmRlcik6IERvbid0IGVtaXQgaW5zbnMgdG8gYWRqdXN0IHRoZQorCXN0YWNrIGhlcmUgYW55bW9yZS4KKworCSogbW4xMDMwMC5tZCAoYkNDIHBhdHRlcm5zKTogSnVzdCB1c2UgImJDQyB0YXJnZXQiLgorCitUdWUgTWFyICA0IDEzOjIxOjQxIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChtb3ZzaSk6IERvbid0IGVtaXQgYSBVU0UgaW5zbiBmb3IgTEFCRUxfUkVGcy4KKworVGh1IE1hciAgNiAxNjoyOToxMyAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChtb2RpZmllZF90eXBlX2RpZSk6IEluaXRpYWxpemUgaXRlbV90eXBlIHRvIE5VTEwuCisJTW92ZSBlcXVhdGVfdHlwZV9udW1iZXJfdG9fZGllIGNhbGwgYmVmb3JlIHVzZSBvZiBzdWJfZGllLCBhbmQgbW92ZQorCXJlY3Vyc2l2ZSBtb2RpZmllZF90eXBlX2RpZSBjYWxscyBvbiBpdGVtX3R5cGUgYWZ0ZXIgaXQuCisKKwkqIGR3YXJmb3V0LmMgKHJvb3RfdHlwZV8xLCB3cml0ZV9tb2RpZmllcl9ieXRlc18xKTogTmV3IGZ1bmN0aW9ucy4KKwkocm9vdF90eXBlKTogQ2FsbCByb290X3R5cGVfMS4KKwkod3JpdGVfbW9kaWZpZXJfYnl0ZXMpOiBDYWxsIHdyaXRlX21vZGlmaWVyX2J5dGVzXzEuCisJKG91dHB1dF90eXBlLCBjYXNlIFBPSU5URVJfVFlQRSk6IFNldCBUUkVFX0FTTV9XUklUVEVOIGJlZm9yZQorCXJlY3Vyc2l2ZSBjYWxsLgorCitXZWQgTWFyICA1IDE0OjMwOjQ5IDE5OTcgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBxdWlldC5tYXRlbWF0aWsuc3Uuc2U+CisKKwlQYXJ0aWFsbHkgdW5kbyBKYW4gMTEgY2hhbmdlcyAobm9yIHRha2VzIG9ubHkgcmVnaXN0ZXIgb3BzKToKKwkqIG1pcHMubWQgKCpub3JzaTNfY29uc3QsICpub3JkaTNfY29uc3QpOiBEZWxldGUgYm9ndXMgcGF0dGVybnMuCisJKiBtaXBzLmMgKGNvbXBsZW1lbnRlZF9hcml0aF9vcGVyYW5kKTogRGVsZXRlIGZ1bmN0aW9uLgorCShwcmludF9vcGVyYW5kKTogRG9uJ3QgaGFuZGxlIGBlJyBmb3IgQ09OU1RfSU5ULgorCSogbWlwcy5oIChQUkVESUNBVEVfQ09ERVMpOiBEZWxldGUgY29tcGxlbWVudGVkX2FyaXRoX29wZXJhbmQuCisKK1R1ZSBNYXIgIDQgMTY6Mzg6MTMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBpMzg2LmMgKGkzODZfcmV0dXJuX3BvcHNfYXJncyk6IE1ha2Ugc3VyZSBGVU5ERUNMIGlzIG5vbi1uaWwKKwliZWZvcmUgd2UgdHJ5IHRvIHVzZSBpdC4KKwkqIGkzODYvaXNjLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBMaWtld2lzZS4KKwkqIGkzODYvbmV4dC5oIChSRVRVUk5fUE9QU19BUkdTKTogTGlrZXdpc2UuCisJKiBpMzg2L3Njby5oIChSRVRVUk5fUE9QU19BUkdTKTogTGlrZXdpc2UuCisJKiBpMzg2L3NjbzUuaCAoUkVUVVJOX1BPUFNfQVJHUyk6IExpa2V3aXNlLgorCSogaTM4Ni9zY29kYnguaCAoUkVUVVJOX1BPUFNfQVJHUyk6IExpa2V3aXNlLgorCitNb24gTWFyICAzIDIwOjE3OjU0IDE5OTcgIEdhdmluIEtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgorCisJKiBnaW5jbHVkZS92YS1taXBzLmg6IF9fbWlwc19zaW5nbGVfZmxvYXQgc2hvdWxkIGhhdmUKKwl0aGUgc2FtZSBlZmZlY3Qgb24gdmFyYXJnIGxpc3RzIGFzIF9fbWlwc19zb2Z0X2Zsb2F0LgorCitNb24gTWFyICAzIDE4OjEyOjAxIDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoREJYX0NPTlRJTl9MRU5HVEgpOiBVbmRvIDIvMjYgY2hhbmdlLgorCitNb24gTWFyICAzIDEzOjA4OjIwIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBEbyBub3RoaW5nIHdpdGggKHRydW5jYXRlOm1vZGUpIGlmCisJbW9kZSBpcyBhIHBhcnRpYWwgaW50ZWdlciBtb2RlLgorCitTdW4gTWFyICAyIDE3OjQxOjE4IDE5OTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorCisJKiBnaW5jbHVkZS92YXJhcmdzLmg6IEFkZCBkZWZpbml0aW9uIG9mIF9fdmFfY29weS4KKwkqIHZhLWFscGhhLmgsIHZhLWNsaXBwZXIuaCwgdmEtaDgzMDAuaCwgdmEtaTg2MC5oOiBMaWtld2lzZS4KKwkqIHZhLWk5NjAuaCwgdmEtbTg4ay5oLCB2YS1taXBzLmgsIHZhLXBhLmgsIHZhLXBwYy5oOiBMaWtld2lzZS4KKwkqIHZhLXNoLmgsIHZhLXNwYXJjLmgsIHZhLXNwdXIuaDogTGlrZXdpc2UuCisKK1N1biBNYXIgIDIgMTM6MjU6NDkgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBXYXJuIGFuZCB0cnVuY2F0ZSBpZiB1cHBlcgorCWJvdW5kIG9mIGluZGV4IGlzIG91dCBvZiByYW5nZS4KKworRnJpIEZlYiAyOCAxNjowODo0NyAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3NvbC1jMC5jIChfc3RhcnQpOiBEaXNhYmxlIGxvYWRpbmcgdXAgcjEzIGFuZCByMiB3aXRoIHRoZQorCVNEQSBiYXNlIHJlZ2lzdGVycyBmb3Igbm93LgorCisJKiByczYwMDAubWQgKG1vdnNpKTogRW1pdCBhIFVTRSBpbnNuIHdoZW4gcHV0dGluZyB0aGUKKwlsYWJlbCBvZiBjb25zdGFudHMgaW50byB0aGUgVE9DLCBzbyB0aGF0IHRoZSBjb25zdGFudCBpcyBzdGlsbAorCWVtaXR0ZWQgd2hlbiBleHBlbnNpdmUgb3B0aW1pemF0aW9ucyBhcmUgdXNlZC4KKworVGh1IEZlYiAyNyAxNzo1NDo0MiAxOTk3ICBLYXJsIEhldWVyICA8a3d6aEBnbnUuYWkubWl0LmVkdT4KKworCSogZml4aW5jLnB0eDogRml4IHNlZCBleHByZXNzaW9uIGxvb2tpbmcgZm9yIDxzeXMvdHlwZXMuaD4gaW4KKwlwd2QuaC4KKworVGh1IEZlYiAyNyAxMjoxMToxNiAxOTk3ICBEZW5uaXMgR2xhdHRpbmcgIDxkZW5uaXMuZ2xhdHRpbmdAcGxhaW50YWxrLmJlbGxldnVlLndhLnVzPgorCisJKiBmaXhpbmNsdWRlczogUmVtb3ZlIG1vcmUgY2FzZXMgb2YgX19jb25zdF9fIGZyb20gbWF0aC5oIG9uCisJTmVYVC4KKworV2VkIEZlYiAyNiAxNDo1MjoyNyAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcmVsb2FkLmMgKGRlYnVnX3JlbG9hZCk6IFJlbW92ZSBleHRyYSBhcmd1bWVudCB0byBmcHJpbnRmLgorCisJKiByczYwMDAuYyAob3V0cHV0X3RvYyk6IE1ha2UgZnByaW50ZiBjYWxscyB0eXBlIGNvcnJlY3QuCisKKwkqIHJzNjAwMC5oIChEQlhfQ09OVElOX0xFTkdUSCk6IERlZmluZSBhcyA0MDAwIHRvIGF2b2lkIEFJWAorCWFzc2VtYmxlciBsaW5lIGxpbWl0LgorCitNb24gRmViIDI0IDE3OjU2OjE3IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IEZpeCBuZWVkIG9mIHByb3RvdHlwZXMgZm9yIEMrKyBpbiBycGMveGRyLmggb24gU3VuT1M0LgorCitNb24gRmViIDI0IDE3OjMzOjU3IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAveG0tc3lzdjQuaCAoSEFWRV9TVFJFUlJPUik6IERlZmluZS4KKworU3VuIEZlYiAyMyAxNzoxODoyOCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAoZmxvYXRzaWRmMl9sb2FkYWRkcik6IENvcnJlY3Qgc3ludGF4IGZvciBjYXUgaW5zdHJ1Y3Rpb24uCisJKGxvYWRfbXVsdGlwbGUsIHN0b3JlX211bHRpcGxlKTogQ2FsbCBjaGFuZ2VfYWRkcmVzcyBpbnN0ZWFkIG9mCisJY3JlYXRpbmcgTUVNIGZyb20gc2NyYXRjaC4KKworVGh1IEZlYiAyMCAxNjozOToxNSAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IEFkZCBjaGVjayBmb3IgbmFpdmUgbG9vcCB0aGF0IGVuZHMgd2l0aAorCWNvbmRpdGlvbmFsIGJyYW5jaCB0aGF0IGRvZXMgbm90IGJyYW5jaCBiYWNrIHRvIGxvb3Agc3RhcnQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogTW92ZSBhc3NpZ25fc3RhY2tfbG9jYWwgY2FsbCBpbnRvIG1haW4gbG9vcC4KKworVGh1IEZlYiAyMCAxMTo0MDo0NiAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLm1kICh6ZXJvIGV4dGVuc2lvbiBwYXR0ZXJucyk6IFR1cm4gaW50byBkZWZpbmVfZXhwYW5kIGFuZAorCWRlZmluZV9pbnNuIHBhaXIuCisKK1dlZCBGZWIgMTkgMTc6MDU6MzggMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBEb24ndCBjb3B5IDAuMCAoZG91YmxlIHByZWNpc2lvbikKKwlkaXJlY3RseSB0byBtZW1vcnksIGdvIHRocm91Z2ggYSByZWcgaWYgcmVsb2FkIGhhc24ndCBzdGFydGVkLgorCSogcGEubWQgKG1haW4gbW92ZGYgcGF0dGVybik6IERvbid0IGFsbG93IDAuMCAoZG91YmxlIHByZWNpc2lvbikKKwl0byBiZSBjb3BpZWQgZGlyZWN0bHkgdG8gbWVtb3J5LgorCisJKiBwYS9wYS1ocHV4MTAuaCAoTURfRVhFQ19QUkVGSVgpOiBEZWZpbmUgYXBwcm9wcmlhdGVseSBmb3IgaHB1eDEwLgorCShNRF9TVEFSVEZJTEVfUFJFRklYKTogU2ltaWxhcmx5LgorCisJKiBwYS5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IFN1cnJvdW5kIHRoZSBzZWN0aW9uIG5hbWUKKwl3aXRoICckJyBpZiBub3QgdXNpbmcgR0FTLgorCitXZWQgRmViIDE5IDE2OjQzOjQ3IDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfaW5zbnMpOiBJZiB0aGVyZSB3YXMgbm8gZmlyc3Qgc2NoZWR1bGluZyBwYXNzLAorCXNwbGl0IGluc3RydWN0aW9ucyBhZnRlciByZWxvYWQuCisJKHVwZGF0ZV9mbG93X2luZm8pOiBUb2xlcmF0ZSBzb21lIGlkaW9zeW5jcmFzaWVzIGFmdGVyIHJlbG9hZC4KKworV2VkIEZlYiAxOSAxMToxMzo1MSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIGNvbWJpbmUuYyAoZmluZF9zcGxpdF9wb2ludCk6IERvbid0IHR1cm4gYSBTSUdOX0VYVEVORCBpbnRvCisJYSBzZXJpZXMgb2Ygc2hpZnRzIGlmIGVpdGhlciBtb2RlIGlzIGEgcGFydGlhbCBpbnRlZ2VyIG1vZGUuCisKK01vbiBGZWIgMTcgMDg6MDY6MDIgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmMgKHssbm9uX31zaG9ydF9jaW50X29wZXJhbmQpOiBVc2UgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpLgorCShub25fYWRkX2NpbnRfb3BlcmFuZCwgaW5jbHVkZXNfcnNoaWZ0X3ApOiBMaWtld2lzZS4KKwkqIHJzNjAwMC5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBMaWtld2lzZS4KKwkoTEVHSVRJTUFURV9BRERSRVNTX0lOVEVHRVJfUCwgTEVHSVRJTUlaRV9BRERSRVNTKTogTGlrZXdpc2UuCisKK1N1biBGZWIgMTYgMDc6NTU6MTkgMTk5NyAgSiJvcm4gUmVubmVja2UgIChhbXlsYWFyQGN5Z251cy5jby51aykKKworCSogbGliZ2NjMi5jIChfX25lZ2RpMiwgX19sc2hyZGkzLCBfX2FzaGxkaTMsIF9fYXNocmRpMywgX19mZnNkaTIpOgorCVVzZSBBTlNJIHN0eWxlIGRlZmluaXRpb24gd2l0aCBmdWxsIHByb3RvdHlwZS4KKwkoX19tdWxkaTMsIF9fdWRpdl93X3NkaXYsIF9fdWRpdm1vZGRpNCwgX19kaXZkaTMsIF9fbW9kZGkzKSA6IExpa2V3aXNlLgorCShfX3VkaXZtb2RkaTQsIF9fdWRpdmRpMywgX19jbXBkaTIsIF9fdWNtcGRpMikgOiBMaWtld2lzZS4KKwkoX19maXh1bnN0ZmRpLCBfX2ZpeHRmZGksIF9fZml4dW5zeGZkaSwgX19maXh4ZmRpKSA6IExpa2V3aXNlLgorCShfX2ZpeHVuc2RmZGksIF9fZml4ZGZkaSwgX19mbG9hdGRpeGYsIF9fZmxvYXRkaXRmKSA6IExpa2V3aXNlLgorCShfX2Zsb2F0ZGlkZiwgX19mbG9hdGRpc2YsIF9fZml4dW5zeGZzaSwgX19maXh1bnNkZnNpKSA6IExpa2V3aXNlLgorCShfX2djY19iY21wLCBfX2VwcmludGYsIGdvcGVuLCBnY2xvc2UsIF9fYmJfaW5pdF9maWxlKSA6IExpa2V3aXNlLgorCShfX2JiX2luaXRfdHJhY2VfZnVuYywgX19jbGVhcl9jYWNoZSwgbXByb3RlY3QpIDogTGlrZXdpc2UuCisJKF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2ssIGNhY2hlZmx1c2gsIGV4aXQpIDogTGlrZXdpc2UuCisJKGZpbmRfZXhjZXB0aW9uX3RhYmxlLCBfX2ZpbmRfZmlyc3RfZXhjZXB0aW9uX3RhYmxlX21hdGNoKSA6IExpa2V3aXNlLgorCitTdW4gRmViIDE2IDA3OjUyOjAyIDE5OTcgIE9saXZlciBLZWxsb2dnICAob2xpdmVyLmtlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLm1kIChtdWxxaWhpMyk6IENvcnJlY3RlZC4KKwkodHN0e2hmLHRxZn0pOiBTaW1wbGlmaWVkLgorCShtb3ZxaSk6IFJlbW92ZWQgcmVkdW5kYW50IGFsdGVybmF0aXZlLgorCShhZGRxaS0zLGFkZHFpLTIsYWRkcWktMSk6IFNldC9SZXNldCBCaXQgcGF0dGVybnMgYnkgQy4gTmV0dGxldG9uLgorCShtYW55IHBhdHRlcm5zKTogSW50cm9kdWNlZCBvcGVyYW5kIG91dHB1dCBtb2RpZmllcnMgZCx0LGIsQix3LgorCSogMTc1MGEuYyAocHJpbnRfb3BlcmFuZCk6IE5ldyBvcGVyYW5kIG91dHB1dCBtb2RpZmllcnMgZCx0LGIsQix3LgorCShzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBSZW1vdmVkLgorCShvbmVfYml0X3NldF9wLCB3aGljaF9iaXQpOiBBZGRlZCBmcm9tIEMuIE5ldHRsZXRvbidzIG0xNzUwIGNvbmZpZy4KKworU3VuIEZlYiAxNiAwNzo0MzozNyAxOTk3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jIChzcGVjaWFsX3N5bWJvbCk6IERvbid0IHRyZWF0ICJMIiBpbiAiTCcuLi4nIiBhcyBpZGVudGlmaWVyLgorCShjaGVja19tYWNyb19uYW1lLCBjb2xsZWN0X2V4cGFuc2lvbiwgcmVzY2FuKTogTGlrZXdpc2UuCisJKiBjcHBsaWIuYyAoc3BlY2lhbF9zeW1ib2wsIGNoZWNrX21hY3JvX25hbWUsIGNvbGxlY3RfZXhwYW5zaW9uKToKKwlMaWtld2lzZS4KKworCSogY2V4cC55IChwYXJzZV9jX2V4cHJlc3Npb24pOiBEb24ndCBjaGVjayBmb3IgbnVsbCBsZXhwdHIKKwlvciAqbGV4cHRyID09IDAuICBJZiB5eXBhcnNlIHJldHVybnMgbm9uemVybyB2YWx1ZSwgYWJvcnQuCisKKwkqIGNleHAueSAoeXlsZXgpOiBVc2UgaXNfc3BhY2UsIG5vdCBpc19ob3Jfc3BhY2UsIHRvIGZpbmQga2V5d29yZCBlbmQuCisJKGlzX3NwYWNlKTogTmV3IGRlY2wuCisJKGlzX2hvcl9zcGFjZSk6IFJlbW92ZWQuCisJKiBjY2NwLmMgKGlzX3NwYWNlKTogTm93IGV4dGVybmFsLgorCShpc19ob3Jfc3BhY2UpOiBOb3cgc3RhdGljLgorCitTdW4gRmViIDE2IDA0OjU1OjExIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMsIHRyZWUuaCAoZGVjbF9wcmludGFibGVfbmFtZSk6IENoYW5nZSBhcmd1bWVudHMuCisJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBSZWZsZWN0IGFib3ZlIGNoYW5nZS4KKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKiBmdW5jdGlvbi5jIChpbml0X2Z1bmN0aW9uX3N0YXJ0KTogTGlrZXdpc2UuCisJKiB0b3BsZXYuYyAoZGVjbF9uYW1lKTogTGlrZXdpc2UuCisJKGFubm91bmNlX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKHZfbWVzc2FnZV93aXRoX2RlY2wpOiBMaWtld2lzZS4KKwkqIGR3YXJmMm91dC5jIChkd2FyZjJfbmFtZSk6IE5ldyBmbiwgdXNlcyBkZWNsX3ByaW50YWJsZV9uYW1lLgorCShhZGRfcHVibmFtZSk6IFVzZSBpdC4KKwkoYWRkX25hbWVfYW5kX3NyY19jb29yZHNfYXR0cmlidXRlcyk6IFVzZSBpdCwgYWRkIAorCURXX0FUX01JUFNfbGlua2FnZV9uYW1lIGlmIGFwcHJvcHJpYXRlLgorCShvdXRwdXRfYXJhbmdlcyk6IFVzZSBEV19BVF9NSVBTX2xpbmthZ2VfbmFtZSBpZiBwcmVzZW50LgorCitTYXQgRmViIDE1IDE4OjQ1OjMwIDE5OTcgIEouVC4gQ29ua2xpbiAgPGp0Y0BjeWdudXMuY29tPgorCisJKiBtNjhrLm1kIChjbXBzaSk6IEFkZGVkIGluc24gd2l0aCBhcHByb3ByaWF0ZSBjb25zdHJhaW50cyBmb3IKKwlUQVJHRVRfNTIwMDsgY2hhbmdlZCBjb25kaXRpb24gb2YgZXhpc3RpbmcgaW5zbiB0byAhVEFSR0VUXzUyMDAuCisKK1NhdCBGZWIgMTUgMTg6MjY6NTAgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogbTY4ay9ocDMyMC5oIChQUklOVF9PUEVSQU5EX0ZMT0FUKTogUmVtb3ZlZC4KKwkoQVNNX09VVFBVVF97RkxPQVQsRE9VQkxFLExPTkdfRE9VQkxFfV9PUEVSQU5EKTogRGVmaW5lZC4KKwkoUFJJTlRfT1BFUkFORCk6IFR1cm5lZCBvZmY6IHVzZSBkZWZhdWx0LgorCSogbTY4ay9uZXdzLmggKFBSSU5UX09QRVJBTkQpOiBUdXJuZWQgb2ZmOiB1c2UgZGVmYXVsdC4KKwkoQVNNX09VVFBVVF97RkxPQVQsRE9VQkxFLExPTkdfRE9VQkxFfV9PUEVSQU5EKTogRGVmaW5lZC4KKwkqIG02OGsvdG93ZXItYXMuaCAoUFJJTlRfT1BFUkFORCk6IFR1cm5lZCBvZmY6IHVzZSBkZWZhdWx0LgorCShBU01fT1VUUFVUX3tGTE9BVCxET1VCTEV9X09QRVJBTkQpOiBEZWZpbmVkLgorCSogbTY4ay9jcmRzLmggKFBSSU5UX09QRVJBTkQpOiBUdXJuZWQgb2ZmOiB1c2UgZGVmYXVsdC4KKwkoQVNNX09VVFBVVF97RkxPQVQsRE9VQkxFfV9PUEVSQU5EKTogRGVmaW5lZC4KKwkoU0dTX05PX0xJLFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZLElNTUVESUFURV9QUkVGSVgpOiBEZWZpbmVkLgorCShORUVEX1BST0JFKTogRGVmaW5lZCBpbnN0ZWFkIG9mIEhBVkVfcHJvYmUgYW5kIGdlbl9wcm9iZS4KKwkoRlVOQ1RJT05fe1BSTyxFUEl9TE9HVUUpOiBEbyBub3QgYWNjZXNzIEZQQSByZWdpc3RlcnMuCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IEFkZCBDUkRTIGFuZCBNT1RPUk9MQSBwcm9iZSBjb2RlLgorCShwcmludF9vcGVyYW5kKTogRG8gbm90IG91dHB1dCAnLicgaWYgQ1JEUy4KKworCSogZ2NjLmMgKHNldF9zcGVjKTogRml4IGNvbW1lbnQtaW4tY29tbWVudCB0eXBvLgorCQorU2F0IEZlYiAxNSAxNzo1NDoyMyAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoQ09NUElMRVJTKTogTW92ZWQgYmVmb3JlIEdDQ19QQVNTRVMuCisJKEdDQ19QQVNTRVMpOiBVc2UgJChDT01QSUxFUlMpIGluc3RlYWQgb2YgY2MxJChleGVleHQpLgorCitTYXQgRmViIDE1IDE3OjI1OjQ0IDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogQWxsb2NhdGUgc3BhY2UgZm9yIHRlcm1pbmF0aW5nIG51bGwuCisKK1NhdCBGZWIgMTUgMTc6MjE6MzQgMTk5NyAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CisKKwkqIHZheC92YXguaCAoRlVOQ1RJT05fUFJPTE9HVUUpOiBBZGp1c3Qgc2l6ZSBieSBTVEFSVElOR19GUkFNRV9PRkZTRVQuCisJKiB2YXgvdm1zLmggKEZVTkNUSU9OX1BST0xPR1VFKTogRGVsZXRlLgorCitTYXQgRmViIDE1IDA4OjQ4OjE0IDE5OTcgIERvdWdsYXMgQi4gUnVwcCAgKHJ1cHBAZ25hdC5jb20pCisKKwkqIGNvbmZpZ3VyZTogRml4IHNldHRpbmcgb2YgQ0MgaW4gbm8tc3ltbGluayBjYXNlLgorCitTYXQgRmViIDE1IDA4OjQyOjE3IDE5OTcgIE9saXZlciBLZWxsb2dnICAob2xpdmVyLmtlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogUHJlZmVyIGRpdm1vZCBpbiBzYW1lIG1vZGUgb3ZlciBkaXYKKwlpbiB3aWRlciBtb2RlLgorCitTYXQgRmViIDE1IDA4OjI3OjUwIDE5OTcgIEoib3JuIFJlbm5lY2tlICAoYW15bGFhckBjeWdudXMuY28udWspCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IGFzc3VtZSBhIG5vbmV4cGxpY2l0IGNvbnN0YW50IGNhbm5vdAorCWVxdWFsIGFuIGV4cGxpY2l0IG9uZS4KKworCSogaTM4Ni5tZCAoemVyb19leHRlbmRxaVtoc11pMiszKTogRW5zdXJlIG9wZXJhdGluZyBvbiBSRUcuCisKK1NhdCBGZWIgMTUgMDg6MTE6MDQgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlIChpWzM0NTZdODYtKi1zb2xhcmlzMiopOiBDb3JyZWN0IHRtLmggZmlsZW5hbWUgaW4KKwlzdGFicyBjYXNlLgorCisJKiBhMjlrLmggKFNUT1JFX0ZMQUdfVkFMVUUpOiBXcml0ZSBzbyB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NC1iaXQgaG9zdC4KKworRnJpIEZlYiAxNCAxNjowMzozNyAxOTk3ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CisKKwkqIGkzODYvdC1zY281IChsaWJnY2N7MSwyfS1lbGYuYSk6IGNvcnJlY3QgdGFyZ2V0IGRlcGVuZGVuY2llcy4KKworRnJpIEZlYiAxNCAxNjowMDoyMyAxOTk3ICBILkouIEx1ICA8aGpsQGdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvc3ZyNC5oIChEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogU2V0IAorCWN1cnJlbnQtc2VjdGlvbiB2YXJpYWJsZSB0byB0ZXh0LgorCitXZWQgRmViIDEyIDE2OjA3OjM0IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KKworCSogZml4aW5jLmlyaXg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtaXBzLXNnaS1pcml4WzU2XSk6IFNldCBmaXhpbmNsdWRlcyB0byBmaXhpbmMuaXJpeC4KKworV2VkIEZlYiAxMiAxNTo0MDoyMCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChMSUJHQ0MyX0RFQlVHX0NGTEFHUyk6IE5ldyBtYWNyby4KKwkoTElCR0NDMl9DRkxBR1MpOiBVc2UgaXQuCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF90eXBlKTogRG8gZWFybHkgZXhpdCBvbmx5IGlmIFRZUEVfQ09OVEVYVCBpcyBOVUxMCisJb3IgaWYgVFlQRV9DT05URVhUIGlzIGFub3RoZXIgdHlwZSAoZS5nLiBhIG5lc3RlZCB0eXBlKS4KKworVHVlIEZlYiAxMSAxNTo1Mzo1MSAxOTk3ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHNoLmMgKGNhbGNfbGl2ZV9yZWdzKTogRXhjbHVkZSBSRVRVUk5fQUREUkVTU19QT0lOVEVSX1JFR05VTS4KKworCSogc2guYyAoY2FsY19saXZlX3JlZ3MpOiBOZWVkIG5vdCBzYXZlIE1BQ0wvTUFDSCB3aGVuIG5vdCBsaXZlCisJb3IgaW4gbGVhZiBmdW5jdGlvbi4KKworTW9uIEZlYiAxMCAxNDo0NjozMiAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHN0bXQuYyAoZ3JvdXBfY2FzZV9ub2Rlcyk6IFJlY29nbml6ZSBtb3JlIG9wcG9ydHVuaXRpZXMgdG8KKwlncm91cCBjYXNlIG5vZGVzLgorCitTdW4gRmViICA5IDE0OjA1OjQ4IDE5OTcgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9zdGFja190ZW1wKTogQ2xlYXIgTUVNIGZsYWdzIGZyb20gcmV1c2UuCisKK1NhdCBGZWIgIDggMTc6Mzc6NDcgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK0ZyaSBGZWIgIDcgMTI6NDI6MzQgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBwYS5oIChSRVRVUk5fQUREUl9SVFgpOiBGaXggdG8gaWdub3JlIGV4cG9ydCBzdHVicy4KKwkqIHBhLmMgKHJldHVybl9hZGRyX3J0eCk6IERlZmluZS4KKworRnJpIEZlYiAgNyAxMzo1Njo1NiAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGNzZS5jIChpbnZhbGlkYXRlX2Zyb21fY2xvYmJlcnMpOiBEZWxldGUgdW5uZWNlc3NhcnkgdGVzdCBmb3IKKwkoY2xvYmJlciBuaWwpLgorCisJKiB0b3BsZXYuYyAobWFpbik6IERlbGV0ZSByZWR1bmRhbnQgc2V0dGluZ3Mgb2YgZmxhZ19ub19pbmxpbmUKKwlhbmQgd2Fybl9pbmxpbmUgaWYgbm90IG9wdGltaXphdGluZy4KKworRnJpIEZlYiAgNyAxMDo0NTowMiAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLW11bHRpbGliLXN1Yik6IEFkZCBtaXNzaW5nICJlbHNlIHRydWUiCisJY2xhdXNlcyB0byB3b3JrIGFyb3VuZCBtYWtlIGJ1ZyBvbiBzb21lIHN5c3RlbXMuCisKK0ZyaSBGZWIgIDcgMDg6MTk6NDMgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChjb25zdF9iaW5vcCk6IERvbid0IGNhbGwgc2l6ZV9pbnQgaWYgbG93IDwgMC4KKworCSogZnVuY3Rpb24uYyAoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEsIGNhc2UgVVNFLCBDTE9CQkVSKToKKwlGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK1RodSBGZWIgIDYgMTc6MDk6MTcgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBleGNlcHQuYyAoZmluZF9leGNlcHRpb25faGFuZGxlcl9sYWJlbHMpOiBJbml0aWFsaXplIGxhYmVsIGFycmF5CisJd2l0aCB6ZXJvZXMuCisKK1dlZCBGZWIgIDUgMjI6MTE6NTUgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5tZCAocG9zdF9sZHdtKTogRml4IHR5cG9zLgorCitXZWQgRmViICA1IDE1OjU3OjQyIDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogbTY4ay92eG02OGsuaCAoV0NIQVJfVFlQRSxXQ0hBUl9UWVBFX1NJWkUsU0laRV9UWVBFKTogRml4LgorCShQVFJESUZGX1RZUEUpOiBEZWZpbmUuCisKK1dlZCBGZWIgIDUgMTE6MTk6MTMgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6IERvbid0IGFzayBhc3NpZ25fc3RhY2tfbG9jYWwgdG8gcm91bmQgdXAKKwl0byBhIG11bHRpcGxlIG9mIEJJR0dFU1RfQUxJR05NRU5ULCB1bmxlc3MgYSByZWdpc3RlciBhcHBlYXJzIGluIGEKKwlwYXJhZG94aWNhbCBzdWJyZWcuCisKK1R1ZSBGZWIgIDQgMTk6Mjk6NDAgMTk5NyAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSwgY2FzZSBQT1NUX0lOQyk6IERvbid0IHVzZQorCUFERFJfVFlQRSBoZXJlLgorCitUdWUgRmViICA0IDEyOjMzOjQ1IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogRGVsZXRlIG9idmlvdXMgbm8tb3AgbW92ZXMKKwl3aGljaCB1c2UgU1VCUkVHcy4KKworTW9uIEZlYiAgMyAyMDowMDozNSAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGp1bXAuYyAoZmluZF9jcm9zc19qdW1wKTogRG9uJ3QgYWxsb3cgb2xkLXN0eWxlIGFuZCB2b2xhdGlsZSBhc21zCisJdG8gbWF0Y2guCisKK01vbiBGZWIgIDMgMTU6NTE6MzEgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9zb2wyLmggKEFTTV9TSE9SVCxBU01fTE9ORyk6IFNldCB0byAudWFoYWxmLy51YXdvcmQuCisJKiBzcGFyYy9zeXN2NC5oIChBU01fTE9ORyk6IERlZmluZS4KKwkoQVNNX09VVFBVVF97RkxPQVQsRE9VQkxFLExPTkdfRE9VQkxFfSk6IFVzZSBBU01fTE9ORy4KKworTW9uIEZlYiAgMyAxMzowMTo0NiAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIHJlbG9hZC5oIChlbnVtIHJlbG9hZF90eXBlKTogQWRkIFJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTIGFuZAorCVJFTE9BRF9GT1JfT1VUQUREUl9BRERSRVNTLgorCSogcmVsb2FkLmMgKEFERFJfVFlQRSk6IE5ldyBtYWNyby4KKwkocHVzaF9zZWNvbmRhcnlfcmVsb2FkKTogQ2hlY2sgZm9yIG5ldyByZWxvYWQgdHlwZXMuCisJKGNvbWJpbmVfcmVsb2Fkcyk6IExpa2V3aXNlLgorCShmaW5kX3JlbG9hZHMpOiBMaWtld2lzZS4gIENvbnZlcnQgSU5QQUREUl9BRERSRVNTIGFuZAorCU9VVEFERFJfQUREUkVTUyB0byBPUEFERFJfQUREUi4gIENoZWNrIE9QQUREUl9BRERSIHdoZW4gbG9va2luZworCWZvciBtZXJnZXMuCisJKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogV2hlbiByZWxvYWRpbmcgYW4gYWRkcmVzcywgdXNlIHRoZQorCUFERFJfVFlQRSBtYWNybyB0byBnZXQgdGhlIHR5cGUgb2YgdGhlIG5ldyByZWxvYWQuCisJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBMaWtld2lzZS4KKwkocmVsb2FkX3doZW5fbmVlZGVkX25hbWUpOiBBZGQgbmV3IHJlbG9hZCB0eXBlcy4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQWRkIGluX2FkZHJfYWRkciBhbmQgb3V0X2FkZHJfYWRkciBmaWVsZHMgdG8KKwlpbnNuX25lZWRzIHN0cnVjdC4gIFVzZSB0aGVtIGZvciBuZXcgcmVsb2FkIHR5cGVzLCBhbmQgd2hlbgorCWNvbXB1dGluZyBpbl9tYXggYW5kIG91dF9tYXguCisJKHJlZ191c2VkX2luX2lucGFkZHJfYWRkcik6IE5ldyBzdGF0aWMgYXJyYXkuCisJKHJlZ191c2VkX2luX291dGFkZHJfYWRkcik6IE5ldyBzdGF0aWMgYXJyYXkuCisJKG1hcmtfcmVsb2FkX3JlZ19pbl91c2UpOiBIYW5kbGUgbmV3IHJlbG9hZCB0eXBlcy4KKwkoY2xlYXJfcmVsb2FkX3JlZ19pbl91c2UsIHJlbG9hZF9yZWdfZnJlZV9wKTogTGlrZXdpc2UuCisJKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCwgcmVsb2FkX3JlZ19yZWFjaGVzX2VuZF9wKTogTGlrZXdpc2UuCisJKHJlbG9hZHNfY29uZmxpY3QsIG1lcmdlX2Fzc2lnbmVkX3JlbG9hZHMpOiBMaWtld2lzZS4KKwkoZW1pdF9yZWxvYWRfaW5zbnMpOiBMaWtld2lzZS4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogU2F2ZSBhcnJheXMgZm9yIG5ldyByZWxvYWQgdHlwZXMuCisKK1N1biBGZWIgIDIgMTk6NDM6MTcgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIG9iamMvc2VsZWN0b3IuYyAoX19zZWxfcmVnaXN0ZXJfdHlwZWRfbmFtZSk6IEVsaW1pbmF0ZSBjb21waWxlcgorCXdhcm5pbmdzIHdpdGggZXhwbGljaXQgY2FzdC4KKworCSogQWRkIGNvbmRpdGlvbiBtdXRleCBzdXBwb3J0IHRvIHRoZSBvYmpjIHJ1bnRpbWUuCisJKiBvYmpjL3Roci1tYWNoLmMgKG9iamNfY29uZGl0aW9uX3ssZGV9YWxsb2NhdGUpOiBOZXcgZnVuY3Rpb25zLgorCShvYmpjX2NvbmRpdGlvbl97d2FpdCxicm9hZGNhc3Qsc2lnbmFsfSk6IE5ldyBmdW5jdGlvbnMuCisJKiBvYmpjL3Roci1wdGhyZWFkcy5jIChvYmpjX2NvbmRpdGlvbl97LGRlfWFsbG9jYXRlKTogTmV3IGZ1bmN0aW9ucy4KKwkob2JqY19jb25kaXRpb25fe3dhaXQsYnJvYWRjYXN0LHNpZ25hbH0pOiBOZXcgZnVuY3Rpb25zLgorCSogb2JqYy90aHItc29sYXJpcy5jIChvYmpjX2NvbmRpdGlvbl97LGRlfWFsbG9jYXRlKTogTmV3IGZ1bmN0aW9ucy4KKwkob2JqY19jb25kaXRpb25fe3dhaXQsYnJvYWRjYXN0LHNpZ25hbH0pOiBOZXcgZnVuY3Rpb25zLgorCSogb2JqYy90aHIuaDogUHJvdG90eXBlcyBmb3IgbmV3IGZ1bmN0aW9ucy4KKworCSogb2JqYy9pbml0LmMgKF9fb2JqY19ydW50aW1lX211dGV4KTogRWxpbWluYXRlIGxlYWRpbmcgdW5kZXJzY29yZQorCWZyb20gbmFtZSBvZiBvYmpjIG11dGV4IGFuZCB0aHJlYWQgc3RydWN0dXJlcy4KKwkqIG9iamMvcnVudGltZS5oOiBMaWtld2lzZS4KKwkqIG9iamMvdGhyLXtkZWNvc2YxLGlyaXgsbWFjaCxvczIscG9zaXgscHRocmVhZHMsc2luZ2xlfS5jOiBMaWtld2lzZS4KKwkqIG9iamMvdGhyLXtzb2xhcmlzLHdpbjMyfS5jOiBMaWtld2lzZS4KKwkqIG9iamMvdGhyLntjLGh9OiBMaWtld2lzZS4KKworCSogTWFqb3IgcmVvcmdhbml6YXRpb24gb2Ygb2JqYyBlcnJvciBoYW5kbGluZy4KKwkqIG9iamMvT2JqZWN0Lm0gKC1lcnJvcjopOiBDYWxsIG9iamNfZXJyb3IgZnVuY3Rpb24gaW5zdGVhZCBvZgorCXVzaW5nIGZ1bmN0aW9uIHBvaW50ZXIuCisJKiBvYmpjL2FyY2hpdmUuYzogUmVwbGFjZSBjYWxsIHRvIGFib3J0IG9yIF9fb2JqY19mYXRhbCBmdW5jdGlvbnMKKwl3aXRoIGNhbGwgdG8gb2JqY19lcnJvciBmdW5jdGlvbiB0aHJvdWdob3V0IHRoZSBjb21wbGV0ZSBmaWxlLgorCSogb2JqYy9jbGFzcy5jIChvYmpjX2dldF9jbGFzcyk6IFJlcGxhY2UgY2FsbCB0byBhYm9ydCBmdW5jdGlvbgorCXdpdGggY2FsbCB0byBvYmpjX2Vycm9yIGZ1bmN0aW9uLgorCSogb2JqYy9lbmNvZGluZy5jIChvYmpjX3NpemVvZl90eXBlLCBvYmpjX2FsaWdub2ZfdHlwZSk6IFJlcGxhY2UKKwljYWxsIHRvIGFib3J0IGZ1bmN0aW9uIHdpdGggY2FsbCB0byBvYmpjX2Vycm9yIGZ1bmN0aW9uLgorCShvYmpjX3NraXBfdHlwZXNwZWMpOiBMaWtld2lzZS4KKwkqIG9iamMvaW5pdC5jIChpbml0X2NoZWNrX21vZHVsZV92ZXJzaW9uKTogUmVwbGFjZSBjYWxsIHRvCisJYWJvcnQgZnVuY3Rpb24gd2l0aCBjYWxsIHRvIG9iamNfZXJyb3IgZnVuY3Rpb24uCisJKiBvYmpjL21pc2MuYyAob2JqY192ZXJyb3IpOiBOZXcgZnVuY3Rpb24uCisJKG9iamNfZmF0YWwpOiBSZW1vdmUgZnVuY3Rpb24uCisJKG9iamNfc2V0X2Vycm9yX2hhbmRsZXIpOiBOZXcgZnVuY3Rpb24uCisJKF9vYmpjX2Vycm9yX2hhbmRsZXIpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgorCShfX2FscGhhX18pOiBSZW1vdmUgdW5uZWVkZWQgY29kZS4KKwkob2JqY19lcnJvcik6IEFsbG93IHVzZXIgc3BlY2lmaWVkIGVycm9yIGhhbmRsZXIgZnVuY3Rpb24gdG8KKwl0cmFwIGFuZCBoYW5kbGUgdGhlIG9iamMgZXJyb3IuICBBZGRlZCBhbiBlcnJvciBjb2RlIHBhcmFtZXRlcgorCXdoaWNoIGluZGljYXRlcyB0aGUgc3BlY2lmaWMgZXJyb3IgdGhhdCBvY2N1cmVkLgorCShvYmpjX21hbGxvYywgb2JqY19hdG9taWNfbWFsbG9jKTogUmVwbGFjZSBjYWxsIHRvIG9iamNfZmF0YWwKKwlmdW5jdGlvbiB3aXRoIGNhbGwgdG8gb2JqY19lcnJvciBmdW5jdGlvbi4KKwkob2JqY192YWxsb2MsIG9iamNfcmVhbGxvYywgb2JqY19jYWxsb2MpOiBMaWtld2lzZS4KKwkqIG9iamMvb2JqYy1hcGkuaDogRGVjbGFyZSBlcnJvciBoYW5kbGluZyBmdW5jdGlvbnMgYW5kIHR5cGVkZWYKKwlmb3IgdXNlciBzcGVjaWZpZWQgZXJyb3IgaGFuZGxlciBmdW5jdGlvbi4gIERlZmluZSBlcnJvciBjb2RlcworCXVzZWQgYnkgdGhlIHJ1bnRpbWUgbGlicmFyeS4KKwkqIG9iamMvcnVudGltZS5oOiBSZW1vdmUgZXJyb3IgaGFuZGxpbmcgZGVjbGFyYXRpb25zLgorCSogb2JqYy9zZW5kbXNnLmMgKF9fb2JqY19mb3J3YXJkKTogUmVwbGFjZSBjYWxsIHRvIGFib3J0IGZ1bmN0aW9uCisJd2l0aCBjYWxsIHRvIG9iamNfZXJyb3IgZnVuY3Rpb24uCisJCitTdW4gRmViICAyIDE5OjQyOjUyIDE5OTcgIFRob21hcyBCYWllciA8YmFpZXJAY2kudHV3aWVuLmFjLmF0PgorCisJKiBvYmpjL2hhc2guYyAoaGFzaF9kZWxldGUpOiBTdGVwIHRocm91Z2ggdGhlIGhhc2ggbm9kZXMKKwl2ZXJzdXMgdXNpbmcgaGFzaF9uZXh0IHRvIGluY3JlYXNlIGVmZmljaWVuY3kuCisJKiBvYmpjL2FyY2hpdmUuYyAoX19vYmpjX2ZpbmlzaF9yZWFkX3Jvb3Rfb2JqZWN0KTogVXNlIGhhc2gKKwl0YWJsZSBpbnN0ZWFkIG9mIGxpc3QuCisKK1N1biBGZWIgIDIgMDg6MjU6MDUgMTk5NyAgT3ZpZGl1IFByZWRlc2N1ICA8b3ZpZGl1QG5ldC1jb21tdW5pdHkuY29tPgorCisJKiBvYmpjLWFjdC5jIChlbmNvZGVfYWdncmVnYXRlX3dpdGhpbik6IE5ldyBmdW5jdGlvbi4KKwkoZW5jb2RlX2FnZ3JlZ2F0ZSk6IEdlbmVyYXRlcyBlbmNvZGluZ3MgZm9yIHVuaW9ucyBzaW1pbGFyIAorCXRvIHRob3NlIGZvciBzdHJ1Y3RzIGV4Y2VwdCBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2lzIGluc3RlYWQKKwlvZiBicmFjZXMuCisKK1N1biBGZWIgIDIgMDc6MTU6NTQgMTk5NyAgTWF0IEhvc3RldHRlciAgKG1hdEBsY3MubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRml4IGltcHJvcGVyIGluc3RhbGxhdGlvbiBvZiBsYXN0IGNoYW5nZS4KKworU3VuIEZlYiAgMiAwNjo1MDo1NSAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogbTY4ay5jIChvdXRwdXRfc2NjX2RpKTogQWRkIG1pc3NpbmcgQ0NfU1RBVFVTX0lOSVQuCisKK1N1biBGZWIgIDIgMDY6Mzk6NTUgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBXaGVuIHBvcHBpbmcgbGV2ZWxzLCBkb24ndAorCWJsb3cgdXAgaWYgY29uc3RydWN0b3JfbWF4X2luZGV4IG5vdCBzZXQgZHVlIHRvIHByZXZpb3VzIGVycm9yLgorCisJKiBjb21iaW5lLmMgKGZpbmRfc3BsaXRfcG9pbnQsIGNhc2UgU0VUKTogRml4IGVycm9yIGluIGxhc3QgY2hhbmdlLgorCitTdW4gRmViICAyIDA2OjI4OjU2IDE5OTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKHJlc2Nhbik6IEluc2VydCBhIHNwYWNlIGFmdGVyIGAuJyBhcyB3ZWxsLAorCXRvIHByZXZlbnQgYWNjaWRlbnRhbCB0b2tlbi1wYXN0aW5nIChlLmcuIGAueCcgLT4gYC4xMCcpLgorCitTdW4gRmViICAyIDA2OjA4OjE0IDE5OTcgIE9saXZlciBLZWxsb2dnICAob2xpdmVyLmtlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLmMgKG1vZHJlZ25vX2FkanVzdCk6IEZpeGVkIGNhc2Ugd2hlbiByZWdfcmVudW1iZXIgaW52YWxpZC4KKworU2F0IEZlYiAgMSAxOToxMTowOCAxOTk3ICBKLlQuIENvbmtsaW4gIDxqdGNAcmhpbm8uY3lnbnVzLmNvbT4KKworCSogbTY4ay5tZCAobW92cWkpOiBFbmFibGUgdXNlIG9mIGNsciBhbmQgc3QgaW5zbnMgb24gVEFSR0VUXzUyMDAuCisJKiBtNjhrLmMgKG91dHB1dF9tb3ZlX3NpbW9kZV9jb25zdCk6IExpa2V3aXNlLgorCitTYXQgRmViICAxIDE4OjU0OjAwIDE5OTcgIERvdWdsYXMgQi4gUnVwcCAgKHJ1cHBAZ25hdC5jb20pCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBGaXggaW1wcm9wZXIgdXNlIG9mIHN0cm5jcHkuCisKK0ZyaSBKYW4gMzEgMTU6MzU6MDggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmM6IFJlbW92ZSBleHRlcm4gZm9yIG1hbGxvYyBhbmQgcmVhbGxvYy4KKworRnJpIEphbiAzMSAxNzowODoxMSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGxvY2FsLWFsbG9jLmMgKHVwZGF0ZV9lcXVpdl9yZWdzKTogSWYgYSByZWdpc3RlciB3aGljaCBpcworIAllcXVpdmFsZW50IHRvIHNvbWUgdmFsdWUgaXMgb25seSB1c2VkIGluIG9uZSBwbGFjZSwgYW5kIHdlIGNhbid0CisJc3Vic3RpdHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB1c2UsIHRoZW4gbW92ZSB0aGUgcmVnaXN0ZXIgYXNzaWdubWVudAorCXRvIGp1c3QgYmVmb3JlIHRoZSB1c2UuCisKK0ZyaSBKYW4gMzEgMTU6NTc6MjUgMTk5NyAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYubWQgKGlkaXYsaW11bCxmcG11bCk6IEFkZGVkIG5ldyBmdW5jdGlvbmFsIHVuaXRzIGZvciBwZW50aXVtcHJvLgorCisJKiBpMzg2LmMgKHBlbnRpdW1wcm9fY29zdCk6IEFkZGVkIG5ldyBjb3N0IHN0cnVjdHVyZSBmb3IgcGVudGl1bXByby4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFNldCBpeDg2X2Nvc3QgdG8gYXBwcm9wcmlhdGUgY29zdCBzdHJ1Y3R1cmUuCisKK1RodSBKYW4gMzAgMDk6MzQ6MjYgMTk5NyAgSi5ULiBDb25rbGluICA8anRjQHJoaW5vLmN5Z251cy5jb20+CisKKwkqIG02OGsubWQgKHN0YWNrIGFkanVzdCBwZWVwaG9sZXMpOiBVc2UgbGVhIGluc3RlYWQgb2YKKwlhZGQudyB3aGVuIGFkZGluZyAxNiBiaXQgY29uc3RhbnRzIG9uIGFsbCBidXQgVEFSR0VUXzY4MDQwLgorCitUaHUgSmFuIDMwIDA4OjU4OjA4IDE5OTcgIFJhbGYgQmFlY2hsZSAgPHJhbGZAd2FsZG9yZi1nbWJoLmRlPgorCisJKiBmdW5jdGlvbi5jIChUUkFNUE9MSU5FX0FMSUdOTUVOVCk6IFByb3ZpZGUgZGVmYXVsdC4KKwkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IFVzZSBUUkFNUE9MSU5FX0FMSUdOTUVOVCBpbnN0ZWFkCisJb2YgRlVOQ1RJT05fQk9VTkRBUlkuCisJKiB2YXJhc20uYyAoVFJBTVBPTElORV9BTElHTk1FTlQpOiBQcm92aWRlIGRlZmF1bHQuCisJKGFzc2VtYmxlX3RyYW1wb2xpbmVfdGVtcGxhdGUpOiBVc2UgVFJBTVBPTElORV9BTElHTk1FTlQgaW5zdGVhZAorCW9mIEZVTkNUSU9OX0JPVU5EQVJZLgorCitXZWQgSmFuIDI5IDE4OjE2OjAyIDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2guaCAoUkVHX0NMQVNTX0NPTlRFTlRTKTogQWRkIHJhcCB0byBHRU5FUkFMX1JFR1MgYW5kIGl0cworCXN1cGVyY2xhc3Nlcy4KKworCSogc2gubWQgKG1vdnNpX2ksIG1vdnNpX2llLCBtb3ZoaV9pLCBtb3ZoaSsxKTogVXNlIHR5cGUgcGNsb2FkIGZvcgorCWltbWVkaWF0ZSBvcGVyYW5kcyB3aGVyZSBhcHByb3ByaWF0ZS4KKwkobW92c2ZfaWUrMSk6IEZhaWwgd2hlbiBsb2FkaW5nIGFueXRoaW5nIGJ1dCBhIE1FTSBpbnRvCisJYSBmbG9hdGluZyBwb2ludCByZWd1aXN0ZXIuCisKK1dlZCBKYW4gMjkgMTY6MDA6MzEgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X21lbSk6IFNldCBNQVJLIGluc3RlYWQgb2YgY2xlYXJpbmcgaXQuCisJKG91dHB1dF9jb25zdGFudF9wb29sKTogT25seSBtYXJrIGNvbnN0YW50IHBvb2wgaWYgLU8uCisJQ2hlY2sgbWFyayBmbGFnIHVuY29uZGl0aW9uYWxseS4KKwkobWFya19jb25zdGFudF9wb29sKTogU3RhcnQgYnkgY2xlYXJpbmcgYWxsIG1hcmsgZmxhZ3MuCisKKwkqIHRyZWUuYyAoY29weV9ub2RlKTogQ2xlYXIgVFJFRV9BU01fV1JJVFRFTi4KKworCSogZmxvdy5jIChyZWdub191bmluaXRpYWxpemVkKTogUmV0dXJuIDAgaWYgcmVnIGlzIHVzZWQgZm9yIGFyZ3MuCisKK1dlZCBKYW4gMjkgMTU6MjM6NTkgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQ2xlYXIgcmVnX25fcmVmcyBpZiBpMmRlc3QgaXMgbm90CisJbWVudGlvbmVkIGluIG5ld2kycGF0LgorCitUdWUgSmFuIDI4IDE2OjAwOjIzIDE5OTcgIFN0YW4gQ294ICAgICAgIChjb3hzQGRnLXJ0cC5kZy5jb20pCisKKwlGcm9tIFJvYmVydCBMaXBlIDxyb2JlcnRsQGRnaWkuY29tPiAKKwkqIGkzODYvc2NvNS5oIChTQ09fREVGQVVMVF9BU01fQ09GRik6IFJlbW92ZSBieXRlY29kZSBzdHVmZi4KKwkoQVNNX09VVFBVVF9BU0NJSSk6IFVzZSAuYXNjaWkgaW4gYm90aCBFTEYgYW5kIENPRkYgbW9kZXMuCisJKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogSGFuZGxlIGFsdGVybmF0ZSBzZWN0aW9ucyBmb3IgQ09GRi4KKwlUaGUgT3BlblNlcnZlciA1LjAuMCBhc3NlbWJsZXIgZ2l2ZXMgYW4gZXJyb3IgZm9yIHNlY3Rpb24KKwluYW1lcyBvdmVyIDYgY2hhcmFjdGVycyBsb25nLCBzbyB3ZSBjYXRjaCB0aGUgIm9idmlvdXMiIGNhc2UKKwlhbmQgc2hvcnRlbiBpdC4KKworCSogbTg4ay5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IFVuZGVmaW5lOyBmYWlscworCWZvciBleGNlcHRpb24gc2VjdGlvbnMuICBUaGUgODhrIEFCSSBzcGVjaWZpZXMgJ3NlY3Rpb24nCisJaW5zdGVhZCBvZiAnLnNlY3Rpb24nLgorCitNb24gSmFuIDI3IDEzOjMyOjQ2IDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2guYyAoc2hsX2FuZF9raW5kKTogRml4IHR5cG8uCisJKiBzaC5tZCAoYW5kX3NobF9zY3JhdGNoKTogRml4IHR5cG8gZm9yIGxlbmd0aCA4LgorCitNb24gSmFuIDI3IDA4OjU2OjAzIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IEZpeCBpbmNvcnJlY3QgZm9yd2FyZCBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24gaW4KKwlzeXMvdGltZS5oIG9uIGhwdXgxMC4yMC4KKworTW9uIEphbiAyNyAwOTowNTozNSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCk6IERvbid0IGRvIGFueXRoaW5nIHdpdGggaWZfdGhlbl9lbHNlX2NvbmQKKwlyZXN1bHQgaWYgYm90aCBvbmUgYXJtIGFuZCB0aGUgaW5wdXQgYXJlIGEgY29tcGFyaXNvbi4KKwkoc2ltcGxpZnlfe3J0eCxpZl90aGVuX2Vsc2UsbG9naWNhbCxzaGlmdF9jb25zdH0pOiBEb24ndAorCXRlc3QgU1RPUkVfRkxBR19WQUxVRSB3aXRoICNpZjsgcHJvcGVybHkgdGVzdCBmb3IganVzdCBzaWduIGJpdC4KKwkobnVtX3NpZ25fYml0X2NvcGllcywgaWZfdGhlbl9lbHNlX2NvbmQpOiBMaWtld2lzZS4KKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBQcm9wZXJseSB0ZXN0IGZvciBTVE9SRV9GTEFHX1ZBTFVFCisJb2YganVzdCBzaWduIGJpdC4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IG1ha2UgQ09ORF9FWFBSIHdoZW4gYm90aCBleHByIGFuZAorCW9uZSBwYXJ0IGFyZSBjb21wYXJpc29ucy4KKwkqIGEyOWsuaCAoU1RPUkVfRkxBR19WQUxVRSk6IE1ha2UgbmVnYXRpdmUuCisKK0ZyaSBKYW4gMjQgMTY6NDI6MjYgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiB2YXJhc20uYyAoc3RydWN0IHBvb2xfY29uc3RhbnQpOiBBZGQgbWFyayBmaWVsZC4KKwkoZm9yY2VfY29uc3RfbWVtKTogQ2xlYXIgbWFyayBmaWVsZCBpbiBuZXcgY29uc3RhbnQgcG9vbCBlbnRyeS4KKwkob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBDYWxsIG1hcmtfY29uc3RhbnRfcG9vbC4KKwkobWFya19jb25zdGFudF9wb29sLCBtYXJrX2NvbnN0YW50cyk6IE5ldyBzdGF0aWMgZnVuY3Rpb25zLgorCitUaHUgSmFuIDIzIDE1OjA0OjE3IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY3NlLmMgKENPU1QpOiBHZXQgdGhlIHJpZ2h0IGNvc3QgZm9yIGEgU1VCUkVHIG9mIGEgcmVnaXN0ZXIgd2hlbgorIAl0cnVuY2F0aW9uIGlzIGZyZWUuCisKK1RodSBKYW4gMjMgMTE6MTk6NDAgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbiAob2JqYy1oZWFkZXJzKTogRG9uJ3QgdHJ5IGFuZCBpbnN0YWxsIHRoZSBoZWFkZXJzIGlmCisJdGhlIG9iamMgZGlyZWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQuCisKK1dlZCBKYW4gMjIgMTM6MjY6MjUgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBpOTYwLmMgKHByb2Nlc3NfcHJhZ21hKTogQ2FsbCB1bmdldGMgb24gdGhlIGxhc3QgY2hhcmFjdGVyCisJdGhhdCB3YXMgcmVhZCBieSB0aGUgd2hpbGUgbG9vcCwgdG8gbWFrZSBzdXJlIHRoZSBwYXJzZXIgc2VlcyBpdC4KKworVHVlIEphbiAyMSAxNzoyMDozMCAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5jIChvdXRwdXRfdG9jKTogTW92ZSBTVFJJUF9OQU1FX0VOQ09ESU5HIHRvIGNvbW1vbgorCWNvZGUsIHNvIHRoZSB0ZXN0IGZvciB2dCdzIHdvcmtzIHdpdGggLW1taW5pbWFsLXRvYy4KKworVHVlIEphbiAyMSAxNjowMzozNSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChtYXJrX2FsbF90ZW1wc191c2VkKTogU2V0IEtFRVAgYXMgd2VsbC4KKworVHVlIEphbiAyMSAxMjoxNjoxNSAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQHNlYmEuY3lnbnVzLmNvbT4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IENvcnJlY3QgdGVzdCBmb3Igd2hldGhlcgorCWZpZWxkIHNwYW5zIGl0cyB1bml0IG9mIGFsaWdubWVudCBpbiBjYXNlIHdoZXJlCisJZmllbGRfc2l6ZSA9PSB0eXBlX2FsaWduLgorCitNb24gSmFuIDIwIDIwOjI3OjU0IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbWlwcy5tZCAocHJvYmUpOiBDb21tZW50IG91dC4KKworU3VuIEphbiAxOSAyMDo1NDo0NSAxOTk3ICBKb2huIEYuIENhcnIgIDxqZmNAbWl0LmVkdT4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBIYW5kbGUgYSBQQVJBTExFTCBjb250YWluaW5nCisJYSBSRVRVUk4gdGhlIHNhbWUgYXMgYSBSRVRVUk4uCisKK1N1biBKYW4gMTkgMjA6MzU6MjggMTk5NyAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CisKKwkqIHZtc2NvbmZpZy5jb206IENoYW5nZSBhbGwgaGFyZGNvZGVkIHJlZmVyZW5jZXMgb2YgInZheCIgdG8KKwl1c2UgdmFyaWFibGUgZXhwYW5zaW9uIGluc3RlYWQuCisJKGFyY2hfaW5keCwgYXJjaCk6IE5ldyB2YXJpYWJsZXMuCisKKwkqIHZheC5jIChub3RfcXNvcnQpOiAgRG9uJ3QgZGVjbGFyZSBhbGxvY2EuCisJKiB2YXgveG0tdm1zLmg6IERlY2xhcmUgYWxsb2NhIGhlcmUuCisJRG8gbW9zdCBvZiB0aGUgVkFYIEMtc3BlY2lmaWMgc2V0IHVwIGZvciBERUMgQy4KKwkjaWYgREVDIEMsIHVuZGVmaW5lIFFTT1JUX1dPUktBUk9VTkQgYW5kIHFzb3J0LgorCSogbWFrZS1nY2MuY29tLCBtYWtlLWNjY3AuY29tLCBtYWtlLWNjMS5jb206ICBTdXBwb3J0IGJ1aWxkaW5nCisJd2l0aCBHTlUgQyB2cyBWQVggQyB2cyBERUMgQyBmcm9tIHRoZSBEQ0wgY29tbWFuZCBsaW5lLgorCitTdW4gSmFuIDE5IDE3OjIwOjUwIDE5OTcgIE9saXZlciBLZWxsb2dnICAob2xpdmVyLmtlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLm1kIChtb3ZoW2lmXS0xKTogQ29ycmVjdGVkLgorCShtb3Z0cWYtMSk6IERlbGV0ZWQuCisJKiAxNzUwYS5jIChhZGRfMV90b19tZW0pOiBEZWxldGVkLgorCShvdXRwdXRfb3BlcmFuZF9hZGRyZXNzKTogQWRkZWQgb3V0cHV0IG1vZGlmaWVyICdBJy4KKworU3VuIEphbiAxOSAxNzoxNzo1NCAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgorCisJKiBtNjhrLm1kIChhc2hyZGlfY29uc3QsIGFzaHJkaTMpOiBBbGxvdyAzMSBhcyBzaGlmdCBjb3VudC4KKworCSogbTY4ay5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBSZWNvZ25pemUgJ04nLCAnTycgYW5kICdQJy4KKwkqIG02OGsubWQgKHJvdGxbc2hxXWkzLCBzdHJpY3RfbG93X3BhcnQgcm90bCk6IEFsbG93ICdOJywgJ08nCisJb3IgJ1AnIG9wZXJhbmRzLgorCitTdW4gSmFuIDE5IDE3OjA5OjE3IDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBtNjhrLm1kIChhZGRzaTMpOiBGaXggcHJldmlvdXMgY2hhbmdlOiB7YWRkLHN1Yn1xdyBzaG91bGQKKwliZSB7YWRkLHN1Yn1xbC4gRm9yIG90aGVyIHVzZXMgb2Yge2FkZCxzdWJ9cSBkb24ndCBjaGVjayBmb3IgYWRkcmVzcworCXJlZ2lzdGVyIGFuZCBhbHdheXMgdXNlIHthZGQsc3VifXFsLgorCitTdW4gSmFuIDE5IDE1OjA1OjQyIDE5OTcgIFBldGVyIFNlZWJhY2ggIDxzZWVic0Bzb2xvbi5jb20+CisKKwkqIGMtZGVjbC5jIChzdGFydF9kZWNsKTogQWRkIGNvZGUgZm9yIC1XbWFpbi4KKwkoY19kZWNvZGVfb3B0aW9uKTogQWRkIC1maG9zdGVkLCAtZmZyZWVzdGFuZGluZywgYW5kIC1XbWFpbi4KKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBMaWtld2lzZS4KKwkqIGMtdHJlZS5oICh3YXJuX21haW4sIGZsYWdfaG9zdGVkKTogTmV3IHZhcmlhYmxlcy4KKworU3VuIEphbiAxOSAxNDozNTo0MSAxOTk3ICBBbGV4IEdhcnRod2FpdGUgIChhbGV4QHNhbXdpc2UuY2lzLnVwZW5uLmVkdSkKKworCSogZml4aW5jLnN2cjQ6IEZpeCBwcm9ibGVtcyB3aXRoIHN5bWxpbmtzIHRvICIuIi4KKworU3VuIEphbiAxOSAxNDoyMTo0NiAxOTk3ICBDcmFpZyBCdXJsZXkgIDxidXJsZXlAZ251LmFpLm1pdC5lZHU+CisKKwkqIGxvb3AuYyAoY2hlY2tfZmluYWxfdmFsdWUpOiBIYW5kbGUgaW5zbnMgd2l0aCBubyBsdWlkJ3MuCisKK1N1biBKYW4gMTkgMDg6NTc6MjYgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEubWQgKGFyZ19ob21lKTogQWRkIENMT0JCRVIgb2YgTUVNIGFuZCBVU0Ugb2YgYXJnIHJlZ3MuCisJKiB2bXMuaCAoU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6IERlbGV0ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbi4KKworCSogdG9wbGV2LmMgKHNldF9mbG9hdF9oYW5kbGVyKTogU2V0IHVwIHNpZ25hbCBjYXRjaGVyIG9uIGZpcnN0IGNhbGwKKwlpbiBjYXNlIGEgZnJvbnQgZW5kIGhhcyBkaXNhYmxlZCBpdC4KKworCSogY2NjcC5jLCBjZXhwLnk6ICNkZWZpbmUgX19hdHRyaWJ1dGVfXyB0byBiZSBudWxsIGlmIAorCWNvbXBpbGluZyB3aXRoIEdDQyBvbGRlciB0aGFuIDIuNywgbm90IDIuNi4KKworCSogdG9wbGV2LmMgKG1haW4pOiBJZiBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgdXNlZCBhbmQgc2V0CisJdG8gTk9fREVCVUcsIHNheSBkZWJ1Z2dpbmcgbm90IHN1cHBvcnRlZC4KKwkqIG1pcHMvc25pLXN2cjQuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogVW5kZWZpbmUuCisKKwkqIGkzODYveG0tY3lnd2luMzIuaCAoRElSX1NFUEFSQVRPUik6IERlZmluZS4KKworCSogZXhwbG93LmMgKGNvbnZlcnRfbWVtb3J5X2FkZHJlc3MsIGNhc2UgU1lNQk9MX1JFRik6CisJQ29weSBDT05TVEFOVF9QT09MX0FERFJFU1NfUC4KKwkqIGludGVncmF0ZS5jIChzYXZlX2NvbnN0YW50cyk6IE1ha2UgKGFkZHJlc3MgKGNvbnN0IC4uKSkgdG8gcmVjb3JkCisJYm90aCBtb2Rlcy4KKwkoY29weV9mb3JfaW5saW5lLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgcmVzdG9yZV9jb25zdGFudHMpOiBVc2UKKwlib3RoIG1vZGVzIHdoZW4gcmVzdG9yaW5nIGNvbnN0YW50IHBvb2wgZW50cnkgZm9yIEFERFJFU1MuCisKKwkqIGFscGhhLmggKE1JTklNVU1fQVRPTUlDX0FMSUdOTUVOVCk6IE5ldyBtYWNyby4KKworCSogZnVuY3Rpb24uYyAoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEsIGNhc2UgVVNFLCBjYXNlIENMT0JCRVIpOgorCVByb3Blcmx5IGhhbmRsZSBjYXNlIG9mIHNoYXJlZCBNRU0gd2hvc2UgcmVwbGFjZW1lbnQgaXMgbm90IHZhbGlkLgorCitTYXQgSmFuIDE4IDE0OjA4OjMxIDE5OTcgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuYyAoZ2V0X3Vud2lkZW5lZCk6IERvbid0IGNyYXNoIGlmIEZJRUxEX0RFQ0wgbm90IGxheWVkIG91dC4KKworCSogdmFyYXNtLmMgKGNvbnN0X2hhc2gpOiBUcmVhdCBOT05fTFZBTFVFX0VYUFIgbGlrZSBDT05WRVJUX0VYUFIuCisJKGNvbXBhcmVfY29uc3RhbnRfMSwgY29weV9jb25zdGFudCwgYmNfYXNzZW1ibGVfaW50ZWdlcik6IExpa2V3aXNlLgorCShjb25zdF9oYXNoLCBjb21wYXJlX2NvbnN0YW50XzEpOiBVc2Ugc3dpdGNoLCBub3QgaWYtdGhlbi1lbHNlLgorCitGcmkgSmFuIDE3IDE3OjEwOjIwIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbWlwcy5oIChTVEFDS19QT0lOVEVSX09GRlNFVCk6IERvbid0IGRlZmluZS4KKworVGh1IEphbiAxNiAxNDo1MTowMyAxOTk3ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KKworCSogY3BsdXMtZGVtLmM6IEZpeCBpbmRlbnRpbmc7IG5vdGUgdGhhdCB0aGlzIGZpbGUgYWxzbyBsaXZlcyBpbgorCWxpYmliZXJ0eS4KKwkoZG9fdHlwZSwgY2FzZSAnTScpOiBDaGVjayBmb3IgYSB0ZW1wbGF0ZSBhcyB3ZWxsIGFzIGEgY2xhc3MuCisKK1RodSBKYW4gMTYgMTU6MDg6MjYgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiBnY2MuYyAoY3Jvc3NfY29tcGlsZSk6IENoYW5nZSB0byBiZSBhIGNoYXIgKiBsaWtlIGFsbCBvZiB0aGUKKwlvdGhlciBzcGVjcy4KKwkocHJvY2Vzc19jb21tYW5kKTogQ2hhbmdlIGhvdyBjcm9zc19jb21waWxlIGlzIHRlc3RlZC4KKwkobWFpbik6IExpa2V3aXNlLgorCShzdHJ1Y3Qgc3BlY19saXN0KTogTWVyZ2Ugd2l0aCB0aGUgZm9ybWF0IHVzZWQgYnkgRVhUUkFfU1BFQ1MuCisJQWRkIG5hbWUgbGVuZ3RoIGZpZWxkIHRvIHNwZWVkIHVwIHJlcGVhdGVkIGNhbGxzIHRvIHN0cmNtcC4gIEFkZAorCWZsYWcgdG8gc2F5IHNwZWMgd2FzIGFsbG9jYXRlZC4gIEFkZCBwb2ludGVyIHRvIGNoYXIgKiBzbyB0aGF0CisJc3RhdGljIHNwZWMgZmllbGRzIGNhbiBiZSB1cGRhdGVkLgorCShleHRyYV9zcGVjcyk6IFVzZSBzdHJ1Y3Qgc3BlY19saXN0IGFzIHR5cGUuCisJKHN0YXRpY19zcGVjcyk6IFN0YXRpYyBsaXN0IG9mIHByZWRlZmluZWQgc3BlY3MuCisJKGluaXRfc3BlY3MpOiBOZXcgZnVuY3Rpb24sIGluaXRpYWxpemUgdGhlIHNwZWNzIGxpc3QuICBMaW5rIGluCisJdGhlIGRlZmF1bHQgc3BlY3MgYW5kIGFueSBzcGVjcyBkZWZpbmVkIHZpYSBFWFRSQV9TUEVDUy4KKwkoc2V0X3NwZWMpOiBObyBsb25nZXIgc3BlY2lhbCBjYXNlIHByZWRlZmluZWQgc3BlY3MuCisJKHByb2Nlc3NfY29tbWFuZCx2YWxpZGF0ZV9hbGxfc3dpdGNoZXMpOiBEaXR0by4KKwkocHJvY2Vzc19jb21tYW5kKTogQ2FsbCBpbml0X3NwZWNzIGZvciAtZHVtcHNwZWNzLgorCShkb19zcGVjXzEpOiBVc2UgbmFtZSBsZW5ndGggZmllbGQgdG8gYXZvaWQgY2FsbGluZyBzdHJuY21wIHdoZW4KKwlpdCBpcyBnb2luZyB0byBmYWlsLgorCShtYWluKTogQ2FsbCBpbml0X3NwZWMuICBEb24ndCBoYW5kbGUgRVhUUkFfU1BFQ1MgaGVyZS4KKworVGh1IEphbiAxNiAxNzowNzo1NCAxOTk3ICBFZGRpZSBDLiBEb3N0ICA8ZWNkQHNreW5ldC5iZT4KKworCSogY29uZmlndXJlOiBBZGQgc3BhcmMtbGludXh7LGFvdXR9IHN1cHBvcnQuCisJKiBnaW5jbHVkZS92YS1zcGFyYy5oOiBMaWtld2lzZS4KKwkqIHNwYXJjL2xpbnV4Lmg6IE5ldyBmaWxlLgorCSogc3BhcmMvbGludXgtYW91dC5oOiBOZXcgZmlsZS4KKwkqIHNwYXJjL3htLWxpbnV4Lmg6IE5ldyBmaWxlLgorCitUaHUgSmFuIDE2IDE2OjE5OjEzIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChzcGFyYy0qLWFvdXQqKTogQWRkIGxpYmdsb3NzLmggdG8gdG1fZmlsZS4KKwkoc3BhcmNsaXRlLSotY29mZiopOiBDaGFuZ2UgIj0gdG8gPSIuCisKK1RodSBKYW4gMTYgMTI6NTM6MTUgQ1NUIDE5OTcgIEpvZWwgU2hlcnJpbGwgPGpvZWxAT0FSY29ycC5jb20+CisKKwkqIHJzNjAwMC9ydGVtcy5oOiBDaGFuZ2UgZnJvbSBiZWluZyBzeXN2NCBiYXNlZCB0byBiZWluZyBlYWJpIGJhc2VkLgorCitUaHUgSmFuIDE2IDEzOjQwOjUxIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy5oIChMSU5LRVJfRU5ESUFOX1NQRUMpOiBEZWZpbmUuCisJKExJTktfU1BFQyk6IEFkZCBsaW5rZXJfZW5kaWFuX3NwZWMuCisJKEVYVFJBX1NQRUNTKTogQWRkIGxpbmtlcl9lbmRpYW5fc3BlYy4KKworVGh1IEphbiAxNiAwODowMjoxMyAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAubWQgKGJDQywgaW52ZXJ0ZWQgYkNDKTogVXNlIGJDQyAuK1ggaW5zdGVhZCBvZiBiQ0MgMGYuCisKK1dlZCBKYW4gMTUgMTQ6MDY6MjggMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQuaCAocmVsb2FkX2FkZHJlc3NfYmFzZV9yZWdfY2xhc3MpOiBEZWNsYXJlLgorCShyZWxvYWRfYWRkcmVzc19pbmRleF9yZWdfY2xhc3MpOiBEZWNsYXJlLgorCSogcmVsb2FkMS5jIChyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcyk6IERlZmluZS4KKwkocmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzKTogRGVmaW5lLgorCShpbml0X3JlbG9hZCk6IEluaXRpYWxpemUgcmVsb2FkX2FkZHJlc3Nfe2Jhc2UsaW5kZXh9X3JlZ19jbGFzcy4KKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFVzZQorCXJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzIHJhdGhlciB0aGFuIEJBU0VfUkVHX0NMQVNTLiAgVXNlCisJcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzIHJhdGhlciB0aGFuIElOREVYX1JFR19DTEFTUy4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IExpa2V3aXNlLgorCitUdWUgSmFuIDE0IDE1OjI2OjMzIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogcmVsb2FkLmMgKFJFR05PX01PREVfT0tfRk9SX0JBU0VfUCk6IERlZmluZSBpZiBub3QgZGVmaW5lZC4KKwkoUkVHX01PREVfT0tfRk9SX0JBU0VfUCk6IERlZmluZSBpZiBub3QgZGVmaW5lZC4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBVc2UgUkVHW05PXV9NT0RFX09LX0ZPUl9CQVNFX1AgcmF0aGVyIHRoYW4KKwlSRUdbTk9dX09LX0ZPUl9CQVNFX1AuCisJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBMaWtld2lzZS4KKwlBZGQgbW9kZSBwYXJhbWV0ZXI7IGNoYW5nZSBhbGwgY2FsbGVycy4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogSGFuZGxlIG1vcmUgY2FzZXMgd2hlbgorCWVsaW1pbmF0aW5nIHRoZSBmcmFtZSBwb2ludGVyIHRvIHRoZSBoYXJkIGZyYW1lIHBvaW50ZXIuCisKKwkqIHZhcmFzbS5jIChmb3JjZV9jb25zdF9tZW0pOiBDb3B5IGEgQ09OU1RfSU5UIHJ0eCBsaWtlIGEgQ09OU1QgcnR4LgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZW5kX2Z1bmN0aW9uKTogQ2FsbAorCW91dHB1dF9hZnRlcl9mdW5jdGlvbl9jb25zdGFudHMuCisJKGFmdGVyX2Z1bmN0aW9uX2NvbnN0YW50cyk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCisJKG91dHB1dF9hZnRlcl9mdW5jdGlvbl9jb25zdGFudHMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgorCShvdXRwdXRfY29uc3RhbnRfZGVmKTogQ2hlY2sgQ09OU1RBTlRfQUZURVJfRlVOQ1RJT05fUC4KKworTW9uIEphbiAxMyAxNjo0NDo0MCAxOTk3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwL2FpeDQxLmggKENQUF9QUkVERUZJTkVTKTogQWRkIC1EX0FJWDQxLgorCitTdW4gSmFuIDEyIDIwOjU0OjAxIDE5OTcgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbGliZ2xvc3MuaCAoTElOS19TUEVDKTogRGVsZXRlLgorCShTVEFSVEZJTEVfU1BFQyk6IERlbGV0ZSBzcHVyaW91cyBuZXdsaW5lLgorCitTYXQgSmFuIDExIDAwOjEzOjAzIDE5OTcgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBxdWlldC5tYXRlbWF0aWsuc3Uuc2U+CisKKwkqIG1pcHMubWQgKG5vcnNpMywgbm9yZGkzKTogVXNlIGNhbm9uaWNhbCBSVEwuICBQcmVwZW5kIGAqJyB0byBwYXR0ZXJuCisJbmFtZS4gIERvbid0IG1hdGNoIGltbWVkaWF0ZXMuCisJKG5vcnNpM19jb25zdCwgbm9yZGkzX2NvbnN0KTogTmV3IHBhdHRlcm5zLgorCShhbmRkaTMsIGlvcmRpMywgeG9yZGkzKTogVGVzdCBUQVJHRVRfNjRCSVQsIG5vdCBtaXBzX2lzYQorCWluIGxlbmd0aCBhdHRyaWJ1dGUgY2FsY3VsYXRpb24uCisJKiBtaXBzLmMgKGNvbXBsZW1lbnRlZF9hcml0aF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShwcmludF9vcGVyYW5kKTogSGFuZGxlIGBlJyBmb3IgQ09OU1RfSU5ULgorCSogbWlwcy5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgY29tcGxlbWVudGVkX2FyaXRoX29wZXJhbmQuCisJCitGcmkgSmFuIDEwIDE0OjExOjUzIDE5OTcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAvYWl4NDEuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIHRocmVhZHMgYW5kIHBlLgorCShDUFBfU1BFQyk6IEFkZCBtcGUgYW5kIG10aHJlYWRzIGNhc2VzLgorCShMSUJfU1BFQyk6IEFkZCBtcGUgYW5kIG10aHJlYWRzIGNhc2VzIHRvIHZhcmlhbnQgZnJvbSByczYwMDAuaC4KKwkoU1RBUlRGSUxFX1NQRUMpOiBBZGQgbXBlIGFuZCBtdGhyZWFkcyBzdXBwb3J0LgorCitGcmkgSmFuIDEwIDA3OjEyOjI2IDE5OTcgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGkzODYvY3lnd2luMzIuaCAoTElOS19TUEVDKTogTmV3IGRlZmluaXRpb24uCisKKwkqIE1ha2VmaWxlLmluIChGTEFHU19UT19QQVNTKTogQWRkIFNUQUdFX1BSRUZJWCwgc2V0IGJ5IGNvbmZpZ3VyZS4KKwkqIGNvbmZpZ3VyZTogSW5pdGlhbGl6ZSBleGVleHQuCisJVXBkYXRlIFNUQUdFX1BSRUZJWCBpbiBNYWtlZmlsZS4KKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfbGluZSk6IFB1c2ggdG8gTElORV9TRUNUSU9OIGFmdGVyIGNhbGxpbmcKKwlsb29rdXBfZmlsZW5hbWUuCisKK1RodSBKYW4gOSAxMjowNjowNCAxOTk3ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKyAgICAgICAgKiBpMzg2Lm1kIChhZGRzaWRpM18yKTogQWRkICYgdG8gb3BlcmFuZCAwIG9mIGFsdGVybmF0aXZlIDUuCisKK1RodSBKYW4gOSAxMjowNjowNCAxOTk3ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworICAgICAgICBGcm9tIExpbnVzIFRvcnZhbGRzIGFuZCBNYXQgSG9zdGV0dGVyOgorCSogaTM4Ni5jIChpMzg2X3NleHQxNl9pZl9jb25zdCk6IEFkZGVkIHRvIHNpZ24gZXh0ZW5kIGFuIEhJbW9kZSBjb25zdGFudC4KKwkoaTM4Nl9hbGlnbmVkX3JlZ19wKTogQWRkZWQgdG8gdGVsbCBpZiBhbiBydHggaXMgYWxpZ25lZC4KKwkoaTM4Nl9jY19wcm9iYWJseV91c2VsZXNzX3ApOiBEb24ndCB0cnVzdCBjYyBiaXRzLgorCSogaTM4Ni5oIChUQVJHRVRfWkVST19FWFRFTkRfV0lUSF9BTkQpOiBEb24ndCBkbyB0aGlzIGZvciBwNi4KKwkqIGkzODYubWQgKGNtcHNmX2NjZnBlcSsyKTogVXNlIFNJbW9kZSB0ZXN0IGluc3RydWN0aW9uLgorCShtb3ZoaSsxKTogVXNlIG1vdnogaW5zdGVhZCBvZiBtb3Ygb24gcDYuCisJKGFkZHNpMyk6IEFkZCAxMjggYnkgc3VidHJhY3RpbmcgLTEyOC4KKwkoemVyb19leHRlbmRoaXNpMik6IFVzZSBTSW1vZGUgbW92ZSBpZiBhbGlnbmVkLgorCShhZGRoaTMpOiBMaWtld2lzZS4KKwkoc3ViaGkzKTogTGlrZXdpc2UuCisJKGFuZGhpMyk6IExpa2V3aXNlLgorCShpb3JoaTMpOiBMaWtld2lzZS4KKwkoeG9yaGkzKTogTGlrZXdpc2UuCisKK1R1ZSBKYW4gIDcgMTY6NTg6MjcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBjLXBhcnNlLmluIChleHRlbnNpb24pOiBOZXcgcnVsZSBmb3IgX19leHRlbnNpb25fXy4KKwkoZXh0ZGVmLCB1bmFyeV9leHByLCBkZWNsLCBjb21wb25lbnRfZGVjbCk6IFVzZSBpdC4KKworTW9uIEphbiAgNiAxNTo0NDozNyAxOTk3ICBPbGl2ZXIgS2VsbG9nZyAgKG9saXZlci5rZWxsb2dnQHNwYWNlLm90bi5kYXNhLmRlKQorCisJKiAxNzUwYS5jOiBOb3cgaW5jbHVkZXMgcmVncy5oLgorCSh7bW92Y250LG1vZH1fcmVnbm9fYWRqdXN0KTogQ29ycmVjdGVkIHR5cG9zLgorCSogMTc1MGEubWQgKG1vdmhpKTogQ29ycmVjdGVkIGNhc2Ugb2YgbW92aW5nIGNvbnN0YW50IHRvIG1lbW9yeS4KKworTW9uIEphbiAgNiAwODowMDo1NyAxOTk3ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtaXBzLmg6IERlbGV0ZSByZWR1bmRhbnQgZGVmaW5pdGlvbnMgb2YgY29tcGlsZXIgYW5kIGxpYnJhcnkgZm5zLgorCisJKiBkd2FyZm91dC5jICh0eXBlX2F0dHJpYnV0ZSk6IElnbm9yZSBhbnkgc3VidHlwZSBmb3Igbm93LgorCisJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IFJld29yayB0byBjb25zaWRlciB0d28KKwlleHByZXNzaW9ucyB0aGF0IGhhdmUgZW1iZWRkZWQgaWRlbnRpY2FsIFNBVkVfRVhQUnMgYXMKKwllcXVpdmFsZW50OyBhbHNvIGhhbmRsZSBzb21lIG1vcmUgY2FzZXMuCisKK1N1biBKYW4gIDUgMjM6NTQ6MzQgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5tZCAocGljX2xvYWRfbGFiZWwpOiBGaXggdGVzdCBmb3IgdXNpbmcganVzdCBhbgorCWxkbyByYXRoZXIgdGhhbiBhbiBhZGRpbDtsZG8gc2VxdWVuY2UgdG8gbG9hZCB0aGUgbGFiZWwncworCWFkZHJlc3MuCisKK1N1biBKYW4gIDUgMDc6MjY6NDcgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogRml4IGVycm9yIGluIGxhc3QKKwljaGFuZ2U6IGRvbid0IHN1cHByZXNzIGNvbnZlcnNpb24gaWYganVzdCBFWFBBTkRfU1VNLgorCitTYXQgSmFuICA0IDE4OjQ0OjAxIDE5OTcgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IHNhdmVkX2luc25zLmkgaXMgSE9TVF9XSURFX0lOVC4KKworCSogZm9sZC1jb25zdC5jIChjb25zdF9iaW5vcCk6IFJld29yayB0byBvbmx5IG1ha2UgY29uc3RhbnRzIGluCisJb25lIHBsYWNlOyBhbHdheXMgdXNlIHNpemVfaW50IGlmIHNtYWxsIGVub3VnaCBhbmQgb2Ygc2l6ZXR5cGUuCisJKHNpemVfaW50KTogQ2FsbCBmb3JjZV9maXRfdHlwZS4KKwkoZm9sZCk6IEF2b2lkIGV2ZXIgY2hhbmdpbmcgdHlwZSBvZiBpbnB1dCB0cmVlLgorCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBGaXggdHlwZSBlcnJvci4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IERvbid0IGNvbnZlcnQgaWYgbW9kaWZpZXIKKwlpcyBFWFBBTkRfQ09OU1RfQUREUkVTUywgRVhQQU5EX1NVTSwgb3IgRVhQQU5EX0lOSVRJQUxJWkVSLgorCSogdHJlZS5jIChzdGF0aWNwLCBjYXNlIENPTVBPTkVOVF9SRUYsIEJJVF9GSUVMRF9SRUYpOiBOb3QKKwlzdGF0aWMgaWYgYml0ZmllbGQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6ICBJZiB0YWtpbmcgdmFsdWUKKwlmcm9tIGEgQ09OU1RSVUNUT1IsIG11c3QgbWFzay9zaWduLWV4dGVuZCBpZiBiaXRmaWVsZC4KKwkoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fTE9OR0pNUCk6IFBhc3MgdHlwZSwgbm90IElERU5USUZJRVIsCisJdG8gc2Vjb25kIGFyZyBvZiBSRVRVUk5fUE9QU19BUkdTLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IEFkZCBhZGRpdGlvbmFsIGNhc2VzCisJdG8gInNpbmdsZXRvbiIgY2FzZXMuCisJKiB0cmVlLmMgKGludGVnZXJfcG93Mik6IE1hc2sgdmFsdWUgdG8gd2lkdGggb2YgdHlwZS4KKwkodHJlZV9sb2cyKTogTmV3IGZ1bmN0aW9uLgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogSWYgbm90IFNMT1dfVU5BTElHTkVEX0FDQ0VTUywKKwl0cmVhdCBldmVyeXRoaW5nIGFzIG1heGltYWxseSBhbGlnbmVkLgorCisJKiBjb21iaW5lLmMgKGZpbmRfc3BsaXRfcG9pbnQsIGNhc2UgU0VUKTogSWYgU0VUX1NSQyBpcyBORSBhbmQKKwlTVE9SRV9GTEFHX1ZBTFVFIGlzIC0xLCBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgaW50byBORUcgb2Ygc2hpZnQuCisJKGZvcmNlX3RvX21vZGUsIGNhc2UgTkUpOiBNYWtlIGNvbmRpdGlvbiBzdHJpY3Rlci4KKworCSogY2FsbHMuYyAoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBSZW1vdmUgcmVkdW5kYW50IGNoZWNrIGZvcgorCW91dG1vZGUgIT0gVk9JRG1vZGUuCisKK1NhdCBKYW4gIDQgMDg6MTI6MTYgMTk5NyAgSi5ULiBDb25rbGluICA8anRjQHJoaW5vLmN5Z251cy5jb20+CisKKwkqIE9wdGltaXphdGlvbnMgZnJvbSBKb2huIFZpY2tlcnMgKGpvaG5AcmhpemlrLmRlbW9uLmNvLnVrKToKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3twcm8sZXBpfWxvZ3VlKTogVXNlIGFkZHEvc3VicSB3aGVuCisJYWRqdXN0aW5nIHN0YWNrIHBvaW50ZXIgYnkgc21hbGwgZGlzcGxhY2VtZW50cy4KKwkqIG02OGsubWQgKGFkZHNpMywgYWRkaGkzKTogVXNlIHR3byBhZGRxdyAob3Igc3VicXcpIGluc25zIHdoZW4KKwlhZGRpbmcgKG9yIHN1YnRyYWN0aW5nKSBzbWFsbCBpbnRlZ2VyIGNvbnN0YW50cyAoOCA8IE4gPD0gMTYpIHRvCisJYm90aCBhZGRyZXNzIGFuZCBkYXRhIHJlZ2lzdGVycy4KKworU2F0IEphbiAgNCAwNzowNjowNyAxOTk3ICBLYW1pbCBJc2tyYSAgPGlza3JhQHN0dWRlbnQudWNpLmFnaC5lZHUucGw+CisKKwkqIGxvb3AuYyAoYmFzaWNfaW5kdWN0aW9uX3Zhcik6IFJldHVybiAwIGlmIFNVQlJFRyBpcyBub3QgYQorCXByb21vdGVkIHZhcmlhYmxlLgorCitTYXQgSmFuICA0IDA2OjIyOjM2IDE5OTcgIERvdWcgUnVwcCAgKHJ1cHBAZ25hdC5jb20pCisKKwkqIGFscGhhLmMgKHZtc2tydW5jaCk6IFRyeSB0byBub3QgY2hvcCB0cmFpbGluZyB1cHBlcmNhc2UgbGV0dGVycy4KKwkqIGFscGhhL3Ztcy5oIChFTkRGSUxFX1NQRUMpOiBVc2UgImdudSIsIG5vdCAiZ251X2NjIi4KKworCSogY2NjcC5jIChQUklOVEZfUFJPVE8pOiBVc2UgX19wcmludGZfXyBpbiBfX2F0dHJpYnV0ZV9fLCBub3QgcHJpbnRmLgorCSogY2V4cC55IChQUklOVEZfUFJPVE8pOiBMaWtld2lzZS4KKworRnJpIEphbiAgMyAwOTowMTowMCAxOTk3ICBDcmFpZyBCdXJsZXkgIDxidXJsZXlAZ251LmFpLm1pdC5lZHU+CisKKwkqIGFscGhhLm1kIChjbW92KTogRml4IG9wZXJhbmQgbnVtYmVycyBpbiBjYXNlIGludm9sdmluZyBERiB0YXJnZXQsCisJREYgY29tcGFyaXNvbiwgYW5kIFNGIHNvdXJjZS4KKworRnJpIEphbiAgMyAwODoxOTo0NiAxOTk3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY3BwbGliLmMgKG1hY3JvZXhwYW5kKTogRGVsZXRlIGFueSBuby1yZWV4cGFuc2lvbiBtYXJrZXIgZm9sbG93aW5nCisJaWRlbnRpZmllciBhdCBiZWdpbm5pbmcgb2YgYW4gYXJndSBjb25jYXRlbmF0ZWQgd2l0aCB3aGF0IHByZWNlZGVzIGl0LgorCitGcmkgSmFuICAzIDA3OjU5OjIxIDE5OTcgIEtlbiBSb3NlICAocm9zZUBuZXRjb20uY29tKQorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogU2tpcCBtb3ZlZCBpbnNuIGluIGFsbCB0aHJlZSBjYXNlcy4KKworRnJpIEphbiAgMyAwNzo1MTo0NCAxOTk3ICBCb2IgTWFuc29uICA8bWFuc29uQGN5Z251cy5jb20+CisKKwkqIGZ1bmN0aW9uLmMgKHtwdXNoLHBvcH1fZnVuY3Rpb25fY29udGV4dF90byk6IFNhdmUgYW5kIHJlc3RvcmUKKwljdXJyZW50X2Z1bmN0aW9uX2FyZ3NfaW5mby4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBmaWVsZCBhcmdzX2luZm8uCisKK0ZyaSBKYW4gIDMgMDY6NTU6MDkgMTk5NyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChydHhfZXF1YWxfZm9yX3RocmVhZF9wKTogUmV0dXJuIDAgZm9yIGZsb2F0aW5nLXBvaW50LgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWYgcmVwbGFjZWQgYSBQTFVTIG9yIE1VTFQgd2l0aCBhCisJc2ltcGxlIG9wZXJhbmQsIHN0YXJ0IG92ZXIgYWdhaW4uCisKKwkqIHZhLWFscGhhLmg6IENoZWNrIGZvciBfX1ZNU19fLCBub3QgVk1TLgorCitUaHUgSmFuICAyIDA4OjUyOjUxIDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGNvbmZpZ3VyZTogRmluaXNoIHJlc3RvcmluZyBjaGFuZ2Ugb2YgZGVmYXVsdCBvZiBvYmpjIHRocmVhZHMgdG8KKyAJInNpbmdsZSIgZm9yIExpbnV4LgorCitNb24gRGVjIDMwIDE3OjAzOjQ2IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuYyAoZm1weV9vcGVyYW5kcyk6IFJlbW92ZS4gIE5vIGxvbmdlciBuZWVkZWQuCisJKGNvbWJpbmFibGVfYWRkLCBjb21iaW5hYmxlX2NvcHksIGNvbWJpbmFibGVfZm1weSk6IExpa2V3aXNlLgorCShjb21iaW5hYmxlX2ZhZGQsIGNvbWJpbmVhYmxlX2ZzdWIpOiBMaWtld2lzZS4KKwkocGFfcmVvcmcpOiBDYWxsIHBhX2NvbWJpbmVfaW5zdHJ1Y3Rpb25zLgorCShwYV9jb21iaW5lX2luc3RydWN0aW9ucyk6IENvbWJpbmUgaW5zdHJ1Y3Rpb25zIHRvIG1ha2UgdGhpbmdzCisJbGlrZSBmbXB5YWRkIGFuZCBmbXB5c3ViLgorCShwYV9jYW5fY29tYmluZV9wKTogSGVscGVyIGZ1bmN0aW9uIGZvciBwYV9jb21iaW5lX2luc3RydWN0aW9ucy4KKwkqIHBhLm1kIChwYV9jb21iaW5lX3R5cGUpOiBOZXcgYXR0cmlidXRlLiAgU2V0IGl0IGFwcHJvcHJpYXRlbHkKKwlmb3IgdmFyaW91cyBpbnNucy4KKwkoZGVmaW5lX2RlbGF5cyk6IFVzZSBhIHNlcGFyYXRlIGRlZmluZV9kZWxheSBmb3IgdW5jb25kaXRpb25hbAorCWJyYW5jaGVzLgorCShmbXB5YWRkLCBmbXB5c3ViIHBlZXBob2xlcyk6IFJlbW92ZSwgbm8gbG9uZ2VyIG5lZWRlZC4KKwkoZm1weWFkZCwgZm1weXN1YiBpbnNucyk6IEFkZCB2YXJpYW50IHdpdGggZmFkZC9mc3ViIGZpcnN0LAorCXRoZW4gdGhlIGZtcHkuCisKK01vbiBEZWMgMzAgMTQ6NDM6NTEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiByZWctc3RhY2suYyAoc3Vic3Rfc3RhY2tfcmVnc19wYXQpOiBTZXQgc3JjX25vdGUgZXhwbGljaXRseSwgaW5zdGVhZAorCW9mIHVzaW5nIGludmFsaWQgYWdncmVnYXRlIGluaXRpYWxpemF0aW9uLgorCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBEb24ndCB0cnkgdG8gcHJpbnQgbm9uZXhpc3RlbnQKKwlUWVBFX0FUVFJJQlVURVMgZmllbGQgb2YgYSBkZWNsIG5vZGUuCisKKzE5OTYtMTItMzAgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAZXRoYW5vbC5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnLnN1YjogSGFuZGxlIGhpdXhtcHAgYXMgc3lzdGVtIHR5cGUuCisKK1RodSBEZWMgMjYgMTM6MzM6MjcgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAubWQgKGluaXRfdjRfcGljKTogRXhwbGljaXRseSBzZXQgdGhlIGxlbmd0aC4KKworTW9uIERlYyAyMyAxOTozOTozOCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMuaCAoRlVOQ1RJT05fQVJHX1JFR05PX1ApOiBDb3JyZWN0IGZvciBUQVJHRVRfU09GVF9GTE9BVCBhbmQKKwlUQVJHRVRfRkxPQVQ2NCBjYXNlcy4KKworCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IFJlamVjdCBmdW5jdGlvbiB3aXRoCisJUEFSQUxMRUwgcmVzdWx0LgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWJvcnQgaWYgZnVuY3Rpb24gcmVzdWx0IG5vdCBoYW5kbGVkLgorCitTYXQgRGVjIDIxIDA0OjAyOjQ2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBnZXJiaWwuY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChzYXZlX3Jlc3RvcmVfaW5zbnMpOiBNYXJrIGxhcmdlIGZyYW1lIHNldHVwIGluc25zCisJYXMgZnJhbWUtcmVsYXRlZC4KKwkobWlwc19leHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4KKworCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IFN1cHBvcnQgTUlQUyBsYXJnZSBmcmFtZXMuCisJKGFkZF9ib3VuZF9pbmZvKTogVXNlIGRlZmF1bHQgbG93ZXIgYm91bmRzLgorCUhhbmRsZSBzaW1wbGUgdmFyaWFibGUgYm91bmRzIHdpdGggYSBESUUgcmVmLgorCURvbid0IGdlbmVyYXRlIGEgTlVMTCBsb2MgZGVzY3IuCisJKGFkZF9zdWJzY3JpcHRfaW5mbyk6IEFsd2F5cyBhZGQgbG93ZXIgYm91bmQuCisJKGdlbl9mb3JtYWxfcGFyYW1ldGVyX2RpZSk6IEFsd2F5cyBlcXVhdGVfZGVjbF9udW1iZXJfdG9fZGllLgorCShnZW5fdmFyaWFibGVfZGllKTogTGlrZXdpc2UuICBEb24ndCB1c2UgdGhlIG9sZCBkaWUgZm9yIGF1dG9tYXRpYworCXZhcmlhYmxlcy4KKworV2VkIERlYyAxOCAxMDoyMzo0NiAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIG1uMTAzMDAuYyAobm90aWNlX3VwZGF0ZV9jYyk6IEVuYWJsZSB0aGlzIGNvZGUuCisJKiBtbjEwMzAwLmggKENDX09WRVJGTE9XX1VOVVNBQkxFKTogRGVmaW5lLgorCSogbW4xMDMwMC5tZCAodHN0c2kpOiBVc2UgInNldF96bl9jMCIgaW5zdGVhZCBvZiAic2V0IiBmb3IgY2Mgc3RhdHVzLgorCShhZGRzaTMgcGF0dGVybik6IEJyZWFrICJpbmMiIGludG8gdHdvIGRpZmZlcmVudCBhbHRlcm5hdGl2ZXMKKwlzaW5jZSAiaW5jIGRuIiBzZXRzIGNjMCwgYnV0ICJpbmMgYW4iIGRvZXMgbm90LgorCShtdWx0aXBseSBhbmQgZGl2aWRlIHBhdHRlcm5zKTogRml4IGNjIHN0YXR1cy4KKwkoYkNDLCBpbnZlcnRlZCBiQ0MpOiBSZXN0b3JlIGFueSBjb21wYXJpc29uIHdoaWNoIG5lZWRzIHRoZQorCW92ZXJmbG93IGJpdHMgd2hlbiBDQ19PVkVSRkxPV19VTlVTQUJMRSBpcyBzZXQuCisJKHplcm8gYW5kIHNpZ24gZXh0ZW5zaW9ucyk6IEZpeCBjYyBzdGF0dXMuCisJKG1vdm1fc3RvcmUpOiBMaWtld2lzZS4KKworVHVlIERlYyAxNyAxNTowMjo0NCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBXaGVuIGFkZCBSRUdfREVBRCBub3RlcyBmb3IgZGVzdCBvZgorCWxhc3QgaW5zbiwgYWRkIGNoZWNrIGZvciBnbG9iYWxfcmVncy4KKworVHVlIERlYyAxNyAxMTowNzoyNiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC93aW4tbnQuaCAoSEFTX0lOSVRfU0VDVElPTik6IERlbGV0ZSwgc28gdGhhdCBfX21haW4gaXMKKwljYWxsZWQgZnJvbSBtYWluLgorCitNb24gRGVjIDE2IDE1OjI4OjQ0IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogY29tYmluZS5jIChub256ZXJvX2JpdHMpOiBJZmRlZiBvdXQgY2FsbHMgdG8gbnVtX3NpZ25fYml0X2NvcGllcy4KKwlBZGQgZHVtbXkgZGVmaW5lL3VuZGVmIGZvciBudW1fc2lnbl9iaXRfY29waWVzLgorCisJKiBkd2FyZm91dC5jIChsb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUsIGNhc2UgQ09OQ0FUKTogQWRkLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBVc2UgbW9kZV93aWR0aCBhcyBzaGlmdCBjb3VudAorCW9ubHkgaWYgaXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCisKK01vbiBEZWMgMTYgMTA6MTA6MTEgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMzAwLmMgKGV4cGFuZF9lcGlsb2d1ZSk6IFJlc3RvcmUgcmVnaXN0ZXJzIGluIHRoZQorCSJyZXQiIGluc3RydWN0aW9uIGluc3RlYWQgb2YgYSBzZXBhcmF0ZSBtb3ZtIGluc3RydWN0aW9uLgorCVN1cHBvcnQgcG9zc2libGUgc3RhY2sgZGVhbGxvY2F0aW9uIGluICJyZXQiIGluc3RydWN0aW9uIHRvby4KKwkqIG1uMTAzMDAubWQgKHJldHVybl9pbnRlcm5hbCk6IFVzZSAicmV0IiBpbnN0ZWFkIG9mICJyZXRzIjsKKwlyZXN0b3JlIHJlZ2lzdGVycyBhbmQgZGVhbGxvY2F0ZSBzdGFjayBhcyBuZWVkZWQuCisJKGxvYWRfbW92bSk6IERlbGV0ZSB1bnVzZWQgcGF0dGVybi4KKworCSogbW4xMDMwMC5oIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogRGVmaW5lLgorCitGcmkgRGVjIDEzIDE0OjQ2OjU0IDE5OTYgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2gubWQgKGRlY3QpOiBSZXdyaXRlIHBhdHRlcm4gc28gdGhhdCBpdCBjYW4gYmUgY29tYmluZWQuCisKK0ZyaSBEZWMgMTMgMTM6MTQ6NTEgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBJZiBBU01fT1VUUFVUX1BPT0xfRVBJTE9HVUUgaXMKKwlkZWZpbmVkLCBjYWxsIGl0LgorCitUaHUgRGVjIDEyIDIwOjA0OjU1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogcnRsLmggKFJUWF9GUkFNRV9SRUxBVEVEX1ApOiBOZXcgbWFjcm8uCisJKHN0cnVjdCBydHhfZGVmKTogQWRkIGZyYW1lX3JlbGF0ZWQgYml0ZmllbGQuCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBDYWxsIGR3YXJmMm91dF9mcmFtZV9kZWJ1Zy4gIAorCURvbid0IGNhbGwgZHdhcmYyb3V0X2JlZ2luX2Z1bmN0aW9uLgorCShmaW5hbCk6IEluaXRpYWxpemUgZHdhcmYyb3V0X2ZyYW1lX2RlYnVnLgorCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9iZWdpbl9mdW5jdGlvbik6IFJlbW92ZS4KKwkoZHdhcmYyb3V0X2luaXQpOiBVc2UgSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYLgorCShEV0FSRl9DSUVfREFUQV9BTElHTk1FTlQpOiBHZW5lcmFsaXplLgorCShEV0FSRl9GUkFNRV9SRUdOVU0pOiBEb24ndCBhZGQgMS4KKwkoZGVjb2RlX2NmaV9ydGwpOiBMb3NlLgorCShkd2FyZjJvdXRfZGVmX2NmYSk6IE5vdyB0YWtlcyByZWcgYW5kIG9mZnNldCBkaXJlY3RseS4KKwkocmVnX3NhdmUpOiBMaWtld2lzZS4KKwkoZHdhcmYyb3V0X3JlZ19zYXZlKTogTm93IHRha2VzIG9mZnNldC4KKwkoaW5pdGlhbF9yZXR1cm5fc2F2ZSk6IEdyb2sgSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYLgorCVJlcGxhY2VzIGR3YXJmMm91dF9yZXR1cm5fc2F2ZS4KKwkoZHdhcmYyb3V0X2NmaV9sYWJlbCk6IE5ldyBmbi4KKwkoYWRkX2ZkZV9jZmkpOiBVc2UgaXQuCisJKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IE5ldyBmbi4KKwkqIG1pcHMuaCAoRFdBUkZfRlJBTUVfUkVHTlVNKTogVHdlYWsgcjMxLgorCShJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgpOiBEZWZpbmUuCisJKiBtaXBzLmMgKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogU2V0IFJUWF9GUkFNRV9SRUxBVEVEX1AgYXMgbmVlZGVkLgorCShzYXZlX3Jlc3RvcmVfaW5zbnMpOiBMaWtld2lzZS4KKwkqIGkzODYuYyAoaXg4Nl9leHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4KKwkqIGkzODYuaCAoSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYKTogRGVmaW5lLgorCShEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKTogRGVmaW5lLgorCisJKiBkd2FyZjJvdXQuYyAoYWRkX0FUX2xvbmdfbG9uZyk6IFJlbmFtZWQgZnJvbSBhZGRfQVRfZG91YmxlIGZvcgorCWNsYXJpdHkuCisJKHByaW50X2RpZSk6IEFkanVzdC4KKwkoYWRkX0FUX2Zsb2F0KTogTmV3IGZuLgorCShhZGRfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogU3VwcG9ydCBmcCB2YWx1ZXMuCisJKHNpemVfb2ZfZGllKTogVXNlIGJsb2NrcyBmb3IgbG9uZ19sb25nIGFuZCBmcCB2YWx1ZXMuCisJKHZhbHVlX2Zvcm1hdCk6IExpa2V3aXNlLgorCShvdXRwdXRfZGllKTogTGlrZXdpc2UuCisJKG91dHB1dF9sb2Nfb3BlcmFuZHMpOiBEb24ndCBzdXBwb3J0IERXX09QX2NvbnN0OD8uCisKK1RodSBEZWMgMTIgMTk6NDk6MDkgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiB2YXJhc20uYyAoQ09OU1RBTlRfUE9PTF9CRUZPUkVfRlVOQ1RJT04pOiBEZWZpbmUgaWYgbm90CisJZGVmaW5lZC4KKwkoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBDaGVjayBDT05TVEFOVF9QT09MX0JFRk9SRV9GVU5DVElPTgorCXRvIGRlY2lkZSB3aGV0aGVyIHRvIGNhbGwgb3V0cHV0X2NvbnN0YW50X3Bvb2wuCisJKGFzc2VtYmxlX2VuZF9mdW5jdGlvbik6IExpa2V3aXNlLgorCisJKiBjYWxscy5jOiBDaGVjayBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIGF0IHJ1biB0aW1lIGFzIHdlbGwgYXMgYXQKKwljb21waWxlIHRpbWUuCisJKiBjb21iaW5lLmMsIGNzZS5jLCBmdW5jdGlvbi5jLCBqdW1wLmMsIGxvY2FsLWFsbG9jLmM6IExpa2V3aXNlLgorCSogbG9vcC5jLCByZWxvYWQuYywgcmVsb2FkMS5jOiBMaWtld2lzZS4KKwkqIGRzcDE2eHguaCAoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IERlZmluZSB3aXRoIHZhbHVlLgorCSogaDgzMDAuaCAoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IExpa2V3aXNlLgorCSogaTM4Ni5oIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTGlrZXdpc2UuCisJKiBwZHAxMS5oIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTGlrZXdpc2UuCisJKiBzaC5oIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTGlrZXdpc2UuCisKK1RodSBEZWMgMTIgMTU6MjU6MzkgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAubWQgKHN5c3YgY2FsbCBpbnNucyk6IElmIGZsYWdfcGljIGFkZCBAcGx0IHN1ZmZpeC4KKworCSogcnM2MDAwLm1kIChmaXhfdHJ1bmNkZnNpMl9zdG9yZSk6IEZpeCBvZmZzZXRzID4gMzJrLgorCisJKiByczYwMDAvdC1wcGNjb21tOiBOZXcgZmlsZSBmb3IgY29tbW9uIHBhcnRzIG9mIGVtYmVkZGVkIGFuZAorCVN5c3RlbSBWIHRhcmdldCBNYWtlZmlsZSBzdXBwb3J0LgorCisJKiByczYwMDAvdC1wcGNvczogTmV3IGZpbGUgZm9yIFN5c3RlbSBWIE9TIHRhcmdldCBNYWtlZmlsZQorCXN1cHBvcnQuCisKKwkqIHJzNjAwMC90LXNvbGFyaXM6IERlbGV0ZSwgbWVyZ2UgaW50byByczYwMDAvdC1wcGNvcy4KKworCSogcnM2MDAwL3Qte3BwYyxwcGNnYXN9OiBPbmx5IGtlZXAgdGhlIG11bHRpbGliIHNwZWNpZmljIHBhcnRzLAorCW1vdmluZyB0aGUgcmVzdCB0byByczYwMDAvdC1wcGNjb21tLgorCisJKiBjb25maWd1cmUgKHBvd2VycGMqLSotKik6IEZvciBlbWJlZGRlZCBhbmQgU3lzdGVtIFYKKwljb25maWd1cmF0aW9ucywgYWRkIHJzNjAwMC90LXBwY2NvbW0uICBGb3IgTGludXggYW5kIFNvbGFyaXMsIHVzZQorCXQtcHBjb3MuCisKKwkqIGdpbmNsdWRlL3BwYy1hc20uaCAoY3IqLCBmKik6IEFkZCBuZXcgbWFjcm9zIGZvciByZWdpc3RlciBuYW1lcy4KKworCSogcnM2MDAwL3NvbC1jMC5jIChfc3RhcnQpOiBGaXggdW5pbml0aWFsaXplZCBkYXRhIGJ1Zy4KKworCSogcnM2MDAwLm1kIChpbml0X3Y0X3BpYyk6IEFkZCBAbG9jYWwgdG8gY2FsbC4KKwkoaWNiaSxkY2JzdCxzeW5jLGlzeW5jKTogRGVsZXRlIFBvd2VyUEMgY2FjaGUgY29udHJvbCBpbnNucy4KKworCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9TUEVDKTogT24gZXhwbGljaXQgLW1jYWxsLXNvbGFyaXMsIHBhc3MKKwktbXNvbGFyaXMgdG8gdGhlIGFzc2VtYmxlci4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9zeW5jX3RyYW1wb2xpbmUpOiBEZWxldGUuCisJKHJzNjAwMF90cmFtcG9saW5lX3RlbXBsYXRlKTogQWl4ICYgU3lzdGVtIFYgZG9uJ3QgbmVlZCB0ZW1wbGF0ZSBub3cuCisJKHJzNjAwMF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBGb3IgU3lzdGVtIFYsIGNhbGwgdGhlIGZ1bmN0aW9uCisJX190cmFtcG9saW5lX3NldHVwIHRvIHNldCB1cCB0aGUgdHJhbXBvbGluZS4KKworCSogcnM2MDAwLmggKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBEZWxldGUgaGVyZS4KKwkqIHJzNjAwMC93aW4tbnQuaCAoVFJBTVBPTElORV9URU1QTEFURSk6IEFkZCBpdCBoZXJlLgorCisJKiByczYwMDAvdHJhbXAuYXNtOiBOZXcgZmlsZSwgc2V0dXAgdHJhbXBvbGluZXMgcHJvcGVybHkgb24gU3lzdGVtCisJViBzeXN0ZW1zLCBwcm9wZXJseSBmbHVzaGluZyB0aGUgY2FjaGVzLgorCitUaHUgRGVjIDEyIDEwOjUzOjEwIDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IERvbid0IGNhbGwgZWxpZ2libGVfZm9yX2RlbGF5CisJd2l0aCBhbiBpbnNuIHdpdGggYXNtIG9wZXJhbmRzLgorCisJKiBleHBtZWQuYyAoZW1pdF9zdG9yZV9mbGFnX2ZvcmNlKTogRml4IHR5cG9zL3RoaW5rb3MuCisKK1RodSBEZWMgMTIgMDg6MDk6MjAgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBpMzg2LmMgKGkzODZfcmV0dXJuX3BvcHNfYXJncyk6IExpYmNhbGxzIGlnbm9yZSBUQVJHRVRfUlRELgorCitUaHUgRGVjIDEyIDA3OjU2OjAzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuaCAobWF5YmVfZ2V0X2lkZW50aWZpZXIpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogRG9uJ3QgcGFzcyBWT0lEbW9kZSB0byB0eXBlX2Zvcl9tb2RlLgorCisJKiB2YS1hbHBoYS5oOiBBZGQgZGVmaW5pdGlvbnMgZm9yIFZNUzsgdGhleSBkaWZmZXIgZnJvbSBVbml4LgorCisJKiBNYWtlZmlsZS5pbiAoc3RhbXAtb2JqbGlzdCk6IEhhbmRsZSBmaXJzdCBjaGFyYWN0ZXIgb2Ygb2JqZWN0IAorCWZpbGUgYmVpbmcgYSBkaWdpdC4KKworCSogMTc1MGEuaCAoZnVuY3Rpb25fYXJnLCB7bW92Y250LG1vZH1fcmVnbm9fYWRqdXN0KTogQWRkIGRlY2xzLgorCShicmFuY2hfb3JfanVtcCk6IExpa2V3aXNlLgorCShGVU5DVElPTl9BUkcpOiBSZW1vdmUgY2FzdCBvZiBmdW5jdGlvbl9hcmcgcmVzdWx0IHRvIHJ0eC4KKwkqIDE3NTBhLm1kOiBSZW1vdmUgdW5uZWVkZWQgY2FzdHMgdG8gY2hhciAqLgorCitUaHUgRGVjIDEyIDA1OjU1OjI3IDE5OTYgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybWx0ZC5jby51aykKKworCSogYXJtLmMgKGFybV9nZW5fY29uc3RhbnQsIGNhc2UgW0lYXU9SKTogRG9uJ3QgaW52ZXJ0IGNvbnN0YW50IGlmCisJbG9hZGluZyBpbnRvIHRlbXBvcmFyeS4KKworV2VkIERlYyAxMSAxODo1NzoyMSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTWFrZSBzdXJlIHVud2luZGVyIFJUTCBpcyBzYXZlZC4KKworCSogY29sbGVjdDIuYyAod3JpdGVfY19maWxlKTogV3JhcCB0aGUgY3Rvci9kdG9yIGxpc3RzIGFuZCBmbnMKKwl3aXRoIGBleHRlcm4gIkMiIHsgLi4uIH0nLgorCitXZWQgRGVjIDExIDE3OjQ2OjQ4IDE5OTYgIEpvaG4gRi4gQ2FyciAgPGpmY0BtaXQuZWR1PgorCisJKiB0cmVlLmggKHRyZWVfZGVjbCk6IFJlb3JkZXIgZmllbGQgZGVjbGFyYXRpb25zIHRvIHJlZHVjZSBzaXplCisJb24gNjQgYml0IG1hY2hpbmVzLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogV2hlbiBzcGxpdHRpbmcgYW4gaW5zbiwgY2hlY2sgZm9yIHRoZQorCW5ldyBJMiBzZXR0aW5nIGEgU1VCUkVHLgorCitXZWQgRGVjIDExIDE3OjAwOjQ3IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKHByaW50X29wZXJhbmQpOiBVc2UgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMgaW5zdGVhZCBvZgorCXVzaW5nICIlbGQiLgorCShvdXRwdXRfcHJvbG9nKTogRG9uJ3QgcHJpbnQgdXNlbGVzcyBjb21tZW50IGZvciBWTVMuCisKKwkqIGFscGhhLmMgKG91dHB1dF9wcm9sb2cpOiBTSVpFIGlzIG5vdyBIT1NUX1dJREVfSU5ULgorCSogYWxwaGEubWQgKG1vdltocV1pIHVubmFtZWQpOiBTcGxpdCB1cCBmb3IgVEFSR0VUX0JZVEVfT1BTIGFuZCBub3QuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEsIGNhc2UgWkVST19FWFRSQUNUKTogRG9uJ3QgY2FsbAorCWZpeHVwX21lbW9yeV9zdWJyZWcgaWYgbm8gbG9uZ2VyIFNVQlJFRyBvZiBNRU0uCisKK1dlZCBEZWMgMTEgMTQ6MTA6NDggMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBtbjEwMzAwLmM6IE5ldyBmaWxlIGZvciBNYXRzdXNoaXRhIE1OMTAzMDAgcG9ydC4KKwkqIG1uMTAzMDAuaCwgbW4xMDMwMC5tZCwgdC1tbjEwMzAwLCB4bS1tbjEwMzAwLmg6IExpa2V3aXNlLgorCSogY29uZmlnLnN1YjogUmVjb2duaXplIG1uMTAzMDAgYXMgYSBiYXNpYyBtYWNoaW5lIHR5cGUuCisJKiBjb25maWd1cmU6IFNpbWlsYXJseS4KKwkqIGdpbmNsdWRlL3N0ZGFyZy5oOiBtbjEwMzAwIGlzIGxpdHRsZSBlbmRpYW4uCisJKiBnaW5jbHVkZS92YXJhcmdzLmg6IExpa2V3aXNlLgorCitXZWQgRGVjIDExIDA5OjA5OjEwIDE5OTYgIE5hZ2FpIFRha2F5dWtpIDxuYWdhaUBpY3MuZXMub3Nha2EtdS5hYy5qcD4KKworCSogbGliZ2NjMi5jIChjYWNoZWZsdXNoKTogQWRkIFNPTlkgTkVXUy1PUyA0LjIgdmVyc2lvbi4KKworV2VkIERlYyAxMSAwOTowMTozOSAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsLCBlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6CisJRG9uJ3QgcGFzcyBhbiBpZGVudGlmaWVyIG5vZGUgYXMgZnVuY3Rpb24gdHlwZSBmb3IKKwlsaWJyYXJ5IGZ1bmN0aW9ucywgYnV0IHJhdGhlciBidWlsZCBhIGZ1bmN0aW9uIHR5cGUgdGhhdAorCWhhcyBhIHJldHVybiB0eXBlIHdpdGggdGhlIGNvcnJlY3QgbW9kZS4KKwkqIGkzODYuYyAoaTM4Nl9yZXR1cm5fcG9wc19hcmdzKTogRG9uJ3QgdGVzdCBmb3IgSURFTlRJRklFUl9OT0RFLgorCSogaTM4Ni9pc2MuaCAob2Jzb2xldGUgUkVUVVJOX1BPUFNfQVJHUyk6IFRlc3QgZmlyc3QgYXJndW1lbnQKKwlmb3IgSURFTlRJRklFUl9OT0RFLgorCSogaTM4Ni9uZXh0LmggKFJFVFVSTl9QT1BTX0FSR1MpOiBMaWtld2lzZS4KKwkqIGkzODYvc2NvLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBMaWtld2lzZS4KKwkqIGkzODYvc2NvNS5oIChSRVRVUk5fUE9QU19BUkdTKTogTGlrZXdpc2UuCisJKiBpMzg2L3Njb2RieC5oIChSRVRVUk5fUE9QU19BUkdTKTogTGlrZXdpc2UuCisJKiBtNjhrLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBMaWtld2lzZS4KKwkqIG5zMzJrLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBMaWtld2lzZS4KKwkqIHB5ci5oIChSRVRVUk5fUE9QU19BUkdTKTogTGlrZXdpc2UuCisJKiBnbWljcm8uaCAoUkVUVVJOX1BPUFNfQVJHUyk6IExpa2V3aXNlOyBmaXggdHlwby4KKworVHVlIERlYyAxMCAxNzozNjo0NyAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAcmhpbm8uY3lnbnVzLmNvbT4KKworCSogQWRkIG9wdGltaXphdGlvbnMgZnJvbSBKb2huIFZpY2tlcnMgKGpvaG5AcmhpemlrLmRlbW9uLmNvLnVrKQorCSogbTY4ay5oIChUQVJHRVRfQ1BVMzIpOiBOZXcgbWFjcm8uCisJKiBtNjhrLm1kIChhZGRbaHNdaTMpOiBPbmx5IHVzZSB0d28gYWRkcS53IG9yIHN1YnEudyBpbnN0cnVjdGlvbnMKKwl3aGVuIGFkZGluZyBvciBzdWJ0cmFjdGluZyBjb25zdGFudHMgOCA8IE4gPCAxNiBvbiBUQVJHRVRfQ1BVMzIuCisJVXNlIGxlYSBpbnN0ZWFkIG9mIGFkZC53IHdoZW4gYWRkaW5nIDE2IGJpdCBjb25zdGFudHMgdG8gYWRkcmVzcworCXJlZ2lzdGVycyBvbiBhbGwgYnV0IFRBUkdFVF82ODA0MC4KKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3twcm8sZXBpfWxvZ3VlKTogVXNlIGxlYSBpbnN0ZWFkIG9mIGFkZC53CisJd2hlbiBhZGp1c3Rpbmcgc3RhY2sgcG9pbnRlciBvbiBhbGwgYnV0IFRBUkdFVF82ODA0MC4KKwkKK1R1ZSBEZWMgMTAgMTU6NTU6MjMgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBvcHRhYnMuYyAoZW1pdF91bm9wX2luc24pOiBUcmVhdCBaRVJPX0VYVEVORCBsaWtlIFNJR05fRVhURU5ELgorCitUdWUgRGVjIDEwIDEzOjQ3OjI0IDE5OTYgIEpvZXJuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogY29tYmluZS5jIChjb21iaW5hYmxlX2kzcGF0KTogQnJpbmcgYmFjayB0byBzeW5jIHdpdGggY2FuX2NvbWJpbmVfcC4KKworCSogc2guaCAoQURKVVNUX0lOU05fTEVOR1RIKTogRG9uJ3QgYnJlYWsgZnJvbSBsb29wIHdoZW4gTE9PUF9CRUcgZm91bmQuCisJQ2FsY3VsYXRlIHBhZGRpbmcgaW4gbmV3IHZhcmlhYmxlIHBhZC4KKworTW9uIERlYyAgOSAxODowMDozOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChvdXRwdXRfdWxlYjEyOCk6IE91dHB1dCB0aGUgdmFsdWUgaW4gYSBodW1hbi1yZWFkYWJsZQorIAljb21tZW50LgorCShvdXRwdXRfc2xlYjEyOCk6IExpa2V3aXNlLgorCSh2YXJpb3VzKTogQWRqdXN0LgorCShvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogT25seSBvdXRwdXQgaW5mbyBpZiBpdCdzIGludGVyZXN0aW5nLgorCShhZGRfc3JjX2Nvb3Jkc19hdHRyaWJ1dGVzKTogTmV3IGZuLgorCShhZGRfbmFtZV9hbmRfc3JjX2Nvb3Jkc19hdHRyaWJ1dGVzKTogU3BsaXQgb3V0IGZyb20gaGVyZS4KKwkoZ2VuX2VudW1lcmF0aW9uX3R5cGVfZGllKTogQWRkIHNyYyBjb29yZGluYXRlcy4KKwkoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IExpa2V3aXNlLgorCShkd2FyZjJvdXRfZmluaXNoKTogQ2FsbCBvdXRwdXRfY2FsbF9mcmFtZV9pbmZvIGZvciBhbGwgdGFyZ2V0cy4KKworVGh1IERlYyAgNSAxMToyNTozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChhZGRfcHVyZV9vcl92aXJ0dWFsX2F0dHJpYnV0ZSk6IE9ubHkgYWRkIAorCUFUX2NvbnRhaW5pbmdfdHlwZSBpZiAtZzIgb3IgaGlnaGVyLgorCisJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IE1ha2Ugc3VyZSB0aGF0CisJdGhlIHR5cGUgZm9yIEFUX2NvbnRhaW5pbmdfdHlwZSBoYXMgYmVlbiBnZW5lcmF0ZWQuCisJKGdlbl9kZWNsX2RpZSk6IExpa2V3aXNlLgorCisJKiBkd2FyZjJvdXQuYyAodHlwZV90YWcpOiBDaGVjayBERUNMX0lHTk9SRURfUC4KKwkoYWRkX3B1cmVfb3JfdmlydHVhbF9hdHRyaWJ1dGUpOiBDaGVjayBERUNMX1ZJTkRFWCBpbnN0ZWFkLgorCShzY29wZV9kaWVfZm9yKTogTGlrZXdpc2UuCisJKiBkd2FyZm91dC5jICh0eXBlX3RhZyk6IExpa2V3aXNlLgorCitXZWQgRGVjICA0IDIyOjUxOjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZHdhcmYyb3V0LmMgKGRlY29kZV9jZmlfcnRsKTogU3VwcG9ydCBnZXR0aW5nIGEgQ09OU1RfSU5ULgorCShkd2FyZjJvdXRfYmVnaW5fZnVuY3Rpb24pOiBBZGp1c3QuCisJKHJlZ19zYXZlKTogRGl2aWRlIG9mZnNldCBieSB0aGUgYWxpZ25tZW50LgorCShvdXRwdXRfY2ZpKTogU3VwcG9ydCBoYXZpbmcgbW9yZSB0aGFuIG9uZSBhZHZhbmNlX2xvYy4KKwkob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IFJlLWluaXRpYWxpemUgY3VycmVudF9sYWJlbC4KKwkoZHdhcmYyb3V0X2JlZ2luX3Byb2xvZ3VlKTogSW5pdGlhbGl6ZSBjdXJyZW50X2xhYmVsIHRvIE5VTEwuCisJKGxvb2t1cF9jZmEsIGxvb2t1cF9jZmFfMSk6IE5ldyBmbnMuCisJKGR3YXJmMm91dF9kZWZfY2ZhKTogQ2FsbCBsb29rdXBfY2ZhLgorCShkd2FyZjJvdXRfZmluaXNoKTogRG9uJ3QgZ2VuZXJhdGUgQ0lFIENGSXMuCisJKGR3YXJmMm91dF9pbml0KTogR2VuZXJhdGUgdGhlbSBoZXJlLgorCShEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKTogVXNlIFBDX1JFR05VTS4KKworCShhZGRfcHVyZV9vcl92aXJ0dWFsX2F0dHJpYnV0ZSk6IE5vdGUgdmlydHVhbCBjb250ZXh0LgorCShnZW5fZm9ybWFsX3BhcmFtZXRlcl9kaWUpOiBSZXR1cm4gdGhlIGRpZS4KKwkoZ2VuX2Zvcm1hbF90eXBlc19kaWUpOiBTZXQgQVRfYXJ0aWZpY2lhbCBvbiBgdGhpcycuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IEFkZCBBVF9hY2Nlc3NpYmlsaXR5LgorCShnZW5fdmFyaWFibGVfZGllKTogTGlrZXdpc2UuCisJKGdlbl9maWVsZF9kaWUpOiBMaWtld2lzZS4gIERvbid0IGdlbmVyYXRlIGxvY2F0aW9uIGF0dHJpYnV0ZSBmb3IKKwl1bmlvbiBtZW1iZXJzLgorCShnZW5fc3RydWN0X29yX3VuaW9uX3R5cGVfZGllKTogTm90ZSB3aGVyZSBvdXIgdnRhYmxlIGxpdmVzLgorCShnZW5fZGVjbF9kaWUpOiBIYW5kbGUgYW5vbnltb3VzIHVuaW9uIGZpZWxkcy4KKwkoZHdhcmYyb3V0X2RlY2wpOiBBbHdheXMgb3V0cHV0IGBib29sJy4KKworTW9uIERlYyAgMiAwMzo1NToxNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGZpbmFsLmMgKGZpbmFsX2VuZF9mdW5jdGlvbik6IERvbid0IGNhbGwgZHdhcmYyb3V0X2VuZF9mdW5jdGlvbi4KKworCSogZHdhcmYyb3V0LmMgKG91dHB1dF9saW5lX2luZm8pOiBFbWl0IHNwZWNpYWwgb3Bjb2RlcyBmb3IgZWFjaCBsaW5lCisJZW50cnksIGV2ZW4gaWYgdGhlIGxpbmUgbnVtYmVyIGRvZXNuJ3QgY2hhbmdlLgorCShwZW5kX3R5cGUsIG91dHB1dF9wZW5kaW5nX3R5cGVzX2Zvcl9zY29wZSk6IE5ldyBmbnMuCisJKGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBVc2UgdGhlbSB0byBkZWZlciBnZW5lcmF0aW5nIG1lbWJlcgorCWRpZXMgaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBzb21lIG90aGVyIGNvbnRleHQuCisJKGdlbl90eXBlX2RpZSk6IFN0aWxsIHB1dCBuZXN0ZWQgdHlwZXMgaW4gdGhlIHJpZ2h0IHBsYWNlLgorCShkd2FyZjJvdXRfZGVjbCk6IENhbGwgb3V0cHV0X3BlbmRpbmdfdHlwZXNfZm9yX3Njb3BlLgorCisJKiBkd2FyZjJvdXQuYyAoZHdfZmRlX3N0cnVjdCk6IFJlcGxhY2UgZW5kX3Byb2xvZ3VlLCBiZWdpbl9lcGlsb2d1ZQorCXdpdGggY3VycmVudF9sYWJlbC4KKwkoRFdBUkZfQ0lFX0lOU05fU0laRSwgRFdBUkZfQ0lFX1NJWkUpOiBSZW1vdmUuCisJKERXQVJGX0NJRV9IRUFERVJfU0laRSk6IFRoZSBzaXplIHdpdGhvdXQgdGhlIGluaXRpYWwgaW5zbnMuCisJKHNpemVfb2ZfY2ZpKTogUmV2ZXJ0LgorCShkZWNvZGVfY2ZpX3J0bCwgYWRkX2ZkZV9jZmksIGR3YXJmMm91dF9kZWZfY2ZhLCByZWdfc2F2ZSwKKwlkd2FyZjJvdXRfcmVnX3NhdmUsIGR3YXJmMm91dF9yZXR1cm5fc2F2ZSk6IE5ldyBmbnMuCisJKGR3YXJmMm91dF9iZWdpbl9mdW5jdGlvbik6IFVzZSB0aGVtIHRvIGdlbmVyYXRlIENGSXMuCisJKGR3YXJmMm91dF9maW5pc2gpOiBVc2UgdGhlbSB0byBnZW5lcmF0ZSBFIENGSXMuICAKKwlEb24ndCBzZXQgbmV4dF9mZGVfb2Zmc2V0LgorCShjYWxjX2ZkZV9zaXplcyk6IEluaXRpYWxpemUgY2llX3NpemUuCisJKG91dHB1dF9jYWxsX2ZyYW1lX2luZm8pOiBEb24ndCBnZW5lcmF0ZSBDSUUgQ0ZJcy4KKwkoZHdhcmYyb3V0X2VuZF9mdW5jdGlvbik6IFJlbW92ZS4KKworCSogdHJlZS5jIChtYXliZV9nZXRfaWRlbnRpZmllcik6IE5ldyBmbi4KKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9uYW1lKTogVXNlIGl0IGluc3RlYWQgb2YgZ2V0X2lkZW50aWZpZXIuCisKK0ZyaSBOb3YgMjkgMTU6MTM6MzkgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERvbid0IG1vdmUgaW5pdGlhbGl6YXRpb24gaWYgdGhlcmUgaXMgYQorCWxhYmVsIGJldHdlZW4gaXQgYW5kIHRoZSBqdW1wIGZvciBpZiAoZm9vKSBiYXIrKyB0byBiYXIgKz0gKGZvbyAhPTApCisJCitXZWQgTm92IDI3IDE2OjIxOjE0IDE5OTYgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCQorCSogUmVtb3ZlIGNoYW5nZSBvZiBPY3QgNC4KKwkqIGkzODYuaCAob3V0ZXJfZnVuY3Rpb25fY2hhaW4pOiBSZW1vdmUuCisJKGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfYWxsb2NhKTogUmVtb3ZlLgorCShydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycyk6IFJlbW92ZS4KKwkoTl9SRUdTX1VTRUQsIE5fQUxMT0NBVEFCTEVfUkVHSVNURVJTKTogUmVtb3ZlLgorCSogaTM4Ni5tZCAoYWRkZGkzXzEsIHN1YmRpM18xKTogUmVtb3ZlLgorCShhZGRkaTMsIHN1YmRpMyk6IFJldmVydC4KKwkobW92c2YsIG1vdnNmX21lbSwgbW92c2Zfbm9ybWFsLCBtb3ZkZiwgbW92ZGZfbWVtLCBtb3ZkZl9tZW0rMSk6CisJTGlrZXdpc2UuIAorCShtb3Z4ZiwgbW92eGZfbWVtLCBtb3Z4Zl9tZW0rMSwgYWRkc2lkaTNfMSwgYWRkc2lkaTNfMik6IExpa2V3aXNlLgorCShhZGRkaTNfMSwgc3Vic2lkaTMsIHN1YmRpM18xKTogTGlrZXdpc2UuCisJKGFkZHNpZGkzXzEsIGFkZHNpZGkzXzIsIHN1YnNpZGkzKTogTGlrZXdpc2UuCisJKGFkZHNpZGkzXzEsIGFkZHNpZGkzXzIsIGFkZGRpMywgc3Vic2lkaTMpOiBEaXNhYmxlIHRoZSBwcm9ibGVtCisJcmVsb2FkIGFsdGVybmF0aXZlcy4gCisJCitXZWQgTm92IDI3IDE2OjIxOjE0IDE5OTYgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogaTM4Ni5tZCAoYXNobGRpM19ub25fY29uc3RfaW50LCBhc2hyZGkzX25vbl9jb25zdF9pbnQpOgorCVVzZSBhIGhpZGRlbiBicmFuY2ggdG8gaGFuZGxlIHNoaWZ0cyA+IDMyIGJpdC4KKwkobHNocmRpM19ub25fY29uc3RfaW50KTogTGlrZXdpc2UuCisJKGZsb2F0ZGl4ZjIpOiBEb24ndCB1c2UgdW5uZWNlc3NhcnkgWEZtb2RlIG9wZXJhdGlvbi4KKworV2VkIE5vdiAyNyAxNToyMzo0MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IERvbid0IGVtaXQgRFdBUkYuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX3R5cGVfY29tcGlsYXRpb24pOiBEb24ndCBlbWl0IERXQVJGLgorCShtYWluKTogSnVzdCBsZXQgLWdkd2FyZiBtZWFuIERXQVJGIHYxOyByZW1vdmUgLWdkd2FyZi0xLgorCisJKiBkd2FyZm91dC5jIChkZWNsX2NsYXNzX2NvbnRleHQpOiBOZXcgZm4uCisJKG91dHB1dF9nbG9iYWxfc3Vicm91dGluZV9kaWUpOiBGaXggZGVjbGFyYXRpb24gY2FzZS4KKwkob3V0cHV0X2dsb2JhbF92YXJpYWJsZV9kaWUpOiBMaWtld2lzZS4KKwkob3V0cHV0X3R5cGUpOiBOb3RlIHdoZW4gd2UgYXJlIGluIGEgY2xhc3MgZGVmbi4gIElmIHdlJ3JlIGEgbmVzdGVkCisJdHlwZSBhbmQgb3VyIGNvbnRleHQgaGFzbid0IGJlZW4gd3JpdHRlbiwgZG8gdGhhdC4gIERvIGVhcmx5IGV4aXQKKwlmb3IgbmVzdGVkIHR5cGVzLgorCShvdXRwdXRfZGVjbCk6IE91dHB1dCB0aGUgY2xhc3MgY29udGV4dCBmb3IgZm5zIGFuZCB2YXJzLgorCURvbid0IGVtaXQgZGV0YWlsZWQgcGFybSBpbmZvIGZvciBhIGZuIGRlY2xhcmF0aW9uLgorCVVzZSBUWVBFX0RFQ0xfSVNfU1RVQiwgaXNfcmVkdW5kYW50X3R5cGVkZWYuCisJKHR5cGVfb2tfZm9yX3Njb3BlKTogU3VwcG9ydCBlbWl0dGluZyBuZXN0ZWQgdHlwZXMgbGF0ZXIuCisJKGlzX3JlZHVuZGFudF90eXBlZGVmKTogTmV3IGZuLgorCShUWVBFX0RFQ0xfSVNfU1RVQik6IE5ldyBtYWNyby4KKwkob3V0cHV0X2NvbXBpbGVfdW5pdF9kaWUpOiBDaGVjayB1c2VfZ251X2RlYnVnX2luZm9fZXh0ZW5zaW9ucy4KKwkob3V0cHV0X2xvY2FsX3N1YnJvdXRpbmVfZGllLCBvdXRwdXRfZ2xvYmFsX3N1YnJvdXRpbmVfZGllLAorCWR3YXJmb3V0X2JlZ2luX2Z1bmN0aW9uLCBkd2FyZm91dF9lbmRfZnVuY3Rpb24sIGR3YXJmb3V0X2xpbmUsCisJZ2VuZXJhdGVfbWFjaW5mb19lbnRyeSwgZHdhcmZvdXRfaW5pdCwgZHdhcmZvdXRfZmluaXNoKTogTGlrZXdpc2UuCisKKwkqIGR3YXJmMm91dC5jIChkZWNsX2NsYXNzX2NvbnRleHQpOiBTdGF0aWMuCisJKGxvb2t1cF90eXBlX2RpZSk6IFVzZSBUWVBFX1NZTVRBQl9QT0lOVEVSLgorCShlcXVhdGVfdHlwZV9udW1iZXJfdG9fZGllKTogTGlrZXdpc2UuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IElmIHdlJ3JlIGluIGNsYXNzIGNvbnRleHQsIGl0J3MgYSBkZWNsLgorCShnZW5fdmFyaWFibGVfZGllKTogTGlrZXdpc2UuCisJKGdlbl9kZWNsX2RpZSk6IE91dHB1dCB0aGUgY29udGFpbmluZyB0eXBlLgorCShkd2FyZjJvdXRfaW5pdCk6IExvc2UgdHlwZV9kaWVfdGFibGUgY29kZS4KKworV2VkIE5vdiAyNyAwODozMDo1NCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CisKKyAgICAgICAgKiBNYWtlZmlsZS5pbiAoRFJJVkVSX0RFRklORVMpOiBOZXcgbWFjcm8sIHdpdGggdGhlIG1hY3JvCisgICAgICAgIGRlZmluaXRpb25zIGZvciB0aGUgZHJpdmVyLgorICAgICAgICAoZ2NjLm8pOiBNYWtlIHJ1bGUgdXNlICQoRFJJVkVSX0RFRklORVMpLgorICAgICAgICAqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpIFtMQU5HX1NQRUNJRklDX0RSSVZFUl06IENhbGwKKyAgICAgICAgbGFuZ19zcGVjaWZpY19kcml2ZXIsIHBhc3NpbmcgYWxvbmcgdGhlIGFkZHIgb2YgRkFUQUwgZm9yIGVycm9ycworICAgICAgICBhbG9uZyB3aXRoIG91ciBBUkdDIGFuZCBBUkdWLgorCitXZWQgTm92IDI3IDA4OjIxOjEzIDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CisKKwkqIG02OGsubWQgKGlvcnNpX3pleHRoaV9hc2hsMTYpOiBOZXcgcGF0dGVybi4KKwkoYXNocnNpXzE2KTogTmV3IG5hbWUgZm9yIG9sZCB1bm5hbWVkIHBhdHRlcm4uCisKKwkqIG9iamMvbWlzYy5jIChzdGRsaWIuaCk6IERlZmluZSBfX1VTRV9GSVhFRF9QUk9UT1RZUEVTX18gYmVmb3JlCisJaW5jbHVkaW5nIHN0ZGxpYi5oLgorCitXZWQgTm92IDI3IDA4OjE3OjM0IDE5OTYgIEpvZXJuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworICAgICAgICAqIGkzODYubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8rWzMtOF0pOiBBZGQgbWlzc2luZworCUNDX1NUQVRVU19JTklULgorCShkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvK1s1LThdKTogRGVsZXRlIHJlZHVuZGFudCBhc3NpZ25tZW50LgorCitXZWQgTm92IDI3IDA3OjU2OjI3IDE5OTYgIEouVC4gQ29ua2xpbiAgPGp0Y0ByaGluby5jeWdudXMuY29tPgorCisJKiBtNjhrLm1kICh7YW5kLGlvcix4b3J9c2kzX2ludGVybmFsKTogUmVtb3ZlZCAhVEFSR0VUXzUyMDAgZnJvbQorIAljb25kaXRpb25hbHMgbm93IHRoYXQgZW50aXJlIGluc24gaXMgZGlzYWJsZWQgd2hlbiAhVEFSR0VUXzUyMDAuCisJCitXZWQgTm92IDI3IDA3OjUyOjMyIDE5OTYgIE9saXZlciBLZWxsb2dnICA8a2VsbG9nZ0BzcGFjZS5vdG4uZGFzYS5kZT4KKworCSogMTc1MGEubWQgKG1vdmhpIHBhdHRlcm4pOiAgRml4ZWQgTUVNIHRvIE1FTSBtb3ZlIHByb2JsZW0uCisKK1R1ZSBOb3YgMjYgMTQ6NTA6NTQgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlcyk6IEFib3J0IG9ubHkgaWYgbGVuZ3RoIHBvc2l0aXZlIGF0IGVuZC4KKwkqIGZ1bmN0aW9uLmMgKGZyYW1lX29mZnNldCwgZ2V0X2ZyYW1lX3NpemUpOiBNYWtlIEhPU1RfV0lERV9JTlQuCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBNYWtlIGZyYW1lX29mZnNldCBiZSBIT1NUX1dJREVfSU5ULgorCShnZXRfZnJhbWVfc2l6ZSk6IEFkZCBkZWZpbml0aW9uLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBNYWtlIHN0YXJ0aW5nX2ZyYW1lX3NpemUgYmUgSE9TVF9XSURFX0lOVC4KKworTW9uIE5vdiAyNSAxNjo1NToxNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZmluaXNoKTogRG9uJ3QgZW1pdCBjYWxsIGZyYW1lIGluZm8KKwlmb3Igbm9uLU1JUFMgdGFyZ2V0cy4KKwkoaXNfcmVkdW5kYW50X3R5cGVkZWYpOiBOZXcgZm4uCisJKG1vZGlmaWVkX3R5cGVfZGllKTogUmVmZXIgdG8gdHlwZWRlZiBESUVzIHdoZXJlIGFwcHJvcHJpYXRlLgorCShnZW5fdHlwZWRlZl9kaWUpOiBTdXBwb3J0IERFQ0xfT1JJR0lOQUxfVFlQRS4KKwkoZ2VuX3R5cGVfZGllKTogTGlrZXdpc2UuICBVc2UgaXNfcmVkdW5kYW50X3R5cGVkZWYuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IERvbid0IGZvcmNlIGEgc3BlYyBESUUgZm9yIGxvY2FsIGNsYXNzIG1ldGhvZHMuCisKK01vbiBOb3YgMjUgMTU6MDk6MTIgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2NjLmMgKGhhbmRsZV9icmFjZXMpOiBSZXdvcmsgbGFzdCBjaGFuZ2UuCisKK01vbiBOb3YgMjUgMTM6NDk6NTEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKGJ1aWxkX2V4ZWV4dCwgZXhlZXh0KTogTmV3IHZhcmlhYmxlcy4gIFVzZSBzZWQgdG8gaW5zZXJ0CisJYnVpbGRfZXhlZXh0IHZhbHVlIGludG8gTWFrZWZpbGUgZXhlZXh0IHJ1bGUuCisJKCotKi1jeWd3aW4zMik6IFNldCBleGVleHQuCisJKiBpMzg2L3gtY3lnd2luMzIgKGV4ZWV4dCk6IERlbGV0ZS4KKwkqIHJzNjAwMC94LWN5Z3dpbjMyIChleGVleHQpOiBEZWxldGUuCisKKwkqIGR3YXJmLmggKGVudW0gZHdhcmZfbG9jYXRpb25fYXRvbSk6IEFkZCBPUF9NVUxULgorCSogZHdhcmZvdXQuYyAob3V0cHV0X21lbV9sb2NfZGVzY3JpcHRvciwgY2FzZSBNVUxUKTogQWRkLgorCSogZHdhcmZvdXQyLmMgKG1lbV9sb2NfZGVzY3JpcHRvciwgY2FzZSBNVUxUKTogQWRkLgorCisJKiBkd2FyZm91dC5jIChkd2FyZl9mdW5kX3R5cGVfbmFtZSwgY2FzZSBGVF91bnNpZ25lZF9pbnQ2NCk6IEZpeCB0eXBvLgorCitTdW4gTm92IDI0IDIxOjQyOjAxIDE5OTYgIEouVC4gQ29ua2xpbiAgPGp0Y0ByaGluby5jeWdudXMuY29tPgorCisJKiBtNjhrLm1kIChhbmRzaTMpOiBDaGFuZ2VkIGludG8gZGVmaW5lX2V4cGFuZC4KKwkoYW5kc2kzX2ludGVybmFsKTogUmVuYW1lIGZyb20gb2xkIGFuZHNpMywgY2hhbmdlZCBjb25kaXRpb24KKwl0byAhVEFSR0VUXzUyMDAuCisJKGFuZHNpMl81MjAwKTogTmV3IGluc24uCisJKGlvcnNpMyk6IENoYW5nZSBpbnRvIGRlZmluZV9leHBhbmQuCisJKGlvcnNpMl9pbnRlcm5hbCk6IFJlbmFtZSBmcm9tIG9sZCBpb3JzaTMsIGNoYW5nZWQgY29uZGl0aW9uIAorCXRvICFUQVJHRVRfNTIwMC4KKwkoaW9yc2kyXzUyMDApOiBOZXcgaW5zbi4KKwkoeG9yc2kzKTogQ2hhbmdlIGludG8gZGVmaW5lX2V4cGFuZC4KKwkoeG9yc2kyX2ludGVybmFsKTogUmVuYW1lIGZyb20gb2xkIHhvcnNpMywgY2hhbmdlZCBjb25kaXRpb24gCisJdG8gIVRBUkdFVF81MjAwLgorCSh4b3JzaTJfNTIwMCk6IE5ldyBpbnNuLgorCitTdW4gTm92IDI0IDIxOjMxOjMyIDE5OTYgIEpvaG4gRi4gQ2FyciAgPGpmY0BtaXQuZWR1PgorCisJKiBpMzg2LmggKE5fQUxMT0NBVEFCTEVfUkVHSVNURVJTKTogUmVtb3ZlIGV4dHJhIGJhY2tzbGFzaCBhdAorCWVuZCBvZiBtYWNybyBkZWZpbml0aW9uLgorCisJKiBjcHBsaWIuYyAoTE9DQUxfSU5DTFVERV9ESVIpOiBSZW1vdmUgZGVmYXVsdCBkZWZpbml0aW9uLgorCShpbmNsdWRlX2RlZmF1bHRzX2FycmF5KTogRG8gbm90IHVzZSBMT0NBTF9JTkNMVURFX0RJUiBvcgorCVRPT0xfSU5DTFVERV9ESVIgaWYgdGhleSBhcmUgbm90IGRlZmluZWQuCisJKiBjY2NwLmM6IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbi5vKTogTmV3IHJ1bGUuCisKK1N1biBOb3YgMjQgMTk6MTQ6NTAgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGZvbGQtY29uc3QuYyAobWVyZ2VfcmFuZ2VzKTogSW4gKCssLSkgY2FzZSwgaWYgbG93ZXIgYm91bmRzIGFyZQorCXRoZSBzYW1lIHRoZSByZXN1bHQgaXMgYWx3YXlzIGZhbHNlLgorCitTdW4gTm92IDI0IDE4OjQ4OjMxIDE5OTYgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IERvbid0IGdpdmUgd2FybmluZyBmb3IKKyAJZGVyZWZlcmVuY2luZyB2b2lkICogaWYgZXZhbHVhdGlvbiBpcyBiZWluZyBza2lwcGVkLgorCisJKiBjLWRlY2wuYyAocG9wbGV2ZWwpOiBEb24ndCBjYWxsIG91dHB1dF9pbmxpbmVfZnVuY3Rpb24gaWYKKwlERUNMX1NBVkVEX0lOU05TIGlzIG5vdCBzZXQuCisKKwkqIGdjYy5jIChnaXZlX3N3aXRjaCk6IEFkZCBuZXcgYXJnLCBJTkNMVURFX0JMQU5LUy4KKwkoaGFuZGxlX2JyYWNlcyk6IEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJQWRkIHN1cHBvcnQgZm9yIG5ldyBjb25zdHJ1Y3Q6ICV7UypefS4KKworU3VuIE5vdiAyNCAxODo0NDo0OCAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogYy1wYXJzZS5pbiAodW5hcnlfZXhwciwgZXhwcl9ub19jb21tYXMpOiBJbmNyZW1lbnQgc2tpcF9ldmFsdWF0aW9uCisJd2hlbiBhbmFseXppbmcgYW4gZXhwcmVzc2lvbiB0aGF0IGlzIGtub3duIG5vdCB0byBiZSBldmFsdWF0ZWQuCisJKHNpemVvZiwgYWxpZ25vZik6IE5ldyBydWxlcy4KKwkqIGMtdHJlZS5oIChza2lwX2V2YWx1YXRpb24pOiBOZXcgdmFyaWFibGUuCisJKiBjLWNvbW1vbi5jIChza2lwX2V2YWx1YXRpb24pOiBMaWtld2lzZS4KKwkob3ZlcmZsb3dfd2FybmluZywgdW5zaWduZWRfY29udmVyc2lvbl93YXJuaW5nKTogRG9uJ3Qgd2FybiBhYm91dAorCXBvdGVudGlhbCBydW50aW1lIGVycm9ycyB3aGVuIHNraXBwaW5nIGV2YWx1YXRpb24uCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBMaWtld2lzZS4KKwkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IG9wMSBub3cgYWx3YXlzIG5vbm51bGwuCisKK1N1biBOb3YgMjQgMTc6MDY6NTggMTk5NiAgQmVybmQgU2NobWlkdCAgKGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFKQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgcmVnc2NhbiBiZWZvcmUgZWFjaAorCWp1bXAgdGhyZWFkaW5nIHBhc3MuCisKK1N1biBOb3YgMjQgMTY6Mzc6MTggMTk5NiAgRGF2ZSBMb3ZlICA8ZC5sb3ZlQGRsLmFjLnVrPgorCisJKiBjb25maWd1cmUgKG9iamNfdGhyZWFkX2ZpbGUpOiBTZXQgY29uZGl0aW9uYWxseSBpbiBlYWNoIGNhc2Ugc28KKwltYXkgYmUgb3ZlcmlkZGVuIHdpdGggYC0tZW5hYmxlLW9iamN0aHJlYWRzPXBvc2l4Jy4KKwlDaGFuZ2UgTGludXggZGVmYXVsdCB0byBgc2luZ2xlJy4KKworRnJpIE5vdiAyMiAxNzo1MzoxNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IE91dHB1dCBEV0FSRiBpbiB0aGUgdGhpcmQgY2FzZSwgdG9vLgorCisJKiBkd2FyZjJvdXQuYyAoZGVjbHNfZm9yX3Njb3BlKTogT25seSBhZGQgRElFcyB3aXRoIG5vIHBhcmVudHMgdG8KKwlvdXIgc2NvcGUuCisJKGdlbl9zdWJyb3V0aW5lX3R5cGVfZGllKTogUGFybSB0eXBlcyBnbyB1bmRlciB0aGUgZm4gdHlwZSBESUUuCisKKwkqIE1ha2VmaWxlLmluICgkKFQpY3J0e2JlZ2luLGVuZH0ubyk6IE1vdmUgQ1JUU1RVRkZfVF9DRkxBR1MgYWZ0ZXIgCisJZ2VuZXJhbCBmbGFncy4KKworCSogbWlwcy90LWlyaXM2IChDUlRTVFVGRl9UX0NGTEFHUyk6IERlZmluZS4KKwkqIG1pcHMuYyAoY29tcHV0ZV9mcmFtZV9zaXplKTogRml4IGZwX3NhdmVfb2Zmc2V0LgorCisJKiBkd2FyZjJvdXQuYyAobmV3X2RpZSk6IElmIHdlIGdldCBhIE5VTEwgcGFyZW50LCBpbmMgbGltYm9fZGllX2NvdW50LgorCShkZWNsc19mb3Jfc2NvcGUpOiBEZWNyZW1lbnQgbGltYm9fZGllX2NvdW50IGFzIGFwcHJvcHJpYXRlLgorCShkd2FyZjJvdXRfZmluaXNoKTogQ2hlY2sgZm9yIGdvb2QgbGltYm9fZGllX2NvdW50LgorCShzaXplX29mX2NmaSk6IElmIHJlZ25vIHRvbyBiaWcgZm9yIERXX0NGQV9vZmZzZXQsIHVzZSBvZmZzZXRfZXh0ZW5kZWQKKwlpbnN0ZWFkLgorCShvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQWRkIGRpc2FibGVkIGNvZGUgZm9yIHNwZWNpZnlpbmcgQUJJLgorCShkd2FyZjJvdXRfYmVnaW5fZnVuY3Rpb24pOiBOb3RlIGFsbCBzYXZlZCByZWdzLgorCisJKiBkd2FyZjJvdXQuYyAoZ2VuX3N1YnByb2dyYW1fZGllKTogSGF2ZSBhIERJRSBmb3IgZWFjaCBmbiBhdAorCXRvcGxldmVsLgorCShzY29wZV9kaWVfZm9yKTogT25seSB1c2UgdGhlIE5VTEwgZm9yIGZucyBhbmQgdGFncy4KKworVHVlIE5vdiAyMSAxNTo1Mzo1MSAxOTk2ICBKb2VybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHNoLmMgKG91dHB1dF9zdGFja19hZGp1c3QpOiBOZXcgYXJndW1lbnQgVEVNUC4gIENoYW5nZWQgYWxsIGNhbGxlcnMuIAorCUlmIHRoZSBhZGp1c3QgY2Fubm90IGJlIGRvbmUgd2l0aCBvbmUsIGJ1dCBjYW4gYmUgZG9uZSB3aXRoIHR3byAKKwlDT05TVF9PS19GT1JfSSBjb25zdGFudHMsIGRvIGl0IHRoYXQgd2F5LgorCitUaHUgTm92IDIxIDE0OjI1OjU1IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IEluY2x1ZGUgPHN0ZGlvLmg+IGluIDxhc3NlcnQuaD4gZXZlbiBpZiBub3QgQysrIGlmCisJc3RkZXJyIG5lZWRzIHRvIGJlIGRlZmluZWQuCisKK1dlZCBOb3YgMjAgMTU6Mzg6MTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uKTogRG8gb3V0cHV0IGZ1bmN0aW9uLXNjb3BlIHRhZ3MKKwlmb3IgRFdBUkYgMi4KKwkqIGMtZGVjbC5jIChwdXNodGFnKTogU2V0IFRZUEVfQ09OVEVYVCBvbiB0aGUgdGFnLgorCSogdG9wbGV2LmMsIHZhcmFzbS5jOiBzL2R3YXJmMm91dF9maWxlX3Njb3BlX2RlY2wvZHdhcmYyb3V0X2RlY2wvZy4KKwkqIGR3YXJmMm91dC5jIChhZGRfcHJvdG90eXBlZF9hdHRyaWJ1dGUpOiBVc2UgYSB2YWx1ZSBvZiAxLgorCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBTdXBwb3J0IEFUX3N0YXRpY19saW5rLgorCShkd2FyZjJvdXRfZGVjbCk6IFJlbmFtZSBmcm9tIGR3YXJmMm91dF9maWxlX3Njb3BlX2RlY2wuCisJR2l2ZSBuZXN0ZWQgZm5zIGFuZCB0YWdzIGEgZGllX3BhcmVudCBvZiBOVUxMLgorCShkZWNsc19mb3Jfc2NvcGUpOiBGaXggdGhlIGRpZV9wYXJlbnQgZm9yIG5lc3RlZCBmbnMgYW5kIHRhZ3MuCisJKHNjb3BlX2RpZV9mb3IpOiBJZiB3ZSBnZXQgYSBjb250ZXh0IG9mIE5VTEwsIGp1c3QgcmV0dXJuIGl0LgorCitUdWUgTm92IDE5IDE4OjIxOjExIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZHdhcmYyb3V0LmMgKGdlbl9zdWJwcm9ncmFtX2RpZSk6IFN1cHBvcnQgYmxvY2sgZXh0ZXJuIGRlY2xzLgorCShnZW5fdmFyaWFibGVfZGllKTogTGlrZXdpc2UuCisJKGdlbl9kZWNsX2RpZSk6IEVtaXQgYmxvY2sgZXh0ZXJuIGZ1bmN0aW9uIGRlY2xzLgorCisJKiBjLWRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogU2V0IERFQ0xfQVJUSUZJQ0lBTC4KKworVHVlIE5vdiAxOSAxNjo1MDozMiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAocG93ZXJwYyote3N5c3YsZWxmLGVhYml7LGFpeCxzaW19fSk6IFNldAorCWV4dHJhX2hlYWRlcnMgdG8gcHBjLWFzbS5oLgorCShwb3dlcnBjKi17bGludXgsc29sYXJpcyxydGVtcyx2eHdvcmtzfSk6IERpdHRvLgorCShwb3dlcnBjKi17d2lubnQscGUsY3lnd2luMzJ9KTogRGl0dG8uCisKKwkqIHJzNjAwMC90LXtwcGMscHBjZ2FzLHNvbGFyaXMsd2lubnR9IChFWFRSQV9IRUFERVJTKTogRG9uJ3Qgc2V0CisJaXQgaGVyZS4KKworTW9uIE5vdiAxOCAxNDo1MTo0NiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChEV0FSRl9DSUVfSU5TTl9TSVpFKTogTmV3IG1hY3JvLgorCShEV0FSRl9DSUVfSEVBREVSX1NJWkUpOiBVc2UgaXQuCisJKERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4sIERXQVJGX0ZSQU1FX1JFR05VTSk6IE5ldyBtYWNyb3MuCisJKG91dHB1dF9jYWxsX2ZyYW1lX2luZm8sIGR3YXJmMm91dF9iZWdpbl9mdW5jdGlvbik6IFVzZSB0aGVtLiAgCisJRm9yIHRoZSBNSVBTLCBvdXRwdXQgdGhlIGZpcnN0IENGQSBpbnNuIGluIHRoZSBDSUUuCisJKiBkd2FyZjIuaCAoZW51bSBkd2FyZl9jYWxsX3JlZ191c2FnZSk6IExvc2UuCisJKGR3YXJmX21hY2luZm9fcmVjb3JkX3R5cGUpOiBGaXggc3BlbGxpbmcuCisJKiBtaXBzL21pcHMuaCAoRFdBUkZfRlJBTUVfUkVHTlVNLCBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKTogRGVmaW5lLgorCisJKiBkd2FyZjJvdXQuYyAoYmFzZV90eXBlX2RpZSk6IEp1c3QgZ2VuZXJhdGUgdGhlIERJRXMgYXMgbmVlZGVkLAorIAlyYXRoZXIgdGhhbiBidWlsZGluZyB1cCBzb21lIHRhYmxlLgorCShpbml0X2Jhc2VfdHlwZV90YWJsZSk6IExvc2UuCisJKGFkZF9zdWJzY3JpcHRfaW5mbyk6IFVzZSBhZGRfdHlwZV9hdHRyaWJ1dGUuICBEb24ndCBnaXZlIGFuIHVwcGVyCisJYm91bmQgZm9yIGFuIGFycmF5IG9mIHVua25vd24gc2l6ZS4KKwkoZ2VuX3Vuc3BlY2lmaWVkX3BhcmFtZXRlcnNfZGllKTogUmVtb3ZlIERXQVJGLTEga2x1ZGdlLgorCShkd2FyZjJvdXRfaW5pdCk6IExvc2UgY2FsbCB0byBpbml0X2Jhc2VfdHlwZV90YWJsZS4KKwkoaXNfY19mYW1pbHksIGlzX2ZvcnRyYW4pOiBOZXcgZm5zLgorCShnZW5fY29tcGlsZV91bml0X2RpZSk6IFJlY29nbml6ZSBHTlUgRjc3LgorCShnZW5fYXJyYXlfdHlwZV9kaWUpOiBVc2UgQVRfZGVjbGFyYXRpb24gZm9yIGFuIGFycmF5IG9mIHVua25vd24gc2l6ZS4KKwkobW9kaWZpZWRfdHlwZV9kaWUpOiBUYWtlIFRZUEVfTUFJTl9WQVJJQU5UIGJlZm9yZSBwYXNzaW5nIGl0CisJdG8gYnVpbGRfdHlwZV92YXJpYW50LCBzbyB3ZSBpZ25vcmUgbmFtZWQgdmFyaWFudHMuCisJKGR3YXJmMm91dF9maWxlX3Njb3BlX2RlY2wpOiBEb24ndCBnZW5lcmF0ZSBESUVzIGZvciBidWlsdC1pbiBzdHJ1Y3RzLAorCWVpdGhlcjsgdGhleSB3aWxsIGJlIGVtaXR0ZWQgaWYgdGhleSBhcmUgdXNlZC4KKwlGcm9tIHdpbHNvbjoKKwkoZ2VuX2FycmF5X3R5cGVfZGllKTogRm9yY2UgdGhlIGVsZW1lbnQgdHlwZSBvdXQgZmlyc3Qgb24gSVJJWCA2LgorCitTdW4gTm92IDE3IDIwOjIzOjExIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IEZpeCBlcnJvciBpbiBwcmV2aW91cyBjaGFuZ2UuCisKK1NhdCBOb3YgMTYgMDY6MDg6MjcgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogQXZvaWQgY29uZnVzaW9uIGlmIHNpemVvZiAoZmxvYXQpCisJaXMgbGVzcyB0aGFuIGEgZnVsbCB3b3JkLgorCisJKiBhbHBoYS5oIChNQVNLX0JZVEVfT1BTKTogTm93IGRlZmluZSBhcyAxMDI0LgorCSogYWxwaGEvdm1zLmggKFRBUkdFVF9ERUZBVUxUKTogVXNlIHN5bWJvbGljIHZhbHVlcy4KKworCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogQWRkIG5ldyBhcmcgUEFMSUdOTUVOVCBhbmQgY29tcHV0ZSBpdC4KKwkoZXhwYW5kX2Fzc2lnbm1lbnQsIGRvX2p1bXApOiBQYXNzIG5ldyBhcmcgdG8gZ2V0X2lubmVyX3JlZmVyZW5jZS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IExpa2V3aXNlLgorCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSwgZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSk6CisJTGlrZXdpc2UuCisJKiB0cmVlLmggKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBBZGQgbmV3IGFyZy4KKworCSogQWRkIHN1cHBvcnQgZm9yIEFscGhhL1ZNUywgbW9zdGx5IGZyb20KKwlLbGF1cyBLYWVtcGYgKGtrYWVtcGZAcHJvZ2lzLmRlKQorCSogY29uZmlndXJlIChhbHBoYS1kZWMtdm1zKik6IE5ldyB0YXJnZXQuCisJKiBhbHBoYS5jIChvdmVycmlkZV9vcHRpb25zKTogSGFuZGxlIFZBWCBmb3JtYXQgZmxvYXRpbmctcG9pbnQuCisJKHByaW50X29wZXJhbmQsIGNhc2UgJywnLCAnLScpOiBOZXcgY2FzZXMuCisJKGFscGhhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBIYW5kbGUgVk1TIGNvbnZlbnRpb24uCisJKGFscGhhX3NhX3ttYXNrLHNpemV9LCBhbHBoYV9wdl9zYXZlX3NpemUsIGFscGhhX3VzaW5nX2ZwKToKKwlOZXcgdmVyc2lvbnMgZm9yIFZNUy4KKwkob3V0cHV0X3twcm8sZXBpfWxvZ3VlLCBmdW5jdGlvbl9hcmcpOiBMaWtld2lzZS4KKwkoZGlyZWN0X3JldHVybik6IE5ldmVyIHRydWUgb24gVk1TLgorCShjaGVja19mbG9hdF92YWx1ZSk6IFJldHVybiAwIGZvciBWTVMuCisJKHZtc2tydW5jaCwgYWxwaGFfe25lZWQsd3JpdGV9X2xpbmthZ2UpOiBOZXcgZnVuY3Rpb24uCisJKiBhbHBoYS5oICh7TUFTSyxUQVJHRVR9X3tPUEVOX1ZNUyxGTE9BVF9WQVh9KTogTmV3IG1hY3Jvcy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGZsb2F0LXZheCBhbmQgZmxvYXQtaWVlZS4KKwkoe0ZVTkNUSU9OLExJQkNBTEx9X1ZBTFVFLCBGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogUjEgYW5kIFIzMworCWFyZSBhbHNvIHJldHVybiByZWdpc3RlcnMuCisJKEFTTV9PVVRQVVRfRE9VQkxFKTogU3VwcG9ydCBib3RoIGZsb2F0aW5nLXBvaW50IGZvcm1hdHMuCisJKFBSSU5UX09QRVJBTkRfRlVOQ1RfVkFMSURfUCk6IEFkZCAnLCcgYW5kICctJy4KKwkqIGFscGhhLm1kICh7ZGl2LG1vZH1bc2RdaTMpOiBPbmx5IGZvciBWTVMuCisJKGZwIG9wZXJhdGlvbnMpOiBBZGQgbW9kaWZpZXJzIGZvciBtdWx0aXBsZSBmbG9hdGluZy1wb2ludCBmb3JtYXRzLgorCShjYWxsIHBhdHRlcm5zKTogSGFuZGxlIG5ldyBjYWxsaW5nIHNlcXVlbmNlIGZvciBWTVMuCisJKHRhYmxlanVtcCk6IE1ha2UgbmV3IHBhdHRlcm4gZm9yIFZNUy4KKwkobm9ubG9jYWxfZ290b19yZWNlaXZlciwgYXJnX2hvbWUpOiBOZXcgcGF0dGVybnMuCisJKiBhbHBoYS90LXZtcywgYWxwaGEvdm1zLmgsIGFscGhhL3htLXZtcy5oOiBOZXcgZmlsZXMuCisKK0ZyaSBOb3YgMTUgMTc6Mzg6MjAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBzZWJhLmN5Z251cy5jb20+CisKKwkqIHNkYm91dC5jIChjdXJyZW50X2ZpbGUpOiBOZXcgZ2xvYmFsLgorCShQVVRfU0RCX1NSQ19GSUxFKTogTmV3IFBVVF9TREJfRk9PIG1hY3JvLgorCShzZGJvdXRfaW5pdCk6IEluaXRpYWxpemUgY3VycmVudF9maWxlIGlmZGVmIE1JUFNfREVCVUdHSU5HX0lORk8uCisJKHNkYm91dF97c3RhcnRfbmV3LHJlc3VtZV9wcmV2aW91c31fc291cmNlX2ZpbGUpOiBOZXcgZnVuY3Rpb25zLgorCSogdG9wbGV2LmMgKGRlYnVnX3tzdGFydCxlbmR9X3NvdXJjZV9maWxlKTogQ2FsbCB0aGVtIGlmIFNEQl9ERUJVRy4KKwkqIG1pcHMuaCAoUFVUX1NEQl9TUkNfRklMRSk6IERlZmluZS4KKworRnJpIE5vdiAxNSAxNjoxMToyNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2xpbmUpOiBEb24ndCBlbWl0IGxpbmUgbnVtYmVyIGluZm8gZm9yCisJZnVuY3Rpb25zIG91dHNpZGUgb2YgLnRleHQuCisKK0ZyaSBOb3YgMTUgMTU6NTI6NDIgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYvMzg2YnNkLmggKENPTU1FTlRfQkVHSU4pOiBEZWxldGUuCisJKiBpMzg2L2ZyZWVic2QuaCAoQ09NTUVOVF9CRUdJTik6IExpa2V3aXNlLgorCSogaTM4Ni9uZXRic2QuaCAoQ09NTUVOVF9CRUdJTik6IExpa2V3aXNlLgorCSogaTM4Ni91bml4LmggKENPTU1FTlRfQkVHSU4pOiBMaWtld2lzZS4KKworRnJpIE5vdiAxNSAxMzoyMjo0MiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGZvbGQtY29uc3QuYyAodW5leHRlbmQpOiBSZXdyaXRlIHR5cGUgY29udmVyc2lvbnMgdG8gYXZvaWQgb3ZlcmZsb3cuCisKK0ZyaSBOb3YgMTUgMTI6MTE6MjggMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFByb3Blcmx5IGNvcHkgYW4gcnR2ZWMuCisJKiBlbWl0LXJ0bC5jIChnZW5fcnR2ZWNfdnYpOiBOZXcgZnVuY3Rpb24uCisJKGNvcHlfcnR4X2lmX3NoYXJlZCk6IENhbGwgaXQuCisJKiBpbnRlZ3JhdGUuYyAoY29weV9mb3JfaW5saW5lKTogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogTGlrZXdpc2UuCisJKiBydGwuaCAoZ2VuX3J0dmVjX3Z2KTogRGVjbGFyZS4KKwkqIGdlbmF0dHJ0YWIuYyAoc2ltcGxpZnlfY29uZCk6IE1ha2UgVEVTVFMgYW4gYXJyYXkgb2YgcnR1bmlvbnMuCisJKiBnZW5leHRyYWN0LmMgKG1haW4pOiBVc2UgbG9vcCwgbm90IGJjb3B5LCB0byBzZXQgcmVjb2dfb3BlcmFuZHMKKwlmcm9tIGFuIHJ0dmVjLgorCSogcnRsLmMgKHJ0dmVjX2FsbG9jKTogQ2xlYXIgcnR3aW50IGluc3RlYWQgb2YgcnR2ZWMuCisKKwkqIG1hY2htb2RlLmggKEhPU1RfUFRSX1BSSU5URik6IEhhbmRsZSBjaGFyICogd2lkZXIgdGhhbiBsb25nLgorCShIT1NUX1dJREVfSU5UX1BSSU5UX3tERUMsVU5TSUdORUQsSEVYLERPVUJMRV9IRVh9KTogTmV3IG1hY3Jvcy4KKwkqIGZpbmFsLmMgKGFzbV9mcHJpbnRmKTogVXNlICJsbCIgcHJlZml4IGZvciBhIGxvbmcgbG9uZyBIT1NUX1dJREVfSU5ULgorCShvdXRwdXRfe2FzbV9pbnNuLGFkZHJfY29uc3R9KTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfKi4KKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZXssX2JyaWVmfSwgY2FzZSBJTlRFR0VSX0NTVCk6IExpa2V3aXNlLgorCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCwgY2FzZSAndycpOiBVc2UgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMuCisKKwkqIHVucm9sbC5jIChpdGVyYXRpb25faW5mbyk6IEZpeCBjb2RlIHNvIHRoYXQgaXQga25vd3MgaXRlcmF0aW9uX3ZhcgorCWlzIGEgSE9TVF9XSURFX0lOVCwgbm90IGEgbG9uZy4KKworCSogZm9sZC1jb25zdC5jIChvcGVyYW5kX2VxdWFsX3ApOiBEbyByZWFsIGNvbXBhcmlzb24gd2l0aAorCVJFQUxfVkFMVUVTX0VRVUFMLgorCShtYWtlX3JhbmdlKTogUHJvcGVybHkgZGVjaWRlIHdoZW4gdG8gZ2V0IFRSRUVfVFlQRSBvZiBhcmcwLgorCUhhbmRsZSBFWFAgYmVpbmcgYW4gSU5URUdFUl9DU1QgYXQgZW5kLgorCShmb2xkX3JhbmdlX3Rlc3QpOiBIYW5kbGUgcmV0dXJuIG9mIDAgZnJvbSBtYWtlX3JhbmdlLgorCShmb2xkLCBjYXNlIFRSVVRIX0FORF9FWFBSKTogSGFuZGxlIGZpcnN0IGFyZyBvZiAwLgorCShmb2xkLCBjYXNlIFRSVVRIX09SX0VYUFIpOiBIYW5kbGUgZmlyc3QgYXJnIG9mIDEuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcywgY2FzZSBBX0FMSUFTKTogQWRkIG1pc3NpbmcgcGFyZW5zLgorCitGcmkgTm92IDE1IDA2OjM3OjU0IDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX2Jpbm9wKTogU2V0IFNORzEgdG8gemVybyBpZiBBUkcxIGlzIGEKKwlub3QgYSBsb3dlciBvciB1cHBlciBib3VuZC4KKworVGh1IE5vdiAxNCAyMzowODoyNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGZsYWdzLmggKGRlYnVnX2luZm9fdHlwZSk6IEFkZCBEV0FSRjJfREVCVUcuCisJKiB0b3BsZXYuYyAobWFpbik6IFN1cHBvcnQgRFdBUkYyX0RFQlVHLiAgQWRkIC1nZHdhcmYtMSwgLWdkd2FyZi0yCisgCW9wdGlvbnMuICBDaGVjayBkZWJ1ZyBsZXZlbCBhZnRlciBjaG9vc2luZyB0eXBlLgorCShkZWJ1Z197c3RhcnQsZW5kfV9zb3VyY2VfZmlsZSwgZGVidWdfe2RlZmluZSx1bmRlZn0pOiBOZXcgZnVuY3Rpb25zLgorCShjb21waWxlX2ZpbGUpOiBTdXBwb3J0IGR3YXJmMiBzZXBhcmF0ZWx5IGZyb20gZHdhcmYxLiAKKwkocmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uLCByZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgorCShmaW5hbF9lbmRfZnVuY3Rpb24sIGZpbmFsX3NjYW5faW5zbiwgb3V0cHV0X3NvdXJjZV9saW5lKTogTGlrZXdpc2UuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBMaWtld2lzZS4KKwkqIGR3YXJmb3V0LmM6IERvbid0IGNoZWNrIERXQVJGX1ZFUlNJT04uCisJKiBkd2FyZjJvdXQuYzogcy9kd2FyZm91dC9kd2FyZjJvdXQvZy4gIENoZWNrIERXQVJGMl9ERUJVR0dJTkdfSU5GTy4KKwkqIGMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBVc2UgZGVidWdfKiBpbnN0ZWFkIG9mIGNhbGxpbmcgKm91dAorIAlmdW5jdGlvbnMgZGlyZWN0bHkuCisJKiBzdnI0LmggKERXQVJGMl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KKwkqIG1pcHMvaXJpczYuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRFdBUkYyX0RFQlVHLgorCShEV0FSRjJfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUgaW5zdGVhZCBvZiBEV0FSRl9ERUJVR0dJTkdfSU5GTy4KKwkoTElOS19TUEVDKTogUGFzcyAtdyB0aHJvdWdoLgorCSogbWlwcy5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBEb24ndCBjaGVjayBgbGVuJy4KKworVGh1IE5vdiAxNCAxNzoyNTo0NyAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKyAJKiBoODMwMC5jIChkb3NpemUpOiBEb24ndCBjbG9iYmVyIHN0YXRpYyBjaGFpbiByZWcgaWYgbmVlZGVkIGJ5CisJY3VycmVudCBmdW5jdGlvbi4KKworV2VkIE5vdiAxMyAxNzowNToxOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChzdGFnZT8tc3RhcnQpOiBLZWVwIGEgY29weSBvZiBFWFRSQV9NVUxUSUxJQl9QQVJUUworCWluIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1R1ZSBOb3YgMTIgMjM6MTc6MTcgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5jIChwcmludF9vcGVyYW5kLCBjYXNlICdZJyk6IEZpeCBjb21wYXJpc29ucyB0byBoYW5kbGUKKwlOYU5zIHByb3Blcmx5IGluIGFsbCBjYXNlcy4KKworVHVlIE5vdiAxMiAxODo0NzoyNCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZW1pdF9ncm91cF9zdG9yZSk6IEZvciBSRUcgY2FzZSwgY2FsbCBnZW5fbG93cGFydCBpZgorCW1vZGVzIGFyZSBkaWZmZXJlbnQuCisKK1R1ZSBOb3YgMTIgMTg6MjQ6NDAgMTk5NiAgRG91ZyBSdXBwICAocnVwcEBnbmF0LmNvbSkKKworCSogZ2NjLmMgKGV4aXQpOiBJZiBWTVMsIGRlZmluZSBhcyBfX3Bvc2l4X2V4aXQuCisJKG9wdGlvbl9tYXApOiBBZGQgZGVmaW5lLW1hY3JvIGFuZCB1bmRlZmluZS1tYWNyby4KKworVHVlIE5vdiAxMiAxNzo1NToxMCAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAdGVnZS5wZGMua3RoLnNlPgorCisJKiBhbHBoYS5jIChpbnB1dF9vcGVyYW5kKTogSWYgVEFSR0VUX0JZVEVfT1BTIGFjY2VwdCBISW1vZGUgYW5kIFFJbW9kZS4KKwkqIGFscGhhLmggKE1BU0tfQllURV9PUFMpOiBOZXcgZGVmaW5lLgorCShUQVJHRVRfQllURV9PUFMpOiBOZXcgZGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBIYW5kbGUgLW1ieXRlLgorCShMT0FEX0VYVEVORF9PUCk6IFdoZW4gTU9ERSBpcyBub3QgU0ltb2RlLCByZXR1cm4gWkVST19FWFRFTkQuCisJKiBhbHBoYS5tZCAoemVyb19leHRlbmRxaWRpMik6IEhhbmRsZSBUQVJHRVRfQllURV9PUFMuCisJKHplcm9fZXh0ZW5kaGlkaTIpOiBMaWtld2lzZS4KKwkoemVyb19leHRlbmRxaXNpMik6IExpa2V3aXNlLgorCSh6ZXJvX2V4dGVuZGhpc2kyKTogTGlrZXdpc2UuCisJKGV4dGVuZHFpc2kyKTogVXNlIGV4dGVuZHFpZGkyeCBpZiBUQVJHRVRfQllURV9PUFMuCisJKGV4dGVuZHFpZGkyKTogTGlrZXdpc2UuCisJKGV4dGVuZHFpZGkyeCk6IE5ldyBwYXR0ZXJuLgorCShleHRlbmRoaXNpMik6IFVzZSBleHRlbmRoaWRpMnggaWYgVEFSR0VUX0JZVEVfT1BTLgorCShleHRlbmRoaWRpMik6IExpa2V3aXNlLgorCShleHRlbmRoaWRpMngpOiBOZXcgcGF0dGVybi4KKwkobW92aGkpOiBIYW5kbGUgVEFSR0VUX0JZVEVfT1BTLgorCShtb3ZoaSBtYXRjaGVyKTogT3V0cHV0IGxkd3UgYW5kIHN0dy4KKwkobW92cWkpOiBIYW5kbGUgVEFSR0VUX0JZVEVfT1BTLgorCShtb3ZxaSBtYXRjaGVyKTogT3V0cHV0IGxkYnUgYW5kIHN0Yi4KKworVHVlIE5vdiAxMiAxNjo1MzozNyAxOTk2ICBSb2IgU2F2b3llICA8cm9iQGNoaW5hZG9sbC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKGhwcGExLjEtcHJvKiwgaTk2MC0qLWNvZmYqLG02OGstKi1hb3V0Kik6IEFkZCBsaWJnbG9zcy5oLgorCShtNjhrLSotY29mZiosIG1pcHMqLSotZWxmKiwgc3BhcmMqLSotYW91dCosIHNwYXJjKi0qLWNvZmYqKTogTGlrZXdpc2UuCisJKiBjb25maWcvbGliZ2xvc3MuaDogTmV3IGZpbGUuCisKK1R1ZSBOb3YgMTIgMTY6MjE6NDUgMTk5NiAgSm9lcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvbT4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRml4IGJ1ZyBpbiBTZXAgMjMgY2hhbmdlLgorCitUdWUgTm92IDEyIDE2OjE1OjMxIDE5OTYgIEFuZHJldyBDYWduZXkgIChjYWduZXlAdHBnaS5jb20uYXUpCisKKwkqIGdsb2JhbC5jIChwcnVuZV9yZWZlcmVuY2VzKTogQWRkIG1pc3Npbmcgc3ltbWV0aWMgQ09ORkxJQ1RQIGNhbGwuCisKK1R1ZSBOb3YgMTIgMTQ6MzQ6NDAgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fe3BybyxlcGl9bG9ndWUpOiBTYXZlIGFuZCByZXN0b3JlCisJZnAtcmVnaXN0ZXJzIG9ubHkgaWYgVEFSR0VUXzY4ODgxLgorCisJKiBtNjhrL21vdDMzMDAuaCAoQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCk6IFByZWZpeCBsYWJlbHMgd2l0aCAiTCUiLgorCShBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwsIEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCk6IExpa2V3aXNlLgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCwgQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogTGlrZXdpc2UuCisKKwkqIG02OGsvbW90MzMwMC5oIChUQVJHRVRfREVGQVVMVCk6IFVzZSBNQVNLXzY4MDQwX0FMU08sIG5vdCBNQVNLXzY4MDQwLgorCSogbTY4ay9uZXh0LmgsIG02OGsvY2N1ci1HQVMuaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KKworCSogZml4cHJvdG8gKHN0ZF9maWxlcyk6IEFkZCBzeXMvc29ja2V0LmguCisKKwkqIG02OGsubWQgKG1vdnFpKTogRW1pdCAnc3QnIGZvciBJTlRWQUwgJiAyNTUgPT0gMjU1LCBub3QgSU5UVkFMID09IC0xLgorCShzZXEsc25lLHNndCxzZ3R1LHNsdCxzbHR1LHNnZSxzZ2V1LHNsZSxzbGV1KTogQWxsb3cgIm0iIGFzIG9wZXJhbmQgMC4KKworVHVlIE5vdiAxMiAxNDoxNzo0NSAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogR2VuZXJhdGUgYSB3YXJuaW5nIGlmIC1XaW1wbGljaXQsCisJdW5sZXNzIGEgd2FybmluZyB3YXMgYWxyZWFkeSBnZW5lcmF0ZWQgYnkgLVdyZXR1cm4tdHlwZS4KKworVHVlIE5vdiAxMiAxNDoxMTowMiAxOTk2ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KKworCSogTWFrZSBxc29ydCBjYWxsYmFjayByb3V0aW5lcyBjb25mb3JtIHRvIHRoZSBBTlNJL0lTTyBzdGFuZGFyZC4KKwkqIGMtZGVjbC5jIChmaWVsZF9kZWNsX2NtcCk6IFVzZSBgY29uc3Qgdm9pZCAqJyBhcmd1bWVudHMuCisJKiBnbG9iYWwuYyAoYWxsb2Nub19jb21wYXJlKTogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMgKGhhcmRfcmVnX3VzZV9jb21wYXJlLCBjb21wYXJlX3NwaWxsX3JlZ3MpOiBMaWtld2lzZS4KKwkocmVsb2FkX3JlZ19jbGFzc19sb3dlcik6IExpa2V3aXNlLgorCSogc3R1cGlkLmMgKHN0dXBpZF9yZWdfY29tcGFyZSk6IExpa2V3aXNlLgorCSogbG9jYWwtYWxsb2MuYyAocXR5X2NvbXBhcmVfMSwgcXR5X3N1Z2dfY29tcGFyZV8xKTogTGlrZXdpc2UuCisJKFFUWV9DTVBfUFJJLCBRVFlfQ01QX1NVR0cpOiBOZXcgbWFjcm9zLgorCShxdHlfY29tcGFyZV8xLCBxdHlfc3VnZ19jb21wYXJlXzEpOiBVc2UgdGhlbS4KKworVHVlIE5vdiAxMiAxMzoyMDoyNSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGZvbGQtY29uc3QuYyAobWVyZ2VfcmFuZ2VzKTogSW4gKCssLSkgY2FzZSwgdHJlYXQgc3Vic2V0IHNwZWNpYWxseQorCWlmIGxvd2VyIGJvdW5kcyBhcmUgdGhlIHNhbWUuCisKK1R1ZSBOb3YgMTIgMTM6MTA6MDEgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQGN5Z251cy5jb20+CisKKwkqIG02OGsubWQgKGFkZHNpMyk6IElmIFRBUkdFVF81MjAwLCB1c2UgdGhlIGxlYSBpbnNuIHRvIGFkZCBzbWFsbAorCWNvbnN0YW50cyB0byBhZGRyZXNzIHJlZ2lzdGVycy4KKwkobmVnc2kyKTogQ2hhbmdlIGludG8gZGVmaW5lX2V4cGFuZC4KKwkobmVnc2kyX2ludGVybmFsKTogUmVuYW1lIGZyb20gb2xkIG5lZ3NpMiwgY2hhbmdlZCBjb25kaXRpb24KKwl0byAhVEFSR0VUXzUyMDAuCisJKG5lZ3NpMl81MjAwKTogTmV3IGluc24uCisJKG9uZV9jbXBsc2kyKTogQ2hhbmdlIGludG8gZGVmaW5lX2V4cGFuZC4KKwkob25lX2NtcGxzaTJfaW50ZXJuYWwpOiBSZW5hbWUgZnJvbSBvbGQgb25lX2NtcGxzaTIsIGNoYW5nZWQKKwljb25kaXRpb24gdG8gIVRBUkdFVF81MjAwLgorCShvbmVfY21wbHNpMl81MjAwKTogTmV3IGluc24uCisJKG5lZ2RpMl81MjAwKTogQ29ycmVjdGVkIGNvbnN0cmFpbnRzLgorCShvbmVfY21wbGRpMik6IENoYW5nZWQgY29uZGl0aW9uIHRvICFUQVJHRVRfNTIwMC4KKworCSogbTY4ay5jIChtNjhrX2FsaWduX2xvb3BzX3N0cmluZywgbTY4a19hbGlnbl9qdW1wc19zdHJpbmcpOiBOZXcgdmFycy4KKwkobTY4a19hbGlnbl9mdW5jc19zdHJpbmcsIG02OGtfYWxpZ25fbG9vcHMpOiBMaWtld2lzZS4KKwkobTY4a19hbGlnbl9qdW1wcywgbTY4a19hbGlnbl9mdW5jcyk6IExpa2V3aXNlLgorCShvdmVycmlkZV9vcHRpb25zKTogTmV3IGZ1bmN0aW9uLgorCSogbTY4ay5oIChUQVJHRVRfT1BUSU9OUyk6IEFkZGVkIGFsaWdubWVudCBvcHRpb25zLgorCShNQVhfQ09ERV9BTElHTiwgQVNNX09VVFBVVF9MT09QX0FMSUdOLCBBU01fT1VUUFVUX0FMSUdOX0NPREUpOgorCU5ldyBtYWNyb3MuCisJKEZVTkNUSU9OX0JPVU5EQVJZKTogVXNlIHZhbHVlIGRlcnJpdmVkIGZyb20gIG02OGtfYWxpZ25fZnVuY3MKKwlpbnN0ZWFkIG9mIGNvbnN0YW50LgorIAorCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fe3BybyxlcGl9bG9ndWUpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworVHVlIE5vdiAxMiAwOToyNjo1MSAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAd29tYmF0LmdudS5haS5taXQuZWR1PgorCisJKiBpMzg2Lm1kIChwYXJhbGxlbCBpbmMvZGVjIGFuZCBicmFuY2gtaWYtemVyby9ub256ZXJvKTogVXNlIGArJyBpbgorCWNvbnN0cmFpbnQuCisKK01vbiBOb3YgMTEgMTU6MTI6MjIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisgICAgICAgICogbGliZ2NjMi5jOiBBbHNvIGRlZmluZSBXRUFLX0FMSUFTIGlmIEFTTV9PVVRQVVRfV0VBS19BTElBUy4KKwkqIG1pcHMvaXJpczYuaCAoQVNNX09VVFBVVF9XRUFLX0FMSUFTKTogRGVmaW5lLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX2FsaWFzKTogVXNlIEFTTV9PVVRQVVRfV0VBS19BTElBUy4KKworCSogZHdhcmYyb3V0LmMgKFRZUEVfVVNFRF9GT1JfRlVOQ1RJT04pOiBMb3NlLgorCShnZW5fY29tcGlsZV91bml0X2RpZSk6IE9ubHkgYXBwZW5kIC1nIHdpdGggLWcyIG9yIGJldHRlci4KKwkoc2NvcGVfZGllX2Zvcik6IERvbid0IGVtaXQgYW55IHR5cGUgaW5mbyB3aXRoIC1nMS4KKwkoZ2VuX3N1YnByb2dyYW1fZGllKTogTGlrZXdpc2UuCisJKGdlbl9kZWNsX2RpZSk6IExpa2V3aXNlLgorCShkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wpOiBMaWtld2lzZS4KKwkoZHdhcmZvdXRfaW5pdCk6IExpa2V3aXNlLgorCisJKiBtaXBzL2lyaXM2LmggKFRZUEVfQVNNX09QKTogRGVmaW5lLgorCShTSVpFX0FTTV9PUCk6IERlZmluZS4KKwkoQVNNX1dFQUtFTl9MQUJFTCk6IERlZmluZS4KKwkoQlNTX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0FMSUdORURfTE9DQUwpOiBEb24ndCB1c2UgQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUuCisJKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBEZWZpbmUuCisJKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FKTogUmVkZWZpbmUgdG8gZW1pdCAuc2l6ZSBkaXJlY3RpdmUuCisJKEFTTV9GSU5JU0hfREVDTEFSRV9PQkpFQ1QpOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfREVGKTogRG9uJ3QgZGVmaW5lLgorCitGcmkgTm92ICA4IDIwOjM4OjUxIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IEhhbmRsZSBCTEttb2RlIHN0cnVjdHVyZXMgcmV0dXJuZWQKKwlpbiByZWdpc3RlcnMuCisKK0ZyaSBOb3YgIDggMjA6Mjc6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogQ2hlY2sgZm9yIFZBUl9ERUNMIGluc3RlYWQgCisJb2YgVFJFRV9TVEFUSUMuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IERvIHdyaXRlIG91dCBEV0FSRiBmb3IgCisJcmVjb3JkLXNjb3BlIHZhcmlhYmxlcy4KKwkqIHRvcGxldi5jIChyZXN0X29mX3R5cGVfY29tcGlsYXRpb24pOiBEbyB3cml0ZSBvdXQgRFdBUkYgZm9yCisgCXJlY29yZC1zY29wZSB0eXBlcy4KKworCSogZHdhcmYyb3V0LmMgKGdlbl9lbnVtZXJhdGlvbl90eXBlX2RpZSk6IFNldCBUUkVFX0FTTV9XUklUVEVOIG9uIGEKKwljb21wbGV0ZSBlbnVtIHR5cGUuCisJKGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBEb24ndCByZWN1cnNlIGJldHdlZW4gbmVzdGVkIGNsYXNzZXMuCisJKGdlbl90eXBlX2RpZSk6IFdyaXRlIG91dCBuZXN0ZWQgY2xhc3NlcyBieSB3cml0aW5nIG91dCB0aGVpciBjb250ZXh0LgorCitGcmkgTm92ICA4IDE3OjQwOjI3IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGNoYW5nZV9hZGRyZXNzKTogSWYgTUVNUkVGIGlzbid0IGNoYW5naW5nLAorCXJldHVybiB0aGUgb2xkIG9uZS4KKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IFJlbW92ZSBib2d1cyByZXNldHRpbmcgb2YgYWxpZ25tZW50CisJdG8gaW5uZXIgYWxpZ25tZW50LgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogTGlrZXdpc2UuCisKK0ZyaSBOb3YgIDggMTY6MzE6MzEgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIHJlZy1zdGFjay5jIChjb21wYXJlX2Zvcl9zdGFja19yZWcsIHN1YnN0X3N0YWNrX3JlZ3NfcGF0KTogCisJQWRkIHN1cHBvcnQgZm9yIGZsb2F0IGNvbmRpdGlvbmFsIG1vdmUuCisKK1RodSBOb3YgIDcgMDc6NDY6MDcgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IFRyZWF0IGNvbnN0YW50IHNpemUgYXMgdmFyaWFibGUgaWYKKwlpdCBvdmVyZmxvd3MuCisJKiBmb2xkLWNvbnN0LmMgKGNvbnN0X2Jpbm9wLCBjYXNlICpfRElWX0VYUFIpOiBEb24ndCBkbyBzcGVjaWFsCisJc2l6ZXR5cGUgY2FzZSBpZiBhIGNvbnN0YW50IG92ZXJmbG93cy4KKwkoc2l6ZV9iaW5vcCk6IFVzZSBpbnRlZ2VyX3t6ZXJvLG9uZX1wIGluc3RlYWQgb2YgZXhwbGljaXQgdGVzdC4KKwkqIHRyZWUuYyAoaW50ZWdlcl97emVybyxvbmUsYWxsX29uZXMscG93Mn1wLCByZWFsX3t6ZXJvLG9uZSx0d299cCk6CisJUmV0dXJuIDAgaWYgVFJFRV9DT05TVEFOVF9PVkVSRkxPVy4KKworV2VkIE5vdiAgNiAxNzo1MzozMyAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAd29tYmF0LmdudS5haS5taXQuZWR1PgorCisJKiBpMzg2Lm1kIChwYXJhbGxlbCBpbmMgYW5kIGJyYW5jaC1pZi16ZXJvL25vbnplcm8pOiBBZGQgdHdvCisJbmV3IHBhdHRlcm4gdmFyaWFudHMuICBDaGFuZ2UgaW5jcmVtZW50aW5nIHBhdHRlcm4gdG8gdXNlIGluY2wvam56LgorCitXZWQgTm92ICA2IDA5OjQ2OjEwIDE5OTYgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2LmMgKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgZGVmYXVsdHMgZm9yIC1tYXJjaCBhbmQgLW1jcHUuCisJKG91dHB1dF9mbG9hdF9jb21wYXJlKTogVXNlIGNjX3N0YXR1cy5mbGFncyB0byBtYXJrIGlmIHRoaXMKKwljb21wYXJpc29uIGNhbiBiZSBkb25lIHdpdGggZmNvbWkuCisJKG91dHB1dF9mcF9jYzBfc2V0KTogQSBjb25kaXRpb25hbCBtb3ZlIG1heSBiZSBpbiBhIFBBUkFMTEVMLgorCisJKiBpMzg2LmggKENDX0ZDT01JKTogRGVmaW5lCisKKwkqIGkzODYubWQgKHNndCxzZ3R1LHNnZSxzbGUsYmd0LGJsdCxiZ2UsYmxlKTogVXNlIENDX0ZDT01JCisJKG1vdnNpY2NfMSxtb3ZoaWNjXzEpOiBVc2UgY29ycmVjdCBzaXplIHN1ZmZpeC4KKwkobW92c2ZjY18xLG1vdmRmY2NfMSk6IENsZWFudXAgZGVmYXVsdCBtb3ZlIGNhc2UuCisKK1dlZCBOb3YgIDYgMDk6NDY6MTAgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBpMzg2LmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IElmIGxvbmcgZG91YmxlIGlzbid0IFhGbW9kZSwgY2FuJ3QKKwlhbGxvdyBYRm1vZGUuCisKK1R1ZSBOb3YgIDUgMjI6NDk6NTYgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBzaC5tZCAoZGVmaW5lX3NwbGl0IGZvciBhbmRfc2hsX3NjcmF0Y2gpOgorCVVzZSBydHhfZXF1YWxfcCBvbiB0aGUgb3BlcmFuZHMgdG8gZmluZCBvdXQgd2hpY2ggYWx0ZXJuYXRpdmUgaXMgdXNlZC4KKwkqIHNoLmMgKGdlbl9zaGxfYW5kKTogVHJ5IHRvIGdlbmVyYXRlIHNob3J0ZXIgY29uc3RhbnQgZm9yIGFuZC4KKworTW9uIE5vdiAgNCAxOToxMzo1MiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jOiBDbGVhbiB1cCB1bnVzZWQgdmFyaWFibGVzLgorCVVzZSBBU01fe0dFTkVSQVRFLE9VVFBVVH1fSU5URVJOQUxfTEFCRUwsIHNob3J0ZW4gbGFiZWwgbmFtZXMuCisgCShsb2NfZGVzY3JpcHRvcik6IFVzZSByZWdfbG9jX2Rlc2NyaXB0b3IuCisJKFRZUEVfREVDTF9JU19TVFVCKTogTmV3IG1hY3JvLgorCShnZW5fZGVjbF9kaWUpOiBVc2UgaXQuCisJKGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6IFVzZSBpdC4KKworTW9uIE5vdiAgNCAxMDoyMzo0NiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3ZhLXBwYy5oIChfX3ZhX3JlZ3NhdmVfdCx2YV9zdGFydCx2YV9lbmQpOiBXcmFwIG1hY3JvCisJYW5kIHN0cnVjdHVyZXMgaW5zaWRlICNpZm5kZWYgX19WQV9QUENfSF9fIHRvIGFsbG93IHJlaW5jbHVzaW9uLgorCisJKiByczYwMDAvcnM2MDAwLmggKExFR0lUSU1BVEVfU01BTExfREFUQV9QKTogRG9uJ3QgYWxsb3cgLWZwaWMgb3IKKwlUQVJHRVRfVE9DLgorCShMRUdJVElNQVRFX0xPX1NVTV9BRERSRVNTX1ApOiBEaXR0by4KKwkoTEVHSVRJTUlaRV9BRERSRVNTKTogRGl0dG8uCisKKwkqIHJzNjAwMC9yczYwMDAubWQgKG1vdnNpKTogRG9uJ3QgY2FsbCBlbGZfe2hpZ2gsbG93fSBpZiAtZnBpYy4KKworCSogcnM2MDAwL2N5Z3dpbjMyLmggKFNUQVJURklMRV9TUEVDKTogRWxpbWluYXRlIGVtcHR5ICV7fS4KKworU3VuIE5vdiAgMyAxNTo1NjozNSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9zeXN2NC5oIChUQVJHRVRfVE9DKTogUGxhaW4gLWZwaWMgZG9lcyBub3QgcmVxdWlyZSBhIFRPQy4KKwkoe01JTklNQUxfVE9DLENPTlNUfV9TRUNUSU9OX0FTTV9PUCk6IC1mcGljIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UKKwktbXJlbG9jYXRhYmxlIGluIHRoZXNlIGNhc2VzLgorCShBU01fT1VUUFVUX0lOVCk6IERpdHRvLgorCShBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERpdHRvLgorCShBU01fT1VUUFVUX0FMSUdORURfTE9DQUwpOiBVc2Ugc2RhdGFfc2VjdGlvbiwgbm90IHNic3Nfc2VjdGlvbi4KKworRnJpIE5vdiAgMSAxOTo1NzoxMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChiYXNlZF9sb2NfZGVzY3IpOiBVc2UgREJYX1JFR0lTVEVSX05VTUJFUi4gIFRoZSAKKwkiZnJhbWUgYmFzZSIgaXMganVzdCB0aGUgZnJhbWUgb3Igc3RhY2sgcmVnIHdpdGhvdXQgYW4gb2Zmc2V0LgorCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBMaWtld2lzZS4KKwkoZHdhcmZvdXRfYmVnaW5fZnVuY3Rpb24pOiBVc2UgREJYX1JFR0lTVEVSX05VTUJFUi4KKworRnJpIE5vdiAgMSAwOTo1MDowNSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKG1ha2VfcmFuZ2UpOiBEb24ndCBtZXJnZSB1bnNpZ25lZCBjYXNlIHdpdGggcmFuZ2UKKwljb250YWluaW5nIHVwcGVyIGJvdW5kOyBpbnN0ZWFkIG1lcmdlIGp1c3Qgd2l0aCB6ZXJvIGFuZCBjb252ZXJ0CisJYSByYW5nZSB3aXRoIG5vIHVwcGVyIGJvdW5kIHRvIG9wcG9zaXRlIG9uZSB3aXRoIG5vIGxvd2VyIGJvdW5kLgorCShtZXJnZV9yYW5nZXMpOiBJbiAoKywtKSBjYXNlLCBkb24ndCB0cmVhdCBzdWJzZXQgc3BlY2lhbGx5IGlmCisJdGhlIHVwcGVyIGJvdW5kcyBhcmUgdGhlIHNhbWU7IGZpeCB0eXBvIGluIG90aGVycyBjYXNlIGhlcmUuCisKK1RodSBPY3QgMzEgMjA6MTI6MTMgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBmb2xkLWNvbnN0LmMgKG1ha2VfcmFuZ2UsIGNhc2UgUExVU19FWFBSKTogQ29ycmVjdAorCW5vcm1hbGl6YXRpb24gb2YgYW4gdW5zaWduZWQgcmFuZ2UgdGhhdCB3cmFwcyBhcm91bmQgemVyby4KKworVGh1IE9jdCAzMSAyMTowNjozNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIG1pcHMvdC1pcmlzNiAoRVhUUkFfTVVMVElMSUJfUEFSVFMpOiBEZWZpbmUuCisJKEVYVFJBX1BBUlRTKTogRG9uJ3QgZGVmaW5lLgorCisJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IFVzZSBBVF9zcGVjaWZpY2F0aW9uCisJZm9yIG5lc3RlZCB0eXBlcyBkZWZpbmVkIG91dHNpZGUgdGhlaXIgY29udGFpbmluZyBjbGFzcy4gIExvc2UgCisJaXNfY29tcGxldGUuCisJKGdlbl9lbnVtZXJhdGlvbl90eXBlX2RpZSk6IExvc2UgaXNfY29tcGxldGUuCisJKGdlbl90eXBlX2RpZSk6IExvc2UgaXNfY29tcGxldGUuCisJKGFkZF9uYW1lX2FuZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMpOiBUd2Vhay4KKwkoZ2VuX3N1YnJvdXRpbmVfdHlwZV9kaWUpOiBVc2Ugc2NvcGVfZGllX2Zvci4KKwkoZ2VuX3B0cl90b19tYnJfdHlwZV9kaWUpOiBMaWtld2lzZS4KKwkoZ2VuX3N1YnByb2dyYW1fZGllKTogU3VwcG9ydCBBVF9hcnRpZmljaWFsLgorCShnZW5fdmFyaWFibGVfZGllKTogTGlrZXdpc2UuCisJKGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6IExvc2UgZmluYWxpemluZy4KKworVGh1IE9jdCAzMSAxODo0MzoxOCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBSZWZpbmUgcHJldmlvdXMgY2hhbmdlLgorCitUaHUgT2N0IDMxIDEzOjI1OjMyIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogY3J0c3R1ZmYuYzogUHV0IEhBU19JTklUX1NFQ1RJT04gaWZkZWZzIGFyb3VuZCBJcml4NiBzdXBwb3J0LgorCisJKiB0cmVlLmMgKGRlY2xfZnVuY3Rpb25fY29udGV4dCk6IEhhbmRsZSBRVUFMX1VOSU9OX1RZUEUuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRGlzYWJsZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBjb25zdCBjYWxscworCXRoYXQgcmV0dXJuIGEgUEFSQUxMRUwgcnR4LgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUik6IERvbid0IHVzZSBhIFBBUkFMTEVMCisJdGFyZ2V0LgorCitUaHUgT2N0IDMxIDExOjQ1OjAwIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3Qte3BwY2dhcyxwcGMsc29sYXJpc30gKEVYVFJBX01VTFRJTElCX1BBUlRTKTogQWRkCisJe2Usc31jcnR7aSxuLDB9Lm8uCisJKHtzdG1wLGluc3RhbGx9LWNydCk6IERlbGV0ZSwgbm8gbG9uZ2VyIHVzZWQuCisJKHssSU5TVEFMTF99TElCR0NDKTogUmVtb3ZlIHtzdG1wLGluc3RhbGx9LWNydCBydWxlLgorCitUaHUgT2N0IDMxIDAyOjQ5OjU4IDE5OTYgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBuYWRhLmt0aC5zZT4KKworCSogaTM4Ni5tZCAocGFyYWxsZWwgaW5jIGFuZCBicmFuY2gtaWYtemVyby9ub256ZXJvKToKKwlDaGVjayBmb3IgLTEsIG5vdCB6ZXJvLgorCitXZWQgT2N0IDMwIDE1OjUwOjQ5IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAocmFuZ2VfYmlub3ApOiBTdHJpcCBOT1BzIGZyb20gcmVzdWx0IGFuZAorCXZlcmlmeSBpdCdzIGFuIElOVEVHRVJfQ1NULgorCShtYWtlX3JhbmdlLCBjYXNlIEJJVF9OT1RfRVhQUik6IEZpeCB0eXBvIGluIGNvbnN0YW50IGZvciBQTFVTX0VYUFIuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBVc2UgSE9TVF9XSURFX0lOVCBmb3Igc2l6ZS4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogRGlzYWxsb3cgbWF0Y2hpbmcgY29uc3RyYWludHMKKwlvbiBvdXRwdXQgYW5kIHZhbGlkYXRlIHRoZSBudW1iZXJzIG9uIGlucHV0cy4KKworVHVlIE9jdCAyOSAxNjoyMTo1OSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQsbWFpbik6IFByb2Nlc3MgLXNwZWNzPWZpbGUgYW5kIC1zcGVjcworCWZpbGUgYWZ0ZXIgcmVhZGluZyB0aGUgbWFpbiBzcGVjcyBmaWxlIHRvIGFsbG93IHRoZSB1c2VyIHRvCisJb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCisJKERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogQWRkIHNwZWNzIHRvIGxpc3QuCisJKG9wdGlvbl9tYXApOiBEaXR0by4KKworVHVlIE9jdCAyOSAxNTo0OToxOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChzdG1wLW11bHRpbGliKTogUGFzcyAkZmxhZ3MgdG8gcy1tLXN1YiBpbiAKKwlNVUxUSUxJQl9DRkxBR1MuCisJKHN0bXAtbXVsdGlsaWItc3ViKTogQnVpbGQgRVhUUkFfTVVMVElMSUJfUEFSVFMuCisJKCQoVCljcnQqLm8pOiBBZGQgJChUKSwgbG9zZSBzdGFtcC1jcnQgcnVsZSwgdXNlIE1VTFRJTElCX0NGTEFHUy4KKwkoaW5zdGFsbC1tdWx0aWxpYik6IEluc3RhbGwgRVhUUkFfTVVMVElMSUJfUEFSVFMuCisKK01vbiBPY3QgMjggMjA6MDk6MzkgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBzaC5tZCAoc2hsX3NleHRfZXh0KTogRG9uJ3QgYWNjZXB0IHNpbXBsZSBsZWZ0L3JpZ2h0IHNoaWZ0CisJdmFyaWFudC4KKwkqIHNoLmMgKEVYVF9TSElGVF9TSUdORUQpOiBOZXcgbWFjcm8uCisJKHNobF9zZXh0X2tpbmQsIGdlbl9zaGxfc2V4dCk6IHRyeSBsZWZ0IHNoaWZ0IC0gc2lnbiBleHRlbmQgLQorCWxlZnQgc2hpZnQgLSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0IGluIGNhc2UgMi4KKworTW9uIE9jdCAyOCAxNDo1NTo0MiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoc2gtKi0qKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBzaC4KKwkqIGNvbmZpZy9mbG9hdC1zaC5oOiBOZXcgZmlsZS4KKworTW9uIE9jdCAyOCAxNDoyNjowOCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIG1pcHMvbWlwcy5oIChSVFhfQ09TVFMpOiBBZGQgY2FzZXMgZm9yIFNJR05fRVhURU5EIGFuZAorCVpFUk9fRVhURU5ELgorCisJKiBtNjhrL2xiMXNmNjguYXNtOiBDaGFuZ2UgIyB0byBJTU0gaW4gdWRpdnNpMyBfX21jZjUyMDBfXy4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBBZGQgc29tZSBvcHRpbWl6YXRpb25zIGZvciBUUlVOQ0FURS4KKwkoZXhwYW5kX2NvbXBvdW5kX29wZXJhdGlvbik6IEFkZCBzb21lIG9wdGltaXphdGlvbnMgZm9yCisJWkVST19FWFRFTkQuCisKK01vbiBPY3QgMjggMTQ6MTE6MjAgMTk5NiAgR2F2aW4gS29jaCAgPGdhdmluQGN5Z251cy5jb20+CisgICAgICAgIAorCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwsYXNzZW1ibGVfdmFyaWFibGUpOgorCUFsbG93IG5hbWVkIHNlY3Rpb25zIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKworTW9uIE9jdCAyOCAxMzowODo1MSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBJZiByZWxvYWQgaW4gcHJvZ3Jlc3MsIHJlcGxhY2UKKwlyZWZlcmVuY2UgdG8gcHNldWRvIHdpdGggcmVmZXJlbmNlIHRvIGNvcnJlc3BvbmRpbmcgTUVNLgorCisJKiBjLXR5cGVjay5jICh7dW4sfXNpZ25lZF90eXBlKTogSWYgY2FuJ3QgZG8gYW55dGhpbmcsIGNhbGwKKwlzaWduZWRfb3JfdW5zaWduZWRfdHlwZS4KKwkoc2lnbmVkX29yX3Vuc2lnbmVkX3R5cGUpOiBJZiBhbHJlYWR5IHJpZ2h0IHNpZ25lZG5lc3MsIHJldHVybi4KKworTW9uIE9jdCAyOCAxMzowNToyNiAxOTk2ICBTdGVwaGVuIFdpbGxpYW1zIChzdGV2ZUBpY2FydXMuY29tKQorCisJKiBpOTYwLmg6IEFkZCBzcGVjaWZpY2F0aW9uIGZvciAtSnggdHlwZXMuCisJKiBpOTYwL3QtOTYwYmFyZTogSW5jbHVkZSBtdWx0aWxpYiBzdXBwb3J0IGZvciBKeCB0eXBlcy4KKworTW9uIE9jdCAyOCAxMDowNjowMCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC90LXtwcGN7LGdhc30sc29sYXJpc30gKGluc3RhbGwtY3J0KTogRGVwZW5kIG9uCisJaW5zdGFsbGRpcnMsIG5vdCBpbnN0YWxsLWRpci4KKworCSogcnM2MDAwL3N5c3Y0LmggKFRBUkdFVF9UT0MpOiAtZnBpYyBkb2VzIG5vdCB1c2UgYSBUT0MgYXJlYS4KKworTW9uIE9jdCAyOCAwOTowNzo0MiAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHJlbG9hZDEuYyAoZGVsZXRlX291dHB1dF9yZWxvYWQpOiBEb24ndCB1c2UgZGVsZXRlX2luc24KKwl3aGVuIGRlbGV0aW5nIGFsbCBzdG9yZXMgaW50byBhIHJlcGxhY2VkIHBzZXVkby4KKworCSogc2gubWQgKG1vdnNmX2llcSwgbW92c2ZfaWUpOiBNZXJnZWQgdGhlIGZvcm1lciBpbnRvIHRoZSBsYXR0ZXIuCisJQ2hhbmdlZCBtYXRjaGluZyBkZWZpbmVfc3BsaXQgYXBwcm9wcmlhdGVseS4KKwkobW92c2YpOiBDaGFuZ2VkIGFwcHJvcHJpYXRlbHkuCisJKHJlbG9hZF9pbnNmKSBEZWZpbmUuCisJKiBzaC5oIChTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogRGVmaW5lLgorCitNb24gT2N0IDI4IDA4OjM4OjIzIDE5OTYgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogZHNwMTZ4eC5oIChBU01fT1VUUFVUX0JZVEUpOiBhZGp1c3QgZGVmaW5pdGlvbiB0byBhY3R1YWwgdHlwZSBvZgorCVZBTFVFLCB3aGljaCBpcyBIT1NUX1dJREVfSU5ULgorCitNb24gT2N0IDI4IDA3OjM2OjA3IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorCisJKiBnaW5jbHVkZS9zdGRkZWYuaDogTWFrZSBzdXJlIGZpbGUgaXMgcHJvY2Vzc2VkIGlmIHNvbWUgb2YgdGhlCisJa25vd24gX19uZWVkXyogbWFjcm9zIGlzIGRlZmluZWQuCisKK1N1biBPY3QgMjcgMjE6Mzc6NTkgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQGN5Z251cy5jb20+CisKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogQWRqdXN0IFNQIHRoZW4gdXNlIG1vdm1lbCB3aXRoCisJcGxhaW4gYWRkcmVzcyBpbmRpcmVjdCBtb2RlIGZvciBUQVJHRVRfNTIwMC4KKwkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogRGlzYWJsZSBtb3ZlbWwgYW5kIHVzZSBzZXZlcmFsIG1vdmVsJ3MKKwlpbnN0ZWFkIGZvciBUQVJHRVRfNTIwMC4KKwkob3V0cHV0X2Z1bmN0aW9uX3twcm8sZXBpfWxvZ3VlKTogVXNlIGxlYSBpbnN0cnVjdGlvbiB0byBhZGp1c3QKKyAJc3RhY2sgcG9pbnRlciBmb3Igc2hvcnQgZGlzcGxhY2VtZW50cyBmb3IgVEFSR0VUXzUyMDAuCisKK1N1biBPY3QgMjcgMTU6Mjc6NDUgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBmb2xkLWNvbnN0LmMgKG1lcmdlX3Jhbmdlcyk6IEZpeCB0aGlua28vdHlwby4KKworU2F0IE9jdCAyNiAyMjowNzowNCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoY29udmVydF9tb2Rlcyk6IEJlZm9yZSByZXR1cm5pbmcgYSBjb25zdF9kb3VibGUgZm9yIGEKKwlsYXJnZSB1bnNpZ25lZCB2YWx1ZSwgemVybyBleHRlbmQgYW4gaW50ZWdlciB2YWx1ZSBpZiBuZWNlc3NhcnkuCisKK1NhdCBPY3QgMjYgMTU6MjQ6NTUgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogbTY4ay94LW1vdDMzMDAgKFhDRkxBR1MpOiBEaXNhYmxlIG5hdGl2ZSBhc3NlbWJsZXIncyBqdW1wCisJb3B0aW1pemF0aW9uIGZvciBleHByLm8gYW5kIGNwL2RlY2wuby4KKworU2F0IE9jdCAyNiAxNDowNDowOSAxOTk2ICBCZW4gSGFycmlzICA8YmpoMjFAY2FtLmFjLnVrPgorCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IEFkZCBSRUdJU1RFUl9QUkVGSVggdG8gc3RhY2sKKwlwcm9iZSBpbnN0cnVjdGlvbi4KKworU2F0IE9jdCAyNiAxMzo1OTowNSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IERlbGV0ZSByZWZlcmVuY2UgdG8KKwlub25leGlzdGFudCBtYWNybyBBTExPQ0FURV9PVVRHT0lOR19BUkdTLgorCisJKiBuZXh0LmggKENQUF9QUkVERUZJTkVTKTogQWRkIC1EX05FWFRfU09VUkNFLgorCitTYXQgT2N0IDI2IDEzOjUwOjQ5IDE5OTYgIE1hcmsgTWl0Y2hlbGwgIChtaXRjaGVsbEBjZW50ZXJsaW5lLmNvbSkKKworCSogY29uZmlndXJlIChpNDg2LW5jci1zeXN2NCopOiBVc2UgaTM4Ni9zeXN2NGdkYiBpZiBzdGFicyBhbmQgZ2FzLgorCitTYXQgT2N0IDI2IDEyOjIwOjM1IDE5OTYgIEpvaG4gRi4gQ2FyciAgPGpmY0BtaXQuZWR1PgorCisJKiBjb25maWd1cmU6IFN1cHBvcnQgLS13aXRoLWNwdT0qIGZvciBTUEFSQy4gIE9yIHRhcmdldCBkZWZhdWx0CisJdmFsdWVzIGluc3RlYWQgb2YgYWRkaW5nIHRoZW0uCisJKiBzcGFyYy5jIChjcHVfZGVmYXVsdCk6IEFkZCBlbnRyaWVzIGZvciB2OCBhbmQgc3VwZXJzcGFyYy4KKwkqIHNwYXJjLmg6IERlZmluZSBUQVJHRVRfQ1BVIHZhbHVlcyBmb3IgdjggYW5kIHN1cGVyc3BhcmMuCisKK1NhdCBPY3QgMjYgMTE6Mzg6MDEgMTk5NiAgS2FtaWwgSXNrcmEgIDxpc2tyYUBzdHVkZW50LnVjaS5hZ2guZWR1LnBsPgorCisJKiBjb2xsZWN0Mi5jIChkdW1wX2ZpbGUpOiBDYWxsIGZjbG9zZSgpIGZvciBvcGVuZWQgZmlsZXMuCisKK1NhdCBPY3QgMjYgMTE6Mjk6MjkgMTk5NiAgSiJvcm4gUmVubmVja2UgIChhbXlsYWFyQGN5Z251cy5jby51aykKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRml4IHNlY29uZCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KKworCSogc3ZyMy5oOiBGaXggdHlwbyB3aGljaCBtYWtlcyBjb21tZW50IHRleHQgYmUgbm9uLWNvbW1lbnQuCisKK0ZyaSBPY3QgMjUgMTY6MTg6MzkgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvdC13aW5udCAoTElCR0NDMSk6IERvbid0IGJ1aWxkIGxpYmdjYzEuCisJKEVYVFJBX1BBUlRTKTogQnVpbGQgY3J0aS5vLCBjcnRuLm8uCisJKHN0bXAtY3J0KTogUmVtb3ZlIG9sZCBtdWx0aWxpYiBzdXBwb3J0LgorCitUaHUgT2N0IDI0IDE1OjA5OjE0IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZm9sZC1jb25zdC5jIChtYWtlX3JhbmdlLCBjYXNlIFBMVVNfRVhQUik6IE5vcm1hbGl6ZSBhbiB1bnNpZ25lZAorCXJhbmdlIHRoYXQgd3JhcHMgYXJvdW5kIDAuCisKK1RodSBPY3QgMjQgMTQ6Mzc6MTcgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBtaXBzLm1kOiBDaGFuZ2UgcHJlZGljYXRlcyBmb3IgNjQgYml0IGFyaXRobWV0aWMgb3BlcmF0aW9ucworCXNvIHRoYXQgdGhleSBhY2NlcHQgc2lnbiBleHRlbmRlZCByZWdpc3RlcnMgYXMgb3BlcmFuZHMuCisJKGV4dGVuZHNpZGkyKTogQWNjZXB0IGhpIG9yIGxvIGFzIGlucHV0LgorCSogbWlwcy5jIChtb3ZkaV9vcGVyYW5kLCBzZV9yZWdpc3Rlcl9vcGVyYW5kLAorCXNlX3JlZ19vcl8wX29wZXJhbmQsIHNlX3Vuc19hcml0aF9vcGVyYW5kLCBzZV9hcml0aF9vcGVyYW5kLAorCXNlX25vbm1lbW9yeV9vcGVyYW5kLCBzZV9ub25pbW1lZGlhdGVfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbnMuCisJKG1pcHNfbW92ZV8yd29yZHMpOiBIYW5kbGUgYSBTSUdOX0VYVEVORCBzb3VyY2UuCisJKHByaW50X29wZXJhbmQpOiBIYW5kbGUgYSBTSUdOX0VYVEVORCBvcGVyYW5kLgorCShtaXBzX3NlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBIYW5kbGUgYSBTSUdOX0VYVEVORCBydHguCisJKiBtaXBzLmg6IERlY2xhcmUgbmV3IG1pcHMuYyBmdW5jdGlvbnMuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBuZXcgZnVuY3Rpb25zLgorCitUaHUgT2N0IDI0IDA3OjQxOjE0IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAobWFrZV9yYW5nZSwgY29tcGFyaXNvbiBjYXNlcyk6IFdoZW4gbWFraW5nIHJhbmdlCisJZm9yIHVuc2lnbmVkIHRvIG1lcmdlIGluLCB1c2UgZnVsbCByYW5nZS4KKworCSogc3Rvci1sYXlvdXQuYyAoR0VUX01PREVfQUxJR05NRU5UKTogRGVsZXRlIGRlZmluaXRpb247IGR1cGxpY2F0ZS4KKworVGh1IE9jdCAyNCAwNzoyODo1MyAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBDaGVjayBmb3Igc2Vjb25kX3JlbG9hZHJlZworCWluIFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTIC8gUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QIGNhc2UuCisKK1dlZCBPY3QgMjMgMTQ6Mjc6NDMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBjcnRzdHVmZi5jIChfX2RvX2dsb2JhbF9kdG9yc19hdXgpOiBBbGxvdyBmaW5hbGl6YXRpb24gY29kZSB0bworCWJlIHJ1biBtb3JlIHRoYW4gb25jZS4KKwkqIGxpYmdjYzIuYyAoX19kb19nbG9iYWxfZHRvcnMpOiBEaXR0by4KKwkKK1dlZCBPY3QgMjMgMjA6NDI6MjMgMTk5NiAgSm9lcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBzaC5jIChkdW1wX3RhYmxlKTogaGFuZGxlIFNGbW9kZSBhbmQgREZtb2RlLgorCShicm9rZW5fbW92ZSk6IGhhbmRsZSBzaW1wbGUgUEFSQUxMRUwuCisJKG1hY2hpbmVfZGVwZW5kZW50X3Jlb3JnLCBwYy1yZWxhdGl2ZSBtb3ZlIGdlbmVyYXRpb24pOiBMaWtld2lzZS4KKwkqIHNoLmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBhbHdheXMgdHJ1ZSBmb3IgJ0YnIC4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogYWNjZXB0IFNGbW9kZSBhbmQgREZtb2RlLgorCSogc2gubWQgKG1vdmRmX2ssIG1vdnNmX2ksIG1vdnNmX2llKTogbmV3IGFsdGVybmF0aXZlIGZvcgorCXBjLXJlbGF0aXZlIGxvYWQuCisJKG1vdnNmX2llcSk6IG5ldyBkZWZpbmVfaW5zbiB3aXRoIG1hdGNoaW5nIGRlZmluZV9zcGxpdC4KKwkobW92c2YpOiB1c2UgaXQgd2hlcmUgYXBwcm9wcmlhdGUuCisJKGNvbnN0dGFibGVfc2YsIGNvbnN0dGFibGVfZGYpOiBuZXcgZGVmaW5lX2luc25zLgorCitXZWQgT2N0IDIzIDE3OjQ4OjMyIDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBzdnI0LmggKE1BS0VfREVDTF9PTkVfT05MWSk6IEZpeCB0eXBvIGluIHVzZSBvZiBtYWNybyBwYXJhbWV0ZXIuCisKK1dlZCBPY3QgMjMgMTc6NDY6MTMgMTk5NiAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CisKKwkqIGNleHAueSAoeXlsZXgpOiBDYXN0IHN0cmluZyBsaXRlcmFsIHRvIFVfQ0hBUiogZm9yIGxvb2t1cCgpIGNhbGwuCisKK1dlZCBPY3QgMjMgMTQ6NTA6MDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBFeHBhbmQgY2xlYW51cHMuICBNYWtlIHN1cmUgd2UgZ2V0IGEKKyAJcHNldWRvLXJlZyBhbmQgcHJvdmlkZSBhIHRhcmdldCBpbiB0aGUgbm9uLUJMS21vZGUgY2FzZS4gIEdldCByZXR1cm4KKyAJdHlwZSBvZiBmbiBwcm9wZXJseS4KKworV2VkIE9jdCAyMyAxNDoxNjowNiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBIYW5kbGUgYW55IHVuYXJ5IG9wZXJhdG9yLgorCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogTGlrZXdpc2UuCisKKwkqIG1pcHMubWQ6IFJlbW92ZSBleHRlbmRzaWRpMiBkZWZpbmVfZXhwYW5kLiAKKwlSZW5hbWUgZXh0ZW5kc2lkaTJfaW50ZXJuYWwgZGVmaW5lX2luc24gdG8gZXh0ZW5kc2lkaTIsIGFuZCBhZGQgYQorCXJlZ2lzdGVyIHRvIHJlZ2lzdGVyIGNhc2UuCisKK1dlZCBPY3QgMjMgMTQ6MDg6MzEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBhMjlrLmMgKGEyOWtfbWFrZXNfY2FsbHMpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgorCShjb21wdXRlX3JlZ3N0YWNrX3NpemUsIGEyOWtfY29tcHV0ZV9yZWdfbmFtZXMpOiBOZXcgZnVuY3Rpb25zLgorCShvdXRwdXRfcHJvbG9nKTogTXVjaCBjb2RlIG1vdmVkIHRvIHR3byBuZXcgZnVuY3Rpb25zLiAgVXNlCisJYTI5a19tYWtlc19jYWxscyBpbnN0ZWFkIG9mIG1ha2VzX2NhbGxzLgorCSogYTI5ay5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogQ2FsbCBhMjlrX2NvbXB1dGVfcmVnX25hbWVzLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEluIHRhcmdldCBjb2RlLCBtb3ZlIFBBUkFMTEVMIGNhc2UgYWJvdmUKKwl0YXJnZXQgIT0gY2FzZS4KKworCSogbWlwcy5jIChibG9ja19tb3ZlX2xvYWRfc3RvcmUsIGJsb2NrX21vdmVfc2VxdWVuY2UpOiBEZWxldGUuCisJKGJsb2NrX21vdmVfbG9vcCk6IE5ldyBwYXJhbWV0ZXIgb3JpZ19kZXN0LiAgQ2FsbCBjaGFuZ2VfYWRkcmVzcyB0bworCWNyZWF0ZSBuZXcgTUVNIGluc3RlYWQgb2YgZ2VuX3J0eC4KKwkoZXhwYW5kX2Jsb2NrX21vdmUpOiBOZXcgbG9jYWwgb3JpZ19kZXN0LiAgUGFzcyBpdCB0byBibG9ja19tb3ZlX2xvb3AuCisJQ2FsbCBjaGFuZ2VfYWRkcmVzcyB0byBjcmVhdGUgbmV3IE1FTSBpbnN0ZWFkIG9mIGdlbl9ydHguCisKK1dlZCBPY3QgMjMgMTA6MzA6MzIgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBsb29wLmMgKGNvbWJpbmVfZ2l2cyk6IFdoZW4gY29tYmluaW5nIGEgREVTVF9SRUcgZ2l2IHdpdGggaXRzCisJb25seSB1c2UsIGFsd2F5cyBzZXQgdGhlIGJlbmVmaXQgb2YgdGhlIGNvbWJpbmVkIGdpdiB0byB0aGF0IG9mCisJdGhlIERFU1RfUkVHIGdpdi4KKworCSogZW1pdC1ydGwgKGdlbl9sb3dwYXJ0X2NvbW1vbik6IFdoZW4gY29udmVydGluZyBhIGZsb2F0aW5nCisJcG9pbnQgdmFsdWUgaW50byBhbiBpbnRlZ2VyLCB1c2UgV09SRCBhcyAoZmlyc3QpIHdvcmQuCisKKwkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IFdoZW4gU01BTExfUkVHSVNURVJfQ0xBU1NFUyBpcyBkZWZpbmVkLAorCWF2b2lkIHN1YnN0aXR1dGluZyBhIHJldHVybiByZWdpc3RlciBpbnRvIEkzLgorCisJKiBvcHRhYnMuYyAoZW1pdF9saWJjYWxsX2Jsb2NrKTogQmVmb3JlIGFkZGluZyBhbiBSRUdfRVFVQUwgbm90ZSwKKwljaGVjayB0aGF0IGl0IHdpbGwgcmVhbGx5IGFwcGx5IHRvIGEgc2luZ2xlIGluc3RydWN0aW9uLgorCShleHBhbmRfYmlub3AsIGV4cGFuZF9maXgpOiBMaWtld2lzZS4KKworV2VkIE9jdCAyMyAxMDoyMDo1MiAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChleGFjdF9yZWFsX2ludmVyc2UpOiBOZXcgZnVuY3Rpb24sIGlmIFJFQUxfQVJJVEhNRVRJQy4KKwkqIGZvbGQtY29uc3QuYyAoZXhhY3RfcmVhbF9pbnZlcnNlKTogTGlrZXdpc2UsIGlmIG5vIFJFQUxfQVJJVEhNRVRJQy4KKwkoZm9sZCwgY2FzZSBSRElWX0VYUFIpOiBUdXJuIGRpdmlkZSBieSBjb25zdGFudCBpbnRvIG11bHRpcGxpY2F0aW9uCisJYnkgdGhlIHJlY2lwcm9jYWwsIGlmIG9wdGltaXppbmcgYW5kIHJlc3VsdCBpcyBleGFjdC4KKwkqIHJlYWwuaCAoZXhhY3RfcmVhbF9pbnZlcnNlKTogRGVjbGFyZS4KKworV2VkIE9jdCAyMyAwMDoxMjo1MiAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbmFkYS5rdGguc2U+CisKKwkqIGV4cHIuaCAoZW1pdF9zdG9yZV9mbGFnX2ZvcmNlKTogRGVjbGFyZS4KKworVHVlIE9jdCAyMiAxODozMjoyMCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IEFsd2F5cyByZWplY3QgbG9vcHMgd2l0aCB1bmJhbGFuY2VkIGJsb2Nrcy4KKworVHVlIE9jdCAyMiAxODoyNzowNiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZy9mcC1iaXQuYyAoZmxvYXRfdG9fdXNpKTogQ29ycmVjdCB0aGlua286IGF2b2lkIGEgbmVnYXRpdmUKKwlzaGlmdC4KKwkoZGZfdG9fc2YpOiBSZW1lbWJlciBhbnkgZGlzY2FyZGVkIG5vbnplcm8gYml0cyBpbiB0aGUgbG93IG9yZGVyCisJZ3VhcmQgYml0LgorCisJKiBnaW5jbHVkZS92YS1taXBzLmg6IEFkZCBzdXBwb3J0IGZvciAtbWlwczEgYW5kIC1tc29mdC1mbG9hdCB3aGVuCisJdXNpbmcgLW1hYmk9ZWFiaS4KKwkqIG1pcHMvYWJpNjQuaCAoU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6IFdoZW4gTUlQUyBFQUJJLCBoYW5kbGUKKwlUQVJHRVRfU0lOR0xFX0ZMT0FUIG9yICEgVEFSR0VUX0ZMT0FUNjQgY29ycmVjdGx5IHdoZW4gc2F2aW5nCisJZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4KKwkqIG1pcHMvbWlwcy5jIChtaXBzX2Z1bmN0aW9uX3ZhbHVlKTogSWYgVEFSR0VUX1NJTkdMRV9GTE9BVCwgdXNlCisJR1BfUkVUVVJOIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcyBsYXJnZXIgdGhhbiA0IGJ5dGVzLgorCitUdWUgT2N0IDIyIDA5OjQzOjQ5IDE5OTYgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9jeWd3aW4zMi5oIChMSUJfU1BFQyk6IEFkZCAtbGtlcm5lbDMyIGFsbCBvZiB0aGUgdGltZSwKKwlhbmQge3VzZXIsZ2RpLGNvbWRsZ30zMiBpZiAtbXdpbmRvd3MuCisKK1R1ZSBPY3QgMjIgMDU6MjQ6MDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBkd2FyZjJvdXQuYyAoc2NvcGVfZGllX2Zvcik6IERvbid0IHNraXAgbGV4aWNhbCBibG9ja3MuCisJKGdlbl9sZXhpY2FsX2Jsb2NrX2RpZSk6IENhbGwgcHVzaF9kZWNsX3Njb3BlLgorCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBOZXZlciByZWZlciB0byB0aGUgZnVuY3Rpb24gc3ltYm9sLgorCShkd2FyZm91dF9iZWdpbl9wcm9sb2d1ZSk6IExpa2V3aXNlLgorCitNb24gT2N0IDIxIDIwOjIyOjQ5IDE5OTYgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBuYWRhLmt0aC5zZT4KKworCSogZXhwbWVkLmMgKGVtaXRfc3RvcmVfZmxhZ19mb3JjZSk6IE5ldyBmdW5jdGlvbi4KKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBVc2UgaXQuCisJCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBEb24ndCBjaGVjayBpZiB0YXJnZXQgaXMgMCBpbiBjb2RlCisJZW1pdHRpbmcgc3RvcmUgZmxhZyBhcyBjb21wYXJlLWJyYW5jaC4KKworTW9uIE9jdCAyMSAxNzo1ODozMyAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIG1pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IENvcnJlY3QgdHlwbyAoTUFTS182NEJJVCBzaG91bGQKKwloYXZlIGJlZW4gVEFSR0VUXzY0QklUKS4KKworTW9uIE9jdCAyMSAxMzo1ODo1NCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHVucm9sbC5jIChsb29wX2NvbXBhcmlzb25fY29kZSk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCisJKHVucm9sbF9sb29wKTogQWRkIGNoZWNrIGZvciBsb29wX2NvbXBhcmlzb25fY29kZQorCShsb29wX2l0ZXJhdGlvbnMpOiBTZXQgbG9vcF9jb21wYXJpc29uX2NvZGUuCisKKwkqIHNoLmMgKGdlbl9zaGxfc2V4dCk6IEFkZCBtaXNzaW5nIHBhcmFtZXRlciB0byBzaGxfc2V4dF9raW5kIGNhbGwuCisKKwkqIG1pcHMuaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IERlbGV0ZS4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBBZGQgY2hlY2sgZm9yICEgYmwtPnJldmVyc2VkIHRvCisJYXV0b19pbmNfb3B0IGNvZGUuCisKK01vbiBPY3QgMjEgMTI6Mjg6MTUgMTk5NiAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCWp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEZpeCBidWcgaW4gT2N0LiAxNCBjaGFuZ2UuCisKK01vbiBPY3QgMjEgMDc6NTk6MTYgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9leHByKTogRGlzYWJsZSBvcHRpbWl6YXRpb24gb2YgdXNpbmcgY29udmVydAorCWlmIGV4cCdzIHR5cGUgaXMgYSBzdWJ0eXBlLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9hcnJheV9yZWYpOiBJZiAtV2NoYXItc3Vic2NyaXB0cywgYWxzbyB3YXJuCisJaW4gY2FzZSB3aGVuIHBvaW50ZXIgaXMgYmVpbmcgaW5kZXhlZC4KKworTW9uIE9jdCAyMSAwNzozOTozMSAxOTk2ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVc2UgZW1pdF9zdG9yZV9mbGFnIGV2ZW4gaWYgYnJhbmNoZXMKKwlhcmUgY2hlYXAsIGlmIHRoZSBzdG9yZSBpcyBldmVuIGNoZWFwZXIuCisKK1N1biBPY3QgMjAgMjA6MDE6MDkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfcCwgcmVsb2Fkc19jb25mbGljdCk6IFJFTE9BRF9PVEhFUgorCWFuZCBSRUxPQURfRk9SX09USEVSX0FERFJFU1MgY29uZmxpY3QuCisKKwkqIGkzODYubWQgKGZmc1tzaF1pMik6IEFkZCBtaXNzaW5nIENDX1NUQVRVU19JTklULgorCitGcmkgT2N0IDE4IDEzOjMyOjEzIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChmbG9hdCBjb252ZXJzaW9uIGluc25zKTogR2VuZXJhdGUgY29ycmVjdCBjb2RlCisJaWYgdGhlIGJpdCAxNSBvZiByczYwMDBfZnBtZW1fb2Zmc2V0IGlzIG5vbi16ZXJvLgorCitUaHUgT2N0IDE3IDIzOjIyOjAzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZHdhcmZvdXQuYyAoZGF0YV9tZW1iZXJfbG9jYXRpb25fYXR0cmlidXRlKTogU3VwcG9ydCBiaW5mb3MuCisJKG91dHB1dF9pbmhlcml0YW5jZV9kaWUpOiBOZXcgZm4uCisJKG91dHB1dF90eXBlKTogVXNlIGl0LgorCisJKiBkd2FyZjJvdXQuYyAodmFsdWVfZm9ybWF0KTogU3BsaXQgb3V0IGZyb20uLi4KKwkob3V0cHV0X3ZhbHVlX2Zvcm1hdCk6IEhlcmUuCisJKGJ1aWxkX2FiYnJldl90YWJsZSk6IFVzZSB2YWx1ZV9mb3JtYXQuCisJKHNpemVfb2ZfbG9jcyk6IE5ldyBmbi4KKwkoc2l6ZV9vZl9kaWUpOiBEb24ndCBhc3N1bWUgYSBsb2MgbmVlZHMgYSAyLWJ5dGUgbGVuZ3RoLgorCSh2YWx1ZV9mb3JtYXQpOiBMaWtld2lzZS4KKwkob3V0cHV0X2RpZSk6IExpa2V3aXNlLgorCitUaHUgT2N0IDE3IDE0OjQ2OjE0IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogSW4gNjQgYml0IEVBQkkgbW9kZSwgc2V0IFRBUkdFVF9MT05HNjQuCisKK1RodSBPY3QgMTcgMTE6MzQ6NTEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjeWdudXMuY29tPgorCisJKiBleHByLmMgKGRvX2p1bXApOiBDb25kaXRpb25hbGl6ZSBjbGVhbnVwcyBmb3IgdGhlIENPTkRfRVhQUiBjYXNlLAorIAlzaW1pbGFybHkgdG8gdGhlIHdheSBUUlVUSF9BTkRJRl9FWFBSIGFuZCBUUlVUSF9PUklGX0VYUFIgYXJlCisgCWhhbmRsZWQuCisKK1RodSBPY3QgMTcgMDE6MjA6MTYgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtNjhrLmggKE1BU0tfNjgwNDBfQUxTTyk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTKTogT3B0aW9uIC1tNjgwMjAtNDAgaW5jbHVkZXMgTUFTS182ODA0MF9BTFNPLgorCitXZWQgT2N0IDE2IDE2OjI1OjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZHdhcmYyb3V0LmMgKHNjb3BlX2RpZV9mb3IpOiBBbHNvIHN1cHBvcnQgZGVjbHMsIGFkZCBhc3NlcnRzLgorCShtb2RpZmllZF90eXBlX2RpZSk6IE1vZGlmaWVkIHR5cGVzIGFsbCBnbyB1bmRlciBjb21wX3VuaXRfZGllLgorCShhZGRfdHlwZV9hdHRyaWJ1dGUpOiBKdXN0IHBhc3MgY29udGV4dF9kaWUgdGhyb3VnaC4KKwkodmFyaW91cyk6IFJldmVydCB1c2VsZXNzIGxvb2t1cF90eXBlX2RpZSBjaGFuZ2UuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IFVzZSBzY29wZV9kaWVfZm9yLiAgQ2FsbCBwdXNoX2RlY2xfc2NvcGUuCisJKGdlbl9pbmxpbmVkX3N1YnJvdXRpbmVfZGllKTogQ2FsbCBwdXNoX2RlY2xfc2NvcGUuCisJKGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBMaWtld2lzZS4KKwkoZ2VuX2RlY2xfZGllKTogRG9uJ3QgY2FsbCBwdXNoX2RlY2xfc2NvcGUuCisKKwkqIG1pcHMvaXJpczYuaCAoKl9TUEVDKTogUmVwbGFjZSBlbnVtZXJhdGlvbiBvZiAhbWFiaT0gd2l0aCAhbWFiaSouCisJKEFTTV9PVVRQVVRfe0NPTixERX1TVFJVQ1RPUik6IEVuYWJsZS4KKwkoU1RBUlRGSUxFX1NQRUMpOiBTdXBwb3J0IC1taXBzNCwgLXNoYXJlZC4KKwkoRU5ERklMRV9TUEVDKTogTGlrZXdpc2UuCisJKExJQl9TUEVDKTogU3VwcG9ydCAtc2hhcmVkLCBhdm9pZCB3YXJuaW5nIDg0LgorCShMSUJHQ0NfU1BFQyk6IERlZmluZS4KKwkoTElOS19TUEVDKTogU3VwcG9ydCAtc2hhcmVkLCByZW1vdmUgLXdvZmYgODQuCisJKiBtaXBzL3QtaXJpczYgKEVYVFJBX1BBUlRTKTogQWRkIGNydHN0dWZmLgorCSogY3J0c3R1ZmYuYzogU3VwcG9ydCBJcml4IDYuCisJKiBjb25maWd1cmU6IERvbid0IHVzZSBjb2xsZWN0MiBmb3IgSXJpeCA2LgorCSogbGliZ2NjMi5jIChfX21haW4pOiBEb24ndCB1c2UgYW55IG9mIHRoaXMgc3R1ZmYgaWYgSEFTX0lOSVRfU0VDVElPTi4KKworV2VkIE9jdCAxNiAxMTo0NjozNyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGVseHNpLmggKENIRUNLX0ZMT0FUX1ZBTFVFKTogUmVtb3ZlZC4KKworV2VkIE9jdCAxNiAxNDoxOTozOCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGlyaXM2LmggKENQUF9QUkVERUZJTkVTKTogQWRkIC1EX0xPTkdMT05HLgorCShDUFBfU1BFQ1MpOiBSZW1vdmUgLURfTE9OR0xPTkcuCisKK1dlZCBPY3QgMTYgMDM6MzQ6NDIgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG5hZGEua3RoLnNlPgorCisJKiBpMzg2Lm1kIChwYXJhbGxlbCBpbmMvZGVjIGFuZCBicmFuY2gtaWYtemVyby9ub256ZXJvKTogTmV3IHBhdHRlcm5zLgorCitUdWUgT2N0IDE1IDIyOjI4OjExIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbWlwcy5oIChlbnVtIG1pcHNfYWJpX3R5cGUpOiBBZGQgQUJJX0VBQkkuCisJKENQUF9TUEVDKTogRGVmaW5lIF9fbWlwc19zb2Z0X2Zsb2F0IGlmIC1tc29mdC1mbG9hdCwgYW5kCisJX19taXBzX2VhYmkgaWYgLW1hYmk9ZWFiaS4KKwkoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQsIENVTVVMQVRJVkVfQVJHUywKKwlHT19JRl9MRUdJVElNQVRFX0FERFJFU1MsIENPTlNUQU5UX0FERFJFU1NfUCwgTEVHSVRJTUFURV9DT05TVEFOVCwKKwlMRUdJVElNSVpFX0FERFJFU1MpOiBBZGQgc3VwcG9ydCBmb3IgTUlQUyBFQUJJLgorCSogbWlwcy9hYmk2NC5oIChTVEFDS19CT1VOREFSWSwgTUlQU19TVEFDS19BTElHTiwKKwlGVU5DVElPTl9BUkdfUEFERElORywgUkVUVVJOX0lOX01FTU9SWSwgU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6CisJQWRkIHN1cHBvcnQgZm9yIE1JUFMgRUFCSS4KKwkoRlVOQ1RJT05fQVJHX1BBU1NfQllfUkVGRVJFTkNFKTogRGVmaW5lLgorCShGVU5DVElPTl9BUkdfQ0FMTEVFX0NPUElFUyk6IERlZmluZS4KKwkqIG1pcHMuYyAobWlwc19jb25zdF9kb3VibGVfb2ssIGZ1bmN0aW9uX2FyZ19hZHZhbmNlLAorCWZ1bmN0aW9uX2FyZywgZnVuY3Rpb25fYXJnX3BhcnRpYWxfbnJlZ3MsIG92ZXJyaWRlX29wdGlvbnMsCisJY29tcHV0ZV9mcmFtZV9zaXplKTogQWRkIHN1cHBvcnQgZm9yIE1JUFMgRUFCSS4KKwkoZnVuY3Rpb25fYXJnX3Bhc3NfYnlfcmVmZXJlbmNlKTogTmV3IGZ1bmN0aW9uLgorCSogZ2luY2x1ZGUvdmEtbWlwcy5oOiBBZGQgc3VwcG9ydCBmb3IgTUlQUyBFQUJJLgorCitUdWUgT2N0IDE1IDE5OjEwOjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbik6IERvbid0IHdyaXRlIG91dAorCURXQVJGIGZvciBmdW5jdGlvbi1zY29wZSB0eXBlcyB5ZXQuCisJKGNvbXBpbGVfZmlsZSk6IERvIHNlbmQgdmFycyB3aXRoIG5vIFJUTCB0byB0aGUgRFdBUkYgY29kZS4KKworVHVlIE9jdCAxNSAxNzo1NDo0MyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQXZvaWQgdGFraW5nIFBBVFRFUk4gb2YgYSBsYWJlbC4KKworVHVlIE9jdCAxNSAxNjo1MjozMyAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIG1pcHMvaXJpczYuaDogKFNVQlRBUkdFVF9DUFBfU0laRV9TUEVDKTogRGVmaW5lLgorCShTVUJUQVJHRVRfQ1BQX1NQRUMpOiBSZW1vdmUgZGVmaW5pdGlvbnMgb2YgX19TSVpFX1RZUEVfXyBhbmQKKwlfX1BUUkRJRkZfVFlQRV9fLCBub3cgaW4gU1VCVEFSR0VUX0NQUF9TSVpFX1NQRUMuCisKK1R1ZSBPY3QgMTUgMTE6MTk6MTcgMTk5NiAgTGVlIEl2ZXJzb24gIDxsZWVpQENhbmFkYS5BSS5TUkkuQ09NPgorCisJKiBtaXBzLmggKENQUF9TUEVDKTogUmVzdG9yZSAtRF9MQU5HVUFHRV9DIGZvciBPYmplY3RpdmUgQy4KKworTW9uIE9jdCAxNCAxODowMzozNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChnZW5fZGVjbF9kaWUpOiBEbyBnZW5lcmF0ZSBkaWVzIGZvciBjbGFzc2VzIHdpdGggLWcxLgorCShkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wpOiBMaWtld2lzZS4KKworTW9uIE9jdCAxNCAxNjozMTo0NCAxOTk2ICBKb2VybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IENoZWNrIGZvciBpZiAoLi4uKSB7IHggPSBhOyBnb3RvIGw7IH0geCA9IGI7CisKK01vbiBPY3QgMTQgMTQ6MTk6NDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBkd2FyZjJvdXQuYyAobW9kaWZpZWRfdHlwZV9kaWUpOiBEb24ndCBib3RoZXIgd2l0aCBBVF9hZGRyZXNzX2NsYXNzLgorCShhZGRfZGF0YV9tZW1iZXJfbG9jYXRpb25fYXR0cmlidXRlKTogSGFuZGxlIGdldHRpbmcgYSBiaW5mby4KKwkoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6IEhhbmRsZSBhIGRlY2wgd2l0aCBubyBSVEwuCisJKGFkZF9wdXJlX29yX3ZpcnR1YWxfYXR0cmlidXRlKTogQWRkIEFUX3Z0YWJsZV9lbGVtX2xvY2F0aW9uLgorCShhZGRfbmFtZV9hbmRfc3JjX2Nvb3Jkc19hdHRyaWJ1dGVzKTogT25seSB1c2UgREVDTF9BU1NFTUJMRVJfTkFNRSAKKwlmb3Igc3RhdGljcCB0aGluZ3MuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IFNldCB1cCBBVF9pbmxpbmUgZm9yIGFic3RyYWN0IGRlY2xzLgorCShnZW5faW5oZXJpdGFuY2VfZGllKTogTmV3IGZuLgorCShnZW5fbWVtYmVyX2RpZSk6IEFsc28gZW1pdCBpbmZvIGZvciBiYXNlIGNsYXNzZXMuCisKK1NhdCBPY3QgMTIgMDA6MDc6MDAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBmb2xkLWNvbnN0LmMgKG1ha2VfcmFuZ2UpOiBIYW5kbGUgTlVMTCBvcGVyYW5kIDAKKwkobGlrZSBpbiBCSU5EX0VYUFJzKS4KKworRnJpIE9jdCAxMSAxNTo0MjoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogSWYgd2UgZGlkIGEKKyAJc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcsIHJlc2V0IERFQ0xfQUJTVFJBQ1RfT1JJR0lOIGZvciB0aGUKKyAJZnVuY3Rpb24gd2hlbiB3ZSdyZSBkb25lLgorCisJKiB0b3BsZXYuYyAobWFpbik6IERXQVJGIHdvcmtzIHdpdGggQysrIG5vdy4KKworCSogZHdhcmYyb3V0LmMgKGdlbl9zdWJwcm9ncmFtX2RpZSk6IERpc2FibGUgTUlQU19BVF9oYXNfaW5saW5lCisgCXN1cHBvcnQgZm9yIG5vdy4KKworRnJpIE9jdCAxMSAxNDozMToxMCAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbmFkYS5rdGguc2U+CisKKwkqIGR3YXJmb3V0LmM6IChvdXRwdXRfYm91bmRfcmVwcmVzZW50YXRpb24pOiBGaXggdHlwbyBpbiBwcm90b3R5cGUuCisKK0ZyaSBPY3QgMTEgMTI6MTk6MjEgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBtaXBzLmggKE1JUFNfQVNfQVNNX1NQRUMpOiBEZWZpbmUuCisJKFNVQkFSR0VUX01JUFNfQVNfQVNNX1NQRUMpOiBEZWZpbmUuCisJKEdBU19BU01fU1BFQyk6IERlZmluZS4KKwkoVEFSR0VUX0FTTV9TUEVDKTogRGVmaW5lLgorCShTVUJUQVJHRVRfQVNNX09QVElNSVpJTkdfU1BFQyk6IERlZmluZS4KKwkoU1VCVEFSR0VUX0FTTV9ERUJVR0dJTkdfU1BFQyk6IERlZmluZS4KKwkoU1VCVEFSR0VUX0FTTV9TUEVDKTogRGVmaW5lLgorCShBU01fU1BFQyk6IFJld3JpdGUgdG8gdXNlIGFib3ZlIHNwZWNzLgorCShTVUJUQVJHRVRfQ1BQX1NJWkVfU1BFQyk6IERlZmluZS4KKwkoU1VCVEFSR0VUX0NQUF9TUEVDKTogRGVmaW5lLgorCShDUFBfU1BFQyk6IFVzZSBhYm92ZSBzcGVjcy4gIERvbid0IGRlZmluZSBfTEFOR1VBR0VfQyBpZiBDKysgb3IKKwlPYmplY3RpdmUgQy4KKwkoRVhUUkFfU1BFQ1MpOiBEZWZpbmUuCisJKFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IERlZmluZS4KKwkqIG1pcHMvZGVjLWJzZC5oIChBU01fU1BFQyk6IERvbid0IGRlZmluZS4KKwkoQ1BQX1NQRUMpOiBEb24ndCBkZWZpbmUuCisJKiBtaXBzL2RlYy1vc2YxLmggKENQUF9TUEVDKTogRG9uJ3QgZGVmaW5lLgorCShTVUJUQVJHRVRfQ1BQX1NJWkVfU1BFQyk6IERlZmluZS4KKwkqIG1pcHMvZWxmNjQuaCAoQ1BQX1NQRUMpOiBEb24ndCBkZWZpbmUuCisJKFNVQlRBUkdFVF9DUFBfU1BFQyk6IERlZmluZS4KKwkqIG1pcHMvZ251LmggKFRBUkdFVF9ERUZBVUxUKTogRGVmaW5lLgorCShBU01fU1BFQyk6IERvbid0IGRlZmluZS4KKwkqIG1pcHMvaXJpczMuaCAoQ1BQX1NQRUMpOiBEb24ndCBkZWZpbmUuCisJKFNVQlRBUkdFVF9DUFBfU1BFQyk6IERlZmluZS4KKwkqIG1pcHMvaXJpczRsb3Nlci5oIChBU01fU1BFQyk6IERvbid0IGRlZmluZS4KKwkoU1VCVEFSR0VUX01JUFNfQVNfQVNNX1NQRUMpOiBEZWZpbmUuCisJKFNVQlRBUkdFVF9BU01fT1BUSU1JWklOR19TUEVDKTogRGVmaW5lLgorCSogbWlwcy9pcmlzNS5oIChDUFBfU1BFQyk6IERvbid0IGRlZmluZS4KKwkoU1VCVEFSR0VUX0NQUF9TUEVDKTogRGVmaW5lLgorCSogbWlwcy9pcmlzNi5oIChDUFBfU1BFQyk6IERvbid0IGRlZmluZS4KKwkoU1VCVEFSR0VUX0NQUF9TUEVDKTogRGVmaW5lLgorCShBU01fU1BFQyk6IERvbid0IGRlZmluZS4KKwkoU1VCVEFSR0VUX0FTTV9TUEVDKTogRGVmaW5lLgorCShTVUJBUkdFVF9NSVBTX0FTX0FTTV9TUEVDKTogRGVmaW5lLgorCShTVUJUQVJHRVRfQVNNX0RFQlVHR0lOR19TUEVDKTogRGVmaW5lLgorCSogbWlwcy9uZXRic2QuaCAoQVNNX1NQRUMpOiBEb24ndCBkZWZpbmUuCisJKENQUF9TUEVDKTogRG9uJ3QgZGVmaW5lLgorCShTVUJUQVJHRVRfQ1BQX1NQRUMpOiBEZWZpbmUuCisJKiBtaXBzL29zZnJvc2UuaCAoQVNNX1NQRUMsIEFTTV9GSU5BTF9TUEVDKTogRG9uJ3QgZGVmaW5lLgorCShDUFBfU1BFQyk6IERvbid0IGRlZmluZS4KKwkoU1VCVEFSR0VUX0NQUF9TSVpFX1NQRUMpOiBEZWZpbmUuCisJKFNVQlRBUkdFVF9DUFBfU1BFQyk6IERlZmluZS4KKwkqIG1pcHMvc25pLXN2cjQuaCAoQ1BQX1NQRUMpOiBEb24ndCBkZWZpbmUuCisJKFNVQlRBUkdFVF9DUFBfU0laRV9TUEVDKTogRGVmaW5lLgorCitUaHUgT2N0IDEwIDE3OjU4OjQ5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogbWlwcy9pcmlzNi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERlZmluZS4KKwkoRFdBUkZfT0ZGU0VUX1NJWkUpOiBEZWZpbmUuCisKKwkqIGR3YXJmMm91dC5jIChtb3N0IGV2ZXJ5d2hlcmUpOiBTdXBwb3J0IFNHSS9NSVBTIC1tYWJpPTY0IGJ5IGZpeGluZworIAljb2RlIHdoaWNoIGFzc3VtZWQgdGhhdCBwb2ludGVycyBhcmUgNCBieXRlcyBsb25nLCBwYXJhbWV0ZXJpemluZworIAltYW55IHNpemVzIG9uIERXQVJGX09GRlNFVF9TSVpFIGFuZCB1c2luZyBERUxUQSBpbnN0ZWFkIG9mIERFTFRBNCwKKyAJREFUQSBpbnN0ZWFkIG9mIERBVEE0LCBGT1JNX3JlZiBpbnN0ZWFkIG9mIEZPUk1fcmVmNC4gKERXQVJGX1JPVU5ELAorIAlVTkFMSUdORURfRE9VQkxFX0lOVF9BU01fT1AsIFVOQUxJR05FRF9XT1JEX0FTTV9PUCwKKyAJQVNNX09VVFBVVF9EV0FSRl9ERUxUQSwgQVNNX09VVFBVVF9EV0FSRl9EQVRBLCBEV19GT1JNX2RhdGEsCisgCURXX0ZPUk1fcmVmKTogTmV3IG1hY3Jvcy4KKwkoZ2VuX3ZhcmlhYmxlX2RpZSk6IE9ubHkgZXF1YXRlX2RlY2xfbnVtYmVyX3RvX2RpZSBpZgorCWRlY2wgaXMgVFJFRV9TVEFUSUMuCisJKGdldF9BVCk6IEZpeCB0aGlua28uCisKKwkqIGR3YXJmMm91dC5jIChjb25zdGFudF9zaXplKTogTmV3IGZuLgorCShzaXplX29mX2RpZSk6IFVzZSBpdCBpbnN0ZWFkIG9mIGFzc3VtaW5nIDQgYnl0ZXM7CisgCXVzdWFsbHkgd2Ugb25seSBuZWVkIG9uZS4KKwkob3V0cHV0X3ZhbHVlX2Zvcm1hdCwgb3V0cHV0X2RpZSk6IExpa2V3aXNlLgorCShidWlsZF9hYmJyZXZfdGFibGUpOiBXZSBuZWVkIGEgbmV3IGFiYnJldiBpZiB0aGUgc2l6ZQorIAlvZiB0aGUgY29uc3RhbnQgZGlmZmVycy4KKwkoZHdhcmZfYXR0cl9uYW1lKTogQWRkIG5ldyBTR0kvTUlQUyBleHRlbnNpb25zLgorCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBTdXBwb3J0IERXX0FUX01JUFNfaGFzX2lubGluZXMuCisJKGdlbl9pbmxpbmVkX3N1YnJvdXRpbmVfZGllKTogTGlrZXdpc2UuCisKK1RodSBPY3QgMTAgMTY6Mzg6NTggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBtaXBzLm1kIChtb3Zbc2RdZmNjKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQsIG5vdCByZWdfb3JfMF9vcGVyYW5kLAorCWZvciBzb3VyY2UgcHJlZGljYXRlcy4KKworVGh1IE9jdCAxMCAxNToxOTozOCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAoZmxvYXRzaWRmMl9sb2FkKTogRm9yIGxhcmdlIHN0YWNrIGZyYW1lcywgZG8gbm90CisJZ2VuZXJhdGUgYW4gaWxsZWdhbCBtZW1vcnkgcmVmZXJlbmNlLgorCShtb3ZkaSwgbW92ZGYgZGVmaW5lX3NwbGl0cyk6IEZpeCBjb2RlIHNvIHRoYXQgaXQgd29ya3MgZm9yIGVpdGhlcgorCWJpZyBvciBsaXR0bGUgZW5kaWFuIGhvc3RzIGdlbmVyYXRpbmcgY29kZSBmb3IgZWl0aGVyIGJpZyBvcgorCWxpdHRsZSBlbmRpYW4gdGFyZ2V0cy4KKworCShmcm9tIEppbSBXaWxzb24pCisJKiByczYwMDAuYyAocnM2MDAwX3NhdmVfdG9jX3ApOiBEZWxldGUgZ2xvYmFsIHZhcmlhYmxlLgorCShyczYwMDBfe3NhdmUscmVzdG9yZX1fbWFjaGluZV9zdGF0dXMpOiBEbyBub3Qgc2F2ZS9yZXN0b3JlIGl0LgorCShyczYwMDBfaW5pdF9leHBhbmRlcnMpOiBEbyBub3QgaW5pdGlhbGl6ZSBpdC4KKwkocnM2MDAwX3N0YWNrX2luZm8pOiBBbHdheXMgY3JlYXRlIFRPQyBzYXZlIHNwYWNlLgorCisJKiByczYwMDAubWQgKE5UIGluZGlyZWN0IGNhbGwgaW5zbnMpOiBEbyBub3Qgc2V0CisJcnM2MDAwX3NhdmVfdG9jX3AuCisKKwkqIHJzNjAwMC5oIChyczYwMDBfc2F2ZV90b2NfcCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KKworV2VkIE9jdCAgOSAxODowNjo1NCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIG1pcHMuaCAoRU1QVFlfRklFTERfQk9VTkRBUlkpOiBEZWZpbmUgYXMgMzIuCisJKiBtaXBzL2FiaTY0LmggKEVNUFRZX0ZJRUxEX0JPVU5EQVJZKTogRG9uJ3QgZGVmaW5lLgorCisJKiBtaXBzL2FiaTY0LmggKFRBUkdFVF9ERUZBVUxULCBUQVJHRVRfTE9ORzY0LCBDUFBfUFJFREVGSU5FUywKKwlDUFBfU1BFQyk6IE1vdmUgZnJvbSBoZXJlLi4uCisJKiBtaXBzL2lyaXM2Lmg6IC4uLnRvIGhlcmUuCisKK1dlZCBPY3QgIDkgMTY6NDM6NTEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKGlbMzQ1Nl04Ni1kZy1kZ3V4KTogVXNlIGluc3RhbGwtaGVhZGVycy1jcGlvLgorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogRGVsZXRlIHVubmVjZXNzYXJ5IGluY3JlbWVudC4KKworV2VkIE9jdCAgOSAxNjoyOToyMiAxOTk2ICBHYXZpbiBLb2NoIDxnYXZpbkBjZXR1cy5jeWdudXMuY29tPgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBUcmVhdCBFTk9URElSIGxpa2UgRU5PRU5UIHdoZW4gYW4gb3BlbiBmYWlscy4KKworV2VkIE9jdCAgOSAxNjoyNjo1NyAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogLWFuc2kgbm8gbG9uZ2VyIGltcGxpZXMgLSQgdG8gY3BwLgorCSogYy1sZXguYyAoeXlsZXgpOiBUcmVhdCBgJCcganVzdCBsaWtlIGBfJywgZXhjZXB0IGlzc3VlIGEKKwlkaWFnbm9zdGljIGlmICFkb2xsYXJzX2luX2lkZW50IG9yIGlmIHBlZGFudGljLgorCSogYy1kZWNsLmMgKGRvbGxhcnNfaW5faWRlbnQpOiBET0xMQVJTX0lOX0lERU5USUZJRVJTIGlzIG5vdyBCb29sZWFuLgorCShjX2RlY29kZV9vcHRpb24pOiAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgaXMgbm93IGluZGVwZW5kZW50CisJb2YgLWFuc2ksIG9mIC10cmFkaXRpb25hbCwgYW5kIG9mIERPTExBUlNfSU5fSURFTlRJRklFUlMuCisJKiBjZXhwLnkgKGluaXRpYWxpemVfcmFuZG9tX2p1bmspOiBJZ25vcmUgRE9MTEFSU19JTl9JREVOVElGSUVSUy4KKwkqIGNjY3AuYyAoZG9sbGFyc19pbl9pZGVudCk6IFJlbW92ZTsgcmVwbGFjZWQgYnkgaXNfaWRjaGFyWyckJ10uCisJKG1haW4pOiBJbml0aWFsaXplIGlzX2lkY2hhciBhbmQgaXNfaWRzdGFydCBkaXJlY3RseSB3aGVuIGdpdmVuIC0kLgorCUlnbm9yZSBET0xMQVJTX0lOX0lERU5USUZJRVJTLgorCShyZXNjYW4pOiBEaWFnbm9zZSAkIGluIGlkZW50aWZpZXIgaWYgcGVkYW50aWMuCisJKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBBc3N1bWUgJCBpcyBhbGxvd2VkIGluIGlkZW50aWZpZXI7CisJYG1haW4nIHdpbGwgY2hhbmdlIHRoaXMgaWYgLSQgaXMgZ2l2ZW4uCisJKiBjcHBsaWIuaCAoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IFJlbW92ZS4KKwkqIGNwcGxpYi5jIChjcHBfb3B0aW9uc19pbml0KTogSWdub3JlIERPTExBUlNfSU5fSURFTlRJRklFUlMuCisJKHBhcnNlX25hbWUpOiBEaWFnbm9zZSAkIGluIGlkZW50aWZpZXIgaWYgcGVkYW50aWMuCisJKGNwcF9oYW5kbGVfb3B0aW9ucyk6IC10cmFkaXRpb25hbCBubyBsb25nZXIgbWVzc2VzIHdpdGgKKwlkb2xsYXJzX2luX2lkZW50LgorCSogaTM4Ni9kZ3V4LmgsIG02OGsvYXBvbGxvNjguaCAoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IFJlbW92ZS4KKwkqIG04OGsuaCwgbWlwcy5oLCBuZXh0c3RlcC5oLCBwYS5oIChET0xMQVJTX0lOX0lERU5USUZJRVJTKTogUmVtb3ZlLgorCSogdmF4L3VsdHJpeC5oLCB2YXgvdm1zLmggKERPTExBUlNfSU5fSURFTlRJRklFUlMpOiBSZW1vdmUuCisJKiBjb252ZXguaCAoT1ZFUlJJREVfT1BUSU9OUyk6IERvbid0IG5lZWQgdG8gc2V0CisJZG9sbGFyc19pbl9pZGVudCBhbnkgbW9yZSwgc2luY2UgLWFuc2kgZG9lc24ndCBjaGFuZ2UgaXQuCisKK1dlZCBPY3QgIDkgMDc6MzU6NDcgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBBbGxvdyBwcmVmaXggYXR0cmlidXRlcyBpbiBtb3JlIHBsYWNlcy4KKwkqIGMtcGFyc2UuaW46IFVwZGF0ZSBudW1iZXIgb2Ygc2hpZnQvcmVkdWNlIGNvbmZsaWN0cy4KKwkoe3R5cGVkX2RlY2xzcGVjcyxyZXNlcnZlZF9kZWNsc3BlY3MsZGVjbG1vZHN9X25vX3ByZWZpeF9hdHRyKTogTmV3LgorCShjdXJyZW50X2RlY2xzcGVjcyk6IEluaXRpYWxpemUgdG8gTlVMTF9UUkVFLgorCShmbmRlZik6IFBhc3MgY3VycmVudF9kZWNsc3BlY3MsIG5vdCAkMSwgdG8gc3RhcnRfZnVuY3Rpb24uCisJKG9sZF9zdHlsZV9wYXJtX2RlY2xzKTogUmVuYW1lZCBmcm9tIHhkZWNscy4KKwkoZGF0YWRlY2wsIGRlY2xtb2RzKTogQWRkIHJlZmVyZW5jZXMgdG8gbmV3IHJ1bGVzLgorCShzZXRzcGVjcyk6IENhbGwgc3BsaXRfc3BlY3NfYXR0cnMuCisJKGFic2RjbDEpOiBSZW1vdmUgY2FzZSB3aXRoIHNldGF0dHJzLgorCSogYy1jb21tb24uYyAoc3BsaXRfc3BlY3NfYXR0cnMpOiBOZXcgZnVuY3Rpb24uCisKK1dlZCBPY3QgIDkgMDU6NDg6NDMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc2Rib3V0LmM6IEluY2x1ZGUgZGVmYXVsdHMuaC4KKwkqIE1ha2VmaWxlLmluIChzZGJvdXQubyk6IE1ha2UgZGVwZW5kZW5jeSBsaXN0IG1hdGNoIGluY2x1ZGVkIGZpbGVzLgorCisJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX3Rlc3QpOiBGdW5jdGlvbiBkZWxldGVkLgorCShyYW5nZV9iaW5vcCwgbWFrZV9yYW5nZSwgYnVpbGRfcmFuZ2VfY2hlY2spOiBOZXcgZnVuY3Rpb25zLgorCShtZXJnZV9yYW5nZXMsIGZvbGRfcmFuZ2VfdGVzdCk6IExpa2V3aXNlLgorCShmb2xkX3RydXRob3ApOiBObyBsb25nZXIgY2FsbCByYW5nZV90ZXN0LgorCShmb2xkLCBjYXNlIFRSVVRIX3tBTkQsT1J9eyxJRn1fRVhQUik6IENhbGwgZm9sZF9yYW5nZV90ZXN0LgorCitUdWUgT2N0ICA4IDIyOjAzOjMyIDE5OTYgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBuYWRhLmt0aC5zZT4KKworCSogY29uZmlndXJlOiBTZXQgY3B1X3R5cGUgZm9yIHB5cmFtaWQuCisKK1R1ZSBPY3QgIDggMjE6NTQ6MDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbik6IENhbGwgZHdhcmZvdXRfYmVnaW5fcHJvbG9ndWUuCisKKwkqIGR3YXJmMm91dC5jIChwdWJuYW1lXyosIGFyYW5nZV8qKTogTmV3IGRhdGEgZm9yIC5kZWJ1Z19wdWJuYW1lcworIAlhbmQgLmRlYnVnX2FyYW5nZXMgc2VjdGlvbnMuCisJKGFkZF9wdWJuYW1lKTogTmV3IGZuLgorCShzaXplX29mX3B1Ym5hbWVzKTogUmVpbXBsZW1lbnQuCisJKG91dHB1dF9wdWJuYW1lcyk6IExpa2V3aXNlLgorCShhZGRfYXJhbmdlKTogTmV3IGZuLgorCShzaXplX29mX2FyYW5nZXMpOiBJbmNsdWRlIGZ1bmN0aW9uIHNlY3Rpb25zLgorCShvdXRwdXRfYXJhbmdlcyk6IExpa2V3aXNlLgorCShnZW5fdmFyaWFibGVfZGllKTogQ2FsbCBhZGRfcHVibmFtZS4KKwkoYWRkX25hbWVfYW5kX3NyY19jb29yZHNfYXR0cmlidXRlcyk6IFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIGZvciBub3cuCisJKGRlY2xfc3RhcnRfbGFiZWwpOiBSZW5hbWVkIGZyb20gZnVuY3Rpb25fc3RhcnRfbGFiZWwuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IElmIHdlYWsgb3Igb25lX29ubHksIHVzZSBhIGxvY2FsIGxhYmVsIGZvciAKKwlBVF9sb3dfcGMuICBDYWxsIGFkZF9wdWJuYW1lIGFuZCBhZGRfYXJhbmdlLgorCShkd2FyZm91dF9iZWdpbl9wcm9sb2d1ZSk6IE5ldyBmbi4gIFN0YXJ0IHVwIEZERSBoZXJlLiAKKwkoZHdhcmZvdXRfYmVnaW5fZnVuY3Rpb24pOiBOb3QgaGVyZS4KKwkoZ2V0X0FUKTogU3BsaXQgb3V0LiAgTG9vayBpbiBzcGVjaWZpY2F0aW9uIGFuZCBhYnN0cmFjdF9vcmlnaW4gRElFcy4KKwkoZ2V0X0FUX2xvd19wYywgZ2V0X0FUX3N0cmluZywgZ2V0X0FUX2ZsYWcsIGdldF9BVF91bnNpZ25lZCwgCisJZ2V0X0FUX2hpX3BjKTogVXNlIGl0LgorCShkd2FyZm91dF9maW5pc2gpOiBWYXJpYWJsZXMgY2FuIHByb2R1Y2UgcHVibmFtZXMsIHRvby4KKworVHVlIE9jdCAgOCAxOTozNTo0MCAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbmFkYS5rdGguc2U+CisKKwkqIG04OGsvZGd1eC5oIChDUFBfU1BFQyk6IEF2b2lkIG5ld2xpbmUgaW4gdGhlIHN0cmluZy4KKworCSogZmluYWwuYyAoZmluYWwpOiBVcGRhdGUgaW5zbl9jdXJyZW50X2FkZHJlc3MgYmVmb3JlIGNhbGxpbmcKKwlmaW5hbF9zY2FuX2luc24uCisKK1R1ZSBPY3QgIDggMTc6NTI6MDIgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3BzKTogU2V0IGxvY2FsX3JlZ25vIG9ubHkgaWYgc2V0X2RvbWluYXRlc191c2UKKwlyZXR1cm5zIHRydWUuCisJKHNldF9kb21pbmF0ZXNfdXNlKTogTmV3IGZ1bmN0aW9uLgorCitUdWUgT2N0ICA4IDE2OjAxOjM3IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYy10eXBlY2suYyAoZGVjbF9jb25zdGFudF92YWx1ZSk6IERlbGV0ZSB0ZXN0IGZvciAhIFRSRUVfUFVCTElDLgorCitUdWUgT2N0ICA4IDEwOjM2OjQ0IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuYyAoaHBwYV9sZWdpdGltaXplX2FkZHJlc3MpOiBSZW1vdmUgdGVzdCBjb2RlIGFjY2lkZW50YWxseSBsZWZ0CisJaW4gZHVyaW5nIGxhc3QgY2hhbmdlLgorCitNb24gT2N0ICA3IDE5OjU1OjAyIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBCZWZvcmUgc2NoZWR1bGluZywgYWRkIGNvZGUgdG8gbWFrZSBhbGwKKwljYWxsIHVzZWQgcmVncyB0aGF0IGFyZSBub3QgZml4ZWQgb3IgZ2xvYmFsIGxpdmUgd2hlbiB3ZSBzZWUgYQorCUNBTExfSU5TTi4gIER1cmluZyBzY2hlZHVsaW5nLCBjaGFuZ2UgZXhpc3RpbmcgY29kZSB0byB1c2Ugc2FtZSB0ZXN0LgorCisJKiB2YXJhc20uYyAoYnNzX3NlY3Rpb24pOiBEZWxldGUgdW51c2VkIHBhcmFtZXRlcnMuCisKK01vbiBPY3QgIDcgMTY6MjQ6MjEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBkd2FyZjIuaDogQWRkIG5ldyBTR0kvTUlQUyBhdHRyaWJ1dGVzLgorCisJKiBkd2FyZjJvdXQuYyAoKl9zZXBhcmF0ZV9saW5lX2luZm9fKik6IFBhcmFsbGVsIGxpbmUgbnVtYmVyCisgCWluZm9ybWF0aW9uIGZvciBmdW5jdGlvbnMgZGVmaW5lZCBpbiBzZWN0aW9ucyBvdGhlciB0aGFuIC50ZXh0LgorCShzaXplX29mX2xpbmVfaW5mbyk6IFN1cHBvcnQgaXQuCisJKG91dHB1dF9saW5lX2luZm8pOiBMaWtld2lzZS4KKwkoZHdhcmZvdXRfbGluZSk6IExpa2V3aXNlLgorCShnZW5fY29tcGlsZV91bml0X2RpZSk6IERvbid0IGFkZCBoaWdoL2xvd19wYyBvciBzdG10X2xpc3QKKyAJYXR0cmlidXRlcyBoZXJlLgorCShkd2FyZm91dF9maW5pc2gpOiBBZGQgdGhlbSBoZXJlIGlmIGFwcHJvcHJpYXRlLgorCShyZW1vdmVfQVQpOiBmcmVlIHJlbW92ZWQgYXR0cmlidXRlIHByb3Blcmx5LgorCShnZW5fdHlwZV9kaWUpOiBEb24ndCBhc3N1bWUgYSBuZXN0ZWQgdHlwZSBpcyBjb21wbGV0ZS4KKwkoZHdhcmZvdXRfZmluaXNoKTogRG9uJ3QgZW1pdCBsaW5lIGluZm8gaWYgaXQgd291bGQgYmUgZW1wdHkuCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9ibG9jayk6IERvbid0IGVtaXQgYSBESUUgZm9yIGEgYm9keSBibG9jay4KKwkob3V0cHV0X2RlY2xzX2Zvcl9zY29wZSk6IERvbid0IGluY3JlbWVudCBuZXh0X2Jsb2NrX251bWJlciBmb3IgdGhlCisgCW91dGVyIGJsb2NrLgorCShvdXRwdXRfZGVjbCk6IFN0YXJ0IGZyb20gdGhlIG91dGVyIGJsb2NrLCBub3QKKyAJdGhlIGZpcnN0IGlubmVyIGJsb2NrIHNpbmNlIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGluIEMrKy4KKwkodHlwZV90YWcpOiBIYW5kbGUgQysrIFRZUEVfTkFNRS4KKwkob3V0cHV0X3R5cGUpOiBGaXggaGFuZGxpbmcgb2YgVFlQRV9NRVRIT0RTLgorCShvdXRwdXRfZGVjbCk6IERvbid0IG91dHB1dCBhIERJRSBmb3IgYXJ0aWZpY2lhbCB0eXBlZGVmcy4KKworTW9uIE9jdCAgNyAxNTo0NzoyOSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAobW92ZGkgZGVmaW5lX3NwbGl0cyk6IEZpeCBwcmV2aW91cyBjaGFuZ2UgdG8gd29yaworCW9uIGJvdGggbGl0dGxlIGFuZCBiaWcgZW5kaWFuIGhvc3RzLgorCitTdW4gT2N0ICA2IDE2OjUyOjM0IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuaCAoY29tYmluYWJsZV9mc3ViKTogRG9uJ3QgcmV0dXJuIHdpdGhvdXQgYSB2YWx1ZS4KKworU3VuIE9jdCAgNiAxNDowNTozOSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAobW92e2RmLGRpfSBkZWZpbmVfc3BsaXRzKTogVXNlIHNwbGl0X2RvdWJsZSB0bworCXByb3Blcmx5IHNwbGl0IENPTlNUX0RPVUJMRXMuCisJKG1vdmRpKTogTGlrZXdpc2UuCisKK1NhdCBPY3QgIDUgMDg6NDM6MTQgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaTM4Ni9jeWd3aW4zMi5oIChMSUJfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciAtbXdpbmRvd3MuCisJQWx3YXlzIHBhc3MgLWxrZXJuZWwzMi4KKwkoTElCR0NDX1NQRUMpOiBEb24ndCBkZWxldGUuCisJKFNUQVJURklMRV9TUEVDKTogUmVtb3ZlIGFsd2F5cy10cnVlIGNvbmRpdGlvbmFsaXphdGlvbi4KKwkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogVXNlIGRlZmF1bHQuCisKK0ZyaSBPY3QgIDQgMTc6MjI6NTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uKTogRG9uJ3QgZW1pdCBEV0FSRiBmb3IgbWVtYmVyCisgCXR5cGVzIG9mIGEgdHlwZSB3ZSBoYXZlbid0IGVtaXR0ZWQgeWV0LgorCShjb21waWxlX2ZpbGUpOiBTdGlsbCBlbWl0IERXQVJGIGZvciBwZW5kaW5nIHRhZ2dlZCB0eXBlcy4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG8gZW1pdCBEV0FSRiBsYWJlbHMgZm9yIGxldmVsIDEgYmxvY2tzLgorCisJKiBkd2FyZjJvdXQuYyAoZ2VuX3N1YnByb2dyYW1fZGllKTogU3RhcnQgZnJvbSB0aGUgb3V0ZXIgYmxvY2ssIG5vdAorIAl0aGUgZmlyc3QgaW5uZXIgYmxvY2sgc2luY2UgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgaW4gQysrLgorCShnZW5fbGV4aWNhbF9ibG9ja19kaWUpOiBLZWVwIHRyYWNrIG9mIHRoZSBibG9jayBkZXB0aC4KKwkoZ2VuX2Jsb2NrX2RpZSk6IERvbid0IGVtaXQgYSBESUUgZm9yIGEgYm9keSBibG9jay4KKwkoZ2VuX2lubGluZWRfc3Vicm91dGluZV9kaWUpOiBEb24ndCBlbWl0IGFueXRoaW5nIGZvciBhbgorCWFic3RyYWN0IGluc3RhbmNlLgorCShkZWNsc19mb3Jfc2NvcGUpOiBEb24ndCBpbmNyZW1lbnQgbmV4dF9ibG9ja19udW1iZXIgZm9yIHRoZQorIAlvdXRlciBibG9jay4KKworRnJpIE9jdCAgNCAxNToyNzo1NSAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIHNoLmggKFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUCk6IERlZmluZS4KKworCSogc2guYyAoc2Z1bmNfdXNlc19yZWcpOiBOZXcgZnVuY3Rpb24uCisJKG5vbmNhbGxfdXNlc19yZWcsIG1hY2hpbmVfZGVwZW5kZW50X3Jlb3JnLCBmaW5hbF9wcmVzY2FuX2luc24pOgorCUhhbmRsZSBzcGVjaWFsIGZ1bmN0aW9ucyBsaWtlIGZ1bmN0aW9uIGNhbGxzIGZvciBwdXJwb3NlcyBvZiByZWxheGluZy4KKwkobm9uY2FsbF91c2VzX3JlZyk6IEFkZGVkIHNvbWUgbWlzc2luZyBjYXNlcyBvZiByZWdpc3RlcnMKKwliZWluZyB1c2VkIGluIG5vbi1jYWxsIGluc3RydWN0aW9ucy4KKworRnJpIE9jdCAgNCAxMDo1MTo0MCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jOiBUZWFyIG91dCBiYWNrY2hhaW5pbmcgYnJhaW4gZGFtYWdlLgorCShyZW1vdmVfQVQsIHJlbW92ZV9jaGlsZHJlbik6IE5ldyBmdW5jdGlvbnMuCisJKG1vZGlmaWVkX3R5cGVfZGllKTogQ2FsbCBnZW5fdHlwZV9kaWUgaW5zdGVhZCBvZiBiYWNrY2hhaW5pbmcuCisJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IERvbid0IGdlbmVyYXRlIGEgbmV3IHNwZWNpZmljYXRpb24gRElFIGZvciAKKwltZW1iZXIgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGNsYXNzOyB1c2UgdGhlIGRlY2xhcmF0aW9uIERJRSBpbnN0ZWFkLgorCShnZW5fc3RydWN0X29yX3VuaW9uX3R5cGVfZGllKTogU3VwcG9ydCBEV19BVF9kZWNsYXJhdGlvbi4KKwkoZ2VuX3R5cGVfZGllKTogRG9uJ3Qgc2V0IFRSRUVfQVNNX1dSSVRURU4gb24gaW5jb21wbGV0ZSBzdHJ1Y3RzLgorCShnZW5fZGVjbF9kaWUpOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlOyBpdCdzIG11Y2ggc2ltcGxlciB0byBlbWl0IAorCXRoZSBjbGFzcyBmcm9tIHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbi4KKworRnJpIE9jdCAgNCAwOTo1NDoyMSAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByZWdpc3RlcnMgZm9yIHRoZSBpbnNucyB3ZSByZWNvZ25pemUuCisJKiBpMzg2LmggKGZsYWdfb21pdF9mcmFtZV9wb2ludGVyLCBvdXRlcl9mdW5jdGlvbl9jaGFpbik6IERlY2xhcmUuCisJKGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfYWxsb2NhKTogTGlrZXdpc2UKKwkocnR4X2VxdWFsX2Z1bmN0aW9uX3ZhbHVlX21hdHRlcnMpOiBMaWtld2lzZQorCShOX1JFR1NfVVNFRCwgTl9BTExPQ0FUQUJMRV9SRUdJU1RFUlMpOiBEZWZpbmUuCisKKwkqIGkzODYubWQgKGFkZGRpM18xLCBzdWJkaTNfMSk6IEluc25zIHJlbmFtZWQgZnJvbSBhZGRkaTMgYW5kIHN1YmRpMzsKKwlhZGRlZCBtaXNzaW5nIGVhcmx5Y2xvYmJlcnMuCisJKGFkZGRpM18xKTogUmVtb3ZlZCBkdXBsaWNhdGVzIGZyb20gY29tbXV0YXRpdml0eS4KKwkoYWRkZGkzLCBzdWJkaTMpOiBOZXcgZGVmaW5lX2V4cGFuZHMuCisJKG1vdnNmLCBtb3ZzZl9tZW0sIG1vdnNmX25vcm1hbCwgbW92ZGYsIG1vdmRmX21lbSAsIG1vdmRmX21lbSsxKTogVGFrZQorCW51bWJlciBvZiB1c2VkIHZzLiBhdmFpbGFibGUgcmVnaXN0ZXJzIGludG8gYWNjb3VudC4KKwkobW92eGYsIG1vdnhmX21lbSwgbW92eGZfbWVtKzEsIGFkZHNpZGkzXzEsIGFkZHNpZGkzXzIpOiBMaWtld2lzZS4KKwkoYWRkZGkzXzEsIHN1YnNpZGkzLCBzdWJkaTNfMSk6IExpa2V3aXNlLgorCShhZGRzaWRpM18xLCBhZGRzaWRpM18yLCBzdWJzaWRpMyk6IE5lZWQgbm8gZ2VuZXJhdGUgZnVuY3Rpb24uCisKKwkqIGkzODYuYyAoYXNtX291dHB1dF9mdW5jdGlvbl9wcmVmaXgpOiBEb24ndCB1c2UKKwlBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FIGlmIGl0IGlzIG5vdCBkZWZpbmVkLgorCitGcmkgT2N0ICA0IDA3OjAxOjU1IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9kZWNsKTogRG9uJ3QgdHVybiBvZmYgREVDTF9CSVRfRklFTEQKKwlpZiBERUNMJ3MgYWxpZ25tZW50IGlzIGxlc3MgdGhhbiBpdHMgdHlwZS4KKworVGh1IE9jdCAgMyAxOTo0MjozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChyZXN0X29mX3R5cGVfY29tcGlsYXRpb24pOiBBbHNvIGRvIHRoaXMgZm9yIERXQVJGLgorCShjb21waWxlX2ZpbGUpOiBEb24ndCB0cnkgdG8gd3JpdGUgb3V0IERXQVJGIGZvciB2YXJzIHdpdGggbm8gUlRMLgorCitUaHUgT2N0ICAzIDE4OjMxOjI4IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogZ2luY2x1ZGUve3N0ZGFyZy5oLHZhcmFyZ3MuaH06IFVzZSAjaW5jbHVkZSAiIiwgbm90ICNpbmNsdWRlIDw+LgorCitXZWQgT2N0ICAyIDE3OjI5OjUzIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IEFkZCBhIGhhY2sgdG8gdGhlIGJpZyBzZWQgc2NyaXB0IHRvIHdvcmsgYXJvdW5kIGEKKwlidWcgaW4gdGhlIHNlZCBpbXBsZW1lbnRhdGlvbiBvbiBIUC9VWCAxMC4yMC4KKworV2VkIE9jdCAgMiAxNjo1Mzo1NiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jIChtb2RpZmllZF90eXBlX2RpZSk6IERvbid0IGdlbmVyYXRlIHJlZHVuZGFudCBESUVzLgorCShnZW5fe2FycmF5LHBvaW50ZXIscmVmZXJlbmNlLHB0cl90b19tYnJ9X3R5cGVfZGllKTogTGlrZXdpc2UuCisJKGdlbl97c3Vicm91dGluZSxzdHJpbmcsc2V0fV90eXBlX2RpZSk6IExpa2V3aXNlLgorCisJKiBkd2FyZjJvdXQuYzogVW5kbyB0ZXh0X2VuZF9sYWJlbCwgYWRkX3NyY19jb29yZHMgY2hhbmdlcy4KKwkoYWRkcl9jb25zdF90b19zdHJpbmcpOiBGaXggdHlwb3MuCisJKGRlY2xfY2xhc3NfY29udGV4dCk6IE5ldyBmbi4KKwkoZ2V0X0FUX3Vuc2lnbmVkKTogTmV3IGZuLgorCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBPbmx5IGVtaXQgc3JjIGNvb3JkcyBpbmZvIGZvciBhIHNwZWNpZmljYXRpb24KKwlpZiB0aGV5IGNoYW5nZWQuCisJKGdlbl92YXJpYWJsZV9kaWUpOiBTdXBwb3J0IERXX0FUX2RlY2xhcmF0aW9uIGFuZCBEV19BVF9zcGVjaWZpY2F0aW9uLgorCShnZW5fZGVjbF9kaWUpOiBBdm9pZCBnZW5lcmF0aW5nIHJlZHVuZGFudCBESUVzIGZvciBtZW1iZXIgZnVuY3Rpb25zCisJYW5kIHZhcmlhYmxlcy4KKworV2VkIE9jdCAgMiAxMToyMjo1MCAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBMb29zZW4gY29uZGl0aW9ucyBmb3IgbWF0Y2ggb2YKKwknUScgYW5kICdUJyB3aGlsZSByZWxvYWQgaXMgcnVubmluZy4KKwkqIHBhLmMgKGhwcGFfbGVnaXRpbWl6ZV9hZGRyZXNzKTogUmV3b3JrIHRvIGdlbmVyYXRlIG1vcmUKKwlpbmRleGVkIGFuZCBzY2FsZWQgaW5kZXhlZCBhZGRyZXNzaW5nLgorCSogcGEubWQgKHNjYWxlZCBpbmRleGVkIHN0b3JlKTogQWRkIGRlZmluZV9zcGxpdHMgdG8gdW5kbworCXBlc3NpbWl6YXRpb25zIGNyZWF0ZWQgYnkgaHBwYV9sZWdpdGltaXplX2FkZHJlc3MgZm9yIGludGVnZXIKKwlzdG9yZXMuCisKKwkqIHBhLmMgKHJlbW92ZV91c2VsZXNzX2FkZHRyX2luc25zKTogTmV3IGZ1bmN0aW9uLgorCShwYV9yZW9yZyk6IERlbGV0ZSBjb2RlIHRvIHJlbW92ZSB1c2VsZXNzIGFkZCx0ciBpbnNucy4KKwlJbnN0ZWFkIGNhbGwgcmVtb3ZlX3VzZWxlc3NfYWRkdHJfaW5zbnMuCisJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IENhbGwgcmVtb3ZlX3VzZWxlc3NfYWRkdHJfaW5zbnMKKwl0byBjYXRjaCBhbnkgYWRkLHRyIGluc25zIGNyZWF0ZWQgYnkgcmVvcmcuCisKKwkqIHBhLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBSZW1vdmUgZHVwbGljYXRlL3VzZWxlc3MgY29kZS4KKworCSogcGEuaCAoUEFSU0VfTEREX09VVFBVVCk6IEhhbmRsZSBvdXRwdXQgZnJvbSBocHV4MTAuMjAgImNoYXRyIi4KKworVHVlIE9jdCAgMSAxNzoyMzozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGR3YXJmMm91dC5jICh0ZXh0X2VuZF9sYWJlbCk6IE5ldyBzdGF0aWMuCisJKHNpemVfb2ZfbGluZV9pbmZvKTogVGhlIGZpbmFsIGVudHJ5IGlzIHNtYWxsZXIuCisJKG91dHB1dF9hcmFuZ2VzKTogVXNlIFRFWFRfU0VDVElPTiBpbnN0ZWFkIG9mIFRFWFRfQkVHSU5fTEFCRUwgYW5kCisgCXRleHRfZW5kX2xhYmVsIGluc3RlYWQgb2YgVEVYVF9FTkRfTEFCRUwuCisJKGdlbl9jb21waWxlX3VuaXRfZGllKTogTGlrZXdpc2UuCisJKG91dHB1dF9saW5lX2luZm8pOiBMaWtld2lzZS4gIFVzZSBhIGZpeGVkIGFkdmFuY2UgZm9yIHRoZSBsYXN0IGVudHJ5LgorCShkd2FyZm91dF9pbml0KTogRG9uJ3Qgb3V0cHV0IHN0YXJ0aW5nIGxhYmVscy4KKwkoZHdhcmZvdXRfZmluaXNoKTogU2V0IHVwIHRleHRfZW5kX2xhYmVsLiAgRG9uJ3Qgb3V0cHV0IGVuZGluZyBsYWJlbHMuCisKKwkoYWRkX3B1cmVfb3JfdmlydHVhbF9hdHRyaWJ1dGUpOiBEb24ndCBzYXkgcHVyZSB2aXJ0dWFsIGZvciBub3cuCisJKHR5cGVfdGFnKTogSGFuZGxlIEMrKyBUWVBFX05BTUUuCisJKGdlbl9mb3JtYWxfcGFyYW1ldGVyX2RpZSk6IFN1cHBvcnQgRFdfQVRfYXJ0aWZpY2lhbC4KKwkoZ2VuX2Zvcm1hbF90eXBlc19kaWUpOiBEbyBlbWl0IHRoZSB0eXBlIGZvciAndGhpcycuCisJKGdlbl9tZW1iZXJfZGllKTogRml4IGhhbmRsaW5nIG9mIFRZUEVfTUVUSE9EUy4KKwkoZ2VuX2RlY2xfZGllKTogRG8gb3V0cHV0IGEgRElFIGZvciBtZW1iZXIgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorCURvbid0IG91dHB1dCBhIERJRSBmb3IgYXJ0aWZpY2lhbCB0eXBlZGVmcy4KKworCShhZGRfbWVtYmVyX2F0dHJpYnV0ZSk6IFJlbW92ZSwgbm90IGluIERXQVJGLUlJLgorCShnZW5fYXJyYXlfdHlwZV9kaWUpOiBSZW1vdmUgcmVmIHRvIGFkZF9tZW1iZXJfYXR0cmlidXRlLgorCShnZW5fc2V0X3R5cGVfZGllLCBnZW5fZW50cnlfcG9pbnRfZGllLCBnZW5fZW51bWVyYXRpb25fdHlwZV9kaWUsCisgCWdlbl9zdWJwcm9ncmFtX2RpZSwgZ2VuX3ZhcmlhYmxlX2RpZSwgZ2VuX2ZpZWxkX2RpZSwKKyAJZ2VuX3BvaW50ZXJfdHlwZV9kaWUsIGdlbl9yZWZlcmVuY2VfdHlwZV9kaWUsIGdlbl9wdHJfdG9fbWJyX3R5cGVfZGllLAorIAlnZW5fc3RyaW5nX3R5cGVfZGllLCBnZW5fc3RydWN0X29yX3VuaW9uX3R5cGVfZGllLAorIAlnZW5fc3Vicm91dGluZV90eXBlX2RpZSwgZ2VuX3R5cGVkZWZfZGllKTogTGlrZXdpc2UuCisKKwkoZ2V0X0FUX2ZsYWcpOiBOZXcgZm4uCisJKGFkZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMpOiBTcGxpdCBvdXQuLi4KKwkoYWRkX25hbWVfYW5kX3NyY19jb29yZHNfYXR0cmlidXRlcyk6IEZyb20gaGVyZS4KKwkoZ2VuX3N1YnByb2dyYW1fZGllKTogU3VwcG9ydCBEV19BVF9kZWNsYXJhdGlvbiBhbmQgCisJRFdfQVRfc3BlY2lmaWNhdGlvbi4gCisKKwkoZ2VuX2NvbXBpbGVfdW5pdF9kaWUpOiBEb24ndCBlbWl0IGZ1bGwgcGF0aG5hbWUgZm9yIHNvdXJjZSBmaWxlOyAKKwljb21tZW50IGNsYWltZWQgdGhhdCBTR0kgcmVxdWlyZWQgaXQsIGJ1dCB0aGV5IGRvbid0IGVtaXQgaXQgZWl0aGVyLgorCUFwcGVuZCAtZyB0byBwcm9kdWNlciByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQuCisKK1R1ZSBPY3QgIDEgMTQ6MTk6MjMgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBnY2MuYyAodXNlZF9hcmcpOiBXaGVuIGNhbGwgeG1hbGxvYyBmb3IgbXN3aXRjaGVzLCBwYXNzIDEgaWYKKwluX3N3aXRjaGVzIGlzIHplcm8uCisKK01vbiBTZXAgMzAgMTc6NDY6MjYgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBzaC5jIChnZW5fc2hsX2FuZCwgZ2VuX3NobF9zZXh0KTogVXNlIGdlbl9sb3dwYXJ0IHRvCisJZ2VuZXJhdGUgcnR4IGluIHRoZSBhcHByb3ByaWF0ZSBtb2RlIGZvciB6ZXJvL3NpZ24tZXh0ZW5zaW9uLgorCURvbid0IGdlbmVyYXRlIGEgemVybyBiaXQgc2hpZnQuCisJKGdlbl9zaGxfc2V4dCkgRGlyZWN0bHkgdXNlIGdlbl9hc2hpZnQgaW5zdGVhZCBvZiBnZW5fYXNocnNpMy4KKworTW9uIFNlcCAzMCAxNzoxNzo1NiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZpeGluYy5zdnI0OiBJbiBtYXRoLmgsIHJlZGVmaW5lIGV4Y2VwdGlvbiB0byBfX21hdGhfZXhjZXB0aW9uCisJZm9yIEMrKywgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCA8ZXhjZXB0aW9uPi4KKwkqIGZpeGluY2x1ZGVzOiBMaWtld2lzZS4KKwlGaXggY2hlY2sgZm9yIGNsYXNzIGluIG1hdGguaCB0byBub3QgbWF0Y2ggZnBfY2xhc3MuCisKK01vbiBTZXAgMzAgMTc6MTU6MTkgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBpcmlzNi5oIChBU01fU1BFQyk6IEFkZCAtdy4KKwkoU1RBUlRGSUxFX1NQRUMpOiBBZGQgbWlwczMgdG8gbjMyIHBhdGhuYW1lcy4KKwlBZGQgLUwvdXNyL2xpYjMyL21pcHMgZm9yIG4zMiBjYXNlcy4KKwkoRU5ERklMRV9TUEVDKTogQWRkIG1pcHMzIHRvIG4zMiBwYXRobmFtZXMuCisKK01vbiBTZXAgMzAgMTM6MjA6MzEgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBnZW5vcGluaXQuYyAoZ2VuX2luc24pOiBMb29rIHRocm91Z2ggdGhlIG1vZGVzIGluIHJldmVyc2Ugb3JkZXIsCisJdG8gYXZvaWQgc3RvcHBpbmcgZWFybHkgb24gQ0Mgd2hlbiBFWFRSQV9DQ19NT0RFUyBpcyB1c2VkLgorCisJKiBmaXhpbmNsdWRlczogQWRkIGV4dGVybiAiQyIgdG8gPHN5cy9tbWFuLmg+IG9uIEhQL1VYLgorCitTdW4gU2VwIDI5IDEyOjM5OjE4IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogYy10eXBlY2suYyAocG9pbnRlcl9kaWZmKTogRG8gbm90IGRvIGRlZmF1bHQgY29udmVyc2lvbnMgd2hlbgorCWRvaW5nIHRoZSBtaW51cyBleHByZXNzaW9uLCBpbiBjYXNlIHJlc3R5cGUgaXMgYSBzaG9ydCB0eXBlLgorCitTdW4gU2VwIDI5IDExOjIyOjEwIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuYyAoYnVpbGRfY29tcGxleCk6IEFkZCBuZXcgYXJndW1lbnQsIFRZUEUuCisJKiB0cmVlLmggKGJ1aWxkX2NvbXBsZXgpOiBMaWtld2lzZS4KKwkqIGMtbGV4LmMgKHl5bGV4KTogQWRkIG5ldyBhcmcsIFRZUEUsIHRvIGNhbGwgdG8gYnVpbGRfY29tcGxleC4KKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBMaWtld2lzZS4KKwkoZm9sZCwgY2FzZSBDT05KX0VYUFIsIENPTVBMRVhfRVhQUik6IExpa2V3aXNlLgorCSogdmFyYXNtLmMgKGNvcHlfY29uc3RhbnQsIGNhc2UgQ09NUExFWF9DU1QpOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IERvbid0IHRyeSB0byBkaXJlY3RseQorCWxvYWQgYSBjb21wbGV4LgorCSogcmVjb2cuYyAocmVnaXN0ZXJfb3BlcmFuZCk6IERvbid0IHJlamVjdCBzdWJyZWcgb2YgY29tcGxleCBtb2RlLgorCSogZW1pdC1ydGwuYyAobWFya191c2VyX3JlZyk6IE5ldyBmdW5jdGlvbi4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFVzZSBpdC4KKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBMaWtld2lzZSwgYW5kIHNpbXBsaWZ5IGNvZGUuCisKKwkqIHRyZWUuYyAoY29udGFpbnNfcGxhY2Vob2xkZXIpOiBSZXR1cm4gMSBmb3IgUExBQ0VIT0xERVJfRVhQUi4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogbWVtc2V0L2J6ZXJvIGdldHMgcHRyX21vZGUsIG5vdCBQbW9kZS4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogRml4IGVycm9ycyBpbiBwcmV2aW91cyBwYXRjaGVzLgorCisJKiB4LWxpbnV4OiBTaW1wbGlmeSwgYnV0IGVuc3VyZSBoZWFkZXJzIGFyZW4ndCBjaGFuZ2VkLgorCisJKiBnZXRwd2QuYzogTm8gbG9uZ2VyIGluY2x1ZGUgZGlyZWN0LmggZm9yIF9XSU4zMi4KKworCSogY29uZmlndXJlIChpWzM0NTZdODYtKi1pc2MqKTogUmVtb3ZlIGJvZ3VzIGVjaG8uCisJKG02OGstYXBwbGUtYXV4Kik6IGEtdXguaCByZW5hbWVkIGZyb20gYXV4LmguCisJKENDKTogRXNjYXBlICIkIiBjaGFyIGluICJuby1zeW1saW5rIiBjYXNlIGZvciBiYXNoL2N5Z3dpbjMyIGJ1Zy4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGxkaXJzKTogUmVuYW1lZCBmcm9tIGluc3RhbGwtZGlyLgorCUNyZWF0ZSAkKHByZWZpeCkgYW5kICQoZXhlY19wcmVmaXgpIGlmIGRvZXNuJ3QgZXhpc3QuCisJKGluc3RhbGwtZmxvYXQpOiBSZWZsZWN0IG5ldyBuYW1lIGZvciBpbnN0YWxsZGlycy4KKwkoaW5zdGFsbC17Y29tbW9uLGluZm8sbWFuLGxpYmdjYyxtdWx0aWxpYixsaWJvYmpjfSk6IExpa2V3aXNlLgorCShpbnN0YWxsLXtpbmNsdWRlLWRpcixhc3NlcnQtaCxjb2xsZWN0Mn0pOiBMaWtld2lzZS4KKworCSogcmVsb2FkMS5jIChnZW5fcmVsb2FkKTogSGFuZGxlIFNVQlJFRyBpbiBQTFVTIHNwZWNpYWxseSB0b28uCisJQ2hhbmdlIGNhbGxzIHRvIGVtaXRfbW92ZV9pbnNuIHRvIHJlY3Vyc2l2ZSBjYWxscy4KKworCSogc3RtdC5jIChmaXh1cF9nb3Rvcyk6IFdoZW4gcnVubmluZyB1bmRlZmluZWQgbGFiZWxzLCBpZiBubyBjbGVhbnVwCisJYWN0aW9ucyBmb3IgdGhpcyBibG9jaywgZG9uJ3QgY2xlYXIgQkVGT1JFX0pVTVAuCisKK0ZyaSBTZXAgMjcgMTM6NDg6MjEgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDcmVhdGUgc2hvcnQgaW50IHR5cGVzIGJlZm9yZQorCWNyZWF0aW5nIHNpemVfdCBpbiBjYXNlIGEgbWFjaGluZSBkZXNjcmlwdGlvbiBuZWVkcyB0byB1c2UKKwl1bnNpZ25lZCBzaG9ydCBmb3Igc2l6ZV90LgorCitGcmkgU2VwIDI3IDEyOjI4OjU0IDE5OTYgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisgICAgICAgICogZ2NjLmMgKGRvX3NwZWNfMSk6IEFsbG93IC1BIGluICVbU3BlY10uCisJCisJKiBpMzg2LmggKENQUF9DUFVfU1BFQyk6IE5ldy4gQWRkZWQgZm9yIGRlZmluaW5nIHRoZSBzdWJtb2RlbC4KKworCSogaTM4Ni5jIChhc21fb3V0cHV0X2Z1bmN0aW9uX3ByZWZpeCwgZnVuY3Rpb25fcHJvbG9ndWUsCisJaXg4Nl9leHBhbmRfcHJvbG9ndWUpOiBNYWtlIHRoZSByb3V0aW5lIHRoYXQgc2V0cyB0aGUgR09UICh3aGVuIHBpYworCWlzIGVuYWJsZWQpIGEgZnVuY3Rpb24sIHRvIGFzc2lzdCBkZWJ1Z2dpbmcuCisKKwkqIGkzODYubWQgKGdlbl9wcm9sb2d1ZV9nZXRfcGMpOiBDYWxsIHRoZSBmdW5jdGlvbiBjcmVhdGVkIGFib3ZlLgorCShkaXZkZjMpOiBBZGRlZC4gCisJCisJKiBpMzg2L2RndXguaCAoQ1BQX1BSRURFRklORVMsIENQUF9TUEVDKTogUmVmZXJlbmNlIENQUF9DUFVfU1BFQy4KKwlVc2Ugc3ZyNCBhc3NlbWJsZXIgZGlyZWN0aXZlIC5iYWNrYWxpZ24gaW5zdGVhZCBvZiAuYWxpZ24uICAKKwkoYWxpZ24gdG8geCBieXRlcyBpZiBpdCB0YWtlcyBubyBtb3JlIHRoYW4geSBieXRlcyB0byBkbyBzby4pCisKKwkqIGkzODYve2FpeDM4Nm5nLmgsZGd1eC5ofSAoQ1BQX1NQRUMpOiBVc2UgJVtjcHBfY3B1XS4KKwkqIGkzODYve2ZyZWVic2QtZWxmLGdhcyxpc2MsbGludXgtYW91dH0uaDogTGlrZXdpc2UuCisJKiBpMzg2L3tsaW51eC1vbGRsZCxsaW51eCxvc2ZlbGYsb3Nmcm9zZSxzY28sc2NvNH0uaDogTGlrZXdpc2UuCisJKiBpMzg2L3tzY280ZGJ4LHNjbzUsc29sMixzeXN2M30uaDogTGlrZXdpc2UuCisKK1RodSBTZXAgMjYgMTc6NTg6MzQgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG1hdGVtYXRpay5zdS5zZT4KKworCSogbTY4ay5tZCAobXVsc2lkaTMgbWF0Y2hlcik6IENoYW5nZSBwcmVkaWNhdGUgY29uc3RfaW50X29wZXJhbmQKKwl0byBjb25zdF9zaW50MzJfb3BlcmFuZC4gIEdldCByaWQgb2YgYm9ndXMgcmFuZ2UgY29uZGl0aW9uLgorCitUaHUgU2VwIDI2IDE3OjEyOjAwIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKHN0bXAtaW50LWhkcnMpOiBEb24ndCBjZCB0byBzcmNkaXIgYmVmb3JlIGNvcHlpbmcKKwloZWFkZXIgZmlsZXMgdG8gb2JqZGlyLgorCitXZWQgU2VwIDI1IDIxOjIyOjU3IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogaDgzMDAuaCAoRklSU1RfUFNFVURPX1JFR0lTVEVSKTogQnVtcCB1cCBieSBvbmUuCisJKEFSR19QT0lOVEVSX1JFR05VTSk6IExpa2V3aXNlLgorCShGSVhFRF9SRUdJU1RFUlMpOiBBZGQgZW50cnkgZm9yIE1BQyByZWdpc3Rlci4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUzwgUkVHX0FMTE9DX09SREVSKTogTGlrZXdpc2UuCisJKEhBUkRfUkVHTk9fTlJFR1MpOiBIYW5kbGUgTUFDIHJlZ2lzdGVyLgorCShIQVJEX1JFR05PX01PREVfT0s8IFJFR05PX09LX0ZPUl9CQVNFX1ApOiBMSWtld2lzZS4KKwkoUkVHSVNURVJfTkFNRVMpOiBMaWtld2lzZS4KKwkoZW51bSByZWdfY2xhc3MpOiBOZXcgTUFDX1JFR1MgcmVnaXN0ZXIgY2xhc3MuCisJKFJFR19DTEFTU19DT05URU5UUywgUkVHTk9fUkVHX0NMQVNTKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBMSWtld2lzZS4KKwkoUkVHSVNURVJfTU9WRV9DT1NUKTogTWFrZSBjb3BpZXMgdG8vZnJvbSB0aGUgTUFDIHJlZ2lzdGVyCisJZXhwZW5zZWl2ZS4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEZWZpbmUuCisJKiBoODMwMC5tZCAobW92c2lfaDgzMDBocyk6IFJlbmFtZWQgZnJvbSBtb3ZzaV9oODMwMGguCisJSGFuZGxlIG1vdmVzIHRvL2Zyb20gdGhlIE1BQyByZWdpc3Rlci4KKwkobWFjKTogVHdvIG5ldyBwYXR0ZXJucyB0byB1c2UgdGhlIG1hYyBpbnN0cnVjdGlvbi4KKworCSogaDgzMDAuYyAobm90aWNlX3VwZGF0ZV9jYyk6IEZpeCBDQ19TRVQgY2FzZS4KKwkocmVzdG9yZV9jb21wYXJlX3ApOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorCSogaDgzMDAubWQ6IEhhbmRsZSAic2V0IiB2cyAic2V0X3puX2MwIiBjb3JyZWN0bHkuCisJKGJDQyBwYXR0ZXJucyk6IE5vIGxvbmdlciBuZWVkIHRvIGNhbGwgcmVzdG9yZV9jb21wYXJlX3AuCisKKwkqIGg4MzAwLmMgKGdldF9zaGlmdF9hbGcpOiBGaXggSEltb2RlIEFTSElGVFJUIGJ5IDEzIG9yIDE0IGJpdHMuCisKK1dlZCBTZXAgMjUgMTg6NTI6MTkgMTk5NiAgSm9lcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgkKKworCSogc2gubWQgKGluc3YpOiBOZXcgcGF0dGVybi4KKworV2VkIFNlcCAyNSAxNjo0NzoyNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQHNlYmEuY3lnbnVzLmNvbT4KKworCSogc3BhcmMvdC1zdW5vczQxIChNVUxUSUxJQl97T1BUSU9OUyxESVJOQU1FUyxNQVRDSEVTfSk6IENyZWF0ZQorCW11bHRpbGliIHZlcnNpb25zIG9mIC1mcGljIGFuZCAtZlBJQy4KKwkoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogQ29tbWVudCBvdXQuCisKKwkqIHNwYXJjLmMgKHByaW50X29wZXJhbmQpOiBIYW5kbGUgbmV3IGNvZGVzIEgvTC4KKwkqIHNwYXJjLm1kIChsb19zdW1fZGlfc3AzMik6IEFkZCBsaXR0bGUgZW5kaWFuIHN1cHBvcnQuCisJKGFkZGRpM19zcDMyLHN1YmRpM19zcDMyLG11bHNpZGkzX3NwMzIsY29uc3RfbXVsc2lkaTMpOiBMaWtld2lzZS4KKwkodW11bHNpZGkzX3NwMzIsY29uc3RfdW11bHNpZGkzLHNtYWNkaSx1bWFjZGksYW5kZGkzX3NwMzIpOiBMaWtld2lzZS4KKwkoaW9yZGkzX3NwMzIseG9yZGkzX3NwMzIsbmVnZGkyX3NwMzIpOiBMaWtld2lzZS4KKworV2VkIFNlcCAyNSAxNTozMjozNSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBEb24ndCBtYWtlIGZsYWdfZm9yY2VfbWVtIGRpc2FibGUgaW5zdgorCWZvciBtZW1vcnkgb3BlcmFuZHMuCisJCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV9kZWNsKTogQWx3YXlzIHN0b3JlIGFkZHIgYmFjayBpbnRvIHguCisKK1R1ZSBTZXAgMjQgMTk6Mzc6MDAgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQuYyAocHVzaF9zZWNvbmRhcnlfcmVsb2FkKTogRG8gc3RyaXAgcGFyYWRveGljYWwgU1VCUkVHCisJZXZlbiBpZiByZWxvYWRfY2xhc3MgaXMgQ0xBU1NfQ0FOTk9UX0NIQU5HRV9TSVpFLiAgQ2hhbmdlIHJlbG9hZF9tb2RlCisJdG8gbW9kZSBpbiBTRUNPTkRBUllfTUVNT1JZX05FRURFRCBhbmQgZ2V0X3NlY29uZGFyeV9tZW0gY2FsbHMuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBGb3Igb3V0cHV0IHBhcnQgb2YgUkVMT0FEX09USEVSLAorCWVtaXQgYWZ0ZXIgUkVMT0FEX0ZPUl9PVVRQVVQsIGluIHJldmVyc2Ugb3JkZXIgb2YgcmVsb2FkIG51bWJlciwKKwlidXQgbm90IHNlcGFyYXRlbHkuCisKK1R1ZSBTZXAgMjQgMTg6MTM6MDcgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiBleHByLmMgKGVtaXRfZ3JvdXBfbG9hZCk6IEFsbG93IHRhcmdldCB0byBiZSBzbWFsbGVyIHRoYW4gc291cmNlLgorCitUdWUgU2VwIDI0IDE3OjQwOjM5IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogbTY4ay9hLXV4Lmg6IFJlbmFtZWQgZnJvbSBhdXguaCBiZWNhdXNlIG9mIE1TRE9TLgorCitUdWUgU2VwIDI0IDA4OjMzOjUzIDE5OTYgIERhdmlkIFMuIE1pbGxlciAgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisKKwkqIHRyZWUuYyAoY29weV9ub2RlKTogRml4IGVycm9yIGluIGxhc3QgY2hhbmdlLgorCitUdWUgU2VwIDI0IDA4OjI5OjAzIDE5OTYgIEphbWVzIEcuIFNtaXRoICA8anNtaXRoQGN5Z251cy5jby51az4KKworCSogZ2NjLmMgKHVzZWRfYXJnKTogRml4IG11bHRpbGliX21hdGNoZXMgcGFyc2luZyB0byBub3QgY29ycnVwdAorCWVudHJ5IHBhcmFtZXRlci4KKworVHVlIFNlcCAyNCAwODoyMjoxOCAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IFVzZSBydHhfZXF1YWxfcCB0byBjb21wYXJlIHJ0eC4KKworVHVlIFNlcCAyNCAwODoxNDowMSAxOTk2ICBDaHJpc3RpYW4gSXNlbGkgIDxDaHJpc3RpYW4uSXNlbGlAbHNsc3VuLmVwZmwuY2g+CisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQXZvaWQgY3JlYXRpbmcgcGFyYWRveGljYWwKKwlzdWJyZWcgd2lkZXIgdGhhbiBCSVRTX1BFUl9XT1JEIGFzIGlubGluZWQgZnVuY3Rpb24gcmVzdWx0LgorCitUdWUgU2VwIDI0IDA4OjAwOjE1IDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKHN0cnVjdCBkaXJlY3RpdmUsIGRpcmVjdGl2ZV90YWJsZSwgaGFuZGxlX2RpcmVjdGl2ZSk6CisJcGFzc190aHJ1IG5vdyAxIGZvciAjZGVmaW5lIGFuZCAyIGZvciAjcHJhZ21hLgorCShoYW5kbGVfZGlyZWN0aXZlKTogV2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHN1cHByZXNzIGNvbW1lbnQgYXQgZW5kCisJb2YgZGlyZWN0aXZlLCBpZ25vcmUgdGFicyBhbmQgc3BhY2VzIGFmdGVyIGNvbW1lbnQuICBSZW1vdmUgcmVkdW5kYW50CisJbGltaXQgdGVzdC4gIFdpdGggLWREIC1DLCBjb3B5IGNvbW1lbnQgd2hlbiBpc29sYXRpbmcgZGVmaW5pdGlvbi4KKwkoc2tpcF90b19lbmRfb2ZfY29tbWVudCk6IFdpdGggLUMsIGRvbid0IGNvcHkgbmV3bGluZSBhdCBlbmQKKwlvZiBDKysgY29tbWVudC4KKworCSogZml4aW5jLnB0eCwgZml4aW5jLnN2cjQsIGZpeGluY2x1ZGVzOiBJbnNlcnQgbmV3bGluZXMganVzdCBiZWZvcmUKKwllbmQgb2YgJ3NlZCcgY29tbWFuZCBzdHJpbmdzIGlmIGxhc3QgJ3NlZCcgY29tbWFuZCBpcyAnYScgb3IgJ2knLgorCitUdWUgU2VwIDI0IDA3OjI4OjU4IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRvcGxldi5jIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBJZiBubyBkZWJ1Z2dpbmcgZm9ybWF0cyBhcmUKKwlzdXBwb3J0ZWQsIHNldCB0byBOT19ERUJVRy4KKwkobWFpbik6IERvbid0IGRvIHNldHRpbmcgb2YgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIGhlcmUuCisKK01vbiBTZXAgMjMgMjI6NDU6MTUgMTk5NiAgU2VhbiBNY05laWwgIDxzZWFuQG1jbmVpbC5jb20+CisKKwkqIHJzNjAwMC92eHBwYy5oLCBzcGFyYy92eHNpbS5oOiBOZXcgZmlsZXMuCisJKiBjb25maWd1cmUgKHBvd2VycGMtKi12eHdvcmtzKiwgc3BhcmMtKi12eHNpbSopOiBOZXcgdGFyZ2V0cy4KKwkqIG9iamMvb2JqYy5oIChCT09MKTogRGVmaW5lIEJPT0wgYXMgaW50IGZvciBWeFdvcmtzLgorCitNb24gU2VwIDIzIDIxOjIzOjI3IDE5OTYgIEtsYXVzIEsiYW1wZiAgKGtrYWVtcGZAcHJvZ2lzLmRlKQorCisJKiBleHBsb3cuYyAocHJvbW90ZV9tb2RlLCBjYXNlIFJFRkVSRU5DRV9UWVBFKTogTmV3IGNhc2UuCisKK01vbiBTZXAgMjMgMjE6MTU6NDMgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogQ2hlY2sgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyB2YWx1ZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBGaXggZm9yZ290dGVuIGNhc2UgaW4gbGFzdCBjaGFuZ2U6CisJY2hlY2sgREVDTF9BUlRJRklDSUFMIGFsc28gd2hlbiB1c2luZyB0aGUgc2hvcnQgY3V0IHdheS4KKworTW9uIFNlcCAyMyAxNTo1NToyNCAxOTk2ICBEYXZpZCBTLiBNaWxsZXIgIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorCisJKiB0cmVlLmMgKGNvcHlfbm9kZSk6IEFib3J0IGlmIGRvbid0IGtub3cgc2l6ZSBvZiBub2RlLgorCisJKiB0cmVlLmMgKGJ1aWxkMSk6IENsZWFuIHVwIGluaXRpYWxpemF0aW9uIG9mIE9CU1RBQ0suCisKK01vbiBTZXAgMjMgMTU6MzU6MzMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1tdWx0aWxpYik6IERlcGVuZCBvbiAkKExBTkdfTElCMkZVTkNTKS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9mdW5jdGlvbik6IERvbid0IGNoZWNrIERFQ0xfU0VDVElPTl9OQU1FIGJlZm9yZQorCWNhbGxpbmcgZGJ4b3V0X2Z1bmN0aW9uX2VuZC4KKworTW9uIFNlcCAyMyAxNDo0MToxMiAxOTk2ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CisKKwkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IEV2ZW4gaWYgU01BTExfUkVHSVNURVJfQ0xBU1NFUywKKwlrbm93IGxpZmV0aW1lIG5vdCBleHRlbmRlZCBpZiBhbGxfYWRqYWNlbnQgc2V0LgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBIYW5kbGUgJysnIGNvbnN0cmFpbnQuCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBGb2xkIGluc2lkZSBBU01fT1BFUkFORFMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IElmIHBvc3RpbmNyZW1lbnQgZm9yIE1FTSBjYW4ndCB1c2UgYWRkCisJZGlyZWN0bHksIGxvYWQgYWRkcmVzcyBpbiByZWcgYW5kIGVucXVldWUgaW5jcmVtZW50IGFuZCBzdG9yZSBvZiByZWcuCisKKwkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRG9uJ3QgYXNzdW1lIGxhYmVsIG11c3QgYmUgc2Vjb25kIHBhcnQgb2YKKwlpZl90aGVuX2Vsc2UgaW4gY29uZGp1bXAuCisKKyAgICAgICAgKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJbiBuby1ub3AgbW92ZSBkZWxldGlvbiwgZG9uJ3QKKwl0ZXN0IFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUDsgaW5zdGVhZCB0ZXN0IGlmIG9wdGltaXphdGlvbiBpcworCXBlcmZvcm1lZC4KKwlDaGVjayBmb3IgUkVHX1VOVVNFRCBub3RlIG9uIHRvLWJlIGRlbGV0ZWQgaW5zbiBiZWZvcmUgc2VhcmNoaW5nIGZvcgorCXByZWNlZGluZyBpbnN0cnVjdGlvbiB0byBkZWxldGUgbm90ZSBmcm9tLgorCUlmIFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUCBpcyB0cnVlIGZvciBTUkVHLCByZXBsYWNlIElOU04gd2l0aCBVU0UuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSW5pdGlhbGl6ZSB0aGUgcHJldmlvdXNfb2Zmc2V0IGZpZWxkcworCWluIHJlZ19lbGltaW5hdGUgYmVmb3JlIGNhbGxpbmcgc2V0dXBfc2F2ZV9hcmVhcy4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IERlY2xhcmUgYW5kIHNldCB0aGlzX3JlbG9hZF9pbnNuLgorCisJKiBleHByLmMgKHZhcl9ydHgpOiBOZXcgZnVuY3Rpb24uCisJKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IEFsc28gdXNlIHRhcmdldCBpZiBzYW1lIGFzIHNpbmdsZXRvbi4KKworTW9uIFNlcCAyMyAxNDoyMjozNCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBEb24ndCB0ZXN0IGNsb2JiZXJlZCBjb25zdHJhaW50cy4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEZvciBvdXRwdXQgcGFydCBvZiBSRUxPQURfT1RIRVIsCisJcHV0IGluIGZyb250IG9mIGFueXRoaW5nIHByZXZpb3VzIGZvciB0aGF0IG91dHB1dCwgYnV0IG5vdCBzZXBhcmF0ZWx5LgorCitTdW4gU2VwIDIyIDIxOjA2OjQ2IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidGVzLCBjYXNlIEFfU0VDVElPTik6IEFsbG93IGZvciBzdGF0aWMKKwlsb2NhbCB2YXJpYWJsZS4KKworU3VuIFNlcCAyMiAxMTozMDoyNyAxOTk2ICBDaHJpc3RpYW4gSXNlbGkgIChjaHJpc3RpYW4uaXNlbGlAZGkuZXBmbC5jaCkKKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBSZXBsYWNlIGV4cGxpY2l0IGNoZWNrcyBmb3IgRlAgZXh0ZW5kIG9wcworCXdpdGggdXNlIG9mIGNhbl9leHRlbmRfcC4KKwlBZGQgbWlzc2luZyB0ZXN0cyBmb3IgRlAgdHJ1bmMgb3BlcmF0aW9ucy4KKworU3VuIFNlcCAyMiAxMToyMDowMiAxOTk2ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KKworCSogZHdhcmZvdXQuYyAoRFdBUkZfVkVSU0lPTik6IERlZmluZSBhcyAxIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCisJKiBkd2FyZjJvdXQuYyAoRFdBUkZfVkVSU0lPTik6IExpa2V3aXNlLgorCitTdW4gU2VwIDIyIDExOjEyOjIwIDE5OTYgIEpvZXJuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworICAgICAgICAqIGMtZGVjbC5jIChwdXNoZGVjbCk6IENoZWNrIG5ldyBkZWNsYXJhdGlvbiBhY3R1YWxseSBjb25mbGljdHMgYmVmb3JlCisJd2FybmluZyBhYm91dCBpbXBsaWNpdCBleHRlcm5hbCB2cy4gc3RhdGljIGRlY2xhcmF0aW9ucy4KKworCSogbG9vcC5jIChjb21iaW5lX2dpdnMpOiBJbXByb3ZlIGNvbWJpbmluZyBERVNUX1JFRyBnaXYgd2l0aAorCWl0cyBvbmx5IHVzZS4KKworU3VuIFNlcCAyMiAxMDo1MDowMyAxOTk2ICBTY290dCBDaHJpc3RsZXkgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KKworCSogQ3JlYXRlIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZQorCXNvIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIHJvdXRpbmVzIGNhbiBiZSBlYXNpbHkgc3Vic2l0aXR1ZWQKKwlmb3IgdGhlIEFOU0kgc3RhbmRhcmQgbWFsbG9jLCByZWFsbG9jLCBmcmVlLCBldGMuCisJKiBvYmpjL2FyY2hpdmUuYzogUmVwbGFjZSB1c2Ugb2YgX19vYmpjX3htYWxsb2MgYW5kIGZyZWUgCisJd2l0aCBvYmpjX21hbGxvYyBhbmQgb2JqY19mcmVlLgorCSogb2JqYy9oYXNoLmM6IFJlcGxhY2UgdXNlIG9mIF9fb2JqY194Y2FsbG9jIGFuZCBmcmVlCisJd2l0aCBvYmpjX2NhbGxvYyBhbmQgb2JqY19mcmVlLgorCSogb2JqYy9pbml0LmM6IFJlcGxhY2UgdXNlIG9mIGZyZWUgd2l0aCBvYmpjX2ZyZWUuCisJKiBvYmpjL21pc2MuYyAob2JqY19tYWxsb2MpOiBSZW5hbWVkIGZyb20gX19vYmpjX3htYWxsb2MuCisJKG9iamNfcmVhbGxvYyk6IFJlbmFtZWQgZnJvbSBfX29iamNfcmVhbGxvYy4KKwkob2JqY19hdG9taWNfbWFsbG9jKTogTmV3IGZ1bmN0aW9uLgorCShvYmpjX3ZhbGxvYyk6IE5ldyBmdW5jdGlvbi4KKwkob2JqY19jYWxsb2MpOiBSZW5hbWVkIGZyb20gX19vYmpjX2NhbGxvYy4KKwkob2JqY19mcmVlKTogTmV3IGZ1bmN0aW9uLgorCSogb2JqYy9vYmpjLWFwaS5oIChfb2JqY19tYWxsb2MpOiBOZXcgZnVuY3Rpb24gcG9pbnRlci4KKwkoX29iamNfYXRvbWljX21hbGxvYywgX29iamNfdmFsbG9jKTogTGlrZXdpc2UuCisJKF9vYmpjX3JlYWxsb2MsIF9vYmpjX2NhbGxvYywgX29iamNfZnJlZSk6IExpa2V3aXNlCisJKiBvYmpjL29iamMtbGlzdC5oOiBSZXBsYWNlIHVzZSBvZiBfX29ial94bWFsbG9jIGFuZCBmcmVlCisJd2l0aCBvYmpjX21hbGxvYyBhbmQgb2JqY19mcmVlLgorCSogb2JqYy9vYmplY3RzLmM6IExpa2V3aXNlLgorCSogb2JqYy9zYXJyYXkuYzogUmVwbGFjZSB1c2Ugb2YgX19vYmpjX3htYWxsb2MgYW5kIGZyZWUKKwl3aXRoIG9iamNfbWFsbG9jIGFuZCBvYmpjX2ZyZWUuCisJKiBvYmpjL3NhcnJheS5oIChfX29iamNfeG1hbGxvYywgX19vYmpjX3hyZWFsbG9jKTogRGVsZXRlLgorCSogb2JqYy9zZWxlY3Rvci5jOiBSZXBsYWNlIHVzZSBvZiBfX29iamNfeGNhbGxvYywgX19vYmpjX3hyZWFsbG9jLAorIAlhbmQgX19vYmpjX3htYWxsb2Mgd2l0aCBvYmpjX2NhbGxvYywgb2JqY19yZWFsbG9jLCBhbmQgb2JqY19tYWxsb2MuCisJKiBvYmpjL3Roci1kZWNvc2YxLmM6IFJlcGxhY2UgdXNlIG9mIF9fb2JqY194bWFsbG9jIGFuZCBmcmVlCisJd2l0aCBvYmpjX21hbGxvYyBhbmQgb2JqY19mcmVlLgorCSogb2JqYy90aHItaXJpeC5jLCBvYmpjL3Roci1tYWNoLmMsIG9iamMvdGhyLW9zMi5jOiBMaWtld2lzZS4KKwkqIG9iamMvdGhyLXBvc2l4LmMsIG9iamMvdGhyLXB0aHJlYWRzLCBvYmpjL3Roci1zaW5nbGU6IExpa2V3aXNlLgorCSogb2JqYy90aHItc29sYXJpcy5jLCBvYmpjL3Roci13aW4zMi5jLCBvYmpjL3Roci5jOiBMaWtld2lzZS4KKworU3VuIFNlcCAyMiAwNToyNjowMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogU2V0IHVwIExBTkdfTElCMkZVTkNTIGFuZCBMQU5HX0VYVFJBX0hFQURFUlMuCisJKiBNYWtlZmlsZS5pbiAobGliZ2NjMi5hKTogSW5jbHVkZSBMQU5HX0xJQjJGVU5DUy4KKwkoVVNFUl9IKTogQWRkIExBTkdfRVhUUkFfSEVBREVSUy4KKwkoTEFOR19MSUIyRlVOQ1MpOiBOZXcgbWFjcm8uCisJKExBTkdfRVhUUkFfSEVBREVSUyk6IE5ldyBtYWNyby4KKwkoc3RtcC1pbnQtaGRycyk6IERvbid0IGhhcmR3aXJlIGdpbmNsdWRlLgorCShzdGFtcC1vYmpsaXN0KTogRG9uJ3QgZGVwZW5kIG9uIE1ha2VmaWxlLgorCitTYXQgU2VwIDIxIDE4OjAwOjEwIDE5OTYgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiBhbHBoYS5tZCAoYWxwaGFfc3dhcHBlZF9jb21wYXJpc29uX29wZXJhdG9yIHBhdHRlcm4pOiBGaXggYXNtCisJb3BlcmFuZCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitTYXQgU2VwIDIxIDA3OjExOjUxIDE5OTYgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogZGVmYXVsdHMuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uCisJaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KKwkqIDE3NTBhLmggKFVTRVJfTEFCRUxfUFJFRklYKTogRGVmaW5lIGluc3RlYWQgb2YgQVNNX09VVFBVVF9MQUJFTFJFRi4KKwkqIGEyOWsuaCwgYWxwaGEuaCwgY29udmV4LmgsIGRzcDE2eHguaCwgZWx4c2kuaCwgZng4MC5oOiBMaWtld2lzZS4KKwkqIGdtaWNyby5oLCBoODMwMC5oLCBpMzg2L3N1bjM4Ni5oLCBpODYwLmgsIGk5NjAuaCwgbnMzMmsuaDogTGlrZXdpc2UuCisJKiBwZHAxMS5oLCBweXIuaCwgcm9tcC5oLCBzaC5oLCBzcGFyYy5oLCBzcHVyLmgsIHRhaG9lLmg6IExpa2V3aXNlLgorCSogdmF4LmgsIHdlMzJrLmg6IExpa2V3aXNlLgorCSogaTM4Ni9hdHQuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBSZWRlZmluZSwgbm90IEFTTV9PVVRQVVRfTEFCRUxSRUYuCisJKiBpMzg2L2JzZC5oLCBpMzg2L2x5bnguaCwgaTM4Ni9zY281LmgsIGk4NjAvZngyODAwLmg6IExpa2V3aXNlLgorCSogbTY4ay8zYjEuaCwgbTY4ay9tb3QzMzAwLmgsIG02OGsvdG93ZXItYXMuaCwgbTY4ay90b3dlci5oOiBMaWtld2lzZS4KKwkqIHB0eDQuaCwgc3BhcmMvcGJkLmgsIHN2cjMuaCwgc3ZyNC5oOiBMaWtld2lzZS4KKwkqIGkzODYvb3Nmcm9zZS5oLCBtODhrLmggKFVTRVJfTEFCRUxfUFJFRklYKTogUmVkZWZpbmUuCisJKiBuZXh0c3RlcC5oIChVU0VSX0xBQkVMX1BSRUZJWCk6IFJlZGVmaW5lLgorCShBU01fT1VUUFVUX0xBQkVMUkVGKSBVc2UgVVNFUl9MQUJFTF9QUkVGSVguCisJKiBhcm0vYW91dC5oLCBtaXBzLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBEZWxldGUuCisJKiByczYwMDAvbHlueC5oIChVU0VSX0xBQkVMX1BSRUZJWCk6IFVuZGVmaW5lLgorCSogcnM2MDAwLmgsIHJzNjAwMC93aW4tbnQuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBEZWZpbmUuCisKK1RodSBTZXAgMTkgMDA6MDU6NTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IE1vdmUgaVszNDU2XTg2LSotZ251KiBjYXNlIGFmdGVyIGxpbnV4IGFuZCBkb24ndAorIAl0cmVhdCBsaW51eC1nbnUgbGlrZSBvdGhlciBnbnUgc3lzdGVtcy4KKworV2VkIFNlcCAxOCAyMDo1MTowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEZpeCBoYW5kbGluZyBvZiBhZGRyZXNzIGFyZ3MuCisJKGdudV9zcGVjaWFsKTogSGFuZGxlIHR5cGVfaW5mbyBzdHVmZi4KKworV2VkIFNlcCAxOCAxNzo1Nzo1NSAxOTk2ICBQYXRyaWsgTGFudHRvIChwYXRyaWtAb3BxLnNlKQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJbnNlcnQgY29uZGl0aW9uYWwgbW92ZSBhZnRlciBqdW1wCisJaW5zbiBpbnN0ZWFkIG9mIGJlZm9yZS4gCisKK1dlZCBTZXAgMTggMTc6MzM6MzYgMTk5NiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAdGFtdS5lZHU+CisKKwkqIGFscGhhLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBhbHBoYV9zd2FwcGVkX2NvbXBhcmlzb25fb3BlcmF0b3IuCisJKiBhbHBoYS5jIChhbHBoYV9zd2FwcGVkX2NvbXBhcmlzb25fb3BlcmF0b3IpOiBOZXcgZnVuY3Rpb24uCisJKHByaW50X29wZXJhbmQpOiBTdXBwb3J0IHVuc2lnbmVkIGNvZGVzIGZvciAlRCwgJWMsIGFuZCAlZC4KKwkqIGFscGhhLm1kOiBBZGQgcGF0dGVybiBmb3IgYiVjIHdpdGggc3dhcHBlZCBjb21wYXJpc29ucyB3aXRoIDAuCisJRGVsZXRlIHRocmVlIHVubmFtZWQgY21wIHBhdHRlcm5zIHRoYXQgYXJlIHN0cmljdCBzdWJzZXRzIG9mIGl0LgorCisJKiBhbHBoYS5jIChhbHBoYV9lbWl0X3NldF9sb25nX2NvbnN0KTogU2F2ZSBvbmUgaW5zdHJ1Y3Rpb24KKwl3aGVuIC1PMiBhbmQgaGlnaCB3b3JkID09IGxvdyB3b3JkLgorCitUdWUgU2VwIDE3IDIyOjQ2OjE1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogaTM4Ni91bml4LmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBIYW5kbGUgZnVuY3Rpb25zCisJcmV0dXJuaW5nIGFuIGFnZ3JlZ2F0ZS4KKworCSogdmFyYXNtLmMgKHN1cHBvcnRzX29uZV9vbmx5KTogTmV3IGZ1bmN0aW9uLgorCShtYWtlX2RlY2xfb25lX29ubHkpOiBMaWtld2lzZS4KKwkqIHN2cjQuaCAoTUFLRV9ERUNMX09ORV9PTkxZKTogRGVmaW5lLgorCSogdHJlZS5oIChERUNMX09ORV9PTkxZKTogTmV3IG1hY3JvLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBGaXggc2V0dGluZyBvZgorIAlmaXJzdF9nbG9iYWxfb2JqZWN0X25hbWUuCisJKGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCisKK1R1ZSBTZXAgMTcgMTk6NDI6MzkgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUB3YWJhbXVuLmN5Z251cy5jb20+CisKKwkqIGkzODYvdC1jeWd3aW4zMiAod2lubnQubyk6IENvbXBpbGUgcHJvcGVybHkuCisKK1R1ZSBTZXAgMTcgMTU6NDc6MjAgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBBZGQgc3VwcG9ydCBmb3IgVlI1MDAwLCBhbmQgZmluaXNoIE1JUFM0IHN1cHBvcnQuCisJKiBtaXBzLmggKGVudW0gcHJvY2Vzc29yX3R5cGUpOiBBZGQgUFJPQ0VTU09SX1I1MDAwLgorCShnZW5fY29uZGl0aW9uYWxfbW92ZSk6IERlY2xhcmUuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTWFyayBTVF9SRUdTIGFzIGZpeGVkIGlmIG5vdAorCUhBUkRfRkxPQVQsIG9yIGlmIG1pcHNfaXNhIDwgNC4KKwkoRklSU1RfUFNFVURPX1JFR0lTVEVSKTogQ2hhbmdlIHRvIDc2LgorCShGSVhFRF9SRUdJU1RFUlMpOiBBZGQgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzLgorCShDQUxMX1VTRURfUkVHSVNURVJTKTogTGlrZXdpc2UuCisJKFNUX1JFR19MQVNUKTogQ2hhbmdlIHRvIDc0LgorCShSQVBfUkVHX05VTSk6IENoYW5nZSB0byA3NS4KKwkoU1RfUkVHX1ApOiBMb29rIGZvciBhbnkgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuCisJKFJFR19DTEFTU19DT05URU5UUyk6IFVwZGF0ZSBmb3IgbmV3IGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVycy4KKwkoUlRYX0NPU1RTKTogQWRkIGNhc2VzIGZvciBSNTAwMC4KKwkoUkVHSVNURVJfTU9WRV9DT1NUKTogQWRkIGNhc2VzIGZvciBjb25kaXRpb24gY29kZSByZWdpc3RlcnMuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCAiY29uc3RfZmxvYXRfMV9vcGVyYW5kIi4KKwkoRVhUUkFfQ0NfTU9ERVMpOiBSZW1vdmUuCisJKEVYVFJBX0NDX05BTUVTKTogUmVtb3ZlLgorCShTRUxFQ1RfQ0NfTU9ERSk6IFJlbW92ZS4KKwkoUkVHSVNURVJfTkFNRVMpOiBBZGQgZW50cmllcyBmb3IgbmV3IGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVycy4KKwkoREVCVUdfUkVHSVNURVJfTkFNRVMpOiBMaWtld2lzZS4KKwkoQURESVRJT05BTF9SRUdJU1RFUl9OQU1FUyk6IFJlbW92ZSBGUFNXX1JFR05VTS4KKwkqIG1pcHMubWQgKGNwdSBhdHRyaWJ1dGUpOiBBZGQgUjUwMDAuCisJKGZ1bmN0aW9uIHVuaXRzKTogQWRkIGNhc2VzIGZvciB0aGUgUjUwMDAuCisJKG1hZGQuZCk6IE9ubHkgYXZhaWxhYmxlIGlmIFRBUkdFVF9ET1VCTEVfRkxPQVQuCisJKG1zdWIuZCwgbm1hZGQuZCwgbm1zdWIuZCk6IExpa2V3aXNlLgorCShyZWNpcC5kLCByZWNpcC5zLCByc3FydC5kLCByc3FydC5zKTogTmV3IGRlZmluZV9pbnNuIHBhdHRlcm5zLgorCShtb3ZjYyk6IE5ldyBwYXR0ZXJuIHRvIG1vdmUgY29uZGl0aW9uIGNvZGUgdmFsdWVzLgorCShyZWxvYWRfaW5jYywgcmVsb2FkX291dF9jYyk6IE5ldyBkZWZpbmVfZXhwYW5kIHBhdHRlcm5zLgorCShsd3hjMSwgbGR4YzEsIHN3eGMxLCBzZHhjMSk6IFNldmVyYWwgbmV3IGRlZmluZV9pbnNuIHBhdHRlcm5zLgorCSh2YXJpb3VzKTogUmVwbGFjZSBDQ19GUCB3aXRoIENDLgorCShicmFuY2hfZnBfbmUsIGJyYW5jaF9mcF9lcSk6IE1hdGNoIGFueSBjb25kaXRpb24gY29kZSByZWdpc3Rlci4KKwkoYnJhbmNoX2ZwX25lX3JldiwgYnJhbmNoX2ZwX2VxX3Jldik6IFJlbW92ZS4KKwkoc2VxX2RmLCBzbHRfZGYsIHNsZV9kZik6IE1hdGNoIGFueSBjb25kaXRpb24gY29kZSByZWdpc3Rlci4KKwkoc2d0X2RmLCBzZ2VfZGYsIHNlcV9zZiwgc2x0X3NmLCBzbGVfc2YpOiBMaWtld2lzZS4KKwkoc2d0X3NmLCBzZ2Vfc2YpOiBMaWtld2lzZS4KKwkoc25lX2RmLCBzbmVfc2YpOiBSZW1vdmUuCisJKEZQIGNvbmRpdGlvbmFsIG1vdmVzKTogTWF0Y2ggYW55IGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLgorCVJlcXVpcmUgVEFSR0VUX0hBUkRfRkxPQVQgYW5kLCBpZiBhcHByb3ByaWF0ZSwKKwlUQVJHRVRfRE9VQkxFX0ZMT0FULgorCShtb3ZzaWNjKTogSnVzdCBjYWxsIGdlbl9jb25kaXRpb25hbF9tb3ZlLgorCShtb3ZkaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjKTogTmV3IGRlZmluZV9leHBhbmQgcGF0dGVybnMuCisJKiBtaXBzLmMgKG1pcHNfcmVnX25hbWVzKTogQWRkIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVycy4KKwkobWlwc19zd19yZWdfbmFtZXMpOiBMaWtld2lzZS4KKwkobWlwc19yZWdub190b19jbGFzcyk6IExpa2V3aXNlLgorCShjb25zdF9mbG9hdF8xX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKG1pcHNfbW92ZV8xd29yZCk6IFRyZWF0IENDbW9kZSBhcyBTSW1vZGUuICBIYW5kbGUgbW92ZSBmcm9tCisJU1RfUkVHIHRvIEdSX1JFRyBpZiBtaXBzX2lzYSA+PSA0LiAgT25seSBwZXJtaXQgbW92ZSBmcm9tIEdSX1JFRworCXRvIFNUX1JFRyBpcyBtaXBzX2lzYSA8IDQuCisJKGdlbl9jb25kaXRpb25hbF9icmFuY2gpOiBSZXdyaXRlLiAgSnVzdCB1c2UgQ0Ntb2RlLCBub3QgZXh0cmEKKwljb25kaXRpb24gbW9kZXMuCisJKGdlbl9jb25kaXRpb25hbF9tb3ZlKTogTmV3IGZ1bmN0aW9uLgorCShvdmVycmlkZV9vcHRpb25zKTogUmVjb2duaXplIHZyNTAwMC4gIExvb2sgZm9yIGp1c3QgQ0Ntb2RlLCBub3QKKwlleHRyYSBjb25kaXRpb24gbW9kZXMuICBJZiBtaXBzX2lzYSA+PSA0LCBwZXJtaXQgQ0Ntb2RlIGluIEdSX1JFR1MKKwlhbmQgRlBfUkVHUy4KKwkocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSAlWi4KKwkobWlwc19zZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogUmVxdWlyZSBhIGRhdGEgcmVnaXN0ZXIgdG8gY29weSBhCisJdmFsdWUgb3V0IG9mIGEgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuICBSZXF1aXJlIGEgZmxvYXRpbmcgcG9pbnQKKwlyZWdpc3RlciB0byBjb3B5IGEgdmFsdWUgaW50byBhIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLgorCitUdWUgU2VwIDE3IDE1OjEwOjI5IDE5OTYgIEpvZXJuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2gubWQ6IE5ldyBkZWZpbmVfc3BsaXRzIHRvIHJlY29tYmluZSBvdXRwdXQgZnJvbSBMRUdJVElNSVpFX0FERFJFU1MuCisJKiBzaC5oIChMRUdJVElNSVpFX0FERFJFU1MpOiBUeXBvIGZpeGVzICh4IC0+IFgpLgorCitNb24gU2VwIDE2IDIzOjAwOjM1IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChidWlsZF9icm9rZW5faW5zdGFsbCk6IFJlbmFtZWQgZnJvbSBob3N0X2Jyb2tlbl9pbnN0YWxsLgorCVNldCBmcm9tIGJ1aWxkIG5vdCBob3N0LgorCShidWlsZF9pbnN0YWxsX2hlYWRlcnMpOiBSZW5hbWVkIGZyb20gaG9zdF9pbnN0YWxsX2hlYWRlcnMuICBTZXQgZnJvbQorCWJ1aWxkIG5vdCBob3N0LgorCitNb24gU2VwIDE2IDIyOjM4OjU1IDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZSAobTY4ay0qLWNvZmYqKTogVXNlIGRieCBkZWJ1ZyBmb3JtYXQgYnkgZGVmYXVsdC4KKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IE1vdmUgLVQgdG8gZW5kIG9mIGxpbmsgY29tbWFuZCBsaW5lLgorCSogbTY4ay9tNjhrZW1iLmggKExJTktfU1BFQywgU1VCVEFSVEdFVF9TV0lUQ0hFUyk6IERlbGV0ZS4KKwkoTElCX1NQRUMpOiBEZWZpbmUgdG8ganVzdCAtbGMuCisJKFNUQVJURklMRV9TUEVDKTogRGVmaW5lIHRvIGVtcHR5LgorCitNb24gU2VwIDE2IDEzOjEyOjI3IDE5OTYgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2guYyAoZXh0X3NoaWZ0X2luc25zLCBleHRfc2hpZnRfYW1vdW50cyk6IG5ldyBhcnJheXMuCisJKGdlbl9hc2hpZnRfaGksIGdlbl9zaGlmdHlfaGlfb3AsIHNobF9hbmRfa2luZCk6IG5ldyBmdW5jdGlvbnMuCisJcnR4X2VxdWFsX2Z1bmN0aW9uX3ZhbHVlX21hdHRlcnM6IGRlY2xhcmUuCisJKHNobF9hbmRfbGVuZ3RoLCBzaGxfYW5kX3NyY19sZW5ndGgsIGdlbl9zaGxfYW5kKTogbmV3IGZ1bmN0aW9ucy4KKwkoc2hsX3NleHRfa2luZCwgc2hsX3NleHRfbGVuZ3RoLCBnZW5fc2hsX3NleHQpOiBuZXcgZnVuY3Rpb25zLgorCSogc2gubWQgKGFzaGxoaTNfaywgbHNocmhpM19tKTogbmV3IGluc24gcGF0dGVybi4KKwkobHNocmhpMywgc2hsX3NleHRfZXh0LCBzaGxfc2V4dF9zdWIpOgorCW5ldyBpbnNuIHBhdHRlcm4gd2l0aCBtYXRjaGluZyBkZWZpbmVfc3BsaXQuCisJKGFuZF9zaGxfc2NyYXRjaCk6IExpa2V3aXNlLCBidXQgYWxzbyB3aXRoIHVubmFtZWQgdmFyaWFudHMuCisKK1NhdCBTZXAgMTQgMTc6MDU6MDcgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2NjLmMgKGNvbnZlcnRfZmlsZW5hbWUpOiBEb24ndCBzdGFydCBsb29raW5nIGZvciAnLicgdW50aWwKKwlhZnRlciBsYXN0IGRpcmVjdG9yeSBzZXBhcmF0b3IuCisKKwkqIGkzODYubWQgKGNscnN0cnNpKTogQ29ycmVjdCBjaGVjayBmb3IgY29uc3RhbnQgc2l6ZS4KKworCSogQmFzZWQgb24gY29kZSBieSBzYWNAY3lnbnVzLmNvbS4KKwkqIGkzODYvY3lnd2luMzIuaCAoQ0hFQ0tfU1RBQ0tfTElNSVQpOiBNYWtlIGNvbnNpc3RlbnQgd2l0aCBNRCBmaWxlLgorCSogaTM4Ni5jICh7ZnVuY3Rpb24saXg4Nl9leHBhbmR9X3Byb2xvZ3VlKTogVXNlIF9fYWxsb2NhIHRvIGFsbG9jYXRlCisJc3RhY2sgaWYgZGVzaXJlZCBhbmQgYmV5b25kIENIRUNLX1NUQUNLX0xJTUlUIGluIHNpemUuCisJKiBpMzg2LmggKHtNQVNLLFRBUkdFVH1fU1RBQ0tfUFJPQkUpOiBOZXcgbWFjcm9zLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1zdGFjay1hcmctcHJvYmUuCisJKiBpMzg2Lm1kIChhbGxvY2F0ZV9zdGFja3ssX3dvcmtlcn0pOiBOZXcgcGF0dGVybnMuCisKK0ZyaSBTZXAgMTMgMTg6MjM6MTggMTk5NiAgSm9lbCBTaGVycmlsbCA8am9lbEBPQVJjb3JwLmNvbT4KKworCSogc3BhcmMvbGIxc3BjLmFzbSAoLmRpdiwgLnJlbSk6IEZpeGVkIHR5cG8gc28gc2lnbiBpcyByZXR1cm5lZAorCWNvcnJlY3RseS4gIFRPUEJJVFMgd2FzIDIgYW5kIHNob3VsZCBoYXZlIGJlZW4gNC4KKworVGh1IFNlcCAxMiAyMTo1MTo1NiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMubWQgKGNhbGxfdmFsdWVfbXVsdGlwbGVfaW50ZXJuYWwwKTogQ2hhbmdlIGZyb20gZGVmaW5lX2luc24gdG8KKwlkZWZpbmVfZXhwYW5kLgorCitUaHUgU2VwIDEyIDE5OjIyOjE0IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAc2ViYS5jeWdudXMuY29tPgorCisJKiBzcGFyYy5tZCAobW92ZV9waWNfbGFiZWxfc2kpOiBPcGVyYW5kIG9uZSBpcyBsYWJlbF9yZWYgbm93LgorCSogc3BhcmMuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogUGFzcyBsYWJlbF9yZWYgdG8KKwlnZW5fbW92ZV9waWNfbGFiZWxfc2kgdG8gbm90IGxvc2UgZmxhZ3MuCisKK1dlZCBTZXAgMTEgMTI6MTA6MDggMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKEdDQ19QQVNTRVMpOiBBZGQgJChleGVleHQpIHRvIG5hbWVzLgorCShGTEFHU19UT19QQVNTKTogQWRkIENMSUIuCisJKGMtcHJhZ21hLm8pOiBBZGQgZGVwZW5kZW5jaWVzIG9uIGV4Y2VwdC5oLCBmdW5jdGlvbi5oLCBkZWZhdWx0cy5oLgorCitUdWUgU2VwIDEwIDIyOjI1OjAzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaVszNDU2XTg2LSotY3lnd2luMzIpOiBVc2UgeG0tY3lnd2luMzIuaCBhbmQgeG0taTM4Ni5oLgorCVNldCBmaXhpbmNsdWRlcyB0byBNYWtlZmlsZS5pbiBhbmQgb2JqY190aHJlYWRfZmlsZSB0byB3aW4zMi4KKwkqIGkzODYveG0tY3l3aW4zMi5oOiBEb24ndCBpbmNsdWRlIHhtLWkzODYuaC4KKwkqIGkzODYveC1jeWd3aW4zMiwgcnM2MDAwL3gtY3lnd2luMzIgKFNUTVBfRklYUFJPVE8sIGV4ZWV4dCk6IE5ldyBkZWZzLgorCisJKiBnY2MuYyAoSEFWRV9FWEVDVVRBQkxFX1NVRkZJWCk6IE5ldyBtYWNyby4KKwkoY29udmVydF9maWxlbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkocHJvY2Vzc19jb21tYW5kLCBjYXNlICdvJyk6IENhbGwgaXQuCisJKHByb2Nlc3NfY29tbWFuZCwgZGVmYXVsdCBjYXNlKTogTGlrZXdpc2U7IGRlbGV0ZSBvbGQgY29kZS4KKworVHVlIFNlcCAxMCAyMTowODo0MyAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYWxiZXJ0LmdudS5haS5taXQuZWR1PgorCisJKiBpMzg2Lm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvIG1hdGNoZXIpOiBGaXggdHlwby4KKworVHVlIFNlcCAxMCAxOTowNDoxOSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMuYyAobWlwc19tb3ZlXzJ3b3Jkcyk6IFJld3JpdGUgMzIgYml0IHNoaWZ0cyBhcyAxNiBiaXQgc2hpZnRzLgorCitUdWUgU2VwIDEwIDEwOjM5OjA3IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKwkKKwkqIHBhL3BhLWdhcy5oIChEQlhfREVCVUdHSU5HX0lORk8pOiBSZW1vdmUgYWxsICNkZWZpbmUKKwlhbmQgI3VuZGVmIHN0YXRlbWVudHMgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisJKiBwYS9wYS1ocHV4LmgsIHBhLWhwdXg3Lmg6IExpa2V3aXNlCisJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogRGlzYWJsZSAiLWciIGFuZCBpc3N1ZSBhIHdhcm5pbmcKKwlpZiBpdCdzIHVzZWQgd2hlbiAhVEFSR0VUX0dBUy4KKworTW9uIFNlcCAgOSAxNzo1Nzo0OSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQHdhYmFtdW4uY3lnbnVzLmNvbT4KKworCSogc3BhcmMuaCAoe01BU0ssVEFSR0VUfV9GUFVfU0VUKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBSZWNvcmQgaWYgLW17LG5vLX1mcHUgcGFzc2VkLgorCSogc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IERvbid0IGNsb2JiZXIgZXhwbGljaXQKKwktbXssbm8tfWZwdSBzZXR0aW5nIHdpdGggY3B1IGRlZmF1bHQuCisKK01vbiBTZXAgIDkgMTU6NTc6NTcgMTk5NiAgSm9lbCBTaGVycmlsbCAgPGpvZWxAT0FSY29ycC5jb20+CisKKyAgICAgICAgKiBjb25maWd1cmUgKG1pcHM2NG9yaW9uLSotcnRlbXMqKTogTmV3IHRhcmdldC4KKyAgICAgICAgKiBtaXBzL3J0ZW1zNjQuaDogTmV3IGZpbGUuCisKK1NhdCBTZXAgIDcgMjI6MDc6NTMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9maWVsZCk6IElmIHN0b3JpbmcgYSByZWNvcmQgb24gYmlnIGVuZGlhbiB0YXJnZXRzLAorCXNldCB1cCBzbyB3ZSBzdG9yZSB0aGUgaGlnaC1vcmRlciBiaXRzLgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogTGlrZXdpc2UgZm9yIGxvYWRzLgorCitUaHUgU2VwICA1IDE0OjU5OjQ3IDE5OTYgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogc2guaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRGVmaW5lIG5vbmVtcHR5LgorCitUaHUgU2VwICA1IDEwOjQzOjM2IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEubWQgKG1vdnNpLCBtb3ZkaSwgbW92c2YgcGF0dGVybnMpOiBIYW5kbGUKKwknUicgY29uc3RyYWludHMgYXMgbmVlZGVkLgorCitXZWQgU2VwICA0IDE3OjEzOjI4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgorCisJKiBleGNlcHQuYzogKGFkZF9wYXJ0aWFsX2VudHJ5KTogTmV3IHJvdXRpbmUuCisJKGV4cGFuZF9zdGFydF90cnlfc3RtdHMpOiBNb3ZlZCBmcm9tIGNwL2V4Y2VwdC5jLgorCShleHBhbmRfc3RhcnRfYWxsX2NhdGNoKTogTW92ZSBmdW5jdGlvbmFsaXR5IG9mIGV4cGFuZF9lbmRfdHJ5X3N0bXRzCisJaGVyZS4KKworV2VkIFNlcCAgNCAxMjozMDowMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4Y2VwdC5jIChlbWl0X3Vud2luZGVyKTogRW5zdXJlIHRoYXQgQ0xPQkJFUiBhbmQgVVNFIGluc25zIGNvbWUKKwlsYXN0LCBpZiBwcmVzZW50LgorCitUdWUgU2VwICAzIDEyOjAxOjQzIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChzaC0qLWVsZiopOiBOZXcgdGFyZ2V0LgorCSogc2gvZWxmLmg6IE5ldyBmaWxlLgorCitGcmkgQXVnIDMwIDE3OjUyOjI2IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZHdhcmYyb3V0LmMgKGdlbl9mb3JtYWxfdHlwZXNfZGllKTogRGVsZXRlIGV4dHJhIGFyZ3VtZW50IGZyb20KKwlnZW5fdHlwZV9kaWUgY2FsbC4KKworRnJpIEF1ZyAzMCAxNTo0MDo0MCAxOTk2ICBKYW1lcyBHLiBTbWl0aCAgPGpzbWl0aEBjeWdudXMuY28udWs+CisKKwkqIG1pcHMvZWxmNjQuaDogQWxsb3cgTVVMVElMSUJfREVGQVVMVFMgdG8gYmUgZGVmaW5lZAorCWJlZm9yZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuCisKK0ZyaSBBdWcgMzAgMTU6MDA6MDYgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYubWQ6IChtb3ZzaWNjLG1vdmhpY2MpOiBBbGxvdyByZWxvYWQgZnJvbSBtZW1vcnkuCisJCisJKiBpMzg2LmMgKG92ZXJyaWRlX29wdGlvbnMpOiBEb24ndCB0aHJlYWQgdGhlIHByb2xvZ3VlIGlmIHByb2ZpbGluZy4KKworRnJpIEF1ZyAzMCAxNTowMDowNiAxOTk2ICBKYW1lcyBIYXd0aW4gIDxjZ2p3aEBzdW5yaXNlLmNvLnVrPgorCQorCSogaTM4Ni90LXNvbDIgKGdjcnQxLm8pOiBBZGRlZCBmb3IgcHJvZmlsaW5nIFNvbGFyaXMgMgorCSogaTM4Ni9zb2wyLmggKFNUQVJURklMRV9TUEVDKTogTmV3LgorCSogaTM4Ni9nbW9uLXNvbDIuYywgaTM4Ni9zb2wyLWdjMS5hc206IE5ldyBmaWxlcy4KKwkKK1RodSBBdWcgMjkgMjI6MDg6MDMgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBleGNlcHQuYyAoYWRkX2VoX3RhYmxlX2VudHJ5KTogTXVsdGlwbHkgcmVhbGxvYyBzaXplIGJ5IHNpemVvZiBpbnQuCisKK1RodSBBdWcgMjkgMTU6MTU6MzEgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5tZCAoZmNtcCBwYXR0ZXJucyk6IERvbid0IHRyeSB0byBlbGltaW5hdGUgdXNlbGVzcyBhZGQsdHIKKwlpbnNucyBoZXJlLgorCSogcGEuYyAocGFfcmVvcmcpOiBEbyBlbGltaW5hdGlvbiBvZiB1c2VsZXNzIGFkZCx0ciBpbnNucyBoZXJlIGluc3RlYWQuCisJKHByaW50X29wZXJhbmQsIGNhc2UgJ3knKTogUmVtb3ZlIHRoaXMgY29kZS4KKworV2VkIEF1ZyAyOCAxNjoxOTozNCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChwcmludF9zaW5nbGVfc3dpdGNoKTogVWx0cml4IGZwcmludGYgcmV0dXJucyAwIGZvciBzdWNjZXNzLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFJld3JpdGUgLWcgcGFyc2luZy4KKworTW9uIEF1ZyAyNiAxNjoxNTo0OSAxOTk2ICBGcmVkIEZpc2ggIDxmbmZAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKG9iamMtcGFyc2UueSk6IEZpeCB0eXBvIGluIG5hbWUgb2YgdGVtcCBmaWxlLgorCitNb24gQXVnIDI2IDE0OjA4OjM3IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKG1hcmtfYWxsX3RlbXBzX3VzZWQpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK1N1biBBdWcgMjUgMjI6Mjc6MTkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAobWFya19hbGxfdGVtcHNfdXNlZCk6IE5ldyBmdW5jdGlvbi4KKworRnJpIEF1ZyAyMyAxMTozNDo1NyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9zeXN2NC5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IEZpeGVzIHRvIG1ha2UgLWZQSUMKKwlyZWFsbHkgdGhlIHNhbWUgYXMgLW1yZWxvY2F0YWJsZS4KKwkoQVNNX1NQRUMpOiBQYXNzIC1LIFBJQyB0byB0aGUgYXNzZW1ibGVyIGlmIC1mcGljLy1mUElDLgorCisJKiByczYwMDAvc29sMi5oIChBU01fQ1BVX1NQRUMpOiBSZW1vdmUgcGFzc2luZyAtSyBQSUMgdG8gdGhlCisJYXNzZW1ibGVyIGlmIC1mcGljLy1mUElDLgorCisJKiBiaS17YXJpdHksb3Bjb2RlLG9wbmFtZX0uYyAoZmFuY3lfYWJvcnQpOiBEZWZpbmUsIHNvIHRoYXQKKwktRGFib3J0PWZhbmN5X2Fib3J0IHdvcmtzIGFnYWluLgorCitUaHUgQXVnIDIyIDExOjM5OjM0IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3QtcHBjZ2FzICh7c3RtcCxpbnN0YWxsfS1jcnQpOiBPbmx5IGJ1aWxkIGFuZCBpbnN0YWxsIHRoZQorCWVhYmkgZWNydFtpbl0ubyBvYmplY3QgZmlsZXMgaW4gZWFiaSBtdWx0aWxpYiBkaXJlY3Rvcmllcywgb25seQorCWJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBzb2xhcmlzIHNjcnRbaW4wXS5vIG9iamVjdCBmaWxlcyBpbiBzb2xhcmlzCisJZGlyZWN0b3JpZXMuCisJKE1VTFRJTElCX01BVENIRVMpOiBSZW1vdmUgbWF0Y2hlcyBmb3Igc29sYXJpcywgbGludXggdG8gb3RoZXIKKwlzd2l0Y2hlcy4KKworVHVlIEF1ZyAyMCAxODo0OTo1NSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9zeXN2NC5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IElmIC1tcmVsb2NhdGFibGUgb3IKKwktbXJlbG9jYXRhYmxlLWxpYiwgZG9uJ3QgbWFrZSByZWFkLW9ubHkgc2VjdGlvbnMsIHNpbmNlIGlmIHRoZXJlCisJYXJlIHBvaW50ZXJzIHRvIGJlIGZpeGVkIHVwLCB0aGUgYXNzZW1ibGVyIGNvbXBsYWlucy4KKworTW9uIEF1ZyAxOSAxODo0MjoxMyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjLmggKHtNQVNLLFRBUkdFVH1fTElUVExFX0VORElBTik6IERlZmluZS4KKwkoTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOKTogQWRkIGxpdHRsZSBlbmRpYW4gc3VwcG9ydC4KKwkqIHNwYXJjL3NwNjQtZWxmLmggKHtDUFAsQVNNLExJTkt9X1NQRUMpOiBBZGQgbGl0dGxlIGVuZGlhbiBzdXBwb3J0LgorCShTVUJUQVJHRVRfU1dJVENIRVMpOiBSZWNvZ25pemUgLW17YmlnLGxpdHRsZX0tZW5kaWFuLgorCSh7QllURVMsV09SRFN9X0JJR19FTkRJQU4pOiBMaWtld2lzZS4KKwkqIHNwYXJjL3NwbGV0LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IFJlY29nbml6ZSAtbXtiaWcsbGl0dGxlfS1lbmRpYW4uCisJKHtDUFAsQVNNLExJTkt9X1NQRUMpOiBBZGQgbGl0dGxlIGVuZGlhbiBzdXBwb3J0LgorCSh7QllURVMsV09SRFN9X0JJR19FTkRJQU4pOiBMaWtld2lzZS4KKwkqIHNwYXJjL3Qtc3BsZXQgKE1VTFRJTElCX3tPUFRJT05TLERJUk5BTUVTfSk6IExpa2V3aXNlLgorCisJKiBzcGFyYy9seW54LW5nLmggKENQUF9TUEVDKTogVXNlICUoY3BwX2NwdSkuCisKK1NhdCBBdWcgMTcgMTU6MjM6MzkgMTk5NiAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KKworCSogaTM4Ni9jeWd3aW4zMi5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfV0lOMzIsIG5vdCBXSU4zMi4KKwlEZWZpbmUgb25seSBfX0NZR1dJTjMyX18sIG5vdCBDWUdXSU4zMiBvciBfX0NZR1dJTjMyLgorCSogcnM2MDAwL2N5Z3dpbjMyLmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCisJKiBjY2NwLmMgKGFic29sdXRlX2ZpbGVuYW1lKTogRHJpdmUgc3BlY2lmaWVycyBtYWtlIHRoZSBwYXRobmFtZQorCWFic29sdXRlIGluIGN5Z3dpbjMyLgorCSogY2hvb3NlLXRlbXAuYzogRGVsZXRlICFkZWZpbmVkKF9XSU4zMikgY29uZGl0aW9uIHdoZW4gaW5jbHVkaW5nCisJc3lzL2ZpbGUuaCAoTk9fU1lTX0ZJTEVfSCBpcyBzdGlsbCB1c2VkKS4KKwkqIGdjYy5jOiBDaGFuZ2UgaWZuZGVmIF9XSU4zMiB0byBpZm5kZWYgTk9fU1lTX0ZJTEVfSCB3aGVuIGRlY2lkaW5nCisJd2hldGhlciB0byBpbmNsdWRlIHN5cy9maWxlLmguCisJKGV4ZWN1dGUpOiAtcGlwZSBpcyBzdXBwb3J0ZWQgZm9yIGN5Z3dpbjMyLgorCSogZ2V0b3B0LmM6IENoYW5nZSB3aW4zMiB0ZXN0IGZyb20gV0lOMzIgdG8gX1dJTjMyLgorCSogcGV4ZWN1dGUuYzogVXBkYXRlIHRlc3QgZm9yIHdpbjMyICgmJiAhIGN5Z3dpbjMyKS4KKwkqIHByb3RvaXplLmM6IExpa2V3aXNlLgorCShraWxsKTogRGVsZXRlIGRlY2wuCisJKiB0b3BsZXYuYzogVXBkYXRlIHRlc3QgZm9yIHdpbjMyICgmJiAhIGN5Z3dpbjMyKS4KKwkqIGdpbmNsdWRlL3N0ZGFyZy5oOiBDaGFuZ2UgX19XSU4zMl9fIHRvIF9XSU4zMi4KKwkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogTGlrZXdpc2UuCisJKiBnaW5jbHVkZS92YS1wcGMuaDogTGlrZXdpc2UuCisKK0ZyaSBBdWcgMTYgMTY6MDI6MDkgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuYyAocnM2MDAwX2dvdF9yZWdpc3Rlcik6IE1ha2Ugc3VyZSBwaWNfb2Zmc2V0X3RhYmxlX3J0eAorCWFsbG9jYXRlZCwgZXZlbiBpZiBjdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZSBzZXQuCisKK0ZyaSBBdWcgMTYgMTU6NTY6MDQgMTk5NiAgSi4gS2VhbiBKb2huc3RvbiAgPGh1Z0BuZXRjb20uY29tPgorCisJKiBpMzg2L3NjbzUuaCAoQ0xBU1NfTElLRUxZX1NQSUxMRURfUCk6IERlbGV0ZWQuCisJKFNUQVJURklMRV9TUEVDKTogSW5zZXJ0IGNydGJlZ2luLm8gaW4gY29ycmVjdCBwbGFjZSwgYW5kIGNvcnJlY3QKKwl2ZXJzaW9ucyBvZiB2YWx1ZXMtWD8uby4KKwkoU1dJVENIX1RBS0VTX0FSRyk6IEV4dGVuZCBERUZBVUxUX1NXSVRDSF9UQUtFU19BUkcsIG5vdCByZXBsYWNlLgorCShDUFBfU1BFQyk6IEFkZCAtRGkzODYsIGFuZCBjb3JyZWN0bHkgaW5jbHVkZSBleHRyYSBkaXJlY3Rvcmllcy4KKwlEZWZpbmUgSEFWRV9BVEVYSVQgaW4gRUxGIG1vZGUgZm9yIGdsb2JhbCBkZXN0cnVjdG9ycy4KKworVGh1IEF1ZyAxNSAxNjo0Mjo0NCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjLmMgKGxhYmVsX3JlZl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShlbWl0X21vdmVfc2VxdWVuY2UpOiBQYXNzIGxhYmVsX3JlZiB0byBnZW5fbW92ZV9sYWJlbF9kaSB0byBub3QKKwlsb3NlIGZsYWdzLgorCSogc3BhcmMubWQgKG1vdmVfbGFiZWxfZGkpOiBPcGVyYW5kIG9uZSBpcyBsYWJlbF9yZWYgbm93LgorCSogZ2VuYXR0cnRhYi5jICh3cml0ZV90ZXN0X2V4cHIpOiBBbGxvdyBsYWJlbF9yZWYgaW4gbWF0Y2hfZHVwLgorCisJKiBzeXMtcHJvdG9zLmggKGdldGhvc3RpZCk6IE1ha2UgcmV0dXJuIHR5cGUgYGludCcgaWZkZWYgX19hbHBoYV9fLgorCSogZ2VuLXByb3Rvcy5jOiBEZWxldGUgc3VwcG9ydCBmb3IgU1lTX1BST1RPX09WRVJSSURFUy4KKwkqIGFscGhhLmggKFNZU19QUk9UT19PVkVSUklERVMpOiBEZWxldGUuCisKK1RodSBBdWcgMTUgMTc6MzY6MDkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmMgKF9fdGhyb3cpOiBOZXcgcm91dGluZS4KKwkoX19laF9wYyk6IE5ldyBkYXRhIG9iamVjdCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgorCisJKiBleGNlcHQuYyAoZWhfc2F2ZWRfcGMpOiBOZXcgb2JqZWN0IHNvIHdlIGNhbiBjYWxsCisJYXNzZW1ibGVfZXh0ZXJuYWwuCisJKGV4cGFuZF9pbnRlcm5hbF90aHJvd19pbmRpcmVjdCk6IENhbGwgYXNzZW1ibGVfZXh0ZXJuYWwgZm9yIF9fZWhfcGMuCisJKGVuZF9laF91bndpbmRlcik6IExpa2V3aXNlLgorCShpbml0X2VoKTogSW5pdGlhbGl6ZSBlaF9zYXZlZF9wYy4KKworVGh1IEF1ZyAxNSAxMzowMjo0MiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGFybS5oIChSRVRVUk5fQUREUl9SVFgpOiBEZWZpbmUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW5fcmV0dXJuX2FkZHIpOiBGaXggb3JkZXIgb2YgcGFyYW1ldGVycy4KKworV2VkIEF1ZyAxNCAxOTo0ODowMCAxOTk2ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAc3BpZmYuZ251LmFpLm1pdC5lZHU+CisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IEluIGNvZGUgZm9yIGRvaW5nIHNjYyB3aXRoIGp1bXBzLAorCXN0aWNrIHRvIGRlZmF1bHQgaGFuZGxpbmcgaWYgd2UgaGF2ZSBjb3JyZXNwb25kaW5nIHNjYyBwYXR0ZXJuLgorCitXZWQgQXVnIDE0IDEwOjMxOjI4IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFRyZWF0IFRBUkdFVF9GQVNUX0lORElSRUNUX0NBTExTCisJanVzdCBsaWtlIFRBUkdFVF9OT19TUEFDRV9SRUdTLgorCShvdXRwdXRfbWlsbGljb2RlX2NhbGwpOiBMaWtld2lzZS4KKwkqIHBhLmggKFRBUkdFVF9GQVNUX0lORElSRUNUX0NBTExTKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgImZhc3QtaW5kaXJlY3QtY2FsbHMiLgorCSogcGEubWQ6IFRyZWF0IFRBUkdFVF9GQVNUX0lORElSRUNUX0NBTExTIGp1c3QgbGlrZQorCVRBUkdFVF9OT19TUEFDRV9SRUdTIGluIHZhcmlvdXMgY2FsbC9taWxsaWNvZGUgY2FsbCBwYXR0ZXJucy4KKworCSogcGEuYyAocHJpbnRfb3BlcmFuZCk6IFVzZSB0aGUgcmlnaHQgY29tcGFyaXNvbiBvcGVyYXRvcgorCWZvciByZXZlcnNlZCBFUSBhbmQgTkUgY29tcGFyaXNvbnMuCisKKwkqIHBhLmggKE9VVFBVVF9NSV9USFVOSyk6IERlZmluZS4KKworV2VkIEF1ZyAxNCAxMTo0MDo0OSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3ZhLXBwYy5oOiBBZGQgV2luZG93cyBOVCBzdXBwb3J0LgorCSogZ2luY2x1ZGUve3ZhcmFyZ3Msc3RkYXJnfS5oOiBGb3IgUG93ZXJQQyBXaW5kb3dzIE5ULCBpbmNsdWRlCisJdmEtcHBjLmgsIGluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgaGFuZGxpbmcuCisKK1R1ZSBBdWcgMTMgMTg6MzA6MTAgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBmaXhpbmNsdWRlczogUmVtb3ZlIGR1cGxpY2F0ZSB2b2xhdGlsZSBmcm9tIHNpZ19hdG9taWNfdCBpbiBBSVgKKwlzeXMvc2lnbmFsLmgKKworVHVlIEF1ZyAxMyAxNjo1MTozNyAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGk5NjAtY29mZi5oIChMSUJfU1BFQyk6IFVuZGVmLgorCisJKiBzaC5oIChQUk9GSUxFX0JFRk9SRV9QUk9MT0dVRSk6IERlZmluZS4KKworVHVlIEF1ZyAxMyAxMTozNjowMiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGdjYy5jIChzZXRfc3BlYyxwcm9jZXNzX2NvbW1hbmQpOiBEdW1wIGFuZCBsb2FkIHRoZSBjb21waWxlcgorCXZlcnNpb24gbnVtYmVyIGluIHRoZSBzcGVjcyBmaWxlLgorCisJKiByczYwMDAuYyAob3V0cHV0X3RvYyk6IEZpeCBsYXN0IGNoYW5nZSwgc28gdGhhdCBpdCBkb2Vzbid0IHVzZQorCWFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaWYgLW1taW5pbWFsLXRvYy4KKwkob3V0cHV0X3Byb2xvZyk6IEluY3JlbWVudCBwcm9iZV9sYWJlbG5vIGFmdGVyIGxhc3QgdXNlLgorCisJKiByczYwMDAvdC1wcGNnYXMgKE1VTFRJTElCXyopOiBCdWlsZCBmYXIgZmV3ZXIgbXVsdGlsaWIKKwlsaWJyYXJpZXMuICBCdWlsZCBhbGwgbGlicmFyaWVzIHdpdGggLW1yZWxvY2F0YWJsZS1saWIgYW5kCisJLW1uby1lYWJpLiAgQnVpbGQgc3BlY2lhbCBMaW51eCBhbmQgU29sYXJpcyBsaWJyYXJpZXMuCisJKiByczYwMDAvZWFiaXssYWl4LGxlfS5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKwl0LXBwY2dhcy4KKwkqIHJzNjAwMC8obGludXgsc29sMikuaCAoTVVMVElMSUJfREVGQVVMVFMpOiBEaXR0by4KKwkqIHJzNjAwMC97c3lzdjQsc3lzdjRsZX0gKE1VTFRJTElCX0RFRkFVTFRTKTogRGl0dG8uCisKK1R1ZSBBdWcgMTMgMTE6MzY6MDIgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiByczYwMDAuYyAoaGFuZGxlX21hY19wcmFnbWEpOiBJbml0aWFsaXplICJwc2l6ZSIuCisKK01vbiBBdWcgMTIgMTg6MTQ6MzUgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBnY2MuYyAodXNlZF9hcmcpOiBJbml0aWFsaXplIGNudCB0byB6ZXJvLgorCitNb24gQXVnIDEyIDE0OjAzOjE2IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCUZyb20gTWlrZSBTdHVtcDoKKwkqIHNoLmMgKHJlZ25vX3JlZ19jbGFzcyk6IENoYW5nZSBlbnRyeSAyMyBmcm9tIE5PX1JFR1MgdG8gR0VORVJBTF9SRUdTLgorCShpbml0aWFsX2VsaW1pbmF0aW9uX29mZnNldCk6IE5ldyB2YXJpYWJsZSBsaXZlX3JlZ3NfbWFzay4gIEFkZAorCWNvZGUgdG8gaGFuZGxlIFJFVFVSTl9BRERSRVNTX1BPSU5URVJfUkVHTlVNLgorCSogc2guaCAoUkFQX1JFRywgUkVUVVJOX0FERFJFU1NfUE9JTlRFUl9SRUdOVU0pOiBEZWZpbmUuCisJKEVMSU1JTkFCTEVfUkVHUyk6IEFkZCBSRVRVUk5fQUREUkVTU19QT0lOVEVSX1JFR05VTSBzdXBwb3J0LgorCShSRVRVUk5fQUREUl9SVFgpOiBEZWZpbmUuCisJKFJFR0lTVEVSX05BTUVTKTogQWRkIHJhcC4KKworCSogaXJpczUuaCAoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IFVuZGVmaW5lLgorCisJKiBtNjhrZW1iLmggKExJQl9TUEVDKTogQWx3YXlzIGVtaXQgLWxjLgorCitNb24gQXVnIDEyIDEyOjMwOjI1IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9nb3RfcmVnaXN0ZXIpOiBUZXN0IHZhcmlhYmxlCisJY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUgdG8gc2VlIHdoZXRoZXIgb3Igbm90IGEgR09UCisJcmVnaXN0ZXIgaGFzIGJlZW4gY3JlYXRlZCBhbHJlYWR5LgorCisJKiBNYWtlZmlsZS5pbiAobXVsdGlsaWIuaCk6IE1vdmUgdG8gc3RhbXAtbWxpYi4KKwkoc3RhbXAtbWxpYik6IFVzZSBtb3ZlLWlmLWNoYW5nZSB0byBjb25kaXRpb25hbGx5IHVwZGF0ZQorCW11bHRpbGliLmguICBQYXNzIE1VTFRJTElCX0VYVFJBX09QVFMgdG8gZ2VubXVsdGlsaWIuCisJKFNUQUdFU1RVRkYpOiBBZGQgc3RhbXAtbWxpYi4KKwkobW9zdGx5Y2xlYW4pOiBEZWxldGUgdG1wLW1saWIuaC4KKworCSogZ2VubXVsdGlsaWI6IFRha2UgYSBmaWZ0aCBhcmd1bWVudCB0byBhZGQgb3B0aW9ucyB0byBwYXNzIG9uIHRvCisJYWxsIG11bHRpbGliIGJ1aWxkcy4gIFJlc3RydWN0dXJlIG91dHB1dCBzbyB0aGF0IHdlIHBhc3MgdGhlCisJc3lub255bSBzd2l0Y2hlcyBhbmQgZXh0cmEgYXJndW1lbnRzIHNlcGFyYXRlbHksIGFuZCBub3QKKwlleHBvbmVudGlhbGx5IHNsb3cgZG93biBnZW5tdWx0aWxpYi4KKworCSogZ2NjLmMgKHRvcGxldmVsKTogUmVhcnJhbmdlIG11bHRpbGliIHN1cHBvcnQgc28gdGhhdCB3ZSBzdXBwb3J0CisJcGFzc2luZyB0aGUgc3lub255bXMgc2VwYXJhdGVseSBmcm9tIHRoZSBub3JtYWwgc3dpdGNoZXMuICBBZGQKKwlzdXBwb3J0IGZvciBwYXNzaW5nIGFkZGl0aW9uYWwgc3dpdGNoZXMgdG8gYmUgdXNlZCBvbiBhbGwgbXVsdGlsaWIKKwlidWlsZHMuICBEdW1wIGFuZCByZXN0b3JlIHRoZSB2YWx1ZSBvZiBNVUxUSUxJQl9ERUZBVUxUUyBzbyB0aGF0CisJZ2NjIGNvdmVyIHByb2dyYW1zIGZvciBvdGhlciB0YXJnZXRzIHdpbGwgY29ycmVjdGx5IGNob3NlIHRoZQorCWFwcHJvcHJpYXRlIG11bHRpbGliIGRpcmVjdG9yeS4KKwkoc2V0c3BlYyxwcm9jZXNzX2NvbW1hbmQsbWFpbik6IERpdHRvCisJKHVzZWRfYXJnLGRlZmF1bHRfYXJnLHByaW50X211bHRpbGliX2luZm8pOiBEaXR0by4KKworTW9uIEF1ZyAxMiAwNzo0Njo0NyAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX1NFVEpNUCk6IEFkZCB0ZXN0CisJYW5kIGNhbGwgZm9yIG5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIgcGF0dGVybi4KKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IExpa2V3aXNlLgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvciB3aGVuCisJc2Nhbm5pbmcgY29uc3RyYWludHMuCisKK1N1biBBdWcgMTEgMjI6NDg6MDIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBIYW5kbGUgQ09ORF9FWFBSIGNsZWFudXBzIGxpa2UgZXhwYW5kX2V4cHIuCisKK1N1biBBdWcgMTEgMjI6NDI6MzYgMTk5NiAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9hYnMpOiBXaGVuIE9QMCBhbmQgVEFSR0VUIGFyZSB0aGUgc2FtZQorCXBzZXVkbyByZWdpc3RlciwgaXQgaXMgc2FmZSB0byB1c2UgVEFSR0VULgorCisJKiBsb2NhbC1hbGxvYy5jIChyZWdfZXF1aXZfcmVwbGFjZSk6IE5ldyB2YXJpYWJsZS4KKwkodXBkYXRlX2VxdWl2X3JlZ3MpOiBTZXQgcmVnX2VxdWl2X3JlcGxhY2VtZW50IGZvciBhbGwgUkVHX0VRVUlWCisJbm90ZXMgZW5jb3VudGVyZWQgb3IgZ2VuZXJhdGVkLgorCitTdW4gQXVnIDExIDIyOjI3OjE0IDE5OTYgIFNjb3R0IENocmlzdGxleSA8c2NvdHRjQG5ldC1jb21tdW5pdHkuY29tPgorCisJKiBvYmpjL2hhc2guYyAoaGFzaF9pc19rZXlfaW5faGFzaCk6IEZ1bmN0aW9uIHNvbWVob3cgZ290IGxvc3QuCisKK1N1biBBdWcgMTEgMjE6NDM6MTUgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGdpbmNsdWRlL3N0ZGRlZi5oIChfX25lZWRfd2ludF90KTogTW92ZSAjdW5kZWYgdG8gcmlnaHQgcGxhY2UuCisKK1N1biBBdWcgMTEgMTc6NDY6MjIgMTk5NiAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgorCisJKiBjLWRlY2wuYyAoZmluaXNoX3N0cnVjdCk6IElmIHBlZGFudGljLCBhbHNvIHdhcm4gaWYgc3RydWN0L3VuaW9uCisJaGFzIG5vIG5hbWVkIG1lbWJlcnMuCisKK1N1biBBdWcgMTEgMTc6MzI6NTIgMTk5NiAgSm9lbCBTaGVycmlsbCA8am9lbEBPQVJjb3JwLmNvbT4KKworCSogaTM4Ni9ydGVtcy5oOiBSZW5hbWVkIGZyb20gaTM4Ni9pMzg2LXJ0ZW1zLmgKKwkqIGk5NjAvcnRlbXMuaDogUmVuYW1lZCBmcm9tIGk5NjAvaTk2MC1ydGVtcy5oCisJKiBtNjhrL3J0ZW1zLmg6IFJlbmFtZWQgZnJvbSBtNjhrL202OGstcnRlbXMuaAorCSogcnM2MDAwL3J0ZW1zLmg6IFJlbmFtZWQgZnJvbSByczYwMDAvcG93ZXJwYy1ydGVtcy5oCisJKiBzcGFyYy9ydGVtcy5oOiBSZW5hbWVkIGZyb20gc3BhcmMvc3BhcmMtcnRlbXMuaAorCSogY29uZmlnL3QtcnRlbXM6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpMzg2LSotcnRlbXMqKTogQWRkZWQgdC1ydGVtcyB0byB0bWFrZV9maWxlLgorCVJlbmFtZWQgaTM4Ni9pMzg2LXJ0ZW1zLmggdG8gaTM4Ni9ydGVtcy5oLgorCShpOTYwLSotcnRlbXMqKTogQWRkZWQgdC1ydGVtcyB0byB0bWFrZV9maWxlLgorCVJlbmFtZWQgaTk2MC9pOTYwLXJ0ZW1zLmggdG8gaTk2MC9ydGVtcy5oLgorCUFkZGVkIG9yaWdpbmFsIHRtLmggZmlsZSBhbmQgZGJ4Y29mZi5oLgorCShtNjhrLSotcnRlbXMqKTogQWRkZWQgdC1ydGVtcyB0byB0bWFrZV9maWxlLgorCVJlbmFtZWQgbTY4ay9tNjhrLXJ0ZW1zLmggdG8gbTY4ay9ydGVtcy5oLgorCShwb3dlcnBjLSotcnRlbXMqKTogQWRkZWQgdC1ydGVtcyB0byB0bWFrZV9maWxlLgorCVJlbmFtZWQgcnM2MDAwL3Bvd2VycGMtcnRlbXMuaCB0byByczYwMDAvcnRlbXMuaC4KKwkoc3BhcmMtKi1ydGVtcyopOiBBZGRlZCB0LXJ0ZW1zIHRvIHRtYWtlX2ZpbGUuCisJUmVuYW1lZCBzcGFyYy9zcGFyYy1ydGVtcy5oIHRvIHNwYXJjL3J0ZW1zLmguCisKK0ZyaSBBdWcgIDkgMTY6MDU6MTMgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYubWQ6ICh1bnR5cGVkX2NhbGwpIEF2b2lkIFNJR0ZQRS4KKworCSogaTM4Ni5jIChvdXRwdXRfZmxvYXRfY29tcGFyZSk6IERvbid0IHRyeSB0byBpbml0aWFsaXplCisJYWdncmVnYXRlIGxvY2FsIHZhcmlhYmxlOyB1c2UgYXNzaWdubWVudCBzdGF0ZW1lbnRzIGluc3RlYWQuCisKKwkqIGkzODYuaCAoUlRYX0NPU1RTKTogcnR4X2Nvc3Qgc2hvdWxkIHBhc3MgdHdvIHBhcmFtZXRlcnMuCisJCisJKiBpMzg2L2dvMzIuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBOZXcuCisKK0ZyaSBBdWcgIDkgMTY6MDA6MTEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiB3aW5udC5jIChnZW5fc3RkY2FsbF9zdWZmaXgpOiBSb3VuZCBwYXJhbWV0ZXIgc2l6ZSB0byBQQVJNX0JPVU5EQVJZLgorCitUaHUgQXVnICA4IDE3OjQyOjM1IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmMgKG91dHB1dF90b2MpOiBJZiB3ZSBhcmUgZW1pdHRpbmcgYSByZWZlcmVuY2UgdG8gYQorCXZ0YWJsZSwgZG9uJ3QgcHV0IGluIHRoZSBzZWN0aW9uIG5hbWUsIGp1c3QgdXNlIHRoZSBzeW1ib2wuCisKK1dlZCBBdWcgIDcgMTk6MDM6MzYgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5tZCAoY2FzZXNpX2p1bXApOiBOZXcgcGF0dGVybi4KKwkoY2FzZXNpKTogR2VuZXJhdGUgUlRMIHRvIG1hdGNoIGl0LgorCitXZWQgQXVnICA3IDE0OjEwOjA3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZ2luY2x1ZGUvc3RkZGVmLmggKE5VTEwpOiBVc2UgX19udWxsIGZvciBHKysuCisKK1R1ZSBBdWcgIDYgMTc6Mzc6NTMgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoU1RBQ0tfQk9VTkRBUlkpOiBBbHdheXMgZGVmaW5lIGFzIDY0LgorCShBQklfU1RBQ0tfQk9VTkRBUlkpOiBEZWZpbmUgYXMgNjQvMTI4IGJhc2VkIG9uIHRoZSAtbW5vLWVhYmkKKwlzd2l0Y2guCisKKwkqIHJzNjAwMC5jIChyczYwMDBfc3RhY2tfaW5mbyk6IFVzZSBBQklfU1RBQ0tfQk9VTkRBUlksIG5vdAorCVNUQUNLX0JPVU5EQVJZLiAgRGVmaW5lIEFCSV9TVEFDS19CT1VOREFSWSBhcyBTVEFDS19CT1VOREFSWSAjaWZuZGVmLgorCitUdWUgQXVnICA2IDE0OjI5OjQzIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAZmFsbGlzLmN5Z251cy5jb20+CisKKwkqIGdlbi1wcm90b3MuYyAob3ZlcnJpZGVzKTogTmV3IHN0YXRpYyBsb2NhbC4KKwkoYWRkX2hhc2gscGFyc2VfZm5fcHJvdG8pOiBOZXcgc3RhdGljIGZ1bmN0aW9ucy4KKwkobWFpbik6IEFkZCBwcm90b3R5cGVzIGZyb20gU1lTX1BST1RPX09WRVJSSURFUyB0byBoYXNoIHRhYmxlIGJlZm9yZQorCXBhcnNpbmcgc3lzLXByb3Rvcy5oLiAgUmVzZXJ2ZSBlbnRyeSAwIGluIHN0ZF9wcm90b3MuCisJKiBhbHBoYS5oIChTWVNfUFJPVE9fT1ZFUlJJREVTKTogRGVmaW5lLgorCitNb24gQXVnICA1IDE2OjUzOjM2IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAZmFsbGlzLmN5Z251cy5jb20+CisKKwkqIHNwYXJjL3Qtc3BsZXQgKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbWJyb2tlbi1zYXZlcmVzdG9yZS4KKwkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgYnJrbnNhdmUuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBDb3JyZWN0IG92ZXJmbG93IHRlc3QgZm9yIDAgc2l6ZWQKKwlmaWVsZHMuCisKK01vbiBBdWcgIDUgMTY6MTI6MTkgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBhbHBoYS5jIChhbHBoYV9vdXRwdXRfZmlsZW5hbWUpOiBXaGVuIGVtaXR0aW5nIHN0YWJzLCBkb24ndAorCWRpc2FibGUgdGhlbSBpZiB1c2luZyBHTlUgYXMuCisJKGFscGhhX291dHB1dF9saW5lbm8pOiBMaWtld2lzZSwgd2hlbiBub3QgdXNpbmcgR05VIGFzLgorCisJKiBzaC5jIChhcml0aF9yZWdfb3BlcmFuZCk6IFJlamVjdCBTVUJSRUcgb2YgYW4gaW52YWxpZCBoYXJkIHJlZy4KKworCSogc3BhcmMvbGl0ZS5oIChhb3V0b3MuaCk6IERvbid0IGluY2x1ZGUgaXQuCisJKiBjb25maWd1cmUgKHNwYXJjbGl0ZS0qLWFvdXQqKTogQWRkIGFvdXRvcy5oIHRvIHRtX2ZpbGUuCisKK1NhdCBBdWcgIDMgMjM6MTM6NTUgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBjb21iaW5lLmMgKHJ0eF9lcXVhbF9mb3JfZmllbGRfYXNzaWdubWVudF9wKTogQ2hlY2sgZm9yCisJZ2V0X2xhc3RfdmFsdWUgcmV0dXJuaW5nIChDTE9CQkVSIChDT05TVF9JTlQgMCkpLgorCitTYXQgQXVnICAzIDIwOjE5OjE0IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogaTk2MC5tZCAoc3Vic2kzKzEpOiBIYW5kbGUgY2FzZSB3aGVyZSBmaXJzdCBvcGVyYW5kIGlzIGNvbnN0YW50CisJYnV0IHNlY29uZCBvcGVyYW5kIGlzIG5vdC4KKworCSogbTY4ay92eG02OGsuaCAoV0NIQVJfVFlQRV9TSVpFKTogVW5kZWYsIHRoZW4gZGVmaW5lIHRvIDE2LgorCitGcmkgQXVnICAyIDE1OjQ2OjE5IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEvcGEtaHB1eC5oIChMSU5LX1NQRUMpOiBEb24ndCBsaW5rIGluIFBBMS4xIHNwZWNpZmljCisJbGlicmFyaWVzIHdoZW4gY3JlYXRpbmcgc2hhcmVkIGxpYnJhcmllcy4KKwkqIHBhL3BhLWhwdXg5LmgsIHBhL3BhLWhwdXgxMC5oOiBMaWtld2lzZS4KKworRnJpIEF1ZyAgMiAxMzozNjo0MiAxOTk2ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworCSogaTM4Ni5jIChvdXRwdXRfZmxvYXRfY29tcGFyZSk6IGZjb21pIHNob3VsZCBiZSBmb2xsb3dlZCBieSB0aGUKKwljb3JyZWN0IGNvbmRpdGlvbmFsIGp1bXAgaW5zdGVhZCBvZiBmY29tL3Bmc3Rzdy9hbmQvam5lCisJKG92ZXJyaWRlX29wdGlvbnMpOiBBZGRlZCAtbWJyYW5jaC1jb3N0IHRvIHNldCBCUkFOQ0hfQ09TVC4KKwkKKwkqIGkzODYubWQgKHNndCsxLHNsdCsxLHNnZSsxLHNsZSsxLGJndCsxLGJsdCsxLGJnZSsxLGJsZSsxLGJsZXUrNCkKKwlBZGRlZCBUQVJHRVRfQ01PVkUgY2hlY2sgZm9yIGZjb21pLgorCShtb3ZzaWNjXzErMSxtb3ZoaWNjXzErMSk6IEFkZGVkIHRvIGhhbmRsZSB0aGUgZ2VuZXJhbCBjYXNlLgorCQorCSogaTM4Ni5oIChpMzg2X2JyYW5jaF9jb3N0LCBpMzg2X2JyYW5jaF9jb3N0X3N0cmluZyk6IEFkZGVkLgorCitGcmkgQXVnICAyIDExOjUzOjU1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KKworCSogc3BhcmMvdnhzcGFyYy5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBgLURDUFU9U1BBUkMnLgorCitUaHUgQXVnICAxIDIzOjU2OjAxIDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuaCAoQVNNX09VVFBVVF9JTlQpOiBSZW1vdmUgYWxsIGhhY2tzIGZvciBleGNlcHRpb24gdGFibGUuCisKK1RodSBBdWcgIDEgMTA6MDg6MTQgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQHNwaWZmLmdudS5haS5taXQuZWR1PgorCisJKiBtNjhrLmggKFJUWF9DT1NUUywgY2FzZSBQTFVTKTogR2V0IG9wZXJhbmQgb3JkZXIgcmlnaHQuCisKK1dlZCBKdWwgMzEgMTU6MDY6NDYgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy5tZCAobmVndGYyLGFic3RmMik6IEZpeCB2OSBjYXNlLgorCitXZWQgSnVsIDMxIDA5OjQ5OjI1IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuaCAoQVNNX09VVFBVVF9JTlQpOiBVc2UgYW4gJ0UlJyBwcmVmaXggZm9yIGl0ZW1zIGluCisJdGhlIGV4Y2VwdGlvbiB0YWJsZSBpZiBUQVJHRVRfR0FTICYmICEgVEFSR0VUX1BPUlRBQkxFX1JVTlRJTUUuCisKK1R1ZSBKdWwgMzAgMTU6Mzc6MzEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBpMzg2L2N5Z3dpbjMyLmggKGRieGNvZmYuaCk6IEluY2x1ZGUuCisJKERCWF9ERUJVR0dJTkdfSU5GTywgU0RCX0RFQlVHR0lOR19JTkZPLCBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOgorCU1vdmUgZGVmaW5pdGlvbnMgYmVmb3JlIGluY2x1ZGUgb2YgZGJ4Y29mZi5oLgorCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FLCBEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogRGVsZXRlLgorCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFLCBEQlhfRlVOQ1RJT05fRklSU1QpOiBEZWxldGUuCisKK1R1ZSBKdWwgMzAgMTU6MDM6NTMgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQHNwaWZmLmdudS5haS5taXQuZWR1PgorCisJKiBpOTYwLm1kIChlcSByZWcgKGNvbnN0X2ludCAwKSk6IE5ldyBwYXR0ZXJuLgorCitUdWUgSnVsIDMwIDExOjE1OjQ0IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuaCAoUkVUVVJOX0FERFJfUlRYKTogT2Zmc2V0IGlzIC0yMCBmcm9tIHRoZSBmcmFtZSwgbm90ICsyMCEKKworTW9uIEp1bCAyOSAxMjoxNjoxNyAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEZpeCB0aGlua28gaW4gbGFzdCBjaGFuZ2UuCisKK0ZyaSBKdWwgMjYgMTg6MTk6NDcgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfYm91bmRfcmVwcmVzZW50YXRpb24pOiBGaXggdHlwby4KKworVGh1IEp1bCAyNSAxNjowMDoxMCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZG9fanVtcCwgY2FzZSBUUlVUSF9PUklGX0VYUFIpOiBFbnN1cmUgZW5kIG9mIGFuCisJZXhjZXB0aW9uIHJlZ2lvbiBjb21lcyBhZnRlciBpdHMgc3RhcnQuCisJKGRvX2p1bXAsIGNhc2UgVFJVVEhfQU5ESUZfRVhQUik6IExpa2V3aXNlLgorCitUaHUgSnVsIDI1IDEzOjM2OjQyIDE5OTYgIFN0YW4gQ294ICA8Y294c0BlcXVpbm94PgorCisJKiBpMzg2LmMgKG91dHB1dF9mbG9hdF9jb21wYXJlKTogQWRkZWQgc3VwcG9ydCBmb3IgUGVudGl1bSBQcm8KKwlmY29taSBpbnN0cnVjdGlvbiB3aGljaCBzZXRzIEVGTEFHUyBpbnN0ZWFkIG9mIEZQVSBTdGF0dXMgV29yZC4KKworV2VkIEp1bCAyNCAyMTo0ODowOCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY2Fub25faGFzaCwgY3NlX2luc24pOiBNRU0gaXMgbm90IHVuY2hhbmdpbmcgaWYgaXQgaXMKKwlpbiB0aGUgZnJhbWUgKHNpbmNlIHRoZSB0ZW1wIHNsb3QgbWlnaHQgYmUgcmV1c2VkKS4KKworV2VkIEp1bCAyNCAxNzozNDowNiAxOTk2ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBjeWdudXMuY29tKQorCisJKiBzaC5tZCAoYnJhbmNoX3RydWUsIGJyYW5jaF9mYWxzZSwgaW52ZXJzZV9icmFuY2hfdHJ1ZSk6IEV4cHJlc3MKKwl0ZXN0cyBvZiB0aGUgVCBiaXQgYXMgY29tcGFyaXNvbnMgYWdhaW5zdCB6ZXJvLCByYXRoZXIgdGhhbiBvbmUuCisJKGludmVyc2VfYnJhbmNoX2ZhbHNlLCBiZXEsIGJuZSwgYmd0LCBibHQsIGJsZSwgYmdlLCBiZ3R1KTogTGlrZXdpc2UuCisJKGJsdHUsIGJnZXUsIGJsZXUsIGNhc2VzaSk6IExpa2V3aXNlLgorCitXZWQgSnVsIDI0IDE1OjU4OjA2IDE5OTYgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2Lm1kOiAobW92e3NmLGRmLHhmfWNjeyxfMX0pOiBOZXcgcGF0dGVybnMgZm9yIFA2IEZQIGNtb3ZlLgorCSogaTM4Ni5jIChwdXRfY29uZGl0aW9uX2NvZGUsIHByaW50X29wZXJhbmQsIG91dHB1dF9mcF9jYzBfc2V0KToKKwlTdXBwb3J0IGZjbW92IHN1ZmZpeGVzLgorCitXZWQgSnVsIDI0IDEwOjUzOjM4IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogcGEuYyAobW92ZV9vcGVyYW5kKTogUmVsYXggIm1vZGUiIHRlc3QuICBBbGxvdyBzY2FsZWQKKwlpbmRleGVkIGFkZHJlc3NpbmcgbW9kZXMuCisJKG91dHB1dF9mcF9tb3ZlX2RvdWJsZSk6IFR3ZWFrIG91dHB1dCBzdHJpbmdzIHRvIHdvcmsgd2l0aCB1cGRhdGVkCisJJ0YnIGFuZCAnTScgb3V0cHV0IG1vZGlmaWVycy4KKwkocHJpbnRfb3BlcmFuZCk6IENvbGxhcHNlICdGJyBhbmQgJ00nIGludG8gYSBzaW5nbGUgaHVuayBvZiBjb2RlLgorCUZvciBhdXRvLWluY3JlbWVudCBtb2RlcyBvdXRwdXQgInMsbWEiIGFuZCAicyxtYiIuCisJRm9yIHNjYWxlZCBpbmRleGluZyBtb2RlcyBvdXRwdXQgIngscyIKKwlGb3Igb3RoZXIgYWRkcmVzc2VzLCBvdXRwdXQgbm90aGluZyBmb3IgJ00nIGFuZCAicyIgZm9yICdGJy4KKwkqIHBhLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBEb24ndCBhY2NlcHQgc2NhbGVkIGluZGV4ZWQgYWRkcmVzc2VzCisJZm9yICdRJyBhbmQgJ1QnLiAgRG8gYWNjZXB0IHNjYWxlZCBpbmRleGVkIGFkZHJlc3NlcyBmb3IgJ1InLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBY2NlcHQgc2NhbGVkIGluZGV4ZWQgYWRkcmVzc2VzCisJZm9yIFNGbW9kZSBhbmQgREZtb2RlLgorCSogcGEubWQ6IFJlbW92ZSBhbGwgc2NhbGVkIGluZGV4ZWQgbG9hZCBwYXR0ZXJucy4KKwkobW92c2kgcGF0dGVybnMpOiBBY2NlcHQgc2NhbGVkIGluZGV4ZWQgYWRkcmVzc2VzIGluIHNvbWUKKwljYXNlcy4gIFVwZGF0ZSBvdXRwdXQgc3RyaW5ncyBmb3IgdXBkYXRlZCAnTScgYW5kICdGJyBvdXRwdXQgbW9kaWZpZXJzLgorCShtb3ZoaSwgbW92cWksIG1vdnNmLCBtb3ZkZiwgbW92ZGkgcGF0dGVybnMpOiBMaWtld2lzZS4KKworVHVlIEp1bCAyMyAyMzoxMDo0MSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2ludF9jc3QpOiBBZGQgZmllbGQgZm9yIFRSRUVfQ1NUX1JUTC4KKwkqIHZhcmFzbS5jIChkZWNvZGVfYWRkcl9jb25zdCwgb3V0cHV0X2NvbnN0YW50X2RlZik6IEFsbG93SU5URUdFUl9DU1QuCisKK1R1ZSBKdWwgMjMgMTY6NDI6MDkgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5jIChyZWdfdW51c2VkX2FmdGVyKTogSGFuZGxlIEpVTVBfSU5TTiBpbnNpZGUgYSBzZXF1ZW5jZS4KKworVHVlIEp1bCAyMyAxNjozMzoyNSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIE1ha2UgZXhjZXB0aW9uIGhhbmRsaW5nIHdvcmsgYmV0dGVyIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgb24uCisJKiBleGNlcHQuYywgZXhjZXB0Lmg6IE5ldyBmaWxlcy4KKwkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGV4Y2VwdC5vLgorCShleGNlcHQubyk6IEFkZC4KKwkoc3RtdC5vLCBmaW5hbC5vKTogQWRkIGV4Y2VwdC5oLgorCSogcnRsLmMgKG5vdGVfaW5zbl9uYW1lKTogQWRkIE5PVEVfSU5TTl9FSF9SRUdJT05fe0JFRyxFTkR9LgorCSogcnRsLmg6IExpa2V3aXNlLgorCSogYXJtLmggKE1BU0tfUkVUVVJOX0FERFIpOiBEZWZpbmUuCisJKiBwYS5oIChNQVNLX1JFVFVSTl9BRERSLCBSRVRVUk5fQUREUl9SVFgpOiBOZXcgbWFjcm9zLgorCSogc3BhcmMuaCAoRE9FU05UX05FRURfVU5XSU5ERVIpOiBEZWZpbmUgaWYgbm90IGRvaW5nIGEgZmxhdCBmdW5jdGlvbi4KKwkqIG1pcHMuaCAoUkVUVVJOX0FERFJfUlRYKTogSW1wcm92ZS4KKwkqIHZheC5oIChSRVRVUk5fQUREUl9SVFgpOiBJbXByb3ZlLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBVc2UgZmluZF9oYW5kbGVyX2xhYmVscy4KKwkobWFpbiwgaW50ZXJpbV9laHssX2hvb2t9KTogUmVtb3ZlIGludGVyaW1fZWhfaG9vayBzdXBwb3J0LgorCShmbGFnX2V4Y2VwdGlvbnMpOiBOZXcgZmxhZzsgYWxzbyBhZGQgdG8gdGFibGUuCisJKGNvbXBpbGVfZmlsZSk6IEVtaXQgdGhlIGV4Y2VwdGlvbiB0YWJsZSBpbiB0aGUgYmFja2VuZCBub3cuCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBTdXBwb3J0IEFTTV9PVVRQVVRfRUhfUkVHSU9OX3tCRUcsRU5EfS4KKwkoZmluYWxfc2Nhbl9pbnNuKTogUmVkbyBoYW5kbGVyIGxhYmVscywgaW1wbGVtZW50CisJTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcgYW5kIE5PVEVfSU5TTl9FSF9SRUdJT05fRU5EIGFuZCB1c2UgdGhlbQorCWluc3RlYWQgb2YgQ09ERV9MQUJFTHMuCisJKGZpbmFsKTogQWRkIGNhbGwgdG8gY2hlY2tfaGFuZGxlcl9sYWJlbHMuCisJKiBsaWJnY2MyLmMgKExfZWgpOiBBZGQgc3VwcG9ydCBmb3IgRUhfVEFCTEVfTE9PS1VQLgorCSogc3BhcmMubWQgKHJldHVybik6IEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIuCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogQWRkIHN1cHBvcnQgZm9yIGhhbmRsZXJfbGFiZWxzLgorCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBMaWtld2lzZS4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IExpa2V3aXNlLgorCUFkZCBjYWxsIHRvIGNoZWNrX2hhbmRsZXJfbGFiZWxzLiAgQWRkIGNhbGwgdG8gZXhjZXB0aW9uX29wdGltaXplLgorCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IFNtdWdnbGUgZXhjZXB0aW9uIHJlZ2lvbiBub3RlcyBhcm91bmQuCisJKHVubGlua19ub3RlcywgcmVlbWl0X25vdGVzLCBzY2hlZHVsZV9ibG9jayk6IExpa2V3aXNlLgorCShzY2hlZF9hbmFseXplKTogQWRkIGV4dHJhIGVsZW1lbnQgc2luY2Ugd2UgcmVtb3ZlIHR3byBhdCBhIHRpbWUuCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBBZGQgc3VwcG9ydCBmb3IgZXhjZXB0aW9uCisJcmVnaW9ucy4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgorCShmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBEb24ndCBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBFSAorCXJlZ2lvbnMgYmVmb3JlIE5PVEVfSU5TTl9GVU5DVElPTl9CRUcuCisJKGZpbmlzaF9pbmxpbmUpOiBVc2UgRklSU1RfRlVOQ1RJT05fSU5TTiwgbm90IE5FWFRfSU5TTi4KKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBOZXcgZnVuY3Rpb24uCisJKiBmdW5jdGlvbi5oOiBBZGQgZXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQgaW5mb3JtYXRpb24uCisJKiBleHByLmMgKGV4cGFuZF9leHByLCB7ZGVmZXIsZXhwYW5kfV9jbGVhbnVwc190bywgZG9fanVtcCk6IFRyYW5zZm9ybQorCWludGVyaW1fZWhfaG9vayBpbnRvIGNhbGxzIHRvIGV4cGFuZF9laHJlZ2lvbl97c3RhcnQsZW5kfS4KKwkqIHN0bXQuYyAoZXhwYW5kX3tkZWNsX2NsZWFudXAsY2xlYW51cHN9KTogTGlrZXdpc2UuCisJKGluaXRfc3RtdF9mb3JfZnVuY3Rpb24pOiBDYWxsIGluaXRfZWguCisJKHNhdmVfc3RtdF9zdGF0dXMpOiBDYWxsIHNhdmVfZWhfc3RhdHVzLgorCShyZXN0b3JlX3N0bXRfc3RhdHVzKTogQ2FsbCByZXN0b3JlX2VoX3N0YXR1cy4KKwkqIGV4cHIuaCAodGhyb3dfbGliZnVuYyk6IEFkZC4KKwkqIG9wdGFicy5jICh0aHJvd19saWJmdW5jKTogSW5pdGlhbGl6ZS4KKwkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBBZGQgc3VwcG9ydCBmb3IgZXhjZXB0aW9uIHJlZ2lvbnMuCisJKiByczYwMDAuYyAoRVhDRVBUSU9OX1NFQ1RJT04pOiBEZWZpbmUuCisJKiBvdXRwdXQuaCAoZXhjZXB0aW9uX3NlY3Rpb24pOiBEZWNsYXJlLgorCSogdmFyYXNtLmMgKGV4Y2VwdGlvbl9zZWN0aW9uKTogRGVmaW5lLgorCSogaTM4Ni5jLCBpOTYwLmMsIHJzNjAwMC5jOiBJbmNsdWRlIGV4Y2VwdC5oIGZvciBmdW5jdGlvbi5oLgorCSogYy1wcmFnbWEuYywgZW1pdC1ydGwuYywgZXhwci5jLCBmaW5hbC5jLCBmbG93LmM6IEluY2x1ZGUgZXhjZXB0LmguCisJKiBmdW5jdGlvbi5jLCBpbnRlZ3JhdGUuYywganVtcC5jLCBsb29wLmMsIG9iamMtYWN0LmM6IExpa2V3aXNlLgorCSogc3RtdC5jLCBzdG9yLWxheW91dC5jLCB0b3BsZXYuYywgdHJlZS5jLCB2YXJhc20uYzogTGlrZXdpc2UuCisJCitUdWUgSnVsIDIzIDEyOjMyOjU0IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9yZXBsYWNlX3JlZ25vKTogU2V0IHBpY19vZmZzZXRfdGFibGVfcnR4IHNvCisJdGhhdCBvdGhlciBwaGFzZXMgd2lsbCB1c2UgdGhlIFBJQyByZWdpc3RlciBpbnN0ZWFkIG9mIHRoZQorCXBsYWNlaG9sZGVyLgorCisJKiByczYwMDAubWQgKG1vdnNpX2dvdCopOiBFbGltaW5hdGUgLWZQSUMgY29kZSwga2VlcCAtZnBpYyBjb2RlLgorCShtb3ZzaSk6IE9ubHkgY2FsbCBtb3ZzaV9nb3QgaWYgLWZwaWMsIG5vdCAtZlBJQy4KKworCSogc3lzdjQuaCAoT1ZFUlJJREVfT1BUSU9OUyk6IEltcHJvdmUgZXJyb3IgbWVzc2FnZXMuICBBbHdheXMgc2V0CisJLW1zZGF0YT1kYXRhIGJ5IGRlZmF1bHQsIGV2ZW4gaWYgLWZwaWMvLWZQSUMvLW1yZWxvY2F0YWJsZS4gIFRyZWF0CisJLWZQSUMgdGhlIHNhbWUgYXMgLW1yZWxvY2F0YWJsZS1saWIgYW5kIHZpY2EgdmVyc2EuCisKKwkqIHQtcHBjZ2FzOiAoTVVMVElMSUJfKik6IFVzZSAtbXJlbG9jdGFibGUtbGliLCBpbnN0ZWFkIG9mCisJLW1yZWxvY2F0YWJsZS4gIE1hcCBTb2xhcmlzIGludG8gbWNhbGwtc3lzdi1ub2VhYmkgY2FzZS4gIEJ1aWxkCisJLW1yZWxvY2F0YWJsZS1saWIgbGlicmFyaWVzIHVuZGVyIG5vbi1lYWJpIGNhc2UuICBXaGVuIGxpbmtpbmcsIGlmCisJLWZwaWMsIC1mUElDLCBvciAtc2hhcmVkLCBsaW5rIGluIHRoZSAtbXJlbG9jYXRhYmxlLWxpYiBsaWJyYXJpZXMuCisKK01vbiBKdWwgMjIgMTk6MzQ6MjAgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBpcmlzNi5oIChBU01fU1BFQyk6IENoYW5nZSB7JSB0byAley4KKworCSogZHdhcmYyb3V0LmMgKG91dHB1dF9jYWxsX2ZyYW1lX2luZm8pOiBDaGFuZ2UgRkRFIENJRSBvZmZzZXQgdG8KKwliZSBzZWN0aW9uIG5hbWUgcmF0aGVyIHRoYW4gMC4KKwkoZ2VuX3N1YnByb2dyYW1fZGllKTogT25seSBlbWl0IERXX0FUX2V4dGVybmFsIGlmIG9yaWdpbiBpcyBOVUxMLgorCU9ubHkgY2FsbCBlcXVhdGVfZGVjbF9udW1iZXJfdG9fZGllIGlmIG9yaWdpbiBpcyBOVUxMLgorCShkd2FyZm91dF9iZWdpbl9mdW5jdGlvbik6IEluIGNvZGUgdGhhdCBjb21wdXRlcyBvZmZzZXQgb2YgZnJhbWUKKwlwb2ludGVyLCBjaGFuZ2UgNCB0byBVTklUU19QRVJfV09SRC4KKworCSogY29tYmluZS5jICh1bmRvX2FsbCk6IENsZWFyIHByZXZpb3VzX3VuZG9zIGZpZWxkLgorCitNb24gSnVsIDIyIDE5OjEwOjQ1IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlOiBEb24ndCBjaGFuZ2UgdGFyZ2V0X2FsaWFzIHRvIHRhcmdldCBpbiBNYWtlZmlsZS4KKworU2F0IEp1bCAyMCAwOToyODozOCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfYm91bmRfcmVwcmVzZW50YXRpb24pOiBUcmVhdCBkZWZhdWx0IGNhc2UKKwlhcyB2YXJpYWJsZSBib3VuZHMsIHRoZW4gbG9vayBpbnNpZGUgZm9yIFNBVkVfRVhQUi4KKworCSogbWlwcy5oIChJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBVc2UgYF9mbHVzaF9jYWNoZSc7IGZsdXNoIGRhdGEKKwljYWNoZSB0b28uCisKK1NhdCBKdWwgMjAgMDk6MjQ6MTMgMTk5NiAgTWFyY28gV2FsdGhlciAgKE1hcmNvLldhbHRoZXJAbWNoLnNuaS5kZSkuCisKKwkqIGNvbmZpZ3VyZSAobWlwcy1zbmktc3lzdjQpOiBOZXcgdGFyZ2V0LgorCSogbWlwcy9zbmktZ2FzLmgsIG1pcHMvc25pLXN2cjQuaCwgbWlwcy94LXNuaS1zdnI0OiBOZXcgZmlsZXMuCisKK0ZyaSBKdWwgMTkgMTc6NDQ6MTMgMTk5NiAgU3RhbiBDb3hzICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2Lm1kOiAobGVhdmUpOiBDbG9iYmVycyBlc3AgYW5kIGVicC4KKworCSogaTM4Ni5oOiAoVEFSR0VUX1VTRV9RX1JFRyk6IFN1cHBvcnQgaW5saW5lIHN0cmxlbiBvbiBQZW50aXVtUHJvCisKK0ZyaSBKdWwgMTkgMTU6NTY6MTggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBtNjhrL3QtbTY4a2JhcmUgKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbTUyMDAuCisJKE1VTFRJTElCX0VYQ0VQVElPTlMpOiBEZWZpbmUuCisJKiBtNjhrL2xiMXNmNjguYXNtOiBBZGQgTUNGNTIwMCBzdXBwb3J0LgorCSogbTY4ay5tZCAoYWRkZGlfc2V4dGhpc2hsMzIpOiBTZXQgY29uZGl0aW9uIHRvICFUQVJHRVRfNTIwMC4KKwkoc3ViZGlfc2V4dGhpc2hsMzIsIGFzaHJkaTMsIGFzaHJoaTMpOiBMaWtld2lzZS4KKwkobmVnZGkyKTogQ2hhbmdlIGludG8gZGVmaW5lX2V4cGFuZC4KKwkobmVnZGkyX2ludGVybmFsKTogUmVuYW1lIGZyb20gb2xkIG5lZ2RpMjsgY29uZGl0aW9uIG5vdyAhVEFSR0VUXzUyMDAuCisJKG5lZ2RpMl81MjAwKTogTmV3IGluc24uCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IERvbid0IHVzZSBhZGQudyBpZiBUQVJHRVRfNTIwMC4KKwkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisKKwkqIG02OGsubWQgKG1vdnFpKTogUmVtb3ZlIGNvbXBsZXggY2FzZXMgd2hpY2ggbW92ZSBiZXR3ZWVuIGFkZHJlc3MgcmVnCisJYW5kIG1lbW9yeTsgcmVseSBvbiBzZWNvbmRhcnkgcmVsb2FkcyBpbnN0ZWFkLgorCitGcmkgSnVsIDE5IDEyOjIyOjUwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KKworCSogZml4cHJvdG8gKHN0ZF9maWxlcyk6IEFkZCB1dGltZS5oLgorCitGcmkgSnVsIDE5IDEwOjU5OjQ2IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKKworCSogbTY4ay9tNjhrZW1iLmg6IFJlbW92ZSAnXCcgYXQgRU9GLgorCitGcmkgSnVsIDE5IDA5OjU5OjAwIDE5OTYgIEpvZWwgU2hlcnJpbGwgPGpvZWxAT0FSY29ycC5jb20+CisKKwkqIG02OGsvY29mZi5oIChTVEFSVEZJTEVfU1BFQyk6IEFkZCAjdW5kZWYgYmVmb3JlIGRlZmluaXRpb24uCisKK0ZyaSBKdWwgMTkgMDk6NDQ6NDUgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQHJ0bC5jeWdudXMuY29tPgorCisJKiBtNjhrLmggKExFR0lUSU1BVEVfSU5ERVhfUCk6IENvbGRmaXJlIGRvZXMgbm90IGhhdmUgc2NhbGUKKwlieSA4IGFkZHJlc3NpbmcgbW9kZXMuCisKKwkqIG02OGstbm9uZS5oOiBVc2UgTUFTS18qIG1hY3JvcyBpbnN0ZWFkIG9mIGV4cGxpY2l0IGNvbnN0YW50cy4KKworRnJpIEp1bCAxOSAwOTowODo1MyAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgorCisJKiBtNjhrLm1kIChuZWdkaTIpOiBVbmRvIGxhc3QgY2hhbmdlOiBkb24ndCBhcHBseSBuZWcgdG8gYWRkcmVzcyByZWdzLgorCitGcmkgSnVsIDE5IDA5OjAzOjAxIDE5OTYgIFJvYmVydCBXaWxoZWxtICAocndpbGhlbG1AUGh5c2lrLlRVLU11ZW5jaGVuLkRFKQorCisJKiB0b3BsZXYuYyAobWFpbik6IENvcnJlY3QgdHlwbyBpbiBlcnJvciBtZXNzYWdlLgorCitUaHUgSnVsIDE4IDIwOjI5OjMzIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZHdhcmYyb3V0Lm8uCisJKGR3YXJmMm91dC5vKTogTmV3IHJ1bGUuCisJKiBkd2FyZjIuaCwgZHdhcmYyb3V0LmM6IE5ldyBmaWxlcy4KKwkqIGR3YXJmb3V0LmM6IENoZWNrIERXQVJGX1ZFUlNJT04gbWFjcm8uCisKKwkqIG1pcHMvaXJpczYuaCAoRFdBUkZfREVCVUdHSU5HX0lORk8sIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6CisJTW92ZSBhZnRlciBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkLgorCShpcmlzNS5oKTogSW5jbHVkZSBpbnN0ZWFkIG9mIGlyaXM1Z2FzLmguCisJKE1BQ0hJTkVfVFlQRSk6IENoYW5nZSA1LnggdG8gNi54LgorCShERUJVR19TRUNUSU9OLCBMSU5FX1NFQ1RJT04pOiBBZGQgZGVidWdfIHRvIG5hbWUsIGZpeCBhdHRyaWJ1dGVzLgorCShTRk5BTUVTX1NFQ1RJT04sIFNSQ0lORk9fU0VDVElPTiwgTUFDSU5GT19TRUNUSU9OLCBQVUJOQU1FU19TRUNUSU9OLAorCUFSQU5HRVNfU0VDVElPTik6IEZpeCBhdHRyaWJ1dGVzLgorCShEV0FSRl9WRVJTSU9OLCBNSVBTX0RFQlVHR0lOR19JTkZPLCBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FLAorCUFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUsIEZVTkNUSU9OX05BTUVfQUxSRUFEWV9ERUNMQVJFRCwKKwlGUkFNRV9TRUNUSU9OLCBBQkJSRVZfU0VDVElPTik6IERlZmluZS4KKwkoREJYX0RFQlVHR0lOR19JTkZPLCBTREJfREVCVUdHSU5HX0lORk8sIE1JUFNfREVCVUdHSU5HX0lORk8sCisJRFdBUkZfREVCVUdHSU5HX0lORk8sIFBSRUZFUlJFRF9ERUJVR0dJTkdfSU5GTyk6IERlbGV0ZSB1bmRlZnMgYXQKKwllbmQgb2YgZmlsZS4KKwkqIG1pcHMvbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IFVzZSBGVU5DVElPTl9OQU1FX0FMUkVBRFlfREVDTEFSRUQuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisKK1RodSBKdWwgMTggMTk6MjQ6MTkgMTk5NiAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgIDxkYXZpZG1AYXpzdGFybmV0LmNvbT4KKworCSogYWxwaGEvZWxmLmggKElOVF9BU01fT1ApOiBDaGFuZ2UgZnJvbSAiLmxvbmciIHRvICIucXVhZCIuCisKK1RodSBKdWwgMTggMTk6MjA6NTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZS5yei51bmkta2FybHNydWhlLmRlPgorCisJKiBzdGRkZWYuaDogVW5kZWZpbmUgX19uZWVkX3dpbnRfdC4KKworVGh1IEp1bCAxOCAxOTowNjozNSAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAaGlwcG8uY3lnbnVzLmNvbT4KKworCSogbG9uZ2xvbmcuaCAobWM2ODB4MCk6IERlZmluZSB1bXVsX3BwbW0sIHVkaXZfcXJubmQsIHNkaXZfcXJubmQKKwlmb3IgdGhlICcwMjAsICcwMzAsICcwNDAsIGFuZCAnMzMyLiAgRGVmaW5lIGNvdW50X2xlYWRpbmdfemVyb3MKKwlmb3IgdGhlICcwMjAsICcwMzAsICcwNDAsIGFuZCAnMDYwLgorCisJKiBtNjhrLm1kOiBBZGQgVEFSR0VUXzUyMDAgdG8gY29uZGl0aW9ucyB3aGljaCBkZXRlcm1pbmUgd2hldGhlcgorCXRoZSBleHRibCBpbnN0cnVjdGlvbiBpcyBlbWl0dGVkLgorCShtdWxzaTMpOiBFbmFibGUgcGF0dGVybiB3aXRoIFRBUkdFVF81MjAwLgorCisJKiBtNjhrLm1kIChhZGQgcGF0dGVybnMpOiBEb24ndCB1c2UgdHdvIGFkZHF3IGluc3RydWN0aW9ucyB3aGVuCisJYWRkaW5nIHNtYWxsICg4IDwgTiA8PSAxNikgaW50ZWdlcnMgdG8gYWRkcmVzcyByZWdpc3RlcnMgb24gNjgwNDAuCisKK1RodSBKdWwgMTggMTg6MDY6MTUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlOiBXcml0ZSB0YXJnZXRfYWxpYXMgaW4gTWFrZWZpbGUuCisJKGlbMzQ1Nl04Ni0qLXNjbzMuMnY0Kik6IFNldCB0cnVuY2F0ZV90YXJnZXQuCisJKiBNYWtlZmlsZS5pbiAodGFyZ2V0X2FsaWFzKTogTmV3IGFuZCB1c2VkIGZvciBhbGwgY3VycmVudCB1c2VzCisJb2YgYHRhcmdldCcuCisKK1RodSBKdWwgMTggMTc6NDY6MDIgMTk5NiAgRGF2ZSBMb3ZlICA8ZC5sb3ZlQGRsLmFjLnVrPgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBFeHRyYSBGb3J0cmFuIGV4dGVuc2lvbnMuCisKK1dlZCBKdWwgMTcgMTA6Mjg6MTAgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQHNwaWZmLmdudS5haS5taXQuZWR1PgorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHRfaGlnaHBhcnQpOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCisKK1R1ZSBKdWwgMTYgMTI6NTE6NTkgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9zcGFyYy1ydGVtcy5oOiAjaW5jbHVkZSAic3BhcmMvc3BhcmMtYW91dC5oIiAtPiBzcGFyYy9hb3V0LmguCisKK01vbiBKdWwgMTUgMTQ6NDI6MDYgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtaXBzL2lyaXM2LmggKExJTktfU1BFQyk6IEFkZCAtd29mZiA4NC4KKworRnJpIEp1bCAxMiAxNzozNDowMSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9lYWJpLmFzbSAoX19lYWJpKTogQ29udmVydCBwb2ludGVycyBpbiB0aGUgR2xvYmFsIE9mZnNldAorCVRhYmxlIGlmIC1tcmVsb2NhdGFibGUuICBNb3ZlIGxvb3BzIGludG8gc2VwYXJhdGUgc3Vicm91dGluZXMgZm9yCisJZWFzZSBvZiBkZWJ1Z2dpbmcuICBSZW9yZ2FuaXplIGNvZGUgc29tZXdoYXQuCisKKwkqIHJzNjAwMC9yczYwMDAuYyAoc21hbGxfZGF0YV9vcGVyYW5kKTogQWxsb3cgc21hbGwgZGF0YSB1bmRlcgorCVNvbGFyaXMuCisKKwkqIHJzNjAwMC9zb2wtYzAuYyAoX3N0YXJ0KTogSW5pdGlhbGl6ZSByMTMgdG8gcG9pbnQgdG8gdGhlIHNtYWxsCisJZGF0YSBvcGVyYW5kLgorCisJKiByczYwMDAvc29sLWN7aSxufS5hc20gKF9pbml0LCBfZmluaSk6IEVuYWJsZSBzaGFyZWQgbGlicmFyeQorCXN1cHBvcnQuCisKKwkqIHJzNjAwMC9zeXN2NC5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IERlZmF1bHQgdG8KKwktbXNkYXRhPWRhdGEsIGV2ZW4gaWYgLWZwaWMgb3IgLW1yZWxvY2F0YWJsZS4gIEFsbG93IC1tcmVsb2NhdGFibGUKKwlhbmQgLW1uby1lYWJpLgorCShDUFBfU1lTVl9TUEVDKTogSWYgLWZwaWMsIGRlZmluZSBfX1BJQ19fIGFuZCBfX3BpY19fIHRvIDEuICBJZgorCS1mUElDLCBkZWZpbmUgdGhlbSB0byAyLgorCShDUFBfRU5ESUFOX1NQRUMpOiBQdXNoIGRlZmluaXRpb24gb2YgbWFjcm9zIGZvciBzcGVjaWZpYyBlbmRpYW4KKwl0YXJnZXRzIHRvIG5ldyBzcGVjcy4KKwkoQ1BQX0VORElBTl9ERUZBVUxUX1NQRUMpOiBEZWZpbmUgdG8gdXNlIENQUF9FTkRJQU5fQklHX1NQRUMuCisJKENQUF9FTkRJQU5fe0xJVFRMRSxCSUcsU09MQVJJU31fU1BFQyk6IE5ldyBzcGVjcyBmb3IgbGl0dGxlCisJZW5kaWFuIG1vZGUsIGJpZyBlbmRpYW4gbW9kZSwgYW5kIFNvbGFyaXMsIHdoaWNoIGNhbid0IGRlZmluZQorCV9MSVRUTEVfRU5ESUFOLiAgRGVmaW5lIF9fTElUVExFX0VORElBTl9fIGluIGFsbCBjYXNlcyBmb3IgbGl0dGxlCisJZW5kaWFuIHN5c3RlbXMuICBEZWZpbmUgX19CSUdfRU5ESUFOX18gaW4gYWxsIGNhc2VzIGZvciBiaWcgZW5kaWFuCisJc3lzdGVtcy4KKwkoU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogQWRkIG5ldyBzcGVjcy4KKworCSogcnM2MDAwL3tlYWJpbGUsc3lzdjRsZX0uaCAoQ1BQX0VORElBTl9ERUZBVUxUX1NQRUMpOiBEZWZpbmUgdG8KKwl1c2UgQ1BQX0VORElBTl9MSVRUTEVfU1BFQy4KKworCSogcnM2MDAwL3NvbDIuaCAoQ1BQX0VORElBTl9MSVRUTEVfU1BFQyk6IERlZmluZSBhcworCUNQUF9FTkRJQU5fU09MQVJJU19TUEVDIHNvIHRoYXQgX0xJVFRMRV9FTkRJQU4gaXMgbm90IGRlZmluZS4KKworRnJpIEp1bCAxMiAxNzozNDowMSAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmMgKGZ1bmN0aW9uX2FyZyk6IEFkZCBJQk0gQUlYIFhMIGNvbXBpbGVyIGJyb2tlbiBGUCBhcmcKKwlwYXNzaW5nIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkqIHJzNjAwMC5oIChUQVJHRVRfWExfQ0FMTCk6IERlZmluZSBkZWZhdWx0LgorCSogYWl4M25ld2FzLmggKFRBUkdFVF9YTF9DQUxMLCBTVUJUQVJHRVRfU1dJVENIRVMpOiBEZWZpbmUuCisJKiBhaXg0MS5oIChUQVJHRVRfWExfQ0FMTCwgU1VCVEFSR0VUX1NXSVRDSEVTKTogRGVmaW5lLgorCitGcmkgSnVsIDEyIDE1OjA0OjQzIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYXJtL2FybS5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogSGFuZGxlIGZucyByZXR1cm5pbmcgc3RydWN0dXJlcy4KKworCSogcHR4NC5oICh7QVNNLExJTkt9X1NQRUMpOiAle1Z9ICV7djoleyFWOi1WfX0gLT4gJXt2Oi1WfS4KKwkqIHN2cjQuaCAoe0FTTSxMSU5LfV9TUEVDKTogTGlrZXdpc2UuCisJKiBkc3AxNnh4L2RzcDE2eHguaCAoe0FTTSxMSU5LfV9TUEVDKTogTGlrZXdpc2UuCisJKiBpMzg2L2RndXguaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBpMzg2L3NvbDIuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBtODhrL2RndXguaCAoe0xJTkssQVNNX0NQVX1fU1BFQyk6IExpa2V3aXNlLgorCSogc3BhcmMvc29sMi5oICh7QVNNLExJTkt9X1NQRUMpOiBMaWtld2lzZS4KKwkqIHNwYXJjL3NwNjQtZWxmLmggKHtBU00sTElOS31fU1BFQyk6IExpa2V3aXNlLgorCSogc3BhcmMvc3lzdjQuaCAoQVNNX1NQRUMpOiBMaWtld2lzZS4KKworVGh1IEp1bCAxMSAxNzoyOTozMyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5oIChHT1RfVE9DX1JFR05VTSk6IE5ldyBtYWNybyBmb3IgcjIsIHdoaWNoIGlzIHVzZWQgYXMgYQorCW1hcmtlciBmb3IgdGhlIEdPVC9UT0MgcmVnaXN0ZXIgdG8gYmUgYWxsb2NhdGVkIGxhdGVyLgorCShNQUNISU5FX0RFUEVOREVOVF9SRU9SRyk6IENhbGwgcnM2MDAwX3Jlb3JnLgorCShyczYwMDBfcmVvcmcpOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIHJzNjAwMC5jIChyczYwMDBfZ290X3JlZ2lzdGVyKTogUmV0dXJuIFJFRyAyLCBub3QgYSBwc2V1ZG8KKwlyZWdpc3RlciBpbiBvcmRlciB0byB3b3JrIHdpdGggaW5saW5lZCBmdW5jdGlvbnMuCisJKHJzNjAwMF9yZXBsYWNlX3JlZ25vKTogTmV3IGZ1bmN0aW9uIHRvIHJlcGxhY2UgYSByZWdpc3RlciB3aXRoIGEKKwluZXcgcHNldWRvIHJlZ2lzdGVyLgorCShyczYwMDBfZmluYWxpemVfcGljKTogTG9vcCB0aHJvdWdoIGFsbCBvZiB0aGUgaW5zbnMsIHJlcGxhY2luZworCWFueSBHT1RfVE9DX1JFR05VTSByZWdpc3RlcnMgd2l0aCBhIG5ldyBwc2V1ZG8gcmVnaXN0ZXIsIGFuZAorCWFkZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygb2YgdGhlIEdPVCByZWdpc3RlciBpZiBpdCB3YXMKKwljcmVhdGVkLgorCShyczYwMDBfcmVvcmcpOiBOZXcgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgR09UX1RPQyByZWdpc3RlcgorCW1hcmtlciB3YXMgcmVtb3ZlZC4KKworVGh1IEp1bCAxMSAxMDoxMjo1MCAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIGg4MzAwL2g4MzAwLmggKE9LX0ZPUl9VKTogSWYgZ2VuZXJhdGluZyBIOC9TIGNvZGUsIGFjY2VwdAorCVNZTUJPTF9SRUYgYW5kIFNZTUJPTF9SRUYgKyBDT05TVF9JTlQuCisKKwkqIGg4MzAwL2g4MzAwLmMgKHNoaWZ0X29uZSk6IEVtaXQgdGFicyBiZXR3ZWVuIG9wY29kZSBhbmQKKwlvcGVyYW5kcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbXBpbGVyLgorCShyb3RhdGVfb25lKTogTGlrZXdpc2UuCisJKHNoaWZ0X3R3bywgcm90YXRlX3R3byk6IERlZmluZS4KKwkoZ2V0X3NoaWZ0X2FsZyk6IEFjY2VwdCBuZXcgYXJndW1lbnQgImFzc2VtYmxlcjJfcCIgZm9yCisJcm90YXRlL3NoaWZ0IGJ5IHR3byBpbnNucy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuICBSZXdvcmsKKwl0byBnZW5lcmF0ZSBtb3JlIGVmZmljaWVudCBjb2RlIG9uIHRoZSBIOC8zMDAsIEg4LzMwMEgsIGFuZAorCUg4L1MuICBUcnkgdG8gc2ltcGxpZnkgc29tZXdoYXQuCisJKGVtaXRfYV9zaGlmdCk6IFVzZSBzaGlmdC1ieS10d28gaW5zbnMgd2hlbiB0aGV5J3JlIGF2YWlsYWJsZS4KKwlFbWl0IHRhYnMgYmV0d2VlbiBvcGNvZGUgYW5kIG9wZXJhbmRzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorCXRoZSByZXN0IG9mIHRoZSBjb21waWxlci4KKworV2VkIEp1bCAxMCAxOTozMjoxNyAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMvaXJpczYuaCAoQVNNX1NQRUMpOiBDb3JyZWN0IHR5cG9zIGluIEp1biAxOCBjaGFuZ2UuCisKK1dlZCBKdWwgMTAgMTg6NTY6MzggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBzaC9zaC5jIChtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IFdoZW4gbG9va2luZyBmb3IgdGhlCisJaW5zdHJ1Y3Rpb24gdGhhdCBzZXRzIGEgcmVnaXN0ZXIgaW4gTE9HX0xJTktTLCBza2lwIHRoZSBsaW5rIGlmCisJUkVHX05PVEVfS0lORCBpcyBub3QgemVyby4KKworV2VkIEp1bCAxMCAxNTowMjoxOCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5jIChyczYwMDBfZ290X3JlZ2lzdGVyKTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiBhIHBzZXVkbworCXJlZ2lzdGVyIHRvIGhvbGQgdGhlIHBpYyByZWdpc3Rlci4gIEFib3J0IGlmIHJlbG9hZCBpcyBpbiBwcm9ncmVzcworCW9yIGRvbmUuCisJKG51bV9pbnNuc19jb25zdGFudCk6IEFsbG93IFNGbW9kZSBhbmQgREZtb2RlLgorCisJKiByczYwMDAuaCAoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IFJlZG8gJ0cnIHNvIHRoYXQgaXQKKwltZWFucyBhIGNvbnN0YW50IHRoYXQgdGFrZXMgZXhhY3RseSB0d28gaW5zbnMuCisJKHJzNjAwMF9nb3RfcmVnaXN0ZXIpOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIHJzNjAwMC5tZCAobW92c2lfZ290KTogTW92ZSBzZXR1cCBvZiBwaWMgcmVnaXN0ZXIgdG8KKwlyczYwMDBfZ290X3JlZ2lzdGVyLgorCShtb3ZzZik6IElmIC1tc29mdC1mbG9hdCwgZG9uJ3QgZm9yY2UgY29uc3RhbnRzIHRvIG1lbW9yeS4KKwkobW92e3NmLGRmfSBpbnNucyk6IElmIHNvZnQgZmxvYXRpbmcgcG9pbnQsIGFsbG93IGFueSBjb25zdGFudCB0bworCWJlIGxvYWRlZC4gIEFkZCBkZWZpbmVfc3BsaXRzIHRoYXQgYWxsb3cgdGhlIDYwNCB0byB1c2UgYm90aAorCWludGVnZXIgdW5pdHMgZm9yIGxvYWRpbmcgY29uc3RhbnRzLiAgTWFrZSBzdXJlIGluc24gbGVuZ3RoIGlzCisJY29ycmVjdC4KKworVHVlIEp1bCAgOSAxNzowNToxMCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5jIChlYXN5X2ZwX2NvbnN0YW50KTogQWxsIEZQIGNvbnN0YW50cyBhcmUgY29uc2lkZXJlZAorCWhhcmQgZm9yIC1mcGljIGFuZCBoYXJkd2FyZSBmbG9hdGluZyBwb2ludCwgc28gdGhhdCB0aGUgR09UCisJcmVnaXN0ZXIgaXMgY3JlYXRlZC4KKworVHVlIEp1bCAgOSAxNToyMToyNyAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHgtaXJpczYgKEZJWFBST1RPX0RFRklORVMpOiBBZGQgLURfU0dJX1NPVVJDRS4KKworTW9uIEp1bCAgOCAxODowMDozMyAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNoL3NoLmggKGVudW0gcmVnX2NsYXNzKTogQWRkIG5ldyBjbGFzcyBHRU5FUkFMX0ZQX1JFR1MuCisJKFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTKTogTGlrZXdpc2UuCisKKwkqIGNzZS5jIChub3RlX21lbV93cml0dGVuKTogVmFyeWluZyBzdHJ1Y3R1cmUgbWVtb3J5IGFjY2VzcyB3aXRoCisJQU5EIGFkZHJlc3MgY2FuIGFsaWFzIHNjYWxhcnMuCisJKiBzY2hlZC5jICh0cnVlX2RlcGVuZGVuY2UsIGFudGlfZGVwZW5kZW5jZSwgb3V0cHV0X2RlcGVuZGVuY2UpOgorCUxpa2V3aXNlLgorCisJKiBzaC5jIChjYWxjX2xpdmVfcmVncyk6IEZvciBwcmFnbWFfaW50ZXJydXB0IGNhc2UsIGV4Y2x1ZGUgY2FsbAorCWNsb2JiZXJlZCByZWdzIHRoYXQgYXJlIGZpeGVkLCBleHBsaWNpdGx5IGFkZCBNQUNIX1JFRyBhbmQgTUFDTF9SRUcuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRm9yIGFzc2lnbl9zdGFja190ZW1wIGNhbGwgaW4gUEFSQUxMRUwgY2FzZSwKKwlnZXQgbW9kZSBmcm9tIHR5cGUgaW5zdGVhZCBvZiB1c2luZyBCTEttb2RlLgorCSogZnVuY3Rpb24uYyAoYWdncmVnYXRlX3ZhbHVlX3ApOiBJZiBoYXJkX2Z1bmN0aW9uX3ZhbHVlIHJldHVybnMKKwlhIG5vbi1SRUcsIHRoZW4gcmV0dXJuIDAuCisKKwkqIG1pcHMvbWlwcy5jIChmdW5jdGlvbl9hcmcpOiBBZGQgZXhwbGljaXQgY2hlY2tzIGZvciBGSUVMRF9ERUNMcy4KKwkobWlwc19mdW5jdGlvbl92YWx1ZSk6IEFkZCBleHBsaWNpdCBjaGVja3MgZm9yIEZJRUxEX0RFQ0xzLCBhbmQgc2F2ZQorCXRoZW0gaW4gdGhlIGFycmF5IEZJRUxEUy4gIFdoZW4gcmV0dXJuaW5nIHN0cnVjdHVyZSB3aXRoIDEgZmxvYXQgZmllbGQsCisJZW5jbG9zZSBpdCBpbiBhIFBBUkFMTEVMIGFuZCBzZXQgdGhlIFBBUkFMTEVMIG1vZGUgY29ycmVjdGx5LgorCSogbWlwcy9taXBzLm1kIChjYWxsX3ZhbHVlKTogQ2FsbCBnZW5fY2FsbF92YWx1ZV9tdWx0aXBsZV9pbnRlcm5hbDAKKwlvbmx5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSByZXR1cm4gdmFsdWVzLiAgU3RyaXAgdGhlIFBBUkFMTEVMIG9mZgorCWlmIHRoZXJlIHRoZXJlIGlzIG9ubHkgb25lIHJldHVybiB2YWx1ZS4KKworTW9uIEp1bCAgOCAxNjoyNzozMyAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBGaXJzdCBjdXQgYXQgc3VwcG9ydCBmb3IgdGhlIEg4L1MuCisJKiBoODMwMC9oODMwMC5jIChoODMwMF9pbml0X29uY2UpOiBIYW5kbGUgdGhlIEg4L1MgKHRyZWF0IGl0CisJbGlrZSB0aGUgSDgvMzAwSCkuCisJKGRvc2l6ZSwgYWRkc19zdWJzX29wZXJhbmQsIG9uZV9pbnNuX2FkZHNfc3Vic19vcGVyYW5kKTogTGlrZXdpc2UuCisJKG91dHB1dF9hZGRzX3N1YnMsIGNvbnN0X2Nvc3RzLCBwcmludF9vcGVyYW5kKTogTGlrZXdpc2UuCisJKG91dHB1dF9zaW1vZGVfYmxkLCBoODMwMF9hZGp1c3RfaW5zbl9sZW5ndGgpOiBMaWtld2lzZS4KKwkocHVzaF9vcmRlciwgcG9wX29yZGVyKTogUmV2ZXJzZS4KKwkoZnVuY3Rpb25fcHJvbG9ndWUpOiBUcnkgdG8gdXNlIGxkbS5sIGFuZCBzdG0ubCBpbnNucworCW9uIHRoZSBIOC9TLiAgTWlub3IgY2xlYW51cHMuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisJKGFzbV9maWxlX3N0YXJ0KTogRW1pdCAiLmg4MzAwcyIgd2hlbiBjb21waWxpbmcgZm9yIHRoZSBIOC9TLgorCSogaDgzMDAvaDgzMDAuaCAoQ1BQX1NQRUMpOiBIYW5kbGUgdGhlIEg4L1MuCisJKFRBUkdFVF9IODMwMFMpOiBOZXcgdGFyZ2V0LgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgIi1tcyIgYW5kICItbW5vLXMiLgorCShCSVRTX1BFUl9XT1JEKTogSGFuZGxlIHRoZSBIOC9TICh0cmVhdCBpdCBsaWtlIHRoZSBIOC8zMDBIKS4KKwkoVU5JVFNfUEVSX1dPUkQsIFBPSU5URVJfU0laRSwgUEFSTV9CT1VOREFSWSk6IExpa2V3aXNlLgorCShCSUdHRVNUX0FMSUdOTUVOVCwgQklHR0VTVF9GSUVMRF9BTElHTk1FTlQpOiBMaWtld2lzZS4KKwkoSU5JVElBTElaRV9UUkFNUE9MSU5FLCBNT1ZFX01BWCwgUG1vZGUpOiBMaWtld2lzZS4KKwkqIGg4MzAwL2g4MzAwLm1kOiBIYW5kbGUgSDgvUyBqdXN0IGxpa2UgSDgvMzAwSAorCXRocm91Z2hvdXQgdGhlIGVudGlyZSBmaWxlLgorCSogaDgzMDAvdC1oODMwMCAoTVVMVElMSUJfT1BUSU9OUyk6IEJ1aWxkICItbXMiIGxpYnJhcmllcworCXRvby4KKwkoTVVMVElMSUJfRElSTkFNRVMpOiBQdXQgSDgvUyBsaWJyYXJpZXMgaW4gImg4MzAwcyIgZGlyZWN0b3J5LgorCSogaDgzMDAvbGliMWZ1bmNzLmFzbTogRW1pdCAiLmg4MzAwcyIgcHNldWRvLW9wIHdoZW4gZ2VuZXJhdGluZworCWg4MzAwcyBvYmplY3QgZmlsZXMuICBPdGhlcndpc2UgdHJlYXQgdGhlIEg4L1MganVzdCBsaWtlIHRoZSBIOC8zMDBILgorCSogZ2luY2x1ZGUvc3RkYXJnLmg6IEhhbmRsZSB0aGUgSDgvUy4KKwkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogTGlrZXdpc2UuCisKK01vbiBKdWwgIDggMTQ6NTA6NTggMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9zb2wyLmggKExJTktfU1BFQyk6IERvbid0IHBhc3MgYC16IHRleHQnIGlmCisJLXNoYXJlZCAtbWltcHVyZS10ZXh0LgorCitTdW4gSnVsICA3IDE4OjAzOjQ2IDE5OTYgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBub2lzeS50bWcuc2U+CisKKwkqIG02OGsvbGIxc2Y2OC5hc20gKF9fdWRpdnNpMyk6IFVzZSBmYXN0ZXIgdHN0dyBpbnN0ZWFkIG9mIGJ0c3QuCisKK1RodSBKdWwgIDQgMTE6NDQ6MzkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogRGVsZXRlIHVzaW5nIGFsdGVybmF0ZSBtb2RlIGZvcgorCWJpdGZpZWxkOyB3ZSBkb24ndCBtYWtlIGJpdGZpZWxkcyBhbnltb3JlIGlmIG5vdCBuZWVkZWQuCisKK1dlZCBKdWwgIDMgMTg6MjM6MTcgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIGMtY29tbW9uLmMgKHJlY29yZF9mdW5jdGlvbl9mb3JtYXQpOiBEZWZpbmUgYXMgc3RhdGljLgorCQorCSogY29sbGVjdDIuYyAoYXQgU1VOT1M0X1NIQVJFRF9MSUJSQVJJRVMpOiBGaXggcmVmZXJlbmNlIHRvIHVuaXN0ZC5oLgorCitXZWQgSnVsICAzIDE3OjM1OjIwIDE5OTYgIEdhdmluIEtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgorCisgICAgICAgICogYy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogQWRkIGJpdGZpZWxkIHByb21vdGlvbnMuCisgICAgICAgICAgICAgICAgCitXZWQgSnVsICAzIDE3OjA5OjIyIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEFkZCBudWxsIGVudHJpZXMgZm9yIGxhbmd1YWdlcyB3ZQorCWhlYXJkIG9mLgorCShtYWluKTogSWYgZm91bmQgb25lIG9mIHRob3NlIGVudHJpZXMsIHNheSBjb21waWxlciBub3QgaW5zdGFsbGVkLgorCitXZWQgSnVsICAzIDEyOjUyOjUzIDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhLmMgKGZtcHlfb3BlcmFuZHMpOiBEZWZpbmUuCisJKGNvbWJpbmFibGVfZm1weSk6IE5ldyBmdW5jdGlvbi4KKwkoY29tYmluYWJsZV9mYWRkLCBjb21iaW5hYmxlX2ZzdWIpOiBMaWtld2lzZS4KKwkqIHBhLm1kIChwYXJhbGxlbF9hZGRiLCBwYXJhbGxlbF9tb3ZiKTogTmV3IHBhdHRlcm5zLgorCShmbXB5YWRkLCBmbXB5c3ViKTogTmV3IHBhdHRlcm5zLgorCisJKiBwYS5jIChmbXB5YWRkb3BlcmFuZHMpOiBUaWdodGVuIGNoZWNrcy4gIEFsbG93IFNGbW9kZS4KKwkoZm1weXN1Ym9wZXJhbmRzKTogU2ltaWxhcmx5LgorCitUdWUgSnVsICAyIDE4OjU3OjE1IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhLmMgKGlyZWdfb3JfaW50NV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfcGFyYWxsZWxfbW92Yiwgb3V0cHV0X3BhcmFsbGVsX2FkZGIpOiBMaWtld2lzZS4KKwkoY29tYmluYWJsZV9jb3B5LCBjb21iaW5hYmxlX2FkZCwgZm9sbG93aW5nX2NhbGwpOiBMaWtld2lzZS4KKwkocGFfYWRqdXN0X2luc25fbGVuZ3RoKTogSGFuZGxlIHBhcmFsbGVsIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMuCisJKG91dHB1dF9tb3ZiKTogSGFuZGxlIGNhc2Ugd2VyZSBkZXN0aW5hdGlvbiBpcyAlc2FyLgorCSogcGEuaDogRGVjbGFyZSBuZXcgZnVuY3Rpb25zLgorCSogcGEubWQgKHBhcmFsbGVsX2JyYW5jaCk6IE5ldyAidHlwZSIgYXR0cmlidXRlLgorCShkZWxheSBzbG90IGRlc2NyaXB0aW9ucyk6IERvbid0IGFsbG93ICJwYXJhbGxlbF9icmFuY2hlcyIgaW4KKwlkZWxheSBzbG90cy4gIEZpbGwgInBhcmFsbGVsX2JyYW5jaGVzIiBsaWtlICJicmFuY2giIGluc25zLgorCShtb3ZiIHBhdHRlcm5zKTogSGFuZGxlICVzYXIgYXMgZGVzdGluYXRpb24gcmVnaXN0ZXIuCisKKwkqIGV4cHIuYyAoY29tcGFyZSk6IElmIGZ1bmN0aW9uIHBvaW50ZXJzIG5lZWQgY2Fub25pY2FsaXphdGlvbgorCWJlZm9yZSBjb21wYXJpc29ucywgY2Fub25pY2FsaXplIHRoZW0uCisJKGRvX3N0b3JlX2ZsYWcpOiBEbyBub3QgdXNlIGFuIHNDQyBpbnNuIGZvciBhIGZ1bmN0aW9uIHBvaW50ZXIKKwljb21wYXJpc29uIGlmIGZ1bmN0aW9uIHBvaW50ZXJzIG5lZWQgY2Fub25pY2FsaXphdGlvbiBiZWZvcmUKKwljb21wYXJpbmcuCisKK1R1ZSBKdWwgIDIgMTc6NTY6MzcgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoe1NUQVJULEVORH1GSUxFX0xJTlVYX1NQRUMpOiBJZiAtbW5ld2xpYiBpcyBub3QKKwl1c2VkLCB1c2UgdGhlIGNydGJlZ2luL2NydGVuZCB0aGF0IDIuNy4yIHVzZWQuCisKK1NhdCBKdW4gMjkgMDc6MTA6MDIgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoSU5JVF9FWFBBTkRFUlMpOiBEZWZpbmUsIGNhbGwgcnM2MDAwX2luaXRfZXhwYW5kZXJzLgorCShSUzYwMDBfVkFSQVJHU19PRkZTRVQpOiBmcG1lbSBhcmVhIG5vIGxvbmdlciBuZXh0IHRvIG91dGdvaW5nCisJYXJndW1lbnQgYXJlYS4KKwkoU1RBUlRJTkdfRlJBTUVfT0ZGU0VUKTogRGl0dG8uCisJKFNUQUNLX0RZTkFNSUNfT0ZGU0VUKTogRGl0dG8uCisJKGZyYW1lX3BvaW50ZXJfbmVlZGVkKTogQWRkIGV4dGVybmFsIGRlY2xhcmF0aW9uLgorCShyczYwMDBfe3NhdmUscmVzdG9yZX1fbWFjaGluZV9zdGF0dXMpOiBEaXR0by4KKwkocnM2MDAwX2luaXRfZXhwYW5kZXJzKTogRGl0dG8uCisKKwkqIHJzNjAwMC5jIChyczYwMDBfe3NhdmUscmVzdG9yZX1fbWFjaGluZV9zdGF0dXMpOiBOZXcgZnVuY3Rpb25zCisJdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgZ2xvYmFscyBuZWVkZWQgb24gYSBwZXIgZnVuY3Rpb24gYmFzaXMuCisJKHJzNjAwMF9pbml0X2V4cGFuZGVycyk6IEluaXRpYWxpemUgZ2xvYmFscyBuZWVkZWQgb24gYSBwZXIKKwlmdW5jdGlvbiBiYXNpcywgYW5kIHNldCB1cCBzbyB0aGUgYWJvdmUgc2F2ZS9yZXN0b3JlIGZ1bmN0aW9ucyBhcmUKKwljYWxsZWQgd2hlbiBwcm9jZXNzaW5nIG5lc3RlZCBmdW5jdGlvbnMuCisJKG91dHB1dF9lcGlsb2cpOiBEb24ndCBpbml0aWFsaXplIHBlciBmdW5jdGlvbiBnbG9iYWxzIGhlcmUuCisJKHJzNjAwMF9zdGFja19pbmZvKTogQ2hhbmdlIHdoZXJlIHRoZSBmcG1lbSBzYXZlIGFyZWEgaXMgdG8gYmVsb3cKKwl0aGUgbG9jYWwgdmFyaWFibGVzLCBhbmQgbm90IGp1c3QgYmVsb3cgdGhlIG91dGdvaW5nIGFyZ3VtZW50CisJYXJlYS4KKworCSogcnM2MDAwLm1kIChmbG9hdHNpZGYyKiwgZml4X3RydW5jZGZzaTIqKTogUmV3cml0ZSBjb252ZXJzaW9uCisJcm91dGluZXMgdG8gdHJhY2sgbmV3IGxvY2F0aW9uIG9mIHRoZSBmcG1lbSBzYXZlIGFyZWEuICBBbGxvY2F0ZSBhCisJbmV3IGJhc2UgcmVnaXN0ZXIgdGVtcCBmb3IgdGhlIHJvdXRpbmVzIGluIGNhc2UgdGhlIHN0YWNrIGZyYW1lIGlzCisJbW9yZSB0aGFuIDMyayBpbiBzaXplLgorCitTYXQgSnVuIDI5IDA1OjQ0OjM3IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cGxvdy5jIChjb252ZXJ0X21lbW9yeV9hZGRyZXNzLCBjYXNlIFBMVVMpOiBGaXggZXJyb3IgaW4KKwlsYXN0IGNoYW5nZS4KKworRnJpIEp1biAyOCAyMzozMDo0OCAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IFByb3Blcmx5IG1hcmsgc3BpbGwgcmVnaXN0ZXJzCisJYXMgaW4gdXNlIGZvciBpbmhlcml0ZWQgcmVsb2Fkcy4KKworRnJpIEp1biAyOCAxODozNzoyMCAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgPG1vc2hpZXJAd29ybGQuc3RkLmNvbT4KKworCSogb2JqYy9zYXJyYXkuYyAoaWZkZWYgX19hbHBoYV9fKTogRG9uJ3QgZGVjbGFyZSBgZnJlZScuCisJKiBvYmpjL3Roci1kZWNvc2YxLmMgKG9iamNfdGhyZWFkX2lkKTogVXNlIHB0aHJlYWRfZ2V0dW5pcXVlX25wCisJdG8gb2J0YWluIGEgdGhyZWFkIElEIHZhbHVlLgorCShvYmpjX211dGV4X2FsbG9jYXRlKTogQ2FzdCBtdXRleC0+b3duZXIgdG8gX29iamNfdGhyZWFkX3QuCisJKG9iamNfbXV0ZXhfZGVhbGxvY2F0ZSk6IExpa2V3aXNlLgorCShvYmpjX211dGV4X3VubG9jayk6IExpa2V3aXNlLgorCShvYmpjX211dGV4X3RyeWxvY2spOiAgRGVjbGFyZSB0aHJlYWRfaWQgYXMgX29iamNfdGhyZWFkX3QuCisJKG9iamNfbXV0ZXhfbG9jayk6IExpa2V3aXNlLgorCShvYmpjX211dGV4X3VubG9jayk6IExpa2V3aXNlLgorCisJKiByZWFsLmMgKGFzY3RvZWcpOiBgMC4wZVgnIGlzIHplcm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIGV4cG9uZW50IFguCisKK0ZyaSBKdW4gMjggMTg6MzM6MTMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmF4Lm1kIChyb3RsKTogUmVtb3ZlIGV4dHJhbmVvdXMgYCQnLgorCisJKiBjb21iaW5lLmMgKHByZXZpb3VzX251bV91bmRvcyk6IERlbGV0ZWQgdmFyaWFibGUuCisJKE1BWF9VTkRPKTogRGVsZXRlZCBtYWNyby4KKwkoc3RydWN0IHVuZG8pOiBOZXcgZmllbGQsIG5leHQuCisJKHN0cnVjdCB1bmRvYnVmKTogRGVsZXRlZCBudW1fdW5kb3MgYW5kIHVuZG8uCisJTmV3IGZpZWxkcyB1bmRvcywgZnJlZXMsIGFuZCBwcmV2aW91c191bmRvcy4KKwkoU1VCU1QsIFNVQlNUX0lOVCk6IFJld29yayB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIGNoYWluIHVuZG8gZW50cmllcy4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBJbml0aWFsaXplIHVuZG9idWYue3VuZG9zLHByZXZpb3VzX3VuZG9zfSwKKwlub3QgdW5kb2J1Zi5udW1fdW5kbyBhbmQgcHJldmlvdXNfbnVtX3VuZG9zLgorCSh0cnlfY29tYmluZSk6IExpa2V3aXNlLgorCSh1bmRvX2FsbCwgZ2VuX3J0eF9jb21iaW5lKTogUmV3b3JrIHRvIHVzZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLgorCitGcmkgSnVuIDI4IDE2OjQ4OjI1IDE5OTYgIFNjb3R0IENocmlzdGxleSA8c2NvdHRjQG5ldC1jb21tdW5pdHkuY29tPgorCisJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2Jsb2NrX2ZvcndhcmQpOiBOZXcgZnVuY3Rpb24uCisJKGdldF9pbXAsIG9iamNfbXNnX2xvb2t1cCk6IFVzZSBkaWZmZXJlbnQgZm9yd2FyZGluZyBmdW5jdGlvbgorCXdoZW4gdGhlIHJldHVybmluZyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlLgorCitGcmkgSnVuIDI4IDE2OjI1OjI1IDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBjb25maWd1cmU6IEFsbG93IG11bHRpcGxlIG1ha2VmaWxlIGZyYWdzLgorCShpWzM0NTZdODYtKi1saW51eCpvbGRsZCopOiBBZGQgaTM4Ni90LWNydHN0dWZmIGFzIHRhcmdldCBmcmFnLgorCShpWzM0NTZdODYtKi1saW51eCphb3V0KiwgaVszNDU2XTg2LSotbGludXgqKTogTGlrZXdpc2UuCisJKG02OGstKi1saW51eCphb3V0Kik6IEFkZCB0LWxpbnV4LWFvdXQgYXMgdGFyZ2V0IGZyYWcuCisJKG02OGstKi1saW51eCopOiBBZGQgdC1saW51eCBhcyB0YXJnZXQgZnJhZy4KKwkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSk6IHhtYWtlX2ZpbGUgYW5kIHRtYWtlX2ZpbGUgbm93IGFscmVhZHkKKwljb250YWluIHRoZSAkKHNyY2RpcikvY29uZmlnIHByZWZpeC4KKworCSogY29uZmlnL3QtbGludXggKEJPT1RfQ0ZMQUdTKTogUmVtb3ZlZCwgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKwkoQ1JUU1RVRkZfVF9DRkxBR1MpOiBEb24ndCBkZWZpbmUuCisJKENSVFNUVUZGX1RfQ0ZMQUdTX1MpOiBEZWZpbmUgdGhpcyBpbnN0ZWFkLgorCSogY29uZmlnL3QtbGludXgtYW91dCAoQk9PVF9DRkxBR1MpOiBSZW1vdmVkLgorCSogbTY4ay90LWxpbnV4OiBSZW1vdmUgdmFyaWFibGVzIG5vdyBpbiB0LWxpbnV4LgorCitGcmkgSnVuIDI4IDE1OjA2OjA1IDE5OTYgIEpvaG4gRi4gQ2FyciAgPGpmY0BtaXQuZWR1PgorCisJKiBhbHBoYS5jIChhbHBoYV9lbWl0X2NvbmRpdGlvbmFsX21vdmUpOiBFbWl0IGNvcnJlY3QgY29kZSB3aGVuCisJaW5jb21pbmcgY29tcGFyaXNvbiBjb2RlIGlzIE5FLgorCitGcmkgSnVuIDI4IDE0OjM1OjQ1IDE5OTYgIEouVC4gQ29ua2xpbiAgPGp0Y0BoaXBwby5jeWdudXMuY29tPgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZWdpc3RlciBfX2J1aWx0aW5fbWVtc2V0IAorCWFuZCBtZW1zZXQgYXMgYnVpbHRpbiBmdW5jdGlvbnMuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUSU5fTUVNU0VUKTogT3BlbiBjb2RlIG1lbXNldAorCXdoZXJlIHZhbCA9PSAwLgorCitGcmkgSnVuIDI4IDE0OjEwOjAzIDE5OTYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisJKiBhbHBoYS9saW51eC5oIChGVU5DVElPTl9QUk9GSUxFUik6IF9tY291bnQgaGFzIG5vbi1zdGFuZGFyZCBsaW5rYWdlLgorCSogYWxwaGEvZWxmLmggKExJTktfU1BFQyk6IEJyaW5nIGVtdWxhdGlvbiBuYW1lIGludG8gc3luYworCXdpdGggQ3lnbnVzIHNuYXBzaG90LgorCisJKiBhbHBoYS5oICh7TUFTSyxUQVJHRVR9X0JVSUxEX0NPTlNUQU5UUyk6IE5ldyBtYWNyb3MuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IE5ldyB0YXJnZXQgb3B0aW9uIGJ1aWxkLWNvbnN0YW50cy4KKwkqIGFscGhhLmMgKGFscGhhX2VtaXRfc2V0X2xvbmdfY29uc3QpOiBOZXcgZnVuY3Rpb24uCisJKiBhbHBoYS5tZCAobW92ZGkpOiBDYWxsIGl0LgorCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0X2hpZ2hwYXJ0KTogVXNlIG9wMSBub3Qgd2lkZV9vcDEgaW4KKwlleHBhbnNpb24gb2YgbXVsX2hpZ2hwYXJ0LgorCQorCSogYWxwaGEuYyAob3V0cHV0X3twcm8sZXBpfWxvZyk6IEZsYWdfaW5oaWJpdF9zaXplX2RpcmVjdGl2ZQorCXNob3VsZCBzdXByZXNzIC5lbnQsIC5lbmQsIGFuZCBhY2NvbXBhbnlpbmcgZGlyZWN0aXZlcy4KKwkoYWxwaGFfb3V0cHV0X2xpbmVubyk6IEZpeCBwb2xhcml0eSBvbiBHQVMgdGVzdC4KKwkqIGFscGhhLmggKE5PX0RCWF9GVU5DVElPTl9FTkQpOiBOZXcgbWFjcm8uCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2Z1bmN0aW9uKTogUmVzcGVjdCBOT19EQlhfRlVOQ1RJT05fRU5ELgorCSogYWxwaGEvZWxmLmg6IE5ldyBmaWxlLgorCSogYWxwaGEvbGludXguaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogTmV3IGRlZmluaXRpb24uCisJKiBhbHBoYS94bS1saW51eC5oIChIQVZFX1NUUkVSUk9SKTogRGVmaW5lLgorCSogY29uZmlndXJlIChhbHBoYSotbGludXgqZWNvZmYqKTogTmV3IHRhcmdldCwgd2FzIGFscGhhLSotbGludXgqLgorCShhbHBoYS0qLWxpbnV4Kik6IFVzZSBlbGYuaC4KKwkqIGNydHN0dWZmLmMgKGluaXRfZHVtbXkpOiBPbmx5IGkzODYtbGludXggKGF0IG1vc3QpCisJbmVlZHMgX19fYnJrX2FkZHIgaGFjay4KKwkKK1RodSBKdW4gMjcgMjA6MjM6MzAgMTk5NiAgSm9uIEJ1bGxlciAgKGpvbmJAbWV0cm9uZXQuY29tKQorCisJKiBuczMyay5jIChzcGxpdF9kaSk6IE5ldzsgZnJvbSBpMzg2LmMuCisJKiBuczMyay5tZCAoYWRkZGkzLCBzdWJkaTMsIG5lZ2RpMyk6IE5ldyBwYXR0ZXJucy4KKworVGh1IEp1biAyNyAxOTo0Mjo1MCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgTkUpOiBGaXggdHlwbyBhbmQgbG9naWNhbCBlcnJvci4KKwkoc2ltcGxpZnlfY29tcGFyaXNvbik6IERvbid0IHN3YXAgYXJncyBpZiBvcDEgaXMgQ09OU1RfSU5ULgorCitUaHUgSnVuIDI3IDE4OjQ5OjM1IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogQ2hlY2sgVFJVTFlfTk9PUF9UUlVOQ0FUSU9OIGJlZm9yZQorCW1ha2luZyBhIFNVQlJFRyBvZiBhIFJFRy4KKworVGh1IEp1biAyNyAxMTowMzo1OSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIG1pcHMvbWlwcy5oIChDQzFfU1BFQyk6IFB1dCBzcGFjZXMgYmV0d2VlbiB0aGUgLW1pcHMqIGNhc2VzLgorCSogbWlwcy9vc2Zyb3NlLmggKENDMV9TUEVDKTogTGlrZXdpc2UuCisKKwkqIHNoL3NoLmMgKG91dHB1dF9icmFuY2gpOiBEb24ndCBjYWxsIEFESlVTVF9JTlNOX0xFTkdUSCBpZiB0aGUKKwlpbnNuIGlzIGluc2lkZSBhIHNlcXVlbmNlLgorCitXZWQgSnVuIDI2IDE5OjA5OjQzIDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhL3BhLmggKENNUF9QU0kpOiBEZWxldGUuCisJKEZVTkNUSU9OX1BPSU5URVJfQ09NUEFSSVNPTl9NT0RFKTogTGlrZXdpc2UuCisJKiBwYS9wYS5tZCAoY21wcHNpKTsgRGVsZXRlIGV4cGFuZGVyLgorCShjYW5vbmljYWxpemVfZnVuY3B0cl9mb3JfY29tcGFyZSk6IFJlbmFtZWQgZnJvbSBwbGFiZWxfZGVyZWZlcmVuY2UsCisJdHVybmVkIGludG8gYW4gZXhwYW5kZXIgKyBhbm9ueW1vdXMgcGF0dGVybi4KKworVHVlIEp1biAyNSAyMjozNjoxMSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQHNlYmEuY3lnbnVzLmNvbT4KKworCSogZ2NjLmMgKFBFWEVDVVRFX1ZFUkJPU0UpOiBEZWZpbmUuCisJKGV4ZWN1dGUpOiBQYXNzIFBFWEVDVVRFX1ZFUkJPU0UgdG8gcGV4ZWN1dGUgaWYgLXYuCisKK1R1ZSBKdW4gMjUgMTI6MjM6NTQgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoRklOQUxJWkVfUElDKTogRGVmaW5lIHRvIGNhbGwgcnM2MDAwX2ZpbmFsaXplX3BpYy4KKwkocnM2MDAwX2ZpbmFsaXplX3BpYyk6IEFkZCBkZWNsYXJhdGlvbi4KKwkoc3ZyNF90cmFjZWJhY2spOiBEZWxldGUgdW51c2VkIGRlY2xhcmF0aW9uLgorCisJKiByczYwMDAubWQgKG1vdnNpX2dvdCk6IERvbid0IGVtaXQgZ2VuX2luaXRfdjRfcGljIGluc24uCisJKFYuNCBjYWxsIGluc25zKTogRG8gbm90IHVzZSBAcGx0IGZvciBQSUMgY2FsbHMuCisKKwkqIHJzNjAwMC5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBIYW5kbGUgTEFCRUxfUkVGIGp1c3QgbGlrZQorCVNZTUJPTF9SRUYuCisJKHJzNjAwMF9maW5hbGl6ZV9waWMpOiBEZWZpbmUsIGVtaXQgdGhlIGdlbl9pbml0X3Y0X3BpYyBpbnNuCisJYmVmb3JlIGFsbCBvdGhlciBpbnNucyBpZiBuZWVkZWQgZm9yIFYuNCBQSUMgY2FsbHMuCisKKwkqIGVhYmktY2kuYXNtIChfR0xPQkFMX09GRlNFVF9UQUJMRV8pOiBEbyBub3QgcHJvdmlkZSBhIGRlZmF1bHQKKwlkZWZpbml0aW9uLCBzaW5jZSBpdCBpbnRlcmZlcmVzIHdpdGggdGhlIGxpbmtlciBnZW5lcmF0ZWQgdmVyc2lvbi4KKworVHVlIEp1biAyNSAwMToxNzo1MCAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWduc3UuY29tPgorCisJKiBoODMwMC9oODMwMC5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IFVwZGF0ZSAibW9uaXRvciIgcHJvbG9ndWVzLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IFNpbWlsYXJseS4KKworCSogcGEvcGEuaCAoUEFSU0VfTEREX09VVFBVVCk6IEhhbmRsZSBkeW5hbWljIGxpYnJhcmllcyB0aGF0IGFyZQorCWxvYWRlZCAic3RhdGljYWxseSIuCisKK01vbiBKdW4gMjQgMTk6NDg6MzYgMTk5NiAgSm9lbCBTaGVycmlsbCAgPGpvZWxAbWVybGluLmdjcy5yZWRzdG9uZS5hcm15Lm1pbD4KKworCSogY29uZmlndXJlICh7aTM4NixpOTYwLG02OGsscG93ZXJwYyxzcGFyY30tcnRlbXMpOiBOZXcgdGFyZ2V0cy4KKwkqIGkzODYvZ28zMi1ydGVtcy5oLCBpMzg2L2kzODYtcnRlbXMuaDogTmV3IGZpbGVzLgorCSogaTk2MC9pOTYwLXJ0ZW1zLmg6IE5ldyBmaWxlLgorCSogbTY4ay9tNjhrLXJ0ZW1zLmg6IE5ldyBmaWxlLgorCSogcnM2MDAwL3Bvd2VycGMtcnRlbXMuaDogTmV3IGZpbGUuCisJKiBzcGFyYy9zcGFyYy1ydGVtcy5oOiBOZXcgZmlsZS4KKworTW9uIEp1biAyNCAyMzowOToyMiAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jOiAoY3JlYXRlX2RlZmluaXRpb24pOiBEaWFnbm9zZSBgI2RlZmluZSAjJyBvbmx5IG9uY2UuCisKK01vbiBKdW4gMjQgMTE6NDI6NTggMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBpMzg2L2N5Z3dpbjMyLmgsIHJzNjAwMC9jeWd3aW4zMi5oIChDUFBfUFJFREVGSU5FUyk6IEZvciBjb25zaXN0ZW5jeSwKKwljaGFuZ2UgdG8gZGVmaW5lIFdJTjMyLCBXSU5OVCwgYW5kIENZR1dJTjMyLgorCitNb24gSnVuIDI0IDEwOjQ2OjUwIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChmbG9hdHNpZGYyKik6IE1vdmUgdGhlIHhvciBvZiB0aGUgYXJndW1lbnQgaW50byB0aGUKKwlkZWZpbmVfaW5zbiwgc2luY2UgaXQgY29uZnVzZXMgaW5saW5lIGZ1bmN0aW9uIGV4cGFuZHMuCisKK0ZyaSBKdW4gMjEgMjA6NDA6MTcgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtaXBzLm1kIChjYWxsX2ludGVybmFsMSwgY2FsbF92YWx1ZV9pbnRlcm5hbDEpOiBEZWxldGUgb2Jzb2xldGUgY29kZS4KKwkoY2FsbF9pbnRlcm5hbDIsIGNhbGxfdmFsdWVfaW50ZXJuYWwyLCBjYWxsX3ZhbHVlX211bHRpcGxlX2ludGVybmFsMik6CisJRGVsZXRlIG9ic29sZXRlIGNvZGUuICBFeHBsaWNpdGx5IGxvYWQgU1lNQk9MX1JFRiBpbnRvIHJlZ2lzdGVyLgorCShjYWxsX3ZhbHVlKTogQ2hhbmdlIFBtb2RlIHRvIFNJbW9kZSBpbiBnZW5fY2FsbF92YWx1ZV9pbnRlcm5hbDAgY2FsbC4KKworVGh1IEp1biAyMCAxMjoyMDozMyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoKi1haXgqKTogSWYgYnVpbGRpbmcgYSBjcm9zcyBjb21waWxlciwgdXNlIHQteG5ld2FzCisJaW5zdGVhZCBvZiB0LW5ld2FzLgorCisJKiByczYwMDAuYyAobnVtX2luc25zX2NvbnN0YW50X3dpZGUpOiBGaXggdHlwbyBpZiBIT1NUX1dJREVfSU5UCisJaGFzIG1vcmUgdGhhbiAzMiBiaXRzLgorCitXZWQgSnVuIDE5IDE3OjUwOjMzIDE5OTYgIFJpY2hhcmQgSGVuZGVyc29uICA8cmljaGFyZEBhdGhlaXN0LnRhbXUuZWR1PgorCisJKiBjb21iaW5lLmMgKG1vdmVfZGVhdGhzKTogTmV3IHBhcmFtZXRlciBtYXliZV9raWxsX2luc24uCisJRG9uJ3QgbW92ZSBub3RlIGlmIHJlZyBraWxsZWQgYnkgbWF5YmVfa2lsbF9pbnNuLgorCSh0cnlfY29tYmluZSk6IFBhc3MgbmV3IGFyZyB0byBtb3ZlX2RlYXRocy4KKwkKK1dlZCBKdW4gMTkgMTA6NDQ6NDcgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiB0b3BsZXYuYyAoZmxhZ19rZWVwX3N0YXRpY19jb25zdHMpOiBEZWZpbmUuCisJKGZfb3B0aW9ucyk6IEFkZCAia2VlcC1zdGF0aWMtY29uc3RzIiBlbnRyeS4KKwkoY29tcGlsZV9maWxlKTogQ2hlY2sgaXQgaW4gYWRkaXRpb24gdG8gIW9wdGltaXplIGZvciBlbWl0dGluZworCXN0YXRpYyBjb25zdCB2YXJpYWJsZXMuCisKK1R1ZSBKdW4gMTggMjM6Mzc6MjAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBpMzg2L2N5Z3dpbjMyLmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBMb2NhbCBzeW1ib2xzIGJlZ2luIHdpdGggTC4KKworVHVlIEp1biAxOCAxMjowMDoxMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChhc21fb3V0cHV0X2FsaWduZWRfYnNzKTogRG9uJ3QgZW1pdCBhIHNraXAgb2Ygc2l6ZSAwLgorCitUdWUgSnVuIDE4IDA2OjI0OjI4IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWRkIG1pc3NpbmcgY2FsbCB0bworCWZvcmNlX29wZXJhbmQgd2hlbiBnZXR0aW5nIHN0cnVjdHVyZV92YWx1ZV9hZGRyIGludG8gcmVnLgorCisJKiBhbHBoYS5jIChvdmVycmlkZV9vcHRpb25zKTogQWxsb3cgRVY0LzUgb3IgMjEwNjQvMjExNjQgZm9yIGNwdS4KKwlDbGVhbiB1cCBoYW5kbGluZyBvZiBmbG9hdGluZy1wb2ludCBvcHRpb25zLgorCSogYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogSGF2ZSBhbGwgLW1pZWVlIG9wdGlvbnMgdHVybgorCW9uIE1BU0tfSUVFRV9DT05GT1JNQU5ULgorCShUQVJHRVRfREVGQVVMVCk6IFVzZSBzeW1ib2xpYyB2YWx1ZS4KKwkqIGFscGhhLm1kOiBXaGVuIG5vdCBpbnZvbHZpbmcgbmFtZWQgcGF0dGVybiwgdXBkYXRlIGNvbmRpdGlvbgorCXRvIGluY2x1ZGUgYWxwaGFfdHAgIT0gQUxQSEFfVFBfSU5TTi4KKwlEb24ndCBkbyBmbG9hdF9leHRlbmQgYXMgcGFydCBvZiBvdGhlciBwYXR0ZXJuIHdoZW4gQUxQSEFfVFBfSU5TTi4KKwkoZXh0ZW5kc2ZzZDIpOiBTcGxpdCBpbnRvIHR3byBwYXR0ZXJucywgZGVwZW5kaW5nIG9uIAorCXZhbHVlIG9mIGFscGhhX3RwLgorCisJKiBtaXBzL2lyaXM2LmggKEFTTV9TUEVDKTogVHJlYXQgLW8zMiBhcyAtMzIgYW5kIC1uNjQgc2FtZSBhcyAtNjQuCisJKiBtaXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBMaWtld2lzZS4JCisKKwkqIGdlbmF0dHJ0YWIuYyAoZmF0YWwpOiBEZWNsYXJlIEExIGFuZCBBMiBhcyBjaGFyICouCisKKwkqIGZ1bmN0aW9uLmMgKGZpbmRfdGVtcF9zbG90X2Zyb21fYWRkcmVzcyk6IENoZWNrIGZvciBvdmVybGFwCisJZnJvbSBCQVNFX09GRlNFVCBpZiBYIGlzIFBMVVMgb2YgdmlydHVhbF9zdGFja192YXJzX3J0eCBhbmQgY29uc3QuCisKKwkqIGZsb3cuYyAoZmxvd19hbmFseXNpcyk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX3tTRVQsTE9OR31KTVApOiBQcm9wZXJseQorCWhhbmRsZSBjYXNlIHdoZW4gcHRyX21vZGUgIT0gUG1vZGUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCB1c2Ugc3BsaXQgaWYgZGVzdCBvZiBuZXcgSTIKKwlpcyB1c2VkIGJldHdlZW4gSTIgYW5kIEkzLgorCisJKiBjLXR5cGVjay5jIChwb2ludGVyX2ludF9zdW0pOiBDb252ZXJ0IGludGVnZXIgdG8gYm90aCBzaWduZWRuZXNzCisJYW5kIHByZWNpc2lvbiBvZiBzaXpldHlwZS4KKwkqIGV4cGxvdy5jIChjb252ZXJ0X21lbW9yeV9hZGRyZXNzLCBjYXNlIFBMVVMsIE1VTFQpOiBEb24ndCBjb21tdXRlCisJb3BlcmF0aW9uIHdpdGggZXh0ZW5zaW9uIGlmIG5vdCBhZGRpbmcgc21hbGwgaW50ZWdlci4KKworCSogTWFrZWZpbGUuaW4gKEJPT1RfTEFOR1VBR0VTKTogTmV3IHZhcmlhYmxlLgorCShib290c3RyYXApOiBVc2UgaXQgdG8gc2VsZWN0IGxhbmd1YWdlcyBmb3Igc3RhZ2UxLgorCSogY29uZmlndXJlIChleHRyYV9ob3N0X29ianMpOiBOZXcgdmFyaWFibGUuCisJU2VwYXJhdGUgZmlsZXMgbmVlZGVkIGZvciB0YXJnZXQgYW5kIGhvc3QgYW5kIGNvbmNhdGVuYXRlIGxpc3QuCisJKGV4dHJhX2djY19vYmpzKTogVXNlIHNldHRpbmcgZm9yIGhvc3QsIG5vdCB0YXJnZXQuCisJKG9iamNfdGhyZWFkX2ZpbGUpOiBTdGFydCB3aXRoIGl0IGFzIG51bGwsIHRoZW4gZG9uJ3QgaW5jbHVkZSAidGhyLSIuCisJUHJpbnQgbmFtZSBvZiBmaWxlIGFmdGVyIG90aGVycyBhbmQgaW4gc2FtZSBmb3JtYXQuCisJKGFscGhhLSotd2lubnQqLCBpWzM0NTZdODYtKi13aW5udCk6IG9sZG5hbWVzLm8gaXMgaW4gZXh0cmFfaG9zdF9vYmpzLgorCShhbGxfYm9vdF9sYW5ndWFnZXMpOiBOZXcgdmFyaWFibGUuCisJU2V0IGZyb20gYm9vdF9sYW5ndWFnZSB2YXJpYWJsZSBpbiBjb25maWctbGFuZy5pbi4KKwlEZWZpbmVzIHZhbHVlIG9mIEJPT1RfTEFOR1VBR0VTIGluIE1ha2VmaWxlLgorCShNYWtlZmlsZSk6IFNldCB0YXJnZXQgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIG9mIHRhcmdldC4KKworTW9uIEp1biAxNyAyMjozNzowNyAxOTk2ICBNaWtlIE1laXNzbmVyICA8bWVpc3NuZXJAcnRsLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC93aW4tbnQuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IFB1dCBmdW5jdGlvbgorCWRlc2NyaXB0b3IgaW4gLnJlbGRhdGEsIG5vdCAudGV4dC4KKworTW9uIEp1biAxNyAxNjowNTozNCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3N0ZGRlZi5oICh3aW50X3QpOiBEb24ndCB3cmFwIHdpdGggI2lmbmRlZiBfX2NwbHVzcGx1cy4KKworTW9uIEp1biAxNyAxNTowMzoyMCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMuYyAobWlwc19zcGxpdF9hZGRyZXNzZXMpOiBOZXcgdmFyaWFibGUuCisJKHNpbXBsZV9tZW1vcnlfb3BlcmFuZCk6IEFkZCBjb21tZW50IGFib3V0IG1vZGUgY2hlY2suICBBZGQgY2hlY2sKKwlmb3IgTE9fU1VNLgorCShjYWxsX2luc25fb3BlcmFuZCk6IE9QIGlzIG5vdyBhbiBhZGRyZXNzZXMgaW5zdGVhZCBvZiBhIE1FTS4KKwkobW92ZV9vcGVyYW5kLCBtaXBzX2NoZWNrX3NwbGl0KTogTmV3IGZ1bmN0aW9ucy4KKwkobWlwc19jb3VudF9tZW1vcnlfcmVmcyk6IEFkZCBjaGVjayBmb3IgTE9fU1VNLgorCShtaXBzX21vdmVfMXdvcmQpOiBBZGQgSElHSCBzdXBwb3J0LgorCShtaXBzX2FkZHJlc3NfY29zdCk6IERlbGV0ZSBjaGVjayBmb3IgSElHSC4KKwkob3V0cHV0X2Jsb2NrX21vdmUpOiBIYW5kbGUgTE9fU1VNIGFkZHJlc3Nlcy4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFNldCBtaXBzX3NwbGl0X2FkZHJlc3Nlcy4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogQWRkIExPX1NVTSBzdXBwb3J0LgorCSogbWlwcy5oIChtaXBzX3NwbGl0X2FkZHJlc3NlcywgbWlwc19jaGVja19zcGxpdCwgbW92ZV9vcGVyYW5kKToKKwlOZXcgZGVjbGFyYXRpb25zCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFJlamVjdCBjb25zdGFudCBhZGRyZXNzZXMgd2hlbgorCW1pcHNfc3BsaXRfYWRkcmVzc2VzIGlzIFRSVUUuICBBZGQgTE9fU1VNIHN1cHBvcnQuCisJKExFR0lUSU1JWkVfQUREUkVTUyk6IEFkZCBMT19TVU0gc3VwcG9ydC4KKwkoUFJFRElDQVRFX0NPREVTKTogTW9kaWZ5IGNhbGxfaW5zbl9vcGVyYW5kIHN1cHBvcnQuICBBZGQKKwltb3ZlX29wZXJhbmQuCisJKiBtaXBzLm1kIChtZW1vcnkpOiBDaGFuZ2UgcjQxMDAvcjQzMDAgc3VwcG9ydC4KKwkoaW11bGRpdik6IEFkZCByNDMwMCBzdXBwb3J0LgorCShoaWdoLCBsb3cpOiBOZXcgcGF0dGVybnMuCisJKG1vdnNpLCBtb3ZkaSk6IEFkZCBMT19TVU0gc3VwcG9ydC4KKwkobW92c2lfaW50ZXJuYWwxLCBtb3ZzaV9pbnRlcm5hbDIpOiBVc2UgbW92ZV9vcGVyYW5kIGluc3RlYWQgb2YKKwlnZW5lcmFsX29wZXJhbmQuCisJKG1vdnN0cnNpX2ludGVybmFsLCBtb3ZzdHJzaV9pbnRlcm5hbDIpOiBEZWxldGUgUiBjb25zdHJhaW50LgorCShjYWxsLCBjYWxsX3ZhbHVlKTogUGFzcyBhZGRyZXNzIGluc3RlYWQgb2YgTUVNIHRvIGNhbGxfaW5zbl9vcGVyYW5kLgorCUNhbGwgZ2VuX2NhbGxfe3ZhbHVlX31pbnRlcm5hbDAgaW5zdGVhZCBvZiBpbnRlcm5hbDEuCisJKGNhbGxfaW50ZXJuYWwwLCBjYWxsX3ZhbHVlX2ludGVybmFsMCwgY2FsbF9tdWx0aXBsZV9pbnRlcm5hbDApOgorCU5ldyBwYXR0ZXJucy4KKwkoY2FsbF9pbnRlcm5hbDEsIGNhbGxfaW50ZXJuYWwyLCBjYWxsX3ZhbHVlX2ludGVybmFsMSwKKwljYWxsX3ZhbHVlX2ludGVybmFsMiwgY2FsbF92YWx1ZV9tdWx0aXBsZV9pbnRlcm5hbDIpOiBBZGQgZXhwbGljaXQKKwlNRU0gYmVmb3JlIHRhcmdldCBhZGRyZXNzLgorCitTdW4gSnVuIDE2IDIzOjA1OjE2IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoaHBwYSotaHAtaHB1eDEwKik6IFVzZSBuZXcgcGEtaHB1eDEwIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwkoaHBwYSotaHAtaHB1eCopOiBVc2UgaHB1eDkgY29uZmlndXJhdGlvbiBmaWxlcyBieSBkZWZhdWx0LgorCSogcGEvcGEtaHB1eDEwLmg6IE5ldyBmaWxlLgorCSogcGEvcGEtZ2hwdXg5Lmg6IERlbGV0ZWQuICBObyBsb25nZXIgdXNlZC4KKworU2F0IEp1biAxNSAwNDozNTo1MSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgorCisJKiBpMzg2L2dudS5oIChMSU5LX1NQRUMpOiBSZW1vdmUgLXJwYXRoIC9saWIvIG9wdGlvbi4KKwlJZ25vcmUgLWliY3Mgb3B0aW9uLgorCitUaHUgSnVuIDEzIDE0OjQ5OjQxIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZ2VuLXByb3Rvcy5jIChtYWluKTogQ2hhbmdlIGFyZ3ZbaV0gdG8gYXJndlswXVtpXS4KKworVGh1IEp1biAxMyAxMDo0NjoyNCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGdjYy5jIChwZmF0YWxfcGV4ZWN1dGUpOiBEZWxldGUgY29kZSB0byBjaGVjayBlcnJubyA8IHN5c19uZXJyLgorCitXZWQgSnVuIDEyIDIxOjQ3OjEwIDE5OTYgIEVsaW90IERyZXNzZWxoYXVzICA8ZHJlc3NlbGhAcmZ0MzAubmFzLm5hc2EuZ292PgorCisJKiBhbHBoYS5jIChhbHBoYV9jcHUsIGFscGhhX2NwdV9zdHJpbmcpOiBOZXcgdmFyaWFibGVzLgorCShvdmVycmlkZV9vcHRpb25zKTogUHJvY2VzcyAtbWNwdT0gdmFsdWUuCisJKGFscGhhX2FkanVzdF9jb3N0KTogSGFuZGxlIGFkanVzdG1lbnRzIGZvciBFVjUuCisJKiBhbHBoYS5oIChlbnVtIHByb2Nlc3Nvcl90eXBlKTogTmV3IGVudW0uCisJKGFscGhhX2NwdSwgYWxwaGFfY3B1X3N0cmluZyk6IE5ldyBkZWNsYXJhdGlvbnMuCisJKHRhcmdldF9vcHRpb25zKTogQWRkICJjcHU9Ii4KKwkoUlRYX0NPU1RTKTogQWRqdXN0IHZhbHVlcyBmb3IgRVY1LgorCSogYWxwaGEubWQ6IEFkZCBzY2hlZHVsaW5nIHJ1bGVzIGZvciBFVjUuCisKK1R1ZSBKdW4gMTEgMTc6NTE6MDMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBDaGFuZ2UgdGV4dCBvZiBtZXNzYWdlIGFib3V0IHVzZQorCW9mIGAwJyB3aXRoIHByZWNpc2lvbi4KKworVHVlIEp1biAxMSAxNToxNDoxMCAxOTk2ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworCSogaTM4Ni5oIChUQVJHRVRfU0NIRURVTEVfUFJPTE9HVUUpOiBOZXcuIEFsbG93cyBwcm9sb2d1ZSB0bworCWJlIGVtaXR0ZWQgYXMgYXNtIG9yIHJ0bC4KKworCSogaTM4Ni5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IEVtaXQgcHJvbG9ndWUgYXMgYXNtLgorCShvdmVycmlkZV9vcHRpb25zKTogRG9uJ3QgZW1pdCBydGwgZm9yIHByb2xvZ3VlIGlmIC1mcGljLgorCitUdWUgSnVuIDExIDE0OjQxOjAxIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL2VhYmkuYXNtIChfX2VhYmkpOiBGaXggbm9ybWFsIGNvZGUgc28gdGhhdCBpdCBwcm9wZXJseQorCWxvYWRzIHVwIHIyL3IxMyBpZiBuZWVkZWQgYWdhaW4uCisKKwkqIHJzNjAwMC9zeXN2NC5oIChDUFBfRU5ESUFOX1NQRUMpOiBDYWxsIGNwcF9lbmRpYW5fZGVmYXVsdCwgbm90CisJY3BwX2VuZGlhbl9kZWZhdWx0X3NwZWMuCisKK01vbiBKdW4gMTAgMTU6MTA6NTYgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBJZ25vcmUgaW5zbnMgdGhhdCByZWFkIG9yCisJd3JpdGUgcmVnaXN0ZXJzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBzcGlsbGVkLgorCisJKiBwYS5oIChjbXBfdHlwZSk6IEFkZCBDTVBfUFNJLgorCShGVU5DVElPTl9QT0lOVEVSX0NPTVBBUklTT05fTU9ERSk6IERlZmluZS4KKwkqIHBhLm1kIChjbXBwc2kpOiBOZXcgZXhwYW5kZXIuCisJKHBsYWJlbF9kZXJlZmVyZW5jZSk6IE5ldyBwYXR0ZXJuCisKK01vbiBKdW4gMTAgMTQ6NTY6MTQgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc29sMi5oIChTS0lQX0FTTV9PUCk6IERlbGV0ZSwgU29sYXJpcyBhY2NlcHRzIC5zcGFjZSwKKwlsaWtlIHJlc3Qgb2YgUG93ZXJQQyBWNCBwb3J0cy4KKworCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IEVtaXQgLmxjb21tIGlmIG5vdAorCXVzaW5nIHRoZSAuc2JzcyBhcmVhLiAgSWYgdXNpbmcgdGhlIC5zYnNzIGFyZWEsIHB1dCBvdXQKKwlhcHByb3ByaWF0ZSAuc2l6ZSBkaXJlY3RpdmUuCisKK01vbiBKdW4gMTAgMTQ6NTM6MzggMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJTW92ZSBmb3JrL2V4ZWMvd2FpdCBoYW5kbGluZyBpbnRvIGZpbGUgb2YgaXRzIG93bi4KKwkqIHBleGVjdXRlLmM6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuaW4gKHBleGVjdXRlLm8pOiBBZGQgcnVsZS4KKwkoeGdjYyk6IExpbmsgaW4gcGV4ZWN1dGUuby4KKwkocHJvdG9pemUsdW5wcm90b2l6ZSk6IExpa2V3aXNlLgorCSogZ2NjLmMgKF9XSU4zMik6IERvbid0IGluY2x1ZGUgcHJvY2Vzcy5oIG9yIGRlY2xhcmUgc3Bhd252eyxwfS4KKwkocGV4ZWN1dGUscHdhaXQpOiBBZGQgcHJvdG90eXBlcy4KKwkoUEVYRUNVVEVfe0ZJUlNULExBU1QsU0VBUkNIfSk6IERlZmluZS4KKwkoZXhlY3YsZXhlY3ZwKTogRGVsZXRlIGRlY2xzLgorCShwZXJyb3JfZXhlYyk6IERlbGV0ZS4KKwkocGZhdGFsX3BleGVjdXRlKTogTmV3IGZ1bmN0aW9uLgorCShwZXhlY3V0ZSBzdXBwb3J0KTogRGVsZXRlLgorCShleGVjdXRlKTogLXBpcGUgbm90IHN1cHBvcnRlZCBpZiBfV0lOMzIgb3IgT1MyLgorCVVwZGF0ZSBjYWxsIHRvIHBleGVjdXRlLiAgRmF0YWwgZXJyb3IgaWYgcGV4ZWN1dGUgZmFpbHMuICBDYWxsIHB3YWl0LgorCSogcHJvdG9pemUuYzogSW5jbHVkZSBnYW5zaWRlY2wuaC4KKwkobXlfZXhlY3ZwKTogRGVsZXRlLgorCShjaG9vc2VfdGVtcF9iYXNlLHBleGVjdXRlLHB3YWl0KTogRGVjbGFyZS4KKwkoUEVYRUNVVEVfe0ZJUlNULExBU1QsU0VBUkNIfSk6IERlZmluZS4KKwkoZXhlY3ZwKTogRGVsZXRlIGRlY2wuCisJKHVzYWdlKTogRml4IHR5cG8uCisJKGdlbl9hdXhfaW5mb19maWxlKTogUmV3cml0ZSB0byB1c2UgcGV4ZWN1dGUvcHdhaXQuCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBBbGxvdyBsZWFkaW5nIHRleHQgaW4gdmVyc2lvbiBzdHJpbmcuCisJRGVsZXRlIHN1cHBvcnQgZm9yIGRlZmF1bHQgbWlub3IgbnVtYmVyID0gMC4KKworTW9uIEp1biAxMCAxMTo0OTo1MyAxOTk2ICBTY290dCBDaHJpc3RsZXkgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KKworCSogb2JqYy9NYWtlZmlsZSAobGlib2JqYy5hKTogRG9uJ3QgZGVsZXRlIHRoZSBsaWJyYXJ5LgorCisJKiBvYmpjL3Roci5oIChvYmpjX3NldF90aHJlYWRfY2FsbGJhY2spOiBOZXcgZnVuY3Rpb24uCisJKG9iamNfdGhyZWFkX2NhbGxiYWNrKTogVHlwZWRlZiBmb3IgdGhlIGhvb2sgZnVuY3Rpb24uCisJKiBvYmpjL3Roci5jIChfX29iamNfdGhyZWFkX2RldGFjaF9mdW5jdGlvbik6IENsZWFyIHRocmVhZCBzdG9yYWdlLgorCUNhbGwgdGhlIHRocmVhZCBob29rIGZ1bmN0aW9uIHdoZW4gZmlyc3QgYmVjb21pbmcgbXVsdGktdGhyZWFkZWQuCisJKG9iamNfc2V0X3RocmVhZF9jYWxsYmFjayk6IE5ldyBmdW5jdGlvbi4KKworCSogb2JqYy9zZWxlY3Rvci5jIChfX3NlbF9yZWdpc3Rlcl90eXBlZF9uYW1lKTogQWRkaXRpb25hbCBwYXJhbWV0ZXIKKwl0aGF0IGluZGljYXRlcyB3aGV0aGVyIG5hbWUgYW5kIHR5cGUgcGFyYW1ldGVycyBhcmUgY29uc3RhbnQgb3Igbm90LgorCSogb2JqYy9ydW50aW1lLmggKF9fc2VsX3JlZ2lzdGVyX3R5cGVkX25hbWUpOiBMaWtld2lzZS4KKwkqIG9iamMvaW5pdC5jIChfX3NlbF9yZWdpc3Rlcl90eXBlZF9uYW1lKTogTGlrZXdpc2UuCisKKwkqIG9iamMvaW5pdC5jIChfX29iamNfaW5pdF9wcm90b2NvbHMpOiBOZWVkIHRvIHVubG9jayBtdXRleC4KKworTW9uIEp1biAxMCAxMTo0NDo0NCAxOTk2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CisKKwkqIHNwYXJjL3Qtc29sMiAoZ21vbi5vKTogRGVwZW5kIG9uIHN0bXAtaW50LWhkcnMuCisJKGNydDEubywgY3J0aS5vLCBjcnRuLm8sIGdjcnQxLm8pOiBEZXBlbmQgb24gJChHQ0NfUEFTU0VTKS4KKworTW9uIEp1biAxMCAxMToyOTo0NiAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmbG93LmMgKGZsb3dfYW5hbHlzaXMsIGZpbmRfYmFzaWNfYmxvY2tzKTogSWdub3JlCisJbm9ubG9jYWxfbGFiZWxfbGlzdCBmb3IgQ0FMTF9JTlNOIHRoYXQgaGFzIGEgUkVHX1JFVFZBTC4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzLCBjYXNlIEFfVF9VTklPTik6IERvbid0IGxvb2sgYXQgZmllbGRzCisJb2YgdW5pb24gaWYgdGhlcmUgYXJlbid0IGFueS4KKworU2F0IEp1biAgOCAyMjoxMzozMyAxOTk2ICBTdGFuIENveCA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBpMzg2LmMgKGl4ODZfZXhwYW5kX3Byb2xvZ3VlKTogS2VlcCBwaWMgcmVnaXN0ZXIgbG9hZCBhaGVhZAorCW9mIHJlZmVyZW5jZSB3aGljaCBtYXkgdXNlIGEgcGljIHJlZ2lzdGVyLgorCitTYXQgSnVuICA4IDIyOjEzOjMzIDE5OTYgIEppbSBXaWxzb24gPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBpMzg2Lm1kIChzdHJsZW5zaV91bnJvbGw0LCBzdHJsZW5zaV91bnJvbGw1KTogVXNlICsgbm90ID0mIGZvcgorCWNvbnN0cmFpbnQgZm9yIGlucHV0L291dHB1dCBvcGVyYW5kIDIuCisKK1NhdCBKdW4gIDggMjI6MTM6MzMgMTk5NiAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogaTM4Ni5oIChDT05TVF9DT1NUUyk6IEV2ZW4gaW50ZWdlciBjb25zdGFudHMgaGF2ZSBhIGNvc3QuCisJKFJUWF9DT1NUUyk6IFRha2UgY29zdHMgb2Ygc3ViZXhwcmVzc2lvbnMgaW50byBhY2NvdW50LgorCUlmIGEgbXVsdGlwbHkgaXMgYWN0dWFsbHkgYSBzaGlmdCwgdXNlIHRoZSBjb3N0IG9mIHRoZSBzaGlmdC4KKwkqIGkzODYvdW5peC5oIChTSElGVF9ET1VCTEVfT01JVFNfQ09VTlQpOiBOZXcgbWFjcm8uCisJKiBpMzg2L3tnYXMsIG5leHQsIHNlcS1nYXN9LmggKFNISUZUX0RPVUJMRV9PTUlUU19DT1VOVCk6IFJlZGVmaW5lCisJYXMgemVyby4KKwkqIGkzODYuYyAocHJpbnRfb3BlcmFuZCk6IG5ldyBsZXR0ZXIgJ3MnLgorCitTYXQgSnVuICA4IDE1OjEzOjMzIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy9taXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBBZGQgdnI0MTAwIGFuZCB2cjQzMDAgc3VwcG9ydC4KKwkqIG1pcHMvbWlwcy5oIChlbnVtIHByb2Nlc3Nvcl90eXBlKTogTGlrZXdpc2UuCisJKE1BU0tfNDMwMF9NVUxfRklYLCBUQVJHRVRfNDMwMF9NVUxfRklYKTogTmV3IG1hY3Jvcy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tZml4NDMwMCBvcHRpb24uCisJKiBtaXBzL21pcHMubWQgKGNwdSwgbWVtb3J5LCBpbXVsZGl2LCBhZGRlciwgbXVsdCwgZGl2aWRlKTogQWRkCisJdnI0MTAwIGFuZCB2cjQzMDAgc3VwcG9ydC4KKwkobXVsZGYzLCBtdWxzZjMpOiBBZGQgdnI0MzAwIHN1cHBvcnQuCisJKG11bGRmM19pbnRlcm5hbCwgbXVsZGZfcjQzMDAsIG11bHNmM19pbnRlcm5hbCwgbXVsc2ZfcjQzMDApOiBOZXcKKwlwYXR0ZXJucy4KKworU2F0IEp1biAgOCAxNDozNToyMyAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogdG9wbGV2LmMgKG1haW4pOiBSZS1lbmFibGUgLWd4Y29mZisuCisKK1NhdCBKdW4gIDggMTQ6MjA6MTQgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQHJ0bC5jeWdudXMuY29tPgorCisJKiBtNjhrL2xiMXNmNjguYXNtIChfX3tlcSxuZSxndCxsdCxnZSxsZX17ZGYsc2Z9Mik6IFJlbW92ZWQKKyAJZXh0cmFuZW91cyBjb21tZW50cywgY29uc3RhbnRzLCBsYWJlbHMsIGV0Yy4KKworCSogbTY4ay9hbHRvczMwNjguaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2UgTUFTS18qIG1hY3JvcworIAlpbnN0ZWFkIG9mIGV4cGxpY2l0IGNvbnN0YW50cyBpbiBkZWZpbml0aW9ucyBvciBjb25kaXRpb25hbHMuCisJKiBtNjhrL3thcG9sbG82OCwgYXV4LCBjY3VyLUdBUywgZHB4MiwgaHAzMjAsIGhwM2JzZH0uaDogTGlrZXdpc2UuCisJKiBtNjhrL3tocDNic2Q0NCwgaXNpLW5mcCwgaXNpLCBsaW51eC1hb3V0LCBsaW51eH0uaCk6IExpa2V3aXNlLgorCSogbTY4ay97bHlueC1uZywgbHlueCwgbTY4ay1ub25lLCBtNjhrLXBzb3MsIG02OGt2NH0uaCk6IExpa2V3aXNlLgorCSogbTY4ay97bW90MzMwMCwgbmV0YnNkLCBuZXdzLCBuZXh0LCBwYmIsIHBsZXh1cywgc3VuMm80fS5oKTogTGlrZXdpc2UuCisJKiBtNjhrL3tzdW4zLCBzdW4zbiwgdG93ZXJ9LmgpOiBMaWtld2lzZS4KKworU2F0IEp1biAgOCAxMzo1NToyMyAxOTk2ICBNYXR0aGlhcyBQZmFsbGVyICAobGVvQG1hcmNvLmRlKQorCisJKiBuczMyay5tZCAoZGVmaW5lX2luc25zIGZvciBmZnNbcWhzXWkyKTogRGVsZXRlZC4KKwkoZGVmaW5lX2V4cGFuZCBmb3IgZmZzc2kyKTogTmV3IHBhdHRlcm4uCisKK1NhdCBKdW4gIDggMTM6NDQ6MTQgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IFNldCBuZWVkX3N0YWJsZV9zcCBpZiBHT0FMIGlzIHRoZQorCXN0YWNrIHBvaW50ZXIuCisKK1NhdCBKdW4gIDggMTM6MzY6MDUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfMSwgY2FzZSBTSUdOX0VYVEVORCk6IEhhbmRsZQorCXBhcmFkb3hpY2FsIFNVQlJFR3MgYXMgZmlyc3Qgb3BlcmFuZC4KKwkoZml4dXBfdmFyX3JlZ3NfMSwgY2FzZSBTRVQpOiBIYW5kbGUgcGFyYWRveGljYWwgU1VCUkVHcyBhcworCWZpcnN0IG9wZXJhbmQgb2YgYSBaRVJPX0VYVFJBQ1QgaW4gU0VUX0RFU1QuCisKKwkqIGMtY29tbW9uLmMgKGVudW0gYXR0cnMpOiBBZGQgQV9GT1JNQVRfQVJHLgorCShpbml0X2F0dHJpYnV0ZSk6IEluaXRpYWxpemUgaXQuCisJKGRlY2xfYXR0cmlidXRlcywgY2FzZSBBX0ZPUk1BVCk6IENsZWFuIHVwIGVycm9yIG1lc3NhZ2VzLgorCShkZWNsX2F0dHJpYnV0ZXMsIGNhc2UgQV9GT1JNQVRfQVJHKTogTmV3IGNhc2UuCisJKHN0cnVjdCBpbnRlcm5hdGlvbmFsX2Zvcm1hdF9pbmZvKTogTmV3IHN0cnVjdHVyZSBhbmQgdHlwZWRlZi4KKwkoaW50ZXJuYXRpb25hbF9mb3JtYXRfbGlzdCk6IE5ldyB2YXJpYWJsZS4KKwkocmVjb3JkX2ludGVybmF0aW9uYWxfZm9ybWF0KTogTmV3IGZ1bmN0aW9uLgorCShpbml0X2Zvcm1hdF9pbmZvKTogQ2FsbCBpdCBmb3IgZ2V0dGV4dCwgZGNnZXR0ZXh0LCBhbmQgZGNnZXR0ZXh0LgorCShjaGVja19mb3JtYXRfaW5mbyk6IFNlZSBpZiBmb3JtYXQgYXJnIGlzIGNhbGwgdG8KKwlpbnRlcm5hdGlvbmFsaXphdGlvbiBmdW5jdGlvbi4KKworRnJpIEp1biAgNyAyMDowNDo0MCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGdjYy5jIChNVUxUSUxJQl9TRUxFQ1QpOiBEZWxldGUgZGVmaW5pdGlvbi4KKwkobXVsdGlsaWJfc2VsZWN0KTogRGVsZXRlIHN0YXRpYyBpbml0aWFsaXplci4KKwkobXVsdGlsaWJfb2JzdGFjaywgbXVsdGlsaWJfcmF3KTogTmV3IGdsb2JhbCB2YXJpYWJsZXMuCisJKG11bHRpbGliLmgpOiBJbmNsdWRlIGluc2lkZSBtdWx0aWxpYl9yYXcgZGVmaW5pdGlvbi4KKwkobWFpbik6IFNldCBtdWx0aWxpYl9zZWxlY3QgZnJvbSBtdWx0aWxpYl9yYXcuCisJKiBnZW5tdWx0aWxpYjogQ2hhbmdlIG91dHB1dCB0byBiZSBhIHNlcXVlbmNlIG9mIHNob3J0IHN0cmluZ3MKKwlzZXBhcmF0ZWQgYnkgY29tbWFzIHJhdGhlciB0aGFuIGEgc2luZ2xlIGxvbmcgbWFjcm8gZGVmaW5pdGlvbi4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgTVVMVCk6IENoZWNrIGZvciBjYXNlCisJd2hlcmUgd2lkdGggaXMgbGFyZ2VyIHRoYW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwgYW5kIHVwcGVyIG1vc3QKKwliaXQgaXMgc2V0LiAgV2UgY2FuIG5vdCBnZW5lcmF0ZSBhIHNpbXBsZSBzaGlmdCBpbiB0aGlzIGNhc2UuCisKKwkqIGdzeW1zLmggKGVudW0gc2RiX3R5cGUpOiBBZGQgVF9MTkdEQkwgaWYgRVhURU5ERURfU0RCX0JBU0lDX1RZUEVTLgorCShlbnVtIHNkYl9tYXNrcyk6IEFkZCBFWFRFTkRFRF9TREJfQkFTSUNfVFlQRVMgbWFza3MuCisJKiBzZGJvdXQuYyAoZ3N5bXMuaCk6IEluY2x1ZGUgaWYgQ1JPU1NfQ09NUElMRSBpcyBkZWZpbmVkLgorCShwbGFpbl90eXBlXzEpOiBVc2UgVFlQRV9QUkVDSVNJT04gaW5zdGVhZCBvZiBUWVBFX1NJWkUuCisJQWRkIGNoZWNrIGZvciBMT05HX0RPVUJMRV9UWVBFX1NJWkUgaWYgRVhURU5ERURfU0RCX0JBU0lDX1RZUEVTLgorCSogaTk2MC9pOTYwLmggKEVYVEVOREVEX1NEQl9CQVNJQ19UWVBFUyk6IERlZmluZS4KKwkoUFVUX1NEQl9UWVBFKTogRGVsZXRlIG5vdyB1bm5lY2Vzc2FyeSBzaGlmdGluZyBhbmQgbWFza2luZy4KKworCSogaTk2MC9pOTYwLmggKGk5NjBfb3V0cHV0X21vdmVfe2RvdWJsZSxxdWFkfSk6IERlY2xhcmUuCisKK0ZyaSBKdW4gIDcgMTk6MjI6MDkgMTk5NiAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIE1ha2VmaWxlLmluIChPQkpDX1RIUkVBRF9GSUxFKTogTmV3IHZhcmlhYmxlLgorCSogY29uZmlndXJlIChvYmpjX3RocmVhZF9maWxlKTogU2V0IG5ldyB2YXJpYWJsZSB0byBhcHByb3ByaWF0ZQorCXZhbHVlcyBiYXNlZCB1cG9uIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtOyBkZWZhdWx0IGlzIGB0aHItc2luZ2xlJy4KKwkqIG9iamMvTWFrZWZpbGUgKE9CSkNfVEhSRUFEX0ZJTEUpOiBBZGQgdGFyZ2V0IGFuZCBkZXBlbmRlbmN5LgorCSh0aHIubyk6IFJlbW92ZSBPUyBzcGVjaWZpYyB0aHJlYWQgZmlsZXMgYXMgZGVwZW5kZW5jaWVzLgorCSogb2JqYy90aHItZGVjb3NmMS5jOiBOb3cgY29tcGlsZXMgYXMgYSBzZXBhcmF0ZSBzb3VyY2UgZmlsZSwgc28KKwlpbmNsdWRlIGFwcHJvcHJpYXRlIE9iamVjdGl2ZS1DIGhlYWRlcnMuCisJKiBvYmpjL3Roci17bWFjaCxvczIscG9zaXgsaXJpeCxzaW5nbGUsc29sYXJpcyx3aW4zMn0uYzogTGlrZXdpc2UuCisJKiBvYmpjL3Roci5jOiBSZW1vdmUgaW5jbHVzaW9uIG9mIHNvdXJjZSBmaWxlcy4KKwkqIG9iamMvdGhyLmggKF9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXMpOiBEZWNsYXJlIGdsb2JhbCB2YXJpYWJsZS4KKwkqIG9iamMvdGhyLXB0aHJlYWRzLmM6IE5ldyBmaWxlLgorCitGcmkgSnVuICA3IDE5OjA0OjA0IDE5OTYgIEouVC4gQ29ua2xpbiAgPGp0Y0BydGwuY3lnbnVzLmNvbT4KKworIAkqIG02OGsuaCAoVEFSR0VUX1NXSVRDSEVTKTogVHJlYXQgLW02ODMwMiBsaWtlIC1tNjgwMDAgYW5kIC1tNjgzMzIKKwlsaWtlIC1tNjgwMjA7IHJlbW92ZSAtbW5vLTY4MzAyIGFuZCAtbW5vLTY4MzMyLgorCitGcmkgSnVuICA3IDEyOjA2OjEyIDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBkZW5lYi5jeWdudXMuY29tPgorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wKTogIEFsbG93IENoaWxsLXN0eWxlIHZhcmlhYmxlLXNpemVkIGFycmF5cy4KKworVGh1IEp1biAgNiAyMzoxMToxMSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBoODMwMC5jIChoODMwMF9tb25pdG9yX2Z1bmN0aW9uX3ApOiBOZXcgZnVuY3Rpb24uCisJKGg4MzAwX29zX3Rhc2tfZnVuY3Rpb25fcCk6IExpa2V3aXNlLgorCShvc190YXNrLCBtb25pdG9yKTogVmFyaWFibGVzIHRvIG5vdGUgaWYgdGhlIGN1cnJlbnQKKwlmdW5jdGlvbiBpcyBhbiBvc190YXNrIG9yIG1vbml0b3IuCisJKGZ1bmN0aW9uX3Byb2xvZ3VlKTogU2V0IG1vbml0b3IgYW5kL29yIG9zX3Rhc2sgYXMgbmVlZGVkLiAgSGFuZGxlCisJb3NfdGFzayBhbmQgbW9uaXRvciBmdW5jdGlvbnMuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogQ2xlYXIgbW9uaXRvciBhbmQgb3NfdGFzay4gIEhhbmRsZSBvc190YXNrIGFuZAorCW1vbml0b3IgZnVuY3Rpb25zLgorCShoODMwMF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogQWNjZXB0ICJPU19UYXNrIiBhbmQKKwkibW9uaXRvciIuCisKK1RodSBKdW4gIDYgMjA6MDE6NTQgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CisKKwkqIGdlbi1wcm90b3MuYyAocHJvZ25hbWUpOiAgTmV3IHZhcmlhYmxlIChuZWVkZWQgYnkgY3BwYWxsb2MuYykuCisJKG1haW4pOiAgU2V0IHByb2duYW1lLgorCisJKiBjcHBsaWIuaCAoc3RydWN0IHBhcnNlX2ZpbGUpOiAgUmVtb3ZlZC4KKwkoQ1BQX0ZBVEFMX0xJTUlULCBDUFBfRkFUQUxfRVJST1JTLCBDUFBfT1VUX0JVRkZFUik6ICBOZXcgbWFjcm9zLgorCSogY3BwaGFzaC5jIChjcHBfbG9va3VwKTogIENoYW5nZSBzdHJ1Y3QgcGFyc2VfZmlsZSAtPiBjcHBfcmVhZGVyLgorCisJKiBjcHBsaWIuYyAoaW5pdF9wYXJzZV9vcHRpb24pOiAgUmVuYW1lZCB0byBjcHBfb3B0aW9uc19pbml0LgorCShwdXNoX3BhcnNlX2ZpbGUpOiAgUmVuYW1lZCB0byAuLi4KKwkoY3BwX3N0YXJ0X3JlYWQpOiAgQ2hhbmdlIHRvIHJldHVybiAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KKwkoaW5pdF9wYXJzZV9maWxlKTogIFJlbmFtZWQgdG8gY3BwX3JlYWRlcl9pbml0LgorCSogY3BwbWFpbi5jIChtYWluKTogIFVzZSBDUFBfU0VUX1dSSVRURU4gYW5kIGNwcF9mYXRhbC4KKwlVc2UgcmVuYW1lZCBmdW5jdGlvbiBuYW1lcywgYW5kIHJldHVybiBwcm90b2NvbHMuCisJKiBmaXgtaGVhZGVyLmMgKHJlYWRfc2Nhbl9maWxlKTogIExpa2V3aXNlLgorCisJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6ICBHZW5lcmFsaXplIGZvciAiZmF0YWwiIGVycm9ycy4KKwkoY3BwX2ZhdGFsKTogIE5ldyBmdW5jdGlvbiAoanVzdCBjYWxscyBjcHBfbWVzc2FnZSkuCisJKiBjcHBsaWIuYyAoY3BwX3N0YXJ0X3JlYWQsIGNwcF9oYW5kbGVfb3B0aW9ucywgY3BwX2ZpbmlzaCwKKwlwYXJzZV9nb3RvX21hcmssIHBhcnNlX21vdmVfbWFyayk6ICBVc2UgY3BwX2ZhdGFsIHJhdGhlciB0aGFuIGZhdGFsLgorCisJKiBmaXgtaGVhZGVyLmMgKGNoZWNrX21hY3JvX25hbWVzKTogIEZpeCBzdHJ1Y3QgcGFyc2VfZmlsZS0+Y3BwX3JlYWRlci4KKwkqIGNwcGxpYi5jIChuZXdsaW5lX2ZpeCk6ICBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorCitUaHUgSnVuICA2IDE5OjQ3OjI2IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCUNoYW5nZXMgdG8gc3VwcG9ydCBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWVzIGluIG11bHRpcGxlCisJbm9uLWNvbnRpZ3VvdXMgbG9jYXRpb25zLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBIYW5kbGUgTklMIGluIFBBUkFMTEVMLiAgSGFuZGxlIFBBUkFMTEVMCisJcGFyYW1ldGVyIGluIFJFRy4gIEhhbmRsZSBQQVJBTExFTCByZXR1cm4gdmFsdWUgaW4gVkFMUkVHLgorCShlbWl0X2xpYnJhcnlfY2FsbCwgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBBYm9ydCBmb3IgUEFSQUxMRUwuCisJKHN0b3JlX29uZV9hcmcpOiBEZWxldGUgY29kZSBmb3IgaGFuZGxpbmcgRVhQUl9MSVNULgorCSogZXhwci5jIChlbWl0X2dyb3VwX2xvYWQsIGVtaXRfZ3JvdXBfc3RvcmUpOiBOZXcgZnVuY3Rpb25zLgorCSh1c2VfZ3JvdXBfcmVncyk6IE5ldyBmdW5jdGlvbi4KKwkoZW1pdF9wdXNoX2luc24pOiBIYW5kbGUgUEFSQUxMRUwgcGFyYW1ldGVyIGluIFJFRy4KKwkoZXhwYW5kX2Fzc2lnbm1lbnQpOiBIYW5kbGUgUEFSQUxMRUwgdG9fcnR4LgorCShzdG9yZV9leHByKTogSGFuZGxlIFBBUkFMTEVMIHRhcmdldC4KKwkqIGV4cHIuaCAoZW1pdF9ncm91cF9sb2FkLCBlbWl0X2dyb3VwX3N0b3JlLCB1c2VfZ3JvdXBfcmVncyk6IE5ldworCWRlY2xhcmF0aW9ucy4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEhhbmRsZSBQQVJBTExFTCBwYXJhbWV0ZXIgaW4gRU5UUllfUEFSTS4KKwkqIHN0bXQuYyAoZXhwYW5kX3ZhbHVlX3JldHVybik6IEhhbmRsZSBQQVJBTExFTCByZXR1cm5fcmVnLgorCisJKiBtaXBzL2FiaTY0LmggKFRZUEVfREVQRU5ERU5UX1JFRyk6IERlbGV0ZS4KKwkqIG1pcHMvbWlwcy5jIChmdW5jdGlvbl9hcmcpOiBSZXR1cm4gUEFSQUxMRUwgZm9yIHN0cnVjdHVyZSB3aXRoCisJYWxpZ25lZCBkb3VibGUgZmllbGRzLgorCSh0eXBlX2RlcGVuZGVudF9yZWcpOiBEZWxldGUuCisJKG1pcHNfZnVuY3Rpb25fdmFsdWUpOiBSZXR1cm4gUEFSQUxMRUwgZm9yIHN0cnVjdHVyZQorCXdpdGggdHdvIGZsb2F0aW5nIHBvaW50IGZpZWxkcy4KKwkqIG1pcHMvbWlwcy5tZCAoY2FsbF92YWx1ZSk6IEhhbmRsZSBQQVJBTExFTCBpbiBvcGVyYW5kc1swXS4KKwkoY2FsbF92YWx1ZV9tdWx0aXBsZV9pbnRlcm5hbDIpOiBOZXcgcGF0dGVybi4KKwkqIHBhL3BhLmggKEZVTkNUSU9OX0FSRyk6IEdlbmVyYWwgUEFSQUxMRUwgaW5zdGVhZCBvZiBFWFBSX0xJU1QuCisJKiByczYwMDAvcnM2MDAwLmMgKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogQ2hhbmdlIEVYUFJfTElTVCB0byBQQVJBTExFTAorCWluIGNvbW1lbnRzLgorCShmdW5jdGlvbl9hcmcpOiBHZW5lcmF0ZSBQQVJBTExFTCBpbnN0ZWFkIG9mIEVYUFJfTElTVC4KKworVGh1IEp1biAgNiAxODoyMToyNyAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBUaWdodGVuIHVwIGNvZGUgdGhhdCBtYWtlcyBSRUdfRVFVSVYKKwlub3RlcyBmb3IgcGFybXMuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IGRvIGFueXRoaW5nIHdpdGggZXZhbHVhdGVkIFNBVkVfRVhQUi4KKworVGh1IEp1biAgNiAxNzo1NDowNyAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAY3lnbnVzLmNvbT4KKworCSogbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBHcm91cCBhbGwgZmxvYXRpbmcgcG9pbnQgb3B0aW9ucy4KKwlXaGVuIGFuIGZwIG9wdGlvbiBpcyBzZWxlY3RlZCwgdW5zZXQgYml0cyB1c2VkIGZvciBvdGhlciBtdXR1YWxseQorCWV4Y2x1c2l2ZSBmcCBvcHRpb25zLgorCShPVkVSUklERV9PUFRJT05TKTogUmVtb3ZlIHNwZWNpYWwgY2FzZSBmb3IgU1VQUE9SVF9TVU5fRlBBOworCWJpdHMgdXNlZCBmb3IgNjg4ODEgYW5kIFNLWSBhcmUgbm93IGNsZWFyZWQgYnkgVEFSR0VUX1NXSVRDSEVTLgorCisJKiBtNjhrLm1kIChtb3ZzaV9jb25zdDAsIG1vdmhpKTogRmF2b3IgY2xyIHdpdGggVEFSR0VUXzUyMDAuCisJKGFkZFtxaHNdMyk6IERvbid0IHVzZSB0d28gYWRkcXcvc3VicXcgaW5zbnMgdG8gYWRkIHNtYWxsIGludGVnZXJzIHRvCisJYW4gYWRkcmVzcyByZWdpc3RlciB3aXRoIFRBUkdFVF82ODA2MC4KKwkoc3RhY2sgcHVzaCBwZWVwaG9sZSk6IFVzZSBtb3ZlcS5sIHdpdGggVEFSR0VUXzUyMDAgKHdoZW4gYXBwcm9wcmlhdGUpLgorCisJKiBtNjhrLmggKE1BU0tfNTIwMCwgVEFSR0VUXzUyMDApOiBOZXcgbWFjcm9zLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgIm01MjAwIi4KKwkoTEVHSVRJTUFURV9JTkRFWF9QKTogQWRkIFRBUkdFVF81MjAwIHRvIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCisJKiBtNjhrLmMgKGNvbnN0X21ldGhvZCk6IERvIG5vdCBzeW50aGVzaXplIGxvbmcgY29uc3RhbnRzCisgCXdpdGggYnl0ZSBvciB3b3JkIG9wZXJhdGlvbnMgd2l0aCBUQVJHRVRfNTIwMC4KKwkqIG02OGsubWQ6IERpc2FibGUgYnl0ZSBhbmQgd29yZCBhcml0aG1ldGljLCByb3RhdGUsIGludGVnZXIKKyAJZGl2aWRlLCBkYmNjLCBldGMuIGluc25zIGZvciBUQVJHRVRfNTIwMC4KKwkqIG02OGstbm9uZS5oOiAoQ1BVX0ZQVV9TUEVDLCBDUFBfU1BFQywgQVNNX1NQRUMpOiBTdXBwb3J0IG01MjAwLgorCitUaHUgSnVuICA2IDE3OjMyOjMyIDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBmaXhwcm90byAoc3ViZGlycyk6IFdvcmsgYXJvdW5kIFNvbGFyaXMgMi41CisJL3Vzci94cGdyL2Jpbi9zZWQgcHJvYmxlbSB3aXRoIFwrXCsuCisKK1RodSBKdW4gIDYgMTU6MDY6MjcgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDYWxsIHBvcF9vYnN0YWNrcyBhZnRlciBjcmVhdGluZworCVRZUEVfREVDTC4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBJZiBIQVZFX2NjMCBkZWZpbmVkLCBkaXNhYmxlIGF1dG9faW5jX29wdAorCWlmIGl0IHdvdWxkIHB1dCBhbiBpbnNuIGJldHdlZW4gYSBjYzAgc2V0dGVyL3VzZXIgcGFpci4KKworVGh1IEp1biAgNiAxMzowNjo1NCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9zeXN2NC5oIChMSUJHQ0MyX1dPUkRTX0JJR19FTkRJQU4pOiBJZiBfX3N1bl9fIGlzCisJZGVmaW5lZCwgdHJlYXQgdGhhdCBhcyBsaXR0bGUgZW5kaWFuLgorCitXZWQgSnVuICA1IDIwOjA0OjUzIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogaTk2MC9pOTYwLmggKFJPVU5EX1RZUEVfQUxJR04pOiBBZGQgY2hlY2sgZm9yIFRZUEVfUEFDS0VELgorCisJKiBzaC9zaC5oIChTSE9SVF9JTU1FRElBVEVTX1NJR05fRVhURU5EKTogRGVmaW5lLgorCSogc2gvc2gubWQgKGJyYW5jaF90cnVlKTogQWRkIGNvbW1lbnQgYWJvdXQgVC1iaXQgY29tcGFyZXMuCisKK1R1ZSBKdW4gIDQgMjM6MDg6MzQgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CisKKwkqIGNwcGxpYi5oLCBjcHBsaWIuYzogIFJlbW92ZSBzdXBwb3J0IGZvciAhU1RBVElDX0JVRkZFUlMuCisJKiBjcHBsaWIuaDogIFVzZSB1bnNpZ25lZCBjaGFyIHJhdGhlciB0aGFuIFVfQ0hBUi4KKwkqIGNwcGxpYi5oIChjcHBfcmVhZGVyKTogIEFkZCBkZXN0cnVjdG9yICNpZmRlZiBfX2NwbHVzcGx1cy4KKwkoY3BwX2NsZWFudXApOiAgTmV3IHByb3RvdHlwZS4KKwkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCwgZG9fb25jZSwgZG9faW5jbHVkZSwgY3BwX2dldF90b2tlbik6CisJQ29tcGFyZSBjcHBfYnVmZmVyIGFnYWluc3QgQ1BQX05VTExfQlVGRkVSLCBub3QgTlVMTC4KKworCSogY3BwbGliLmMgKGR1bXBfc3BlY2lhbF90b19idWZmZXIpOiAgTmV3IGZ1bmN0aW9uLgorCShpbml0aWFsaXplX2J1aWx0aW5zKTogIFVzZSBpdC4KKworV2VkIEp1biAgNSAxOToxMDoyMiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS9wYS5oIChURVhUX1NQQUNFX1ApOiBGaXggdGhpbmtvIGluIGxhc3QgY2hhbmdlLgorCitXZWQgSnVuICA1IDE2OjI1OjUxIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmggKEFTTV9ERUZBVUxUX1NQRUMpOiBEZWZhdWx0IHRvICIiLCBub3QgLW1wd3IuCisKKwkqIHN5c3Y0LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbXNobGliLgorCShMSU5LX1BBVEhfU1BFQyk6IEFkZCAtY29tcGF0LWJzZCBzdXBwb3J0IGZyb20gU29sYXJpcy4KKwkoTElOS19TUEVDKTogRWxpbWluYXRlICV7Yn0gYW5kICV7R30sIHNpbmNlIHRoZXkgY29uZmxpY3Qgd2l0aCBHQ0MKKwlzd2l0Y2hlcy4gIERlZmVyIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgdG8gTElOS19TSExJQl9TUEVDLiAgRGVmZXIKKwl0YXJnZXQgc2VsZWN0aW9uIHRvIExJTktfVEFSR0VUX1NQRUMuCisJKExJTktfU0hMSUJfU1BFQyk6IFByb3ZpZGUgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucywgZGVwZW5kaW5nIG9uCisJd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIGFyZSBkZWZhdWx0IG9yIG5vdC4gIE1ha2Ugc2hhcmVkCisJbGlicmFyaWVzIG5vdCBkZWZhdWx0IHVudGlsIGxpbmtlciBpcyBmaXhlZC4KKwkoTElOS19PU18qX1NQRUMpOiBOZXcgc3BlY3MgZm9yIE9TIHNwZWNpZmljIGxpbmtlciBzd2l0Y2hlcy4KKwkoU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogQWRkIG5ldyBzcGVjcy4KKworCSoge3NvbDIsc3lzdjR9LmggKExJTktfU1BFQyk6IE1vdmUgU29sYXJpcyBsaW5rIGludG8gdGhlIGdlbmVyYWwKKwlsaW5rIHNwZWMuCisKKwkqIHtzeXN2NCxzeXN2NGxlLGVhYmlsZX0uaCAoTElOS19UQVJHRVRfU1BFQyk6IE9ubHkgcGFzcyAtb2Zvcm1hdAorCXRvIHRoZSBsaW5rZXIgaWYgdGhlIHVzZXIgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgZW5kaWFuIGZvcm1hdC4KKworCSoge3NvbDIsbGludXgsZWFiaXNpbSxlYWJpbGVzaW19LmggKExJTktfT1NfREVGQVVMVF9TUEVDKTogRGVmaW5lCisJdG8gdXNlIHRoZSBhcHByb3ByaWF0ZSBPUyBsaW5rIHNwZWMuCisKK1dlZCBKdW4gIDUgMTY6MzU6MTAgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBnaW5jbHVkZS9zdGRkZWYuaDogRml4IHR5cG86IFRZUEVfcHRyZGlmZl90IHRvIF9UWVBFX3B0cmRpZmZfdC4KKworV2VkIEp1biAgNSAxNTo1Mjo1NyAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6ICBIYW5kbGUgUkFOR0VfRVhQUiBpbiBhcnJheSBpbmRleC4KKworV2VkIEp1biAgNSAxMzo0NTo1NCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzcGFyYy5tZCAoKmNhbGxfe2FkZHJlc3Msc3ltYm9saWN9X3N0cnVjdF92YWx1ZV9zcDMyKTogQWxsb3cKKwlvcGVyYW5kIDIgdG8gYmUgY29uc3QwX3J0eC4KKworVHVlIEp1biAgNCAxNjo0Mzo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogRG9uJ3QgdXBkYXRlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yCisgCWxvY2FsIHN0YXRpY3MuCisKKwkqIGMtZGVjbC5jIChzdGFydF9kZWNsKTogQWx3YXlzIHNldCBERUNMX0NPTU1PTiBvbiBzdGF0aWNzLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogT25seSB0cmVhdCB2YXJzIHdpdGggREVDTF9DT01NT04KKyAJYXMgY29tbW9uLgorCitUdWUgSnVuICA0IDE0OjU1OjQ5IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhLmMgKHJlbG9jX25lZWRlZCk6IE5ldyBmdW5jdGlvbi4KKwkqIHBhLmggKFRFWFRfU1BBQ0VfUCk6IFZhcmlhYmxlcy9jb25zdGFudHMgd2l0aCBpbml0aWFsaXplcnMKKwlyZXF1aXJpbmcgcmVsb2NzIG5ldmVyIGxpdmUgaW4gdGhlIHRleHQgc3BhY2UuCisKK1R1ZSBKdW4gIDQgMTQ6MTA6NDYgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBzaC5jIChmcF96ZXJvX29wZXJhbmQpOiBEbyBub3QgYWNjZXB0IG1pbnVzIHplcm8uCisKKwkqIHNoLmggKEFTTV9PVVRQVVRfTE9PUF9BTElHTik6IERlZmluZS4KKwkoQVNNX09VVFBVVF9BTElHTl9DT0RFKTogRGVmaW5lLgorCShBREpVU1RfSU5TTl9MRU5HVEgpOiBBZGQgaW4gYnl0ZXMgdGhhdCBtYXkgYmUgYWRkZWQgYnkKKwlhbGlnbm1lbnQuCisJKiBzaC5jIChvdXRwdXRfYnJhbmNoKTogUnVuIEFESlVTVF9JTlNOX0xFTkdUSCBpbiByZXZlcnNlIHRvIGdldAorCWNvcnJlY3QgbGVuZ3RoLiAgSnVzdCBjYWxsIGFib3J0IHJhdGhlciB0aGFuIHJldHVybmluZyAiYmFkIi4KKwkoZmluZF9iYXJyaWVyKTogQWRqdXN0IGxpbWl0cyBmb3IgcG9zc2libGUgYWxpZ25tZW50LgorCitUdWUgSnVuICA0IDA5OjM1OjA1IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3Qtc29sYXJpczogTmV3IHRhcmdldCBjb25maWcgZmlsZSBmb3IgUG93ZXJQQyBTb2xhcmlzCisJd2l0aG91dCBnYXMuCisKKwkqIHJzNjAwMC90LXBwYzogRWxpbWluYXRlIGFsbCBtdWx0aWxpYiB2YXJpZW50cyBleGNlcHQgZm9yCisJc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQuCisKKwkqIGNvbmZpZ3VyZSAocG93ZXJwY2xlLSotc29sYXJpcyopOiBJZiBub3QgLS13aXRoLWdudS1hcywgdXNlCisJdC1zb2xhcmlzLCBub3QgdC1wcGMuCisKKwkqIHJzNjAwMC9zb2wyLmggKE1VTFRJTElCX0RFRkFVTFRTKTogQWRkIGNvcnJlY3QgZGVmYXVsdHMgZm9yCisJU29sYXJpcy4KKworCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogQ2xvbmUgZnJvbSBzdnI0LmgsIG9taXQKKwlAcHJvZ2JpdHMsIHNpbmNlIFNvbGFyaXMgYXNzZW1ibGVyIGRvZXNuJ3QgbGlrZSBpdC4KKwkoTElCX1NPTEFSSVNfU1BFQyk6IElmIC1tc29sYXJpcy1jY2xpYiwgYWRkIGxpYmFiaS5hLgorCSh7U1RBUlQsRU5EfUZJTEVfU09MQVJJU19TUEVDKTogSWYgLW1zb2xhcmlzLWNjbGliLCB1c2UgZXhwbGljaXQKKwlwYXRobmFtZXMgZm9yIHRoZSBTb2xhcmlzIGNvbXBpbGVyIHN0YXJ0L2VuZCBmaWxlcy4KKwkoQVNNX1NQRUMpOiBQYXNzIC1tbm8tcmVnbmFtZXMgdG8gdGhlIGFzc2VtYmxlci4KKworTW9uIEp1biAgMyAxOTo0MDoxMCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMvYWJpNjQuaCAoQ1BQX1NQRUMpOiBNYWtlIC1tYWJpPW4zMiB0aGUgZGVmYXVsdC4KKwkqIG1pcHMvaXJpczYuaCAoTUlQU19JU0FfREVGQVVMVCwgTUlQU19BQklfREVGQVVMVCwgTVVMVElMSUJfREVGQVVMVFMsCisJQVNNX1NQRUMsIFNUQVJURklMRV9TUEVDLCBFTkRGSUxFX1NQRUMsIExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy5tZCAodGFibGVqdW1wX2ludGVybmFsNCsxKTogRml4IHR5cG8gaW4gY29uZGl0aW9uLgorCSogbWlwcy94LWlyaXM2IChDQywgT0xEQ0MpOiBEZWZpbmUgdG8gYmUgYGNjIC0zMicuCisKK01vbiBKdW4gIDMgMDc6NTc6MzUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5kZWYgKFtMUl1TSElGVF9FWFBSKTogUmVtb3ZlIGBhJyBmcm9tIHByaW50ZWQgbmFtZXMuCisKKwkqIHNwYXJjLm1kIChjYWxsKTogTWFzayB1bmltcCBvcGVyYW5kIHRvIDEyIGJpdHMsIGp1c3QgbGlrZSBTdW4uCisKKwkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZTsgdXBkYXRlIFRBUkdFVCBhZGRyLgorCisJKiBjLWRlY2wuYyAoc3RhcnRfc3RydWN0KTogU2V0IFRZUEVfUEFDS0VEIGZyb20gZmxhZ19wYWNrX3N0cnVjdC4KKwkoc3RhcnRfZW51bSk6IExpa2V3aXNlIGJ1dCBmcm9tIGZsYWdfc2hvcnRfZW51bXMuCisJKGZpbmlzaF9lbnVtKTogVGVzdCBUWVBFX1BBQ0tFRCwgbm90IGZsYWdfc2hvcnRfZW51bXMuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IFRlc3QgREVDTF9QQUNLRUQgYW5kIFRZUEVfUEFDS0VECisJaW5zdGVhZCBvZiBmbGFnX3BhY2tfc3RydWN0LgorCShsYXlvdXRfcmVjb3JkKTogTGlrZXdpc2UuCisKK1N1biBKdW4gIDIgMTk6NDE6MTQgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtaXBzLm1kICh0YWJsZWp1bXBfaW50ZXJuYWwzLCB0YWJsZWp1bXBfaW50ZXJuYWw0KTogTmV3IHBhdHRlcm5zLgorCSh0YWJsZWp1bXApOiBVc2UgdGhlbSBmb3IgUElDIGNvZGUuCisKK0ZyaSBNYXkgMzEgMTc6MjY6NTMgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYuYyAoaXg4Nl9leHBhbmRfZXBpbG9ndWUpOiBEb24ndCBnZW5lcmF0ZSByZWZlcmVuY2VzIHRvIGFuCisJZXhwb3NlZCB2YWNhdGVkIHN0YWNrLgorCSogaTM4Ni5tZCAoZXBpbG9ndWVfc2V0X3N0YWNrX3B0cik6IE5ldy4KKworRnJpIE1heSAzMSAxNTowNzo0OSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMvYWJpNjQuaDogQWRkIC1tYWJpPW4zMiBzdXBwb3J0LgorCShBQklfNjRCSVQpOiBEZWxldGUuCisJKFRBUkdFVF9MT05HNjQsIENQUF9TUEVDLCBTVEFDS19CT1VOREFSWSwgTUlQU19TVEFDS19BTElHTiwKKwlHUF9BUkdfTEFTVCwgRlBfQVJHX0xBU1QsIFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSwKKwlNQVhfQVJHU19JTl9SRUdJU1RFUiwgRlVOQ1RJT05fQVJHX1BBRERJTkcsIFJFVFVSTl9JTl9NRU1PUlksCisJU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6IE1vZGlmeS4KKwkoUkVHX1BBUk1fU1RBQ0tfU1BBQ0UpOiBJZmRlZiBvdXQuCisJKFRBUkdFVF9ERUZBVUxULCBTVUJUQVJHRVRfVEFSR0VUX09QVElPTlMpOiBEZWZpbmUuCisJKiBtaXBzL2lyaXM2Lmg6IEFkZCAtbWFiaT1uMzIgc3VwcG9ydC4KKwkoVEFSR0VUX0RFRkFVTFQsIEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwsCisJQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMKTogRGVsZXRlLgorCShNVUxUSUxJQl9ERUZBVUxUUywgQVNNX1NQRUMsIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TLAorCUFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCwgU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQywgTElOS19TUEVDKToKKwlNb2RpZnkuCisJKE1JUFNfQUJJX0RFRkFVTFQsIExPQ0FMX0xBQkVMX1BSRUZJWCk6IERlZmluZS4KKwkqIG1pcHMvbWlwcy5jOiBBZGQgLW1hYmk9bjMyIHN1cHBvcnQuCisJKG1pcHNfY29uc3RfZG91YmxlX29rLCBtaXBzX21vdmVfMXdvcmQsIG1pcHNfbW92ZV8yd29yZHMsCisJZnVuY3Rpb25fYXJnLCBvdmVycmlkZV9vcHRpb25zLCBtaXBzX2FzbV9maWxlX3N0YXJ0LAorCWNvbXB1dGVfZnJhbWVfc2l6ZSwgc2F2ZV9yZXN0b3JlX2luc25zLCBmdW5jdGlvbl9wcm9sb2d1ZSwKKwltaXBzX2V4cGFuZF9wcm9sb2d1ZSwgZnVuY3Rpb25fZXBpbG9ndWUsIG1pcHNfZnVuY3Rpb25fdmFsdWUpOiBNb2RpZnkuCisJKG1pcHNfYWJpLCBtaXBzX2FiaV9zdHJpbmcpOiBEZWZpbmUKKwkqIG1pcHMvbWlwcy5oOiBBZGQgLW1hYmk9bjMyIHN1cHBvcnQuCisJKEFCSV82NEJJVCk6IERlbGV0ZS4KKwkoVEFSR0VUX09QVElPTlMsIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VULCBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MsCisJQ09OU1RBTlRfQUREUkVTU19QLCBMRUdJVElNQVRFX0NPTlNUQU5UX1AsIExFR0lUSU1JWkVfQUREUkVTUywKKwlBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBNb2RpZnkuCisJKGVudW0gbWlwc19hYmlfdHlwZSwgU1VCVEFSR0VUX1RBUkdFVF9PUFRJT05TKTogRGVmaW5lLgorCShtaXBzX2FiaSwgbWlwc19hYmlfc3RyaW5nKTogRGVjbGFyZS4KKwkqIG1pcHMvbWlwcy5tZCAoanVtcCwgdGFibGVqdW1wX2ludGVybmFsMSwgdGFibGVqdW1wX2ludGVybmFsMik6IEFkZAorCS1tYWJpPW4zMiBzdXBwb3J0LgorCSogbWlwcy90LWlyaXM2IChNVUxUSUxJQl9PUFRJT05TKTogQWRkIC1tYWJpPW4zMiBzdXBwb3J0LgorCSogbWlwcy94bS1pcml4Ni5oIChIT1NUX0JJVFNfUEVSX0xPTkcpOiBVc2UgX01JUFNfU1pMT05HIG5vdCA2NC4KKwkqIGdpbmNsdWRlL3ZhLW1pcHMuaCAodmFfc3RhcnQpOiBBZGQgLW1hYmk9bjMyIHN1cHBvcnQuCisKK0ZyaSBNYXkgMzEgMTQ6NDU6MzAgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tc29sYXJpcy1jY2xpYiB0byB1c2UKKwl0aGUgU3VuIGNvbXBpbGVyJ3MgY3J0IGZpbGVzIGluc3RlYWQgb2Ygb3Vycy4KKwkoe1NUQVJULEVORH1GSUxFX1NPTEFSSVNfU1BFQyk6IElmIC1tc29sYXJpcy1jY2xpYiwgdXNlIHRoZSBTdW4KKwljb21waWxlcidzIGNydCBmaWxlcyBpbnN0ZWFkIG9mIG91cnMuCisJKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogRG9uJ3Qgc2V0IC1tc2RhdGE9ZGF0YSBmb3IgU29sYXJpcy4KKwkoU0JTU19TRUNUSU9OX0FTTV9PUCk6IEZvciBTb2xhcmlzLCBkb24ndCB1c2UgQG5vYml0cy4KKwkoQ1BQX09TX1NPTEFSSVNfU1BFQyk6IFJlbW92ZSAtQXN5c3RlbSh1bml4KSBhbmQgLUFzeXN0ZW0oc3ZyNCkuCisKKwkqIHJzNjAwMC90LXBwY3ssZ2FzfSAoTVVMVElMSUIqKTogQWRkIFNvbGFyaXMgc3BlY2lmaWMgbXVsdGlsaWJzLgorCisJKiByczYwMDAvZWFiaXssbGV9c2ltLmggKCpfREVGQVVMVF9TUEVDKTogUmF0aGVyIHRoYW4gdXNpbmcKKwlkdXBsaWNhdGUgZGVmaW5pdGlvbnMsIGp1c3QgdXNlICUoLi4uKSBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lCisJcGxhY2UgaW4gdGhlIHNwZWNzIGZpbGUgd2hlcmUgdGhlIHN3aXRjaGVzIGFyZSBkZWZpbmVkLgorCSogcnM2MDAwL3tsaW51eCxzb2wyfS5oICgqX0RFRkFVTFRfU1BFQyk6IERpdHRvLgorCisJKiByczYwMDAvc29sMi5oIChDUFBfUFJFREVGSU5FUyk6IFVzZSB0aGUgc3RhbmRhcmQgb25lIGluIHN5c3Y0LmguCisJKFJTNjAwMF9BQklfTkFNRSk6IERlZmF1bHQgaXMgc29sYXJpcy4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogRG9uJ3QgcmVkZWZpbmUuCisKKwkqIHJzNjAwMC9zb2wtY3tpLmFzbSxuLmFzbSxjMC5jfTogUHJvdmlkZSBtb3JlIHRoaW5ncyB0aGF0IFNvbGFyaXMKKwluZWVkcyBmb3IgcHJvZ3JhbSBzdGFydHVwLgorCitUaHUgTWF5IDMwIDIxOjU3OjM0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogdHJlZS5kZWYgKE9GRlNFVF9SRUYpOiBSZW1vdmUuCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIE9GRlNFVF9SRUYpOiBMaWtld2lzZS4KKwkqIHRyZWUuYyAoc3Vic3RpdHV0ZV9pbl9leHByKTogUmVtb3ZlIE9GRlNFVF9SRUYgY29kZS4KKworV2VkIE1heSAyOSAxNDo1NDo0NCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9lYWJpLmFzbSAoX19lYWJpKTogSWYgbm90IC1tcmVsb2NhdGFibGUsIGRvbid0IGFzc2VtYmxlCisJcmVsb2NhdGFibGUgZnVuY3Rpb25zLCBzbyB0aGF0IGl0IGNhbiBiZSBhc3NlbWJsZWQgd2l0aCB0aGUKKwlTb2xhcmlzIGFzc2VtYmxlci4KKworCSogcnM2MDAwL3N5c3Y0LmggKENQUF9TWVNWX1NQRUMpOiBEZWZpbmUgX1JFTE9DQVRBQkxFIGlmCisJLW1yZWxvY2F0YWJsZS1saWIgYXMgd2VsbCBhcyAtbXJlbG9jYXRhYmxlLgorCisJKiByczYwMDAuYyAocnM2MDAwX2ZpbGVfc3RhcnQpOiBOZXcgZnVuY3Rpb24gdG8gcHJpbnQgc29tZSBtb3JlCisJaW5mb3JtYXRpb24gdG8gdGhlIGFzbSBmaWxlLgorCSogcnM2MDAwL3tzeXN2NCx3aW4tbnQscnM2MDAwfS5oIChBU01fRklMRV9TVEFSVCk6IENhbGwgaXQuCisKK1R1ZSBNYXkgMjggMTU6MjE6MjQgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoRklSU1RfUFNFVURPX1JFR0lTVEVSKTogQnVtcCB0byA3Ny4gIFRoZSBuZXcgZnBtZW0KKwlyZWdpc3RlciByZXByZXNlbnRzIHRoZSBtZW1vcnkgbG9jYXRpb24gdXNlZCBmb3IgZmxvYXQvaW50CisJY29udmVyc2lvbnMuCisJKHtGSVhFRCxDQUxMX1VTRUR9X1JFR0lTVEVSUyk6IEFkZCBzdXBwb3J0IGZvciB0aGUgZnBtZW0gcHNldWRvCisJcmVnaXN0ZXIuCisJKFJFR19BTExPQ19PUkRFUik6IERpdHRvLgorCShIQVJEX1JFR05PX3tOUkVHUyxNT0RFX09LfSk6IERpdHRvLgorCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBEaXR0by4KKwkocmVnX2NsYXNzKTogRGl0dG8uCisJKFJFR19DTEFTU197TkFNRVMsQ09OVEVOVFN9KTogRGl0dG8uCisJKFJFR05PX1JFR19DTEFTUyk6IERpdHRvLgorCShQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogRGl0dG8uCisJKENMQVNTX3tNQVhfTlJFR1MsQ0FOTk9UX0NIQU5HRV9TSVpFLE1BWF9OUkVHU30pOiBEaXR0by4KKwkocnM2MDAwX3N0YWNrKTogRGl0dG8uCisJKHssREVCVUdffVJFR0lTVEVSX05BTUVTKTogRGl0dG8uCisJKEZQTUVNX3tSRUdOT19QLFJFR05VTX0pOiBOZXcgbWFjcm9zIGZvciBmcG1lbSByZWdpc3Rlci4KKwkocnM2MDAwX2ZwbWVtX3tvZmZzZXQsc2l6ZX0pOiBOZXcgZ2xvYmFsIHZhcmlhYmxlcy4KKwkoUlM2MDAwX1ZBUkFSR1NfT0ZGU0VUKTogRnBtZW0gdGVtcG9yYXJ5IHN0b3JhZ2UgaXMgbG9jYXRlZAorCWJldHdlZW4gb3V0Z29pbmcgYXJnIGFyZWEgYW5kIHZhcmFyZ3Mgc2F2ZSBhcmVhLgorCShTVEFSVElOR19GUkFNRV9PRkZTRVQpOiBEaXR0by4KKwkoU1RBQ0tfRFlOQU1JQ19PRkZTRVQpOiBEaXR0by4KKwkoUFJFRElDQVRFX0NPREVTKTogQWRkIGZwbWVtX29wZXJhbmQuCisJKHtjb3VudF9yZWdpc3RlcixmcG1lbX1fb3BlcmFuZCk6IEFkZCBkZWNsYXJhdGlvbnMuCisKKwkqIHJzNjAwMC5jICh7cnM2MDAwLGFsdH1fcmVnX25hbWVzKTogQWRkIHN1cHBvcnQgZm9yIGZwbWVtCisJJ3JlZ2lzdGVyJy4KKwkocnM2MDAwX2ZwbWVtX3tvZmZzZXQsc2l6ZX0pOiBOZXcgZ2xvYmFsIHZhcmlhYmxlcy4KKwkoZnBtZW1fb3BlcmFuZCk6IFJldHVybiB0cnVlIGZvciBmcG1lbSByZWdpc3RlcnMuCisJKGdwY19yZWdfb3BlcmFuZCk6IFRoZSBmcG1lbSByZWdpc3RlciBpcyBub3QgZ2VuZXJhbCBwdXJwb3NlLgorCShpbmNsdWRlc19yc2hpZnRfcCk6IEFkZCBjYXN0cyB0byBzaWxlbmNlIHdhcm5pbmdzIGZyb20gU29sYXJpcworCVBvd2VyUEMgaG9zdCBjb21waWxlci4KKwkocHJpbnRfb3BlcmFuZCk6IEFkZCAndicgb3BlcmFuZCB0eXBlIGZvciB0aGUgdXBwZXIgMTYgYml0cyBvZgorCXNpZ25lZCBjb25zdGFudHMsIHRvIHBsYWNhdGUgdGhlIFNvbGFyaXMgYXNzZW1ibGVyLgorCSh7cnM2MDAwLGRlYnVnfV9zdGFja19pbmZvKTogQWRkIHN1cHBvcnQgZm9yIGZwbWVtICdyZWdpc3RlcicuCisJKG91dHB1dF9lcGlsb2cpOiBEaXR0by4KKworCSogcnM2MDAwLm1kIChhZGRzaTMsbW92c2ksbW92c2YsbW92ZGkpOiBVc2UgJXYgZm9yIGNvbnN0YW50cyB3aXRoCisJdGhlIHVwcGVyIDE2IGJpdHMsIHRvIGdldCB0aGUgc2lnbiBjb3JyZWN0IGZvciBQb3dlclBDIFNvbGFyaXMuCisJKGZsb2F0eyx1bnN9c2lkZjIsZml4X3RydW5jZGZzaTIpOiBSZXdyaXRlIHRvIHVzZSAncmVnaXN0ZXInIDc2CisJZm9yIHRoZSBtZW1vcnkgbG9jYXRpb24gdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gZmxvYXQgYW5kIGludGVnZXIuCisKKwkqIHN5c3Y0LmggKEFTTV9PVVRQVVRfe0NPTixERX1TVFJVQ1RPUik6IFVzZSBjb2RlIGxhaWQgZG93biBpbgorCS5pbml0IGFuZCAuZmluaSBmb3IgbWFraW5nIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgdW5kZXIKKwlTb2xhcmlzLgorCShBU01fU1BFQyk6IERvIG5vdCBwYXNzIC11IHRvIHRoZSBhc3NlbWJsZXIuCisJKENDMV9TUEVDKTogLW1yZWxvY2F0YWJsZSBpbXBsaWVzIC1tZWFiaS4KKworCSogc29sMi5oIChSUzYwMDBfQUJJX05BTUUpOiBEZWZhdWx0IEFCSSBpcyBTb2xhcmlzLCBub3QgU3lzdGVtCisJVi40LgorCShBU01fT1VUUFVUX0FMSUdORURfTE9DQUwpOiBEb24ndCBkZWZpbmUgYSBTb2xhcmlzIHNwZWNpZmljCisJbWV0aG9kLgorCitNb24gTWF5IDI3IDA2OjM5OjEzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fe0xPTkcsU0VUfUpNUCk6CisJQ29udmVydCBibG9jayBhZGRyZXNzIGZyb20gcHRyX21vZGUgdG8gUG1vZGUuCisKK1N1biBNYXkgMjYgMjA6MDU6NDMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBnY2MuYyAoTVNET1MgcGV4ZWN1dGUpOiBDYWxsIHhtYWxsb2MsIG5vdCBtYWxsb2MuCisKK1N1biBNYXkgMjYgMDg6MzE6NTQgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlICh2YXgtKi17c3lzdn0pOiB0bV9maWxlIGFuZCB4bV9maWxlIG5vdyBsaXN0LgorCSh2YXgtKi11bHRyaXgpOiB0bV9maWxlIGlzIG5vdyBsaXN0LgorCSh3ZTMyay1hdHQtc3lzdiopOiB4bV9maWxlIG5vdyBsaXN0LgorCSogdmF4L3htLW5ldGJzZC5oOiBEZWxldGVkLgorCSogdmF4L25ldGJzZC5oOiBObyBsb25nZXIgaW5jbHVkZSB2YXguaCBhbmQgY29uZmlnL25ldGJzZC5oLgorCSogdmF4L3VsdHJpeC5oLCB2YXgvdmF4di5oOiBObyBsb25nZXIgaW5jbHVkZSB2YXguaC4KKwkqIHZheC94bS12YXh2Lmg6IE5vIGxvbmdlciBpbmNsdWRlIHhtLXZheC5oLgorCSogeG0td2UzMmsuaDogTm8gbG9uZ2VyIGluY2x1ZGUgeG0tc3ZyMy5oLgorCisJKiBjb25maWd1cmU6IFNlcGFyYXRlbHkgc2V0IHRhcmdldF9jcHVfZGVmYXVsdCBmb3IgdHdvCisJY2FzZSBzdGF0ZW1lbnRzIGFuZCB0aGVuIGNvbWJpbmUgaWYgYm90aCBzZXQuCisJKGFscGhhLSotd2lubnQzKTogdG1fZmlsZSBhbmQgeG1fZmlsZSBhcmUgbm93IGxpc3QuCisJU2V0IHRhcmdldF9jcHVfZGVmYXVsdCB0byA2NC4KKwkqIHdpbm50L2NvbmZpZy1udC5iYXQ6IE1ha2UgLmggZmlsZXMgcHJvcGVybHkgZm9yIEFscGhhLgorCSogYWxwaGEuaCAoV0lORE9XU19OVCk6IE5vIGxvbmdlciBkZWZpbmVkIGFuZCB1c2VkLgorCShNQVNLX1dJTkRPV1NfTlQsIFRBUkdFVF9XSU5ET1dTX05UKTogTmV3IG1hY3Jvcy4KKwkoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogVXNlIFRBUkdFVF9XSU5ET1dTX05ULgorCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IFRlc3QgVEFSR0VUX1dJTkRPV1NfTlQsIG5vdCBXSU5ET1dTX05ULgorCSogYWxwaGEubWQ6IExpa2V3aXNlLgorCSogYWxwaGEvY29uZmlnLW50LnNlZDogUHJvcGVybHkgc2V0IHRtX2ZpbGUgYW5kIHtidWlsZCxob3N0fV94bV9maWxlLgorCSogYWxwaGEvd2luLW50Lmg6IERvbid0IGluY2x1ZGUgYWxwaGEuaAorCShXSU5ET1dTX05UKTogTm8gbG9uZ2VyIGRlZmluZS4KKwkqIGFscGhhL3htLXdpbm50Lmg6IERvbid0IGluY2x1ZGUgeG0tYWxwaGEuaCBhbmQgd2lubnQveG0td2lubnQuaC4KKworRnJpIE1heSAyNCAxMjozNDoyMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQHNlYmEuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChjcHVfdHlwZSk6IEFkZCBjYXNlIGZvciBhcm0uCisJKHNwYXJjbGV0LSotYW91dCopOiBEZWxldGUgZXh0cmFfaGVhZGVycy4KKworCSogdmFyYXNtLmMgKGFzbV9vdXRwdXRfYnNzKTogTmV3IGFyZ3VtZW50IERFQ0wuCisJVXNlIEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FIGlmIGRlZmluZWQuCisJKGFzbV9vdXRwdXRfYWxpZ25lZF9ic3MpOiBMaWtld2lzZS4KKwkoYXNzZW1ibGVfdmFyaWFibGUpOiBQYXNzIERFQ0wgdG8gQVNNX09VVFBVVHssX0FMSUdORUR9X0JTUy4KKwkqIGFybS9hb3V0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBVcGRhdGUuCisJKiBoODMwMC9oODMwMC5oIChBU01fT1VUUFVUX0JTUyk6IFVwZGF0ZS4KKwkqIGkzODYvbGludXguaCAoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IFVwZGF0ZS4KKwkqIGkzODYvc3lzdjQuaCAoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IFVwZGF0ZS4KKwkqIG02OGsvY29mZi5oIChBU01fT1VUUFVUX0FMSUdORURfQlNTKTogVXBkYXRlLgorCSogbTY4ay9saW51eC5oIChBU01fT1VUUFVUX0FMSUdORURfQlNTKTogVXBkYXRlLgorCSogbTY4ay9tNjhrLWFvdXQuaCAoQVNNX09VVFBVVF9CU1MpOiBVcGRhdGUuCisJKiByczYwMDAvc3lzdjQuaCAoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IFVwZGF0ZS4KKwkqIHJzNjAwMC93aW4tbnQuaCAoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IFVwZGF0ZS4KKwkqIHNwYXJjL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBVcGRhdGUuCisKK1RodSBNYXkgMjMgMTk6NTU6NTIgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogU2V0CisJcmVnX3NpZ25fYml0X2NvcGllcyB0byBvbmUgbm90IHplcm8gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdmFsdWUKKwlpcyB1bmtub3duLgorCitUaHUgTWF5IDIzIDE4OjM5OjI0IDE5OTYgIEouVC4gQ29ua2xpbiAgPGp0Y0BydGwuY3lnbnVzLmNvbT4KKworCSogY29uZmlnL25ldGJzZC5oIChTV0lUQ0hfVEFLRVNfQVJHKTogQWRkIC1SLgorCShMSU5LX1NQRUMpOiBBZGQgJXtSKn0uCisKKwkqIG02OGsvbGIxc2Y2OC5hc206IENvbnN0cnVjdCBleGNlcHRpb24gbWFza3MgYXQgY29tcGlsZSB0aW1lCisgCWluc3RlYWQgb2Ygb3InaW5nIGluIGJpdHMgYXQgcnVuIHRpbWUuCisKK1RodSBNYXkgMjMgMTU6NTM6MDYgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBzaC9zaC5tZDogQWRkIG5ldyBpbnN0cnVjdGlvbiB0eXBlcyBmcCBhbmQgZnBkaXYuICBTZXQgbmV3CisJaW5zdHJ1Y3Rpb24gdHlwZXMgd2hlcmUgYXBwcm9wcmlhdGUuICBBZGQgZnVuY3Rpb24gdW5pdCBmcC4KKwlDbGFpbSB0aGF0IHN0b3JlIGluc3RydWN0aW9ucyB1c2UgZnVuY3Rpb24gdW5pdCBtZW1vcnkuCisKK1RodSBNYXkgMjMgMDA6MzY6MTkgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuaCAoQ09OU1RBTlRfQUREUkVTU19QKTogRG9uJ3QgYWNjZXB0IENPTlNUIG9yIEhJR0gKKwlvbiB0aGUgSDgvMzAwSC4KKwkqIGg4MzAwL2g4MzAwLm1kOiBVc2UgIm0iIHJhdGhlciB0aGFuICJvIiBjb25zdHJhaW50IGV2ZXJ5d2hlcmUKKwlhcHByb3ByaWF0ZS4gIENsZWFudXAgdXNlIG9mICJpIiBhbmQgIm4iIGNvbnN0cmFpbnRzLgorCitXZWQgTWF5IDIyIDE3OjQzOjM3IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXMgKHB0aHJlYWQuaCk6IEFkZCBleHRlcm4gdG8gX19wYWdlX3NpemUqIGRlY2xhcmF0aW9ucworCWZvciBBSVggNC4xLnguCisKKwkqIGNvbWJpbmUuYyAobm9uemVyb19iaXRzKTogRG9uJ3QgYXNzdW1lIGFyZyBwb2ludGVyIGhhcyBzYW1lCisJYWxpZ25tZW50IGFzIHN0YWNrIHBvaW50ZXIuCisKK1dlZCBNYXkgMjIgMTY6MDk6MDUgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoTElOS19TVEFSVF9ERUZBVUxUX1NQRUMpOiBTcGVsbCBtYWNybyBjb3JyZWN0bHkuCisJKExJQl9ERUZBVUxUX1NQRUMpOiBQcm92aWRlIGRlZmF1bHQgdmVyc2lvbi4KKworV2VkIE1heSAyMiAxMToyMzo1NyAxOTk2ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBtZW9seW9uLmhhbnNlLmRlKQorCisJKiBpMzg2Lm1kIChyZXR1cm5fcG9wX2ludGVybmFsKTogbmV3IHBhdHRlcm4uCisJKHBvcCk6IGRpc2FibGUgZW1pdHRpbmcgb2YgYm9ndXMgbW92ZSBpbnN0cnVjdGlvbi4KKwkqIGkzODYuYyAoaXg4Nl9leHBhbmRfZXBpbG9ndWUpOiB1c2UgZ2VuX3JldHVybl9wb3BfaW50ZXJuYWwgdG8KKwlzaW11bHRhbm91c2x5IHJldHVybiBhbmQgcG9wIGFyZ3M7IHJlbW92ZWQgc3RyYXkgc2VtaWNvbG9uLgorCSogY29uZmlnL2xpbnV4LWFvdXQuaCwgY29uZmlnL2xpbnV4LmggKFNFVF9BU01fT1ApOiBBZGRlZCBmb3IKKwlfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCkpKSBzdXBwb3J0LgorCitXZWQgTWF5IDIyIDA4OjA2OjQyIDE5OTYgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUuZWR1PgorCisJKiBjb21iaW5lLmMgKGluaXRfcmVnX2xhc3RfYXJyYXlzLCBzZXR1cF9pbmNvbWluZ19wcm9tb3Rpb25zKToKKwlDb3JyZWN0IHByb3RvdHlwZXMuCisKK1R1ZSBNYXkgMjEgMTM6NDI6MTcgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAubWQgKGRpdiBwYXR0ZXJucyk6IFJld3JpdGUuCisJKG1vZCBwYXR0ZXJucyk6IExpa2V3aXNlLgorCisJKiBwYS9wYS5jIChiYXNlcmVnX29wZXJhbmQpOiBOZXZlciBhY2NlcHQgYSBDT05TVF9JTlQuCisKK1R1ZSBNYXkgMjEgMTI6MjY6NDAgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcGEvcGEtaHB1eDkuaCwgcGEtb3NmLmggKExJTktfU1BFQyk6IFByb3ZpZGUgdmVyc2lvbiBmb3IgU25ha2UuCisKK1R1ZSBNYXkgMjEgMDc6MjA6NDggMTk5NiAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CisKKwkqIHZheC5oIChUQVJHRVRfTkFNRSk6IERlZmluZSB1bmxlc3MgYWxyZWFkeSBkZWZpbmVkLgorCShUQVJHRVRfVkVSU0lPTik6IFByaW50IFRBUkdFVF9OQU1FLgorCSogdmF4L3Ztcy5oIChUQVJHRVRfTkFNRSk6IEFsd2F5cyByZWRlZmluZS4KKwkoVEFSR0VUX1ZFUlNJT04pOiBEZWxldGU7IHJldGFpbiB2YXguaCBkZWZpbml0aW9uLgorCitNb24gTWF5IDIwIDE0OjAwOjQ0IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2guYyAob3V0cHV0X2ZpbGVfc3RhcnQpOiBEZWxldGUgbWlzcGxhY2VkIHNlbWljb2xvbi4KKworTW9uIE1heSAyMCAxMTo1ODoxNSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiByZW9yZy5jIChyZWxheF9kZWxheV9zbG90cyk6IENhbGwgdXBkYXRlX2Jsb2NrIGJlZm9yZQorCXJlZGlyZWN0aW5nIGEgYnJhbmNoIHBhc3QgYSByZWR1bmRhbnQgaW5zbi4KKworU3VuIE1heSAxOSAxNjo0MDo1MyAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgorCisJKiBNYWtlZmlsZS5pbiAobGlib2JqYy5hLCBzdWJsaWJvYmpjLmEpOiAnc3BlY3MnIGFkZGVkIHRvCisJZGVwZW5kZW5jaWVzLgorCitTdW4gTWF5IDE5IDEyOjI1OjQ4IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZTogQWRkIG5ldyBzd2l0Y2ggdG8gcHJvdmlkZSBkZWZhdWx0IGZvciBjcHVfdHlwZTsKKwlkZWxldGUgbnVtZXJvdXMgc2V0dGluZ3Mgb2YgaXQgaW4gbWFpbiBzd2l0Y2guCisJKGhwcGEpOiBSZWZsZWN0IHJlcnJhbmdlbWVudHMgYmVsb3c7IHVzZSBuZXcgY29uZmlndXJlIGZlYXR1cmVzLgorCSogcGEvcGEtZ2FzLmgsIHBhL3BhLXByby1lbmQuaDogTmV3IGZpbGVzLgorCSogcGEvcGExLmgsIHBhL3BhMS1vc2YuaCwgcGEvcGExLWdocHV4LmgsIHBhL3BhMS1vbGRhcy5oOiBEZWxldGVkLgorCSogcGEvcGExLWdocHV4OS5oLCBwYS9wYTEtaHB1eDkuaCwgcGEvcGExLWhwdXguaDogRGVsZXRlZC4KKwkqIHBhL3BhMS1naGl1eC5oLCBwYS9wYTEtaGl1eC5oLCBwYS9wYS1naHB1eC5oOiBEZWxldGVkLgorCSogcGEvcGEtZ3V4Ny5oLCBwYS9wYS1naGl1eC5oOiBEZWxldGVkLgorCSogcGEvcGEtaGl1eC5oOiBObyBsb25nZXIgaW5jbHVkZSBwYS1ocHV4LmguCisJKiBwYS9wYS1ocHV4Lmg6IE5vIGxvbmdlciBpbmNsdWRlIHBhLmguCisJKFRBUkdFVF9ERUZBVUxUKTogVW5zZXQgYmVmb3JlIHNldHRpbmcuCisJKExJTktfU1BFQyk6IFByb3ZpZGUgb3B0aW9uIGZvciBwYTEuCisJKiBwYS9wYS1ocHV4Ny5oOiBObyBsb25nZXIgaW5jbHVkZSBwYS5oLgorCShIUF9GUF9BUkdfREVTQ1JJUFRPUl9SRVZFUlNFRCk6IERvbid0IGRlZmluZSBoZXJlLgorCSogcGEvcGEtaHB1eDkuaCwgcGEvcGEtb2xkYXMuaDogTm8gbG9uZ2VyIGluY2x1ZGUgcGEtaHB1eC5oLgorCShUQVJHRVRfREVGQVVMVCk6IERvbid0IG5lZWQgdG8gc2V0IGhlcmUuCisJKiBwYS9wYS1vc2YuaDogTm8gbG9uZ2VyIGluY2x1ZGUgcGEuaC4KKwkoVEFSR0VUX0RFRkFVTFQpOiBEb24ndCBkZWZpbmU7IGlkZW50aWNhbCB0byBkZWZhdWx0LgorCSogcGEvcGEtcHJvLmg6IE5vIGxvbmdlciBpbmNsdWRlIHBhLmguCisJTW92ZSBkZWZpbml0aW9ucyBhZnRlciBpbmNsdWRlIHRvIG5ldyBmaWxlIHBhLXByby1lbmQuaC4KKwkqIHBhLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEluY2x1ZGUgVEFSR0VUX0NQVV9ERUZBVUxULgorCShUQVJHRVRfQ1BVX0RFRkFVTFQpOiBQcm92aWRlIGRlZmF1bHQgdmFsdWUuCisJKENQUF9TUEVDKTogVGVzdCBUQVJHRVRfQ1BVX0RFRkFVTFQgdG9vLgorCisJKiBNYWtlZmlsZS5pbiAoZnVuY3Rpb24ubyk6IEluY2x1ZGVzIGJjLWVtaXQuaC4KKwkocmVnLXN0YWNrLm8pOiBJbmNsdWRlcyBpbnNuLWZsYWdzLmguCisJKiBleHByLmggKGZ1bmN0aW9uX3ZhbHVlKTogRGVsZXRlZDsgbm8gc3VjaCBmdW5jdGlvbi4KKwkoYmNfYnVpbGRfY2FsbGRlc2MsIGJjX3J1bnRpbWVfdHlwZV9jb2RlKTogTmV3IGRlY2xhcmF0aW9ucy4KKwkqIGMtZGVjbC5jOiBBZGQgcHJvdG90eXBlcyBmb3IgYWxsIHN0YXRpYyBmdW5jdGlvbnMuCisJKiBjLWl0ZXJhdGUuYzogTGlrZXdpc2UuCisJKiBkYnhvdXQuYzogTGlrZXdpc2UuCisJKGFkc3BhdGgpOiBEZWxldGU7IG5ldmVyIHVzZWQgYW5kIGhhcyBudW1lcm91cyBwYXJzZSBlcnJvcnMuCisJKiBkd2FyZm91dC5jOiBJZiBub3QgR05VQywgbWFrZSBgaW5saW5lJyBudWxsOyBvdGhlcndpc2UsIGxlYXZlIGFsb25lLgorCUFkZCBgc3RhdGljJyB0byBpbmxpbmUgZnVuY3Rpb25zLgorCUFkZCBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb24uCisJKiBleHByLmMgKGJjX3J1bnRpbWVfdHlwZV9jb2RlKTogRGVsZXRlIHJlZHVuZGFudCBkZWNsYXJhdGlvbi4KKwkqIGZ1bmN0aW9uLmM6IEluY2x1ZGUgYmMtZW1pdC5oLgorCSh7c2F2ZSxyZXN0b3JlfV9tYWNoaW5lX3N0YXR1cyk6IEFkZCBwcm90b3R5cGUgZm9yIGFyZ3MuCisJKGJjX3J1bnRpbWVfdHlwZV9jb2RlLCBiY19idWlsZF9jYWxsZGVzYyk6IERlbGV0ZSByZWR1bmRhbnQgZGVjbHMuCisJKGJjX2VtaXRfdHJhbXBvbGluZSwgYmNfZW5kX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKiByZWctc3RhY2suYzogSW5jbHVkZSBpbnNuLWZsYWdzLmguCisJQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKGdlbl9qdW1wLCBnZW5fbW92ZGYsIGdlbl9tb3Z4Zik6IERlbGV0ZSByZWR1bmRhbnQgZGVjbGFyYXRpb25zLgorCShmaW5kX3JlZ25vX25vdGUsIGVtaXRfanVtcF9pbnNuX2JlZm9yZSwgZW1pdF9sYWJlbF9hZnRlcik6IExpa2V3aXNlLgorCShzd2FwX3J0eF9jb25kaXRpb24pOiBOb3cgc3RhdGljLgorCSogc2Rib3V0LmM6IEFkZCBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zLgorCShzZGJvdXRfcGFybXMsIHNkYm91dF9yZWdfcGFybXMpOiBEZWxldGUgZXh0cmEgcGFybSB0byBwbGFpbl90eXBlLgorCitTdW4gTWF5IDE5IDExOjUwOjEwIDE5OTYgIEpvaG4gQ2FyciA8amZjQG1pdC5lZHU+CisKKwkqIGFscGhhLmMgKGFscGhhX2VtaXRfY29uZGl0aW9uYWxfbW92ZSk6IENvbXBhcmUgdG8gMCBpbiBjb3JyZWN0IG1vZGUuCisKK1NhdCBNYXkgMTggMjA6MTc6MjcgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5jIChwcmVwYXJlX21vdmVfb3BlcmFuZHMpOiBJZiBzb3VyY2UgaXMgcjAsIGFuZCBkZXN0IGlzIHJlZytyZWcKKwlNRU0sIHRoZW4gY29weSBzb3VyY2UgdG8gYSBwc2V1ZG8tcmVnLgorCSogc2gubWQgKHVudHlwZWRfY2FsbCk6IE5ldyBwYXR0ZXJuLgorCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBXaGVuIHVwZGF0ZSBzcGxpdCBERVNUX0FERFIgZ2l2LAorCWNoZWNrIHRvIG1ha2Ugc3VyZSBpdCB3YXMgc3BsaXQuCisJKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogRml4IHJldmVyc2VkIHRlc3Qgb2YgdmVyaWZ5X2FkZHJlc3NlcyByZXN1bHQuCisKK1NhdCBNYXkgMTggMTA6MjY6MDQgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jICh1bnNhdmVfZXhwcl9ub3cpOiBBdm9pZCB1c2Ugb2YgTlVMTF9SVFggc2luY2Ugbm8gcnRsLmguCisKKwkqIGNvbmZpZ3VyZTogU2V0IGNwdV9kZWZhdWx0LCB0bV9maWxlLCBhbmQgeG1fZmlsZSBlYXJseS4KKwlSZW1vdmUgcmVkdW5kYW50IHNldHRpbmdzIG9mIHRob3NlLCB0bWFrZV9maWxlLCBhbmQgeG1ha2VfZmlsZS4KKwlVc2UgJHt0bV9maWxlfSBhbmQgJHt4bV9maWxlfSB0byByZWZlciB0byB0aGUgbWFpbiBmaWxlcy4KKwlTb3J0IHNvbWUgZW50cmllcyBmb3IgY29uc2lzdGVuY3kgYW5kIHJlZm9ybWF0IHNvbWUgb3RoZXJzLgorCShyczYwMDAsIHBvd2VycGMpOiBSZW1vdmUgYm9ndXMgdGVzdCBvbiBob3N0ID09IHRhcmdldC4KKwkoYWxwaGEtKi1saW51eCk6IHhtLWxpbnV4Lmggbm8gbG9uZ2VyIGluY2x1ZGVzIHhtLWFscGhhLgorCShhbHBoYS0qLW9zZiopOiBSZW1vdmUgcmVkdW5kYW50IHNldHRpbmcgb2YgdGFyZ2V0X2NwdV9kZWZhdWx0LgorCSgqLWNvbnZleC0qKTogVXNlIHRhcmdldF9jcHVfZGVmYXVsdCBpbnN0ZWFkIG9mIHNlcGFyYXRlIC5oIGZpbGVzLgorCShjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCopOiBjbGl4Lmggbm8gbG9uZ2VyIGluY2x1ZGVzIGFueSBmaWxlcy4KKwkoaTg2MCwgaTk2MCwgcGRwMTEpOiBSZWZsZWN0IHJlbW92YWwgb2YgaW5jbHVkZXMgbGlzdGVkIGJlbG93LgorCSogYWxwaGEveG0tbGludXguaDogTm8gbG9uZ2VyIGluY2x1ZGUgeG0tYWxwaGEuaC4KKwkqIGNsaXBwZXIvY2xpeC5oOiBObyBsb25nZXIgaW5jbHVkZSBjbGlwcGVyLmggYW5kIHN2cjMuaC4KKwkqIGNvbnZleC5oOiBQcm92aWRlIGEgZGVmYXVsdCBmb3IgVEFSR0VUX0RFRkFVTFQuCisJVGFrZSAib3IiIG9mIFRBUkdFVF9ERUZBVUxUIGFuZCBUQVJHRVRfQ1BVX0RFRkFVTFQgZXZlcnl3aGVyZS4KKwkqIGNvbnZleC9jb252ZXh7MSwyLDMyLDM0LDM4fS5oOiBEZWxldGVkLgorCSogaTg2MC9ic2QtZ2FzLmg6IE5vIGxvbmdlciBpbmNsdWRlIGJzZC5oLgorCSogaTg2MC9ic2QuaDogTm8gbG9uZ2VyIGluY2x1ZGUgaTg2MC5oLgorCSogaTg2MC9meDI4MDAuaDogTm8gbG9uZ2VyIGluY2x1ZGUgaTg2MC9zeXN2NC5oLgorCShPVVRQVVRfVERFU0MpOiBObyBsb25nZXIgZGVmaW5lLgorCShBU01fRklMRV9FTkQpOiBNb3ZlIHJlZGVmaW5pdGlvbiB0byBoZXJlLgorCSogaTg2MC9tYWNoLmg6IE5vIGxvbmdlciBpbmNsdWRlIGk4NjAuaC4KKwkqIGk4NjAvcGFyYWdvbi5oLCBpODYwL3N5c3YzLmg6IE5vIGxvbmdlciBpbmNsdWRlIGk4NjAuaCBhbmQgc3ZyMy5oLgorCSogaTg2MC9zeXN2NC5oOiBObyBsb25nZXIgaW5jbHVkZSBpODYwLmggYW5kIHN2cjQuaC4KKwkoQVNNX0ZJTEVfRU5EKTogRGVsZXRlIHJlZGVmaW5pdGlvbiBmcm9tIGhlcmUuCisJKiBpODYwL3htLWZ4MjgwMC5oOiBObyBsb25nZXIgaW5jbHVkZSB4bS1pODYwLmguCisJKiBpODYwL3htLXBhcmFnb24uaCwgaTg2MC94bS1zeXN2ezMsNH0uaDogRGVsZXRlZC4KKwkqIGk5NjAvaTk2MC1jb2ZmLmg6IE5vIGxvbmdlciBpbmNsdWRlIGk5NjAuaCBhbmQgZGJ4Y29mZi5oLgorCSogaTk2MC92eDk2MC1jb2ZmLmg6IE5vIGxvbmdlciBpbmNsdWRlIGk5NjAtY29mZi5oLgorCSogaTk2MC92eDk2MC5oOiBObyBsb25nZXIgaW5jbHVkZSBpOTYwLmguCisJKiBwZHAxMS8yYnNkLmg6IE5vIGxvbmdlciBpbmNsdWRlIHBkcDExLmguCisKKwkqIGkzNzAvaTM3MC5oOiBSZW5hbWVkIGZyb20gbXZzLmguCisJKiBpMzcwL2kzNzAuYzogUmVuYW1lZCBmcm9tIG12czM3MC5jLgorCSogaTM3MC90LWkzNzA6IFJlbmFtZWQgZnJvbSB0LW12cy4KKwkqIGkzNzAveG0taTM3MC5oOiBSZW5hbWVkIGZyb20geG0tbXZzLmguCisJKiBjb25maWd1cmUgKGkzNzAtKi1tdnMqKTogVXNlIGRlZmF1bHQgbmFtZXMgZm9yIGFsbCBmaWxlcy4KKworCSogYy1wYXJzZS5pbjogVXBkYXRlIG51bWJlciBvZiBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIGZvciBvYmpjLgorCitTYXQgTWF5IDE4IDA4OjIwOjE3IDE5OTYgIERlbm5pcyBHbGF0dGluZyAgKGRlbm5pc2dAcGxhaW50YWxrLmJlbGxldnVlLndhLnVzKQorCisJKiBtNjhrL25leHQuaCAoRklOQUxJWkVfVFJBTVBPTElORSk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaGVzLgorCitGcmkgTWF5IDE3IDE5OjU3OjIwIDE5OTYgIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgorCisJKiB2YXgveG0tdm1zLmggKGRieG91dF9yZXN1bWVfcHJldmlvdXNfc291cmNlX2ZpbGUpOiBOZXcgbWFjcm8uCisKK0ZyaSBNYXkgMTcgMTQ6MjA6MTMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjb25kIFRBUkdFVF9FWFBSKTogTWFrZSBUQVJHRVRfRVhQUnMKKwlyZWRvYWJsZSBmb3IgVU5TQVZFX0VYUFIuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsX2NsZWFudXApOiBXcmFwIHRoZSBjbGVhbnVwIGluIGFuIFVOU0FWRV9FWFBSCisJdG8gdGhhdCB3ZSBjYW4gcmVkbyBpdC4KKwkqIHRyZWUuYyAodW5zYXZlX2V4cHJfbm93KTogSGFuZGxlIFRBUkdFVF9FWFBScyBmdWxseSBub3cuCisJKiB0cmVlLmRlZiAoVEFSR0VUX0VYUFIpOiBBZGQgYSBmb3VydGggZmllbGQgc28gdGhhdCBUQVJHRVRfRVhQUnMKKwlhcmUgcmVkb2FibGUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNvbmQgVU5TQVZFX0VYUFIpOiBNb3ZlIGZyb20gdGhlIEMrKworCWZyb250ZW5kIHRvIHRoZSBiYWNrZW5kIHdoZXJlIGl0IGJlbG9uZ3MuCisJKiB0cmVlLmMgKHVuc2F2ZV9leHByKTogTGlrZXdpc2UuCisJKHVuc2F2ZV9leHByX25vdyk6IExpa2V3aXNlLgorCSogdHJlZS5kZWYgKFVOU0FWRV9FWFBSKTogTGlrZXdpc2UuCisJKiB0cmVlLmggKHVuc2F2ZV9leHByKTogTGlrZXdpc2UuCisJKHVuc2F2ZV9leHByX25vdyk6IExpa2V3aXNlLgorCitGcmkgTWF5IDE3IDE1OjA0OjQwIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChsc2hyc2kzIGluc25zKTogQWRkIHNwZWNpYWwgY2FzZSBjb2RlIGZvciBzaGlmdGluZyBieQorCTAgdG8gYXZvaWQgYmFkIGNvZGUgZ2VuZXJhdGVkIHdpdGggbm8gb3B0aW1pemF0aW9uLgorCitGcmkgTWF5IDE3IDEzOjUwOjU1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworICAgICAgICAqIGkzODYvdW5peC5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogRGVmaW5lLgorCSogaTM4Ni97YXR0LmgsYnNkLmgsc3VuMzg2Lmh9IChBU01fT1VUUFVUX01JX1RIVU5LKTogRGVsZXRlLgorCitGcmkgTWF5IDE3IDEzOjM0OjI4IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlnL2ZwLWJpdC5jIChfZnBkaXZfcGFydHMpOiBDb3JyZWN0IHNpZ24gaGFuZGxpbmcgd2hlbgorCWRpdmlkaW5nIHplcm8gb3IgaW5maW5pdHkgYnkgc29tZXRoaW5nLgorCitGcmkgTWF5IDE3IDEyOjM2OjM2IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAc2ViYS5jeWdudXMuY29tPgorCisJU3RhbmRhcmRpemUgb3B0aW9uIG91dHB1dCBpbiBhc3NlbWJsZXIgZmlsZXMuCisJKiBNYWtlZmlsZS5pbiAodG9wbGV2Lm8pOiBQYXNzIC1EVEFSR0VUX05BTUUuCisJKiBhcm0vYW91dC5oIChBU01fT1VUUFVUX09QVElPTlMpOiBEZWxldGUuCisJKEFTTV9GSUxFX1NUQVJUKTogRGVsZXRlIG9wdGlvbiBvdXRwdXQgc3VwcG9ydC4KKwkqIGFybS9hcm0uYyAob3V0cHV0X29wdGlvbiwgb3V0cHV0X29wdGlvbnMsIG1fb3B0aW9ucyk6IERlbGV0ZS4KKwkqIG04OGsvbTg4ay5jIChvdXRwdXRfZmlsZV9zdGFydCk6IERlbGV0ZSBvcHRpb24gb3V0cHV0IHN1cHBvcnQuCisJKiBtODhrL204OGsuaCAoQVNNX0NPTU1FTlRfU1RBUlQpOiBEZWZpbmUuCisJKiBtaXBzL21pcHMuYyAodGFyZ2V0X3N3aXRjaGVzLCBwcmludF9vcHRpb25zKTogRGVsZXRlLgorCShtaXBzX2FzbV9maWxlX3N0YXJ0KTogUHV0IG91dHB1dCBvZiAtRyxDcHUsSVNBIGhlcmUuCisJKiBtaXBzL21pcHMuaCAoQVNNX0NPTU1FTlRfU1RBUlQpOiBDaGFuZ2UgZnJvbSAiXHRcdCMiIHRvICIgIyIuCisJKiByczYwMDAvcnM2MDAwLmMgKG91dHB1dF9vcHRpb24sIG1fb3B0aW9ucywgb3V0cHV0X29wdGlvbnMpOiBEZWxldGUuCisJKiByczYwMDAvcnM2MDAwLmggKEFTTV9PVVRQVVRfT1BUSU9OUyk6IERlbGV0ZS4KKwkoQVNNX0NPTU1FTlRfU1RBUlQpOiBEZWZpbmUuCisJKEFTTV9GSUxFX1NUQVJUKTogRGVsZXRlIG9wdGlvbiBvdXRwdXQgc3VwcG9ydC4KKwkqIHJzNjAwMC9zeXN2NC5oIChBU01fRklMRV9TVEFSVCk6IExpa2V3aXNlLgorCSogcnM2MDAwL3dpbi1udC5oIChBU01fRklMRV9TVEFSVCk6IExpa2V3aXNlLiAgRGVsZXRlIGR1cGxpY2F0ZS4KKwkqIHNoL3NoLmMgKG91dHB1dF9vcHRpb24sIG1fb3B0aW9ucywgb3V0cHV0X29wdGlvbnMpOiBEZWxldGUuCisJKG91dHB1dF9maWxlX3N0YXJ0KTogRGVsZXRlIG9wdGlvbiBvdXRwdXQgc3VwcG9ydC4KKwkqIHNoL3NoLmggKEFTTV9GSUxFX1NUQVJUKTogTGlrZXdpc2UuCisJKEFTTV9DT01NRU5UX1NUQVJUKTogRGVmaW5lLgorCSogZHdhcmZvdXQuYyAoKik6IGZsYWdfdmVyYm9zZV9hc20gcmVuYW1lZCB0byBmbGFnX2RlYnVnX2FzbS4KKwkqIGZsYWdzLmggKGZsYWdfZGVidWdfYXNtKTogRGVjbGFyZS4KKwkqIHRvcGxldi5jIChwcmludF92ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgorCShwcmludF9zaW5nbGVfc3dpdGNoKTogTmV3IGFyZ3VtZW50cyBwb3MsIG1heCwgaW5kZW50LCBzZXAsIHRlcm0uCisJKHByaW50X3N3aXRjaF92YWx1ZXMpOiBOZXcgYXJndW1lbnRzIHBvcywgbWF4LCBpbmRlbnQsIHNlcCwgdGVybS4KKwlVcGRhdGUgY2FsbCB0byBwcmludF9zaW5nbGVfc3dpdGNoLiAgT3V0cHV0IG9wdGlvbnMgcGFzc2VkIGFuZAorCW9wdGlvbnMgZW5hYmxlZC4KKwkoTUFYX0xJTkUpOiBOZXcgbWFjcm8uCisJKGZsYWdfZGVidWdfYXNtKTogRGVmaW5lLgorCShjb21waWxlX2ZpbGUpOiBPdXRwdXQgb3B0aW9ucyB0byBhc3NlbWJsZXIgZmlsZS4KKwkobWFpbik6IFJlY29nbml6ZSAtZEEuICBDYWxsIHByaW50X3ZlcnNpb24uICBVcGRhdGUgY2FsbCB0bworCXByaW50X3N3aXRjaF92YWx1ZXMuCisJKGxpbmVfcG9zaXRpb24pOiBEZWxldGVkLgorCitGcmkgTWF5IDE3IDEwOjUwOjQ0IDE5OTYgIFN0YW4gQ294ICAoY294c0BkZy1ydHAuZGcuY29tKQorCisJKiBpMzg2LmMgKGZ1bmN0aW9uX3Byb2xvZ3VlLCBpeDg2X2V4cGFuZF9wcm9sb2d1ZSwKKwlmdW5jdGlvbl9lcGlsb2d1ZSwgaXg4Nl9leHBhbmRfZXBpbG9ndWUpOiBHZW5lcmF0ZSBwcm9sb2d1ZSBhbmQKKwllcGlsb2d1ZSBhcyBSVEwgKHByaW9yIHRvIHNjaGVkdWxpbmcpIGluc3RlYWQgb2YgZW1pdHRpbmcgYXNtLgorCShvdmVycmlkZV9vcHRpb25zKTogSWYgb25seSAtbWFyY2ggaXMgZ2l2ZW4sIG1ha2UgaXQgdGhlIGRlZmF1bHQgLW1jcHUuCisJKiBpMzg2LmggKEZVTkNUSU9OX0JFR0lOX0VQSUxPR1VFKTogUmVuYW1lZCBmcm9tIEZVTkNUSU9OX0VQSUxPR1VFLgorCSogaTM4Ni5tZCAocmV0dXJuLCByZXR1cm5faW50ZXJuYWwsIHByb2xvZ3VlLCBwcm9sb2d1ZV9zZXRfZ290LAorCXByb2xvZ3VlX2dldF9wYywgZXBpbG9ndWUsIGxlYXZlLCBwb3ApOiBOZXcgcGF0dGVybnMgZm9yIGVtaXR0aW5nCisJYXNtIGZyb20gcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIFJUTC4KKwkqIG04OGsvdC1kZ3V4IChUX0NGTEFHUyk6IERlbGV0ZS4KKwkqIG04OGsveC1kZ3V4IChYX0NGTEFHUyk6IE5ldy4KKworRnJpIE1heSAxNyAwOTo1NDoyMyAxOTk2ICBKaW0gTWV5ZXJpbmcgIChtZXllcmluZ0Bhc2ljLnNjLnRpLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKHN0YW1wLWNydHssU30pOiBVc2UgLW8gdG8gYXZvaWQgY29uZmxpY3RzIGlmCisJYm90aCBvZiB0aGVzZSBhcmUgYnVpbHQgaW4gcGFyYWxsZWwuCisKK0ZyaSBNYXkgMTcgMDg6NTU6MTkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX3NwbGl0X2JpdF9maWVsZCk6IERvbid0IGFzc3VtZSB0aGUgYWxpZ25tZW50CisJb2YgVkFMVUUgaXMgdGhlIHNhbWUgYXMgdGhlIHJlY29yZC4KKworCSogY29uZmlndXJlOiBXcml0ZSAjZGVmaW5lIFRBUkdFVF9DUFVfREVGQVVMVCBpbnRvIHRtLmgKKwlpbnN0ZWFkIG9mIGRlZmluaW5nIE1BWUJFX1RBUkdFVF9ERUZBVUxUIGluIE1ha2VmaWxlLgorCShhbHBoYS0qLWxpbnV4KTogU2V0IHRhcmdldF9jcHVfZGVmYXVsdCB0byA0IGFuZCB4bWFrZV9maWxlIHRvIG5vbmUuCisJKGFscGhhLSotb3NmKik6IFNldCB0YXJnZXRfY3B1X2RlZmF1bHQgdG8gNCBpZiAtLWdhcy4KKwkqIE1ha2VmaWxlLmluIChnY2MubywgdG9wbGV2Lm8sICQob3V0X29iamVjdF9maWxlKSk6CisJUmVtb3ZlIE1BWUJFX1RBUkdFVF9ERUZBVUxULgorCisJKiBjb21iaW5lLmMgKGluc25fY3VpZCk6IE5ldyBmdW5jdGlvbi4KKwkoSU5TTl9DVUlEKTogU29tZXRpbWVzIGNhbGwgaXQuCisKK0ZyaSBNYXkgMTcgMDg6MTI6MzcgMTk5NiAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CisKKwkqIG9iamMvc2VuZG1zZy5jIChvYmpjX2dldF91bmluc3RhbGxlZF9kdGFibGUpOiBOZXcgZnVuY3Rpb24uCisJKiBvYmpjL29iamMtYXBpLmggKG9iamNfZ2V0X3VuaW5zdGFsbGVkX2R0YWJsZSk6IE5ldyBkZWNsYXJhdGlvbi4KKworICAgICAgICAqIG9iamMvdGhyLW9zMi5jLCBvYmpjL3Roci1wb3NpeC5jLCBvYmpjL3Roci1tYWNoLmM6IE5ldyBmaWxlcy4KKyAgICAgICAgKiBvYmpjL1RIUkVBRFMuTUFDSDogTmV3IGZpbGUuCisKKyAJKiBvYmpjL3NlbmRtc2cuYyAobmlsX21ldGhvZCk6IERlbGV0ZWQgZnJvbSBoZXJlLgorIAkqIG9iamMvbmlsX21ldGhvZC5jOiBOZXcgZmlsZS4KKyAJKiBNYWtlZmlsZSAoT0JKQ19PKTogQWRkIGRlcGVuZGVuY3kgZm9yIG5pbF9tZXRob2QuYy4KKworCSogb2JqYy9oYXNoLmMgKGhhc2hfaXNfa2V5X2luX2hhc2gpOiBOZXcgZnVuY3Rpb24uCisJKiBvYmpjL2hhc2guaDogSW5jbHVkZSBvYmpjL29iamMuaCBoZXJlIGluc3RlYWQgb2YgaW4gb2JqYy9oYXNoLmMKKwl0byBnZXQgQk9PTCB0eXBlZGVmLgorCitGcmkgTWF5IDE3IDA4OjAxOjQ4IDE5OTYgIERvdWcgUnVwcCAgKHJ1cHBAZ25hdC5jb20pCisKKwkqIG1zZG9zL2NvbmZpZ3VyLmJhdDogSWYgQWRhIHN1YmRpcmVjdG9yeSBwcmVzZW50LCBhZGp1c3QgTWFrZWZpbGUuCisKK0ZyaSBNYXkgMTcgMDc6NDA6MDQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIChkcmVwcGVyQGN5Z251cy5jb20pCisKKwkqIHN0ZGRlZi5oOiBJZiBuZWVkX3dpbnRfdCBkZWZpbmVkLCBub3RoaW5nIGluIHRoaXMgZmlsZSBpcyBuZWVkZWQuCisJKF9XSU5UX1QsIF9fV0lOVF9fVFlQRV9fLCB3aW50X3QpOiBEZWZpbmUgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLgorCitUaHUgTWF5IDE2IDE4OjUzOjI1IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBFUV9FWFBSKTogV2hlbiBmb2xkaW5nIFZBUisrID0gQ09OU1QsCisJbWFzayB0aGUgbmV3IGNvbnN0IGlmIFZBUiBpcyBhIGJpdGZpZWxkIHJlZmVyZW5jZTsgYWxzbyBmb3IgVkFSLS0uCisKK1RodSBNYXkgMTYgMTg6Mjk6MDMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBzZWJhLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChmdW5jdGlvbl9zZWN0aW9uKTogRGVsZXRlIGZsYWdfZnVuY3Rpb25fc2VjdGlvbnMgc3VwcG9ydC4KKwkoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBQdXQgaXQgaGVyZS4gIFVzZSBVTklRVUVfU0VDVElPTiBpZiBkZWZpbmVkLgorCitXZWQgTWF5IDE1IDEzOjM1OjExIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLntoLGMsbWR9IChyczYwMDBfcGljX3JlZ2lzdGVyKTogRGVsZXRlIGFsbCB1c2VzLCB1c2UKKwlwaWNfb2Zmc2V0X3RhYmxlX3J0eCBpbnN0ZWFkLgorCisJKiByczYwMDAubWQgKG1vdmVfdG9fZmxvYXQpOiBSZXdyaXRlIHNvIHRoYXQgaXQgdXNlcyB0aGUgcmVnaXN0ZXIKKwlhbGxvY2F0b3IgdG8gYWxsb2NhdGUgdGhlIHN0YWNrIHRlbXAsIGluc3RlYWQgb2YgY2FsbGluZworCXJzNjAwMF9zdGFja190ZW1wLgorCShmaXhfdHJ1bmNkZnNpMik6IERpdHRvLgorCisJKiByczYwMDAuYyAocnM2MDAwX3N0YWNrX3RlbXApOiBEZWxldGUsIG5vIGxvbmdlciB1c2VkLgorCitXZWQgTWF5IDE1IDEwOjM5OjI3IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIGg4MzAwL2g4MzAwLmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBEZWZpbmUuCisKK1NhdCBNYXkgMTEgMDc6NDI6NTkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9maWVsZCk6IFN1cHBvcnQgQkxLbW9kZSBiaXRmaWVsZCBpZiBhbGlnbmVkIG9uCisJYnl0ZSBib3VuZGFyeSB1c2luZyBlbWl0X2Jsb2NrX21vdmUuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTVBPTkVOVF9SRUYpOiBMaWtld2lzZS4KKworRnJpIE1heSAxMCAxODozMzozOSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUgKGFscGhhLSotbGludXgpOiBSZXZlcnNlIG9yZGVyIGluIHRtX2ZpbGUgbGlzdC4KKwlEZWxldGUgeG1ha2VfZmlsZS4KKwkqIGFscGhhL3gtbGludXg6IERlbGV0ZWQuCisJKiBhbHBoYS9saW51eC5oIChBU01fRklOQUxfU1BFQyk6IEFkZCAjdW5kZWYuCisJKiBhbHBoYS94bS1saW51eC5oOiBSZW1vdmUgYm9ndXMgdHJhaWxpbmcgI2VuZGlmLgorCisJKiBsb29wLmMgKG1heWJlX2VsaW1pbmF0ZV9iaXZfMSk6IERpc2FibGUgYWxsIGJ1dCB0d28gY2FzZXMKKwlvZiBiaXYgZWxpbWluYXRpb24gd2l0aCBnaXZzIGFuZCByZXN0cmljdCB0aG9zZSB0d28gY2FzZXMgdG8KKwlhbiBBRERfVkFMIHRoYXQgaXMgYW4gYWRkcmVzcy4KKworCSogZmxvdy5jIChtYXJrX3NldF8xLCBtYXJrX3VzZWRfcmVncyk6IENsZWFuIHVwIHVzYWdlcworCW9mIEFMTF9ORUVERUQ7IGNoYW5nZSB0byBTT01FX05PVF9ORUVERUQgYW5kIHNldCBwcm9wZXJseS4KKworRnJpIE1heSAxMCAxMTozNzozOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBEb24ndCB3YXJuIGFib3V0IGFydGlmaWNpYWwgZnVuY3Rpb25zCisgCWRlY2xhcmVkIHN0YXRpYyBhbmQgbm90IGRlZmluZWQuCisKK1RodSBNYXkgIDkgMjI6MDM6MjggMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FCisJbmVlZG4ndCBjb25zaWRlciBieXRlY29kZXMuCisJKGFzc2VtYmxlX3ZhcmlhYmxlKTogQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUgbmVlZG4ndAorCWNvbnNpZGVyIGJ5dGVjb2Rlcy4KKwkqIHRvcGxldi5jIChyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiBMaWtld2lzZSB3aXRoCisJQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVC4KKwkqIGFybS9hb2YuaCAoQVNNX0RFQ0xBUkVfe0ZVTkNUSU9OLE9CSkVDVH1fTkFNRSk6IERlbGV0ZSBieXRlY29kZQorCXN1cHBvcnQuCisJKiB2YXgvdm1zLmggKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FKTogTGlrZXdpc2UuCisKK1RodSBNYXkgIDkgMTk6MzY6MTMgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5oIChTRVRfQVNNX09QKTogRGVmaW5lLgorCitUaHUgTWF5ICA5IDEzOjMxOjU4IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3N5c3Y0LmggKFNVQlRBUkdFVF97U1dJVENIRVMsT1BUSU9OU30pOiBBZGQgc3VwcG9ydCBmb3IKKwlmaW5lciBncmFpbiBjb250cm9sIG9uIC1tc2RhdGEsIHNvIHRoYXQgZWFiaSBwZW9wbGUgY2FuIHNwZWNpZnkgdG8KKwljb21waWxlIHNkYXRhIGNvZGUgdG8gb25seSB1c2UgcjEzIGluc3RlYWQgb2YgcjIvcjEzLiAgTWFrZQorCS1tcmVsb2NhdGFibGUtbGliIHR1cm4gb2ZmIC1tc2RhdGEsIGp1c3QgbGlrZSAtbSByZWxvY2F0YWJsZSBkb2VzLgorCShTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IERpdHRvLgorCShFTkNPREVfU0VDVElPTl9JTkZPKTogTW92ZSB0byByczYwMDAuYy4KKwkoQVNNX1NQRUMpOiAtbXNkYXRhPWVhYmkgc2V0cyAtbWVtYiBhbHNvLgorCShDQzFfU1BFQyk6IC1tbm8tc2RhdGEgZ2V0cyBjb252ZXJ0ZWQgdG8gLW1zZGF0YT1ub25lLgorCisJKiByczYwMDAuYyAocnM2MDAwX3NkYXRheyxfbmFtZX0pOiBBZGQgc3VwcG9ydCBmb3IgZmluZXIgZ3JhaW4KKwljb250cm9sIG9uIC1tc2RhdGEuCisJKG91dHB1dF9vcHRpb25zKTogRGl0dG8uCisJKHNtYWxsX2RhdGFfb3BlcmFuZCk6IERpdHRvLgorCShwcmludF9vcGVyYW5kKTogRGl0dG8uCisJKHJzNjAwMF9zZWxlY3Rfc2VjdGlvbik6IERpdHRvLgorCShyczYwMDBfZW5jb2RlX3NlY3Rpb25faW5mbyk6IE1vdmUgaGVyZSBmcm9tIHN5c3Y0LmgsIHNlY3Rpb24KKwluYW1lcyBhcmUgc3RvcmVkIGFzIFNUUklORyBub2Rlcywgbm90IElERU5USUZJRVIuCisKK1dlZCBNYXkgIDggMjE6MDQ6NDkgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBmdW5jdGlvbi5jIChhZ2dyZWdhdGVfdmFsdWVfcCk6IFJldHVybiAxIGlmIFRSRUVfQUREUkVTU0FCTEUuCisJKiBwYS9wYS5oIChSRVRVUk5fSU5fTUVNT1JZKTogTm8gbG9uZ2VyIHRlc3QgZm9yIFRSRUVfQUREUkVTU0FCTEUuCisKK1R1ZSBNYXkgIDcgMTM6NDI6NTcgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuYzogSW5jbHVkZSBvYnN0YWNrLmguCisJKGJpdF9tZW1vcnlfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkocHJpbnRfb3BlcmFuZCk6IEFwcGVuZCAiOjE2IiB0byBhIG1lbW9yeSByZWZlcmVuY2UgdG8KKwl0aGUgdGlueSBkYXRhIGFyZWEuCisJKGg4MzAwX3RpbnlfZGF0YV9wKTogTmV3IGZ1bmN0aW9uLgorCShoODMwMF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogQWNjZXB0ICJ0aW55X2RhdGEiLiAgRml4CisJdHlwby4KKwkoaDgzMDBfZW5jb2RlX2xhYmVsKTogTmV3IGZ1bmN0aW9uLgorCShoODMwMF9hZGp1c3RfaW5zbl9sZW5ndGgpOiBSZWZlcmVuY2VzIHRvIHRoZSB0aW55IGRhdGEgc2VjdGlvbgorCWFyZSB0d28gYnl0ZXMgc2hvcnRlciB0aGFuIG5vcm1hbCBhY2Nlc3NlcyBvbiB0aGUgSDgvMzAwSC4KKwkqIGg4MzAwL2g4MzAwLmggKE9LX0ZPUl9VKTogRml4IHRoaW5rby4KKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IEVuY29kZSBpbmZvIGZvciB0aW55IGRhdGEgdmFyaWFibGVzLgorCShTVFJJUF9OQU1FX0VOQ09ESU5HKTogRGVmaW5lLgorCSogaDgzMDAvaDgzMDAubWQgKG1vdnFpIGluc24pOiBGaXggbGVuZ3RoIGZvciBhIGNvbnN0YW50IGxvYWQuCisJKG1vdnN0cmljdHFpKTogTGlrZXdpc2UuCisJKG1vdmhpLCBtb3ZzdHJpY3RoaSk6IExpa2V3aXNlLgorCShtZW1vcnkgYnRzdCBwYXR0ZXJucyk6IEFkZCByZWdpc3RlciB0byB0aGUgY29uc3RyYWludHMgdG8ga2VlcAorCXJlbG9hZCBoYXBweS4KKworCSogaDgzMDAvaDgzMDAuaCAoT0tfRk9SX1UpOiAoY29uc3QgKHBsdXMgKHN5bWJvbF9yZWYpIChjb25zdF9pbnQpKSkKKwlpcyBhIHZhbGlkIFUgb3BlcmFuZCBpZiBTWU1CT0xfUkVGX0ZMQUcgaXMgc2V0IG9uIHRoZQorCVNZTUJPTF9SRUYuCisJKiBoODMwMC9oODMwMC5tZCAobWVtb3J5IGJ0c3QgcGF0dGVybnMpOiBOZXcgcGF0dGVybnMuCisKKwkqIGg4MzAwL2g4MzAwLmMgKGg4MzAwX2VpZ2h0Yml0X2RhdGFfcCk6IFJlbmFtZWQgZnJvbQorCWg4MzAwX3RpbnlfZGF0YV9wLgorCShoODMwMF9laWdodGJpdF9kYXRhX3ApOiBDaGVjayBmb3IgdGhlICJlaWdodGJpdF9kYXRhIgorCWF0dHJpYnV0ZSBpbnN0ZWFkIG9mICJ0aW55X2RhdGEiLgorCShoODMwMF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogTGlrZXdpc2UuCisJKiBoODMwMC9oODMwMC5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogQ2FsbCBoODMwMF9laWdodGJpdF9kYXRhX3AKKwlpbnN0ZWFkIG9mIGg4MzAwX3RpbnlfZGF0YV9wLgorCisJKiBoODMwMC9oODMwMC5oIChSRUFET05MWV9EQVRBX1NFQ1RJT04pOiBEZWZpbmUuCisJKEVYVFJBX1NFQ1RJT05TKTogQWRkIGluX3JlYWRvbmx5X2RhdGEuCisJKFJFQURPTkxZX0RBVEFfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJTk9TKTogQWRkIHJlYWRvbmx5X2RhdGEuCisKK1R1ZSBNYXkgIDcgMDk6MjY6MjQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IFVwZGF0ZSBERUNMX0FTU0VNQkxFUl9OQU1FIGZvciBsb2NhbAorIAlzdGF0aWNzLiAgUmVtb3ZlIHJlZmVyZW5jZSB0byBmbGFnX25vX2NvbW1vbi4KKworTW9uIE1heSAgNiAyMTozODozNiAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY3BwbGliLmMgKHNraXBfY29tbWVudCwgaGFuZGxlX2RpcmVjdGl2ZSk6IERvbid0IHVzZSB1bmluaXQgdmFycy4KKworTW9uIE1heSAgNiAxODo0NzozNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGRieG91dC5jIChkYnhvdXRfZnVuY3Rpb24pOiBXaGVuIGRlY2lkaW5nIHRvIGNhbGwgZGJ4b3V0X2Z1bmN0aW9uX2VuZAorCWNoYW5nZSB0ZXN0IGZyb20gZmxhZ19mdW5jdGlvbl9zZWN0aW9ucyB0byBERUNMX1NFQ1RJT05fTkFNRSAhPSBOVUxMLgorCisJKiB2YXJhc20uYyAobmFtZWRfc2VjdGlvbik6IEFjY2VwdCBhbnkgZGVjbC4KKworTW9uIE1heSAgNiAxNjo0MTowOCAxOTk2ICBTdGFuIENveCAgKGNveHNAZGctcnRwLmRnLmNvbSkKKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogTW9kaWZ5IGNvbmRpdGlvbmFsIG1vdmVzIHdob3NlIGNjIGlzCisJbm9uc3RhbmRhcmQuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IENoYWluIG11bHRpcGxlIGF0dHJpYnV0ZXMgY29ycmVjdGx5LgorCitNb24gTWF5ICA2IDE1OjQxOjQzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBEb24ndCBkZWR1Y2UgYWxpZ25tZW50IG9mIFNJWkUgZnJvbQorCURFQ0xfQUxJR047IHVzZSBUWVBFX0FMSUdOIGluc3RlYWQuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFNldCBSVFhfVU5DSEFOR0lOR19QIGluIHN0YWNrX3Bhcm0KKwlpZiBwYXJtIGlzIHJlYWQtb25seS4KKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uLCBjYXNlIEFERFJfRVhQUik6IERvbid0CisJdHJlYXQgYWRkcmVzcyBvZiBleHRlcm5hbCBkZWNsIGFzIGFsd2F5cyBub256ZXJvLgorCitNb24gTWF5ICA2IDExOjMzOjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBDaGVjayAtZm5vLWNvbW1vbiBoZXJlLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogSW5zdGVhZCBvZiBoZXJlLgorCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogTGlrZXdpc2UuCisJKiBjLWNvbW1vbi5jIChpbml0X2F0dHJpYnV0ZXMsIGRlY2xfYXR0cmlidXRlcyk6IEFkZCBBX0NPTU1PTi4KKworTW9uIE1heSAgNiAxMToxMjozOSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IEFkZCB0aGlyZCBwYXJhbWV0ZXIgdG8ga25vdyB3aGVuIHRvCisJaWdub3JlIHRoZSByZXN1bHQgdmFsdWUuCisJKHN0b3JlX2NvbnN0cnVjdG9yKTogTGlrZXdpc2UKKwkoZXhwYW5kX2V4cHIsIGNhc2Uge1BSRSxQT1NUfXtJTkMsREVDfVJFTUVOVF9FWFBSKTogTGlrZXdpc2UuCisJKiB0cmVlLmMgKHN0YWJpbGl6ZV9yZWZlcmVuY2UpOiBBbHdheXMgaWdub3JlIHRoZSBmaXJzdCBvcGVyYW5kIG9mCisJQ09NUE9VTkRfRVhQUnMuCisKK01vbiBNYXkgIDYgMTM6MTQ6NDUgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5jIChnZW5fc2hpZnR5X29wKTogVHJ1bmNhdGUgVkFMVUUgdG8gYXZvaWQgb3V0IG9mIGJvdW5kcyBhcnJheQorCWFjY2Vzcy4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBJTkRJUkVDVF9SRUYpOiBEZWxldGUgb2Jzb2xldGUgY29kZQorCXRvIHNwZWNpYWwgY2FzZSBhIFNBVkVfRVhQUiBvcGVyYW5kLgorCitNb24gTWF5ICA2IDEwOjAwOjEyIDE5OTYgIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgorCisJKiB2YXguaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IERlZmluZS4KKworTW9uIE1heSAgNiAwOTo0OToxMCAxOTk2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogbTY4ay9saW51eC5oOiBVc2UgdGhlIG5ldyB0cmFtcG9saW5lIGRlZmluaXRpb24uCisJKFRSQU1QT0xJTkVfVEVNUExBVEUsIFRSQU1QT0xJTkVfU0laRSk6IERlbGV0ZWQuCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IENoYW5nZWQuCisJKEZJTkFMSVpFX1RSQU1QT0xJTkUsIENMRUFSX0lOU05fQ0FDSEUpOiBOZXcuCisKK01vbiBNYXkgIDYgMDk6NDM6NTUgMTk5NiAgUGF0cmljayBKLiBMb1ByZXN0aSAgKHBhdGxAbGNzLm1pdC5lZHUpCisKKwkqIHJ0bGFuYWwuYyAocnR4X2FkZHJfdmFyaWVzX3ApOiBTY2FuIG9wZXJhbmRzIG9mIHR5cGUgYEUnLgorCitNb24gTWF5ICA2IDA5OjA0OjQwIDE5OTYgIEguSi4gTHUgIChoamxAZ251LmFpLm1pdC5lZHUpCisKKwkqIHgtbGludXh7LC1hb3V0fSAoQk9PVF9DRkxBR1MsIFNUTVBfRklYUFJPVE8sIFNUTVBfRklYUFJPVE8pOiBEZWxldGVkLgorCSogY29uZmlnL3QtbGludXggKEJPT1RfQ0ZMQUdTLCBTVE1QX0ZJWFBST1RPLCBTVE1QX0ZJWFBST1RPKTogTmV3LAorCW1vdmVkIGZyb20geC1saW51eC4KKwkqIHQtbGludXgtYW91dDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGlbMzQ1Nl04Ni0qLWxpbnV4Km9sZGxkKiwgaVszNDU2XTg2LSotbGludXgqYW91dCopOgorCVNldCB0bWFrZV9maWxlIHRvIHQtbGludXgtYW91dC4KKworU3VuIE1heSAgNSAyMjoxMzoyMiAxOTk2ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogQ2hhbmdlIHRvICQocHJlZml4KS9pbmNsdWRlL2crKy4KKwkob2xkX2d4eF9pbmNsdWRlX2Rpcik6IE5ldyAtIGRlZmluZWQgYXMgJChsaWJkaXIpL2crKy1pbmNsdWRlLgorCShjY2NwLm8sIGNwcGxpYi5vKTogQWxzbyBwYXNzIE9MRF9HUExVU1BMVVNfSU5DTFVERV9ESVIgKHNldAorCWZyb20gJChvbGRfZ3h4X2luY2x1ZGVfZGlyKSkuCisJKiBjY2NwLmMgKGluY2x1ZGVfZGVmYXVsdHNfYXJyYXkpOiBGb3IgQysrLCBhbHNvIHNlYXJjaAorCU9MRF9HUExVU1BMVVNfSU5DTFVERV9ESVIuCisJKiBjcHBsaWIuYyAoZGVmYXVsdF9pbmNsdWRlKTogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IFJlbW92ZSBuby1sb25nZXItbmVlZGVkIHN1cHBvcnQgZm9yIC0tZ3h4LWluY2x1ZGUtZGlyLgorCitTdW4gTWF5ICA1IDIxOjU5OjUzIDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogRml4ICNwcmFnbWEgcGFyc2luZzsgaXNzdWUgZXJyb3IgbWVzc2FnZQorIAlmb3IgZGlyZWN0aXZlIHRoYXQgc3RhcnRzIHdpdGggYHAnIGJ1dCBpc24ndCBgcHJhZ21hJy4KKworU3VuIE1heSAgNSAxMzoxMzo0MCAxOTk2ICBKZXJlbXkgQmV0dGlzICA8amVyZW15QGhrc3lzLmNvbT4KKworCSogb2JqYy9oYXNoLmMgKGhhc2hfdmFsdWVfZm9yX2tleSk6IFByZXZlbnQgZW5kbGVzcyBsb29wIHdoZW4gMCB3YXMKKwlzdG9yZWQgaW4gYSBoYXNodGFibGUuCisKK1N1biBNYXkgIDUgMTM6MDk6NTQgMTk5NiAgU2F0b3NoaSBBZGFjaGkgIChhZGFjaGlAd2lzZG9tLmFhLmFwLnRpdGVjaC5hYy5qcCkKKworCSogbTY4ay9uZXdzZ2FzLmggKFNFVF9BU01fT1AsIEFTTV9XRUFLRU5fTEFCRUwpOiBEZWZpbmUuCisKK1N1biBNYXkgIDUgMTI6NDg6MDggMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHRyZWUuYyAoYnVpbGRfcmVhbF9mcm9tX2ludF9jc3QpOiBSZW1vdmUgc3B1cmlvdXMgdGVzdCBmb3IKKwkgUkVBTF9JU19OT1RfRE9VQkxFLgorCitTYXQgTWF5ICA0IDEyOjE3OjU4IDE5OTYgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybWx0ZC5jby51aykKKworCSogYXJtLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBNb3ZlZCBoZXJlIGZyb20gYW91dC5oLiAgUmV3cml0ZSB0byBiZQorCWluZGVwZW5kZW50IG9mIHRoZSBzZWxlY3RlZCBhc3NlbWJsZXIsIGFuZCB0byB1c2Ugb3B0aW1hbCBudW1iZXIgb2YKKwlpbnN0cnVjdGlvbnMuCisJKiBhcm0vYW91dC5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogRGVsZXRlLgorCisJKiBhcm0vYW91dC5oIChBU01fT1VUUFVUX09QVElPTlMpOiBEZWZpbmUuCisJKEFTTV9GSUxFX1NUQVJUKTogQ2FsbCBBU01fT1VUUFVUX09QVElPTlMuCisJKEJTU19TRUNUSU9OX09QKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0FMSUdOKTogRG9uJ3Qgb3V0cHV0IGFueXRoaW5nIGlmIGJ5dGUgYWxpZ25tZW50IGlzIHdhbnRlZC4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IERlZmluZS4KKwkqIGFybS5oICh0YXJnZXRfY3B1X25hbWUpOiBEZWxldGUuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSAiYmUiIGFuZCAibGUiLgorCShUQVJHRVRfT1BUSU9OUyk6IERlbGV0ZSAiY3B1LSIsIGFkZCAidHVuZT0iLgorCShzdHJ1Y3QgYXJtX2NwdV9zZWxlY3QpOiBOZXcgc3RydWN0LgorCShQUk9DRVNTT1JfREVGQVVMVCwgVEFSR0VUX0NQVV9ERUZBVUxUKTogRGVmaW5lLgorCShFWFRSQV9DQ19NT0RFUywgRVhUUkFfQ0NfTkFNRVMpOiBBZGQgQ0NfQ21vZGUuCisJKENBTk9OSUNBTElaRV9DT01QQVJJU09OKTogRGVmaW5lLgorCSogYXJtLmMgKGFybV9zZWxlY3QpOiBEZWNsYXJlIGFuZCBpbml0aWFsaXplLgorCShhbGxfcHJvY3MpOiBBZGQgYXJtNzEwMC4KKwkoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBQYXJzZSBhcm1fc2VsZWN0IHN0cnVjdHVyZSB0byBkZXRlcm1pbmUKKwlzZWxlY3RlZCBhcmNoaXRlY3R1cmUgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLgorCShvdXRwdXRfb3B0aW9uLCBvdXRwdXRfb3B0aW9ucyk6IE5ldyBmdW5jdGlvbnMuCisJKGFybV9jYW5vbmljYWxpemVfY29tcGFyaXNvbik6IE5ldyBmdW5jdGlvbi4KKwkoYXJtX2dlbl9tb3ZzdHJxaSk6IERvbid0IGFkZCBhIHdyaXRlYmFjayBvZiB0aGUgaW5kZXggcmVnaXN0ZXJzIGZvcgorCXRoZSBsYXN0IGluc3RydWN0aW9ucy4KKwkoYXJtX3NlbGVjdF9jY19tb2RlKTogRGV0ZWN0IGNhc2Ugd2hlcmUgbW9kZSBpcyBjYXJyeSBvdXQgb2YgdW5zaWduZWQKKwlhcml0aG1ldGljLgorCShvdXRwdXRfbGNvbW1fZGlyZWN0aXZlKTogVXNlIGJzc19zZWN0aW9uICgpLCBhbmQgdXNlIGFsaWdubWVudAorCXJhdGhlciB0aGFuIHJvdW5kaW5nLgorCShnZXRfYXJtX2NvbmRpdGlvbl9jb2RlKTogSGFuZGxlIENDX0Ntb2RlLgorCShmaW5hbF9wcmVzY2FuX2luc24pOiBBdm9pZCBib3VuZGFyeSBjYXNlIHdoZXJlIHdlIHdvdWxkIG9jY2FzaW9uYWxseQorCWlubGluZSBNQVhfSU5TTlNfU0tJUFBFRCsxIGluc25zLiAgQWxsb3cgY2FsbF9pbnNucyB0byBiZSBpbmxpbmVkIGluCisJQVBDU18zMiBtb2RlIGlmIHRoZXkgYXJlIHRoZSBsYXN0IGluc24gaW4gdGhlIGJsb2NrLgorCSogYXJtLm1kICgqYWRkc2kzX2NvbXBhcmVuZWcpOiBEZWxldGUgcG90ZW50aWFsbHkgdW5zYWZlIGluc24uCisJKCphZGRzaTNfY29tcGFyZV9vcFsxMl0pOiBOZXcgaW5zbnMuCisJKCpjb21wYXJlX2FkZHNpMl9vcFswMV0pOiBOZXcgaW5zbnMuCisJKCphZGRzaTNfY2FycnlpbiwgKmFkZHNpM19jYXJyeWluX2FsdFsxMl0pOiBOZXcgaW5zbnMuCisJKCpjbXBfaXRlMSk6IFVzZSBhcm1fYWRkX29wZXJhbmQgaW5zdGVhZCBvZiBhcm1fcmhzX29wZXJhbmQuCisJKiBzZW1pLmggKFBST0NFU1NPUl9ERUZBVUxUKTogRGVmYXVsdCB0byBQUk9DRVNTT1JfQVJNNi4KKworRnJpIE1heSAgMyAxMDo1MjoxMSAxOTk2IDE5OTYgIFN0YW4gQ294ICAoY294c0BkZy1ydHAuZGcuY29tKQorCisJKiBpMzg2Lm1kIChtb3Zlc2ljYywgbW92ZWhpY2MpIFBlbnRpdW0gUHJvIGNvbmRpdGlvbmFsIG1vdmUgaW5zbnMuCisKKwkqIGkzODYuaCAoVEFSR0VUX1BFTlRJVU1QUk8sIFRBUkdFVF9DTU9WRSwgQlJBTkNIX0NPU1QsCisJQVNNX09VVFBVVF9GVU5DVElPTl9QUkVGSVgpOiBOZXcgbWFjcm9zIGZvciBjb25kaXRpb25hbCBtb3ZlLgorCisJKiBpMzg2LmMgKGFzbV9vdXRwdXRfZnVuY3Rpb25fcHJlZml4LCBmdW5jdGlvbl9wcm9sb2d1ZSk6IFNldHVwCisJcGljIG9uIFBlbnRpdW0gUHJvIHNvIGEgcmV0dXJuIHdpbGwgbWF0Y2ggdGhlIGNhbGwuCisJKHByaW50X29wZXJhbmQsIHB1dF9jb25kaXRpb25fY29kZSk6IE91dHB1dCBjb25kaXRpb25hbCBtb3ZlIHN1ZmZpeGVzLgorCitGcmkgTWF5ICAzIDEwOjUyOjExIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogaTM4Ni97YXR0LmgsZ2FzLmgsYnNkLmgsc3ViMzg2Lmh9IChBU01fT1VUUFVUX01JX1RIVU5LKTogRGVmaW5lLgorCitXZWQgTWF5ICAxIDE3OjU0OjUxIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IEZpeCBmb3Igc3BhcmM2NCwgb3B0aW1pemUuCisKK1dlZCBNYXkgIDEgMTM6Mjg6MzIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBpMzg2L2xpbnV4LmggKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBEZWZpbmUuCisJKiBpMzg2L3N5c3Y0Lmg6IExpa2V3aXNlLgorCSogc3BhcmMvc3lzdjQuaDogTGlrZXdpc2UuCisKK1dlZCBNYXkgIDEgMDE6NDQ6NDcgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuYyAoaDgzMDBfYWRqdXN0X2luc25fbGVuZ3RoKTogQWRqdXN0IHRoZSBjb3N0IG9mCisJc2hpZnRzIGJ5IHNtYWxsIGNvbnN0YW50IHZhbHVlcy4KKwkqIGg4MzAwL2g4MzAwLm1kOiBSZWZpbmUgY29tbWVudHMuICBSZW1vdmUgbmFtZXMgZnJvbSBtYW55CisJcGF0dGVybnMgd2hpY2ggZG9uJ3QgbmVlZCB0aGVtLgorCShjb21wYXJlIGluc25zKTogRG9uJ3QgdW5kZXJlc3RpbWF0ZSBsZW5ndGhzLgorCShhbmRxaTMgZXhwYW5kZXIpOiBSZW1vdmUgY29uc3RyYWlucy4KKwkoYW5kaGkzKTogRG9uJ3QgdW5kZXJlc3RpbWF0ZSBsZW5ndGguCisJKGFuZHNpMyk6IERvbid0IHVuZGVyZXN0aW1hdGUgbGVuZ3RoLiAgSW1wcm92ZSBjb2RlIHdoZW4gdXBwZXIKKwlvciBsb3dlciBoYWxmIG9mIGRlc3RpbmF0aW9uIGlzIGJlaW5nIGNsZWFyZWQuCisJKGluZGlyZWN0X2p1bXBfaDgzMDAsIGluZGlyZWN0X2p1bXBfaDgzMDBoKTogU2ltcGxpZnkuCisJKHNoaWZ0IGluc25zKTogUmVtb3ZlIHVzZWxlc3MgIkkiIGNvbnN0cmFpbnQuCisKKwkqIGg4MzAwL2g4MzAwLm1kIChiY3MgdHlwZSk6IFJlbW92ZSAiYmNzIiB0eXBlIGF0dHJpYnV0ZSBhbmQKKwlhbGwgcmVmZXJlbmNlcy4KKwkoYmNzIGluc25zKTogRGVsZXRlLiAgTm8gbG9uZ2VyIG5lZWRlZC4KKwkoc2V0Y2MgZnJvbSBiaXRmaWVsZCk6IFJld3JpdGUgdG8gdXNlIHplcm9fZXh0cmFjdC4gIFByb3ZpZGUKKwlRSW1vZGUsIEhJbW9kZSBhbmQgU0ltb2RlIHZhcmlhbnRzLgorCitUdWUgQXByIDMwIDE4OjEzOjA5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogc3ZyNC5oIChTRUxFQ1RfU0VDVElPTik6IElmIFJFTE9DIGlzIHRydWUsIHB1dCBpdCBpbiBkYXRhLgorCitUdWUgQXByIDMwIDE3OjI2OjMwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogRG9uJ3QgY2FsbCBjb252ZXJ0IHRvIHJlY3JlYXRlIHRyZWUgbm9kZXMKKwl3ZSBhbHJlYWR5IGhhdmUuCisKK1R1ZSBBcHIgMzAgMTY6NTI6NDEgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuYyAob25lX2luc25fYWRkc19zdWJzX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGg4MzAwX2FkanVzdF9pbnNuX2xlbmd0aCk6IE5ldyBmdW5jdGlvbi4KKwkqIGg4MzAwL2g4MzAwLmggKEFESlVTVF9JTlNOX0xFTkdUSCk6IERlZmluZS4KKwkqIGg4MzAwL2g4MzAwLm1kOiBSZW1vdmUgb2Jzb2xldGUgY29tbWVudHMuCisJKG1vdmUgcGF0dGVybnMpOiBUd2VhayBjb25zdHJhaW50cy4KKwkodHN0IHBhdHRlcm5zKTogVXNlICJyZWdpc3Rlcl9vcGVyYW5kIiBmb3IgcHJlZGljYXRlLgorCShhZGRzIHBhdHRlcm4pOiBVc2Ugb25lX2luc25fYWRkc19zdWJzX29wZXJhbmQgdG8gZ2V0IGxlbmd0aAorCWNvbXB1dGF0aW9uIGNvcnJlY3QuCisJKHN1YnMgcGF0dGVybik6IFNpbWlsYXJseS4KKwkobW92c3RyaGkpOiBSZW1vdmUgdW51c2VkIGV4cGFuZGVyLgorCShmYW5jeSosIHB4b3IsIGFuZC1ub3QgcGF0dGVybnMpOiBSZW1vdmUuICBObyBsb25nZXIgbmVlZGVkLgorCitUdWUgQXByIDMwIDEzOjM1OjA2IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3NvbC1jMC5jIChfc3RhcnQpOiBUZW1wb3JhcmlseSBkaXNwbGF5IGNhbGxpbmcKKwlfX2RvX2dsb2JhbF9jdG9ycywgc2luY2UgdGhlIFNvbGFyaXMgbGlua2VyIGRvZXNuJ3QgaGFuZGxlIHRoZQorCXJlbG9jYXRpb25zIHByb3Blcmx5LgorCitNb24gQXByIDI5IDEzOjAzOjEyIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lndW5zLmNvbT4KKworCSogc3BhcmMvdnhzcGFyYy5oOiBzcGFyYy1hb3V0LmggcmVuYW1lZCB0byBhb3V0LmguCisKK01vbiBBcHIgMjkgMDA6MzU6MTUgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuYyAobmFtZXNfc21hbGwpOiBSZW1vdmUgIkJBRCIgcG9zdGZpeCBmcm9tCisJJXI3IGJ5dGUgcmVnaXN0ZXJzLgorCShydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycyk6IFJlbW92ZSBleHRyYSBkZWNsYXJhdGlvbi4KKwkob3V0cHV0X3NpbW9kZV9ibGQpOiBOZXcgZnVuY3Rpb24uCisJKiBoODMwMC9oODMwMC5oIChOT19GVU5DVElPTl9DU0UpOiBEbyBkZWZpbmUgdGhpcy4gIFJlZ2lzdGVyCisJcHJlc3N1cmUgbWFrZXMgY3NlLWluZyBmdW5jdGlvbiBhZGRyZXNzZXMgcmFyZWx5IGEgd2luLgorCShyZWdfY2xhc3MpOiBSZW1vdmUgdW5uZWNlc3NhcnkgcmVnaXN0ZXIgY2xhc3NlcyBMT05HX1JFR1MsCisJU1BfUkVHLCBTUF9BTkRfR19SRUdTLgorCShSRUdfQ0xBU1NfTkFNRVMpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisJKFJFR19DTEFTU19DT05URU5UUyk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKwkoUkVHTk9fUkVHX0NMQVNTKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBDb3JyZXNwb25kaW5nIGNoYWduZXMuCisJKG91dHB1dF9zaW1vZGVfYmxkKTogRGVjbGFyZS4KKwkqIGg4MzAwL2g4MzAwLm1kOiBOdWtlIGNvbW1lbnRzIGZvciBzdHVmZiB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKwkoYWxsIHBhdHRlcm5zKTogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gcmVnaXN0ZXIgY2xhc3MgImEiIChTUF9SRUdTKQorCXdoaWNoIG5vIGxvbmdlciBleGlzdHMuCisJKG1hbnkgcGF0dGVybnMpOiBBY2NlcHQgYXV0by1pbmMgYXV0by1kZWMgYWRkcmVzc2VzIGluIG1vcmUgY2FzZXMuCisJKHplcm9fZXh0ZW5kcWlzaTIpOiBOZXcgcGF0dGVybiBmb3IgdGhlIEg4LzMwMC4KKwkoemVyb19leHRlbmRoaXNpMik6IE9ubHkgdXNlIHplcm9fZXh0ZW5kaGlzaTJfaDgzMDAgd2hlbiBub3Qgb3B0aW1pemluZy4KKwkoZXh0ZW5kaGlzaTIpOiBPbmx5IHVzZSBleHRlbmRoaXNpMl9oODMwMCB3aGVuIG5vdCBvcHRpbWl6aW5nLgorCShleHRlbmRxaXNpMik6IE5ldyBwYXR0ZXJuIGZvciB0aGUgSDgvMzAwLgorCShiaXRmaWVsZCByZWxhdGVkIHBhdHRlcm5zKTogQ29tcGxldGVseSByZXdyaXRlLgorCShmYW5jeV9iY2xyLCBmYW5jeV9idHN0KTogRGVsZXRlZC4gIFJlZHVuZGFudCB3aXRoIG5ldyBiaXRmaWVsZAorCXBhdHRlcm5zLgorCShhZGRoaTMgcGF0dGVybiBmb3IgaDgzMDApOiBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBjYW4ndCBtYWtlIG1hdGNoaW5nCisJY29uc3RyYWludHMgKHdvcmtzIGFyb3VuZCBoYXJkIHRvIGZpeCByZWxvYWQgcHJvYmxlbSkuCisJKHN0YWNrX3BvaW50ZXJfbWFuaXApOiBEZWxldGUuCisJKGFuZCBub3QgcGF0dGVybnMpOiBOZXcgY29tYmluZXIgcGF0dGVybnMuCisKKwkqIHBhL3BhLmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBNYWtlIHN1cmUgdGhlCisJZmluYWwgJENPREUkIHN1YnNwYWNlIGlzIGluIHRoZSAkVEVYVCQgc3BhY2UuCisKK1N1biBBcHIgMjggMTQ6NTI6MjEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBzdnI0LmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogSWYgbm8gZGVjbCBpcyBzcGVjaWZpZWQsCisgCW1ha2UgdGhlIHNlY3Rpb24gcmVhZC93cml0ZSBkYXRhLgorCitTYXQgQXByIDI3IDEwOjI4OjU5IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB3b2dnbGVidWcudGlhYy5uZXQ+CisKKwkqIHJzNjAwMC90LXBwY2dhcyAoTVVMVElMSUJfRVhDRVBUSU9OUyk6IERvbid0IGFsbG93IC1tcmVsb2NhdGFibGUKKwlhbmQgLW1jYWxsLXN5c3Ytbm9lYWJpLgorCisJKiByczYwMDAvc3lzdi5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IFRoZSAtbWNhbGwtYWl4CisJb3B0aW9uIHNldHMgLW1lYWJpLiAgRG9uJ3QgYWxsb3cgLW1yZWxvY2F0YWJsZSB3aXRob3V0IC1tZWFiaS4KKworRnJpIEFwciAyNiAxNjoxMDo0NiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjL3NwYXJjLm1kICgqc21hY3NpLCpzbWFjZGksKnVtYWNkaSk6IEZpeCBjb25zdHJhaW50IG9uCisJb3BlcmFuZCAwLgorCitGcmkgQXByIDI2IDE0OjM2OjMzIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogZ2NjL2NvbmZpZy9pOTYwL3Qtezk2MGJhcmUsdnh3b3Jrczk2MH0gKE1VTFRJTElCKik6IEFkZAorCXNvZnQtZmxvYXQgbXVsdGlsaWIgc3VwcG9ydC4KKworRnJpIEFwciAyNiAwNjozODo1NiAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IFR1cm4gb2ZmIERFQ0xfQklUX0ZJRUxEIGZvciBCTEttb2RlCisJdGhhdCdzIHByb3Blcmx5IGFsaWduZWQgYW5kIGEgbXVsdGlwbGUgb2YgYSBieXRlLgorCitUaHUgQXByIDI1IDIyOjQzOjE5IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogaTM4Ni9nYXMuaCAoQVNNX09VVFBVVF9BTElHTik6ICNpZiAwIG91dCBhZ2Fpbi4KKwlVbmRvZXMgY2hhbmdlIG9mIEFwci4gOS4KKwkqIGkzODYvZ28zMi5oIChBU01fT1VUUFVUX0FMSUdOKTogRGVmaW5lLgorCitUaHUgQXByIDI1IDE0OjA1OjMzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVydmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJbiBpbmxpbmluZyBjYXNlLCBpZiBCRUZPUkVfQ0FMTFMgaXMKKwl6ZXJvLCBzdGFydCBsb29raW5nIGF0IGZpcnN0IGluc24gKG9uZSBtb3JlIHBsYWNlKS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9TRVRKTVApOiBDTE9CQkVSIHRoZQorCXN0YXRpYyBjaGFpbiBhZnRlciBsYWJlbCBhdCBzZXRqbXAgcG9pbnQuCisKK1RodSBBcHIgMjUgMDk6MDI6MjQgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZHssX2FkZHJlc3N9KTogQ29ycmVjdCBjb21waWxlIGVycm9yIGlmCisJVEFSR0VUX0VBQkkgaXMgbm90IGRlZmluZWQuICBBbHNvLCBqdXN0IGNhbGwgc21hbGxfZGF0YV9vcGVyYW5kLAorCXdpdGhvdXQgdGVzdGluZyB0aGUgQUJJLgorCShyczYwMDBfc2VsZWN0X3NlY3Rpb24pOiBEaXR0by4KKworCSogcnM2MDAwL3N5c3Y0LmggKENDMV9TUEVDKTogRm9yIC1tY2FsbC1zb2xhcmlzLCBkb24ndCBwYXNzCisJLW1uby1tYWluLWluaXQuCisKK1dlZCBBcHIgMjQgMTg6MjY6NDggMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBjb2xsZWN0Mi5jIChoYW5kbGVyKTogRGVsZXRlIGV4cG9ydF9maWxlIHdoZW4gd2UgZ2V0IGEgc2lnbmFsLgorCitXZWQgQXByIDI0IDE0OjU0OjQ0IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhL3BhMS1naHB1eC5oIChMSU5LX1NQRUMpOiBEZWZpbmUuICBMaW5rIGluIFBBMS4xIGxpYnJhcmllcworCWJ5IGRlZmF1bHQuCisJKiBwYS97cGExLWdocHV4OS5oLCBwYTEtaHB1eC5oLCBwYTEtaHB1eDkuaH06IExpa2V3aXNlLgorCitXZWQgQXByIDI0IDExOjEyOjA2IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChwb3dlcnBjeyxsZX0tKi1lYWJpKik6IFVzZSB0LXBwY3ssZ2FzfSwgaW5zdGVhZCBvZgorCXQtZWFiaXssZ2FzfS4KKwkocG93ZXJwYy0qLWxpbnV4LHBvd2VycGNsZS0qLXNvbGFyaXMpOiBBZGQgZGVmaW5pdGlvbnMuCisJKE1VTFRJTElCX0RJUk5BTUVTKTogUGljayBzaG9ydGVyIG5hbWVzIGZvciB0aGUgbXVsdGlsaWIKKwlkaXJlY3Rvcmllcy4KKwkoTVVMVElMSUJfKik6IERvIG5vdCBidWlsZCAtbXNkYXRhIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LiAgQnVpbGQKKwlib3RoIHN5c3RlbSBWIGFuZCBlYWJpIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJpZXMuCisKKwkqIHJzNjAwMC90LXBwY3ssZ2FzfSAoTVVMVElMSUIqKTogRG9uJ3QgYnVpbGQgLW1zZGF0YSB2ZXJzaW9ucyBvZgorCXRoZSBsaWJyYXJpZXMuICBTcGxpdCAtbWNhbGwtc3lzdiBsaWJyYXJpZXMgaW50bworCS1tY2FsbC1zeXN2LXtlYWJpLG5vZWFiaX0gdmFyaWVudHMuCisJKExJQjJGVU5DU19FWFRSQSk6IEFkZCBlYWJpLlMsIGVhYmktY3RvcnMuYy4KKwkoZWFiaS5TKTogVXNlIGVhYmkuUywgbm90IGVhYmkucyBmb3IgZWFiaS5hc20uCisJKGNydCBmaWxlcyk6IEFkZCBzdXBwb3J0IGZvciBTb2xhcmlzIGNydCBmaWxlcy4KKworCSogcnM2MDAwL3NvbHsyLmgsLWMwLmMsLWNpLmFzbSwtY24uYXNtfTogTmV3IGZpbGVzIGZvciBTb2xhcmlzCisJc3VwcG9ydC4KKworCSogcnM2MDAwL2xpbnV4Lmg6IE5ldyBmaWxlIGZvciBMaW51eCBzdXBwb3J0LgorCisJKiByczYwMDAvZWFiaS1jaS5hc20gKHBwYy1hc20uaCk6IEluY2x1ZGUuCisJKC5nb3Qgc2VjdGlvbik6IENvcnJlY3QgYXR0cmlidXRlLgorCisJKiByczYwMDAvZWFiaS1je2ksbn0uYXNtICguaW5pdCwuZmluaXQpOiBBZGQgc3VwcG9ydCBmb3IgU3lzdGVtIFYKKwlzdHlsZSAuaW5pdC8uZmluaSBzZWN0aW9ucywgdGhhdCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzCisJcGxhY2UgYSBibCA8ZnVuYz4gaW4gdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24uCisKKwkqIHJzNjAwMC9lYWJpLWN0b3JzLmMgKF9fZG9fZ2xvYmFsX3tjLGR9dG9ycyk6IENhbGwgX19pbml0LCBhbmQKKwlfX2ZpbmkgdG8gaGFuZGxlIGNvbnN0cnVjdG9ycy9kZXN0cnVjdG9ycyBpbiB0aGUgLmluaXQsIC5maW5pCisJc2VjdGlvbnMuCisKKwkqIHJzNjAwMC97ZWFiaSxzeXN2fS5oOiBNb3ZlIG1vc3QgZWFiaSBjb25maWd1cmF0aW9uIHN0dWZmIGZyb20KKwllYWJpLmggdG8gc3lzdi5oLgorCisJKiByczYwMDAvc3lzdi5oIChUQVJHRVRfKik6IENvbnZlcnQgLW1jYWxsLXh4eCBmcm9tIGEgc3dpdGNoIGludG8KKwlhbiBvcHRpb24uICBBZGQgLW1jYWxsLXtzb2xhcmlzLGxpbnV4LHN5c3YtZWFiaSxzeXN2LW5vZWFiaX0KKwlvcHRpb25zLiAgQWRkIC1teyxuby19ZWFiaSBvcHRpb25zIHRvIGNvbnRyb2wgd2hldGhlciB3ZSBhZGhlcmUgdG8KKwl0aGUgU3lzdGVtIFYgc3BlYyBvciB0aGUgRUFCSSBzcGVjLiAgQWRkIC1teyxuby19cmVnbmFtZXMgdG8KKwljb250cm9sIHdoZXRoZXIgcmVnaXN0ZXJzIGFyZSBwcmludGVkIG91dCBhcyAlcjAgaW5zdGVhZCBvZiAwLgorCShTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBzdXBwb3J0IGZvciBuZXcgLW1jYWxsIG9wdGlvbnMuCisJKEZQX0FSR19NQVhfUkVHKTogVXNlIG5ldyBtYWNyb3MgZm9yIEFCSSBjb25mb3JtYW5jZS4KKwkoUlM2MDAwX1JFR19TQVZFKTogRGl0dG8uCisJKFNUQUNLX0JPVU5EQVJZLEJJR0dFU1RfQUxJR05NRU5UKTogSWYgZWFiaSwgYWxpZ24gdG8gOCBieXRlCisJYm91bmRhcnksIG90aGVyd2lzZSAxNiBieXRlLgorCShFWFRSQV9TRUNUSU9OUyk6IEFkZCAuaW5pdCwgLmZpbmkgc2VjdGlvbnMuCisJKCpfU1BFQyk6IFJlb3JnYW5pemUgc28gdGhhdCB0aGUgZGlmZmVyZW50IHRhcmdldHMgYWxsIGhhdmUgc3ViCisJc3BlY3MgdGhhdCBnbyBpbiB0aGUgc3BlY3MgZmlsZS4gIEFkZCBzdXBwb3J0IGZvciBsaW51eCBhbmQKKwlTb2xhcmlzIHRhcmdldHMuCisKKwkqIHJzNjAwMC97c3lzdjQsZWFiaX0qLmggKCpfU1BFQ1MpOiBPbmx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0CisJc3BlYywgYWxsIG90aGVyIHNwZWNzIG1vdmVkIHRvIHN5c3Y0LmguCisJKFJTNjAwMF9BQklfTkFNRSk6IFVzZSBSUzYwMDBfQUJJX05BTUUgdG8gc2V0IHRoZSBkZWZhdWx0IEFCSQorCW5hbWUsIG5vdCBUQVJHRVRfREVGQVVMVFMuCisKKwkqIHJzNjAwMC94bS1zeXN2NC5oIChhbGxvY2EpOiBQcm9wZXJseSBkZWNsYXJlIGFsbG9jYSBpZiBjb21waWxlcgorCWlzIG5vdCBHQ0MuCisJKERPTlRfREVDTEFSRV9TWVNfU0lHTElTVCk6IERlZmluZS4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9hYmlfbmFtZSk6IE5ldyBnbG9iYWwgZm9yIGdldHRpbmcgdGhlIHJlc3VsdHMKKwlvZiAtbWNhbGwteHh4LgorCShyczYwMDBfcmVnX25hbWVzKTogTmV3IGdsb2JhbCBmb3IgaG9sZGluZyB0aGUgbm9ybWFsIHJlZ2lzdGVyCisJbmFtZXMuCisJKGFsdF9yZWdfbmFtZXMpOiBBbHRlcm5hdGUgcmVnaXN0ZXIgbmFtZXMgZm9yIC1tcmVnbmFtZXMuCisJKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogSWYgLW1yZWduYW1lcywgY29weSBhbHRfcmVnX25hbWVzIGludG8KKwlyczYwMDBfcmVnX25hbWVzLgorCShpbnB1dF9vcGVyYW5kKTogUmVjb2duaXplIEFCSV9TT0xBUklTLgorCShzbWFsbF9kYXRhX29wZXJhbmQpOiBEaXR0by4KKwkoaW5pdF9jdW11bGF0aXZlX2FyZ3MpOiBEaXR0by4KKwkoZnVuY3Rpb25fYXJneyxfYm91bmRhcnksX2FkdmFuY2UsX3BhcnRpYWxfbnJlZ3N9KTogRGl0dG8uCisJKGZ1bmN0aW9uX2FyZ19wYXNzX2J5X3JlZmVyZW5jZSk6IERpdHRvLgorCShzZXR1cF9pbmNvbWluZ192YXJhcmdzKTogRGl0dG8uCisJKHtyczYwMDAsZGVidWd9X3N0YWNrX2luZm8pOiBEaXR0by4KKwkob3V0cHV0X3twcm9sb2csZXBpbG9nfSk6IERpdHRvLgorCShwcmludF9vcGVyYW5kKTogJSQgcHJpbnRzICcuJyBvbiBTb2xhcmlzLCAnJCcgZWxzZXdoZXJlLgorCShwcmludF9vcGVyYW5keyxfYWRkcmVzc30pOiBJZiBub3QgZWFiaSwgdXNlIEBzZGFyZWwgZm9yIHNtYWxsCisJZGF0YSByZWZlcmVuY2VzLgorCShyczYwMDBfc3RhY2tfaW5mbyk6IE9ubHkgZW1pdCBfX2VhYmkgY2FsbCBpZiBUQVJHRVRfRUFCSS4KKworCSogcnM2MDAwLmggKCpfU1BFQ1MpOiBNb3ZlIHRoZSBTeXN0ZW0gViBzcGVjcyB0byBzdnI0LmguCisJKEFCSV9TT0xBUklTKTogTmV3IEFCSSwgbW9zdGx5IGxpa2UgU3lzdGVtIFYuCisJKEVYVFJBX0NPTlNUUkFJTlQpOiBVc2UgQUJJX1NPTEFSSVMgbGlrZSBBQklfVjQuCisJKFJFVFVSTl9BRERSRVNTX09GRlNFVCk6IERpdHRvLgorCShMRUdJVElNQVRFX1NNQUxMX0RBVEFfUCk6IERpdHRvLgorCShSRVRVUk5fSU5fTUVNT1JZKTogT24gU29sYXJpcywgc21hbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQgaW4KKwlyZWdpc3RlcnMuCisJKFJFR0lTVEVSX05BTUVTKTogVXNlIHJzNjAwMF9yZWdfbmFtZXMgYXJyYXksIGluc3RlYWQgb2Ygc3RyaW5nCisJbGl0ZXJhbHMuCisJKERFQlVHX1JFR0lTVEVSX05BTUVTKTogRGVmaW5lLgorCShBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTKTogQWRkIHNwLCB0b2MgYWxpYXNlcy4KKwkoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogUmVjb2duaXplICQgYXMgYSBwdW5jdHVhdGlvbiBjaGFyLgorCisJKiByczYwMDAubWQgKGdvdCAmIGNhbGwgcGF0dGVybnMpOiBVc2UgQUJJX1NPTEFSSVMgdG8gbWVhbiB0aGUKKwlzYW1lIGFzIEFCSV9WNC4KKwkoYnJhbmNoIHBhdHRlcm5zKTogVXNlICUkIGZvciB0aGUgY3VycmVudCBsb2NhdGlvbiwgbm90IGp1c3QgJC4KKworCSogdmEtcHBjLmg6IEFkZCBTb2xhcmlzIHN1cHBvcnQuCisKK1R1ZSBBcHIgMjMgMjA6MDI6MTMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9zcGFyYy5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBJbiAtbWJyb2tlbi1zYXZlcmVzdG9yZQorCWNhc2UsICVzcCA9ICVmcCAtIHNpemUuCisJKiBzcGFyYy90LXNwbGV0IChUQVJHRVRfTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCisJKiBzcGFyYy9zcGFyYy5tZCAoaXNhIGF0dHJpYnV0ZSk6IEFkZCBzcGFyY2xldC4KKwkoKnNtYWNzaSwqc21hY2RpLCp1bWFjZGkpOiBVc2UgbWF0Y2hfb3BlcmFuZCwgbm90IG1hdGNoX2R1cAorCWZvciB0aGlyZCBhcmcuCisJKCptdWxzaWRpM19zcDMyLGNvbnN0X211bHNpZGkzLCp1bXVsc2lkaTNfc3AzMixjb25zdF91bXVsc2lkaTMpOiBVc2UKKwlzbXVsZCx1bXVsZCBmb3Igc3BhcmNsZXQuCisKK1R1ZSBBcHIgMjMgMTY6Mjg6MjggMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHdvbWJhdC5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnL202OGsvbTY4a2VtYi5oOiBBZGQge0xJTkssU1RBUlRGSUxFLExJQixTVUJUQVJHRVR9X1NQRUMsIHNvCisJZ2NjIHdpbGwgdXNlIGxpYmdsb3NzIGZvciBzdXBwb3J0ZWQgdGFyZ2V0IGJvYXJkcyB7aWRwLG12bWUsYmNjfS4KKworVHVlIEFwciAyMyAxNjowMDoyOCAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6ICBGaXggdGVzdCBmb3IgbWlzc2luZyBhcnJheSBlbGVtZW50cy4KKworVHVlIEFwciAyMyAxMToyMTowOSAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogY29uZmlnL2kzODYvc2NvNS5oIChCU1NfU0VDVElPTl9BU01fT1ApOiBVc2UgYGRhdGEnIGRpcmVjdGl2ZS4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogR2VuZXJhdGUgYW4gYGxjb21tJyBkaXJlY3RpdmUuCisJKFRBUkdFVF9ERUZBVUxUKTogSW5jbHVkZSBUQVJHRVRfSUVFRV9GUC4KKwkoQ1BQX1BSRURFRklORVMpOiBJbmNsdWRlIERpMzg2LgorCitNb24gQXByIDIyIDEyOjAwOjQ2IDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuaCAoQklHR0VTVF9GSUVMRF9BTElHTk1FTlQpOiBEZWxldGUuCisJKEFESlVTVF9GSUVMRF9BTElHTiwgUk9VTkRfVFlQRV9BTElHTik6IERlZmluZS4KKwkqIHN5c3Y0LmggKEJJR0dFU1RfRklFTERfQUxJR05NRU5UKTogRGVsZXRlLgorCShBREpVU1RfRklFTERfQUxJR04sIFJPVU5EX1RZUEVfQUxJR04pOiBVbmRlZmluZS4KKwkqIHdpbi1udC5oIChBREpVU1RfRklFTERfQUxJR04sIFJPVU5EX1RZUEVfQUxJR04pOiBVbmRlZmluZS4KKworU3VuIEFwciAyMSAxNzo1MjozNiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG02OGsvY29mZi5oIChBU01fT1VUUFVUX1NFQ1RJT04pOiBUZXN0IERFQ0wgYmVmb3JlCisJZGVyZWZlcmVuY2luZyBpdC4KKworCSogY3NlLmMgKGNzZV9wcm9jZXNzX25vdGVzKTogSGFuZGxlIFNVQlJFRyBsaWtlIFpFUk9fRVhURU5ELgorCitTdW4gQXByIDIxIDEyOjU3OjEyIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYXJtL2FvdXQuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IERlZmluZS4KKworU3VuIEFwciAyMSAwOTo1MDowOSAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogY2hvb3NlLXRlbXAuYzogSW5jbHVkZSBzeXMvdHlwZXMuaCBiZWZvcmUgc3lzL2ZpbGUuaCBmb3Igc2NvMy4ydjUuCisKK1N1biBBcHIgMjEgMDg6NDI6MTMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAoY2hlY2tfZmxvYXRfdmFsdWUpOiBDYXN0IGFyZ3Mgb2YgYmNvcHkgdG8gYXZvaWQgd2FybmluZ3MuCisKK1NhdCBBcHIgMjAgMjE6MjI6MjEgMTk5NiAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBtaHBjYy5lZHU+CisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBVc2UgQURKVVNUX0ZJRUxEX0FMSUdOIHRvIG1vZGlmeQorCWFsaWdubWVudCBvZiBmaWVsZHMgd2l0aGluIHJlY29yZHMuCisKK1NhdCBBcHIgMjAgMTk6NTU6MzMgMTk5NiAgTmllbHMgTW9sbGVyICA8bmlzc2VAbHlzYXRvci5saXUuc2U+CisKKwkqIGMtcGFyc2UuaW4gKHR5cGVzcGVjKTogTWFkZSA8U29tZVByb3RvY29sPiBlcXVpdmFsZW50CisJdG8gKGlkIDxTb21lUHJvdG9jb2w+KS4KKwkobm9uX2VtcHR5X3Byb3RvY29scmVmcyk6IE5ldyBub250ZXJtaW5hbC4KKworU2F0IEFwciAyMCAwODozNDowMiAxOTk2ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBtZW9seW9uLmhhbnNlLmRlKQorCisgICAgICAgICogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IENhbGwgY2FzZV90cmVlMmxpc3QKKwliZWZvcmUgY2hlY2tpbmcgZm9yIGNhc2UgZXhwcmVzc2lvbnMgbm90IGNvcnJlc3BvbmRpbmcgdG8gZW51bWVyYXRvcnMuCisJKG1hcmtfc2Vlbl9jYXNlcyk6IElmIFNQQVJTRU5FU1MgPT0gMiwgZXhwbG9pdCBBVkwgb3JkZXIuCisJRWxzZSwgY29udmVydCB0cmVlIHRvIGxpc3QuCisJU2V0IHhsbyB0byAtMSBpZiBTUEFSU0VORVNTID09IDEgc2VhcmNoIGZhaWxlZC4KKwkoZXhwYW5kX2VuZF9jYXNlKTogQXZvaWQgY2FsbGluZyBjYXNlX3RyZWUybGlzdCBvbiBsaXN0LgorCitGcmkgQXByIDE5IDE2OjU0OjU3IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3dpbi1udC5oIChCSUdHRVNUX0ZJRUxEX0FMSUdOTUVOVCk6IFNldCB0byA2NCwgbm90CisJMzIgdGhhdCBBSVggdXNlcy4KKworRnJpIEFwciAxOSAxNjo0MDozOCAxOTk2ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworCSogaTM4Ni5tZCAobW92cWkpOiBIYW5kbGUgUUltb2RlIHZhbHVlcyBpbiAlc2kgYW5kICVkaS4KKworVGh1IEFwciAxOCAyMDo1Njo1NiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNoLm1kIChsc2hyc2kzKTogQ2hhbmdlIGdlbl9hc2hsc2kzX2QgdG8gZ2VuX2xzaHJzaTNfZC4KKworVGh1IEFwciAxOCAxNTo0OToyOCAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KKworCSogc3BhcmMuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IERlZmluZS4KKworVGh1IEFwciAxOCAxNToxOToyNiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBoODMwMC5tZDogUmVtb3ZlICJ0eXBlIiBhdHRyaWJ1dGUgZnJvbSBhbGwgcGF0dGVybnMKKwlleGNlcHQgdGhvc2Ugd2hpY2ggaGF2ZSB2YXJ5aW5nIGxlbmd0aCBicmFuY2hlcy4gIEVsaW1pbmF0ZQorCW9ic29sZXRlICJ0eXBlIiBhdHRyaWJ1dGVzLiAgQWRkIGFkZGl0aW9uYWwgY29tbWVudHMgYWJvdXQgaW5zbgorCWxlbmd0aCBjb21wdXRhdGlvbiBwcm9ibGVtcyBhbmQgZnVydGhlciBvcHRpbWl6YXRpb25zLiAgQWRkCisJImxlbmd0aCIgYW5kICJjYyIgYXR0cmlidXRlcyB0byBpbnNucyB3aXRob3V0IHRoZW0sIGZpeCBhIGZldworCWxlbmd0aCBjb21wdXRhdGlvbnMuICBSZW1vdmUgcGF0dGVybnMgd2hpY2ggYXJlIGNvbW1lbnRlZCBvdXQuCisKKwkqIGg4MzAwLm1kICh6ZXJvIGV4dGVuc2lvbiBleHBhbmRlcnMgYW5kIGluc25zKTogU2ltcGxpZnksIGZpeCB2YXJpb3VzCisJbGVuZ3RoIHByb2JsZW1zLCBwcm92aWRlIG9wdGltaXplZCB2ZXJzaW9ucyBmb3IgdGhlIGg4MzAwIGFuZCBoODMwMGguCisJKHNpZ24gZXh0ZW5zaW9uIGV4cGFuZGVycyBhbmQgaW5zbnMpOiBMaWtld2lzZS4gIE1ha2UgdGhlbQorCW5lYXJseSBpZGVudGljYWwgdG8gemVyb19leHRlbnNpb24gcGF0dGVybnMgYW5kIGluc25zLgorCitXZWQgQXByIDE3IDE4OjUwOjE2IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhLmggKFNFTEVDVF9TRUNUSU9OKTogRGVmaW5lLiAgTmV2ZXIgcGxhY2UgYSBzb21ldGhpbmcKKwlpbnRvIHRoZSByZWFkLW9ubHkgZGF0YSBzZWN0aW9uIGlmIGl0IHJlcXVpcmVzIGEgcmVsb2MuCisKKwkqIHBhLm1kIChyb3Rsc2kzKTogRGVsZXRlIHVubmVjZXNzYXJ5IGFuZCBpbmNvcnJlY3QgcGF0dGVybi4KKworV2VkIEFwciAxNyAxNzoxNTo0MCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAobW92ZGkpOiBOZXZlciBGQUlMLCBldmVuIGlmIG9wZXJhbmRbMV0gaXMgbm90IGEKKwlnZW5lcmFsIG9wZXJhbmQsIGR1ZSB0byBiZWluZyBpbiB2b2xhdGlsZSBtZW1vcnkuCisKK1dlZCBBcHIgMTcgMTU6MjA6MTAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogUmV3cml0ZSB0byB1c2UgdG9rZW5zLgorCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBUYWtlIGEgdG9rZW4gaW5zdGVhZCBvZiBhIGNoYXJhY3Rlci4KKwkqIGk5NjAuYyAocHJvY2Vzc19wcmFnbWEpOiBUYWtlIHRoZSBJREVOVElGSUVSX1BPSU5URVIgdHJlZQorCW5vZGUgaW5zdGVhZCBvZiBhIGNoYXJhY3Rlci4KKwkqIHNoLmMgKGhhbmRsZV9wcmFnbWEpOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9uZXh0c3RlcC5jIChoYW5kbGVfcHJhZ21hKTogTGlrZXdpc2UuCisJKiBoODMwMC5jIChoYW5kbGVfcHJhZ21hKTogTGlrZXdpc2UuCisJKiBpOTYwLmggKEhBTkRMRV9QUkFHTUEpOiBFeHBlY3QvcGFzcyAybmQgYXJnIG9mIE5PREUsIG5vdCBDSC4KKwkqIHNoLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9uZXh0c3RlcC5oIChIQU5ETEVfUFJBR01BKTogTGlrZXdpc2UuCisJKiBoODMwMC5oIChIQU5ETEVfUFJBR01BKTogTGlrZXdpc2UuCisKK1dlZCBBcHIgMTcgMTQ6Mjg6NDMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjaG9vc2UtdGVtcC5jOiBEb24ndCBpbmNsdWRlIHN5cy9maWxlLmggaWZkZWYgTk9fU1lTX0ZJTEVfSC4KKwkjaW5jbHVkZSA8c3RkaW8uaD4uCisJKGNob29zZV90ZW1wX2Jhc2UpOiBNYWtlIHRtcCx1c3J0bXAsIHN0YXRpYyBsb2NhbHMuCisKK1dlZCBBcHIgMTcgMDg6NDE6MDIgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAoYWxwaGFfZW1pdF9jb25kaXRpb25hbF9tb3ZlKTogRml4IHNvbWUgYnVncyBpbiBwcmV2aW91cworCWNoYW5nZSBhbmQgZG8gc29tZSBjbGVhbnVwLgorCitUdWUgQXByIDE2IDE4OjUzOjA1IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogQWRkIGV4dHJhIHJlbG9hZCBmb3IgaW5zaWRlIG9mIFNVQlJFRyBpZgorCWl0IGlzIENPTlNUQU5UX1AuCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IFJld3JpdGUgbGFzdCBjaGFuZ2UgdG8gYXZvaWQgY29tcGlsZXIKKwl3YXJuaW5ncy4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogV2hlbiByZXVzZSBhbiBvbGQgcmVsb2FkLCBzZXQgdGhlIG1vZGVzCisJdG8gYmUgdGhlIGxhcmdlciBvZiB0aGUgb2xkIGFuZCBuZXcgbW9kZXMuCisKKyAgICAgICAgKiBpOTYwL3QtOTYwYmFyZSAoeHAtYml0LmMpOiBGaXggdHlwbyBpbiBzb3VyY2UgZmlsZSBuYW1lLgorCitUdWUgQXByIDE2IDE4OjA5OjE2IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIGg4MzAwL2g4MzAwLm1kIChhbmRoaTMpOiBJZiAybmQgb3BlcmFuZCBpcyBhIENPTlNUX0lOVCB0aGF0CisJbWVldHMgdGhlICdKJyBjb25zdHJhaW50LCB0aGVuIG9ubHkgdHdvIGJ5dGVzIGFyZSBuZWVkZWQgZm9yCisJdGhpcyBpbnNuLiAgSW1wcm92ZSBjb2RlIGdlbmVyYXRlZCBmb3IgdGhlIGg4MzAwaCB3aGVuIGJvdGgKKwlvcGVyYW5kcyBhcmUgcmVnaXN0ZXJzLgorCShpb3JoaTMsIHhvcmhpMyk6IExpa2V3aXNlLiAgUmV3b3JrIHRvIGJlIG5lYXJseSBpZGVudGljYWwgdG8gYW5kaGkzLgorCShhbmRzaTMpOiBJZiAybmQgb3BlcmFuZCBpcyBhIENPTlNUX0lOVCB0aGF0IG1lZXRzIHRoZSAnSicKKwljb25zdHJhaW50LCB0aGVuIG9ubHkgdHdvIGJ5dGVzIGFyZSBuZWVkIGZvciB0aGlzIGluc24uCisJSW1wcm92ZSBjb2RlIGdlbmVyYXRlZCBmb3IgdGhlIGg4MzAwaCByZWdhcmRsZXNzIG9mIHRoZQorCXR5cGUgb2YgdGhlIDJuZCBvcGVyYW5kLiAgTWFrZSB0aGlzIHBhdHRlcm4gd29yayBvbiB0aGUgaDgzMDAgdG9vLgorCShpb3JzaTMsIHhvcnNpMyk6IExpa2V3aXNlLiAgUmV3b3JrIHRvIGJlIG5lYXJseSBpZGVudGljYWwgdG8gYW5kc2kzLgorCShpb3JxaTNfaW50ZXJuYWwpOiBNYWtlIHRoaXMgcGF0dGVybiBsb29rIG1vcmUgbGlrZSBhbmRxaTNfaW50ZXJuYWwuCisJKG9uZV9jbXBsaGkyLCBvbmVfY21wbHNpMik6IEZpeCBsZW5ndGggY29tcHV0YXRpb24gZm9yIEg4MzAwSC4KKworVHVlIEFwciAxNiAxNzo0MzoyNSAxOTk2ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBtZW9seW9uLmhhbnNlLmRlKQorCisJKiBpMzg2Lm1kIChhZGRzaWRpM18yKTogSGFuZGxlIG5vbi1NRU0gb3ZlcmxhcCBjYXNlLgorCitUdWUgQXByIDE2IDE2OjU5OjQ5IDE5OTYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisgCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IEFsbG93IFRSQU1QT0xJTkVfVEVNUExBVEUKKwl0byBiZSBvbWl0dGVkIG9uIHN5c3RlbXMgZm9yIHdoaWNoIGl0IGlzIG5vdCBjb3N0IGVmZmVjdGl2ZS4KKwkqIHZhcmFzbS5jIChhc3NlbWJsZV90cmFtcG9saW5lX3RlbXBsYXRlKTogTm8gc3VjaCBmdW5jdGlvbgorCWlmIG5vIFRSQU1QT0xJTkVfVEVNUExBVEUuCisJKiBtNjhrLmg6IEdyZWF0bHkgc2ltcGxpZnkgdGhlIHJ1bi10aW1lIHRyYW1wb2xpbmUgY29kZToKKwkoVFJBTVBPTElORV9URU1QTEFURSwgVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKTogRGVsZXRlIGRlZmluZS4KKwkoVFJBTVBPTElORV9TSVpFLCBJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBDaGFuZ2VkLgorCShUUkFNUE9MSU5FX0FMSUdOKTogTm8gcG9pbnQgYWxpZ25pbmcgdG8gY2FjaGUgbGluZS4KKwkoRklOSVNIX0lOSVRfVFJBTVBPTElORSk6IE5ldyBkZWZpbmUuCisJKiBtNjhrL25leHQuaDogSW5zdGVhZCBvZiByZWRlZmluaW5nIElOSVRJQUxJWkVfVFJBTVBPTElORSwKKwltYWtlIHVzZSBvZiB0aGUgbmV3IEZJTklTSF9JTklUX1RSQU1QT0xJTkUuCisJKiBtNjhrL3ttNjhrLmgsbmV4dC5oLGF1eC5ofSAoRklOSVNIX0lOSVRfVFJBTVBPTElORSk6CisJUmVuYW1lIHRvIEZJTkFMSVpFX1RSQU1QT0xJTkUuCisJKiBtNjhrL3tsaW51eC5oLG02OGt2NC5ofTogT3ZlcnJpZGUgdHJhbXBvbGluZSBtYWNyb3MuCisKK1R1ZSBBcHIgMTYgMTY6MDI6NTAgMTk5NiAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBtaHBjYy5lZHU+CisKKwkqIGNvbWJpbmUuYyAobWFrZV9maWVsZF9hc3NpZ25tZW50KTogQWxsb3cgWE9SIGluIGZpbmFsIGNhc2UuCisKK1R1ZSBBcHIgMTYgMTE6MzM6NTMgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQHJ0bC5jeWdudXMuY29tPgorCisJKiBtNjhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IERvbid0IHJlbW92ZSBNQVNLXzY4MDYwIHdpdGggLW1zb2Z0LWZsb2F0LgorCisJKiBtNjhrLmggKE1VTExfQ09TVCwgTVVMV19DT1NULCBSVFhfQ09TVFMpOiBBZGQgY29zdHMgZm9yIFRBUkdFVF82ODA2MC4KKwkqIG02OGsubWQgKGFzaGxzaV8xNiwgbHNocnNpXzE2KTogRGlzYWJsZSBwYXR0ZXJuIGZvciBUQVJHRVRfNjgwNjA7CisJdGhpcyBzcGVjaWFsIGNhc2UgaXMgbm90IGZhc3RlciBmb3IgdGhhdCBjcHUuCisKK1R1ZSBBcHIgMTYgMTA6NTQ6NTUgMTk5NiAgRWxpb3QgRHJlc3NlbGhhdXMgIDxkcmVzc2VsaEByZnQzMC5uYXMubmFzYS5nb3Y+CisKKwkqIGFscGhhLmMgKGFscGhhX2VtaXRfY29uZGl0aW9uYWxfbW92ZSk6IE5ldyBmdW5jdGlvbi4KKwkqIGFscGhhLmggKGFscGhhX2VtaXRfY29uZGl0aW9uYWxfbW92ZSk6IERlY2xhcmUgaXQuCisJKiBhbHBoYS5tZCAoY21vdiogZGVmaW5lX2V4cGFuZHMpOiBVc2UgaXQuCisKK1R1ZSBBcHIgMTYgMDk6MDY6MTcgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBmaWVsZCByZXR1cm5zX3BvaW50ZXIuCisJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHRfe3RvLGZyb219KTogU2F2ZSBhbmQgcmVzdG9yZQorCWN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19wb2ludGVyLgorCisJKiBjb25maWcvc3ZyNC5oIChFTkRGSUxFX1NQRUMpOiBBZGQgbWlzc2luZyBgJXMnLgorCisJKiBjb25maWd1cmUgKG02OGstKi1saW51eCphb3V0Kik6IFNldCB0bWFrZV9maWxlIHRvIG02OGsvdC1saW51eC1hb3V0LgorCShtNjhrLSotbGludXgqKTogU2V0IGV4dHJhX3BhcnRzLgorCSogbTY4ay90LWxpbnV4IChJTlNUQUxMX0FTU0VSVF9IKTogTmV3IGRlZmluaXRpb24uCisJKENSVFNUVUZGX1RfQ0ZMQUdTX1MsIFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyk6IE5ldyBkZWZpbml0aW9ucy4KKwkqIG02OGsvdC1saW51eC1hb3V0OiBOZXcgZmlsZS4KKwkqIG02OGsvbGludXguaCAoTElCX1NQRUMpOiBEZWxldGVkLgorCShCU1NfU0VDVElPTl9BU01fT1AsIEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBEZWZpbmUuCisKKwkqIG02OGsuaCAoVFJBTVBPTElORV9BTElHTk1FTlQpOiBTcGVjaWZ5IGFsaWdubWVudCBpbiBiaXRzLCBub3QgYnl0ZXMuCisKK1R1ZSBBcHIgMTYgMDg6NTM6MTcgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQWxsb3cgcmVtb3ZhbCBvZiByZWR1bmRhbnQgdGVzdCBhbmQKKwljb21wYXJlIGluc3RydWN0aW9ucyB0aGF0IHVzZSBjbG9iYmVycy4KKworVHVlIEFwciAxNiAwNjoyMjowMCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWRlY2wuYyAoY2xlYXJfbGltYm9fdmFsdWVzKTogTmV3IGZ1bmN0aW9uLgorCShwdXNoZGVjbCk6IENhbGwgaXQgZm9yIGZ1bmN0aW9uIGJvZHkgYmxvY2tzLgorCisJKiBvYmpjL3Roci1kZWNvc2YxLmMgKF9vYmpjX3RocmVhZF9pZCk6IENvcnJlY3QgcmV0dXJuIHR5cGUgZnJvbQorIAlpbnQgdG8gX29iamNfdGhyZWFkX2lkLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0xPTkdKTVApOiBNYWtlIGEgZGVjbAorCWZvciBfX2R1bW15LCBzbyB3ZSBjYW4gY2FsbCBtYWtlX2Z1bmN0aW9uX3J0bCBvbiBpdC4KKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IERvbid0IHByZS1ldmFsdWF0ZSBSSFMgaWYgYSBDQUxMX0VYUFIKKwl3aXRoIGEgdmFyaWFibGUtc2l6ZSByZXR1cm4uCisKK01vbiBBcHIgMTUgMTc6Mzg6NDUgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBmaXhpbmNsdWRlczogRml4IHVuZGVmaW5lZCBWT0lERlVOQ1BUUiBpbiBWeFdvcmtzIDUuMiA8dGltZS5oPi4KKworTW9uIEFwciAxNSAxNToxMjoxNiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IEJlZm9yZSBjYWxsaW5nIGV4YWN0X2xvZzIsIHJlbW92ZSBhbnkKKwlzaWduIGV4dGVuc2lvbiBiaXRzLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQ2FsbCByZWxvYWRfcmVnX3JlYWNoZXNfZW5kX3AgZm9yCisJZXZlcnkgcmVnIG9mIG11bHRpLXJlZyBzcGlsbCByZWdpc3Rlci4gIEludmFsaWRhdGUgb2xkIGluZm8gZm9yIG11bHRpCisJcmVnIHNwaWxsIHJlZ2lzdGVycyB3aGVuIG9ubHkgcGFydCBzdXJ2aXZlcyB0byB0aGUgZW5kLgorCitNb24gQXByIDE1IDE0OjQ5OjEyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZnVuY3Rpb24uYyAocHJlc2VydmVfdGVtcF9zbG90cyk6IE9ubHkgcHJlc2VydmUgdGVtcG9yYXJpZXMgdGhhdAorCWhhcHBlbiB0byBiZSBhdCB0aGUgY3VycmVudCBsZXZlbC4KKworTW9uIEFwciAxNSAxNDowODoxMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgorCisJKiBnYW5zaWRlY2wuaDogTmV3IGZpbGUuCisJKiBjaG9vc2UtdGVtcC5jOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmluICh4Z2NjKTogRGVwZW5kIG9uIGFuZCBsaW5rIGluIGNob29zZS10ZW1wLm8uCisJKGNvbGxlY3QyKTogTGlrZXdpc2UuCisJKGNob29zZS10ZW1wLm8pOiBBZGQgcnVsZSBmb3IuCisJKiBjb2xsZWN0Mi5jOiAjaW5jbHVkZSAiZ2Fuc2lkZWNsLmgiLgorCShjb25zdCxQUk9UTyk6IERlbGV0ZS4KKwkoUF90bXBkaXIpOiBEZWxldGUuCisJKGNob29zZV90ZW1wX2Jhc2UpOiBEZWNsYXJlIGFzIGV4dGVybiwgZGVsZXRlIGludGVybmFsIGNvcHkuCisJKG1haW4pOiBVcGRhdGUgY2FsbCB0byBjaG9vc2VfdGVtcF9iYXNlLgorCSogY3BwaGFzaC5jOiAjaW5jbHVkZSAiZ2Fuc2lkZWNsLmgiLgorCShOVUxMLGNvbnN0LHZvbGF0aWxlKTogRGVsZXRlLgorCSogZGVtYW5nbGUuaDogI2luY2x1ZGUgImdhbnNpZGVjbC5oIi4KKwkoUFJPVE8sUFRSLGNvbnN0KTogRGVsZXRlLgorCSogZXhwci5oIChjb25zdCk6IERlbGV0ZS4KKwkqIGZpeC1oZWFkZXIuYzogI2luY2x1ZGUgImdhbnNpZGVjbC5oIi4KKwkoY29uc3QpOiBEZWxldGUuCisJKiBnY2MuYzogI2luY2x1ZGUgImdhbnNpZGVjbC5oIi4KKwkoUFJPVE8sVlBST1RPLFBWUFJPVE8sVlBST1RPLFZBX1NUQVJULE5VTEwpOiBEZWxldGUuCisJKEdFTkVSSUNfUFRSLE5VTExfUFRSLFBfdG1wZGlyKTogRGVsZXRlLgorCShjaG9vc2VfdGVtcF9iYXNlKTogRGVjbGFyZSBhcyBleHRlcm4sIGRlbGV0ZSBpbnRlcm5hbCBjb3B5LgorCShjb25jYXQpOiBSZXdyaXRlIHRvIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorCShjaG9vc2VfdGVtcF9iYXNlX3RyeSxjb25jYXRbMzQ2XSk6IERlbGV0ZS4KKwkodHJhbnNsYXRlX29wdGlvbnMsc2V0X3NwZWMscHJvY2Vzc19jb21tYW5kLGRvX3NwZWNfMSwKKwlpc19kaXJlY3RvcnksbWFpbik6IEFsd2F5cyB1c2UgY29uY2F0LCBub3QgY29uY2F0WzM0Nl0uICBQYXNzCisJTlVMTF9QVFIgYXMgdHJhaWxpbmcgYXJnIHRvIGNvbmNhdC4KKwkqIGdlbmF0dHIuYyAobWFpbik6IERlbGV0ZSBwcmludGluZyBvZiAiI2RlZmluZSBQUk9UTyIuCisJKiBtYWNobW9kZS5oOiAjaW5jbHVkZSAiZ2Fuc2lkZWNsLmgiLgorCShQUk9UTyk6IERlbGV0ZS4KKwkoSEFWRV9NQUNISU5FX01PREVTKTogTW92ZSBkZWZpbml0aW9uIHRvIHN0YW5kYXJkIHBsYWNlLgorCSogcmVjb2cuaDogI2luY2x1ZGUgImdhbnNpZGVjbC5oIi4KKwkoUFJPVE8sY29uc3QpOiBEZWxldGUuCisJKiBydGwuaDogI2luY2x1ZGUgImdhbnNpZGVjbC5oIi4KKwkoUFJPVE8sVlBST1RPLFBWUFJPVE8sVlBST1RPLFZBX1NUQVJULFNURElPX1BST1RPKTogRGVsZXRlLgorCShOVUxMLEdFTkVSSUNfUFRSLE5VTExfUFRSKTogRGVsZXRlLgorCSogdHJlZS5oOiBMaWtld2lzZS4KKworTW9uIEFwciAxNSAwODo0OToyMCAxOTk2ICBUb20gTWF5ICAoZnRvbUBuZXRjb20uY29tKQorCisJKiBjc2UuYyAoaW52YWxpZGF0ZV9za2lwcGVkX3NldCk6IElnbm9yZSBDTE9CQkVSIGFmdGVyIGNhbGxpbmcKKwlub3RlX21lbV93cml0dGVuLCBub3QgYmVmb3JlLgorCitNb24gQXByIDE1IDA4OjIyOjAzIDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CisKKwkqIG02OGsubWQgKHRzdGRpKTogT3B0aW1pemVkIGZvciAiZCIgY2FzZS4KKwkobW92cWkpOiBBbGxvdyBtb3ZpbmcgImkiIGludG8gImEiLgorCSh6ZXJvX2V4dGVuZHNpZGkyKTogQWx0ZXJuYXRpdmVzIG1lcmdlZC4KKwkoZXh0ZW5kcGx1c3NpZGkpOiBGaXhlZCB3aGVuIG9wZXJhbmRzIDAgYW5kIDEgc2hhcmUgYSByZWdpc3Rlci4KKwkoYWRkZGlfc2V4dGhpc2hsMzIpOiBDb25zdHJhaW50cyByZW9yZGVyZWQgZm9yIGJldHRlciByZWxvYWQuCisJKGFkZGRpMyxzdWJkaV9zZXh0aGlzaGwzMixzdWJkaTMsbmVnZGkyKTogTGlrZXdpc2UuCisJKGFzaGxkaV9zZXh0aGkpOiBBY2NlcHQgIm0iIGFzIG9wZXJhbmQgMC4KKwkoYXNobGRpX2NvbnN0MzIpOiBBbHRlcm5hdGl2ZXMgbWVyZ2VkLgorCShhc2hpZnQgcGF0dGVybnMpOiBPdXRwdXQgImxzbCIgaW5zdGVhZCBvZiAiYXNsIi4KKwkoYmVxMF9kaSk6IElmIGNvbmRpdGlvbiBjb2RlcyBhbHJlYWR5IHNldCwgb3V0cHV0IG9ubHkgYnJhbmNoIGluc24uCisJKGJuZTBfZGksYmdlMF9kaSxibHQwX2RpKTogTGlrZXdpc2UuCisJKiBtNjhrLmMgKG5vdGljZV91cGRhdGVfY2MsIGNhc2UgQVNISUZUeyxSVH0sIExTSElGVFJULCBST1RBVEV7LFJUfSk6CisJRG9uJ3Qgc2V0IENDX05PX09WRVJGTE9XLgorCSogbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBGaXggdHlwbyBpbiAiYzY4MDAwIiBlbnRyeS4KKworTW9uIEFwciAxNSAwODowNjoxNyAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChlYWRkMSk6IENoZWNrIGZvciBvdmVyZmxvdyBvbiBYIHBsdXMgWC4KKworTW9uIEFwciAxNSAwODowMjoyNCAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAY3lnbnVzLmNvbT4KKworCSogaTM4Ni9uZXRic2QuaCAoSEFWRV9TWVNWX1BSQUdNQSk6IFJlbW92ZWQgZGVmaW5pdGlvbi4KKwkqIGNvbmZpZy9uZXRic2QuaCAoSEFWRV9TWVNWX1BSQUdNQSk6IERlZmluZS4KKwkoU0VUX0FTTV9PUCk6IERlZmluZS4KKworTW9uIEFwciAxNSAwNzoyODo1NCAxOTk2ICBGaWxhIEtvbG9kbnkgPGZpbGFAaWJpLmNvbT4KKworCSogY29uZmlndXJlOiBBZGQgZGVmaW5pdGlvbiBmb3IgaG9zdD0gaW50byBNYWtlZmlsZS4KKwkqIGJ1aWxkLW1ha2UgKENDKTogUGFzcyAtYiAkKGhvc3QpLCBub3QgdGFyZ2V0LgorCitNb24gQXByIDE1IDA1OjEyOjM5IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoYmNfZXhwYW5kX2luY3JlbWVudCk6IENoYW5nZSBkZWNsYXJhdGlvbiB0byByZXR1cm4gdm9pZC4KKworCSogdG9wbGV2LmMgKG1heF9sYWJlbF9udW1fYWZ0ZXJfcmVsb2FkKTogTmV3IHZhcmlhYmxlLgorCShyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGl0LgorCSogcmVvcmcuYyAoZmluZF9kZWFkX29yX3NldF9yZWdpc3RlcnMpOiBPbmx5IGtpbGwgc3BpbGwgcmVncyBhZnRlcgorCWxhYmVsIG1hZGUgYmVmb3JlIGp1bXAyLgorCisJKiBjb21iaW5lLmMgKGV4cGFuZF9maWVsZF9hc3NpZ25tZW50KTogVGFrZSBTVUJSRUdfV09SRCBpbnRvCisJYWNjb3VudCB3aGVuIGhhdmUgU1RSSUNUX0xPV19QQVJULgorCShtYWtlX2V4dHJhY3Rpb24pOiBNYWtlIGEgU1RSSUNUX0xPV19QQVJUIGF0IGFueSBsb3ctb3JkZXIgd29yZC4KKworTW9uIEFwciAxNSAwMzo0MzoxMSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBmbGFncy5oIChmbGFnX2Z1bmN0aW9uX3NlY3Rpb25zKTogRGVjbGFyZS4KKwkqIHRvcGxldi5jIChmbGFnX2Z1bmN0aW9uX3NlY3Rpb25zKTogRGVmaW5lLgorCShjb21waWxlX2ZpbGUpOiBBZGQgd2FybmluZ3Mgd2hlbiAtZmZ1bmN0aW9uLXNlY3Rpb25zIGlzCisJdXNlZCB3aXRoIC1nLCBvciBwcm9maWxpbmcuICBEaXNhYmxlIC1mZnVuY3Rpb24tc2VjdGlvbnMKKwl3aGVuIHByb2ZpbGluZyBpcyB1c2VkLiAgQWRkIHdhcm5pbmcgd2hlbiAtZmZ1bmN0aW9uLXNlY3Rpb25zCisJaXMgdXNlZCBvbiBhIHRhcmdldCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKwkqIHZhcmFzbS5jIChuYW1lZF9zZWN0aW9uKTogTWFrZSBhIGNvcHkgb2YgdGhlIHNlY3Rpb24gbmFtZQorCWluIGNhc2UgdGhlIG9yaWdpbmFsIGlzIGluIHRlbXBvcmFyeSBzdG9yYWdlLgorCShmdW5jdGlvbl9zZWN0aW9uKTogU2V0IERFQ0xfU0VDVElPTl9OQU1FIGZvciBlYWNoIGZ1bmN0aW9uCisJaWYgZmxhZ19mdW5jdGlvbl9zZWN0aW9ucyBpcyBvbiBhbmQgdGhlIHRhcmdldCBzdXBwb3J0cyBpdC4KKwkqIGRieG91dC5jIChkYnhvdXRfZnVuY3Rpb25fZW5kKTogTmV3IGZ1bmN0aW9uLgorCShkYnhvdXRfZnVuY3Rpb24pOiBDYWxsIGRieG91dF9mdW5jdGlvbl9lbmQgaWYgdXNpbmcgZXh0ZW5zaW9ucworCWFuZCBmbGFnX2Z1bmN0aW9uX3NlY3Rpb25zIGlzIG9uLgorCSogc3BhcmMvc3lzdjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBQcmVmaXggYSBmdW5jdGlvbgorCXNlY3Rpb24ncyBuYW1lIHdpdGggIi50ZXh0JSIgd2hlbiAtZmZ1bmN0aW9uLXNlY3Rpb25zLgorCitTdW4gQXByIDE0IDE5OjM3OjQzIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKG1haW4pOiBEZWxldGUgcmVkdW5kYW50IHRlc3QgZm9yIC1wIHVzZWQgd2l0aCAtZmJ5dGVjb2RlLgorCitTdW4gQXByIDE0IDE5OjAxOjU5IDE5OTYgIEpvaG4gRi4gQ2FyciA8amZjQG1pdC5lZHU+CisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZW51bSk6IERvbid0IGNyYXNoIGlmIG5vIHR5cGUgY2FuIHJlcHJlc2VudCBhbGwKKwllbnVtZXJhdGlvbiB2YWx1ZXMuCisKK1N1biBBcHIgMTQgMTg6NTY6NDAgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQHJ0bC5jeWdudXMuY29tPgorCisJKiBtNjhrLm1kIChmdHJ1bmNkZjIpOiBFbmFibGUgZm9yIG02ODA2MCBzeXN0ZW1zLgorCitTdW4gQXByIDE0IDE4OjQ5OjMwIDE5OTYgIERhdmlkIEwuIFJlZXNlICAoZGF2aWQucmVlc2VAZWFzdC5zdW4uY29tKQorCisJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX3Rlc3QpOiAgRG9uJ3QgY29udmVydCBoaV9jc3Qgb3IgbG9fY3N0CisJdG8gdW5zaWduZWQgd2hlbiBmb2xkaW5nIHNpZ25lZCByYW5nZSB0ZXN0cy4KKworU3VuIEFwciAxNCAwODo1NjoyNyAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgPG1vc2hpZXJAd29ybGQuc3RkLmNvbT4KKworCSogcmVhbC5oIChlcmVhbF9mcm9tX3tpbnQsdWludH0pOiBBZGQgbmV3IGFyZywgTU9ERS4KKwkoUkVBTF9WQUxVRV9GUk9NeyxfVU5TSUdORUR9X0lOVCk6IE5ldyBhcmcsIE1PREUuCisJKiByZWFsLmMgKGVyZWFsX2Zyb21fe2ludCx1aW50fSk6IE5ldyBhcmcsIE1PREUuCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogQWRkIG5ldyBhcmcgdG8gUkVBTF9WQUxVRV9GUk9NX0lOVC4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZF9jb252ZXJ0KTogTGlrZXdpc2UuCisJKiB0cmVlLmMgKHJlYWxfdmFsdWVfZnJvbV9pbnRfY3N0KTogTmV3IGFyZywgVFlQRS4KKwlQYXNzIG1vZGUgdG8gUkVBTF9WQUxVRV9GUk9NX0lOVC4KKwkoYnVpbGRfcmVhbF9mcm9tX2ludF9jc3QpOiBQcm9wZXJseSBkZWFsIHdpdGggdHJ1bmNhdGlvbi4KKworU3VuIEFwciAxNCAwODoyMToyOSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogV2hlbiBzdWJzdGl0dXRpbmcgaW4gb3V0cHV0IG9mIEkyLAorCWVuc3VyZSBkZXN0IGlzbid0IGNsb2JiZXJlZCBpbiBJMi4KKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IEluIGluaXRpYWwgc2NhbiBvZiBpbnNucywKKwloYW5kbGUgYSBSRUdfSU5DIG5vdGUncyBhZmZlY3Qgb24gc2lnbiBiaXQgY29waWVzIGFuZCBub256ZXJvIGJpdHMuCisJKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogVHJlYXQgYSB6ZXJvIFNFVCBhcmcgYXMgYSBDTE9CQkVSLgorCitTdW4gQXByIDE0IDA3OjUyOjI4IDE5OTYgIE1hbm9yIEFza2VuYXppICA8bWFub3JAc2FudGFmZS5lZHU+CisKKwkqIG9iamMvZW5jb2RpbmcuYyAob2JqY19za2lwX3R5cGVzcGVjKTogRG9uJ3QgYWJvcnQgZm9yIF9DX1VOREVGLgorCitTYXQgQXByIDEzIDIwOjM1OjM2IDE5OTYgIFJpY2hhcmQgSGVuZGVyc29uICAocmljaGFyZEBhdGhlaXN0LnRhbXUuZWR1KQorCisJKiBjb25maWd1cmUgKG02OGstYXBwbGUtYXV4Kik6IFJld29yayB0byB0YWtlIGFkdmFudGFuZ2UKKwlvZiBsaXN0IG9mIHRtLmggZmlsZXMgYW5kIHN1cHBvcnQgYWxsIGZvdXIgZ2FzL2dsZCBvcHRpb25zLgorCSogbTY4ay9hdXhhcy5oLCBtNjhrL2F1eGdhcy5oLCBtNjhrL2F1eGdsZC5oLCBtNjhrL2F1eGxkLmg6IE5ldyBmaWxlcy4KKwkqIG02OGsvYXV4c3RkLmgsIG02OGsvYXV4Z251Lmg6IERlbGV0ZWQuCisKK1NhdCBBcHIgMTMgMjA6MTg6MTEgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CisKKwkqIGFscGhhLmMgKGNoZWNrX2Zsb2F0X3ZhbHVlKTogTmV3IGZ1bmN0aW9uLgorCSogYWxwaGEuaCAoQ0hFQ0tfRkxPQVRfVkFMVUUpOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfRkxPQVQpOiBQcmludCB0aGUgdmFsdWUgaW4gaGV4LgorCitTYXQgQXByIDEzIDE1OjA4OjQ1IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogTmV3IHRhcmdldCBhcm17LGVsfS0qLWNvZmYqLgorCShjcHVfZGVmYXVsdCk6IFNvcnQgYWxwaGFiZXRpY2FsbHkuCisJKiBhcm0vY29mZi5oOiBOZXcgZmlsZS4KKwkqIGFybS90LWJhcmU6IE5ldyBmaWxlLgorCSogYXJtL2FybS5jICh1c2VfcmV0dXJuX2luc24pOiBEb24ndCB1c2UgcmV0dXJuIGZvciBuYWtlZCBmdW5jdGlvbnMuCisJKGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgorCShhcm1fbmFrZWRfZnVuY3Rpb25fcCk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2Z1bmNfcHJvbG9ndWUpOiBOYWtlZCBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBwcm9sb2d1ZXMuCisJKGFybV9leHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4KKwkob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBMaWtld2lzZSB3aXRoIGVwaWxvZ3Vlcy4KKworU2F0IEFwciAxMyAxMTozMTozMiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBoODMwMC5jIChhZGRzX3N1YnNfb3BlcmFuZCk6IEZpeCB0aGlua28gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGg4MzAwLm1kIChzdWJoaTMpOiBUdXJuIGludG8gYSBkZWZpbmVfZXhwYW5kLgorCShzdWJoaTMgdXNpbmcgYWRkc19zdWJzKTogTmV3IHBhdHRlcm4uCisJKEg4MzAwIHN1YmhpKTogRGVyaXZlZCBmcm9tIG9sZCBzdWJoaSBwYXR0ZXJuLiAgU2ltcGxpZmllZC4KKwkoSDgzMDBIIHN1YmhpKTogTGlrZXdpc2UuCisJKHN1YnNpIHVzaW5nIGFkZHNfc3Vicyk6IE5ldyBwYXR0ZXJuLiAgT25seSB1c2VkIG9uIEg4MzAwSC4KKwkoc3Vic2lfaDgzMDApOiBBbGxvdyAiYSIgcmVnaXN0ZXJzIGFzIGRlc3RpbmF0aW9uLgorCShzdWJzaV9oODMwMGgpOiBBbGxvdyAiYSIgcmVnaXN0ZXJzIGFzIGRlc3RpbmF0aW9uLiAgU2ltcGxpZnkuCisKKwkqIGg4MzAwLm1kIChiY3NfcWlxaSwgYmNzX2hpaGksIGJzX2hpcWkpOiBGaXggdGhpbmtvcworCWluIGxhc3QgY2hhbmdlLgorCitTYXQgQXByIDEzIDA4OjU5OjQ4IDE5OTYgIEZpbGEgS29sb2RueSA8ZmlsYUBpYmkuY29tPgorCisJKiBpMzcwL212cy5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRG9uJ3Qgd3JpdGUgYW55dGhpbmcgdG8KKwlhc20gZmlsZSwgYmVjYXVzZSBldmVyeXRoaW5nIGlzIGhhbmRsZWQgaW4gRlVOQ1RJT05fUFJPTE9HVUUuCisKK1NhdCBBcHIgMTMgMDc6NTU6MzggMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAoYWxwaGFfZW1pdF9zZXRfY29uc3RfMSk6IFJlbmFtZWQgZnJvbQorCWFscGhhX2VtaXRfc2V0X2NvbnN0IGFuZCBzdGF0aWMuCisJUmVtb3ZlIGNoYW5nZSBvZiBOb3YgMjY7IGFnYWluIHVzZSBub3JtYWwgbWVjaGFuaXNtIGZvciBTSW1vZGUuCisJKGFscGhhX2VtaXRfc2V0X2NvbnN0KTogTmV3IGZ1bmN0aW9uLgorCitGcmkgQXByIDEyIDE4OjE5OjM5IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIGg4MzAwLmMgKGFkZHNfc3Vic19vcGVyYW5kLCBvdXRwdXRfYWRkc19zdWJzKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGg4MzAwLm1kIChhZGRoaTMpOiBUdXJuIGludG8gYSBkZWZpbmVfZXhwYW5kLgorCShhZGRoaTMgdXNpbmcgYWRkc19zdWJzKTogTmV3IHBhdHRlcm4uCisJKEg4MzAwIGFkZGhpKTogRGVyaXZlZCBmcm9tIG9sZCBhZGRoaSBwYXR0ZXJuLiAgU2ltcGxpZmllZC4KKwkoSDgzMDBIIGFkZGhpKTogTGlrZXdpc2UuCisJKGFkZHNpIHVzaW5nIGFkZHNfc3Vicyk6IE5ldyBwYXR0ZXJuLiAgT25seSB1c2VkIG9uIEg4MzAwSC4KKwkoYWRkc2lfaDgzMDApOiBBbGxvdyAiYSIgcmVnaXN0ZXJzIGFzIGRlc3RpbmF0aW9uLgorCShhZGRzaV9oODMwMGgpOiAgU2ltcGxpZnkuICBBbGxvdyAiYSIgcmVnaXN0ZXJzIGFzIGRlc3RpbmF0aW9uLgorCisJKiBoODMwMC5tZCAoYmNzKTogTmV3IGF0dHJpYnV0ZSB0eXBlLgorCShkZWZhdWx0X2xlbmd0aCk6IENvbXB1dGUgY29ycmVjdCBsZW5ndGggZm9yIGJjcyBpbnNucy4KKwkoYmNzX3FpcWksIGJjc19oaWhpLCBic19oaXFpKTogVXNlIG5ldyB0eXBlIGFuZCB1cGRhdGUKKwl0byBhY2NvdW50IGZvciBjb3JyZWN0IGxlbmd0aCBjb21wdXRhdGlvbi4KKworCSogaDgzMDAvaDgzMDAubWQgKG1vdmhpX2ludGVybmFsKTogRGVtYW5kIGF0IGxlYXN0IG9uZSBvcGVyYW5kIHRvCisJYmUgYSByZWdpc3Rlci4KKwkobW92c2lfaDgzMDApOiBPcHRpbWl6ZSBsb2FkaW5nIGNlcnRhaW4gY29uc3RhbnRzLgorCShtb3ZzaV9oODMwMGgpOiBMaWtld2lzZS4KKworCSogaDgzMDAuaCAoTk9fRlVOQ1RJT05fQ1NFKTogQ29tbWVudCBvdXQuCisJKEZVTkNUSU9OX0FSR19SRUdOT19QKTogUHJvcGVybHkgZGVmaW5lIGZvciBUQVJHRVRfUVVJQ0tDQUxMLgorCShSRVRVUk5fSU5fTUVNT1JZKTogRG9uJ3QgcmV0dXJuIHNtYWxsIHN0cnVjdHMgaW4gcmVncy4KKworCSogaDgzMDAuYyAoY29uc3RfY29zdHMpOiAtNCBhbmQgNCBhcmUgY2hlYXAgb24gdGhlIGg4MzAwaC4KKwkobm90aWNlX3VwZGF0ZV9jYyk6IFJlbW92ZSByZWZlcmVuY2VzIHRvICJ2YWx1ZTIiIGZpZWxkLgorCisJKiBoODMwMC5jIChkb3NpemUpOiBSZW1vdmUgdW51c2VkICJmcGVkIiBhcmd1bWVudC4gIEFsbCBjYWxsZXJzCisJY2hhbmdlZC4gIEhhbmRsZSBhZGQvc3ViIG9mIDUtOCBieXRlcyBlZmZpY2llbnRseSBvbiB0aGUgaDgzMDBoLgorCisJKiBoODMwMC5jIChwcmludF9vcGVyYW5kKTogSGFuZGxlIG5ldyAnUicgY2FzZSBmb3IgYWNjZXNzaW5nCisJdGhlIDgtYml0IGFyZWEuICBNYWtlIGNvZGUgZm9yICdZJyBmYWxsIGludG8gY29kZSBmb3IgJ1InIHdoZW4KKwlvcGVyYW5kIGlzIG5vdCBhIHJlZ2lzdGVyLiAgVXBkYXRlIHNvbWUgY29tbWVudHMuCisJKGg4MzAwX3RpbnlfZGF0YV9wKTogTmV3IGZ1bmN0aW9uLgorCShoODMwMF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogSGFuZGxlICJ0aW55X2RhdGEiIGF0dHJpYnV0ZS4KKwkqIGg4MzAwLmggKE9LX0ZPUl9VKTogSGFuZGxlIG1lbW9yeSByZWZlcmVuY2VzIGludG8gdGhlCisJOC1iaXQgYXJlYS4KKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IE1hcmsgU1lNQk9MX1JFRnMgd2hpY2ggcmVmZXIgdG8gOC1iaXQgYXJlYS4KKwkqIGg4MzAwLm1kIChtYW55IHBhdHRlcm5zKTogVXNlICdSJyByYXRoZXIgdGhhbiAnWCcgZm9yCisJb3BlcmFuZHMgdGhhdCBtYXkgYmUgbWVtb3J5IGFjY2Vzc2VzIGludG8gdGhlIDgtYml0IGFyZWEuCisJKGJ0c3QgcGF0dGVybik6IE5ldyBwYXR0ZXJuIHRvIHNldCB0aGUgY2MwICh6Yml0KSBiYXNlZCBvbgorCWRhdGEgaW4gdGhlIDgtYml0IGFyZWEuCisKKwkqIGg4MzAwLm1kIChvbmVfY21wbHNpMik6IEZpeCBsZW5ndGggY29tcHV0YXRpb24gZm9yIGg4MzAwaC4KKworRnJpIEFwciAxMiAxNDozNDozOSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGFybS5tZCAoKmxkbXNpLCpzdG1zaSk6IFVzZSAobWVtIChtYXRjaF9vcGVyYW5kIC4uLikpCisJdG8gYXZvaWQgdXNpbmcgaW5kaXJlY3Rfb3BlcmFuZCAocmVsb2FkIHByb2JsZW1zKS4KKwkqIGFybS9zZW1pLmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIF9fc2VtaV9fIGluc3RlYWQgb2Ygc2VtaS4KKwkqIGFybS9hb3V0LmggKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IFVzZSBMT0NBTF9MQUJFTF9QUkVGSVguCisJKEFTTV9PVVRQVVRfQUREUl97VkVDLERJRkZfRUxUfSk6IExpa2V3aXNlLgorCitGcmkgQXByIDEyIDA5OjQzOjMwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlZGVmcyk6IERvbid0IGVtaXQgaW5jb21wbGV0ZSB0eXBlcyB5ZXQuCisJKGRieG91dF9zeW1ib2wpOiBVc2UgREVDTF9BUlRJRklDSUFMIHRvIHJlY29nbml6ZSBDKysgaW1wbGljaXQKKwl0eXBlZGVmcy4KKworVGh1IEFwciAxMSAyMTo1NjoyNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGkzODYvdC13aW5udCAod2lubnQubyk6IFJld3JpdGUgYmFzZWQgb24gLmMubyBydWxlLgorCShvbGRuYW1lcy5vLHNwYXdudi5vKTogQWRkIHJ1bGVzIGZvci4KKworVGh1IEFwciAxMSAwNzoyNTowNiAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEluIGlubGluaW5nIGNhc2UsIGlmIEJFRk9SRV9DQUxMUyBpcworCXplcm8sIHN0YXJ0IGxvb2tpbmcgYXQgZmlyc3QgaW5zbi4KKworCSogZXhwci5jIChwcmVleHBhbmRfY2FsbHMsIGNhc2UgQ0FMTF9FWFBSKTogUmV3b3JrIHRvIHByb3Blcmx5CisJYXZvaWQgZXhwYW5kaW5nIGZ1bmN0aW9ucyByZXR1cm5pbmcgdmFyaWFibGUgc2l6ZSBvYmplY3RzLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFdoZW4gY29tcGFyaW5nIHR5cGVzCisJb2YgZm9ybWFsIGFuZCBhY3R1YWwsIHVzZSBUWVBFX01BSU5fVkFSSUFOVC4KKworVGh1IEFwciAxMSAwMDo0ODoyOSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBoODMwMC9saWIxZnVuY3MuYXNtIChtb2Rub3JtKTogTmV3IGZ1bmN0aW9uKHMpLiAgTGlrZSBkaXZub3JtLAorCWJ1dCBnZXRzIHRoZSBzaWduIGJpdCByaWdodCBmb3IgbW9kdWxvIG9wZXJhdGlvbnMuCisJKF9fbW9kaGkzLCBtb2RzaTMpOiBVc2UgbW9kbm9ybS4KKworCSogaDgzMDAvaDgzMDAuYyAoZG9zaXplKTogT24gdGhlIGg4MzAwaCwgZG8gNCBieXRlIGFkanVzdG1lbnRzCisJdXNpbmcgYWRkcyBhbmQgc3Vicy4KKwkqIGg4MzAwL2g4MzAwLmggKExPTkdfTE9OR19UWVBFX1NJWkUpOiBBbHdheXMgbWFrZSB0aGlzIDMyYml0cy4KKwlSZXZlcnNlcyBjaGFuZ2UgZnJvbSBBcHIgMiwgMTk5Ni4KKworV2VkIEFwciAxMCAxODozOTo1MiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgorCisJKiBzcGFyYy5oIChBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMUkVGKTogRGVsZXRlLgorCShGVU5DVElPTl9QUk9GSUxFUik6IFVzZSBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwgaW5zdGVhZC4KKworCSogc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IDkwYzcwMSByZW5hbWVkIHRvIHRzYzcwMS4KKwkoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5X3Nsb3QpOiBEb24ndCBhbGxvdyBhbnl0aGluZyBpZgorCS1tYnJva2VuLXNhdmVyZXN0b3JlLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBPbmx5IHVzZSB0cml2aWFsIHNhdmUncyBpZgorCS1tYnJva2VuLXNhdmVyZXN0b3JlLgorCSogc3BhcmMuaCAoQ1BQX1NQRUMpOiBIYW5kbGUgLW1jcHU9e3NwYXJjbGV0LHRzYzcwMX0uCisJKEFTTV9TUEVDKTogTGlrZXdpc2UuCisJKHtNQVNLLFRBUkdFVH1fQlJPS0VOX1NBVkVSRVNUT1JFKTogRGVmaW5lLgorCShlbnVtIHByb2Nlc3Nvcl90eXBlKTogOTBDNzAxIHJlbmFtZWQgdG8gVFNDNzAxLgorCSogc3BhcmMubWQgKGF0dHIgY3B1KTogOTBjNzAxIHJlbmFtZWQgdG8gdHNjNzAxLgorCSogc3BhcmMvc3BsZXQuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogUmVjb2duaXplIC1tYnJva2VuLXNhdmVyZXN0b3JlLgorCitXZWQgQXByIDEwIDE3OjU2OjAyIDE5OTYgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBtODhrL2RndXguaCAoRVhUUkFfU1BFQ1MpOiBEZWZpbmUuCisJKEFTTV9TUEVDLENQUF9TUEVDLFNUQVJURklMRV9TUEVDKTogVXNlIEVYVFJBX1NQRUNTLgorCSogbTg4ay9kZ3V4YmNzLmggKEFTTV9TUEVDLENQUF9TUEVDLFNUQVJURklMRV9TUEVDKTogVXNlIEVYVFJBX1NQRUNTLgorCSogbTg4ay9tODhrLmMgKG91dHB1dF9hc2NpaSkgT3V0cHV0IGxpdGVyYWwgSFQuCisKK1dlZCBBcHIgMTAgMTc6Mjg6MzcgMTk5NiAgSmFtZXMgQ2FybHNvbiAgKGNhcmxzb25AeHlsb2dpY3MuY29tKQorCisJKiBjb25maWd1cmU6IFdvcmsgYXJvdW5kIEFJWCBidWcgd2hlbiBkZWZpbmluZyBTVUJESVJTLgorCitXZWQgQXByIDEwIDE3OjIyOjQyIDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjZXhwLnkgKHBhcnNlX251bWJlcik6IERvbid0IHJlamVjdCBsb25nIGxvbmcgY29uc3RhbnRzIHVubGVzcworCXBlZGFudGljLgorCitXZWQgQXByIDEwIDE3OjE5OjU2IDE5OTYgIFN0ZXBoZW4gTC4gTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChlNjR0b2UpOiBQcm9wZXJseSBkaXN0aW5ndWlzaCBiZXR3ZWVuIE5hTiBhbmQgaW5maW5pdHkKKwliaXQgcGF0dGVybnMgZm9yIHJlYWwtd29yZHMtYmlnLWVuZGlhbiB0YXJnZXRzLgorCitXZWQgQXByIDEwIDE3OjE3OjI2IDE5OTYgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIHJlYWwuYyAoZW5kaWFuKTogQWRkIHR3byBleHBsaWNpdCBjYXN0cy4KKwkoZTY0dG9lKTogU3VwcG9ydCBBUk0gZXh0ZW5kZWQgcHJlY2lzaW9uIGZwIGZvcm1hdC4KKwlDaGVjayBuZWdhdGl2ZSBpbmZpbml0aWVzIHByb3Blcmx5IGZvciBOYU5zLgorCSh0b2U2NCk6IFN1cHBvcnQgQVJNIGV4dGVuZGVkIHByZWNpc2lvbiBmcCBmb3JtYXQuCisKK1R1ZSBBcHIgIDkgMTI6NTM6MzEgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KKworCSogaTM4Ni9nYXMuaCAoQVNNX09VVFBVVF9BTElHTik6IERlZmluZSBhbmQgdXNlIC5iYWxpZ24uCisKK1R1ZSBBcHIgIDkgMTI6NDg6NDUgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHNwYXJjLmMgKGZwX3plcm9fb3BlcmFuZCk6IEV4Y2x1ZGUgLTAuMC4KKworVHVlIEFwciAgOSAwNzoxMToyNCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworCSogdHJlZS5jIChzdWJzdGl0dXRlX2luX2V4cHIpOiBEb24ndCByZXR1cm4gbmV3IGV4cHJlc3Npb24gaWYKKwlub3RoaW5nIGNoYW5nZWQuCisJKHN1YnN0aXR1dGVfaW5fdHlwZSk6IERlbGV0ZWQsIG5vdCB1c2VkLgorCSogdHJlZS5oIChzdWJzdGl0dXRlX2luX3R5cGUpOiBEZWxldGUgZGVjbGFyYXRpb24uCisKK01vbiBBcHIgIDggMTY6MzA6MTggMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogZmxvdy5jIChmaW5kX2F1dG9faW5jKTogQWxzbyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0CisJYW55IHNldHMgb2YgdGhlIGluY3JlbWVudGVkIHJlZ2lzdGVyIGJldHdlZW4gdGhlIG1lbW9yeQorCXJlZmVyZW5jZSBhbmQgaW5jcmVtZW50IGluc24uCisKK01vbiBBcHIgIDggMTU6NDE6MTQgMTk5NiAgSm9obiBQb2xzdHJhICAoamRwQHBvbHN0cmEuY29tKQorCisJKiBjb25maWd1cmUgKGlbMzQ1Nl04Ni0qLWZyZWVic2RlbGYqKTogTmV3IHRhcmdldC4KKwkqIGkzODYvZnJlZWJzZC1lbGYuaDogTmV3IGZpbGUuCisJKiBpMzg2L3gtZnJlZWJzZCAoVVNFUl9IKTogTmV3IGRlZmluZTsgdG8gbnVsbC4KKworTW9uIEFwciAgOCAxNDo0NDo0MSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQWx3YXlzIHdhcm4gaWYgbWFpbiBkb2Vzbid0IHJldHVybiBpbnQuCisKK01vbiBBcHIgIDggMTM6MDE6MzcgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuYyAoZ290X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24sIHJldHVybnMgdHJ1ZSBpZiB0aGUKKwlvcGVyYW5kIGNhbiBnbyBpbiBWLjQncyBHT1QuCisJKHJzNjAwMF9waWNfcmVnaXN0ZXIpOiBOZXcgdmFyaWFibGUuCisJKG91dHB1dF9lcGlsb2cpOiBSZXNldCByczYwMDBfcGljX3JlZ2lzdGVyLgorCisJKiByczYwMDAuaCAocnM2MDAwX3BpY19yZWdpc3Rlcixnb3Rfb3BlcmFuZCxmbGFnX3BpYyk6IEFkZAorCWRlY2xhcmF0aW9ucy4KKwkoUFJFRElDQVRFX0NPREVTKTogQWRkIGdvdF9vcGVyYW5kLgorCisJKiByczYwMDAubWQgKG1vdnNpKTogQWRkIHN1cHBvcnQgZm9yIFYuNCdzIC1mcGljIGFuZCAtRlBJQy4KKwkoaW5pdF92NF9waWMpOiBJbml0aWFsaXplIHRoZSBWNCBwaWMgcmVnaXN0ZXIgaWYgbmVlZGVkLgorCShjYWxsIHBhdHRlcm5zKTogSWYgLWZwaWMvLWZQSUMsIGNhbGwgZnVuY3Rpb24gd2l0aCBAcGx0IHN1ZmZpeC4KKworCSogdC1lYWJpZ2FzIChNVUxUSUxJQl9ESVJOQU1FUyk6IFJlbW92ZSBlcnJhbnQgcGljIGRpcmVjdG9yeS4KKworCSogcnM2MDAwLmMgKG91dHB1dF9wcm9sb2cpOiBDb3JyZWN0bHkgc3RvcmUgJiByZXN0b3JlIHRoZQorCWFyZ3VtZW50cyB0byBtYWluIGluIHRoZWlyIGNvcnJlY3Qgc2F2ZSBsb2NhdGlvbiwgd2hlbiBjYWxsaW5nIHRoZQorCXN0YXJ0IGZ1bmN0aW9uLgorCitNb24gQXByICA4IDEzOjAxOjM3IDE5OTYgIERhdmlkIFJlZXNlICA8RGF2ZS5SZWVzZUBFYXN0LlN1bi5DT00+CisKKwkqIHJzNjAwMC5jIChwcmludF9vcGVyYW5kKTogVXNlIHJlZ19uYW1lcyB0byBwcmludCByZWdpc3RlcnMuCisKK0ZyaSBBcHIgIDUgMDA6NDA6MTkgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAuYyAoaDgzMDBfdmFsaWRfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZSk6IFVzZSB1bmRlcnNjb3JlcywKKwlub3QgZGFzaGVzIGluIGF0dHJpYnV0ZXMuCisJKGg4MzAwX2Z1bmN2ZWNfZnVuY3Rpb25fcCk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKwkoaDgzMDBfaW50ZXJydXB0X2Z1bmN0aW9uX3ApOiBMaWtld2lzZS4KKworCSogcGEuaCAoSU5JVF9DVU1VTEFUSVZFX0lOQ09NSU5HX0FSR1MpOiBJbml0aWFsaXplICJpbmRpcmVjdCIKKwlmaWVsZCB0byB6ZXJvLgorCitUaHUgQXByICA0IDEyOjUyOjExIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogbG9vcC5jIChjb21iaW5lX2dpdnMpOiBVc2UgbmV3IG1hY3JvIEdJVl9TT1JUX0NSSVRFUklPTi4KKwlOZXcgdmFyaWFibGUgZ2l2X2FycmF5LiAgTG9vcCBvdmVyIGdpdl9hcnJheSBpbnN0ZWFkIG9mIGZvbGxvd2luZworCW5leHRfaXYgbGlua3MuCisJKGdpdl9zb3J0KTogTmV3IGZ1bmN0aW9uLgorCSogc2guaCAoR0lWX1NPUlRfQ1JJVEVSSU9OKTogIERlZmluZS4KKworCSogYy10eXBlY2suYyAocHVzaF9pbml0X2xldmVsKTogV2hlbiBvdXRwdXQgYWxpZ25tZW50IGZvciBzdHJ1Y3R1cmUKKwlmaWVsZCwgYWRkIGNoZWNrIHRvIHZlcmlmeSBpdCBpcyB0aGUgbmV4dCBmaWVsZCB0byBiZSBvdXRwdXQuCisKK1RodSBBcHIgIDQgMTI6MTk6MjYgMTk5NiAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgIDxkYXZpZG1AQVpTdGFyTmV0LmNvbT4KKworCSogYWxwaGEuYzogRG9uJ3QgaW5jbHVkZSBzdGFtcC5oIGZvciBMaW51eC4KKworVGh1IEFwciAgNCAxMjoxNzowOCAxOTk2ICBSaWNoYXJkZyBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb2JqYy9NYWtlZmlsZTogUmVuYW1lIHRocmVhZCogdG8gdGhyKi4KKwkqIG9iamMvdGhyZWFkLmM6IFJlbmFtZSB0aHJlYWQtKiB0byB0aHItKi4KKwkqIG9iamMvdGhyLWRlY29zZjEuYzogUmVuYW1lZCBmcm9tIHRocmVhZC1kZWNvc2YxLmMKKwkqIG9iamMvdGhyLWlyaXguYzogUmVuYW1lZCBmcm9tIHRocmVhZC1pcml4LmMuCisJKiBvYmpjL3Roci1zaW5nbGUuYzogUmVuYW1lZCBmcm9tIHRocmVhZC1zaW5nbGUuYy4KKwkqIG9iamMvdGhyLXNvbGFyaXVzLmM6IFJlbmFtZWQgZnJvbSB0aHJlYWQtc29sYXJpcy5jLgorCSogb2JqYy90aHItd2luMzIuYzogUmVuYW1lZCBmcm9tIHRocmVhZC13aW4zMi5jLgorCSogb2JqYy9vYmpjLWFwaS5oOiBJbmNsdWRlIHRoci5oLCBub3QgdGhyZWFkLmguCisJKiBvYmpjL3J1bnRpbWUuaCwgb2JqYy9zYXJyYXkuaDogTGlrZXdpc2UuCisKKwkqIGkzODYubWQgKGFzaGxkaTNfY29uc3RfaW50KTogRG9uJ3QgcmVjb2duaXplIGlmIHdvbid0IG1hdGNoCisJY29uc3RyYWludCBvZiBvcGVyYW5kIDIuCisKK1RodSBBcHIgIDQgMTE6NDA6NTUgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiBjb25maWcvZnAtYml0LmMgKEVYVEVOREVEX0ZMT0FUX1NUVUJTKTogSWYgRVhURU5ERURfRkxPQVRfU1RVQlMKKwlpcyBkZWZpbmVkLCBkZWZpbmUgYWxsIG9mIHRoZSBYRi9URiBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZQorCWdlbmVyYXRlZCB0aGF0IHdlIGRvbid0IGhhdmUgY29kZSBmb3IgeWV0LgorCisJKiBpOTYwL3QtKHZ4d29ya3M5NjAsOTYwYmFyZSk6IChMSUIyRlVOQ1NfRVhUUkEpOiBNYWtlIGFuZAorCWNvbXBpbGUgeHAtYml0cy5jIHRoYXQgZGVmaW5lcyBFWFRFTkRFRF9GTE9BVF9TVFVCUy4KKworCUZyb206IHN0ZXZlIGNoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CisJKiBpMzg2L3gtY3lnd2luMzIgKExBTkdVQUdFUyk6IERlbGV0ZS4KKwkqIGkzODYveG0tY3lnd2luMzIuaCAoRVhFQ1VUQUJMRV9TVUZGSVgpOiBTZXQgdG8gLmV4ZS4KKwkqIHJzNjAwMC94bS1jeWd3aW4zMi5oIChFWEVDVVRBQkxFX1NVRkZJWCk6IFNldCB0byAuZXhlLgorCitXZWQgQXByICAzIDE0OjEwOjE2IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IENsb2JiZXIgcmVnaXN0ZXIgb25seSBpZiBpdCBpcyBub24temVyby4KKworV2VkIEFwciAgMyAxMTozMTo1NSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBoODMwMC5oIChoODMwMF9mdW5jdmVjX2Z1bmN0aW9uX3ApOiBEZWNsYXJhdGlvbiBtb3ZlZCBoZXJlLgorCSogaDgzMDAuYyAoaDgzMDBfZnVuY3ZlY19mdW5jdGlvbl9wKTogRGVjbGFyYXRpb24gcmVtb3ZlZCBmcm9tIGhlcmUuCisJKiBoODMwMC5tZCAodHN0cWkpOiBUd2VhayB0byB3b3JrIGxpa2Ugb3RoZXIgdHN0WFggcGF0dGVybnMuCisJKGNtcGhpKTogVHVybiBpbnRvIGEgZGVmaW5lX2V4cGFuZC4gIEFkZCB0d28gYW5vbnltb3VzCisJbWF0dGVybnMgdG8gbWF0Y2ggdGhlIG91dHB1dCBvZiB0aGUgY21waGkgZXhwYW5kZXIuCisJKGNtcHNpKTogQWNjZXB0IGNvbnN0YW50cyBhcyB0aGUgc2Vjb25kIGlucHV0IG9wZXJhbmQuCisKK1R1ZSBBcHIgIDIgMTM6NTI6MzAgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAubWQgKG1vdnFpX2ludGVybmFsKTogUmVtb3ZlIHVzZWxlc3MgYWx0ZXJuYXRpdmUocykuICBGaXgKKwlsZW5ndGhzIGFuZCBzaW1wbGlmeSBieSByZW9yZGVyaW5nIHJlbWFpbmluZyBhbHRlcm5hdGl2ZXMuCisJKG1vdnN0cmljdHFpLCBtb3ZoaV9pbnRlcm5hbCwgbW92c3RyaWN0aGkpOiBMaWtld2lzZS4KKwkobW92c2lfaDgzMDBoLCBtb3ZzZl9oODMwMGgpOiBMaWtld2lzZS4KKworCSogaDgzMDAvaDgzMDAuYyAoZXh0cmFfcG9wKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwkoY3VycmVudF9mdW5jdGlvbl9hbm9ueW1vdXNfYXJncyk6IExpa2V3aXNlLgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IFJlbW92ZSBpbmNvcnJlY3QgdmFyYXJncy9zdGRhcmcKKwlyZWxhdGVkIGNvZGUuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisJKGZ1bmN0aW9uX2FyZyk6IE5ldmVyIHBhc3MgdW5uYW1lZCBhcmd1bWVudHMgaW4gcmVnaXN0ZXJzLgorCSogaDgzMDAuaCAoTE9OR19MT05HX1RZUEVfU0laRSk6IFVzZSA2NGJpdHMgd2hlbiBpbnRzIGFyZSAzMmJpdHMuCisJKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKworTW9uIEFwciAgMSAxNjo1OTo0OCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBGaXggc2lnbmFsIHByb3RvdHlwZSBvbiBTdW5PUyB0byBhdm9pZCBwZWRhbnRpYyBDKysKKwllcnJvci4KKworTW9uIEFwciAgMSAxNjoxNjozNCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBXaGVuIGZpbmRpbmcgbW9kZSB0byBhY2Nlc3MgYml0ZmllbGQKKwl0aGF0IGVuZHMgdXAgcHJvcGVybHkgYWxpZ25lZCwgdXNlIG1vZGUgY2xhc3Mgb2YgaXRzIHR5cGUgdW5sZXNzCisJdHlwZSdzIG1vZGUgd2FzIEJMS21vZGUuCisKK01vbiBBcHIgIDEgMTM6NDU6MzAgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogaDgzMDAuYyAoaW50ZXJydXB0X2hhbmRsZXIpOiBSZW5hbWVkIGZyb20gcHJhZ21hX2ludGVycnVwdC4KKwlBbGwgcmVmZXJlbmNlcyBjaGFuZ2VkLgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IFNldCBpbnRlcnJ1cHRfaGFuZGxlciBpZiB0aGUgY3VycmVudAorCWZ1bmN0aW9uIGhhcyB0aGUgImludGVycnJ1cHQtaGFuZGxlciIgYXR0cmlidXRlLgorCShzbWFsbF9jYWxsX2luc25fb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkoaDgzMDBfaW50ZXJycnVwdF9mdW5jdGlvbl9wKTogTmV3IGZ1bmN0aW9uLgorCShoODMwMF9mdW5jdmVjX2Z1bmN0aW9uX3ApOiBOZXcgZnVuY3Rpb24uCisJKGg4MzAwX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCisJKiBoODMwMC5oIChWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKTogRGVmaW5lLgorCSogaDgzMDAubWQgKGNhbGwgaW5zbnMpOiBIYW5kbGUgY2FsbHMgdGhyb3VnaCB0aGUKKwlmdW5jdGlvbiB2ZWN0b3IuICBJbmRpcmVjdCBjYWxscyBhbmQgY2FsbHMgdGhyb3VnaAorCXRoZSBmdW5jdGlvbiB2ZWN0b3IgaGF2ZSBhIGxlbmd0aCBvZiB0d28gYnl0ZXMuCisKK1NlZSBDaGFuZ2VMb2cuMTAgZm9yIGVhcmxpZXIgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuMCBiL2djYy9DaGFuZ2VMb2cuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQxM2IxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL0NoYW5nZUxvZy4wCkBAIC0wLDAgKzEsNjY3MSBAQAorCitXZWQgRGVjIDIxIDAyOjQ2OjM0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjMyIHJlbGVhc2VkLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFZheCBwY2MgZW5mb3JjZXMgZ290by1sZXNzIHByb2dyYW1taW5nCisJd2l0aCBmYXRhbCBlcnJvci4KKworCSogc3RtdC5jIChmaXh1cF9tZW1vcnlfc3VicmVnKTogTmV3IGFyZyBJTlNOIHNheXMgd2hlcmUgdG8gZW1pdCBpbnNucy4KKwkod2Fsa19maXh1cF9tZW1vcnlfc3VicmVnKTogTGlrZXdpc2UuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCitUdWUgRGVjIDIwIDAxOjI2OjU2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3QgY2xlYXIgVFJFRV9QRVJNQU5FTlQgaW4gZm4gZGVjbC4KKwlNYWtlIHRoZSByZXN1bHQgZGVjbCBhIHBlcm1hbmVudCBub2RlLgorCShmaW5pc2hfZnVuY3Rpb24pOiBEb24ndCBjbGVhciBERUNMX1JFU1VMVCBpbiBhbiBpbmxpbmUgZnVuY3Rpb24uCisJKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGxvc2UgREVDTF9SRVNVTFQgb3IgREVDTF9TQVZFRF9JTlNOUworCW9yIG9sZCBkZWNsLCB3aGVuIGRlZm4gaXMgZm9sbG93ZWQgYnkgcmVkZWNsYXJhdGlvbi4KKwlMaWtld2lzZSBERUNMX0FSR1VNRU5UUyBhbmQgREVDTF9SRVNVTFRfVFlQRS4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogRW5kIGFueSBzZXF1ZW5jZXMgbGVmdCB1bnRlcm1pbmF0ZWQuCisKKwkqIGNzZS5jIChwcmVkZWNpZGVfbG9vcF9lbnRyeSk6IElmICJsb29wIiBoYXMgbm8gbGFiZWwsIGRvIG5vdGhpbmcuCisKKwkqIHJlY29nLmMgKGFzbV9ub3BlcmFuZHMpOiBOb3cgcmV0dXJuIC0xIGlmIG5vdCB0aGF0IGtpbmQgb2YgaW5zbi4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCSogY29tYmluZS5jIChjaGVja19hc21fb3BlcmFuZHMpOiBDYWxsaW5nIGNoYW5nZXMgbm90IHF1aXRlIHRyaXZpYWwuCisJKiBmaW5hbC5jIChmaW5hbCk6IExpa2V3aXNlLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IExpa2V3aXNlLgorCSogcmVjb2cuYyAoYXNtX25vcGVyYW5kcyk6IE90aGVyIGNoYW5nZXM6CisJTG9vcCBjb21wdXRpbmcgIyBvZiBTRVRzIGluIGEgUEFSQUxMRUwgd2FzIG9mZiBieSAxLgorCVZhbGlkYXRlIGFsbCBlbHRzIG9mIGFueSBQQVJBTExFTCwgdG8gYmxvY2sgaW52YWxpZCBjb21iaW5hdGlvbnMuCisKKwkqIG5zMzJrLm1kIChhbmRzaTMsIGFuZGhpMyk6IE1ha2UgbmV3IENPTlNUX0lOVHM7IGRvbid0IGNsb2JiZXIgb2xkLgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBXaGVuIGxvb2tpbmcgaW4gYHBhcm1fbWFwJywKKwlpZiBvdXIgbW9kZSBtaXNtYXRjaGVzIHBhcm0ncyBtb2RlLCB1c2UgY2hhbmdlX2FkZHJlc3MgdG8gZXh0cmFjdCBwYXJ0LgorCU9uIEJZVEVTX0JJR19FTkRJQU4gbWFjaGluZXMsIGFkanVzdCB0aGUgb2Zmc2V0LgorCitNb24gRGVjIDE5IDIzOjUwOjE0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2V4cC55ICgnLycgYW5kICclJyBvcHMpOiBJZiBkaXZpZGUgYnkgMCwgcHJpbnQgZXJyb3IsIGRvbid0IGRpZS4KKworU3VuIERlYyAxOCAxNDowMzowMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChtYWluKTogQXZvaWQgc2hhZG93aW5nIEkgaW4gaW5uZXIgYmxvY2suCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogVGhlIGluc24gYXQgdGhlIGVuZCBvZiBhIGxpYmNhbGwKKwltYXkgYmUgZGVhZCwgYnV0IHRoZSBsaWJjYWxsIG1pZ2h0IHN0aWxsIGJlIG5lZWRlZCBpZiB0aGUKKwloYXJkIHJldHVybiByZWcgaXMgdXNlZCBsYXRlci4gIERldGVjdCB0aGlzIGNhc2UuCisJKGxpYmNhbGxfZGVhZF9wKTogTmV3IGZuIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGUgbGliY2FsbCBpcyBkZWFkLgorCisJKiBvdXRwdXQtbTY4ay5jLCB0bS1tNjhrLmggKHN0YW5kYXJkX3N1bl9mcGFfY29uc3RhbnRfcCk6IEZuIHJlbmFtZWQuCisKK1NhdCBEZWMgMTcgMTM6MjM6NTEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUgPT4gLi4uX2RlY2wuCisKKwkqIGNvbWJpbmUubyAodHJ5X2NvbWJpbmUpOiBBY2NlcHQgY29tYmluYXRpb24gbWFraW5nIGEgdmFsaWQKKwlhc20gd2l0aCBvcGVyYW5kcy4KKwkoY2hlY2tfYXNtX29wZXJhbmRzKTogUmVjb2duaXplIGFzbSB3aXRoIG9wZXJhbmRzIHRoYXQgYXJlIHZhbGlkLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvbid0IGFjY2VwdCBhIHJlZyBhcyBhIGdpdgorCWlmIHRoZSByZWcgd2FzIG1hZGUgYnkgbG9vcC1vcHRpbWl6ZS4KKworCSogc3RtdC5jIChiYWxhbmNlX2Nhc2Vfbm9kZXMpOiBBIGxpc3Qgb2YgMyBhbHdheXMgc3BsaXRzIGluIG1pZGRsZS4KKworRnJpIERlYyAxNiAxNzoyMjowNyAxOTg4ICBUaWVtYW5uICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLm1kIChmZXRjaCBmcm9tIGNvbnN0YW50IGFkZHJlc3MpOiBTcGxpdCBpbnRvIHR3byBwYXR0ZXJucywKKwlvbmUgZml4ZWQgcG9pbnQgYW5kIG9uZSBmbG9hdGluZy4KKwkoc3RvcmUgYXQgY29uc3RhbnQgYWRkcmVzcyk6IEhhbmRsZSByZW1lbWJlcmVkIGhpLWhhbGYgZGlmZmVyZW50bHkuCisJT3RoZXIgYnVnIGZpeGVzLgorCShmaXhfdHJ1bmNzZnNpMik6IFVzZSBmMSwgbm90IGYwLCBhcyB0ZW1wLgorCShmaXhfdHJ1bmNkZnNpMik6IERvbid0IGNsZWFyIENDX0YxX0lTXzAuCisKKwkqIG91dHB1dC1zcGFyYy5jIChzaW5nbGVtb3ZlX3N0cmluZyk6IENoYW5nZWQgaGFuZGxpbmcgb2YgY2FzZQorCXdoZXJlIG9wMSBpcyBub3QgbWVtb3J5IGFuZCBvcDAgaGFzIHZhcnlpbmcgYWRkcmVzcy4KKwkob3V0cHV0X2ZwX21vdmVfZG91YmxlKTogQXZvaWQgcmVsb2FkaW5nIGhpZ2ggaGFsZiBhZGRyZXNzCisJaW4gdGhlIGxkZCBhbmQgc3RkIGNhc2VzIHdpdGggY29uc3RhbnQgYWRkcmVzcy4KKwkobWFrZV9mMF9jb250YWluXzApOiBIYW5kbGUgZjAgYW5kIGYxIGluZGl2aWR1YWxseS4KKworCSogdG0tc3BhcmMuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQ09OU1QgaXMgbm93IGlsbGVnaXRpbWF0ZS4KKworCSogcnRsLmMgKG5vdGVfc3RvcmVzKTogUGFzcyBlbnRpcmUgU0VUIHJ0eCwgbm90IGZsYWcsIGFzIDJuZCBhcmcgdG8gRk4uCisJKiBsb2NhbC1hbGxvYy5jIChyZWdfaXNfc2V0KTogTmV3IHR5cGUgZm9yIDJuZCBhcmcuCisKKwkqIE1ha2VmaWxlOiBDb21tZW50IG91dCBjYzFwbHVzLCBzaW5jZSBub3QgcmVhZHkgZm9yIHJlbGVhc2UuCisKK1RodSBEZWMgMTUgMTY6Mzk6NDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChyZWdfaXNfc2V0KTogSWYgYSBoYXJkIHJlZyBpcyBjbG9iYmVyZWQsIG1ha2UgaXQgZnJlZQorCWJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGluc24uCisJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IExpa2V3aXNlLgorCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9jb25mbGljdHMpOiBMaWtld2lzZS4KKwlVc2Ugbm90ZV9zdG9yZXMgdG8gY2FsbCBtYXJrX3JlZ197c3RvcmUsY2xvYmJlcn0uCisJKG1hcmtfcmVnX3N0b3JlKTogQ2hhbmdlZCBjYWxsaW5nIGNvbnZlbnRpb25zCisJQWxsIHdvcmsgZG9uZSBvbiBzZXQvY2xvYmJlcmVkIHJlZ3MgaXMgbm93IGRvbmUgaGVyZS4KKwlJZ25vcmUgQ0xPQkJFUnMuCisJKG1hcmtfcmVnX2Nsb2JiZXIpOiBTaW1pbGFyIGZuLCBidXQgaWdub3JlIFNFVHMgYW5kIGhhbmRsZSBDTE9CQkVScy4KKwkocmVnc19zZXQsIG5fcmVnc19zZXQpOiBOZXcgc3RhdGljIHZhcnMgZm9yIGNvbW0uIGFtb25nIHRoZSBhYm92ZS4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogY2FsbCBwcm90ZWN0X2Zyb21fcXVldWUgb24gb3BlcmFuZHMuCisJVGhpcyByZXF1aXJlcyBwcmVleHBhbmRpbmcgdGhlIG91dHB1dHMgaW50byBhIHZlY3RvciBvZiBydHgncy4KKworCSogTWFrZWZpbGUgKGluc3RhbGwpOiBjZCB0byAkKGxpYmRpcikgYmVmb3JlIHJhbmxpYi4KKworCSogYy10eXBlY2suYyAoY19leHBhbmRfYXNtX29wZXJhbmRzKTogZW1pdF9xdWV1ZSBhdCB0aGUgZW5kLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQ291bnQgIyBhbHRlcm5hdGl2ZXMgcHJvcGVybHkgZm9yCisJYW4gYXNtIGluc24sIGFuZCBjaGVjayB0aGF0IGFsbCBvcGVyYW5kcyBjb3JyZXNwb25kLgorCisJKiBsb29wLmMgKHZlcmlmeV9sb29wKTogUmVqZWN0IGxvb3BzIGNvbnRhaW5nIHNldGptcHMuCisJKiBjc2UuYyAoY3NlX21haW4pOiBEb24ndCBjc2UgYWNyb3NzIGEgY2FsbCB0byBzZXRqbXAuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBQZXJtaXQgYW55IG5vbjAgREVDTF9SVEwgZm9yIGEgVkFSX0RFQ0wuCisKKwkqIHN0bXQuYyAoYmFsYW5jZV9jYXNlX25vZGVzKTogQ291bnQgcmFuZ2VzIGRvdWJsZSB3aGVuIGJhbGFuY2luZy4KKworV2VkIERlYyAxNCAxMzo1MDo0NSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKG91dHB1dF9hZGRyX2NvbnN0KTogT3V0cHV0IGp1c3QgYC0nLCBub3QgYCstJy4KKworCSogbWFrZS1jYzEuY29tOiBVcGRhdGUgZmlsZW5hbWVzIGNoYW5nZWQgdG8gYGMtJy4KKwkqIG1ha2UtY2NjcC5jb206IFBhc3MgbmVlZGVkIC1EIG9wdGlvbnMgd2hlbiBjb21waWxpbmcgY2NjcC5jLgorCVVzZSAvbm9tYXAgd2hlbiBsaW5raW5nLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFBhcmFwaHJhc2Ugc2V0dGluZyBORVdfUkVHLCBmb3IgSXJpcyBjYy4KKworCSogb3V0cHV0LW02OGsuYyAob3V0cHV0X21vdmVfY29uc3Rfc2luZ2xlKTogJSdzIG11c3QgYmUgZG91YmxlZCB0d2ljZS4KKworCSogbG9vcC5jIChyZWNvcmRfZ2l2KTogQSBnaXYgY2FuIGJlIHJlcGxhY2VhYmxlIGlmIGl0cyB1c2VzIGFyZQorCWFsbCBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBhcyBpdHMgc29sZSBzZXR0aW5nLgorCShsYXN0X3VzZV90aGlzX2Jhc2ljX2Jsb2NrKTogU3Vicm91dGluZSB0byB0ZXN0IHRoYXQuCisKK1R1ZSBEZWMgMTMgMTM6NDE6NTcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBBbGxvdyBmb3IgQ09NUEFSSVNPTiB0byBiZSBhIGNvbnN0X2ludC4KKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogV2FybiBpZiB0eXBlIG1pc21hdGNoIHdpdGggYW5vdGhlciBleHRlcm5hbCBkZWNsCisJaW4gYSBnbG9iYWwgc2NvcGUuCisKKwkqIGZpeGluY2x1ZGVzOiBGaXggdHlwbyBpbiBtc2cgb2YgZGVsZXRpbmcgdW5jaGFuZ2VkIGZpbGUuCisKKwkqIE1ha2VmaWxlIChpbnNuLSopOiBVc2UgdHdvLXN0ZXAgcnVsZXMgd2l0aCBhIHNlcGFyYXRlIHRpbWUtc3RhbXAgZmlsZQorCXRvIGF2b2lkIHJlcnVubmluZyBnZW4qIHVubGVzcyBtZCBoYXMgY2hhbmdlZCBhZ2Fpbi4KKworTW9uIERlYyAxMiAxMzozMjowNSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGkzODYubWQgKHRzdHNmLCB0c3RkZiwgY21wc2YsIGNtcGRmKTogVXNlIGZuc3Rzdywgbm90IGZzdHN3LiAgRmFzdGVyLgorCisJKiB0bS12YXguaCAoQVNNX09VVFBVVF9SRUdfUE9QKTogVXNlIGNvcnJlY3QgYXNtIHN5bnRheCBmb3IgcG9wIGluc24uCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBIYW5kbGUgKHN1YnJlZyAobWVtKSkgYnkgbWFraW5nIGEgY2hhbmdlZCBtZW0uCisJVGhpcyBhdm9pZHMgcHJvZHVjaW5nIGFueSAoc3VicmVnIChtZW0pKXMgZXhjZXB0IGluIHRoZSBzcGVjaWFsCisJY2FzZSB0aGV5IGFyZSBzdXBwb3NlZCB0byBiZSBtYWRlIGhlcmUuCisJQWxzbyBzZXQgdW5kb19zdG9yYWdlIGluIGEgY291cGxlIG9mIGNhc2VzIHRoYXQgZm9yZ290IHRvLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBXaGVuIGhhbmRsaW5nIChTVUJSRUcgKE1FTSkpIGZvciBJTiwKKwlpZiB0aGVyZSBpcyBhbiBPVVQsIG1ha2UgdGhhdCBhIHNlcGFyYXRlIHJlbG9hZC4KKwlSZXR1cm4gaXRzIG51bWJlciBpbiBgb3V0cHV0X3JlbG9hZG51bScKKwkoZmluZF9yZWxvYWRzKTogV2hlbiBwdXNoaW5nIG1hdGNoaW5nLXJlbG9hZHMsIG5vdGUgdGhhdCB0aGUKKwl0d28gb3BlcmFuZHMgY2FuIGhhdmUgZGlmZmVyZW50IHJlbG9hZC1udW1iZXJzLgorCisJKiB0bS0zYjEuaCAoQVNNX09VVFBVVF9DQVNFX0VORCk6IFRlc3QgZmxhZyBvbiBUQUJMRSwgbm90IGl0cyBwYXR0ZXJuLgorCShBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiBJZiAvaSBmbGFnIHNldCwgZG9uJ3Qgb3V0cHV0IHRoZSBkdW1teSBlbnRyeQorCXNpbmNlIHRoZSBmZXRjaGVyLWluc24gd2lsbCBub3QgYmUgb2ZmIGJ5IDIgaW4gdGhpcyBjYXNlLgorCSogbTY4ay5tZCAoY2FzZXNpXzIgcmVjb2duaXplcik6IEZvciAzYjEgc3ludGF4LCBjb21wZW5zYXRlIGZvciB0aGF0LgorCitTdW4gRGVjIDExIDEyOjUxOjQ5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2VucmVjb2cuYyAodHJ5X21lcmdlXzIpOiBObyBsb25nZXIgcHV0IGFsbCBleHBsaWNpdCBkZWNvbXBvc2l0aW9ucworCWJlZm9yZSBhbGwgcHJlZGljYXRlcy4gIFBhdHRlcm5zIGFyZSBub3cgdGVzdGVkIGluIHRoZSBvcmRlciB3cml0dGVuLgorCSogdmF4Lm1kOiBNb3ZlIHRoZSBwdXNoLW9yLW1vdmUtYWRkcmVzcyBwYXR0ZXJucyB0byB0aGUgZW5kLgorCSogbTY4ay5tZDogTW92ZSBsb2FkLWFkZHJlc3MgcGF0dGVybiB0byBlbmQuCisJUmVhcnJhbmdlIHRoZSBzcGVjaWFsLWNhc2UgbW92c2kgcGF0dGVybnMuCisJKiBuczMyay5tZDogTW92ZSBzcGVjaWFsIGxvYWQtcmVnLTE3IHBhdHRlcm4gYmVmb3JlIG1vdnNpLgorCSogaTM4Ni5tZDogTW92ZSB0aGUgUUkgYW5kIERJIHB1c2ggcGF0dGVybnMgdG8gbG9naWNhbCBwbGFjZXMuCisJVGhpcyBzaG91bGQgbm90IGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZy4KKworCSogc3RtdC5jOiBBZGQgQW5keSBIaXRjaGlucydzIGJpbmFyeS10cmVlIGNhc2Ugc3RhdGVtZW50IGNvZGUuCisJKHN0cnVjdCBjYXNlX3N0bXQpOiBjYXNlX2xpc3QgZmllbGQgaXMgbm93IGEgY2FzZV9ub2RlIGNoYWluLgorCVJlcGxhY2UgaGFzX2RlZmF1bHQgZmllbGQgd2l0aCBkZWZhdWx0X2xhYmVsIGZpZWxkLgorCShwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBCdWlsZCBjYXNlX2xpc3QgaW4gaXRzIG5ldyB0eXBlLAorCWFuZCBrZWVwIGl0IHNvcnRlZC4KKwkoZXhwYW5kX2VuZF9jYXNlKTogVXNlIGNhc2VfbGlzdCBpbiBpdHMgbmV3IHR5cGUuCisJQ291bnQgYSByYW5nZSBvZiA+IDEgYXMgdHdvIGNhc2VzLCB3aGVuIGNob29zaW5nIHN0cmF0ZWd5LgorCShncm91cF9jYXNlX25vZGVzLCBiYWxhbmNlX2Nhc2Vfbm9kZXMpOiBOZXcgZm5zLCByZWFycmFuZ2UgY2FzZV9saXN0LgorCShub2RlX2hhc197bG93LGhpZ2h9X2JvdW5kLCBub2RlX2lzX2JvdW5kZWQpOiBOZXcgZm5zIHRlc3QKKwlyZWxhdGlvbnNoaXBzIG9mIHZhbHVlcyBvZiB2YXJpb3VzIGNhc2VfbGlzdCB0cmVlIG5vZGVzLgorCShlbWl0X2p1bXBfaWZfcmVhY2hhYmxlKTogTmV3IGZuLgorCShlbWl0X2Nhc2Vfbm9kZXMpOiBFbWl0IGNvbXBhcmVzIGFuZCBqdW1wcyBiYXNlZCBvbiB0cmVlIG9mIGNhc2VfbGlzdC4KKworCSogY2NjcC5jIChmaW5jbHVkZSk6IEhhbmRsZSBub25vcmRpbmFyeSBmaWxlcyAoc3RhdCBkb2Vzbid0IGdpdmUgc2l6ZSkuCisKKwkqIHRtLTNiMS5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBIYW5kbGUgY2FzZSBvZiBicmVnIGFuZCBubyBpcmVnLgorCitTYXQgRGVjIDEwIDE2OjMwOjMyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3BhcmMubWQgKG1vdnN0cnNpKTogU2VwYXJhdGUgZGVmaW5lX2V4cGFuZCBhbmQgZGVmaW5lX2luc247CisJY2xvYmJlciBzb21lIHBzZXVkb3MgdG8gZ2V0IHRlbXAgcmVncyB0byB1c2UgaW4gdGhlIG91dHB1dC4KKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfYmxvY2tfbW92ZSk6IFVzZSB0aG9zZSB0ZW1wIHJlZ3MsCisJZ3VhcmFudGVlZCB0byBiZSBmcmVlLgorCisJKiBzcGFyYy5tZCAoYW5kY2MgcGF0dGVybnMgZm9yIGJpdGZpZWxkcyBmcm9tIG1lbW9yeSk6CisJVGVzdCBpbW1lZC4gYXJnIGZvciBiZWluZyBpbiByYW5nZS4KKwkobG9hZCBERm1vZGUgY29uc3RhbnQpOiBVc2UgJW0gZm9yIG91dHB1dCBpbiBvbmUgY2FzZS4KKwkqIG91dHB1dC1zcGFyYy5jIChzaW5nbGVtb3ZlX3N0cmluZywgb3V0cHV0X21vdmVfZG91YmxlKTogTGlrZXdpc2UuCisKKwkqIG91dHB1dC1zcGFyYy5jIChzaW5nbGVtb3ZlX3N0cmluZyk6IE5ldyBjYXNlIGZvciBtZW0tdG8tbWVtIG1vdmUuCisKK0ZyaSBEZWMgIDkgMTE6NDI6MTUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IGZvciBDTE9CQkVSIG9mIGEgcHNldWRvLAorCWl0IGlzIGJvcm4ganVzdCBiZWZvcmUgdGhpcyBpbnNuIGFuZCBkaWVzIGp1c3QgYWZ0ZXIuCisKKwkqIHRtLXZheC5oIChOT1RJQ0VfVVBEQVRFX0NDKTogRm9yIGFvYiwgc29iIGluc25zLCBmb3JnZXQgdGhlIGNjJ3MuCisKKwkqIGJhc2ljLWJsb2NrLmggKFJFR19CTE9DS19VTktOT1dOLCBSRUdfQkxPQ0tfR0xPQkFMKTogTW92ZSBkZWZuIGhlcmUuCisJKiBsb2NhbC1hbGxvYy5jOiBVc2UgdGhlbS4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBBZGRpdGlvbmFsIGV4cGxhbmF0b3J5IG1lc3NhZ2UKKwlmb3Igc29tZSBwcm90b3R5cGUgbWlzbWF0Y2hlcy4KKworCSogZ251bGliLmMgKFNJdHlwZSk6IE5ldyBtYWNybyB1c2VkIGluc3RlYWQgb2YgYGludCcKKwlmb3IgU0ltb2RlIG9wZXJhbmRzIGFuZCB2YWx1ZXMuICBEZWZpbml0aW9uIGlzIGBsb25nIGludCcuCisKK1RodSBEZWMgIDggMTg6NDU6NDggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAob3BlcmFuZHNfbWF0Y2hfcCk6IE1vdmUgdGhlIGxhYmVsIGBzbG93JyBzbyB0aGF0CisJaXQgZG9lc24ndCBjYXVzZSBhIFJFRyBhbmQgYSBTVUJSRUcgdG8gYmUgY29tcGFyZWQgd3JvbmcuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBPdXRwdXQgYSBsYWJlbCBgZ2NjX2NvbXBpbGVkLicgZm9yIEdEQi4KKwlJZiBuZXcgbWFjcm8gQVNNX0lERU5USUZZX0dDQyBpcyBkZWZpbmVkLCBydW4gdGhhdCBpbnN0ZWFkLgorCSogdG0tM2IxLmggKEFTTV9JREVOVElGWV9HQ0MpOiBEZWZpbmUgdGhpcyBhcyBuby1vcC4KKworV2VkIERlYyAgNyAxMjoyMDo0MiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGkzODYubWQgKGFkZGRmMyk6IFR5cG86IHBhcmVuIHdhcyBpbiBhIGNvbnN0cmFpbnQuCisKKwkqIGMtZGVjbC5jIChncm9rcGFybXMpOiBBdm9pZCBkdXBsaWNhdGUgbXNncyBmb3IgaW5jb21wbGV0ZSB0eXBlIHB0cnMuCisKKwkqIGdudWxpYi5jOiBSZW5hbWUgYWxsIGZucyB0byBzdGFydCB3aXRoIGBfXycuCisJKiBvcHRhYnMuYywgZXhwci5jOiBSZW5hbWUgYWxsIHJlZmVyZW5jZXMuCisKKwkqIGdudWxpYi5jIChfX2NtcGRpMiwgX191Y21wZGkyKTogTmV3IGZucy4KKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogVXNlIHRoZW0uCisKKwkqIE1ha2VmaWxlIChzdGFnZSopOiBJZ25vcmUgZXJyb3JzIG9uIHRoZSBtYWluIGBtdicgKGZvciBjYzFwbHVzKS4KKwlSdW4gcmFubGliIGlmIHdlIGhhdmUgdG8gY29weSBnbnVsaWIuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogU3BsaXQgYGxhYmVsJyBpbnRvIHNldmVyYWwgbG9jYWwgdmFycy4KKworCSoganVtcC5jIChqdW1wX2JhY2tfcCk6IERvIG5vdGhpbmcgdW5sZXNzIGNjJ3Mgd2VyZSBzZXQgZnJvbSBpbnRlZ2Vycy4KKworVHVlIERlYyAgNiAxMjowMDoyMSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoZXh0ZW5kX3Rva2VuX2J1ZmZlcik6IFVzZSB4cmVhbGxvYywgbm90IHJlYWxsb2MuCisKKwkqIGludGVncmF0ZS5jIChvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogZml4IGFyZ3Mgb2YgZXhwYW5kX2Z1bmN0aW9uX2VuZAorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWRkIG1pc3NpbmcgYXJnIHRvIGV4cGFuZF9lbmRfYmluZGluZ3MuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IEFkZCBtaXNzaW5nIE1PREUgYXJnIHRvIGNhbm9uX2hhc2guCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IERlbC4gZXh0cmEgYXJnIG9mIGNob29zZV9yZWxvYWRfdGFyZ2V0cworCShyZWxvYWQpOiBBZGQgbWlzc2luZyBNT0RFIGFyZyB0byBpbW1lZGlhdGVfb3BlcmFuZC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogRGVsZXRlIGV4dHJhIGFyZyB0byBleHBhbmRfdW5vcC4KKworCSogYy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKToKKwlBZGQgbWlzc2luZyBOT0NPTlZFUlQgYXJnIHRvIGJ1aWxkX3VuYXJ5X29wLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzLCBmaW5pc2hfc3RydWN0KTogQWRkIG1pc3NpbmcgYXJnCisJS05PV05fQUxJR01FTlQgdG8gbGF5b3V0X2RlY2wuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogTGlrZXdpc2UuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBMaWtld2lzZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9pbml0KTogQWRkIG1pc3NpbmcgTE9DQUwgYXJnIHRvIGRieG91dF9zeW1ib2wuCisKKwkqIGV4cHIuYyAoY2xlYXJfc3RvcmFnZSk6IFJlbW92ZSBleGNlc3MgYXJnIHRvIGVtaXRfbW92ZV9pbnNuLgorCisJKiBsb29wLmMgKGNvbnNlY19zZXRzX2ludmFyaWFudF9wKTogQWRkIHBhcmVucyBpbiBoYWlyeSBpZi1jb25kaXRpb24uCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFR5cG8sIG1pc3NpbmcgYGNhc2UnLgorCisJKiBjY2NwLmMgKG1haW4pOiBUeXBvIGhhbmRsaW5nIGAtSS0nIG9wdGlvbi4KKworCSogdG0taTM4Ni5oIChOT19GVU5DVElPTl9DU0UpOiBEZWZpbmUgdGhpczsgY3NlIGlzIHNhaWQgdG8gc2xvdworCXRoaW5ncyBkb3duIHdpdGggbGVzcyB0aGFuIDcgY2FsbHMuCisKKwkqIHN0bXQuYyAoZml4dXBfdmFyX3JlZnNfaW5zbik6IFdoZW4gc2Nhbm5pbmcgdGhlIHJlZy1ub3RlcywKKwlkb24ndCB0b3VjaCBvdGhlciBpbnNucyB0aGV5IHBvaW50IGF0LgorCisJKiBleHByLmMgKGRvX2p1bXApOiBVc2UgaW52ZXJ0X2V4cCwgbm90IHJldmVyc2VfY29uZGl0aW9uLAorCXRvIGludmVydCBzZW5zZSBvZiBhIGp1bXAuCisJKiBqdW1wLmMgcmV2ZXJzZV9jb25kaXRpb24gbm93IHN0YXRpYywgaW52ZXJ0X2V4cCBub3cgZ2xvYmFsLgorCitNb24gRGVjICA1IDEwOjUxOjM5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tc3VuMzg2LmggKEFTTV9GSUxFX1NUQVJUKTogSW4gdGhlIC5maWxlIGFyZywgZXhjbHVkZSBkaXJlY3Rvcmllcy4KKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogSWYgLVcsIHdhcm4gaWYgc3RtdCBoYXMgbm8gc2lkZSBlZmZlY3QuCisKKwkqIGNjY3AuYyAobW9udGhuYW1lcyk6IENhcGl0YWxpemUgZWFjaCBuYW1lLgorCisJKiBydGwuZGVmOiBOZXcgY29kZSBNQVRDSF9PUEVSQVRPUi4KKwkqIGdlbmNvbmZpZy5jICh3YWxrX2luc25fcGFydCk6IEhhbmRsZSBpdC4KKwkqIGdlbmV4dHJhY3QuYyAod2Fsa19ydHgpOiBIYW5kbGUgaXQuCisJKiBnZW5wZWVwLmMgKG1hdGNoX3J0eCk6IEhhbmRsZSBpdC4KKwkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IEhhbmRsZSBpdC4KKwkqIGdlbmVtaXQuYyAobWF4X29wZXJhbmRfMSwgZ2VuX2V4cCwgZ2VuX2V4cGFuZCk6IEhhbmRsZSBpdC4KKwkqIGdlbm91dHB1dC5jIChzY2FuX29wZXJhbmRzKTogSGFuZGxlIGl0LgorCShpbnNuX25fYWx0ZXJuYXRpdmVzKTogTmV3IGFycmF5IGluIHRoZSBvdXRwdXQuCisJKHN0cnVjdCBkYXRhKTogTmV3IHNsb3RzIG5fYWx0ZXJuYXRpdmVzIGFuZCBvcF9uX2FsdGVybmF0aXZlcy4KKwkoc2Nhbl9vcGVyYW5kcywgZ2VuX2luc24sIGdlbl9wZWVwaG9sZSk6CisJUmVjb3JkIG9wX25fYWx0ZXJuYXRpdmVzIGZvciBlYWNoIG9wZXJhbmQuCisJKG91dHB1dF9lcGlsb2d1ZSk6IFZlcmlmeSB0aGF0IGFsbCBvcGVyYW5kcyBoYXZlIHNhbWUgIyBvZiBhbHRlcm5hdGl2ZXMKKwlBbHNvIG91dHB1dCBpbnNuX25fYWx0ZXJuYXRpdmVzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogdXNlIGluc25fbl9hbHRlcm5hdGl2ZXMgdG8gY29udHJvbAorCXRoZSBsb29wIG92ZXIgYWxsIGFsdGVybmF0aXZlcy4KKwlBbiBlbXB0eSBjb25zdHJhaW50IG9yIGVtcHR5IGFsdGVybmF0aXZlIGluIGEgY29uc3RyYWludAorCWlzIGFsd2F5cyBzYXRpc2ZpZWQuCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBMaWtld2lzZS4KKworCSogYy1kZWNsLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEZvciBlYWNoIC1mIG9wdGlvbiwgcmVjb2duaXplIGEgZm9ybQorCXdpdGggYG5vLScgYW5kIGEgZm9ybSB3aXRob3V0LCBhcyBjb250cmFyaWVzLgorCisJKiB0b3BsZXYuYyAobWFpbik6IERlY29kZSAtZiBvcHRpb25zIHVzaW5nIGEgdGFibGUKKwlzbyB0aGF0IGVhY2ggb3B0aW9uIGF1dG9tYXRpY2FsbHkgaGFzIGEgYG5vLScgdmFyaWFudC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IEdpdmUgdXAgaWYgSTEgb3IgSTIgZm9sbG93cyBhIGNvbXBhcmUgaW5zbi4KKworU3VuIERlYyAgNCAxMjowMDozNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChkYXRhX3NlY3Rpb24pOiBJZiBmbGFnX3NoYXJlZCwgdXNlIFNIQVJFRF9TRUNUSU9OX0FTTV9PUAorCWlmIHRoYXQgaXMgZGVmaW5lZC4KKworCSogY2NjcC5jIChpbmNsdWRlX2RlZmF1bHQpOiBBZGQgL3Vzci9sb2NhbC9pbmNsdWRlLgorCisJKiBNYWtlZmlsZSAoaW5zdGFsbCk6IEluc3RhbGwgdGhlIG1ha2VmaWxlLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZXh0ZXJuYWwpOiBOZXcgZm4gdG8gZGVjbGFyZSBhbiBleHRlcm5hbC4KKwkoYXNzZW1ibGVfdmFyaWFibGUpOiBPdXRwdXQgbm90aGluZyBmb3IgZXh0ZXJuYWxzLgorCSogYy1wYXJzZS55IChwcmltYXJ5ID0+IGlkZW50aWZpZXIpOiBDYWxsIGFzc2VtYmxlX3ZhcmlhYmxlIG9uIDFzdCB1c2UuCisKKwkqIHRvcGxldi5jIChtYWluKTogUHJpbnQgdmVyc2lvbiBpbmZvIG9uIHN0ZGVyciwgbm90IHN0ZG91dC4KKwkqIHRtLSouaCAoVEFSR0VUX1ZFUlNJT04pOiBMaWtld2lzZS4KKworCSogdG0taXNpNjguaCwgdG0tbmV3czgwMC5oOiBSZW5hbWUgX19IQVZFX0ZQVV9fIHRvIF9fSEFWRV82ODg4MV9fLgorCisJKiBzcGFyYy5tZCAoc2VxLCBldGMpOiBFbnRpcmUgcGFnZSByZXdyaXR0ZW4gYnkgVGllbWFubgorCXRvIGF2b2lkIGluY29ycmVjdCB1c2Ugb2YgUEFSQUxMRUwuCisJKiBvdXRwdXQtc3BhcmMuYyAoZ2VuX3NjY19pbnNuKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCitTYXQgRGVjICAzIDAwOjAzOjE5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6ICVQIGlzIGFuIEFOU0lmaWVkIGZvcm0gb2YgJXA6CisJcHV0IF9fIGF0IGJlZyBhbmQgZW5kIG9mIGVhY2ggcHJlZGVmaW5lZCBtYWNybyBuYW1lLgorCisJKiB0bS1zdW4zLmggKENQUF9TUEVDKTogRG9uJ3QgZGVmaW5lIC1EbWM2ODAxMCwgZXRjLiwgaWYgLWFuc2kuCisJKiB0bS1zdW4yLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisKKwkqIGMtZGVjbC5jIChzaGFkb3dfdGFnKTogRG9uJ3QgY29tcGxhaW4gaWYgZGVjbGFyZSBhIG5ldyB0YWcKKwlhdCB0b3AgbGV2ZWwsIG9yIGlmIHJlZGVjbGFyZSBhIHRhZy4KKworCSogYy1kZWNsLmMgKGdyb2twYXJtcyk6IFdhcm4gaWYgcGFybSBwb2ludHMgdG8gaW5jb21wbGV0ZSB0eXBlLgorCShXZSBhbHJlYWR5IGVyciBpZiBpdHMgb3duIHR5cGUgaXMgaW5jb21wbGV0ZS4pCisKKwkqIHN0bXQuYyAoZml4dXBfdmFyX3JlZnNfaW5zbnMpOiBGaXggYW55IChTVUJSRUcgKE1FTSkpIGluIFJFR19OT1RFUy4KKwkod2Fsa19maXh1cF9tZW1vcnlfc3VicmVnKTogTmV3IHN1YnJvdXRpbmUgdXNlZCBmb3IgdGhpcy4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogSGFuZGxlIE1FTSByZWZzIHRvIHRoZSBtaWRkbGUKKwlvZiBhIHN0YWNrLXBhcm0tLWF0IGxlYXN0IGluIHRoZSBjYXNlIG9mIHJlYWRpbmcgdGhlIHBhcm0uCisKKwkqIHJ0bC5jIChydHhfZXF1YWxfcCk6IFJFR19GVU5DVElPTl9WQUxVRV9QIGlzIHNpZ25pZmljYW50CisJb25seSB1bnRpbCBlbmQgb2YgcmVsb2FkIHBhc3MuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6CisJQ29udHJvbCB0aGF0IGJ5IHNldHRpbmcgbmV3IHZhciBydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycy4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgZGVjbGFyZSB0aGUgYnVpbHRpbnMKKwl0aGF0IGFyZW4ndCByZWFsbHkgaW1wbGVtZW50ZWQuCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiAiaW4gc3RydWN0dXJlIiBpbXBsaWVzCisJOC1ieXRlIGFsaWdubWVudCBvbmx5IGZvciBERm1vZGUsIG5vdCBmb3IgREltb2RlLgorCisJKiBmaW5hbC5jIChvdXRwdXRfb3BlcmFuZF9sb3NzYWdlKTogQ2xlYW5lciB0ZXh0IGZvciBlcnJvciBtc2cuCisJTm8gbG9uZ2VyIG5lZWQgdG8gd3JpdGUgdGV4dCBpbnRvIC5zIGZpbGUsIG5vdyB0aGF0IGxpbmVudW0gaXMgY29ycmVjdC4KKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogLXRyYWRpdGlvbmFsIHN0b3BzIHdhcm5pbmcKKwlhYm91dCAiZGVjbGFyZWQgZXh0ZXJuLCBsYXRlciBzdGF0aWMiLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBEb24ndCBoYW5kbGUgZmxhZ192b2xhdGlsZSBoZXJlLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBpdCBoZXJlLCBpbiBJTkRJUkVDVF9SRUYgY2FzZS4KKwlUaGlzIHByZXZlbnRzIC1mdm9sYXRpbGUgZnJvbSBjYXVzaW5nIGFkZGl0aW9uYWwgd2FybmluZ3MuCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfbG9hZF9hZGRyZXNzKTogQWxsb3cgUkVHK1JFRyBmb3Igb3BlcmFuZHNbM10uCisKKwkqIG02OGsubWQgKG1vdnNpKTogSWYgd2Ugb3V0cHV0IHRoZSBsYWJlbCBMSW4sCisJc2V0IHRoZSBSVExfSU5URUdSQVRFRCBmbGFnIGluIHRoZSBzd2l0Y2ggdGFibGUncyBwYXR0ZXJuLgorCSogdG0tM2IxLmggKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBEZWZpbmUgTEQlbiBvbmx5IGlmIExJJW4gd2FzIG91dHB1dC4KKworCSogaTM4Ni5tZCAocHVzaC1hbmQtYWRkIHBhdHRlcm4pOiBDb21tZW50IGl0IG91dC4KKwlJdCdzIHNhaWQgdG8gcmVzdWx0IGluIHNsb3dlciBjb2RlLgorCisJKiBpMzg2Lm1kICh0c3RxaSwgdHN0aGksIHRzdHNpKTogT3V0cHV0IHJlYWwgYHRlc3QnIGluc24gaWYgb3AgaXMgcmVnLgorCisJKiBpMzg2Lm1kIChwdXNoIGZvciBESSk6IEFsbG93IGBvaUYnIGZvciAybmQgb3BlcmFuZC4KKworRnJpIERlYyAgMiAxMzo1NzozNSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGkzODYubWQgKG1vdmRpKTogQWxsb3cgRiBjb25zdHJhaW50IGZvciAybmQgb3BlcmFuZC4KKworCSogaTM4Ni5tZCAocHVzaCBmb3IgUUkpOiBkZWZpbmUgcGF0dGVybiB0byBwdXNoIGEgUUltb2RlCisJd2hpY2ggcmVhbGx5IHVzZXMgcHVzaHcgYW5kIHRoZXJlZm9yZSByZWFsbHkgcHVzaGVzIGEgaGFsZndvcmQuCisJKiB0bS1pMzg2LmggKFBVU0hfUk9VTkRJTkcpOiBSb3VuZCB1cCB0byBtdWx0aXBsZSBvZiAyLgorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogSGFuZGxlICVlLCB3aGljaCBtZWFucyByZXBvcnQgYW4gZXJyb3IuCisJVXNlIGl0IHRvIHByb2hpYml0IC1wZyB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyLgorCisJKiB0cmVlLmggKERFQ0xfUkVTVUxUX1RZUEUpOiBOZXcgZmllbGQgaW4gRlVOQ1RJT05fREVDTCBob2xkcyB0aGUgdHlwZQorCW9mIHRoZSB3aWRlbmVkIHJldHVybmVkIHZhbHVlIChub3QgbmVjLiB0aGUgZGVjbGFyZWQgcmV0dXJuIHR5cGUpLgorCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogU2V0IERFQ0xfUkVTVUxUX1RZUEUuCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5faW5saW5lX2Z1bmN0aW9uKTogVXNlIHRoYXQsIG5vdCBERUNMX1JFU1VMVC4KKworVGh1IERlYyAgMSAxNjo0NDoxMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IFdoZW4gcmVvcmRlcmluZyBjb25zdGFudCBhcmdzLCBpbnNpc3Qgb24KKwltYW5pZmVzdCBjb25zdGFudHM7IHJlZ3Mgd2l0aCBrbm93biBjb250ZW50cyB3b24ndCBkby4KKworCSogaTM4Ni5tZCAobXVsc2kzKTogRG9uJ3QgdXNlIHJ0eF9lcXVhbF9wIHRvIGNvbXBhcmUgcmVncy4KKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlc18xKTogRG9uJ3QgY2FsbCBjaGFuZ2VfYWRkcmVzcworCWlmIGFkZHJlc3MgaXMgYXV0b2luYywgc2luY2UgdGhhdCBtYXkgbm90IGJlIG1lbW9yeV9hZGRyZXNzX3AuCisJU3Vicm91dGluZS1tYWNybyBhZGRfb2Zmc2V0IGRlbGV0ZWQuCisKKwkqIG9wdGFicy5jIChiY2NfZ2VuX2ZjdG4sIHNldGNjX2dlbl9mY3RuKTogTW92ZWQgdG8gdGhpcyBmaWxlLgorCShpbml0X29wdGFicyk6IEluaXQgdGhvc2UgdGFibGVzIGhlcmUuCisJKiBleHByLmMgKGluaXRfY29uZGl0aW9ucyk6IE5vdCBoZXJlLgorCisJKiBzdG10LmMgKGFzc2lnbl9zdGFja19sb2NhbCk6IE1ha2UgYSBsaXN0IG9mIGFsbCBzdGFjayBzbG90cy4KKwkqIGVtaXQtcnRsLmMgKHVuc2hhcmVfYWxsX3J0bCk6IFVuc2hhcmUgYWxsIHRoZSBzdGFjayBzbG90cy4KKworCSogZmluYWwuYyAoZmluYWwpOiBIYW5kbGUgQkFSUklFUiB3aXRoIEFTTV9PVVRQVVRfQUxJR05fQ09ERS4KKwkqIHRtLW5zMzJrLmggKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IEFsaWduIHRvIDQtYnl0ZSBiZHJ5LgorPz8JKiB0bS1zZXF1ZW50LmggKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IE92ZXJyaWRlOiBqdXN0IDItYnl0ZSBiZHJ5LgorCisJKiB0bS1tNjhrLmggKFBSSU5UX09QRVJBTkQpOiB1c2UgbmV3IG1hY3JvcyB0byBwcmludCBmbG9hdHMuCisJKEFTTV9PVVRQVVRfRkxPQVRfT1BFUkFORCk6IE5ldyBtYWNyby4KKwkoQVNNX09VVFBVVF9ET1VCTEVfT1BFUkFORCk6IE5ldyBtYWNyby4KKwkqIHRtLXN1bjMuaDogT3ZlcnJpZGUgdGhvc2UgbWFjcm9zLCB0byBjaGVjayBmb3IgaW5maW5pdGllcy4KKworV2VkIE5vdiAzMCAwNjozNTo0NyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW5zMzJrLmggKEZVTkNUSU9OX3tQUk8sRVBJfUxPR1VFKTogaWYgbm8gZnJhbWUgcG9pbnRlciwKKwlkbyBleHBsaWNpdCBwdXNoIG9yIHBvcCBpbnNucy4KKworCSogdG0tZ2VuaXguaCAoUFJJTlRfT1BFUkFORCk6IEZpeCB0eXBvIGBmaWxlJy4KKwlFeHRlZG4gZGVjbCBmb3IgcGFyZW5fYmFzZV9yZWdfcHJpbnRlZC4KKwkoTUFJTl9GVU5DVElPTl9QUk9MT0dVRSk6IERlbGV0ZWQuCisJKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBEZWZpbmVkLgorCisJKiBjLXBhcnNlLnkgKHl5ZXJyb3IpOiBCZXR0ZXIgZXJyb3IgbXNnIGZvciB1bnByaW50YWJsZSBjaGFyIGluIHRva2VuLgorCShwcmltYXJ5ID0+IGlkZW50aWZpZXIpOiBTZXQgVFJFRV9VU0VEIGlmIGltcGxpY2l0IGRlY2wgbWFkZS4KKworCSogTWFrZWZpbGUgKGNsZWFubGlua3MpOiBOZXcgdGFyZ2V0LgorCShJTlNUQUxMKTogTmV3IHZhcmlhYmxlLCBoYXMgcHJvZ3JhbSB1c2VkIGZvciBpbnN0YWxsaW5nIGZpbGVzIGluIHN5cy4KKworCSogb3V0cHV0LW5zMzJrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IElmIGFkZHIgaXMgc3VtIG9mIDIgY29uc3RzLAorCW91dHB1dCBBRERSIGZpcnN0LCB0aGVuIE9GRlNFVC4KKworCSogbnMzMmsubWQgKGFkZHNpMyk6IEFsbG93IGFkZGluZyBjb25zdCtyZWcgd2l0aCByZXN1bHQgaW4gYW5vdGhlciByZWcuCisKKwkqIHRtLXNlcTM4Ni5oIChGVU5DVElPTl9QUk9GSUxFUik6IFByb3ZpZGUgb3ZlcnJpZGluZyBkZWZpbml0aW9uLgorCisJKiB0bS1ocDlrMzIwLmg6IEFsdGVybmF0ZSBBU01fU1BFQyBpZiB1c2luZyBHQVMuCisJRGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVggaWYgdXNpbmcgR0FTLgorCShGVU5DVElPTl9QUk9MT0dVRSk6IG9uIDY4MDIwIGZvciBiaWcgc3RhY2sgZnJhbWUgdXNlIGxpbmsubC4KKworCSogZ2NjLmMgKFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVgpOiBOZXcgY3VzdC4gbWFjcm8gcmVwbGFjZXMgYC9saWIvJy4KKworCSogdmEtc3BhcmMuaCwgdmEtc3B1ci5oOiBQcmVmaXggbm9uLWludGVyZmFjZSBpZGVudGlmaWVycyB3aXRoIGBfXycuCisKKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IERvbid0IHNldCB1cCBsaWJjYWxscyBmb3IgZnRydW5jX29wdGFiCisJYmVjYXVzZSAoMSkgdGhleSBhcmVuJ3Qgc3VwcG9ydGVkIGFuZCAoMikgdGhleSBhcmUgbmV2ZXIgdXNlZC4KKworCSogZ251bGliLmMgKF9fYnVpbHRpbl9zYXZlcmVncyk6IElmIG5vdCBzcGFyYywgZGVmaW5lIHRoZSBzeW1ib2wgYW55d2F5CisJdG8gYXZvaWQgYSB3YXJuaW5nIGluIHJhbmxpYi4KKworTW9uIE5vdiAyOCAwMTo0NjoxMiAxOTg4ICBNaWNoYWVsIFRpZW1hbm4gIChtZHQgYXQgY2hvY3RhdykKKworCSogYy1wYXJzZS55ICh5eWxleCk6IFR5cG8sIGA9JyBmb3IgYD09JyBtYWtpbmcgd2lkZSBzdHJpbmdzLgorCisJKiBzcGFyYy5tZCAodmFyaW91cyBwbGFjZXMpOiBtYWtlIHN1cmUgdGhhdCBhbGwgcGF0dGVybnMgd2hpY2ggc3RvcmUKKwljYW4gc3RvcmUgdXNpbmcgY29uc3QwX3J0eCAoaS5lLiwgbWFrZSBhbGwgb3BlcmFuZHMgdG8gYHN0JyAlcngpLgorCisJKiBvdXRwdXQtc3BhcmMuYyAodmFyaW91cyBwbGFjZXMpOiBjaGFuZ2VkIGRpc3BhdGNoZXMgb24gU1lNQk9MX1JFRgorCXRvIGRpc3BhdGNoZXMgb24gQ09OU1RBTlRfQUREUkVTU19QIHNpbmNlIHdlIG5vdyByZWNvZ25pemUgYW55IENPTlNUCisJKGFuZCBub3QganVzdCBTWU1CT0xfUkVGcykuICBEb24ndCByZWNvZ25pemUgc3BlY2lhbCBjYXNlIENPTlNUIGZvcgorCW91dHB1dF9ibG9ja19tb3ZlLiAgQ29tcGlsZXIgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1c2UKKwlpdC4KKworCSogc3RtdC5jIChleHBhbmRfZml4dXApOiBJZiB0aGUgY29udHJvbCBzdGFjayBpcyBuZXN0ZWQgd2l0aGluIHRoZQorCW5lc3Rpbmcgc3RhY2ssIHRoZW4gbm8gZml4dXAgaXMgbmVlZGVkLiAgT3RoZXJ3aXNlLCBjb21waWxlciBtdXN0CisJY2hlY2sgZm9yIHBvc3NpYmxlIGZpeHVwcyBiZXR3ZWVuIHRoZSBjdXJyZW50IG5lc3Rpbmcgc3RhY2sgYW5kIHRoZQorCW5lc3Rpbmcgc3RhY2sgdGhhdCBpbW1lZGlhdGVseSBjb250YWlucyB0aGUgY29udHJvbCBzdGFjay4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBmdW5jdGlvbnMgd2hpY2ggYXJlIG5lc3RlZCB1c2UKKwlERUNMX0NPTlRFWFQuICBGb3IgdGhlc2UgZnVuY3Rpb25zLCB0ZXN0IHRoYXQgdGhlaXIgREVDTF9DT05URVhUIGlzCisJYSBMRVRfU1RNVCBub2RlLgorCisJKiB0cmVlLmg6IGRlY2xhcmUgYGJ1aWxkX29mZnNldF90eXBlJy4KKworU3VuIE5vdiAyNyAxMDozNDo1MyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAobWR0IGF0IHlhaGkpCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUpOgorCURvbid0IHRyeSB0byB1c2UgbGRkL3N0ZCBpZiBPUDEgaXMgYSBjb25zdGFudC4KKwkqIHNwYXJjLm1kIChtb3ZkaSk6IEFsbG93IGltbWVkaWF0ZSBhcmdzIG1vdmVkIGludG8gZ2VuZXJhbCByZWdzLgorCisJKiBjLWRlY2wuYyAoZ3Jva3Bhcm1zKTogUmVqZWN0IGluY29tcGxldGUgcGFybSB0eXBlcyBldmVuIGlmIGp1c3QKKwlkZWNsYXJhdGluZywgbm90IGRlZmluaW5nLiAgQ2hhbmdlIHR5cGVzIHRvIGVycm9yX21hcmtfbm9kZQorCWluIGJvdGggdGhlIFBBUk1fREVDTCBhbmQgdGhlIGxpc3Qgb2YgdHlwZXMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IEl0J3Mgbm90IGEgYnVnIGlmIGEgUkVDT1JEX1RZUEUKKwloYXMgYSB0eXBlZGVmIGFzIGl0cyBUWVBFX05BTUUuICBUaGF0IGhhcHBlbnMgaW4gQysrLgorCisJKiBNYWtlIGVhY2ggYGFzbScgd2l0aCBvcGVyYW5kcyByZWNvcmQgaXRzIHNvdXJjZSBmaWxlL2xpbmUKKwl3aXRoIHJlZy1ub3Rlcy4gIEl0IGRvZXNuJ3Qgd29yayB0byBlbWl0IGEgc3BlY2lhbCBub3RlIGJlZm9yZSB0aGUgaW5zbgorCWJlY2F1c2UgdGhlIGluc24gY2FuIGJlIG1vdmVkIGJ5IGxvb3Bfb3B0aW1pemUuCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBOZXcgYXJncyBGSUxFTkFNRSwgTElORS4KKwlSZWNvcmQgdGhlbSBpbiB0aGUgaW5zbiwgaW4gcmVnIG5vdGVzLgorCSogYy10eXBlY2suYyAoY19leHBhbmRfYXNtX29wZXJhbmRzKTogTmV3IGFyZ3MsIHBhc3NlZCBhbG9uZy4KKwkqIGMtcGFyc2UueTogUGFzcyB0aG9zZSBhcmdzLgorCShtYXliZV90eXBlX3F1YWwpOiBMaW5lICNzIGZvciBhc20gc3RtdHMgZW1pdHRlZCBsaWtlIGFsbCBvdGhlcnMuCisJKiBydGwuaCAoUkVHX0FTTV9GSUxFLCBSRUdfQVNNX0xJTkUpOiBOZXcga2luZHMgb2YgcmVnIG5vdGVzLgorCSogdG9wbGV2LmMgKGVycm9yX2Zvcl9hc20pOiBHZXQgdGhlIGluZm8gZnJvbSB0aG9zZSBub3Rlcy4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvbid0IGNsZWFyIEJBRE9QIGZvciBhIHJlZyBsZXR0ZXIKKwlpZiB0aGUgYWx0ZXJuYXRpdmUgdWx0aW1hdGVseSBkb2Vzbid0IGFsbG93IGFueSByZWdzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWYgYW4gYGFzbScgaW5zbiBnZXRzIGFuIGVycm9yLAorCWNoYW5nZSBpdCB0byBhIFVTRSB0byBhdm9pZCBkdXBsaWNhdGUgZXJyb3IgbXNncyBvciBsYXRlciB0cm91YmxlLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBSZWxvYWRpbmcgYSBjb25zdGFudCBhZGRyZXNzLAorCXNwZWNpZnkgUG1vZGUgYXMgdGhlIG1vZGUgZm9yIHB1c2hfcmVsb2FkcywgaW4gY2FzZSBvZiBDT05TVF9JTlQuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBGaXggY2FsYy4gb2Ygc3BhY2UgbmVlZGVkIHdoZW4gUEFSVElBTCA+IDAuCisJQm90aCBzY2FsYXIgY2FzZSBhbmQgQkxLbW9kZSBjYXNlIG5lZWRlZCBmaXhpbmcuCisKKwkqIHNwYXJjLm1kIChsb2FkL3N0b3JlIGNvbnN0YW50IGFkZHJlc3MpOgorCU1vdmluZyBERiBmcm9tIG1lbSB0byBjcHUgcmVncywgZG9uJ3QgZ28gdmlhICVmMC4KKwlEb24ndCB1c2Ugc3RkL2x0ZCBpZiBhbGlnbm1lbnQgaXMgd3Jvbmcgb3IgdW5jZXJ0YWluLgorCitTdW4gTm92IDI3IDEwOjM0OjUzIDE5ODggIE1pY2hhZWwgVGllbWFubiAgKG1kdCBhdCB5YWhpKQorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBBbGxvdyBWT0lEbW9kZSBmb3IgSU5NT0RFLCBPVVRNT0RFOworCWRlZmF1bHQgdGhlIG1vZGUgZnJvbSB0aGUgb3BlcmFuZCB2YWx1ZXMuCisKKwkqIHNwYXJjLm1kOiByZW1vdmUgcGF0dGVybnMgd2hpY2ggZ2VuZXJhdGUgYW5udWxsZWQgYnJhbmNoIGluc25zLgorCVRoZXkgYXJlIGNvcnJlY3QsIGJ1dCB0aG9zZSBpbnNucyBjb25mdXNlIEdEQi4KKworCSogdG0tc3BhcmMuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKToKKwlUcmVhdCBhbnkgY29uc3RhbnQgYWRkcmVzcyBsaWtlIGEgU1lNQk9MX1JFRi4KKwkqIHNwYXJjLm1kOiBDaGVjayBmb3IgQ09OU1RBTlRfQUREUkVTU19QIHJhdGhlciB0aGFuIFNZTUJPTF9SRUYuCisKKwkqIHNwYXJjLm1kOiBQZWVwaG9sZXMgbm93IGFjY2VwdCBTWU1CT0xfUkVGIGFkZHJlc3Nlcy4KKwlUaGUgb3V0cHV0IHJvdXRpbmUgY2FuIG5vdyBzcGxpdCB0aGVtIHByb3Blcmx5IGV2ZW4gYXMgZGVsYXkgaW5zbnMuCisKKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IGFkZGVkIGVudHJ5IGZvciBNRVRIT0RfVFlQRSBhbmQKKwlNRVRIT0RfQ0FMTF9FWFBSLiAgQWxzbyBhZGRlZCBlbnRyeSBmb3IgV0lUSF9DTEVBTlVQX0VYUFIuICBTdWdnZXN0CisJdGhhdCB3ZSBtYWtlIGZpcnN0X3J0bCBvZiBXSVRIX0NMRUFOVVBfRVhQUiAyIGluc3RlYWQgb2YgMS4KKworU3VuIE5vdiAyNyAwMDoxNTozMyAxOTg4ICBNaWNoYWVsIFRpZW1hbm4gIChtZHQgYXQgeWFoaSkKKworCSogcHJpbnQtdHJlZS5jIChkdW1wKTogYWRkZWQgZW50cnkgZm9yIE9QX0lERU5USUZJRVIuCisKKwkqIHRyZWUuYyAoYnVpbGRfb3BfaWRlbnRpZmllcik6IG5ldyBmdW5jdGlvbi4gIE5lZWRlZCBiZWNhdXNlCisJYGJ1aWxkX250JyBleHBlY3RzIGFuICJlIiBub2RlLCBidXQgT1BfSURFTlRJRklFUiBpcyBhbiAieCIgbm9kZS4KKworCSogc3RvcmVfbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiB1c2UgREVDTF9GSUVMRF9DT05URVhUIGluc3RlYWQgb2YKKwlERUNMX0NPTlRFWFQuCisKKwkqIHRyZWUuaCAoREVDTF9GSUVMRF9DT05URVhUKTogbmV3IG1hY3JvLiAgUG9pbnRzIHRvIHRoZSB0eXBlIHRoYXQgYQorCUZJRUxEX0RFQ0wgaXMgYSBtZW1iZXIgb2YuICBGb3IgQywgdGhpcyBpcyBqdXN0IERFQ0xfQ09OVEVYVC4KKworCSogdHJlZS5jIChidWlsZF9tZXRob2RfdHlwZSk6IHR5cG8gdXNlZCAiPT0iIHRvIGFzc2lnbiBiYXNldHlwZSB0bworCVRZUEVfTUVUSE9EX0JBU0VUWVBFIHdpdGggcHJlZGljdGFibHkgcG9vciByZXN1bHRzLgorCitTYXQgTm92IDI2IDIyOjU1OjMyIDE5ODggIE1pY2hhZWwgVGllbWFubiAgKG1kdCBhdCB5YWhpKQorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X3NpemVkX21lbW9wKTogbmV3IGZ1bmN0aW9uIHRvIG91dHB1dCBhIGxvYWQKKwlvciBzdG9yZSBpbnNuIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBvcGVyYW5kIGxvYWRlZCBvciBzdG9yZWQuCisJKG1ha2VfZjBfY29udGFpbl8wKTogdXNlIGluZm8gZnJvbSBjb25kaXRpb24gY29kZXMgdG8gZGVjaWRlIHdoZXRoZXIKKwl0aGUgcmVnaXN0ZXIgJWYwIG5lZWRzIHRvIGhhdmUgMCBsb2FkZWQgZnJvbSBtZW1vcnkgb3Igbm90IGluIG9yZGVyCisJdG8gY29udGFpbiB6ZXJvLgorCShnZW5fc2NjX2luc24pOiBuZXcgZnVuY3Rpb24gdXNlZCBieSBkZWZpbmVfZXhwYW5kcyBmb3IKKwlzZXQtb24tY29uZGl0aW9uLWNvZGUgaW5zbnMuCisJKG91dHB1dF9kZWxheV9pbnNuKTogbm93IGtub3dzIGhvdyB0byBoYW5kbGUgbG9hZCBhbmQgc3RvcmUKKwlzY2hlZHVsaW5nIHdoZW4gdGhlIGxvYWQgb3Igc3RvcmUgb3BlcmF0aW9uIHRha2VzIHR3byBpbnNucyBpbnN0ZWFkCisJb2Ygb25lLiAgVGhlIHJld3JpdGUgaXMgbm93IHVuZGVyc3RhbmRzIGlzIHRoaXM6CisKKwkgIHNldGhpICVoaShhZGRyZXNzKSwlZzEJLT4gc2V0aGkgJWhpKGFkZHJlc3MpLCVnMQorCSAgbGQvc3QgWyVnMSslbG8oYWRkcmVzcyldLCVyZWcJLT4gYiB0YXJnZXQKKwkgIGIJdGFyZ2V0CQkJLT4gbGQvc3QgWyVnMSslbG8oYWRkcmVzcyldLCVyZWcKKwkgIG5vcAkJCQktPiA7OyBnb25lCisKKwkqIGp1bXAuYyAocmV2ZXJzZV9jb25kaXRpb24pOiBtYWtlIHRoaXMgZnVuY3Rpb24gcHVibGljbHkgdmlzaWJsZSwKKwlub3cgbmVlZGVkIGluIGV4cHIuYy4KKworCSogb3V0cHV0LXNwYXJjLmMgKHJlZ19vcl8wX29wZXJhbmQpOiBuZXcgZnVuY3Rpb24sIHJldHVybnMgbm9uemVybworCWlmIG9wZXJhbmQgaXMgY29uc3QwX3J0eCBvciBhIHJlZ2lzdGVyIG9mIHNwZWNpZmllZCBtb2RlLgorCShoYXJkcmVnKTogZGVsZXRlZC4KKworCSogZXhwci5jLCBzdG10LmM6IGZpeGVkIHJhbmRvbSBzeW50YXggZXJyb3JzLgorCisJKiB0cmVlLmMgKGJ1aWxkX21ldGhvZF90eXBlKTogbm93IGNvcnJlc3BvbmRzIHRvIGRlZm4gaW4gdHJlZS5kZWYKKwkgIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiByZW1vdmVkIGNvZGUgdG8gZ2V0IEZVTkNUSU9OX1RZUEUgZnJvbQorCSAgTUVUSE9EX1RZUEUuICBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBsb29rZWQgYXQgaGFyZGVyLgorCisJKiB0cmVlLmRlZiAoTUVUSE9EX1RZUEUpOiBDaGFuZ2VkIGRlZmluaXRpb24gc28gdGhhdCBUUkVFX1RZUEUgKG0pCisJKHdoZXJlIG0gaXMgYSBNRVRIT0RfVFlQRSkgaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKKwltZXRob2QsIG5vdCB0aGUgRlVOQ1RJT05fVFlQRSBmcm9tIHdoaWNoIHRoZSBNRVRIT0RfVFlQRSBpcyBkZXJpdmVkLgorCQorCSogTWFrZWZpbGU6IENoYW5nZWQgdGFyZ2V0IG9mIEJJTkRJUiBmcm9tIC91c3IvbG9jYWwgdG8KKwkvdXNyL2xvY2FsL2Jpbi4KKworU2F0IE5vdiAyNiAxNjoyOToyMiAxOTg4ICBNaWNoYWVsIFRpZW1hbm4gIChtZHQgYXQgY2hpY2thc2F3KQorCisJKiB0bS1zcGFyYy5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBbGxvdyBhbnkgU1lNQk9MX1JFRi4KKwkoTk9USUNFX1VQREFURV9DQyk6IFJlbWVtYmVyIGhpZ2ggaGFsZiBvZiAlZzEgYXMgYSAiY29uZGl0aW9uIGNvZGUiCisJdG8gYXZvaWQgcmVsb2FkaW5nIGl0IGlmIGl0IGRvZXMgbm90IGNoYW5nZS4KKwkoTk9USUNFX1VQREFURV9DQyk6IFRlc3QgU0VUX1NSQywgbm90IFNFVF9ERVNULCBmb3IgYSBDQUxMIHJ0eC4KKwkoUFJJTlRfT1BFUkFORCk6IE5ldyBjb2RlLWxldHRlciBgbScgc2F5cyBvdXRwdXQgb3BlcmFuZCBhcyBhbiBhZGRyZXNzLgorCisJKiB0b3BsZXYuYyAoZmxhZ19zeW50YXhfb25seSk6IE5ldyBmbGFnIHZhcmlhYmxlLgorCSogZmxhZ3MuaDogTGlrZXdpc2UuCisKKwkqIHRvcGxldi5jIChlcnJvcl93aXRoX2RlY2wpOiBFeHRyYSBhcmcsIHBhc3NlZCB0byBmcHJpbnRmLgorCSh3YXJuaW5nX3dpdGhfZGVjbCk6IExpa2V3aXNlLgorCisJKiB0cmVlLmMgKGJ1aWxkX29mZnNldF90eXBlKTogTmV3IGZ1bmN0aW9uLgorCisJKiB0cmVlLmggKFRZUEVfTUVUSE9EX0JBU0VUWVBFKTogTmV3IG5hbWUgZm9yIFRZUEVfTUVUSE9EX0NMQVNTLgorCVVzZXMgaW4gdHJlZS5jIGFuZC4uLiByZW5hbWVkLgorCisJKiBjb21iaW5lLmMgKFNVQlNUX0lOVCk6IE5ldyBtYWNybywgZm9yIHJlcGxhY2luZyBhbiBpbnQuCisJKHN1YnN0KTogQ29sbGFwc2UgbmVzdGVkIFNVQlJFR3MgZXZlbiBpZiBTVUJSRUdfV09SRHMgYXJlIG5vdCAwLgorCisJKiBleHByLmMgKGJjY19nZW5fZmN0biwgc2V0Y2NfZ2VuX2ZjdG4pOiBuZXcgdGFibGVzLAorCWluaXRpYWxpemVkIGluIGluaXRfY29tcGFyaXNvbnMuCisJVXNlZCBpbiBleHBhbmRfZXhwciwgZG9fanVtcCwgZG9fc3RvcmVfZmxhZworCWluc3RlYWQgb2YgZXhwbGljaXQgY29uc3RydWN0aW9uIG9mIGEganVtcC4KKworCSogZXhwci5jIChzYXZlX25vbmNvcGllZF9wYXJ0cyk6IE5ldyBmdW5jdGlvbi4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6CisJICBBUlJBWV9SRUY6IFNwZWNpYWwgY2FzZSBmb3IgYXJyYXkgb2YgY29uc3RhbnRzLgorCSAgV0lUSF9DTEVBTlVQX0VYUFI6IEhhbmRsZSBpdC4KKwkgIElOSVRfRVhQUjogQ2FzZSBkZWxldGVkLgorCSAgTU9ESUZZX0VYUFI6IFVzZSBzYXZlX25vbmNvcGllZF9wYXJ0cy4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IGJsa21vZGVfcGFybXNfZm9yY2VkIGNhbiBiZSA+MAorCWV2ZW4gd2hlbiBubyBzdGFjayBhcmcgc3BhY2Ugb3RoZXJ3aXNlIG5lZWRlZC4KKwlEb24ndCB1c2UgYSBoYXJkIHJlZyBhcyBhIHRhcmdldCBpZiB0aGVyZSBhcmUgY2xlYW51cHMuCisKKwkqIHN0bXQuYyAoc3RydWN0IGJsb2NrKTogTmV3IGVsdC4gb3V0ZXJfY2xlYW51cHMuCisJKHN0cnVjdCBjYXNlKTogTmV3IGVsdC4gbnVtX3Jhbmdlcy4KKwkoc3RydWN0IGZpeHVwKTogQ2hhbmdlZCBtZWFuaW5nIG9mIGNsZWFudXBfbGlzdF9saXN0LgorCUNoYW5nZXMgaW4gZXhwYW5kX2ZpeHVwLCBmaXh1cF9nb3Rvcy4KKwkoZXhwYW5kX2ZpeHVwKTogRGV0ZWN0IHNvbWUgaW50ZXJuYWwgZm9yd2FyZC1qdW1wcworCXRoYXQgbmVlZCBubyBmaXh1cHMtLWZvciBzcGVlZC4KKwkoZml4dXBfZ290b3MpOiBOZXcgYXJnIFRISVNCTE9DSy4KKwkoZXhwYW5kX2V4cHJfc3RtdCk6IEhhbmRsZSBmbGFnX3N5bnRheF9vbmx5LgorCSh1c2VfdmFyaWFibGUpOiBObyBsb25nZXIgc3RhdGljLgorCSh1c2VfdmFyaWFibGVfYWZ0ZXIpOiBuZXcgZm4uCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBoYW5kbGUgY2xlYW51cHMgbGlrZSBhIHN0YWNrIGxldmVsLgorCShleHBhbmRfZGVjbCk6IEhhbmRsZSBhIGNsZWFudXAgd2l0aCBubyBkZWNsLgorCShtb3ZlX2NsZWFudXBzX3VwKTogUHJlc2VydmUgcmVsYXRpdmUgb3JkZXIgb2YgY2xlYW51cHMuCisJKGV4cGFuZF9hbm9uX3VuaW9uX2RlY2wpOiBOZXcgZm4uCisJKHB1c2hjYXNlKTogTmV3IGZhc3QgY2xhdXNlIGlmIG5vIHJhbmdlcyB5ZXQuCisJKHB1c2hjYXNlX3JhbmdlKTogVHVybmVkIG9uLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBOZXcgdGVtcCB2YXIgYGZudHlwZScuCisJU2V0IFRSRUVfVVNFRCBmb3IgYSBwYXJtIHdlIGFyZSBpZ25vcmluZy4KKwkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IFJlYWxseSB1c2UgdGhlIGBmaWxlbmFtZScgYXJnLgorCVVzZSB1c2VfdmFyaWFibGVfYWZ0ZXIgZm9yIFNBVkVfRVhQUiByZWdzLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBIYW5kbGUgT0ZGU0VUX1RZUEUuCisKKwkqIGdudWxpYi5jIChfX2J1aWx0aW5fbmV3LCBldGMuKTogU3VwcG9ydCBmb3IgQysrLgorCisJKiBlbWl0LXJ0bC5jIChuZXh0X2luc24sIHByZXZfaW5zbik6IE5ldyBmbnMuCisKK1NhdCBOb3YgMjYgMTY6Mjk6MjIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKG1kdCBhdCBjaGlja2FzYXcpCisKKwkqIHRyZWUuaCAoVFJFRV9MQU5HX0ZMQUdfWzEyMzRdKTogTmV3IGF0dHJpYnV0ZXMuCisJKFRZUEVfTUVUSE9EX0JBU0VUWVBFKTogTmV3IG5hbWUgZm9yIFRZUEVfTUVUSE9EX0NMQVNTLgorCShUWVBFX09GRlNFVF9CQVNFVFlQRSk6IE5ldyBtYWNyby4KKwkoTlVNX1RSRUVfQ09ERSk6IE5ldyBtYWNyby4KKwkoVFlQRV9OT05DT1BJRURfUEFSVFMpOiBuZXcgZmllbGQgaW4gYSB0eXBlLW5vZGUuCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogU3BsaXQgb3V0IGZyb20gYXNzZW1ibGVfdmFyaWFibGUuCisJKGFzc2VtYmxlX3ZhcmlhYmxlKTogTm8gbG9uZ2VyIGNyZWF0ZXMgdGhlIHJ0bC4KKwlObyBsb25nZXIgaGFuZGxlcyBwb2xpY3kgb2Ygd2hldGhlciB0byBvdXRwdXQgdGVudGF0aXZlIGRlY2wgeWV0LgorCShvdXRwdXRfY29uc3RhbnRfZGVmKTogRG9uJ3QgbG9zZSBpZiB3YXNuJ3QgdGVtcCBhbGxvY2F0aW9uCisJd2hlbiB0aGlzIHdhcyBjYWxsZWQuCisJKG91dHB1dF9jb25zdGFudCk6IEhhbmRsZSBSRUZFUkVOQ0VfRVhQUi4KKworCSogTWFrZWZpbGUgKEJJU09ORkxBR1MpOiBuZXcgdmFyaWFibGUuCisJKHByZWZpeCk6IE5ldyB2YXJpYWJsZSwgdXNlZCBpbiBiaW5kaXIgYW5kIGxpYmRpci4KKwkoQ19PQkpTLCBDUExVU19PQkpTKTogTmV3IHZhcnMsIHNwbGl0IG9mZiBmcm9tIE9CSlMuCisJKExJQkZVTkNTKTogQysrIHN1cHBvcnQgZnVuY3Rpb25zIGFkZGVkLgorCShDUExVU19UUkVFX0gpOiBOZXcgdmFyaWFibGUuCisJKGNjMXBsdXMpOiBOZXcgdGFyZ2V0LgorCShsYW5nX2MsIGxhbmdfY3BsdXMpOiBDb21iaW5lcyBhbGwgdGFyZ2V0cyBmb3Igb25lIGxhbmd1YWdlLgorCShncGx1cy5pbmZvKTogTmV3IHRhcmdldC4KKwkoY3BsdXMtKi5vKTogTmV3IHRhcmdldHMuCisJKHJlYWxjbGVhbik6IEhhbmRsZSBuZXcgQysrIGZpbGVzIGFuZCByZWNlbnQgcmVuYW1pbmdzLgorCShpbnN0YWxsLCBUQUdTKTogTGlrZXdpc2UuCisKKwkqIHByaW50LXRyZWUuYyAocHJ0eXBlaW5mbyk6IEhhbmRsZSBUUkVFX0xBTkdfRkxBR19bMS00XS4KKworCSogdG0tc3BhcmMuaCAoQVNNX09VVFBVVF9ET1VCTEUpOiBTcGVjaWFsIGNhc2UgZm9yIGluZmluaXR5LgorCShBU01fT1VUUFVUX0ZMT0FUKTogTGlrZXdpc2UuCisKKwkqIGdjYy5jOiBEb24ndCBkZWZpbmUgX19HTlVfXy4KKwlGb3IgLmNjIGZpbGVzLCBwYXNzIC0rIHRvIGNwcCwgYW5kIGRvbid0IGhhbmRsZSAtYW5zaS4KKwlVc2UgY2MxcGx1cyBhcyBuYW1lIG9mIGNvbXBpbGVyIGZvciAuY2MgZmlsZXMuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogYWJvcnQgaWYgZ2l2ZW4gYSBMQU5HX1RZUEUgbm9kZS4KKwkobGF5b3V0X3VuaW9uKTogQ29tcGxhaW4gaWYgdW5pb24gaGFzIGJhc2V0eXBlcyBvciBzdGF0aWMgbWVtYmVycy4KKwkobGF5b3V0X3JlY29yZCk6IEhhbmRsZSBhbm9ueW1vdXMgdW5pb24gbWVtYmVycy4KKworCSogdHJlZS5kZWYgKExBTkdfVFlQRSk6IE5ldyB0cmVlIGNvZGUgZm9yIGxhbmd1YWdlLXNwZWNpZmljIHB1cnBvc2VzLgorCShXSVRIX0NMRUFOVVBfRVhQUik6IE5ldyB0cmVlIGNvZGUgZm9yIGV4cHJlc3Npb25zIHdob3NlIHZhbHVlcworCW5lZWQgdG8gYmUgY2xlYW5lZCB1cCB3aGVuIHRoZXkgYXJlIGRlYWxsb2NhdGVkLgorCShPUF9JREVOVElGSUVSKTogTmV3IHRyZWUgY29kZSBmb3IgY2VydGFpbiBDKysgcHVycG9zZXMuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiBDYWxsIG1ha2VfdmFyX3J0bAorCWJlZm9yZSBhc3NlbWJsZV92YXJpYWJsZS4KKworV2VkIE5vdiAyMyAwMjoxNTo0NSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHhtLXN1bm9zNC5oOiBSZW5hbWUgaW5jbHVkZWQgY29uZmlnIGZpbGVzIHRvIHhtLSouCisJKiB4bS0qLmg6IExpa2V3aXNlLgorCisJKiBmaXhpbmNsdWRlczogQXZvaWQgYWx0ZXJpbmcgYXJncyB0byBuYW1lcyBvdGhlciB0aGFuIENUUkwKKwl0aGF0IGVuZCBpbiAuLi5DVFJMLgorCUlmIGEgZmlsZSBpc24ndCBhY3R1YWxseSBjaGFuZ2VkLCBkZWxldGUgdGhlIGNvcHkuCisKK01vbiBOb3YgMjEgMTI6NDg6MjIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBOZXZlciBtb3ZlIGEgcmVnIHcvICMgPiBvbGRfbWF4X3JlZy4KKwkoc3RyZW5ndGhfcmVkdWNlKTogRm9yIG5vbnJlcGxhY2VhYmxlIGdpdiwgcHV0IGluc24gdG8gbG9hZCBpdAorCWFmdGVyIHRoZSBpbnNuIHRoYXQgdXNlZCB0byBjb21wdXRlIGl0LCBpbiBjYXNlIHRoZSBsYXR0ZXIKKwlpcyB0aGUgbGFzdCBvZiBhIGxpYmNhbGwgc2VxdWVuY2UuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IElmIHJldHVybmluZyBCTEttb2RlLCBhbHNvIGNvcHkKKwlhZGRyZXNzIHdoZXJlIHZhbHVlIGlzIHJldHVybmVkIHRvIHRoZSBwbGFjZSB0aGF0IEdEQiB3aWxsCisJZXhwZWN0IHRvIHNlZSBpdCBhZnRlciB0aGUgcmV0dXJuLgorCisJKiBjLXBhcnNlLnkgKHJlYWRlc2NhcGUpOiBXYXJuIGFib3V0IGhleCBjb25zdGFudCBvdXQgb2YgcmFuZ2UKKwlmb3IgYSB0YXJnZXQgaW50ZWdlci4KKwkoeXlsZXgpOiBXYXJuIGFib3V0IGVzY2FwZSBvdXQgb2YgcmFuZ2UgZm9yIG5vbi13aWRlIGNoYXIgb3Igc3RyaW5nLgorCVVzZSBhIGJ1ZmZlciBvZiBpbnRzIHRvIHJlYWQgYSB3aWRlIHN0cmluZy4KKworU2F0IE5vdiAxOSAwMjoxODowMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjMxIHJlbGVhc2VkLgorCisJKiBzcGFyYy5tZDogQ2hhbmdlIGBLJyB0byBgSScgaW4gYWxsIGNvbnN0cmFpbnRzLgorCisJKiBsb29wLmMgKGdlbl9pdl9tdWx0KTogSGFuZGxlIFRBUkdFVD09MC4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVuZG8gbGFzdCBjaGFuZ2UuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IEluc3RlYWQgb2YgdGhhdCBjaGFuZ2UsCisJc2F2ZSBvbGQtZGVjbCdzIGZpbGUvbGluZSBiZWZvcmUgY2FsbGluZyBkdXBsaWNhdGVfZGVjbHMsCisJYW5kIHBhc3MgdGhlbSBsYXRlciB0byB3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZS4KKwkqIHRvcGxldi5jICh3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSk6IE5ldyBmbi4KKworRnJpIE5vdiAxOCAxMzowNzowNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAoZml4dXBfdmFyX3JlZnNfMSk6IChTVUJSRUcgKE1FTSkpIHdhcyBzbGlwcGluZyB0aHJvdWdoCisJaW4gY2FzZSB3aGVyZSBhIFNFVCB3YXMgd3JpdGluZyBpbiB0aGUgdmFyaWFibGUgYmVpbmcgZml4ZWQuCisKKwkqIHJlY29nLmMgKHJlZ2lzdGVyX29wZXJhbmQsIG5vbm1lbW9yeV9vcGVyYW5kLCBtZW1vcnlfb3BlcmFuZCk6CisJQ2hhbmdlcyB0byBoYW5kbGUgbmV3IHZhciByZWxvYWRfY29tcGxldGVkOiAxIG1lYW5zIHRoYXQKKwkoU1VCUkVHIChNRU0pKSBub3cgY291bnRzIGFzIGEgbWVtLXJlZiwgc2luY2UgYWx0ZXJfc3VicmVnCisJd2lsbCBtYWtlIGl0IG9uZS4KKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGFuZCBjbGVhciByZWxvYWRfY29tcGxldGVkLgorCisJKiBzcGFyYy5tZCAoY2FsbCBwYXR0ZXJucyk6IElmIFRBUkdFVF9TVU5fQVNNLCBhbmQgYWRkcmVzcyBpbiByZWcsCisJb3V0cHV0IGEgam1wbCByYXRoZXIgdGhhbiBhIGNhbGwuCisJKiB0bS1zdW40b3MzLmg6IExpa2UgdG0tc3BhcmMuaCBidXQgdHVybiBvbiBUQVJHRVRfU1VOX0FTTS4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2Fkcyk6IFJlaW5zdGF0ZSBoYW5kbGluZyBvZiByZWdfZXF1aXZfY29uc3RhbnQuCisKK1RodSBOb3YgMTcgMDk6NDg6MTQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGNvbnN0cmFpbnRfYWNjZXB0c19yZWdfcCk6IE5hbWUgY2hhbmdlZCBmcm9tCisJY29uc3RyYWludF9hbGxfcmVnc19wOyBuZXcgYXJnIGlzIHJlZyB3ZSBhcmUgY29uY2VybmVkIHdpdGgsCisJYW5kIGNvbmRpdGlvbiB0ZXN0ZWQgdGFrZXMgc29tZSBhZHZhbnRhZ2Ugb2YgdGhhdCByZWcuCisKKwkqIGdjYy5jIChtYWluKTogUmVuYW1lIHZhciBgZXJyb3InIHRvIGBlcnJvcl9jb3VudCcgZm9yIG5hbWUgY29uZmxpY3QuCisKKwkqIGVtaXQtcnRsLmMgKGVtaXRfbm90ZSk6IE91dHB1dCBsaW5lICNzIGV2ZW4gaWYgbm8gZGVidWcgaW5mbyB3YW50ZWQuCisJKGVtaXRfbGluZV9ub3RlKTogTmV3IGZuLCBkb2VzIHdoYXQgZW1pdF9ub3RlIGRpZC4KKwkoZW1pdF9saW5lX25vdGVfZm9yY2UpOiBOZXcgbmFtZSBmb3IgZW1pdF9ub3RlX2ZvcmNlLgorCSogc3RtdC5jLCBjLXBhcnNlLnk6IENhbGwgZW1pdF9saW5lX25vdGUgaW5zdGVhZCBvZiBlbWl0X25vdGUuCisKKwkqIGMtcGFyc2UueSAobWF5YmVfdHlwZV9xdWFsKTogQ2FsbCBlbWl0X25vdGUgaW5zdGVhZCBvZiBlbWl0X2xpbmVfbm90ZQorCU5vdyB3ZSBjYW4gZmluZCB0aGUgbGluZSAjIG9mIGV2ZXJ5IGBhc20nIGZyb20gdGhlIFJUTC4KKwkqIHRvcGxldi5jIChlcnJvcl9mb3JfYXNtKTogTmV3IGZuLCBnZXRzIGxpbmUgIyBieSBzZWFyY2hpbmcgZm9yIE5PVEUuCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogVXNlIGVycm9yX2Zvcl9hc20uCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IExpa2V3aXNlLgorCSogZmluYWwuYyAob3V0cHV0X29wZXJhbmRfbG9zc2FnZSk6IExpa2V3aXNlLgorCVZhcmlhYmxlIHRoaXNfaXNfYXNtX29wZXJhbmRzIGlzIG5vdyBjdXJyZW50IGluc24gaWYgaXQncyBub256ZXJvLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBXaGVuIGEgcmVnIGlzIG1vdmVkLCB1cGRhdGUgcmVnbm9fZmlyc3RfdWlkCisJYW5kIHJlZ25vX2xhc3RfdWlkOyBzYXkgbGlmZSBzcGFuIGluY2x1ZGVzIGVudGlyZSBsb29wLgorCSogRGVjcmVtZW50IFRIUkVTSE9MRCBwZXIgcmVnIG1vdmVkLCBub3QgcGVyIGluc24gbW92ZWQuCisKK1dlZCBOb3YgMTYgMDg6NDE6MzIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnbnVsaWIuYyAoX19fYnVpbHRpbl9zYXZlcmVncyk6IE5ldyBmbiwgZm9yIHNwYXJjLgorCisJKiB0bS1zcGFyYy5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBEb24ndCByZWNvZ25pemUKKwlTWU1CT0xfUkVGcywgZXhjZXB0IGZvciB0aGUgY29uc3RhbnRzIHBvb2wuCisJQnV0IGRvIHJlY29nbml6ZSBSRUcrUkVHIGFuZCBTTUFMTElOVCtSRUcuCisJKiBzcGFyYy5tZDogTmV3IHBhdHRlcm5zIGZvciBmZXRjaGluZyBhbmQgc3RvcmluZyBtZW1vcnkKKwl3aG9zZSBhZGRyZXNzIGlzIHN5bWJvbGljIGFuZCBub3QgImxlZ2l0aW1hdGUiLgorCisJKiBzcGFyYy5tZCAobW92c2kpOiBBZGQgYGYnIHRvIG9wMSBjb25zdHJhaW50LgorCU5ldyBvdXRwdXQgY2xhdXNlIGZvciByZXN1bHQgaW4gZnAgcmVnLgorCShGbG9hdGluZyBwb2ludCBmZXRjaCBwYXR0ZXJucyk6IE91dHB1dCBzZXRoaSBpbnNucy4KKwkoY2FsbF92YWx1ZSwgcmVsYXRlZCBwYXR0ZXJucyk6IHZhbHVlLXJlZ2lzdGVyIGhhcyBgcmVnaXN0ZXJfb3BlcmFuZCcuCisKKwkqIG91dHB1dC1zcGFyYy5jIChoYXJkcmVnKTogTmV3IGZ1bmN0aW9uLgorCShDT01QQVRJQkxFKTogQ2xhdXNlIGFkZGVkIGZvciBuX3JlZ3MgPT0gMi4KKwkoc2luZ2xlX2luc25fc3JjX3ApOiBSZXR1cm4gMCBmb3IgTUVNIHdob3NlIGFkZHJlc3MgaXMgYWJzb2x1dGUuCisKKwkqIHRtLWdlbml4LmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyBzdWJyb3V0aW5lcyk6CisJUmVkZWZpbmUsIHRvIGV4Y2x1ZGUgYW55IHBvc3NpYmlsaXR5IG9mIFNCLXJlZmVyZW5jaW5nIGFkZHJlc3Nlcy4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBDYW4ndCBlbGltaW5hdGUgYSBiaXYgaWYgdXNlZCBiZWZvcmUKKwlzdGFydCBvZiB0aGUgbG9vcC4gIFVzZWQgYmVmb3JlIGlzIHNhbWUgYXMgdXNlZCBhZnRlciwgaWYgY29udGFpbmVkCisJaW4gYW5vdGhlciBsb29wLgorCisJKiByZWNvZy5jIChhc21fbm9wZXJhbmRzLCBkZWNvZGVfYXNtX29wZXJhbmRzKToKKwlIYW5kbGUgY2FzZSBvZiBubyBvdXRwdXRzLCBidXQgc29tZSBjbG9iYmVycy4KKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IEdlbmVyYXRlIHJpZ2h0IHN0dWZmIGZvciB0aGF0IGNhc2UuCisKKwkqIHRtLXN1bjMuaCAoQ1BQX1NQRUMpOiBEb24ndCBkZWZpbmUgX19IQVZFXzY4ODgxX18gaWYgdXNpbmcgZnBhLgorCitUdWUgTm92IDE1IDAwOjEwOjI2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChnZW5faXZfbXVsdCk6IEFyZyBPUDAgbWF5IG5vdCBiZSBhIGNvbnN0YW50LgorCVBheSBhdHRlbnRpb24gdG8gcmV0dXJuIHZhbHVlIG9mIGV4cGFuZF9tdWx0LgorCShlbGltaW5hdGVfYml2KTogQ2FsbCBjaGFuZ2VkLgorCisJKiBvdXRwdXQtbTg4ay5jLCBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X21vdmVfZG91YmxlKToKKwlGaXggdHlwbyBgb3B0eXBlMCcgZm9yIGBvcHR5cGUxJy4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGFsdGVyIGZpbGUsIGxpbmUgb2Ygb2xkIGRlY2wuCisKKwkqIGMtcGFyc2UueSAoc2tpcF93aGl0ZV9zcGFjZSk6IERvbid0IHJlY29nbml6ZSBjb21tZW50czsgcmVseSBvbiBjcHAuCisKKwkqIHJ0bC5jIChydHhfZXF1YWxfcCk6IEhhbmRsZSB2ZWN0b3JzLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IENoYW5nZSBlbHRzIG9mIG5fdGltZXNfc2V0IGJhY2sgdG8gcG9zaXRpdmUKKwlmb3IgY2FuZGlkYXRlcyB0aGF0IHdlcmVuJ3QgbW92ZWQsIGJlZm9yZSBkb2luZyBzdHJlbmd0aCByZWR1Y3Rpb24uCisKKwkqIG5zMzJrLm1kIChtb3ZkaSwgbW92ZGYpOiBVc2UgYCYnIGNvbnN0cmFpbnQgZm9yIGZpcnN0IG9wZXJhbmQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSW5pdGlhbGl6ZSBzcGlsbF9pbmRpcmVjdF9vayBoZXJlLgorCisJKiBjb25maWctc3VuNC5oOiBSZWNvZ25pemUgYC1zdGF0aWMnIHN3aXRjaC4KKworCSogZ2xvYmFsLWFsbG9jLmMgKHNldF9wcmVmZXJlbmNlKTogQXZvaWQgdXNpbmcgbm9uc2Vuc2UgaGFyZCByZWcgI3MKKwl0aGF0IHJlc3VsdCBmcm9tIGFkZGluZyBPRkZTRVQuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfZW5kX2Z1bmN0aW9uKTogTGluZSAjIGluIC5lZiBzaG91bGQgYmUgcmVsYXRpdmUuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfbGluZSk6IEZvciBTREIsIGRvbid0IG91dHB1dCBuZWdhdGl2ZSAjcy4KKworCSogdG0tZW5jb3JlLmggKEFTTV9PVVRQVVRfTE9DQUwpOiBEb24ndCBpZ25vcmUgU0laRSBhcmcuCisKK01vbiBOb3YgMTQgMTE6MDM6MTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYzogRG9uJ3QgZGVjbGFyZSByZWZlcnNfdG9fcmVnbm9fcC4KKworCSogZ2NjLmMgKG1haW4pOiBXYXJuIGlmIGFueSBpbnB1dCBmaWxlcyBhcmUgZm9yIHRoZSBsaW5rZXIKKwlidXQgdGhlIGxpbmtlciBpcyBub3QgYmVpbmcgcnVuLgorCisJKiBqdW1wLmMgKHNldHNfY2MwX3ApOiBEdW1iIGJ1ZyBmZXRjaGluZyBlbHRzIG9mIGEgUEFSQUxMRUwuCisKKwkqIGxvY2FsLWFsbG9jLmM6IHF0eV9iaXJ0aCwgcXR5X2RlYXRoIGVsZW1lbnRzIGFyZSBub3cgLTEsIG5vdCAwLAorCXdoZW4gdGhlIHZhbHVlIGlzIG5vdCBrbm93bi4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogQnVnIGNvbXB1dGluZyB4Yml0cG9zLCB4b2Zmc2V0CisJd2hlbiBjaGFuZ2luZyB1bml0cyBmcm9tIGJ5dGVzIHRvIHdvcmRzLgorCisJKiBsb29wLmM6IFJlbmFtZSBgdGltZXNfdXNlZCcgZmllbGQgaW4gYHN0cnVjdCBtb3ZhYmxlJyB0byBgc2F2aW5ncycuCisJKHNjYW5fbG9vcCk6IFdoZW4gc2Nhbm5pbmcgdGhlIGNvbnNlY3V0aXZlIHNldHMsIGZvciBlYWNoIGxpYmNhbGwsCisJaW5jcmVtZW50IGBzYXZpbmdzJy0tbGVhdmUgYGNvbnNlYycuCisJV2hlbiBtYWtpbmcgbW92YWJsZSBmb3IgKFNFVCAoUkVHKSAwKSB3aGljaCBpcyBwYXJ0IG9mIHplcm8tZXh0ZW5zaW9uLAorCXNldCBgc2F2aW5ncycgdG8gMSBpbml0aWFsbHksIHNpbmNlIG9ubHkgMSBpbnNuIHdpbGwgYmUgbW92ZWQuCisJQW5kIGRvbid0IGxldCBhbnkgb3RoZXIgcmVnIGZvcmNlIHRoYXQgaW5zbi4KKwlSZWR1Y2UgaW5pdGlhbCBUSFJFU0hPTERzLgorCShtb3ZlX21vdmFibGVzKTogRG9uJ3QgYWRkIGBjb25zZWMnIGludG8gYHNhdmluZ3MnCisJc2luY2UgdGhlIGluaXRpYWwgYHNhdmluZ3MnIHdhcyBwcm9wb3J0aW9uYWwgdG8gYGNvbnNlYycuCisJRGVjcmVtZW50IFRIUkVTSE9MRCBieSAzIChub3QgMikgZm9yIGVhY2ggbW92ZSBkb25lLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IFN0cmlwIHN1YnJlZ3MgZnJvbSBPTEQKKwliZWZvcmUgd3JpdGluZyB0aGUgb3V0cHV0LXJlbG9hZCBtb3ZlLWluc24uCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogY291bnRlZF9mb3JfZ3JvdXBzIGFuZCBjb3VudGVkX2Zvcl9ub25ncm91cHMKKwlhcmUgbm93IGZpbGUtc2NvcGUuICBVcGRhdGUgdGhlbSBib3RoIHdoZW4gc3BpbGxpbmcuCisJKG5ld19zcGlsbF9yZWcpOiBObyBuZWVkIGZvciBjb3VudGVkX2Zvcl9ub25ncm91cHMgYXMgYXJnLgorCShjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBEb24ndCB1c2UgZm9yIGEgZ3JvdXAKKwlhbnkgc3BpbGwgcmVncyBmb3Igd2hpY2ggY291bnRlZF9mb3Jfbm9uZ3JvdXBzIGlzIHNldC4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBJbmRpcmVjdC1zeW1ib2wgY2FzZSBjaGVja2VkIGVycm9uZW91c2x5CisJZm9yIFBBUk1fREVDTC4KKworU3VuIE5vdiAxMyAwODoxMzo0OSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IERvbid0IGFsdGVyIE1VTFQgYnkgLTEgaWYgYXJnIG1vZGUgIT0gcmVzdWx0IG1vZGUuCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IElmIG1vdmluZyBhIENBTExfSU5TTiwgbWFrZSBhIG5ldyBDQUxMX0lOU04uCisJKiBlbWl0LXJ0bC5jIChlbWl0X2NhbGxfaW5zbl9iZWZvcmUpOiBOZXcgZm4uCisJCisJKiBjb25maWctc3VuNC5oIChMSU5LX1NQRUMpOiBBdm9pZCBzaGFyZWQgbGlicmFyaWVzIGlmIC1nLgorCisJKiBleHByLmMgKHN0b3JlX29uZV9hcmcpOiBTdGFiaWxpemUgQVJHLT5zdGFjayBzbyBpdCBkb2Vzbid0IHVzZSBTUAorCWJlZm9yZSBjb21wdXRpbmcgdGhlIGFyZyB2YWx1ZS4KKworCSogY29tYmluZS5jICh1c2VfY3Jvc3Nlc19zZXRfcCk6IE1vdmluZyBhIHJlZiB0byBzdGFjayBwdHIKKwlpcyBhbHdheXMgZm9yYmlkZGVuIGlmIG1hY2hpbmUgaGFzIHB1c2ggaW5zbnMsIHNpbmNlIG1pZ2h0IGNyb3NzIG9uZS4KKworCSogdmF4Lm1kIChtb3ZxaSk6IEF2b2lkIG91dC1vZi1yYW5nZSBpbW1lZCBvcHMgaW4gbWNvbWIuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IERvbid0IHNheSBgZXh0enYnIGluIHRoZQorCWNsYXVzZSBmb3IgYGV4dHYnLgorCisJKiBlbWl0LXJ0bC5jIChjb3B5X3J0eF9pZl9zaGFyZWQpOiBFdmVuIGlmIGEgTUVNIGNhbiBiZSBzaGFyZWQsCisJdW5zaGFyZSBpdHMgYWRkcmVzcyBmcm9tIGV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGF0IE1FTS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEZpeCBvbWl0dGVkIGFyZyB0byBgY29udmVydF90b19tb2RlJy4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogSW4gY2FzZSB3aGVyZSB3aWxsIG5vdCByZXR1cm4gVEFSR0VUCisJYW5kIG11c3QgZG8gdHlwZSBjb252ZXJzaW9uLCBkb24ndCBmYWlsIHRvIHN0b3JlIGludG8gVEFSR0VULgorCisJKiBkYnhvdXQuYyAoRk9SQ0VfVEVYVCk6IE5ldyBtYWNybyB1c2VkIGJlZm9yZSBvdXRwdXQgYC5zdGFicycKKwl0byBnbyB0byB0aGUgdGV4dCBzZWN0aW9uIG9uIHRhcmdldHMgdGhhdCByZXF1aXJlIGl0LgorCShERUJVR19TWU1TX1RFWFQpOiBUYXJnZXQgbWFjcm8gd2hpY2ggdHVybnMgb24gdGhhdCBmZWF0dXJlLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEluZGV4IGluIHNwaWxsX3JlZ3Mgd2FzIHdyb25nCisJd2hlbiBjaGVja2luZyBjb3VudGVkX2Zvcl9ncm91cHMuCisJKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IFdoZW4gY2FsbGluZyBmaW5kX2VxdWl2X3JlZyBsb29raW5nIGZvcgorCWEgcmVsb2FkIHJlZywgcmVqZWN0IGFsbCBzcGlsbCByZWdzLCBldmVuIHRob3NlIG5vdCBpbiB1c2Ugbm93LgorCisJKiB0bS1zdW4zODYuaCwgdG0tc3VuMzg2aS5oLCBjb25maWctc3VuMzg2aS5oOiBOZXcgZmlsZXMuCisKKwkqIGNjY3AuYyAobWFpbik6IERvbid0IGRpZSBpZiBubyBvdXRwdXQgZmlsZSBhcmcgZ2l2ZW4uCisKKwkqIGZpeGluY2x1ZGVzOiBUZWxsIGBmaW5kJyB0byBmaW5kIG9ubHkgb3JkaW5hcnkgZmlsZXMuCisKKwkqIGNvbmZpZy5nY2M6IElmIHN5bWxpbmsgZmFpbHMsIG1ha2UgYSBoYXJkIGxpbmsuCisKK1NhdCBOb3YgMTIgMjA6NDM6MjAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZSAoZ251bGliKTogVXNlIGNwIHRvIG1ha2UgdGhlIHRlbXBvcmFyeSAuYyBmaWxlczsKKwlsZXNzIGxpa2VseSB0byBmYWlsIHRoYW4gbG4uCisKK1NhdCBOb3YgIDUgMTI6NDY6MzkgMTk4OCAgUmFuZGFsbCBTbWl0aCAgKHJhbmR5IGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW02OGsuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRGlzYWxsb3dlZCBkNzphMCBhcyBhbiBhbGxvd2FibGUKKwlwYWlyIG9mIHJlZ2lzdGVycyB0byBob2xkIGEgZG91YmxlIHZhbHVlLiAgVGhpcyBpcyBjb3JyZWN0IGZvciB0aGUKKwlmcGEgYnV0IGluY29ycmVjdCBmb3IgdGhlIDY4ODgxLiAgSXQgd2FzLCBob3dldmVyLCBzaW1wbGVyIHRoYW4KKwlkZWZpbmluZyBhIG5ldyByZWdjbGFzcy4KKworVHVlIE9jdCAyNSAxMjowMzo0OSAxOTg4ICBSYW5kYWxsIFNtaXRoICAocmFuZHkgYXQgZ2x1dGV1cy5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kOiBBZGRlZCBzb21lIHRob3VnaHRzIChjb21tZW50cykgb24gYmVzdCBtZXRob2QgdG8gYWxsb3cKKwk2ODg4MSBjb2RlIHdpdGggZnBhIGNvZGUuCisKK1RodSBPY3QgMTMgMTQ6MTk6MTcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDEuMzAgcmVsZWFzZWQuCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IEluaXQgbGFzdF9jYWxsX3N1aWQgd2l0aAorCWxhcmdlc3QgcG9zc2libGUgdmFsdWUsIG5vdCAwLgorCitXZWQgT2N0IDEyIDA0OjQwOjE4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3V0cHV0LWkzODYuYyAob3V0cHV0X2FzbV9pbnNuX2RvdWJsZV9yZWdfb3ApOiBDb21wZW5zYXRlIGZvcgorCWFzc2VtYmxlciBidWcgdGhhdCBpbnRlcmNoYW5nZXMgZnN1YiBhbmQgZnN1YnIuCisKKwkqIHJlbG9hZDEuYyAob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogVW5kbyAyOSBTZXB0IGNoYW5nZS4KKwlJdCBicmVha3MgdGhlIDM4Ni4KKworCSogdmFyYXNtLmMgKGRlY29kZV9ydHhfY29uc3QpOiBEb24ndCBleGFtcGxlIHZhbHVlLT5hZGRyCisJaWYgd2hhdCB3YXMgc3RvcmVkIGluIHdhcyB2YWx1ZS0+ZC4KKworCSogdG9wbGV2LmMgKHNldF9mbG9hdF9oYW5kbGVyKTogTmV3IGZuLCBzcGVjaWZ5IHdoZXJlIHRvIGp1bXAKKwlvbiBmbG9hdGluZyBleGNlcHRpb24gc2lnbmFsLgorCSogZm9sZC1jb25zdC5jIChjb21iaW5lKTogVXNlIHRoYXQgdG8gaGFuZGxlIG92ZXJmbG93IGluIGFyaXRobWV0aWMuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGNsZWFyIENPTlNUUCwgVk9MQVRJTEVQCisJd2hlbiBtYWtpbmcgYW4gYXJyYXkgdHlwZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBJZ25vcmUgVkFSX0RFQ0xzIGluIG1lbW9yeSB3aG9zZQorCWFkZHJlc3NlcyB3ZSBjYW4ndCByZXByZXNlbnQuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IGRvbid0IGNvbnZlcnQgPj0gdG8gPiBpZiBib3RoIGFyZ3MgYXJlIGNvbnN0YW50LgorCVdoZW4gY29udmVydGluZyA+PSB0byA+LCBkb24ndCBmYWlsIHRvIGNoYW5nZSBDT0RFLgorCitUdWUgT2N0IDExIDA0OjEzOjQwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdmF4Lm1kIChtb3ZoaSk6IEVycm9yIGluIHRydW5jYXRpbmcgbWNvbXcsIGFkZGgzIGFyZ3MgdG8gMTYgYml0cy4KKworCSogZmluYWwuYzogQmV0dGVyIGVycm9yIGNoZWNraW5nIGZvciAlLXNwZWNzIGluIHRlbXBsYXRlcy4KKwkob3V0cHV0X29wZXJhbmRfbG9zc2FnZSk6IG5ldyBmbiB0byByZXBvcnQgZXJyb3JzLgorCShpbnNuX25vcGVyYW5kcyk6IG5ldyB2YXI6ICMgb3BlcmFuZHMgaW4gY3VycmVudCBmbi4KKwkodGhpc19pbnNuX2FzbV9vcGVyYW5kcyk6IG5ldyB2YXI6IDEgZm9yIGBhc20nLCAwIG90aGVyd2lzZS4KKwkob3V0cHV0X2FzbV9pbnNuKTogQ2hlY2sgZm9yIG9wZXJhbmQgIyBvdXQgb2YgcmFuZ2UuCisJKG91dHB1dF9hc21fbGFiZWwsIG91dHB1dF9vcGVyYW5kKTogQ2FsbCBuZXcgZm4gdG8gcmVwb3J0IGVycm9ycy4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2Fkcyk6IEFuIGlucHV0IHJlbG9hZCBmb3IgKFJFRyBOKSBjYW4gbWF0Y2ggb25lCisJZm9yIChQT1NUX0lOQyAoUkVHIE4pKSBvciAoUFJFX0lOQyAoUkVHIE4pKSwgc2luY2UgdGhlIHZhbHVlCisJcmVsb2FkZWQgaXMgdGhlIHNhbWUgaW4gYW55IGNhc2UuCisKK01vbiBPY3QgMTAgMDY6MTk6MDUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWNvZy5jIChuZXh0X2luc25zX3Rlc3Rfbm9faW5lcXVhbGl0eSk6IExpa2UgbmV4dF9pbnNuX3Rlc3RzLi4uCisJYnV0IGNoZWNrIGFsbCBpbnNucyB0aGF0IGZvbGxvdyB0aGlzIG9uZSBhbmQgY2FuIHVzZSBpdCdzIGNjJ3MuCisJKiBvdXRwdXQtbTY4ay5jIChvdXRwdXRfYnRzdCk6IFVzZSB0aGF0LgorCisJKiB2YXgubWQgKG1vdnNmLCBtb3ZkZik6IFVuZG8gbGFzdCBjaGFuZ2U7IG1vdnEvbW92bCBzZXQgdGhlIGNjIHdyb25nLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfc2V0am1wIGlmIGFwcHJvLgorCSogc3RtdC5jIChzZXRqbXBfcHJvdGVjdCk6IE5ldyBmbjogbW92ZSBhbGwgdmFycyBpbnRvIHN0YWNrCisJdW5sZXNzIGRlY2xhcmVkIGByZWdpc3RlcicuCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQ2FsbCBpdCBpZiAtdHJhZGl0aW9uYWwgYW5kIHNldGptcCB1c2VkLgorCisJKiBjY2NwLmMgKG1haW4pOiBPcGVuIG91dHB1dCBhZnRlciB0aGUgaW5wdXQuCisJSGFuZGxlIGAtbyAtJy4KKworU3VuIE9jdCAgOSAwMDoyODowNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLXN1bjMuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19IQVZFX0ZQQV9fIGlmIGFwcHJvcHJpYXRlLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBBZnRlciBkdXBsaWNhdGVfZGVjbHMsIG1heWJlIHdhcm4gYWJvdXQKKwkiZGVjbGFyZWQgZXh0ZXJuIGFuZCBsYXRlciBzdGF0aWMiLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogSW4gaW5zdiBjYXNlLCBhdm9pZCB0dXJuaW5nCisJVkFMVUUgaW50byBhIHN1YnJlZyBvZiBhIHN1YnJlZy4KKworCSogbG9vcC5jIChtb3ZlX21vdmFibGVzKTogV2hlbiBtb3ZpbmcgYSBsaWJjYWxsLAorCXVuLWNzZSB0aGUgZnVuY3Rpb24gYWRkcmVzczsgcHV0IGl0IGludG8gdGhlIGNhbGwgaW5zbi4KKworU2F0IE9jdCAgOCAwMTo0ODowMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChlcXVpdl9jb25zdGFudCk6IFN1YnJvdXRpbmUgdG8gZmluZCB0aGUgY29uc3RhbnQgZXF1aXZhbGVudAorCW9mIGEgcmVnLiAgTm93IGhhbmRsZXMgU1VCUkVHcyB0b28uCisJKGZvbGRfcnR4LCBmb2xkX2NjMCk6IFVzZSB0aGF0IGZ1bmN0aW9uLgorCURvbid0IGhhbmRsZSBTVUJSRUdzIGxpa2UgYXJpdGhtZXRpYy4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBEb24ndCBjYWxsIHJlZ19vdmVybGFwX21lbnRpb25lZF9wCisJaWYgYXJnIGlzIDAuCisKK0ZyaSBPY3QgIDcgMDE6MDA6MTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBhc3NlcnQuaDogVHlwbyBkZWNsYXJpbmcgX19lcHJpbnRmLgorCisJKiBjb25maWcuZ2NjOiBOZXcgZmlsZSBmb3IgbWFraW5nIHRoZSBsaW5rcy4KKwlGaXhlZCBidWdzIGZvciBzdW4tWzIzXS1vczQuICBBZGRlZCBzdW4tWzIzNF0gZm9yIHN1bm9zIDMuCisJQWRkZWQgc2VxdWVudC1pMzg2LgorCisJKiBlbWl0LXJ0bC5jIChnZW5fcnR4KTogUmV0dXJuIGNvbnN0MF9ydHggZm9yIDAgaW4gREltb2RlLgorCSogdmFyYXNtLmMgKGltbWVkX2RvdWJsZV9jb25zdCk6IERvbid0IGJlIGNvbmZ1c2VkIGJ5IHRoaXMuCisKKwkqIGV4cG1lZC5jIChuZWdhdGVfcnR4KTogTmV3IDFzdCBhcmcgTU9ERS4KKwkqIGV4cHIuYyAocHVzaF9ibG9jayk6IENhbGxzIGNoYW5nZWQuCisJKiBtNjhrLm1kLCBuczMyay5tZCwgdmF4Lm1kOiBDYWxscyBjaGFuZ2VkLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgZGlzY2FyZCBERUNMX0JMT0NLX1NZTVRBQl9BRERSRVNTLgorCisJKiB0cmVlLmMgKHN0YXRpY3ApOiBJTkRJUkVDVF9SRUYgd2l0aCBjb25zdGFudCBhZGRyZXNzIGlzIHN0YXRpYy4KKwlDT01QT05FTlRfUkVGIG1heSBub3QgYmUsIGlmIGNvbXBvbmVudCBvZmZzZXQgaXNuJ3QgY29uc3RhbnQuCisKKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IENvbnZlcnRpbmcgYXJyYXkgdG8gcHRyLCBpZiBhcnJheQorCWlzbid0IGEgVkFSX0RFQ0wsIGdvIHRocm91Z2ggYnVpbGRfdW5hcnlfb3Agc28gdGhhdCBDT01QT05FTlRfUkVGcworCXdpbGwgYmUgc2ltcGxpZmllZCBhd2F5LgorCisJKiBuczMyay5tZCAodGJpdGQgcGF0dGVybnMpOiBvcCAwIGNvbnN0cmFpbnQ6IHJlamVjdCBjb25zdGFudHMuCisJKiBuczMyay5tZCAoZXh0enYgZm9yIFNJbW9kZSBhbmQgSEltb2RlKToKKwlVc2UgYWRqX29mZnNldGFibGVfb3BlcmFuZDsgcGx1c19jb25zdGFudCB3YXMgdGhlIHdyb25nIHRoaW5nLgorCitUaHUgT2N0ICA2IDAwOjEwOjQxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjI5IHJlbGVhc2VkLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IERvbid0IHRoaW5rIGEgYHJldHVybicgaW5zbiBlbnRlcnMgdGhlIGxvb3AuCisKKwkqIG5zMzJrLm1kIChhc2hyc2kzLCBldGMpOiBOZXcgZGVmaW5lX2V4cGFuZHMgZm9yIHJpZ2h0IHNoaWZ0LgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IENoYW5nZSBpbiB0aGUgYGZvcmNlX2dyb3VwJworCWxvZ2ljIHRvIGF2b2lkIGNyYXNoZXMuCisKK1dlZCBPY3QgIDUgMDQ6MDk6MTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgTUlOVVNfRVhQUik6IFdoZW4gbmVnYXRpbmcgaW50ZWdlciBvcDEsCisJdHJ1bmNhdGUgaXQgdG8gaXRzIG1vZGUuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IFNVQlJFRyBlcnJvciBjaGVjayB3YXMgd3Jvbmc7CisJU0ltb2RlIFNVQlJFR3MgYXJlIHBvc3NpYmxlIGFuZCBvayBpbiBleHR6diwgZXh0di4KKworCSogdG0tbnMzMmsuaCAoUkVHSVNURVJfTkFNRVMpOiBIYWQgdHdvIGV4Y2VzcyBlbGVtZW50czsgZGVsZXRlZC4KKworTW9uIE9jdCAgMyAwMToxNTo1MSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGNvcm4tY2hleC5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbiwgY29tcGlsZV9maWxlKTogSWYgbm8gZmlsZXMgc3BlYydkLCB1c2Ugc3RkaW4sIHN0ZG91dC4KKworCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBXaGVuIGNoZWNraW5nIGZvciBzdGFjay1hZGp1c3QgaW5zbnMsCisJZXhjbHVkZSBub24tU0VUIHBhdHRlcm5zLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIGNoYW5naW5nIGp1bXA9PnJldHVybiB0byByZXR1cm4sCisJbXVzdCByZXJlY29nbml6ZSB0aGUgaW5zbi4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IEFsbG93IGAtJyBmb3IgbWFpbiBpbnB1dCBvciBvdXRwdXQgZmlsZW5hbWUuCisKK1N1biBPY3QgIDIgMTA6MzA6MDkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKGZpbmFsKTogTk9USUNFX1VQREFURV9DQyBoYXMgZXh0cmEgYXJnLCBJTlNOLgorCSogdG0tKi5oOiBDaGFuZ2UgZGVmaW5pdGlvbnMuCisKKwkqIHN0bXQuYyAob3B0aW1pemVfYml0X2ZpZWxkKTogVXNlIGdlbl9sb3dwYXJ0IHRvIG1ha2Ugc3VicmVncy4KKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBEb24ndCBvYmV5IHJlZ2RlY2xzIGluIGlubGluZSBmdW5jdGlvbi4KKwlEb24ndCBsb3NlIGV4aXN0aW5nIFJFR19OT1RFUyB3aGVuIGFkZGluZyBvbmUuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogTWFrZSByZXR1cm4gcnR4IGJlZm9yZQorCW1hcmtpbmcgcGFybXMgbGl2ZS4KKwkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IFVzZSB1c2VfdmFyaWFibGUgdG8gZW1pdCBVU0VzIGZvciBTQVZFX0VYUFJzLgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBIYW5kbGUgVFJVVEhfQU5EX0VYUFIgbGlrZSBBTkRJRjsgT1IgYWxzby4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX3N0bXRfZXhwcik6IEFsd2F5cyBzZXQgVFJFRV9WT0xBVElMRSwKKwlzb21ldGltZXMgVFJFRV9USElTX1ZPTEFUSUxFLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9pbnNuKTogV2hlbiBmaW5kaW5nIFBSRVYsIHNraXAgZGVsZXRlZCBpbnNucy4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IFdPUkRTX0JJR19FTkRJQU4gdGVzdCB3YXMgYmFja3dhcmRzLgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydCk6IEFsbG93IE1PREUgPiAxIHdvcmQgaWYgWCBpcyBzYW1lIHNpemUuCisKKwkqIGZpbmFsLmMgKGZpbmFsKTogRG9uJ3QgZGVsZXRlIG5vLW9wIG1vdmVzIChqdW1wIGRpZCBpdCBpZiBhcHByby4pLgorCisJKiBmaW5hbC5jOiBTdXBwb3J0IHByZXNjYW4gcGFzcy4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBpbml0X3JlY29nIGFuZCBDQ19TVEFUVVNfSU5JVCBtdmQgdG8gYGZpbmFsJy4KKwkoZmluYWwpOiBOZXcgYXJnIFBSRVNDQU4uICBEbyBubyBvdXRwdXQgaWYgcHJlc2Nhbm5pbmcuCisJRG9uJ3QgYWx0ZXIgY29uZGl0aW9uYWxzIGlmIFBSRVNDQU4gPCAwIChwcmVzY2FuIGFscmVhZHkgZG9uZSkuCisJSWYganVtcCBiZWNvbWVzIG5vLW9wLCBjaGFuZ2UgaXQgdG8gYSBOT1RFLgorCVJlbWVtYmVyIHRvIGZyZWUgdGhlIHRlbXAgc3BhY2UgZm9yIEFTTV9PUEVSQU5EUy4KKworCSogZmluYWwuYyAoZmluYWwpOiBBbHRlcmluZyBzdG9yZS1mbGFnIG11c3QgY2hlY2sgU1RPUkVfRkxBR19WQUxVRS4KKwlEb24ndCB0cnkgdG8gZG8gaXQgaWYgdGhhdCBpc24ndCBkZWZpbmVkLgorCURvbid0IHRyeSBpdCBpZiBjb25kaXRpb24gZG9lc24ndCB0ZXN0IENDMC4KKwkoYWx0ZXJfY29uZCk6IE5vIG5lZWQgdG8gY2hlY2sgQ09ORCAhPSAwLgorCUhhbmRsZSBDQ19aX0lOX05PVF9OIGFuZCBDQ19aX0lOX04uCisJKG02OGsubWQpOiBEZWxldGUgY29kZSB0aGF0IGhhbmRsZWQgQ0NfWl9JTl9OT1RfTi4KKworCSogY29uZGl0aW9ucy5oOiBOZXcgZmxhZyBDQ19aX0lOX04uCisJKiB0bS0qLmg6IFJlbnVtYmVyIGFsbCBDQ18uLi4gZmxhZ3MgdG8gbWFrZSByb29tLgorCisJKiBjb21iaW5lLmMgKHVzZV9jcm9zc2VzX3NldF9wKTogTG9vcCBzdGFydCB3YXMgMSBvZmYuCisKKwkqIGxvY2FsLWFsbG9jLmMgKHJlZ19pc19zZXQpOiBXaGVuIGEgcmVnIGlzIENMT0JCRVJlZCBhbmQgZGllcyBpbgorCW9uZSBpbnNuLCBtYWtlIGl0IGxpdmUgaW1tZWRpYXRlbHkgYmVmb3JlIGFuZCBhZnRlciB0aGF0IGluc24uCisKKwkqIGdsb2JhbC1hbGxvYy5jOiBIYXJkIHJlZyBwcmVmZXJlbmNlcyBmb3IgZ2xvYmFsIHBzZXVkb3MuCisJVmFyIGFsbG9jbm9fcHJlZmVycmVkX3JlZyBkZWxldGVkOyBuZXcgdmFycyBoYXJkX3JlZ19wcmVmZXJlbmNlcworCWFuZCByZWdzX3NvbWVvbmVfcHJlZmVycy4KKwkoZ2xvYmFsX2FsbG9jKTogSW5pdCB0aG9zZSB2YXJzLiAgUGFzcyBoYXJkX3JlZ19wcmVmZXJlbmNlcyBlbHQKKwl0byBmaW5kX3JlZy4KKwkoc2V0X3ByZWZlcmVuY2UpOiBOZXcgZnVuY3Rpb24gbWFrZXMgZW50cmllcyBpbiB0aG9zZSB2YXJzLgorCShnbG9iYWxfY29uZmxpY3RzKTogbmV3IGFyZyB0byBtYXJrX3JlZ19zdG9yZS4gIENhbGwgc2V0X3ByZWZlcmVuY2UuCisJKGZpbmRfcmVnKTogTGFzdCBhcmcgbm93IGEgcHJlZmVycmVkIGhhcmRfcmVnX3NldC4KKwlTY2FuIHRoYXQgc2V0IGZpcnN0IG9mIGFsbC4KKwkobWFya19yZWdfc3RvcmUpOiBOZXcgYXJnIGlzIG9mZnNldCBmb3IgcmVudW1iZXJlZCByZWduby4KKwlCdXQgdGhlIGNvZGUgdG8gdXNlIGl0IGlzIHR1cm5lZCBvZmYuCisKKwkqIGdsb2JhbF9hbGxvYyAoY2hlY2tfZnJhbWVfcG9pbnRlcl9yZXF1aXJlZCk6IEhhbmRsZSByZWdfZXF1aXZfYWRkcmVzcworCWxpa2UgcmVnX2VxdWl2X21lbS4gIERvbid0IHRyeSB0byBhbGxvY2F0ZSBwc2V1ZG9zIHdpdGggZXF1aXYgbWVtcworCXRoYXQgZG9uJ3QgdXNlIHRoZSBmcmFtZSBwb2ludGVyLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYWxsIGNoYW5nZWQuCisKKwkqIGp1bXAuYyAoc2V0c19jYzBfcCk6IFRlc3RzIHdoZXRoZXIgcnR4IHNldHMgY2MwLCBhbmQgd2hldGhlcgorCWl0IGRvZXMgbm90aGluZyBidXQgc2V0IGNjMC4KKwkoZmluZF9jcm9zc19qdW1wLCBkZWxldGVfanVtcCk6IFVzZSB0aGF0IGZuIGZvciB0aGVzZSB0ZXN0cy4KKwkqIGxvb3AuYyAobG9vcF9za2lwX292ZXIpOiBMaWtld2lzZS4KKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IExpa2V3aXNlLgorCisJKiBnZW5vdXRwdXQuYzogT3V0cHV0IGBjb25zdCcgYmVmb3JlIHRoZSBkYXRhIGFycmF5cy4KKwlEZWZpbmUgaXQgYXMgbm90aGluZyBpZiBub3QgX19TVERDX18uCisKK1NhdCBPY3QgIDEgMDI6MTk6MjkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoc3RvcmVfb25lX2FyZyk6IDNyZCBhcmcgdG8gZW1pdF9ibG9ja19tb3ZlIGlzIGluIGJ5dGVzLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBIYW5kbGluZyBaRVJPX0VYVEVORCBvciBTSUdOX0VYVEVORCBvZiBjb25zdGFudCwKKwlpZiB0aGUgYXJnIHdpZHRoIGlzIHRvbyB3aWRlIHRvIGhhbmRsZSwgcmV0dXJuIHNhZmVseS4KKworCSogY29tYmluZS5jIChGQUtFX0VYVEVORF9TQUZFX1ApOiBEb24ndCBhbGxvdyBleHRlbmQgdG8gPiAxIHdvcmQuCisKKwkqIHJ0bC5jIChyZWZlcnNfdG9fcmVnbm9fcCk6IE1vdmVkIGZyb20gcmVsb2FkLmMuICBOb3Qgc3RhdGljLgorCShyZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCk6IE5ldyBmdW5jdGlvbiwgY2FsbHMgdGhlIGFib3ZlLgorCSogb3V0cHV0LSouYzogVXNlIHRoYXQgaW5zdGVhZCBvZiByZWdfbWVudGlvbmVkX3AuCisJKiB0bS0qLmggKE5PVElDRV9VUERBVEVfQ0MpOiBMaWtld2lzZS4KKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCwgY29tYmluZV9yZWxvYWRzKTogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IFVzZSBpdCB0byBjaGVjayBlYXJseWNsb2JiZXJzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IEVsaW1pbmF0aW9uIG9mIHByZXZpb3VzCisJb3V0cHV0LXJlbG9hZCBmZWVkaW5nIG91ciBpbnB1dCBub3cgbGltaXRlZCB0byBwc2V1ZG8tcmVncy4KKworCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogRGVsZXRlIGFueSBpbnNuIGNvcHlpbmcgcmVnIHRvIGl0c2VsZi4KKwkocHJvcGFnYXRlX2Jsb2NrKTogTW92ZSB1cGRhdGUgb2YgT0xEIGFmdGVyIHNwZWNpYWwgbGlmZSBhbmQgZGVhdGgKKwlmb3IgQ0FMTF9JTlNOcy4KKworCSogdmF4Lm1kIChhc2hyc2kzLCBhc2hyZGkzLCByb3Ryc2kzKTogZGVmaW5lX2V4cGFuZHMgdG8gbmVnYXRlCisJdGhlIHNoaWZ0IGNvdW50LgorCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IEVsaW1pbmF0ZSBuZWdhdGUtdGhlLXNoaWZ0LWNvdW50IGZlYXR1cmUuCisKKwkqIHZheC5tZCAoYW5kKmkzKTogZGVmaW5lX2V4cGFuZHMgd2hpY2ggdXNlIGNvbXBsZW1lbnQgYW5kIGJpdC1jbGVhci4KKwkqIGV4cG1lZC5jIChleHBhbmRfYml0X2FuZCk6IEVsaW1pbmF0ZSBmZWF0dXJlIHRvIGRvIHRoYXQuCisJVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBlbGltaW5hdGVkLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogSGFuZGxlIG5lc3RlZCBzdWJyZWdzLgorCUFsbG93IGdlbl9pbnN2IHRvIGZhaWw7IGlmIGl0IGRvZXMsIGRlbGV0ZSB3aGF0IHdlIGRpZCBhbmQgdGhlbgorCXVzZSBzdG9yZV9maXhlZF9iaXRfZmllbGQuCisJKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IFVzZSBnZW5fbG93cGFydCB0byBtYWtlIFNVQlJFR3MuCisJRG8gdGhhdCBmb3IgU1VCUkVHcyBqdXN0IGFzIGZvciBSRUdzLgorCUVycm9yIGNoZWNrIE9GRlNFVCBtdXN0IGJlIDAgZm9yIFJFR3MuCisJKHN0b3JlX3NwbGl0X2JpdF9maWVsZCk6IEVycm9yIGNoZWNrIE9QMCBpcyBhIFNVQlJFRyB3aGVuIGV4cGVjdGVkLgorCShleHRyYWN0X2JpdF9maWVsZCk6IEFsbG93IGdlbl9leHR7LHp9diB0byBmYWlsLgorCVVzZSBnZW5fbG93cGFydCB0byBtYWtlIHN1YnJlZ3MuCisJKGV4cGFuZF9zaGlmdCk6IElmIGEgdHJ5IGZhaWxzLCBkZWxldGUgYW55IGluc25zIGl0IG1hZGUuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCk6IFVzZSBleHBhbmRfdW5vcCB0byBuZWdhdGUuCisJV2hlbiBhZGRpbmcgMiBwb3dlcnMgb2YgMiwgZG8gc2VyaWFsIHNoaWZ0cywgbm90IHBhcmFsbGVsLgorCUhhbmRsZSBhYnN2YWw9PTEgbGlrZSBvdGhlciBwb3dlcnMgb2YgMi4KKworCSogZXhwbG93LmMgKGZvcmNlX3JlZyk6IERvbid0IGxvc2UgYW55IGV4aXN0aW5nIHJlZyBub3Rlcy4KKworCSogc3RtdC5jIChleHBhbmRfc3RhcnRfc3RtdF9leHByKTogRWxpbWluYXRlIHJldHVybiB2YWx1ZS4KKwkoZXhwYW5kX2VuZF9zdG10X2V4cHIpOiBObyBuZWVkIGZvciBhcmd1bWVudC4KKwkqIGMtcGFyc2UueSAocHJpbWFyeSk6IENoYW5nZSBjYWxscy4KKworRnJpIFNlcCAzMCAwMTo1MDoyMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGNvcm4tY2hleC5haS5taXQuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUsIGNvcHlfYWRkcmVzcyk6CisJJ3UnIGNhc2UgZXJyb25lb3VzbHkgcmV0dXJuZWQgdGhlIHRyYW5zbGF0ZWQgc2luZ2xlIGVsZW1lbnQuCisJKGNvcHlfYWRkcmVzcyk6IFNwZWNpYWwgY2FzZXMgZm9yIGZyYW1lLXB0ciBhbmQgc3VtcyBjb250YWluaW5nIGl0LgorCU1FTSBhbmQgTEFCRUxfUkVGIGNhc2VzIHBhc3NlZCB3cm9uZyBhcmcgdG8gY29weV9ydHhfYW5kX3N1YnN0aXR1dGUuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogYWRqdXN0IG1vZGUgb2YgaW5saW5lX3RhcmdldCBmb3IgY29udGV4dC4KKworCSoganVtcC5jICh0cnVlX3JlZ251bSk6IEZvciBTVUJSRUcgb2YgcHNldWRvLCB1c2UgcHNldWRvJ3MgIyB1bmNoYW5nZWQuCisKK1RodSBTZXAgMjkgMDI6NTA6NDYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAobW92c2ksIG1vdntxLGh9aSk6IFVzZSBmaW5kX3JlZ19ub3RlIHRvIGxvb2sgZm9yIFJFR19XQVNfMC4KKwkqIHZheC5tZCAobW92c2ksIG1vdmhpKTogTGlrZXdpc2UuCisKKwkqIHZhcmFzbS5jIChkZWNvZGVfcnR4X2NvbnN0KTogV2FzIHNldHRpbmcgdW4uYWRkci5iYXNlIHdyb25nCisJZm9yIGEgQ09OU1QuICBTaG91bGQgYmUgc3ltYm9sIG5hbWUsIG5vdCB0aGUgU1lNQk9MX1JFRi4KKworCSogcnRsLmMgKHJ0eF9lcXVhbF9wKTogV2hlbiBjb21wYXJpbmcgcmVnaXN0ZXJzLCBjaGVjaworCVJFR19GVU5DVElPTl9WQUxVRV9QLiAgSWYgdGhlcmUgYXJlIGB1Jy1zbG90cyBpbiB0aGUgcnR4LCBpZ25vcmUgdGhlbS4KKworCSogcnRsLmMgKHJlZ19tZW50aW9uZWRfcCk6IFNvbWUgcnR4IHR5cGVzIHdlcmUgbWlzdGFrZW5seSB0cmVhdGVkCisJYXMgdW5pcXVpZmllZCAodmFyaW91cyBjb25zdGFudHMpLgorCisJKiBydGwuYyAocmVhZF9ydHgpOiBFbGVtZW50IHR5cGUgJ1MnIGlzIHN0cmluZyB0aGF0IG1heSBiZSBvbWl0dGVkLgorCSogcnRsLmRlZiAoZGVmaW5lX2luc24sIGRlZmluZV9wZWVwaG9sZSk6IEFkZCBhIGxhc3QgZWxlbWVudCwgdHlwZSAnUycuCisJKiBnZW5vdXRwdXQuYzogQ29sbGVjdCB0aGVzZSBvcHRpb25hbCBsYXN0IGVsZW1lbnRzIGFuZCBvdXRwdXQgYXMKKwlhcnJheSBgaW5zbl9tYWNoaW5lX2luZm8nIG9mIHN0cnVjdHMgYElOU05fTUFDSElORV9JTkZPJy4KKwlUaGUgbGFzdCBtdXN0IGJlIGRlZmluZWQgYXMgYSBtYWNyby4KKwkqIHJlY29nLmggKGluc25fbWFjaGluZV9pbmZvKTogRGVjbGFyZSBpdCBpZiBhcHByb3ByaWF0ZS4KKworCSogcmVnY2xhc3MuYyAocmVjb3JkX2FkZHJlc3NfcmVncyk6IEluIFBMVVMgY2FzZSwgbG9vayBpbnNpZGUgU1VCUkVHcy4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBVc2UgcmVnX2VxdWl2X2FkZHJlc3MgZm9yIFJFR19FUVVJVnMgd2l0aAorCWludmFsaWQgbWVtb3J5IGFkZHJlc3Nlcy4KKwlXaGVuIGNoYW5naW5nIHBzZXVkb3MgdG8gbWVtIHJlZnMgYXQgZW5kLCBkbyBGSVhfRlJBTUVfUE9JTlRFUl9BRERSRVNTCisJb24gdGhlaXIgYWRkcmVzc2VzLgorCShhbHRlcl9yZWcpOiBDaGVjayB0aGF0IHdpdGggcmVnX2VxdWl2X21lbS4KKwkoc3BpbGxfaGFyZF9yZWcpOiBJZiBmcCByZWcsIHNwaWxsIHJlZ2FyZGxlc3Mgb2YgYmFzaWNfYmxvY2tfbmVlZHMuCisKKwkqIHJlbG9hZDEuYyAob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogRG9uJ3QgcHV0IGludmFsaWQgcmVncyBpbnRvCisJcG90ZW50aWFsX3JlbG9hZF9yZWdzIGF0IGFsbC4gIChUaGV5IHVzZWQgdG8gZ28gYXQgdGhlIGVuZC4pCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBTdG9yZSBhbGwgZWFybHljbG9iYmVyIG9wZXJhbmQgaW4KKwlyZWxvYWRfZWFybHljbG9iYmVycyAoIyBpbiBuX2Vhcmx5Y2xvYmJlcnMpOgorCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBEb24ndCB1c2UgdmFsdWUgb2YgZmluZF9lcXVpdl9yZWcKKwlpZiBpdCBtYXRjaGVzIGFuIGVhcmx5Y2xvYmJlciBvcGVyYW5kLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MgZm9yIFJFRyk6CisJTm8gbmVlZCBmb3IgZXhwbGljaXRseSBleGNsdWRpbmcgaGFyZCByZWdzIGluIHRoZXNlIHRlc3RzLgorCShmaW5kX3JlbG9hZHMsIGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEgZm9yIFJFRyk6IGxpa2V3aXNlLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBDb2RlIHRlc3RpbmcgcmVnX2VxdWl2X2NvbnN0YW50IHNob3VsZAorCWJlIG9ic29sZXRlOyBhZGQgZXJyb3IgY2hlY2sgdG8gdmVyaWZ5IHRoaXMuCisKKwkqIHJlbG9hZC5jIChoYXJkX3JlZ19zZXRfaGVyZV9wKTogSGFuZGxlIENMT0JCRVJzLCBTVUJSRUdzLCBvdmVybGFwLgorCShyZWZlcnNfdG9fcmVnbm9fcCk6IEhhbmRsZSBDTE9CQkVSUy4gIEhhbmRsZSBvdmVybGFwLgorCU5ldyBhcmcgRU5EUkVHTk8gc3BlY3MgZW5kIG9mIHJhbmdlIHRvIGNoZWNrIGZvcjsKKwlhbGwgY2FsbGVycyBjaGFuZ2VkIChhbGwgaW4gdGhpcyBmaWxlKS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFNVQlJFRyBsaWtlIFJFRyBpbiBhbHRlcm5hdGUgcmVjb3ZlcnkKKwlmb3IgZWFybHljbG9iYmVyIGNvbmZsaWN0LgorCVRoZSBvcGVyYW5kcyB0byB1bnN3YXAgYXJlIHRob3NlIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGNvbW11dGUuCisJV2hlbiBvcGVyYW5kcyBtYXRjaCwgY29weSB0aGUgcmVnY2xhc3Mgb2YgZWFybGllciBvbmUgZm9yIGxhdGVyIG9uZS4KKworCSogc3RtdC5jIChvcHRpbWl6ZV9iaXRfZmllbGQpOiBEb24ndCB1c2UgZ2VuX2V4dGVuZF9pbnNuOworCXVzZSBjb252ZXJ0X21vdmUsIHRoZW4gcmVvcmRlciB0aGUgaW5zbnMuCisJKiBvcHRhYnMuYyAoZ2VuX2V4dGVuZF9pbnNuKTogRGVsZXRlZC4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBEb24ndCBlbWl0IHF1ZXVlIGJlZm9yZSByZWN1cnNpb24uCisJRG9uJ3QgY29udmVydCBzaXplIHRvIFNJbW9kZSBmb3IgY21wc3RycWkuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBLZWVwIGFueSBvbGQgUkVHX05PVEVTIHdoZW4gYWRkaW5nIHRoZW0uCisJQWx3YXlzIGRlbGV0ZV9pbnNuc19zaW5jZSBpZiByZXR1cm5pbmcgZmFpbHVyZS4KKwkoZXhwYW5kX3Vub3AsIGVtaXRfdW5vcF9pbnNuKTogS2VlcCBhbnkgb2xkIFJFR19OT1RFUyB3aGVuIGFkZGluZyB0aGVtLgorCSogc3B1ci5tZCAobW92aGkpOiBsaWtld2lzZS4KKworCSogUlRMX0VYUFJfU0VRVUVOQ0UgaXMgbm93IGEgY2hhaW4gb2YgaW5zbnMsIG5vdCBhIFNFUVVFTkNFLgorCSogZW1pdC1ydGwuYyAoZW1pdF9pbnNucyk6IE5ldyBmbiwgZW1pdCBhIGNoYWluIG9mIGluc25zLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IFVzZSB0aGF0LgorCUFsc28gcHV0IGNvbnN0MF9ydHggaW4gdGhlIFJUTF9FWFBSX1NFUVVFTkNFIChtYXJrIFJUTF9FWFBSIGFzIG91dHB1dCkuCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfc3RtdF9leHByKTogVXNlIGdldF9pbnNucyB0byBnZXQgdGhlIGNoYWluLgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfc3RtdF9leHByKTogUHV0IHRoZSBSVExfRVhQUiBvbiBydGxfZXhwcl9jaGFpbi4KKwkoZml4dXBfdmFyX3JlZnMpOiBTY2FuIGFsbCB3YWl0aW5nIFJUTF9FWFBScyBub3QgeWV0IG91dHB1dC4KKwlBbHNvIHNjYW4gYWxsIHN0YWNrZWQgc2VxdWVuY2VzIG9uIHNlcXVlbmNlX3N0YWNrLgorCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBHZW5lcmF0ZSBjYWxscyB0byB7c3RhcnQsZW5kfV9zZXF1ZW5jZS4KKwlVc2UgYGVtaXQnIHRvIGhhbmRsZSBhIFBBUkFMTEVMLgorCShGQUlMLCBET05FKTogQ2hhbmdlIHRvIGZpdCBnZW5fZXhwYW5kIGNoYW5nZXMuCisKKwkqIGVtaXQtcnRsLmMgKGNoYW5nZV9hZGRyZXNzKTogYWJvcnQgaWYgYXJnIGlzbid0IGEgTUVNLgorCisJKiBlbWl0LXJ0bC5jOiBTZXF1ZW5jZXMgd29yayBub3cgYnkgc2F2aW5nIGFuZCByZXN0b3JpbmcgZmlyc3RfaW5zbgorCWFuZCBsYXN0X2luc24uICBTbyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgZXZlbiB3aGVuIGluIGEgc2VxdWVuY2UuCisJZW1pdF90b19zZXF1ZW5jZSBoYXMgYmVlbiBkZWxldGVkLgorCShzdGFydF9zZXF1ZW5jZSwgZW5kX3NlcXVlbmNlKTogU2F2ZSBhbmQgcmVzdG9yZSBmaXJzdF9pbnNuLCBsYXN0X2luc24uCisJKGdldF9sYXN0X2luc24sIGFkZF9pbnNuKTogU2VxdWVuY2VzIG5vIGxvbmdlciBuZWVkIHNwZWNpYWwgdHJlYXRtZW50LgorCShkZWxldGVfaW5zbnNfc2luY2UsIHJlb3JkZXJfaW5zbnMpOiBsaWtld2lzZS4KKwkocHVzaF90b19zZXF1ZW5jZSk6IFNldCB1cCB0byBlbWl0IHRvIGEgZ2l2ZW4gZXhpc3RpbmcgaW5zbiBjaGFpbi4KKworCSogZW1pdC1ydGwuYyAoY29weV9ydHhfaWZfc2hhcmVkKTogRG9uJ3QgY29weSBJTlNOcy4KKwlJbnNlcnQgbWlzc2luZyByZXR1cm4gc3RtdCBpbiBNRU0gY2FzZSAoZm9yIE1FTXMgb2sgdG8gc2hhcmUpLgorCSh1bnNoYXJlX2FsbF9ydHgpOiBOb3cgY2FuIGNvcHkgdGhlIFJFR19OT1RFUyBzaW1wbHkuCisJQ29weSB0aGUgTE9HX0xJTktTIHRvby4KKworCSogZW1pdC1ydGwuYyAobWFrZV9zYWZlX2Zyb20pOiBUcmVhdCBTVUJSRUcgYXMgWCBsaWtlIGEgUkVHLgorCShkZWxldGVfaW5zbnNfc2luY2UpOiBEb24ndCBsb3NlIGlmIEZST00gaXMgdGhlIGZpcnN0IGluc24uCisJKGVtaXQpOiBEZWNsYXJlIHZvaWQsIHNpbmNlIG5vIHVzZWZ1bCB2YWx1ZS4KKwlDYWxsIHNpbXBsZWp1bXBfcCBwcm9wZXJseS4KKwkocmVzdG9yZV9yZWdfZGF0YV8xKTogV2hlbiBhIHJlZyBpcyBhbiBhZGRyZXNzLCBkbyBtYXJrX3JlZ19wb2ludGVyLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGVzKTogQ2FsbCBkYnhvdXRfc3ltYm9sIHRvIGRvIHRoZSB3b3JrLgorCShkYnhvdXRfdHlwZV9kZWYpOiBEZWxldGVkLgorCShkYnhvdXRfc3ltYm9sKTogU2V0IFRSRUVfQVNNX1dSSVRURU4gd2hlbiBhIFRZUEVfREVDTCBpcyBvdXRwdXQuCisJRG9uJ3Qgb3V0cHV0IHRoZSBzYW1lIG9uZSB0d2ljZS4gCisKKwkqIGNzZS5jIChmb2xkX2NjMCk6IExBQkVMX1JFRiBpcyBub3QgemVyby4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRG9uJ3QgaW5zZXJ0IHNyYywgZGVzdCBpZiB0aGV5IGFyZSB0aGUgc2FtZSBwbGFjZS4KKworCSogY3NlLmMgKGxvb2t1cF9hc19mdW5jdGlvbik6IFJldHVybiBlbnRpcmUgcnR4LCBub3QganVzdCBvcGVyYW5kLgorCShjc2VfaW5zbik6IENhbGxlciBjaGFuZ2VkLiAgQWxzbywgY29weSB0aGUgcmVzdWx0IGJlZm9yZSBpbnNlcnRpbmcgaXQuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IFB1dCBjb25zdGFudCBhcmcgbGFzdCBpZiBjb21tdXRhdGl2ZSBvcC4KKwlIYW5kbGUgaWRlbXBvdGVudHMgYW5kIGlkZW50aXRpZXMgZm9yIG11bHQsIGRpdiwgYm9vbGVhbnMsIHNoaWZ0cy4KKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBQYXJlbnMgd2VyZSBtaXNzaW5nIGFyb3VuZCBzaGlmdHMgaW4gInJvdGF0ZXMiLgorCisJKiBjLWNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogVHJ1bmNhdGUgVFJVVEhfQU5ESUZfRVhQUgorCWxpa2UgVFJVVEhfQU5EX0VYUFI7IE9SIGFsc28uCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBEbyB0cnV0aHZhbHVlX2NvbnZlcnNpb24KKwlmb3IgVFJVVEhfQU5ESUYsIGV0Yy4KKwkoYnVpbGRfdW5hcnlfb3ApOiBNb3JlIHNpbXBsaWZpY2F0aW9ucyBmb3IgVFJVVEhfTk9UX0VYUFI7CisJdXNlcyBuZXcgZm4gYGludmVydF90cnV0aHZhbHVlJy4KKworCSogcmVjb2cuYyAocmVnX2ZpdHNfY2xhc3NfcCk6IE5ldyBuYW1lIGZvciByZWdfcmVudW1iZXJlZF9maXRzX2NsYXNzX3AKKwlzaW5jZSBpdCBubyBsb25nZXIgbmVlZHMgdG8gcmVudW1iZXIuICBBbHNvIGl0IG5vdyByZWFsbHkgYXNzdW1lcworCWFyZyBpcyBhIFJFRy4gIENhbGxlcnMgY2hhbmdlZC4KKwkqIHJlbG9hZC5jOiBDYWxsZXJzIGNoYW5nZWQuCisKKwkqIHJlY29nLmMgKGdlbmVyYWxfb3BlcmFuZCk6IChTVUJSRUcgKE1FTS4uLikpIG5lZWQgbm90IGFsdGVyIG1vZGUuCisJKHJlZ2lzdGVyX29wZXJhbmQsIG5vbm1lbW9yeV9vcGVyYW5kKTogKFNVQlJFRyAoTUVNLi4uKSkgaXMgYWxsb3dlZC4KKwkobWVtb3J5X29wZXJhbmQpOiAoU1VCUkVHIChNRU0uLi4pKSBpcyAqbm90KiBhbGxvd2VkLgorCShtb2RlX2luZGVwZW5kZW50X29wZXJhbmQpOiBPcGVyYW5kIG5hbWVzIHdlcmUgYmFja3dhcmRzIQorCShObyBjaGFuZ2UgaW4gZWZmZWN0IG9mIHRoaXMgZnVuY3Rpb24uKQorCisJKiBwcmludC10cmVlLmMgKGR1bXApOiBTb21lIGV4cHIgbm9kZXMgY29udGFpbiBydHgncy4gIFByaW50IGFzIHJ0eCdzLgorCitXZWQgU2VwIDI4IDE4OjUxOjEyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBJZiBhIHJlbG9hZCB3YW50ZWQgYSBncm91cCwKKwlkb24ndCBhbGxvdyBhIHNpbmdsZSByZWdpc3RlciBmb3IgaXQuCisKK1R1ZSBTZXAgMjcgMTE6NDM6NTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChvdXRwdXRfYWRkcl9jb25zdCk6IEhhbmRsZSBESW1vZGUgQ09OU1RfRE9VQkxFcy4KKwkqIHRtLSouaCAoUFJJTlRfT1BFUkFORCk6IFRyZWF0IERJbW9kZSBDT05TVF9ET1VCTEUgbGlrZSBhIENPTlNUX0lOVC4KKworCSogdmF4Lm1kIChyb3RsZGkzKTogSW5zbiBkZWxldGVkOyBpdCBkb2Vzbid0IHJlYWxseSBleGlzdC4KKworCSogdG9wbGV2LmMgKHJlcG9ydF9lcnJvcl9mdW5jdGlvbik6IEFsc28gbWVudGlvbiB0aGUgZmlsZSBuYW1lLAorCWZvciBwYXJhbGxlbCBtYWtlcy4gIE5ldyBhcmcgRklMRTsgYWxsIGNhbGxlcnMgY2hhbmdlZC4KKworTW9uIFNlcCAyNiAxNTo0NDoxOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBXaGVuIHVzaW5nIGV4dHp2LCBjb252ZXJ0IE9QMSB0byBTSW1vZGUuCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQ29udmVydCBzaGlmdC1jb3VudAorCXRvIGludCByZWdhcmRsZXNzIG9mIHJlc3VsdCB0eXBlLgorCisJKiBvdXRwdXQtc3B1ci5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBGaXggdHlwbywgb3B0eXBlMD0+b3B0eXBlMS4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEF2b2lkIG51bGwgZGVyZWYgb24gcmVzdWx0IG9mIEZVTkNUSU9OX0FSRy4KKworCSogdG0taTM4Ni5oIChGVU5DVElPTl9QUk9GSUxFUik6IFVzZSBjb3JyZWN0IGFzc2VtYmxlciBzeW50YXguCisKK1N1biBTZXAgMjUgMTI6MTM6NTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogSGFuZGxlIHNvbWUgZmlsZXMgaW4gbmV0ZG5ldCwgbmV0ZG5hLCB2YXhpZiwgdmF4dWJhLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTWFrZSBubyBvcHRpb25hbCByZWxvYWRzIGlmIG5vdCAtTy4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBDYW4ndCBlbGltaW5hdGUgYSBiaXYgaWYgaXQncyB1c2VkCisJdG8gY29tcHV0ZSBhIERFU1RfQUREUiBnaXYuICBPbmx5IERFU1RfUkVHIGdpdnMgYXJlIHNhZmUuCisKKwkqIGxvb3AuYyAoZ2VuZXJhbF9pbmR1Y3Rpb25fdmFyKTogU2hpZnQgJiBkaXZpZGUgb3BzIGFyZSBsaW5lYXIKKwlvbmx5IGluIDFzdCBvcGVyYW5kOyBkb24ndCBsb29rIGZvciBiaXYgb3IgZ2l2IGluIDJuZCBvcGVyYW5kLgorCisJKiB2YXgubWQgKGZpeF90cnVuY2RmcWkyKTogVXNlIGAlIycuCisKK1NhdCBTZXAgMjQgMDA6MjU6NDggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBnbHV0ZXVzLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAobl90aW1lc19zZXQsIG5fdGltZXNfdXNlZCk6IE5vdyBmaWxlLXNjb3BlOworCW5vIGxvbmdlciBwYXNzZWQgYXMgYXJncyB0byBzZXZlcmFsIGZ1bmN0aW9ucy4KKworCSogbG9vcC5jIChiYXNpY19pbmR1Y3Rpb25fdmFyKTogQWNjZXB0IHJlZyBhcyBzb3VyY2UgdmFsdWUKKwlvbmx5IGlmIGl0J3MgaW52YXJpYW50LgorCShzdHJlbmd0aF9yZWR1Y2UpOiBCZW5lZml0IGNhbGN1bGF0aW9uIGFuZCB0aHJlc2hvbGQgY2hhbmdlZC4KKwlDaGVjayByZWR1Y2liaWxpdHkgb2YgZ2l2cyBiZWZvcmUgdHJ5aW5nIHRvIHJlZHVjZSB0aGVtLgorCUNoZWNrIGVsaW1pbmFiaWxpdHkgb2YgYml2IGJlZm9yZSBjb25zaWRlcmluZyB0aGUgZ2l2czsKKwlsZXQgdGhpcyBhZmZlY3QgdGhlIHRocmVzaG9sZC4KKwkocmVjb3JkX2dpdik6IE5ldyBzdWJyb3V0aW5lIGFkZHMgYSBnaXYgdG8gdGhlIGNoYWluLgorCisJKiBuczMyay5tZCAoaW5jcmVtZW50aW5nIHNwKTogVXNlIGNtcGQgaW5zbnMgdG8gaW5jcmVtZW50IGJ5IDQgb3IgOC4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBSZW5hbWUgcmV0dXJuX2xhYmVsCisJdG8gbG9jYWxfcmV0dXJuX2xhYmVsOyBhdm9pZCBzaGFkb3dpbmcuCisKK0ZyaSBTZXAgMjMgMTM6NTc6NTIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb29wLmMgKGxvb3Bfc2tpcF9vdmVyKTogUHV0IHRoZSBuZXcgbGFiZWwgYWZ0ZXIgdGhlIG5vdGUgdGhhdCBlbmRzCisJdGhlIGxvb3AuCisKKwkqIGxvb3AuYzogTmV3IGZ1bmN0aW9uIHN0cmVuZ3RoX3JlZHVjZSBhbmQgc3Vicm91dGluZXMuCisJKiB0b3BsZXYuYzogTmV3IHZhciBmbGFnX3N0cmVuZ3RoX3JlZHVjZSwgc2V0IGZyb20gLWZzdHJlbmd0aC1yZWR1Y2UuCisKKwkqIHZheC5tZCAoc29iIGluc25zKTogVGhleSB3ZXJlIGJyb2tlbiwgd2l0aCBwbHVzIGluIG9uZSBwbGFjZQorCWFuZCBtaW51cyBpbiBhbm90aGVyLiAgVXNlIHBsdXMgY29uc2lzdGVudGx5LgorCisJKiBydGwuaCAoUkVHX0xJQkNBTEwsIFJFR19OT05ORUcpOiBUd28gbmV3IGtpbmRzIG9mIHJlZy1ub3RlLgorCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBNYWtlIFJFR19MSUJDQUxMIG5vdGVzLgorCSogbG9vcC5jIChzY2FuX2xvb3AsIG1vdmVfbW92YWJsZXMpOiBNb3ZlIGVudGlyZSBsaWJyYXJ5IGNhbGxzLgorCVVzZSBtLT5zZXRfc3JjIHRvIGdldCB0aGUgZXhwcmVzc2lvbiwgaW4gY2FzZSBpdCdzIGZyb20gYSBSRUdfRVFVQUwuCisJKGNvbnNlY19zZXRzX2ludmFyaWFudF9wKTogTGlrZXdpc2UuCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogU3RhcnQgc2NhbiBmcm9tIGxvb3BfdG9wLCBpZiBlbnRyeSBpcyByZWFycmFuZ2VkLgorCVdhdGNoIG91dCBmb3IgcHNldWRvIHJlZ3MgY3JlYXRlZCBieSBzdHJlbmd0aF9yZWR1Y2U7CisJdGhleSBjYW4ndCBpbmRleCByZWdub19sYXN0X3VpZC4KKwkocmVwbGFjZV9yZWdzKTogIyByZWdzIG1hcHBlZCBpcyBub3cgYW4gYXJnLgorCisJKiBsb29wLmMgKGNvdW50X2xvb3BfcmVnc19zZXQpOiBEb24ndCBpbmNyZW1lbnQgbl90aW1lc19zZXQgcGFzdCAxMjcuCisJKGNvbnNlY19zZXRzX2ludmFyaWFudF9wKTogUmVqZWN0IGlmIE5fU0VUUyBhcmcgaXMgMTI3LgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE5SRUdTIGFyZyBvZiBsb29wX29wdGltaXplIGRlbGV0ZWQuCisKKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogQW55dGhpbmcgYnV0IGFuIElERU5USUZJRVJfTk9ERQorCWluIFNQRUNQQVJNUyBpbmRpY2F0ZXMgYSBwYXJtbGlzdCwgbm90IGFuIGlkZW50aWZpZXIgbGlzdC4KKwkoZ2V0X3Bhcm1faW5mbyk6IFVzZSBvbmx5IFBBUk1fREVDTHMgd2hlbiBtYWtpbmcgdGhlIGxpc3Qgb2YgYXJnIHR5cGVzLgorCisJKiBjb21iaW5lLmMgKHRyeV9kaXN0cmliKTogQm9vbGVhbiBvcHMgY2FuJ3QgZGlzdHJpYnV0ZSB0aHJvdWdoIFBMVVMuCisJTVVMVCBjYW4gZGlzdHJpYnV0ZSB0aHJvdWdoIFBMVVMgYW5kIG9ubHkgUExVUy4KKworVGh1IFNlcCAyMiAxNTo1Nzo0MSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IHVuY29uZCBqdW1wIHRvIGEgcmV0dXJuIGJlY29tZXMgYSByZXR1cm4uCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3Bhcm1fZGVjbHMsIGNvcHlfZGVjbF90cmVlKTogU2V0IFRSRUVfVVNFRC4KKwlBdm9pZCBpbmV2aXRhYmxlICJ1bnVzZWQiIHdhcm5pbmcgZm9yIHRoZXNlIGRlY2xzLgorCisJKiBjLXR5cGVjay5jIChjb21wdHlwZXMpOiBXaGVuIGNvbXBhcmluZyBhcnJheSB0eXBlcywKKwlpZ25vcmUgcXVhbGlmaWVycyBvZiBlbGVtZW50IHR5cGUuCisKKwkqIHRtLSouaCAoQVNNX09VVFBVVF9SRUdfUFVTSCwgQVNNX09VVFBVVF9SRUdfUE9QKTogRGVmaW5lIG5ldyBtYWNyb3MuCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbik6IFVzZSB0aGVtIHRvIHByb3RlY3QgYXJvdW5kCisJdGhlIGNhbGwgdG8gdGhlIHByb2ZpbGluZyBmdW5jdGlvbi4KKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fbmVlZHNfY29udGV4dAorCWFuZCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfc3RydWN0LgorCisJKiBzdG10LmMgKGV4cGFuZF9udWxsX3JldHVybl8xKTogSWYgY2xlYXJfcGVuZGluZ19zdGFja19hZGp1c3QKKwlkb2Vzbid0IGNsZWFyIGl0LCBkbyB0aGUgYWRqdXN0IG5vdy4KKwkqIGV4cHIuYyAoY2xlYXJfcGVuZGluZ19zdGFja19hZGp1c3QpOiBOby1vcCBpZiAtZmlubGluZS1mdW5jdGlvbnMuCisKKwkqIGNjY3AuYyAobWFjYXJnMSwgc2tpcF9pZl9ncm91cCk6IEJhY2tzbGFzaCBtYWtlcyBuZXh0IGNoYXIgb3JkaW5hcnkuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEZWxldGUgY29kZSB0byBsb29rIGZvciBhbiBlcXVpdiByZWcKKwlmb3IgYSByZWcgYmVpbmcgaW5wdXQtcmVsb2FkZWQuICBUaGlzIGlzbid0IHNhZmUuCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IERvIGl0IGhlcmUuCisKK1dlZCBTZXAgMjEgMDA6MzY6MjIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBob2JiZXMuYWkubWl0LmVkdSkKKworCSogdG0tc3VuMy5oIChDUFBfU1BFQyk6IERlZmluZSBpdCBiYXNlZCBvbiBUQVJHRVRfREVGQVVMVC4KKwkoU1RBUlRGSUxFX1NQRUMpOiBMaWtld2lzZS4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBXaGVuIHJlZGlyZWN0aW5nIHByZXYgaW5zbgorCWludG8gdGhpcyBpbnNuJ3MgcmVsb2FkLXJlZywgY2hlY2sgdGhpcyBkb2Vzbid0IGJyZWFrIHRoZSBwcmV2IGluc24KKwlieSBnaXZpbmcgaXQgYSByZWcgaXQgY2FuJ3QgYWNjZXB0LiAgVXNlIG5ldyBmbiBjb25zdHJhaW50X2FsbF9yZWdzX3AuCisKKwkqIHRtLXNwYXJjLmggKEFTTV9PVVRQVVRfTE9DQUwpOiBVc2UgLnJlc2VydmUsIG5vdCAuY29tbW9uLgorCisJKiB0cmVlLmggKFRSRUVfVVNFRCk6IE5ldyBhdHRyaWJ1dGUgbWFjcm8uCisJKiBjLXBhcnNlLnkgKHByaW1hcnkpOiBTZXQgVFJFRV9VU0VEIGluIC4uLl9ERUNMIG5vZGVzLgorCSogdG9wbGV2LmMsIGZsYWdzLmg6IERlZmluZSBhbmQgc2V0IHdhcm5fdW51c2VkLgorCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogV2FybiBpZiBhbnkgdmFyIGlzIHVudXNlZC4KKwkqIHByaW50LXRyZWUuYyAocHJ0eXBlaW5mbyk6IFByaW50IHRoaXMgYXR0cmlidXRlLgorCitUdWUgU2VwIDIwIDE1OjI5OjAxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYXNzZXJ0Lmg6IGBhc3NlcnQnIG11c3QgZXhwYW5kIHRvIGFuIGV4cHJlc3Npb24uCisJRXJyb3IgbWVzc2FnZSBzaG91bGQgc2hvdyBhcmcgYmVmb3JlIGV4cGFuc2lvbiwgbm90IGFmdGVyLgorCisJKiBjLWRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogTWFrZSBkZWNsIHBlcm0gaWYgIXdhcm5faW1wbGljaXQKKwlzaW5jZSBzdGFydF9mdW5jdGlvbiBuZWVkcyB0byBsb29rIGluc2lkZSBpdCBpbiB0aGF0IGNhc2UuCisKKwkqIHRvcGxldi5jIChhbm5vdW5jZV9mdW5jdGlvbik6IElmIHdlIGRvbid0IHByaW50LCBkb24ndCByZWNvcmQgd2UgZGlkLgorCitNb24gU2VwIDE5IDE1OjIxOjExIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55IChzdHJ1Y3RzcCk6IElmIHBlZGFudGljLCB3YXJuIGlmIGNvbW1hIGF0IGVuZCBvZiBlbnVtbGlzdC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IENoZWNrIGluc25fY29kZV9udW1iZXIgPj0gMCB3aGVuCisJbG9va2luZyBpbiBpbnNuX29wZXJhbmRfc3RyaWN0X2xvdy4KKworCSogdG0tc3VuWzIzXS5oIChDUFBfU1BFQyk6IFJlbmFtZSBfX0hBVkVfRlBVX18gdG8gX19IQVZFXzY4ODgxX18KKwlhbmQgcHV0IGEgc3BhY2UgYWZ0ZXIgdGhhdCBvcHRpb24uCisKK1N1biBTZXAgMTggMDE6MTI6NTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBob2JiZXMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IE1ha2Ugb3B0aW9uYWwgcmVsb2FkcyBmb3IgZXhwbGljaXQgTUVNcy4KKworCSogdG0tbTY4ay5oIChNT0RFU19USUVBQkxFX1ApOiBJZiBubyA2ODg4MSwgY2FuIHRpZSBmaXhlZCB0byBmbG9hdGluZy4KKwkqIG02OGsubWQgKG1vdmRpKTogQWxsb3cgRidzIChjYW4gYmUgREltb2RlIG5vdykuCisJRG9uJ3QgYWxsb3cgZi1yZWdzIChleHBlcmltZW50KS4gIERvbid0IHByZWZlcmVuY2UgeC1yZWdzLgorCShESW1vZGUgcHVzaCk6IEFsbG93IHktcmVncy4KKwkoREZtb2RlIHB1c2gpOiBBbGxvdyB5LXJlZ3MsIG5vdCB4LXJlZ3MuCisKKwkqIHJlbG9hZDEuYyAobW9kZXNfZXF1aXZfZm9yX2NsYXNzX3ApOiBOZXcgZnVuY3Rpb24uCisJKHJlbG9hZCk6IENvbXBhcmUgbXVsdGlwbGUgbW9kZXMgZm9yIHJlZyBncm91cCB3aXRoIHRoYXQgZnVuY3Rpb24uCisJQWxsb3dzIGRpZmZlcmluZyBtb2RlcyBpbiBzb21lIGNhc2VzIHdoZW4gbm90IHRpZWFibGUuCisKKwkqIGMtcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IExldCBBU01fT1VUUFVUX0lERU5UIG92ZXJyaWRlIC5pZGVudC4KKwkqIHRtLTNiMS5oIChBU01fT1VUUFVUX0lERU5UKTogIERlZmluZSB0aGlzIGFzIG5vLW9wLgorCisJKiBlbWl0LXJ0bC5jIChyZW9yZGVyX2luc25zKTogVXBkYXRlIHNlcXVlbmNlX3tmaXJzdCxsYXN0fV9pbnNuIGlmIG5lYy4KKwkoZ2V0X2xhc3RfaW5zbik6IElmIGluIGEgc2VxdWVuY2UsIHJldHVybiBsYXN0IGluc24gb2Ygc2VxdWVuY2UuCisJKGRlbGV0ZV9pbnNuc19zaW5jZSk6IElmIGluIGEgc2VxdWVuY2UsIHNldCBzZXF1ZW5jZV9sYXN0X2luc24uCisKKwkqIHNwdXIubWQgKENPTlNUX0RPVUJMRSBsb2FkIGluc24pOiBVc2UgJiBmb3IgbW9zdCBkZXN0cy4KKwkoY29uZCBicmFuY2hlcyk6IHBhc3MgYWRkaXRpb25hbCBhcmdzIHRvIG91dHB1dF9jb21wYXJlLgorCShtb3ZkZiwgbW92ZGkpOiBVc2UgJiBsb2FkaW5nIHJlZyBmcm9tIG1lbS4KKwkodHJ1bmMqKTogRW5hYmxlIHRoZXNlLgorCShhZGQpOiBOZXcgcGF0dGVybiBmb3IgYWRkaW5nIGxhcmdlIGltbWVkaWF0ZSBvcGVyYW5kLgorCShzaGlmdHMpOiBBIGRlZmluZV9leHBhbmQgZm9yIGVhY2gga2luZCBvZiBzaGlmdCwKKwlwbHVzIGEgcmVjb2duaXplciB3aGljaCBvdXRwdXRzIHJlcGVhdGVkIGluc25zIGlmIG5lY2Vzc2FyeS4KKwkoY2FsbCopOiBVc2UgcjkgYXMgdGVtcCwgbm90IHIyLgorCisJKiBvdXRwdXQtc3B1ci5jIChvdXRwdXRfY29tcGFyZSk6IE5ldyBhcmdzIE5FR197RVhDSEFOR0VfLH1PUENPREUuCisJKHNpbmdsZW1vdmVfc3RyaW5nKTogSGFuZGxlIHJlZyBhcyBvcGVyYW5kIDEuCisJKG91dHB1dF9hZGRfbGFyZ2Vfb2Zmc2V0KTogRmFrZSBhZGQgaW5zbiB3aXRoIGxhcmdlIGltbWVkaWF0ZSBhcmcuCisJKGJpZ19pbW1lZGlhdGVfb3BlcmFuZCk6IE1hdGNoIHN1Y2ggYW4gYXJnLgorCisJKiB0bS1zcHVyLmggKEZVTkNUSU9OX1BST0xPR1VFKTogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIuCisJSGFuZGxlIGJpZ2dlciBmcmFtZXMuCisJKFRBUkdFVF9MT05HX0pVTVAsIFRBUkdFVF9FWFBBTkRfU0hJRlQpOiBOZXcgdGFyZ2V0IGZsYWdzLgorCisJKiB2YS1zcHVyLmg6IFRyYWNrIHBvc2l0aW9uIGluIHJlZ3MgYW5kIHN0YWNrIHNlcGFyYXRlbHkuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBXYXJuIGlmIHByb3RvdHlwZSBmb2xsb3dzCisJbm9uLXByb3RvdHlwZSBkZWZpbml0aW9uLgorCitTYXQgU2VwIDE3IDE0OjMwOjIzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEF2b2lkIGNyYXNoIGlmIGFyZyBpc24ndCBpbnRlZ2VyIHR5cGUuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBKdXN0IHdhcm4gaWYgcmVkZWNsYXJpbmcgYSBidWlsdGluLAorCWFuZCBsZWF2ZSBpdCBidWlsdCBpbiB1bmxlc3MgaXQgaXMgcmVkZWZpbmVkLgorCisJKiB2YXgubWQgKGFzaGxzaTMpOiBVc2UgYWRkbDMsIG1vdmFsIG9yIG1vdmFkIHdoZW4gdXNlZnVsLgorCShhZGRzaTMpOiBBdm9pZCBwdXNoYWIsIG1vdmFiIGZvciBjb25zdGFudHMgPCA2NC4KKwlEbyB1c2UgbW92YWIgd2hlbiA+IDY0IHdoZW4gb3BlcmFuZHMgbWF0Y2guCisJKG1vdippKTogVXNlIG1jb20qIHJhdGhlciB0aGFuIG1uZWcqLgorCVVzZSBhZGQqMyB3aXRoIHR3byBxdWljayBpbW1lZGlhdGUgYXJncyB3aGVuIHVzZWZ1bC4KKwkobW92aGkpOiBEb24ndCB1c2UgbW92emJ3IG9yIGN2dGJ3OyBzYWlkIHRvIGJlIHNsb3cuCisKKwkqIHJ0bC5oOiBOZXcgbWFjcm9zIE1FTV9WT0xBVElMRV9QLCBNRU1fSU5fU1RSVUNUX1AsCisJSU5TTl9ERUxFVEVEX1AsCVJFR19VU0VSX1ZBUl9QLCBSVFhfVU5DSEFOR0lOR19QLCBSVFhfSU5URUdSQVRFRF9QLAorCUNPTlNUQU5UX1BPT0xfQUREUkVTU19QLgorCU1vc3QgcGxhY2VzIGNoYW5nZWQgdG8gdXNlIHRoZW0uCisKK0ZyaSBTZXAgMTYgMTE6NTA6MTUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXYXMgdGVzdGluZyB2b2xhdGlsIG9uIG5vbi1NRU1zIGVycm9uZW91c2x5CisJd2hlbiBsb29raW5nIGZvciBuby1vcCBtb3ZlIGluc25zLgorCisJKiBjY2NwLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBJZ25vcmUgY29tbWVudHMgYmV0d2VlbiAjIGFuZCBkaXJlY3RpdmUuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFN0YWNrLXB1c2ggbWVtcmVmcyBuZWVkCisJdG8gYmUgY29waWVkLgorCisJKiB0bS1ic2QzODYuaCAoQVNNX09VVFBVVF9ET1VCTEUpOiBVbmRlZiBwcmV2aW91cyBkZWYuCisKKwkqIHJlbG9hZDEuYyAoYWx0ZXJfcmVnKTogRG9uJ3QgcmV1c2Ugc3BpbGxfc3RhY2tfc2xvdAorCWlmIGl0IGlzbid0IGJpZyBlbm91Z2ggZm9yIHRoaXMgcmVnJ3MgbW9kZS4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IEFmdGVyIGZvcmNlX2NvbnN0X21lbSwgZW5zdXJlCisJbWVtIGFkZHJlc3MgaXMgdmFsaWQuCisJKG1vdmVfYmxvY2tfdG9fcmVnLCBtb3ZlX2Jsb2NrX2Zyb21fcmVnKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBTcHVyaW91cyBUUkVFX1ZBTFVFIG9uIGFyZ3NbaV0udHJlZV92YWx1ZS4KKworCSogbTY4ay5tZCAoemVyb19leHRlbmQqKTogUmVxdWlyZSByZWdpc3Rlcl9vcGVyYW5kIGZvciBvcGVyYW5kIDAuCisKKwkqIHN0ZGFyZy5oICh2YV9zdGFydCk6IEFsdGVybmF0ZSBkZWZuIGZvciBzcGFyYy4KKworVGh1IFNlcCAxNSAxMTozOTowNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBXaGVuIGF0b2YgZ2l2ZXMgRVJBTkdFLCBjaGVjayBmb3IgIjAuMCIsIGV0Yy4KKworCSogYXNzZXJ0LmggKF9fYXNzZXJ0KTogQWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBmb3IgLXRyYWRpdGlvbmFsLgorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBJbml0aWFsaXplIHhvcGVyYW5kcy4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IE5ldmVyIHN1YnN0IGZvciBhIHJlZyB0aGF0IGlzIGluY3JlbWVudGVkLgorCisJKiBtNjhrLm1kIChjbXBtIHBhdHRlcm4pOiBNYWtlIHRoZSBtYXRjaF9vcGVyYW5kcyBtYXRjaCBtZW1yZWZzCisJYW5kIGNoZWNrIHRoYXQgdGhleSBhcmUgcHVzaGVzIGluIHRoZSBleHRyYSBjb25kaXRpb24uCisJVGhpcyBtYWtlcyByZWxvYWRpbmcgaGFuZGxlIHRoZSBwdXNoZXMgcHJvcGVybHkuCisKKwkqIGV4cHIuYyAoTU9WRV9SQVRJTyk6IE1ha2UgaXQgMTUuICBBbGxvdyBvdmVycmlkaW5nIGl0LgorCitXZWQgU2VwIDE0IDA5OjUwOjA4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBVc2Ugc2F2ZWFibGVfdHJlZV9jb25zLgorCisJKiB2YXgubWQgKG1vdmRmKTogVXNlIG1vdnEgd2hlbiBzYWZlLgorCisJKiBWZXJzaW9uIDEuMjggcmVsZWFzZWQuCisKKwkqIHRtLXNwYXJjLmggKEZJUlNUX1BBUk1fQ0FMTEVSX09GRlNFVCk6IERlZmluZWQuCisKK1R1ZSBTZXAgMTMgMDA6MTE6MzcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChzYXZlYWJsZV90cmVlX2NvbnMpOiBOZXcgZnVuY3Rpb24uCisJKiBjLWRlY2wuYyAocHVzaHRhZyk6IFVzZSBpdDsgbGlzdHMgb2YgdGFncyBuZWVkZWQgZm9yIGlubGluaW5nLgorCShnZXRfcGFybV9pbmZvKTogTGlrZXdpc2UuCisKKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IEhhbmRsZSBlYWNoIGtpbmQgb2Ygc3RhdGVtZW50IG5vZGUgaW5kaXZpZHVhbGx5LgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9kZWNsX3RyZWUpOiBEb24ndCBwYXNzIERFQ0xfUlRMIHRocm91Z2gKKwljb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSBpZiBpdCdzIGEgbWVtcmVmIHdpdGggY29uc3RhbnQgYWRkcmVzcy4KKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBEb24ndCBvdXRwdXQgZ2FyYmFnZSB3aGVuIERFQ0xfUlRMCisJaGFzIGEgZm9ybSB3ZSBkb24ndCB1bmRlcnN0YW5kLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IERvbid0IHJlbG9hZCBhbiBhdXRvaW5jcmVtZW50CisJaWYgaXQgaGFzIGEgc3VpdGFibGUgaGFyZCByZWcgYWxyZWFkeS4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRXJyb3IgY2hlY2sgYWZ0ZXIgZGlnZXN0X2luaXQuCisKKwkqIGMtcGFyc2UueSAoaXNfcmVzZXJ2ZWRfd29yZCk6IE5vdyBzdGF0aWMuCisKK01vbiBTZXAgMTIgMTk6MTk6MjggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBpMzg2Lm1kIChhbGwgcHVzaCBpbnNucyk6IFVzZSBgPCcgZm9yIHRoZSBjb25zdHJhaW50LAorCXNpbmNlIGEgcHVzaF9vcGVyYW5kIHdvbid0IGZpdCBhbiBgbScgY29uc3RyYWludCBvbiB0aGlzIG1hY2hpbmUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBJZiBmbiBuYW1lIGlzIGBfX2J1aWx0aW5fYWxsb2NhJywKKwlpdCBtYXkgYmUgYWxsb2NhLiAgVGhpcyBjYXNlIGFyaXNlcyBpZiB0aGUgdXNlciByZWRlY2xhcmVzCisJYF9fYnVpbHRpbl9hbGxvY2EnLgorCitTdW4gU2VwIDExIDAxOjQ3OjAxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZ2x1dGV1cy5haS5taXQuZWR1KQorCisJKiBFbGltaW5hdGUgTUFYX1NFVFNfUEVSX0lOU04uCisJKiBjc2UuYyAoY3NlX2luc24pOiBDb21iaW5lIGFsbCB0aGUgdGFibGVzIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZS4KKwkoY3NlX21haW4pOiBDb3VudCB0aGUgYWN0dWFsIG51bWJlciBvZiBTRVRzOyBkb24ndCBlc3RpbWF0ZS4KKwkqIGdlbmNvbmZpZy5jOiBEb24ndCBjYWxjdWxhdGUgTUFYX1NFVFNfUEVSX0lOU04uCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBObyBsaW1pdCBvbiAjIG9mIG91dHB1dCBvcGVyYW5kcy4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6CisJU3RvcmUgYWxsIG5vbi1yZWcgcGFybXMgZmlyc3QsIHRoZW4gc3RvcmUgYWxsIHBhcnRpYWxseS1pbi1yZWcKKwlwYXJtcywgdGhlbiBhbGwgdGhlIChwcmVjb21wdXRlZCkgd2hvbGx5LWluLXJlZyBwYXJtcy4KKwlTcGVjaWFsIGhhaXIgZm9yIEJMS21vZGUgcGFybXMgd2hpY2ggbXVzdCBiZSBwYXNzZWQgZW50aXJlbHkKKwlpbiBtZW1vcnk7IGFsc28gZm9yIEJMS21vZGUgcGFybXMgaW5pdGlhbGl6ZWQgZnJvbSBmdW5jdGlvbiBjYWxscywKKwlmb3Igd2hpY2ggaXQgaXMgYmVzdCB0byBhbGxvY2F0ZSB0aGUgc3BhY2UgYmVmb3JlIGNvbXB1dGluZyB2YWx1ZS4KKwlVc2UgbWFjcm8gRklSU1RfUEFSTV9DQUxMRVJfT0ZGU0VUIHRvIGhhbmRsZSBtYWNoaW5lcyB3aGVyZSByZWcKKwlwYXJtcyAidGFrZSB1cCBzcGFjZSIgb24gdGhlIHN0YWNrIGJlbG93IHRoZSBzdGFjayBwb2ludGVyLgorCShzdG9yZV9vbmVfYXJnKTogSGFuZGxlIGNhc2Ugb2YgcHJlYWxsb2NhdGVkIHN0YWNrIGxvYyBmb3IgQkxLbW9kZS4KKwlVcGRhdGUgY3VycmVudF9hcmdzX3NpemUgaGVyZSwgbm90IGluIGNhbGxlci4KKworU2F0IFNlcCAxMCAxOTo1ODowMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfc2NjX2luc24pOiBDaGFuZ2VkIGFzbSB0ZW1wbGF0ZXMuCisJVXNlIGNvbW1vbiBjb2RlIHRvIGVtaXQgdGhlIG1vdmUgaW5zbnMgYW5kIGxhYmVsIGF0IHRoZSBlbmQgb2YgZm4uCisJKG91dHB1dF9tdWxfYnlfY29uc3RhbnQpOiBVc2UgJWcxIGFzIHRlbXBvcmFyeSByZWcuCisKKwkqIHNwYXJjLm1kIChpbmRleGVkIGxvYWQgcGF0dGVybik6IERlbGV0ZWQuCisJKGZpeF90cnVuY2Rmc2kyKTogRG9uJ3QgaWdub3JlIHZhbHVlIG9mIG91dHB1dF9mcF9tb3ZlX2RvdWJsZS4KKwkoY3NlJ2QgbXVsdGlwbHkpOiBPcGVyYW5kIDEgcHJlZGljYXRlIGlzIGdlbmVyYWxfb3BlcmFuZC4KKwkocmV0dXJuIHBlZXBob2xlcyk6IENvbmRpdGlvbmFsaXplIG9uICEgVEFSR0VUX0VQSUxPR1VFLgorCisJKiB0bS1zcGFyYy5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyxGVU5DVElPTl9BUkcuLi4pOgorCVVzZSBwYXJ0aWFsIHJlZ3MgZm9yIGFyZ3MgdGhhdCBzdGFydCBpbiByZWdzIGJ1dCB3b24ndCBlbnRpcmVseSBmaXQuCisKKwkqIHRtLXNwYXJjLmggKENPTlNUX0NPU1RTKTogMCBmb3IgYXJncyB0aGF0IGNhbiBiZSBpbW1lZGlhdGUuCisJKFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZKTogTm93IDguCisJKFNUUlVDVF9WQUxVRV9PRkZTRVQpOiBEZWZpbmVkIGFzIHN5bWJvbGljIG5hbWUgZm9yIGA2NCcuCisKKwkqIGV4cHIuYyAoc3RydWN0IGFyZ19kYXRhKTogTmV3IGNvbXBvbmVudCBgc3RhY2snIHNheXMgd2hlcmUgaW4gdGhlCisJc3RhY2sgdG8gcHV0IGEgQkxLbW9kZSBhcmcgKGlmIGl0J3Mgbm9uemVybykuCisJKHN0b3JlX29uZV9hcmcpOiBIYW5kbGUgY2FzZSB3aGVyZSBpdCdzIG5vbnplcm8uCisJKHRhcmdldF9mb3JfYXJnKTogTmV3IGZuLCBwcmVjb21wdXRlIHN0YWNrIGxvY24gZm9yIEJMS21vZGUgYXJnLgorCitGcmkgU2VwICA5IDAxOjQxOjEzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgY29ybi1jaGV4LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IE1pc25lc3RlZCBpZnMgc2NyZXdlZCBTVUJSRUcgY2FzZS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBTcGVjaWFsIGNhc2UgZm9yIChTVUJSRUcgUkVHKQorCXdoZXJlIFJFRyBpcyBlcXVpdmFsZW50IHRvIGEgQ09OU1RfSU5ULgorCShmaW5kX3JlbG9hZHMpOiBEb24ndCBpZ25vcmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGZpbmRfcmVsb2Fkc190b3BsZXYuCisJVHJlYXQgYSAoU1VCUkVHIGNvbnN0YW50KSBsaWtlIGEgKFNVQlJFRyBNRU0pOiBzZXQgZm9yY2VfcmVsb2FkLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBBYm9ydCBpZiBtZW1vcnkgc3VicmVnIGlzIG5vdAorCXBhcmFkb3hpY2FsOyB0aGUgTUVNIG1vZGUgc2hvdWxkIGJlIG5hcnJvd2VyIHRoYW4gdGhlIFNVQlJFRy4KKworCSogc3RtdC5jIChmaXh1cF92YXJfcmVmXzEpOiBGaXh1cCBtZW1vcnkgc3VicmVncyBpbiBhbiBpbnNuCisJY29weWluZyBWQVIgdG8gb3IgZnJvbSBhIHJlZ2lzdGVyLgorCisJKiBtNjhrLm1kIChtb3ZkaSwgbW92ZGYpOiB0aGUgeC1yZWcgY29uc3RyYWludCBhY2NpZGVudGFsbHkgYWxsb3dlZAorCW1vdmluZyBybSB0byBybSB3aXRoIG5vICYuCisKKwkqIHZheC5tZCAoY2FsbF92YWx1ZSk6IFR5cG8uCisKKwkqIGV4cHIuYyAoZW1pdF9ibG9ja19tb3ZlLCBlbWl0X3B1c2hfaW5zbik6IHByZWZlciBtb3ZzdHJxaSB0byBtb3ZzdHJzaQorCisJKiBtNjhrLm1kIChGUEEgbXVsdGlwbHkpOiBiYWQgb3Bjb2RlcyBmb3IgMy1vcGVyYW5kIG11bHRpcGx5IGluc25zLgorCitUaHUgU2VwICA4IDE4OjIyOjE0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55OiBVc2UgWVlFUlJPUiBpbnN0ZWFkIG9mIHN5bm9ueW0gWVlGQUlMLgorCUJJU09OIFZFUlNJT05TIFBSSU9SIFRPIFRISVMgREFURSBXT04nVCBXT1JLIQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCBvZiBhcnJheSBlbHQgdHlwZS4KKworCSogdG0tc3VuWzIzXS5oIChDUFBfU1BFQywgQVNNX1NQRUMpOiBMZXQgLW0oY3wpNjgwWzEyXTAgY29udHJvbAorCW9wdGlvbnMgZm9yIENQUCBhbmQgYXNzZW1ibGVyLgorCitXZWQgU2VwICA3IDEzOjQ0OjU5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogTmV3IGhhbmRsaW5nIG9mIHJlbG9hZGluZyBvZiBQUkVfREVDLCBldGMuCisJTm93IHJlbG9hZF9pbiBpcyB0aGUgUFJFX0RFQywgZXRjLCBhbmQgcmVsb2FkX2luYyBpcyBhbHdheXMgcG9zaXRpdmUuCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWRzKTogT2xkIGNvZGUgdG8gc2V0IHJlbG9hZF9pbmMgZGVsZXRlZC4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IENhbGwgcHVzaF9yZWxvYWQgdGhlIG5ldyB3YXkuCisJKGZpbmRfaW5jX2Ftb3VudCk6IFZhbHVlIGFsd2F5cyBwb3NpdGl2ZS4KKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogRGV0ZWN0IHRoaXMgY2FzZS4KKwkoaW5jX2Zvcl9yZWxvYWQpOiBOZXcgZm47IGRvZXMgdGhlIHJlYWwgd29yayBmb3IgdGhpcyBjYXNlLgorCSogbTY4ay5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IEZuIGFkZHJlc3MgbXVzdCBiZSBvZmZzZXRhYmxlLgorCisJKiBjb21iaW5lLmMgKHRyeV9kaXN0cmliKTogUmVqZWN0IHN0cmFuZ2UgY2FzZXMgc3VjaCBhcyBpZgorCXJlc3VsdCBvZiBQUkVWMSBvciBQUkVWMiBpcyB1c2VkIGluIGEgbWVtb3J5IGFkZHJlc3MgaW4gSU5TTi4KKworCSogdmF4Lm1kIChtb3ZzZik6IEdlbmVyYXRlIG1vdmwgaW5zdGVhZCBvZiBtb3ZmLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogSWYgaGF2ZSByZWdwYXJtcywgc3RvcmUgYWxsIEJMS21vZGUgYXJncworCWJlZm9yZSBhbGwgdGhlIG90aGVyIGFyZ3MuCisJKHN0b3JlX29uZV9hcmcpOiBOZXcgc3Vicm91dGluZSBicm9rZW4gb3V0LgorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBDb21wbGV0ZSByZXdyaXRlLgorCisJKiBzcGFyYy5tZCAoY3NlJ2QgbXVsdGlwbHkgaW5zbik6IFR5cG8gaW4gYXNtLW91dHB1dCBjb2RlLgorCitUdWUgU2VwICA2IDIwOjA1OjQ4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55ICh5eWxleCwgZXRjLikgSW5zdGFsbCBTY2htaWR0J3MgcGVyZmVjdCBoYXNoIHRhYmxlLgorCisJKiBnY2MuYzogaGFuZGxlIGV4dGVuc2lvbiBgLmNjJy4KKworTW9uIFNlcCAgNSAxMjowOTo1OCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMS4yNyByZWxlYXNlZC4KKworCSogdG0taTM4Ni5oIChQUkVGRVJSRURfUkVMT0FEX1JFRyk6IFdoZW4gcmVsb2FkaW5nIGEgUUltb2RlLAorCW1ha2Ugc3VyZSB0aGUgY2xhc3MgZG9lc24ndCBpbmNsdWRlICVlc2kgb3IgJWVkaS4KKwkqIGkzODYubWQgKG1vdnFpKTogRWxpbWluYXRlIG9ubHkgdXNlIG9mIHRoZSBjbGFzcyBgeCcsCisJZm9yIHdoaWNoIFBSRUZFUlJFRF9SRUxPQURfUkVHIGNhbm5vdCB3b3JrLgorCShJbiBuZXh0IHZlcnNpb24sIGdldCByaWQgb2YgSU5ERVhfQ0xBU1MpLgorCUFsc28gdXNlIGAqJyB0byBjYXVzZSBwcmVmZXJlbmNpbmcgb2YgUV9SRUdTLgorCSogdG0tbTY4ay5oIChQUkVGRVJSRURfUkVMT0FEX1JFRyk6IFdoZW4gcmVsb2FkaW5nIGEgUUltb2RlLAorCXVzZSBEQVRBX1JFR1MuCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZHMpOiBCcmFpbm8gaW4gbGFzdCBjaGFuZ2Ugd2hlbiBJTiA9PSAwLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzLCBtYXJrX3NldF8xKTogQnVnIGlmIEhBUkRfUkVHTk9fTlJFR1MKKwlyZXR1cm5zIDAgZm9yIFZPSURtb2RlIHJlZyAoaW5zaWRlIGEgQ0xPQkJFUikuCisKKwkqIGMtcGFyc2UueSAoYXNtX29wZXJhbmQpOiBIYW5kbGUgYCgiUkVHTkFNRSIpJyBhcyBhbiBvcGVyYW5kLgorCSogcmVjb2cuYyAoZGVjb2RlX2FzbV9vcGVyYW5kcywgYXNtX25vcGVyYW5kcyk6IElnbm9yZSBhbnkgQ0xPQkJFUnMuCisJKiByZWdjbGFzcy5jIChyZWdfbmFtZXMpOiBWYXJpYWJsZSBub3cgZ2xvYmFsLgorCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogR2VuZXJhdGUgQ0xPQkJFUlMgd2hlbiBhcHByb3ByaWF0ZS4KKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBJZ25vcmUgcGFybXMgdGhhdCBhcmVuJ3QgUEFSTV9ERUNMcy4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogRG8gQVNNX09VVFBVVF9FWFRFUk5BTCBmb3IgZnVuY3Rpb25zLgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogZmxvYXRmbGFnIGlzIG5vdyBhbiBlbnVtLgorCURldGVjdCBpbnZhbGlkIHVzZSBvZiBkZWNpbWFsIHBvaW50cyAoPiAxLCBvciBpbiBleHBvbmVudCkKKwlhbmQgbXVsdGlwbGUgZXhwb25lbnQgbGV0dGVycy4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IElmIGlubGluaW5nIGZhaWxzLCBzZXQgVFJFRV9BRERSRVNTQUJMRS4KKworU3VuIFNlcCAgNCAwMDozNjozMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGNvcm4tY2hleC5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBIGNvbnN0IGFycmF5IGJlY29tZXMgYW4gYXJyYXkgb2YgY29uc3RzLgorCSogYy10eXBlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogQXJyYXkgcmVmIGlzIGNvbnN0IGlmIGFycmF5IGVsdHMgYXJlLgorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X21vdmVfZG91YmxlKTogQ2hhbmdlIGNyaXRlcmlhIGZvciBsZGQsIHN0ZC4KKwkob3V0cHV0X2ZwX21vdmVfZG91YmxlKTogTmV3IGFsdGVybmF0aXZlcyBhdm9pZCBsZGQsIHN0ZCBmb3IKKwlzdGFjayByZWZzIHRoYXQgYXJlbid0IGFsaWduZWQuCisJKG91dHB1dF9ibG9ja19tb3ZlKTogVXNlICVnMSBhcyB0ZW1wIHJlZy4KKworCSogc3BhcmMubWQgKGZsb2F0aW5nIHBvaW50IGxvYWQgZnJvbSBjb25zdGFudCBtZW0gYWRkcmVzcyk6CisJVXNlICVnMSBhcyB0ZW1wIHJlZy4gIFVzZSBvdXRwdXRfbW92ZV9kb3VibGUgaW4gREYgY2FzZSwgbm90IGxkZC4KKwkobW92c2YpOiBBc20gaW5zbiB0eXBvIGluIEZQcmVnIHRvIEZQcmVnIGNhc2UuCisJKGZsb2F0c2l7cyxkfWYyKTogQ29uc3RyYWludCBjaGFuZ2VkLgorCUFsc28gbmV3IHNwZWNpYWwgY2FzZSBwYXR0ZXJuIGluIGZyb250IG9mIGl0LgorCShmaXhfdHJ1bmNkZnNpMik6IFVzZSBvdXRwdXRfbW92ZV9kb3VibGUsIG5vdCBsZGQuCisJKGFkZHNpMywgc3Vic2kzKTogVXNlICVnMSBhcyB0ZW1wIHJlZy4KKwkoY3NlLW9wdGltaXplZCBtdWx0aXBseSk6IENvbnN0cmFpbnQgbm93IGBnJzsgb3V0cHV0IGdlbmVyYWxpemVkLgorCShhbmRzaTMsIG9yc2kzLCB4b3JzaTMpOiBVc2UgJWcxIGFzIHRlbXAgcmVnLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRm9yY2UgaW50IGNvbnN0YW50cyBpbnRvIG1lbW9yeSBqdXN0CisJbGlrZSBmbG9hdGluZyBvbmVzLCBpZiBtZW1vcnkgaXMgYWxsb3dlZCBhbmQgbm8gcmVncyBhcmUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBEb24ndCB0cmVhdCBzdHJ1Y3R1cmVfdmFsdWVfYWRkciBsaWtlIGEgcGFybQorCWlmIHRoZSBmaXJzdCBwYXJtIHdvdWxkIGJlIHBhc3NlZCBpbiBhIHJlZ2lzdGVyLgorCUFsc28sIHdyaXRlIGNvbW1lbnRzIGZvciBhbGwgbG9jYWwgdmFycy4KKworCSogdG0tMzg2di5oIChTVEFSVF9TUEVDKTogVXNlIHtnLG19Y3J0MS5vLCBub3Qge2csbX1jcnQwLm8uCisJKExJQl9TUEVDKTogQWx3YXlzIHVzZSBjcnRuLm8uCisKK1NhdCBTZXAgIDMgMTM6MDU6NTAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHBsb3cuYyAocGx1c19jb25zdGFudCk6IERvbid0IHB1dCBDT05TVCBhcm91bmQgbG9uZSBTWU1CT0xfUkVGLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogU2ltcGxpZnkgemVyby0gb3Igc2lnbi1leHRlbmQgb2YgYSBjb25zdGFudC4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IGZvciBSRUFMX0NTVCwgZXRjLiwgY2hlY2sgZm9yIGludmFsaWQKKwltZW1vcnkgYWRkcmVzc2VzIGFuZCBjb3B5IGludG8gcmVnaXN0ZXJzLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IElmIGluY29taW5nIHN0cnVjdCB2YWx1ZSBhZGRyCisJaXMgaW4gbWVtb3J5LCBtYXAgaXQgbGlrZSBhIG1lbW9yeSBwYXJhbWV0ZXIuCisKKwkqIHRtLSouaCAoRklSU1RfUEFSTV9PRkZTRVQpOiBOb3cgdGFrZXMgZm5kZWNsIGFzIGFyZ3VtZW50LgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxjLiwgdXNlIGFuZCBzYXZlCisJdGhpcyBmbnMgdmFsdWUgb2YgRklSU1RfUEFSTV9PRkZTRVQuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVXNlIHRoYXQgdmFsdWUuCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IExpa2V3aXNlLgorCisJKiB0bS1zcGFyYy5oIChGSVJTVF9QQVJNX09GRlNFVCk6IE1ha2UgaXQgNjQgaWYgdmFsdWUgaXMgQkxLbW9kZS4KKwkoU1RSVUNUX1ZBTFVFeyxfSU5DT01JTkd9KTogUHV0IHRoZSB2YWx1ZSBpbiA2NChmcCkuCisKKwkqIHRtLXNwYXJjLmggKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IFByaW50IG9mZnNldHMgaW4gZGVjaW1hbC4KKwlBdm9pZCBleGNlc3MgYCsnIGJlZm9yZSBhIG5lZ2F0aXZlIG9mZnNldC4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBDcmVhdGUgdGhlIHJldHVybiB2YWx1ZSBydGwKKwliZWZvcmUgbWFraW5nIHRoZSB0YWlsLXJlY3Vyc2lvbiBsb29wIHBvaW50LgorCisJKiBjb21iaW5lLmMgKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogR2VuZXJhdGUgYSBwYXJhZG94aWNhbCBzdWJyZWcKKwlyYXRoZXIgdGhhbiBhIHdpZGVyIG1lbXJlZi4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogRXh0ZW5kIGxhc3QgY2hhbmdlIHRvIGNhc2Ugd2hlcmUgT1VUICE9IDAuCisKK0ZyaSBTZXAgIDIgMTE6NDM6MjAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGZpeHVwX3Zhcl9yZWZzKTogQWRqdXN0IGxhc3RfcGFybV9pbnNuIHdoZW4gZGVsZXRpbmcgaW5zbnMuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBjYWxsaW5nIG1lbWNweSwgYnVtcCBURU1QIDIgcG9pbnRlcnMgd29ydGguCisKK1RodSBTZXAgIDEgMTY6Mzk6NTcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IFRlc3QgZm9yIGNhbmNlbGVkIHJlbG9hZAorCWJlZm9yZSBsb29raW5nIGluc2lkZSByZWxvYWRfb3V0LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBCdWcgaW4gbGFzdCBjaGFuZ2UuCisKKwkqIG02OGsubWQgKHJldHVybik6IFBhdHRlcm4gZGlzYWJsZWQ7IGNvbmZ1c2VzIEF1ZyAyOSBzdG10LmMgY2hhbmdlLgorCSogbnMzMmsubWQsIGkzODYubWQ6IGxpa2V3aXNlLgorCisJKiBlbWl0LXJ0bC5jIChlbWl0X25vdGVfZm9yY2UpOiBOZXcsIGxpa2UgZW1pdF9ub3RlIGJ1dCBhbHdheXMgZG8gaXQuCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBVc2UgZW1pdF9ub3RlX2ZvcmNlLgorCitXZWQgQXVnIDMxIDExOjM0OjA4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChhbHRlcl9yZWcpOiBOZXcgYXJnIEZST01fUkVHIGlzIGhhcmQgcmVnIHRoYXQgdGhlIHBzZXVkbworCXdhcyBzcGlsbGVkIGZyb20uICBXb3JrcyB3aXRoIHNwaWxsX3N0YWNrX3Nsb3QuICBDYWxsZXJzIGNoYW5nZWQuCisJTm93IGFsbCBwc2V1ZG9zIHNwaWxsZWQgZnJvbSBvbmUgaGFyZCByZWcgZ2V0IHRoZSBzYW1lIHNsb3QuCisJKHJlbG9hZCk6IEluaXRpYWxpemUgbmV3IHZhcmlhYmxlIHNwaWxsX3N0YWNrX3Nsb3QuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IGluc2VydCBmbG9hdGluZyBwb2ludCBtZW1zIGlmIC1mZmxvYXQtc3RvcmUuCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IEFsbG93IG5vIGVxdWl2cyBmb3Igdm9sYXRpbGUgbWVtcmVmcy4KKwlBbHNvIG5vbmUgZm9yIGZsb2F0aW5nIG1lbSByZWZzIGlmIC1mZmxvYXQtc3RvcmUuCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfbXVsX2J5X2NvbnN0YW50KTogbWFrZSBgcCcgYW5kIGBsb2cnIHVuc2lnbmVkLgorCitUdWUgQXVnIDMwIDEzOjQ3OjEyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSWdub3JlIG90aGVyIE5PVEVzIHdoaWxlIGxvb2tpbmcgZm9yCisJYSBOT1RFX0lOU05fRlVOQ1RJT05fRU5ELgorCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lKTogRmx1c2ggZXh0cmEgY2FsbCB0byBtYXhfcmVnX251bS4KKwlEb24ndCBjb3B5IE5PVEVzIHRoYXQgYXJlIE5PVEVfSU5TTl9GVU5DVElPTl9FTkQuCisJKGNvcHlfZm9yX2lubGluZSk6IERvbid0IGNvcHkgTk9URXMgdGhhdCBhcmUgTk9URV9JTlNOX0ZVTkNUSU9OX0VORC4KKworCSogc3RtdC5jIChvcHRpbWl6ZV9iaXRfZmllbGQpOiBJZiBiaXQgZmllbGQgaXMgU1JDLCBzdHJpcCBzdWJyZWdzCisJZnJvbSB0aGUgREVTVC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogU3BlY2lhbCBjYXNlIGZvciAtMSBhcyBvbmUgb3BlcmFuZC4KKworTW9uIEF1ZyAyOSAxMjoxNDo1MSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX2dvdG9faW50ZXJuYWwsIGV4cGFuZF9maXh1cCk6IE5ldyBhcmcgTEFTVF9JTlNOLgorCShleHBhbmRfcmV0dXJuKTogUGFzcyB0aGF0IGFyZyBpbiB0YWlsLXJlY3Vyc2l2ZSBjYXNlLgorCShvdGhlciBjYWxsZXJzKTogUGFzcyAwIGZvciB0aGF0IGFyZy4KKwkoZXhwYW5kX251bGxfcmV0dXJuKTogSGFuZGxlIEhBVkVfcmV0dXJuIG5vbnplcm8gdy8gRlVOQ1RJT05fRVBJTE9HVUUuCisJKGV4cGFuZF9udWxsX3JldHVybl8xKTogTmV3IGZuLCBoYXMgZ3V0cyBvZiBvbGQgZXhwYW5kX251bGxfcmV0dXJuLgorCShleHBhbmRfcmV0dXJuKTogQ2FsbCBleHBhbmRfbnVsbF9yZXR1cm5fMSB0byBwYXNzIExBU1RfSU5TTiBhcmcuCisJKGV4cGFuZF9yZXR1cm4pOiBIYW5kbGUgSEFWRV9yZXR1cm4gbm9uemVybyB3LyBGVU5DVElPTl9FUElMT0dVRS4KKwkoZXhwYW5kX2Z1bmN0aW9uX3tzdGFydCxlbmR9KTogTGlrZXdpc2UuCisJKGV4cGFuZF9jbGVhbnVwcyk6IEZpeCB0eXBvIGluIHJlY3Vyc2l2ZS1saXN0IGNhc2UuCisJKG1vdmVfY2xlYW51cHNfdXApOiBOZXcgZm4uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBFeGVjdXRlIGNsZWFudXBzX29mX3RoaXNfY2FsbCBvbiBleGl0aW5nLgorCU5vdGljZSBjYWxscyB0byBfX2J1aWx0aW5fbmV3IChidXQgZG9uJ3QgZG8gYW55dGhpbmcgYWJvdXQgdGhlbSB5ZXQpLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBJZiByZWxvYWRpbmcgYSAoU1VCUkVHIChNRU0gLi4uKSAuLi4pLAorCXJlYWxseSByZWxvYWQganVzdCB0aGUgTUVNIGluIHRoZSBNRU0ncyBvd24gbW9kZS4KKworCSogc3BhcmMubWQ6IERlZmluZSBwYXR0ZXJucyBmb3IgaW5zbnMgdGhhdCBzZXQgdGhlIGNjcy4KKwlEZWZpbmUgc2V0LWZsYWcgaW5zbnMuCisJTmV3IHBhdHRlcm5zIGZvciBpbmRleGVkIGxvYWQsIGFuZCBmb3Igb3B0aW1pemluZyBzaWduZWQgYml0IGZpZWxkcy4KKwkobXVsc2kzLCB1bXVsc2kzKTogR2l2ZSAiciIgY29uc3RyYWludCB0byBvcGVyYW5kIDAuCisJUGVlcGhvbGUgb3B0aW1pemVycyByZWNvZ25pemUgc29tZSBjYXNlcyB3aGVyZSBkZWxheSBpbnNucyBhcmUgc2FmZS4KKwlDaGFuZ2VkIHBhdHRlcm5zIGZvciBjYWxsIGFuZCByZXR1cm4gaW5zbnMgYXMgd2VsbC4KKworCSogb3V0cHV0LXNwYXJjLmMgKHNpbmdsZV9pbnNuX3NyY19wKTogTmV3IGZuLgorCShvdXRwdXRfZGVsYXlfaW5zbik6IE5ldyBmbi4KKworCSogdG0tc3BhcmMuaCAoVEFSR0VUX0VQSUxPR1VFKTogTmV3IHRhcmdldCBmbGFnLgorCShOT1RJQ0VfVVBEQVRFX0NDKTogTmV3IGNsYXVzZSBmb3IgZnVubnkgUEFSQUxMRUwgd2l0aCBhIFJFRyBpbiBpdC4KKworCSogbTY4ay5tZCAobW92cWkpOiBVc2UgKidzIHRvIGVuc3VyZSBwcmVmZXJlbmNpbmcgZC1yZWdzLgorCisJKiBjLXBhcnNlLnkgKGRhdGFkZWYpOiBJZiB0cmFkaXRpb25hbCwgbm8gd2FybmluZyBhYm91dCBubyBzcGVjcy4KKworU3VuIEF1ZyAyOCAxNDozNDozMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLWkzODYuaDogRGVmaW5lIFBST01PVEVfUFJPVE9UWVBFUy4KKwlQT0lOVEVSX0JPVU5EQVJZIG5vdyAzMi4KKworCSogcmVnY2xhc3MuYyAocmVnX3NjYW4pOiBDb21wdXRlIGBtYXhfcGFyYWxsZWwnLCBtYXggIyBvZiBzZXRzIGFuZAorCWNsb2JiZXJzIGluIGFueSBpbnNuIGluIHRoaXMgZnVuY3Rpb24uCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2NvbmZsaWN0cyk6IFVzZSB0aGF0LCBub3QgTUFYX1NFVFNfUEVSX0lOU04uCisKKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IE1BWF9TRVRTX1BFUl9JTlNOIGxpbWl0cyAjIG91dHB1dCBvcHMuCisKKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogTWFrZSBlbHQgMiBvZiB7ZixkfWNvbnN0MF9ydHggbm9uemVyby4KKworCSogYy1kZWNsLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtV3dyaXRlLXN0cmluZy4KKwkqIGMtcGFyc2UueSAoY29tYmluZV9zdHJpbmdzKTogSWYgdGhhdCBmbGFnLCBtYWtlIGFycmF5IG9mIGNvbnN0IGNoYXIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBmb3IgSU5URUdFUl9DU1QsIGFsd2F5cyB1c2UgaW1tZWRfZG91YmxlX2NvbnN0OworCW5ldmVyIGRvIG91dHB1dF9jb25zdGFudF9kZWYgKGl0IGRpZG4ndCB3b3JrKS4KKwlBbHNvIGhlZWQgV09SRFNfQklHX0VORElBTi4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IEhhbmRsZSBpbnRlZ2VyIENPTlNUX0RPVUJMRXMuCisJKG91dHB1dF9jb25zdGFudF9kZWYpOiBBYm9ydCBpZiBhcmcgaXMgYW4gSU5URUdFUl9DU1QuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9ydHgpOiBEb24ndCByZXR1cm4ge2YsZH1jb25zdDBfcnR4IGZvciBESW1vZGUuCisKK1NhdCBBdWcgMjcgMTI6Mzc6MjMgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBHbG9iYWwgZXh0ZXJuIGRlY2xzIHNldCBUUkVFX1BVQkxJQworCWxpa2UgbG9jYWwgb25lcy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBIYW5kbGUgcGFybXMgdGhhdCB3ZXJlCisJcGFzc2VkIGluIHJlZ2lzdGVycyBidXQgd2hvc2UgaG9tZXMgYXJlIG9uIHRoZSBzdGFjay4KKworCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X21lbSk6IE91dHB1dCBpbnRzIGFjY29yZGluZyB0byBzcGVjJ2QgbW9kZS4KKwkoe3JlY29yZCxjb21wYXJlfV9jb25zdGFudF9ydHgsY29uc3RfaGFzaF9ydHgsZGVjb2RlX3J0eF9jb25zdCk6CisJVGFrZSBtb2RlIGFzIGFyZ3VtZW50OyBwYXNzIGl0IGFsb25nLgorCisJKiBjLXBhcnNlLnkgKHJlYWRfZXNjYXBlKTogTm8gd2FybmluZyBmb3IgYFx7JyBvciBgXFsnLgorCitGcmkgQXVnIDI2IDEyOjIzOjA3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChmaXh1cF9tZW1vcnlfc3VicmVnKTogVHlwbyBjYWxjdWxhdGluZyBiaWctZW5kaWFuIGFkanVzdC4KKworCSogdmF4Lm1kIChjYWxsX3ZhbHVlKTogSGFuZGxlID4yNTUgYXJncyBhcyBpbiBgY2FsbCcuCisKK1RodSBBdWcgMjUgMTY6MDA6NTEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGRlbGV0ZV9qdW1wKTogRG9uJ3QgZGVsZXRlIHRoZSBjYy1zZXR0ZXIgaWYgaXQgaGFzIGF1dG9pbmMuCisKK1dlZCBBdWcgMjQgMTY6MzM6MzcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRm9yIHN1biB3aXRoIGEgQ09ORF9FWFBSLCB1c2UgU1VCVEFSR0VUCisJaWYgdmFsaWRhdGVfc3VidGFyZ2V0IHNheXMgb2suCisKKwkqIHRyZWUuYyAoYnVpbGRfaW5kZXhfdHlwZSk6IG1ha2VfaW5kZXhfdHlwZSBtb3ZlZCBoZXJlIGFuZCByZW5hbWVkLgorCisJKiBjb21iaW5lLmMgKG1vdmVfZGVhdGhzXzIpOiBOZXcgZnVuY3Rpb24uCisJKHRyeV9kaXN0cmliKTogVXNlIHRoYXQsIG5vdCBtb3ZlX2RlYXRocy4KKworCSogdG0tc3BhcmMuaCAoU0hJRlRfQ09VTlRfVFJVTkNBVEVELCBTVE9SRV9GTEFHX1ZBTFVFKTogRGVmaW5lIHRoZW0uCisKKwkqIHRtLXNwYXJjLmg6IEZVTkNUSU9OX3tQUk8sRVBJfUxPR1VFOiBTYXZlIHJvb20gZm9yIGlucyBhbmQKKwlsb2NhbHMgdG8gc3BpbGwgdG8gdGhlIGZyYW1lIGlmIGFueSBpbnMgKm9yKiBsb2NhbHMgYXJlIGxpdmUuCisKKwkqIHRtLXNwYXJjLmggKE5PVElDRV9VUERBVEVfQ0MpOiBEZWxldGUgdGhlIGNsYXVzZSB0aGF0IGFsd2F5cworCWNsZWFyZWQgdGhlIGNjJ3MgZm9yIHVucmVjb2duaXplZCBpbnNucy4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogRG9uJ3QgdHJ5IHRvIHVzZSBhIHNwaWxsLXJlZworCWluIGEgYmFzaWMgYmxvY2sgdGhhdCB3YXNuJ3Qgc3BpbGxlZDogaWdub3JlIG9wdGlvbmFsIHJlbG9hZHMuCisKK1R1ZSBBdWcgMjMgMDk6NDU6MDUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X3NjY19pbnNuKTogTmV3IGZ1bmN0aW9uLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBhbGxvY2EpOiBSb3VuZCByZXN1bHQgb2YgYWxsb2NhCisJdXAgdG8gYSBtdWx0aXBsZSBvZiBTVEFDS19CWVRFUy4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERlZmF1bHQgbWFpbl9pbnB1dF9maWxlbmFtZSBpcyBjYzEgaW5wdXQuCisKKwkqIHRtLWkzODYuaCAoRlVOQ1RJT05fQk9VTkRBUlkpOiAzMiBhdm9pZHMgZXh0cmEgcHJlZmV0Y2guCisKKwkqIGkzODYubWQgKG1vdmRpLCBtb3ZkZik6IEFkZCBgJicgd2hlcmUgbmVlZGVkIGluIGNvbnN0cmFpbnRzLgorCitNb24gQXVnIDIyIDExOjU3OjUxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3ltb3V0LmMgKHN5bW91dF9maW5pc2gpOiBBbGxvY2F0ZSB0eXBldmVjdG9yIGFmdGVyIHRoZSBzeW1vdXRfdHlwZXMuCisKK1N1biBBdWcgMjEgMTY6MTA6NTQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS0zYjEuaCAoQVNNX0ZPUk1BVF9QUklWQVRFX05BTUUpOiBVc2UgYSBgXycgYXMgd2VsbCBhcyBgJScuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBUeXBvIHNldHRpbmcgTU9ERSBmb3IgTUFYX0VYUFIuCisKKwkqIE1ha2VmaWxlIChzdGFnZSopOiBJZiBsbiBmYWlscywgY29weSBnbnVsaWIgdG8gc3RhZ2UqLgorCShyZWFsY2xlYW4pOiBEbyBgY2xlYW4nIGFuZCB0aGVuIHNvbWUuCisJKGluc3RhbGwpOiBuZXcgdmFyIFVTRVJfSCBzcGVjaWZpZXMgaGVhZGVycyB0byBjb3B5LgorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogTFRfRVhQUiwgZXRjLgorCW9uIHB0ciB2cyBpbnQgZmFpbGVkIHRvIHNldCByZXN1bHRfdHlwZS4KKwkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERvbid0IHJlcGxhY2Ugbm9uemVybyBpbnQKKwl3aXRoIG51bGxfcG9pbnRlcl9ub2RlLgorCisJKiBjb21iaW5lLmMgKHJlbW92ZV9saW5rcywgdHJ5X2Rpc3RyaWIpOiBOZXcgZm5zLgorCShzdWJzdCk6IE5ldyBzaW1wbGlmaWNhdGlvbnMgZm9yIFpFUk9fRVhURU5ELCBTSUdOX0VYVEVORC4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBDYWxsIHRyeV9kaXN0cmliLgorCShGQUtFX0VYVEVORF9TQUZFX1ApOiBBbGxvdyBTVUJSRUdzLgorCisJKiBtNjhrLm1kIChub24tRlBBIHBhdHRlcm4gZm9yIGZsb2F0c2lzZjIpOiBUeXBvLCBoYWQgREYgZm9yIFNGLgorCitTYXQgQXVnIDIwIDEyOjA0OjM3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfYWRkcmVzcyk6IFZhcmlhbnQgb2YgY29weV9ydHhfYW5kX3N1YnN0aXR1dGUuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVXNlIGNvcHlfYWRkcmVzcyBmb3IgTUVNIGFkZHJlc3MgdGhhdAorCWRvZXNuJ3Qgc2F0aXNmeSBtZW1vcnlfYWRkcmVzc19wLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWYgZm9yY2VfcmVsb2FkIHNldCwgZG9uJ3Qgc2V0IFdJTgorCWZvciBhIE1FTSBldmVuIGlmIGBtJywgYG8nIG9yIGBnJyBpbiBjb25zdHJhaW50LgorCisJKiBpMzg2Lm1kIChleHBlbmRxaWhpMik6IFR5cG8gaW4gYXNtIHRlbXBsYXRlLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgY2xlYXJfY29uc3RfZG91YmxlX21lbS4KKwkqIHZhcmFzbS5jIChpbml0X2NvbnN0X3J0eF9oYXNoX3RhYmxlKTogRG9uJ3QgY2FsbCBpdCBoZXJlLgorCShpbW1lZF9yZWFsX2NvbnN0KTogRG9uJ3QgcmVjb3JkIHRoZSBydHggaW4gdGhlIFJFQUxfQ1NUIG5vZGUuCisJKGZvcmNlX2NvbnN0X2RvdWJsZV9tZW0sIGNsZWFyX2NvbnN0X2RvdWJsZV9tZW0pOiBVc2UgY2MwX3J0eCwgbm90IDAsCisJYXMgZmxhZyBmb3IgYSBDT05TVF9ET1VCTEUgbm90IG9uIHRoZSBjaGFpbi4KKworCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlKTogSWYgdHJhZGl0aW9uYWwsIGRvIHNjYW4gc3RyaW5ncworCWJ1dCBhY2NlcHQgdW50ZXJtaW5hdGVkIG9uZXMuCisJKGNvbGxlY3RfZXhwYW5zaW9uKTogLXRyYWRpdGlvbmFsOiBEb24ndCByZWNvZ25pemUgY29tbWVudHMgaW4gc3RyaW5ncy4KKwlTdHJpbmdpZnkgYXJndW1lbnRzIHRoYXQgYXBwZWFyIHdpdGhpbiBzdHJpbmdzLgorCShza2lwX3F1b3RlZF9zdHJpbmcpOiAtdHJhZGl0aW9uYWw6IEFsd2F5cyBleGl0IGF0IG5ld2xpbmUuCisJKG1hY3JvZXhwYW5kKTogLXRyYWRpdGlvbmFsOiBEb24ndCBwdXQgYCIncyBhcm91bmQgc3RyaW5naWZpZWQgYXJnLgorCShtYWNhcmcpOiBTZXQgc3RyaW5naWZpZWRfbGVuZ3RoIGFjY29yZGluZ2x5LgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQXZvaWQgZXJyb3IgcmVkZWNsYXJpbmcgZmNuIGFmdGVyCisJaW1wbGljaXQgZGVjbCBpZiAtdHJhZGl0aW9uYWwuCisKKwkqIHRvcGxldi5jIChhbm5vdW5jZV9mdW5jdGlvbiwgcmVwb3J0X2Vycm9yX2Z1bmN0aW9uKToKKwlDaGFuZ2UgY29tbXVuaWNhdGlvbiBsb2dpYyBiZXR3ZWVuIHRoZXNlIGZjbnMuCisKKwkqIGMtZGVjbC5jIChsYW5nX2RlY29kZV9vcHRpb25zKTogSGFuZGxlIC1XYWxsIGhlcmUuCisJKiB0b3BsZXYuYyAobWFpbik6IG5vdCBoZXJlLgorCisJKiB0bS1ic2QzODYuaDogRG9uJ3QgaW5jbHVkZSB0bS1pMzg2LmgtLWJlIGxpa2UgdG0tYXR0Mzg2LmgKKworRnJpIEF1ZyAxOSAxMTowODozNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy1zdW40Lmg6IElmIHNwYXJjLCBpbmNsdWRlIGNvbmZpZy1zcGFyYy5oLgorCU5ldmVyIGluY2x1ZGUgYWxsb2NhLmguCisKKwkqIHRtLW02OGsuaCAoVEFSR0VUX1NXSVRDSEVTKTogRGVmaW5lIGAtbWM2ODAyMCcsIGAtbWM2ODAwMCcuCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IElmIHRyYWRpdGlvbmFsLCB1c2Ugc2lnbmVkIHNpemV0eXBlLgorCisJKiBnY2MuYyAobWFpbik6IFVzZSBzdGRlcnIgZm9yIHByaW50aW5nIHZlcnNpb24uCisKK1RodSBBdWcgMTggMTQ6NDI6MzYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDEuMjYgcmVsZWFzZWQuCisKKwkqIG02OGsubWQgKG1vdnNpKTogQ29uc3RyYWludCBjaGFuZ2UgZm9yIGZwYSByZWdzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IENsZWFyIHJlZ19yZWxvYWRlZF9jb250ZW50cworCWZvciBhbGwgcmVncyBvZiBhIG11bHRpLXJlZyBncm91cC4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogSEFSRF9SRUdOT19OUkVHUyB3YW50cyBtb2RlLCBub3Qgc2l6ZS4KKwlDaGVjayBwcm9wZXJseSBmb3Igb3ZlcmxhcCBhZ2FpbnN0IG11bHRpd29yZCByZWxvYWQgcmVncy4KKworVHVlIEF1ZyAxNiAxNDo1NDoxOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jLCBleHByLmMgKGltbWVkX2RvdWJsZV9jb25zdCk6IGltbWVkX3JlYWxfY29uc3RfMiByZW5hbWVkLgorCisJKiB0bS1pMzg2LmggKFNGVkFMVUUpOiBTaG91bGQgYmUgYGRvdWJsZScuCisJKiB0bS1pMzg2di5oIChTRlZBTFVFKTogRG9uJ3Qgb3ZlcnJpZGUgaXQuCisKKwkqIHRtLWkzODYuaCAoQVNNX09VVFBVVF9BU0NJSSk6IERvbid0IGRlZmluZSBpdC4KKwkqIHRtLWF0dDM4Ni5oOiBEZWZpbml0aW9uIG1vdmVkIGhlcmUuCisKKwkqIHRtLWJzZDM4Ni5oOiBOZXcgZmlsZSwgZm9yIFNlcXVlbnQuCisJKiB0bS1zZXEzODYuaDogTmV3IGZpbGUsIGZvciBTZXF1ZW50LgorCSogY29uZmlnLWkzODYuaDogTmV3IGZpbGUsIGZvciBTZXF1ZW50LgorCisJKiBleHByLmMgKHB1c2hfYmxvY2spOiBUYWtlIGFjY291bnQgb2YgU1RBQ0tfUE9JTlRFUl9PRkZTRVQuCisJKGV4cGFuZF9jYWxsKTogVGhlcmVmb3JlIG5lZWQgbm90IGRvIHNvIGhlcmUuCisKKwkqIG9wdGFicy5jIChleHBhbmRfZml4KTogVHlwbyBpZiBnb2luZyB2aWEgREltb2RlLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IERvbid0ICogcmVsb2FkX3JlZ19ydHggaWYgMC4KKworTW9uIEF1ZyAxNSAwMToxMTo0OSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2Zvcl9pbmxpbmUpOiBEb24ndCB0cnkgY29weWluZyAwLWxlbmd0aCB2ZWN0b3IuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogTGlrZXdpc2UuCisKKwkqIG02OGsubWQgKGFuZHNpMyk6IHVzZSBjbHJ3IGluc3RlYWQgb2YgYW5kdyAjMC4KKworCSogcHJpbnQtdHJlZS5jICh3YWxrKTogRG9uJ3Qgb21pdCBwZXJtYW5lbnQgbm9kZXMgcmVhY2ggZnJvbSB0ZW1wcy4KKworCSogbTY4ay5tZCAoemVyb19leHRlbmQuLi4pOiBSZWluc3RhbGwgdGhlIG9sZCB6ZXJvLWV4dGVuZCBpbnNucworCXdpdGhvdXQgbmFtZXMsIHNvIHRoZXkgY2FuIGhlbHAgdGhlIGNvbWJpbmVyLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRG9uJ3QgdXNlIGhhcmQgcmVncyBhcyBzdWJ0YXJnZXRzLgorCSogY29tYmluZS5jIChGQUtFX0VYVEVORF9TQUZFX1ApOiBBbHdheXMgY29uc2lkZXIgTUVNcyBzYWZlLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZvciAoU1VCUkVHIChNRU0gLi4uKSkgc2V0IGZvcmNlX3JlbG9hZC4KKworCSogYy1wYXJzZS55IChyZWRlc2NhcGUpOiBEb24ndCB3YXJuIGZvciBgXCgnLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiAjaWYgd2FzIGJhY2t3YXJkcy4KKworU3VuIEF1ZyAxNCAxNjo1MjoyMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHNob3J0ZW5fY29tcGFyZSk6IENoYW5nZSBzd2l0Y2ggdG8gY2hhaW4gb2YgaWZzLgorCisJKiB0bS1uczMyay5oIChQUklOVF9PUEVSQU5EKTogQ09OU1RfRE9VQkxFIGNvbnRhaW5zIGEgZG91YmxlCisJZXZlbiBpZiBpdCdzIFNGbW9kZS4KKwkoRlVOQ1RJT05fUFJPTE9HVUUpOiBJZiBNQUlOX0ZVTkNUSU9OX1BST0xPR1VFIGRlZmluZWQsIHJ1biBpdC4KKworCSogY2NjcC5jIChmaWxlX2J1Zik6IFJlbmFtZSBmaWVsZCBgZnJlZScgdG8gYGZyZWVfcHRyJy4KKworCSogTWFrZWZpbGUgKEFMTE9DQSwgTUFMTE9DLCBMSUJERVBTKTogTmV3IHZhcmlhYmxlcyBmb3IgZWFzaWVyCisJY3VzdG9taXphdGlvbi4gIEV4ZWN1dGFibGVzIGRlcGVuZCBvbiBMSUJERVBTIGluc3RlYWQgb2YgT0JTVEFDSzEuCisJKGNjY3ApOiBEZXBzIGFuZCBsaWJzIG5vdyB3b3JrIGxpa2UgdGhlIG90aGVycy4KKworCSogb3V0cHV0LWkzODYuYyAobm90aWNlX3VwZGF0ZV9jYyk6IFJld3JpdHRlbiBmb3IgY2xhcml0eS4KKworCSogdG0taTM4Ni5oIChPVVRQVVRfSlVNUCk6IElmIENDX0lOX09WRVJGTE9XLCBhYm9ydC4KKworCSogcmVjb2cuYyAocHVzaF9vcGVyYW5kKTogVGVzdCBmb3Igc3RhY2tfcG9pbnRlcl9ydHguCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IERvbid0IHN1Ym1pdCBwdXNoLW9wZXJhbmRzCisJdG8gYG1lbW9yeV9hZGRyZXNzJy0taXQgd291bGQgbG9zZSBvbiBtYWNoaW5lcyB3aGVyZSBwdXNoaW5nIGlzCisJYSBzcGVjaWFsIGluc24sIG5vdCBhbiBhZGRyZXNzaW5nIG1vZGUuCisKKwkqIG91dHB1dC1pMzg2LmMJKHRvcF9kZWFkX3ApOiBObyBtb3JlIHJlZHVuZGFuY3ktLXRoYXQgZGlkbid0IHdvcmsuCisJTm93IG9uZSBtZXRob2QgaWYgb3B0aW1pemVkLCBvbmUgZm9yIGNhbGxfaW5zbnMgaWYgbm9vcHQsIG9uZSBmb3IKKwlvdGhlciBpbnNucyBpZiBub29wdC4KKwkoY2FsbF90b3BfZGVhZF9wKTogZnBfdG9wX2RlYWRfcCByZW5hbWVkCisJYW5kIG9ubHkgdGhlIGNhbGwtaW5zbiBjbGF1c2UgcmVtYWlucy4KKworCSogaTM4Ni5tZCAoY21wc2YsIGNtcGRmKTogT3V0cHV0IHdhcyBiYWNrd2FyZHMuCisJKCIsIHRzdHNmLCB0c3RkZik6IFNldCBDQ19JTl84MDM4Ny4KKwkoaW5jYiBwYXR0ZXJuKTogUmVzdHJpY3QgYWxsb3dhYmxlIHJlZ2lzdGVycy4KKwkobW92c2YsIG1vdmRmKTogQ2FsbCB0b3BfZGVhZF9wIG9ubHkgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KKwkoY2FsbF92YWx1ZSk6IFVzZSB0b3BfZGVhZF9wLCBub3Qgc3Vicm91dGluZS4KKworU2F0IEF1ZyAxMyAxNToxOToyMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IElmIG9ubHkgMSByZWcgY2xhc3MsCisJY2FsbCBzdHVwaWRfZmluZF9yZWcgb25seSBvbmNlLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6CisJQ2xlYXIgY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZS4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IElmIHRhcmdldCBpcyBoYXJkIHJlZywgZ28gdmlhIGEgcHNldWRvLgorCisJKiB2YXJhc20uYyAocmVhbF9jb25zdGFudF9jaGFpbik6IE5vdyBzdGF0aWMgaW4gdGhpcyBmaWxlLgorCShmb3JjZV9jb25zdF9kb3VibGVfbWVtKTogUHV0IFIgb24gY2hhaW4gaWYgbm90IGFscmVhZHkgb24uCisJKGNsZWFyX2NvbnN0X2RvdWJsZV9tZW0pOiBTZXQgWEVYUCAoLDIpIHRvIDA7CisJYWxzbyBjbGVhciByZWFsX2NvbnN0YW50X2NoYWluIGFuZCB0aGUgY2hhaW4gbGlua3MuCisJKiBlbWl0LXJ0bC5jIChpbml0X2VtaXRfb25jZSk6IFB1dCAwIGluIFhFWFAgKCwyKSBvZiB7ZCxmfWNvbnN0MF9ydHguCisJKiBjc2UuYyAoY2Fub25faGFzaCk6IEZvciBDT05TVF9ET1VCTEUsIGlnbm9yZSBlbHRzIG90aGVyIHRoYW4gMCwxLgorCitGcmkgQXVnIDEyIDExOjQ4OjM4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBIYW5kbGUgUkVHX0FMTE9DX09SREVSIG1vcmUgc3BvdHMuCisKKwkqIGdsb2JhbC1hbGxvYy5jIChmaW5kX3JlZyk6IGVycm9yIGhhbmRsaW5nIFJFR19BTExPQ19PUkRFUjsKKwlhbHNvIGVycm9yIHNraXBwaW5nIHJlZ3Mga25vd24gdG8gYmUgaG9wZWxlc3MuCisJKiBsb2NhbC1hbGxvYy5jIChmaW5kX2ZyZWVfcmVnKTogZXJyb3Igc2tpcHBpbmcgaG9wZWxlc3MgcmVncy4KKwkqIHN0dXBpZC5jIChzdHVwaWRfZmluZF9yZWcpOiBsaWtld2lzZS4KKworCSogbG9jYWwtYWxsb2MuYyAocXR5X2NvbXBhcmVfMSk6IHR5cG8sIGhhZCBxMSBmb3IgcTIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEb24ndCB1c2Ugc3VwcGxpZWQgdGFyZ2V0IHdoZW4gb3B0aW1pemluZworCWFyaXRobWV0aWMgdXNpbmcgYSBjb21wYXJpc29uIG9yIGNvbmRpdGlvbmFsOyB0aGF0IHRhcmdldCBjb3VsZCBiZQorCW5lZWRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbi4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEb24ndCBzZXQgcmVnX2VxdWl2X2NvbnN0YW50IGZvciBoYXJkIHJlZ3MuCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IElnbm9yZSByZWcgUiBpZiByZWdub19yZWdfcnR4W1JdPT0wLgorCisJKiBzeW1vdXQuYyAoc3ltb3V0X2ZpbmlzaCk6IFVzZSBwZXJtLiBsaW5rcyBpbiBwZXJtYW5lbnRfZndkX3JlZnMuCisKKwkqIGkzODYubWQgKG1vdmhpLCBtb3ZxaSk6IENoZWNrIG5vX2xhYmVsc19iZXR3ZWVuX3AuCisKK1RodSBBdWcgMTEgMTA6NDQ6NDYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogT3V0LW9mLXJhbmdlIGZsb2F0IGlzIGp1c3QgYSB3YXJuaW5nLgorCisJKiB0bS1nbngtdjMuaDogTmV3IGZpbGUgZm9yIEdlbml4LgorCSogbnMzMmsubWQgKG1vdnNpLCBjYWxsLCBjYWxsX3ZhbHVlKTogR05YX1YzIGNvbmRpdGlvbmFscy4KKwkqIHRtLW5zMzJrLmggKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IENoYW5nZXMgZm9yIEdlbml4LgorCisJKiBuczMyay5tZCAoaW5zdiBwYXR0ZXJucyk6IE9wZXJhbmQgMCBpcyByZWFkLXdyaXRlLgorCisJKiBpMzg2Lm1kICh0c3RzZiwgdHN0ZGYpOiBEb24ndCBwdXNoIHRoZSBhcmcgaWYgYWxyZWFkeSBpbiBzdCgwKS4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9kZWYpOiBJZiBFWFAgaXMgcGVybWFuZW50LCB0aGUgcnRsIGlzIHRvby4KKworCSogdG0tKi5oIChBU01fT1VUUFVUX3tMT0NBTCxDT01NT059KTogTmV3IDR0aCBhcmcsIHJvdW5kZWQgc2l6ZQorCXZzIHVucm91bmRlZCBzaXplLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogUGFzcyBuZXcgYXJnLgorCSogc3ltb3V0LmMgKHN5bW91dF9pbml0KTogTGlrZXdpc2UuCisKKwkqIGNjY3AuYyAocmVzY2FuKTogRG9uJ3QgbGV0IGNoYXIgY29uc3QgY3Jvc3MgbGluZXMuCisJKHNraXBfcXVvdGVkX3N0cmluZywgbWFjYXJnMSwgZGlzY2FyZF9jb21tZW50cyk6IExpa2V3aXNlLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBWQVJfREVDTCBjYXNlKTogaGFuZGxlIGZsYWdfZm9yY2VfYWRkci4KKworCSogdG0taTM4NnYuaCAoVEFSRUdUX0RFRkFVTFQpOiBBc3N1bWUgODAzODcuCisJKiBjb25maWctaTM4NnYuaCAoYWxsb2NhKTogVXNlIF9fYnVpbHRpbl9hbGxvY2EgdW5kZXIgR05VIEMuCisKK1dlZCBBdWcgMTAgMTE6MjM6MDYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQWx0ZXJuYXRpdmUgbG9zZXMKKwlpZiBpdCBoYXMgbm8gcmVncyBmb3IgYSByZWcgb3BlcmFuZC4KKworCSogdG0tc3VuMy5oIChTVEFSVEZJTEVfU1BFQyk6IERlZmluZSwgZm9yIGZwYSdzIHNha2UuCisJKiB0bS1tNjhrLmg6IE5ldyBoYXJkIHJlZ3MsIHJlZyBjbGFzc2VzLCByZWcgY2xhc3MgbGV0dGVycywKKwl0YXJnZXQgZmxhZyBhbmQgc3dpdGNoLCBvcGVyYW5kIHN5bnRheCBhbmQgQ0MgaGFuZGxpbmcgZm9yIGZwYS4KKwkqIG02OGsubWQ6IEFkZCBmcGEgaW5zbiBwYXR0ZXJucy4KKwkqIG91dHB1dC1tNjhrLmMgKHN0YW5kYXJkX1N1bkZQQV9jb25zdGFudF9wKTogTmV3IGZuLgorCShvdXRwdXRfbW92ZV9jb25zdF97c2luZ2xlLGRvdWJsZX0pOiBIYW5kbGUgZnBhIHJlZ3MuCisJKHNpbmdsZW1vdmVfc3RyaW5nKTogSGFuZGxlIGZwYSByZWdzLgorCisJKiBzdG10LmMgKGZpeHVwX21lbW9yeV9zdWJyZWcpOiBSZXN1bHQgaGFkIHdyb25nIG1vZGUuCisKKwkqIG5zMzJrLm1kIChpbnN2IHBhdHRlcm5zKTogQWRqdXN0IGJpdC1udW1iZXIgYWxvbmcgd2l0aCBhZGRyZXNzLgorCisJKiBzcGFyYy5tZCAobmVnZGYyLCBhYnNkZjIpOiBPcmRlciBvZiB0aGUgd29yZHMgd2FzIGJhY2t3YXJkcy4KKworCSogcmVsb2FkMS5jIChuZXdfc3BpbGxfcmVnKTogRW5kIGNvbmZ1c2lvbiBhYm91dCBtZWFuaW5nIG9mIDFzdCBhcmcuCisJQXJnIGNvdW50ZWRfZm9yX25vbmdyb3VwcyBoYWQgd3JvbmcgdHlwZS4KKworCSogdG0tbTY4ay5oIChGVU5DVElPTl97UFJPLEVQSX1MT0dVRSk6IFJvdW5kIGZyYW1lIHNpemUgdG8gd29yZCBiZHJ5LgorCitUdWUgQXVnICA5IDA3OjUzOjU5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0taTM4Ni5oIChBU01fT1VUUFVUX0FTQ0lJKTogRG9uJ3QgbG9zZSB0aGUgc2lnbiBiaXQuCisKKwkqIHRtLWkzODZ2LmggKFNUQVJURklMRV9TUEVDLCBMSUJfU1BFQyk6IFVzZSBjcnQxLm8sIGNydG4uby4KKworCSogc3RtdC5jIChmaXh1cF92YXJfcmVmc18xKTogZml4dXAgYWxsIG1lbW9yeSBzdWJyZWdzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IERvbid0IHN0cmlwIHBhcmFkb3hpY2FsCisJc3VicmVncyBmcm9tIHZhbHVlcyB0byBiZSByZWxvYWRlZC4KKworCSogY2NjcC5jOiBDb21tZW50IG91dCB0ZXh0IGFmdGVyICNlbmRpZi4KKworCSogYy1wYXJzZS55IChpbml0KTogQWxsb3cgZW1wdHkgYnJhY2VzIGFzIGluaXQ7IHdhcm4gaWYgcGVkYW50aWMuCisKKwkqIGMtZGVjbC5jOiBNb3ZlIEMtc3BlY2lmaWMgb3B0aW9ucyBmcm9tIHRvcGxldi5jLgorCSogYy10cmVlLmg6IE1vdmUgdGhlaXIgZXh0ZXJucyBmcm9tIGZsYWdzLmguCisJKiBjLWRlY2wuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogTmV3IGZuIGNhbGxlZCBieSBgbWFpbicuCisJKiB0b3BsZXYuYyAoc29ycnksIHJlYWxseV9zb3JyeSk6IE5ldyBlcnJvciByZXBvcnRpbmcgZm5zLgorCSogYy1kZWNsLmMgKGxhbmd1YWdlX3N0cmluZyk6IE5ldyB2YXIsIG5hbWUgb2YgdGhpcyBsYW5ndWFnZS4KKworCSogYy1wYXJzZS55OiBEb24ndCBpbmNsdWRlIGZsYWdzLmguCisJKiBkYnhvdXQuYzogRG8gaW5jbHVkZSBpdC4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogSGFuZGxlIGZ1bmN0aW9uIGZpZWxkcyBhbmQgc3RhdGljIGZpZWxkcworCWFuZCBiYXNldHlwZXMuICBIYW5kbGUgTUVUSE9EX1RZUEUgYW5kIFJFRkVSRU5DRV9UWVBFLgorCUFib3J0IG9uIHVuZXhwZWN0ZWQgdHJlZSBjb2RlLgorCShkYnhvdXRfYXJncyk6IE5ldyBmbiB0byBvdXRwdXQgcHJvdG90eXBlIGFyZyB0eXBlcy4KKwkoZXZlcnl3aGVyZSk6IFVzZSBJREVOVElGSUVSX0xFTkdUSCBpbnN0ZWFkIG9mIHN0cmxlbi4KKwkoZGJ4b3V0X3R5cGVfbmFtZSk6IENsZWFudXA7IGF2b2lkIHN0cmxlbi4KKworCSogbG9jYWwtYWxsb2MuYyAocmVnX2lzX3NldCk6IERvbid0IGNhbGwge3Bvc3RfLH1tYXJrX2xpZmUgZm9yIHBzZXVkb3MuCisKKwkqIHRyZWUuaCAoVFlQRV9CQVNFQ0xBU1NFUyk6IE5ldyBmaWVsZCBpbiB0eXBlIG5vZGVzLgorCisJKiBuczMyay5tZCAoaW5zdiBwYXR0ZXJucyk6IFdhcyBhZGp1c3RpbmcgdGhlIGFkZHJlc3Mgd3JvbmcuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEp1c3QgYSB3YXJuaW5nIGZvciBpbmxpbmUgdmFyYXJncyBmbi4KKworTW9uIEF1ZyAgOCAwODoxNjo0NiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChpbW1lZF9yZWFsX2NvbnN0XzIpOiBHdXRzIG9mIGNyZWF0aW5nIGEgQ09OU1RfRE9VQkxFLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IFVzZSB0aGF0IGZvciA2NC1iaXQgaW50IGNvbnN0YW50cy4KKworCSogbG9vcC5jIChpbnZhcmlhbnRfcCk6IERvbid0IGNoZWNrIHgtPnVuY2hhbmdpbmc7IGl0J3Mgbm90IHNhZmUuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IEhhbmRsZSBmbGFnX3ZvbGF0aWxlIGhlcmUKKwlzbyB0aGF0IGl0IHByb3BhZ2F0ZXMgdG8gY29tcG9uZW50X3JlZnMuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogTm8gbmVlZCB0byBoYW5kbGUgaXQgaGVyZS4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSwgZXhwYW5kX2lubGluZV9mdW5jdGlvbik6CisJU2V0IHVwIGluc25fbWFwIHRvIHJlY29yZCBtYXBwaW5nIG9mIG9sZCB1aWRzIHRvIGNvcGllZCBpbnNucy4KKwkoY29weV9mb3JfaW5saW5lLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IE1hcCAndScgcmVmcyB2aWEgaW5zbl9tYXAuCisKKwkqIGVtaXQtcnRsIChlbWl0X2xhYmVsLCBlbWl0X2JhcnJpZXIpOiBSZXR1cm4gd2hhdCB3YXMgZW1pdHRlZC4KKworCSogc2Rib3V0LmMgKHNkYm91dF9maWxlbmFtZSk6IFNwbGl0IG9mZiBmcm9tIHNkYm91dF9pbml0LgorCSogdG0tZW5jb3JlLmgsIHRtLTNiMS5oLCB0bS12YXh2LmgsIHRtLWF0dDM4Ni5oIChBU01fRklMRV9TVEFSVCk6CisJQ2FsbCBzZGJvdXRfZmlsZW5hbWUuCisKKwkqIHRvcGxldi5jOiBCZXR0ZXIgbWVzc2FnZXMgZm9yIGludmFsaWQgb3B0aW9ucy4KKworCSogdG0tbTY4ay5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBIYW5kbGUgbGFiZWxyZWYrYmFzZXJlZy4KKworCSogdG0tM2IxLmggKFBVVF9TREJfRElNKTogT3ZlcnJpZGUgc2Rib3V0J3MgZGVmaW5pdGlvbi4KKwkoQVNNX0ZPUk1BVF9QUklWQVRFX05BTUUpOiBPdmVycmlkZSB0bS1ocC4uLnMgZGVmaW5pdGlvbi4KKwkoUFVUX1NEQl9QTEFJTl9ERUYpOiBQcmVwZW5kIGB+JyB0byBzcGVjaWZpZWQgbmFtZS4KKwkoU0RCX0dFTkVSQVRFX0ZBS0UpOiBQcmVwZW5kIGB+Jy4KKworCSogZ2NjLmM6IEluY2x1ZGUgY29uZmlnLmggYmVmb3JlIG9ic3RhY2suaC4KKworU3VuIEF1ZyAgNyAxMToxNzo1NiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9kZWNsKTogRG8gbm90aGluZyB3aXRoIENPTlNUX0RFQ0wuCisJVHJlYXQgRlJJRU5EX0RFQ0xzIGxpa2UgdmFyaWFibGVzLgorCShsYXlvdXRfcmVjb3JkKTogSGFuZGxlIFZBUl9ERUNMcyBhbmQgRlVOQ1RJT05fREVDTHMgaW4gdGhlIGZpZWxkbGlzdC4KKwlIYW5kbGUgYmFzZXR5cGVzIChhbG1vc3QgbGlrZSBmaWVsZHMpLgorCShsYXlvdXRfdHlwZSk6IEhhbmRsZSBSRUZFUkVOQ0VfVFlQRSBhbmQgTUVUSE9EX1RZUEUuCisKKwkqIHRyZWUuYyAodGVtcF90cmVlX2NvbnMpOiBOZXcgZm4uCisJKGFycmF5X3R5cGVfbmVsdHMsIHNpbXBsZV9jc3RfZXF1YWwpOiBOZXcgZm5zLgorCShsdmFsdWVfcCk6IENBTExfRVhQUiBpcyBhbiBsdmFsdWUgaWYgaXQgcmV0dXJucyBSRUZFUkVOQ0VfVFlQRS4KKwkoKSBNYW5hZ2UgVFlQRV9SRUZFUkVOQ0VfVE8uCisJKFRZUEVfSEFTSF9TSVpFKTogQmlnZ2VyLgorCSh0eXBlX2xpc3RfZXF1YWwpOiBDb21wYXJlIHRoZSBUUkVFX1BVUlBPU0UgZmllbGRzLgorCShidWlsZF9yZWZlcmVuY2VfdHlwZSwgYnVpbGRfbWV0aG9kX3R5cGUpOiBOZXcgZm5zLgorCisJKiBzdG10LmMgKGJsb2NrX3N0YWNrKTogQWRkIGZpZWxkIGBjbGVhbnVwcycgdG8gZWFjaCBlbGVtZW50LgorCShleHBhbmRfe3N0YXJ0LGVuZH1fYmluZGluZ3MsIGV4cGFuZF9kZWNsKTogVXBkYXRlIHRoYXQgZmllbGQuCisJKHN0YWNrX2Jsb2NrX3N0YWNrKTogTm93IGluY2x1ZGVzIGJsb2NrcyB0aGF0IGhhdmUgY2xlYW51cHMuCisJKGdvdG9fZml4dXBfY2hhaW4pOiBBZGQgZmllbGQgYGNsZWFudXBfbGlzdF9saXN0Jy4KKwkoZXhwYW5kX2dvdG9faW50ZXJuYWwpOiBFeGVjdXRlIGNsZWFudXBzIGZvciBibG9ja3MgYmVpbmcgZXhpdGVkLgorCShleHBhbmRfZml4dXApOiBNYWtlIGEgZml4dXAgaWYgYW55IGJsb2NrIGhhcyBjbGVhbnVwcy4KKwkoZml4dXBfZ290b3MpOiBOZXcgYXJncyBDTEVBTlVQUyBhbmQgRE9OVF9KVU1QX0lOLgorCUV4ZWN1dGUgY2xlYW51cHMgZm9yIGJsb2NrcyBiZWluZyBleGl0ZWQsIG9yIGFkZCB0byBjbGVhbnVwX2xpc3RfbGlzdC4KKwkoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IE5ldyBhcmcgRE9OVF9KVU1QX0lOLiAgRXhlY3V0ZSBhbnkgY2xlYW51cHMuCisJKGV4cGFuZF9kZWNsKTogTmV3IGFyZyBDTEVBTlVQLgorCShleHBhbmRfY2xlYW51cHMsIGZpeHVwX2NsZWFudXBzKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGMtZGVjbC5jOiBDYWxscyB0byBleHBhbmRfZGVjbCBwYXNzIG5ldyBhcmcuCisJKiBjLXBhcnNlLnk6IENhbGxzIHRvIGV4cGFuZF9lbmRfYmluZGluZ3MgcGFzcyBuZXcgYXJnLgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBIYW5kbGUgSU5JVF9FWFBSLCBvciBiYXJlIFJFU1VMVF9ERUNMLgorCisJKiBzdG10LmMgKGNhc2Vfc3RhY2spOiBBZGQgZmllbGQgYGhhc19kZWZhdWx0JyB0byBlYWNoIGVsZW1lbnQuCisJKHB1c2hjYXNlLGV4cGFuZF9lbmRfY2FzZSk6IE1haW50YWluIGFuZCB1c2UgdGhhdCBmaWVsZC4KKworCSogc3RtdC5jIChwdXNoY2FzZSk6IEhhbmRsZSBSQU5HRV9FWFBSIGNhc2VzLgorCShwdXNoY2FzZV9yYW5nZSk6IENyZWF0ZSBSQU5HRV9FWFBSIGNhc2VzLgorCisJKiBmaW5hbC5jIChmaW5hbCk6IEFsd2F5cyBwYXNzIDMgYXJncyB0byBBU01fT1VUUFVUX0NBU0VfRU5ELgorCSogdG0tM2IxLmg6IERlbGV0ZSBvZmZlbmRpbmcgc3BhY2VzLgorCitGcmkgQXVnICA1IDE2OjE3OjE2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogRG9uJ3QgbWFrZSBmcCtyZWcrY29uc3QKKwl3aXRob3V0IGFuIGludGVybWVkaWF0ZSB0ZW1wb3JhcnkgcmVnLgorCisJKiBwcmludC10cmVlLmMgKGR1bXApOiBEb24ndCBwcmludCBhbiBpZGVudGlmaWVyJ3MgY2hhaW4uCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBUcmVhdCBgLmknIHN1ZmZpeCBsaWtlIGAuY28nLgorCisJKiBnY2MuYzogTmV3IGNvbmZpZyBtYWNybyBDQzFfU1BFQzogZXh0cmEgc3dpdGNoZXMgZm9yIGNjMS4KKwlNYWtlIGEgbmV3IHNwZWMgZm9yIGAuaScgZmlsZXMuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCwgZmluaXNoX2RlY2wpOiBEZWxldGUgZHVwbGljYXRlIHRlc3RzLgorCisJKiB2YXJhcmdzLmg6IE1heWJlIGluY2x1ZGUgdmEtc3BhcmMuaCBvciB2YS1zcHVyLmguCisJKiB2YS1zcGFyYy5oOiBOZXcgZmlsZS4KKwkqIHZhLXNwdXIuaDogcmVuYW1lZCBmaWxlLgorCisJKiB0cmVlLmggKHtUWVBFLERFQ0x9X0xBTkdfU1BFQ0lGSUMpOiBUeXBlcyBhbmQgZGVjbHMgY2FuIHBvaW50IHRvCisJbGFuZ3VhZ2Utc3BlY2lmaWMgc3RydWN0dXJlcyBjb250YWluaW5nIG90aGVyIGluZm8uCisJKiBwcmludC10cmVlLmMgKGR1bXApOiBIb29rcyBmb3IgcHJpbnRpbmcgdGhlIGxhbmd1YWdlLXNwZWNpZmljCisJZGF0YSBpbiB0eXBlcyBhbmQgZGVjbHMuCisKK1RodSBBdWcgIDQgMDg6NTQ6MzAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmRlZjogQWRkIHNvbWUgdHJlZSBjb2RlcyBmb3IgQysrLgorCisJKiBSZW5hbWUgZmlsZXM6IHBhcnNlLlt5aF0gLT4gYy1wYXJzZS5beWhdLCBkZWNsLmMgLT4gYy1kZWNsLmMsCisJdHlwZWNoZWNrLmMgLT4gYy10eXBlY2suYy4KKwlQYXJ0IG9mIHRyZWUuYyBzcGxpdCBvdXQgdG8gYy1jb252ZXJ0LmMuCisKKwkqIGV4cHIuYyAocHVzaF9ibG9jayk6IE5vIGxvbmdlciBzdGF0aWMuCisJKGV4cGFuZF9leHByKTogSGFuZGxlIFJFRkVSRU5DRV9FWFBSIGFuZCBJTklUX0VYUFIuCisJKGV4cGFuZF9jYWxsKTogVHVybiBhIE1FVEhPRF9UWVBFIHRvIGEgRlVOQ1RJT05fVFlQRS4KKwlUaGlzIGlzIHByb2JhYmx5IG5vdCBhbGwgdGhhdCBpcyByZXF1aXJlZC4KKworCSogcGFyc2UueSAoeXlsZXgpOiBVc2UgcC0+cmlkIHRvIGNoZWNrIGZvciBgc2lnbmVkJyBhbmQgYGlubGluZScuCisKKwkqIHRtLXNwYXJjLmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiB0eXBvLgorCisJKiBzcGFyYy5tZDogQWRkIGEgcGF0dGVybiBmb3IgYW5kY2MuCisJKGNtcHNmKTogQ2xvYmJlciByZWcgMzIgaW4gREZtb2RlLgorCShicmFuY2hlcyk6IFRoZXJlIGFyZSBubyB1bnNpZ25lZCBmbG9hdGluZyBicmFuY2hlczsgYWJvcnQuCisJKGJndCk6IENvcnJlY3QgbmFtZSBvZiBmbG9hdGluZyB2YXJpYW50LgorCShtb3Y/aSk6IExvYWQgc21hbGwgY29uc3RhbnRzIHZpYSBtb3YuCisJKG1vdmRmIGZvciBjb25zdGFudHMpOiBVc2UgbW92LCBub3QgYWRkLCB0byBtb3ZlIHJlZ3MuCisJKG1vdnNmLCBmbG9hdHNpKiwgZml4Kik6IFNpbXBsaWZ5IHJlZy10by1yZWctdmlhLW1lbSBtb3ZlIGdlbmVyYXRpb24uCisJKHRydW5jKik6IFVzZSBtb3YsIG5vdCBvciwgdG8gbW92ZSByZWdzLgorCShuZWdzaTIsIG9uZV9jbXBsc2kyKTogQXZvaWQgIm5lZyIgYW5kICJub3QiIGFzc2VtYmxlciBzeW50YXguCisJKGNhbGwuLi4pOiBHZW5lcmF0ZSAiY2FsbCIgaW5zbnM7IGhhbmRsZSAjLXJlZy1wYXJtcyB2YWx1ZS4KKwkqIERlZmluZSBzb21lIHBlZXBob2xlcyBmb3IgcmV0dXJuIGluc25zLgorCisJKiB0bS1zcGFyYy5oIChUQVJHRVRfU1VOX0FTTSk6IE5ldyB0YXJnZXQgZmxhZy4KKwkoVEFSR0VUX0RFRkFVTFQpOiBOb3cgMS4KKwkoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IE5vdyAxLgorCShTVEFSVElOR19GUkFNRV9PRkZTRVQpOiBOb3cgLTE2LgorCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBPbmx5IENPTlNUX0RPVUJMRXMgZmFpbC4KKwkoRlVOQ1RJT05fe1BST0xPR1VFLEVQSUxPR1VFfSk6IFJld3JpdHRlbi4KKworCSogb3V0cHV0LXNwYXJjLmMgKHNtYWxsX2ludCk6IFRlc3QgZm9yIGludCB0aGF0IG1vdiBjYW4gbG9hZC4KKwkoc2luZ2xlbW92ZV9zdHJpbmcpOiBVc2UgbW92LCBub3QgYWRkLgorCShvdXRwdXRfbW92ZV9kb3VibGUpOiBDaGFuZ2VzIGZvciBvdmVybGFwIGFuZCBmb3IgdXNlIG9mIGxkZCwgc3RkLgorCShvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBVc2UgbGRkLCBzdGQgd2hlbiBzYWZlLgorCShtYWtlX2YwX2NvbnRhaW5fMCk6IFNpbXBsaWZ5LgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFNvbWUgc3BlY2lhbCBDQUxMX0lOU04KKwloYW5kbGluZyBubyBsb25nZXIgbmVlZGVkIGR1ZSB0byBSRUdfRlVOQ1RJT05fVkFMVUVfUC4KKworCSogbTY4ay5tZCAobW92cWkpOiBDb25zdHJhaW50cyBhbGxvdyBtb3ZpbmcgYXJlZyB0byBhcmVnLgorCitXZWQgQXVnICAzIDA4OjI5OjMxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjI1IHJlbGVhc2VkLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IERvbid0IGxldCBNRU0gYmUgaW5saW5lX3RhcmdldC4KKworVHVlIEF1ZyAgMiAwOToxMzozNyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChJTlRFR1JBVEVfVEhSRVNIT0xEKTogTmV3IG1hY3JvLCBkZWZhdWx0IGRmbiBoZXJlLgorCShmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBVc2UgaXQuCisKKwkqIHJ0bC5oIChSRUdfRlVOQ1RJT05fVkFMVUVfUCk6IE5ldyBtYWNyby4KKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IHRoYXQgZmxhZyBpbiB0aGUgcmV0dXJuIHJlZy4KKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6CisJVGVzdCB0aGF0IGZsYWcgdG8gdGVzdCBmb3IgdGhlIHJldHVybiB2YWx1ZS4KKwkqIGV4cG1lZC5jIChleHBhbmRfZml4ZWRfYml0X2ZpZWxkLCBleHBhbmRfbXVsdCwgZXhwYW5kX2Rpdm1vZCk6IGRpdHRvLgorCUZVTkNUSU9OX1ZBTFVFX09VVEdPSU5HX1JFR05PX1Agbm8gbG9uZ2VyIG5lZWRlZC4KKworTW9uIEF1ZyAgMSAwMjo0NjowOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IElmIE5PX0ZVTkNUSU9OX0NTRSwKKwlkb24ndCBicmVhayBvdXQgY29uc3RhbnQgZmNuIGFkZHJlc3NlcyBoZXJlLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX2ZpeGVkX2JpdF9maWVsZCk6IFRlc3RzIG9mIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1AKKwl3ZXJlIGJhY2t3YXJkcy4KKworU3VuIEp1bCAzMSAxMzoxMDowNyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIHJlY29nLmMgKGluZGlyZWN0X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIG91dHB1dC1pMzg2LmMgKHByaW50X29wZXJhbmQpOiBkZWZpbmUgJSouIGVsaW1pbmF0ZSAlcy4KKwkoZnBfdG9wX2RlYWRfcCk6IEluIG5vbm9wdCBjYXNlLCBza2lwIHN0YWNrLWFkanVzdHMgd2hpbGUgbG9va2luZworCWZvciB0aGUgaW5zbiB0aGF0IHVzZXMgdGhlIGZ1bmN0aW9uIHZhbHVlLgorCisJKiB2YXJhc20uYyAodGV4dF9zZWN0aW9uLCBkYXRhX3NlY3Rpb24pOiBOZXcgZnVuY3Rpb25zLgorCVJlcGxhY2VkIGV4cGxpY2l0IHByaW50ZnMgZWxzZXdoZXJlIHdpdGggY2FsbHMgdG8gdGhlbS4KKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogVXNlIHRoZXNlIGZucy4KKwkqIHNkYm91dC5jIChzZGJvdXRfb25lX3R5cGUpOiBVc2UgdGV4dF9zZWN0aW9uLgorCSogdG0tYXR0Mzg2LmggKEFTTV9PVVRQVVRfTE9DQUwpOiBVc2UgZGF0YV9zZWN0aW9uLgorCisJKiBleHByLmMgKHByZXBhcmVfY2FsbF9hZGRyZXNzKTogRG9uJ3QgcGFzcyBjb25zdCB2aWEgcmVnIGlmIG5vIC1PLgorCisJKiB0bS1zcGFyYy5oIChGVU5DVElPTl97UFJPTE9HVUUsRVBJTE9HVUV9KSBSb3VuZCB0aGUgc2l6ZSBvZiBzYXZlZAorCXJlZ2lzdGVycy4gIEZpeCBidWcgY291bnRpbmcgc2F2ZWQgcmVnaXN0ZXJzLgorCisJKiB0bS1zcGFyYy5oIChBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogRGVmaW5lIHRoaXMgbWFjcm8uCisKKwkqIHRtLXNwYXJjLmggKERFRkFVTFRfU0lHTkVEX0NIQVIpOiBOb3cgMS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgYWxsb2NhIGNhc2UpOiBBZGRpbmcgc3RhY2sgb2Zmc2V0IG5lZWRzCisJc3BlY2lhbCBjb2RlIGlmIFRBUkdFVCBpcyBhIE1FTS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9pbml0KTogRGVmaW5lIEx0ZXh0OiBhZnRlciB0aGUgcmVmZXJlbmNlIHRvIGl0LgorCisJKiB0bS0zYjEuaCAoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogYHNob3J0IDAnIHRyaWdnZXJzIGFzc2VtYmxlciBidWc7CisJYHNob3J0IEwlbm4tTCVubicgc3VwcG9zZWRseSB3b3Jrcy4KKworU2F0IEp1bCAzMCAwMDoyNTo1MiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLm1kIChmbG9hdHNpZGYyKTogTWlub3IgY2hhbmdlIGluIG91dHB1dC4KKwkoZml4X3RydW5je3NmLGRmfXNpMik6IFNpbWlsYXIuCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBNaW5vciBjaGFuZ2UgaW4gb3V0cHV0LgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IERvbid0IGNvdW50IHN0YWNrIHNwYWNlIGZvciBzdHJ1Y3QgdmFsdWUKKwlhZGRyZXNzIGlmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIG9uZS4KKworCSogc2Rib3V0LmM6IE91dHB1dCAuZGltJ3MgYW5kIHRvdGFsIHNpemUgZm9yIGFycmF5cy4KKwlEZXRlY3QgYml0LWZpZWxkcyBwcm9wZXJseS4KKwlDaGFuZ2VkIGhhbmRsaW5nIG9mIHN0cnVjdHVyZSB0YWdzLgorCisJKiByZWxvYWQxLmMgKG5ld19zcGlsbF9yZWcpOiBjb3VudGVkX2Zvcl9ub25ncm91cHMgaXMgYSBuZXcgYXJnOworCXN0b3JlIDEgaW4gaXQgaWYgdGhpcyByZWcgaXMgbmVlZGVkIGZvciBtYXhfbm9uZ3JvdXBzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IEFsbG93IGluaGVyaXRhbmNlIG9mIERGbW9kZQorCWlmIGl0IG5lZWRzIG9ubHkgb25lIHJlZ2lzdGVyLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IERlbGV0ZSB0aGUgZGVhdGgtbm90ZSBmcm9tIHRoZQorCXN0b3JlLWluc24gb2YgYW4gaW5oZXJpdGVkIHJlbG9hZCBpZiBQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1AuCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IENyYXNoIGlmIFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MgaXMgTk9fUkVHUy4KKwkoZmluZF9yZWxvYWRzKTogU21hcnRlciBoYW5kbGluZyBvZiBmb3JjaW5nIENPTlNUX0RPVUJMRSBpbnRvIG1lbS4KKwlDaGVjayBQUkVGRVJSRURfUkVMT0FEX0NMQVNTICYgZG8gdGhpcyBpZiBpdCBzYXlzIE5PX1JFR1MuCisKKwkqIHJlbG9hZC5jIChzdWJzdF9pbmRleGVkX2FkZHJlc3MpOiBIYW5kbGUgY2FzZSB3aXRoIDIgcmVncworCWFuZCBubyBjb25zdGFudCB0ZXJtLgorCisJKiBsb2NhbC1hbGxvYy5jOiBOZXcgdmFyaWFibGUgcXR5X25fcmVmcywgc2V0IGZyb20gcmVnX25fcmVmcworCWFuZCB0ZXN0ZWQgaW4gcXR5X2NvbXBhcmV7LF8xfS4KKwkoY29tYmluZV9yZWdzKTogVXBkYXRlIHF0eV9uX3JlZnMuCisJVXBkYXRlIHF0eV9wcmVmZXJyZWRfb3Jfbm90aGluZyBtb3JlIGludGVsbGlnZW50bHkuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzLCByZWdfY2xhc3NfcmVjb3JkLCByZWNvcmRfYWRkcmVzc19yZWdzKToKKwlDb3VudCB0aGUgbnVtYmVyIG9mIHJlZnMgdG8gZWFjaCByZWcgYWxvbmcgd2l0aCB0aGUgY29zdHMsCisJYW5kIHVzZSBpdCB3aGVuIGNvbXB1dGluZyB0aGUgcHJlZmVycmVkX29yX25vdGhpbmcgZmxhZy4KKwkoQ2FuJ3QgdXNlIHJlZ19uX3JlZnMgc2luY2UgdGhhdCBpcyB3ZWlnaHRlZCBieSBsb29wIGRlcHRoKS4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9hbGxvYyk6IEVuYWJsZSB0ZXN0IG9mIE9WRVJMQVBQSU5HX1JFR05PX1AKKwlmb3Igc2V0dGluZyBub19nbG9iYWxfYWxsb2NfcmVncy4KKworCSogZXhwci5jIChwcmVwYXJlX2NhbGxfYWRkcmVzcyk6IFVzZSBmb3JjZV9yZWcsIHNvIGl0IGdldHMgYSBSRUdfRVFVSVYuCisKKwkqIG9wdGFicy5jIChjYW5fe2ZpeCxmbG9hdH1fcCk6IFJldHVybiBlbnVtIGluc25fY29kZSwgbm90IGEgZnVuY3Rpb24uCisJKGluaXRfe2ZpeCxmbG9hdH1fdGFiKTogU3RvcmUgZW51bSBpbnNuX2NvZGUncyBpbiBmaXh0YWIgYW5kIGZsb2F0dGFiLgorCShleHBhbmRfe2ZpeCxmbG9hdH0pOiBDaGFuZ2UgY2FsbHMgdG8gY2FuX3tmaXgsZmxvYXR9X3AuCisJQWxzbywgdXNlIGVtaXRfdW5vcF9pbnNuIHRvIG1ha2UgdGhlIGFjdHVhbCBpbnNucy4KKworRnJpIEp1bCAyOSAwMjo0Mjo0MCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCk6IElmIGRvbGxhcnNfaW5faWRlbnRpZmllcnMgaXMgMCwKKwlzZXQgZW50cmllcyBmb3IgYCQnIHRvIDAuCisJU2V0IGVudHJpZXMgdG8gMSByYXRoZXIgdGhhbiBpbmNyZW1lbnRpbmcgdGhlbS4KKworVHVlIEp1bCAyNiAxMToxNDoyMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IE1ha2UgU0RCIG91dHB1dCBvbmx5IGlmIHRvcC1sZXZlbC4KKworCSogbG9jYWwtYWxsb2MuYyAocmVnX2lzX3NldCk6IEFyZyB0byBtYXJrX2xpZmUgaXMgcmVnbm8sIG5vdCBxdHkuCisKKwkqIG91dHB1dC1uczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBOZXcgZmxhZyBTRVFVRU5UX0JBU0VfUkVHUworCSogdG0tc2VxdWVudC5oOiBEZWZpbmUgdGhhdCBmbGFnLgorCisJKiBNYWtlZmlsZTogYWRkIHNvbWUgbWlzc2luZyBkZXBzLgorCisJKiB0bS1lbmNvcmUuaCAoQVNNX0ZJTEVfU1RBUlQpOiBDaGFuZ2VkIHRvIGRvIG5vdGhpbmcuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfaW5pdCk6IEZpeCB0d28gZHVtYiBlcnJvcnMuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfZW5kX2VwaWxvZ3VlKTogTm8gbG9uZ2VyIHRha2VzIGFyZy4KKwlFeGFtaW5lIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCBoZXJlLCBub3QgaW4gY2FsbGVyLgorCSogZmluYWwuYzogQ2FsbCBjaGFuZ2VkLgorCitNb24gSnVsIDI1IDAxOjMyOjU0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IEhhbmRsZSBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTLgorCisJKiB0bS0zYjEuaCAoX19QVFJfVE9fSU5ULCBfX0lOVF9UT19QVFIpOiBEZWZpbmUgdGhlc2UsIHRvIGFsdGVyCisJcGFydHMgb2Ygb2JzdGFjay5oLgorCitTdW4gSnVsIDI0IDE3OjU2OjUzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogUGFkZGluZyBmb3IgYW4gYXJnIG1heSBub3cgZ28gYmVsb3cgb3IgYWJvdmUgaXQ7IG5ldyBtYWNybworCUZVTkNUSU9OX0FSR19QQURESU5HIGNhbiBub3cgY2hvb3NlIHdoaWNoLCBvciBjYW4gaW5oaWJpdCBwYWRkaW5nLgorCVRoaXMgbWFrZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQQ0MuCisJKiBleHByLmg6IERlZmF1bHQgZGVmaW5pdGlvbiBvZiB0aGF0IG1hY3JvLgorCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IFB1dCB0aGUgcGFkZGluZyBhYm92ZSBvciBiZWxvdy4KKwkoZXhwYW5kX2NhbGwpOiBEb24ndCBjb3VudCB0aGUgcGFkZGluZyBpZiBub25lIHdhbnRlZC4KKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogQWRqdXN0IHBhcm0gc3RhY2sgYWRkciBpZiBwYWRkZWQgYmVsb3cuCisJRG9uJ3QgY291bnQgdGhlIHBhZGRpbmcgaWYgbm9uZSB3YW50ZWQuCisJKiB0bS0zYjEuaDogRGVmaW5lIEZVTkNUSU9OX0FSR19QQURESU5HOiBubyBwYWRkaW5nIGZvciA+IDQgYnl0ZXMuCisKKwkqIGZpbmFsLmMgKGFsdGVyX3N1YnJlZyk6IE5vdyByZXR1cm5zIHRoZSBhbHRlcmVkIHZhbHVlCisJKGJ1dCBtYXkgc3RpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUpLgorCUhhbmRsZXMgKFNVQlJFRzpESSAoQ09OU1RfRE9VQkxFOkRGLi4uKSkgYnkgcmV0dXJuaW5nIHRoZSBDT05TVF9ET1VCTEUuCisKKwkqIG02OGsubWQgKERJbW9kZSBwdXNoKTogbm93IGFsbG93cyBgRicuCisJKiBuczMyay5tZCAobW92ZGkpOiBub3cgYWxsb3dzIGBGJy4KKworCSogdG0tbTY4ay5oIChGSVhfRlJBTUVfUE9JTlRFUl9BRERSRVNTKToKKwlIYW5kbGUgaW5kZXhlZCByZWZlcmVuY2VzIHRvIGZyYW1lIHBvaW50ZXIuCisJKiB0bS1pMzg2LmgsIHRtLW04OGsuaCwgdG0tc3BhcmMuaDogTGlrZXdpc2UuCisKKwkqIGNzZS5jIChwcmVkZWNpZGVfbG9vcF9lbnRyeSk6IE11c3Qgc2VhcmNoIGZvciB0aGUgbG9vcCB0b3AgbGFiZWwuCisKK1NhdCBKdWwgMjMgMDg6NTM6MDEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBwYXJzZS55ICh5eWxleCk6IHR5cG8gaW4gd2lkZSBzdHJpbmdzLgorCisJKiB0bS12YXh2LmgsIGNvbmZpZy12YXh2Lmg6IE5ldyBmaWxlcyBmb3Igc3lzViBvbiB2YXguCisKKwkqIGNvbmZpZy1zdW40Lmg6IElmIHNwYXJjIGFuZCBub3QgY29tcGlsaW5nIHdpdGggR0NDLCBpbmNsdWRlIGFsbG9jYS5oLgorCitGcmkgSnVsIDIyIDAyOjM4OjAyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IENIRUNLX0ZMT0FUX1ZBTFVFIGF0IHByb3BlciBwbGFjZS4KKworCSogdG0taHA5azMyMC5oICh7VEVYVCxEQVRBfV9TRUNUSU9OX0FTTV9PUCk6IFNob3VsZCBub3QgaW5jbHVkZSBhIHRhYi4KKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogRG9uJ3Qgb3V0cHV0IGEgdGFiIGJlZm9yZSB0aG9zZS4KKworCSogc2Rib3V0LmMgKFBVVF9TREJfRVBJTE9HVUVfRU5EKTogTmV3IG1hY3JvLgorCSogc2Rib3V0LmMgKHNkYm91dF9lbmRfZXBpbG9ndWUpOiBOZXcgZnVuY3Rpb24gdG8gb3V0cHV0IHRoZSBDX0VGQ04uCisJTGlrZSBmb3JtZXIgc2Rib3V0X21hcmtfZW5kX2Z1bmN0aW9uLiAgVXNlcyB0aGF0IG1hY3JvLgorCSogZmluYWwuYyAoZmluYWxfZW5kX2Z1bmN0aW9uKTogQ2FsbCB0aGF0IGZ1bmN0aW9uLgorCSogdG0tM2IxLmg6IE92ZXJyaWRlIFBVVF9TREJfRVBJTE9HVUVfRU5EIGxpa2UgdGhlIG90aGVyIFBVVF9TREIuLi4KKworCSogdG0tM2IxLmggKFBSSU5UX09QRVJBTkRfQUREUkVTUywgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCwKKwlBU01fT1VUUFVUX0NBU0Vfe0xBQkVMLEVORH0pOiBQdXQgYSAlIGluIG5hbWVzIG9mIGludGVybmFsIGxhYmVscy4KKwkoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMLCBBU01fT1VUUFVUX0FERFJfe1ZFQyxESUZGfV9FTFQpOgorCU5ldyBtYWNyb3MsIGZvciBzYW1lIHJlYXNvbi4KKwkoRlVOQ1RJT05fUFJPRklMRVIpOiBOZXcgbWFjcm8sIGZvciAlIGFuZCBhbHNvIHRvIHB1dCBhZGRyIGluIGEwLgorCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBGb3IgZmNuJ3MgZmlyc3QgbGluZSwgdXNlIGxpbmVubyAxLgorCSogc2Rib3V0LmMgKHNkYm91dF9lbmRfZnVuY3Rpb24pOiBDbGVhciBzZGJfYmVnaW5fZnVuY3Rpb25fbGluZQorCXNvIGNhbiByZWNvZ25pemUgZmlyc3QgbGluZSBvZiBuZXh0IGZ1bmN0aW9uLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X2luaXQpOiBPdXRwdXQgdGhlIC5maWxlIHBzZXVkbyBoZXJlLgorCSogdG0tM2IxLmgsIHRtLWF0dDM4Ni5oIChBU01fRklMRV9TVEFSVCk6IERvbid0IGRvIGl0IGhlcmUuCisKKwkqIHNkYm91dC5jIChQVVRfU0RCX1ZBTCk6IE91dHB1dCBsZWFkaW5nIHRhYiwgbGlrZSB0aGUgb3RoZXIgbWFjcm9zLgorCSogdG0tM2IxLmggKFBVVF9TREJfVkFMKTogTGlrZXdpc2UuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogQ2FzdCBlbnVtcyB0byBpbnQsIG5vdCBjaGFyLgorCSogdmFyYXNtLmMgKHJlY29yZF9jb25zdGFudCk6IExpa2V3aXNlLiAgQXZvaWRzIDNiMSBQQ0MgYnVnLgorCisJKiBkZWNsLmMgKHB1c2hkZWNsKTogQmV0dGVyIGNob2ljZSBvZiBlcnJvciBtZXNzYWdlIGZvciBleHRlcm4vc3RhdGljLgorCisJKiBlbWl0LXJ0bC5jOiBEbyBsb29rIGZvciBTVFJVQ1RfVkFMVUVfSU5DT01JTkdfUkVHTlVNLgorCitUaHUgSnVsIDIxIDAyOjEzOjAzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBDT05TVF9JTlQgY2FzZSBmYWlsZWQgdG8gYWRkIHRvIHByZXYuIHZhbHVlCisJb2YgSEFTSDsgd2FzIGluY29uc2lzdGVudCB3aXRoIGNzZV9pbnNuIG1lbSBhZGRyZXNzIGhhc2hpbmcuCisKKwkqIG02OGsubWQgKGRpdmlkZSBpbnNucyk6IEFsdGVybmF0ZSAzQjEgc3ludGF4IGZvciBgc3dhcCcgaW5zbi4KKworV2VkIEp1bCAyMCAxODoyNzoxMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQ6IEluIHNoaWZ0LWJ5LTI0IHBhdHRlcm5zLCByZWplY3RzIGF1dG9pbmNyZW1lbnQgbWVtcmVmcworCXNpbmNlIHRoZXkgYXJlIG1vZGUtZGVwZW5kZW50LgorCitUdWUgSnVsIDE5IDEzOjAxOjM4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IEhhbmRsZSAjaWRlbnQgYnkgd3JpdGluZyAuaWRlbnQgdG8gb3V0cHV0LgorCSogY2NjcC5jOiBEb24ndCBoYW5kbGUgI2lkZW50OyBkZWxldGUgSURFTlRfRElSRUNUSVZFIGNvbmRpdGlvbmFscy4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBJbiBjb21wYXJlcywgcHV0IGNvbnN0YW50IGFyZyBzZWNvbmQuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERlbGV0ZSBjb25kaXRpb25hbCBqdW1wIGlmIGZvbGxvd2VkIGJ5CisJYW4gdW5jb25kaXRpb25hbCBqdW1wIHRvIHRoZSBzYW1lIHBsYWNlLgorCitNb24gSnVsIDE4IDE3OjQ5OjEzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBOb3cgU1RSVUNUX1ZBTFVFX0lOQ09NSU5HIGlzIGFuCisJZXhwcmVzc2lvbiBmb3IgYW4gcnR4LiAgSXQgY2FuIG1ha2UgYSBNRU0uICBMaWtld2lzZSBTVFJVQ1RfVkFMVUUKKwlmb3Igb3V0Z29pbmcgc3RydWN0dXJlIHZhbHVlIGFkZHJlc3Nlcy4KKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBJZiBpbmNvbWluZyBzdHJ1Y3QgYWRkciBvbiBzdGFjaywgbGVhdmUgcm9vbS4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBJZiBvdXRnb2luZyBhZGRyIG9uIHN0YWNrLCBwdXNoIGl0IGxpa2UgYW4gYXJnLgorCisJKiBQUk9NT1RFX1BST1RPVFlQRVMgbWVhbnMgaWYgcHJvdG8gc2F5cyBgY2hhcicsIHBhc3MgYGludCcuCisJKiBkZWNsLmMgKGdldF9wYXJtX2luZm8pOiBBbHRlciBERUNMX0FSR19UWVBFIHRvIGRvIHRoaXMuCisJKiB0eXBlY2hlY2suYyAoYWN0dWFscGFyYW1ldGVybGlzdCk6IENvbnZlcnQgdmFsdWUgZm9yIHRoaXMuCisJKiB0bS1tNjhrLmg6IERlZmluZSBQUk9NT1RFX1BST1RPVFlQRVMuCisKK1N1biBKdWwgMTcgMTQ6MjU6NDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBwZWVwaG9sZSBjYW4gZGVsZXRlIGluc25zIGZvbGxvd2luZyBJTlNOLgorCVNldCBORVhUIGFmdGVyIHBlZXBob2xlLgorCisJKiBkZWNsLmMgKGZpbmlzaF9kZWNsKTogQWx3YXlzIHJlc3RhcnQgcGVybSBhbGxvYyBpZiBnbG9iYWwuCisKKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogV2hlbiBhIGZsb2F0IGlzIHBhc3NlZCBhcyBkb3VibGUsIHN0b3JlIHRoZQorCWZsb2F0IGluIGxvdy1udW1iZXJlZCB3b3JkLiAgQXZvaWRzIHRyb3VibGUgd2l0aCBwYXJtX21hcCBpbiBpbnRlZ3JhdGUuCisKKwkqIHZheC5tZDogTmV3IHBhdHRlcm4gZm9yIGRlY3JlbWVudCBhbmQgY29tcGFyZSBhZ2FpbnN0IC0xLgorCitTYXQgSnVsIDE2IDE0OjE4OjAwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZGVjbC5jIChwdXNoZGVjbCk6IElnbm9yZSBwcmV2aW91cyBkZWNsIGlmIGl0J3MgcmVhbGx5IGFuIGVycm9yX21hcmsuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2Nhc2UpOiBNYWtlIHN1cmUgY2FzZV9zdG10LnN0YXJ0IGlzIGEgTk9URS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEluIHRoZSBzaW1wbGlmaWNhdGlvbiBmb3IKKwkoc2V0ICh6ZXJvX2V4dHJhY3QgLi4uKSAoYW5kL29yL3hvciAoemVyb19leHRyYWN0IC4uLikgY29uc3QpKSwKKwlyZXF1aXJlIHNhbWUgbWVtb3J5IGxvY2F0aW9uIGluIGJvdGggZXh0cmFjdHMuCisKKwkqICozODYqOiBOZXcgZmlsZXMuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IFNhdmUgdGltZSBpbiBtZW1vcnkgYWRkcmVzcyBpZiBpdCBkaWRuJ3QgY2hhbmdlLgorCURvbid0IHJlcGxhY2UgY2hlYXBlciBleHByZXNzaW9uIHdpdGggY29zbGllciBvbmUuCisJKGNzZV9pbnNuKTogUmVlbmFibGUgZ2VuZXJhdGlvbiBvZiBSRUdfV0FTXzAuICBJdCB3YXNuJ3Qgb2Jzb2xldGUuCisKKwkqIGNjY3AuYzogYGlkZW50JyBoYXMgNSBsZXR0ZXJzLgorCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBTREIgY2FuJ3QgaGFuZGxlIG11bHRpcGxlIHNvdXJjZQorCWZpbGVzLCBzbyBpZ25vcmUgbGluZS1OT1RFcyBmb3Igb3RoZXIgZmlsZXMuCisKKwkqIGhhcmQtcmVnLXNldC5oOiBOZXcgdmFyIHJlZ19jbGFzc19zaXplICgjIHJlZ3MgaW4gdGhlIGNsYXNzKS4KKwkqIHJlZ2NsYXNzLmMgKGluaXRfcmVnX2NsYXNzKTogU2V0IGl0IHVwLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWYgYW4gZWFybHljbG9iYmVyIGlzIGluIGEgY2xhc3Mgb2Ygc2l6ZSAxCisJYXMgYW4gb3V0cHV0LCByZWxvYWQgaXQgYXMgaW5wdXQgaW5zdGVhZCBvZiBhcyBvdXRwdXQuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogSW1wcm92ZSBlbGltaW1hdGlvbiBvZiBzcGlsbGVkCisJcHNldWRvcyBtYWRlIGRlYWQgYnkgcmVsb2FkaW5nOiBpZiBwc2V1ZG8gaXMgbGltaXRlZCB0byBvbmUgYmxvY2sKKwlhbmQgdGhhdCBibG9jayBjb250YWlucyBqdXN0IHN0b3JlcywgZGVsZXRlIGFsbCB0aGUgc3RvcmVzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IHJlZ19oYXNfb3V0cHV0X3JlbG9hZCBpcyBub3cKKwlzdGF0aWMgYW5kIHN1cnZpdmVzIHRocm91Z2ggcmVsb2FkIHBhc3MuCisJKGZvcmdldF9vbGRfcmVsb2Fkcyk6IERvbid0IGNhbmNlbCBkYXRhIG9uIHNwaWxsZWQgcmVncyBvZiBvdXRwdXQKKwlyZWxvYWRzIG9mIHRoZSBpbnNuIGp1c3QgbWFkZS4KKworCSogc2Rib3V0LmMgKHNkYm91dF9vbmVfdHlwZSk6IEdvIHRvIC50ZXh0IGJlZm9yZSBkZWZpbmluZyBhIHR5cGUuCisJKHNkYm91dF9ibG9jayk6IFRlc3QgYWdhaW5zdCBkb19ibG9jayB3YXMgYmFja3dhcmRzLgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfZnVuY3Rpb24pOiBOZXcgYXJncyB0byBtYWtlIGEgTk9URSBmb3IgbGFzdCBsaW5lLgorCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBQYXNzIHRoZSBhcmdzLgorCisJKiBydGwuYyAobm9fbGFiZWxzX2JldHdlZW4pOiBOZXcgZnVuY3Rpb24uCisJKiB2YXgubWQgKG1vdnNpKTogQ2FsbCBpdC4KKworCSogcHJpbnQtdHJlZS5jIChkdW1wKTogRG9uJ3QgZm9sbG93IGNoYWluIG9mIGEgZGVjbC4KKworCSogcnRsLmMgKHZvbGF0aWxlX3JlZnNfcCk6IE1vdmVkIGZyb20gZmxvdy5jLgorCitGcmkgSnVsIDE1IDEzOjM2OjIwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogc2Rib3V0LmMgKFBVVF9TREIuLi4pOiBBbGxvdyBjb25maWcgdG8gb3ZlcnJpZGUgYW55IG9mIHRoZW0uCisJKiBzZGJvdXQuYyAoUFVUX1NEQl97QkxPQ0ssRlVOQ1RJT059X3tTVEFSVCxFTkR9KTogTmV3IG1hY3Jvcy4KKwkqIHRtLTNiMS5oOiBPdmVycmlkZSBhbGwgb2YgdGhlbS4KKwkqIHNkYm91dC5jIChTREJfR0VORVJBVEVfRkFLRSk6IE5ldyBtYWNybyB0byBjcmVhdGUgZHVtbXkgdGFnIG5hbWUuCisJKGdlbl9mYWtlX2xhYmVsKTogVXNlIFNEQl9HRU5FUkFURV9GQUtFLgorCSogdG0tM2IxLmg6IE92ZXJyaWRlIGl0cyBkZWZuLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X21hcmtfZnVuY3Rpb25fZW5kKTogVW51c2VkOyBkZWxldGVkLgorCisJKiB0bS0zYjEuaDogRGVmaW5lIFNEQl9ERUJVR0dJTkdfSU5GTy4KKworVGh1IEp1bCAxNCAwMTo1NToxNSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy1zdW52NC5oOiBOZXcgZmlsZSBmb3IgU3Vub3MgdmVyc2lvbiA0LgorCisJKiB0bS1zdW4zLmggKENQUF9TUEVDKTogRGVmaW5lIG1jNjgwMTAgb3IgbWM2ODAyMCwgZGVwZW5kaW5nLgorCitUdWUgSnVsIDEyIDE1OjMxOjMwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZml4dXAsIGV4cGFuZF9nb3RvX2ludGVybmFsKTogTmV3IGZ1bmN0aW9ucyB0bworCWVtaXQgYSBqdW1wIHRoYXQgY2FuIHJlc3RvcmUgdGhlIHN0YWNrIGxldmVsLCBldmVuIHdpdGhvdXQgdHJlZSBub2RlLgorCShleHBhbmRfbnVsbF9yZXR1cm4sIGV4cGFuZF9leGl0X2xvb3AsIGV0Yy4pOiBVc2UgZXhwYW5kX2dvdG9faW50ZXJuYWwuCisJKGV4cGFuZF9lbmRfZnVuY3Rpb24pOiBEbyBmaXh1cF9nb3RvcyBhZnRlciBlbWl0dGluZyByZXR1cm5fbGFiZWwuCisKKwkqIGNzZS5jIChwcmVkZWNpZGVfbG9vcF9lbnRyeSk6IEF2b2lkIHVzaW5nIEpVTVBfTEFCRUwuCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogQXZvaWQgdXNpbmcgSlVNUF9MQUJFTC4KKworCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IERlbGV0ZSBzcGVjaWFsIGNhc2UgZm9yIHN0YWNrLWFkanVzdCBpbnNucy4KKwkobGlmZV9hbmFseXNpcyk6IE1hcmsgdGhvc2UgaW5zbnMgd2l0aCBJTlNOX1ZPTEFUSUxFIGhlcmUuCisJKG1hcmtfdXNlZF9yZWdzKTogYSBTRVQgb2YgYSBoYXJkIHJlZywgaW4gYSB2b2xhdGlsZSBpbnNuLAorCWFsd2F5cyBtYWtlcyBpdHMgc291cmNlIGxpdmUuCisKK01vbiBKdWwgMTEgMTA6NDY6MjYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBuczMyay5tZCAoZmxvYXRxaWRmMik6IENvbW1lbnRlZCBvdXQgc2luY2UgYXNzZW1ibGVycyB3YXJuIGFib3V0IGl0LgorCitTdW4gSnVsIDEwIDExOjQ5OjIzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZGVjbC5jICh4cmVmX3RhZyk6IERlZmF1bHQgdGhlIFRZUEVfTU9ERSBvZiBlbnVtIHhyZWZzCisJdG8gYXZvaWQgbWFraW5nIE1FTSBhbmQgUkVHIHdpdGggVk9JRG1vZGUuCisKKwkqIHZheC5tZCAoY2FsbCk6IElmID4gMjU1IGFyZ3MsIHBvcCB0aGVtIGV4cGxpY2l0bHkuCisKK1NhdCBKdWwgIDkgMTA6NTM6NDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzeW1vdXQuYyAoc3ltb3V0X3R5cGVzKTogRml4IHVwIGZvcndhcmQgcmVmcyB0byBwcmV2aW91c2x5CisJdW5kZWZpbmVkIHN0cnVjdHVyZSB0eXBlcy4KKwkoZmlsdGVyX3VuZGVmaW5lZF90eXBlcyk6IE5ldyBmdW5jdGlvbi4KKwkoc3ltb3V0X2ZpbmlzaCwgc3ltb3V0X2Z1bmN0aW9uX2VuZCk6IE91dHB1dCBhbnkgbmV2ZXItZGVmaW5lZCBzdHJ1Y3RzLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBjYWxsIHN5bW91dF9mdW5jdGlvbl9lbmQuCisKKwkqIHBhcnNlLnk6IERvbid0IGRlY2xhcmUgZXJybm8gaWYgaXQncyBhIG1hY3JvLgorCisJKiB0bS1ocDlrMzIwIChGVU5DVElPTl9QUk9GSUxFUik6IFBhc3MgcHRyIGluIGEwLCBub3QgZDAuCisKKwkqIHR5cGVjaGVjay5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBGbHVzaCB1bm5lYyByZWN1cnNpdmUgY2FsbC4KKwkoYnVpbGRfY29uZF9leHByKTogQnVnIHRlc3RpbmcgemVyb25lc3Mgb2YgSUZFWFAgd2l0aCBUUkVFX0xJVEVSQUwuCisKKwkqIGNzZS5jIChmb2xkX2NjMCk6IENvbnN0YW50cyBub3QgQ09OU1RfSU5UIGFyZSBjZXJ0YWlubHkgbm9uemVyby4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEFERFJfRVhQUiBpcyBub3QgZXF1YWwgdG8gemVyby4KKworCSogY2NjcC5jIChtYWNyb2V4cGFuZCk6IERpc2FibGUgdGhlIG1hY3JvIGV2ZW4gaWYgdHJhZGl0aW9uYWwuCisJKHJlc2Nhbik6IEVycm9yIGlmIHVzZSBhIGRpc2FibGVkIG1hY3JvLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3Qgc3Vic3RpdHV0ZSBhIGRpZmZlcmVudCByZWcgaW50bworCWFuIGF1dG8taW5jcmVtZW50LiAgSGFuZGxlIG11bHRpcGxlIFJFR19JTkMgbm90ZXMgaW4gSTEgb3IgSTIuCisKKwkqIGRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogRG9uJ3QgcmV1c2Ugb2xkIGltcGxpY2l0IGRlY2wuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IEF2b2lkIHN5bnRheCBlcnIgaWYgbm8gREJYIGFuZCBubyBTREIuCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBsaWtld2lzZS4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogUExVUy9NSU5VU19FWFBSOiBpbiBjYXNlIG9mIGNhbmNlbGxhdGlvbiwKKwljb252ZXJ0IHJlc3VsdCB0byBvcmlnaW5hbCB0eXBlLgorCisJKiByZWdjbGFzcy5jIChyZWdfY2xhc3NfcmVjb3JkKTogQ2hhbmdlZCBhcmd1bWVudHMgaW5jbHVkZSBhZGRyZXNzCisJb2YgZW50aXJlIHZlY3RvciBvZiBjb25zdHJhaW50cy4KKworRnJpIEp1bCAgOCAwNzo1OTowMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRmluZCBncm91cHMgb2YgbW9yZSB0aGFuIDIgcmVnaXN0ZXJzLgorCitUaHUgSnVsICA3IDA4OjMzOjA3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IFR5cG8gYWRqdXN0aW5nIGFyZyBmb3IgYmNvcHkKKwlpZiBub3QgU1RBQ0tfR1JPV1NfRE9XTldBUkQuCisKKwkqIGdudWxpYi5jIChfY21wc2YyKTogVmFsdWUgaXMgaW50LCBub3QgU0ZWQUxVRS4KKworV2VkIEp1bCAgNiAxMTo1Mzo0NiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLWVuY29yZS5oLCB0bS0zYjEuaDogUmVwbGFjZSBBU01fRklMRV9TVEFSVDsgb3V0cHV0IGEgLmZpbGUuCisKKwkqICptODgqOiBOZXcgZmlsZXMgZm9yIE1vdG9yb2xhIDg4MDAwLiAgVGhleSBkb24ndCByZWFsbHkgd29yay4KKworVHVlIEp1bCAgNSAxNDo0MDowMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGNvbWJpbmVfcmVncyk6IERvbid0IHRpZSBhIHJlZyB0byBpdHNlbGYuCisKKwkqIGZpbnhpbmNsdWRlczogTWFrZSBhIHZhcmlhYmxlIExJQiBmb3IgdGhlIHRhcmdldCBkaXIuCisKKwkqIG02OGsubWQgKG1vdmhpLCBhZGRoaTMsIGFkZHNpMyk6IE1pY3JvLW9wdGltaXplIGNob2ljZSBvZiBhc20gaW5zbnMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBVc2UgbmV3IG1hY3JvcyBOT19ERUZFUl9QT1AsIE9LX0RFRkVSX1BPUAorCWluIHNldmVyYWwgcGxhY2VzLCB0byBrZWVwIHN0YWNrIHByZWRpY3RhYmxlLgorCitNb24gSnVsICA0IDA5OjUwOjE4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IEluY3JlYXNlIHRocmVzaG9sZCBzaXplLgorCisJKiBmbGFncy5oICh1c2VfZ2RiX2RieF9leHRlbnNpb25zKTogTmV3IHZhcmlhYmxlLgorCSogdG9wbGV2LmM6CisKKwkqIHNkYm91dC5jIChQVVRfU0RCX1RBRyk6IERlbGV0ZSBkdXBsaWNhdGUgZGVmbi4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEZvciBGSVhfVFJVTkNfRVhQUiB0byB1bnNpZ25lZCBzaG9ydC9jaGFyLAorCVJFQUxMWSBnbyB2aWEgc2lnbmVkIGludC4KKworCSogbG9vcC5jIChtYXlfdHJhcF9wKTogV2FzIGRldGVjdGluZyBmbG9hdGluZyBhcml0aG1ldGljIGluY29ycmVjdGx5LgorCisJKiB0bS1uZXdzODAwLmggKENQUF9QUkVERUZJTkVTKTogQWRkIHNvbnkgYW5kIHNvbnlfbmV3cy4KKworCSogcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IEF2b2lkIGluZmluaXRlIGxvb3AgYXQgZW9mLgorCitTYXQgSnVsICAyIDEwOjM1OjE3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjI0IHJlbGVhc2VkLgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBQcm9kdWNlIHByb3BlciBuby1vdXRwdXRzIGluc24uCisJKiByZWNvZy5jIChhc21fbm9wZXJhbmRzKTogRGV0ZWN0IG5vLW91dHB1dHMgaW5zbnMuCisJKGRlY29kZV9hc21fb3BlcmFuZHMpOiBMaWtld2lzZS4KKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBMaWtld2lzZSAoYWRkIGNhc2UgQVNNX09QRVJBTkRTOikuCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogVGVzdHMgb2YgcXR5X2NvbXBhcmUgd2VyZSBiYWNrd2FyZHMuCisKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IFR1cm4gb2ZmIGNvZGUgdGhhdCBmaW5kcyByZWdzIGxpdmUgYXQKKwlmdW5jdGlvbiBzdGFydCBhbmQgbWFya3MgdGhlbSBub3QgbG9jYWwgdG8gYW55IGJhc2ljIGJsb2NrLgorCisJKiBjc2UuYyAoaW5zZXJ0X3JlZ3MpOiBGaXggdHlwbyAoVU5JVFNfUEVSX1dPUkQpLgorCisJKiBjY2NwLmM6IERlZmluZSBtYXguCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBQdXQgZWFjaCBTQVZFX0VYUFIncyByZWcgb24gc2F2ZV9leHByX3JlZ3MsCisJaWYgbm90IG9wdGltaXppbmcuCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBNYXJrIGVhY2ggb2YgdGhvc2UgcmVncyBsaXZlCisJYXQgdGhlIGVuZCBhbmQgYWxzbyByZXRyb2FjdGl2ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorCisJKiBvdXRwdXQtdmF4LmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbiBmcm9tIG9sZCBtYWNyby4KKwkqIHRtLXZheC5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBDYWxsIHRoYXQgZnVuY3Rpb24uCisKKwkqIGNvbmZpZy12bXMuaDogSWYgbm90IHVuZGVyIEdOVSBDLCBkZWZpbmUgWF9PSywgZXRjLgorCisJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzXzEpOiBVc2UgKiB0byBjYWxsIEdFTkZVTi4KKwkoZXhwYW5kX2V4cHIpOiBDb21wYXJlIERFQ0xfRlVOQ1RJT05fQ09ERSBhZ2FpbnN0IGFuIGVudW0gY29uc3QuCisJKHByZWV4cGFuZF9jYWxscyk6IExpa2V3aXNlLgorCSogZ2VucmVjb2cuYyAod3JpdGVfdHJlZSk6IExpa2V3aXNlLgorCSogZmluYWwuYyAoZmluYWwpOiBVc2UgKiB0byBjYWxsIHRoZSBvdXRwdXQgZnVuY3Rpb24uCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBSZW5hbWUgYG5vc2hhcmUnIHRvIGBkb250X3NoYXJlJy4KKworCSogZ2Vub3V0cHV0LmMgKG91dHB1dF9lcGlsb2d1ZSk6IFB1dCBtb3JlIG5ld2xpbmVzIGluIGluc25fb3V0ZnVuLgorCSogZ2VuZW1pdCAoZ2VuX2V4cCk6IFB1dCBpbiBtb3JlIG5ld2xpbmVzLgorCitGcmkgSnVsICAxIDAwOjIzOjU3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2xvYmFsLWFsbG9jLmMgKGFsbG9jbm9fY29tcGFyZSk6IEF2b2lkIGNvbXBhcmlzb25zIG9mIGZsb2F0cworCXNpbmNlIHRoYXQgaXMgc2Vuc2l0aXZlIHRvIHJvdW5kb2ZmIGVycm9ycy4KKworVGh1IEp1biAzMCAwOToyNTo0MCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHNkYm91dC5jIChQVVRfU0RCX3tERUYsVEFHfSk6IFVzZSBBU01fT1VUUFVUX0xBQkVMUkVGLgorCShQVVRfU0RCX1BMQUlOX0RFRik6IE5ldyBuYW1lIGZvciBvbGQgZGVmbiBvZiBQVVRfU0RCX0RFRgorCShzZGJvdXRfb25lX3R5cGUpOiBVc2UgUFVUX1NEQl9QTEFJTl9ERUYgZm9yIGAuZW9zJy4KKworCSogdHJlZS5jIChhbGxvY2F0aW9uX3RlbXBvcmFyeV9wKTogTmV3IGZjbi4KKwkoYWxsX3R5cGVzX3Blcm1hbmVudCk6IE5ldyB2YXJpYWJsZS4KKwkobWFrZV9ub2RlKTogSWYgdGhhdCdzIHNldCwgbWFrZSBlYWNoIC4uLlRZUEUgbm9kZSBwZXJtYW5lbnQuCisJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSWYgdHJhZGl0aW9uYWwsIG1ha2UgZGVjbCBkYXRhIHBlcm1hbmVudC4KKwkoZmluaXNoX2RlY2wpOiBNYWtlIHRoZSBydGwgcGVybWFuZW50IHRvby4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogSWYgdHlwZSBpcyBwZXJtYW5lbnQsCisJbWFrZSBpdHMgbGF5b3V0IGRhdGEgcGVybWFuZW50IHRvby4KKworCSogY2NjcC5jOiBDaG9vc2UgQysrIG9yIEMgYXQgcnVuIHRpbWUgdmlhIHZhciBgY3BsdXNwbHVzJy4KKwlTZXBhcmF0ZSBjcGx1c3BsdXNfaW5jbHVkZV9kZWZhdWx0IGZyb20gaW5jbHVkZV9kZWZhdWx0LgorCUdldCBHTlUtc3BlY2lmaWMgaW5jbHVkZSBkaXJlY3RvcnkgbmFtZXMgZnJvbSBtYWNyb3MKKwlHQ0NfSU5DTFVERV9ESVIgYW5kIEdQTFVTUExVU19JTkNMVURFX0RJUi4KKwkobWFpbik6IEluaXRpYWxpemUgYmFzZWQgb24gQ1BMVVNQTFVTOyBgLSsnIHNldHMgaXQuCisJKiBNYWtlZmlsZTogU2V0ICpfSU5DTFVERV9ESVIgYmFzZWQgb24gJChsaWJkaXIpLgorCitUdWUgSnVuIDI4IDA5OjI1OjQ5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChjb3B5X25vZGUpOiBSb3VuZCBMRU5HVEggdXAgdG8gbXVsdGlwbGUgb2Ygc2l6ZW9mIChpbnQpLgorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogQXZvaWQgdXNpbmcgUFVTSF9ST1VORElORyBpZiBub3QgZGVmaW5lZC4KKworCSogc3BhcmMubWQgKGZsb2F0c2lzZjIpOiBJbnNlcnQgbWlzc2luZyBicmFjZS4KKwkobXVsc2kzKTogUmVwbGFjZSByZWdfbzBfcnR4LCByZWdfbzFfcnR4LgorCisJKiB0bS1zcGFyYy5oOiBEZWZpbmUgREJYX0RFQlVHR0lOR19JTkZPLgorCisJKiBwYXJzZS55ICh5eWxleCk6IElmIHRyYWRpdGlvbmFsLCBubyBlcnJvciBmb3Igb3V0LW9mLXJhbmdlIGZsb2F0LgorCisJKiBNYWtlZmlsZTogQ29tbWVudCBzYXlpbmcgaG93IHRvIGNvbXBpbGUgb24gYW4gQXBvbGxvLgorCisJKiB0bS1zcGFyYy5oIChBU01fRklMRV9TVEFSVCk6IFN3aXRjaCB0byBuZXcgY2FsbGluZyBjb252ZW50aW9uLgorCisJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ3JlYXRlIHR5cGUgbm9kZXMgZm9yIDY0LWJpdCBpbnRzLgorCShncm9rZGVjbGFyYXRvcik6IHVzZSB0aGVtIGZvciBgbG9uZyBsb25nJy4gIFdhcm4gb25seSBpZiBwZWRhbnRpYy4KKworCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogQWRkIG1pc3NpbmcgREltb2RlIGluc24gbmFtZXMuCisKKwkqIGV4cHIuYyAoZW1pdF9ibG9ja19tb3ZlLCBlbWl0X3B1c2hfaW5zbik6IFVzZSBtb3ZzdHJxaSBpZiBhcHByby4KKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiB1c2UgZXh0ZW5kc2lkaSBpZiBhcHByb3ByaWF0ZS4KKworCSogY2NjcC5jIChpbml0aWFsaXplX2J1aWx0aW5zKTogRG9uJ3QgaW5zdGFsbCBfX1NURENfXyBpZiB0cmFkaXRpb25hbC4KKwkobWFpbik6IENhbGwgaW5pdGlhbGl6ZV9idWlsdGlucyBhZnRlciBvcHRpb24gcHJvY2Vzc2luZy4KKworCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBTZXQgY3VycmVudF9mdW5jdGlvbl9kZWNsLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBUeXBvIGluIGF2b2lkaW5nIDMyLWJpdCBzaGlmdHMuCisKKwkqIGNjY3AuYzogQWRkIGZvcndhcmQtZGVjbC4KKworTW9uIEp1biAyNyAxODowNjo0MiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGhhcmQtcmVnLXNldC5oIChyZWdfYWxsb2Nfb3JkZXIpOiBOZXcgdmFyaWFibGUKKwliYXNlZCBvbiBSRUdfQUxMT0NfT1JERVIsIGEgbmV3IG1hY2hpbmUtZGVzY3JpcHRpb24gbWFjcm8uCisJKiByZWdjbGFzcy5jIChyZWdfYWxsb2Nfb3JkZXIpOiBEZWZpbmUgaXQuCisJKiBsb2NhbC1hbGxvYy5jIChmaW5kX2ZyZWVfcmVnKTogSGFuZGxlIHJlZ19hbGxvY19vcmRlci4KKwkqIGdsb2JhbC1hbGxvYy5jIChmaW5kX3JlZyk6IExpa2V3aXNlLgorCSogc3R1cGlkLmMgKHN0dXBpZF9maW5kX3JlZyk6IExpa2V3aXNlLgorCitTdW4gSnVuIDI2IDEwOjQ3OjQ3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjIzIHJlbGVhc2VkLgorCisJKiB0bS0zYjEuaDogRGVmaW5lIElERU5UX0RJUkVDVElWRS4KKworCSogdG0tZW5jb3JlLmg6IERlZmluZSBTREJfREVCVUdHSU5HX0lORk8uCisJRGVmaW5lIFNDQ1NfRElSRUNUSVZFIGFuZCBJREVOVF9ESVJFQ1RJVkUuCisKKwkqIG91dHB1dC1uczMyay5jOiBEZWNsIG9mIHBhcmVuX2Jhc2VfcmVnX3ByaW50ZWQgbXVzdCBiZSBvdXRzaWRlIGZjbnMuCisKKwkqIHRtLWVuY29yZS5oIChBU01fT1VUUFVUX0RPVUJMRSk6IERvIDBmLCBub3QgMGwuCisJKENQUF9QUkVERUZJTkVTKTogTm8gLURuczMyMDMyLgorCisJKiBzZGJvdXQuYzogSW5jbHVkZSBzeW1zLmgsIG5vdCBzdG9yY2xhc3MuaC4KKwkodW5uYW1lZF9zdHJ1Y3RfbWVtYmVyKTogRGVjbCB3YXMgbWlzc2luZy4KKwkoUFVUX1NEQl9JTlRfVkFMLCBQVVRfU0RCX1ZBTCk6IEZpeCB0eXBvcy4KKwkoc2Rib3V0X3R5cGVzLCBzZGJvdXRfb25lX3R5cGUsIHNkYm91dF9wYXJtcyk6IEZpeCB0eXBvcy4KKworCSogTWFrZWZpbGU6IEFkZCBmaWxlIHNkYm91dC5vLgorCUNoYW5nZWQgY29tbWVudHMgcGVydGFpbmluZyB0byBzeXNWLgorCU1ha2UgYSBzZXBhcmF0ZSB0YXJnZXQgYGRvYycgdG8gbWFrZSB0aGUgaW5mbyBmaWxlcy4KKworCSogbTY4ay5tZCAoYml0LWZpZWxkIGluc25zKTogVXNlIG5vbmltbWVkaWF0ZV9vcGVyYW5kIGZvciB0aGUgdGhpbmcKKwl0byBleHRyYWN0IGZyb20uCisJKiB2YXgubWQgKFFJbW9kZSBiaXQtZmllbGQgaW5zbnMpOiBMaWtld2lzZS4KKworCSogcmVjb2cuYyAobm9uaW1tZWRpYXRlX29wZXJhbmQpOiBBY2NlcHQgYW55IG5vbmNvbnN0IGdlbmVyYWwgb3BlcmFuZC4KKworU2F0IEp1biAyNSAwNzo1NDo0MiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChsb29rdXBfYXNfZnVuY3Rpb24pOiBhcmcgdG8gZXhwX2VxdWl2X3Agd2FzIG1pc3NpbmcuCisKK0ZyaSBKdW4gMjQgMDk6MTQ6NDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWNvZy5jIChtZW1vcnlfb3BlcmFuZCk6IEFsbG93IChzdWJyZWcgKG1lbS4uLikpLgorCitUaHUgSnVuIDIzIDA3OjM0OjA3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IENvbXB1dGUgbWluaW11bSB2YWx1ZSBsaWtlIG1heGltdW0uCisJSWYgbWluaW11bSBpcyBuZWdhdGl2ZSwgaW5zdGFsbCBpdCBpbiB0aGUgdHlwZSBhbmQgbWFrZSBpdCBzaWduZWQuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSBpcyBtaW5pbXVtLgorCShsYXlvdXRfdHlwZSk6IEEgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSBtdXN0IGJlIEJMS21vZGUgaWYKKwlhbnkgbWVtYmVyIGlzIEJMS21vZGUuICBUaGlzIGlzIHRvIHByZXZlbnQgcHV0dGluZyBpdCBpbiBhIHJlZ2lzdGVyLgorCShsYXlvdXRfZGVjbCk6IElmIGRlY2wncyB0eXBlIGlzIEJMS21vZGUsIHRoZSBkZWNsICptdXN0KiBiZSBCTEttb2RlLgorCisJKiBsb2NhbC1hbGxvYy5jIChmaW5kX2ZyZWVfcmVnKTogTmV2ZXIgYWxsb2NhdGUgdGhlIGZyYW1lIHBvaW50ZXIgcmVnLgorCisJKiB0bS1zZXF1ZW50LmggKFBSSU5UX09QRVJBTkQpOiBCdWcgaW4gU0Ztb2RlIENPTlNUX0RPVUJMRS4KKwkqIHRtLWVuY29yZS5oOiBMaWtld2lzZS4KKworCSogZmxvdy5jIChmbG93X2FuYWx5c2lzKTogQnVnIGluIG5fYmFzaWNfYmxvY2tzIGVycm9yIGNoZWNrLgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBFbWl0IG5vIGluc24gaWYgYW4gYXJnIGlzIGVycm9uZW91cy4KKworVHVlIEp1biAyMSAwODozNDoyNCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFdyaXRlIGJhY2sgKmxvYyBldmVuIGlmCisJc3Vic3RfcmVnX2VxdWl2cyBtYWtlcyBubyBjaGFuZ2UsIGluIGNhc2Ugc3Vic3RfaW5kZXhfYWRkcmVzcyBkaWQuCisKKwkqIGZsb3cuYzogRGVmaW5lIG1hY3JvcyBmb3IgLTEgYW5kIC0yIGFzIHZhbHVlcyBvZiByZWdfYmFzaWNfYmxvY2suCisJKG1hcmtfdXNlZF9yZWdzKTogQWRkIGFuIGBlbHNlJzsgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCShtYXJrX2xhYmVsX3JlZik6IEFib3J0IGlmIExBQkVMX1JFRiBkb2Vzbid0IGNvbnRhaW4gYSBDT0RFX0xBQkVMLgorCShmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEV4dHJhIGVycm9yIGNoZWNrLgorCisJKiBvdXRwdXQtbnMzMmsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogQ2hhbmdlcyBpbiBoYW5kbGluZyBvZgorCXJlZ2lzdGVyLWluZGlyZWN0LCBhbmQgb2YgaW5kZXhpbmcgYnkgc2IgcmVnaXN0ZXIuCisKK01vbiBKdW4gMjAgMDQ6NTU6MzggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGNvbGxlY3RfZGVmaW5pdGlvbik6IENvbXB1dGUgbmVlZGVkIHNwYWNlIG1vcmUgYWNjdXJhdGVseS4KKwlBYm9ydCBpZiB1c2UgbW9yZSBzcGFjZSB0aGFuIHdhcyBhbGxvY2F0ZWQuCisJKHJlc2NhbikgW1VTRV9DX0FMTE9DQV06IERvIGFsbG9jYSAoMCkgYWZ0ZXIgaGFuZGxlX2RpcmVjdGl2ZS4KKworCSogZ2VuZmxhZ3MuYyAoZ2VuX2luc24pOiBQdXQgcGFyZW5zIGFyb3VuZCBkZWZucyBvZiBIQVZFXy4uLiBtYWNyb3MuCisKK1N1biBKdW4gMTkgMDI6NTI6NTMgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogQ29uc2lkZXIgUEFSTV9CT1VOREFSWSB3aGVuIGNvbXBlbnNhdGluZworCWZvciBzaXplIG9mIGEgcHVzaGVkIGFyZyB0byBiY29weS4KKworU2F0IEp1biAxOCAwNzoyMDo1NCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE5ldyBmaWxlcyBzcGFyYy5tZCwgdG0tc3BhcmMuaCwgY29uZmlnLXNwYXJjLmgsIG91dHB1dC1zcGFyYy5jLgorCisJKiBmaW5hbC5jIChmaW5hbCk6IEFmdGVyIGFuIEFERFJfeyxESUZGX31WRUMsIGRvIEFTTV9PVVRQVVRfQ0FTRV9FTkQuCisJKiB0bS0zYjEuaDogRGVmaW5lIEFTTV9PVVRQVVRfQ0FTRV9FTkQuCisJKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IFJlZiB0aGUgY2FzZSB0YWJsZXMgdmlhIGFuIGludGVybWVkaWF0ZSBzeW1ib2wKKwlgTERubm4nIHdob3NlIGRlZi4gaXMgb3V0cHV0IGJ5IEFTTV9PVVRQVVRfQ0FTRV9FTkQuCisJKEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCk6IEFkZCBtaXNzaW5nIG5ld2xpbmUuCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IFJlamVjdCBhIE1FTSBjb250YWluaW5nIGFuIGF1dG9pbmNyZW1lbnQuCisKK0ZyaSBKdW4gMTcgMDY6NTg6MzcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBnZW5wZWVwLmMgKG1haW4pOiBXcml0ZSBgZXh0ZXJuJyBpbiB0aGUgZGVjbCBmb3IgYHBlZXBfb3BlcmFuZCcuCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogV2hlbiBhIGRlYWQgaW5zbiBoYXMgYSBSRUdfUkVUVkFMIG5vdGUsCisJY2FsbCBtYXJrX3NldF9yZWdzIGFueXdheSwgc28gdGhhdCBgc2lnbmlmaWNhbnQnIGlzIHVwZGF0ZWQuCisKKwkqIGp1bXAuYyAoZm9sbG93X2p1bXBzKTogTmV3IGFyZyBJR05PUkVfTE9PUFMuICBJZiAwLCBkb24ndCBmb2xsb3cKKwl0aGUgaW5zbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbG9vcCB0aGF0IGVudGVycyB0aGUgbG9vcDsgdGhpcyBhdm9pZHMKKwlpbnRlcmZlcmVuY2Ugd2l0aCBsb29wIG9wdGltaXplci4KKwkoanVtcF9vcHRpbWl6ZSwgdGVuc2lvbl92ZWN0b3JfbGFiZWxzKTogUGFzcyB0aGF0IGFyZy4KKworCSogbG9vcC5jIChsb29wX29wdGltaXplKTogTWVudGlvbiBpbnZhbGlkIG11bHRpcGxlLWVudHJ5IGxvb3BzIGluIGxvZy4KKworCSogbTY4ay5tZCAoZXh0diwgZXh0enYpOiBGaXggIyBvZiBhbHRlcm5hdGl2ZXMgbWlzbWF0Y2ggaW4gY29uc3RyYWludHMuCisKK1RodSBKdW4gMTYgMDM6MDY6NDggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogZ2VucmVjb2cuYyAoY2hhbmdlX3N0YXRlKTogV2FzIG1pc2hhbmRsaW5nIHByaW50aW5nIFhWRUNFWFAgaW5kaWNlcyAKKwlncmVhdGVyIHRoYW4gOS4KKworCSogY29tYmluZS5jIChzdWJzdCwgc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6IEF2b2lkIG1ha2luZyBTVUJSRUcKKwlvZiBhIG5vbi1SRUcuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBGb3IgRklYX1RSVU5DX0VYUFIgdG8gdW5zaWduZWQgc2hvcnQvY2hhciwKKwlnbyB2aWEgc2lnbmVkIGludC4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9maXgpOiBDb3B5IGhhcmRfbGliY2FsbF92YWx1ZSByZWcgb25seSBvbmNlLgorCisJKiByZWxvYWQxLmMgKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IEluaXQgYWxsIGVsZW1lbnRzCisJb2YgIHBvdGVudGlhbF9yZWxvYWRfcmVncyB0byAtMS4KKworCSogUHJldmVudCBnZW5lcmF0aW9uIG9mIChzZXQgKHJlZykgKHBsdXMgLi4uIChsYWJlbF9yZWYgLi4uKSkpLgorCSogZXhwbG93LmMgKG1lbW9yeV9hZGRyZXNzX25vZm9yY2UpOiBMaWtlIGBtZW1vcnlfYWRkcmVzcycgYnV0CisJbmV2ZXIgZm9yY2UgaXQgaW50byBhIHJlZ2lzdGVyLgorCSogZXhwci5jIChkb190YWJsZWp1bXApOiBVc2UgdGhhdC4KKwkqIG02OGsubWQgKGNhc2VzaSk6IFVzZSB0aGF0LgorCisJKiBydGwuaCAoc3RydWN0IHJ0eF9kZWYsIEdFVF9DT0RFLCBQVVRfQ09ERSk6IElmIFNIT1JUX0VOVU1fQlVHLAorCWRlZmluZSB0aGUgYGNvZGUnIGZpZWxkIGFzIGEgc2hvcnQuCisKK1dlZCBKdW4gMTUgMDE6MjU6NTcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoQ1BQX1NQRUMpOiBOZXcgc3BlYyBzZXQgYnkgY29uZmlnLmggZ2l2ZXMgZmxhZ3MgdG8gY3BwLgorCSogdG0tKi5oIGZvciBtNjhrOiBEZWZpbmUgQ1BQX1NQRUMgdG8gZGVmaW5lIF9fSEFWRV9GUFVfXyBvbgorCWFwcHJvcHJpYXRlIGNvbmRpdGlvbnMuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBTaW1wbGlmeSAobm90IChtaW51cyB4IDEpKSBhbmQgKG5lZyAobWludXMgeCB5KSkuCisKK01vbiBKdW4gMTMgMDI6MjI6NDMgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IEF2b2lkIGR1cGxpY2F0ZSBlcnJtc2cgaWYgaW5kZXgKKwlpcyBhbiBlcnJvci1tYXJrLgorCitTdW4gSnVuIDEyIDIzOjA0OjM5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgY29ybi1jaGV4LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IElmIC10cmFkaXRpb25hbCwgcXVvdGVzIGFyZW4ndCBzcGVjaWFsLgorCShyZXNjYW4pOiBBc3N1bWUgbmV3bGluZSBlbmRzIGEgc3RyaW5nIGNvbnN0YW50LgorCisJKiBjY2NwLmMsIGNleHAueTogTWFrZSBhbGwgZmNucyBub24tc3RhdGljOyBhZGQgc29tZSBmb3J3YXJkIGRlY2xzLgorCisJKiB2YXJpb3VzOiBhZGQgc3RhdGljIGZvcndhcmQtZGVjbHMgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLgorCitGcmkgSnVuIDEwIDAwOjI1OjE4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBXaGVuIHdyaXRpbmcgYmFjayBhbiBpbmNyZW1lbnRlZAorCXZhbHVlIChoYW5kbGluZyByZWxvYWRfaW5jKSwgd3JpdGUgYmFjayB0byB0aGUgcmVhbCBwbGFjZSwgbm90IHRvCisJT0xERVFVSVYgKGEgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgc2FtZSB2YWx1ZSkuCisKKwkqIHRtLW02OGsuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRG9uJ3QgZ2l2ZSBmb3JjZV9vcGVyYW5kIGEgdGFyZ2V0LgorCVRoaXMgY2FuIGNhdXNlIHRoZSB1c2Ugb2YgbXVsdGlwbGUgaW5zbnMgd2l0aCBzYW1lIG91dHB1dCByZWcsCisJd2hpY2ggY2FuIGNvbmZ1c2UgY3NlLgorCisJKiBsb29wLmMgKGNvbnNlY19zZXRzX2ludmFyaWFudF9wKToKKwlJZiBpbnZhcmlhbnRfcCBldmVyIHJldHVybnMgMiwgd2UgcmV0dXJuIDIuCisJTmV3IGFyZyBpcyAjIG9mIGNvbnNlY3V0aXZlIHNldHMgdG8gbG9vayBmb3IsCisJc2luY2UgdGhpcyBpbmZvIGlzIG5vIGxvbmdlciBpbiBuX3RpbWVzX3NldCBhdCBtb3ZlX21vdmFibGVzLgorCShzY2FuX2xvb3ApOiBJZiBjb25zZWNfc2V0c19pbnZhcmlhbnRfcCByZXR1cm5zIDIsIHNldCBtLT5jb25kLgorCShtb3ZlX21vdmFibGVzKTogY2hlY2sgY29uc2VjdXRpdmUgaW5zbnMgaWYgbS0+Y29uc2VjICYmIG0tPmNvbmQuCisKKwkqIHRtKi5oOiBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FIG5vdyB0YWtlcyAzcmQgYXJnLAorCXRoZSBGVU5DVElPTl9ERUNMIG5vZGUuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZnVuY3Rpb24pOiBQYXNzIHRoaXMgYXJnLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsLCBleHBhbmRfYnVpbHRpbiBbYWxsb2NhXSk6CisJSWYgU1RBQ0tfUE9JTlRFUl9PRkZTRVQgaXMgZGVmaW5lZCwgYWRkIGl0IHRvIHN0YWNrIHBvaW50ZXIgY29udGVudHMKKwliZWZvcmUgdXNpbmcgaXQgYXMgYWRkcmVzcyBvZiBhY3R1YWwgZGF0YSBvbiB0aGUgc3RhY2suCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogTGlrZXdpc2UuCisKKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogSWYgMXN0IHBhcm0gbmFtZWQgYF9fYnVpbHRpbl92YV9hbGlzdCcKKwljYW1lIGluIHJlZ3MsIHByZXRlbmQgaXQgY2FtZSBvbiBzdGFjay4KKwlIYW5kbGUgcHJldGVuZGluZyBhIEJMS21vZGUgdmFyIGNhbWUgb24gdGhlIHN0YWNrLgorCUlmIFJFR19QQVJNX1NUQUNLX1NMT1QsIGNvdW50IHN0YWNrIHNwYWNlIGZvciBlYWNoIHBhcm0KKwlldmVuIGlmIHRoZSBwYXJtIGNhbWUgaW4gYSByZWdpc3RlcjsgYW5kIHVzZSB0aGF0IHN0YWNrIHNwYWNlCisJaWYgdGhlIHBhcm0gbmVlZHMgdG8gYmUgYWRkcmVzc2FibGUgb3IgaXMgQkxLbW9kZS4KKwlSZWFycmFuZ2UgdG8gc2ltcGxpZnkgY29uZGl0aW9uYWxzLgorCitUaHUgSnVuICA5IDAxOjIxOjI5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYzoKKwlgcXR5Xy4uLicgdmVjdG9ycycgZWxlbWVudHMgZm9yIGhhcmQtcmVnLW51bWJlcnMgbm93IGFyZW4ndCB1c2VkLgorCWByZWdfcXR5JyBlbGVtZW50cyBmb3IgaGFyZC1yZWcgbnVtYmVycyBub3cgYXJlbid0IHVzZWQsCisJYW5kIHRoZSBlbGVtZW50IGZvciBhIHBzZXVkbyBpcyBuZXZlciBhIGhhcmQtcmVnIG51bWJlci4KKwkobG9jYWxfYWxsb2MpOiBObyBuZWVkIHRvIHJlc2V0IHRob3NlIGVsZW1lbnRzLgorCU5vIG5lZWQgdG8gcmVzZXQgZWxlbWVudHMgb3V0IG9mIHJhbmdlIG9mIHByZXYgYmxvY2sncyBORVhUX1FUWS4KKwkocmVnX2lzX2Jvcm4sIHJlZ19pc19zZXQsIHdpcGVfZGVhZF9yZWcpOgorCURpdmlkZSBsYWJvciBpbiBzYW1lIHdheSBmb3IgaGFyZCByZWdzIGFuZCBwc2V1ZG9zOworCXNpbXBsaWZ5IHVzaW5nIGZhY3QgdGhhdCBsb2NhbGl0eS10by1iYXNpYy1ibG9jayBoYXMgYmVlbiBwcmVjb21wdXRlZAorCWFuZCByZWNvcmRlZCBpbiByZWdfcXR5OyBhdm9pZCByZWZzIHRvIHJlZ19xdHlbSEFSRFJFR10uCisJKHJlZ19pc19ib3JuLCB3aXBlX2RlYWRfcmVncyk6IEJsb2NrLW51bWJlciBhcmcgbm8gbG9uZ2VyIG5lZWRlZC4KKworCSogbG9jYWwtYWxsb2MuYyAoY29tYmluZV9yZWdzKTogUmVtb3ZlIG9sZCBjb2RlIGZvciB0eWluZyBoYXJkIHJlZ3MKKwl0byBwc2V1ZG9zOyBncmVhdCBzaW1wbGlmaWNhdGlvbiByZXN1bHRzLgorCVVzZSBmaW5kX3JlZ25vX25vdGUsIG5vdCByZWdub19kZWFkX3AuCisKK1dlZCBKdW4gIDggMDA6MTg6MDQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoc3Vic3RfcmVnX2VxdWl2cyk6IFNldCBhIGZsYWcgaWYgYW55dGhpbmcgaXMgY2hhbmdlZC4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBDaGVjayB0aGF0IGZsYWcgdG8gYXZvaWQgZXh0cmEgd29yay4KKwlBbHNvIGNoZWNrIGVhcmx5IGZvciBzYWZlIHJlZytjb25zdCBhZGRyZXNzIGFuZCBhdm9pZCB3b3JrLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogVXNlIGxvb3BzIGluc3RlYWQgb2YgYmNvcHkuCisJQ2hlY2sgZWFybHkgZm9yIGluc24gd2l0aCBubyByZWFsIGNvbnN0cmFpbnRzLCBhbmQgcmV0dXJuLgorCUFsc28gY2hlY2sgZm9yIG1vdmUgZnJvbSBoYXJkIHJlZyB0byBoYXJkIHJlZyBhbmQgcmV0dXJuLgorCisJKiBjc2UuYyAoY2Fub25fcmVnKTogUmV3cml0ZSBmb3Igc3BlZWQ7IHVzZSBhIHN3aXRjaC4KKwkoY3NlX2luc24pOiBEb24ndCBjYWxsIGZpbmRfcmVnX25vdGUgaWYgUkVHX05PVEVTIGlzIDAuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFN0b3JlIG1vZGlmaWVkIFNFVF9TUkMgZXZlbiBpZiB0aGVyZSdzIGEgUkVHX0VRVUlWLgorCUluaGliaXRpb24gd2FzIG5lZWRlZCB3aGVuIHRoZSBTRVRfU1JDIHdhcyB0aGUgb25seSBwbGFjZSB0byBmaW5kIHRoZQorCWVxdWl2YWxlbnQgdmFsdWU7IG5vdyBpdCBpcyBpbiB0aGUgUkVHX0VRVUlWIG5vdGUuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IElmIE5JTlBVVFMgaXMgMCwgbWFrZSB2ZWMgb2Ygbm8gZWx0cy4KKwkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IERvbid0IGxvc2UgaWYgWFZFQyAoeCxpKSBpcyAwLgorCitUdWUgSnVuICA3IDAzOjUxOjI4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChhc3NpZ25fc3RhY2tfbG9jYWwpOiBJZiBiaWctZW5kaWFuIGFuZCBNT0RFIGlzIG5hcnJvdywKKwl0aGUgYnl0ZXMgYWN0dWFsbHkgdXNlZCBhcmUgdGhlIGxlYXN0IHNpZ25pZmljYW50LgorCisJKiBwYXJzZS55IChza2lwX3doaXRlX3NwYWNlKTogQWNjZXB0IGNoYXIgYXMgYXJnOyBsZXQgY2FsbGVyIHJlYWQgaXQuCisJKHl5bGV4KTogQ2hhbmdlIGNhbGwuCisJKGNoZWNrX25ld2xpbmUpOiBSZXR1cm4gMXN0IG5vbndoaXRlIGNoYXIgYWZ0ZXIgc2tpcHBpbmcgbGluZXMuCisJKHNraXBfd2hpdGVfc3BhY2UpOiBDaGFuZ2UgY2FsbC4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDaGFuZ2UgY2FsbC4KKworCSogZ2NjLmM6IFBhc3MgLXRyYWRpdGlvbmFsIHRvIGNjMS4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogUmV0dXJuIHZlcnkgZWFybHkgZm9yIChzZXQgKHJlZykgKGNhbGwuLi4pKS4KKwlNYWlubHkgdG8gc2F2ZSB0aW1lLgorCShjc2UtaW5zbikgT2xkIGNvZGUgdG8gYWRkIFJFR19XQVNfMCBub3RlIHdhc3RlZCB0aW1lIGJ1dCBkaWQgbm90aGluZy4KKworCSogZXhwci5jIChjbGVhcl9wZW5kaW5nX3N0YWNrX2FkanVzdCk6IFJlYWxseSBkbyBjbGVhciBpdCwKKwlpZiBjdXJyZW50IGZjbiBkb2Vzbid0IHdhbnQgdG8gYmUgaW5saW5lLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBTcGVlZHVwOiBpbnN0ZWFkIG9mIHNhZmVfaGFzaCwgdXNlIGNhbm9uX2hhc2gKKwlvciBIQVNIUkVHLgorCitNb24gSnVuICA2IDIxOjQ3OjIzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChydHhfcmVudW1iZXJlZF9lcXVhbF9wKTogUmVqZWN0IEFERFJfVkVDIGZhc3QuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IElnbm9yZSBhIFJFR19FUVVJViBvciBSRUdfRVFVQUwgbm90ZSBpZiB0aGUKKwllcXVpdmFsZW50IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBTRVRfU1JDIG9mIHRoZSBpbnNuLgorCisJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXMpOiBEb24ndCBjYWxsIHZvbGF0aWxlX3JlZnNfcCBmb3IgYSBDQUxMX0lOU047CisJanVzdCBhc3N1bWUgdmFsdWUgaXMgMS4KKwkocHJvcGFnYXRlX2Jsb2NrKTogRG9uJ3QgY2FsbCBtYXJrX3t1c2VkLHNldH1fcmVncyBmb3IgYSBzdGFjay1wb3AKKwlzaW5jZSBpZiBpdCBpc24ndCBkZWFkIGl0IGhhcyBubyBlZmZlY3Qgb24gYW55IHVzZWZ1bCBsaWZlIGRhdGEuCisJKG1hcmtfc2V0XzEpOiBSZXR1cm4gcXVpY2tseSBpZiBzZXR0aW5nIHN0YWNrLXB0ciwgYW5kIGFsbW9zdCBhcworCXF1aWNrbHkgaWYgc2V0dGluZyBhbnkgaGFyZCByZWcuCisJKG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UgZm9yIHJlZnMuCisJQWxzbyBkb24ndCBzY2FuIHRoZSB2ZWN0b3Igb2YgYW4gQUREUl9WRUMgb3IgQUREUl9ESUZGX1ZFQy4KKwkodm9sYXRpbGVfcmVmc19wKTogTGlrZXdpc2UuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnQpOiBEaXNjYXJkIE5PUF9FWFBSIGFuZCBDT05WRVJUX0VYUFIKKwlpbiBpbnRlZ2VyIGNhc2UgKHRoZXkgd2VyZSBmb3IgY2FzdGluZyBhIHBvaW50ZXIpLgorCisJKiBwYXJzZS55IChjb21wc3RtdF9vcl9lcnJvcik6IFBhcnNlIGEgY29tcHN0bXQgYWZ0ZXIgaWdub3JpbmcgZXJyb3IuCisJVXNlIHRoaXMgZm9yIGZjdG4gYm9keSBzbyB0aGF0IGFuIGVycm9yIGFmdGVyIHN0b3JlX3Bhcm1fZGVjbHMKKwl3b24ndCByZWNvdmVyIHRvIHhkZWNscyBhbmQgY2FsbCBzdG9yZV9wYXJtX2RlY2xzIGFnYWluLgorCVR5cGljYWwgY2F1c2Ugd2FzIG1pc3Npbmcgc2VtaSBhdCBlbmQgb2YgbGFzdCBwYXJtZGVjbC4KKworCSogcGFyc2UueTogQWRkIG1pc3Npbmcgc2VtaWNvbG9ucyBpbiBhY3Rpb25zLgorCSh5eWxleCk6IERvbid0IHVzZSB5eWxsb2MuCisKK1N1biBKdW4gIDUgMTY6MTQ6NDAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0eXBlY2hlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogQ2hlY2sgYXJnIHR5cGVzIGhlcmUsIHRvIG1ha2UKKwllcnJvciBtZXNzYWdlIG1vcmUgYWNjdXJhdGUgKG5vdCBhYm91dCAiYWRkaXRpb24iKS4KKworVGh1IEp1biAgMiAwMjo0MTo0MCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHJpY2Uta3Jpc3BpZXMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChjb2xsZWN0X2V4cGFuc2lvbik6IGAjJyBpc24ndCBzcGVjaWFsIGlmIC10cmFkaXRpb25hbC4KKworCSogZGJ4b3V0LmMgKGRieG91dF9wYXJtcyk6IERvbid0IG91dHB1dCBhIHJlZ3Bhcm0gc3ltYm9sCisJdW5sZXNzIHRoZSBwYXJtIGdvdCBhIGhhcmQgcmVnIGFzc2lnbmVkLgorCisJKiB0bS1lbmNvcmUuaCAoQVNNX09VVFBVVF9ET1VCTEUpOiBVc2UgMGYuLi4gbm90IDBkLi4uCisKKwkqIHRtLXZheC5oIChDSEVDS19GTE9BVF9WQUxVRSk6IERlZmluZSB0aGlzLgorCitXZWQgSnVuICAxIDE3OjEzOjAwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEhhdmUgc2VxdWVuY2UgcG9pbnRzIGJldHdlZW4gYXJncy4KKworVHVlIE1heSAzMSAwMDoyNzowNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9maXhlZF9iaXRfZmllbGQpOiBBdm9pZCBzaGlmdGluZyBieSAzMi4KKwkqIGNzZS5jIChmb2xkX3J0eCk6CisJKiBzeW1vdXQuYyAoc3VicmFuZ2VfcCk6ICBsaWtld2lzZS4KKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBJZiBvcGVyYW5kcyAxIGFuZCAyIGNvbW11dGUsCisJdHJ5IHR5aW5nIG91dHB1dCB0byBvcGVyYW5kIDIgaWYgb3BlcmFuZCAxIHdvbid0IGRvLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogUGFzcyBtYWluX2lucHV0X2ZpbGUgdG8gc3ltb3V0X2luaXQuCisKKwkqIHRyZWUuYyAoYnVpbGRfcmVhbCwgYnVpbGRfcmVhbF9mcm9tX2ludF9jc3QpOgorCUNhbGwgQ0hFQ0tfRkxPQVRfVkFMVUUgaWYgaXQncyBkZWZpbmVkLCB0byByZXBvcnQgb3V0LW9mLXJhbmdlIHZhbHVlcy4KKworCSogdHJlZS5jIChidWlsZF9yZWFsLCBidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IE5ldyAxc3QgYXJnIFRZUEUuCisJKiBwYXJzZS55ICh5eWxleCk6IFBhc3MgdGhpcyBhcmc7IHJlcXVpcmVzIHBhcnNpbmcgc3VmZml4ZXMgZmlyc3QuCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNvbWJpbmUsIGZvbGRfY29udmVydCk6IFBhc3MgdGhpcyBhcmcuCisJSGFuZGxpbmcgb2YgZmxvYXQgYmlub3BzIGluIGBjb21iaW5lJyBzaW1wbGlmaWVkLgorCisJKiB0bS1lbmNvcmUuaCAoQ1BQX1BSRURFRklORVMpOiBSZW1vdmUgLURlbmNvcmUgc2luY2UgQ0MgbGFja3MgaXQuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfbGluZSk6IExldCBBU01fT1VUUFVUX1NPVVJDRV9MSU5FCisJYmUgdXNlZCBmb3IgU0RCIGFsc28uCisKK01vbiBNYXkgMzAgMDA6MjE6MTUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoaW5zZXJ0KTogV2FzIGluc2VydGluZyBpbiB3cm9uZyBwbGFjZSBpbiBsaXN0LgorCShleHBfZXF1aXZfcCk6IFdhcyBmYWlsaW5nIHRvIGNoZWNrIHZhbGlkaXR5IHdoZW4geCA9PSB5LgorCisJKiB0cmVlLmMgKGJ1aWxkX3BvaW50ZXJfdHlwZSk6IEhhbmRsZSBzYXZlYWJsZV9vYnN0YWNrCisJbGlrZSBjdXJyZW50X29ic3RhY2suCisKKwkqIGRlY2wuYyAoZmluaXNoX2RlY2wpOiBFcnJvciBpbiB0ZXN0IGZvciB6ZXJvLXNpemUgYXJyYXkgd2FybmluZy4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogTmV3IGFyZyBNT0RFIHNwZWNpZmllcyBtb2RlIGluIHdoaWNoCisJYW4gZXF1aXZhbGVudCB2YWx1ZSBpcyBuZWVkZWQuICBFcXVpdmFsZW5jZSBtdXN0IGJlIGdvb2QgaW4gdGhhdCBtb2RlLgorCUluIGFkZGl0aW9uLCBub3RpY2Ugb3ZlcmxhcCB3aXRoIG11bHRpd29yZCByZWdpc3RlciBtb2Rlcy4KKwlTaW1wbGlmeSwga25vd2luZyB0aGF0IHJlZ2lzdGVycyBoYXZlIGFscmVhZHkgYmVlbiByZW51bWJlcmVkLgorCUl0IHdhcyBpbnZhbGlkYXRpbmcgbWVtb3J5LWdvYWxzIHRvbyBlYXNpbHk7IHNldHRpbmcgYSByZWcKKwlvbmx5IGludmFsaWRhdGVzIG1lbW9yeS1nb2FsIGlmIGl0cyBhZGRyZXNzIHZhcmllcy4KKwkqIHJlbG9hZC5jLCByZWxvYWQxLmMsIGp1bXAuYzogQ2FsbHMgcGFzcyB0aGUgbmV3IGFyZ3VtZW50LgorCisJKiBjY2NwLmM6IEZvciBjb3JyZWN0IEFOU0ksIG11c3QgcmVqZWN0IGAkJyBpbiBpZGVudGlmaWVycy4KKwkoZG9sbGFyc19pbl9pZGVudCk6IFZhcmlhYmxlIHNheXMgd2hldGhlciB0byBhbGxvdyB0aGVtLgorCShyZXNjYW4pOiBIYW5kbGUgYCQnIGFzIHJhbmRvbWNoYXIgaWYgdGhhdCdzIDAuCisJKG1haW4pOiBkb2xsYXJzX2luX2lkZW50IGlzIHNldCB0byAwIGJ5IC0kLCB0byAxIGJ5IC10cmFkaXRpb25hbC4KKwkocmVzY2FuLCBkb19kZWZpbmUpOiBEZWxldGUgZm9ybWVyIHBlZGFudGljIHdhcm5pbmdzIGZvciBgJCcuCisJKGluaXRpYWxpemVfY2hhcl9zeW50YXgsIGluaXRpYWxpemVfYnVpbHRpbnMpOiBJbml0cyBzcGxpdCB0byB0d28KKwlmdW5jdGlvbnM7IGZvcm1lciBpcyBjYWxsZWQgYWZ0ZXIgb3B0aW9ucyBhcmUgc2Nhbm5lZAorCXNvIGAkJyBpcyBpbiBpc19pZGNoYXIgY29uZGl0aW9uYWxseS4KKwkqIGdjYy5jOiBGb3IgLWFuc2ksIHBhc3MgLSQgdG8gY2NjcC4KKwkqIHRvcGxldi5jLCBmbGFncy5oOiBEZWZpbmUgZG9sbGFyc19pbl9pZGVudC4KKwkqIHBhcnNlLnkgKHl5bGV4KTogVHJlYXQgJCBhcyBwdW5jdHVhdGlvbiB1bmxlc3MgZG9sbGFyc19pbl9pZGVudC4KKwlEZWxldGUgb2xkIHBlZGFudGljIHdhcm5pbmcgYWJvdXQgJC4KKwkqIHRtLXZtcy5oOiBEZWZpbmUgRE9MTEFSU19JTl9JREVOVElGSUVSUyBhcyAxLgorCisJKiBjY2NwLmMgKHJlc2Nhbik6IFByZXByb2Nlc3NpbmcgbnVtYmVycyBjYW4gaGF2ZSBzaWducywgYWZ0ZXIgYGUnLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEFib3J0LCBkb24ndCByZXR1cm4gZmFpbHVyZSwKKwlpZiBtYXhfcmVnbm8gaXMgdG9vIGxvdy4gIEkgYmVsaWV2ZSB0aGlzIGNhbid0IGhhcHBlbi4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOgorCUZvciBvcmRlcmVkIGNvbXBhcmlzb25zLCBubyBwZWRhbnRpYyB3YXJuaW5nIGFib3V0IHZvaWQgKi4KKwlGb3IgTUFYLCBNSU4sIGRpdHRvLCBhbmQgYWxzbyBkb24ndCBhbGxvdyBwb2ludGVyIHZzIDAuCisKKwkqIHR5cGVjaGVjay5jIChidWlsZF91bmFyeV9vcCk6IERvbid0IGFsbG93IHBvaW50ZXIgZm9yICsuCisKKwkqIHR5cGVjaGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogCisJQWRkIG1pc3Npbmcgd2FybmluZyBmb3IJY2FzZSBvZiB1bnJlbGF0ZWQgcG9pbnRlciB0eXBlcy4KKwlDaGFuZ2UgY3JpdGVyaWEgZm9yIG5ldyBBTlNJIEMgZHJhZnQuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBEb24ndCBzZXQgdW51c2VkIHRhcmdldF9pc19ub3RfYW5fb3BlcmFuZC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkX2NvbnZlcnQpOiBEb24ndCBzZXQgdW51c2VkIGlucHJlYywgb3V0cHJlYy4KKworCSogZW1pdC1ydGwuYywgcGFyc2UueTogRGVsZXRlIHVudXNlZCB2YXIuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGFkZF92Y19zaXplcyk6IFVudXNlZCBmdW5jdGlvbiBkZWxldGVkLgorCSogbG9vcC5jIChjb25zdGFudF9oaWdoX2J5dGVzKTogI2lmIDAgdGhpcyB1bnVzZWQgZnVuY3Rpb24uCisKKwkqIGdjYy5jIChmYXRhbCk6IEFkZCBtaXNzaW5nIGFyZyB0byBkZWxldGVfdGVtcF9maWxlcy4KKworCSogY2NjcC5jIChkdW1wX2RlZm5fMSk6IEFkZCBtaXNzaW5nIGFyZyB0byBza2lwX3F1b3RlZF9zdHJpbmcuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBJZiBjb25zdHJhaW50cyBkb24ndCBmaXQgaW4gYW4gYGFzbScsCisJcHJpbnQgZXJyb3IgaW5zdGVhZCBvZiBhYm9ydGluZy4KKworCSogcmVnY2xhc3MuYyAocmVnX2NsYXNzX3JlY29yZCk6IElnbm9yZSBgJicgaW4gY29uc3RyYWludC4KKworU3VuIE1heSAyOSAwMDoyMDoyMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlOiBSdW4gcmFubGliIG9ubHkgaWYgL3Vzci9iaW4vcmFubGliIGV4aXN0cy4KKwlBZGQgY29tbWVudCBzYXlpbmcgd2hhdCB0byBkbyBvbiBzeXN0ZW0gVi4KKworCSogdHJlZS5jIChzdXNwZW5kX21vbWVudGFyeSk6IFN3aXRjaCB0byB0aGUgc2F2ZWFibGVfb2JzdGFjaworCWZvciB0aGUgc2FrZSBvZiBpbmxpbmUgZnVuY3Rpb25zLgorCisJKiBmbGFncy5oIChlbnVtIGRlYnVnZ2VyKTogTmV3IGVudW0gZm9yIHdyaXRlX3N5bWJvbHMuCisJKiB0b3BsZXYuYywgdmFyYXNtLmMsIGZpbmFsLmM6IFVzZSB0aGUgZW51bSBjb25zdGFudHMgd2hlcmUgYXBwcm8uCisJQWRkIGNhbGxzIHRvIHNkYm91dCBwYXJhbGxlbGluZyB0aGUgY2FsbHMgdG8gZGJ4b3V0OworCXB1dCBlYWNoIGluIHRoZSBhcHByb3ByaWF0ZSBjb25kaXRpb25hbCB7U0RCLERCWH1fREVCVUdHSU5HX0lORk8uCisKKwkqIHRvcGxldi5jIChtYWluKTogRGVsZXRlIC1ub3JlZyBvcHRpb247IGl0J3Mgbm93IHRoZSBkZWZhdWx0LgorCU1ha2UgLU8gYW4gYWxpYXMgZm9yIC1vcHQuICBSZW5hbWUgLWcgdG8gLWdnLiAgLWcgaXMgYWxpYXMgZm9yIC1HLgorCUFjY2VwdCBhbmQgaWdub3JlIC1XdHJpZ3JhcGhzLgorCSogZ2NjLmM6IFNpbXBsaWZ5IHRoZSBzcGVjcy4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSksIHRtLSouaDoKKwlBU01fRklMRV9TVEFSVCBpcyBub3cgYSBzdGF0ZW1lbnQsIG5vdCBqdXN0IGEgc3RyaW5nIHRvIGJlIG91dHB1dC4KKwlPdXRwdXQgaXQgKmFmdGVyKiBkZXRlcm1pbmluZyB0aGUgcmVhbCBzb3VyY2UgZmlsZSBuYW1lLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBTaW1wbGlmeSB4ID49IENTVCB0byB4ID4gQ1NULTEgKENTVCBwb3NpdGl2ZSkuCisJVG8gc2ltcGxpZnkgdGhpcywgY2Fub25pY2FsaXplIHJlbGF0aW9uYWxzIHRvIHB1dCBjb25zdGF0IGxhc3QuCisKKwkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTWFrZSBhIDJuZCBlcnJtc2cgdG8gc2hvdyBwcmV2aW91cyBkZWNsLgorCisJKiBjY2NwLmMgKGZpbGVfc2l6ZV9hbmRfbW9kZSk6IERlbGV0ZSB0ZW1wb3JhcnkgVk1TIGJvb3RzdHJhcCBwYXRjaC4KKworCSogdG0tYXR0Mzg2Lmg6IE5ldyBmaWxlLgorCisJKiBkZWNsLmMgKHB1c2hkZWNsKTogV2FybiBpZiBhIGxvY2FsIGBleHRlcm4nIGRlY2wgcHJlY2VkZXMKKwlhIGZpbGUtc2NvcGUgYHN0YXRpYycgZGVjbC4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IE5vIHdhcm5pbmcgZm9yIGZhaWx1cmUgdG8gaW5saW5lLgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBjb3B5IG9wZXJhbmQgMSBvZiBleHR2IG9yIGV4dHp2CisJaW50byByZWdpc3RlciBpZiBtZW1vcnkgaXNuJ3QgYWxsb3dlZC4KKworU2F0IE1heSAyOCAwMjoxMDo1NiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYi5jLCBNYWtlZmlsZTogRGVsZXRlIHZhX2VuZC4KKworCSogZmluYWwuYywgc3ltb3V0LmM6IENoZWNrIERCWF9ERUJVR0dJTkdfSU5GTywgbm90IE5PX0RCWF9GT1JNQVQuCisKKwkqIGdlbmVtaXQuYyAoZ2VuX2V4cGFuZCk6IE5vdGljZSBhIENBTEwgaW5zaWRlIGEgUEFSQUxMRUwuCisKKwkqIHJlZ2NsYXNzLmMgKGluaXRfcmVnX3NldHNfMSk6IFBhcnQgb2YgaW5pdF9yZWdfc2V0IGlzIHB1dCBpbiB0aGlzCisJbmV3IGZuIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBvcHRpb25zIGFyZSBzY2FubmVkLgorCU5vdyBDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSBjYW4gZGVwZW5kIG9uIHRoZSBvcHRpb25zLgorCShmaXhfcmVnaXN0ZXIpOiBKdXN0IGFsdGVyIHRoZSBkYXRhIHRoYXQgaW5pdF9yZWdfc2V0c18xIHdpbGwgbG9vayBhdC4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEb24ndCBjb21wbGFpbiBpZiB0d28gZGlmZmVyZW50IGJ1dCB0aWVhYmxlCisJbW9kZXMgcmVxdWlyZSBncm91cHMgb2YgdGhlIHNhbWUgcmVnY2xhc3MgKGFzc3VtaW5nIHNhbWUgc2l6ZSBncm91cCkuCisKKwkqIGNjY3AuYzogQWRkIDNyZCBhcmcgdG8gYWxsIGBvcGVuJyBjYWxscy4KKworCSogcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IFR5cG8gcHJldmVudGVkIGlnbm9yaW5nIHdoaXRlc3BhY2UuCisKKwkqIGNjY3AuYyAocGVycm9yX3dpdGhfbmFtZSk6IGZwcmludGYgaGFkIGhhcm1mdWwgZXh0cmEgYXJnLgorCisJKiBjY2NwLmMgKG1haW4sIHRyaWdyYXBoX3BjcCk6IC1XdHJpZ3JhcGhzIG1lYW5zIHdhcm4gaWYgYW55IHRyaWdyYXBocy4KKworCSogZW1pdC1ydGwuYyAoZ2VuX3NlcXVlbmNlKTogSWYgTEVOIGlzIDEsIGF2b2lkIGxvb2tpbmcgYXQgUEFUVEVSTgorCW9mIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgaGF2ZSBvbmUuCisKKwkqIHJlbG9hZDEuYyAoYWx0ZXJfZnJhbWVfcG9pbnRlcl9hZGRyZXNzZXMpOiBmcmFtZSBwb2ludGVyIGNhbgorCW9jY3VyIGJ5IGl0c2VsZiwgbm90IGp1c3QgaW5zaWRlIGEgUExVUy4KKwkocmVsb2FkKTogQ2FsbCBlbGltaW5hdGVfZnJhbWVfcG9pbnRlciBiZWZvcmUgcmVsb2FkX2FzX25lZWRlZC4KKwlPdGhlcndpc2UgdGhlIGxhdHRlciBjYW4gbWFrZSByZWxvYWQgaW5zbnMgdGhhdCBjb3B5IHRoZSBmcmFtZSBwdHIKKwl0byBhIGRhdGEgcmVnLCBidXQgNjhrIGNhbid0IGNvcHkgc3ArY29uc3QgdG8gYSBkYXRhIHJlZy4KKworCSogZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBBbHdheXMgc2F2ZSB0aGUgaW1wbGljaXQgZGVjbAorCXBlcm1hbmVudGx5LiAgUmV1c2UgYW4gb2xkIG9uZSBpZiBpdCBleGlzdHMuCisJKiB0cmVlLmMgKHJlc3VtZV90ZW1wb3JhcnlfYWxsb2NhdGlvbik6IFVzZWQgYWZ0ZXIgYGVuZF90ZW1wb3JhcnkuLi4nCisJdG8gZ28gYmFjayB0byB0ZW1wb3JhcnkgYWxsb2NhdGlvbi4KKworCSogc3Rvci1sYXlvdXQgKGxheW91dF97dHlwZSxkZWNsfSk6IENhbGwgdmFyaWFibGVfc2l6ZS4KKwkodmFyaWFibGVfc2l6ZSk6IFR1cm4gYSBzaXplIGludG8gYSBTQVZFX0VYUFIgYW5kIGVpdGhlciBjb21wdXRlCisJaXQgcmlnaHQgYXdheSBvciBwdXQgaXQgb24gYSBsaXN0IHRvIGJlIGNvbXB1dGVkIGxhdGVyLgorCShnZXRfcGVuZGluZ19zaXplcyk6IFJldHVybiB0aGF0IGxpc3QgYW5kIGNsZWFyIGl0IG91dC4KKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2Z1bmN0aW9uKTogVGVsbCBgdmFyaWFibGVfc2l6ZScgdG8gY29tcHV0ZQorCXNpemVzIHJpZ2h0IGF3YXksIGFuZCBjb21wdXRlIHRob3NlIHNhdmVkIG9uIHRoZSBsaXN0LgorCShleHBhbmRfZW5kX2Z1bmN0aW9uKTogVGVsbCBpdCB0byBwdXQgdGhlbSBvbiBhIGxpc3QuCisKK0ZyaSBNYXkgMjcgMDA6MDI6MzQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IEZvciBsb2NhbCBzdGF0aWMgdmFyLCB1c2UgJ1YnLCBub3QgJ3YnLgorCisJKiBnY2MuYyAobWFpbik6IERvbid0IGhhbmRsZSBTSUdIVVAgb3IgU0lHVEVSTSBpZiBzaGVsbCBpZ25vcmVkIGl0LgorCisJKiBNYWtlZmlsZSwgZ2NjLmM6IFByb3BhZ2F0ZSBNYWtlIHZhciBgbGliZGlyJyB0byBnY2Mgc2VhcmNoIHBhdGguCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBhIFBBUk1fREVDTCB3aXRoIG5vIHJ0bCBjYW4gb2NjdXIgaW4gc2l6ZSBvZgorCWBhJyBpbiBgZm9vIChhLGkpIGludCBpOyBzdHJ1Y3Qge2ludCB4W2ldO30gYTsnLCBzbyByZXBvcnQgYW4gZXJyb3IuCisKKwkqIGZsb3cuYyAoaW5zbl9kZWFkX3ApOiBpbnNuIHRoYXQgbWFrZXMgc3RhY2sgYmlnZ2VyIGlzIG5ldmVyIGRlYWQuCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3Qgc3BsaWNlIG91dCBzdG9yZXMgaW50byBzdGFjayBwdHIuCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IFRlc3QgZ2l2ZW4gcmVnbm8gZm9yIE9WRVJMQVBQSU5HX1JFR05PX1AuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFVzZSBzYXZlYWJsZV9vYnN0YWNrIGZvciBhbGxvY2F0aW9uLgorCitUaHUgTWF5IDI2IDAxOjE3OjAwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSk6IENsZWFyIHVudXNlZCBzbG90cyBpbiBwYXJtZGVjbF9tYXAuCisJKFRoZXJlIG1heSBiZSBzb21lIG5vbi1wYXJtIHJlZ3MgYmVsb3cgbWF4X3Bhcm1fcmVnbm8uKQorCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSk6IERvbid0IGNyYXNoIGlmIHBhcm1kZWNsX21hcCBlbHQgaXMgMC4KKworCSogRG9uJ3QgZmFpbCB0byBvdXRwdXQgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIHRoYXQgd2FzIHJlZmVyZW5jZWQKKwl2aWEgYSBsb2NhbCBleHRlcm4gZGVjbCBiZWZvcmUgaXRzIGRlZmluaXRpb24uCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogSWYgbmVlZCB0byBtYXJrIGEgZmNuIGRlY2wgYWRkcmVzc2FibGUsCisJbWFyayB0aGUgaWRlbnRpZmllciBhZGRyZXNzYWJsZSBhbHNvLgorCSogdHlwZWNoZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBJZiBtYXJraW5nIGZjbiBhZGRyZXNzYWJsZSwKKwltYXJrIHRoZSBpZGVudGlmaWVyIGFzIHdlbGwuCisJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogSWYgaWRlbnRpZmllciB3YXMgbWFya2VkIGFkZHJlc3NhYmxlLAorCXByb3BhZ2F0ZSBpdCB0byB0aGUgZnVuY3Rpb24uCisKKwkqIHBhcnNlLnkgKHl5bGV4KTogQ2hlY2sgZm9yIEVSQU5HRSBhZnRlciBhdG9mIGlzIGNhbGxlZC4KKwkoU3VuIGRvZXNuJ3QgcmVwb3J0IEVSQU5HRS4pCisKKwkqIGxvb3AuYyAobWF5X3RyYXBfcCk6IEFueSBmbG9hdGluZyBhcml0aG1ldGljIG1heSB0cmFwLgorCitXZWQgTWF5IDI1IDAwOjAzOjM0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogcGFyc2UueTogRGVsZXRlIGBub2FsaWFzJy4KKwkoYXNtX29wZXJhbmQpOiBEb24ndCBhbGxvdyB0aGlzIHRvIGJlIGVtcHR5LgorCShhc21fb3BlcmFuZHMpOiBEbyBhbGxvdyB0aGlzIHRvIGJlIGVtcHR5LgorCisJKiByZWxvYWQuYyAob3BlcmFuZHNfbWF0Y2hfcCk6IERvbid0IGxldCBSRUcgYW5kIFNVQlJFRyBtYXRjaAorCWlmIHRoZSByZWcgaXNuJ3QgYSBoYXJkIHJlZy4KKwlObyBsb25nZXIgbmVjLiB0byBjaGVjayByZWdfcmVudW1iZXIsIG5vdyB0aGF0IHJlbG9hZAorCXN1YnN0aXR1dGVzIHRoZSBoYXJkIHJlZ25vLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvdW50aW5nIGV4aXN0aW5nIHNwaWxsZWQgZ3JvdXBzLAorCWNoZWNrIEhBUkRfUkVHTk9fTU9ERV9PSyBzbyB3ZSBkb24ndCBnZXQgZm9vbGVkIGJ5IGFuIG9kZC1ldmVuIHBhaXIuCisJU3BpbGwgZW50aXJlIG5lZWQgZm9yIG5ldyBncm91cHMgYmVmb3JlIHNwaWxsaW5nIGFueSBzb2xpdGFyeSByZWdzLgorCVJlZyBhbHJlYWR5IGNvdW50ZWQgYWdhaW5zdCBtYXhfbm9uZ3JvdXBzIGNhbid0IGJlY29tZSBwYXJ0IG9mIGEgZ3JvdXAuCisJKG5ld19zcGlsbF9yZWcpOiBEbyBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggYSBuZXcgc3BpbGwtcmVnLgorCShuX3NwaWxscyk6IFRoaXMgdmFyIGlzIG5vdyBzdGF0aWMsIG5vIGxvbmdlciBwYXNzZWQgYXMgYXJnCisJd2l0aGluIHRoZSBmaWxlLgorCisJKHJlbG9hZF9yZWdfY2xhc3NfbG93ZXIpOiBIYW5kbGUgYWxsIGdyb3VwLXJlbG9hZHMgYmVmb3JlIHNvbGl0YXJpZXMuCisJKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IHRoZXJlZm9yZSAjaWYgMCB0aGUgc3BlY2lhbCBjb2RlIGZvcgorCWZpbmRpbmcgc29saXRhcnkgcmVnaXN0ZXJzIHRoYXQgYXJlbid0IHN1aXRhYmxlIGZvciBncm91cHMuCisJQnV0IGZpeCB0d28gYnVncyBpbiBpdDogYnJhaW5vIGRlY2lkaW5nIHdoZXRoZXIgYSByZWxvYWQKKwlpcyBsb29raW5nIGZvciAxIHJlZ2lzdGVyIChub3QgYSBncm91cCkuICBVc2UgQ0xBU1NfTUFYX05SRUdTLgorCUFsc28gYnJhaW5vIGRlY2lkaW5nIHdoZXRoZXIgYSBzcGlsbCByZWcgY2FuIGJlIGluIGEgZ3JvdXAuCisJRGlkIG5vdCBmaXggYnVnIHRoYXQgaXQgZmFpbHMgdG8gdGVzdCBIQVJEX1JFR05PX01PREVfT0ssCisJc28gaXQgbWlnaHQgc3BsaXQgdXAgYW4gZXZlbi1vZGQgcGFpci4KKworCSogdmF4Lm1kOiBTcGVjaWFsIHBhdHRlcm5zIGZvciA4IGFuZCAxNi1iaXQgZmllbGRzLCB0byBtYWtlCisJbW92ZS1pbnNucyAobGlrZSB0aGUgb25lcyBmb3IgdGhlIDY4aykuCisKKwkqIHRyZWUuYyAoY29udmVydF90b19pbnRlZ2VyKTogUGFzcyB0cnVuY2F0aW9uIGRvd24gdGhydSBDT05EX0VYUFIKKwlhcyB0aHJvdWdoIGEgYmluYXJ5IG9wZXJhdG9yLgorCisJKiB0eXBlY2hlY2suYyAoYnVpbGRfY29uZF9leHByKTogSWYgdW5wcm9tb3RlZCBvcGVyYW5kIHR5cGVzIG1hdGNoLAorCWRvbid0IHByb21vdGUgdGhlbS0tbGV0IGNvbnRhaW5pbmcgZXhwcmVzc2lvbiBwcm9tb3RlIChqdXN0IG9uY2UpLgorCitUdWUgTWF5IDI0IDE0OjQ2OjI2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdCk6IFNpbXBsaWZ5IChzdWJyZWcgKHNpZ25fZXh0ZW5kIFgpIDApLgorCisJKiB0bS1ocDlrMzIwLmg6IERlbGV0ZSBOT19EQlhfRk9STUFULgorCSogTW9zdCB0bS4uLmggZmlsZXM6IERlZmluZSBEQlhfREVCVUdHSU5HX0lORk8uCisJKiBkYnhvdXQuYzogQ2hhbmdlIGNvbmRpdGlvbmFsIHRvIERCWF9ERUJVR0dJTkdfSU5GTy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBJZiBpbmxpbmUgZmNuIHdhcyBkZWNsYXJlZCB0bworCXJldHVybiBRSSwgYnV0IGFjdHVhbGx5IGNvbXB1dGVzIGFuIFNJLCB1c2UgU0ltb2RlIGZvciBJTkxJTkVfVEFSR0VUCisJYnV0IGFjdHVhbGx5IHJldHVybiBhIFFJLgorCisJKiB2YXJhc20uYyAoZm9yY2VfY29uc3RfbWVtKTogRmFpbGVkIHRvIGRldGVybWluZSBhbGlnbm1lbnQgYmRyeQorCWZyb20gbWFjaGluZSBtb2RlLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBkZWxldGUgKG1vdmUgWCBZKSBpZiBYIG9yIFkgaXMgYQorCVBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUCByZWdpc3Rlci4KKworCSogZmluYWwuYyAob3V0cHV0X2FkZHJfY29uc3QpOiBJbiBQTFVTLCBvdXRwdXQgY29uc3RhbnQgdGVybSBsYXN0LgorCisJKiBmaW5hbC5jIChmaW5hbCk6IEJlZm9yZSBvdXRwdXR0aW5nIGFuIGluc24sIGRvIEZJTkFMX1BSRVNDQU5fSU5TTi4KKworCSogZmluYWwuYyAobmV4dF9ibG9ja19pbmRleCk6IE5vIGxvbmdlciBzdGF0aWMuCisJKGZpbmFsKTogQWRkIFNEQl9ERUJVR0dJTkdfSU5GTyBjYXNlcyBmb3Igb3V0cHV0aW5nIE5PVEVzCisJZm9yIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgYmxvY2suCisJKG91dHB1dF9zb3VyY2VfbGluZSk6IEFkZCBTREJfREVCVUdHSU5HX0lORk8gY2FzZSBmb3IgbGluZSBudW1iZXIuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZnVuY3Rpb24pOiBBZGQgY29kZSBmb3IgU0RCIHN5bWJvbCBvdXRwdXQuCisKKwkqIGdudWxpYi5jOiBBbGxvdyBjb25maWcgdG8gb3ZlcnJpZGUgSU5USUZZLgorCU5ldyBtYWNybyBTRlZBTFVFIGZvciBkYXRhIHR5cGUgdG8gcmV0dXJuIGEgc2luZ2xlLWZsb2F0IGluLgorCisJKiBjb21iaW5lLmMgKHJlbW92ZV9kZWF0aCk6IE5vIGxvbmdlciBgc3RhdGljJy4KKworCSogcmVsb2FkMS4gKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUAorCXNlbGVjdHMgaGFyZCByZWdzIGZvciB3aGljaCBkZWF0aCBpbmZvIHNob3VsZCBiZSB1cGRhdGVkIGZvciBmaW5hbC4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogTGV0IElOU05fQ0xPQkJFUlNfUkVHTk9fUAorCXByZXZlbnQgaW5oZXJpdGFuY2Ugb2YgY2VydGFpbiByZWxvYWRzLgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBMZXQgT1ZFUkxBUFBJTkdfUkVHTk9fUCByZWplY3QKKwlhbiBlcXVpdiByZWcuICBOZWVkZWQgZm9yIGZ1bm55IGZsb2F0IHJlZ3Mgb24gODAzODcuCisKKwkqIGNjY3AuYyAoZG9faWRlbnQpOiBEZWZpbmUgI2lkZW50IGFzIGEgbm8tb3AgaWYgSURFTlRfRElSRUNUSVZFLgorCVdhcm4gaWYgcGVkYW50aWMuCisJKGRvX3NjY3MpOiBXYXJuIGlmIHBlZGFudGljLgorCisJKiBlbWl0LXJ0bC5jIChyZXN0b3JlX3JlZ19kYXRhKTogU2V0IGN1cl9pbnNuX3VpZC0tcHJldmVudCBkdXBsaWNhdGVzLgorCitTdW4gTWF5IDIyIDEyOjI1OjA2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjIyIHJlbGVhc2VkLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNwaWxsaW5nIGlzbid0IGZpbmlzaGVkIHRpbGwgbWF4X25vbmdyb3VwcyBpcyAwLgorCisJKiB0bS1lbmNvcmUuaCAoUFJJTlRfT1BFUkFORCk6IE5vIGAkJyBiZWZvcmUgYSBDT05TVC4KKworU2F0IE1heSAyMSAxMzowODo1NCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoY29tYmluZSk6IFR5cG8gaW4gTUlOX0VYUFIsIE1BWF9FWFBSLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFdhcyBjb3VudGluZyBpbnNuX2dyb3VwcyBhcyB0b3RhbCBzaXplIG9mIGdyb3VwcywKKwlub3QgbnVtYmVyIG9mIGdyb3Vwcy4KKwlBIG5ldyBzcGlsbGVkIGdyb3VwIGNvdW50cyBhZ2FpbnN0IGdyb3VwLW5lZWRzIG9mIHN1cGVyY2xhc3Nlcy4KKworCSogcGFyc2UueSAocGFybWxpc3R7LF9vcl9pZGVudGlmaWVyc31fMSk6IEluIGVycm9yIGNhc2UsCisJcmV0dXJuIGEgdHJlZSBsaXN0IGp1c3QgYXMgaW4gdGhlIG90aGVyIGNhc2VzLgorCitGcmkgTWF5IDIwIDAyOjE0OjUxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogY29uZmlnLXZheC5oLCBjb25maWctbTY4ay5oOiBJZiBfX0dOVUNfXywgdXNlIGJ1aWx0aW4tYWxsb2NhLgorCisJKiBnZW5wZWVwLmMgKG1hdGNoX3J0eCk6IEdlbmVyYXRlZCBjb2RlIHdhcyB0ZXN0aW5nIHRoZSB3cm9uZyBydHgKKwl3aGVuIHRlc3RpbmcgYW4gaW50IG9yIHN0cmluZyBhdCBhIG5vbnplcm8gaW5kZXggaW4gdGhlIHJ0eC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFR5cG8gY2hlY2tpbmcgYG1vZGlmaWVkJyBmb3IgY29uZmxpY3QKKwl3aXRoIGFuIGVhcmx5Y2xvYmJlci4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogUmVqZWN0IHN0YWNrIHB0ciBhcyByZXR1cm4gdmFsdWUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBBbGxvY2EgbXVzdCBkbyBwZW5kaW5nIHN0YWNrIGFkanVzdC4KKworVGh1IE1heSAxOSAxMzowMTowMSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogU2tpcHBpbmcgYmFjayBhY3Jvc3MgbGliY2FsbCBkaWRuJ3QgaGFwcGVuCisJZHVlIHRvIGZhaWxpbmcgdG8gc2V0IFBSRVYuCisKKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBDb2RlIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50CisJY3VycmVudF9hcmdzX3NpemUgYnJva2Ugc2luY2UgZW1pdF9jYWxsXzEgd2FzIGNoYW5nZWQgdG8gcmVzdG9yZSBpdC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFdoZW4gaTEgb3IgaTIgYXV0by1pbmNzIGEgcmVnLCBkb24ndCBjb21iaW5lCisJaWYgaTMgdXNlcyB0aGF0IHJlZy4KKworCSogY29uZmlnLWhwOWszLmg6ICNkZWZpbmUgYmNvcHksIGJjbXAsIGJ6ZXJvIGhlcmUuCisJKiBjb25mLWhwOWszMjAuaDogRGVsZXRlIGZpbGUuCisKKwkqIGludGVncmF0ZS5jOiBEb24ndCBpbmNsdWRlIHN0cmluZ3MuaC0tbm8gbmVlZC4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogRG9uJ3QgbWFrZSB6ZXJvLWxlbmd0aCB2ZWN0b3JzLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IEFmdGVyIGEgZmNuIGNhbGwsIG1heWJlLXRyYXAgaW5zbnMgY2FuJ3QgbW92ZS4KKwlUaGUgZmNuIGNhbGwgbWlnaHQgZXhpdCBhbmQgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSB0cmFwLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNldCByZWxvYWRfZmlyc3RfdWlkIHRvIG5leHQgdWlkIHRvIGJlIHVzZWQuCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBVc2UgcmVsb2FkX2ZpcnN0X3VpZCB0byBpZ25vcmUgaW5zbnMKKwl0aGF0IGFyZSBkdWUgdG8gcmVsb2FkaW5nLS1vbmx5IGlmIHJlbG9hZF9yZWdfcCBpcyBub3QgMCBvciAxLgorCitXZWQgTWF5IDE4IDIyOjExOjIwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgYXJyYXkKKwlhcyBhcmd1bWVudCB0byBgIScuCisKKwkqIGRlY2wuYyAocHVzaGRlY2wpOiBJZiBsb2NhbGx5IGRlY2xhcmluZyBhbiBleHRlcm4gZnVuY3Rpb24sCisJY2hlY2sgdGhlIGlkZW50aWZpZXIncyBnbG9iYWwgdmFsdWUgaW4gY2FzZSBpdCdzIGFuIGlubGluZSBmdW5jdGlvbi4KKworTW9uIE1heSAxNiAwMzowNjowOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIG91dHB1dC1uczMyay5jIChvdXRwdXRfc2hpZnRfaW5zbik6IE5ldyBmbiwgbWF5YmUgdHVybiBzaGlmdCB0byBhZGRzLgorCShyZWdfb3JfbWVtX29wZXJhbmQpOiBQcmVkaWNhdGUgZm9yIGEgbm9uLWltbWVkaWF0ZSBnZW5lcmFsX29wZXJhbmQuCisJKiB0bS1uczMyay5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBEZWZpbmUgbGV0dGVyIEsuCisJKiBuczMyay5tZDogVXNlIG91dHB1dF9zaGlmdF9pbnNuIGZvciB2YXJpb3VzIGFkZHIgaW5zbnMgdGhhdCBzaGlmdC4KKwlEb24ndCBhbGxvdyBub25leHBsaWNpdCBjb25zdGFudHMgaW4gbHByZCwgbXVsdGlwbHkgb3IgdHJ1bmNhdGUgaW5zbnMuCisJVXNlIHJlZ19vcl9tZW1fb3BlcmFuZCBmb3IgY29uc3RyYWludCBpbiBvcDEgb2YgZGl2aWRlIGluc25zOworCWEgY29uc3RhbnQgdGhlcmUgY2F1c2VzIHJlZ2NsYXNzIHRvIHNjcmV3IHVwLgorCVNwbGl0IGFsdGVybmF0aXZlIGNvbnN0cmFpbnRzIG9uIHRoZSBiaXQtZmllbGQgaW5zbnMgdG8gYXZvaWQKKwlvdXQtb2YtcmFuZ2Ugb3BlcmFuZHMgaW4gZXh0cywgaW5zcy4gIFNvbWUgY2FzZXMgb2YgZXh0cmFjdGlvbgorCWNhbiBiZSBkb25lIGZhc3RlciB2aWEgbWVtb3J5LgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBXaGVuIGFkZGluZyBhIFJFR19ERUFEIG5vdGUsIGluYyByZWdfbl9kZWF0aHMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9kZWYpOiBEbyBub3RoaW5nIGZvciB7aW50ZWdlcixjaGFyfV90eXBlX25vZGUuCisKK1N1biBNYXkgMTUgMDA6NTY6NDQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiB0bS1zZXF1ZW50LmgsIHRtLW5zMzJrLmgsIHRtLWVuY29yZS5oIChQUklOVF9PUEVSQU5EKToKKwlXYXMgdHJlYXRpbmcgU0YncyBhcyBTSSdzLgorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuKTogQ2hlY2sgYWxsIENPTlNUX0RPVUJMRXMgZm9yCisJTEVHSVRJTUFURV9DT05TVEFOVF9QIGFuZCBwdXQgdGhlbSBpbiBtZW1vcnkgaWYgbm90LgorCisJKiBsb2NhbC1hbGxvYy5jIChjb21iaW5lX3JlZ3MpOiBBbGxvdyBhIHJlZyB0byBiZSB0aWVkIHRvIGEgcXR5CisJaWYgdGhlIHJlZydzIGNsYXNzIGlzIGNvbnRhaW5lZCBpbiB0aGUgcXR5J3MgY2xhc3MKKwkoYXMgd2VsbCBhcyBpZiB0aGUgcmVnJ3MgY2xhc3MgY29udGFpbnMgdGhlIHF0eSdzIGNsYXNzIGFzIGJlZm9yZSkuCisJUmVuYW1lIHF0eV9yZWdfY2xhc3MgdG8gcXR5X21pbl9jbGFzcyBhbmQgbWFrZSBpdCB0aGUgc21hbGxlc3QKKwljbGFzcyBvZiBhbnkgcmVnIHRpZWQgdG8gdGhlIHF0eS4KKwkocmVnX2NsYXNzX3N1YnNldF9wLCByZWdfbWVldHNfY2xhc3NfcCwgdXBkYXRlX3F0eV9jbGFzcyk6CisJTmV3IHN1YnJvdXRpbmVzIHRvIGltcGxlbWVudCB0aGlzLgorCShsb2NhbF9hbGxvYyk6IEluaXQgcmVnX3F0eSB0byAtMSBmb3IgcHNldWRvcyBub3QgaW4gY3VyLiBiYXNpYyBibG9jay4KKwkocmVnX2lzX2Jvcm4pOiBBYm9ydCBpZiBwc2V1ZG8gbm90IGluIGJhc2ljIGJsb2NrIGhhcyAtMiBpbiByZWdfcXR5LgorCisJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3ApOiBJbnNpc3QgdGhhdCBtb2RlcyBvZiBSRUdzIG1hdGNoLgorCitTYXQgTWF5IDE0IDAxOjA1OjM1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbHVja3ktY2hhcm1zLmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IEVtcHR5IGZyYW1lIGZyYW1lX29mZnNldCBpc24ndCBuZWMuIDAuCisKKwkqIGV4cHIuYyAoZW1pdF9jYWxsXzEpOiBVc2Ugc3RhY2tfc2l6ZV9ydHggZXZlcnl3aGVyZSBhcHByb3ByaWF0ZS4KKworCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBzaXpldHlwZSB0byBgdW5zaWduZWQgbG9uZycKKwlpZiBgaW50JyBpcyBsZXNzIHRoYW4gYSB3b3JkLgorCisJKiBzdGRkZWYuaCAoc2l6ZV90LCBwdHJkaWZmX3QpOiBCb3RoIGFyZSBub3cgbG9uZy4KKworRnJpIE1heSAxMyAwMTowNjowMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGx1Y2t5LWNoYXJtcy5haS5taXQuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydCk6IEhhbmRsZSBub24tbG93cGFydCBzdWJyZWcgYXMgYXJnLgorCisJKiByZWNvZy5jIChyZWdpc3Rlcl9vcGVyYW5kKTogVk9JRG1vZGUgbWVhbnMgYWxsb3cgYW55IG1vZGUuCisJKGltbWVkaWF0ZV9vcGVyYW5kLCBub25tZW1vcnlfb3BlcmFuZCk6IExpa2V3aXNlLgorCisJKiBlbWl0LXJ0bC5jIChjbGFzc2lmeV9pbnNuKTogVXBkYXRlIGZvciBjaGFuZ2VkIENBTExfSU5TTiBmb3JtYXQuCisJKGVtaXQpOiBOZXcgZnVuY3Rpb24gdG8gZW1pdCBhbiBydGwgcGF0dGVybiBhcyB0aGUgcmlnaHQga2luZCBvZiBpbnNuLgorCSoganVtcC5jIChzaW1wbGVqdW1wX3ApOiBObyBsb25nZXIgc3RhdGljLgorCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBGb3IgbWF0Y2hfb3BlcmFuZCBhdCB0b3AgbGV2ZWwsIGNhbGwgYGVtaXQnLgorCVVzZSBgZW1pdF9jYWxsX2luc24nIHdoZW4gYXBwcm9wcmlhdGUuCisJKGdlbl9leHApOiBIYW5kbGUgcnR4J3MgdGhhdCBjb250YWluIHN0cmluZ3MuCisKKwkqIGZpbmFsLmMsIHN5bW91dC5jOiBJZiBub3QgTk9fREJYX0ZPUk1BVCwgaW5jbHVkZSBzdGFiLmggdG8gZ2V0IHRoZQorCU5fLi4uIHN5bWJvbHMuICBVc2UgdGhlaXIgZGVmYXVsdCBkZWZpbml0aW9ucyBvbmx5IGlmIHRoZXkncmUgdW5kZWYuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpIFtubyBQVVNIX1JPVU5ESU5HXTogQWx3YXlzIHNldCBhcmdibG9jaworCWlmIHRoZXJlIGFyZSBhbnkgc3RhY2stcGFzc2VkIGFyZ3VtZW50cy4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTWFyayBhbGwgaW5jcmVtZW50LWV4cHJzIHZvbGF0aWxlLgorCisJKiByZWNvZy5jIChyZWdfcmVudW1iZXJlZF9maXRzX2NsYXNzX3ApOiBEZWxldGUgcHJpdmF0ZSBjb3B5IG9mCisJcmVnX2NsYXNzX2NvbnRlbnRzLgorCisJKiByZWxvYWQxLmMgKGZvcmdldF9vbGRfcmVsb2Fkcyk6IEhhbmRsZSBQQVJBTExFTCBjYXNlIGJ5IHJlY3Vyc2lvbi4KKwlFeHBsaWNpdCBzdG9yZSBpbnRvIGEgc3BpbGxlZCByZWcgaW52YWxpZGF0ZXMgb2xkIHJlbG9hZGVkIGNvbnRlbnRzOworCXRoaXMgY2FuIG9jY3VyIHdoZW4gd2UgZHJvcCB0aHJvdWdoIGludG8gYSBiYXNpYyBibG9jayB3aG9zZSBuZWVkIHdhcyAwCisJKGFuZCBzbyB3aG9zZSBsb2NhbCBwc2V1ZG9zIHdlcmUgbm90IHNwaWxsZWQpLgorCisJKiBnY2MuYyAobWFpbik6IElmIC12LCBwcmludCBnY2MncyBvd24gdmVyc2lvbjsgYWxzbyBubyBlcnJvciBtc2cKKwlpZiBubyBpbnB1dCBmaWxlcy4KKworCSogbG9vcC5jIChtYXlfdHJhcF9wKTogTWVtIHJlZiB0byBub25jb25zdGFudCBhZGRyZXNzIG1heSB0cmFwLgorCShzY2FuX2xvb3ApOiBDaGVjayBtYXlfdHJhcF9wIG9ubHkgd2hlbiBpbnNuIGlzIGluIG90aGVyIHJlc3BlY3RzIG9rLgorCisJKiBjZXhwLnk6ICNpbmNsdWRlIGNvbmZpZy5oIChmb3IgZGVjbCBvZiBhbGxvY2Egb24gc29tZSBtYWNoaW5lcykuCisKK1RodSBNYXkgMTIgMTc6MjQ6MTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFdoZW4gaW5zZXJ0aW5nIGFuIGluc24gYXQgc3RhcnQgb2YgYmxvY2ssCisJdXBkYXRlIGJhc2ljX2Jsb2NrX2hlYWQuCisKK1dlZCBNYXkgMTEgMDA6NDc6MDkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBERUNMX09GRlNFVCBzaG91bGQgYmUgb2Zmc2V0IGFzIHBhc3NlZAorCShub3QgaW5jbHVkaW5nIGJpZy1lbmRpYW4gd2lkdGgtY2hhbmdlIGNvcnJlY3Rpb24pLgorCisJKiB0eXBlY2hlY2suYyAoc2hvcnRlbl9jb21wYXJlKTogU2V0IHVuc2lnbmVkcFswMV0gcmlnaHQgaW4gY2FzZQorCXdoZXJlIGdldF9uYXJyb3dlciBtYWtlcyBubyBjaGFuZ2UuCisJKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBMaWtld2lzZSBmb3Igc2hvcnRlbmluZyBzaGlmdHMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogVXNlIHR5cGVfZm9yX3NpemUgdG8gZ2V0IHRoZSB0eXBlCisJdG8gY29udmVydCB0aGUgaW5kZXggdG8sIHNpbmNlIGBpbnQnIGlzIHdyb25nIGlmIC1tc2hvcnQuCisKKwkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBjaGVjayBQQVJNIHR5cGUgZm9yIGNvbXBsZXRlbmVzcy4KKwkoZ3Jva3Bhcm1zKTogSWYgZm4gZGVmaW5pdGlvbiwgY2hlY2sgYWxsIHBhcm0gdHlwZXMgZm9yIGNvbXBsZXRlbmVzcy4KKwkoc3RvcmVfcGFybV9kZWNscyk6IExpa2V3aXNlLgorCitUdWUgTWF5IDEwIDIyOjQyOjEzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgY29ybi1jaGV4LmFpLm1pdC5lZHUpCisKKwkqIHR5cGVjaGVjay5jIChzdG9yZV9pbml0KTogRm9yIGludmFsaWQgaW5pdCwgc3RvcmUgZXJyb3JfbWFya19ub2RlLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogSWdub3JlIGVycm9yX21hcmsgYXMgYW4gaW5pdC4KKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBJZiBpbml0IGlzIGVycm9yX21hcmssIGluaXQgdG8gMCBpZiBwb3NzaWJsZS4KKwlUaGlzIGF2b2lkcyBhIHNwdXJpb3VzICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIiB3YXJuaW5nLgorCitTdW4gTWF5ICA4IDE3OjA4OjA3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbHVja3ktY2hhcm1zLmFpLm1pdC5lZHUpCisKKwkqIHRtLWhwOWszMjAuaDogRGVmaW5lIFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZLgorCisJKiBkZWNsLmMgKGdldF9wYXJtX2luZm8pOiBSZXBsYWNlcyBnZXRfcGFybV90eXBlcy4gIFJldHVybnMgYSB0cmVlX2xpc3QKKwljb250YWluaW5nIHBhcm1kZWNscyBhbmQgdGFnIGxpc3QgYXMgd2VsbCBhcyB0eXBlIGxpc3QuCisJKGdyb2twYXJtcyk6IEFjY2VwdCB0aGF0IHRyZWVfbGlzdCBhcyBhcmd1bWVudC4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBDYWxsaW5nIGdyb2twYXJtcywgc2F5ICJub3QgYSBkZWZpbml0aW9uIiBmb3IgdGhlCisJZnVuY3Rpb24gZGVjbGFyYXRvcnMgZm9yIGFyZyBvciB2YWx1ZSB0eXBlcyB3aXRoaW4gYSBkZWZpbml0aW9uLgorCisJKiBwYXJzZS55OiBDYWxsIGdldF9wYXJtX2luZm8uCisJKHBhcm1saXN0X29yX2lkZW50aWZpZXJzKTogSWYgaWRlbnRpZmllcnMsIG1ha2UgYSB0cmVlX2xpc3QKKwlsaWtlIHRoZSBvbmUgZ2V0X3Bhcm1faW5mbyByZXR1cm5zLgorCitGcmkgTWF5ICA2IDE2OjQ0OjE5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZCAoY2FzZXNpKTogRGVsZXRlIHRlbXBsYXRlIGFzaWRlIGZyb20gbWF0Y2hfb3BlcmFuZCdzLgorCisJKiB0bS1lbmNvcmUuaDogTmV3IGZpbGUgZnJvbSBSb2JlcnQgQnJvd24uCisKKwkqIG5zMzJrLm1kOiBVc2UgJWMgaW4gc29tZSBhZGRyIGluc25zLgorCSh0c3QqKTogVXNlIHtkLGYsfWNvbnN0MF9ydHggdG8gbWFrZSB0aGUgY29uc3RhbnQgMDsgT1MtaW5kZXBlbmRlbnQuCisJKGNhbGwsIGNhbGxfdmFsdWUpOiBVc2UgJT8gYmVmb3JlIGFkZHJlc3MgaW4gYSBic3IuCisKKwkqIG91dHB1dC1uczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBUbyBvdXRwdXQgYSBsb2NhbCBsYWJlbCwKKwl1c2UgYG91dHB1dF9hc21fbGFiZWwnLgorCU1ha2UgU0VRVUVOVF9BRERSRVNTX0JVRyBjb25kaXRpb25hbHMgaGFwcGVuIGF0IGNvbXBpbGUgdGltZS4KKworCSogdG0tbnMzMmsuaDogRGVsZXRlIFNFUVVFTlRfSEFTX0ZJWEVEX1RIRUlSX0JVRy4KKwkoUFJJTlRfT1BFUkFORCk6IE91dHB1dCBub3RoaW5nIGZvciBgJT8nLgorCSogdG0tc2VxdWVudC5oOiAoUFJJTlRfT1BFUkFORCk6IE91dHB1dCBub3RoaW5nIGZvciBgJT8nLgorCisJKiBmaW5hbC5jIChvdXRwdXRfYXNtX2xhYmVsKTogTm8gbG9uZ2VyIGBzdGF0aWMnLgorCitUaHUgTWF5ICA1IDA5OjAzOjM3IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZXhwbG93LmMgKG1lbW9yeV9hZGRyZXNzKTogSWdub3JlIGZsYWdfZm9yY2VfcmVnIHVubGVzcyBvcHRpbWl6ZS4KKwlBbHNvIGlnbm9yZSBpdCBmb3IgYWRkcmVzc2VzIG9mIHN0YWNrIHNsb3RzIChhdm9pZCBpbnZhbGlkIFJFR19FUVVJVnMpLgorCisJKiB0eXBlY2hlY2suYyAoZGlnZXN0X2luaXQpOiBJZiB0cmFkaXRpb25hbCwgYWxsb3cgYGNoYXIgeFsxMDBdPTA7Jy4KKworCSogdHJlZS5jIChnZXRfdW53aWRlbmVkKTogRG9uJ3QgYWx0ZXIgYSBDT01QT05FTlRfUkVGIGlmCisJaW5uZXJwcmVjIGVxdWFscyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBleGlzdGluZyB0eXBlLgorCUl0IHdhcyBjaGFuZ2luZyBwb2ludGVycyB0byBpbnRlZ2Vycy4KKworCSogbTY4ay5tZCAobW92ZGkpOiBQdXQgYWxsIGZwcmVncyBpbiBzZXBhcmF0ZSBjb25zdHJhaW50IGFsdGVybmF0aXZlcworCWFuZCBoYW5kaWNhcCB0aGVtIHNvIHNwaWxsIHJlZyB3b24ndCBiZSBhbiBmcCByZWcuCisKKwkqIHBhcnNlLnkgKHl5ZXJyb3IpOiBVc2UgdGhlIGFyZyBhcyBwYXJ0IG9mIHRoZSBlcnJvciBtZXNzYWdlLgorCisJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogR2l2ZSB0aGUgUkVTVUxUX0RFQ0wgdHlwZSBpbnQgcmF0aGVyCisJdGhhbiBjaGFyIG9yIHNob3J0LgorCSogdHlwZWNoZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IENvbnZlcnQgdmFsdWUgZnJvbSBmbidzIHJldHVybiB0eXBlCisJdG8gdGhlIFJFU1VMVF9ERUNMJ3MgdHlwZS4KKworCSogQXZvaWQgZ2VuZXJhdGluZyBkYnggeHJlZnMgdG8gZW51bXMsIHNpbmNlIGRieCBsb3NlcyBvbiB0aGVtLgorCURvIHRoaXMgYnkgb3V0cHV0dGluZyBhbGwgdHlwZXMgaW4gb3JkZXIgb2YgZGVmaW5pdGlvbi4KKwlUaGlzIGlzIGRvbmUgb25seSBmb3IgdG9wLWxldmVsIHR5cGVzOyBwcm9ibGVtIHJlbWFpbnMgZm9yIGxvY2FsIG9uZXMuCisKKwkqIGRlY2wuYyAoZmluaXNoX2RlY2wpOiBEbyByZXN0X29mX2RlY2xfY29tcGlsYXRpb24gZm9yIFRZUEVfREVDTHMuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogRG8gZGJ4b3V0X3N5bWJvbCBmb3IgdGhlbS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBDaGVjayBERUNMX1JUTCBvbmx5IGZvciBmbnMgYW5kIHZhcmlhYmxlcy4KKwlGb3IgYSBUWVBFX0RFQ0wsIGlnbm9yZSBpdCBpZiB0aGUgdHlwZSB3YXMgYWxyZWFkeSBvdXRwdXQKKwlhbmQgaXRzIHByZWZlcnJlZCBuYW1lIGlzIHRoZSBUWVBFX0RFQ0wuICBFbHNlIG91dHB1dCB0eXBlIGluIGZ1bGwuCisKKwkqIGRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBwcmVmZXIgdHlwZWRlZiBuYW1lcyB0byB0eXBlIHRhZyBuYW1lcy4KKworCSogc3Rvci1sYXlvdXQuYyAoY2hhaW5fdHlwZSk6IEJ1aWxkIGNoYWluIGluIGZvcndhcmQgb3JkZXIuCisKKworCSogdG0tM2IxLmggKEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCk6IEVycm9yIGdldHRpbmcgbGVuZ3RoIG9mIHRhYmxlLgorCisJKiB0bS0zYjEuaDogI2RlZmluZSBTR1NfM0IxIHdhcyBtaXNzaW5nLgorCisJKiB0eXBlY2hlY2suYyAoYnVpbGRfY29tcG91bmRfZXhwcik6IElnbm9yZSBub24tdm9sYXRpbGUgc3ViZXhwcnMuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFNpbXBsaWZ5ICh1bnNpZ25lZCkgZm9vID49IDAsIGV0Yy4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBTZXQgVFlQRV9QUkVDSVNJT04gb2YgcHRyIHR5cGVzLgorCitXZWQgTWF5ICA0IDA4OjA2OjI1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogcGFyc2UueTogRG9uJ3QgdXNlIHRoZSBCaXNvbiBAIGNvbnN0cnVjdCwgc2luY2UgaXQgbWFrZXMgcGFyc2VyIHNsb3cuCisKKwkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRGVsZXRlIEZJTEVOQU1FIGFuZCBMSU5FIGFyZ3MuCisKKwkqIHR5cGVjaGVjay5jIChkaWdlc3RfaW5pdCk6IE5vIHBlZGFudGljIHdhcm5pbmcgZm9yIGFycmF5PSJzdHJpbmciLgorCitUdWUgTWF5ICAzIDA5OjA5OjMwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKG1haW4pOiBJZ25vcmUgYC1XY29tbWVudCcuCisJKiBnY2MuYzogUGFzcyAtV2FsbCB0byBjcHAgKHdoaWNoIHRyZWF0cyBpdCBsaWtlIC1XY29tbWVudCkuCisKKwkqIHRtLWlzaTY4Lmg6IEdyZWF0bHkgc2ltcGxpZmllZDsgbm93IHdvcmtzIG9ubHkgd2l0aCBHQVMuCisKKwkqIHRtLW02OGsuaCAoRU1QVFlfRklFTERfQk9VTkRBUlkpOiBub3cgMTYgKHJpZ2h0IG9uIFN1biwgSVNJIGFuZCBIUCkuCisJKiB0bS1zdW4zLmg6IE5vIG5lZWQgdG8gcmVkZWZpbmUgaXQuCisKKwkqIGRlY2wuYyAoZmluaXNoX3N0cnVjdCk6IERvbid0IGV2ZXIgbWFrZSBERUNMX0FMSUdOIHNtYWxsZXIuCisKKwkqIGRlY2wuYzogUmVuYW1lIG1pbiwgbWF4IHRvIE1JTiwgTUFYLgorCisJKiB0eXBlY2hlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEF2b2lkIHdhcm5pbmcgaWYgYXNzaWduaW5nCisJYSBgdm9pZCAqJyBmcm9tIGEgYGNvbnN0IHZvaWQgKicuCisKKwkqIGNvbWJpbmUuYyAoRkFLRV9FWFRFTkRfU0FGRV9QKTogVHVybiBvZmYgZm9yIG1lbSByZWZzOyBhdm9pZCBmYXVsdHMuCisKK01vbiBNYXkgIDIgMDc6Mjg6MjcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiB0bS12YXguaDogU3VwcG9ydCAtbWcgc3dpdGNoIHRvIHVzZSBnLWZsb2F0IGluc3RlYWQgb2YgZC1mbG9hdC4KKwlOZXcgbWFjcm9zIFRBUkdFVF9HX1NXSVRDSCwgQVNNX0RPVUJMRV9DSEFSLgorCUNoYW5nZXMgaW4gVEFSR0VUX1NXSVRDSEVTLCBBU01fT1VUUFVUX0RPVUJMRS4KKwlEZWZpbmUgY29kZSBgIycgZm9yIFBSSU5UX09QRVJBTkQuCisJKiB2YXgubWQ6IHVzZSBgIycgaW4gb3Bjb2RlcyBmb3IgZG91Ymxld29yZCBmbG9hdC4KKworCSogdG0tdmF4Lmg6IERlZmluZSBVRElWU0kzX0xJQkNBTEwgYW5kIFVNT0RTSTNfTElCQ0FMTC4KKworCSogY2NjcC5jIChtYWluLCBkb19pbmNsdWRlKTogSW1wbGVtZW50IC1JLSBzd2l0Y2guCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gaHVudGluZyBOT1RFX0lOU05fRlVOQ1RJT05fRU5ELAorCXNraXAgZmluYWwgUkVUVVJOIChmb3VuZCBvbiB0aGUgdmF4KS4KKworCSogdG9wbGV2LmMgKG1haW4pOiAtV2FsbCBpcyBlcXVpdiB0byBhbGwgLVcgc3dpdGNoZXMgY29tYmluZWQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2wsIGV4cGFuZF9lbmRfYmluZGluZ3MsCisJZXhwYW5kX3tzdGFydCxlbmR9X2Z1bmN0aW9uKS4gIFRoZSAtbm9yZWcgdHJlYXRtZW50IG9mIGByZWdpc3RlcicgdmFycworCWlzIGV4dGVuZGVkIHRvIHZhcnMgdXNlZCBhcyBhZGRyZXNzZXMgb2YgdmFycyBpbiBtZW1vcnkgKHZhcnlpbmctc2l6ZQorCXN0cnVjdHVyZXMpLgorCSh1c2VfdmFyaWFibGUpOiBFbWl0IFVTRSBmb3IgcmVncyB1c2VkIGluIHNwZWNpZmllZCBydHguCisKKwkqIGNzZS5jIChmb2xkX2NjMCk6IFN0YWNrLWZyYW1lIGFkZHJlc3NlcyBhcmUgYWx3YXlzIG5vbnplcm8uCisJKGZvbGRfcnR4KTogMDIwMCBiaXQgaW4gcHJldl9pbnNuX2NjMCBtZWFucyBvbmx5IHplcm9uZXNzIGlzIGtub3duLgorCisJKiBwYXJzZS55IChwYXJtbGlzdCk6IHBvcGxldmVsIG5lZWRzIDMgYXJncy4KKworU3VuIE1heSAgMSAwNzoyMDozNCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiB0eXBvIGNoZWNraW5nIGZvciBpbmNvbXBsZXRlIHJldHVybiB0eXBlLgorCisJKiBlbWl0LXJ0bC5jIChyZXN0b3JlX3JlZ19kYXRhKTogSWYgYSBwc2V1ZG8gYXBwZWFycyBub3doZXJlLAorCWRvbid0IGxlYXZlIGl0cyBzbG90IGVtcHR5OyBjcmVhdGUgYSBwc2V1ZG8gZm9yIHRoYXQgc2xvdC4KKworCSogVmVyc2lvbiAxLjIxIHJlbGVhc2VkLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogTWVyZ2UgZHVwbGljYXRlIGNvZGUgZm9yIHN0cnVjdHVyZV92YWx1ZV9hZGRyLgorCisJKiBlbWl0LXJ0bC5jIChyZXN0b3JlX3JlZ19kYXRhKTogRGVsZXRlIGVycm9yIGNoZWNrOyBpdCdzIGxlZ2l0IGZvcgorCWEgcHNldWRvIHJlZyB0byBhcHBlYXIgbm93aGVyZSBpbiB0aGUgcnRsLgorCitTYXQgQXByIDMwIDA3OjM1OjMxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogRml4IHR5cG8gZm9yIGFyZ19wb2ludGVyX3J0eC4KKworCSogZGVjbC5jIChwb3BsZXZlbCk6IFVuZG8gcHJldmlvdXMgY2hhbmdlIHdpdGggI2lmIDAuCisKKwkqIHN0bXQuYzogYHN0cnVjdCBuZXN0aW5nJyBub3cgcmVjb3JkcyB0aGUgZGVwdGggb24gdGhlIHN0YWNrLgorCUVhY2ggZXhwYW5kX3N0YXJ0Li4uIG11c3QgdXBkYXRlIGFuZCByZWNvcmQgdGhlIGRlcHRoOworCWVhY2ggZXhwYW5kX2VuZC4uLiB1c2VzIG1hY3JvIFBPUFNUQUNLIHRvIHBvcC4KKwlUaGlzIHdheSwgaWYgYSBsZXZlbCBpc24ndCBleHBsaWNpdGx5IHBvcHBlZCwgaXQgd29uJ3QgY2F1c2UKKwljaXJjdWxhciBzdHJ1Y3R1cmUuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFJlcGxhY2Ugd2l0aCBtYWluIHZhcmlhbnQgb25seSBpZiBpbmNvbXBsZXRlLgorCisJKiB0eXBlY2hlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBUZXN0IG9mIGBwZWRhbnRpYycgd2FzIGJhY2t3YXJkcy4KKworCSogZXhwci5jIChTVEFDS19CWVRFUyk6IFR5cG8gaW4gZGVmaW5pdGlvbi4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBSZW5hbWUgY29kZTEgdG8gY29kZTAsCisJYW5kIGxpa2V3aXNlIGZvciBjb2RlMiwgdHQxLCB0dDIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBXcm9uZyBhcmcgb3JkZXIgZm9yIHdhcm5pbmdfd2l0aF9kZWNsLgorCitGcmkgQXByIDI5IDA4OjQxOjA2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF90cmVlKTogTmV3IGFyZyBpcyBkZXB0aCBpbiByZWN1cnNpb24uCisJQWx3YXlzIGRpc2NhcmQgdGhlIG91dGVybW9zdCBMRVRfU1RNVCBiZWluZyBjb3BpZWQ7IG5ldmVyIGRpc2NhcmQgYW55CisJb3RoZXJzLiAgVGhpcyB3YXkgdGhlIGNvcGllZCBMRVRfU1RNVHMgY29ycmVzcG9uZCB0byB0aGUgY29waWVkIE5PVEVzLgorCisJKiB2YXJhc20uYyAoZGVjb2RlX3J0eF9jb25zdCk6IEZvciBTWU1CT0xfUkVGLCB1c2Ugc3RyaW5nIGFkZHJlc3MKKwlub3QgYWRkcmVzcyBvZiB0aGUgcnR4LiAgTGlicmFyeSBmbnMgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIHRoZSBuYW1lCisJYnV0IG1hbnkgY29waWVzIG9mIHRoZSBTWU1CT0xfUkVGLgorCisJKiBleHByLmMgKGVtaXRfY2FsbF8xKTogTmV3IGFyZyBPTERfQVJHU19TSVpFIGlzIHVzZWQgdG8gcmVzZXQKKwljdXJyZW50X2FyZ3Nfc2l6ZS4KKwkoZW1pdF9saWJyYXJ5X2NhbGwsIGV4cGFuZF9jYWxsKTogUGFzcyBuZXcgYXJnOyBkb24ndCByZXN0b3JlIGl0IGhlcmUuCisKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IERvbid0IG1hcmsgc3AgbGl2ZSBhdCBlbmQgaWYgZm4gaXMgZW1wdHkuCisKKwkqIHBhcnNlLnkgKHBhcnNlX29yX2lkZW50aWZpZXJzXzEpOiBIYW5kbGUgYGVycm9yJyBpbiBoZXJlLCBub3QgaW4KKwljYWxsZXJzIG5vdHlwZV9kZWNsYXJhdG9yIGV0Yy4gIEFsc28gcmVhZCB0aGUgY2xvc2VwYXJlbiBoZXJlLgorCitUaHUgQXByIDI4IDEyOjQzOjUyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IEluIGV4dHp2IHN0cmF0ZWd5LCBoYW5kbGUgdGhlIG9wZXJhbmQKKwlwcmVkaWNhdGVzIGZvciBvcGVyYW5kcyAwLCAxIGFuZCAzLiAgKE5vdCBuZWVkZWQgZm9yIDIuKQorCSogdmF4Lm1kOiBleHR6diBwYXR0ZXJuIGZvciBTSW1vZGUgb3AxIG11c3QgcmVjb2duaXplIGdlbmVyYWxfb3BlcmFuZAorCXNpbmNlIHRoZSBwYXR0ZXJuIG5hbWVkICJleHR6diIgYWxsb3dzIHRoZW0uCisKK1dlZCBBcHIgMjcgMDA6NTI6NDQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfY2FsbF8xKTogTmV3IGFyZyBORVhUX0FSR19SRUcgZGVzY3JpYmVzICMgcmVncworCXVzZWQgZm9yIHBhc3NpbmcgYXJncy4KKwkoZW1pdF9saWJyYXJ5X2NhbGwsIGV4cGFuZF9jYWxsKTogUHJvdmlkZSB0aGF0IGFyZ3VtZW50LgorCisJKiBleHBsb3cuYyAocm91bmRfcHVzaCk6IE5ldyBmbjogcm91bmQgYXJnIHVwIHRvIFNUQUNLX0JPVU5EQVJZLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IFVzZSByb3VuZF9wdXNoIG9uIHNpemUgZm9yIF9fYnVpbHRpbl9hbGxvY2EuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlLXNpemUgb2JqZWN0cy4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBMaWtld2lzZSBmb3IgYXJnc19zaXplLnZhci4KKwlBbHNvIHVzZSBTVEFDS19CT1VOREFSWSB0byByb3VuZCBhIGNvbnN0YW50IGFyZy1ibG9jayBzaXplLgorCVBhc3MgZW1pdF9jYWxsXzEgdGhhdCByb3VuZGVkIHZhbHVlLgorCShlbWl0X2xpYnJhcnlfY2FsbCk6IFJvdW5kIGFyZ19zaXplIHdpdGggU1RBQ0tfQk9VTkRBUlkuCisJKiB0bS1zcHVyLmg6IERlZmluZSBTVEFDS19CT1VOREFSWSBpbnN0ZWFkIG9mIFJPVU5EX0NBTExfQkxPQ0tfU0laRS4KKwkqIHRtLW02OGsuaDogRGVmaW5lIFNUQUNLX0JPVU5EQVJZIGFzIDE2LgorCisJKiBleHByLmMgKGVtaXRfY2FsbF8xKTogRG9uJ3QgY2hhbmdlIGN1cnJlbnRfYXJnc19zaXplLgorCShlbWl0X2xpYnJhcnlfY2FsbCwgZXhwYW5kX2NhbGwpOiBBbHdheXMgcmVzdG9yZSBjdXJyZW50X2FyZ3Nfc2l6ZQorCXRvIGFtYmllbnQgdmFsdWUsIGFmdGVyIGNhbGxpbmcgZW1pdF9jYWxsXzEuCisKKwkqIHRtLWhwOWszMjAuaDogRG9uJ3QgZGVmaW5lIFVTRyBoZXJlLgorCSogY29uZmlnLWhwOWszLmg6IE5ldyBmaWxlLiAgVVNHIGRlZmluZWQgaGVyZS4KKworCSogdG0tM2IxLmg6ICN1bmRlZiBBU01fT1VUUFVUX0FTQ0lJIChhIGRlZm4gY2FtZSBmcm9tIHRtLWhwOWszMjAuaCkuCisKKwkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IgcHJpbWFyaWx5KTogQ2FzdCBhbGwgUklEXy4uLiB0byAoaW50KSBiZWZvcmUKKwl1c2luZyB0aGVtIGluIGFyaXRobWV0aWMuICBQbGFjYXRlcyBDQyBvbiBTZXF1ZW50LgorCisJKiBlbWl0LXJ0bC5jIChlbWl0X2p1bXBfaW5zbik6IFJldHVybiBwcm9wZXIgdmFsdWUsIGZvciBhIFNFUVVFTkNFLgorCSogZW1pdC1ydGwuYyAoZW1pdF9jYWxsX2luc24pOiBIYW5kbGUgU0VRVUVOQ0UgbGlrZSBlbWl0X2p1bXBfaW5zbi4KKworVHVlIEFwciAyNiAwMjo0MToyNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGx1Y2t5LWNoYXJtcy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1hY3JvZXhwYW5kKTogSWYgdHJhZGl0aW9uYWwsIGRvbid0IGRpc2FibGUgY2FsbGVkIG1hY3JvLgorCShtYWNhcmcxKTogV2FzIGZhaWxpbmcgdG8gY291bnQgYmFja3NsYXNoLW5ld2xpbmUgaW5zaWRlIGEgc3RyaW5nCisJaW4gYSBtYWNybyBhcmcgYXMgcGFydCBvZiBmaWxlJ3MgbGluZW51bWJlci4KKworTW9uIEFwciAyNSAxODo0Njo1MyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGx1Y2t5LWNoYXJtcy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBkbyBBcHJpbCAyMCBvcHRpbWl6YXRpb24gb24gZmlyc3QKKwlpdGVyYXRpb247IGxldCBvdGhlciBzaW1wbGVyIG9wdHMgYmUgZG9uZSBiZWZvcmUgdGhpcyBpcyBjb25zaWRlcmVkLgorCitTdW4gQXByIDI0IDAyOjQ1OjI4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChzdGF0aWNwKTogYSBDT05TVFJVQ1RPUiBjYW4gYmUgc3RhdGljLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X2RlZik6IEFsd2F5cyByZXR1cm4gbWVtcmVmLCBub3QgYWRkcmVzcy4KKworCSogZGVjbC5jIChjb21wbGV0ZV9hcnJheV90eXBlKTogTmV3IGZuLCBtYWtlIGFuIGFycmF5IHR5cGUgY29tcGxldGUKKwliYXNlZCBvbiBhbiBpbml0aWFsaXplci4KKwkoZmluaXNoX2RlY2wpOiBVc2UgY29tcGxldGVfYXJyYXlfdHlwZS4KKwkqIHBhcnNlLnkgKGV4cHJfbm9fY29tbWFzKTogV2hlbiBwYXJzaW5nIGEgY29uc3RydWN0b3IsCisJVXNlIGNvbXBsZXRlX2FycmF5X3R5cGUJb24gY29uc3RydWN0b3JzIGZvciBpbmNvbXBsZXRlIGFycmF5IHR5cGVzLgorCisJKiB0eXBlY2hlY2suYyAoZGlnZXN0X2luaXQsIHN0b3JlX2luaXRfdmFsdWUscHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKToKKwlJdCdzIG5vdyBUUkVFX1NUQVRJQywgbm90IFRSRUVfQUREUkVTU0FCTEUsIHRoYXQgcmVjb3JkcyB0aGF0IGFsbCBlbHRzCisJaW4gYSBDT05TVFJVQ1RPUiBhcmUgc2ltcGxlIGNvbnN0YW50cy4KKwkoZGlnZXN0X2luaXQpOiBBIENPTlNUUlVDVE9SIHdpdGggbm9uLW51bGwgdHlwZSBpcyB0cmVhdGVkIGFzIG9yZGluYXJ5CisJZXhwcmVzc2lvbiwgbm90IGFzIGEgYnJhY2VkIGluaXRpYWxpemVyLgorCUFsbG93IGluaXQgb2YgYW4gYXJyYXkgZnJvbSBhbiBhcnJheS12YWx1ZWQgZXhwcjsgd2FybiBpZiBwZWRhbnRpYy4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIENPTlNUUlVDVE9SIGNhc2UpOiBQdXQgaW4gbWVtb3J5IG9ubHkgaWYgc3RhdGljLgorCVdhcyBtYWtpbmcgYW4gZXh0cmFuZW91cyBsZXZlbCBvZiBNRU07IG91dHB1dF9jb25zdGFudF9kZWYgZG9lcyBpdCBhbGwuCisKKwkqIHR5cGVjaGVjay5jIChidWlsZF91bmFyeV9vcCk6IEFsbG93IEFERFJfRVhQUiBvZiBzdGF0aWMgQ09OU1RSVUNUT1IuCisJKGRlZmF1bHRfY29udmVyc2lvbik6IExpa2V3aXNlLgorCShpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQ29uc3RydWN0b3IgaXMgb2sgaWYgc3RhdGljLgorCisJKiBnY2MuYzogQ2hhbmdlIC1mbm9zdGQuLi4gdG8gLW5vc3RkLi4uCisJKiBjY2NwLmMgKG1haW4pOiBMaWtld2lzZS4KKworCSogRXZlcnl3aGVyZTogVXNlIFJFR19OT1RFX0tJTkQgdG8gZ2V0IHRoZSBraW5kIG9mIGEgcmVnIG5vdGUuCisKKwkqIHJ0bC5jIChmaW5kX3JlZ25vX25vdGUpOiBOZXcgZnVuY3Rpb24uCisJKiBmbG93LmMgKGZsb3dfZGVhZHApOiBEZWxldGVkOyBjYWxsZXIgdXNlcyBmaW5kX3JlZ25vX25vdGUuCisJKiBnbG9iYWwtYWxsb2MuYyAocmVnX2RlYWRfcCk6IERlbGV0ZWQuCisJKGdsb2JhbF9jb25mbGljdHMpOiBVc2UgZmluZF9yZWdub19ub3RlIGluc3RlYWQgb2YgcmVnX2RlYWRfcC4KKworCSogZmluYWwuYyAoZmluYWwpIFVzZSBmaW5kX3JlZ19ub3RlIHRvIGxvb2sgZm9yIGEgUkVHX0lOQy4KKwkqIGNvbWJpbmUuYyAoaW5zbl9oYXNfaW5jX3ApOiBkZWxldGVkOyBjYWxsZXJzIHVzZSBmaW5kX3JlZ19ub3RlLgorCSh0cnlfY29tYmluZSk6IFVzZSBmaW5kX3JlZ19ub3RlIHdoZW5ldmVyIGxvb2tpbmcgZm9yIGEgUkVHX0lOQy4KKwkocmVnbm9fZGVhZF9wLCByZW1vdmVfZGVhdGgpOiBDaGVjayB0aGUgUkVHX05PVEVfS0lORCBiZWZvcmUgYXNzdW1pbmcKKwl0aGF0IHRoZSBkYXR1bSBpbiBpdCBpcyBhIFJFRy4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogVXNlIGZpbmRfcmVnX25vdGUgdG8gZmluZCBhIFJFR19FUVVJVi4KKworCSogZ2NjLmM6IERvbid0IGRlbGV0ZSAubyBmaWxlcyBpZiBub3QgYWxsIGNvbXBpbGF0aW9ucyBzdWNjZWVkLgorCShyZWNvcmRfdGVtcF9maWxlKTogTmV3IGFyZyBTVUNDRVNTX09OTFktLWRlbGV0ZSBmaWxlIG9ubHkgaWYgc3VjY2VlZC4KKwkoZGVsZXRlX3RlbXBfZmlsZXMpOiBOZXcgYXJnIFNVQ0NFU1Mgc2F5cyBjb21waWxhdGlvbiBzdWNjZWVkZWQuCisJKHN0b3JlX2FyZyk6IE5vdyAzIHBvc3NpYmlsaXRpZXMgZm9yIGFyZyBURU1QTkFNRVA7IDIgPSBkZWwgb24gc3VjY2Vzcy4KKwkoZG9fc3BlY18xKTogRm9yICVkLCBzZXQgZGVsZXRlX3RoaXNfYXJnIHRvIDIuCisKKwkqIGRlY2wuYyAocG9wbGV2ZWwpOiBXYXJuIGFib3V0IGFueSBzdGlsbC1pbmNvbXBsZXRlIHR5cGUtdGFncy4KKworU2F0IEFwciAyMyAwMjo1NDoxNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHJpY2Uta3Jpc3BpZXMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEZvciBhbGxvY2EsIHJvdW5kIGFyZyB1cCB0byBtdWx0aXBsZQorCW9mIFBBUk1fQk9VTkRBUlkuICBBbHNvIHRvIGNvbnZlcnQgaXQgdG8gUG1vZGUgdW5sZXNzIGl0IGFscmVhZHkgaXMuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF91bmlvbik6IEJ1ZyBpbiAxNCBBcHJpbCBjaGFuZ2U6CisJdXNlIGNhbGxlci1zcGVjaWZpZWQgYWxpZ25tZW50IGFzIG1pbmltdW0sIG5vdCBhcyBtYXhpbXVtLgorCisJKiBwYXJzZS55IChza2lwX3doaXRlX3NwYWNlKTogQXZvaWQgaW5maW5pdGUgbG9vcCBvbiB1bnRlcm0uIGNvbW1lbnQuCisKK0ZyaSBBcHIgMjIgMDA6MjI6NTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBjY2NwLmM6IFRleHQgZm9sbG93aW5nICNlbHNlIG9yICNlbmRpZiBpcyBqdXN0IGEgd2FybmluZy4KKwkocmVzY2FuKTogRGlnaXQtY2FzZSB3YXMgZHJvcHBpbmcgaW50byB0aGUgJC1jYXNlOyByZW9yZGVyLgorCisJKiBjY2NwLmMgKHJlc2Nhbik6IENvbW1lbnQgc3RhcnQgd2hlbiAtdHJhZGl0aW9uYWwgd2FzIG91dHB1dCBhcworCWAvKic7IHNob3VsZCBiZSBub3RoaW5nLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBGaXggcHJldiBjaGFuZ2U6CisJZG8gbm90aGluZyBpZiByYW5nZTFlbmQgPT0gcmFuZ2UyZW5kOworCWRvbid0IGxvc2UgYW55IE5PVEVzIHdoZW4gc3BsaWNpbmcuCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlLWJsb2NrKTogRm9yIENBTExfSU5TTiwgY2xvYmJlciB0aGUgY2FsbC11c2VkIHJlZ3MKKwlvbmx5IGFmdGVyIG1hcmtfc2V0X3JlZ3MgaXMgZG9uZTsgYXZvaWRzIGNvbmZ1c2lvbiBhYm91dCBsaWZlc3BhbgorCW9mIGZ1bmN0aW9uIHZhbHVlIHJlZy4KKworCSogZ2NjLmM6IFBhc3MgLVdjb21tZW50IHRvIGNwcC4KKworCSogY2NjcC5jIChtYWluLCByZXNjYW4pOiBJZiAtV2NvbW1lbnQsIHdhcm4gaWYgYC8qJyBpbnNpZGUgY29tbWVudC4KKworCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBJZ25vcmUgYGlubGluZScgZGVjbCBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKworCSogbTY4ay5tZCAoY2FzZXNpKTogU3BsaXQgaXQgdXAgaW50byBzdWJyb3V0aW5lcywgc28gaW5zbnMgZW1pdHRlZAorCWJ5IHRoZSBjYWxsIHRvIG1lbW9yeV9hZGRyZXNzIChvbiA2ODAwMCkgY29tZSBpbiB0aGUgcmlnaHQgcGxhY2UuCisKKwkqIGNvbWJpbmUuYyAocmVjb3JkX2RlYWRfYW5kX3NldF9yZWdzKTogTm90aWNlIHN0b3JpbmcgaW4gYSBTVUJSRUcuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogSW5zbiB0byBjb3B5IGEgc3Vicm91dGluZSdzCisJcmV0dXJuLXZhbHVlIHdhcyBiZWluZyBvdXRwdXQgdHdpY2UsIG9uY2UgaW5jb3JyZWN0bHkuCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IEEgc3RhY2stcHVzaCBpbnNuIGRvZXMgbm90IGludmFsaWRhdGUKKwlhbiBlcXVpdiBmb3IgYSBnb2FsIGluIG1lbW9yeS4KKwlBbnkgb3RoZXIgd3JpdGUgdG8gbWVtb3J5IGRvZXMgaW52YWxpZGF0ZSBhbnkgZ29hbCBpbiBtZW1vcnkKKwkoUEFSQUxMRUwgY2FzZSBmYWlsZWQgdG8gY2hlY2sgZm9yIHRoaXMpLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogSW4gdGhlIGV4dHp2IGNsYXVzZSwgZm9yY2Ugc2hpZnRlZCB2YWx1ZQorCW91dCBvZiBtZW1vcnkgaWYgLWZmb3JjZS1tZW0uCisKKwkqIHByaW50LXRyZWUuYyAocHJ0eXBlaW5mbyk6IFNvbWUgYXR0cmlidXRlcyB3ZXJlIG1pc3NpbmcuCisJKGR1bXApOiBJbiAuLi5fVFlQRSBub2RlcywgaWdub3JlIHRoZSBUUkVFX0NIQUlOIGZpZWxkLgorCisJKiBjc2UuYyAobm90ZV9tZW1fd3JpdHRlbik6IFB1c2hpbmcgb24gc3RhY2sgZG9lcyBub3QgaW52YWxpZGF0ZSBtZW0uCisKKwkqIHZheC5tZCAoZXh0di9hbmRsIHBlZXBob2xlIG9wdCk6IE1hZGUgaW5jb3JyZWN0IGNvZGUgaWYgb3V0cHV0IHdhcworCXB1c2hlZCBvbiBzdGFjay4gIEFkZGVkIHNwZWNpYWwgY2FzZSBjb2RlLgorCShleHR2LCBleHR6diBmb3IgU0ltb2RlIG9wZXJhbmQpOiBSZXF1aXJlIHJlZ2lzdGVyX29wZXJhbmQuCisKK1RodSBBcHIgMjEgMDA6MjQ6NTIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjb3JuLWNoZXguYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBSb3VuZCBjdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplIHVwLgorCisJKiBpbnRlZ3JhdGUuYzogYHB1c2hsZXZlbCcgYXJnIHdhcyBtaXNzaW5nLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBVbmRvIHJlc3Qgb2YgTWFyY2ggMjkgY2hhbmdlOgorCVdoZW4gYSBuYW1lZCB0eXBlIGlzIGZpcnN0IHNlZW4gaW5zaWRlIGFub3RoZXIgdHlwZSwgb3V0cHV0IGFuIHhyZWYKKwlhbmQgbGV0IHRoZSByZWFsIGRlZmluaXRpb24gY29tZSBvdXQgbGF0ZXIuCisJSXQgaXMgc3RyYW5nZSB0aGF0IFN1biBkYnggaGFzIHNvbWV0aW1lcyBhcHBlYXJlZCB0byBkZW1hbmQKKwlvbmUgc3RyYXRlZ3kgYW5kIHNvbWV0aW1lcyBhcHBlYXJlZCB0byBkZW1hbmQgdGhlIG90aGVyLgorCisJKiB0eXBlY2hlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEFsbG93IGNvbnZlcnNpb24gdG8gb3IgZnJvbQorCWBjb25zdCB2b2lkIConLCBldGMuLCB1bmxlc3MgcGVkYW50aWMuCisKKwkqIGRlY2wuYyAoZ2V0X3Bhcm1fdHlwZXMpOiBGb3IgYGZvbyAodm9pZCl7fScsIHNldCBsYXN0X2Z1bmN0aW9uX3Bhcm1zCisJdG8gbmlsIHNvIHN0b3JlX3Bhcm1fZGVjbHMgd29uJ3QgbG9zZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IChwbHVzIChwbHVzIFggTikgLU4pID0+IFguCisKKwkqIGV4cGxvdy5jICh7YW50aV8sfWFkanVzdF9zdGFjayk6IERvbid0IG1ha2UgYSBjb3B5IG9mCisJYHN0YWNrX3BvaW50ZXJfcnR4Jy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBUeXBvIHRlc3RpbmcgZm9yIHRoZQorCVVTRSB0aGF0IGluZGljYXRlcyBhIENBTExfSU5TTidzIHZhbHVlIGlzIGJlaW5nIHJldHVybmVkLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBhbGxvY2EgY2FzZSk6IENvcHkgYXJnIHRvIHJlZyBiZWZvcmUKKwlhZGp1c3Rpbmcgc3RhY2ssIHRvIGF2b2lkIGludmFsaWQgaW5zbnMgb24gc29tZSBtYWNoaW5lcy4KKworV2VkIEFwciAyMCAwMDoxNToxNCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHJpY2Uta3Jpc3BpZXMuYWkubWl0LmVkdSkKKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBXaGVuIHNob3J0ZW5pbmcsCisJZ2V0X25hcnJvd2VyIG1heSBtYWtlIG5vIGNoYW5nZSBiZWNhdXNlIEFSR24gaXMgYWxyZWFkeSBuYXJyb3cuCisJSW4gdGhpcyBjYXNlLCBzZXQgVU5TSUdORVBuIGZyb20gQVJHbidzIHR5cGUuCisKKwkqIHR5cGVjaGVjay5jOiBSZW5hbWUgQVJHMSxBUkcyIHRvIEFSRzAsQVJHMSwgZXRjLiBpbiBzZXZlcmFsIGZucy4KKworCSogdG0tdmF4Lmg6IFR1cm4gb2ZmIGNvbnRpbnVhdGlvbiBvbiBEQlggb3V0cHV0LgorCisJKiB0eXBlY2hlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbCk6IERvbid0IGNoYW5nZSBfX2J1aWx0aW5fZmZzIHRvIGFuCisJRkZTX0VYUFIuICBOb3RlIHRoYXQgX19idWlsdGluX2FsbG9jYSBoYXMgYWx3YXlzIG1hZGUgYSBDQUxMX0VYUFIuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogTmV3IGZ1bmN0aW9uIGV4cGFuZHMgYWxsIENBTExfRVhQUnMgdGhhdAorCWFyZSByZWFsbHkgYnVpbHQtaW4gZnVuY3Rpb25zLgorCShwcmVleHBhbmRfY2FsbHMpOiBEbyBub3RoaW5nIHRvIGEgQ0FMTF9FWFBSIGZvciBhIGJ1aWx0LWluIGZ1bmN0aW9uLgorCisJKiBsb29wLmMgKGNvdW50X2xvb3BfcmVnc19zZXQpOiBEb24ndCBtb3ZlIGEgcmVnIHRoYXQgaXMgaW4gYSBDTE9CQkVSLgorCisJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IFdhcyBnZXR0aW5nIGhhcmQgcmVnJ3MgbW9kZSBmcm9tCisJdGhlIHdyb25nIHBsYWNlLgorCisJKiBydGwuYyAobm90ZV9zdG9yZXMpOiBUeXBvIGluIGNoZWNraW5nIHZlY3RvciBlbHQgZm9yIFNFVCB2cyBDTE9CQkVSLgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBJZiByZXN0b3Jpbmcgc3RhY2sgbGV2ZWwsIAorCWZpcnN0IGRvIHBlbmRpbmcgc3RhY2sgYWRqdXN0IChzbyBpdCB3b24ndCBiZSBkb25lIGVycm9uZW91c2x5IGFmdGVyKS4KKwkoZXhwYW5kX2dvdG8pOiBsaWtld2lzZS4KKworCSogcnRsLmg6IExBQkVMX05VU0VTIHdhcyBhbiBydHguICBJdCBzaG91bGQgYmUgYW4gaW50LgorCSogc3RtdC5jIChleHBhbmRfbGFiZWwsIGV4cGFuZF9nb3RvKTogRGVsZXRlIGZyb2JiaW5nIHdpdGggTEFCRUxfTlVTRVM7CisJdGhlIHZhbHVlIHN0b3JlZCB0aGVyZSB3YXMgdGhlIHNhbWUgYXMgdGhlIENPREVfTEFCRUwgcnR4LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEZXRlY3QgIGlmIChmb28pIC4uLjsgZWxzZSB7IC4uLiBicmVhazt9CisJYW5kIGNoYW5nZSB0byAgaWYgKCEgZm9vKSB7IC4uLiBicmVhazt9IGVsc2UgLi4uOyBzbyBjYW4gZHJvcCBvdXQuCisJKG5leHRfbGFiZWwpOiBOZXcgZm4gcmV0dXJucyB0aGUgbmV4dCBsYWJlbCBhZnRlciBnaXZlbiBpbnNuLgorCitUdWUgQXByIDE5IDIxOjMwOjA1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IERlbGV0ZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBzdGFjayBwdHIuCisJKG1hcmtfc2V0X3JlZ3MsIG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCisJKGxpZmVfYW5hbHlzaXMpOiBNYXJrIHN0YWNrIHB0ciBsaXZlIGF0IGVuZCBvZiBmbiBpZiBuZWNlc3NhcnkuCisJKHByb3BhZ2F0ZV9ibG9jayk6IE1hcmsgc3RhY2sgcHRyIGxpdmUgbGVhZGluZyB1cCB0byBhIENBTExfSU5TTi4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogI2lmIDAgYXJvdW5kIHN0YWNrLWFkanVzdC1kZWxldGlvbiBjb2RlLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBDaGFuZ2UgY29uc3RfYXJnIGZyb20gYW4gYXJyYXkgdG8gMyBzZXBhcmF0ZQorCXNjYWxhcnMgZm9yIHRoZSBmaXJzdCB0aHJlZSBvcGVyYW5kcy4KKwlIYW5kbGUgU0lHTl9FWFRFTkQgYW5kIFpFUk9fRVhURU5ELgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBJZiBhcmcgaXMgMCwgcmV0dXJuIDAuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBTZXBhcmF0ZSB2YXJzIGZvciBvbGQgcGF0dGVybiBhbmQgbmV3IGluc24uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBTZXQgVFJFRV9BRERSRVNTQUJMRSBpZiBjYWxsIGlzIG5vdCBpbmxpbmVkLgorCitUdWUgQXByIDE5IDAyOjI1OjIyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjIwIHJlbGVhc2VkLgorCisJKiB0bS1uczMyay5oOiBEZWZpbmUgbmV3IHJlZyBjbGFzcyBHRU5fT1JfRkxPQVRfUkVHUworCXNvIHRoYXQgR0VORVJBTF9SRUdTIGFuZCBGTE9BVF9SRUdTIGhhdmUgYSB1bmlvbi4KKworCSogdG0tbnMzMmsuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogUmVjb2duaXplIGEgc3RhY2stcHVzaC4KKwkqIG5zMzJrLm1kOiBNYW55IGNvbnN0cmFpbnRzIG11c3Qgbm93IGFsbG93IG9yIHJlamVjdCBwdXNoZXMuCisJRGVsZXRlIHRoZSBzcGVjaWFsIHBhdHRlcm5zIGZvciBwdXNoaW5nLgorCitNb24gQXByIDE4IDA2OjAyOjM5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgcmljZS1rcmlzcGllcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGZvcmdldF9vbGRfcmVsb2Fkcyk6IEZvciBhIG11bHRpd29yZCBoYXJkIHJlZywKKwlmb3JnZXQgb2xkIHJlbG9hZHMgZm9yIGVhY2ggd29yZC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFR5cG8gaW4gY2FsbGluZyBwdXNoX3JlcGxhY2VtZW50LgorCisJKiB0bS1uczMyay5oIChIQVJEX1JFR05PX01PREVfT0spOiBGYWlsZWQgdG8gYWxsb3cgZnAgcmVncyBmb3IgU0Ztb2RlLgorCitTdW4gQXByIDE3IDAxOjIxOjM1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogdG0tc2VxdWVudC5oIChQUklOVF9PUEVSQU5EKTogSGFuZGxlIGFic29sdXRlIGludGVnZXIgbWVtYWRkcmVzcy4KKworCSogbnMzMmsubWQ6IEFkZCBESW1vZGUgcHVzaCBpbnNucy4gIEFkZCBRSW1vZGUgYW5kIEhJbW9kZSBwdXNoIGluc25zLgorCVN1cHBseSBtaXNzaW5nIHN0YXRlbWVudCBpbiBtb3ZzZi4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogRG9uJ3QgY29udGluIGJlZm9yZSAxc3QgZmllbGQgb2Ygc3RydWN0LgorCisJKiBkYnhvdXQuYyAoZGJ4X2NvbnRpbnVlKTogVXNlIERCWF9DT05USU5fQ0hBUiBpbnN0ZWFkIG9mIGJhY2tzbGFzaC4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBPdiB2YXgsIHRoZSAibG9vcC1lbnRyeSBqdW1wIiBjYW4gYmUgYSByZXR1cm4sCisJaW4gd2hpY2ggY2FzZSBwZXJoYXBzIHRoZXJlIGlzIG5vIGxhYmVsIGZvbGxvd2luZyBpdC4KKwlEZXRlY3QgcGhvbmluZXNzIG9mIGxvb3AgYmVmb3JlIGxvb2tpbmcgZm9yIHRoYXQgbGFiZWwuCisKKwkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBCdWlsdGluIGZuIG5hbWVzIHN0YXJ0IHdpdGggYF9fJy4KKworCSogdHlwZWNoZWNrLmMgKHNob3J0ZW5fY29tcGFyZSk6IFdhcm4gYWJvdXQgY29uc3RhbnQgcmVzdWx0IG9ubHkgaW4KKwljYXNlcyBsaWtlIChjaGFyKXggPCAweDgwLCB3aGVyZSBvbGQgQyBjb21waWxlcnMgbWFkZSBpdCAtMHg4MC4KKworCSogdmF4Lm1kOiBBbGwgamJzL2piYy9qbGJzL2psYmMgcGF0dGVycyB3aXRoIG9wMCBpbiBTSW1vZGUKKwltdXN0IHJlamVjdCBtb2RlLWRlcGVuZGVudCBtZW1vcnkgYWRkcmVzc2VzLgorCisJKiByZWNvZy5jIChtb2RlX2luZGVwZW5kZW50X29wZXJhbmQpOiBUZXN0IGZvciBnZW5lcmFsIG9wZXJhbmQKKwl0aGF0IGRvZXNuJ3QgaGF2ZSBhIG1vZGUtZGVwZW5kZW50IG1lbW9yeSBhZGRyZXNzLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZnVuY3Rpb24pOiBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FLCBpZiBkZWYsCisJaXMgbm93IHJlc3BvbnNpYmxlIGZvciBvdXRwdXR0aW5nIHRoZSBmdW5jdGlvbiBuYW1lIGFzIGEgbGFiZWwuCisKK1NhdCBBcHIgMTYgMDU6MDI6NTUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGRvX3hpZmRlZik6IFdhcm4gYWJvdXQgcHVuY3R1YXRpb24gb3Igb3RoZXIganVuayBpbiBhcmd1bWVudC4KKwlXYXJuIGFib3V0IG5vIGFyZ3VtZW50LiAgSWYgcGVkYW50aWMsIHdhcm4gaWYgYXJnIHN0YXJ0cyB3aXRoIGRpZ2l0LgorCUlmIHRyYWRpdGlvbmFsLCBpZ25vcmUgYWxsIGFmdGVyIGZpcnN0IG5vbi1pZGNoYXIgYW5kIG5ldmVyIHdhcm4uCisKK1RodSBBcHIgMTQgMDE6MTI6NTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFR5cG8gZm9yIGFkZHJlc3NhYmxlIHBhcm1zLgorCisJKiBjc2UuYyAoaW5zZXJ0X3JlZ3MpOiBDb3B5aW5nIGhhbGYgYSBESW1vZGUgaW50byBoYWxmIG9mIGFub3RoZXIKKwlkb2VzIG5vdCBtYWtlIHRoZSB0d28gREltb2RlIHJlZ3MgZXF1aXZhbGVudC4KKworCSogcmVjb2cuYyAoZ2VuZXJhbF9vcGVyYW5kKTogV2FzIGZhaWxpbmcgdG8gYWNjZXB0IHN5bWJvbF9yZWY6U0kKKwl3aGVuIE1PREUgYXJnIHdhcyBWT0lEbW9kZS4KKworCSogZXhwci5jIChwcmVleHBhbmRfY2FsbHMpOiBGb3IgUlRMX0VYUFIsIGRvIG5vdGhpbmcuCisKKwkqIGRlY2wuYyAoc3RhcnRfZW51bSwgYnVpbGRfZW51bWVyYXRvcik6IFJlbWVtYmVyIGRlZmF1bHQgZm9yIG5leHQgb25lCisJYXMgYSB0cmVlIG5vZGUgKHNvIHRoZSBoaWdoLWhhbGYgaXNuJ3QgbG9zdCBpbiBhIG5lZ2F0aXZlIG9uZSkuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF97cmVjb3JkLHVuaW9ufSk6IFBheSBhdHRuIHRvIGluaXRpYWwgdmFsdWUKKwlvZiBUWVBFX0FMSUdOIGluIGNvbXB1dGluZyBmaW5hbCBhbGlnbm1lbnQuCisJKGxheW91dF91bmlvbik6IFJvdW5kIHNpemUgdXAgdG8gbXVsdGlwbGUgb2YgdGhlIGFsaWdubWVudC4KKworCSogZGVjbC5jIChmaW5pc2hfc3RydWN0KTogRG9uJ3QgYWx0ZXIgc2l6ZSBhZnRlciB0eXBlIGlzIGxhaWQgb3V0LgorCUluc3RlYWQsIHNldCBUWVBFX0FMSUdOIGJlZm9yZSBsYXlvdXRfdHlwZS4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBJbnRyb2R1Y2UgcmVnX2hhc19vdXRwdXRfcmVsb2FkLgorCUlmIHRoZXJlIGFyZSB0d28gc2VwYXJhdGUgcmVsb2FkcyAob25lIGluIGFuZCBvbmUgb3V0KQorCWZvciB0aGUgc2FtZSAoaGFyZCBvciBwc2V1ZG8pIHJlZywgYWx3YXlzIHNldCByZWdfbGFzdF9yZWxvYWRfcmVnCisJYmFzZWQgb24gdGhlIG91dHB1dCByZWxvYWQuCisKK1dlZCBBcHIgMTMgMjE6MjY6MTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IEFsd2F5cyBiYXJmIGlmIGEgImNvbnN0YW50IgorCXJlZ2lzdGVyIGlzIGF1dG9pbmNyZW1lbnRlZC4KKworCSogcGFyc2UueSAoc3RydWN0c3ApOiBzdXNwZW5kX21vbWVudGFyeSBiZWZvcmUgc3RhcnRfZW51bTsKKwllbHNlIHNvbWUgbm9kZXMgbWFkZSBieSBzdGFydF9lbnVtIG1pZ2h0IGJlIG1vbWVudGFyeS4KKworCSogc3RtdC5jIChleHBhbmRfc3RhcnRfY2FzZSk6IE5ldyBhcmcgaXMgbm9taW5hbCB0eXBlIGZvciBjb21wYXJpc29uCisJKHdoaWNoIGlzIHRoZSBwcm9tb3RlZCB0eXBlIG9mIHRoZSBpbmRleCBleHByZXNzaW9uKS4KKwkocHVzaGNhc2UpOiBBbHdheXMgY29udmVydCBWQUxVRSB0byB0aGF0IG5vbWluYWwgdHlwZQorCWJlZm9yZSB2YWxpZGF0aW5nIGl0LgorCSogcGFyc2UueSAoY2FzZSBzdG10KTogUHJvbW90ZSBlYWNoIGNhc2UtdmFsdWUgYmVmb3JlIHB1c2hjYXNlLgorCSogdHlwZWNoZWNrLmMgKGNfZXhwYW5kX3N0YXJ0X2Nhc2UpOiBQcm9tb3RlIHRoZSBpbmRleC1leHByCisJdG8gZGV0ZXJtaW5lIHRoZSBub21pbmFsIHR5cGUsIGJlZm9yZSBnZXRfbmFycm93ZXIuCisKK1dlZCBBcHIgMTMgMTI6NDM6MDggMTk4OCAgQ2hyaXMgSGFuc29uICAoY3BoIGF0IGtsZXBoKQorCisJKiB0bS1ocDlrMzIwLmg6IERlZmluZSBBU01fRk9STUFUX1BSSVZBVEVfTkFNRS4gIEhQVVggYXNtIGZvcmJpZHMKKwlgLicgaW4gaWRlbnRpZmllcnMsIHNvIHVzZSBgX19fJyAodGhlcmUgaXMgc29tZSBkYW5nZXIgaW4gdGhpcyBjaG9pY2UpLgorCitUdWUgQXByIDEyIDIzOjI2OjQ4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBNYWtlIDEgZXh0cmEgc2xvdCBpbiByZWdzX2xpdmVfYXQuCisKKwkqIHN0bXQuYyAob3B0aW1pemVfYml0X2ZpZWxkKTogRnVuY3Rpb24gbW92ZWQgZnJvbSByZWxvYWQxLmMuCisJV2hlbiBuZWVkIHRvIGdlbmVyYXRlIGEgU0lHTl9FWFRFTkQgb3IgWkVST19FWFRFTkQsIG1ha2UgaXQgYSBzZXBhcmF0ZQorCWluc24gYW5kIHVzZSBnZW5fZXh0ZW5kX2luc24gdG8gbWFrZSBpdC4KKwkqIG9wdGFicy5jIChnZW5fZXh0ZW5kX2luc24pOiBOZXcgZm4sIGNvbnN0cnVjdCBib2R5IG9mIGFuIGluc24KKwl0byBleHRlbmQgWSBhbmQgc3RvcmUgaW4gWC4KKworTW9uIEFwciAxMSAxOToyMDo1NyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHJpY2Uta3Jpc3BpZXMuYWkubWl0LmVkdSkKKworCSogZGVjbC5jIChmaW5pc2hfZGVjbCk6IEVycm9yIGlmIHN0YXRpYyB2YXIgaGFzIHZhcmlhYmxlIHNpemUuCisKKwkqIHBhcnNlLnkgKHl5bGV4KTogV2FybiBpZiBpbnQgY29uc3QgaXMgb3V0IG9mIHJhbmdlLgorCisJKiBwYXJzZS55OiBOZXcga2V5d29yZCBfX2FsaWdub2YuCisJKiB0eXBlY2hlY2suYyAoY19hbGlnbm9mKTogR2l2ZW4gYSB0eXBlLCByZXR1cm4gaXRzIGFsaWdubWVudCBpbiBieXRlcy4KKworCSogdHlwZWNoZWNrLmMgKGNfc2l6ZW9meyxfbm93YXJuKSk6IERvbid0IHJldHVybiBpbnRlZ2VyX29uZV9ub2RlOworCXVzZSBidWlsZF9pbnQgdG8gbWFrZSBzdXJlIHdlIGdldCBzb21ldGhpbmcgd2l0aCB0eXBlIGBzaXpldHlwZScuCisKKwkqIFN1cHBvcnQgdmFyaWFibGUtc2l6ZWQgc3RydWN0dXJlcyAoY29udGFpbmluZyB2YXItc2l6ZWQgYXJyYXlzKS4KKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBIYW5kbGUgcGFybXMgd2hvc2Ugc2l6ZSB2YXJpZXMuCisJVXNlIGBtZW1vcnlfYWRkcmVzcycgd2hlbiBjb25zdHJ1Y3RpbmcgbWVtcmVmcyB0byBhcmdzOworCW5vIG5lZWQgdG8gc2V0IGBpbnZhbGlkX3N0YWNrX3Nsb3QnLgorCURvbid0IG1ha2UgYSBSRUdfRVFVSVYgbm90ZSBmb3IgYSBzY2FsYXIgYXJnIGF0IHZhcmlhYmxlIG9mZnNldC4KKwkqIHN0b3ItbGF5b3V0LmMgKGdlbm9wLCBidWlsZF9pbnQpOiBObyBsb25nZXIgYHN0YXRpYycuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGNvbnZlcnRfdW5pdHMpOiBPcHRpbWl6ZSBjZWlsIChjZWlsKHgsMikqMiwgNCkgZXRjLgorCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogRG9uJ3QgYWJvcnQgaWYgdmFyLXNpemVkIG9iamVjdCBoYXMgaW5pdC4KKwlDb252ZXJ0IHZhcmlhYmxlIHNpemUgZnJvbSB1bml0cyBvZiBERUNMX1NJWkVfVU5JVCB0byB1bml0cyBvZiBieXRlcy4KKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IEFyZyBBUkdTX1NPX0ZBUiBpcyBub3cgYW4gcnR4LgorCVBheSBhdHRlbnRpb24gdG8gQVJHU19BRERSIGV2ZW4gaWYgbWFjaGluZSBoYXMgcHVzaCBpbnNucy4KKwkoZXhwYW5kX2NhbGwpOiBIYW5kbGUgdmFyaWFibGUtc2l6ZWQgYXJndW1lbnRzLgorCUlmIGhhdmUgYW55IHN1Y2gsIHB1c2ggZW50aXJlIGFyZy1ibG9jayBpbiBhZHZhbmNlLgorCVJlY29yZCBlYWNoIGFyZydzIG9mZnNldCBkdXJpbmcgZmlyc3QgbG9vcCBhbmQgZG9uJ3QgY2hhbmdlIGFyZ3Nfc2l6ZQorCWR1cmluZyB0aGUgYWN0dWFsIHB1c2hpbmcgbG9vcDsgdGhpcyB3YXkgdGhlIGFjdHVhbCBwdXNoaW5nIGxvb3AKKwl3b3JrcyByZWdhcmRsZXNzIG9mIGFyZy1vcmRlciBpZiBhcmctYmxvY2sgd2FzIHB1c2hlZCBpbiBhZHZhbmNlLgorCShwdXNoX2Jsb2NrKTogQ29weSBTSVpFIHRvIHJlZyB1bmxlc3MgaXQncyBhIHJlZyBvciBjb25zdGFudC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBJZiBjb252ZXJ0aW5nIENFSUxfRElWIHRvIEZMT09SX0RJViwKKwltYWtlIG5ldyBwc2V1ZG8gZm9yIGluY3JlbWVudGVkIHZhbHVlLCB0byBoZWxwIGNzZSB1bmRlcnN0YW5kLgorCitTdW4gQXByIDEwIDAwOjA3OjQ1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IFR3byBkdW1iIGJ1Z3MgY2FsbGluZyBlbWl0X2NhbGxfMS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBIYW5kbGUgY2FzZSBvZiAoTUVNIChSRUcgZnJhbWVwdHIpKS4KKworCSogY2NjcC5jIChza2lwX2lmX2dyb3VwKTogSWdub3JlIHF1b3RlLWNoYXJzIGlmIC10cmFkaXRpb25hbC4KKwkocmVzY2FuKTogSWYgLXRyYWRpdGlvbmFsLCBkb24ndCBvdXRwdXQgYSBzcGFjZSBmb3IgYSBjb21tZW50LgorCShoYW5kbGVfZGlyZWN0aXZlKTogSWYgbm90IC10cmFkaXRpb25hbCwgb3V0cHV0IGEgc3BhY2UgZm9yIGEgY29tbWVudC4KKworU2F0IEFwciAgOSAyMToyNjo1MSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGRlY2wuYyAoZ2V0X3Bhcm1fdHlwZXMpOiBgdm9pZCcgdHlwZSBpcyBlcnJvciwgZXhjZXB0IGFzIGVudGlyZSBsaXN0LgorCSogcGFyc2UueSAocGFybWxpc3RfMSk6IGB2b2lkLC4uLicgaXMgZXJyb3IuCisKKwkqIHR5cGVjaGVjay5jIChwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZik6CisJVXNlIGFuIGludGVnZXIgdHlwZSB3aXRoIGF0IGxlYXN0IFBPSU5URVJfU0laRSBiaXRzLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgQVJSQVlfUkVGKTogTGlrZXdpc2UuCisJKiB0cmVlLmMgKHR5cGVfcHJlY2lzaW9uKTogUHJlYyBvZiBhIHBvaW50ZXIgaXMgUE9JTlRFUl9TSVpFLgorCShjb252ZXJ0X3RvX3BvaW50ZXIpOiBEaXJlY3RseSBjb252ZXJ0IGFueSBpbnQgdy8gd2lkdGg9PVBPSU5URVJfU0laRS4KKwlPdGhlciBpbnQgdHlwZXMgY29udmVydCB2aWEgYW4gaW50IG9mIHRoYXQgd2lkdGguCisJKGNvbnZlcnRfdG9faW50ZWdlcik6IFBvaW50ZXJzIGNvbnZlcnQgdmlhIGFuIGludCBvZiB0aGF0IHdpZHRoLgorCisJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIElOVF9UWVBFX1NJWkUsIGlmIGRlZiwKKwl0byBzZXQgd2lkdGggb2YgYGludCcgYW5kIGB1bnNpZ25lZCBpbnQnLgorCShtYWtlX2luZGV4X3R5cGUpOiBHaXZlIG5ldyB0eXBlIHRoZSB3aWR0aCBvZiBhIGxvbmcgaW50LgorCisJKiB0bS1tNjhrLmg6IEFkZCBuZXcgLW1zaG9ydCB3aGljaCBjb250cm9scyBUQVJHRVRfU0hPUlQuCisJKiB0bS1tNjhrLmg6IERlZmluZSBJTlRfVFlQRV9TSVpFIGRlcGVuZGluZyBvbiBUQVJHRVRfU0hPUlQuCisKK0ZyaSBBcHIgIDggMDU6MDI6NTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiB0eXBlY2hlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogRml4IHR5cG8gaW4gZGV0ZWN0aW9uIG9mIGB2b2lkJy4KKwkoYnVpbGRfZnVuY3Rpb25fY2FsbCk6IEZpeCBiYWNrd2FyZCB0ZXN0IHRvIGFsbG93IGB2b2lkJyB2YWx1ZXMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdGFncyk6IE91dHB1dCBlYWNoIHRhZyBvbmNlIGV2ZW4gaWYgdHlwZSBpcyBkZWZpbmVkLgorCisJKiBtNjhrLm1kIChtb3ZzdHJpY3RxaSk6IFJlamVjdCBhZGRyLXJlZyBhbHdheXMsIGZvciBib3RoIG9wZXJhbmRzLgorCisJKiB0bS12YXguaCAoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBNYWtlIHRoaXMgYWx3YXlzIDgsIGZvciBCU0QuCisJKiB0bS11bHRyaXguaDogTmV3IGZpbGUsIG92ZXJyaWRpbmcgU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkuCisJW1RoaXMgY2hhbmdlIGhhcyBiZWVuIHRha2VuIG91dDsgdG0tdWx0cml4LmggaXMgbm93IGVxdWl2YWxlbnQgdG8KKwl0bS12YXguaC4gIEkgbXVzdCBoYXZlIGJlZW4gY29uZnVzZWQgd2hlbiB0ZXN0aW5nIFBDQy5dCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogRG9uJ3QgbGV0IGlubGluZV90YXJnZXQKKwliZSBub256ZXJvIGluIEJMS21vZGUuCisKKwkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDb25zdCBhcnJheSBwYXJtIGJlY29tZXMgcHRyLXRvLWNvbnN0LgorCitUaHUgQXByICA3IDA1OjAyOjQxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZ2Vub3V0cHV0LmMgKGJjb3B5LCBiemVybyk6IFJlbmFtZWQgdG8gbXliY29weSwgbXliemVybworCXNvIHZhcmlhdGlvbiBpbiBDIGxpYnJhcnkgYW5kIGNvbmZpZy5oIHdvbid0IGFmZmVjdCB0aGUgcmVzdWx0cy4KKwkqIGdlbnJlY29nLmMgKGJ6ZXJvKTogbGlrZXdpc2UuCisJKiBnZW5leHRyYWN0LmMgKGJjb3B5KTogRm4gZGVsZXRlZDsgdXNlZCBvbmx5IGluIGEgc3RyaW5nIGNvbnN0YW50LiAKKworCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X21lbSk6IEZpeCB0eXBvIGluIGFyZyBkZWNsLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogaW5pdF9maWxlIHdpdGggbWFpbl9pbnB1dF9maWxlbmFtZQorCXNvIGRieCBvdXRwdXQgZG9lc24ndCBsYWNrIE5fU09MIHN5bWJvbHMuCisKKwkqIGNjY3AuYyAocmVzY2FuKSBbQ1BMVVNQTFVTXTogUHV0IG91dCAvLyBjb21tZW50cyBhcyAvLyBjb21tZW50cy4KKworV2VkIEFwciAgNiAxNDowNjozOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYzogRGVsZXRlIFNMT1dfWkVST19FWFRFTkQgY29uZGl0aW9uYWxzIGFkZGVkIE1hcmNoIDMuCisJTm93IHRoYXQgZW51bXMgdHlwZXMgY2FuIGJlIHVuc2lnbmVkLCB0aGlzIGlzbid0IG5lZWRlZC4KKworCSogZW1pdC1ydGwuYyAoZW1pdF9qdW1wX2luc24pOiBIYW5kbGUgU0VRVUVOQ0VzLgorCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBVc2UgZW1pdF9qdW1wX2luc24sIGVtaXRfbGFiZWwsIGVtaXRfYmFycmllcgorCXdoZW4gdGhlIGluc24gcnRsIHJlcXVpcmVzIGl0LgorCisJKiBtNjhrLm1kIChzdWJzaTMpOiBQcmVmZXIgdG8gYXZvaWQgcmV2ZXJzZS1zdWJ0cmFjdGlvbiBhbHRlcm5hdGl2ZS4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBMZXQgQ0FTRV9EUk9QU19USFJPVUdIIGNvbnRyb2wgd2hhdCB0bworCWVtaXQgYWZ0ZXIgdGhlIHRhYmxlLgorCSogdG0tdmF4Lmg6IERlZmluZSBDQVNFX0RST1BTX1RIUk9VR0guCisKK1R1ZSBBcHIgIDUgMTU6NDc6MTAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBnZW5lbWl0LmMgKGdlbl9leHApOiBIYW5kbGUgdmVjdG9ycyB3aXRoaW4gZXhwcnMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogUGFzcyA1dGggYXJnIChkZWZhdWx0X2xhYmVsKSB0byBnZW5fY2FzZXNpLgorCSogbTY4ay5tZDogRGVmaW5lIGNhc2VzaSBpbnNuIHJhdGhlciB0aGFuIHRhYmxlanVtcCBpbnNuLgorCisJKiBjY2NwLmMgKHNraXBfaWZfZ3JvdXApOiBGb3IgdmFsaWRhdGVfZWxzZSwgcGFzcyBCUCAoZW5kIG9mIGNtZCBuYW1lKS4KKwlEb24ndCBjYWxsIHZhbGlkYXRlX2Vsc2UgaWYgZG9fZWxzZSBvciBkb19lbmRpZiB3aWxsIGRldGVjdCBlcnJvci4KKworCSogQnVnOiBpbmxpbmUgZmNucyBjYW4gcmVmZXIgdG8gdGhlIHJldHVybiByZWcgd2l0aCBhIHN0cmljdF9sb3dfcGFydAorCXdoaWNoIGNvbmZ1c2VzIGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24uICBGaXggaXMgdG8gY2hhbmdlIHJldHVybiByZWcKKwlpbnRvIGlubGluZV90YXJnZXQgKmV2ZXJ5d2hlcmUqIGV4Y2VwdCBpbiBvciByaWdodCBhZnRlciBhIGNhbGwuCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBEZWxldGUgc3BlY2lhbCBjYXNlIGZvciBTRVQuCisJUmVwbGFjZSByZXR1cm4tdmFsdWUgaGFyZCByZWdzIHdpdGggSU5MSU5FX1RBUkdFVCBpbiBhbGwgY29udGV4dHMuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBzcGVjaWFsIGhhbmRsaW5nIGZvciBpbnNuIGFmdGVyIGEgQ0FMTF9JTlNOCisJaWYgaXQgY29waWVzIHRoZSBmdW5jdGlvbiB2YWx1ZSBvdXQuCisJQWxsb3cgbm90ZXMgYW5kIHN0YWNrIGFkanVzdCBpbnNucyB0byBpbnRlcnZlbmUKKwliZXR3ZWVuIHRoZSBDQUxMX0lOU04gYW5kIHRoZSB2YWx1ZS1jb3B5LgorCisJKiBleHByLmMgKGVtaXRfY2FsbF8xKTogTmV3IG5hbWUgZm9yIGdlbl9jYWxsXzEuCisKKwkqIEJ1ZzogKHsuLi59KSBpbnNucyB3ZXJlIGluIHdyb25nIHBsYWNlIGZvciBhIHN1YmV4cHJlc3Npb24KKwlhZnRlciBhIHNlcXVlbmNlIHBvaW50LCBhcyBpbiB4ID8geSA6ICh7Li4ufSkuCisJKiB0cmVlLmRlZjogTmV3IHRyZWUtY29kZSBSVExfRVhQUiBob2xkcyBhIHNlcXVlbmNlLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBSVExfRVhQUiBieSBlbWl0dGluZyB0aGUgc2VxdWVuY2UuCisJKiBzdG10LmMgKGV4cGFuZF97c3RhcnQsZW5kfV9zdG10X2V4cHIpOiBVc2UgZW1pdF90b19zZXF1ZW5jZQorCXRvIG1ha2UgYSBzZXF1ZW5jZSBmcm9tIGV2ZXJ5dGhpbmcgd2l0aGluIHRoZSAoey4uLn0pLgorCShleHBhbmRfe3N0YXJ0LGVuZCxlbWl0fV9kZWxheWVkX2V4cHIpOiBEZWxldGUgdGhlc2UgZnVuY3Rpb25zLgorCSogcGFyc2UueSAoYGZvcictc3RhdGVtZW50cyk6IERvbid0IGNhbGwgdGhlbTsgbm90aGluZyBzcGVjaWFsIG5lZWRlZC4KKworCSogcGFyc2UueSAoeXlsZXgpOiBIYW5kbGUgc3ludGF4IEwiLi4uIiBhbmQgTCcuLi4nCisJKGNvbWJpbmVfc3RyaW5ncyk6IEhhbmRsZSB3aWRlIHN0cmluZ3MgYmVpbmcgY29tYmluZWQuCisJKiB0eXBlY2hlY2suYyAoZGlnZXN0X2luaXQpOiBSZWplY3Qgd2lkZSBzdHJpbmcgYXMgaW5pdCBmb3IgY2hhciBhcnJheS4KKwlBbGxvdyBpdCBmb3IgYW4gaW50IGFycmF5LCBidXQgZG9uJ3QgYWxsb3cgYSBuYXJyb3cgc3RyaW5nLgorCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE5ldyB2YXIgaW50X2FycmF5X3R5cGVfbm9kZS4KKworCSogcGFyc2UueTogRGVmaW5lIGtleXdvcmQgYG5vYWxpYXMnLgorCSogcGFyc2UuaDogRGVmaW5lIFJJRF9OT0FMSUFTLgorCisJKiB0eXBlY2hlY2suYyAoY29tcHBhcm1zKTogTm90IGFsbCBwYXJtbGlzdHMgbWF0Y2ggYW4gZW1wdHkgb25lOworCWNhbGwgYGNvbXBwYXJtczEnIHRvIGZpbHRlciB0aGVtLgorCisJKiBkZWNsLmMgKGdyb2t0eXBlbmFtZSk6IFJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yIGB2b2lkJyBhcyBwYXJhbWV0ZXIuCisJKGdldF9wYXJtX3R5cGVzKTogU3BlY2lhbCBjYXNlIGZvciBsaXN0IG9mIG9uZSBkZWNsIHdpdGggdHlwZSB2b2lkLgorCisJKiBkZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBHaXZlIGVudW0gY29uc3RhbnRzIHRoZSB0eXBlIGBpbnQnLgorCVZhcmlhYmxlIGBjdXJyZW50X2VudW1fdHlwZScgZWxpbWluYXRlZC4KKwkoZmluaXNoX2VudW0pOiBObyBuZWVkIHRvIHJlcGVhdCBgZml4dXBfdW5zaWduZWRfdHlwZScKKwlzaW5jZSB0aGUgcHJlY2lzaW9uIGhhcyBub3QgY2hhbmdlZC4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogQWxsb3cgZW51bSB0eXBlcyB0byBiZSB1bnNpZ25lZC4KKworCSogZW1pdC1ydGwuYyAodW5zaGFyZV9hbGxfcnRsKTogVW5zaGFyZSBjb250ZW50cyBvZiBhbGwgcmVnLW5vdGVzLgorCisJKiBwYXJzZS55IChjaGVja19uZXdsaW5lKTogZmlsZW5hbWUgaXMgb3B0aW9uYWwgaW4gIy1saW5lcy4KKworTW9uIEFwciAgNCAxNDozNjo1NCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIHR5cGVjaGVjay5jIChzaG9ydGVuX2NvbXBhcmUpOiBXaGVuIGRhdGEgdHlwZSBkZXRlcm1pbmVzIHRoZSB2YWx1ZSwKKwlldmFsIHRoZSBub25jb25zdGFudCBhcmcgYW55d2F5IGlmIGl0IGhhcyBzaWRlIGVmZmVjdHMuCisJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBXaGVuIG1lcmdpbmcgYGZvbyAqJyB3aXRoIGB2b2lkIConLAorCWFsc28gYWxsb3cgYGNvbnN0IHZvaWQgKicuICBSZXN1bHQgdHlwZSBoYXMgbWVyZ2VkIHNldCBvZiBxdWFsaWZpZXJzLgorCShxdWFsaWZ5X3R5cGUpOiBNZXJnZSBxdWFsaWZpZXJzIG9mIHR3byB0eXBlcy4KKworCSogZGVjbC5jIChnZXRfcGFybV90eXBlcyk6IFN0b3JlIGFueSB0YWdzIGRlZmluZWQgaW4gcGFybWxpc3QKKwlpbnRvIGBsYXN0X2Z1bmN0aW9uX3Bhcm1fdHlwZXMnLgorCShzdG9yZV9wYXJtX2RlY2xzKTogQWRkIHRob3NlIHRhZ3MgaW50byB0aGUgY3VycmVudCBiaW5kaW5nIGxldmVsLgorCisJKiBwYXJzZS55IChwYXJtbGlzdCwgcGFybWxpc3Rfb3JfaWRlbnRpZmllcik6IFBhc3MgMCB0byBwdXNobGV2ZWw7CisJbm8gYmluZGluZyBsZXZlbHMgaW4gQyBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gdGFncy4KKworCSogM2IxIHN1cHBvcnQ6CisJKiB0bS0zYjEuaDogTmV3IGZpbGUuCisKKwkqIG02OGsubWQ6IEFkZCBIUFVYX0FTTSBjb25kaXRpb25hbHMgZm9yIHNoaWZ0LWJ5LTI0LWFuZC1jb21wYXJlLgorCUluIG9uZSBvZiB0aGUgZGJyYSBwYXR0ZXJucywgYSBIUFVYX0FTTSBjb25kaXRpb25hbCB3YXMgYmFja3dhcmRzLgorCShtb3ZoaSkgW1NHU18zQjFdOiBEZWZpbmUgdGhlIExJLi4uIGxhYmVsIGFzIGluIE1JVCBzeW50YXguCisJKGFkZHNpMykgW1NHU106IFN5bnRheCBmb3IgYmFzZS1kaXNwbGFjZW1lbnQgZGlmZmVycyBmcm9tIE1PVE9ST0xBLgorCShzdWJzaTMpIFtTR1NdOiBsaWtld2lzZS4KKwkodGFibGVqdW1wKSBbQVNNX09VVFBVVF9DQVNFX0xBQkVMXTogVXNlIDYsIG5vdCAyLCBhcyBkaXNwbGFjZW1lbnQuCisJVGhpcyBhc3N1bWVzIEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCBvbiA2OGsgaXMgdXNlZCBmb3IgYSBgc3diZWcnLgorCisJKiBmaW5hbC5jIChmaW5hbCk6IFVzZSBBU01fT1VUUFVUX0NBU0VfTEFCRUwgKGlmIGRlZmluZWQpIHRvIG91dHB1dAorCWFueSBDT0RFX0xBQkVMIGZvbGxvd2VkIGJ5IGFuIEFERFJfVkVDIG9yIEFERFJfRElGRl9WRUMuCisJSXQgaGFzIDQgYXJnczsgNHRoIGlzIHRoZSBpbnNuIHdoaWNoIGlzIHRoZSBBRERSX1ZFQyBvciBBRERSX0RJRkZfVkVDLgorCisJKiB0bS0qLmggZm9yIDY4MDAwIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBGb3IgdW5zY2FsZWQgaW5kZXhpbmcgaW4KKwlmZXRjaCBmcm9tIGEgYnJhbmNoIHRhYmxlLCB1c2UgTCBhbmQgTEkgc3ltYm9scyBhcyBpbiB0aGUgc2NhbGVkIGNhc2UuCisKKwkqIGNjY3AuYzogSWYgU0NDU19ESVJFQ1RJVkUsIGRlZmluZSAjc2NjcyBhcyBuby1vcC4KKworCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBSZWFsIHN0YXJ0IG9mIGZ1bmN0aW9uCisJaXMgRklSU1RfUEFSTV9JTlNOLCBub3QgRklSU1RfRlVOQ1RJT05fSU5TTi4KKworCSogdHJlZS5jIChidWlsZF9zdHJpbmcpOiBTdHJpbmcgY29udGVudHMgbXVzdCBiZSBzYXZlYWJsZSAoZm9yCisJaW5saW5lIGZjbikuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IGZvcmdldCB0byBzZXQgZGVzdF9oYXNoX2NvZGUgd2hlbiBkZXN0CisJaXMgYSBzdGFjayBzbG90IChhbmQgc28gaXRzIGFkZHJlc3MgaXMgbm90IGJlaW5nIG9wdGltaXplZCkuCisKKwkqIGVtaXQtcnRsLmMgKHJlc3RvcmVfcmVnX2RhdGFfMSk6IHJlZ19ydHhfbm8gbXVzdCBiZSAxKyBsYXJnZXN0IFJFR05PLgorCisJKiBtNjhrLm1kIChub24tU0ltb2RlIGJpdC1maWVsZCBpbnNucyk6IENoYW5nZSBjb25zdHJhaW50IHRvICJvLGQiCisJc28gYSBub25vZmZzZXRhYmxlIG1lbXJlZiBpcyBoYW5kbGVkIGJ5IHJlbG9hZGluZyBpdHMgYWRkcmVzcworCWJ1dCBhIHJlZ2lzdGVyIGNhbiBzdGlsbCBiZSBoYW5kbGVkLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEV4ZWN1dGUgT1ZFUlJJREVfT1BUSU9OUywgaWYgaXQncyBkZWZpbmVkLgorCitTYXQgQXByICAyIDAwOjU1OjIxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBIYW5kbGUgYSBTVUJSRUcgaW4gZGlyZWN0IHRydW5jYXRpb24gY2FzZS4KKworCSogY3NlLmMgKGxvb2t1cF9mb3JfcmVtb3ZlKTogRG9uJ3QgdGVzdCBtYWNoaW5lIG1vZGUgb2YgcmVnaXN0ZXJzOgorCVN0b3JpbmcgaW4gKFJFRzpTSSAwKSBpbnZhbGlkYXRlcyAoUkVHOkRGIDApLgorCisJKiBkZWNsLmMgKHB1c2hsZXZlbCk6IE5ldyBhcmcsIG5vbnplcm8gbWVhbnMgdGhpcyBsZXZlbCBpcyBmb3IKKwl2YXJpYWJsZXMgb25seSwgbm90IGZvciB0YWdzLiAgQWxsIGNhbGxzIGNoYW5nZWQuCisJKGxvb2t1cF90YWcpOiBFdmVuIGlmIFRISVNfTEVWRUxfT05MWSwgc2tpcCB2YXJpYWJsZXMtb25seSBsZXZlbHMuCisJKHB1c2h0YWcpOiBEZWZpbmUgaXQgaW4gdGhlIGZpcnN0IG5vbi12YXJpYWJsZXMtb25seSBsZXZlbC4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogVW5kbyBNYXIgMjkgY2hhbmdlLCBpbiB0aGUgREJYX05PX1hSRUZTIGNhc2UuCisJU28gbm93IGVhY2ggc3RydWN0IG9yIHVuaW9uIHdpbGwgY29udGFpbiBvbmx5IG5hbWVsZXNzIGNyb3NzLXJlZnMKKwl0byBhbnkgb3RoZXJzIGl0IHVzZXMuICBUaGUgcHJpb3IgY2hhbmdlIGlzIHN0aWxsIGluIGVmZmVjdCB3aGVuCisJREJYX05PX1hSRUZTIGlzIG5vdCBkZWZpbmVkLgorCisJKiBJbXBsZW1lbnQgdmFyaWFibGUgYXJyYXkgYm91bmRzIGZvciBwYXJhbWV0ZXJzLgorCSogZGVjbC5jIChwb3BsZXZlbCk6IERvbid0IGNyYXNoIGlmIERFQ0xfTkFNRSBnaXZlcyAwLgorCSogdHlwZWNoZWNrLmMgKGNvbXB0eXBlcyk6IEEgdmFyaWFibGUgYXJyYXkgYm91bmQgbWF0Y2hlcyBhbnl0aGluZy4KKwkqIHBhcnNlLnkgKHBhcm1saXN0KTogQ2FsbCBwdXNobGV2ZWwsIHRoZW4gcHVzaGRlY2wgZWFjaCBwYXJtIGFzIGl0CisJaXMgcGFyc2VkOyB0aGVuIHBvcGxldmVsIGFmdGVyIHVzaW5nIGdldF9wYXJtX3R5cGVzIHRvIGV4dHJhY3QgdGhlCisJcmVzdWx0cyBvZiB0aGUgcGFybWxpc3QuCisJKiBkZWNsLmMgKGdldF9wYXJtX3R5cGVzKTogTmV3IGZ1bmN0aW9uOyByZXZlcnNlIHRoZSBjdXJyZW50IGRlY2xzLAorCXB1dCB0aGVtIGluIGxhc3RfZnVuY3Rpb25fcGFybXMsIGFuZCByZXR1cm4gYSBsaXN0IG9mIHRoZWlyIHR5cGVzLgorCShncm9rcGFybXMpOiBBcmcgaXMgbm93IGFuIGlkbGlzdCBvciBhIHR5cGVsaXN0LiAgRG8gbm90aGluZyBpZiBsYXR0ZXIuCisJKHB1c2hfcGFybV9kZWNsKTogTmV3IGZ1bmN0aW9uLCBsaWtlIHtzdGFydCxmaW5pc2h9X2RlY2wgY29tYmluZWQKKwlmb3IgYSBwYXJtIGluIGEgcGFybWxpc3QuCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogSWdub3JlIHN5bSBpZiBpdHMgREVDTF9SVEwgaXMgMC4KKworCSogc3ltb3V0LmMgKHN5bW91dF9ibG9ja19zeW1ib2xzKTogSWdub3JlIHN5bSBpZiB0eXBlIGlzIGVycm9yX21hcmsuCisKK0ZyaSBBcHIgIDEgMTE6NDE6MjEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKHByZXBhcmVfY2FsbF9hZGRyZXNzKTogTmV3IGZ1bmN0aW9uOyBnaXZlbiB0d28gcnR4J3MKKwlmb3IgZnVuY3Rpb24gYW5kIGNvbnRleHQsIGNvcHkgdGhlIGNvbnRleHQgdG8gdGhlIHJpZ2h0IGhhcmQgcmVnLAorCXB1dCB0aGUgZnVuY3Rpb24gYWRkcmVzcyBpbiB0aGUgcmlnaHQgcGxhY2UgYW5kIHJldHVybiBhbiBydHggZm9yIGl0LgorCShnZW5fY2FsbF8xKTogTm8gbG9uZ2VyIGRvIHRob3NlIHRoaW5ncy4gIERlbGV0ZSBhcmdzIENPTlRFWFQsIFBST1RFQ1QuCisJKGVtaXRfbGlicmFyeV9jYWxsLCBleHBhbmRfY2FsbCk6IENhbGwgYHByZXBhcmVfY2FsbF9hZGRyZXNzJy4KKwlJbiBiZXR3ZWVuIHRoYXQgYW5kIGBnZW5fY2FsbF8xJywgVVNFIHRoZSBwYXJtIHJlZ2lzdGVycy4KKworCSogdG0taHA5azMyMC5oIChBU01fT1VUUFVUXyopOiBGbHVzaCB1c2VzIG9mIG91dHB1dF9hcml0aF9jb25zdGFudC4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogVXNlIEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FCisJdG8gbWFrZSB0aGUgbmFtZSBmb3IgYSBsb2NhbCBzdGF0aWMgdmFyaWFibGUuCisJKiB0bS1tNjhrLmgsIHRtLXZheC5oLCB0bS1uczMyay5oLCB0bS1zcHVyLmg6CisJRGVmaW5lIEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FLiAgVXNlIGAuJywgbm90IGAkJywgdG8gc2VwYXJhdGUuCisKKwkqIHRtLW02OGsuaCwgdG0tbnMzMmsuaCAoRklYX0ZSQU1FX1BPSU5URVJfQUREUkVTUyk6CisJVG8gcmVmZXIgdG8gc3RhY2sgcHRyLCB1c2Ugc3RhY2tfcG9pbnRlcl9ydHgsIG5vdCBhIGNvcHkuCisKKwkqIHRyZWUuYyAoYnVpbGRfcmVhbF9mcm9tX3N0cmluZyk6IEZ1bmN0aW9uIGRlbGV0ZWQuCisJKiBwYXJzZS55ICh5eWxleCk6IFVzZSBidWlsZF9yZWFsIGFuZCBhdG9mLgorCisJKiBwYXJzZS55OiBBbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBpbiBhcmcgb2YgYXNtLgorCisJKiBwYXJzZS55ICh5eWxleCk6IEFsd2F5cyBhbGxvdyBgJCcgaW4gaWRlbnQsIGJ1dCB3YXJuIGlmIHBlZGFudGljLgorCSogdG0tdm1zLmg6IERlbGV0ZSBET0xMQVJTX0lOX0lERU5USUZJRVJTIChubyBsb25nZXIgdGVzdGVkKS4KKworCSogY2NjcC5jIChyZXNjYW4sIGRvX2RlZmluZSwgaW5pdGlhbGl6ZV9yYW5kb21fanVuayk6CisJQWx3YXlzIGFsbG93IGAkJywgYnV0IHdhcm4gaWYgcGVkYW50aWMuCisJKG1haW4pOiBJZiAtdCwgc2V0IGB0cmFkaXRpb25hbCcuCisJKGNvbGxlY3RfZXhwYW5zaW9uKTogSWYgYHRyYWRpdGlvbmFsJywgbm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgcXVvdGVzCisJYW5kIG5vIHdoaXRlc3BhY2UgYWRkZWQgYXQgZW5kIG9mIG1hY3JvIGRlZmluaXRpb24uCisKKwkqIGV4cHIuYyAoY29tcGFyZSwgY29tcGFyZTEpOiBMYXN0IGFyZyB0byBjb21wYXJlX2NvbnN0YW50cworCW11c3QgYmUgYSBzaXplIGluIGJpdHMuCisKK1RodSBNYXIgMzEgMDA6MzE6NTIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHQsIGV4cGFuZF9kaXZtb2QsIGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKToKKwlSZWplY3QgZnVuY3Rpb24gcmV0dXJuIHJlZ2lzdGVyIGFzIHRhcmdldCBpZiBtYXkgbmVlZCB0byByZWFkIGl0LgorCShSZWFkaW5nIHRoZSByZXR1cm4gcmVnaXN0ZXIgaW4gYW4gaW5saW5lIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yay4pCisKKwkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEZWxldGUgZXh0cmEgYXJnIHRvIGBlcnJvcicuCisKKwkqIGVtaXQtcnRsLmMgKGxhc3RfcGFybV9pbnNuKTogRGVsZXRlIHRoaXMgdW51c2VkIHZhci4KKworCSogbWFrZS1jYzEuY29tOiBOZXcgdmVyc2lvbiBmcm9tIEthc2h0YW4uCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWx3YXlzIHNldCB1cCBhbiBJTkxJTkVfVEFSR0VUCisJZm9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbm9udm9pZCBub25CTEsgdmFsdWUuCisJU2luY2UgYHB1c2hsZXZlbCcgYW5kIGBwb3BsZXZlbCcgYXJlIGNhbGxlZCwgbXVzdCBhbHNvIGNhbGwKKwlgZXhwYW5kX3tzdGFydCxlbmR9X2JpbmRpbmdzJyB0byBtYWtlIGEgcGFpciBvZiBOT1RFcy4KKwlMZXQgdGhlbSBoYW5kbGUgVVNFcyBhdCBlbmQgb2Ygc2NvcGUgb2YgZm9ybWFsIHBhcmFtZXRlciBjb3BpZXMuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogSW4gYSBuZXctc3R5bGUgQ0FMTF9JTlNOLAorCWRvbid0IGNoYW5nZSB0aGUgcmVzdWx0IHJlZyBpbnRvIElOTElORV9UQVJHRVQuICBBbHNvLAorCWdlbmVyYXRlIGEgbW92ZSBpbnNuIGFmdGVyIHRoZSBjYWxsIG9ubHkgaWYgSU5MSU5FX1RBUkdFVCBpcyBub24tMC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF90cmVlKTogRG9uJ3QgY3Jhc2ggaWYgREVDTF9SVEwgaXMgMC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSk6IERvbid0IHRyZWF0IGByZXR1cm4nIHJ0eCdzIHNwZWNpYWxseS4KKworCSogc3RtdC5jIChleHBhbmRfe3N0YXJ0LGVuZCxlbWl0fV9kZWxheWVkX2V4cHIpOgorCU5ldyBmbnMgdG8gaGFuZGxlICh7Li4ufSkncyBpbiBleHByZXNzaW9ucyBvdXRwdXQgbm90IHdoZXJlIHBhcnNlZAorCShzdWNoIGFzIHRoaXJkIGV4cHJlc3Npb24gaW4gYSBgZm9yJyBzdGF0ZW1lbnQpLgorCSogcGFyc2UueTogQ2FsbCB0aGVtIHRvIGhhbmRsZSB0aGlyZCBleHByZXNzaW9uIGluIGEgYGZvcicuCisKKwkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUmVzdWx0IGlzIGBpbmxpbmUnIGlmIGVpdGhlciBPTEQgb3IgTkVXIGlzLgorCisJKiBlbWl0LXJ0bC5jIChlbWl0X25vdGUpOiBSZXR1cm4gdGhlIG5vdGUsIG9yIDAgaWYgbm9uZS4KKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzKTogVXNlIGVtaXRfbm90ZSdzIHZhbHVlLgorCitXZWQgTWFyIDMwIDEyOjQ4OjIyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogb2JzdGFjay5jIChfb2JzdGFja19iZWdpbik6IElmIEFMSUdOTUVOVCBpcyAwLCB1c2UgZGVmYXVsdC4KKwlDb21wdXRlIGRlZmF1bHQgZm9yIHRoZSBhbGlnbm1lbnQgb2YgYSBgZG91YmxlJy4KKwkqIG9ic3RhY2suaCAob2JzdGFja197YmVnaW4saW5pdH0pOiBQYXNzIDAgZm9yIHRoZSBhbGlnbm1lbnQuCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBEaXNjYXJkIG11bHRpcGxlIFNVQlJFR3MsIFNUUklDVF9MT1dfUEFSVHMuCisKKwkqKiBDYWxsIGluc25zIHRoYXQgcmV0dXJuIHZhbHVlcyBhcmUgbm93IHJlcHJlc2VudGVkIGFzCisJKHNldCAocmVnIC4uLikgKGNhbGwgLi4uKSksIG5vdCBqdXN0IChjYWxsIC4uLikuCisKKwkqICoubWQ6IERlZmluZSBhICJjYWxsX3ZhbHVlIiBpbnNuIHBhdHRlcm4uCisKKwkqIHRtLW02OGsuaCwgdG0tdmF4LmgsIHRtLW5zMzJrLmg6IChOT1RJQ0VfVVBEQVRFX0NDKToKKwlUaGVzZSBpbnNucyBpbnZhbGlkYXRlIHRoZSBDQy4KKworCSogbG9jYWwtYWxsb2MuYyAoY29tYmluZV9yZWdzKTogI2lmIDAgc3BlY2lhbCB0cmVhdG1lbnQgb2YKKwlmdW5jdGlvbiB2YWx1ZSBoYXJkIHJlZy4KKwkod2lwZV9kZWFkX3JlZyk6IElmIGhhcmQgcmVnLCBjYWxsIHJlZ19pc19ib3JuIHNvIHRoYXQgdGhlIGRlYXRoCisJd2lsbCBub3QgYmUgaWdub3JlZC4KKwkocmVnX2lzX3NldCk6IEZvciByZWcgdGhhdCBkaWVzIGluIHRoaXMgaW5zbiwgbWFyayBpdCBkZWFkIGZyb20gbm93IG9uCisJYW5kIHBvc3RfbWFyayBpdCBsaXZlIGFmdGVyIHRoaXMgaW5zbiBvbmx5LgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgYWxsb3cgYSBjYWxsIGluc24gYXMgSTEgb3IgSTIuCisKKwkqIGxvb3AuYyAoY291bnRfbG9vcF9yZWdzX3NldCk6IE1vdmUgQ0FMTF9JTlNOIGludG8gYSBzZXBhcmF0ZQorCWNsYXVzZS4gIFdoZW4gZmluZGluZyByZWdzIHRoYXQgYXJlIGZ1bmN0aW9uIGFkZHJlc3NlcywgaGFuZGxlCisJYm90aCBvbGQgYW5kIG5ldyBmb3JtYXQgY2FsbCBpbnNucy4KKworCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IEEgU0VUIHRoYXQgY29udGFpbnMgYSBDQUxMIGNhbid0IGJlIGRlYWQuCisJKHZvbGF0aWxlX3JlZnNfcCk6IEFueSBDQUxMIGNvbnN0aXR1dGVzIGEgdm9sYXRpbGUgcmVmLgorCShtYXJrX3VzZWRfcmVncyk6IElmIHNldHRpbmcgYSByZWcgZnJvbSBhIHZvbGF0aWxlIHJlZiwKKwl0cmVhdCBpdCBsaWtlIHNldHRpbmcgYSByZWcgd2hvc2UgdmFsdWUgd2lsbCBiZSB1c2VkLgorCisJKiBleHByLmMgKGdlbl9jYWxsXzEpOiBOZXcgYXJnIFZBTFJFRyBpZiBub256ZXJvIG1lYW5zIGdlbmVyYXRlCisJYSBjYWxsX3ZhbHVlIGluc24gd2hpY2ggc3RvcmVzIGluIFZBTFJFRy4KKwkoZXhwYW5kX2NhbGwpOiBVc2UgYGhhcmRfZnVuY3Rpb25fdmFsdWUnIHRvIG1ha2UgdGhlIFZBTFJFRyBhcmcKKwl1bmxlc3MgZXhwcmVzc2lvbiBoYXMgdHlwZSBgdm9pZCcuCisKKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBOZXcgMm5kIGFyZyBPVVRNT0RFIGlzIG1vZGUgb2YgcmVzdWx0LgorCShTbyBjYW4gZ2l2ZSBnZW5fY2FsbF8xIHRoZSBwcm9wZXIgdmFsdWUtcmVnaXN0ZXIuKQorCUFsbCBjYWxsZXJzIChoZXJlIGFuZCBvcHRhYnMuYykgcGFzcyB0aGlzIGFyZy4KKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBDb25zaWRlciBhbGwgQ0FMTCBydHgncyB2b2xhdGlsZS4KKworCSoqIGVuZCBvZiBjaGFuZ2UgaW4gcmVwcmVzZW50YXRpb24gb2YgY2FsbCBpbnNucy4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogUmVwbGFjZSBjb21wbGV4IGx2YWx1ZXMgd2l0aAorCVNBVkVfRVhQUnMgaGVyZQorCSogdHlwZWNoZWNrLmMgKGNfZXhwYW5kX2FzbV9vcGVyYW5kcyk6ICByYXRoZXIgdGhhbiBoZXJlLgorCisJKiB0eXBlY2hlY2suYyAocG9pbnRlcl9kaWZmKTogRml4IHR5cG8gcHJldmVudGluZyB1c2Ugb2YgRkxPT1JfRElWX0VYUFIKKwl3aGVuIGRpdmlkaW5nIGJ5IHBvd2VyIG9mIDIuCisJKGJ1aWxkX2NfY2FzdCk6IEZsdXNoIHVudXNlZCBsb2NhbHMuCisJKHN0b3JlX2luaXRfdmFsdWUpOiBsaWtld2lzZS4KKwkocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRGVsZXRlIHVudXNlZCA0dGggYXJnIGBmb3Jfc3RhdGljJy4KKworCSogdG9wbGV2LmMgKGZhdGFsX2lvX2Vycm9yKTogQXJnIHRvIGZwcmludGYgd2FzIG1pc3NpbmcuCisKKwkqIHRtLW02OGsuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRmx1c2ggZXh0cmEgYXJnIHRvIGBlbWl0X21vdmVfaW5zbicuCisKKwkqIGRlY2wuYzogRGVsZXRlIHNvbWUgdW51c2VkIGxvY2FsIHZhcnMuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9kZWNsKTogYHBhY2tlZF9zaXplJyBub3cgdW5zaWduZWQuCisKK1R1ZSBNYXIgMjkgMTQ6NDc6MDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDEuMTkgcmVsZWFzZWQuCisKKwkqIGxvb3AuYyAobWF5X3RyYXBfcCk6IE5vbnplcm8gaWYgWCBpcyBhIGRpdmlzaW9uIHRoYXQgbWlnaHQgdHJhcC4KKwkoc2Nhbl9sb29wKTogSWYgaW5zbiBtaWdodCB0cmFwLCBtb3ZlIG9ubHkgaWYgbG9vcCBhbHdheXMgZXhlY3V0ZXMgaXQuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IE5ldmVyIG91dHB1dCBhIGNyb3NzLXJlZiBmb3IKKwlhIHR5cGUgd2hvc2UgZGVmaW5pdGlvbiBpcyBrbm93bi4gIFN1biBkYnggd29uJ3QgYWNjZXB0IHRoZW0uCisKK01vbiBNYXIgMjggMTI6MzQ6NDYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiB0bS12bXMuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZhdWx0IGlzIFBDQyBhbGlnbm1lbnQuCisJVGhlIFZNUyBjb21waWxlIGRyaXZlciBjb250cm9scyB0aGUgcmVhbCBkZWZhdWx0LgorCisJKiB0eXBlY2hlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRG9uJ3QgaWdub3JlIHJldHVybiB2YWx1ZQorCXdoZW4gaXRzIHR5cGUgaXMgdm9pZC4KKworCSogZmluYWwuYyAoZmluYWwpOiBGb3JnZXQgdGhlIGNvbmRpdGlvbiBjb2RlcyBhZnRlciBhbiBgYXNtJy4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBXYXJuIGFib3V0IHB0ciA8IDAKKwlldmVuIGlmIG5vdCBwZWRhbnRpYywgYnV0IG5vdCBpZiB0cmFkaXRpb25hbC4KKworCSogdHlwZWNoZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBEb24ndCB3YXJuIGFib3V0CisJcG9pbnRlcnMgdm9sYXRpbGUgKiB2cyBub252b2xhdGlsZSAqIGlmIC1mdm9sYXRpbGUgc3BlY2lmaWVkLgorCisJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBBbW9uZyB0aGUgb2xkLXN0eWxlIHBhcm0gZGVjbHMKKwl0aGVyZSBjYW4gbGVnaXRpYXRlbHkgYmUgb3RoZXIgZGVjbHMhICBGb3IgZXhhbXBsZSwgaWYgYSBwYXJtCisJaXMgZGVjbGFyZWQgYGVudW0ge2ZvbywgYmFyfSB4OycsIHRoZXJlIGFyZSBkZWNscyBmb3IgYGZvbycgYW5kIGBiYXInLgorCURvbid0IGxldCBhbnl0aGluZyBidXQgYSBQQVJNX0RFQ0wgbWF0Y2ggYSBwYXJtIG5hbWU7CisJcGFzcyBhbGwgdGhlIG90aGVyIGRlY2xzIHRocm91Z2ggaW50byB0aGUgbGV4aWNhbCBjb250ZXh0LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIGRlbGV0aW5nIHN0YWNrIGFkanVzdHMgYmVmb3JlIGEKKwlqdW1wLXRvLXJldHVybiwgZG9uJ3QgYmUgZm9vbGVkIGJ5IGludGVydmVuaW5nIE5PVEVzLgorCisJKiB0bS1zZXF1ZW50LmggKFBSSU5UX09QRVJBTkQpOiBPdXRwdXQgKE1FTSAoTUVNIChSRUcpKSkgcHJvcGVybHkuCisJKiBvdXRwdXQtbnMzMmsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogT3V0cHV0IChNRU0gKFJFRykpCisJcHJvcGVybHk7IG91dHB1dCBzdGFjay1wb2ludGVyIGFzIGB0b3MnLgorCisJKiBmbG93LmMgKGZpbmRfdXNlX2FzX2FkZHJlc3MpOiBSZWplY3QgdXNlcyB3aXRoaW4gb3BlcmFuZCAwCisJb2YgYSBaRVJPX0VYVFJBQ1Qgb3IgU0lHTl9FWFRSQUNUIHJlZmVyZW5jZS4gIEl0J3MgaGFyZCB0byByZWxvYWQKKwlhbiBhdXRvaW5jcmVtZW50IGluc2lkZSB0aGVzZSBiZWNhdXNlIHRoZXkgY2FuIHJlZmVyIHRvIG11bHRpcGxlIGJ5dGVzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogYG8nIGluIGNvbnN0cmFpbnQgbWVhbnMgYW55IG1lbXJlZgorCShleGNlcHQgYXV0by1pbmNyZW1lbnQpIGlzIGFjY2VwdGFibGUgd2l0aCByZWxvYWRpbmcuCisJQnJhaW5vOiBDbGVhciBCQURPUCwgbm90IEJBRC4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2Fkcyk6IFVzZSBydHhfZXF1YWxfcCAodmlhIG1hY3JvIE1BVENIRVMpCisJd2hlbiBjb25zaWRlcmluZyByZXVzZSBvZiBhbiBvbGQgcmVsb2FkLiAgT3RoZXJ3aXNlIGVxdWFsIHZhbHVlcworCW1heSBnZXQgcmVsb2FkZWQgaW50byBkaWZmZXJlbnQgcmVnaXN0ZXJzLCBhbmQgdHdvIE1FTXMgdGhhdAorCW9yaWdpbmFsbHkgbWF0Y2hlZCBtYXkgZmFpbCB0byBtYXRjaCBvbmNlIHJlbG9hZGVkLgorCisJKiBtNjhrLm1kIChzaWduX2V4dHJhY3QgYW5kIHplcm9fZXh0cmFjdCBpbnNucyk6CisJSWYgb3BlcmFuZCAwIGlzIFFJIG9yIEhJbW9kZSwgZG9uJ3QgYWxsb3cgcmVnaXN0ZXItLW9ubHkgYG8nCisJKGV4Y2VwdCBpbiBzb21lIGJmdHN0IHBhdHRlcm5zIHdoZXJlIGJpdHBvcyBpcyA8IDgpLgorCUFuZCBjaGFuZ2UgYG0nIHRvIGBvJyBpbiBhbGwgdGhlc2UgcGF0dGVybnMuCisKK1N1biBNYXIgMjcgMTU6MzI6NTQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTlNUUlVDVE9SKToKKwlOb3QgYWxsIGFnZ3JlZ2F0ZXMgYXJlIEJMS21vZGU7IHVzZSB0aGUgdHlwZSdzIG1vZGUuCisKKwkqIGdjYy5jOiBQYXNzIC15KiB0byBsZC4KKworCSogY3NlLmMgKHN0cnVjdCBoYXNoKTogTmV3IG1lbWJlciBgZXF1aXZhbGVuY2Vfb25seScuCisJKGluc2VydCk6IEluaXRpYWxpemUgaXQuCisJKGNzZV9pbnNuKTogU2V0IGl0IHRvIDEgd2hlbiBzcmNfZXF2IGlzIGluc2VydGVkLgorCVdoZW4gZmluZGluZyBjaGVhcGVzdCBlcXVpdmFsZW50IG9mIHNvbWV0aGluZywKKwlza2lwIGVsdHMgdGhhdCBhcmUgbWFya2VkIHdpdGggYGVxdWl2YWxlbmNlX29ubHknLgorCisJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNhbGwgYGxheW91dF90eXBlJworCWlmIHRoZSB0eXBlIGlzIGBlcnJvcl9tYXJrX25vZGUnLgorCisJKiBkZWNsLmMgKGltcGxpY2l0bHlfZGVjbGFyZSk6IElmIGRlY2wgd2lsbCBiZSBmaWxlLXNjb3BlLAorCW1ha2Ugc3VyZSBpdCdzIGEgcGVybWFuZW50IG5vZGUsIGFuZCBpdHMgYXNzb2NpYXRlZCBkYXRhIHRvby4KKworU2F0IE1hciAyNiAxNTo0ODo1MCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGZsb3cuYyAoaW5zbl9kZWFkX3AsIG1hcmtfdXNlZF9yZWdzKTogU3RvcmluZyBhIHJlZyB2aWEgYQorCVpFUk9fRVhUUkFDVCBvciBTSUdOX0VYVFJBQ1QgaXMgZGVhZCBpZiB0aGUgcmVnIGlzbid0IG5lZWRlZCBhZnRlcndhcmQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2Z1bmN0aW9uKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fbmFtZQorCXRvIHRoZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24uCisJKiB0bS12bXMuaCAoTUFZQkVfVk1TX0ZVTkNUSU9OX1BST0xPR1VFKTogVXNlIGN1cnJlbnRfZnVuY3Rpb25fbmFtZS4KKworCSogZXhwci5jIChleHBhbmRfaW5jcmVtZW50KTogQSBTVUJSRUcgaW4gb3AwIGNhbiBhbHNvIGEgYmUgYSBjb3B5LgorCisJKiBuczMyay5tZDogQ29ycmVjdCByYW5nZSBvZiBhcmdzIGZvciBgYWRqc3BiJyBpbnNuLgorCVVzZSBgYWRqc3B3JyB3aGVuIGFwcHJvcHJpYXRlLgorCU5ldyBwYXR0ZXJuIGZvciBgbHByZCcgaW5zbi4KKwlDaGFuZ2Ugc29tZSBgY29uc3RfaW50JyBwcmVkaWNhdGVzIHRvIEdFVF9DT0RFIHRlc3RzLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogRXZhbCBmdW5jdGlvbiBiZWZvcmUgY29weWluZyBhcmdzIHRvIGhhcmQgcmVncy4KKworCSogdHJlZS5jIChtYWtlX25vZGUsIGNvcHlfbm9kZSk6IERvbid0IGdldCBsZW5ndGggb2YgYSBSRUFMX0NTVAorCWZyb20gdHJlZV9jb2RlX2xlbmd0aC4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKTogSW4gbWVtb3J5LXdvcmQgY2FzZSwgYWJvcnQKKwlpZiB0bS5oIHBhcm1zIHNheSB3b3JkIGNvdWxkIGZhaWwgdG8gYmUgd2VsbC1hbGlnbmVkLgorCSogdG0tbnMzMmsuaDogRGVmaW5lIFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZIHNvIHRoZXkgd2lsbCBiZSBhbGlnbmVkLgorCSogdG0tdmF4Lmg6IERlZmluZSBTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSBzaW5jZSBVbml4IENDIHNlZW1zIHRvLgorCisJKiB0bS12bXMuaCAoQ1BQX1BSRURFRklORVMpOiBQcmVkZWZpbmUgX19HTlVfXyBhbmQgX19HTlVDX18uCisKK0ZyaSBNYXIgMjUgMTM6MjM6MjcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobWFpbik6IEhhbmRsZSBTSUdIVVAsIFNJR1RFUk0uCisKKwkqIGV4cG1lZC5jIChleHBhbmRfYml0X2FuZCk6IERvbid0IGNsb2JiZXIgT1AxIHdoZW4gdHJ5aW5nIGFuZGNiLgorCitUaHUgTWFyIDI0IDIxOjU5OjA5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBHZXQgc2l6ZSBvZiBCTEttb2RlIGxvY2FsIGZyb20gdGhlIHR5cGUsCisJbm90IHRoZSBtb2RlLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBJbml0IGZyYW1lX29mZnNldCBiZWZvcmUgY2FsbGluZyBhc3NpZ25fcGFybXMuCisKK1dlZCBNYXIgMjMgMjM6NTA6MzcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogV2hlbiBtYWtpbmcgYSBtb3ZlIGluc24sCisJZ28gdmlhIGVtaXRfbW92ZV9pbnNuOyBlbHNlIGZhaWxzIHRvIHB1dCBjb25zdGFudHMgaW50byBtZW1vcnkuCisKK1R1ZSBNYXIgMjIgMTU6NDU6MTAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9pbmNyZW1lbnQpOiBGbHVzaCBzcGVjaWFsIGNhc2UgZm9yIHJlZ2lzdGVyX29wZXJhbmQ7CisJYWN0dWFsbHkgY2FsbCB0aGUgcHJlZGljYXRlIHdoYXRldmVyIGl0IGlzLgorCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBNYWtlIGBvcGVyYW5kcycgYSBsb2NhbCB2YXJpYWJsZSwKKwlub3QgYSBnbG9iYWwgc3RhdGljIG9uZSwgaW4gdGhlIGBnZW5fLi4uJyBmdW5jdGlvbi4KKwlBdm9pZHMgbG9zc2FnZSB3aGVuIG9uZSBgZ2VuXy4uLicgZmNuIGNhbGxzIGFub3RoZXIgaW5kaXJlY3RseS4KKworCSogZ2Vub3V0cHV0LmMgKG91dHB1dF9lcGlsb2d1ZSk6IERvbid0IGdpdmUgcHJpbnRmIGEgbnVsbCBzdHJpbmcuCisKK01vbiBNYXIgMjEgMTU6NDE6NDIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKSBbSEFWRV9pbnN2XToKKwlGb3JjZSBWQUxVRTEsIG5vdCBWQUxVRSwgaW50byBhIHJlZ2lzdGVyLgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogV2lkdGggb2YgbWFzayBmb3IgY2xlYXJpbmcKKwl0aGUgYml0LWZpZWxkIGRlcGVuZHMgb24gbW9kZSBvZiBPUDAuCisKKwkqIG5zMzJrLm1kIChicmFuY2ggYW5kIHN0b3JlLWZsYWcgaW5zbnMpOgorCVRlc3QgY2NfcHJldl9zdGF0dXMsIG5vdCBjY19zdGF0dXMuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IERlbGV0ZSB1bnVzZWQgdmFyIGBvbW9kZScuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSwgZGJ4b3V0X3RhZyk6IFVzZSB0aGUgbWFpbiB2YXJpYW50CisJb2YgdGhlIHNwZWNpZmllZCB0eXBlLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogV2hlbiBhbiBhbHRlcm5hdGl2ZSBzdWNjZWVkcyB3aXRob3V0IHJlbG9hZCwKKwlpbml0aWFsaXplIGdvYWxfYWx0ZXJuYXRpdmVfbWF0Y2hlcyBmcm9tIHRoaXNfYWx0ZXJuYXRpdmVfbWF0Y2hlcy4KKworU3VuIE1hciAyMCAxNzo1ODowMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIHRtLXN1biouaDogRG9uJ3QgcHJlZGVmaW5lIGBtNjhrJzsgU3VuJ3MgY29tcGlsZXIgZG9lcyBub3QuCisKK0ZyaSBNYXIgMTggMTM6NDg6MjkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogU2V0IHVwIGdvYWxfYWx0ZXJuYXRpdmVfbWF0Y2hlcworCSphZnRlciogdGhlIGxhYmVsIGBmaW5pc2gnLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IEdFVF9NT0RFX1NJWkUgbmVlZHMgYSBtb2RlLCBub3QgYW4gcnR4LgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBTZXQgZ2xvYmFsIHZhciBgd2hpY2hfYWx0ZXJuYXRpdmUnCisJdG8gaW5kaWNhdGUgd2hpY2ggb2YgdGhlIGFsdGVybmF0aXZlcyB0aGlzIGluc24gbWF0Y2hlcy4KKworCSogdHlwZWNoZWNrLmMgKGNvbW1vbnR5cGUpOiBsb25nIGludCB2cyB1bnNpZ25lZCBpbnQKKwlnaXZlcyBsb25nIHVuc2lnbmVkLCBpZiBsb25nIGFuZCBpbnQgYXJlIHRoZSBzYW1lIHdpZHRoLgorCitUaHUgTWFyIDE3IDE1OjM5OjQ1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYywgdHJlZS5jOiBpbmNsdWRlIGxvY2FsIHZlcnNpb24gb2YgdmFyYXJncy5oLgorCisJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogQ2xlYXIgVFJFRV9FWFRFUk5BTCBhbmQgc2V0IFRSRUVfU1RBVElDCisJaGVyZSByYXRoZXIgdGhhbiBpbiBmaW5pc2hfZnVuY3Rpb24uICBBZmZlY3RzIHRoZSBjYXNlIG9mCisJICAgYGV4dGVybiBmb28gKCk7ICBzdGF0aWMgZm9vIChhKSB7Li4ufScKKworCSogZ2NjLmM6IEhhbmRsZSAtZm5vc3RkaW5jIGFuZCAtZm5vc3RkbGliIHN3aXRjaGVzIGluIHNwZWNzLgorCisJKiBjY2NwLmMgKG1haW4pOiBIYW5kbGUgLWZub3N0ZGluYzogZG9uJ3QgcHV0IGRlZmF1bHQgZGlycworCW9uIHRoZSBjaGFpbiB0byBiZSBzZWFyY2hlZC4KKworCSogY2NjcC5jIChlcnJvciwgd2FybmluZywgZXJyb3Jfd2l0aF9saW5lKTogTm8gbG9uZ2VyIHByaW50CisJY2hhcnBvcyB3aXRoaW4gZmlsZTsgbGluZW5vIGlzIGVub3VnaC4KKworV2VkIE1hciAxNiAxNjo1NjozNiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChleHBhbmRfaW5jLCBleHBhbmRfZGVjKTogSGFuZHkgbmV3IHN1YnJvdXRpbmVzCisJdG8gZ2VuZXJhdGUgeCs9eSBvciB4LT15LCBnaXZlbiB4IGFuZCB5IGFzIHJ0bC4KKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBnZW5fe2FkZDIsc3ViMn1faW5zbi4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IFJldHVybiB0aGUgbW92ZSBpbnNuIGVtaXR0ZWQuCisJRWxpbWluYXRlIHRoZSBjb2RlIGhlcmUgdG8gbW92ZSBhIERJbW9kZSBvciBERm1vZGUgYnkgcGllY2VzLgorCisJKiBlbWl0LXJ0bC5jIChlbWl0X2luc24pOiBSZXR1cm4tdmFsdWUgd2FzIHdyb25nIGlmIGVtaXRfdG9fc2VxdWVuY2U7CisJY2Fubm90IHVzZSBgbGFzdF9pbnNuJyBpbiB0aGF0IGNhc2UuCisKKwkqIHJlZ2NsYXNzLmMsIHN0dXBpZC5jLCBsb2NhbC1hbGxvYy5jLCBnbG9iYWwtYWxsb2MuYzoKKwlTb21lIHZhcnMgb2YgdHlwZSBIQVJEX1JFR19TRVQgc2hvdWxkIGJlIGByZWdpc3Rlcicgb25seQorCWlmIEhBUkRfUkVHX1NFVCBpcyBhIG1hY3JvIChpZSBhIHNjYWxhcikuCisKKwkqIGV4cHIuYyAobW92ZV9ibG9ja19mcm9tX3JlZyk6IE5ldyBmdW5jdGlvbiwgY29udmVyc2Ugb2YKKwltb3ZlX2Jsb2NrX2Zyb21fcmVnLgorCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBJZiBhIEJMS21vZGUgYXJyaXZlcyBpbiByZWdzLAorCWNvcHkgdG8gYSBzdGFjayBzbG90IHVzaW5nIG1vdmVfYmxvY2tfZnJvbV9yZWcuCisKK1R1ZSBNYXIgMTUgMTc6MzM6MjIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IERvbid0IGNvbnZlcnQgdG8gdHdvLW9wZXJhbmQgaW5zbnMKKwl1bmxlc3Mgb3B0aW1pemluZy4KKworCSogdmFyYXNtLmMgKGRlY29kZV9ydHhfY29uc3QsIGNvbnN0X2hhc2hfcnR4KTogRml4IHR5cG9zLgorCisJKiBzdG10LmMgKGZpeHVwX3Zhcl8xKTogRG9uJ3QgYWx0ZXIgaW5zbiBtb3ZpbmcgVkFSIHRvIG9yIGZyb20KKwlhIHN1YnJlZyBvZiBhIHJlZ2lzdGVyLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBEb24ndCBmb2xkIGlmIHJlc3VsdCBpcyBub3QgTEVHSVRJTUFURV9DT05TVEFOVF9QLgorCUNvbnN0cnVjdCBhbGwgcmVzdWx0cyBpbiBuZXcgbG9jYWwgdmFyaWFibGUgTkVXOyB0aGVuIHRlc3QgdGhhdAorCWFuZCBkZWNpZGUgd2hldGhlciB0byByZXR1cm4gaXQgb3IgdGhlIG9yaWdpbmFsIHJ0eC4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogV2hlbiBTUkNfRVFWIGlzIG5vbi0wIGJ1dCBzZXRbMF0gaGFzIGJlZW4KKwljbGVhcmVkLCBkb24ndCBpbnNlcnQgU1JDX0VRViBpbiBoYXNoIHRhYmxlLgorCisJKiBBbGwgaW5zbnMgZW1pdHRlZCBieSBhIGRlZmluZV9leHBhbmQgYmVjb21lIHBhcnQgb2YgdGhlIFNFUVVFTkNFOgorCSogU0VRVUVOQ0Ugbm93IGNvbnRhaW5zIGEgdmVjdG9yIG9mIGluc25zLCBub3Qgb2YgYm9kaWVzLgorCSogaW5zbi1lbWl0LmMgKGFkZF9pbnNuKTogSWYgYGVtaXRfdG9fc2VxdWVuY2UnIG5vbnplcm8sIGFkZCB0aGUKKwlpbnNuIHRvIGEgc2VwYXJhdGUgY2hhaW4sIGBzZXF1ZW5jZV9maXJzdF9pbnNuJy4KKwkoZ2VuX3NlcXVlbmNlKTogVGFrZSBldmVyeXRoaW5nIG9uIHRoYXQgY2hhaW4gYW5kIG1ha2UgYSBTRVFVRU5DRS4KKwkoZW1pdF9pbnNuKTogSGFuZGxlIFNFUVVFTkNFIGRpZmZlcmVudGx5IHNpbmNlIGVsdHMgYXJlIG5vdyBpbnNucy4KKwkoZW1pdF9pbnNuX3tiZWZvcmUsYWZ0ZXJ9KTogSGFuZGxlIFNFUVVFTkNFLgorCShjbGFzc2lmeV9pbnNuKTogI2lmIDAuCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBlbWl0IGFsbCB0aGUgaW5zbnMsIHRoZW4gY2FsbCBnZW5fc2VxdWVuY2UKKwl0byBtYWtlIHRoZSByZXR1cm4gdmFsdWUuCisJRGVmaW5lIHR3byBtYWNyb3MgRE9ORSBhbmQgRkFJTCBmb3IgdXNlIGluIGEgREVGSU5FX0VYUEFORDoKKwlVc2UgRE9ORSB0byBpbmhpYml0IGVtaXNzaW9uIG9mIHRoZSBwYXR0ZXJuIG9mIHRoZSBERUZJTkVfRVhQQU5ELgorCVVzZSBGQUlMIHRvIG1ha2UgdGhlIGdlbl8uLi4gZnVuY3Rpb24gcmV0dXJuIDAuCisKK01vbiBNYXIgMTQgMTI6NDc6MjggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRXh0ZW5kIHRoZSBkb24ndC1zaWduLWV4dGVuZC1lbnVtcyBoYWNrCisJdG8gQ09NUE9ORU5UX1JFRi4gIChTZWUgMyBNYXJjaC4pCisKKwkqIHRtLSouaCAoRlVOQ1RJT05fQVJHLCBldGMuKSBOZXcgYXJndW1lbnQgTkFNRUQKKwlpcyBub256ZXJvIGZvciBhIG5hbWVkIGFyZywgemVybyBmb3IgYW4gYW5vbnltb3VzIGV4dHJhIGFyZy4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBQYXNzIDEgZm9yIE5BTUVEIGlmIGFwcHJvcHJpYXRlLgorCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IFBhc3MgMSBmb3IgTkFNRUQuCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IFBhc3MgMSBmb3IgTkFNRUQuCisKKwkqIGNjY3AuYzogVGVzdCBfX0dOVUNfXywgbm90IF9fR05VX18uCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2FuZF9zdWJzdGl0dXRlX3J0eCk6CisJUmVwbGFjaW5nIGEgTUVNIHBhcm0gd2l0aCB0aGUgcGFybSB2YWx1ZSwgY29udmVydCBtb2RlIGlmIG1pc21hdGNoLgorCUFsd2F5cyB1c2UgVk9JRG1vZGUgd2hlbiBnZW5lcmF0aW5nIFNFVHMuCisJVGFrZSBoZWVkIG9mIEZJUlNUX1BBUk1fT0ZGU0VUIGFuZCBkaXN0aW5ndWlzaCBhcmctcG9pbnRlcgorCWZyb20gZnJhbWUtcG9pbnRlciB3aGVuIHRoZXkgYXJlIGRpZmZlcmVudC4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEhhbmRsZSAoUkVUVVJOKSBpbnNucywgYnkgY3JlYXRpbmcgYQorCXJldHVybl9sYWJlbCB3aGljaCBpcyBvdXRwdXQgYWZ0ZXIgdGhlIGludGVncmF0ZWQgY29kZS4KKworCSogcGFyc2UueSAoeXlsZXgpOiBDb25kaXRpb24gZm9yIGlnbm9yaW5nIGBpbmxpbmUnIHdhcyBiYWNrd2FyZHMuCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBJZ25vcmUgU1RSSUNUX0xPV19QQVJULCBzbyB0aGF0CisJYW4gaW5zbiB0aGF0IHNldHMgU1RSSUNUX0xPV19QQVJUIChhbmQgaXRzIHNvdXJjZSB2YWx1ZXMpIG1heSBiZSBkZWFkLgorCShwcm9wYWdhdGVfYmxvY2spOiBBbHdheXMgcGFzcyAxIGZvciBzdHJpY3RfbG93X29rIHRvIGluc25fZGVhZF9wLgorCisJKiBvcHRhYnMuYyAoZW1pdF91bm9wX2luc24pOiBEb24ndCBtYWtlIGEgUkVHX1JFVFZBTCBub3RlLgorCUNoYW5nZSBhYm92ZSBkZWxldGVzIGRlYWQgU1RSSUNUX0xPV19QQVJUIHN0b3JlcyB3aXRob3V0IG9uZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBJZiB0aGUgbGlicmFyeSBhZGRyZXNzCisJaXMgdG8gYmUgcHV0IGluIGEgcHNldWRvcmVnLCBkbyBpdCBoZXJlLCBhbmQgbWFrZSB0aGUgUkVHX1JFVFZBTAorCW5vdGUgcG9pbnQgYWZ0ZXIgdGhhdC4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IE5ldmVyIGRlZmVyIHN0YWNrLXBvcHMuCisJRGVsZXRpb24gb2YgdGhlIGxpYnJhcnkgY2FsbCBieSBmbG93LmMgbG9zZXMgaWYgdGhleSBhcmUgZGVmZXJyZWQuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IEhhbmRsaW5nIG9mIDY4aydzIHplcm8tZXh0ZW5kIHdhcyBicm9rZW46CisJaXQgbWFkZSB0aGUgYWN0dWFsIHNvdXJjZSBhbmQgdGhlIFJFR19FUVVBTCBzb3VyY2UgZXF1aXZhbGVudC4KKwkqIElmIGRlc3QgaXMgYSBTVFJJQ1RfTE9XX1BBUlQsIGlnbm9yZSB0aGUgYWN0dWFsIHNvdXJjZSBhbmQgdXNlCisJdGhlIFJFR19FUVVBTCBzb3VyY2UgaW4gaXRzIHBsYWNlLiAgc3JjX2VxdidzIG1vZGUgbWF5IGJlIGRpZmZlcmVudAorCWZyb20gc3JjJ3MsIHNvIHVzZSBwcm9wZXIgbW9kZSBpbiBsb29rdXBzIG9yIGluc2VydHMgZm9yIHNyY19lcXYuCisJKiBEb24ndCBmb3JnZXQgdG8gc2V0IHNyY19lcXZfZWx0IGlmIHNyY19lcXYgYWxyZWFkeSBoYXMgYW4gZWx0LgorCSogT24gdXNlX3JlbGF0ZWRfdmFsdWUgZm9yIHNyY19lcXYsIHVzZSBzcmNfZXF2X2VsdC4KKworCSogdG9wbGV2LmMgKG1haW5faW5wdXRfZmlsZW5hbWUpOiBOYW1lIG9mIGZpbGUgbWVudGlvbmVkIGluIGZpcnN0CisJIy1saW5lIGluIHRoZSBpbnB1dC4KKwkoY29tcGlsZV9maWxlKTogUGFzcyBpdCB0byBkYnhvdXRfaW5pdCBhcyAybmQgYXJnLgorCSogZGJ4b3V0LmMgKGRieG91dF9pbml0KTogVXNlIDJuZCBhcmcgdG8gbWFrZSB0aGUgTl9TTyBzeW1ib2wuCisJKiBwYXJzZS55IChjaGVja19uZXdsaW5lKTogU3RvcmUgbWFpbl9pbnB1dF9maWxlbmFtZS4KKworCSogZXhwci5jIChtb3ZlX2Jsb2NrX3RvX3JlZyk6IE5ldyBmdW5jdGlvbiwgY29waWVzIGEgTUVNOkJMSworCXRvIGNvbnNlY3V0aXZlIHJlZ2lzdGVycy4KKwkodXNlX3JlZ3MpOiBOZXcgZnVuY3Rpb24gdG8gZW1pdCBhIFVTRSBmb3IgZWFjaCByZWcgaW4gYSBzZXJpZXMuCisJKGV4cGFuZF9jYWxsKTogVXNlIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyB3aGVuIGEgcHJlY29tcHV0ZWQgQkxLbW9kZQorCWFyZyBpcyBwYXNzZWQgZW50aXJlbHkgaW4gcmVncy4KKwkoZW1pdF9wdXNoX2luc24pOiBVc2UgbW92ZV9ibG9ja190b19yZWcgd2hlbiBQQVJUSUFMID4gMC4KKwlBbHNvLCBkb24ndCBzdWJ0cmFjdCBVU0VEIGZyb20gU0laRSB0d2ljZS4KKwlVc2UgcGx1c19jb25zdGFudCB0byBhZGQgQVJHU19TT19GQVIgc28gY2FuIHVzZSBpbmRleGluZyBvbiBzdGFjayBwdHIuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9pbnRlZ2VyX3plcm8pOiBVc2UgcnR4IDAsIG5vdCB0cmVlIDAsCisJdG8gZ28gd2l0aCBwcmV2IGNoYW5nZSBpbiBBU01fT1VUUFVUX0lOVC4KKworU3VuIE1hciAxMyAwMToxNjoxNyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChjb25zdF9oYXNoLCBjb21wYXJlX2NvbnN0YW50XzEsIHJlY29yZF9jb25zdGFudF8xKToKKwlIYW5kbGUgTk9QX0VYUFIgYW5kIENPTlZFUlRfRVhQUiBpbiBjb25zdGFudCBleHByZXNzaW9ucy4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBXaGVuIHdpZGVuaW5nIG9wZXJhbmRzLAorCXRob3NlIHdpdGggVk9JRG1vZGUgKGxpa2UgQ09OU1RfSU5UKSBtYXkgYmUgbGVmdCBhbG9uZS4KKworU2F0IE1hciAxMiAwMTowOToyNCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFdoZW4gbWFraW5nIGEgLmNvbW0gb3IgLmxjb21tLAorCXJvdW5kIHNpemUgdXAgdG8gbXVsdGlwbGUgb2YgQklHR0VTVF9BTElHTk1FTlQuCisKKwkqIG9ic3RhY2suYyAoX29ic3RhY2tfbmV3Y2h1bmspOiBFbGltaW5hdGUgZmVuY2Vwb3N0IGNhdXNpbmcgY29weWluZworCXRvIGFjY2VzcyB0aGUgd29yZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIG9iamVjdC4KKworCSogdG0tdmF4LmgsIHRtLW5zMzJrLmg6IERlZmluZSB7SU5JVF8sfUNVTVVMQVRJVkVfQVJHUworCWFuZCB1cGdyYWRlIEZVTkNUSU9OX0FSR1MgZm9yIG5ldyBjYWxsaW5nIGNvbnZlbnRpb24uCisKKwkqIGdjYy5jOiBJZiAtTywgZGVmaW5lIF9fT1BUSU1JWkVfXy4KKwkoZG9fc3BlY18xKTogJWMgbm93IHNjYW5zIFNJR05FRF9DSEFSX1NQRUM6IGRlZmluZSBfX0NIQVJfVU5TSUdORURfXworCXdoZW4gYXBwcm9wcmlhdGUgd2hldGhlciBvciBub3QgaXQgaXMgdGhlIGRlZmF1bHQuCisKK0ZyaSBNYXIgMTEgMTY6NDk6MjUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBwYXJzZS55OiBEZWZpbmUgWVlERUJVRy4KKworCSogcnRsLmMgKHJ0eF91bnN0YWJsZV9wKTogTmV3IGZ1bmN0aW9uLCBzYW1lIGFzIG9sZCBydHhfdmFyaWVzX3AuCisJKiBleHBsb3cuYyAoc3RhYmlsaXplKTogVXNlIHJ0eF91bnN0YWJsZV9wLgorCSogcnRsLmMgKHJ0eF92YXJpZXNfcCk6IElnbm9yZSBgdW5jaGFuZ2luZycgKHVuZG9pbmcgcHJldmlvdXMgY2hhbmdlCisJaW4gdGhpcyBmdW5jdGlvbikgYmVjYXVzZSBgdW5jaGFuZ2luZycgZG9lc24ndCBlbmFibGUgY3NlIHRvIGNvbXBhcmUKKwl0aGUgdmFsdWUgd2l0aCBhbnkgcGFydGljdWxhciBjb25zdGFudCB2YWx1ZS4KKwkqIHJ0bC5jIChpbnNuX3N0b3JlX2FkZHJfdmFyaWVzX3ApOiBEZWxldGUsIHNpbmNlIG5vdCB1c2VkLgorCisJKiBoYXJkLXJlZy1zZXQuaCAoQ09QWV9IQVJEX1JFR19TRVQsIGV0Yy4pIG5vbi1zY2FsYXIgY2FzZToKKwlSZW5hbWUgYW5kIHJlYXJyYW5nZSB0ZW1wIHZhcmlhYmxlcyB0byBhdm9pZCBuYW1lIGNvbmZsaWN0cyB3aXRoIGFyZ3MuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19jbGFzc19yZWNvcmQpOiBEb24ndCBzbWFzaCBjbGFzcyB0byBHRU5FUkFMX1JFR1MKKwlhbmQgZG9uJ3QgZXhpdCBwcmVtYXR1cmVseSwgd2hlbiBgcicgb3IgYGcnIGlzIHNlZW4uICBNdXN0IG1lcmdlCisJR0VORVJBTF9SRUdTIHdpdGggcHJldmlvdXNseSBkZXRlcm1pbmVkIGRlc2lyZWQgY2xhc3MuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpIFtubyBQVVNIX1JPVU5ESU5HXTogV2hlbiBwdXNoaW5nIHRoZSBhcmcKKwlibG9jaywgdHJ5IHRvIHJldXNlIHNvbWUgb2YgdGhlIHBlbmRpbmdfc3RhY2tfYWRqdXN0LgorCisJKiBjc2UuYzogcXR5X2NvbnN0IGNhbiBub3cgaG9sZCB2YWx1ZXMgKFBMVVMgZnJhbWVfcG9pbnRlciBpbnRlZ2VyKS4KKwlFZmZlY3QgaXMgdGhhdCBzdG9yaW5nIGludG8gYSBzdHJ1Y3R1cmUgZG9lc24ndCBpbnZhbGlkYXRlCisJbWVtIHJlZnMgdG8gc2NhbGFyIHN0YWNrIHZhcmlhYmxlcyB2aWEgYWRkcmVzc2VzIGluIHJlZ2lzdGVycy4KKwkoaW5zZXJ0KTogTG9hZCBzdWNoIHZhbHVlcyBpbnRvIHF0eV9jb25zdCwgbGlrZSB0cnVlIGNvbnN0YW50cy4KKwkoZm9sZF9ydHgpOiBJZ25vcmUgcXR5X2NvbnN0IGlmIGl0IGlzbid0IHJlYWxseSBhIGNvbnN0YW50LgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKSBWQVJfREVDTDogQ29weSBERUNMX1JUTCBiZWZvcmUgY2FsbGluZworCWNoYW5nZV9hZGRyZXNzLCBzbyBpdCBpc24ndCBwZXJtYW5lbnRseSBjbG9iYmVyZWQuCisKKwkqIHN0bXQuYyAoZml4dXBfdmFyX3JlZnNfMSk6IE1ha2Ugc3VyZSB0aGUgc3RhY2sgc2xvdCBhZGRyZXNzCisJaXMgdmFsaWQgYnkgY2FsbGluZyBmaXh1cF9zdGFja18xIGVhY2ggdGltZSBpdCBpcyBzdWJzdGl0dXRlZC4KKworCSogc3RtdC5jIChmaXh1cF9zdGFja18xKTogUmV0dXJuIHRoZSBhbHRlcmVkIHJ0eC4KKwlJZiBpdCdzIGEgTUVNIGluIHRoZSBzdGFjaywgcmV0dXJuIGEgY29weSBvZiBpdC4KKworCSogc3RtdC5jIChmaXh1cF9zdGFja19zbG90cyk6ICNpZiAwLgorCSogc3RtdC5jIChleHBhbmRfZmluaXNoX2Z1bmN0aW9uKTogRG9uJ3QgY2FsbCBmaXh1cF9zdGFja19zbG90cworCWJlY2F1c2UgZml4dXBfc3RhY2tfMSBpcyBjYWxsZWQgZWxzZXdoZXJlIHdoZW4gbmVjZXNzYXJ5LgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBOZXcgYXJnIGlzIGxvY2F0aW9uIG9mIHRoZSBNRU0KKwl3aG9zZSBhZGRyZXNzIGlzIGJlaW5nIHJlbG9hZGVkLiAgU28gd2UgY29weSB0aGUgTUVNIGlmIGl0CisJaXMgb25lIHRoYXQgY2FuIGJlIHNoYXJlZC4gIE5ldyBhcmcgMCBtZWFucyBubyBuZWVkIHRvIGNvcHkgdGhlIE1FTS4KKwlBbGwgY2FsbGVycyBwYXNzIHRoZSBuZXcgYXJnLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IERldGVybWluZSBwYXJtIHN0YWNrLXNpemUgZnJvbQorCXRoZSBERUNMX0FSR19UWVBFLCBub3QgZnJvbSB0aGUgVFJFRV9UWVBFLgorCUVsc2UgbG9zZXMgd2hlbiBwYXJtIGlzIGRlY2xhcmVkIGBmbG9hdCcgYnV0IHBhc3NlZCBhcyBgZG91YmxlJy4KKworCSogZW1pdC1ydGwuYyAobWFrZV9zYWZlX2Zyb20pOiBDb25zdGFudHMgYXJlIGFscmVhZHkgc2FmZS4KKwlVc2UgcHJvcGVyIG1hY2hpbmUgbW9kZSBmb3IgdGVtcCByZWcgd2hlbiBuZWVkZWQuCisKK1RodSBNYXIgMTAgMTQ6MzU6MTQgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogRG9uJ3QgcGFzcyB3cm9uZyB0eXBlIHRvIHBsdXNfY29uc3RhbnQKKwkoY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBQVVNIX1JPVU5ESU5HKS4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IFJvdW5kIHBhcnRpYWxbaV0gZG93biB0byBtdWx0aXBsZSBvZgorCVBBUk1fQk9VTkRBUlkgYmVmb3JlIHN1YnRyYWN0aW5nIGl0IGZyb20gYXJnIHNpemUgb24gc3RhY2suCisJQ29tcHV0ZSB0aGVzZSBzaXplcyBqdXN0IG9uY2UgYW5kIGtlZXAgdGhlbSBpbiB2ZWN0b3IgYGFyZ19zaXplJy4KKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBIYW5kbGUgYHBhcnRpYWwnIHVuaWZvcm1seSwgaW4gYWNjb3JkCisJd2l0aCB0aGlzIG5ldyBjb252ZW50aW9uIGZvciBob3cgaXQgYWZmZWN0cyB0aGUgc3RhY2sgc2l6ZS4KKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogUm91bmQgTlJFR1MgZG93biB0byBQQVJNX0JPVU5EQVJZIGxpa2V3aXNlLgorCisJKiBvYnN0YWNrLmggKG9ic3RhY2tfZnJlZSBtYWNybykgW05vdCBfX0dOVUNfXyBidXQgX19TVERDX19dOgorCURvbid0IGNhc3QgcmVzdWx0IG9mIChvYnN0YWNrX2ZyZWUpIHRvIChpbnQpOyBqdXN0IGlnbm9yZSBpdC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEluaXRpYWxpemUgb3BlcmFuZF9yZWxvYWRudW0uCisKKwkqIG9wdGFicy5jIChlbWl0X3Vub3BfaW5zbik6IE5ldyBhcmd1bWVudCBDT0RFLCB1c2VkIHRvIG1ha2UKKwlhIFJFR19FUVVBTCBub3RlIGZyb20gb3BlcmFuZCBPUDAgaWYgbW9yZSB0aGFuIG9uZSBpbnNuIHJlc3VsdHMuCisJQWxzbyBhIFJFR19SRVRWQUwgbm90ZS4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogUGFzcyBDT0RFIGFyZyB0byBlbWl0X3Vub3BfaW5zbi4KKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogVXNlIGluc25fZGVhZF9wIHRvIGRlY2lkZSB3aGV0aGVyCisJdG8gaGFuZGxlIGEgUkVHX1JFVFZBTCBub3RlIGJ5IHNraXBwaW5nIHNvbWUgaW5zbnMuCisJQWx3YXlzIHBhc3MgMSBmb3IgU1RSSUNUX0xPV19PSyBmb3IgYW4gaW5zbiB0aGF0IGhhcyBhIFJFR19SRVRWQUwgbm90ZS4KKwlIYW5kbGUgY2FzZSB3aGVyZSBSRUdfUkVUVkFMIHBvaW50cyBhdCBhbiBpbnNuIHRoYXQncyBkZWxldGVkLgorCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IE5ldyBvcGVyYW5kIFNUUklDVF9MT1dfT0sgc2F5cyBhbiBpbnNuCisJdGhhdCBzZXRzIFNUUklDVF9MT1dfUEFSVCBtYXkgYmUgY29uc2lkZXJlZCBkZWFkLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogT25jZSBhZ2FpbiBjYW5vbmljYWxpemUgWC1DIHRvIFgrKC1DKS4KKwlDaGFuZ2Ugb24gTWFyY2ggMSBtYWRlIGl0IHN0b3AgZG9pbmcgdGhpcy4KKworV2VkIE1hciAgOSAwMToyNTozNSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IERvbid0IGFsd2F5cyBtYXJrIHRoZSBtb3ZlZCByZWcKKwlhcyBlcXVpdmFsZW50IHRvIGEgY29uc3RhbnQgdmFsdWU6IG5vdCBpZiBpdCBpcyBiZWluZyBjbGVhcmVkCisJdG8gemVyby1leHRlbmQgc29tZXRoaW5nIG9yIGlmIGl0IGlzIHVzZWQgb3V0c2lkZSB0aGUgbG9vcC4KKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlc18xKTogRmluaXNoIGxhc3QgY2hhbmdlLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IFVwZGF0ZSBzdGFja19hcmdzX3NpemUgcHJvcGVybHkuCisJRmlndXJlIEZJUlNUX1BBUk1fT0ZGU0VUIHdoZW4gbWFraW5nIHRoZSBzdGFjayBtZW0gcmVmcy4KKworCSogY3NlLmMgKGluc2VydCk6IEJ1aWxkIHRoZSByZWxhdGVkX3ZhbHVlIGxpc3RzIGluIHRoZSBvcHBvc2l0ZSBvcmRlcgorCXNvIHRoYXQgdGhlIG9sZGVzdCBlbGVtZW50IGluIHRoZSBjaGFpbiBpcyB0aGUgb25lIHRoYXQgZm9sbG93cworCXRoZSBtb3N0IGJhc2ljIGVsZW1lbnQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDT01QT05FTlRfUkVGIGNhc2U6IGNyaXRlcmlvbiBmb3IKKwljb252ZXJ0aW5nIHRoZSB0aGUgcmVzdWx0IGlzIGlmIE1PREUxIChpdHMgbW9kZSBvZiBhcnJpdmFsKSBpc24ndAorCWEgbW9kZSB3ZSB3YW50LgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEZpeCB0eXBvIHNldHRpbmcgVFJFRV9BU01fV1JJVFRFTi4KKworVHVlIE1hciAgOCAxMzoxODozNyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGNzZSdpbmcgb2YgbGlicmFyeSBjYWxscy4KKworCSogZXhwci5oOiB0eXBlIGBvcHRhYicgaXMgbm93IGEgcHRyIHRvIGEgc3RydWN0LgorCVRoZSBvbGQgY29udGVudHMgYXJlIG5vdyB0aGUgYGhhbmRsZXJzJyBlbGVtZW50LgorCVRoZSBgY29kZScgZWxlbWVudCBnaXZlcyB0aGUgUlRMIGNvZGUgZm9yIHRoZSBraW5kIG9mIGV4cHJlc3Npb24KKwl0aGlzIG9wdGFiIG1ha2VzIChQTFVTIGZvciBhZGRfb3B0YWIsIGV0Yy4pCisJRXZlcnkgdmFyIGZvcm1lcmx5IGRlY2xhcmVkIGBzdHJ1Y3Qgb3B0YWIgKicgaXMgbm93IGp1c3QgYG9wdGFiJy4KKworCSogb3B0YWJzLmMgKGluaXRfb3B0YWIsIGluaXRfb3B0YWJzKTogTmV3IGZ1bmN0aW9uIHRvIGluaXQgYW4gb3B0YWIKKwlhbmQgc2V0IGl0cyBgY29kZScuICBVc2VkIGluIGluaXRfb3B0YWJzLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdW5vcCk6IFVzZSB0aGUgYGNvZGUnIGZpZWxkCisJdG8gYWRkIGEgUkVHX0VRVUFMIG5vdGUgdG8gdGhlIGluc24gdGhhdCBjb3BpZXMgYSBsaWJjYWxsJ3MKKwl2YWx1ZSBpbnRvIGEgcHNldWRvLiAgQWxzbyBhIFJFR19SRVRWQUwgbm90ZSBwb2ludGluZyBhdCB0aGUKKwlmaXJzdCBpbnNuIGZvciBzZXR0aW5nIHVwIGFyZ3MgZm9yIHRoZSBjYWxsLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBQcm9jZXNzIFJFR19FUVVJViBhbmQgUkVHX0VRVUFMIGRhdHVtIGFsbW9zdCBsaWtlCisJYW5vdGhlciBzZXQtc3JjOyBwdXQgdGhlIGFjdHVhbCBzcmMgaW50byB0aGUgZXF1aXZhbGVuY2UgY2xhc3Mgb2YgdGhhdC4KKworCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBJZiBhIGRlYWQgaW5zbiBoYXMgYSBSRUdfUkVUVkFMIHJlZy1ub3RlLAorCWVpdGhlciBpZ25vcmUgb3IgZGVsZXRlIGFsbCB0aGUgaW5zbnMgYmFjayB0byB0aGUgaW5zbiB0aGUgUkVHX0FSRworCW5vdGUgcG9pbnRzIHRvLgorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IERvbid0IHJlZnJhaW4gZnJvbSBhbGxvY2F0aW5nIGEKKwkiY29uc3RhbnQiIHJlZ2lzdGVyIGlmIHRoZSBjb25zdGFudCB2YWx1ZSBpc24ndCBvayBmb3IgYW4gaW1tZWRpYXRlIG9wLgorCisKKwkqIGRieG91dC5jIChDT05USU4pOiBJZiBEQlhfQ09OVElOX0xFTkdUSCBpcyA8PSAwLCBkbyBub3RoaW5nLgorCisJKiBjY2NwLmM6IEV4dHJhIGRlZmF1bHQgaW5jbHVkZSBkaXJzIGZvciBDKysuCisJKiBjY2NwLmMgKG1haW4pOiBGb3IgLU0sIHN0cmlwIGRpcnMgZnJvbSBvYmplY3QgZmlsZSBuYW1lLgorCisJKiBydGwuYyAoZmluZF9yZWdfbm90ZSk6IE5ldyBmdW5jdGlvbi4KKworCSogZXhwbWVkLmMgKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IERvbid0IEFORCB3aXRoIFZBTFVFCisJaWYgVkFMVUUncyBvcmlnaW5hbCBtb2RlIGhhZCBubyBtb3JlIGJpdHMgdGhhbiB3ZSB3YW50LgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogVXNlIHZhcmFyZ3MuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2FuZF9zdWJzdGl0dXRlX3J0eCk6IFJlY29nbml6ZSBhcmdfcG9pbnRlcl9ydHgKKwlhbmQgdHJhbnNsYXRlIGl0IGp1c3QgbGlrZSBmcmFtZV9wb2ludGVyX3J0eC4KKworTW9uIE1hciAgNyAwMDo0ODozMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2ZpeGVkX2JpdF9maWVsZCk6CisJU2hpZnQgY291bnRzIHdlcmUgd3JvbmcgZm9yIG5hcnJvdyBNT0RFIGluIHNpZ25lZCBjYXNlLgorCURvIHRoZSBzaWduLWV4dGVuZGluZyBzaGlmdHMgaW4gdGhlIG5hcnJvd2VzdCBtb2RlIHBvc3NpYmxlLgorCVJlZHVjZSBiaWctZW5kaWFuIGNhc2UgdG8gbGl0dGxlLWVuZGlhbiBjYXNlLgorCURlbGV0ZSBTTE9XX1pFUk9fRVhURU5EIGNvbmRpdGlvbmFsLgorCisJKiBJbXBsZW1lbnQgY29uc3RhbnRzIGluIG1lbW9yeSBmb3IgUklTQyBtYWNoaW5lcworCXdpdGggbGltaXRlZCBhYmlsaXRpZXMgZm9yIGltbWVkaWF0ZSBhcmdzIGFuZCBjb25zdGFudCBhZGRyZXNzZXMuCisKKwkqIGdlbm91dHB1dC5jIChvdXRwdXRfZXBpbG9ndWUpOiBFbXB0eSBwcmVkaWNhdGUtbmFtZQorCWlzIG91dHB1dCBhcyAwIGluIGluc25fb3BlcmFuZF9wcmVkaWNhdGUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDaGFuZ2UgNHRoIGFyZyB0byBhbiBgZW51bSBleHBhbmRfbW9kaWZpZXInCisJVmFsdWUgRVhQQU5EX1NVTSBjb3JyZXNwb25kcyB0byBvbGQgbm9uemVybyA0dGggYXJnLgorCVZhbHVlIEVYUEFORF9DT05TVF9BRERSRVNTIG1lYW5zIG9rIHRvIHJldHVybiBhbiBpbnZhbGlkIE1FTQorCXdob3NlIGFkZHJlc3MgaXMgYSBjb25zdGFudC4gIENoYW5nZXMgZm9yIHRoaXMgY2FzZSBpbiBBRERSX0VYUFIsCisJQ09NUE9ORU5UX1JFRiBhbmQgLi4uX0RFQ0wuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfYXJpdGhfY29uc3RhbnQpOiBGdW5jdGlvbiBkZWxldGVkLgorCSogdG0tKi5oOiAoQVNNX09VVFBVVF97SU5ULFNIT1JULENIQVJ9KTogMm5kIGFyZyBpcyBub3cgYW4gUlRYCisJYW5kIG91dHB1dCBpdCB1c2luZyBgb3V0cHV0X2FkZHJfY29uc3QnLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IENoYW5nZSB1c2VzIG9mIHRob3NlIG1hY3Jvcy4KKworCSogdmFyYXNtLmMgKGluaXRfY29uc3RfcnR4X2hhc2hfdGFibGUpOiBJbml0aWFsaXplIGNvbnN0YW50IHBvb2wKKwlmb3IgYSBuZXcgZnVuY3Rpb24uICBDYWxsZWQgZnJvbSBgZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0Jy4KKwkqIHZhcmFzbS5jIChmb3JjZV9jb25zdF9tZW0pOiBUdXJuIGEgY29uc3RhbnQgcnR4IGludG8gYSBNRU0gcnR4CisJd2hpY2ggcmVmZXJzIHRvIHRoZSBjb25zdGFudCBwb29sLiAgT3RoZXIgbmV3IHN1YnJvdXRpbmVzIHRvby4KKwkoZm9yY2VfY29uc3RfZG91YmxlX21lbSk6IFVzZSBmb3JjZV9jb25zdF9tZW0gdG8gbWFrZSB0aGUgTUVNLgorCShpbW1lZF9yZWFsX2NvbnN0KTogTm8gbG9uZ2VyIHJlY29yZCB0aGUgUkVBTF9DU1Qgbm9kZSBpbiB0aGUgcnR4LgorCisJKiBleHBsb3cuYyAoZm9yY2VfcmVnKTogSWYgYXJnIGlzIGEgY29uc3RhbnQgYW5kIG5vdCBsZWdpdGltYXRlLAorCXB1dCBpdCBpbiB0aGUgY29uc3RhbnQgcG9vbCB3aXRoIGZvcmNlX2NvbnN0X21lbS4KKwlNYXJrIHRoZSByZWdpc3RlciBhcyBlcXVpdmFsZW50IHRvIHRoZSBjb25zdGFudCB2YWx1ZS4KKwkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc24pOiBMaWtld2lzZS4KKwkqIGV4cGxvdy5jIChicmVha19vdXRfbWVtX3JlZnMpOiBVc2UgZm9yY2VfcmVnIHRvIHB1dCBpbnRvIGEgcmVnLgorCSogZXhwbG93LmMgKG1lbW9yeV9hZGRyZXNzKTogTGlrZXdpc2UuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogQUREUl9FWFBSIGNhc2U6IGxpa2V3aXNlLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogRG8gZm9yY2VfcmVnIG9uIGVhY2ggcmVnaXN0ZXItb3BlcmFuZAorCXNvIGl0IHdpbGwgZ28gdGhyb3VnaCBhIHBzZXVkbyBhbmQgY2FuIGJlIGNzZSdkLgorCisJKiByZWNvZy5jIChpbW1lZGlhdGVfb3BlcmFuZCwgbm9ubWVtb3J5X29wZXJhbmQsIGdlbmVyYWxfb3BlcmFuZCk6CisJRm9yIGNvbnN0YW50IG9wZXJhbmRzLCB1c2UgTEVHSVRJTUFURV9DT05TVEFOVF9QIHRvIGRlY2lkZSB2YWx1ZS4KKwkqIHRtLSouaDogRGVmaW5lIExFR0lUSU1BVEVfQ09OU1RBTlRfUC4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBJbnZhbGlkIGNvbnN0YW50cyBjYW4ndCBnbyBpbiByZWdfZXF1aXZfY29uc3RhbnQuCisKK1N1biBNYXIgIDYgMjI6NDk6MDYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWRzKTogSWYgSU4gb2NjdXJzIHdpdGhpbiBPVVQsCisJZG9uJ3QgcmV1c2UgYW4gZXhpc3RpbmcgaW5wdXQtb25seSByZWxvYWQuICBPdGhlcndpc2Ugd291bGQgbG9zZSBvbgorCShzZXQgKG1lbSAocGx1cyBSIEMpKSAocGx1cyBSIEMxKSkgaWYgUiBpcyBhdmFpbGFibGUgaW4gYSBzcGlsbCByZWcuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogRG9uJ3QgY2hvb3NlIGFuIGluaGVyaXRlZAorCXJlbG9hZCByZWdpc3RlciB0aGF0J3MgaW4gdXNlIGZvciBhbm90aGVyIHJlbG9hZC4KKwlXaXRob3V0IHRoaXMsIGFib3ZlIGNoYW5nZSBkb2Vzbid0IGhhdmUgYW4gZWZmZWN0LgorCisJKiBJbXBsZW1lbnQgdGhlIGB1bmNoYW5naW5nJyBmbGFnIGluIE1FTSBhbmQgUkVHIHJ0eCdzLgorCUFsc28gc2ltcGxpZnkgY29kZSB3aXRoIGEgbmV3IHN1YnJvdXRpbmUgYGNoYW5nZV9hZGRyZXNzJy4KKworCSogZW1pdC1ydGwuYyAoY2hhbmdlX2FkZHJlc3MpOiBSZXR1cm4gbmV3IG1lbW9yeSByZWYgbGlrZSBhbiBvbGQKKwlvbmUgYnV0IHdpdGggc3BlY2lmaWVkIG1vZGUgYW5kIGFkZHJlc3MuCisJKiBleHBtZWQuYyAoZXh0cmFjdHssX3NwbGl0LF9maXhlZH1fYml0X2ZpZWxkKTogVXNlIGNoYW5nZV9hZGRyZXNzLgorCShzdG9yZXssX3NwbGl0LF9maXhlZH1fYml0X2ZpZWxkKTogTGlrZXdpc2UuCisJKiBleHByLmMgKHN0b3JlX2V4cHIsIGV4cGFuZF9leHByKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuYyAobW92ZV9ieV9waWVjZXMpOiBBcmdzIG5vdyBtZW1yZWZzLCBub3QgYWRkcmVzc2VzLgorCUVsaW1pbmF0ZSB0aGUgRlJPTV9WT0wgYW5kIFRPX1ZPTCBhcmdzIHNpbmNlIHRoZSBtZW1yZWZzIGluZGljYXRlLgorCUNoYW5nZSB0aGUgc3RydWN0dXJlIGBzdHJ1Y3QgbW92ZV9ieV9waWVjZXMnIHNpbWlsYXJseS4KKwkobW92ZV9ieV9waWVjZXNfMSk6IFNhbWUgY2hhbmdlczsgdXNlIGNoYW5nZV9hZGRyZXNzLgorCShlbWl0X2Jsb2NrX21vdmUsIGVtaXRfcHVzaF9pbnNuKTogQ2FsbHMgdG8gbW92ZV9ieV9waWVjZXMgY2hhbmdlZC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVXNlIGNoYW5nZV9hZGRyZXNzOworCWhhbmRsZSAtPnVuY2hhbmdpbmcgZmllbGQuCisKKwkqIHJ0bC5jIChydHhfdmFyaWVzX3ApOiBSZWdzIG9yIG1lbXJlZnMgd2l0aCAtPnVuY2hhbmdpbmcgZG9uJ3QgdmFyeS4KKwkoY29weV9ydHgpOiBQZXJzZXJ2ZSAtPnVuY2hhbmdpbmcuCisJKHByaW50X3J0eCk6IFByaW50IC0+dW5jaGFuZ2luZyBhcyAvdS4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IFNldCAtPnVuY2hhbmdpbmcgb24gYGNvbnN0JyBkZWNscy4KKwkoZml4dXBfbWVtb3J5X3N1YnJlZyk6IFVzZSBjaGFuZ2VfYWRkcmVzcy4KKwkoYXNzaWduX3Bhcm1zKTogUmVjb3JkIGluIHRoZSBydGwgd2hpY2ggcGFybXMgYXJlIHZvbGF0aWxlIG9yIGNvbnN0LgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBTZXQgLT51bmNoYW5naW5nIG9uIGBjb25zdCcgZGVjbHMuCisJKG91dHB1dF9jb25zdGFudF9kZWYpOiBBbHdheXMgc2V0IC0+dW5jaGFuZ2luZyBmb3IgY29uc3RhbnQgcmVmcy4KKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBEb24ndCB0cmVhdCBhIE1FTSBhcyAiaW4gbWVtb3J5IgorCWlmIGl0cyAtPnVuY2hhbmdpbmcgYml0IGlzIHNldC4KKworCSogbG9vcC5jIChpbnZhcmlhbnRfcCk6IEEgUkVHIG9yIE1FTSB3aXRoIC0+dW5jaGFuZ2luZyBpcyBpbnZhcmlhbnQKKwkoZm9yIGEgTUVNLCB0aGUgYWRkcmVzcyBtdXN0IGJlIGludmFyaWFudCkuCisKK1NhdCBNYXIgIDUgMTM6MjI6MTEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBnZW5jb25maWcuYyAod2Fsa19pbnNuX3BhcnQpOiBETyBjb25zaWRlciBNQVRDSF9EVVBzCisJd2hlbiBjYWxjdWxhdGluZyBNQVhfUkVDT0dfT1BFUkFORFMuCisJKGdlbl9leHBhbmQpOiBkZWZpbmVfZXhwYW5kIGlzIG5vdyBkaWZmZXJlbnQgZnJvbSBkZWZpbmVfaW5zbi4KKwlDb21wdXRlIG1heCAjIFNFVHMgb3IgQ0xPQkJFUnMgZm9yIGFueSBvbmUgc3ViLWluc24gaW4gYSBkZWZpbmVfZXhwYW5kLAorCWluc3RlYWQgb2Ygc3VtbWluZyB0aGVtIGFsbC4gIEFuZCBkb24ndCBjb3VudCB0aGUgTUFUQ0hfRFVQcyBhdCBhbGwuCisKKwkqIGdlbmVtaXQuYyAobWF4X29wZXJhbmRfMSk6IFJlY29yZCBsYXJnZXN0IG9wbm8gaW4gYSBNQVRDSF9EVVAKKwlzZXBhcmF0ZWx5IGZyb20gbGFyZ2VzdCBpbiBhIE1BVENIX09QRVJBTkQuCisJKGdlbl9leHBhbmQpOiBBbiBvcGVyYW5kICMgd2l0aCBvbmx5IE1BVENIX0RVUHMgZ2V0cworCWEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIGdlbl8gZnVuY3Rpb24gd2Ugb3V0cHV0LgorCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lKTogRGVsZXRlIHZlc3RpZ2Ugb2YgTk9URV9JTlNOX0lTX0RFQ0wuCisKKwkqIGNzZS5jIChpbnZhbGlkYXRlKTogSGFuZGxlIHN1YnJlZ3MuCisJKGNzZV9pbnMsIGludmFsaWRhdGVfZnJvbV9jbG9iYmVycyk6IERvIGNhbGwgYGludmFsaWRhdGUnIGZvciBzdWJyZWdzLgorCShpbnNlcnRfcmVncyk6IFdoZW4gYXNzaWduaW5nIG9uZSBzdWJyZWcgZnJvbSBhIGxpa2Ugb25lLAorCW1ha2UgdGhlIHR3byByZWdzIGVxdWl2YWxlbnQuCisJKGNzZV9pbnNuKTogRG8gY2FsbCBpbnNlcnRfcmVncyB3aGVuIGRlc3QgaXMgYSBzdWJyZWcuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBQcmVjb21wdXRlIGFsbCBhcmdzIGdvaW5nIHZpYSBoYXJkIHJlZ3MKKwlzaW5jZSBldmVuIGFyaXRobWV0aWMgY291bGQgcmVxdWlyZSBhIGxpYnJhcnkgY2FsbC4KKworRnJpIE1hciAgNCAxNTo0ODoxNyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9wYXJtcyk6IEZ1bmN0aW9uIGRlbGV0ZWQuCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IERvbid0IGNhbGwgaXQuCisKKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKToKKwlzdGFja19hcmdzX3NpemUgY291bnRzIHNpemUgb2YgYXJncyBzbyBmYXIgcGFzc2VkIG9uIHN0YWNrLgorCVVzZSBQQVJNX0JPVU5EQVJZIHdoZW4gY291bnRpbmcgaXQ7IGRlcml2ZSBzdGFjayBvZmZzZXRzIGZyb20gaXQuCisJU2V0IGN1cnJlbnRfZnVuY3Rpb25fYXJnc19zaXplIGZyb20gaXQuCisKKwlXaGVuIGFuIGFyZyBpcyBzcGxpdCBiZXR3ZWVuIHJlZ3MgYW5kIHN0YWNrLCBtYWtlIHN0YWNrIHNwYWNlCisJZm9yIHRoZSByZXN0IG9mIGl0LCBhbmQgY291bnQgaXQuCisJSW4gYSB2YXJhcmdzIGZ1bmN0aW9uLCBwdXNoIHRoZSBsYXN0IGFyZyBvbnRvIHRoZSBzdGFjay4KKwlXaGVuIGFuIGFyZyBpcyBwYXNzZWQgaW4gcmVncyBhbG9uZSwgZG9uJ3QgcmVtZW1iZXIgYSBzdGFjayBzbG90CisJZm9yIGl0LCBhbmQgaWYgaXQgbmVlZHMgb25lLCB1c2UgYXNzaWduX3N0YWNrX2xvY2FsLgorCisJU2V0IERFQ0xfT0ZGU0VUIHRvIHRoZSBzdGFjayBvZmZzZXQsIG9yIC0xIGlmIHBhcm0gY2FtZSBpbiByZWdzLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogQW5vbnltb3VzIGFyZ3Mgb2YgYSB2YXJhcmdzIGZ1bmN0aW9uCisJYXJlIGFsd2F5cyBwYXNzZWQgb24gdGhlIHN0YWNrLgorCisJKiB2YXJhc20uYyAoZm9yY2VfY29uc3RfZG91YmxlX21lbSk6IENvcHkgdGhlIE1FTSBydHgKKwlpZiBpdCBtYXkgbmVlZCB0byBiZSBzbWFzaGVkIGJ5IHJlbG9hZGluZy4KKworCSogZ2VuZW1pdC5jIChnZW5fZXhwYW5kKTogZGVmaW5lX2V4cGFuZCBtdXN0IGhhdmUgbm9uZW1wdHkgcGF0dGVybgorCWV2ZW4gdGhvdWdoLCBkdWUgdG8gYHJldHVybicgc3RhdGVtZW50cyBpbiB0aGUgY29kZS10by1ydW4sCisJdGhhdCBwYXR0ZXJuIG1heSBub3QgYmUgdXNlZCB0byBnZW5lcmF0ZSBjb2RlLgorCitUaHUgTWFyICAzIDE3OjA4OjQzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IElmIHN1cHBvc2VkIHRvIHNpZ24tZXh0ZW5kIGFuIGVudW0KKwl3aGljaCBpcyBuZXZlciBuZWdhdGl2ZSwgemVyby1leHRlbmQgaW5zdGVhZCAodW5sZXNzIFNMT1dfWkVST19FWFRFTkQpLgorCShzdG9yZV9leHByKTogTGlrZXdpc2UuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiAnbScgZm9yIENPTlNUX0RPVUJMRTogY2xlYXIgQkFET1AsIG5vdCBCQUQuCisJQWZ0ZXIgZm9yY2VfY29uc3RfZG91YmxlX21lbSwgZG8gZmluZF9yZWxvYWRzX3RvcGxldiBvbiB0aGUgTUVNLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IEhhbmRsZSBjb25zdGFudCBhZGRyZXNzZXMgKG9uIG1hY2hpbmVzCisJdGhhdCBkb24ndCBhbGxvdyB0aGVtKS4KKworCSogZmluYWwuYyAoc2V0X2N1cnJlbnRfZ2RiZmlsZSk6IE5ldyBmbiwgZ2V0IHRoZSBnZGJmaWxlIHN0cnVjdHVyZQorCWZvciBzcGVjaWZpZWQgZmlsZW5hbWUuCisJKG91dHB1dF9zb3VyY2VfbGluZSk6IFVzZSBzZXRfY3VycmVudF9nZGJmaWxlIGZvciB0aGUgZmlsZS4KKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IENhbGwgc2V0X2N1cnJlbnRfZ2RiZmlsZQorCWZvciB0aGUgZGVjbGFyYXRpb24ncyBzb3VyY2UgZmlsZSwgc28gR0RCIHdvbid0IGlnbm9yZSB0aGUgZmlsZS4KKworCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X2RvdWJsZV9tZW0pOiBCdWlsZCBhIG5ldyBSRUFMX0NTVCBub2RlCisJYW5kIGdldCBpdHMgZGF0YSB0eXBlIGZyb20gdGhlIG1hY2hpbmUgbW9kZSBvZiB0aGUgQ09OU1RfRE9VQkxFLgorCShpbW1lZF9yZWFsX2NvbnN0KTogRG9uJ3Qgc2F2ZSB0aGUgUkVBTF9DU1QgdHJlZSBub2RlLgorCSogdHlwZWNoZWNrLmMgKGdldF9mbG9hdGluZ190eXBlKTogUmV0dXJuIGZsb2F0IHR5cGUgZm9yIGdpdmVuIG1vZGUuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogSWdub3JlIHRoZSAoVVNFIChSRUcuLi4pKQorCShmb3IgdGhlIHJldHVybi1yZWdpc3RlcikgYXQgdGhlIGVuZCBvZiB0aGUgaW5saW5lIGZ1bmN0aW9uLgorCUFmdGVyIGEgQ0FMTF9JTlNOLCBpbWFnaW5lIHRoZSAoU0VUIChSRUcgLi4uKSAoUkVHIC4uLikpIGZvcgorCXRoZSByZXR1cm4tcmVnaXN0ZXIgaWYgdGhlIHJldHVybi1yZWdpc3RlciBpc24ndCBleHBsaWNpdGx5IHVzZWQuCisKK1dlZCBNYXIgIDIgMjI6MDg6NDkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiB0eXBlY2hlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogRG8gZGVmYXVsdF9jb252ZXJzaW9uIG9uIElOREVYLgorCitUdWUgTWFyICAxIDE1OjQ5OjM0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEFsd2F5cyBnZXQgYSBTWU1CT0xfUkVGIGZvciBhIGZpeGVkIGZ1bmN0aW9uLgorCUlmIG1heSBiZSBhbGxvY2EsIHNldCBtYXlfY2FsbF9hbGxvY2EuCisJKGdlbl9jYWxsXzEpOiBOZXZlciBwdXQgYSBTWU1CT0xfUkVGIHRocm91Z2ggYG1lbW9yeV9hZGRyZXNzJzsKKwlidXQgaWYgZnVuY3Rpb24gY3NlIGlzIHdhbnRlZCwganVzdCBjb3B5IGl0IHRvIGEgcmVnaXN0ZXIuCisJSWYgTk9fRlVOQ1RJT05fQ1NFIGlzIGRlZmluZWQsIG5ldmVyIGRvIGZ1bmN0aW9uIGNzZS4KKworCSogZXhwci5jIChpbml0X2V4cHIpOiBOZXcgZnVuY3Rpb24sIGRvZXMgaW5pdF9xdWV1ZSBhbmQgaW5pdHMKKwlvdGhlciB0aGluZ3MuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogQ2FsbCBpbml0X2V4cHIsIG5vdCBpbml0X3F1ZXVlLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogRG9uJ3QgY2xvYmJlciBPUDAgYW5kIE9QMQorCWlmIG1heSBjYWxsIGRlbGV0ZV9pbnNuc19zaW5jZSBsYXRlci4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IFBVU0hfQVJHU19SRVZFUlNFIHRlc3Qgd2FzIGJhY2t3YXJkcy4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRG8gY2Fub25fcmVnIG9uIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvcGVyYW5kcworCWluIGEgWkVST19FWFRFTkQgb3IgU0lHTl9FWFRFTkQgdGhhdCBpcyBhIGRlc3RpbmF0aW9uLgorCisJKiB0bS0qLmg6IERlZmluZSBTTE9XX0JZVEVfQUNDRVNTLgorCSogZXhwbWVkLmMgKHtzdG9yZSxleHRyYWN0fV9maXhlZF9iaXRfZmllbGQpOgorCUlmIFNMT1dfQllURV9BQ0NFU1MsIGdldC9zZXQgYWxsIGJpdCBmaWVsZHMgZnJvbSBmdWxsIHdvcmRzLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogU2ltcGxpZnkKKwkoemVyb19leHRlbmQ6U0kgKHN1YnJlZzpRSSAoemVyb19leHRyYWN0IC4uLikpKS4KKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6IFNpbXBsaWZ5CisJKGFuZCAoemVyb19leHRyYWN0IC4uLikgKGNvbnN0X2ludCAuLi4pKS4KKworCSogbG9jYWwtYWxsb2MuYyAocXR5X2NvbXBhcmV7LF8xfSk6IFRlc3Qgb2YgcXR5X3BoeXNfc3VnZyB3YXMgcmV2ZXJzZWQuCisJKGNvbWJpbmVfcmVncyk6IElmIG9uZSBwc2V1ZG8gZ2V0cyB0d28gc3VnZ2VzdGVkIGhhcmQgcmVncworCShvbmUgYXQgYmlydGggYW5kIG9uZSBhdCBkZWF0aCksIHByZWZlciB0aGUgb25lIGZyb20gYmlydGgKKwl1bmxlc3Mgd2Ugc2VlIGF0IGRlYXRoIHRoYXQgaXQncyBubyBnb29kLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogSWdub3JlIHN1bV9vayB1bmxlc3MgbW9kZSBpcyBQbW9kZS4KKwlEb24ndCB1c2UgZm9yY2Vfb3BlcmFuZCB1bmxlc3Mgc3VtX29rIGlzIHNldC4KKworTW9uIEZlYiAyOSAxOToyMzo1MCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc24pOiBXaGVuIGEgQ09OU1RfRE9VQkxFIG5lZWRzIG1vdmluZworCWJ5IHBpZWNlcywgZm9yY2UgaXQgaW50byBtZW1vcnksIHVubGVzcyBpdCBpcyBkY29uc3QwX3J0eCwKKwlpbiB3aGljaCBjYXNlIGVhY2ggcGllY2UgaXMgY29uc3QwX3J0eC4KKwkoZW1pdF9wdXNoX2luc24pOiBMaWtld2lzZS4gIEFsc28sIHdyaXRlIGNvZGUgZm9yIHB1c2hpbmcgYQorCW5vbi1CTEsgbW9kZSB3aGljaCBoYXMgbm8gIm1vdiIgaW5zbiBkZWZpbmVkLCBidXQgb25seQorCWluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vIFBVU0hfUk9VTkRJTkcuCisKKwkqIGV4cHIuYyAoZG9fdGFibGVqdW1wKTogUHV0IGNvbnN0YW50IHRlcm0gaW4gYWRkcmVzcyBsYXN0LgorCisJKiB0b3BsZXYuYyAoeHJlYWxsb2MpOiBPbiBlcnJvciwgY2FsbCBmYXRhbCBpbnN0ZWFkIG9mIGFib3J0LgorCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbik6IElmIGdlbm5pbmcgZnJvbSB0c3Rfb3B0YWIsCisJbWFrZSB0aGUgb3BlcmFuZCBmaXQgaXRzIHByZWRpY2F0ZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCk6IERvbid0IGFkanVzdCBzdGFjayBiZXR3ZWVuIGNtcCBhbmQganVtcC4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IFJlY3Vyc2l2ZSBjYWxscyBjYW4gcmV0dXJuIDA7IGhhbmRsZQorCXRoYXQgZXZlbnQgYnkgZGVsZXRpbmcgYW55IHByZXBhcmF0b3J5IGluc25zLiAgQWxzbyBkb24ndCBzbWFzaAorCVRBUkdFVCB3aGVuIHRoaXMgaGFwcGVucy4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogSWYgSU4gIT0gKklOTE9DLCBzZXQgcmVsb2FkX25vY29tYmluZS4KKwkoY29tYmluZV9yZWxvYWRzKTogRG9uJ3QgY29tYmluZSBhbiBpbnB1dCByZWxvYWQgd2l0aCByZWxvYWRfbm9jb21iaW5lLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBkZWxldGUgc3RhY2sgYWRqdXN0cyB1bmxlc3MKKwlFWElUX0lHTk9SRV9TVEFDSyBpcyBub256ZXJvLgorCSogZXhwci5jIChjbGVhcl9wZW5kaW5nX3N0YWNrX2FkanVzdCk6IExpa2V3aXNlLgorCSogdG0tKi5oOiBXaGVuIEVYSVRfSUdOT1JFX1NUQUNLIGlzIGRlZmluZWQsIGdpdmUgaXQgYDEnIGFzIGRlZm4uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBJbml0aWFsaXplIGFyZ3Nfc2l6ZS4KKwlEb24ndCBwdXNoIGEgYmxvY2sgaWYgYXJnc19zaXplIGlzIDAuCisJKGVtaXRfbGlicmFyeV9jYWxsKTogRG9uJ3QgaW5jbHVkZSByZWdpc3Rlci1hcmdzIChvciByZWctcGFydHMKKwlvZiBwYXJ0aWFsIG9uZXMpIGluIGFyZ3Nfc2l6ZS4KKwlEb24ndCBwdXNoIGEgYmxvY2sgaWYgYXJnc19zaXplIGlzIDAuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBGb3IgREVDTHMgaW4gbWVtb3J5LCBjaGVjayB0aGUgYWRkcmVzcworCXZhbGlkaXR5IHdpdGggbWVtb3J5X2FkZHJlc3NfcCwgYW5kIHByZXNlcnZlIHZvbGF0aWxpdHkgaW5mby4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogZml4dXBfZ290b3MgbmVlZHMgMiBhcmdzLgorCisJKiBqdW1wLmMgKG1hcmtfanVtcF9sYWJlbCk6IElmIElOU04gaXMgMCwgZG9uJ3Qgc2V0IGl0cyBKVU1QX0xBQkVMLgorCUluc2lkZSBhbiBBRERSX1ZFQyBvciBBRERSX0RJRkZfVkVDLCByZWN1cnNlIHdpdGggMCBmb3IgSU5TTi4KKworCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X2RvdWJsZV9tZW0pOiBNdXN0IHplcm8gVFJFRV9DU1RfUlRMCisJYmVmb3JlIG91dHB1dCwgb3Igbm90aGluZyB3aWxsIGhhcHBlbi4KKworU3VuIEZlYiAyOCAwMTowODo1MyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChlbWl0X3Vub3BfaW5zbik6IEdlbmVyYXRlIGFuZCBlbWl0IGFuIGluc24KKwlnaXZlbiB0aGUgaW5zbi1jb2RlIGFuZCB0aGUgdHdvIG9wZXJhbmRzIChvbmUgb3V0LCBvbmUgaW4pLgorCUNhbiBtb3ZlIHRoZSBvcGVyYW5kcyBpbnRvIHJlZ2lzdGVycyB3aGVuIG5lZWRlZCBmb3IgdmFyaW91cworCXJlYXNvbnMuCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVzZSBlbWl0X3Vub3BfaW5zbiBmb3Igb3V0cHV0dGluZyB0aGUKKwljb252ZXJzaW9uIGluc25zLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogVXNlIGFyZydzIG5vbWluYWwgbW9kZSB0byBjaG9vc2UKKwlhIHJlZyB0byBwYXNzIGl0IGluLCBub3QgYWN0dWFsIG1vZGUgKHdoaWNoIGNhbiBiZSBWT0lEbW9kZSkuCisKKwkqIGluc24tZW1pdC5jIChlbWl0X2luc24pOiBJZiBhcmcgaXMgZW1wdHkgU0VRVUVOQ0UsIGRvIG5vdGhpbmcuCisKKwkqIGdlbmVtaXQuYyAoZ2VuX2V4cGFuZCk6IFNjYW4gdGhlIHJ0bC1wYXR0ZXJuIGZvciBwcmVkaWNhdGVzCisJYW5kIG1hY2hpbmUgbW9kZXMgb2YgdGhlIG9wZXJhbmRzLgorCisJKiBtNjhrLmQgKGRicmEgcGF0dGVybnMpOiBBZGQgSFBVWF9BU00gY29uZGl0aW9uYWxzLgorCisJKiBydGwuYyAocmVnX21lbnRpb25lZF9wKTogVXNlICJlcXVhbCIsIG5vdCAiZXEiLCB3aGVuCisJUkVHIGlzbid0IGEgcmVnaXN0ZXIuCisJKiByZWxvYWQuYyAoY29tYmluZV9yZWxvYWRzKTogVmVyaWZ5IG5vdCByZWdfbWVudGlvbmVkX3AgZXZlbiBpZgorCXRoZSBpbnB1dCByZWxvYWQncyB2YWx1ZSBpc24ndCBhIHJlZ2lzdGVyLgorCisJKiByZWxvYWQuYyAob3BlcmFuZHNfbWF0Y2hfcCk6IElmIHN1Y2Nlc3NmdWwgYW5kIDJuZCBhcmcKKwloYXMgYSBwcmUtaW5jcmVtZW50IHRoYXQgbWF0Y2hlcyBhIG5vbi1pbmNyZW1lbnQsIHJldHVybiAyLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEF0IGVuZCwgY2xvYmJlciBhIHBzZXVkb3JlZyB0byBhIE1FTQorCWV2ZW4gaWYgaXQncyBhbiBvdXQtb2YtcmFuZ2UgYWRkcmVzcy4gIEl0IGRvZXNuJ3QgYWZmZWN0IHRoZQorCWFzc2VtYmxlciBjb2RlIGluIHRoaXMgY2FzZSwgYnV0IGl0IG1ha2VzIHRoZSBkYnggb3V0cHV0IGNvcnJlY3QuCisKKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcyk6IFdoZW4gb3BlcmFuZHNfbWF0Y2hfcCByZXR1cm5zIDIsCisJaW4gdGhlIGNvbnN0cmFpbnQgYWx0ZXJuYXRpdmUgdGhhdCBpcyB1bHRpbWF0ZWx5IHN1Y2Nlc3NmdWwsCisJY29weSB0aGUgb3V0cHV0IG9wZXJhbmQgZnJvbSB0aGUgaW5wdXQgdGhhdCBpdCBtYXRjaGVkCisJc28gdGhhdCB0aGUgYXNzZW1ibGVyIGluc24gdGhhdCBpcyBvdXRwdXQgc2hvd3MgdGhlIHByZS1pbmNyZW1lbnQuCisKK1NhdCBGZWIgMjcgMTU6MTY6NDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogV2hlbiBvcHRpbWl6aW5nCisgICAgICAgIChzZXQgKHplcm9fZXh0cmFjdCAuLi4pIChhbmQgKHplcm9fZXh0cmFjdCAuLi4pIGNvbnN0KSkKKyAgICAgICAgbXVzdCBhcnJhbmdlIHRvIGhhdmUgMSdzLCBub3QgMCdzLCBzaGlmdGVkIGludG8gbG93IGJpdHMgb2YgY29uc3QuCisKKwkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBXaGVuIHJldHVybi10eXBlIGRlZmF1bHRzIHRvIGludCwKKwlkb24ndCB3YXJuLCBqdXN0IHNldCB3YXJuX2Fib3V0X3JldHVybl90eXBlLgorCShzdGFydF9mdW5jdGlvbik6IFNlZSB0aGF0IHZhcmlhYmxlIGFuZCB3YXJuLCBhZnRlciBzdGFydGluZyBmdW5jdGlvbi4KKworCSogdG9wbGV2LmMgKGNvdW50X2Vycm9yKTogTm8gbG9uZ2VyIHByaW50IG5ld2xpbmUgaWYgbm90IHF1aWV0LgorCShyZXBvcnRfZXJyb3JfZnVuY3Rpb24pOiBJZiBub3QgcXVpZXQsIHByaW50IGEgbmV3bGluZSBpZgorCXByaW50aW5nIGFueXRoaW5nLCBhbmQgZG9uJ3QgcHJpbnQgdGhlIGZ1bmN0aW9uIG5hbWUuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKToKKwlGaXggdGhlIGxvb3AgdGhhdCBjaGVja3MgZm9yIGNvbnNlY3V0aXZlIGF2YWlsYWJsZSBzcGlsbCByZWdzLgorCVNldCBgaGF2ZV9ncm91cHMnIG5vbnplcm8gaWYgYW55IHJlbG9hZCB3YW50cyBhIGdyb3VwLgorCUluIHRoYXQgY2FzZSwgZm9yIG5vbi1ncm91cCByZWxvYWRzLCBwcmVmZXIgYSByZWcgdGhhdCBjYW4ndCBiZSBpbgorCWdyb3VwLCBvciBlbHNlIG9uZSB0aGF0IGhhcyBvbmx5IG9uZSBhdmFpbGFibGUgbmVpZ2hib3IuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRmluZCBzZXBhcmF0ZWx5IHRoZSBtYXggbmVlZCBmb3IgZWFjaCBjbGFzcworCWZvciBzaW5nbGUgcmVnaXN0ZXJzLCBncm91cHMgb2YgcmVnaXN0ZXJzLCBhbmQgc2luZ2xlIHJlZ2lzdGVycworCW5vdCBpbiBhbnkgZ3JvdXAuICAoVGhlIGxhc3Qgb25lIGNvdW50cyBub24tZ3JvdXAgcmVsb2FkcworCWluIGluc25zIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgZ3JvdXAgcmVsb2FkLikKKwlUaGVuIG1ha2Ugc3VyZSBlbm91Z2ggb2YgZWFjaCBraW5kIGFyZSBmb3VuZC4KKworCSogZXhwbWVkLmM6IE5vdyBuZWVkcyBmbGFncy5oIGFuZCByZWNvZy5oICh0aGVyZWZvcmUgaW5zbi1jb25maWcuaCkuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOgorCURlbGV0ZSByZWR1bmRhbnQgcHJvdGVjdF9mcm9tX3F1ZXVlLgorCUZvcmNlIFZBTFVFIG91dCBvZiBtZW1vcnkgaWYgLWZmb3JjZS1tZW0uCisJSWYgaW5zdidzIHByZWRpY2F0ZSBmb3IgVkFMVUUgd2FudHMgYSByZWdpc3RlciwgcHV0IGl0IHRoZXJlLgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOgorCUZvcmNlIFRBUkdFVCBvdXQgb2YgbWVtb3J5IGlmIC1mZm9yY2UtbWVtLgorCUlmIGluc3YncyBwcmVkaWNhdGUgZm9yIFRBUkdFVCB3YW50cyBhIHJlZ2lzdGVyLCBwdXQgaXQgdGhlcmUuCisKK0ZyaSBGZWIgMjYgMDA6MTI6NDggMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9mcmFtZV9wb2ludGVyKTogRG9uJ3QgY2hlY2sgZm9yIHB1c2hlcworCXVubGVzcyBQVVNIX1JPVU5ESU5HIGlzIGRlZmluZWQuCisKKwkqIHJlbG9hZC5jOiBEb24ndCBkZWZpbmUgUkVHX09LX0ZPUl97SU5ERVgsQkFTRX1fUAorCShzaW5jZSB0aGUgdG0gZmlsZSBpcyBzdXBwb3NlZCB0byBkbyBpdCkuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24sIGV4cGFuZF9jYWxsKToKKwlEb24ndCB1c2UgUFVTSF9ST1VORElORyBpZiBpdCdzIG5vdCBkZWZpbmVkLgorCisJKiBleHByLmMgKHByZWV4cGFuZF9jYWxscyk6IERvIG5vdGhpbmcgZm9yIGNvbnN0YW50cyBhbmQgZGVjbHMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwsIGVtaXRfbGlicmFyeV9jYWxsKTogV2hlbiBQVVNIX1JPVU5ESU5HCisJaXMgbm90IGRlZmluZWQsIHVzZSBST1VORF9DQUxMX0JMT0NLX1NJWkUgdG8gcm91bmQgdGhlIHNpemUKKwlvZiB0aGUgYmxvY2sgb2YgYXJndW1lbnRzLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogRG9uJ3QgY291bnQgcmVnaXN0ZXItYXJncyBpbiBBUkdTX1NJWkUuCisKKwkqIHJ0bC5oLCBlbWl0LXJ0bC5jOiBDcmVhdGUgc3RhdGljX2NoYWluX2luY29taW5nX3J0eAorCWFuZCBzdHJ1Y3RfdmFsdWVfaW5jb21pbmdfcnR4LgorCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBVc2UgLi4uX2luY29taW5nX3J0eCB3aGVyZSBuZWVkZWQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBVc2UgbmV3IG1hY3JvcyBJTklUX0NVTVVMQVRJVkVfQVJHUywKKwlDVU1VTEFUSVZFX0FSR1MgYW5kIEZVTkNUSU9OX0FSR19BRFZBTkNFIHRvIHVwZGF0ZSBkYXRhCisJb24gYXJncyBzY2FubmVkIHNvIGZhci4KKwkoZW1pdF9saWJyYXJ5X2NhbGwpOiBMaWtld2lzZS4KKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogTGlrZXdpc2UuCisJKiB0bS1zcHVyLmgsIHRtLW02OGsuaDogRGVmaW5lIHRoZXNlIG1hY3Jvcy4KKworCSogcnRsLmggKE5VTV9NQUNISU5FX01PREVTKTogTlVNX01BQ0hJTkVfTU9ERSByZW5hbWVkLgorCSogcnRsLmMsIGdlbnJlY29nLmM6IENoYW5nZSBwbGFjZXMgaXQgaXMgdXNlZC4KKworCSogY2NjcC5jIChvdXRwdXRfbGluZV9jb21tYW5kKTogbGluZV9jbWRfYnVmIHNob3VsZCBiZSBjaGFycywgbm90IGludHMuCisKK1RodSBGZWIgMjUgMTM6MzM6MjkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBEb24ndCBsb3NlIGlmIHBhdHRlcm4gaXMgZW1wdHktdmVjdG9yLgorCisJKiBnZW5jb25maWcuYyAoZ2VuX2luc24pOiBEb24ndCBsb3NlIGlmIHBhdHRlcm4gaXMgZW1wdHktdmVjdG9yLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRm9yIENPTVBPTkVOVF9SRUYsIGRvbid0IGNvbnZlcnQgdG8gdG1vZGUKKwl1bmxlc3MgdGhlIG1vZGUgd2UgZ2V0IGlzIHVuYWNjZXB0YWJsZS4KKworCSogbG9vcC5jIChzY2FuX2xvb3AsIG1vdmVfbW92YWJsZXMpOiBOZXcgZmllbGQgYHBhcnRpYWwnIGlzIDEgZm9yCisJemVyby1leHRlbmRpbmcgY2xyIGluc247IGRvbid0IG1ha2UgdGhlIHJlZyBpbnZhcmlhbnQgd2hlbiBpdCdzIG1vdmVkLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX3Vub3AsIGV4cGFuZF9iaW5vcCwgZW1pdF9jbXBfaW5zbik6CisJbW9kZS1hcmd1bWVudCB0byBwcmVkaWNhdGVzIHdhcyBtaXNzaW5nLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogSWYgZ2VuLWZ1bmN0aW9uIHJldHVybnMgMCwgdGhpcyBtZWFucworCXRoZSBpbnNuIHdhc24ndCBhdmFpbGFibGUuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEb24ndCBtYWtlIG9wdGlvbmFsIHJlbG9hZHMgZm9yIG9wZXJhbmRzCisJdGhhdCBtYXRjaCBvdGhlciBvcGVyYW5kcy4KKworCSogcmVsb2FkLmMgKGNvbWJpbmVfcmVsb2Fkcyk6IFJlamVjdCBvcHRpb25hbCBvdXRwdXQgcmVsb2FkLgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBLbm93IHRoYXQgQ0FMTF9JTlNOcyBjbG9iYmVyIG1lbW9yeS4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOgorCUlmIGRvaW5nIGEgc2hvcnQgc2hpZnQsIGxlYXZlIHRoZSBzaGlmdC1jb3VudCBhcyBhIGZ1bGx3b3JkLgorCitUdWUgRmViIDIzIDE0OjQzOjQ2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdCk6IENvdW50LCBpbiBuX29jY3VycmVuY2VzLCAjIHRpbWVzIEZST00gaXMgc2Vlbi4KKwkodHJ5X2NvbWJpbmUpOiBSZWZ1c2UgdG8gY29tYmluZSB4PSp5KysgaW50byB6ID0geCp4LgorCisJKiBsb29wLmMgKGludmFyaWFudF9wKTogRnJhbWUgcG9pbnRlciBhbmQgYXJnIHBvaW50ZXIgYXJlIGludmFyaWFudC4KKwkobW92ZV9tb3ZhYmxlcyk6IERvbid0IGZvcmdldCB0byBzZXQgLT5kb25lIQorCVdoZW4gbW92aW5nIHRoZSBtYXRjaGluZyBtb3ZhYmxlcywgZG9uJ3QgZm9yZ2V0IHRvIHNldCBuX3RpbWVzX3NldC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IFJlb3JkZXIgc3RyYXRlZ2llcyBmb3IgbG9naWNhbCBzaGlmdDsKKwlpZiB3aWRlbmluZywgdHJ5IGFsbCBhc2hpZnQgc3RyYXRlZ2llcyBiZWZvcmUgZXh0enYuCisKKwkqIHR5cGVjaGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KToKKwlBbHdheXMgcmV0dXJuIGVycm9yX21hcmsgaWYgZWl0aGVyIG9wZXJhbmQgaXMgb25lLgorCisJKiByZWNvZy5jIChub25tZW1vcnlfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuCisKKwkqIG9wdGFicy5jIChleHBhbmRfdW5vcCwgZXhwYW5kX2Jpbm9wLCBlbWl0X2NtcF9pbnNuKToKKwlEb24ndCB0cmVhdCBgcmVnaXN0ZXJfb3BlcmFuZCcgYXMgc3BlY2lhbC4gIEFwcGx5IHRoZSBwcmVkaWNhdGUKKwl0byB0aGUgcnR4OyBpZiB0aGUgcHJlZGljYXRlIGZhaWxzLCB1c2UgYSByZWdpc3RlciBpbnN0ZWFkLgorCitNb24gRmViIDIyIDIyOjM3OjMyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfY2FsbHMpOiBQcmVleHBhbmQgYWxsIGNhbGxzIGluIGFyZ3VtZW50cworCXRoYXQgYXJlIHBhc3NlZCBpbiByZWdzIGJlZm9yZSBjb3B5aW5nIGFueSBvZiB0aGVtIGludG8gdGhlIHJlZ3MuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBUaHJlZSBtb3JlIGFyZ3MuCisJRVhUUkEgZm9yIGV4dHJhIHNwYWNlIHRvIGxlYXZlLgorCUFSR1NfQUREUiBhbmQgQVJHU19TT19GQVIgZm9yIHVzaW5nIG1vdmUtaW5zbnMgb24gbWFjaGluZXMKKwl0aGF0IGxhY2sgdHJ1ZSBwdXNoIGluc25zLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsLCBleHBhbmRfY2FsbCk6CisJVXNlIHRoZSBuZXcgYXJndW1lbnRzIG9mIGBlbWl0X3B1c2hfaW5zbicuCisKKwkqIGV4cHIuYyAoUFVTSF9BUkdTX1JFVkVSU0VEKTogZGVmaW5lZCBpZiBoYW5kbGUgYXJncyBsYXN0LXRvLWZpcnMuCisKK1N1biBGZWIgMjEgMTI6MTc6NTkgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNldCBUUkVFX0FTTV9XUklUVEVOCisJd2hlbiBhIGZ1bmN0aW9uIGlzIHJlYWxseSBvdXRwdXQgYXMgYXNzZW1ibGVyIGNvZGUuCisJRG9uJ3QgZG8gaW5saW5pbmcgb2YgYSBmdW5jdGlvbiB0aGF0IGlzIGFscmVhZHkgbWFkZSBpbmxpbmU7CisJaW5zdGVhZCwgb3V0cHV0IGl0IGFzIGFzc2VtYmxlciBjb2RlLCBiZWNhdXNlIHRoaXMgbXVzdCBiZQorCXRoZSBzZWNvbmQgY2FsbCBmb3IgdGhhdCBmdW5jdGlvbi4KKworCSogZGVjbC5jIChmaW5pc2hfY29tcGlsYXRpb24pOiBEZWxldGUgaXQuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogT3V0cHV0IHBlbmRpbmcgaW5saW5lIGZ1bmN0aW9ucyBhdCB0aGUgZW5kCisJaW4gdGhlIHNhbWUgd2F5IHRlbnRhdGl2ZS1kZWZpbmVkIHZhcmlhYmxlcyBhcmUgb3V0cHV0LgorCisJKiBlbWl0LXJ0bC5jIChyZXN0b3JlX3JlZ19kYXRhKTogTmV3IGZuOiBnaXZlbiBjaGFpbiBvZiBpbnNucywKKwlyZXN0b3JlIGVtaXQtcnRsJ3MgZGF0YSBvbiByZWdpc3RlcnMgZnJvbSB0aGUgcmVncyB0aGV5IHVzZS4KKworCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgcmVzdG9yZV9yZWdfZGF0YS4KKwkoZmlsbF9yZWdub19yZWdfcnR4X2FzX25lZWRlZCk6IE5vdyByZXN0b3JlX3JlZ19kYXRhXzEgaW4gZW1pdC1ydGwuYy4KKworCSogdHJlZS5jIChidWlsZF9kZWNsKTogRnVuY3Rpb24gbW92ZWQgZnJvbSBkZWNsLmMuCisJTm8gbG9uZ2VyIHNldCBhdHRyaWJ1dGVzIG9mIGZ1bmN0aW9uIGRlY2xzIHNwZWNpYWxseS4KKworCSogZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUsIGJ1aWx0aW5fZnVuY3Rpb24sIGdyb2tkZWNsYXJhdG9yKToKKwlEb24ndCBleHBlY3QgYnVpbGRfZGVjbCB0byBzZXQgYXR0cmlidXRlcyBvZiBGVU5DVElPTl9ERUNMLgorCisJKiB0cmVlLmMgKHByZXNlcnZlX2RhdGEpOiBOZXcgZm4sIG1ha2UgYWxsIGRhdGEgbm93IG9uCisJbWF5YmVwZXJtYW5lbnRfb2JzdGFjayBsYXN0IHBlcm1hbmVudGx5LgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBSZW1vdmUgYSBTVFJJQ1RfTE9XX1BBUlQgZnJvbSB0aGUgZGVzdCBydHgKKwliZWZvcmUgcHV0dGluZyBpdCBpbiB0aGUgaGFzaCB0YWJsZS4KKworCSogc3ltb3V0LmMgKHN5bW91dF9ibG9jayk6IEZpeCB0aGUgYXJncyB0byBgc3ltb3V0X2Jsb2NrX3N5bWJvbHMnLgorCitTYXQgRmViIDIwIDAwOjA3OjUyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworICAgIFN0YXJ0IG9mIGNoYW5nZXMgZm9yIGlubGluZSBmdW5jdGlvbnMuCisgICAgQ2hhbmdlcyByZWNlaXZlZCBmcm9tIFRpZW1hbm4sIHRoZW4gc2xpZ2h0bHkgcmVhcnJhbmdlZCBmb3Igc2ltcGxpY2l0eS4KKworCSogaW50ZWdyYXRlLmM6IE5ldyBmaWxlIChUaWVtYW5uJ3MgcnRsMi5jKS4KKwkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW50ZWdyYXRlX3ApOgorCU5ldyBmbiwgb25seSBjaGVja3Mgd2hldGhlciBjdXJyZW50IGZuIGlzIHNhZmUgYW5kIGdvb2QgdG8gaW5saW5lLgorCVJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBzdHJpbmcgaWYgbm90LgorCisJKiBleHByLmMgKGN1cnJlbnRfYXJnc19zaXplKTogVmFyIG1hZGUgc3RhdGljLgorCShzdG9yZV9leHByKTogRm4gbm8gbG9uZ2VyIHN0YXRpYy4KKwkoc3RhY2tfcG9pbnRlcl9ydHgpOiBVc2UgdGhpcyB2YXIgZm9yIGFsbCByZWZzIHRvIHRoZSBzdGFjayBwb2ludGVyLgorCShzdHJ1Y3RfdmFsdWVfcnR4LCBzdGF0aWNfY2hhaW5fcnR4KTogTGlrZXdpc2UKKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IERldGVjdCBjYWxscyB0byBpbnRlZ3JhYmxlIGZ1bmN0aW9ucworCWFuZCBpbnRlZ3JhdGUgdGhlbS4KKwkqKklmIGZuIGlzIG5vdCBuYW1lZCAiYWxsb2NhIiB0aGVuIGFzc3VtZSBpdCBpcyBub3QgYGFsbG9jYScuICoqCisKKwkqIGVtaXQtcnRsLmMgKG1heF9sYWJlbF9udW0pOiBOZXcgZm4sIHJldHVybnMgbnVtYmVyIGZvciBuZXh0IGxhYmVsLgorCShnZXRfZmlyc3RfbGFiZWxfbnVtKTogTmV3IGZuLCByZXR1cm5zIGZpcnN0IGxhYmVsIG9mIGN1cnJlbnQgZm4uCisJKGluaXRfZW1pdCk6IFNhdmUgZmlyc3QgbGFiZWwgbnVtYmVyIG9mIHRoaXMgZm4uCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9pbmxpbmVfaGVhZGVyX3J0eCk6IE5ldyBmbiwgbWFrZSBhbiBJTkxJTkVfSEVBREVSLgorCisJKiBlbWl0LXJ0bC5jIChlbWl0X2RlY2xhcmF0aW9uKTogTmV3IGZuIHRvIGVtaXQgbmV3IGtpbmQgb2YgTk9URS4KKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBOZXcgZm4uCisJTW92ZSBpbml0cyBvZiB1bmlxdWUgcnRsIG9iamVjdHMgaGVyZSwgZnJvbSBpbml0X2VtaXQuCisKKwkqIGRlY2wuYyAoZmluaXNoX2NvbXBpbGF0aW9uKTogTmV3IGZuIHRvIGNvbXBpbGUgc2VwYXJhdGVseQorCWFueSBub25nbG9iYWwgaW5saW5lIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2FibGUuCisKKwkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgYGlubGluZScga3dkIGFtb25nIHRoZSBkZWNsc3BlY3MuCisJU2V0IFRSRUVfSU5MSU5FIGlmIGl0J3Mgc2FmZS4KKworCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBJZiBmbiB3YXMgaW5saW5lZCwgZG9uJ3QgY2xlYXIKKwl0aGUgREVDTF9BUkdVTUVOVFMgb3IgREVDTF9SRVNVTFQgb3IgREVDTF9JTklUSUFMLgorCisJKiBnZW4qLmM6IFByb3ZpZGUgcnRsX29ic3RhY2ssIG5vdCBjdXJyZW50X29ic3RhY2suCisKKwkqIHJ0bC5jIChydGxfb2JzdGFjayk6IFZhcmlhYmxlOiBwdHIgdG8gb2JzdGFjayB0byB1c2UgZm9yIG1ha2luZyBydGwuCisJKiBydGwuYyAocnR4X2FsbG9jLCBydHZlY19hbGxvYyk6IFVzZSB0aGF0IG9ic3RhY2suCisJKiBydGwuYyAoY29weV9ydHgpOiBDb3B5IHRoZSBgaW50ZWdyYXRlZCcgZmxhZy4KKwkqIHJ0bC5jIChwcmludF9ydHgpOiBQcmludCB0aGF0IGZsYWcgYXMgYC9pJy4KKworCSogcnRsLmRlZjogTmV3IHJ0eCBjb2RlCUlOTElORV9IRUFERVIuCisKKwkqIHJ0bC5oIChzdHJ1Y3QgcnR4X2RlZik6IEFkZCBgaW50ZWdyYXRlZCcgZmllbGQuCisJKiBydGwuaDogRGVmaW5lIG1hY3JvcyBmb3IgZmllbGRzIGluIGFuIGlubGluZV9oZWFkZXIgcnR4LgorCisJKiBzdG10LmMgKG1heF9wYXJtX3JlZ19udW0sIGdldF9maXJzdF9mdW5jdGlvbl9pbnNuKToKKwlOZXcgZm5zLCByZXR1cm4gaW5mbyBvbiBwYXJtIHJlZ3MgYW5kIHRoZSBpbnNucyB0aGF0IGluaXQgdGhlbS4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IFNpbXBsaWZ5IHdpdGggbmV3IGxvY2FsIGB0eXBlJy4KKworCSogc3RtdC5jIChzdGFja19wb2ludGVyX3J0eCk6IFJlcGxhY2UgYWxsIHJlZnMgdG8gc3RhY2sgcG9pbnRlcgorCXdpdGggdGhpcyBzaGFyZWQgcnR4LgorCSogc3RtdC5jIChzdHJ1Y3RfdmFsdWVfcnR4KTogTGlrZXdpc2UuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2Z1bmN0aW9uKTogQ2FsbCBpbml0X3BlbmRpbmdfc3RhY2tfYWRqdXN0CisJaW5zdGVhZCBvZiBjbGVhcl9wZW5kaW5nX3N0YWNrX2FkanVzdC4KKwlJZiBub3QgdXNpbmcgYSByZXR1cm4tbGFiZWwsIHNldCBgcmV0dXJuX2xhYmVsJyB0byAwLgorCisJKiBzdG10LmMgKGV4cGFuZF9udWxsX3JldHVybiwgZXhwYW5kX2VuZF9mdW5jdGlvbik6CisJQ2FsbCBjbGVhcl9wZW5kaW5nX3N0YWNrX2FkanVzdCB1bmNvbmRpdGlvbmFsbHkuCisKKwkqIGV4cHIuYyAoY2xlYXJfcGVuZGluZ19zdGFja19hZGp1c3QpOiBNb3ZlIHRoZSBjb25kaXRpb25hbHMgaGVyZS4KKwlGb3Igbm93LCB0aGlzIGZuIGlzIGEgbm8tb3AsIHNpbmNlIGl0J3Mgbm90IHNhZmUgaW4gYW4gaW5saW5lIGZuCisJYW5kIHRoZSBzdGFjayBhZGp1c3RzIGFyZSBkZWxldGVkIGJ5IGp1bXAuYyBpbiBpZiBvcHRpbWl6aW5nLgorCisJKiBleHByLmMgKGluaXRfcGVuZGluZ19zdGFja19hZGp1c3QpOiBOZXcgZm4uCisKK0ZyaSBGZWIgMTkgMTQ6MzA6MTMgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbik6IERlY29kZSAtZmlubGluZS1mdW5jdGlvbnMsIC1ma2VlcC1pbmxpbmUtZnVuY3Rpb25zLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6CisJQXQgc3RhcnQsIHNhdmUgdGhlIHJ0bCBpZiBmdW5jdGlvbiBzaG91bGQgYmUgaW5saW5lLgorCUZvciBpbmxpbmUgZnVuY3Rpb24sIGlmIHdlIGRvbid0IHlldCBrbm93IHdoZXRoZXIgaXQgc2hvdWxkIGJlCisJY29tcGlsZWQgb24gaXRzIG93biwgZG9uJ3QgZG8gc28uCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDbGVhciwgYW5kIGxhdGVyIHByaW50LCBgaW50ZWdyYXRpb25fdGltZScuCisJQ2FsbCBgaW5pdF9lbWl0X3J0bCcgd2hlbiBzdGFydGluZy4KKwlDYWxsIGBmaW5pc2hfY29tcGlsYXRpb24nIGF0IHRoZSBlbmQuCisKKwlbQWRkIGFuIGV4dHJhIGFyZyB0byB0aGUgZXJyb3IgYW5kIHdhcm5pbmcgZnVuY3Rpb25zP10KKworCSogdHJlZS5jICh7cHVzaCxwb3AsY2xlYXJ9X21vbWVudGFyeSk6CisJQ2hhbmdlIG1vbWVudGFyeV9zdGFjayBmcm9tIGEgY2hhciAqKiB0byBhIHN0cnVjdCBtb21lbnRhcnlfbGV2ZWwgKi4KKworCSogdHJlZS5jIChidWlsZF9wb2ludGVyX3R5cGUpOiBQdXQgdGVtcG9yYXJ5IHR5cGUgaW4gYHNhdmVhYmxlX29ic3RhY2snCisJKiB0cmVlLmMgKGJ1aWxkX3R5cGVfdmFyaWFudCk6IExpa2V3aXNlLgorCSogdHJlZS5jIChtYWtlX25vZGUpOiBMaWtld2lzZS4gIEFsc28gcHV0IGRlY2xzIGFuZCBMRVRfU1RNVHMgdGhlcmUuCisJKiB0cmVlLmMgKHR5cGVfaGFzaF9jYW5vbik6IEZyZWUgYSB0ZW1wb3JhcnkgdHlwZSBpbiBgc2F2ZWFibGVfb2JzdGFjaycKKworCSogdHJlZS5jIChwZXJtX3RyZWVfY29ucyk6IExpa2UgYHRyZWVfY29ucycgYnV0IG9uIHBlcm0uIG9ic3RhY2suCisKKwkqIHRyZWUuYyAoaW5pdF90cmVlLCB7e2VuZF8sfXRlbXBvcmFyeSxwZXJtYW5lbnR9X2FsbG9jYXRpb24pOgorCUhhbmRsZSBgbWF5YmVwZXJtYW5lbnRfb2JzdGFjaycgYW5kIGBzYXZlYWJsZV9vYnN0YWNrJyBhbmQKKwlgcnRsX29ic3RhY2snLgorCisJKiB0cmVlLmggKFRSRUVfSU5MSU5FKTogTmV3IGF0dHJpYnV0ZSBtYWNyby4KKwkqIHRyZWUuaCAoREVDTF9TQVZFRF9JTlNOUywgREVDTF9GUkFNRV9TSVpFKToKKwlOZXcgY29tcG9uZW50cyBpbiBhIEZVTkNUSU9OX0RFQ0wuCisJRGVsZXRlIHRoZSBgdW51c2VkYCBzbG90IGluIGEgYHN0cnVjdCB0cmVlX2RlY2wnLgorCisJKiB0eXBlY2hlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IFNldCBUUkVFX0FERFJFU1NBQkxFCisJZXZlbiBpbiBGVU5DVElPTl9ERUNMcy4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOgorCUlmIGZ1bmN0aW9uIGlzIGEgRlVOQ1RJT05fREVDTCwgYXZvaWQgc2V0dGluZyBUUkVFX0FERFJFU1NBQkxFCisJd2hlbiB0YWtpbmcgaXRzIGFkZHJlc3MuCisKKwkqIHBhcnNlLmg6IERlZmluZSBSSURfSU5MSU5FLgorCSogcGFyc2UueTogRGVmaW5lIGtleXdvcmQgYGlubGluZSc7IHNldCB1cCByaWRwb2ludGVycyBmb3IgaXQuCisJKHl5bGV4KTogRG9uJ3QgcmVjb2duaXplIGBpbmxpbmUnIG9mIC1mbm8tYXNtIG9yIC1mdHJhZGl0aW9uYWwuCisKKwkqIGZsYWdzLmg6IE5ldyB2YXJzIGZsYWdfaW5saW5lX2Z1bmN0aW9ucworCWFuZCBmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucy4KKworICBFbmQgb2YgY2hhbmdlcyBmb3IgaW5saW5lIGZ1bmN0aW9ucy4KKwkKKwkqIHRyZWUuYyAoY29udmVydCk6IElmIEVYUFIncyB0eXBlIGlzIGFuIGVycm9yX21hcmssIHJldHVybiBlcnJvcl9tYXJrLgorCisJKiBNYWtlZmlsZSAoaW5zdGFsbCk6IERvbid0IHN0cmlwIHRoZSBleGVjdXRhYmxlcy4KKworCSoganVtcC5jIChkZWxldGVfaW5zbik6IERlbGV0aW5nIGEgbGFiZWwncyB0YXJnZXQKKwljYW4gZGVsZXRlIGVpdGhlciBORVhUIGFuZCBQUkVWISAgU28gbXVzdCBzZWFyY2ggZm9yIGEKKwlmb2xsb3dpbmcgbm9uZGVsZXRlZCBpbnNuIHRvIHJldHVybi4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBUeXBvIGluIHZhbGlkYXRpbmcKKwlkYXRhIHR5cGUgb2YgZnVuY3Rpb24uCisKKwkqIGdlbm91dHB1dC5jIChnZW5fZXhwYW5kKTogTXVzdCBjcmVhdGUgYSBgc3RydWN0IGRhdGEnIGV2ZW4KKwlmb3IgYSBkZWZpbmVfZXhwYW5kLCBzbyB3ZSBjYW4gb3V0cHV0IHRoZSBwcm9wZXIgaW5zbl9nZW5fZnVuY3Rpb24KKwlhbmQgbGVhdmUgemVyb3MgaW4gdGhlIG90aGVyIHRhYmxlcy4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBSZXBsYWNlIHRoZSBjb2RlIGZvciBoYW5kbGluZyB6ZXJvLWV4dGVuZHMKKwl3aXRoIHVuY29uZGl0aW9uYWwgY29kZSB0aGF0IGNoZWNrcyBmb3IgYSBwYWlyIG9mIGluc25zLgorCisJKiBtNjhrLm1kOiBEbyB6ZXJvLWV4dGVuZCB1c2luZyBkZWZpbmVfZXhwYW5kIHRvIGdlbmVyYXRlCisJYSBwYWlyIG9mIGluc25zLCB0byBzZXQgYWxsIHRvIHplcm8gYW5kIHRoZW4gY29weSB0aGUgbG93IHBhcnQuCisKK1RodSBGZWIgMTggMTU6NTQ6MDAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCB3aGVhdGllcy5haS5taXQuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChlbWl0X2luc24pOiBJZiBhcmcgaXMgYSBTRVFVRU5DRSwgZW1pdCBzZXZlcmFsIGluc25zLgorCSogZW1pdC1ydGwuYyAoY2xhc3NpZnlfaW5zbik6IEdpdmVuIGFuIFJUWCwgcmV0dXJuIHRoZSBydHgtY29kZSBmb3IKKwlhbiBpbnNuIGNvbnRhaW5pbmcgaXQ6IENPREVfTEFCRUwsIElOU04sIEpVTVBfSU5TTiBvciBDQUxMX0lOU04uCisKKwkqIHJ0bC5kZWY6IE5ldyBSVFggdHlwZXMgREVGSU5FX0VYUEFORCBhbmQgU0VRVUVOQ0UuCisJKiBnZW4qLmM6IEhhbmRsZSBERUZJTkVfRVhQQU5ELiAgT25seSBnZW5lbWl0LmMgZG9lcyByZWFsIHdvcmsuCisKKwkqIG1ha2UuY29tLCBtYWtlLWNjMS5jb20sIG1ha2UtY2NjcC5jb206IE5ldywgVk1TIGNvbW1hbmQgZmlsZXMuCisKKwkqIHRtLXZtcy5oOiBOZXcgZmlsZSwgdXNlZCBhcyB0bS5oIHRvIGdlbmVyYXRlIFZNUyBjb2RlLgorCisJKiB0bS12YXguaCAoRlVOQ1RJT05fUFJPTE9HVUUpOiBUdXJuIG9mZiBubyBiaXRzIGluIHRoZSBtYXNrOworCWxldCBjYWxsX3VzZWRfcmVnaXN0ZXJzIGFsb25lIGNvbnRyb2wgdGhpcy4KKwlDYWxsIE1BWUJFX1ZNU19GVU5DVElPTl9QUk9MT0dVRSwgYW5kIGRlZmluZSB0aGF0IGFzIG5vLW9wLgorCisJKiB0bS12YXguaCAoVEFSR0VUX1ZBWENfQUxJR05NRU5UKTogTmV3IHRhcmdldC1mbGFnIGJpdC4KKwlCSUdHRVNUX0FMSUdOTUVOVCwgRU1QVFlfRklFTERfQk9VTkRBUlkgYW5kIFBPSU5URVJfQk9VTkRBUlkgdXNlIGl0LgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZnVuY3Rpb24pOiBVc2UgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRQorCWlmIGl0IGlzIGRlZmluZWQuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IE9uIGFuIGV4dGVybmFsLAorCXVzZSBBU01fT1VUUFVUX0VYVEVSTkFMIGlmIGRlZmluZWQuICBEZWZhdWx0IGlzIGRvIG5vdGhpbmcsIGFzIGJlZm9yZS4KKworCSogdG9wbGV2LmM6CisJVXNlIEZBVEFMX0VYSVRfQ09ERSBhbmQgU1VDQ0VTU19FWElUX0NPREUuCisJRG9uJ3QgaW5jbHVkZSB0aW1lLmggYW5kIHJlc291cmNlLmggb24gVk1TLgorCShtYWluKSBEZWZpbmUgX19WRVJTSU9OX18gaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KKwlDb25kaXRpb25hbGl6ZSBzZXRybGltaXQgb24gUkxJTUlUX1NUQUNLLgkKKwlUZXN0IF9fR05VQ19fLCBub3QgX19HTlVfXy4KKwlEb24ndCBkbyBgcHMgdicgb24gVk1TLgorCShnZXR0aW1lKTogQ29uZGl0aW9uYWwgY29kZSBmb3IgVk1TLgorCisJKiBnY2MuYzogRGVmaW5lIF9fR05VQ19fIGFzIHdlbGwgYXMgX19HTlVfXy4KKwlfX0dOVV9fIHdpbGwgYmUgZGVsZXRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisJKiBzeW1vdXQuYyAoc3ltb3V0X2ZpbmlzaCkgW1ZNU106IERvbid0IHJlZmVyIHRvIGBnZXR3ZCcgb24gVk1TLgorCSogc3ltb3V0LmMgKHN5bW91dF9pbml0KSBbVk1TXTogRmF0YWwgZXJyb3I7IEdEQiBzeW1zIG5vdCBzdXBwb3J0ZWQuCisKKwkqIHBhcnNlLnkgKHl5bGV4KTogSGFuZGxlIERPTExBUlNfSU5fSURFTlRJRklFUlMuCisKKwkqIGdlbm91dHB1dC5jIChnZW5faW5zbik6IFdvcmthcm91bmQgZm9yIFZNUyBwcmludGYgJXMgYnVnLgorCisJKiBnZW4qLmM6IEluY2x1ZGUgY29uZmlnLmguICBXaGVuZXZlciBleGl0aW5nLCB1c2UKKwlTVUNDRVNTX0VYSVRfQ09ERSBvciBGQVRBTF9FWElUX0NPREUuCisKKwkqIGNvbmZpZy0qLmg6IERlZmluZSBTVUNDRVNTX0VYSVRfQ09ERSBhbmQgRkFUQUxfRVhJVF9DT0RFLgorCSogY29uZmlnLXZtcy5oOiBOZXcgZmlsZSwgbW9zdGx5IGxpa2UgY29uZmlnLXZheC5oLgorCitXZWQgRmViIDE3IDEzOjM1OjM0IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgd2hlYXRpZXMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jOiBWTVMgc3VwcG9ydCBmcm9tIEthc2h0YW4uCisJU29tZSAjaW5jbHVkZSBmaWxlcyBhcmUgY29uZGl0aW9uYWwuCisJVXNlIGZpbGVfc2l6ZV9hbmRfbW9kZSBpbnN0ZWFkIG9mIGZzdGF0LgorCVdoZW4gcmVhZGluZyBmaWxlIGNvbnRlbnRzLCB0aGUgc2l6ZSB3ZSBnZXQgZnJvbSB0aGF0CisJaXMganVzdCBhbiB1cHBlciBib3VuZDsgZG9uJ3QgYXNzdW1lIGl0IG11c3QgbWF0Y2guCisJUmVwbGFjZW1lbnQgZGVmaW5pdGlvbnMgb2YgcmVhZCBhbmQgd3JpdGUgZm9yIFZNUy4KKwlEaWZmZXJlbnQgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yaWVzLgorCUNvbmRpdGlvbmFsaXplIHRoZSBzZXRybGltaXQgY29kZSBvbiBSTElNSVRfU1RBQ0suCisJVXNlIFNVQ0NFU1NfRVhJVF9DT0RFIHdoZW4gZXhpdGluZyBpZiBubyBlcnJvcnM7CisJYm90aCB0aGF0IGFuZCBGQVRBTF9FWElUX0NPREUgYXJlIG5vdCAjZGVmaW5lZCBpZiBhbHJlYWR5IGRlZmluZWQuCisKKwlUcmVhdCAkIGFzIGFuIGlkZW50aWZpZXItY2hhcmFjdGVyIGlmIERPTExBUlNfSU5fSURFTlRJRklFUlMuCisJUmVuYW1lIHRoZSBgZGVsZXRlJyBmdW5jdGlvbiBhcyBgZGVsZXRlX21hY3JvJworCXRvIGF2b2lkIFZNUyBuYW1lIGNvbmZsaWN0LgorCisJKiBjZXhwLnk6IFRyZWF0ICQgYXMgYW4gaWRlbnRpZmllci1jaGFyYWN0ZXIgaWYgRE9MTEFSU19JTl9JREVOVElGSUVSUy4KKworCSogc3RtdC5jIChmaXh1cF9tZW1vcnlfb2Zmc2V0KTogRG8gYmlnLWVuZGlhbiBjb21wZW5zYXRpb24KKwlvbmx5IHdpdGhpbiBhIHdvcmQsIG5vdCBmb3IgREltb2RlIHZzIFNJbW9kZS4KKworCSogc3RtdC5jIChmaXh1cF92YXJfcmVmcyk6IERvbid0IGZpeCB1cCB0aGUgaW5zbiB0byBsb2FkIHRoZSB2YXIKKwlmcm9tIGl0cyBvd24gc3RhY2sgc2xvdDsgZGVsZXRlIGl0IGluc3RlYWQuCisKKwkqIHRtLW5zMzJrLmggKE1PREVTX1RJRUFCTEVfUCk6IERJbW9kZSBpcyBsaWtlIERGbW9kZS4KKworCSogdHJlZS5jIChNQVhfSEFTSF9UQUJMRSk6IDEwMDkgKG1vcmUgcHJpbWUpIGluc3RlYWQgb2YgMTAwOC4KKworCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBJZiBtZXJnZWQgdHlwZSBpcyBPTEQncyB0eXBlLAorCWtlZXAgT0xEJ3MgREVDTF9TSVpFIGFuZCBERUNMX1NJWkVfVU5JVC4KKworCSogZ2VuKi5jICh4bWFsbG9jLCB4cmVhbGxvYyk6IENhbGwgYGZhdGFsJyBpZiBtZW1vcnkgaXMgZnVsbC4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBJZiBhIG1vZGUgZG9lc24ndCBmaXQgdGhlCisJcmVsb2FkIHJlZ2lzdGVyLCBhbmQgdGhlIGluc24gaXMgYW4gQVNNX09QRVJBTkRTLCBpZ25vcmUgdGhlIHJlbG9hZC4KKwlPdGhlcndpc2UsIGZpbmFsIHdvdWxkIGNyYXNoLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogVHdvIG5ldyBzdHJhdGVnaWVzIGZvciBsc2hyIG9uIHNob3J0L2NoYXI6CisJd2lkZW4gYW5kIGRvIGFzaHIsIG9yIHdpZGVuIGFuZCBkbyBleHR6di4KKworCSogdmF4Lm1kIChwZWVwaG9sZXMpOiBVc2UgZGVhZF9vcl9zZXRfcCB0byBjaGVjayBmb3IgZWxpbWluYWJsZQorCWludGVybWVkaWF0ZSByZXN1bHQsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhIG1hdGNoIHdpdGggZmluYWwgcmVzdWx0LgorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IFRlc3RpbmcgZnJhbWVfcG9pbnRlcl9uZWVkZWQgaXMKKwllbm91Z2g7IG5vIG5lZWQgdG8gdGVzdCBGUkFNRV9QT0lOVEVSX1JFUVVJUkVELCBldGMuCisJKiBnbG9iYWwtYWxsb2MuYyAoZmluZF9yZWcpOiBMaWtld2lzZS4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogTGlrZXdpc2UgZm9yIGZsYWdfb21pdF9mcmFtZV9wb2ludGVyCisKKwkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBJZiBub3QgYG9wdGltaXplJywgZG9uJ3QgY29tcGxhaW4KKwlhYm91dCBmaW5kaW5nIGFuIGFscmVhZHktZGVsZXRlZCBpbnNuIGluIHRoZSBjaGFpbi4KKworVHVlIEZlYiAxNiAxNzoxNDo1NCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHdoZWF0aWVzLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmM6IERvbid0IGRlZmluZSBOX1NPTCBhbmQgTl9TTElORSBpZiBhbHJlYWR5IGRlZmluZWQuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfbGluZSk6CisJVHlwbyBjYWxsaW5nIEFTTV9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FLgorCisJKiBmbG93LmMgKElOU05fVk9MQVRJTEUpOiBmaXggYSB0eXBvLgorCitGcmkgRmViIDEyIDE2OjQ4OjE2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZmluYWwuYyAoZmluYWwpOiBmb3IgYGFzbScgd2l0aG91dCBvcGVyYW5kcywgb3V0cHV0IGxpdGVyYWxseS4KKworVGh1IEZlYiAxMSAxMjo0NDo0MSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIHN5bW91dC5jIChzeW1vdXRfcmVjb3JkX2ZpZWxkcyk6IEhhbmRsZSBuYW1lbGVzcyBmaWVsZHMuCisJKiBzeW1vdXQuYyAoc3ltb3V0X3JlY29yZF9maWVsZF9uYW1lcyk6IExpa2V3aXNlLgorCisJKiB0eXBlY2hlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogYHZvaWQnIGlzIGEgY29tcGxldGUgdHlwZS4KKwkqIHR5cGVjaGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsKTogRG9uJ3QgY29tcGxhaW4gaWYgcmVzdWx0IGlzIHZvaWQuCisKKwkqIHRtLWhwOWszMjAuaDogQ2hhbmdlIGRlZmluaXRpb24gb2YgQVNNX1NQRUMgdG8gK1gsIG5vdCAtWC4KKworCSogY2NjcC5jIChtYWluKTogRXhwZWN0ZWQgb2JqZWN0IGZpbGUgbmFtZSBmb3IgZm9vLmNjIGlzIGZvby5vLgorCitXZWQgRmViIDEwIDE2OjA0OjU4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBJbml0aWFsaXplIGByZWdtYXNrJyB0byB6ZXJvLgorCUNsYXNzIG51bWJlciBpcyBpbiBJLCBub3QgaW4gQ0xBU1MsIHdoZW4gc2V0dGluZyBpdHMgZWxlbWVudHMuCisJRG9uJ3QgbGV0IEorSyBiZSB0b28gbGFyZ2UuCisKKwkqIHJlbG9hZDEuYyAocG90ZW50aWFsX3JlbG9hZF9yZWdzKTogTWFrZSBpdCBhIGBzaG9ydCcKKwlzaW5jZSB0aGF0IGNhbid0IGJlIHVuc2lnbmVkLgorCisJKiBjY2NwLmMgKHdhcm5pbmcpOiBOZXcgZnVuY3Rpb24sIGNhbGxlZCBsaWtlIGBlcnJvcicuCisJKiBjY2NwLmMgKGRvX2RlZmluZSk6IE1ha2UgcmVkZWZpbml0aW9uIGp1c3QgYSB3YXJuaW5nLgorCitUdWUgRmViICA5IDEzOjI4OjAwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGJlIGZvb2xlZCBieSBFUlJPUl9NQVJLIGFzIGEgZGVjbHNwZWMuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBTdHJpcCBmaW5hbCAuYyBvciAuY28gZnJvbSAuc3ltIGZpbGUgbmFtZS4KKworCSogZ2NjLmM6IFdoZW4gcnVubmluZyBgYXMnLCBzcGVjaWZ5IHRoZSAuc3ltIGZpbGUgaWYgLWdnLgorCitNb24gRmViICA4IDExOjI2OjI2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IERvbid0IHRyeSBnZW5fbG93cGFydCBvbiBWQUxVRQorCWlmIGl0J3MgYSBzdWJyZWcgc2luY2UgaXQgbWlnaHQgbG9zZTsgdXNlIGNvbnZlcnRfdG9fbW9kZSBpbnN0ZWFkLgorCisJKiB0bS1ocDlrMzIwLmg6IERlZmluZSBUQVJHRVRfTUVNX0ZVTkNUSU9OUy4KKwkqIGV4cHIuYyAoZW1pdF9ibG9ja19tb3ZlLCBlbWl0X3B1c2hfaW5zbiwgY2xlYXJfc3RvcmFnZSk6CisJSWYgVEFSR0VUX01FTV9GVU5DVElPTlMsIGdlbmVyYXRlIGNhbGxzIHRvIG1lbWNweSBhbmQgbWVtc2V0CisJaW5zdGVhZCBvZiBiY29weSBhbmQgYnplcm8uCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbik6IExpa2V3aXNlIGZvciBtZW1jbXAgdnMgYmNtcC4KKworCSogc3RtdC5jIChleHBhbmRfZ290byk6IE5ldyB0ZW1wIHZhciB0byBhdm9pZCBSVC9QQyBjb21waWxlciBidWcuCisKK1N1biBGZWIgIDcgMTI6MjA6MjMgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzLCBtYXJrX3NldF9yZWdzKToKKwlIYW5kbGUgaGFyZCByZWdzIGluIG11bHRpd29yZCBtb2Rlczogc2V0IHRoZSBiaXRzIGZvciBlYWNoCisJZGlzdGluY3QgcmVnaXN0ZXItbnVtYmVyIHRoYXQgbWFrZXMgdXAgdGhlIG11bHRpd29yZCBtb2RlLgorCU5lY2Vzc2FyeSBiZWNhdXNlIGZ1bmN0aW9uIGFyZyByZWdpc3RlcnMgY2FuIGluZXZpdGFibHkKKwlsaXZlIGFjcm9zcyBiYXNpYyBibG9ja3MuCisKKwkqIGNzZS5jIChjYW5vbl9oYXNoKTogRnVuY3Rpb24gYXJnIGFuZCB2YWx1ZSByZWdpc3RlcnMgbm8gbG9uZ2VyCisJY29uc2lkZXJlZCB2b2xhdGlsZSwgYmVjYXVzZSBmbG93IHNob3VsZCBub3cgaGFuZGxlIHRoZSBjb2RlIHRoYXQKKwljYW4gcmVzdWx0IGZyb20gY3NlJ2luZyB0aGVtLgorCisJKiBjc2UuYyAobWFrZV9yZWdzX2Vxdik6IEFib3J0IGlmIE9MRCBpcyBpbnZhbGlkLgorCSogY3NlLmMgKHJlZ19pbnZhbGlkYXRlKTogQWJvcnQgaWYgcmVnIGFscmVhZHkgaW52YWxpZCBoYXMgZXF2cy4KKworU2F0IEZlYiAgNiAxNjoyNTozMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChtYWluKTogU3BlY2lmaWMgZXJyb3IgbXNnIGlmIG5vIGlucHV0IGZpbGVzLgorCitGcmkgRmViICA1IDE3OjU2OjAwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZGVjbCwgcHV0X3Zhcl9pbnRvX3N0YWNrLCBhc3NpZ25fcGFybXMpOgorCVNldCBpbl9zdHJ1Y3Qgb24gYSBNRU0gaWYgdGhlIHZhcmlhYmxlIGlzIGFuIGFnZ3JlZ2F0ZSBvciB1bmlvbi4KKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFNldCBpbl9zdHJ1Y3Qgb24gYWdncmVnYXRlIHZhcnMuCisKK1RodSBGZWIgIDQgMTE6NTI6MzAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kIChtb3ZzZik6IENvcnJlY3QgdHdvIGZtb3ZlLnggdG8gZm1vdmUucy4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKToKKwlNdXN0IGFsd2F5cyBnZW5lcmF0ZSBhbiBgYW5kJyB0byBtYXNrIHRoZSBiaXRmaWVsZAorCXVubGVzcyBpdHMgd2lkdGggaXMgdGhlIHNhbWUgYXMgdGhlIG91dHB1dCBtYWNoaW5lIG1vZGUuCisKKwkqIHZlcnNpb24gMS4xOCByZWxlYXNlZC4KKworV2VkIEZlYiAgMyAwODo0MToyMCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IENvbnZlcnQgRVhQUidzIG9wZXJhbmRzIGJlZm9yZSByZXR1cm5pbmcgdGhlbS4KKworVHVlIEZlYiAgMiAxNTozNToxOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKToKKworCSogdHlwZWNoZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IEhhbmRsZSBDT01QT1VORF9FWFBSIGFycmF5cy4KKworTW9uIEZlYiAgMSAxODo1MzowNSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIG5zMzJrLm1kOiBvcGVyYW5kIDAgb2YgYWxsIHVuc2lnbmVkIGRpdmlkZS9tb2R1bHVzIGluc25zCisJaXMgbm93IHJlZ2lzdGVyX29wZXJhbmQuCisKKwkqIHN0ZGFyZy5oOiBNYWtlIHZhX2xpc3QgYmUgY2hhciAqLCBub3QgY2hhciAqWzFdLgorCUxhdGVzdCBkcmFmdCBkb2Vzbid0IHNheSBpdCBtdXN0IGJlIGFuIGFycmF5IHR5cGUuCisKK1N1biBKYW4gMzEgMTE6MTQ6MDcgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogQWRkIHRlbXAgdmFyIHRvIGF2b2lkIFNlcXVlbnQKKwljb21waWxlciBidWcuCisKKwkqIHRtLW5zMzJrLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERvbid0IGFsbG93IHB1c2hlcyBvciBwb3BzCisJc2luY2UgdGhlcmUgYXJlIHNwZWNpYWwgaW5zbiBwYXR0ZXJucyBmb3IgdGhlbS4KKwlSZXN1YnJvdXRpbml6ZSBhbmQgYWRkIHRlbXAgdmFycyB0byBtYWtlIGV4cHJlc3Npb25zIHNtYWxsZXIuCisJKiBuczMyay5tZDogQWRkIGEgZmV3IG1vcmUgc3BlY2lhbCBzdGFjayBpbnNuczsgbm93IHRoZXJlIGFyZSBlbm91Z2guCisKKwkqIHRtLXNlcXVlbnQuaDogRGVmaW5pdGlvbnMgb2YgREJYX05PX1hSRUZTIGFuZCBEQlhfQ09OVElOX0xFTkdUSC4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBIYW5kbGluZyBvZiByZWxvYWRfc3RyaWN0X2xvdworCWlzIG5lZWRlZCBmb3IgaW5wdXQgcmVsb2FkcyBhcyB3ZWxsIGFzIG91dHB1dCwgc2luY2UgYSBzdHJpY3RfbG93X3BhcnQKKwlvcGVyYW5kIGlzIG5vcm1hbGx5IGEgcmVhZC13cml0ZSBvcGVyYW5kLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFRoZSBtb2RlIGEgcmVsb2FkIG5lZWRzIGlzIHRoZSB3aWRlciBvZgorCXRoZSBpbnB1dCBhbmQgb3V0cHV0IG1vZGVzLS1qdXN0IGFzIGl0IGlzIGluIGNob29zZV9yZWxvYWRfdGFyZ2V0cy4KKworCSogcmVsb2FkLmMgKGZpbmRfZHVtbXlfcmVsb2FkKTogSWYgSU4gYW5kIE9VVCBoYXZlIGRpZmZlcmVudCB3aWR0aHMKKwlhbmQgb25lIG9mIHRoZW0gZXhjZWVkcyBhIHdvcmQsIGRvbid0IGZpbmQgYW55IGR1bW15IHJlbG9hZC4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgLmp1bXAyIGZpbGVuYW1lLgorCitTYXQgSmFuIDMwIDEwOjM1OjQ2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogb3V0cHV0LW5zMzJrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6CisJUHJpbnQgYWRkcmVzc2VzIG9mIHRoZSBmb3JtIEMxKyhOKlJFRytDMikgd2hpY2ggY3VycmVudGx5CisJYXJlIGFjY2VwdGVkIGFzIGxlZ2l0aW1hdGUgbWVtb3J5IGFkZHJlc3Nlcy4KKworCSogdG0tc2VxdWVudC5oOiBTaW1wbGUgYnVncyBpbiBQUklOVF9PUEVSQU5ELCBUQVJHRVRfREVGQVVMVAorCWFuZCBTRVFVRU5UX0FERFJFU1NfQlVHLgorCisJKiBnZW4qLmM6IE11c3QgZXhwbGljaXRseSBleGl0OyByZXR1cm5pbmcgZnJvbSBgbWFpbicgZmFpbHMKKwl0byBpbmRpY2F0ZSBub256ZXJvIHN0YXR1cyBkdWUgdG8gYnVnIGluIFVuaXguCisKKwkqIHBhcnNlLnkgKGNoZWNrX2xpbmVfbnVtYmVyKTogSWdub3JlIGVudGlyZSBsaW5lIG9mIHVucmVjb2duaXplZAorCSMtZGlyZWN0aXZlOyBubyBlcnJvciBpZiBpdCBpcyBgcHJhZ21hJy4KKworRnJpIEphbiAyOSAwNjo0NjowMSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGdlbnJlY29nLmMsIGdlbmV4dHJhY3QuYywgZ2Vub3V0cHV0LmM6IERlZmluZSBiY29weSBhbmQvb3IgYnplcm8uCisKKwkqIGNjY3AuYyAoZG9fZGVmaW5lKTogTWFrZSBkZWZuLT5hcmduYW1lcyBsb25nIGVub3VnaCBpbiBuby1hcmdzIGNhc2UuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogTWFrZSBiYXNpY19ibG9ja19uZWVkcyAwIHVudGlsIGFmdGVyIHRoZQorCWZyYW1lIHBvaW50ZXIgcmVnIGlzIHNwaWxsZWQsIHNvIHRoYXQgQUxMIHBzZXVkb3MgaW4gaXQgYXJlIHNwaWxsZWQuCisKKwkqIHR5cGVjaGVjay5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOgorCVN0cmlwIGEgTk9QX0VYUFIgb25seSBpZiBpdCBleHRlbmRzLCBub3QgaWYgaXQgdHJ1bmNhdGVzLgorCShidWlsZF91bmFyeV9vcCk6IEZvciBUUlVUSF9OT1RfRVhQUiwgY2FsbCBpbnZlcnRfdHJ1dGh2YWx1ZQorCXRvIHNpbXBsaWZ5LgorCisJKiBGaXhlcyBmb3IgSFBVWCBzdXBwb3J0IGZyb20gY3BoOgorCSogdG0taHA5azMyMC5oOiBDb3JyZWN0IG5hbWVzIG9mIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKwlGaXggdHlwb3MgaW4gQVNNX09VVFBVVF9PUENPREU7IGFsc28gY29udmVydCBgZm1vdmUnIHRvIGBmbW92Jy4KKwkqIE1ha2VmaWxlIChjb21tZW50cyBmb3IgSFBVWCk6CisJY3BoIHNheXMgLVdkLC1YIGlzbid0IG5lZWRlZCBpbiBDRkxBR1MsIG5vciAtbEJTRCBpbiBDTElCLgorCUFsc28gdGhhdCAtZyBjYW4ndCBiZSB1c2VkIGluIENGTEFHUyB3aXRoIEhQJ3MgcGNjLgorCSogY29uZi1ocDlrMzIwLmg6IE5ldyBmaWxlLCBsaWtlIGNvbmZpZy1tNjhrLmggYnV0IHdpdGgKKwkjZGVmaW5lcyBmb3IgdGhlIGJzdHJpbmcgZnVuY3Rpb25zLgorCSogbTY4ay5tZDogQWRkIGVsc2UtY2xhdXNlcyB0byB0aGUgSFBVWF9BU00gY29uZGl0aW9uYWxzIG9uIGNtcCBpbnNucy4KKwlSZWluc2VydCBtaXN0YWtlbmx5LWRlbGV0ZWQgTU9UT1JPTEEgY29uZGl0aW9uYWxzIGFyb3VuZAorCXNvbWUgT1VUUFVUX0pVTVBzLgorCitUaHUgSmFuIDI4IDA5OjUxOjQxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX2JhY2tfcCk6IElmIFRBUkdFVCBpcyB1bmNvbmRpdGlvbmFsLCByZXR1cm4gMC4KKworV2VkIEphbiAyNyAwNDoxODoyOSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzLmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBTaW1wbGlmeSAocGx1cyAocGx1cyB4IGMxKSBjMikuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBEb24ndCB1c2Ugc21hbGwtYmxvY2sgcHVzaC1pbnNucyBmb3IgQkxLbW9kZQorCXdoZW4gb25lIG9mIHRoZW0gd291bGQgYmUgYWZmZWN0ZWQgYnkgUFVTSF9ST1VORElORy4KKwlJbnN0ZWFkLCBtYWtlIGFsbCB0aGUgc3BhY2UgYW5kIHRoZW4gY29weS4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBEb24ndCBhcHBseSBQVVNIX1JPVU5ESU5HIGlmIEJMS21vZGUuCisKKwkqIEFsbG93IGBhc20nIHdpdGggb3BlcmFuZHMgdG8gYmUgbWFya2VkIHZvbGF0aWxlLgorCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBEb24ndCByZWNvcmQgQVNNX09QRVJBTkRTIHRoYXQgaGFzIGB2b2xhdGlsJy4KKwkqIGxvb3AuYyAoaW52YXJpYW50X3ApOiBBU01fT1BFUkFORFMgd2l0aCBgdm9sYXRpbCcgY2FuJ3QgYmUgaW52YXJpYW50LgorCSogZmxvdy5jICh2b2xhdGlsZV9yZWZzX3ApOiBOb3RlIEFTTV9PUEVSQU5EUyB0aGF0IGFyZSB2b2xhdGlsZS4KKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IE5ldyBhcmcgVk9MOyBtYXJrIEFTTV9PUEVSQU5EUyBhcyB2b2wuCisJKiB0eXBlY2hlY2suYyAoY19leHBhbmRfYXNtX29wZXJhbmRzKTogTmV3IGFyZyBWT0wuCisJKiBwYXJzZS55OiBhbGxvdyBhIFRZUEVfUVVBTCBhZnRlciBBU00uCisKKwkqIE1ha2UgY3NlIGhhbmRsZSBgYXNtJyB3aXRoIG9wZXJhbmRzOgorCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBIYXNoIHN0cmluZyBvcGVyYW5kcyBieSBjb250ZW50cywgbm90IGFkZHJlc3MuCisJKiBjc2UuYyAoZXhwX2VxdWl2X3ApOiBDb21wYXJlIHN0cmluZyBvcGVyYW5kcyB3aXRoIHN0cmNtcC4KKwkqIHJ0bC5jIChydHhfZXF1YWxfcCk6IENvbXBhcmUgc3RyaW5nIG9wZXJhbmRzIHdpdGggc3RyY21wLgorCisJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogT25jZSBzaXpldHlwZSBpcyBzZXQsCisJY29ycmVjdCB0aGUgdHlwZSBvZiB0aGUgc2l6ZXMgb2YgdHlwZXMgYWxyZWFkeSBtYWRlLgorCisJKiBjY2NwLmMgKGRvX2RlZmluZXMpOiBEb24ndCByZWplY3QgI2RlZmluZSBmb297YX0uCisKK1R1ZSBKYW4gMjYgMDQ6NTM6MTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTm93IHRoYXQgYGFzbScgaXMgbGltaXRlZCB0bworCU1BWF9SRUNPR19PUEVSQU5EUywgZWxpbWluYXRlIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiBgY29uc3RyYWludHMnCisJYW5kIGBjb25zdHJhaW50czEnLCBhbmQgZ28gYmFjayB0byBgcmVjb2dfb3BlcmFuZCcgaW5zdGVhZCBvZgorCWBvcGVyYW5kcycuCisKKwkqIHR5cGVjaGVjay5jIChjX2V4cGFuZF9hc21fb3BlcmFuZHMpOiBOZXcgZm4gdG8gaGFuZGxlIGBhc20nIGZvciBDLgorCUNhbGxzIGV4cGFuZF9hc21fb3BlcmFuZHMsIGFuZCBoYW5kbGVzIG91dHB1dCBvcGVyYW5kcyB0aGF0CisJdGhlIG90aGVyIGZ1bmN0aW9uIGNhbm5vdCBoYW5kbGUuCisKKwkqIHBhcnNlLnk6IENhbGwgdGhhdCBmdW5jdGlvbi4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogRXJyb3IgaWYgdG9vIG1hbnkgb3BlcmFuZHMuCisJI2luY2x1ZGUgaW5zbi1jb25maWcuaCB0byBnZXQgTUFYX1JFQ09HX09QRVJBTkRTLgorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogVXNlIHN0b3JlX2ZpZWxkIHRvIGhhbmRsZQorCXN0cnVjdHVyZSBmaWVsZHMgYW5kIGFycmF5IGVsZW1lbnRzLgorCisJKiBvdXRwdXQtbTY4ay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBQVVNIT1AgYW5kIFBPUE9QIHdlcmUgc3dhcHBlZC4KKwlIYW5kbGUgaW5zbnMgdGhhdCBwdXNoIGFuIHNwLXJlbGF0aXZlIGFkZHJlc3Mgb250byBzcDsKKwl0aGVzZSBjYW4gYXJpc2Ugd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlci4KKwlCVUc/IERvIHVub2Zmc2V0YWJsZSBtZW0gcmVmcyB1c2luZyBzcCBhbmQgZnAgbG9zZT8KKworCSogbTY4ay5tZCAobW92ZGksbW92ZGYpOiBBbGxvdyB1bm9mZnNldGFibGUgbWVtIHJlZnMKKwlvbmx5IGlmIHRoZSBvdGhlciBvcGVyYW5kIGlzIGEgcmVnaXN0ZXIuCisKKwkqIG02OGsubWQgKHplcm9fZXh0ZW5kcWlzaTIpOiBTR1MgY29uZGl0aW9uYWxzIGRlbGV0ZWQuCisJU3VwcG9zZWRseSB0aGUgTU9UT1JPTEEgc3ludGF4IHdvcmtzIGZvciB0aG9zZSBhZGRyZXNzZXMuCisKKwkqIHR5cGVjaGVjay5jIChkZWZhdWx0X2NvbnZlcnNpb24pOgorCUlmIGZsYWdfdHJhZGl0aW9uYWwsIHByZXNlcnZlIHVuc2lnbmVkbmVzcyB3aGVuIHByb21vdGluZyBpbnRzLAorCWFuZCBwcm9tb3RlIGZsb2F0IHRvIGRvdWJsZS4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOgorCUFsbG93IGNvbXBhcmlzb25zIGJldHdlZW4gcG9pbnRlcnMgYW5kIGludHMuCisJSWYgbm90IC10cmFkaXRpb25hbCwgd2FybiBhYm91dCB0aGVtLgorCitNb24gSmFuIDI1IDAyOjExOjE4IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKHtleHRyYWN0LHN0b3JlfV9zcGxpdF9iaXRfZmllbGQpOgorCUZ1bmN0aW9ucyB7ZXh0cmFjdCxzdG9yZX1fc3BsaXRfcmVnX2JpdF9maWVsZCBub3cgd29yayBmb3IgbWVtb3J5CisJYWxzbywgYW5kIHRoZXJlZm9yZSBhcmUgcmVuYW1lZC4KKwkqICh7ZXh0cmFjdCxzdG9yZX1fZml4ZWRfYml0X2ZpZWxkKTogQ2FsbCB0aG9zZSBmbnMgd2hlbiBhIGZpZWxkCisJaXMgc3BsaXQgYWNyb3NzIHR3byB3b3Jkcy4KKwlBbHNvLCBwcmVzZXJ2ZSB0aGUgYHZvbGF0aWwnIGJpdCBvbiBtZW1vcnkgcmVmcy4KKworCSogb3V0cHV0LW02OGsuYyAob3V0cHV0X21vdmVfZG91YmxlKTogSGFuZGxlIG5vbm9mZnNldGFibGUgbWVtIHJlZnMuCisJKiBtNjhrLm1kOiBSZWxheCBjb25zdHJhaW50cyBvbiBtb3ZkaSwgbW92ZGYuCisKKwkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWZpbmUgYGludCcgYW5kIGBjaGFyJyBmaXJzdC4KKwlTZXQgYHNpemV0eXBlJyBleHBsaWNpdGx5LgorCisJKiBzdG10LmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBNYXkgbm90IGp1c3QgcmV0dXJuIHdoZW4gYSBTRVQKKwlkb2Vzbid0IGhhdmUgVkFSIGFzIGl0cyBzcmMgb3IgZGVzdC4KKworCSogdmFyYXNtLmM6IERvbid0IGluY2x1ZGUgYy10cmVlLmguCisKKwkqIGRlY2wuYyAoYnVpbGRfc3RydWN0KTogU3BsaXQgdGhpcyBmdW5jdGlvbiBpbnRvIHRocmVlOgorCWB4cmVmX3RhZycsIGBzdGFydF9zdHJ1Y3QnIGFuZCBgZmluaXNoX3N0cnVjdCcuCisJYHhyZWZfdGFnJyBzdWJzdW1lcyBgeHJlZl9lbnVtJy4KKworCSogcGFyc2UueSAoc3RydWN0c3ApOiBXaGVuIHBhcnNpbmcgYHN0cnVjdCBmb28gey4uLn0nLCBkZWZpbmUgdGhlIHRhZworCWFzIGEgY3Jvc3MtcmVmIGJlZm9yZSBwYXJzaW5nIHRoZSBjb21wb25lbnRzLiAgVXNlIHRoZSB0aHJlZSBuZXcgZm5zLgorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFJlY29nbml6ZSBuZXctZm9ybWF0IEFTTV9PUEVSQU5EUyBpbnNucworCXdpdGggYGFzbV9ub3BlcmFuZHMnLCBhbmQgc2NhbiB0aGVpciBvcGVyYW5kcyBhcyB1c3VhbC4KKworCSogY3NlLmM6IEluIG51bWVyb3VzIGZ1bmN0aW9ucyBzdWNoIGFzIGNhbm9uX2hhc2gsIHJ0eF9jb3N0LCBldGMuCisJdGhhdCBkbyB0cmVlLXdhbGsgb24gcnR4LCBoYW5kbGUgdmVjdG9ycyBvZiBzdWJleHByZXNzaW9ucy4KKworCSogbG9vcC5jIChpbnZhcmlhbnRfcCk6IExpa2V3aXNlLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9pbnNuKTogVHdvIGJ1Z3M6CisJSWYgaW5zbiBhbHJlYWR5IGRlbGV0ZWQsIHJldHVybiB0aGUgZmlyc3QgZm9sbG93aW5nIG5vbmRlbGV0ZWQuCisJRGVsZXRpbmcgYSBqdW1wJ3MgbGFiZWwgY2FuIGRlbGV0ZSBORVhULiAgTWFrZSBzdXJlIHJldHVybiB2YWx1ZQorCWlzIGFsd2F5cyB0aGUgZmlyc3QgaW5zbiBmb2xsb3dpbmcgSU5TTiBhbmQgbm90IHlldCBkZWxldGVkLgorCitTdW4gSmFuIDI0IDAyOjI3OjQ5IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogcnRsLmRlZiAoQVNNX09QRVJBTkRTKTogQ2hhbmdlIHRoZSBydGwgZXhwcmVzc2lvbiBvZiBhbgorCWBhc20nIHdpdGggb3BlcmFuZHMgc28gaXQgbG9va3MgbGlrZSB0aGlzIGZvciBvbmUgb3V0cHV0IG9wZXJhbmQ6CisJKHNldCBPVVRQVVQgKGFzbV9vcGVyYW5kczpPVVRQVVRNT0RFIElOU05TVFJJTkcgT1VUUFVUQ09OU1RSQUlOVAorCQkJCQkgICAgIDAgSU5QVVRTIElOUFVUQ09OU1RSQUlOVFMpKS4KKwlhbmQgbGlrZSB0aGlzIGZvciBtdWx0aXBsZSBvdXRwdXRzOgorCShQQVJBTExFTCBbCisJICAoc2V0IE9VVFBVVDAgKGFzbV9vcGVyYW5kczpPVVRQVVRNT0RFIElOU05TVFJJTkcgT1VUUFVUQ09OU1RSQUlOVAorCQkJCQkgICAgICAgIDAgSU5QVVRTIElOUFVUQ09OU1RSQUlOVFMpKS4KKwkgIChzZXQgT1VUUFVUMSAoYXNtX29wZXJhbmRzOk9VVFBVVE1PREUxIElOU05TVFJJTkcgT1VUUFVUQ09OU1RSQUlOVDEKKwkJCQkJICAgICAgICAxIElOUFVUUyBJTlBVVENPTlNUUkFJTlRTKSldKQorCisJKiBwYXJzZS55OiBDaGFuZ2UgcGFyc2luZyBvZiBgYXNtJyB0byBkaXN0aW5ndWlzaCBpbnB1dCBhbmQgb3V0cHV0CisJb3BlcmFuZHMuICBTZXBhcmF0ZSB0aGVtIHdpdGggY29sb247IHNlcGFyYXRlIHRoZSBzdHJpbmcgd2l0aCBjb2xvbi4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogUmVjZWl2ZSBpbnB1dHMgYW5kIG91dHB1dHMgc2VwYXJhdGVseS4KKwlHZW5lcmF0ZSB0aGUgbmV3IHJ0bCBmb3JtYXQuCisKKwkqIHJlY29nLmMgKGFzbV9ub3BlcmFuZHMsIGRlY29kZV9hc21fb3BlcmFuZHMpOiBOZXcgZm5zCisJZm9yIGV4dHJhY3RpbmcgdGhlIG9wZXJhbmRzIGFuZCBjb25zdHJhaW50cyBmcm9tIHRoZXNlIGluc25zLgorCisJKiBmaW5hbC5jIChmaW5hbCk6IFJlY29nbml6ZSBhbmQgb3V0cHV0IHRoZSBuZXcgcnRsIGZvcm1hdAorCXVzaW5nIHRob3NlIG5ldyBmdW5jdGlvbnMuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBSZWNvZ25pemUgYW5kIGdldCBjb25zdHJhaW50cworCWZyb20gdGhlIG5ldyBydGwgZm9ybWF0IHVzaW5nIHRob3NlIG5ldyBmdW5jdGlvbnMuCisJTmV3IHZhcmlhYmxlIGBvcGVyYW5kX21vZGVzJyBob2xkcyB0aGUgbWFjaGluZSBtb2RlcyBvZiB0aGUKKwlvcGVyYW5kcywgb2J0YWluZWQgb25lIHdheSBmb3IgQVNNX09QRVJBTkRTIGluc25zIGFuZCBhbm90aGVyCisJZm9yIG90aGVyIGluc25zLgorCisJKiBydGwuYyAobm90ZV9zdG9yZXMpOiBDYWxsaW5nIGNvbnZlbnRpb24KKwlpcyBjaGFuZ2VkOiB0aGUgZmlyc3QgYXJnIEZVTkNUSU9OIG5vdyByZWNlaXZlcyBhcyBpdHMgMm5kIGFyZworCTEgaWYgY2xvYmJlcmluZywgMCBpZiBzZXR0aW5nLiAgVXNlZCB0byBiZSB0aGUgQ0xPQkJFUiBvciBTRVQgcnR4LgorCisJKiBsb2NhbC1hbGxvYy5jIChyZWdfaXNfc2V0KTogVGhpcyBmbiBpcyBjYWxsZWQgZnJvbSBub3RlX3N0b3JlczsKKwljaGFuZ2UgaXRzIGFyZ3VtZW50cy4KKworCSogdG0tbTY4ay5oIChGSVhVUF9GUkFNRV9QT0lOVEVSX0FERFJFU1NFUyk6CisJVXNlIGZyYW1lX3BvaW50ZXJfcnR4IHRvIHJlY29nbml6ZSBpbnRlbmRlZCBmcmFtZS1wb2ludGVyIHJlZnMKKwlhbmQgbm90IHJlY29nbml6ZSBwc2V1ZG8tcmVncyB0aGF0IHdlcmUgYWxsb2NhdGVkIHRvIHRoZSBmcmFtZQorCXBvaW50ZXIgcmVnaXN0ZXIuCisKKwkqIGVtaXQtcnRsLmM6IEFsbCByZWZzIHRvIGZyYW1lIHBvaW50ZXIgdXNlIGEgc2luZ2xlIHJ0eCwgaW4KKwlmcmFtZV9wb2ludGVyX3J0eC4gIExpa2V3aXNlIGFyZ19wb2ludGVyX3J0eCBmb3IgdGhlIGFyZyBwb2ludGVyLgorCUlmIHRoZXkgYXJlIHRoZSBzYW1lIHJlZ2lzdGVyLCB0aGVzZSBhcmUgdGhlIHNhbWUgcnR4LgorCUluaXRpYWxpemUgdGhlbSBpbiBpbml0X2VtaXQuCisJKiBydGwuaDogRGVjbGFyZSB0aGVzZSB2YXJzLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcywgYXNzaWduX3N0YWNrX2xvY2FsKTogVXNlIHRob3NlIHJ0eCdzLgorCitTYXQgSmFuIDIzIDAwOjMyOjEwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvbid0IGNvbWJpbmVfcmVsb2FkcyBpZiBgJicgY29uc3RyYWludAorCXdhcyB1c2VkLgorCisJKiBwYXJzZS55OiBQYXJzZSBgYXNtJyB3aXRoIG9wZXJhbmRzLgorCSogc3RtdC5jIChleHBhbmRfYXNtX3BhcmFtcyk6IE5ldyBmbjogZ2VuZXJhdGUgYW4gQVNNX09QRVJBTkRTIGZvcgorCWBhc20nIHdpdGggb3BlcmFuZHMuCisJKiBmaW5hbC5jIChmaW5hbCk6IE91dHB1dCBhbiBBU01fT1BFUkFORFMgaW5zbi1ib2R5LgorCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBJZ25vcmUgQVNNX09QRVJBTkRTLCBsaWtlIEFTTV9JTlBVVC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEhhbmRsZSByZWxvYWRpbmcgb2YgQVNNX09QRVJBTkRTLgorCVRoZSBudW1iZXIgb2Ygb3BlcmFuZHMgY2FuIG5vIGxvbmdlciBiZSBib3VuZGVkLgorCUZvciBleGFtcGxlIHdlIGNhbid0IGFsd2F5cyBwdXQgdGhlIG9wZXJhbmRzIGluIHJlY29nX29wZXJhbmRzLgorCisJTmV3IGxvY2FscyBPUEVSQU5EUyBhbmQgT1BFUkFORF9MT0NTIHBvaW50IHRvIGFsbG9jYSdkIHZlY3RvcnMgb2YKKwlvcGVyYW5kcyBhbmQgdGhlaXIgbG9jYXRpb25zLiAgTmV3IGxvY2FscyBDT05TVFJBSU5UUyBhbmQgQ09OU1RSQUlOVFMxCisJaG9sZCBhbGxvY2EnZCB2ZWN0b3JzIG9mIGNvbnN0cmFpbnRzLgorCisJVW5mb3J0dW5hdGVseSB0aGlzIGlzbid0IGVub3VnaDsgZXZlcnkgdmVjdG9yIHdpdGggbGVuZ3RoCisJTUFYX1JFQ09HX09QRVJBTkRTIG5lZWRzIHRvIGJlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KKwlXb3VsZCB0aGlzIGJlIHRvbyBzbG93PyAgRm9yIG5vdywgYSBjaGVhcCAic29sdXRpb24iIGlzIHRvIGRlbGV0ZQorCWFueSBpbnNuIHRoYXQgaGFzIHRvbyBtYW55IG9wZXJhbmRzLgorCisJKiBydGwuZGVmOiBEZWxldGUgVk9MQVRJTEUsIFVOQ0hBTkdJTkcgYW5kIFVOREVTQ1JJQkVELgorCUFkZCBBU01fT1BFUkFORFMuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19jbGFzc19yZWNvcmQpOiBEZWxldGUgcmVmIHRvIFVOQ0hBTkdJTkcuCisJKiBsb29wLmMgKGludmFyaWFudF9wKToKKwkqIHJ0bC5jIChydHhfdmFyaWVzX3ApOgorCisJKiBjY2NwLmM6IERlZmluZSBfX1ZFUlNJT05fXy4KKworCSogZGVjbC5jIChzaGFkb3dfdGFnKTogVFlQRV9OQU1FIGRvZXNuJ3Qgd29yayB0byBnZXQgdGhlIHRhZy1uYW1lCisJb2YgYSBzdHJ1Y3QsIHNvIHVzZSBuZXcgZnVuY3Rpb24gbG9va3VwX3RhZ19yZXZlcnNlLgorCSogZGVjbC5jIChsb29rdXBfdGFnX3JldmVyc2UpOiBHaXZlbiBhIHR5cGUsIHJldHVybiBpdHMgdGFnIG5hbWUuCisKKwkqIHN5bW91dC5jIChzeW1vdXRfc291cmNlX2ZpbGUpOiBPdXRwdXQgb25lIGBzdHJ1Y3Qgc291cmNlJy4KKwkqIHN5bW91dC5jIChzeW1vdXRfbGluZXMpOiBPdXRwdXQgYWxsIG9mIHRoZW0sIGFuZCB0aGUgc291cmNldmVjdG9yLgorCSogZ2RiZmlsZXMuaDogTmV3IGZpbGUgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBmaW5hbC5jIGFuZCBzeW1vdXQuYy4KKworCSogZmluYWwuYyAob3V0cHV0X3NvdXJjZV9saW5lKTogTmV3IGFyZyBXUklURV9TWU1CT0xTIHNheXMgd3JpdGUKKwluZXcgR0RCLWZvcm1hdCBsaW5lbnVtYmVyIGluZm8uICBBc3NpZ25zIGEgZmlsZW51bSB0byBlYWNoIHNvdXJjZQorCWZpbGUgbmFtZSBhbmQga2VlcHMgdHJhY2sgb2YgdGhlIGNvcnJlc3BvbmRlbmNlLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBPdXRwdXQgdGhlIC1NIGluZm8gYWZ0ZXIgc2VhcmNoaW5nIHRoZSBkaXJzOworCWluY2x1ZGUgdGhlIGFjdHVhbCBkaXIgbmFtZS4gIERvbid0IGdlbmVyYXRlICIuLyIgZm9yIGN1cnJlbnQgZGlyLgorCitGcmkgSmFuIDIyIDA0OjEwOjEwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMpCisKKwkqIHRtLW5ld3M4MDAuaDogRGVsZXRlIG92ZXJyaWRlIG9mIElORElSRUNUQUJMRV8xX0FERFJFU1MuCisJT3V0cHV0IGlzIGZhc3RlciBpZiBpdCBkb2Vzbid0IHVzZSAzMi1iaXQgZGlzcGxhY2VtZW50cy4KKworCSogcmVsb2FkLmMgKGNvbWJpbmVfcmVsb2Fkcyk6IE5ldyBmdW5jdGlvbi4KKwlJZiBwb3NzaWJsZSwgZmluZCBhbiBpbnB1dCByZWxvYWQKKwlhbmQgYW4gb3V0cHV0IHJlbG9hZCB0aGF0IGNhbiBiZSB0dXJuZWQgaW50byBvbmUgaW5wdXQtb3V0cHV0IHJlbG9hZC4KKwlUaGUgb2xkIG91dHB1dC1yZWxvYWQgaXMgbWFya2VkIGFzIGlub3BlcmF0aXZlOiByZWxvYWRfb3V0CisJYW5kIHJlbG9hZF9pbiBib3RoIHplcm8uICBUaGlzIGlzIGNhbGxlZCBmcm9tIGZpbmRfcmVsb2Fkcy4KKworCSogcmVsb2FkMS5jIChyZWxvYWQsIGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IElnbm9yZSBpbm9wZXJhdGl2ZQorCXJlbG9hZHMuCisKKwkqIFByaW50IHdhcm5pbmdzIGZvciB2YXJpYWJsZXMgdGhhdCBjb3VsZCBiZSBjbG9iYmVyZWQgYnkgYGxvbmdqbXAnLgorCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEdlbmVyYXRlIGEgTk9URV9JTlNOX1NFVEpNUCB3aGVuZXZlcgorCWBzZXRqbXAnIG9yIGBfc2V0am1wJyBpcyBjYWxsZWQuCisJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IFdoZW4gTk9URV9JTlNOX1NFVEpNUCBpcyBzZWVuLAorCXJlY29yZCB0aGUgbGl2ZSByZWdzIGluIGByZWdzX2xpdmVfYXRfc2V0am1wJy4KKwkqIHN0bXQuYyAodW5pbml0aWFsaXplZF92YXJzX3dhcm5pbmcpOiBXYXJuIGFib3V0IHZhcnMgdGhhdCBoYXZlIHJlZ3MKKwl0aGF0IGFyZSBzZXQgbW9yZSB0aGFuIG9uY2UgYW5kIGFyZSBtYXJrZWQgaW4gYHJlZ3NfbGl2ZV9hdF9zZXRqbXAnLgorCVdvcmtzIHRocm91Z2ggZnVuY3Rpb24gYHJlZ25vX2Nsb2JiZXJlZF9ieV9sb25nam1wJy4KKwkqIHJ0bC5oOiBEZWZpbmUgTk9URV9JTlNOX1NFVEpNUC4KKworCSogZ2VucmVjb2cuYyAodHJ5X21lcmdlXzIpOiBXaGVuIGVuZm9yY2VfbW9kZXMsIGtlZXAgYWxsIHRoZQorCWFsdGVybmF0aXZlcyBzZWdyZWdhdGVkIGJ5IG1vZGVzIGFuZCBrZWVwIHRoZSBtb2RlcyBpbiBudW1lcmljYWwgb3JkZXIuCisJKiBnZW5yZWNvZy5jICh3cml0ZV90cmVlKTogTWFrZSBjb25kaXRpb25zIGZvciBzd2l0Y2gtb24tbW9kZXMKKwlrbm93IHdoYXQgZGlmZmVyZW5jZSBlbmZvcmNlX21vZGUgbWFrZXMuCisKK1RodSBKYW4gMjEgMDA6MTI6MzUgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcykKKworCSogdG0tbnMzMmsuaDogVXNlIFN0ZWluJ3MgZGVmaW5pdGlvbnMgb2YgUFJJTlRfT1BFUkFORHssX0FERFJFU1N9OworCW1vdmUgdGhlIFNlcXVlbnQgZGVmaW5pdGlvbnMgaW5mbyB0bS1zZXF1ZW50LmguCisJSGFuZGxlICUkIGluIGJvdGggb2xkIGFuZCBuZXcgUFJJTlRfT1BFUkFORC4KKwlEZWZpbmUgQ1BQX1BSRURFRklORVMuCisKKwkqIG5zMzJrLm1kOiBNZXJnZSBzb21lIGZlYXR1cmVzIGZyb20gSmFuIFN0ZWluJ3MgcG9ydDoKKwlzdHJpY3RfbG93X3BhcnQgaW5zbnMsIHNtYXJ0IG91dHB1dCBvZiBib29sZWFucyB3aXRoIHNtYWxsCisJY29uc3RhbnQgYXJncywgYWNiZCBpbnNucyBnZW5lcmFsaXplZCBmb3Igb3RoZXIgaW5jcmVtZW50cy4KKwlVc2UgJSQgd2hlcmV2ZXIgdGhlcmUgaXMgYW4gZXhwbGljaXQgaW1tZWRpYXRlLgorCUZpeCBzaG9ydGNvbWluZ3Mgb2YgYWRqc3AgaW5zbnM6IHVzZSBhZGpzcGQgaW4gZ2VuZXJhbCwKKwlhbmQgdXNlIGFkanNwYiBpbiBhbGwgdGhlIGNhc2VzIHRoYXQgYWxsb3cgaXQuCisJRG9uJ3QgYm90aGVyIGV4cGxpY2l0bHkgY2xlYXJpbmcgQ0NfUkVWRVJTRUQuCisJRm9yIHRzdHNmL3RzdGRmLCBvdXRwdXQgdGhlIGZsb2F0aW5nLXplcm8gY29uc3RhbnRzCisJdXNpbmcge2YsZH1jb25zdDBfcnR4LgorCisJQSBwcm9ibGVtIHN0aWxsIHJlbWFpbnMsIHdoaWNoIGlzIHRoYXQgdGhlIFNlcXVlbnQgYW5kIHRoZQorCW90aGVyIG5zMzJrIGFzc2VtYmxlciBzeW50YXggcmVxdWlyZSBkaWZmZXJlbnQgCisKKwkqIHR5cGVjaGVjay5jICh1bmFyeV9jb21wbGV4X3ZhbHVlKTogVXNlIGNvcnJlY3QgZGF0YXR5cGUgZm9yCisJY29tcG91bmQtZXhwcnMuCisKKwkqIGdlbiouYyAobWFpbik6IFVzZSBvYnN0YWNrX2luaXQgaW5zdGVhZCBvZiBvYnN0YWNrX2JlZ2luLgorCisJKiB2YXgubWQ6IGRlZmluZV9wZWVwaG9sZSBmb3IgIGFuZGwzIHgseSx6OyBleHR6diB6LC4uLi4segorCisJKiBtNjhrLm1kICh0c3RzaSk6IFVzZSBjbXB3IGluc3RlYWQgb2YgY21wbCB0byB0ZXN0IGFkZHIgcmVnLgorCisJKiB0bS1tNjhrLmg6IEJ1Z3MgZm9yIDY4MDAwIHdoZW4gZnJhbWUgc2l6ZSBpcyBvdmVyIDY0ay4KKwlGb3IgRlVOQ1RJT05fUFJPTE9HVUUsIGp1c3Qgc3VidHJhY3QgZnJvbSBzcCBpbnN0ZWFkIG9mIGZwLgorCUZvciBGVU5DVElPTl9FUElMT0dVRSwgbXVzdCBwdXQgdGhlIHNpemUgaW50byBhMCBhbmQgdGhlbgorCWFsbCBpbnNucyBtdXN0IGJlIGluZGV4ZWQgYnkgYTAuICBBbmQgZG8gdGhpcyBldmVuIG9uIDY4MDIwLgorCisJKiB0bS1pc2k2OC5oOiBTaW1pbGFyIGNoYW5nZXMuCisJKiB0bS1uZXdzODAwLmgsIHRtLWhwOWszMjAuaDogU2ltaWxhciBjaGFuZ2VzLgorCitXZWQgSmFuIDIwIDA0OjM4OjIxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMpCisKKwkqIGNjY3AuYyAoZXJyb3Jfd2l0aF9saW5lKTogTmV3IGZ1bmN0aW9uLgorCVVzZSBpdCB0byByZXBvcnQgdGhlICJ1bnRlcm1pbmF0ZWQgd2hhdGV2ZXIiIGVycm9ycy4KKworCSogdHlwZWNoZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogUmVjdXJzaXZlIGNhbGwgaGFkIG1pc3NpbmcgYXJnLgorCisJKiBtNjhrLm1kIChtb3ZoaSk6IElmIE1PVE9ST0xBLCB0aGUgaW5zbiB0aGF0IGZldGNoZXMgZnJvbSBhCisJY2FzZS1kaXNwYXRjaCB0YWJsZSBub3cgZGVmaW5lcyB0aGUgTEkgbGFiZWwgYXMgLisyLgorCSogdG0tbmV3czgwMC5lbCwgdG0taHA5azMyMC5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOgorCURvbid0IHN1YnRyYWN0IDIgd2hlbiBvdXRwdXR0aW5nIHRoZSBhZGRyZXNzIGluIHRoYXQgaW5zbi4KKworVHVlIEphbiAxOSAwMDowMjozMyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzKQorCisJKiBjc2UuYyAoY3NlX2Jhc2ljX2Jsb2NrKTogQWJvcnQgaWYgbW9yZSBxdHlzIHdlcmUgdXNlZCB0aGFuIGFsbG9jYXRlZC4KKworTW9uIEphbiAxOCAwNDo0NDoyOCAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzKQorCisJKiBjY2NwLmMgKHNwZWNpYWxfc3ltYm9sKTogdG1fbW9uIGlzIG9yaWdpbi0wLCBub3Qgb3JpZ2luLTEuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9hc21faW5zbik6IElmICVMRVRURVIgd2l0aCBubyBkaWdpdHMsCisJcGFzcyBudWxsIHBvaW50ZXIgYXMgdGhlIG9wZXJhbmQuCisKKwkqIG91dHB1dC1tNjhrLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogR2V0IHJpZCBvZiAlZS4KKworCSogc3RtdC5jIChmaXh1cF9tZW1vcnlfc3VicmVnKTogQ29udmVydCAoU1VCUkVHIChNRU0gYSkpIHRvIChNRU0gYScpLgorCSogc3RtdC5jIChmaXh1cF92YXJfcmVmXzEpOiBVc2UgdGhhdCBmbiBmb3Igb3BlcmFuZHMgb2YKKwlTSUdOX0VYVFJBQ1QgYW5kIFpFUk9fRVhUUkFDVCwgc2luY2UgKFNVQlJFRzpTSSAoUkVHOlFJLi4uKSkKKwljb3VsZCBoYXZlIHR1cm5lZCBpbnRvIChTVUJSRUc6U0kgKE1FTTpRSS4uLikpLCB3aGljaCBpcyB1bnNhZmUuCisKKwkqIHJ0bC5jIChkZWJ1Z19ydHgpOiBQcmludCBhbiBydHggb24gc3RkZXJyLCBmb3IgZGVidWdnaW5nLgorCitTdW4gSmFuIDE3IDA0OjM3OjIwIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMpCisKKwkqIGdjYy5jOiBvcHRpb25zIC1NKiB0cmVhdGVkIGxpa2UgLU0uCisKKwkqIHN0bXQuYyAocHVzaGNhc2UpOiBEbyBub3RoaW5nIGlmIHRoZSBjYXNlIGluZGV4IGhhcyBlcnJvcl9tYXJrIHR5cGUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IERvbid0IHVzZSBxdWV1ZSBmb3IgcG9zdC1pbmMgb24gbWVtb3J5CisJaWYgdGhlIGFkZCBpbnNuIHJlcXVpcmVzIHJlZ2lzdGVyIGFyZ3MuICAoQmV0dGVyIGNvZGUgZm9yIFJJU0NzLikKKworU2F0IEphbiAxNiAwMjoxMDoyMiAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzKQorCisJKiBuczMyay5tZDogQ2hhbmdlIHJlZ2lzdGVyX29wZXJhbmQgdG8gZ2VuZXJhbF9vcGVyYW5kLgorCSogbnMzMmsubWQgKHVkaXZtb2RkaXNpNCk6IFVzZSBtYXRjaF9kdXAgd2hlcmUgcmVxdWlyZWQuCisJQ29tbWVudCBpdCBvdXQgYmVjYXVzZSBpdCBjYW4ndCBhY2NlcHQgdHdvIGluZGVwZW5kZW50IG91dHB1dCBhcmdzLgorCitGcmkgSmFuIDE1IDAwOjAyOjM1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMpCisKKwkqIHRvcGxldi5jOiBJbmNsdWRlIHN5cy90aW1lLmggb25seSBmb3IgQlNELiAgRm9yIFVTRywgdXNlIHRpbWUuaC4KKwlUaGlzIGlzIGNvcnJlY3QgZm9yIEhQVVg7IGRvbid0IGtub3cgYWJvdXQgb3RoZXJzLgorCisJKiBnY2MuYyAoZXhlY3V0ZSk6IEVsaW1pbmF0ZSBgdW5pb24gd2FpdCcuICBNYWtlIGBzdGF0dXMnIGFuIGludC4KKwkqIGdjYy5jIChleGVjdXRlKSBbVVNHXTogVXNlIGZvcmsgaW5zdGVhZCBvZiB2Zm9yay4KKworCSogZmluYWwuYyAob3V0cHV0X3NvdXJjZV9saW5lKTogVXNlIEFTTV9PVVRQVVRfU09VUkNFX3tGSUxFTkFNRSxMSU5FfQorCWlmIHRoZXkgYXJlIGRlZmluZWQuCisKKwkqIHRtLWhwOWszMjAuaDogTmV3IG5hbWUgZm9yIHRtLWhwdXguaC4KKwkqIHRtLWhwOWszMjAuaCAoQVNNX09VVFBVVF9MT0NBTCk6IEFkZCAzcmQgYXJnIHRvIGBsY29tbScgc3RhdGVtZW50cy4KKwkqIHRtLWhwOWszMjAuaCAoQVNNX09VVFBVVF97RE9VQkxFLEZMT0FUfSk6IFVzZSBgZG91YmxlJyBhbmQgYGZsb2F0Jy4KKwkqIHRtLWhwOWszMjAuaCAoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IERvbid0IHNhdmUgYW55IDY4ODgxIHJlZ3MuCisJKiB0bS1ocDlrMzIwLmggKENQUF9QUkVERUZJTkVTKTogZGlmZmVyZW50IG5hbWVzIGRlZmluZWQuCisJKiB0bS1ocDlrMzIwLmggKEhQVVhfQVNNLCBOT19EQlhfRk9STUFULCBBU01fU1BFQyk6IGRlZmluZSB0aGVzZS4KKwkqIHRtLWhwOWszMjAuaCAoQVNNX09VVFBVVF9PUENPREUpOiBDb252ZXJ0IGBmdHN0JyB0byBgZnRlc3QnLgorCSogdG0taHA5azMyMC5oOiBEZWZpbmUgQVNNX09VVFBVVF9TT1VSQ0Vfe0ZJTEVOQU1FLExJTkV9LgorCisJKiBtNjhrLm1kOiBSZW5hbWUgYGhwdXgnIGNvbmRpdGlvbmFscyB0byBgSFBVWF9BU00nLgorCSogbTY4ay5tZDogUmV2ZXJzZSBgZmNtcCcgYXJncyBpZiBIUFVYX0FTTS4KKworCSogY2NjcC5jIChwcmludF9kZXBzKTogMiBtZWFucyBnaXZlIGFsbCBmaWxlcywgMSBtZWFucyBvbmx5IHVzZXIgZmlsZXMuCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBTdXBwb3J0IHRoYXQuCisJKiBjY2NwLmMgKG1haW4pOiAtTU0gc2V0cyAxLCAtTSBhbG9uZSBzZXRzIDIuCisJKiBjY2NwLmMgKG1haW4pOiBHaXZlIGZhdGFsIGVycm9yIGlmIEkvTyBlcnJvciBpbiB3cml0aW5nLgorCisJKiB0b3BsZXYuYyAoZmF0YWxfaW9fZXJyb3IpOiBSZXBvcnQgSS9PIGVycm9yIG9uIGdpdmVuIGZpbGVuYW1lLAorCWFuZCBleGl0LgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogRGV0ZWN0IGVycm9yIHdyaXRpbmcgYXNtX291dF9maWxlLgorCUFsd2F5cyBwdXQgYXNtIGZpbGUncyBuYW1lIGluIGFzbV9maWxlX25hbWUgZm9yIGVyciBtc2cuCisJKiBzeW1vdXQuYyAoc3ltb3V0X2ZpbmlzaCk6IERldGVjdCBlcnJvciB3cml0aW5nIHN5bWZpbGUuCisJKiBzeW1vdXQuYyAoc3ltb3V0X2luaXQpOiBTYXZlIGZpbGVuYW1lIGluIHN5bWZpbGVfbmFtZSBmb3IgZXJyIG1zZy4KKworCSogZ2VuKi5jOiBSZXR1cm4gMSBpZiBmZXJyb3IgKHN0ZG91dCktLWluIGNhc2UgZGlzayBpcyBmdWxsLgorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IERvbid0IGNyYXNoIGlmIDFzdCBydHgKKwlpbiBhIFBBUkFMTEVMIGlzIG5vdCBhIFNFVC4KKworCSogdG0tbTY4ay5oLCB0bS1uZXdzODAwLmggKFBSSU5UX09QRVJBTkQpLiAgRWxpbWluYXRlIGNvZGUgYCVlJy4KKwkqIG02OGsubWQ6IENoYW5nZSBgJWUnIHRvIGBlJyBldmVyeXdoZXJlLgorCSogdG0taHB1eC5oIChBU01fT1VUUFVUX09QQ09ERSk6IE91dHB1dCBgbW92ZScgYXMgYG1vdicuCisKKwkqIHRtLW02OGsuaCwgdG0tbmV3czgwMC5oLCB0bS1ocHV4LmggKFBSSU5UX09QRVJBTkQpOgorCU5ldyBjb2RlIGAlIScgaXMgb3V0cHV0IGFzIHRoZSBuYW1lIGZvciB0aGUgY2MgcmVnaXN0ZXIuCisJKiBtNjhrLm1kIChpbnNucyB0aGF0IHVzZSBhbmRpIHRvIGNjcik6IFVzZSBgJSEnIHRvIGF2b2lkCisJY29uZGl0aW9uYWxzLgorCisJKiBjc2UuYzogUmVjb3JkIGluIHF0eV9jb25zdF9pbnNuIHRoZSBpbnNuIHRoYXQgc3RvcmVkIHRoZQorCWNvbnN0YW50IHZhbHVlIG9mIGEgcXR5LiAgV2hlbiBtYWtpbmcgYSBSRUdfV0FTXzAgbm90ZSwKKwlzdG9yZSBpbiBpdCB0aGUgaW5zbiB0aGF0IGVzdGFibGlzaGVkIHRoZSB2YWx1ZSAwLgorCisJKiB2YXgubWQgKG1vdnNpKTogV2hlbiBjaGVja2luZyBhIFJFR19XQVNfMCBub3RlLAorCXZlcmlmeSB0aGF0IHRoZSBpbnNuIGl0IHBvaW50cyB0byBoYXNuJ3QgYmVlbiBkZWxldGVkIG9yIG1hZGUgYSBOT1RFLgorCitUaHUgSmFuIDE0IDAwOjAxOjM1IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZnJvc3RlZC1mbGFrZXMpCisKKwkqIHRvcGxldi5jOiBFbGltaW5hdGUgZXJyb3Jfd2l0aF9saW5lIGFuZCB3YXJuaW5nX3dpdGhfbGluZS4KKwkqIHBhcnNlLnksIGRlY2wuYzogQ2hhbmdlIHJlbWFpbmluZyBjYWxscyB0byB0aG9zZSB0d28uCisKKwkqIHRyZWUuYyAoZ2V0X3Vud2lkZW5lZCwgZ2V0X25hcnJvd2VyKTogVG8gc2VlIGlmIGEgQ09NUE9ORU5UX1JFRgorCWlzIHVuc2lnbmVkLCBsb29rIGF0IHRoZSBGSUVMRF9ERUNMLCBub3QgYXQgdGhlIENPTVBPTkVOVF9SRUYuCisKKwkqIHJ0bC5jIChwcmludF9ydHgpOiBQcmludCAvdiBmb3IgdGhlIGB2b2xhdGlsJyBiaXQuCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50IGV4cGFuZF9leHByKTogSWYgaGFuZGxpbmcgYSBDT01QT05FTlRfUkVGLAorCW5vdGUgd2hldGhlciBpdCBpcyB2b2xhdGlsZS4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogYSBjYWxsIHRvIHNwbGl0X3RyZWUgbWlzc2VkIGFuIGFyZ3VtZW50LgorCisJKiBmbG93LmMgKHZvbGF0aWxlX3JlZnNfcCk6IFNjYW4gYW4gcnR4IGZvciB2b2xhdGlsZSBtZW0gcmVmcy4KKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IFJlY29yZCBpbiBJTlNOX1ZPTEFUSUxFIHdoaWNoIGluc25zCisJaGF2ZSBhbnkgdm9sYXRpbGUgbWVtIHJlZnMuCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogQWx3YXlzIG1hcmsgYW4gaW5zbiB3aXRoIHZvbGF0aWxlIG1lbSByZWZzLgorCUFsd2F5cyBwYXNzIElOU04gYXMgYW4gYXJnLiAgTmV3IGFyZyBGSU5BTCBub3cgc2F5cyB3aGV0aGVyCisJdGhpcyBpcyB0aGUgbGFzdCB0aW1lIHNjYW5uaW5nLgorCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBEb24ndCBkZWxldGUgaW5zbnMgd2l0aCB2b2xhdGlsZSBtZW0gcmVmcy4KKworCSogZmxvdy5jOiBSZW1vdmUgYWxsIHJlZnMgdG8gYG9iZXlfcmVnZGVjbHMnLgorCUNhbGxpbmcgdGhpcyB3aXRoIC1ub3JlZyBqdXN0IGRvZXNuJ3QgaGVscCAtVy4KKworV2VkIEphbiAxMyAwMToxMzowNyAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzKQorCisJKiBkZWNsLmMgKGZpbmlzaF9kZWNsKTogRXJyb3IgaWYgYXV0byB2YXIncyBzaXplIGlzbid0IGtub3duLgorCUNoYW5nZSB0eXBlIHRvIGVycm9yX21hcmtfbm9kZSB0byBhdm9pZCBjcmFzaCBpZiB0aGUgdmFyCisJaXMgdXNlZCBpbiBhbiBleHByZXNzaW9uLCBzaW5jZSBpdCBoYXMgbm8gREVDTF9SVEwuCisKKwkqIG91dHB1dC1tNjhrLmMgKG91dHB1dF9tb3ZlX2NvbnN0X3NpbmdsZSk6ICUgLT4gJSUgZm9yIHNwcmludGYuCisKKwkqIHBhcnNlLnkgKHl5bGV4KTogU3RvcmUgdG9rZW5fYnVmZmVyIHByb3Blcmx5IGFmdGVyIGVsbGlwc2lzLgorCisJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNhbGwgbGF5b3V0X2RlY2wKKwlmb3IgRlVOQ1RJT05fREVDTCBvciBUWVBFX0RFQ0wuCisKKwkqIHRvcGxldi5jICh3YXJuaW5nX3dpdGhfZGVjbCk6IE5ldyB3YXJuaW5nIGZ1bmN0aW9uIHdpdGggZGVjbCBhcyBhcmcuCisJKiAoZXJyb3Jfd2l0aF9kZWNsKTogc2ltaWxhci4KKworCSogZGVjbC5jOiBSZXBsYWNlIG1vc3QgYHl5bGluZXJyb3InIGNhbGxzIHdpdGggYGVycm9yX3dpdGhfZGVjbCcuCisKKwkqIGRlY2wuYyAoYnVpbGRfc3RydWN0KTogUmVmb3JtIGNvZGUgdG8gZGV0ZWN0IGVycm9uZW91cyBiaXQtZmllbGRzLgorCUFsbCBzdWNoIGVycm9ycyBhcmUgbm93IGRldGVjdGVkIGhlcmUuCisJUHJvbW90ZSBiaXQtZmllbGRzIHRvIGludCBpZiBhcHByb3ByaWF0ZS4KKwlJZiB0cmFkaXRpb25hbCwgbWFrZSBhbGwgaW50IGJpdC1maWVsZHMgdW5zaWduZWQuCisJU2V0IERFQ0xfQUxJR04gZm9yIG1lbWJlcnMgdGhhdCBhcmUgbm90IGJpdC1maWVsZHMuCisKKwkqIGRlY2wuYyAoZ3Jva2ZpZWxkKTogRG9uJ3Qgc2V0IERFQ0xfQUxJR04gaGVyZS4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wpOiBEb24ndCBwcm9tb3RlIHRoZSB0eXBlIG9mIGEgYml0LWZpZWxkLgorCVVzZSBUUkVFX1BBQ0tFRCB0byBkaXN0aW5ndWlzaCBhIGJpdC1maWVsZC4KKwlEb24ndCBjaGVjayB0aGUgd2lkdGggYmVjYXVzZSBidWlsZF9zdHJ1Y3QgZGlkIHRoYXQuCisKKwkqIG02OGsubWQgKGNtcG0pOiBSZWplY3QgaWYgZWl0aGVyIG9wZXJhbmQgKGFkZHJlc3MpIGlzIGEgY29uc3RhbnQuCisKK1R1ZSBKYW4gMTIgMTU6MTE6MjAgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcykKKworCSogY3NlLmMgKGNhbm9uX3JlZyk6IE5ldmVyIHJlcGxhY2UgQU5ZIGhhcmQgcmVnIGZyb20gcmVnX3J0eAorCWJlY2F1c2UgdGhhdCBjb3VsZCBhbHRlciB0aGUgbWFjaGluZSBtb2RlLgorCisJKiB0bS1uZXdzODAwLmg6IFJlZGVmaW5lIElORElSRUNUQUJMRV8xX0FERFJFU1Mgb25seSBpZiBNT1RPUk9MQS4KKworTW9uIEphbiAxMSAxMzoxNTo0NSAxOTg4ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGZyb3N0ZWQtZmxha2VzKQorCisJKiBqdW1wLmMgKGZvbGxvd19qdW1wcyk6IElmIHdlIGZpbmQgYSBjeWNsZSwgbWFrZSBpdCBhIGp1bXAgdG8gc2VsZi4KKworCSogY3NlLmMgKHByZWRlY2lkZV9sb29wX2VudHJ5KTogR2l2ZSB1cCBpZiBjaGFzZSBtb3JlIHRoYW4gMTAganVtcHMuCisKK1N1biBKYW4gMTAgMTQ6NTI6NDIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBmcm9zdGVkLWZsYWtlcykKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBiYXNpY19ibG9ja19uZWVkcyAobmV3IHZlY3RvcikgZ2V0cyAxCisJZm9yIGVhY2ggYmFzaWMgYmxvY2sgdGhhdCBuZWVkcyBhIHJlbG9hZC4KKwkqIHJlbG9hZDEuYyAoc3BpbGxfaGFyZF9yZWcpOiBEb24ndCBzcGlsbCBwc2V1ZG9zIHRoYXQgYXJlCisJY29uZmluZWQgdG8gYSBiYXNpYyBibG9jayB3aGljaCBoYXMgbm8gbmVlZCBmb3IgYW55IHJlbG9hZHMuCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEVhY2ggY3ljbGUgdGhhdCBhbnkgZWxlbWVudCBvZiBiYXNpY19ibG9ja19uZWVkcworCWNoYW5nZXMgZnJvbSAwIHRvIDEsIG11c3QgcmUtc3BpbGwgYWxsIHByZXZpb3VzbHkgc3BpbGxlZCByZWdzLgorCisJKiByZWdjbGFzcy5jIChyZWNvcmRfYWRkcmVzc19yZWdzKToKKwlTa2lwIHRoZSBjaGFyZ2luZyBvZiBJQ09TVCBpZiBpdCBpcyAwLgorCisJKiBmbGFncy5oLCB0b3BsZXYuYzogTmV3IGZsYWcgLWZ2b2xhdGlsZS4KKwkqIHR5cGVjaGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBJZiBmbGFnX3ZvbGF0aWxlLAorCWV2ZXJ5IElORElSRUNUX1JFRiBpcyBtYXJrZWQgd2l0aCBUUkVFX1RISVNfVk9MQVRJTEUuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFRlc3QgaW4gVFJVVEhfTk9UX0VYUFIgY2FzZSB3YXMgYmFja3dhcmQuCisJQWxzbyByZXN1bHQgdHlwZSBpcyBhbHdheXMgYGludCcuCisKK1NhdCBKYW4gIDkgMDQ6MTY6MTEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCByaWNlLWtyaXNwaWVzKQorCisJKiBmbGFncy5oIChmbGFnX3RyYWRpdGlvbmFsKTogTmV3IGZsYWcuCisJKiB0b3BsZXYuYzogcmVjb2duaXplIC1mdHJhZGl0aW9uYWwgYW5kIC10cmFkaXRpb25hbC4KKwkqIHBhcnNlLnkgKHl5bGV4KTogSWYgZmxhZ190cmFkaXRpb25hbCwgZG9uJ3QgcmVjb2duaXplCisJYHNpZ25lZCcsIGBjb25zdCcgb3IgYHZvbGF0aWxlJy4KKworCSogZGVjbC5jIChwdXNoZGVjbCk6IElmIGZsYWdfdHJhZGl0aW9uYWwsIGFueSBleHRlcm4gZGVjbAorCXRha2VzIGVmZmVjdCBhdCB0b3AgbGV2ZWwuCisKKwkqIHRyZWUuYyAobHZhbHVlX29yX2Vsc2UpOiBOZXcgMm5kIGFyZyBmb3IgdXNlIGluIGVycm9yIG1lc3NhZ2UuCisJKiB0eXBlY2hlY2suYzogQWxsIGNhbGxlcnMgcGFzcyAybmQgYXJnLgorCisJKiBnbG9iYWwtYWxsb2MuYzogYWxsb2Nub19wcmVmZXJyZWRfcmVnIGNhbiBzcGVjaWZ5IGEgcHJlZmVycmVkCisJaGFyZCByZWcgZm9yIGVhY2ggYWxsb2Nuby4gIElmIHNvLCB0cnkgaXQgZmlyc3QgKG5ldyBjYWxsIHRvIGZpbmRfcmVnKS4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGZpbmRfcmVnKTogTmV3IGFyZyBQUkVGUkVHIHNwZWNpZmllcyByZWcgdG8gdHJ5CisJZmlyc3QuCisKKwkqIGRlY2wuYyAoYnVpbGRfc3RydWN0KTogaWYgOjAgYml0IGZpZWxkIGF0IHRoZSBlbmQsIHJvdW5kIHRoZQorCXN0cnVjdHVyZSBzaXplIHRvIG11bHRpcGxlIG9mIEVNUFRZX0ZJRUxEX0JPVU5EQVJZLgorCisJKiBjc2UuYyAobWFrZV9yZWdzX2Vxdik6IFdhcyB0ZXN0aW5nIGZvciByZWdfbmV4dF9lcXZbbGFzdHJdID09IDAKKwlhbmQgc2hvdWxkIGJlID09IC0xLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBGaXggaW52YWxpZCBvcHRpbWl6YXRpb24gZGVsZXRpbmcKKwl0aGUgcHJldmlvdXMgc3RvcmUgaW50byBhIHBzZXVkby1yZWcgdGhhdCBmZWVkcyBhbiBpbnB1dC1yZWxvYWQuCisJSXQgaXMgbm90IHNhZmUgYmVjYXVzZSBhIGxhdGVyIGluc24gbWF5IGxvb2sgaW4gdGhlIHBzZXVkbydzIHN0YWNrCisJc2xvdCBmb3IgdGhlIHZhbHVlLiAgRGVsZXRlIHRoZSBzdG9yZSBvbmx5IGlmIHdlIGNhbiBlbGltaW5hdGUgdGhlCisJcHNldWRvIGVudGlyZWx5IG9yIGlmIHRoZSBjdXJyZW50IGluc24gc3RvcmVzIGEgbmV3IHZhbHVlIHRoZXJlLgorCUFsc28gdmVyaWZ5IHRoYXQgcmVsb2FkX2luW2pdIGlzIGEgUkVHLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBXaGVuIGRvaW5nIGFuIGlucHV0IHJlbG9hZCBmcm9tIGEKKwlwc2V1ZG8gdGhhdCB3YXMgc3RvcmVkIGJ5IHRoZSBwcmV2aW91cyBpbnNuIChub3QgYXMgYSByZWxvYWQpLAorCXJlZGlyZWN0IHRoZSBwcmV2aW91cyBpbnNuIGludG8gdGhlIHJlbG9hZCByZWdpc3RlciwgaWYgdGhpcyBsZXRzCisJdXMgZWxpbWluYXRlIHRoZSBwc2V1ZG8gZW50aXJlbHkuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IEluIGJvdGggb2YgdGhlIGFib3ZlIGNhc2VzLCBpdCdzCisJaW1wb3NzaWJsZSB0byBwcmV2ZW50IGEgc3RhY2sgc2xvdCBzaW5jZSBvbmUgd2FzIGFscmVhZHkgYXNzaWduZWQsCisJc28gZG9uJ3QgYWx0ZXIgcmVnX25fcmVmcy4gIEluc3RlYWQsIHNldCByZWdfcmVudW1iZXIgdG8gcmVjb3JkCisJdGhhdCB0aGlzIHBzZXVkbyBkaWQgZ2V0IGEgaGFyZCByZWcuCisKKwkqIHN0bXQuYzogU2V0IGB2b2xhdGlsJyBpbiBwc2V1ZG8tcmVncyBmb3IgdGhlIHVzZXIncyB2YXJpYWJsZXMuCisKKwkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBEbyBub3RoaW5nIGlmIGluc24gYWxyZWFkeSBkZWxldGVkLgorCisJKiB0bS1zdW57MiwzfS5oOiAjZGVmaW5lIFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZIDIKKwlmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFN1biBQQ0MuICBOb3RlIHRoYXQgNC4zIHZheCBQQ0MKKwlkb2VzIG5vdCB3YW50IHRoaXMuCisKKwkqIGZvbGQtY29uc3QuYzogUmVwbGFjZSB0cnVuY2F0ZV91bnNpZ25lZCB3aXRoIGZvcmNlX2ZpdF90eXBlCisJd2hpY2ggdHJ1bmNhdGVzIHVuc2lnbmVkIHR5cGVzIGFuZCBzaWduLWV4dGVuZHMgc2lnbmVkIHR5cGVzLgorCisJKiBleHByLmMgKGRvX2p1bXApOiBlbWl0X3F1ZXVlIGJlZm9yZSBvdXRwdXR0aW5nIHRoZSBqdW1wIGluc25zCisJdGhhdCB1c2UgdGhlIGNvbXBhcmlzb24uCisKKwkqIHN0bXQuYzogRXJyb3IgbWVzc2FnZSBmb3IgYW55IGdvdG8gdGhhdCBqdW1wcyBpbnRvIGEKKwliaW5kaW5nIGNvbnRvdXIgdGhhdCByZXN0b3JlcyBhIHN0YWNrIGxldmVsLgorCisJVFJFRV9QQUNLRUQgKGxhYmVsKSBtZWFucyBsYWJlbCB3YXMgZGVmaW5lZCBpbnNpZGUKKwlzdWNoIGEgYmluZGluZyBjb250b3VyIHRoYXQgaXMgbm93IGV4aXRlZC4gIFVzaW5nIHN1Y2ggYSBsYWJlbAorCWlzIGFuIGVycm9yLgorCisJVFJFRV9BRERSRVNTQUJMRSAobGFiZWwpIG1lYW5zIGxhYmVsIHdhcyB1c2VkIGZyb20gYSBwbGFjZQorCW91dHNpZGUgYWxsIHN1Y2ggYmluZGluZyBjb250b3Vycy4gIElmIHRoaXMgaXMgMSB3aGVuCisJVFJFRV9QQUNLRUQgaXMgc2V0IHRvIDEsIGl0IGlzIGFuIGVycm9yLgorCisJQW55IG90aGVyIGludmFsaWQgZ290byBtdXN0IGhhdmUgYSBmaXh1cC4gIGZpeHVwX2dvdG9zIGRldGVjdHMKKwlzdWNoIGludmFsaWQgZ290b3MuICBmaXh1cF9nb3RvcyB0YWtlcyBhIHNlY29uZCBhcmcsIHdoaWNoCisJaXMgdGhlIGZpcnN0IGluc24gb2YgdGhlIGNvbnRvdXIgbm93IGJlaW5nIGV4aXRlZC4KKworCSogR05VIEMgdmVyc2lvbiAxLjE3LgorDAorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogaW5kZW50ZWQtdGV4dAorbGVmdC1tYXJnaW46IDgKK2ZpbGwtY29sdW1uOiA3NgordmVyc2lvbi1jb250cm9sOiBuZXZlcgorRW5kOgpkaWZmIC0tZ2l0IGEvZ2NjL0NoYW5nZUxvZy4xIGIvZ2NjL0NoYW5nZUxvZy4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjI5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvQ2hhbmdlTG9nLjEKQEAgLTAsMCArMSw5MjA3IEBACitUaHUgTWF5IDEwIDIyOjQ4OjMxIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJ0bC5kZWYgKERFRklORV9ERUxBWSk6IENoYW5nZSBkZXNjcmlwdGlvbiB0byBkZXNjcmliZSBhbm51bGxpbmcuCisKKwkqIGdlbmF0dHIuYyAobWFpbik6IFdyaXRlIG91dCBkZWZpbml0aW9ucyBmb3IgYW5udWxsaW5nLCBpZiBwcmVzZW50LgorCisJKiBnZW5hdHRyYWIuYyAoZXhwYW5kX2RlbGF5cyk6IEJ1aWxkIGludGVybmFsIGF0dHJpYnV0ZXMgZm9yCisJd2hpY2ggaW5zbnMgY2FuIGJlIGFubnVsbGVkIGluIGEgZGVsYXkgc2xvdC4KKwkoZ2VuX2RlbGF5KTogVmFsaWRhdGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIERFRklORV9ERUxBWSBsaXN0LgorCSh3cml0ZV9lbGlnaWJsZV9kZWxheSk6IFdyaXRlIG91dCByb3V0aW5lcyBmb3IgdmFsaWRhdGluZyBhbm51bGxlZAorCWluc25zIGFzIHdlbGwgYXMgdGhvc2UgaW4gbm9ybWFsIGRlbGF5IHNsb3QuCisJKG1haW4pOiBDYWxsIHdyaXRlX2VsaWdpYmxlX2RlbGF5cyB0byBvdXRwdXQgYW5udWxsaW5nIGluZm9ybWF0aW9uLAorCWlmIGl0IGV4aXN0cyBmb3IgdGhpcyBtYWNoaW5lLgorCisJKiBvdXQtbTY4ay5jIChub3Rfc3Bfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIG02OGsubWQgKGFuZHNpMyk6IERvbid0IGFsbG93IHNwIGFzIG91cnB1dCB0byBhdm9pZCByZWxvYWQKKwlpbmVmZmljaWVuY3kuCisKKwkqIGNhbGxzLmMgKHN0cnVjdCBhcmdfZGF0YSk6IERlbGV0ZSBmaWVsZCBTVE9SRUQ7IGFkZCBmaWVsZHMKKwlQQVNTX09OX1NUQUNLIGFuZCBTQVZFX0FSRUEuCisJKHByZXBhcmVfY2FsbF9hZGRyZXNzKTogU3RhdGljIGNoYWluIHZhbHVlIGNhbid0IGhhdmUgUVVFVUVELgorCShleHBhbmRfY2FsbCk6IFJld29yayB0byBzdXBwb3J0IGFkZGl0aW9uYWwgY2FsbGluZyBzZXF1ZW5jZSBvcHRpb25zLgorCisJTWFqb3IgY2hhbmdlcyBpbmNsdWRlOgorCUNhbGwgRlVOQ1RJT05fQVJHX1BBU1NfQllfUkVGRVJFTkNFIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIAorCW9iamVjdCBzaG91bGQgYmUgcGFzc2VkIGJ5IGludmlzaWJsZSByZWZlcmVuY2UuCisJSGFuZGxlIGFyZ3VtZW50cyBwYXNzZWQgYm90aCBvbiBzdGFjayBhbmQgaW4gYSByZWdpc3RlcjsgdGhpcyBjYW4gYmUKKwl1c2VkIHRvIGFsbG93IGFyZ3VtZW50cyB0aGF0IGFyZSBoYXJkIHRvIGNvbXB1dGUgZGlyZWN0bHkgaW50bworCXJlZ2lzdGVycyB0byBiZSBwYXNzZWQuCisJU3VwcG9ydCBvcHRpb24gKEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUykgd2hlcmUgdGhlIGxhcmdlc3QgYW1vdW50CisJb2Ygc3RhY2sgZm9yIG91dGdvaW5nIGFyZ3VtZW50cyBpcyBjb21wdXRlciBhbmQgcHVzaGVkIGR1cmluZyB0aGUKKwlmdW5jdGlvbiBwcm9sb2d1ZS4gIFN0YWNrIHNwYWNlIHVzYWdlIGlzIHRyYWNrZWQgYW5kIGFueSBsb2NhdGlvbgorCXRoYXQgd291bGQgbmVlZCB0byBiZSByZXVzZWQgd2lsbCBiZSBzYXZlZCBhbmQgcmVzdG9yZWQuCisJSWYgcHJlYWxsb2NhdGluZyBhcmcgYmxvY2ssIGNvbXB1dGUgYWRkcmVzcyB3aGVyZSBlYWNoIGFyZyB3aWxsIGJlCisJcGxhY2VkIGFuZCBwYXNzIGl0IGFzIHRhcmdldCB0byBleHBhbmRfZXhwci4KKworCU90aGVyIGNoYW5nZXM6CisJVXNlIHZpcnR1YWwgcmVncyB0byBzZWUgaWYgc3RydWN0dXJlIHZhbHVlIGFkZHJlc3MgaXNuJ3Qgc3RhYmxlLgorCUlmIGlubGluZWQsIHJldHVybiBUQVJHRVQgaWYgVEFSR0VUIGFuZCBURU1QIGFyZSBlcXVpdmFsZW50LgorCVVOTkFNRURfQVJHU19JTl9SRUdJU1RFUlMgaXMgcmVkdW5kYW50IHdpdGggdGhlIE5BTUVEIHBhcmFtZXRlciB0bworCUZVTkNUSU9OX0FSRyBhbmQgaGFzIGJlZW4gZGVsZXRlZC4KKwlVc2UgdmlydHVhbF9vdXRnb2luZ19zdGFja19ydHggaW5zdGVhZCBvZiBGSVJTVF9QQVJNX0NBTExFUl9PRkZTRVQuCisJVXNlIGxvY2F0ZV9hbmRfcGFkX3Bhcm0gdG8gY29tcHV0ZSBhbnkgbmVlZGVkIHBhZGRpbmcgZm9yIGFyZ3VtZW50LgorCUlmIFJFR19QQVJNX1NUQUNLX1NQQUNFIGlzIGRlZmluZWQsIGFsbG9jYXRlIGJhY2tpbmcgc3RhY2sgbG9jYXRpb25zCisJZm9yIGFyZ3MgcGFzc2VkIGluIHJlZ2lzdGVyczsgdGhlc2UgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGVuZ3RoCisJb2Ygc3RhY2sgc3BhY2UgcmVxdWlyZWQgdW5sZXNzIE9VVEdPSU5HX1JFR19QQVJNX1NUQUNLX1NQQUNFIGlzIGFsc28KKwlkZWZpbmVkLgorCVdoZW4gcHJlY29tcHV0aW5nIHJlZ2lzdGVyIHBhcmFtZXRlcnMsIGNhbiBzdG9wIGNvbXB1dGF0aW9uIHdoZW4gd2UKKwlvYnRhaW4gYW55IHJ0eCwgbm90IG5lY2Vzc2FyaWx5IGEgcmVnaXN0ZXIuCisJTm8gbG9uZ2VyIG5lZWQgY29kZSB0byBwcm90ZWN0IGRhdGEgd3JpdHRlbiBiZWxvdyBib3R0b20gb2Ygc3RhY2s7CisJdGhpcyBpcyB0YWtlbiBjYXJlIG9mIGJ5IHByZWV4cGFuZGluZyBjYWxscyBpbiBhcmd1bWVudC4KKwl0YXJnZXRfZm9yX2FyZyBubyBsb25nZXIgbmVlZGVkOyBpdHMgZnVuY3Rpb24gaXMgcGVyZm9ybWVkIGJ5CisJc3RvcmVfb25lX2FyZy4KKwlBbHdheXMgY29weSBmdW5jdGlvbiByZXR1cm4gcmVzdWx0IHRvIG91ciB0YXJnZXQgc2luY2UgdGhleSBjYW5ub3QKKwlwb3NzaWJseSBiZSB0aGUgc2FtZS4KKwkodGFyZ2V0X2Zvcl9hcmcpOiBObyBsb25nZXIgdXNlZC4KKwkoc3RvcmVfb25lX2FyZyk6IFNhdmUgYW5kIHJlc3RvcmUgaW4tdXNlIGFyZ3VtZW50IGxpc3QgbG9jYXRpb24uCisJU3VwcG9ydCBhcmdzIHBhc3NlZCBib3RoIGluIHJlZ2lzdGVyIGFuZCBvbiBzdGFjay4KKwlObyBuZWVkIGZvciBleHBsaWNpdCBjb2RlIGZvciBwcmVhbGxvY2F0ZWQgYXJlYTsgbm93IHBhc3MgbG9jYXRpb24KKwlhcyB0YXJnZXQgdG8gZXhwYW5kX2V4cHI7IG9ubHkgY29weSBpZiByZXN1bHQgaW4gZGlmZmVyZW50IHBsYWNlLgorCVB1dCBzZXF1ZW5jZSBwb2ludCBhZnRlciBleHBhbmRpbmcgb25lIHZhbHVlLgorCisJKiBjc2UuYyAoc3RydWN0IHdyaXRlX2RhdGEpOiBBZGQgYml0IHRvIGluZGljYXRlIHN0YWNrIHBvaW50ZXIgY2hhbmdlZC4KKwkoY2Fub25faGFzaCk6IEFsbG93IHJlY29yZGluZyBvZiBzdGFjayBwb2ludGVyLgorCShjc2VfaW5zbik6IEluZGljYXRlIHN0YWNrIHBvaW50ZXIgaW52YWxpZGF0ZWQgYnkgc3Vicm91dGluZSBjYWxscy4KKwlQYXNzIHN0YWNrIHB1c2ggYW5kIHBvcCBvcGVyYXRpb25zIHRvIG5vdGVfbWVtX3dyaXR0ZW4uCisJUHJvY2VzcyBzdGFjayBwb2ludGVyIGFzc2lnbm1lbnQgYXMgbm9ybWFsIG9wZXJhdGlvbi4KKwlGaW5pc2ggY2hhbmdlIG9mIEFwcmlsIDd0aCB0aGF0IGV4Y2x1ZGVzIGFwIGFuZCBmcCBmcm9tIGJlaW5nIG1hcmtlZAorCWFzIGNsb2JiZXJlZCBieSBjYWxscy4gIEFsc28gZXhjbHVkZSBzcDsgaWYgaXQgaXMgY2xvYmJlcmVkIGJ5IGEKKwljYWxsLCBhbiBleHBsaWNpdCBDTE9CQkVSIHdpbGwgYmUgd3JpdHRlbi4KKwkobm90ZV9tZW1fd3JpdHRlbik6IExvb2sgZm9yIGFkanVzdG1lbnQgb2Ygc3RhY2sgcG9pbnRlci4KKwkoaW52YWxpZGF0ZV9mcm9tX2Nsb2JiZXJzKTogSW52YWxpZGF0ZSBzdGFjayBwb2ludGVyLCBpZiByZXF1aXJlZC4KKworCSogZW1pdC1ydGwuYyAoZ2VuX2lubGluZV9oZWFkZXJfcnR4KTogQWRkIGZpZWxkIGZvciBvdXRnb2luZyBhcmdzIHNpemUuCisJKGNvcHlfcnR4X2lmX3NoYXJlZCk6IENoZWNrIGZvciBhbnkgdmlydHVhbCByZWdpc3RlciBpbnN0ZWFkIG9mIGZyYW1lCisJb3IgYXJndW1lbnQgcG9pbnRlci4KKwkoaW5pdF9lbWl0KTogU3RhcnQgbm9ybWFsIHBzZXVkb3MgYWZ0ZXIgdmlydHVhbCBwc2V1ZG9zLgorCUNvcHkgdGhlIHVuaXF1ZSB2aXJ0dWFsIHJlZ3MgaW50byByZWdub19yZWdfcnR4LgorCShpbml0X2VtaXRfb25jZSk6IEluY29taW5nIGFuZCBvdXRnb2luZyBzdGF0aWMgY2hhaW4gY2FuIGJlIHRoZSBzYW1lOworCWlubGluaW5nIG9mIG5lc3RlZCBmdW5jdGlvbnMgd29uJ3QgbmVlZCB0aGUgZGlzdGluY3Rpb24uCisJQ3JlYXRlIHVuaXF1ZSBjb3BpZXMgb2YgdmlydHVhbCByZWdpc3RlcnMuCisKKwkqIGV4cGxvdy5jIChtZW1vcnlfYWRkcmVzcyk6IERvbid0IHdvcnJ5IGFib3V0IHJlZnMgdG8gZnAgb3IgYXA7CisJZm9yY2VfcmVnIGtub3dzIGhvdyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuCisJKGZpeF9sZXhpY2FsX2FkZHIpOiBNb3ZlZCB0byBmdW5jdGlvbi5jCisJKGFkanVzdF9zdGFjaywgYW50aV9hZGp1c3Rfc3RhY2spOiBEbyBub3RoaW5nIGZvciBhZGp1c3RtZW50IG9mIHplcm8uCisJKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBOZXcgZnVuY3Rpb24gY29waWVkIGZyb20KKwlleHBhbmRfYnVpbHRpbi4gIEhhbmRsZSBTVEFDS19QT0lOVEVSX09GRlNFVCB2aWEKKwl2aXJ0dWFsX3N0YWNrX2R5bmFtaWNfcnR4LiAgV2hlbiBTVEFDS19QT0lOVEVSX09GRlNFVCBpcyBkZWZpbmVkLAorCXBlcmZvcm0gYWxpZ25tZW50IGJ5IGFsd2F5cyByZXNlcnZpbmcgYSBtdWx0aXBsZSBvZiBTVEFDS19CT1VOREFSWQorCXN0YWNrIGJpdHMuICBUaGlzIGF2b2lkcyBjb25jZXJuIGFib3V0IHdoZXRoZXIgc3AgaXRzZWxmIG9yIHRoZSB0b3Agb2YKKwlzdGFjayBuZWVkcyB0byBiZSBhbGlnbmVkOyBpZiB3ZSBzdGFydCB3aXRoIGFuIGFsaWduZWQgc3RhY2ssIHdlIGtlZXAKKwlpdCBhbGlnbmVkLgorCShyb3VuZF9wdXNoKTogVXNlIEFERCBhbmQgQU5EIHJhdGhlciB0aGFuIERJViBhbmQgTVVMVC4KKworCSogZXhwci5jIChpbml0X2V4cHIpOiBJbml0aWFsaXplIHNvbWUgbW9yZSB2YXJzLgorCShwdXNoX2Jsb2NrKTogVXNlIHZpcnR1YWxfb3V0Z29pbmdfYXJnc19ydHggc28gZG9uJ3QgbmVlZAorCVNUQUNLX1BPSU5URVJfT0ZGU0VUIGhlcmUuCisJTWVyZ2UgZXh0cmEgYW5kIHNpemUgbW9yZSBlZmZpY2llbnRseTsgbm8gbmVlZCB0byBjYWxsIGZvcmNlX29wZXJhbmQKKwlzaW5jZSBtZW1vcnlfYWRkcmVzcyBpcyBjYWxsZWQuCisJKGVtaXRfcHVzaF9pbnNuKTogUGFzcyB0eXBlIGZvciBGVU5DVElPTl9BUkdfUEFERElORy4KKwlVc2UgUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgaW5zdGVhZCBvZiBGSVJTVF9QQVJNX0NBTExFUl9PRkZTRVQuCisJVG8gc2VlIGlmIG11c3QgY29weSBhZGRyZXNzLCBjaGVjayBpZiBpdCBpcyBhIHZpcnR1YWwgcmVnaXN0ZXIgdGhhdAorCXdpbGwgYmUgbWFwcGVkIHRvIHNwOyBvbmx5IG5lZWQgY2hlY2sgaWYgbm90IGFjY3VtdWxhdGluZyBzcGFjZQorCXNwYWNlIGZvciBvdXRnb2luZyBwYXJtcy4KKwlJZ25vcmUgRVhUUkEgaWYgYXJndW1lbnQgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQuCisJKGVtaXRfbGlicmFyeV9jYWxsKTogTWFqb3IgcmV3b3JrIHRvIHN1cHBvcnQgY2FsbGluZyBzZXF1ZW5jZXMgc2ltaWxhcgorCXRvIGV4cGFuZF9jYWxsIGluIGNhbGxzLmMsIGJ1dCBvbmx5IHN1cHBvcnQgYSB2ZXJ5IHNtYWxsIHN1YnNldCBvZgorCXRoZSBjb252ZW50aW9uczsgYWJvcnQgaWYgc29tZXRoaW5nIG91dHNpZGUgb3VyIHN1YnNldCBvY2N1cnMuCisJQWJvcnQgaWYgaW5jb3JyZWN0IG1vZGUgaXMgcGFzc2VkOyB3ZSBjYW4ndCBjb252ZXJ0IGhlcmUgc2luY2Ugd2UgZG9uJ3QKKwlrbm93IHRoZSBzaWduZWRuZXNzLgorCShzdG9yZV9maWVsZCk6IENoZWNrIGZvciB2aXJ0dWFsIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIGhhcmQgcmVnaXN0ZXJzCisJd2hlbiBzZWVpbmcgaWYgc3RhYmxlLgorCShzYWZlX2Zyb21fcCk6IExvY2F0aW9uIGluIG91dGdvaW5nIHN0YWNrIGFyZWEgaXMga25vd24gdG8gYmUgc2FmZS4KKwkoZXhwYW5kX2J1aWx0aW4sIEJVSUxUX0lOX0FMTE9DQSk6IFVzZSBhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlLgorCisJKiBleHByLmg6IERlZmluZSBjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSBhbmQKKwlsb2NhdGVfYW5kX3BhZF9wYXJtOyBkZWxldGUgZGVmaW5pdGlvbiBvZiBnZXRfc3RydWN0dXJlX3ZhbHVlX2FkZHIuCisJKEFSR1NfU0laRV9SVFgpOiBBbHdheXMgcmV0dXJuIGEgdmFsaWQgb3BlcmFuZC4KKwkoQVJHU19TSVpFX1RSRUUpOiBOZXcgbWFjcm8uCisJKEZVTkNUSU9OX0FSR19QQURESU5HKTogQWNjZXB0IE1PREUgYW5kIFRZUEUgbGlrZSBvdGhlcgorCUZVTkNUSU9OX0FSR18uLi4gbWFjcm9zLgorCShGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBQcm92aWRlIGRlZmF1bHQgZm9yIG5ldyBtYWNyby4KKwkoTVVTVF9QQVNTX0lOX1NUQUNLKTogTmV3IG1hY3JvLgorCShhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogTmV3IGZ1bmN0aW9uLgorCSogdG0tM2IxLmgsIHRtLTNiMWcuaCwgdG0tYXBvbGxvNjguaCwgdG0tY3Jkcy5oLCB0bS1tb3QzMzAwLmg6CisJQ2hhbmdlIGRlZmluaXRpb24gb2YgRlVOQ1RJT05fQVJHX1BBRERJTkcgdG8gdXNlIFRZUEUgaW5zdGVhZCBvZiBTSVpFLgorCisJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSk6IE5ldyB2YXIuCisJKGFyZ19wb2ludGVyX3NhdmVfYXJlYSwgdmlydHVhbHNfaW5zdGFudGlhdGVkKTogTGlrZXdpc2UuCisJKGludmFsaWRfc3RhY2tfc2xvdCk6IE5vIGxvbmdlciB1c2VkLgorCShwdXNoX2Z1bmN0aW9uX2NvbnRleHQsIHBvcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBhbmQgcmVzdG9yZQorCW91dGdvaW5nIGFyZ3Mgc2l6ZSBhbmQgYXJnIHBvaW50ZXIgc2F2ZSBhcmVhLgorCU5vIGxvbmdlciBzYXZlIG9yIHJlc3RvcmUgaW52YWxpZF9zdGFja19zbG90LgorCShwb3BfZnVuY3Rpb25fY29udGV4dCk6IFNldCB1cCB2YXJpYWJsZXMgd2hvc2UgdmFsdWUgaXMgY29uc3RhbnQKKwl0aHJvdWdob3V0IHJ0bCBnZW5lcmF0aW9uLgorCShnZXRfZnJhbWVfc2l6ZSk6IE5vIGxvbmdlciBhZGp1c3QgYnkgU1RBUlRJTkdfRlJBTUVfT0ZGU0VULgorCShhc3NpZ25fc3RhY2tfbG9jYWwpOiBVc2UgdmlydHVhbF9zdGFja192YXJzX3J0eCBpbnN0ZWFkIG9mIGZwCisJdW50aWwgdmlydHVhbHMgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZCwgdGhlbiB1c2UgZnAuCisJUmVtb3ZlIHJlZmVyZW5jZSB0byBvYnNvbGV0ZSBpbnZhbGlkX3N0YWNrX3Nsb3QuCisJQ2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgd2l0aCBzaXplID09IDAuCisJKGFzc2lnbl9vdXRlcl9zdGFja19sb2MpOiBVc2UgdmlydHVhbF9zdGFja192YXJzX3J0eCBpbnN0ZWFkIG9mIGZwLgorCVJlbW92ZSByZWZlcmVuY2VzIHRvIG9ic29sZXRlIGludmFsaWRfc3RhY2tfc2xvdC4KKwlQdXNoIHRvIG9ic3RhY2sgb2YgY29udGFpbmluZyBmdW5jdGlvbiB3aGVuIGFsbG9jYXRpbmcgcnR4LgorCShwdXRfdmFyX2ludG9fc3RhY2spOiBPbmx5IHN3aXRjaCBvYnN0YWNrcyBhcm91bmQgbWFraW5nIG9mCisJcXVldWUgZW50cnkuCisJUmVwbGFjZSBjYWxsIHRvIHBhcm1fc3RhY2tfbG9jIHdpdGggcmVmZXJlbmNlIHRvIGluZm8gaW4gcHJvcGVyCisJZnVuY3Rpb24uCisJKGZpeHVwX3N0YWNrXzEpOiBIYW5kbGUgYW55IHZpcnR1YWwgcmVnaXN0ZXIgaW5zdGVhZCBvZiBoYW5kbGluZworCWp1c3QgZnAuCisJKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVncywgaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEpOiBOZXcgZnVuY3Rpb25zLgorCSh1c2VfdmFyaWFibGUsIHVzZV92YXJpYWJsZV9hZnRlcik6IENoZWNrIGZvciB2aXJ0dWFsIHJlZ2lzdGVyCisJaW5zdGVhZCBvZiBjaGVja2luZyBhZ2FpbnN0IGFwIGFuZCBmcC4KKwkocGFybV9zdGFja19sb2MpOiBGdW5jdGlvbiBkZWxldGVkLgorCShhc3NpZ25fcGFybXMpOiBObyBsb25nZXIgbmVlZCBpbnRlcm5hbF9hcmdfcG9pbnRlci4KKwlBY2NlcHQgU0VDT05EX1RJTUUgYXJndW1lbnQgdGhhdCBzdXBwcmVzc2VzIHJ0bCBnZW5lcmF0aW9uIGFuZAorCWFzc2lnbm1lbnRzIHRvIERFQ0xfUlRMLiAgVXNlZCBieSBpbnRlZ3JhdGUuYyB0byByZWNvbXB1dGUgdmFycy4KKwlEb24ndCB1c2UgRklSU1RfUEFSTV9PRkZTRVQgaGVyZTsgdXNlIHZpcnR1YWxfaW5jb21pbmdfYXJnc19ydHguCisJUmVwbGFjZSB0ZXN0IGZvciBub25zdGFibGUgaW5jb21pbmcgYXJnIHBvaW50ZXIuCisJSWYgc3RydWN0dXJlIHZhbHVlIGFkZHJlc3MgaXMgdHJlYXRlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGFkZAorCWl0IGludG8gdGhlIGxpc3Qgb2YgYXJndW1lbnRzOyB0aGlzIG1lYW5zIHdlIGNhbiBoYXZlIGEgUkVTVUxUX0RFQ0wKKwlpbiB3aXRoIHRoZSBQQVJNX0RFQ0wncy4KKwlERUNMX09GRlNFVCBpcyBubyBsb25nZXIgbmVlZGVkIGJ5IGludGVncmF0ZS5jLgorCUhhbmRsZSBhcmdzIHBhc3NlZCBieSBpbnZpc2libGUgcmVmZXJlbmNlLgorCVN1cHBvcnQgbmV3IG1hY3JvLCBTRVRVUF9JTkNPTUlOR19WQVJBUkdTLCB0byBzYXZlIGFsbCByZWdpc3RlcnMgdXNlZAorCWZvciBhcmdzIGluY2x1ZGluZyBhbmQgYmV5b25kIHRob3NlIGZvciB0aGUgY3VycmVudCBhcmcuICBVc2VkIGZvcgorCW5vbi1BTlNJIHZhcmFyZ3MuCisJUGFzcyBsb2NhdGVfYW5kX3BhZF9wYXJtIGRhdGEgaXQgbmVlZHMgdG8gaGFuZGxlIHJlZy0+c3RhY2sgYm91bmRhcnkKKwlpZiByZWdpc3RlciBwYXJhbWV0ZXJzIGhhdmUgYXNzaWduZWQgc3RhY2sgc3BhY2UuCisJSWYgd2UgcmVjZWl2ZWQgdGhlIGZ1bmN0aW9uJ3MgaW5jb21pbmcgc3RydWN0dXJlIHBvaW50ZXIgYXMgYQorCW5vcm1hbCBhcmd1bWVudCwgdXBkYXRlIERFQ0xfUlRMIG9mIERFQ0xfUkVTVUxULgorCVJvdW5kIHRvdGFsIGFyZ3VtZW50IHNpemUgaWYgcmVxdWlyZWQ7IHNpbWlsYXJseSwgYWx3YXlzIHVzZSBhdAorCWxlYXN0IFJFR19QQVJNX1NUQUNLX1NQQUNFIGJ5dGVzIGlmIGRlZmluZWQuCisJKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBEbyBub3QgbmVlZCBQQVJNLgorCU1ham9yIHJld29yayB0byBkbyBtdWNoIG9mIHRoZSBqb2Igb2YgYWxpZ25pbmcgYW5kIHBhZGRpbmcgc3RhY2sKKwlsb2NhdGlvbi4gIE5vdyBhIHZvaWQgZnVuY3Rpb24gd2ljaCBpcyBwYXNzZWQgcG9pbnRlcnMgdG8gc3RydWN0IAorCWFyZ3Nfc2l6ZSB2YXJzIHRoYXQgYXJlIHNldCB0byB0aGUgYXJndW1lbnQgcG9zaXRpb24sIHNpemUsIGFuZAorCWluaXRpYWwgb2Zmc2V0LgorCUFjY2VwdCBmbGFnIGRlbm90aW5nIGlmIGEgcGFybSB3YXMgcGFzc2VkIGluIGEgcmVnaXN0ZXIgYW5kIGFsc28KKwl0aGUgY3VycmVudCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKwlJZiByZWdpc3RlciBwYXJhbWV0ZXJzIGFyZSBhc3NpZ25lZCBzdGFjayBsb2NhdGlvbnMgYW5kIHRoZXJlIGlzIGEKKwltaW5pbXVtIHJlcXVpcmVkIHNpemUgZm9yIHRoZSBhcmVhIGFzc2lnbmVkIHRvIHJlZ2lzdGVyIHBhcmFtZXRlcnMsCisJcGFkIHRoZSBzdGFjayBwb3NpdGlvbiB3aGVuIGEgcGFyYW1ldGVyIG5vdCBhc3NpZ25lZCB0byBhIHJlZ2lzdGVyCisJaXMgZW5jb3VudGVyZWQuCisJUmVtb3ZlIHJlZHVuZGFudCBjb2RlIGluIE1BWF9QQVJNX0JPVU5EQVJZIGNhc2UuCisJKGxvb2t1cF9zdGF0aWNfY2hhaW4pOiBVc2UgdmlydHVhbF9zdGFja192YXJzX3J0eCBpbnN0ZWFkIG9mIGZwLgorCShmaXhfbGV4aWNhbF9hZGRyKTogTW92ZSBmcm9tIGV4cGxvdy5jLgorCUlmIHJlZmVyZW5jaW5nIHZhcmlhYmxlIHRoYXQgbGl2ZXMgaW4gdGhlIGluY29taW5nIGFyZ3VtZW50IGFyZWEKKwlvZiBpdHMgcGFyZW50IGFuZCBhIHNlcGFyYXRlIGFwIGlzIHJlcXVpcmVkLCBhbGxvY2F0ZSBhIHNhdmUgYXJlYSBpbgorCXRoZSBwYXJlbnQgZm9yIGl0IGFuZCB1c2UgaXQgaGVyZS4gIElmIG5vIHNlcGFyYXRlIGFwIGlzIHJlcXVpcmUsCisJY29tcHV0ZSBvZmZzZXQgYmV0d2VlbiBhcCBhbmQgZnAuCisJKHRyYW1wb2xpbmVfYWRkcmVzcyk6IE5vIG5lZWQgdG8gcHVzaCBvYnN0YWNrcyBoZXJlLgorCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogSW5pdGlhbGl6ZSBuZXcgdmFyczsgZGVsZXRlIG9ic29sZXRlIHZhcnMuCisJKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IERvbid0IG5lZWQgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgaW5jb21pbmcKKwlzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MgaXMgcGFzc2VkIGFzIGhpZGRlbiBwYXJhbWV0ZXIgaGVyZTsgbm93IGRvbmUKKwljb21wbGV0ZWx5IGluIGFzc2lnbl9wYXJtcy4KKwkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IFNhdmUgYXAgaWYgYSBzYXZlIGFyZWEgd2FzIG1hZGUgZm9yIGl0LgorCVNldCBSRUdfRlVOQ1RJT05fVkFMVUVfUCB3aGVuIGNvcHlpbmcgYWRkcmVzcyBvZiByZXR1cm5lZAorCXN0cnVjdHVyZS4KKwlCZSBjb25zaXN0ZW50IGluIHVzZSBvZiBGVU5DVElPTl8uLi4gbWFjcm9zIHZzLiBoYXJkX2Z1bmN0aW9uX3ZhbHVlLgorCisJKiBmdW5jdGlvbi5oIChvdXRnb2luZ19hcmdzX3NpemUsIGFyZ19wb2ludGVyX3NhdmVfYXJlYSk6IE5ldyBmaWVsZHMuCisJKGludmFsaWRfc3RhY2tfc2xvdCk6IE9ic29sZXRlLCBkZWxldGVkLgorCisJKiBpbnRlZ3JhdGUuYzogTWFqb3IgcmV3b3JrIGFuZCBzaW1wbGlmaWNhdGlvbi4KKwlTcGxpdCB1cCB2YXJzIGludG8gdHdvIGNsYXNzZXMuICBUaG9zZSB1c2VkIGZvciBleHBhbmRfaW5saW5lX2Z1bmN0aW9uCisJYW5kIGNoaWxkcmVuIGFyZSBub3cgcGFydCBvZiBzdHJ1Y3QgaW5saW5lX3JlbWFwLiAgTW9zdCBvZiB0aGUgb3RoZXJzCisJYXJlIGZvciBzYXZlX2Zvcl9pbmxpbmUgYW5kIGl0cyBjaGlsZHJlbi4KKwkoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogVGhlIG9ubHkgdHlwZSBvZiBhcmd1bWVudHMgdGhhdCB3aWxsCisJY2F1c2UgdXMgdG8gcmVqZWN0IGlubGluaW5nIGFyZSB2YXJpYWJsZS1zaXplZCBhcmd1bWVudHM7IGFsc28KKwlyZWplY3QgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHZhcmlhYmxlLXNpemVkIG9iamVjdHMuCisJRm9yIG5vdywgZG9uJ3QgaW5saW5lIGEgbmVzdGVkIGZ1bmN0aW9uLiAgV2UnbGwgc3VwcG9ydCB0aGlzIHNob3J0bHkuCisJVXNlIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19wY2Nfc3RydWN0IGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGVzdC4KKwkoc2F2ZV9mb3JfaW5saW5lKTogTm8gbmVlZCB0byBzZXQgVFJFRV9WT0xBVElMRSBmb3IgcGFybXMuCisJU2F2ZSBvdXRnb2luZyBhcmdzIHNpemUgaW4gaGVhZGVyLgorCVVzZSB1bmlxdWUgY29weSBvZiB2aXJ0dWFsIHJlZyBydHgncy4KKwlIYW5kbGUgYW55IHJlcXVpcmVkIGZpeHVwcyBmb3IgSU5TTl9MSVNUIGZvcndhcmQtcmVmZXJlbmNlcy4KKwlEb24ndCBib3RoZXIgcmVzZXR0aW5nIGRlYWQgc3RhdGljIHZhcnMgd2hlbiB3ZSBhcmUgZG9uZS4KKwlOZWVkIG5vdCBzYXZlIGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUuCisJKGNvcHlfZm9yX2lubGluZSk6IEZpcnN0IGNvcHkgYWxsIGluc25zLCB0aGVuIGFsbCBSRUdfTk9URVMgdG8gYXZvaWQKKwlwcm9ibGVtcyB3aXRoIGZvcndhcmQgcmVmZXJlbmNlcy4KKwkoc3RydWN0IGlubGluZV9yZW1hcCk6IE1vdmUgYWxsIHByZXZpb3VzbHktc3RhdGljIHZhcnMgdXNlZCBieQorCWV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gYW5kIGNoaWxkcmVuIGludG8gdGhpcyBzdHJ1Y3R1cmUuICBUaGlzIGF2b2lkcworCXBvdGVudGlhbCBwcm9ibGVtcyBkdWUgdG8gcmVjdXJzaXZlIGNhbGxzIHRvIGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24uCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gYW5kIGNoaWxkcmVuKTogQWxsb2NhdGUgYSBzdHJ1Y3QgaW5saW5lX3JlbWFwCisJYW5kIHBhc3MgdG8gYWxsIGNoaWxkcmVuLgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogUmV3b3JrIHBhcmFtZXRlciBoYW5kbGluZyBieSBsb29raW5nIGF0CisJREVDTF9SVEwgYW5kIHVzaW5nIGl0IHRvIGRldGVybWluZSB3aGF0IHR5cGVzIG9mIG1hcHBpbmdzIG5lZWQgdG8gYmUKKwlkb25lLiAgU3VwcG9ydCBvYmplY3RzIHBhc3NlZCBieSBpbnZpc2libGUgcmVmZXJlbmNlLiAgUHV0IGFueQorCWNvbnN0YW50IG1lbW9yeSBhZGRyZXNzZXMgaW50byBjb25zdF9lcXVpdl9tYXAuICBwYXJtX21hcCBpcyBubyBsb25nZXIKKwl1c2VkLgorCUxpa2V3aXNlIGZvciB0aGUgcmV0dXJuIHZhbHVlOiBjb25zdWx0IERFQ0xfUlRMIChERUNMX1JFU1VMVCkpLgorCURvbid0IGFsbG9jYXRlIHNwYWNlIGZvciBjYWxsZWQgZnVuY3Rpb24ncyBmcmFtZSB1bnRpbCByZWZlcmVuY2VkLgorCU5vIGxvbmdlciBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGluc24gZm9sbG93aW5nIENBTEwuCisJSWdub3JlIFVTRSB3aG9zZSBhcmd1bWVudCBoYXMgUkVHX0ZVTkNUSU9OX1ZBTFVFX1AgdHJ1ZS4KKwlJZ25vcmUgc2V0dGluZyBmdW5jdGlvbiByZWdpc3RlciBpZiB3ZSBkb24ndCBoYXZlIGEgbWFwcGluZyBmb3IgaXQKKwkoZS5nLiwgd2UgYXJlIGlnbm9yaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwpLgorCUxvb2sgYXQgbmV3IFNFVF9TUkMgZm9yIGNvbnN0YW50IGVxdWl2YWxlbmNlcy4gIFNvbWUgbmV3IG9uZXMgbWF5CisJaGF2ZSByZXN1bHRlZCBmcm9tIGNvbnN0YW50IGZvbGRpbmcuCisJUGFzcyBib3RoIG5ldyBhbmQgb2xkIHJ0eCB0byB0cnlfY29uc3RhbnRzLgorCURpc2NhcmQgTk9URV9JTlNOX0RFTEVURUQgbm90ZXMuCisJQ29weSBpbnNucyBmaXJzdCwgdGhlbiBSRUdfTk9URVMsIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZm9yd2FyZCByZWZzLgorCShjb3B5X3Bhcm1fZGVjbHMpOiBDb21wdXRlIG5ldyBhZGRyZXNzIG9mIHBhcmFtZXRlciB1c2luZyB0aGUKKwljb25zdGFudCBlcXVpdmFsZW5jZSBtYXAsIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgcmVtYXBwaW5nIG9mCisJdGhlIGZyYW1lIGFuZCBhcmd1bWVudCBwb2ludGVyLgorCShjb3B5X2RlY2xfdHJlZSk6IExpa2V3aXNlLgorCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IEhhbmRsZSByZWZlcmVuY2VzIHRvIGZyYW1lIGFuZCBhcmd1bWVudAorCXBvaW50ZXJzIGJ5IGFsbG9jYXRpbmcgYSBzcGFjZSBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgYW5kCisJaW5jb21pbmcgYXJndW1lbnRzLCByZXNwZWN0aXZlbHksIGFuZCBzZXR0aW5nIGEgcHNldWRvIHRvIHBvaW50IHRvCisJdGhlIHN0YXJ0IG9mIGVhY2ggYXJlYS4gIFNldCB1cCBhbiBlcXVpdmFsZW5jZSBpbiBDT05TVF9FUVVJVl9NQVAKKwliZXR3ZWVuIGZwIG9yIGFwIGFuZCB0aGUgYWN0dWFsIGFkZHJlc3MuICBSZXR1cm4gdGhlIHBzZXVkby4KKwlEb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBwb3NzaWJpbGl0eSBvZiAoU1VCUkVHIChDT05TVF9JTlQpKSBzaW5jZQorCXdlIGFyZSBvbmx5IHJlcGxhY2luZyByZWdpc3RlciB3aXRoIG90aGVyIHJlZ2lzdGVycyBoZXJlLgorCU5vIGxvbmdlciBuZWVkIHRvIHNwZWNpYWwtY2FzZSBQTFVTIGFuZCBNRU07ICBzdWJzdF9jb25zdGFudHMgd2lsbCBkbworCXRoaXMgd29yay4KKwlVcGRhdGUgZGV0ZWN0aW9uIG9mIHNldHMgb2YgYXAgYW5kIGZwLgorCSh0cnlfY29uc3RhbnRzLCBzdWJzdF9jb25zdGFudHMpOiBBY2NlcHQgb2xkIGFuZCBuZXcgcnR4LiAgVGhleSB3aWxsCisJYmUgaXNvbW9ycGhpYywgd2l0aCBvbmx5IHJlZ2lzdGVyIG51bWJlcnMgY2hhbmdlZC4gIFVzZSBvbGQgcnR4IHRvCisJbG9vayB1cCByZWdpc3RlciBpbiBDT05TVF9FUVVJVl9NQVAgYW5kIG5ldyBydHggZm9yIHN1YnN0aXR1dGlvbi4KKwlDb3JyZWN0bHkgaGFuZGxlIFNVQlJFRyBvZiBDT05TVF9JTlQgYW5kIENPTlNUX0RPVUJMRS4KKwlGaXggdHlwb3MgaW4gaGFuZGxpbmcgb2YgUExVUy4KKwkoYWNjZXNzX3Bhcm1fbWFwLCBjb3B5X2FkZHJlc3MpOiBEZWxldGUgZnVuY3Rpb25zLgorCSh0cnlfZm9sZF9jYzApOiBIYW5kbGUgYm90aCBjb21wYXJlIGFuZCB0ZXN0LgorCShmb2xkX291dF9jbnN0X2NjMCk6IFJld29yayB0byBzaW1wbGlmeSBhbmQgcmVtb3ZlIGR1YmlvdXMgY2FzZXMuCisJKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGFzc2lnbl9wYXJtcyB0byBwZXJmb3JtIGFueSBuZWVkZWQKKwlzZXR1cHMuCisJTmVlZCBub3QgcmVzdG9yZSBwcmV0ZW5kIGFyZyBzaXplICh3aWxsIGJlIGNvbXB1dGVkIGJ5IGFzc2lnbl9wYXJtcykuCisJUmVzdG9yZSBvdXRnb2luZyBhcmd1bWVudCBzaXplLgorCisJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUpOiBOZXcgdmFyLgorCisJKiBydGwuaCAoT1VUR09JTkdfQVJHU19TSVpFKTogTmV3IGZpZWxkIGluIElOTElORV9IRUFERVIuCisJKFBSRVRFTkRfQVJHU19TSVpFKTogTm8gbG9uZ2VyIG5lZWRlZC4KKwkodmlydHVhbF8uLi4sIFZJUlRVQUxfLi4uKTogRGVmaW5lIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVycyBhbmQgcnR4LgorCisJKiBydGxhbmFsLmMgKHJ0eF9lcXVhbF9wKTogVXBkYXRlIGNvbW1lbnQgb24gdXNlIG9mCisJUkVHX0ZVTkNUSU9OX1ZBTFVFX1AuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2dvdG8pOiBKdXN0IHJlc3RvcmUgZnA7IG5vbi1sb2NhbCBnb3RvIGhhbmRsZXIKKwl3aWxsIHJlc3RvcmUgYXAgaWYgbmVlZGVkLgorCShleHBhbmRfcmV0dXJuKTogRG9uJ3QgdXNlIFNUQVJUSU5HX0ZSQU1FX09GRlNFVCBoZXJlLgorCShleHBhbmRfZW5kX2JpbmRpbmdzKTogQWRqdXN0IGZwIGluIG5vbmxvY2FsLWdvdG8gaGFuZGxlci4gIElmIG5lZWRlZCwKKwlyZWxvYWQgYXAgZnJvbSBpdHMgc2F2ZSBhcmVhIGluIHRoZSBmcmFtZTsgYWxsb2NhdGUgc2F2ZSBhcmVhIGlmIG5vbmUuCisJKGV4cGFuZF9kZWNsKTogVXNlIG5ldyBmdW5jdGlvbiBhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEluc3RhbnRpYXRlIHZpcnR1YWwgcmVnaXN0ZXJzLgorCUNsZWFyIHJ0eF9lcXVhbF9mdW5jdGlvbl92YWx1ZV9tYXR0ZXJzIGltbWVkaWF0ZWx5IGFmdGVyIHBvc3NpYmx5CisJc2F2aW5nIGN1cnJlbnQgcm91dGluZSBmb3IgaW5saW5pbmcuCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IERvbid0IHRyeSB0byBhbGxvY2F0ZSB2aXJ0dWFsCisJcmVnaXN0ZXJzICh3aGljaCBkb24ndCBleGlzdCBhbnkgbW9yZSkuCisKK1RodSBNYXkgMTAgMTM6NTk6MTEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKG1vZGVzX2VxdWl2X2Zvcl9jbGFzc19wKTogRG9uJ3QgY29tcGFyZSBIQVJEX1JFR05PX05SRUdTLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogU2ltcGxpZnkKKwkoc2lnbl9leHRlbmQ6TSAoc3VicmVnOk4gKGFzaGlmdHJ0Ok0gKHNpZ25fZXh0ZW5kOk0gKGFueTpOIC4uLikpKSkpLgorCisJKiBmaXhpbmNsdWRlczogVmVyaWZ5IHRoYXQgYSBsaW5rIGxlYWRzIGJhY2sgdG8gL3Vzci9pbmNsdWRlCisJYnkgY2hlY2tpbmcgbmFtZSBvZiBkaXIgaXQgYXJyaXZlcyBpbi4gIElmIHNvLCB1c2UgcmVzdCBvZiBkaXJuYW1lCisJYXMgdGFyZ2V0IGZvciBuZXcgbGluay4KKworCSogTWFrZWZpbGUuaW4gKHRtcGdudWxpYik6IFB1dCBkdW1teSBlbnRyeSBpbiBsb29wIHdpdGggTElCRlVOQ1NfRVhUUkEKKwlzbyBsb29wIGlzIG5ldmVyIG51bGwuICBUaGVuIGlnbm9yZSB0aGF0IGVudHJ5IHdoZW4gaXQgY29tZXMgdXAuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEFkZCBleHBsaWNpdCBzdWZmaXggdG8gYXJnIG9mIC1kdW1wYmFzZS4KKworVHVlIE1heSAgOCAxMzo1NDozNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLXVsdHJpeC5oOiBOZXcgZmlsZS4KKworTW9uIE1heSAgNyAxODo0Nzo0NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGkzODYubWQgKHRlc3QuLi4gcmVjb2duaXplcnMpOiBPdXRwdXQgc3ltYm9saWMgY29uc3RhbnQgZmlyc3QuCisKK1N1biBNYXkgIDYgMjI6NTE6MDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChmaXh1cF9tZW1vcnlfc3VicmVnKTogTWFrZSBhIHNlcXVlbmNlIGlmIC1mZm9yY2UtYWRkci4KKworCSogZml4aW5jbHVkZXM6IFdoZW4gZ29pbmcgdG8gZGlyZWN0b3J5IG9mIGxpbmsgbmFtZSwgZG9uJ3QgbG9zZSAgCisJaWYgbmFtZSBoYXMgbm8gZGlyZWN0b3J5LgorCU1vdmUgdGhlIGNvZGUgdG8gZml4IG5ldGluZXQvaXAuaDsgd2FzIGluIHRoZSBtaWRkbGUgb2Ygc29tZXRoaW5nLgorCisJKiBNYWtlZmlsZS5pbiAodG1wZ251bGliKTogVGVzdCBMSUJGVU5DU19FWFRSQSBmb3Igbm9uZW1wdHkuCisKK1N1biBNYXkgIDYgMDg6Mjk6MjcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKExJQkZVTkNTKTogUmVtb3ZlIGV4dHJhbmVvdXMgIlwiLgorCisJKiBNYWtlZmlsZS5pbiAoc3RhbXAtZ251bGliMik6IE1vdmUgIi0iIHRvIHByb3BlciBsaW5lLgorCisJKiBnbnVsaWIyLmMgKGNsZWFyX2NhY2hlKTogSWdub3JlIHJvdXRpbmUgdW5sZXNzIElOU05fQ0FDSEVfU0laRQorCWlzIGRlZmluZWQgKGF2b2lkcyBjcHAtZGV0ZWN0ZWQgZGl2aWRlLWJ5LXplcm8pLgorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wKTogRG9uJ3QgYmxvdyB1cCB3aGVuIHBhc3NlZCBhIG51bGwgdHJlZS4KKworCSogdmFyYXNtLmMgKGdldF9wb29sX3NpemUpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJuIGNvbnN0YW50IHBvb2wgc2l6ZS4KKworRnJpIE1heSAgNCAxNjoxMTo1NCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wKTogSWYgRVhQIGhhcyBzb21lIHJ0eCwganVzdCBjaGVjayBpdC4KKwlIYW5kbGUgVFJFRV9MSVNULCBSVExfRVhQUiwgYW5kIFdJVEhfQ0xFQU5VUF9FWFBSLgorCU5vdGUgdGhhdCBDQUxMIGNsb2JiZXJzIG1lbW9yeSBhbmQgaGFyZCByZWdpc3RlcnMuCisJTG9vayBhdCBlbmNsb3NlZCBvYmplY3QgZm9yIFNVQlJFRywgYnV0IFNVQlJFRyBvZiBhIGhhcmQgcmVnIGlzIHVuc2FmZS4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IE5vdyB0aGF0IHNhZmVfZnJvbV9wIGhhcyBiZWVuIGFwcGxpZWQKKwl0byB0aGUgdGFyZ2V0LCBuZWVkIG5vdCBhdm9pZCBoYXJkIHJlZ2lzdGVyIHRhcmdldHMuCisJQWJvcnQgaWYgY2FsbGVkIHdpdGggbmVpdGhlciBBUlJBWV9UWVBFIG9yIFJFQ09SRF9UWVBFLgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBIYW5kbGUgZ29hbCBvZiAocGx1cyAoc3ApIChjb25zdCkpLgorCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRik6IEluY2x1ZGUgaGFyZC1wYXJhbXMuCisKK0ZyaSBNYXkgIDQgMTU6MzM6MjIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoYWRkX3ByZWZpeCk6IE5ldyBhcmcgV0FSTi4gIFJlY29yZCBpbiBwcmVmaXhfbGlzdC4KKwkobWFpbik6IENhbGxzIGNoYW5nZWQuICBQYXNzIG5vbnplcm8gZm9yIC1CIHByZWZpeGVzLgorCUxhdGVyLCBjYWxsIHVudXNlZF9wcmVmaXhfd2FybmluZy4KKwkodW51c2VkX3ByZWZpeF93YXJuaW5nKTogV2FybiBhYm91dCBwcmVmaXhlcyBuZXZlciB1c2VkLgorCitUaHUgTWF5ICAzIDE2OjU2OjQzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogQWxpZ24gdGhlIGBhbGlnbicgbGluZSB3aXRoIHRoZSBvdGhlcnMuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBNYXhpbXVtIHNpemUgZm9yIGxvYWRpbmcgbWVtIHN0cnVjdAorCWludG8gcmVnIGNvbWVzIGZyb20gdGhlIG1vZGUgb2YgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZC4KKwlBbGlnbm1lbnQgaXMgbm8gcmVzdHJpY3Rpb24gaWYgaXQgbWF0Y2hlcyBCSUdHRVNUX0FMSUdOTUVOVC4KKwlBbHdheXMgZG8gdGhlIHJlYWwgd29yayBpbiBTSW1vZGUgaWYgY291bGRuJ3QgdXNlIE1FTS4KKwkoZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEhhbmRsZSAoc2lnbl9leHRlbmQ6TSAoc3VicmVnIChzaWduX2V4dHJhY3Q6TSkpKQorCW9uIGJpZy1lbmRpYW4gbWFjaGluZSBsaWtlIGNvcnJlc3BvbmRpbmcgemVyb19leHRlbmQgY2FzZS4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFVzZSBydGxfZXF1YWxfcCBpbnN0ZWFkIG9mID09IHdoZW4KKwl0ZXN0aW5nIGZvciBzb3VyY2VzIGFuZCBkZXN0aW5hdGlvbnMgdGhhdCBtYXRjaC4KKworCSogcHlyLm1kIChiaXR3IHJlY29nbml6ZXIpOiBTZXQgQ0NfTk9fT1ZFUkZMT1cuCisKK1RodSBNYXkgIDMgMTM6MDM6MDIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBDYW4gYWx3YXlzIHVzZSBvcmlnaW5hbAorCXRhcmdldCBpZiBzcGVjaWZpZWQuCisJSW4gIlggPyBBICsgQiA6IEEiIGNhc2UsIHVzZSBzYWZlX2Zyb21fcCB0byBzZWUgaWYgdGFyZ2V0IGNvbmZsaWN0cworCXdpdGggQi4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRG9uJ3QgcmV3cml0ZSAoc2V0IFJFRzAgUkVHMSkgaWYgUkVHMSBpcyBhIGhhcmQKKwlyZWdpc3RlciBldmVuIGlmIGlzIFJFRzAgY2hlYXBlci4KKworVGh1IE1heSAgMyAxMjowNDoxOSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSGFuZGxlIG11bHRpcGxlIHNpemUgZ3JvdXBzIGZvciBvbmUgY2xhc3MuCisKKwkqIHN0ZGFyZy5oOiBUeXBvIGluIGNvbmRpdGlvbmFsLgorCitXZWQgTWF5ICAyIDE2OjM0OjI1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tc3VuMy5oIChDQzFfU1BFQyk6IElnbm9yZSAtdGFyZ2V0LgorCShXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBEZWZpbmUgaXQuCisJKiB0bS1zcGFyYy5oIChDQzFfU1BFQyk6IElnbm9yZSAtdGFyZ2V0IGFuZCAtZGFsaWduLgorCShXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBEZWZpbmUgaXQuCisKK1dlZCBNYXkgIDIgMDk6Mzg6MzMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogQWx3YXlzIHJlcGxhY2UgcmVnaXN0ZXJzIHdpdGggb2xkZXN0IGVxdWl2YWxlbnQsCisJaW5jbHVkaW5nIHRoZSBjYXNlIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZS4KKworVHVlIE1heSAgMSAxNTo1NTo1MiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYjIuYyAoX19hZGRkaTMsIF9fc3ViZGkzKTogTmV3LCBzaW1wbGVyIGFsZ29yaXRobS4KKworVHVlIE1heSAgMSAxNDo0ODowMyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBNYWtlZmlsZS5pbjogSW5zZXJ0ICJlbHNlIHRydWU7IiBpbiAqX0FMTE9DQSBtYWNyb3MuCisKKwkqIHN0b3ItbGF5b3V0LmMgKG1vZGVfZm9yX3NpemUpOiBObyBsb25nZXIgc3RhdGljLgorCUFjY2VwdCBMSU1JVCBwYXJhbWV0ZXIgdG8gbGltaXQgbW9kZSB0byBNQVhfRklYRURfTU9ERV9TSVpFLgorCShsYXlvdXRfZGVjbCwgbGF5b3V0X3R5cGUpOiBQYXNzIGFwcHJvcHJpYXRlIGxpbWl0IHBhcmFtZXRlciB0bworCW1vZGVfZm9yX3NpemUuCisKK1R1ZSBNYXkgIDEgMTM6MDk6NDMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IERvbid0IG1ha2UgZW50cnlfcGFybSBhbmQgc3RhY2tfcGFybSB2YWxpZC4KKwlMZWF2ZSB0aGVtIGV4cGxpY2l0IHN0YWNrIHNsb3RzLgorCSogZXhwbG93LmMgKHZhbGlkaXplX21lbSk6IENvcHkgaXQsIGRvbid0IGFsdGVyIGl0LgorCisJKiBvdXQtbTY4ay5jIChzdGFuZGFyZF82ODg4MV9jb25zdGFudF9wKTogSGFuZGxlIEhPU1RfV09SRFNfQklHX0VORElBTi4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSk6IENvcHkgcmVnIG5vdGVzIGFmdGVyIGFsbCBpbnNucy4KKworCSogY29tYmluZS5jIChzdWJzdCk6IFdoZW4gY2hlY2tpbmcgcmVnX2xhc3Rfc2V0LCB2ZXJpZnkgbm9uemVyby4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogVXNlICViLCBub3QgJWksIGFmdGVyIC1kdW1wYmFzZS4KKworCSogc3Rvci1sYXlvdXQuYyAobWFrZV91bnNpZ25lZF90eXBlKTogQ2hhbmdlIGxpa2UgbWFrZV9zaWduZWRfdHlwZS4KKworVHVlIE1heSAgMSAwNzozNjoyMSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0bS1tNjhrLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6IEFsbG9jYXRlIHNwYWNlCisJZm9yIGxvY2FsIHZhcmlhYmxlcyBldmVuIGlmIG5vIGZyYW1lIHBvaW50ZXI7IGFkanVzdCBzaXplIHRvIGFjY291bnQKKwlmb3IgcGxhY2Ugd2hlcmUgb2xkIGZyYW1lIHBvaW50ZXIgd291bGQgaGF2ZSBiZWVuIHBsYWNlZC4KKwkoSU5JVEFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUKTogQWRkIGZyYW1lIHNpemUgaW5zdGVhZCBvZiBzdWJ0cmFjdGluZworCWl0IGFuZCBwZXJmb3JtIGFkanVzdG1lbnQgZGVzY3JpYmVkIGFib3ZlLgorCisJKiBleHByLmMgKHZhbGlkYXRlX3N1YnRhcmdldCk6IERlbGV0ZWQuCisJKGV4cGFuZF9leHByKTogUmVwbGFjZSBjYWxscyB0byB2YWxpZGF0ZV9zdWJ0YXJnZXQgd2l0aCBzYWZlX2Zyb21fcC4KKworTW9uIEFwciAzMCAwMTozOToxNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWhlYWRlcnMpOiBTaW1wbGlmeSBsb29wIGJ5IGNkJ2luZyB0byBzcmNkaXIuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogR2V0IGFsaWdubWVudCBvZiBhbGwgc2NhbGFyIHR5cGVzCisJZnJvbSB0aGUgbW9kZS4KKwkobWFrZV9zaWduZWRfdHlwZSk6IEdldCByaWQgb2YgcHRyX3NpemVfbm9kZSwgZnVuY3Rpb25fc2l6ZV9ub2RlLgorCSogdG0tKi5oIChQT0lOVEVSX0JPVU5EQVJZKTogRGVsZXRlZC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBGb3IgQUREUl9FWFBSIG9mIENPTVBPTkVOVF9SRUYsCisJbWFyayB0aGUgUExVU19FWFBSIGNvbnN0YW50IGlmIGFwcHJvcHJpYXRlLgorCShwYXJzZXJfYnVpbGRfYmluYXJ5X29wKTogUmVjb3JkIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFIGhlcmUuCisJKGJ1aWxkX2JpbmFyeV9vcCk6IE5vdCBoZXJlLgorCisJKiBmb2xkLWNvbnN0LmMgKHNpemVfaW50KTogTWFrZSBhcmcgdW5zaWduZWQuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfYWRkcmVzc2VkX2NvbnN0YW50cyk6IEZpeGVkIHR5cG8uCisKKwkqIGNjY3AuYyAobWFjYXJnMSk6IGBcJyBub3Qgc3BlY2lhbCBvdXRzaWRlIHN0cmluZ3MuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogSW4gaW5jcmVtZW50IG9wcywKKwl0eXBvIGNoZWNraW5nIGZvciBwdHIgdG8gdm9pZC9mdW5jdGlvbi4KKwlDaGVjayBvcmlnaW5hbCB0eXBlIGZvciB0aGlzIGFuZCBmb3IgYW1vdW50IG9mIGluY3JlbWVudC4KKworU2F0IEFwciAyOCAxNjo0MzowOCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IEVycm9yIGlmIHRhcmdldCBpcyBpbmNvbXBsZXRlIHR5cGUuCisKK0ZyaSBBcHIgMjcgMTM6NTY6MjIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IENvdW50IG11bHRpLXdvcmQgcHNldWRvcyByaWdodC4KKworVGh1IEFwciAyNiAxNzo1MjoxNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IERvbid0IHBhc3MgZGlyZWN0aXZlIHRocm91Z2ggaWYgbm9fb3V0cHV0LgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogTGFyZ2UgaGV4IGNvbnN0YW50cyBhcmUgc2lnbmVkIGlmIC10cmFkaXRpb25hbC4KKworVHVlIEFwciAyNCAxMzo1NzoyMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGk4NjAubWQsIG04OGsubWQ6IEFkZCBtaXNzaW5nID0gaW4gc29tZSBvdXRwdXQgY29uc3RyYWludHMuCisKKwkqIHRtLW5zMzJrLmggKFBPSU5URVJfQk9VTkRBUlkpOiBOb3cgMzIuCisKKwkqIG91dC0qLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IFVzZSBzcGxpdF9kb3VibGUuCisJKiBmaW5hbC5jIChzcGxpdF9kb3VibGUpOiBOZXcgZnVuY3Rpb24sIGhhbmRsZXMgYnl0ZS1vcmRlciBkaWZmZXJlbmNlcy4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IENoZWNrIHNpemUgZm9yIGludGVnZXIsIG5vdCAiY29uc3RhbnQiLgorCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wsIGxheW91dF90eXBlKTogTGlrZXdpc2UuCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogTGlrZXdpc2UuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUsIG91dHB1dF9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgorCShkZWNvZGVfYWRkcl9jb25zdCk6IERpc3Rpbmd1aXNoIGdldHRpbmcgcnRsIGJ5IGNvZGUgYWxvbmUuCisJKG91dHB1dF9hZGRyZXNzZWRfY29uc3RhbnRzKTogTm8gbmVlZCB0byBhYm9ydC4KKwlJbiBBRERSX0VYUFIgY2FzZSwgY2hlY2sgVFJFRV9DT0RFX0NMQVNTLgorCisJKiBjLXRyZWUuaCAoQ19ERUNMQVJFRF9MQUJFTF9GTEFHKTogTmV3IGZsYWcuCisJKiBjLXBhcnNlLnkgKGxhYmVsIGRlY2xhcmF0aW9ucyk6IFNldCBpdC4KKwkqIGMtZGVjbC5jIChwb3BfbGFiZWxfbGV2ZWwsIGxvb2t1cF9sYWJlbCk6IFVzZSBpdC4KKworCSogZXhwci5jIChzdHJpbmdfY29uc3RhbnQpOiBBY2NlcHQgdmFyaWFibGUgb2Zmc2V0cy4KKwkoZXhwYW5kX2V4cHIpOiBDaGVjayBmb3IgZXhwbGljaXQgaW50ZWdlcnMsIG5vdCBjb25zdGFudHMsIGluIHNpemVzLgorCShzYWZlX2Zyb21fcCk6IE5vIG5lZWQgdG8gY2hlY2sgVFJFRV9DT05TVEFOVC4KKworCSogTWFrZWZpbGUuaW4gKHByZWZpeCk6IE5vdyByZXBsYWNlcyAvdXNyL2xvY2FsIGluc3RlYWQgb2YgYWRkaW5nIG9uLgorCitNb24gQXByIDIzIDAyOjAxOjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3BsdXMtdHJlZS5oIChERUNMX0ZSSUVORExJU1QpOiBVc2UgREVDTF9JTklUSUFMLgorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogVXNlIGV4cHJfc2l6ZSB0byBjb21wdXRlIHNpemUuCisKK1N1biBBcHIgMjIgMjE6NTM6NTUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50LCBleHBhbmRfZXhwcik6IENoZWNrIGZvciBDT01QT05FTlRfUkVGCisJYmVmb3JlIHRlc3RpbmcgREVDTF9CSVRfRklFTEQuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGNvbnZlcnRfdW5pdHMpOiBEZWxldGVkLiAgQWxsIGNhbGxzIGVsaW1pbmF0ZWQuCisKKwkqIFRSRUVfQ09OU1RBTlQgcmVuYW1lZCBmcm9tIFRSRUVfTElURVJBTC4KKwkqIFRZUEVfUkVBRE9OTFkgc3BsaXQgb2ZmIGZyb20gVFJFRV9SRUFET05MWS4KKwkqIFRSRUVfU0lERV9FRkZFQ1RTIHJlbmFtZWQgZnJvbSBUUkVFX1ZPTEFUSUxFLgorCSogVFlQRV9WT0xBVElMRSBzcGxpdCBvZmYgZnJvbSBUUkVFX1ZPTEFUSUxFL1RSRUVfVEhJU19WT0xBVElMRS4KKworU3VuIEFwciAyMiAxNToyNjo1MCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEF2b2lkIHByb2JsZW1zIGluIGJpdiBlbGltaW5hdGlvbiBieSBub3QKKwliZWluZyBmb3JjZWQgdG8gdXNlIGdpdidzIHRoYXQgaGF2ZSBjb21wbGV4IG5ld19yZWcgdmFsdWVzIHdoaWxlIHRoZQorCXVuZGVybHlpbmcgZ2l2IGlzIG1hcmtlZCBtYXliZV9kZWFkOyBjbGVhciBtYXliZV9kZWFkIGluIHRoaXMgY2FzZS4KKworCSogbG9vcC5jOiBNYWtlIHZlcmlmaWNhdGlvbiBvZiBsb29wcyB0YWtlIGxpbmVhciwgbm90IHF1YWRyYXRpYywgdGltZS4KKwkodmVyaWZ5X2xvb3AsIGNhbl9qdW1wX2luX3JhbmdlX3ApOiBEZWxldGVkLgorCShwcmVzY2FuX2xvb3ApOiBOZXcgZnVuY3Rpb24sIGNvbnRlbnRzIGFyZSBmcm9tIG9sZCB2ZXJpZnlfbG9vcC4KKwkoc2Nhbl9sb29wKTogQ2FsbCBwcmVzY2FuX2xvb3AuCisJKGZpbmRfYW5kX3ZlcmlmeV9sb29wcywgbWFya19sb29wX2p1bXApOiBOZXcgZnVuY3Rpb25zLgorCShsb29wX29wdGltaXplKTogQWxsb2NhdGUgbmV3IHRhYmxlcyBhbmQgY2FsbCBmaW5kX2FuZF92ZXJpZnlfbG9vcHMKKwlvbmNlIGluc3RlYWQgb2YgY2FsbGluZyB2ZXJpZnlfbG9vcCBmb3IgZWFjaCBsb29wLgorCVVzZSBkYXRhIGZyb20gZmluZF9hbmRfdmVyaWZ5X2xvb3BzIGluc3RlYWQgb2Ygc2Nhbm5pbmcgYWxsIGluc25zLgorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wKTogTmV3IGZ1bmN0aW9uLgorCSh2YWxpZGF0ZV9zdWJ0YXJnZXQpOiBVc2Ugc2FmZV9mcm9tX3AuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTlNUUlVDVE9SKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IEhhbmRsZSBjYXNlcyB3aGVyZSBFWFAgaXMgYSBjb21wb3VuZAorCW9yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gc3BlY2lhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHRlbXBvcmFyaWVzLgorCitTdW4gQXByIDIyIDAwOjE1OjU4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV90eXBlKTogRGVsZXRlIHNpemVfdW5pdC4KKwkoc3RydWN0IHRyZWVfZGVjbCk6IERlbGV0ZSBzaXplX3VuaXQgYW5kIHZvZmZzZXRfdW5pdC4KKwlSZWR1Y2UgbGFuZ19mbGFncyB0byBzYXZlIDEgd29yZC4KKworCSogZnVuY3Rpb24uYyAoaW5pdF9mdW5jdGlvbl9zdGFydCk6IERvbid0IHVzZSBERUNMX1JFU1VMVF9UWVBFLgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBMaWtld2lzZS4KKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbiwgZHVwbGljYXRlX2RlY2xzKTogTGlrZXdpc2UuCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2RlY2wpOiBEZWxldGUgdm9mZnNldC4KKwkoREVDTF9SRVNVTFRfVFlQRSk6IERlbGV0ZWQuCisKKwkqIG9iamMtYWN0aW9ucy5jIChlbmNvZGVfZmllbGRfZGVjbCwgb2JqY19jb3B5X2xpc3QpOgorCVN3aXRjaCB0byBERUNMX0ZSQU1FX1NJWkUuCisJKiBjcGx1cy1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogTGlrZXdpc2UuCisJKiBjcGx1cy1kZWNsMi5jIChncm9rYml0ZmllbGQpOiBTd2l0Y2ggdG8gREVDTF9CSVRfRklFTEQuCisJKiBjLXBhcnNlLnksIGNwbHVzLXBhcnNlLnksIG9iamMtcGFyc2UueTogTGlrZXdpc2UuCisKKwkqIHRyZWUuaCAoVFlQRV9OT19GT1JDRV9CTEspOiBOZXcgZmxhZyBpbiB0eXBlcy4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogVXNlIGl0LgorCSogdHJlZS5oIChERUNMX1RPT19MQVRFKTogTmV3IGZsYWcuCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfYmluZGluZ3MsIGV4cGFuZF9nb3RvX2ludGVybmFsKTogVXNlIGl0LgorCSogdHJlZS5oIChUUkVFX1BBQ0tFRCk6IERlbGV0ZWQuCisKKwkqIGNwbHVzLXR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IENvbmZ1c2luZyB1c2Ugb2YKKwlERUNMX1NJWkVfVU5JVDsgbm90IGNsZWFyIHdoYXQgdG8gZG8uCisJKiBjcGx1cy10cmVlLmMgKGxheW91dF92YmFzZXR5cGVzKTogTGlrZXdpc2UuCisJKiBjcGx1cy1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJ5KTogTGlrZXdpc2UuCisKKwkqIGNwbHVzLXBhcnNlLnkgKFlZREVCVUcpOiBGb3JjZSBpdCBvbi4KKwkocHJpbnRfcGFyc2Vfc3RhdGlzdGljcywgaW5pdF9wYXJzZSk6IE5vLW9wIGlmIG5vdCBZWURFQlVHLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBSRUFMX0lORklOSVRZIGFmZmVjdHMgcmVhbHMsIG5vdCBpbnRzLgorCisJKiBwcm90b2l6ZS5jIChlZGl0X2ZuX2RlY2xhcmF0aW9uKTogTWFrZSBhcmcgdm9sYXRpbGUgdG8gc3RvcCB3YXJuaW5nLgorCitTYXQgQXByIDIxIDAzOjA0OjMyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZHMpOiBBZGp1c3QgZm9yIGVsaW1pbmF0aW9uIG9mIEJJbW9kZS4KKworCSogYy1wYXJzZS55IChzaW1wbGVfaWYsIHN0bXQpOiBTdG9yZSBzdG10X2NvdW50IGluIHByb3BlciBwbGFjZSwKKwl3aGljaCBpcyBzbG90IDEgb2YgdGhlIGlmLgorCShzaW1wbGVfaWYsIGxpbmVub19zdG10LCBzdG10KTogT3V0cHV0IHRoZSBub3RlIGF0IGJlZ2lubmluZyBvZgorCXN0bXQsIG5vdCBpbiBsaW5lbm9fc3RtdC4gIFVzZSBlbWl0X2xpbmVfbm90ZS4KKwkoc2ltcGxlX2lmKTogU2V0IGlmX3N0bXRfKiwgdGhlbiB1c2UgbGluZW5vX3N0bXQgZGlyZWN0bHkuCisJKGxpbmVub19zdG10KTogQmVmb3JlIG1vc3QgdXNlcywgY2FsbCBza2lwX3doaXRlX3NwYWNlLgorCShmaW5wdXQpOiBNb3ZlIHRvIHRvcCBvZiBmaWxlLgorCisJKiBjcGx1cy1jbGFzcy5jIChidWlsZF9pbnN0YW50aWF0ZWRfZGVjbCk6IEZpeCB0eXBvLgorCisJKiBjcGx1cy10cmVlLmggKENfVFlQRV9GSUVMRFNfUkVBRE9OTFkpOiBVc2UgbGFuZ19mbGFnXzEuCisJKFRZUEVfSEFTX0NPTlNUUlVDVE9SLCBUWVBFX0hBU19ERVNUUlVDVE9SLCBUWVBFX05FRURTX0NPTlNUUlVDVE9SKToKKwkoVFlQRV9ORUVEU19ERVNUUlVDVE9SKTogQWR2YW5jZSBlYWNoIHRvIG5leHQgbGFuZ19mbGFnLgorCSogdHJlZS5oIChUUkVFX0xBTkdfRkxBR181LCBUUkVFX0xBTkdfRkxBR182KTogRGVmaW5lIHRoZW0uCisKKwkqIGNvbmZpZy5nY2M6IERlbGV0ZSAuL01ha2VmaWxlLmluIGlmZiBub3QgaW4gdGhlIHNvdXJjZSBkaXIuCisKKwkqIE1ha2VmaWxlLmluIChmb3ItYm9vdHN0cmFwKTogTmV3IHRhcmdldC4KKworCSogZGJ4b3V0LmMgKGRieG91dF9maW5pc2hfc3ltYm9sLCBkYnhvdXRfdHlwZSwgZGJ4b3V0X3ByZXBhcmVfc3ltYm9sKToKKwlBZGQgdGVtcG9yYXJ5IGNvbmRpdGlvbmFscyBvbiBXSU5OSU5HX0dEQi4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgdGhlIFRZUEVfU1lNVEFCX0FERFJFU1MuCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8sIFNZU0NBTExTLmMuWCk6CisJSW5jbHVkZSBmcm9tIG9yIGxvb2sgaW4gZGlyICQoc3JjZGlyKS4KKworRnJpIEFwciAyMCAxNjozMDoxMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBCYWNrd2FyZCB0ZXN0IGZvciBiaXQtZmllbGQuCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC0qKTogRGVsZXRlIC5jIG9yIC5oIGZyb20gdGhlc2UgbmFtZXMuCisKK0ZyaSBBcHIgMjAgMTU6NTY6MjEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3BsdXMtdHlwZWNrLmMgKGNvbXBwYXJtcywgY29tcF90YXJnZXRfcGFybXMsCWJ1aWxkX21vZGlmeV9leHByXzEpOgorCShidWlsZF9tb2RpZnlfZXhwcik6IENsZWFuIHBhcmVucyBpbiBjb21wbGljYXRlZCBpZi4KKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2RlY2wsIGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCisKK0ZyaSBBcHIgMjAgMTQ6NDI6MzYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS0zYjEuaCAoQVNNX1NQRUMsIFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IFN1cHBvcnQgNjgwMjAsIDY4ODgxLgorCVVzZWZ1bCBldmVuIHRob3VnaCB0aGlzIGlzbid0IG9uZS4KKwkoQVNNX09VVFBVVF9PUENPREUpOiBDb252ZXJ0IGZibmUgdG8gZmJuZXEuICBEb24ndCBjaGFuZ2UgZnRzdC4KKwkoUkVHSVNURVJfTkFNRVMpOiBEZWZpbmUgaXQuICBGcHJlZyBuYW1lcyBub3Qgc2FtZSBhcyBocC4KKworCSogc3Rvci1sYXlvdXQuYyAobW9kZV9mb3Jfc2l6ZSk6IERvbid0IGNoZWNrIE1BWF9GSVhFRF9NT0RFX1NJWkUuCisJKGxheW91dF90eXBlKTogQ2hlY2sgaXQgaGVyZSB3aGVuIGFwcHJvcHJpYXRlLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENsZWFuIHBhcmVucyBpbiBjb21wbGljYXRlZCBpZi4KKworCSogZm9sZC1jb25zdC5jIChtdWxfZG91YmxlLCBjb25zdF9iaW5vcCk6IEFkZCBwYXJlbnMgYXJvdW5kIHNoaWZ0cy4KKworVGh1IEFwciAxOSAwMzowMzozOSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG1hY2htb2RlLmRlZjogRGVsZXRlIHVudXNlZCBtb2Rlcy4KKworCSogc3Rvci1sYXlvdXQuYyAobW9kZV9mb3Jfc2l6ZSk6IEFjY2VwdHMgbW9kZSBjbGFzcyBhcyBhcmcuCisJQ2FsbHMgY2hhbmdlZC4KKwkobGF5b3V0X3R5cGUpOiBDYW4gbm93IHVzZSBtb2RlX2Zvcl9zaXplIGZvciBmbG9hdGluZyB0eXBlcy4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBHZXQgbW9kZSBvZiBmdW5jdGlvbiB0eXBlIGZyb20gc2l6ZS4KKwkqIGMtZGVjbC5jLCBjcGx1cy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgd29ycnkgYWJvdXQKKwltb2RlIG9mIGEgZnVuY3Rpb24gdHlwZS4KKwkqIGNhbGxzLmMgKHByZXBhcmVfY2FsbF9hZGRyZXNzKTogTm8gdmFsdWVzIGNvbnRhaW4gc3RhdGljIGNoYWlucy4KKworCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9kZWNsLCBzdHJ1Y3QgdHJlZV9jb21tb24pOiBSZW5hbWUgdGhlIGZsYWcgYml0cy4KKwkqIGNwbHVzLXRyZWUuaDogUmVmZXJlbmNlcyBoZXJlIGNoYW5nZWQuCisKKwkqIHRyZWUuaCAoREVDTF9CSVRfRklFTEQpOiBOZXcgbWFjcm8sIHdpdGggbmV3IGZsYWcuCisJKiBwcmludC10cmVlLmM6IFByaW50IGl0LgorCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wpOiBVc2Ugb24gaW5wdXQgaW5zdGVhZCBvZiBUUkVFX1BBQ0tFRC4KKwlDbGVhciBpdCBpZiBmaWVsZCBoYXBwZW5zIHRvIGJlIGFsaWduZWQuCisJKiBleHByLmMsIHRyZWUuYywgdmFyYXNtLmMsIHN5bW91dC5jLCBvYmpjLWFjdGlvbnMuYywgYy10eXBlY2suYzoKKwlVc2UgdGhpcyB0byBkaXN0aW5ndWlzaCBiaXQtZmllbGRzLgorCSogYy1kZWNsLmMsIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBTZXQgdGhpcyBmb3IgYml0LWZpZWxkcy4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogTWFrZSBOT05fTFZBTFVFX0VYUFIsIG5vdCBOT1BfRVhQUi4KKworCSogb3V0LXNwYXJjLmMgKGZpbmRfYWRkcl9yZWcpOiBBdm9pZCB1c2luZyBmcmFtZSBwb2ludGVyLiAKKworCSogY29uZmlnLmdjYzogRGVsZXRlIGFsbCBmb3JtZmVlZHMgZnJvbSBNYWtlZmlsZS4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wpOiBEZWxldGUgYGJpdHNpemUnLgorCShsYXlvdXRfcmVjb3JkKTogVGVzdCBzaXplIGZvciBDT05TVF9JTlQsIG5vdCBUUkVFX0xJVEVSQUwuCisJKGxheW91dF90eXBlKTogU2ltcGxpZnkgYXJyYXkgY2FzZS4KKworCSogZm9sZC1jb25zdC5jIChzaXplX2Jpbm9wKTogRGl2aXNpb24gbm90IHNwZWNpYWwgY2FzZS4KKworV2VkIEFwciAxOCAxNjowNToyMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRhdGF0eXBlKTogRnVuY3Rpb24gZGVsZXRlZC4KKwkoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCwgcG9pbnRlcl9pbnRfc3VtLCBwb2ludGVyX2RpZmYpOgorCURvbid0IHVzZSBpdC4KKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0LCBwb2ludGVyX2ludF9zdW0pOgorCShwb2ludGVyX2RpZmYpOiBMaWtld2lzZS4KKwkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLiAgVG9vayBzb21lIHdvcmsuCisJKGRhdGF0eXBlKTogRnVuY3Rpb24gZGVsZXRlZC4KKworCSogYy10eXBlY2suYyAoY29tbW9uX3R5cGUpOiBSZW5hbWVkIGZyb20gY29tbW9udHlwZS4KKwkoZnVuY3Rpb25fdHlwZXNfY29tcGF0aWJsZV9wKTogTmV3IGZ1bmN0aW9uLgorCShjb21wcGFybXMpOiBEZWxldGVkLgorCShzZWxmX3Byb21vdGluZ19hcmdzX3ApOiBSZW5hbWVkIGZyb20gY29tcHBhcm1zMS4KKwkqIGNwbHVzLXR5cGVjay5jIChjb21tb25fdHlwZSwgc2VsZl9wcm9tb3RpbmdfYXJnc19wKTogTGlrZXdpc2UuCisJKiBjLXR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsKTogRWxpbWluYXRlIGxvY2FsIHZhbHVlX3R5cGUuCisKKwkqIGMtdHlwZWNrLmMgKHBhcnNlcl9idWlsZF9iaW5hcnlfb3ApOiBEZXRlY3QgKy8tIHdpdGhpbiBib29sZWFuLgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFJlbmFtZWQgZnJvbSBhY3R1YWxwYXJhbWV0ZXJsaXN0LgorCVB1c2ggcmVzdWx0cyBvbiBmcm9udCwgYW5kIHJldmVyc2UgYXQgZW5kLgorCSogY3BsdXMtdHlwZWNrLmM6IExpa2V3aXNlLiAgQWxsIGNhbGxzIGNoYW5nZWQuCisKKwkqIHRyZWUuaCAoU1RNVF9CSU5EX1NJWkUpOiBEZWxldGVkLgorCShzdHJ1Y3QgdHJlZV9iaW5kX3N0bXQpOiBEZWxldGVkIHRoYXQgc2xvdC4KKwkqIHRyZWUuYyAoYnVpbGRfbGV0X3N0bXQpOiBEb24ndCBzZXQgaXQuCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IENhbGwgcHJpbnRfbGFuZ19pZGVudGlmaWVyLgorCSogYy1kZWNsLmMsIGNwbHVzLXB0cmVlLmMgKHByaW50X2xhbmdfaWRlbnRpZmllcik6IE5ldyBmdW5jdGlvbi4KKworCSogZ251bGliMi5jIChfX2NsZWFyX2NhY2hlKTogTmV3IGZ1bmN0aW9uLgorCitUdWUgQXByIDE3IDE2OjU3OjE3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3BsdXMtdHJlZS5jIChidWlsZF9tZW1iZXJfdHlwZSk6IFVzZSBUWVBFX0hBU0gsIG5vdCBUUkVFX1VJRC4KKwkoVFlQRV9IQVNIKTogVXNlIHRoZSBhZGRyZXNzLiAgRGVsZXRlIHRoZSBkdXBsaWNhdGUgZGVmaW5pdGlvbi4KKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBCdWcgaW4gcGVkYW50aWMgd2FybmluZyBhYm91dCArKy4KKworCSogdHJlZS5oIChUWVBFX1NFUCwgVFlQRV9TRVBfVU5JVCk6IERlbGV0ZWQuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IERvbid0IHNldCB0aGVtLgorCShtb2RlX2Zvcl9zaXplKTogTmV3IG5hbWUgZm9yIGFnZ19tb2RlOyBjb2RlIGNsZWFuZWQgdXAuCisJKiBjLXRyZWUuaCAoQ19UWVBFX0ZJRUxEU19SRUFET05MWSk6IFVzZSBUUkVFX0xBTkdfRkxBR18xLgorCisJKiBmb2xkLWNvbnN0LmMgKHNpemVfaW50LCBzaXplX2Jpbm9wKTogTmV3IG5hbWVzIGZvciBidWlsZF9pbnQKKwlhbmQgZ2Vub3AsIG1vdmVkIGhlcmUuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCShjb25zdF9iaW5vcCk6IE5ldyBuYW1lIGZvciBjb21iaW5lLCBhbmQgbm93IHN0YXRpYy4KKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlLCBncm91cF9jYXNlX25vZGVzLCBub2RlX2hhc19sb3dfYm91bmQpOgorCShub2RlX2hhc19oaWdoX2JvdW5kKTogRG9uJ3QgY2FsbCBgY29tYmluZScgZGlyZWN0bHkuCisKKwkqIHRyZWUuaCAoREVDTF9WT0ZGU0VULCBERUNMX1ZPRkZTRVRfVU5JVCk6IERlbGV0ZWQuCisJKiB0cmVlLmMgKHN0YXRpY3ApOiBEb24ndCB1c2UgREVDTF9WT0ZGU0VULgorCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0XyopOiBEb24ndCB1c2UgaXQgb3Igc2V0IGl0LgorCShsYXlvdXRfcmVjb3JkKTogU2ltcGxpZnk6IEtlZXAgYWxsIHNpemVzIGluIHVuaXRzIG9mIDEuCisKKwkqIHRyZWUuYyAoZGVidWdfdHJlZSwgcHJpbnRfbm9kZSwgcHJpbnRfbm9kZV9icmllZiwgaW5kZW50X3RvKToKKwlOZXcgZnVuY3Rpb25zIHRvIHByaW50IGEgdHJlZS4KKwkqIGMtZGVjbC5jIChwcmludF9sYW5nX2RlY2wsIHByaW50X2xhbmdfdHlwZSk6IERlZmluZSBhcyBuby1vcC4KKwkqIGNwbHVzLXB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IENvbXBsZXRlIHJld3JpdGUuCisJTW9zdCBvdGhlciBmdW5jdGlvbnMgZGVsZXRlZC4KKwkqIHRyZWUuYyAocHJpbnRfbm9kZSk6IENhbGwgcHJpbnRfbGFuZ18qIHVuY29uZGl0aW9uYWxseS4KKworCSogdHJlZS5jIChUWVBFX0hBU0gpOiBOb3cgdXNlIHRoZSBhZGRyZXNzLgorCitNb24gQXByIDE2IDE2OjI3OjI4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZmluYWwuYzogQ2hlY2sgTEVBRl9SRUdJU1RFUlMsIG5vdCBMRUFGX1JFR1MuCisKKwkqIHJlYWwuaCAoKl9GTE9BVF9GT1JNQVQpOiBDaGFuZ2UgZW51bXMgdG8gbWFjcm9zLgorCShSRUFMX0lORklOSVRZKTogRGVmaW5lIGl0IGlmIElFRUUgZm9ybWF0LgorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9ucyk6IEhhbmRsZSAtV2NvbnZlcnNpb24gaGVyZS4KKwkqIHRvcGxldi5jIChtYWluKTogTm90IGhlcmUuCisKKwkqIHRtLSouaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IENvdW50IGdldF9mcmFtZV9zaXplLgorCitNb24gQXByIDE2IDE1OjA1OjQ5IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoZWxpbWluYXRlX2Jpdik6IEJ1aWxkIENPTVBBUkUgd2l0aCBWT0lEbW9kZSwgbm90IG1vZGUKKwlvZiBvcGVyYW5kcy4KKworTW9uIEFwciAxNiAxNDo1NTo1OCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYzogSW5jbHVkZSByZWFsLmguCisKK1N1biBBcHIgMTUgMjA6MzA6MjQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy10eXBlY2suYyAocGVkYW50aWNfbHZhbHVlX3dhcm5pbmcpOiBOZXcgZnVuY3Rpb24uCisJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBIYW5kbGUgQ09NUE9VTkRfVkFMVUUgYW5kIENPTkRfRVhQUiBieSBtb3ZpbmcKKwlyZWZlcmVuY2UgaW5zaWRlIGl0IGFuZCBjYWxsaW5nIHBlZGFudGljX2x2YWx1ZV93YXJuaW5nLgorCShidWlsZF91bmFyeV9vcCk6IEluY3JlbWVudGluZyBhIGNhc3QtZXhwcmVzc2lvbiBpcyB3YXJuaW5nLCBub3QKKwllcnJvcjsgY2FsbCBuZXcgcGVkYW50aWNfbHZhbHVlX3dhcm5pbmcuCisJKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogVXNlIG9mIGNvbXBvdW5kIG9yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYXMKKwlsdmFsdWUgaXMgd2FybmluZywgbm90IGVycm9yLgorCShidWlsZF9tb2RpZnlfZXhwcik6IExpa2V3aXNlLgorCSogY3BsdXMtdHlwZWNrLmM6IExpa2V3aXNlLgorCitTdW4gQXByIDE1IDEyOjI3OjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKGZvbGRfcnR4LCBmb2xkX2NjMCk6IENoZWNrIFRBUkdFVF9GTE9BVF9GT1JNQVQsCisJbm90IEZMT0FUX05PVF9JRUVFLgorCSoganVtcC5jIChqdW1wX2JhY2tfcCk6IExpa2V3aXNlLiAgRkxPQVRfTk9UX0lFRUUgaXMgbm93IGdvbmUuCisKKwkqIGNjY3AuYyAoY29sbGVjdF9leHBhbnNpb24pOiBIYW5kbGUgd2Fybl9zdHJpbmdpZnkuCisJKG1haW4pOiBTZXQgaXQgZm9yIC1XdHJhZGl0aW9uYWwuCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOgorCVNldCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfcG9pbnRlciBoZXJlLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBOb3QgaGVyZS4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IFByZWNvbXB1dGUgcmVnIGFuZCBwYXJ0aWFsIG9mIGFsbCBwYXJtcywKKwl0byBkbyBpdCBpbiBwcm9wZXIgb3JkZXIuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFR5cG8gaW4gZGVsZXRpbmcgb2J2aW91cyBuby1vcHMuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBDaGFuZ2UgI2lmIHRvIG9yZGluYXJ5IGlmLgorCitTYXQgQXByIDE0IDEzOjIwOjQwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChkb19qdW1wKTogSW4gQ09NUE9ORU5UX1JFRiwgY2hlY2sgVFlQRSBpcyBub256ZXJvLgorCisJKiB0bS1pMzg2LmggKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IERlbGV0ZSBzcHVyaW91cyBgYWJvcnQgKCknLgorCisJKiBlbWl0LXJ0bC5jIChyZXZlcnNlX2NvbXBhcmlzb24pOiBOZXcgZnVuY3Rpb24uCisJKGdldF9sYXN0X2luc25fYW55d2hlcmUpOiBOZXcgZnVuY3Rpb24uCisJKiBpMzg2Lm1kIChibGUsIGJsdCk6IE5ldyBkZWZpbmVfZXhwYW5kcy4KKworCSogTWFrZWZpbGUuaW4gKExBTkdVQUdFUyk6IE5ldyBwYXJhbWV0ZXIgY2hvb3NlcyBsYW5ndWFnZXMgdG8gYnVpbGQuCisJKG5hdGl2ZSk6IFVzZSB0aGF0LgorCShjLCBjKyssIG9iamMpOiBUYXJnZXRzIGZvciB1c2UgaW4gTEFOR1VBR0VTLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFNwbGl0IHVwLgorCShpbnN0YWxsLWNyb3NzLCBpbnN0YWxsLWhlYWRlcnMsIGluc3RhbGwtZ251bGliLCBpbnN0YWxsLXByb3RvKToKKwkoaW5zdGFsbC1tYW4sICQobGlic3ViZGlyKSk6IE5ldyB0YXJnZXRzLgorCisJKiBNYWtlZmlsZS5pbiAobmF0aXZlKTogTmV3IHRhcmdldCwgc3BsaXQgZnJvbSBzdGFydC5lbmNhcC4KKwkodG1wZ251bGliKTogU3BsaXQgb3V0IGZyb20gZ251bGliLnBvcnRhYmxlLgorCShnbnVsaWIuY29udmVydCk6IE1ha2VzIHRtcGdudWxpYiwgdGhlbiBjb252ZXJ0cy4KKwkoTElCQ09OVkVSVCk6IE5ldyBwYXJhbWV0ZXIuCisJKEdDQ19GT1JfVEFSR0VUKTogTmV3IHBhcmFtZXRlci4KKwkoaGFyZC1wYXJhbXMubywgaGFyZC1wYXJhbXMsIHN0YW1wLWdudWxpYjIpOiBVc2UgdGhhdC4KKworCSogY3NlLmMgKGZvbGRfY2MwKTogQ29tcGFyZSBlcXVpdmFsZW5jZSBjbGFzc2VzIG9mIG5vbi1jb25zdGFudHMuCisJV2FpdGluZyBmb3IgcGFwZXJzIGZyb20gU3RldmVuIE1jQ2FubmUuCisKK0ZyaSBBcHIgMTMgMTQ6MTI6NDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IElmIHJlY29yZCBpcyBCTEttb2RlIGJlY2F1c2Ugbm90CisJYWxpZ25lZCwgc2V0IFRSRUVfUEFDS0VELiAgRG9uJ3QgZm9yY2UgQkxLbW9kZSBkdWUgdG8gZmllbGQKKwl3aXRoIFRSRUVfUEFDS0VELiAKKworCSogY3NlLmMgKGZvbGRfcnR4KTogVXNlIGRjb25zdDEsIG5vdCBhdG9mLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IExpa2V3aXNlLgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogSGFuZGxlIFNJR0ZQRSBpbiBhdG9mLgorCisJKiB0bS10dGk2OGsuaDogTmV3IGZpbGUuCisKKwkqIHRvcGxldi5jLCBmbGFncy5oIChmbGFnX3ByZXRlbmRfZmxvYXQpOiBOZXcgZmxhZy4KKworCSogcmVnY2xhc3MuYyAocmVnX2NsYXNzX3JlY29yZCk6IEhhbmRsZSBgRScgY29uc3RyYWludCwgZm9yIGZsb2F0CisJY29uc3RhbnRzIGJ1dCBvbmx5IGlmIGNhbiBleGFtaW5lIHRoZWlyIGJpdHMuCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTGlrZXdpc2UuCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBMaWtld2lzZS4KKwkqIG91dC1tNjhrLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEFib3J0IG9uIGZsb2F0IGNvbnN0YW50CisJaWYgY2FuJ3QgZXhhbWluZSB0aGUgYml0cy4KKwkoc3RhbmRhcmRfNjg4ODFfY29uc3RhbnRfcCk6IEZhaWwgaWYgY2FuJ3QgZXhhbWluZSB0aGUgYml0cy4KKwkoc3RhbmRhcmRfc3VuX2ZwYV9jb25zdGFudF9wKTogTGlrZXdpc2UuCisKKwkqIG02OGsubWQgKERGbW9kZSBtb3ZlIHJlY29nbml6ZXJzKTogVXNlIGBFJywgbm90IGBGJy4KKwkqIHRtLW02OGsuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IEhhbmRsZSBmbG9hdCBjb25zdGFudHMuCisKKwkqIHRtLW5leHQuaCAoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9GTE9BVF9PUEVSQU5EKToKKwkoQVNNX09VVFBVVF9ET1VCTEUsIEFTTV9PVVRQVVRfRE9VQkxFX09QRVJBTkQpOiBVc2UgUkVBTF9WQUxVRV9JU0lORi4KKwkqIHRtLXN1bjMuaCwgdG0tc3BhcmMuaDogTGlrZXdpc2UuCisKKwkqIHhtLXZheC5oIChIT1NUX0ZMT0FUX0ZPUk1BVCk6IERlZmluZSBpdC4KKwkqIHRtLXZheC5oIChUQVJHRVRfRkxPQVRfRk9STUFUKTogRGVmaW5lIGl0LgorCisJKiByZWFsLmggKGVudW0gZmxvYXRfZm9ybWF0KTogRGVmaW5lIGNvZGVzIGZvciBmb3JtYXRzLgorCShIT1NUX0ZMT0FUX0ZPUk1BVCwgVEFSR0VUX0ZMT0FUX0ZPUk1BVCk6IE5ldyBtYWNyb3MsIGRlZmF1bHRlZCBoZXJlLgorCShSRUFMX0lTX05PVF9ET1VCTEUsIFJFQUxfVkFMVUVfVFlQRSk6IE92ZXJyaWRlIGlmIGZvcm1hdHMgZGlmZmVyLgorCShSRUFMX1ZBTFVFX0lTSU5GKTogTmV3IG1hY3JvLgorCSogeG0tdmF4LmggKGlzaW5mKTogRGVmaW5lIGFzIG1hY3JvLgorCisJKiBNYWtlZmlsZS5pbiAoTElCRlVOQ1NfRVhUUkEpOiBOZXcgdmFyaWFibGUuCisJKGdudWxpYi5wb3J0YWJsZSk6IENvbXBpbGUgdGhvc2UgZmlsZXMuCisKKwkqIE1ha2VmaWxlLmluIChBVVhfT1VUUFVUMik6IE5ldyB2YXJpYWJsZS4KKwkoT0JKUyk6IFVzZSBpdC4KKwkoYXV4LW91dHB1dDIubyk6IE5ldyB0YXJnZXQuCisKKwkqIE1ha2VmaWxlLmluIChSQU5MSUIsIFJBTkxJQl9URVNUKTogTmV3IHZhcmlhYmxlcy4KKworCSogTWFrZWZpbGUuaW4gKEFSX0ZMQUdTLCBPTERBUl9GTEFHUyk6IE5ldyB2YXJpYWJsZXMuCisJKGdudWxpYi5wb3J0YWJsZSwgc3RhbXAtZ251bGliMik6IFVzZSB0aGVtLgorCisJKiBpMzg2Lm1kOiBBZGQgcGF0dGVybnMgZm9yIGBidCcgaW5zbnMuCisKK0ZyaSBBcHIgMTMgMTI6NTQ6MTQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1kZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24pOiBOb3cgcmV0dXJucyBkZWNsIHRoYXQgd2FzIG1hZGUuCisKKwkqIGNvbmZpZy5nY2M6IFN1cHBvcnQgYm90aCAtaG9zdD0gYW5kICtob3N0PS4KKworVGh1IEFwciAxMiAyMjozOToxMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIENoYW5nZXMgZnJvbSBEYXRhIEdlbmVyYWwuCisKKwkqIHN5bXMuaDogTmV3IGZpbGUuCisJKiBzZGJvdXQuYzogSW5jbHVkZSB0aGF0IGlmIG5vdCBVU0cuCisKKwkqIHRyZWUuaCAoZW51bSBidWlsdF9pbl9mdW5jdGlvbik6IEFkZGVkIEJVSUxUX0lOX1NUUkNQWSBhbmQKKwlCVUlMVF9JTl9TVFJDTVAuCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDcmVhdGUgYWRkaXRpb25hbCBwb2ludGVyIGFuZAorCWZ1bmN0aW9uIHR5cGVzLiAgRGVjbGFyZSBzdHJjcHksIHN0cmNtcCwgbWVtY3B5LCBtZW1jbXAgYnVpbHQtaW4uCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogU3VwcG9ydCBzdHJjcHksIHN0cmNtcCwgbWVtY3B5LCBtZW1jbXAuCisJSWYgc3BlY2lhbCBoYW5kbGVyIGJyZWFrcyBvdXQgb2Ygc3dpdGNoLCBkbyBsaWJyYXJ5IGNhbGwuCisJQnkgZGVmYXVsdCwgcHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgZG8gbGlicmFyeSBjYWxsLgorCShnZXRfcG9pbnRlcl9hbGlnbm1lbnQsIHN0cmluZ19jb25zdGFudCk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGRicmFuY2guYzogUHV0IGVudGlyZSBjb250ZW50cyBpbiBjb25kaXRpb25hbCBvbiBIQVZFX0RFTEFZRURfQlJBTkNILgorCShpbml0X2ZsYWdzLCBlbm90ZSk6IENsZWFyIGFuZCBzZXQgbWVtci4KKwkoZW5vdGUpOiBEb24ndCBtb3ZlIGEgc3RvcmUgYWNyb3NzIGEgZmV0Y2guCisJKGluc25fZWxpZ2libGVfcCk6IENoZWNrIGVub3RlIGJlZm9yZSB2b2xhdGlsaXR5IGFuZCBkZXBlbmRlbmNpZXMuCisJQ2hlY2sgZm9yIHZvbGF0aWxpdHkgaWYgbWVtdyBvciBtZW1yLgorCShsb2Fkc19mcm9tX21lbV9wKTogTmV3IGZ1bmN0aW9uLgorCisJKiBNYWtlZmlsZS5pbiAoZGJyYW5jaC5vKTogTmV3IHRhcmdldC4KKwkoT0JKUyk6IEFkZCBkYnJhbmNoLm8uCisKK1RodSBBcHIgMTIgMjI6Mzk6MTAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENvdW50IGFyZ3MgaW4gb3JkZXIgd3JpdHRlbiwgd2l0aCBhcmdwb3MuCisKK1RodSBBcHIgMTIgMjI6MDE6MTYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKHN5bnRoX211bHQpOiBFbnN1cmUgT1BTIGlzIGFsd2F5cyB2YWxpZCBpbiByZXR1cm5lZCBhbGcuCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogSWYgd2UgaGF2ZSBhbiBvcGVyYW5kIHRoYXQgaXMgYW4KKwlhZGRyZXNzLCBsb29rIGluc2lkZSBpdCBmb3IgcmVnaXN0ZXJzIHRvIGNvbWJpbmUgd2l0aC4KKworCSogcmVsb2FkLmMgKGNvbWJpbmVfcmVsb2Fkcyk6IElmIHRoZSBvdXRwdXQgcmVsb2FkIGlzIGZvciBhbgorCWVhcmx5Y2xvYmJlciBvcGVyYW5kLCBjYW4ndCBjb21iaW5lIGl0LgorCVRyeSB0byB1c2UgYSByZWdpc3RlciB0aGF0IGRpZXMgaW4gYW4gaW5zbiBmb3IgYSBzaW5nbGUgb3V0cHV0IHJlbG9hZAorCWlmIHRoZSBpbnNuIGhhcyBvbmx5IG9uZSBvdXRwdXQuCisKK1RodSBBcHIgMTIgMjE6Mjc6MTggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUHJlc2VydmUgREVDTF9JTklUSUFMIGZyb20gb2xkCisJZnVuY3Rpb24gZGVmIHRvIG5ldyBvbmUuCisKK1RodSBBcHIgMTIgMDc6NTU6MTQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IE9yZGVyIG9mIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gdG8KKwliY29weS9tZW1jcHkgd2FzIHJldmVyc2VkLgorCitXZWQgQXByIDExIDE3OjI5OjE4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0taTM4Ni5oIChBQkNfUkVHUyk6IE5ldyByZWdpc3RlciBjbGFzcy4KKwkoUkVHX0NMQVNTX0NPTlRFTlRTLCBSRUdfQ0xBU1NfTkFNRVMsIGVudW0gcmVnX2NsYXNzKTogQ2hhbmdlZC4KKwkqIGkzODYubWQgKGRpdnNpMywgZXRjLik6IEV4Y2x1ZGUgcmVnaXN0ZXIgZCBmcm9tIGNvbnN0cmFpbnRzLgorCisJKiBjLXBhcnNlLnkgKHNhdmVfZmlsZW5hbWUsIHNhdmVfbGluZW5vKTogTmV3IG5vbnRlcm1pbmFscworCXRvIHJlY29yZCB0ZXh0IGxvY2F0aW9uIGF0IHN0YXJ0IG9mIHN0YXRlbWVudC4KKwkobGluZW5vX3N0bXQpOiBOZXcgbm9udGVybWluYWwsIG91dHB1dHMgbGluZSBub3RlIGJlZm9yZSBzdGF0ZW1lbnQuCisJKGxpbmVub19kZWNsKTogTGlrZXdpc2UgZm9yIGRlY2wsIHRvIGF2b2lkIGNvbmZsaWN0cy4KKwkoc3RtdCk6IERvbid0IGVtaXQgbGluZSBub3RlcyBhdCBzdGFydCBvZiBzdGF0ZW1lbnQuCisJKHNpbXBsZV9pZik6IENvbGxlY3QgZmlsZSBhbmQgbGluZSB1c2luZyBzYXZlX2ZpbGVuYW1lLCBzYXZlX2xpbmVuby4KKworCSogQ2hhbmdlcyBmcm9tIERhdGEgR2VuZXJhbC4KKworCSogY2NjcC5jIChtYWluLCBkb19pbmNsdWRlKTogSW1wbGVtZW50IC1IIHRvIHByaW50IGhlYWRlciBuYW1lcy4KKworCSogYy1wYXJzZS55IChjb21wb25lbnRfZGVjbF9saXN0KTogUGFyc2UgZXZlbiBpZiBmaW5hbCBgOycgbWlzc2luZy4KKworV2VkIEFwciAxMSAxNjo0OToxNiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnY2MuYzogRml4IG1pc2NlbGxhbmVvdXMgdHlwb3MuCisKK1dlZCBBcHIgMTEgMTI6NTk6NTcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjb25maWcuZ2NjOiBUeXBvcyBpbiBzZXR0aW5nIHBhc3MxZG9uZSwgdGVzdGluZyBpdCwKKwlhbmQgY2FsbGluZyBzZWQgZm9yIHVzYWdlIG1zZy4KKworCSogY2NjcC5jIChtYWNyb2V4cGFuZCk6IENvdW50IE5ld2xpbmUgU3BhY2UgYXMgcGFydCBvZiB3aGl0ZXNwYWNlCisJc2VxdWVuY2Ugd2hlbiBzdHJpbmdpZnlpbmcuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCk6IEhhbmRsZSBzeW50aF9tdWx0IHJldHVybmluZyBubyBvcGVyYXRpb25zLgorCitUdWUgQXByIDEwIDIxOjA4OjA2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChkb19saW5lKTogTm8gZXJyb3IgaWYgc3RyaW5nIGZvbGxvd3MgbnVtYmVyIHdpdGhvdXQgc3BhY2UuCisKK1R1ZSBBcHIgMTAgMjA6NTI6MDIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVjb2cuYyAoYXBwbHlfY2hhbmdlX2dyb3VwKTogUmV0dXJuIGEgemVybyBpZiByZWplY3RlZCBjaGFuZ2VzLgorCisJKiBsb29wLmMgKHVwZGF0ZV9naXZfZGVyaXZlKTogSWYgYSBnaXYgaXMgb25seSBzZXQgY29uZGl0aW9uYWxseSwgaXQKKwltYXkgb25seSBkZXJpdmUgb3RoZXIgZ2l2cyBpbiBpdHMgb3duIGJhc2ljIGJsb2NrLgorCitUdWUgQXByIDEwIDEzOjA5OjQwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tY3RpeC5oOiAgTmV3IGZpbGUuICBXYWl0aW5nIGZvciBwYXBlcnMgZnJvbSBSb25hbGQgQ29sZS4KKwljc3VzYWMhdW5pZnkhZGJydXMucmpjQHVjZGF2aXMudWNkYXZpcy5lZHUuCisKKwkqIGNzZS5jIChydHhfY29zdCk6IFVzZSBuZXcgbWFjcm8gUlRYX0NPU1RTLgorCShDT1NUU19OX0lOU05TKTogTmV3IG1hY3JvIGZvciB1c2UgaW4gUlRYX0NPU1RTLgorCisJKiBjb25maWcuZ2NjOiBGaXggdHlwb3MgaW4gY29uZGl0aW9uYWxzIGFuZCBjYXNlLiAgQWxzbyB1c2FnZSBtZXNzYWdlLgorCU1pc3NpbmcgYmFja3NsYXNoZXMgaW4gYGVjaG8gfCB0ZWUnLgorCVVuc2V0IHZhcmlvdXMgdmFycyBhZnRlciBwYXNzIDEuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IENvbXBsYWluIGlmIGZ1bmN0aW9uIHR5cGUgc3BlY2lmaWVkLgorCisJKiBleHBtZWQuYyAoc3ludGhfbXVsdCk6IEFjY2VwdCBtYXhfY29zdCBhcyBhcmcgYW5kIGN1dCBvZmYgdGhlcmUuCisJUGFzcyBpdCBhbG9uZyByZWN1cnNpdmVseSwgbWFraW5nIGl0IHNtYWxsZXIuCisJRWxpbWluYXRlIHF1YWRyYXRpYyBsb29wLCB0aHVzIHBvc3Rwb25pbmcgcG93ZXJzIG9mIDIuCisJQ29zdHMgYXJlIG5vdyBzaWduZWQuICBJbml0aWFsaXplIGJlc3RfYWxnLT5jb3N0IGZyb20gbWF4X2Nvc3QKKwlhbmQgY2hhbmdlIHRvIC0xIG9ubHkgYmVmb3JlIHJldHVybmluZy4KKwkoZXhwYW5kX211bHQpOiBQYXNzIGNvc3Qgb2YgbXVsdGlwbHkgYXMgbWF4IGNvc3QuCisJVXNlIHN5bnRoX211bHQgb25seSBpZiBvcHRpbWl6aW5nLgorCUluIGFsZ19jb21wb3VuZCBjYXNlLCBzaWduIHdhcyBiYWNrd2FyZC4KKwlVc2UgVEVNIGFzIHRhcmdldCBmb3IgZm9yY2Vfb3BlcmFuZCB0aGVyZSwgdG8gZ2V0IGJldHRlciBvdXRwdXQuCisKK1R1ZSBBcHIgMTAgMDc6MDk6NTEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBBZGQgbWlzc2luZyBhcmd1bWVudCB0bworCW9wZXJhbmRfZXF1YWxfcC4KKwlDaGVjayBmb3IgKFggPyB1bm9wIEEgOiBBKSBpbiBhZGRpdGlvbiB0byAoWCA/IEEgKyBCIDogQSkuCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZSwgdW5wcm90b2l6ZSk6IENvbXBpbGUgd2l0aCBHQ0MsIG5vdCBqdXN0IGxpbmsuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEZpeCB0eXBvIGluIGNvbnZlcnRpbmcgY29uZGl0aW9uYWwgdG8gQ09ORC4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFRyZWF0IChBID8gMSA6IDApIGFzIEEgd2hlbiBBIGlzIGEgY29tcGFyaXNvbi4KKwkoZG9fanVtcCk6IFNwZWNpYWwtY2FzZSAoQSA/IDEgOiAwKSBhbmQgKEEgPyAwIDogMSkuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IEZpeCB0eXBvIGluIGNoZWNraW5nIG1vZGUgb2YgdGFyZ2V0LgorCitNb24gQXByICA5IDE4OjMzOjU1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDbGVhciBvdXQgcGFybV9jb3BpZXMuCisKK01vbiBBcHIgIDkgMTg6MDA6NDAgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5kZWY6IFNBVkVfRVhQUiBub3cgaGFzIHRocmVlIG9wZXJhbmRzLgorCSogdHJlZS5oOiBBZGQgbmV3IGZpZWxkIFNBVkVfRVhQUl9DT05URVhUOyBTQVZFX0VYUFJfUlRMIHJlbWFpbnMgbGFzdC4KKwkqIHRyZWUuYyAoc2F2ZV9leHByKTogU2V0IGNvbnRleHQgdG8gY3VycmVudCBmdW5jdGlvbi4KKwkoZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogQ29udGV4dCBpcyBpbiBTQVZFX0VYUFJfQ09OVEVYVCBpZiBTQVZFX0VYUFIuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENhbGwgbWFrZV90cmVlIHRvIGJ1aWxkIGFuIFJUTF9FWFBSIGluc3RlYWQKKwlvZiBleHBsaWNpdGx5IG1ha2luZyBTQVZFX0VYUFIuCisJKiBjcGx1cy10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogVXNlIG1ha2VfdHJlZSBpbnN0ZWFkIG9mIFNBVkVfRVhQUi4KKwkqIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55OiBEb24ndCBjYWxsIG1hcmtfYWRkcmVzc2FibGUgaGVyZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIC4uLl9ERUNMIGNhc2VzKTogSWYgbm9uLWxvY2FsLCBtYWtlIGFkZHJlc3NhYmxlLgorCShleHBhbmRfZXhwciwgY2FzZSBTQVZFX0VYUFIpOiBJZiBkZWZpbmVkIGluIGNvbnRhaW5pbmcgZnVuY3Rpb24sIHB1dAorCXB1dCBpbnRvIHN0YWNrLgorCSogZnVuY3Rpb24uYyAocHV0X3Zhcl9pbnRvX3N0YWNrKTogVXNlIFNBVkVfRVhQUl9SVEwgZm9yIFNBVkVfRVhQUi4KKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IFNBVkVfRVhQUl9SVEwgaXMgbm93IHRoaXJkIG9wZXJhbmQuCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBDYWxsIHNhdmVfZXhwciBpbnN0ZWFkIG9mIG1ha2luZworCXRyZWUgbm9kZSBkaXJlY3RseS4KKworTW9uIEFwciAgOSAwMDowODoxNSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogVHVybiBvZmYgeCBiaXQgb24gU1lTQ0FMTFMuYy5YLgorCisJKiBpODYwLm1kIChjbXBlcXNmLCBldGMuKTogQ2hhbmdlIG9wY29kZSBuYW1lIHRvIHBmZXEuc3MsIGV0Yy4KKworCSogdG0tbTY4ay5oIChQUklOVF9PUEVSQU5EX1BSSU5UX0ZMT0FUKTogRGVsZXRlIHNwdXJpb3VzIGJhY2tzbGFzaC4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBEb24ndCBkbyBzdG9yZWRlY2xzIGluIHByb3RvdHlwZSBjYXNlLgorCVRoYXQgd2FzIGRpc2NhcmRpbmcgdGhlIGVudW1lcmF0b3JzIGFscmVhZHkgcHVzaGRlY2wnZC4KKworCSogZ2NjLmMgKGV4ZWNfcHJlZml4LCBzdGFydGZpbGVfcHJlZml4KTogUmVjb3JkIHByZWZpeCBzZWFyY2ggcGF0aHMuCisJKGZpbmRfYV9maWxlKTogTmV3IGZ1bmN0aW9uIHRvIHNlYXJjaCBhIHBhdGguCisJKGZpbmRfZXhlY19maWxlKTogRGVsZXRlZDsgZmluZF9hX2ZpbGUgdXNlZCBpbnN0ZWFkLgorCShmaW5kX2ZpbGUpOiBKdXN0IGNhbGwgZmluZF9hX2ZpbGUuCisJKGFkZF9wcmVmaXgpOiBBZGQgbmFtZSB0byBhIHByZWZpeCBwYXRoLgorCShwcm9jZXNzX2NvbW1hbmQpOiBDYWxsIHRoYXQuCisKKwkqIGdjYy5jIChzcGVjX2xpc3QpOiBHZW5lcmFsaXplIGFzbV9zcGVjLCBldGMuLCB0byBhcmJpdHJhcnkgbmFtZXMuCisJKHNldF9zcGVjKTogTmV3IGZ1bmN0aW9uLiAgU2V0IHRoZSBvbGQgc3BlY2lmaWMgdmFycyBhbmQgc3BlYyBsaXN0LgorCShkb19zcGVjXzEpOiBIYW5kbGUgYCUoJyBhbmQgYCVbJyBmb3IgZ2VuZXJhbCBzcGVjcy4KKworCSogbnMzMmsubWQgKGFzaGxoaTMpOiBVc2UgJTAsIG5vdCAlMS4KKworCSogY3BsdXMtdHJlZS5oIChUUkVFX0FOT05fVU5JT05fRUxFTSwgREVDTF9BTk9OX1VOSU9OX0VMRU0pOgorCXJlZ2RlY2xfYXR0ciBpcyBub3cgaW4gZGVjbCwgbm90IGNvbW1vbi4KKwkoVFJFRV9QQVJNTElTVCk6IFVzZSBleHRlcm5hbF9hdHRyLgorCShUUkVFX1ZJQV9QVUJMSUMpOiBVc2Ugc3RhdGljX2F0dHIuCisKK1N1biBBcHIgIDggMjM6NDM6NTkgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdCAoZm9sZCk6IFR3byBjb252ZXJzaW9ucyBpbiBhIHJvdyBhcmUgbmVlZGVkIGlmIGZyb20gYQorCXBvaW50ZXIgdHlwZSB0byBhbiBpbnRlZ2VyIHR5cGUgb2YgYSBkaWZmZXJlbnQgcHJlY2lzaW9uLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogV2hlbiByZXBsYWNpbmcgYWRkaXRpb24gd2l0aCByZWdpc3RlcgorCWluIGF1dG8taW5jcmVtZW50IGNyZWF0aW9uLCBtYXJrIHRoYXQgaW5zbiBtdXN0IGJlIHJlLXJlY29nbml6ZWQuCisKK1N1biBBcHIgIDggMTM6NTY6MTcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1tNjhrLmggKEFTTV9PVVRQVVRfRkxPQVQpOiBEZWZuIGRlcGVuZHMgb24gQ1JPU1NfQ09NUElMRVIuCisJKFBSSU5UX09QRVJBTkQpOiBEZXBlbmRzIG9uIENST1NTX0NPTVBJTEVSIGFuZCBIT1NUX1dPUkRTX0JJR19FTkRJQU4uCisJKFBSSU5UX09QRVJBTkRfRVhUUkFDVF9GTE9BVCwgUFJJTlRfT1BFUkFORF9QUklOVF9GTE9BVCk6CisJVGhlc2UgbmV3IHN1YnJvdXRpbmVzIGNvbnRhaW4gdGhlIGNvZGUgdGhhdCBkZXBlbmRzLgorCisJKiB4bS1tNjhrLmgsIHhtLW1pcHMuaCwgeG0tcHlyLmgsIHhtLXRhaG9lLmggKEhPU1RfV09SRFNfQklHX0VORElBTik6CisJTmV3IG1hY3JvLCBkZWZpbmVkIGluIHRoZXNlIGZpbGVzLgorCisJKiBjb25maWcuZ2NjOiBEZWZpbmUgbWFjcm8gQ1JPU1NfQ09NUElMRSBpZiBtYWtpbmcgY3Jvc3MtY29tcGlsZXIuCisJKiBNYWtlZmlsZS5pbiAoSU5URVJOQUxfQ0ZMQUdTKTogSW5jbHVkZSBDUk9TUy4KKworCSogY29uZmlnLmdjYzogRGVjb2RlIC1ob3N0IGFyZ3VtZW50LiAgU2V0ICRob3N0IGFuZCAkdGFyZ2V0LgorCVJlbmFtZSB2YXJzIGZvciBmaWxlcyB0byBsaW5rIHRvLCB0byB0bV9maWxlLCB4bV9maWxlLCBldGMuCisJTGV0ICRob3N0IG92ZXJyaWRlIHhtX2ZpbGUgdmFsdWUuCisJTWVudGlvbiAkaG9zdCBpbiBtZXNzYWdlcyBhbmQgY29uZmlnLnN0YXR1cyBpZiBkaWZmIGZyb20gJHRhcmdldC4KKwlDaGVjayBmb3IgZXJyb3JzIGluIGFyZ3MgYXQgYmVnaW5uaW5nIG9mIHByb2Nlc3NpbmcuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBNYWtlIG5vIGluc25zIGlmIGNvdW50IGlzIDAuCisKKwkqIGNzZS5jIChydHhfY29zdCk6IEluY3JlYXNlIGRlZmF1bHQgY29zdCBvZiBtdWx0IGFuZCBkaXYuCisKKwkqIGV4cG1lZC5jIChzeW50aF9tdWx0KTogTmV3IGZ1bmN0aW9uLiAgRmluZHMgYmVzdCB3YXkgdG8gbXVsdGlwbHkKKwlieSBnaXZlbiBjb25zdGFudCwgYW5kIHRoZSBjb3N0LgorCShleHBhbmRfbXVsdCk6IFVzZSB0aGF0LgorCShpbml0X2V4cG1lZCk6IEluaXQgbmV3IHZhcnMgYWRkX2Nvc3QsIHNoaWZ0X2Nvc3QsIG11bHRfY29zdCwKKwlhbmQgbmVnYXRlX2Nvc3QuICBtdWx0X2lzX2NoZWFwIGhhcyBiZWVuIGRlbGV0ZWQuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBEb24ndCB1c2UgaW5zdiBpZiB1bml0IGZvciBjb3B5aW5nCisJbWVtIHRvIHJlZyB3b24ndCBob2xkIHRoZSBlbnRpcmUgZmllbGQuCisKK1N1biBBcHIgIDggMTI6NTQ6MDcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBBZGQgT0tfREVGRVJfUE9QIHRvIHBhdGggd2l0aAorCW9ubHkgT0tfREVGRVJfUE9QLgorCitTdW4gQXByICA4IDEyOjUwOjU0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAoaW5zdik6IFVzZSBTSW1vZGUgZm9yIG9wZXJhbmQgMC4KKworU2F0IEFwciAgNyAxNToyNDo1NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0LCBnZW5faGlnaHBhcnQpOiBXaGVuIGNoZWNraW5nIG1vZGUgY2xhc3MsCisJY2hlY2sgZm9yIG5vdCBNT0RFX0ZMT0FULgorCSogY3NlLmMgKGZvbGRfcnR4KTogTGlrZXdpc2Ugd2hlbiBhdm9pZGluZyB4LXggLT4gMCBmb3IgSUVFRSBmbG9hdC4KKwkqIGp1bXAuYyAoanVtcF9iYWNrX3ApOiBMaWtld2lzZS4KKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogTGlrZXdpc2UsIGNvbXBhcmluZyByZXN1bHQgb2YgbGliY2FsbC4KKwkqIGV4cHIuYyAobW92ZV9ibG9ja190b19yZWcsIGVtaXRfcHVzaF9pbnNuKTogTGlrZXdpc2UsCisJd2hlbiBwdXR0aW5nIGZsb2F0cyBpbiBtZW1vcnkuCisKKwkqIG1hY2htb2RlLmRlZiAoUFNJbW9kZSwgUERJbW9kZSk6IENsYXNzIGlzIG5vdyBNT0RFX1BBUlRJQUxfSU5ULgorCSogZXhwci5jIChjb252ZXJ0X3RvX21vZGUpOiBEb24ndCB0cmVhdCB0aGVtIGFzIGludHMuCisKKwkqIGZpeGluY2x1ZGVzOiBXaGVuIG1ha2luZyBkaXJlY3RvcnkgbGlua3MsIGFzc3VtZSBhbnkgcmVsYXRpdmUgcGF0aAorCWlzIHdpdGhpbiAvdXNyL2luY2x1ZGUuCisKK1NhdCBBcHIgIDcgMTQ6NTY6MjcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsLCBhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOgorCURvbid0IHVzZSBkaXZpc2lvbiBmb3Igcm91bmRpbmcgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBuZWdhdGl2ZQorCWRpdmlkZW5kczsgdXNlIGxvZ2ljYWwgb3BlcmF0aW9ucyBpbnN0ZWFkLgorCU5vIG5lZWQgdG8gZXZlciBhbGlnbiBzdHJpY3RlciB0aGFuIEJJR0dFU1RfQUxJR05NRU5ULgorCitTYXQgQXByICA3IDE0OjM4OjM2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUjopOiBGaW5pc2ggSmFuIDEyIGNoYW5nZQorCWluIHN0b3JlX2V4cHIgYnkgY2FsbGluZyBzdG9yZV9jb25zdHJ1Y3RvciBpZiB0YXJnZXQgaXMgYSB0ZW1wLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBGb3IgcmVncyBpbnZhbGlkYXRlZCBieSBjYWxscywgZ28gYmFjayB0bworCWNoZWNraW5nIGZvciBmcCBhbmQgYXAgZXhwbGljaXRseSwgbm90IGZpeGVkX3JlZ3MuCisKK1NhdCBBcHIgIDcgMTQ6MDY6NDMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVjb2cuaDogRGVmaW5lIG51bV92YWxpZGF0ZWRfY2hhbmdlcyBhbmQgY2FuY2VsX2NoYW5nZXMuCisJKiByZWNvZy5jICh2YWxpZGF0ZV9jaGFuZ2UsIGFwcGx5X2NoYW5nZV9ncm91cCwgY2FuY2VsX2NoYW5nZXMpOgorCVN1cHBvcnQgY2hhbmdlcyBib3RoIHdpdGhpbiBhbiBpbnNuIGFuZCB3aXRoaW4gYSBNRU0uCisKK1NhdCBBcHIgIDcgMDA6NDU6NDkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAoYWRkY2MgYW5kIHN1YmNjIHBhdHRlcm5zKTogU2V0IENDX05PX09WRVJGTE9XLgorCitGcmkgQXByICA2IDE1OjIwOjUxIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNjY3AuYyAobG9va3VwX2ltcG9ydCk6IFJldHVybiAtMSBmb3Igbm90IGZvdW5kIHRvIGFncmVlIHdpdGgKKwl0aGUgb3BlbiBzeXN0ZW0gY2FsbC4gIFVzZSAtMiBmb3IgZHVwbGljYXRlLgorCShkb19pbmNsdWRlKTogLTIgbm93IG1lYW5zIGR1cGxpY2F0ZTsgcHJldmlvdXNseSwgLTEgbWVhbnQgbm90IGZvdW5kCisJZnJvbSBvcGVuIGFuZCBkdXBsaWNhdGUgZnJvbSBsb29rdXBfaW1wb3J0LgorCitGcmkgQXByICA2IDAwOjA2OjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHBvcGxldmVsKTogVXNlIERFQ0xfSU5JVElBTCB0byBkZXRlY3QgdW5kZWYgbGFiZWwuCisKKwkqIHNwYXJjLm1kIChwZWVwaG9sZSBmb3IgcmV0dXJuaW5nIHN1bSk6IFVzZSBtb3JlIHJlc3RyaWN0aXZlIHByZWRzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IFdoZW4gdGVzdGluZyByZWxvYWQgcmVnCisJZm9yIEhBUkRfUkVHTk9fTU9ERV9PSywgdXNlIFNJbW9kZSBpbnN0ZWFkIG9mIFZPSURtb2RlLgorCitUaHUgQXByICA1IDE0OjAwOjQxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluLCBpbmNsdWRlX2RlZmF1bHRzKTogVXNlIFNUQU5EQVJEX0lOQ0xVREVfRElSCisJaW5zdGVhZCBvZiAvdXNyL2luY2x1ZGUuCisJKiBNYWtlZmlsZS5pbiAoY2NjcC5vKTogU3BlY2lmeSBTVEFOREFSRF9JTkNMVURFX0RJUi4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogTm8gc2RiIG91dHB1dCBmb3IgaW5pdGlhbGl6ZWQgZ2xvYmFsLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IE91dHB1dCBpdCBoZXJlLCBhdCBlbmQgb2YgcnVuLgorCisJKiBzdGRhcmcuaCAodmFfc3RhcnQpOiBSb3VuZCBpbml0aWFsIHBvaW50ZXIgdmFsdWUgZG93bgorCXRvIGRvdWJsZSBib3VuZGFyeS4gIFRoaXMgaXMgdG8gZWxpbWluYXRlIGJpZy1lbmRpYW4gYWRqdXN0bWVudC4KKworCSogZml4aW5jbHVkZXM6IERlbGV0ZSBuZXRpbmV0L2lwLmggYW5kIHN1bmRldi92dWlkX2V2ZW50LmgKKwlpZiBubyBjaGFuZ2VzIGFyZSBuZWVkZWQuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IFJlamVjdCBhcnJheSB0eXBlcyBmb3IgcmVzdWx0LgorCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IExpa2V3aXNlLgorCisJKiB0bS0qLmggKEFTTV9PVVRQVVRfU0tJUCk6IFByaW50IHNpemUgYXMgdW5zaWduZWQuCisJKEFTTV9PVVRQVVRfQ09NTU9OLCBBU01fT1VUUFVUX0xPQ0FMKTogTGlrZXdpc2UuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFNpbXBsaWZ5IGRvdWJsZSB0cnVuY2F0aW9uLCBkb3VibGUgZXh0ZW5zaW9uLAorCW9yIGV4dGVuc2lvbiBmb2xsb3dlZCBieSB0cnVuY2F0aW9uLgorCisJKiBmaXhpbmNsdWRlczogRG9uJ3QgaWdub3JlIGVycm9ycyB3aGVuIG1ha2luZyBkaXJzLgorCUJ1dCBjaGVjayB3aGV0aGVyIGRpciBhbHJlYWR5IGV4aXN0cy4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogRG9uJ3Qgc2ltcGxpZnkgcmVhbCowLCBiZWNhdXNlIG9mIG5hbnMuCisKKwkqIHJlYWwuaCAoZGNvbnN0MCwgZGNvbnN0MSwgZGNvbnN0bTEpOiBEZWNsYXJlIHRoZW0uCisJKiB0cmVlLmMgKHJlYWxfemVyb3AsIHJlYWxfb25lcCk6IE5ldyBmdW5jdGlvbnMuCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBDaGVjayBmb3IgdHJpdmlhbCArLCAtLCAqIHdpdGggcmVhbHMuCisJQWxzbyB1c2UgZGNvbnN0MCBpbnN0ZWFkIG9mIGNvbXB1dGluZyB3aXRoIFJFQUxfVkFMVUVfQVRPRi4KKworVHVlIEFwciAgMyAyMjo1MjoyNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgKDMyLWJpdCBiaXQgZmllbGRzKTogU3BlY2lhbCBwYXR0ZXJucyBhZGRlZC4KKwkocHVzaCBieXRlIGFuZCBhZGp1c3Qgc3RhY2sgYnkgMik6IE5ldyBwZWVwaG9sZS4KKwlUaGVzZSBmcm9tIEJydWNlIFJvYmVydHNvbi4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ29tcGxhaW4gaWYgZm4gZGVmbiBoYXMgYHR5cGVkZWYnIGV0Yy4KKworVHVlIEFwciAgMyAyMTozOTo1NCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKHByZWV4cGFuZF9jYWxscyk6IFJlaW5zZXJ0IGNoZWNrIHRvIG5vdCBleHBhbmQgY2FsbHMKKwlhbHJlYWR5IHByZWV4cGFuZGVkLgorCitNb24gQXByICAyIDA3OjA1OjM0IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogRG9uJ3QgYmxvdyB1cCBvbiBudWxsIGxpc3QuCisKKwkqIE1ha2VmaWxlLmluIChjYzFvYmopOiBMaW5rIE9CSkNfT0JKUyBpbnN0ZWFkIG9mIENfT0JKUy4KKwkqIG9iamMtYWN0aW9ucy5jOiBDb3JyZWN0IGNvbXBpbGF0aW9uIGVycm9ycy4KKwkqIG9iamMtcGFyc2UueTogTGlrZXdpc2UuCisKK01vbiBBcHIgIDIgMDM6MzM6MTQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdGlvbnMuaDogRGVmaW5lIHRoZSBvYmpjIHRyZWUgY29kZXMuCisJRGVjbGFyZSBkb2luZ19vYmpjX3RoYW5nLgorCitGcmkgTWFyIDMwIDE3OjI4OjMwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNkYm91dC5jIChQVVRfU0RCX0VQSUxPR1VFX0VORCk6IFdyaXRlIG91dCBhc3NlbWJsZXIgbmFtZSBmb3IKKwlmdW5jdGlvbiAoaS5lLiwgdXN1YWxseSBpbmNsdWRlIGxlYWRpbmcgIl8iKS4KKworCSogc2Rib3V0LmMgKFBVVF9TREJfLi4uKTogVXNlIG5ldyBtYWNybyBTREJfREVMSU07IGl0IGRlZmF1bHRzIHRvICI7Ii4KKworRnJpIE1hciAzMCAxNToyNToyMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYyAocHJldl9hY3RpdmVfaW5zbiwgbmV4dF9hY3RpdmVfaW5zbik6IE5ldyBmdW5jdGlvbnMuCisJVGhlc2Ugc2tpcCBVU0VzIGFuZCBDTE9CQkVScy4KKwkoanVtcF9vcHRpbWl6ZSk6IFVzZSB0aGVtIGluc3RlYWQgb2YgLi4uX3JlYWxfaW5zbgorCWZvciB0aGUgc2ltcGxlIG9wdGltaXphdGlvbnMuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWx3YXlzIGluZGV4IGNvbnN0X2VxdWl2X21hcAorCXdpdGggcmVnbm8gZnJvbSBjdXJyZW50IGZ1bmN0aW9uLiAgQW5kIHNldCB1cCB0aGUgbWFwIG9ubHkgYWZ0ZXIKKwljcmVhdGluZyBhbGwgdGhlIHBzZXVkb3Mgd2Ugd2lsbCBuZWVkIGZvciB0aGUgcGFybXMuCisJVGhpcyByZXF1aXJlcyBpbnRlcm1lZGlhdGUgdGFibGVzIHBhcm1fZXF1aXZzIGFuZCBwYXJtX2NvcGllcy4KKwlNYWtlIGNvbnN0X2VxdWl2X21hcCBiaWcgZW5vdWdoIHRvIGhhbmRsZSBhbGwgdGhlIHBzZXVkb3Mgd2UKKwlleHBlY3QgdG8gbWFrZS4gIFJlY29yZCBhY3R1YWwgc2l6ZSwgYW5kIGRvbid0IGxvb2sgaW4gaXQKKwlmb3IgcmVnbm9zIHRvbyBsYXJnZS4KKwkoc3Vic3RfY29uc3RhbnRzLCBjb25zdF9lcXVpdik6IERvbid0IGFjY2VzcyBjb25zdF9lcXVpdl9tYXAKKwlpZiByZWdubyBpcyB0b28gbGFyZ2UuCisKKwkqIGZ1bmN0aW9uLmMgKHRyYW1wb2xpbmVfYWRkcmVzcyk6IFB1c2ggYW5kIHBvcCBvYnN0YWNrcyBhcm91bmQKKwljYWxsIHRvIGFzc2lnbl9vdXRlcl9zdGFja19sb2NhbC4KKworCSogZnVuY3Rpb24uYyAocHVzaF9mdW5jdGlvbl9jb250ZXh0LCBwb3BfZnVuY3Rpb25fY29udGV4dCk6CisJU2F2ZSBhbmQgcmVzdG9yZSBtYXhfcGFybV9yZWcgYW5kIHBhcm1fcmVnX3N0YWNrX2xvYy4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE1ha2Ugc2xvdHMuCisKKwkqIGMtZGVjbC5jIChjX2J1aWxkX3R5cGVfdmFyaWFudCk6IE5ldyBmdW5jdGlvbi4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBDYWxsIHRoYXQsIGZvciBBUlJBWV9UWVBFIG9ubHksIGluIGZpZWxkcyBhbmQgdmFycy4KKwkqIGMtZGVjbC5jLCBjLXR5cGVjay5jOiBBbGwgY2FsbHMgdG8gYnVpbGRfdHlwZV92YXJpYW50IHVzZSB0aGF0IG5vdy4KKworCSogZW1pdC1ydGwuYyAocmVpbnN0YXRlX2VtaXRfc3RhdHVzKTogVW51c2VkIGZ1bmN0aW9uIGRlbGV0ZWQuCisKK1RodSBNYXIgMjkgMTU6MzU6NDcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmMgKHJ0bF9pbl9jdXJyZW50X29ic3RhY2spOiBOZXcgZnVuY3Rpb24uCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgdGhhdC4KKwlUaGlzIG1ha2VzIGl0IHRydWUgdGhhdCBydGwgaXMgYWxsb2NhdGVkIGluIGN1cnJlbnRfb2JzdGFjaworCWR1cmluZyBvcHRpbWl6YXRpb24uCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX2ZyYW1lX3BvaW50ZXIpOiBTY2FuIGVxdWl2YWxlbnQgYWRkcmVzc2VzCisJb2YgcHNldWRvLXJlZ3MsIGFuZCBlbGltaW5hdGUgZnJhbWUtcG9pbnRlciB0aGVyZSB0b28uCisJKHJlbG9hZCk6IERvbid0IGRvIHRoaXMgaGVyZS4KKworCSogYy1kZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBSZXR1cm4gcGFpciBvZiBkZWNsIGFuZCB2YWx1ZS4KKwkoZmluaXNoX2VudW0pOiBHbyB0aHJvdWdoIHRoZSBsaXN0IHJlcGxhY2luZyBkZWNscyB3aXRoIG5hbWVzLgorCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmcyk6IEVsaW1pbmF0ZSBhbGwgYnV0IGZpcnN0IGFyZy4KKwlVc2UgY3VycmVudCBzZXF1ZW5jZV9zdGFjaywgaW5zbiBjaGFpbiBhbmQgcnRsX2V4cHJfY2hhaW4uCisJKHB1dF92YXJfaW50b19zdGFjayk6IERvbid0IHBhc3MgdGhvc2UgYXJncy4KKwlJZiB2YXIgaXMgbm9ubG9jYWwsIGRvbid0IGRvIGl0IG5vdzsgcHV0IGl0IG9uIGZpeHVwX3Zhcl9yZWZzX3F1ZXVlLgorCShwb3BfZnVuY3Rpb25fY29udGV4dCk6IERvIGZpeHVwX3Zhcl9yZWZzIG9uIHZhcnMgcXVldWVkIHVwLgorCisJKiB0cmVlLmMgKGZ1bmN0aW9uX21heWJlcGVybWFuZW50X29ic3RhY2spOiBNYWtlIGEgc2VwYXJhdGUKKwlzYXZlYWJsZSBvYnN0YWNrIGZvciBlYWNoIG5lc3RlZCBmdW5jdGlvbiBsZXZlbC4KKwkoaW5pdF90cmVlKTogSW5pdCB0aGlzIHZhcmlhYmxlLgorCShzYXZlX3RyZWVfc3RhdHVzLCByZXN0b3JlX3RyZWVfc3RhdHVzKTogU2F2ZSBhbmQgcmVzdG9yZSBpdC4KKwlDcmVhdGUgYW5kIGZyZWUgYSBuZXcgb2JzdGFjayBmb3IgdGhlIHB1cnBvc2UuCisJKHRlbXBvcmFyeV9hbGxvY2F0aW9uLCByZXN1bWVfdGVtcG9yYXJ5X2FsbG9jYXRpb24pOiBVc2UgdGhpcyB2YXIuCisJKHByZXNlcnZlX2RhdGEsIHByZXNlcnZlX2luaXRpYWxpemVyKTogVXNlIHRoaXMgdmFyLgorCShtYWtlX25vZGUpOiBVc2UgdGhpcyB2YXIgZm9yIFBBUk1fREVDTCBub2Rlcy4KKworCSogdHJlZS5jIChwdXNoX29ic3RhY2tzKTogTmV3IG5hbWUgZm9yIHB1c2hfb2JzdGFjay4KKwlBZGRpdGlvbmFsIGFyZyBzcGVjaWZpZXMgc2F2ZWFibGVfb2JzdGFjay4gIEFsbCBjYWxscyBjaGFuZ2VkLgorCShwb3Bfb2JzdGFja3MpOiBOZXcgbmFtZSBmb3IgcG9wX29ic3RhY2suICBBbGwgY2FsbHMgY2hhbmdlZC4KKworCSogY29uZmlnLmdjYzogQWRkIGAzMzAwJy4KKwkoZ2VuaXgpOiBGaXggdHlwbyBpbiBuYW1lIG9mIG1ha2V2YXIgZmlsZS4KKwkqIHRtLW1vdDMzMDAuaCwgeG0tbW90MzMwMC5oOiBOZXcgZmlsZXMuCisJKiBtYXRoLTMzMDAuaDogTmV3IGZpbGUuCisKKwkqIG91dHB1dC5oOiBGaXggdHlwbyBpbiBTREJfREVCVUdHSU5HX0lORk8uCisKKwkqIHRtLXN1bjM4NmkuaCAoTElOS19TUEVDKTogTW92ZWQgaGVyZSwgYW5kIC1zdGF0aWMgaGFuZGxlZC4KKwkqIHhtLXN1bjM4NmkuaDogTW92ZWQgZnJvbSBoZXJlLgorCSogdG0tYWxsaWFudC5oIChMSU5LX1NQRUMpOiBNb3ZlZCBoZXJlLCBmcm9tIHhtLWFsbGlhbnQuaC4KKworCSogdG0tY29udmV4LmgsIHRtLWk4NjAuaCwgdG0tc3B1ci5oLCB0bS12YXguaCwgdG0tdGFob2UuaCwgdG0tcHlyLmg6CisJRGVsZXRlIEZJWF9GUkFNRV9QT0lOVEVSX0FERFJFU1MuCisKKwkqIHRtLXNwYXJjLmgsIHRtLW04OGsuaDogVHVybiBvZmYgRklYX0ZSQU1FX1BPSU5URVJfQUREUkVTUy4KKwlJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUIGNvdWxkIGJlIHdyaXR0ZW4gbGF0ZXIuCisKKwkqIHRtLW02OGsuaCwgdG0tbnMzMmsuaCwgdG0tYWxsaWFudC5oLCB0bS1pMzg2LmgsIHRtLW1pcHMuaDoKKwlEZWZpbmUgSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVC4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFJlbW92ZSAubSBhbmQgLmNjIHN1ZmZpeGVzLCBsaWtlIC5jLgorCisJKiBmaW5hbC5jIChlbmRfZmluYWwpOiBGb3IgYmFzaWMgYmxvY2sgcHJvZmlsaW5nLCBkb24ndCBvdXRwdXQKKwlzb3VyY2UgZmlsZSBuYW1lLiAgSW5zdGVhZCwgYXBwZW5kICIuZCIsIGFuZCByZW1vdmUgIi5jIi4KKwkqIGdudWxpYjIuYyAoX19iYl9pbml0X2Z1bmMpOiBOZXcgbmFtZSBmb3IgX19iYl9pbml0X2Z1bmN0aW9uLgorCUNvbmRpdGlvbmFsaXplIG9uIG1jNjgwMDAsIG5vdCBtNjhrLgorCUZpeCBvdGhlciB0eXBvcy4KKworV2VkIE1hciAyOCAxNjowNzoxNSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jLCBjcGx1cy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFByZXNlcnZlIERFQ0xfRlJBTUVfU0laRQorCWZyb20gZGVmaW5pdGlvbiBwYXN0IHN1YnNlcXVlbnQgZGVjbGFyYXRpb25zLgorCisJKiBjLWRlY2wuYyAoeHJlZl90YWcpOiBJZiBnbG9iYWxfYmluZGluZ19sZXZlbCwgbWFrZSBub2RlcyBwZXJtYW5lbnQuCisKKwkqIGV4cG1lZC5jIChpbml0X2V4cG1lZCk6IFNldCB1cCBtdWx0X2lzX3ZlcnlfY2hlYXAuCisJKGV4cGFuZF9tdWx0KTogTmV2ZXIgdXNlIHNoaWZ0cyBpZiBtdWx0X2lzX3ZlcnlfY2hlYXAuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IFdoZW4gY29weWluZyB0aHJvdWdoIG5ldyB0ZW1wb3JhcnksCisJYWxsb2NhdGUgdGVtcG9yYXJ5IGZpcnN0IGFuZCB1c2UgYXMgdGFyZ2V0LgorCisJKiB0bS1tNjhrLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEFib3J0IG9uIFZPSURtb2RlLgorCisJKiByZWxvYWQxLmMgKGZpeF9mcmFtZV9wb2ludGVyX2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uCisJKGFsdGVyX2ZyYW1lX3BvaW50ZXJfYWRkcmVzc2VzKTogTmV3IGFyZyBJTlNOLiAgQ2FsbHMgY2hhbmdlZC4KKwlVc2UgdGhhdCBmdW5jdGlvbiBpbnN0ZWFkIG9mIG1hY3JvIEZJWF9GUkFNRV9QT0lOVEVSX0FERFJFU1MKKwl3aGljaCBpcyBub3cgb2Jzb2xldGUuCisJKGVsaW1pbmF0ZV9mcmFtZV9wb2ludGVyKTogVXNlIG1hY3JvIElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQKKwl0byBpbml0aWFsaXplIGRlcHRoLiAgQWJvcnQgaWYgdGhhdCBtYWNybyBpcyBtaXNzaW5nLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogSWYgbG9hZGluZyBNRU0gaW50byBhIHJlZywgdXNlIHRoZQorCW1vZGUgb2YgdGhlIE1FTSBpZiB0aGF0IGlzIG5vdCBCTEttb2RlLgorCShleHRyYWN0X2JpdF9maWVsZCk6IExpa2V3aXNlLgorCisJKiB0bS1taXBzLmggKFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZKTogQ2hhbmdlZCBmcm9tIDE2IHRvIDguCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSGFuZGxlIFNUQUNLX0JPVU5EQVJZIHdoZW4gdXNpbmcgcHVzaCBpbnNucy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogTm90ZSBob3cgUFVTSF9ST1VORElORyBhZmZlY3RzIHN0YWNrCisJcGFybSBzaXplLgorCitUdWUgTWFyIDI3IDE5OjQwOjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHBvcGxldmVsKTogT3V0cHV0IGlubGluZSBuZXN0ZWQgZnVuY3Rpb25zIGlmIG5lZWRlZC4KKwkqIGNwbHVzLWRlY2wuYzogTGlrZXdpc2UuCisKKwkqIGkzODYubWQgKGluc3YpOiBOZXcgcGF0dGVybiBhZGRlZCBmb3IgdGhlIG1vbWVudC4KKworVHVlIE1hciAyNyAxNzo0NzozNSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChsb29rdXBfb3V0ZXJfc3RhdGljX2NoYWluKTogRGVsZXRlZCwgbm8gbG9uZ2VyIHVzZWQuCisJKHRyYW1wb2xpbmVfYWRkcmVzcyk6IFJUTCBmb3IgdHJhbXBvbGluZSwgcmF0aGVyIHRoYW4gaXRzIGFkZHJlc3MsIGlzCisJc3RvcmVkIGluIHRyYW1wb2xpbmUgbGlzdC4KKwlKdXN0IGFkZCBlbnRyeSB0byBsaXN0OyBkb24ndCBmaWxsIGluIHRoZSB0cmFtcG9saW5lIGhlcmUuCisJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBGaWxsIGluIGFueSByZXF1aXJlZCB0cmFtcG9saW5lcyBoZXJlLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBNb3ZlIHRhaWwgcmVjdXJzaW9uIGVudHJ5IHRvIGFmdGVyCisJY3JlYXRpb24gb2YgZGlzcGxheSBsaXN0OyBzaXplIGNvbXB1dGF0aW9ucyBjb21lIG5leHQuCisKK1R1ZSBNYXIgMjcgMTQ6MDk6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kIChtb3ZzaSwgbW92aGksIG1vdnN0cmljdGhpLCBtb3ZxaSwgbW92c3RyaWN0cWkpOgorCUF2b2lkIGJvdGggY2xyIGFuZCBzdCBvbiB2b2xhdGlsZSBtZW0sIGJ1dCBvbmx5IG9uIDY4MDAwLgorCShTSW1vZGUgc3RvcmUgMCByZWNvZ25pemVyKTogTGlrZXdpc2UuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGFnZ19tb2RlKTogRG9uJ3QgY29uc2lkZXIgUFNJbW9kZSwgZXRjLgorCitNb24gTWFyIDI2IDIxOjEyOjE2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGNvbWJpbmVfcmVncyk6IE9ubHkgc2V0IHN1Z2dlc3RlZCBiaXQgZm9yIGZpcnN0CisJcmVnaXN0ZXIgaWYgbXVsdGktd29yZCBxdWFudGl0eS4KKwkoZmluZF9mcmVlX3JlZyk6IExvb2sgYXQgc3VnZ2VzdGVkIHJlZ3MgZm9yIGZpcnN0IGluIHNldCwgdGhlbiB1c2UKKwlhbGwgYXZhaWxhYmxlIGZvciBzdWJzZXF1ZW50IHJlZ3MuCisKK01vbiBNYXIgMjYgMTU6MDE6MDIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc3RhcnRfZW51bSk6IERvbid0IGxheSBvdXQgdGhlIHR5cGUuCisJKGZpbmlzaF9lbnVtKTogQWx3YXlzIGxheSBpdCBvdXQsIGFuZCBhbHdheXMgc2V0IHRoZSBwcmVjaXNpb24uCisJQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBlbnVtZXJhdG9ycyBpZiBpbnQgaXMgdG9vIG5hcnJvdy4KKworCSogdG0tbTY4ay5oIChOT1RJQ0VfVVBEQVRFX0NDKTogYWRkcSBhbmQgc3VicSBkbyB1cGRhdGUgY2MncworCWV2ZW4gaWYgZGVzdGluYXRpb24gaXMgYW4gYWRkcmVzcyByZWdpc3Rlci4KKworCSogYy1wYXJzZS55LCBvYmpjLXBhcnNlLnkgKGNoZWNrX25ld2xpbmUpOiBDYWxsIEhBTkRMRV9QUkFHTUEgaWYgZGVmLgorCSogb3V0LW5leHQuYzogTmV3IGZpbGUuCisJKGhhbmRsZV9wcmFnbWEpOiBOZXcgZnVuY3Rpb24uCisJKiB0bS1uZXh0LmggKEhBTkRMRV9QUkFHTUEpOiBEZWZpbmUgaXQuCisKKwkqIE1ha2VmaWxlLmluIChHTlVMSUIyKTogTmV3IHZhcmlhYmxlLgorCShnbnVsaWIyKTogVXNlIGl0LgorCShnbnVsaWIyLnBvcnRhYmxlKTogTmV3IG5hbWUgZm9yIG9sZCBydWxlLgorCShpbnN0YWxsLWhlYWRlcnMpOiBTcGxpdCBvdXQgcGFydCBvZiBpbnN0YWxsIHJ1bGUuCisJKElOU1RBTExfSEVBREVSUyk6IE5ldyB2YXJpYWJsZS4KKworCSogbWFrZS1uZXh0OiBOZXcgZmlsZS4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogR2V0IHR5cGUgZnJvbSBwcm9wZXIgcGxhY2UuCisJaW50ZXJuYWxfYXJnX3BvaW50ZXIgaXMgbm93IGFuIGFyZy4gIENvbXB1dGUgYXJnX3BvaW50ZXJfY29waWVkCisJZnJvbSB0aGF0LiAgRml4IHR5cG9zLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBDb21wdXRlIGludGVybmFsX2FyZ19wb2ludGVyIGhlcmUuCisJRml4IHR5cG9zIGhhbmRsaW5nIGluY29taW5nIHN0cnVjdCB2YWx1ZSBhZGRyZXNzLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBJZ25vcmUgbnVsbCBzdHJpbmdzIGZvdW5kIGluIHN0YWNrcC4KKworCSogY2NjcC5jIChkaXNjYXJkX2NvbW1lbnRzKTogSGFuZGxlIGJhY2tzbGFzaC1uZXdsaW5lLgorCitNb24gTWFyIDI2IDA3OjE4OjU4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmggKHRlbXBfc2xvdCwgdGVtcF9zbG90X2xldmVsKTogTm93IHNhdmVkIGJ5IGZ1bmN0aW9uLmMuCisJKiBmdW5jdGlvbi5jIChzdHJ1Y3QgdGVtcF9zbG90KTogTW92ZSBmcm9tIHN0bXQuYy4KKwkocHVzaF9mdW5jdGlvbl9jb250ZXh0LCBwb3BfZnVuY3Rpb25fY29udGV4dCk6IFNhdmUvcmVzdG9yZSB0ZW1wIHNsb3RzLgorCShhc3NpZ25fcGFybXMpOiBQYXNzIHR5cGUgdG8gbG9jYXRlX2FuZF9wYWRfcGFybXMuCisJKGxvY2F0ZV9hbmRfcGFkX3Bhcm1zKTogQWNjZXB0IFRZUEUuCisJRG9uJ3QgbmVlZCBTVEFDS19PRkZTRVQuCisJKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFBhc3MgdHlwZSB0byBsb2NhdGVfYW5kX3BhZF9wYXJtcy4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXRpYWxpemUgdGVtcF9zbG90IGluZm8uCisJKiBzdG10LmMgKHRlbXBfc2xvdCwgaW5pdF9zdG10X2Zvcl9mdW5jdGlvbiwgc2F2ZV9zdG10X3N0YXR1cywKKwlyZXN0b3JlX3N0bXRfc3RhdHVzKTogRGVsZXRlIHRlbXBfc2xvdCBzdHVmZiBmcm9tIGhlcmUuCisKK1N1biBNYXIgMjUgMjA6MjE6NTggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuKTogVHVybiBtZW1vcnkgYWRkcmVzcyBjaGVja2luZyBiYWNrIG9uLAorCWJ1dCBhbGxvdyBwdXNoX29wZXJhbmQgZm9yIHguCisKKwkqIG5zMzJrLm1kIChtb3ZzdHJzaSk6IElmIFVURUtfQVNNLCBvdXRwdXQgJDAgb3BlcmFuZCBpbiBtb3ZzZC4KKwkobW92c2kpOiBIYW5kbGUgVVRFS19BU00gbGlrZSBHTlhfVjMuCisJKiBvdXQtbnMzMmsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogQWRkIFVURUtfQVNNIGNvbmRpdGlvbmFscy4KKwkqIHRtLW1lcmxpbi5oOiBOZXcgZmlsZS4KKworCSogdG0tbnMzMmsuaCAoRlVOQ1RJT05fUFJPTE9HVUUsIEZVTkNUSU9OX0VQSUxPR1VFKToKKwlVc2Ugc2F2ZSBhbmQgcmVzdG9yZSBpbnNucyBpZiBubyBmcmFtZSBwb2ludGVyLgorCisJKiBjY2NwLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBEaXNjYXJkIGJhY2tzbGFzaC1uZXdsaW5lIHdpdGhpbiA8Li4uPi4KKworU2F0IE1hciAyNCAxMzoyMzo1MiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEFkZCBlbnRyeSBmb3IgLm0gZmlsZXMsIGZvciBPYmplY3RpdmUgQy4KKwlBbHdheXMgcGFzcyBzb21lIC1sYW5nLi4uIG9wdGlvbiB0byBjcHAuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IFN1cHBvcnQgI2ltcG9ydCBhcyB3ZWxsIGFzICNpbmNsdWRlLgorCShsb29rdXBfaW1wb3J0LCBhZGRfaW1wb3J0LCBpbXBvcnRfaGFzaCk6IE5ldyBmdW5jdGlvbnMuCisJKG1haW4pOiBIYW5kbGUgb3B0aW9ucyAtbGFuZy1jKysgYW5kIC1sYW5nLW9iamMgYW5kIC1sYW5nLWMuCisJU2V0IHZhcmlhYmxlcyBjcGx1c3BsdXMgYW5kIG9iamMuCisJKGVudW0gbm9kZV90eXBlLCBkaXJlY3RpdmVfdGFibGUpOiBBZGQgI2ltcG9ydC4KKwkoaGFuZGxlX2RpcmVjdGl2ZSk6IFRyZWF0ICNpbXBvcnQgYXMgdW5kZWZpbmVkIHVubGVzcyBvYmpjIGlzIG5vbnplcm8uCisJKGluaXRpYWxpemVfYnVpbHRpbnMpOiBJZiBvYmpjLCBkZWZpbmUgX19PQkpDX18uCisKKwkqIE1ha2VmaWxlLmluIChsYW5nLW9iamMsIGNjMW9iaik6IE5ldyB0YXJnZXRzLgorCShvYmpjLXBhcnNlLm8sIG9iamMtcGFyc2UuYywgb2JqYy1hY3Rpb25zLm8pOiBOZXcgdGFyZ2V0cy4KKwkoQ19PQkpTKTogQWRkIGMtbGFuZy5vLgorCisJKiBvYmpjLmdwZXJmOiBOZXcgZmlsZS4KKwkqIG9iamMtcGFyc2UueSwgb2JqYy1hY3Rpb25zLmMsIG9iamMtYWN0aW9ucy5oOiBOZXcgZmlsZXMuCisKKwkqIGMtbGFuZy5jOiBOZXcgZmlsZS4KKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiBOZXcgbmFtZSBmb3IgbGFuZ19kZWNvZGVfb3B0aW9uLgorCVVzZWQgZnJvbSBjLWxhbmcuYyBhbmQgb2JqYy1hY3Rpb25zLmMuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGxhbmdfaW5pdCBhbmQgbGFuZ19maW5pc2guCisJKiBjLWxhbmcuYywgb2JqYy1hY3Rpb25zLmMsIGNwbHVzLWRlY2wuYzogRGVmaW5lIHRob3NlIGZ1bmN0aW9ucy4KKworCSogYy10eXBlY2suYyAoY29tcHR5cGVzKTogQ2FsbCBtYXliZV9vYmpjX2NvbXB0eXBlcyBmb3IgcmVjb3JkIHR5cGVzLgorCSogYy1sYW5nLmMsIG9iamMtYWN0aW9ucy5jIChtYXliZV9vYmpjX2NvbXB0eXBlcyk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGMtZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUsIGZpbmlzaF9kZWNsLCBmaW5pc2hfc3RydWN0KToKKwlDYWxsIG1heWJlX29iamNfY2hlY2tfZGVjbCBiZWZvcmUgcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uLgorCSogYy1sYW5nLmMsIG9iamMtYWN0aW9ucy5jIChtYXliZV9vYmpjX2NoZWNrX2RlY2wpOiBOZXcgZnVuY3Rpb25zLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfbG9jYWwpOiBBbGlnbiBlYWNoIHNsb3Qgb25seSBhcyBuZWVkZWQuCisJTm9ybWFsbHkgZG9uJ3Qgcm91bmQgc2l6ZSB1cCwganVzdCBhbGlnbiBmaXJzdC4KKwlOZXcgYXJndW1lbnQgQUxJR04gc3BlY2lmaWVzIGFsaWdubWVudCwgb3IgMCBmb3IgdGhhdCBvZiBNT0RFLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKGFzc2lnbl9vdXRlcl9zdGFja19sb2NhbCk6IExpa2V3aXNlLgorCSogZmluYWwuYyAoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBSb3VuZCBmcmFtZSBzaXplIHRvIFNUQUNLX0JPVU5EQVJZLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcCwgcHJlc2VydmVfdGVtcF9zbG90cyk6CisJKGZyZWVfdGVtcF9zbG90cyk6IE1vdmVkIGZyb20gc3RtdC5jLgorCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogVXNlIGNvbnZlcnRfdW5pdHMgdG8gYXZvaWQgb3ZlcmZsb3cuCisKK0ZyaSBNYXIgMjMgMDA6NTI6MzQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBXYXJuIGlmIGFycmF5IGVsZW1lbnQgaXMgaW5jb21wbGV0ZS4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogVXNlIGNvbnZlcnRfdW5pdHMgdG8gY29tcHV0ZQorCXNpemUgaW4gYnl0ZXMuCisJKG91dHB1dF9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLCBmb3Igbm9uLWJpdCBmaWVsZHMuCisKKwkqIGMtdHlwZWNrLmMgKGNoZWNrX2Zvcm1hdCwgbXlfc3RyY2hyKTogTmV3IGZ1bmN0aW9ucy4KKwkoYnVpbGRfZnVuY3Rpb25fY2FsbCk6IENhbGwgY2hlY2tfZm9ybWF0LgorCSogYy1kZWNsLmMgKGxhbmdfZGVjb2RlX29wdGlvbnMpOiBIYW5kbGUgLVdmb3JtYXQuCisJKiBjLXRyZWUuaCAod2Fybl9mb3JtYXQpOiBOZXcgZmxhZy4KKworCSogeG0taHA5azMyMC5oIChVU0VfQ19BTExPQ0EpOiBEZWZpbmUgaWYgbm90IGNvbXBpbGluZyB3aXRoIEdDQy4KKworVGh1IE1hciAyMiAyMzozNTozMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChnZXRfcGFybV9pbmZvKTogVm9pZCBwYXJtIGlzIHNwZWNpYWwgb25seSBpZiBubyBuYW1lLgorCisJKiBsb29wLmMgKG1heV9ub3Rfb3B0aW1pemUpOiBTdGF0aWMgdmFyIHJlcGxhY2VzIGxvY2FsIGBtYXlfbm90X21vdmUnLgorCShzdHJlbmd0aF9yZWR1Y2UpOiBEb24ndCBhY2NlcHQgdGhvc2UgcmVncyBhcyBnaXZzLgorCitUaHUgTWFyIDIyIDA2OjQ1OjE2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQ29tcHV0ZSBkZWx0YSB0byBmcmFtZQorCWZyb20gdGhlIGFkZHJlc3MgYXQgd2hpY2ggaXQgd2FzIGFsbG9jYXRlZC4KKworV2VkIE1hciAyMSAxNzozNjo0MCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWNvZy5jOiBJbmNyZWFzZSBudW1iZXIgb2YgY2hhbmdlcyBzYXZlZCBmb3IgdmFsaWRhdGVfY2hhbmdlLgorCSh2YWxpZGF0ZV9jaGFuZ2UpOiBJZiBJTlNOID09IDAgYW5kIGluIGdyb3VwLCBhZGQgdG8gZ3JvdXA7IGlmIG5vdCwKKwlhbHdheXMgT0suCisJKGFwcGx5X2NoYW5nZV9ncm91cCk6IElmIElOU04gPT0gMCwgY2hhbmdlIGlzIGFsd2F5cyBPSy4KKworCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IElmIGV4dGVuZGluZyBibG9jaywgZG9uJ3QgY2FsbAorIAljc2VfZW5kX29mX2Jhc2ljX2Jsb2NrIHdpdGggbnVsbCBpbnNuIGlmIHdlIGdvdCB0byBlbmQgb2YgZnVuY3Rpb24uCisKK1dlZCBNYXIgMjEgMTQ6MDg6MzUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IERvbid0IHJldXNlIHBlbmRpbmdfc3RhY2tfYWRqdXN0IGZvciBhcmdibG9jaworCWlmIGluaGliaXRfZGVmZXJfcG9wLgorCisJKiBleHByLmMgKHB1c2hfYmxvY2spOiBOZXcgYXJndW1lbnQgRVhUUkEuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCShlbWl0X3B1c2hfaW5zbik6IFVzZSB0aGF0IGZvciB0aGUgcGFkZGluZyB3aGVuIHVzaW5nIHB1c2hfYmxvY2suCisKKwkqIHRtLXNwYXJjLmggKEZVTkNUSU9OX0FSRywgRlVOQ1RJT05fSU5DT01JTkdfQVJHKToKKwlPbmx5IHdvcmQtYWxpZ25lZCBCTEttb2RlcyBjYW4gZ28gaW4gcmVnaXN0ZXJzLgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUyk6IExpa2V3aXNlLgorCSogdG0tc3B1ci5oIChGVU5DVElPTl9BUkcsIEZVTkNUSU9OX0lOQ09NSU5HX0FSRyk6IExpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfY2FsbCk6IElmIGVuY291bnRlciBhIHN0YWNrIHBhcm0gYmVmb3JlIG9mZnNldAorCWdldHMgdXAgdG8gemVybywgbWFrZSBpdCB6ZXJvLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogTGlrZXdpc2UuCisKKwkqIG5zMzJrLm1kIChzdGFjayBhZGp1c3QgaW5zbik6IERvbid0IHVzZSBjbXBkIG9yIGNtcHFkIG9uIFNlcXVlbnQuCisJKiB0bS1zZXF1ZW50LmggKFNFUVVFTlRfQURKVVNUX1NUQUNLKTogRGVmaW5lIHRoaXMuCisKKwkqIG1ha2UtaHA5azMyMGcgKEFSKTogRGVmaW5lIGl0LgorCSogTWFrZWZpbGUuaW4gKGdudWxpYik6IFVzZSBPTERBUi4KKwkoT0xEQVIpOiBOZXcgdmFyaWFibGUuCisKKwkqIG1ha2UtaXJpczogTmV3IGZpbGUuCisKKwkqIHhtLWlyaXMuaDogVW5kZWYgYWxsb2NhIGJlZm9yZSBkZWZpbmluZyBpdC4KKworCSogTWFrZWZpbGUuaW4gKHN0YWdlMSwgLi4uKTogQWx3YXlzIGNvcHkgZ251bGliLCBuZXZlciBsaW5rLgorCisJKiBjY2NwLmMgKG1haW4pOiBVc2UgLWQuLi5NLi4uIGFzIG9wdGlvbiBmb3IgbWFjcm8gZHVtcC4KKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLWQqIHRvIGNwcC4KKworVHVlIE1hciAyMCAwMTo0MTo0OSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoZGF0YWRlZik6IEVycm9yIG1lc3NhZ2UgZml4LgorCSogY3BsdXMtcGFyc2UueTogTGlrZXdpc2UuCisKK01vbiBNYXIgMTkgMTU6MjY6MjcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFNhdmUgc3RhdGljIGNoYWluIHZhbHVlLgorCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFN1YnN0aXR1dGUgaXQgd2hlcmUgY2FsbGVkIGZ1bmN0aW9uCisJY29waWVzIGl0cyBzdGF0aWMgY2hhaW4uCisJKiBlbWl0LXJ0bC5jIChpbml0X2VtaXRfb25jZSk6IE1ha2Ugc3RhdGljX2NoYWluX2luY29taW5nX3J0eAorCWRpc3RpbmN0LgorCisJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX2NvbnRhaW5zX2Z1bmN0aW9ucyk6IE5ldyB2YXJpYWJsZS4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXRpYWxpemUgaXQuCisJKHBvcF9mdW5jdGlvbl9jb250ZXh0KTogU2V0IGl0IHRvIDEuCisJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKToKKwlEb24ndCBpbmxpbmUgZm4gd2l0aCBuZXN0ZWQgZm5zLgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBEb24ndCByZXBsYWNlIGZwCisJYXMgZGVzdGluYXRpb24gb2YgYXNzaWdubWVudC4KKworCSogYXNzZXJ0LmggKF9fYXNzZXJ0KSBbbm90IF9fR05VQ19fXTogUmVuYW1lIGFyZyB0byBhdm9pZCBzdHJpbmdpZnkuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IElmIHN0cnVjdF92YWx1ZV9pbmNvbWluZ19ydHgKKwlpcyAwLCBnZXQgdGhlIGFkZHJlc3MgZnJvbSBmaXJzdCBwYXJtIHJlZyBvciBmaXJzdCBzdGFjayBzbG90LgorCShhc3NpZ25fcGFybXMpOiBJbiB0aGF0IGNhc2UsIHNraXAgdGhlIHNwYWNlIGl0IG9jY3VwaWVzLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IElmIFNUUlVDVF9WQUxVRSBpcyAwLCBwYXNzIGFkZHJlc3MgYXMgcGFybQorCWV2ZW4gaWYgdGhhdCBtZWFucyB1c2luZyBhIHJlZ2lzdGVyLgorCitNb24gTWFyIDE5IDA3OjQzOjQ2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBDaGVjayBmb3Igbm9uLUFOU0kgdmFyYXJncworCWFzIHdlbGwgYXMgQU5TSSB2YXJhcmdzLgorCUFsbG93IGlubGluaW5nIG9mIGZ1bmN0aW9ucyB3aXRoIGxhcmdlIGZyYW1lcyBub3cgdGhhdCB3ZSBjYW4gc2hhcmUKKwl0aGVtIGJldHdlZW4gaW5saW5lZCBmdW5jdGlvbnMuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBTYXZlIHN0YXRpYyB2YXJzIGluIGNhc2Ugd2Ugd2VyZSBjYWxsZWQKKwlyZWN1cnNpdmVseS4KKwlNYWtlIHN1cmUgd2UgZG9uJ3QgZnJlZSB0ZW1wb3Jhcnkgc3RhY2sgc2xvdCB1c2VkIGZvciBhcmd1bWVudC4KKworCSogdHJlZS5kZWY6IEFkZCBuZXcgY29kZSB0eXBlcyAnPCcsICcxJywgYW5kICcyJyBmb3IgY29tcGFyaXNvbiwKKwl1bmFyeSBhcml0aCwgYW5kIGJpbmFyeSBhcml0aCwgcmVzcC4gIENoYW5nZSBzb21lICdlJyB0eXBlcyB0byB0aG9zZS4KKwkqIGV4cHIuYyAoaW5pdF9jb21wYXJpc29ucyk6IERlbGV0ZSBmbi4KKwkoZXhwYW5kX2V4cHIpOiBIYW5kbGUgWCA/IEEgYmlub3AgQiA6IEEgd2l0aCBjb3B5IGFuZCBjb25kaXRpb25hbCBvcC4KKwlJbiBYID8gQSA6IEIsIGlmIEEgYW5kIEIgYm90aCBzaW1wbHksIGRvIHdpdGggb25seSBvbmUganVtcC4KKwlSZW1vdmUgZXhpc3RpbmcgdGVzdCBmb3IgdGhpbmdzIGxpa2UgeCA9IHkgfCAoYSA9PSBiKS4KKwkocHJlZXhwYW5kX2NhbGxzKTogSGFuZGxlIG5ldyBjb2RlIHR5cGVzIGZvciBleHByZXNzaW9ucy4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IE5vIGxvbmdlciBjYWxsIGluaXRfY29tcGFyaXNvbnMuCisJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IE5vIGxvbmdlciBzdGF0aWMuCisJSWdub3JlIE5PTl9MVkFMVUVfRVhQUi4KKwlPbmx5IHJlcXVpcmUgY29uc3RhbnRzIGlmIG5ldyBvcGVyYW5kIE9OTFlfQ09OU1QgaXMgbm9uLXplcm8uCisJKGZvbGQpOiBUcmVhdCB0cmVlIGNvZGUgdHlwZXMgJzwnLCAnMScsIGFuZCAnMicgYXMgJ2UnLgorCUhhbmRsZSBjYXNlcyB3aGVyZSBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiBpcyBhcHBsaWVkIHRvIGEgY29tcG91bmQsCisJY29uZGl0aW9uYWwsIG9yIGNvbXBhcmlzb24gb3BlcmF0aW9uIGJ5IGRpc3RyaWJ1dGluZyB0aGUgYXJpdGhtZXRpYworCW9wZXJhdGlvbiBpbnNpZGUgdGhlIGNvbXBvdW5kLCBjb25kaXRpb25hbCwgb3IgY29tcGFyaXNvbiBvcGVyYXRpb24uCisJVXBkYXRlIGNhbGxzIHRvIG9wZXJhbmRfZXF1YWxfcC4KKwlDb252ZXJ0IEEgPyBCIDogQiB0byAoQSwgQikuCisJKiBleHBtZWQuYyAobWFrZV90cmVlKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIHRyZWUuaDogRGVmaW5lIG5ldyBtYWNybyBUUkVFX0NPREVfQ0xBU1MuCisJRGVmaW5lIGV4dGVybiBtYWtlX3RyZWUuCisJKiBwcmludC10cmVlLmMgKHBydHlwZWluZm8pOiBOZXcgbmV3IG1hY3JvIFRSRUVfQ09ERV9DTEFTUy4KKwkoZHVtcCk6IFVzZSBuZXcgbWFjcm8gYW5kIHRyZWF0IHR5cGVzICc8JywgJzEnLCBhbmQgJzInIGFzICdlJy4KKwkqIGNwbHVzLWxleC5jIChpbml0X2xleCk6IExpa2V3aXNlLgorCSogdHJlZS5jIChtYWtlX25vZGUsIGNvcHlfbm9kZSk6IERpdHRvLgorCitNb24gTWFyIDE5IDAwOjA1OjUwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKG1haW4pOiBUcmFwIFNJR1BJUEUuCisKK1NhdCBNYXIgMTcgMTM6MDk6NDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBBbHNvIGRlbGV0ZSBuby1vcCBpbnNucyB0byBzdG9yZSBiaXQgZmllbGRzLgorCisJKiBzcGFyYy5tZCAocGF0dGVybnMgZm9yIGFkZGNjLCBzdWJjYywgYW5kY2MsIGFuZG5jYywgb3JjYywgb3JuY2MpOgorCShhbmQgeG9yY2MsIHhvcm5jYyk6IFVzZSBhcml0aDMyX29wZXJhbmQgYXMgcHJlZGljYXRlLgorCitGcmkgTWFyIDE2IDE1OjE5OjIxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tdm1zLmggKE5PX0RPTExBUl9JTl9MQUJFTCk6IERlZmluZSB0aGlzLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBVc2UgSU5JVF9DVU1VTEFUSVZFX0lOQ09NSU5HX0FSR1MKKwlpZiB0aGF0IGlzIGRlZmluZWQuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBgc3RhdGljJyBhbHdheXMgcHJldmFpbHMsIGZvciBmdW5jdGlvbnMuCisJKiBjcGx1cy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IExpa2V3aXNlLgorCisJKiBzcGFyYy5tZCAocGF0dGVybnMgZm9yIGFuZG5jYywgb3JuY2MsIHhvcm5jYyk6CisJRGVsZXRlIGAlJyBmcm9tIGNvbnN0cmFpbnQuCisJKHBhdHRlcm5zIGZvciBhZGRjYywgYW5kY2MsIG9yY2MsIHhvcmNjKTogVXNlIHN5bW1ldHJpY2FsIHByZWRpY2F0ZXMuCisJKHBlZXBob2xlIGZvciByZXR1cm5pbmcgc3VtKTogTGlrZXdpc2UuCisKK1RodSBNYXIgMTUgMjI6MDI6MDIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHRfYWRkKTogSGFuZGxlIGVpdGhlciB4IG9yIG11bHQgaGF2aW5nIFZPSURtb2RlLgorCUFsd2F5cyBwYXNzIGJvdGggYXJncyB0byB0eXBlX2Zvcl9tb2RlLgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQsIHN0b3JlX2JpdF9maWVsZCk6CisJV2hlbiBjaGFuZ2luZyBtb2RlIG9mIGEgcmVnIHRvIFNJbW9kZSwgYWxzbyBkbyBiaWctZW5kaWFuIGNvcnJlY3Rpb24uCisJQ29uc2lzdGVudGx5IHVzZSBCWVRFU19CSUdfRU5ESUFOIHRvIGRlY2lkZSBob3cgYml0cyBhcmUgbnVtYmVyZWQuCisJRml4IHN0cmF5IHJlZiB0byBDT0RFX0ZPUl9leHR6diBpbiBjYXNlIGZvciBleHR2LgorCisJKiBjLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IEFsbG93IGZ1bmN0aW9uIHR5cGUgYXJncyB0byBgIScsCisJc2luY2UgdGhleSBjb252ZXJ0IHRvIHBvaW50ZXJzLgorCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCisKK1RodSBNYXIgMTUgMDY6MzA6MjEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChjb252ZXJ0X3RvX21vZGUpOiBEb24ndCBjb3B5IGNvbnN0YW50IHRvIHJlZ2lzdGVyLgorCVVzZSBHRVRfTU9ERV9DTEFTUyBpbnN0ZWFkIG9mIGludGVnZXJfbW9kZV9wLgorCShpbnRlZ2VyX21vZGVfcCk6IERlbGV0ZSBvYnNvbGV0ZSBmbiAob25seSB1c2UgYWJvdmUpLgorCisJKiBsb29wLmMgKHByb2R1Y3RfY2hlYXBfcCk6IERvbid0IGNyYXNoIGlmIG5vIGluc25zIG5lZWQgdG8gbXVsdGlwbHk7CisJdGhhdCBjYXNlIGlzIGNoZWFwLgorCitUaHUgTWFyIDE1IDAyOjExOjM0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogU2V0IG5fbm9uX2ZpeGVkX3JlZ3MuCisJKiBsb29wLmMgKHNjYW5fbG9vcCwgc3RyZW5ndGhfcmVkdWNlKTogU2V0IHRocmVzaG9sZCBmcm9tIG51bSBvZiByZWdzLgorCitXZWQgTWFyIDE0IDE5OjMxOjE4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IEFsbG93IEJMS21vZGUgcGFybXMuCisJQWxsb3cgYWRkcmVzcyBvZiBhZ2dyZWdhdGUgcGFybS4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IENyZWF0ZSBhbmQgbWFpbnRhaW4gY29uc3RfZXF1aXZfbWFwCisJYW5kIGNvbnN0X2FnZV9tYXAuICBJbmNyZW1lbnQgY29uc3RfYWdlIGF0IGJhc2ljIGJsb2Nrcy4KKwlEb24ndCBzdWJzdGl0dXRlIGNvbnN0YW50IHZhbHVlcyBmb3IgcGFybSByZWdzOworCWluc3RlYWQsIGNhbGwgdHJ5X2NvbnN0YW50cyBmb3IgZWFjaCBpbnNuIGNvcGllZC4KKwlXaGVuIHN0cnVjdHVyZV92YWx1ZV9hZGRyIGluJ3QgMCwgY2hlY2sgYWdncmVnYXRlX3ZhbHVlX3AgdG9vLgorCVJvdW5kIHNpemUgb2YgcGFybV9tYXAgdXAuCisJRG9uJ3QgaW5pdCBpbmxpbmVfZnBfcnR4IHVubGVzcyBpdCBpcyB1c2VkLgorCURvbid0IHVzZSBlbWl0X21vdmVfaW5zbiB3aGVuIGNvcHlpbmcgYSBTRVQgaW5zbi4KKwkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBIYW5kbGUgaW5saW5lX3RhcmdldCBiZWluZyB1c2VkIHdoZW4gMC4KKwlEb24ndCBidWlsZCBhIFNVQlJFRyBvZiBhIENPTlNUX0lOVC4KKwlGb3IgUExVUyBvZiBjb25zdGFudCwgZG8gcGx1c19jb25zdGFudCB3aGV0aGVyIG1lbSBhZGRyZXNzIG9yIG5vdC4KKwlTZXQgdXAgaW5saW5lX2ZwX3J0eCBpZiB3ZSBuZWVkIGl0LgorCUNsZWFyIFJUWF9VTkNIQU5HSU5HX1AgaW4gYWxsIE1FTXMuCisJKHRyeV9jb25zdGFudHMsIHN1YnN0X2NvbnN0YW50cyk6IE5ldyBmdW5jdGlvbnMuCisJKGFjY2Vzc19wYXJtX21hcCk6IE5vIGJpZy1lbmRpYW4gb2Zmc2V0IGZvciBCTEttb2RlIHBhcm1zLgorCURvIGNoYW5nZV9hZGRyZXNzIGlmIG1vZGUgZG9lc24ndCBtYXRjaC4KKwkoY29uc3RfZXF1aXYpOiBOZXcgZnVuY3Rpb24uCisJKHRyeV9mb2xkX2NjMCk6IFVzZSB0aGF0IGZ1bmN0aW9uLgorCUluICJzbWFsbCB3aW4iIGNhc2UsIGV4dHJhY3QgQ09ERV9MQUJFTCBvdXQgb2YgTEFCRUxfUkVGIGZvciBlbWl0X2p1bXAuCisJKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBTZXQgcmV0dXJuX2xhYmVsIHRvIDAuCisKKwkqIHJlY29nLmMgKGNhbmNlbF9jaGFuZ2VzLCBudW1fdmFsaWRhdGVkX2NoYW5nZXMpOiBOZXcgZnVuY3Rpb25zLgorCitUdWUgTWFyIDEzIDE3OjMwOjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogRGVmaW5lIGBWJyBjb25zdHJhaW50LgorCitUdWUgTWFyIDEzIDE3OjEwOjQwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNwbHVzLWxleC5jIChvcGVyYXRvcl9uYW1lX3N0cmluZywgaW5pdF9sZXgpOiBDYXN0IGVudW1zIHRvIGludHMKKwl0byBhdm9pZCBlcnJvcnMgZnJvbSBzb21lIEMgY29tcGlsZXJzLgorCisJKiBjcGx1cy1pbml0LmMgKGV4cGFuZF9hZ2dyX3ZiYXNlX2luaXQpOiBNYWtlIGRlY2xhcmF0aW9ucyBjb25zaXN0ZW50LgorCitTdW4gTWFyIDExIDE4OjM3OjQzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbnMzMmsubWQgKG1vdnNpKTogRmx1c2ggc3B1cmlvdXMgYXJnIHRvIGFib3J0LgorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliLnBvcnRhYmxlLCBzdGFtcC1nbnVsaWIyKTogSWdub3JlIGVycm9yIGluIHJhbmxpYi4KKworU2F0IE1hciAxMCAxOTozODozNiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5oOiBBZGQgbmV3IGZpZWxkcyB0ZW1wX3Nsb3RzIGFuZCB0ZW1wX3Nsb3RfbGV2ZWwuCisJKiBzdG10LmMgKHN0cnVjdCB0ZW1wX3Nsb3QpOiBOZXcgc3RydWN0dXJlLgorCShpbml0X3N0bXRfZm9yX2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSB0ZW1wIHNsb3QgaW5mby4KKwkoc2F2ZV9zdG10X3N0YXR1cywgcmVzdG9yZV9zdG10X3N0YXR1cyk6IFNhdmUgYW5kIHJlc3RvcmUgdGVtcCBzbG90cy4KKwkoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlbW92ZSByZWR1bmRhbnQgYXNzaWdubWVudCB0byBMQVNUX0VYUFJfVFlQRS4KKwlGcmVlIGFueSB0ZW1wb3JhcmllcyBtYWRlLgorCShhc3NpZ25fc3RhY2tfdGVtcCwgcHJlc2VydmVfdGVtcF9zbG90cywgZnJlZV90ZW1wX3Nsb3RzKTogTmV3IGZucy4KKwkoZXhwYW5kX2V4cHJfc3RtdCk6IElmIGxhc3QgZXhwcmVzc2lvbiBoYWQgYSB2YWx1ZSAoaS5lLiwgaW4gKHsuLn0pCisJZ3JvdXBpbmcpLCBtYXliZSBwcmVzZXJ2ZSB0ZW1wb3Jhcmllcy4KKwkoZXhwYW5kX3JldHVybiwgdGFpbF9yZWN1cnNpb25fYXJncyk6IEZyZWUgYW55IHRlbXBvcmFyaWVzIGFsbG9jYXRlZC4KKwkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzKTogUHVzaCB0ZW1wb3Jhcnkgc3RhY2sgbGV2ZWwuCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBQb3AgdGVtcG9yYXJ5IHN0YWNrIGxldmVsLgorCShleHBhbmRfZGVjbCk6IFVzZSBrZXB0IHRlbXBvcmFyeSBzbG90cyBmb3IgYXV0b21hdGljIHZhcmlhYmxlcy4KKwlGcmVlIHRlbXBvcmFyeSBzbG90cyBhZnRlciBjb21wdXRpbmcgc2l6ZS4KKwkoZXhwYW5kX2RlY2xfaW5pdCwgZXhwYW5kX2NsZWFudXBzLCBleHBhbmRfZW5kX2Nhc2UpOiBGcmVlIGFueQorCWFsbG9jYXRlZCB0ZW1wb3Jhcmllcy4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVXNlIGFzc2lnbl9zdGFja190ZW1wIGluc3RlYWQgb2YKKwlnZXRfc3RydWN0dXJlX3ZhbHVlX2FkZHIuCisJTWFrZSBhIG5ldyB0ZW1wb3JhcnkgbGV2ZWwgd2hpbGUgZXhwYW5kaW5nIGEgY2FsbCBhbmQgZnJlZQorCXRlbXBvcmFyaWVzIGFzIHNvb24gYXMgd2Uga25vdyB0aGV5IGFyZW4ndCBnb2luZyB0byBiZSByZXVzZWQuCisJKHN0b3JlX29uZV9hcmcpOiBGcmVlIGFueSB0ZW1wb3Jhcnkgc2xvdHMgbWFkZSBmb3IgYXJnIGJlaW5nIHN0b3JlZC4KKwkqIGZ1bmN0aW9uLmMgKGdldF9zdHJ1Y3R1cmVfdmFsdWVfYWRkcik6IERlbGV0ZSBmbi4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IE5vIGxvbmdlciBpbml0aWFsaXplIHN0cnVjdHVyZSB2YWx1ZSBhZGRyLgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgdGVtcG9yYXJ5IHNsb3QgZm9yCisJaW5saW5lZCBmdW5jdGlvbidzIGZyYW1lLgorCUZyZWUgdGVtcG9yYXJpZXMgbmVlZGVkIHdoaWxlIGV2YWx1YXRpbmcgYXJndW1lbnRzLgorCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCwgZG9fanVtcHMpOiBGcmVlIHRlbXBzIG5vIGxvbmdlciBuZWVkZWQuCisJKHN0b3JlX2V4cHIpOiBEb24ndCBjaGVjayBmb3Igc3RydWN0dXJlIHZhbHVlIGFkZHIuCisJKHNhdmVfbm9uY29waWVkX3BhcnRzLCBleHBhbmRfZXhwcik6IENhbGwgYXNzaWduX3N0YWNrX3RlbXAKKwlpbnN0ZWFkIG9mIGFzc2lnbl9zdGFja19sb2NhbC4KKwkocHJlZXhwYW5kX2NhbGxzKTogTm8gbG9uZ2VyIHNwZWNpYWwtY2FzZSBmbnMgcmV0dXJuaW5nIHN0cnVjdHVyZXMuCisJKiBjLXR5cGVjay5jIChjX2V4cGFuZF9hc21fb3BlcmFuZHMpOiBGcmVlIGFueSB0ZW1wb3JhcmllcyBtYWRlLgorCSogY3BsdXMtdHlwZWNrLmMgKGNfZXhwYW5kX2FzbV9vcGVyYW5kcyk6IERpdHRvLgorCSogY3BsdXMtZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBEaXR0by4KKwkqIGNwbHVzLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogRGl0dG8uCisJKiBjcGx1cy10eXBlMi5jIChtYWtlX21lcmdlZF9yZWYpOiBQcmVzZXJ2ZSByZXN1bHQgYW5kIGZyZWUKKwlvdGhlciB0ZW1wb3Jhcmllcy4KKwkqIGNwbHVzLXBhcnNlLnkgKHN0bXQpOiBGcmVlIGFueSB0ZW1wb3JhcmllcyBpbiBFWENFUFQgY2xhdXNlLgorCitTYXQgTWFyIDEwIDE2OjA3OjI3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChvdGhlcl9yZWdfdXNlX3ApOiBOZXcgbmFtZSBmb3Igb25seV9yZWdfdXNlX3AuCisJUmV0dXJuIDAgaWYgSU4gPT0gRVhQUi4KKwkoY2hlY2tfZWxpbWluYXRlX2Jpdik6IFJlLWludmVydCB0aGUgdGVzdCB1c2luZyBvdGhlcl9yZWdfdXNlX3AuCisKK0ZyaSBNYXIgIDkgMTg6MzQ6MTEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBIYW5kbGUgUFNJbW9kZSBpbnNucy4KKworRnJpIE1hciAgOSAxODoyNDoxMSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChsb2NhbF9hbGxvYyk6IENsZWFyIHF0eV9waHlzX3N1Z2cgYW5kIF9oYXNfc3VnZworCXdoZW4gZG9pbmcgbG9vcCwgbm90IGp1c3Qgd2hlbiBkb2luZyBiemVyby4KKwlBZGQgbmV3IHZhcnMgcXR5X3BoeXNfY29weV9zdWdnIGFuZCBfaGFzX2NvcHlfc3VnZy4KKwkoYmxvY2tfYWxsb2MpOiBSZXdvcmsgZGV0ZWN0aW9uIG9mIHBvc3NpYmxlIHRpZWQgcmVnaXN0ZXJzIHRvIHVzZQorCWV4dHJhY3RlZCBpbnNuIG9wZXJhbmRzIHJhdGhlciB0aGFuIHRyeWluZyB0byBwYXJzZSBvcGVyYW5kcyBmcm9tCisJUlRMIGRlc2NyaXB0aW9uLgorCURvbid0IHRpZSByZWdpc3RlcnMgaWYgb3V0cHV0IGhhcyBlYXJseWNsb2JiZXIuCisJRm9yIFJFR19OT19DT05GTElDVCwgY2hlY2sgY29tbXV0YXRpdml0eSBvZiBleHByZXNzaW9uIGluIFJFR19FUVVBTCwKKwlyYXRoZXIgdGhhbiBvZiBvcGVyYXRpb24gb2YgYXR0YWNoZWQgaW5zbi4KKwlJZiBpbnNuIGlzIGEgc2ltcGxlIGNvcHksIHBhc3MgdGhhdCBpbmZvIHRvIGNvbWJpbmVfcmVncy4KKwkoY29tYmluZV9yZWdzKTogRm9yIG11bHRpLXdvcmQgaXRlbXMsIG1hcmsgYWxsIHJlZ2lzdGVycyBhY3R1YWxseQorCXVzZWQgYXMgcHJlZmVycmVkLgorCUlmIHRoZSBpbnNuIGlzIGEgc2ltcGxlIGNvcHksIHJlY29yZCBoYXJkIHJlZyBzdWdnZXN0aW9ucyBpbgorCXF0eV9waHlzX2NvcHlfc3VnZyBpbnN0ZWFkIG9mIHF0eV9waHlzX3N1Z2cuCisJKGZpbmRfZnJlZV9yZWcpOiBDb3JyZWN0bHkgY2hlY2sgZm9yIGFsbCByZWdpc3RlcnMgdXNlZC4KKwlJZiBxdHlfcGh5c19oYXNfY29weV9zdWdnIGlzIG5vbi16ZXJvLCB1c2UgdGhhdCByZWdpc3RlciBzZXQuICBJZgorCW5vbmUgb2YgdGhlbSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQsIHRyeSB0aGUgb3RoZXIgc3VnZ2VzdCBzZXQgaWYKKwlpdCBleGlzdHMuCisKK1RodSBNYXIgIDggMDI6MTc6NTAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEZXRlY3QgdGFibGVqdW1wcyB0aGF0IGFsd2F5cyBnbyB0bworCXRoZSBzYW1lIHBsYWNlLCBhbmQgY2hhbmdlIHRvIHVuY29uZGl0aW9uYWwganVtcHMuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFNpbXBsaWZ5IGNvbXBhcmlzb24gb2YgaW50ZWdlciB2YWx1ZSB3aXRoIHNlbGYuCisKKwkqIHJ0bC5oIChGVU5DVElPTl9GTEFHUy4uLik6IEFkZGl0aW9uYWwgZmxhZyBiaXRzIGZvciBzYXZpbmcKKwljdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfcG9pbnRlciwgYW5kIHNldmVyYWwgb3RoZXJzLgorCShGVU5DVElPTl9QUkVURU5EX0FSR1NfU0laRSk6IE5ldyBjb21wb25lbnQgaW4gaW5saW5lIGhlYWRlci4KKwkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmUpOiBSZWNvcmQgdGhlc2UgZmxhZ3MuCisJKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBHZXQgdGhlbSBvdXQgYWdhaW4uCisJQWxzbyByZXN0b3JlIGN1cnJlbnRfZnVuY3Rpb25fYXJnc19zaXplIGFuZCAuLi5fcHJldGVuZF8uLi4KKworCSogbnMzMmsubWQgKG1vdnNpLCBtb3ZkaSk6IEhhbmRsZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfcHJlcGFyZV9zeW1ib2wpOiBOZXcgZnVuY3Rpb24sIG91dHB1dCBOX1NPTCBzdGFiLgorCShkYnhvdXRfc3ltYm9sLCBkYnhvdXRfcGFybXMsIGRieG91dF9yZWdfcGFybXMpOiBDYWxsIGl0LgorCSogZmluYWwuYyAob3V0cHV0X3NvdXJjZV9maWxlKTogTmV3IGZ1bmN0aW9uLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IERvIEJZVEVTX0JJR19FTkRJQU4gb2Zmc2V0CisJb25seSB3aXRoaW4gYSB3b3JkLgorCisJKiBzdGRhcmcuaDogVXNlIF9WQV9MSVNUXyBhcyBtYWNybyB0byBpbmRpY2F0ZSBhbHJlYWR5IGxvYWRlZC4KKworCSogZml4aW5jbHVkZXM6IFN1cHBseSBtaXNzaW5nIHNlbWljb2xvbiBpbiBuZXRpbmV0L2lwLmguCisKKwkqIHRtLWFsbGlhbnQuaCAoRlVOQ1RJT05fUFJPTE9HVUUpOiBVc2UgYGxpbmtsJyBvbiA2ODAyMC4KKworCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0cyk6IEZvciBzdWJ1bmlvbiwga2VlcCBsYXJnZXN0IGNhbmRpZGF0ZS4KKworV2VkIE1hciAgNyAwMDozNzoyMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGluX3NlcXVlbmNlX3ApOiBOZXcgZnVuY3Rpb24uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBGb3IgQlVJTFRfSU5fU0FWRVJFR1MsIGluc2VydCBhZnRlcgorCXRoZSBpbml0aWFsIE5PVEUgaW5zbi4KKworCSogZGJ4b3V0LmMgKGRieG91dF9maW5pc2hfc3ltYm9sKTogTmV3IGFyZ3VtZW50IGlzIGEgZGVjbCBvciAwLgorCU91dHB1dCBsaW5lIG51bWJlciBpbiBkZXNjIGZpZWxkLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gcGFzcyB0aGUgYXJndW1lbnQuCisKKwkqIHRyZWUuaCAoVFJFRV9QVUJMSUMpOiBNb3ZlIGJhY2sgdG8gdHJlZV9jb21tb24uCisKKwkqIGRieG91dC5jIChkYnhvdXRfaW5pdCk6IE91dHB1dCB3b3JraW5nIGRpciBpbiBhIE5fU08gc3ltYm9sLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogSGFuZGxlIFBVU0hfUk9VTkRJTkcuCisKKwkqIGV4cGxvdy5jIChicmVha19vdXRfbWVtb3J5X3JlZnMpOiBVc2Ugc2FtZSBtb2RlIGFzIHRoZSBNRU0gaGFzLgorCisJKiBvdXQtbWlwcy5jIChvdXRwdXRfbG9hZF9pbW1lZGlhdGUpOiBMZXQgdGhlIGFzc2VtYmxlciBkbyB0aGUgd29yay4KKworVHVlIE1hciAgNiAyMjoyMDo0OSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBGaXggYnVnIGluIHNjYW5uaW5nIHN0cmluZ3MgZm9yIHN0cmluZ2lmeS4KKworCSogc3RtdC5jIChleHBhbmRfZ290b19pbnRlcm5hbCk6IEFkanVzdCBzdGFjayBhZnRlciBjbGVhbnVwcy4KKwkoZXhwYW5kX2VuZF9iaW5kaW5ncywgZml4dXBfY2xlYW51cHMpOiBMaWtld2lzZS4KKworCSogdG0tYWxsaWFudC5oIChTVEFUSUNfQ0hBSU5fUkVHTlVNKTogVXNlIDEwLgorCitUdWUgTWFyICA2IDE1OjIzOjExIDE5OTAgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBwb2dvLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5nY2M6IEFjY2VwdCBzcmNkaXIgJiB2aW50IHdpdGggZWl0aGVyICctJyBvciAnKycuCisKKwkqIGMtcGFyc2UueSAoaGFzaCwgaXNfcmVzZXJ2ZWRfd29yZCk6IFVzZSBfX2lubGluZSBzbyBpdCBjYW4KKwliZSBjb21waWxlZCB3aXRoIGBnY2MgLXRyYWRpdGlvbmFsJy4KKworVHVlIE1hciAgNiAxNDo1MjoxMiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXBhcnNlLnkgKGNvbXBzdG10KTogRG9uJ3QgcmV0dXJuIG51bGwgdHJlZSBmb3IgZW1wdHkgZ3JvdXAuICBUaGlzCisJd2lsbCBjYXVzZSB0aGUgY29tcGlsZXIgdG8gZHVtcCBjb3JlIG9uIGEgKHt9KSBjb25zdHJ1Y3QuCisJKiBjcGx1cy1wYXJzZS55IChjb21wc3RtdCk6IERpdHRvLgorCitUdWUgTWFyICA2IDE0OjMzOjQyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChUUkVFX1NUQVRJQyk6IE1vdmUgYmFjayB0byBjb21tb24uCisKK1R1ZSBNYXIgIDYgMDY6MDQ6MzAgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uaCAoZXhwcl9zdG10c19mb3JfdmFsdWUpOiBOZXcgZmllbGQuCisJKiBzdG10LmMgKGluaXRfc3RtdF9mb3JfZnVuY3Rpb24pOiBJbml0aWFsaXplIHZhcnMgZm9yIGV4cHJlc3Npb24KKwlzdGF0ZW1lbnRzLgorCShzYXZlX3N0bXRfc3RhdHVzLCByZXN0b3JlX3N0bXRfc3RhdHVzKTogU2F2ZSBhbmQgcmVzdG9yZSB2YWx1ZSBvZgorCWV4cHJfc3RtdHNfZm9yX3ZhbHVlLgorCisJKiBjc2UuYyAocmVjb3JkX2p1bXBfZXF1aXYpOiBFbnN1cmUgcHJldmlvdXMgaW5zbiBpcyBhbiBJTlNOIGJlZm9yZQorCXRlc3RpbmcgaXQgKGl0IG1pZ2h0IGJlIGEgTk9URSkuCisKK1R1ZSBNYXIgIDYgMDA6MjY6MjAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBnZWVjaCkKKworCSogdG0tbnMzMmsuaCAoTk9USUNFX1VQREFURV9DQyk6IFVzZSBhYm9ydCBpbiBjYXNlCisJdGhhdCBzaG91bGRuJ3QgaGFwcGVuLgorCitNb24gTWFyICA1IDIzOjExOjU3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZ2VlY2gpCisKKwkqIE1ha2VmaWxlLmluIChjcGx1cy10YWIuaCk6IFNheSBleHBlY3QgMTIgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMuCisKKwkqIGdlbm91dHB1dC5jIChvdXRwdXRfcHJvbG9ndWUpOiBJbmNsdWRlIGluc24tYXR0ci5oLgorCisJKiBweXIubWQgKGFkZHNpMywgbXVsc2kzLCB1bXVsc2kzLCBhbmRzaTMsIGlvcnNpMywgeG9yc2kzKToKKwlNYWtlIGlucHV0IGFyZyBwcmVkaWNhdGVzIHN5bW1ldHJpY2FsLgorCShhZGRkaTMsIGFuZGRpMywgaW9yZGkzLCB4b3JkaTMpOiBMaWtld2lzZS4KKwkoYWRkc2kzKTogVXNlIGltbWVkaWF0ZSBzdWJ0cmFjdCBpZiBzdWl0YWJsZS4KKworU2F0IE1hciAgMyAyMTowODoyNSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKG1vdmVfYmxvY2tfdG9fcmVnLCBlbWl0X3B1c2hfaW5zbik6IERvbid0IHRyZWF0IGRvdWJsZSAwLjAKKwlhcyB0d28gd29yZHMgb2YgemVyby4KKwlIYW5kbGUgREltb2RlIGNvbnN0YW50cyBhcyB0d28gaW50ZWdlcnMuCisJU3VwcG9ydCBDT05TVF9JTlQgKGN1cnJlbnRseSBvbmx5IGNhbGxlZCB3aXRoIGNvbnN0MF9ydHgpLgorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IENhbiBvbmx5IHVzZSBzbHQgaWYgU1RPUkVfRkxBR19WQUxVRSA9PSAtMS4KKworU2F0IE1hciAgMyAxNTowMzowMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGdlZWNoKQorCisJKiBmdW5jdGlvbi5jIChzZXRqbXBfcHJvdGVjdF9hcmdzLCBzZXRqbXBfYXJnc193YXJuaW5nKTogTmV3IGZ1bmN0aW9ucy4KKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQ2FsbCBzZXRqbXBfYXJnc193YXJuaW5nLgorCSogYy1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IENhbGwgc2V0am1wX3Byb3RlY3RfYXJncy4KKworCSogZmxvdy5jIChyZWdub19jbG9iYmVyZWRfYXRfc2V0am1wKTogQXJndW1lbnQgcmVnaXN0ZXJzCisJYXJlIGluIGVmZmVjdCBzZXQgYXQgc3RhcnQgb2YgZnVuY3Rpb24uCisKKwkqIHRtLXNwYXJjLmggKEFTTV9PVVRQVVRfRE9VQkxFKTogUmVwbGFjZSBtaXNzaW5nIGxpbmUuCisKKwkqIHByaW50LXRyZWUuYyAocHJ0eXBlaW5mbyk6IERvbid0IGNoZWNrIERFQ0wtb25seQorCWZsYWdzIGZvciBvdGhlciBub2Rlcy4KKworCSogdG9wbGV2LmM6IEVsaW1pbmF0ZSBgI2lmZGVmIDAnLgorCisJKiBkYnhvdXQuYyAocHJpbnRfaW50X2NzdF9vY3RhbCk6IE5ldyBmdW5jdGlvbi4KKwkoZGJ4b3V0X3R5cGUpOiBVc2UgdGhhdCBmb3IgbG9uZyBsb25nIHR5cGVzLgorCisJKiBNYWtlZmlsZS5pbiAoc3RhcnQuZW5jYXAsIHJlc3QuZW5jYXApOiBTcGxpdCBhbGwuaW50ZXJuYWwuCisKKwkqIHRhaG9lLm1kOiBBZGp1c3QgZm9ybWF0dGluZy4KKworCSogdGFob2UubWQgKGFzaGxzaTMsIGxzaGxzaTMpOiBEb24ndCBjbG9iYmVyIGEgY29uc3RfaW50LgorCUluc3RlYWQsIHVzZSAlcyB0byBjb252ZXJ0IHNoaWZ0IGNvdW50IHRvIG11bHRpcGxpZXIuCisJKiB0bS10YWhvZS5oIChQUklOVF9PUEVSQU5EKTogSGFuZGxlICVzLgorCisJKiB0bS10YWhvZS5oIChDT05TVF9DT1NUUyk6IFNwZWNpZnkgY29zdCBvZiBNVUxULgorCitGcmkgTWFyICAyIDAxOjAwOjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHJ0eF9jb3N0KTogQnkgZGVmYXVsdCwgbXVsdGlwbHkgYW5kIGRpdmlkZSBhcmUgZXhwZW5zaXZlLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHRfYWRkKTogVXNlIHR5cGVfZm9yX21vZGUuCisJQWxsb3cgQUREIHRvIGhhdmUgYSBkaWZmZXJlbnQgbW9kZS4KKwkqIGMtdHlwZWNrLmMgKHR5cGVfZm9yX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKGdldF9mbG9hdGluZ190eXBlKTogRnVuY3Rpb24gZGVsZXRlZC4KKwkqIGNwbHVzLXR5cGVjay5jOiBMaWtld2lzZS4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogU2ltcGxpZnkgYGlmICh4KSBnb3RvIGZvbzsgZWxzZSBnb3RvIGZvbzsnLgorCitUaHUgTWFyICAxIDE3OjQxOjIyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3V0LW1pcHMuYyAodHJlZV9jb2RlX25hbWUpOiBEZWNsYXJhdGlvbiBkZWxldGVkLgorCisJKiBzdG10LmMgKGV4cGFuZF9leHByX3N0bXQpOiBObyAibm8gc2lkZSBlZmZlY3RzIiB3YXJuaW5nIGZvciAodm9pZCkwLgorCisJKiBhc3NlcnQuaCAoX19hc3NlcnQpOiBEb24ndCBjYWxsIGFib3J0OyB1c2UgMCBhcyB2YWx1ZS4KKwkqIGdudWxpYjIuYyAoX19lcHJpbnRmKTogQ2FsbCBhYm9ydCBoZXJlLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCB3YXJuIGlmIHNoYWRvd2luZyBlcnJvcl9tYXJrX25vZGUuCisKKwkqIG9wdGFicy5jOiBVc2UgR0VUX01PREVfV0lERVJfTU9ERSBpbnN0ZWFkIG9mIElOQ19NT0RFLgorCisJKiBtYWNobW9kZS5kZWY6IFNldCB1cCBuZXh0LXdpZGVyLW1vZGUgZm9yIGZsb2F0aW5nIG1vZGVzLgorCitXZWQgRmViIDI4IDE4OjU4OjIyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX2dvdG9faW50ZXJuYWwpOiBBZGQgbWlzc2luZyBzdGFjayBhZGp1c3QuCisJKGV4cGFuZF9maXh1cCk6IERvbid0IGRvIHN0YWNrIGFkanVzdCBpZiBmaXh1cCBpc24ndCBmb3IgY3VycmVudCBwb3MuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X3N0bXRfZXhwciwgZXhwYW5kX2VuZF9zdG10X2V4cHIpOiBObyBuZWVkIHRvCisJc2F2ZSByZXN1bHQgZnJvbSBzdGFydF9zZXF1ZW5jZSBpbiBSVExfRVhQUi4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2xvb3ApOiBDb3JyZWN0bHkgc2VlIGlmIE5PVEVfSU5TTl9MT09QX0NPTlQKKwl3YXMgd3JpdHRlbi4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IE9taXQgbW92ZSB0byBPTERBRERSIGlmIGl0IHdvdWxkIGJlIG5vb3AuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEb24ndCB1c2UgdmFyaWFibGUgVFlQRSBpbiBzdWJibG9ja3MgdGhhdAorCWhpZGVzIFRZUEUgYXQgZnVuY3Rpb24gbGV2ZWwuCisKKwkqIGV4cHIuYyAoZm9yY2Vfb3BlcmFuZCk6IEFsd2F5cyBnZW5lcmF0ZSBQTFVTIGZvciBjb25zdGFudC4KKwlVc2UgbmVnYXRlX3J0eCB0byBuZWdhdGUgY29uc3RhbnQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBFbnN1cmUgdGhhdCB0eXBlIGlzIG5vdCB3aWRlciB0aGFuCisJSE9TVF9CSVRTX1BFUl9JTlQgd2hlbiBhc3N1bWluZyB0aGF0IGNvbnN0YW50IGlzIGVudGlyZWx5IGluCisJVFJFRV9JTlRfQ1NUX0xPVy4KKwlTaW1wbGlmeSBFWFBBTkRfU1VNIGNvZGUgZm9yIFBMVVNfRVhQUiBhbmQgTUlOVVNfRVhQUi4KKwlDYWxsIHByZWV4cGFuZF9jYWxscyBhdCBiaW5vcCBpbnN0ZWFkIG9mIGFsbCBwbGFjZXMgdGhhdCBicmFuY2ggdG8gaXQuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBTa2lwIHdpZGVuaW5nIHRyeSBmb3Igcm90YXRlczsgYXZvaWQKKwlwYXNzaW5nIFVOU0lHTkVEUCA9PSAtMSB0byBleHBhbmRfYmlub3AuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBVc2UgYSBzZXF1ZW5jZSBpbnN0ZWFkIG9mIHJlb3JkZXJfaW5zbnMuCisKKwkqIHRyZWUuYyAoc2F2ZV9leHByKTogSWdub3JlIE5PTl9MVkFMVUVfRVhQUnMuCisJTWFyayBhcyBUUkVFX1ZPTEFUSUxFIHNvIHdvbid0IGJlIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZC4KKwkoYnVpbGQpOiBTcGVjaWFsLWNhc2UgTEVOR1RIID09IDEgYWxzby4KKworV2VkIEZlYiAyOCAxMjo1NzoxNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogSGFuZGxlIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIFBTSW1vZGUuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogRm9yIGludGVnZXIgdHlwZXMsIGRvbid0IGNvbnNpZGVyCisJUFNJbW9kZSwgZXRjLgorCisJKiBleHBtZWQuYyAoaW5pdF9leHBtZWQpOiBUeXBvOiB0ZXN0IHdhcyBiYWNrd2FyZHMuCisKKwkqIE1ha2VmaWxlIChpbnN0YWxsKTogV2hlbiBpbnN0YWxsaW5nICQke2VhY2hmaWxlfSwgdXNlIGJhc2VuYW1lLgorCitUdWUgRmViIDI3IDE0OjQ4OjQ2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9jb21tb24pOiBEZWxldGUgY2VydGFpbiBhdHRyaWJ1dGVzLgorCWV4dGVybmFsLCBwdWJsaWMsIHN0YXRpYywgbm9ubG9jYWwsIHJlZ2RlY2wsIGlubGluZS4KKwkoc3RydWN0IHRyZWVfZGVjbCk6IEluc2VydCB0aGVtIGhlcmUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBBdm9pZCBnZW5lcmF0aW5nIG5lc3RlZCBTVUJSRUdzIGZvcgorCW9wZXJhbmRzIHdoZW4gaGFuZGxpbmcgY2FzZSB3aGVyZSBJMiBvciBJMSBpcyBhIFNVQlJFRyBhc3NpZ25tZW50LgorCU5ldmVyIGNvbWJpbmUgd2l0aCBhbiBpbnNuIHRoYXQgc2V0cyBhIHJlZ2lzdGVyIHRvIGl0c2VsZiBpZiBpdCBoYXMKKwlhIFJFR19FUVVBTCBub3RlLgorCShzdWJzdCk6IENvcnJlY3QgZXJyb3JzIGluIGNoYW5naW5nIChtaW51cyAoeCkgKGMpKSB0byAocGx1cyAoeCkgKC1jKSkuCisJUmVjb21wdXRlIENPREUgYmVmb3JlIHNlY29uZCBzd2l0Y2guCisJQ2FzZSBOT1Q6IGluIHNlY29uZCBzd2l0Y2ggZmFpbGVkIHRvIHNldCB1bmRvYnVmLnN0b3JhZ2UuCisJKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogRG9uJ3QgYWxsb3cgbXVsdGktd29yZCBtb2RlczsgZG8gYWxsb3cKKwludWxsIGNvbnZlcnNpb25zLgorCitUdWUgRmViIDI3IDA3OjEzOjE3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBjb21iaW5lIHdoZW4gZG9pbmcgc28gd291bGQKKwlyZXBsYWNlIGRlc3RpbmF0aW9uIHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQsIGFzIG9wcG9zZWQgdG8gcmVwbGFjZWQuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBSZXdvcmsgdG8gY29ycmVjdGx5IHN1cHBvcnQKKwliaXQtZmllbGQgaW5zbnMgdGhhdCBkb24ndCBhbGxvdyBtZW1vcnkgb3BlcmFuZHMuCisJQ29ycmVjdGx5IGRldGVjdCBpbnNucyB0aGF0IHNpbXBseSBjb3B5IGEgdmFyaWFibGUgdG8gb3IgZnJvbSBhCisJcmVnaXN0ZXIuCisJKG9wdGltaXplX2JpdF9maWVsZCk6IFVzZSBhIHNlcXVlbmNlIHJhdGhlciB0aGFuIHJlb3JkZXJfaW5zbnMuCisJKiBNYWtlZmlsZS5pbiAoZnVuY3Rpb24ubyk6IFVwZGF0ZSBkZXBlbmRhbmNpZXMuCisKKwkqIHJlY29nLmg6IERlbGV0ZSBvYnNvbGV0ZSBpbnNuX21hY2hpbmVfaW5mby4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogVXNlIG1vdmVfYmxvY2tfZnJvbV9yZWdzIHRvIHBsYWNlCisJZmlyc3QgcGFydCBvZiBwYXJhbWV0ZXIgcGFydGlhbGx5IGluIHJlZ2lzdGVycyBpbnRvIG1lbW9yeS4KKworTW9uIEZlYiAyNiAxOTowMjo1NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBGaW5kIG9ubHkgLmggZmlsZXMgd2hlbiBsb29raW5nIGZvciBoZWFkZXJzLgorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBTYXZlIGFyZyBwdHIgcmVnCisJaWYgdGhlcmUgYXJlIG5vbmxvY2FsbHktcmVmZXJlbmNlZCBwYXJtcy4KKworRnJpIEZlYiAyMyAxMzoyMToyNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAocmVhZGVzY2FwZSk6IEZvciB4LCBhdm9pZCBvdmVyZmxvdyB3aGVuIHNoaWZ0aW5nIGluIGlmLgorCitUaHUgRmViIDIyIDE5OjE0OjE3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IERlbGV0ZSBkaXJlY3RvcmllcyBiZWZvcmUgY3JlYXRpbmcgdGhlbS4KKwlXaGVuIG1ha2luZyBpbnRlcm5hbCBzeW1ib2xpYyBkaXJlY3RvcnkgbGlua3MsIGNoYXNlCisJY2hhaW4gb2YgZXhpc3RpbmcgbGlua3MgdG8gdGhlIGVuZC4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogQWx3YXlzIHVzZSBtYWluIHZhcmlhbnQgKHVudGlsCisJdGhlcmUgaXMgY29kZSB0byByZXBvcnQgdGhlIGRpc3RpbmN0aW9ucyB1c2VmdWxseSkuCisKK1dlZCBGZWIgMjEgMTM6MjA6MzMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtYXRoLTY4ODgxLmggKGh5cG90KTogTmV3IGZ1bmN0aW9uLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogU3dhcCBvcGVyYW5kcyBpZiB0aGF0IG1ha2VzIG1vZGVzIG1hdGNoLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRm9yIEFSUkFZX0VYUFIsIHdoZW4gY29udmVydGluZyB0bworCW11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiwgdXNlIHR5cGUgb2YgaW5kZXggZm9yIHByb2R1Y3QuCisKKwkqIGdjYy5jIChMSUJfU1BFQyk6IExpbmsgd2l0aCAtbGcgaWYgLWcgc3BlY2lmaWVkLgorCSogdG0taXNpNjguaCwgdG0tbmV4dC5oLCB0bS1zcGFyYy5oLCB0bS1zdW4zLmgsIHRtLXN1bjM4NmkuaDogTGlrZXdpc2UuCisJKiB0bS1taXBzLmggKExJQl9TUEVDKTogT3ZlcnJpZGUgdG8gYXZvaWQgdXNpbmcgLWxnLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFdhcm4gZm9yIC1nIGlmIG5vdCBzdXBwb3J0ZWQuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvIHBlZGFudGljIGNoZWNrcyBmb3IgY29uc3QgZnVuY3Rpb25zCisJd2hlcmUgZnVuY3Rpb24gZGVjbHMgYW5kIHZhcmlhbnQgZnVuY3Rpb24gdHlwZXMgYXJlIG1hZGUuCisKK01vbiBGZWIgMTkgMjA6MDY6NDggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3B0YWJzLmM6IFJlc3RvcmUgRmViIDEzIGNoYW5nZS4KKworCSogdmFyYXNtLmMgKHJlYWRvbmx5X2RhdGFfc2VjdGlvbik6IE5ldyBmbi4KKwkoYXNzZW1ibGVfdmFyaWFibGUsIGdldF9vcl9hc3NpZ25fbGFiZWwsIG91dHB1dF9jb25zdGFudF9wb29sKToKKwlVc2UgbmV3IGZuIGluc3RlYWQgb2YgdGV4dF9zZWN0aW9uLgorCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogV3JpdGUgcHJvZmlsaW5nIHRhYmxlIHRvIHJlYWQtb25seSBzZWN0aW9uLgorCShnZXRfYXR0cl9sZW5ndGgsIHNob3J0ZW5fYnJhbmNoZXMpOiBBZGRyZXNzIHZlY3RvcmVzIHRha2Ugbm8gc3BhY2UKKwlpZiBub3QgaW4gdGV4dCBzZWN0aW9uLgorCVZlY3RvcnMgYXJlIGluIG9wZXJhbmQgMCBmb3IgQUREUl9WRUMgYnV0IDEgZm9yIEFERFJfRElGRl9WRUMuCisJKGZpbmFsX3NjYW5faW5zbik6IE1lcmdlIGNhc2VzIGZvciBBRERSX1ZFQyBhbmQgQUREUl9ESUZGX1ZFQy4KKwlQdXQgdmVjdG9yIHRhYmxlcyBpbiByZWFkLW9ubHkgc2VjdGlvbi4KKworU3VuIEZlYiAxOCAxMzo1ODowNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYjIuYyAoX19zaHRhYik6IE5ldyB2ZWN0b3IuCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTKTogQWRkIHRoYXQgbWVtYmVyLgorCisJKiAqdGFob2UqOiBOZXcgdmVyc2lvbnMgb2YgdGhlc2UgZmlsZXMuCisKKwkqIG9wdGFicy5jOiBGaWxlIHdhcyBkZWxldGVkLiAgQ29waWVkIGxhc3QgYmFja3VwLgorCUZlYiAxMyBjaGFuZ2UgbG9zdC4KKworCSogdG0tc3BhcmMuaCAoQVNNX09VVFBVVF9ET1VCTEUsIEFTTV9PVVRQVVRfRkxPQVQpOiBIYW5kbGUgbmFucy4KKwlEb24ndCBvdXRwdXQgbW9yZSBkaWdpdHMgdGhhbiB0aGUgbnVtYmVycyBoYXZlLgorCSogdG0tc3VuMy5oIChBU01fT1VUUFVUX0RPVUJMRSwgQVNNX09VVFBVVF9GTE9BVCk6IExpa2V3aXNlLgorCShBU01fT1VUUFVUX0RPVUJMRV9PUEVSQU5EKTogRG9uJ3Qgb3V0cHV0IGV4Y2VzcyBkaWdpdHMuCisKKwkqIG02OGsubWQgKG1vdnFpKTogRG9uJ3QgdXNlIGNscmIgb3Igc3QgaWYgZGVzdCBpcyB2b2xhdGlsZS4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogRG9uJ3QgdXNlIHN1bSBvZiBzaGlmdHMgaWYgbXVsdCBpcyBjaGVhcGVyLgorCShpbml0X2V4cG1lZCk6IFNldCBtdWx0X2lzX2NoZWFwIGJhc2VkIG9uIHJ0eF9jb3N0LgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgaW5pdF9leHBtZWQuCisJKiBjc2UuYyAocnR4X2Nvc3QpOiBOb3Qgc3RhdGljLgorCisJKiB0bS1taXBzLmggKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCwgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCk6CisJU3RhcnQgbmFtZSB3aXRoICQuCisKKwkqIHRtLWFsbGlhbnQuaCwgdG0tY29udmV4LmgsIHRtLWhwOWszYnNkLmgsIHRtLW5ld3MuaCwgdG0tc2VxMzg2Lmg6CisJKiB0bS1zZXF1ZW50LmgsIHRtLXNwdXIuaCwgdG0tc3VuMi5oLCB0bS10YWhvZS5oLCB0bS12YXguaDoKKwkoTElCX1NQRUMpOiBQdXQgaW4gLWxjIHdpdGggYXBwcm9wcmlhdGUgYWx0ZXJuYXRpdmVzLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6CisJQ2xlYXIgcnR4X2VxdWFsX2Z1bmN0aW9uX3ZhbHVlX21hdHRlcnMganVzdCBiZWZvcmUgZmluYWwuCisKKwkqIGNjY3AuYyAocmVzY2FuKTogSWYgZG9uJ3QgZmluZCBwYXJlbiBhZnRlciBtYWNybywgYmFjayB1cCBvdmVyIHNwYWNlLgorCitTYXQgRmViIDE3IDIwOjU4OjIxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0taHA5azMyMC5oIChDUFBfU1BFQyk6IFJlbW92ZSBfSU5DTFVERV9fU1REQ19fLgorCitXZWQgRmViIDE0IDA5OjA2OjI2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoc3RydWN0IG1vdmFibGUpOiBBZGQgU0VUX0RFU1QgYW5kIFNFVF9FUVVBTCBmaWVsZHMuCisJKHNpbmdsZV9zZXQpOiBOZXcgZm4uCisJKHNjYW5fbG9vcCwgZm9yY2VfbW92YWJsZXMsIG1vdmVfbW92YWJsZXMsIGNvbnNlY19zZXRfaW52YXJpYW50X3ApOgorCVVzZSBuZXcgZm4gdG8gbG9vayBmb3IgaW5zbnMgdGhhdCBjb250YWluIGEgc2luZ2xlIHNldC4KKwlVc2UgbmV3IGZpZWxkcyBpbiBzdHJ1Y3QgbW92YWJsZS4KKwkoc2Nhbl9sb29wLCBzdHJlbmd0aF9yZWR1Y2UpOiBQYXNzIG51bWJlciBvZiByZWdpc3RlcnMgdG8KKwlzdHJlbmd0aF9yZWR1Y2UuCisJKGxpYmNhbGxfYmVuZWZpdCk6IE5ldyBmbi4KKwkoc2Nhbl9sb29wLCBzdHJlbmd0aF9yZWR1Y2UsIGNvbnNlY19zZXRzX2dpdik6IFVzZSBpdC4KKwkoc2tpcF9jb25zZWNfaW5zbnMpOiBDb3JyZWN0bHkgY291bnQgaW5zbnMgdG8gYmUgc2tpcHBlZCB3aGVuCisJTk9URXMgYXJlIHByZXNlbnQuCisJKGNvbWJpbmVfbW92YWJsZXMpOiBJbiBzb21lIGNhc2VzLCBjb21iaW5lIHJlZ3MgdGhhdCBsb2FkIENPTlNUX0lOVHMKKwlldmVuIGlmIHRoZSBtb2RlcyBvZiB0aGUgZGVzdGluYXRpb24gZGlmZmVyLiAgVGhpcyByZXF1aXJlcyBzdGFydGluZworCXRoZSBpbm5lciBsb29wIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBtb3ZhYmxlIGxpc3QuCisJVXNlIGZpbmRfcmVnX25vdGUgdG8gc2VhcmNoIGZvciBub3Rlcy4KKwlEb24ndCBjaG9vc2UgYSB1c2Ugb2YgYW4gZXF1aXZhbGVuY2UgaW5zdGVhZCBvZiB0aGUgaW5zbiB0aGF0IHNldHMKKwl0aGUgcmVnaXN0ZXIgZGlyZWN0bHkgKGhlbmNlIHNldHRpbmcgdXAgdGhlIGVxdWl2YWxlbmNlKS4KKwlTZXQgRE9ORSBmb3IgdGhlIG1hdGNoZWQgbW92YWJsZSB0byBlbnN1cmUgaXQgaXNuJ3QgZHVwbGljYXRlZC4KKwkocmVwbGFjZV9jYWxsX2FkZHJlc3MpOiBObyBsb25nZXIgdXNlZC4KKwkobW92ZV9tb3ZhYmxlcyk6IFdoZW4gbW92aW5nIGEgTElCQ0FMTCBibG9jayB3aGVyZSB0aGUgYWRkcmVzcyBvZgorCXRoZSBmbiBpcyBpbiBhIHJlZ2lzdGVyLCBlbWl0IGFuIGluc24gdG8gbW92ZSB0aGUgYWN0dWFsIGFkZHJlc3MKKwlpbiBjYXNlIHRoZSBvcmlnaW5hbCBtb3ZlIHdhcyBDU0UnZWQgb3V0IG9mIHRoZSBibG9jay4KKwlFbWl0IEFORCBpbnNuIHZpYSBleHBhbmRfYmlub3AgaW5zdGVhZCBvZiBleHBsaWNpdCBSVEwuCisJU2VhcmNoIGZvciBtYXRjaGluZyBmcm9tIHN0YXJ0IG9mIGxpc3QsIG5vdCBmcm9tIG1vdmFibGUgYmVpbmcgbWF0Y2hlZC4KKwlJZiBtb2RlIG9mIGNvbWJpbmVkIG1vdmFibGVzIGRpZmZlciwgdXNlIFNVQlJFRyB0byByZXBsYWNlIG5hcnJvd2VyLgorCShyZXBsYWNlX3JlZ3MpOiBEb24ndCByZXBsYWNlIHJlZ2lzdGVyIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwkoY291bnRfbm9uZml4ZWRfcmVhZHMpOiBNZW0gcmVmIGlzIGZpeGVkIGlmIGFkZHJlcyBpcyBsb29wIGludmFyaWFudC4KKwkoY2FuX2p1bXBfaW50b19yYW5nZV9wKTogU3BlZWQgdXAgY29tbW9uIGNhc2VzLgorCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogRG8gc2FtZSB0aGluZyBmb3IgcGFydHMgb2YgUEFSQUxMRUwgYXMgd2hlbgorCXRoZXkgb2NjdXIgc3RhbmRhbG9uZS4KKwkoc3RydWN0IGluZHVjdGlvbik6IERlbGV0ZSBmaWVsZHMgZm9yY2VzLCBmb3JjZXMyLCBhbmQgY29uc2VjLgorCVN0b3JlIGRlc3QgYW5kIHNyYyByZWcgcnR4IGluc3RlYWQgb2YgcmVnaXN0ZXIgbnVtYmVyLgorCUFkZCBuZXcgZmllbGRzIGFsd2F5cywgY2FudF9kZXJpdmUsIGNvbWJpbmVkX3dpdGgsIG1heWJlX2RlYWQsIGFuZAorCWRlcml2ZV9hZGp1c3RtZW50LgorCShzdHJ1Y3QgaXZfY2xhc3MpOiBBZGQgbmV3IGZpZWxkcyBpbml0aWFsX3Rlc3QsIGluaXRfc2V0LCBpbmNyZW1lbnRlZC4KKwkoYWxsIHN0cmVuZ3RoIHJlZHVjdGlvbiByb3V0aW5lcyk6IFVzZSBzaW5nbGVfc2V0IGFuZCB1c2UgbmV3IAorCXN0cnVjdCBpbmR1Y3Rpb24gZmllbGRzOyBmb3JjZXMgaXMgbm8gbG9uZ2VyIHVzZWQuCisJKHJlY29yZF9iaXYpOiBOZXcgZm4uCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFVzZSBpdC4KKwkocmVjb3JkX2luaXRpYWwsIHZhbGlkX2luaXRpYWxfdmFsdWVfcCk6IE5ldyBmbnMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFNjYW4gZm9yIGJpdnMgaW4gbG9vcCBvcmRlci4KKwlSZWZpbmUgaGFuZGxpbmcgb2YgbWF5YmVfbmV2ZXIuCisJQSByZWcgaXNuJ3QgYSBiaXYgaWYgaXQgaXMgbmV2ZXIgaW5jcmVtZW50ZWQuCisJVXNlIG5vdGVfc3RvcmVzIGFuZCByZWNvcmRfaW5pdGlhbCB0byBjb3JyZWN0bHkgbm90ZSBhbGwgY2hhbmdlcworCXRvIGEgYml2J3MgcmVnaXN0ZXIgcHJpb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsb29wLgorCVdlIG1heSBrbm93IGJpdidzIGluaXRpYWwgdmFsdWUgaWYgaXQgd2FzIHRlc3RlZCBORSBiZWZvcmUgdGhlIGxvb3AuCisJVXNlIG5ldyB2YWxpZF9pbml0aWFsX3ZhbHVlX3AuCisJRW5zdXJlIGdpdidzIGluc24gaXMgdGhlIGxhc3QgaW4gYSBMSUJDQUxMIGJsb2NrIG9yIGlmIGNvbnNlYy4KKwlEb24ndCBzZXQgbWF5YmVfbmV2ZXIgb24ganVtcCBiYWNrIHRvIHRvcCBvZiBsb29wLgorCURvbid0IGRlbGV0ZSBhbnkgaW5zbnMgc2V0dGluZyBnaXZzOyBmbG93IHdpbGwgZWxpbWluYXRlIHRoZW0gYXMKKwlkZWFkLiAgRGl0dG8gZm9yIGJpdiB1cGRhdGVzIHdoZW4gYml2IGNhbiBiZSBlbGltaW5hdGVkLgorCUlmIGdpdidzIGxhc3QgdXNlIGlzIGluIGEgY29tcHV0YXRpb24gb2YgYW5vdGhlciBnaXYsIG1hcmsgdGhhdCBpdAorCW1pZ2h0IGJlIGRlYWQuCisJTWFrZSB0d28gcGFzc2VzIG92ZXIgZ2l2cy4gIEluIGZpcnN0IHBhc3MsIGhhbmRsZSBub24tbWF0Y2hlZAorCWdpdnMuICBJbiBzZWNvbmQgcGFzcywgaGFuZGxlIHRoZSBtYXRjaGVkIGdpdnMuCisJKG9ubHlfcmVnX3VzZV9wKTogTm93IHN0YXRpYy4KKwkoZGVsZXRlX2luc25fZm9yY2VzKTogRm4gZGVsZXRlZDsgbm8gbG9uZ2VyIHVzZWQuCisJKHVwZGF0ZV9naXZfZGVyaXZlKTogTmV3IGZuLgorCShzdHJlbmd0aF9yZWR1Y2UpOiBDYWxsIGl0IGZvciBldmVyeSBpbnNuIGFuZCBsYWJlbC4KKwkocmVjb3JkX2dpdik6IElmIGdpdiBuZXZlciB1c2VkLCBpZ25vcmUgaXQuCisJKGJhc2ljX2luZHVjdGlvbl92YXIpOiBBbHdheXMgc2V0ICpNVUxUX1ZBTCB0byBzb21ldGhpbmcuCisJQSBzZXQgb2YgYSBiaXYgZnJvbSBhbiBpbnZhcmlhbnQgTUVNIGlzIGFsbG93ZWQuCisJKHNpbXBsaWZ5X2dpdl9leHByLCBleHByX2Nvc3QpOiBOZXcgZm5zLgorCShnZW5lcmFsX2luZHVjdGlvbl92YXIpOiBSZXdyaXRlIHRvIHVzZSB0aGVtLiAgTW9yZSB0eXBlcyBvZgorCWV4cHJlc3Npb25zIGFyZSBub3cgcmVjb2duaXplZCBhcyBnaXZzLgorCVVzZSByZXN1bHRzIHByb2R1Y2VkIGJ5IHVwZGF0ZV9naXZfZGVyaXZlIHRvIGVuc3VyZSB0aGF0IGdpdiBkZXJpdmF0aW9uCisJd29ya3MgY29ycmVjdGx5IHdoZW4gc3Bhbm5pbmcgYml2IHVwZGF0ZS4KKwkoY29uc2VjX3NldHNfZ2l2KTogQ2FuIGFsbG9jYXRlIHRlbXBvcmFyeSBpbmR1Y3Rpb24gc3RydWN0IG9uIHN0YWNrLgorCVNraXAgaW5zbnMgdGhhdCBzZXQgaXJyZWxldmFudCBpdGVtcyBiZXR3ZWVuIHR3byB1cGRhdGVzIHRvIGdpdi4KKwkoZ2VuX2l2X211bHQsIGVtaXRfaXZfaW5pdF9jb2RlKTogUmVwbGFjZSB3aXRoIGVtaXRfaXZfYWRkX211bHQuCisJKHVwZGF0ZV9yZWdfbGFzdF91c2UpOiBOZXcgZm4uCisJKGVtaXRfaXZfYWRkX211bHQpOiBDYWxsIGl0IGZvciBhbGwgb3BlcmFuZHMuCisJKGV4cHJlc3NfZnJvbSwgY29tYmluZV9naXZzX3AsIGNvbWJpbmVfZ2l2cyk6IE5ldyBmbnMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IENhbGwgdGhlbSB0byBjb21iaW5lIGdpdnMuCisJKHByb2R1Y3RfY2hlYXBfcCk6IFJld3JpdGUgdG8gaGFuZGxlIG1vcmUgY2FzZXMuCisJRnJlZSBhbnkgbWVtb3J5IGFsbG9jYXRlZC4KKwkoZ2V0X2NvbmRpdGlvbik6IE5ldyBmbi4KKwkoc3RyZW5ndGhfcmVkdWNlLCBjaGVja19kYnJhX2xvb3ApOiBVc2UgaXQuCisJKGNoZWNrX2RicmFfbG9vcCk6IFVzZSBlbWl0X21vdmVfaW5zbiBpbnN0ZWFkIG9mIHdyaXRpbmcgZXhwbGljaXQgU0VULgorCVVzZSBlbWl0X2NtcF9pbnNuL2VtaXRfanVtcF9pbnNuIHRvIHdyaXRlIG91dCByZXBsYWNlbWVudCB0ZXN0LgorCShjaGVja19lbGltaW5hdGVfYml2KTogVXNlIHNpbmdsZV9zZXQuCisJUmVmaW5lIHRlc3QgZm9yIGluc25zIHRoYXQgdXNlIGJpdiBvbmx5IHRvIGNhbGN1bGF0ZSBnaXYuCisJUmV0dXJuIG5vbi16ZXJvIGlmIGNhbiBlbGltaW5hdGUgYml2OyBkb24ndCBzZXQgZWxpbWluYWJsZS4KKwkoY2FuX2VsaW1pbmF0ZV9iaXZfcCk6IFJlbW92ZSBzb21lIGR1cGxpY2F0ZSBjb2RlIGFuZCBhbGxvdworCWFsbCBjb25zdGFudHMgaW4gc29tZSBjYXNlcyB3aGVyZSBvbmx5IENPTlNUX0lOVCB3YXMgYWxsb3dlZC4KKwlEb24ndCByZXBsYWNlIGJpdiB3aXRoIGdpdiB0aGF0IG1pZ2h0IGJlIGRlYWQuCisJKGVsaW1pbmF0ZV9iaXYpOiBDb21wdXRlIHdoZXRoZXIgdG8gcHV0IGFuIGludmFyaWFudCBiZWZvcmUgaW5zbgorCWluIHdoaWNoIHRoZSBiaXYgaXMgYmVpbmcgZWxpbWluYXRlZCBvciBhdCB0aGUgc3RhcnQgb2YgbG9vcC4KKwlBbGxvdyBtb3JlIHR5cGVzIG9mIGNvbnN0YW50cy4KKwlEb24ndCByZXBsYWNlIGJpdiB3aXRoIGdpdiB0aGF0IG1pZ2h0IGJlIGRlYWQuCisJVXNlIHZhbGlkYXRlX2NoYW5nZSB3aGVuIHN1YnN0aXR1dGluZyBpbnRvIGluc24uCisJKHN0cmVuZ3RoX3JlZHVjZSk6IENoYW5nZSBjYWxscyB0byBjaGVja19lbGltaW5hdGVfYml2IGFuZAorCWVsaW1pbmF0ZV9iaXYuICBDYWxsIHRoZSBmb3JtZXIgYWdhaW4gYWZ0ZXIgbWF5YmVfZGVhZCBoYXMgcG9zc2libHkKKwliZWVuIHNldCBvbiBzb21lIGdpdnMuCisKK1R1ZSBGZWIgMTMgMTk6NTg6NDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmMgKGZ1bmN0aW9uX29ic3RhY2spOiBOZXcgdmFyaWFibGUuCisJKGluaXRfYWxsb2NhdGlvbik6IEluaXQgaXQgdG8gdGVtcG9yYXJ5X29ic3RhY2suIAorCShzYXZlX3RyZWVfc3RhdHVzKTogU2F2ZSBpdCwgbWFrZSBuZXcgb2JzdGFjayBmb3IgaXQuCisJKHJlc3RvcmVfdHJlZV9zdGF0dXMpOiBGcmVlIG5ldyBvYnN0YWNrLCByZXN0b3JlIG9sZC4KKwkodGVtcG9yYXJ5X2FsbG9jYXRpb24sIHJlc3VtZV90ZW1wb3JhcnlfYWxsb2NhdGlvbik6IFVzZSB0aGF0IG9uZS4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IFNsb3QgZm9yIHNhdmVkIGZ1bmN0aW9uX29ic3RhY2suCisJKiB0cmVlLmMgKHB1c2hfb2JzdGFjaywgcG9wX29ic3RhY2spOiBOZXcgZnVuY3Rpb25zLgorCVRoZXNlIGltcGxlbWVudCBhIHN0YWNrIGZvciBvYnN0YWNrIHNlbGVjdGlvbi4KKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IElmIHZhciBpcyBub25sb2NhbCwKKwlzd2l0Y2ggdG8gb2JzdGFja3Mgb2YgdGhlIGZ1bmN0aW9uIGl0IGlzIGluLgorCitUdWUgRmViIDEzIDE3OjUyOjE1IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jIChlbWl0X25vX2NvbmZsaWN0X2Jsb2NrKTogRHVyaW5nIHJlbG9hZCwgZG9uJ3QgZG8KKwlhbnkgZW5jYXBzdWxhdGlvbiBvciBhZGQgbm90ZXMuCisJQWxsb3cgc2luZ2xlIGluc24gb3Igbm8gaW5zbnMgaW4gc2VxdWVuY2UuCisKK1R1ZSBGZWIgMTMgMTI6NTE6NDUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChidWlsZF9pbnQpOiBJbmNyZWFzZSBsaW1pdHMgb2YgY2FjaGUgc2l6ZS4KKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBGb3JjZSBvdXRwdXQgb2Ygc3ltYm9sJ3MgdHlwZS4KKworVHVlIEZlYiAxMyAwODoyODozNyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IERvbid0IHNraXAgY29tcGlsYXRpb24gb2YgZnVuY3Rpb24KKwlpZiBUUkVFX0lOTElORSBidXQgbm8gc2F2ZWQgaW5zbnMgKGUuZy4sIGlmIG5vdCAtTykuCisKKwkqIHJ0bGFuYWwuYyAocmVwbGFjZV9ydHgpOiBOZXcgZnVuY3Rpb24uCisJKiBydGwuaDogRGVmaW5lIGl0LgorCitUdWUgRmViIDEzIDAwOjAyOjE3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBMYXkgb3V0IGFueSBleGlzdGluZyBhcnJheSB0eXBlcworCW9mIG5ld2x5IGNvbXBsZXRlZCBzdHJ1Y3QuCisJKGxheW91dF9hcnJheV90eXBlKTogTmV3IHN1YnJvdXRpbmUuCisKK01vbiBGZWIgMTIgMTE6MzM6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBJZiBub3QgLU8sIGtlZXAgYWxsIHBhcm1zIGluIG1lbW9yeS4KKworCSogZXhwci5jIChjbGVhcl9wZW5kaW5nX3N0YWNrX2FkanVzdCk6IElnbm9yZSBUUkVFX0lOTElORSBpZiBub3QgLU8uCisKKwkqIG91dC1pMzg2LmMgKG91dHB1dF9maXhfdHJ1bmMpOiBOZXcgZnVuY3Rpb24uCisJKGZwX3BvcF9pbnQpOiBSZS1lbmFibGVkLiAgSGFuZGxlIG1vcmUgbW9kZXMsIGluZGl2aWR1YWxseS4KKwkocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSAlRC4KKwkqIGkzODYubWQgKGZpeF90cnVuY2RmZGkyLCBmaXh1bnNfdHJ1bmNkZmRpMik6IE5ldyBwYXR0ZXJucy4KKwlUaGVzZSBjaGFuZ2VzIGZyb20gSmFtZXMgVmFuIEFydHNkYWxlbi4KKworCSogZ251bGliMi5jIChfX2J1aWx0aW5fdmVjX2RlbGV0ZSk6IFVzZSBfX2J1aWx0aW5fZGVsZXRlLCBub3QgZnJlZS4KKworCSogc2Rib3V0LmMgKHNkYm91dF9maWVsZF90eXBlcyk6IERvIGxvb2sgdGhyb3VnaCBwb2ludGVyIHR5cGVzLgorCitTYXQgRmViIDEwIDE5OjMxOjE2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc2Rib3V0LmMgKHBsYWluX3R5cGVfMSk6IERvbid0IG91dHB1dCB0YWcgdW50aWwga25vd24uCisJKHNkYm91dF9vbmVfdHlwZSk6IERvbid0IHJlY29yZCB0YWcgaW4gS05PV05fVFlQRV9UQUcgdW50aWwgZW5kLgorCVJlZW5hYmxlIG91dHB1dCBvZiBtZW1iZXIgdHlwZXMgYmVmb3JlIG9yaWdpbmFsIHN0cnVjdHVyZS4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IENvbnZlcnQgcG9zdC1pbmMgdG8gcHJlLWluYyBpZiByZXN1bHQgaWdub3JlZC4KKworU2F0IEZlYiAxMCAxNDozNTowMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG5zMzJrLm1kIChtb3ZzZik6IENvbnZlcnQgZG91YmxlIGNvbnN0YW50IHRvIGZsb2F0LgorCitGcmkgRmViICA5IDAwOjAyOjQzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGxvc2UgYWxpZ25tZW50IG9mIE9MRERFQ0wuCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IEtlZXAgY29tbWVudHMgYnkgY29weWluZyB0aGVtIGV4cGxpY2l0bHkuCisKKwkqIGNjY3AuYyAocmVzY2FuKTogV2hlbiBzY2FubmluZyBmb3Igb3Blbi1wYXJlbiBhZnRlciBtYWNybyBuYW1lLAorCWRpc2NhcmQgY29tbWVudHMgaWYgYXBwcm9wcmlhdGUuCisKK0ZyaSBGZWIgIDkgMTg6MjY6MzQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogU3VwcHJlc3MgaW5maW5pdGUgbG9vcCB3aGVuIGFzc29jaWF0aW5nCisJb3BlcmF0aW9ucyBpbiBjYXNlcyB3aGVyZSBhIHJlZywgUiwgaXMgZXF1YWwgdG8gIlIgT1AgY29uc3QxIiBhbmQKKwl3ZSBhcmUgbG9va2luZyBhdCAiUiBPUCBjb25zdDIiIGZvciBzb21lIGFzc29jaWF0aXZlIG9wZXJhdG9yIE9QLgorCitUaHUgRmViICA4IDE0OjE5OjQxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBQZWRhbnRpYyB3YXJuaW5nIGlmIHZhbHVlIG5vdCBhbiBpbnQuCisJQWNjZXNzIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgY2hlY2tpbmcgZm9yIGNvbnN0YW50IHNwZWNpZmllZCwKKwlhcyBpdCBzaG91bGQgbm8gbG9uZ2VyIGJlIHBvc3NpYmxlIHRvIGhhdmUgTk9OX0xWQUxVRV9FWFBSCisJaW4gdGhlIGRlZmF1bHQuCisKKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IERvbid0IHRydW5jYXRlIHdpZGUgZW51bXMuCisKKwkqIHRtLWhwOWszMjAuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX0lOQ0xVREVfX1NURENfXyBpZiBub3QgdHJhZGl0aW9uYWwuCisJKiB0bS1ocDlrMzEwLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisKK1dlZCBGZWIgIDcgMTI6NTk6MDcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZW1pdC1ydGwuYyAoZW1pdF9pbnNuc19iZWZvcmUpOiBOZXcgZm4uCisJKGluaXRfZW1pdF9vbmNlKTogQWRkIHVzZXMgb2YgbmV3IG1hY3JvcyB0byBzdXBwb3J0IHN0YXRpYyBjaGFpbgorCXBhc3NlZCBpbiBtZW1vcnkuCisJKiBjYWxscy5jIChwcmVwYXJlX2NhbGxfYWRkcmVzcyk6IFJld29yayB0byBzZXQgc3RhdGljIGNoYWluIGZvcgorCWxhbmd1YWdlcyB0aGF0IGhhdmUgRVBtb2RlIGZ1bmN0aW9uIGFkZHJlc3NlcyBhbmQgZm9yIG5lc3RlZAorCWZ1bmN0aW9ucyBpbiBDLgorCUVtaXQgVVNFIGluc24gZm9yIHN0YXRpY19jaGFpbl9ydHggaW50byBsaXN0IG9mIFVTRSBpbnNucyB0byBiZQorCXBsYWNlZCBsYXRlci4KKwkoZW1pdF9jYWxsXzEpOiBVU0VfSU5TTlMgaXMgbm93IGEgbGlzdCBvZiBpbnNucywgbm90IGEgU0VRVUVOQ0UuCisJKGV4cGFuZF9jYWxsKTogUmVtb3ZlIGdyYXR1aXRvdXMgZm9yY2luZyBvZiBGVU5FWFAgdG8gUG1vZGUgKGl0CisJbWlnaHQgaGF2ZSBiZWVuIEVQbW9kZSkuCisJTWFrZSBVU0VfSU5TTlMgYSBsaXN0LCByYXRoZXIgdGhhbiBhIFNFUVVFTkNFLgorCVVzZSBwcmVwYXJlX2NhbGxfYWRkcmVzcyB0byBlbWl0IGxvYWQgaW50byBzdGF0aWMgY2hhaW4uCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogVXBkYXRlIGNhbGwgdG8gcHJlcGFyZV9jYWxsX2FkZHJlc3MuCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBVc2UgaW5jb21pbmcgc3RhdGljIGNoYWluIHJ0eAorCWluc3RlYWQgb2Ygb3V0Z29pbmcgZm9ybSAod2FzIGNvcnJlY3QgaW4gb25lIHBsYWNlLCB3cm9uZyBpbiBvbmUpLgorCSogc3RtdC5jIChleHBhbmRfZ290byk6IFNldCBzdGF0aWNfY2hhaW4gcnR4IGFmdGVyIHN0YWNrIHBvaW50ZXIKKwlpbiBjYXNlIGl0IHVzZXMgdGhlIHN0YWNrIHBvaW50ZXIuCisJT25seSB3cml0ZSBvbmUgVVNFIGZvciBzdGFja19wb2ludGVyX3J0eC4KKworVHVlIEZlYiAgNiAxNzoyNjoxNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBTdXBwcmVzcyBvcHRpbWl6YXRpb24gb2YgYGlmICguLi4pIHggPSAxOworCWVsc2Ugey4uLn0gIGlmICh4KSAuLi4nLCB3aGVuIGEgbGFiZWwgaXMgcHJlc2VudCBiZXR3ZWVuIHRoZQorCWFzc2lnbm1lbnQgdG8gWCBhbmQgdGhlIHVuY29uZGl0aW9uYWwganVtcC4KKworTW9uIEZlYiAgNSAyMzoyMjozMCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogSWYgSTIgb3IgSTEgaXMgYSBQQVJBTExFTCwgaWdub3JlIG9ubHkKKwlDTE9CQkVSIHBhcnRzIHdoZW4gY29tYmluaW5nLiAgUHJldmlvdXNseSB1c2VkIHRvIGlnbm9yZSBVU0UgcGFydHMKKwlhbHNvIGJ1dCB0aGUgbGF0dGVyIGNhbiBpbmRpY2F0ZSB0aGF0IHRoZSBpbnNuIG5lZWRzIHNvbWUgc2V0dXAgdGhhdAorCWlzbid0IHNob3duIGluIGl0cyBydGwuCisKK01vbiBGZWIgIDUgMTM6MzI6MzIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB2YXgubWQgKGFkZGhpMywgYWRkcWkzKTogRml4IHR5cG8gY2hlY2tpbmcgZm9yIGRlYyBpbnNuLgorCisJKiBjY2NwLmMgKHN0cnVjdCBmaWxlX2J1Zik6IE5ldyBmaWVsZCBgbm9taW5hbF9mbmFtZScgaXMgbmFtZSBzcGVjJ2QKKwlpbiAjbGluZSBjb21tYW5kOyBgZm5hbWUnIGlzIG5hbWUgb2YgYWN0dWFsIGlucHV0IGZpbGUuCisJTWFueSBmdW5jdGlvbnMgbm93IHVzZSBvciBzZXQgdGhpcyBmaWVsZCBhcyB3ZWxsIG9yIGluc3RlYWQuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZpeCBtaXNzaW5nIHBhcmVuLgorCitTdW4gRmViICA0IDEyOjM3OjAwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tM2IxZy5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy5nY2MgKDNiMWcsIDNiMS1nYXMpOiBOZXcgYWx0ZXJuYXRpdmUuCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IFNraXAgVVNFIGluc25zIHdoZW4gY2hlY2tpbmcgZm9yCisJdGhlIGluc24gdGhhdCBsb2FkcyB0aGUgYWRkcmVzcyBvZiBhIGxpYnJhcnkgZnVuY3Rpb24uCisKKwkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBDb21wdXRlIHRvdGFsX2Rpc3RyaWJfKi4KKworCSogZmluYWwuYyAoZmluYWwpOiBEbyBiYXNpYyBibG9jayBwcm9maWxpbmcgYXQgZW5kIG9mIGZ1bmN0aW9uLgorCShmaW5hbCwgZmluYWxfc2Nhbl9pbnNuKTogUnVuIENDX1NUQVRVU19JTklUIGFmdGVyIGJsb2NrIHByb2ZpbGluZy4KKwkoZmluYWxfc2Nhbl9pbnNuKTogRGV0ZWN0IGNvbmQganVtcHMgdGhhdCB1c2UgUEFSQUxMRUwuCisKK1N1biBGZWIgIDQgMDA6MDQ6MjIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsKTogVXNlIHBsdXNfY29uc3RhbnQgdG8gYXZvaWQKKwlQTFVTIHdoZW4gb2Zmc2V0IGlzIHplcm8uCisJKGFzc2lnbl9vdXRlcl9zdGFja19sb2NhbCk6IERpdHRvLgorCitTdW4gRmViICA0IDAwOjA0OjIyIDE5OTAgIFJvbiBHdWlsbWV0dGUgIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwbG93LmMgKGZpeF9sZXhpY2FsX2FkZHIpOiBGaXggdHlwby4KKworCSogdHJlZS5jIChidWlsZF90eXBlX3ZhcmlhbnQpOiBTcGVjaWFsIGhhbmRsaW5nIGZvciBwcm90b2l6ZS4KKworCSogcHJvdG9pemUuYzogTmV3IGZpbGUuCisKKwkqIHRvcGxldi5jIChmbGFnX2dlbl9hdXhfaW5mbyk6IERlZmluZSBpdC4KKwkoZl9vcHRpb25zKTogUmVjb2duaXplIHRoZSBmbGFnLgorCShjb21waWxlX2ZpbGUpOiBPcGVuIGFuZCBjbG9zZSB0aGUgYXV4X2luZm8gZmlsZS4KKworCSogZmxhZ3MuaCAoZmxhZ19nZW5fYXV4X2luZm8pOiBEZWNsYXJlIGl0LgorCisJKiBjLXR5cGVjay5jIChjb21wdHlwZXMpOiBIYW5kbGUgZXF1aXZhbGVudCB2YXJpYW50IHR5cGVzIGZvciBwcm90b2l6ZS4KKworCSogYy1kZWNsLmMgKGltcGxpY2l0bHlfZGVjbGFyZSk6IENhbGwgZ2VuX2F1eF9pbmZvX3JlY29yZC4KKwkoc3RhcnRfZGVjbCwgc3RvcmVfcGFybV9kZWNscyk6IExpa2V3aXNlLgorCShwdXNoZGVjbCk6IEZvciBwcm90b2l6ZSwgZGlzdGluZ3Vpc2ggZGlmZmVyZW50IG5hbWVzIGZvciBzYW1lIHR5cGUuCisJKGdyb2tkZWNsYXJhdG9yKTogRm9yIHByb3RvaXplLCBkb24ndCBhbHdheXMgZ2V0IG1haW4gdmFyaWFudC4KKwkoZmluaXNoX2Z1bmN0aW9uKTogVGFrZSB0aGUgbWFpbiB2YXJpYW50IGhlcmUuCisKKwkqIGMtYXV4LWluZm8uYywgU1lTQ0FMTFMuYzogTmV3IGZpbGVzLgorCisJKiBNYWtlZmlsZS5pbiAocHJvdG8sIHByb3RvaXplLCB1bnByb3RvaXplKTogTmV3IHRhcmdldHMuCisJKHByb3RvaXplLm8sIHVucHJvdG9pemUubywgU1lTQ0FMTFMuYy5YLCB0ZXN0LXByb3RvaXplKTogTW9yZSBuZXcuCisJKGMtYXV4LWluZm8ubyk6IEFsc28gbmV3LgorCShTVEFHRVNUVUZGKTogQWRkIHByb3RvaXplLCB1bnByb3RvaXplLgorCShpbnN0YWxsKTogSW5zdGFsbCBwcm90b2l6ZSwgdW5wcm90b2l6ZSBhbmQgU1lTQ0FMTFMuYy5YLgorCitTYXQgRmViICAzIDE3OjA5OjU4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBBbGxvdyBjb252ZXJzaW9uIG9mIGFycmF5IGV4cCB0byBwb2ludGVyLgorCUNvbnN0cnVjdG9ycyB3aXRoIHR5cGVzIGFyZSBzaW1wbHkgZXhwcmVzc2lvbnMsIHNvIGRvbid0IHRyZWF0IGFzCisJaW5pdGlhbGl6ZXJzLgkJICAgIAorCisJKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogTmV3IHRhcmdldC4KKworCSogTWFrZWZpbGUuaW4gKGluY2x1ZGUvUkVBRE1FKTogVGFyZ2V0IGRlbGV0ZWQuCisJKGluY2x1ZGUpOiBEZWxldGVkLgorCShJTlNUQUxMKTogQ3JlYXRlIGluY2x1ZGUgZGlyIGhlcmUuCisKKwkqIE1ha2VmaWxlLmluIChhbGwuaW50ZXJuYWwpOiBFbmFibGUgY29tcGlsaW5nIGNjMXBsdXMuCisJKGxhbmctY3BsdXMpOiBOZXcgdGFyZ2V0LgorCSgqLm8pOiBBZGQgc29tZSBtaXNzaW5nIGRlcGVuZGVuY2llcy4KKwkoU1RBR0VTVFVGRik6IEFkZCBjYzFwbHVzLgorCitGcmkgRmViICAyIDE4OjIxOjIyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuYyAoZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogRG9uJ3QgYWJvcnQgd2hlbiBwYXNzZWQgRVJST1JfTUFSSy4KKworRnJpIEZlYiAgMiAxNzowNDozNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2Zvcl9pbmxpbmUpOiBVc2UgcmVhbCB3aWR0aCBvZiBydHVuaW9uIGluIGJjb3B5LgorCSogZW1pdC1ydGwuYyAoY29weV9ydHhfaWZfc2hhcmVkKTogTGlrZXdpc2UuCisKKwkqIGFzc2VydC5oIChhc3NlcnQpIFtfX1NURENfX106IFVzZSBjb21tYSBvcGVyYXRvciB0byBhdm9pZCB3YXJuaW5nLgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBUcmFkaXRpb25hbGx5IGNoYW5nZSByZXR1cm4gdHlwZSBmbG9hdAorCXRvIGRvdWJsZS4KKworCSogY3NlLmMgKHByZWRlY2lkZV9sb29wX2VudHJ5KTogR2l2ZSB1cCB1bmxlc3Mgc2ltcGxlIGp1bXAgZW50ZXJzIGxvb3AuCisKK1RodSBGZWIgIDEgMTk6MzI6MjggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHl5bGV4LCBza2lwX3doaXRlX3NwYWNlKTogQ1IgaXMgbm90IHdoaXRlc3BhY2UuCisKK1RodSBGZWIgIDEgMTc6MTg6MzMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tbTY4ay5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogTmV2ZXIgcmV0dXJuIERBVEFfUkVHUyBmb3IKKwlBRERSX1JFR1MsIGV2ZW4gZm9yIFFJbW9kZS4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogSWYgc291cmNlIGVxdWl2YWxlbnQgaXMgbm90IGluIHRhYmxlLCBidXQKKwlzb3VyY2UgaXMsIHB1dCBlcXVpdmFsZW50IGluIHNhbWUgY2xhc3MgYXMgc291cmNlLiAgQnV0IGRvIG5vdAorCWRvIHRoaXMgaWYgdGhlIGRlc3RpbmF0aW9uIGhhcyBhIFNUUklDVF9MT1dfUEFSVC4KKwkoY3NlX21haW4pOiBDYWxsIGluaXRfcmVjb2cgaW5zdGVhZCBvZiBpbml0X3JlY29nX25vX3ZvbGF0aWxlLgorCitUaHUgRmViICAxIDE3OjE4OjMzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGNwbHVzLXRhYi5jLCBjcGx1cy10YWIuaCk6IFJlbmFtZWQgZnJvbSBjcGx1cy1wYXJzZS4qLiAKKwkoVEFHUywgcmVhbGNsZWFuKTogUmVuYW1lZCB0aGVzZSBmaWxlcy4KKwkoY3BsdXMtZGVjbDIubywgY3BsdXMtdHlwZTIubywgY3BsdXMtc2VhcmNoLm8pOiBOZXcgdGFyZ2V0cy4KKwkoY3BsdXMtZXhjZXB0Lm8sIGNwbHVzLWV4cHIubyk6IE5ldyB0YXJnZXRzLgorCShuZXctbWV0aG9kLm8pOiBUYXJnZXQgZGVsZXRlZC4KKwkoQ1BMVVNfT0JKUyk6IEFkZCBhbmQgZGVsZXRlIG9iamVjdCBmaWxlcy4KKwkoQ1BMVVNfVFJFRV9IKTogQ2hhbmdlIGhlYWRlciBuYW1lcy4KKwkoSU5URVJOQUxfQ0ZMQUdTKTogU2V0IHRoZSBNRVJHRUQgZmxhZy4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBGbHVzaCBqdW5rIGluIGFzc2lnbiBvZiBDT05URVhULgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogTE9PUF9TVE1UIGlzIGp1c3QgYW4gaW5maW5pdGUgbG9vcC4KKwlIYW5kbGUgRVhJVF9TVE1ULgorCSogdHJlZS5kZWYgKEVYSVRfU1RNVCk6IENoYW5nZSBtZWFuaW5nOiBleGl0IGlmIGV4cHJlc3Npb24gaXMgdHJ1ZS4KKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBEbyBub3RoaW5nIGZvciBFWElUX1NUTVQuCisKK1RodSBGZWIgIDEgMTQ6MTA6NTcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3B0YWJzLmMgKGVtaXRfbm9fY29uZmxpY3RfYmxvY2spOiBBY2NlcHQgb3B0aW9uYWwgZXhwcmVzc2lvbgorCXRvIGJlIHBsYWNlZCBpbiBSRUdfRVFVQUwgbm90ZSBvbiBsYXN0IGluc24gZW1pdHRlZC4KKyAJSnVzdCBlbWl0IGluc25zIGlmIFRBUkdFVCBpcyBub3QgYSByZWdpc3Rlci4KKwkoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdW5vcCk6IENoYW5nZSBjYWxscy4KKworVGh1IEZlYiAgMSAwMTowMzoxNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuZGVmIChOT05fTFZBTFVFX0VYUFIpOiBOZXcgdHJlZSBjb2RlLgorCSogZm9sZC1jb25zdC5jIChub25fbHZhbHVlKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwlNYWtlIE5PTl9MVkFMVUVfRVhQUi4gIERvIG5vdGhpbmcgaWYgYXJnIGNlcnRhaW5seSBub3QgbHZhbHVlLgorCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogQ2FsbCBub25fbHZhbHVlLgorCShkZWZhdWx0X2NvbnZlcnNpb24sIGJ1aWxkX2Z1bmN0aW9uX2NhbGwsIGFjdHVhbHBhcmFtZXRlcmxpc3QpOgorCShidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0LCB0cnV0aHZhbHVlX2NvbnZlcnNpb24sIGJ1aWxkX21vZGlmeV9leHByKToKKwkoY29udmVydF9mb3JfYXNzaWdubWVudCwgZGlnZXN0X2luaXQpOiBTdHJpcCBOT05fTFZBTFVFX0VYUFIgZnJvbSBhcmdzLgorCShidWlsZF91bmFyeV9vcCwgYnVpbGRfbW9kaWZ5X2V4cHIpOiBObyBsb25nZXIgbmVlZCB0byBjaGVjayBmb3IKKwlOT1BfRVhQUiB0aGF0IGluZGljYXRlcyBub3QgYW4gbHZhbHVlLgorCShidWlsZF9jb21wb3VuZF9leHByLCBidWlsZF9jX2Nhc3QpOiBEb24ndCBzdHJpcCBOT05fTFZBTFVFX0VYUFIKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGRvX2p1bXApOiBIYW5kbGUgTk9OX0xWQUxVRV9FWFBSLgorCSogYy1kZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IsIGdyb2tkZWNsYXJhdG9yKTogU3RyaXAgdGhlbS4KKwkqIGMtcGFyc2UueSAoY2FzZSBsYWJlbCk6IFN0cmlwIHRoZW0uCisKKwkqIGxpbWl0cy5oIChJTlRfTUlOKTogRGVmaW5lIHNvIGl0IGhhcyB0eXBlIGBpbnQnLCBub3QgdW5zaWduZWQuCisJKENIQVJfTUlOLCBTQ0hBUl9NSU4sIFNIUlRfTUlOKTogUHV0IGFyZW5zIGFyb3VuZCB2YWx1ZS4KKworCSogcmVsb2FkMS5jIChpbmNfZm9yX3JlbG9hZCk6IEZvcmdldCByZWdfbGFzdF9yZWxvYWRfcmVnCisJZm9yIHRoZSByZWcgYmVpbmcgaW5jJ2QuCisKK1dlZCBKYW4gMzEgMTc6Mzc6NTMgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNwbHVzLSo6IE5ldyBmaWxlcy4KKworCSogdHJlZS5kZWYgKFRBUkdFVF9FWFBSKTogTmV3IG5hbWUgZm9yIE5FV19FWFBSLgorCSogdHJlZS5jIChzaW1wbGVfY3N0X2VxdWFsKTogQ2hhbmdlIE5FV19FWFBSIHRvIFRBUkdFVF9FWFBSLgorCisJKiBzdG10LmMgKGVzdGltYXRlX2Nhc2VfY29zdHMpOiBDaGVjayBhbGwgbm9kZXMgYWdhaW5zdCBBU0NJSSByYW5nZS4KKworCSogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IERlbGV0ZSBvYnNvbGV0ZSBub2RlIHR5cGVzLgorCisJKiByZWNvZy5jICh2YWxpZGF0ZV9jaGFuZ2UpOiBGaXggb25lLW9mZiBidWcgdGVzdGluZyByZWNvZ19tZW1vaXplZC4KKworCSogbG9jYWwtYWxsb2MuYyAobG9jYWxfYWxsb2MpOiBJbml0aWFsaXplIHF0eV9waHlzX3JlZy4KKworCSogZm9sZC1jb25zdC5jIChub25fbHZhbHVlKTogUHJvcGFnYXRlIFRSRUVfTElURVJBTCwgVFJFRV9WT0xBVElMRS4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IERlbGV0ZSBERUxFVEVfRVhQUi4KKwlDYWxsIGxhbmdfZXhwYW5kX2V4cHIgZm9yIGFueSB1bmtub3duIHRyZWUgY29kZS4KKwlIYW5kbGUgSUZfU1RNVCwgTE9PUF9TVE1ULCBMRVRfU1RNVCBmb3IgcmVhbC4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogT3V0cHV0IGFyZ3MgZm9yIG1ldGhvZCB0eXBlLgorCVRyZWF0IE9GRlNFVF9UWVBFIGFzIGludCBpZiBub3QgdXNpbmcgR0RCIGV4dGVuc2lvbnMuCisKK1dlZCBKYW4gMzEgMTc6MzI6MzUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3RtdC5jIChub2RlX2hhc19oaWdoX2JvdW5kLCBub2RlX2hhc19sb3dfYm91bmQpOgorCVVzZSBpbnRlZ2VyX29uZV9ub2RlLCBub3QgbmV3IG5vZGUuCisKKwkqIGV4cHIuYyAoZG9fanVtcCk6IEluIGNvbXBhcmlzb25zIGFnYWluc3QgemVybywgdXNlZCB1bnNpZ25lZCwgcmF0aGVyCisJdGhhbiBzaWduZWQsIGV4dGVuc2lvbnMsIGFzIHRoYXQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhlIGZhc3RlciBvbmUuCisKK1dlZCBKYW4gMzEgMTQ6MDk6NDAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IElnbm9yZSBUUkVFX0lOTElORSBpZiBub3QgLU8uCisKKwkqIG91dC1taXBzLmMgKG1pcHNfcHJvbG9ndWUpOiBIYW5kbGUgYmlnIHN0YWNrIGZyYW1lcyA+IDIqKjE2LgorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX3R5cGUpOiBSZW5hbWUgYG1heCcgZmllbGQgdG8gYG1heHZhbCcuCisJKFRZUEVfTUFYX1ZBTFVFLCBUWVBFX09GRlNFVF9CQVNFVFlQRSwgVFlQRV9NRVRIT0RfQkFTRVRZUEUpOgorCVVzZSBuZXcgbmFtZS4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBSZWplY3QgZml4ZWQgcmVncyB3aGVuIHNwaWxsaW5nIGxhcmdlIGdyb3Vwcy4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKToKKwlPcHRpb25hbGx5IHdhcm4gaWYgbm9uLXByb3RvIGRlZm4gd2l0aG91dCBwcmV2aW91cyBwcm90b3R5cGUuCisKKwkqIE1ha2VmaWxlLmluOiBOZXcgcnVsZSB0byBtYWtlIC4uLi9pbmNsdWRlIHN1YmRpci4KKwlOZXcgcnVsZSB0byBydW4gZml4aW5jbHVkZXMgaW50byBpdC4KKwlSdWxlIGBpbnN0YWxsJyBkZXBlbmRzIG9uIHRoZW0uCisKKwkqIGFzc2VydC5oIChhc3NlcnQpIFtubyBOREVCVUddOiBTcGxpdCBpbnRvIHZlcnNpb25zIHdpdGgvb3V0IF9fU1REQ19fCisJKF9hc3NlcnQpIFtfX1NURENfX106IFBhc3MgZXhwcmVzc2lvbiBhbmQgZmlsZSBzZXBhcmF0ZWx5IHRvIF9lcHJpbnRmLgorCShfYXNzZXJ0KSBbbm90IF9fU1REQ19fXTogTGlrZXdpc2UsIGJ1dCBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4KKwkqIGdudWxpYjIuYyAoX19lcHJpbnRmKTogSGFuZGxlIDMgYXJncyBwbHVzIGZvcm1hdCBzdHJpbmcuCisKKwkqIHRtLWkzODYuaCAoU1RBQ0tfQk9VTkRBUlkpOiBEZWZpbmUgaXQuCisKK1R1ZSBKYW4gMzAgMTY6MjQ6MTQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBGaXggdHlwbyBpbiBuYW1lIG9mIHZhcmFyZ3MgZmlsZS4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IERvbid0IGFsbG93IGNvbWJpbmUgdG8gdmlvbGF0ZSBtYWNoaW5lJ3MKKwlhbGlnbm1lbnQgcmVzdHJpY3Rpb24uCisKK1N1biBKYW4gMjggMDM6NTM6MjggMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCByaW8pCisKKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBEb24ndCB3YXJuIGZvciBMT09QX1NUTVQsIElGX1NUTVQsCisJb3IgTEVUX1NUTVQuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDb2RlIHRvIG1lbnRpb24gc3ltYm9sIHRoYXQgd2FzIG5vdAorCXdyaXR0ZW4gdG8gYXNtIGZpbGUgaXMgbm93ICNpZiAwJ2Qgb3V0LiAgV2hhdCBnb29kIGlzIGl0IHRlbGxpbmcgdGhlCisJZGVidWdnZXIgYWJvdXQgYSBzeW1ib2wgaXQgY2Fubm90IHNlZT8KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogQ2hhbmdlIE1FVEhPRF9UWVBFIHByaW50IGNoYXJhY3RlciBmcm9tCisJJ0AnIHRvICcjJy4gIEFsc28sIGRvbid0IHRyeSB0byBvdXRwdXQgQ09OU1RfREVDTHMuICBHREIgZG9lc24ndAorCXVuZGVyc3RhbmQgdGhlbSwgYW5kIHRoZXkgZG9uJ3QgaGF2ZSBERUNMX09GRlNFVHMuCisKKwkqIHNwYXJjLm1kIChmbG9hdHNpZGYyKTogQ2hhbmdlZCBjb25zdHJhaW50IGZyb20gInJmbSIgdG8gInJtIiBmb3IKKwlzZWNvbmQgb3BlcmFuZC4KKworCSogdG9wbGV2LmMgKGxhbmdfZXhwYW5kX2V4cHIpOiBOZXcgdmFyaWFibGUgaXMgcG9pbnRlci10by1mdW5jdGlvbgorCXdoaWNoIGV4cGFuZHMgbGFuZ3VhZ2Utc3BlY2lmaWMgdHJlZSBjb2Rlcy4gIEl0cyBkZWZhdWx0IGlzCisJYGZhbmN5X2Fib3J0Jy4KKworU2F0IEphbiAyNyAxMDoxODo0NCAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHJpbykKKworCSogZ2NjLmMgKG1haW4pOiBJbml0aWFsaXplIENPTVBJTEVSUyBiZWZvcmUgY2FsbGluZworCWB2YWxpZGF0ZV9hbGxfc3dpdGNoZXMnLgorCisJKiB0cmVlLmMgKGRlY2xfe3R5cGUsZnVuY3Rpb259X2NvbnRleHQpOiBIYW5kbGUgTEVUX1NUTVQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2xfY2xlYW51cCk6IE5ldyBmdW5jdGlvbi4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IE5vIGxvbmdlciB0YWtlcyBDTEVBTlVQIHBhcmFtZXRlci4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiB0cmVlLmMgKGJ1aWxkX3tsb29wLGlmLGdvdG8sY29tcG91bmR9LCBldGMpOiBUdXJuIHRoZXNlIHRyZWUKKwljb25zdHJ1Y3RvcnMgYmFjayBvbi4KKworCSogdHJlZS5kZWY6IERlbGV0ZSBERUxFVEVfRVhQUiwgUFVTSF9FWFBSLCBQT1BfRVhQUi4KKworCSogYy10eXBlY2suYyAobWF4KTogTmV3IG1hY3JvLgorCisJKiBjLWRlY2wuYyAobWF5YmVfYnVpbGRfY2xlYW51cCk6IE5ldyBmdW5jdGlvbi4KKworCSogdHJlZS5jICh7dmFsdWUscHVycG9zZX1fbWVtYmVyKTogTmV3IGZ1bmN0aW9ucy4gIFJldHVybnMgZmlyc3QKKwllbGVtZW50IG9mIExJU1QgdGhhdCBtYXRjaGVzIHJlc3BlY3RpdmUgY29tcG9uZW50cyB3aXRoIEVMRU0uCisKKwkqIHZhcmFzbS5jIChmaXJzdF9nbG9iYWxfb2JqZWN0X25hbWUpOiBWYXJpYWJsZSBkZWZpbmVkLgorCitTYXQgSmFuIDI3IDIzOjMxOjAyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUmVqZWN0IGZpeGVkIHJlZ3Mgd2hlbiBjb21wbGV0aW5nIGdyb3VwIG9mIDIuCisKK0ZyaSBKYW4gMjYgMTc6Mjg6MzMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChkb19qdW1wKTogRG9uJ3QgdXNlIENPTlNUMF9SVFggd2hlbiB2YWx1ZSB0byBiZSB0ZXN0ZWQgaXMKKwlDT05TVF9JTlQuCisKK0ZyaSBKYW4gMjYgMTM6Mzk6MDEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobWFpbik6IFdhcm4gYWJvdXQgYmFkIHN3aXRjaGVzIGF0IGJlZ2lubmluZywgbm90IGF0IGVuZC4KKworVGh1IEphbiAyNSAyMjowMzozNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoZ2VuZXJhbF9pbmR1Y3Rpb25fdmFyKTogUmVqZWN0IHdpZGVuaW5nIG11bHRpcGx5LgorCisJKiBjY2NwLmMgKGdyb3dfb3V0YnVmKTogQWx3YXlzIHJldHVybiAwLgorCitUaHUgSmFuIDI1IDA3OjA0OjMxIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBDb3JyZWN0bHkgcmVmZXJlbmNlIGxlbmd0aCBpbgorCSh6ZXJvX2V4dHJhY3QgKHplcm9fZXh0ZW5kIC4uLiApKSBjb21iaW5hdGlvbnMuCisKKwkqIGMtZGVjbC5jOiBEZWZpbmUgd2Fybl90cmFkaXRpb25hbC4KKwkoYnVpbGRfZW51bWVyYXRvcik6IFJlbW92ZSBOT1BfRVhQUnMgZnJvbSBkZWZhdWx0IHZhbHVlIGFsc28uCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFN0cmlwIE5PUF9FWFBScyB3aGVuIGxvb2tpbmcgZm9yIGNvbnN0YW50cy4KKworVGh1IEphbiAyNSAwMTo1NzozNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogQ2xlYXIgZXhlY3V0ZSBiaXQgZm9yIG5vbmV4ZWN1dGFibGUgZmlsZXMuCisKKwkqIGk4NjAubWQgKGFuZHNpMyk6IFRydW5jYXRlIHhvcDIgY29uc3RhbnQgdG8gMTYgYml0cy4KKworV2VkIEphbiAyNCAyMjozMjo0NyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5lbWl0LmMgKG1haW4pOiBJbmNsdWRlIG91dHB1dC5oIGluIGluc24tZW1pdC5jLgorCSogZ2VucGVlcC5jIChtYWluKTogU2ltaWxhci4KKwkqIGdlbnJlY29nLmMgKG1haW4pOiBEaXR0by4KKwkqIE1ha2VmaWxlLmluIChpbnNuLWVtaXQuaCwgaW5zbi1wZWVwLmgsIGluc24tcmVjb2cuaCk6IEFkZCBkZXBlbmRhbmN5LgorCitXZWQgSmFuIDI0IDIwOjEzOjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYWxiZXJ0LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoZG9fZGVmaW5lKTogUmVwb3J0IGVycm9yIGZvciBkdXBsaWNhdGUgbWFjcm8gYXJncy4KKworTW9uIEphbiAyMiAwNzo1MjoyOCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6IFJld29yayBjaGFuZ2Ugb2YgSmFudWFyeSA3dGggdG8gYWxsb3cKKwlmb3Igbm8gcHJldmlvdXMgaW5zbiBhbmQgY2xlYXIgZXF1aXZhbGVuY2UgaW5mb3JtYXRpb24gb2YgY29ycmVjdAorCXBzZXVkby4KKworTW9uIEphbiAyMiAwMToyMjowMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IHNpbXBsaWZ5IG5vbi1sdmFsdWUgdG8gYW4gbHZhbHVlLgorCShub25fbHZhbHVlKTogTmV3IGZuOyBtYWtlcyBhIE5PUF9FWFBSIHdpdGggcmVhZG9ubHkgZmxhZy4KKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wLCBidWlsZF9tb2RpZnlfZXhwcik6IFJlamVjdCBzdWNoLgorCitTdW4gSmFuIDIxIDIwOjUzOjQ5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAobHZhbHVlX3ApOiBEb24ndCBjYWxsIGxhbmd1YWdlX2x2YWx1ZV92YWxpZC4KKwlEb24ndCBib3RoZXIgd2l0aCBsb29raW5nIGZvciBORVdfRVhQUiBvciBSRUZFUkVOQ0VfVFlQRS4KKwkobGFuZ3VhZ2VfbHZhbHVlX3ZhbGlkKTogRGVsZXRlZC4KKworU2F0IEphbiAyMCAxOTo1MDoxNSAxOTkwICBNaWNoYWVsIFRpZW1hbm4gIChtdGllbWFubiBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBJbXBsZW1lbnRlZCBsYW5ndWFnZS1pbmRlcGVuZGVudCBleHBhbnNpb24KKwlmb3IgTkVXX0VYUFIuCisKK1RodSBKYW4gMTggMTQ6Mjk6MTAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisgCSogY2NjcC5jIChyZXNjYW4pOiBTZXQgYmVnX29mX2xpbmUgd2hlbiBzdHJpbmcgZW5kcyBhdCBuZXdsaW5lLgorCShza2lwX3F1b3RlZF9zdHJpbmcpOiBEb24ndCBzd2FsbG93IG5ld2xpbmUgdGhhdCBlbmRzIGEgc3RyaW5nLgorCShoYW5kbGVfZGlyZWN0aXZlKTogTm8gbmVlZCB0byBiYWNrIHVwIGhlcmUuCisJUGFzcyBMSU1JVCBhcyBzZWNvbmQgYXJnIHRvIHNraXBfcXVvdGVkX3N0cmluZy4KKworVGh1IEphbiAxOCAxMjo1MDowOSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydCk6IFZlcmlmeSBDT05TVF9ET1VCTEUgaXMgaW50ZWdlciBtb2RlLgorCShnZW5faGlnaHBhcnQpOiBBZGQgc3VwcG9ydCBmb3IgQ09OU1RfSU5UIGFuZCBDT05TVF9ET1VCTEUuCisKKwkqIHJlY29nLmMgKGdlbmVyYWxfb3BlcmFuZCk6IERvbid0IGFsbG93IG5lc3RlZCBTVUJSRUdzLgorCShub25tZW1vcnlfb3BlcmFuZCwgbWVtb3J5X29wZXJhbmQsIHJlZ2lzdGVyX29wZXJhbmQpOiBEaXR0by4KKworCSogZW1pdC1ydGwuYyAoZ2VuX3JlZ19ydHgpOiBEb24ndCBhbGxvdyBjcmVhdGlvbiBvZiBwc2V1ZG9zCisJZHVyaW5nIG9yIGFmdGVyIHJlbG9hZC4KKworVGh1IEphbiAxOCAxMTo0MToxNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGFjdHVhbHBhcmFtZXRlcmxpc3QpOiAtV2NvbnZlcnNpb24gd2FybnMgaWYKKwlyZXByZXNlbnRhdGlvbiBvciB3aWR0aCBpcyBjaGFuZ2VkLgorCitUaHUgSmFuIDE4IDAxOjA5OjQ3IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKG10aWVtYW5uIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKHZhcmlvdXMgcGxhY2VzKTogRG9uJ3QgYXNzdW1lIHRoYXQgREVDTF9OQU1FIG9mIGEKKwlQQVJNX0RFQ0wgaXMgbm9uLXplcm8uICBJdCBtaWdodCBiZSBlbXB0eSBmb3IgYW5vbnltb3VzIHBhcm1zLgorCitUaHUgSmFuIDE4IDAwOjA2OjU4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogcXR5X3BoeXNfc3VnZyBpcyBub3cgYW4gYXJyYXkgb2YKKwlIQVJEX1JFR19TRVRzLiAgSW5pdGlhbGl6ZSBuZXcgdmFyaWFibGUgcXR5X3BoeXNfaGFzX3N1Z2cuCisJKGJsb2NrX2FsbG9jKTogRG9uJ3QgdGVzdCBmb3Igbm9ubG9jYWwgZ290b3MgaGVyZS4KKwlUZXN0IHF0eV9waHlzX2hhc19zdWdnIGluc3RlYWQgb2YgcXR5X3BoeXNfc3VnZyB0byBzZWUgaWYKKwlxdWFudGl0eSBuZWVkcyBlYXJseSBhbGxvY2F0aW9uLgorCShxdHlfY29tcGFyZSwgcXR5X2NvbXBhcmVfMSk6IE5vIGxvbmdlciBjb25zaWRlciB3aGV0aGVyIGEgcXVhbnRpdHkKKwloYXMgYSBoYXJkIHJlZ2lzdGVyIHN1Z2dlc3Rpb24gYXMgcGFydCBvZiBpdHMgcHJpb3JpdHkuCisJKGNvbWJpbmVfcmVncyk6IFdlIG5vdyByZWNvcmQgbXVsdGlwbGUgaGFyZCByZWdpc3RlciBzdWdnZXN0aW9ucworCWluIHF0eV9waHlzX3N1Z2cuCisJKGZpbmRfZnJlZV9yZWcpOiBUZXN0IGhlcmUgZm9yIG5vbmxvY2FsIGdvdG9zLgorCVN1cHBvcnQgbmV3IG1lYW5pbmcgb2YgcXR5X3BoeXNfc3VnZyBieSByZXN0cmljdGluZyB0byB0aG9zZQorCXJlZ2lzdGVycyBpZiBqdXN0X3RyeV9zdWdnZXN0ZWQuCisJQ2hlY2sgZm9yIG5vIHJlZ2lzdGVycyBhdmFpbGFibGUgcHJpb3IgdG8gbG9vcGluZyBvdmVyIHJlZ2lzdGVycy4KKworCSogZ2xvYmFsLWFsbG9jLmMgKHBydW5lX3ByZWZlcmVuY2VzKTogTmV3IGZuLgorCShnbG9iYWxfYWxsb2MpOiBObyBsb25nZXIga2VlcCBhIHNpbmdsZSB2ZWN0b3Igb2Ygd2hpY2ggcmVnaXN0ZXJzCisJc29tZW9uZSBwcmVmZXJzOyBpbnN0ZWFkIGtlZXAgdGhpcyByZWNvcmQgb25lIHBlciBhbGxvY2F0aW9uIG51bWJlci4KKwlSZWNvcmQgcmVnaXN0ZXJzIG5vdCBzYXZlZCBvdmVyIGNhbGxzIGFzIGFscmVhZHkgdXNlZCBmb3IgcmVnaXN0ZXIKKwlhbGxvY2F0aW9uIHB1cnBvc2VzLCBzbyB3ZSBjYW4gZmVlbCBmcmVlIHRvIGFsbG9jYXRlIHRoZW0gd2l0aCBubworCWNvc3QuCisJQ2FsbCBuZXcgZm4gdG8gcHJ1bmUgcHJlZmVyZW5jZXMgYW5kIGJ1aWxkIGxpc3Qgb2YgcmVnaXN0ZXJzCisJcHJlZmVycmVkIGJ5IGVhcmxpZXIgYWxsb2Nub3MuCisJZmluZF9yZWcgbm8gbG9uZ2VyIGdldHMgcHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBhcyBhcmd1bWVudC4KKwkoZmluZF9yZWcpOiBEb24ndCB0YWtlIHByZWZlcnJlZCByZWdpc3RlcnMgYXMgYXJndW1lbnQ7IGdldCB0aGUKKwlpbmZvIGZyb20gZ2xvYmFsIHZhcmlhYmxlcy4KKwkoc2V0X3ByZWZlcmVuY2UpOiBSZW1vdmUgcmVnc19zb21lb25lX3ByZWZlcnMuCisJKGR1bXBfY29uZmxpY3RzKTogUHJpbnQgcmVnaXN0ZXIgcHJlZmVyZW5jZXMgaW4gZHVtcCBmaWxlLgorCQorV2VkIEphbiAxNyAxNjowMDo1OSAxOTkwICBNaWNoYWVsIFRpZW1hbm4gIChtdGllbWFubiBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAoZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogTmV3IGZ1bmN0aW9uLCByZXR1cm5zIHRoZQorCWlubmVybW9zdCBERUNMX0NPTlRFWFQgb2YgRk5ERUNMIHdoZW4gdGhhdCBjb250ZXh0IGlzIGEKKwlGVU5DVElPTl9ERUNMLgorCSogdHJlZS5jIChkZWNsX3R5cGVfY29udGV4dCk6IE5ldyBmdW5jdGlvbiwgcmV0dXJucyB0aGUKKwlpbm5lcm1vc3QgREVDTF9DT05URVhUIG9mIEZOREVDTCB3aGVuIHRoYXQgY29udGV4dCBpcyBhCisJVFlQRV9ERUNMLgorCSogQWxsIGNhbGxlcnMgY2hhbmdlZCB0byB1c2UgYGRlY2xfZnVuY3Rpb25fY29udGV4dCcgd2hlbiBoYW5kbGluZworCW5lc3RlZCBmdW5jdGlvbnMuCisJKiBBbGwgQysrIGNhbGxlcnMgY2hhbmdlZCB0byB1c2UgYGRlY2xfdHlwZV9jb250ZXh0JyB3aGVuIGhhbmRsaW5nCisJbWVtYmVyIGZ1bmN0aW9ucy4KKworCSogZXhwci5jIChmaXhlZF90eXBlX3ApOiBOZXcgZnVuY3Rpb24gc2F5cyB3aGV0aGVyIHRoZSBjb21waWxlcgorCWd1YXJhbnRlZXMgdGhhdCBpdCBrbm93cyB0aGUgdHJ1ZSB0eXBlIG9mIGFuIG9iamVjdC4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDYWxsIHRoYXQgZnVuY3Rpb24gZm9yIElOSVRfRVhQUiBhbmQKKwlNT0RJRllfRVhQUi4gIEFsc28sIGZvciBNT0RJRllfRVhQUiwgY2hlY2sgYm90aCBSSFMgYW5kIExIUy4KKworCSogdHJlZS5oIChERUNMX0FSR19UWVBFKTogVXNlIElOSVRJQUwsIG5vdCBBUkdVTUVOVFMgc2xvdCBpbgorCWB0cmVlX2RlY2wuICBOb3cgcmVzZXJ2aW5nIEFSR1VNRU5UUyBzbG90IGZvciBWQVJfREVDTCBhbmQKKwkgUEFSTV9ERUNMIGZvciBsYW5ndWFnZS1zcGVjaWZpYyBmZWF0dXJlcy4KKworCSogdHJlZS5jIChidWlsZF9kZWNsKTogRG9uJ3Qgc2V0IERFQ0xfUFJJTlRfTkFNRSBieSBkZWZhdWx0LgorCisJKiBhc3NlcnQuaDogQXNzdW1lIHRoYXQgdW5kZWZpbmVkIF9fR05VQ19fIGltcGxpZXMgYGFzc2VydCcgbXVzdAorCXJlbHkgb24gcHJpbnRmLgorCitXZWQgSmFuIDE3IDE1OjMxOjQwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworIAkqIGNjY3AuYyAocmVzY2FuKTogSWYgdHJhZGl0aW9uYWwsIGVuZCBwcmVwcm9jIG51bWJlciBhZnRlciBleHB0IHNpZ24uCisKK1dlZCBKYW4gMTcgMTU6MTg6MjUgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAobXRpZW1hbm4gYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBzdG10LmM6IEV4dGVuZGVkIHN0cnVjdCBuZXN0aW5nIHRvIGhvbGQgZXhjZXB0aW9uIGhhbmRsaW5nCisJY29udG91cnMuICBOZXcgZnVuY3Rpb25zOgorCisJICAgZXhwYW5kX3N0YXJ0X3RyeSwgZXhwYW5kX2VuZF90cnksIGluX3RyeV9ibG9jaworCSAgIGV4cGFuZF9zdGFydF9leGNlcHQsIGV4cGFuZF9lbmRfZXhjZXB0LCBpbl9leGNlcHRfYmxvY2sKKwkgICBleHBhbmRfc3RhcnRfY2F0Y2gsIGV4cGFuZF9lbmRfY2F0Y2gsIGV4cGFuZF9jYXRjaF9kZWZhdWx0CisJICAgZXhwYW5kX3JhaXNlLCBleHBhbmRfZXNjYXBlX2V4Y2VwdCwgaW5fZXhjZXB0aW9uX2hhbmRsZXIKKworV2VkIEphbiAxNyAxMzo0ODowMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IFR5cG8sIGhhZCBgaW5jbHVkZXMnIGZvciBgaW5jbHVkZScuCisJQWx3YXlzIGluY3JlbWVudCBwLgorCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6IERlbGV0ZSBzcHVyaW91cyBgYnJlYWsnLgorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IERlbGV0ZSByZWYgdG8gdW5kZWYgdmFyIGZpcnN0X3RpbWUuCisKK1dlZCBKYW4gMTcgMTM6MzU6NDcgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jOiBVbm1lcmdlIGFsbCBjaGFuZ2VzIG9mIEJyeWFuIEJvcmVoYW0tLW5vIHBhcGVycyAoeWV0KS4KKworV2VkIEphbiAxNyAxMjozMzo1MiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogU3RydWN0IHJlcXVpcmVzIEJMS21vZGUgaWYgYW55IGZpZWxkCisJY3Jvc3NlcyBhIHdvcmQgYm91bmRhcnkuCisKK1dlZCBKYW4gMTcgMTI6MDQ6MTggMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogVW50ZXJtaW5hdGUgY29tbWVudCB0ZXJtaW5hdGVkLgorCisJKiB0cmVlLmMgKGx2YWx1ZV9wLGx2YWx1ZV9vcl9lbHNlKTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKwlmaWxlLgorCSogYy10eXBlY2suYyAobHZhbHVlX3AsbHZhbHVlX29yX2Vsc2UpOiBQdXQgdGhlbSBpbiB0aGlzIGZpbGUuCisKK1dlZCBKYW4gMTcgMDA6NDY6MjQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBEZWxldGUgZ2FyYmFnZSBhY2NpZGVudGFsbHkgYWRkZWQgYmVmb3JlLgorCisJKiB0cmVlLmMgKHNldF9pZGVudGlmaWVyX3NpemUpOiBTSVpFIGlzIHNpemUgaW4gYnl0ZXMuCisJKiB0cmVlLmMgKGdldF9pZGVudGlmaWVyKTogSWYgYHNldF9pZGVudGlmaWVyX3NpemUnIGhhcyBub3QgYmVlbgorCWNhbGxlZCwgYWJvcnQuCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEb24ndCBjYWxsIGBzZXRfaWRlbnRpZmllcl9zaXplJworCWZyb20gaGVyZS4KKwkqIGMtcGFyc2UueSAoaW5pdF9sZXgpOiBDYWxsIGBzZXRfaWRlbnRpZmllcl9zaXplJyBmcm9tIGhlcmUuCisKKwkqIHZhcmFzbS5jIChmb3JjZV9jb25zdF9tZW0pOiBTYXZlIERFU0MncyBsYWJlbCBvbiB0aGUKKwlzYXZlYWJsZV9vYnN0YWNrLiAgKE5vdGUsIHNhdmVhYmxlIGlzIG1pc3NwZWxsZWQuKQorCisJKiBsaXN0aW5nOiBOZXcgZmlsZS4KKworVHVlIEphbiAxNiAyMDo0Mzo1NSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfc2VxdWVuY2UpOiBQdXQgaW4gI2lmIDAuCisKK1R1ZSBKYW4gMTYgMTc6MjU6NDMgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jOiBNZXJnZWQgQnJ5YW4gQm9yZWhhbSdzIHVuZHVtcGluZyBjb2RlLgorCisJKiBwcmludC10cmVlLmMgKGR1bXApOiBIYW5kbGUgVFJFRV9WRUMuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnRfcG9vbCk6ICBXaGVuIGRvbmUsIHNldCBGSVJTVF9QT09MLAorCUxBU1RfUE9PTCB0byB6ZXJvLgorCisJKiB2YXJhc20uYyAoZmlyc3RfZ2xvYmFsX29iamVjdF9uYW1lKTogTmV3IHZhcmlhYmxlLiAgUmVjb3JkcyB0aGUKKwluYW1lIG9mIHRoZSBmaXJzdCBnbG9iYWwgZGVjbGFyYXRpb24gKHZhcmlhYmxlIG9yIGZ1bmN0aW9uKSB3aGljaGkKKwlpcyB3cml0dGVuIHRvIHRoZSBhc3NlbWJseSBmaWxlLgorCisJKiB0cmVlLmggKHRyZWVfY29kZV9uYW1lKTogQWRkIGRlY2xhcmF0aW9uLgorCitUdWUgSmFuIDE2IDE3OjA2OjI5IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogTWFrZSBhbiBpbml0aWFsIHBhc3MgdG8gdHJ5IHRvCisJYWxsb2NhdGUgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBzdWdnZXN0ZWQgaGFyZCByZWdpc3RlcnMuCisJKGZpbmRfZnJlZV9yZWcpOiBBZGQgbmV3IGFyZ3VtZW50IHRvIG9ubHkgdHJ5IHN1Z2dlc3RlZCBoYXJkIHJlZ2lzdGVyLgorCitUdWUgSmFuIDE2IDE1OjU0OjA2IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKHRyZWVfdmVjKTogQWRkZWQuCisKKwkqIHRyZWUuZGVmIChJREVOVElGSUVSX05PREUpOiBEZWZhdWx0IGxlbmd0aCBpcyAyLgorCSogdHJlZS5kZWYgKFRSRUVfVkVDKTogRGVmaW5lIGl0LgorCSogdHJlZS5kZWYgKHtORVdfLERFTEVURV8sUkVGRVJFTkNFX31FWFBSKTogZml4ZWQgY29tbWVudHMuCisKKwkqIHRyZWUuYyAocHJlc2VydmVfaW5pdGlhbGl6ZXIpOiBOZXcgZnVuY3Rpb24uICBMaWtlCisJYHByZXNlcnZlX2RhdGEnLCBidXQgc2F2ZXMgbm9kZXMgb24gbW9tZW50YXJ5X29ic3RhY2sgYXMgd2VsbC4KKwkqIHRyZWUuYyAobWFrZV90cmVlX3ZlYyk6IE5ldyBmdW5jdGlvbi4gIEFsbG9jYXRlcyBhIFRSRUVfVkVDIG5vZGUuCisJKiB0cmVlLmMgKGNvcHlfbm9kZSk6IFN1cHBvcnQgYWRkZWQgZm9yIFRSRUVfVkVDLgorCSogdHJlZS5jIChidWlsZF9wYXJzZV9ub2RlKTogTmV3IGZ1bmN0aW9uLiAgQnVpbGRzIHRyZWUgbm9kZSBvbgorCVRFTVBfREVDTF9PQlNUQUNLLgorCQorVHVlIEphbiAxNiAxNToyMzoxNiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmg6IEVsaW1pbmF0ZSBkZWZpbml0aW9ucyBvZiBhbmRjYl9vcHRhYiBhbmQgZXhwYW5kX2JpdF9hbmQuCisJKiBleHBtZWQuYyAoZXhwYW5kX2JpdF9hbmQpOiBFbGltaW5hdGUgZnVuY3Rpb24uCisJKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCwgZXh0cmFjdF9maXhlZF9iaXRfZmllbGQsIGV4cGFuZF9kaXZtb2QpOgorCVJlcGxhY2UgZXhwYW5kX2JpdF9hbmQgd2l0aCBjYWxsIHRvIGV4cGFuZF9iaW5vcC4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBIYW5kbGUgVFJVVEhfQU5EX0VYUFIgYW5kIEJJVF9BTkRfRVhQUgorCWFzIG5vcm1hbCBiaW5hcnkgb3BlcmF0aW9ucy4KKwkoZG9fc3RvcmVfZmxhZyk6IFJlcGxhY2UgZXhwYW5kX2JpdF9hbmQgd2l0aCBleHBhbmRfYmlub3AuCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBpbml0X29wdGFicyk6IEVsaW1pbmF0ZSBhbmRjYl9vcHRhYi4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IERvbid0IHVzZSBleHR6diBmb3Igcm90YXRlLgorCUlmIGFsbCB0aHJlZSB0cmllcyBhdCBhIHNoaWZ0IG9wZXJhdGlvbiBmYWlsZWQsIGRlbGV0ZSB0aGUKKwlpbnNucyBtYWRlIGR1cmluZyB0aGUgbGFzdCB0cnkuCisJSGFuZGxlIGZhaWx1cmUgb2YgZXh0enYgb3BlcmF0aW9uLgorCUNhbGwgcHJvdGVjdF9mcm9tX3F1ZXVlIGJlZm9yZSBjb252ZXJ0X3RvX21vZGUgZm9yIG9wMS4KKworVHVlIEphbiAxNiAxMDozODoyOCAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKKworCSogdHJlZS5jOiBBZGRlZCB0ZW1wX2RlY2xfb2JzdGFjayBmb3IgYnVpbGRpbmcgZGVjbGFyYXRvcnMgd2l0aG91dAorCW5lZWRpbmcgdG8gdXNlIHBlcm1hbmVudF9vYnN0YWNrIGF0IHRvcCBsZXZlbC4KKwkqIHRyZWUuYyAoaW5pdF90cmVlKTogSW5pdCB0ZW1wX2RlY2xfb2JzdGFjay4KKwkqIHRyZWUuYyAocGVybWFuZW50X2FsbG9jYXRpb24pOiBGcmVlIG5vZGVzIGFsbG9jYXRlZCBvbgorCXRlbXBfZGVjbF9vYnN0YWNrLgorCSogdHJlZS5jIChidWlsZF9kZWNsX2xpc3QsZGVjbF90cmVlX2NvbnMpOiBOZXcgZnVuY3Rpb25zLiAgTGlrZQorCWBidWlsZF90cmVlX2xpc3QnIGFuZCBgdHJlZV9jb25zJywgYnV0IGZvciBidWlsZGluZyBvbgorCXRlbXBfZGVjbF9vYnN0YWNrLgorCSogdHJlZS5jIChidWlsZDEpOiBOZXcgZnVuY3Rpb24uICBCdWlsZHMgdHJlZSBub2RlIGZvciB1bmFyeSB0cmVlCisJbm9kZSBraW5kczsgZG9lc24ndCB1c2UgdmFyYXJncy4KKwkqIHRyZWUuYyAoc2ltcGxlX2NzdF9lcXVhbCk6IEludGVyZmFjZSBjaGFuZ2VkIHRvIHJldHVybiAxIGlmCisJYXJndW1lbnRzIGFyZSBlcXVhbCwgMCBpZiBub3QsIGFuZCAtMSBpZiBhcmd1bWVudHMgd2VyZSBub3QKKwl1bmRlcnN0b29kIGJ5IHRoZSBmdW5jdGlvbi4KKwkqIHRyZWUuYyAoYnVpbGRfe21ldGhvZCxvZmZzZXR9X3R5cGUpOiBUWVBFXypfQkFTRVRZUEUgaXMgdGhlCisJVFlQRV9NQUlOX1ZBUklBTlQgb2YgQkFTRVRZUEUuCisKK01vbiBKYW4gMTUgMDE6NTA6NTEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjZXhwLnkgKGV4cCk6IEFjY2VwdCB1bmFyeSArLgorCisJKiBNYWtlZmlsZS5pbiAoaGFyZC1wYXJhbXMpOiBDb21waWxlIHdpdGggR0NDLgorCShoYXJkLXBhcmFtcy5vKTogTGlrZXdpc2UsIGFuZCBkZXBlbmQgb24gdGhlIEdDQyBleGVjdXRhYmxlcy4KKworCSogdG0tc3BhcmMuaCAoQ09OU1RfQ09TVFMpOiBHaXZlIDEsIG5vdCAwLCBmb3IgaW1tZWQgY29uc3RzLgorCitTdW4gSmFuIDE0IDE0OjM4OjEwIDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGVzdGltYXRlX2Nhc2VfY29zdHMpOiBOZXcgZnVuY3Rpb24uICBDYXNlIGNvZGUgbm8gbG9uZ2VyCisJYXNzdW1lcyB0aGF0IGFsbCBjYXNlIHZhbHVlcyBhcmUgZXF1YWxseSBsaWtlbHkgZm9yIGFsbCB0eXBlcy4gIEluCisJcGFydGljdWxhciwgd2hlbiB0aGUgdHlwZSBvZiBhcmd1bWVudCBmb3IgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgZG9lcworCW5vdCBsb29rIGxpa2UgaXQgaXMgbm90IEFTQ0lJIHRleHQsIHdlIGFzc3VtZSB0aGF0IGl0IG1pZ2h0IGJlLCBhbmQKKwlhc3NpZ24gYSB3ZWlnaHQgdG8gaXRzIHZhbHVlIGJhc2VkIG9uIGZyZXF1ZW5jeSBkaXN0cmlidXRpb24gb2YKKwljaGFyYWN0ZXJzIGluIEFTQ0lJIHRleHQuCisJKiBzdG10LmMgKGJhbGFuYWNlX2Nhc2Vfbm9kZXMpOiBJZiBjYXNlIHZhbHVlcyBsb29rIGxpa2UgQVNDSUkgdGV4dCwKKwl0aGVuIHVzZSB0aGUgY29zdCB0YWJsZS4gIE90aGVyd2lzZSwgZG8gbm90LiAgVXNpbmcgdGhlIGNvc3QgdGFibGUKKwltZWFucyB0aGF0IHRoZSBvdGhlcndpc2UgYWxtb3N0LWJhbGFuY2VkIGJpbmFyeSB0cmVlIG1heSBiZSBza2V3ZWQKKwlpbiBob3BlcyBvZiBwaWNraW5nIHVwIGNvbW1vbiB2YWx1ZXMgbW9yZSBxdWlja2x5IHRoYW4ganVzdAorCWxvZyhuKS4gIFRoaXMgaXMgZG9uZSBhdCB0aGUgZGlyZWN0IGV4cGVuc2Ugb2YgdGhlIGxlc3MgY29tbW9uCisJdmFsdWVzLCB3aGljaCB3aWxsIGJlIHJlYWNoZWQgYXQgbW9yZSB0aGFuIGxvZyhuKS4KKwkqIHN0bXQuYyAoZW1pdF9jYXNlX25vZGVzKTogSWYgdXNpbmcgQ09TVF9UQUJMRSBhbmQgdGhlIG1vc3QgbGlrZWx5CisJY2FzZSB2YWx1ZSBpcyBvbiBvbmUgc2lkZSBvZiB0aGUgdHJlZSBvciBhbm90aGVyLCBoYW5kLXBpY2sgYm91bmRhcnkKKwl0ZXN0cyBzbyB0aGF0IGNvbmRpdGlvbiBjb2RlcyBjYW4gYmUgcmV1c2VkIChpZiBwb3NzaWJsZSkuCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzdCk6IElmIG9wdGltaXppbmcsIGFuZCB0aGUgdHlwZSBvZgorCU9SSUdfSU5ERVggaXMgbm90IGFuIGVudW1lcmFsIHR5cGUsIHRoZW4gY2FsbCBgZXN0aW1hdGVfY2FzZV9jb3N0cy4nCisKK1N1biBKYW4gMTQgMTI6MTg6NDkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGxzaGlmdF9kb3VibGUsIHJzaGlmdF9kb3VibGUsIGxyb3RhdGVfZG91YmxlKToKKwkocnJvdGF0ZV9kb3VibGUpOiBEb24ndCBzaGlmdCBtb3JlIHRoYW4gd2lkdGggb2Ygb3BlcmFuZC4KKworRnJpIEphbiAxMiAxMjoxNzowNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlY29nLmMgKG5leHRfaW5zbnNfdGVzdF9ub19pbmVxdWFsaXR5KTogUmV0dXJuIDEgYXQgZW5kIG9mIHJ0bC4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgY29uc3RydWN0b3IKKwl1bmxlc3MgdmFsdWUgaXMgZ29pbmcgaW4gc3RydWN0IHZhbHVlIGJsb2NrLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IFVzZSBjb21tb24gbm9kZXMgZm9yIHNpemVzIG9mIHB0cnMsIGZucy4KKwkobWFrZV9zaWduZWRfdHlwZSwgbWFrZV91bnNpZ25lZF90eXBlKTogQ3JlYXRlIHRob3NlIG5vZGVzLgorCShsYXlvdXRfcmVjb3JkKTogSnVzdCBpZ25vcmUgVkFSX0RFQ0wgaWYgbm90IHN0YXRpYy4KKworVGh1IEphbiAxMSAxNDowOTo0NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBEZWNvZGUgLVd0cmFkaXRpb25hbC4KKwkqIGMtZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBXYXJuIGlmIGV4dGVybiBkZWNsIHByZXZpb3VzbHkgc2Vlbi4KKwkqIGMtdHlwZWNrLmMgKGNfZXhwYW5kX3N0YXJ0X2Nhc2UpOiBXYXJuIGlmIHN3aXRjaCBleHAgaXMgbG9uZy4KKworCSogYy10eXBlY2suYyAoYWN0dWFscGFyYW1ldGVybGlzdCk6IE9wdGlvbmFsbHkgd2FybiBvbiB0cnVuY2F0aW9uLgorCSogdG9wbGV2LmMgKG1haW4pOiBIYW5kbGUgLVdjb252ZXJzaW9uLgorCisJKiBjY2NwLmMgKHNraXBfaWZfZ3JvdXApOiBTa2lwIHN0cmluZ3MgZXZlbiBpZiAtdHJhZGl0aW9uYWwuCisJKGhhbmRsZV9kaXJlY3RpdmUpOiBMaWtld2lzZSwgd2hlbiBoYW5kbGluZyBjb3B5X2NvbW1hbmQuCisKK1RodSBKYW4gMTEgMTQ6MTU6NTAgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogT25seSBjaGVjayBmb3IgUkVHX0VRVUFMIG5vdGVzIGFuZCBtYWtlCisJUkVHX0VRVUFMIG5vdGVzIGluc3RlYWQgb2YgUkVHX0VRVUlWIG5vdGVzLgorCSogZXhwbG93LmMgKGZvcmNlX3JlZyk6IE1ha2UgUkVHX0VRVUFMIG5vdGUgaW5zdGVhZCBvZiBSRUdfRVFVSVYKKwlub3RlLiAgQ2hlY2sgZm9yIGFuZCByZXVzZSBvbGQgbm90ZSBpZiBwcmVzZW50LgorCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBDb252ZXJ0IFJFR19FUVVBTCB0byBSRUdfRVFVSVYgZm9yCisJY29uc3RhbnQgd2hlbiByZWdpc3RlciBpcyBvbmx5IHNldCBvbmNlLgorCSogbG9vcC5jIChjb21iaW5lX21vdmFibGVzLCBtb3ZlX21vdmFibGVzKTogQ2hlY2sgZm9yIFJFR19FUVVBTCBub3RlcworCWluc3RlYWQgb2YgUkVHX0VRVUlWIG5vdGVzLgorCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IENvcnJlY3QgdHlwbyBpbiB3cml0aW5nIFJFR19FUVVBTCBub3RlLgorCShlbWl0X25vX2NvbmZsaWN0X2Jsb2NrKTogU3VwcHJlc3MgUkVHX05PX0NPTkZMSUNUIG5vdGVzIGZvcgorCW5vbi1yZWdpc3RlcnMuCisKK1RodSBKYW4gMTEgMTQ6MDk6NDcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBpODYwLm1kIChtb3ZzZik6IEVuc3VyZSBGIHRvIGYgaXMgcmVsb2FkZWQgdmlhIHIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IERvbid0IGNhbGwgc3RhYmlsaXplLgorCitXZWQgSmFuIDEwIDE1OjAzOjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IElmIG9sZCBmbiBkZWNsIGZvbGxvd3MgbmV3IGVsbGlwc2lzIGRlY2wsCisJd2FybiBvbmx5IGlmIHBlZGFudGljLgorCisJKiBsb29wLmMgKGxvb3Bfc2tpcF9vdmVyKTogRG8gbm90aGluZyBpZiBkb24ndCBmaW5kIGV4cGVjdGVkIGNvbXBhcmUuCisKK1R1ZSBKYW4gIDkgMjE6MzE6NDYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRG9uJ3QgZGVsZXRlIFVTRSBhbmQgQ0xPQkJFUiBpbnNucy4KKwlUaGUgbGF0ZXIgY2FsbCB0byBmaW5kX2VxdWl2X3JlZyBjYW4gbWFsZnVuY3Rpb24gaWYgQ0xPQkJFUnMgYXJlCisJZGVsZXRlZC4KKworTW9uIEphbiAgOCAxNzo0ODoyMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IEFsd2F5cyBjaGVjayBnbnVsaWIgYm90aCBmaXJzdCBhbmQgbGFzdC4KKworTW9uIEphbiAgOCAxNzowNzoyNSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX3Vub3ApOiBQZXJmb3JtIG11bHRpLXdvcmQgbG9naWNhbCBuZWdhdGlvbiBvbmUKKwl3b3JkIGF0IGEgdGltZS4KKwkoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdW5vcCk6IEluc2VydCBSRUdfRVFVQUwgbm90ZSBvbiBsYXN0IGluc24gb2YKKwltdWx0aS1pbnNuIHNlcXVlbmNlLgorCVVzZSBUQVJHRVRfUElFQ0UgaW5zdGVhZCBvZiBUQVJHRVQgaW4gbXVsdGktd29yZCBsb2dpY2FsIG9wZXJhdGlvbnMuCisJKGVtaXRfbm9fY29uZmxpY3RfYmxvY2spOiBOZXcgZm4uCisJKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBDYWxsIGl0LgorCShnZW5fYWRkMl9pbnNuLCBnZW5fc3ViMl9pbnNuKTogQWJvcnQgaWYgb3BlcmFuZHMgZG8gbm90IG1hdGNoIHRob3NlCisJb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSBnZW5lcmF0b3JzLgorCisJKiBleHByLmg6IEZpeCB0eXBvIGFuZCBkZWZpbmUgZW1pdF9ub19jb25mbGljdF9ibG9jay4KKworTW9uIEphbiAgOCAxNTozMzoxOSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJ0bC5oIChSRUdfVU5TRVQpOiBGaXggdGhlIGNvZGUuCisJKiBydGwuYyAocmVnX25vdGVfbmFtZSk6IEFkZCBSRUdfVU5TRVQuCisKKwkqIGMtZGVjbC5jIChzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IHBhcm1fZmxhZyBub3cgMiBmb3IgZGVmLCAxIGZvciBkZWNsLgorCShkZWNsYXJlX3Bhcm1fbGV2ZWwpOiBOZXcgcGFybSBkaXN0aW5ndWlzaGVzIHRoZW0uICBBbGwgY2FsbHMgY2hhbmdlZC4KKwkocHVzaGRlY2wpOiBEb24ndCB3YXJuIGFib3V0IHNoYWRvd2luZyB3aXRoIHBhcm0gbmFtZSBpbiBmbiBkZWNsLgorCitNb24gSmFuICA4IDE1OjE1OjA3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfYmFzaWNfYmxvY2spOiBBbGxvdyBOT1RFcyBiZXR3ZWVuIExPT1BfQkVHIGFuZCBqdW1wIHRvCisJZW5kIHRlc3QuCisJKHByZWRlY2lkZV9sb29wX2VudHJ5KTogQWNjZXB0IEpVTVBfSU5TTiByYXRoZXIgdGhhbiBMT09QX0JFRyBOT1RFLgorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBXaGVuIGFkZGluZyBjb25zdGFudCB0byByZWdpc3RlciwKKwltb3ZlIHRoZSBjb25zdGFudCBpbnRvIHRoZSBvdXRwdXQsIHRoZW4gYWRkIHRoZSByZWdpc3RlciwgcmF0aGVyIHRoYW4KKwl0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworTW9uIEphbiAgOCAxMjoyMDoyNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoY29tcG9uZW50cyk6IERvbid0IGFsbG93IHRvIGJlIGVtcHR5LgorCShjb21wb25lbnRfZGVjbCk6IFNwZWNpYWwgY2FzZXMgaWYgZW1wdHksIHRvIGNhbGwgc2hhZG93X3RhZy4KKwlSZWNvZ25pemUgdGhlIHNlbWljb2xvbiBoZXJlLgorCShjb21wb25lbnRfZGVjbF9saXN0KTogTm8gc2VtaWNvbG9uIGhlcmUuCisKKwkqIGMtZGVjbC5jIChzaGFkb3dfdGFnKTogUHJpbnQgd2FybmluZyBpZiBuYW1lbGVzcyBzdHJ1Y3R1cmUgZGVmaW5lZC4KKworU3VuIEphbiAgNyAxOTowOTozMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnQpOiBVc2Ugc2l6ZSBvZiBtYWNoaW5lIG1vZGUKKwl0byBjaG9vc2UgaG93IHRvIG91dHB1dCB0aGUgY29uc3RhbnQuCisKKwkqIHZhcmFzbS5jIChpbW1lZF9yZWFsX2NvbnN0XzEpOiBEZXRlY3QgMSBhcyB3ZWxsIGFzIDAuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogV2hlbiBkZWxldGluZyByZWdfZXF1aXZfaW5pdCBpbnNuLAorCWFsc28gZGVsZXRlIHRoZSBwcmV2IGluc24gaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX0ZST01fQ09OU1RfRE9VQkxFLCBDT05TVF9ET1VCTEVfRlJPTV9SRUFMX1ZBTFVFKToKKwlOZXcgbWFjcm9zLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IFByZXNlcnZlIG9yaWdpbmFsIFggdmFsdWUKKwlpbiBjYXNlIHdlIHJlcGxhY2UgaXQgd2l0aCBuZXcgbWVtb3J5IHJlZmVyZW5jZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEhhbmRsZSBjYXNlIG9mIG5vIHByZXZpb3VzIGluc25zLgorCisJKiBqdW1wLmMgKGp1bXBfYmFja19wKTogQ2hlY2sgZm9yIGZsb2F0aW5nIHBvaW50IGlmIG5vdCBJRUVFLgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZHVtcF9nbG9iYWxfcmVncyk6IEJyZWFrIHRoZSBsaW5lIG9jY2FzaW9uYWxseS4KKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IFJlY29nbml6ZSBwb3N0LWRlY3JlbWVudCBwcm9wZXJseS4KKwlJdCBsb29rcyBsaWtlIChwbHVzIFJFRyAtQ09OU1QpLCBub3QgKG1pbnVzIFJFRyBDT05TVCkuCisJQWxzbywgcGF0Y2ggb3V0IG9sZCBpbnNuIGFzIGEgbm90ZSBpbiB0aGUgdXN1YWwgd2F5LgorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IEFyZyB0byBSRVRVUk5fUE9QU19BUkdTIGlzIEZVTlRZUEUgaXRzZWxmLgorCisJKiBleHByLmMgKFNUQUNLX1BVU0hfQ09ERSk6IE5ldyBtYWNybywgd2hpY2ggY29uZmlnLmggY2FuIG92ZXJyaWRlLgorCShnZW5fcHVzaF9vcGVyYW5kKTogVXNlIGl0LgorCShlbWl0X3B1c2hfaW5zbik6IFJldmVyc2UgcGFkZGluZyBpZiBwdXNoaW5nIGlzIHBvc3QtaW5jcmVtZW50LgorCShleHBhbmRfZXhwcik6IEZvciBNSU5VUywgc2lnbi1leHRlbmQgbmVnYXRlZCB2YWx1ZS4KKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBJbml0aWFsaXplIG5ldyB2YXJpYWJsZXMKKwlmY29uc3QxX3J0eCwgZGNvbnN0MV9ydHgsIGRjb25zdDAsIGRjb25zdDEsIGRjb25zdG0xLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBGb3IgQ09NUEFSRSBhbmQgTUlOVVMsIHRlc3QgZm9yIGZsb2F0aW5nIHplcm8gYXJnLgorCUFsc28gaGFuZGxlIGVxdWFsIGZsb2F0aW5nIGFyZ3MgaWYgRkxPQVRfTk9UX0lFRUUuCisJRm9yIE5FRywgZWxpbWluYXRlIHNpbGx5IHRlbXAgdmFyLgorCUZvciBNVUxUIGFuZCBESVYsIGhhbmRsZSBtb3JlIGNhc2VzIHdpdGggZmxvYXRpbmcgcG9pbnQuCisJQ2hhbmdlIGRpdmlzaW9uIGJ5IGZsb2F0aW5nIGNvbnN0YW50IGludG8gbXVsdGlwbGljYXRpb24uCisKKwkqIGNvbmZpZy5nY2M6IEFkZCBpMzg2LW1hY2guCisJKiB4bS1pMzg2Lmg6IFVzZSBidWlsdC1pbiBhbGxvY2EgaWYgY29tcGlsaW5nIHdpdGggR0NDLgorCisJKiBNYWtlZmlsZS5pbiAoYy1wYXJzZS50YWIubyk6IERlbGV0ZSAtbyBzd2l0Y2guCisJKGNleHAubyk6IFB1dCBpbiBleHBsaWNpdCBjb21tYW5kLgorCisJKiBjb21iaW5lLmMgKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVncyk6IElnbm9yZSBzdGFjayBwdXNoZXMuCisKK1NhdCBKYW4gIDYgMTU6MzM6MzIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXQtbWlwcy5jIChmdW5jdGlvbl9hcmcsIGZ1bmN0aW9uX2FyZ19hZHZhbmNlKToKKwlEZWZpbmUgdHlwZWRlZiBmb3IgQ1VNVUxBVElWRV9BUkdTLCBhbmQgdXNlIGl0IGhlcmUuCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBQdXQgMCBhdCBlbmQgb2Ygd2lkZSBzdHJpbmcuCisKKwkqIHRtLW1pcHMuaCAoQ0MxX1NQRUMpOiBEb24ndCBkaXN0b3J0IG1lYW5pbmcgb2YgLU8uCisKK0ZyaSBKYW4gIDUgMTI6MTI6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYywgZXhwci5oOiBBbGwgdXNlIG9mIHVtdWxfb3B0YWIgZGVsZXRlZC4KKwkqIGdudWxpYi5jIChfX3VtdWxzaTMpOiBEZWxldGVkLgorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBJZiBMSUJTX0NPTVBJTEVEX1dJVEhfR0NDLCBnbnVsaWIgaXMgbGFzdC4KKworCSogTWFrZWZpbGUuaW4gKElOVEVSTkFMX0NGTEFHUyk6IE5ldyBwYXJhbWV0ZXIuCisJKEFMTF9DRkxBR1MpOiBOZXcgdmFyaWFibGUsIHJlcGxhY2VzIENGTEFHUyB3aGVuIGNvbXBpbGluZy4KKwkoSE9TVF9DRkxBR1MpOiBEZWZpbmUgZnJvbSBBTExfQ0ZMQUdTLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zbi0qLm8sIGNjY3Aubywgb3RoZXJzKTogVXNlIENQUEZMQUdTLgorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliKTogQWRkIG51bGwgY29tbWFuZC4KKworRnJpIEphbiAgNSAwODoxMToyMCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogV2hlbiBhcHBseWluZyBEZWBNb3JnYW4ncyBsYXcsIGNvbXB1dGUgTk9UCisJb2YgY29uc3RhbnQuCisKKwkqIGludGVncmF0ZS5jIChzYXZlX2NvbnN0YW50cywgcmVzdG9yZV9jb25zdGFudHMpOiBDbGVhbiB1cCBmbnMKKwlieSBwYXNzaW5nIGluIGEgcG9pbnRlciB0byBhbiBydHggc28gdGhhdCBpbnNucyBjYW4gYmUgbW9kaWZpZWQKKwlpbiBwbGFjZS4KKwkoc2F2ZV9mb3JfaW5saW5lKTogQ2hhbmdlIGNhbGwgdG8gc2F2ZV9jb25zdGFudHMuCisJQXBwbHkgc2F2ZV9jb25zdGFudHMgdG8gUkVHX05PVEVTLgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogVXNlIGVtaXRfbW92ZV9pbnNuIGluc3RlYWQgb2YgZ2VuZXJhdGluZworCWFuIGV4cGxpY2l0IFNFVC4KKwlBcHBseSBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSB0byBSRUdfTk9URVMuCisJKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBDaGFuZ2UgY2FsbCB0byByZXN0b3JlX2NvbnN0YW50cy4KKwlBcHBseSByZXN0b3JlX2NvbnN0YW50cyB0byBSRUdfTk9URVMuCisKK1RodSBKYW4gIDQgMjM6NTg6NTkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZSAoYy1wYXJzZS50YWIubyk6IEFkZCBleHBsaWNpdCBjb21waWxhdGlvbiBjbWQuCisKK1RodSBKYW4gIDQgMjI6NDg6MDEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGluc2VydF9yZWdzLCBpbnNlcnQsIHVzZV9yZWxhdGVkX3ZhbHVlKTogRG9uJ3QgYXNzdW1lIFJFRyBpcworCWZpcnN0IGluIGNsYXNzLgorCShIQVNIKTogSGFuZGxlIHJlZ2lzdGVyIHdpdGggSEFTSFJFRyBtYWNybyBmb3Igc3BlZWQuCisJKGluc2VydCk6IE5vIGxvbmdlciBuZWVkIGVxdWl2YWxlbmNlX29ubHkuCisJVXNlIENPU1QgbWFjcm8uCisJKHVzZV9yZWxhdGVkX3ZhbHVlKTogTm8gbG9uZ2VyIG5lZWQgdG8gY2hlY2sgZm9yIHZhbGlkIGFkZHJlc3MuCisJKGZpbmRfYmVzdF9hZGRyKTogTmV3IGZ1bmN0aW9uLgorCShmb2xkX3J0eCk6IFJlbW92ZSBjb3B5ZmxhZyBhcmd1bWVudCBhbmQgcmVwbGFjZSB3aXRoIGluc24uCisJQ2hlY2sgZm9yIGNvbW1vbiBjYXNlcyBiZWZvcmUgbWFraW5nIHJlY3Vyc2l2ZSBjYWxsLgorCUNhbGwgdmFsaWRhdGVfY2hhbmdlIHRvIGVuc3VyZSBjaGFuZ2UgaXMgdmFsaWQsIGJ1dCBhbHdheXMgcmV0dXJuCisJc2ltcGxpZmllZCBleHByZXNzaW9uLgorCVJlcGxhY2Ugb3BlcmFuZCB3aXRoIGZvbGRlZCBvcGVyYW5kLCBvciBjb25zdGFudCBvcGVyYW5kLCB3aGljaGV2ZXIKKwlpcyBjaGVhcGVyIGFuZCBpcyB2YWxpZC4KKwlDYWxsIGZpbmRfYmVzdF9hZGRyIGZvciBNRU1zLgorCShmb2xkX2NjMCk6IEFkZCBpbnNuIG9wZXJhbmQgdG8gcGFzcyB0byBjYWxscyB0byBmb2xkX3J0eC4KKwkoY3NlX2luc24pOiBSZXdvcmsgdG8gZW51bWVyYXRlIGFsbCBwb3NzaWJsZSBlcXVpdmFsZW5jZXMgYW5kIHJlcGxhY2UKKwlzb3VyY2Ugd2l0aCBjaGVhcGVzdCB2YWxpZC4KKwlTaW1wbGlmeSBhc3NvY2lhdGl2ZSBvcGVyYXRpb25zIHdpdGggY29uc3RhbnRzIHdoZXJlIGFuIG9wZXJhbmQgaXMKKwllcXVpdmFsZW50IHRvIHRoZSBzYW1lIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgY29uc3RhbnQuCisJVXNlIHZhbGlkYXRlX2NoYW5nZSBmb3IgYWxsIGNoYW5nZXMuCisKK1RodSBKYW4gIDQgMTc6NTg6MjggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfbG9vcCk6IFB1dCBOT1RFX0lOU05fTE9PUF9DT05UIGF0IHRvcCBieSBkZWZhdWx0LgorCisJKiBjLXR5cGVjay5jIChhY3R1YWxwYXJhbWV0ZXJsaXN0KToKKwlDb252ZXJ0IHBhcm1udW0gdG8gb3JpZ2luLTEgdG8gcHJpbnQuCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgZmxvYXQuaC4KKworV2VkIEphbiAgMyAwMDoyNzo1MyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYi5jIChfX2V4dGVuZHNmZGYyKTogRGVsZXRlIHVudXNlZCB2YXIuCisKKwkqIHJlbG9hZDEuYyAoYWx0ZXJfcmVnKTogVW5kbyBiaWctZW5kaWFuIGNvbnZlcnNpb24gZnJvbQorCWFzc2lnbl9zdGFja19sb2NhbC4KKworCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IFJvdW5kIHNpemUgdXAgZm9yIG1vdmVfYmxvY2tfdG9fcmVnLgorCShleHBhbmRfY2FsbCk6IFJvdW5kIHVwIHdoZW4gZW1pdHRpbmcgVVNFIGluc25zLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogUm91bmQgc2l6ZSB1cCBmb3IgbW92ZV9ibG9ja19mcm9tX3JlZy4KKworCSogTWFrZWZpbGUgKGluc3RhbGwpOiBVc2UgbmVzdGVkIGZvcmVhY2gtbG9vcCB0byBleHBhbmQgdmEqLmguCisKK1R1ZSBKYW4gIDIgMTY6MDE6NDcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtaXBzLm1kIChjYWxsX3ZhbHVlKTogSWdub3JlIGNhbGxzIHRvIF9fYnVpbHRpbl9zYXZlcmVncy4KKworCSogdG0tbWlwcy5oIChTVEFSVElOR19GUkFNRV9PRkZTRVQpOiBDaGFuZ2UgZnJvbSAtOCB0byAwLgorCShGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUpOiBVc2UgbmV3IGZucyBpbiBvdXQtbWlwcy5jLgorCSogb3V0LW1pcHMuYyAocHJvbG9ndWVfbG9va3MsIG1pcHNfcHJvbG9ndWUsIG1pcHNfZXBpbG9ndWUpOiBOZXcuCisKKwkqIGdudWxpYjIuYzogRXZlcnl0aGluZyBleGNlcHQgYXJpdGhtZXRpYyBzdXBwb3J0IG1vdmVkIGZyb20gZ251bGliLmMuCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTLCBMSUJGVU5DUyk6IExpa2V3aXNlLgorCitTdW4gRGVjIDMxIDIwOjEwOjUyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9jb21tb24pOiBEZWNsYXJlIGBjb2RlJyBhcyBjaGFyLCBub3QgaW50LgorCitUaHUgRGVjIDI4IDEzOjQ5OjQzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluY2x1ZGVzKTogU2V0IHZhcmlhYmxlIExJQi4gIFJ1biBmcm9tIGAuLycuCisKK1dlZCBEZWMgMjcgMTg6NTQ6MjUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9mcmFtZV9wb2ludGVyKTogU3BlY2lhbCBjYXNlIGZvciByZWcgPSByZWcyK2ZwLgorCisJKiBsb29wLmMgKGNhbl9lbGltaW5hdGVfYml2X3AsIGVsaW1pbmF0ZV9iaXYpOiBJZiBhZGRfdmFsIG5vbiB6ZXJvLAorCWl0IG11c3QgYmUgYSBjb25zdGFudCBvciByZWdpc3Rlci4KKworV2VkIERlYyAyNyAxODoxMToyMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGk4NjAubWQgKGxvYWQgREYgY29uc3RhbnQgdG8gcmVnKTogVHlwbzogZXh0cmEgcGVyY2VudCBzaWduLgorCShmbG9hdHNpZGYyKTogVHdvIHdvcmRzIG9mIGEgZG91YmxlIHdlcmUgYmFja3dhcmRzLgorCitNb24gRGVjIDI1IDE2OjMyOjUwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoZW1pdF9ub3RlX2JlZm9yZSk6IE5ldyBmdW5jdGlvbi4KKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9sb29wKTogT3V0cHV0IE5PVEVfSU5TTl9MT09QX0NPTlQgaWYgbm9uZS4KKwkqKiBBYm92ZSBjaGFuZ2UgdHVybmVkIG9mZi4KKworTW9uIERlYyAyNSAwMDowMjozMSAxOTg5ICBUb3JianxybiBHcmFubHVuZCAgKHRlZ2UgYXQgemV2cy5zaWNzLnNlKQorCisJKiB0bS1weXIuaCAoQ09OU1RfQ09TVFMpOiBEZWZpbmUgbW9yZSBvcHRpbWFsIGNvc3RzLgorCisJKiB0bS1weXIuaCAoRklYVU5TX1RSVU5DX0xJS0VfRklYX1RSVU5DKTogU2hvdWxkIG5vdCBiZSBkZWZpbmVkLgorCSAgVGhlIGN2dGR3IGluc3RydWN0aW9uIGNhdXNlcyBhIHRyYXAgZm9yIGZsb2F0aW5nIHBvaW50IHZhbHVlcworCSAgdGhhdCBhcmUgb3V0LW9mLXJhbmdlIGZvciBhIHNpZ25lZCBpbnQuCisKKwkqIHRtLXB5ci5oIChDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogRG9uJ3QgYWNjZXB0IGFueQorCSAgc3BlY2lhbCBjb25zdHJhaW50IGNoYXJzLCBzaW5jZSB3ZSBkb24ndCB1c2UgYW55LgorCisJKiB0bS1weXIuaCAoQ09OU1RBTlRfQUxJR05NRU5UKTogQ29ycmVjdCBjb21tZW50LgorCisJKiBvdXQtcHlyLmMgKHdlaXJkX21lbW9yeV9tZW1vcnkpOiBGbHVzaCBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZXMuCisKKwkqIG91dC1weXIuYyAoaGFzX2RpcmVjdF9iYXNlKTogRG9uJ3QgYWNjZXB0IDAgYXMgYSBiYXNlLCBpZiB0aGVyZQorCSAgaXMgYSByZWdpc3RlciBkaXNwbGFjZW1lbnQuICBUaGlzIGlzIGEgd29ya2Fyb3VuZCBvZiBhIGJ1ZyBpbgorCSAgL2Jpbi9hcy4gICgvYmluL2FzIGNoYW5nZXMgdGhpbmdzIGxpa2UgImNtcHcgOChyZWcpLDAocmVnKSIgaW50bworCSAgImNtcHcgOChyZWcpLChyZWcpIiwgd2hpY2ggaXMgaW52YWxpZCBhc3NlbWJsZXIuKQorCitTdW4gRGVjIDI0IDEyOjAxOjA1IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBPayB0byBkZWZpbmUgbmFtZWxlc3MgdW5pb24gaW4gcGFybXMuCisJKiBjLXR5cGVjay5jIChjb21wcGFybXMpOiBBbGxvdyB1bmlvbiB2cyBpdHMgbWVtYmVyJ3MgdHlwZSwKKwlidXQgb25seSBpZiBzYW1lIHNpemUgJiB1bmlvbiBpcyBuYW1lbGVzcy4KKwkoY29tcHR5cGVzKTogSW4gdGhhdCBjYXNlLCBmb3IgYSBwYXJtLCBwcmVmZXIgdGhlIG1lbWJlcidzIHR5cGUuCisJKGFjdHVhbHBhcmFtZXRlcmxpc3QpOiBOYW1lbGVzcyB1bmlvbiBwYXJtIGNhc3RzIGFsbCBpdHMgbWVtYiB0eXBlcy4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF90cmVlLCBjb3B5X3Bhcm1fZGVjbHMpOiBTZXQgVFJFRV9JTkxJTkUuCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBObyBzaGFkb3ctd2FybmluZyBpZiBUUkVFX0lOTElORSBpcyBzZXQuCisKKwkqIGRieG91dC5jIChjdXJyZW50X3N5bV9jb2RlKTogRGVjbGFyZSBhcyBlbnVtOyBhdm9pZCB3YXJuaW5ncy4KKworU2F0IERlYyAyMyAxMDo1NDoyMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBVbmRlciBOT1QsIG1vdmUgaXQgaW5zaWRlIEFORCBhbmQgSU9SLgorCVVuZGVyIFhPUiwgbW92ZSBOT1Qgb3V0LgorCisJKiB0b3BsZXYuYyAoc2V0X3RhcmdldF9zd2l0Y2gpOiBIYW5kbGUgbXVsdGlwbGUgZW50cmllcyBmb3Igb25lIG5hbWUuCisKKwkqIG5zMzJrLm1kIChhZGp1c3Qgc3RhY2spOiBEaXN0aW5ndWlzaCBwcm9jZXNzb3Igc3VidHlwZSBhdCBydW4tdGltZS4KKwkoZXh0cmFjdCBieXRlIGZyb20gcmVnaXN0ZXIpOiBMaWtld2lzZS4KKwkqIHRtLW5zMzJrLmggKFRBUkdFVF8zMjUzMiwgVEFSR0VUXzMyMzMyKTogTmV3IHRhcmdldCBvcHRpb25zLgorCSogdG0tZW5jb3JlLmgsIHRtLXNlcXVlbnQuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZhdWx0IHRoZW0uCisKK0ZyaSBEZWMgMjIgMjA6MzM6MTUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoYWxsKTogTW92ZSBhYm92ZSB3aGVyZSBtYWtlLU1BQ0hJTkUgaXMgaW5zZXJ0ZWQuCisJKGFsbC5pbnRlcm5hbCk6IERlZmluaXRpb24gb2YgYGFsbCcgaW5kaXJlY3RzIHRocm91Z2ggdGhpcy4KKwkoR05VTElCKTogVmFyaWFibGUgYWxsb3dzIHJ1bGUgZm9yIGdudWxpYiB0byBiZSByZWRpcmVjdGVkLgorCShnbnVsaWIucG9ydGFibGUpOiBOYW1lIGZvciB0aGUgc3RhbmRhcmQgcnVsZSBmb3IgZ251bGliLgorCisJKiB0bS1taXBzLmggKEFTTV9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FKTogTmV3IG1hY3JvLgorCShSRUdfQ0xBU1NfU1VCVU5JT04sIFJFR19DTEFTU19TVUJDTEFTU0VTLCBSRUdfQ0xBU1NfU1VQRVJDTEFTU0VTKToKKwlPYnNvbGV0ZSBtYWNyb3MgZGVsZXRlZC4KKworVGh1IERlYyAyMSAxNjoyMDowMCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEJ1ZyB0YWtpbmcgYXNzaWdubWVudHMgb3V0IG9mIGNvbnZlcnNpb25zOgorCVVzZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBtZXRob2QuCisKKwkqIHJlbG9hZDEuYyAoYWx0ZXJfcmVnKToKKwlBbHdheXMgZG8gYmlnLWVuZGlhbiBjb3JyZWN0aW9uIG9uIHNsb3QgYWRkcmVzcy4KKworCSogaTM4Ni5tZCAoZmxvYXQgcHVzaCByZWNvZ25pemVycyk6IERvbid0IHBvcCBmcHJlZyBpZiBub3QgZGVhZC4KKworV2VkIERlYyAyMCAxMDo1NDo1NCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGFzc2VydC5oOiBDYXN0IHZhbHVlIHRvIHZvaWQuCisKK1R1ZSBEZWMgMTkgMDk6NDI6MTMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBQdXQgJWwgZmlyc3QuCisKK1R1ZSBEZWMgMTkgMDg6NTk6NDMgMTk4OSAgUmljaGFyZCBLZW5uZXIgIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2VuYXR0cnRhYi5jIChnZXRfYXR0cl92YWx1ZSk6IEluaXRpYWxpemUgaGFzX2FzbV9pbnNuIGZpZWxkIHdoZW4KKwltYWtpbmcgYSBuZXcgYXR0cl92YWx1ZS4KKworU3VuIERlYyAxNyAxMjowNjozNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0LCBwcm9jZXNzX2luaXRfY29uc3RydWN0b3IsIHN0b3JlX2luaXRfdmFsdWUpOgorCUdpdmUgZXJyb3IgZm9yIGVhY2ggaW52YWxpZCBlbGVtZW50IHNlZW4gaW4gYW4gaW5pdGlhbGl6ZXIuCisJTmV3IGFyZ3VtZW50cyBzYXkgd2hldGhlciBjb250ZXh0IHdhbnRzIGVycm9yIG1lc3NhZ2VzLgorCSogYy1wYXJzZS55IChjYXN0X2V4cHIpOiBQYXNzIG5ldyBhcmdzLgorCSogVW5mb3J0dW5hdGVseSwgdGhpcyBkb2Vzbid0IGRvIHRoZSBqb2IsIHNpbmNlIHRoZSB3aG9sZSBpbml0aWFsaXplcgorCWlzIHBhcnNlZCBiZWZvcmUgYW55IGlzIGRpZ2VzdGVkLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogU291cmNlIGxvYyBvZiBkZWZpbml0aW9uIGlzCisJbW9yZSBpbXBvcnRhbnQgdGhhbiB0aGF0IG9mIGRlY2xhcmF0aW9uLgorCisJKiBjY2NwLmMgKGluY2x1ZGVfZGVmYXVsdHMpOiBPbiB1bm9zLCBhbHNvIHNlYXJjaCAvaW5jbHVkZS4KKworCSogbTY4ay5tZCAobW92c2ksIG1vdmhpLCBzdG9yZS0wIHJlY29nbml6ZXIpOiBDb25kaXRpb25hbCBmb3IgQ1JEUy4KKwkobXVsaGkzLCBtdWxoaXNpMywgdW11bGhpMywgdW11bGhpc2kzKTogQWRkICUgYW5kIENSRFMgY29uZGl0aW9uYWwuCisJKHplcm8tZXh0ZW5kIHJlY29nbml6ZXJzKTogUHV0ICUgYmVmb3JlIHBlcmlvZCBpbiBjbHIgaW5zbnMuCisJKGRpdmlkZSBhbmQgbW9kdWx1cyByZWNvZ25pemVycyk6IExpa2V3aXNlIGZvciBhbmQsIGV4dCwgc3dhcCBhbmQgZGl2LgorCShkYnJhIHJlY29nbml6ZXJzKTogTGlrZXdpc2UgZm9yIHN1YiBhbmQgY2xyIGluc25zLgorCSh0YWJsZWp1bXAgcmVjb2duaXplcik6IENvbmRpdGlvbmFsIGZvciBDUkRTLgorCSogdG0tY3Jkcy5oLCB4bS1jcmRzLmg6IE5ldyBmaWxlcy4KKworCSogZ2NjLmMgKHJlYWRfc3BlY3MpOiBEb24ndCBpbmNsdWRlIHRyYWlsaW5nIG5ld2xpbmUgaW4gZGF0YQorCXJlYWQgZnJvbSBzcGVjcyBmaWxlLgorCShza2lwX3doaXRlc3BhY2UpOiBFbXB0eSBsaW5lIGlzIGEgZGVsaW1pdGVyIGluIHNwZWNzIGRhdGEuCisKKwkqIGNjY3AuYyAoZ3Jvd19vdXRidWYpOiBDaGFuZ2UgdmFsdWUgYmFjayB0byBpbnQuCisKKwkqIGNzZS5jIChjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogRml4IHVudGVybWluYXRlZCBjb21tZW50LgorCisJKiBjY2NwLmMgKG1haW4pOiBBZGQgYC5DJyBhcyBrbm93biBzdWZmaXggZm9yIGRlcHMgb3V0cHV0LgorCisJKiBleHByLmMgKGRvX2p1bXApOiBDYXN0IHZlY3RvciBsZW5ndGggdG8gaW50IGluIGNhc2Ugd2lsbCBzdWJ0cmFjdC4KKworCSogdG0tYXR0Mzg2LmggKEFTTV9PVVRQVVRfTE9DQUwpOiBSZXZlcnQgbGFzdCBjaGFuZ2U6IHB1dCBpdCBkYXRhIHNlZy4KKworCSogcmVsb2FkLmMgKGRlY29tcG9zZSk6IE1ha2UgYSBzZXBhcmF0ZSBjYXNlIGZvciBTVUJSRUcuCisKKwkqIE1ha2VmaWxlLmluIChIT1NUX1JUTEFOQUwpOiBEZWZpbmUgbGlrZSBIT1NUX1JUTC4KKwkoZ2VuYXR0cnRhYik6IFVzZSB0aGF0IHRvIGdldCBhdCBydGxhbmFsLm8uCisJKCQoSE9TVF9QUkVGSVhfMSlydGxhbmFsLm8pOiBOZXcgcnVsZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24uCisJKFNUQUdFU1RVRkYpOiBUeXBvIGluIHN0YW1wLWF0dHJ0YWIuYy4KKworCSogdG0taHA5azMyMC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBfX2hwOTAwMHMzMDAsIF9IUFVYX1NPVVJDRS4KKworCSogc3R1cGlkLmMgKHJlZ19vcmRlcik6IE1ha2UgaXQgaW50LCBpbiBjYXNlIHJlZyAjIGlzIGxhcmdlLgorCShzdHVwaWRfcmVnX2NvbXBhcmUsIHN0dXBpZF9saWZlX2FuYWx5c2lzKTogSW1wbGVtZW50IHRoaXMuCisKKwkqIGdudWxpYjIuYyAoX19mbG9hdGRpZGYpOiBEZWZpbmUgV09SRF9TSVpFLgorCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRG9uJ3QgY2xvYmJlciBzdGFjayBpZiBubyBiYXNpYworCWJsb2Nrcy4KKworU2F0IERlYyAxNiAxMjozODowNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoY2FuX2VsaW1pbmF0ZV9iaXZfcCwgZWxpbWluYXRlX2Jpdik6IENoZWNrIGluIGNhc2UKKwluZWl0aGVyIHNpZGUgb2YgYSBjb21wYXJlIGlzIHRoZSBiaXYgYnkgaXRzZWxmLgorCShjaGVja19lbGltaW5hdGVfYml2KTogVGVzdCBvZiBvbmx5X3JlZ191c2VfcCB3YXMgYmFja3dhcmRzLgorCShnZW5lcmFsX2luZHVjdGlvbl92YXIpOiBJZiBWIGlzIDAgYW5kIEcgaXMgbm90LAorCWNvbWJpbmUgYWRkaXRpdmUgdGVybXMgd2l0aCBwbHVzX2NvbnN0YW50LCBwcm92aWRlZAorCWVpdGhlciBvbmUgb2YgdGhlbSBpcyBhbiBpbnRlZ2VyLgorCUNoZWNrIGJvdGggb3BlcmFuZHMgb2YgYSBzdW0gZm9yIGJlaW5nIGdpdnMgaW4gdGhlaXIgb3duIHJpZ2h0LgorCShzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIGVsaW1pbmF0aW5nIGEgYml2LCBkb24ndCBtdW5nIGluc25zIHRoYXQgdXNlCisJaXQgdmlhIGEgZ2l2IHRoYXQgd2lsbCBiZSBoYW5kbGVkIGxhdGVyLgorCShsb29wX3NraXBfb3Zlcik6IER1cGxpY2F0ZSBhbiBlbmR0ZXN0IHRoYXQgdGFrZXMgc2V2ZXJhbCBpbnNucy4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIHdyaXRpbmcgaW5zbiB0byBpbml0IGEgYml2LCAKKwl1cGRhdGUgbGlmZSByYW5nZSBvZiByZWcgdXNlZCB0byBpbml0IGl0LgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG8gY29tYmluZSAoeSA9IHgsIHggPSB5KS4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIGZpbmRpbmcgaW5pdGlhbCB2YWx1ZSBvZiBhIGJpdiwKKwlub3RpY2UgYXNzaWdubWVudHMgdG8gc3VicmVncyBvZiBpdCwgZXRjLgorCisJKiBtNjhrLm1kIChhbGwgc2hpZnQgcGF0dGVybnMpOiBSZXF1aXJlIHJlZ2lzdGVyX29wZXJhbmQgZm9yIG9wcyAwLCAxLgorCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6CisJRG9uJ3Qgc2V0IHNwaWxsX3N0YWNrX3Nsb3Rfd2lkdGggaWYgZnJvbV9yZWcgaXMgLTEuCisKKwkqIGNzZS5jIChjc2VfbWFpbik6IERlbGV0ZSBsb2NhbCByZWRlZiBvZiBmbGFnX2NzZV9mb2xsb3dfanVtcHMuCisKKwkqIHJlbG9hZDEuYyAobmV3X3NwaWxsX3JlZyk6IEZhdGFsIGVycm9yIGlmIGZpeGVkIHJlZyBpcyBzcGlsbGVkLgorCShvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBNYWtlIHN1cmUgYWxsIHRoZSByZWdzIGFyZSBpbiBzcGlsbF9yZWdzLgorCisJKiBtaXBzLm1kIChtb3ZzZik6IEZpeCB3cm9uZyBvcGNvZGUgbW92aW5nIGdlbnJlZyB0byBmcHJlZy4KKworCSogdG9wbGV2LmM6IFVuZGVmIEZGUyBhZnRlciBpbmNsdWRpbmcgcGFyYW0uaC4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRGVsZXRlIGxhYmVsIHJlaW5zZXJ0X2NvbXBhcmUuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBNb3ZlIHZhciB2YWx1ZTEgaW5zaWRlIEhBVkVfaW5zdi4KKwkoZXh0cmFjdF9iaXRfZmllbGQpOiBTaW1pbGFyIGZvciBiaXRzaXplX3J0eCwgYml0cG9zX3J0eC4KKworCSogYy10eXBlY2suYyAocG9pbnRlcl9kaWZmKTogRGVsZXRlIHVudXNlZCB2YXIuCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogTGlrZXdpc2UuCisJKiBnY2MuYyAoZXhlY3V0ZSk6IExpa2V3aXNlLgorCSogZ2VucmVjb2cuYyAodHJ5X21lcmdlXzIpOiAKKwkqIGxvb3AuYyAoc2tpcF9jb25zZWNfaW5zbnMsIHNjYW5fbG9vcCk6IAorCSogcmVjb2cuYyAoYXNtX25vcGVyYW5kcywgbWVtb3J5X29wZXJhbmQpOgorCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6CisJKiBzdG10LmMgKGVtaXRfanVtcF9pZl9yZWFjaGFibGUpOgorCSogdG9wbGV2LmMgKGVycm9yX2Zvcl9hc20pOgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0cmluZyk6CisKKwkqIGludGVncmF0ZS5jIChmcF9hZGRyX3ApOiBWYXIgZGVsZXRlZC4KKworCSogcmVnY2xhc3MuYyAocmVnY2xhc3NfaW5pdCk6IE5vdyByZXR1cm5zIHZvaWQuCisJKiBlbWl0LXJ0bC5jIChlbWl0X2luc25zKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKGVtaXRfbm9wKTogTGlrZXdpc2UuCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X2VhZ2VyX3RoZW5faW5zbik6IExpa2V3aXNlLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfcmVhY2hlc19lbmRfcCwgcmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKToKKwkocmVsb2FkX3JlZ19mcmVlX3ApOiBBYm9ydCBpZiBzd2l0Y2ggZHJvcHMgdGhyb3VnaC4KKworCSogY2NjcC5jOiBTdXBwbHkgYSByZXR1cm4gdHlwZSBmb3IgZXZlcnkgZnVuY3Rpb24gKHVzdWFsbHkgdm9pZCkuCisJKGdyb3dfb3V0YnVmKTogTm93IHJldHVybnMgdm9pZC4KKwkobGluZV9mb3JfZXJyb3IpOiBBYm9ydCBpZiB0aGUgbG9vcCB0ZXJtaW5hdGVzLgorCSogZ2NjLmM6IFN1cHBseSBhIHJldHVybiB0eXBlIGZvciBldmVyeSBmdW5jdGlvbiAodXN1YWxseSB2b2lkKS4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogTGVhdmUgYmxvY2stYmVnLCBibG9jay1lbmQgbm90ZXMKKwlpbiBvbGQgY29udGV4dCB3aGVuIHN3YXBwaW5nIHR3byByYW5nZXMgb2YgaW5zbnMuCisJKHNxdWVlemVfYmxvY2tfbm90ZXMpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogQ29tcHV0ZSB2YWxyZWcgZnJvbSBwb2ludGVyIHR5cGUKKwlpbiBjYXNlIG9mIHBjYyBzdHJ1Y3QgcmV0dXJuLgorCisJKiBnbnVsaWIyLmMgKF9fYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBfXyBuYW1lcyBmb3IgbWFjaGluZSB0eXBlcy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKToKKwlNb3ZlIGNvbnN0YW50IG91dCBvZiBhc3NpZ25tZW50LCB3aXRoaW4gY29udmVyc2lvbi4KKworRnJpIERlYyAxNSAwMDo0MjozMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFVzZSBuZXcgbWFjcm8gREFUQV9BTElHTk1FTlQgaWYgZGVmLgorCShnZXRfb3JfYXNzaWduX2xhYmVsKTogVXNlIHRoaXMgaW5zdGVhZCBvZiBDT05TVEFOVF9BTElHTk1FTlQuCisKKwkqIGludGVncmF0ZS5jIChzYXZlX2NvbnN0YW50LCByZXN0b3JlX2NvbnN0YW50KTogSGFuZGxlIG5ha2VkCisJY29uc3RhbnQtcG9vbCBTWU1CT0xfUkVGLgorCShjb3B5X2Zvcl9pbmxpbmUsIGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogRGl0dG8uCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKToKKwlQdXQgY2FsbGVyJ3MgbGluZSBudW1iZXIgYWZ0ZXIgaW5saW5lIHN0dWZmLgorCVB1dCBjYWxsZWUncyBsaW5lIG51bWJlciBiZWZvcmUgcGFybSBtYW5pcHVsYXRpb24uCisKKwkqIHRyZWUuYyAobWFrZV9ub2RlKTogSGF2ZSBhIERFQ0xfU09VUkNFX0ZJTEUgaW4gZXZlcnkgZGVjbC4KKworCSogbTY4ay5tZCAoZnBhIGZsb2F0IGFuZCBmbG9hdC10cnVuYyk6IEFjY2VwdCBnZW5lcmFsX29wZXJhbmQuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRG8gSU5JVF9DVU1VTEFUSVZFX0FSR1MganVzdCBvbmNlLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IElmIHN0cnVjdCByZXQgYWRkciBpcyBwYXNzZWQgYXMgcGFybSwKKwljb3VudCBpdCBpbiBzdHJ1Y3R1cmVfdmFsdWVfYWRkcl9wYXJtLgorCisJKiBJZiBsb2NhbC1hbGxvYyBhc3N1bWVzIGEgcmVnIGRvZXMgbm90IGNvbmZsaWN0LAorCWRvbid0IHVzZSBpdCBhcyBkdW1teSByZWxvYWQuCisJKiBsb2NhbC1hbGxvYy5jICh3aXBlX2RlYWRfcmVnKTogQWRkIFJFR19VTlNFVCBub3RlLgorCSogcmVsb2FkLmMgKGZpbmRfZHVtbXlfcmVsb2FkKTogQ2hlY2sgZm9yIHRoYXQgbm90ZS4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogUmVhbGl6ZSB0aGF0IG1vcmUgdGhpbmdzIGNhbiBmb2xsb3cKKwl0aGUgTk9URV9JTlNOX0ZVTkNUSU9OX0VORCBub3RlLiAgQ2hhbmdlIGluIHR3byBwbGFjZXMsCisJZm9yIG9wdGltaXplZCBhbmQgb25lIGZvciB1bm9wdGltaXplZC4KKworVGh1IERlYyAxNCAyMzo0MDoyMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLCBsaWJzdWJkaXIpOiBDaGFuZ2UgJChtYWNoaW5lKSB0byAkKHRhcmdldCkuCisKK1R1ZSBEZWMgIDUgMDc6MzU6NTcgMTk4OSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmg6IERlY2xhcmUgZW1pdF9qdW1wX2luc25fYmVmb3JlIGFuZCBlbWl0X2p1bXBfaW5zbl9hZnRlci4KKworCSogcmVsb2FkLmMgKHJlZ19jbGFzc19zdWJzZXRfcCk6IERlbGV0ZSBkdXBsaWNhdGUgY29weS4KKwlsb2NhbC1hbGxvYy5jIChyZWdfY2xhc3Nfc3Vic2V0X3ApOiBNb3ZlIGZyb20gaGVyZS4KKwlyZWdjbGFzcy5jIChyZWdfY2xhc3Nfc3Vic2V0X3ApOiBNb3ZlIHRvIGhlcmUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBGaXggcGxhY2VtZW50IGFuZCBjb250ZW50IG9mIExBU1RfQ0FMTF9DVUlECisJdGVzdCB0byBlbG1pbmF0ZSBtZW1vcnkgZmF1bHRzLgorCisJKiBmaW5hbC5jIChhc21faW5zbl9jb3VudCk6IE5ldyBmbi4KKwkoZ2V0X2xlbmd0aF9hdHRyLCBzaG9ydGVuX2JyYW5jaGVzKTogUmV3b3JrIGxlbmd0aAorCWNvbXB1dGF0aW9uIG9mIGluc25zIHdpdGggSU5TTl9DT0RFID09IC0xLiAgQ2FsbCBhYm92ZSBmbiB0byBtb3JlCisJYWNjdXJhdGVseSBvYnRhaW4gbGVuZ3RoIG9mIEFTTSBpbnNuLgorCisJKiBnZW5hdHRydGFiLmMgKGNoZWNrX2F0dHJfdmFsdWUpOiBBbGxvdyBDT05TVF9JTlQgdG8gc3BlY2lmeQorCW51bWVyaWMgdmFsdWVzIGZvciBhdHRyaWJ1dGVzLiAgQWxzbywgcHJldmVudCBtZW1vcnkgZmF1bHRzCisJb24gZXJyb3JzIHdoZW4gQVRUUiBpcyBudWxsLgorCShtYWtlX2Nhbm9uaWNhbCk6IENvbnZlcnQgQ09OU1RfSU5UIHRvIGFwcHJvcHJpYXRlIENPTlNUX1NUUklORy4KKwkod3JpdGVfYXR0cl9jYXNlKTogQ29ycmVjdGx5IGNoZWNrIGZvciBBU00gaW5zbnMuCisJKG1ha2VfbnVtZXJpY192YWx1ZSk6IEdlbmVyYWxpemUgdG8gYWxsIHBvc2l0aXZlIGludGVnZXJzLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBTZXQgSlVNUF9MQUJFTCBvbiBqdW1wIGFkZGVkCisJaW4gInsgLi4uIHggPSAxO30gaWYgKHgpIiBvcHRpbWl6YXRpb24gYW5kIGFkZCB0byBqdW1wX2NoYWluLgorCisJKiBsb2NhbC1hbGxvYy5jIChub19jb25mbGljdF9wKTogVGlnaHRlbiB1cCBjb2RlIHRvIHByZXZlbnQKKwltZW1vcnkgZmF1bHRzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRml4IHR5cG8gaW4gRVhUUkFfQ09OU1RSQUlOVCBjYWxsLgorCitUdWUgTm92IDI4IDExOjIwOjQ3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKHNhdmVfbm9uY29waWVkX3BhcnRzKTogIFJlbmFtZSBzdGFja19sb2MgYXMgdGFyZ2V0LgorCU1ha2UgdGhlIHN0YWNrIHNsb3QgYWRkcmVzcyBjb3JyZWN0LgorCitNb24gTm92IDI3IDE1OjM5OjQwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbWF0aC1jb252ZXguaDogTmV3IGZpbGUuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IHRlc3Qgc2l6ZSBvZiBlcnJvcl9tYXJrX25vZGUKKwlhcyB0eXBlIG9mIGEgZmllbGQuCisKK1N1biBOb3YgMjYgMTI6MzY6MDEgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW1pcHMuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogRGVsZXRlIGV4dHJhIHBhcmVuLgorCitGcmkgTm92IDI0IDEyOjM2OjI5IDE5ODkgIENocmlzIFNtaXRoICAoY3NtaXRoIGF0IG1vemFydCkKKworCSogdG0tY29udmV4LmggKE9WRVJSSURFX09QVElPTlMpOiByZW1vdmUgdGFyZ2V0PWhvc3QgZGVmYXVsdC4KKwkqIG91dC1jb252ZXguYyAob3ZlcnJpZGVfb3B0aW9ucyk6IHJlbW92ZS4KKworCSogdG0tY29udmV4LmggKCpfVFlQRV9TSVpFKTogZGVmaW5lIHR5cGUgc2l6ZXMgYXMgdGhlIHVzdWFsIHZhbHVlcy4gCisJKiBjb252ZXgubWQgKG1vdnN0cmljdHNpKTogbmV3LCBmb3IgZmllbGQgaW5zZXJ0aW9uIGluIERJbW9kZSByZWdzLgorCisJKiB0bS1jb252ZXguaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogYWxsb3cgYWxsIENPTlNUX0RPVUJMRVMuCisJKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiByZWxvYWQgbm9uaW1tZWRpYXRlcyBmcm9tIG1lbW9yeSAoTk9fUkVHUykuCisJKiBjb252ZXgubWQgKG1vdmRpLCBtb3ZkZik6IHVzZSAnRycgdG8gaGFuZGxlIG5vbmltbWVkaWF0ZXMuCisJKGFuZGRpMywgaW9yZGkzLCB4b3JkaTMpOiBhbGxvdyBpbW1lZGlhdGVzIGlmIGhpZ2ggd29yZCBpcyBpZGVudGl0eS4KKworCSogY29udmV4Lm1kICh0c3RkaSk6IEZpbmFsbHkgZmlndXJlIG91dCBob3cgdG8gYWxsb2NhdGUgYSB0ZW1wIHJlZworCWluIGEgd2F5IHRoYXQgd29uJ3QgZ2V0IG9wdGltaXplZCBhd2F5OyByZW1vdmUgaGFyZHdpcmVkIHVzZSBvZiBzMS4KKworCSogY29udmV4Lm1kIChjbXBxaSk6IGRvbid0IHNpZ24gZXh0ZW5kIHRvIFNJbW9kZSBiZWNhdXNlIG9wZXJhbmRzCisJbWlnaHQgYmUgdW5zaWduZWQuICBNdXN0IGNvbXBhcmUgYnl0ZXMgaW4gcmVnaXN0ZXJzIGluc3RlYWQuCisKKwkqIGNvbnZleC5tZCAobW92dGYpOiBuZXcuCisKKwkqIGNvbnZleC5tZCAoYXNoKiwgbHNoKik6IHJld3JpdGUgdG8gdXNlIHNoaWZ0IHZzLiBzaGlmdHJ0LiAKKwlCZXR0ZXIgY29kZSBiZWNhdXNlIG5vIG5lZWQgdG8gc2lnbiBvciB6ZXJvIGV4dGVuZCB3aGVuIGdvaW5nIGxlZnQuCisJKHNoaWZ0LCBtYXNrICYgdGVzdCBwZWVwaG9sZSk6IHRlc3QgbmV4dF9pbnNuX3Rlc3RzX25vX2luZXF1YWxpdHkuCisJKHNpbWlsYXIgd2l0aCBsc2hpZnRydCk6IE5ldyBwZWVwaG9sZS4KKworCSogdG0tY29udmV4Lmg6IGFkZCBnKysgZGVmaW5lcyBGQVNDSVNUX0FTU0VNQkxFUiwgVlRBQkxFX1VTRVNfTUFTSy4KKworU3VuIE5vdiAyNiAxMTozOToxMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGRlY29tcG9zZSk6IEhhbmRsZSBTVUJSRUdzLgorCitXZWQgTm92IDIyIDExOjI2OjAwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcHlyLm1kIChtb2RlIGNvbnZlcnNpb24gcGVlcGhvbGVzKTogU2V0IENDX05PX09WRVJGTE9XLgorCSogb3V0LXB5ci5jIChjb25zZWN1dGl2ZV9vcGVyYW5kcyk6IERvbid0IGV4cGVjdCB3cmFwIGZyb20gcmVnMTUgdG8gMTYuCisKKwkqIG1ha2UtcHlyOiBGaW5kIHRoZSBhbGxvY2Egd2hpY2ggY29tZXMgd2l0aCB0aGUgc3lzdGVtLgorCisJKiB0bS1taXBzLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IERlZmluZSBgSycuCisJKFNNQUxMX0lOVCk6IFJhbmdlIGlzIDE2IGJpdHMsIG5vdCAxNy4KKwkoU01BTExfSU5UX1VOU0lHTkVEKTogTmV3IG1hY3JvLgorCSogbWlwcy5tZCAoYW5kc2kzLCBpb3JzaTMsIHhvcnNpMyk6IFVzZSBgSycsIG5vdCBgSScuCisKKwkqIG1pcHMubWQgKG5lZ3NpMik6IEFjY2VwdCBnZW5lcmFsX29wZXJhbmQgYXMgaW5wdXQuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGJ1aWxkX2ludCk6IERlZmVuZCBhZ2FpbnN0IG5lZ2F0aXZlIGFyZ3VtZW50cy4KKworCSogdmFyYXNtLmMgKE1BWF9IQVNIX1RBQkxFKTogQ2hhbmdlIHRvIGEgcHJpbWUuCisKK1R1ZSBOb3YgMjEgMTA6NTg6MjggMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtaXBzLm1kIChvbmVfY21wbCopOiBBY2NlcHQgZ2VuZXJhbF9vcGVyYW5kIGFzIGlucHV0LgorCitNb24gTm92IDIwIDExOjE4OjU4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBOZXcgYXJnLCBDT01QQVJJU09OLgorCShlbWl0X2Zsb2F0X2xpYl9jbXApOiBOZXcgc3Vicm91dGluZSwgaGFuZGxlcyBzb2Z0LWZsb2F0IGNvbW9hcmUKKwlvZiBmbG9hdGluZyBwb2ludCB2YWx1ZXMuICBDaG9vc2VzIGlicmFyeSBmbiBmcm9tIENPTVBBUklTT04uCisJKiBleHByLmMsIGV4cG1lZC5jLCBzdG10LmMsIG9wdGFicy5jOiBBbGwgY2FsbHMgY2hhbmdlZC4KKwkqIGdudWxpYi5jIChfX2VxZGYyLCBfX25lZGYyLCBfX2d0ZGYyLCBldGMuKTogTmV3IGZ1bmN0aW9ucy4KKwkoX19lcXNmMiwgX19uZXNmMiwgX19ndHNmMiwgZXRjLik6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IFNpbXVsYXRlIG5lZ2F0aXZlIHNoaWZ0IGNvdW50cy4KKworU3VuIE5vdiAxOSAxNDozNjoxOCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG91dC1weXIuYyAobm90aWNlX3VwZGF0ZV9jYyk6IFNldCBDQ19OT19PVkVSRkxPVyBpbiBtYW55IGNhc2VzLgorCisJKiBjc2UuYyAoZm9sZF9ydHgsIGZvbGRfY2MwKTogSGFuZGxlIGZsb2F0IHRyYXAuIAorCitTYXQgTm92IDE4IDAwOjE3OjQ3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IEhhbmRsZSBmbG9hdCB0cmFwIGluIGZwcmludGYuCisJKiB0b3BsZXYuYyAoZmxvYXRfc2lnbmFsKTogRG9uJ3QgcHJpbnQgbWVzc2FnZS4KKwkqIGZvbGQtY29uc3QuYyAoY29tYmluZSk6IFByaW50IGl0IGhlcmUuCisKKwkqIHNwYXJjLm1kIChleHRlbmQgcGF0dGVybnMpOiBIYW5kbGUgQ09OU1RfSU5UIGFzIG9wZXJhbmQuCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X2Jsb2NrX21vdmUsIG91dHB1dF9tdWxfYnlfY29uc3RhbnQpOiAKKwkob3V0cHV0X2VhZ2VyX3RoZW5faW5zbik6IERlbGV0ZSB1bnVzZWQgdmFycy4KKworCSogdmFyYXNtLmMgKGRlY29kZV9ydHhfY29uc3QpOiBBZGQgYSBjYXN0IGluIFNZTUJPTF9SRUYgY2FzZS4KKworCSogdG0taTM4Ni5oIChUUkFNUE9MSU5FX1RFTVBMQVRFLCBUUkFNUE9MSU5FX1NJWkUpCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IE5ldyBtYWNyb3MuCisJKiBpMzg2Lm1kIChpbmRpcmVjdF9qdW1wKTogTmV3IHBhdHRlcm4uCisKKwkqIG91dC1pMzg2LmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogRml4IHBhcmVuIGVycm9yLgorCitGcmkgTm92IDE3IDEyOjE5OjU2IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfaW5jcmVtZW50KTogRm9yIHByZS1pbmNyZW1lbnQsIGNvcHkgdGhlIHJ0eCB0byByZXR1cm4uCisKKwkqIGMtcGFyc2UueSAoY29tcHN0bXQpOiBUaGVyZSBtYXkgYmUgaW1wbGljaXQgZGVjbHMsIHNvIGNoZWNrCisJYW5kIG1heWJlIGtlZXAgdGhlIGxldmVsLgorCisJKiB0bS1taXBzLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6CisJVXNlIGNhbGxfdXNlZF9yZWdzLCBub3QgYSBwcml2YXRlIGNvcHkuCisKK1RodSBOb3YgMTYgMDA6Mjg6MjkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmM6IEtlZXAgdHJhY2sgb2YgcGFyYWRveGljYWwgc3VicmVncyBvZiBlYWNoIHBzZXVkbywKKwlhbmQgbWFrZSBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlaXIgc2FrZS4KKwkocmVsb2FkKTogUmVjb3JkIG1heCBzaXplIHBhcmFkb3hpY2FsIHN1YnJlZyBmb3IgZWFjaCBwc2V1ZG8uCisJKHNjYW5fcGFyYWRveGljYWxfc3VicmVnKTogTmV3IHN1YnJvdXRpbmUgZm9yIHRoYXQuCisJKHJlbG9hZCk6IE1ha2Ugc3RhY2sgc2xvdHMgYmlnIGVub3VnaCBmb3IgdGhhdCBzaXplLgorCisJKiB0bS1pODYwLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBEZWZpbmUgaXQsCisJc28gd2UgY2FuIG91dHB1dCBhIG5vLW9wIGJlZm9yZSBlYWNoIGZ1bmN0aW9uLgorCisJKiB0bS1weXIuaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBTaW1wbGlmeS4KKwlQYXNzIGZ1bmN0aW9uIHR5cGUgdG8gYWdncmVnYXRlX3ZhbHVlX3AuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6CisJRm9yIGZvbysrID4gY29uc3QsIGRvbid0IGNoYW5nZSBpZiBmb28rKyBjb3VsZCBvdmVyZmxvdy4KKworCSogbG9vcC5jIChlbGltaW5hdGVfYml2KToKKwlGaXggdHlwbzsgY2hlY2sgYm90aCBjb2VmZnMgd2hlbiBjb21wYXJpbmcgZ2l2cy4KKworV2VkIE5vdiAxNSAwMDoxMjo1OSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHNkYm91dC5jIChzZGJvdXRfZW5kX2Z1bmN0aW9uLCBzZGJvdXRfZW5kX2Jsb2NrLCBzZGJvdXRfYmVnaW5fYmxvY2spOgorCURvbid0IGFsbG93IGxpbmUgbnVtYmVycyA8IDEuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2Zvcl9pbmxpbmUpOiBgYnJlYWsnIHdhcyBtaXNzaW5nIGZvciBjYXNlICd1JzouCisKKwkqIHNkYm91dC5jIChwbGFpbl90eXBlXzEpOiBPdXRwdXQgLmRpbSBYLFkuLi47IGZvciBtdWx0aS1kaW0gYXJyYXkuCisJKHNkYm91dF9hcnJheV9kaW0pOiBOZXcgcmVjdXJzaXZlIHN1YnJvdXRpbmUuCisJKFBVVF9TREJfRElNKTogTWFjcm8gZWxpbWluYXRlZC4KKwkoUFVUX1NEQl9TVEFSVF9ESU0sIFBVVF9TREJfTkVYVF9ESU0sIFBVVF9TREJfTEFTVF9ESU0pOiBOZXcgbWFjcm9zLgorCSogdG0tM2IxLmg6IE92ZXJyaWRlIFBVVF9TREJfU1RBUlRfRElNLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9pbnNuKTogRXh0cmEgdGVzdCBmb3IgUFJFViAhPSAwLgorCitUdWUgTm92IDE0IDE3OjMxOjA4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tbTY4ay5oIChXT1JEU19CSUdfRU5ESUFOKTogRGVmaW5lIGl0LgorCSogb3V0LW02OGsuYyAob3V0cHV0X21vdmVfZG91YmxlKTogQWRhcHQgQ09OU1RfRE9VQkxFIGNhc2UgdG8gdGhhdC4KKworCSogdmFyYXNtLmMgKGRlY29kZV9ydHhfY29uc3QpOiBGb3IgU1lNQk9MX1JFRiwgdXNlIGFkZHIgb2Ygc3RyaW5nLgorCisJKiB0bS1weXIuaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOgorCUlmIC1mcGNjLXN0cnVjdC1yZXR1cm4sIGFsd2F5cyBkbyB0aGUgc2NhbGFyIHRoaW5nLgorCisJKiB0bS1zdW4zLmggKExJTktfU1BFQyk6IFNwZWNpZnkgLUwgdG8gY29udHJvbCBjaG9pY2Ugb2YgLWxtLgorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogVXNlIEZVTkNUSU9OX09VVEdPSU5HX1ZBTFVFLgorCitTYXQgTm92IDExIDAwOjE4OjU0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAocHJlcGFyZV9jYWxsX2FkZHJlc3MpOiBJZiBOT19SRUNVUlNJVkVfRlVOQ1RJT05fQ1NFLAorCWRvbid0IGRvIGZ1bmN0aW9uIGNzZSBvbiBjYWxscyB0byBzYW1lIGZ1bmN0aW9uLgorCShlbWl0X2NhbGxfMSk6IERvbid0IGNhbGwgbWVtb3J5X2FkZHJlc3MgZm9yIFNZTUJPTF9SRUYuCisKKwkqIHRtLWF0dDM4Ni5oIChBU01fT1VUUFVUX0NPTU1PTik6IFVzZSBST1VOREVELCBub3QgU0laRS4KKwkoQVNNX09VVFBVVF9MT0NBTCk6IExpa2V3aXNlLiAgQWxzbywgZ2VuZXJhdGUgLmxjb21tCisJcmF0aGVyIHRoYW4gYSAuZGF0YSBhcmVhIHN5bWJvbC4KKwkqIHRtLXN1bjM4Ni5oOiBMaWtld2lzZS4KKworCSogdG0tYnNkMzg2LmggKEFTTV9PVVRQVVRfQ09NTU9OKTogVXNlIFJPVU5ERUQsIG5vdCBTSVpFLgorCShBU01fT1VUUFVUX0xPQ0FMKTogTGlrZXdpc2UuCisKKwkqIGNleHAueSAocGFyc2VfZXNjYXBlKTogRGVsZXRlIHVudXNlZCB2YXIgYGNvdW50JyBmcm9tIGNhc2UgJ3gnLgorCitGcmkgTm92IDEwIDE1OjA0OjE1IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgcmljZS1jaGV4KQorCisJKiBjYWxsZXItc2F2ZS5jIChlbWl0X211bHRfcmVzdG9yZSwgZW1pdF9tdWx0X3NhdmUpOgorCUltcHJvdmUgYXJpdGhtZXRpYyBmb3IgYWRkcmVzcyB0byBzYXZlIGF0LgorCitUaHUgTm92ICA5IDAwOjE0OjE5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tcHlyLmggKEFTTV9PVVRQVVRfUkVHX1BVU0gsIEFTTV9PVVRQVVRfUkVHX1BPUCk6CisJRG9uJ3QgdXNlIG9ic29sZXRlIHB1c2h3IGFuZCBwb3B3IGluc25zLgorCShBU01fT1VUUFVUX0FMSUdOKTogRW5zdXJlIGFyZyBpbiByYW5nZSAyIHRvIDUuCisJKiBweXIubWQgKHRzdGRpKTogUGF0dGVybiBkZWxldGVkLgorCShTSW1vZGUgdGVzdCByZWNvZ25pemVyKTogT3V0cHV0IHVjbXB3IGlmIGp1bXAgaXMgdW5zaWduZWQuCisKKwkqIG91dC1zcGFyYy5jIChvcGVyYW5kc19zYXRpc2Z5X2VhZ2VyX2JyYW5jaF9wZWVwaG9sZSk6IAorCUNoZWNrIGZvciBtb3ZlcyBiZXR3ZWVuIEZQIGFuZCBub24tRlAgcmVnczsgdGhleSB0YWtlIHR3byBpbnNucy4KKwkqIHNwYXJjLm1kIChlYWdlciBicmFuY2ggcGVlcGhvbGVzKTogTGlrZXdpc2UuCisJKE9yZGluYXJ5IGRlbGF5ZWQgYnJhbmNoIHBlZXBob2xlcyk6IFNpbWlsYXIgY2hlY2suCisJKiBvdXQtc3BhcmMuYyAoc2luZ2xlX2luc25fZXh0cmFfdGVzdCk6IE5ldyBzdWJyb3V0aW5lLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOgorCVJlYXJyYW5nZSB0byBhdm9pZCBjYWxsaW5nIEJMT0NLX1BST0ZJTEVSIGZvciBhIGp1bXAgdGFibGUuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogU3BsaXQgdXAgYSBoYWlyeSBpZi4KKworV2VkIE5vdiAgOCAwMDo0ODo1MCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSGFuZGxlIFVOTkFNRURfQVJHU19JTl9SRUdJU1RFUlMuCisKKwkqIHRvcGxldi5jIChtYWluKTogSGFuZGxlIC1nc2RiIHRvIG1ha2Ugc2RiIG91dHB1dCB3aGVuIHRoYXQgYW5kIGRieAorCWFyZSBib3RoIHN1cHBvcnRlZC4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEluIChzaWduX2V4dGVuZDpNIChzdWJyZWc6TiAoYW5kOk0gLi4gPGNvbnN0PikgMCkpCisJaW5zaXN0IHRoYXQgY29uc3RhbnQgYmUgcG9zaXRpdmUgaW4gbW9kZSBOLgorCUFsc28gdGVzdCBtb2RlIE4gaW4gc2ltaWxhciB6ZXJvX2V4dGVuZCBjYXNlLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IFdoZW4gYXNzaWduaW5nIHRvIENPTkRfRVhQUgorCXB1dCBjYXN0IHRvIHZvaWQgYXJvdW5kIHByZWNvbXB1dGVkIHJocy4KKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBNYWtlIGZ1bmV4cCBhIHZhbGlkIGFkZHJlc3MuCisKK1R1ZSBOb3YgIDcgMTg6NTc6MTcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuKTogSWYgYXJncyBpbiBtZW1vcnksIG1ha2UgYWRkcmVzc2VzIHZhbGlkLiAKKworCSogcnRsLmg6IFVuZGVmaW5lIEZGUyBpbiBjYXNlIGl0IHdhcyBkZWZpbmVkIGJ5IHRoZSBzeXN0ZW0uCisKKwkqIGMtcGFyc2UueSAoY29tYmluZV9zdHJpbmdzKTogSWdub3JlIHdhcm5fd3JpdGVfc3RyaW5ncworCWlmIC10cmFkaXRpb25hbCBvciAtZndyaXRhYmxlLXN0cmluZ3MuCisKKwkqIE1ha2VmaWxlLmluIChnbnVsaWIyKTogRml4IHN5bnRheCBpbiBzaGVsbCBjb25kaXRpb25hbHMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IEhhbmRsZSBDT05EX0VYUFIgc3BlY2lhbGx5LgorCitNb24gTm92ICA2IDE0OjQzOjU1IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCk6IENoZWNrIHNpZ24gb2YgRlJPTTsgbWF5IGJlIGZhc3RlciB0aGFuIFRPLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBJZiBSRUFMX0lORklOSVRZLCBhbGxvdyBkaXZpc2lvbiBieSB6ZXJvLgorCSogdG0tc3VuMy5oIChSRUFMX0lORklOSVRZKTogRGVmaW5lIGl0LgorCisJKiB0bS1pODYwLmgsIHRtLW04OGsuaCwgdG0tcHlyLmgsIHRtLXNwdXIuaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOgorCVRlc3QgYWdncmVnYXRlX3ZhbHVlX3AsIG5vdCBqdXN0IEJMS21vZGUuCisKKwkqIGdudWxpYjIuYyAoX19idWlsdGluX3NhdmVyZWdzKTogTW92ZWQgZnJvbSBnbnVsaWIuYy4KKwlDb2RlIGFkZGVkIGZvciBtaXBzLgorCisJKiBweXIubWQgKGNvbmRpdGlvbmFsIGJyYW5jaCByZWNvZ25pemVycyk6IERvbid0IHNpbXBsaWZ5IGlmIG5vdCAtTy4KKworCSogb3V0LXB5ci5jIChleHRlbmRfYW5kX2JyYW5jaCk6IEhhbmRsZSB0d28gY29uc3RhbnQgb3BlcmFuZHMuCisKKwkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBEb24ndCBpbmxpbmUgaWYgYWxsb2NhIHVzZWQuCisKK1N1biBOb3YgIDUgMDI6NTk6MjMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBBbHdheXMgbWFrZSBhIExFVF9TVE1UIGFuZCBub3RlcyBmb3IgdGhlIHRvcCBsZXZlbCBvZiBhIGZ1bmN0aW9uCisJaWYgaXQgaGFzIGFueSBzdWJibG9ja3MuCisJKiBjLWRlY2wuYyAoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiBOZXcgZmllbGQga2VlcF9pZl9zdWJibG9ja3MuCisJKHBvcGxldmVsKTogT2JleSB0aGUgbmV3IGZpZWxkLgorCShrZWVwX25leHRfaWZfc3ViYmxvY2tzKTogTmV3IHZhcmlhYmxlLgorCShwdXNobGV2ZWwpOiBVc2UgdGhhdCB2YXJpYWJsZS4KKwkoc3RvcmVfcGFybV9kZWNscyk6IFNldCB0aGF0IHZhcmlhYmxlLgorCShjb21wc3RtdCk6IFBhc3Mgbm9uemVybyB0byBleHBhbmRfZW5kX2JpbmRpbmdzCisJZm9yIHRoZSBuZXcga2VwdCBiaW5kaW5nIGxldmVscy4KKwkoa2VwdF9sZXZlbF9wKTogTmV3IGZ1bmN0aW9uLgorCisJKiB4bS1taXBzLmg6IERlZmluZSBVU0VfQ19BTExPQ0EgaWYgY29tcGlsaW5nIHdpdGggQ0MuCisKKwkqIHRtLWFsbGlhbnQuaCAoQ0hFQ0tfRkxPQVRfVkFMVUUpOiBEZWZpbmUgdGhpcy4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBNYWtlIHZhbHJlZyAwIGlmIHBhc3Npbmcgc3RydWN0dXJlIGFkZHJlc3MuCisKK1NhdCBOb3YgIDQgMjM6Mjc6MDIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjYWxsZXItc2F2ZS5jIChlbWl0X211bHRfc2F2ZSwgZW1pdF9tdWx0X3Jlc3RvcmUpOgorCVRlc3QgcmVncyBmb3Igc3VpdGFiaWxpdHkgYXMgYWRkcmVzcyBiZWZvcmUgdXNpbmcgYXMgdGVtcHMuCisKKwkqIGNjY3AuYyAobWFrZV9kZWZpbml0aW9uLCBkb19kZWZpbmUpOiBCZXR0ZXIgZXJyb3IgY2hlY2tzIGZvciBuYW1lLgorCitGcmkgTm92ICAzIDAxOjA1OjA0IDE5ODkgIFRvcmJqfHJuIEdyYW5sdW5kICAodGVnZSBhdCBlY2huYXRvbikKKworCSogcHlyLm1kICh0c3RkaSk6IE5ldyBwYXR0ZXJuLiAgVXNlIDY0LWJpdCBzaGlmdCB3aXRoIGNvdW50IHplcm8uCisKKwkqIHRtLXB5ci5oOiAtbXJldGQgcG9wcyBhcmdzIHdpdGggdGhlIHJldGQgaW5zbi4KKworCSogcHlyLm1kIChwZWVwLWhvbGVzIGZvciBsb29wIG9wdGltaXphdGlvbnMpOiBVc2UgdGhlIFIgb3V0cHV0CisJICBmb3JtYXQgaW4gUFJJTlRfT1BFUkFORCwgZG9uJ3QgdXNlIG91dHB1dF9icmFuY2guCisJKiBvdXQtcHlyLmM6IE5vIG5lZWQgZm9yIGZ1bmN0aW9ucyBvdXRwdXRfYnJhbmNoLCBvdXRwdXRfaW52X2JyYW5jaC4KKworCSogdG0tcHlyLmggKEFTTV9PVVRQVVRfQUxJR04pOiBEb24ndCB0cnVuY2F0ZSBhbGlnbm1lbnQgdG8gdHdvLgorCitXZWQgTm92ICAxIDAwOjM4OjI3IDE5ODkgIFRvcmJqfHJuIEdyYW5sdW5kICAodGVnZSBhdCBlY2huYXRvbi5zaWNzLnNlKQorCisJKiBvdXQtcHlyLmMgKG91dHB1dF9pbnZfYnJhbmNoKTogV2hlbiByZXZlcnNpbmcgdGVzdCBvcGVyYW5kcywgbmUKKwkgIHJlbWFpbnMgbmUsIGFuZCBlcSBlcSBlcS4KKworCSogcHlyLm1kOiBDbGVhbnVwIG91dHB1dCBjb2RlIGZvciBjb21wYXJlIHBhdHRlcm5zLgorCisJKiBweXIubWQgKHJldHVybik6IEFkanVzdCBmcmFtZSBwb2ludGVyIGlmCisJICBjdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplICE9IDAuCisKKwkqIHB5ci5tZCAoZXh0ZW5kc2lkaTIpOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGZvciB0aGUgaW5wdXQgb3BlcmFuZC4KKworCSogcHlyLm1kLCBvdXQtcHlyLmM6IE91dHB1dCBzaGlmdCBpbnNucyB3aXRoIG91dHB1dF9zaGlmdC4KKworCSogdG0tcHlyLmgsIG91dC1weXIuYzogTWFrZSBOT1RJQ0VfVVBEQVRFX0NDIHVuZGVyc3RhbmQgaG93CisJICBjb25kaXRpb24gY29kZXMgYXJlIHJlYWxseSBzZXQuICBEZWZpbmUgZmxhZyBDQ19WQUxJRF9GT1JfVU5TSUdORUQKKwkgIHdpdGggdG8gbWFrZSBpdCBwb3NzaWJsZSBub3QgdG8gcmVzZXQgY2MgYWZ0ZXIgZWFjaCBjb21wYXJlIG9yCisJICB0ZXN0LgorCSogcHlyLm1kOiBEb24ndCB1c2UgQ0NfU1RBVFVTX0lOSVQgZm9yIG1vc3QgcGF0dGVybnMuCisKKwkqIG91dC1weXIuYyAoYWxyZWFkeV9zaWduX2V4dGVuZGVkKTogQ2xlYW51cCwgY29ycmVjdCwgb3B0aW1pemUuCisKKwkqIG91dC1weXIuYzogcmVuYW1lIHJhZHJfZGlmZiB0byBjb25zdGFudF9kaWZmLgorCisJKiBvdXQtcHlyLmMgKG1vdmRpX3Bvc3NpYmxlKTogRG9uJ3QgY29tYmluZSBtb3ZlcyBmcm9tIG1lbW9yeSB0bworCSAgbWVtb3J5LCBiZWNhdXNlIG9mIHBvc3NpYmxlIGFkZHJlc3MgYWxpYXNpbmcuICBEb24ndCBjb21iaW5lIG1vdmVzCisJICB3aXRoIHJlZ2lzdGVyIGRlc3RpbmF0aW9uIGlmIHRoZSBzb3VyY2Ugb3BlcmFuZHMgYXJlIGRlcGVuZGluZyBvbgorCSAgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBmaXJzdCBtb3ZlLCBhcyBpbgorCisJICAgIG1vdncgKHByMykscHIzCisJICAgIG1vdncgNChwcjMpLHByNC4KKworCSogb3V0LXB5ci5jIChjb25zZWN1dGl2ZV9vcGVyYW5kcyk6IEhhbmRsZSBTVUJSRUcgaW4gYWRkaXRpb24gdG8gUkVHLgorCisJKiBvdXQtcHlyLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IG1vdmwgb2YgaW1tZWRpYXRlICpzaWduKiBleHRlbmRzLgorCitUdWUgT2N0IDMxIDIyOjUxOjM5IDE5ODkgIFRvcmJqfHJuIEdyYW5sdW5kICAodGVnZSBhdCBlY2huYXRvbi5zaWNzLnNlKQorCisJKiBweXIubWQgKGNtcHNpKTogRG9uJ3QgZXhwYW5kIHRoaXMuICBJdCdzIGp1c3Qgc2xvd2VyLgorCisJKiBvdXQtcHlyLmMgKGV4dGVuZF9hbmRfYnJhbmNoKTogSGFuZGxlIG9ubHkgUUltb2RlIGFuZCBISW1vZGUuCisJICBGbHVzaCBjb2RlIHNwZWNpZmljIGZvciBTSW1vZGUuCisKKwkqIG91dC1weXIuYyAoZXh0ZW5kX2FuZF9icmFuY2gpOiBUbyBtYWtlIHplcm8gZXh0ZW5zaW9ucyB0byBISW1vZGUKKwkgIG9mIGNvbnN0YW50cyBub3QgY3Jhc2g6CisJKiBvdXQtcHlyLmMgKGVuc3VyZV9leHRlbmRlZCk6IENhbGwgZXh0ZW5kX2NvbnN0IGlmIGl0J3MgYQorCSAgQ09OU1RfSU5ULiAgRG9uJ3QgY2FsbCBleHRlbmRfY29uc3QgZnJvbSBleHRlbmRfYW5kX2JyYW5jaC4KKwkqIHB5ci5tZCwgb3V0LXB5ci5tZDogVXNlIGdsb2JhbCB2YXJpYWJsZSB0ZXN0X21vZGUgdG8gZGV0ZXJtaW5lIHRoZQorCSAgbW9kZSBvZiB0ZXN0cyBhbmQgY29tcGFyZXMuICBTZXQgaW4gZGVmaW5lX2V4cGFuZHMgZm9yIHRlc3RzIGFuZAorCSAgY29tcGFyZXMuICBVc2VkIGluIGV4dGVuZF9hbmRfYnJhbmNoLgorCSogb3V0LXB5ci5jOiBQYXNzIG1vZGUgYmV0d2VlbiBleHRlbmRfYW5kX2JyYW5jaCBhbmQgZW5zdXJlX2V4dGVuZGVkLgorCisJKiBvdXQtcHlyLmMgKGV4dGVuZF9hbmRfYnJhbmNoKTogQWNjZXB0IFNVQlJFRyB3aGVyZWV2ZXIgUkVHIGlzCisJICBhY2NlcHRlZC4KKwkqIG91dC1weXIuYyAod2VpcmRfbWVtb3J5X21lbW9yeSk6IEFjY2VwdCBTVUJSRUcgd2hlcmVldmVyIFJFRyBpcworCSAgYWNjZXB0ZWQuCisKK1RodSBOb3YgIDIgMTY6MjM6NTcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnbnVsaWIyLmMgKGxzaHJkaTIsIGFuZCBvdGhlciBzaGlmdHMpOiBUYWtlIHNlY29uZCBhcmcgYXMgbG9uZyBsb25nLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KToKKwlTaW1wbGlmeSAoemVyb19leHRyYWN0IChzdWJyZWc6U0kgKGxzaGlmdDpRSSAobWVtOlFJIC4uLikpIDApIC4uLikKKworCSogZXhwci5jIChkb19qdW1wKTogRG9uJ3QgZGlzY2FyZCBOT1BfRVhQUiBmcm9tIGFyb3VuZCBDT01QT05FTlRfUkVGLgorCVB1dCBvbmUgb24sIGlmIHRoYXQgYWxsb3dzIGV4dHJhY3RpbmcgdGhlIGNvbXBvbmVudCBpbiBuYXR1cmFsIG1vZGUuCisKKwkqIGZpbmFsLmMgKGdldF9hdHRyX2xlbmd0aCk6IE9taXQgdGhlIGJvZHkgaWYgbm8gbGVuZ3RoIGF0dHJpYnV0ZS4KKworCSogTWFrZWZpbGUuaW4gKGdlbmF0dHJ0YWIpOiBVc2UgaG9zdC1ydGxhbmFsLmMgYXMgZGVwIGFuZCB0byBsaW5rLgorCShpbnNuLWF0dHJ0YWIubyk6IFVzZSAkKElOQ0xVREVTKS4KKworCSogY3NlLmM6IEluY2x1ZGUgc3RkaW8uaC4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogTG9jYWwgYHZhbHVlJyB3YXMgZGVjbGFyZWQgYW5kIHNldCB3cm9uZy4KKworCSogTWFrZWZpbGUuaW4gKGdlbioubyk6IEZpbmQgc291cmNlIGZpbGVzIGluICQoc3JjZGlyKS4KKwkoTElCREVQUywgSE9TVF9MSUJERVBTKTogRG9uJ3QgdXNlIFVTRV9BTExPQ0EuCisKK1dlZCBOb3YgIDEgMDA6MDU6NTkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0IG1heF9wYXJtX3JlZy4KKworCSogdmFyYXNtLmMgKGNvbXBhcmVfY29uc3RhbnRfMSk6IEZvciBBRERSX0VYUFIsIGNvbXBhcmUgc3ltYm9sIG5hbWUuCisJRm9yIFBMVVNfRVhQUiwgZXRjLiwgZG9uJ3QgcmVjb3JkIGNvZGUgdHdpY2UuCisJKHJlY29yZF9jb25zdGFudF8xKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBBbGxvdyBmb3Igb3ZlcmxhcCB3aGVuIHN0b3JpbmcgaW50byBhCisJc3RydWN0dXJlIHZhbHVlIGFyZWEgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KKworCSogY3NlLmMgKHJlbW92ZSk6IEhhbmRsZSBhbiBlbHQgaW4gdGhlIHdyb25nIGJ1Y2tldC4KKworCSogZnVuY3Rpb24uYyAoZml4dXBfc3RhY2tfMSk6IEF2b2lkIHVzaW5nIG1vdmUgaW5zbiBmb3IgYWRkcmVzcyBhcml0aC4KKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9tdWxfYnlfY29uc3RhbnQpOiBDb25zdGFudCB6ZXJvIGlzIGxlZ2l0aW1hdGUuCisKKwkqIGNhbGxlci1zYXZlLmMgKGVtaXRfbXVsdF9yZXN0b3JlLCBlbWl0X211bHRfc2F2ZSk6CisJSGFuZGxlIHN0YWNrIGFkZHJlc3NlcyB3aGljaCBhcmUgaW52YWxpZC4KKworCSogY3NlLmMgKHVzZV9yZWxhdGVkX3ZhbHVlKTogRG9uJ3QgYWJvcnQgaWYgb2Zmc2V0IGlzIDAuCisKK1R1ZSBPY3QgMzEgMTU6MTI6NTQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjb25maWcuZ2NjIChweXJhbWlkKTogU2V0ICRtYWNoaW5lIHRvIHB5ci4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEb24ndCBPS19ERUZFUl9QT1AgaW4gaXNfY29uc3QgY2FzZS4KKworTW9uIE9jdCAzMCAxNzowMDo0NCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMsIGluaXRfaW5zbl9sZW5ndGhzKToKKwlEZWZpbmUgdW5jb25kaXRpb25hbGx5OyBjb25kaXRpb25hbGl6ZSB0aGUgY29udGVudHMsIHBlcmhhcHMuCisKK01vbiBPY3QgMzAgMDM6MjM6NTIgMTk4OSAgUmljaGFyZCBLZW5uZXIgICAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaW5hbC5jIChzaG9ydGVuX2JyYW5jaGVzKTogTmV3IGZ1bmN0aW9uLgorCShpbml0X2luc25fbGVuZ3RocywgZ2V0X2F0dHJfbGVuZ3RoKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBDYWxsIGluaXRfaW5zbl9sZW5ndGhzLgorCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogQ2FsbCBhbHRlcl9zdWJyZWcgaWYgbmVjLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIHNob3J0ZW5fYnJhbmNoZXMuCisJKGNvbXBpbGVfZmlsZSk6IEluaXQgYW5kIHByaW50IHNob3J0ZW5fYnJhbmNoX3RpbWUuCisKK01vbiBPY3QgMzAgMDM6MjM6NTIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKHNwaWxsX3JlZ3MpOiBNYWtlIGl0IHNob3J0LCBub3QgY2hhci4KKworU3VuIE9jdCAyOSAwMDo1Mzo0NiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERlbGV0ZSBuby1vcCBtb3ZlcywgZXZlbiB3aXRob3V0IC1PLgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogUHJldmVudCB3YXJuaW5nIGZvciBudW1iZXJzIHRoYXQgdW5kZXJmbG93LgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IENvbnZlcnQgc3RhY2sgYWRkcmVzc2VzIHRvIHZhbGlkIGFkZHJlc3Nlcy4KKwkodmFsaWRpemVfbWVtKTogTmV3IHN1YnJvdXRpbmUuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZW51bSk6IElmIC1mc2hvcnQtZW51bXMsIHJvdW5kIHNpemUgdXAgdG8gbWF0Y2gKKwlzb21lIG9yZGluYXJ5IEMgaW50ZWdlciB0eXBlLgorCUNvbXB1dGUgcHJlY2lzaW9uIHByb3Blcmx5IHdoZW4gc29tZSB2YWx1ZXMgYXJlIG5lZ2F0aXZlLgorCU1ha2UgdHlwZSBkb3VibGUgcHJlY2lzaW9uIHdoZW4gbmVjZXNzYXJ5LgorCisJKiBjLWRlY2wuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQWNjZXB0IGFuZCBpZ25vcmUgLWZub3RyYWRpdGlvbmFsLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBQYXNzIC1mdHJhZGl0aW9uYWwgdG8gY3BwIGFzIC10cmFkaXRpb25hbC4KKworCSogRE9MTEFSU19JTl9JREVOVElGSUVSUyBub3cgaGFzIHRocmVlIHZhbHVlcy4gIDEgaXMgbm93IHRoZSBkZWZhdWx0LgorCUl0IG1lYW5zIGVuYWJsZSAkIG9ubHkgd2l0aCAtdHJhZGl0aW9uYWwuICAyIG1lYW5zIGVuYWJsZSB1bmxlc3MgLWFuc2kuCisJKiBjLWRlY2wuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSW1wbGVtZW50IHRoYXQuCisJKiBjY2NwLmMgKG1haW4pOiBMaWtld2lzZS4KKwkqIHRtLXZtcy5oLCB0bS1hcG9sbG82OC5oLCB0bS1jb252ZXguaCwgdG0tbmV4dC5oOgorCURlZmluZSBET0xMQVJTX0lOX0lERU5USUZJRVJTIGFzIDIuCisJKiB0bS1weXIuaDogRGVmaW5lIGl0IGFzIDAuCisJKiBjZXhwLnkgKGluaXRpYWxpemVfcmFuZG9tX2p1bmspOiBUZXN0IERPTExBUlNfSU5fSURFTlRJRklFUlMKKwlmb3Igbm9uemVyb25lc3MuCisKKwkqIHN0bXQuYyAoY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcpOiBBY2NlcHQgZW51bSB0eXBlCisJYXMgYXJndW1lbnQgKHNpbmNlIHdhcyBmaW5kaW5nIGl0IGluY29ycmVjdGx5KS4KKwlEZWxldGUgc3BlY2lhbCBjYXNlIGZvciBjb25zdGFudCBpbmRleC4KKwkoZXhwYW5kX2VuZF9jYXNlKTogUGFzcyBlbnVtIHR5cGU7IGNoZWNrIGZvciBjb25zdGFudCBpbmRleC4KKworU3VuIE9jdCAyOSAwMDo1Mzo0NiAxOTg5ICBSaWNoYXJkIEtlbm5lciAgICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHZhcmFzbS5jIChmb3JjZV9jb25zdF9kb3VibGVfbWVtKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgorCShyZWNvcmRfY29uc3RhbnRfcnR4KTogVXNlIG5vcm1hbCBvYnN0YWNrIHNpbmNlIHRlbXBvcmFyeSBkYXRhLgorCShmb3JjZV9jb25zdF9tZW0pOiBEb24ndCBvdXRwdXQgY29uc3RhbnQgaW1tZWRpYXRlbHkuICBJbnN0ZWFkLAorCXNhdmUgaXQgZm9yIG5ldyBmbiB0byB3cml0ZS4gIEFsc28sIG1ha2UgaGFzaCB0YWJsZSBtYXBwaW5nCisJaW50ZXJuYWwgbGFiZWwgdG8gZGVzaXJlZCBjb25zdGFudC4KKwkob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBOZXcgZm4gdG8gd3JpdGUgY29uc3RhbnQgcG9vbC4KKwkoYXNzZW1ibGVfZnVuY3Rpb24pOiBDYWxsIGl0LgorCShpbml0X2NvbnN0X3J0eF9oYXNoX3RhYmxlKTogSW5pdGlhbGl6ZSBuZXcgaGFzaCB0YWJsZSBhbmQgcG9vbAorCWNoYWluIGFuZCBvZmZzZXQuCisJKGZpbmRfcG9vbF9jb25zdGFudCk6IE5ldyBmbiB0byBtYXAgaW50ZXJuYWwgbGFiZWwgU1lNQk9MX1JFRiB0bworCWRhdGEgYWJvdXQgY29uc3RhbnQuCisJKGdldF9wb29sX2NvbnN0YW50LCBnZXRfcG9vbF9tb2RlLCBnZXRfcG9vbF9vZmZzZXQpOiBOZXcgZm5zCisJdXNpbmcgYWJvdmUgZm4gdG8gcmV0dXJuIGRhdGEgYWJvdXQgY29uc3RhbnQgcG9vbCBsYWJlbHMuCisJKiBydGwuaDogRGVmaW5lIGxhc3QgdGhyZWUgbmV3IGZucy4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfY29uc3RhbnRzKTogTmV3IGZuIHRvIGNvbnZlcnQgY29uc3RhbnQgcG9vbAorCXJlZmVyZW5jZXMgdG8gcmVjb2duaXphYmxlIHJlcHJlc2VudGF0aW9uIG9mIGNvbnN0YW50IHRoYXQgd2FzCisJYmVpbmcgdXNlZC4KKwkoc2F2ZV9mb3JfaW5saW5lKTogQ2FsbCBpdC4KKwkoY29weV9mb3JfaW5saW5lLCBvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogVW5kbyB0aGlzIGZvciBjb3B5IHRvCisJYmUgY29tcGlsZWQuCisJKHJlc3RvcmVfY29uc3RhbnRzKTogTmV3IGZuIHVzZWQgaW4gb3V0cHV0X2lubGluZV9mdW5jdGlvbi4KKwkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBNYWtlIG5ldyBjb25zdGFudCBwb29sIGVudHJpZXMgZm9yCisJY29uc3RhbnRzIGluIHBvb2wgd2hlbiBmbiB3YXMgaW5saW5lZC4KKworCSogY3NlLmMgKGNzZV9lbmRfb2ZfYmFzaWNfYmxvY2spOiBPcHRpb25hbGx5IG1ha2UgYSAiYmFzaWMgYmxvY2siCisJdGhhdCBmb2xsb3dzIGJyYW5jaGVzLiAgTm93IHRha2VzIHByZXZpb3VzIGJsb2NrIGFzIGFyZ3VtZW50IGFuZAorCWNvbXB1dGVzIHdoaWNoIGJyYW5jaCB0byBmb2xsb3cvZmFsbCB0aHJvdWdoIG5leHQuCisJKGNzZV9tYWluLCBjc2VfYmFzaWNfYmxvY2spOiBNYWtlIGNvbXBhdGlibGUgd2l0aCBhYm92ZS4KKworCSogdG9wbGV2LmM6IEFkZCBuZXcgZmxhZywgLWZjc2UtZm9sbG93LWp1bXBzLgorCShyZXN0X29mX2NvbXBpbGF0aW9uKTogUGFzcyBkdW1wIGZpbGUgdG8gY3NlX21haW4uCisKKwkqIGZsYWdzLmg6IEFkZCBmbGFnX2NzZV9mb2xsb3dfanVtcHMuCisKK1NhdCBPY3QgMjggMDE6MjQ6MTQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbik6IERlZmF1bHQgTU9ERSBiZWZvcmUgY29tcHV0aW5nIENMQVNTLgorCitGcmkgT2N0IDI3IDE2OjI1OjE5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tbmV4dC5oIChfX2lubGluZSk6IGRlZmluZSBhcyBtYWNybyBmb3Igb2xkIDEuMzQgTmV4dCB1c2VzLgorCitUaHUgT2N0IDI2IDAxOjA1OjA5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbWlwcy5tZCAoY29tcGFyZS9icmFuY2ggcGVlcGhvbGVzKTogQ29tYmluZSB1c2luZyBtYXRjaF9vcGVyYXRvci4KKwkqIG91dC1taXBzLmMgKHJlbG9wLCBmcmVsb3AsIGZyZWxvcF9yZXZlcnNlZCk6IE5ldyBmdW5jdGlvbnMuCisJKiB0bS1taXBzLmggKFBSSU5UX09QRVJBTkQpOiBOZXcgY29kZXMgYEMnIGFuZCBgTicgZm9yIGNvbXBhcmlzb25zLgorCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogT3V0cHV0IC5sb2MtLU1JUFMgbGlrZXMgdGhhdC4KKwkoRVhURU5ERURfQ09GRiwgTk9fVU5ERVJTQ09SRVMsIFVTRV9DT0xMRUNUKTogRGVmaW5lLCBmb3IgY29sbGVjdC5jLgorCShDT0ZGKTogVW5kZWZpbmUsIGZvciBjb2xsZWN0LmMuCisKKwkqIGdldGF0dHJ0YWIuYzogUmVuYW1lIGRlZmluZV9hc21faW5zbiB0byBkZWZpbmVfYXNtX2F0dHJpYnV0ZXMuCisJKiBydGwuZGVmOiBMaWtld2lzZS4KKworV2VkIE9jdCAyNSAwMDo1MjoxMiAxOTg5ICBSaWNoYXJkIEtlbm5lciAgICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJ0bC5kZWY6IEFkZCBuZXcgUlRMIGNvZGVzIGZvciBpbnNuIGF0dHJpYnV0ZXMuCisJQ2hhbmdlIGxhc3Qgb3BlcmFuZCBvZiBERUZJTkVfSU5TTiBhbmQgREVGSU5FX1BFRVBIT0xFLgorCisJKiBydGxhbmFsLmMgKHJ0eF9lcXVhbF9wKTogQWRkIHN1cHBvcnQgZm9yICJWIiwgIm4iLCBhbmQgInMiIHR5cGVzLgorCisJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2VwaWxvZ3VlKTogTm8gbG9uZ2VyIG91dHB1dCBtYWNoaW5lX2luZm8KKwlzdHVmZi4KKwkocHJvY2Vzc190ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4KKwkoZ2VuX2luc24sIGdlbl9wZWVwaG9sZSk6IENhbGwgcHJvY2Vzc190ZW1wbGF0ZS4KKwkoZmF0YWwpOiBBZGQgbW9yZSBhcmdzLgorCisJKiBmaW5hbC5jOiBBbGxvdyBjYWxsZWQgY29uZmlndXJhdGlvbiBtYWNyb3MgdG8gdXNlIGF0dHJpYnV0ZSBkYXRhLgorCitXZWQgT2N0IDI1IDAwOjUyOjEyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcnRsYW5hbC5jIChydHhfZXF1YWxfcCk6IEhhbmRsZSBvcGVyYW5kIHR5cGVzIG4sIFYsIFMuCisKKwkqIG9wdGFicy5jIChmbG9hdHRhYik6IFJlY29yZCB1bnNpZ25lZC1mbG9hdCBpbnNucy4KKwkoY2FuX2Zsb2F0X3ApOiBOZXcgYXJnIFVOU0lHTkVEUC4KKwkoZXhwYW5kX2Zsb2F0KTogVXNlIHRob3NlIGluc25zIGlmIGF2YWlsYWJsZS4KKworVHVlIE9jdCAyNCAxOToyMzoxMSAxOTg5ICBSaWNoYXJkIEtlbm5lciAgICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmF0dHIuYywgZ2VuYXR0cnRhYi5jOiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5pbiAoaW5zbi1hdHRyLmgsIGluc24tYXR0cnRhYi5jKToKKwlOZXcgZmlsZXMgbWFkZSBieSB0aG9zZSB0d28uCisKKwkqIE1ha2VmaWxlLmluIChpbnNuLSouW2NoXSk6IE5hbWUgdGhlIHRlbXAgZmlsZSBgdG1wLWZvby5jJywgZXRjLiwKKwlub3QgYHRtcC1pbnNuLWZvby5jJy4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEdlbmVyYWxpemUgc2ltcGxpZmljYXRpb24gb2YKKwkoemVyb19leHRlbmQ6TSAoc3VicmVnOk4gKHplcm9fZXh0cmFjdDpNIC4uLikgMCkpIGFuZCBzaW1pbGFyLgorCitUdWUgT2N0IDI0IDE5OjIzOjExIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IERvbid0IG1vdmUgYSB2b2xhdGlsZSBhc20uCisKK01vbiBPY3QgMjMgMDE6NDU6MzQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgaW5zdGFsbCBhIHN1YnJlZyByZWxhdGluZyB0d28gbW9kZXMKKwl0aGF0IGFyZW4ndCB0aWVhYmxlLgorCisJKiBnbnVsaWIyLmMgKF9fZml4ZGZkaSk6IERlY2xhcmUgX19maXh1bnNkZmRpLgorCisJKiBjb21iaW5lLmM6IE1ha2UgdWlkX2N1aWQgYW4gaW50ICouCisJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogQWxsb2NhdGUgYXMgc3VjaC4KKwkqIGxvb3AuYzogTWFrZSB1aWRfbHVpZCBhbiBpbnQgKi4KKwkobG9vcF9vcHRpbWl6ZSk6IEFsbG9jYXRlIGFzIHN1Y2guCisKK1N1biBPY3QgMjIgMjA6MzU6NTUgMTk4OSAgUmljaGFyZCBLZW5uZXIgICAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQ2FsbCBzaW1wbGlmeV9zZXRfY2MwX2FuZCBmb3IgU0lHTl9FWFRFTkQuCisJKHN1YnN0KTogU3RhcnQgYnkgcHV0dGluZyBjb25zdGFudCBsYXN0IGluIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMKKwlhbmQgY29udmVydCBNSU5VUyBvZiBhIGNvbnN0YW50IHRvIFBMVVMuCisJUHV0IENPTlNUIGFyb3VuZCBhbnkgUExVUyB3aXRoIDIgY29uc3RhbnRzLgorCVNpbXBsaWZ5IChtaW51cyA8Zm9vPiAoYW5kIDxmb28+IChjb25zdF9pbnQgLXBvdzIpKSkuCisJSGFuZGxlICh6ZXJvX2V4dGVuZCAoYW5kIC4uLikpIHdoZW4gdGhlIGFuZCBpcyBub250cml2aWFsLgorCUNvbnZlcnQgKFhPUiAoTk9UIHgpIChOT1QgeSkpIHRvIChYT1IgeCB5KS4KKwlTaW1wbGlmeSAoYWJzIChuZWcgPGZvbz4pKS4KKwlTaW1wbGlmeSBhYnMgb2Ygc29tZXRoaW5nIGtub3duIHBvc2l0aXZlLgorCUhhbmRsZSAoemVyb19leHRlbmQgKHRydW5jYXRlLi4uKSkgdXNpbmcgZ2VuX2xvd3BhcnQuCisJRG8gaXQgZm9yIHNpZ25fZXh0ZW5kIHRvby4KKwlTaW1wbGlmeSAoWkVST19FWFRSQUNUIChBTkQgeCkgLi4uKS4KKwlTaW1wbGlmeSAoWkVST19FWFRSQUNUIChaRVJPX0VYVEVORCB6KSAuLi4pLCBldGMuCisJRXh0ZW5kICJFeHRyYWN0aW5nIGEgc2luZ2xlIGJpdCBmcm9tIHJlc3VsdCBvZiBzaGlmdCIgdG8gU0lHTl9FWFRSQUNULgorCShhc2hpZnRydCAoKnNoaWZ0IDxYPiA8YzE+KSA8YzE+KSBjYW4gYmUgKHNpZ25fZXh0ZW5kIDxYPikKKwkobHNoaWZ0cnQgKCpzaGlmdCA8WD4gPGMxPikgPGMxPikgY2FuIGJlICh6ZXJvX2V4dGVuZCAoc3VicmVnIDxYPikpCisJRG8gKGxzaGlmdCA8WD4gKHNpZ25fZXh0ZW5kIDxZPikpIG9uIG5vbi1yZWdzIHVzaW5nIGdlbl9sb3dwYXJ0LgorCUVsaW1pbmF0ZSBBTkQgaW4gKGxzaGlmdCAoYW5kIDxYPiA8QzE+KSA8QzI+KS4KKwlVc2UgZ2VuX2xvd3BhcnQgaW4gKGxzaGlmdDptMSAoemVyb19leHRlbmQ6bTIgPFg+KSA8Qz4pLgorCVVzZSBnZW5fbG93cGFydCBpbiAoYW5kIHggY29uc3QpID0+ICh6ZXJvX2V4dGVuZCAoc3VicmVnIHggMCkpLgorCShzaW1wbGlmeV9zZXRfY2MwX2FuZCk6IElnbm9yZSBvdXRlcm1vc3QgU0lHTl8gb3IgWkVST19FWFRFTkQuCisJSGFuZGxlIGNvbnN0YW50IGJpdCBudW1iZXIuCisJVHJ5IHRvIGdldCBpbnRvIFNJbW9kZSBmb3IgYml0ZmllbGQganVtcHMuCisKKwkqIHJlY29nLmMgKGFwcGx5X2NoYW5nZV9ncm91cCwgdmFsaWRhdGVfY2hhbmdlKTogTmV3IGZ1bmN0aW9ucy4KKworU2F0IE9jdCAyMSAwMDo1MTo0OSAxOTg5ICBSaWNoYXJkIEtlbm5lciAgICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogT3B0aW9uYWxseSBtYWtlIGEgImJhc2ljIGJsb2NrIgorCXRoYXQgZm9sbG93cyBicmFuY2hlcy4gIE5vdyB0YWtlcyBwcmV2aW91cyBibG9jayBhcyBhcmd1bWVudCBhbmQKKwljb21wdXRlcyB3aGljaCBicmFuY2ggdG8gZm9sbG93L2ZhbGwgdGhyb3VnaCBuZXh0LgorCShjc2VfbWFpbiwgY3NlX2Jhc2ljX2Jsb2NrKTogTWFrZSBjb21wYXRpYmxlIHdpdGggYWJvdmUuCisKKwkqIGNzZS5jIChuZXdfYmFzaWNfYmxvY2spOiBEb24ndCBhc3N1bWUgc2l6ZW9mIChydHgpID09IHNpemVvZiAoaW50KS4KKworCSogY3NlLmMgKG1ha2VfbmV3X3F0eSwgY2Fub25faGFzaCk6IEFkZCAgc2FuaXR5IGNoZWNrcy4KKworCSogY3NlLmMgKGxvb2t1cF9hc19mdW5jdGlvbik6IERvbid0IGFzc3VtZSBWT0lEbW9kZSA9PSAwLgorCisJKiBjc2UuYyAoZXhwX2VxdWl2X3ApOiBGb3IgY29tbXV0YXRpdmUgb3BlcmF0aW9ucywgY2hlY2sgYm90aCBvcmRlcnMuCisJRGV0ZWN0IHVuZXhwZWN0ZWQgb3BlcmFuZC10eXBlIGxldHRlcnMuCisJTW9kZSBpcyBzaWduaWZpY2FudCBmb3IgYWxsIGNvZGVzLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBDT05TVF9ET1VCTEUgY2FuIGFsc28gYXBwZWFyIGluIERJbW9kZS4gIFZlcmlmeQorCXRoYXQgZmxvYXRpbmctcG9pbnQgaXMgdXNlZCBiZWZvcmUgZm9sZGluZyBpdC4KKwlWZXJpZnkgdGhhdCB0aGUgaG9zdCdzIElOVCB3aWR0aCBpcyB3aWRlIGVub3VnaCB0byBkbyBmb2xkaW5nLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBUcmVhdCBlYWNoIGNvbXBvbmVudCBvZiBQQVJBTExFTCBleGFjdGx5IHRoZSBzYW1lCisJd2F5IGFzIGlmIGl0IHdlcmUgc3RhbmRpbmcgYWxvbmUuCisKKwkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBJZiBhbiBpbnNuIGV4cGxpY2l0bHkgcmVmZXJlbmNlcworCUNDMCwgdHJ5IHRvIGNvbWJpbmUgaXQgd2l0aCB0aGUgcHJldmlvdXMgaW5zbi4gIEFsc28sIGVuYWJsZQorCWNvbWJpbmluZyBhbiBpbnNuIHdpdGggdHdvIGRpZmZlcmVudCBpbnNucyB3aG9zZSByZXN1bHRzIGl0IHVzZXMuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBJZ25vcmUgVVNFIG9yIENMT0JCRVIgcGFyYWxsZWwgcGFydHMgaW4KKwlJMiBhbmQgSTEgYXMgdGhleSBhcmUgbm90IGZ1bmN0aW9uYWwuCisKK1NhdCBPY3QgMjEgMDA6NTE6NDkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXQtcHlyLmMgKGV4dGVuZF9hbmRfYnJhbmNoKTogQWxsb3cgU1VCUkVHIGxpa2UgUkVHLgorCSogcHlyLm1kIChtZW0tcmVnIGFuZCByZWctbWVtIEhJLCBRSSBwYXR0ZXJucyk6CisJRG9uJ3QgbWF0Y2ggdW5sZXNzIG9uZSBhcmcgaXMgTUVNLgorCitTYXQgT2N0IDIxIDAwOjI4OjQ4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wpOiBObyBtb3JlIG5lZWQgdG8gYXZvaWQgPjEgd2QgaW4gb25lIHJlZy4KKworCSogdHJlZS5jIChidWlsZF9pbmRleF90eXBlKTogQ29weSBwcmVjaXNpb24gZnJvbSBzaXpldHlwZS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBEb24ndCB0cnVuY2F0ZSBjb25zdGFudCBpZiBiaWdnZXIKKwl0aGFuIGhvc3Qgd29yZCBzaXplLgorCisJKiBnbnVsaWIyIChfX2Zsb2F0ZGlkZiwgX19maXh1bnNkZmRpKTogVXNlIFdPUkRfU0laRSwgbm90IEJJVFNfUEVSLi4uCisJKFdPUkRfU0laRSk6ICMgb2YgYml0cyBpbiBhIGBsb25nJyBvbiB0aGUgdGFyZ2V0LgorCisJKiBnZW5leHRyYWN0LmMgKGdlbl9wZWVwaG9sZSk6IFVzZSBzaXplb2YgKHJ0eCkgY29weWluZyBvcGVyYW5kcy4KKworCSogZm9sZC1jb25zdC5jIChmb3JjZV9maXRfdHlwZSk6IFVzZSBQT0lOVEVSX1NJWkUgZm9yIHBvaW50ZXJzLgorCisJKiBmaW5hbC5jIChlbmRfZmluYWwsIGZpbmFsX3NjYW5faW5zbik6IEluIHNpemVzIGFuZCBhbGlnbnMgb2YKKwlwcm9maWxpbmcgdmFycyBhbmQgdGJscywgdXNlIElOVF9UWVBFX1NJWkUgZm9yIHNpemUgb2YgYW4gaW50LAorCW9yIGdpdmUgbWF4IGFsaWdubWVudC4KKworCSogZXhwci5jIChkb19qdW1wKTogQ29tcGFyaW5nIGNvbnN0YW50IGFyZyB2cyAwLCB0YWtlICMgc2lnIGJpdHMKKwlmcm9tIG1vZGUgb2YgZGF0YSB0eXBlLgorCisJKiBnY2MuYzogQWRkIENDMVBMVVNfU1BFQyBsaWtlIENDMV9TUEVDLgorCSh2YWxpZGF0ZV9hbGxfc3dpdGNoZXMsIGRvX3NwZWNfMSwgcHJvY2Vzc19jb21tYW5kLCByZWFkX3NwZWNzKToKKwlIYW5kbGUgaXQuICBVc2UgJTIgdG8gdXNlIGl0LgorCShkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgJTIgdG8gY2MxcGx1cy4KKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9mcF9tb3ZlX2RvdWJsZSk6IFVzZSBsZGQgb25seSB3aGVuIHNhZmUsCisJb24gc2FtZSBjb25kaXRpb25zIHVzZWQgZm9yIHN0ZC4KKworCSogTWFrZWZpbGUuaW4gKFVTRV9BTExPQ0EpOiBOZXcgdmFyIGlzICQoQUxMT0NBKSBpZiBjb21waWxpbmcgd2l0aAorCWNjLCBudWxsIG90aGVyd2lzZS4gIFVzZSB0aGlzIHRvIHJlZmVyIHRvIGFsbG9jYS4KKworCSogTWFrZWZpbGUuaW4gKGdudWxpYik6IFRlc3QgdnJibCBIUFVYX0dBUyB0byBkZWNpZGUgd2hldGhlciB0byBydW4KKwlocHh0IGluc3RlYWQgb2YgcmFubGliLgorCShzdGFtcC1nbnVsaWIyKTogRG9uJ3QgcmFubGliIGlmIEhQVVhfR0FTLgorCSogbWFrZS1ocDlrZ2FzOiBOZXcgZmlsZSwgc2V0cyBIUFVYX0dBUy4KKworRnJpIE9jdCAyMCAxMzozMzozNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKToKKwlVc2UgbW9kZSB3aG9zZSBzaXplIGlzIFVOSVRTX1BFUl9XT1JEIGZvciBzdHJ1Y3QgaW4gcmVnLgorCShzdG9yZV9maXhlZF9iaXRfZmllbGQsIGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKToKKwlIYW5kbGUgYmlnZ2VyIGNvbnN0YW50IG1hc2tzLgorCShtYXNrX3J0eCwgbHNoaWZ0X3ZhbHVlKTogTmV3IHN1YnJvdXRpbmVzLgorCisJKiBjLXBhcnNlLnkgKGNvbWJpbmVfc3RyaW5ncyk6IFVzZSBjb3JyZWN0IHdpZHRoIG9mIGBpbnQnLgorCisJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IFdhcm4gZm9yIHZvbGF0aWxlIGV4cGxpY2l0IHJlZ2lzdGVyIHZhcnMuCisKK0ZyaSBPY3QgMjAgMDA6Mjc6MDAgMTk4OSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogU2V0IG5ldyB2YXJpYWJsZSByZWxvYWRfaW5fcHJvZ3Jlc3MKKwlhbmQgY2xlYXIgaXQgYWZ0ZXIgcmVsb2FkIGNvbXBsZXRlLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6CisJRG9uJ3QgY291bnQgZGVsZXRlZCByZWxvYWRzIHZzIG51bWJlciBvZiBzcGlsbCByZWdzLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEFyZyBvZiBIQVJEX1JFR05PX01PREVfT0sKKwl3YXMgdGhlIHBzZXVkbzsgc2hvdWxkIGJlIHRoZSByZWxvYWQgcmVnLgorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBEb24ndCBnZW5lcmF0ZSBhIG1vdmUgd2l0aCBhIFBMVVMKKwlhcyBhbiBvcGVyYW5kLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWdub3JlIHVuY29uc3RyYWluZWQgb3BlcmFuZHMKKwl3aGVuIGxvb2tpbmcgZm9yIGNvbmZsaWN0IHdpdGggYW4gZWFybHljbG9iYmVyLgorCisJKiByZWxvYWQuYyAoc3Vic3RfaW5kZXhlZF9hZGRyZXNzKToKKwlSZXBsYWNlIGFuZCBjYW5vbmljYWxpemUgbW9yZSB0aG9yb3VnaGx5LgorCShmb3JtX3N1bSk6IE5ldyBzdWJyb3V0aW5lLgorCisJKiBvdXQtaTM4Ni5jIChzaW5nbGVtb3ZlX3N0cmluZyk6IEhhbmRsZSBvcmRpbmFyeSBjb25zdGFudHMgYXMgaW5wdXQuCisKKwkqIHRtLWRlY3N0YXRuLmggKENQUF9QUkVERUZJTkVTKTogQWRkIGJzZDRfMiwgdWx0cml4LCBNSVBTRUwsIAorCWhvc3RfbWlwcywgUjMwMDAsIExBTkdVQUdFX0MsIFNZU1RZUEVfQlNELgorCSogdG0tbWlwcy5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBob3N0X21pcHMsIFIzMDAwLCBNSVBTRUIsIExBTkdVQUdFX0MuCisJKENQUF9TUEVDKTogUmVtb3ZlIHRob3NlIGZyb20gaGVyZS4KKwlEZWZpbmUgX19TWVNUWVBFXypfXyBhbHdheXMuICBEZWZpbmUgU1lTVFlQRV8qIG9ubHkgaWYgbm90IC1hbnNpLgorCU5vIENQUF9TUEVDIG5lZWRlZCBmb3IgZGVjc3RhdGlvbi4KKwlDb3JyZWN0IHR5cG9zIGluIG9wdGlvbiB0ZXN0cy4KKworCSogYy1wYXJzZS55ICh1bmFyeV9leHByKTogSGFuZGxlIEVYVEVOU0lPTiBoZXJlLCBub3QgaW4gcHJpbWFyeS4KKworVGh1IE9jdCAxOSAxODoxNjo0MCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW02OGsuaCwgdG0tYWxsaWFudC5oIChQUklOVF9PUEVSQU5EKToKKwlEb24ndCBwcmludCA6bCBmb3IgYWRkcmVzcyBpZiA6dyB3YXMgYWxyZWFkeSBwcmludGVkLgorCisJKiBBbGxvdyBlbGlkZWQgYnJhY2VzIHdpdGggdW5pb25zLgorCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBUcmVhdCB1bmlvbnMgbW9yZSBsaWtlIHJlY29yZHMuCisJKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IEhhbmRsZSB1bmlvbiB0eXBlcy4KKworCSogYy1wYXJzZS55IChwcm9ncmFtKTogUGVkYW50aWMgd2FybmluZyBmb3IgZW1wdHkgZmlsZS4KKworV2VkIE9jdCAxOCAyMjoyODoyMSAxOTg5ICBUb3JianxybiBHcmFubHVuZCAgKHRlZ2UgYXQgZWNobmF0b24uc2ljcy5zZSkKKworCSogb3V0LXB5ci5jIChleHRlbmRfY29uc3QsIGV4dGVuZF9hbmRfYnJhbmNoKTogTWFrZSBzdXJlIGFsbCBjb25zdAorCSAgYXJlIENPTlNUX0lOVC4KKworCSogb3V0LXB5ci5jIChtb3ZkaV9wb3NzaWJsZSk6IEhhbmRsZSBjb21iaW5hdGlvbiBvZiB0d28gaW1tZWRpYXRlCisJICBtb3ZlcyBjb3JyZWN0bHkuICAoUHlyYW1pZCBpbW1lZGlhdGUgbW92ZSB0byBhIERJbW9kZSBvcGVyYW5kCisJICAobW92bCkgd29yayBieSBTSUdOIGV4dGVuc2lvbiBvZiB0aGUgMzIgYml0IGltbWVkaWF0ZSBzb3VyY2UuKQorCSogSGFuZGxlIENPTlNUIHRhZ2dlZCBhZGRyZXNzZXMuCisKKwkqIG91dC1weXIuYyAoYWxyZWFkeV9zaWduX2V4dGVuZGVkKTogU2tpcCBoYXJtbGVzcyBKVU1QX0lOU04gd2hlbgorCSAgc2Nhbm5pbmcgYWZ0ZXIgZXh0ZW5zaW9uIGluc24uCisJKiBDaGVjayBmb3IgcmlnaHQgbW9kZSBvZiBleHRlbnNpb24uCisJKiBEZWxldGUgcmVkdW5kYW50IHJlZ2lzdGVyIG51bWJlciB0ZXN0LgorCisJKiBweXIubWQgKGFub255bW91cyBTSW1vZGUgdGVzdCBwYXR0ZXJuKTogUHJlZGljYXRlIG5lZWQgdG8gYWNjZXB0CisJICBhbnkgb3BlcmFuZCB0aGF0IGNhbiBiZSBnZW5lcmF0ZWQgZm9yIGNvcnJlc3BvbmRpbmcgY29tcGFyZS4gIFVzZWQKKwkgIHRvIHJlamVjdCAiZm9vKHApIGludCAqcCB7aW50IGE9MDsgcmV0dXJuICpwPT1hO30iLgorCisJKiBweXIubWQgKHNoaWZ0IHBhdHRlcm5zKTogQ29uZGl0aW9uIGJvZ3VzIGlmIG5vIGluc24gcmVhbGx5IG91dHB1dC4KKworCSogcHlyLm1kOiBGbHVzaCBvYnNvbGV0ZSBjb21tZW50IGFib3V0IGNvbnZlcnNpb24uCisKKwkqIHRtLXB5ci5oIChGVU5DVElPTl9QUk9MT0dVRSk6IERvbid0IHJlYWxseSBzZXQgdXAgYSBmcmFtZSBwb2ludGVyCisJICBpZiBpdCdzIG5ldmVyIHJlZmVyZW5jZWQuICBBbHNvLCBkb24ndCByb3VuZCB1cCBmcmFtZSBzaXplIHRvIGEKKwkgIG11bHRpcGxlIG9mIDMyLCBzaW5jZSBpbnB1dCBhcmdzIGFuZCBhbGxvY2EgbmV2ZXJ0aGVsZXNzIGJyZWFrcworCSAgc3VjaCBhbGlnbm1lbnQgYXR0ZW1wdHMuCisJKiB0bS1weXIuaCAoRlVOQ1RJT05fRVBJTE9HVUUpOiBHb29kYnllLiAgVXNlIChkZWZpbmVfaW5zbiAicmV0dXJuIgorCSAgLi4pIGluIG1kIGluc3RlYWQuCisJKiBweXIubWQgKHJldHVybik6IFVzZSAicmV0IiBvciAicmV0ZCIgZGVwZW5kaW5nIG9uIHRoZSBleGlzdGVuc2UKKwkgIG9mIGEgZnJlbWUgcG9pbnRlci4KKwkqIHRtLXB5ci5oIChFWElUX0lHTk9SRV9TVEFDSyk6IEVuc3VyZSB0aGUgc3RhY2sgcG9pbnRlciBpcworCSAgcHJlc2VydmVkIGV2ZW4gd2hlbiB0aGUgZnJhbWUgcG9pbnRlciBpcyBub3QgcmVhbGx5IHNldCB1cC4KKworCSogcHlyLm1kOiBSZWluc2VydCBtb3ZlLWFuZC10ZXN0IHBlZXAtaG9sZSBvcHRpbWl6YXRpb24uCisKKwkqIHB5ci5tZDogRmx1c2ggc2lsbHkgcGVlcC1ob2xlIG9wdGltaXphdGlvbnMgZm9yIGxvb3BzLiAgVGhleSB3ZXJlCisJICBpbnZlcnRlZCBvcHRpbWl6YXRpb25zLgorCisJKiB0bS1weXIuaCAoTk9USUNFX1VQREFURV9DQyk6IE1ha2UgaXQgaWRlbnRpZnkgdGhlIG1vc3QgaW1wb3J0YW50CisJICBjYXNlcyB3aGVuIHNldCBjb25kaXRpb25zIGNvZGVzIGNhbiBiZSB1c2VkLCB3aXRob3V0IGFuIGV4cGxpY2l0CisJICB0ZXN0LgorCitXZWQgT2N0IDE4IDEzOjAxOjI0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogU3VwcG9ydCAtRSBvbiAuaCBmaWxlLgorCisJKiB0bS1taXBzLmggKEZVTkNUSU9OX1BST0xPR1VFKTogR2V0IHJpZCBvZiBfXzBfX2djYyBtYWNyby4KKwlTdG9yZSB0aGF0IHZhbHVlIGluIGZyYW1lX3N0YWNrX2RpZmZlcmVuY2UuCisJKEZVTkNUSU9OX0VQSUxPR1VFKTogR2V0IHJpZCBvZiBfXzBfX2djYyBtYWNyby4KKwkoRklYX0ZSQU1FX1BPSU5URVJfQUREUkVTUyk6IFVzZSBmcmFtZV9zdGFja19kaWZmZXJlbmNlLgorCSogb3V0LW1pcHMuYyAoZnJhbWVfc3RhY2tfZGlmZmVyZW5jZSk6IERlZmluZSBoZXJlLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19HTlVHX18gZm9yIGcrKy4gIAorCitUdWUgT2N0IDE3IDAxOjE3OjA3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0taTg2MC5oIChIQVZFX1BSRV9JTkNSRU1FTlQpOiBVbmRlZmluZSB0aGlzLgorCisJKiBtaXBzLm1kIChtb3ZzZik6IE5ldyBhbHRlcm5hdGl2ZXMgZm9yIHIgcmVnaXN0ZXJzLgorCSogdG0tbWlwcy5oIChGVU5DVElPTl9QUk9MT0dVRSk6IEhhbmRsZSBiaWcgc3RhY2sgZnJhbWVzLgorCSogb3V0LW1pcHMuYyAoZnVuY3Rpb25fYXJnKTogSGFuZGxlIG1vZGUgZGlzdGluY3Rpb24gZm9yIGZsb2F0aW5nIGFyZ3MuCisKKwkqIHB5ci5tZCAobXRzdHN3IHBhdHRlcm4pOiBBY2NlcHQgZ2VuZXJhbF9vcGVyYW5kLgorCisJKiBNYWtlZmlsZS5pbiAoZ2NjKTogRm9yY2UtbW92ZSB3aGVuIGluc3RhbGxpbmcgbmV3IGdjYy4KKwkocmVhbGNsZWFuKTogRGVsZXRlIE1ha2VmaWxlLgorCisJKiBpODYwLm1kIChtb3ZzZik6IE5ldyBhbHRlcm5hdGl2ZXM6IGFsbG93IGxvYWRpbmcgciBmcm9tIEYuCisJUHJlZmVyIGYtcmVnIGFzIHJlbG9hZCB3aGVuIG1vdmluZyBtIGZyb20gRi4KKwkqIHRtLWk4NjAuaCAoUFJJTlRfT1BFUkFORCk6IEhhbmRsZSBDT05TVF9ET1VCTEUgaWYgU0Ztb2RlLgorCitTdW4gT2N0IDE1IDE0OjI3OjQ4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaTg2MC5tZCAobW92aGksIG1vdnFpKTogU3VwcG9ydCBtb3ZlcyB0by9mcm9tIGZwIHJlZ3MuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2dvdG8pOiBVU0UgYm90aCBzdGFjayBwdHIgYW5kIHN0YXRpY19jaGFpbl9ydHgKKwlqdXN0IGJlZm9yZSBqdW1waW5nLgorCisJKiBzcGFyYy5tZCAodGFibGVqdW1wIHBlZXBob2xlcyk6IEZpeCBwYXJlbiBlcnJvciB0aGF0IG5vLW9wJ2QgdGhlbS4KKworCSogdG0tc3BhcmMuaCAoKlRSQU1QT0xJTkUqKTogRGVmaW5lZCBtYWNyb3MsIGJ1dCBkZWZucyBhcmUgd3JvbmcuCisJKiBzcGFyYy5tZCAoaW5kaXJlY3RfanVtcCk6IE5ldyBwYXR0ZXJuOyBwbHVzIHBlZXBob2xlcy4KKworCSogc3BhcmMubWQgKGNzZSdkIG11bHRpcGx5KTogTmV3IHBhdHRlcm4gZm9yIG11bHQuIGJ5IC0xLgorCisJKiBvdXQtaTg2MC5jIChsb2FkX29wY29kZSwgc3RvcmVfb3Bjb2RlKTogSGFuZGxlIERJbW9kZSBhbmQgZnAgcmVnLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQWx3YXlzIHRlc3QgVFJFRV9VU0VEIGFuZCBUUkVFX0FERFJFU1NBQkxFCisJaW4gaWRlbnRpZmllciBhcyB3ZWxsIGFzIGluIGRlY2wuCisJKiBjLWRlY2wuYyAocG9wbGV2ZWwpOiBQcmVzZXJ2ZSBUUkVFX0FERFJFU1NBQkxFIGZyb20gbG9jYWwgZXh0ZXJucy4KKwkqIGMtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBEb24ndCBzZXQgYml0IGluIGlkZW50aWZpZXIgaGVyZS4KKworRnJpIE9jdCAxMyAwMDoxMjo0NiAxOTg5ICBSaWNoYXJkIEtlbm5lciAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXMpOiBObyBuZWVkIHRvIHRoaW5rIGFidCBDT05TSURFUiBvbiBmaXJzdCBwYXNzLgorCisJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IFJlbW92ZSBkdXBsaWNhdGVkIGNvZGUgdG8gdXBkYXRlIE9MRC4KKworCSogZmxvdy5jIChtYXJrX3NldF8xKTogSGFuZGxlIG5lc3RlZCBTVUJSRUcsIFNJR05fRVhUUkFDVCwKKwlTVFJJQ1RfTE9XX1BBUlQsIGV0Yy4gIEFsc28sIGFsd2F5cyBzZXQgc3VicmVnX3Agd2hlbiBzZXR0aW5nCisJYSBiaXQgZmllbGQsIGV2ZW4gaWYgbW9kZXMgYXJlIHNhbWUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDaGVjayBmb3IgfD0gb3IgJj0gb2YgdHdvIGJpdGZpZWxkcyBvZiBzaXplIDEuCisJQ29udmVydCB0byB0ZXN0IGZvbGxvd2VkIGJ5IGFzc2lnbm1lbnQuCisKKwkqIHJ0bC5kZWYgKElOTElORV9IRUFERVIpOiBDb3JyZWN0IGVycm9uZW91cyBmaWVsZCB0eXBlcy4KKworCSogcnRsLmg6IEFkZCBkZWZpbml0aW9ucyBmb3Igc2F2aW5nIGZsYWdzIGluIElOTElORV9IRUFERVIuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9pbmxpbmVfaGVhZGVyKTogQ29ycmVjdCBvdXQtb2YtZGF0ZSBhcmd1bWVudHMuCisJQWRkIHN1cHBvcnQgZm9yIHNhdmluZyBmbGFncy4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSk6IFNhdmUgZnVuY3Rpb24gZmxhZ3MuCisJVXBkYXRlIGNvbW1lbnRzLgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uLCBvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogTGV0IG1hY2hpbmUtZGVwZW5kYW50CisJY29kZSB2aWV3IChvciBwb3NzaWJseSBtb2RpZnkpIGlubGluZWQgaW5zbiwgaWYgZGVzaXJlZC4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsKTogRG9uJ3Qgc2V0IGZyYW1lX3BvaW50ZXJfbmVlZGVkIG9yCisJaW52YWxpZF9zdGFja19zbG90IGlmIGFzc2lnbmluZyB6ZXJvLXNpemVkIGFyZWEuCisKKwkqIHN0bXQuYyAoZml4dXBfdmFyX3JlZnNfMSk6IElmIHRoZSBtYWNoaW5lJ3MgU0lHTl9FWFRSQUNUIG9yCisJWkVST19FWFRSQUNUIGluc25zIGNhbid0IGFjY2VwdCBhIG1lbW9yeSBvcGVyYW5kLCBmaXggdGhlbSB1cC4KKworCSogZXhwci5jIChkb19qdW1wKTogTG9vayBpbnNpZGUgRVFfRVhQUiBvciBORV9FWFBSIGlmIG9uZSBhcmcgaXMgMC4KKwlCZSBzbWFydCBhYm91dCBQTFVTX0VYUFIsIE1JTlVTX0VYUFIsIEFCU19FWFBSLCBSRUZFUkVOQ0VfRVhQUiwKKwlORUdBVEVfRVhQUiwgcm90YXRpb24sIENPTlZFUlRfRVhQUi4KKworCSoganVtcC5jIChyZXZlcnNlX2NvbmRpdGlvbik6IE1ha2Ugbm9uLXN0YXRpYy4KKwkoc3dhcF9jb25kaXRpb24pOiBOZXcgcm91dGluZS4KKworCSogZmluYWwuYyAoYWx0ZXJfY29uZCk6IFVzZSBuZXcgc3dhcF9jb25kaXRpb24uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBJbiBjYXNlcyB3aGVyZSBhIGp1bXAgd2lsbCBiZSBnZW5lcmF0ZWQsIHVzZQorCW9yaWdpbmFsX3RhcmdldCBiZWNhdXNlIHRoZSByZWdpc3RlcnMgd29uJ3QgYmUgYWJsZSB0byBiZSBtZXJnZWQgZHVlCisJdG8gdGhlIGp1bXAuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBQdXQgY29uc3RhbnQgbGFzdCBmb3IgUExVUy4KKworRnJpIE9jdCAxMyAwMDoxMjo0NiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcyk6IEFkZCBjYXNlIGZvciBgJicuCisKKwkqIHRtLXZheC5oIChUUkFNUE9MSU5FX1RFTVBMQVRFKTogQWRkIGEgLndvcmQgMCBhdCBiZWdpbm5pbmcuCisJKFRSQU1QT0xJTkVfU0laRSk6IEluY3JlYXNlIGJ5IDIuCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IENvcHkgcmVnIG1hc2sgZnJvbSBwdXJlIGNvZGUgdG8gdHJhbXBvbGluZS4KKwlKdW1wIGludG8gdGhlIHB1cmUgY29kZSBhZnRlciB0aGUgcmVnIG1hc2suCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogVXNlIGRpdm1vZCBpbnNuIGZvciBxdW90aWVudCBpZiBubyBkaXYuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IFdpdGggc3RydWN0dXJlIHJlZyBmZXRjaGVkIGZyb20gbWVtLAorCWRvbid0IHB1dCBpbiBzdWJyZWcgaWYgbW9kZSBhbHJlYWR5IGNvcnJlY3QuCisJKHN0b3JlX2JpdF9maWVsZCk6IFR5cG86IGhhZCBleHR6diwgd2FudGVkIGluc3YuCisKKwkqIHJlY29nLmMgKGluaXRfcmVjb2cpOiBTZXQgdm9sYXRpbGVfb2sgdG8gMS4KKwkoaW5pdF9yZWNvZ19ub192b2xhdGlsZSk6IFNpbWlsYXIsIGJ1dCBzZXQgdm9sYXRpbGVfb2sgdG8gMC4KKwkocmVjb2dfbWVtb2l6ZWQpOiBEb24ndCBzZXQgdm9sYXRpbGVfb2suCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENhbGwgaW5pdF9yZWNvZy4KKwkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBDYWxsIGluaXRfcmVjb2dfbm9fdm9sYXRpbGUuCisJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUpOiBMaWtld2lzZS4KKwkqIGNzZS5jIChjc2VfbWFpbik6IExpa2V3aXNlLgorCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogQ2FsbCBpbml0X3JlY29nX25vX3ZvbGF0aWxlCisJZm9yIHRoZSBzYWtlIG9mIHByZWRpY2F0ZXMgY2FsbGVkIGZyb20gb3B0YWJzLmMuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBXYXJuIGlmIGZ1biBkZWNsYXJlZCBzdGF0aWMgYW5kIHVzZWQKKwlidXQgbmV2ZXIgZGVmaW5lZC4KKworVGh1IE9jdCAxMiAwMTo0ODozMCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFjYXJnMSk6IENvdW50IG5ld2xpbmVzIGV2ZW4gYWZ0ZXIgYmFja3NsYXNoLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCB3YXJuIGZvciBleHBsaWNpdCBleHRlcm4KKwlmb2xsb3dlZCBieSBzdGF0aWMuICBUaGF0IGNhc2UgaXMgdXNlZnVsIGZvciBpbmNvbXBsZXRlIGFycmF5cy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRGVsZXRlIHNvbWUganVuayBhYm91dCBQbW9kZSB2cyBFUG1vZGUuCisKKwkqIHRtLXNwYXJjLmggKFNFTEVDVF9SVFhfU0VDVElPTik6IFRlc3Qgd2FzIGJhY2t3YXJkcy4KKworCSogcmVsb2FkLmMgKHJlZ19jbGFzc19zdWJzZXRfcCk6IE5ldyBmdW5jdGlvbi4KKworV2VkIE9jdCAxMSAwMDozNToyNSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZheC5tZCAoaW5kaXJlY3RfanVtcCk6IE5ldyBwYXR0ZXJuLgorCisJKiBjLXBhcnNlLnkgKHByaW1hcnkpOiBUdXJuIG9mZiBwZWRhbnRpYyBhZnRlciBgX19leHRlbnNpb25fXycuCisJKGhhc2gsIGlzX3Jlc2VydmVkX3dvcmQsIGV0Yy4pOiBSZWNvZ25pemUgYF9fZXh0ZW5zaW9uX18nLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsLCBleHBhbmRfY2FsbCk6IE1ha2UgYSBTRVFVRU5DRSBmb3IKKwlhbnkgbmVlZGVkIFVTRSBpbnNucyBhbmQgcGFzcyB0aGVtIHRvIGVtaXRfY2FsbF8xLgorCShlbWl0X2NhbGxfMSk6IFBsYWNlIHRoZSBwYXNzZWQgU0VRVUVOQ0UgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZQorCWdlbmVyYXRlZCBDQUxMX0lOU04gZXZlbiBpZiBnZW5fY2FsbCBtYWRlIG1vcmUgdGhhbiBvbmUgaW5zbi4KKworCSogdG0tc2VxMzg2LmggKERCWF9ERUJVR0dJTkdfSU5GTyk6IE92ZXJyaWRlIHRoaXMuCisJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IE92ZXJyaWRlIHRoaXMuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBTdXBwbHkgbWlzc2luZyBsYXlvdXRfZGVjbCBhcmcuCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogSGFuZGxlIG5lc3RlZCBmdW5jdGlvbnMuCisKK1dlZCBPY3QgMTEgMDA6MzU6MjUgMTk4OSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jOiBVcGRhdGUganVtcF9jaGFpbiB3aGVuIGluc25zIGNoYW5nZS4KKwkoanVtcF9vcHRpbWl6ZSk6IExlYXZlIHJvb20gaW4ganVtcF9jaGFpbiBmb3Igc29tZSBleHRyYSBsYWJlbHMuCisJUmVjb3JkIGxlbmd0aCBpbiBtYXhfanVtcF9jaGFpbi4gIENoZWNrIHRoaXMgd2hlbiB1cGRhdGluZy4KKwlXaGVuIG9wdGltaXppbmcganVtcC10by1yZXR1cm4sIGRlbGV0ZSBmcm9tIG9uZSBjaGFpbiBhbmQgYWRkIHRvIG90aGVyLgorCVdoZW4gY3Jvc3MtanVtcGluZyB0dXJucyBjb25kIGp1bXAgdG8gc2ltcGxlIG9uZSwgYWRkIHRvIG5ldyBjaGFpbi4KKwlaZXJvIGp1bXBfY2hhaW4gYXQgZW5kLCBzbyByZWRpcmVjdF9qdW1wIHdvbid0IGNoYW5nZSBpdCBmdXJ0aGVyLgorCShyZWRpcmVjdF9qdW1wKTogRGVsZXRlIGZyb20gb25lIGNoYWluLCBhZGQgdG8gYW5vdGhlci4KKwkoZG9fY3Jvc3NfanVtcCk6IExpa2V3aXNlLgorCShkZWxldGVfZnJvbV9qdW1wX2NoYWluKTogTmV3IHN1YnJvdXRpbmUuCisKKwkqIGNzZS5jOiBJZiBgaWYgKHggIT0geSkgZ290byBsOycgZmFpbHMgdG8ganVtcCwgYXNzdW1lIHg9PXkuCisJKHJlZ19pbnZhbGlhdGUpOiBBZGQgbmV3IGFyZ3VtZW50IGZvciB3aGVuIHZhbHVlIGlzbid0CisJY2hhbmdpbmcsIGp1c3QgaXRzIGNsYXNzLgorCShpbnZhbGlkYXRlKTogVXBkYXRlIHJlZ19pbnZhbGlkYXRlIGNhbGwuCisJKHJlY29yZF9qdW1wX2VxdWl2KTogTmV3IGZ1bmN0aW9uLgorCShjc2VfaW5zbik6IENhbGwgaXQuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERlbGV0ZSBwcmV2aW91cyB0ZXN0IGJhc2VkIG9uCisJcHJldl9pbnNuX2V4cGxpY2l0X2NjMCBqdXN0IGFzIGJhc2VkIG9uIHByZXZfaW5zbl9jYzAuCisKK1R1ZSBPY3QgMTAgMDA6MTQ6MzUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQsIGNvbWJpbmVfcmVsb2Fkcyk6IExldCB0d28gcmVsb2FkcyBzaGFyZQorCWlmIG9uZSdzIHJlZ2NsYXNzIGlzIGEgc3Vic2V0IG9mIHRoZSBvdGhlci4KKworCSogTWFrZWZpbGUuaW46IFdoYXQgZGVwZW5kcyBpbiBleHByLmgsIGRlcGVuZHMgb24gaW5zbi1jb2Rlcy5oIGFsc28uCisKK01vbiBPY3QgIDkgMTk6MTE6MzggMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGZpbmNsdWRlKTogQ2xvc2UgZGVzY3JpcHRvciBhcyBzb29uIGFzIHRleHQgaXMgcmVhZC4KKwlFbGltaW5hdGUgYHN1Y2Nlc3MnOyByZXR1cm4gZGlyZWN0bHkgYWZ0ZXIgc3VjY2Vzc2Z1bCBwcm9jZXNzaW5nLgorCShkb19pbmNsdWRlKTogRG9uJ3QgY2xvc2UgZGVzY3JpcHRvciBoZXJlLgorCisJKiB0bS1pMzg2LmggKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IERvbid0IGRlZmluZSBgUycgbGV0dGVyLgorCUl0IHdhc24ndCB1c2VkOyBhbmQgbm93IGl0IG1lYW5zIHNvbWV0aGluZyBlbHNlLgorCisJKiB0bS1uczMyay5oIChSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBEb24ndCBkZWZpbmUgYHInIGhlcmUuCisJYHInIGlzIHN0YW5kYXJkLgorCitNb24gT2N0ICA5IDAxOjA5OjI1IDE5ODkgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IElnbm9yZSBVU0VzIGFuZCBDTE9CQkVScyB3aGVuIGZpbmRpbmcKKwlyZWR1bmRhbnQgcmVnaXN0ZXIgY29waWVzLgorCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRG8gdGhlIHNhbWUgdGhpbmcgaGVyZS4KKworCSoganVtcC5jIChtYXJrX2p1bXBfbGFiZWwpOiBMb29wIE5PVEVzIGFyZW4ndCByZWxldmFudCBhZnRlciBsb29wCisJb3B0aW1pemF0aW9uLgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9mb3JfaW5saW5lKTogQ29ycmVjdGx5IGhhbmRsZSBSVEwgdHlwZSAidSIuCisJKiBmaW5hbC5jIChvdXRwdXRfb3BlcmFuZF9sb3NzYWdlKTogTWFrZSBub24tc3RhdGljLgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBUcmVhdCBOLCBPLCBQIGxpa2UgSSwgSiwgSywgTCwgTS4KKwlGb3IgUS4uLlUsIHVzZSBFWFRSQV9DT05TVFJBSU5UUyBpZiBkZWZpbmVkLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IExpa2V3aXNlLgorCisJKiBydGwuYyAoY29weV9ydHgsIHJlYWRfcnR4LCBwcmludF9ydHgpOiBIYW5kbGUgb3BlcmFuZCB0eXBlIGBWJy4KKworCSogcnRsYW5hbC5jIChub3RlX3N0b3Jlcyk6IFVzZSB2YXJpYWJsZSBZIGluc3RlYWQgb2YgZXF1aXZhbGVudAorCXNsb3dlciBleHByZXNzaW9uLgorCisJKiBydGxhbmFsLmMgKGRlYWRfb3Jfc2V0X3ApOiBIYXJkIHJlZ3MgZG9uJ3QgYWx3YXlzIGhhdmUgc2FtZSBSVFguCisKKwkqIHJ0bGFuYWwuYyAobWF5X3RyYXBfcCk6IERvbid0IHVzZSBjb25zdDBfcnR4IGhlcmUuCisJU28gd2UgY2FuIHVzZSB0aGlzIGZpbGUgaW4gcHJvZ3JhbXMgdGhhdCBkb24ndCBoYXZlIGNvbnN0MC4KKworTW9uIE9jdCAgOSAwMTowOToyNSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIFN1cHBvcnQgbGFuZ3VhZ2Utc3BlY2lmaWMgdHJlZSBjb2Rlcy4KKwkqIHRyZWUuYyAoc3RhbmRhcmRfdHJlZV9jb2RlX3R5cGUsIHN0YW5kYXJkX3RyZWVfY29kZV9sZW5ndGgpOgorCVJlbmFtZWQgdGFibGVzLiAgdHJlZV9jb2RlX3R5cGUgYW5kIHRyZWVfY29kZV9sZW5ndGggYXJlIG5vdyBwb2ludGVycy4KKwkqIHRyZWUuYyAoaW5pdF90cmVlKTogQ29weSB0aGUgdGFibGVzIHRvIGFsbG9jYXRlZCBtZW1vcnkuCisJKiB0cmVlLmMgKHRyZWVfY29kZV9uYW1lKTogTW92ZSBoZXJlIGZyb20gcHJpbnQtdHJlZS5jCisJYW5kIGRlZmluZSBsaWtlIHRyZWVfY29kZV90eXBlLgorCisJKiBydGwuYyAocHJpbnRfcnRsKTogSGFuZGxlIDAgYXMgb3BlcmFuZC4KKworCSogZW1pdC1ydGwuYyAoc2F2ZV9lbWl0X3N0YXR1cyk6IERvbid0IGNhbGwgaW5pdF9lbWl0IGhlcmUuCisJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHQpOiBEbyBpdCBoZXJlLgorCisJKiBlbWl0LXJ0bC5jIChyZWluc3RhdGVfZW1pdF9zdGF0dXMpOiBOZXcgZnVuY3Rpb24uCisJKiBmdW5jdGlvbi5jICh0cmFtcG9saW5lX2FkZHJlc3MpOiBVc2UgdGhpcyBhcm91bmQKKwlJTklUSUFMSVpFX1RSQU1QT0xJTkUuCisKKwkqIGZ1bmN0aW9uLmMgKHRyYW1wb2xpbmVfYWRkcmVzcyk6IFVzZSBmcC0+dGFpbF9yZWN1cnNpb25fcmVlbnRyeQorCXdoZW4gdHJhbXBvbGluZSBpcyBpbiBvdXRlciBmdW5jdGlvbi4KKworCSogU2F2ZSBhbmQgcmVzdG9yZSBzdGFjayBsZXZlbHMgaW4gbm9ubG9jYWwgZ290b3MuCisJKiBmdW5jdGlvbi5jOiBOZXcgdmFyaWFibGUgbm9ubG9jYWxfZ290b19zdGFja19sZXZlbC4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCwgcHVzaF9mdW5jdGlvbl9jb250ZXh0LCBwb3BfLi4uKTogSW5pdCwgcHVzaCwgcG9wLgorCShkZWxldGVfaGFuZGxlcnMpOiBEZWxldGUgaW5zbnMgdG8gc2V0IG9yIHVzZSB0aGlzIHNsb3QuCisJKiBzdG10LmMgKGRlY2xhcmVfbm9ubG9jYWxfbGFiZWwpOiBDcmVhdGUgdGhpcyBzdGFjayBzbG90LgorCShleHBhbmRfZ290byk6IFJlc3RvcmUgc3RhY2sgcHRyIGZyb20gaXQuCisJKGV4cGFuZF9lbmRfYmluZGluZ3MsIGV4cGFuZF9kZWNsKTogV2hlbiBzZXR0aW5nIHN0YWNrIHB0ciwKKwlzdG9yZSBuZXcgdmFsdWUgaGVyZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBMaWtld2lzZSwgZm9yIGFsbG9jYS4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCisKKwkqIHZhcmFzbS5jIChtYWtlX2Z1bmN0aW9uX3J0bCk6IFJlbmFtZSBuZXN0ZWQgZnVuY3Rpb25zIGZvciBhc3NlbWJsZXIuCisJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBDbGVhciBUUkVFX1BVQkxJQyBmb3IgbmVzdGVkIGZ1bmN0aW9uLgorCisJKiB0bS1pODYwLmggKCpUUkFNUE9MSU5FKik6IERlZmluZSBtYWNyb3MuCisKKwkqIGk4NjAubWQgKG1vdmRpKTogYWNjZXB0IEYgc291cmNlIGluIDJuZCBhbHRlcm5hdGl2ZS4KKwlBY2NlcHQgRyBzb3VyY2UgaW4gM3JkLgorCShhZGRkaTMsIHN1YmRpMyk6IFR5cG8gaW4gb3Bjb2RlIG9mIG91dHB1dC4KKworCSogaTg2MC5tZCAoaW5kaXJlY3RfanVtcCk6IEFkZGVkIHBhdHRlcm4uCisKKwkqIGMtZGVjbC5jIChsb29rdXBfbGFiZWwpOiBTaGFkb3cgbGFiZWwgaWYgaXQncyB3cm9uZ2x5IGluaGVyaXRlZC4KKwlTZXQgREVDTF9DT05URVhUIGhlcmUsIHNpbmNlIG5vbmRlY2xhcmVkIGxhYmVscyBtdXN0IGJlIGxvY2FsLgorCitTdW4gT2N0ICA4IDAxOjM4OjI3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogQ29weSBzdGF0aWMgY2hhaW4gdG8gcHNldWRvCisJcmVnIGlmIGNoYWluIGlzIHVzZWQuCisKKwkqIHRtLW1pcHMuaCAoQVNNX1NQRUMpOiBQYXNzIC1ub2NwcCB0byBhcy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSWdub3JlIHZhcmlhbnQgZGlmZmVyZW5jZXMKKwl3aGVuIHByZXNlcnZpbmcgdHlwZWRlZiB0eXBlcyBmcm9tIGJlaW5nIGFsdGVyZWQuCisKKwkqIEFsbG93IGlubmVyIGxhYmVsIHNjb3BlcyBmb3IgKHsuLi59KS4KKwkqIGMtZGVjbC5jIChwdXNoX2xhYmVsX2xldmVsLCBwb3BfbGFiZWxfbGV2ZWwpOiBOZXcgZnVuY3Rpb25zLgorCSogYy1wYXJzZS55IChzdG10IGV4cHJzKTogQ2FsbCB0aGVtLgorCisJKiBjLWRlY2wuYyAobG9va3VwX2xhYmVsKTogU2V0IERFQ0wtU09VUkNFLUxJTkUgdG8gbG9jdXMgb2YgcmVmZXJlbmNlLgorCShwb3BsZXZlbCk6IFVzZSBsb2N1cyBvZiByZWZlcmVuY2UgaW4gZXJyIG1zZyBmb3IgdW5kZWYgbGFiZWwuCisJKGRlZmluZV9sYWJlbCk6IFVzZSBERUNMX0lOSVRJQUwgYXMgZmxhZyB0aGF0IGxhYmVsIGhhcyBiZWVuIGRlZmluZWQuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9lbmRfZnVuY3Rpb24pOiBEZWxldGUgbm9ubG9jYWwgZ290byBoYW5kbGVycworCWlmIG5vIG5vbmxvY2FsIGdvdG9zIGFyZSBhY3R1YWxseSByZWNlaXZlZC4KKwkoZGVsZXRlX2hhbmRsZXJzKTogTmV3IGZ1bmN0aW9uLgorCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogVHJlYXQgYmxvY2tzIGFzIHJlYWNoYWJsZQorCWlmIGhlYWRlZCBieSBsYWJlbHMgd2l0aCBMQUJFTF9QUkVTRVJWRV9QLgorCShpbnNuX2RlYWRfcCk6IERvbid0IGRlbGV0ZSBpbnNucyB0byBzZXQgdGhlIGZyYW1lIHBvaW50ZXIgb3IgYXJnIHB0ci4KKworCSogbTY4ay5tZCAoaW5kaXJlY3RfanVtcCk6IE5ldyBwYXR0ZXJuLgorCitTYXQgT2N0ICA3IDAwOjQ2OjE4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGxvb2t1cF9sYWJlbCk6IElmIGxhYmVsIGlzIG5vbmxvY2FsIGFuZCB3YXNuJ3QgZGVjbGFyZWQgc28sCisJcmVwb3J0IGVycm9yIGFuZCByZXR1cm4gMC4KKwkoc2hhZG93X2xhYmVsKTogTmV3IGZ1bmN0aW9uLgorCSogYy1wYXJzZS55IChnb3RvIHN0bXQpOiBIYW5kbGUgMCByZXR1cm5lZCBieSBsb29rdXBfbGFiZWwuCisJKGxhYmVsX2RlY2wsIGxhYmVsX2RlY2xzKTogUGFyc2UgZm9yd2FyZC1kZWNsYXJhdGlvbnMgb2YgbGFiZWxzLgorCShwdXNobGV2ZWwpOiBBbGxvdyBsYWJlbCBkZWNsYXJhdGlvbnMgYXQgc3RhcnQgb2YgY29tcG91bmQgc3RtdC4KKworCSogcnRsLmggKExBQkVMX1BSRVNFUlZFX1ApOiBOZXcgZmxhZyBpbiBDT0RFX0xBQkVMLgorCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSW5jcmVtZW50IExBQkVMX05VU0VTIGlmIHRoYXQgZmxhZyBpcyBzZXQuCisKKwkqIHN0bXQuYyAoYW55X3BlbmRpbmdfc3RhY2tfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBJZiBibG9jayBoYXMgc3RhY2sgbGV2ZWwgb3IgY2xlYW51cHMsCisJYW5kIHRoaXMgZnVuY3Rpb24gaGFzIGFueSBub25sb2NhbCBsYWJlbHMsIG1ha2UgYSBub25sb2NhbCBnb3RvIGhhbmRsZXIKKwlmb3IgdGhlIGJsb2NrLCBhbmQgcHV0IGl0IGluIGVmZmVjdCBkdXJpbmcgdGhlIGJsb2NrLgorCVNldCBMQUJFTF9QUkVTRVJWRV9QIG9uIHRoZSBoYW5kbGVyJ3MgbGFiZWwuCisJKGV4cGFuZF9nb3RvKTogRm9yIGEgbm9ubG9jYWwgbGFiZWwsIHJlc3RvcmUgaXRzIHN0YWNrIGZyYW1lCisJYW5kIGp1bXAgdG8gY3VycmVudCBoYW5kbGVyLgorCisJKiBmdW5jdGlvbi5jOiBOZXcgdmFyIG5vbmxvY2FsX2xhYmVscyBsaXN0cyBsYWJlbHMgb2sgZm9yIG5vbmxvY2FsLgorCUluaXR0ZWQgaW4gaW5pdF9mdW5jdGlvbl9zdGFydCwgcHVzaGVkIGFuZCBwb3BwZWQgd2l0aCBmY24gY29udGV4dC4KKwkqIHN0bXQuYyAoZGVjbGFyZV9ub25sb2NhbF9sYWJlbCk6IFB1dCBhIExBQkVMX0RFQ0wgb24gdGhpcyBsaXN0LgorCisJKiBvdXRwdXQuaDogRGVjbGFyZSBjdXJyZW50X2Z1bmN0aW9uX2hhc19ub25sb2NhbF9sYWJlbAorCWFuZCBzZGJfYmVnaW5fZnVuY3Rpb25fbGluZS4KKwkqIGZpbmFsLmM6IERvbid0IGRlY2xhcmUgdGhlbS4KKworCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9oYXNfbm9ubG9jYWxfbGFiZWwpOiBOZXcgdmFyLgorCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogSW5pdCBpdC4KKwkocHVzaF9mdW5jdGlvbl9jb250ZXh0LCBwb3AuLi4pOiBTYXZlIGFuZCByZXN0b3JlIGl0LgorCSogZmxhZ3MuaDogRGVjbGFyZSBjdXJyZW50X2Z1bmN0aW9uX2hhc19ub25sb2NhbF9sYWJlbC4KKwkqIHN0bXQuYyAoZXhwYW5kX2dvdG8pOiBTZXQgaXQgaWYgbm9ubG9jYWwgbGFiZWwuCisJKiBsb2NhbC1hbGxvYy5jIChjb21iaW5lX3JlZ3MpOiBEb24ndCB0aWUgY2FsbC1jcm9zc2luZyByZWcKKwl0byBhIG5vbi1jYWxsLWNyb3NzaW5nIHJlZywgaWYgcmVjZWl2ZSBub25sb2NhbCBnb3Rvcy4KKwkoYmxvY2tfYWxsb2MpOiBEb24ndCBhbGxvY2F0ZSBwc2V1ZG9zIHRoYXQgY3Jvc3MgY2FsbHMsCisJaWYgcmVjZWl2ZSBub25sb2NhbCBnb3Rvcy4KKwkqIGdsb2JhbC1hbGxvYy5jIChnbG9iYWxfYWxsb2MpOiBEb24ndCBldmVuIG1ha2UgYW4gYWxsb2NubyBmb3IKKwlhIHJlZyB0aGF0IGNyb3NzZXMgY2FsbHMsIGlmIHJlY2VpdmUgbm9ubG9jYWwgZ290b3MuCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0IGZ1bmN0aW9uX2NhbGxfY291bnQuCisJKHB1c2hfZnVuY3Rpb25fY29udGV4dCwgcG9wXy4uLik6IFNhdmUgYW5kIHJlc3RvcmUgaXQuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEluY3JlbWVudCBmdW5jdGlvbl9jYWxsX2NvdW50LgorCSogc3RtdC5jIChleHBhbmRfe3N0YXJ0LGVuZH1fYmluZGluZ3MpOiBVc2UgdGhpcyB2YXIKKwl0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgYW55IGZ1bmN0aW9uIGNhbGxzIGluIGEgYmxvY2suCisJTm8gbmVlZCBmb3IgYSBub25sb2NhbCBnb3RvIGhhbmRsZXIgaWYgYmxvY2sgaGFzIG5vIGNhbGxzLgorCisJKiBjLWRlY2wuYyAoZGVmaW5lX2xhYmVsKTogU2V0IERFQ0xfQ09OVEVYVC4KKwlNYXliZSBwdXNoIGxhYmVsIG9uIHNoYWRvd2VkX2xhYmVscy4KKwkocG9wX2NfZnVuY3Rpb25fY29udGV4dCk6IENsZWFyIG91dCBsYWJlbHMgaW4gbmFtZWRfbGFiZWxzCisJYW5kIHJlaW5zdGFsbCB0aG9zZSBpbiBzaGFkb3dlZF9sYWJlbHMuCisJUmVzdG9yZSBzaGFkb3dlZF9sYWJlbHMuCisJKHB1c2hfY19mdW5jdGlvbl9jb250ZXh0KTogUHVzaCBzaGFkb3dlZF9sYWJlbHMuCisJKHN0YXJ0X2Z1bmN0aW9uKTogQ2xlYXIgc2hhZG93ZWRfbGFiZWxzLgorCisJKiBmdW5jdGlvbi5jOiBOZXcgZmlsZSwgc3BsaXQgZnJvbSBzdG10LmMuCisKKwkqIHhtLW1pcHMuaDogVXNlIF9fYnVpbHRpbl9hbGxvY2EuCisKK0ZyaSBPY3QgIDYgMDA6MzA6NDIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBPcHRpbWl6YXRpb24gb2YKKwlgaWYgKC4uLikgeCA9IDE7IGVsc2Ugey4uLn0gIGlmICh4KSAuLi4nIGdvdCBzZW5zZSB3cm9uZyBzb21ldGltZXMuCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1nbnVsaWIyKTogZGVwZW5kIG9uIGdjYywgY2MxLCBjcHAgdmlhCisJZ251bGliMi1pbmRpcmVjdC4KKworCSogdG0tdmF4LmggKFRSQU1QT0xJTkVfU0laRSxJTklUSUFMSVpFX1RSQU1QT0xJTkUsVFJBTVBPTElORV9URU1QTEFURSk6CisJRGVmaW5lIG1hY3Jvcy4KKworCSogbTY4ay5tZCAoYWRkc2kzKTogQ2hhbmdlICEgdG8gPyBpbiBsZWEgYWx0ZXJuYXRpdmVzLgorCVB1dCB0aGVtIGJlZm9yZSB0aGUgYWRkLXRvLXJlZ2lzdGVyIGFsdGVybmF0aXZlLgorCisJKiByZWxvYWQuYyAoZmluZF9kdW1teV9yZWxvYWQpOiBVc2UgUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyBoZXJlCisJYXMgaW4gcHVzaF9yZWxvYWQsIHNvIHdlIG1ha2UgYWNjdXJhdGUgcHJlZGljdGlvbnMuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IERvbid0IHNldCBERUNMX0NPTlRFWFQgZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisJdGhhdCBpc24ndCBhIGRlZmluaXRpb24uCisKKwkqIGV4cGxvdy5jIChmaXhfbGV4aWNhbF9hZGRyKTogSGFuZGxlIGFkZHJlc3MgdGhhdCdzIGp1c3QgYSBiYXNlIHJlZy4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBWQVJfREVDTCk6IE5vIG5lZWQgZm9yIHN0YXRpYyBjaGFpbgorCWlmIHZhciBpcyBzdGF0aWMuCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IERvIGxldCB4cmVnbm8gYmUgYSBwc2V1ZG8gcmVnLAorCWJ1dCBkb24ndCBjYWxsIEhBUkRfUkVHTk9fTlJFR1MgaW4gdGhhdCBjYXNlLgorCisJKiBsb2NhbC1hbGxvYy5jIChjb21iaW5lX3JlZ3MpOiBTZXQgcmVnX3F0eVtzcmVnXSBldmVuIGlmIGl0IHdhcyA8MC4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogQ2xlYXIgbmFtZWRfbGFiZWxzLgorCitUaHUgT2N0ICA1IDAwOjMwOjM5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogRG9uJ3QgbGV0IHhyZWdubyBiZSBhIG5vbi1oYXJkIHJlZy4KKwlEb24ndCBkbyBPVkVSTEFQUElOR19SRUdOT19QIG9uIGEgcHNldWRvIHJlZyBudW1iZXIuIAorCisJKiBIYW5kbGUgYWRkcmVzc2VzIG9mIG5lc3RlZCBmdW5jdGlvbnMuCisJKiBOZXcgdG0gbWFjcm9zIFRSQU1QT0xJTkVfU0laRSwgSU5JVElBTElaRV9UUkFNUE9MSU5FLAorCUFMTE9DQVRFX1RSQU1QT0xJTkUsIFRSQU1QT0xJTkVfVEVNUExBVEUuCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFERFJfRVhQUik6IEhhbmRsZSBhZGRyZXNzZXMgb2YgbmVzdGVkIGZucy4KKwkqIHN0bXQuYyAodHJhbXBvbGluZV9hZGRyZXNzKTogTmV3IGZ1bmN0aW9uLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3RyYW1wb2xpbmVfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGkzODYubWQgKHRydW5jaGlxaTIsIGV0Yy4pOiBPdXRwdXQgJTEgd2l0aCBzaXplIG9mIGRlc3RpbmF0aW9uLgorCSogb3V0LWkzODYuYyAoUFJJTlRfUkVHKTogU3VwcG9ydCAnYicgYXMgQ09ERS4KKworCSogY29tYmluZS5jICh0cnlfZGlzdHJpYik6IE1ha2Ugc3VyZSB3ZSBkb24ndCBtb3ZlIGEgcmVnIHVzZQorCWFjcm9zcyBhIHN0b3JlIGludG8gdGhhdCByZWcuCisKKwkqIHJlbG9hZDEuYyAob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogUmF0ZSBmaXhlZCByZWdzIGF0IExBUkdFKzIsCisJYW5kIGV4cGxpY2l0bHkgdXNlZCByZWdzIGF0IExBUkdFKzEuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBTdXBwb3J0IEJJR0dFU1RfRklFTERfQUxJR05NRU5ULgorCSogdG0tdmF4LmggKEJJR0dFU1RfRklFTERfQUxJR05NRU5UKTogRGVmaW5lIGl0LgorCShCSUdHRVNUX0FMSUdOTUVOVCk6IE5vdyBhbHdheXMgMzIuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGJ1aWxkX2ludCk6IFdoZW4gbWVtb2l6aW5nLCBtYWtlIHBlcm1hbmVudCBub2Rlcy4KKworV2VkIE9jdCAgNCAxOTo0MDozNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHhtLWk4NjAuaDogTWlzc2luZyBmaWxlIGFkZGVkLgorCisJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogRG9uJ3QgaW5saW5lIGlmID4gMTAwIGJ5dGVzCisJb2Ygc3RhY2sgc3BhY2UsIHVubGVzcyBkZWNsYXJlZCBpbmxpbmUuCisKK1R1ZSBPY3QgIDMgMDA6MTY6MDggMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGFzc2lnbl9vdXRlcl9zdGFja19sb2NhbCk6IE5ldyBmdW5jdGlvbi4KKwkocHV0X3Zhcl9pbnRvX3N0YWNrKTogQWxsb2NhdGUgc3RhY2sgc2xvdCBpbiBmbiB0aGUgdmFyaWFibGUgaXMgaW4uCisKKwkqIHN0bXQuYyAocHV0X3Zhcl9pbnRvX3N0YWNrKTogSWYgdmFyaWFibGUtc2l6ZSBvYmplY3QgaXMgbm9ubG9jYWwsCisJcHV0IHRoZSBwc2V1ZG8gd2l0aCBpdHMgYWRkcmVzcyBpbnRvIHRoZSBzdGFjay4KKworCSogY2FsbHMuYzogTmV3IGZpbGUsIHNwbGl0IG91dCBmcm9tIGV4cHIuYy4KKwkoZXhwYW5kX2NhbGwpOiBQYXNzIHN0YXRpYyBjaGFpbiBpZiBmbiB3YW50cyBpdC4KKworCSogTWFrZSBwdXRfdmFyX2ludG9fc3RhY2sgaGFuZGxlIHZhcnMgb2YgY29udGFpbmluZyBmdW5jdGlvbi4KKwkqIHN0bXQuYyAocHV0X3Zhcl9pbnRvX3N0YWNrKTogRmluZCB0aGUgcnRsIGNoYWlucyBmb3IgdGhlCisJZnVuY3Rpb24gdGhhdCB0aGUgdmFyaWFibGUgYmVsb25ncyB0by4KKwkoZml4dXBfdmFyX3JlZnMpOiBOZXcgYXJncyBGSVJTVF9JTlNOLCBTVEFDSyBhbmQgUlRMX0VYUFMuCisKKwkqIE1ha2UgREVDTF9DT05URVhUIHRoZSBmdW5jdGlvbiBhIHZhciBpcyBpbiwgYW5kIHNldCBpdCByaWdodCBhd2F5LgorCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBVc2UgREVDTF9SRVNVTFQsIG5vdCBERUNMX0NPTlRFWFQsCisJYXMgdGhlIGZsYWcgZm9yIGR1cGxpY2F0ZSBuYW1lcyBvciBtaXNzaW5nIG5hbWVzLgorCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3Qgc2V0IGN1cnJlbnRfZnVuY3Rpb25fZGVjbAorCXRpbGwgYWZ0ZXIgY2FsbGluZyBwdXNoZGVjbC4KKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IFNldCBERUNMX0NPTlRFWFQgdG8gY3VycmVudF9mdW5jdGlvbl9kZWNsLgorCShwb3BsZXZlbCk6IFVzZWQgdG8gc2V0IGl0IGhlcmUsIHRvIHRoZSBMRVRfU1RNVC4gIERvbid0LgorCSogc3RtdC5jIChpbml0X2Z1bmN0aW9uX3N0YXJ0KTogVGVzdCBmb3IgYSBGVU5DVElPTl9ERUNMIGluCisJREVDTF9DT05URVhULCBub3QgZm9yIGEgTEVUX1NUTVQuCisKKwkqIGMtcGFyc2UueSAocHJpbWFyeSA8LSBpZGVudGlmaWVyKTogU2V0IFRSRUVfTk9OTE9DQUwgaWYgYXBwcm8uCisJQWxzbyBjYWxsIG1hcmtfYWRkcmVzc2FibGUuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU3RvcmUgc3RhdGljIGNoYWluIGludG8gc3RhY2sgZnJhbWUuCisJRmV0Y2ggc3RhdGljIGNoYWlucyBvZiBjb250YWluaW5nIGZ1bmN0aW9ucyBpbnRvIHBzZXVkb3MuCisJKGxvb2t1cF9zdGF0aWNfY2hhaW4pOiBNb3ZlZCBoZXJlOyBhbmQgcmVhbGx5IGRvZXMgc29tZXRoaW5nLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBub25sb2NhbCB2YXJpYWJsZS4KKwkqIGV4cGxvdy5jIChmaXhfbGV4aWNhbF9hZGRyKTogTmV3IGZ1bmN0aW9uLgorCisJKiBvdXQtaTM4Ni5jIChmcF9wb3BfaW50KTogVXNlICVMMCBpbiBmaXN0cCBpbnNuLgorCisJKiBnbG9iYWwtYWxsb2MgKGZpbmRfcmVnKTogRml4IHR5cG8gbWFya2luZyBuZXcgaGFyZCByZWcgY29uZmxpY3RzLgorCisJKiBzdG10LmMgKHB1c2hjYXNlLCBwdXNoY2FzZV9yYW5nZSwgZXhwYW5kX2VuZF9jYXNlKToKKwlXaGVuIHdhcm5pbmcgYWJvdXQgaW5zbnMgYXQgc3RhcnQgb2YgY2FzZSwgZG9uJ3QgbWluZCBOT1RFcy4KKworCSogbG9jYWwtYWxsb2MuYyAoY29tYmluZV9yZWdzKToKKwlUcmFuc2ZlciBhbGwgcHNldWRvcyBmcm9tIFNSRUcncyBvbGQgcXR5IHRvIGl0cyBuZXcgcXR5LgorCisJKiBTdXBwb3J0IG5lc3RlZCBmdW5jdGlvbnM6CisJKiBzdG10LmMgKHB1c2hfZnVuY3Rpb25fY29udGV4dCwgcG9wX2Z1bmN0aW9uX2NvbnRleHQpOiBOZXcgZnVuY3Rpb25zLgorCSogdHJlZS5jIChzYXZlX3RyZWVfc3RhdHVzLCByZXN0b3JlX3RyZWVfc3RhdHVzKTogTmV3IGZ1bmN0aW9ucy4KKwkqIHN0b3ItbGF5b3V0LmMgKHNhdmVfc3RvcmFnZV9zdGF0dXMsIHJlc3RvcmVfc3RvcmFnZV9zdGF0dXMpOiBEaXR0by4KKwkqIGV4cHIuYyAoc2F2ZV9leHByX3N0YXR1cywgcmVzdG9yZV9leHByX3N0YXR1cyk6IERpdHRvLgorCSogZW1pdC1ydGwuYyAoc2F2ZV9lbWl0X3N0YXR1cywgcmVzdG9yZV9lbWl0X3N0YXR1cyk6IERpdHRvLgorCSogYy1kZWNsLmMgKHB1c2hfY19mdW5jdGlvbl9jb250ZXh0LCBwb3BfY19mdW5jdGlvbl9jb250ZXh0KTogRGl0dG8uCisJKHN0YXJ0X2Z1bmN0aW9uLCBmaW5pc2hfZnVuY3Rpb24pOiBOZXcgYXJnIE5FU1RFRC4KKwkqIGMtcGFyc2UueSAobmVzdGVkX2Z1bmN0aW9uLCBub3R5cGVfbmVzdGVkX2Z1bmN0aW9uKTogTmV3IG5vbnRlcm1zLgorCShkZWNsKTogTmV3IGFsdGVybmF0aXZlIHRvIHVzZSB0aGVtLgorCisJKiB0cmVlLmg6IERlY2xhcmUgbGluZW5vLgorCSogYy1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IGV4cGVjdCBsaW5lbm8gYXMgYXJnLgorCSogYy1wYXJzZS55IChmbmRlY2wsICpuZXN0ZWRfZnVuY3Rpb24pOiBEb24ndCBwYXNzIGl0LgorCisJKiBleHByLmMgKGluaXRfZXhwciwgZXhwYW5kX2NhbGwpOiBEZWxldGUgbWF5X2NhbGxfYWxsb2NhLgorCSogdG0tbTg4ay5oLCB0bS1zcGFyYy5oLCB0bS1zcHVyLmg6IFVzZSBjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2FsbG9jYS4KKwkqIHRtLW1pcHMuaDogSXQgd2Fzbid0IHJlYWxseSB1c2VkOyBkZWxldGUgaXRzIGRlY2xhcmF0aW9uLgorCitNb24gT2N0ICAyIDE2OjI2OjMzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFJlamVjdCBhbnkgT0xERVFVSVYgdGhhdCBpcworCWluIHVzZSBpbiBhbnkgb3RoZXIgcmVsb2FkIG9mIHRoaXMgaW5zbi4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IERvbid0IHB1dCBvbiBub3RlcyBmb3IgY29uc3QgZnVuY3Rpb25zCisJaWYgdGhlcmUgYXJlbid0IHJlYWwgaW5zbnMgdG8gaG9sZCB0aGVtLgorCitTdW4gT2N0ICAxIDE5OjUwOjU5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBIYW5kbGUgUEFSQUxMRUwgaW4gQ0FMTF9JTlNOcworCXdoZW4gc2V0dGluZyBmb2xsb3dzX2NhbGwuCisKKwkqIG1pcHMubWQgKGNhbGxfdmFsdWUpOiBDaGFuZ2UgdG8gYSBzdHJhaWdodGZvcndhcmQgZGVmaW5lX2luc24KKwl3aXRoIGp1c3Qgb25lIGFjdGlvbi0tbm8gUEFSQUxMRUwuCisKKwkqIGk4NjAubWQgKHBmZXEsIHBmZ3QgYW5kIHBmbGUgcGF0dGVybnMpOiBBZGQgZjAgYXMgM3JkIGFyZy4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSk6IERvbid0IGRlbGV0ZSBOT1RFX0lOU05fRlVOQ1RJT05fRU5ELgorCisJKiBjLXBhcnNlLnkgKHNpbXBsZV9pZik6IFJldHVybiAkJCBhcyB2YWx1ZSBvZiBzdG10X2NvdW50LgorCShzdG10IChpZiBzdGF0ZW1lbnQpKTogV2FybiBpZiAkJCB3YXMgbm90IGluY3JlbWVudGVkIGluIHRoZSBib2R5LgorCShzdG10IChlbHNlIHN0YXRlbWVudCkpOiBMaWtld2lzZS4KKwkoc3RtdCk6IEFsbCBhbHRlcm5hdGl2ZXMgZXhjZXB0IG51bGwgc3RhdGVtZW50IGluY3JlbWVudCBzdG10X2NvdW50LgorCitGcmkgU2VwIDI5IDA4OjU2OjMwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVnY2xhc3MuYyAocmVnX2NsYXNzX3JlY29yZCk6IElmIG1vdmUgYmV0d2VlbiBDTEFTUyBhbmQgR0VORVJBTF9SRUdTCisJaXMgY29zdGx5LCBjaGFyZ2UgdGhhdCBjb3N0IHRvIEdFTkVSQUxfUkVHUyBhbmQgaXRzIHN1YmNsYXNzZXMuCisJKiB0bS1hbGxpYW50LmgsIHRtLW02OGsuaCAoUkVHSVNURVJfTU9WRV9DT1NUKTogTmV3IG1hY3JvLgorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFdoZW4gYSByZWcgaXMgYSBwYXJtIGVxdWl2IHRvIGEgc3RhY2sgc2xvdCwKKwlkZWNyZWFzZSBpdHMgbWVtY29zdCwgc2luY2UgdGhlIGluc24gdG8gbG9hZCBpdCB3b3VsZCBnbyBhd2F5LgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZmluZF9yZWcpOiBSZXdyaXRlIHR3by1wYXNzIGhhcmQgcmVnIHByZWZlcmVuY2UgY29kZS4KKwlVc2VzIHJlZ3NfdXNlZF9zb19mYXIgdG8gYXZvaWQgYWxsb2NhdGluZyBhIHJlZyBub3QgdXNlZCBlbHNld2hlcmUKKwlpbiB0aGUgZmlyc3QgcGFzcy4gIEFsc28gdXBkYXRlcyByZWdzX3VzZWRfc29fZmFyLgorCShnbG9iYWxfYWxsb2MpOiBJbml0aWFsaXplIHJlZ3NfdXNlZF9zb19mYXIuCisKKwkqIHRtLW5leHQuaCAoTElOS19TUEVDKTogVHlwbyBmb3IgLVogb3B0aW9uLiAgRG9uJ3QgcGFzcyAtTSBvcHRpb24KKwl0byBsZCwgc2luY2UgdGhhdCBpcyBmb3IgY3BwLgorCisJKiBTdXBwb3J0IC1NRCBhbmQgLU1NRCBvcHRpb25zLgorCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyB0aGVtIHRvIGNwcCBpbiBzcGVjaWFsIHdheS4KKwlEb24ndCBpbmhpYml0IGNvbXBpbGF0aW9uIGZvciB0aGVtLCBvbmx5IGZvciAtTSBhbmQgLU1NLgorCSogY2NjcC5jIChtYWluKTogSGFuZGxlIHRoZW0gbGlrZSAtTSBhbmQgLU1NIGV4Y2VwdCB0YWtlIGFyZworCXdoaWNoIGlzIGZpbGUgbmFtZSB0byB3cml0ZSBkZXBzIGluLgorCisJKiB0b3BsZXYuYzogI2lmIDAgYXJvdW5kIGV2ZXJ5dGhpbmcgZm9yIEdEQl9ERUJVRy4KKwkqIHN5bW91dC5jOiBGaWxlIHJlbW92ZWQgZnJvbSBkaXN0cmlidXRpb24uCisJKiBNYWtlZmlsZS5pbjogRG9uJ3QgdHJ5IHRvIGNvbXBpbGUgb3IgbGluayBpdC4KKworCSogdG0taHA5azMyMC5oIChBU01fRklMRV9TVEFSVCk6IE91dHB1dCBhIGB2ZXJzaW9uJyBwc2V1ZG8tb3AuCisJWyEgSFBVWF9BU01dIChBU01fU1BFQyk6IERvbid0IHVzZSB0aGUgLVYgb3B0aW9uLiAgUmVjb2duaXplIC1tYzY4MDAwLgorCShDQUxMX1VTRURfUkVHSVNURVJTKTogUmVkZWZpbml0aW9uIGRlbGV0ZWQuICBIUFVYIDYuNSBkb2Vzbid0IG5lZWQgaXQuCisJKiB0bS1ocDlrMzEwLmgsIHRtLWhwOWszMTBnLmg6IE5ldyBmaWxlcy4KKworVGh1IFNlcCAyOCAxMjo1NzoxMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAocHVzaGNhc2UsIHB1c2hjYXNlX3JhbmdlKTogV2FybiBpZiBjb2RlIHdhcyBlbWl0dGVkIGluc2lkZQorCWNhc2Ugc3RtdCBiZWZvcmUgMXN0IGxhYmVsIGlzIHNlZW4uCisJKGV4cGFuZF9zdGFydF9jYXNlKTogTmV3IGFyZyBpcyBzdHJpbmcgdG8gdXNlIGluIHRoYXQgd2FybmluZy4KKwkoc3RydWN0IG5lc3RpbmcpOiBOZXcgZmllbGRzIHByaW50bmFtZSBhbmQgc2VlbmxhYmVsLgorCSogYy10eXBlY2suYyAoY19leHBhbmRfc3RhcnRfY2FzZSk6IFBhc3MgbmV3IGFyZyB0byBleHBhbmRfc3RhcnRfY2FzZS4KKworCSogZ2NjLmM6IENhbiBub3cgcmVhZCBjb21waWxhdGlvbiBzcGVjcywgYW5kIGFzbV9zcGVjIChldGMpLCBmcm9tIGZpbGUuCisJKGNwcF9zcGVjLCBhc21fc3BlYywgZXRjLik6IE5ldyB2YXJpYWJsZXMsIGluaXR0ZWQgdG8gY29ycmVzcC4gbWFjcm9zLgorCShkb19zcGVjXzEsIHZhbGlkYXRlX2FsbF9zd2l0Y2hlcyk6IFVzZSB0aGUgdmFyaWFibGVzLCBub3QgdGhlIG1hY3Jvcy4KKwkobGlua19jb21tYW5kX3NwZWMpOiBOZXcgbmFtZSBmb3Igb2xkIGxpbmtfc3BlYy4KKwkoY29tcGlsZXJzLCBuX2NvbXBpbGVycyk6IE5vdyBhIHBvaW50ZXIsIHdpdGggc2l6ZSBvZiB2ZWN0b3IgcHRkIHRvLgorCShkZWZhdWx0X2NvbXBpbGVycyk6IE5ldyBuYW1lIGZvciBvbGQgYGNvbXBpbGVycycgdmVjdG9yLgorCShyZWFkX3NwZWNzKTogR2l2ZW4gZmlsZSBuYW1lLCByZWFkIHNwZWNzIGFuZCBhZGQgdG8gYGNvbXBpbGVycycuCisJQWxzbyBzZXQgY3BwX3NwZWMsIGFzbV9zcGVjLCBldGMuCisJKHNraXBfd2hpdGVzcGFjZSk6IE5ldyBzdWJyb3V0aW5lLgorCShtYWluKTogSW5pdGlhbGl6ZSBgY29tcGlsZXJzJyBmcm9tIGBkZWZhdWx0X2NvbXBpbGVycycuCisJRmluZCBhIHNwZWNzIGZpbGUgYW5kIGNhbGwgcmVhZF9zcGVjcy4KKwlTZWFyY2ggdGhydSBgY29tcGlsZXJzJyBmcm9tIGJhY2sgdG8gZnJvbnQuCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFVzZSBnY2MgLWR1bXBzcGVjcyB0byB3cml0ZSBhIHNwZWNzIGZpbGUuCisKKwkqIFN1cHBvcnQgbXVsdGlwbGUgaW5zdGFsbGVkIGNvbXBpbGVyczsgZmluZCB0aGVtIGJ5CisJdGFyZ2V0IG1hY2hpbmUgYW5kIHZlcnNpb24uCisJKFNUQU5EQVJEX0VYRUNfUFJFRklYKTogQ2hhbmdlIHRvIGAuLi4vZ2NjLycuCisJKHN0YW5kYXJkX2V4ZWNfcHJlZml4XzEpOiBDaGFuZ2UgdG8gYC4uLi9nY2MvJy4KKwkocHJvY2Vzc19jb21tYW5kKTogT3B0aW9ucyAtYiBhbmQgLVYgc2V0IHNwZWNfbWFjaGluZSwgc3BlY192ZXJzaW9uLgorCU9wdGlvbiAtZHVtcHNwZWNzIHdyaXRlcyBzcGVjcyBmaWxlIHRvIGRlZmluZSBjcHBfc3BlYywgYXNtX3NwZWMsIGV0Yy4KKwlPcHRpb24gLWR1bXB2ZXJzaW9uIHdyaXRlcyB2ZXJzaW9uIG51bWJlci4KKwkobWFpbik6IFNldCBtYWNoaW5lX3N1ZmZpeCBmcm9tIHNwZWNfbWFjaGluZSBhbmQgc3BlY192ZXJzaW9uLgorCSogTWFrZWZpbGUuaW4gKGxpYnN1YmRpcik6IE5ldyB2YXJpYWJsZSwgbWFkZSBmcm9tIGxpYmRpci4KKwkoZ2NjLm8pOiBEZWZpbmUgREVGQVVMVF9UQVJHRVRfTUFDSElORSBtYWNybyBpbiBjb21waWxhdGlvbi4KKwlDaGFuZ2UgdmFsdWUgb2YgU1RBTkRBUkRfRVhFQ19QUkVGSVggYXMgYWJvdmUuCisJKGNjY3Aubyk6IFVzZSBsaWJzdWJkaXIuCisJKGluc3RhbGwpOiBJbnN0YWxsIGZpbGVzIHVuZGVyICQobGlic3ViZGlyKSwgYWZ0ZXIgbWFraW5nIHRoYXQgZGlyLgorCisJKiByZWxvYWQuYyAoZGVjb21wb3NlKTogSGFuZGxlIGNhc2Ugb2YgcHNldWRvIHdpdGggbm8gaGFyZCByZWcuCisKK1dlZCBTZXAgMjcgMDE6MjA6MzYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnbG9iYWwtYWxsb2MuYzogI2lmIDAgaGFuZGxpbmcgb2YgUkVHX05PX0NPTkZMSUNUIG5vdGVzLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBJbXBsZW1lbnQgY2FzdCB0byB1bmlvbiB0eXBlLgorCisJKiBFZGl0IHRoZSBtYWtlZmlsZSBhdXRvbWF0aWNhbGx5IHdoZW4gbmVjZXNzYXJ5LgorCSogY29uZmlnLmdjYzogUHJvZHVjZSBNYWtlZmlsZSBieSBlZGl0aW5nIE1ha2VmaWxlLmluIHdpdGggc2VkLgorCSogTWFrZWZpbGUuaW46IE5ldyBuYW1lIGZvciBmaWxlIGBNYWtlZmlsZScuCisJQ29tbWVudHMgb24gZWRpdGluZyB0aGUgZmlsZSBkZWxldGVkLgorCSogY29uZmlnL21ha2UtKjogVmFyaW91cyBmaWxlcyBhcmUgaW5zZXJ0ZWQgYnkgc2VkIGludG8gTWFrZWZpbGUuCisKKwkqIFByb3ZpZGUgYSB3YXkgZm9yIGxhbmd1YWdlcyB0byBjb250cm9sIHByaW50aW5nIG9mIGZ1bmN0aW9uIG5hbWVzLgorCSogdG9wbGV2LmMgKGVycm9yLCBmYXRhbCwgYW5ub3VuY2VfZnVuY3Rpb24sIGV0Yy4pOgorCVVzZSB2YWx1ZSBvZiBkZWNsX3ByaW50YWJsZV9uYW1lIHRvIGNvbXB1dGUgd2hhdCBuYW1lIHRvIHByaW50LgorCSogc3RtdC5jIChpbml0X2Z1bmN0aW9uX3N0YXJ0KTogTGlrZXdpc2UuCisJKiB0b3BsZXYuYyAobWFpbik6IEluaXQgdGhhdCB2YXJpYWJsZS4KKwkoZGVjbF9uYW1lKTogTmV3IGZ1bmN0aW9uLCB1c2VkIGJ5IGRlZmF1bHQuCisKKwkqIGV4cGxvdy5jIChyb3VuZF9wdXNoKTogRml4IHR5cG86IHJldHVybiBmYXN0IGlmIEFMSUdOIGlzIDEuCisKKwkqIGZsb3cuYyAoZHVtcF9mbG93X2luZm8pOiBEZWxldGUgZXhjZXNzIGFyZyB0byBmcHJpbnRmLgorCSogZ2NjLmMgKGZhdGFsKTogRGVsZXRlIGV4Y2VzcyBhcmcgdG8gZGVsZXRlX3RlbXBfZmlsZXMuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogSGFuZGxlIGFic2VuY2Ugb2YgaW50ZWdlciB0cnVuY2F0ZSBpbnNucworCWJ5IGNvcHlpbmcgdmFsdWUgdG8gYSByZWcgKGFuZCB0aGVuIHVzaW5nIHN1YnJlZykuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogRG8gbGVhZi1mdW5jdGlvbiByZWdpc3RlciByZW51bWJlcmluZworCWlmIHRoYXQgaXMgZGVmaW5lZCBmb3IgdGhpcyBtYWNoaW5lLgorCShsZWFmX3JlbnVtYmVyX3JlZ3MsIG9ubHlfbGVhZl9yZWdzX3VzZWQsIGxlYWZfZnVuY3Rpb25fcCk6IE5ldyBmbnMuCisKKwkqIHZhcmFzbS5jIChpbl90ZXh0X3NlY3Rpb24pOiBOZXcgZnVuY3Rpb24uCisJKiB0bS0zYjEuaCAoQVNNX09VVFBVVF9TS0lQKTogVXNlIHRoYXQuCisKKwkqIHN0bXQuYyAoY2FzZV9pbmRleF9leHByX3R5cGUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGMtcGFyc2UueSAobWF5YmVfYXR0cmlidXRlKTogRG9uJ3QgZmFpbCB0byByZXR1cm4gYSB2YWx1ZS4KKworVHVlIFNlcCAyNiAwMjo0MDoyMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIERvIGF1dG8taW5jcmVtZW50cyBmb3IgaGFyZCByZWdzLgorCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IERvIHNldCByZWdfbmV4dF91c2UgZm9yIGhhcmQgcmVncy4KKwlXaGVuIG1ha2luZyBhbiBhdXRvLWluY3JlbWVudCBmb3IgYSBoYXJkIHJlZywgZG9uJ3QgbWVzcyB3aXRoCisJcmVnX25fcmVmcyBvciByZWdfbl9zZXRzLgorCSh0cnlfcHJlX2luY3JlbWVudF8xKTogTGlrZXdpc2UuCisKKwkqIGdjYy5jIChjb21waWxlcnMpOiAtdW5kZWYgaW5oaWJpdHMgcHJlZGVmaW5lZCBzeW1ib2xzLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogSW4gY2FzZSBFUSwgcHJlZmVyIFpFUk9fRVhUUkFDVCwgbm90IFNJR05fRVhUUkFDVC4KKwkqIHZheC5tZCAoamJzLCBqYmMgcGF0dGVybnMpOiBXcml0ZSB3aXRoIFpFUk9fRVhUUkFDVC4KKwkqIG04OGsubWQ6IExpa2V3aXNlLgorCisJKiBNZXJnZSBDKysgY2hhbmdlcyBpbiBzdG10LmM6CisJKiBTZXQgdXAgYW4gb2JzdGFjaywgc3RtdF9vYnN0YWNrLgorCShBTExPQ19ORVNUSU5HKTogQWxsb2NhdGUgYSBgc3RydWN0IG5lc3RpbmcnIG9uIHRoYXQuICBDYWxsZXJzIGNoYW5nZWQuCisJKFBPUFNUQUNLKTogVXNlIHRoZSBvYnN0YWNrLgorCShpbml0X3N0bXQpOiBOZXcgZm46IGluaXQgdGhlIG9ic3RhY2suCisJKGFueV9wZW5kaW5nX2NsZWFudXApOiBOZXcgZm4uCisJKGV4cGFuZF9zdGFydF9iaW5kaW5ncyk6IExlYXZlIG91dGVyX2NsZWFudXBzIDAgaWYgbm90aGluZyBpbiBpdC4KKwkoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IFByZXNlcnZlIHNvbWUgZ2xvYmFsIHZhcnMgYXJvdW5kIGNsZWFudXBzLgorCUFmdGVyIGNsZWFudXBzLCBpZiBubyBzdGFjayBsZXZlbCB0byByZXN0b3JlLCBkbyBwZW5kaW5nIHBvcHMuCisJKGZpeHVwX2NsZWFudXBzKTogRG8gcGVuZGluZyBwb3BzIGFmdGVyIHRoZSBjbGVhbnVwcy4KKwkoZXhwYW5kX3N0YXJ0X2Nhc2UpOiBEb24ndCBvdXRwdXQgYSBOT1RFIGlmIGFscmVhZHkgaGF2ZSBvbmUuCisJKGFzc2lnbl9wYXJtcyk6IFNwZWVkIHVwIHNpemV0cmVlIGNvbXB1dGF0aW9ucyBpbiBjb21tb24gY2FzZS4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IFVzZSBsYW5nX3ByaW50YWJsZV9uYW1lIGZvciBjdXJyZW50X2Z1bmN0aW9uX25hbWUuCisJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBEb24ndCBzZXQgUkVHX0ZVTkNUSU9OX1ZBTFVFX1AKKwlmb3IgYSBwc2V1ZG8gcmVnIHVzZWQgdG8gY29weSBpbnRvIHRoZSByZWFsIHJldHVybi4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGluaXRfc3RtdC4KKworCSogYy10eXBlY2suYyAoY29tbW9udHlwZSk6IElmIG9uZSBhcmcgaXMgZXJyb3JfbWFya19ub2RlLCByZXR1cm4gb3RoZXIuCisKK01vbiBTZXAgMjUgMTI6MTM6MDcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogSGFuZGxlIGJvb2xlYW4gb3BzIG9uID5TSW1vZGUgd2l0aAorCXNldmVyYWwgb25lLXdvcmQgaW5zbnMuICBQdXQgb3V0IFJFR19FUVVBTCBhbmQgUkVHX05PX0NPTkZMSUNUIG5vdGVzLgorCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9jb25mbGljdHMpOiBGb3IgZWFjaCBpbnNuLCByZWNvcmQKKwlpbiBub19jb25mbGljdF9wYWlycyBhbGwgdGhlIFJFR19OT19DT05GTElDVCBub3RlcyBvZiB0aGUgaW5zbi4KKwkocmVjb3JkX29uZV9jb25mbGljdCk6IERvbid0IG1hcmsgYSBjb25mbGljdCBiZXR3ZWVuIHN1Y2ggYSBwYWlyLgorCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBEbyBjb21iaW5lX3JlZ3Mgb24gdGhlIHNlcXVlbmNlcworCW1hZGUgYnkgZXhwYW5kX2Jpbm9wIGZvciBtdWx0aS13b3JkIGJvb2xlYW4gb3BzLgorCShjb21iaW5lX3JlZ3MpOiBOZXcgYXJnIEFMUkVBRFlfREVBRCBpcyAxIGlmIFVSRUcgZGllZCBwcmlvciB0byBJTlNOLgorCShub19jb25mbGljdF9wKTogTmV3IHN1YnJvdXRpbmUuCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogTW92ZSBSRUdfTk9fQ09ORkxJQ1Qgbm90ZXMgbGlrZSBSRUdfSU5DLgorCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogRG9uJ3QgZGVsZXRlIG5vLW9wIG1vdmVzCisJaWYgdGhleSBjYXJyeSBSRUdfRVFVQUwgbm90ZXMuICBUaGVzZSBpbnNucyBhcmUgbmVlZGVkIGxhdGVyLgorCSogcmVsb2FkLmMgKGZpbmRfZHVtbXlfcmVsb2FkKTogVXNlIGFjdHVhbCBvcGVyYW5kcyAod2hpY2ggbWF5IGJlCisJc3VicmVncykgZm9yIG1vc3QgcHVycG9zZXMsIGluY2x1ZGluZyBjaGVja2luZyBmb3Igb3ZlcmxhcC4KKwkoaGFyZF9yZWdfc2V0X2hlcmVfcCk6IEhhbmRsZSBhIHJhbmdlIG9mIHJlZ25vcywgbm90IGp1c3Qgb25lLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBVc2Ugc3BlY2lhbCB0ZWNobmlxdWVzIHRvIG1vdmUgcmVncworCXVzZWQgZm9yIHplcm8tZXh0ZW5zaW9uLiAgRG9uJ3QgY29tYmluZSBtYXRjaGluZyByZWdzOyBpbnN0ZWFkLAorCWp1c3QgcmVjb3JkIHRoZW0gaW4gcGFpcnMgaW4gcmVnc19tYXlfc2hhcmUuCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2FsbG9jKTogRGlnZXN0IHJlZ3NfbWF5X3NoYXJlIGludG8gYQorCXZlY3RvciwgcmVnX21heV9zaGFyZS4gIFRoZW4gYXNzaWduIG1hdGNoaW5nIHJlZ3MgdGhlIHNhbWUgYWxsb2Nuby4KKwkoZ2xvYmFsX2FsbG9jKTogSW5pdGlhbGl6ZSBhbGxvY25vX25fcmVmcywgYWxsb2Nub19saXZlX2xlbmd0aCwKKwlhbGxvY25vX2NhbGxzX2Nyb3NzZWQuCisJKGFsbG9jbm9fY29tcGFyZSk6IFVzZSB0aG9zZSBuZXcgdmVjdG9yczsgZG9uJ3QgdXNlIGFsbG9jbm9fcmVnLgorCShmaW5kX3JlZyk6IFVzZSB0aG9zZSBuZXcgdmVjdG9ycy4KKwlBc3NpZ24gaGFyZCByZWcgdG8gYWxsIHRoZSBwc2V1ZG9zIHRoYXQgc2hhcmUgdGhlIGFsbG9jbm8uCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFR3byBuZXcgY2FzZXMgc2ltcGxpZnkganVtcGluZyB0byBvcgorCWZhbGxpbmcgaW50byBhIHRlc3QtYW5kLWJyYW5jaCBhZnRlciBzZXR0aW5nIHRoZSByZWdpc3RlciBiZWluZyB0ZXN0ZWQuCisJKiBqdW1wLmMgKGdldF9sYWJlbF9iZWZvcmUsIGdldF9sYWJlbF9hZnRlcik6IE5ldyBmdW5jdGlvbnMuCisJKGRvX2Nyb3NzX2p1bXApOiBVc2UgZ2V0X2xhYmVsX2JlZm9yZS4KKworU3VuIFNlcCAyNCAwMDoyMToyNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYjIuYyAoX19maXh1bnNkZnNpKTogRGVmaW5lZCBoZXJlLCBub3QgaW4gZ251bGliLmMuCisJKiBNYWtlZmlsZSAoTElCRlVOQ1MsIExJQjJGVU5DUyk6IENvcnJlc3BvbmRpbmcgY2hhbmdlLgorCisJKiB0bS1pODYwLmggKFNEQl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZSB0aGlzLCBub3QgU0RCXy4uLgorCisJKiBnY2MuYyAobGlua19zcGVjKTogRG9uJ3Qgc3BlY2lmeSAtbGcuCisJKiB0bS1hbGxpYW50LmgsIHRtLWNvbnZleC5oLCB0bS1ocDlrM2JzZC5oLCB0bS1pc2k2OC5oLCB0bS1uZXdzLmgKKwkqIHRtLXB5ci5oLCB0bS1zZXEzODYuaCwgdG0tc2VxdWVudC5oLCB0bS1zcGFyYy5oLCB0bS1zcHVyLmgKKwkqIHRtLXN1bjIuaCwgdG0tc3VuMy5oLCB0bS1zdW4zODZpLmgsIHRtLXRhaG9lLmgsIHRtLXZheC5oOgorCU1ha2UgTElCX1NQRUMgbGluayB3aXRoIC1sZy4KKwkqIHRtLWhhcnJpcy5oLCB0bS12YXh2LmgsIHRtLXZtcy5oOiBUdXJuIG9mZiBpbmhlcml0ZWQgTElCX1NQRUMuCisKKwkqIHJlY29nLmggKGluc25fKik6IERlY2xhcmUgdGhlc2UgdGFibGVzIGBjb25zdCcuCisJKGNvbnN0KTogRGVmaW5lIHRoaXMgYXMgbm90aGluZywgaWYgbm90IF9fU1REQ19fLgorCSogZXhwci5oIChpbnNuX2dlbl9mdW5jdGlvbik6IERlY2xhcmUgYGNvbnN0Jy4KKwkoY29uc3QpOiBEZWZpbmUgdGhpcyBhcyBub3RoaW5nLCBpZiBub3QgX19TVERDX18uCisJKiBnZW5vdXRwdXQuYyAobWFpbik6IEluIGluc24tb3V0cHV0LmMsIGRvbid0IGRlZmluZSBgY29uc3QnIGlmCisJYWxyZWFkeSBkZWZpbmVkLgorCisJKiByZWNvZy5jIChvZmZzZXR0YWJsZV9ub25zdHJpY3RfbWVtcmVmX3ApOiBOZXcgZnVuY3Rpb24uCisJKiBzdG10LmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBVc2UgdGhhdCwgbm90IG9mZnNldHRhYmxlX21lbXJlZl9wLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IExpa2V3aXNlLgorCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lKTogU2V0IGluX25vbnBhcm1faW5zbnMgd2hlbiBhcnJpdmUKKwlhdCB0aGUgZmlyc3Qgbm9ucGFybSBpbnNuLgorCShjb3B5X2Zvcl9pbmxpbmUpOiBTZXQgVFJFRV9SRUFET05MWSBvbmx5IGlmIGluX25vbnBhcm1faW5zbnMuCisKKwkqIE1ha2VmaWxlIChmbG9hdC5oKTogTWFrZSBoYXJkLXBhcmFtcyBhbiBvcmRpbmFyeSBkZXBlbmRlbmN5LgorCisJKiBjLWRlY2wuYyAocG9wbGV2ZWwpOiBXaGVuIHBvcHBpbmcgYSBsb2NhbCBleHRlcm4gZGVjbCwKKwlzYXZlIHRoZSBUUkVFX1VTRUQgYml0IGluIHRoZSBpZGVudGlmaWVyLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENoZWNrIHRoYXQsIHByaW50aW5nICJub3QgdXNlZCIgd2FybmluZ3MuCisKKwkqIGMtcGFyc2UueSAoaW5pdF9sZXgpOiBEaXNjYXJkIHVuZGVzaXJlZCByZXNlcnZlZCB3b3JkcyBmcm9tIHRhYmxlLgorCSh5eWxleCk6IE5vIG5lZWQgdG8gY2hlY2sgZm9yIHRoZW0gYXQgbG9va3VwIHRpbWUuCisKKwkqIHRyZWUuYyAobWFrZV9ub2RlKTogQWx3YXlzIHB1dCBQQVJNX0RFQ0wgaW4gc2F2ZWFibGVfb2JzdGFjay4KKworCSogdG9wbGV2LmMgKGZsb29yX2xvZzIsIGV4YWN0X2xvZzIpOiBSZXdyaXR0ZW4gZm9yIHNwZWVkLgorCisJKiB0cmVlLmMgKGxpc3RpZnkpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBOZXcgYXJncyBmb3IgZnVuY3Rpb24gYmVpbmcKKwljYWxsZWQgYW5kIGFyZ3VtZW50IG51bWJlci4gIFVzZWQgaW4gZXJyb3IgbWVzc2FnZXMuCisJKGFjdHVhbHBhcmFtZXRlcmxpc3QpOiBQYXNzIHRob3NlIGFyZ3MgdXNlZnVsbHkuCisJKHdybl9mb3JfYXNzaWdubWVudCk6IE5ldyBmdW5jdGlvbi4KKworCSogbG9vcC5jIChnZW5lcmFsX2luZHVjdGlvbl92YXIpOiBIYW5kbGUgZ2l2ZSBjb3BpZWQgZnJvbSBhIGJpdi4KKworCSogaTM4Ni5tZCAoZGl2KmkzLCB1ZGl2KmkzKTogTmV3IHBhdHRlcm5zLgorCShkaXZtb2RoaTQsIHVkaXZtb2RoaTQpOiBOZXcgcGF0dGVybnMuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOgorCVNpbXBsaWZ5IChzaWduX2V4dGVuZDpNIChzdWJyZWc6TiAobHNoaWZ0cnQ6TSBSRUcgQ09OU1QpIDApKQorCXdoZW4gUkVHIHdhcyBhc3NpZ25lZCBmcm9tICh6ZXJvX2V4dGVuZDpNIChhbnk6TiAuLi4pKS4KKwlNYWtlIHRoZSBzaW1pbGFyICh6ZXJvX2V4dGVuZDpNIC4uLikgY2FzZSBzaGFyZSBjb2RlLgorCisJKiBleHByLmMgKHN0b3JlX2ZpZWxkKTogQSBmcmFtZS1wb2ludGVyLXJlbGF0aXZlIGFkZHJlc3MgaXMgc3RhYmxlLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRWZmZWN0aXZlbHkgcGFzcyBvbiBJR05PUkUgZm9yIDJuZCBvcCBvZiBjb21tYS4KKworU3VuIFNlcCAyNCAwMDoyMToyNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMS4zNiByZWxlYXNlZC4KKworCSogZ2VuZXh0cmFjdC5jIChtYWluKTogUGFzcyBgaW5zbicgYXMgYXJnIHRvIGBmYXRhbF9pbnNuX25vdF9mb3VuZCcuCisKKwkqIHRhaG9lLm1kIChjYXNlbCBwYXR0ZXJucyk6IFVzZSAlQCBmb3Igb3BlcmFuZCBvZiAuYWxpZ24uCisJKiB0bS10YWhvZS5oIChQUklOVF9PUEVSQU5EKTogJUAgcHJpbnRzIGAxJy4KKwkqIHRtLWhhcnJpcy5oIChQUklOVF9PUEVSQU5EKTogUmVkZWZpbmUgaXQ7ICVAIHByaW50cyBgMicuCisKKwkqIGNvbmZpZy5nY2MgKGRlY3N0YXRpb24pOiBOZXcgZW50cnkuCisKKwkqIHRtLWhhcnJpcy5oOiBOZXcgZmlsZSwgdXNpbmcgdG0tdGFob2UuaC4KKworCSogdG0tZGVjc3RhdG4uaCwgdG0tbWlwcy1ic2QuaCwgdG0tbWlwcy1zeXN2Lmg6IE5ldyBmaWxlcy4KKworU2F0IFNlcCAyMyAwMDoyODoxNCAxOTg5ICBBbGFpbiBMaWNobmV3c2t5ICAobGljaCBhdCBnbGVubGl2ZXQpCisKKwkqIGFkZGVkIC1aeHh4IGZsYWcgaW4gdG0tbWlwcy5oLiAoLVogc3RhbmRzIGZvciBzeXN0eXBlKQorCisJICB1c2VkIGFzIC1aU1lTViBvciAtWkJTRDQzIG9uIFJJU0NfT1MuIEkgc3VwcG9zZQorCSAgdGhhdCBhdCBzb21lcG9pbnQgLVpQT1NJWCBtaWdodCBiZSByZXF1aXJlZCBmb3IgVWx0cml4LiAKKworCSogY2hhbmdlZCBjb21tYW5kIGlzc3VlZCB0byBsb2FkZXIgdG8gc2V0IC1zeXN0eXBlIGFuZCB0byBnZXQKKyAgICAgICAgICBjcnQxIGNydG4gaW5zdGVhZCBvZiBjcnQwLgorCisgICAgICAgICogY2hhbmdlZCBwcmVkZWZpbmVzIGZvciBjcHAgdG8gYWdyZWUgd2l0aCBSSVNDLU9TCisKKwkqIHRtLW1pcHMuaCBjaGVja3MgZm9yIG1hY2hpbmUgdHlwZSAoIGRlZmluZWQodWx0cml4KSA9PSBERUNTVEFUSU9OKQorCSAgc28gdGhhdCB1c2VyIGRvZXMgbm90IGhhdmUgdG8gZ28gaW4gYW5kIGNoYW5nZSB0bS1taXBzLmggYW55bW9yZQorCisJKiBjcHAgZGVmaW5lcyBtaXBzIGhvc3RfbWlwcyB1bml4IGFuZCBTWVNUWVBFX1NZU1YKKwkgIG9yIFNZU1RZUEVfQlNENDMuIAorCitGcmkgU2VwIDIyIDAwOjMxOjI5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcHlyLm1kIChhbmRzaTMpOiBGbHVzaCBzcHVyaW91cyBwYXJlbi4KKworCSogTWFrZWZpbGUgKGhhcmQtcGFyYW1zKTogRG9uJ3QgdXNlIExJQlMgb3IgTElCREVQUy4KKworCSogcnRsLmMgKGluaXRfcnRsKToKKwlVc2UgbWFsbG9jIHRvIGFsbG9jYXRlIHRoZSBzdHJpbmcgZm9yIGZvcm1hdCBvZiBDT05TVF9ET1VCTEUuCisJRG9uJ3QgZmFpbCB0byBzdG9yZSBpbiBydHhfZm9ybWF0LgorCitUaHUgU2VwIDIxIDAwOjMzOjEzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcHJpbnQtdHJlZS5jIChkdW1wKTogTW92ZSBkZWNsIG9mIFAgaW4gUkVBTF9DU1QgY2FzZS4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogRm9yIEFCU19FWFBSLCBoYW5kbGUgUkVBTF9JU19OT1RfRE9VQkxFLgorCisJKiBjLWNvbnZlcnQuYyAoY29udmVydF90b19yZWFsKTogVXNlIFJFQUxfVkFMVUVfQVRPRiB0byBtYWtlIDAuCisKKwkqIG1pcHMubWQgKG1vdmRpKTogSGFuZGxlIGNvbnN0YW50IHdpdGggb3Igd2l0aG91dCBXT1JEU19CSUdfRU5ESUFOLgorCUZvciBhbHRlcm5hdGl2ZSAyLCBvdXRwdXQganVzdCAyIHN0b3JlIGluc25zLCBub3QgMy4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBPcHRpb25hbGx5IGdvIHRvIC5kYXRhIGZvcgorCWEgc3RhdGljIGZpbGUtc2NvcGUgdmFyaWFibGUuCisJKiB0bS12YXguaDogRGVmaW5lIERCWF9TVEFUSUNfU1RBQl9EQVRBX1NFQ1RJT04gdG8gcmVxdWVzdCB0aGlzLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50LCBmb3JjZV9jb25zdF9tZW0pOgorCUFTTV9PVVRQVVRfRE9VQkxFX0lOVCBub3cgdGFrZXMgcnR4IGFzIGFyZ3VtZW50LgorCisJKiBndmFyYXJncy5oIFtfX05lWFRfX106IFVuZGVmaW5lIG1hY3JvcyBkZWZpbmVkIGJ5IHN0ZGFyZGcuaC4KKwlEZWZpbmUgX1ZBUkFSR1NfSC4KKworCSogc3RkZGVmLmggKHNpemVfdCk6IERvbid0IGRlZmluZSBpdCBpZiBfU0laRV9UIG1hY3JvIGlzIGRlZmluZWQuCisJKE5VTEwpOiBVbmRlZiBhbnkgcHJldmlvdXMgZGVmbi4KKworCSogY2V4cC55IChOVUxMKTogRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KKworCSogZW1pdC1ydGwuYyAoZm9yY2VfbmV4dF9saW5lX25vdGUpOiBOZXcgZnVuY3Rpb24uCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IENhbGwgdGhhdCBqdXN0IGJlZm9yZSByZXR1cm5pbmcuCisKK1dlZCBTZXAgMjAgMDE6MjI6MTYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKGFzbV9jbG9iYmVycyk6CisJQWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb246IGNhbGwgY29tYmluZV9zdHJpbmdzLgorCitNb24gU2VwIDE4IDAwOjA0OjA2IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IElmIGNhbGxpbmcgY29uc3QgZnVuY3Rpb24sIGRvbid0IGRlZmVyCisJcG9wcyBmb3IgdGhpcyBjYWxsLgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogV2hlbiBmbG9hdCBjb25zdGFudCBlbmRzIGluIGBmJywKKwlhY3R1YWxseSB0cnVuY2F0ZSB0byBhIHNpbmdsZS1mbG9hdC4KKworU3VuIFNlcCAxNyAwMTozNjo0MyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChTV0lUQ0hfVEFLRVNfQVJHKTogLUEgdGFrZXMgYW4gYXJnLgorCShsaW5rX3NwZWMpOiBJbmhpYml0IHN0YXJ0IGZpbGVzIHdoZW4gLUEuCisKKwkqIGNvbnZleC5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IFN1cHBseSBkdW1teSBhcmcgdG8gUkVUVVJOX1BPUFNfQVJHUy4KKworCSogZ251bGliMi5jIChfX2ZpeHVuc2RmZGkpOiBBZnRlciByZW1vdmluZyB0b3AgaGFsZiwgQSBjYW4gYmUgbmVnLgorCShfX2NtcGRpMiwgX191Y21wZGkyKTogV2FzIG1pc3VzaW5nIG1hY3JvcyBISUdIIGFuZCBMT1ctLQorCXVzZSAucy5oaWdoIGFuZCAucy5sb3cgdG8gZXh0cmFjdCB3b3JkcyBmcm9tIGxvbmdfbG9uZy4KKworCSogTWFrZWZpbGUgKGdudWxpYjIpOiBSdW4gYC4vZ2NjJy4KKworCSogTWFrZWZpbGUgKGZsb2F0LmgpOiBVc2UgYG1ha2UnLCBub3QgYCQoTUFLRSknLgorCShoYXJkLXBhcmFtcy5vKTogVXNlIGAkKHNyY2RpciknIGluIGRlcHMgYXMgaW4gY29tbWFuZHMuCisKKwkqIG91dC10YWhvZS5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBIYW5kbGUgY29uc3RhbnQgb3BlcmFuZCAxLgorCitTYXQgU2VwIDE2IDAxOjE1OjI0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFB1dCBkZWF0aCBub3RlIGZvciBpbnB1dCByZWxvYWQgcmVnCisJZXZlbiBpZiByZWxvYWQgd2FzIGluaGVyaXRlZC4KKworCSogb3V0LWk4NjAuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBUeXBvIGxvYWRpbmcgc2l6ZSBvZiBibG9jay4KKworCSogbTY4ay5tZCAoZGJyYSBwYXR0ZXJucyk6IERvIENDX1NUQVRVU19JTklULgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBDaGVjayBHRVRfTU9ERV9DTEFTUyBiZWZvcmUgZmxvYXRpbmcgbmVnYXRlLgorCitGcmkgU2VwIDE1IDAwOjM5OjQ0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdCk6IERvbid0IGNvbWJpbmUgKHN1YnJlZyAobWVtKSkKKwlpZiBzdWJyZWcncyBtb2RlIGlzIHdpZGVyIHRoYW4gbWVtJ3MgbW9kZS4KKworVGh1IFNlcCAxNCAwNDozMzo1MSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlIChjbGVhbik6IERlbGV0ZSB0ZW1wIGZpbGVzIHVzZWQgaW4gbWFraW5nIGdudWxpYi4KKworCSogdG0tbmV4dC5oIChMSU5LX1NQRUMpOiBQYXNzIC1aIGFuZCAtc2VnbGlua2VkaXQgb3B0aW9ucy4KKworVHVlIFNlcCAxMiAwMTowNjozOSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogSWdub3JlIE1BWF9GSVhFRF9NT0RFX1NJWkUgZm9yIGludHMuCisKKwkqIG1pcHMubWQgKGNtcHNpICsgYmxldSBwZWVwaG9sZSk6IFNob3VsZCBvdXRwdXQgdW5zaWduZWQgaW5zbi4KKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCwgZXh0cmFjdF9iaXRfZmllbGQpOiBJZiBsb2FkaW5nIG1lbQorCWludG8gcmVnIGZvciBiaXQgZmllbGQgaW5zbiwgZG9uJ3QgdXNlIGEgbGFyZ2VyIG1vZGUgdGhhbiBpbnNuIHdhbnRzLgorCisJKiBNYWtlZmlsZSAoc3RhbXAtZ251bGliMik6IERlcGVuZCBvbiBnY2MsIGNjMSwgY3BwIHRvIGF2b2lkCisJd3Jvbmcgb3JkZXIgb2YgbWFraW5nIHdoZW4gcGFyYWxsZWwuCisKKwkqIE1ha2VmaWxlIChmbG9hdC5oKTogRG8gdXNlICQoTUFLRSkgdG8gcnVuIHJlY3Vyc2l2ZSBtYWtlLgorCitNb24gU2VwIDExIDAwOjQ5OjExIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluKTogVGVzdCBmb3IgbWlzc2luZyBhcmcgYWZ0ZXIgLW8sIGV0Yy4KKworCSogdG0tbmV4dC5oOiBOZWFybHkgY29tcGxldGVseSBuZXcuCisKKwkqIGdjYy5jIChTV0lUQ0hfVEFLRVNfQVJHLCBXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBNb3ZlIGFmdGVyIGNvbmZpZy5oLgorCisJKiBjY2NwLmM6IENhc3Qgc29tZSBhcmdzIHRvIHN0cmNweSBhbmQgc3RyY2F0LgorCisJKiBnZW5vdXRwdXQuYyAoZXJyb3IpOiBEZWNsYXJlIGFyZyBTLgorCisJKiB0bS1weXIuaCwgcHlyLm1kLCBvdXQtcHlyLmMsIHhtLXB5ci5oOiBOZXcgZmlsZXMuCisJKiBjb25maWcuZ2NjOiBOZXcgaXRlbSBmb3IgcHlyLgorCisJKiBndmFyYXJncy5oOiBJZiBfX3B5cl9fLCB1c2UgdmEtcHlyLmguCisKK1N1biBTZXAgMTAgMDA6NDg6NDMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGluY19mb3JfcmVsb2FkKTogUmVhbGx5IHJldHVybiB0aGUgZmlyc3Qgb2YgdGhlIGluc25zLgorCisJKiBzdG9yLWxheW91dC5jIChidWlsZF9pbnQpOiBNZW1vaXplIHNpemUgbm9kZXMgZm9yIHNpemVzIDw9IDMyLgorCisJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IERvbid0IHJldmVyc2UgYSBiaXYgdGhhdCBpcyB1c2VkCisJaW4gYmV0d2VlbiBpdHMgdXBkYXRlIGFuZCB0aGUgbG9vcCBlbmR0ZXN0IGluc24uCisKK1NhdCBTZXAgIDkgMDI6MTA6NDkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChnZW5vcCk6IERvbid0IHVzZSBgY29tYmluZScgZm9yIG5vbmV4cGxpY2l0IGNvbnN0YW50cy4KKwlIYW5kbGUgc29tZSBpZGVudGl0eSBlbGVtZW50cywgZXRjLiwgZGlyZWN0bHkuCisJKGxheW91dF9iYXNldHlwZXMpOiBGdW5jdGlvbiBkZWxldGVkLgorCShsYXlvdXRfcmVjb3JkKTogSWdub3JlIGFueSBUWVBFX0RFQ0xzIGluIHRoZSBmaWVsZGxpc3QuCisJRG9uJ3QgZG8gUENDX0JVVEZJRUxEX1RZUEVfTUFUVEVSUyBoYWNrIG9uIGZpZWxkIHdpdGggRVJST1JfTUFSSyB0eXBlLgorCShsYXlvdXRfdW5pb24pOiBEZWxldGUgZXJyb3IgY2hlY2sgZm9yIGJhc2UgdHlwZXMuCisJSWdub3JlIGFueSBUWVBFX0RFQ0xzIGluIHRoZSBmaWVsZGxpc3QuCisJKGxheW91dF90eXBlKTogQ29weSBsYXlvdXQgaW5mbyBkaXJlY3RseSBpbnRvIGFsbCB2YXJpYW50cyBvZiB0eXBlLgorCURlbGV0ZSB1bnVzZWQgbG9jYWwgYHgnLgorCisJKiBtaXBzLm1kIChtb3ZkaSk6IEhhbmRsZSBjb25zdGFudCBzb3VyY2Ugb3BlcmFuZC4KKwkobW92c2kpOiBTb21lIG91dHB1dCBjb2RlIG1vdmVkIHRvIG91dHB1dF9sb2FkX2ltbWVkaWF0ZS4KKwkqIG91dC1taXBzLmMgKG91dHB1dF9sb2FkX2ltbWVkaWF0ZSk6IE5ldyBmdW5jdGlvbi4KKworCSogY29uZmlnLmdjYyAoaXJpcyk6IFVzZSB0bS1pcmlzLmggYW5kIHhtLWlyaXMuaC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSk6IENvcHkgYWxsIG5vbmNvbnN0YW50IE1FTSBhZGRyZXNzZXMuCisKKwkqIHRtLTNiMS5oIChBU01fT1VUUFVUX1NQQUNFKTogTmV3IG92ZXJyaWRlIGRlZm4sIHRvIG91dHB1dCBleHBsaWNpdAorCWJ5dGVzIG9mIDAgaWYgaW4gdGV4dCBzZWdtZW50LgorCitGcmkgU2VwICA4IDE5OjE1OjA4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IERvbid0IGRvIGkzZGVzdCBzdHVmZiBpZiBpMyBpc24ndCBhIFNFVC4KKworVGh1IFNlcCAgNyAwMDoxNjozMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBGbiBpcyAibm90IGV2ZW4gY2xvc2UiCisJb25seSBpZiA+IDMgKiBtYXhfaW5zbnMuCisKKwkqIHRvcGxldi5jIChmYXRhbF9pbnNuX25vdF9mb3VuZCk6IE5ldyBmbi4KKwkqIGdlbmV4dHJhY3QuYyAobWFpbik6IE1ha2UgaW5zbl9leHRyYWN0IGNhbGwgdGhhdCBmbi4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBhYm9ydCBhYm91dCBiYWQgb2Zmc2V0CisJaW4gYSBwYXJtIHdob3NlIHR5cGUgaXMgZXJyb3JfbWFya19ub2RlLgorCU1ha2UgYW5vdGhlciBzeW50YXggbGV2ZWwgdG8gaG9sZCBwYXJtIGRlc3RydWN0b3JzLgorCisJKiB0bS1taXBzLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6CisJSW5jcmVtZW50IHB1c2hfbG9jIGFmdGVyLCBub3QgYmVmb3JlLCBlYWNoIHJlZyBzYXZlIG9yIHJlc3RvcmUuCisJV2hlbiBzdG9yaW5nIHJlZyA5IG9yIDI5LCB1c2Ugb2Zmc2V0IHRzaXplLTQuCisJTWFrZSB0c2l6ZSBsYXJnZXIgYnkgNCBpbml0aWFsbHkuCisJKFNUQVJUSU5HX0ZSQU1FX09GRlNFVCk6IC04LCBub3QgLTQuCisKKwkqIGdjYy5jIChjaG9vc2VfdGVtcF9iYXNlKTogTWFrZSB1c2Ugb2YgVE1QRElSIGFuZCBQX3RtcGRpcgorCWlmIHRoZXkgZXhpc3QuCisKKwkqIHRvcGxldi5jLCBnY2MuYywgY2NjcC5jLCBnZW4qLmMgKGZhbmN5X2Fib3J0KToKKwlOZXcgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVwbGFjZSBgYWJvcnQnLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFNhdmUgYXJndiwgYXJnYyBpbiBzYXZlX2FyZ3YsIHNhdmVfYXJnYy4KKworCSoganVtcC5jIChkZWxldGVfaW5zbik6IEFsd2F5cyBhZHZhbmNlIE5FWFQgYWNyb3NzIGRlbGV0ZWQgaW5zbnMsCisJaW4gY2FzZSBub3Qgb3B0aW1pemluZy4gIEZpeGVzIHNldHRpbmcgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX251bGwuCisKKwkqIHN5bW91dC5jOiBJbmNsdWRlIHN0ZGRlZi5oIHdpdGggPC4uLj4uCisKK1dlZCBTZXAgIDYgMDA6Mzk6MzUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZmluZF9leGVjX2ZpbGUpOiBXYXMgdXNpbmcgYGFyZ2J1ZlswXScgd2hlcmUgd2FudGVkIGBwcm9nJy4KKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IERvbnQgY2FsbCByZWNvcmRfZGVhZF9hbmRfc2V0X3JlZ3MKKwlpZiBpbnNuIGhhcyBiZWNvbWUgYSBOT1RFLgorCisJKiByZWxvYWQuYyAoY29tYmluZV9yZWxvYWRzKTogVXBkYXRlIHJlbG9hZF93aGVuX25lZWRlZC4KKworCSoganVtcC5jIChkZWxldGVfaW5zbik6IElmIGRlbGV0ZSBsYWJlbCBvbiBBRERSX1ZFQywgZGVsZXRlIHRhYmxlIHRvby4KKwkoanVtcF9vcHRpbWl6ZSk6IElmIEFERFJfRElGRl9WRUMgbGFiZWwgaGFzIDEgcmVmLCBkZWxldGUgaXQgYW5kIHRhYmxlLgorCisJKiBndW5saWIyLmMgKF9fZml4dW5zZGZkaSwgX19mbG9hdGRmZGkpOiBNYWtlIHRoZSBsb25nIGxvbmcsCisJYW5kL29yIGl0cyB0d28gaGFsdmVzLCB1bnNpZ25lZC4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBXaGVuIHNldHRpbmcgZG91YmxlX3JlZ19hZGRyZXNzX29rLAorCXJlcXVpcmUgaXQgdG8gYmUgb2Zmc2V0dGFibGUuCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X2ZwX21vdmVfZG91YmxlKTogTm93IHNhZmUgdG8gdXNlIHN0ZAorCWZvciBhbGwgcmVnK3JlZyBhZGRyZXNzZXMuCisKKwkqIHZheC5tZDogQWRkIGFub3RoZXIgc2ltcGxpZmllZC1jYXNlc2kgcGF0dGVybiBmb3Igb3BlcmFuZCAwIGNvbnN0YW50LgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBEb24ndCB0cnVuY2F0ZSBWQUwgYXQgZW5kIGlmIFdJRFRIIGlzIDAuCisJRG9uJ3QgYWx0ZXIgV0lEVEggZm9yIHRoYXQgcHVycG9zZSBiYXNlZCBvbiB0aGUgb3BlcmFuZHMuCisKKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiAmJiBvciB8fCBpcyBvayBpZiAybmQgb3AgaGFzIGVmZmVjdC4KKworCSogYy1wYXJzZS55IChBTElHTk9GIHVuYXJ5X2V4cHIpOiBGaW5kIGEgbGFyZ2VyIHZhbHVlIGlmIHBvc3NpYmxlLgorCisJKiByZWxvYWQuYyAoY29tYmluZV9yZWxvYWRzKTogRG9uJ3QgY29tYmluZSBhbiBvdXRwdXQgYWRkcmVzcyByZWxvYWQuCisJKGZpbmRfcmVsb2Fkcyk6IENhbGwgY29tYmluZV9yZWxvYWRzIGFmdGVyIHNldHRpbmcgcmVsb2FkX3doZW5fbmVlZGVkLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFVwZGF0ZSBPUEVSQU5EIGlmIGNvcHkgdGhlIG9wZXJhbmQuCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBNaXNzaW5nIGFyZyBubyBlcnJvciBpbiAxLWFyZyBtYWNybyBpZiAtdHJhZC4KKworVHVlIFNlcCAgNSAxNDoxMjoyMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX2R1bW15X3JlbG9hZCk6IERvbid0IHVzZSB0aGUgb3V0cHV0IHJlZyBpZiBpdCBpcworCWEgZml4ZWQgcmVnIHdoaWNoIGNhbiBvdmVybGFwIHdpdGggb3RoZXIgcmVncy4KKworCSogY3NlLmMgKGV4cF9lcXVpdl9wKTogVHdvIHZlY3RvcnMgbXVzdCBoYXZlIHNhbWUgbGVuZ3RoLgorCisJKiB0cmVlLmRlZiAoV0lUSF9DTEVBTlVQX0VYUFIpOiBQcmludC1uYW1lIHN0cmluZyB3YXMgd3JvbmcuCisKKwkqIG9wdGFicy5jIChleHBhbmRfZml4KTogVW5kbyBwcmV2aW91cyBjaGFuZ2UgKHVuc2lnbmVkIGNvbnZlcnNpb24pLgorCUl0IGRvZXNuJ3Qgd29yay4KKworCSogZ2NjLmM6IFBhc3MgLWkgb3B0aW9uIHRvIGNwcC4gIEl0IHRha2VzIGFuIGFyZy4KKworCSogY2NjcC5jIChjcGx1c3BsdXNfaW5jbHVkZV9kZWZhdWx0cykgW1ZNU106IFR5cG8gaW4gYXJyYXkgaW5kaWNlcy4KKworCSogTWFrZWZpbGUgKGdudWxpYik6IENyZWF0ZSBpdCBpbiB0bXBnbnVsaWIsIHRoZW4gcmVuYW1lIGF0IHRoZSBlbmQuCisKKwkqIGk4NjAubWQgKG1vdmRpIGZyb20gY29uc3RhbnQgcGF0dGVybik6IEZpeCBgc3QnIG9wY29kZSB0eXBvcy4KKworCSogTWFrZWZpbGUgKGhhcmQtcGFyYW1zKik6IFVzZSBDQ0xJQkZMQUdTLCBub3QgQ0ZMQUdTLgorCitGcmkgU2VwICAxIDAzOjQzOjUwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0taTM4Nmdhcy5oIChBU01fT1VUUFVUX0FMSUdOKTogLmFsaWduIGFyZyBpc24ndCBhIGxvZywgaW4gZ2FzLgorCShBU01fT1VUUFVUX0FMSUdOX0NPREUpOiBBbGlnbiBsYWJlbHMsIGV0Yy4gdG8gNC1ieXRlIGJvdW5kYXJ5LgorCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lKTogRGVsZXRlIE5PVEVfSU5TTl9ERUxFVEVEIG5vdGVzLgorCisJKiBNYWtlZmlsZSAoY2xlYW4pOiBEZWxldGUgZGJyIGFuZCBqdW1wMiBkdW1wcy4KKworCSogTWFrZWZpbGUgKGdudWxpYiwgZ251bGliMik6IENvbXBpbGUgaW4gbWFpbiBkaXIsIG5vdCBsaWJ0ZW1wIHN1YmRpci4KKwlUaGlzIGF2b2lkcyB0cm91YmxlIHdpdGggLUkgb3B0aW9ucywgZXRjLgorCitUaHUgQXVnIDMxIDE1OjA3OjE5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6CisJQmUgc3BlY2lmaWMgbW92aW5nIFJFR19ERUFEIG5vdGVzIHRvIGFuIG91dHB1dCByZWxvYWQuCisJU29tZXRpbWVzIG1vdmUgdGhlbSB0byBvdXRwdXQtb3BlcmFuZC1hZGRyZXNzIHJlbG9hZHMuCisKKwkqIG91dC1zcGFyYy5jIChvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBWZXJ5IGNhdXRpb3VzIGFib3V0IHN0ZC4KKwlVc2UgaXQgb25seSBmb3Igc29tZXRoaW5nIHZpc2libHkgYWxpZ25lZCwgb3IgZm9yIGFuIGFycmF5IGVsZW1lbnQuCisKKwkqIGNjY3AuYyAobWFpbikgW1ZNU106IFJlbW92ZSBkaXJzIGFuZCBleHRlbnNpb24gZnJvbSBQUk9HTkFNRS4KKwkocGZhdGFsX3dpdGhfbmFtZSkgW1ZNU106IFJldHVybiBWTVMgc3lzdGVtIGNhbGwgZXJyb3IgY29kZSBhcyBzdGF0dXMuCisJKGNwbHVzcGx1c19pbmNsdWRlX2RlZmF1bHRzKSBbVk1TXTogQWRkIEdOVV9HWFhfSU5DTFVERS4KKworCSogeG0tdm1zLmggKEZBVEFMX0VYSVRfQ09ERSk6IE5vdyAoNDQgfCAweDEwMDAwMDAwKS4KKworCSogZXhwci5jIChkb19zdG9yZV9mbGFnKTogQWxsb3cgbW9yZSB2YWx1ZXMgb2YgU1RPUkVfRkxBR19WQUxVRS4KKworCSogZ251bGliMi5jIChfX2ZpeHVuc2RmZGkpOiBFeHBsaWNpdGx5IGNhc3QgZG91YmxlcyB0byBgbG9uZyBpbnQnCisJdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLgorCitXZWQgQXVnIDMwIDEzOjI4OjU0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChza2lwX2NvbnNlY19pbnNucyk6IFNraXAgTk9URXMuCisKKwkqIGxvb3AuYyAoZ2VuZXJhbF9pbmR1Y3Rpb25fdmFyKTogSWYgRyBvciBWIGlzIGEgbm9ucmVwbGFjZWFibGUgZ2l2LAorCWdpdmUgdXAuICBJZiBHIGlzIGFsbG9jYXRlZCBoZXJlLCBjb25zaWRlciBpdCByZXBsYWNlYWJsZS4KKworCSogc3R1cGlkLmM6IE1ha2UgdWlkX3N1aWQsIHJlZ193aGVyZV9ib3JuIGFuZCByZWdfd2hlcmVfZGVhZAorCXZlY3RvcnMgb2YgaW50cywgbm90IHNob3J0LgorCitUdWUgQXVnIDI5IDAwOjIxOjEzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0taXJpcy5oOiBGaXggdHlwbyBpbiBmb3JtZmVlZCBjaGFyLgorCisJKiBvdXQtaTg2MC5jIChzaW5nbGVtb3ZlX3N0cmluZyk6IEFkZCBtaXNzaW5nIGAubCcgdG8gYHN0JywgYGxkJy4KKworCSogbG9vcC5jIChnZW5lcmFsX2luZHVjdGlvbl92YXIpOiBEb24ndCBzZXQgRyBmcm9tIDJuZCBvcC4gb2YgTUlOVVMsCisJc2luY2UgdGhhdCB3b3VsZCBuZWdhdGUgdGhlIHJlc3VsdC4KKworTW9uIEF1ZyAyOCAwMDoxNjozNiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBXaGVuIHdlIG5lZWQgYSBwb2ludGVyIHR5cGUsIGRvbid0CisJcmVjb3JkIGl0IGluIFRZUEVfUE9JTlRFUl9UTywgbGVzdCBpdCBub3QgbGl2ZSBhcyBsb25nIGFzIGl0cyB0YXJnZXQuCisKKwkqIHRtLWhwOWszMjAuaCAoQ1BQX1BSRURFRklORVMpOiBEZWxldGUgX19ocDkwMDBzMzAwIGFuZCBfSFBVWF9TT1VSQ0UuCisKKwkqIE1ha2VmaWxlIChnbnVsaWIpOiBEZWxldGVkIHN0YW1wLWdudWxpYjIgaW4gd3JvbmcgZGlyLgorCShoYXJkLXBhcmFtcy5vKTogQ29weSBpdCBpbnRvIGN1cnJlbnQgZGlyIGJlZm9yZSBjb21waWxpbmcuCisJKFNUQUdFU1RVRkYpOiBJbmNsdWRlIHRoZSBzdGFtcC0qLltjaF0gZmlsZXMuCisKK1N1biBBdWcgMjcgMTM6NTk6MzkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIG91dC1pODYwLmMgKG91dHB1dF9zaXplX2Zvcl9ibG9ja19tb3ZlKTogVHlwbyBpbiBDQ19LTk9XX0hJX1IzMS4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBJZ25vcmUgaW5zbnMgdG8gc2V0IHZhbHVlIHJlZworCWlmIHdlIGRvbid0IHdhbnQgdGhlIHZhbHVlLgorCisJKiB2YXJhc20uYyAobWFrZV9mdW5jdGlvbl9ydGwsIG1ha2VfZGVjbF9ydGwpOiBVc2UgREVDTF9BU1NFTUJMRVJfTkFNRS4KKworCSogTWFrZWZpbGUgKHN0YW1wLWdudWxpYjIpOiBEb24ndCBleHBsaWNpdGx5IGRlbGV0ZSBvbGQgbWVtYmVycywKKwlqdXN0IHJlcGxhY2UgdGhlbS4KKworCSogbTY4ay5tZCwgYWxsaWFudC5tZCAodHJ1bmNoaXFpKTogVXNlIG1vdmV3IGlmIG1vdmluZyBmcm9tIG1lbW9yeQorCW9yIGZyb20gYSBjb25zdF9pbnQuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IGZpcnN0X3Bhcm1fb2Zmc2V0CisJbGF0ZXIgb24sIGFmdGVyIGNvbXB1dGluZyB0aGUgYXJncywgaW4gY2FzZSB0aG9zZSBhcmdzCisJY29udGFpbiBpbmxpbmUgZnVuY3Rpb24gY2FsbHMuCisKKwkqIGFsbGlhbnQubWQgKG1vdnFpKTogTGlrZSByZWNlbnQgY2hhbmdlIGluIG02OGsubWQuCisKK1NhdCBBdWcgMjYgMDA6MjY6MDMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHRtLWhwOWszMjAuaCAoQ1BQX1BSRURFRklORVMpOiBUYWtlIG91dCBtNjhrIGFuZCBtYzY4MDAwLgorCSogdG0tbmV3cy5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBtYzY4MDAwLgorCitGcmkgQXVnIDI1IDE1OjM3OjM1IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2ZpeCk6IENhbiBjb252ZXJ0IHRvIHVuc2lnbmVkIGludAorCWJ5IHN1YnRyYWN0aW5nIDIqKihOLTEpLCBjb252ZXJ0aW5nIHRvIHNpZ25lZCwgYW5kIGFkZGluZyAyKiooTi0xKS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogRm9yIG91dC1vZi1yYW5nZSBzdGFjayBzbG90LAorCXJlbG9hZCB0aGUgZGlzcGxhY2VtZW50IGludG8gYSByZWcuCisJKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBGb3Igc3VicmVnIG9mIGEgcmVnIHdpdGggYSByZWdfZXF1aXZfYWRkcmVzcywKKwl0dXJuIHRoZSB3aG9sZSB0aGluZyBpbnRvIGEgbWVtcmVmLgorCitUaHUgQXVnIDI0IDE0OjA3OjAzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBJZiBmdW5jdGlvbiBpcyBkZWNsYXJlZCBgZXh0ZXJuIGlubGluZScsCisJc2V0IGN1cnJlbnRfZXh0ZXJuX2lubGluZS4KKwkoc3RhcnRfZnVuY3Rpb24pOiBJbiB0aGF0IGNhc2UsIHNldCBUUkVFX0VYVEVSTiBpbiBmdW5jdGlvbiBkZWNsLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBJbiB0aGF0IGNhc2UsIGRvbid0IHJlYWxseSBjb21waWxlLgorCShjb21waWxlX2ZpbGUpOiBEb24ndCBvdXRwdXQgc3VjaCBmdW5jdGlvbnMgYXQgdGhlIGVuZCBlaXRoZXIuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBEbyBzZXQgTkFNRSBpZiB3ZSBoYXZlIG9uZS4KKworCSogUHJldmVudCBhbnkgdmFyaWFiaWxpdHkgaW4gcmVzdWx0cyBvZiBxc29ydC4KKwkqIHN0dXBpZC5jIChzdHVwaWRfcmVnX2NvbXBhcmUpOiBDb21wYXJlIGJ5IHJlZ25vIGFzIGxhc3QgcmVzb3J0LgorCSogZ2xvYmFsLWFsbG9jLmMgKGFsbG9jbm9fY29tcGFyZSk6IFNhbWUgaWRlYS4KKwkqIGxvY2FsLWFsbG9jLmMgKHF0eV9jb21wYXJlXzEpOiBTYW1lIGlkZWEuCisJKiByZWxvYWQxLmMgKGhhcmRfcmVnX3VzZV9jb21wYXJlLCByZWxvYWRfcmVnX2NsYXNzX2xvd2VyKTogU2FtZSBpZGVhLgorCisJKiBjY2NwLmMgKG1hY3JvZXhwYW5kKTogSWYgcmVhZCBvbmUgYXJnLCBidXQgaXQncyB3aGl0ZXNwYWNlLAorCWNvbnNpZGVyIHRoYXQgMCBhcmdzIGZvciBjaGVja2luZyBudW1iZXIgb2YgYXJncy4KKwlJbXByb3ZlIHBsdXJhbHMgaW4gZXJyb3IgbWVzc2FnZXMuCisKKwkqIGV4cHIuaCAoaW5oaWJpdF9kZWZlcl9wb3ApOiBOZXcgbmFtZSBmb3IgY3VycmVudF9hcmdzX3NpemUsCisJbm93IGRlY2xhcmVkIGhlcmUuCisJKE5PX0RFRkVSX1BPUCwgT0tfREVGRVJfUE9QKTogTW92ZWQgaGVyZS4KKwkqIGV4cHIuYzogTmFtZXMgcmVsYXRlZCB0byBjdXJyZW50X2FyZ3Nfc2l6ZSByZW5hbWVkLgorCShjbGVhcl9jdXJyZW50X2FyZ3Nfc2l6ZSk6IERlbGV0ZWQuCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IEluaXQgaW5oaWJpdF9kZWZlcl9wb3AgaGVyZS4KKworCSogc3RtdC5jIChleHBhbmRfc3RhcnRfc3RtdF9leHByKTogRG8gTk9fREVGRVJfUE9QLgorCShleHBhbmRfZW5kX3N0bXRfZXhwcik6IERvIE9LX0RFRkVSX1BPUCwgYW5kIGRvbid0IGRvIGRlZmVycmVkIHBvcHMuCisKKwkqIE1ha2VmaWxlIChjLXBhcnNlLnRhYi5jKTogUGFzcyAtbyBvcHRpb24gdG8gQmlzb24uCisKK1dlZCBBdWcgMjMgMjM6MTQ6MDYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKToKKwlVc2UgR0VUX01PREVfV0lERVJfTU9ERSB0byBzY2FuIHBvc3NpYmxlIG1vZGVzIGZvciBiZXN0bW9kZS4KKworCSogTWFrZWZpbGUgKHN0YW1wLWdudWxpYjIpOiBEaXNjYXJkIGVycm9yIG1lc3NhZ2VzIGZyb20gYGFyIGQnLgorCitUdWUgQXVnIDIyIDAwOjMxOjUxIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBJbiBDT0ZGLCBkb24ndCBvdXRwdXQgYC5sbiAwJy4KKworCSogTWFrZWZpbGUgKHN0YW1wLWdudWxpYjIpOiBEZXBlbmQgb24gZ251bGliLiAgRm9yIHBhcmFsbGVsIG1ha2UuCisKKwkqIHN0bXQuYyAodW5pbml0aWFsaXplZF92YXJzX3dhcm5pbmcpOiBEb24ndCBjcmFzaCBpZiBERUNMX1JUTCBpcyAwLgorCisJKiBpMzg2Lm1kICh0cnVuY2Rmc2YyKTogUGF5IGF0dGVudGlvbiB3aGV0aGVyIHN0YWNrIHRvcCBpcyBkZWFkLgorCitNb24gQXVnIDIxIDIyOjAyOjQwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IERvbid0IHVzZSByZWdubyB1bmluaXRpYWxpemVkLAorCWluIHRoZSBjb2RlIHRoYXQgZG9lcyBmaW5kX2VxdWl2X3JlZy4KKworU3VuIEF1ZyAyMCAwMDowNjo0NyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZCAobW92cWkpOiBXYXMgb3V0cHV0dGluZyBiYWQgY29kZSBmb3IgYXJlZy0+bWVtIGFuZCBtZW0tPmFyZWcuCisKKwkqIGV4cGxvdy5jIChtZW1vcnlfYWRkcmVzcyk6IEhhbmRsZSBhIGhhcmQgcmVnIGluIHdyb25nIHJlZyBjbGFzcy4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogU2V0IFJFR19GVU5DVElPTl9WQUxVRV9QIGluIHJldHVybgorCXJlZyB3aGVuIHJldHVybmluZyBhZGRyZXNzIG9mIHN0cnVjdHVyZSB2YWx1ZSBibG9jay4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSk6IFByZXNlcnZlIGludGVncmF0ZWQgYml0IG9uIGluc25zLgorCitTYXQgQXVnIDE5IDE0OjIwOjA3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogRG9uJ3QgY2hhbmdlIChzdWJyZWc6TSAobWVtOk4gLi4uKSkgdG8gCisJKG1lbTpNIC4uLikgaWYgYWRkcmVzcyBpcyBtb2RlLWRlcGVuZGVudC4KKworCSogY29uZmlnLmdjYzogQ29weSBhbmQgYWx0ZXIgTWFrZWZpbGUgZm9yIGFueSBzcmNkaXIgZXhjZXB0IGAuJy4KKwlJbiB0aGF0IGNhc2UsIG1ha2UgYSAuZ2RiaW5pdCBhcyB3ZWxsLgorCisJKiBzcGFyYy5tZCAoYW5kY2JzaTMsIGlvcmNic2kzLCB4b3JjYnNpMyk6IFRoZXNlIGFyZSBub3QgY29tbXV0YXRpdmUuCisKKwkqIHZheC5tZCAoY21wdiBhbmQgY21wenYgcGF0dGVybnMpOiBVc2UgQ09NUEFSRSwgbm90IE1JTlVTLgorCitGcmkgQXVnIDE4IDEyOjI0OjUyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgaG9iYmVzLmFpLm1pdC5lZHUpCisKKwkqIGFsbGlhbnQubWQgKG1vdnFpKTogQ2hhbmdlIG1vdmUgdG8gbW92IGluIGFzc2VtYmxlciBjb2RlLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6CisJSGFuZGxlIGFyZ3MgcGFzc2VkIGluIHJlZ3MgYW5kIGNvcGllZCB0byBzbG90cyByZWFjaGVkIHZpYSBhcmcgcHRyLgorCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X2RlbGF5ZWRfYnJhbmNoKToKKwlEbyBhbHRlcl9zdWJyZWcgb24gb3BlcmFuZHMgb2YgZGVsYXkgaW5zbi4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBMb29rIGZvciBhIHJlZyB0byBzaGFyZQorCWJlZm9yZSBvbmUgdGhhdCB3ZSB3b24ndCBzaGFyZS4KKworCSogZXhwci5oOiBEZWZpbmUgT1BUQUJfTVVTVF9XSURFTi4KKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBIYW5kbGUgdGhhdCBjYXNlLgorCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IFVzZSB0aGF0IHdoZW4gd2lkZW5pbmcgbHNoaWZ0IHRvIGFzaGlmdC4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBVc2UgQ09OU1QwX1JUWCwgbm90IGluZGl2aWR1YWwgdmFycy4KKworCSogZ251bGliMi5jIChsc2gqZGkzLCBhc2gqZGkzKTogUmV0dXJuIHJpZ2h0IGF3YXkgaWYgY291bnQgaXMgemVyby4KKwlPdGhlcndpc2UgdHJpZWQgdG8gc2hpZnQgYnkgMzIuCisJQWxzbyByZXBsYWNlIGNvbnN0YW50IDMyIGJ5IHNvbWV0aGluZyBzeW1ib2xpYy4KKworCSogZmluYWwuYyAob3V0cHV0X3NvdXJjZV9saW5lKTogT3V0cHV0IGxpbmUgbnVtYmVyIGluIENPRkYKKwlldmVuIGlmIHdyb25nIGZpbGUuCisKK1RodSBBdWcgMTcgMTU6MTY6MzQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBob2JiZXMuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUgKHZlcnNpb24ubyk6IE1ha2UgdGhpcyBhIHRhcmdldDsgc3BlY2lmeSBzb3VyY2UgZmlsZS4KKwkob2JzdGFjay5vKTogTGlrZXdpc2UuCisKKwkqIGNvbmZpZy5nY2MgKGk4NjApOiBOZXcgYWx0ZXJuYXRpdmUuCisKKwkqIGk4NjAubWQgKG1vdnN0cnNpKTogUmVjb3JkIHRoZSBhbGlnbm1lbnQgYXMgb3BlcmFuZCAzLgorCVJlbnVtYmVyIGZvbGxvd2luZyAoaW50ZXJuYWwpIG9wZXJhbmRzLgorCSogb3V0LWk4NjAuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBSZXdyaXRlIGFzIGluIG91dC1zcGFyYy5jLgorCShvdXRwdXRfc2l6ZV9mb3JfYmxvY2tfbW92ZSk6IExpa2V3aXNlLiAgQW5kIGRvbid0CisJc3VidHJhY3QgYWxpZ25tZW50IGZyb20gdGhlIHNpemUuCisKK1dlZCBBdWcgMTYgMTM6Mjc6MTIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBob2JiZXMuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChjb21iaW5lX21vdmFibGVzKTogRG9uJ3QgY29tYmluZSB6ZXJvLWV4dGVuZAorCXJlZ2lzdGVycyB0aGF0IGxpdmUgb3V0c2lkZSB0aGUgbG9vcC4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgY29weV90b19tb2RlX3JlZworCXRvIHNldCB1cCB0aGlzX3N0cnVjdF92YWx1ZV9ydHgsIHRvIGhhbmRsZSBzdW1zIHJpZ2h0LgorCisJKiBNYWtlZmlsZTogVXNlICQoc3JjZGlyKSBpbiBiaXNvbiBvdXRwdXQgZmlsZXMgdXNlZCBhcyBkZXBzLgorCVN1cHBseSBzb21lIG1pc3NpbmcgZGVwcy4KKwkoKi5pbmZvLCBkb2MpOiAqLmluZm8gZmlsZXMgZ28gaW4gc3JjZGlyLgorCitUdWUgQXVnIDE1IDAwOjExOjEyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgaG9iYmVzLmFpLm1pdC5lZHUpCisKKwkqIGk4NjAubWQsIHRtLWk4NjAuaCwgb3V0LWk4NjAuYzogTmV3IGZpbGVzLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRml4IGJ1ZyBkZXRlcm1pbmluZyB3aGV0aGVyIE5FV0RFQ0wKKwlpcyBhIGRlZmluaXRpb24gb3IganVzdCBhIGRlY2wuCisJQ29tYmluZSBjb2RlIHRvIHByZXNlcnZlIHZhcmlvdXMgdGhpbmdzIGZyb20gb2xkIGRlZmluaXRpb24KKwl0aHJvdWdoIGEgZGVjbGFyYXRpb24uCisKKwkqIGNvbmZpZy5nY2M6IFNjYW4gYWxsIGFyZ3MgYXQgYmVnaW5uaW5nLCBzZXR0aW5nIHZhcmlhYmxlcy4KKwlBcmcgb2YgZm9ybSAtc3JjZGlyPS4uLiBzZXRzIHNyY2RpciBleHBsaWNpdGx5LgorCXNyY2RpciBub3cgZG9lc24ndCBjb250YWluIGEgc2xhc2gsIGFuZCBpcyB1c2VkIHdpdGggYSBzbGFzaC4KKworCSogTWFrZWZpbGUgKGluc3RhbGwpOiBDb3B5IGhlYWRlciBmaWxlcyBhbmQgZ2NjLjEgZnJvbSBzcmNkaXIuCisJQnV0IGNvcHkgZmxvYXQuaCBmcm9tIGN1cnJlbnQgZGlyLiAgKFJlbW92ZSB0aGF0IGZyb20gVVNFUl9ILikKKwkodmFyaW91cyk6IFVzZSBuZXcgdmFyaWFibGUgSU5DTFVERVMgdG8gZ2V0IHRoZSAtSSBvcHRpb25zLgorCUFkZCAtSS4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVzZS4KKwkoZ251bGliLCBnbnVsaWIyKTogTGlrZXdpc2UsIHVzZSBTVUJESVJfSU5DTFVERVMuCisJQWxzbywgZ2V0IHNvdXJjZSBmaWxlIGZyb20gc3JjZGlyLgorCUFsc28sIGRlcGVuZCBvbiAkKENPTkZJR19IKS4KKwkoYWxsb2NhLm8pOiBHZXQgYWxsb2NhLmMgZnJvbSBzcmNkaXIuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBCdWcgaW4gbGFzdCBjaGFuZ2U6CisJZG9uJ3QgZmFpbCB0byBzZXQgdGhpc19yZWxvYWRfaW5zbi4KKworCSogTWFrZWZpbGUgKEJpc29uIHJ1bGVzKTogU3BlY2lmeSAkKHNyY2RpcikgZm9yIHRhcmdldCBhbmQgc291cmNlLgorCShFeHBsaWNpdCBDIHJ1bGVzKTogU3BlY2lmeSAkKHNyY2RpcikvIGZvciBzb3VyY2UgaW4gY29tbWFuZHMuCisJVXNlIHNlZCB0byBlbGltaW5hdGUgYC4vJyBpbiBub3JtYWwgY2FzZS4KKwkoaW5zbi0qLmMpOiBVc2UgJChzcmNkaXIpIHRvIHJ1biBtb3ZlLWlmLWNoYW5nZS4KKworCSogY29uZmlnLmdjYzogQ2hlY2sgLiBhbmQgLi4gZm9yIHRoZSBzb3VyY2VzLgorCUlmIGluIC4uLCB1c2UgdGhhdCB3aGVuIG1ha2luZyBsaW5rcy4KKwlBbHNvLCBjb3B5IE1ha2VmaWxlLCBhbHRlciBzcmNkaXIgaW4gaXQsIGFuZCBhZGQgYSBWUEFUSC4JCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogV2hlbiBjb252ZXJ0aW5nIENPTlNUX0lOVCBpbmRleAorCXRvIGFuIElOVEVHRVJfQ1NULCBzaWduLWV4dGVuZCBpZiBzaWduZWQgdHlwZS4KKworTW9uIEF1ZyAxNCAxMzo1MTowOCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGhvYmJlcy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogV2FybiBmb3IgcXVhbGlmaWVyIG1pc21hdGNoCisJb25seSBpZiBwZWRhbnRpYzsgZG9uJ3QgY29uc2lkZXIgaXQgYSB0eXBlIG1pc21hdGNoLgorCU1lcmdlIHRoZSBxdWFsaWZpZXJzIG9mIHRoZSB0d28gZGVjbHMgaWYgdGhlIHR5cGVzIG1hdGNoLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogRm9yIGluc3YsIG1lbXJlZiBkaXNwbGFjZW1lbnQKKwlhbHdheXMgY291bnRzIGluIGJ5dGVzLCByZWdhcmRsZXNzIG9mIHVuaXQgZmV0Y2hlZC4KKwlXaGVuIGNoZWNraW5nIHByZWRpY2F0ZSBvZiBvcDAsIGFjY2VwdCBhbnkgbW9kZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCk6IE9uZSBjYWxsIHRvIGNhbl9mbG9hdF9wIGhhZCBhcmdzIGJhY2t3YXJkcy4KKworCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBTZXQgdGhlIEpVTVBfTEFCRUwgb2YgdGhlIG5ldyBqdW1wIGluc24uCisJSW5jcmVtZW50IGxhYmVsJ3MgdXNlIGNvdW50IHJhdGhlciB0aGFuIHN0b3JpbmcgMi4KKworCSogTWFrZWZpbGU6IEluc3RlYWQgb2YgJDwsIHdoaWNoIGZhaWxzIGluIGNlcnRhaW4gbWFrZXMsCisJdXNlICRAIGFuZCB0aGVuIHN1YnN0aXR1dGUgaW4gdGhlIG5hbWUgd2l0aCBzZWQuCisKKwkqIG91dC1zcGFyYy5jIChvdXRwdXRfc2NjX2luc24pOiBIYW5kbGUgQ0NfUkVWRVJTRUQgZm9yIG9yZGVyZWQgdGVzdHMuCisJVXNlIG9yY2MgaW5zbnMgdG8gc3RvcmUgdGhlIHJlc3VsdCBhbmQgc2V0IGNjJ3MgZm9yIGl0LgorCisJKiBzcGFyYy5tZCAoc2NjIGNvbWJpbmF0aW9uIHBhdHRlcm5zKToKKwlVc2Ugb3BlcmFuZHNbMF0gYXMgYmFzaXMgZm9yIHJlY29yZGVkIGNjIHZhbHVlLgorCisJKiBnbnVsaWIyLmMgKGZsb2F0ZGlkZiwgZml4ZGZkaSwgZml4dW5zZGZkaSk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGdudWxpYi5jIChmbG9hdGRpZGYsIGZpeGRmZGksIGZpeHVuc2RmZGkpOiBEZWxldGVkLgorCSh1bmlvbiBsb25nbG9uZywgdW5pb24gZG91YmxlX2RpKTogRGVsZXRlZC4KKwkoSElHSCwgTE9XKTogRGVsZXRlZC4KKwlUaGVzZSB3ZXJlIGRlbGV0ZWQgYmVjYXVzZSBtb3N0IGRpZCBub3QgaGFuZGxlIGZ1bGwgcmFuZ2Ugb2YgREkKKwlhbmQgdGhleSBkaWRuJ3QgdXNlIHRoZSByaWdodCBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIERJLgorCitTdW4gQXVnIDEzIDEzOjA2OjQ1IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgaG9iYmVzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbXB0eXBlcyk6IFF1YWxpZmllcnMgbXVzdCBtYXRjaC4KKwkoV2FzIGFscmVhZHkgdHJ1ZSBmb3Igc2NhbGFycy4pCisJQWxzbywgYXJyYXkgZWx0IHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KKworCSogdG0tYXBvbGxvNjguaCAoU1RSVUNUX1ZBTFVFKTogTWFrZSBpdCAwLgorCShUaGlzIHdhcyBkb25lIGJlZm9yZSBhbmQgbG9zdC4pCisJKiBvdXQtaTM4Ni5jIChmdW5jdGlvbl9lcGlsb2d1ZSk6IFVzZSByZXQgJDQgdG8gcG9wIHN0cnVjdHVyZSBhZGRyZXNzLgorCShUaGlzIHdhcyBkb25lIGJlZm9yZSBhbmQgbG9zdC4pCisKKwkqIG91dC1pMzg2LmMgKGNhbGxfdG9wX2RlYWRfcCk6IERvbid0IGZhaWwgdG8gY2hlY2sKKwl0aGUgcnR4IGNvZGUgb2YgdGhlIGluc25zIHRoZW1zZWx2ZXMuCisJKFRoaXMgd2FzIGRvbmUgYmVmb3JlIGFuZCBsb3N0LikKKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogSWYgYWxpZ24gaXMgOCwgbWFrZSBpdCA0LgorCisJKiB0eXBlY2xhc3MuaDogTmV3IGZpbGUuCisJKiBleHByLmM6IEluY2x1ZGUgaXQuCisJKGV4cGFuZF9idWlsdGluKTogVXNlIHRob3NlIGNvZGVzIGluIF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlLgorCisJKiBNYWtlZmlsZSAoYWxsLCBsYW5nLWMpOiBSZWluc3RhbGwgZ251bGliMi4KKworCSogTWFrZWZpbGUgKGdudWxpYjIpOiBEb24ndCBnaXZlIHVwIGlmIGBhciBkJyBmYWlscy4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IE5ldyAybmQgYXJnIE5PX1FVRVVFLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gcGFzcyBpdC4KKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGV4cGFuZF91bm9wKTogRG9uJ3QgY2FsbCBlbWl0X3F1ZXVlLgorCUluc3RlYWQsIHBhc3MgMSBmb3IgTk9fUVVFVUUgdG8gZW1pdF9saWJyYXJ5X2NhbGwuCisKK1NhdCBBdWcgMTIgMTI6MDU6MjIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBob2JiZXMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IERlY2lzaW9uIGZvciB3aGVyZSB0byBwdXQgaW5wdXQKKwlyZWxvYWQgaW5zbiBpcyBub3cgY29tbW9uIHRvIG9yZGluYXJ5IGNhc2UgYW5kIGF1dG8taW5jcmVtZW50LgorCUxpa2V3aXNlLCB1cGRhdGluZyB0aGVzZSBwb3NpdGlvbnMgYWZ0ZXJ3YXJkLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IFRyZWF0IGxhc3QgbmFtZWQgYXJnIGFzIG5hbWVsZXNzLgorCSogZXhwci5jIChleHBhbmRfY2FsbCk6IExpa2V3aXNlLgorCisJKiBleHBsb3cuYyAoY29weV90b19tb2RlX3JlZyk6IFVzZSBmb3JjZV9vcGVyYW5kIGZvciBQTFVTIG9yIE1VTFQuCisJKGNvcHlfYWRkcl90b19yZWcpOiBVc2UgY29weV90b19tb2RlX3JlZy4KKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IEhhbmRsZSBjYXNlIHdoZXJlIGluc3YgcmVqZWN0cyBtZW1yZWZzLgorCisJKiB0bS1jb252ZXguaCAoQVNNX09VVFBVVF9BTElHTik6IE1hZ2ljIHRvIGhhbmRsZSB0aGUgZmFjdAorCXRoYXQgdGhpcyBpcyBub3QgY2FsbGVkIHdoZW4gTE9HIGlzIDAuCisKK0ZyaSBBdWcgMTEgMTY6Mzk6NTEgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBob2JiZXMuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoZ2V0X2xvd3BhcnQpOiBGb3IgbXVsdGktd29yZCwgaW4gZXJyb3IgY2hlY2ssCisJdGVzdCB0aGUgdW5pdCBzaXplIG9mIHRoZSBjb250YWluaW5nIG1vZGUuCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQsIGR1bXBfYWxsX21hY3Jvcyk6IFJldHVybiB2b2lkLgorCShtYWNyb2V4cGFuZCk6IENhc3Qgc3ByaW50ZiBhcmcgdG8gY2hhciouCisJKGVycm9yLCB3YXJuaW5nLCBlcnJvcl93aXRoX2xpbmUpOiBEZWNsYXJlIGZpcnN0IGFyZyBjaGFyKi4KKworVGh1IEF1ZyAxMCAyMTo0MjoxMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGhvYmJlcy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKToKKwlVc2UgZm9yY2Vfb3BlcmFuZCB0byBjb3B5IGFyaXRobWV0aWMgdG8gcmVnaXN0ZXIuCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogR28gYmFjayB0byBOX0ZVTiBmb3IgY29uc3QgdmFyaWFibGUuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogVXNlIHByb3BlciBtYWNoaW5lIG1vZGUKKwlmb3IgYSBzdHJ1Y3R1cmUgdmFsdWUgaW4gbWVtb3J5IGF0IGFkZHJlc3MgcGFzc2VkIGJ5IGNhbGxlci4KKworV2VkIEF1ZyAgOSAxNToyMTozNiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5nY2M6IERlbGV0ZSB1bm5lY2Vzc2FyeSB2YXJpYWJsZSBhc3NpZ25tZW50cyBpbiBjYXNlIHN0bXQuCisJKGlzaTY4LW5mcCk6IE5ldyBhbHRlcm5hdGl2ZS4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IERvbid0IHN1YnN0aXR1dGUgZm9yIGEgcmVnaXN0ZXIKKwl3aGljaCBpcyBiZWluZyBleHBsaWNpdGx5IGNsb2JiZXJlZC4KKworCSogVGhpcyBjaGFuZ2Ugd2FzIHJlcXVlc3RlZCBmb3IgQysrLgorCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSwgbWFrZV9kZWNsX3J0bCk6IEFyZyBBU01TUEVDIG5vdyBjaGFyICouCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBDaGFuZ2UgY2FsbCB0byByZXN0X29mX2RlY2xfY29tcGlsYXRpb24uCisKKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IFBhY2sgbWFjaGluZV9tb2RlIGludG8gOCBiaXRzLgorCisJKiBleHBsb3cuYyAobWVtb3J5X2FkZHJlc3MsIGNvcHlfdG9fcmVnKToKKwlVc2UgZm9yY2Vfb3BlcmFuZCB0byBjb3B5IGFyaXRobWV0aWMgdG8gcmVnaXN0ZXIuCisKKwkqIHRtLWlzaTY4LW5mcC5oOiBOZXcgZmlsZS4KKwkqIHRtLWlzaTY4Lmg6IEFsbG93IG92ZXJyaWRpbmcgVEFSR0VUX0RFRkFVTFQsIGFuZCBsZXQgdGhhdAorCWNoYW5nZSBDUFBfU1BFQyBhbmQgTElOS19TUEVDLgorCShBU01fRklMRV9TVEFSVCk6IE5vIGAuZ2xvYmwgZmx0dXNlZCcgaWYgc29mdC1mbG9hdC4KKworVHVlIEF1ZyAgOCAyMTo1MDo1MiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChjb25zdF9oYXNoKTogRm9yIGNvbnN0cnVjdG9yLCBtYXNrIFRSRUVfVFlQRSB0byBIQVNIQklUUworCWJpdHMgYW5kIHRha2UgbW9kdWxvLCBzbyB3ZSBkb24ndCBnZXQgbmVnYXRpdmUgbnVtYmVycy4KKworCSogdmFyYXNtLmMgKHJlY29yZF9jb25zdGFudF8xLCBjb21wYXJlX2NvbnN0YW50XzEpOgorCVJlY29yZCBhbmQgY29tcGFyZSB0aGUgd2lkdGggb2YgYW4gaW50ZWdlci4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX2Z1bmN0aW9uLCBhc3NlbWJsZV92YXJpYWJsZSwgZ2V0X29yX2Fzc2lnbl9sYWJlbCk6CisJKGZvcmNlX2NvbnN0X21lbSk6IERvbid0IGNhbGwgQVNNX09VVFBVVF9BTElHTiBpZiBib3VuZGFyeSBpcyAxLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ29uc2lkZXIgY29uc3QgYW5kIHZvbGF0aWxlIGFzIHBhcnQgb2YKKwl0eXBlIHdoZW4gY2hlY2tpbmcgZm9yIG1hdGNoIGFuZCB3aGVuIGluc3RhbGxpbmcgbmV3IHR5cGUgaW50byBPTERERUNMLgorCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBNYWtlIHN1cmUgdGFyZ2V0IGZpdHMgb3BlcmFuZCBwcmVkaWNhdGUuCisJQWxzbywgb21pdCB0aGUgQU5EIGluc24gd2hlbiB0cnVlLXZhbHVlIGlzIDEKKwlhbmQgdGhlIG1vZGUgd2UgZ2V0IGlzIHdpZGVyIHRoYW4gdGhlIG9uZSB3ZSB3YW50LgorCisJKiBnZW5yZWNvZy5jIChtYWluKTogTWFrZSBpbnNuLXJlY29nLmMgaW5jbHVkZSByZWFsLmguCisKK01vbiBBdWcgIDcgMTY6NTg6NTYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnZW5lbWl0LmMgKG1haW4pOiBEZWZpbmUgYG9wZXJhbmRzJyBhcyBgZW1pdF9vcGVyYW5kcycsCisJbm90IGByZWNvZ19vcGVyYW5kcycuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBEb24ndCBjb3B5IGJhY2sgYSBkZWFkIG91dHB1dCByZWcuCisKK1N1biBBdWcgIDYgMTM6NTY6NTMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xLCBzZGJvdXRfb25lX3R5cGUpOiBVc2UgdGhlIG1haW4gdmFyaWFudC4KKwkoc2Rib3V0X3R5cGVfZmllbGRzKTogTm8gbmVlZCB0byBjaGVjayBUUkVFX0FTTV9XUklUVEVOIGhlcmUsCisJc2luY2Ugc2Rib3V0X29uZV90eXBlIGRvZXMgdGhhdC4KKworCSogZXhwci5jIChkb19zdG9yZV9mbGFnKTogRW5zdXJlIHRoZSBDTE9CQkVSIGRvZXNuJ3QgY2xvYmJlciBhbiBpbnB1dC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkX2NvbnZlcnQpOiBBdHRlbXB0IHRvIGF2b2lkIG92ZXJmbG93CisJd2hlbiBjb252ZXJ0aW5nIHJlYWwgdG8gaW50ZWdlci4gIFVzZSB1bnNpZ25lZCBjb252ZXJzaW9uIGZvcgorCWxvdyBwYXJ0OyBhbHdheXMgY29udmVydCBhcyBwb3NpdGl2ZSBhbmQgdGhlbiBjaGFuZ2Ugc2lnbjsKKwlzdWJ0cmFjdCBoaWdoIHBhcnQgYmVmb3JlIGNvbnZlcnRpbmcgbG93IHBhcnQuCisJQWxzbywgY2hlY2sgZm9yIHJlYWwgdmFsdWVzIG91dCBvZiByYW5nZSBmb3IgY2hvc2VuIGludCB0eXBlOworCXdhcm4gYW5kIGRvIG5vdCBjb252ZXJ0LgorCisJKiB0bS1ocDlrMzIwLmggKENQUF9TUEVDKSBbbm90IEhQVVhfQVNNXTogRG9uJ3QgZGVmaW5lIG1jNjgwMDAgaGVyZS4KKwkoQ1BQX1BSRURFRklORVMpOiBSZW1vdmUgbWM2OGssIGFkZCBtNjhrIGFuZCBtYzY4MDAwLgorCVtIUFVYX0FTTV06IERlZmluZSBDUFBfU1BFQyBoZXJlIGFzIGluIHRoZSBvdGhlciBjYXNlLAorCWJ1dCBhZGQgX19IUFVYX0FTTV9fIHRvIGVhY2ggYWx0ZXJuYXRpdmUuCisKKwkqIHRtLW02OGsuaCAoRlVOQ1RJT05fRVBJTE9HVUUpOiBDYWxsIG5ldyBob29rIEZVTkNUSU9OX0VYVFJBX0VQSUxPR1VFLgorCSogdG0tYWx0b3MzMDY4LmggKEZVTkNUSU9OX0VYVFJBX0VQSUxPR1VFKTogRGVmaW5lIGl0LgorCisJKiBNYWtlZmlsZTogVXNlICQ8IHdoZXJldmVyIGFwcHJvcHJpYXRlLgorCUFsc28gcHV0IGRlZmluaXRpb25zIG9mIGN1c3RvbWl6YXRpb24gdmFycyBiZWZvcmUgdGhlIGNvbW1lbnRzCisJc2F5aW5nIGhvdyB0byBvdmVycmlkZSB0aGVtLgorCitTYXQgQXVnICA1IDE0OjE1OjM5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAoc25lKTogVHlwbyBpbiBvcGNvZGUgbmFtZS4KKworCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyKTogRGVsZXRlIHJlZHVuZGFudC91bnVzZWQgZXJyb3JfbG9jdXMuCisKK0ZyaSBBdWcgIDQgMDA6MDQ6MTAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAoY29uc3RfaGFzaCwgY29tcGFyZV9jb25zdGFudF8xLCByZWNvcmRfY29uc3RhbnRfMSk6CisJQ29tcGFyZSB0eXBlcyBvbmx5IGZvciByZWNvcmQgY29uc3RydWN0b3JzLCBub3QgZm9yIGFycmF5IGNvbnN0cnVjdG9ycy4KKworCSogZGJ4b3V0LmMgKGRieG91dF9wYXJtcyk6IFdoZW4gb3V0cHV0aW5nIHBhcm0gZnJvbSBob21lIGluIGxvY2FsIHNsb3QsCisJd2l0aCBhZGRyZXNzIGZyb20gdGhlIFJUTCwgZG9uJ3QgZG8gYmlnLWVuZGlhbiBjb3JyZWN0aW9uIG9uIGl0LgorCisJKiBjLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IERvIGRlZmF1bHQgY29udmVyc2lvbiBmb3IgdW5hcnkgKy4KKworCSogY2NjcC5jIChyZXNjYW4pOiBBY2NlcHQgY29tbWVudHMgYmV0d2VlbiBtYWNybyBhbmQgaXRzIGFyZ3MuCisKKwkqIGMtZGVjbC5jIChsYW5nX2RlY29kZV9vcHRpb24pOiAtdHJhZGl0aW9uYWwgaW1wbGllcyB3cml0YWJsZSBzdHJpbmdzLgorCisJKiBjY2NwLmMgKHRyaWdyYXBoX3BjcCk6IE1ha2Ugd2FybmluZyBtc2cgbW9yZSBhY2N1cmF0ZS4KKworCSogYy10eXBlY2suYyAoY19leHBhbmRfYXNtX29wZXJhbmRzKTogRGVsZXRlIHRoZSBkZWZhdWx0IHByb21vdGlvbgorCXdoaWNoIHdhcyBpbnNlcnRlZCBteXN0ZXJpb3VzbHkgc2luY2UgMS4zNS4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9jb25mbGljdHMpOiBBbGxvY2F0ZSByZWdzX3NldCBvbmx5IG9uY2UuCisJTWFrZSBpdCB0d2ljZSBhcyBiaWcgc2luY2UgY2xvYmJlcnMgYXJlIHN0b3JlZCB0d2ljZS4KKworCSogc3BhcmMubWQgKGJsb2NrIG1vdmUgcGF0dGVybnMpOiBSZWNvcmQgYW5kIHVzZSBhbGlnbm1lbnQgb3BlcmFuZC4KKwkqIG91dC1zcGFyYy5jIChvdXRwdXRfYmxvY2tfbW92ZSk6IEdldCBhbGlnbm1lbnQgZnJvbSB0aGVyZS4KKwkob3V0cHV0X3NpemVfZm9yX2Jsb2NrX21vdmUpOiBHcmVhdGx5IHNpbXBsaWZpZWQuCisKKwkqIHRtLWkzODZ2LmggKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBEZWZpbmUgaXQuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBBbm9ueW1vdXMgYml0ZmllbGRzIGRvbid0IGFmZmVjdAorCW92ZXJhbGwgc3RydWN0dXJlIGFsaWdubWVudCwgaW4gUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyBjYXNlLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFByZXZlbnQgaGFyZCByZWcgZnJvbSBiZWNvbWluZyBiaXYgb3IgZ2l2LgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogU2ltcGxpZnkgKGVxIChuZWcgLi4uKSAoY29uc3RfaW50IDApKS4KKworVGh1IEF1ZyAgMyAxMzowODowNSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IEZvciAob3AgdmFyIGNvbnN0KSBzcGVjaWFsIGNhc2VzLCBhbHNvIGNoZWNrIAorCWZvciBjb25zdGFudCBhcyBmaXJzdCBhcmd1bWVudC4KKworCSogYy1kZWNsLmMgKHB1c2h0YWcpOiBGb3IgZ2xvYmFsX2JpbmRpbmdfbGV2ZWwsIG1ha2UgcGVybWFuZW50IG5vZGVzLgorCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBQdXQgdGhlIENMT0JCRVIgYmVmb3JlIHRoZSBjb21wYXJpc29uLgorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogQ29uZGl0aW9uYWxpemUgcmVjZW50IGNoYW5nZXMKKwlvbiBubyBGSVJTVF9QQVJNX0NBTExFUl9PRkZTRVQsIHNvIHRoZXkgZG9uJ3QgaGFwcGVuIG9uIHNwYXJjLgorCisJKiBvdXQtc3BhcmMuYyAoZ2VuX3NjY19pbnNuKToKKwlEb24ndCBiZSBjb25mdXNlZCBieSBDTE9CQkVSIGVtaXR0ZWQgYnkgZG9fc3RvcmVfZmxhZy4KKwlTa2lwIHBhc3Qgc3VjaCBpbnNucyBsb29raW5nIGZvciBsYXN0X2luc24uCisJRG9uJ3QgYWx0ZXIgbGFzdF9pbnNuOyBpbnN0ZWFkLCBwYXRjaCBpdCB0byBhIE5PVEUgYW5kIGVtaXQgbmV3IGluc24uCisKKwkqIHZhcmFzbS5jIChjb25zdF9oYXNoLCBjb21wYXJlX2NvbnN0YW50XzEsIHJlY29yZF9jb25zdGFudF8xKToKKwlGb3IgYSBDT05TVFJVQ1RPUiwgaGFzaC9jb21wYXJlL3JlY29yZCB0eXBlIGFzIHdlbGwgYXMgZWx0cy4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogSnVseSAxOCBjaGFuZ2Ugd2FzIHdyb25nLgorCU5vdywgaW52YWxpZGF0ZSBhdCB0aGUgYmVnaW5uaW5nIGFueSByZWdzIGV4cGxpY2l0bHkgY2xvYmJlcmVkCisJc28gdGhleSB3aWxsIG5vdCBiZSBzdWJzdGl0dXRlZCBmb3IgaWYgdGhleSBhcHBlYXIgYXMgaW5wdXRzLgorCSogc3BhcmMubWQgKG1vdnN0cnNpKTogQ29weSBhZGRyZXNzZXMgdG8gdGVtcCByZWdzLCB0aGVuIHVzZSB0aGVtLgorCisJKiBsb29wLmMgKHJlY29yZF9naXYpOiBXaGVuIGNvbXBhcmluZyBsaWZlIHNwYW5zIGZvciBzZXR0aW5nCisJLT5mb3JjZXMsIHVzZSBsdWlkcyBjb25zaXN0ZW50bHksIG5vdCB1aWRzLgorCisJKiBzcGFyYy5tZCAoYXNobHNpMywgYXNocnNpMywgbHNocnNpMyk6IFRydW5jYXRlIGNvbnN0YW50cyBtb2QgMzIuCisKK1dlZCBBdWcgIDIgMTc6NTA6MzAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icykKKworCSogbWlwcy5tZCAocGF0dGVybnMgdG8gbW92ZSBhIHN1YnJlZyk6IERlbGV0ZWQuCisKK1N1biBKdWwgMzAgMTk6MjM6MTMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogU2tpcCBgLWInIGxpa2UgYC1CJywgaW4gMm5kIHNjYW4uCisKKwkqIHhtLXN1bm9zNC5oOiBEZWxldGVkLgorCSogdG0tc3BhcmMuaCwgdG0tc3VuMy5oOiBEZWZpbmUgTElOS19TUEVDIGhlcmUgaW5zdGVhZC4KKwkqIHRtLXN1bjRvczMuaDogVW5kZWYgaXQgaGVyZS4KKwkqIHRtLXN1bjNvczMuaCwgdG0tc3VuM29zM25mLmg6IE5ldyBmaWxlcyB0byB1bmRlZiBMSU5LX1NQRUMuCisJKiBjb25maWcuZ2NjOiBVc2UgdGhvc2UgbmV3IGZpbGVzIHdoZXJlIG5lZWRlZC4KKworCSogY29uZmlnLmdjYzogRGVsZXRlIHN1bjMtZnBhIGFuZCBzdW4zLW9zNC1mcGEuCisJKiB0bS1zdW4zLWZwYS5oOiBEZWxldGVkLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBNZW50aW9uIGV2ZW4gbm9uLWV4IGZpbGVzIGZvciAtTS4KKworCSogb3V0LW1pcHMuYyAoYWRkcl9jb21wZW5zYXRlKTogSGFuZGxlIEhJbW9kZS4KKwkqIG1pcHMubWQgKFNldCBISSBmcm9tIHN1YnJlZyBvZiBTSSBydWxlKToKKwlBbGxvdyBvcGVyYW5kIGluIG1lbW9yeS4KKworCSogbWlwcy5tZCAoY21wcWksIGNtcGhpKTogUGF0dGVybnMgZGVsZXRlZC4KKwkoY21wc2ksIGNtcHNmLCBjbXBkZik6IENoYW5nZSBwcmVkaWNhdGVzIHRvIHJlZ2lzdGVyX29wZXJhbmQuCisKKwkqIGNleHAueSAocnVsZSBmb3IgPzopOiBSZXN1bHQgaXMgdW5zaWduZWQgaWYgZWl0aGVyIG9wZXJhbmQgaXMuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBJZiBQQVJUSUFMID4gMCwgbG9hZCB0aGUgcGFydGlhbCByZWdzCisJYXQgdGhlIGVuZCwgaW4gY2FzZSB0aGUgcmVzdCBvZiB0aGUgcHVzaCBkb2VzIGEgZnVuY3Rpb24gY2FsbC4KKworCSogcmVsb2FkMS5jIChhbHRlcl9mcmFtZV9wb2ludGVyX2FkZHJlc3Nlcyk6CisJQWZ0ZXIgYWx0ZXJpbmcgYSBQTFVTLCByZS1mZXRjaCBDT0RFIGJlZm9yZSBzY2FubmluZyBzdWJleHBzLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IERvbid0IGNvcHkgdGhlIGFyZyBwb2ludGVyIHZhbHVlCisJaWYgaXQgaXMgYWxzbyB0aGUgZnJhbWUgcG9pbnRlci4gIElmIHdlIGRvIGNvcHkgaXQsCisJaW5oaWJpdCBSRUdfRVFVSVYgbm90ZXMgZm9yIHBhcm1zIGNvcGllZCBpbnRvIHBzZXVkbyByZWdzCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2Zvcl9pbmxpbmUsIGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKToKKwlTZXQgdXAgZmlsZW5hbWUgYW5kIGxpbmVubyBmaWVsZHMgb2YgY29weSBvZiBBU01fT1BFUkFORFMuCisKK1NhdCBKdWwgMjkgMTg6NTg6NDkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEhhbmRsZSBzdHJ1Y3QtdmFsdWUtYWRkcgorCXBhc3NlZCBpbiBtZW1vcnkganVzdCBsaWtlIHRoYXQgcGFzc2VkIGluIHJlZzoKKwlpbiBlaXRoZXIgY2FzZSwgdHJhbnNsYXRlIHRoZSBwc2V1ZG8tcmVnIG1hZGUgaW4KKwlleHBhbmRfZnVuY3Rpb25fc3RhcnQuCisJKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IFBlcm1pdCBpbmxpbmluZyBpbiB0aGF0IGNhc2UuCisJQnV0IHJlamVjdCBpdCBpZiB1c2luZyBwY2Mtc3R5bGUgcmV0dXJuIGNvbnZlbnRpb24uCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogQ29uc2lkZXIgU1RSSUNUX0FMSUdOTUVOVAorCWZvciBBUlJBWV9UWVBFIGp1c3QgYXMgZm9yIFJFQ09SRF9UWVBFLgorCitXZWQgSnVsIDI2IDEyOjU0OjU5IDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgbWlwb3MzKQorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBJZiBXSURUSCBpcyB6ZXJvIGZvciBiaW5hcnkgb3BlcmF0b3IsCisJbG9vayBhdCB0aGUgbW9kZXMgb2YgdGhlIG9yaWdpbmFsIG9wZXJhbmRzLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBTZXQgcHJldl9pbnNuX2V4cGxpY2l0X2NjMCwgZm9yIChzZXQgKGNjMCkgSU5UKS4KKwkocHJlZGVjaWRlX2xvb3BfZW50cnkpOiBMaWtld2lzZS4KKwkoZm9sZF9ydHgpOiBMb29rIGF0IGl0LCBmb3IgKGlmX3RoZW5fZWxzZSAoY2MwKSAuLi4pLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogUGFzcyBiYWNrIHJldHVybiB2YWx1ZSBmcm9tCisJX19idWlsdGluX3NhdmVyZWdzLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IEFsbG93IGFyZyBwb2ludGVyIHJlZyBub3QgdG8gYmUgZml4ZWQuCisJSWYgaXQgaXMgbm90LCBjb3B5IGl0IHRvIGEgcHNldWRvIHJlZyBhbmQgdXNlIHRoYXQgbGF0ZXIgb24uCisKK1R1ZSBKdWwgMjUgMTU6NDI6MDQgMTk4OSAgUmljaGFyZCBNLiBTdGFsbG1hbiAgKHJtcyBhdCBtaXBvczMpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBOZXcgYnVpbHRpbiBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZS4KKwkqIHRyZWUuaCwgYy1kZWNsLmM6IEFkZGl0aW9uYWwgc3VwcG9ydC4KKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IFRyZWF0IGFyZyBwb2ludGVyIGxpa2Ugc3RhY2sgcG9pbnRlci4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6CisJUGFzcyAodHJlZSkwIGFzIFRZUEUgYXJnIHRvIEZVTkNUSU9OX0FSRywgZXRjLgorCitNb24gSnVsIDI0IDExOjE4OjEwIDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgbWlwb3MzKQorCisJKiBsb29wLmMgKHJlZ3NfbWF0Y2hfcCk6IEZpeCBicmFpbm8uCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2Zvcl9pbmxpbmUsIGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKToKKwlNYWtlIEFTTV9PUEVSQU5EUyBjb25zdHJhaW50IHZlY3RvciBiZSBzaGFyZWQgbGlrZSBvcGVyYW5kIHZlY3Rvci4KKworCSogeG0taXJpcy5oOiBOZXcgZmlsZS4KKworCSogTWFrZWZpbGUgKHN0YWdlNCk6IE5ldyB0YXJnZXQuCisKKwkqIGdudWxpYjIuYyAoYmFkZCwgYnN1YiwgYm11bCwgYmRpdik6IElmIHdhbnQgbG9uZyB2YWx1ZSBmcm9tCisJYXJpdGhtZXRpYywgd2lkZW4gdGhlIG9wZXJhbmRzIGZpcnN0LgorCShfX2Rpdl9pbnRlcm5hbCBha2EgYmRpdik6IFJlbmFtZSB0byBfX2JkaXYuCisKKwkqIHNwYXJjLm1kIChzZXEgY29tYmluYXRpb24gcGF0dGVybnMpOiBGdWxseSBpbml0aWFsaXplIGNjX3N0YXR1cy4KKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IExpa2UgSnVseSAxOSBjaGFuZ2UsIGZvciBCTEttb2RlLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBTdGFjay1yZXN0b3JlIGZvciBhbGxvY2EKKwlpcyBub3cgZG9uZSBhZnRlciB0aGUgcmV0dXJuX2xhYmVsLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IFNldCBNQVlCRV9ORVZFUiBmb3IgY29uZGl0aW9uYWwganVtcCB0byBsb29wYmVnLgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBBbGxvdyBtYXBwaW5nIG9mIGhhcmQgcmVncy4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEFsd2F5cyBjcmVhdGUgcGFybV9tYXAuCisJSGFuZGxlIHN0cnVjdHVyZSB2YWx1ZSB0aGF0IHdheSBpZiBuZWMuIGV2ZW4gaWYgbm8gcGFybXMuCisJT3RoZXJ3aXNlLCBmaW5kIHRoZSBwc2V1ZG8gdXNlZCBpbiB0aGUgZnVuY3Rpb24gdG8gaG9sZCB0aGUKKwlzdHJ1Y3R1cmUgYWRkcmVzcywgYW5kIG1hcCBpdCB0byBhIG5ldyBwc2V1ZG8uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOgorCVVzZSBtYXJrX2FkZHJlc3NhYmxlIHRvIG1ha2UgRk5ERUNMIGFkZHJlc3NhYmxlLgorCSogYy10eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IE5vIGxvbmdlciBzdGF0aWMuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IE1vZGlmeSBsYXN0IGNoYW5nZTogZG9uJ3QgY2Fub25fcmVnCisJZm9yIGhhcmQgcmVncyBpbnNpZGUgY2xvYmJlcnMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBBTElHTiBhcmcgdG8gc3RvcmVfZmllbGQgY29tZXMgZnJvbQorCXRoZSBzdHJ1Y3R1cmUsIG5vdCBmcm9tIHRoZSB2YWx1ZSBzdG9yZWQuCisKK0ZyaSBKdWwgMjEgMTY6MjM6NDUgMTk4OSAgUmljaGFyZCBNLiBTdGFsbG1hbiAgKHJtcyBhdCBtaXBvczMpCisKKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBEb24ndCB3YXJuIGZvciBhIGNhc3QKKwlhcm91bmQgYSBNT0RJRllfRVhQUi4KKworCSogdG0taHA5azMyMC5oIChQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4pOiBVbmRlZmluZSBpdC4KKwkoQ1BQX1BSRURFRklORVMpOiBBZGQgc29tZS4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9hbmRfY29uc3RfaW50KToKKwlTaW1wbGlmeSAoYW5kIChhc2hpZnRydCAoemVyb19leHRlbmQgRk9PKSBOKSBNKS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IFdoZW4gd2lkZW5pbmcsCisJZm9yIHNvbWUgb3BlcmF0aW9ucyB3ZSBuZWVkIG5vdCBhY3R1YWxseSBleHRlbmQuCisKK1RodSBKdWwgMjAgMTY6MTY6MzUgMTk4OSAgUmljaGFyZCBNLiBTdGFsbG1hbiAgKHJtcyBhdCBtaXBvczMpCisKKwkqIE1ha2VmaWxlIChpbnNuLWVtaXQubyk6IERlcGVuZCBvbiBpbnNuLWNvZGVzLmguCisKKwkqIHN0bXQuYyAoY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcpOiAKKwlIYW5kbGUgYWxsIGNhc2VzIGZvciBUWVBFX05BTUUgb2YgZW51bSB0eXBlLgorCitXZWQgSnVsIDE5IDE3OjAwOjM5IDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgbWlwb3MzKQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGRfY29udmVydCk6IERvbid0IGZhaWwgdG8gZm9yY2VfZml0X3R5cGUuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBXaGVuIHB1c2hpbmcgb25seSBwYXJ0IG9mIHNjYWxhciBvbiBzdGFjaywKKwlhZGp1c3Qgc3RhY2sgb2Zmc2V0IG5vdCB0byBjb3VudCB0aGUgd29yZHMgbm90IHB1c2hlZC4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogQWx3YXlzIHB1dCByZXR1cm4gc3RydWN0dXJlIGFkZHJlc3MKKwlpbiByZXR1cm4gcmVnaXN0ZXIuCisKKwkqIGMtdHlwZWNrLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IEFzc3VtZSAwIGZvciBuYW1lbGVzcyBmaWVsZC4KKworCSogcmVjb2cuYyAoZ2VuZXJhbF9vcGVyYW5kLCBtZW1vcnlfb3BlcmFuZCk6CisJQ2hlY2sgdmFsaWRpdHkgb2YgbWVtIGFkZHJlc3MgdXNpbmcgdGhlIG1vZGUgb2YgdGhlIE1FTS4KKworCSogZml4aW5jbHVkZXM6IFdoZW4gY2FsbGluZyBlZ3JlcCwgdXNlIHJlZGlyZWN0LCBub3QgLXMuCisKK1R1ZSBKdWwgMTggMTE6MTg6NTUgMTk4OSAgUmljaGFyZCBNLiBTdGFsbG1hbiAgKHJtcyBhdCBtaXBvczMpCisKKwkqIE1ha2VmaWxlIChib290c3RyYXAqKTogUGFzcyB2YWx1ZSBvZiBsaWJkaXIgZG93bi4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRG8gY2Fub25fcmVnIG9uIGFueSBDTE9CQkVScyBhbmQgVVNFcy4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRG9uJ3QgdXNlIG5vX2xhYmVsc19iZXR3ZWVuX3AgdG8gY2hlY2sKKwlmb3IganVtcCB0byBmb2xsb3dpbmcgbGFiZWw7IGZpbmQgZm9sbG93aW5nIGxhYmVsIGFuZCBjb21wYXJlLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3Qgc3Vic3RpdHV0ZSBpbnRvIHN1YnJlZyh4KT15CisJaWYgbW9kZXMgb2YgeCBhbmQgeSBhcmUgbm90IHRpZWFibGUuCisKKwkqIG91dC1pMzg2LmMgKGNhbGxfdG9wX2RlYWRfcCk6IERvbid0IGZhaWwgdG8gY2hlY2sKKwl0aGUgcnR4IGNvZGUgb2YgdGhlIGluc25zIHRoZW1zZWx2ZXMuCisKKwkqIGkzODYubWQgKHRzdHNmLCB0c3RkZik6IERvbid0IGRpc2NhcmQgVE9TIGlmIG5vdCBkZWFkLgorCisJKiBzdHVwaWQuYzogRG9uJ3QgdXNlIHJlZ3Mgd2l0aCBQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1AKKwlmb3IgcHNldWRvcyB3aGljaCBsaXZlIGFjcm9zcyBqdW1wcyBvciBsYWJlbHMuCisJKHN0dXBpZF9saWZlX2FuYWx5c2lzKTogVXBkYXRlIGxhc3RfanVtcF9zdWlkLCBsYXN0X2xhYmVsX3N1aWQuCisJKHN0dXBpZF9tYXJrX3JlZnMpOiBVc2UgdGhvc2UgdG8gc2V0IHJlZ19jcm9zc2VzX2Jsb2Nrcy4KKwkoc3R1cGlkX2ZpbmRfcmVnKTogQ2hlY2sgdGhhdCBkYXRhLCBwYXNzZWQgZnJvbSBzdHVwaWRfbGlmZV9hbmFseXNpcy4KKworCSogdG9wbGV2LmMgKG1haW4pOiBBdm9pZCB1c2luZyBjYWRkcl90LgorCisJKiBtaXBzLm1kIChpbnZlcnRlZCBiZ2V1IHBlZXBob2xlKTogVHlwbyBpbiBvcGNvZGUuCisKK01vbiBKdWwgMTcgMTI6Mjk6NDUgMTk4OSAgUmljaGFyZCBNLiBTdGFsbG1hbiAgKHJtcyBhdCBtaXBvczMpCisKKwkqIGkzODYubWQgKG11bGIgcGF0dGVybnMpOiBUdXJuZWQgb2ZmIGR1ZSB0byBhc3NlbWJsZXIgYnVnLgorCisJKiBydGwuYyAocmVhZF9uYW1lKTogVXNlIDAsIG5vdCBOVUxMLCBmb3IgY2hhcmFjdGVyLgorCisJKiBhbGxpYW50Lm1kIChtb3ZxaSk6IFR5cG9zIGluIG1vdiBvcGNvZGVzLgorCisJKiB0bS1zcGFyYy5oLCB0bS1zcHVyLmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOgorCVVzZSBDT05TVF9ET1VCTEVfTE9XLCBldGMuIAorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBDaGVjayB2YWx1ZSBvZiBFWElUX0lHTk9SRV9TVEFDSywKKwlub3QganVzdCB3aGV0aGVyIGRlZmluZWQuCisKKwkqIGkzODYubWQgKHNlcSwgZXRjLik6IE5ldyBwYXR0ZXJucy4KKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZ3MpOiBJZiByZXN1bHQgaXMgd3JvbmcgbW9kZSwgCisJZW5zdXJlIHJlc3Qgb2YgYml0cyBhcmUgY2xlYXJlZC4KKwlCZWZvcmUgc3RvcmluZyBsb3cgcGFydCBvZiBUQVJHRVQsIGVtaXQgYSBDTE9CQkVSIGZvciBpdC4KKworCSogaTM4Ni5tZCAobG9hZCBhZGRyZXNzKTogVXNlIGFuIGltbWVkaWF0ZSBhZGQgaWYgcG9zc2libGUuCisKKwkqIGkzODYubWQgKGFzaGxzaTMpOiBEb24ndCBnZW5lcmF0ZSBsZWFsOyBzaGlmdCBpcyBmYXN0ZXIuCisKKwkqIE5vdyBzdHJ1Y3RfdmFsdWVfcnR4IGlzIDAgdG8gdHJlYXQgaXQgYXMgYSBwYXJtLgorCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEltcGxlbWVudCB0aGF0LgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBmcmVhayBvdXQuCisJKiB0bS1hcG9sbG82OC5oIChTVFJVQ1RfVkFMVUUpOiBNYWtlIGl0IDAuCisKKwkqIE9uIDM4NiwgY2FsbGVkIGZ1bmN0aW9uIG11c3QgcG9wIHRoZSBzdHJ1Y3R1cmUgdmFsdWUgYWRkcmVzcy4KKwkqIHRtLWkzODYuaCAoU1RSVUNUX1ZBTFVFKTogRG9uJ3QgY2hhbmdlIHRoaXMuCisJQWRkcmVzcyBpcyBub3cgcHVzaGVkIGJ1dCBub3QgY291bnRlZCBhcyBhIHBhcm0uCisJKiBvdXQtaTM4Ni5jIChmdW5jdGlvbl9lcGlsb2d1ZSk6IFVzZSByZXQgJDQgdG8gcG9wIHRoYXQgYWRkcmVzcy4KKwkqIG91dHB1dC5oOiBEZWNsYXJlIHRoZSBjdXJyZW50X2Z1bmN0aW9uXy4uLiB2YXJpYWJsZXMuCisJKiBmaW5hbC5jOiBJbmNsdWRlIG91dHB1dC5oLgorCisJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IEluc2VydCBtaXNzaW5nIGBlbHNlJywgdmFsaWRhdGluZyByZWcgZGVjbC4KKworRnJpIEp1bCAxNCAxNDoxMjoxNyAxOTg5ICBSaWNoYXJkIE0uIFN0YWxsbWFuICAocm1zIGF0IG1pcG9zMykKKworCSogb3V0LXNwYXJjLmMsIG91dC1zcHVyLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6CisJRml4ZWQgdHlwbywgYWRkcmVnMCA9PiBhZGRyZWcxLgorCisJKiBjLWRlY2wuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mc2hvcnQtZW51bXMuCisJKGZpbmlzaF9lbnVtKTogSW4gdGhhdCBjYXNlLCBnaXZlIGVudW0gbWluaW11bSBudW1iZXIgb2YgYnl0ZXMuCisJKiB0b3BsZXYuYyAobWFpbik6IERlZmF1bHQgZmxhZ19zaG9ydF9lbnVtcy4KKwkqIHRvcGxldi5jLCBmbGFncy5oIChmbGFnX3Nob3J0X2VudW1zLCBmbGFnX3NpZ25lZF9jaGFyKTogCisJRGVmaW5lIHRob3NlIGZsYWdzIGhlcmUsIG5vdCBpbiBjLWRlY2wuYyBhbmQgYy10cmVlLmguCisKKwkqIGkzODYubWQgKG11bHFpMywgdW11bHFpMyk6IE5ldyBwYXR0ZXJucy4KKworCSogYy1jb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IFRpZ2h0ZXIgcmVzdHJpY3Rpb25zIG9uCisJZGlzdHJpYnV0aW5nIHRydW5jYXRpb24gdGhyb3VnaCBtYXgsIG1pbiwgYW5kIG11bHRpcGxpY2F0aW9uLgorCUlmIG9wZXJhbmRzIHdlcmUgZXh0ZW5kZWQgZnJvbSB1bnNpZ25lZCwgbWFrZSB0aGUgb3BlcmF0aW9uCisJdW5zaWduZWQuCisKKwkqIGNjY3AuYyAobWFpbik6IEZpeCBidWcgd2hlcmUgI2luY2x1ZGUgPC4uLj4sIHdoZW4gLUktIHdhcyB1c2VkLAorCWZhaWxlZCB0byBzZWFyY2ggc3RhbmRhcmQgZGlycyBhbmQvb3Igc2VhcmNoZWQgc29tZSBkaXJzCisJaW50ZW5kZWQgb25seSBmb3IgI2luY2x1ZGUgIi4uLiIuCisKKwkqIHRtLW1pcHMuaCAoRlVOQ1RJT05fUFJPTE9HVUUsRlVOQ1RJT05fRVBJTE9HVUUpOgorCUluY3JlbWVudCBwdXNoX2xvYyBhZnRlciBzdG9yZSBvciBsb2FkLCBub3QgYmVmb3JlLgorCitUaHUgSnVsIDEzIDExOjI0OjMwIDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgbWlwb3MzKQorCisJKiBlbWl0LXJ0bC5jIChhZGRfaW5zbl9hZnRlcik6IERvbid0IHVwZGF0ZSBsYXN0X2luc24KKwlpZiBpbnNuIGlzIGluIGEgc2VxdWVuY2UuICBJbnN0ZWFkLCB1cGRhdGUgZW5kIG9mIHNlcXVlbmNlLgorCisJKiBzdG10LmMgKGZpeHVwX3Zhcl9yZWZzKTogVXBkYXRlIGVuZCBvZiBzdGFja2VkIHNlcXVlbmNlLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFNldCByZXN1bHQgcnRsIGJlZm9yZSBhc3NpZ25fcGFybXMuCisKKwkqIG9wdGFicy5jIChlbWl0X3Vub3BfaW5zbik6IFNldCBQUkVWX0lOU04gYWZ0ZXIgcHJlbGltaW5hcmllcy4KKworCSogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IERvIENPTlZFUlRfRVhQUiBsaWtlIE5PUF9FWFBSLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IE1ha2Ugc3VyZSBwYXJtX2JpcnRoX2luc24KKwlpcyBhIE5PVEUuCisKKwkqIE1ha2VmaWxlIChjbGVhbik6IERlbGV0ZSB0bXAtaW5zbi0qLgorCitXZWQgSnVsIDEyIDE0OjI0OjEyIDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgbWlwb3MzKQorCisJKiBpMzg2Lm1kIChtdWxxaTMpOiBSZXN0cmljdCBvcGVyYW5kIDIgdG8gYHEnIHJlZy4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBDaGVjayBIQVJEX1JFR05PX01PREVfT0sKKwlmb3IgcmVncyB0byBiZSBpbmhlcml0ZWQuCisJQWxzbyBjaGVjayBIQVJEX1JFR05PX01PREVfT0sgYXQgZW5kIGZvciBtb2RlcyBvZiBib3RoCisJcmVsb2FkX2luIGFuZCByZWxvYWRfb3V0IGFzIHdlbGwgYXMgcmVsb2FkX21vZGUuCisKKwkqIE1ha2VmaWxlIChtYWtldGVzdCk6IFVwZGF0ZSBmb3IgY29uZmlnIHN1YmRpci4KKworVHVlIEp1bCAxMSAxNjoyOTo1NyAxOTg5ICBSaWNoYXJkIE0uIFN0YWxsbWFuICAocm1zIGF0IG1pcG9zMykKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF90cmVlKTogQ29weSBUUkVFX1VTRUQgb2YgZWFjaCBMRVRfU1RNVC4KKworCSogbWFrZS1jYzEuY29tOiBDaGFuZ2VzIGJ5IEFuZ2VsIExpLgorCURlZmluZSB2YXJpYWJsZXMgQ0MsIENGTEFHUywgTERGTEFHUywgTElCUy4KKwlVc2UgTElCUiBsaWJyYXJ5LCBub3QgTElCLiAgU3BlY2lmeSBhIC9JTkMgaW4gQ0ZMQUdTLgorCVVzZSBNQ1IgdG8gcnVuIHRoZSBnZW4qIGZpbGVzLiAgQWRkIHNvbWUgY29tbWVudHMuCisJKiBtYWtlLWNjY3AuY29tOiBTaW1pbGFyLgorCSogY29uZmlnLWdjYy5jb206IE5ldyBmaWxlLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IENvbXB1dGUgcGFybSBhbGlnbm1lbnQgZnJvbSBwYXNzZWQgdHlwZS4KKworCSogYy10eXBlY2suYyAoYWN0dWFscGFyYW1ldGVybGlzdCk6IEluc3RlYWQgb2YgdHJ1bmNhdGluZworCWFuZCB0aGVuIHByb21vdGluZyBmb3IgUFJPTU9URV9QUk9UT1RZUEVTLCBnbyBzdHJhaWdodCB0byBpbnQuCisKKwkqIGMtcGFyc2UueSAoc2V0c3BlY3MpOiBTYXZlIG9sZCBjdXJyZW50X2RlY2xzcGVjcyBvbiBhIHN0YWNrLgorCShkZWNsLCBjb21wb25lbnRfZGVjbCk6IFJlc3RvcmUgZnJvbSB0aGF0IHN0YWNrLgorCitXZWQgSnVsICA1IDE1OjAxOjAwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gICh0aWVtYW5uIGF0IHlhaGkpCisKKwkqIHRtLWFpeDM4Ni5oLCB4bS1haXgzODYuaDogTmV3IGZpbGVzLgorCisJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEhhbmRsZSBlaXRoZXIgdGVzdCBvciBjb21wYXJlCisJZm9yIGluc24gdHdvIGJlZm9yZSBsb29wIGVuZDsgZGV0ZWN0IGFuZCByZWplY3QgYW55dGhpbmcgZWxzZS4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCwgZXhwYW5kX2J1aWx0aW4pOiBJZiBhbGxvY2EgaXMgZG9uZSwKKwlzZXQgY3VycmVudF9mdW5jdGlvbl9jYWxsc19hbGxvY2EuCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBJZiBzbywgZ2VuZXJhdGUgY29kZSB0byBzYXZlIGFuZAorCXJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIsIGlmIG5vdCBFWElUX0lHTk9SRV9TVEFDSy4KKworCSogbnMzMmsubWQgKG1vdnNpKTogRml4ZXMgZm9yIG1vdmluZyBmcm9tIGZwIG9yIHNwLgorCisJKiB0bS1taXBzLmggKEFTTV9PVVRQVVRfQVNDSUkpOiBTdGFydCBuZXcgLmFzY2lpIGV2ZXJ5IDI1NiBjaGFycy4KKworVHVlIEp1bCAgNCAxMTowMTowMCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAodGllbWFubiBhdCB5YWhpKQorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IERvbid0IGRlcGVuZCBvbgorCXJlbG9hZF9zcGlsbF9pbmRleCB3aGVuIGNhbmNlbGxpbmcgaW52YWxpZCBpbmhlcml0YW5jZS4KKwlBbHNvLCBhYm9ydCBpZiB0cnlpbmcgdG8gcHJlc2VydmUgZGVhdGggaW5mbworCW9uIGEgc3BpbGwgcmVnIHVzZWQgaW4gb3BlcmFuZCBhZGRyZXNzaW5nLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBEb24ndCBmb2xkICJmb28iW25dIGhlcmUuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRG8gaXQgaGVyZS4KKwlIYW5kbGUgd2lkZSBzdHJpbmdzIGNvcnJlY3RseS4KKworCSogaTM4Ni5tZCAobW92c2YsbW92ZGYpOiBEaXNhbGxvdyBtZW0tbWVtIG1vdmVzLgorCUVuYWJsZSBtZW0tdG8tcmVnIG1vdmVzLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX3tzdHJ1Y3QsZW51bX0pOiBXYXJuIGlmIGluc2lkZSBwYXJtIGRlY2xzLgorCShpbl9wYXJtX2xldmVsX3AsIGRlY2xhcmVfcGFybV9sZXZlbCk6IFJlY29yZCB3aGVuIGluc2lkZS4KKwkqIGMtcGFyc2UueSAocGFybWxpc3QsIHBhcm1saXN0X29yX2lkZW50aWZpZXJzKTogQ2FsbAorCWRlY2xhcmVfcGFybV9sZXZlbC4KKworCSogYy1kZWNsLmMgKHBhcm1saXN0X3RhZ3Nfd2FybmluZyk6IFJldmlzZSB3YXJuaW5nIG1lc3NhZ2UgdGV4dC4KKworCSogdG0taHA5azMyMC5oIChBU01fU1BFQyk6IFBhc3MgLVYgc3dpdGNoIHRvIGFzc2VtYmxlci4KKworCSogdG0tc3VuMzg2LmggKEFTTV9TVEFSVF9GSUxFKTogVHJ1bmNhdGUgZmlsZW5hbWUgdG8gMTQgY2hhcnMuCisKKwkqIGMtdHlwZWNrLmMgKGRlY2xfY29uc3RhbnRfdmFsdWUpOiBVc2Ugb25seSBsaXRlcmFsIHZhbHVlcy4KKworU2F0IEp1bCAgMSAxNzoyOTo1NCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAodGllbWFubiBhdCB5YWhpKQorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBEb24ndCBtYWtlIG5lc3RlZCBTVUJSRUdzLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFNldCBuZXcgZ2xvYmFsCisJY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3BvaW50ZXIuCisKKwkqIHN0bXQuYyAoZ2V0X2ZyYW1lX3NpemUpOiBSZXR1cm4gdGhlIHNpemUsIG5vdCB0aGUgb2Zmc2V0LgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBXaGVuIHNldHRpbmcgRlBfREVMVEEsCisJY29tcGVuc2F0ZSBmb3IgdGhpcyBjaGFuZ2UuCisJKiB0bS1hbGxpYW50LmgsdG0tbWlwcy5oLHRtLXNwYXJjLmgsdG0tdGFob2UuaAorCShGVU5DVElPTl9QUk9MT0dVRSxGVU5DVElPTl9FUElMT0dVRSk6IENvbXBlbnNhdGUuCisKKwkqIG91dC1taXBzLmMgKGZ1bmN0aW9uX2FyZyk6IFJldHVybiAwIGZvciBCTEttb2RlLgorCisJKiB0bS1taXBzLmggKEZVTkNUSU9OX0lOQ09NSU5HX0FSRyk6IERlbGV0ZTsgbm8gcmVnaXN0ZXIgd2luZG93cy4KKwkqIG91dC1taXBzLmMgKGZ1bmN0aW9uX2luYXJnKTogRGVsZXRlOyBubyBsb25nZXIgdXNlZC4KKworCSogbWlwcy5tZCAoYWRkc2kzKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQgZm9yIG9wZXJhbmRzIDAsMS4KKwkobG9hZCBhZGRyZXNzKTogTmV3IHBhdHRlcm4sIGZvbGxvd2luZyBtb3ZzaS4KKwkoZml4X3RydW5jKik6IFVzZSB0cnVuYyBpbnNuLCBub3QgY3Z0LgorCShjbXBmcyArIGJndCBwZWVwaG9sZSk6IE9wZXJhbmRzIHdlcmUgYmFja3dhcmRzIGluIHRlbXBsYXRlLgorCisJKiBnY2MuYyAobWFpbik6IFJlY29yZCBpbiBleHBsaWNpdF9saW5rX2ZpbGVzIHdoaWNoIGlucHV0IGZpbGVzIGdvCisJc3RyYWlnaHQgdG8gbGlua2VyLiAgSWYgbGlua2VyIGlzIG5vdCBydW4sIGNvbXBsYWluIGFib3V0IHRoZW0uCisJKGV4ZWN1dGUpOiBJbmNyZW1lbnQgZXhlY3V0aW9uX2NvdW50LCB0byBzaG93IHdlIHdlcmUgY2FsbGVkLgorCisJKiBnY2MuYyAodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogQ2hlY2sgQVNNX1NQRUMsIENDMV9TUEVDLCBldGMuLAorCXNvIHdlIGZpbmQgYWxsIHN3aXRjaGVzIHRoYXQgY291bGQgYmUgdmFsaWQuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBQb3NpdGlvbiBmaWVsZHMgYWNjb3JkaW5nIHRvCisJREVDTF9PRkZTRVQ7IGRvbid0IHRyeSB0byBjb21wdXRlIGFsaWdubWVudCBoZXJlLgorCisJKiB0bS1zcGFyYy5oIChQQ0NfQklURklFTERfVFlQRV9NQVRURVJTKTogRGVmaW5lIHRoaXMuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBGaXggc3R1cGlkIGVycm9yIGluIGxhc3QgY2hhbmdlLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogSWYgcmVkZWNsYXJpbmcgYnVpbHRpbiwgZ2l2ZSBlcnJvciBpcworCXR5cGUgbWlzbWF0Y2hlZDsgb3RoZXJ3aXNlIHdhcm4gb25seSBpZiAtVy4KKworCSoganVtcC5jIChqdW1wX2JhY2tfcCk6IFZlcmlmeSB0aGF0IFBSRVYgaXMgbm90IG51bGwuCisKK01vbiBKdW4gMjYgMTM6NTA6MjggMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IElmIG51bWJlciBvZiByZWxvYWRzIG5lZWRpbmcKKwlzcGlsbCByZWdzIGV4Y2VlZHMgbl9zcGlsbHMsIGRvbid0IGluaGVyaXQgYW55IHJlbG9hZHMuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfcmVjb3JkX3R5cGVfbmFtZSk6IER1bWIgZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBFeHRlbmQgbGFzdCBjaGFuZ2U6IGRvbid0IHVzZQorCWVxdWl2IHJlZyBpZiByZWcgaXMgaW4gdXNlIGF0IHNhbWUgc3RhZ2Ugb2YgaW5zbiwgZWl0aGVyLgorCitTdW4gSnVuIDI1IDAwOjAwOjU2IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IERvbid0IHVzZSBhbiBlcXVpdmFsZW50IHJlZ2lzdGVyCisJdG8gcmVsb2FkIGZyb20sIGlmIHRoYXQgcmVnaXN0ZXIgd2FzIHVzZWQgZm9yIHJlbG9hZGluZworCWVhcmxpZXIgaW4gdGhpcyBpbnNuLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3JlY29yZF90eXBlX25hbWUpOiBIYW5kbGUgYSBUWVBFX0RFQ0wgYXMgdGhlCisJdHlwZSBuYW1lLiAgR2V0IHJpZCBvZiBUWVBFX1RBR19OQU1FIGFzIHNlcGFyYXRlIG1hY3JvLgorCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbik6IEFyZ3MgdG8gbWVtY21wIGFyZSBhZGRyZXNzZXMsIG5vdCBibG9ja3MuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogVHlwbywgY2xlYXJpbmcgcmVsb2FkX292ZXJyaWRlX2luLgorCisJKiB0bS1pMzg2Lmg6IEFkZCByZWdpc3RlciBjbGFzc2VzIFNJUkVHIGFuZCBESVJFRy4KKwkoZW51bSByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUyk6IERlZmluZSBjbGFzcyBuYW1lcy4KKwkoUkVHTk9fUkVHX0NMQVNTLCBSRUdfQ0xBU1NfQ09OVEVOVFMpOiBEZWZpbmUgdGhlaXIgY29udGVudHMuCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IERlZmluZSBsZXR0ZXJzIGBTJyBhbmQgYEQnLgorCitTYXQgSnVuIDI0IDAwOjE3OjE2IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGtlZXBfbmV4dF9sZXZlbCk6IE5ldyBmdW5jdGlvbi4KKwkoc3RydWN0IGJpbmRpbmcpOiBOZXcgc2xvdCBga2VlcCcgc2F5cyBtYWtlIGEgTEVUX1NUTVQgZm9yIHRoaXMgbGV2ZWwuCisJKHB1c2hsZXZlbCwgcG9wbGV2ZWwpOiBJbXBsZW1lbnQgdGhhdC4KKwkqIGMtcGFyc2UueSAoc3RtdCBleHBycyk6IENhbGwga2VlcF9uZXh0X2xldmVsLgorCisJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogSGFuZGxlIFJFRkVSRU5DRV9UWVBFLCBNRVRIT0RfVFlQRS4KKwlDb3JyZWN0IGZvciBzaXplIGxlc3MgdGhhbiAwLgorCShwbGFpbl90eXBlKTogQ29ycmVjdCBmb3Igc2l6ZSBsZXNzIHRoYW4gMC4KKworCSogZ2xvYmFsLWFsbG9jLmMgKG1hcmtfcmVnX3NldCk6IEZvciBDTE9CQkVScywgY2FsbCBtYXJrX3JlZ19jbG9iYmVyLgorCisJKiByZWxvYWQxLmMgKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IEFtb25nIHJlZ3MgZXhwbGljaXRseSB1c2VkLAorCXByZWZlciB0aG9zZSB1c2VkIGxlc3Mgb2Z0ZW4uCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgd2UgZmluZCBhbHRlcm5hdGUgcGxhY2UKKwl0byByZWxvYWQgZnJvbSwgdmVyaWZ5IGl0IGFmdGVyIGFsbCByZWxvYWRzIGFzc2lnbmVkLgorCU5ldyB2YXJpYWJsZSByZWxvYWRfb3ZlcnJpZGVfaW4gdXNlZCBmb3IgdGhpcy4KKworCSogY29tYmluZS5jIChyZWNvcmRfZGVhZF9hbmRfc2V0X3JlZ3MpOiBMb29rIGluc2lkZSBTSUdOX0VYVEVORCBhbmQKKwlTVFJJQ1RfTE9XX1BBUlQgZm9yIHBsYWNlIGJlaW5nIHNldC4KKwkoc3Vic3QpOiBXaGVuIHVzaW5nIHJlZ19sYXN0X3NldCB0byBmaW5kIHdoYXQgYSByZWdpc3RlciBjb250YWlucywKKwl2ZXJpZnkgdGhlIGVudGlyZSByZWdpc3RlciB3YXMgc2V0LgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogUmVwb3J0IGludmFsaWQgcmVnaXN0ZXIgbmFtZS4KKworRnJpIEp1biAyMyAxMzoxOTo0MSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLWhwOWszYnNkLmg6IE5ldyBmaWxlLgorCSogY29uZmlnLmdjYzogTmV3IHRhcmdldCBocDlrMzIwLWJzZC4KKworCSogZ2NjLmMgKHJlY29yZF90ZW1wX2ZpbGUpOiBEb24ndCBhZGQgYSBuYW1lIHR3aWNlIHRvIG9uZSBxdWV1ZS4KKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogQ2FsbCB3YXJuX2lmX3VudXNlZF92YWx1ZS4KKwkod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBDb2RlIGV4dHJhY3RlZCBmcm9tIGV4cGFuZF9leHByX3N0bXQuCisJUmVjdXJzZSB0byBoYW5kbGUgQ09NUE9VTkRfRVhQUi4gIERvbid0IHdhcm4gYWJvdXQgQ09ORF9FWFBSLgorCisJKiB0bS1lbmNvcmUuaCAoREJYX1JFR0lTVEVSX05VTUJFUik6IE92ZXJyaWRlIHRtLW5zMzJrLmg7CisJcmV0dXJuIG9wZXJhbmQgdW5jaGFuZ2VkLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRG9uJ3QgdXNlIHJlY29nX21lbW9pemVkCisJb24gYW4gYXNtLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9pbnNuKTogVXBkYXRlIGxhc3RfaW5zbi4KKwkqIGVtaXQtcnRsLmMgKHNldF9sYXN0X2luc24pOiBOZXcgZnVuY3Rpb24uCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUHV0IGEgbm90ZSBhdCBlbmQgb2YgaW5zbiBjaGFpbi4KKworCSogZ2NjLmM6IFB1dCBjcHAgb3V0cHV0IG9mIC5TIGZpbGUgaW50byBhIC5zIGZpbGUuCisKK1RodSBKdW4gMjIgMjI6MTQ6MzUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdW5vcCk6IEVtaXQgcXVldWUgYmVmb3JlIGxpYnJhcnkgY2FsbC4KKwlJdCBpcyBkb25lIHdpdGhpbiBlbWl0X2xpYnJhcnlfY2FsbCwgYW5kIGNzZSBzY3Jld3MgdXAgaWYgdGhlcmUgaXMgYQorCXF1ZXVlZCBpbnNuIGluIHRoZSBtaWRkbGUgb2YgYSBjc2UtYWJsZSBzZXF1ZW5jZS4KKworV2VkIEp1biAyMSAxMTo1NzoyMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW1pcHMuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgLUR1bml4LgorCisJKiByZWxvYWQuYyAoY29tYmluZV9yZWxvYWRzKTogQ29tYmluZWQgcmVsb2FkIG5lZWRlZCBmb3IgZW50aXJlIGluc24uCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBCcmFpbm8gY2hlY2tpbmcgZm9yIG91dC1vZi1yYW5nZSBlc2NhcGUgc2VxLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdW5pb24pOiBIYW5kbGUgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUy4KKwkobGF5b3V0X3N0cnVjdCk6IERvbid0IGxldCBhIGJpdGZpZWxkIGNyb3NzIHRoZSBzdG9yYWdlIHVuaXQKKwlvZiBpdHMgdHlwZSwgaWYgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUy4KKworVHVlIEp1biAyMCAwMDowMzo0OCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChnZXRfb3JfYXNzaWduX2xhYmVsKTogTGV0IENPTlNUQU5UX0FMSUdOTUVOVCBzcGVjaWZ5CisJYWxpZ25tZW50IG9mIHRoZSBjb25zdGFudC4KKwlDT05TVEFOVF9BTElHTk1FTlQgaXMgYSBuZXcgb3B0aW9uYWwgbWFjcm8uCisKKwkqIHZhcmFzbS5jIChmb3JjZV9jb25zdF9tZW0sIGdldF9vcl9hc3NpZ25fbGFiZWwpOgorCU1ha2UgYnVmZmVyIGJpZ2dlci4KKworCSogdG9wbGV2LmMgKHByaW50X3RhcmdldF9zd2l0Y2hfZGVmYXVsdHMpOiBOZXcgZm4gY2FsbGVkIGZvciAtdmVyc2lvbi4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERldGVjdCBlcnJvciBjbG9zaW5nIG91dHB1dCBmaWxlLgorCisJKiBzdG9yLWxheW91dC5jIChmaXh1cF91bnNpZ25lZF90eXBlKTogRG9uJ3Qgc2hpZnQgYnkgMzIuCisKKwkqIHN0bXQuYyAoZW1pdF9jYXNlX25vZGVzKTogUGFzcyBVTlNJR05FRFAgYWxvbmcgdG8gZW1pdF9jbXBfaW5zbi4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBJZiBpbmRleCBpcyBuYXJyb3cgYW5kIGNhbm5vdCBiZQorCWRpcmVjdGx5IGNvbXBhcmVkLCB3aWRlbiBpdCBqdXN0IG9uY2UuCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBTdXBwb3J0IG11bHRpLWNoYXJhY3RlciBjb25zdGFudHMuCisJVGhvcm91Z2ggcmV3cml0ZSBvZiBjaGFyIGNvbnN0YW50IHBhcnNpbmcuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IFJlcGxhY2UgbG9jYWwgZXh0ZXJuIGZ1bmN0aW9uIGRlY2wgd2l0aAorCXByZXZpb3VzIGdsb2JhbCBkZWNsIGlmIGxhdHRlciBpcyBpbmxpbmUsIG9yIGJ1aWx0aW4sIG9yIGhhcworCW1vcmUgYXJnIHR5cGUgaW5mby4KKworCSogaGFyZC1wYXJhbXMuYyAoeG1hbGxvYyk6IERlZmluZSBpdCwgZm9yIGFsbG9jYS5jLgorCisJKiB0bS1ocDlrMzIwLmggKFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVgpOiBPdmVycmlkZSAtRCBpbiBNYWtlZmlsZS4KKworCSogZXhwbWVkLmMgKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IEF2b2lkIHNoaWZ0IGJ5IDMyLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IEVtaXQgYSBOT1RFX0lOU05fRlVOQ1RJT05fQkVHLgorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRm9yIFNEQiBvdXRwdXQsIGRvIHRoZQorCXNkYm91dF9iZWdpbl9mdW5jdGlvbiBhdCB0aGF0IG5vdGUuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgYSByZWxvYWQgcmVnIGluaGVyaXRzCisJZnJvbSBhIHByZXZpb3VzIHJlbG9hZCwgdmVyaWZ5IHNhZmV0eSBhZnRlciBhbGwgcmVsb2FkcyBhcmUgYXNzaWduZWQuCisKKwkqIGMtZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogUmVtb3ZlIG5vLW9wIGNhc3RzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWYgYW4gZWFybHljbG9iYmVyIG9wZXJhbmQgbWF0Y2hlcworCWFuIGlucHV0IG9wZXJhbmQgaXQgaXMgY29uc3RyYWluZWQgdG8gbWF0Y2gsIHRoYXQncyBub3QgYSBwcm9ibGVtLgorCUlmIGFuIGVhcmx5Y2xvYmJlciBvcGVyYW5kIGxvc2VzIGR1ZSB0byBlYXJseWNsb2JiZXIsIGl0cyBtYXRjaGluZworCWlucHV0IG9wZXJhbmQgYWxzbyBsb3Nlcy4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBEb24ndCB1c2UgcmVzdWx0IG9mIGZpbmRfZXF1aXZfcmVnCisJaWYgdGhhdCByZWcgaXMgdXNlZCBmb3IgcmVsb2FkaW5nIGluIGFuIGVhcmxpZXIgcGFydCBvZiB0aGUgaW5zbi4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogSWYgV0lEVEggaXMgMCwgZG9uJ3QgdHJ5IHNpZ24tZXh0ZW5kaW5nIEFSRzAsIEFSRzEuCisKKwkqIE1ha2VmaWxlIChoYXJkLXBhcmFtcyopOiBVc2UgJChPTERDQykuCisKKwkqIGMtdHlwZWNrLmMgKGNfYWxpZ25vZik6IE5vIHdhcm5pbmcgZm9yIC1wZWRhbnRpYy4KKworCSogYy1wYXJzZS55IChyZWFkZXNjYXBlKTogRG9uJ3QgaGF2ZSBib3RoIGVycm9yIGFuZCB3YXJuaW5nCisJb24gb25lIGhleCBlc2NhcGUuCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBUcmVhdCB2ZXJ0aWNhbCB0YWIgYXMgd2hpdGUgc3BhY2UuCisJKHNraXBfd2hpdGVfc3BhY2UpOiBMaWtld2lzZS4KKworCSogYy1wYXJzZS55IChkYXRhZGVmKTogSWYgcGVkYW50aWMsIHdhcm4gZm9yIHN0cmF5IHNlbWljb2xvbi4KKworCSogZXhwci5jIChleHBhbmRfaW5jcmVtZW50KTogUGFzcyBhY2N1cmF0ZSB1bnNpZ25lZHAgYXJnCisJdG8gZXhwYW5kX2JpbmFyeV9vcC4KKworTW9uIEp1biAxOSAxMzozNjoyMCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5nY2MgKG5ld3MsIG5ld3MtZ2FzKTogVXNlIHhtLW02OGsuaC4KKworCSogZmluYWwuYyAob3V0cHV0X2FzbV9sYWJlbCwgb3V0cHV0X2FkZHJfY29uc3QpOiBNYWtlIGJ1ZiBiaWdnZXIuCisKKwkqIGNleHAueSAobWFpbik6IEhhbmRsZSBFT0Ygb24gaW5wdXQuCisJKGxvb2t1cCwgd2FybmluZyk6IFByb3ZpZGUgYXMgYSBkdW1teS4KKwkoaXNfaWRjaGFyLCBpc19pZHN0YXJ0KTogRGVjbGFyZSBhcyB1bnNpZ25lZCBjaGFyLgorCisJKiBjZXhwLnkgKHBhcnNlX2VzY2FwZSk6IFVzZSBUQVJHRVRfTkVXTElORSwgZXRjLiwgYXMgdmFsdWVzLgorCVN1cHBvcnQgaGV4IGVzY2FwZXMuICBXYXJuIGlmIG9jdGFsIG9yIGhleCBlc2NhcGUgZG9lc24ndCBmaXQgaW4gY2hhci4KKworCSogY2V4cC55ICh5eWxleCk6IFNpZ24tZXh0ZW5kIGNoYXIgY29uc3RhbnRzIGlmIGFwcHJvcHJpYXRlLgorCisJKiBnZW5lbWl0LmM6IE1ha2UgaW5zbi1lbWl0LmMgaW5jbHVkZSBpbnNuLWZsYWdzLmguCisKKwkqIGdjYy5jOiBNb3ZlIHJlY29yZF90ZW1wX2ZpbGUgcGFzdCBwYWdlIHdoaWNoIGRlY2xhcmVzIHZmbGFnLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IElmIGNvcHlpbmcgYW4gaW5zbiB3aXRoCisJYSBSRUdfRVFVSVYgbm90ZSwgbWFrZSBhIHNpbWlsYXIgbm90ZS4KKworCSogQWxsb3cgcmVsb2FkIHJlZ3MgdG8gYmUgcmV1c2VkIGZvciBwYXJ0cyBvZiBhbiBpbnNuLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IENsYXNzaWZ5IGVhY2ggcmVsb2FkIGZvciB3aGljaCBwYXJ0CisJb2YgdGhlIGluc24gaXQgaXMgbmVlZGVkIGluLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzcywgZXRjLik6IFBhc3MgZG93biB0aGUgb3ZlcmFsbCBvcGVyYW5kCisJdGhhdCB0aGlzIGlzIHBhcnQgb2YsIHRvIHJlY29yZCBpdCBvbiBhZGRyZXNzIHJlbG9hZHMuCisJKHB1c2hfcmVsb2FkKTogUmVjb3JkIHRoYXQgZm9yIGVhY2ggcmVsb2FkLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDb21wdXRlIG1heGltdW0gbmVlZHMgb2YgYW55IHBhcnQgb2YgdGhlIGluc24uCisJKGNob29zZV9yZWxvYWRfcmVncyk6IFBhcnQgb2Ygb2xkIGNob29zZV9yZWxvYWRfdGFyZ2V0cy4KKwlIYWlyaWVyIGNyaXRlcmlhIGZvciBpbmhlcml0aW5nIHJlbG9hZHMgYW5kIGZvciB3aGljaCBvbmVzIGFyZQorCWF2YWlsYWJsZSBmb3IgdGhlIG5leHQgaW5zbiB0byBpbmhlcml0LgorCShlbWl0X3JlbG9hZF9pbnNucyk6IFRoZSByZXN0IG9mIG9sZCBjaG9vc2VfcmVsb2FkX3RhcmdldHMuCisJRW1pdCByZWxvYWQgaW5zbnMgaW4gcHJvcGVyIG9yZGVyIGFjY29yZGluZyB0byB3aGVyZSB0aGV5IGFyZSBuZWVkZWQuCisJKiBSZWNvcmQgYHJlbG9hZF9yZWdfaW5fdXNlJyBzZXBhcmF0ZWx5IGZvciBlYWNoIHBhcnQgb2YgdGhlIGluc24uCisJKG1hcmtfcmVsb2FkX3JlZ19pbl91c2UpOiBOZXcgZnVuY3Rpb24uCisJKHJlbG9hZF9yZWdfZnJlZV9wLCByZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3ApOiBOZXcgZnVuY3Rpb25zLgorCShyZWxvYWRfcmVnX3JlYWNoZXNfZW5kX3ApOiBOZXcgZnVuY3Rpb24uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBFbWl0IHF1ZXVlIGluIFgrPShZP1o6QSkgb3B0aW1pemF0aW9uLgorCisJKiBydGxhbmFsLmMgKHJ0eF9lcXVhbF9wKTogQ2hlY2sgdmVjdG9ycyBoYXZlIHNhbWUgbGVuZ3RoLgorCitTdW4gSnVuIDE4IDEyOjE2OjE0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogTWF5YmUgd2FybiBpZiB0b3AtbGV2ZWwgb3BlcmF0b3IKKwltYWtlcyBhbiB1bnVzZWQgcmVzdWx0LgorCisJKiBnY2MuYyAoZGVsZXRlX3RlbXBfZmlsZXMsIGRlbGV0ZV9mYWlsdXJlX3F1ZXVlKToKKwlJZiAtdiwgcmVwb3J0IGZhaWx1cmVzIGluIHVubGluay4KKworCSogTWFrZWZpbGUgKGluY2x1ZGVzKTogTmV3IHRhcmdldCB0byBydW4gZml4aW5jbHVkZXMuCisJKGluc3RhbGwpOiBTd2FwIGFybXMgb2YgaWYtc3RhdGVtZW50LgorCitTYXQgSnVuIDE3IDEyOjQxOjUzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3VuaW9uKTogQXJnIHRvIGVycm9yX3dpdGhfZGVjbCB3YXMgbWlzc2luZy4KKworCSogbnMzMmsubWQgKG1vdnNmKTogVXNlIENPTlNUX0RPVUJMRV9MT1cgdG8gZXh0cmFjdCBmcm9tIENPTlNUX0RPVUJMRS4KKworCSogbG9vcC5jIChjb25zZWNfc2V0c19naXYpOiBDaGFuZ2UgdHlwZSBvZiBmb3JjZSwgZm9yY2UyLgorCisJKiBjb21iaW5lLmMgKGR1bXAqKTogRGVjbGFyZSBhcmcgYXMgRklMRSouCisKKwkqIE1ha2VmaWxlIChjbGVhbik6IERlbGV0ZSBoYXJkLXBhcmFtcy4KKworCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogVXNlIGEgc3BlY2lhbCBvYnN0YWNrIGZvciB0aGUgdGVtcG9yYXJ5CisJcmVnc2V0cy4KKworCSogbTY4ay5tZCAoY2xyIHBhdHRlcm4pOiBPbiA2ODAwMCwgdXNlIG1vdmVxIHRvIGNsZWFyIGRhdGEgcmVnLgorCisJKiBndmFyYXJncy5oOiBGaWxlIHZhcmFyZ3MuaCByZW5hbWVkLgorCVRoZSBvbGQgbmFtZSBjb25mbGljdGVkIHdpdGggPHZhcmFyZ3MuaD4sIG5vdyB0aGF0IC1JLiBpcyB1c2VkLgorCSogdHJlZS5jLCBleHByLmMsIGVtaXQtcnRsLmM6IENoYW5nZSAjaW5jbHVkZSBjb21tYW5kcy4KKwkqIE1ha2VmaWxlIChpbnN0YWxsKTogSW5zdGFsbCBndmFyYXJncy5oIHVuZGVyIG5hbWUgdmFyYXJncy5oLgorCSogZ2NjLmM6IEluY2x1ZGUgZ3ZhcmFyZ3MuaCwgbm90IHN5c3RlbSdzIHZhcmFyZ3MuaC4KKworCSogTWFrZWZpbGU6IFVzZSAtSSQoc3JjZGlyKSBiZWZvcmUgLUkkKHNyY2RpcikvY29uZmlnLgorCSogY29uZmlnL3RtLmg6IERlbGV0ZWQ7IGRpZG4ndCB3b3JrIGlmIGNvbmZpZyB3YXMgYSBzeW1saW5rLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBSZWNvcmQgbG9jYXRpb24gb2YgaW5uZXJfZGVzdAorCXNvIGl0IGNhbiBiZSByZXBsYWNlZCBwcm9wZXJseSBpZiBhIG5ldyBNRU0gcnR4IGlzIG1hZGUuCisKK0ZyaSBKdW4gMTYgMTQ6MTc6MjAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtYWtlLWNjMS5jb206IENvbXBpbGUgYW5kIGxpbmsgcnRsYW5hbC5jLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9hcnJheV9yZWYpOiBDYWxsIGZvbGQgb24gdGhlIGFycmF5IHJlZi4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFNpbXBsaWZ5IGFycmF5IHJlZiBvZiBzdHJpbmcgY29uc3RhbnQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IEZpeCBlcnJvciBtZXNzYWdlLgorCisJKiBNYWtlZmlsZSAoZ251bGliMik6IFJlbW92ZSBvbGQgbWVtYmVycyBiZWZvcmUgY29tcGlsaW5nIG5ldy4KKwlGaXggc3R1cGlkIGVycm9ycy4KKwkqIGdudWxpYjIuYyAoX19jbXBkaTIsIF9fdWNtcGRpMik6IFR5cG9zIGluIG5hbWVzIG9mIGludGVyZmFjZSB1bmlvbnMuCisKKwkqIGdlbmNvbmZpZy5jIChtYWluKTogRG9uJ3Qgd3JpdGUgTUFYX0NMT0JCRVJTX1BFUl9JTlNOOyBvYnNvbGV0ZS4KKwlBZGQgMyB0byBNQVhfUkVDT0dfT1BFUkFORFMuCisKKwkqIGNzZS5jIChmb2xkX2NjMCk6IEV4dHJhIGFyZyBzcGVjaWZpZXMgbWFjaGluZSBtb2RlLgorCUNhbGxlcnMgY2hhbmdlZC4KKwkoY3NlX2luc24pOiBSZWNvcmQgb3JpZ2luYWwgbW9kZSBvZiBlYWNoIHNyYyBmb3IgdGhpcyBwdXJwb3NlLgorCitUaHUgSnVuIDE1IDEyOjM1OjE4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ251bGliMi5jIChfY21wZGkyLCBfdWNtcGRpMik6IE1vdmVkIGhlcmUgZnJvbSBnbnVsaWIuYy4KKwlVc2UgbG9uZyBsb25nIGZvciBhcmd1bWVudCB0eXBlLgorCisJKiBydGxhbmFsLmMgKG1heV90cmFwX3ApOiBNb3ZlZCBoZXJlIGZyb20gbG9vcC5jLgorCVJldHVybiAxIGZvciBkaXZpc2lvbiBieSBleHBsaWNpdCB6ZXJvLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9mcmFtZV9wb2ludGVyLCBhbHRlcl9mcmFtZV9wb2ludGVyX2FkZHJlc3Nlcyk6CisJUmVyZWNvZ25pemUgaW5zbnMgd2hpY2ggYXJlIGNoYW5nZWQgYnkgdGhpcy4KKworCSogaTM4Ni5tZCAoY2FsbF92YWx1ZSk6IERvbid0IHJldHVybiBwcmVtYXR1cmVseS4KKworCSogYWxsaWFudC5tZCAobW92cWkpOiBIYW5kbGUgbW92aW5nIEFyZWdzIHRvIG1lbSBhbmQgdmljZSB2ZXJzYS4KKwkoYmZ0c3QgLT4gYnRzdCk6IFJlc3RyaWN0IHRvIGJpdHBvcyBsZXNzIHRoYW4gOAorCXNvIG9wZXJhbmQgbWF5IGJlIG5vbi1vZmZzZXR0YWJsZS4KKwkobm9wKTogTmV3IHBhdHRlcm4uCisJKHJldHVybik6IFdhcyBkaXNhYmxlZDsgbm93IGRlbGV0ZWQuCisJKiB0bS1hbGxpYW50LmggKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IERlZmluZSBpdC4KKwkqIG91dC1hbGxpYW50LmMgKG91dHB1dF9idHN0KTogU2FtZSBjaGFuZ2UgYXMgaW4gb3V0LW02OGsuYworCisJKiBhbGxpYW50Lm1kLCBvdXQtYWxsaWFudC5jOiBPZmZzZXRhYmxlIC0+IG9mZnNldHRhYmxlLgorCisJKiBjLXBhcnNlLnkgKHJ1bGUgZm9yIHN0bXRfZXhwcnMpOiBNYWtlIHRoZSBMRVRfU1RNVCB2b2xhdGlsZS4gCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBzYXZlIGlubGluZSBmdW5jdGlvbiBkYXRhCisJZnJvbSBwcmV2aW91cyBkZWZpbml0aW9uIGlmIGEgbmV3ICpkZWZpbml0aW9uKiBpcyBzZWVuLgorCisJKiBpbnRlZ3JhdGUuYyAoYWNjZXNzX3Bhcm1fbWFwKTogSGFuZGxlIHN1YnJlZ3MgYW5kIGNvbnN0YW50cy4KKworCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogRG9uJ3QgY3Jhc2ggaWYgREVDTF9SVEwgKERFQ0xfUkVTVUxUKCkpIGlzIDAuCisKKwkqIHRtLXRhaG9lLmggKExPTkdKTVBfUkVTVE9SRV9GUk9NX1NUQUNLKTogRGVmaW5lIGl0LgorCisJKiB0bS1taXBzLmggKENPTlNUQU5UX1ApOiBEZWxldGVkOyBkdXBsaWNhdGVzIHJ0bC5oLgorCitGcmkgSnVuICA5IDAxOjM5OjMwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUgKGZsb2F0LmgpOiBBdm9pZCB1c2luZyAkKE1BS0UpLgorCisJKiBEb24ndCBjcmFtIHR3byB0aGluZ3MgaW50byBTVE1UX0JPRFkgb2YgYSBMRVRfU1RNVC4KKwkqIHRyZWUuaCAoc3RydWN0IGJpbmRfc3RtdCk6IE5ldyBmaWVsZCwgc3ViYmxvY2tzLgorCShTVE1UX1NVQkJMT0NLUyk6IE5ldyBtYWNybyB0byBhY2Nlc3MgaXQuCisJKiBwcmludC10cmVlLmMgKHdhbGspOiBQcmludCBuZXcgZmllbGQuCisJKiB0cmVlLmMgKGJ1aWxkX2xldF9zdG10KTogU3RvcmUgdGhlIG9sZCBCT0RZIGFyZyBpbnRvIHN1YmJsb2NrcyBmaWVsZC4KKwkqIGMtcGFyc2UueSAoc3RtdCBleHByIHJ1bGUpOiBQdXQgcnRsIGV4cHIgYWxvbmUgaW50byBib2R5IGZpZWxkLgorCSogZGJ4b3V0LmMgKGRieG91dF9ibG9jayk6IFJlY3Vyc2Ugb24gc3ViYmxvY2tzLCBub3QgYm9keS4KKwkqIHNkYm91dC5jLCBzeW1vdXQuYzogTGlrZXdpc2UuCisJKiBpbnRlZ3JhdGUuYyAoY29weV9kZWNsX3RyZWUpOiBMaWtld2lzZS4KKwkqIHN0bXQuYyAoc2V0am1wX3Byb3RlY3QsIHVuaW5pdGlhbGl6ZWRfdmFyc193YXJuaW5nKTogTGlrZXdpc2UuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRm9yIExFVF9TVE1ULCBzaW1wbHkgdXNlIGl0cyBib2R5LgorCisJKiBtYWNobW9kZS5kZWY6IEFkZCBzaXh0aCBhcmcgdG8gZWFjaCBlbnRyeS4KKwkqIHRyZWUuaCwgcnRsLmgsIHJ0bC5jOiBBZGQgYXJnIHRvIERFRl9NQUNITU9ERS4KKwkqIHJ0bC5oIChHRVRfV0lERVJfTU9ERSk6IE5ldyBtYWNybzsgdGFibGUgaW4gcnRsLmMuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogVXNlIHRoYXQgZm9yIHdpZGVuaW5nIG11bHRpcGx5LgorCisJKiBzdG10LmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBXaGVuIGNvbnZlcnRpbmcgTUVNIHRvIFFJbW9kZSBmb3IKKwliaXQgZmllbGQsIGFkanVzdCB0aGUgYWRkcmVzcyBpZiBwb3NzaWJsZSB0byBtYWtlIGJpdHBvcworCWxlc3MgdGhhbiA4LgorCSogbTY4ay5tZCAoYmZ0c3QgLT4gYnRzdCk6IFJlc3RyaWN0IHRvIGJpdHBvcyBsZXNzIHRoYW4gOAorCXNvIG9wZXJhbmQgbWF5IGJlIG5vbi1vZmZzZXR0YWJsZS4KKworCSogY2NjcC5jIChkb19saW5lKTogQWNjZXB0IGFuZCBwYXNzIG9uIDNyZCBhcmcgZm9yIGVudGVyIG9yIGxlYXZlIGZpbGUuCisKKwkqIG91dC1tNjhrLmMgKG91dHB1dF9idHN0KTogSGFuZGxlIENPVU5UIGJpZ2dlciB0aGFuIHNpemUgb2YgdW5pdC4KKworCSogY2NjcC5jIChDSEVDS19ERVBUSCk6IE1hY3JvIHRvIGRldGVjdCBpbnN0YWNrIG92ZXJmbG93LgorCShmaW5jbHVkZSwgbWFjcm9leHBhbmQsIGV4cGFuZF90b190ZW1wX2J1ZmZlcik6IFVzZSB0aGF0LgorCisJKiBjY2NwLmMgKHJlc2Nhbik6IERvbid0IGNoZWNrIGZvciBkaXNhYmxlZCBtYWNybyBpZiB0cmFkaXRpb25hbC4KKwkobWFjcm9leHBhbmQpOiBEb24ndCBkaXNhYmxlIG1hY3JvIGlmIHRyYWRpdGlvbmFsLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X29uZV90eXBlKTogVGFrZSBvdXQgbGFzdCBjaGFuZ2U7IGFzc2VtYmxlciBiYXJmcy4KKworCSogYy1wYXJzZS55IChtYXliZV9hdHRyaWJ1dGUpOiBFbGltaW5hdGUgIy1zeW50YXhlcy4KKwlNYWtlIEFUVFJJQlVURSB0aGUgbmFtZSBmb3IgX19hdHRyaWJ1dGUuCisKKwkqIGMtcGFyc2UuZ3BlcmY6IEFkZCBfX2F0dHJpYnV0ZXssX199IGFuZCBfX3NpZ25lZHssX199LgorCSogYy1wYXJzZS55OiBJbnN0YWxsIHJlc3VsdHMgb2YgdGhhdCBjaGFuZ2UuCisKKwkqIEZpeCBidWcgaW4gc2l6ZW9mICh7Li4ufSkuCisJKiBjLWRlY2wuYyAocG9wbGV2ZWwpOiBTZXQgVFJFRV9VU0VELiAgUmV0dXJuIHRoZSBMRVRfU1RNVC4KKwkqIGMtcGFyc2UueSAoc3RtdC1leHByIHJ1bGUpOiBQdXQgdGhlIFJUTF9FWFBSIGluIHRoZSBMRVRfU1RNVCwKKwljbGVhciBpdHMgVFJFRV9VU0VELCBhbmQgdXNlIGl0IGFzIHRoZSByZXN1bHQuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogQWxsb3cgTEVUX1NUTVQgYXMgYW4gZXhwci4KKwlTZXQgaXRzIFRSRUVfVVNFRCBhbmQgZXhwYW5kIHRoZSBUUkVFX1ZBTFVFIG9mIGl0cyBib2R5LgorCSogZGJ4b3V0LmMgKGRieG91dF9ibG9jayk6IElnbm9yZSBMRVRfU1RNVCBpZiBUUkVFX1VTRUQgbm90IHNldC4KKwkqIHNkYm91dC5jLCBzeW1vdXQuYzogTGlrZXdpc2UuCisKK1RodSBKdW4gIDggMDA6MDY6MzYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogRXh0ZW5kIEVSQU5HRS1pbmhpYml0b3IgZm9yIDAuMAorCXRvIDAuMGUwIGFzIHdlbGwuCisKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IFByZXZlbnQgYWxsb2NhdGlvbiBvZiByZWdzIGxpdmUgYXQgc2V0am1wCisJb24gY2VydGFpbiBtYWNoaW5lcy4gIENvbnRyb2xsZWQgYnkgTE9OR0pNUF9SRVNUT1JFX0ZST01fU1RBQ0suCisJU2V0cyByZWdfbGl2ZV9sZW5ndGggdG8gLTEuCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IEJlIHByZXBhcmVkIGZvciB0aGF0LgorCSogdG0tdmF4LmggKExPTkdKTVBfUkVTVE9SRV9GUk9NX1NUQUNLKTogRGVmaW5lIGl0LgorCisJKiBnbnVsaWIyLmMgKGFsbCBpbnRlcmZhY2VzKTogRGVjbGFyZSBhcmdzIGFuZCB2YWx1ZXMgYXMgbG9uZyBsb25nLAorCWFuZCBzcGxpdCB0aGVtIHVzaW5nIHVuaW9ucy4KKworCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBEb24ndCByZXZlcnNlIGxvb3AgaWYgdGhlcmUgYXJlIHR3bworCXJlZnMgdG8gdmFyeWluZyBhZGRyZXNzZXMuICBDb25zaWRlciBmb29baV0gPSBmb29baS0xXS4KKwkoY291bnRfbm9uZml4ZWRfcmVmcyk6IFN1YnJvdXRpbmUgdG8gY291bnQgdGhlbS4KKworCSogY2V4cC55OiBEaXN0aW5ndWlzaCBzaWduZWQgYW5kIHVuc2lnbmVkLgorCUFuIGludGVnZXIgdmFsdWUgaXMgbm93IHJlcHJlc2VudGVkIGJ5IGEgc3RydWN0LgorCUFsbCBydWxlcyBmb3IgYXJpdGhtZXRpYyBjaGFuZ2VkLgorCSh5eWxleCk6IEFkYXB0IHRvIGNoYW5nZSBpbiB5eWx2YWwgZGF0YSB0eXBlLgorCisJKiBsaW1pdHMuaCAoTE9OR19NSU4pOiBNYWtlIHN1cmUgaXQncyBhIHNpZ25lZCBsb25nLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X29uZV90eXBlKTogT3V0cHV0IHR5cGVzIG9mIGZpZWxkcyBmaXJzdCwKKwlpZiB0aGV5IGFyZSBzdHJ1Y3RzLiAgRG9uJ3QgZ28gdGhyb3VnaCBwb2ludGVycy4KKwkoc2Rib3V0X2ZpZWxkX3R5cGVzKTogU3Vicm91dGluZSBmb3IgdGhhdAorCitXZWQgSnVuICA3IDEzOjAwOjQ0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IFN3aXRjaCB0byAvdXNyL2luY2x1ZGUgYmVmb3JlIGRvaW5nIHZ1aWRfZXZlbnQuaC4KKwlVc2UgJDIgYXMgb3V0cHV0IGRpcmVjdG9yeSBmb3Igc2VkLgorCisJKiB0bS1pMzg2LmggKEZVTkNUSU9OX1BST0ZJTEVSKTogUHV0IGNvdW50ZXIgYWRkcmVzcyBpbiAlZWR4LgorCSogdG0taTM4NnYuaCAoTElCX1NQRUMpOiBVc2UgLUwvdXNyL2xpYi9saWJwIGlmIHByb2ZpbGluZy4KKworCSogZXhwci5jIChleHBhbmRfaW5jcmVtZW50KTogVHlwbyB0ZXN0aW5nIGZvciBCSW1vZGUgY29tcG9uZW50LgorCisJKiBjb252ZXggY2hhbmdlcyBmcm9tIGNzbWl0aDoKKwkqIHRtLWNvbnZleC5oOiB1c2UgRVhUUkFfU0VDVElPTlMgdG8gZG8gLmJzcy4KKwlvdXQtY29udmV4LmM6IHNldF9zZWN0aW9uLCBhbGlnbl9zZWN0aW9uIGFyZSBub3cgdW51c2VkLgorCSogY29udmV4Lm1kOiBhZGQgcGF0dGVybiB0byBwaWNrIGFuIEEtcmVnIGRlc3RpbmF0aW9uIGZvciBzdW1zCisJd2hvc2Ugc291cmNlIGludm9sdmVzIGEgZGVkaWNhdGVkIEEgcmVnIChmcmFtZSBvciBhcmcgcG9pbnRlcikKKwkqIGNvbnZleC5tZDogaW1tZWRpYXRlIGFuZCwgb3IsIHhvciBpbnN0cnVjdGlvbnMgc3RvcmUgYSAzMi1iaXQKKwlyZXN1bHQuICBGaXggaW5zdHJ1Y3Rpb25zIHRoYXQgYXNzdW1lZCBpdCB3YXMgNjQuCisKKwkqIG1pcHMubWQgKHByb2JlKTogTmV3IHBhdHRlcm4gdG8gY3JlYXRlIHN0YWNrIHNwYWNlLgorCisJKiBNYWtlZmlsZSAoZmxvYXQuaCk6IElnbm9yZSBlcnJvcnMgZnJvbSBoYXJkLXBhcmFtcy4KKwlTcGVjaWZ5IC4vIHRvIHJ1biBpdC4KKworVHVlIEp1biAgNiAxNTo0NToyNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG91dC10YWhvZS5jOiBSZW5hbWUgYG9mZnNldGFibGUnIHRvIGBvZmZzZXR0YWJsZScuCisKKwkqIHRhaG9lLm1kIChub3ApOiBOZXcgcGF0dGVybi4KKworCSogaTM4Ni5tZCAodW11bC4uLik6IENvbnN0cmFpbiBvcGVyYW5kIDEgYXMgYDAnLCBub3QgYGEnLgorCWBhJyBzb21ldGltZXMgd2FudGVkIHR3byBhLXJlZ3MgZm9yIG9wZXJhbmRzIDAgYW5kIDEuCisKKwkqIGNjY3AuYzogRm9yd2FyZC1kZWNsYXJlIHNvbWUgc3RydWN0cy4KKworCSogYy1kZWNsLmM6IFJlYXJyYW5nZSBmY24gZndkIGRlY2xzIGFuZCBzdHJ1Y3QgZGVjbHMuCisKKwkqIGV4cHIuYzogTW92ZSBzb21lIGZjbiBmd2QgZGVjbHMgYWZ0ZXIgc3RydWN0cyB0aGVpciBhcmdzIHVzZS4KKwkqIGdlbnBlZXAuYywgZ2VuZXh0cmFjdC5jOiBMaWtld2lzZS4KKworCSogbG9vcC5jOiBGb3J3YXJkLWRlY2xhcmUgc29tZSBzdHJ1Y3RzLgorCisJKiBzdG10LmM6IE1vdmUgZGVjbHMgb2Ygc3RydWN0cyBiZWZvcmUgdGhvc2Ugb2Ygc3RhdGljIGZ1bmN0aW9ucy4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEZWxldGUgZXh0cmEgYXJnIHRvIGNoZWNrX2VsaW1pbmF0ZV9iaXYuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU3VwcGx5IG1pc3NpbmcgYXJnCisJdG8gY29udmVydF90b19tb2RlLgorCisJKiBnY2MuYyAoaGFuZGxlX2JyYWNlcyk6IFN1cHBseSBtaXNzaW5nIGFyZyB0byBkb19zcGVjXzEuCisKKwkqIGV4cGxvdy5jIChsb29rdXBfc3RhdGljX2NoYWluKTogQWNjZXB0IGEgY29udGV4dCBhcmcuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9zcGxpdF9iaXRfZmllbGQpOiBQYXNzIEFMSUdOIGFyZworCXRvIGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkLgorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogQ29udmVydCBUWVBFX0FMSUdOIHRvIGJ5dGVzLgorCShzdG9yZV9jb25zdHJ1Y3RvciwgZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KKworCSogdG0tbTY4ay5oOiBOT19BRERTVUJfUSBjb25kaXRpb25hbHMgdHVybiBvZmYgYWxsIGFkZHEsIHN1YnEgaW5zbnMuCisJKEZ1bGx5IHN1cHBvcnRlZCBvbmx5IHdpdGggTU9UT1JPTEEgYW5kIEhQVVhfQVNNIGZsYWdzLikKKworCSoganVtcC5jIChkb19jcm9zc19qdW1wKTogRG9uJ3QgZGllIGlmIExBQkVMIGlzIDAuCisKKwkqIHRtLW1pcHMuaCAoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogTmV3IG1hY3JvLgorCSogdG0taXJpcy5oOiBOZXcgZmlsZS4gIFVuc3BsaXQgbGluZXMgYWNjaWRlbnRhbGx5IHNwbGl0LgorCitNb24gSnVuICA1IDE1OjM5OjMwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGluaXRfZnVuY3Rpb25fc3RhcnQsCisJbm90IGV4cGFuZF9mdW5jdGlvbl9zdGFydC4KKwkqIGVtaXQtcnRsLmMgKHJlc3RvcmVfcmVnX2RhdGEpOiBObyBuZWVkIHRvIGluaXQgcmVnX3J0eF9uby4KKworCSogc3RtdC5jIChpbml0X2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19zdHJ1Y3QuCisKKwkqIHJ0bGFuYWwuYyAocmVnX3NldF9iZXR3ZWVuX3ApOiBOZXcgZm4gYW5hbG9nb3VzIHRvIHJlZ191c2VkX2JldHdlZW5fcAorCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBSZWplY3QgYml2IGluaXRpYWwgdmFsdWUgd2hpY2ggaXMgYWx0ZXJlZAorCXN1YnNlcXVlbnRseSBiZWZvcmUgYWN0dWFsIGxvb3Agc3RhcnQuCisKKwkqIHJ0bGFuYWwuYzogTmV3IGZpbGUgc3BsaXQgb3V0IGZyb20gcnRsLmMuCisJSGFzIHRoaW5ncyBub3QgdXNlZCBpbiB0aGUgZ2VuIGZpbGVzLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFJlamVjdCBiaXYgaW5pdGlhbCB2YWx1ZSBpbiBhIGhhcmQgcmVnCisJY2xvYmJlcmVkIGJ5IGFuIGludGVydmVuaW5nIGZ1bmN0aW9uIGNhbGwuCisKKwkqIHRyZWUuYyAoZ2V0X2lkZW50aWZpZXIpOiBOZXcgZmxhZyBuZWVkZWQgdG8gZW5hYmxlIGlkLWNsYXNoIHdhcm5pbmdzLgorCShzdGFydF9pZGVudGlmaWVyX3dhcm5pbmdzKTogU2V0IHRoYXQgZmxhZy4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgdGhhdCwgYWZ0ZXIgbWFraW5nIGJ1aWx0LWlucy4KKworU2F0IEp1biAgMyAxNDo0MTozNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IE5vIGJhc2ljIGJsb2NrIHByb2ZpbGluZyBhdCBqdW1wIHRhYmxlcy4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IFByb2JlIHRoZSBzdGFjayB0byBtYWtlIHBhZ2VzIGV4aXN0LgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IExpa2V3aXNlLCBmb3IgYWxsb2NhLgorCisJKiBtb3ZlLWlmLWNoYW5nZTogU3BlY2lmeSAvYmluL3NoLgorCisJKiB0bS1uczMyay5oIChJTkRJUkVDVEFCTEVfMl9BRERSRVNTX1ApOiBEb24ndCBhY2NlcHQgUExVUworCXdpdGggY29uc3RhbnQgb3BlcmFuZHMgYnV0IG5vdCBpbnNpZGUgQ09OU1QuCisKKwkqIGludGVncmF0ZS5jIChvdXRwdXRfaW5saW5lX2Z1bmN0aW9uLCBzYXZlX2Zvcl9pbmxpbmUpOgorCVNhdmUgc3RhY2tfc2xvdF9saXN0LCBhbmQgcmVzdG9yZSBpdCBmb3IgYWN0dWFsIG91dHB1dC4KKwkqIGVtaXQtcnRsLmMgKGdlbl9pbmxpbmVfaGVhZGVyX3J0eCk6IE5ldyBhcmcgZm9yIHRoaXMuCisKKwkqIGVtaXQtcnRsLmMgKHJlc3RvcmVfcmVnX2RhdGEpOiBJbml0aWFsaXplIHJlZ19ydHhfbm8uCisJKHJlc3RvcmVfcmVnX2RhdGFfMSk6IEhhbmRsZSByZWdfcnR4X25vIGp1bXBpbmcgcGFzdAorCXJlZ19wb2ludGVyX2ZsYWdfbGVuZ3RoLgorCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6IERvIG5vdGhpbmcgaWYgcmVnbm9fcmVnX3J0eCBoYXMgMC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVHlwb3MgZm9yIHN0YWNrIHBhcm0KKwlhZGRyZXNzZXMgaW4gUExVUyBjYXNlLgorCisJKiBnZW5vdXRwdXQuYyAoZ2VuX2luc24sIGdlbl9wZWVwaG9sZSk6IE1ha2Ugb3V0cHV0X24gZm5zIHN0YXRpYy4KKwkob3V0cHV0X3Byb2xvZ3VlKTogVXNlIG5ldyBtYWNybyBERUZBVUxUX01BQ0hJTkVfSU5GTyBpZiBkZWZpbmVkLgorCisJKiB0cmVlLmggKGVudW0gbWFjaGluZV9tb2RlKTogRGVmaW5lIE1BWF9NQUNISU5FX01PREUgYXMgaW4gcnRsLmguCisKK0ZyaSBKdW4gIDIgMTU6NDA6NDcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBBIGZpbGUgaW5jbHVkZWQgdmlhIGEgc3lzdGVtIGhlYWRlciBmaWxlCisJY291bnRzIGFzIGEgc3lzdGVtIGhlYWRlciBmaWxlIGZvciAtTS4KKworCSogZ251bGliMi5jOiBTdXBwb3J0IGJvb2xlYW4gb3BzIGFuZCBzaGlmdHMuCisKKwkqIGxvb3AuYyAoZW1pdF9pdl9pbmMpOiBVc2UgZW1pdF9pdl9pbml0X2NvZGUuCisKKwkqIHJ0bC5oIChDT05TVDBfUlRYKTogRG9uJ3QgdHJ5IHRvIGNhc3QgYWJvcnQuCisKKyAgICAJKiB0bS1uZXdzLmggKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IEZpeCB0eXBvIGByZWdfbmFtZScuCisJRGVsZXRlIHR3byBnYXJiYWdlIGxpbmVzLgorCisJKiBsb29wLmMgKGVsaW1pbmF0ZV9iaXYpOiBVc2UgZW1pdF9pdl9pbml0X2NvZGUgdG8gY29tcHV0ZSBjb21wYXJpc29uCisJdmFsdWUuICBJZiB2YWx1ZSBpcyBjb25zdGFudCwgcmVjb2duaXplIHRoZSBpbnNuLCBhbmQgaWYgdGhhdCBmYWlscywKKwlwdXQgdGhlIHZhbHVlIGluIGEgcmVnaXN0ZXIuICAKKworVGh1IEp1biAgMSAxNjo1NjozOSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IERvbid0IGRpZSBpZiBydHggY29tcG9uZW50cyBhcmUgbnVsbC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0X2FkZCk6IE5ldyBmbiB0byBkbyBBICogWCArIEIuCisJKG1ha2VfdHJlZSk6IE5ldyBzdWJyb3V0aW5lLgorCSogbG9vcC5jIChlbWl0X2l2X2luaXRfY29kZSk6IFVzZSB0aGF0LiAgTXVjaCBzaW1wbGVyIG5vdy4KKworVHVlIE1heSAzMCAxNzoyMDo0MCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFVzZSBUUkVFX1NFVF9DT0RFIHRvIHN0b3JlIGluIHRyZWUgY29kZXMuCisKKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfY29tbW9uKTogTWFrZSBgY29kZScgYW4gdW5zaWduZWQgaW50LgorCShUUkVFX0NPREUsIFRSRUVfU0VUX0NPREUpOiBQdXQgaW4gY2FzdHMuCisKKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogU3VwcGx5IGFsbCB0aGUgYXJncyBpbiByZWN1cnNpdmUgY2FsbHMuCisKKwkqIHRvcGxldi5jIChyZXBvcnRfZXJyb3JfZnVuY3Rpb24pOiBGaXggdHlwbzsgTUVUSE9EX1RZUEUgbWlzc2luZy4KKworCSogZml4aW5jbHVkZXM6IEFkZCBjb2RlIHRvIG1ha2UgaW50ZXJuYWwgbm9uLWRpcmVjdG9yeSBsaW5rcy4KKworTW9uIE1heSAyOSAyMTozNjoyOCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChmaW5kX2V4ZWNfZmlsZSk6IFRyeSBib3RoIHdpdGggYW5kIHdpdGhvdXQgbWFjaGluZV9zdWZmaXguCisJKGZpbmRfZmlsZSk6IFVzZSBtYWNoaW5lX3N1ZmZpeCBoZXJlIHRvby4KKworU2F0IE1heSAyNyAwMDowMjoyNiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChkZWNvbXBvc2UpOiBPRkZTRVQgd2Fzbid0IGluaXRpYWxpemVkLgorCisJKiBjc2UuYyAoY3NlX21haW4pOiBBc3NpZ24gbW9ub3RvbmljIGN1aWRzLgorCShtYWtlX3JlZ3NfZXF2LCBDSEVBUEVSKTogVXNlIGN1aWRzLCBub3QgdWlkcy4KKwkoY3NlX2VuZF9vZl9iYXNpY19ibG9jayk6IFJldHVybiBhIGN1aWQsIG5vdCBhIHVpZC4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEZvciBCVUlMVElOX1NBVkVSRUdTLCByYW5nZSBvZiByZWdzCisJbW92ZWQgaW5jbHVkZWQgb25lIGV4dHJhIHByZXZpb3VzIGluc24uCisKKwkqIGVtaXQtcnRsLmMgKGVtaXRfbGluZV9ub3RlKTogRG9uJ3QgY2hlY2sgLWcgaGVyZS4KKwkoZW1pdF9ub3RlKTogRm9yIGxpbmUgbnVtYmVyIHdoZW4gbm8gLWcsIGluY3JlbWVudCBjdXJfaW5zbl91aWQgYW55d2F5LgorCSogc3RtdC5jIChleHBhbmRfc3RhcnRfY2FzZSk6IEFsd2F5cyBvdXRwdXQgYSBOT1RFX0lOU05fREVMRVRFRC4KKworCSogbG9vcC5jIChsb29wX29wdGltaXplKTogRG9uJ3QgY291bnQgbGluZS1udW1iZXIgTk9URXMgZm9yIGx1aWRzLgorCVByZXZlbnRzIC1nIGZyb20gYWZmZWN0aW5nIG9wdGltaXphdGlvbiBkZWNpc2lvbnMuCisKK0ZyaSBNYXkgMjYgMTc6MzE6MTUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IERvbid0IGNvdW50IG5vdGVzIGluIGluc25fbnVtYmVyLgorCVByZXZlbnRzIC1nIGZyb20gYWZmZWN0aW5nIG9yZGVyIG9mIGFsbG9jYXRpb24uCisKK1RodSBNYXkgMjUgMTQ6MTI6MTkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IENsZWFyIGZ1bGwgbGVuZ3RoIG9mIHJlZ3NfbGl2ZV9hdC4KKworCSogbnMzMmsubWQgKGNtcHNpKTogTWFrZSB0aGlzIHRoZSBmaXJzdCBjbXAgcGF0dGVybi4KKworCSoganVtcC5jIChkb19jcm9zc19qdW1wKTogU2tpcCBOT1RFcyB3aGlsZSBjaGVja2luZyBmb3IgZXhpc3RpbmcgbGFiZWwuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFdoZW4gbm8tb3BpbmcgYSBqdW1wLCBkZWNyZW1lbnQgdXNlIGNvdW50IG9mIGxhYmVsLgorCShjc2VfYmFzaWNfYmxvY2spOiBJZiBsYWJlbCB1c2UgY291bnQgaXMgMCwgZ28gcGFzdCBpdC4KKworCSogaW50ZWdyYXRlLmMgKGFjY2Vzc19wYXJtX21hcCk6IE5ldyBmbiwgYnJva2VuIG91dCBvZgorCWNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCBoYW5kbGVzIGNhc2Ugb2YgbWVtIHJlZiB0byBzdGFjayBhcmcuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogQ2FsbCBpdC4KKwlBbHNvIHVzZSBpdCBmb3IgYWRkcmVzcyBvZiBhIHN0YWNrIGFyZy4KKworCSogZ2VuKi5jIChmYXRhbCk6IERlY2xhcmUgMXN0IGFyZyBhcyBzdHJpbmcuCisKK1dlZCBNYXkgMjQgMDA6MTM6MzYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBIYW5kbGUgbW92ZGkgYW5kIG1vdmRmIGluc25zLgorCisJKiBmaW5hbC5jIChlbmRfZmluYWwpOiBSZWFsaWduIGxvY24gY3RyIGFmdGVyIG91dHB1dHRpbmcgc3RyaW5nLgorCisJKiB0bS1zcGFyYy5oIChMSU5LX1NQRUMpOiBMaW5rIGJiX2xpbmsubyBiZWZvcmUgc3RhbmRhcmQgbGliLgorCisJKiB0bS1zdW4zODZpLmggKExJTktfU1BFQyk6IEFjY2VwdCBhbmQgaWdub3JlIC1zdW4zODYuCisKKwkqIGdjYy5jIChmaW5kX2V4ZWNfZmlsZSk6IFVzZSBtYWNoaW5lX3N1ZmZpeC4KKwkocHJvY2Vzc19jb21tYW5kKTogU2V0IHRoYXQgZm9yIC1iIG9wdGlvbi4KKworCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IE5vIHNpemUgbGltaXQKKwlmb3IgZnVuY3Rpb25zIGRlY2xhcmVkIGlubGluZS4KKworCSogbG9vcC5jIChza2lwX2NvbnNlY19pbnNucyk6IE5ldyBmbiwgc2tpcCBzZXZlcmFsIGluc25zIG9yIGxpYmNhbGxzLgorCShmb3JjZV9tb3ZhYmxlcyk6IE5ldyBmbiwgcGFydCBvZiBzY2FuX2xvb3AgYnJva2VuIG91dC4KKwkoaWdub3JlX3NvbWVfbW92YWJsZXMpOiBOZXcgZm4sIGlnbm9yZSBhIG1vdmFibGUgd2hvc2UgaW5zbgorCWlzIHdpdGhpbiBhbm90aGVyIG1vdmFibGUncyBsaWJjYWxsLgorCShzY2FuX2xvb3ApOiBDYWxsIHRob3NlIHRocmVlLgorCURvbid0IGhhbmRsZSBtLT5jb25zZWMgZm9yIHplcm8tZXh0ZW5kIG1vdmFibGVzLCBzaW5jZSBhbHdheXMgMC4KKworVHVlIE1heSAyMyAxMjo1ODoyNCAxOTg5ICBKb2UgV2VlbmluZyAgKHdlZW5pbmcgYXQgZ2FuZy1vZi1mb3VyLnN0YW5mb3JkLmVkdSkKKworCSogY29uZmlnL2FsbGlhbnQubWQ6CisJUmVtb3ZlZCBvcGVyYW5kIGNsYXNzZXMgJ3gnLCAneScsICdHJywgJ0gnLgorCUFkZGVkICIlLiIgdG8gbWFueSBvcGNvZGVzIHRvIHNpbXBsaWZ5IGNvbXBhcmlzb24gd2l0aCBtNjhrLm1kLgorCUNoYW5nZWQgVEFSR0VUXzY4ODgxIHRvIFRBUkdFVF9DRS4KKwlDaGFuZ2VkIGZsb2F0aW5nLXBvaW50IGluc25zIHRvIGJldHRlciBkZXNjcmliZSB0aGUgQWxsaWFudCBDRS4KKwlNb3N0IGFyZ3MgdG8gZmxvYXRpbmctcG9pbnQgaW5zbnMgYXJlIG5vdyBub25pbW1lZGlhdGVfb3BlcmFuZC4KKwlSZW1vdmVkIHNwZWNpYWwgaW5zbnMgZm9yIHB1c2hpbmcgZG91Ymxld29yZHMgb250byBzdGFjay4KKwlBZGRlZCBub24tQ0UgdmVyc2lvbnMgb2YgbW92c2YgYW5kIG1vdmRmIHRvIGF2b2lkIHVzaW5nIEZQCisJcmVnaXN0ZXJzIGluIHRoaXMgY2FzZS4KKwkoZmxvYXQqaSpmMik6IERvbid0IGFsbG93IGltbWVkaWF0ZSBvcHMuCisJKHNuZSk6IEZpeCB0eXBvLCBmc25lID0+IGZzbmVxLgorCShjYWxsLCBjYWxsX3ZhbHVlKTogQ2hhbmdlZCB0byBhbHdheXMgcG9wIGFyZ3MgZnJvbSBzdGFjaworCXVwb24gcmV0dXJuOyB0aGlzIGdpdmVzIGJldHRlciBjb2RlIHRoYW4gYmVmb3JlIGFuZCBjb25mb3JtcworCXRvIEFsbGlhbnQgY2FsbGluZyBzdGFuZGFyZC4KKwlJbmNvcnBvcmF0ZWQgc29tZSByZWNlbnQgY2hhbmdlcyB0byBtNjhrLm1kLgorCisJKiBjb25maWcvb3V0LWFsbGlhbnQuYzoKKwkocmVnbm9fcmVnX2NsYXNzKTogUmVtb3ZlZCBGUEEgcmVnIGNsYXNzZXMuCisJKG91dHB1dF9tb3ZlX2NvbnN0X2RvdWJsZSk6IEZ1bmN0aW9uIG5vdCBuZWVkZWQsIHJlbW92ZWQuCisKKwkqIGNvbmZpZy90bS1hbGxpYW50Lmg6CisJUmVtb3ZlZCBGUEEgcmVnaXN0ZXJzIGFuZCByZWcgY2xhc3Nlcy4KKwlUYXJnZXQgZmxhZ3M6IGNoYW5nZWQgVEFSR0VUXzY4ODgxIHRvIFRBUkdFVF9DRSwgcmVtb3ZlZAorCVRBUkdFVF9SVEQsIFRBUkdFVF9SRUdQQVJNLCBUQVJHRVRfRlBBLgorCVJlbW92ZWQgVEFSR0VUX0NFIHRlc3QgaW4gc2V2ZXJhbCBwbGFjZXMgc2luY2Ugd2UgbmVlZCB0bworCXVzZSBGUCByZWdzIGV2ZW4gZm9yIG5vbi1DRSBwcm9ncmFtcy4KKwkoVEFSR0VUX1ZFUlNJT04sIENQUF9TUEVDKTogRGVmaW5lIGZvciBBbGxpYW50LgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IFJlbW92ZWQsIG5vdCBuZWVkZWQuCisJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBEZWZpbmVkLgorCShSRVRVUk5fUE9QU19BUkdTKTogRGVmaW5lZC4KKwkoRlVOQ1RJT05fVkFMVUUsIExJQkNBTExfVkFMVUUsIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1ApOgorCVVzZSBmcDAgdG8gcmV0dXJuIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKwkoRlVOQ1RJT05fQVJHKTogUmVtb3ZlIFRBUkdFVF9SRUdQQVJNIGNvZGUuCisJKEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKTogQWx3YXlzIDAuCisJKEZVTkNUSU9OX1BST0ZJTEVSKTogRGVmaW5lIGZvciBBbGxpYW50LgorCShGVU5DVElPTl9FUElMT0dVRSk6IFJlbW92ZSB1c2Ugb2YgcnRkIGluc3RydWN0aW9uLgorCVJlbmFtZWQgQ0NfSU5fNjg4ODEgdG8gQ0NfSU5fRlAuCisJKE5PVElDRV9VUERBVEVfQ0MpOiBJbmNvcnBvcmF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlCisJaW4gdG0tbTY4ay5oLgorCisJKiBjb25maWcveG0tYWxsaWFudC5oIChMSU5LX1NQRUMpOiBQYXNzIC1YIHRvIGxpbmtlci4KKworVHVlIE1heSAyMyAxMjo1ODoyNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHNkYm91dC5jOiBEb24ndCBpbmNsdWRlIGMtdHJlZS5oLgorCisJKiB0cmVlLmMgKGJ1aWxkX2luZGV4X3R5cGUpOiBVc2Ugc2l6ZXR5cGUgZm9yIG1pbiBhbmQgbWF4IHZhbHVlcy4KKwlDb252ZXJ0IG1heHZhbCByYXRoZXIgdGhhbiBjbG9iYmVyaW5nIGl0LgorCisJKiB0bS1ocDlrMzIwLmg6IEZpbmlzaCB1bnRlcm1pbmF0ZWQgY29tbWVudC4KKworCSogc2Rib3V0LmMgKHNkYm91dF9wYXJtcyk6IFVzZSBnZW5fZmFrZV9sYWJlbCBmb3IgYW5vbnltb3VzIHBhcm0uCisKK1N1biBNYXkgMjEgMTI6NTg6MDYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGFnZ3JlZ2F0ZV92YWx1ZV9wKTogTmV3IGZuIHNheXMgd2hldGhlciBleHByZXNzaW9uIGlzIGEgdHlwZQorCXRoYXQgZnVuY3Rpb25zIGNhbm5vdCByZXR1cm4gYXMgYSBzY2FsYXIuCisJKGFzc2lnbl9wYXJtcywgZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogVXNlIHRoYXQuCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCisKKwkqIGdjYy5jIChkZWxldGVfZmFpbHVyZV9xdWV1ZSk6IE5ldyBzdWJyb3V0aW5lLgorCShkZWxldGVfdGVtcF9maWxlcyk6IE5vIGxvbmdlciBkZWxldGUgdGhlIGZhaWx1cmUgcXVldWUuCisJKG1haW4pOiBEZWxldGUgZmFpbHVyZSBxdWV1ZSBhZnRlciBlYWNoIGZhaWxpbmcgY29tcGlsYXRpb24uCisKK1NhdCBNYXkgMjAgMTM6MTY6MjMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAoZm9yY2VfY29uc3RfbWVtKTogTmV3IG9wdGlvbmFsIG1hY3JvIFNFTEVDVF9SVFhfU0VDVElPTi4KKworCSogbWlwcy5tZDogQ2hhbmdlICV1MCB0byAlOi4KKwkobW92c2kpOiBBZGQgY29uc3RyYWludCBhbHRlcm5hdGl2ZSBhY2NlcHRpbmcgYWRkcmVzcyBhcmcuCisKKwkqIGZvbGQtY29uc3QuYyAobXVsX2RvdWJsZSk6IFNwZWNpYWwgY2FzZSBmb3IgMm5kIGFyZyAyLCA0LCA4LgorCShjb21iaW5lKTogU3BlY2lhbCBjYXNlIHNob3J0Y3V0cyBmb3IgcGx1cywgbWludXMsIG11bHQsIGRpdi4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBTaW1wbGlmeSBoYWlyeSBzdGF0ZW1lbnQgZm9yIDNCMS4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBMaWtld2lzZS4KKworCSogbWF0aC02ODg4MS5oOiBOZXcgZmlsZS4KKworCSogbTY4ay5tZCAobW92cWkpOiBIYW5kbGUgbW92aW5nIGFyZWdzIHRvIG1lbSBhbmQgdmljZSB2ZXJzYS4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogRG9uJ3QgdGVzdCB1c2VfZ2RiX2RieF9leHRlbnNpb25zCisJaW4gY2FzZXMgdGhhdCBvY2N1ciBpbiBDLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl97c3RhcnQsZW5kfSk6IE1ha2UgREVDTF9SRVNVTFQncyBydGwgMAorCXdoZW4gZnVuY3Rpb24gcmV0dXJucyBubyB2YWx1ZS4KKworCSogdHJlZS5jIChidWlsZF9kZWNsKTogSW5pdGlhbGl6ZSBERUNMX1BSSU5UX05BTUUsIERFQ0xfQVNTRU1CTEVSX05BTUUuCisKKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogQ2FsbCBpbml0X2Z1bmN0aW9uX3N0YXJ0LgorCitUaHUgTWF5IDE4IDAwOjQxOjM3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfbnVsbF9yZXR1cm5fMSk6IE5ldyBhcmcgVVNFX0dPVE8gc2F5cyBqdW1wIHRvCisJcmV0dXJuX2xhYmVsIGV2ZW4gaWYgY291bGQgb3RoZXJ3aXNlIHVzZSBhIHJldHVybiBpbnNuLgorCU1ha2UgYSByZXR1cm5fbGFiZWwgaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGhhdmUgb25lIGFscmVhZHkuCisJSWYgaGF2ZSBwYXJtIGNsZWFudXBzLCBhbHdheXMganVtcCB0byBjbGVhbnVwX2xhYmVsLgorCShleHBhbmRfbnVsbF9yZXR1cm4pOiBQYXNzIDEgZm9yIFVTRV9HT1RPIGlmIGNsZWFudXBzIHBlbmRpbmcuCisJKGV4cGFuZF9yZXR1cm4pOiBTZXQgTEFTVF9JTlNOIGlmIGhhdmUgbG9jYWwgY2xlYW51cHMgb3IgcGFybSBjbGVhbnVwcy4KKwlVc2UgdGhhdCBpZiBqdW1waW5nIHRvIHRhaWwtcmVjdXJzaW9uIGxhYmVsLgorCU9wdGltaXphdGlvbiBmb3IgcmV0dXJuaW5nIGEgY29tcGFyaXNvbiBpcyBzYWZlIGZvciBsb2NhbCBjbGVhbnVwcworCWJ1dCBkb24ndCBkbyBpdCBpZiB0aGVyZSBhcmUgcGFybSBjbGVhbnVwcy4KKwlDYWxsaW5nIGV4cGFuZF9udWxsX3JldHVybl8xLCBwYXNzIDEgZm9yIFVTRV9HT1RPIGlmIGxvY2FsIGNsZWFudXBzLgorCSh0aGlzX2NvbnRvdXJfaGFzX2NsZWFudXBzX3ApOiBOZXcgZnVuY3Rpb24uCisKKwkqIHN0bXQuYyAoaW5pdF9mdW5jdGlvbl9zdGFydCk6IE5ldyBmdW5jdGlvbiwgYmVnaW5uaW5nIG9mCisJZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0IGJyb2tlbiBvdXQuCisJVXNlIERFQ0xfUFJJTlRfTkFNRSB0byBnZXQgZnVuY3Rpb24ncyBuYW1lLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBOb3cgdHdvIGFyZ3MsIGZ1bmN0aW9uIGFuZCBQQVJNU19IQVZFX0NMRUFOVVBTCisJQ29tcHV0ZSBSRVRVUk5fTEFCRUwgc29vbmVyOyBtYWtlIG9uZSBpZiBwYXJtIGNsZWFudXBzLgorCUlmIHBhcm1zIGhhdmUgY2xlYW51cHMsIHB1dCBzY2FsYXIgcmV0dXJuIHZhbHVlIGluIHBzZXVkby1yZWcuCisJRG9uJ3QgbWFyayB0aGF0IHBzZXVkbyB3aXRoIFJFR19GVU5DVElPTl9WQUxVRV9QLgorCShleHBhbmRfZnVuY3Rpb25fZW5kKTogU2ltcGxpZnkgZGVjaXNpb25zIGFib3V0IG91dHB1dCBvZiByZXR1cm5fbGFiZWwKKwlhbmQgcmV0dXJuIGluc24uCisJSWYgREVDTF9SRVNVTFQgaXMgcHNldWRvLXJlZywgY29weSBpdCB0byByZWFsIHJldHVybiByZWcuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IEhhbmRsZSBvcmRpbmFyeSBzdHJ1Y3QgdmFsdWVzCisJbGlrZSBwY2MsIGJ1dCBvbmx5IGlmIHVub3B0aW1pemVkLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBNYWtlIGEgcmV0dXJuX2xhYmVsIGZvciBvcmRpbmFyeSBzdHJ1Y3QgdmFsdWUuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogSGFuZGxlIE1FVEhPRF9UWVBFIGxpa2UgRlVOQ1RJT05fVFlQRS4KKwkobGF5b3V0X2RlY2wpOiBBbGxvdyBUWVBFX0RFQ0wuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9iYXNldHlwZXMpOiBDb2RlIGZvciBiYXNldHlwZXMgYnJva2VuCisJb3V0IG9mIGxheW91dF9yZWNvcmQuICBTZXRzIHRoZSB0eXBlIHNpemUgdGVudGF0aXZlbHkuCisJKGxheW91dF9yZWNvcmQpOiBTdGFydCB3aXRoIHRoYXQgdGVudGF0aXZlIHNpemUuCisJQWxzbywgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBDT05TVF9ERUNMIG1lbWJlcnMuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF91bmlvbik6IFNpbXBsZXIgZXJyb3IgcmVwb3J0IGZvciBzdGF0aWMgbWVtYi4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfZnJhbWVfcG9pbnRlcik6IFJlZHVjZSBQVVNIX1JPVU5ESU5HCisJY29uZGl0aW9uYWwgdG8gYXBwbHkgb25seSB0byBwdXNoIGluc3RydWN0aW9ucy4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEZpeCBzdHVwaWQgZXJyb3JzIGhhbmRsaW5nIE1BWF9QQVJNX0JPVU5EQVJZLgorCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KKworCSogdG9wbGV2LmMgKGFubm91bmNlX2Z1bmN0aW9uLCByZXBvcnRfZXJyb3JfZnVuY3Rpb24pOgorCShlcnJvcl93aXRoX2RlY2wsIHdhcm5pbmdfd2l0aF9kZWNsKTogVXNlIERFQ0xfUFJJTlRfTkFNRS4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFN1YnRyYWN0IGludGVncmF0aW9uX3RpbWUgZnJvbSBwYXJzZV90aW1lLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogRG9uJ3Qgb3V0cHV0IHJlYWQtb25seSBzdGF0aWMgdmFyaWFibGVzCisJYXQgZW5kIG9mIGNvbXBpbGF0aW9uIGlmIGFkZHJlc3Mgd2FzIG5vdCB1c2VkLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEhhbmRsZSBmbGFnX3N5bnRheF9vbmx5LgorCisJKiB0b3BsZXYuYyAobWFpbik6IEhhbmRsZSAtZzAgYW5kIC1HMCBvcHRpb25zLgorCUZvciAtZyBhbmQgLUcsIHNldCB1c2VfZ2RiX2RieF9leHRlbnNpb25zLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFNldCBgcHJvZ25hbWUnLgorCShwZmF0YWxfd2l0aF9uYW1lLCBmYXRhbF9pb19lcnJvciwge2Vycm9yLHdhcm5pbmd9X3dpdGhfZmlsZV9hbmRfbGluZSk6CisJKHNvcnJ5KTogUHJpbnQgdmFsdWUgb2YgYHByb2duYW1lJywgbm90ICJjYzEiLgorCisJKiB0cmVlLmRlZjogRGVsZXRlIEZSSUVORF9ERUNMLiAgQWRkIFBVU0hfRVhQUiBhbmQgUE9QX0VYUFIuCisKKwkqIHRyZWUuYyAoc2ltcGxlX2NzdF9lcXVhbCk6IEhhbmRsZSBJTkRJUkVDVF9SRUYuCisKKwkqIHRyZWUuYyAobHZhbHVlX3ApOiBIYW5kbGUgTUVUSE9EX1RZUEUuICBIYW5kbGUgTkVXX0VYUFIuCisKKwkqIHRyZWUuYyAoY29weV9saXN0KTogTmV3IGZ1bmN0aW9uLgorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2RlY2wpOiBOZXcgZmllbGRzIHByaW50X25hbWUgYW5kIGFzc2VtYmxlcl9uYW1lLgorCShERUNMX1BSSU5UX05BTUUsIERFQ0xfQVNTRU1CTEVSX05BTUUpOiBOZXcgYWNjZXNzb3JzLgorCisJKiBjLWRlY2wuYyAoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTmV3IGNvbXBpbGF0aW9uIHBhcmFtZXRlci4KKworV2VkIE1heSAxNyAyMjowNzoxNyAxOTg5ICBSYW5kYWxsIFNtaXRoICAocmFuZHkgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBkYnJhbmNoLmMgKGVtaXRfZGVsYXlfc2VxdWVuY2UpOiBSZXNldCBpbnNuIGNvZGUgdG8gLTEgd2hlbgorCXR1cm5pbmcgaW5zbiBpbnRvIGEgc2VxdWVuY2Ugc28gdGhhdCBpdCB3b24ndCB0aGluayB0aGF0IGl0IG1hdGNoZXMKKwlzb21ldGhpbmcgaW4gdGhlIG1kIGZpbGUuCisKKwkqIGRicmFuY2guYyAoaW5zbl9lbGlnaWJsZV9wKTogQ2FsbCByZWZlcnNfdG9fcmVnbm9fcCB3aXRoIGEKKwlub24temVybyByYW5nZS4KKworCSogZGJyYW5jaC5jIChwbm90ZSk6IE1vZGlmaWVkIHRvIG1ha2Ugc3VyZSBpbnN0cnVjdGlvbiBjbG9iYmVyZWQKKwlyZWdpc3RlciBpcyBhIHNldCwgcmF0aGVyIHRoYW4sIHNheSwgYSBjbG9iYmVyLgorCitXZWQgTWF5IDE3IDE0OjAxOjIwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9wYXJtcyk6IEhhbmRsZSBwYXJtIHdpdGggbm8gbmFtZS4KKworCSogbG9vcC5jIChjb21iaW5lX21vdmFibGVzKTogVGVzdCBmb3Igb3ZlcmxhcCBvZiB6ZXJvLWV4dGVuZCByZWdzCisJd2FzIHNjcmV3ZWQgdXAuCisKKwkqIGMtdHlwZWNrLmMgKGNfc2l6ZW9meyxfbm93YXJufSk6IENvbnZlcnQgZnJvbSBieXRlcyB0byBjaGFycywKKwlzaW5jZSBjIGRlZmluZXMgc2l6ZW9mIChjaGFyKSBhcyAxLgorCShwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZik6IFVzZSBjX3NpemVvZnssX25vd2Fybn0uIAorCitUdWUgTWF5IDE2IDE2OjI3OjMyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBEb24ndCByZXVzZSByZWdzCisJbWVudGlvbmVkIGluIHJlbG9hZF9yZWdfcnR4LgorCisJKiB0bS10YWhvZS5oLCB0YWhvZS5tZCwgb3V0LXRhaG9lLmMsIHhtLXRhaG9lLmg6IE5ldyBmaWxlcy4KKworTW9uIE1heSAxNSAxNjoyNToxMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBFeGl0IHdpdGggZXhwbGljaXQgc3RhdHVzIDAgYXQgZW5kLgorCWNkIHRvIC91c3IvaW5jbHVkZSBiZWZvcmUgY2QgdG8gc3VidHJlZSByb290IGluIGNhc2Ugb2YgcmVsYXRpdmUgbGluay4KKwlDcmVhdGUgZGlyICRMSUIgZWFybGllci4KKwlXaGVuIGNoZWNraW5nIGZvciBhIGxpbmssIHRyZWF0IC4uIGxpa2UgYW4gYWJzb2x1dGUgdGFyZ2V0LgorCisJKiBzeW1vdXQuYyAoc3ltb3V0X2Jsb2NrX3N5bWJvbHMpOiBHaXZlIGV2ZXJ5IGxvY2FsIGRlY2wgYSB0eXBlc3BlYy4KKwkqIGNleHAueSAocGFyc2VfbnVtYmVyKToKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcywgZHVtcF9mbG93X2luZm8pOgorCisJKiBsb29wLmMgKGNvbnNlY19zZXRzX2ludmFyaWFudF9wKTogTG9naWMgZXJyb3IgYWNjZXB0ZWQgY29uc2VjIHNldHMKKwlvZiB3aGljaCBvbmx5IG9uZSB3YXMgaW52YXJpYW50LgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogVXNlIG5vIHN1YnRhcmdldHMgaW5zaWRlIGxvb3BzLgorCSogc3RtdC5jIChpbnNpZGVfbG9vcCk6IE5ldyBmdW5jdGlvbi4KKworU3VuIE1heSAxNCAwMDoxMTowNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuaDogRGVjbGFyZSBsb25nIGxvbmcgdHlwZXMuCisKKwkqIGMtcGFyc2UueSAoY29tYmluZV9zdHJpbmdzKTogTWFrZSBzdHJpbmcgY29udGVudHMgc2F2ZWFibGUuCisKKwkqIHRyZWUuYyAoc2F2ZWFsbG9jKTogTmV3IGZ1bmN0aW9uLgorCisJKiBtNjhrLm1kIChtb3ZkaSk6ICUgbWlzc2luZyBpbiBmbW92ZSUuZC4KKworCSogYy1wYXJzZS55ICh5eWxleCk6IERldGVjdCBvdmVyZmxvdyBwYXN0IDY0LWJpdHMuCisJRGV0ZWN0IHNwZWNpYWxseSBudW1iZXJzIG5vdCBmaXR0aW5nIGluIHNpZ25lZCBsb25nIGxvbmcuCisKK1NhdCBNYXkgMTMgMTM6MTY6MDUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGFsdGVyX2ZyYW1lX3BvaW50ZXJfYWRkcmVzc2VzKTogUHJlc2VydmUgdm9sYXRpbGl0eS4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6IERpZSBpZiBCSVRTX1BFUl9VTklUIGlzIHRvbyBiaWcKKwlmb3IgdGhpcyBmdW5jdGlvbiB0byB3b3JrLgorCisJKiBnZW5wZWVwLmMgKG1hdGNoX3J0eCk6IEZvciBtYXRjaF9vcGVyYXRvciwgbWF0Y2ggdGhlIG9wZXJhbmRzLCB0b28uCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnQpOiBVc2UgQVNNX09VVFBVVF9ET1VCTEVfSU5UIGZvciBESW1vZGUuCisKKwkqIHN0b3ItbGF5b3V0LmMgKG1ha2Vfc2lnbmVkX3R5cGUsIG1ha2VfdW5zaWduZWRfdHlwZSk6CisJKGZpeHVwX3Vuc2lnbmVkX3R5cGUpOiBVc2UgSE9TVF9CSVRTX1BFUl9JTlQuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogVXNlIFRGbW9kZSBpZiBhcHByby4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBVc2UgbW9kZSBzaXplcyB0byBjaGVjayBjbXBzdHJxaSwgY21wc3RyaGkuCisKKwkqIGMtdHlwZWNrLmMgKGdldF9mbG9hdGluZ190eXBlKTogQ29tcGFyZSBNT0RFIGFnYWluc3QgbW9kZXMgb2YgdHlwZXMuCisJKHNpZ25lZF90eXBlLCB1bnNpZ25lZF90eXBlLCBzaWduZWRfb3JfdW5zaWduZWRfdHlwZSwgdHlwZV9mb3Jfc2l6ZSk6CisJSGFuZGxlIGxvbmcgbG9uZyB0eXBlcy4KKwkoZGlnZXN0X2luaXQpOiBEb24ndCBhc3N1bWUgd2lkdGggb2YgYGNoYXInIGlzIEJJVFNfUEVSX1VOSVQuCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBGb3IgdHJ1bmNhdGluZyBjaGFycywgdXNlIHdpZHRoIG9mIGBjaGFyJyB0eXBlLgorCUFsbG93IGBsbCcgaW4gaW50IGNvbnN0YW50cyBhbmQgbWFrZSBsb25nIGxvbmcuCisJQWxzbyBtYWtlIGxvbmcgbG9uZyBpZiBjb25zdGFudCB3b24ndCBmaXQgaW4gYW4gaW50LgorCisJKiBjLWRlY2wuYyAoU0hPUlRfVFlQRV9TSVpFKTogUm91bmQgdXAgd2hlbiBkaXZpZGluZy4KKworRnJpIE1heSAxMiAyMjozNjoyMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlYWwuaDogQWxsb3cgbXVsdGlwbGUgaW5jbHVzaW9uLgorCisJKiB0bS1zdW4zODZpLmggKERCWF9SRUdJU1RFUl9OVU1CRVIpOiBCaXphcnJlIHJlbnVtYmVyaW5nLgorCitUaHUgTWF5IDExIDAwOjM2OjIxIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IEZpeCBub24tYW5zaSBkZWNsYXJhdGlvbiBvZiBzcHJpbnRmIGluIFgxMS9YbXUuaAorCisJKiBjLXBhcnNlLnkgKHN0bXQgZnJvbSBleHByKTogRG8gZGVmYXVsdCBjb252ZXJzaW9uIGlmIHVzZWZ1bAorCWZvciBzYWtlIG9mICh7Li4ufSkuCisKKwkqIHNwYXJjLm1kIChhbmRjYyByZWNvZ25pemVyKTogT3BlcmFuZCBtaXNzaW5nIGluIHN1YnJlZy4KKworV2VkIE1heSAxMCAxNzoyMDozOCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJ0bC5jIChyZWFkX25hbWUpOiBFcnJvciBpZiBuYW1lIGlzIG1pc3NpbmcuCisJKGR1bXBfYW5kX2Fib3J0KTogRG9uJ3QgcHJpbnQgY2hhciBhcmdzIGlmIC0xLgorCisJKiBpMzg2Lm1kICh1bXVscWloaTMpOiBPcGVyYW5kIG51bWJlcnMgd2VyZSBtaXNzaW5nLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IEFsbG93IHNwaWxsIHJlZyBpbiBmaW5kX2VxdWl2X3JlZworCWlmIGl0J3MgZnJlZSBhbmQgY29ycmVjdCBjbGFzcy4gCisKKwkqIGNzZS5jIChjYW5vbl9oYXNoKTogSGFuZGxlIGVtcHR5IHN0cmluZ3MuCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBOZXdsaW5lIG5ld2xpbmUgdHJlYXRlZCBsaWtlIHJlYWwgd2hpdGUgc3BhY2UKKwl3aGVuIHN0cmluZ2lmeWluZy4KKworCSogUmVuYW1lICpvZmZzZXRhYmxlKiB0byAqb2Zmc2V0dGFibGUqLgorCitUdWUgTWF5ICA5IDIyOjU0OjU4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF90eXBlKTogTGF5b3V0IGFueSB2YXJpYW50cyBvZiB0aGUgdHlwZS4KKworVHVlIE1heSAgOSAxMjozMDoyOCAxOTg5ICBSYW5kYWxsIFNtaXRoICAocmFuZHkgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24sIGZpbmFsKTogQWRkZWQgYW4gYXJndW1lbnQgdG8KKwlmaW5hbF9zY2FuX2luc24gdG8gZGlzYWxsb3cgcGVlcGhvbGUgcHJvY2Vzc2luZyAodG8gdHVybiBpdCBvZmYKKwlkdXJpbmcgZGVsYXllZCBicmFuY2ggc2NoZWR1bGluZykuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IE1hZGUgaW5zbiBub3QgbWF0Y2hpbmcgYW55IE1EIHJ0bCBhCisJY3JpdGVyaWEgZm9yIGRlbGF5ZWQgYnJhbmNoIGNhc2UuICBNb3ZlZCBkZWxheWVkIGJyYW5jaCBjYXNlIHRvIGp1c3QKKwliZWZvcmUgcmVhbCBpbnNuIHJlY29nbml0aW9uIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGluc25zIG9uIHdoaWNoCisJcmVjb2dfbWVtb2l6ZWQgaXMgY2FsbGVkLgorCitNb24gTWF5ICA4IDE1OjAyOjQyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKExJQik6IEFsbG93IG92ZXJyaWRpbmcuCisKKwkqIGNjY3AuYzogRG9uJ3Qgc2VhcmNoIC91c3IvaW5jbHVkZS9DQyBieSBkZWZhdWx0LgorCitNb24gTWF5ICA4IDEzOjA5OjIxIDE5ODkgIFJhbmRhbGwgU21pdGggIChyYW5keSBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IEZpeGVkIHR5cG87IElERU5USUZJRVIgPT0+IElERU5USUZJRVJfTk9ERS4KKworU3VuIE1heSAgNyAxMjo0NDo1MyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IFRZUEVfTkFNRSBtYXkgYmUgSURFTlRJRklFUiBvciBUWVBFX0RFQ0wuCisKK1NhdCBNYXkgIDYgMDA6MTM6NDcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmRlZjogRGVmaW5lIEVYQUNUX0RJVl9FWFBSLCBmb3Igd2hlbiByZW1haW5kZXIga25vd24gYXMgMC4KKwkqIGZvbGQtY29uc3QuYyAoY29tYmluZSwgZm9sZCwgZGl2X2FuZF9yb3VuZF9kb3VibGUpOiBIYW5kbGUgbmV3IGNvZGUuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogTGlrZXdpc2UuCisJKiBjLXR5cGVjay5jIChwb2ludGVyX2RpZmYpOiBVc2UgRVhBQ1RfRElWX0VYUFIuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogVXNlIHNpemUgb2YgcGFzc2VkIHR5cGUKKwlmb3IgYWxsb2NhdGluZyBzdGFjayBzbG90IHdpdGggdGhhdCB0eXBlLgorCisJKiBjLXBhcnNlLnkgKG1heWJlX2F0dHJpYnV0ZSwgYXR0cmlidXRlKik6IE5ldyBzeW50YXggZm9yIEFwb2xsb3MuCisJVGhlc2UgdG9rZW5zIGN1cnJlbnRseSBub3QgZ2VuZXJhdGVkLgorCitGcmkgTWF5ICA1IDE4OjQzOjAxIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgW1VTR106IFVuZGVmaW5lIEZMT0FUIGZvciBzYWtlIG9mIHN5cy9wYXJhbS5oIG9uIGhwdXguCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBJZiBiYWNrdHJhY2tpbmcsIGRvbid0IGRlbGV0ZSBpbnNucyBtYWRlCisJZm9yIC1mZm9yY2UtbWVtLgorCitUaHUgTWF5ICA0IDAxOjU3OjIzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvbid0IGNvbXBhcmUgYW4gZWFybHljbG9iYmVyIG9wZXJhbmQKKwl3aXRoIGl0c2VsZi4KKworCSogcmVsb2FkLmMgKGltbXVuZV9wKTogQ29uc3RhbnRzIGFuZCBzdGFjayBzbG90cyBkb24ndCBvdmVybGFwLgorCisJKiBQdXQgbm8tb3BzIGluIGZyb250IG9mIGxvb3BzIGFuZCBsYWJlbHMsCisJdG8gcHJldmVudCBjb25mdXNpb24gaW4gdGhlIGRlYnVnZ2VyLgorCSogYy1wYXJzZS55IChsb29wcyBhbmQgbGFiZWxzKTogQ2FsbCBlbWl0X25vcC4KKwkqIHN0bXQuYyAoZW1pdF9ub3ApOiBOZXcgZnVuY3Rpb24tLXNvbWV0aW1lcyBlbWl0IGEgbm8tb3AuCisJKiAqLm1kIChub3ApOiBOZXcgaW5zbi4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IFR5cG8gaW4gYXJnIHRvIEZJUlNUX1BBUk1fQ0FMTEVSX09GRlNFVC4KKworV2VkIE1heSAgMyAwMTozNDo1OCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogU2Nhbm5pbmcgYXJvdW5kIGVuZCBvZiBsb29wCisJc2hvdWxkIG5vdCBzZXQgbWF5YmVfbmV2ZXIuCisKKwkqIFJlbmFtZSBTRUxFQ1RfVkFSSUFCTEVfU0VDVElPTiB0byBTRUxFQ1RfU0VDVElPTi4KKwkqIHZhcmFzbS5jIChnZXRfb3JfYXNzaWduX2xhYmVsKTogVXNlIFNFTEVDVF9TRUNUSU9OIGlmIGRlZmluZWQuCisJKiB2YXJhc20uYzogVXNlIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TIGlmIGRlZmluZWQgKG5ldyBtYWNybykuCisKKwkqIG1pcHMubWQ6IENoYW5nZSAldSB0byAldTAgdG8gYXZvaWQgZXJyb3IgY2hlY2suCisKKwkqIHRtLW1pcHMuaCAoVEFSR0VUX1ZFUlNOVU0pOiBJbmMuIHRvIDEgMDguCisJKFRBUkdFVF9WRVJTSU9OKTogQ2hhbmdlIHN0cmluZ3MuCisJKEFMX0RFQlVHKTogRG9uJ3QgZGVmaW5lIGl0LgorCShIQVJEX1JFR05PX01PREVfT0spOiBBZGQgc29tZSBjYXN0cyB0byBpbnQuCisJKFNUQUNLX0FSR1NfQURKVVNUKTogTmFtZSB3YXMgbWlzc3BlbGxlZC4KKwkoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogSnVzdCBhYm9ydCBmb3IgTUVNLCBQT1NUX0lOQywgZXRjLgorCShFWFRSQV9TRUNUSU9OUywgU0VMRUNUX1ZBUklBQkxFX1NFQ1RJT04sIFNFTEVDVE9SU19FWFRSQV9TRUNUSU9OUywKKwlTRUxFQ1RfVkFSSUFCTEVfQ09OU1RfU0VDVElPTik6IE5ldyBtYWNyb3MuCisJKEFTTV9GSUxFX0VORCk6IENoYW5nZSBmdW5jdGlvbiBuYW1lLgorCSogb3V0LW1pcHMuYyAoZnVuY3Rpb25fYXJnX2FkdmFuY2UpOiBEZWxldGUgZGVidWdnaW5nIHByaW50ZnMuCisJKGZ1bmN0aW9uX2luYXJnLCBmdW5jdGlvbl9hcmcpOiBMaWtld2lzZS4KKwkoY29tcGFyZV9jb2xsZWN0LCBjb21wYXJlX3Jlc3RvcmUpOiBBZGQgc29tZS4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBGaXggaGFuZGxpbmcgb2YgY2FsbGVyX3NhdmVfbmVlZGVkLgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IENsZWFyIGNhbGxlcl9zYXZlX25lZWRlZC4KKworCSogc3RtdC5jIChlbWl0X2Nhc2Vfbm9kZXMpOiBTb21lIGNvbXBpbGVyIGhhcyB0cm91YmxlIHdpdGggY2FsbGluZworCWEgZnVuY3Rpb24gcG9pbnRlci4KKwkqIGdudWxpYi5jOiBsaWtld2lzZS4KKworVHVlIE1heSAgMiAxNTozMjoyNSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoY29tYmluZV9tb3ZhYmxlcyk6IEZvciB6ZXJvIGV4dGVuZCwKKwlkbyBlYWNoIGZyb20tbW9kZSBzZXBhcmF0ZWx5LgorCitNb24gTWF5ICAxIDAwOjE4OjQ3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tYXBvbGxvNjguaDogTmV3IGZpbGUuCisKKwkqIGMtcGFyc2UueSAoaXNfcmVzZXJ2ZWRfd29yZCwgaGFzaCk6IEFkZCBrZXl3b3JkcyBgX19hc21fXycsIGV0Yy4KKwkqIGMtcGFyc2UuZ3BlcmY6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKworCSogYy1wYXJzZS55IChjaGVja19uZXdsaW5lKTogU2V0IG1haW5faW5wdXRfZmlsZW5hbWUgYmVmb3JlCisJY29uc2lkZXJpbmcgb3B0aW9uYWwgYXJndW1lbnRzLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2Z1bmN0aW9uKTogUmV0dXJuIG5leHQgaW5zbiB0byBwcm9jZXNzLgorCVVzdWFsbHkgdGhhdCdzIHRoZSBmb2xsb3dpbmcgaW5zbjsgb2NjYXNpb25hbGx5LCBwcmV2aW91cyBjb21wYXJlLgorCisJKiBjLWRlY2wuYyAoRE9VQkxFX1RZUEVfU0laRSk6IFdyb25nIHZhbHVlLgorCisJKiByZWxvYWQuYyAoZGVjb21wb3NlKTogRmFpbGVkIHRvIHJldHVybiB2YWx1ZS4KKworCSogU3VwcG9ydCBsb2NhbCBzcGVjaWZpZWQtcmVnaXN0ZXIgdmFyaWFibGVzLgorCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSk6IE5ldyBmdW5jdGlvbiwgY3Z0IGFzbXNwZWMgdG8gcmVnbnVtLgorCShtYWtlX2RlY2xfcnRsKTogQ2FsbCB0aGF0LgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbik6IEhhbmRsZSBsb2NhbCBzcGVjaWZpZWQtcmVnaXN0ZXIKKwlkZWNsYXJhdGlvbnMuCisKKwkqIGkzODYubWQgKHRzdHFpLCB0cnVuYypxaSk6IENvbnN0cmFpbiB0byBgcScgcmVncy4KKworCSogbG9vcC5jIChzY2FuX2xvb3AsIG1vdmVfbW92YWJsZXMpOiAtPmdsb2JhbCBmb3IgemVyby1leHRlbmQgcmVnaXN0ZXIKKwlub3cgbWVhbnMgcmVnaXN0ZXIgaXMgdXNlZCBvdXRzaWRlIHJhbmdlIGZyb20gd2hlcmUgaXQgaXMgc2V0CisJdG8gdGhlIGZvbGxvd2luZyBsYWJlbC4gIE5vbi1nbG9iYWwgemVyby1leHRlbmQgcmVncworCW1heSBiZSBlbnRpcmVseSBjbGVhcmVkLgorCisJKiBsb29wLmMgKGNvbWJpbmVfbW92YWJsZXMpOiBMb29wIHRoYXQgY29tYmluZXMgbWF0Y2hpbmcgbW92YWJsZXMKKwlicm9rZW4gb3V0IGZyb20gc2Nhbl9sb29wLgorCU5vdyBhbHNvIGNvbWJpbmUgbm9uLWdsb2JhbCB6ZXJvLWV4dGVuZCByZWdpc3RlcnMgd2l0aCBlYWNoIG90aGVyCisJaWYgdGhlaXIgbGlmZXNwYW5zIGRvbid0IG92ZXJsYXAuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wLCBBRERSX0VYUFIgb2YgYSBDT01QT05FTlRfUkVGKToKKwlBbHdheXMgY29udmVydCB0byBkZXNpcmVkIHJlc3VsdCB0eXBlLgorCitTdW4gQXByIDMwIDEyOjU4OjU4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTmV3IG1hY3JvcyBwYXJhbWV0ZXJpemUgaW50IHR5cGVzLgorCUNIQVJfVFlQRV9TSVpFLCBTSE9SVF9UWVBFX1NJWkUsIExPTkdfVFlQRV9TSVpFLCBMT05HX0xPTkdfVFlQRV9TSVpFLAorCUZMT0FUX1RZUEVfU0laRSwgRE9VQkxFX1RZUEVfU0laRS4KKworCSogZml4aW5jbHVkZXM6IFVzZSBzZWQgaW5zdGVhZCBvZiBleC4gIE5vIHByb2JsZW0gd2l0aCBzcGxpdCBsaW5lcy4KKworCSogcHJpbnQtdHJlZS5jIChkdW1wKTogUHJpbnQgdHlwZSdzIG5hbWUsIGlmIGFueS4KKworCSogYy1wYXJzZS55OiBVc2UgX19pbmxpbmUsIG5vdCBwbGFpbiBpbmxpbmUuCisKKwkqIHRvcGxldi5jOiBOZXcgb3B0aW9uIC1mZGVsYXllZC1icmFuY2guCisJKGNvbXBpbGVfZmlsZSk6IE9wZW4gYW5kIGNsb3NlIGRicmFuY2ggZHVtcCBmaWxlLgorCUNvbGxlY3QgYW5kIHByaW50IGRicmFuY2ggdGltZS4KKwkocmVzdF9vZl9jb21waWxhdGlvbik6IE9wdGlvbmFsbHkgZG8gZGJyYW5jaCBzY2hlZHVsaW5nLCAKKwlvbmx5IGlmIEhBVkVfREVMQVlFRF9CUkFOQ0guCisJKG1haW4pOiBIYW5kbGUgLWRkLgorCisJKiBydGwuYyAoY29weV9ydHgpOiBIYW5kbGUgbnVsbCBwb2ludGVycyBhcyBjb2RlIGBlJy4KKworCSogZmluYWwuYyAoZGJyX3NlcXVlbmNlX2xlbmd0aCk6IE5ldyBmdW5jdGlvbi4KKwkoZmluYWxfc2Nhbl9pbnNuKTogTW9zdCBvZiBgZmluYWwnIGJyb2tlbiBvdXQuCisJQWRkIHN1cHBvcnQgZm9yIFNFUVVFTkNFIGluc25zLgorCWxhc3RfaWdub3JlZF9jb21wYXJlIGFuZCBuZXdfYmxvY2sgbm93IHRvcC1sZXZlbCBzdGF0aWMuCisKKwkqIGMtcGFyc2UueSAoTUFYX1dPUkRfTEVOR1RIKTogTG9uZyBlbm91Z2ggZm9yIF9fdm9sYXRpbGUuCisKK1NhdCBBcHIgMjkgMTM6MDM6MjAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKGFzbSBzdGF0ZW1lbnRzKTogT3V0cHV0IGxpbmUgbnVtYmVycy4KKworCSogbG9vcC5jIChlbWl0X2l2X2luaXRfY29kZSwgZW1pdF9pdl9pbmMsIGVsaW1pbmF0ZV9iaXYpOiBDb3B5CisJYWRkaXRpdmUgdGVybSBydHgncyB0byBwcmV2ZW50IHNoYXJpbmcgYmV0d2VlbiBpbnNucy4KKworCSogYy1wYXJzZS55IChjaGVja19uZXdsaW5lKTogSW5jcmVtZW50IGlucHV0X2ZpbGVfc3RhY2tfdGljay4KKwkqIHRvcGxldi5jIChyZXBvcnRfZXJyb3JfZnVuY3Rpb24pOiBEZXNjcmliZSBpbnB1dCBzdGFjayBvbmx5IGlmCisJY2hhbmdlZC4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZWplY3QgemVybyB3aWR0aCBmb3IgbmFtZWQgZmllbGQuCisKKwkqIHRtLXN1bjMuaCAoQ0MxX1NQRUMpOiBQcmV2ZW50IGVycm9yIG9uIGAtc3VuMycuCisJKiB0bS1zcGFyYy5oIChDQzFfU1BFQyk6IFByZXZlbnQgZXJyb3Igb24gYC1zdW40Jy4KKworCSogTWFrZWZpbGUgKGNsZWFuY29uZmlnKTogY2xlYW5saW5rcyByZW5hbWVkOyBhbHNvIGRlbGV0ZSBnbnVsaWIuCisJKGdudWxpYik6IERlbGV0ZSBzdGFtcC1nbnVsaWIyIHNpbmNlIGdudWxpYjIgc2hvdWxkIGJlIHJlZG9uZSBhZnRlci4KKworRnJpIEFwciAyOCAwMDozODozMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5nY2MgKGdlbml4KTogQ29ycmVjdCB4bSBmaWxlIG5hbWUuCisKKwkqIHRtLWdlbml4Lmg6IFVuZGVmaW5lIEFTTV9TUEVDIGluaGVyaXRlZCBmcm9tIHRtLWVuY29yZS5oLgorCisJKiBNYWtlZmlsZTogTWFrZSBmbG9hdC5oIHVzaW5nIGhhcmQtcGFyYW1zLgorCShjbGVhbik6IERlbGV0ZSBmbG9hdC5oLgorCisJKiBoYXJkLXBhcmFtcy5jOiBOZXcgcHJvZ3JhbS4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogVXNlIFNFTEVDVF9WQVJJQUJMRV9TRUNUSU9OIGlmIGRlZmluZWQuCisJKGluX3NlY3Rpb24pOiBVc2UgRVhUUkFfU0VDVElPTlMgaWYgZGVmaW5lZC4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgQVNNX0ZJTEVfRU5EIGlmIGRlZmluZWQuCisKKwkqIGdjYy5jIChTV0lUQ0hfVEFLRVNfQVJHLCBXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBMZXQgY29uZmlnIG92ZXJyaWRlLgorCisJKiBsb29wLmMgKGVtaXRfaXZfaW5pdF9jb2RlKTogRm9yY2UgQSB0byBhIHJlZyBpZiBpdCBpc24ndC4KKworVGh1IEFwciAyNyAxMjo1MToxNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW1pcHMuaCAoQVNNX1NUQVJUX0ZJTEVTKTogRG9uJ3QgY2FsbCBwcmludF9vcHRpb25zLgorCURvbid0IGNhbGwgdGhlIGZ1bm55IGFib3J0LWZ1bmN0aW9ucy4KKwkqIG91dC1taXBzLmM6IERlbGV0ZSBmdW5ueSBkZWJ1Z2dpbmcgZnVuY3Rpb25zIGFuZCBhYm9ydHMuCisJKHByaW50X29wdGlvbnMpOiAjaWYgMC4KKwkoY29tcGFyZV9yZXN0b3JlKTogVGVzdCBmb3IgQ09NUEFSRSwgbm90IE1JTlVTLgorCShtaXBzX3NlY3Rpb25fZ2V0LCBtaXBzX291dHB1dF9leHRlcm5hbCwgbWlwc19hc21fZmluYWwpOiBOZXcgZm5zLgorCisJKiBpbnB1dC5oOiBOZXcgZmlsZSB3aXRoICppbnB1dF9maWxlbmFtZSwgbGluZW5vIGFuZCBpbnB1dF9maWxlX3N0YWNrLgorCUluY2x1ZGVkIGluIHRvcGxldi5jIGFuZCBjLXBhcnNlLnkuCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogTElORU5PIGlzIG5vdyBhcmcuCisJKiBjLXBhcnNlLnk6IENhbGxzIGNoYW5nZWQuCisKKwkqIGMtcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IEhhbmRsZSBgMScgb3IgYDInIGZyb20gY3BwCisJYnkgcHVzaGluZyBvciBwb3BwaW5nIGlucHV0X2ZpbGVfc3RhY2suCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogUHVzaCBtYWluIGlucHV0IGZpbGUgb24gaW5wdXRfZmlsZV9zdGFjay4KKwkocmVwb3J0X2Vycm9yX2Z1bmN0aW9uKTogSWYgaW4gaW5jbHVkZSBmaWxlLCBwcmludCB0aGUgY2hhaW4KKwlvZiBpbmNsdWRlLWxvY2F0aW9ucy4KKworCSogY2NjcC5jIChvdXRwdXRfbGluZV9jb21tYW5kKTogTmV3IGFyZyBzYXlzIHdoZXRoZXIgZW50ZXJpbmcgb3IKKwlsZWF2aW5nIGEgZmlsZS4gIE91dHB1dCBgMScgb3IgYDInIG9uICMtbGluZSBpZiBzby4gIENhbGxlcnMgY2hhbmdlZC4KKworCSogZ251bGliMi5jOiBMaXR0bGUtZW5kaWFuIGZpeGVzIGZyb20gY3NtaXRoQGNvbnZleC5jb20uCisKKwkqIGZpeGluY2x1ZGVzOiBXcm9uZyBxdW90aW5nIGluIGBlY2hvJyBjb21tYW5kLgorCisJKiB0bS1taXBzLmggKFJFR19QKTogRHVwbGljYXRlIGRlZm4gZGVsZXRlZC4KKwkoUFJJTlRfT1BFUkFORCk6IGBcJyB3YXMgbWlzc2luZy4KKworV2VkIEFwciAyNiAwMjo0NDo1OSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IFByZXByb2Nlc3MgZXZlbiAjcHJhZ21hLCBidXQgY29weSAKKwl0byBvdXRwdXQgZmlsZSBhZnRlcndhcmQuCisJKGRvX3ByYWdtYSk6IFVzZSBzdGFuZGFyZCBjYWxsaW5nIGNvbnZlbnRpb24uCisJKGluc3RhbGxfYnVpbHRpbnMsIHNwZWNpYWxfc3ltYm9sKTogRGVmaW5lIF9fSU5DTFVERV9MRVZFTF9fLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBEb24ndCBmb3JnZXQgdG8gY2xvc2UgZmlsZS4KKworCSogZmluYWwuYyAob3V0cHV0X2FzbV9pbnNuKTogVXNlIFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUAorCXRvIHZhbGlkYXRlIHB1bmN0dWF0aW9uIGFmdGVyIHBlcmNlbnQuCisJKiB0bS1tNjhrLmgsIHRtLWFsbGlhbnQuaCwgdG0tbnMzMmsuaCwgdG0tdmF4LmgsIHRtLWkzODYuaDoKKwlEZWZpbmUgUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QLgorCisJKiBWZXJzaW9uIDEuMzUgcmVsZWFzZWQuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBJTlRfQ1NUX0xUIG9ubHkgb24gaW50IGNvbnN0YW50cy4KKworVHVlIEFwciAyNSAxNTo0NzoxMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogQWx3YXlzIHJldHVybiBhIHZhbHVlLgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBMb29rIGluc2lkZSB6ZXJvX2V4dHJhY3QsIHNpZ25fZXh0cmFjdC4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCkgW1NUQUNLX0FSR1NfQURKVVNUXToKKwlGaXggdHlwbyBmb3IgYHN0cnVjdCBhcmdzX3NpemUnLgorCitNb24gQXByIDI0IDAwOjEyOjE4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChtYXJrX3NldF8xKTogTG9vayBpbnNpZGUgc3RyaWN0X2xvd19wYXJ0LgorCisJKiBjLXR5cGVjay5jIChkZWNsX2NvbnN0YW50X3ZhbHVlKTogRG9uJ3QgdXNlIHZhcidzIGluaXQgaWYgdm9sYXRpbGUuCisKKwkqIHByaW50LXRyZWUuYyAoZHVtcCk6IERvbid0IGNhbGwgd2FsayBvbiBydHgncy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDb252ZXJ0IGV4cGFuZGVkIGFyZyBmcm9tCisJcGFzc2VkIG1vZGUgdG8gbm9taW5hbCBtb2RlLgorCitTdW4gQXByIDIzIDEzOjE0OjQ3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IGZpeCBfSU8gbWFjcm9zIGlmIHNwbGl0IGFjcm9zcyB0d28gbGluZXMuCisJRml4IHR5cG86IEVPRiB3YXMgaW5kZW50ZWQuCisKKwkqIGdudWxpYjIuYzogTmV3IGZpbGUgd2l0aCBESW1vZGUgbGlicmFyeSByb3V0aW5lcy4KKwkqIE1ha2VmaWxlIChnbnVsaWIyKTogUHV0IHRoZW0gaW50byBnbnVsaWIuCisJTXVzdCBiZSBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKworRnJpIEFwciAyMSAxMzo0NTo0NSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IERvbid0IHR1cm4gb24gdHJpZ3JhcGhzIGZvciAtV3RyaWdyYXBocyBvciAtV2FsbDsKKwl1c2UgLXRyaWdyYXBocyBmb3IgdGhhdC4KKworCSogY2NjcC5jIChtYWluKTogVXNlIC10cmlncmFwaHMgdG8gZW5hYmxlIHRyaWdyYXBocy4KKwkqIGdjYy5jOiBQYXNzIC10cmlncmFwaHMgdG8gY3BwOyBkb24ndCBwYXNzIC1ULgorCisJKiBNYWtlZmlsZTogVmFyaWFibGUgc3JjZGlyIHJlbGF0ZXMgbG9jYXRpb24gb2Ygc291cmNlcworCXRvIGN1cnJlbnQgZGlyZWN0b3J5LiAgRGVmYXVsdCBpcyBgLicuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogV2hlbiBjb3B5aW5nIGV4cGFuZGVkIGFyZywKKwl1c2UgbW9kZSBpdCdzIHBhc3NlZCBpbiwgbm90IGFyZydzIG5vbWluYWwgbW9kZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9ibG9jayk6IFByaW50IGdlbmVyYXRlZCBuYW1lIHdpdGggYXNzZW1ibGVfbmFtZS4KKworVGh1IEFwciAyMCAxMjozNjowOSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0ZGFyZy5oOiBjaGVjayBfX3NwYXJjX18gaW5zdGVhZCBvZiBzcGFyYy4KKworVHVlIEFwciAxOCAxODo1ODowMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLW5leHQuaCAoU1RBUlRGSUxFX1NQRUMpOiBEZWZpbmUgaXQuCisKK01vbiBBcHIgMTcgMTk6NTY6MDUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2Jsb2NrKTogVXNlIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCB0byBmb3JtYXQKKwl0aGUgbGFiZWxzIExCQi4uLiBhbmQgTEJFLi4uCisKK1N1biBBcHIgMTYgMjM6NTc6NDcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtaXBzLm1kOiBDaGFuZ2UgTUlOVVMgdG8gQ09NUEFSRSB3aGVyZSBhcHByb3ByaWF0ZS4KKworU2F0IEFwciAxNSAxNjoxMTo0OSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0LCByZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UpOgorCVJlbmFtZSB2YXJpYWJsZXMgbmFtZWQgT0xEIGFuZCBORVcuCisKKwkqIHNwYXJjLm1kIChjc2UnZCBtdWx0IHBhdHRlcm4pOiBIYW5kbGUgbWVtb3J5IG9wZXJhbmRzLgorCU9wdGltaXplIHNtYWxsIGludGVnZXIgb3BlcmFuZHMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBPbiBzcGFyYywgZW5zdXJlIGR5bmFtaWMgYXJyYXlzIG9mIGRvdWJsZXMKKwlhcmUgcHJvcGVybHkgYWxpZ25lZCwgZGVzcGl0ZSB1bmFsaWduZWQgU1RBQ0tfUE9JTlRFUl9PRkZTRVQuCisKK0ZyaSBBcHIgMTQgMTA6NTk6NTYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogQnVncyB0cmVhdGluZyBzdHJ1Y3QgdmFsdWUgYWRkcmVzcyBhcyBwYXJhbToKKwlkbyBzbyBvbmx5IGlmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgcHVzaGVkOworCWRlY29kZSB2YWx1ZSBvZiBGVU5DVElPTl9BUkcgcHJvcGVybHkuCisKKwkqIHRtLWFsdG9zMzA2OC5oIChDUFBfU1BFQyk6IFNvbWUgYnJhY2VzIHdlcmUgZHJvcHBlZC4KKworCSogZ2NjLmMgKHBleGVjdXRlKTogUHJpbnQgbWVzc2FnZSB3aGVuIGV4ZWMgZmFpbHMuCisJKHBlcnJvcl9leGVjKTogTmV3IGZuLgorCShwZXJyb3Jfd2l0aF9uYW1lLHBmYXRhbF93aXRoX25hbWUpOiBDaGFuZ2UgbWVzc2FnZSBzeW50YXguCisKKwkqIHRtLWhwOWszMjAuaCAoQVNNX0lERU5USUZZX0dDQyk6IERlZmluZSBhcyBuby1vcC4KKworV2VkIEFwciAxMiAwMDoyMDozMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IENhbiByZWNvcmQgY29uc3RhbnQgdmFsdWUgYmVpbmcgc3RvcmVkIGluCisJYSBiaXQgZmllbGQsIGlmIHdlIGNhbiB0ZWxsIHRoYXQgdHJ1bmNhdGlvbiB3b24ndCBjaGFuZ2UgaXQuCisKKwkqIG02OGsubWQgKGJmc2V0LCBiZmNsciwgYmZjaGcgaW5zbnMpOiBEbyBDQ19TVEFUVVNfSU5JVAorCXNpbmNlIHRoZSBjYydzIGFyZSBzZXQgZnJvbSB0aGUgb2xkIGNvbnRlbnRzLgorCisJKiBnY2MuYyAoY29tcGlsZXJzKTogUnVubmluZyBgYXMnLCBwdXQgLW8gb3B0aW9uIGJlZm9yZSBpbnB1dCBmaWxlLgorCisJKiBnY2MuYzogRGVsZXRlIG91dHB1dCBmaWxlIG9ubHkgaWYgdGhhdCBmaWxlJ3MgY29tcGlsYXRpb24gZmFpbHMuCisJKiBnY2MuYyAocmVjb3JkX3RlbXBfZmlsZSk6IENoYW5nZWQgYXJnczogYWx3YXlzX2RlbGV0ZSwgZmFpbF9kZWxldGUuCisJKHN0b3JlX2FyZyk6IExpa2V3aXNlLiAgQ2FsbGVycyBjaGFuZ2VkLgorCShjbGVhcl9mYWlsdXJlX3F1ZXVlKTogQ2FsbGVkIGFmdGVyIGVhY2ggY29tcGlsYXRpb24uCisKK1R1ZSBBcHIgMTEgMDE6MTg6NTMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogKFNFVCAoWkVST19FWFRSQUNUKSAoT1IgKFpFUk9fRVhUUkFDVCkgY29uc3QpKQorCW9wdGltaXphdGlvbiB3YXMgc29tZXRpbWVzIGludmFsaWQuCisKKwkqIHRtLW02OGsuaCAoTk9USUNFX1VQREFURV9DQyk6IEEgZG91Ymxld29yZCBtb3ZlIHRoYXQgcmVxdWlyZXMgMiBpbnNucworCWRvZXMgbm90IHNldCB0aGUgY2MncyB1c2VmdWxseS4KKworCSogTWFrZWZpbGUgKGNsZWFubGlua3MpOiBKdXN0IGRvIGBjbGVhbicsIG5vdCBgcmVhbGNsZWFuJy4KKwkocmVhbGNsZWFuKTogRGVsZXRlIGNvbmZpZyBsaW5rcyBhbHNvLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogSGFuZGxlIGNhc2Ugd2hlcmUgcmV0dXJuIHZhbHVlIGlzIGluIG1lbW9yeQorCWJ1dCBUQVJHRVQgaXMgYSByZWdpc3Rlci4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IE5ldyBhcmcgRVJST1JfQ09ERQorCWlzIHBhc3NlZCB0byBiaW5hcnlfb3BfZXJyb3IgaW5zdGVhZCBvZiBDT0RFLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKGJpbmFyeV9vcF9lcnJvcik6IENPREUgPSBOT1BfRVhQUiBpcyBuZXcgc3BlY2lhbCBjYXNlLgorCSh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBDYWxsIGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQgZGlyZWN0bHkKKwlhbmQgc3BlY2lmeSBOT1BfRVhQUiBmb3IgdGhlIGVycm9yIGNvZGUuCisKKwkqIGMtZGVjbC5jICh4cmVmX3RhZyk6IElmIHBlZGFudGljLCB3YXJuIG9uIGZ3ZCByZWYgdG8gZW51bS4KKworTW9uIEFwciAxMCAxOTo0NDo0OCAxOTg5ICBDaHJpcyBTbWl0aCAgKGNzbWl0aCBhdCBtb3phcnQpCisKKwkqIHRtLWNvbnZleC5oIChQQ0NfQklURklFTERfVFlQRV9NQVRURVJTKTogSXQgZG9lc24ndCwKKwlidXQgc2V0IGl0IGFueXdheS4gIEl0IG1ha2VzIGZvciBiZXR0ZXIgY29kZSBvbiB0aGlzCisJd29yZCBtYWNoaW5lLgorCisJKiBjb252ZXgubWQgKG9uZV9jb21wbCopOiBhZGQgbm90OlFJIGFuZCBub3Q6SEksIHdoaWNoCisJZG8gZ2V0IHVzZWQgYWZ0ZXIgYWxsLgorCisJKiB0bS1jb252ZXguaCAoQV9SRUdfUCwgU19SRUdfUCk6IGRlZmluZSBuZXcgbWFjcm9zCisJY29udmV4Lm1kOiB1c2UgdGhlbQorCisJKiBjb252ZXgubWQgKGFkZHNpMyk6IHRpZHkgdXAgY29uc3RyYWludHMuCisKKwkqIHRtLWNvbnZleC5oIChSRUdfT0tfRk9SX0lOREVYX1ApOiBzdGFjayBwb2ludGVyIGlzIG5vdCBvay4KKworCSogY29udmV4Lm1kOiBhZGQgYSBwYXR0ZXJuIHRvIHB1c2ggUkVHK0NPTlNUIHNvIHdlIGNhbgorCXByZWZlciBhbiBBIHJlZy4KKworCSogdG0tY29udmV4LmggKHRzdHFpKTogc2hvdWxkIHNpZ24gZXh0ZW5kLCBub3QgemVybyBleHRlbmQuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogRXh0ZW5kaW5nIG5hcnJvdyB0byBESSB2aWEgU0ksCisJb3BlcmFuZCBvZiBleHRlbmRzaWRpMiB3YXMgd3JvbmcuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0KTogSGFuZGxlIENPTlNUX0RPVUJMRS4KKworTW9uIEFwciAxMCAwNToxOTozOSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJlY29nLmMgKG5vbm1lbW9yeV9vcGVyYW5kKTogVGVzdCBjb25zdGFudCBvcGVyYW5kcworCWFzIGdlbmVyYWxfb3BlcmFuZCBkb2VzLgorCisJKiB0bS1tNjhrLmggKFBSSU5UX09QRVJBTkQpOiBMaW1pdCBlZmZlY3Qgb2YgY29kZSBgZCcKKwl0byBjb25zdGFudCBhZGRyZXNzZXMuCisKKwkqIGxvb3AuYyAoY2FuX2VsaW1pbmF0ZV9iaXZfcCwgZWxpbWluYXRlX2Jpdik6IERvbid0IHJlbHkgb24gZ2l2cyB3aXRoCisJbm9uY29uc3RhbnQgY29lZmZpY2llbnRzLCBzaW5jZSB0aGUgY29lZmZzIGNvdWxkIGJlIHplcm8uCisKKwkqIGxvb3AuYyAoY2FuX2VsaW1pbmF0ZV9iaXZfcCk6IENoZWNrIGVhY2ggZ2l2IGZvciAhIGlnbm9yZQorCWJlZm9yZSBhc3N1bWluZyBpdCBjYW4gYmUgdXNlZC4KKwkoY2hlY2tfZWxpbWluYXRlX2Jpdik6IE5ldyBmbiwgYSBwaWVjZSBvZiBzdHJlbmd0aF9yZWR1Y2UgYnJva2VuIG91dC4KKworCSogY2NjcC5jIChlcnJvcl9mcm9tX2Vycm5vKTogTmV3IGZuLCBsaWtlIGVycm9yIGFuZCBwZXJyb3Jfd2l0aF9uYW1lLgorCShkb19pbmNsdWRlKTogQ2FsbCB0aGF0IGlmIG9wZW4gZmFpbHMuCisJKGZpbmNsdWRlKTogUHJpbnQgSS9PIGVycm9yIG1zZyBiZWZvcmUgY2xvc2luZyBkZXNjLgorCisJKiBjLWRlY2wuYyAoc2hhZG93X3RhZyk6IElmIG1vcmUgdGhhbiBvbmUgdGFnIG9yIHN0cnVjdHVyZSwKKwlvciBhbnl0aGluZyBvdGhlciB0aGFuIGEgdGFnLCB3YXJuaW5nLgorCisJKiBjLXBhcnNlLnkgKGNvbXBvbmVudHMpOiBKdXN0IHdhcm4gaWYgbWVtYiBkZWNsIGhhcyBubyBtZW1iZXIsCisJYW5kIG9ubHkgaWYgcGVkYW50aWMuCisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogUHJpbnQgdWlkcywgbm90IGx1aWRzLCBmb3IgZHVtcC4KKwkocmVjb3JkX2dpdik6IGdpdl9jb3VudCBmaWVsZCBjb3VudHMgb25seSBERVNUX1JFRyBnaXZzLgorCShjaGVja19kYnJhX2xvb3ApOiBzcmNfdHdvX2JlZm9yZV9lbmQgd2FzIHNldCB3cm9uZy4KKworCSogbG9vcC5jIChyZWNvcmRfZ2l2KTogTmV3IGFyZyBMT09QX0VORDsgYWxsIGNhbGxlcnMgY2hhbmdlZC4KKwlEb24ndCBtYXJrIGdpdiByZXBsYWNlYWJsZSBpZiB1c2VkIHBhc3QgTE9PUF9FTkQuCisJKGZpbmRfbWVtX2dpdnMpOiBOZXcgYXJnIExPT1BfRU5EOyBhbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiBvdXQtaTM4Ni5jIChGUF9DQUxMKTogTWFrZSB0aGlzIGEgYHJldHVybicgc3RtdC4KKworRnJpIEFwciAgNyAxMTo1Njo1OCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgLi4uX0RFQ0wpOiBQcmVzZXJ2ZSBtb2RlIHRocnUKKwljYWxsaW5nIGNoYW5nZV9hZGRyZXNzLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogVHlwbzogQVJHTlVNID0+IENPVU5ULgorCisJKiBleHByLmMgKHByZWV4cGFuZF9jYWxscywgZXhwYW5kX2NhbGwpOiBUYWtlIG5vdGUgb2YgUkVUVVJOX0lOX01FTU9SWS4KKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogTGlrZXdpc2UuCisJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogTGlrZXdpc2UuCisKKwkqIFNUQUNLX0FSR1NfQURKVVNUOiBBcmcgaXMgbm93IGEgYHN0cnVjdCBhcmdfZGF0YScgYW5kIGl0IHNob3VsZAorCWJlIHVwZGF0ZWQgaW4gcGxhY2UuCisJKiB0bS1taXBzLmg6IERlZmluZSBpdC4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBBZGFwdCB0byB0aGlzLiAgQXNzdW1lIHBhZGRpbmcgY29tZXMgYWZ0ZXIgYXJncworCXNvIHR1cm4gb2ZmIHRoZSBmZWF0dXJlIG9mIGNoYW5naW5nIHRoZSBhcmdzJyBvZmZzZXRzLgorCShlbWl0X2xpYnJhcnlfY2FsbCk6IEFkYXB0IHRvIHRoaXMuCisKKwkqIHRtLW1pcHMuaCAoUFJJTlRfT1BFUkFORCk6IFVzZSBDT05TVF9ET1VCTEVfe0xPVyxISUdIfS4KKwlUcnVuY2F0ZSBTRm1vZGUgY29uc3RhbnRzIHRvIHNpbmdsZSBwcmVjaXNpb24uCisKKwkqIGMtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBGaXggdGVzdCBmb3IgbG9jYWwgdnMgZ2xvYmFsIHJlZyB2YXIuCisKKwkqIGNvbmZpZy5nY2M6IENoYW5nZSBgOi0nIHRvIGAtJyBpbiB2YXIgcmVmcy4KKwlTaGVsbCBvbiBjb252ZXggZG9lc24ndCBoYW5kbGUgYDotJy4KKworVGh1IEFwciAgNiAwMDowOTowMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQ29tcGFyZSBhY3R1YWwncyBtb2RlCisJYWdhaW5zdCBmb3JtYWwncyBERUNMX0FSR19UWVBFJ3MgbW9kZSwgbm90IFRSRUVfVFlQRSdzIG1vZGUuCisKKwkqIGMtZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBNYWtlIHRoZSBkZWNsIHBlcm1hbmVudCBpZgorCWluIGdsb2JhbCBiaW5kaW5nIGxldmVsLiAgKENhbiBoYXBwZW4gZm9yIGNlcnRhaW4gaW52YWxpZCBpbnB1dC4pCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogQmxvY2sgcGF0aCB0aGF0IG1hZGUgYSBNT0RJRllfRVhQUgorCWNvbnRhaW5pbmcgYW4gRVJST1JfTUFSSy4KKworCSogY29uZmlnL3RtLmg6IE5ldyBmaWxlLgorCisJKiBsb29wLmMgKG9ubHlfcmVnX3VzZV9wKTogRml4IGJ1Z3MgaW4gcmVjdXJzaW9uLCBhZGQgc29tZSBmYXN0CisJc3BlY2lhbCBjYXNlcy4gIENvbW1lbnQgb24gcmV0dXJuIHZhbHVlIHdhcyBiYWNrd2FyZHMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IE5lZ2F0ZSB0aGUgdmFsdWUgb2Ygb25seV9yZWdfdXNlX3AuCisKKwkqIGdlbm91dHB1dC5jIChvdXRwdXRfcHJvbG9ndWUpOiBPdXRwdXQgYCNpbmNsdWRlIGhhcmQtcmVnLXNldC5oJy4KKwkqIE1ha2VmaWxlOiBpbnNuLW91dHB1dC5vIGRlcGVuZHMgb24gdGhhdC4KKworCSogdG9wbGV2LmMgKG1haW4pOiBUeXBvIHJlY29nbml6aW5nIC1Xc3dpdGNoLgorCisJKiBjb25maWcuZ2NjIChtaXBzKTogTmV3IGFsdGVybmF0aXZlLgorCSogdG0tbWlwcy5oLCBvdXQtbWlwcy5jLCBtaXBzLm1kLCB2YS1taXBzLmg6IE5ldyBmaWxlcy4KKwkqIHZhcmFyZ3MuaDogSW5jbHVkZSB2YS1taXBzLmggaWYgb24gbWlwcy4KKworV2VkIEFwciAgNSAxNjo1ODowNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBSZW5hbWUgT0xELCBORVcgdG8gT0xEREVDTCwgTkVXREVDTC4KKworCSogc3RtdC5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBSZWYgc3ViciBpbnN0ZWFkIG9mCisJY3VycmVudF9mdW5jdGlvbl9kZWNsOyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlLgorCisJKiBzdG10LmMgKGFzc2lnbl9wYXJtcyk6IERvIGV4dHJhIHBhZGRpbmcgZm9yIHNvbWUgcGFybXMsCisJY29udHJvbGxlZCBieSBNQVhfUEFSTV9CT1VOREFSWS4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBTYW1lIHRoaW5nIGZvciBjYWxsZXIgc2lkZS4KKwlOb3RlIHRoaXMgaXMgaW1wbGVtZW50ZWQgb25seSBmb3IgbWFjaGluZXMgdGhhdCBsYWNrIHB1c2ggaW5zbnMuCisJQWxzbywgaW4gYm90aCBjYXNlcywgaXQgZG9lc24ndCBoYW5kbGUgdmFyaWFibGUtc2l6ZSBhcmdzLgorCitUdWUgQXByICA0IDEyOjIyOjA2IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGZpbmRfZmlsZSk6IFRyeSBTVEFOREFSRF9FWEVDX1BSRUZJWCBmb3Igc3RhcnRmaWxlcyB0b28uCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogRGVsZXRlIG5ldmVyLWV4ZWN1dGVkIGNsYXVzZS4KKworCSogc3B1ci5tZCAobW92cWksIGxvYWRoaSwgZXh0ZW5kKiwgemVyb19leHRlbmRoaXNpKToKKwlNYWtlIHN1YnJlZ3Mgd2l0aCBDIGNvZGUsIG5vdCBSVEwgcGF0dGVybnMsIHNvIHdlIGNhbgorCWF2b2lkIGdlbmVyYXRpbmcgc3VicmVnIG9mIHN1YnJlZy4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBOb3QgYWxsIGNsYXVzZXMgYWx3YXlzIHN1Y2NlZWQsCisJc28gc3RvcCB1c2luZyBgZWxzZScgc3RydWN0dXJlLgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBBdm9pZCBtb3Zpbmcgdm9pZCB0byB2b2lkLCBpbiBjbGVhbnVwcyBjYXNlLgorCitNb24gQXByICAzIDE4OjA0OjMzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZCAoY21waGkpOiBEb24ndCBhbGxvdyBhLXJlZyB2cyBhLXJlZywgc2luY2UgdGhhdCBzaWduLWV4dGVuZHMuCisJSWYgdGhlcmUgaXMgb25lIGEtcmVnLCBtYWtlIHN1cmUgaXQgaXMgbm90IGxhc3QuCisKK1N1biBBcHIgIDIgMTM6MDI6MjYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChhZ2dfbW9kZSk6IFVzZSBoaWdoZXN0IG1vZGUgdGhhdCBoYXMgZGVzaXJlZCBzaXplLgorCUFsbG93IGFsbCBpbnRlZ2VyIG1vZGVzLCBidXQgcmVqZWN0IHNpemVzID4gTUFYX0ZJWEVEX01PREVfU0laRS4KKwkoVGhhdCBkZWZhdWx0cyB0byB0aGUgc2l6ZSBvZiBESW1vZGUuKQorCisJKiBtYWNobW9kZS5kZWY6IEFkZCBQU0ksIFBESSBhbmQgWEYsIENYRiBtb2Rlcy4KKworU2F0IEFwciAgMSAwMDo1MDoxMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG5zMzJrLm1kIChhc2hkLCBsc2hkKTogRGVsZXRlIHBhdHRlcm5zIHRoYXQgbG9nYW5kIHRoZSBjb3VudCB3aXRoIDMxLgorCVRoZSBzaGlmdCBjb3VudCBpcyBub3QgdHJ1bmNhdGVkIG9uIHRoaXMgbWFjaGluZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IFNpbXBsaWZ5IG5lc3RlZCBvcidzLCBuZXN0ZWQgeG9yJ3MuCisJKHRyeV9kaXN0cmliKTogWE9SIGRvZXNuJ3QgZGlzdHJpYnV0ZSB0aHJvdWdoIGFueXRoaW5nLgorCisJKiBydGwuYyAocnR4X2VxdWFsX3ApOiBEb24ndCBkaWUgb24gbnVsbCBwb2ludGVycy4KKworCSogbG9vcC5jIChlbGltaW5hdGVfYml2KTogVXNlIENPTVBBUkUsIG5vdCBNSU5VUywgaW4gZ2VuZXJhdGVkIGNvbXBhcmUuCisKKwkqIGxvb3AuYyAoaW52YXJpYW50X3ApOiBNZW0gcmVmcyBpbiBjb25zdGFudCBwb29sIGFyZSBpbnZhcmlhbnQuCisKKwkqIGMtZGVjbC5jIChyZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UpOiBJZiAtdHJhZGl0aW9uYWwsIGFsbG93CisJcmVkZWNsYXJhdGlvbnMgb2YgdHlwZWRlZiBwcm92aWRlZCB0aGV5IGFncmVlLgorCisJKiBjLWRlY2wuYyAoc3RhcnRfZGVjbCk6IERvIGV4cGFuZF9kZWNsIG9uIHRoZSBkZWNsIHRoYXQgcHVzaGRlY2wKKwlyZXR1cm5zLiAgSWYgdGhlcmUgd2FzIGEgcHJldi4gZGVjbCB3aXRoIGEgZGlmZmVyZW50IHR5cGUsCisJd2UgaGF2ZSBjaGFuZ2VkIGl0cyB0eXBlIGFuZCBjbGVhcmVkIGl0cyBvbGQgcnRsLCBzbyBpdCBuZWVkIG5ldyBydGwuCisKK1NhdCBBcHIgIDEgMDA6NTA6MTEgMTk4OSAgTWF0dGhldyBTZWxmICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogTW9kaWZpZWQgdG8gdXNlIG1vZGUgY2xhc3NlcworCWluc3RlYWQgb2YgcmVmZXJpbmcgdG8gc3BlY2lmaWMgbWFjaGluZSBtb2Rlcy4KKworCSogZXhwci5jIChkb19qdW1wKTogQ29udmVydGVkIHRvIHVzZSBDT05TVDBfUlRYIG1hY3JvLgorCWRvX2ptcCBubyBsb25nZXIgcmVmZXJzIHRvIGFueSBtYWNoaW5lIG1vZGVzIGRpcmVjdGx5IGV4Y2VwdAorCWZvciBWT0lEbW9kZSEKKworCSogZXhwci5jIChjb21wYXJlLCBjb21wYXJlMSk6IE1vZGlmaWVkIHRvIHVzZSBDT05TVDBfUlRYCisJbWFjcm8uICBObyBsb25nZXIgcmVmZXJzIHRvIGFueSBtYWNoaW5lIG1vZGVzIGRpcmVjdGx5CisJZXhjZXB0IFZPSURtb2RlIGFuZCBCTEttb2RlIQorCisJKiBtYWNobW9kZS5kZWY6IERvY3VtZW50ZWQgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgb3JkZXIKKwlvZiBtYWNoaW5lIG1vZGVzIGR1cmluZyBtb2RlIHdpZGVuaW5nLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdHdvdmFsX2Jpbm9wLCBleHBhbmRfdW5vcCwKKwllbWl0X2NtcF9pbnNuKTogQWRkZWQgbW9kZSB3aWRlbmluZyB3aGljaCBpcyBpbmRlcGVuZGVudCBvZgorCXNwZWNpZmljIG1hY2hpbmUgbW9kZXMuICBJdCBhc3N1bWVzIHRoYXQgd2UgbWF5IHdpZGVuIHRvIGFueQorCWhpZ2hlciBudW1iZXJlZCBtb2RlIG9mIHRoZSBzYW1lIG1vZGUgY2xhc3MuCisJICBOT1RFOiB0aGUgY2hlY2tzIGZvciBWT0lEbW9kZSBvcHMgd2hpY2ggd2VyZSBwcmVzZW50IGluCisJUUkgYW5kIEhJIHRvIFNJIHdpZGVuaW5nIGFyZSBub3cgcHJlc2VudCBpbiBhbGwgd2lkZW5pbmcuCisJSSBhc3N1bWUgdGhpcyBpcyBjb3JyZWN0LiAgQWxzbywgd2lkZW5pbmcgaXMgbm93IHBvc3NpYmxlCisJZnJvbSBRSSB0byBISS4gIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgYSBnb29kIHRoaW5nLi4uLgorCisJKiBydGwuaCAoQ09OU1QwX1JUWCk6IEFkZGVkIGRlZmluaXRpb24gb2YgbmV3IG1hY3JvCisJQ09OU1QwX1JUWCAobW9kZSkuCisKKwkqIHJ0bC5oIChHRVRfTk9URV9JTlNOX05BTUUsIEdFVF9SRUdfTk9URV9OQU1FKTogTmV3IG1hY3Jvcy4KKwkqIHJ0bC5jIChub3RlX2luc25fbmFtZSwgcmVnX25vdGVfbmFtZSk6IE5ldyB0YWJsZXMuCisJKiBydGwuZGVmIChOT1RFKTogQ2hhbmdlIGxhc3QgZmllbGQgZnJvbSBgaScgdG8gYG4nLgorCSogcnRsLmMgKHByaW50X3J0eCk6IFByaW50IG1vZGUgb2YgSU5TTl9MSVNUIG9yIEVYUFJfTElTVCBhcyByZWctbm90ZS4KKwlQcmludCBvcGVyYW5kIGNvZGUgYG4nIGFzIG5hbWUgb2Yga2luZCBvZiBub3RlLgorCShyZWFkX3J0eCk6IHRyZWF0IGBuJyBsaWtlIGBpJy4KKworCSogbG9vcC5jIChzdHJ1Y3QgaW5kdWN0aW9uKTogQWRkIGBtb2RlJyBmaWVsZC4KKwkoc3RyZW5ndGhfcmVkdWNlLCByZWNvcmRfZ2l2KTogU2V0IHRoZSBgbW9kZScgZmllbGQgaW4gVi4KKwkoY2FuX2VsaW1pbmF0ZV9iaXZfcCwgZWxpbWluYXRlX2Jpdik6IFVzZSB0aGF0IGZpZWxkLgorCisJKiBsb29wLmMgKHN0cnVjdCBpdl9jbGFzcyk6IGBpbml0X2luc24nIHJlY29yZHMgd2hhdCBpbml0cyB0aGUgYml2LgorCVJlcGxhY2VzIGBpbml0X3ZhbF9zZXQnIGZsYWcuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFVwZGF0ZSBhbmQgdGVzdCBgaW5pdF9pbnNuJyBpbnN0ZWFkLgorCVVzZSBvZiBhIGJpdiBiZXR3ZWVuIGl0cyBpbml0IGFuZCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AKKwlkb2VzIG5vdCBwcmVjbHVkZSBpdHMgZWxpbWluYXRpb24gZnJvbSB0aGUgbG9vcC4KKwlTZXR0aW5nIGEgZ2l2IGlzIG9rIGZvciBlbGltaW5hdGluZyBhIGJpdiwgZXZlbiBpZiBnaXYgaXMgImlnbm9yZSIsCisJc2luY2UgdGhhdCBqdXN0IG1lYW5zIGdpdiB3aWxsIGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlci4KKwlIYW5kbGUgc29tZSBERVNUX0FERFIgZ2l2cyBmb3IgdGhhdCBwdXJwb3NlLgorCVRlc3QgZm9yIGdpdi1zZXR0aW5nIGJlZm9yZSBjaGVjayBjYW5fZWxpbWluYXRlX2Jpdl9wLgorCU5ldyBlcnJvciBjaGVjayBmb3IgcmVwbGFjZWFibGUgZ2l2IHdob3NlIHZhbHVlIG5lZWRlZCBhZnRlciBsb29wLgorCShvbmx5X3JlZ191c2VfcCk6IE5ldyBmbi4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFBMVVMsIE1JTlVTIHdpdGggRVhQQU5EX1NVTToKKwlBc3NvY2lhdGUgZXZlbiBoYXJkZXIuCisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogVHJlYXQgYWxsIGNvbnN0YW50IGJpdiBpbml0IHZhbHMgbGlrZSBpbnRzLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENsZWFyIGFsbF9yZWR1Y2VkIHdoZW4gdi0+aWdub3JlIGlzIHNldDsKKwl0aGUgY29kZSB0byBjaGVjayB0aGlzIGxhdGVyIGRpZG4ndCBhbHdheXMgZG8gdGhlIGpvYi4KKworCSogbG9vcC5jICh2ZXJpZnlfbG9vcCk6IFNldCBsb29wX2NvbnRpbnVlLgorCShzY2FuX2xvb3ApOiBtZW50aW9uIGl0cyB2YWx1ZS4KKwkqIHJ0bC5oOiBEZWZpbmUgTk9URV9JTlNOX0xPT1BfQ09OVC4KKwkqIHN0bXQuYyAoZXhwYW5kX2xvb3BfY29udGludWVfaGVyZSk6IE91dHB1dCBvbmUuCisKK0ZyaSBNYXIgMzEgMTA6MDg6MjkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZik6IFRyZWF0IGNvbnN0IHZvaWQgKiBsaWtlCisJdm9pZCAqLgorCisJKiBydGwuYyAocnR4X2FkZHJfdmFyaWVzX3ApOiBEb24ndCBkaWUgb24gbnVsbCBleHAuCisJKiBjc2UuYyAocmVmZXJzX3RvX21lbV9wLCByZWZlcnNfdG9fcCk6IExpa2V3aXNlLgorCisJKiBnY2MuYyAodmFsaWRhdGVfc3dpdGNoZXMsIHZhbGlkYXRlX2FsbF9zd2l0Y2hlcyk6IE5ldyBmbnMuCisJTWFyayBhIHN3aXRjaCBhcyB2YWxpZCBpZiBhbnkgY29tcGlsZXIgc3BlYyBvciB0aGUgbGlua2VyIHNwZWMKKwltYXRjaGVzIGl0LCBldmVuIGZvciBsYW5ndWFnZXMgbm90IGJlaW5nIHVzZWQuCisKK1RodSBNYXIgMzAgMDA6MjI6MTQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUsIG1vdmVfbW92YWJsZXMpOiB3aGVuIG1vdmluZyBhIGBjbHInIGluc24gdXNlZAorCWluIHplcm8tZXh0ZW5zaW9uLCBzb21ldGltZXMgY2hhbmdlIGl0IHRvIGFuIGBhbmQnIHNvIHRoYXQgdGhlCisJc2lnbmlmaWNhbnQgbG93IGJpdHMgYXJlIG5vdCBjbG9iYmVyZWQuCisKKwkqIGNjY3AuYzogSW1wbGVtZW50IF9fQkFTRV9GSUxFX18gYW5kICNvbmNlLgorCShzYXZlc3RyaW5nKTogTmV3IGZuLgorCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBuZXcgbmFtZSBmb3Igc3RydWN0IGRpcmVjdG9yeV9zdGFjay4KKwkoZW51bSBub2RlX3R5cGUpOiBBZGQgVF9PTkNFLCBUX0JBU0VfRklMRS4KKwkoZGlyZWN0aXZlX3RhYmxlKTogQWRkICNwcmFnbWEgb25jZS4KKwkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IEFkZCBfX0JBU0VfRklMRV9fLgorCShzcGVjaWFsX3N5bWJvbCk6IEhhbmRsZSBfX0JBU0VfRklMRV9fLCB0b2dldGhlciB3aXRoIF9fRklMRV9fLgorCShkb19pbmNsdWRlKTogSWdub3JlIHRoZSBmaWxlIGlmIGl0J3Mgb24gdGhlICNwcmFnbWEgb25jZSBsaXN0LgorCShkb19vbmNlKTogTmV3IGZuOyBhZGQgY3VycmVudCBmaWxlIHRvICNwcmFnbWEgb25jZSBsaXN0LgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBEb24ndCBhZGQgbm9uLWV4IGZpbGVzIHRvIGxpc3Qgb2YgZGVwcy4KKworCSogY29uZmlnLmdjYzogVXNlIHsuLi46LS4uLn0sIG5vdCB7Li4uPS4uLn0uCisKKwkqIGMtcGFyc2UueTogQWRkIHByZWNlZGVuY2UgZm9yIElGL0VMU0UsIGFuZCBmb3IgcGFyZW5zOworCWF2b2lkcyBzb21lIGNvbmZsaWN0cy4KKworCSogdG0tbmV3c2dhcy5oOiBJbmNsdWRlIHRtLW5ld3MuaCBhbmQgZGVmaW5lIFVTRV9HQVMuCisKKwkqIHRtLW5ld3MuaDogTmV3IG5hbWUgZm9yIHRtLW5ld3M4MDAuaC4KKwlJZiBub3QgVVNFX0dBUywgZGVmaW5lIFNPTllfQVNNLgorCURvbid0IGRlZmluZSBVU0VfR0FTIGJ5IGRlZmF1bHQuCisJKENQUF9QUkVERUZJTkVTKTogVmFyaW91cyBhbHRlcm5hdGl2ZXMgZGVwZW5kaW5nIG9uIHByb2Nlc3NvciB0eXBlLgorCShBU01fRk9STUFUX1BSSVZBVEVfTkFNRSk6IE92ZXJyaWRlIHRoaXMuCisJKEFTTV9JREVOVElGWV9HQ0MpOiBPdmVycmlkZTsgb3V0cHV0IG5vdGhpbmcuCisJKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6IFJvdW5kIGZzaXplIHVwIHRvICUgNC4KKwlNYXggZm9yIGhhbGZ3b3JkIGxpbmsgaW5zbiBpcyAzMmssIG5vdCA2NGsuCisJKEZVTkNUSU9OX0VQSUxPR1VFKTogRG9uJ3Qgb3V0cHV0IG1vdmUubCBpZiBubyByZWdzIHRvIHJlc3RvcmUuCisJKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IENoYW5nZSBoYW5kbGluZyBvZiB0YWJsZXJlZiBwYy1yZWwgYWRkcmVzc2VzLgorCSogbTY4ay5tZCAobW92aGkpOiBBZGQgU09OWV9BU00gY29uZGl0aW9uYWwuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IElmIHJlcGxhY2luZyBhIGRlc3QgYWRkcmVzcywgcHJlc2VydmUgTUVNX0lOX1NUUlVDVAorCisJKiBnY2MuYyAoZXJyb3IsIGZhdGFsKTogYWx0ZXJuYXRlIHZhcmFyZ3MgZGVmbnMgaWYgSEFWRV9WUFJJTlRGLgorCitXZWQgTWFyIDI5IDA5OjU0OjEzIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IENoZWNrIFdPUkRfU1dJVENIX1RBS0VTX0FSRywgc28gdGhhdAorCS1UZGF0YSBjYW4gYmUgaGFuZGxlZCByaWdodC4KKworCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IG5ldyBmbiwgZm9yIHdhcm5fc3dpdGNoCisJKGV4cGFuZF9lbmRfY2FzZSk6IENhbGwgaXQsIGlmIG9yaWcgaW5kZXggd2FzIGVudW0uCisJKiB0b3BsZXYuYyAobWFpbik6IEhhbmRsZSAtV3N3aXRjaC4KKwkqIGMtcGFyc2UueSAoU1dJVENIIHN0bXQpOiBQYXNzIG9yaWcgc3dpdGNoIGV4cHIgdG8gZXhwYW5kX2VuZF9jYXNlLgorCisJKiB0bS0qLmgsIG91dC0qLmM6IFVuaWZvcm1seSB1c2UgcmVnX25hbWVzLCBub3QgcmVnX25hbWUsIGFuZCBkb24ndAorCWRlZmluZSBhbnkgZHVwbGljYXRlcy4KKwkqIGZpbmFsLmM6IERlbGV0ZSByZWdfbmFtZS4KKworCSogYy1wYXJzZS55IChpc19yZXNlcnZlZF93b3JkKTogQWRkIGtleXdvcmRzIF9fYXNtIGFuZCBfX2lubGluZTsKKwlhbHNvIF9fY29uc3QgYW5kIF9fdm9sYXRpbGUuCisJKHl5bGV4KTogS2V5d29yZHMgdGhhdCBzdGFydCB3aXRoIGBfXycgYXJlIHJlY29nbml6ZWQgcmVnYXJkbGVzcyBvZgorCS10cmFkaXRpb25hbCBvciAtYW5zaS4KKworCSogYy1wYXJzZS55IChjaGVja19uZXdsaW5lKTogQWx3YXlzIHJlY29nbml6ZSAjaWRlbnQuCisJTWFjcm8gSURFTlRfRElSRUNUSVZFIGlzIG5vIG1vcmUuCisJSWYgQVNNX09VVFBVVF9JREVOVCBpcyB1bmRlZmluZWQsIGRvbid0IG91dHB1dCBhbnl0aGluZyBmb3IgI2lkZW50LgorCSogdG0tM2IxLmg6IERvbid0IGRlZmluZSBJREVOVF9ESVJFQ1RJVkUgb3IgQVNNX09VVFBVVF9JREVOVC4KKwkqIHRtLWVuY29yZS5oLCB0bS1pMzg2Z2FzLmgsIHRtLWkzNjh2LmgsIHRtLXN1bjM4NmkuaCwgdG0tdmF4di5oOgorCURvbid0IGRlZmluZSBJREVOVF9ESVJFQ1RJVkU7IGRlZmluZSBBU01fT1VUUFVUX0lERU5UIHRvIG91dHB1dCBpbgorCWRlZmF1bHQgd2F5LgorCisJKiBleHByLmggKFJFVFVSTl9JTl9NRU1PUlkpOiBOZXcgbWFjcm8sIGRlZmF1bHQgZGVmbiBoZXJlLgorCSogZXhwci5jIChleHBhbmRfY2FsbCk6IFVzZSBpdCB0byBjb250cm9sIHdoZXJlIHRvIHJldHVybiB2YWx1ZS4KKwkqIHN0bXQuYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogTGlrZXdpc2UuCisKKwkqIG91dC1zcGFyYy5jIChmaW5kX2FkZHJfcmVnKTogQWJvcnQgaWYgbm9uZSBmb3VuZC4KKwlFbGltaW5hdGUgY29uZnVzaW9uOyBkbyBvbmx5IG9uZSBjaGFuZ2UgYmV0d2VlbiB0ZXN0cyBmb3IgUExVU25lc3MuCisJKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEFyZyB0byBmaW5kX2FkZHJfcmVnIGlzIGFkZHJlc3MsIG5vdCBtZW0gcmVmLgorCSogb3V0LW02OGsuYywgb3V0LXNwdXIuYywgb3V0LWkzODYuYywgb3V0LWFsbGlhbnQuYzogTGlrZXdpc2UuCisKKwkqIGp1bXAuYyAoZmluZF9jcm9zc19qdW1wKTogRG9uJ3QgbGV0IGVpdGhlciBFMSBvciBFMiBiZSBpbmNsdWRlZAorCWluIHRoZSByYW5nZSBvZiBtYXRjaGluZyBpbnNucyBwcmVjZWRpbmcgdGhlIG90aGVyIChFMiBvciBFMSkuCisKKwkqIGMtcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IE5vIGVycm9yIGZvciBgI3ByYWdtYVxuJy4KKworCSogTWFrZWZpbGUgKGdjYy5vKTogQ29udHJvbCBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYIGhlcmUuCisKKwkqIHN0bXQuYyAod2Fsa19maXh1cF9tZW1vcnlfc3VicmVnKTogaGFuZGxlIG51bGwuCisKKwkqIHRtLXNwYXJjLmggKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogQ2hhbmdlIExQQm5uIHRvIExQWW5uLAorCXRvIGF2b2lkIGNvbmZsaWN0IHdpdGggZmluYWwuYy4KKworVHVlIE1hciAyOCAxNToyMzoxNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IElmIGZhaWwsIHByaW50IHN5c3RlbSBlcnJvciBtZXNzYWdlLgorCShwZXJyb3Jfd2l0aF9uYW1lKTogVXNlIG1vcmUgc3RhbmRhcmQgZXJyb3IgZm9ybWF0LiAgSW5jLiBgZXJyb3JzJy4KKworCSogZGJ4b3V0LmMgKGRieG91dF9mdW5jdGlvbik6IE91dHB1dCBhbnkgdGVtcG9yYXJ5IHR5cGVzCisJdGhhdCB3ZXJlIG1hZGUgYnkgZGJ4b3V0IGl0c2VsZi4KKworCSogc3RtdC5jOiBhbHdheXMgdXNlIGFuIGVwaWxvZ3VlIGlmIHBjYy1zdHJ1Y3QtcmV0dXJuLgorCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBDb21wdXRlIHJldHVybl9sYWJlbCBhZnRlciB0ZXN0aW5nIHRoYXQuCisJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBPdXRwdXQgYSByZXR1cm4gaW5zbiBhZnRlciBwY2Mtc3RydWN0LXJldHVybgorCXByb2Nlc3NpbmcsIGlmIHRoZXJlIGlzIGEgcmV0dXJuIGluc24uCisJKGV4cGFuZF9udWxsX3JldHVybik6IERvbid0IG91dHB1dCBhIHJldHVybiBpbnNuLCBpbiB0aGF0IGNhc2UuCisJU2ltcGxpZnkgdGhlIGNvbmRpdGlvbnMtLWRlcGVuZHMgZW50aXJlbHkgb24gSEFWRV9yZXR1cm4uCisKKwkqIHRtLW02OGsuaCAoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIpOiBVc2UganNyLCBub3QgY2FsbC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IENlcnRhaW4gbWVtIGFkZHJlc3NlcyB3aWxsIGJlIG9mZnNldGFibGUKKwlhZnRlciByZWxvYWRpbmc7IGluIHBhcnRpY3VsYXIsIHRob3NlIHdoZXJlIHJlZ19lcXVpdl9hZGRyZXNzIGFwcGxpZXMuCisKKwkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQ2hhbmdlIE1JTlVTIHRvIENPTVBBUkUuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBSZXR1cm4gVEhFIHN0YW5kYXJkIGVycm9yX21hcmsuCisKK1RodSBNYXIgMjMgMDk6Mzk6MDIgMTk4OSAgUmljaGFyZCBNLiBTdGFsbG1hbiAgKHJtcyBhdCB3YXRzb24pCisKKwkqIGMtcGFyc2UueSAoY29tcG9uZW50cyk6IEVycm9yIGlmIGVtcHR5LgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IE91dHB1dCBjb25zdCB2YXJpYWJsZXMgYXMgTl9TVFNZTS4KKworCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X21lbSk6IFVzZSBBU01fT1VUUFVUX0RPVUJMRV9JTlQgaWYgZGVmbmQuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdhcm4gYWJvdXQgYGxvbmcgbG9uZyBsb25nJy4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBXaGVuIGNoYW5naW5nIFJFRyB0byBNRU0sIGNsZWFyIFJFR19VU0VSVkFSX1AuCisJKiBmaW5hbC5jIChhbHRlcl9zdWJyZWcpOiBQcmVzZXJ2ZSB2b2xhdGlsZSBiaXQgb2YgTUVNLgorCisJKiBtNjhrLm1kIChjbXBzaSwgY21waGkpOiBQZXJtaXQgY21wbS4KKworCSogZ2NjLmMgKGZpbmRfZmlsZSk6IFVzZSBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIuCisJTm93IHNlYXJjaCAvdXNyL2xvY2FsL2xpYi8sIC9saWIvIGFuZCAvdXNyL2xpYi8uCisKKwkqIHRtLW02OGsuaCAoUFJJTlRfT1BFUkFORCk6IFN1cHBvcnQgY29kZSBgZCcuCisJKiBtNjhrLm1kIChjbXBzaSwgY21waGksIGNtcHFpKTogVXNlIGl0IGZvciBhbGwgbWVtIGFkZHJlc3Nlcy4KKworCSogZmluYWwuYyAob3V0cHV0X2FzbV9pbnNuKTogRG9uJ3QgYWxsb3cgJUxFVFRFUiB3aXRob3V0IGFuCisJb3BlcmFuZCBudW1iZXIuCisJKiB0bS1tNjhrLmgsIG02OGsubWQsIHRtLWhwOWszMjAuaCwgdG0tbmV3cyouaDogVXNlICVAIGluc3RlYWQgb2YgJXMuCisJKiB0bS1hbGxpYW50LmgsIGFsbGlhbnQubWQ6IExpa2V3aXNlLgorCSogaTM4Ni5tZCwgb3V0LWkzODYuaDogUHV0IGAwJyBhZnRlciBlYWNoICVMLCAlVywgJUIsICVTLCAlUSwgJVIuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9zdG10X2V4cHIpOiBQb3AgcGVuZGluZyBzdGFjayBhcmdzLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBGb3IgMC1zaXplIGNvbW1vbiB2YXJpYWJsZSwKKwlhbGxvY2F0ZSBhdCBsZWFzdCAxIGJ5dGUuCisKKwkqIHRtLWVuY29yZS5oIChBU01fT1VUUFVUX0RPVUJMRSwgUFJJTlRfT1BFUkFORCk6IFVzZSAwZiwgbm90IDBsLAorCWZvciBkb3VibGVzLgorCitNb24gTWFyIDEzIDEwOjI0OjU2IDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgY2N2aSkKKworCSogb3V0LWkzODYuaCAoZnVuY3Rpb25fcHJvbG9ndWUsIGZ1bmN0aW9uX2VwaWxvZ3VlKToKKwlVc2UgY2FsbF91c2VkX3JlZ3MsIG5vdCBhIGNvcHksIHNvIC1mIG9wdGlvbnMgd29yay4KKwlTYXZlIHJlZ3MgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLgorCVNhdmUgcmVncyBldmVuIHN0YXJ0aW5nIGZyb20gMCBpZiB0aGV5IGhhcHBlbiB0byBiZSBjYWxsLXNhdmVkLgorCisJKiBCdWcgZml4ZXMgZnJvbSBSb2IgTWNNYWhvbi4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIGluc2VydGluZyBpbnNuIHRvIHNldAorCW5vbnJlcGxhY2VhYmxlIGdpdiwgcHV0IGl0IGFmdGVyIGFsbCB0aGUgY29uc2VjdXRpdmUgaW5zbnMKKwl0aGF0IGNvbXB1dGUgaXQuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBXaGVuIGZvcmNpbmcgY29uc3QgdG8gbWVtLAorCXVzZSB0aGUgaW5zbidzIG9wZXJhbmQgbW9kZSwgbm90IHRoZSBjb25zdCdzIG1vZGUuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogVXNlIHdpZGVyIG9mIGlubW9kZSBhbmQgb3V0bW9kZQorCXdoZW4gZGV0ZXJtaW5pbmcgaGF2ZV9ncm91cHMuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogdHlwbyBjaGVja2VkIHdyb25nIGluc24gd2l0aAorCWNvbnN0cmFpbnRfYWNjZXB0c19yZWdfcC4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3RhcmdldHMpOiBFbmFibGUgI2lmLTAnZCBjb2RlIGZvcgorCWZvcmdldHRpbmcgb2xkIHJlbG9hZHMgaW4gY2FzZSBvZiBvdXRwdXQgcmVsb2FkIGZyb20gYSBub24tc3BpbGwtcmVnLgorCitTdW4gTWFyIDEyIDAwOjA0OjQ5IDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgY2N2aSkKKworCSogYy1wYXJzZS55ICh5eWVycm9yKTogQWRkIGZvcndhcmQtZGVjbCBoZXJlLgorCSogYy10cmVlLmg6IERlbGV0ZSBkZWNsIGhlcmUuCisKKwkqIE5ldyBtYWNybyBVU0VfQ19BTExPQ0EuCisJKiBjc2UuYyAoY3NlX21haW4pOiBEbyBhbGxvY2EgKDApIHRvIGNsZWFyIG91dCBDIGFsbG9jYS4KKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6CisJKiBsb2NhbC1hbGxvYy5jIChsb2NhbF9hbGxvYyk6CisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBsaWtld2lzZS4KKworCSogbG9vcC5jIChlbWl0X2l2X2luaXRfY29kZSwgZWxpbWluYXRlX2Jpdik6CisJQWx3YXlzIHB1dCBjb25zdGFudCBpbiBhIFBMVVMgbGFzdC4KKworCSogZ2NjLmMgKG1ha2Vfc3dpdGNoKTogVW51c2VkIGZ1bmN0aW9uIGRlbGV0ZWQuCisKKwkqZ2NjLmMgKHN3aXRjaGVzKTogRWFjaCBzd2l0Y2ggaGFzIGEgYHVzZWQnIGZpZWxkLgorCShwcm9jZXNzX2NvbW1hbmQpOiBJbml0IGl0IHRvIDAgd2hlbiBtYWtpbmcgYHN3aXRjaGVzJy4KKwkoZG9fc3BlY18xLCBoYW5kbGVfYnJhY2VzLCBnaXZlX3N3aXRjaCk6IFNldCB0byAxIHdoZW4gc3dpdGNoIGlzIHVzZWQuCisJKG1haW4pOiBJZiBpdCByZW1haW5zIDAgYXQgdGhlIGVuZCwgcHJpbnQgZXJyb3IgbWVzc2FnZS4KKworCSogZXhwci5jIChjb252ZXJ0X21vdmUsIGNvbnZlcnRfdG9fbW9kZSk6IERvbid0IHRydW5jYXRlIGEgTUVNIGluCisJcGxhY2UgaWYgaXQgaXMgdm9sYXRpbGUuCisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogV2hlbiByZWR1Y2luZyBhIGdpdiwgaWYgdGhlIGJpdiBpcworCWluY3JlbWVudGVkIGJldHdlZW4gdGhlIGdpdidzIGNyZWF0aW9uIGFuZCBpdHMgdXNlLCBpbmNyZW1lbnQKKwl0aGUgcmVkdWNlZCBnaXYgdmFyICphZnRlciogaXRzIHVzZS4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFdhcm4gYWJvdXQgcHJvdG8gdnMgbm9ucHJvdG8KKwlvbmx5IGlmIG5vIG90aGVyIGVycm9ycyBhcHBseS4KKworCSoganVtcC5jIChpbnZlcnRfZXhwKTogRG9uJ3QgY3Jhc2ggaWYgYXJnIGlzIG51bGwuCisKKwkqIGFsbGlhbnQubWQgKGZsb2F0KmkqZjIpOiBEb24ndCBhbGxvdyBpbW1lZGlhdGUgb3BzLgorCShzbmUpOiBGaXggdHlwbywgZnNuZSA9PiBmc25lcS4KKworCSogZXhwci5jIChzdG9yZV9vbmVfYXJnLCBleHBhbmRfY2FsbCk6IFdoZW4gc2l6ZSBkb2Vzbid0IG1hdHRlciwKKwlwYXNzIGNvbnN0MF9ydHgsIG5vdCAocnR4KSAwLgorCisJKiBleHByLmMgKGRvX2p1bXApOiBBcmdzIHRvIGludmVydF9leHAgd2VyZSBtaXNzaW5nLgorCisJKiBnY2MuYyAoc3RvcmVfYXJnKTogTm93IDIgc2VwYXJhdGUgYXJncyBmb3IgZGVsZXRlLW9uLXN1Y2Nlc3MKKwlhbmQgZGVsZXRlLW9uLWZhaWx1cmUuICBBbGwgY2FsbHMgY2hhbmdlZC4KKwkoZG9fc3BlY18xKTogREVMRVRFX1RISVNfRklMRSBpcyBtZWFuaW5nZnVsIGZvciBvdXRwdXQgZmlsZXMuCisKKwkqIGNvbmZpZy94bS1hbGxpYW50LmggKExJTktfU1BFQyk6IFBhc3MgLVggdG8gbGlua2VyLgorCitTYXQgTWFyIDExIDEwOjMwOjQxIDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgY2N2aSkKKworCSogdG0tKi5oLCB4bS0qLmgsICoubWQ6IE1vdmVkIHRvIHN1YmRpciBgY29uZmlnJy4KKwkqIG91dHB1dC0qLmM6IE1vdmVkIHRvIGBjb25maWcvb3V0LSouYycuCisJKiBNYWtlZmlsZSAoLmMubyk6IERlZmluZSBydWxlIHRvIHVzZSAtSWNvbmZpZyB3aGVuIGNvbXBpbGluZy4KKwkodmFyaW91cyk6IERlbGV0ZSB0aGUgY29tbWFuZHMgZnJvbSBzb21lIGNvbXBpbGF0aW9uIHJ1bGVzLgorCVB1dCAtSWNvbmZpZyBpbiBvdGhlciBjb21waWxhdGlvbiBjb21tYW5kcy4KKwlBbHNvIHNvbWUgcmVvcmRlcmluZyBvZiB2YXJpYWJsZSBkZWZzIGFuZCBjb21tZW50cyBmb3IgY2xlYW5saW5lc3MuCisJKHJlYWxjbGVhbik6IENoYW5nZSBhIHNoZWxsIGNvbW1lbnQgdG8gYSBNYWtlIGNvbW1lbnQuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFNpbXBsaWZ5IGFuZCBleHRlbmQgVFJVVEhfLi4uIG9wZXJhdG9ycworCWtub3dpbmcgdGhhdCBhcmdzIG11c3QgYmUgaW50cyBhbmQgdmFsdWVzIHdpbGwgYmUgMCBvciAxLgorCisJKiBnY2MuaGxwOiBOZXcgZmlsZSAoZm9yIFZNUykuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRG9uJ3QgbGV0IHR3byAyLWdyb3VwcyBvdmVybGFwLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWRzKTogV2hlbiBhIHBsYWluIHJlZyBtYXRjaGVzIGEgcmVsb2FkCisJZm9yIGFuIGluY3JlbWVudCwgZG9uJ3QgY2hhbmdlIHRoZSByZWxvYWRfaW4gdG8gYSBwbGFpbiByZWcuCisJTGVhdmUgdGhlIGluY3JlbWVudCB0aGVyZS4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCB0cnkgdG8gaW5saW5lCisJdW5sZXNzIHRoZSBwYXJtIG1hY2hpbmUgbW9kZXMgcmVhbGx5IG1hdGNoIHdoYXQncyBleHBlY3RlZC4KKworCSogc3RtdC5jIChlbWl0X2Nhc2Vfbm9kZXMpOiBkZWZhdWx0X2xhYmVsIGlzIGFuIHJ0eCwgbm90IHRyZWUuCisKKwkqIHRtLW5leHQuaCAoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IERlZmluZSBpdCBhcyAxLgorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X21vdmVfZG91YmxlKTogRG9uJ3QgdHJ1c3QgcmFuZG9tIHN0cnVjdHMKKwl0byBiZSBkb3VibGUtd29yZCBhbGlnbmVkLgorCisJKiBnY2MuYzogUGFzcyAtV2NvbW1lbnRzIHRvIGNwcC4KKworCSogcnRsLmRlZiAoQVNNX09QRVJBTkRTKTogTmV3IG9wZXJhbmRzLCBzb3VyY2UgZmlsZSBhbmQgbGluZS4KKwkqIHJ0bC5oIChBU01fT1BFUkFORFNfKik6IE5ldyBtYWNyb3MgZm9yIGNvbXBvbmVudHMgb2YgQVNNX09QRVJBTkRTLgorCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogVXNlIG5ldyBmaWVsZHMsIG5vdCBSRUdfQVNNXyogbm90ZXMuCisJKiB0b3BsZXYuYyAoZXJyb3JfZm9yX2FzbSk6IGxpa2V3aXNlLgorCSogcnRsLmggKGVudW0gcmVnX25vdGUpOiBEZWxldGUgUkVHX0FTTV9GSUxFLCBSRUdfQVNNX0xJTkUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBDaGVjayBleHBsaWNpdGx5IGZvciB2b2xhdGlsaXR5IGluIEkyLCBJMS4KKworRnJpIE1hciAxMCAxOTozMDoxMCAxOTg5ICBSaWNoYXJkIE0uIFN0YWxsbWFuICAocm1zIGF0IGNjdmkpCisKKwkqIGMtcGFyc2UueSAoR09UTyBzdG10KTogU2V0IFRSRUVfVVNFRCBmb3IgdGhlIGxhYmVsLgorCSogYy1kZWNsLmMgKHBvcGxldmVsKTogV2FybiBhYm91dCB1bnVzZWQgbGFiZWwuCisKKwkqIGMtZGVjbC5jICh3YXJuX3BvaW50ZXJfYXJpdGgsIHdhcm5fc3RyaWN0X3Byb3RvdHlwZXMpOiBOZXcgdmFycy4KKwkobGFuZ19kZWNvZGVfb3B0aW9ucyk6IE9wdGlvbnMgdG8gc2V0IHRoZW0uCisJKiBjLXR5cGVjay5jIChwb2ludGVyX2ludF9zdW0sIGNfc2l6ZW9mKTogTWF5YmUgd2FybiBpZiBiYWQgdGFyZ2V0LgorCSogYy1kZWNsLmMgKGdyb2twYXJtcyk6IE1heWJlIHdhcm4gaWYgbm9ucHJvdG90eXBlIGZuIGRlY2wuCisKKwkqIGZsYWdzLmgsIHRvcGxldi5jICh3YXJuX3NoYWRvdyk6IE5ldyBmbGFnLgorCSogdG9wbGV2LmMgKG1haW4pOiBEZWNvZGUgaXQuCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBNYXliZSB3YXJuIGFib3V0IGFueSBzaGFkb3dpbmcuCisJRXhpc3RpbmcgcGFybS1zaGFkb3dpbmcgd2FybmluZyBub3cgZGlzYWJsZWQgaWYgc2hhZG93aW5nIGRlY2wKKwlpcyBhbHNvIGEgcGFybS4KKworCSogZmxhZ3MuaCwgdG9wbGV2LmMgKHdhcm5faWRfY2xhc2gsIGlkX2NsYXNoX2xlbik6IE5ldyBmbGFncy4KKwkqIHRvcGxldi5jIChtYWluKTogRGVjb2RlIC1XaWQtY2xhc2gtTEVOLgorCSogdHJlZS5jIChnZXRfaWRlbnRpZmllcik6IEltcGxlbWVudCB3YXJuaW5nIGlmIHR3byBpZGVudHMgbWF0Y2guCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBXYXJuIGFib3V0IHN0YXRpY3MgZGVmaW5lZCBhbmQgdW51c2VkLgorCisJKiBydGwuaCAoQ09OU1QwX1JUWCk6IE5ldyBtYWNyby4KKworCSogcmVjb2cuYyAob2Zmc2V0YWJsZV9hZGRyZXNzX3ApOiBOZXcgMXN0IGFyZyBzYXlzIHdoZXRoZXIgdG8gZGVtYW5kCisJYSBzdHJpY3RseSB2YWxpZCBhZGRyZXNzLgorCShvZmZzZXRhYmxlX21lbXJlZl9wKTogUGFzcyBub256ZXJvLgorCSogc3RtdC5jIChvcHRpbWl6ZV9iaXRfZmllbGQpOiBQYXNzIHplcm8uCisKKwkqIGNjY3AuYyAobWFpbik6IEFsbG93IC1XY29tbWVudCBsaWtlIC1XY29tbWVudHMuCisJKiBjLWRlY2wuYyAobGFuZ19kZWNvZGVfb3B0aW9ucyk6IExpa2V3aXNlLgorCitTdW4gTWFyICA1IDE1OjAyOjU5IDE5ODkgIFJhbmRhbGwgU21pdGggIChyYW5keSBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgW3RzdGRmLCBjbXBbc2RdZiwgdHJ1bmNkZnNmMiwgZmxvYXRzaVtzZF1mMiwgYWRkW3NkXWYzLAorCXN1YltzZF1mMywgbXVsW3NkXWYzLCBkaXZbc2RdZjMsIG5lZ1tzZF1mMiwgYWJzW3NkXWYyXTogTWFkZSBzdXJlCisJdGhhdCB0aGUgdGVzdCBmdW5jdGlvbidzIGluIHRoZSBtYXRjaF9vcGVyYW5kcyBvZiB0aGUgZGVmaW5lX2V4cGFuZAorCWFuZCBkZWZpbmVfaW5zbidzIG1hdGNoZWQsIGFuZCBtYWRlIHRoYXQgdGVzdCBmdW5jdGlvbgorCSJyZWdpc3Rlcl9vcGVyYW5kIiB3aGVuIGJvdGggZGVmaW5lX2luc24ncyByZWFsbHkgbmVlZGVkIHJlZ2lzdGVycworCWluIHRoYXQgc3BvdC4KKworU2F0IE1hciAgNCAwMDoyNTozNyAxOTg5ICBSaWNoYXJkIE0uIFN0YWxsbWFuICAocm1zIGF0IGMydikKKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IERvbid0IGV2ZXIgYnlwYXNzIHRoZSBiaWctZW5kaWFuCisJcGFkZGluZyBhdCB0aGUgZW5kLgorCisJKiBjY2NwLmMgKGRlcHNfb3V0cHV0KTogQnJlYWsgbGluZSBpZiB3b3VsZCBvdGhlcndpc2UgZXhjZWVkIDc1IGNoYXJzLgorCU1ha2UgYSBuYW1lIGZvciB0aGF0IHZhbHVlIDc1LgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogSGFuZGxlIGdlbmVyYWwgY2FzZSBvZiAoc3VicmVnIChzaWduX2V4dGVuZCBYKSkuCisKKwkqIHRtLXN1bjM4NmkuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgYHN1bicuCisKKwkqIGZpeGluY2x1ZGVzOiBjaGFuZ2UgYGZpbmQnIGNhbGxzIHRvIGZpbmQgZGlycyB0aHJ1IHN5bWxpbmtzLgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiAoc2V0IChzdWJyZWcgKHJlZyBOKSkuLi4pCisJZG9lcyBtYWtlIHJlZyBOIHNpZ25pZmljYW50IGZvciB0aGlzIGJhc2ljIGJsb2NrLgorCitGcmkgTWFyICAzIDEzOjU1OjI1IDE5ODkgIFJpY2hhcmQgTS4gU3RhbGxtYW4gIChybXMgYXQgYzJ2KQorCisJKiBjLWRlY2wuYyAocGFybWxpc3RfdGFnc193YXJuaW5nKTogUHJpbnQgYW4gZXhwbGFuYXRpb24KKwlmb3IgdGhlIGZpcnN0IHN1Y2ggd2FybmluZy4KKworCSogaTM4Ni5tZCAoZXh0ZW5kc2ZkZik6IExldCBvcCAxIG1hdGNoIG9wMCBpZiB0aGF0IGlzIGFuIGZwIHJlZy4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IEZpeCBzdHVwaWQgZXJyb3JzIGNvcHlpbmcgcGNjIHN0cnVjdCB2YWx1ZS4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6IERpc2NhcmQgTk9QX0VYUFJzIGZyb20gYnVpbGRfY19jYXN0LgorCitUaHUgRmViIDIzIDA1OjU1OjU3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAxLjM0IHJlbGVhc2VkLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBJZiBFWFBSIGlzIGFuIGVycm9yIG1hcmssIHJldHVybiB0aGF0LgorCisJKiBmb2xkLWNvbnN0LmMgKGRpdl9hbmRfcm91bmRfZG91YmxlKTogQWJvcnQgaWYgZGl2aXNvciBpcyAwLgorCShjb21iaW5lKTogTGlrZXdpc2UsIGZvciByZWFsIGNvbnN0YW50cy4KKwkocmVhbF96ZXJvcCk6IE5ldyBzdWJyb3V0aW5lLgorCShmb2xkKTogRG9uJ3QgdHJ5IHRvIGZvbGQgZGl2aXNpb24gaWYgZGl2aXNvciBpcyAwLgorCURvbid0IHRyeSB0byBmb2xkIHJlYWxzIGlmIGNhbid0IGRvIGFyaXRobWV0aWMgb24gdGhlbS4KKwlEb24ndCB0cnkgdG8gY29tcGFyZSByZWFscyBmb3IgVFJVVEhfLi4uX0VYUFIgaWYgY2FuJ3QgZG8gYXJpdGguCisJVXNlIHJlYWxfemVyb3AgdG8gdGVzdCByZWFscyBmb3IgemVyb25lc3MuCisJRm9yIFRSVVRIX0FORElGX0VYUFIgYW5kIFRSVVRIX09SSUZfRVhQUiwgY2FuIHNpbXBsaWZ5IGJhc2VkIG9uCisJZmlyc3Qgb3BlcmFuZCBhbG9uZS4KKworCSogYy10eXBlY2suYyAoc3RvcmVfaW5pdF92YWx1ZSk6IEZpeCBlcnJvciBtc2cgdGV4dC4KKworCSogdG0tc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBVc2UgYG1jb3VudCcuCisJKiB0bS1zdW40b3MzLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogT3ZlcnJpZGUgaXQ7IHVzZSBgLm1jb3VudCcuCisKK1dlZCBGZWIgMjIgMDQ6MzM6MjIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1ocDlrMzIwLmggKENQUF9TUEVDLCBDUFBfUFJFREVGSU5FUyk6IE1ha2UgaGFuZGxpbmcgb2YKKwktRG1jNjgwMDAgZGVwZW5kIG9uIFRBUkdFVF9ERUZBVUxULgorCisJKiB0bS1zcGFyYy5oIChGVU5DVElPTl9QUk9GSUxFUik6IE1pc3NpbmcgbmV3bGluZSBpbiBmcHJpbnRmLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IERvbid0IG1hcCBzdHJ1Y3QtdmFsdWUtYWRkcmVzcworCWluIG1lbW9yeSBpZiBmbiBkb2VzIG5vdCB1c2UgaXQuCisKKwkqIGMtcGFyc2UueSAoY2hlY2tfbmV3bGluZSk6IEF0IHNraXBsaW5lLCBkZXRlY3QgZW9mLgorCisJKiBzdG10LmMgKHVuaW5pdGlhbGl6ZWRfdmFyc193YXJuaW5nKTogQ2hhbmdlIHRleHQgb2Ygd2FybmluZy4KKworVHVlIEZlYiAyMSAwMzo1ODo1MCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfbXVsX2luc24pOiBIYW5kbGUgY2FzZSBvZiBib3RoIGFyZ3MKKwlpbiByZWcgOCwgb3IgYm90aCBpbiByZWcgOS4KKworCSogdG0tc3BhcmMuaCAoQVNNX1NQRUMpOiBEZWZpbmUsIHRvIGhhbmRsZSAtcGlwZS4KKworCSogdG0tc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBBZGQgb21pdHRlZCBmcHJpbnRmIGFyZ3MuCisJKEJMT0NLX1BST0ZJTEVSKTogTGlrZXdpc2UuICBVc2UgdGVtcHZhci4KKworCSogbTY4ay5tZCAoUUltb2RlIGJ0c3QpOiBBbGxvdyBub25vZmZzZXRhYmxlIG1lbSByZWZzLgorCitNb24gRmViIDIwIDAwOjMyOjQyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IERvbid0IHJlY29yZCBhYm91dCBnbG9iYWwgcmVnIHZhcnMuCisKKwkqIGNvbmZpZy5nY2MgKGNvbnZleC0qKTogdG0gZmlsZSBuYW1lcyBhcmUgdG0tY29udmV4MS5oLCB0bS1jb252ZXgyLmguCisKKwkqIHRtLXZheC5oLCB0bS1uczMyay5oLCB0bS1hbGxpYW50Lmg6IERlZmluZSBQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4uCisKKwkqIGdjYy5jIChjb21waWxlcnMpOiBQYXNzIGAtYScgdG8gY2MxLgorCSogdG0tc3VuMy5oLCB0bS1zcGFyYy5oIChMSUJfU1BFQyk6IERlZmluZSwgdG8gaGFuZGxlIGAtYScuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBDb3B5IHN0YWNrIGFkZHJlc3NlcyB0byBiZSBwYXNzZWQgdG8gYmNvcHk7CisJb2xkIG1ldGhvZCBvZiBwcmVhZGp1c3RtZW50IGlzIGJyb2tlbiBieSBjaGFuZ2VzIGluIGVtaXRfbGlicmFyeV9jYWxsLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBOZXcgdGVtcCBgdGVtcG9yYXJ5JzsgZG9uJ3QgZ2V0IGNvbmZ1c2VkCisJYWJvdXQgd2hldGhlciBhbGxvY2F0aW9uIHdhcyB0ZW1wb3JhcnkuCisKK1N1biBGZWIgMTkgMTc6MDM6MzUgMTk4OSAgQ2hyaXMgU21pdGggIChjc21pdGggYXQgbW96YXJ0KQorCisJKiB0bS1jb252ZXguaDogZGVmaW5lIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTgorCisJKiBjb252ZXgubWQ6CisJcmVtb3ZlIHBzaGVhIHBhdHRlcm5zLCBtb3ZzaSBkb2VzIGl0IGJldHRlci4KKwlhZGQgYXNoaWZ0OkRJIGFiczpERiBhYnM6U0YKKwkodHN0ZGkpOiB1c2UgYSBjbG9iYmVyZWQgcmVnaXN0ZXIgaW5zdGVhZCBvZiBhIGJvZ3VzIERJbW9kZSB6ZXJvLgorCSh0cnVuY2hpcWkyKTogZGVsZXRlIG5vbmluc3RydWN0aW9uIGN2dGguYgorCSh1ZGl2c2kzLCB1ZGl2aGkzLCB1ZGl2cWkzKTogZGVsZXRlZCwgZXhwYW5kX2Rpdm1vZCBkb2VzIGl0IG5vdy4KKwkoY2FsbCwgY2FsbF92YWx1ZSk6IGRlbGV0ZSBzdHVwaWQgY2FsbC9yZXQgLT4ganVtcCBvcHRpbWl6YXRpb24uCisJKGNhbGwsIGNhbGxfdmFsdWUpOiBmbHVzaCBjYWxsX2FwX2NoZWNrLCB1c2UgcmVnX21lbnRpb25lZF9wIGluc3RlYWQuCisKKwkqIGNvbnZleC5tZDogKG1vdnh4KTogc3dhcCBjb25zdHJhaW50IGFsdGVybmF0aXZlcyBzbyB0aGF0IHRoZQorCWxlZnRtb3N0IGFsdGVybmF0aXZlIGlzIChzZXQgPWcgcikuICBUaGlzIG1ha2VzIChzZXQgbWVtIGNvbnN0KQorCWdldCBjb21iaW5hYmxlIGlucHV0IHJlbG9hZHMgb2YgY29uc3QgaW5zdGVhZCBvZiB1bmNvbWJpbmFibGUKKwlvdXRwdXQgcmVsb2FkcyB0byBtZW0uICBUaGV5IHN0aWxsIGRvIG5vdCBjb21iaW5lLCBidXQgd3RmLAorCUknbGwgaW5jaCB1cCBvbiBpdC4KKworCSogb3V0cHV0LWNvbnZleC5jOiAoY29uc3RfZG91YmxlX3toaWdoLGxvd31faW50KTogbmV3IHJvdXRpbmVzCisJdG8gcGljayBhcGFydCBjb25zdF9kb3VibGVzIGZvciBhc3NlbWJsZXIuCisKK1N1biBGZWIgMTkgMDE6NDA6MTcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAoc2hpZnQgbWVtb3J5IHJpZ2h0IDI0IGJpdHMpOiBBbm90aGVyIGBhMScgdHlwby4KKworCSogY29uZmlnLmdjYyAoY29udmV4LSopOiBEZWxldGUgdHJvdWJsZXNvbWUgd2hpdGVzcGFjZS4KKworCSogYy1kZWNsLmMgKGdyb2twYXJtcyk6IERlbGV0ZSByZWR1bmRhbnQgYHBhcm0gIT0gMCcgdGVzdHMuCisKKwkqIHN0bXQuYyAoZml4dXBfbWVtb3J5X3N1YnJlZyk6IFNsaWdodCBzaW1wbGlmaWNhdGlvbi4KKworCSogdG0tc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBGaWxsIGRlbGF5IHNsb3QuCisJKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogVXNlIHNldGhpLgorCShCTE9DS19QUk9GSUxFUik6IFVzZSAlZzIsIG5vdCAlZzAuICBVc2Ugc2V0aGkuCisKK1NhdCBGZWIgMTggMDI6MTE6MjUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogSWdub3JlIGNvbnN0IGFycmF5J3MgaW5pdGlhbCB2YWx1ZQorCWlmIGl0J3MgYW4gZXJyb3JfbWFyay4KKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IFNldCBERUNMX0lOSVRJQUwgdG8gYW4gZXJyb3JfbWFyaworCWlmIHRoZSBkZWNsIGlzIGEgcGVybWFuZW50IG5vZGUuCisKKwkqIGNjY3AuYyAocmVzY2FuKTogSWYgdHJhZGl0aW9uYWwsIGlmIG1hY3JvIGVuZHMgaW5zaWRlIHN0cmluZywKKwlrZWVwIHNjYW5uaW5nIGZvciB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisJKGhhbmRsZV9kaXJlY3RpdmUpOiBBIGxpbmUgb2YganVzdCBgIycgYmVjb21lcyBibGFuay4KKwkoY29sbGVjdF9leHBhbnNpb24pOiBcIGluIHN0cmluZ3MgdHJhZGl0aW9uYWxseSBkb2Vzbid0IGhpZGUgbWFjcm8gYXJnLgorCisJKiBtNjhrLm1kLCBhbGxpYW50Lm1kIChhZGRzaTMpOiBOZXcgYWx0ZXJuYXRpdmUgYT1yK2EsIGluIGFkZGl0aW9uCisJdG8gb2xkIGE9YStyLCBuZWVkZWQgc2luY2UgcmVsb2FkLWluc25zIGFyZSBub3QgY29tbXV0ZWQuCisKK0ZyaSBGZWIgMTcgMDM6MTU6MjMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1tNjhrLmggKFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTik6IERlZmluZSBpdC4KKwkqIHRvcGxldi5jLCBmbGFncy5oOiBOZXcgdmFyIGZsYWdfcGNjX3N0cnVjdF9yZXR1cm4uCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IE9iZXkgbmV3IGZsYWcgYW5kIG5ldyB2YXJpYWJsZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBPYmV5IG5ldyBmbGFnIGFuZCBuZXcgdmFyaWFibGUuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhdGljX3NwYWNlKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBJZiB3ZSBuZWVkIGNsZWFudXBzLCBjb21wdXRlIHJldHZhbCBmaXJzdAorCWludG8gcHNldWRvIHJlZywgdGhlbiBkbyB0aGUgY2xlYW51cHMsIHRoZW4gY29weSBpdCB0byByZXR1cm4gcmVnLgorCitUaHUgRmViIDE2IDAyOjU5OjUyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogV2luIGlmIFNUQVRJQ19DSEFJTl9SRUdOVU0gdW5kZWZpbmVkLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogSGFuZGxlIGNvbmZsaWN0IGJldHdlZW4gdHdvIHByZWNvbXB1dGVkCisJYXJncyB0aGF0IGFyZSBib3RoIGZ1bmN0aW9uIGNhbGxzIHJldHVybmluZyBzdHJ1Y3R1cmVzLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBCa3dkcyB0ZXN0IG9mIG0tPnBhcnRpYWwsIGZvciBhIG1hdGNoaW5nIHJlZy4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCwgZXhwYW5kX2NhbGwpOiBIYW5kbGUgU1RBQ0tfQVJHU19BREpVU1QuCisKK1dlZCBGZWIgMTUgMDE6NTk6MTUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAoZmxhZ19jYWxsZXJfc2F2ZXMpOiBOZXcgdmFyLCBmb3IgLWZjYWxsZXItc2F2ZXMuCisJREVGQVVMVF9DQUxMRVJfU0FWRVMgY29udHJvbHMgaW5pdGlhbCB2YWx1ZS4KKwkqIGdsb2JhbC1hbGxvYy5jIChmaW5kX3JlZyk6IERvIGNhbGxlciBzYXZlcyBvbmx5IGlmIGZsYWcgc2V0LgorCSogbG9jYWwtYWxsb2MuYyAoZmluZF9mcmVlX3JlZyk6IERvIGNhbGxlciBzYXZlcyBvbmx5IGlmIGZsYWcgc2V0LgorCSogdG0tYWxsaWFudC5oLCB0bS1jb252ZXguaDogRGVmaW5lIERFRkFVTFRfQ0FMTEVSX1NBVkVTLgorCitXZWQgRmViIDE1IDAxOjU5OjE1IDE5ODkgIENocmlzIFNtaXRoICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmM6IE5ldyBmaWxlLgorCSogcmVncy5oIChDQUxMRVJfU0FWRV9QUk9GSVRBQkxFKTogTmV3IG1hY3JvLgorCShyZWdfbl9jYWxsc19jcm9zc2VkKTogbmV3IGludC12ZWN0b3IgcmVwbGFjZXMgcmVnX2Nyb3NzZXNfY2FsbHMuCisJKiBmbG93LmMgKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzLCBwcm9wYWdhdGVfYmxvY2ssIGR1bXBfZmxvd19pbmZvKToKKwlVc2UgcmVnX25fY2FsbHNfY3Jvc3NlZC4KKwkqIHN0dXBpZC5jIChzdHVwaWRfbWFya19yZWZzLCBzdHVwaWRfbGlmZV9hbmFseXNpcyk6IExpa2V3aXNlLgorCSogZ2xvYmFsLWFsbG9jLmMgKGZpbmRfcmVnKTogU29tZXRpbWVzIGFsbG9jYXRlIGNhbGwtY2xvYmJlcmVkIHJlZ3MKKwlmb3IgY2FsbC1jcm9zc2luZyBwc2V1ZG9zLgorCU5ldyBhcmcgQUNDRVBUX0NBTExfQ0xPQkJFUkVEOyBjYWxsZXJzIGNoYW5nZWQuCisJKiBsb2NhbC1hbGxvYy5jIChmaW5kX2ZyZWVfcmVnKTogU2ltaWxhciBjaGFuZ2VzLgorCShxdHlfbl9jYWxsc19jcm9zc2VkKTogTmV3IGludC12ZWN0b3IgcmVwbGFjZXMgcXR5X2Nyb3NzZXNfY2FsbHMuCisJKGFsbG9jX3F0eSwgbG9jYWxfYWxsb2MsIGNvbWJpbmVfcmVncywgZmluZF9mcmVlX3JlZyk6IGNoYW5nZSB0aGF0IHZhci4KKwkqIHJlZ2NsYXNzLmMgKGNhbGxfZml4ZWRfcmVncywgY2FsbF9maXhlZF9yZWdfc2V0KTogbmV3IHZhcnMuCisJKGluaXRfcmVnX3NldHNfMSk6IEluaXRpYWxpemUgdGhlbS4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2FsbCBjYWxsZXItc2F2ZXMgcHJvY2Vzc2luZyBpZiBuZWVkZWQuCisKK1dlZCBGZWIgMTUgMDE6NTk6MTUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogSU5URUdFUl9DU1QgZm9yIERJbW9kZTogZG9uJ3QgaGFuZGxlCisJZW5kaWFubmVzcyBoZXJlLiAgU28gQ09OU1RfRE9VQkxFX0xPVyBpcyBhbHdheXMgdGhlIGxvdyB3b3JkLgorCSogdmFyYXNtLmMgKGZvcmNlX2NvbnN0X21lbSk6IEhhbmRsZSBpdCBoZXJlLiAKKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiB3aWRlbmluZyBmb2xsb3dlZCBieSBleHRlbmRzaWRpMiBoYWQgYnJhaW5vLgorCisJKiBpbnRlZ3JhdGUuYzogRG9uJ3QgaW5jbHVkZSBjdHlwZS5oOyBub3QgbmVlZGVkIGFuZCBraWxscyBTdW4gY3BwLgorCisJKiBtNjhrLm1kIChjbXBzZiwgY21wZGYgYW5kIHRoZWlyIHJlY29nbml6ZXJzKToKKwlSZXBsYWNlIE1JTlVTIHdpdGggQ09NUEFSRS4KKwlBbHNvLCB1c2UgVk9JRG1vZGUgZm9yIENPTVBBUkVzLCBub3QgU0Ygb3IgREYuCisKKwkqIG9wdGFicy5jIChzaWduX2V4cGFuZF9iaW5vcCk6IEhhbmRsZSBvcHMgc3VjaCBhcyBkaXZpc2lvbiB3aGVyZQorCWFuIHVuc2lnbmVkIGNoYXIgY291bGQgYmUgd2lkZW5lZCBhbmQgaGFuZGxlZCB3aXRoIHNpZ25lZCBpbnQgaW5zbnMuCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IFVzZSB0aGF0LgorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IEFsbG93IGZvciB0eXBlIHZhcmlhbnRzIGluIHZhbGlkYXRpbmcKKwlpbml0aWFsaXphdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LgorCisJKiBjLXR5cGVjay5jIChkZWNsX2NvbnN0YW50X3ZhbHVlKTogRGlzYWJsZSBvcHQuIGlmIHBlZGFudGljIG9yCisJb3V0c2lkZSBmdW5jdGlvbnMsIHNvIHRoYXQgdmFsaWRpdHkgb2YgcHJvZ3JhbSBpcyBuZXZlciBhZmZlY3RlZC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogU2lnbmVkbmVzcy10ZXN0IGZvciBBQlNfRVhQUiB3YXMgYmFja3dhcmRzLgorCitUdWUgRmViIDE0IDAxOjMwOjQ3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluKTogRG9uJ3Qgb21pdCBub3JtYWwgb3V0cHV0LCBpZiB3ZSB3YW50IGRlcHMgb24KKwlhIHNlcGFyYXRlIHN0cmVhbS4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgcmVjb3JkIGFueSBhcmcgdHlwZXMgZm9yIGZ1bmN0aW9ucworCWlmIC10cmFkaXRpb25hbC4KKworCSogcHJpbnQtdHJlZS5jIChwcnR5cGVpbmZvKTogTWVudGlvbiBwZXJtYW5lbnQgYXR0cmlidXRlLgorCisJKiB0bS1uZXh0Lmg6IE5ldyBmaWxlLgorCisJKiBjLXR5cGVjay5jIChkZWNsX2NvbnN0YW50X3ZhbHVlKTogVGhlIERFQ0xfSU5JVElBTCBtYXkgYmUgRVJST1JfTUFSSy4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEZvciBmbnMsIG5ldyBzdGF0aWMgZGVjbCBvdmVycmlkZXMKKwlvbGQgbm9uLXN0YXRpYyBvbmUuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXIsIGdlbl9oaWdocGFydCk6IFVzZSBjaGFuZ2VfYWRkcmVzcywgc28gd2UKKwlwcmVzZXJ2ZSB2b2xhdGlsaXR5LCBldGMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2V4cHJfc3RtdCk6IFVzZSBlbWl0X2ZpbGVuYW1lLCBlbWl0X2xpbmVubworCWFzIGZpbGUgYW5kIGxpbmUgZm9yIGFueSB3YXJuaW5nLgorCSogZW1pdC1ydGwuYyAoZW1pdF9saW5lX25vdGUpOiBTZXQgdGhvc2UgdmFycy4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBJZiAtV2ltcGxpY2l0LCB3YXJuIG9mIGFyZyB3aXRoIG5vIGRlY2wuCisKKwkqIHJlY29nLmMgKG9mZnNldGFibGVfYWRkcmVzc19wKTogVXNlIHN0cmljdF9tZW1vcnlfYWRkcmVzc19wLAkKKwlzaW5jZSBjYWxsZWQgZnJvbSByZWxvYWQuYy4KKworTW9uIEZlYiAxMyAwMzoxMTo1MCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLm1kIChjb21wYXJlLXRvLXJlZyBwYXR0ZXJucyk6IFNvbWUgc3RpbGwgaGFkIE1JTlVTLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFdhcm4gaWYgYC1hJyBvbiBzeXN0ZW0gdGhhdCBjYW4ndCBoYW5kbGUgaXQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IERlbGV0ZSB1bnVzZWQgbG9jYWwgYHZhbCcuCisJKHB1c2hjYXNlX3JhbmdlKTogTGlrZXdpc2UgZm9yIGB2YWx1ZScuCisJKGZpeHVwX3Zhcl9yZWZzKTogTGlrZXdpc2UgZm9yIGBpbnNuJy4KKwkqIGVtaXQtcnRsLmMgKHN0YXJ0X3NlcXVlbmNlKTogTGlrZXdpc2UgZm9yIGBzYXZlJy4KKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogTGlrZXdpc2UgZm9yIGBiZWZvcmVfc3RhcnQnLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IERlbGV0ZSBsYWJlbCBgYmlub3AxJy4KKworCSogcmVsb2FkMS5jIChjb25zdHJhaW50X2FjY2VwdHNfcmVnX3ApOiBIYW5kbGUgU1VCUkVHcyBvZiBSRUdzLgorCitTdW4gRmViIDEyIDA1OjM3OjQ2IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ251bGliLmMgKF9fYmJfaW5pdF9mdW5jKTogTmV3IGZ1bmN0aW9uCisKKwkqIHRtLW02OGsuaCAoQkxPQ0tfUFJPRklMRVIsIEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogRGVmaW5lZC4KKworU2F0IEZlYiAxMSAwMDowNTo1NSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLXNwYXJjLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogTWFrZSBpdCByZWFsbHkgd29yay4KKwkoQkxPQ0tfUFJPRklMRVIsIEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogTmV3IG1hY3Jvcy4KKworCSogZmluYWwuYyAoZmluYWwpOiBVc2UgQkxPQ0tfUFJPRklMRVIgYXQgc3RhcnQgb2YgZWFjaCBiYXNpYyBibG9jay4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBVc2UgRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIgaWYgLWEuCisJKGVuZF9maW5hbCk6IE5ldyBmbiB0byBvdXRwdXQgdGhlIGJsb2NrLXByb2ZpbGluZyB0YWJsZXMuCisJKiB0b3BsZXYuYyAocHJvZmlsZV9ibG9ja19mbGFnKTogU2V0IGlmIC1hLgorCShjb21waWxlX2ZpbGUpOiBDYWxsIGVuZF9maW5hbC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IEF2b2lkIGNvbWJpbmluZyBpbiBtb3N0IGNhc2VzIGlmIEkzCisJaGFzIGFuIGluYyBvciBkZWMgYW5kIEkxIG9yIEkyIHVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIuCisKKwkqIHRyZWUuYyAoc2l6ZV9pbl9ieXRlcywgaW50X3NpemVfaW5fYnl0ZXMpOiBVc2UgdHlwZSdzIG1haW4gdmFyaWFudC4KKworCSogYy10eXBlY2suYyAoYWN0dWFscGFyYW1ldGVybGlzdCk6IEVycm9yIGlmIHBhcm0gdHlwZSBpcyBpbmNvbXBsZXRlLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogSWdub3JlIGFyZ3MgdGhhdCBoYXZlIGluY29tcGxldGUgdHlwZS4KKworRnJpIEZlYiAxMCAwMjoyNjowMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoY2FzZSBzdG10cyk6IHN0cmlwIGR1bW15IE5PUF9FWFBScy4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogQ2xlYXIgcmVnX3toYXMsaXN9X291dHB1dF9yZWxvYWQgaGVyZSwKKwkoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogbm90IGhlcmUuCisKK1RodSBGZWIgIDkgMDE6MzU6NTUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X211bF9ieV9jb25zdGFudCk6IEZvcmdldCBjYyBzdGF0dXMuCisKKwkqIHN0bXQuYyAoYXNzaWduX3Bhcm1zKTogRG9uJ3QgcHV0IHZvbGF0aWxlIHBhcm1zIGluIHJlZ3MuCisKKwkqIHZheC5tZCAoamxicy9qbGJjIHJlY29nbml6ZXJzKTogTW92ZSB0aGVtIGJlZm9yZSBqYmMvamJzIHJlY29nbml6ZXJzLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBIYW5kbGUgKEVRIChDT01QQVJFIC4uLikgKENPTlNUX0lOVCAwKSkuCisKKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbiwgZGlnZXN0X2luaXQpOiBGb3Igc3RhdGljIGNvbnN0CisJbm9udm9sYXRpbGUgc2NhbGFyIHZhcmlhYmxlLCB1c2UgaXRzIGluaXRpYWwgdmFsdWUgaWYga25vd24uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHI6IGNhc2UgQ09NUE9ORU5UX1JFRik6IElmIGNvbnRhaW5pbmcgc3RydWN0dXJlCisJY29tZXMgb3V0IHZvbGF0aWxlLCBsZWF2ZSB0aGUgY29tcG9uZW50IE1FTSB2b2xhdGlsZSB0b28uCisKKwkqIGhhcmQtcmVnLXNldC5oOiBGaXggbXVsdGktd29yZCBjYXNlIG1hY3JvcyB0byBzd2FsbG93IHNlbWljb2xvbi4KKworCSogYy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogSW4gYXJyYXk9PnB0ciwgdm9sYXRpbGl0eQorCW9mIHRhcmdldCB0eXBlIGNvbWVzIGZyb20gVFJFRV9USElTX1ZPTEFUSUxFLCBub3QgVFJFRV9WT0xBVElMRS4KKworCSogcmVsb2FkMS5jIChmb3JnZXRfb2xkX3JlbG9hZF8xLCBjaG9vc2VfcmVsb2FkX3RhcmdldHMpOgorCU5ldyBhcnJheSByZWdfaXNfb3V0cHV0X3JlbG9hZCBpcyBjb252ZXJzZSBvZiByZWdfaGFzX291dHB1dF9yZWxvYWQuCisJZm9yZ2V0X29sZF9yZWxvYWRfMSBuZWVkcyBib3RoLgorCitXZWQgRmViICA4IDAxOjI2OjI0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChmb3JnZXRfb2xkX3JlbG9hZHNfMSk6IE5ldyBmbiwgZ3V0cyBvZiBmb3JnZXRfb2xkX3JlbG9hZHMuCisJRG8gcHJvY2VzcyBhIHNwaWxsIHJlZyBpZiBpdCBpc24ndCB1c2VkIGZvciByZWxvYWRpbmcgaW4gdGhpcyBpbnNuLgorCShmb3JnZXRfb2xkX3JlbG9hZHMpOiBEZWxldGVkLCByZXBsYWNlZCB3aXRoIG5vdGVfc3RvcmVzLgorCShyZWxvYWRfYXNfbmVlZGVkKTogVW5kbyBGZWIgMSBjaGFuZ2UuCisJQ2FsbCBmb3JnZXRfb2xkX3JlbG9hZHNfMSBvbiBwc2V1ZG9zIGF1dG9pbmNyZW1lbnRlZCBhbmQgbm90IHJlbG9hZGVkLgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogSGFuZGxlIHZhcmlhbnQgdHlwZXMuCisKKwkqIGMtZGVjbC5jIChsYW5nX2RlY29kZV9vcHRpb24pOiAtV2FsbCBpbXBsaWVzIC1XdW51c2VkLgorCitUdWUgRmViICA3IDAxOjMyOjI4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IERvbid0IHRyeSBhZGRpbmcgb3V0cHV0cyB0byBhbiBhc21fb3BlcmFuZHMuCisKKwkqIGNzZS5jIChDSEVBUEVSKTogRG9uJ3QgZXZlciBsZXQgYSBoYXJkIHJlZyBnZXQgYWhlYWQgb2YgYSBwc2V1ZG8uCisKKwkqIHN0bXQuYyAoZml4dXBfZ290b3MpOiBEb24ndCBjcmFzaCBvbiB1bmRlZiBsYWJlbCBpZiBUSElTQkxPQ0sgaXMgMC4KKworCSogYy1kZWNsLmMgKHBhcm1saXN0X3RhZ3Nfd2FybmluZyk6IE5ldyBmbi4KKwkqIGMtcGFyc2UueSAocGFybWxpc3QsIHBhcm1saXN0X29yX2lkZW50aWZpZXJzKTogQ2FsbCBpdCwKKwl0byB3YXJuIGFib3V0IGFueSB0YWdzIGRlZmluZWQgaW5zaWRlIHRoZSBwYXJtbGlzdC4KKwkqIGMtZGVjbC5jIChncm9rcGFybXMpOiBEb24ndCB3YXJuIGFib3V0IHB0ciB0byBpbmNvbXBsZXRlIHR5cGUuCisJVGhlIG5ldyB3YXJuaW5nIGlzIGJldHRlci4KKworTW9uIEZlYiAgNiAwMToxMTozNiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IpOiBJbmNvcnJlY3QgQUxJR04gYXJnIGluIHN0b3JlX2ZpZWxkIGNhbGxzLgorCisJKiBjLXBhcnNlLnkgKCV1bmlvbik6IERlbGV0ZSB1bnVzZWQgYWx0ZXJuYXRpdmUuCisKKwkqIGMtZGVjbC5jIChncm9rcGFybXMpOiBVc2UgbWFpbiB2YXJpYW50IHRvIHRlc3QgZm9yIHB0ciB0byBpbmNvbXBsZXRlLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBEZWxldGUgc3VwZXJmbHVvdXMgaW5pdCBmb3IgYHBhaXInLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBPcHRpbWl6ZSBYKzAsIFgtMCBpbiBmbG9hdGluZyBwb2ludC4KKwlGaXggdHlwbyBpbiBQTFVTIGNhc2U7IG9taXR0ZWQgdmFsdWUgdG8gY29tcGFyZSBHRVRfTU9ERV9DTEFTUyBhZ2FpbnN0LgorCShlcXVpdl9jb25zdGFudCk6IEFsbG93IENPTlNUX0RPVUJMRS4KKworCSogY3NlLmM6IE9wdGltaXplIHBhc3QgaWYtc3RhdGVtZW50cyB0aGF0IGFyZSBrbm93biB0byBmYWlsLgorCShjc2VfaW5zbik6IElmIGNvbmRqdW1wIGJlY29tZXMgdW5jb25kIHRvIGVuZCBvZiB0aGlzIGJsb2NrLAorCXNldCBjc2Vfc2tpcF90b19uZXh0X2Jsb2NrLgorCShjc2VfYmFzaWNfYmxvY2spOiBJZiB0aGF0IGhhcHBlbnMsIGlnbm9yZSByZXN0IG9mIGJsb2NrLCBhbmQgbWF5YmUKKwl0cmVhdCBuZXh0IGJsb2NrIGFzIHBhcnQgb2YgdGhpcyBvbmUgKGlmIHRhYmxlcyBoYXZlIHJvb20pLgorCVJlc3VtZSBpbnNuIHRoYXQgc3RhcnRzIG5leHQgYmFzaWMgYmxvY2sgdG8gYmUgc2Nhbm5lZC4KKwkoY3NlX21haW4pOiBNYWtlIHJvb20gZm9yIGF0IGxlYXN0IDUwMCBxdHlzLgorCShjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogU3Vicm91dGluZSBicm9rZW4gb3V0IG9mIGNzZV9tYWluLgorCisJKiBjLXBhcnNlLnkgKGhhc2gsIGlzX3Jlc2VydmVkX3dvcmQpOiBSZXdyaXRlOiBuZXcgaGFzaCB0ZWNobmlxdWUuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBCZSBzbWFydCBhYm91dCBwcm90byB2cyBub25wcm90byBtaXNtYXRjaAorCWludm9sdmluZyBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCisKK1N1biBGZWIgIDUgMTc6MzE6MTIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBhbGxpYW50Lm1kIChtb3ZkaSk6IFR5cG8gaW4gYGZtb3ZlZCcuCisJKGZ0cnVuY3NmMik6IEhhbmRsZSBtb3ZpbmcgaW50byBmcCByZWcuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFR5cG8gaW4gdGVzdGluZyBQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1AuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF90YXJnZXRzKTogTW92ZSBhbGwgZGVhdGggbm90ZXMgdG8gdGhlCisJb3V0cHV0IHJlbG9hZCBpbnNuLgorCisJKiBtNjhrLm1kIChmaXhfdHJ1bmNzZnNpMixmaXhfdHJ1bmNkZnNpMik6IFVzZSBhY2N1cmF0ZSBydGwgcGF0dGVybi4KKworCSogbG9vcC5jIChkZWxldGVfaW5zbl9mb3JjZXMpOiBVc2UgcHJlc2VuY2Ugb2YgUkVHX1JFVFZBTCB0byBjaGVjaworCWZvciB2YWx1ZS1vZi1saWJyYXJ5LWNhbGwgaW5zbi4KKworU2F0IEZlYiAgNCAxODoxNzo1NiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogTWFrZSBhZGRyZXNzZXMgb2Ygc3RhY2sKKwlzbG90cyB2YWxpZCBzb21laG93LgorCisJKiB0bS0zYjEuaCAoRElWU0kzX0xJQkNBTEwsIGV0Yy4pOiBEZWZpbmUgdGhlc2UgbWFjcm9zOyBhdm9pZCBnbnVsaWIuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBBdm9pZCAoc3VicmVnIChtZW0pKSB3aGVuIGNvbnZlcnRpbmcKKwlWQUxVRTEgdG8gU0ltb2RlLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEbyBkZWxldGUgVVNFIGFuZCBDTE9CQkVSIGluc25zLgorCVRoaXMgaXMgbmVlZGVkIGZvciBwcm9wZXIganVtcCBvcHRpbWl6YXRpb24uCisKKwkqIHJ0bC5kZWYgKENPTVBBUkUpOiBOZXcgY29kZS4KKwkqICoubWQgKGNvbXBhcmUgYW5kIHJlbGF0ZWQgcGF0dGVybnMpOiBVc2UgQ09NUEFSRSwgbm90IE1JTlVTOlZPSUQuCisJKiBsb29wLmMgKGVsaW1pbmF0ZV9iaXYsIGNhbl9lbGltaW5hdGVfYml2X3ApOiBMaWtld2lzZS4KKwkqIGNzZS5jIChmb2xkX3J0eCwgZm9sZF9jYzAsIGNzZV9pbnNuKToKKwkqIG91dHB1dC1tODhrLmMgKG91dHB1dF97Zix9Y29tcGFyZSwgb3V0cHV0X3N0b3JlKToKKwkqIG91dHB1dC1zcGFyYy5jIChzdHJpY3Rfc2luZ2xlX2luc25fb3BfcCwgc2luZ2xlX2luc25fc3JjX3AsIHNhZmVfaW5zbl9zcmNfcCk6CisJKiBjb21iaW5lLmMgKHN1YnN0KToKKwkqIGp1bXAuYyAoanVtcF9iYWNrX3ApOgorCitGcmkgRmViICAzIDE4OjM0OjI3IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3V0cHV0LWkzODYuYyAobm90aWNlX3VwZGF0ZV9jYyk6IElmIGFyaXRoIGluc24gc2V0cyB0aGUgY2MncywKKwlkaXNjYXJkIGFsbCByZW1uYW50cyBvZiBwcmV2aW91cyBjYyB2YWx1ZSBhbmQgZmxhZ3MuCisKKwkqIHNwYXJjLm1kIChhc2hpZnRydCBtZW0gYnkgMjQpOiBGaXggdHlwbyBgYTEnLgorCitUaHUgRmViICAyIDE0OjU1OjQ0IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3V0cHV0LXNwYXJjLmMgKG91dHB1dF9tdWxfaW5zbik6IENsZWFyIHRoZSBDQyBzdGF0dXMuCisKK1dlZCBGZWIgIDEgMjA6MDE6NTQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDEuMzMgcmVsZWFzZWQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IE9uIGVudGVyaW5nIG5ldyBiYXNpYyBibG9jaywKKwlpZiBpdCBkaWRuJ3QgbmVlZCByZWxvYWQgcmVncywgZm9yZ2V0IGFsbCBpbmhlcml0ZWQgY29udGVudHMgb2YgdGhvc2UuCisKKwkqIHRtLWFsbGlhbnQuaCAoTk9USUNFX1VQREFURV9DQyk6IEZsb2F0aW5nIG1vdmVzIGRvbid0IHNldCB0aGUgY2Mncy4KKwlBbHNvIGRlbGV0ZSB0aGUgY2xhdXNlcyBhbmQgdGVzdHMgZm9yIEZQQSByZWdzLiAKKworVHVlIEphbiAzMSAyMTo1MTowNSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5nY2M6IEhhbmRsZSBjb252ZXgtYzEsIGNvbnZleC1jMi4KKwkqIHRtLWNvbnZleDEuaCwgdG0tY29udmV4Mi5oOiBOZXcgZmlsZXMgdGhhdCBpbmNsdWRlIHRtLWNvbnZleC5oLgorCSogdG0tY29udmV4Lmg6IERlZmluZSBzd2l0Y2hlcyAtbW5vYzEsIC1tbm9jMi4KKworCSogY29uZmlnLmdjYzogcmVuYW1lIGBub2ZwJyB0byBgbmZwJywgdG8gbWF0Y2ggdGhlIGZpbGUgbmFtZXMuCisKK01vbiBKYW4gMzAgMjI6MTI6MTUgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X2RlbGF5X2luc24pOiBFeHRyYWN0IHRoZSBvcGVyYW5kcywKKwljYWxsIGFsdGVyX3N1YnJlZywgY29uc3RyYWluX29wZXJhbmRzIGFuZCBOT1RJQ0VfVVBEQVRFX0NDLgorCVNvIGNhbGxlcnMgb3RoZXIgdGhhbiBvdXRwdXRfZWFnZXJfdGhlbl9pbnNuIGRvbid0IGxvc2UuCisJKG91dHB1dF9lYWdlcl90aGVuX2luc24pOiBObyBuZWVkIHRvIGRvIHRoYXQgc3R1ZmYuCisKKwkqIHN5bW91dC5jIChzeW1vdXRfYmxvY2tfc3ltYm9scyk6IEhhbmRsZSAoTUVNIChSRUcpKSBmb3IKKwl2YXJpYWJsZS1zaXplZCBhcnJheXMuCisKKwkqIHRtLWVuY29yZS5oIChBU01fU1BFQyk6IEFsd2F5cyBwYXNzIC1qOyBhdm9pZCBqdW1wLXJhbmdlIGxvc3NhZ2UuCisKK1N1biBKYW4gMjkgMTc6MDY6MjYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBhbGxpYW50Lm1kOiBGaXggcmVmcyB0byBDT05TVF9ET1VCTEVzIHRvIHVzZSBDT05TVF9ET1VCTEVfe0hJR0gsTE9XfS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IChtaW51cyAoemVyb19leHRlbmQgLi4uKSAoY29uc3RfaW50IC4uLikpIG9wdC4KKwlub3cgbGltaXRlZCB0byB3aXRoaW4gdGhlIGNvbnRleHQgb2YgKHNldCAoY2MwKSAuLi4pLgorCitTYXQgSmFuIDI4IDE0OjI2OjA4IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKGZvbGRfY2MwKTogTWlzc2luZyBgJicgZXh0cmFjdGluZyBDT05TVF9ET1VCTEVzLgorCShmb2xkX3J0eCk6IERvbid0IHB1dCBDT05TVF9ET1VCTEVzIHRvZ2V0aGVyIGludG8gYSAoQ09OU1QgKFBMVVMuLi4pKS4KKworCSogb3V0cHV0LWNvbnZleC5jIChnZW5fY21wKTogUmVjb2duaXplIENPTlNUX0RPVUJMRSBhcyBhIGNvbnN0YW50LgorCisJKiB0cmVlLmMgKGJ1aWxkX3JlYWxfZnJvbV9pbnRfY3N0KTogVHlwbyBpbiBSRUFMX0FSSVRITUVUSUMgY2FzZS4KKworCSogTWFrZWZpbGUgKGJvb3RzdHJhcDIpOiBEb24ndCB1c2UgYm9vdHN0cmFwMyBhcyBzdWJyb3V0aW5lLgorCisJKiB2YXJhc20uYyAoZm9yY2VfY29uc3RfbWVtKTogUHV0IHRoZSBDT05TVF9ET1VCTEUgb24gdGhlIGNoYWluCisJaWYgaXRzIE1FTSBpcyBzdG9yZWQgaW4gaXQ7IHNvIGl0IGNhbiBiZSBjbGVhcmVkIGF0IGVuZCBvZiBmdW5jdGlvbi4KKworCSogc3RtdC5jIChlbWl0X2Nhc2Vfbm9kZXMpOiBQdXQgYSBjb21wYXJlIGJlZm9yZSBlYWNoIGNvbmQtanVtcC4KKwlUd28gY29uZC1qdW1wcyBhZnRlciBvbmUgY29uZCBpcyBpbnZhbGlkIGFuZCBtYWtlcyBjc2UgcHJvZHVjZSBnYXJiYWdlLgorCitGcmkgSmFuIDI3IDAxOjA1OjAxIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tc3VuMi5oIChDUFBfU1BFQyk6IERlZmluZSBfX0hBVkVfNjg4ODFfXyBvbmx5IGlmIC1tNjg4ODEuCisKKwkqIGMtZGVjbC5jIChzdGFydF9kZWNsKTogRG9uJ3QgZXhwYW5kX2RlY2wgaWYgREVDTCBhbHJlYWR5IGhhcyBydGwuCisJKGdyb2twYXJtcyk6IElmIGp1c3QgZGVjbGFyaW5nIGZjbiwgaW5jb21wbGV0ZSBwYXJtIHR5cGUgaXMganVzdAorCWEgd2FybmluZywgYW5kIGRvbid0IGRpc2NhcmQgdGhlIHNwZWNpZmllZCB0eXBlLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IEJlIHNtYXJ0ZXIgYWJvdXQgbm90IGNsb2JiZXJpbmcgYXJncworCXdpdGggaW50ZXJtZWRpYXRlIHJlc3VsdHM7IG9uZSBtZW0gY2FuIGNsb2JiZXIgYW5vdGhlciwgYW5kIGEgcmVnCisJY2FuIGNsb2JiZXIgYSBtZW0uCisKKwkqIHRtLWkzODYuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBVc2UgTFBSRUZJWC4gIE1heSBhY3R1YWxseSB3b3JrIG5vdy4KKwkqIHRtLWkzODZnYXMuaDogSW5jbHVkZSB0bS1ic2QzODYuaCwgbm90IHRtLWF0dDM4Ni5oLgorCVRoaXMgbWVhbnMgY2hhbmdpbmcgYXNtIHN5bnRheC4KKwkjdW5kZWYgREJYX05PX1hSRUZTIGFuZCBEQlhfQ09OVElOX0xFTkdUSC4KKworCSogc3BhcmMubWQgKGVhZ2VyIGJyYW5jaCBwZWVwaG9sZXMpOiBEb24ndCBmb3JnZXQgMm5kIGFyZyB0bworCXNhZmVfaW5zbl9zcmNfcC4KKwlEb24ndCBwcmludCB3YXJuaW5ncy4KKwkqIG91dHB1dC1zcGFyYy5jOiAoc3RyaWN0X3NpbmdsZV9pbnNuX29wX3ApOiBSZXR1cm4gMCBmb3IgZmxvYXRpbmcKKwlSRUcgb3IgTUVNLCBzaW5jZSBjb3B5aW5nIHRoYXQgbWF5IHRha2UgMiBpbnNucy4KKwkob3BlcmFuZHNfc2F0aXNmeV9lYWdlcl9icmFuY2hfcGVlcGhvbGUpOiByZXF1aXJlIGRlbGF5IGluc24gdG8KKwliZSBzdHJpY3Rfc2luZ2xlX2luc25fb3BfcCBhcyB3ZWxsIGFzIHNhZmVfaW5zbl9zcmNfcC4KKwkob3BlcmFuZF9jbG9iYmVyZWRfYmVmb3JlX3VzZWRfYWZ0ZXIpOiBEb24ndCBwcmludCB3YXJuaW5ncy4KKworCSogdmFyYXNtLmMgKGRlY29kZV9ydHhfY29uc3QpOiBDbGVhciBlbnRpcmUgc3RydWN0dXJlIGluY2wuIGdhcHMuCisJQXZvaWRzIHNwdXJpb3VzIGhhc2ggbWlzbWF0Y2hlcy4KKwkoZm9yY2VfY29uc3RfbWVtKTogSWYgQ09OU1RfRE9VQkxFLCBzdG9yZSBpdHMgQ09OU1RfRE9VQkxFX01FTSBmaWVsZC4KKwlBbHNvIGxvb2sgaW4gdGhhdCBmaWVsZCByYXRoZXIgdGhhbiBoYXNoaW5nLCB0byBzYXZlIHRpbWUuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IElmIHZhbHVlIGlzIGxpdGVyYWwsIG1hcmsgTk9QX0VYUFIgYXMgc28uCisJKHN0b3JlX2luaXRfdmFsdWUpOiBDaGFuZ2UgZXJyb3IgbXNnLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ2xhc3NpZnkgcHJvdG90eXBlIHZzIG5vbnByb3RvdHlwZQorCW1pc21hdGNoZXMgYmV0dGVyLgorCisJKiB0bS0zYjEuaDogRml4IGNvbW1lbnQuCisKK1dlZCBKYW4gMjUgMTI6NDY6NTAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZSAoY2xlYW5saW5rcyk6IFVzZSAtZi4KKworVHVlIEphbiAyNCAxNzo1NDoxNiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChjYW5vbl9oYXNoKTogRml4IHBhcmVuIGVycm9yIGluIGxhc3QgY2hhbmdlLgorCisJKiB2YXJhc20uYyAoaW1tZWRfcmVhbF9jb25zdF8xKTogTWlzc2luZyBhcmcgdG8gYmNtcC4KKworTW9uIEphbiAyMyAwMjo0Mzo0NSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogQkxLbW9kZSBlbHRzIGZvcmNlIGFycmF5IHRvIGJlIEJMS21vZGUuCisKKwkqIGdlbnBlZXAuYywgZ2Vub3V0cHV0LmMsIGdlbmVtaXQuYzogUHV0IGAjaW5jbHVkZSAicmVhbC5oIicgaW4gb3V0cHV0LgorCisJKiBzdG10LmMgKGV4cGFuZF9leHByX3N0bXQpOiBObyAibm8gZWZmZWN0IiB3YXJuaW5nIGZvciBlcnJvci1tYXJrLgorCisJKiB2YXJhcmdzLmg6IFJlbmFtZSBpbXBsaWNpdCBhcmcgbmFtZSB0byBfX2J1aWx0aW5fdmFfYWxpc3QKKwl3aGljaCB0cmlnZ2VycyBjb2RlIGluIGFzc2lnbl9wYXJtcy4gIERvZXMgdGhpcyByZWFsbHkgbWF0dGVyPworCisJKiBzcGFyYy5tZCAoc25lKTogTmV3IGRlZmluZV9leHBhbmQuCisJKHNlcSByZWNvZ25pemVycyk6IEhhbmRsZSBzbmUgYXMgd2VsbC4KKwkqIG91dHB1dC1zcGFyYy5jICh7c3RyaWN0Xyx9c2luZ2xlX2luc25fc3JjX3ApOgorCVNvbWUgTkVHIGFuZCBNSU5VUyBpbnNucyBhcmUgYWN0dWFsbHkgMiBhc20gaW5zbnMuCisJKHNhZmVfaW5zbl9zcmNfcCk6IE5vIGZsb2F0aW5nIGFyaXRoIGlzIHNhZmU7IHRoZXkgY2FuIHRyYXAuCisJKGVxX29yX25lcSk6IE5ldyBmbiwgZm9yIHNlcS9zbmUgcmVjb2duaXplcnMuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvciwgc2l6ZSBvZiBhcnJheSB0eXBlKToKKwlTdHJpcCBmcm9tIFNJWkUgYW55IE5PUF9FWFBScyB0aGF0IGRvbid0IGNoYW5nZSBhbnl0aGluZy4KKworCSogcmVsb2FkLmMsIHJlY29nLmM6IEluY2x1ZGUgcmVhbC5oIHNvIGNvbnN0cmFpbnQgbWFjcm9zIGNhbiBleGFtaW5lCisJQ09OU1RfRE9VQkxFcy4KKworU3VuIEphbiAyMiAwNDoxMjo1NCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlZmluZSBfX2J1aWx0aW5fc2F2ZXJlZ3MuCisJKiB0cmVlLmg6IGxpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEhhbmRsZSBpdC4KKworCSogdG0tc3BhcmMuaDogRGVmaW5lIFRBUkdFVF9FQUdFUiBhbmQgLW1lYWdlci4KKwkqIHNwYXJjLm1kIChlYWdlciBicmFuY2ggcGVlcGhvbGVzKTogUmVlbmFibGUsIGJ1dCB0ZXN0IFRBUkdFVF9FQUdFUi4KKwlDaGFuZ2UgZmIgaW5zbnMgdG8gdXNlICVGLiAgRGVsZXRlIGAsYScgZnJvbSBzb21lIG9mIHRoZW0uCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBkZWxldGUgVVNFIGFuZCBDTE9CQkVSIGluc25zLgorCisJKiB4bS12bXMuaCAoY29uc3QpOiBEZWZpbmUgaXQgYXMgZW1wdHkuCisKKwkqIG1ha2UtY2NjcC5jb206IE1vdmUgdGhlIHJlbmFtZSBvZiBjZXhwX3RhYi5jLgorCUNvbXBpbGUgY2NjcC5jIHdpdGggbm8gbWFjcm8gZGVmaW5pdGlvbnMuCisKKwkqIGNjY3AuYyAobWFpbik6IFZNUyBjb25kaXRpb25hbCBmb3Igc2V0dGluZyBtYXhfaW5jbHVkZV9sZW4uCisKK1NhdCBKYW4gMjEgMTI6NTM6MDAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB2YXJhcmdzLmggKHZhX3N0YXJ0KTogT24gc3BhcmMsIGNhbGwgX19idWlsdGluX3NhdmVyZWdzLgorCURlbGV0ZSB0aGUgb2xkIGNvbmRpdGlvbmFsIHRoYXQgdXNlZCB2YS1zcGFyYy5oLgorCVJlbmFtZSBtYWNyb3MgYW5kIGxvY2FscyB0byBzdGFydCB3aXRoIHR3byB1bmRlcnNjb3Jlcy4KKwkqIHZhLXNwYXJjLmg6IEZpbGUgZGVsZXRlZC4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBJbml0aWFsaXplIE9USEVSUy4KKworCSogc3RtdC5jIChhc3NpZ25fcGFybXMpOiBPYmV5IGxheW91dF9kZWNsLgorCitGcmkgSmFuIDIwIDAyOjE5OjMyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKGZvbGRfcnR4KTogRm9yIFNZTUJPTF9SRUYgYW5kIExBQkVMX1JFRiwgbWFzayBhZGRyZXNzCisJdG8gMTYgYml0cy4KKworCSogdHJlZS5oIChOVU1fVFJFRV9DT0RFUyk6IE5VTV9UUkVFX0NPREUgcmVuYW1lZC4KKworVGh1IEphbiAxOSAxMzo1MzoyNCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBGb3IgZ2xvYmFsIHJlZyB2YXIsIHJlcG9ydCBlcnJvci4KKwlOb3cgcmV0dXJucyBhbiBpbnQ7IHZhbHVlIG9mIDAgbWVhbnMgY2FsbGVyIHNob3VsZCBmYWlsLgorCUFsbCBjYWxscyAoaW4gdGhpcyBmaWxlKSBjaGFuZ2VkLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IERvbid0IGxldCBhbiBtb3JlIHRoYW4gMSB3b3JkCisJb2YgYW55IGFnZ3JlZ2F0ZSBnbyBpbiBhbnkgMSByZWdpc3Rlci4gIChOZWVkZWQgZm9yIG1hY2hpbmVzIHdob3NlCisJaW50ZWdlciByZWdzIGFyZSA2NCBiaXRzKS4KKworCSogdG0tY29udmV4LmgsIHhtLWNvbnZleC5oLCBjb252ZXgubWQsIG91dHB1dC1jb252ZXguYzogbmV3IGZpbGVzLgorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVzZSBleHRlbmRxaWRpMiwgZXRjLiBmb3IgY29udmVydGluZworCXNtYWxsIGludHMgdG8gZG91YmxlIGludHMuICBVc2UgemVyb19leHRlbmRzaWRpMiByYXRoZXIgdGhhbgorCWNsZWFyaW5nIHRoZSBoaWdoIGhhbGYuCisKK1dlZCBKYW4gMTggMDE6MjA6NTIgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IElmIGdsb2JhbCBgcmVnaXN0ZXInIGRlY2wgaXMgaW52YWxpZCwKKwltYWtlIG9yZGluYXJ5IG5vbi1yZWdpc3RlciBydGwuCisKKwkqIG91dHB1dC1zcGFyYy5jIChvcGVyYW5kX2Nsb2JiZXJlZF9iZWZvcmVfdXNlZF9hZnRlcik6IG5ldyBmbi4KKwkocmVnX2Nsb2JiZXJlZF9wLCBzYWZlX2luc25fc3JjX3ApOiBOZXcgZm5zLgorCShzaW5nbGVfaW5zbl9zcmNfcCk6IFRyZWF0IGNvbnN0YW50cyBhbGwgYXMgb2ssIGV2ZW4gdGhvdWdoIG5vdAorCWFsd2F5cyBsaXRlcmFsbHkgc28uICBBbHNvIGFjY2VwdCBzb21lIFNJR05fRVhURU5EcyBhbmQgWkVST19FWFRFTkRzLgorCShzdHJpY3Rfc2luZ2xlX2luc25fc3JjX3ApOiBOZXcgZm4sIGxpa2UgYWJvdmUgYnV0IGlzIHN0cmljdAorCWFib3V0IGNvbnN0YW50cyBhbmQgY29uc3RhbnQgbWVtb3J5IGFkZHJlc3Nlcy4KKwkocmVsb3ApOiBOZXcgZm4uCisJKG91dHB1dF9tb3ZlX2RvdWJsZSk6IERvbid0IG1ha2UgYSBNRU0sIGFuZCBkb24ndCB1c2UgJW0uCisJKG91dHB1dF9kZWxheWVkX2JyYW5jaCk6IE5ldyBuYW1lIGZvciBvdXRwdXRfZGVsYXlfaW5zbi4KKwlOb3cgaGFuZGxlIG5vbi1zbWFsbCBjb25zdGFudCBvcGVyYW5kcy4KKwlBdm9pZCBkdXBsaWNhdGUgbG9hZHMgb2YgZzEgZm9yIGNvbnN0YW50IGFkZHJlc3Nlcy4KKwlVc2UgcmVjb2dfb3BlcmFuZCBkaXJlY3RseSBmb3Igb3V0cHV0IG9mIHRoZSBkZWxheSBpbnNuLgorCShvdXRwdXRfZGVsYXlfaW5zbik6IE5vdyBhIGNvbXBsZXRlbHkgbmV3IGZuLgorCShvdXRwdXRfZWFnZXJfdGhlbl9pbnNuLCBuZXh0X3JlYWxfaW5zbl9ub19sYWJlbHMpOiBOZXcgZm5zLgorCShvcGVyYW5kc19zYXRpc2Z5X2VhZ2VyX2JyYW5jaF9wZWVwaG9sZSk6IE5ldyBmbi4KKworCSogc3BhcmMubWQ6IE5ldyBwZWVwaG9sZXMgZm9yIHRlc3RpbmcgYSByZWNlbnRseSB1c2VkIG9wZXJhbmQuCisJTmV3IHBlZXBob2xlcyBmb3IgZGVsYXllZCBicmFuY2hlcywgaW5jbC4gY29uZGl0aW9uYWwgb25lcy4KKwkqKiBTb21lIG9mIHRoZW0gY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZXkgc2VlbSBub3QgdG8gd29yay4KKwkoYW5kY2MgcmVjb2duaXplcik6IEZpeCB0eXBvLCBtaXNzaW5nICUuCisJKGJndCk6IENoYW5nZSBiZ3QgdG8gYmcgaW4gb3V0cHV0LgorCShyZXZlcnNlZCBqdW1wcyk6IFJlcGxhY2Ugd2l0aCBvbmUgcGF0dGVybiB1c2luZyBtYXRjaF9vcGVyYW5kLgorCUl0IHVzZXMgJUYgdG8gb3V0cHV0IHRoZSBjb25kaXRpb24uCisJKG1vdnNpKTogRm9yIHJvdW5kLXZhbHVlZCBpbW1lZCBjb25zdCwgdXNlIGp1c3QgYSBzZXRoaS4KKwlGb3Igb3RoZXIgaW1tZWQsIHVzZSBleHBsaWNpdCBzZXRoaSBhbmQgb3IuCisJKG1vdmhpLCBtb3ZxaSk6IHVzZSBgbW92ZScgZm9yIHJlZyBzb3VyY2Ugb3Igc21hbGwgaW50IHNvdXJjZS4KKwlGb3Igb3RoZXIgaW1tZWQsIHVzZSBleHBsaWNpdCBzZXRoaSBhbmQgb3IuCisJKG1vdnNpLCBldGMuKToJSGFuZGxlIGFsbCBjb25zdGFudCBhZGRyZXNzZXMgbGlrZSBTWU1CT0xfUkVGcy4KKwkobW92c2YpOiBEZWxldGUgbmV2ZXItdXNlZCBkdXBsaWNhdGUgY29kZSBmb3IgY29uc3RhbnQgYWRkcmVzc2VzLgorCShhZGRzaTMsIHN1YnNpMywgY3NlJ2QgbXVsdGlwbHkpOiBVc2Ugc2V0aGkgYW5kIG9yLCByYXRoZXIgdGhhbiBzZXQuCisJKGFuZHNpMywgaW9yc2kzLCB4b3JzaTMpOiBMaWtld2lzZS4KKwkoanVtcCk6IE1ha2UgYW4gYW5udWxsZWQgYnJhbmNoLgorCisJKiB0bS1zcGFyYy5oIChQUk9NT1RFX1BST1RPVFlQRVMpOiBEZWZpbmUgdGhpcy4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogTm93IGFjY2VwdCBhbGwgY29uc3RhbnQgYWRkcmVzc2VzOworCWFsc28gY2xlYW5lZCB1cC4KKwkoTk9USUNFX1VQREFURV9DQyk6IERvbid0IGNoYW5nZSB0aGUgRzEgc3RhdHVzIHdoZW4gc3RvcmluZyBpbiBtZW1vcnkuCisJQXNzdW1lIGFsbCBQQVJBTExFTCBpbnNucyBhcmUgcGVlcGhvbGVzLgorCShQUklOVF9PUEVSQU5EKTogTmV3IGNvZGVzIEMgYW5kIE4gZm9yIG91dHB1dHRpbmcgY29uZGl0aW9ucywKKwllaXRoZXIgZm9yd2FyZCBvciByZXZlcnNlZC4gIEFsc28gRiBmb3IgcmV2ZXJzZWQgZmxvYXRpbmcuCisKKwkqIGp1bXAuYyAoZGVsZXRlX2Zvcl9wZWVwaG9sZSk6IE5ldyBmdW5jdGlvbiB0byBkZWxldGUgcmFuZ2Ugb2YgaW5zbnMuCisJKiBnZW5wZWVwLmMgKGdlbl9wZWVwaG9sZSk6IE91dHB1dCBjb2RlIHRvIHVzZSB0aGlzLgorCisJKiBNYWtlZmlsZSAoaW5zdGFsbCk6IEZpeCB0eXBvLCBoYWQgJCR7bmFtZX0gZm9yICQke2ZpbGV9LgorCitUdWUgSmFuIDE3IDAwOjAwOjEyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAoYXNobHNpMyk6IFVzZSBhZGRsIG9yIGxlYWwgZm9yIHNwZWNpYWwgY2FzZXMuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IE1ha2UgYSBub24tZ2xvYmFsIFZBUl9ERUNMIHB1YmxpYworCWlmIGl0IGlzIGV4dGVybmFsLgorCisJKiBtYXNtMzg2LmM6IENsZWFuIHVwIGZvcm1hdHRpbmcuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IFR5cG8gc2ltcGxpZnlpbmcgeHwwIG9yIHheMAorCXdoZW4gdGhlIDAgY29tZXMgc2Vjb25kLgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogRm9yIGhhbGZ3b3JkcywgdmVyaWZ5IHRoYXQKKwl0aGUgZmllbGQgZml0cyBpbiBhbiAqYWxpZ25lZCogaGFsZndvcmQuCisJKGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKTogbGlrZXdpc2UuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9zcGxpdF9iaXRfZmllbGQpOiBOZXcgYXJnIGFsaWduLCBwYXNzZWQgaW4gZnJvbQorCXN0b3JlX2ZpeGVkX2JpdF9maWVsZCBhbmQgcGFzc2VkIGJhY2sgdG8gaXQuCisJKGV4dHJhY3Rfc3BsaXRfYml0X2ZpZWxkKTogbGlrZXdpc2UuCisKKwkqIGV4cHIuYzogUmVpbnNlcnQgY2hhbmdlcyBmcm9tIEphbiAyLCBteXN0ZXJpb3VzbHkgZGVsZXRlZCBKYW4gMy4KKwlBbHNvIGNoYW5nZXMgZnJvbSBEZWMgMjMsIERlYyAyOCBhbmQgRGVjIDI5LgorCisJKiB0bS1pMzg2Lmg6IExpa2V3aXNlIGZvciBjaGFuZ2VzIGZyb20gRGVjIDMwLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogSWYgZmllbGQncyB0eXBlIGlzIGVycm9yLW1hcmssCisJcmV0dXJuIGFuIGVycm9yLW1hcmsuCisKK01vbiBKYW4gMTYgMTQ6MTY6NTQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnZW5wZWVwLmMgKG1haW4pOiBPdXRwdXQgY29kZSB0byBleGl0IGVhcmx5IGlmIGluc24gaXMgZm9sbG93ZWQKKwlieSBhIGJhcnJpZXIuCisJKGdlbl9wZWVwaG9sZSk6IFJlamVjdCBiYXJyaWVycyBqdXN0IGxpa2UgbGFiZWxzLgorCisJKiBzdG10LmMgKGRvX2p1bXBfaWZfZXF1YWwpOiBOZXcgYXJnIFVOU0lHTkVEUCwgZm9yIGVtaXRfY21wX2luc24uCisJQ2FsbGVyIGNoYW5nZWQuICBOb3cgc3RhdGljLgorCisJKiBmaW5hbC5jIChmaW5hbCk6IFNldCBJTlNOX0RFTEVURURfUCBpbiBpbnNucyB3aGVuIG91dHB1dC4KKworCSogZmluYWwuYyAoZmluYWwpOiBSZS1zZXQgQk9EWSBpZiBwZWVwaG9sZSBkb2VzIGFueXRoaW5nLgorCisJKiBjLWRlY2wuYyAoZ3Jva3Bhcm1zKTogSWdub3JlIGFueXRoaW5nIGJ1dCBQQVJNX0RFQ0xzIGluIHRoZSBsaXN0LgorCShzdG9yZV9wYXJtX2RlY2xzKTogSWYgd2UgaGFkIGEgcHJvdG90eXBlLCBzZXBhcmF0ZSBvdXQgYW55dGhpbmcgb3RoZXIKKwl0aGFuIGEgUEFSTV9ERUNMIGRlY2xhcmVkIGluIGl0LCBhbmQgcHVzaGRlY2wgdGhvc2UgYXQgdGhlIGVuZCwKKwlhZnRlciBERUNMX0FSR1VNRU5UUyBpcyBzZXQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogRG8gc3RhY2sgYWRqdXN0cyBhZnRlciBjb21wdXRpbmcgaW5kZXguCisKKwkqIGV4cHIuYyAoc3RvcmVfb25lX2FyZyk6IEhhbmRsZSBwYWRkaW5nIGZvciBjYXNlIG9mIEJMS21vZGUKKwlmb3Igd2hpY2ggc3BhY2Ugd2FzIHByZWFsbG9jYXRlZC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogV2hlbiBjb3B5aW5nIGFzbSBpbnNuLAorCXByZXNlcnZlIHNoYXJpbmcgb2YgdGhlIGlucHV0LW9wZXJhbmQgdmVjdG9ycy4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IENsZWFyIHtvcmlnLGNvcHl9X2FzbV9vcGVyYW5kc192ZWN0b3IKKwl0byBtYWtlIHRoYXQgbWVjaGFuaXNtIHdvcmsuCisJKHNhdmVfZm9yX2lubGluZSwgY29weV9mb3JfaW5saW5lKTogTGlrZXdpc2UuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlamVjdCBgKycgaW4gY29uc3RyYWludHMuCisJRXZlcnkgb3V0cHV0IGNvbnN0cmFpbnQgcmVxdWlyZXMgYD0nOyBpbnB1dHMgcmVqZWN0IGl0LgorCisJKiBzdG10LmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBBcmcgdG8gZml4dXBfZ290b3Mgd2FzIG1pc3NpbmcuCisKK1N1biBKYW4gMTUgMDA6Mjg6MjMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMsIGdjYy5jIChtYWluKTogSGFuZGxlIFNJR1BJUEUuCisJKHBpcGVfY2xvc2VkKTogTmV3IGZuOyByZXBvcnQgc3VpdGFibGUgZmF0YWwgZXJyb3IuCisKKwkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSk6IEluaXRpYWxpemUgbW92ZWRfb25jZS4KKworCSogZ2NjLmMgKGRvX3NwZWMpOiBEb24ndCBjYWxsIGBleGVjdXRlJyBpZiB2YWx1ZSAhPSAwLgorCURlbGV0ZSByZWR1bmRhbnQgc2Vjb25kIGNhbGwgdG8gZG9fc3BlY18xLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTWFrZSBkZWNsYXJlZC1idXQtbm90LWRlZmluZWQgd2FybmluZ3MKKwlvbmx5IGlmIC1XdW51c2VkLgorCisJKiBzdG10LmMgKGVtaXRfY2FzZV9ub2Rlcyk6IEZpeCB0eXBvIHNldHRpbmcgZ2VuX2JsZV9wYXQuCisKKwkqIHRtLXNwYXJjLmggKHtVLH1NT0RTSTNfTElCQ0FMTCk6IE5hbWUgd2FzIHdyb25nLgorCisJKiBnY2MuYyAoZW52X2V4ZWNfcHJlZml4IHJlZnMpOiBEb24ndCB0cnkgdG8gb3BlbiB2aWEgaXQgaWYgaXQncyBudWxsLgorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X3N0b3JlLCBvdXRwdXRfbG9hZF97Zml4ZWQsZmxvYXRpbmd9KToKKwlGaXhlZCBjb25mdXNpb25zIGJldHdlZW4gdGhlIG1lbSByZWYgYW5kIGl0cyBhZGRyZXNzLgorCisJKiBjc2UuYyAoY2Fub25faGFzaCk6IGdsb2JhbF9yZWdzIGhhcyBlbnRyaWVzIG9ubHkgZm9yIGhhcmQgcmVncy4KKwkqIGZsb3cuYyAoaW5zbl9kZWFkX3AsIG1hcmtfc2V0X3AsIG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IE1vcmUgc2ltcGxpZmljYXRpb25zIGZvciBNVUxULCBJT1IsIEFORCwgWE9SCisJRElWIGFuZCBzaGlmdHMgd2l0aCBvbmUgYXJnIDAgb3IgMS4KKworU2F0IEphbiAxNCAxMTo0MToxMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IElmIHBlZGFudGljLCBjaGVjayBmb3IgcmVnZGVjbCBhcnJheXMuCisKKwkqIGZpeGluY2x1ZGVzOiBNYWtlIGFsbCBzdWJkaXJzIGluIGFkdmFuY2UsIHNvIG5vIG5lZWQgZm9yIGBkaXJuYW1lJy4KKworCSogZ2VucGVlcC5jIChnZW5fcGVlcGhvbGUpOiBEZWxldGUgY29kZSB0byBpbmNyZW1lbnQgTEFCRUxfTlVTRVM7CisJaW5zdGVhZCwgY2xlYXIgSlVNUF9MQUJFTCBmb3IgYW55IGp1bXBzIGJlaW5nIGRlbGV0ZWQuCisJTm8gbmVlZCB0byB0ZXN0IElOU04xIGZvciBiZWluZyBhIGxhYmVsLCBzaW5jZSBub3QgY2FsbGVkIHRoZW4uCisJW0lmIGFueSBvZiB0aGUgbWF0Y2hlZCBpbnNucyBpcyBhIEpVTVBfSU5TTiwgc2V0IHdhbnRfanVtcCwKKwlhbmQgaW4gdGhhdCBjYXNlIG1ha2UgdGhlIG1hdGNoZWQgcGVlcGhvbGUgYSBKVU1QX0lOU04gaXRzZWxmLl0KKwlUaGF0J3MgaW4gYW4gI2lmIDAgbm93OyBpdCdzIGdvb2QgaW4ganVtcCwgYnV0IG5vdCBpbiBmaW5hbC4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRG9uJ3QgZG8gcGVlcGhvbGVzIGhlcmUuCisJKiBmaW5hbC5jIChmaW5hbCk6IERvIHRoZW0gaGVyZS4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSW4gb3B0aW1pemluZyBgaWYgKGZvbykgYmFyOyBlbHNlIGJyZWFrOycsCisJZG9uJ3QgdHJ5IHRvIGludmVydCBhbnl0aGluZyBidXQgYSBzdGFuZGFyZC1sb29raW5nIGNvbmRpdGlvbmFsIGp1bXAuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERvIHBlZXBob2xlcyBvbiBBTEwgQlVUIHRoZSBmaXJzdCBwYXNzLgorCisJKiBnY2MuYyAoZW52X2V4ZWNfcHJlZml4KTogTmV3IHZhciB1c2VkIGxpa2UgdXNlcl9leGVjX3ByZWZpeAorCWJ1dCBzZXQgZnJvbSBlbnZ2YXIgR0NDX0VYRUNfUFJFRklYLgorCitGcmkgSmFuIDEzIDEzOjIxOjU5IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2VucGVlcC5jIChnZW5fcGVlcGhvbGUpOiBUZXN0IElOU04xIGZvciBhIGxhYmVsIGF0IHRoZSB2ZXJ5IHN0YXJ0LAorCXRoZW4gdGVzdCBmb2xsb3dpbmcgaW5zbnMgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcC4KKworCSogc3BhcmMubWQgKGNhbGwgcmVjb2duaXplcnMpOiBkbyBDQ19TVEFUVVNfSU5JVCwgZm9yICVnMS4KKworVGh1IEphbiAxMiAwMjoxMzo0OSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogUmVjb2duaXplIG1vcmUgZXJyb3IgY2FzZXMgZm9yIHJlZyB2YXJzOgorCUJMS21vZGUsIG9yIGluaXRpYWxpemVyIGdpdmVuLgorCURpc3Rpbmd1aXNuIG1pc3NpbmcgYXNtIGZyb20gaW52YWxpZCBuYW1lLgorCisJKiBleHByLmMgKGV4cGFuZF9jYWxsKTogTmV2ZXIgcmV0dXJuIDA7IHJldHVybiBjb25zdDBfcnR4IGluc3RlYWQuCisJVGhpcyBtYWtlcyBleHBhbmRfZXhwciBtb3JlIHVuaWZvcm0uCisKKwkqIGMtZGVjbC5jIChncm9rcGFybXMpOiBGb3IgcHRyIHRvIGluY29tcGxldGUgdHlwZSwganVzdCB3YXJuOworCWRvbid0IGNoYW5nZSB0aGUgcGFybSdzIHR5cGUuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IFNldCBSRVRWQUxfUkhTIHNvIGFzIHRvIHJlY29nbml6ZQorCXRhaWwtcmVjdXJzaXZlIGZjbiByZXR1cm5pbmcgdm9pZC4KKwlVbmNvbmRpdGlvbmFsbHkgdGVzdCB2YWx1ZSBvZiBleHBhbmRfZXhwciBmb3IgYmVpbmcgYSBSRUcuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEb24ndCBwcm9jZXNzIGluc25zIHRoYXQgaGF2ZQorCW5vIGNvbnN0cmFpbnQgYWx0ZXJuYXRpdmVzLiAgTm8gbW9yZSBuZWVkIGZvciBoYXZlX2NvbnN0cmFpbnRzLgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBOZXcgbG9jYWwgdmFyIG5hbHRlcm5hdGl2ZXMuCisJRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBpbnNuIGlmIG5hbHRlcm5hdGl2ZXMgaXMgMC4KKworV2VkIEphbiAxMSAwMToyNzo0OCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIEltcGxlbWVudCBnbG9iYWwgcmVnaXN0ZXIgZGVjbHMuCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogSGFuZGxlIGdsb2JhbCByZWdpc3RlciB2YXJzLgorCShtYWtlX2Z1bmN0aW9uX3J0bCk6IFNldCBmdW5jdGlvbl9kZWZpbmVkOiBhZnRlciAxc3QgZnVuY3Rpb24gZGZuLgorCShhc3NlbWJsZV92YXJpYWJsZSk6IElnbm9yZSBnbG9iYWwgcmVnaXN0ZXIgdmFycy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgcmVqZWN0IGdsb2JhbCByZWdpc3RlciBkZWNscy4KKwkoYnVpbHRpbl9mdW5jdGlvbik6IFVzZSBtYWtlX2RlY2xfcnRsLCBub3QgbWFrZV9mdW5jdGlvbl9ydGwsCisJdG8gYXZvaWQgc2V0dGluZyBmdW5jdGlvbl9kZWZpbmVkLgorCisJKiByZWdjbGFzcy5jIChpbml0X3JlZ19jbGFzc3ssXzF9KTogSW5pdCBhbmQgcHJvY2VzcyBnbG9iYWxfcmVncy4KKwlUaGV5IGFyZSBmaXhlZCwgYW5kIGNhbGwtY2xvYmJlcmVkLgorCisJKiBmbG93LmMgKGluc25fZGVhZF9wKTogU3RvcmluZyBvbmUgb2YgZ2xvYmFsX3JlZ3MgaXMgbmV2ZXIgZGVhZC4KKwkobWFya191c2VkX3JlZ3MsIG1hcmtfc2V0XzEpOiBBIGdsb2JhbCByZWcgaXMgbmV2ZXIgZGVhZC4KKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBDb25zaWRlciBnbG9iYWwgcmVncyB2b2xhdGlsZS4KKworCisJKiBleHByLmMgKGRvX2p1bXApOiBLbm93IGhvdyB0byBpbnZlcnQganVtcHMgd2hpY2ggYXJlIHNlcXVlbmNlcy4KKworCSogZGJ4b3V0LmMsIHN5bW91dC5jLCBmaW5hbC5jOiBPbiBVU0csIHVzZSBvdXIgb3duIHN0YWIuaC4KKworCSogdG0taTM4Nmdhcy5oOiBOZXcgZmlsZSBmb3IgR0FTIG9uIHN5c1YgKHdpdGggREJYIGRlYnVnZ2luZyBpbmZvKS4KKworCSogbTY4ay5tZCAoYmZjaGcgYW5kIGJmaW5zIHBhdHRlcm5zKTogTWFrZSAjIGFsdGVybmF0aXZlcyB1bmlmb3JtLgorCSogYWxsaWFudC5tZDogTGlrZXdpc2U7IGFsc28gaW4gbW92ZGYgcGF0dGVybnMuCisKKwkqIGdlbm91dHB1dC5jIChvdXRwdXRfZXBpbG9ndWUpOiBTcHVyaW91cyBgYnJlYWsnIGRpc2FibGVkCisJZXJyb3IgY2hlY2sgZm9yIG1pc21hdGNoZWQgIyBvZiBhbHRlcm5hdGl2ZXMuCisJKG91dHB1dF9lcGlsb2d1ZSwgc2Nhbl9vcGVyYW5kcyk6IEVycm9ycyBpbiBpbnB1dCBhcmUgbm90IGZhdGFsLgorCisJKiBmbG93LmMgKHJlZ25vX3VuaW5pdGlhbGl6ZWQpOiBBdm9pZCBjcmFzaCBpZiBubyBiYXNpYyBibG9ja3MuCisKKwkqIHNwYXJjLm1kIChtb3ZlIGluc25zKTogRGVsZXRlIHNwZWNpYWwgcGF0dGVybnMgdGhhdCBoYW5kbGVkCisJc3ltYm9saWMgY29uc3RhbnQgYWRkcmVzc2VzLiAgVGhlIG1haW4gbW92ZSBwYXR0ZXJucyBub3cgZG8gdGhpcy4KKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfc3RvcmUsIG91dHB1dF9sb2FkX3tmaXhlZCxmbG9hdGluZ30pOgorCVN1YnJvdXRpbmVzIHRvIGRvIHRoZSB3b3JrIGZvciB0aGlzOyBoYXMgdGhlIGNvZGUgZnJvbSB0aG9zZQorCXNwZWNpYWwgcGF0dGVybnMuICBBbHNvIGZpeGVkIGJ1Z3MgaW4gdGVzdGluZyBhZ2FpbnN0IGNjX3N0YXR1cy5tZGVwLgorCisJKiBvdXRwdXQtc3BhcmMuYyAob3V0cHV0X2RlbGF5X2luc24pOiBDbGVhciB0aGUgQ0Mgc3RhdHVzLgorCVRoaXMgaXMgbmVjZXNzYXJ5IGZvciAlZzEgaW4gdGhlIGNhc2Ugb2YgYSBjYWxsIGluc24uCisKKwkqIHRtLWkzODYuaCAoUkVHX0NMQVNTX0NPTlRFTlRTKTogSU5ERVhfUkVHUyBpcyBub3cgYWxsIGJ1dCBFU1AuCisJKFJFR05PX1JFR19DTEFTUyk6IENvcnJlc3BvbmRpbmcgY2hhbmdlLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBFbGltaW5hdGUgYHgnIGxldHRlciBzaW5jZSBub3QgdXNlZC4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBOZXcgYXJnIEFMSUdOLCB1c2VkIGZvciBCTEttb2RlLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJUGFzcyBhbGlnbm1lbnQgKGFzIHJ0eCkgYXMgNHRoIGFyZyB0byBjbXBzdHIgZ2VuIGZ1bmN0aW9ucy4KKwlVc2UgY21wc3RyaGkgaWYgYXZhaWxhYmxlLgorCSogZXhwci5jIChjb21wYXJlKTogT25seSB0aGlzIGNhbGwgcGFzc2VzIGEgbm9uemVybyBBTElHTi4KKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbiwgZW1pdF9ibG9ja19tb3ZlKTogUGFzcyBhbGlnbm1lbnQgKGFzIHJ0eCkKKwlhcyA0dGggYXJnIHRvIG1vdnN0ciBnZW4gZnVuY3Rpb25zLgorCitUdWUgSmFuIDEwIDIzOjQzOjA1IDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBVc2UgQkxLbW9kZSwgaWYgYSBzdHJ1Y3QgaXNuJ3QKKwlhbGlnbmVkIHdlbGwgZW5vdWdoIGZvciBhIHNjYWxhciBtb2RlLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRm9yIHN0YXRpYyBDT05TVFJVQ1RPUiwgZW5zdXJlIG1lbW9yeQorCWFkZHJlc3MgaXMgbWFkZSB2YWxpZC4KKworCSogZ2VucGVlcC5jIChtYXRjaF9ydHgpOiBGb3IgTUFUQ0hfT1BFUkFUT1IsIHNldCBtYXhfb3Bubywgbl9vcGVyYW5kcy4KKworTW9uIEphbiAgOSAxNzowNzo1NiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnQpOiBTcGxpdCBzdHJpbmdzIGV2ZXJ5IDIwMDAgY2hhcnMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogVGVzdCBia3dkcywgaGFuZGxpbmcgY29uc3RhbnQgc3dpdGNoIGFyZy4KKworRnJpIEphbiAgNiAwOToxMToyMCAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG91dHB1dC1zcGFyYy5jIChvdXRwdXRfZGVsYXlfaW5zbik6IEFkZCBwYXJlbnMgdG8gZmlyc3QgaWYgdGVzdC4KKwkob3V0cHV0X21vdmVfZG91YmxlKTogVHVybiBhZGRyIGZvciBgc2V0aGknIGludG8gTUVNIGZvciAlbS4KKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IG1vdmUgdGVzdCBmb3IgRVJST1JfTUFSSy4KKworCSogYy1wYXJzZS55ICh1bmFyeV9leHByKTogQWxsb3cgY2FzdF9leHByIGFzIGFyZyBvZiB1bmFyeSBvcC4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IERvbid0IGFib3J0IGlmIEZVTkNUSU9OX0RFQ0wgbGFja3MgcnRsOworCWFzc2VtYmxlX3ZhcmlhYmxlIGlzIGNhbGxlZCBhZnRlciB0aGlzLgorCisJKiBjLXBhcnNlLnkgKHByaW1hcnkgLT4gaWRlbnRpZmllcik6IFNlcGFyYXRlIGNhc2UgZm9yIHVuZGVjbGFyZWQKKwlpZGVudGlmaWVyIG91dHNpZGUgb2YgZnVuY3Rpb25zOyBhdm9pZHMgY29uZnVzaW5nIGVycm9yIG1zZ3MuCisKK1RodSBKYW4gIDUgMDE6MjQ6NDcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZSAoaW5zdGFsbCk6IElnbm9yZSBlcnJvcnMgaW4gYWxsIGBpZicgY29tbWFuZHMuCisJQ3JlYXRlICQobGliZGlyKSBpZiBuZWMuCisKKwkqIE1ha2VmaWxlIChpbnNuLSouW2NoXSk6IFB1dCBpbiBlbXB0eSBjb21tYW5kcy4gIE1heSBoZWxwIFVsdHJpeCBNYWtlLgorCisJKiBzdG10LmMgKGVtaXRfY2FzZV9ub2Rlcyk6IE5ldyBhcmcgVU5TSUdORURQIHNheXMgZG8gdW5zaWduZWQganVtcHMuCisJQXJnIElOREVYIGlzIGFuIHJ0eCwgbm90IGEgdHJlZS4KKwkoZXhwYW5kX2VuZF9jYXNlKTogUGFzcyB0aGF0IGFyZy4KKwkobm9kZV9oYXNfe2xvdyxoaWdofV9ib3VuZCk6IGNoZWNrIGZvciBvdmVyZmxvdywgYXZvaWQgY29uZnVzaW9uLgorCitXZWQgSmFuICA0IDAyOjI0OjIxIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3BhcmMubWQgKG1vdmRpLCBtb3ZkZik6IFVzZSBgJicgY29uc3RyYWludCB3aGVuIGxvYWRpbmcgcmVnIGZyb207CisJb3RoZXJ3aXNlIGNhbiBsb3NlIG9uIChzZXQgKHJlZyBYKSAobWVtIChwbHVzIChyZWcgWCkgKHJlZyBYKzEpKSkpLgorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogRm9yIG1lbW9yeSBzY2FsYXIgcGFydGlhbGx5IGdvaW5nIGluIHJlZ3MsCisJY29weSBlYWNoIHdvcmQgdG8gcmVnIGJlZm9yZSBwdXNoaW5nLiAgQXZvaWRzIG1lbW9yeS10by1tZW1vcnkgbW92ZS4KKwlNYWtlIHRoZSBkaXNwbGFjZWQgYWRkcmVzcyB2YWxpZC4KKwlBbHNvIGRlbGV0ZSB1bmZpbmlzaGVkIFNUQUNLX09GRlNFVCB2YXJpYWJsZS4KKworCSogYy1wYXJzZS55IChjaGVja19uZXdsaW5lKTogUmVhZCBqdXN0IG9uZSAjLWRpcmVjdGl2ZSBhbmQgcmV0dXJuLgorCVRoaXMgcHJldmVudHMgbG9zc2FnZSB3aGVuIHRvcGxldi5jIGNhbGxzIGl0IHRvIGdldCB0aGUgbWFpbiBpbnB1dCBmaWxlCisJbmFtZSwgYW5kIGl0IGdldHMgYSBmb2xsb3dpbmcgI2lkZW50IGFzIHdlbGwuCisKKwkqIGMtZGVjbC5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBTZXQgd2Fybl9jYXN0X3F1YWwgZm9yIC1XY2FzdC1xdWFsLgorCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogSXNzdWUgc29tZSB3YXJuaW5ncyBpZiBzZXQuCisKKwkqIHRtLTNiMS5oIChBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiBNaXNzaW5nIGA7Jy4KKworVHVlIEphbiAgMyAxODowNzozMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBEbyBmb3JjZV9vcGVyYW5kIG9uIGVhY2ggb3BlcmFuZAorCWlmIGl0IGlzbid0IGEgUkVHLCBNRU0gb3IgY29uc3RhbnQuCisJRG8gdGhpcywgb3IgbW9kZSBjb252ZXJzaW9ucywgZWFybGllciwgYmVmb3JlIGxvYWRpbmcgYW55IGhhcmQgcmVncy4KKworCSogbTY4ay5tZCAoYWRkc2kzKSBbU0dTXTogUHV0IGEgemVybyBkaXNwbGFjZW1lbnQgaW4gdGhlIGBsZWEnLgorCisJKiBjLXR5cGVjay5jIChkZWZhdWx0X2NvbnZlcnNpb24pOiBEb24ndCBsb3NlIGBjb25zdCcgb3IgYHZvbGF0aWxlJworCXdoZW4gY29udmVydGluZyBhcnJheSB0eXBlIHRvIHBvaW50ZXIuCisKK01vbiBKYW4gIDIgMDE6MTg6MDEgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkLCBzdG9yZV9maXhlZF9iaXRfZmllbGQpOiBOZXcgYXJnLAorCWFsaWdubWVudCBpbiBieXRlcyB0aGUgc3RydWN0dXJlIGlzIGtub3duIHRvIGhhdmUuCisJKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IEhhbmRsZSB3b3JraW5nIGluIGhhbGZ3b3JkcywKKwlpbiBjYXNlIHRoZSBwb2ludGVyIGlzbid0IGtub3duIHRvIGhhdmUgZnVsbHdvcmQgYWxpZ25tZW50LgorCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkLCBleHRyYWN0X2ZpeGVkX2JpdF9maWVsZCk6IGxpa2V3aXNlLgorCShleHRyYWN0X2JpdF9maWVsZCk6IGZpeCB1bnNpZ25lZHAgYXJnIHRvIGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkLgorCSogZXhwci5jIChzdG9yZV9maWVsZCk6IE5ldyBhcmcsIHBhc3NlZCB0byB7c3RvcmUsZXh0cmFjdH1fYml0X2ZpZWxkCisJKGV4cGFuZF9hc3NpZ25tZW50LCBzdG9yZV9jb25zdHJ1Y3Rvcik6IFBhc3MgdGhhdCBhcmcuCisJKGV4cGFuZF9leHByKTogUGFzcyBuZXcgYXJnIHRvIGV4dHJhY3RfYml0X2ZpZWxkLgorCisJKiBtNjhrLm1kIChjYXNlc2lfMiByZWNvZ25pemVyKTogT2Zmc2V0IGFsd2F5cyA2IGZvciAzYjEuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBTdHJpcCBmcm9tIHJocyBuby1vcCBOT1BfRVhQUnMKKwlwdXQgb24gYnkgYnVpbGRfY19jYXN0ICh0byBtYWtlIHRoZSByZXN1bHQgbm90IGFuIGx2YWx1ZSkuCisJKGJ1aWxkX21vZGlmeV9leHByLCBidWlsZF9jb21wb3VuZF9leHByKTogbGlrZXdpc2UuCisJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBsaWtld2lzZS4KKwkoYWN0dWFscGFyYW1ldGVybGlzdCwgYnVpbGRfZnVuY3Rpb25fY2FsbCk6IGxpa2V3aXNlLgorCShkZWZhdWx0X2NvbnZlcnNpb24sIHRydXRodmFsdWVfY29udmVyc2lvbik6IGxpa2V3aXNlLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBJZiByZWcgaGFzIG1vdmVkIG91dCBvZiBvbmUgbG9vcCwKKwlkaXZpZGUgYHNhdmluZ3MnIGJ5IDIuCisKK1N1biBKYW4gIDEgMDM6MDA6MDcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBEaXN0cmlidXRlIHRoZSBjb252ZXJzaW9uCisJaW50byB0aGUgYXJtcyBvZiBhIENPTkRfRVhQUi4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogRG9uJ3QgZm9sZCBhIE1JTlVTIHdpdGggVk9JRG1vZGUKKwlpbnRvIGEgc3ltYm9saWMgY29uc3RhbnQtLWl0J3MgaW5jb3JyZWN0LgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBJZiBTUkMgaXMgYSBzdWJyZWcgd2l0aCBrbm93biB2YWx1ZSwgc2ltcGxpZnkgaXQuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IEFsbG93IGEgcmVmIHRvIGEgcGFydCBvZgorCU1FTSBwYXJtIHdob3NlIGFjdHVhbCBwYXJtIGlzIGEgcmVnLCBwcm92aWRlZCBpdCByZWZzCisJdGhlIGxvdyBwYXJ0IG9mIHRoZSBNRU0uCisJKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IERvbid0IGlubGluZSBmdW5jdGlvbnMgd2hpY2ggaGF2ZQorCWFnZ3JlZ2F0ZSBwYXJhbWV0ZXJzIGFuZCB0YWtlIHRoZWlyIGFkZHJlc3Nlcy4gIFRoaXMgY291bGQgcHJvZHVjZQorCXJlZnMgdG8gbm9uLWxvdy1wYXJ0cywgd2hpY2ggY29weV9ydHhfYW5kX3N1YnN0aXR1dGUgY2FuJ3QgaGFuZGxlLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IElmIGxocyBpcyBDT05EX0VYUFIsCisJbWFrZSBhIENPTVBPVU5EX0VYUFIgdG8gZW5zdXJlIHRoZSByaHMgaXMgY29tcHV0ZWQgYmVmb3JlIHRoZSBicmFuY2guCisKKwkqIEltcGxlbWVudCAtcGlwZS4KKwkqIGdjYy5jIChkb19zcGVjXzEpOiBgfCcgaXMgbm93IGEgc3BlY2lhbCBkZWxpbWl0ZXIKKwl3aGljaCBnb2VzIGluIHRoZSBhcmdidWYuCisJV2hlbiBhIG5ld2xpbmUgaXMgcHJlY2VkZWQgYnkgYSBgfCcsIGRlbGV0ZSBpdCBpZiBubyAtcGlwZS4KKwlPdGhlcndpc2UsIGRvbid0IGV4ZWN1dGUgeWV0LCBhbmQga2VlcCBzY2FubmluZy4KKwkoZG9fc3BlYyk6IEF0IGVuZCwgaWYgd2UgaGF2ZSBzdHVmZiB3aXRoIG5vIG5ld2xpbmUsIGV4ZWN1dGUgaXQuCisJKGhhbmRsZV9icmFjZXMpOiBJbXBsZW1lbnQgJXt8Zm9vOi4uLn0uCisJKGV4ZWN1dGUpOiBJZiBhcmdidWYgY29udGFpbnMgc29tZSBgfCdzLCBydW4gc2V2ZXJhbCBwcm9jZXNzZXMKKwlhbmQgcGlwZSB0aGVtIHRvZ2V0aGVyLgorCShwZXhlY3V0ZSk6IG5ldyBzdWJyb3V0aW5lIHRvIG1ha2Ugb25lIG9mIHRoZSBwcm9jZXNzZXMuCisJKGZpbmRfZXhlY19maWxlKTogbmV3IGZuIHRvIHNlYXJjaCBmb3IgcHJvZ3JhbSB0byBleGVjdXRlLgorCShyZWNvcmRfdGVtcF9maWxlKTogbmV3IGFyZyBGQUlMX09OTFkuCisJKHN0b3JlX2FyZyk6IDJuZCBhcmcgPT0gMyBtZWFucyBkZWxldGUgZmlsZSBvbiBmYWlsdXJlLgorCVRoaXMgaXMgdXNlZCBmb3Igb3V0cHV0IGZpbGVzLgorCShkZWxldGVfdGVtcF9maWxlcyk6IGRlbGV0ZSBjZXJ0YWluIGZpbGVzIG9ubHkgaWYgZmFpbC4KKworCSogY2NjcC5jIChpbmNsdWRlX2RlZmF1bHRzKTogL3Vzci9pbmNsdWRlIGJlZm9yZSAvdXNyL2xvY2FsL2luY2x1ZGUuCisKKwkqIHJlY29nLmMgKGFzbV9ub3BlcmFuZHMpOiAxLW9mZiBpbiBsb29wIGNoZWNraW5nIENMT0JCRVJTCisJd2hlbiBubyBvdXRwdXQgb3BlcmFuZHMgYW5kIFBBUkFMTEVMLgorCisJKiBleHBtZWQuYyAobmVnYXRlX3J0eCk6IFNpZ24tZXh0ZW5kIHRoZSBoaWdoIGJpdHMgcmF0aGVyIHRoYW4gY2xlYXIuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IGZvbGQgbmVnYXRpb24gb2YgcmVhbCB2YWx1ZXMuCisJKGZvbGRfY2MwKTogZm9sZCBjb21wYXJpc29ucyBvbiByZWFsIHZhbHVlcy4KKworCSogTWFrZWZpbGUgKGluc3RhbGwpOiBVc2UgJChJTlNUQUxMKSBmb3IgZ2NjLjEgYW5kIGZpbGVzIGluIFVTRVJfSC4KKworCSogSGFuZGxlIGZsb2F0aW5nLXBvaW50IHByb2JsZW1zIGZvciBjcm9zcy1jb21waWxhdGlvbi4KKworCSogcmVhbC5oIChDT05TVF9ET1VCTEVfTE9XLCBldGMuKTogbmV3IG1hY3JvcyB0byBhY2Nlc3MgQ09OU1RfRE9VQkxFLgorCSogdmFyYXNtLmMgKGltbWVkX2RvdWJsZV9jb25zdCwgZGVjb2RlX3J0eF9jb25zdCk6IFVzZSB0aGVzZS4KKwkoe2ZvcmNlLGNsZWFyfV9jb25zdF9kb3VibGVfbWVtKTogTGlrZXdpc2UuCisJKiBvdXRwdXQtKi5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2UgdGhlc2UuCisJKiBvdXRwdXQtbTY4ay5jIChzdGFuZGFyZF97Njg4ODEsc3VuX2ZwYX1fY29uc3RhbnRfcCk6IExpa2V3aXNlLgorCSogdG0tKi5oIChQUklOVF9PUEVSQU5EKTogVXNlIHRoZXNlLgorCSogb3V0cHV0LWkzODYuYyAocHJpbnRfb3BlcmFuZCk6IFVzZSB0aGVzZS4KKwkqIGZpbmFsLmMgKG91dHB1dF9hZGRyX2NvbnN0KTogTGlrZXdpc2UuCisJKiBlbWl0LXJ0bC5jIChnZW5fcnR4KTogRGVsZXRlIHNwZWNpYWwgY29kZSBmb3IgQ09OU1RfRE9VQkxFLgorCisJKiByZWFsLmggKHVuaW9uIHJlYWxfZXh0cmFjdCk6IFBvcnRhYmxlIHR5cGUgZm9yIHN0b3JpbmcgcmVhbCBhcyBpbnRzLgorCSogdmFyYXNtLmMgKGltbWVkX2RvdWJsZV9jb25zdCwgZGVjb2RlX3J0eF9jb25zdCk6IFVzZSB0aGVzZS4KKworCSogdmFyYXNtLmMgKGltbWVkX3JlYWxfY29uc3RfMSwgZGVjb2RlX3J0eF9jb25zdCk6CisJRG9uJ3QgYXNzdW1lIFJFQUxfVkFMVUVfVFlQRSBpcyAyIGludHMgbG9uZy4KKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogTGlrZXdpc2UuCisKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9UWVBFKTogRGVmaW5lIGFzIGBkb3VibGUnIGlmIG5vdCBkZWZpbmVkLgorCShSRUFMX0lTX05PVF9ET1VCTEUpOiBEZWZpbmUgdGhpcyBpZiBkZWZhdWx0IFJFQUxfVkFMVUVfVFlQRSBub3QgdXNlZC4KKwkoUkVBTF9WQUxVRVNfRVFVQUwsIFJFQUxfVkFMVUVTX0xFU1MpOiBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCisJKFJFQUxfVkFMVUVfTERFWFAsIFJFQUxfVkFMVUVfQVRPRik6IExpa2V3aXNlLgorCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9yZWFsX2NzdCk6IFVzZSBSRUFMX1ZBTFVFX1RZUEUgZm9yIHRoZSB2YWx1ZS4KKworCSogcnRsLmMgKGluaXRfcnRsKTogSW5jcmVhc2UgbGVuZ3RoIG9mIENPTlNUX0RPVUJMRSBpZiBSRUFMX1ZBTFVFX1RZUEUKKwluZWVkcyBtb3JlIHNwYWNlLiAgQ2hhbmdlIHRoZSBydHhfZm9ybWF0IGVsZW1lbnQgdG8gbWF0Y2guCisJKiB2YXJhc20uYyAoaW1tZWRfcmVhbF9jb25zdF8xKTogMXN0IGFyZyBub3cgaGFzIFJFQUxfVkFMVUVfVFlQRS4KKwkoZm9yY2VfY29uc3RfbWVtKTogQXNzdW1lIGEgQ09OU1RfRE9VQkxFIGNvbnRhaW5zIFJFQUxfVkFMVUVfVFlQRS4KKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogTGlrZXdpc2UuCisJQW5kIHVzZSBSRUFMX1ZBTFVFX0FUT0YgdG8gZ2V0IGEgZmxvYXRpbmcgemVyby4KKwkqIG9wdGFicy5jIChleHBhbmRfZmxvYXQpOiBVc2UgUkVBTF9WQUxVRV9UWVBFLCBSRUFMX1ZBTFVFX0xERVhQLgorCSogYy1wYXJzZS55ICh5eWxleCk6IExpa2V3aXNlLCBhbmQgdXNlIFJFQUxfVkFMVUVfQVRPRi4KKwkqIGZvbGQtY29uc3QuYyAoc3BsaXRfdHJlZSk6IERvbid0IGFjY2VwdCBSRUFMX0NTVHMuCisJKGNvbWJpbmUsIGZvbGRfY29udmVydCwgZm9sZCk6IFVzZSBSRUFMX0FSSVRITUVUSUMgaWYgZGVmaW5lZDsKKwllbHNlIGRvbid0IGZvbGQgcmVhbHMgaWYgdGhleSBhcmUgbm90IGRvdWJsZXMuCisJKiB0cmVlLmMgKGJ1aWxkX3JlYWxfZnJvbV9pbnRfY3N0KTogTGlrZXdpc2UuCisJKiBwcmludC10cmVlLmMgKGR1bXApIFtSRUFMX0lTX05PVF9ET1VCTEVdOiBvdXRwdXQgZmxvYXQgdmFsdWUKKwlpbiBoZXgsIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IHRvIGRvIGl0IHJpZ2h0LgorCitTYXQgRGVjIDMxIDE0OjE1OjEzIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogSGFuZGxlIG5ldyBtYWNyb3Mge1UsfU1VTFNJM19MSUJDQUxMLAorCURJVlNJM19MSUJDQUxMLCBNT0RTSTNfTElCQ0FMTC4KKwkqIHRtLXNwYXJjLmg6IERlZmluZSB7LFV9e01VTCxESVYsTU9EfVNJMyB0byBjYWxsIFN1bidzIGxpYnJhcnkgZGlyZWN0LgorCisJKiB0bS1zdW4zLW5mcC5oLCB0bS1zdW4zLWZwYS5oOiBOZXcgZmlsZXMuCisKK0ZyaSBEZWMgMzAgMDA6MTQ6MzYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBDZXJ0YWluIGVudnZhcnMgc3BlY2lmeSBhIGZpbGUgdG8gd3JpdGUgZGVwcyBpbmZvIHRvLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogV2FybiBhYm91dCB1bmRlZmluZWQgZm5zIGRlY2xhcmVkIHN0YXRpYy4KKworCSogbTY4ay5tZCAoY2FzZXNpXzIgcmVjb2duaXplcikgW1NHU10gUlRYX0lOVEVHUkFURURfUCB0ZXN0IGJhY2t3YXJkcy4KKwkqIHRtLTNiMS5oIChBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiBMaWtld2lzZS4gIEFsc28gbWlzc2luZyBgXCcuCisKKwkqIHJlbG9hZDEuYyAoY291bnRfb2NjdXJyZW5jZXMpOiBOZXcgZnVuY3Rpb24uCisJKGNob29zZV9yZWxvYWRfdGFyZ2V0cyk6IERvbid0IGRlbGV0ZSBhIHJlbG9hZCBpZiB0aGUgc2FtZSByZWcKKwlpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgY3VycmVudCBpbnNuLgorCShkZWxldGVfb3V0cHV0X3JlbG9hZCk6IGNvZGUgc3BsaXQgb3V0IGZyb20gY2hvb3NlX3JlbG9hZF90YXJnZXRzLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBBbHdheXMgcHV0IG9uIHNvbWUgb3BlcmF0b3IsCisJc28gdGhlIGNhc3QgaXMgbmV2ZXIgYW4gbHZhbHVlIGZvciBzdHJpY3QgQU5TSS4KKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IERvbid0IGRlcGVuZCBvbgorCWRpc3RpbmN0aW9uIGJldHdlZW4gTk9QX0VYUFIgYW5kIENPTlZFUlRfRVhQUi4KKworCSogYy1jb252ZXJ0LmM6IEZucyByZW9yZGVyZWQ7IG5ldyBjb21tZW50cy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogSWYgc2ltcGxpZnlpbmcgYSBOT1BfRVhQUiB3aXRoaW4gYSBCSVRfQU5EX0VYUFIsCisJcmV0dXJuIGEgTk9QX0VYUFIuCisJTmV3IHZhciBUWVBFIGhvbGRzIHR5cGUgb2YgZXhwci4KKworCSogYy1wYXJzZS55IChleHByX25vX2NvbW1hcyk6IFNwbGl0IG9mZiBjYXN0X2V4cHIgYW5kIHVuYXJ5X2V4cHIsCisJdG8gcmVqZWN0IGBzaXplb2YgKGludCkgZm9vJy4KKworCSogdG9wbGV2LmMgKG1haW4pOiBUcmVhdCBwbGFpbiBgLScgYXMgaW5wdXQgZmlsZW5hbWUuCisKKwkqIGZpbmFsLmMgKGZpbmFsKTogSWYgYW4gaW5zbidzIG91dHB1dCByb3V0aW5lIHJldHVybnMgMCwKKwlpdCBtZWFucyB0byBvdXRwdXQgdGhlIGRlbGV0ZWQgY29tcGFyZSBpbnNuIGltbWVkaWF0ZWx5IHByZWNlZGluZy4KKworCSogbTY4ay5tZCAoYnJhbmNoIGluc25zKTogVXNlIDAgYXMgM3JkIGFyZyBmb3IgT1VUUFVUX0pVTVAKKwlyYXRoZXIgdGhhbiBleHBsaWNpdGx5IGNsZWFyaW5nIHRoZSBvdmVyZmxvdyBmbGFnLgorCisJKiB0bS1pMzg2LmggKE9VVFBVVF9KVU1QKTogUmVhbGx5IHVzZSBOT19PVjsgZG9uJ3QgYWJvcnQuCisJKiBpMzg2Lm1kIChicmFuY2ggaW5zbnMpOiBQdXQgcmVhbCBkYXRhIChzb21ldGltZXMgMCkgaW4gM3JkIGFyZworCW9mIE9VVFBVVF9KVU1QLiAgMCBtZWFucyBwcmVjZWRpbmcgdGVzdCBtYXkgbm90IGJlIGRlbGV0ZWQuCisJKGxlYSBwYXR0ZXJuKTogQ2xlYXIgdGhlIGNjJ3MuCisJKiBvdXRwdXQtaTM4Ni5jIChub3RpY2VfdXBkYXRlX2NjKTogdmFyaW91cyBhcml0aCBpbnNucyBzZXQgdGhlIGNjJ3MuCisKK1RodSBEZWMgMjkgMTM6MjI6MDEgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsX2luaXQpOiBEbyBub3RoaW5nIGZvciBzdGF0aWMgZGVjbHMuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc3ssXzF9KTogUmV0dXJuIDEgaWZmIGVudGlyZSBhcmcKKwl3YXMgcmVsb2FkZWQgYXMgYSB3aG9sZSwgZWxzZSAwLgorCShmaW5kX3JlbG9hZCk6IElmIGZpbmRfcmVsb2Fkc19hZGRyZXNzIHJldHVybnMgMSwgZG9uJ3QgbGV0IHRoYXQgTUVNCisJc2F0aXNmeSBhIGA+JyBvciBgPCcgY29uc3RyYWludC4KKworCSogbTY4ay5tZCAoY21wbWIpOiBEZWxldGUgc3BlY2lhbCBwYXR0ZXJuLCBtYWtlIGNtcHFpIGhhbmRsZSBpdC4KKwlUaGUgc3BlY2lhbCBwYXR0ZXJuIGNvdWxkbid0IGhhbmRsZSByZWxvYWRpbmcgdGhlIGluY3JlbWVudGVkIHJlZ2lzdGVyLgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBUZXN0IEJZVEVTX0JJR19FTkRJQU4sCisJbm90IEJJVFMuLi4KKworCSogY29tYmluZS5jIChzdWJzdCk6IENvbnNpZGVyIGJpZy1lbmRpYW4gY29ycmVjdGlvbgorCXdoZW4gc2ltcGxpZnlpbmcgKHN1YnJlZyAobWVtIC4uLikgLi4uKS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvbid0IGNyYXNoIGlmIG1hdGNoaW5nIG9wZXJhbmRzIGluIGBhc20nCisJYXJlIGJvdGggcmVhZCBvciBib3RoIHdyaXRlLgorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogQWRkcmVzcyBmb3IgbW92c3RyIG11c3QgYmUgWElOTkVSLCBub3QgWC4KKworCSogdG9wbGV2LmMgKG1haW4pOiBUeXBvIHBhcnNpbmcgYC1mbm8uLi4nLgorCitXZWQgRGVjIDI4IDEzOjA3OjIxIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBgdm9sYXRpbGUnIGZucyBuZWVkIGp1bXBfb3B0aW1pemUKKwlmb3Igd2FybmluZ3MsIGFzIGlmIC1XcmV0dXJuLXR5cGUuCisJKiBjLXR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBXYXJuIGFib3V0IGByZXR1cm4nIGluIGEgYHZvbGF0aWxlJyBmbi4KKwkqIGMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBXYXJuIGlmIGB2b2xhdGlsZScgZm4gY2FuIGRyb3AgdGhydSBlbmQuCisKKwkqIGNzZS5jIChjYW5vbl9yZWcpOiBIYW5kbGUgbnVsbHMgYXMgc3ViZXhwcmVzc2lvbnMuCisJKGZvbGRfcnR4LCBjYW5vbl9oYXNoLCBtZW50aW9uX3JlZ3MsIGV4cF9lcXVpdl9wKTogTGlrZXdpc2UuCisJKiBsb29wLmMgKGludmFyaWFudF9wLCByZXBsYWNlX3JlZ3MsIHJlcGxhY2VfY2FsbF9hZGRyZXNzLCBtYXlfdHJhcF9wLAorCXtiYXNpYyxnZW5lcmFsfV9pbmR1Y3Rpb25fdmFyKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NhbGwpOiBIYW5kbGUgYGNvbnN0JyBmdW5jdGlvbnM6CisJTG9jYWwgSVNfQ09OU1QgaXMgMSBpZiBmdW5jdGlvbiBpcyBjb25zdC4KKwlBdHRhY2ggUkVHX1JFVFZBTCBhbmQgUkVHX0xJQkNBTEwgbm90ZXMgYXJvdW5kIHRoZSBjYWxsLgorCUNvcHkgZm4gYWRkcmVzcyB0byByZWdpc3RlciBvdXRzaWRlIG9mIHRob3NlIG5vdGVzLgorCUxpa2V3aXNlIHByZWNvbXB1dGUgYWxsIHBhcm1zIG91dHNpZGUgdGhlbS4KKworCSogZXhwci5jIChleHBhbmRfY2FsbCk6IElmIGZuIGlzIHZvbGF0aWxlLCBlbWl0IGJhcnJpZXIgYWZ0ZXIgdGhlIGNhbGwuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFsbG93IGZ1bmN0aW9uIGRlY2xhcmVkIGNvbnN0IG9yIHZvbGF0aWxlLgorCitTYXQgRGVjIDI0IDE4OjQwOjEyIDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IElmIFNUUlVDVF9WQUxVRV9JTkNPTUlORworCW9yIFNUUlVDVF9WQUxVRQlpcyBkZWZpbmVkLCBjYW4ndCBpbmxpbmUgZnVuY3Rpb25zIHJldHVybmluZyBCTEttb2RlLgorCitGcmkgRGVjIDIzIDEzOjI2OjI2IDE5ODggIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IENvbXB1dGUgYXJyYXkncyBzaXplCisJd2l0aCBpbnRfc2l6ZV9pbl9ieXRlcy4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogSWYgc2hhcmVkIGRhdGEsIGdvIHRvIGRhdGEgc2VjdGlvbgorCWJlZm9yZSBvdXRwdXR0aW5nIGFuIHVuaW5pdGlhbGl6ZWQgc3ltYm9sLgorCisJKiB0bS1zZXF1ZW50LmggKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IE1pc3NpbmcgYmFja3NsYXNoLgorCShTSEFSRURfU0VDVElPTl9BU01fT1ApOiBNYWNybyBkZWZpbmVkLgorCSogdG0tc2VxMzg2LmggKFNIQVJFRF9TRUNUSU9OX0FTTV9PUCk6IE1hY3JvIGRlZmluZWQuCisKKwkqIGMtdHlwZWNrLmMgKGNfZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFdhcm4gaWYgb3V0cHV0IG9wIGlzIGBjb25zdCcuCisKKwkqIEZpeCBwcm9ibGVtIHdoZXJlIGEgc3RtdCBleHByIGluIGFuIGluaXRpYWxpemF0aW9uCisJcmVmZXJzIHRvIHRoZSB2YXJpYWJsZSBpdCBpcyBpbml0aWFsaXppbmcuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsX2luaXQpOiBOZXcgZm4gc3BsaXQgb3V0IGZyb20gYGV4cGFuZF9kZWNsJy4KKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IENhbGwgdGhhdC4KKwlEb24ndCBjYWxsIGV4cGFuZF9kZWNsIGlmIGFscmVhZHkgZG9uZS4KKwkoc3RhcnRfZGVjbCk6IENhbGwgZXhwYW5kX2RlY2wgaWYgdHlwZSBpcyBjb21wbGV0ZSBhbHJlYWR5LgorCisJKiBNYWtlZmlsZSAoaW5zdGFsbCk6IFR5cG8gaW4gcmFubGliIGNvbW1hbmQuCisKK1RodSBEZWMgMjIgMTU6NTc6MTIgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKHRyZWVfaWRlbnRpZmllcik6IE5ldyBmaWVsZC4KKwkoSURFTlRJRklFUl9FUlJPUl9MT0NVUyk6IEFjY2Vzc29yIGZvciBpdC4KKwkqIGMtcGFyc2UueSAocHJpbWFyeSA9PiBJREVOVElGSUVSKToKKwlVbmRlY2xhcmVkIHZhcmlhYmxlIGdldHMgb25lIGVyciBtc2cgcGVyIGZ1bmN0aW9uIGl0IGFwcGVhcnMgaW4uCisKKwkqIG5zMzJrLm1kIChhbmRzaTMpOiBEZWxldGUgZXh0cmEgYnJhY2UuCisKKwkqIGFsbGlhbnQubWQsIHhtLWFsbGlhbnQuaCwgdG0tYWxsaWFudC5oLCBvdXRwdXQtYWxsaWFudC5jOiBOZXcgZmlsZXMuCisKKwkqIGNvbWJpbmUuYyAoU1VCU1QsIFNVQlNUX0lOVCk6IFN0b3JlIG5ldyBmaWVsZCBgaXNfaW50Jy4KKwkoY29weV9zdWJzdGl0dXRpb25zKTogRG9uJ3QgY29weSBhbiBpbnQgYXMgYW4gcnR4LgorCisJKiBNYWtlZmlsZSAoSU5TVEFMTCk6IEluc3RhbGwgZ2NjLjEgcHJvcGVybHkuCisKKwkqIHRtLW5zMzJrLmggKEZVTkNUSU9OX1BST0xPR1VFLCBBU01fT1VUUFVUX0FMSUdOX0NPREUpOgorCUFkZCBtaXNzaW5nIGJhY2tzbGFzaGVzLgorCitTZWUgZmlsZSBDaGFuZ2VMb2cuMC4KZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuMTAgYi9nY2MvQ2hhbmdlTG9nLjEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTY2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvQ2hhbmdlTG9nLjEwCkBAIC0wLDAgKzEsMTAxODUgQEAKK1N1biBNYXIgMzEgMDU6MTA6MTAgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wpOiBEb24ndCBtYWtlIGEgYml0ZmllbGQgYW4gaW50ZWdyYWwgbW9kZQorCWlmIHRoZSBtb2RlIG9mIHRoZSBmaWVsZCB0eXBlIGlzIG5vdCBNT0RFX0lOVC4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBDQUxMX0lOU05zIGRvbid0IGFmZmVjdCBmaXhlZCByZWdzLgorCisJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IENBTExfSU5TTnMgZG9uJ3Qga2lsbCBmaXhlZCByZWdzLgorCitTYXQgTWFyIDMwIDAzOjMyOjQ4IDE5OTYgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBub2lzeS50bWcuc2U+CisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kLCBjYXNlIFRSVU5DX0RJVl9FWFBSKTogTW92ZSBzb21lIGNvZGUKKwl0byBhdm9pZCBzaGlmdGluZyBieSBhIHRvbyBsYXJnZSBjb3VudC4KKworRnJpIE1hciAyOSAxNTo0NTo1MSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoaVszNDU2XTg2LSotc3Vub3M1Kik6IERlbGV0ZSwgY29uZmlnLnN1YiBjb252ZXJ0cworCXN1bm9zNSB0byBzb2xhcmlzMi4KKwkoc3BhcmMtKi1zdW5vczUqKTogTGlrZXdpc2UuCisJKHNwYXJjNjQtKi17c29sYXJpczIqLHN1bm9zNSp9KTogRGVsZXRlLiAgU3RpY2sgd2l0aCBzcGFyYy0qLXNvbGFyaXMyKi4KKworCSogc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBTYXZlL3Jlc3RvcmUgJWcyIGFyb3VuZCBtY291bnQgY2FsbC4KKworRnJpIE1hciAyOSAxNDoyMDozMSAxOTk2ICBTdGFuIENveCAgPGNveHNAZGctcnRwLmRnLmNvbT4KKworCSogaTM4Ni5jIChub3RpY2VfdXBkYXRlX2NjKTogQ2xlYXIgY2Nfc3RhdHVzIGlmIHJlZiBtb2RpZmllZCBNRU0uCisKK0ZyaSBNYXIgMjkgMDk6Mzc6NTIgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBSZW1vdmUgY3VycmVudF9jYWxsX2lzX2luZGlyZWN0IG5vbnNlbnNlLgorCUFkZCBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIElOSVRfQ1VNVUxBVElWRV9BUkdTLgorCShlbWl0X2xpYnJhcnlfY2FsbCk6IExpa2V3aXNlLgorCShlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6IExpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IExpa2V3aXNlLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogTGlrZXdpc2UuCisJKiBjb25maWcvcGEvcGEuaCAoaHBwYV9hcmdzKTogTmV3IGZpZWxkICJpbmRpcmVjdCIuCisJKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogSW5pdGlhbGl6ZSAiaW5kaXJlY3QiIGZpZWxkLgorCShGVU5DVElPTl9BUkcpOiBDaGVjayAiaW5kaXJlY3QiIGZpZWxkLCByYXRoZXIgdGhhbgorCSJjdXJyZW50X2NhbGxfaXNfaW5kaXJlY3QiLgorCSogYTI5ay5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6TmV3IGFyZywgSU5ESVJFQ1QuCisJKiBhbHBoYS5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogYXJtLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBjbGlwcGVyLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBjb252ZXguaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIGRzcDE2eHguaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIGVseHNpLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBmeDgwLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBnbWljcm8uaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIGg4MzAwLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBpMzcwL212cy5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogaTM4Ni5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogaTg2MC5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogaTk2MC5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogbTY4ay5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogbTY4ay9tb3QzMzAwLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBtODhrLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBtaXBzLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBuczMyay5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogcGRwMTEuaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIHB5ci5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogcm9tcC5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogcnM2MDAwLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBzaC5oIChJTklUX0NVTVVMQVRJVkVfQVJHUyk6IExpa2V3aXNlLgorCSogc3BhcmMuaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIHNwdXIuaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIHRhaG9lLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiB2YXguaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBMaWtld2lzZS4KKwkqIHdlMzJrLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogTGlrZXdpc2UuCisJKiBtaXBzLmMgKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogQWRkIGV4dHJhIGFyZyB0bworCUlOSVRfQ1VNVUxBVElWRV9BUkdTIGNhbGwuCisKK1RodSBNYXIgMjggMTg6NDU6NDkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogYWxwaGEuYyAoc3VtbWFyaXplX2luc24pOiBGaXggdGhyZWUgIm9mZi1ieS1vbmUiIGJ1Z3MgaW4gbG9vcCBib3VuZHMuCisKK1RodSBNYXIgMjggMTY6NTA6MTAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBnaW5jbHVkZS9pbmwtc3BhcmMuaDogRGVsZXRlZC4KKworVGh1IE1hciAyOCAxMjowNzozMSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBnaW5jbHVkZS92YS1oODMwMC5oICh2YV9hcmcpOiBEb24ndCBhc3N1bWUgc2l6ZW9mIChpbnQpID09IDQuCisKKwkqIHBhLmMgKGhwcGFfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRG9uJ3QgbG9zZSBmb3IKKwkocGx1cyAocGx1cyAobXVsdCAoQSkgKHNoYWRkX2NvbnN0KSkgKEIpKSAoQykpIGlmCisJQiArIEMgaXNuJ3QgYSB2YWxpZCBhZGRyZXNzIGZvciBpbmRleGluZy4KKwkoYmFzZXJlZ19vcGVyYW5kKTogT25seSBhY2NlcHQgYmFzZSByZWdpc3RlcnMgYWZ0ZXIKKwljc2UgaGFzIGNvbXBsZXRlZC4gIERvbid0IGFjY2VwdCB0aGUgZnJhbWUgcG9pbnRlciBpZgorCWl0J3MgbGlrZWx5IHRvIGJlIGVsaW1pbmF0ZWQuCisJKiBwYS5tZCAodW5zY2FsZWQgaW5kZXhpbmcgcGF0dGVybnMpOiBBZGQgdmFyaWFudHMgd2l0aAorCWJhc2VyZWcgYW5kIGluZGV4IHJlZ2lzdGVyIHJldmVyc2VkLgorCShISW1vZGUgYW5kIFFJbW9kZSBsb2Fkcyk6IEFkZCB6ZXJvIGV4dGVuZGVkIHZhcmlhbnRzLgorCitXZWQgTWFyIDI3IDA3OjQ1OjI3IDE5OTYgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGV4cG1lZC5jIChuZWdhdGVfcnR4KTogRml4IHR5cG8gaW4gcHJldmlvdXMgY2hhbmdlLgorCitUdWUgTWFyIDI2IDEzOjUwOjQzIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJbiBjb252ZXJ0X3RvX21vZGUgY2FsbCwgdXNlIHdvcmRfbW9kZQorCW5vdCBTSW1vZGUuCisKK1R1ZSBNYXIgMjYgMTM6NDQ6MzQgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlOiBEZWxldGUgdW5uZWNlc3Nhcnkgc3BlY2lhbCBoYW5kbGluZyBvZiAtLXdpdGgtY3B1LgorCitUdWUgTWFyIDI2IDEwOjQxOjU3IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBXaGVuIGRvaW5nIGEgcGFydGlhbCBwdXNoLCBlbWl0CisJYSBDTE9CQkVSIHNvIHRoYXQgZmxvdyBkb2Vzbid0IHRoaW5rIHRoZSBlbnRpcmUgcmVnaXN0ZXIKKwlpcyBsaXZlLgorCitUdWUgTWFyIDI2IDEwOjAwOjUyIDE5OTYgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGFscGhhLmMgKHN1bW1hcml6ZV9pbnNuLCBkZWZhdWx0IGNhc2UpOiBQcm9wZXJseSB1c2UgZm9ybWF0X3B0ci4KKworVHVlIE1hciAyNiAwOTo1MTowOSAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIG02OGsuaCAob3V0cHV0X21vdmVfc2ltb2RlX2NvbnN0KTogTmV3IGV4dGVybiBkZWNsYXJhdGlvbi4KKwkqIG02OGsuYyAob3V0cHV0X21vdmVfc2ltb2RlX2NvbnN0KTogTmV3IGZ1bmN0aW9uLgorCShzaW5nbGVtb3ZlX3N0cmluZyk6IENhbGwgaXQuCisJKiBtNjhrLm1kIChmdWxsd29yZCBtb3ZlKTogTGlrZXdpc2UuCisKK1R1ZSBNYXIgMjYgMDU6NDM6MDYgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG5vaXN5LnRtZy5zZT4KKworCSogdmF4Lm1kIChpbnN2IG1hdGNoZXIpOiBDYWxsIENDX1NUQVRVU19JTklULgorCSogdmF4LmggKE5PVElDRV9VUERBVEVfQ0MpOiBIYW5kbGUgWkVST19FWFRSQUNUIGRlc3RpbmF0aW9uLgorCitNb24gTWFyIDI1IDE5OjE4OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogRG9uJ3Qgc2V0IHVwIGNvbnRleHRfZGlzcGxheQorCXVubGVzcyBjdXJyZW50X2Z1bmN0aW9uX25lZWRzX2NvbnRleHQuCisKK01vbiBNYXIgMjUgMTg6NDg6MTggMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIEJJVF9JT1JfRVhQUik6IFJlY29nbml6ZSByb3RhdGVzCisJd2l0aCB2YXJpYWJsZSBjb3VudC4KKworTW9uIE1hciAyNSAxODowNToyOCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChsaWJnY2MxLXRlc3QpOiBVbmRvIEZlYiAxMiBjaGFuZ2UuCisKK01vbiBNYXIgMjUgMDg6MDk6NTkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb2JqYy90aHJlYWQtc2luZ2xlLmMgKG9iamNfbXV0ZXhfdW5sb2NrKTogUHJvcGVybHkgZGVjbGFyZSB0aHJlYWRfaWQuCisKK01vbiBNYXIgMjUgMDg6MDI6NTAgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogY29uZmlndXJlIChtNjhrLW1vdG9yb2xhLXN5c3YqKTogRml4ZWQgaW5kZW50YXRpb24uCisKK1N1biBNYXIgMjQgMDg6MTY6NDIgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKG5lZ2F0ZV9ydHgpOiBEb24ndCB0cnkgdG8gbmVnYXRlIGEgY29uc3RhbnQgb3Vyc2VsZjsKKwlpbnN0ZWFkIGNhbGwgc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uLgorCitTdW4gTWFyIDI0IDA3OjI5OjA2IDE5OTYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogSW5zdGVhZCBvZiBoYXJkY29kaW5nIG5vbi1lbXB0eQorCXN3aXRjaGVzX25lZWRfc3BhY2VzIHRvIHR1cm4gb24gIm8iIGFuZCAiTCIsIG1ha2UgdGhlIHN0cmluZworCWNvbnRhaW4gdGhlIHN3aXRjaGVzIHRoYXQgbmVlZCB0aGUgc3BhY2VzLgorCSogbTY4ay9jY3VyLUdBUy5oIChTV0lUQ0hFU19ORUVEX1NQQUNFUyk6IENoYW5nZSBkZWZpbml0aW9uCisJY29ycmVzcG9uZGluZ2x5LgorCitTYXQgTWFyIDIzIDE4OjM0OjQ0IDE5OTYgIEhhcnJ5IERvbGFuICA8ZG9sYW5Ac3NkLmludGVsLmNvbT4KKworCSogaTg2MC9wYXJhZ29uLmggKExJQl9TUEVDKTogQWx3YXlzIG91dHB1dCAtbG1hY2guCisKK1NhdCBNYXIgMjMgMTg6MjU6MzkgMTk5NiAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogYy10eXBlY2suYyAoc2V0X2luaXRfaW5kZXgpOiBDaGVjayBmb3IgdXNlIG91dHNpZGUgYW4gYXJyYXkKKwlpbml0aWFsaXplci4KKworICAgICAgICAqIGRlZmF1bHRzLmggKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IERlbGV0ZS4KKyAgICAgICAgKiBwZHAxMS5oIChBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBEb24ndCBkZWZpbmUuCisKK1NhdCBNYXIgMjMgMTU6NTU6MzUgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KKworCSogY29tYmluZS5jIChtYWtlX2V4dHJhY3Rpb24pOiBJbiBCSVRTX0JJR19FTkRJQU4gY29ycmVjdGlvbiBvZiBQT1MsCisJbmVlZCB0byB0cmVhdCBNRU0gYW5kIFJFRyBkaWZmZXJlbnRseS4KKworCSogc3BhcmMuaCAoU1BBUkNfU0lNTXsxMCwxMSwxM31fUCk6IERlZmluZS4KKwkoU01BTExfSU5UKTogVXNlIFNQQVJDX1NJTU0xM19QLgorCShDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBTdXBwb3J0IG5ldyBsZXR0ZXJzIEwsTS4KKwkqIHNwYXJjLmMgKGFyaXRoMTFfb3BlcmFuZCk6IFVzZSBTUEFSQ19TSU1NMTFfUC4KKwkoYXJpdGgxMF9vcGVyYW5kKTogVXNlIFNQQVJDX1NJTU0xMF9QLgorCSogc3BhcmMubWQgKCptb3Z7cWksaGksc2ksZGl9X2NjX3NwNjQpOiBGaXggY29uc3RyYWludHMuCisJKCptb3Z7cWksaGksc2ksZGl9X2NjX3JlZ19zcDY0KTogTGlrZXdpc2UuCisKK1NhdCBNYXIgMjMgMDc6NDc6MTkgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIG02OGsvbGludXguaCAoVFJBTVBPTElORV9URU1QTEFURSk6IENvcnJlY3QgZmlyc3QgaW5zdHJ1Y3Rpb24uCisJKiBtNjhrL202OGt2NC5oIChUUkFNUE9MSU5FX1RFTVBMQVRFKTogTGlrZXdpc2UuCisKK1NhdCBNYXIgMjMgMDc6MDY6NTUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYmMtZW1pdC5jIChiY19lbWl0X2luc3RydWN0aW9uKTogQWRkIG1pc3NpbmcgdmFfZW5kIGNhbGwuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IEdpdmUgZXJyb3IgaWYgc3Vic2NyaXB0aW5nIGEgZnVuY3Rpb24uCisKK0ZyaSBNYXIgMjIgMDk6MTE6NDUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAob3B0aW1pemVfcmVnX2NvcHlfMSk6IE9ubHkgdXBkYXRlIHJlZ19saXZlX2xlbmd0aAorCWlmIGl0IGlzIG5vbi1uZWdhdGl2ZS4KKworVGh1IE1hciAyMSAxNDo0MjoyNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjL3NwbGV0LmggKFNUQVJURklMRV9TUEVDLExJTktfU1BFQyk6IERlZmluZS4KKworV2VkIE1hciAyMCAxNzoyMzoxOCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNzZS5jIChub3RlX21lbV93cml0dGVuKTogRGVsZXRlIG9ic29sZXRlIGNvZGUgZm9yIGhhbmRsaW5nCisJKG1lbSAoc2NyYXRjaCkpLgorCisJKiBtaXBzLmMgKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogSW4gaW5pdGlhbGl6YXRpb24gb2YgZm5hcmdzLCBkZWxldGUKKwlzcGVjaWFsIHRyZWF0bWVudCBvZiBNRVRIT0RfVFlQRS4KKworV2VkIE1hciAyMCAxNzowNzo0NSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjL3NvbDIuaCAoQVNNX0NQVV9TUEVDKTogUmVjb2duaXplIC1tY3B1PXY4cGx1cywgbm90IHY5LgorCUZpeCB0eXBvIGluIHVsdHJhc3BhcmMgZW50cnkuCisJKiBzcGFyYy9zcGFyYy5oIChDUFBfQ1BVX1NQRUMpOiBBZGQgdjhwbHVzIGVudHJ5LgorCShBU01fQ1BVX1NQRUMpOiBMaWtld2lzZS4KKworCSogc3BhcmMvc3BhcmMuYyAoZmNjX3JlZ19vcGVyYW5kKTogRW5zdXJlIGNvcnJlY3QgbW9kZS4KKwkoaWNjX29yX2ZjY19yZWdfb3BlcmFuZCk6IExpa2V3aXNlLgorCShnZW5fdjlfc2NjKTogSUZfVEhFTl9FTFNFIG11c3QgaGF2ZSBhIG1vZGUuCisJKHByaW50X29wZXJhbmQpOiBOZXcgb3BlcmFuZCBjb2RlIGB4JyBmb3IgYWxsIGNvbmRpdGlvbiBjb2Rlcy4KKwlOZXcgb3BlcmFuZCBjb2RlcyBgYyxkJyBmb3IgcmV2ZXJzZWQgY29uZGl0aW9uYWwgbW92ZXMuCisJKiBzcGFyYy9zcGFyYy5tZCAobW92cWljYyxtb3ZoaWNjKTogTmV3IG5hbWVkIHBhdHRlcm5zLgorCShtb3ZkaWNjKTogaWZfdGhlbl9lbHNlIG11c3QgaGF2ZSBhIG1vZGUuCisJKG1vdnNpY2MsbW92c2ZjYyxtb3ZkZmNjLG1vdnRmY2MpOiBMaWtld2lzZS4KKwlDaGFuZ2UgY29uZGl0aW9uIHRvIFRBUkdFVF9WOSwgbm90IFRBUkdFVF9BUkNINjQuCisJRmFpbCBpZiBESW1vZGUgY29tcGFyZSBhbmQgISBUQVJHRVRfQVJDSDY0LgorCShjb25kaXRpb25hbCBtb3ZlIG1hdGNoZXJzKTogUmV3cml0ZS4KKworV2VkIE1hciAyMCAxNjoxMjoyOSAxOTk2ICBTdGFuIENveCAgPGNveHNAd29tYmF0LmdudS5haS5taXQuZWR1PgorCisJKiBpMzg2LmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IFJlbGF4IFFJbW9kZSBjb25zdHJhaW50IHRvCisJYXZvaWQgYSByZWxvYWQgcHJvYmxlbS4KKworV2VkIE1hciAyMCAxMzoxMjoyMiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS5jIChocHBhX2xlZ2l0aW1pemVfYWRkcmVzcyk6IERvbid0IGxvc2UgZm9yIHhbbi1jb25zdF0KKwl3aGVuIG4tY29uc3Qgd2lsbCBub3QgYmUgc2hpZnRlZC4gIERvbid0IHBlc3NpbWl6ZSBjb2RlIGZvcgorCXhbbi1jb25zdF0gd2hlbiBjb25zdCBpcyBzbWFsbC4KKworV2VkIE1hciAyMCAxMTo0MjozMiAxOTk2ICBNYXJrdXMgVGhlaXNzaW5nZXIgIDxNYXJrdXMuVGhlaXNzaW5nZXJAZ21kLmRlPgorCisJKiBtNjhrL3N1bjMuaCAoTElCX1NQRUMpOiBEb24ndCBsaW5rIC91c3IvbGliL2JiX2xpbmsubyB3aXRoIGBnY2MgLWEnLgorCShfX2JiX2luaXRfZnVuYyk6IERlbGV0ZWQuCisJKEJMT0NLX1BST0ZJTEVSX0NPREUpOiBEb24ndCBzZXQgbWFjcm8gdG8gbm90aGluZy4KKworCSogbTY4ay94bS1zdW4zLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtNjhrLXN1bi1zdW5vcyopOiBVc2UgaXQuCisKKwkqIHhtLWxpbnV4LmggKEhBVkVfUE9QRU4pOiBOZXcgZGVmaW5lLgorCitXZWQgTWFyIDIwIDExOjI4OjM3IDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBtNjhrL2xpbnV4LmggKEFTTV9TUEVDKTogRGVsZXRlZC4KKwkoU1RSVUNUX1ZBTFVFX1JFR05VTSk6IFJlZGVmaW5lIGFzIHJlZ2lzdGVyIGEwLgorCShTVEFUSUNfQ0hBSU5fUkVHTlVNKTogUmVkZWZpbmUgYXMgcmVnaXN0ZXIgYTEuCisJKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBSZWRlZmluZSB0byB1c2UgdGhlIHJpZ2h0IHJlZ2lzdGVyLgorCitXZWQgTWFyIDIwIDA4OjA0OjM0IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxpYmdjYzIuYyAoX19kdW1teSk6IE5ldyBmdW5jdGlvbi4KKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBBZGQgX19kdW1teS4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fU0VUSk1QKTogQ2FsbCAic2V0am1wIgorCXBhdHRlcm4sIGlmIGFueS4KKwlDYWxsIGR1bW15IGZ1bmN0aW9uIHBvaW50ZWQgdG8gYnkgc3RhdGljIGNoYWluIHBvaW50ZXIuCisJKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0xPTkpNUCk6IElnbm9yZSBzZWNvbmQgZXhwcmVzc2lvbi4KKwlTZXQgYWRkcmVzcyBvZiBfX2R1bW15IGludG8gc3RhdGljIGNoYWluIHBvaW50ZXIuCisJQ29weSB0aGUgbGFiZWwgdG8gcmV0dXJuIHRvIGludG8gYSBwc2V1ZG8gZWFybGllci4KKworCSogc3R1cGlkLmMgKGxhc3Rfc2V0am1wX3N1aWQsIHJlZ3NfY3Jvc3Nlc19zZXRqbXApOiBOZXcgdmFyaWFibGVzLgorCShzdHVwaWRfbGlmZV9hbmFseXNpcywgc3R1cGlkX21hcmtfcmVmcyk6IFVzZSB0aGVtIHRvIHRyYWNrIHdoaWNoCisJcmVncyBhcmUgbGl2ZSBvdmVyIGEgc2V0am1wOyBkb24ndCBhbGxvY2F0ZSBzdWNoIHJlZ3MuCisKK1R1ZSBNYXIgMTkgMjI6MDI6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBGaXggZm9yIG5vbi1tYW5nbGVkIHBvaW50ZXIKKwlhcmd1bWVudHMuCisKK1R1ZSBNYXIgMTkgMTM6NTQ6MDYgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAd29tYmF0LmdudS5haS5taXQuZWR1PgorCisJKiBwYS5jIChjb21wdXRlX2ZyYW1lX3NpemUpOiBVcGRhdGUgY29tbWVudHMgdG8gcmVmbGVjdCByZWFsaXR5LgorCShocHBhX2V4cGFuZF9wcm9sb2d1ZSk6IERvbid0IHNhdmUgcmVnaXN0ZXJzIHdoaWNoIGFyZW4ndAorCXVzZWQsIGV2ZW4gaWYgaXQgY3JlYXRlcyBob2xlcy4gIFBhcnRpYWxseSB1bmRvZXMgY2hhbmdlcyBmcm9tCisJZWFybHkgTWFyY2guCisJKGhwcGFfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisKK1R1ZSBNYXIgMTkgMDg6MjU6MTcgMTk5NiAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogc3RtdC5jIChzdHJ1Y3QgY2FzZV9ub2RlKTogTmV3IG1lbWJlciBiYWxhbmNlLgorCShhZGRfY2FzZV9ub2RlKTogTmV3IGZ1bmN0aW9uLgorCShwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBVc2UgaXQuCisJKGNhc2VfdHJlZTJsaXN0KTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfZW5kX2Nhc2UpOiBVc2UgaXQuCisKK1R1ZSBNYXIgMTkgMDc6NDQ6MjIgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHJlZ3N0YWNrLmMgKG1vdmVfZm9yX3N0YWNrX3JlZyk6IEF2b2lkIHN0YWNrIG92ZXJmbG93IHdoaWxlCisJc3RvcmluZyBYRm1vZGUgZnJvbSBmcCByZWcgdG8gbWVtb3J5LgorCitUdWUgTWFyIDE5IDA3OjM4OjAzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG02OGsuaCAoTUFTS18qKTogTmV3IG1hY3Jvcy4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IFVzZSB0aGVtLgorCShUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KKwlUcmVhdCAtbTY4MzMyIGxpa2UgLW02ODAwMC4KKworTW9uIE1hciAxOCAyMDowNDoxMyAxOTk2ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBJZiBleHBhbmRpbmcgKEdFIFggMCkgd2lsbCBuZWVkIHR3bworCWluc25zLCBkb24ndCB1c2Ugc3VidGFyZ2V0IGZvciB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdCBpbnNuLgorCU1vdmUgYSBsaWtlbHkgY29uc3RhbnQgdG8gdGhlIHN0YXJ0IG9mIGEgY29uZGl0aW9uLgorCitNb24gTWFyIDE4IDE5OjQ4OjE0IDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CisKKwkqIG02OGsuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9WQUxVRSk6IE5ldyBjb25zdHJhaW50ICdNJy4KKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogUmVzdG9yZSByZWdpc3RlcnMgdXNpbmcgc3ArCisJaW5zdGVhZCBvZiBmcChuKSBpbiBsZWFmIGZ1bmN0aW9ucy4KKwkoVVNFX01PVlEsIHVzZV9tb3ZxKTogRnVuY3Rpb24gcmVwbGFjZWQgYnkgbWFjcm8uCisJKiBtNjhrLm1kIChwdXNoZXh0aGlzaV9jb25zdCwgbW92c2lfY29uc3QwKTogTmV3IG5hbWVzLgorCShhbmRzaTMsIGlvcnNpMyk6IEFsbG93IG9ubHkgJ00nLCBub3QgJ0snIGNvbnN0YW50cywgaWYgZGVzdCBpcyAnZCcuCisKK01vbiBNYXIgMTggMTk6MzM6MjAgMTk5NiAgRmlsYSBLb2xvZG55IDxmaWxhQGliaS5jb20+CisKKwkqIGkzNzAvdC1tdnM6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpMzcwLSotbXZzKik6IFVzZSBpdC4KKwkqIGkzNzAvbXZzLmggKEZVTkNUSU9OX1BST0xPR1VFKTogTEUvMzcwIHRha2VzIDEyMCBieXRlcyBmb3IgRFNBLgorCUhhdmUgb25seSBvbmUgY29weSBvZiB0aW1lc3RhbXAgYW5kIFBQQTIgcGVyIG9iamVjdCBtb2R1bGUuCisJT25seSBoYXZlIHVubmFtZWQgQ1NFQ1QgdG8gbWF0Y2ggSUJNIEMuCisKK01vbiBNYXIgMTggMTk6MjY6MjEgMTk5NiAgUGF1bCBSdXNzZWxsICAoUnVzdHkuUnVzc2VsbEBhZGVsYWlkZS5tYXB0ZWsuY29tLmF1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2lmX3RoZW5fZWxzZSk6IEFsbG93IGZvciBjYXNlIHRoYXQKKwljb25kaXRpb24gbWlnaHQgbm8gbG9uZ2VyIGJlIGEgY29uZGl0aW9uLgorCitNb24gTWFyIDE4IDE5OjE0OjQyIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBJZiBPUDEgaXMgbnVsbCwgc2V0CisJYm90aCBPUDEgYW5kIE9SSUdfT1AxIHRvIElGRVhQLgorCisJKiBjLWl0ZXJhdGUuYyAoaXRlcmF0b3JfbG9vcF9lcGlsb2d1ZSk6IERvbid0IGNsZWFyIERFQ0xfUlRMCisJZm9yIGEgc3RhdGljIGRlY2wuCisKK01vbiBNYXIgMTggMDg6MDI6MjUgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgPG1vc2hpZXJAd29ybGQuc3RkLmNvbT4KKworCSogYWxwaGEuYyAoc3VtbWFyaXplX2luc24sIGNhc2UgU1VCUkVHLCBDT05TVF8qKTogTmV3IGNhc2VzLgorCitTdW4gTWFyIDE3IDE2OjU1OjAwIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogY29tYmluZS5jIChmaW5kX3NwbGl0X3BvaW50KTogSGFuZGxlIE5VTEwgcmV0dXJuIGZyb20KKwltYWtlX2V4dHJhY3Rpb24uCisJKG1ha2VfZmllbGRfYXNzaWdubWVudCk6IExpa2V3aXNlLgorCitTYXQgTWFyIDE2IDE4OjU2OjQ3IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuYyAoc3Vic3RpdHV0ZV9pbl9leHByLCBjYXNlIENPTVBPTkVOVF9SRUYpOiBJZ25vcmUKKwlpZiBpbm5lciBQTEFDRUhPTERFUl9FWFBSIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuCisKKwkqIGkzODYuYyAoc3RhbmRhcmRfODAzODZfY29uc3RhbnRfcCk6IC0wLjAgaXMgbm90IDAuMC4KKwkqIGkzODYubWQgKGluc3YpOiBSZXN0b3JlIG1pc3NpbmcgZW5kIG9mIGNvbW1lbnQuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogQ29ycmVjdCB0eXBvIGluIGZvcmNlX3RvX21vZGUKKwljYWxsIGluIHByZXZpb3VzIGNoYW5nZS4KKwlSZXR1cm4gMCBpZiBwb3MrbGVuIG91dCBvZiByYW5nZSBvZiB3YW50IGRlc2lyZWQgbW9kZS4KKworU2F0IE1hciAxNiAxNjoyMDo0MyAxOTk2ICBEYXZpZCBNb3NiZXJnZXItVGFuZyAgPGRhdmlkbUBhenN0YXJuZXQuY29tPgorCisJKiBhbHBoYS5tZCAodHJhcCk6IE5ldyBhdHRyaWJ1dGUuCisJTW9kaWZ5IHBhdHRlcm5zIGZvciBhbGwgZmxvYXRpbmctcG9pbnQgdHJhcCBnZW5lcmF0aW5nIGluc3RydWN0aW9ucy4KKwkqIGFscGhhLmggKENQUF9TUEVDKTogQWRkZWQgLW1pZWVlIGFuZCAtbWllZWUtd2l0aC1pbmV4YWN0LgorCShhbHBoYV90cmFwX3ByZWNpc2lvbiwgYWxwaGFfZnBfcm91bmRpbmdfbW9kZSwgYWxwaGFfZnBfdHJhcF9tb2RlKToKKwlOZXcgZW51bSB0eXBlcy4KKwkodGFyZ2V0X2ZsYWdzLCBhbHBoYV90cCwgYWxwaGFfZnBybSwgYWxwaGFfZnB0bSk6IE5ldyBleHRlcm5hbCB2YXJzLgorCShhbHBoYV9mcHJtX3N0cmluZywgYWxwaGFfZnB0bV9zdHJpbmcsIGFscGhhX3RwX3N0cmluZyk6IExpa2V3aXNlLgorCShUQVJHRVRfSUVFRXssX1dJVEhfSU5FWEFDVCxfQ09ORk9STUFOVH0pOiBOZXcgbWFjcm9zLgorCShNQVNLX0lFRUV7LF9XSVRIX0lORVhBQ1QsX0NPTkZPUk1BTlR9KTogTGlrZXdpc2UuCisJKE1BU0tfRlAsIE1BU0tfRlBSRUdTLAorCShUQVJHRVRfU1dJVENIRVMpOiBBZGRlZCAiaWVlZS1jb25mb3JtYW50IiwgImllZWUiLCBhbmQKKwkiaWVlZS13aXRoLWluZXhhY3QiOyB1c2UgTUFTSyBzeW1ib2xzLgorCShUQVJHRVRfT1BUSU9OUyk6IE5ldyBtYWNyby4KKwkoT1ZFUlJJREVfT1BUSU9OUywgRklOQUxfUFJFU0NBTl97SU5TTixMQUJFTH0pOiBOZXcgbWFjcm9zLgorCShQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1ApOiBBbGxvdyBvcGVyYW5kIGNvZGVzIGZvciBGUCBpbnNucy4KKwkoQ0MxX1NQRUMpOiBOZXcgbWFjcm8uCisJKiBhbHBoYS5jIChhbHBoYV90cCwgYWxwaGFfZnBybSwgYWxwaGFfZnB0bSk6IE5ldyB2YXJpYWJsZXMuCisJKGFscGhhX3RwX3N0cmluZywgYWxwaGFfZnBybV9zdHJpbmcsIGFscGhhX2ZwdG1fc3RyaW5nCisJKHRyYXBfcGVuZGluZyk6IExpa2V3aXNlLgorCShvdmVycmlkZV9vcHRpb25zLCBzdW1tYXJpemVfaW5zbiwgZmluYWxfcHJlc2Nhbl9pbnNuKTogTmV3IGZ1bmN0aW9ucy4KKwkocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSBjYXNlcyAnJicsICdcJycsICcpJywgYW5kICcrJy4KKwkob3V0cHV0X3Byb2xvZyk6IEVtaXQgIi5lZmxhZyA0OCIgaWYgVEFSR0VUX0lFRUVfQ09ORk9STUFOVC4KKwkob3V0cHV0X2VwaWxvZyk6IENhbGwgZmluYWxfcHJlc2Nhbl9pbnNuIGJlZm9yZSBlbWl0dGluZyBlcGlsb2cuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbiwgY2FzZSBDT0RFX0xBQkVMKTogSW52b2tlCisJRklOQUxfUFJFU0NBTl9JTlNOIGlmIEZJTkFMX1NDQU5fTEFCRUwgaXMgZGVmaW5lZC4KKworCSogYWxwaGEve2xpbnV4LmgseC1saW51eCx4bS1saW51eC5ofTogTmV3IGZpbGVzLgorCSogY29uZmlndXJlIChhbHBoYS0qLWxpbnV4Kik6IE5ldyBjYXNlLgorCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IFNldCBhbHBoYV9mdW5jdGlvbl9uZWVkc19ncCBpZiBwcm9maWxpbmcKKwlhbmQgVEFSR0VUX1BST0ZJTElOR19ORUVEU19HUCBkZWZpbmVkLgorCitUaHUgTWFyIDE0IDIyOjI4OjIwIDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuaCAoTEVHSVRJTUFURV9PRkZTRVRfQUREUkVTU19QKTogRml4IGxhc3QgY2hhbmdlLgorCSogYWl4NDEuaCAoTElOS19TUEVDKTogYWRkIC1ibm9lbnRyeSBpZiBzaGFyZWQgYW5kIG5vIGV4cGxpY2l0IGVudHJ5LgorCitUaHUgTWFyIDE0IDEyOjQ3OjMzIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy5oIChBU01fT1VUUFVUX0RPVUJMRV9JTlQpOiBVc2UgJ1gnIGlmIENPTlNUX0lOVCBhbmQKKwlIT1NUX0JJVFNfUEVSX1dJREVfSU5UID09IDY0LgorCisJKiBtaXBzLmMgKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogQ2hhbmdlIFRZUEVfTkVFRFNfQ09OU1RSVUNUSU5HIHRvCisJVFJFRV9BRERSRVNTQUJMRTsKKworVGh1IE1hciAxNCAxMToyMTozNyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5oIChMRUdJVElNQVRFX09GRlNFVF9BRERSRVNTX1ApOiBGb3IgMzItYml0IG1vZGUsCisJYWxsb3cgVEltb2RlIHZhcmlhYmxlcyB3aXRoIGludCBvZmZzZXRzLCBzbyB0aGF0IHN0cnVjdHVyZXMKKwlncmVhdGVyIHRoYW4gOCBieXRlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDE2IGJ5dGVzIGNhbiBiZQorCWluc3RhbnRpYXRlZCBjb3JyZWN0bHkuCisKKwkqIHJzNjAwMC5jIChyczYwMDBfdmFsaWRfdHlwZV9hdHRyaWJ1dGVfcCk6IEFkZCBleGNlcHRpb24KKwlhdHRyaWJ1dGUgZm9yIFdpbmRvd3MgTlQuCisKKwkqIHdpbi1udC5oIChBU01fT1VUUFVUX0ZVTkNUSU9OX1BSRUZJWCk6IERlbGV0ZSwgbWVyZ2UgaW50bworCUFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBBZGQgc3VwcG9ydCBmb3IgZXhjZXB0aW9uIGF0dHJpYnV0ZQorCXNldHRpbmcgZmllbGRzIDMgJiA0IG9mIHRoZSBzdHJ1Y3R1cmVkIGV4Y2VwdGlvbiBoYW5kbGluZyB0YWJsZS4KKworVGh1IE1hciAxNCAwMTo1MzoxOSAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogQ2hhbmdlIFRZUEVfTkVFRFNfQ09OU1RSVUNUSU5HCisJdG8gVFJFRV9BRERSRVNTQUJMRS4gIEZyb20gSmltIFdpbHNvbi4KKworV2VkIE1hciAxMyAxMzo0MDozMiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGMtdHJlZS5oICh3YXJuX3NpZ25fY29tcGFyZSk6IEFkZCBleHRlcm4gdG8gZGVjbGFyYXRpb24uCisKK1dlZCBNYXIgMTMgMTM6Mzc6MDAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFVzZSBjcm9zcy1tYWtlIGFuZCBidWlsZC1tYWtlIGlmIGJ1aWxkaW5nCisJY3Jvc3MgY29tcGlsZXIgd2l0aCBjcm9zcyBjb21waWxlci4KKworV2VkIE1hciAxMyAxMjowMDozNCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGkzODYvY3lnd2luMzIuaCAoQVNNX09VVFBVVF9BTElHTik6IENvcnJlY3QgZGVmaW5hdGlvbi4KKworCSogcnM2MDAwL3t3aW4tbnQsY3lnd2luMzJ9LmggKFNUQVJURklMRV9TUEVDKTogQWRkIGNydGkubyBiZWZvcmUKKwlhbGwgb2JqZWN0cy4KKwkoRU5ERklMRV9TUEVDKTogQWRkIGNydG4ubyBhZnRlciBhbGwgb2JqZWN0cy4KKworCSogY29uZmlndXJlIChwb3dlcnBjbGUtKi1jeWd3aW4zMik6IFVzZSB0LXdpbm50LCBub3QgdC1jeWdpbjMyCisJKiByczYwMDAvdC1jeWd3aW4zMjogRGVsZXRlLCBubyBsb25nZXIgdXNlZC4KKworCSogcnM2MDAwL3Qtd2lubnQgKHssSU5TVEFMTF99TElCR0NDKTogQnVpbGQgYW5kIGluc3RhbGwgY3J0aS5vIGFuZAorCWNydG4uby4KKworCSogcnM2MDAwL3dpbi1udC5oIChFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IEFkZCBjdG9yc19zZWN0aW9uIGFuZAorCWR0b3JzX3NlY3Rpb24uCisJKElOVk9LRV9fbWFpbik6IERlZmluZSwgc28gdGhhdCBfX21haW4gaXMgY2FsbGVkLgorCShBU01fT1VUUFVUX3tDT05TVFJVQ1RPUixERVNUUlVDVE9SfSk6IERlZmluZSB0byBwdXQgcG9pbnRlcnMgdG8KKwl0aGUgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciBpbiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbi4KKworCSogbnQtY3tpLG59LmFzbTogTmV3IGZpbGVzIHRvIGJlIGxpbmtlZCBiZWZvcmUvYWZ0ZXIgYWxsIG9mIHRoZSB1c2VycycKKwlvYmplY3RzLgorCitXZWQgTWFyIDEzIDAwOjQyOjE3IDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiAgQmV0dGVyICJ2YXJpYW50IiBoYW5kbGluZyB0byBpZ25vcmUKKwljb25zdC92b2xhdGlsZSBidXQgbm90IHR5cGVkZWYgbmFtZXMuICBJbXByb3ZlcyBGZWIgMTIgY2hhbmdlLgorCitUdWUgTWFyIDEyIDE3OjI1OjE0IDE5OTYgIERhdmlkIE1vc2Jlcmdlci1UYW5nICA8ZGF2aWRtQGF6c3Rhcm5ldC5jb20+CisKKwkqIGdsaW1pdHMuaCAoX19MT05HX01BWF9fKTogT24gQWxwaGEsIHVzZSA2NCBiaXQgdmFsdWUuCisKK1R1ZSBNYXIgMTIgMTU6MDc6NDkgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQHRtZy5zZT4KKworCSogbTY4ay5jICh2YWxpZF9kYmNjX2NvbXBhcmlzb25fcCk6IERvbid0IHRlc3QgY2NfcHJldl9zdGF0dXMgaGVyZS4KKwkoZmxhZ3NfaW5fNjg4ODEpOiBOZXcgZnVuY3Rpb24uCisJKiBtNjhrLm1kIChkYnJhIHBlZXBob2xlcyk6IFVzZSBmbGFnc19pbl82ODg4MS4KKworVHVlIE1hciAxMiAxMzo1NDoxNSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IEVtaXQgYmFycmllciBhZnRlciBqdW1wLgorCShzZXRqbXB7LF82NCxfMzJ9KTogTmV3IHBhdHRlcm5zLgorCitUdWUgTWFyIDEyIDEyOjQzOjI3IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogaTk2MC9pOTYwLmggKFJPVU5EX1RQRV9TSVpFKTogUmV0dXJuIHJvdW5kX3VwIHJlc3VsdCBpbnN0ZWFkIG9mCisJQ09NUFVURUQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IEZvciB1bmFsaWduZWQgb2JqZWN0IGluCisJYW4gYWxpZ25lZCB1bmlvbiwgZGVsZXRlIGNoZWNrIGZvciBFWFBBTkRfU1VNLgorCisJKiBleHByLmggKGNsZWFyX3N0b3JhZ2UpOiBBZGQgY29tbWVudCB0ZXJtaW5hdG9yLgorCitNb24gTWFyIDExIDE5OjA3OjUwIDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcywgY2FzZSAnVicpOiBEb24ndCBjYWxsCisJb2Zmc2V0dGFibGVfbWVtcmVmX3AgYmVmb3JlIHJlbG9hZCBoYXMgY29tcGxldGVkLgorCitNb24gTWFyIDExIDE2OjA2OjEzIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuaCAoU1BfQU5EX0dfUkVHUyk6IFJlbmFtZWQgZnJvbSBTUF9BTkRfR19SRUcuCisJKENDX0RPTkVfQ0JJVCk6IERlbGV0ZS4KKwkoQ0NfT1ZFUkZMT1dfMCxDQ19PVkVSRkxPV19VTlVTQUJMRSxDQ19OT19DQVJSWSk6IERlZmluZS4KKwkqIGg4MzAwL2g4MzAwLmMgKGNvbmRfc3RyaW5nKTogRGVsZXRlIENDX0RPTkVfQ0JJVCBoYW5kbGluZy4KKwkobm90aWNlX3VwZGF0ZV9jYyk6IERlbGV0ZSBDQ19DQklULCBDQ19XSE9PUFMuICBBZGQgQ0NfU0VUX1pOX0MwLgorCShyZXN0b3JlX2NvbXBhcmVfcCk6IE5ldyBmdW5jdGlvbi4KKwkoc2hpZnRfb25lKTogVXNlIHNobGwgaW5zdGVhZCBvZiBzaGFsIHNvIG92ZXJmbG93IGJpdCBpcyB1c2FibGUuCisJU2V0IGNjX3ZhbGlkIGJpdHMgdG8gY2Nfc3RhdHVzLmZsYWdzIHZhbHVlcy4KKwkoZW1pdF9hX3NoaWZ0KTogU2V0IGNjX3N0YXR1cy5mbGFncy4KKwkqIGg4MzAwL2g4MzAwLm1kIChhdHRyIGNjKTogRGVsZXRlIHdob29wcyxjYml0LiAgQWRkIHNldF96bl9jMC4KKwkoYWxsIHBhdHRlcm5zKSBVcGRhdGUgY2MgYXR0ciBzZXR0aW5nLgorCSh0c3RxaSx0c3RoaSx0c3RzaSk6IERlbGV0ZSBDQ19ET05FX0NCSVQgaGFuZGxpbmcuCisJKGFkZGhpMyxzdWJoaTMpOiBDaGFuZ2UgZGVmaW5lX2V4cGFuZCB0byBkZWZpbmVfaW5zbi4KKwkoYnJhbmNoX3RydWUsYnJhbmNoX2ZhbHNlKTogQ2hlY2sgaWYgY29tcGFyZSBuZWVkcyB0byBiZSByZXN0b3JlZC4KKworTW9uIE1hciAxMSAxMzo1NToyMyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBBZGQgJ0gnIGZvciBtb3ZkaQorCXBhdHRlcm5zIGluIDMyIGJpdCB0aGF0IGdlbmVyYXRlIDMgaW5zdHJ1Y3Rpb25zLgorCShudW1faW5zbnNfY29uc3RhbnQpOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIHJzNjAwMC5jIChudW1faW5zbnNfY29uc3RhbnR7LF93aWRlfSkgRnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGUKKwludW1iZXIgb2YgaW5zbnMgaXQgdGFrZXMgdG8gZ2VuZXJhdGUgYW4gaW50ZWdlciBjb25zdGFudC4KKwkoZWFzeV9mcF9jb25zdGFudCk6IEFsbG93IERJbW9kZSBpbiBlYXN5IGNvbnN0YW50cy4gIFVzZQorCW51bV9pbnNuc19jb25zdGFudF93aWRlLgorCShpbnB1dF9vcGVyYW5kKTogQWxsb3cgYW55IENPTlNUX3tJTlQsRE9VQkxFfSdzIGZvciB7U0ksREl9bW9kZS4KKworCSogcnM2MDAwLm1kIChtb3ZkaSk6IEdlbmVyYXRlIGEgbm9ybWFsIG1vdmRpIHVzaW5nIGEgQ09OU1RfRE9VQkxFCisJZm9yIDMyIGJpdCBtb2RlIHJhdGhlciB0aGFuIHVzaW5nIFNVQlJFRydzLiAgRm9yIDY0IGJpdCBtb2RlLAorCWJyZWFrIGxhcmdlIGludGVnZXIgY29uc3RhbnRzIGludG8gc21hbGxlciBwaWVjZXMuICBBZGQgdmFyaW91cworCWRlZmluZV9zcGxpdHMgdG8gaGFuZGxlIGxvYWRpbmcgdGhlIHZhcmlvdXMgREltb2RlIGNvbnN0YW50cy4KKworTW9uIE1hciAxMSAwNjo1NDoxOSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IFVzZSBwcm9wZXIgbW9kZSBmb3IgSU5ORVIgaW4gYWxsIGNhc2VzLgorCShzaW1wbGlmeV9jb21wYXJpc29uLCBjYXNlIFpFUk9fRVhUUkFDVCk6IEZvciBiaXRzIGJpZyBlbmRpYW4gYW5kCisJbm8gZXh0enYsIHVzZSBCSVRTX1BFUl9XT1JELgorCSogZng4MC5tZCwgZ21pY3JvLm1kLCBpMzg2Lm1kLCBtNjhrLm1kLCB0YWhvZS5tZCwgdmF4Lm1kOgorCVVzZSBwcm9wZXIgbW9kZXMgYW5kIHByZWRpY2F0ZXMgZm9yIHtzaWduLHplcm99X2V4dHJhY3QuCisKK1N1biBNYXIgMTAgMDY6MjM6NTIgMTk5NiAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogZW1pdC1ydGwuYyAoZnJlZV9pbnNuKTogTmV3IHZhcmlhYmxlLgorCShpbml0X2VtaXQsIHJlc3RvcmVfZW1pdF9zdGF0dXMpOiBDbGVhciBpdC4KKwkoZ2VuX3NlcXVlbmNlKTogU3RvcmUgaW5zbiBpbiBmcmVlX2luc24gd2hlbiBzZXF1ZW5jZSBsZW5ndGggaXMgMS4KKwkobWFrZV9pbnNuX3Jhdyk6IFVzZSBmcmVlX2luc24gaWYgYXZhaWxhYmxlIGFuZCBzdGlsbCBpbiB0aGUKKwlydGwgZ2VuZXJhdGlvbiBwaGFzZS4KKworRnJpIE1hciAgOCAxNTozNzozMSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgVEFSR0VUX0VYUFIpOiBEZWxheSBwdXR0aW5nIHRoZSBjbGVhbnVwCisJb24gdGhlIGNsZWFudXAgY2hhaW4gdW50aWwgYWZ0ZXIgdGhlIHN1YmV4cHJlc3Npb24gaGFzIGJlZW4gZXhwYW5kZWQuCisKK0ZyaSBNYXIgIDggMTY6MTQ6NTEgMTk5NiAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworICAgICAgICAqIGkzODYuYyAoaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2spOiBvbmUgbWVtb3J5IG9wZXJhbmQgaXMgT0suCisgICAgICAgIFRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgY29tbXV0YXRpdml0eS4KKworRnJpIE1hciAgOCAxNDowNzo0MyAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3JfZmllbGQpOiBDYWxsIHN0b3JlX2ZpZWxkIGlmIGJpdHBvcyBpcworCW5vbnplcm8gYW5kIHRhcmdldCBpcyBub3QgYSBNRU0uCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gaGFuZGxlIGEgVVNFIGluc24gYmVmb3JlIGFuCisJdW5jb25kaXRpb25hbCBqdW1wLCBkaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24gaWYgdGhlIFVTRSBpcyB0aGUKKwlvbmx5IGluc24gaW4gdGhlIGxvb3AuCisKKwkqIHNoLmMgKHJlZ191bnVzZWRfYWZ0ZXIpOiBSZXR1cm4gMCBpZiBzZWUgYSBKVU1QX0lOU04uCisKK0ZyaSBNYXIgIDggMTI6MDg6MzYgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9seW54LmggKENQUF9TUEVDKTogVXNlICUoY3BwX2NwdSkuCisKKwkqIHNwYXJjL3NwYXJjLm1kIChtb3ZlX3BpY19sYWJlbF9zaSxtb3ZlX2xhYmVsX2RpKTogUmV3cml0ZSBsZW5ndGgKKwlhdHRyIGNhbGNzIHRvIGJlIG1vcmUgY29uc2VydmF0aXZlLgorCitUaHUgTWFyICA3IDE5OjE0OjIxIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMvdC1zcGxldDogTmV3IGZpbGUuCisJKiBzcGFyYy9zcGxldC5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoc3BhcmNsZXQtKi1hb3V0Kik6IFVzZSB0aGVtLgorCisJKiBzcGFyYy9zcGFyYy5oIChNQVNLX0xJVkVfRzAsVEFSR0VUX0xJVkVfRzApOiBEZWZpbmUuCisJKEZJUlNUX1BTRVVET19SRUdJU1RFUik6IEFkZCAxIGZvciAlaWNjIChub3cgMTAxKS4KKwkoRklYRURfUkVHSVNURVJTLENBTExfVVNFRF9SRUdJU1RFUlMpOiBVcGRhdGUuCisJKEZJWEVEX1JFR0lTVEVSUyk6ICVnMCBpcyBmaXhlZCBieSBkZWZhdWx0LgorCShTUEFSQ197RklSU1QsTEFTVH1fVjlfRkNDX1JFRyk6IERlZmluZS4KKwkoU1BBUkNfe0lDQyxGQ0N9X1JFRyk6IERlZmluZS4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEb24ndCBmaXggJWZjYzAgaWYgdjguCisJKFJFR19DTEFTU19DT05URU5UUyk6IFJlZyAwIGlzIGFuIGludCByZWcsIHJlZyAxMDAgaXMgJWljYy4KKwkoUkVHTk9fUkVHX0NMQVNTKTogUmV3cml0ZSB0byB1c2UgZ2xvYmFsIGBzcGFyY19yZWdub19yZWdfY2xhc3MnLgorCShSRUdfQUxMT0NfT1JERVIsUkVHX0xFQUZfQUxMT0NfT1JERVIsTEVBRl9SRUdJU1RFUlMpOiBBZGQgJWljYy4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogSGFuZGxlICdjJyBmb3IgRlBDQ19SRUdTIGluIG5vbi12OSBjYXNlLgorCShSRUdOT19PS19GT1Jfe0JBU0UsSU5ERVh9X1ApOiBUcmVhdCAlZzAgYXMgYSBub3JtYWwgcmVnLgorCShSRUdfT0tfRk9SX3tCQVNFLElOREVYfV9QLEVYVFJBX0NPTlNUUkFJTlQpOiBMaWtld2lzZS4KKwkoUkVHSVNURVJfTkFNRVMpOiBBZGQgJWljYy4KKwkoQURESVRJT05BTF9SRUdJU1RFUl9OQU1FUyk6IFVzZSBTUEFSQ19JQ0NfUkVHLgorCSogc3BhcmMvc3BhcmMuYyAobGVhZl9yZWdfcmVtYXApOiBBZGQgJWljYz0xMDAuCisJKHJlZ19vcl8wX29wZXJhbmQpOiBEb24ndCBhbGxvdyAwIGlmIFRBUkdFVF9MSVZFX0cwLgorCShmY2NfcmVnX29wZXJhbmQpOiBSZW5hbWVkIGZyb20gY2NmcF9yZWdfb3BlcmFuZC4KKwlVc2UgU1BBUkNfRkNDX1JFRy4gIERvbid0IHRyZWF0IHJlZyAwIGFzIGFuIGZjYyByZWcuICBEb24ndCBtYXRjaAorCW1vZGVzIGlmIGBtb2RlJyBhcmd1bWVudCBpcyBWT0lEbW9kZS4KKwkoaWNjX29yX2ZjY19yZWdfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkoZ2VuX2NvbXBhcmVfcmVnKTogVXNlIFNQQVJDX0ZDQ19SRUcgZm9yIHY4IGZwIGNvbXBhcmVzLgorCVVzZSBTUEFSQ19JQ0NfUkVHIGZvciBpbnQgY29tcGFyZXMuCisJKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IERvbid0IGFsbG93IGFueXRoaW5nIGlmIFRBUkdFVF9MSVZFX0cwLgorCURlbGV0ZSB1bm5lY2Vzc2FyeSB0ZXN0IGZvciAlZzAuCisJKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IERvbid0IGVtaXQgKHNldCAobWVtKSAoY29uc3RfaW50IDApKSBpZgorCVRBUkdFVF9MSVZFX0cwLgorCShvdXRwdXRfc2NjX2luc24pOiBMYWJlbCBtb3ZlZCB0byBvcGVyYW5kIDMuICBDb25kaXRpb24gY29kZSByZWcKKwltb3ZlZCB0byBvcGVyYW5kIDIuCisJKHNwYXJjX21vZGVfY2xhc3MpOiBFbnVtIENfTU9ERSByZW5hbWVkIHRvIENDX01PREUuCisJKGhhcmRfMzJiaXRfbW9kZV9jbGFzc2VzKTogU2V0IHJlZyAwIHRvIFNfTU9ERVMuICBBZGQgZW50cnkgZm9yICVpY2MuCisJKGhhcmRfNjRiaXRfbW9kZV9jbGFzc2VzKTogU2V0IHJlZyAwIHRvIERfTU9ERVMuICBBZGQgZW50cnkgZm9yICVpY2MuCisJKHNwYXJjX3JlZ25vX3JlZ19jbGFzcyk6IE5ldyBnbG9iYWwuCisJKHNwYXJjX2luaXRfbW9kZXMpOiBJbml0aWFsaXplIGl0LgorCShvdXRwdXRfY2JyYW5jaCk6IERlbGV0ZSBmcF9jb25kX3JlZyBhcmd1bWVudC4KKwkocHJpbnRfb3BlcmFuZCwgTUVNIG9wKTogRG9uJ3QgcHJpbnQgIiVnMCsiIGlmIFRBUkdFVF9MSVZFX0cwLgorCShzcGFyY19mbGF0X2VsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IERvbid0IGFsbG93IGFueXRoaW5nIGlmCisJVEFSR0VUX0xJVkVfRzAuCisJKiBzcGFyYy9zcGFyYy5tZCAobGl2ZV9nMCk6IE5ldyBhdHRyaWJ1dGUuCisJKCopOiBJbnRlZ2VyIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyIGlzIG5vdyByZWcgMTAwLgorCVVzZSBTUEFSQ19JQ0NfUkVHIGluc3RlYWQgb2YgaGFyZGNvZGluZyByZWcgMTAwIHdoZXJlIHBvc3NpYmxlLgorCU5vbi12OSBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZSByZWdpc3RlciBpcyBub3cgcmVnIDk2LgorCSgqY21we3NmLGRmLHRmfV97ZnBlLGZwfV9zcHszMiw2NH0pOiBDb21iaW5lIHY5L25vbi12OSBjYXNlcy4KKwkoKntub3JtYWwsaW52ZXJ0ZWR9X3ssZnAsZnBlfV9icmFuY2gpOiBVcGRhdGUgY2FsbCB0byBvdXRwdXRfY2JyYW5jaC4KKwkoKm1vdntxaSxoaSxzaX1faW5zbik6IERvbid0IHVzZSBpZiBUQVJHRVRfTElWRV9HMC4KKwkoKm1vdntxaSxoaSxzaX1faW5zbl9saXZlZzApOiBOZXcgcGF0dGVybnMuCisJKCptb3Z7c2ksZGksc2YsZGYsdGZ9X2NjZnB7LGV9X3NwNjQpOiBjY2ZwX3JlZ19vcGVyYW5kIHJlbmFtZWQgdG8KKwlmY2NfcmVnX29wZXJhbmQuCisJKCpuZWdkaTJfc3AzMixuZWdzaTIsb25lX2NtcGxzaTIsZmZzc2kyKTogRW5zdXJlICUlZzAgaXMgMCBpZgorCVRBUkdFVF9MSVZFX0cwLgorCSgqb25lX2NtcGxkaTJfc3AzMik6IE1vdmUgb3BlcmFuZCAxIHRvIHJzMSBhbmQgdXNlIDAgYXMgcnMyLgorCShwYXR0ZXJucyB0aGF0IHVzZSAlZzAgaW4gcnMyKTogVXNlIDAgaW1tZWRpYXRlIHZhbHVlIGluc3RlYWQuCisJKHBhdHRlcm5zIHRoYXQgcmVhZCAlZzApOiBEb24ndCB1c2UgaWYgVEFSR0VUX0xJVkVfRzAuCisKK1RodSBNYXIgIDcgMTU6Mzk6MTYgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBzaC5oIChQQVNTX0lOX1JFR19QKTogQ2hhbmdlIDwgdG8gPD0uCisJKiB2YS1zaC5oICh2YV9zdGFydCk6IENoYW5nZSBfX1NIM0VfX18gdG8gX19TSDNFX18uCisJKHZhX2FyZyk6IEFkZCBsaXR0bGUtZW5kaWFuIFNIM0Ugc3VwcG9ydC4gIEZpeCBiaWctZW5kaWFuIHZlcnNpb24KKwl0byB3b3JrIGZvciBhcmd1bWVudHMgc21hbGxlciB0aGFuIHRoZSB3b3JkIHNpemUuCisKK1RodSBNYXIgIDcgMTA6Mzc6MzcgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogbGliMmZ1bmNzLmFzbTogUmVtb3ZlIGVudHJ5L2V4aXQgcm91dGluZXMuICBNb3ZlIHRoZW0gaW50by4uLgorCSogZWUuYXNtOiBOZXcgZmlsZS4gIEVudHJ5L2V4aXQgY29kZS4KKwkqIGVlX2ZwLmFzbTogTmV3IGZpbGUuICBFbnRyeS9leGl0IGNvZGUgd2l0aCBmcmFtZSBwb2ludGVyLgorCSogdC1wYTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCSogdC1wcm86IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKworCSogcGEuYzogRml4IG1pc2Mgc21hbGwgdHlwb3MvdGhpbmtvcyBpbiByZWNlbnQgY2hhbmdlcy4KKworV2VkIE1hciAgNiAxNzozNjowMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEZpeCBmb3IgYWRkcmVzcy1vZi1leHRlcm4gYXJndW1lbnRzLgorCitXZWQgTWFyICA2IDE1OjEyOjU1IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHQtcHJvIChkcC1iaXQgcnVsZSk6IEZpeCB0eXBvLgorCisJKiBsaWIyZnVuY3MuYXNtIChfX291dGxpbmVfcHJvbG9ndWUpOiBSZW1vdmUgZnJhbWUgcG9pbnRlcgorCXN1cHBvcnQuCisJKF9fb3V0bGluZV9wcm9sb2d1ZV9mcCk6IE91dCBvZiBsaW5lIHByb2xvZ3VlIHdpdGggZnJhbWUgcG9pbnRlci4KKwkoX19vdXRsaW5lX2VwaWxvZ3VlLCBvdXRsaW5lX2VwaWxvZ3VlX2ZwKTogU2ltaWxhcmx5LgorCSogcGEuYyAoY29tcHV0ZV9mcmFtZV9zaXplKTogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIHRvIGF2b2lkIGhvbGVzCisJaW4gdGhlIGNhbGxlZSByZWdpc3RlciBzYXZlcy4gIFJlbW92ZSBzb21lIHNwZWNpYWwgaGFuZGxpbmcgb2YgJXIzLgorCShocHBhX2V4cGFuZF9wcm9sb2d1ZSk6IERvbid0IGRvIGFuIG91dCBvZiBsaW5lIHByb2xvZ3VlL2VwaWxvZ3VlCisJaWYgaXQgd291bGQgdGFrZSBtb3JlIGluc25zIHRoYW4gYW4gaW5saW5lIHByb2xvZ3VlL2VwaWxvZ3VlLgorCURvbid0IGxlYXZlIGhvbGVzIGluIHRoZSBjYWxsZWUgcmVnaXN0ZXIgc2F2ZSBzZXQuCisJKGhwcGFfZXhwYW5kX3Byb2xvZ3VlKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLiAgUGFzcyBzdGFjayBzaXplCisJdG8gb3V0IG9mIGxpbmUgZXBpbG9ndWUgY29kZS4KKwkqIHBhLmggKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCisJKiBwYS5tZCAob3V0bGluZV9wcm9sb2d1ZV9jYWxsKTogSGFuZGxlIG91dGxpbmUgcHJvbG9ndWVzIHdoaWNoCisJZG9uJ3QgbmVlZCBmcmFtZSBwb2ludGVycy4KKwkob3V0bGluZV9lcGlsb2d1ZV9jYWxsKTogU2ltaWxhcmx5LgorCSogdC1wcm86IFJlZW5hYmxlIG11bHRpbGliIGNvZGUuICBCdWlsZCBhIHNldCBvZiBsaWJyYXJpZXMgdGhhdAorCW9wdGltaXplIGZvciBzcGFjZS4KKworV2VkIE1hciAgNiAxNDoyODoxNCAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgZ2luY2x1ZGUvdmEtc2guaC4KKwkqIGdpbmNsdWRlL3N0ZGFyZy5oLCBnaW5jbHVkZS92YXJhcmdzLmg6IFVzZSB2YS1zaC5oLgorCSogZ2luY2x1ZGUvdmEtc2guaDogTmV3IGZpbGUuCisKKwkqIHNoLmggKFBBU1NfSU5fUkVHX1ApOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworV2VkIE1hciAgNiAxMTo0MjowNiAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmggKGVudW0gcHJvY2Vzc29yX3R5cGUpOiBSZW1vdmUgUFJPQ0VTU09SX1BQQzYwMi4KKwkoUlRYX0NPU1RTKTogUmVtb3ZlIFBST0NFU1NPUl9QUEM2MDIuICBQUEM2MDMgTVVMVCBjb3N0IGRlcGVuZHMKKwlvbiBjb25zdGFudCBhbmQgZG9tYWluLgorCSogcnM2MDAwLmMgKHByb2Nlc3Nvcl90YXJnZXRfdGFibGUpOiA2MDIgdXNlcyBQUk9DRVNTT1JfUFBDNjAzLgorCShnZXRfaXNzdWVfcmF0ZSk6IFJlbW92ZSBDUFVfUFBDNjAyLgorCSogcnM2MDAwLm1kIChmdW5jdGlvbiB1bml0cyk6IFJlbW92ZSBQUEM2MDIuICBBZGQgc3RvcmUgYW5kCisJZnBzdG9yZSB0eXBlIGF0dHJpYnV0ZSB2YWx1ZXMuICBVcGRhdGUgcGF0dGVybnMuCisKK1R1ZSBNYXIgIDUgMTg6NDM6NDMgMTk5NiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAdGFtdS5lZHU+CisKKwkqIG02OGsvY29mZi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IE5ldyBkZWZpbmUuCisKKwkqIG02OGsve2F1eC1jcnQxLmMsYXV4LWNydFsybl0uYXNtfTogTmV3IGZpbGVzLgorCSogbTY4ay97YXV4LWV4aXQuYyxhdXgtbG93LmdsZCxhdXgtbWNvdW50LmN9OiBNb3JlIG5ldyBmaWxlcy4KKwkqIG02OGsve2F1eC5oLGF1eGdudS5oLGF1eHN0ZC5ofTogRXZlbiBtb3JlIG5ldyBmaWxlcy4KKwkqIG02OGsve3QtYXV4LHhtLWF1eC5ofTogVGhlIHJlc3Qgb2YgdGhlIG5ldyBmaWxlcy4KKwkqIG02OGsvc2dzLmggKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBBZGQgbWlzc2luZyBzZW1pY29sb24uCisJKHN3aXRjaF90YWJsZV9kaWZmZXJlbmNlX2xhYmVsX2ZsYWcpOiBNYWtlIGV4dGVybi4KKwkqIGZpeGluY2x1ZGVzIChzeXMvcGFyYW0uaCk6IEZpeCBjODkgX19hc20gc3RhdGVtZW50cy4KKwkqIGNvbmZpZ3VyZSAobTY4ay1hcHBsZS1hdXgqKTogTmV3IHRhcmdldC4KKworVHVlIE1hciAgNSAxNzozODoxOSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjLm1kICgqbW92e3FpLGhpLHNpfV9pbnNuKTogU2ltcGxpZnkgbGVuZ3RoIGF0dHJpYnV0ZS4KKwkoKm1vdnNpX2luc24pOiBVc2UgZnBsb2FkL2Zwc3RvcmUgYXR0cmlidXRlcyBmb3IgZnAgbG9hZHMvc3RvcmVzLgorCSVyMSAtPiAlMSBmb3IgZnBzdG9yZSBhbHRlcm5hdGl2ZS4KKwkoKm1vdnNmX2luc24sKm1vdnNmX25vX2ZfaW5zbik6ICVyMSAtPiAlMS4KKworVHVlIE1hciAgNSAxNzoxOToxNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgKl9ERUNMKTogSWYgd2UgbWFrZSBhIG5vbi1sb2NhbAorCXJlZmVyZW5jZSBmcm9tIGEgZnVuY3Rpb24gd2l0aCBERUNMX05PX1NUQVRJQ19DSEFJTiBzZXQsIGFib3J0LgorCShleHBhbmRfZXhwciwgY2FzZSBBRERSX0VYUFIpOiBXZSBkb24ndCBuZWVkIGEgdHJhbXBvbGluZSBmb3IgYQorCWZ1bmN0aW9uIHdpdGggREVDTF9OT19TVEFUSUNfQ0hBSU4gc2V0LgorCSogZnVuY3Rpb24uYyAobG9va3VwX3N0YXRpY19jaGFpbik6IElmIHdlJ3JlIGNoZWNraW5nIG9uIGEgZnVuY3Rpb24KKwl0aGF0IGRvZXNuJ3QgbmVlZCBhIHN0YXRpYyBjaGFpbiwgcmV0dXJuIDAuCisJKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBXZSBkb24ndCBuZWVkIGNvbnRleHQgaWYgREVDTF9OT19TVEFUSUNfQ0hBSU4KKwlpcyBzZXQuCisJKiB0cmVlLmMgKHN0YXRpY3ApOiBDaGVjayBERUNMX05PX1NUQVRJQ19DSEFJTiBvbiBuZXN0ZWQgZnVuY3Rpb25zLgorCitUdWUgTWFyICA1IDE1OjA0OjI5IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogc2gubWQgKHB1c2hfZSwgcG9wX2UpOiBBZGQgVEFSR0VUX1NIM0UgdG8gY29uZGl0aW9uLgorCSogc2guaCAoSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OKTogRGVmaW5lLgorCSogc2guYyAoZmluZF9iYXJyaWVyKTogU2V0IHNpX2xpbWl0IHRvIDEwMTggaW5zdGVhZCBvZiAxMDIwLCBhbmQKKwloaV9saW1pdCB0byA1MTAgaW5zdGVhZCBvZiA1MTIuCisKK1R1ZSBNYXIgIDUgMTM6Mzk6NDQgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBsb29wLmMgKGluaXRfbG9vcCk6IFVzZSBwc2V1ZG8gcmVnIGluIGFkZF9jb3N0IGNvbXB1dGF0aW9uCisJc28gY29zdCBkb2Vzbid0IHZhcnkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgcmVnIDAgaGFwcGVucyB0byBiZQorCWZpeGVkIG9yIG5vdC4KKworVHVlIE1hciAgNSAwOTozMjoyNCAxOTk2ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBtZW9seW9uLmhhbnNlLmRlKQorCisJKiByZWctc3RhY2suYyAocmVjb3JkX2xhYmVsX3JlZmVyZW5jZXMpOiBDaGVjayBmb3IgdW5kZWZpbmVkIGxhYmVsLgorCitUdWUgTWFyICA1IDA5OjIyOjIwIDE5OTYgIFNjb3R0IENocmlzdGxleSAoc2NvdHRjQG5ldC1jb21tdW5pdHkuY29tKQorCisJKiBvYmpjL29iamMtYXBpLmgsIG9iamMvcnVudGltZS5oOiBJbmNsdWRlIG9iamMvdGhyZWFkLmguCisJKiBvYmpjL2NsYXNzLmMgKF9fb2JqY19pbml0X2NsYXNzX3RhYmxlcyk6IFN1cnJvdW5kIHNhcnJheSBhY2Nlc3MKKwl3aXRoIG11dGV4IGxvY2svdW5sb2NrLgorCShfX29iamNfYWRkX2NsYXNzX3RvX2hhc2gsIG9iamNfbG9va3VwX2NsYXNzKTogTGlrZXdpc2UuCisJKG9iamNfZ2V0X2NsYXNzLCBvYmpjX2dldF9uZXh0X2NsYXNzKTogTGlrZXdpc2UuCisJKF9fb2JqY19yZXNvbHZlX2NsYXNzX2xpbmtzLCBjbGFzc19wb3NlX2FzKTogTGlrZXdpc2UuCisJKiBvYmpjL2luaXQuYyAoX19vYmpjX3J1bnRpbWVfbXV0dXgsIF9fb2JqY19ydW50aW1lX3RocmVhZF9hbGl2ZSk6CisJTmV3IHZhcmlhYmxlcy4KKwkob2JqY19pbml0X3N0YXRpY3MsIF9fb2JqY19pbml0X3Byb3RvY29scyk6IFN1cnJvdW5kIHNhcnJheSBhY2Nlc3MKKwl3aXRoIG11dGV4IGxvY2svdW5sb2NrCisJKF9fb2JqY19leGVjX2NsYXNzKTogTGlrZXdpc2UuCisJSW5pdGlhbGl6YXRpb24gZm9yIHRocmVhZC1zYWZlIGdsb2JhbCB2YXJpYWJsZXMuCisJRGVjbGFyYXRpb25zIGZvciB0aHJlYWQtc2FmZSBmdW5jdGlvbnMgYW5kIGdsb2JhbCB2YXJpYWJsZXMKKwkqIG9iamMvc2VuZG1zZy5jIChnZXRfaW1wLCBfX29iamNfcmVzcG9uZHNfdG8pOgorCVN1cnJvdW5kIHNhcnJheSBhY2Nlc3Mgd2l0aCBtdXRleCBsb2NrL3VubG9jay4KKwkoX19vYmpjX2luaXRfaW5zdGFsbF9kdGFibGUpOiBMaWtld2lzZS4KKwkoX19vYmpjX3VwZGF0ZV9kaXNwYXRjaF90YWJsZV9mb3JfY2xhc3MpOiBMaWtld2lzZS4KKwkoX19vYmpjX3ByaW50X2R0YWJsZV9zdGF0cyk6IExpa2V3aXNlLgorCSogb2JqYy9zZWxlY3Rvci5jIChzZWxfZ2V0X3R5cGVkX3VpZCwgc2VsX2dldF9hbnlfdHlwZWRfdWlkKTogTGlrZXdpc2UuCisJKHNlbF9nZXRfYW55X3VpZCwgc2VsX2dldF9uYW1lLCBzZWxfcmVnaXN0ZXJfbmFtZSk6IExpa2V3aXNlLgorCShzZWxfcmVnaXN0ZXJfdHlwZWRfbmFtZSk6IExpa2V3aXNlLgorCSogb2JqYy9zYXJyYXkuaCAodW5pb24gc3ZlcnNpb24pOiBOZXcuCisJKHN0cnVjdCBzYXJyYXkpOiBNYWludGFpbiBtdWx0aXBsZSB2ZXJzaW9ucy4KKwkoc2FycmF5X3JlbW92ZV9nYXJiYWdlKTogQWRkIHByb3RvdHlwZS4KKwkqIG9iamMvc2FycmF5LmMgKHNhcnJheV97cmVtb3ZlLGZyZWV9X2dhcmJhZ2UpOiBOZXcgZnVuY3Rpb25zLgorCShzYXJyYXlfYXRfcHV0LCBzYXJyYXlfbmV3LCBzYXJyYXlfbGF6eV9jb3B5KToKKwlNb2RpZnkvY29weSBzYXJyYXkgc3RydWN0dXJlL2RhdGEgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIKKwkoc2FycmF5X3tyZWFsbG9jLGZyZWV9KTogUmVhbGxvY2F0ZS9mcmVlIHNhcnJheSBzdHJ1Y3R1cmUvZGF0YSBpbiBhCisJdGhyZWFkLXNhZmUgbWFubmVyLgorCisJKiBvYmpjL1RIUkVBRFMsIG9iamMvdGhyZWFkLmMsIG9iamMvdGhyZWFkLmg6IE5ldyBmaWxlcy4KKwkqIG9iamMvdGhyZWFkLXtkZWNvc2YxLGlyaXgsc29sYXJpcyx3aW4zMixzaW5nbGV9LmM6IE5ldyBmaWxlcy4KKwkqIG9iamMvb2JqYy1saXN0Lmg6IFJlbmFtZWQgZnJvbSBvYmpjL2xpc3QuaC4KKwkqIG9iamMvTWFrZWZpbGU6IENoYW5nZXMgdG8gY29tcGlsZSBuZXcgZmlsZXMgYW5kIG5hbWUgcmVuYW1pbmcuCisJKiBvYmpjL21ha2VmaWxlLmRvczogTGlrZXdpc2UuCisKK1R1ZSBNYXIgIDUgMDc6NTE6MzEgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYmMtZW1pdC5jLCBiYy1vcHRhYi5jIChmcmVlKTogRGVsZXRlIGRlY2xhcmF0aW9uIG9mIGxpYnJhcnkgZnVuY3Rpb24uCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbCk6IElmIG1ha2luZyBkZWNsIG5vbi1leHRlcm5hbCwgY29weQorCWNvbnRleHQgZnJvbSBvbGQgdG8gbmV3LgorCitUdWUgTWFyICA1IDAyOjI3OjM1IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20KKworCSogbGliMmZ1bmNzLmFzbSAoX19vdXRsaW5lX3Byb2xvZ3VlKTogTmV3ICJmdW5jdGlvbiIuCisJKF9fb3V0bGluZV9lcGlsb2d1ZSk6IE5ldyAiZnVuY3Rpb24iLgorCSogcGEuaCAoVEFSR0VUX1NQQUNFKTogRGVmaW5lLgorCSh0YXJnZXRfZmxhZ3MpOiBBZGQgLW1zcGFjZSBhbmQgLW1uby1zcGFjZS4gIEVuYWJsZS9kaXNhYmxlCisJc3BhY2Ugc2F2aW5nIG9wdGltaXphdGlvbnMuCisJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBGcmFtZSBwb2ludGVycyBhcmUgYWx3YXlzIHJlcXVpcmVkCisJd2hlbiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLgorCSogcGEuYyAoY29tcHV0ZV9mcmFtZV9zaXplKTogSGFuZGxlIG91dCBvZiBsaW5lIHByb2xvZ3Vlcy9lcGlsb2d1ZXMuCisJKGhwcGFfZXhwYW5kX3Byb2xvZ3VlKTogSWYgb3B0aW1pemluZyBmb3Igc3BhY2UsIGVtaXQgYW4gb3V0IG9mCisJbGluZSBwcm9sb2d1ZS4KKwkoaHBwYV9leHBhbmRfZXBpbG9ndWUpOiBTaW1pbGFybHkuCisJKG92ZXJyaWRlX29wdGlvbnMpOiBPcHRpbWl6aW5nIGZvciBzcGFjZSBpcyBub3QgY29tcGF0YWJsZSB3aXRoCisJZWl0aGVyIHByb2ZpbGluZyBvciBQSUMgY29kZSBnZW5lcmF0aW9uLgorCSogcGEubWQgKG91dGxpbmVfcHJvbG9ndWVfY2FsbCk6IE5ldyBwYXR0ZXJuLgorCShvdXRsaW5lX2VwaWxvZ3VlX2NhbGwpOiBMaWtld2lzZS4KKworVHVlIE1hciAgNSAwMjoxNzozMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjLm1kICgqY21we3NpLGRpfV9pbnNuKTogJXIwIC0+ICUwLgorCShERm1vZGUgbW92ZSBkZWZpbmVfc3BsaXQpOiBFbnN1cmUgcmVnaXN0ZXJzIG5vdCBleHRlbmRlZCB2OSBmcCByZWdzLgorCSgqbW92e3NmLGRmLHRmfV9jY19yZWdfc3A2NCk6ICVyMyAtPiAlMy4KKworTW9uIE1hciAgNCAxODo0NjozNyAxOTk2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAbHRzLnNlbC5hbGNhdGVsLmRlPgorCisJKiBNYWtlZmlsZS5pbiAoQ1JUMFNUVUZGX1RfQ0ZMQUdTKTogTmV3IG1hY3JvLgorCShzdGFtcC1jcnQwLCBjcnQwLm8sIG1jcnQwLm8pOiBOZXcgZ29hbHMuCisJKFNUQUdFU1RVRkYpOiBzdGFtcC1jcnQwIGFkZGVkLgorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogQ2hlY2sgbmV3IGRlZmluZSBERUZBVUxUX0FfT1VUX05BTUUuCisKKwkqIG02OGsuYyAocHJpbnRfb3BlcmFuZCk6IEVtaXQgLmwgYXMgc2NhbGUgZmFjdG9yICNpZmRlZiBNT1RPUk9MQS4KKwkqIG02OGsvbW90MzMwMC1jcnQwLlMsIG02OGsvbW90MzMwME1jcnQwLlM6IE5ldyBmaWxlcy4KKwkqIG02OGsvbW90MzMwMGcuaDogRGVsZXRlZC4KKwkqIG02OGsvbW90MzMwMC5oIChGVU5DVElPTl9QUk9GSUxFUik6IEVtaXQgbGFiZWwgcmVmZXJlbmNlcworCWNvcnJlc3BvbmRpbmcgdG8gdGhvc2UgZ2VuZXJhdGVkIGJ5IEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwuCisJKE1PVE9ST0xBLCBNT1RPUk9MQV9CU1IsIC4uLik6IERlZmluZSAjaWZuZGVmIFVTRV9HQVMuCisJKEFTTV9TUEVDKTogRGVmaW5lIHByb3Blcmx5ICNpZmRlZiBVU0VfR0FTLgorCShMSUJfU1BFQyk6IC1ML3Vzci9saWIvbGlicCBkZWxldGVkLgorCShTVEFSVEZJTEVfU1BFQyk6IC1ML3Vzci9saWIvbGlicCBhZGRlZC4KKwkoREVGQVVMVF9BX09VVF9OQU1FKTogRGVmaW5lLgorCShMSU5LX1NQRUMpOiBQYXNzIC12IGlmIEdOVSBsZCBpcyB1c2VkLgorCShMT0NBTF9MQUJFTF9QUkVGSVgpOiBMb2NhbCBsYWJlbHMgc3RhcnQgd2l0aCAuTCB1c2luZyBHQVMsIGVsc2UgTCUuCisJKFVTRVJfTEFCRUxfUFJFRklYKTogVW5kZWZpbmUuCisJKEZVTkNUSU9OX1BST0ZJTEVSKTogQ2FsbCBhc21fZnByaW50ZiBpbnN0ZWFkIG9mIG5vcm1hbCBmcHJpbnRmLgorCShBU01fQVBQX09OLCBBU01fRklMRV9TVEFSVCk6IEdBUyBzdXBwb3J0cyBpdC4KKwkoQ1RPUlNfLi4uL0RUT1JTXy4uLik6IERlZmluZSBpZiBHTlUgbGQgaXMgdXNlZC4KKwkoQVNNX0ZJTEVfU1RBUlQpOiBEZWZpbmUgcHJvcGVybHkgZm9yIE1vdG9yb2xhIGFuZCBHTlUgYXMgc3ludGF4LgorCShUQVJHRVRfVkVSU0lPTik6IFJlLWRlZmluZSBvbmx5ICNpZm5kZWYgVVNFX0dBUy4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IERlbGV0ZWQuCisJKEdMT0JBTF9BU01fT1ApOiBSZS1kZWZpbmUgb25seSAjaWZuZGVmIFVTRV9HQVMuCisJKEFTTV97TE9ORyxTSE9SVCxDSEFSLEJZVEUsQllURV9PUH0pOiBOZXcgbWFjcm9zLgorCShBU01fT1VUUFVUX3tET1VCTEUsTE9OR19ET1VCTEUsRkxPQVQsSU5ULFNIT1JUfSk6IFVzZSB0aGVtLgorCShBU01fT1VUUFVUX3tDSEFSLEJZVEUsQVNDSUksRkxPQVRfT1BFUkFORCxET1VCTEVfT1BFUkFORH0pOiBMaWtld2lzZS4KKwkoQUxJR05fQVNNX09QLCBTS0lQX0FTTV9PUCk6IE5ldyBtYWNyb3MuCisJKEFTTV9PVVRQVVRfe0FMSUdOLFNLSVB9KTogVXNlIHRoZW0uCisJKEFTTV9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FKTogRGVmaW5lIG9ubHkgaWYgbm90IHVzaW5nIEdOVSBhcy4KKwkoQVNNX3tHRU5FUkFURSxPVVRQVVR9X0lOVEVSQUxfTEFCRUwpOiBQcm92aWRlIHByb3BlciBkZWZpbml0aW9ucyBmb3IKKwlNb3Rvcm9sYSBhbmQgR05VIGFzIHN5bnRheC4KKwkoQVNNX09VVFBVVF9BRERSX3tWRUMsRElGRn1fRUxUKTogQ2hhbmdlZCBmb3IgcG9ydGFiaWxpdHkgYmV0d2VlbgorCU1vdG9yb2xhIGFuZCBHTlUgYXMgc3ludGF4LgorCShBU01fT1VUUFVUX3tDQVNFX0xBQkVMLE9QQ09ERX0pOiBEZWZpbmUgb25seSBpZiBub3QgdXNpbmcgR05VIGFzLgorCShBU01fT1VUUFVUX0NBU0VfRkVUQ0gsIEFTTV9SRVRVUk5fQ0FTRV9KVU1QKTogTmV3IG1hY3Jvcy4KKwkoQVNNX09VVFBVVF97Q09NTU9OLExPQ0FMfSk6IFByb3BlciBkZWZucyBmb3IgTW90b3JvbGEgYW5kIGdhcyBzeW50YXguCisJKFNEQl8uLi4pOiBEZWZpbmUgb25seSBmb3IgTW90b3JvbGEgYXMuCisJKEFMVF9MSUJNKTogTmV3IGRlZmluZSB0byB0ZWxsIGcrKy5jIGFib3V0IGFuIGFsdGVybmF0aXZlIG5hbWUgZm9yCisJYC1sbScuCisJKE1BVEhfTElCUkFSWSwgTkVFRF9BVEVYSVQsIEhBVkVfQVRFWElULCBFWElUX0JPRFkpOiBOZXcgbWFjcm9zLgorCSogbTY4ay90LW1vdDMzMDAsIG02OGsvdC1tb3QzMzAwLXtnYWxkLGdhcyxnbGR9OiBOZXcgZmlsZXMuCisJKiBtNjhrL3gtbW90MzMwMC1nYXM6IE5ldyBmaWxlLgorCSogbTY4ay94bS1tb3QzMzAwLmggKFVTRyk6IFNldCB0byAxLgorCSogY29uZmlndXJlIChtNjhrLW1vdG9yb2xhLXN5c3YqKTogS2VlcCB0cmFjayBvZiBuZXcgZGlmZmVyZW50CisJY29tYmluYXRpb25zICgtLXdpdGgtZ251LS4uLiksIGFuZCBwcm92aWRlIHByb3BlciBkZWZpbml0aW9ucyBmb3IKKwl0bV9maWxlLCB4bWFrZV9maWxlLCB0bWFrZV9maWxlLCB1c2VfY29sbGVjdDIsIGFuZCBleHRyYV9wYXJ0cy4KKworCSogZ2JsLWN0b3JzLmggKEhBVkVfQVRFWElUKTogRGVmaW5lIGlmIE5FRURfQVRFWElUIGlzIGRlZmluZWQuCisJKGF0ZXhpdCk6IFVzZSBgaW50IGF0ZXhpdCcgcHJvdG90eXBlIGFsc28gaWYgTkVFRF9BVEVYSVQgaXMgZGVmaW5lZC4KKwkob25fZXhpdCk6IEFjY29yZGluZyB0byBtYW4gb25fZXhpdCBvbiB0aGUgU3VuIGl0IHJldHVybnMgaW50IG5vdCB2b2lkLgorCSogbGliZ2NjMi5jIChMX2JiL2F0ZXhpdCwgb25leGl0KTogRGVjbGFyYXRpb25zIHJlcGxhY2VkIGJ5CisJI2luY2x1ZGUnaW5nICJnYmwtY3RvcnMuaCIuCisJKExfZXhpdC9hdGV4aXQpOiBOZXcgZnVuY3Rpb24uCisJKExfZXhpdC9leGl0KTogQ2FsbCBhbnkgcmVnaXN0ZXJlZCBmdW5jdGlvbnMuCisKK01vbiBNYXIgIDQgMTg6MDM6MzggMTk5NiAgQnJ5YW4gRm9yZCAgKGJhZm9yZEBjcy51dGFoLmVkdSkKKworCSogY29uZmlndXJlIChpWzM0NTZdODYtbW9zcy1tc2RvcyopOiBOZXcgdGFyZ2V0LgorCSogaTM4Ni9tb3NzLmg6IE5ldyBmaWxlLgorCitNb24gTWFyICA0IDE3OjM4OjUwIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2guaCAoUEFTU19JTl9SRUdfUCk6IERvbid0IHJlamVjdCBCTEttb2RlIGZvciBTSDNlLgorCUZvciBTSDNlLCBkbyByZWplY3QgcGFyYW1ldGVyIHRoYXQgd29uJ3QgZml0IGVudGlyZWx5IGluIHJlZ2lzdGVycy4KKworCSogc2gubWQgKG11bGhpc2kzLTIsIG11bGhpc2kzLTEsIG11bHNpZGkzX2ksIHVtdWxzaWRpM19pLAorCXNtdWxzaTNfaGlnaHBhcnQsIHVtdWxzaTNfaGlnaHBhcnQpOiBSZW5hbWVzIG9wZXJhbmRzIDEvMiB0byAwLzEuCisJKG11bHNpZGkzLCB1bXVsc2lkaTMpOiBBZGQgc3VwcG9ydCBmb3IgVEFSR0VUX0xJVFRMRV9FTkRJQU4uCisKKwkqIHNoLmMgKG1hY2hpbmVfZGVwZW5kZW50X3Jlb3JnKTogSW4gVEFSR0VUX1JFTEFYIGNvZGUsIHdoZW4gc2NhbgorCWZvcndhcmQgZnJvbSBMSU5LLCBmYWlsIGlmIHBhc3MgYSBDT0RFX0xBQkVMIGJlZm9yZSBmaW5kaW5nIElOU04uCisJRmFpbCBpZiBTQ0FOIG5vdCBJTlNOIGlzIGEgSlVNUF9JTlNOLgorCitNb24gTWFyICA0IDExOjI3OjEwIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmggKENBTExfTE9ORyk6IENoYW5nZSBDQUxMX3h4IHZhbHVlcyBmcm9tIGFuIGVudW1lcmF0aW9uCisJdG8gYml0bWFza3MuICBBZGQgQ0FMTF9MT05HIHRvIHN1cHBvcnQgbG9uZ2NhbGwgYXR0cmlidXRlcy4KKwkocnM2MDAwX2FyZ3MpOiBDYWxsX2Nvb2tpZSBmaWVsZCBpcyBub3cgYW4gaW50LgorCShyczYwMDBfbG9uZ2NhbGxfcmVmKTogQWRkIGRlY2xhcmF0aW9uLgorCisJKiByczYwMDAuYyAoaW5pdF9jdW11bGF0aXZlX2FyZ3MpOiBBZGQgc3VwcG9ydCBmb3IgbG9uZ2NhbGwKKwlhdHRyaWJ1dGVzIHRvIGFsd2F5cyBjYWxsIHRocm91Z2ggYSBwb2ludGVyLgorCShmdW5jdGlvbl9hcmcpOiBEaXR0by4KKwkocnM2MDAwX3ZhbGlkX3R5cGVfYXR0cmlidXRlX3ApOiBEaXR0by4KKwkocnM2MDAwX2xvbmdjYWxsX3JlZik6IE5ldyBmdW5jdGlvbiBmb3IgbG9uZyBjYWxscy4KKworCSogcnM2MDAwLm1kIChjYWxsIGluc25zKTogQWRkIHN1cHBvcnQgZm9yIGxvbmdjYWxsIGF0dHJpYnV0ZXMuCisKK01vbiBNYXIgIDQgMDg6NDI6MTQgMTk5NiAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogcmVhbC5jIChzaWduaWZpY2FuZF9zaXplKTogRG9uJ3QgdGVzdCB0aGUgbW9kZXMsIGJ1dCB0aGVpciBzaXplcy4KKworCSogZHdhcmZvdXQuYyAoeHN0cmR1cCk6IE1vdmVkIGZyb20gaGVyZS4KKwkqIHRvcGxldi5jICh4c3RyZHVwKTogTmV3IGZ1bmN0aW9uLgorCSogdHJlZS5oICh4c3RyZHVwKTogRGVjbGFyZS4KKwkqIGJjLWVtaXQuYyAoYmNfeHN0cmR1cCk6IERlbGV0ZS4KKwkqIGV4cHIuYyAoYmNfc3RyZHVwKTogRGVsZXRlLgorCShiY19sb2FkX2V4dGVybmFkZHJfaWQpOiBVc2UgeHN0cmR1cCBpbnN0ZWFkIG9mIGJjX3hzdHJkdXAuCisJKiBmdW5jdGlvbi5jIChiY19leHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBMaWtld2lzZS4KKwkqIDE3NTBhLmMgKHN0cmR1cCk6IERlbGV0ZS4KKwkoZmxvYXRfbGFiZWwpOiBVc2UgeHN0cmR1cCBpbnN0ZWFkIG9mIHN0cmR1cC4KKwkqIDE3NTBhLmggKHhzdHJkdXApOiBEZWNsYXJlIGluc3RlYWQgb2YgaW5zdGVhZCBvZiBzdHJkdXAuCisJKEFTTV9PVVRQVVRfTEFCRUwpOiBVc2UgeHN0cmR1cCBpbnN0ZWFkIG9mIHN0cmR1cC4KKwkoRklYX0ZSQU1FX1BPSU5URVJfQUREUkVTUyk6IERvbid0IHVzZSBERVBUSCBpbiBzdHJpbmcuCisKK01vbiBNYXIgIDQgMDg6MjM6MjMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogeG0td2UzMmsuaCAoTk9fV0FJVF9IKTogRGVsZXRlZC4KKworCSogY29sbGVjdDIuYzogTmV2ZXIgaW5jbHVkZSB3YWl0LmguCisKK1NhdCBNYXIgIDIgMjI6NDM6MDcgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQHNwaWZmLmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWd1cmUgKGNvZGUgZm9yIG1ha2luZyBsaW5rcyk6IFdvcmsgYXJvdW5kIHNoIGJ1ZyBvbiBGcmVlQlNELgorCitTYXQgTWFyICAyIDEzOjQwOjI5IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIGg4MzAwLmggKEJJR0dFU1RfRklFTERfQUxJR05NRU5UKTogUmVwbGFjZSB1c2VzIG9mCisJVEFSR0VUX0FMSUdOX1NUUlVDVF8zMDAgd2l0aCBUQVJHRVRfQUxJR05fMzAwLgorCShCSUdHRVNUX0FMSUdOTUVOVCk6IExpa2V3aXNlLgorCitTYXQgTWFyICAyIDA4OjA0OjUwIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSWYgcGFzc2luZyBieSBpbnZpc2libGUgcmVmLCBub3QgY29uc3QuCisKKwkqIHNwYXJjLmMgKFNLSVBfQ0FMTEVSU19VTklNUF9QKTogTWFrZSBhZ3JlZSB3aXRoIHRlc3QgdXNlZCBpbiBjYWxsLgorCisJKiBleHByLmMgKGRvX2p1bXAsIGNhc2UgQ09NUE9VTkRfRVhQUik6IENhbGwgcHJlc2VydmVfdGVtcF9zbG90cy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlICpfRElWX0VYUFIpOiBJZ25vcmUgU0FWRV9FWFBSIGlmIGhhcyBSVEwuCisKK0ZyaSBNYXIgIDEgMTc6NTk6MTcgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBJbW1lZGlhdGVseSBjb3B5IHRoZSByZXR1cm4KKwl2YWx1ZSBmcm9tIHRoZSBsaWJyYXJ5IGNhbGwgaW50byBhIHBzZXVkbyByZWdpc3Rlci4KKwkoZW1pdF9mbG9hdF9saWJfY21wKTogTGlrZXdpc2UuCisKK0ZyaSBNYXIgIDEgMTQ6Mzc6NDAgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoQlNTX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgorCSgqX1NFQ1RJT05fQVNNX09QKTogQ2hhbmdlIHRhYiBhZnRlciAuc2VjdGlvbiBpbnRvIGEgc3BhY2UuCisJKEFTTV9PVVRQVVRfSU5UKTogRGl0dG8uCisJKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IFJld3JpdGUgdG8gdXNlIGJzc19zZWN0aW9uLgorCShBU01fT1VUUFVUX0FMSUdORURfQlNTKTogRGVmaW5lIHRvIHVzZSBBU01fR0xPQkFMSVpFX0xBQkVMIGFuZAorCUFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTC4KKworCSogcnM2MDAwL3dpbi1udC5oIChCU1NfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IERlZmluZS4KKwkoQVNNX09VVFBVVF9MT0NBTCk6IERvbid0IGRlZmluZSBhbnkgbW9yZS4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IERlZmluZSB0byB1c2UgQVNNX0dMT0JBTElaRV9MQUJFTCBhbmQKKwlBU01fT1VUUFVUX0FMSUdORURfTE9DQUwuCisKK1RodSBGZWIgMjkgMTc6MzM6MTIgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBjLXR5cGVjay5jIChwdXNoX2luaXRfbGV2ZWwpOiBXaGVuIG91dHB1dCBwYWRkaW5nIHRvIGFsaWduIHN0cnVjdHVyZQorCWZpZWxkLCBzZXQgY29uc3RydWN0b3JfdW5maWxsZWRfZmllbGRzLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUsIGNhc2UgTUVUSE9EX1RZUEUpOiBBZGQgQ0hBUlMgKDEpIGNhbGwKKwlhZnRlciBlbWl0dGluZyBzZWNvbmQgJyMnIGNoYXJhY3Rlci4KKworVGh1IEZlYiAyOSAxMzo1OToyNyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuaCAoQVNNX09VVFBVVF9CU1MpOiBEZWZpbmUuCisJKiBtNjhrL2NvZmYuaCAoQlNTX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0FMSUdORURfQlNTKTogRGVmaW5lLgorCSogbTY4ay9tNjhrLWFvdXQuaCAoQlNTX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0JTUyk6IERlZmluZS4KKworVGh1IEZlYiAyOSAxMzozOTozOSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KKworCSogdmFyYXNtLmMgKGNvbXBhcmVfY29uc3RhbnRfMSk6ICBGb3IgYSBTRVRfVFlQRSBDT05TVFJVQ1RPUiwKKwlmaXJzdCBleHRyYWN0IGFuZCBjb21wYXJlIHRoZSBzZXQgbGVuZ3RoLgorCisJKiB2YXJhc20uYyAocmVjb3JkX2NvbnN0YW50XzEpOiAgRm9yIFNFVF9UWVBFIENPTlNUUlVDVE9SLAorCXBlcm1hbmVudF9vYnN0YWNrLm5leHRfZnJlZSBpcyAqZW5kKiBvZiBhdmFpbGFibGUgc3BhY2UuCisKK1RodSBGZWIgMjkgMTM6MTQ6MTQgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG5ldyBmbGFncyAiLW1sb25nLWxvYWQtc3RvcmUiIGFuZAorCSItbW5vLWxvbmctbG9hZC1zdG9yZSIuCisJKFRBUkdFVF9MT05HX0xPQURfU1RPUkUpOiBEZWZpbmUuCisJKiBwYS5tZCAoc3ltYm9saWMgaGlnaCBwYXJ0KTogSGFuZGxlIFRBUkdFVF9MT05HX0xPQURfU1RPUkUuCisKK1RodSBGZWIgMjkgMTE6Mzk6MzAgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYvaTM4Ni5tZCAoY21weGYqKTogWEYgY29tcGFyZSBjYW5ub3QgaGF2ZSBtZW0gb3BlcmFuZHMuCisJKGNhc2VzaSBleHBhbmQpOiBQdXQgKG1pbnVzOlNJLi4pIGludG8gc3Vic2kzIGZvcm1hdC4KKwkqIGkzODYvaTM4Ni5jIChpMzg2X3JldHVybl9wb3BzX2FyZ3MpOiBDbGVhbnVwIGV4dHJhIGFyZ3VtZW50CisJdXNlZCBhcyBhZGRyZXNzIG9mIGEgcmV0dXJuZWQgc3RydWN0dXJlLgorCitXZWQgRmViIDI4IDIyOjI0OjI4IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogdmFyYXNtLmMgKGVudW0gaW5fc2VjdGlvbik6IERlZmluZSBpbl9ic3MgaWYgQlNTX1NFQ1RJT05fQVNNX09QCisJaXMgZGVmaW5lZC4KKwkoYnNzX3NlY3Rpb24sYXNtX291dHB1dF9ic3MsYXNtX291dHB1dF9hbGlnbmVkX2Jzcyk6IE5ldyBmdW5jdGlvbnMuCisJKGFzc2VtYmxlX3ZhcmlhYmxlKTogRGVsZXRlIHJlZHVuZGFudCB0ZXN0IGZvciB0b28gbGFyZ2UgYW4gb2JqZWN0LgorCVJld3JpdGUgdGVzdCBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuICBVc2UgbmV3IG1hY3JvcworCUFTTV9PVVRQVVR7LF9BTElHTkVEfV9CU1MgaWYgZGVmaW5lZCB0byBvdXRwdXQgZ2xvYmFsIHVuaW5pdGlhbGl6ZWQKKwlidXQgbm90IGNvbW1vbiB2YXJpYWJsZXMuCisJKiBieXRlY29kZS5oIChCQ19PVVRQVVRfQlNTKTogRGVmaW5lLgorCSogbHlueC5oIChFWFRSQV9TRUNUSU9OUyk6IERlbGV0ZSBpbl9ic3MuCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogRGVsZXRlIEJTU19TRUNUSU9OX0ZVTkNUSU9OLgorCSogc3ZyMy5oIChFWFRSQV9TRUNUSU9OUyk6IExpa2V3aXNlLgorCShCU1NfU0VDVElPTl9GVU5DVElPTik6IERlbGV0ZS4KKwkqIGNvbnZleC9jb252ZXguaCAoRVhUUkFfU0VDVElPTlMsRVhUUkFfU0VDVElPTlNfRlVOQ1RJT05TKTogRGVsZXRlLgorCSogZHNwMTZ4eC9kc3AxNnh4LmggKEVYVFJBX1NFQ1RJT05TKTogRGVsZXRlIGluX2Jzcy4KKwkoRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOiBEZWxldGUgYnNzX3NlY3Rpb24uCisJKiBnbWljcm8vZ21pY3JvLmggKEVYVFJBX1NFQ1RJT05TLEVYVFJBX1NFQ1RJT05TX0ZVTkNUSU9OUyk6IERlbGV0ZS4KKwkqIGkzODYvYWl4Mzg2bmcuaCAoRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOiBEZWxldGUKKwlCU1NfU0VDVElPTl9GVU5DVElPTi4KKwkqIGkzODYvYXR0LmggKEJTU19TRUNUSU9OX0ZVTkNUSU9OKTogRGVsZXRlLgorCSogaTM4Ni9zY281LmggKEVYVFJBX1NFQ1RJT05TKTogRGVsZXRlIGluX2Jzcy4KKwkoRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOiBEZWxldGUgQlNTX1NFQ1RJT05fRlVOQ1RJT04uCisJKEJTU19TRUNUSU9OX0ZVTkNUSU9OKTogRGVsZXRlLgorCSogaTM4Ni9zZXEtc3lzdjMuaCAoQlNTX1NFQ1RJT05fRlVOQ1RJT04pOiBEZWxldGUuCisJKiBpMzg2L3N2cjNnYXMuaCAoRVhUUkFfU0VDVElPTlMpOiBEZWxldGUgaW5fYnNzLgorCShFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IERlbGV0ZSBCU1NfU0VDVElPTl9GVU5DVElPTi4KKwkoQlNTX1NFQ1RJT05fRlVOQ1RJT04pOiBEZWxldGUuCisJKiBpODYwL3BhcmFnb24uaCAoRVhUUkFfU0VDVElPTlMsRVhUUkFfU0VDVElPTlNfRlVOQ1RJT05TKTogVW5kZWYuCisJKiBtNjhrL2NyZHMuaCAoRVhUUkFfU0VDVElPTlMsRVhUUkFfU0VDVElPTlNfRlVOQ1RJT05TKTogRGVsZXRlLgorCShCU1NfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCisJKiBtNjhrL202OGsuaCAoQkNfT1VUUFVUX0JTUyk6IERlZmluZS4KKwkqIG1pcHMvaXJpczYuaCAoRVhUUkFfU0VDVElPTlMpOiBEZWxldGUgaW5fYnNzLgorCSogcGEvcGEuaCAoRVhUUkFfU0VDVElPTlMpOiBEZWxldGUgaW5fYnNzLgorCShFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IERlbGV0ZSBic3Nfc2VjdGlvbi4KKwkqIHNwYXJjL2xpdGVjb2ZmLmggKEVYVFJBX1NFQ1RJT05TKTogRGVsZXRlIGluX2Jzcy4KKworV2VkIEZlYiAyOCAxNDoxMjoyNSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIHNoLmggKEZVTkNUSU9OX1ZBTFVFX1JFR05PX1AsIEZVTkNUSU9OX0FSR19SRUdOT19QKTogSW5jbHVkZSBGUAorCXJlZ2lzdGVycyBvbmx5IHdoZW4gVEFSR0VUX1NIM0UuCisJKFBBU1NfSU5fUkVHX1ApOiBFeGNsdWRlIEJMS21vZGUgb25seSB3aGVuICEgVEFSR0VUX1NIM0UuCisKK1dlZCBGZWIgMjggMTI6MDM6MjYgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuYyAocnM2MDAwX3RyYW1wb2xpbmVfe3RlbXBsYXRlLHNpemV9KTogQ2hhbmdlIHRoZSBXaW5kb3dzCisJTlQgdHJhbXBvbGluZSB0ZW1wbGF0ZSBzbyB0aGF0IGl0IGRvZXNuJ3QgcmVxdWlyZSBtYWtpbmcgdGhlIHN0YWNrCisJZXhlY3V0YWJsZS4gIEFkZCBzdXBwb3J0IGZvciA2NCBiaXQgc3lzdGVtcy4KKwkocnM2MDAwX2luaXRpYWxpemVfdHJhbXBvbGluZSk6IERpdHRvLgorCitUdWUgRmViIDI3IDE2OjQyOjAwIDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCk6IE5ldyBjb2RlICdIJy4KKwkqIHJzNjAwMC5tZCAoaW5zdiwgZXh0enYpOiBBZGQgREltb2RlIHBhdHRlcm5zLiAgVXNlICdoJworCWNvbnNpc3RlbnRseSBmb3IgbWFza2luZyBTSW1vZGUgc2hpZnRzLgorCShyb3RsZGkzLCBhc2hsZGkzLCBsc2hyZGkzLCBhc2hyZGkzKTogVXNlICdIJy4KKwkobW92c2Ygc3BsaXQpOiBHZW5lcmF0ZSBDT05TVF9JTlQgaW5zdGVhZCBvZiBTVUJSRUcuCisKK1R1ZSBGZWIgMjcgMTU6MDI6MTcgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzaC9zaC5oIChIQU5ETEVfUFJBR01BKTogRGVsZXRlIGByZXR1cm4nLgorCitUdWUgRmViIDI3IDA4OjE4OjEyIDE5OTYgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybWx0ZC5jby51aykKKworCSogYXJtLmMgKGFvZl90ZXh0X3NlY3Rpb24pOiBSZW1vdmUgcHNldWRvIHJlYWQtb25seSBoYWNrLiAgRG9lc24ndAorCXRha2UgYSBwYXJhbWV0ZXIgYW55IG1vcmUuCisJKiBhcm0vYW9mLmggKEVYVFJBX1NFQ1RJT05TLCBFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IFJlbW92ZQorCXJlYWRvbmx5IGRhdGEgc2VjdGlvbnMuCisJKFJFQURPTkxZREFUQV9TRUNUSU9OLCBSRUFET05MWV9EQVRBX1NFQ1RJT04pOiBEZWxldGUuCisKKwkqIGFybS5oIChlbnVtIGFybV9jb25kX2NvZGUpOiBOZXcgZW51bS4KKwkoQVJNX0lOVkVSU0VfQ09ORElUSU9OX0NPREUpOiBNb3ZlZCBoZXJlIGZyb20gYXJtLmMuCisJKFNFTEVDVF9DQ19NT0RFKTogQ2FsbCBhcm1fc2VsZWN0X2NjX21vZGUgdG8gZG8gdGhlIHdvcmsuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBkb21pbmFudF9jY19yZWdpc3RlcjsgZGVsZXRlCisJcmV2ZXJzaWJsZV9jY19yZWdpc3Rlci4KKwkqIGFybS5jIChhcm1fY3VycmVudF9jYyk6IE5vdyBhbiBlbnVtLgorCShBUk1fSU5WRVJTRV9DT05ESVRJT05fQ09ERSk6IE1vdmVkIHRvIGFybS5oCisJKHJldnNlcnNpYmxlX2NjX3JlZ2lzdGVyKTogRGVsZXRlLgorCShkb21pbmFudF9jY19yZWdpc3Rlcik6IE5ldyBmdW5jdGlvbi4KKwkoc2VsZWN0X2RvbWluYW5jZV9jY19tb2RlKTogTmV3IGZ1bmN0aW9uLgorCShhcm1fc2VsZWN0X2NjX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24pOiBOZXcgcGFyYW1ldGVyIFJFVkVSU0UsIHVzZWQgdG8KKwlyZXZlcnNlIHRoZSBjb25kaXRpb24gb2YgYSBjb25kaXRpb25hbCByZXR1cm4uICBBbGwgY2FsbGVycworCWNoYW5nZWQuCisJKGFybV9wcmludF9vcGVyYW5kIGNhc2UgJ0QnKTogT25seSBzdXBwcmVzcyBjb25kaXRpb24gcHJpbnRpbmcKKwlpZiB0aGUgb3BlcmFuZCBpcyBhIE5VTEwgcG9pbnRlci4KKwkoZ2V0X2FybV9jb25kaXRpb25fY29kZSk6IE5vdyBhIHN0YXRpYyBmdW5jdGlvbiByZXR1cm5pbmcKKwllbnVtIGFybV9jb25kX2NvZGUuICBIYW5kbGUgZG9taW5hbmNlIGV4cHJlc3Npb25zLiAgUmV0dXJuIGVudW0KKwl2YWx1ZXMgcmF0aGVyIHRoYW4gaW50ZWdlcnMuCisJKiBhcm0ubWQgKCphZGRzaTNfY29tcGFyZTBfc2NyYXRjaCk6IE5ldyBpbnNuLgorCSgqbW92c2lfY29tcGFyZTAsICpjbXBzaV9pbnNuLCAqY21wc2lfc2hpZnRzaSk6IE1ha2Ugc3VyZSB0aGUKKwljb21wYXJlIGhhcyBtb2RlIENDLgorCShjbXB7c2ksc2YsZGYseGZ9IGV4cGFuZHMpOiBKdXN0IHByb3ZpZGUgc3VmZmljaWVudCBpbmZvcm1hdGlvbgorCXRvIGFsbG93IHRoZSBwYXJhbWV0ZXJzIHRvIGJlIG1hdGNoZWQgcHJvcGVybHkuCisJKCpjbXBzaV9uZWdzaSk6IERlbGV0ZSAob2YgZHViaW91cyB2YWxpZGl0eSkuCisJKCpjbXBzaV9zaGlmdHNpX3N3cCk6IE5ldyBwYXR0ZXJuLgorCSgqY29uZGJyYW5jaF9yZXZlcnNlZCk6IE5vIGxvbmdlciBuZWVkcyB0byBjaGVjayBSRVZFUlNJQkxFX0NDX01PREUuCisJKG1vdntzaSxzZixkZn1jYywgKm1vdntzaSxzZixkZn17LF9oYXJkLF9zb2Z0fV9pbnNuKTogVGhlIG1vZGUgb2YgdGhlCisJSUZfVEhFTl9FTFNFIG11c3QgYmUgYXBwcm9wcmlhdGUgdG8gdGhlIHRhcmdldCAobm90IHZvaWQpLgorCSgqYW5kX3NjYyk6IE1hdGNoIGNjX3JlZ2lzdGVyLCBub3QgcmV2ZXJzaWJsZV9jY19yZWdpc3Rlci4KKwkoKmlvcl9jb21wYXJlX2NvbXBhcmUpOiBEZWxldGUuCisJKHNwbGl0IGZvciBpb3JfY29tcGFyZV9jb21wYXJlICsgY29uZGp1bXApOiBEZWxldGUuCisJKCppbXBvc3NpYmxlX2NvbmRfY29tcGFyZSk6IERlbGV0ZS4KKwkoKmNvbmRpdGlvbl9jb21wYXJlX2lvcik6IERlbGV0ZS4KKwkoKmNvbmRfbW92ZSk6IE1vZGUgZm9yIHRoZSBJRl9USEVOX0VMU0UgbXVzdCBiZSBTSW1vZGUuCisJKCphbmRfc2NjX3NjYyk6IERlbGV0ZS4KKwkoc3BsaXQgZm9yIGFuZF9zY2Nfc2NjICsgY29uZGp1bXApOiBEZWxldGUuCisJKCppbXBvc3NpYmxlX2NvbmRfYnJhbmNoX2FuZCk6IERlbGV0ZS4KKwkoKmNtcF9pdGUwLCAqY21wX2l0ZTEpOiBOZXcgcGF0dGVybnMuCisJKGlmX2NvbXBhcmVfbm90KTogU2hvdWxkIGJlIGFuIGFub255bW91cyBwYXR0ZXJuLgorCShQZWVwaG9sZSBmb3IgbW92ZSBhbmQgY29tcGFyZSk6IENvbXBhcmUgbW9kZSBtdXN0IGJlIG1vZGUgQ0Ntb2RlLgorCShTcGxpdCBwYXR0ZXJuIGZvciBjb21wYXJpbmcgc2hpZnRlZCByZWcgdGhlbiBicmFuY2gpOiBEZWxldGUuCisJKCpsb2FkcWlfY29tcGFyZSk6IERlbGV0ZSwgcmVwbGFjZWQgd2l0aCBhIHNwbGl0IHBhdHRlcm4gdG8gZG8KKwl0aGUgc2FtZSB0aGluZy4KKwkoKmNvbmRfbW92ZV9ub3QpOiBNYXRjaCBjY19yZWdpc3Rlciwgbm90IHJldmVyc2libGVfY2NfcmVnaXN0ZXIuCisKKwkqIGFybS5jICh7bG9hZCxzdG9yZX1fbXVsdGlwbGVfc2VxdWVuY2UpOiBOZXcgZnVuY3Rpb25zLgorCShlbWl0X3tsZG0sc3RtfV9zZXEpOiBOZXcgZnVuY3Rpb25zLgorCSogYXJtLm1kIChsb2FkL3N0b3JlIG11bHRpcGxlIHBlZXBob2xlcyk6IFJld3JpdGUgdXNpbmcgdGhlIGFib3ZlCisJZnVuY3Rpb25zLgorCShhbGwgcGF0dGVybnMgdGFraW5nIGltbWVkaWF0ZV9vcGVyYW5kKTogSWYgdGhlIGNvZGUgbGF0ZXIgYXNzdW1lcworCXRoaXMgaXMgYSBDT05TVF9JTlQsIHRoZW4gbWF0Y2ggY29uc3RfaW50X29wZXJhbmQgaW5zdGVhZC4KKworTW9uIEZlYiAyNiAxNzoyNjoxMyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjL3NwYXJjLm1kOiBBZGQgc3BhcmNsZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzLgorCShjb21wYXJlIGRlZmluZV9pbnNuJ3MpOiBNb3ZlIGNsb3NlciB0byBjb21wYXJlIGRlZmluZV9leHBhbmQncy4KKwkoMzIgYml0IG11bHRpcGx5IHBhdHRlcm5zKTogVXNlIGZvciBUQVJHRVRfU1BBUkNMRVQuCisJKCpzbWFjc2ksKnNtYWNkaSwqdW1hY2RpKTogTXVsdGlwbHkvYWNjdW11bGF0ZSBwYXR0ZXJucyBmb3IgdGhlCisJc3BhcmNsZXQuCisKK1NhdCBGZWIgMjQgMTk6MTM6MjkgMTk5NiAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBtaHBjYy5lZHU+CisKKwkqIHJzNjAwMC5tZCAobW92c2Ygc3BsaXQpOiBGaXggdHlwbyBpbiBsYXN0IHBhdGNoLgorCitTYXQgRmViIDI0IDEwOjAyOjU1IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKGZhdGFsX2luc24pOiBGbHVzaCBzdGRvdXQvc3RkZXJyLgorCitTYXQgRmViIDI0IDAyOjAzOjI4IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhLm1kIChhYnNzaTIpOiBSZXdvcmsgdG8gYXZvaWQgbWF0Y2hpbmcgY29uc3RyYWludHMuCisKK0ZyaSBGZWIgMjMgMTE6MjE6NDMgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFdhcm4gaWYgYm90aCBQSUMgY29kZSBnZW5lcmF0aW9uIGFuZAorCXByb2ZpbGluZyBhcmUgcmVxdWVzdGVkLgorCitGcmkgRmViIDIzIDA4OjQ3OjM4IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxKQorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX1NFVEpNUCk6IFNldCBDT05TVF9DQUxMX1AKKwlvbiBOT1RFX0lOU05fU0VUSk1QIGluc3RlYWQgb2YgZW1pdHRpbmcgVVNFIGluc25zIGZvciBjYWxsLXNhdmVkIHJlZ3MuCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEZvciBzcGVjaWFsIENPTlNUX0NBTExfUCBOT1RFX0lOU05fU0VUSk1QLAorCW1hcmsgYWxsIGNhbGwtc2F2ZWQgcmVncyBhcyB1c2VkLgorCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IFJlY29yZCBOT1RFX0lOU05fU0VUSk1QIGlmIG5vCisJQ0FMTF9JTlNOIGFzIHByZXY7IHByZXNlcnZlIENPTlNUX0NBTExfUCBiaXQuCisJKHJlZW1pdF9ub3Rlcyk6IFJlc3RvcmUgQ09OU1RfQ0FMTF9QLgorCitUaHUgRmViIDIyIDE3OjQ1OjEyIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChzcGFyY2xldC0qLWFvdXQqKTogU2V0IGV4dHJhX2hlYWRlcnMuCisJKiBnaW5jbHVkZS9pbmwtc3BhcmMuaDogTmV3IGZpbGUuCisKK1dlZCBGZWIgMjEgMjA6Mzk6NTMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKHNwYXJjNjQtKi1zb2xhcmlzMiopOiBNZXJnZSB3aXRoIHNwYXJjLSotc29sYXJpczIqLgorCSogc3BhcmMvc3BhcmMuaCAoZW51bSBwcm9jZXNzb3JfdHlwZSk6IERlY2xhcmUuCisJKHNwYXJjX2NwdV9hdHRyKTogRGVmaW5lLgorCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAtbXR1bmU9LgorCShzcGFyY19zZWxlY3QpOiBEZWNsYXJlLgorCShzcGFyY19jcHVfc3RyaW5nKTogRGVsZXRlLgorCShGSVJTVF9QU0VVRE9fUkVHSVNURVIpOiBTZXQgdG8gMTAwLgorCSh7RklYRUQsQ0FMTF9VU0VEfV9SRUdJU1RFUlMpOiBNZXJnZSAhdjkvdjkgY2FzZXMuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTWFyayAlZzUgYXMgZml4ZWQgaWYgIXY5LgorCU1hcmsgJWcxIGFzIGZpeGVkIGlmIHY5LiAgRml4IHY5LW9ubHkgcmVncyBpZiAhdjkuCisJTWFyayBmcHsxNi4uNDd9IGFzIGNhbGwtc2F2ZWQgaWYgdjkuCisJKGVudW0gcmVnX2NsYXNzKTogTWVyZ2UgIXY5L3Y5IGNhc2VzLgorCShSRUdfQ0xBU1NfTkFNRVMsUkVHX0NMQVNTX0NPTlRFTlRTLFJFR05PX1JFR19DTEFTUyk6IExpa2V3aXNlLgorCShSRUdfQUxMT0NfT1JERVIsUkVHX0xFQUZfQUxMT0NfT1JERVIsTEVBRl9SRUdJU1RFUlMpOiBMaWtld2lzZS4KKwkoRlBfUkVHX0NMQVNTX1AsU1BBUkNfUkVHSVNURVJfTkFNRVMpOiBMaWtld2lzZS4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogVGVzdCBUQVJHRVRfVjkgYXQgcnVudGltZS4KKwkqIHNwYXJjL3NwYXJjLmMgKHNwYXJjX2NwdV9zdHJpbmcpOiBEZWxldGUuCisJKHNwYXJjX3NlbGVjdCk6IE5ldyBnbG9iYWwuCisJKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBIYW5kbGUgLW10dW5lPXh4eC4KKwkqIHNwYXJjL3NwYXJjLm1kIChjcHUgYXR0cik6IEFkZCBzcGFyY3tsaXRlLGxldH0gaW1wbGVtZW50YXRpb25zLgorCSogc3BhcmMvc3A2NC1zb2wyLmg6IERlbGV0ZWQuCisKKwkqIGFybS9hcm0ubWQgKGNvbnN0dGFibGVfZW5kKTogRGVsZXRlIGNhbGwgdG8gdGV4dF9zZWN0aW9uLgorCShhbGlnbl80KTogRGVsZXRlIGNhbGwgdG8gcmVhZG9ubHlfZGF0YV9zZWN0aW9uLgorCitXZWQgRmViIDIxIDE0OjI5OjA2IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworICAgICAgICAqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEluaXRpYWxpemUgaXNfYm9vbC4gIENvcnJlY3RseQorICAgICAgICBoYW5kbGUgMCBhcyBhIHBvaW50ZXIgdmFsdWUgcGFyYW1ldGVyLgorCitXZWQgRmViIDIxIDE0OjEzOjI5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogdHJlZS5jIChkZWNsX2Z1bmN0aW9uX2NvbnRleHQpOiBEbyBkZWNsX2Z1bmN0aW9uX2NvbnRleHQgcmlnaHQgZm9yCisJZnVuY3Rpb24tbG9jYWwgY2xhc3Nlcy4KKworV2VkIEZlYiAyMSAxMjo0Mjo1MiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBjLXR5cGVjay5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogRG9uJ3QgZGVyZWZlcmVuY2UKKwlhIG51bGwgcG9pbnRlciBvbiBwYXJ0aWFsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4KKworV2VkIEZlYiAyMSAxMTo0OTo1OCAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwL3JzNjAwMC5oIChBU01fT1VUUFVUX0VYVEVSTkFMKTogQXBwZW5kIHNlY3Rpb24gaW5mbworCWV2ZW4gd2hlbiB2ZXJiYXRpbSBzeW1ib2wgcHJlZml4ICcqJyBwcmVzZW50LgorCSogcnM2MDAwL2FpeDNuZXdhcy5oIChBU01fT1VUUFVUX0VYVEVSTkFMKTogU2FtZS4KKwkqIHJzNjAwMC9haXg0MS5oIChBU01fT1VUUFVUX0VYVEVSTkFMKTogU2FtZS4KKwkqIHJzNjAwMC9wb3dlcnBjLmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBTYW1lLgorCSogcnM2MDAwL3dpbi1udC5oIChBU01fT1VUUFVUX0VYVEVSTkFMKTogU2FtZS4KKworV2VkIEZlYiAyMSAwMzo1NTozMiAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jICh2YWxpZGF0ZV9lbHNlKTogRG9uJ3QgbG9vcCBnaXZlbiBgI2VuZGlmIC8nLgorCUhhbmRsZSBtdWx0aXBsZSBhZGphY2VudCBiYWNrc2xhc2gtbmV3bGluZXMgY29ycmVjdGx5LgorCUFjY2VwdCBhIG5ldyBwYXJhbWV0ZXIgTElNSVQgdG8gc3BlY2lmeSBlbmQgb2YgaW5wdXQ7CisJdGhpcyBwcmV2ZW50cyBjb25mdXNpb24gd2hlbiB0aGUgaW5wdXQgY29udGFpbnMgJ1wwJyBjaGFyYWN0ZXJzLgorCisJKGNvbGxlY3RfZXhwYW5zaW9uKTogRml4IG9mZi1ieS0xIGVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBgKi8nCisJYXQgZW5kIG9mIGEgY29tbWVudCB1c2VkIGZvciB0cmFkaXRpb25hbCB0b2tlbiBjb25jYXRlbmF0aW9uLgorCisJKG1hY2FyZzEpOiBGaXggb2ZmLWJ5LTEgZXJyb3Igd2hlbiBza2lwcGluZyBwYXN0IGAqLycKKwlhdCBlbmQgb2YgY29tbWVudC4KKworVHVlIEZlYiAyMCAxNjoxMjozMSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGhhcmQtcmVnLXNldC5oICh0d2ljZSB1bnJvbGxlZCBHT19JRl9IQVJEX1JFR19FUVVBTCk6IEFkZCBtaXNzaW5nIFwuCisKK1R1ZSBGZWIgMjAgMTQ6MjE6MTYgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEuaCAoREJYX0NPTlRJTl9MRU5HVEgpOiBEZWZpbmUgdG8gNDAwMCBjaGFyYWN0ZXJzLgorCisJKiBwYS5jIChocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IEFsd2F5cyBlbWl0IGEgYmxvY2thZ2UgaW5zbgorCWJlZm9yZSBjdXR0aW5nIGJhY2sgdGhlIHN0YWNrLgorCitNb24gRmViIDE5IDE5OjQyOjE1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KKworCSogc3BhcmMvc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1teyxuby19aW1wdXJlLXRleHQuCisJKE1BU0tfSU1QVVJFX1RFWFQsIFRBUkdFVF9JTVBVUkVfVEVYVCk6IERlZmluZS4KKwkoTElOS19TUEVDKTogT25seSBhZGQgYC1hc3NlcnQgcHVyZS10ZXh0JyBpZiAtbWltcHVyZS10ZXh0IHdhc24ndCB1c2VkLgorCitNb24gRmViIDE5IDE5OjIwOjE1IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoc3BhcmMtYW91dCk6IHNwYXJjLWFvdXQuaCByZW5hbWVkIHRvIGFvdXQuaC4KKwkoc3BhcmNsZXQtYW91dCk6IExpa2V3aXNlLgorCShzcGFyY2xpdGUtKi1hb3V0Kik6IFJlbmFtZWQgZnJvbSBzcGFyY2xpdGUtKi0qLgorCURvbid0IHNldCB1c2VfY29sbGVjdDIuCisJKHRhcmdldF9jcHVfZGVmYXVsdCk6IFNldCB0byBUQVJHRVRfQ1BVXzxjcHU+IGZvciBzcGFyYy4KKworCSogc3BhcmMvc3BhcmMuaCAoVEFSR0VUX0NQVV9zcGFyY3ssbGV0LGxpdGUsNjR9KTogRGVmaW5lLgorCSh7Q1BQLEFTTX1fREVGQVVMVF9TUEVDKTogU2V0IGZyb20gVEFSR0VUX0NQVV9mb28uCisJKFNQQVJDX0FSQ0g2NCBDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfX2FyY2g2NF9fLgorCShDUFBfU1BFQyk6IEFkZCAlKGNwcF9jcHUpLgorCShDUFBfQ1BVX1NQRUMpOiBEZWZpbmUuCisJKENDMV9TUEVDKTogQ29udmVydCAtbTxjcHU+IHRvIC1tY3B1PTxjcHU+LgorCShBU01fU1BFQyk6IEFkZCAlKGFzbV9jcHUpLgorCShBU01fQ1BVX1NQRUMpOiBEZWZpbmUuCisJKEVYVFJBX1NQRUNTLFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IERlZmluZS4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IENhbGwgU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMgYWZ0ZXIKKwlzcGFyY19vdmVycmlkZV9vcHRpb25zLgorCSh7TUFTSyxUQVJHRVR9X1NVUEVSU1BBUkMpOiBEZWxldGUuCisJKHtNQVNLLFRBUkdFVH1fU1BBUkNMRVQpOiBEZWZpbmUuCisJKE1BU0tfSVNBKTogUmVuYW1lZCBmcm9tIE1BU0tfQ1BVUy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogRGVsZXRlIG5vLXt2OCxzcGFyY2xpdGV9LgorCShzcGFyY19jcHUsc3BhcmNfY3B1X3N0cmluZyk6IERlY2xhcmUuCisJKHtTVUIsfVRBUkdFVF9PUFRJT05TKTogRGVmaW5lLgorCShGSVhFRF9SRUdJU1RFUlMpOiBBZGQgZGVmaW5pdGlvbnMgZm9yIHNwYXJjNjQgaW4gMzIgYml0IG1vZGUuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRG9uJ3Qgc2V0IGZpeGVkX3JlZ3NbMjM0XSBpZiBzcGFyYzY0LgorCURvbid0IHNldCBjYWxsX3VzZWRfcmVnc1s0OC4uODBdIGZvciBzcGFyYzY0IGluIDMyIGJpdCBtb2RlLgorCURvbid0IGNsb2JiZXIgZml4ZWRfcmVnc1syMzRdIGlmIC1mZml4ZWQtIHdhcyBwYXNzZWQuCisJKEFESlVTVF9DT1NUKTogQ2hhbmdlIHRlc3QgZm9yIHN1cGVyc3BhcmMuCisJKiBzcGFyYy9zcGFyYy5jIChzcGFyY19jcHVfc3RyaW5nLHNwYXJjX2NwdSk6IE5ldyBnbG9iYWxzLgorCShzcGFyY19vdmVycmlkZV9vcHRpb25zKTogU2V0IElTQSBhbmQgQ1BVIGZyb20gc3BhcmNfY3B1X3N0cmluZy4KKwlEZWxldGUgdGVzdHMgZm9yIHY5IG9ubHkgc3dpdGNoZXMgaWYgbm90IHY5LgorCUVycm9yIGlmIC1tY3B1PXY5IGFuZCB2OSBzdXBwb3J0IG5vdCBjb21waWxlZCBpbi4KKwkqIHNwYXJjL3NvbDIuaCAoQ1BQX1NQRUMpOiBVc2UgJShjcHBfY3B1KS4KKwkoQVNNX1NQRUMpOiBMaWtld2lzZS4KKwkoQVNNX3tERUZBVUxULENQVX1fU1BFQyk6IFVzZSBTb2xhcmlzIHN5bnRheCBmb3Igc3BhcmM2NC4KKwkqIHNwYXJjL3N5c3Y0LmggKEFTTV9TUEVDKTogQWRkICUoYXNtX2NwdSkuCisJKiBzcGFyYy90LXNwYXJjYmFyZSAoTVVMVElMSUJfKik6IC1tdjggcmVuYW1lZCB0byAtbWNwdT12OC4KKwkqIHNwYXJjL3Qtc3BhcmNsaXRlIChNVUxUSUxJQl8qKTogRGVsZXRlIG1zb2Z0LWZsb2F0IGFuZCBtbm8tZmxhdCwKKwl0aGV5J3JlIHRoZSBkZWZhdWx0cy4gIEFkZCAtbWNwdT1mOTM0IGFzIHN5bm9ueW0gZm9yIC1tZnB1LgorCSogZ2luY2x1ZGUvdmEtc3BhcmMuaCAoX19hcmNoNjRfXyk6IFJlbmFtZWQgZnJvbSBfX3NwYXJjX3Y5X18uCisKKwkqIHNwYXJjL2xpdGUuaDogI2luY2x1ZGUgYW91dG9zLmguCisJKFRBUkdFVF9ERUZBVUxUKTogVXNlIE1BU0tfRk9PIHZhbHVlcy4KKwkqIHNwYXJjL3NwNjQtYW91dC5oOiAjaW5jbHVkZSBhb3V0b3MuaC4KKwkoVEFSR0VUX0RFRkFVTFQpOiBBZGQgTUFTS19BUFBfUkVHUy4KKwkoSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OLFJFQURPTkxZX0RBVEFfU0VDVElPTik6IERlbGV0ZS4KKwkqIHNwYXJjL3NwNjQtZWxmLmggKFRBUkdFVF9ERUZBVUxUKTogQWRkIE1BU0tfQVBQX1JFR1MuCisgCShDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfX2FyY2g2NF9fLgorCSogc3BhcmMvc3A2NC1zb2wyLmggKFRBUkdFVF9ERUZBVUxULCBTVUJUQVJHRVRfU1dJVENIRVMpOiBEZWxldGUuCisJKEFTTV9TUEVDKTogRGVsZXRlLgorCisJKiBzcGFyYy9zcGFyYy5oICh7TUFTSyxUQVJHRVR9X0ZSVyk6IERlbGV0ZS4KKwkoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCxJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VULAorCUJBU0Vfe0lOQ09NSU5HX0FSRyxPVVRHT0lOR19WQUxVRX1fUkVHLElOQ09NSU5HX1JFR05PLE9VVEdPSU5HX1JFR05PLAorCUZVTkNUSU9OX3tQUk9MT0dVRSxFUElMT0dVRX0sREVMQVlfU0xPVFNfRk9SX0VQSUxPR1VFKTogVEFSR0VUX0ZSVworCXJlbmFtZWQgdG8gVEFSR0VUX0ZMQVQuCisKKwkqIHNwYXJjL3NwYXJjLm1kIChjcHUgYXR0cik6IEFkZCBhbGwgY3B1IHZhcmlhbnRzLgorCShuZWd0ZjIsbmVnZGYyLGFic3RmMixhYnNkZjIpOiBVc2UgaXNhIGF0dHIsIG5vdCBhcmNoIGF0dHIsIGluCisJZGV0ZXJtaW5pbmcgaW5zbiBsZW5ndGhzLgorCisJKiBzcGFyYy9hb3V0Lmg6IFJlbmFtZWQgZnJvbSBzcGFyYy1hb3V0LmguCisJKENQUF9QUkVERUZJTkVTKTogRGVsZXRlIF9fR0NDX05FV19WQVJBUkdTX18uCisJQWRkIC1BY3B1KHNwYXJjKSAtQW1hY2hpbmUoc3BhcmMpLgorCitNb24gRmViIDE5IDE3OjQ5OjA4IDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAubWQgKG1vdnNmIHNwbGl0KTogVXNlIFNVQlJFRyBub3Qgb3BlcmFuZF9zdWJ3b3JkLgorCShtb3ZkZiBzcGxpdCk6IG9wZXJhbmRfc3Vid29yZCBUQVJHRVRfMzJCSVQgYW5kIG5ldyBzcGxpdCB1c2luZworCVNVQlJFRyBmb3IgVEFSR0VUXzY0QklULgorCSogcnM2MDAwLmMgKGVhc3lfZnBfY29uc3RhbnQpOiBSZXdyaXRlIHRvIG5vdCB1c2Ugb3BlcmFuZF9zdWJ3b3JkLgorCShpbnB1dF9vcGVyYW5kKTogUmVtb3ZlIGZpbmFsIGFkZF9vcGVyYW5kIHRlc3QgbWFkZSBpcnJlbGV2YW50IGJ5CisJRGVjLiA4IGNoYW5nZS4KKwkob3V0cHV0X3RvYyk6IEhhbmRsZSBESW1vZGUgdmFsdWVzLgorCitNb24gRmViIDE5IDEzOjM4OjAwIDE5OTYgIExlZSBJdmVyc29uICA8bGVlaUBDYW5hZGEuQUkuU1JJLkNPTT4KKworCSogaTM4Ni9zb2wyLmggKFNXSVRDSF9UQUtFU19BUkcpOiBSZXN0b3JlIC1SLgorCSogc3BhcmMvc29sMi5oIChTV0lUQ0hfVEFLRVNfQVJHKTogTGlrZXdpc2UuCisKK01vbiBGZWIgMTkgMDg6MTk6MDAgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiBoYXJkLXJlZy1zZXQuaCAoSEFSRF9SRUcgbWFjcm9zKTogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbgorCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaGFyZCByZWdpc3RlcnMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0bworCTQqSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBoYXJkIHJlZ2lzdGVycywgdW5yb2xsIHRoZSBsb29wcyBieSBoYW5kLgorCitNb24gRmViIDE5IDA3OjM1OjA3IDE5OTYgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUB0bWcuc2U+CisKKwkqIHJzNjAwMC5tZCAobm90OlNJIHdpdGggYXNzaWduIGFuZCBjb21wYXJlKTogRml4IHR5cG8uCisJKiAobm90OkRJIHdpdGggYXNzaWduIGFuZCBjb21wYXJlKTogTGlrZXdpc2UuCisKK01vbiBGZWIgMTkgMDc6MTc6MjUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3BhcmMubWQgKG5vbmxvY2FsX2dvdG8pOiBObyBsb25nZXIgbmVlZCBVU0Ugb2YgJW8wLgorCShnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUpOiBTaG93IHVzZXMgJW8wLgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgSU9SKTogRml4IHR5cG8gaW4gY29tbXV0aW5nCisJSU9SIGFuZCBMU0hJRlRSVC4KKworCSogYWxwaGEuYyAoY2FsbF9vcGVyYW5kKTogSWYgaW4gUkVHLCBvbmx5IHJlZyAyNyB2YWxpZC4KKworTW9uIEZlYiAxOSAwNjo1NzozNCAxOTk2ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IEZvciAzMi1iaXQgdGFyZ2V0cywgcmV0dXJuCisJdGhlIGFwcHJvcHJpYXRlIHN1YndvcmQgb2YgZXh0ZW5kZWQgcHJlY2lzaW9uIENPTlNUX0RPVUJMRXMuCisKKwkqIGFybS5jIChvZmZzZXR0YWJsZV9tZW1vcnlfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkoYWxpZ25hYmxlX21lbW9yeV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShnZW5fcm90YXRlZF9oYWxmX2xvYWQpOiBOZXcgZnVuY3Rpb24uCisJKGdldF9hcm1fY29uZGl0aW9uX2NvZGUpOiBFeHRyYWN0IHRoZSBtb2RlIG9mIHRoZSBjb21wYXJpc29uIGFuZAorCXVzZSBpdCB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCByZXR1cm4gdmFsdWUuCisJKiBhcm0uaCAoRVhUUkFfQ0NfTU9ERVMsIEVYVFJBX0NDX05BTUVTKTogQWRkIENDX1ptb2RlLgorCShTRUxFQ1RfQ0NfTU9ERSk6IHJldHVybiBDQ19abW9kZSBpZiB0aGUgb3BlcmFuZCBpcyBRSW1vZGUuICBBbGxvdyBMVAorCWFuZCBHRSBjb21wYXJpc29ucyBpbiBDQ19OT09WbW9kZS4KKwkoUFJFRElDQVRFX0NPREVTKTogYWRkIG9mZnNldHRhYmxlX21lbW9yeV9vcGVyYW5kIGFuZAorCWFsaWduYWJsZV9tZW1vcnlfb3BlcmFuZC4KKwkqIGFybS5tZCAoKnplcm9leHRyYWN0W3FzXWlfY29tcGFyZTBfc2NyYXRjaCk6IFVzZSBjb25zdF9pbnRfb3BlcmFuZAorCWZvciBvcGVyYW5kcyAxIGFuZCAyLgorCShzcGxpdCBwYXR0ZXJucyBmb3IgYWxpZ25lZCBtZW1vcnkgaGFsZi13b3JkIG9wZXJhdGlvbnMpOiBOZXcgcGF0dGVybnMuCisJKG1vdmhpKTogSGFuZGxlIG1lbW9yeSBhY2Nlc3NlcyB3aGVyZSB0aGUgYWxpZ25tZW50IGlzIGtub3duIGluIGEgbW9yZQorCWVmZmljaWVudCBtYW5uZXIuCisJKCpjb21wYXJlcWlfZXEwKTogVXNlIENDX1ptb2RlLgorCitNb24gRmViIDE5IDA1OjM0OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1Xe25vLSx9c2lnbi1jb21wYXJlLgorCisJKiBjLXRyZWUuaDogRGVjbGFyZSB3YXJuX3NpZ25fY29tcGFyZS4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogQ2hlY2sgd2Fybl9zaWduX2NvbXBhcmUgcmF0aGVyCisgICAgICAgIHRoYW4gZXh0cmFfd2FybmluZ3MgdG8gZGVjaWRlIHdoZXRoZXIgdG8gd2FybiBhYm91dCBjb21wYXJpc29uIG9mCisgICAgICAgIHNpZ25lZCBhbmQgdW5zaWduZWQuCisKKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgd2Fybl9zaWduX2NvbXBhcmUuICAtV2FsbAorICAgICAgICBpbXBsaWVzIC1Xc2lnbi1jb21wYXJlLgorCitTdW4gRmViIDE4IDIxOjEzOjQ0IDE5OTYgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBjLWxleC5jICh5eWxleCwgY2FzZSAnMCcuLic5JywnLicpOiBGb3IgY2FzZXMgJzAnIGFuZCAnMScsCisJY2hlY2sgZm9yIHNpbmdsZSBkaWdpdCBjb25zdGFudCBiZWZvcmUgcmVzb3J0aW5nIHRvIGdlbmVyYWwKKwludW1iZXIgcHJvY2Vzc2luZy4KKworU3VuIEZlYiAxOCAxOToyOTo0NCAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAbmV0YnNkLm9yZz4KKworCSogbTY4ay5oIChUQVJHRVRfNjgwNjApOiBOZXcgbWFjcm8uCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbTY4MDYwLgorCSogbTY4ay5tZCAoY29uc3RfdW11bHNpM19oaWdocGFydCk6IERpc2FibGUgZm9yIFRBUkdFVF9NNjgwNjAuCisJKGZ0cnVuY2RmMiwgZnRydW5jc2YyLCBtdWxkZjMsIG11bHNpZGkzKTogTGlrZXdpc2UuCisJKHNtdWxzaTNfaGlnaHBhcnQsIHVtdWxzaTNfaGlnaHBhcnQsIHVtdWxzaWRpMyk6IExpa2V3aXNlLgorCisJKiB7bTY4ayxuczMyayxzcGFyY30vbmV0YnNkLmggKERCWF9OT19YUkVGUyk6IFJlbW92ZWQuCisKK1N1biBGZWIgMTggMTM6Mjk6NTYgMTk5NiAgQ2hhcmxlcyBNLiBIYW5udW0gIChteWNyb2Z0QG5ldGJzZC5vcmcpCisKKwkqIGMtY29tbW9uLmMgKGNoZWNrX2Zvcm1hdF9pbmZvKTogV2FybiBhYm91dCBgTCcgaWYgLXBlZGFudGljLgorCitGcmkgRmViIDE2IDIwOjEzOjIzIDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KToKKwlCcmluZyBiYWNrIGNvbnZlcnNpb24gdG8gdW5pb24gd2l0aG91dCBhIGNhc3QsCisJdW5kb2luZyB0aGUgSmFuIDE2IGNoYW5nZSwgYnV0IHdpdGggdGhlIGZvbGxvd2luZyBkaWZmZXJlbmNlczoKKworCS0gVGhlIHVuaW9uIG11c3QgaGF2ZSB0aGUgdHJhbnNwYXJlbnRfdW5pb24gYXR0cmlidXRlLgorCS0gVGhlIGNvbnZlcnNpb24gbXVzdCBiZSBmb3IgYSBmdW5jdGlvbiBhcmd1bWVudC4KKwktIFdhcm4gY29uc2lzdGVudGx5IGFib3V0IHN1Y2ggY29udmVyc2lvbnMgaWYgcGVkYW50aWMuCisJLSBEbyBub3Qgd2FybiBhYm91dCBhbiBhc3NpZ25tZW50IGluY29tcGF0aWJpbGl0eSBmb3Igb25lIHVuaW9uIG1lbWJlcgorCSAgaWYgYW5vdGhlciB1bmlvbiBtZW1iZXIgaXMgY29tcGF0aWJsZSB3aXRoIG5vIHdhcm5pbmcuCisKK0ZyaSBGZWIgMTYgMTI6MDY6MjEgMTk5NiAgU3RhbiBDb3ggIDxjb3hzQHNwaWZmLmdudS5haS5taXQuZWR1PgorCisJKiBpMzg2LmMgKGl4ODZfKl9iaW5hcnlfb3BlcmF0b3IqKTogQWxsb3cgQ09OU1RfSU5UIGFzIG9wZXJhbmQxCisJb2YgTUlOVVMuCisJKiBpMzg2L2RndXguaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBDYWxsIG9wdGltaXphdGlvbl9vcHRpb25zLgorCitGcmkgRmViIDE2IDA4OjM5OjQ3IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZTogQ2hhbmdlIHN0ZG91dCByZXBvcnQgd2hlbiBoYXZlIG11bHRpcGxlIGZpbGVzIGluCisJdG1fZmlsZSwgaG9zdF94bV9maWxlLCBvciBidWlsZF94bV9maWxlLgorCShhMjlrLSotYnNkKTogVXNlIGJvdGggYTI5ay5oIGFuZCB1bml4LmguCisJKGEyOWstKi11ZGkpOiBSZW5hbWUgYTI5ay11ZGkuaCB0byB1ZGkuaDsKKwl1c2UgYTI5ay5oLCBkYnhjb2ZmLmgsIGFuZCBpdC4KKwkoYTI5ay0qLXZ4d29ya3MpOiBVc2UgYTI5ay5oLCBkYnhjb2ZmLmgsIGEyOWsvdWRpLmgsIGFuZCBhMjlrL3Z4MjlrLmguCisJKGFscGhhLWRlYy1vc2ZbMjM0NTY3ODldKik6IFVzZSBhbHBoYS5oLCBub3Qgb3NmMi5oLgorCShhbHBoYS1kZWMtb3NmMS4yKTogVXNlIGFscGhhLmggYW5kIGFscGhhL29zZjEyLmguCisJKGFscGhhLSotb3NmKik6IEFkZCBleHBsaWNpdCBhc3NpZ25tZW50IG9mIHRtX2ZpbGUuCisJKiBhMjlrL3VkaS5oOiBSZW5hbWVkIGZyb20gYTI5ay11ZGkuaC4KKwlEb24ndCBpbmNsdWRlIGEyOWsuaCBvciBkYnhjb2ZmLmguCisJKiBhMjlrL3VuaXguaDogRG9uJ3QgaW5jbHVkZSBhMjlrLmguCisJKiBhMjlrL3Z4MjlrLmg6IERvbid0IGluY2x1ZGUgYTI5ay11ZGkuaC4KKwkqIGFscGhhLmggKFdDSEFSX1RZUEUsIFdDSEFSX1RZUEVfU0laRSk6IFVzZSB1bnNpZ25lZCBpbnQuCisJKiBhbHBoYS9vc2YyLmg6IERlbGV0ZWQuCisJKiBhbHBoYS9vc2YxMi5oOiBEb24ndCBpbmNsdWRlIGFscGhhLmguCisJKFdDSEFSX1RZUEUsIFdDSEFSX1RZUEVfU0laRSk6IFVzZSBzaG9ydCB1bnNpZ25lZCBpbnQuCisJKiBhbHBoYS93aW4tbnQuaCAoV0NIQVJfVFlQRSwgV0NIQVJfVFlQRV9TSVpFKTogVXNlIHNob3J0IHVuc2lnbmVkIGludC4KKworVGh1IEZlYiAxNSAxODoyNjowNCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9udHN0YWNrLmFzbSAoX19hbGxvY2F0ZV9zdGFjayk6IFJvdW5kIHVwIGxlbmd0aCB0byAxNgorCWJ5dGUgYm91bmRhcnkuCisKKwkqIHJzNjAwMC5tZCAoYWxsb2NhdGVfc3RhY2spOiBPbiBXaW5kb3dzIE5ULCBjYWxsIHNldF9zcCB0bworCWluZGljYXRlIHRvIENTRSB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGNoYW5nZXMgd2l0aCB0aGUgY2FsbCB0bworCV9fYWxsb2NhdGVfc3RhY2suCisJKHNldF9zcCk6IE5ldyBwYXR0ZXJuLgorCitUaHUgRmViIDE1IDE2OjQ5OjE1IDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogQWxsb2NhdGUgcmVnX21hcCB3aXRoIHNpemUKKwliYXNlZCBvbiByZWdub19wb2ludGVyX2ZsYWdfbGVuZ3RoIGluc3RlYWQgb2YgbWF4X3JlZysxLgorCitUaHUgRmViIDE1IDA3OjQ4OjM0IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChycGMvdHlwZXMuaCk6IFJlbW92ZSBzcHVyaW91cyAibHMiIGNvbW1hbmQuCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MsIGNhc2UgVVNFKTogSWYgdXNpbmcgYSByZWdpc3RlciB0aGF0CisJaXMgc291cmNlIG9mIGVsaW1pbmF0aW9uLCBzaG93IGNhbid0IGJlIGVsaW1pbmF0ZWQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fU0VUSk1QKTogU2hvd3MgY2xvYmJlcnMgRlAKKwlhbmQgYWxsIGNhbGxlci1zYXZlIHJlZ2lzdGVycy4KKwlTZXQgY3VycmVudF9mdW5jdGlvbl9oYXNfbm9ubG9jYWxfZ290by4KKworV2VkIEZlYiAxNCAxMzo1MTo1NSAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLm1kIChmaXhfdHJ1bmNkZnNpMik6IFVzZSBTVUJSRUcgbm90IG9wZXJhbmRfc3Vid29yZC4KKwkobW92ZGkpOiBUZXN0IEhPU1RfQklUU19QRVJfV0lERV9JTlQgYXQgYnVpbGQgdGltZS4KKwkqIGNvbGxlY3QyLmMgKHNjYW5fbGlicmFyaWVzKTogQXBwZW5kICcvJyB0byBpbXBvcnQgcGF0aCBpZiBtaXNzaW5nLgorCitXZWQgRmViIDE0IDA5OjAxOjU1IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChtb3ZkaSk6IFVzZSBIT1NUX1dJREVfSU5ULCBub3QgbG9uZyBsb25nLgorCitUdWUgRmViIDEzIDE5OjM2OjIxIDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogIEZpeCBmbG93IGNvbnRyb2wgdGhpbmtvIChtZXJnZSBlcnJvcikuCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogIFBhc3MgY29ycmVjdCB2YWx1ZSB0byByZWN1cnNpdmUgY2FsbC4KKworV2VkIEphbiAzMSAxMTozNDo0NSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgVEFSR0VUX0VYUFIpOiBXZSBtdXN0IGFsd2F5cyBzdG9yZQorCWludG8gdGhlIGFsbG9jYXRlZCBzbG90IGZvciBUQVJFR1RfRVhQUnMuCisKK1R1ZSBGZWIgMTMgMTg6Mjc6MDUgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogY29uZmlndXJlIChwb3dlcnBjLWlibS1haXgzKTogTG9vayBmb3IgMy4yLngsIG5vdCAzLjJ4LgorCisJKiBmaXhpbmNsdWRlcyAobWVtb3J5LmgpOiBGaXggaXQgYWxzbyBvbiBzeXNWNjguCisKK1R1ZSBGZWIgMTMgMTc6NTk6MDMgMTk5NiAgTGVlIEl2ZXJzb24gIDxsZWVpQENhbmFkYS5BSS5TUkkuQ09NPgorCisJKiBnY2MuYyAoREVGQVVMVF9TV0lUQ0hfVEFLRVNfQVJHKTogTmV3IG1hY3JvLCBmcm9tIFNXSVRDSF9UQUtFU19BUkcuCisJKFNXSVRDSF9UQUtFU19BUkcpOiBVc2UgaXQuCisJKiBpMzg2L3tvc2Zyb3NlLHNvbDJ9LmggKFNXSVRDSF9UQUtFU19BUkcpOiBMaWtld2lzZS4KKwkqIG1pcHMve2dudSxtaXBzfS5oIChTV0lUQ0hfVEFLRVNfQVJHKTogTGlrZXdpc2UuCisJKiBzcGFyYy9zb2wyLmggKFNXSVRDSF9UQUtFU19BUkcpOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9zdnI0LmggKFNXSVRDSF9UQUtFU19BUkcpOiBMaWtld2lzZS4KKworVHVlIEZlYiAxMyAxNzo0Mzo0NiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGludGVncmF0ZS5jIChzYXZlX2NvbnN0YW50c19pbl9kZWNsX3RyZWVzKTogTmV3IGZ1bmN0aW9uLgorCShzYXZlX2Zvcl9pbmxpbmVfY29weWluZywgc2F2ZV9mb3JfaW5saW5lX25vY29weSk6IENhbGwgaXQuCisKK1R1ZSBGZWIgMTMgMTc6NDA6MjcgMTk5NiAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBGaXggdHlwbyBpbiBleHRlbmRxZmgyIGNhc2UuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogTWFrZSBzb21lIG5vbi1ncm91cCBjb2RlIG5vIGxvbmdlcgorIAljb25kaXRpb25hbCBvbiBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTLgorCitUdWUgRmViIDEzIDE3OjMwOjQ1IDE5OTYgIEoib3JuIFJlbm5lY2tlIChhbXlsYWFyQG1lb2x5b24uaGFuc2UuZGUpCisKKwkqIHBkcDExLmM6ICNpbmNsdWRlIGZsYWdzLmgKKwkob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLCBmdW5jdGlvbl9lcGlsb2d1ZSk6IFJlbW92ZSBkZWNsYXJhdGlvbnMKKwlvZiBjYWxsX3VzZWRfcmVncyBhbmQgZnJhbWVfcG9pbnRlcl9uZWVkZWQuCisKKwkqIGMtY29tbW9uLmMgKG92ZXJmbG93X3dhcm5pbmcpOiBGaXggdHlwbyBpbiB3YXJuaW5nIG1lc3NhZ2UuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IFRSRUVfQVNNX1dSSVRURU4gc2F5cyBpZiBkdXBsaWNhdGVfZGVjbHMKKwltb2RpZmllZCBkZWNsYXJhdGlvbiB0byBtYXRjaCBhbiBvdXRzaWRlIGZpbGUgc2NvcGUgZGVjbGFyYXRpb24uCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogRG9uJ3QgdXNlIEFERFJfRElGRl9WRUMgZm9yIFBJQyBpZgorCUFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCBpcyBub3QgZGVmaW5lZC4KKwkqIGEyOWsuaCwgcm9tcC5oIChBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBSZW1vdmUuCisKK1R1ZSBGZWIgMTMgMTM6MzY6MzYgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvY3lnd2luMzIuaCAoQ1BQX1BSRURFRklORVMpOiBEbyBub3QgZGVmaW5lIFBQQywganVzdAorCWRlZmluZSBfX1BQQ19fLiAgQWxzbyBkZWZpbmUgX0FSQ0hfUFBDIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUKKwlvdGhlciByczYwMDAvcG93ZXJwYyBwb3J0cy4KKwkqIHJzNjAwMC93aW4tbnQuaCAoQ1BQX1BSRURFRklORVMpOiBEaXR0by4KKworCSogcnM2MDAwL2N5Z3dpbjMyLmggKExJQkdDQ19TUEVDKTogRG9uJ3QgZGVmaW5lLCBhbHdheXMgbGluayBpbi4KKwkoU0RCX0RFQlVHR0lOR19JTkZPKTogVW5kZWYuCisJKERCWF9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KKwkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lIGFzIERCWF9ERUJVRy4KKworCSogcnM2MDAwL3Qte2N5Z3dpbjMyLHdpbm50fSAoTVVMVElMSUIqKTogUmVtb3ZlIG11bHRpbGliIHN1cHBvcnQuCisKKwkqIHJzNjAwMC94LWN5Z3dpbjMyIChMQU5HVUFHRVMpOiBEZWxldGUsIGRvbid0IG92ZXJyaWRlLgorCisJKiByczYwMDAvbnRzdGFjay5hc206IE5ldyBmaWxlIHRvIHByb3ZpZGUgX19hbGxvY2F0ZV9zdGFjaywgd2hpY2gKKwlndWFyYW50ZWVzIGFsbCBwYWdlcyBpbiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdGFjayBmcmFtZSBhcmUKKwl0b3VjaGVkIGluIG9yZGVyLCBzbyB0aGF0IHRoZSBzdGFjayBpcyBwcm9wZXJseSBncm93bi4KKworCSogcnM2MDAwL2NneXdpbjMyLmFzbTogRGVsZXRlIHVudXNlZCBmaWxlLgorCisJKiByczYwMDAvdC17Y3lnd2luMzIsd2lubnR9IChMSUIyRlVOQ1NfRVhUUkEpOiBBZGQgbnRzdGFjay5TCisJdG8gbGliZ2NjMiBidWlsZC4KKworCSogcnM2MDAwLm1kIChhbGxvY2F0ZV9zdGFjayk6IEZvciBOVCwgY2FsbCBfX2FsbG9jYXRlX3N0YWNrIHRvCisJYnVtcCB0aGUgc3RhY2sgaWYgdGhlIHNpemUgaXMgbGFyZ2Ugb3IgdmFyaWFibGUuCisKKwkqIGxpYmdjYzEtdGVzdC5jIChtYWluQ1JUU3RhcnR1cCxfX3N0YXJ0KTogTmV3IHN0YXJ0dXAgZnVuY3Rpb25zCisJdG8gc2lsZW5jZSBtb3JlIGxpbmtlcnMuCisKK1R1ZSBGZWIgMTMgMTM6MzA6NTMgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yX2ZpZWxkKTogT25seSBjYWxsIGNoYW5nZV9hZGRyZXNzIGlmCisJYml0cG9zIGlzIG5vbnplcm8uCisKK1R1ZSBGZWIgMTMgMDg6MjE6MDEgMTk5NiAgRmlsYSBLb2xvZG55IDxmaWxhQGliaS5jb20+CisKKwkqIGkzNzAvbXZzLmggKENQUF9TUEVDKTogQWRkICctdHJpZ3JhcGhzJyBiZWNhdXNlIElCTSdzIGggZmlsZXMKKwljb250YWluIHRoZW0uCisKK1R1ZSBGZWIgMTMgMDg6MTc6NTIgMTk5NiAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgorCisJKiBjLXR5cGVjay5jIChxdWFsaXR5X3R5cGUgcHJvdG90eXBlKTogVHlwbywgcmVuYW1lIGFzCisJcXVhbGlmeV90eXBlLgorCShidWlsZF9iaW5hcnlfb3ApOiBGaXggcHJlY2VkZW5jZSBlcnJvcnMuCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIG51bV9zaWduX2JpdF9jb3BpZXMsIHNpbXBsaWZ5X2NvbXBhcmlzb24pOgorCUZpeCBwcmVjZWRlbmNlIGVycm9ycy4KKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0KTogQ291bGQgcmV0dXJuIHdpdGhvdXQgYSB2YWx1ZS4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEZpeCBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcC4KKwkqIHJlZy1zdGFjay5jIChyZWNvcmRfcmVnX2xpZmVfcGF0KTogRml4IHByZWNlZGVuY2UgZXJyb3IuCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRml4IHByZWNlZGVuY2UgZXJyb3JzLgorCSogc3RtdC5jIChiY19wdXNoY2FzZSk6IEZpeCBwcmVjZWRlbmNlIGVycm9yLgorCitNb24gRmViIDEyIDIzOjE0OjAyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBBbHNvIHNldCBSVFhfSU5URUdSQVRFRF9QIHdoZW4KKyAJd2UgYXJlbid0IGdvaW5nIHRvIGVtaXQgdGhlIGlubGluZSBqdXN0IHlldC4KKworTW9uIEZlYiAxMiAyMTozMTowMiAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHJ0bC5oIChJTkxJTkVfUkVHTk9fUE9JTlRFUl9GTEFHLCBJTkxJTkVfUkVHTk9fUE9JTlRFUl9BTElHTik6CisJQWRkIG9uZSB0byBhcnJheSBpbmRleC4KKworTW9uIEZlYiAxMiAyMDo1NTozOSAxOTk2ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUgKGlbMzQ1XTg2LSotbGludXgqKTogU2V0IHRtYWtlX2ZpbGUgdC1saW51eC4KKwlBZGQgY3J0YmVnaW5TLm8gYW5kIGNydGVuZFMubyB0byBleHRyYV9wYXJ0cy4KKwkqIGkzODYvbGludXguaCAoQ0MxLCBMSUJfU1BFQyk6IERlbGV0ZWQuCisJKiBjb25maWcvbGludXguaCAoU1RBUlRGSUxFX1NQRUMpOiBBZGQgY3J0YmVnaW5TLm8gaWYgLXNoYXJlZC4KKwkoQ0MxX1NQRUMpOiBOZXcuCisJKExJQl9TUEVDKTogUmVtb3ZlICV7bWllZWUtZnA6LWxpZWVlfTsgdXNlIC1sY19wIGZvciAtcHJvZmlsZS4KKwkqIGNvbmZpZy90LWxpbnV4OiBOZXcgZmlsZS4KKworTW9uIEZlYiAxMiAyMDo0MjoxMSAxOTk2ICBSYW5keSBTbWl0aCAgPHJhbmR5c0BjYW1hcm8ub3NmLm9yZz4KKworCSogaTM4Ni94LW9zZnJvc2UgKFhDRkxBR1N7LF9OT0RFQlVHfSk6IFJlbW92ZSAkKFNITElCKS4KKwkoWENGTEFHUyk6IE5ldyB2YXJpYWJsZS4KKwkobGliZGlyLCBtYW5kaXIsIGJpbmRpcik6IERlbGV0ZS4KKwkqIGkzODYvdC1vc2Y6IE5ldyBmaWxlLgorCSogaTg2MC9wYXJhZ29uLmggKFNUQVJURklMRV9TUEVDKTogTWFrZSBnY2MgZmluZCBjcnQwLm8sIG5vdCBsb2FkZXIuCisJKExJQl9TUEVDKTogUmVtb3ZlIC91c3IvbGliLgorCSogTWFrZWZpbGUuaW4gKFRDRkxBR1MpOiBOZXcgdmFyaWFibGUuCisJKEdDQ19DRkxBR1MpOiBBZGQgJChUQ0ZMQUdTKS4KKwkoTElCR0NDMl9DRkxBR1MpOiBBZGQgLUQgZm9yIF9fR0NDX0ZMT0FUX05PVF9ORUVERUQuCisJKGxpYmdjYzEtdGVzdCk6IFJlbW92ZSAtbm9zdGRsaWIuCisJKGZsb2F0LmgtY3Jvc3MpOiBEb24ndCBnaXZlIGVycm9yICNpZmRlZiBfX0dDQ19GTE9BVF9OT1RfTkVFREVELgorCSogZW5xdWlyZS5jOiBEZWZpbmUgX19HQ0NfRkxPQVRfTk9UX05FRUVERUQuCisJKiBjb25maWd1cmUgKGlbMzQ1Nl04Ni0qLW9zZnJvc2UpOiBBZGQgdC1vc2YgYXMgdG1ha2VfZmlsZS4KKworTW9uIEZlYiAxMiAxODo0Mzo1NCAxOTk2ICBPbGl2ZXIgS2VsbG9nZyAgKG9saXZlci5rZWxsb2dnQHNwYWNlLm90bi5kYXNhLmRlKQorCisJKiAxNzUwYS5jIChhZGRfMV90b19tZW0pOiBDb3JyZWN0ZWQuCisKK01vbiBGZWIgMTIgMTg6MjM6MzUgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKHNwYXJjbGV0LSotYW91dCopOiBOZXcgY29uZmlndXJhdGlvbi4KKworTW9uIEZlYiAxMiAxNDo0Mzo1MCAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KKworCUNoYW5nZXMgdG8gZGlzdGluZ3Vpc2ggdHlwZWRlZiBmcm9tIG9yaWdpbmFsIHR5cGUgaW4gZGVidWcgb3V0cHV0LgorCSogdHJlZS5oIChERUNMX09SSUdJTkFMX1RZUEUpOiAgTmV3IG1hY3JvLgorCSogdHJlZS5jIChjb3B5X25vZGUpOiAgWmVybyBvdXQgdHlwZS5zeW10YWIgdW5pb24uCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiAgU2V0IERFQ0xfT1JJR0lOQUxfVFlQRSBmb3IgdHlwZWRlZiBvcmlnaW4uCisJKiBkYnhvdXQsYyAoZGJ4b3V0X3R5cGUpOiAgRG9uJ3QgY2Fub25pY2FsaXplIHR5cGVkZWYgdHlwZSB0byBiYXNlLgorCitNb24gRmViIDEyIDEyOjAxOjE2IDE5OTYgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybWx0ZC5jby51aykKKworCSogYXJtL2FybS5oOiAoQ1BQX1NQRUMpOiBEZWZpbmUgX19BUk1FQl9fLCBfX0FSTUVMX18sIGFuZAorCV9fQVJNV0VMX18gZGVwZW5kaW5nIG9uIHRoZSBlbmRpYW4gZmxhZ3MgcGFzc2VkIHRvIHRoZSBjb21waWxlci4KKwkoQVJNX0ZMQUdfTElUVExFX1dPUkRTKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgb3B0aW9uIC1td29yZHMtbGl0dGxlLWVuZGlhbi4KKwkoVEFSR0VUX0xJVFRMRV9XT1JEUyk6IERlZmluZS4KKwkoV09SRFNfQklHX0VORElBTik6IFNlbGVjdCBiYXNlZCBvbiB0aGUgZW5kaWFuIHN3aXRjaGVzLgorCShMSUJHQ0MyX1dPUkRTX0JJR19FTkRJQU4pOiBEZWZpbmUgYmFzZWQgb24gcnVuLXRpbWUgZW5kaWFuCisJZGVmaW5lcy4KKwkqIGFybS9hcm0uYyAob3V0cHV0X21vdmVfZG91YmxlKTogQ29wZSB3aXRoIGJvdGggd29yZC1lbmRpYW4KKwlhbHRlcm5hdGl2ZXMuICBSZW1vdmUgZXh0cmFuZW91cyBwYXJhbWV0ZXJzIGZyb20gY2FsbHMgdG8KKwlvdXRwdXRfbW92X2ltbWVkaWF0ZS4KKwkoYXJtX3ByaW50X29wZXJhbmQpOiBOZXcgcHJpbnQgY29kZSAnUScgZm9yIHRoZSBsZWFzdCBzaWduaWZpY2FudAorCXJlZ2lzdGVyIG9mIGEgREltb2RlIG9wZXJhbmQuICBNYWtlIGNvZGUgJ1InIGFsd2F5cyBwcmludCB0aGUKKwltb3N0IHNpZ25pZmljYW50IHJlZ2lzdGVyLCByYXRoZXIgdGhhbiB0aGUgaGlnaGVzdCBudW1iZXJlZC4KKwkqIGFybS9hcm0ubWQgKGFsbCBESW1vZGUgb3V0cHV0IHBhdHRlcm5zKTogVXNlIHByaW50IGNvZGUKKwknUScgdG8gYWNjZXNzIHRoZSBsZWFzdCBzaWduaWZpY2FudCB3b3JkLiAgTWFrZSBzdXJlIHRoZQorCXBhdHRlcm5zIGFyZSBmdWxseSBhd2FyZSBvZiB0aGUgd29yZCBlbmRpYW5uZXNzLgorCisJKiBhcm0vc2VtaS5oIChDUFBfU1BFQyk6ICBEZWZpbmUgX19BUk1FQl9fLCBfX0FSTUVMX18sIGFuZAorCV9fQVJNV0VMX18gZGVwZW5kaW5nIG9uIHRoZSBlbmRpYW4gZmxhZ3MgcGFzc2VkIHRvIHRoZSBjb21waWxlci4KKwkoTElOS19TUEVDKTogUGFzcyAtRUIgdG8gdGhlIGxpbmtlciBpZiBjb21waWxpbmcgZm9yIGJpZy1lbmRpYW4KKwltb2RlLgorCShBU01fU1BFQyk6IExpa2V3aXNlIGZvciB0aGUgYXNzZW1ibGVyLgorCSogYXJtL3NlbWlhb2YuaCAoQ1BQX1NQRUMpOiAgRGVmaW5lIF9fQVJNRUJfXywgX19BUk1FTF9fLCBhbmQKKwlfX0FSTVdFTF9fIGRlcGVuZGluZyBvbiB0aGUgZW5kaWFuIGZsYWdzIHBhc3NlZCB0byB0aGUgY29tcGlsZXIuCisKK01vbiBGZWIgMTIgMTA6MTU6MjkgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFBlcm1pdCB0bV9maWxlIGFuZCB4bV9maWxlIHRvIGJlIGEgbGlzdCBvZiBoZWFkZXIKKwlmaWxlIG5hbWVzLCByYXRoZXIgdGhhbiBqdXN0IGEgc2luZ2xlIGZpbGUuICBGb3IgbWFueSB0YXJnZXRzLAorCWhhbmRsZSAtLXdpdGgtc3RhYnMgYnkgYWRkaW5nIGRieC5oIHRvIHRtX2ZpbGUsIHJhdGhlciB0aGFuIHVzaW5nCisJYSBkaWZmZXJlbnQgdG1fZmlsZS4KKwkqIGRieC5oOiBOZXcgZmlsZS4KKwkqIGFscGhhL2dkYi1vc2YyLmg6IFJlbW92ZS4KKwkqIGFscGhhL2dkYi1vc2YxMi5oOiBSZW1vdmUuCisJKiBhbHBoYS9nZGIuaDogUmVtb3ZlLgorCSogaTM4Ni9zeXN2NGdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL2lyaXM1Z2RiLmg6IFJlbW92ZS4KKwkqIG1pcHMvaXJpczRnbC5oOiBSZW1vdmUuCisJKiBtaXBzL2lyaXM0Z2RiLmg6IFJlbW92ZS4KKwkqIG1pcHMvaXJpczNnZGIuaDogUmVtb3ZlLgorCSogbWlwcy9kZWMtZ29zZjEuaDogUmVtb3ZlLgorCSogbWlwcy9uZXdzNC1nZGIuaDogUmVtb3ZlLgorCSogbWlwcy9uZXdzNS1nZGIuaDogUmVtb3ZlLgorCSogbWlwcy9zdnI0LXQtZ2RiLmg6IFJlbW92ZS4KKwkqIG1pcHMvdWx0cml4LWdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL2JzZC01LWdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL2JzZC00LWdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL3N2cjQtNS1nZGIuaDogUmVtb3ZlLgorCSogbWlwcy9zdnI0LTQtZ2RiLmg6IFJlbW92ZS4KKwkqIG1pcHMvc3ZyMy01LWdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL3N2cjMtNC1nZGIuaDogUmVtb3ZlLgorCSogbWlwcy9taXBzLTUtZ2RiLmg6IFJlbW92ZS4KKwkqIG1pcHMvZWNvZmZsLWdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL2Vjb2ZmLWdkYi5oOiBSZW1vdmUuCisJKiBtaXBzL21pcHMtNC1nZGIuaDogUmVtb3ZlLgorCitNb24gRmViIDEyIDA3OjIyOjIwIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6IFB1dCB2aXJ0dWFsIHJlZ3MgaW50bworCW5ldyByZWdub19yZWdfcnR4IGNvcHkuCisKK1N1biBGZWIgMTEgMTg6NTM6MTIgMTk5NiAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG5vaXN5LnRtZy5zZT4KKworCSogaTM4Ni5tZDogRGVsZXRlIHNwdXJpb3VzIGludGVnZXIgc3VidHJhY3QgcGF0dGVybnMuCisJRGVsZXRlICUgZnJvbSBzdWJ0cmFjdCBvcGVyYW5kIGNvbnN0cmFpbnRzLgorCitTdW4gRmViIDExIDE5OjE3OjI0IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIG02OGsubWQgKG1vdnFpKTogQ2FsbCBDQ19TVEFUVVNfSU5JVCB3aGVuIGxvYWRpbmcgdG8vZnJvbQorCWFuIGFkZHJlc3MgcmVnaXN0ZXIgdmlhIGEgZGF0YSByZWdpc3Rlci4KKworU3VuIEZlYiAxMSAwODo0NDo0OSAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IEhhbmRsZSBtaXNzaW5nIHR5cGUgaW4gZm9ybWF0CisJd2hlbiB0ZXJtaW5hdGVkIGJ5IGEgbmV3IGAlJy4KKworU2F0IEZlYiAxMCAxNToxNDoyMiAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAcnRsLmN5Z251cy5jb20+CisKKwkqIGNyb3NzLW1ha2UgKFNUTVBfRklYUFJPVE8pOiBNb3ZlZCBmcm9tIGhlcmUgdG8gYnVpbGQtbWFrZS4KKwkqIGJ1aWxkLW1ha2UgKFNUTVBfRklYUFJPVE8pOiBNb3ZlZCBoZXJlIGZyb20gY3Jvc3MtbWFrZS4KKworU2F0IEZlYiAxMCAwODozOTowNSAxOTk2ICBPbGl2ZXIgS2VsbG9nZyAgKG9saXZlci5rZWxsb2dnQHNwYWNlLm90bi5kYXNhLmRlKQorCisJKiAxNzUwYS5tZCAobW92c3RycWkpOiBDb3JyZWN0ZWQuCisJKHplcm9fZXh0ZW5kcWloaTIpOiBUYWtlbiBvdXQsIGxldCBHQ0Mgc3ludGhlc2l6ZS4KKwkobW92aGktMSk6IEFkZGVkIGluc24gdG8gbW92ZSBISW1vZGUgc21hbGwgY29uc3RhbnQgdG8gbWVtb3J5LgorCShtb3ZoZi0xKTogQWRkZWQgaW5zbiB0byBtb3ZlIEhGbW9kZSB6ZXJvIHRvIG1lbW9yeS4KKwkobW92dHFmLTEpOiBBZGRlZCBpbnNuIHRvIG1vdmUgVFFGbW9kZSB6ZXJvIHRvIG1lbW9yeS4KKwkobnVtZXJvdXMgaW5zbnMpOiBUYWtlbiBvdXQgQiAoQmFzZSBSZWcgd2l0aCBJbmRleCkgbW9kZS4KKworCSogMTc1MGEuYyAobW92Y250X3JlZ25vX2FkanVzdCk6IENvcnJlY3RlZC4KKwkobW92X21lbW9yeV9vcGVyYW5kLCB6ZXJvX29wZXJhbmQpOiBBZGRlZC4KKwkoYl9tb2RlX29wZXJhbmQpOiBDb3JyZWN0ZWQuCisJKHNpbXBsZV9tZW1vcnlfb3BlcmFuZCwgYWRkXzFfdG9fbWVtKTogQWRkZWQuCisJKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IENvcnJlY3RlZCBjYXNlIG9mICdRJyBvdXRwdXQgbW9kaWZpZXIuCisKKwkqIDE3NTBhLmggKFJFR19BTExPQ19PUkRFUik6IENoYW5nZWQgYmFjayB0byBuYXR1cmFsIG9yZGVyLgorCShDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogQWRkZWQgbGV0dGVyICdHJy4KKwkoRVhJVF9JR05PUkVfU1RBQ0spOiBTZXQgdG8gMC4KKwkoUkVHX09LX0ZPUl9CQVNFX1AsIFJFR19PS19GT1JfSU5ERVhfUCk6IFVzZSBjb3JyZXNwb25kaW5nIFJFR05PX09LLgorCShNT1ZFX01BWCwgTU9WRV9SQVRJTyk6IERlZmluZWQuCisKK1NhdCBGZWIgMTAgMDg6Mjg6MTIgMTk5NiAgTWFydGluIEFuYW50aGFyYW1hbiAgPG1hcnRpbkBnb29meS5pbWVjaC51bmktZHVpc2J1cmcuZGU+CisKKwkqIGNvbmZpZ3VyZSAobTY4ay0qLXBzb3MqKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBwc29zLmg6IE5ldyBmaWxlLgorCSogbTY4ay9tNjhrLXBzb3MuaDogTmV3IGZpbGUuCisKK1NhdCBGZWIgMTAgMDg6MDc6NTIgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc2NoZWQuYyAoZmx1c2hfcGVuZGluZ19saXN0cyk6IEFkZCBuZXcgYXJnLCBPTkxZX1dSSVRFLgorCShzY2hlZF9hbmFseXplX3sxLDIsaW5zbn0pOiBBZGQgbmV3IGFyZyB0byBmbHVzaF9wZW5kaW5nX2xpc3RzLgorCShzY2hlZF9hbmFseXplKTogQWx3YXlzIGZsdXNoIHBlbmRpbmcgd3JpdGUgbGlzdCBmb3IgY2FsbCwgZXZlbiBjb25zdC4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogUHV0IHJlZ19tYXAgaW4gZnVuY3Rpb24ncworCW1heWJlcGVybWFuZW50IG9ic3RhY2sgaW5zdGVhZCBvZiB1c2luZyBhbGxvY2E7IHNldCByZWdub19yZWdfcnR4CisJdG8gaXQ7IGRlbGV0ZSByZWNlbnRseS1hZGRlZCBjb3B5aW5nIG9mIHRoaXMgbGF0ZXIuCisKK1NhdCBGZWIgMTAgMDA6NDk6NTggMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzY2hlZC5jIChhZGRfZGVwZW5kZW5jZSk6IEFkZCB0ZXN0IGZvciBuZXh0ICE9IENPREVfTEFCRUwuCisKK0ZyaSBGZWIgIDkgMTY6MTA6MDQgMTk5NiAgU3RhbiBDb3ggIChjb3hzQGRnLXJ0cC5kZy5jb20pCisKKwkqIGkzODYubWQgKGZwLCBpbnRlZ2VyKTogQWRkZWQgZnVuY3Rpb24gdW5pdHMgZm9yIHBlbnRpdW0uCisJKGNtcCosbW92KixhZGQqLHN1YiosbXVsKixkaXYqLGV4dGVuZCosdHJ1bmMqLGFuZCosaW9yKix4b3IqLG5lZyosCisJYWJzKixzcXJ0KixzaW4qLGNvcyosbm90Kixhc2gqLGxzaCoscm90KixzdWIpOiBUaWdodGVuZWQgY29uc3RyYWludHMsCisJYWRkZWQgYXR0cmlidXRlIHN1cHBvcnQsIGFuZCBtYWRlIGNoYW5nZXMgZm9yIG5ldyBgYmluYXJ5JyBhbmQKKwlgdW5hcnknIGZ1bmN0aW9ucy4KKworCSogaTM4Ni5jIChwcm9jZXNzb3JfY29zdHMpOiBOZXcgdmFyaWFibGUuCisJKG9wdGltaXphdGlvbl9vcHRpb25zLCBpeDg2X2V4cGFuZF9iaW5hcnlfb3BlcmF0b3IsCisJaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2ssIGl4ODZfZXhwYW5kX3VuYXJ5X29wZXJhdG9yLAorCWl4ODZfdW5hcnlfb3BlcmF0b3Jfb2ssIGlzX211bCwgaXNfZGl2LCBjb3B5X2FsbF9ydHgsIHJld3JpdGVfYWRkcmVzcywKKwlsYXN0X3RvX3NldF9jYywgZG9lc250X3N0X2NvbmRpdGlvbl9jb2RlLCBzZXRzX2NvbmRpdGlvbl9jb2RlLAorCXN0cl9pbW1lZGlhdGVfb3BlcmFuZCwgaXNfZnBfaW5zbiwgaXNfZnBfZGVzdCwgaXNfZnBfc3RvcmUsCisJYWdpX2RlcGVuZGVudCwgcmVnX21lbnRpb25lZF9pbl9tZW0pOiBOZXcgZnVuY3Rpb25zLgorCisJKiBpMzg2L2kzODYuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMsIEFMSUdOX0RGbW9kZSwgSVNfU1RBQ0tfTU9ERSwKKwlJWDg2X0VYUEFORF9CSU5BUllfT1BFUkFUT1IpOiBOZXcgbWFjcm9zLgorCShSVFhfQ09TVFMsIFJFR0lTVEVSX01PVkVfQ09TVCwgQURKVVNUX0JMT0NLQUdFKSBDaGFuZ2VkIGZvciBwZW50aXVtLgorCitGcmkgRmViICA5IDE0OjQ3OjI3IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMuYyAoc3A2NF9tZWRpdW1fcGljX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKG1vdmVfcGljX2xhYmVsKTogRGVsZXRlLgorCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogU2ltcGxpZnkgdXNpbmcgc29tZSBuYW1lZCBwYXR0ZXJucy4KKwkoZmluYWxpemVfcGljKTogQWRkIHByZWxpbWluYXJ5IHNwYXJjNjQgc3VwcG9ydC4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogUmVvcmdhbml6ZS4KKwkqIHNwYXJjLm1kIChwaWNfbG9fc3VtX3NpLHBpY19zZXRoaV9zaSxnZXRfcGNfc3AzMixnZXRfcGNfc3A2NCwKKwltb3ZlX3BpY19sYWJlbF9zaSxtb3ZlX2xhYmVsX2RpLHNldGhpX2RpX3NwNjQpOiBNYWtlIG5hbWVkIHBhdHRlcm5zLgorCShzZXRoaV9kaV9zcDY0X2NvbnN0LHNldGhpX2RpX21lZGl1bV9waWMpOiBOZXcgYW5vbnltb3VzIHBhdHRlcm5zLgorCShtb3ZlX3BpY19sYWJlbF9zaSxtb3ZlX2xhYmVsX2RpKTogT3B0aW1pemUgZm9yIG5lYXIgbGFiZWxzLgorCSh0YWJsZWp1bXApOiBVc2UgZm9yIFRBUkdFVF9NRURBTlkuCisJKGNhc2VzaSk6IERlbGV0ZS4KKworRnJpIEZlYiAgOSAxMzo0ODo0NSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMubWQgKHByb2JlKzIsIHByb2JlKzQpOiBOZXcgY29uZGl0aW9uYWwgbW92ZSBwYXR0ZXJucy4KKwkobW92c2ljYyk6IERvbid0IHRydW5jYXRlIGNvbXBhcmlzb24gaWYgaXQgaXMgREltb2RlLgorCisJKiBzaC5oIChDUFBfU1BFQyk6IEFkZCBkZWZpbmVzIGZvciAtbTEsIC1tMiwgYW5kIC1tMy4KKworRnJpIEZlYiAgOSAwOToxMToyOCAxOTk2ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNldCBSVFhfSU5URUdSQVRFRF9QIGluCisJSU5MSU5FX0hFQURFUiBpZmYgZnVuY3Rpb24gaXMgaW5saW5lYWJsZS4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVGVzdCBSVFhfSU5URUdSQVRFRF9QIGluIERFQ0xfU0FWRURfSU5TTlMuCisKK1RodSBGZWIgIDggMDE6MTE6MTUgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEubWQgKGZsb2F0dW5zc2lzZjIgZXhwYW5kZXIpOiBEb24ndCB1c2UgImdlbmVyYWxfb3BlcmFuZCIuCisJKGZsb2F0dW5zc2lkZjIgZXhwYW5kZXIpOiBMaWtld2lzZS4KKworV2VkIEZlYiAgNyAxNjo1OTozMSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC97c3lzdjQsd2luLW50LG5ldHdhcmUsY3lnd2luMzJ9LmggKHtBU00sTElOS31fU1BFQyk6CisJRG9uJ3QgdXNlICV7Vn0gZm9yIGVpdGhlciBsaW5rZXIgb3IgYXNzZW1ibGVyLgorCitUdWUgRmViICA2IDE3OjIyOjI5IDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3JhbmdlX3R5cGUpOiAgRW1pdCBub24tcmFuZ2UgSU5URUdFUl9UWVBFCisJYXMgYSBzdWItcmFuZ2Ugb2YgaXRzZWxmIChzbyBnZGIgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UpLgorCitUdWUgRmViICA2IDE3OjAxOjQ0IDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAubWQgKGFkZHNpMyBhbmQgYWRkZGkzIHNwbGl0KTogVXNlIGNsZWFuZXIgY29tcHV0YXRpb24KKwlhbmQgcG9ydGFibGUgSE9TVF9XSURFX0lOVC4KKwkoaW9yZGkzIHNwbGl0KTogVXNlIEhPU1RfV0lERV9JTlQuCisJKG1vdmRpKTogQWRkIFRBUkdFVF82NEJJVCBzdXBwb3J0IGFuZCBnZW5lcmF0ZSA2NCBiaXQgY29uc3RhbnRzLgorCShtb3ZkaSBtYXRjaGVyLCBUQVJHRVRfUE9XRVJQQzY0KTogQWRkIGltbWVkaWF0ZSBjb25zdHJhaW50IGhhbmRsZWQKKwlieSBuZXcgZGVmaW5lX3NwbGl0LgorCShhbGxvY2F0ZV9zdGFjayk6IFVzZSBUQVJHRVRfMzJCSVQuCisJKHRhYmxlanVtcCk6IEFkZCBUQVJHRVRfNjRCSVQgc3VwcG9ydCB1c2luZyAuLi4KKwkodGFibGVqdW1wc2kpOiBSZW5hbWUgb3JpZ2luYWwgdGFibGVqdW1wIHBhdHRlcm4uCisJKHRhYmxlanVtcGRpKTogTmV3IHBhdHRlcm4uCisKK1R1ZSBGZWIgIDYgMTU6Mjk6MjIgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogIFVzZSBzYW1lIGNvZGUgdG8gbGF5b3V0IENIQVJfVFlQRQorCWFzIGZvciBJTlRFR0VSX1RZUEUgKGluc3RlYWQgb2YgaGFyZC13aXJpbmcgaW4gUUltb2RlKS4KKworVHVlIEZlYiAgNiAxNToxMzozOCAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS5tZCAodmFyaW91cyBwYXR0ZXJucyk6IEF2b2lkIHVzaW5nICJnZW5lcmFsIG9wZXJhbmQiIGluCisJZGVmaW5lX2luc24gcGF0dGVybnMuCisKK1N1biBGZWIgIDQgMjE6Mzc6MDUgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvZWFiaXssc2ltfS5oIChMSU5LX1NUQVJUX1NQRUMpOiBCdW1wIHRoZSBkZWZhdWx0IHN0YXJ0IGFkZHJlc3MKKwlmb3IgdGhlIHNpbXVsYXRvciB0byAweDEwMDAwMDc0IHNvIHRoYXQgd2UgZG9uJ3Qgd2FzdGUgYSBwYWdlIGluIHRoZQorCWxpbmtlZCBmaWxlLgorCitGcmkgRmViICAyIDE5OjQ0OjEwIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL2VhYmktY3tpLG59LmFzbSAoLnNkYXRhMiwgLnNic3MyKTogUHV0IHRoZXNlIGluIHRoZQorCXJlYWQtb25seSBzZWN0aW9uLCBub3QgcmVhZC13cml0ZS4KKworCSogbGliZ2NjMi5jIChfX3Vud2luZF9mdW5jdGlvbiwgcnM2MDAwL3Bvd2VycGMpOiBVc2UgX0FSQ0hfUFBDCisJYmVpbmcgZGVmaW5lZCB0byBpbmRpY2F0ZSB0byB1c2UgUG93ZXJQQyBtbmVtb25pY3MuCisKKwkqIGNvbmZpZy9yczYwMDAvdC1jeWd3aW4zMiAoTVVMVElMSUIqKTogQWRkIHNvZnR3YXJlIGZsb2F0aW5nCisJcG9pbnQgc3VwcG9ydC4KKworVGh1IEZlYiAgMSAwOToxMDowMiAxOTk2ICBTdGV2ZSBDaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgorCisJKiBjb25maWcve2kzODYscnM2MDAwfS9jeWd3aW4zMi57YXNtLGh9OiBOZXcgdGVtcGxhdGVzLgorCSogY29uZmlnL3tpMzg2LHJzNjAwMH0ve3QseH0tY3lnd2luMzI6IERpdHRvLgorCSogY29uZmlnL3tpMzg2LHJzNjAwMH0veG0tY3lnd2luMzIuaDogRGl0dG8uCisJKiBjb25maWd1cmUuaW4gKHBvd2VycGNsZS0qLWN5Z3dpbjMyLCBpWzM0NTZdODYtKi1jeWd3aW4zMik6IE5ldy4KKworRnJpIEZlYiAgMiAxNzo0Mjo0MCAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOgorCUZpeCB0eXBvIGluIHRyYW5zcGFyZW50IHVuaW9uIHdhcm5pbmcgdGhhdCBsZWQgdG8gY29yZSBkdW1wLgorCisJKiBjLXBhcnNlLmluIChzdG10KTogV2FybiBhYm91dCBgZ290byAqZXhwcjsnIGlmIHBlZGFudGljLgorCShsYWJlbCk6IFdhcm4gYWJvdXQgYGNhc2UgZXhwciAuLi4gZXhwcjonIGlmIHBlZGFudGljLgorCitGcmkgRmViICAyIDExOjA1OjI3IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvaDgzMDAuaCAoVEFSR0VUX0FMSUdOXzMwMCk6IFJlbmFtZWQgZnJvbQorCVRBUkdFVF9BTElHTl9TVFJVQ1RfMzAwLgorCShUQVJHRVRfU1dJVENIRVMpOiBSZW5hbWUgLW1hbGlnbi1zdHJ1Y3QtMzAwIHRvIC1tYWxpZ24tMzAwLgorCShCSUdHRVNUX0FMSUdOTUVOVCk6IFVzZSBUQVJHRVRfQUxJR05fMzAwLgorCitGcmkgRmViICAyIDA4OjI1OjQ5IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAoam1wX3VzZXNfcmVnX29yX21lbSk6IFJlbmFtZWQgZnJvbSB1c2VzX3JlZ19vcl9tZW0uCisJRG9uJ3QgbG9vayBpbnRvIGNvbmRpdGlvbiBvZiBhbiBJRl9USEVOX0VMU0U7IGFsc28gbWFrZSBmYXN0ZXIuCisJKGZpbmRfYmFzaWNfYmxvY2tzKTogVXNlIG5ldyBuYW1lLgorCitGcmkgRmViICAyIDA2OjQ5OjU2IDE5OTYgIEoib3JuIFJlbm5lY2tlIChhbXlsYWFyQG1lb2x5b24uaGFuc2UuZGUpCisKKwkqIHJlbG9hZC5jIChkZWJ1Z19yZWxvYWQpOiBGaXggdHlwbyBmb3IgcmVsb2FkX25vbmNvbWJpbmUuCisKK1RodSBGZWIgIDEgMjE6NDk6MDIgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEtcHJvLmggKFRBUkdFVF9ERUZBVUxUKTogVHVybiBvbiBUQVJHRVRfU09GVF9GTE9BVCBieQorCWRlZmF1bHQgZm9yIGFsbCBwcm8gdGFyZ2V0cy4KKwkqIHQtcHJvOiBEZWxldGUgYWxsIG11bHRpbGliIHJlZmVyZW5jZXMuCisKK1RodSBGZWIgIDEgMTc6NTA6MDIgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogUmV0dXJuIHJlc3VsdCBvZiBIQU5ETEVfUFJBR01BLgorCSogaDgzMDAvaDgzMDAuaCAoSEFORExFX1BSQUdNQSk6IFBhc3MgcmVzdWx0IGJhY2sgdG8gY2FsbGVyLgorCSogaTk2MC9pOTYwLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKwkqIHNoL3NoLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKwkqIG5leHRzdGVwLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKworV2VkIEphbiAzMSAxOToyNjowMyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIG02OGsvbTY4ay1ub25lLmg6IFJld3JpdGUgdG8gdXNlIEVYVFJBX1NQRUNTLgorCSogbTY4ay92eG02OGsuaCAoQ1BQX1NQRUMpOiBEZWxldGUuCisJKFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IERlZmluZS4KKworV2VkIEphbiAzMSAxNToxMDo1OSAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmMgKG91dHB1dF9lcGlsb2cpOiBGaXggUFBDNjQgdHlwb3MgYW5kIHVzZSBUQVJHRVRfMzJCSVQuCisJKG91dHB1dF9wcm9sb2cpOiBTYW1lLgorCShyczYwMDBfdHJhbXBvbGluZV90ZW1wbGF0ZSwgcnM2MDAwX3RyYW1wb2xpbmVfc2l6ZSk6IFVzZSBUQVJHRVRfMzJCSVQuCisJKiByczYwMDAubWQgKG1vdmRmIFRBUkdFVF9QT1dFUlBDNjQgbWF0Y2hlcik6IEZpeCBzdGQgdHlwby4KKwkobW92ZGkgVEFSR0VUX1BPV0VSUEM2NCBtYXRjaGVyKTogU2FtZS4KKworV2VkIEphbiAzMSAwOTo0NjoxMSAxOTk2ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYXdAYXJtbHRkLmNvLnVrKQorCisJKiByZWdzLmggKHJlZ25vX3BvaW50ZXJfYWxpZ24sIFJFR05PX1BPSU5URVJfQUxJR04pOiBEZWxldGUgZnJvbQorCWhlcmUuLi4KKwkqIHJ0bC5oIChyZWdub19wb2ludGVyX2FsaWduLCBSRUdOT19QT0lOVEVSX0FMSUdOKTogLi4uIGFuZCBwdXQKKwl0aGVtIGhlcmUuCisKK1dlZCBKYW4gMzEgMDg6MjY6MTIgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIChzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGUpCisKKwkqIG02OGsvbGludXguaCAoU1RSSUNUX0FMSUdOTUVOVCk6IERlZmluZSB0byB6ZXJvLgorCShMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1ApOiBNYXRjaCBkZWZpbml0aW9uIGZyb20gbTY4a3Y0LmguCisKKwkqIG02OGsuaCAoVFJBTVBPTElORV97VEVNUExBVEUsU0laRX0pOiBBdm9pZCBuZWVkIGZvciBoZWxwZXIgZnVuY3Rpb24uCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IExpa2V3aXNlLgorCShUUkFNUE9MSU5FX0FMSUdOTUVOVCk6IFJlbmFtZWQgZnJvbSBUUkFNUE9MSU5FX0FMSUdOLgorCSogbTY4ay9uZXh0LmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEFkanVzdGVkIGFjY29yZGluZ2x5LgorCisJKiBtNjhrdjQuaCAoU1RBVElDX0NIQUlOX1JFR05VTSk6IFJlZGVmaW5lIHRvIHVzZSByZWdpc3RlciBhMS4KKwkoVFJBTVBPTElORV9URU1QTEFURSk6IExpa2V3aXNlLgorCisJKiBtNjhrL2xpbnV4LmgsIG02OGt2NC5oIChMSUJDQUxMX1ZBTFVFKTogUmV0dXJuIFhGbW9kZSB2YWx1ZSBpbiBmcDAuCisJKiBtNjhrLmMgKGluaXRfNjg4ODFfdGFibGUpOiBVc2UgU0Ztb2RlIGZvciB0aGUgZmlyc3Qgc2l4CisgCWNvbnN0YW50cyBhbmQgREZtb2RlIGZvciB0aGUgc2V2ZW50aC4KKworCSogbTY4ay5tZCAobW92cWkpOiBVc2UgbW92ZXEgaWYgcG9zc2libGUuCisKK1dlZCBKYW4gMzEgMDg6MTg6MTUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9ORVhUX0FSRyk6IFN0cmlwIG9mZgorCUlORElSRUNUX1JFRiB3aGVuIGNoZWNraW5nIHNlY29uZCBhcmcuCisKKwkqIGNhbGxzLmMgKHN0cnVjdCBhcmdfZGF0YSwgZXhwYW5kX2NhbGwpOiBUZXN0IFNUUklDVF9BTElHTiB3aXRoICNpZi4KKworV2VkIEphbiAzMSAwNzo0Nzo1NiAxOTk2ICBUaW0gV3JpZ2h0ICAodGltd0BzZXF1ZW50LmNvbSkKKworCSogY29uZmlndXJlIChpWzM0NV0tc2VxdWVudC1zeXN2Kik6IENoYW5nZSB0byBzeXN2Myo7IGFkZCBpNjg2LgorCShpWzM0NTZdODYtc2VxdWVudC1wdHg0KiwgaVszNDU2XTg2LXNlcXVlbnQtc3lzdjQqKTogTmV3IGNhc2VzLgorCSogZml4aW5jLnB0eCAoc3lzL21jX3BhcmFtLmgpOiBSZW1vdmUgZW1iZWRkZWQgYXNtLgorCSogZml4aW5jLnN2cjQgKF9fU1REQ19fKTogQWRkIG9uZSBtb3JlIGNhc2UuCisJKiBpMzg2L3B0eDQtaS5oLCBwdHg0Lmg6IE5ldyBmaWxlcy4KKworV2VkIEphbiAzMSAwNzoxNToyMyAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIG02OGsuaCAoTUFDSElORV9TVEFURV97U0FWRSxSRVNUT1JFfSk6IEFsbG93IE1PVE9ST0xBIHN5bnRheC4KKworCSogbTY4ay5tZCAoe2FkZGRpLHN1YmRpfV9zZXh0aGlzaGwzMik6ICdhJyBhbmQgJ2QnIHZlcnNpb25zIG1lcmdlZAorCWFuZCBmaXhlZDsgZG8gbm90IGdlbmVyYXRlICdhZGQvc3ViIGEsbScuCisKKwkqIGdjYy5jICh3YXJuX3N0ZF9wdHIpOiBJbml0aWFsaXplIHdpdGggMCBpbnN0ZWFkIG9mIE5VTExfUFRSLgorCitUdWUgSmFuIDMwIDEzOjI5OjA1IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogZGJ4b3V0LmM6IERvbid0IGluY2x1ZGUgPHN0cmluZy5oPi4gIERvbid0IGNvbXBhcmUgc3RyY2hyIHJlc3VsdAorCXRvIE5VTEwuCisKKwkqIGNvbmZpZy9zdnI0LmggKEFTTV9GSU5BTF9TUEVDKTogVXNlICV8LCBub3QgJHtwaXBlOi19LgorCitUdWUgSmFuIDMwIDA2OjQ4OjQzIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAobm9uemVyb19iaXRzLCBjYXNlIFJFRyk6IElnbm9yZSBSRUdfUE9JTlRFUl9BTElHTk1FTlQuCisJUmVzdG9yZSBvbGQgY29kZSBmb3IgU1AsIGJ1dCB1c2UgaXQgZm9yIGFsbCBwb2ludGVycyB0bworCWRlZmluZWQgbG9jYXRpb25zIGluIHRoZSBmcmFtZS4KKworTW9uIEphbiAyOSAxMToyNToyOCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9tZXRob2RzKTogRG9uJ3QgdXNlICNpZm5kZWYgaW5zaWRlIGNhbGwgdG8KKwlzdHJjaHIuCisKK1N1biBKYW4gMjggMTQ6NDQ6MDkgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWcvZGJ4Y29mZi5oICgqKTogI3VuZGVmIGZpcnN0LgorCitTYXQgSmFuIDI3IDIxOjQ2OjE2IDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuYyAocnM2MDAwX3N5bmNfdHJhbXBvbGluZSk6IEFkZCBjbXBkaSB0byA2NGJpdCBjYXNlLgorCShyczYwMDBfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogQ1NFIG9mIFBtb2RlIHRvIHBtb2RlLgorCSogcnM2MDAwLm1kIChtb3ZkZik6IEhhbmRsZSBtb3ZlIGJldHdlZW4gRlBSIGFuZCA2NCBiaXQgR1BSLgorCShtb3ZkaSBtYXRjaGVyKTogSGFuZGxlIFNQUiBtb3ZlIHRvIGl0c2VsZiBhbmQgYWRkICJtci4iIGNvbWJpbmVyLgorCitTYXQgSmFuIDI3IDEwOjA2OjMxIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IFJlZGVmaW5lLCBwdXQgc21hbGwKKwlkYXRhIGl0ZW1zIGluIC5zYnNzIGlmIC1tc2RhdGEuCisJKFNXSVRDSF9UQUtFU19BUkcpOiBBZGQgJ0InLCAnYicsIGFuZCAnVicuCisKK1NhdCBKYW4gMjcgMDc6NTk6MjUgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5oIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTogQWRkIEJVSUxUX0lOX3tTRVQsTE9OR31KTVAuCisJKiBleHByLmM6IEluY2x1ZGUgaGFyZC1yZWctc2V0LmguCisJKGFyZ19wb2ludGVyX3NhdmVfYXJlYSk6IE5ldyBkZWNsYXJhdGlvbi4KKwkoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fe1NFVCxMT05HfUpNUCk6IE5ldyBjYXNlcy4KKwkqIE1ha2VmaWxlLmluIChleHByLm8pOiBJbmNsdWRlcyBoYXJkLXJlZy1zZXQuaC4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCBkZWZpbml0aW9ucyBmb3IKKwlfX2J1aWx0aW5fc2V0am1wIGFuZCBfX2J1aWx0aW5fbG9uZ2ptcC4KKwkqIGNjY3AuYyAoaW5pdGlhbGl6ZV9idWlsdGlucyk6IEFkZCBkZWYgb2YgX19IQVZFX0JVSUxUSU5fU0VUSk1QX18uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IFBhc3MgRVhQQU5EX0lOSVRJQUxJWkVSCisJdG8gcmVjdXJzaXZlIGNhbGwuCisKK0ZyaSBKYW4gMjYgMTc6MjQ6MDcgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy5oIChzcGFyY19hcmNoX3R5cGUpOiBEZWxldGUuCisJKHssVEFSR0VUX31NQVNLX0RFUFJFQ0FURURfVjhfSU5TTlMpOiBEZWZpbmUuCisJKEFSQ0g2NF9TV0lUQ0hFUyk6IFJlbmFtZWQgZnJvbSBWOV9TV0lUQ0hFUy4KKwkqIHNwYXJjLmMgKHNwYXJjX2FyY2hfdHlwZSk6IERlbGV0ZS4KKwkoc3BhcmNfaW5pdF9tb2Rlcyk6IExpa2V3aXNlLgorCShvdXRwdXRfbW92ZV9xdWFkKTogRG9uJ3QgdXNlIGxkcS9zdHEgdW5sZXNzIFRBUkdFVF9IQVJEX1FVQUQuCisJKiBzcGFyYy9zcDY0LXNvbDIuaCAoVEFSR0VUX0RFRkFVTFQpOiBBZGQgTUFTS19ERVBSRUNBVEVEX1Y4X0lOU05TLgorCShTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW17bm8tLH1kZXByZWNhdGVkLXY4LWluc25zLgorCSogc3BhcmMubWQgKGFyY2ggYXR0cmlidXRlKTogUmV3cml0ZS4KKwkoaXNhKTogTmV3IGF0dHJpYnV0ZS4KKwkoMzIgYml0IG11bHRpcGx5L2RpdmlkZSBwYXR0ZXJucyk6IFVzZSBpZiBUQVJHRVRfREVQUkVDQVRFRF9WOF9JTlNOUy4KKwkoMzIgYml0IGRpdmlkZSBwYXR0ZXJucyk6IFY5IGRvZXNuJ3QgcmVxdWlyZSBkZWxheSBhZnRlciB5IHJlZyB3cml0ZS4KKworRnJpIEphbiAyNiAxMjowODo0MyAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmggKFRBUkdFVF8zMkJJVCk6IERlZmluZS4KKwkoQklUU19QRVJfV09SRCwgVU5JVFNfUEVSX1dPUkQpOiBJbnZlcnQgc28gMzJiaXQgZXhwZWN0ZWQgY2FzZS4KKwkoTE9OR19UWVBFX1NJWkUsIFBPSU5URVJfQk9VTkRBUlksIFBBUk1fQk9VTkRBUlkpOiBMaWtld2lzZS4KKwkoUlM2MDAwX1JFR19TQVZFLCBSUzYwMDBfU0FWRV9BUkVBLCBSUzYwMDBfVkFSQVJHU19TSVpFKTogTGlrZXdpc2UuCisJKFJFVFVSTl9BRERSRVNTX09GRlNFVCwgQ0FTRV9WRUNUT1JfTU9ERSwgTU9WRV9NQVgpOiBMaWtld2lzZS4KKwkoUG1vZGUsIEZVTkNUSU9OX01PREUpOiBMaWtld2lzZS4KKwkoTEVHSVRJTUFURV9PRkZTRVRfQUREUkVTU19QKTogSGFuZGxlIFRBUkdFVF82NEJJVC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTLCBMRUdJVElNSVpFX0FERFJFU1MpOiBMaWtld2lzZS4KKwkoR09fSUZfTU9ERV9ERVBFTkRFTlRfQUREUkVTUyk6IFNhbWUuCisKK0ZyaSBKYW4gMjYgMTA6Mzc6NTIgMTk5NiAgU3RhbiBDb3hzICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBtODhrLm1kICh1bXVsc2lkaTMpOiBBZGRlZCBmb3IgdGhlIDg4MTEwCisKK0ZyaSBKYW4gMjYgMDk6MzU6NDIgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoU1RSSVBfTkFNRV9FTkNPRElORyk6IERlYWwgd2l0aCBuYW1lcyB0aGF0IGhhdmUKKwlib3RoIEAgYW5kICogcHJlZml4IGNoYXJhY3RlcnMuCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBEaXR0by4KKworVGh1IEphbiAyNSAxMDowMzozNCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5oIChMRUdJVElNSVpFX0FERFJFU1MpOiBSZXdyaXRlIHRvIHVzZSBIT1NUX1dJREVfSU5ULCBub3QKKwlwbGFpbiBpbnQuCisJKG9wdGltaXplLGZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnMpOiBQcm92aWRlIGRlY2xhcmF0aW9uIGZvcgorCWV4cGFuZGVyIGZ1bmN0aW9ucy4KKworCSogcnM2MDAwLm1kIChtb3ZzaSk6IENvcnJlY3QgY29kZSBpbiBzcGxpdHRpbmcgYW4gYWRkcmVzcyBpbnRvCisJbG9hZCBmcm9tIHRoZSBUT0MsIGFuZCBhZGQgbG93L2hpZ2ggaW50ZWdlciBwYXJ0cy4gIElmIGV4cGVuc2l2ZQorCW9wdGltaXphdGlvbnMsIGFuZCByZWxvYWQgaGFzbid0IHN0YXJ0ZWQsIHVzZSBzZXBhcmF0ZSBwc2V1ZG8gcmVncworCWZvciBlYWNoIHN0ZXAuCisKKwkqIHJzNjAwMC5jIChzbWFsbF9kYXRhX29wZXJhbmQpOiBEb24ndCB1c2UgdGhlIGZ1bmN0aW9uCisJZWxpbWluYXRlX2NvbnN0YW50X3Rlcm0sIHVud2luZCBjb2RlIGRpcmVjdGx5LgorCShpbnB1dF9vcGVyYW5kKTogU1lNQk9MX1JFRi9DT05TVCBvZiBzbWFsbCBkYXRhIG9wZXJhbmQgaXMgdmFsaWQuCisJKHByaW50X3ssYWRkcmVzc199b3BlcmFuZCk6IEFkZCBAc2RhMjEoMCkgaW4gYXBwcm9wcmlhdGUgY2FzZXMgZm9yCisJc21hbGwgZGF0YS4KKwklTCwgZXRjLiBzbyB0aGF0IGlmIHRoZSBpdGVtIGlzIGluIHNtYWxsIG1lbW9yeSwgdGhlIGFwcHJvcHJpYXRlCisJcmVsb2NhdGlvbiBpcyB1c2VkLgorCShyczYwMDBfc2VsZWN0eyxfcnR4fV9zZWN0aW9uKTogRG9uJ3QgcHV0IGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cworCW9yIHNtYWxsIHN0cmluZ3MgaW4gLnNkYXRhMiBzaW5jZSB3ZSBjYW4ndCB0ZWxsIGZyb20gdGhlIHBvaW50ZXIKKwl3aGV0aGVyIGl0IGlzIGluIHRoZSBzbWFsbCBkYXRhIGFyZWEgb3Igbm90LgorCisJKiByczYwMDAuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEFkZCAnVScgZm9yIHNtYWxsIGRhdGEgcmVmZXJlbmNlcy4KKwkoTEVHSVRJTUFURV9TTUFMTF9EQVRBX1ApOiBUZXN0IGV4cGxpY2l0bHkgZm9yIFNZTUJPTF9SRUYgb3IgQ09OU1QKKwliZWZvcmUgY2FsbGluZyBzbWFsbF9kYXRhX29wZXJhbmQuCisKKwkqIHJzNjAwMC5tZCAobW92c2kpOiBIYW5kbGUgdGhlIGFkZHJlc3NlcyBvZiBzbWFsbCBkYXRhIGl0ZW1zLgorCisJKiByczYwMDAvc3lzdjQuaCAoZ19zd2l0Y2hfe3ZhbHVlLHNldH0pOiBBZGQgZGVjbGFyYXRpb25zLgorCShTREFUQV9ERUZBVUxUX1NJWkUpOiBEZWZhdWx0IHRvIDguCisJKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogSWYgLUcgd2FzIG5vdCBzZXQsIHNldCBpdCB0bworCVNEQVRBX0RFRkFVTFRfU0laRS4KKwkoQ0MxX1NQRUMpOiBQYXNzIC1HIG5uIHRvIHRoZSBjb21waWxlcnMuCisJKFNXSVRDSF9UQUtFU19BUkcpOiBBZGQgLUcgbm4gc3VwcG9ydC4KKwkoTElOS19TUEVDKTogUGFzcyAtRyBubiB0byB0aGUgbGlua2VyLgorCitUaHUgSmFuIDI1IDA5OjE2OjM0IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChzcGFyYzY0LSotc29sYXJpczIqKTogTmV3IHRhcmdldC4KKwkqIHNwYXJjL3NwYXJjLmggKFNQQVJDX3tWOSxBUkNINjR9KTogRGVmYXVsdCB2YWx1ZSBpcyAwLgorCSgqKTogUmVwbGFjZSBTUEFSQ1Y5IHdpdGggU1BBUkNfe1Y5LEFSQ0g2NH0uCisJKE1BU0tfQ1BVUyk6IERlZmluZS4KKwkoe01BU0ssVEFSR0VUfV9FTlYzMik6IERlbGV0ZS4KKwkoe01BU0ssVEFSR0VUfV9BUkNINjQsVEFSR0VUX0FSQ0gzMik6IERlZmluZS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogUmVzZXQgY3B1IGZsYWdzIGZpcnN0IGZvciBlYWNoIHZhcmlhbnQuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgMzIgYml0IHY5IHN5c3RlbSwgdW5maXggZzEtZzQsCisJZml4IGc1LCBhbmQgbWFrZSAlZjQ4LSVmODAgY2FsbCB1c2VkLgorCSogc3BhcmMvc3A2NC1hb3V0LmggKFNQQVJDX3tWOSxBUkNINjR9KTogRGVmaW5lLgorCShUQVJHRVRfVkVSU0lPTik6IERlZmluZS4KKwkoVEFSR0VUX0RFRkFVTFQpOiBBZGQgTUFTS19BUkNINjQsIGRlbGV0ZSBNQVNLX0VOVjMyLgorCShKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04pOiBEZWZpbmUuCisJKFJFQURPTkxZX0RBVEFfU0VDVElPTik6IE1ha2UgdGV4dF9zZWN0aW9uLgorCSogc3BhcmMvc3A2NC1lbGYuaCAoU1BBUkNfe1Y5LEFSQ0g2NH0pOiBEZWZpbmUuCisJKFRBUkdFVF9ERUZBVUxUKTogQWRkIE1BU0tfQVJDSDY0LgorCShFTkRGSUxFX1NQRUMpOiBObyBsb25nZXIgbmVlZCB0byBjaGVjayBmb3IgLW5vc3RhcnRmaWxlcy4KKwkoQVNNX0lERU5USUZZX0dDQyk6IERlZmluZSBhcyBlbXB0eS4KKwkqIHNwYXJjL3NwNjQtc29sMi5oOiBOZXcgZmlsZS4KKwkqIHNwYXJjL3NwYXJjLmMgKCopOiBSZXBsYWNlIFRBUkdFVF9WOSB3aXRoIFRBUkdFVF9BUkNINjQuCisJKGhhcmRfMzJiaXRfbW9kZV9jbGFzc2VzKTogQWRkIHY5IHJlZ3MuCisJKGdlbl92OV9zY2MpOiBIYW5kbGUgMzIgYml0IHY5IGNhc2UuICBDYWxsIHY5X3JlZ2NtcF9wLgorCSogc3BhcmMvc3BhcmMubWQgKCopOiBSZXBsYWNlIFRBUkdFVF9WOSB3aXRoIFRBUkdFVF9BUkNINjQgaW4gcGxhY2VzCisJcmVxdWlyaW5nIDY0IGJpdCBlbnZpcm9ubWVudC4KKwkobXVsdGYzX2V4dGVuZCk6IFJlcXVpcmUgVEFSR0VUX0hBUkRfUVVBRC4KKworVGh1IEphbiAyNSAwMDozMzoyNSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZy9kYnhjb2ZmLmggKERCWF9VU0VfQklOQ0wpOiBEZWZpbmUuCisJKERCWF9DT05USU5fTEVOR1RIKTogRGVmaW5lIGlmIG5vdCBkZWZpbmVkLgorCitXZWQgSmFuIDI0IDE4OjAwOjEyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KKworCSogYWxwaGEuYyAoYWxwaGFfd3JpdGVfdmVyc3RhbXApOiBPbmx5IGVtaXQgTVNfU1RBTVAgYW5kIExTX1NUQU1QLAorCW5vdCB0aGUgZXh0cmEgbnVtYmVycy4KKworV2VkIEphbiAyNCAxNToxODoxNSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5jIChpbml0X2N1bXVsYXRpdmVfYXJncyk6IFJld3JpdGUgdG8gdXNlIERFRkFVTFRfQUJJCisJcnVudGltZSB0ZXN0cywgaW5zdGVhZCBvZiBWLjQgI2lmZGVmcy4KKwkoZnVuY3Rpb25fYXJneyxfYWR2YW5jZSxfcGFydGlhbF9ucmVncyxfcGFzc19ieV9yZWZlcmVuY2V9KTogRGl0dG8uCisJKHNldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBEaXR0by4KKyAgCShpbml0X2N1bXVsYXRpdmVfYXJncyk6IFNldCBjYWxsX2Nvb2tpZSBmaWVsZCB0byBDQUxMX05PUk1BTCBvcgorCUNBTExfTlRfRExMSU1QT1JULgorCShmdW5jdGlvbl9hcmcpOiBBZGQgc3VwcG9ydCBmb3IgRExMIGltcG9ydHMuCisJKHJzNjAwMF92YWxpZF97ZGVjbCx0eXBlfV9hdHRyaWJ1dGVfcCk6IE5ldyBmdW5jdGlvbnMgZm9yIE5UCisJYXR0cmlidXRlcyBjZGVjbCwgc3RkY2FsbCwgZGxsaW1wb3J0LCBhbmQgZGxsZXhwb3J0LgorCShyczYwMDBfY29tcF90eXBlX2F0dHJpYnV0ZXMpOiBOZXcgYXR0cmlidXRlIHN1cHBvcnQuCisJKHJzNjAwMF9zZXRfZGVmYXVsdF90eXBlX2F0dHJpYnV0ZXMpOiBEaXR0by4KKwkocnM2MDAwX2RsbF9pbXBvcnRfcmVmKTogRGl0dG8uCisKKwkqIHJzNjAwMC5oIChGUF9BUkdfe0FJWCxTWVNWfV9NQVhfUkVHKTogTW92ZSBoZXJlIGZyb20gc3lzdjQuaC4KKwkqIHN5c3Y0LmggKEZQX0FSR197QUlYLFNZU1Z9X01BWF9SRUcpOiBNb3ZlIHRvIHJzNjAwMC5oLgorCisJKiByczYwMDAuaCAocnM2MDAwX2NhbGxfY29va2llKTogTmV3IGVudW0gdG8gZGVzY3JpYmUgdGhlIGludGVnZXIKKwl0aGF0IGlzIHRoZSAybmQgYXJndW1lbnQgdG8gY2FsbCBpbnNucyBhbmQgM3JkIGFyZ3VtZW50IHRvCisJY2FsbF92YWx1ZSBpbnNucy4gQWRkIHN1cHBvcnQgZm9yIE5UIERMTCBpbXBvcnRzLgorCShyczYwMDBfYXJncyk6IEFkZCBjYWxsX2Nvb2tpZSBmaWVsZC4KKwkoVkFMSURfTUFDSElORV97REVDTCxUWVBFfV9BVFRSSUJVVEUpOiBEZWZpbmUgdG8gY2FsbCBDIGZ1bmN0aW9ucy4KKwkoe0NPTVBfVFlQRSxTRVRfREVGQVVMVF9UWVBFfV9BVFRSSUJVVEVTKTogRGl0dG8uCisJKHJzNjAwMF92YWxpZF97ZGVjbCx0eXBlfV9hdHRyaWJ1dGVfcCk6IEFkZCBkZWNsYXJhdGlvbnMuCisJKHJzNjAwMF9jb21wX3R5cGVfYXR0cmlidXRlcyk6IERpdHRvLgorCShyczYwMDBfc2V0X2RlZmF1bHRfdHlwZV9hdHRyaWJ1dGVzKTogRGl0dG8uCisJKHJzNjAwMF9kbGxfaW1wb3J0X3JlZik6IERpdHRvLgorCisJKiB3aW4tbnQuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IEFkZCBzdXBwb3J0IGZvciBkbGxleHBvcnQKKwlhdHRyaWJ1dGUuCisKKwkqIHJzNjAwMC5tZCAoY2FsbCBpbnNucyk6IEFkZCBzdXBwb3J0IGZvciBOVCBkbGxpbXBvcnQgZnVuY3Rpb25zLAorCWFuZCBmaXggdXAgTlQgaW5kaXJlY3QgY2FsbHMuICBBbHNvIGNvcnJlY3RseSBzZXQgdGhlIGZsYWcKKwlyczYwMDBfc2F2ZV90b2NfcCBvbiBOVCBpbmRpcmVjdCBjYWxscy4KKworCSogYWl4NDEuaCAoTElOS19TUEVDKTogVXNlIG5ldyBleHRyYSBzcGVjcyB0byBhdm9pZCBzZXBhcmF0ZQorCXZlcnNpb25zIGZvciBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGF0aW9uLgorCSogcnM2MDAwLmggKExJTktfU1BFQyk6IERpdHRvLgorCSogc3lzdjQuaCAoTElOS19TUEVDKTogRGl0dG8uCisKKwkqIHJzNjAwMC5oIChFWFRSQV9TUEVDUyk6IEFkZCBsaW5rX3N5c2NhbGxzLCBsaW5rX2xpYmcsIGxpbmtfcGF0aCwKKwlsaW5rX3NwZWNzLCBhbmQgYWxzbyBhbGxvdyB0YXJnZXQgdG8gZGVmaW5lIG1vcmUgd2l0aCB0aGUgbWFjcm8KKwlTVUJUQVJHRVRfRVhUUkFfU1BFQ1MuCisJKExJTktfe0xJQkcsU1lTQ0FMTFN9X1NQRUMpOiBEZWZpbmUgYXMgZml4ZWQgcGF0aG5hbWVzIGlmIG5hdGl2ZQorCWNvbXBpbGF0aW9uLCBhbmQgY3VycmVudGx5IG5vdGhpbmcgaWYgY3Jvc3MgY29tcGlsaW5nLgorCShMSU5LX1NUQVJUX1NQRUMpOiBJZiBub3QgZGVmaW5lZCwgZGVmaW5lIGFzIGVtcHR5LgorCSogZWFiaXssc2ltfS5oIChMSU5LX1NUQVJUX1NQRUMpOiBBZGQgZGVmYXVsdCAtVHRleHQgZm9yCisJc2ltdWxhdG9yLgorCisJKiBlYWJpe2FpeCxsZX0uaCAoTVVMVElMSUJfREVGQVVMVFMpOiBBZGQgLW1uby1zZGF0YSBkZWZhdWx0LgorCSogc3lzdjR7LGxlfS5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERpdHRvLgorCisJKiByczYwMDAuYyAoc21hbGxfZGF0YV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlIGlmCisJdGhlIG9wZXJhbmQgbGl2ZXMgaW4gc21hbGwgZGF0YSB1bmRlciBlYWJpLgorCShyczYwMDBfc2VsZWN0eyxfcnR4fV9zZWN0aW9uKTogTmV3IGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgd2hldGhlcgorCXRvIHB1dCBnbG9iYWwgYW5kIHN0YXRpYyBpdGVtcyBpbiB0aGUgVi40L2VhYmkgc21hbGwgZGF0YSBhcmVhcyBpZgorCS1tc2RhdGEuCisKKwkqIHJzNjAwMC5oIChMRUdJVElNQVRFX1NNQUxMX0RBVEFfUCk6IENhbGwgc21hbGxfZGF0YV9vcGVyYW5kIGl0CisJaWYgVi40LgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBJZiBMRUdJVElNQVRFX1NNQUxMX0RBVEFfUCwgdGhlIGl0ZW0KKwlpcyBhIHZhbGlkIGFkZHJlc3MuCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgZnB1dHMsIG5vdCBmcHJpbnRmLgorCShzbWFsbF9kYXRhX29wZXJhbmQpOiBEZWNsYXJlIGZ1bmN0aW9uLgorCisJKiBzeXN2NC5oIChUQVJHRVRfU1dJVENIRVMpOiBOZXcgc3dpdGNoIC1tc2RhdGEgdG8gdXNlIFYuNCBhbmQKKwllYWJpIGRlZmluZWQgc21hbGwgZGF0YSBzZWN0aW9ucy4KKwkoU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMpOiBEb24ndCBhbGxvdyAtbXNkYXRhIGFuZAorCS1tcmVsb2NhdGFibGUgb3IgLW1jYWxsLWFpeCBvcHRpb25zLgorCShFWFRSQV9TRUNUSU9Oe1MsX0ZVTkNUSU9OU30pOiBBZGQgLnNkYXRhLCAuc2RhdGEyLCBhbmQgLnNic3MKKwlzZWN0aW9ucy4KKwkoU0VMRUNUeyxfUlRYfV9TRUNUSU9OKTogQ2FsbCAocnM2MDAwX3NlbGVjdHssX3J0eH1fc2VjdGlvbikuCisJKEFTTV9TUEVDKTogVGhlIC1tc2RhdGEgc3dpdGNoIHBhc3NlcyAtbWVtYiB0byB0aGUgYXNzZW1ibGVyLgorCShFTkNPREVfU0VDVElPTl9JTkZPKTogUHJlcGVuZCBhICdAJyB0byB0aGUgbmFtZSwgaWYgdGhlIGl0ZW0KKwlsaXZlcyBpbiBhIHNtYWxsIGRhdGEgcmVnaW9uLgorCShTVFJJUF9OQU1FX0VOQ09ESU5HKTogU3RyaXAgJ0AnIGluIGFkZGl0aW9uIHRvICcqJy4KKwkoQVNNX09VVFBVVF9MQUJFTFJFRik6IFN0cmlwIGEgbGVhZGluZyAnQCcuCisKKwkqIHQte3BwYyxlYWJpfWdhcyAoTVVMVElMSUIqKTogQWRkIHN1cHBvcnQgZm9yIGxpYnJhcmllcyBidWlsdAorCXdpdGgvd2l0aG91dCAtbXNkYXRhLiAgRHJvcCBzdXBwb3J0IGZvciAtbWNhbGwtYWl4ZGVzYyBsaWJyYXJpZXMuCisKK1dlZCBKYW4gMjQgMTU6MTg6MTUgMTk5NiAgS2ltIEtudXR0aWxhICA8a3JrQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZy9yczYwMDAvd2luLW50LmggKExJQl9TUEVDKTogQ2hhbmdlIG9wdGlvbnMgdG8gR05VIGxkIHN0eWxlLgorCShGcm9tIEphc29uIE1vbGVuZGEpCisKK1dlZCBKYW4gMjQgMTQ6MzI6NDggMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiByZWxvYWQxLmMgKHVzZWRfc3BpbGxfcmVncyk6IE5ldyB2YXJpYWJsZS4KKwkocmVsb2FkKTogU2V0IGl0LgorCSogcmVvcmcuYyAoZmluZF9kZWFkX29yX3NldF9yZWdpc3RlcnMpOiBOZXcgZnVuY3Rpb24uCisJKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IERlbGV0ZSBsb29wIGxvb2tpbmcgZm9yd2FyZCBmcm9tIHRhcmdldAorCWFuZCBpbnN0ZWFkIGNhbGwgZmluZF9kZWFkX29yX3NldF9yZWdpc3RlcnMuCisJKGZpeF9yZWdfZGVhZF9ub3RlKTogTmV3IGZ1bmN0aW9uLgorCShmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogQ2FsbCBpdC4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBDb3JyZWN0IGNvbW1lbnQuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IENvcnJlY3QgY29tbWVudHMuICBEb24ndCBzZXQgbWF5YmVfbXVsdGlwbGUgd2hlbgorCXBhc3MgYnJhbmNoIHRvIHNjYW5fc3RhcnQuICBEb24ndCBzZXQgbm90X2V2ZXJ5X2l0ZXJhdGlvbiBhZnRlcgorCXBhc3NpbmcgYSBDT0RFX0xBQkVMLCBvciBhZnRlciBwYXNzaW5nIGEgYnJhbmNoIG91dCBvZiB0aGUgbG9vcC4KKwlXaGVuIG91dHB1dHRpbmcgREVTVF9BRERSIGdpdiBpbmNyZW1lbnRzLCBwdXQgdGhlbSBuZXh0IHRvIHRoZSBtZW1vcnkKKwlhZGRyZXNzIG9uIG1hY2hpbmVzIHdpdGggYXV0by1pbmNyZW1lbnQgYWRkcmVzc2VzLgorCShyZWNvcmRfYml2KTogU2V0IG5ldyBmaWVsZCBhbHdheXNfZXhlY3V0ZWQuCisJKHJlY29yZF9naXYpOiBTZXQgbmV3IGZpZWxkcyBhbHdheXNfZXhlY3V0ZWQgYW5kIGF1dG9faW5jX29wdC4KKwkobWF5YmVfZWxpbWluYXRlX2Jpdl8xKTogUmVqZWN0IGJpdiB3aXRoIGF1dG9faW5jX29wdCBvcHRpbWl6YXRpb24KKwlpbiBzb21lIGNhc2VzLgorCSogbG9vcC5oIChzdHJ1Y3QgaW5kdWN0aW9uKTogTmV3IGZpZWxkcyBhbHdheXNfZXhlY3V0ZWQgYW5kCisJYXV0b19pbmNfb3B0LgorCisJKiBjLXR5cGVjay5jIChwb2ludGVyX2ludF9zdW0pOiBVc2UgVFlQRV9QUkVDSVNJT04gKHNpemV0eXBlKSBub3QKKwlQT0lOVEVSX1NJWkUgdG8gYWdyZWUgd2l0aCBleHByLmMuCisKK1R1ZSBKYW4gMjMgMTU6MTc6MzAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9zb2wyLmggKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IERlbGV0ZSwgdXNlIHN2cjQuaCdzLgorCitUdWUgSmFuIDIzIDAzOjI4OjAxIDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjZXhwLnk6IFVzZSBwcmVwcm9jZXNzb3IgYXJpdGhtZXRpYyBpbnN0ZWFkIG9mIEMgYXJpdGhtZXRpYworCXRvIGF2b2lkIHdhcm5pbmdzIG9uIHNvbWUgY29tcGlsZXJzLgorCShIT1NUX1dJREVfSU5UX01BU0spOiBSZW1vdmUuCisJKE1BWF9DSEFSX1RZUEVfTUFTSywgTUFYX1dDSEFSX1RZUEVfTUFTSyk6IE5ldyBtYWNyb3MuCisJKHl5bGV4KTogVXNlIHRoZW0uCisKK01vbiBKYW4gMjIgMTg6Mzk6MjEgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CisKKwkqIGNwcGV4cC5jIChjcHBfcGFyc2VfZXhwcik6ICBTZXQgSEFWRV9WQUxVRSBmbGFnIGZvciB1bmFyeQorCW1pbnVzLCBldmVuIGlmIHNraXBfZXZhbHVhdGlvbiBpcyB0cnVlLgorCitNb24gSmFuIDIyIDE2OjUzOjQ4IDE5OTYgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAvcnM2MDAwLmggKEJJR0dFU1RfQUxJR05NRU5UKTogSW5jcmVhc2UgdG8gNjQgYWx3YXlzLgorCShCSUdHRVNUX0ZJRUxEX0FMSUdOTUVOVCk6IERlZmluZS4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogTWVyZ2UgUFJFX0lOQyBhbmQgUFJFX0RFQyBjYXNlcy4KKwkoTEVHSVRJTUlaRV9BRERSRVNTKTogVXNlIFBtb2RlIG5vdCBTSW1vZGUuCisJKENBU0VfVkVDVE9SX01PREUpOiBEZXBlbmQgb24gVEFSR0VUXzY0QklULgorCShBU01fT1VUUFVUX0NPTU1PTik6IERlbGV0ZS4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTik6IERlZmluZS4KKwkqIHJzNjAwMC9zeXN2NC5oIChCSUdHRVNUX0ZJRUxEX0FMSUdOTUVOVCk6IFVuZGVmaW5lLgorCSogcnM2MDAwL3JzNjAwMC5tZCAoYWRkZGkzLCBzdWJkaTMsIG5lZ3NpMik6IE5ldyBQb3dlclBDNjQgcGF0dGVybnMuCisJKGFzaGxkaTMsIGxzaHJkaTMsIGFzaHJkaTMsIGFuZGRpMywgaW9yZGkzLCB4b3JkaTMpOiBTYW1lLgorCShtb2RkaTMsIGNtcGRpLCB0YWJsZWp1bXAgbWF0Y2hlcnMpOiBTYW1lLgorCShkaXZkaTMpOiBVcGRhdGUgUG93ZXJQQzY0IHBhdHRlcm5zLgorCSogcnM2MDAwLmMgKHJzNjAwMF9pbml0aWFsaXplX3RyYW1wb2xpbmUsIGNhc2UgQUJJX0FJWCk6IFVzZSBQbW9kZQorCW5vdCBTSW1vZGUuCisKK1N1biBKYW4gMjEgMjM6MzM6MjQgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBkYnhvdXQuYzogSW5jbHVkZSA8c3RyaW5nLmg+CisKK0ZyaSBKYW4gMTkgMTc6MTc6MDAgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIHRyZWUuaCAoQ09OU1RSVUNUT1JfVEFSR0VUX0NMRUFSRURfUCk6ICBSZW1vdmVkLgorCSogZXhwci5jIChpc196ZXJvc19wLCBtb3N0bHlfemVyb3NfcCk6ICBIYW5kbGUgU0VUX1RZUEUgQ09OU1RSVUNUT1JzLgorCShzdG9yZV9jb25zdHJ1Y3Rvcl9maWVsZCk6ICBOZXcgaGVscGVyIGZ1bmN0aW9uLgorCShzdG9yZV9jb25zdHJ1Y3Rvcik6ICBUYWtlICdjbGVhcmVkJyBwYXJhbWV0ZXIuCisJKGV4cGFuZF9leHByKTogIEZpeCBzdG9yZV9jb25zdHJ1Y3Rvcl9jYWxsIHRvIHBhc3MgJ2NsZWFyZWQnIG9mIDAuCisKKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IsIFNFVF9UWVBFKTogIEZpeCBvZmYtYnktb25lLWVycm9yLgorCUFsc28sIGRldmlkZSBzdGFydCBieXRlIGJ5IEJJVFNfUEVSX1VOSVQgYmVmb3JlIHBhc3NpbmcgdG8gbWVtc2V0LgorCShzdG9yZV9jb25zdHJ1Y3Rvcik6ICBgY29udGludWUnIGluIHdyb25nIHBsYWNlLgorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogIElmIHN0b3JpbmcgaW50byBhIHJhbmdlIG9mIGFycmF5CisJZWxlbWVudHMsIGFuZCB0aGUgcmFuZ2UgaXMgc21hbGwsIG9yIHRoZSB0YXJnZXQgaXQgbm90IG1lbW9yeSwKKwl1bnJvbGwgdGhlIGxvb3AgKGFuZCB1c2Ugc3RvcmVfZmllbGQsIHdoaWNoIGhhbmRsZXMgUkVHcykuCisJKHN0b3JlX2NvbnN0cnVjdG9yKTogIEhhbmRsZSBSQU5HRV9FWFBSIGluIGFycmF5IGluZGV4LgorCitGcmkgSmFuIDE5IDE2OjUyOjI1IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2hhcm1lZC5jeWdudXMuY29tPgorCisJKiBzdnI0LmggKFNXSVRDSF9UQUtFU19BUkcpOiBBZGQgJ3gnLgorCSogc3BhcmMvc29sMi5oIChTV0lUQ0hfVEFLRVNfQVJHKTogTGlrZXdpc2UuCisKK0ZyaSBKYW4gMTkgMTU6MTg6MzggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBkYnhvdXQuYyAoZmxhZ19taW5pbWFsX2RlYnVnKTogSW5pdGlhbGl6ZSB0byAwIGlmIGJvdGgKKwlOT19ET0xMQVJfSU5fTEFCRUwgYW5kIE5PX0RPVF9JTl9MQUJFTCBhcmUgZGVmaW5lZC4KKwkoZGJ4b3V0X3R5cGVfbWV0aG9kcyk6IElmIHRoZSBtYW5nbGVkIG1ldGhvZCBuYW1lIHVzZXMgdGhlIHNwZWNpYWwKKwlDKysgbWFya2VyIGNoYXJhY3RlciwgcGFzcyBzaG93X2FyZ190eXBlcyBhcyAxIHdoZW4gY2FsbGluZworCWRieG91dF90eXBlLgorCitGcmkgSmFuIDE5IDExOjQ4OjI4IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL2VhYmktY2kuYXNtIChfU0RBX0JBU0VfKTogTW92ZSB0aGUgZGVmYXVsdCBkZWZpbml0aW9uCisJZnJvbSB0aGUgLmdvdCBzZWN0aW9uIHRvIHRoZSAuc2RhdGEgc2VjdGlvbi4gIERvIG5vdCBhZGQgMzI3NjguCisJKF9TREEyX0JBU0VfKTogUHJvdmlkZSBhIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworCSogcnM2MDAwL2VhYmktY24uYXNtICguZ290LmJscmwpOiBEb24ndCBkZWZpbmUgdGhpcyBzZWN0aW9uIGFueQorCW1vcmUsIGxpbmtlciBub3cgZGlyZWN0bHkgY3JlYXRlcyB0aGUgYmxybCBpbnN0cnVjdGlvbiBhdAorCV9HTE9CQUxfT0ZGU0VUX1RBQkxFXy00LgorCitGcmkgSmFuIDE5IDA1OjEyOjMxIDE5OTYgIFJpY2hhcmQgRWFybnNoYXcgPHJlYXJuc2hhQGFybWx0ZC5jby51az4KKworCSogYXJtL2xpYjFmdW5jcy5hc20gKF9fZGl2c2kzLCBfX21vZHNpMywgX191ZGl2c2kzLCBfX3Vtb2RzaTMpOgorCVJlcGxhY2Ugd2l0aCBzbWFsbGVyLCBmYXN0ZXIgdmVyc2lvbnMuCisKK1RodSBKYW4gMTggMTc6NDE6NDYgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzaC5jIChjdHlwZS5oKTogRGVsZXRlLgorCShyZWdub19yZWdfY2xhc3MsIHJlZ19jbGFzc19mcm9tX2xldHRlcik6IEFkZCBTSDNlIHN1cHBvcnQuCisJKHByZXBhcmVfc2NjX29wZXJhbmRzLCBicm9rZW5fbW92ZSwgcHVzaCwgcG9wLCBwdXNoX3JlZ3MpOiBMaWtld2lzZS4KKwkoY2FsY19saXZlX3JlZ3MsIHNoX2V4cGFuZF9wcm9sb2d1ZSwgc2hfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdzaWUuCisJKGluaXRpYWxfZWxpbWluYXRpb25fb2Zmc2V0LCBhcml0aF9yZWdfb3BlcmFuZCk6IExpa2V3aXNlLgorCShzaF9idWlsdGluX3NhdmVyZWdzLCBmcF96ZXJvX29wZXJhbmQsIGZwX29uZV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9ucy4KKwkoc2hfZnVuY3Rpb25fYXJnLCBzaF9mdW5jdGlvbl9hcmdfcGFydGlhbF9ucmVncyk6IERlbGV0ZS4KKwkqIHNoLmggKENQUF9TUEVDLCBDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IEFkZCBTSDNFIHN1cHBvcnQuCisJKFRBUkdFVF9TV0lUQ0hFUywgT1ZFUlJJREVfT1BUSU9OUywgRklSU1RfUFNFVURPX1JFR0lTVEVSKTogTGlrZXdpc2UuCisJKEZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUywgSEFSRF9SRUdOT19NT0RFX09LKTogTGlrd2Vpc2UuCisJKGVudW0gcmVnX2NsYXNzLCBSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUyk6IExpa2V3aXNlLgorCShSRUdfQUxMT0NfT1JERVIsIENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1AsIE5QQVJNX1JFR1MpOiBMaWtld2lzZS4KKwkoRlVOQ1RJT05fVkFMVUUsIExJQkNBTExfVkFMVUUsIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1ApOiBMaWtld2lzZS4KKwkoRlVOQ1RJT05fQVJHX1JFR05PX1AsIENVTVVMQVRJVkVfQVJHUywgUk9VTkRfUkVHKTogTGlrZXdpc2UuCisJKElOSVRfQ1VNVUxBVElWRV9BUkdTLCBGVU5DVElPTl9BUkdfQURWQU5DRSwgRlVOQ1RJT05fQVJHKTogTGlrZXdpc2UuCisJKEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTLCBMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBMaWtld2lzZS4KKwkoTU9ERV9ESVNQX09LXzQsIFJFR0lTVEVSX01PVkVfQ09TVCwgUkVHSVNURVJfTkFNRVMpOiBMaWtld2lzZS4KKwkoREJYX1JFR0lTVEVSX05VTUJFUiwgZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgorCShTSDNFX0JJVCwgVEFSR0VUX1NIM0UsIEZQVUxfUkVHLCBGSVJTVF9GUF9SRUcsIExBU1RfRlBfUkVHKTogTmV3LgorCShGSVJTVF9GUF9QQVJNX1JFRywgRklSU1RfRlBfUkVUX1JFRywgQkFTRV9SRVRVUk5fVkFMVUVfUkVHKTogTmV3LgorCShCQVNFX0FSR19SRUcsIGVudW0gc2hfYXJnX2NsYXNzLCBzdHJ1Y3Qgc2hfYXJncyk6IE5ldy4KKwkoR0VUX1NIX0FSR19DTEFTUywgUEFTU19JTl9SRUdfUCwgc2hfYnVpbHRpbl9zYXZlcmVncyk6IE5ldy4KKwkoRVhQQU5EX0JVSUxUSU5fU0FWRVJFR1MsIERPVUJMRV9UWVBFX1NJWkUpOiBOZXcuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSBicm9rZW4gLW0zbCBvcHRpb24uCisJKiBzaC5tZCAoY3B1LCBtb3ZzaV9pLCBtb3ZzZl9pLCBibHQsIGJnZSwgc2xlLCBzZ2UpOiBBZGQgU0gzRSBzdXBwb3J0LgorCShwdXNoX2UsIHBvcF9lLCBtb3ZzaV9pZSwgbW92c2ZfaWUsIGFkZHNmMywgc3Vic2YzKTogTmV3IHBhdHRlcm5zLgorCShtdWxzZjMsIG1hY3NmMywgZGl2c2YzLCBmbG9hdHNpc2YyLCBmaXhfdHJ1bmNzZnNpMik6IE5ldyBwYXR0ZXJucy4KKwkoY21wZ3RzZl90LCBjbXBxZXNmX3QsIGNtcHNmLCBuZWdzZjIsIHNxcnRzZjIsIGFic3NmMik6IE5ldyBwYXR0ZXJucy4KKwkoYWJzc2YyKzksIGFic3NmMisxMCk6IEFkZCBTSDNlIHN1cHBvcnQgdG8gcGVlcGhvbGVzCisJKGFic3NmMisxMSwgYWJzc2YyKzEyKTogTmV3IHBlZXBob2xlcyBmb3IgU0gzZS4KKwkqIHQtc2ggKE1VTFRJTElCX09QVElPTlMpOiBBZGQgU0gzRSBzdXBwb3J0LgorCShNVUxUSUxJQl9ESVJOQU1FUyk6IERlZmluZSB0byBlbXB0eS4KKworVGh1IEphbiAxOCAxMToyOToxMSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBDaGFuZ2UgdHlwZSBvZiBvcG5hbWUKKwlwYXJhbWV0ZXIgdG8gY29uc3QgY2hhciAqLgorCShjcGx1c19tYW5nbGVfb3BuYW1lKTogQ2hhbmdlIHJldHVybiB0eXBlIGFuZCB0eXBlIG9mIG9wbmFtZQorCXBhcmFtZXRlciB0byBjb25zdCBjaGFyICouICBEb24ndCBjYXN0IHJldHVybiB2YWx1ZS4KKwkqIGRlbWFuZ2xlLmggKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KKwkoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IExpa2V3aXNlLgorCitUaHUgSmFuIDE4IDEwOjA3OjMzIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogZ2NjLmMgKGV4dHJhX3NwZWNzKTogSWYgRVhUUkFfU1BFQ1MgaXMgZGVmaW5lZCwgZGVmaW5lCisJZXh0cmFfc3BlY3MgYXJyYXkgdG8gaG9sZCB0aGUgZXh0cmEgc3BlY3MgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24KKwlkZWZpbmVzLgorCShzZXRfc3BlYyk6IElmIEVYVFJBX1NQRUNTIGlzIGRlZmluZWQsIGhhbmRsZSB0aGUgZXh0cmEKKwlzcGVjaWZpY2F0aW9ucy4KKwkocHJvY2Vzc19jb21tYW5kKTogRGl0dG8uCisJKG1haW4pOiBEaXR0by4KKwkodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogRGl0dG8uCisKKwkqIHJzNjAwMC97cnM2MDAwLmgscG93ZXJwYy5oLGFpeDQxLmh9ICh7Q1BQLEFTTX1fU1BFQyk6IFVzZSBjb21tb24KKwlzcGVjcyB3aXRoIEVYVFJBX1NQRUNTLCBvbmx5IG1vZGlmeWluZyB0aGluZ3MgaW4gdGhlIHRhcmdldCB0aGF0CisJbmVlZHMgdG8gYmUgbW9kaWZpZWQsIHJhdGhlciB0aGFuIGhhdmluZyB0b25zIG9mIG1vc3RseSBkdXBsaWNhdGUKKwlkZWZpbml0aW9ucy4KKwkqIHJzNjAwMC97c3lzdjR7LGxlfS5oLH1uZXR3YXJlLmgsbHlueC5oLH0gKHtDUFAsQVNNfV9TUEVDKTogRGl0dG8uCisJKiByczYwMDAvZWFiaXtsZSxhaXh9LmgsYWl4M25ld2FzLmh9fSAoe0NQUCxBU019X1NQRUMpOiBEaXR0by4KKworV2VkIEphbiAxNyAxOTozODoyNCAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2V4cC55IChIT1NUX1dJREVfSU5UX01BU0spOiBSZW5hbWVkIGZyb20gTE9OR19NQVNLOworCXVzZSBIT1NUX1dJREVfSU5ULgorCShIT1NUX1dJREVfSU5ULCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UKTogUHV0IGJhY2suCisJKHBhcnNlX2NfZXhwcmVzc2lvbiwgZXhwcmVzc2lvbl92YWx1ZSwgcGFyc2VfZXNjYXBlLCBsZWZ0X3NoaWZ0LAorCXJpZ2h0X3NoaWZ0LCBzdHJ1Y3QgY29uc3RhbnQsIGV4cCwgcGFyc2VfbnVtYmVyLCB5eWxleCk6CisJUmVwbGFjZSBgbG9uZycgd2l0aCBgSE9TVF9XSURFX0lOVCcuCisJKiBjY2NwLmMgKFBUUl9JTlRfVFlQRSk6IFJlbW92ZSBvYnNvbGV0ZSBkZWZpbmUgdG8gYGxvbmcnLgorCShwYXJzZV9lc2NhcGUsIHBhcnNlX2NfZXhwcmVzc2lvbiwgZXZhbF9pZl9leHByZXNzaW9uLCBnZXRfbGludGNtZCwKKwlkb19saW5lLCBkb19pZiwgZG9fZWxpZik6IFJlcGxhY2UgYGxvbmcnIHdpdGggYEhPU1RfV0lERV9JTlQnLgorCSh0cmlncmFwaF9wY3ApOiBEb24ndCBhc3N1bWUgYSBwb2ludGVyIGRpZmZlcmVuY2UgZml0cyBpbiBhbiBpbnQuCisKK1dlZCBKYW4gMTcgMTg6NTY6MzEgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBGb3IgbXVsdGktd29yZCBiaXRmaWVsZCwgY2xvYmJlcgorCXRhcmdldCBiZWZvcmUgc3RvcmluZyB0byBpdC4KKworV2VkIEphbiAxNyAxNDoxOTozNCAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAc2xhdmUuY3lnbnVzLmNvbT4KKworCSogc3BhcmMve3Qtc29sMix0LXN1bm9zNDAsdC1zdW5vczQxfTogRGVmaW5lIGF3YXkgTElCR0NDMV9URVNUCisJc28gdGhhdCBjcm9zcyBjb21waWxlcnMgdGFyZ2V0ZWQgYXQgdGhlc2Ugc3lzdGVtcyB3aWxsIGJ1aWxkLgorCitXZWQgSmFuIDE3IDA5OjUxOjU4IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMuaCAodjkgSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBGaXggdHlwb3MuCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBOZXcgbG9jYWwgbGFuZ19uX2ZpbGVzLCBhbmQgdXNlCisJaXQgaW4gdGVzdCBvZiAtYyB3aXRoIC1vLiAgTW92ZSB0ZXN0IG9mIC1zYXZlLXRlbXBzLgorCVRlc3QgZm9yIHRyYWlsaW5nIE5VTCBpbiAtYy4KKworCSogaTM4Ni90LWdvMzI6IE5ldyBmaWxlLgorCSogaTM4Ni94bS1nbzMyLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpWzM0NV04Ni0qLWdvMzIqKTogRGVmaW5lIHhtX2ZpbGUgYW5kIHRtYWtlX2ZpbGUuCisKK1dlZCBKYW4gMTcgMDc6NDc6NDMgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2NjcC5jIChIT1NUX0JJVFNfUEVSX1dJREVfSU5ULCBIT1NUX1dJREVfSU5UKTogUHV0IGJhY2suCisJKHBjZmluY2x1ZGUpOiBVc2UgSE9TVF9XSURFX0lOVCBmb3IgY2FzdGluZyBwb2ludGVyIHRvIGludGVnZXIuCisKK1dlZCBKYW4gMTcgMDU6MjU6MDYgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogdmEtcGEuaCAoX19nbnVjX3ZhX2xpc3QpOiBVc2UgYSAidm9pZCAqIi4KKworVHVlIEphbiAxNiAxODo0NToyMyAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KKworCSogY3BwZXhwLmMgKGNwcF9sZXgpOiAgRG8gY3BwX3BvcF9idWZmZXIgYWZ0ZXIgQ1BQX1BPUCBzbyByZXRyaWVkCisJY3BwX3NraXBfaHNwYWNlIHdpbGwgYWN0dWFsbHkgd29yay4KKworCSogY3BwZXhwLmMgKFNLSVBfT1BFUkFORCk6ICBOZXcgbWFjcm8uCisJKGNwcF9wYXJzZV9leHByKTogIFN1cHByZXNzIGV2YWx1YXRpb24gYW5kIGRpYWdub3N0aWNzIGluCisJdW5ldmFsdWF0ZWQgc3ViZXhwcmVzc2lvbnMuCisJQ29ycmVzcG9uZHMgdG8gRWdnZXJ0J3MgRnJpIEp1biAgOSAxNzo1ODoyOSAxOTk1IGNoYW5nZS4KKworVHVlIEphbiAxNiAxMTo1OTowNyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogTWFrZSBzdXJlIGNsZWFudXBzIGxpdmUgb24KKwl0aGUgZnVuY3Rpb25fb2JzdGFjayBhcyB0aGV5IGFyZSB1c2VkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgY29kZS4KKwkoZGVmZXJfY2xlYW51cHNfdG8pOiBEaXR0by4KKwkoVFJVVEhfQU5ESUZfRVhQUik6IERpdHRvLgorCShUUlVUSF9PUklGX0VYUFIpOiBEaXR0by4KKworVHVlIEphbiAxNiAxMzo1NzoxMyAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNjY3AuYyAobmV3X2luY2x1ZGVfcHJlZml4KTogSWdub3JlIEVOT1RESVIgZXJyb3IgZnJvbSBzdGF0LgorCitUdWUgSmFuIDE2IDEyOjE4OjU2IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogaTM4Ni90LXNvbDIgKGNydFsxaW5dLm8pOiBBZGQgbWlzc2luZyAtYy4KKwkqIHNwYXJjL3Qtc29sMiAoY3J0WzFpbl0ubyxnY3J0MS5vKTogTGlrZXdpc2UuCisJU291cmNlIGZpbGVzIGFyZSBhc3NlbWJsZXIuCisKKwkqIGdjYy5jIChkb19zcGVjXzEsIGNhc2UgJ1cnKTogUmVuYW1lIGxvY2FsIGBpbmRleCcgdG8gYGN1cl9pbmRleCcgdG8KKwlhdm9pZCB3YXJuaW5nIG9uIHNvbGFyaXMuCisKK1R1ZSBKYW4gMTYgMTE6NDI6MDkgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBjb25maWcvZGJ4Y29mZi5oOiBOZXcgZmlsZSBmb3Igc3RhYnMgaW4gQ09GRiBzdXBwb3J0LgorCSogY29uZmlnL2EyOWsvYTI5ay11ZGkuaDogVXNlIGRieGNvZmYuaC4KKwkqIGNvbmZpZy9oODMwMC9oODMwMC5oOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pOTYwL2k5NjAtY29mZi5oOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9tNjhrL2NvZmYuaDogTGlrZXdpc2UuCisJKiBjb25maWcvbTg4ay9tODhrLWNvZmYuaDogTGlrZXdpc2UuCisJKiBjb25maWcvc2gvc2guaDogTGlrZXdpc2UuCisJKiBjb25maWcvc3BhcmMvbGl0ZWNvZmYuaDogTGlrZXdpc2UuCisKK1R1ZSBKYW4gMTYgMDg6MjE6NDUgMTk5NiAgSGFucy1QZXRlciBOaWxzc29uICA8SGFucy1QZXRlci5OaWxzc29uQGF4aXMuc2U+CisKKwkqIG9wdGFicy5jIChleHBhbmRfZml4KTogRG9uJ3QgY29weSBUQVJHRVQgdG8gVE8gaWYgc2FtZS4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogRG9uJ3QgZW1pdCBjbG9iYmVyIHdoZW4gbW92aW5nCisJYnkgcGFydHMgYW5kIHNvdXJjZSBlcXVhbHMgZGVzdGluYXRpb24uCisKK1R1ZSBKYW4gMTYgMDg6MDg6MjkgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogRG9uJ3QgYWJvcnQgaWYgbm90IE1FTV9JTl9TVFJVQ1RfUC4KKworCSogbG9jYWwtYWxsb2MuYyAobWVtcmVmX3JlZmVyZW5jZWRfcCwgY2FzZSBSRUcpOiBGaXggbGFzdCBjaGFuZ2UuCisKKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBTdHJpcCBOT1BTIGZyb20gYm90aCBhcmdzLgorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFJlbW92ZSB1c2VsZXNzIGNhc3QuCisKK1R1ZSBKYW4gMTYgMDc6MDY6MDMgMTk5NiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNleHAueTogR2VuZXJhbCBjb2RlIGNsZWFudXAgaW4gdGhlIHN0eWxlIG9mIDE5OTUtMDQtMDEgY2hhbmdlLgorCUFkZCBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zLgorCUFkZCBwYXJlbnRoZXNlcyBzdWdnZXN0ZWQgYnkgYGdjYyAtV3BhcmVudGhlc2VzJy4KKwlVc2UgYGxvbmcnIHVuaWZvcm1seSwgaW5zdGVhZCBvZiBsb25nLCBpbnQsIEhPU1RfV0lERV9JTlQgbWVzcy4KKwkoc3RydWN0IGNvbnN0YW50KTogVXNlIGBzaWduZWRwJyBmbGFnICh3aXRoIHNpZ24gYml0KSBpbnN0ZWFkIG9mCisJYHVuc2lnbmVkcCcgZmxhZzsgaXQncyBhIGxpdHRsZSBtb3JlIGNvbnZlbmllbnQuCisKKwkoSEFWRV9TVERMSUJfSCwgU1REQ19IRUFERVJTLCBMT05HX01BU0ssIF9fYXR0cmlidXRlX18sIFBST1RPLAorCVZBX1NUQVJULCBQUklOVEZfQUxJU1QsIFBSSU5URl9EQ0wsIFBSSU5URl9QUk9UTywgUFJJTlRGX1BST1RPXzEsCisJdmZwcmludGYsIFNJR05FRCwgVU5TSUdORUQpOiBOZXcgc3ltYm9scy4KKwk8c3RkbGliLmg+OiBJbmNsdWRlIGlmIEhBVkVfU1RETElCX0guCisJPHN0cmluZy5oPjogTmV3IGluY2x1ZGUuCisJKEhPU1RfQklUU19QRVJfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpOiBSZW1vdmUuCisJKHl5bGV4LCB5eWVycm9yLCBleHByZXNzaW9uX3ZhbHVlLCBwYXJzZV9udW1iZXIsCisJaW5pdGlhbGl6ZV9yYW5kb21fanVuayk6IE5vdyBzdGF0aWMuCisKKwkob3ZlcmZsb3dfc3VtX3NpZ24pOiBSZW5hbWVkIGZyb20gcG9zc2libGVfc3VtX3NpZ24sIHdpdGggYW4KKwlleHRyYSBhcmcgU0lHTkVEUC4KKwkocGFyc2VfbnVtYmVyKTogSW5saW5lIHN0cmNtcCB3aGVuIGNoZWNraW5nIGZvciAiMHgiLgorCSh5eWxleCk6IEtlZXAgdHJhY2sgb2YgbWFzayBuZWVkZWQgd2hlbiBkZWNvZGluZyB3aWRlIGNoYXJhY3RlcnMuCisJKHBhcnNlX2VzY2FwZSk6IE5ldyBhcmcgUkVTVUxUX01BU0s7IHVzZSBpdCBpbnN0ZWFkIG9mCisJYXNzdW1pbmcgY2hhciB3aWR0aC4KKwkoeXlsZXgsIHBhcnNlX2VzY2FwZSwgcGFyc2VfY19leHByZXNzaW9uKTogU3RvcmUgYWxsIGhvc3QKKwlpbnRlZ2VycyBhcyBsb25nLCBub3QgaW50IG9yIEhPU1RfV0lERV9JTlQuCisJKGxlZnRfc2hpZnQpOiBObyBuZWVkIHRvIGRvIHNpZ25lZCBsZWZ0IHNoaWZ0cyBzZXBhcmF0ZWx5LgorCisJVGhlc2UgY2hhbmdlcyBhcmUgZm9yIHRoZSB0ZXN0IHByb2dyYW0gKGlmIFRFU1RfRVhQX1JFQURFUik6CisJKHBlZGFudGljLCB0cmFkaXRpb25hbCk6IEFsbG9jYXRlIHN0b3JhZ2UuCisJKG1haW4pOiBTZXQgcGVkYW50aWMsIHRyYWRpdGlvbmFsLCB5eWRlYnVnIGRlcGVuZGluZyBvbiBhcmdzLgorCShpc19ob3Jfc3BhY2UsIHdhcm5pbmcsIGxvb2t1cCk6IENoYW5nZSB0eXBlcyBhbmQgaW1wbGVtZW50YXRpb24KKwl0byBtYXRjaCByZXN0IG9mIHByb2dyYW0uCisJKHBlZHdhcm4sIGNoZWNrX2Fzc2VydGlvbiwgeG1hbGxvYyk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGNjY3AuYyAoSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk6IFJlbW92ZS4KKwkocGFyc2VfZXNjYXBlLCBwYXJzZV9jX2V4cHJlc3Npb24sIGV2YWxfaWZfZXhwcmVzc2lvbik6CisJQ2hhbmdlIHJldHVybiB0eXBlIHRvIGBsb25nJzsgYWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkocGNmaW5jbHVkZSk6IFVzZSBgaW50Jywgbm90IEhPU1RfV0lERV9JTlQ7IGFueSBpbnRlZ3JhbCB0eXBlIHdpbGwgZG8uCisKKwkqIGNjY3AuYyAoc2tpcF9xdW90ZWRfc3RyaW5nKTogSWYgcGVkYW50aWMgYW5kIG5vdCBwZWRhbnRpY19lcnJvcnMsCisJc2tpcHBlZCBtdWx0aWxpbmUgc3RyaW5ncyBlbGljaXQgYSB3YXJuaW5nLCBub3QgYW4gZXJyb3IuCisJKHJlc2Nhbik6IE1pbm9yIGNvZGUgcmVvcmcgdG8ga2VlcCBpdCBwYXJhbGxlbCB3aXRoIHNraXBfcXVvdGVkX3N0cmluZy4KKworCSogZm9sZC1jb25zdC5jIChsZWZ0X3NoaWZ0X292ZXJmbG93cyk6IFJlbW92ZTsgdW51c2VkLgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogRG9uJ3QgYXV0b21hdGljYWxseSBjb252ZXJ0CisJZnJvbSBhIHVuaW9uIG1lbWJlciB0byB0aGUgdW5pb24uCisKK1R1ZSBKYW4gMTYgMDY6MjY6MDAgMTk5NiAgU3RlZmFuIFZvZ2VsICAoc3RlZmFuQHNzdy5kZSkKKworCSogY29uZmlnL3N2cjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBEZWZpbmUgc2VjdGlvbiBhdHRyaWJ1dGVzCisJb25seSB3aGVuIGEgc2VjdGlvbiBpcyBkZWZpbmVkIHRoZSBmaXJzdCB0aW1lLgorCitUdWUgSmFuIDE2IDA2OjAzOjI3IDE5OTYgIFRob21hcyBHcmFpY2hlbiAgPGdyYWljaGVuQG9tZWdhLnBoeXNpay5mdS1iZXJsaW4uZGU+CisKKwkqIGkzODYvZnJlZWJzZC5oIChBU01fV0VBS0VOX0xBQkVMKTogRGVsZXRlZDsgbm90IHN1cHBvcnRlZC4KKworTW9uIEphbiAxNSAyMDo1OTo0OSAxOTk2ICBKLiBLZWFuIEpvaG5zdG9uICA8aHVnQG5ldGNvbS5jb20+CisKKwkqIE1ha2VmaWxlLmluIChMSUJHQ0MyX0NMRkFHUyk6IEFkZCAtRElOX0xJQkdDQzIuCisJKGxpYmdjYzEuYSk6IEFkZCAtRElOX0xJQkdDQzEuCisJKHN0YW1wLWNydFMpOiBSZW1vdmUgLWZwaWMsIHVzZSBDUlRTVFVGRl9DRkxBR1NfUy4KKwkqIGNvbmZpZy90LWxpYmMtb2s6IEFkZCBDUlRTVFVGRl9DRkxBR1NfUy4KKworCSogY29uZmlndXJlIChpWzM0NTZdODYtKi1zY28zLjJ2NSopOiBOZXcgY2FzZS4KKwkqIGkzODYvc2NvNS5oLCBpMzg2L3Qtc2NvNSwgaTM4Ni94LXNjbzUsIGkzODYveG0tc2NvNS5oOiBOZXcgZmlsZXMuCisJKiBnaW5jbHVkZS9zdGRhcmcuaCwgZ2luY2x1ZGUvdmFyYWdzLmg6IEFkZCB0ZXN0IGZvciBTQ08gT3BlbiBTZXJ2ZXIgNS4KKworTW9uIEphbiAxNSAyMDo0NDoxMyAxOTk2ICBKLlQuIENvbmtsaW4gIDxqdGNAbmV0YnNkLm9yZz4KKworCSogbTY4ay9uZXRic2QuaCAoQVNNX1NQRUMpOiBOZXcgbWFjcm8uCisKK01vbiBKYW4gMTUgMTc6MDE6MTYgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogUGFzcyBjaGFyYWN0ZXIgYWZ0ZXIgYCNwcmFnbWEnIHRvCisJSEFORExFX1BSQUdNQS4gIERvbid0IGNhbGwgZ2V0X2RpcmVjdGl2ZV9saW5lIGlmIGF0IGVuZCBvZiBsaW5lLgorCSogYy1jb21tb24uYyAoZ2V0X2RpcmVjdGl2ZV9saW5lKTogV2F0Y2ggZm9yIEVPRi4KKwkqIGg4MzAwL2g4MzAwLmggKEhBTkRMRV9QUkFHTUEpOiBOZXcgYXJndW1lbnQgYGMnLgorCU11c3QgaXNzdWUgYHJldHVybicgbm93LgorCSogaTk2MC9pOTYwLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKwkqIHNoL3NoLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKwkqIG5leHRzdGVwLmggKEhBTkRMRV9QUkFHTUEpOiBMaWtld2lzZS4KKwkqIGg4MzAwL2g4MzAwLmMgKGhhbmRsZV9wcmFnbWEpOiBOZXcgYXJndW1lbnQgYGNoJy4KKwlTaW1wbGlmeSBwcmFnbWEgcHJvY2Vzc2luZy4gIERlbGV0ZSBzdXBwb3J0IGZvciBgI3ByYWdtYSBzZWN0aW9uJy4KKwkqIGk5NjAvaTk2MC5jIChwcm9jZXNzX3ByYWdtYSk6IE5ldyBhcmd1bWVudCBgYycuICBDaGFuZ2UgcmVzdWx0IHRvCisJdGVybWluYXRpbmcgY2hhcmFjdGVyLgorCSogbmV4dHN0ZXAuYyAoaGFuZGxlX3ByYWdtYSk6IExpa2V3aXNlLgorCSogc2gvc2guYyAoaGFuZGxlX3ByYWdtYSk6IExpa2V3aXNlLiAgQWxzbyBzaW1wbGlmaWVkLgorCisJKiBzY2hlZC5jIChyZWVtaXRfbm90ZXMpOiBBZGQgcHJvdG90eXBlLgorCShzY2hlZF9hbmFseXplXzIpOiBSZW9yZ2FuaXplIGNvbW1lbnRzLiAgQ2FsbCBwcmV2X25vbm5vdGVfaW5zbi4KKwkoc2NoZWRfYW5hbHl6ZSk6IEFkZCBhYm9ydCBjYWxsLgorCShzY2hlZHVsZV9ibG9jayk6IENhbGwgcHJldl9ub25ub3RlX2luc24uCisJTW92ZSBjYWxsIG9mIHJlZW1pdF9ub3RlcyB0byBhZnRlciBTQ0hFRF9HUk9VUF9QIHNjaGVkdWxpbmcuCisJU2V0IGBoZWFkJyB0byBgbGFzdCcuCisKK01vbiBKYW4gMTUgMTY6MTI6MjUgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlndXJlICgqLSotZ251Kik6IFVzZSB0bWFrZV9maWxlPXQtZ251LgorCSogY29uZmlnL3QtZ251IChDUlRTVFVGRl9UX0NGTEFHUyk6IE5ldyBmaWxlLgorCSogY29uZmlndXJlICgqLSotZ251Kik6IFJlbW92ZSBjcnRiZWdpblMubyBhbmQgY3J0ZW5kUy5vIGZybW8KKwkkZXh0cmFfcGFydHMuICBVc2UgeG1ha2VfZmlsZT14LWxpbnV4LgorCitNb24gSmFuIDE1IDE1OjMwOjQ5IDE5OTYgIEdyYW4gVWRkZWJvcmcgPGd2cmFuQHVkZGVib3JnLnBwLnNlPgorCisJKiBpMzg2L3N2cjN7LHp9LmlmaWxlOiBBbGxvY2F0ZSBhZGRyZXNzIGFyZWFzIGZvciB0aGUgInN0YWIiCisJYW5kICJzdGFic3RyIiBzZWN0aW9ucy4KKworTW9uIEphbiAxNSAxNDozOToxNCAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9pbmNvbXBsZXRlX2RlY2wpOiBXYXJuIGlmIGNvbXBsZXRpbmcgYW4KKwlhcnJheSB0aGF0IHdhc24ndCBkZWNsYXJlZCBleHRlcm4uICBTaW1wbGlmeSB0ZXN0IGZvciB3aGV0aGVyCisJY29tcGxldGlvbiBpcyBuZWVkZWQuCisKKwkqIGNjY3AuYyAoZG9feGlmZGVmKTogV2FybiBhYm91dCBgI2lmZGVmIDAnIGlmIG5vdCB0cmFkaXRpb25hbDsKKwlmb3JtZXJseSB0aGUgd2FybmluZyB3YXMgaXNzdWVkIGlmIG5vdCBwZWRhbnRpYy4KKworTW9uIEphbiAxNSAxMzoyNDoxMiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAoe2FkZCxzdWJ9ZGkzKTogTWFrZSBpdCB3b3JrIG9uIGxpdHRsZSBlbmRpYW4gUG93ZXJQQworCXN5c3RlbXMuCisKKwkqIHJzNjAwMC9lYWJpLWN7aSxufS5hc20gKC5zYnNzMiBzZWN0aW9uKTogRG9uJ3QgbWFrZSAuc2JzczIgYQorCS5ic3Mgc2VjdGlvbiBqdXN0IHlldCwgYmVjYXVzZSBpdCBjb25mdXNlZCB0aGUgbGlua2VyLgorCitNb24gSmFuIDE1IDA4OjUwOjMxIDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay5tZCAocHVzaGRpKTogQWxsb3cgImkiIGZvciBvcGVyYW5kIDEuCisJKGV4dGVuZHFpZGkyKTogSW1wcm92ZSA2ODAwMCBjb2RlIGdlbmVyYXRpb24uCisJKGFkZGRpX2xzaHJkaV82Myk6IE5ldyBwYXR0ZXJuLgorCitNb24gSmFuIDE1IDA4OjM4OjQwIDE5OTYgIEguSi4gTHUge2hqbEBnbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChpWzM0NTZdODYtKi1saW51eCopOiBBZGQgZXh0cmFfcGFydHMuCisJKiBpMzg2L2xpbnV4LmggKExJQl9TUEVDKTogUmVtb3ZlICV7bWllZWUtZnA6LWxpZWVlfS4KKwlVc2UgLWxjX3AgZm9yIC1wcm9maWxlLgorCShDQzFfU1BFQyk6IE5ldyBtYWNyby4KKwkqIGxpbnV4LmggKFNUQVJURklMRV9TUEVDKTogVXNlIGNydGJlZ2luLm8gZm9yIGJvdGggc2hhcmVkIGxsaWJyYXJ5CisJYW5kIG5vcm1hbCBleGVjdXRhYmxlOyAgdXNlIGdjcnQxLm8gZm9yIC1wcm9maWxlLgorCShFTkRGSUxFX1NQRUMpOiBVc2UgY3J0ZW5kLm8gZm9yIHNoYXJlZCBsbGlicmFyeSBhbmQgbm9ybWFsIGV4ZWN1dGFibGUuCisJKiB4LWxpbnV4IChJTlNUQUxMX0FTU0VSVF9IKTogVW5zZXQgaXQuCisJKiBjb25maWd1cmUgKGlbMzQ1Nl04Ni0qLWxpbnV4Km9sZGxkKik6IFNldCB4bWFrZV9maWxlIHRvIHgtbGludXgtYW91dC4KKwkoaVszNDU2XTg2LSotbGludXgqYW91dCopOiBMaWtld2lzZS4KKwkqIHgtbGludXgtYW91dDogTmV3IGZpbGUsIGNvcGllZCBmcm9tIGNvbmZpZy94LWxpbnV4LgorCitNb24gSmFuIDE1IDA3OjQxOjA1IDE5OTYgIERtaXRyeSBLLiBCdXRza295ICAoYnVjQHN0dS5zcGIuc3UpCisKKwkqIHZhcmFzbS5jIChpbl9kYXRhX3NlY3Rpb24pOiBOZXcgZnVuY3Rpb24uCisKK01vbiBKYW4gMTUgMDc6Mzc6MTMgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIChzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IERvbid0IHdhcm4gYWJvdXQgYWxpZ25tZW50IHdoZW4gd2UKKwloYXZlIGFuIG9wYXF1ZSB0eXBlLgorCitNb24gSmFuIDE1IDA3OjIyOjU5IDE5OTYgIE1pY2hlbCBEZWx2YWwgIChtZmRAY2N2LmZyKQorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBBcHBseSBzaW5nbGVfc2V0LCBub3QgUEFUVEVSTiwgdG8gV0hFUkUuCisKK01vbiBKYW4gMTUgMDc6MDI6MjEgMTk5NiAgSm9obiBGLiBDYXJyICA8amZjQG1pdC5lZHU+CisKKwkqIHJlb3JnLmMgKG1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMsIGNhc2UgVFJBUF9JRik6IFNldCB2b2xhdGlsLgorCitNb24gSmFuIDE1IDA2OjIwOjM4IDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmRzKTogUmVtb3ZlIGluYWR2ZXJ0YW50IGZhbGx0aHJvdWdoLgorCisJKiBmdW5jdGlvbi5jICh7LHJvdW5kX310cmFtcG9saW5lX2FkZHJlc3MpOiBUUkFNUE9MSU5FX0FMSUdOTUVOVCBpcworCWluIGJpdHMsIG5vdCBieXRlcy4KKworCSogb2JqYy9hcmNoaXZlLmMgKG9iamNfe3dyaXRlLHJlYWR9X3R5cGUsIGNhc2UgX0NfU1RSVUNUX0IpOiBGaXggdHlwby4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogRG9uJ3QgbWFrZSByZWN1cnNpdmUKKwljYWxsIG9uIG9iamVjdCB3aXRoIEVYUEFORF9TVU0uCisKKwkqIHN0bXQuYyAoc2F2ZV9leHByX3JlZ3MpOiBEZWxldGUgZGVjbGFyYXRpb247IHVudXNlZC4KKworU3VuIEphbiAxNCAyMTo0NDoyNiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAd29nZ2xlYnVnLnRpYWMubmV0PgorCisJKiByczYwMDAvZWFiaS1jaS5hc20gKF9fRVhDRVBUX1NUQVJUX18pOiBQcm92aWRlIGxhYmVsIGZvciBzdGFydAorCW9mIGcrKyBleGNlcHRpb24gcG9pbnRlcnMuCisKKwkqIHJzNjAwMC9lYWJpLWNuLmFzbSAoX19FWENFUFRfRU5EX18pOiBQcm92aWRlIGxhYmVsIGZvciBlbmQgb2YKKwlnKysgZXhjZXB0aW9uIHBvaW50ZXJzLgorCisJKiByczYwMDAvZWFiaS5hc20gKF9fZWFiaSk6IFJlbG9jYXRlIGV4Y2VwdGlvbiBwb2ludGVycyB1bmxlc3MKKwl0aGV5IGFyZSBOVUxMLgorCisJKiB2YS1wcGMuaCAodmFfYXJnKTogTG9uZyBsb25ncyBhcmUgYWx3YXlzIHBhc3NlZCBpbiBvZGQgcmVnaXN0ZXJzLgorCisJKiByczYwMDAuYyAoZnVuY3Rpb25fYXJnX2JvdW5kYXJ5KTogT24gVi40LCBsb25nIGxvbmdzIGFyZSBhbHdheXMKKwlwYXNzZWQgaW4gb2RkIHJlZ2lzdGVycy4KKworCSogcnM2MDAwLm1kICh7YWRkLHN1Yn1kaTMpOiBSZW1vdmUgcmVzdHJpY3Rpb24gZm9yIFBPV0VSIG9ubHksCisJc2luY2UgYWxsIG9mIHRoZSBpbnN0cnVjdGlvbnMgdXNlZCBhcmUgY29tbW9uIHRvIGJvdGgKKwlhcmNoaXRlY3R1cmVzLgorCitTdW4gSmFuIDE0IDIwOjM0OjAzIDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKyAJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogRml4IGFsaWdubWVudCBwYXJtIGluIGVtaXRfYmxvY2tfbW92ZS4KKworU3VuIEphbiAxNCAxOTowMDoyNSAxOTk2ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogQ29weSBSVFhfSU5URUdSQVRFX1AgYml0IHdoZW4gY3JlYXRlCisJYSBuZXcgbm90ZS4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nLCBjYXNlIE5PVEUpOiBDb3B5CisJUlRYX0lOVEVHUkFURURfUCBiaXQuCisKK1N1biBKYW4gMTQgMTc6NTc6NTIgMTk5NiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3R1cGlkLmMgKHN0dXBpZF9maW5kX3JlZyk6IERvbid0IHRyeSB0byBhbGxvY2F0ZSByZWcgaWYgbGl2ZQorCW92ZXIgbW9yZSB0aGFuIDUsMDAwIGluc25zLgorCitTYXQgSmFuIDEzIDIzOjA5OjA3IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CisKKwkqIHBhLmggKFNUQUNLX0JPVU5EQVJZKTogQnJpbmcgYmFjayBkb3duIHRvIDY0Yml0cy4KKworCSogcGEubWQgKHByZV9sZHdtKTogRml4IGJ1ZyBleHBvc2VkIGJ5IHJlY2VudCBjaGFuZ2VzLgorCVNpbXBsaWZ5LgorCShwcmVfc3R3bSwgcG9zdF9sZHdtLCBwb3N0X3N0d20pOiBMaWtld2lzZS4KKwkoSEltb2RlIGFuZCBRSW1vZGUgdmFyaWFudHMpOiBMaWtld2lzZS4KKwkqIHBhLmMgKGhwcGFfZXhwYW5kX3Byb2xvZ3VlKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCShocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IExpa2V3aXNlLgorCisJKiBwYS5jIChocHBhX2xlZ2l0aW1pemVfYWRkcmVzcyk6IEdlbmVyYXRlIG1vcmUgaW5kZXhpbmcKKwlhZGRyZXNzIG1vZGVzLgorCitGcmkgSmFuIDEyIDE5OjAzOjIxIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMvc29sMi5oIChDT01NT05fQVNNX09QKTogRGVsZXRlLCB1c2Ugc3lzdjQuaCdzLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IE1haW50YWluIGEgdmFsaWQgY2hhaW4gc28KKwllbWl0X25vdGVfYmVmb3JlIHdvcmtzLgorCitGcmkgSmFuIDEyIDEzOjIwOjAxIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL2VhYml7LC1jaSwtY259LmFzbTogQWRkIHN1cHBvcnQgZm9yIFYuNCAuc2Jzcy8uc2RhdGEsIGFuZAorCWVhYmkgLnNic3MyLy5zZGF0YTIgc2VjdGlvbnMsIGxvYWRpbmcgdXAgcjEzIGFuZCByMiByZXNwZWN0aXZlbHkKKwlpZiB0aGUgc2VjdGlvbnMgd2VyZSB1c2VkLCBhbmQgd2UgZG9uJ3QgbmVlZCB0byByZWxvY2F0ZSB0aGUKKwlwb2ludGVycy4KKworVGh1IEphbiAxMSAxOTo0MTowNyAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmVkdT4KKworCSogc3BhcmMuaCAoRlVOQ1RJT05fQVJHX1BBU1NfQllfUkVGRVJFTkNFKTogIFVzZSBBR0dSRUdBVEVfVFlQRV9QIHNvCisJUVVBTF9VTklPTl9UWVBFIGFuZCBTRVRfVFlQRSBhcmUgYWxzbyBwYXNzZWQgYnkgaW52aXNpYmxlIHJlZmVyZW5jZS4KKwkqIHNwYXJjLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTIGZvciBTUEFSQ1Y5KTogIFJldHVybiB0eXBlcyBvZgorCVFVQUxfVU5JT05fVFlQRSBhbmQgU0VUX1RZUEUgYWxzbyBtYWtlIGludmlzaWJsZSAxc3QgYXJndW1lbnQuCisKK1RodSBKYW4gMTEgMTg6MzM6NTAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBoODMwMC9oODMwMC5oIChUQVJHRVRfQUxJR05fU1RSVUNUXzMwMCk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tYWxpZ24tc3RydWN0LTMwMC4KKwkoQklHR0VTVF9GSUVMRF9BTElHTk1FTlQpOiBVcGRhdGUuCisKK1RodSBKYW4gMTEgMTI6MDc6NDQgMTk5NiAgSi5ULiBDb25rbGluICA8anRjQGN5Z251cy5jb20+CisKKwkqIGg4MzAwL2g4MzAwLmggKENQUF9QUkVERUZJTkVTKTogRGVsZXRlIC1EX0RPVUJMRV9JU18zMkJJVFMuCisKK1RodSBKYW4gMTEgMTE6MDk6MzMgMTk5NiAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBtaHBjYy5lZHU+CisKKwkqIHJzNjAwMC5tZCAobXVsc2YzICFQT1dFUlBDKTogVXNlIGRtdWwgYXR0cmlidXRlLgorCShkaXZzZjMgIVBPV0VSUEMpOiBVc2UgZGRpdiBhdHRyaWJ1dGUuCisKK1RodSBKYW4gMTEgMTE6MDk6MzMgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvZWFiaS1jdG9ycy5jIChfX2RvX2dsb2JhbF9jdG9ycyk6IElmIGdsb2JhbCB2YXJpYWJsZQorCV9fYXRleGl0IGlzIG5vbi1OVUxMLCBjYWxsIGl0IHdpdGggX19kb19nbG9iYWxfZHRvcnMgYWRkcmVzcyB0bworCXJlZ2lzdGVyIHRoZSBmdW5jdGlvbiB0byBydW4gZGVzdHJ1Y3RvcnMuCisJKF9fZG9fZ2xvYmFsX3tjLGR9dG9ycyk6IEd1YXJkIGFnYWluc3QgTlVMTCBwb2ludGVycy4KKworCSogcnM2MDAwL2VhYmkuYXNtIChfX2VhYmkpOiBJZiB0aGUgX19lYWJpIGZ1bmN0aW9uIHdhcyBhbHJlYWR5CisJY2FsbGVkLCBkbyBub3RoaW5nLgorCitUaHUgSmFuIDExIDExOjI5OjA5IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IFdyYXAgcnBjL3R5cGVzLmggaW4gZXh0ZXJuICJDIiwgZm9yIG9zZjIuMC4KKworV2VkIEphbiAxMCAxMzoxNjowMyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jICh2YXJpYWJsZV9zZWN0aW9uKTogTmV3IGZ1bmN0aW9uLgorCShhc3NlbWJsZV92YXJpYWJsZSk6IENhbGwgaXQuCisKK1dlZCBKYW4gMTAgMTE6Mjc6MjggMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvZWFiaS1je2ksbn0uYXNtIChfX0RUT1Jfe0xJU1QsRU5EfV9fKTogRml4IHR5cG8uCisJKiByczYwMDAvZWFiaXssc2ltfS5oICh7U1RBUlQsRU5EfUZJTEVfU1BFQyk6IEFkZCAlcyB0byBvYmplY3QKKwlmaWxlcy4KKworCSogcnM2MDAwL3Qte2VhYmksZWFiaWdhcyxwcGMscHBjZ2FzfSAoTVVMVElMSUJfTUFUQ0hFUyk6IERyb3AKKwlzdXBwb3J0IGZvciBvYnNvbGV0ZSAtbWNwdT1tcGM0MDMuICBBZGQgLW1jcHU9ODIxIGFuZCAtbWNwdT04NjAgdG8KKwlzb2Z0LWZsb2F0IGRlZmF1bHRzLgorCisJKiByczYwMDAvdC1lYWJpeyxnYXN9IChMSUJHQ0MpOiBBZGQgc3RtcC1jcnQuCisJKElOU1RBTExfTElCR0NDKTogQWRkIGluc3RhbGwtY3J0LgorCShFWFRSQV9QQVJUUyk6IERlbGV0ZS4KKwkoc3RtcC1jcnR7LC1zdWJ9KTogTmV3IHJ1bGVzIHRvIGJ1aWxkIGNydGkubyBhbmQgY3J0bi5vIGluIGEKKwltdWx0aWxpYiBmYXNoaW9uLgorCShpbnN0YWxsLWNydCk6IEluc3RhbGwgdGhlIG11bHRpbGliIGNydCB2YWx1ZXMuCisKK1R1ZSBKYW4gIDkgMTc6MzA6MTYgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjLXRyZWUuaCAobWVyZ2VfYXR0cmlidXRlcyk6IE1vdmVkIGZyb20gaGVyZS4KKwkqIHRyZWUuaCAobWVyZ2VfYXR0cmlidXRlcyk6IFRvIGhlcmUuCisJKiBjLXR5cGVjay5jIChtZXJnZV9hdHRyaWJ1dGVzKTogTW92ZWQgZnJvbSBoZXJlLgorCSogdHJlZS5jIChtZXJnZV9hdHRyaWJ1dGVzKTogVG8gaGVyZS4KKworTW9uIEphbiAgOCAxODoyNzozOCAxOTk2ICBBcm5lIEguIEp1dWwgIDxhcm5lakBwdnYudW5pdC5ubz4KKworCSogbWlwcy9uZXRic2QuaCAoTElOS19TUEVDKTogQ2hhbmdlIG5vc3RkbGliIHRvIG5vc3RhcnRmaWxlcy4KKwkoTE9DQUxfTEFCRUxfUFJFRklYKTogRGVsZXRlLgorCShBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERlZmluZS4KKworU3VuIEphbiAgNyAxNzoxMToxMSAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogY29sbGVjdDIuYyAoc2Nhbl9saWJyYXJpZXMpOiBDb3JyZWN0IEltcG9ydCBGaWxlIElEIGludGVycHJldGF0aW9uLgorCitTdW4gSmFuICA3IDE2OjU2OjU2IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB3b21iYXQuZ251LmFpLm1pdC5lZHU+CisKKwkqIHtzdnI0LG1pcHMvZWxmeyw2NH19LmggKE1BWF9PRklMRV9BTElHTk1FTlQpOiAgRGVmaW5lIGFzCisJMzI3NjgqOC4KKworU2F0IEphbiAgNiAxNTo1MjozNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGEyOWsvdngyOWsuaCAoQ1BQX1NQRUMpOiBEZWZpbmUuCisKKwkqIGNvbmZpZ3VyZTogUmVjb2duaXplIGFueSAtLXdpdGgvLS13aXRob3V0IG9wdGlvbi4KKworCSogTWFrZWZpbGUuaW4gKE1BS0VJTkZPRkxBR1MpOiBOZXcgdmFyaWFibGUuCisJKGNwcC5pbmZvLGdjYy5pbmZvKTogVXNlIGl0LgorCisJKiBzcGFyYy90LXNvbDIgKGNydDEubyxjcnRpLm8sY3J0bi5vLGdjcnQxLm8pOiBVc2UgJChHQ0NfRk9SX1RBUkdFVCkuCisJKiBpMzg2L3Qtc29sMiAoY3J0MS5vLGNydGkubyxjcnRuLm8pOiBMaWtld2lzZS4KKworRnJpIEphbiAgNSAxMDo0NDoyNSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9haXh7M25ld2FzLDQxfS5oICh7QVNNLENQUH1fU1BFQyk6IFVwZGF0ZSBmb3IgbmV3CisJcHJvY2Vzc29ycy4KKwkqIHJzNjAwMC9lYWJpe2FpeCxsZX0uaCAoe0FTTSxDUFB9X1NQRUMpOiBEaXR0by4KKwkqIHJzNjAwMC97bHlueCxuZXR3YXJlLHBvd2VycGMsc3lzdjR9LmggKHtBU00sQ1BQfV9TUEVDKTogRGl0dG8uCisKKwkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IFJlbW92ZSByZXF1aXJlbWVudCB0aGF0CisJLW1jcHU9Y29tbW9uIGJlIGJpZyBlbmRpYW4uCisJKHJzNjAwMF9zdGFja19pbmZvKTogSWYgTkFNRV9fbWFpbiBpcyBkZWZpbmVkLCBtYXJrIHRoaXMgZnVuY3Rpb24KKwlhcyBkb2luZyBhIGNhbGwsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cy4KKworCSogcnM2MDAwLm1kIChTSSpTSS0+REkgc3BsaXR0ZXJzKTogQWRkIHJlbG9hZF9jb21wbGV0ZWQKKwljb25kaXRpb24uCisJKG11bHNpZGkzKTogSWYgYmlnIGVuZGlhbiwgZG8gbW92ZSBkaXJlY3RseSwgcmF0aGVyIHRoYW4gbW92aW5nIGJ5CisJcGllY2VzLgorCisJKiByczYwMDAvZWFiaXssc2ltfS5oIChTVEFSVEZJTEVfU1BFQyk6IEFkZCBjcnRpLm8gYmVmb3JlIGFueQorCW90aGVyIG9iamVjdHMuCisJKEVOREZJTEVfU1BFQyk6IEFkZCBjcnRuLm8gYWZ0ZXIgYW55IG9iamVjdHMuCisJKiByczYwMDAvdC1lYWJpeyxnYXN9OiBCdWlsZCBjcnR7aSxufS5vIGZyb20gZWFiaS1jcnR7aSxufS5hc20uCisJKiByczYwMDAvZWFiaS1jcnR7aSxufS5hc206IE5ldyBmaWxlcyB0byBwcm92aWRlIGJlZ2luL2VuZCBsYWJlbHMKKwlmb3IgYWxsIHNwZWNpYWwgc2VjdGlvbnMgdXNlZCBieSBlYWJpIGFzIG9wcG9zZWQgdG8gcmVseWluZyBvbiBHTEQKKwl0byBzZXQgYWxsIG9mIHRoZXNlIHN5bWJvbHMuCisJKiByczYwMDAvZWFiaS5hc20gKF9fZWFiaSk6IENoYW5nZSB0byB1c2UgdGhlIG5ldyBsYWJlbHMgcHJvdmlkZWQKKwlhYm92ZS4gIERvbid0IGFzc3VtZSB0aGF0IHRoZSAuZ290MiwgLmN0b3JzLCAuZHRvcnMsIGFuZCAuZml4dXAKKwlzZWN0aW9ucyBhcmUgY29udGlndW91cy4KKworRnJpIEphbiAgNSAxMDo0MDozNyAxOTk2ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLm1kIChtdWxoX2NhbGwpOiBSZW1vdmUgcjQgY2xvYmJlci4KKwkocXVvc3NfY2FsbCk6IFJlbW92ZSBjcjAgYW5kIGNyMSBjbG9iYmVycy4KKworCSogcnM2MDAwLm1kIChmdW5jdGlvbiB1bml0cyk6IEFkZCBNUEM1MDUvODIxLzg2MCBzdXBwb3J0LgorCShTRiBtdWx0aXBseSBhZGQgY29tYmluZXIgcGF0dGVybnMpOiBVc2UgZG11bCBhdHRyaWJ1dGUgd2hlbiBsaW1pdGVkCisJdG8gREZtb2RlIFBPV0VSIGluc3RydWN0aW9ucy4KKwkqIHJzNjAwMC5jIChwcm9jZXNzb3JfdGFyZ2V0X3RhYmxlKTogQWRkIE1QQzUwNS84MjEvODYwIHN1cHBvcnQuCisJUmVtb3ZlIE1BU0tfUE9XRVIgYW5kIGFkZCBNQVNLX1BQQ19HRlhPUFQgZm9yIFBQQzYwMi4gIEFsd2F5cyB1c2UKKwluZXcgbW5lbW9uaWNzIGZvciBjb21tb24gbW9kZS4KKwkocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBEb24ndCBzZXQgU09GVF9GTE9BVCBiYXNlZCB1cG9uCisJUFJPQ0VTU09SX0RFRkFVTFQuCisJKiByczYwMDAuaCAocHJvY2Vzc29yX3R5cGUpOiBBZGQgUFJPQ0VTU09SX01QQ0NPUkUuCisJKFJUWF9DT1NUUyk6IEFkZCBQUk9DRVNTT1JfTVBDQ09SRSBjYXNlcy4KKwkoQ1BQX1NQRUMpOiBBZGQgbmV3IHByb2Nlc3NvciBzdXBwb3J0LgorCitGcmkgSmFuICA1IDAwOjMyOjQ5IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMvc3BhcmMuaCAoTUFDSElORV9TVEFURV9SRVNUT1JFKTogQWRkIG1pc3NpbmcgLmFsaWduLgorCitXZWQgSmFuICAzIDE4OjI5OjMyIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYXJtL2xpYjFmdW5jcy5hc20gKF9fVVNFUl9MQUJFTF9QUkVGSVhfXyk6IERlZmluZSBpZiBub3QgYWxyZWFkeS4KKwkoQ09OQ0FUMSxDT05DQVQyLFNZTSk6IERlZmluZS4KKwkoX191ZGl2c2kzLF9fZGl2c2kzLF9fdW1vZHNpMyxfX21vZHNpMyxfX2RpdjApOiBVc2UgU1lNIHRvIGRlZmluZQorCWdsb2JhbCBsYWJlbHMuCisKK1dlZCBKYW4gIDMgMDI6NDE6MzkgMTk5NiAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEuaCAoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IENhbGwgdGV4dF9zZWN0aW9uLgorCitUdWUgSmFuICAyIDE2OjEyOjEzIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2guYyAoZ2VuX3NoaWZ0eV9vcCk6IE91dHB1dCBhIE5PUCBmb3IgYSBzaGlmdCBieSAwLgorCShmaW5kX2JhcnJpZXIpOiBOZXcgdmFyaWFibGVzIHNpX2xpbWl0LCBoaV9saW1pdC4gIFNldCB0aGVtIGRlcGVuZGluZworCW9uIHdoZXRoZXIgd2UgYXJlIG9wdGltaXppbmcuICBTZXQgZm91bmRfaGkgaWYgdGhlIGRlc3RpbmF0aW9uIGlzCisJSEltb2RlLgorCShtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IElmIG5vdCBvcHRpbWl6aW5nLCB0aGVuIGNoYW5nZSBzY2FuIHRvIGEKKwlub3RlIGluc3RlYWQgb2YgY2FsbGluZyBkZWxldGVfaW5zbi4KKwkqIHNoLmggKE9WRVJSSURFX09QVElPTlMpOiBEb24ndCBzZXQgb3B0aW1pemUgb3IgZmxhZ19kZWxheWVkX2JyYW5jaC4KKworCSogZGJ4b3V0LmMgKGdzdGFiLmgpOiBJbmNsdWRlIGlmIGNyb3NzIGNvbXBpbGluZy4KKworTW9uIEphbiAgMSAyMToxMzo0MyAxOTk2ICBBcmthZHkgVHVuaWsgIDxBcmthZHlfVHVuaWtAY29tdmVyc2UuY29tPgorCisJKiBjb25maWd1cmUgKGlbMzQ1Nl0tKi1zb2xhcmlzMiopOiBTdXBwb3J0IHN0YWJzLgorCSogaTM4Ni9zb2wyZGJnLmg6IE5ldyBmaWxlLgorCitNb24gSmFuICAxIDA5OjA4OjAxIDE5OTYgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmM6IFVzZSBERUNMX0NfQklUX0ZJRUxELCBub3QgREVDTF9CSVRfRklFTEQgaW4gYWxsIHRlc3RzLgorCisJKiBnbG9iYWwuYyAocmVnX2FsbG9jbm8pOiBObyBsb25nZXIgc3RhdGljLgorCSogcmVsb2FkMS5jIChyZWdfYWxsb2Nubyk6IERlY2xhcmUuCisJKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IE5ldyBhcmcsIEdMT0JBTC4KKwlCaWFzIGFnYWluc3QgcmVncyBhbGxvY2F0ZWQgaW4gbG9jYWwtYWxsb2MuCisJKHJlbG9hZCk6IFBhc3MgbmV3IHBhcm0gdG8gb3JkZXJfcmVnc19mb3JfcmVsb2FkLgorCisJKiBsb2NhbC1hbGxvYy5jIChyZWdfZXF1aXZfcmVwbGFjZW1lbnQpOiBOZXcgdmFyaWFibGUuCisJKG1lbXJlZl9yZWZlcmVuY2VkX3AsIGNhc2UgUkVHKTogQ2hlY2sgZm9yIHJlZ19lcXVpdl9yZXBsYWNlbWVudC4KKwkodXBkYXRlX2VxdWl2X3JlZ3MpOiByZWdfZXF1aXZfcmVwbGFjZW1lbnQgbm93IGZpbGUtc2NvcGUuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogV2FybiBpZiBmaWVsZCB3aXRoIGVudW1lcmFsIHR5cGUgaXMKKwluYXJyb3dlciB0aGFuIHZhbHVlcyBvZiB0aGF0IHR5cGUuCisKKwkqIGNvbWJpbmUuYyAocnR4X2VxdWFsX2Zvcl9maWVsZF9hc3NpZ25tZW50X3ApOiBOZXcgZnVuY3Rpb24uCisJKG1ha2VfZmllbGRfYXNzaWdubWVudCk6IFVzZSBpdC4KKwlFeHBhbmQgY29tcG91bmQgb3BlcmF0aW9ucyBvbiBib3RoIHNpZGVzIG9mIGFuIElPUi4KKwlQcm9wZXJseSBhZGp1c3QgY29uc3RhbmQgaW4gSU9SIHdoZW4gY29tcHV0aW5nIGJpdCBwb3NpdGlvbi4KKworU3VuIERlYyAzMSAxODo0NzoyMiAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIG02OGstbm9uZS5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZS4KKworU3VuIERlYyAzMSAxNTo0NzoyMCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBoYXJkLXJlZy1zZXQuaCAobG9zaW5nX2NhbGxlcl9zYXZlX3JlZ19zZXQpOiBEZWNsYXJlLgorCSogcmVnY2xhc3MuYyAobG9zaW5nX2NhbGxlcl9zYXZlX3JlZ19zZXQpOiBEZWZpbmUuCisJKGluaXRfcmVnX3NldHNfMSk6IEluaXRpYWxpemUgbG9zaW5nX2NhbGxlcl9zYXZlX3JlZ19zZXQuCisJKiBnbG9iYWwuYyAoZmluZF9yZWcpOiBBdm9pZCBjYWxsZXItc2F2aW5nIHJlZ2lzdGVycyBpbgorCWxvc2luZ19jYWxsZXJfc2F2ZV9yZWdfc2V0LgorCSogbG9jYWwtYWxsb2MuYyAoZmluZF9mcmVlX3JlZyk6IEF2b2lkIGNhbGxlci1zYXZpbmcgcmVnaXN0ZXJzCisJaW4gbG9zaW5nX2NhbGxlcl9zYXZlX3JlZ19zZXQuCisJKENMQVNTX0xJS0VMWV9TUElMTEVEX1ApOiBEZWxldGUgZGVmaW5pdGlvbi4gIE1vdmVkIGludG8gcmVncy5oLgorCSogcmVncy5oIChDTEFTU19MSUtFTFlfU1BJTExFRF9QKTogRGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCisKKwkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogVHJ5IHRvIGZpbGwgZnJvbSB0aGUKKwl0YXJnZXQgb2YgYW4gdW5jb25kaXRpb25hbCBicmFuY2ggaWYgbmVjZXNzYXJ5LgorCisJKiBwYS5oIChSRUdfQUxMT0NfT1JERVIpOiBBbGxvY2F0ZSBQQTEuMSBjYWxsZXItc2F2ZWQgRlAgcmVncworCWJlZm9yZSBQQTEuMCBjYWxsZXItc2F2ZWQgRlAgcmVncy4KKworCSogc2NoZWQuYyAoYWRqdXN0X3ByaW9yaXR5KTogVXNlIEFESlVTVF9QUklPUklUWSBpZiBpdHMgZGVmaW5lZC4KKworCSogcGEuaCAoQURKVVNUX1BSSU9SSVRZKTogRGVmaW5lIHRvIGtlZXAgbGlmZXRpbWVzIG9mIHJlZ2lzdGVycworCXRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgdG8gJXIxIHNob3J0ZXIuCisKK1N1biBEZWMgMzEgMTQ6MjA6NDkgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmggKGFzc2lnbl90ZW1wKTogQWRkIGV4dHJhIGFyZy4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl90ZW1wKTogQWRkIGV4dHJhIGFyZywgRE9OVF9QUk9NT1RFLgorCURvbid0IHJldHVybiAoY29uc3RfaW50IDApIGZvciBWT0lEbW9kZS4KKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IENhbGwgYXNzaWduX3RlbXAgd2l0aCBleHRyYSBhcmcuCisJKiBleHByLmMgKHNhdmVfbm9jb3BpZWRfcGFydHMsIGV4cGFuZF9leHByKTogTGlrZXdpc2UuCisJKGV4cGFuZF9leHByLCBjYXNlIFNBVkVfRVhQUik6IFNldCBURU1QIHRvIChjb25zdF9pbnQgMCkKKwlpZiBNT0RFIGlzIFZPSURtb2RlLgorCShleHBhbmRfZXhwcik6IERvbid0IHVzZSBhc3NpZ25fdGVtcCBmb3IgcHNldWRvcyB3aGVuIG1pZ2h0CisJd2FudCB0byBiZSBUTU9ERS4KKworCSogc3RtdC5jICh0YWlsX3JlY3Vyc2lvbl9hcmdzKTogQ29tcGFyZSBUWVBFX01BSU5fVkFSSUFOVHMuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRG9uJ3Qgd2FybiBhYm91dCBub3QgYmVpbmcgYWJsZSB0bworCWlubGluZSBpZiAtTzAuCisJKiBleHByLmMgKGNsZWFyX3BlbmRpbmdfc3RhY2tfYWRqdXN0KTogRG9uJ3QgZG8gb3B0aW1pemF0aW9uIGlmIC1PMC4KKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzKTogQ2hlY2sgREVDTF9TQVZFRF9JTlNOUyB0byBzZWUKKwlpZiBvYnN0YWNrIGNoYW5nZSBpcyBuZWVkZWQuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IExlYXZlIERFQ0xfSU5MSU5FIHNldCBldmVuIGlmCisJd29uJ3QgaW5saW5lLgorCisJKiB0cmVlLmg6IEFkZCBkb2N1bWVudGF0aW9uIG9uIHVzZXMgb2YgY29tbW9uIGFyZWEgZmxhZ3MuCisJKERFQ0xfRVJST1JfSVNTVUVEKTogTmV3IG1hY3JvLgorCShERUNMX05PX1NUQVRJQ19DSEFJTik6IE5ldyBtYWNybzsgY3VycmVudGx5IHVudXNlZC4KKwkqIGMtYXV4LWluZm8uYyAoZ2VuX2RlY2wpOiBERUNMX1JFR0lTVEVSIGlzbid0IGRlZmluZWQKKwlmb3IgRlVOQ1RJT05fREVDTC4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBMaWtld2lzZS4KKwkqIHN0bXQuYyAoZml4dXBfZ290b3MpOiBVc2UgREVDTF9FUlJPUl9JU1NVRUQgaW5zdGVhZAorCW9mIERFQ0xfUkVHSVNURVIuCisJKiB2YXJhc20uYyAoe2JjXyx9bWFrZV9kZWNsX3J0bCk6IERvbid0IGxvb2sgYXQgREVDTF9SRUdJU1RFUgorCWZvciBmdW5jdGlvbnMuCisKK1NhdCBEZWMgMzAgMDc6NTc6MTEgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc2Rib3V0LmMgKHBsYWluX3R5cGVfMSwgY2FzZSBBUlJBWV9UWVBFKTogU3VidHJhY3QgbG93ZXIgYm91bmQKKwl3aGVuIHdyaXRpbmcgZGltZW5zaW9uLgorCitGcmkgRGVjIDI5IDE4OjIzOjU4IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGV2YWxfaWZfZXhwcmVzc2lvbik6IEVuZCBleHByZXNzaW9uIHdpdGggJ1xuJywgbm90ICdcMCcKKwlzbyAnXDAnIGNhbiBiZSBkaWFnbm9zZWQgcHJvcGVybHkuCisJKiBjZXhwLnkgKHl5bGV4LCBwYXJzZV9jX2V4cHJlc3Npb24sIG1haW4pOiBMaWtld2lzZS4KKworVGh1IERlYyAyOCAxODoyNDo1NCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogdHJlZS5oIChUWVBFX0FSUkFZX01BWF9TSVpFKTogIE5ldyBtYWNybyAodXNlZCBieSBDaGlsbCkuCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fdGVtcCk6ICBOZXcgZnVuY3Rpb24uICBDYW4gaGFuZGxlIENoaWxsLXN0eWxlCisJdmFyaWFibGUtc2l6ZWQgYXJyYXkgd2l0aCBzdGF0aWMgbWF4aW11bSBzaXplLgorCSogcnRsLmggKGFzc2lnbl90ZW1wKTogIE5ldyBkZWNsYXJhdGlvbi4KKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6ICBVc2UgbmV3IGFzc2lnbl90ZW1wIGZ1bmN0aW9uLgorCSogZXhwci5jIChzYXZlX25vbmNvcGllZF9wYXJ0cywgZXhwYW5kX2V4cHIpOiAgTGlrZXdpc2UuCisKK1RodSBEZWMgMjggMTU6Mjg6NDcgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKyAgICAgICAgKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiAgRml4IHRoaW5rbyBmb3Igc3RydWN0IHZhbHVlIGFyZy4KKworRnJpIERlYyAyOSAxMjo0MTo0NyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAobW92ZGYpOiBSZWluc3RhdGUgMTIvMjQgY2hhbmdlIGFjY2lkZW50bHkgZHJvcHBlZCBpbgorCXVuZG9pbmcgMTIvMjcgY2hhbmdlcy4KKworVGh1IERlYyAyOCAyMjoyNDo1MyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5oOiAocmVnX2NsYXNzKTogVW5kbyAxMi8yNyBjaGFuZ2VzLCBleGNlcHQgZm9yCisJZm9ybWF0dGluZy4KKwkoUkVHX05BTUVTKTogRGl0dG8uCisJKFJFR19DTEFTU19DT05URU5UUyk6IERpdHRvLgorCShSRUdOT19SRUdfQ0xBU1MpOiBEaXR0by4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogRGl0dG8uCisJKFBSRURJQ0FURV9DT0RFUyk6IERlbGV0ZSBwcmVkaWNhdGUgZnVuY3Rpb25zLgorCShncGNfcmVnezAsMyw0LDM0fV9vcGVyYW5kKTogRGVsZXRlIGRlY2xhcmF0aW9uLgorCShjY19yZWd7MCwxfV9vcGVyYW5kKTogRGl0dG8uCisKKwkqIHJzNjAwMC5jIChncGNfcmVnezAsMyw0fV9vcGVyYW5kKTogRGVsZXRlLgorCShjY19yZWd7MCwxfV9vcGVyYW5kKTogRGl0dG8uCisKKwkqIHJzNjAwMC5tZCAoY29tbW9uIG1vZGUgZnVuY3Rpb25zKTogVW5kbyAxMi8yNyBjaGFuZ2VzLCBhbmQgYWRkCisJdGhlIGFwcHJvcHJpYXRlIGNsb2JiZXJzIGZvciBjb21tb24gbW9kZSBjYWxscy4gIEtlZXAgdGhlCisJZGVmaW5lX3NwbGl0cyBmb3IgcG93ZXJwYyBTSSpTSS0+REkuCisKK1RodSBEZWMgMjggMTE6MDg6MTEgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisgICAgICAgICogc3BhcmMuaCAoUkVUVVJOX0FERFJfT0ZGU0VUKTogUmVuYW1lIGZyb20KKyAgICAgICAgTk9STUFMX1JFVFVSTl9BRERSX09GRlNFVCwgcmV0dXJucyB0aGUgb2Zmc2V0IGZvciB0aGUgY3VycmVudAorICAgICAgICBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuCisKK1RodSBEZWMgMjggMDc6MDc6MTQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGMtbGV4LmMgKHl5bGV4KTogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBib2d1cyBudW1iZXJzLgorCUNvbnNvbGlkYXRlIGR1cGxpY2F0ZWQgY29kZS4KKworCSogY2V4cC55IChwYXJzZV9udW1iZXIpOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGJvZ3VzIG51bWJlcnMuCisJKHl5bGV4KTogQ29uc2lkZXIgYDB4ZS0xJyB0byBiZSBhIChib2d1cykgbnVtYmVyIGlmIG5vdCB0cmFkaXRpb25hbC4KKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogSW4gVk1TLCB3b3JyeSBvbmx5IGFib3V0IEVBQ0NFUyB3aGVuIG9wZW4gZmFpbHMuCisJKG5ld19pbmNsdWRlX3ByZWZpeCk6IERvbid0IHRyeSB0byBzdGF0IGRpciBwcmVmaXhlcyBpbiBWTVMuCisKK1dlZCBEZWMgMjcgMTQ6MDI6NTQgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIGZpeC1oZWFkZXIuYzogIEFkZCBFWElUX0ZBSUxVUkUgYW5kIEVYSVRfU1VDQ0VTUyB0byBzdGRsaWIuaCBpZgorCW1pc3NpbmcuICBSZS13cml0ZSBob3cgZXJybm8gaXMgYWRkZWQgdG8gYmUgZG9uZSBzaW1pbGFybHkuCisJKFhPUEVOX1NZTUJPTCwgWE9QRU5fRVhURU5ERURfU1lNQk9MKTogIE5ldyBtYWNyb3MsIHRvIG1hcmsgWFBHNAorCWZ1bmN0aW9ucy4KKwkoc3RkX2luY2x1ZGVfdGFibGUpOiAgQWRkIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyAobW9zdGx5IFhQRzQpLgorCitUdWUgRGVjIDI2IDIzOjE4OjM0IDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBzeXMtdHlwZXMuaDogIEFkZCBkdW1teSBkZWZpbml0aW9uIGZvciBzc2l6ZV90LgorCSogc3lzLXByb3Rvcy5oIChiY21wLCBiY29weSwgZ2V0aG9zdG5hbWUsIGxvY2tmLCByZWFkLCByZWFkbGluaywKKwl3cml0ZSk6ICBGaXggcHJvdG90eXBlcyB0byBtYXRjaCBQb3NpeCBhbmQgWFBHNC4KKwkoc29ja2V0LCBzdHJjYXNlY21wLCBzdHJuY2FzZWNtcCk6ICBOZXcgcHJvdG90eXBlcyAoZnJvbSBYUEc0KS4KKworV2VkIERlYyAyNyAxNTozMDowNCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsaWJnY2MyLmMgKF9iYl9pbml0X3ByZyk6IENhc3QgYXJnIHRvIGJ6ZXJvIHRvIChjaGFyICopLgorCisJKiByZWdzLmggKHJlZ19ydHhfbm8sIHJlZ25vX3BvaW50ZXJfe2ZsYWdfbGVuZ3RoLGFsaWduKTogTmV3IGRlY2xzLgorCShSRUdOT19QT0lOVEVSX0FMSUdOKTogTmV3IG1hY3JvLgorCSogZW1pdC1ydGwuYyAocmVnbm9fcG9pbnRlcl9hbGlnbik6IE5ldyB2YXJpYWJsZS4KKwkoZ2VuX3JlZ19ydHgpOiBFeHRlbmQgcmVnbm9fcG9pbnRlcl9hbGlnbiB0YWJsZS4KKwlBbGxvY2F0ZSB0YWJsZXMgaW4gc2F2ZWFibGUgb2JzdGFjay4KKwkobWFya19yZWdfcG9pbnRlcik6IE5ldyBhcmcsIEFMSUdOLgorCShnZW5faW5saW5lX2hlYWRlcik6IE5ldyBhcmdzIGZvciByZWcgaW5mby4KKwkoc2V0X25ld19maXJzdF9hbmRfbGFzdF9pbnNuKTogU2V0IGN1cl9pbnNuX3VpZC4KKwkoe3NhdmUscmVzdG9yZX1fZW1pdF9zdGF0dXMpOiBTYXZlIGFuZCByZXN0b3JlIHJlZ25vX3BvaW50ZXJfYWxpZ24uCisJKHJlc3RvcmVfcmVnX2RhdGF7LF8xfSk6IERlbGV0ZWQuCisJKGluaXRfZW1pdCk6IEFsbG9jYXRlIHJlZ2lzdGVyIHRhYmxlcyBpbiBzYXZlYWJsZSBvYnN0YWNrLgorCVNldCBSRUdOT19QT0lOVEVSX0FMSUdOIGZvciByZWdzIHBvaW50aW5nIGludG8gZnJhbWUuCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBTZXQgUkVHTk9fUE9JTlRFUl9BTElHTiBmb3IKKwlwYXJtcyB0aGF0IGFyZSBwb2ludGVycy4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBmaWVsZCByZWdub19wb2ludGVyX2FsaWduLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBWQVJfREVDTCk6IFNldCBSRUdOT19QT0lOVEVSX0FMSUdOCisJd2hlbiBjb3B5aW5nIGFkZHJlc3MgaW50byBtZW1vcnkuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTVBPTkVOVF9SRUYsIGNhc2UgQUREUl9FWFBSKTogU2V0IGFsaWdubWVudAorCW9mIHJlZ2lzdGVyIHdoZW4gcmVzdWx0IG9yIHJlc3VsdCdzIGFkZHJlc3MuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTlZFUlRfRVhQUik6IERvbid0IGhhbmRsZSAtZmZvcmNlLW1lbSBoZXJlLgorCSogY29tYmluZS5jIChzZXRfbm9uemVyb19iaXRzX2FuZF9zaWduX2NvcGllcyk6IEhhbmRsZSByZWcgZXZlbgorCWlmIG9ubHkgc2V0IG9uY2UgYW5kIGluIG9uZSBiYXNpYyBibG9jay4KKwkobm9uemVyb19iaXRzLCBjYXNlIFJFRyk6IFVzZSBSRUdOT19QT0lOVEVSX0FMSUdOIGluc3RlYWQgb2YKKwlleHBsaWNpdCBhbGlnbm1lbnQgb2YgcmVnaXN0ZXJzIHBvaW50aW5nIGludG8gZnJhbWUuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogU2V0IGFsaWdubWVudCBvZiByZWdpc3RlciBmb3IgcG9pbnRlcgorCXZhcmlhYmxlLgorCSogb3B0YWJzLmMgKGVtaXRfdW5vcF9pbnNuKTogRG9uJ3QgZG8gLWZmb3JjZS1tZW0gZm9yIFNJR05fRVhURU5ELgorCSogY3NlLmMgKGZpbmRfYmVzdF9hZGRyKTogTWFrZSBzdXJlIGZvbGRlZCBhZGRyZXNzIGJldHRlciBiZWZvcmUgdXNpbmcuCisJKiBydGwuaCAoSU5MSU5FX1JFR05PX3tSVFgsUE9JTlRFUl9GTEFHLFBPSU5URVJfQUxJR059KTogTmV3IG1hY3Jvcy4KKwkoZ2VuX2lubGluZV9oZWFkZXIpOiBBZGQgdGhyZWUgbmV3IHBhcm1zLgorCSogcnRsLmRlZiAoSU5MSU5FX0hFQURFUik6IEFkZCB0aHJlZSBuZXcgZmllbGRzLgorCSogaW50ZWdyYXRlLmM6IEluY2x1ZGUgcmVncy5oLgorCShpbml0aWFsaXplX2Zvcl9pbmxpbmUpOiBQYXNzIGFkZGl0aW9uYWwgYXJncyB0byBnZW5faW5saW5lX2hlYWRlci4KKwkoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBNYWtlIG5ldyByZWdub19yZWdfcnR4LCByZWdub19wb2ludGVyX2ZsYWcsCisJYW5kIHJlZ25vX3BvaW50ZXJfYWxpZ24gYXJyYXlzLgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IGFsaWdubWVudCBvZiByZWcgZm9yIHBhcm0gaWYgcGFzc2VkCisJYnkgaGlkZGVuIHBvaW50ZXIuCisJU2V0IHJlZ25vX3BvaW50ZXJfe2ZsYWcsYWxpZ259IGludG8gcmVtYXAgdGFibGUuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogU2V0IGFsaWdubWVudCBvZiBwb2ludGVycyBpbnRvCisJc3RhY2sgZnJhbWUuCisJQ29weSBwb2ludGVyIGZsYWcgYW5kIGFsaWdubWVudCB0byByZWdzIHRoYXQgYXJlIGNvcGllcyBvZgorCXBvaW50ZXIgcmVnaXN0ZXJzIGZyb20gdGhlIG9yaWdpbmFsIHJlZ3MuCisJKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBjYWxsIHJlc3RvcmVfcmVnX2RhdGEuCisJUmVzdG9yZSByZWdfcnR4X25vLCByZWdub197cmVnX3J0eCxwb2ludGVyX2ZsYWcscG9pbnRlcl9hbGlnbn0uCisJKiBpbnRlZ3JhdGUuaCAoc3RydWN0IGlubGluZV9yZW1hcCk6IE5ldyBmaWVsZHMgcmVnbm9fcG9pbnRlcl9mbGFnCisJYW5kIHJlZ25vX3BvaW50ZXJfYWxpZ24uCisJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBTZXQgcmVnbm9fcG9pbnRlcl97ZmxhZyxhbGlnbn0gaW4KKwlyZW1hcCB0YWJsZS4KKwkqIGV4cGxvdy5jIChtZW1vcnlfYWRkcmVzcywgYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6CisJUGFzcyBhZGRpdGlvbmFsIGFyZyB0byBtYXJrX3JlZ19wb2ludGVyLgorCSogTWFrZWZpbGUuaW4gKGludGVncmF0ZS5vKTogSW5jbHVkZXMgcmVncy5oLgorCisJKiBhbHBoYS5jICh7bm9uLH1hbGlnbmVkX21lbW9yeV9vcGVyYW5kKTogVGVzdCBSRUdOT19QT0lOVEVSX0FMSUdOLgorCShyZWdfb3JfdW5hbGlnbmVkX21lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShnZXRfdW5hbGlnbmVkX2FkZHJlc3MpOiBBZGQgbmV3IGFyZywgRVhUUkFfT0ZGU0VULgorCSogYWxwaGEuaCAoe0NPTlNUQU5ULERBVEF9X0FMSUdOTUVOVCk6IEFsaWduIHRvIGF0IGxlYXN0IEJJVFNfUEVSX1dPUkQuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCByZWdfb3JfdW5hbGlnbmVkX21lbV9vcGVyYW5kLgorCSogYWxwaGEubWQgKGV4dGVuZHtxaWhpLHFpc2ksaGlzaX0yKTogQWxsb3cgdW5hbGlnbmVkIG1lbW9yeQorCWFzIGFyZyAxIGFuZCBwYXNzIHRvIGV4dGVuZF97cSxofWlkaTIuCisJKHVuYWxpZ25lZF9leHRlbmR7cSxofWlkaSk6IE5ldyBwYXR0ZXJucy4KKwkoZXh0ZW5ke3EsaH1pZGkyKTogSWYgdW5hbGlnbmVkIG1lbW9yeSwgY2FsbCBhYm92ZSBuZXcgcGF0dGVybnMuCisJKGV4dHtxLGwsd31oIHJlY29nbml6ZXIpOiBVcGRhdGUgdG8gcHJvcGVyIFJUTC4KKwkoZXh0IGRlZmluZV9zcGxpdCk6IENvbW1lbnQgb3V0IGZvciBub3c7IHdyb25nIGFuZCBtYXliZSB1c2VsZXNzLgorCSh1bmFsaWduZWRfe2xvYWQsc3RvcmV9aGkpOiBEbyBzaW1pbGFybHkgdG8gUUltb2RlLgorCShtb3ZoaSwgcmVsb2FkX3tpbixvdXR9aGkpOiBDYWxsIHVuYWxpZ25lZCBjYXNlIGRpZmZlcmVudGx5LgorCitXZWQgRGVjIDI3IDExOjM4OjIwIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChtdWxzaWRpM3ssX2NvbW1vbn0pOiBVbmRvIHByZXZpb3VzIGNoYW5nZSB1c2luZworCXJlZ2lzdGVyIGNsYXNzZXMgaW5zdGVhZCBvZiBmaXhlZCByZWdpc3RlcnMgZm9yIFNJKlNJLT5ESSBjb21tb24KKwltb2RlIG11bHRpcGxpZXMuCisKKwkqIHJzNjAwMC5jIChncGNfcmVnMzRfb3BlcmFuZCk6IERlbGV0ZSB1bnVzZWQgZnVuY3Rpb24uCisJKiByczYwMDAuaCAoZ3BjX3JlZzM0X29wZXJhbmQpOiBEaXR0by4KKworCSogcnM2MDAwLmMgKGdwY19yZWd7Myw0fV9vcGVyYW5kKTogUmVvcmdhbml6ZSBjb2RlIGFuZCBkb24ndCBhbGxvdworCVNVQlJFRydzLgorCisJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBEbyBub3QgYWxsb3cgLW1jcHU9Y29tbW9uIG9uCisJbGl0dGxlIGVuZGlhbiBQb3dlclBDJ3MuCisJKGdwY19yZWd7MCwzLDQsMzR9X29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zIHRvIG1hdGNoIGEgc3BlY2lmaWMKKwlyZWdpc3Rlci4KKwkoY2NfcmVnezAsMX1fb3BlcmFuZCk6IERpdHRvLgorCisJKiByczYwMDAuaCAocmVnX2NsYXNzKTogQWRkIHJlZ2lzdGVyIGNsYXNzZXMgZm9yIHJlZ2lzdGVyIDMgYnkKKwlpdHNlbGYsIHJlZ2lzdGVyIDQgYnkgaXRzZWxmLCByZWdpc3RlcnMgMyY0LCBhbmQgQ1IxLgorCShSRUdfTkFNRVMpOiBBZGQgc3VwcG9ydCBmb3IgbmV3IHJlZ2lzdGVyIGNsYXNzZXMuCisJKFJFR19DTEFTU19DT05URU5UUyk6IERpdHRvLgorCShSRUdOT19SRUdfQ0xBU1MpOiBEaXR0by4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogRGl0dG8uCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBuZXcgcHJlZGljYXRlIGZ1bmN0aW9ucy4KKwkoZ3BjX3JlZ3swLDMsNCwzNH1fb3BlcmFuZCk6IEFkZCBkZWNsYXJhdGlvbi4KKwkoY2NfcmVnezAsMX1fb3BlcmFuZCk6IERpdHRvLgorCisJKiByczYwMDAubWQgKGNvbW1vbiBtb2RlIG11bHRpcGxpY2F0aW9uL2RpdmlzaW9uKTogTW92ZS9yZW5hbWUgdGhlCisJY29tbW9uIG1vZGUgY2FsbHMgc28gdGhhdCB0aGV5IGFyZSBjbG9zZXIgdG8gdGhlIGRlZmluZV9leHBhbmRzCisJdGhhdCBjYWxsIHRoZW0uICBTZXQgYXR0cmlidXRlIHR5cGUgdG8gYmUgam1wcmVnLCByYXRoZXIgdGhhbgorCWludGVnZXIsIHNvIG9wdGltaXplciBrbm93cyB0aGUgYnJhbmNoIHByb2Nlc3NpbmcgdW5pdCBpcyB1c2VkLgorCU1ha2UgU0kqU0ktPkRJIG11bHRpcGxpZXIgdXNlIHJlZ2lzdGVyIGNsYXNzZXMgaW5zdGVhZCBvZgorCWhhcmR3aXJlZCByZWdpc3RlcnMuICBBZGQgdGhlIGFwcHJvcHJpYXRlIGNsb2JiZXJzIG9mIENSMC9DUjEgYXMKKwltYW5kYXRlZCBieSB0aGUgUG93ZXJPcGVuIHNwZWMuCisJKFBvd2VyUEMgU0kqU0ktPkRJIG11bHRpcGxpZXJzKTogQWRkIGFwcHJvcHJpYXRlIGRlZmluZV9zcGxpdHMuCisKKwkqIHJzNjAwMC90LXsseH1uZXdhcyAoTVVMVElMSUIqKTogRG9uJ3QgYnVpbGQgcG93ZXIyIG9yIDYwMQorCXNwZWNpZmljIGxpYnJhcmllcy4KKworVHVlIERlYyAyNiAyMTo1MjoxOCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGRfY29udmVydCk6IFdoZW4gY29udmVydGluZyBhIE5hTiB0bworCWFub3RoZXIgdHlwZSwgY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBub2RlIGJlZm9yZSByZXR1cm5pbmcgaXQuCisKK01vbiBEZWMgMjUgMTc6MTI6MTAgMTk5NSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogYy10eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KKworU3VuIERlYyAyNCAyMjoxOTo0OSAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBVc2UgYXNzZW1ibGVfaW50ZWdlciByYXRoZXIKKwl0aGFuIGNhbGxpbmcgQVNNX09VVFBVVF9JTlQgZGlyZWN0bHkuCisJKiBwYS5oIChBU01fT1VUUFVUX0lOVCk6IFVzZSBsYWJlbHMgZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlCisJZXhjZXB0aW9uIHRhYmxlIHNlY3Rpb24uCisKKwkqIHBhLmMgKHByaW50X29wZXJhbmQpOiBEb24ndCBjYWxsIGZwcmludGYgdG8gb3V0cHV0IGEgcmVnaXN0ZXIKKwluYW1lLiAgVXNlIGZwdXRzIGluc3RlYWQuCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfRlVOQ1RJT05fUFJFRklYKTogU3RyaXAgYW55IG5hbWUgZW5jb2RpbmcKKwlvbiB0aGUgc2VjdGlvbiBuYW1lLgorCitTdW4gRGVjIDI0IDE3OjQ2OjAzIDE5OTUgIE1hcmt1cyBUaGVpc3NpbmdlciAgPE1hcmt1cy5UaGVpc3NpbmdlckBnbWQuZGU+CisKKwkqIHRvcGxldi5jIChtYWluKTogQWRkIC1heCBvcHRpb24uCisJKiBnY2MuYyAoc3RydWN0IGNvbXBpbGVycyk6IExpa2V3aXNlLgorCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogRXh0ZW5kZWQgaGVhZGVyIGluY3JlYXNlZCB0byAxMSB3b3Jkcy4KKwkocHJvZmlsZV9hZnRlcl9wcm9sb2d1ZSk6IEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSIHVzZXMKKwljb3VudF9iYXNpY19ibG9ja3MgaW5zdGVhZCBvZiBwcm9maWxlX2xhYmVsX25vLgorCisJKiBsaWJnY2MyLmMgKHN0cnVjdCBiYik6IEFkZCBmbGFncyBmaWVsZC4KKwkoSEFWRV9QT1BFTik6IFRlc3QgbmV3IGRlZmluZS4KKwkoc3RydWN0IF9fYmIsIHN0cnVjdCBiYl97ZWRnZSxmdW5jfSk6IE5ldyBzdHJ1Y3RzLgorCShfX2JiX2luaXRfe3ByZyxmaWxlfSxfX2JiX3tpbml0LGV4aXR9X3RyYWNlX2Z1bmMsX19iYl90cmFjZV9yZXQsCisJKF9fYmJfdHJhY2VfZnVuY3ssX3JldH0sZ29wZW4sZ2Nsb3NlKTogTmV3IGZ1bmN0aW9ucy4KKworCSogc3BhcmMuaCwgaTM4Ni5oLCBtNjhrLmggKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSLCBCTE9DS19QUk9GSUxFUik6CisJRXh0ZW5zaW9uIGZvciAtYXggb3B0aW9uIChwcm9maWxlX2Jsb2NrX2ZsYWcgPT0gMikuCisJKE1BQ0hJTkVfU1RBVEVfU0FWRSxNQUNISU5FX1NUQVRFX1JFU1RPUkUpOiBOZXcgbWFjcm9zLgorCShGVU5DVElPTl9CTE9DS19QUk9GSUxFUl9FWElUKTogTmV3IG1hY3JvLgorCSogc3BhcmMuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKSwgaTM4Ni5jIChmdW5jdGlvbl9lcGlsb2d1ZSk6CisJVXNlIEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSX0VYSVQuCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgorCSogeG0tc3BhcmMuaDogRGVmaW5lIEhBVkVfUE9QRU4uCisKK1N1biBEZWMgMjQgMDY6NTA6MzAgMTk5NSAgQmFycmV0dCBSaWNoYXJkc29uICAoYmFycmV0dEBpZ2xvdS5jb20pCisKKwkqIGZsb2F0bGliLmMgKF9fZGl2ZGYzKTogUmV3cml0ZSB0byBkbyBzb2Z0d2FyZSBkaXZpZGUgb2YgdHdvCisJZG91YmxlcyBpbnN0ZWFkIG9mIHVzaW5nIF9fZGl2c2YzLgorCitTdW4gRGVjIDI0IDA2OjM4OjE1IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAobW92ZGYpOiBEb24ndCBjb3B5IGEgd29yZCBhdCBhIHRpbWU7IG5lYXJseSBhbHdheXMgbG9zZXMuCisKKwkqIGMtdHJlZS5oIChERUNMX0NfQklUX0ZJRUxEKTogTmV3IG1hY3JvLgorCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBTZXQgaXQgd2hlbiBzZXQgREVDTF9CSVRfRklFTEQuCisJKiBjLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlLCBjYXNlIENPTVBPTkVOVF9SRUYpOgorCUdpdmUgZXJyb3IgaWYgdGFraW5nIGFkZHJlc3Mgb2YgYSBiaXQgZmllbGQuCisKKwkqIGdjYy5jICh1bnVzZWRfcHJlZml4X3dhcm5pbmcpOiBJbmNsdWRlIG1hY2hpbmVfc3VmZml4IGlmCisJcmVxdWlyZV9tYWNoaW5lX3N1ZmZpeC4KKwkod2Fybl9CLCB3YXJuX3N0ZCwgd2Fybl9zdGRfcHRyKTogTmV3IHZhcmlhYmxlcy4KKwkocHJvY2Vzc19jb21tYW5kcyk6IFVzZSB0aGVtIGFuZCBOVUxMX1BUUiBhcyBXQVJOIGFyZyB0byBhZGRfcHJlZml4LgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogR2l2ZSBlcnJvciBmb3IgLWMgd2l0aCAtbyBhbmQKKwltdWx0aXBsZSBjb21waWxhdGlvbnMuCisJKGhhbmRsZV9icmFjZXMpOiBSZW5hbWUgdmFyaWFibGUgInBpcGUiIHRvICJwaXBlX3AiLgorCisJKiBleHByLmggKGNscnN0cl9vcHRhYik6IE5ldyBkZWNsYXJhdGlvbi4KKwkoY2xlYXJfc3RvcmFnZSk6IE5ldyBwYXJtLCBBTElHTi4KKwkqIHRyZWUuaCAoQ09OU1RSVUNUT1JfVEFSR0VUX0NMRUFSRURfUCk6IE5ldyBtYWNyby4KKwkqIGdlbm9waW5pdC5jIChvcHRhYnMpOiBBZGQgImNscnN0ciVhJSIuCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBJbml0aWFsaXplIGNscnN0cl9vcHRhYi4KKwkqIGV4cHIuYyAoc3RydWN0IGNsZWFyX2J5X3BpZWNlcyk6IE5ldyBzdHJ1Y3R1cmUuCisJKGNsZWFyX2J5X3BpZWNlc3ssXzF9LCB7aXMsbW9zdGx5fV96ZXJvc19wKTogTmV3IGZ1bmN0aW9ucy4KKwkoY2xyc3RyX29wdGFiKTogTmV3IG9wdGFiLgorCShjbGVhcl9zdG9yYWdlKTogUmV3b3JrIHRvIHRyeSB0byB1c2UgY2xlYXJfYnlfcGllY2VzLCB0aGVuCisJbmV3IGNscnN0ciBpbnNuLCB0aGVuIGxpYnJhcnkgY2FsbC4KKwkoc3RvcmVfY29uc3RydWN0b3IpOiBUcmFjayBpZiB0YXJnZXQgaXMgYWxyZWFkeSBjbGVhcmVkLgorCUNsZWFyIHRhcmdldCBmaXJzdCBpZiBDT05TVFJVQ1RPUiBpcyBtb3N0bHkgemVyb3MuCisJRG9uJ3Qgd3JpdGUgemVyb3MgaWYgdGFyZ2V0IGhhcyBiZWVuIGNsZWFyZWQuCisJQWRkIG5ldyBhcmcgdG8gY2xlYXJfc3RvcmFnZSBjYWxsLgorCShleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUik6IERvbid0IHB1dCBzdGF0aWMgY29uc3RydWN0b3IKKwlpbiBtZW1vcnkgaWYgbW9zdGx5IHplcm8uCisJKiBpMzg2Lm1kIChjbHJzdHJzaSk6IE5ldyBwYXR0ZXJuIGFuZCBhc3NvY2lhdGUgYW5vbnltb3VzIHBhdHRlcm4uCisKK1NhdCBEZWMgMjMgMTI6MjE6NTMgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEuYyAob3V0cHV0X21vdmVfZG91YmxlKTogQ29ycmVjdGx5IGlkZW50aWZ5IGFuZCBoYW5kbGUKKwlvdmVybGFwcGluZyBtb3Zlcy4KKwkqIHBhLm1kIChtb3ZkaSBwYXR0ZXJucyk6IEVsaW1pbmF0ZSBlYXJseWNsb2JiZXJzIGluIG1lbTwtPmdyCisJY2FzZXMuCisJKG1vdmRmIHBhdHRlcm5zKTogTGlrZXdpc2UuCisKK0ZyaSBEZWMgMjIgMTc6Mjk6NDIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IERvbid0IGNhbGwgY2hhbmdlX2FkZHJlc3Mgb24gUkVHLgorCShleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUik6IExpa2V3aXNlLgorCisJKiBtaXBzLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogUHJlc2VydmUgTUVNIGZsYWdzIGluIGNhbGwgdG8KKwltb3ZzdHJzaV9pbnRlcm5hbC4KKworCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogRG9uJ3QgdHJ5IHRvIHNldCBSRUdOT19QT0lOVEVSX0ZMQUcKKwlmb3IgYSBTVUJSRUcuCisKKwkqIHJlbG9hZC5jIChmaW5kX3ZhbGlkX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgorCShwdXNoX3JlbG9hZCk6IFVzZSBpdCBpbiBjYXNlcyB3aGVyZSBhIFNVQlJFRyBhbmQgaXRzIGNvbnRlbnRzCisJYm90aCBuZWVkIHRvIGJlIHJlbG9hZGVkLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE5ldmVyIGRlZmVyIGZ1bmN0aW9ucyB0aGF0CisJY29udGFpbiBuZXN0ZWQgZnVuY3Rpb25zLgorCitGcmkgRGVjIDIyIDE1OjU1OjAwIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChmdW5jdGlvbiB1bml0cyk6IEFkZCA0MDMgc3VwcG9ydCB3aGljaCBkZWxldGVkCisgCWJ5IGFjY2lkZW50IG9uIE5vdiAyMXN0LiAgTWFyayBhbGwgY29tcGFyZXMgZnJvbSA2MDIsIDYwMywgNjA0LAorIAk2MjAsIDQwMywgbGlrZSB3YXMgZG9uZSBmb3Igcmlvc3sxLDJ9IGFuZCA2MDEgYXMgbmVlZGluZyB0aGUgYnB1LAorIAlzbyB0aGF0IGNvbXBhcmVzIGFyZSBob2lzdGVkIGZhciBlbm91Z2ggYnJhbmNoZXMgZm9yIHplcm8gY3ljbGUKKyAJYnJhbmNoIHN1cHBvcnQuCisKK0ZyaSBEZWMgMjIgMTU6MTM6NDcgMTk5NSAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYuaDogKFRBUkdFVF9VTlJPTExfU1RSTEVOKTogTmV3IG1hY3JvLgorCSogaTM4Ni5jOiAob3V0cHV0X3N0cmxlbl91bnJvbGwpOiBOZXcgZnVuY3Rpb24uCisJKiBpMzg2Lm1kOiAoc3RybGVuc2kpOiBOZXcgcGF0dGVybi4KKworVGh1IERlYyAyMSAxODo1MzozMSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvZ251LmggKEdOVV9DUFBfUFJFREVGSU5FUyk6IEFkZCBtaXNzaW5nIHNwYWNlIGFmdGVyCisJLUFtYWNoaW5lKENQVSkuCisKK1RodSBEZWMgMjEgMTI6MjM6NDIgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKHtwb3dlcnBjLHJzNjAwMH0qKTogQ2hhbmdlIC0tZW5hYmxlLWNwdSB0bworCS0td2l0aC1jcHUuCisJKiByczYwMDAuYyAocnM2MDAwX3NlbGVjdCk6IERpdHRvLgorCisJKiByczYwMDAvYWl4NDEuaCAoTElOS19TUEVDKTogRG8gbm90IHBhc3MgLWJleHBvcnQgdG8gdGhlIGxpbmtlcgorCWlmIC1nIGFuZCAtc2hhcmVkLgorCitXZWQgRGVjIDIwIDExOjIzOjM5IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlICh7cG93ZXJwYyxyczYwMDB9LWlibS1haXgqKTogTWVyZ2UgdGhlc2UgdHdvIGludG8gdGhlCisJc2FtZSBjYXNlIHN0YXRlbWVudC4gIEFpeCA0IG5vdyBnZW5lcmF0ZXMgLW1jcHU9Y29tbW9uIGJ5IGRlZmF1bHQuCisJKHtwb3dlcnBjLHJzNjAwMH0qKTogQWRkIHN1cHBvcnQgZm9yIC0tZW5hYmxlLWNwdT08dmFsdWU+IHRvCisJc2VsZWN0IHRoZSBkZWZhdWx0IGNwdSB0byBjb21waWxlIGZvci4KKworCSogcnM2MDAwL2FpeDQxLmggKFRBUkdFVF9ERUZBVUxUKTogTWFrZSAtbWNwdT1jb21tb24gdGhlIGRlZmF1bHQKKwliZWhhdmlvci4KKwkoUFJPQ0VTU09SX0RFRkFVTFQpOiBEaXR0by4KKwkoTVVMVElMSUJfREVGQVVMVFMpOiBTZXQgbWNwdT1jb21tb24uCisKKwkqIHJzNjAwMC9yczYwMDAuaCAoVEFSR0VUX0NQVV9ERUZBVUxUKTogRGVmaW5lIHRvIGJlIE5VTEwgaWYgbm90CisJZGVmaW5lZC4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlIC0tZW5hYmxlLWNwdT08dmFsdWU+IHN3aXRjaC4KKwkoUFJPQ0VTU09SX0NPTU1PTik6IFNldCB0aGlzIHRvIFBST0NFU1NPUl82MDEuCisJKFBST0NFU1NPUl9QT1dFUlBDKTogU2V0IHRoaXMgdG8gUFJPQ0VTU09SXzYwNC4KKwkoVEFSR0VUX09QVElPTlMpOiBBZGQgLW10dW5lPSBzd2l0Y2guCisJKHJzNjAwMF9zZWxlY3QpOiBOZXcgc3RydWN0dXJlIHRvIGhvbGQgLW1jcHU9LCAtbXR1bmU9IHN3aXRjaGVzCisJYW5kIHRoZSByZXN1bHQgb2YgY29uZmlndXJpbmcgLS1lbmFibGUtY3B1PS4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IFBhc3MgVEFSR0VUX0NQVV9ERUZBVUxUIHRvCisJcnM2MDAwX292ZXJyaWRlX29wdGlvbnMuCisKKwkqIHJzNjAwMC9yczYwMDAuYyAocnM2MDAwX2NwdV9zdHJpbmcpOiBEZWxldGUgZ2xvYmFsIHZhcmlhYmxlLgorCShyczYwMDBfc2VsZWN0KTogRGVmaW5lIG5ldyBnbG9iYWwgdmFyaWFibGUuCisJKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogVGFrZSBkZWZhdWx0X2NwdSBhcmd1bWVudCwgYW5kIHByb3ZpZGUKKwlzdXBwb3J0IGZvciBpdCBhbmQgLW10dW5lPSBpbiBhZGRpdGlvbiB0byAtbWNwdT0uCisKKwkqIHJzNjAwMC97YWl4ezNuZXdhcyw0MX0sbHlueCxuZXR3YXJlLHBvd2VycGN9LmggKEFTTV9TUEVDKTogQWRkCisJc3VwcG9ydCBmb3IgLW1jcHU9cG93ZXIyLgorCSogcnM2MDAwL3tyczYwMDAsc3lzdjR9LmggKEFTTV9TUEVDKTogRGl0dG8uCisKKwkqIHJzNjAwMC97YWl4NDEsZWFiaWFpeCxlYWJpbGUsbHlueCxwb3dlcnBjfS5oIChDUFBfU1BFQyk6IE1ha2UKKwlzdXJlIGFsbCAtbWNwdT14eHggdGFyZ2V0cyBhcmUgc3VwcG9ydHMuCisJKiByczYwMDAve3JzNjAwMCxzeXN2NCxzeXN2NGxlfS5oIChDUFBfU1BFQyk6IERpdHRvLgorCisJKiByczYwMDAvdC14e25ld2FzLHJzNjAwMH06IE5ldyBmaWxlcyB0byBiZSB1c2VkIHdoZW4gbWFraW5nIGEKKwljcm9zcyBjb21waWxlciwgdG8gcHJldmVudCBsaWJnY2MxLXRlc3QgZnJvbSBiZWluZyBtYWRlLgorCisJKiByczYwMDAvdC17eCx9bmV3YXMgKE1VTFRJTElCXyopOiBCdWlsZCBtdWx0bGlsaWIgbGlicmFyaWVzIGZvcgorCXBvd2VyLCBwb3dlcjIsIDYwMSwgcG93ZXJwYywgYW5kIGNvbW1vbiBtb2RlIHByb2Nlc3NvcnMuCisKKwkqIHJzNjAwMC9haXg0MXBwYy5oOiBEZWxldGUsIG5vIGxvbmdlciB1c2VkLgorCitUdWUgRGVjIDE5IDE4OjMxOjIxIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChtaXBzX3JlZ19uYW1lcywgbWlwc19zd19yZWdfbmFtZXMsIG1pcHNfcmVnbm9fdG9fY2xhc3MpOgorCUFkZCBlbnRyeSBmb3IgbmV3IFJBUCByZWcuCisJKiBtaXBzLmggKEZJUlNUX1BTRVVET19SRUdJU1RFUik6IEluY3JlbWVudC4KKwkoRklYRURfUkVHSVNURVJTLCBDQUxMX1VTRURfUkVHSVNURVJTLCBSRUdJU1RFUl9OQU1FUywKKwlERUJVR19SRUdJU1RFUl9OQU1FUyk6IEFkZCBlbnRyeSBmb3IgbmV3IFJBUCByZWcuCisJKFJBUF9SRUdfTlVNLCBSRVRVUk5fQUREUkVTU19QT0lOVEVSX1JFR05VTSk6IE5ldyBtYWNyb3MuCisJKFJFVFVSTl9BRERSX1JUWCk6IERlZmluZS4KKwkoRUxJTUlOQUJMRV9SRUdTLCBDQU5fRUxJTUlOQVRFLCBJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6CisJQWRkIFJFVFVSTl9BRERSRVNTX1BPSU5URVJfUkVHTlVNIHN1cHBvcnQuCisJKiBlbWl0LXJ0bC5jIChyZXR1cm5fYWRkcmVzc19wb2ludGVyX3J0eCk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCisJKGdlbl9ydHgsIGluaXRfZW1pdF9vbmNlKTogQWRkIHN1cHBvcnQgZm9yIGl0LgorCitUdWUgRGVjIDE5IDE1OjA4OjMxIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogY29sbGVjdDIuYzogUmVtb3ZlIGF1dG9fZXhwb3J0IGZ1bmN0aW9uYWxpdHkuCisKK1R1ZSBEZWMgMTkgMTA6NTc6MjMgMTk5NSAgS2ltIEtudXR0aWxhICA8a3JrQGN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3BwYy1hc20uaDogRG8gbm90IGNvbXBpbGUgdGhlIHJlZ2lzdGVyIG1hY3JvcyB1bmRlcgorCXdpbm50LgorCitNb24gRGVjIDE4IDE5OjMxOjIzIDE5OTUgIEFkYW0gRmVkb3IgIDxmZWRvckB3aWxtYS5Db2xvcmFkby5FRFU+CisKKwkqIG9iamMvZW5jb2RpbmcuYyAob2JqY19hbGlnbm9mX3R5cGUpOiBIYW5kbGUgX0NfUFRSIGNhc2UuCisKK01vbiBEZWMgMTggMTg6NDA6MzQgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCwgY2FzZSBTVUJSRUcpOiBGb3IgU1VCUkVHIG9mIGEgY29uc3RhbnQsCisJdXNlIDw9IGluc3RlYWQgb2YgPCB3aGVuIGNvbXBhcmluZyBtb2RlIHNpemVzLgorCShmb3JjZV90b19tb2RlLCBjYXNlIE5PVCk6IFVzZSBmdWxsIG1hc2sgaW5zaWRlCXRoZSBOT1Qgb3BlcmF0aW9uLgorCisJKiBleHByLmMgKGVtaXRfYmxvY2tfbW92ZSk6IFdoZW4gY2FsbCBlbWl0X2xpYmFyeV9jYWxsIGZvciBiY29weSwKKwlwYXNzIGFyZ3VtZW50cyB1c2luZyBjb3JyZWN0IHR5cGVzIGFuZCBtb2Rlcy4KKwkoZW1pdF9wdXNoX2luc24sIGV4cGFuZF9hc3NpZ25tZW50KTogTGlrZXdpc2UuCisJKGNsZWFyX3N0b3JhZ2UsIHN0b3JlX2V4cHIpOiBMaWtld2lzZSBmb3IgbWVtc2V0IGFuZCBiemVyby4KKwkoc3RvcmVfY29uc3RydWN0b3IpOiBMaWtld2lzZSBmb3IgbWVtc2V0LgorCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBMaWtld2lzZSBmb3IgbWVtY21wIGFuZCBiY21wLgorCSogY29udmV4L2NvbnZleC5jIChleHBhbmRfbW92c3RyX2NhbGwpOiBMaWtld2lzZSBmb3IgbWVtY3B5LgorCSogbTg4ay9tODhrLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogTGlrZXdpc2UgZm9yIG1lbWNweSBhbmQgYmNvcHkuCisJKiBtaXBzL21pcHMuYyAoYmxvY2tfbW92ZV9jYWxsKTogTGlrZXdpc2UgZm9yIG1lbWNweSBhbmQgYmNvcHkuCisJKiBtaXBzL21pcHMuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogTGlrZXdpc2UgZm9yIGNhY2hlZmx1c2guCisKKwkqIGMtY29tbW9uLmMgKFdDSEFSX1RZUEVfU0laRSk6IEFkZCBhIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wsIGNhc2UgRlVOQ1RJT05fREVDTCk6IFVzZSBERUNMX0lOSVRJQUwKKwlpbnN0ZWFkIG9mIERFQ0xfRVhURVJOQUwgdG8gaWRlbnRpZnkgZGVjbGFyYXRpb25zLgorCisgICAgICAgICogc3ZyNC5oIChBU01fSURFTlRJRllfR0NDKTogRG9uJ3Qgb3V0cHV0IHN0YWIgaGVyZS4KKwkoQVNNX0lERU5USUZZX0dDQ19BRlRFUl9TT1VSQ0UpOiBPdXRwdXQgc3RhYiBoZXJlIGluc3RlYWQgb2YKKwlhYm92ZS4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogSGFuZGxlIG51bWVyaWMgY29uc3RyYWludHMgaW4KKwl3aXRoIHRoZSBkZWZhdWx0IGNhc2UuCisKK01vbiBEZWMgMTggMTY6NDk6NDMgMTk5NSAgSm9obiBGLiBDYXJyICA8amZjQG1pdC5lZHU+CisKKwkqIGV4cHIuaCAoZXhwYW5kX211bHRfaGlnaHBhcnRfYWRqdXN0KTogRGVjbGFyZS4KKworTW9uIERlYyAxOCAxNjozOTo0MSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogRml4IGVycm9yIGluIGxhc3QgY2hhbmdlOiBqdXN0CisJY29weSBNRU0sIGJ1dCBiZSBzdXJlIHRvIHNoYXJlIGFkZHJlc3MuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTlNUUlVDVE9SKTogTGlrZXdpc2UuCisKK01vbiBEZWMgMTggMTY6MjI6NDYgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMKTogUHV0IGEgbGVhZGluZyAnKicKKwlpbiB0aGUgbGFiZWwgc3RyaW5nIHNvIGFzIHRvIG5vdCBjb25mdXNlIGRieG91dC5jIHdoaWNoIGJlbGlldmVzCisJaXQgY2FuIHNraXAgdGhlIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuCisKK01vbiBEZWMgMTggMDk6NDQ6NTYgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmMgKF9fZW1wdHkpOiBBbiBlbXB0eSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBDKysgZnJvbnRlbmQgZm9yCisJZGVmYXVsdGluZyBjbGVhbnVwIGFjdGlvbnMuCisKKwkqIHRyZWUuYyAoc2F2ZV90cmVlX3N0YXR1cywgcmVzdG9yZV90cmVlX3N0YXR1cyk6IFNhdmUgYW5kIHJlc3RvcmUKKwl0ZW1wb3JhcnlfZmlyc3RvYmosIHNvIHRoYXQgaW4gcHJvZ3Jlc3Mgb2JqZWN0cyB0aGF0IGxpdmUgb24gdGhlCisJdGVtcG9yYXJ5IG9ic3RhY2sgYXJlIG5vdCByZWFsbG9jYXRlZCwgaWYgd2Ugc2F2ZSBhbmQgcmVzdG9yZSB0aGUKKwl0cmVlIHN0YXR1cyBpbiB0aGVpciBsaWZldGltZS4KKworCitNb24gRGVjIDE4IDA3OjQ5OjM0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UgKHdoZW4KKwltb2RlIG9mIFZBUiBpcyBub3QgdGhlIHNhbWUgYXMgUFJPTU9URURfTU9ERSkuCisKK1N1biBEZWMgMTcgMTI6MTQ6MzcgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEuaCAoQVNNX09VVFBVVF9GVU5DVElPTl9QUkVGSVgpOiBEb24ndCBzdXJyb3VuZCBzZWN0aW9uIG5hbWVzCisJd2l0aCAnJCcuICBUaGF0IGNvbmZ1c2VzIGNvbGxlY3QyLgorCShBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IExpa2V3aXNlLgorCisJKiBzY2hlZC5jIChjYW5vbl9ydHgpOiBSZWN1cnNpdmVseSBsb29rIGZvciBlcXVpdmFsZW5jZXM7CisJbG9vayBmb3IgZXhwcmVzc2lvbnMgZXF1aXZhbGVudCB0byBNRU1zLgorCSh0cnVlX2RlcGVuZGVuY2UpOiBDYW5vbmljYWxpemUgaW5wdXRzIGJlZm9yZSBvcGVyYXRpbmcKKwlvbiB0aGVpciB2YWx1ZXMuCisJKGFudGlfZGVwZW5kZW5jZSwgb3V0cHV0X2RlcGVuZGVuY2UpOiBMaWtld2lzZS4KKworICAgICAgICAqIGp1bXAuYyAoZm9sbG93X2p1bXBzKTogRG9uJ3QgZm9sbG93IGFuIHVuY29uZGl0aW9uYWwganVtcAorICAgICAgICB0aGF0IGlzIG5vdCBhIHNpbXBsZV9qdW1wLgorCisgICAgICAgICogcGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IE1ha2UgNzEwMCBzY2hlZHVsaW5nIHRoZSBkZWZhdWx0LgorCisgICAgICAgICogcGEubWQ6IEFkZCAybmQgcmVsb2FkIHBlZXBob2xlIHNvbWVob3cgb21pdHRlZCBmcm9tIE5vdjI3IGNoYW5nZXMuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogVXNlIFNFQ09OREFSWV9SRUxPQURfQ0xBU1MgaWYgaXQncworCWRlZmluZWQgdG8gYXZvaWQgdXNlbGVzcyB3b3JrLgorCisJKiBjb21iaW5lLmMgKGZpbmRfc3BsaXRfcG9pbnQpOiBUcnkgdG8gc3BsaXQgU0VUX0RFU1QKKwlqdXN0IGxpa2Ugd2UgZG8gZm9yIFNFVF9TUkMuCisKK1N1biBEZWMgMTcgMTE6Mzc6MjUgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG5vaXN5LnRtZy5zZT4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0X2hpZ2hwYXJ0KTogV2hlbiBkb2luZyB3aWRlbmluZyBtdWx0aXBseSwKKwlwdXQgY29uc3RhbnQgaW4gYSByZWdpc3Rlci4KKwkoZXhwYW5kX211bHRfaGlnaHBhcnQpOiBXaGVuIG1vZGUgaXMgd29yZF9tb2RlIHVzZSBnZW5faGlnaHBhcnQKKwlpbnN0ZWFkIG9mIHJpZ2h0IHNoaWZ0IGJ5IHNpemUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgTVVMVF9FWFBSKTogR2VuZXJhbGl6ZSBjb2RlIGZvciB3aWRlbmluZworCW11bHRpcGx5IHRvIGhhbmRsZSBzaWduZWQgd2lkZW5pbmcgbXVsdGlwbHkgd2hlbiBvbmx5IHVuc2lnbmVkIG9wdGFiCisJaXMgZGVmaW5lZCwgYW5kIHZpY2UgdmVyc2EuCisKK1N1biBEZWMgMTcgMDc6MzU6NTAgMTk5NSAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CisKKwkqIHZheC92bXMuaCAoV0NIQVJfVFlQRV9TSVpFKTogRGVmaW5lLgorCitTdW4gRGVjIDE3IDA3OjA4OjM0IDE5OTUgIFJvbmFsZCBGLiBHdWlsbWV0dGUgIDxyZmdAbW9ua2V5cy5jb20+LgorCisJKiBmcC10ZXN0LmM6IE5ldyBmaWxlLgorCitTdW4gRGVjIDE3IDA3OjA2OjAzIDE5OTUgIFBldGVyIEZsYXNzICA8Zmxhc3NAbGJkYy5zZW5hdGUuc3RhdGUubnkudXM+CisKKwkqIGkzNzAubWQgKGNtcHFpKTogRml4IGdlbmVyYXRpb24gb2YgbGl0ZXJhbCBvcGVyYW5kIG9mIENMTSBpbnN0cnVjdGlvbgorCXRvIGF2b2lkIGRvdWJsZSBsaXRlcmFscyAoPVgnPUYnLi4uKS4KKworU3VuIERlYyAxNyAwNjo1NzowMiAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jOiBUcnkgaGFyZGVyIG5vdCB0byBvcGVuIG9yIHN0YXQgdGhlIHNhbWUgaW5jbHVkZSBmaWxlIHR3aWNlLgorCVNpbXBsaWZ5IGluY2x1ZGUgZmlsZSBuYW1lcyBzbyB0aGF0IHRoZXkgYXJlIG1vcmUgbGlrZWx5IHRvIG1hdGNoLgorCUUuZy4gc2ltcGxpZnkgIi4vYS8vYiIgdG8gImEvYiIuICBSZXByZXNlbnQgZGlyZWN0b3JpZXMgd2l0aCBzaW1wbGlmaWVkCisJcHJlZml4ZXMsIGUuZy4gcmVwbGFjZSAiLi9hLy9iIiB3aXRoICJhL2IvIiwgYW5kICIuIiB3aXRoICIiLgorCisJKGFic29sdXRlX2ZpbGVuYW1lKTogTmV3IGZ1bmN0aW9uLgorCShkb19pbmNsdWRlKTogVXNlIGl0LgorCShyZWFkX25hbWVfbWFwKTogTGlrZXdpc2U7IHRoaXMgbWFrZXMgdGhpbmdzIG1vcmUgY29uc2lzdGVudCBmb3IgRE9TLgorCisJKG1haW4sIGRvX2luY2x1ZGUsIG9wZW5faW5jbHVkZV9maWxlKTogLU0gb3V0cHV0IG5vdyBjb250YWlucworCW9wZXJhbmRzIG9mIC1pbWFjcm9zIGFuZCAtaW5jbHVkZS4KKworCShza2lwX3RvX2VuZF9vZl9jb21tZW50KTogV2hlbiBjb3B5aW5nIGEgLy8gY29tbWVudCwgZG9uJ3QgdHJ5IHRvCisJY2hhbmdlIGl0IHRvIGEgLyogY29tbWVudC4KKwkocmVzY2FuLCBza2lwX2lmX2dyb3VwLCBza2lwX3RvX2VuZF9vZl9jb21tZW50LCBtYWNhcmcxKTogVHVuZS4KKworCShyZXNjYW4sIHNraXBfaWZfZ3JvdXAsIHNraXBfdG9fZW5kX29mX2NvbW1lbnQsIG1hY2FyZzEpOgorCUlmIHdhcm5fY29tbWVudHMgaXMgbm9uemVybywgd2FybiBpZiBiYWNrc2xhc2gtbmV3bGluZSBhcHBlYXJzCisJaW4gYSAvLyBjb21tZW50LiAgU2ltcGxpZnkgbWV0aG9kIGZvciBmaW5kaW5nIC8qIC8qICovIGNvbW1lbnQuCisJKHNraXBfaWZfZ3JvdXApOiBPcHRpb25hbGx5IHdhcm4gaWYgLyogLyogKi8gYXBwZWFycyBiZXR3ZWVuICMgYW5kCisJYSBkaXJlY3RpdmUgaW5zaWRlIGEgc2tpcHBlZCBpZiBncm91cC4KKwkobWFjYXJnKTogT3B0aW9uYWxseSB3YXJuIGlmIC8qIC8qICovIGFwcGVhcnMgaW4gYSBtYWNybyBhcmd1bWVudC4KKworCShzdHJuY2F0LCBWTVNfc3RybmNhdCwgdm1zX2lub190LCBpbm9fdCk6IFJlbW92ZS4KKwkoSU5DTFVERV9MRU5fRlVER0UpOiBBZGQgMiBpZiBWTVMsIGZvciB0cmFpbGluZyAiLmgiLgorCShJTk9fVF9FUSwgSU5PX1RfSEFTSCk6IE5ldyBtYWNyb3MuCisKKwkoc3RydWN0IGZpbGVfYnVmKTogTmV3IG1lbWJlciBgaW5jJy4KKwkoZXhwYW5kX3RvX3RlbXBfYnVmZmVyKTogSW5pdGlhbGl6ZSBpdC4KKworCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBOZXcgbWVtYmVyIGBpbmMnLgorCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBOZXcgbWVtYmVyIGBzdCcuCisJY19zeXN0ZW1faW5jbHVkZV9wYXRoIGlzIG5vdyAxIGlmIG5vdCAwLgorCWZuYW1lIGlzIG5vdyBhbiBhcnJheSwgbm90IGEgcG9pbnRlci4KKwkoc3RydWN0IGluY2x1ZGVfZmlsZSk6IE5ldyBtZW1iZXJzIGBuZXh0X2lubycsIGBkZXBzX291dHB1dCcsIGBzdCcuCisJUmVtb3ZlIG1lbWJlcnMgYGlub2RlJyBhbmQgYGRldic7IHRoZXkgYXJlIG5vdyBpbiBgc3QnLgorCisJKElOQ0xVREVfSEFTSFNJWkUpOiBSZW5hbWUgZnJvbSBJTkNMVURFX0hBU0hfU0laRS4KKwkoaW5jbHVkZV9oYXNodGFiKTogUmVuYW1lIGZyb20gaW5jbHVkZV9oYXNoX3RhYmxlLgorCShpbmNsdWRlX2lub19oYXNodGFiKTogTmV3IHZhcmlhYmxlLgorCisJKG1haW4pOiBTdG9yZSBmaWxlIHN0YXR1cyBpbiBzdHJ1Y3Qgc3RhdCwgbm90IGluIGxvbmcgYW5kIGludCBwaWVjZXMuCisJVXNlIGJhc2VfbmFtZSB0byBzdHJpcCBwcmVmaXhlcyBmcm9tIGZpbGUgbmFtZXMuCisJV2hlbiBwcmludGluZyBkaXJlY3RvcnkgcHJlZml4ZXMsIG9taXQgdHJhaWxpbmcgLyBhbmQgcHJpbnQgIiIgYXMgIi4iLgorCUZhdGFsIGVycm9yIGlmIHRoZSBpbnB1dCBmaWxlIGlzIGEgZGlyZWN0b3J5LgorCShtYWluLCBwYXRoX2luY2x1ZGUpOiBSZWd1bGFyaXplIG9wZXJhbmRzIG9mIC1pbmNsdWRlLCAtaW1hY3JvcywKKwktaXN5c3RlbSwgLWl3aXRocHJlZml4LCBhbmQgLWl3aXRocHJlZml4YmVmb3JlLgorCVJlZ3VsYXJpemUgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yaWVzLgorCisJKGRvX2luY2x1ZGUpOgorCUFsbG9jYXRlIGRzcCB3aXRoIGFsbG9jYSwgc2luY2UgZm5hbWUgaXMgbm93IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KKwlVc2UgLTMgdG8gcmVwcmVzZW50IGEgbmV2ZXItb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4KKwlNYWtlIGNvcHkgb2YgZmlsZSBuYW1lLCBhbmQgc2ltcGxpZnkgdGhlIGNvcHkuCisJVXNlIGJhc2VfbmFtZSB0byBpZGVudGlmeSB0aGUgZW5kIG9mIGZuYW1lJ3MgZGlyZWN0b3J5LgorCURvIG5vdCBwcmVwZW5kIGRpciBmb3IgIi4uLiIgaWYgaXQgbWF0Y2hlcyB0aGUgc2VhcmNoIGxpc3QncyBmaXJzdCBkaXIuCisJb3Blbl9pbmNsdWRlX2ZpbGUgbm93IHN1YnN1bWVzIHJlZHVuZGFudF9pbmNsdWRlX3AgYW5kIGxvb2t1cF9pbXBvcnQuCisJVXNlIGJ5cGFzc19zbG90IHRvIHJlbWVtYmVyIHdoZW4gdG8gc2tpcCBkaXJlY3RvcmllcyB3aGVuIGluY2x1ZGluZworCWEgZmlsZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4KKwlJbnN0ZWFkIG9mIHVzaW5nIDAgdG8gcmVwcmVzZW50IHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kICIiCisJdG8gcmVwcmVzZW50IGEgZGlyZWN0b3J5IHRvIGJlIGlnbm9yZWQsIHVzZSAiIiBmb3IgdGhlIGZvcm1lciwKKwlhbmQgYXNzdW1lIHRoZSBsYXR0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBiZWZvcmUgd2UgZ2V0IGhlcmUuCisJQXNzdW1lIHRoZSBkaXJlY3RvcnkgcHJlZml4ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2ltcGxpZmllZC4KKwlSZXBvcnQgYXMgZXJyb3JzIGFsbCBvcGVuIGZhaWx1cmVzIG90aGVyIHRoYW4gRU5PRU5ULgorCUZhdGFsIGVycm9yIGlmIGZzdGF0IGZhaWxzLgorCVVzZSBuZXcgZGVwc19vdXRwdXQgbWVtYmVyIHRvIGF2b2lkIHByaW50aW5nIGRlcGVuZGVuY2llcyB0d2ljZS4KKwkoYnlwYXNzX2hhc2h0YWIpOiBOZXcgdmFyaWFibGUuCisKKwkoZG9faW5jbHVkZSwgb3Blbl9jb250cm9sX2ZpbGUsIHJlY29yZF9jb250cm9sX21hY3JvKTogTmV3IGNvbnZlbnRpb246CisJY29udHJvbF9tYWNybyBpcyAiIiBpZiB0aGUgZmlsZSB3YXMgaW1wb3J0ZWQgb3IgaGFkICNwcmFnbWEgb25jZS4KKwkocHJhZ21hX29uY2VfbWFya2VyKTogUmVtb3ZlLgorCisJKHJlZHVuZGFudF9pbmNsdWRlX3AsIGluY2x1ZGVfaGFzaCwgbG9va3VwX2luY2x1ZGUsIGxvb2t1cF9pbXBvcnQsCisJYWRkX2ltcG9ydCwgZmlsZV9zaXplX2FuZF9tb2RlKTogUmVtb3ZlOyBzdWJzdW1lZCBieSBvcGVuX2luY2x1ZGVfZmlsZS4KKwkoc2tpcF9yZWR1bmRhbnRfZGlyX3ByZWZpeCk6IFJlbW92ZTsgc3Vic3VtZWQgYnkgc2ltcGxpZnlfZmlsZW5hbWUuCisKKwkoaXNfc3lzdGVtX2luY2x1ZGUsIHJlYWRfbmFtZV9tYXAsIHJlbWFwX2luY2x1ZGVfZmlsZSk6CisJQXNzdW1lIGFyZyBpcyBhIGRpcmVjdG9yeSBwcmVmaXguCisKKwkoYmFzZV9uYW1lLCBzaW1wbGlmeV9maWxlbmFtZSwgcmVtYXBfaW5jbHVkZV9maWxlLAorCWxvb2t1cF9pbm9faW5jbHVkZSwgbmV3X2luY2x1ZGVfcHJlZml4KTogTmV3IGZ1bmN0aW9ucy4KKworCShvcGVuX2luY2x1ZGVfZmlsZSk6IE5ldyBhcmd1bWVudHMgYGltcG9ydGluZycgYW5kIGBwaW5jJy4KKwlNb3ZlIGZpbGVuYW1lIG1hcHBpbmcgaW50byBuZXcgcmVtYXBfaW5jbHVkZV9maWxlIGZ1bmN0aW9uLgorCUZpcnN0IHRyeSB0byBmaW5kIGZpbGUgYnkgbmFtZSBpbiBpbmNsdWRlX2hhc2h0YWI7CisJaWYgdGhhdCBkb2Vzbid0IHdvcmssIG9wZW4gYW5kIGZzdGF0IGl0IGFuZCB0cnkgdG8gZmluZCBpdAorCWJ5IGlub2RlIGFuZCBkZXYgaW4gaW5jbHVkZV9pbm9faGFzaHRhYi4KKworCShmaW5jbHVkZSk6IEdldCBmaWxlIHN0YXR1cyBmcm9tIGluYy0+c3QgaW5zdGVhZCBvZiBpbnZva2luZyBmc3RhdC4KKwlTdG9yZSBpbmMgaW50byBmcC0+aW5jIHNvIHRoYXQgcmVjb3JkX2NvbnRyb2xfbWFjcm8gZG9lc24ndAorCW5lZWQgdG8gZG8gYSB0YWJsZSBsb29rdXAuCisJKGZpbmNsdWRlLCByZWNvcmRfY29udHJvbF9tYWNybyk6IEFjY2VwdCBzdHJ1Y3QgaW5jbHVkZV9maWxlICoKKwlpbnN0ZWFkIG9mIGNoYXIgKiB0byBpZGVudGlmeSBpbmNsdWRlIGZpbGUuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKGNoZWNrX3ByZWNvbXBpbGVkKTogR2V0IGZpbGUgc3RhdHVzIGZyb20gbmV3IGFyZ3VtZW50IGBzdCcuCisKKwkoZG9fcHJhZ21hKTogT3V0cHV0IGF0IG1vc3Qgb25lIHdhcm5pbmcgYWJvdXQgI3ByYWdtYSBpbXBsZW1lbnRhdGlvbi4KKwlBbHdheXMgcmV0dXJuIDAgaW5zdGVhZCBvZiByZXR1cm5pbmcgZ2FyYmFnZSBzb21ldGltZXMuCisJKGRvX3ByYWdtYSwgaGFja192bXNfaW5jbHVkZV9zcGVjaWZpY2F0aW9uKToKKwlVc2UgYmFzZV9uYW1lIGZvciBjb25zaXN0ZW5jeSwgYW5kIHJlbW92ZSByZWR1bmRhbnQgY29kZS4KKworCUZyb20gUGVyIEJvdGhuZXI6CisJVW5pZnkgdGhlIDMgc2VwYXJhdGUgbWVjaGFuaXNtcyBmb3IgYXZvaWRpbmcgcHJvY2Vzc2luZworCW9mIHJlZHVuZGFudCBpbmNsdWRlIGZpbGVzOiAjaW1wb3J0LCAjcHJhZ21hIG9uY2UsIGFuZAorCXJlZHVuZGFudF9pbmNsdWRlX3AgdG8gdXNlIGEgc2luZ2xlIG1vcmUgZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlLgorCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiAgUmVtb3ZlIG5vLWxvbmdlciBuZWVkZWQgZmllbGQgY29udHJvbF9tYWNyby4KKwkoZG9udF9yZXBlYXRfZmlsZXMsIGFsbF9pbmNsdWRlX2ZpbGVzKTogIFJlbW92ZSwgbm8gbG9uZ2VyIHVzZWQuCisJKHN0cnVjdCBpbXBvcnRfZmlsZSk6ICBSZW5tZWQgdG8gc3RydWN0IGluY2x1ZGVfZmlsZSwgbW92ZWQgZWFybGllcgorCWluIGZpbGUsIHJlbmFtZWQgZmllbGQgbmFtZSB0byBmbmFtZSwgYW5kIGFkZGVkIGNvbnRyb2xfbWFjcm8gZmllbGQuCisJKHByYWdtYV9vbmNlX21hcmtlcik6ICBOZXcgY29uc3RhbnQuCisJKGltcG9ydF9oYXNoX3RhYmxlKTogIFJlbmFtZWQgdG8gaW5jbHVkZV9oYXNoX3RhYmxlLgorCShpbXBvcnRfaGFzaCk6ICBSZW5hbWVkIHRvIGluY2x1ZGVfaGFzaC4KKwkoSU1QT1JUX0hBU0hfU0laRSk6ICBSZW5hbWVkIHRvIElOQ0xVREVfSEFTSF9TSVpFLgorCShtYWluLCBwYXRoX2luY2x1ZGUpOiAgRG9uJ3QgY2xlYXIgcmVtb3ZlZCBjb250cm9sX21hY3JvIGZpZWxkLgorCShsb29rdXBfaW5jbHVkZSk6ICBOZXcgZnVuY3Rpb24gLSBsb29rIHVwIGZuYW1lIGluIGluY2x1ZGVfaGFzaF90YWJsZS4KKwkocmVkdW5kYW50X2luY2x1ZGVfcCk6ICBSZS13cml0ZSB0byB1c2UgbG9va3VwX2luY2x1ZGUuCisJKGxvb2t1cF9pbXBvcnQsIHJlY29yZF9jb250cm9sX21hY3JvKTogIExpa2V3aXNlLgorCShhZGRfaW1wb3J0KTogIERlZmVyIGZzdGF0IHRvIGNhbGxlci4gIENvbWJpbmUgdHdvIHhtYWxsb2NzIGludG8gb25lLgorCShkb19vbmNlKTogIFVzZSBwcmFnbWFfb25jZV9tYXJrZXIgaW4gaW5jbHVkZV9oYXNoX3RhYmxlLgorCShkb19wcmFnbWEpOiAgUmUtaW1wbGVtZW50IHRvIHNjYW4gaW5jbHVkZV9oYXNoX3RhYmxlLgorCShkb19pbmNsdWRlKTogIFVzZSBuZXcgbG9va3VwX2luY2x1ZGUgYW5kIGFkZF9pbXBvcnQuCisKK1N1biBEZWMgMTcgMDY6NDU6NDMgMTk5NSAgSm9obiBGLiBDYXJyIDxqZmNAbWl0LmVkdT4KKworCSogY29uZmlndXJlIChzYXZlc3JjZGlyKTogRG8gbm90IGNyZWF0ZSBwYXRocyB3aXRoIHRyYWlsaW5nICIvLiIuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBXaGVuIGNoZWNraW5nIGZvciB0d28gc2V0cyBvZiB0aGUgc2FtZQorCXJlZ2lzdGVyIGluIGEgc3BsaXQgaW5zbiwgYWxzbyB0ZXN0IGZvciBzZXR0aW5nIGEgWkVST19FWFRSQUNULAorCVNUUklDVF9MT1dfUEFSVCwgb3IgU1VCUkVHLgorCitTdW4gRGVjIDE3IDA2OjM3OjAwIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChwdXNoX3NlY29uZGFyeV9yZWxvYWQpOiBEb24ndCBzdHJpcCBwYXJhZG94aWNhbCBTVUJSRUcKKwlpZiByZWxvYWRfY2xhc3MgaXMgQ0xBU1NfQ0FOTk9UX0NIQU5HRV9TSVpFLgorCitTYXQgRGVjIDE2IDE4OjI0OjIwIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBGaXggYWxpZ25tZW50IHBhcm0gaW4gZW1pdF9ibG9ja19tb3ZlLgorCitTYXQgRGVjIDE2IDE4OjE2OjA4IDE5OTUgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QHJ0cC5kZy5jb20pCisKKwkqIGxvY2FsLWFsbG9jLmMgKG9wdGltaXplX3JlZ19jb3B5XzIpOiBEb24ndCBhdHRlbXB0CisJb3B0aW1pemF0aW9uIGlmIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGRpZXMuCisKK1NhdCBEZWMgMTYgMDg6MzE6MTYgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6ICBEb24ndCByZWNvcmQgb3ZlcmZsb3cgd2hlbiBuZWdhdGluZworCXVuc2lnbmVkIGNvbnN0YW50cy4KKworU2F0IERlYyAxNiAwNzo0NToxMSAxOTk1ICBHcmFuIFVkZGVib3JnICAodWRkZWJvcmdAY2FybWVuLnNlKQorCisJKiBjb25maWd1cmUgKGlbMzQ1Nl0tKi1pc2MsIGdhcywgc3RhYnMpOiBSZW1vdmUgY3J0KiBmcm9tIGV4dHJhX2ZpbGVzCisKK1NhdCBEZWMgMTYgMDc6MDM6MzMgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogV2hlbiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTLAorCWNvbXB1dGUgYml0cG9zIHVzaW5nIGZpZWxkX3NpemUgJSB0eXBlX2FsaWduIGluc3RlYWQgb2YgZmllbGRfc2l6ZS4KKworCSogZml4aW5jbHVkZXMgKHN0ZGlvLmgpOiAgRml4IHJldHVybiB0eXBlIG9mIGZyZWFkIGFuZCBmd3JpdGUKKwlvbiBzeXNWNjguCisKK1NhdCBEZWMgMTYgMDY6NTc6MTQgMTk5NSAgVGhvbWFzIEx1bmRxdmlzdCAgKGQwdGhvbWFzQGR0ZWsuY2hhbG1lcnMuc2UpCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBGaXggdHdvIGluY29ycmVjdCBjYWxscyB0byBzaW5nbGVfc2V0LgorCitGcmkgRGVjIDE1IDIyOjMwOjI3IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBub2lzeS50bWcuc2U+CisKKwkqIGkzODYuaCAoUkVHSVNURVJfTU9WRV9DT1NUKTogU2ltcGxpZnkuCisKK0ZyaSBEZWMgMTUgMjI6MzA6MjcgMTk5NSAgU3RhbiBDb3ggIDxjb3hzQGRnLXJ0cC5kZy5jb20+CisKKwkqIGkzODYuaCAoVEFSR0VUX0NQVV9ERUZBVUxUKiwgUFJPQ0VTU09SXyosCisJVEFSR0VUX3tMRUFWRSwzODZfQUxJR05NRU5ULFBVU0hfTUVNT1JZLFpFUk9fRVhURU5EX1dJVEhfQU5ELAorCURPVUJMRV9XSVRIX0FERCxCSVRfVEVTVH0pOiBOZXcgbWFjcm9zLgorCSogaTM4Ni5jIChpeDg2X2NwdSosIGl4ODZfaXNhKik6IE5ldyBnbG9iYWwgdmFyaWFibGVzLgorCShvdmVycmlkZV9vcHRpb25zKTogQWRkIC1tY3B1IGFuZCAtbWlzYSBzdXBwb3J0CisJKiBpMzg2Lm1kOiBVc2UgVEFSR0VUKiBtYWNyb3MuCisJKiBpMzg2L2RndXgue2MsaH06IE5ldyBmaWxlcy4KKwkqIG04OGsvdC1kZ3V4OiAoR0NDX0ZPUl9UQVJHRVQsIFRfQ0ZMQUdTKTogTmV3IG1hY3Jvcy4KKwkqIG04OGsvdC1kZ3V4YmNzOiBOZXcgZmlsZS4KKwkqIG04OGsveC17ZGd1eCxkZ3V4YmNzfTogKEdDQ19GT1JfVEFSR0VULCBYX0NGTEFHUyk6IFJlbW92ZWQuCisKK0ZyaSBEZWMgMTUgMTg6NDE6NTAgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBmaXhpbmNsdWRlcyAoc3lzL3dhaXQuaCk6ICBBZGQgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QgcnVzYWdlCisJb24gQUlYIDMuMi41LgorCitGcmkgRGVjIDE1IDE4OjM5OjM2IDE5OTUgIE1hcmNvIFMgSHltYW4gIChtYXJjQGR1bWJjYXQuc2YuY2EudXMpCisKKwkqIHhtLWJzZDM4Ni5oIChET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QpOiBEZWZpbmVkLgorCitGcmkgRGVjIDE1IDE4OjM2OjQyIDE5OTUgIEdyYW4gVWRkZWJvcmcgKHVkZGVib3JnQGNhcm1lbi5zZSkKKworCSogaTM4Ni9zdnIzZGJ4LmggKERPX0dMT0JBTF9EVE9SU19CT0RZKTogRGVsZXRlOyBvYnNvbGV0ZS4KKworRnJpIERlYyAxNSAxODoyMTozNCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBpMzg2L2kzODZpc2NnYXMuaCwgaTM4Ni90LWlzY3Njb2RieDogRGVsZXRlZDsgbG9uZyBkZWFkLgorCitGcmkgRGVjIDE1IDEwOjAxOjI3IDE5OTUgIFN0YW4gQ294ICA8Y294c0BkZy1ydHAuZGcuY29tPgorCisJKiBjb25maWd1cmUgKHRhcmdldF9jcHVfZGVmYXVsdCkgU2V0IGZvciA0ODYvNTg2LzY4NgorCShtODhrLWRnLWRndXgpIFVzZSB0LWRndXhiY3MgaW5zdGVhZCBvZiB4LWRndXhiY3MKKwkoaSo4NiopIENoYW5nZSBbMzQ1XSB0byBbMzQ1Nl0KKwkoaVszNDU2XTg2LWRnLWRndXgpIEFkZGVkCisJKiBNYWtlZmlsZS5pbiAob3V0X29iamVjdF9maWxlKSBBZGQgTUFZQkVfVEFSR0VUX0RFRkFVTFQKKworRnJpIERlYyAxNSAwODowNTo0OSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChpbml0X3RlbXBfc2xvdHMpOiBOZXcgZnVuY3Rpb24uCisJKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBDb2RlIG1vdmVkIHRvIG5ldyBmdW5jdGlvbiBhbmQgY2FsbGVkIGhlcmUuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgaW5pdF90ZW1wX3Nsb3RzLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogRG9uJ3QgdXNlIGluc3YgZm9yIEJMS21vZGUgdmFsdWUuCisJKHN0b3JlX3NwbGl0X2JpdF9maWVsZCk6IFNldCB0b3RhbF9iaXRzIHRvIEJJVFNfUEVSX0ZPUiBmb3IKKwlCTEttb2RlIHZhbHVlLgorCitGcmkgRGVjIDE1IDA2OjM1OjM2IDE5OTUgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiB4Y29mZm91dC5oIChEQlhfU1RBVElDX0JMT0NLX0VORCk6IFVzZSBtYWNybyBhcmd1bWVudHMuCisJKHhjb2ZmX2JlZ2luX2Z1bmN0aW9uX2xpbmUsIHhjb2ZmX2N1cnJlbnRfZnVuY3Rpb25fZmlsZSk6IFJlbW92ZQorCXVudXNlZCBleHRlcm4gZGVjbGFyYXRpb25zLgorCShEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVOQU1FKTogVXNlIG1hY3JvIGFyZ3VtZW50LgorCSogeGNvZmZvdXQuYyAoeGNvZmZfYmVnaW5fZnVuY3Rpb25fbGluZSk6IE1ha2Ugc3RhdGljLgorCSh4Y29mZl9pbmxpbmluZyk6IExpa2V3aXNlLgorCSh4Y29mZl9jdXJyZW50X2Z1bmN0aW9uX2ZpbGUpOiBMaWtld2lzZS4KKwkoeGNvZmZfb3V0cHV0X3N0YW5kYXJkX3R5cGVzKTogUmVtb3ZlIFRBUkdFVF82NEJJVCBkZXBlbmRlbmNpZXMgZnJvbQorCWludCBhbmQgdW5zaWduZWQgaW50LgorCitNb24gT2N0IDE2IDEyOjI1OjUyIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBmaXgtaGVhZGVyLmM6ICBTdXBwb3J0IGRpZmZlcmVudCBraW5kcyBvZiBmdW5jdGlvbnMgKEFOU0kgYW5kCisJUG9zaXgxKS4gIEVuYWJsZSBBTlNJIHByb3B0b3R5cGVzIGlmIF9fU1RSSUNUX0FOU0lfXy4KKwkobmFtZWxpc3RfZW5kKTogIFJlbW92ZWQuCisJKHN0ZF9pbmNsdWRlX3RhYmxlKTogIERpdmlkZSB1cCBmdW5jdGlvbnMgaW50byBraW5kcy4KKwkoYWRkX3N5bWJvbHMpOiAgTmV3IGZ1bmN0aW9uLgorCShyZWFkX3NjYW5maWxlLCB3cml0ZV9yYnJhYywgbWFpbik6ICBVc2UgbmV3IGRhdGEgc3RydWN0dXJlcy4KKworVGh1IERlYyAxNCAxOToxNzoxMiAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbm9pc3kudG1nLnNlPgorCisJKiByczYwMDAubWQgKHVtdWxzaWRpMyk6IE5ldyBwYXR0ZXJuLgorCitUaHUgRGVjIDE0IDE4OjA4OjU5IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBub2lzeS50bWcuc2U+CisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kLCBjYXNlIFRSVU5DX0RJVl9FWFBSKTogT25seSByZWplY3QKKwlsYXJnZXItdGhhbi1IT1NUX0JJVFNfUEVSX1dJREVfSU5UIG1vZGVzIGZvciBnZW5lcmFsIGNvbnN0YW50cywKKwlub3QgZm9yIHBvd2Vycy1vZi0yLgorCisJKiBpOTYwLm1kIChhbmRzaTMpOiBNYXRjaCBvcDIgd2l0aCBsb2dpY19vcGVyYW5kLCBjaGFuZ2UgY29uc3RyYWludHMKKwlhY2NvcmRpbmdseS4gIE91dHB1dCBhbmRub3QgZm9yIG5lZ2F0aXZlIG9wMi4KKwkoaW9yc2kzLCB4b3JzaTMpOiBBbmFsb2dvdXMgY2hhbmdlcy4KKwkqIGk5NjAuYyAobG9naWNfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkoaTk2MF9wcmludF9vcGVyYW5kKTogSGFuZGxlIGNvZGUgYEMnLgorCSogaTk2MC5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgbG9naWNfb3BlcmFuZC4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogSGFuZGxlIGBNJy4KKwkqIGk5NjAubWQ6IE1vdmUgYWxsIHBsYWluIGxvZ2ljYWwgcGF0dGVybnMgdG9nZXRoZXIuCisJKiBpOTYwLmggKFNISUZUX0NPVU5UX1RSVU5DQVRFRCk6IERlZmluZSBhcyAwIGFzIGFwcHJvcHJpYXRlLgorCisJKiBjbGlwcGVyLm1kICh1bnR5cGVkX2NhbGwpOiBOZXcgcGF0dGVybi4KKworCSogbTY4ay5tZCAoYXNocnNpXzMxKTogTmV3IHBhdHRlcm4uCisKK1RodSBEZWMgMTQgMTc6MjI6MTQgMTk5NSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBhcm0vYXJtLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEV4dHJhY3QgREZtb2RlIGNvbnN0YW50cyB1c2luZworCVJFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRS4KKworVGh1IERlYyAxNCAxNTowNToxMyAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEZWxldGUgZmxvYXQuaC4KKwkqIGNvbmZpZ3VyZTogU2V0IENST1NTX0ZMT0FUX0ggZnJvbSBmbG9hdF9mb3JtYXQuCisJKiBjb25maWcvZmxvYXQtaTY0Lmg6IE5ldyBmaWxlLgorCSogY29uZmlnL2Zsb2F0LWkzMi5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy9mbG9hdC12YXguaDogTmV3IGZpbGUuCisJKiBhcm0vY3Jvc3MtZmxvYXQuaDogRGVsZXRlLgorCSogYXJtL3Qtc2VtaSAoQ1JPU1NfRkxPQVRfSCk6IERlbGV0ZS4KKworV2VkIERlYyAxMyAxOToxNjo1NyAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQUREUl9FWFBSKTogRW5zdXJlIG9wMCBpc24ndCBRVUVVRUQuCisKK1dlZCBEZWMgMTMgMTk6MTI6MjEgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGdjYy5jIChteV9zdHJlcnJvcik6IFJldHVybiAiY2Fubm90IGFjY2VzcyIgaWYgZXJybm8gaXMgMC4KKwkocGVycm9yX3dpdGhfbmFtZSwgcGZhdGFsX3dpdGhfbmFtZSwgcGVycm9yX2V4ZWMpOiBEb24ndCBhc3N1bWUgdGhhdAorCXRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIG15X3N0cmVycm9yIGNvbnRhaW5zIG5vICclJ3MuCisJKHN5c19uZXJyKTogRGVjbGFyZSBvbmx5IGlmIEhBVkVfU1RSRVJST1IgaXMgbm90IGRlZmluZWQuCisKK1dlZCBEZWMgMTMgMTk6MDU6NDcgMTk5NSAgQWxhbiBNb2RyYSAgKGFsYW5Ac3ByaS5sZXZlbHMudW5pc2EuZWR1LmF1KQorCisJKiBNYWtlZmlsZS5pbiAoYy1wYXJzZS55LCBvYmpjLXBhcnNlLnkpOiBBZGQgd2FybmluZyB0aGF0IGZpbGUgaXMKKwlhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KKworV2VkIERlYyAxMyAxNTo0MDozMCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGZ1bmN0aW9uLmMgKGlkZW50aWZ5X2Jsb2Nrcyk6IFN0YXJ0IHdpdGggYSBjaGFpbiBvZiBCTE9DS3MgdG8KKwltYXRjaCB0aGUgcmVzdCBvZiB0aGUgYmFja2VuZCAoZGJ4b3V0LmMpLCBpbnN0ZWFkIG9mIGp1c3Qgb25lCisJQkxPQ0suCisJKHJlb3JkZXJfYmxvY2tzKTogRGl0dG8uCisJKGFsbF9ibG9ja3MpOiBEaXR0by4KKworCSogc3RtdC5jIChmaW5kX2xvb3BfdHJlZV9ibG9ja3MpOiBQYXNzIHRoZSB0b3BsZXZlbCBsaXN0IG9mCisJYmxvY2tzLCBub3QganVzdCB0aGUgZmlyc3Qgc3ViYmxvY2suCisKK1dlZCBEZWMgMTMgMTY6MTE6MTggMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBEb24ndCB1c2UgVEFSR0VUIGlmIGl0J3MgdGhlIHdyb25nIG1vZGUuCisKK1dlZCBEZWMgMTMgMTU6MDI6MzkgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBkYnhvdXQuYyAoc3RydWN0IHR5cGVpbmZvKTogRGVmaW5lLgorCSh0eXBldmVjKTogQ2hhbmdlIHRvIGJlIHN0cnVjdCB0eXBlaW5mbyAqLiAgQ2hhbmdlIG90aGVyIHVzZXMgYXMKKwlhcHByb3ByaWF0ZS4KKwkoc3RydWN0IGRieF9maWxlKTogRGVmaW5lIGlmIERCWF9VU0VfQklOQ0wuCisJKGN1cnJlbnRfZmlsZSk6IE5ldyBzdGF0aWMgdmFyaWFibGUgaWYgREJYX1VTRV9CSU5DTC4KKwkobmV4dF9maWxlX251bWJlcik6IExpa2V3aXNlLgorCShkYnhvdXRfaW5pdCk6IElmIERCWF9VU0VfQklOQ0wsIGluaXRpYWxpemUgbmV3IHZhcmlhYmxlcy4KKwkoZGJ4b3V0X3N0YXJ0X25ld19zb3VyY2VfZmlsZSk6IE5ldyBmdW5jdGlvbi4KKwkoZGJ4b3V0X3Jlc3VtZV9wcmV2aW91c19zb3VyY2VfZmlsZSk6IE5ldyBmdW5jdGlvbi4KKwkoZGJ4b3V0X3R5cGVfaW5kZXgpOiBOZXcgZnVuY3Rpb24uCisJKGRieG91dF9yYW5nZV90eXBlKTogVXNlIGRieG91dF90eXBlX2luZGV4LgorCShkYnhvdXRfdHlwZSk6IExpa2V3aXNlLiAgSWYgREJYX1VTRV9CSU5DTCwgaW5pdGlhbGl6ZSBuZXcgdHlwZXZlYworCWZpZWxkcy4KKwkqIGMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBJZiBEQlhfREVCVUdHSU5HX0lORk8gYW5kIHdyaXRlX3N5bWJvbHMKKwk9PSBEQlhfREVCVUcsIGNhbGwgZGJ4b3V0X3N0YXJ0X25ld19zb3VyY2VfZmlsZSBhbmQKKwlkYnhvdXRfcmVzdW1lX3ByZXZpb3VzX3NvdXJjZV9maWxlIHdoZW4gYXBwcm9wcmlhdGUuCisJKiBjb25maWcvc3BhcmMvc3Vub3M0LmggKERCWF9VU0VfQklOQ0wpOiBEZWZpbmUuCisJKiBjb25maWcvc3ZyNC5oIChEQlhfVVNFX0JJTkNMKTogRGVmaW5lLgorCitXZWQgRGVjIDEzIDA2OjUyOjQwIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAvd2luLW50LmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBEbyBub3QgZW1pdCAuZXh0ZXJuIGZvcgorCWJ1aWx0aW4gZnVuY3Rpb25zLgorCitUdWUgRGVjIDEyIDE1OjM3OjQ4IDE5OTUgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuYzogUmVwbGFjZSBtYW55IHVzZXMgb2YgZnByaW50ZiB3aXRoIHB1dGMgYW5kIGZwdXRzLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBVc2UgbW9yZSBlZmZpY2llbnQgbW5lbW9uaWNzLCB0YXJnZXQKKwlkZXBlbmRlbnQgbW5lbW9uaWNzLCBhc21fZnByaW50ZiwgYW5kIHJlZ19uYW1lcyBhcnJheS4KKworCSogcnM2MDAwLmg6IFJlcGxhY2UgbWFueSB1c2VzIG9mIGZwcmludGYgd2l0aCBwdXRjIGFuZCBmcHV0cy4KKworCSogcnM2MDAwLmggKElOVF9UWVBFX1NJWkUpOiBSZW1vdmUgVEFSR0VUXzY0QklUIGRlcGVuZGVuY3kuCisJKE1BWF9JTlRfVFlQRV9TSVpFKTogRGVsZXRlLgorCitUdWUgRGVjIDEyIDEzOjU4OjU3IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogaDgzMDAvdC1oODMwMCAoTVVMVElMSUJfe09QVElPTlMsRElSTkFNRVN9KTogQWRkIC1taW50MzIgc3VwcG9ydC4KKworU3VuIERlYyAxMCAxODo1MToyMSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbm9pc3kudG1nLnNlPgorCisJKiByczYwMDAubWQgKG1hdGNoZXIgZm9yIG5lZzpTSSAoZ2V1OlNJIC4uKSk6IEdldCBwcGMgc3ludGF4IHJpZ2h0LgorCitTdW4gRGVjIDEwIDA4OjQ3OjE2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfaWZfdGhlbl9lbHNlKTogQ29udmVydCAiYSA9PSBiID8gYiA6IGEiIHRvICJhIi4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUik6IElmIFRSRUVfUkVBRE9OTFksCisJc2V0IFJUWF9VTkNIQU5HSU5HX1AgaW4gVEFSR0VULgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogSWYgcmVzdWx0IGlzIEJMS21vZGUsCisJdXNlIHRoYXQgdG8gYWNjZXNzIG9iamVjdCB0b28uCisKK1N1biBEZWMgMTAgMDE6MDY6NTcgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogcGEubWQgKG1pbGxpY29kZSBkZWxheSBzbG90IGRlc2NyaXB0aW9uKTogUmVtb3ZlIHJlZmVyZW5jZQorCXRvIGRlZnVuY3QgVEFSR0VUX01JTExJQ09ERV9MT05HX0NBTExTLgorCitTYXQgRGVjICA5IDE4OjA1OjAzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBJTkRJUkVDVF9SRUYpOiBDb3JyZWN0IHR5cG8gaW4gTWF5IDgKKwljaGFuZ2UuCisKKwkqIHNoLmggKEFERFJFU1NfQ09TVCk6IERlZmluZS4KKwkqIHNoLm1kIChzdWJzaTMpOiBSZW5hbWUgdG8gc3Vic2kzX2ludGVybmFsLiAgQWRkIG5ldyBkZWZpbmVfZXhwYW5kCisJdG8gaGFuZGxlIHN1YnRyYWN0aW5nIGEgcmVnaXN0ZXIgZnJvbSBhIGNvbnN0YW50LgorCitGcmkgRGVjICA4IDE5OjE3OjMwIDE5OTUgIE1pa2UgTWVpc3NuZXIgIDxtZWlzc25lckBiZWF1dHkuY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3JzNjAwMC5jIChpbnB1dF9vcGVyYW5kKTogQWxsb3cgYW55IGludGVnZXIgY29uc3RhbnQsIG5vdAorCWp1c3QgaW50ZWdlcnMgdGhhdCBmaXQgaW4gMSBpbnN0cnVjdGlvbi4KKworRnJpIERlYyAgOCAxMDo0NTowNyAxOTk1ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGFybS9saWIxZnVuY3MuYXNtIChSRVQsIFJFVENPTkQpOiBEZWZpbmUgYWNjb3JkaW5nIHRvIHdoZXRoZXIgd2UKKwlhcmUgY29tcGlsaW5nIGZvciAzMiBvciAyNiBiaXQgbW9kZS4KKwkoYWxsIHJldHVybiBpbnN0cnVjdGlvbnMpOiBVc2UgUkVUIG9yIFJFVENPTkQgYXMgYXBwcm9wcmlhdGUuCisKK1dlZCBEZWMgIDYgMDY6NTg6MjMgMTk5NSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBhcm0uYyAoYXJtX2dlbl9jb25zdGFudCk6IE5ldyBmdW5jdGlvbi4KKwkoYXJtX3NwbGl0X2NvbnN0YW50KTogU3BsaXQgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBpbnRvCisJYXJtX2dlbl9jb25zdGFudC4gIFRyeSB0byBkZWNpZGUgd2hpY2ggd2F5IG9mIGhhbmRsaW5nIHRoZSBjb25zdGFudAorCWlzIG9wdGltYWwgZm9yIHRoZSB0YXJnZXQgcHJvY2Vzc29yLgorCisJKiBhcm0uYyAoYXJtX3ByZ21vZGUpOiBOZXcgZW51bS4KKwkodGFyZ2V0X3tjcHUsZnBlfV9uYW1lLCBhcm1fZmFzdF9tdWx0aXBseSwgYXJtX2FyY2g0KTogTmV3IHZhcmlhYmxlcy4KKwkoYWxsX3Byb2NzKTogTmV3IHRhYmxlIGRlc2NyaWJpbmcgcHJvY2Vzc29ycyBhbmQgY2FwYWJpbGl0aWVzLgorCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IE5ldyBmdW5jdGlvbi4KKwkoYXJtX3JldHVybl9pbl9tZW1vcnkpOiBOZXcgZnVuY3Rpb24uCisJKGFybV9ydHhfY29zdHMpOiBBZGp1c3QgdGhlIG11bHRpcGx5IGNvc3RzIHRvIGNvcGUgd2l0aCBwcm9jZXNzb3JzCisJd2l0aCBmYXN0IG11bHRpcGxpY2F0aW9uIGluc3RydWN0aW9ucy4KKwkob3V0cHV0X21vdmVfZG91YmxlKTogVXNlIHRoZSBsZG0vc3RtIHZhcmlhbnRzIG1vcmUgZWZmaWNpZW50bHkuCisJRGVsZXRlIGNhc2VzIHRoYXQgY2FuIG5vLWxvbmdlciBvY2N1ci4KKwkob3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbiwgb3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBVc2UgVEFSR0VUX0FQQ1NfMzIsCisJbm90IFRBUkdFVF82IGZvciBkZXRlcm1pbmluZyB0aGUgdHlwZSBvZiByZXR1cm4gaW5zdHJ1Y3Rpb24gdG8gZW1pdC4KKwkoZmluYWxfcHJlc2Nhbl9pbnNuIGNhc2UgQ0FMTF9JTlNOKTogVXNlIFRBUkdFVF9BUENTXzMyLCBub3QgVEFSR0VUXzYKKwl0byBkZXRlcm1pbmUgY29uZGl0aW9uIHByZXNlcnZhdGlvbi4KKwkqIGFybS5oIChDUFBfU1BFQyk6IEFkZCBkZWZpbmVzIGZvciB0aGUgY3B1IHR5cGUsIGhhcmQgb3Igc29mdCBmbG9hdGluZworCXBvaW50LCBhbmQgdGhlIEFQQ1MgUEMgc2l6ZS4KKwkoVEFSR0VUXyopOiBSZXN0cnVjdHVyZS4KKwkoQVJNX0ZMQUdfKik6IE1hbnkgbmV3IGRlZmluaXRpb25zIGZvciBkaWZmZXJlbnQgdGFyZ2V0IG9wdGlvbnMsIG5vdAorCWFsbCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIHlldC4KKwkoVEFSR0VUX1NXSVRDSEVTKTogVXNlIHRoZSBBUk1fRkxBR18qIGRlZmluaXRpb25zIGluc3RlYWQgb2YgZXhwbGljaXQKKwludW1iZXJzLgorCShwcm9nX21vZGVfdHlwZSk6IE5ldyBlbnVtLgorCShmbG9hdGluZ19wb2ludF90eXBlKTogU3BsaXQgZW11bGF0ZWQgZmxvYXRpbmcgcG9pbnQgaW50byBGUF9TT0ZUWzIzXS4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IENhbGwgYXJtX292ZXJyaWRlX29wdGlvbnMuCisJKEFSTV9DUFVfTkFNRSk6IERlZmF1bHQgdG8gTlVMTCBpZiBub3QgZGVmaW5lZCBieSBhIHN1YnRhcmdldC4KKwkoQllURVNfQklHX0VORElBTik6IENhbiBub3cgYmUgc2V0IGFzIGEgY29tcGlsYXRpb24gb3B0aW9uLgorCShSRVRVUk5fSU5fTUVNT1JZLCBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogTmV3IGRlZmluaXRpb25zLgorCShHT19JRl9MRUdJVElNQVRFX09GRlNFVCk6IFVzZSBkaWZmZXJlbnQgSEltb2RlIG9mZnNldHMgaWYgY29tcGlsaW5nCisJZm9yIGFuIGFyY2hpdGVjdHVyZSA0IHRhcmdldC4gIFRoZSBvZmZzZXRzIGZvciBmbG9hdGluZyBwb2ludAorCWNvbnN0YW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGludGVnZXJzIGlmIGNvbXBpbGluZyBUQVJHRVRfU09GVF9GTE9BVC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogRG9uJ3QgYWxsb3cgUFJFX0lOQyBhbmQgUE9TVF9ERUMgaWYKKwl0aGUgc2l6ZSBpcyBtb3JlIHRoYW4gNCBieXRlcy4gIFJlc3RyaWN0IHRoZSByYW5nZSBvZmZzZXRzIGZvciBESW1vZGU7CisJbGlrZXdpc2UgZm9yIERGbW9kZSB3aGVuIFRBUkdFVF9TT0ZUX0ZMT0FULgorCShMRUdJVElNSVpFX0FERFJFU1MpOiBVc2Ugc3ltYm9sX21lbnRpb25lZF9wLCBub3QgTEVHSVRJTUFURV9DT05TVEFOVF9QCisJdG8gZGV0ZXJtaW5lIGlmIGEgY29uc3RhbnQgYWRkcmVzcyBtaWdodCBiZSBiZXR0ZXIgaW4gYSByZWdpc3Rlci4KKwlIYW5kbGUgREZtb2RlIGFkZHJlc3NlcyBpbiB0aGUgc2FtZSB3YXkgYXMgREltb2RlIGlmIFRBUkdFVF9TT0ZUX0ZMT0FULgorCShMT0FEX0VYVEVORF9PUCk6IElmIGFybV9hcmNoNCwgdGhlbiBISW1vZGUgYWxzbyB6ZXJvLWV4dGVuZHMuCisJKiBhcm0ubWQgKGF0dHJpYnV0ZXMpOiBSZWFycmFuZ2Ugb3JkZXIsIHNvIHRoYXQgY29uZGl0aW9uIGNsb2JiZXJpbmcKKwljYW4gYmUgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkIGZvciBjYWxsIGluc25zLgorCShhdHRyaWJ1dGUgY3B1KTogQWRkIG5ldyBjcHUgQVJNNy4KKwkoYXR0cmlidXRlIHR5cGUpOiBBZGQgbmV3IHR5cGUgTVVMVC4KKwkoYXR0cmlidXRlIHByb2dfbW9kZSk6IE5ldyBhdHRyaWJ1dGUuCisJKGF0dHJpYnV0ZSBjb25kcyk6IENsb2JiZXJpbmcgb2YgY2FsbCBpbnNucyBjYW4gbm93IGJlIGRldGVybWluZWQKKwl1c2luZyBwcm9nX21vZGUgYXR0cmlidXRlLgorCShmdW5jdGlvbiB1bml0cyAid3JpdGVfYnVmIiwgIndyaXRlX2Jsb2NrYWdlIik6IE1vZGVsIHRoZSB3cml0ZSBidWZmZXIKKwlhcyB0d28gZnVuY3Rpb24gdW5pdHMsIHNvIHRoYXQgY29uZmxpY3RzIGFyZSBhdm9pZGVkIG1vcmUgb2Z0ZW4uCisJKGZ1bmNpb24gdW5pdCAiY29yZSIpOiBOZXcgZnVuY3Rpb24gdW5pdCwgc28gdGhhdCBlbGFwc2VkIGN5Y2xlcyBjYW4KKwliZSBtb3JlIGFjY3VyYXRlbHkgZGV0ZXJtaW5lZC4KKwkoYWxsIGFub255bW91cyBwYXR0ZXJucyk6IEFkZCBuYW1lcy4KKwkobXVsc2lkaTMsIHVtdWxzaWRpMyk6IE5ldyBwYXR0ZXJucyBhdmFpbGFibGUgd2l0aCBmYXN0IG11bHRpcGx5CisJdmFyaWFudHMuCisJKGFsbCBjYWxsIGluc25zKTogVGhlIGNvbmRzIGF0dHJpYnV0ZSBpcyBub3cgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LgorCSh6ZXJvX2V4dGVuZGhpc2kpOiBFeHBhbmQgZm9yIGFyY2hpdGVjdHVyZSA0IHZhcmlhbnRzIGlmIGFwcHJvcHJpYXRlLgorCSgqemVyb19leHRlbmRoaXNpX2luc24pOiBOZXcgcGF0dGVybi4KKwkoZXh0ZW5kcWl7aGksc2l9LCBleHRlbmRoaXNpKTogRXhwYW5kIGZvciBhcmNoaXRlY3R1cmUgNCB2YXJpYW50cyBpZgorCWFwcHJvcHJpYXRlLgorCSgqZXh0ZW5kaGlzaV9pbnNuLCAqZXh0ZW5kcWloaSwgKmV4dGVuZHFpc2kpOiBOZXcgcGF0dGVybnMuCisJKHN0b3JlaGlfc2luZ2xlX29wKTogTmV3IGV4cGFuZC4KKwkobW92aGkpOiBIYW5kbGUgYXJjaGl0ZWN0dXJlIDQgZXhwYW5zaW9uLgorCSgqbW92aGlfaW5zbl9hcmNoNCk6IE5ldyBwYXR0ZXJuLgorCSgqbW92aGlfKik6IEFkanVzdCBhcHBsaWNhYmlsaXR5IGNvbmRpdGlvbnMgdG8gaGFuZGxlIGFyY2hpdGVjdHVyZSA0LgorCShyZWxvYWRfb3V0ZGYpOiBIYW5kbGUgcHJlL3Bvc3QgaW5jL2RlYyByZWxvYWRzLgorCSh0YWJsZWp1bXApOiBEZWxldGUuCisJKG1hdGNoZXIgZm9yIG9wdGltaXplZCB0YWJsZWp1bXApOiBkZWxldGUuCisJKGNhc2VzaSk6IE5ldyBleHBhbmQuCisJKGNhc2VzaV9pbnRlcm5hbCk6IE5ldyBwYXR0ZXJuLgorCSogc2VtaS5oIChFWElUX0JPRFkpOiBEZWxldGUuCisJKFRBUkdFVF9ERUZBVUxUKTogU2V0IHRvIEFSTV9GTEFHX0FQQ1NfMzIuCisJKENQUF9TUEVDKTogRGVmaW5lLgorCWFybS9jcm9zcy1mbG9hdC5oOiBOZXcgZmlsZSwgdXNlZCB3aGVuIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZXIuCisJKiB0LXNlbWk6IERvbid0IGRlZmluZSBpbmhpYml0X2xpYmMgd2hlbiBidWlsZGluZyBsaWJnY2MyLmEuCisJKENST1NTX0ZMT0FUX0gpOiBEZWZpbmUuCisKKwkqIGFybS5jCSh7c3ltYm9sLGxhYmVsfV9tZW50aW9uZWRfcCk6IE5ldyBmdW5jdGlvbnMuCisJKGFkZF9jb25zdGFudCwgZHVtcF90YWJsZSwgZml4aXQsIGZpbmRfYmFycmllciwgYnJva2VuX21vdmUpOiBOZXcKKwlzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29uc3RhbnQgc3BpbGxpbmcuCisJKGFybV9yZW9yZyk6IE5ldyBjb25zdGFudCBzcGlsbGluZyBwYXNzLCBmb3IgcHV0dGluZyB1bmhhbmRsYWJsZQorCWNvbnN0YW50cyBpbnRvIHRoZSBydGwgd2hlcmUgd2UgY2FuIGxvYWQgdGhlbSBlZmZpY2llbnRseS4KKwkob3V0cHV0X2xvYWRfc3ltYm9sKTogRGVsZXRlLgorCSogYXJtLmggKFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTKTogTm8gbmVlZCB0byBoYW5kbGUgZmxvYXRpbmcKKwlwb2ludCBjb25zdGFudHMgYW55IG1vcmUsIHNpbmNlIGFybV9yZW9yZyB3aWxsIGRlYWwgd2l0aCB0aGVtLgorCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBJcyBub3cgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYQorCUxBQkVMLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBSZWNvZ25pemUgYWRkcmVzcyBleHByZXNzaW9ucyBnZW5lcmF0ZWQKKwlieSBhcm1fcmVvcmcsIGJ1dCBvbmx5IGFmdGVyIHJlbG9hZCBoYXMgY29tcGxldGVkLgorCShNQUNISU5FX0RFUEVOREVOVF9SRU9SRyk6IERlZmluZS4KKwkoQVNNX09VVFBVVF9TUEVDSUFMX1BPT0xfRU5UUlkpOiBUaGVyZSBzaG91bGQgYmUgbm90aGluZyBsZWZ0IGluCisJdGhlIHBvb2wsIGV2ZW4gaWYgaXQgbWlnaHQgbG9vayBsaWtlIGl0LgorCSogYXJtLm1kICgqbW92c2lfaW5zbik6IE11Y2ggc2ltcGlmaWVkIG5vdyB0aGF0IGNvbnN0YW50cyBhcmUgaGFuZGxlZAorCXByb3Blcmx5LgorCShtb3ZhZGRyKTogTmV3IGV4cGFuZC4KKwkobW92c2YsIG1vdmRmKTogTm8gbmVlZCB0byBmb3JjZSBjb25zdGFudHMgaW50byB0aGUgcG9vbCBhbnkgbW9yZS4KKwkoKm1vdmRmX2hhcmRfaW5zbik6IE11Y2ggc2ltcGxpZmllZC4KKwkoY29uc3R0YWJsZV80LCBjb25zdHRhYmxlXzgsIGNvbnN0dGFibGVfZW5kLCBhbGlnbl80KTogTmV3IHBhdHRlcm5zCisJZm9yIHN1cHBvcnRpbmcgZW1iZWRkZWQgY29uc3RhbnRzLgorCisJKiBjb25maWd1cmU6IE5ldyB0YXJnZXQgYXJtLXNlbWktYW9mLgorCSogYXJtLmMgKHN0cmluZ3NfZnBhKTogVXNlIGEgZm9ybSB3aGljaCBpcyBjb21tb24gdG8gYm90aCBHQVMgYW5kCisJQVJNQVNNLgorCShvdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uLCBvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IENhbGwKKwlhc3NlbWJsZV9leHRlcm5hbF9saWJjYWxsLCBiZWZvcmUgdHJ5aW5nIHRvIGdlbmVyYXRlIGFuIGFib3J0IGNhbGwKKwlpbiB0aGUgYXNzZW1ibGVyLgorCShhcm1fYXNtX291dHB1dF9sYWJlbCk6IENhbGwgQVJNX09VVFBVVF9MQUJFTCwgcmF0aGVyIHRoYW4gYXNzdW1pbmcKKwl0aGF0IGxhYmVscyBhcmUgZm9sbG93ZWQgYnkgYSBjb2xvbi4KKwkoYW9mX3RleHRfc2VjdGlvbiwgYW9mX2FkZF9pbXBvcnQsIGFvZl9kZWxldGVfaW1wb3J0LAorCSBhb2ZfZHVtcF9pbXBvcnRzKTogTmV3IGZ1bmN0aW9ucyB0byBzdXBwb3J0IEFSTUFTTSBhc3NlbWJsZXIKKwlnZW5lcmF0aW9uLgorCSogYXJtL2FvdXQuaDogTmV3IGZpbGUuCisJKiBhcm0vYW9mLmg6IE5ldyBmaWxlLgorCSogYXJtLmggKG1vc3QgYXNzZW1ibGVyLXNwZWNpZmljIGRlZmluZXMpOiBNb3ZlIHRvIGFybS9hb3V0LmguCisJKENPTlNUQU5UX0FERFJFU1NfUCk6IENhbid0IGRpcmVjdGx5IGFjY2VzcyBjb25zdGFudCBzdHJpbmdzIHdoZW4KKwlnZW5lcmF0aW5nIGFzc2VtYmxlciBmb3IgQVJNQVNNLgorCShFTkNPREVfU0VDVElPTl9JTkZPKTogRG9uJ3QgZGVmaW5lIGlmIGdlbmVyYXRpbmcgQVJNQVNNIGFzc2VtYmxlci4KKwkoQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCk6IEdlbmVyYWxpemUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKKwl3aXRoIGFsbCB0YXJnZXRlZCBhc3NlbWJsZXJzLgorCShBU01fT1VUUFVUX0xBQkVMKTogQ2FsbCBhcm1fYXNtX291dHB1dF9sYWJlbC4KKwkqIHJpc2NpeC5oOiBJbmNsdWRlIGFybS9hb3V0LmgsIG5vdCBhcm0vYXJtLmguCisJKiByaXNjaXgxLTEuaDogTGlrZXdpc2UuCisJKiBzZW1pLmg6IExpa2V3aXNlLgorCSogYXJtL3NlbWlhb2YuaDogTmV3IGZpbGUuCisJKiBhcm0vdC1zZW1pYW9mOiBOZXcgZmlsZS4KKworTW9uIERlYyAgNCAyMjoxNzozNyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CisKKwkqIGdjYy5jIChMSUJHQ0NfU1BFQyk6IERvIGxpbmsgd2l0aCBsaWJnY2Mgd2hlbiAtc2hhcmVkLgorCSogYWxwaGEuaCAoTElCR0NDX1NQRUMpOiBSZW1vdmUuCisJKiBsaW51eC5oIChMSUJHQ0NfU1BFQyk6IFJlbW92ZS4KKwkqIHN2cjQuaCAoTElCR0NDX1NQRUMpOiBSZW1vdmUuCisJKiBpMzg2L3QtY3J0cGljIChUQVJHRVRfTElCR0NDMl9DRkxBR1MpOiBVc2UgLWZQSUMuCisJKiB0LXBhIChUQVJHRVRfTElCR0NDMl9DRkxBR1MpOiBVc2UgLWZQSUMuCisJKiBzcGFyYy90LXN1bm9zNDEgKFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyk6IFVzZSAtZlBJQy4KKwkqIHNwYXJjL3Qtc29sMiAoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogVXNlIC1mUElDLgorCSogY29uZmlndXJlIChpMzg2LWxpbnV4KTogVXNlIGkzODYvdC1jcnRwaWMuCisKKwkqIGkzODYveG0tc2NvLmg6ICNkZWZpbmUgTk9fU1lTX1NJR0xJU1QuCisKK01vbiBEZWMgIDQgMjE6MzA6MzcgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzaC9zaC5jIChzaGlmdGNvc3RzKTogRm9yIFNIMywgbWF4IGNvc3Qgb2YgYXJpdGhtZXRpYyByaWdodAorCXNoaWZ0IGlzIDMuCisJKGV4cGFuZF9hc2hpZnRydCk6IEZvciBTSDMsIGlmIHNoaWZ0IGNvc3QgaXMgbW9yZSB0aGFuIDMsIHRoZW4KKwljYWxsIGdlbl9hc2hyc2kzX2QgdG8gdXNlIHNoYWQgaW5zdHJ1Y3Rpb24uCisKK01vbiBEZWMgIDQgMTg6Mjk6MDggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgorCisJKiBjLWRlY2wuYyAoZmluaXNoX3N0cnVjdCk6IERvbid0IG1lc3Mgd2l0aCB0aGUgdHlwZSBvZiBiaXRmaWVsZHMuCisKK01vbiBEZWMgIDQgMTU6Mjg6MDIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3RvciwgcmVjb3JkKTogSWYgZmllbGQgaXMgUkVBRE9OTFksCisJc2V0IFJUWF9VTkNIQU5HSU5HX1AgaW4gVE9fUlRYLgorCitNb24gRGVjICA0IDEyOjU5OjMzIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlnL3NwYXJjL3Qtc29sMiAoQ1JUU1RVRkZfVF9DRkxBR1MpOiBVc2UgLWZQSUMKKwl1bmNvbmRpdGlvbmFsbHksIHNpbmNlIGJpbnV0aWxzIDIuNiBzdXBwb3J0cyBpdC4KKworU3VuIERlYyAgMyAyMDo1NTo0MyAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS5oIChBU01fT1VUUFVUX0ZVTkNUSU9OX1BSRUZJWCk6IEhhbmRsZSBhcmJpdHJhcnkgc2VjdGlvbnMuCisJKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRGVmaW5lLgorCitTYXQgRGVjICAyIDIyOjE5OjE2IDE5OTUgIEplZmZyZXkgQS4gTGF3ICAobGF3QGN5Z251cy5jb20pCisKKwkqIHBhLmg6IFJlcGxhY2UgbWFueSB1c2VzIG9mIGZwcmludGYgd2l0aCBmcHV0cy4KKwkqIHBhLmM6IExpa2V3aXNlLgorCSogcGEtcHJvLmg6IExpa2V3aXNlLgorCisJKiBwYS5oIChTRUNPTkRBUllfUkVMT0FEX0NMQVNTKTogRG9uJ3QgY2FsbCBzZWNvbmRhcnlfcmVsb2FkX2NsYXNzCisJdG8gaGFuZGxlIHRyaXZpYWwgY2FzZXMuCisJKiBwYS5jIChzZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogUmV3b3JrIHRvIGJlIG1vcmUgZWZmaWNpZW50LgorCitTYXQgRGVjICAyIDA3OjUyOjQ2IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3JzNjAwMC5tZCAobW92c2kpOiBEb24ndCBzcGxpdCBsYXJnZSBjb25zdGFudHMgaW4gdGhlCisJbW92c2kgcGF0dGVybiwgbGV0IHRoZSBkZWZpbmVfc3BsaXQgc3BsaXQgaXQgbGF0ZXIgYXMgbmVlZGVkLgorCitGcmkgRGVjICAxIDE2OjAwOjQyIDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CisKKwkqIHNwYXJjL3NwYXJjLmMgKG91dHB1dF9kb3VibGVfaW50KTogSGFuZGxlIENPREVfTEFCRUwncyBpZiB2OS4KKworRnJpIERlYyAgMSAwOToxMzoyMyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIG02OGsvbTY4ay5tZCAoZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyk6IFNwbGl0IGludG8gYQorCWRlZmluZV9leHBhbmQgYW5kIGFuIGFub255bW91cyBkZWZpbmVfaW5zbi4KKwkqIGZ4ODAvZng4MC5tZCAoZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyk6IERpdHRvLgorCSogbTg4ay9tODhrLm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvKTogRGl0dG8uCisKK1RodSBOb3YgMzAgMTU6MDI6MTYgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBzaC5jIChub25jYWxsX3VzZXNfcmVnKTogTmV3IGZ1bmN0aW9uLgorCShtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IEFkZCBzdXBwb3J0IGZvciBUQVJHRVRfUkVMQVguCisJKGZpbmFsX3ByZXNjYW5faW5zbik6IExpa2V3aXNlLgorCSogc2guaCAoQVNNX1NQRUMsIExJTktfU1BFQyk6IFBhc3Mgb24gLW1yZWxheC4KKwkoUkVMQVhfQklULCBUQVJHRVRfUkVMQVgpOiBOZXcgbWFjcm9zLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1yZWxheC4KKworCSogc2gvc2guYyAoaW5zbi1hdHRyLmgpOiBJbmNsdWRlLgorCShwcmFnbWFfbm9zYXZlX2xvd19yZWdzKTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KKwkoY2FsY19saXZlX3JlZ3MpOiBJZiBTSDMgYW5kIHByYWdtYV9ub3NhdmVfbG93X3JlZ3MsIHRoZW4gZG9uJ3QKKwlzYXZlIHJlZ2lzdGVycyByMCB0aHJvdWdoIHI3IGZvciBpbnRlcnJ1cHQgZnVuY3Rpb25zLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IENsZWFyIHByYWdtYV9ub3NhdmVfbG93X3JlZ3MuCisJKGhhbmRsZV9wcmFnbWEpOiBTZXQgcHJhZ21hX25vc2F2ZV9sb3dfcmVncyBpZiBzZWUgcHJhZ21hIGZvciBpdC4KKworCSogc2gvc2guaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBVc2UgdHJhcCAjMzMgaW5zdGVhZCBvZiB0cmFwICM1LgorCVB1dCBhZGRpdGlvbmFsIC5hbGlnbiBiZWZvcmUgdHJhcGEgaW5zdHJ1Y3Rpb24uCisKK1RodSBOb3YgMzAgMTQ6NDU6MTMgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KKworCSogc3BhcmMubWQgKHNlcWRpX3NwZWNpYWxfdHJ1bmMsIHNuZWRpX3NwZWNpYWxfdHJ1bmMsCisJc2Vxc2lfc3BlY2lhbF9leHRlbmQsIHNuZXNpX3NwZWNpYWxfZXh0ZW5kKTogRGVsZXRlIHVzZXMgb2YgU1VCUkVHLgorCU1ha2UgY29tcGFyZSBtb2RlcyBtYXRjaCBtb2RlcyBvZiBvcGVyYW5kcy4KKwkoc25lc2lfemVyb19leHRlbmQsIHNuZWRpX3plcm9fdHJ1bmNfc3AzMiwgc25lZGlfemVyb190cnVuY19zcDY0LAorCXNlcXNpX3plcm9fZXh0ZW5kLCBzZXFkaV96ZXJvX3RydW5jX3NwMzIsIHNlcWRpX3plcm9fdHJ1bmNfc3A2NCk6CisJTmV3IHBhdHRlcm5zLgorCitUaHUgTm92IDMwIDEyOjI3OjIyIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogZ2VubXVsdGlsaWI6IFRha2UgYSA0dGggYXJndW1lbnQgdGhhdCBzYXlzIGFyZSB0aGUgZXhjZXB0aW9ucyB0bworCXRoZSBtdWx0aWxpYnMsIHNvIGlsbGVnYWwgY29tYmluYXRpb25zIGNhbiBiZSBlbGltaW5hdGVkLgorCisJKiBNYWtlZmlsZS5pbiAobXVsdGlsaWIuaCk6IFBhc3MgJChNVUxJTElCX0VYQ0VQVElPTlMpIGFzIHRoZSA0dGgKKwlhcmd1bWVudCB0byBnZW5tdWx0aWxpYi4KKworCSogY29uZmlndXJlIChwb3dlcnBjKik6IFJlbW92ZSBsaXR0bGUgZW5kaWFuIGFuZCBlYWJpYWl4IHZlcnNpb25zCisJb2YgdGhlIHQtKiBmaWxlcy4gIEFjY2VwdCBwb3dlcnBjeyxsZX0tKi1zeXN2IGluIGFkZGl0aW9uIHRvCisJKi1zeXN2NC4KKwkocG93ZXJwY3ssbGV9LSotZWFiaXNpbSk6IFVzZSBzdGFuZGFyZCB0LWVhYmlnYXMgaW5zdGVhZCBvZgorCXQtZWFiaXNpbS4KKwkocG93ZXJwY2xlLSote3dpbm50MyxwZX0pOiBBZGQgc3VwcG9ydCBmb3IgV2luZG93cyBOVCBvbiBQb3dlclBDLgorCSogcnM2MDAwL3Qte2VhYmlhaXgsZWFiaXNpbSxlYWJpbGVnYXMscHBjbGVnYXN9OiBEZWxldGUuCisKKwkqIHJzNjAwMC97dC13aW5udCx3aW4tbnQuaH06IE5ldyBmaWxlcyBmb3IgUG93ZXJQQyBXaW5kb3dzIE5ULgorCisJKiBnaW5jbHVkZS9wcGMtYXNtLmg6IE5ldyBmaWxlIHRvIHByb3ZpZGUgY29tbW9uIG1hY3JvcyBmb3IgdGhlCisJdmFyaW91cyBQb3dlclBDIGNhbGxpbmcgc2VxdWVuY2VzLgorCSogcnM2MDAwL2VhYmkuYXNtOiBVc2UgcHBjLWFzbS5oLgorCisJKiByczYwMDAvYWl4M25ld2FzLmggKENQUF9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIC1tY3B1PTYwM2UsIDYwMiwKKwlhbmQgNjIwLgorCSogcnM2MDAwL3thaXg0MSxwb3dlcnBjLHJzNjAwMCxlYWJpe2FpeCxsZX19LmggKENQUF9TUEVDKTogRGl0dG8uCisJKiByczYwMDAvc3lzdjR7LGxlfS5oIChDUFBfU1BFQyk6IERpdHRvLgorCisJKiByczYwMDAvYWl4M25ld2FzLmggKExJTktfU1BFQyk6IElmIGNyb3NzIGNvbXBpbGluZywgZG9uJ3QgdXNlCisJYWJzb2x1dGUgcGF0aHMuCisJKiByczYwMDAve2FpeDQxLGFpeHBwYyxyczYwMDB9LmggKExJTktfU1BFQyk6IERpdHRvLgorCisJKiByczYwMDAvZWFiaS5oIChJTlZPS0VfX21haW4pOiBEb24ndCBkZWZpbmUgYW55IG1vcmUuCisJKEFTTV9PVVRQVVRfSU5UKTogTW92ZSB0byBzeXN2NC5oLgorCSh7U1RBUlRGSUxFLExJQn1fU1BFQyk6IElmIC1tc2ltIG9yIC1tbXZtZSBhZGQgdGhlIGFwcHJvcHJpYXRlCisJbGlicmFyaWVzLgorCisJKiByczYwMDAve2VhYmlhaXgsZWFiaWxlLHN5c3Y0eyxsZX19LmggKENQUF9TUEVDKTogQWRkIHN1cHBvcnQgZm9yCisJLW1jYWxsLXthaXhkZXNjLG50fSBkaXJlY3RpdmVzLgorCShNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZS4KKworCSogcnM2MDAwL2VhYml7LGxlfXNpbS5oIChUQVJHRVRfREVGQVVMVCwgQ1BQX1NQRUMpOiBObyBsb25nZXIKKwlkZWZpbmUsIHNpbXVsYXRvciBzdXBwb3J0cyBmbG9hdGluZyBwb2ludC4KKwkoe1NUQVJURklMRSxMSUJ9X1NQRUMpOiBJZiAtbXZtZSwgdXNlIG12bWUgbGlicmFyaWVzLCBub3QKKwlzaW11bGF0b3IgbGlicmFyaWVzLgorCisJKiByczYwMDAve21hY2gsbmV0d2FyZX0uaCAoVEFSR0VUX0FJWCk6IERlZmluZSBhcyAwLgorCisJKiByczYwMDAvbmV0d2FyZS5oIChSUzYwMDBfT1VUUFVUX0JBU0VOQU1FKTogRG9uJ3QgcmVkZWZpbmUKKwlhbnltb3JlLgorCShTVFJJUF9OQU1FX0VOQ09ESU5HKTogVW5kZWYuCisKKwkqIHJzNjAwMC9yczYwMDAuYyAocnM2MDAwX3NhdmVfdG9jX3AsIHJzNjAwMF9hYmkpOiBOZXcgZ2xvYmFscy4KKwkocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBBZGQgNjAyLCA2MDNlLCBhbmQgNjIwIHN1cHBvcnQuCisJKGNvdW50X3JlZ2lzdGVyX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJuIHRydWUgaWYgb3BlcmFuZAorCWlzIHRoZSBjb3VudCByZWdpc3Rlci4KKwkoZWFzeV9mcF9jb25zdGFudCk6IEFsbCBjb25zdGFudHMgYXJlIGVhc3kgaWYgLW1zb2Z0LWZsb2F0LgorCSh2b2xhdGlsZV9tZW1fb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSBpZiBvcGVyYW5kIGlzCisJaW4gdm9sYXRpbGUgbWVtb3J5LgorCSh7ZnBfLH1yZWdfb3JfbWVtX29wZXJhbmQpOiBDYWxsIHZvbGF0aWxlX21lbV9vcGVyYW5kLgorCShpbnB1dF9vcGVyYW5kKTogQWxsb3cgc3VwcG9ydCBmb3IgV2luZG93cyBOVCBsb2FkaW5nIFNZTUJPTF9SRUZzCisJYW5kIExBQkVMX1JFRnMgZnJvbSB0aGUgVE9DLgorCShmdW5jdGlvbl9hcmdfYm91bmRhcnkpOiBPbiBXaW5kb3dzIE5ULCBhbnkgYXJndW1lbnQgPj0gOCBieXRlcworCW11c3QgYmUgZG91YmxlIHdvcmQgYWxpZ25lZC4KKwkoZnVuY3Rpb25fYXJne19hZHZhbmNlLH0pOiBDYWxsIGZ1bmN0aW9uX2FyZ19ib3VuZGFyeSB0byBkZXRlcm1pbmUKKwlpZiB3ZSBuZWVkIHRvIGFsaWduIHRvIGFuIG9kZCByZWdpc3RlciBmb3IgbGFyZ2UgYXJndW1lbnRzLgorCUNoYW5nZXMgdG8gYWNjb21pZGF0ZSBuZXcgbWV0aG9kIG9mIGRldGVybWluaW5nIHdoaWNoIEFCSSB3ZSdyZQorCWFkaGVyaW5nIHRvLgorCShleHBhbmRfYmxvY2tfbW92ZV9tZW0pOiBDb3B5IFJUWF9VTkNIQU5HSU5HX1AsIGFuZCBpZgorCU1FTV9VTkFMSUdORURfUCBpcyBkZWZpbmVkLCBjb3B5IHRoYXQgdG9vLgorCShleHBhbmRfYmxvY2tfbW92ZSk6IENvcHkgZGVzdC9zcmMgdG8gcmVnaXN0ZXJzIHVzaW5nCisJY29weV9hZGRyX3RvX3JlZy4KKwkocHJpbnRfb3BlcmFuZCk6IENoYW5nZXMgdG8gYWNjb21pZGF0ZSBXaW5kb3dzIE5ULgorCShmaXJzdF9yZWdfdG9fc2F2ZSk6IERpdHRvLgorCShyczYwMDBfc3RhY2tfaW5mbyk6IERpdHRvLgorCShkZWJ1Z19zdGFja19pbmZvKTogRGl0dG8uCisJKG91dHB1dF97cHJvbG9nLGVwaWxvZyx0b2MsZnVuY3Rpb25fcHJvZmlsZXJ9KTogRGl0dG8uCisJKHJzNjAwMF9zdGFja19pbmZvKTogU2F2ZSBtYWluJ3MgYXJndW1lbnRzIGFyb3VuZCBfX2VhYmkgY2FsbC4KKwkoc3ZyNF90cmFjZWJhY2spOiBEZWxldGUsIGN1cnJlbnQgVi40IEFCSSBubyBsb25nZXIgd2FudHMKKwl0cmFjZWJhY2tzIGluIHRoaXMgZm9ybWF0LgorCShvdXRwdXRfcHJvbG9nKTogQ2FsbCBfX2VhYmkgaGVyZSwgc2F2aW5nIGFuZCByZXN0b3JpbmcgbWFpbidzCisJYXJncyBpZiBuZWVkZWQuICBTYXZlIHRoZSB0b2MgcG9pbnRlciBpZiBuZWVkZWQuCisJKGdldF9pc3N1ZV9yYXRlKTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiAjIG9mIGluc3RydWN0aW9ucyBhCisJbWFjaGluZSBjYW4gaXNzdWUgYXQgb25jZS4KKwkocnM2MDAwX3N5bmNfdHJhbXBvbGluZSk6IEVtaXQgaW5zdHJ1Y3Rpb25zIHRvIHN5bmNocm9uaXplIHRoZQorCVBvd2VyUEMgY2FjaGVzIGFmdGVyIGEgdHJhbXBvbGluZS4KKwkocnM2MDAwX3RyYW1wb2xpbmVfe3RlbXBsYXRlLHNpemV9KTogTmV3IGZ1bmN0aW9ucyB0byBwcm92aWRlCisJY29tbW9uIHRyYW1wb2xpbmUgc3VwcG9ydCBmb3IgYWxsIEFCSSdzLgorCShyczYwMDBfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogRGl0dG8uCisKKwkqIHJzNjAwMC9yczYwMDAuaCAoVEFSR0VUX3tXSU5ET1dTX05ULEFJWCxNQUNPU30pOiBEZWZpbmUuCisJKHByb2Nlc3Nvcl90eXBlKTogQWRkIDYwMi4KKwkoUFJPQ0VTU09SX0NPTU1PTik6IEFzc3VtZSB0aGUgY3VycmVudCBwcm9jZXNzb3IgaXMgYSA2MDQsIG5vdCBhCisJNjAxLgorCShTVUJUQVJHRVRfT1BUSU9OUyk6IERlZmluZSBpZiBub3QgZGVmaW5lZC4KKwkoVEFSR0VUX09QVElPTlMpOiBJbmNsdWRlIFNVQlRBUkdFVF9PUFRJT05TLgorCShDT1VOVF9SRUdJU1RFUl9SRUdOVU0pOiBEZWZpbmUgYXMgNjYuCisJKEVYVFJBX0NPTlRSQUlOVCk6IEFkZCAnUycgYW5kICdUJyBmb3IgV2luZG93cyBOVC4KKwkocnM2MDAwX2FiaSk6IEFkZCBBQklfQUlYX05PREVTQywgQUJJX05ULgorCShERUZBVUxUX0FCSSk6IERlZmluZSBpZiBub3QgZGVmaW5lZC4KKwkocnM2MDAwX3N0YWNrKTogQWRkIGZpZWxkcyBmb3IgV2luZG93cyBOVCBzdXBwb3J0LgorCShSUzYwMDBfU0FWRV9UT0MpOiBBZGQgZm9yIFdpbmRvd3MgTlQgc3VwcG9ydC4KKwkoRlVOQ1RJT05fQVJHX0JPVU5EQVJZKTogQ2FsbCBmdW5jdGlvbl9hcmdfYm91bmRhcnkuCisJKHRyYW1wb2xpbmUgbWFjcm9zKTogQ2FsbCB0cmFtcG9saW5lIGZ1bmN0aW9ucyBpbiByczYwMDAuYy4KKwkoUkVUVVJOX0FERFJFU1NfT0ZGU0VUKTogQWRkIFdpbmRvd3MgTlQgc3VwcG9ydC4KKwkodG9jX3NlY3Rpb24pOiBTa2lwIGxlYWRpbmcgJyonLgorCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgdm9sYXRpbGVfbWVtX29wZXJhbmQsCisJY291bnRfcmVnaXN0ZXJfb3BlcmFuZC4KKwkoTUFDSElORV9pc3N1ZV9yYXRlKTogRGVmaW5lLgorCShmdW5jdGlvbiBkZWNscyk6IEFkZCBuZXcgZnVuY3Rpb24gZGVjbHMgZnJvbSByczYwMDAuYy4KKworCSogcnM2MDAwL3JzNjAwMC5tZCAoY3B1IGF0dHJpYnV0ZSk6IEFkZCA2MDIuCisJKGZ1bmN0aW9uIHVuaXRzKTogVXBkYXRlIHRvIG1hdGNoIHJlYWxpdHkgYmV0dGVyLgorCShjYWxscyB0aHJvdWdoIHBvaW50ZXIpOiBSZXdvcmsgdG8gc3VwcG9ydCBXaW5kb3dzIE5ULgorCShtb3ZzaSk6IEFkZCBXaW5kb3dzIE5UIHN1cHBvcnQuCisJKG1vdnN0cnNpKTogUmVtb3ZlIG1hdGNoX29wZXJhbmQgcHJlZGljYXRlcywgc2luY2UKKwlleHBhbmRfYmxvY2tfbW92ZSBkb2VzIHRoZSBjaGVja2luZy4KKwkoc3luY19pc3luYyk6IERlbGV0ZS4KKwkoaWNiaSwgZGNic3QsIHN5bmMsIGlzeW5jKTogTmV3IGluc25zIHRvIGdlbmVyYXRlIHRoZSBuYW1lZAorCWluc3RydWN0aW9uIGZvciBtYWtpbmcgdHJhbXBvbGluZXMgb24gZWFiaS9WLjQgcHJvcGVybHkgZmx1c2ggdGhlCisJY2FjaGVzLgorCShkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IFJlbmFtZSBmcm9tCisJZGVjcmVtZW50X2FuZF9icmFuY2hzaS4gIEFkZCB1cGRhdGUgb2YgY291bnQgaW4gaW5zbiBwYXR0ZXJuLgorCisJKiByczYwMDAvc3lzdjQuaCAoVEFSR0VUX1NXSVRDSEVTKTogRHJvcCAtbXRyYWNlYmFjay4gIEtlZXAKKwktbW5vLXRyYWNlYmFjayBidXQgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdC4gIEFkZAorCS1tY2FsbHMte250LGFpeGRlc2N9LiAgQWRkIC1teyxuby19cmVsb2NhdGFibGUtbGliLiAgQWRkIC1tc2ltLAorCS1tbXZtZSwgYW5kIC1tZW1iLgorCShUQVJHRVRfVE9DKTogVXBkYXRlIGZvciB1c2Ugd2l0aCAtbWNhbGxzLXtudCxhaXhkZXNjfS4KKwkoU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMpOiBVcGRhdGUgZm9yIG5ldyBzd2l0Y2hlcy4KKwkoUlM2MDAwX09VVFBVVF9CQVNFTkFNRSk6IERlbGV0ZS4KKwkodG9jX3NlY3Rpb24pOiBBZGQgc3VwcG9ydCBmb3IgLW1jYWxsLXtudCxhaXhkZXNjfS4KKwkoQVNNX09VVFBVVF9TUEVDSUFMX1BPT0xfRU5UUllfUCk6IERpdHRvLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogVXNlIFNUUklQX05BTUVfRU5DT0RJTkcgaW5zdGVhZCBvZgorCVJTNjAwMF9PVVRQVVRfQkFTRU5BTUUuICBGb3IgLW1jYWxsLXtudCxhaXhkZXNjfSBlbWl0IHRoZSBwcm9wZXIKKwlmdW5jdGlvbiBkZXNjcmlwdG9yLgorCShBU01fU1BFQyk6IFBhc3MgYXBwcm9wcmlhdGUgLW14eHggc3dpdGNoZXMgdG8gdGhlIGFzc2VtYmxlciBiYXNlZAorCW9uIHRoZSAtbWNwdT14eHggb3B0aW9ucy4KKwkoQVNNX09VVFBVVF9JTlQpOiBNb3ZlIGhlcmUgZnJvbSBlYWJpLmguCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBJZiAtbWNhbGwte250LGFpeGRlc2N9IGFkZCBhcHByb3JpYXRlIG1hZ2ljCisJc28gZnVuY3Rpb24gbmFtZSBoYXMgdHdvIG9yIG9uZSBsZWFkaW5nIHBlcmlvZHMuCisJKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBEZWxldGUsIHVzZSB2ZXJzaW9uIGluIHN2cjQuaC4KKwkodHJhbXBvbGluZSBtYWNyb3MpOiBDYWxsIHRyYW1wb2xpbmUgZnVuY3Rpb25zIGluIHJzNjAwMC5jLgorCisJKiB0LXtlYWJpLHBwY317LGdhc30gKEVYVFJBX0hFQURFUlMpOiBBZGQgZ2luY2x1ZGUvcHBjLWFzbS5oLgorCShMSUIyRlVOQ1NfRVhUUkEpOiBEZXBlbmQgb24gZWFiaS5TLCBub3QgZWFiaS5zLgorCShlYWJpLlMpOiBSZW5hbWUgZnJvbSBlYWJpLmFzbS4KKworCSogdC17ZWFiaSxwcGN9Z2FzIChNVUxUSUxJQl8qKTogQWRkIC1tY2FsbC1haXhkZXNjIGxpYnJhcmllcywgYnV0CisJZG9uJ3QgYnVpbGQgZWl0aGVyIGxpdHRsZSBlbmRpYW4gb3IgLW1yZWxvY2F0YWJsZSB2ZXJzaW9ucyBvZgorCXRob3NlIGxpYnJhcmllcy4KKworVHVlIE5vdiAyOCAwMDoxMDoyNyAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLm1kIChkaXZzaTMpOiBSZW9yZGVyIHNvIGNvbW1vbiBtb2RlIGRvZXMgbm90IG5lZ2F0ZQorCXBvd2VyLW9mLTIgc2hpZnQgb3B0aW1pemF0aW9uLgorCitXZWQgTm92IDI5IDIyOjA2OjExIDE5OTUgIEouVC4gQ29ua2xpbiAgPGp0Y0BydGwuY3lnbnVzLmNvbT4KKworIAkqIGNvbmZpZ3VyZSAoc3BhcmMtKi1zb2xhcmlzMiopOiBBZGQgZ2NydDEubyB0byBleHRyYV9wYXJ0cy4KKyAJKiBzcGFyYy9zb2wyLmggKFNUQVJURklMRV9TUEVDKTogTGluayB3aXRoIGdjcnQxLm8gd2l0aCAtcGcuCisgCSogc3BhcmMvc29sMi1nMS5hc206IE5ldyBmaWxlLCBzdGFydHVwIGNvZGUgZm9yIHByb2ZpbGVkCisgIAlleGVjdXRhYmxlcy4KKyAJKiBzcGFyYy90LXNvbDI6IEFkZCBtYWtlIHJ1bGUgZm9yIGdjcnQxLm8uCisgCSogc3BhcmMvZ21vbi1zb2wyLmMgKF9tY2xlYW51cCk6IEFkZCBzdXBwb3J0IGZvciBQUk9GRElSCisgCWVudmlyb25tZW50IHZhcmlhYmxlLgorCitXZWQgTm92IDI5IDIxOjQxOjEzIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbWlwcy9hYmk2NC5oIChDUFBfU1BFQyk6IElmIC1tc2luZ2xlLWZsb2F0IGFuZCBub3QKKwktbXNvZnQtZmxvYXQsIHBhc3MgLURfX21pcHNfc2luZ2xlX2Zsb2F0LiAgTGlrZXdpc2UgZm9yIC1tNDY1MCBhbmQKKwlub3QgLW1zb2Z0LWZsb2F0LgorCSogbWlwcy9kZWMtYnNkLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBtaXBzL2RlYy1vc2YxLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBtaXBzL2VsZjY0LmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBtaXBzL2lyaXMzLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBtaXBzL2lyaXM1LmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBtaXBzL21pcHMuaCAoQ1BQX1NQRUMpOiBMaWtld2lzZS4KKwkqIG1pcHMvbmV0YnNkLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBtaXBzL29zZnJvc2UuaCAoQ1BQX1NQRUMpOiBMaWtld2lzZS4KKwkqIG1pcHMvdC1lY29mZiAoTVVMVElMSUJfT1BUSU9OUywgTVVMVElMSUJfRElSTkFNRVMsCisJTVVMVElMSUJfTUFUQ0hFUyk6IEFkZCAtbXNpbmdsZS1mbG9hdCBzdXBwb3J0LgorCitXZWQgTm92IDI5IDE3OjU3OjQ4IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKG1haW4pOiBJbnZva2UgT1BUSU1JWkFUSU9OX09QVElPTlMgYWZ0ZXIgdGFyZ2V0X2ZsYWdzCisJaGFzIGJlZW4gaW5pdGlhbGl6ZWQgc28gc2V0cyBvZiB0YXJnZXRfZmxhZ3MgYXJlbid0IGNsb2JiZXJlZC4KKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogUmVjb2duaXplIGM6XGZvbyBhcyBhYnNvbHV0ZSBwYXRoIG5hbWUgaW4gRE9TLgorCisJKiBzdnI0LmggKE1EX0VYRUNfUFJFRklYKTogRG9uJ3QgdXNlIGlmIGNyb3NzIGNvbXBpbGluZy4KKwkoTURfU1RBUlRGSUxFX1BSRUZJWCk6IExpa2V3aXNlLgorCShMSU5LX1NQRUMpOiBEb24ndCB1c2UgYWJzb2x1dGUgcGF0aCBuYW1lcyBpZiBjcm9zcyBjb21waWxpbmcuCisJKiBzdnIzLmggKExJQl9TUEVDKTogTGlrZXdpc2UuCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBGaXggdHlwb3MgaW4gdmVyc2lvbiBjYWxjdWxhdGlvbi4KKworV2VkIE5vdiAyOSAxNDowNjoxMyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNoLm1kIChhc2hyc2kzX2QpOiBVc2UgJTAgbm90ICUxIGluIG91dHB1dCBwYXR0ZXJuLgorCisJKiBzdnI0LmggKE1BWF9PRklMRV9BTElHTk1FTlQpOiBEZWZpbmUuCisKKwkqIG1pcHMvaXJpczUuaCAoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogRGVmaW5lLgorCShMSU5LX1NQRUMpOiBBZGQgcnBhdGguCisJKiBtaXBzL2lyaXM2LmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCisJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVncyk6IEZvciBoYXJkIHJlZ2lzdGVycywgdXNlIHJlZ25vK2oKKwlpbnN0ZWFkIG9mIGp1c3QgcmVnbm8gaW4gTUFSS19MSVZFX0FGVEVSIGFuZCBTRVRfSEFSRF9SRUdfQklUIGNhbGxzLgorCisJKiBjLWNvbW1vbi5jIChjb21iaW5lX3N0cmluZ3MpOiBBZGQgc3VwcG9ydCBmb3IgV0NIQVJfVFlQRSBhcyBzaG9ydC4KKworV2VkIE5vdiAyOSAxMzo1OTo1OCAxOTk1ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBtZW9seW9uLmhhbnNlLmRlKQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQWRkIG5ldyBwYXJhbXRlciBkaWZmZXJlbnRfYmluZGluZ19sZXZlbC4KKwlMb3RzIG9mIGNoYW5nZXMgdG8gdXNlIG5ldyBuZXcgcGFyYW1ldGVyLgorCShwdXNoZGVjbCk6IERlbGV0ZSB2YXJpYWJsZSBkZWNsYXJlZF9nbG9iYWwuICBOZXcgdmFyaWFibGUKKwlkaWZmZXJlbnRfYmluZGluZ19sZXZlbCBhbmQgY29kZSB0byBzZXQgaXQuICBNb3ZlIGV4dGVybi9zdGF0aWMKKwl3YXJuaW5nIGJlZm9yZSBkdXBsaWNhdGVfZGVjbHMgY2FsbC4gIERvbid0IGxldCBnbG9iYWwgdHlwZWRlZnMKKwljb25mbGljdCB3aXRoIG5lc3RlZCBleHRlcm4gZGVjbGFyYXRpb25zLiAgTW92ZSBvbGRnbG9iYWwgdGVzdAorCWluc2lkZSBjb2RlIGZvciBzZXR0aW5nIElERU5USUZJRVJfTElNQk9fVkFMVUUuCisJKGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWxfZ2xvYmFsKTogRGVsZXRlLgorCSogYy10cmVlLmggKG1lcmdlX2F0dHJpYnV0ZXMpOiBOZXcgZGVjbGFyYXRpb24uCisJKiBjLXR5cGVjay5jIChtZXJnZV9hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uLiAgTW92ZSBjb2RlIGZyb20KKwljb21tb25fdHlwZSB0byBoZXJlLgorCShjb21tb25fdHlwZSk6IENhbGwgbWVyZ2VfYXR0cmlidXRlcyBpbnN0ZWFkIG9mIGhhdmluZyBpbmxpbmUgY29kZS4KKwkqIGludGVncmF0ZS5jIChpbnRlZ3JhdGVfZGVjbF90cmVlKTogRGVsZXRlIHZhcmlhYmxlIG5ld2QuCisJQWx3YXlzIHNldCBERUNMX0FCU1RSQUNUX09SSUdJTiBiZWZvcmUgY2FsbGluZyBwdXNoZGVjbC4KKworVHVlIE5vdiAyOCAyMTo1NzowNCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIG1pcHMuYyAobWlwc19mdW5jdGlvbl92YWx1ZSk6IEFkZCBjaGVjayBmb3IgaSA+IDAgd2hlbiBkZWNpZGluZworCWlmIHN0cnVjdHVyZSBzaG91bGQgYmUgcmV0dXJuIGluIEZQIHJlZ2lzdGVycy4KKworVHVlIE5vdiAyOCAxMjo0Nzo1MiAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBwYS5tZCAoZGVmaW5lIHNwbGl0IGZvciAocGx1cyAocmVnKSAobGFyZ2VfY29uc3RhbnQpKTogVHJ5CisJYW5vdGhlciB3YXkgdG8gaGFuZGxlIHRoaXMgd2l0aCBvbmx5IDIgaW5zbnMuICBGcm9tIFRlZ2UuCisKK01vbiBOb3YgMjcgMDI6MDU6MTggMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KKworCSogbGliMWZ1bmNzLmFzbSwgcGEtcHJvLmgsIHQtcHJvLmgsIHhtLXBhcHJvLmg6IE5ldyBQQQorCXRhcmdldCBmaWxlcy4KKwkqIGNvbmZpZ3VyZSAoaHBwYSotKi1wcm8qKTogVXNlIG5ldyB0YXJnZXQgZmlsZXMuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQWx3YXlzIGNhbGwganVtcF9vcHRpbWl6ZQorCWF0IGxlYXN0IG9uY2UuCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBEb24ndCBsZXQgYXNzZW1ibGVfbmFtZSBjbG9iYmVyCisJdGhlIHZhbHVlIG9mIFRSRUVfU1lNQk9MX1JFRkVSRU5DRUQuCisKKwkqIHBhLWdocHV4OS5oIChMSU5LX1NQRUMpOiBQYXNzICIteiIgdG8gdGhlIGxpbmtlciB0byBlbmFibGUKKwl0cmFwIG9uIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBmb3IgcHJvZ3JhbXMgYnVpbHQgb24gaHB1eDkuCisJKiBwYS1ocHV4OS5oLCBwYTEtZ2hwdXg5LmgsIHBhMS1ocHV4OS5oOiBMaWtld2lzZS4KKworCSogcGEuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogTm8gbG9uZ2VyIG5lZWQgdG8ga2VlcAorCXRyYWNrIG9mIHRoZSB0b3RhbCBudW1iZXIgY29kZSBieXRlcyB3aGVuIFRBUkdFVF9HQVMgJiYKKwlub3QgVEFSR0VUX1BPUlRBQkxFX1JVTlRJTUUuCisJKiBwYS5oIChEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogVXNlIC5OU1VCU1BBIHdoZW4KKwlub3QgVEFSR0VUX1BPUlRBQkxFX1JVTlRJTUUuCisJKEFTTV9PVVRQVVRfRlVOQ1RJT05fUFJFRklYKTogRGVmaW5lLiAgUHJlZml4IGZ1bmN0aW9ucyB3aXRoCisJLk5TVUJTUEEgd2hlbiBUQVJHRVRfR0FTIGFuZCBub3QgVEFSR0VUX1BPUlRBQkxFX1JVTlRJTUUuCisKKwkqIHBhLm1kIChzeW1ib2xpYyBoaWdoIHBhdHRlcm5zKTogVXNlICdIJyB0byBwcmludCB0aGUgc3ltYm9saWMKKwlhZGRyZXNzIHNvIHRoYXQgdGhlIGNvbnN0YW50IHBhcnQgZ2V0cyByb3VuZGVkLgorCSogcGEuYyAocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSAnSCcgb3BlcmFuZCBmb3IgaGlnaCBwYXJ0IG9mIGEKKwlzeW1ib2xpYyBhZGRyZXNzIHdpdGggYSByb3VuZGVkIGNvbnN0YW50LgorCShvdXRwdXRfZ2xvYmFsX2FkZHJlc3MpOiBOZXcgYXJndW1lbnQgInJvdW5kZWRfY29uc3RhbnQiLiAgQWxsCisJY2FsbGVycyBjaGFuZ2VkIGFwcHJvcHJpYXRlbHkuCisKKwkqIHgtcGEtaHB1eCAoRklYUFJPVE9fREVGSU5FUyk6IEFkZCAtRF9IUFVYX1NPVVJDRS4KKworCSogcGEuaCAoQ1BQX1NQRUMpOiBPbmx5IHBhc3MgLURfSFBVWF9TT1VSQ0UgYW5kIC1EX0hJVVhfU09VUkNFIGlmCisJLWFuc2kgaXMgbm90IHByZXNlbnQuCisJKENQUF9QUkVERUZJTkVTKTogUmVtb3ZlIC1EX0hQVVhfU09VUkNFIGFuZC9vciAtRF9ISVVYX1NPVVJDRS4KKwkqIHBhLWdoaXV4LmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCisJKiBwYS1ndXg3LmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCisJKiBwYS1oaXV4LmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCisJKiBwYS1ocHV4LmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCisJKiBwYS1ocHV4Ny5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgorCSogcGExLWdoaXV4LmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCisJKiBwYTEtaGl1eC5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgorCisJKiBwYS1ocHV4LmggKExJTktfU1BFQyk6IElmIC1tbGlua2VyLW9wdCwgdGhlbiBwYXNzIC1PIHRvIHRoZQorCWxpbmtlci4KKwkqIHBhLWdocHV4LmgsIHBhLWhwdXg5LmgsIHBhLWdocHV4OS5oOiBMaWtld2lzZS4KKwkqIHBhMS1naHB1eDkuaCwgcGExLWhwdXg5Lmg6IExpa2V3aXNlLgorCSogcGEuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxpbmtlci1vcHQuCisKKwkqIHBhLm1kIChhbGwgcGVlcGhvbGVzKTogRGlzYWJsZSBpZiBUQVJHRVRfU09GVF9GTE9BVC4KKworCSogcGEuYyAocGFfcmVvcmcpOiBJZiBUQVJHRVRfR0FTLCB0aGVuIGVtaXQgaW5zbnMgdG8gbWFyaworCXRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgYnJhbmNoIHRhYmxlLgorCSogcGEubWQgKGJlZ2luX2JydGFiKTogTmV3IGluc24uICBKdXN0IGEgbWFya2VyIHNvIEdDQyBrbm93cworCXdoZXJlIHRvIHB1dCB0aGUgLmJlZ2luX2JydGFiIHBzZXVkby1vcC4KKwkoZW5kX2JydGFiKTogU2ltaWxhcmx5LgorCisJKiBwYS5oIChFWFRSQV9TRUNUSU9OUyk6IEFkZCBpbl9jdG9ycyBhbmQgaW5fZHRvcnMgaWYKKwlDVE9SU19TRUNUSU9OX0ZVTkNUSU9OIGlzIGRlZmluZWQuICBFbHNlIGRlZmluZSBkdW1teQorCXZlcnNpb25zIG9mIENUT1JTX1NFQ1RJT05fRlVOQ1RJT04gYW5kIERUT1JTX1NFQ1RJT05fRlVOQ1RJT04uCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogQWRkIENUT1JTX1NFQ1RJT05fRlVOQ1RJT04gYW5kCisJRFRPUlNfU0VDVElPTl9GVU5DVElPTi4KKworCSogcGEubWQ6IEFkZCBwZWVwaG9sZXMgdG8gaW1wcm92ZSBzcGlsbCBjb2RlIGdlbmVyYXRlZAorCWJ5IHJlbG9hZCB3aGVuIHdlIHJ1biBvdXQgb2YgRlAgcmVnaXN0ZXJzLgorCisJKiB4bS1wYS5oOiBSZW1vdmUgc3B1cmlvdXMgZG91YmxlLXF1b3RlLgorCisJKiBwYS5tZCAoY2FsbCBleHBhbmRlcnMpOiBGb3IgaW5kaXJlY3QgY2FsbHMsIGxvYWQgJXIyMiB3aXRoIHRoZQorCWZ1bmN0aW9uJ3MgYWRkcmVzcy4KKwkoaW5kaXJlY3QgY2FsbCBwYXR0ZXJucyk6IE5vIG5lZWQgdG8gY29weSB0aGUgY2FsbCBhZGRyZXNzIGludG8KKwklcjIyIGFueW1vcmUuCisKKwkqIHBhLmMgKG91dHB1dF9jYnJhbmNoKTogRml4IGJ1Z2xldCBpbiBsZW5ndGggaGFuZGxpbmcgb2YKKwliYWNrd2FyZHMgYnJhbmNoZXMgd2l0aCB1bmZpbGxlZCBkZWxheSBzbG90cy4KKwkob3V0cHV0X2JiLCBvdXRwdXRfYnZiLCBvdXRwdXRfZGJyYSwgb3V0cHV0X21vdmIpOiBMaWtld2lzZS4KKworCSogcGEubWQ6IEZpeCBvZmYtYnktb25lIGVycm9yIGluIGxlbmd0aCBjb21wdXRhdGlvbnMgZm9yIGFsbAorCWNvbmRpdGlvbmFsIGJyYW5jaCBwYXR0ZXJucy4KKworCSogcGEuaCAob3V0cHV0X2J2Yik6IERlY2xhcmUuCisJKiBwYS5jIChvdXRwdXRfYnZiKTogTmV3IGZ1bmN0aW9uIHRvIG91dHB1dCBicmFuY2ggb24gdmFyaWFibGUKKwliaXQgaW5zbnMuCisJKiBwYS5tZCAoYnJhbmNoLW9uLXZhcmlhYmxlLWJpdCk6IE5ldyBwYXR0ZXJucy4KKworCSogcGEuaCAoVEFSR0VUX01JTExJQ09ERV9MT05HX0NBTExTKTogRGVsZXRlIHN3dGljaCBhbmQgYWxsCisJcmVmZXJlbmNlcy4KKwkob3V0cHV0X21pbGxpY29kZV9jYWxsKTogRGVjbGFyZSBuZXcgZnVuY3Rpb24KKwkqIHBhLm1kIChtaWxsaWNvZGUgY2FsbHMpOiBVcGRhdGUgbGVuZ3RoIGNvbXB1dGF0aW9uIHRvIGhhbmRsZQorCXZhcmlhYmxlIGxlbmd0aCBtaWxsaWNvZGUgY2FsbHMuCisJKGNhbGwgcGF0dG5lcnMpOiBMaWtld2lzZS4KKwkoaW5kaXJlY3QgY2FsbCBwYXR0ZXJucyk6IFVwZGF0ZSBsZW5ndGggY29tcHVhdGlvbnMgYW5kIG91dHB1dAorCXRlbXBsYXRlcyB0byBoYW5kbGUgdmFyaWFibGUgbGVuZ3RoIG1pbGxpY29kZSBjYWxscy4KKwkocGxhYmVsX2RlcmVmZXJlbmNlKTogTGlrZXdpc2UuCisJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogR2l2ZSB3YXJuaW5ncyB3aGVuIGluY29tcGF0YWJsZQorCW9wdGlvbnMgYXJlIHVzZWQuCisJKG91dHB1dF9tdWxfaW5zbik6IENhbGwgb3V0cHV0X21pbGxpY29kZV9jYWxsIGluc3RlYWQgb2YKKwlvdXRwdXRfY2FsbCwgZWxpbWluYXRlIGxhc3QgYXJndW1lbnQgdG8gb3V0cHV0X21pbGxpY29kZV9jYWxsLgorCShvdXRwdXRfZGl2X2luc24pOiBMaWtld2lzZS4KKwkob3V0cHV0X21vZF9pbnNuKTogTGlrZXdpc2UuCisJKG91dHB1dF9jYWxsKTogUmV3cml0ZSBsb25nIGNhbGwgY29kZSB0byBoYW5kbGUgdmFyaWFibGUgbGVuZ3RoCisJbWlsbGljb2RlIGNhbGxzLiAgRWxpbWluYXRlIHN1cHBvcnQgZm9yIGNhbGxpbmcgbXVsLCBkaXYgYW5kIG1vZAorCW1pbGxpY29kZSByb3V0aW5lcy4KKwkob3V0cHV0X21pbGxpY29kZV9jYWxsKTogTmV3IGZ1bmN0aW9uIGZvciBjYWxsaW5nIG11bCwgZGl2IGFuZCBtb2QKKwltaWxsaWNvZGUgcm91dGluZXMuCisKKwkqIHBhLm1kIChhYnNzaTIpOiBOZXcgcGF0dGVybi4KKworCSogcGEuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IExvYWRzIGZyb20gcmVnK2QgYWRkcmVzc2VzIGludG8KKwlGUCByZWdpc3RlcnMgZG9uJ3QgbmVlZCBzZWNvbmRhcnkgcmVsb2Fkcy4KKwkqIHBhLmg6IERlbGV0ZSBzb2VtICNpZiAwIGNvZGUuICBVcGRhdGUgc29tZSBjb21tZW50cy4KKwkoRVhUUkFfQ09OU1RSQUlOVCwgY2FzZSAnUScpOiBPbmx5IGFjY2VwdCB2YWxpZCBtZW1vcnkgYWRkcmVzc2VzLgorCisJKiBwYS5oIChSVFhfQ09TVFMpOiBUZWdlJ3MgcmV3cml0ZS4KKworCSogcGEuYyAoaHBwYV9sZWdpdGltaXplX2FkZHJlc3MpOiBHZW5lcmF0ZSB1bnNjYWxlZCBpbmRleGVkCisJYWRkcmVzc2luZyBmb3IgKHBsdXMgKHN5bWJvbF9yZWYpIChyZWcpKS4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogU2V0IFJFR05PX1BPSU5URVJfRkxBRyBhcHByb3ByaWF0ZWx5CisJdG8gZW5jb3VyYWdlIHVuc2NhbGVkIGluZGV4aW5nIG1vZGVzLgorCShiYXNlcmVnX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24gZm9yIHVuc2NhbGVkIGluZGV4IGFkZHJlc3Mgc3VwcG9ydC4KKwkqIHBhLm1kICh1bnNjYWxlZCBpbmRleGluZyBwYXR0ZXJucyk6IE5ldyBwYXR0ZXJucyBmb3IgdW5zY2FsZWQKKwlpbmRleCBhZGRyZXNzIHN1cHBvcnQuCisKKwkqIHBhLmggKE1PVkVfUkFUSU8pOiBEZWZpbmUuCisJKiBwYS5tZCAobW92c3Ryc2kgZXhwYW5kZXIpOiBSZWZpbmUgdGVzdHMgZm9yIHdoZW4gdG8gdXNlIHRoZQorCWxpYnJhcnkgcm91dGluZSBpbnN0ZWFkIG9mIGFuIGlubGluZWQgbG9vcCBjb3B5LiAgUHJvdmlkZSBhbgorCWFkZGl0aW9uYWwgc2NyYXRjaCByZWdpc3RlciBmb3IgdXNlIGluIHRoZSBpbmxpbmVkIGxvb3AgY29weS4KKwkobW92c3Ryc2lfaW50ZXJuYWwpOiBOYW1lIHRoZSBwYXR0ZXJuIGZvciBlYXNlIG9mIHVzZS4gIEFkZAorCWFkZGl0aW9uYWwgc2NyYXRjaCByZWdpc3Rlci4KKwkqIHBhLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogR3JlYXRseSBzaW1wbGlmeS4gIFVzZSAyWCB1bnJvbGxlZAorCWNvcHkgbG9vcHMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KKwkoY29tcHV0ZV9tb3ZzdHJzaV9sZW5ndGgpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisKKwkqIHBhLmMgKHByaW50X29wZXJhbmQpOiBIYW5kbGUgJ3knIGNhc2UgZm9yIHJldmVyc2VkIEZQCisJY29tcGFyaXNvbnMuICBEZWxldGUgc29tZSAjaWYgMCBjb2RlLiAgRml4IHZhcmlvdXMgY29tbWVudCB0eXBvcy4KKwkqIHBhLm1kIChmY21wIHBhdHRlcm5zKTogVHJ5IGFuZCByZXZlcnNlIHRoZSBjb21wYXJpc29uIHRvIGF2b2lkCisJdXNlbGVzcyBhZGQsdHIgaW5zbnMuCisKK1N1biBOb3YgMjYgMTQ6NDc6NDIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogVmVyc2lvbiAyLjcuMiByZWxlYXNlZC4KKworCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfMSk6IE1ha2UgcHNldWRvIGZvciBERVNUCisJaW4gUFJPTU9URURfTU9ERSB1bmxlc3MgaW4gYSBTVUJSRUcuCisKKwkqIGNzZS5jIChpbnNlcnQpOiBEb24ndCBwdXQgYSBSRUcgaW50byBxdHlfY29uc3QuCisKKwkqIG1zZG9zL3RvcC5zZWQ6IENoYW5nZSB2ZXJzaW9uIHRvIDIuNy4yLgorCSogd2lubnQvY29uZmlnLW50LnNlZDogTGlrZXdpc2UuCisKK1N1biBOb3YgMjYgMTQ6NDE6NDkgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1vYmpsaXN0KTogQ2hhbmdlIC5vIHRvICRvYmpleHQuCisKKwkqIGFscGhhL3dpbi1udC5oIChDUFBfUFJFREVGSU5FUyk6IFNldCBfX3VuYWxpZ25lZCBhbmQgX19zdGRjYWxsCisJdG8gbnVsbC4KKwkoQVNNX1NQRUMpOiBBZGQgYSB0cmFuc2xhdGlvbiBmb3IgLWcgdG8gLVppLgorCSogd2lubnQvbGQuYyAobWFpbik6IERvbid0IHBhc3MgLWcgdG8gbGluay4KKwkqIHdpbm50L29sZG5hbWVzLmM6IFJlZm9ybWF0IGFuZCBhZGQgc29tZSBuZXcgZnVuY3Rpb25zIGZvciBnbmF0MS4KKwkqIHdpbm50L3dpbi1udC5oIChMSU5LX1NQRUMpOiBQYXNzIC1nIHRvIGxkLmV4ZS4KKwlJbmNyZWFzZSBkZWZhdWx0IHN0YWNrIHNpemUuCisJKiBjb25maWd1cmUgKHthbHBoYS1kZWMsaTM4Ni1pYm19LXdpbm50My41KTogQWRkIG9sZG5hbWVzLm8KKwl0byBleHRyYV9vYmpzLgorCSogbGliZ2NjMi5jICh0cmFtcG9saW5lKTogQWRkIGdldHBhZ2VzaXplIGFuZCBtcHJvdGVjdCBmb3IgV0lOTlQuCisKK1N1biBOb3YgMjYgMTQ6MjU6MjYgMTk5NSAgVXdlIFNlaW1ldCAgKHNlaW1ldEBjaGVtaWUudW5pLWtsLmRlKQorCisJKiBhdGFyaS5oIChGVU5DVElPTl9WQUxVRSk6IERlbGV0ZWQ7IGluY29ycmVjdC4KKworU3VuIE5vdiAyNiAxNDoyMzowMyAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIGZpeGluY2x1ZGVzIChjdXJzZXMuaCk6IEFsbG93IHNwYWNlIG9yIHRhYiBhZnRlciBib29sIGtleXdvcmQsCisJaW5zdGVhZCBvZiB0YWIgb3IgdGFiLgorCitTdW4gTm92IDI2IDE0OjE0OjExIDE5OTUgIE9saXZlciBLZWxsb2dnICAob2xpdmVyLmtlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLm1kIChwYXR0ZXJuIGZvciBISW1vZGUgUFNITSk6IENvcnJlY3RlZC4KKwkodHJ1bmNoaXFpMiwgemVyb19leHRlbmRxaWhpMiwgZXh0ZW5kaGZ0cWYyKTogQ29ycmVjdGVkLgorCShwYXR0ZXJuIGZvciBtb3ZoaSBvZiBDT05TVF9JTlQgdG8gUkVHKTogQ29ycmVjdGVkLgorCShkaXZtb2RxaSBwYXR0ZXJuIGZvciBESVNOKTogQ29ycmVjdGVkLgorCShhbGwgc2hpZnQgcGF0dGVybnMpOiBDb3JyZWN0ZWQuCisKKwkqIDE3NTBhLmggKFJFR19PS19GT1JfSU5ERVhfUCwgUkVHX09LX0ZPUl9CQVNFX1ApOiBDb3JyZWN0ZWQuCisgCShBU01fT1VUUFVUX1tkYXRhdHlwZV0pOiBDb3JyZWN0ZWQgZGF0YWxibFtdLnNpemUgY29tcHV0YXRpb24KKwlmb3Igb3V0cHV0IG9mIGFycmF5cy4KKworU3VuIE5vdiAyNiAxNDowODo1NyAxOTk1ICBEYXZlIExvdmUgIDxkLmxvdmVAZGwuYWMudWs+CisKKwkqIG1pcHMvaXJpczUuaCAoTk9fSU1QTElDSVRfRVhURVJOX0MpOiBEZWZpbmUgdGhpcyBhZ2FpbiBzbworCXRoYXQgdW5pc3RkLmggZG9lc24ndCBnZXQgYmFkbHkgYGZpeGVkJyBmb3IgQysrLiAgbGliZysrIHdpbGwgbm93CisJYnVpbGQgd2l0aCB0aGlzIGRlZmluaXRpb24uCisKK1N1biBOb3YgMjYgMTQ6MDI6NDMgMTk5NSAgUm9iZXJ0IEUuIEJyb3duICAoYnJvd25AZ3JldHRpci5iaWJsaW90ZWNoLmNvbSkKKworCSogY29uZmlndXJlOiBCZXR0ZXIgd29ya2Fyb3VuZCBmb3IgTmV4dHN0ZXAgYnVnLgorCitTdW4gTm92IDI2IDEzOjU1OjA3IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBib3pvLm1hdGVtYXRpay5zdS5zZT4KKworCSogcnM2MDAwLm1kIChsb2FkX211bHRpcGxlIG1hdGNoZXIpOiBGaXggdHlwbyBpbiBvcGNvZGUuCisKK1N1biBOb3YgMjYgMTM6NTE6MDggMTk5NSAgTGVlIEl2ZXJzb24gIDxsZWVpQENhbmFkYS5BSS5TUkkuQ09NPgorCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbik6IE1vdmUgY2FsbCB0byBzZGJvdXRfYmVnaW5fZnVuY3Rpb24KKwliYWNrIHRvIGZpbmFsX3NjYW5faW5zbiBvbiBNSVBTIHN5c3RlbXMgc28gcGFyYW1ldGVyIGRlc2NyaXB0aW9ucyBhcmUKKwlyZWNvZ25pemVkLgorCitTdW4gTm92IDI2IDEzOjQzOjA2IDE5OTUgIERKIERlbG9yaWUgIChkakBkZWxvcmllLmNvbSkKKworCSogbXNkb3MvdG9wLnNlZDogRG9uJ3QgaW5zZXJ0ICJnbzMyIi4KKworU3VuIE5vdiAyNiAxMjowODoyMyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGNvbWJpbmUuYyAobm9uemVyb19iaXRzLCBjYXNlIFJFRyk6ICBQdXQgUE9JTlRFUlNfRVhURU5EX1VOU0lHTkVECisJY29kZSBiZWZvcmUgc3RhY2sgcG9pbnRlciBjb2RlLiAgUmV0dXJuIG5vbnplcm8gYXQgZW5kIG9mIHN0YWNrCisJcG9pbnRlciBjb2RlLgorCisJKiBzcGFyYy5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBIYW5kbGUgQ09OU1QgaW5zaWRlIFBMVVMuCisKKwkqIE1ha2VmaWxlLmluIChjcHBhbGxvYy5vKTogQWRkIGEgcnVsZSB0byBidWlsZCBpdC4KKworCSogYWxwaGEuYyAoYWxwaGFfZW1pdF9zZXRfY29uc3QpOiBEb24ndCBvdXRwdXQgU0ltb2RlIHNlcXVlbmNlcworCXRoYXQgcmVseSBvbiBpbnZpc2libGUgb3ZlcmZsb3cuICBTaWduIGV4dGVuZCBuZXcgd2hlbiBTSW1vZGUuCisJRG9uJ3QgcmVjdXIgaWYgbmV3ID09IGMuICBEb24ndCBhbGxvdyBzaGlmdCBvdXRzaWRlIG1vZGUuICBNYWtlCisJbG9naWNhbCByaWdodCBzaGlmdCBiZSB1bnNpZ25lZC4KKworU3VuIE5vdiAyNiAxMTozNzo1MCAxOTk1ICBBcm5lIEguIEp1dWwgIChhcm5lakBpZHQudW5pdC5ubykKKworCSogTWFrZWZpbGUuaW4gKGNvbXBhcmUqKTogQWRkICJ8fCB0cnVlIiB0byBhdm9pZCBzcHVyaW91cworCWZhaWx1cmUgbWVzc2FnZXMgZnJvbSBzb21lIHZlcnNpb25zIG9mIG1ha2UuCisKK1N1biBOb3YgMjYgMTE6MjA6MDkgMTk5NSAgRG1pdHJ5IEsuIEJ1dHNrb3kgIChidWNAc3R1LnNwYi5zdSkKKworCSogZXhwci5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBBZGQgZGVjbGFyYXRpb24uCisKK1N1biBOb3YgMTIgMTg6MDk6MzUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogVmVyc2lvbiAyLjcuMSByZWxlYXNlZC4KKworCSogZnVuY3Rpb24uYyAocHV0X3JlZ19pbnRvX3N0YWNrKTogTmV3IGFyZyB2b2xhdGlsZV9wLgorCShwdXRfdmFyX2ludG9fc3RhY2spOiBDYWxsIHdpdGggbmV3IGFyZy4KKworU2F0IE5vdiAxMSAwODoyNTozNCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIHJlbG9hZC5jIChvdXRwdXQuaCk6IEluY2x1ZGUgaXQuCisJKiBNYWtlZmlsZS5pbiAocmVsb2FkLm8pOiBBZGQgZGVwZW5kZW5jZSBvbiBvdXRwdXQuaC4KKworVGh1IE5vdiAgOSAxMToyNDoyMCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIG1pcHMuaCAoSEFSRF9SRUdOT19OUkVHUyk6IElmIEZQX1JFR19QLCBhbHdheXMgdXNlIFVOSVRTX1BFUl9GUFJFRworCXRvIGNhbGN1bGF0ZSBudW1iZXIgb2Ygd29yZHMgbmVlZGVkLgorCitUaHUgTm92ICA5IDExOjA0OjUwIDE5OTUgIE9saXZlciBLZWxsb2dnICAoT2xpdmVyLktlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLm1kIChjbXBoZik6IEFkZGQgQmFzZSBSZWcgd2l0aCBPZmZzZXQgYWRkcmVzcyBtb2RlIChMQixTVEIsLi4pCisJKG1vdnFpLG1vdmhpLG1vdmhmLGFkZHFpMyxhZGRoZjMsc3VicWkzLHN1YmhmMyxtdWxxaWhpMyk6IExpa2V3aXNlLgorCShtdWxoZjMsZGl2aGYzLGFuZHFpMyxpb3JxaTMpOiBMaWtld2lzZS4KKwkoZGVmaW5lX3BlZXBob2xlKTogUmVtb3ZlIHRoZSBCYXNlIG1vZGUgcGVlcGhvbGVzLiBSZXBsYWNlIHRoZQorCXNwZWNpYWwgYWRkcWkgZGVmaW5lX2luc24gZm9yICJMSU0gUmEsc3ltLFJiIiBieSBhIGRlZmluZV9wZWVwaG9sZS4KKwkoYXNobHFpMyk6IFRvb2sgb3V0IGZ1dGlsZSAwdGggYWx0ZXJuYXRpdmUuCisJKGxzaHJxaTMsIGxzaHJoaTMsIGFzaHJxaTMsIGFoc3JoaTMpOiBDb3JyZWN0IGNhc2Ugb2Ygbm9uLWNvbnN0YW50CisJc2hpZnQgY291bnQuCisKKwkqIDE3NTBhLmggKFJFR19BTExPQ19PUkRFUik6IERlZmluZS4KKwkoUkVHTk9fT0tfRk9SX0JBU0VfUCk6IEluY2x1ZGUgc3RhY2sgcG9pbnRlciBpbiB0ZXN0IGFnYWluc3QKKwlyZWdfcmVudW1iZXJbUkVHTk9dLgorCShBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBSZW1vdmUgYm9ndXMgYXNzZW1ibGVyIGNvbW1lbnQuCisKK1RodSBOb3YgIDkgMTE6MDE6MzMgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBUlJBWV9SRUYpOiBQcm9wZXJseSBjb252ZXJ0IHR5cGVzCisJb2YgaW5kZXgsIHNpemUsIGFuZCBtdWx0aXBsaWNhdGlvbi4KKworV2VkIE5vdiAgOCAwOTowMDoyMiAxOTk1ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGFybS5tZCAobW92KmNjX3ssc29mdF99aW5zbik6IFVzZSBtYXRjaF9vcGVyYXRvciB0byB0ZXN0IHRoZQorCWNvbXBhcmlzb24gYW5kIGNoZWNrIHRoYXQgdGhlIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyIGlzIHVzZWQuCisKK1dlZCBOb3YgIDggMDg6NDk6MzUgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgorCisJKiByczYwMDAvc3lzdjQuaCAoQVNNX09VVFBVVF97Q09OU1RSVUNUT1IsREVTVFJVQ1RPUn0pOiBVbmRlZiBiZWZvcmUKKwlpbmNsdWRpbmcgc3ZyNC5oLgorCitUdWUgTm92ICA3IDEwOjU4OjEyIDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBib3pvLm1hdGVtYXRpay5zdS5zZT4KKworCSogbTY4ay5tZCAoc3VieGYzKTogUHJvcGVybHkgbmFtZSBwYXR0ZXJuLgorCitUdWUgTm92ICA3IDEwOjUzOjA5IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogbGliZ2NjMi5jIChfX3tDLER9VE9SX0xJU1QpOiBGb3IgQUlYLCBpbml0aWFsaXplIHRoZXNlIGFycmF5cyB0bworCTAsMCwganVzdCBsaWtlIE5lWFQgdG8gYXZvaWQgYSB3YXJuaW5nIG1lc3NhZ2UgZnJvbSB0aGUgQUlYIDQuMQorCWxpbmtlci4KKworVHVlIE5vdiAgNyAwOTo1ODozNCAxOTk1ICBKb2huIEYuIENhcnIgPGpmY0BtaXQuZWR1PgorCisJKiBjcHBleHAuYyAoY3BwX2xleCk6IENvcnJlY3RseSBwYXJzZSBjaGFyYWN0ZXIgY29uc3RhbnRzLgorCitUdWUgTm92ICA3IDA5OjUyOjE1IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfe0RFUyxDT05TfVRSVUNUT1IpOiBEZWZpbmUuCisKK01vbiBOb3YgIDYgMTA6Mjc6MTUgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUpOiBGaXggdHlwby4KKworU3VuIE5vdiAgNSAxODozNzowMiAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYm96by5tYXRlbWF0aWsuc3Uuc2U+CisKKwkqIG02OGsubWQgKGNtcHhmKTogRG9uJ3QgY2FsbCBmb3JjZV9jb25zdF9tZW0sIGl0IGxvb3NlcyBmb3IgUElDOworCWdldCBwcmVkaWNhdGVzIHJpZ2h0IGluc3RlYWQuICBHZXQgcmlkIG9mIHNlcGFyYXRlIERFRklORV9FWFBBTkQuCisJKGFkZHhmMywgc3VieGYzLCBtdWx4ZjMsIGRpdnhmMyk6IExpa2V3aXNlLgorCShBbGwgWEZtb2RlIHBhdHRlcm5zKTogRGVsZXRlIGBGJyBhbmQgYEcnIGNvbnN0cmFpbnRzLgorCShhYnN4ZjIsIG5lZ3hmMik6IERlbGV0ZSBzcHVyaW91cyBjb25kaXRpb24gb24gVEFSR0VUX0ZQQS4KKworU3VuIE5vdiAgNSAxMTowNTo0NCAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIGZpeGluY2x1ZGVzIChtYWxsb2MuaCk6ICBGaXggcmV0dXJuIHR5cGUgb2Yge20scmV9YWxsb2MuCisKK1N1biBOb3YgIDUgMTE6MDI6MjYgMTk5NSAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworICAgICAgICAqIGNzZS5jIChpbnZhbGlkYXRlKTogRm9yIGEgcHNldWRvIHJlZ2lzdGVyLCBkbyBhIGxvb3AgdG8KKwlpbnZhbGlkYXRlIGFsbCB0YWJsZSBlbnRyaWVzLCBpcnJlc3BlY3RpdmUgb2YgbW9kZS4KKworU3VuIE5vdiAgNSAxMDo1Nzo0MyAxOTk1ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUpOiBQdXQgaW4gbGFzdCBjaGFuZ2UgcHJvcGVybHkuCisKK1N1biBOb3YgIDUgMTA6NTM6NDkgMTk5NSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQorCisJKiBwYS5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IE1ha2Ugc3VyZSBGUCByZWdzCisJZ2V0IGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgUEExLjAgdnMgUEExLjEgY29kZSBnZW5lcmF0aW9uCisJd2hlbiBUQVJHRVRfU09GVF9GTE9BVCBvciBUQVJHRVRfRElTQUJMRV9GUFJFR1MgaXMgb24uCisKK1N1biBOb3YgIDUgMTA6NDk6NDMgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBsaXNhLmN5Z251cy5jb20+CisKKwkqIGk5NjAuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogQWRkIGEgc2NyYXRjaCByZWdpc3RlciB0bworCW11bHRpLXJlZyBzdG9yZXMuCisJKGk5NjBfb3V0cHV0X21vdmVfe2RvdWJsZSxxdWFkfSk6IE5ldyBmdW5jdGlvbnMuCisJKGk5NjBfcHJpbnRfb3BlcmFuZCk6IEhhbmRsZSBuZXcgb3BlcmFuZCB0eXBlcyBFLCBGLgorCSogaTk2MC5tZCAobW92ZGkgbWF0Y2hlcnMpOiBSZXdyaXRlLgorCShzdG9yZV91bmFsaWduZWRfZGlfcmVnKTogTmV3IHBhdHRlcm4uCisJKG1vdnRpIG1hdGNoZXJzKTogUmV3cml0ZS4KKwkoc3RvcmVfdW5hbGlnbmVkX3RpX3JlZyk6IE5ldyBwYXR0ZXJuLgorCitTdW4gTm92ICA1IDEwOjQ1OjI0IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogbWlwcy5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZS4KKwkqIG1pcHMvZWxmNjQuaCwgbWlwcy9pcmlzNi5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZS4KKworU3VuIE5vdiAgNSAxMDo0MTo0OCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IERlbGV0ZSBhYm9ydCBmb3IgUkVMT0FEX09USEVSIGNhc2UgYWRkZWQKKwlpbiBsYXN0IGNoYW5nZS4KKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBGb3IgUkVMT0FEX09USEVSIG91dHB1dCByZWxvYWRzLAorCW91dHB1dCB0aGUgcmVsb2FkIGluc25zIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgcmVsb2Fkcy4KKworCSogc2gubWQgKG11bHNpZGkzLTEsIG11bHNpZGkzLCB1bXVsc2lkaTMtMSwgdW11bHNpZGkzKTogRW5hYmxlLgorCShzbXVsc2kzX2hpZ2hwYXJ0LTEsIHNtdWxzaTNfaGlnaHBhcnQpOiBOZXcgcGF0dGVybnMuCisJKHVtdWxzaTNfaGlnaHBhcnQtMSwgdW11bHNpM19oaWdocGFydCk6IExpa2V3aXNlLgorCShtb3ZkaS0xKTogQWRkIHIveCBjb25zdHJhaW50LgorCSogdC1zaCAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtMi4KKwkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgbTIuCisJKE1VTFRJTElCX01BVENIRVMpOiBEZWZpbmUuCisKKwkqIHNwYXJjLmggKFJUWF9DT1NUUywgY2FzZSBNVUxUKTogQ2hlY2sgZm9yIFRBUkdFVF9TUEFSQ0xJVEUuCisKKwkqIGFiaTY0LmgsIGVsZjY0LmggKENQUF9TUEVDKTogQWRkIC1FQiBhbmQgLUVMIHN1cHBvcnQuCisKK1NhdCBOb3YgIDQgMTA6MzY6MjYgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBzaC5tZCAoY2FzZXNpX3dvcmtlcik6IENoYW5nZSBjb25zdHJhaW50IGZyb20gPSB0byArLgorCisJKiBzdnI0LmggKEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFKTogRGVsZXRlLgorCShBU01fSURFTlRJRllfR0NDKTogT3V0cHV0IHN0YWIgaGVyZS4KKworU2F0IE5vdiAgNCAxMDozMjozNyAxOTk1ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KKworCSogY3BwbGliLmMgKGZpbmNsdWRlKTogU2V0IGN1cnJlbnQgaW5wdXQgcG9pbnRlciB3aGVuIGlucHV0CisJaXMgbm90IGEgcmVndWxhciBmaWxlLgorCisJKiBjcHBtYWluLmM6IERlZmluZSBwcm9nbmFtZSwgcmVxdWlyZWQgYnkgY3BwbGliLgorCitTdW4gT2N0IDI5IDA3OjQ4OjM2IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiB4Y29mZm91dC5oIChEQlhfRklOSVNIX1NZTUJPTCk6IERlYWwgd2l0aCBuYW1lcyBjcmVhdGVkIHZpYQorCXRoZSBfX2FzbV9fIGNvbnN0cnVjdCB0aGF0IHN0YXJ0IHdpdGggYSBsZWFkaW5nICcqJy4KKwkqIHhjb2Zmb3V0LmMgKHhjb2ZmX2RlY2xhcmVfZnVuY3Rpb24pOiBMaWtld2lzZS4KKworU3VuIE9jdCAyOSAwNzo0NTo0MSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbWFya19yZWZzKTogSGFuZGxlIFNVQlJFRyBvZiBwc2V1ZG8tcmVnIGluIGEKKwlTRVRfREVTVCBzYW1lIGFzIHdlIGhhbmRsZSBhIHBzZXVkby1yZWcgaW4gYSBTRVRfREVTVC4KKworU3VuIE9jdCAyOSAwNzo0MzoxNSAxOTk1ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KKworCSogbGliZ2NjMi5jIChMX2VoOiBfX3Vud2luZF9mdW5jdGlvbik6IEltcGxlbWVudCBmb3IgVkFYLgorCSogdmF4LmggKFJFVFVSTl9BRERSRVNTX09GRlNFVCwgUkVUVVJOX0FERFJfUlRYKTogRGVmaW5lLgorCitTdW4gT2N0IDI5IDEyOjM5OjA4IDE5OTUgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+YQorCisJKiBpMzg2L3NvbDIuaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgLURfX1NWUjQuCisKK1N1biBPY3QgMjkgMDc6MTQ6MzYgMTk5NSAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogQ2hlY2sgZm9yIG5vbnNhdmluZyBzZXRqbXAuCisKK0ZyaSBPY3QgMjcgMTU6MTU6NTYgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbiAob3V0X29iamVjdF9maWxlKTogRGVwZW5kIG9uIFRSRUVfSC4KKworRnJpIE9jdCAyNyAwNjo0MjozNiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jIChjYWxsX29wZXJhbmQpOiBPbmx5IGFsbG93IHJlZyAyNyBvbiBOVCB0b28uCisJKiBhbHBoYS5tZCAoY2FsbF92YWx1ZV9udCwgY2FsbF9udCk6IEZvcmNlIG5vbi1TWU1CT0xfUkVGCisJaW50byByZWcgMjcsIGp1c3QgbGlrZSBmb3IgT1NGLgorCisJKiByczYwMDAuYyAoc3RydWN0IGFzbV9vcHRpb24pOiBDaGFuZ2VkIGZyb20gc3RydWN0IG9wdGlvbi4KKwkoZXhwYW5kX2Jsb2NrX21vdmVfbWVtKTogUmVtb3ZlIGVycm9uZW91c2x5LWFkZGVkIGxpbmUuCisKKwkqIGV4cHIuYyAoY2xlYXJfc3RvcmFnZSk6IFNJWkUgaXMgbm93IHJ0eCwgbm90IGludC4KKwkoc3RvcmVfY29uc3RydWN0b3IpOiBDYWxsIGNsZWFyX3N0b3JhZ2Ugd2l0aCBydHguCisJKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBDb252ZXJ0IGluZGV4IHRvIHByZWNpc2lvbiBvZgorCXNpemV0eXBlLCBub3QgUE9JTlRFUl9TSVpFLgorCShleHBhbmRfZXhwciwgY2FzZSBBUlJBWV9SRUYpOiBMaWtld2lzZS4KKwkqIGV4cHIuaCAoY2xlYXJfc3RvcmFnZSk6IFNlY29uZCBhcmcgaXMgcnR4LCBub3QgaW50LgorCitGcmkgT2N0IDI3IDA1OjQ1OjU4IDE5OTUgIEoib3JuIFJlbm5lY2tlIChhbXlsYWFyQG1lb2x5b24uaGFuc2UuZGUpCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSwgY2FzZSBBU0hJRlRSVCk6IFByb3Blcmx5IGhhbmRsZQorCW1hc2sgd2lkZXIgdGhhbiBIT1NUX1dJREVfSU5ULgorCisgICAgICAgICogYy1kZWNsLmMgKHB1c2hkZWNsKTogRG9uJ3QgdGVzdCBUUkVFX1BVQkxJQyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIKKwl0byByZWdpc3RlciBhIGR1cGxpY2F0ZSBkZWNsIGluIHRoZSBjdXJyZW50IGJsb2NrLgorCitUaHUgT2N0IDI2IDIxOjU1OjM5IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBzZXRocmEuY3lnbnVzLmNvbT4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEb24ndCB0cnVzdCB0aGUgY2FsbGVlIHRvIGNvcHkgYQorIAlUUkVFX0FERFJFU1NBQkxFIHR5cGUuCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KKworVGh1IE9jdCAyNiAxOToyNTowNSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzIuYyAoX191bndpbmRfZnVuY3Rpb24pOiBQcm92aWRlIGEgZGVmYXVsdCBkZWZpbml0aW9uIGZvcgorCWltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0IHlldCBoYXZlIGEgZnVuY3Rpb24gdW53aW5kZXIuCisKK1RodSBPY3QgMjYgMTg6MDg6MTkgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IERvbid0IHRyZWF0IG5ld2xpbmUgYXMgd2hpdGUKKwlzcGFjZSB3aGVuIGNvYWxlc2Npbmcgd2hpdGUgc3BhY2UgYXJvdW5kIGEgYmFja3NsYXNoLW5ld2xpbmUuCisKK1RodSBPY3QgMjYgMTc6NTc6MzQgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBtaXBzLXRkdW1wLmMgKGVudW0gc3QpOiBEZWZpbmUgc3RfU3RydWN0LCBzdF9VbmlvbiwgYW5kIHN0X0VudW0uCisJKHN0X3RvX3N0cmluZyk6IEhhbmRsZSB0aGVtLgorCSh0eXBlX3RvX3N0cmluZyk6IEFkZCBmZHAgYXJndW1lbnQ7IHBhc3MgaXQgdG8gZW1pdF9hZ2dyZWdhdGUuCisJKHByaW50X3N5bWJvbCk6IEFkZCBmZHAgYXJndW1lbnQ7IHBhc3MgaXQgdG8gdHlwZV90b19zdHJpbmcuCisJSGFuZGxlIHN0X1N0cnVjdCwgc3RfVW5pb24sIGFuZCBzdF9FbnVtLgorCShlbWl0X2FnZ3JlZ2F0ZSk6IEFkZCBmZHAgYXJndW1lbnQuICBIYW5kbGUgb3BhcXVlIHR5cGVzLiAgTWFwCisJdGhyb3VnaCBSRkQgZW50cmllcy4KKwkocHJpbnRfZmlsZV9kZXNjKTogUGFzcyBGRFIgdG8gcHJpbnRfc3ltYm9sLgorCShtYWluKTogUGFzcyBudWxsIEZEUiB0byB0eXBlX3RvX3N0cmluZy4KKworVGh1IE9jdCAyNiAwODowNzoxMCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChwb3dlcnBjLWlibS1haXhbNDU2Nzg5XSopOiBVc2UgcnM2MDAwL3QtbmV3YXMsCisJbm90IHJzNjAwMC90LXJzNjAwMC4KKwkocnM2MDAwLWlibS1haXgzLjIuWzQ1Njc4OV0qKTogTGlrZXdpc2UuCisJKHJzNjAwMC1pYm0tYWl4WzQ1Njc4OV0qKTogTGlrZXdpc2UuCisKKwkqIHJzNjAwMC90LW5ld2FzOiBDb3B5IGZyb20gdC1yczYwMDAuCisJKiB0LXJzNjAwMDogRG9uJ3QgYnVpbGQgLW1jcHU9Y29tbW9uIG11bHRpbGliIHZhcmlhbnRzIG9mIGxpYmdjYy5hLgorCisJKiByczYwMDAubWQgKGxvYWRfbXVsdGlwbGUgaW5zbik6IElmIGFkZHJlc3MgcmVnaXN0ZXIgaXMgYW1vbmcgcmVncywKKwlkb24ndCBsb2FkIGl0IHdpdGggYSBsd3NpIGluc3RydWN0aW9uLCB3aGljaCBpcyB1bmRlZmluZWQgb24gUG93ZXJQQy4KKworVGh1IE9jdCAyNiAwODowMTozMiAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9jb21waWxlX3VuaXRfZGllKTogSGFuZGxlIGxhbmd1YWdlX3N0cmluZworCW9mICJHTlUgRjc3Ii4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogV2hlbiBjaGVjayBmb3Igb3V0IG9mIHJhbmdlIGNvbnN0YW50CisJcGx1cyByZWdpc3RlciwgYWNjZXB0IGFueSBoYXJkIHJlZ2lzdGVyIGluc3RlYWQgb2YganVzdCBmcCwgYXAsIHNwLgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBGb3IgT2N0IDE5IGNoYW5nZSwgYWRkIGFkZGl0aW9uYWwKKwljaGVjayB0byB2ZXJpZnkgdGhhdCBwbGFjZSBoYXMgYSB2YWxpZCBJTlNOX0NVSUQuCisKKwkqIHNwYXJjL3QtdnhzcGFyYyAoTElCR0NDMV9URVNUKTogRGVmaW5lLgorCisJKiBzaC5tZCAobmVnZGkyKTogVXNlIFRBUkdFVF9MSVRUTEVfRU5ESUFOLgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgQVNISUZUUlQpOiBWZXJpZnkgbW9kZSBiaXRzaXplIGlzCisJd2l0aGluIEhPU1RfQklUU19QRVJfV0lERV9JTlQgYmVmb3JlIHNoaWZ0aW5nIGJ5IGl0LgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBXaGVuIHJlY3VyIGZvciBpbnN0cnVjdGlvbiBpbiBkZWxheSBzbG90LAorCWFkZCBsb29wIGFyb3VuZCByZWN1cnNpdmUgY2FsbCBpbiBjYXNlIHRoZSBpbnN0cnVjdGlvbiBnZXRzIHNwbGl0LgorCitUaHUgT2N0IDI2IDA3OjI4OjQ1IDE5OTUgIEoib3JuIFJlbm5lY2tlIChhbXlsYWFyQG1lb2x5b24uaGFuc2UuZGUpCisKKwkqIGdlbnJlY29nLmMgKHdyaXRlX3RyZWVfMSk6IEF2b2lkIGVtaXR0aW5nICctMjE0NzQ4MzY0OCcuCisKKwkqIGp1bXAuYyAoZHVwbGljYXRlX2xvb3BfZXhpdF90ZXN0KTogUmV0dXJuIDAgaWYgZm91bmQKKwlhIE5PVEVfSU5TTl9MT09QX0NPTlQuCisKK1R1ZSBPY3QgMjQgMTU6MzA6MTQgMTk5NSAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IE1ha2Ugc3VyZSB2YWxyZWcgaXMgYXQgbGVhc3QKKwlhIGZ1bGwgd29yZC4KKworU3VuIE9jdCAyMiAxOTozNTo0MSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIHNoLmggKElOSVRfU0VDVElPTl9BU01fT1ApOiBEZWxldGUuCisJKEhBVkVfQVRFWElUKTogRGVmaW5lLgorCitTdW4gT2N0IDIyIDA3OjQ2OjA0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxpYmdjYzIuYyAoX19maXh1bnNbeGRzXWZzaSk6ICN1bmRlZiBNSU4gYW5kIE1BWCBiZWZvcmUgI2luY2x1ZGUKKwlvZiBsaW1pdHMuaC4KKworCSogcGEuYyAocGFfYWRqdXN0X2Nvc3QpOiBVc2UgcGFfY3B1LCBub3QgcGFfY3B1X2F0dHIuCisKK1N1biBPY3QgMjIgMDc6Mzg6NTggMTk5NSAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworICAgICAgICAqIGFscGhhLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IFVzZSAnVScgZm9yIHVuc2lnbmVkIGNvbnN0YW50cy4KKyAgICAgICAgKiBhbHBoYS5jIChhbHBoYV9lbWl0X3NldF9jb25zdCk6IExpa2V3aXNlLgorICAgICAgICAqIG1pcHMuYyAoZ2VuX2ludF9yZWxhdGlvbmFsKTogTGlrZXdpc2UuCisKK1N1biBPY3QgMjIgMDc6MTQ6MzUgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIGkzODYuYyAoaTM4Nl9yZXR1cm5fcG9wc19hcmdzKTogRG9uJ3QgbmVlZCBhIEZVTkRFQ0wgdG8KKwljaGVjayBmb3IgdHlwZSBhdHRyaWJ1dGVzIGluIEZVTlRZUEUuCisKK1NhdCBPY3QgMjEgMTg6MTc6NDIgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBzaC5tZCAoZGVmaW5lX2RlbGF5KTogRG9uJ3QgYWNjZXB0IGFueSBpbnN0cnVjdGlvbiBmb3IgYW4gYW5udWxsZWQKKwlzbG90LCBvbmx5IGFjY2VwdCB0aG9zZSBmb3Igd2hpY2ggaW5fZGVsYXlfc2xvdCBpcyB5ZXMuCisJKiBzaC5jIChmaW5kX2JhcnJpZXIpOiBXaGVuIGhpX2NvbnN0IHJldHVybnMgdHJ1ZSwgaW5jcmVtZW50IGNvdW50X3NpCisJYnkgdHdvIGlmIGZvdW5kX3NpIGlzIHRydWUuCisJQWx3YXlzIHVzZSBnZXRfYXR0cl9sZW5ndGggdG8gY29tcHV0ZSBsZW5ndGggb2YgaW5zdHJ1Y3Rpb25zLgorCUlmIGNvdW50X2hpIG9yIGNvdW50X3NpIG91dCBvZiByYW5nZSBhdCBlbmQsIG5lZWQgdHdvIFBSRVZfSU5TTiBjYWxscworCW5vdCBvbmUuCisJV2hlbiBjcmVhdGUgbmV3IGxhYmVsLCBzZXQgTEFCRUxfTlVTRVMgdG8gMS4KKwkocmVnX3VudXNlZF9hZnRlcik6IElmZGVmIG91dCBjb2RlIGZvciBoYW5kbGluZyBsYWJlbHMuCisJKHByZXBhcmVfc2NjX29wZXJhbmRzKTogTmV3IGxvY2FsIHZhcmlhYmxlIG1vZGUuICBTZXQgaXQgZnJvbQorCXNoX2NvbXBhcmVfb3AwIG9yIHNoX2NvbXBhcmVfb3AxLiAgVXNlIGl0IGluc3RlYWQgb2YgU0ltb2RlIGluCisJZm9yY2VfcmVnIGNhbGxzLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Zsb2F0KTogRW1pdCBtaXNzaW5nIGJhcnJpZXIgYWZ0ZXIgdW5jb25kaXRpb25hbAorCWp1bXAuCisKK1NhdCBPY3QgMjEgMTQ6MTY6NDYgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGJvem8ubWF0ZW1hdGlrLnN1LnNlPgorCisJKiBhbHBoYS5tZCAoY21wZGYpOiBNYWtlIGNvbmRpdGlvbmFsIG9uIFRBUkdFVF9GUC4KKworRnJpIE9jdCAyMCAxOToxMToxMiAxOTk1ICBKIm9ybiBSZW5uZWNrZSAoYW15bGFhckBtZW9seW9uLmhhbnNlLmRlKQorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBEZWxldGUgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQKKwlzaWRlIGVmZmVjdCB0aGF0IHNldCBhIHN1YnJlZyBvZiBhbiB1bnVzZWQgcmVnaXN0ZXIuCisKKwkqIG02OGsuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IENoZWNrIGZvciAhRyBjb25zdGFudHMKKwlmb3IgREFUQV9PUl9GUF9SRUdTIGFsc28uCisKK0ZyaSBPY3QgMjAgMTg6NTc6MTAgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBnZW5tdWx0aWxpYjogT3V0cHV0IG5lZ2F0aW9ucyBvZiB1bnVzZWQgYWx0ZXJuYXRpdmVzLCBldmVuIGlmCisJb25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgaXMgc2VsZWN0ZWQuCisKK0ZyaSBPY3QgMjAgMTg6NDg6NTAgMTk5NSAgSmVmZiBMYXcgIChsYXdAaHVybC5jeWdudXMuY29tKQorCisJKiBpbnRlZ3JhdGUuYyAob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IFR1cm4gb24gZmxhZ19ub19pbmxpbmUKKwl0byBhdm9pZCBmdW5jdGlvbiBpbnRlZ3JhdGlvbiBvbmNlIHdlIGJlZ2luIHdyaXRpbmcgZGVmZXJyZWQKKwlvdXRwdXQgZnVuY3Rpb25zLgorCitGcmkgT2N0IDIwIDE4OjQ2OjMzIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB3b2dnbGVidWcudGlhYy5uZXQ+CisKKwkqIHJzNjAwMC5jIChmbG9hdF9jb252X3RlbXApOiBEZWxldGUgZ2xvYmFsIHZhcmlhYmxlLgorCShzdGFja190ZW1wcyk6IE5ldyBzdGF0aWMgYXJyYXkgdG8gaG9sZCBzdGFjayB0ZW1wcy4KKwkob2Zmc2V0dGFibGVfbWVtX29wZXJhbmQpOiBEZWxldGUgZnVuY3Rpb24uCisJKG9mZnNldHRhYmxlX2FkZHJfb3BlcmFuZCwgcnM2MDAwX3N0YWNrX3RlbXApOiBOZXcgZnVuY3Rpb25zLgorCShvdXRwdXRfZXBpbG9nKTogWmVybyBzdGFja190ZW1wcy4KKworCSogcnM2MDAwLmggKG9mZnNldHRhYmxlX2FkZHJfb3BlcmFuZCk6IERlY2xhcmUgaW5zdGVhZCBvZgorCW9mZnNldHRhYmxlX21lbV9vcGVyYW5kLgorCShQUkVESUNBVEVfQ09ERVMpOiBVc2Ugb2Zmc2V0dGFibGVfYWRkcl9vcGVyYW5kLgorCShmbG9hdF9jb252X3RlbXApOiBEZWxldGUgdmFyaWFibGUuCisKKwkqIHJzNjAwMC5tZCAobW92ZV90b19mbG9hdCBpbnNucyk6IENoYW5nZSBtb3ZlX3RvX2Zsb2F0IHNvCisJdGhhdCBpdCBkb2Vzbid0IGhhdmUgYSBjbG9iYmVyIG9mIHRoZSBtZW1vcnkgYWRkcmVzcywgYW5kIGluc3RlYWQKKwlwYXNzZXMgdGhlIHN0YWNrIHRlbXAncyBtZW1vcnkgYWRkcmVzcyBhcyBvbmUgb2YgdGhlIHVuc3BlYyBhcmdzLgorCShmaXhfdHJ1bmNkZnNpMik6IFVzZSByczYwMDBfc3RhY2tfdGVtcCB0byBhbGxvY2F0ZSB0aGUgdGVtcC4KKwkobXVsdGlwbHksIHNoaWZ0IGluc25zKTogRml4IGFsbCBjYXNlcyBvZiBtdWx0aXBseSBhbmQgc2hpZnQgaW5zbnMgc28KKwl0aGF0IHRoZSByaWdodCBtbmVtb25pY3MgYXJlIHVzZWQgZm9yIC1tY3B1PWNvbW1vbiB3aXRoIGJvdGgKKwktbXtvbGQsbmV3fS1tbmVtb25pY3MuCisKK0ZyaSBPY3QgMjAgMTc6NTg6MTkgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wLCBjYXNlIFJUTF9FWFBSKTogUmV0dXJuIDAgaWYgUlRMX0VYUFJfU0VRVUVOQ0UKKwlleGlzdHMuICBEZWxldGUgY29kZSB0byByZXR1cm4gMCBpZiBleHBfcnRsIGlzIHplcm8uCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBEb24ndCBjYWxsIGluaXRfaW5zbl9sZW5ndGhzIGhlcmUuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgaXQgaGVyZS4KKworVGh1IE9jdCAxOSAxOToxOTowNiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IE1ha2UgdGVzdCBmb3IgbnVsbCBwb2ludGVyCisJbW9yZSBnZW5lcmFsLgorCitUaHUgT2N0IDE5IDE4OjU2OjE2IDE5OTUgIFNhdG9zaGkgQWRhY2hpICAoYWRhY2hpQHdpc2RvbS5hYS5hcC50aXRlY2guYWMuanApCisKKwkqIGZpeGluY2x1ZGVzIChzdGRsaWIuaCk6IEJlIG1vcmUgZ2VuZXJhbCBpbiBlZGl0IHRvIGNoYW5nZQorCWRlY2xhcmF0aW9uIG9mIHtjLG0scmV9YWxsb2MuCisKK1RodSBPY3QgMTkgMTg6NDg6NTMgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGJvem8ubWF0ZW1hdGlrLnN1LnNlPgorCisJKiBsaWJnY2MyLmMgKF9fdWRpdl93X3NkaXYpOiBJZiB3ZSBkb24ndCBoYXZlIHNkaXZfcXJubmQsIGRlZmluZQorCWR1bW15IHZhcmlhbnQgb2YgX191ZGl2X3dfc2Rpdi4KKworVGh1IE9jdCAxOSAxODo0NToyMSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGFscGhhLmggKEFTTV9TUEVDKTogSWYgR05VIGFzIGlzIHRoZSBkZWZhdWx0LCB0aGVuIHBhc3MgLWcgdG8KKwl0aGUgYXNzZW1ibGVyIGlmIC1tYWxwaGEtYXMuICBJZiBHTlUgYXMgaXMgbm90IHRoZSBkZWZhdWx0LCB0aGVuIHBhc3MKKwktZyB0byB0aGUgYXNzZW1ibGVyIGlzIG5vdCAtbWdhcy4KKworCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzKTogV2hlbiBzZWFyY2ggZm9yIG5ldyBwbGFjZSB0byBwdXQKKwlSRUdfREVBRCBub3RlLCBjYWxsIGRpc3RyaWJ1dGVfbGlua3MgaWYgdGhpcyBuZXcgcGxhY2UgaXMgYmV0d2VlbgorCWkyIGFuZCBpMywgYW5kIGkyIHVzZXMgdGhlIHJlZ2lzdGVyLgorCitUaHUgT2N0IDE5IDE4OjQxOjM2IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAubWQgKGZsb2F0eyx1bnN9c2lkZjIpOiBSZXdyaXRlIHRvIGJyZWFrIHRoZSBjb252ZXJzaW9uCisJcHJvY2VzcyBpbnRvIHNldmVyYWwgZ2VuZXJhbCBpbnNucy4KKwkobW92ZV90b19mbG9hdCk6IE5ldyBpbnNucyB0byBtb3ZlIDIgaW50ZWdlciByZWdzIGludG8gYSBmbG9hdCByZWdpc3RlcgorCXRocm91Z2ggbWVtb3J5LCB0YWtpbmcgZW5kaWFuZXNzIGludG8gYWNjb3VudC4gIE1ha2Ugc3VyZSB0aGF0IHRoZQorCWZsb2F0aW5nIHRlbXBvcmFyeSBpcyBhIHZhbGlkIGFkZHJlc3MuICBVc2Ugb25lIHRlbXBvcmFyeSBmb3IgYWxsCisJZmxvYXRzIGNvbnZlcnRlZC4KKwkoZml4X3RydW5jZGZzaTIpOiBUYWtlIGVuZGlhbmVzcyBpbnRvIGFjY291bnQuCisKKwkqIHJzNjAwMC5jICh7bG93XzMyX2JpdCxvZmZzZXR0YWJsZV9tZW19X29wZXJhbmQpOiBUaGUgZnVuY3Rpb24KKwlsb3dfMzJfYml0X29wZXJhbmQgaXMgbm93IHVudXNlZCwgZGVsZXRlIGl0LiAgTmV3IGZ1bmN0aW9uCisJb2Zmc2V0dGFibGVfbWVtX29wZXJhbmQgdG8gZGV0ZXJtaW5lIGlmIGEgbWVtb3J5IGFkZHJlc3MgaXMKKwlvZmZzZXR0YWJsZS4KKwkqIHJzNjAwMC5oICh7bG93XzMyX2JpdCxvZmZzZXR0YWJsZV9tZW19X29wZXJhbmQpOiBEaXR0by4KKwkoUFJFRElDQVRFX0NPREVTKTogRGl0dG8uCisKKwkqIHJzNjAwMC57YyxofSAoZmxvYXRfY29udl90ZW1wKTogTmV3IGdsb2JhbC4KKwkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9nKTogWmVybyBvdXQgZmxvYXRfY29udl90ZW1wLgorCisJKiBNYWtlZmlsZS5pbiAobGliZ2NjezEsMn0uYSk6IEFsbG93IExJQnsxLDJ9RlVOQ1NfRVhUUkEgZmlsZXMgdG8KKwllbmQgaW4gLlMgYXMgd2VsbCBhcyAuYyBhbmQgLmFzbS4KKworV2VkIE9jdCAxOCAxNzo1Njo0NSAxOTk1ICBKb3NlIEFsb25zbyAgKHNpZGluZkBmcHNwLmZhcGVzcC5icikKKworCSogYy10eXBlY2suYyAocGFyc2VyX2J1aWxkX2JpbmFyeV9vcCk6IFdhcm4gYWJvdXQgeF55PT16LCBldGMuCisKK01vbiBPY3QgIDkgMTI6Mzg6MDYgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHByb3RvaXplLmMgKHJldmVyc2VfZGVmX2RlY19saXN0KTogU2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4KKworTW9uIE9jdCAgOSAxMjozNTo1NCAxOTk1ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGhpZ2hsYW5kLmNvbS5hdT4KKworCSogZ2luY2x1ZGUvdmEtcHBjLmggKHZhX2FyZyk6IERlYWwgd2l0aCBsb25nIGxvbmdzIHRoYXQgd291bGQgYmUKKwlwYXNzZWQgaW4gdGhlIDd0aCByZWdpc3RlciwgYW5kIGFyZSBwYXNzZWQgaW4gdGhlIHN0YWNrIGluc3RlYWQuCisKK0ZyaSBPY3QgIDYgMTM6NDc6MTAgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBhbHBoYS5oIChBU01fU1BFQyk6IEFkZCAtZy4KKworRnJpIE9jdCAgNiAxMzo0Mjo1MCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBhbHBoYS5oIChhbHBoYV97YXJnLGF1dG99X29mZnNldCk6IE1ha2UgZXh0ZXJuLgorCitGcmkgT2N0ICA2IDEzOjI0OjQzIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmggKFJFVFVSTl9BRERSRVNTX09GRlNFVCk6IENvcnJlY3QgcHJldmlvdXMgY2hhbmdlLgorCitGcmkgT2N0ICA2IDEzOjE0OjQzIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIHJ0bGFuYWwuYyAocmVnX3NldF9sYXN0KTogRml4IGNhbGwgdG8gcmVnX3NldF9iZXR3ZWVuX3AuCisKK1R1ZSBPY3QgIDMgMTI6MzE6MzggMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUsIGNhc2UgQVJSQVlfVFlQRSk6IFN0cmlwIE1BWF9FWFBSCisJZnJvbSB1cHBlciBib3VuZCB3aGVuIGNvbXB1dGluZyBsZW5ndGggaWYgaXQganVzdCBwcm90ZWN0cyBhZ2FpbnN0CisJbmVnYXRpdmUgbGVuZ3RoLgorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuXzEpOiBXaGVuIGRvaW5nIG11bHRpLXdvcmQgbW92ZSwgc2hvdworCW91dHB1dCBpcyBjbG9iYmVyZWQuCisKK1R1ZSBPY3QgIDMgMTI6MjY6MDcgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBjc2UuYyAoc2V0X25vbnZhcnlpbmdfYWRkcmVzc19jb21wb25lbnRzLCBjYXNlIEFORCk6IEFkZCAqcGVuZCB0bworCWVuZC4gIEFkZCBjb25zdGFudCB0byBzdGFydCBpbnN0ZWFkIG9mIHN1YnRyYWN0aW5nIGl0LgorCitUdWUgT2N0ICAzIDEyOjIzOjI4IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBib3pvLm1hdGVtYXRpay5zdS5zZT4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBJbiBjb2RlIHRoYXQgYXR0ZW1wdHMgdG8gc2ltcGxpZnkKKyAJY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMsIGlmIHRoZSByZXN1bHQgaXMgYW4gTkUgYXJvdW5kIGFub3RoZXIKKwljb21wYXJpc29uLCByZXR1cm4gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisKKwkqIGxvbmdsb25nLmggKG1pcHMgdW11bF9wcG1tKTogVXNlIGBsJyBhbmQgYGgnIGNvbnN0cmFpbnRzOworCXJlbW92ZSBtZmxvIGFuZCBtZmhpIGluc3RydWN0aW9ucy4KKworVHVlIE9jdCAgMyAxMjoyMToyOSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogZ2luY2x1ZGUvdmEtcHBjLmggKHZhX3N0YXJ0LCBzdGRhcmcgY2FzZSk6IENhbGwKKwlfX2J1aWx0aW5fbmV4dF9hcmcsIGFuZCBpZ25vcmUgdGhlIHJlc3VsdCwgc28gdGhhdCB0aGUgY29tcGlsZXIKKwljYW4gcmVwb3J0IHRoZSBwcm9wZXIgZXJyb3IsIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm90IHRoZQorCWxhc3QgYXJndW1lbnQuCisKK1R1ZSBPY3QgIDMgMTI6MDI6NTEgMTk5NSAgS29odGFsYSBNYXJrbyAgPE1hcmtvLktvaHRhbGFAbnRjLm5va2lhLmNvbT4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXApOiBBZGp1c3QgZnVsbF9zaXplIGZpZWxkIG9mCisJdGVtcF9zbG90IHdoZW4gc3BsaXR0aW5nIGFuIHVudXNlZCBzbG90LgorCitUdWUgT2N0ICAzIDExOjUxOjU5IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbl9yZXR1cm5fYWRkcik6IEJyZWFrIG91dCBmdW5jdGlvbmFsaXR5CisJZnJvbSBleHBhbmRfYnVpbHRpbi4KKwkoZXhwYW5kX2J1aWx0aW4pOiBDYWxsIGV4cGFuZF9idWlsdGluX3JldHVybl9hZGRyLgorCSogcnM2MDAwLmggKFJFVFVSTl9BRERSX1JUWCk6IFJlbW92ZSBjYWxsIHRvIGNvcHlfdG9fcmVnLgorCU9mZnNldCB0byByZXR1cm4gYWRkcmVzcyBpcyA0IHdoZW4gIVRBUkdFVF82NEJJVCBhbmQgdjRfY2FsbF9wLAorCTggb3RoZXJ3aXNlLgorCSogc3BhcmMuaCAoUkVUVVJOX0FERFJfUlRYKTogUmVtb3ZlIGNhbGwgdG8gY29weV90b19yZWcuCisJKiBhbHBoYS5oIChSRVRVUk5fQUREUl9SVFgpOiBOZXcgZGVmaW5pdGlvbi4KKworU3VuIE9jdCAgMSAyMToyMzozMCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKHN0YXRpY3AsIGNhc2UgSU5ESVJFQ1RfRVhQUik6IERpc2FibGUgY2FzZS4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogSWYgZ2V0dGluZyBjb21wb25lbnQKKwlvZiB1bmlvbiBvZiB2YXJpYWJsZSBzaXplLCBwcm9wYWdhdGUgVEFSR0VULgorCitGcmkgU2VwIDI5IDA3OjQ4OjA5IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IFdoZW4gc3RvcmluZyBwcm9tb3RlZCB2YWx1ZSwgZG9uJ3QgcmV0dXJuCisJTUVNIGlmIGFkZHJlc3MgY29udGFpbnMgdGFyZ2V0LgorCitUaHUgU2VwIDI4IDE0OjMwOjAzIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKHJlc2Nhbik6IEV4cGFuZCBgI2lmIGZvbyAmJiAjYmFyJyB3aXRob3V0IGEgYm9ndXMKKwljb21wbGFpbnQgYWJvdXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2l0aGluIG1hY3JvIGFyZ3MuCisJRXhwYW5kIGBmb28nIGluIGBmb28jYmFyJyB3aXRob3V0IHJlcXVpcmluZyBhIHNwYWNlIGJlZm9yZSBgIycuCisKK1RodSBTZXAgMjggMTQ6MjQ6MjYgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLm1kIChhbm9ueW1vdXMgREltb2RlIHNoaWZ0IHBhdHRlcm5zIHNldHRpbmcgY2MwKTogVHVybmVkCisJb2ZmIGR1ZSB0byByZWxvYWQgcHJvYmxlbXMuCisKK1RodSBTZXAgMjggMTQ6MDU6MjIgMTk5NSAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogTWFrZWZpbGUuaW4gKFVTRVJfSCk6IE1vdmUgdXAgc28gY2FuIG92ZXJyaWRlLgorCShJTlNUQUxMX0FTU0VSVF9IKTogTmV3IGRlZmluaXRpb24uCisJKGluc3RhbGwtaGVhZGVycyk6IFVzZSBpdC4KKwkoc3RtcC1pbnQtaGRycyk6IEhhbmRsZSBVU0VSX0ggYmVpbmcgZW1wdHkuCisJKiBjb25maWcveC1uZXRic2QgKElOU1RBTExfQVNTRVJUX0gpOiBEZWZpbmUgYXMgZW1wdHkuCisKKwkqIGkzODYvbmV0YnNkLmggKFdDSEFSX3tUWVBFLFVOU0lHTkVELFRZUEVfU0laRX0pOiBOb3cgaW50LgorCSogbTY4ay9uZXRic2QuaCwgbnMzMmsvbmV0YnNkLmgsIHNwYXJjL25ldGJzZC5oOiBMaWtld2lzZS4KKwkqIHZheC9uZXRic2QuaDogTGlrZXdpc2UuCisJKFNJWkVfVFlQRSk6IFVzZSB1bnNpZ25lZCBpbnQuCisKKwkqIG02OGsuYyAob3V0cHV0X3NjY19kaSk6IFN3YXAgb3BlcmFuZHMgd2hlbiBuZWVkZWQuCisJKiBtNjhrLmggKExFR0lUSU1BVEVfUElDX09QRVJBTkQpOiBBbGxvdyBTWU1CT0xfUkVGX0ZMQUcgc3ltcmVmLgorCSogbTY4ay5tZDogTWFrZSBib3RoIGFzc2VtYmxlciBzeW50YXhlcyBkbyB0aGUgc2FtZSBmb3IgUElDIGNhbGxzLgorCitUdWUgU2VwIDI2IDE2OjUxOjQ0IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogRG9uJ3QgYWxsb3cgYW55dGhpbmcgYnV0IGludGVnZXJzIHRvCisJZ28gaW4gdGhlIEhJL0xPIHJlZ2lzdGVycy4KKworVHVlIFNlcCAyNiAxNjozNjoxOCAxOTk1ICBKb2huIEYuIENhcnIgIDxqZmNAbWl0LmVkdT4KKworCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBEb24ndCB3YXJuIGFib3V0IGZvcm1hdCB0eXBlCisJbWlzbWF0Y2ggaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVSUk9SX01BUksuCisKK01vbiBTZXAgMjUgMTc6NTA6NTAgMTk5NSAgQ3JhaWcgQnVybGV5ICAoYnVybGV5QGdudS5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChwdXRfcGVuZGluZ19zaXplcyk6IE5ldyBmdW5jdGlvbi4KKwkqIHRyZWUuaCAocHV0X3BlbmRpbmdfc2l6ZXMpOiBBZGQgZGVjbGFyYXRpb24uCisJKiB0cmVlLmMgKHNhdmVfZXhwcik6IFJldHVybiBvcmlnaW5hbCBmb3IgRVJST1JfTUFSSy4KKworRnJpIFNlcCAyMiAxOToyMDowMSAxOTk1ICBKZWZmIExhdyAgKGxhd0BodXJsLmN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fTUVNQ1BZKTogU3RyaXAgb2ZmCisJYWxsIE5PUCBleHBycyBmcm9tIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGVzLCB0aGVuCisJc2V0IE1FTV9JTl9TVFJVQ1RfUC4KKworRnJpIFNlcCAyMiAxODo1MDozMSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9lYWJpLmggKEFTTV9PVVRQVVRfSU5UKTogVGVzdCBmb3Igd2hldGhlciB0aGUgaW50ZWdlcgorCWJlaW5nIG91dHB1dCBpcyBhbHNvIGEgY29uc3RhbnQgc28gJnN5bSAtICZzeW0yIGlzIG5vdCBmaXhlZCB1cC4KKworRnJpIFNlcCAyMiAxODo0OTowNyAxOTk1ICBQZXRlciBGbGFzcyAgKEZMQVNTQExCRFJTQ1MuQklUTkVUKQorCisJKiBpMzcwLm1kIChjbXBzaSk6IEFkZCBtaXNzaW5nIGNvbnN0cmFpbnRzIHRvIG9wZXJhbmQgMS4KKworRnJpIFNlcCAyMiAxODoyNzozMyAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorCisJKiBpMzg2LmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IE1ha2UgYE4nIG1hdGNoIHJhbmdlIDAuLjI1NQorCWZvciBgb3V0YicgaW5zdHJ1Y3Rpb24uCisKKwkqIHB5ci5oIChQUklOVF9PUEVSQU5EKTogSGFuZGxlIGNvZGUgYFInIGZvciBSRUcuCisgICAgICAgICogbG9uZ2xvbmcuaCAocHlyIHVtdWxfcHBtbSk6IFVzZSBpdC4KKworRnJpIFNlcCAyMiAxODoyNDozOCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXBhcnNlLmluIChlbnVtbGlzdCk6IFByb3BhZ2F0ZSBlcnJvcl9tYXJrX25vZGUuCisKKwkqIGMtYXV4LWluZm8uYyAoZ2VuX3R5cGUpOiBIYW5kbGUgRVJST1JfTUFSSy4KKworCSogYWxwaGEubWQgKG1vdmRpKTogQXZvaWQgbWVtb3J5IHNoYXJpbmcgcHJvYmxlbSB3aGVuIGluIHJlbG9hZC4KKworV2VkIFNlcCAyMCAxNDoyNzowOSAxOTk1ICBQZXRlciBGbGFzcyA8Zmxhc3NAbGJkcnNjcy5iaXRuZXQ+CisKKyAgICAgICAgKiBtdnMuaCAoRlVOQ1RJT05fUFJPTE9HVUUpOiBNYWludGFpbiBzYXZlYXJlYSBmb3J3YXJkIGNoYWluCisJcGVyIE1WUyBzdGFuZGFyZHMuCisKK1dlZCBTZXAgMjAgMTQ6MjA6NTIgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG1hdGVtYXRpay5zdS5zZT4KKworICAgICAgICAqIHB5ci5tZCAoY21waGkgcmVjb2duaXplcik6IE1ha2UgY29uZGl0aW9uIG1hdGNoIGNvbnN0cmFpbnRzLgorCShjbXBxaSByZWNvZ25pemVyKTogTGlrZXdpc2UuCisKK1dlZCBTZXAgMjAgMTI6NDI6NTkgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEbyBjb3B5IHNvbWV0aGluZyBzZXR0aW5nCisJdGhlIHJlc3VsdCByZWdpc3RlciBpZiBpdCBpcyBzZXR0aW5nIGl0IHRvIGl0c2VsZiBhbmQgaGFzIGEgUkVHX05PVEUuCisKKwkqIGludGVncmF0ZS5jIChzZXRfZGVjbF97b3JpZ2luX3NlbGYsYWJzdHJhY3RfZmxhZ3N9KTogVHJlYXQKKwlhIERFQ0xfSU5JVElBTCBvZiBlcnJvcl9tYXJrX25vZGUgdGhlIHNhbWUgYXMgb25lIG9mIE5VTExfVFJFRS4KKworVHVlIFNlcCAxOSAxOTozMDoxOCAxOTk1ICBEYXZlIFBpdHRzICAoZHBpdHRzQG55eC5jcy5kdS5lZHUpCisKKwkqIGkzNzAubWQgKGNtcGhpLCBtb3ZoaSwgbW92c3RyaWN0aGksIGV4dGVuZGhpc2kyKTogQ29ycmVjdCBnZW5lcmF0aW9uCisJb2Ygc2hvcnQgaW50ZWdlciAoSGFsZndvcmQpCisJKHthZGQsc3ViLG11bCxhbmQsaW9yLHhvcn1oaTMpOiBMaWtld2lzZS4KKwkqIGkzNzAvbXZzLmggKE1BQ1JPUFJPTE9HVUUpOiBOZXcgbWFjcm8uCisJKEZVTkNUSU9OX3tQUk8sRVBJfUxPR1VFKTogQWRkZWQgYWJpbGl0eSB0byB1c2UgSUJNIHN1cHBsaWVkIGZ1bmN0aW9uCisJcHJvbG9ndWUgbWFjcm9zLgorCShGVU5DVElPTl9QUk9MT0dVRSk6IENvcnJlY3RlZCBmdW5jdGlvbiAiaW4tbGluZSIgcHJvbG9ndWUgYWxpZ25tZW50CisJcHJvYmxlbXMuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBDaGFuZ2VkIGFsaWdubWVudCB0byBGdWxsV29yZC4KKwkoQVNNX09VVFBVVF97U0hPUlQsQVNDSUl9KTogUmV3b3JrZWQuCisKK1R1ZSBTZXAgMTkgMTk6MjI6MTUgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIHdpbm50L3dpbi1udC5oOiBSZW5hbWVkIGZyb20gd2lubnQvd2luLW50LmguCisJKExJTktfU1BFQyk6IEFkZCAtbm9pbmhpYml0LWV4ZWMuCisJKiB7YWxwaGEsaTM4Nn0vd2luLW50Lmg6IFJlbmFtZWQgZnJvbSB7YWxwaGEsaTM4Nn0vd2lubnQuaC4KKwlJbmNsdWRlIHdpbm50L3dpbi1udC5oLCBub3Qgd2lubnQvd2lubnQuaC4KKwkqIHdpbm50L29sZG5hbWVzLmM6IE5ldyBmaWxlLgorCSogd2lubnQvaGVhZGVycy5tYWsgKGZpeGluYy1udC5vYmopOiBGaXggdHlwby4KKwkqIHdpbm50L2NvbmZpZy1udC5iYXQ6IENoYW5nZSB3aW5udC5oIHRvIHdpbi1udC5oLgorCSogaTM4Ni9jb25maWctbnQuc2VkOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZSAoe2FscGhhLGkzODZ9LSotd2lubnQzKik6IExpa2V3aXNlLgorCitNb24gU2VwIDE4IDE0OjAwOjQ1IDE5OTUgIE9saXZlciBLZWxsb2dnICAoT2xpdmVyLktlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLmggKGVudW0gcmVnX2NsYXNzLCBSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUyk6CisJQWRkZWQgUjIgYW5kIFIwXzEuCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IE5ldyBsZXR0ZXJzICd0JyBhbmQgJ3onLgorCShFWFRSQV9DT05TVFJBSU5UKTogTmV3IGxldHRlciAnUScuCisKK1N1biBTZXAgMTcgMTI6Mzk6MjIgMTk5NSAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBJZiBhIHBhcmFtZXRlcidzIHR5cGUKKwloYXMgVFlQRV9ORUVEU19DT05TVFJVQ1RJTkcgb24sIHRoZW4gaXQncyBwYXNzZWQgYnkgaW52aXNpYmxlCisJcmVmZXJlbmNlLgorCitTYXQgU2VwIDE2IDE3OjQyOjMzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK1NhdCBTZXAgMTYgMDg6Mzg6MjIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogRGlzYWxsb3cgU1lNQk9MX1JFRiBmb3IKKwljdXJyZW50IGZ1bmN0aW9uLgorCisJKiBjc2UuYyAocmVjb3JkZWRfbGFiZWxfcmVmKTogTmV3IHZhcmlhYmxlLgorCShpbnNlcnQpOiBTZXQgaW5zdGVhZCBvZiBjc2VfanVtcHNfYWx0ZXJlZC4KKwkoY3NlX21haW4pOiBJbml0aWFsaXplIGl0IGFuZCByZXR1cm4gMSBpZiBub256ZXJvIGF0IGVuZC4KKworRnJpIFNlcCAxNSAxODoyNjo0OSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAbWF0ZW1hdGlrLnN1LnNlKQorCisJKiBmb2xkLWNvbnN0IChkaXZfYW5kX3JvdW5kX2RvdWJsZSk6IENoYW5nZSBgY2FycnknLCBgcXVvX2VzdCcsCisJYW5kIGBzY2FsZScgZnJvbSBwbGFpbiBpbnQgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnLgorCitGcmkgU2VwIDE1IDE4OjI0OjI0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChpbnNlcnQpOiBTZXQgY3NlX2p1bXBzX2FsdGVyZWQgd2hlbiBpbnNlcnRpbmcgYSBMQUJFTF9SRUYuCisKK0ZyaSBTZXAgMTUgMTc6Mjk6NDEgMTk5NSAgT2xpdmVyIEtlbGxvZ2cgIChPbGl2ZXIuS2VsbG9nZ0BzcGFjZS5vdG4uZGFzYS5kZSkKKworCSogMTc1MGEuYyAoYl9tb2RlX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKHByaW50X29wZXJhbmQpOiBBZGRlZCBjb2RlICdRJy4KKworRnJpIFNlcCAxNSAxNzoyNzoyMyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGxvb3AuYyAoZmluZF9hbmRfdmVyaWZ5X2xvb3BzKTogV2hlbiBtb3ZpbmcgZXhpdCBibG9ja3Mgb3V0IG9mCisJdGhlIGxvb3AsIHZlcmlmeSB0aGF0IHRoZSB0YXJnZXQgb2YgUCBpcyB3aXRoaW4gdGhlIGN1cnJlbnQgbG9vcC4KKworCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IFVwZGF0ZSB0aHJlYWQgaWYgaXQgaXMgc3BsaXQuCisKK0ZyaSBTZXAgMTUgMTc6MDY6NTEgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAoZGVjcmVtZW50X2FuZF9icmFuY2hzaSBhbmQgcmVsYXRlZCBpbnNucyk6IERvbid0IHVzZQorCWEgIjIiIHRvIHNlbGVjdCBhIHJlZ2lzdGVyIHByZWZlcmVuY2UgZm9yIG9wZXJhbmQgMSBpZiBvcGVyYW5kIDIKKwloYXNuJ3QgYmVlbiBzZWVuIHlldC4KKwlBZGQgYXBwcm9wcmlhdGUgY2xvYmJlcnMgaW4gZGVjcmVtZW50X2FuZF9icmFuY2hzaS4KKwlBZGQgcGF0dGVybnMgd2hlcmUgdGhlIHBjL2xhYmVsX3JlZiBhcmUgaW50ZXJjaGFuZ2VkLgorCisJKiBNYWtlZmlsZS5pbiAoZ251Y29tcGFyZSwgc3RtcC1tdWx0aWxpYi1zdWIpOiBSZW1vdmUgZXh0cmEgLiBpbgorCWZyb250IG9mICQob2JqZXh0KS4KKworCSogcnM2MDAwLmMgKG91dHB1dF90b2MpOiBBbGlnbiBERiBjb25zdGFudHMgaWYgU1RSSUNUX0FMSUdOTUVOVC4KKworCSogY29uZmlnL2ZwLWJpdC5jIChGTE9fdW5pb25fdHlwZSk6IEFkZCB3b3JkcyBmaWVsZCBpZiBkb3VibGUKKwlwcmVjaXNpb24gdG8gZ2V0IGF0IHRoZSBzZXBhcmF0ZSB3b3Jkcy4KKyAgCShGTE9fdW5pb25fdHlwZSwgcGFja19kLCB1bnBhY2tfZCk6IFVzZSBGTE9BVF9CSVRfT1JERVJfTUlTTUFUQ0gKKwl0byBkZXRlcm1pbmUgd2hlbiB0aGUgYml0ZmllbGRzIG5lZWQgdG8gYmUgcmV2ZXJzZWQsIGFuZAorCUZMT0FUX1dPUkRfT1JERVJfTUlTTUFUQ0ggd2hlbiB0aGUgd29yZHMgbmVlZCB0byBiZSByZXZlcnNlZC4KKworRnJpIFNlcCAxNSAxNjo0MTo0MyAxOTk1ICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBXaGVuIGZpbGxpbmcgaW5zbidzIGRlbGF5IHNsb3QKKwl3aXRoIEpVTVBfSU5TTiwgZG9uJ3QgYXNzdW1lIGl0IGltbWVkaWF0ZWx5IGZvbGxvd3MgaW5zbiBvbgorCXVuZmlsbGVkIHNsb3RzIG9ic3RhY2suCisKKwkqIE1ha2VmaWxlLmluIChjYWxsZXItc2F2ZS5vKTogRGVwZW5kIG9uIGluc24tY29kZXMuaC4KKworVGh1IFNlcCAxNCAxNzo0MTo0OSAxOTk1ICBKaW0gTWV5ZXJpbmcgIChtZXllcmluZ0Bjb21jby5jb20pCisKKwkqIHByb3RvaXplLmMgKGRvX2NsZWFuaW5nKTogRG9uJ3QgYmxhbmsgb3V0IGJhY2tzbGFzaC1lc2NhcGVkCisJbmV3bGluZXMgaW4gZG91YmxlIHF1b3RlZCBzdHJpbmdzLgorCitUaHUgU2VwIDE0IDE2OjIwOjM1IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0KTogSWYgZ2VuX2xvd3BhcnRfY29tbW9uIGZhaWxzCisJZm9yIGEgUkVHLCBsb2FkIGl0IGludG8gYSBwc2V1ZG8gYW5kIHRyeSBhZ2Fpbi4KKworVGh1IFNlcCAxNCAxNDoxNToxNiAxOTk1ICBTdGFuIENveCAgKGNveHNAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5oIChWRVJTSU9OX0lORk8xKTogUmVtb3ZlZCBCQ1MgcmVmZXJlbmNlLgorCSogbTg4ay9kZ3V4LmggKEFTTV9TUEVDLCAqX0xFR0VORCk6CisJQWRkZWQgLW1uby1sZWdlbmQgb3B0aW9uLiAtbXN0YW5kYXJkIG5vIGxvbmdlciBpbXBsaWVzIHRoYXQgbGVnZW5kCisJbGVnZW5kIGluZm9ybWF0aW9uIG5vdCBiZSBwcm9kdWNlZC4KKwkoTElOS19TUEVDKTogUmVtb3ZlZCAteiB0ZXh0CisKK1R1ZSBTZXAgMTIgMTk6MDU6MzkgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBjY2NwLmMgKGlzX3N5c3RlbV9pbmNsdWRlKTogQ2FsbCBza2lwX3JlZHVuZGFudF9kaXJfcHJlZml4LgorCitUdWUgU2VwIDEyIDE4OjU4OjIxIDE5OTUgIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgorCisJKiBzcGFyYy5tZDogQ2hhbmdlIGAqcmV0dXJuICJzdHJpbmciJyB0byAic3RyaW5nIiBpbiBwYXR0ZXJucy4KKworVHVlIFNlcCAxMiAxODo0ODo0NyAxOTk1ICBDcmFpZyBCdXJsZXkgIChidXJsZXlAZ251LmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IEZvciBDT05DQVQgY2FzZSwgb3JkZXIgb2YKKwlwbGFjZW1lbnQgZGVwZW5kcyBvbiBGUkFNRV9HUk9XU19ET1dOV0FSRCwgbm90IFNUQUNLX0dST1dTX0RPV05XQVJELgorCitUdWUgU2VwIDEyIDE4OjM0OjEwIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIHZhLXNwYXJjLmggKHY5IHZhcmFyZ3MgdmFfc3RhcnQpOiBIYW5kbGUgX19idWlsdGluX3ZhX2FsaXN0CisJYmVpbmcgc3RhY2sgYXJndW1lbnQuCisKKwkqIHNwYXJjLmggKFNUQVRJQ19DSEFJTl9SRUdOVU0pOiBVc2UgJWc1IGZvciBzcGFyYzY0LgorCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogUmV3cml0ZSBmb3Igc3BhcmM2NC4KKwkoVFJBTVBPTElORV9TSVpFKTogSXMgNDAgZm9yIHNwYXJjNjQuCisJKiBzcGFyYy5jIChzcGFyYzY0X2luaXRpYWxpemVfdHJhbXBvbGluZSk6IFJld3JpdGUuCisKK1R1ZSBTZXAgMTIgMTg6MzA6MjIgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIGNwL01ha2UtbGFuZy5pbiAoY2MxcGx1cykgOiBSZW1vdmVkIHVubmVjZXNzYXJ5ICQoZXhlZXh0KS4KKworCSogY29uZmlndXJlOiBBZGRlZCBjb2RlIHRvIGhhbmRsZSBnY2NfZXh0cmFfb2Jqcy4KKwkoYWxwaGEtd2lubnQpOiBDaGFuZ2VkIHhtYWtlX2ZpbGUgdG8gd2lubnQveC13aW5udC4KKwlBZGRlZCBleHRyYV9nY2Nfb2Jqcz1zcGF3bnYubzsgY2hhbmdlZCBleHRyYV9wcm9ncmFtcyB0byBsZC5leGUuCisJKGkzODYtd2lubnQpOiBDaGFuZ2VkIHhtYWtlX2ZpbGUgdG8gd2lubnQveC13aW5udC4KKwlBZGRlZCBleHRyYV9nY2Nfb2Jqcz1zcGF3bnYubzsgY2hhbmdlZCBleHRyYV9wcm9ncmFtcyB0byBsZC5leGUuCisJKiBjb25maWd1cmUuYmF0OiBDaGFuZ2VkIHRvIHVzZWQgY29tbW9uIHdpbm50L2NvbmZpZy1udC5iYXQuCisJKiBNYWtlZmlsZS5pbjogQ2hhbmdlZCB2YXJpb3VzIC5vJ3MgdG8gLiQob2JqZXh0KSdzCisJKHNwZWNzKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSAkKGV4ZWV4dCkuCisJKEVYVFJBX0dDQ19PQkpTKTogTmV3IHZhcmlhYmxlLgorCShjbGVhbik6IFJlbW92ZWQgJChMSUIyRlVOQ1NfRVhUUkEpCisJKiBvYmpjL01ha2VmaWxlOiBDaGFuZ2VkIGFyY2hpdmUgY29tbWFuZCBmb3IgbGlib2JqYy5hIHRvIHVzZSAkPworCWZvciBvYmplY3RzLgorCisJKiBhbHBoYS94LXdpbm50LCBpMzg2L3gtd2lubnQ6IERlbGV0ZWQuCisJKiBhbHBoYS9jb25maWctbnQuYmF0LCBpMzg2L2NvbmZpZy1udC5iYXQ6IERlbGV0ZWQuCisJKiBhbHBoYS9jb25maWctbnQuc2VkLCBpMzg2L2NvbmZpZy1udC5zZWQ6IE1vdmVkIGFyY2hpdGVjdHVyZQorCWluZGVwZW5kZW50IGNvbW1hbmRzIHRvIGNvbmZpZy93aW5udC9jb25maWctbnQuc2VkLgorCSogYWxwaGEvd2lubnQuaDogQWRkZWQgLURfTV9BTFBIQSB0byBDUFBfUFJFREVGSU5FUy4KKwlDaGFuZ2VkIExJQl9TUEVDIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBHbnUgbGQgZm9yIE5ULgorCSogaTM4Ni93aW5udC5oOiBBZGRlZCAtRF9jZGVjbD1fX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKS4KKwlDaGFuZ2UgTElCX1NQRUMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIEdudSBsZCBmb3IgTlQuCisJKiB3aW5udC9jb25maWctbnQuYmF0LCB3aW5udC9jb25maWctbnQuc2VkOiBOZXcgZmlsZXMuCisJKiB3aW5udC9kaXJlbnQue2MsaH0sIHdpbm50L2ZpeGluYy1udC5jLCB3aW5udC9oZWFkZXJzLm1hazogTmV3IGZpbGVzLgorCSogd2lubnQvbGQuYzogQ2hhbmdlZCBwcmVjZWRlbmNlIG9mIGxpYnJhcmllcyB0byBsb29rIGZvcgorCWxpYmZvby5saWIgYmVmb3JlIGxpYmZvby5hCisJQ2hhbmdlZCB0byB3b3JrIGxpa2UgR251IGxkIGZvciBOVC4KKwkqIHdpbm50L2xpYmdjYy5tYWssIHdpbm50L21rbGliZ2NjLmM6IE5ldyBmaWxlcy4KKwkqIHdpbm50L3NwYXdudi5jOiBDaGFuZ2VkIHNwYXduIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyB0byBfX3NwYXduKgorCWluc3RlYWQgb2Ygc3Bhd24qLgorCSogd2lubnQveC13aW5udDogTmV3IGZpbGUuCisJKiBmaXhpbmMtbnQuc2VkOiBOZXcgZmlsZS4KKwkqIGZpeGluYy53aW5udDogUmV3cml0dGVuIHRvIHVzZSBmaXhpbmMtbnQuc2VkLgorCisJKiBnY2MuYzogUmVtb3ZlIGZpeF9hcmd2IGtsdWRnZS4KKworVHVlIFNlcCAxMiAxMzoyNDoxNyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAocG93ZXIgc3ViZGkzIHBhdHRlcm4pOiBGaXggcGF0dGVybiB0byBoYXZlIDUKKwlhbHRlcm5hdGl2ZXMsIGFuZCBjb3JyZWN0IDR0aCBhbHRlcm5hdGl2ZSB0byBtYXRjaCByZWFsaXR5LgorCisJKiByczYwMDAubWQgKGFkZGRpMywgc3ViZGkzLCBuZWdkaTIpOiBBZGQgY29uc3RyYWludHMgc28gb3V0cHV0IHJlZworCWRvZXMgbm90IG92ZXJsYXAgb25lIHJlZyB3aXRoIG9uZSBvZiB0aGUgaW5wdXRzLgorCitUdWUgU2VwIDEyIDEzOjA5OjQ4IDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay5jIChvdXRwdXRfc2NjX2RpKTogRml4ZWQgZm9yIG5vbi1TR1NfQ01QX09SREVSIHN5bnRheC4KKworCSogY29sbGVjdDIuYyAoc2Nhbl9saWJyYXJpZXMpOiBDYXN0IGxzeW1zJyBhbGxvY2EgdG8gTERTWU0qLgorCitUdWUgU2VwIDEyIDEzOjA0OjEyIDE5OTUgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXNAYXBwbGkuc2UpCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X3N0bXRfZXhwcik6IERvIHN0YWNrIGFkanVzdCBpbiByaWdodCBwbGFjZS4KKworCSogc3RkYXJnLmggKF9fZ251Y192YV9saXN0KTogTWFrZSBjaGFyICogZm9yIE5ldEJTRC4KKworVHVlIFNlcCAxMiAxMjo0NDo0NiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZ2luY2x1ZGUvdmEtcHBjLmggKHZhX2FyZyk6IFJlb3JnYW5pemUgdG8gYXZvaWQgQklORF9FWFBScyBvZgorIAlhZ2dyZWdhdGUgb3IgYXJyYXkgdHlwZS4KKworVHVlIFNlcCAxMiAxMjo0MjoyNyAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBGaXggSFAvVVggPHN5cy9maWxlLmg+IGZvciBnKysgLXBlZGFudGljLWVycm9ycy4KKworCSogZml4aW5jbHVkZXMgKGN1cnNlcy5oKTogdHlwZWRlZiBib29sIG5lZWQgbm90IHRha2UgdXAgZW50aXJlIGxpbmUuCisKK01vbiBTZXAgMTEgMTk6MDU6NDIgMTk5NSAgU3RhbiBDb3ggIChjb3hzQGRnLXJ0cC5kZy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogRG9uJ3QgcmVjdXJzaXZlbHkgY2FsbCBkaWdlc3RfaW5pdAorCXdoZW4gaW4gdHJhZGl0aW9uYWwgbW9kZSBpZiB0aGUgdHlwZSBpcyBpbnZhbGlkLgorCitNb24gU2VwIDExIDE4OjU4OjI2IDE5OTUgIE9saXZlciBLZWxsb2dnICAoT2xpdmVyLktlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLm1kOiBBZGRlZCBETEIvRFNUQiBwZWVwaG9sZXMgZm9yIEhGbW9kZS4KKwlDb3JyZWN0ZWQgbW5lbW9uaWNzIGZvciBISW1vZGUgRFNUQiBwZWVwaG9sZS4KKworTW9uIFNlcCAxMSAxODo0ODowNiAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZy9mcC1iaXQuYyAoRkxPX3VuaW9uX3R5cGUpOiBSZW1vdmUgYml0ZmllbGRzIHRvIHNldCBzaWduLAorCWV4cG9uZW50LCBhbmQgbWFudGlzc2EsIGFuZCBhZGQgdmFsdWVfcmF3IGZpZWxkLCB3aGljaCBpcyBhbgorCWludGVnZXIgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuICBJZiBfREVCVUdfQklURkxPQVQgaXMgZGVmaW5lZCwKKwlwcm92aWRlIGxpdHRsZSBhbmQgYmlnIGVuZGlhbiBiaXRmaWVsZHMuICBJZiB0aGUgbWFjcm8KKwlGTE9BVF9CSVRfT1JERVJfTUlTTUFUQ0ggaXMgZGVmaW5lZCwgdXNlIGV4cGxpY2l0IGJpdGZpZWxkcy4KKwkocGFja19kLCB1bnBhY2tfZCk6IFN3aXRjaCB0byB1c2UgdmFsdWVfcmF3IGFuZCBleHBsaWNpdCBzaGlmdHMKKwlhbmQgbWFza3Mgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZXRoZXIgdGhlIHRhcmdldAorCWlzIGJpZyBvciBsaXR0bGUgZW5kaWFuIHVubGVzcyBGTE9BVF9CSVRfT1JERVJfTUlTTUFUQ0ggaXMKKwlkZWZpbmVkLiAgSWYgc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCwgcmVuYW1lIHRvIHBhY2tfZiBhbmQKKwl1bnBhY2tfZiwgc28gdGhlcmUgaXMgbm8gY29uZnVzaW9uIGluIHRoZSBkZWJ1Z2dlci4KKworCSogcnM2MDAwLmggKHJzNjAwMF9hYmkpOiBOZXcgZW51bWVyYXRpb24gdG8gZGVzY3JpYmUgd2hpY2gKKwlBQkkgd2UncmUgY29uZm9ybWluZyB0by4KKwkocnM2MDAwX3N0YWNrKTogVXNlIGFiaSBlbnVtLCBub3QgQUlYIHZzLiBWLjQgYm9vbGVhbi4KKwkoQVNNX09VVFBVVF9PUFRJT05TKTogTmV3IG1hY3JvIHRvIHByaW50IG91dHB1dCBvcHRpb25zIGluIC5zIGZpbGUuCisJKEFTTV9GSUxFX1NUQVJUKTogVXNlIGl0LgorCShvdXRwdXRfb3B0aW9ucyxyczYwMDBfZmxvYXRfY29uc3QpOiBEZWNsYXJlIG5ldyBmdW5jdGlvbnMuCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfb3B0aW9ueyxzfSk6IE5ldyBmdW5jdGlvbnMgdG8gd3JpdGUgLWYsIC1tLAorCWFuZCAtVyBvcHRpb25zIHRvIHRoZSBhc20gZmlsZS4KKwkocnM2MDAwX2Zsb2F0X2NvbnN0KTogTmV3IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGZsb2F0aW5nIHBvaW50CisJY29uc3RhbnRzIHBvcnRhYmx5IHVzZWQgaW4gc2lnbmVkLHVuc2lnbmVkIC0+IGRvdWJsZSBjb252ZXJzaW9ucy4KKwkocnM2MDAwX3N0YWNrX2luZm8sZGVidWdfc3RhY2tfaW5mbyk6IFVzZSBBQkkgZW51bWVyYXRpb24gaW5zdGVhZAorCW9mIEFJWCB2cy4gVi40IGJvb2xlYW4uCisKKwkqIHJzNjAwMC5tZCAoZmxvYXR7LHVuc31zaWRmMik6IENhbGwgcnM2MDAwX2Zsb2F0X2NvbnN0IHRvCisJcG9ydGFibHkgYnVpbGQgdGhlIHByb3BlciBmbG9hdGluZyBwb2ludCBjb25zdGFudCBmb3IgY29udmVyc2lvbnMuCisJKG1vdmRpKTogUHJvcGVybHkgaGFuZGxlIG1vdmRpIG9mIENPTlNUX3tJTlQsRE9VQkxFfSBvbiBsaXR0bGUKKwllbmRpYW4gc3lzdGVtcy4KKworCSogcnM2MDAwL3N5c3Y0LmggKExJQkdDQzJfV09SRFNfQklHX0VORElBTik6IERlZmluZSB0byBiZSAwLzEKKwlkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBlbmRpYW5lc3MuCisJKEFTTV9GSUxFX1NUQVJUKTogRGVmaW5lLCB0byBjYWxsIG91dHB1dF9vcHRpb25zIGluIGFkZGl0aW9uIHRvCisJb3V0cHV0X2ZpbGVfZGlyZWN0aXZlLgorCShUUkFNUE9MSU5FX1NJWkUpOiBDb3JyZWN0IHNpemUgdG8gbWF0Y2ggY29kZS4KKworCSogcnM2MDAwL2VhYml7LGxlfXNpbS5oIChDUFBfU1BFQyk6IERlZmluZSB0aGUgY29ycmVjdCBlbmRpYW4KKwltYWNybyBmb3IgdmFyYXJncy9zdGRhcmdzIHVzZS4KKworTW9uIFNlcCAxMSAxODo0MTo1OCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGMtZGVjbC5jIChyZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UpOiBGb3IgVFlQRV9ERUNMcywgcmV0dXJuIDAKKwlpZiBUWVBFX01BSU5fVkFSSUFOVCBvZiBvbGQgdHlwZSBpcyBzYW1lIGFzIG5ldyB0eXBlLgorCitNb24gU2VwIDExIDE3OjM5OjM1IDE5OTUgIFJvYiBSeWFuIChyb2JyQGNtdS5lZHUpCisKKwkqIHhjb2Zmb3V0LmMgKHhjb2ZmX2lubGluaW5nKTogTmV3IHZhcmlhYmxlLCB1c2VkIGluIHBsYWNlIG9mCisJeGNvZmZfY3VycmVudF9pbmNsdWRlX2ZpbGUgd2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHVzZQorCWFic29sdXRlIGxpbmUgbnVtYmVycy4KKwkoeGNvZmZvdXRfc291cmNlX2ZpbGUpOiBTd2l0Y2hlZCB0byB1c2luZyB4Y29mZl9pbmxpbmluZyB0bworCWRldGVybWluZSB3aGVuIHRvIGVtaXQgLmJpLy5laSBkaXJlY3RpdmVzLgorCitNb24gU2VwIDExIDE2OjU1OjA2IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CisKKwkqIG02OGsubWQgKGNtcGRpKTogQ2hhbmdlIHBhdHRlcm5zIHRvIGFsbG9jYXRlIHNjcmF0Y2ggcmVnaXN0ZXIgYXQKKwlSVEwgZ2VuZXJhdGlvbiB0aW1lLgorCSh0c3RkaSk6IExpa2V3aXNlLgorCitTdW4gU2VwICAzIDA5OjAzOjUwIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoc2l6ZV9iaW5vcCk6IERvbid0IHBhc3MgMSB0byBOT1RSVU5DLgorCitUaHUgQXVnIDMxIDE5OjI3OjAwIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGxpYmdjYzIuYzogSW5jbHVkZSBsb25nbG9uZy5oLgorCVtMX3VkaXZkaTMgfHwgTF9kaXZkaTMgfHwgTF91bW9kZGkzIHx8IExfbW9kZGkzXSAoX191ZGl2bW9kZGk0KToKKwlEZWZpbmUgdGhpcyBgc3RhdGljIGlubGluZScgd2hlbiBkZWZpbmluZyB0aGVzZSwgc28gdGhleSBhbGwKKwlyZW1haW4gbGVhZiBmdW5jdGlvbnMuCisKK1RodSBBdWcgMzEgMTg6Mzg6MjEgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGMtcGFyc2UuaW4gKGVuZHNfaW5fbGFiZWwpOiBOZXcgJXVuaW9uIG1lbWJlci4KKwkoc3RtdHMsIHN0bXRfb3JfbGFiZWwpOiBVc2UgbmV3IG1lbWJlciB0byBhdm9pZCBsZXhpY2FsIGxvb2thaGVhZCBoYWNrLgorCShsaW5lbm9fc3RtdF9vcl9sYWJlbHMpOiBOZXcgcnVsZS4KKwkobGluZW5vX3N0bXRfb3JfbGFiZWwsIHN0bXRfb3JfbGFiZWwpOiBZaWVsZCBub256ZXJvIGlmIGl0IGVuZHMKKwlpbiBhIGxhYmVsLgorCitUaHUgQXVnIDMxIDA4OjMxOjQwIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjYW5vbl9oYXNoLCBDT05TVF9ET1VCTEUpOiBIYXNoIGludGVnZXIgYW5kIHJlYWwKKwlkaWZmZXJlbnRseS4KKwkqIHZhcmFzbS5jIChzdHJ1Y3QgcnR4X2NvbnN0KTogQWRkIG5ldyBmaWVsZCBESSB0byB1bmlvbi4KKwkoZGVjb2RlX3J0eF9jb25zdCwgY2FzZSBDT05TVF9ET1VCTEUpOiBVc2UgdG8gaGFzaCBDT05TVF9ET1VCTEUKKwlyZXByZXNlbnRpbmcgYW4gaW50ZWdlci4KKworCSogdmEtYWxwaGEuaCAoX19nbnVjX3ZhX2xpc3QpOiBNYWtlIF9fb2Zmc2V0IGFuIGludC4KKwkqIGFscGhhLmMgKGFscGhhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBQcm9wZXJseSBjb21wdXRlIGFkZHJlc3MKKwlvZiBfX29mZnNldCBib3RoIGJvdGggT1NGIGFuZCBXSU5OVC4KKworCSogeG0tYWxwaGEuaCAoc2Jyayk6IERvbid0IGRlZmluZSBoZXJlLgorCSogZ21vbi5jIChzYnJrKTogRGVmaW5lIGhlcmUgZm9yIF9fYWxwaGEuCisJKiB0b3BsZXYuYyAoc2Jyayk6IExpa2V3aXNlLgorCSogbWlwcy10ZmlsZS5jIChtYWxsb2MsIGNhbGxvYywgcmVhbGxvYyk6IERvbid0IGRlZmluZSBmb3IgYW55Ym9keS4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogQWRkIGNhc2UgZm9yIG91dHB1dCByZWxvYWQgb2YgYSBTVUJSRUcKKwlvZiBhIGhhcmQgcmVnIHdoZW4gb3V0cHV0IG1vZGUgaXMgaW52YWxpZCBmb3IgdGhhdCBtb2RlLgorCUluIGJvdGggdGhhdCBjYXNlIGFuZCBleGlzdGluZyBjYXNlIGZvciBpbiwgZG9uJ3QgcmVtb3ZlIFNVQlJFRy4KKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBFbWl0IFJFTE9BRF9PVEhFUiBvdXRwdXQgcmVsb2FkcyBsYXN0LgorCitUdWUgQXVnIDI5IDE5OjE2OjA2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlLCBjYXNlIEFfUEFDS0VEKTogQ2hlY2sgaXNfdHlwZSBmaXJzdC4KKwkoZGVjbF9hdHRyaWJ1dGUsIGNhc2UgQV9UX1VOSU9OKTogTGlrZXdpc2UuCisJRG9uJ3QgYWNjZXNzIFRZUEVfRklFTERTIGlmIERFQ0wgaXMgemVyby4KKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogSWYgdHJhbnNwYXJlbnRfdW5pb24gYXR0cmlidXRlCisJc3BlY2lmaWVkLCB2YWxpZGF0ZSBpdCBvbmNlIHdlIGZpbmlzaCBsYXlpbmcgdGhlIHVuaW9uIG91dC4KKworTW9uIEF1ZyAyOCAwNTo1ODowMyAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogYXJtLmMgKGFybV9nZW5fbW92c3RycWkpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGNvbnN0X3N4dGVlbi4KKworCSogYmktbGV4ZXIuYyAoYnVmZmVyLCBpbnBvaW50KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCisKKwkqIGkzNzAvbXZzLmgsIGkzNzAvbXZzMzcwLmMgKG12c19sYWJlbF9lbWl0dGVkKTogUmVuYW1lZAorCWZyb20gbXZzX2xhYmVsX2VtaXRlZC4KKworCSogbXNkb3MvY29uZmlndXIuYmF0OiBGaXggbWlzc3BlbGxpbmcgb2YgYG1haW50YWluZXItY2xlYW4nLgorCitTYXQgQXVnIDI2IDA2OjU3OjE3IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChwdXNoX3NlY29uZGFyeV9yZWxvYWQpOiBJZiBYIGlzIGEgcGFyYWRveGljYWwgU1VCUkVHLAorCWdldCBtb2RlIGFuZCB0aGluZyB0byByZWxvYWQgZnJvbSBpbnNpZGUuCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRG8gbm90aGluZyBmb3IgU1VCUkVHIHdob3NlCisJb3BlcmFuZCBpcyB1bnVzZWQgc3Vic2VxdWVudGx5LgorCUluIHNlY29uZGFyeSByZWxvYWQgY2FzZSwgaWYgcGFyYWRveGljYWwgU1VCUkVHIGZvciBvdXRwdXQsIHJlbG9hZAorCXRoaW5nIGluc2lkZSBTVUJSRUcsIGp1c3QgbGlrZSBnZW5fcmVsb2FkLgorCitGcmkgQXVnIDI1IDE5OjI2OjUzIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjLXR5cGVjay5jIChzZXRfaW5pdF9sYWJlbCk6IERvbid0IGRpZSBpZiBhbiBlbnRpcmUKKwlicmFjZS1wYWlyIGxldmVsIGlzIHN1cGVyZmx1b3VzIGluIHRoZSBjb250YWluaW5nIGxldmVsLgorCitGcmkgQXVnIDI1IDE5OjIyOjQ2IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChwb3dlcnBjeyxsZX0tZWFiaXNpbSk6IEFkZCBzdXBwb3J0IGZvciBhIG5ldyB0YXJnZXQKKwl0aGF0IHdvcmtzIHVuZGVyIHRoZSBQU0lNIHNpbXVsYXRvci4KKwkqIHJzNjAwMC9lYWJpc2ltLmgsIHJzNjAwMC9lYWJpbGVzaW0uaCwgcnM2MDAwL3QtZWFiaXNpbTogTmV3IGZpbGVzLgorCisJKiByczYwMDAvZWFiaS5oIChTVFJJQ1RfQUxJR05NRU5UKTogSWYgbGl0dGxlIGVuZGlhbiwgYWx3YXlzIHNldAorCXN0cmljdCBhbGlnbm1lbnQgdG8gMS4KKworRnJpIEF1ZyAyNSAxOToyMjoyMyAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLm1kICh7YWRkLHN1YixtdWxzaX1kaTMpOiBTdXBwb3J0IGJvdGggZW5kaWFuIHBvc3NpYmlsaXRpZXMuCisJKG5lZ2RpMik6IExpa2V3aXNlLgorCitGcmkgQXVnIDI1IDE5OjEwOjQxIDE5OTUgIE9saXZlciBLZWxsb2dnICAoT2xpdmVyLktlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUpCisKKwkqIDE3NTBhLm1kOiBBZGRlZCBwZWVwaG9sZSBkZWZpbml0aW9ucyBmb3IgTG9hZC9TdG9yZSBCYXNlIGluc25zCisJYW5kIGVsaW1pbmF0aW5nIHJlZHVuZGFudCBsb2FkIGluIGFuIGVxdWl2YWxlbnQgc3RvcmUvbG9hZCBzZXF1ZW5jZS4KKworRnJpIEF1ZyAyNSAxODozMzoyNyAxOTk1ICBDcmFpZyBCdXJsZXkgIChidXJsZXlAZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChyZXBvcnRfZXJyb3JfZnVuY3Rpb24pOiBEb24ndCBhdHRlbXB0IHRvIHVzZSBpbnB1dAorCWZpbGUgc3RhY2sgdG8gaWRlbnRpZnkgbmVzdGluZyBvZiAjaW5jbHVkZSdzIGlmIGZpbGUgbmFtZSBvZmxvY2F0aW9uCisJZGlhZ25vc2VkIGlzIG5vdCBzYW1lIGFzIGlucHV0X2ZpbGVuYW1lLgorCitGcmkgQXVnIDI1IDA3OjMxOjQ3IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogU3dpdGNoIHRvIGZ1bmN0aW9uIG9ic3RhY2suCisKK01vbiBBdWcgMjEgMTM6Mjk6NTQgMTk5NSAgSiJvcm4gUmVubmVja2UgKGFteWxhYXJAbWVvbHlvbi5oYW5zZS5kZSkKKworCSogaTM4Ni5jIChhcml0aG1ldGljX2NvbXBhcmlzb25fb3BlcmF0b3IpOiBOZXcgZnVuY3Rpb24uCisJKHByaW50X29wZXJhbmQpOiBUYWtlIGludG8gYWNjb3VudCB0aGF0IG92ZXJmbG93IGZsYWcgaXMgbm90CisJc2V0IHRoZSBzYW1lIGFzIGFmdGVyIGEgY29tcGFyZSBpbnN0cnVjdGlvbi4KKwkqIGkzODYubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBVc2UKKwlhcml0aG1ldGljX2NvbXBhcmlzb25fb3BlcmF0b3IgdG8gZGVjaWRlIGlmIHRoZXJlIGlzIGNvbXBhcmlzb24KKwlzdWl0YWJsZSB0byBiZSBleHByZXNzZWQgYnkgY29uZGl0aW9uIGNvZGUgZnJvbSBhbiBhcml0aG1ldGljIG9wLgorCitNb24gQXVnIDIxIDEzOjI2OjEzIDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay5tZCAoYWRkZGkzLCBzdWJkaTMpOiAiJiIgYWRkZWQgdG8gY2xvYmJlcidzIGNvbnN0cmFpbnRzLgorCitNb24gQXVnIDIxIDEyOjExOjE0IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogdC1zcGFyY2xpdGUgKE1VTFRJTElCXyosIExJQkdDQywgSU5TVEFMTF9MSUJHQ0MpOiBEZWZpbmUuCisKKwkqIHNoLm1kIChtb3ZkaS0xLCBtb3ZkZi0xKTogTWFrZSBjb25kaXRpb25hbCBvbiByZWxvYWRfY29tcGxldGVkLAorCWRlbGV0ZSBjb25kaXRpb25zIGNoZWNraW5nIGZvciBwc2V1ZG8gcmVnaXN0ZXJzIGFuZCBRIGFkZHJlc3Nlcy4KKwlBZGQgY29kZSB0byBoYW5kbGUgU1VCUkVHLgorCisJKiBsb2NhbC1hbGxvYy5jICh3aXBlX2RlYWRfcmVnKTogTWFrZSBhIHJlZ2lzdGVyIG1lbnRpb25lZCBpbiBhCisJUkVHX0lOQyBub3RlIGRpZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uCisKKwkqIG02OGsubWQ6IEZvciBhbGwgZGJyYSBwYXR0ZXJuLCBjaGFuZ2UgY29uc3RyYWludCBmcm9tICdnJyB0byAnZCpnJy4KKworCSogTWFrZWZpbGUuaW46ICh1bmRlcnNjb3JlLmMpOiBSZW5hbWUgcnVsZSB0byBzdGFtcC11bmRlciwgYW5kCisJdG91Y2ggc3RhbXAtdW5kZXIgYXQgdGhlIGVuZC4gIEFkZCBuZXcgcnVsZSBmb3IgdW5kZXJzY29yZS5jIHRoYXQKKwlkZXBlbmRzIG9uIHN0YW1wLXVuZGVyLgorCisJKiBzaC5jIChyZWdfdW51c2VkX2FmdGVyKTogRm9yIGEgU0VRVUVOQ0UsIG1ha2Ugc3VyZSBhbGwgaW5zbnMgYXJlCisJc2FmZSBiZWZvcmUgcmV0dXJuaW5nIDEuCisKKwkqIHNoLmggKFBST01PVEVfRlVOQ1RJT05fQVJHUywgUFJPTU9URV9GVU5DVElPTl9SRVRVUk4pOiBEZWZpbmUuCisKKwkqIHNoLmMgKG91dHB1dF9zdGFja19hZGp1c3QpOiBBZGQgbmV3IGFyZ3VtZW50IHJlZy4gIFVzZSBpdCBpbnN0ZWFkCisJb2Ygc3RhY2tfcG9pbnRlcl9ydHguCisJKHNoX2V4cGFuZF9wcm9sb2d1ZSwgc2hfZXhwYW5kX2VwaWxvZ3VlKTogUGFzcyBuZXcgYXJndW1lbnQgdG8KKwlvdXRwdXRfc3RhY2tfYWRqdXN0LgorCitTYXQgQXVnIDE5IDE3OjM0OjE1IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogc3BhcmMvZ21vbi1zb2wyLmMgKF9tY291bnQpOiBEZWZpbmUuCisJKiBzcGFyYy9zb2wyLmggKFNUQVJURklMRV9TUEVDLCBFTkRGSUxFX1NQRUMpOiBEZWxldGUgc3VwZXJmbHVvdXMKKwktcGcgdGVzdHMuCisJKExJTktfU1BFQyk6IEFkZCBsaWJwIGRpcmVjdG9yaWVzIHRvIC1ZIHdoZW4gLXBnLgorCisJKiB1bnJvbGwuYyAoY2FsY3VsYXRlX2dpdl9pbmMpOiBIYW5kbGUgaW5jcmVtZW50IGNvbXB1dGVkIGJ5IEFTSElGVC4KKworU2F0IEF1ZyAxOSAxNzoyODo1NiAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIG02OGsubWQgKHN1YmRpMyk6IFNob3VsZCBub3QgYmUgY29tbXV0YXRpdmUuCisJKG9uZV9jbXBsZGkyKTogRml4ZWQgdHlwbyB3aXRoIHJlZ2lzdGVyIG9wZXJhbmQuCisKK1NhdCBBdWcgMTkgMTc6MjA6NDMgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5jIChvdXRwdXRfcHJvbG9nKTogRml4dXAgY29kZSB0byBzZXQgc3RhY2sgcG9pbnRlcgorCWlmIHN0YWNrIHNpemUgPiAzMmsuCisJKiByczYwMDAubWQgKHN5bmNfaXN5bmMpOiBSZW5hbWVkIGZyb20gc3luYzsgYWRkZWQgYW4gaXN5bmMgaW5zbgorCWFmdGVyIHRoZSBzeW5jIHRvIHByb3Blcmx5IGRlYWwgd2l0aCBQb3dlclBDJ3Mgd2l0aCBzcGxpdCBJL0QgY2FjaGVzLgorCSogc3lzdjQuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogU3luYyBmdW5jdGlvbiBub3cgbmFtZWQgc3luY19pc3luYy4KKworU2F0IEF1ZyAxOSAxNzowNzowOSAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgorCisJKiBoODMwMC5oIChTVEFUSUNfQ0hBSU5fUkVHTlVNKTogVXNlIHIzLgorCShSRUdJU1RFUl9OQU1FUyk6IFByaW50IHI3IGFzIHNwLgorCShBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTKTogUmVjb2duaXplIHI3LgorCShBU01fT1VUUFVUX0FMSUdOKTogQWxpZ25tZW50IGlzIHBvd2VyIG9mIDIuCisJKiBoODMwMC5tZCAoZmFuY3lfYnRzdCxmYW5jeV9idHN0MSk6IEJyYW5jaCB0YXJnZXQgbXVzdCBiZQorCW9wZXJhbmQgMCBmb3IgbGVuZ3RoIGF0dHJpYnV0ZSB0byB3b3JrLgorCitTYXQgQXVnIDE5IDE2OjQzOjExIDE5OTUgIFBhdWwgRnJhbmtsaW4gIDxwYXVsQGNzLndhc2hpbmd0b24uZWR1PgorCisJKiBhc3NlcnQuaDogRGVjbGFyZSBfX2VwcmludGYgd2l0aCBhdHRyaWJ1dGUgbm9yZXR1cm4uCisKK1NhdCBBdWcgMTkgMTY6NDA6MTIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHN0ZGRlZi5oOiBEb24ndCBkZWZpbmUgd2NoYXJfdCBpZiBfX2NwbHVzcGx1cyBpcyBkZWZpbmVkLgorCitUdWUgQXVnIDE1IDE4OjAxOjAxIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKHdhcm5pbmdfd2l0aF9saW5lKTogRml4IHR5cG8gaW4gZGVjbGFyYXRpb24gd2hlbgorCSFIQVZFX1ZQUklOVEYgYW5kIGRlZmluZWQgKF9fU1REQ19fKS4KKworVHVlIEF1ZyAxNSAxNzo1Nzo1NCAxOTk1ICBTdGVwaGVuIEwgTW9zaGllciA8bW9zaGllckB3b3JsZC5zdGQuY29tPgorCisJKiByZWFsLmMgKGVkaXYsIGVtdWwpOiBTZXQgc2lnbiBiaXQgb2YgSUVFRSAtMC4wIHJlc3VsdC4KKworVHVlIEF1ZyAxNSAxNzo0OTo0NyAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wKTogT25seSBzYWZlIGlmIEVYUCBpcyB2YXJpYWJsZS1zaXplIGFuZCBYCisJaXMgQkxLbW9kZS4KKworCSogc3RtdC5jIChmaXh1cF9nb3Rvcyk6IFdoZW4gc29tZSBmaXh1cHMgZG9uZSwgcmVzZXQgdG8gcG9pbnQKKwl0byBuZXh0IGluc3RlYWQgb2YgemVyb2luZyBUUkVFX1ZBTFVFLCB3aGljaCBtYXkgYmUgc2hhcmVkLgorCitNb24gQXVnIDE0IDA5OjE1OjQ1IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIG02OGsvbTY4a2VtYi5oIChTVEFSVEZJTEVfU1BFQyk6IERlZmluZSBhcyBlbXB0eS4KKworTW9uIEF1ZyAxNCAwOTowODo1NyAxOTk1ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KKworCSogdmF4LmMgKHZtc19jaGVja19leHRlcm5hbCk6IFVwZGF0ZSBgcGVuZGluZ19oZWFkJyBwcm9wZXJseQorCXdoZW4gdGhlIGZpcnN0IGxpc3QgZWxlbWVudCBpcyByZW1vdmVkLgorCitNb24gQXVnIDE0IDA5OjAxOjMyIDE5OTUgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGFkZGVyLmN5Z251cy5jb20+CisKKwkqIHBhLm1kIChjYWxsIGV4cGFuZGVycyk6IEVtaXQgYSBibG9ja2FnZSBpbnNuIGFmdGVyIHJlc3RvcmluZworCSVyMTkgd2hlbiBnZW5lcmF0aW5nIFBJQy4KKworU3VuIEF1ZyAxMyAyMTo1ODo0OSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbik6IENoYW5nZSB0ZXh0IG9mIHVuc3VwcG9ydGVkIC1nIG9wdGlvbiB3YXJuaW5nLgorCitTdW4gQXVnIDEzIDIxOjQ3OjU3IDE5OTUgIEFuZHJldyBNY0NhbGx1bSAgPG1jY2FsbHVtQGdyYXBoaXRlLmNzLnJvY2hlc3Rlci5lZHU+CisKKwkqIG9iamMvc2VsZWN0b3IuYyAoc2VsX2dldF9hbnlfdHlwZWRfdWlkKTogTmV3IGZ1bmN0aW9uLgorCSogb2JqYy9vYmpjLWFwaS5oIChzZWxfZ2V0X2FueV90eXBlZF91aWQpOiBEZWNsYXJlIG5ldyBmdW5jdGlvbi4KKworU3VuIEF1ZyAxMyAyMTo0MzoxNyAxOTk1ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KKworCSogYy10eXBlY2suYyAoY19leHBhbmRfYXNtX29wZXJhbmRzKTogQ2hlY2sgZm9yIHJlYWQtb25seSBvdXRwdXQKKwlvcGVyYW5kIHdoZXJlIHRoZSB2YXJpYWJsZSBpcyByZWFkLW9ubHkgYnV0IHRoZSB0eXBlIGlzIG5vdC4KKworU3VuIEF1ZyAxMyAyMToxNjoxMiAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmMgKGRpcmVjdF9yZXR1cm4pOiBFcGlsb2d1ZSByZXF1aXJlZCBpZiBDUiBzYXZlZC4KKworU3VuIEF1ZyAxMyAxOTowOToyNSAxOTk1ICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogY29uZmlndXJlIChocHBhMS4/LWhwLWhwdXgxMCk6IFJlY29nbml6ZSBhbmQgdHJlYXQganVzdCBsaWtlIGhwdXg5LgorCitTdW4gQXVnIDEzIDE5OjA3OjIzIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIGk5NjAubWQgKG1vdmRpIG1hdGNoZXJzKTogRml4IHNyYy9kZXN0IG9yZGVyIGluIHVuYWxpZ25lZAorCXJlZy0+cmVnIGNhc2UuCisKK1N1biBBdWcgMTMgMTg6NDk6MDEgMTk5NSAgREogRGVsb3JpZSAgPGRqQGRlbG9yaWUuY29tPgorCisJKiBpMzg2L3htLWRvcy5oIChIQVZFX1NUUkVSUk9SKTogTmV3IGRlZmluaXRpb24uCisKKwkqIG1zZG9zL2NvbmZpZ3VyLmJhdDogQWRkIG1pc3NpbmcgY2FycmlhZ2UgcmV0dXJuLgorCitTdW4gQXVnIDEzIDE4OjQwOjU1IDE5OTUgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAaGlnaGxhbmQuY29tLmF1PgorCisJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogQWRkIHZhLXBwYy5oLgorCitTdW4gQXVnIDEzIDE4OjM2OjE3IDE5OTUgIE0uIFdhcm5lciBMb3NoICA8aW1wQHZpbGxhZ2Uub3JnPgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBUeXBlICcwJy4uJzQnIG9wZXJhbmRzIG1heQorCWFsbG93IHJlZ3MsIHNvIG1vdmUgdGhlbSB0byB0aGUgZGVmYXVsdCBjYXNlLgorCitTdW4gQXVnIDEzIDE4OjMyOjM1IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKHdhcm5pbmdfd2l0aF9saW5lKTogTmV3IGZ1bmN0aW9uLgorCSh0cmlncmFwaF9wY3ApOiBVc2UgaXQsIHRvIGF2b2lkIHJlcG9ydGluZyBsaW5lIG51bWJlci4KKwkodndhcm5pbmdfd2l0aF9saW5lKTogRG9uJ3QgcmVwb3J0IGxpbmUgbnVtYmVyIGlmIHplcm8uCisKK1N1biBBdWcgMTMgMTg6MjM6MDggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jICh2bWVzc2FnZSk6IFN1cHBvcnQgZm91ciBhcmd1bWVudHMuCisKK1N1biBBdWcgMTMgMTg6MTk6NTEgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3N0ZGFyZy5oOiBBZGQgcHBjIHN2cjQgY2FsbGluZyBzZXF1ZW5jZSBzdXBwb3J0LgorCSogZ2luY2x1ZGUvdmFyYXJncy5oOiBMaWtld2lzZS4KKwkqIGdpbmNsdWRlL3ZhLXBwYy5oOiBOZXcgZmlsZS4KKworU3VuIEF1ZyAxMyAxODowNToyMCAxOTk1ICBNaWNoYWVsIEdzY2h3aW5kICA8bWlrZUBkb25vdXNzYS52bHNpdmllLnR1d2llbi5hYy5hdD4KKworCSogY29uZmlndXJlIChwZHAtKi0qKTogQWRkIHN1cHBvcnQgZm9yIHQtcGRwMTEuCisJKiB0LXBkcDExOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmluIChMSUJHQ0MyX0NGTEFHUyk6IEFkZCBUQVJHRVRfTElCR0NDMl9DRkxBR1MuCisKK1N1biBBdWcgMTMgMTQ6NTA6NTggMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbik6IEFsd2F5cyBjYWxsIHNkYm91dF9iZWdpbl9mdW5jdGlvbgorCWFuZCB4Y29mZm91dF9iZWdpbl9mdW5jdGlvbiwgZXZlbiBpZiBubyBsaW5lIG51bWJlciBpbmZvLgorCisJKiBtaXBzL2FiaTY0LmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBJbiBpZiBzdGF0ZW1lbnQsIG9ubHkKKwlzdWJ0cmFjdCBvbmUgZm9yIHN0ZGFyZy4gIERvbid0IHN1YnRyYWN0IFBSRVRFTkRfU0laRSBmcm9tCisJYXJndW1lbnQgcG9pbnRlciB3aGVuIGNhbGN1bGF0aW5nIHN0YWNrIGFkZHJlc3MuCisJKiBtaXBzLmggKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogRm9yIDY0IGJpdCBBQkksIHN1YnRyYWN0CisJY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZSB3aGVuIGNvbnZlcnRpbmcgZnJvbSBhcmd1bWVudAorCXBvaW50ZXIuCisJKiB2YS1taXBzLmggKHZhX3N0YXJ0KTogRm9yIHN0ZGFyZywgZGVsZXRlIHNlcGFyYXRlIGRlZmluZSBmb3IKKwk2NCBiaXQgQUJJLiAgRm9yIHZhcmFyZ3MsIGRvbid0IHN1YnRyYWN0IDY0LCBhbmQgb25seSBhZGQgLTggd2hlbgorCWFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXJlIHVzZWQuCisKKwkqIGdjYy5jIChtYWluKTogV2hlbiBjb25jYXQgZ2NjX2V4ZWNfcHJlZml4IGFuZAorCXN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXgsIHB1dCBtYWNoaW5lX3N1ZmZpeCBpbiB0aGUgbWlkZGxlLgorCisJKiBpcmlzNi5oIChJTklUX1NFQ1RJT05fQVNNX09QKTogRG9uJ3QgZGVmaW5lLgorCShMRF9JTklUX1NXSVRDSCwgTERfRklOSV9TV0lUQ0gsIEhBU19JTklUX1NFQ1RJT04pOiBEb24ndCB1bmRlZi4KKwkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUiwgQVNNX09VVFBVVF9ERVNUUlVDVE9SKTogSWZkZWYgb3V0LgorCSogY29uZmlndXJlIChtaXBzLXNnaS1pcml4NiwgbWlwcy1zZ2ktaXJpeDVjcm9zczY0KTogRGVmaW5lCisJdXNlX2NvbGxlY3QyIHRvIHllcy4KKworCSogY29tYmluZS5jIChtb3ZlX2RlYXRocyk6IFdoZW4gaGF2ZSBhIG11bHRpLXJlZyBoYXJkIHJlZ2lzdGVyLAorCWlmIGRvbid0IGZpbmQgYSBub3RlLCB0aGVuIHJlY3VyIGZvciBlYWNoIGluZGl2aWR1YWwgaGFyZCByZWdpc3Rlci4KKworCSogY3NlLmMgKHNldF9ub252YXJ5aW5nX2FkZHJlc3NfY29tcG9uZW50cyk6IEhhbmRsZSBhZGRyZXNzZXMKKwl3aGljaCBhcmUgdGhlIHN1bSBvZiB0d28gY29uc3RhbnQgcHNldWRvIHJlZ3MuCisJKGNzZV9ydHhfYWRkcl92YXJpZXNfcCk6IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5pbiAoZ2Zsb2F0LmgpOiBBZGQgYSAtIGJlZm9yZSB0aGUgcm0gY29tbWFuZC4KKworCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBTZXQgZGVzdF9sb29wIG9ubHkgaWYKKwlKVU1QX0xBQkVMIChpbnNuKSBpcyBub24temVyby4KKworTW9uIEp1bCAzMSAxNDozMTo1MyAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBBdm9pZCBjbG9iYmVyaW5nIFZ4V29ya3MgZHJ2L25ldGlmL2lmX21lZC5oIGZpbGUuCisKK1NhdCBKdWwgMjkgMTY6MjE6NDIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGNvbGxlY3QyLmM6IChYQ09GRl9TQ0FOX0xJQlMpOiBEZWZpbmUgaWYgT0JKRUNUX0ZPUk1BVF9DT0ZGIGFuZAorCVhDT0ZGX0RFQlVHR0lOR19GT1JNQVQuCisJKFNDQU5fTElCUkFSSUVTKTogQWxzbyBkZWZpbmUgaWYgWENPRkZfU0NBTl9MSUJTLgorCitTYXQgSnVsIDI5IDE2OjE5OjQyIDE5OTUgIFN0dWFydCBELiBHYXRobWFuICA8c3R1YXJ0QGJtc2kuY29tPgorCisJKiBjb2xsZWN0Mi5jIChzY2FuX2xpYnJhcmllcyk6IEltcGxlbWVudCBmb3IgQUlYLgorCitTYXQgSnVsIDI5IDA5OjU5OjMzIDE5OTUgIE1pY2hhZWwgR3NjaHdpbmQgIDxtaWtlQGxhbmFpLnZsc2l2aWUudHV3aWVuLmFjLmF0PgorCisJKiBjb25maWd1cmU6IChwZHAxMS0qLWJzZCkgTmV3IHRhcmdldC4KKwkqIDJic2QuaDogTmV3IGZpbGUuCisKKwkqIHBkcDExLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEhhbmRsZSBDT05TVF9JTlQgcGFyYW1ldGVycyBwcm9wZXJseS4KKwkqIHBkcDExLmggKFJUWF9DT1NUUyk6IEZpbGwgaW4gbWlzc2luZyBkZWZhdWx0IHZhbHVlcy4KKwkqIHBkcDExLm1kICh0cnVuY2Rmc2YyLCBleHRlbmRzZmRmMiwgZmxvYXRzaWRmMiwgZml4X3RydW5jZGZzaTIpOgorCUFsbG93IHJlZ2lzdGVyIHBhcmFtZXRlcnMsIHJlcXVpcmVkIGJ5IGdjYyB0byBnZW5lcmF0ZSBjb3JyZWN0IGNvZGUuCisJKiB4bS1wZHAxMS5oOiBJbmNsdWRlIHRtLmguCisKK1NhdCBKdWwgMjkgMDk6NTU6MTcgMTk5NSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGNvbmZpZ3VyZSAobTY4ay0qLWxpbnV4KmFvdXQqLCBtNjhrLSotbGludXgqKTogTmV3IHRhcmdldHMuCisJKiBtNjhrL2xpbnV4LWFvdXQuaCwgbTY4ay9saW51eC5oLCBtNjhrL3QtbGludXgsIG02OGsveG0tbGludXguaDogTmV3LgorCSogbTY4ay5tZCBbVVNFX0dBU106IE91dHB1dCBgamJzcicgaW5zdGVhZCBvZiBganNyJyBmb3Igbm9ybWFsCisJZnVuY3Rpb24gY2FsbHMgYW5kIGBic3IubCcgaW5zdGVhZCBvZiBgYnNyJyBmb3IgcGljIGZ1bmN0aW9uIGNhbGxzLgorCitTYXQgSnVsIDI5IDA5OjQ0OjEzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogc2guaCAoQ0FOX0RFQlVHX1dJVEhPVVRfRlApOiBDb21tZW50IG91dC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEsIGNhc2UgUExVUyk6IFdoZW4gaGFuZGxlIFNVQlJFRywKKwlhZGQgU1VCUkVHX1dPUkQgb2Zmc2V0IHRvIFNVQlJFR19SRUcgcmVnaXN0ZXIgbnVtYmVyLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzc18xLCBjYXNlIFNVQlJFRyk6IElmIGEgcHNldWRvIHJlZ2lzdGVyIGluc2lkZQorCWEgU1VCUkVHIGlzIGxhcmdlciB0aGFuIHRoZSBjbGFzcywgdGhlbiByZWxvYWQgdGhlIGVudGlyZSBTVUJSRUcuCisJKiBzaC5oIChTVUJSRUdfT0tfRk9SX0lOREVYX1ApOiBOZXcgbWFjcm8uCisJKElOREVYX1JFR0lTVEVSX1JUWF9QKTogVXNlIGl0LgorCitTYXQgSnVsIDI5IDA5OjMzOjE5IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIG1pcHMvbmV0YnNkLmggKENQUF9TUEVDKTogRml4IHR5cG8uCisKKwkqIGNvbmZpZ3VyZSAoYTI5ay0qLXZ4d29ya3MqKTogRGVmaW5lIGV4dHJhX3BhcnRzIGZvciBjcnR7YmVnaW4sZW5kfS5vLgorCSogdC1hMjlrLCB0LWEyOWtiYXNlLCB0LXZ4MjlrICh7LENST1NTX31MSUJHQ0MxKTogRGVmaW5lIGFzIGVtcHR5LgorCitTYXQgSnVsIDI5IDA5OjE1OjE3IDE5OTUgIEplZmZyZXkgQS4gTGF3ICA8bGF3QHJ0bC5jeWdudXMuY29tPgorCisJKiBwYS9saWIyZnVuY3MuYXNtIChnY2NfcGx0X2NhbGwpOiBSZXdyaXRlIHRvIGF2b2lkIHRoZSBuZWVkCisJZm9yIGJlaW5nIGNhbGxlZCBieSBfc3I0ZXhwb3J0LiAgSW5saW5lIGV4cGFuZCAkJGR5bmNhbGwgdG8KKyAJYXZvaWQgdGhlIG5lZWQgZm9yIGxvbmctY2FsbCBhbmQgUElDIHN1cHBvcnQuCisKK1NhdCBKdWwgMjkgMDc6MzA6MDQgMTk5NSAgT2xpdmVyIEtlbGxvZ2cgIChPbGl2ZXIuS2VsbG9nZ0BzcGFjZS5vdG4uZGFzYS5kZSkKKworCSogbXMxNzUwLmluYyAodWNpbS5tLCB1Y3IubSwgdWMubSk6IE5ldy4KKwkqIDE3NTBhLm1kIChjbXBxaSk6IEFjY291bnQgZm9yIHVuc2lnbmVkIGNvbXBhcmlzb25zLgorCShyb3RycWkzLCByb3RyaGkzKTogUmV3b3JrZWQuCisJKiAxNzUwYS5jIChub3RpY2VfdXBkYXRlX2NjKTogSU5DTSBhbmQgREVDTSBzZXQgY29uZGl0aW9uIGNvZGVzLgorCSh1bnNpZ25lZF9jb21wYXJpc29uX29wZXJhdG9yLCBuZXh0X2NjX3VzZXJfaXNfdW5zaWduZWQpOiBOZXcgZmNucy4KKwkqIDE3NTBhLmggKEZVTkNUSU9OX0VQSUxPR1VFKTogTG9jYWwgdmFyaWFibGVzIGZyZWVkIGZyb20gU1AsIG5vdCBGUC4KKwkoQVNNX09VVFBVVF9CWVRFKTogTWFrZSBkaXN0aW5jdCBmcm9tIEFTTV9PVVRQVVRfQ0hBUi4KKwkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUik6IEFkZCBGSUxFIGFyZyB0byBhc3NlbWJsZV9uYW1lLgorCitGcmkgSnVsIDI4IDA5OjQwOjA3IDE5OTUgIEplZmZyZXkgQS4gTGF3ICA8bGF3QHJ0bC5jeWdudXMuY29tPgorCisgICAgICAgICogcGEuaCAoRE9fR0xPQkFMX0RUT1JTX0JPRFkpOiBVc2UgYW4gYXNtIHN0YXRlbWVudCB0byBrZWVwIG9wdGltaXplcgorCWZyb20gZGVsZXRpbmcgYW4gYXNzaWdubWVudCBpdCBiZWxpZXZlcyBkZWFkLgorCitGcmkgSnVsIDI4IDA4OjQ3OjUxIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogV2hlbiBwcmVjb25kaXRpb25pbmcsIG91dHB1dCBjb2RlIHRvCisJZXhlY3V0ZSBsb29wIG9uY2UgaWYgaW5pdGlhbCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZmluYWwKKwl2YWx1ZS4KKworCSogY29uZmlndXJlIChsYW5nX3NwZWNzX2ZpbGVzLCBsYW5nX29wdGlvbnNfZmlsZXMpOiBBZGQgJHNyY2RpciB0bworCWZpbGUgbmFtZXMgd2hlbiBhZGRpbmcgdGhlbSB0byB0aGVzZSB2YXJpYWJsZXMuCisKKwkqIGMtdHlwZWNrLmMgKHBvaW50ZXJfaW50X3N1bSk6IERvbid0IGRpc3RyaWJ1dGUgaWYgaW50b3AgaXMgdW5zaWduZWQKKwlhbmQgbm90IHRoZSBzYW1lIHNpemUgYXMgcHRyb3AuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9zdGFja190ZW1wKTogV2hlbiBzcGxpdCBhIHNsb3QsIHNldCBiYXNlX29mZnNldAorCWFuZCBmdWxsX3NpemUgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc2xvdC4KKwkoY29tYmluZV90ZW1wX3Nsb3RzKTogVXBkYXRlIGZ1bGxfc2l6ZSB3aGVuIHNsb3RzIGFyZSBjb21iaW5lZC4KKworCSogc2guYyAocmVnX3VudXNlZF9hZnRlcik6IE5ldyBmdW5jdGlvbi4KKwkqIHNoLm1kIChkZWZpbmVfcGVlcGhvbGUpOiBBZGQgcGVlcGhvbGVzIHRvIHVzZSByMCtyTiBhZGRyZXNzaW5nIG1vZGUKKwlmb3Igc29tZSBhZGRyZXNzIHJlbG9hZHMuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogSWYgU0RCX0RFQlVHLCBjYWxsCisJc2Rib3V0X2JlZ2luX2Z1bmN0aW9uLiAgSWYgWENPRkZfREVCVUcsIGNhbGwgeGNvZmZvdXRfYmVnaW5fZnVuY3Rpb24KKwlpbnN0ZWFkIG9mIHhjb2Zmb3V0X291dHB1dF9maXJzdF9zb3VyY2VfbGluZS4KKwkoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3QgY2FsbCBzZGJvdXRfYmVnaW5fZnVuY3Rpb24gb3IKKwl4Y29mZm91dF9iZWdpbl9mdW5jdGlvbi4KKwkqIHhjb2Zmb3V0LmMgKHhjb2Zmb3V0X291dHB1dF9maXJzdF9zb3VyY2VfbGluZSk6IERlbGV0ZS4KKwkoeGNvZmZvdXRfYmVnaW5fZnVuY3Rpb24pOiBDYWxsIGRieG91dF9wYXJtcyBhbmQKKwlBU01fT1VUUFVUX1NPVVJDRV9MSU5FLgorCisJKiB2YS1taXBzLmg6IENoYW5nZSBldmVyeSBvY2N1cmFuY2Ugb2YgI2lmIF9fbWlwcz49MyB0bworCSNpZmRlZiBfX21pcHM2NC4KKwkqIG1pcHMvYWJpNjQuaCAoQ1BQX1NQRUMpOiBPdXRwdXQgLURfX21pcHM2NCB3aGVuIC1taXBzMywgb3IgLW1pcHM0LAorCW9yIC1tZ3A2NC4gIE91dHB1dCAtVV9fbWlwczY0IHdoZW4gLW1ncDMyLgorCSogbWlwcy9kZWMtYnNkLmgsIG1pcHMvZWxmNjQuaCwgbWlwcy9pcmlzMy5oOiBMaWtld2lzZS4KKwkqIG1pcHMvaXJpczUuaCwgbWlwcy9taXBzLmgsIG1pcHMvbmV0YnNkLmgsIG1pcHMvb3Nmcm9zZS5oOiBMaWtld2lzZS4KKworCSogaTk2MC5jIChpOTYwX2Z1bmN0aW9uX2VwaWxvZ3VlKTogRG9uJ3QgY2xlYXIgZzE0IGZvciBmdW5jdGlvbnMgd2l0aAorCWFuIGFyZ3VtZW50IGJsb2NrLgorCShpOTYwX291dHB1dF9yZWdfaW5zbik6IExpa2V3aXNlLgorCShpOTYwX291dHB1dF9jYWxsX2luc24pOiBDbGVhciBnMTQgZm9yIGZ1bmN0aW9ucyB3dGloIGFuIGFyZ3VtZW50CisJYmxvY2suCisKK0ZyaSBKdWwgMjggMDg6NDM6NTIgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KKworCSogaTk2MC5jIChpOTYwX2FyZ19zaXplX2FuZF9hbGlnbik6IENvcnJlY3QgYWxpZ25tZW50IG9mIFhGbW9kZQorCXZhbHVlcyBpbiBsaWJyYXJ5IGNhbGxzLgorCSogaTk2MC5tZCAobW92ZGkgbWF0Y2hlcnMpOiBTdXBwb3J0IG9kZCBudW1iZXJlZCByZWdzLgorCitGcmkgSnVsIDI4IDA4OjM3OjI1IDE5OTUgIE1pY2hhZWwgR3NjaHdpbmQgIDxtaWtlQGxhbmFpLnZsc2l2aWUudHV3aWVuLmFjLmF0PgorCisJKiBwZHAxMS5tZCAoZGl2aGkzLCBtb2RoaTMsIGRpdm1vZGhpNCk6IFJld3JpdGUuCisKK1dlZCBKdWwgMjYgMTA6MTU6NTIgMTk5NSAgSGFsbHZhcmQgQiBGdXJ1c2V0aCAgKGguYi5mdXJ1c2V0aEB1c2l0LnVpby5ubykKKworCSogY29sbGVjdDIuYyAoZW5kX2ZpbGUpOiBGaXggdHlwbyBpbiBlcnJvciBtZXNzYWdlIHRleHQuCisKK1dlZCBKdWwgMjYgMDk6MjI6MjIgMTk5NSAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHhtLXBhLmggKFVTRV9DX0FMTE9DQSk6IEFsd2F5cyBkZWZpbmUuCisJKiB4bS1wYWhwdXguaCAoVVNFX0NfQUxMT0NBKTogTGlrZXdpc2UuCisKKwkqIHgtcGEgKENDKTogUmVtb3ZlIHVzZWxlc3MgZGVmaW5pdGlvbi4KKwkqIHhtLXBhLmggKEhBVkVfU1RSRVJST1IpOiBEZWZpbmUuCisJKF9fQlNEX05FVDJfXyk6IERlZmluZS4KKworV2VkIEp1bCAyNiAwOToxMDoyNSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChwcmVleHBhbmRfY2FsbHMpOiBEb24ndCBsb29rIHBhc3QgYSBDTEVBTlVQX1BPSU5UX0VYUFIuCisKK1dlZCBKdWwgMjYgMDg6NDM6NDIgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBXaGVuIGRvIHNwZWNpYWwgaGFuZGxpbmcgZm9yIChzZXQgUkVHMCBSRUcxKSwKKwltdXN0IGRlbGV0ZSBSRUdfRVFVQUwgbm90ZSBmcm9tIGluc24gaWYgaXQgbWVudGlvbnMgUkVHMC4KKworCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBXaGVuIG1vdmluZyBibG9ja3Mgb2YgY29kZSwgdmVyaWZ5CisJdGhhdCB0aGUganVzdCBkZXN0aW5hdGlvbiBpcyBub3QgaW4gYW4gaW5uZXIgbmVzdGVkIGxvb3AuCisJKG1hcmtfbG9vcF9qdW1wKTogRG9uJ3QgbWFyayBsYWJlbCBhcyBsb29wIGV4aXQgaWYgaXQganVtcHMgdG8KKwlhbiBpbm5lciBuZXN0ZWQgbG9vcC4KKworV2VkIEp1bCAyNiAwODo0MDozMSAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jIChkb19pbmNsdWRlLCByZWFkX25hbWVfbWFwKTogT21pdCBsZWFkaW5nICIuLyIgYW5kCisJdHJhaWxpbmcgIi8iIHdoZW4gaXQgbWFrZXMgc2Vuc2UuCisJKHNraXBfcmVkdW5kYW50X2Rpcl9wcmVmaXgpOiBOZXcgZnVuY3Rpb24uCisKK1dlZCBKdWwgMjYgMDg6MzY6NDEgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHN0bXQuYyAoZW1pdF9ub3ApOiBEbyBub3QgZW1pdCBhIG5vcCBpZiB0aGVyZSBpcyBhIHNpbmdsZQorCWluc24gYmVmb3JlIGEgbGFiZWwgb3IgYXQgdGhlIHN0YXJ0IG9mIGEgZnVuY3Rpb24uCisKK1dlZCBKdWwgMjYgMDg6MjE6MjEgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbiAoZ2Zsb2F0LmgpOiBEZWxldGUgcHJldmlvdXMgY29weSBiZWZvcmUgdXBkYXRpbmcuCisKK1dlZCBKdWwgMjYgMDg6MTg6MjkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogTWFrZWZpbGUuaW4gKFNUQUdFU1RVRkYpOiBBZGQgc3RhbXAtY3J0Uy4KKwkoY3J0YmVnaW5TLm8sIGNydGVuZFMubywgc3RhbXAtY3J0Uyk6IE5ldyBydWxlczsganVzdCBsaWtlCisJY3J0YmVnaW4ubyBldCBhbCwgYnV0IGNvbXBpbGVkIHVzaW5nIC1mUElDLgorCSogY29uZmlndXJlICgqLSotZ251Kik6IEFkZCBjcnRiZWdpblMubyBhbmQgY3J0ZW5kUy5vIHRvICRleHRyYV9wYXJ0cy4KKworV2VkIEp1bCAyNiAwODoxMTo1MiAxOTk1ICBNaWNoYWVsIEdzY2h3aW5kICA8bWlrZUBqYXZhLnZsc2l2aWUudHV3aWVuLmFjLmF0PgorCisJKiBwZHAxMS5tZDogRml4ZWQgdHlwb3MgKCdiaG9zJyAtPiAnYmhpcycpLgorCitXZWQgSnVsIDI2IDA4OjA1OjQxIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogaHAzMjAuaCwgbTY4ay5oLCBtNjhrdjQuaCAoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogUmVqZWN0CisJQ09OU1RfRE9VQkxFIHdpdGggTUVNIHdpdGggaW52YWxpZCBwaWMgYWRkcmVzcy4KKwkqIHJlbG9hZDEuYyAocmVhbC5oKTogSW5jbHVkZSBpdC4KKwkqIE1ha2VmaWxlLmluIChyZWxvYWQxLm8pOiBEZXBlbmRzIG9uIHJlYWwuaC4KKworV2VkIEp1bCAyNiAwNzo1ODoyMiAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGdjYy5jIChNVUxUSUxJQl9ESVJTKTogUHJvdmlkZSBkZWZhdWx0IGlmIG5vdCBkZWZpbmVkLgorCShtdWx0aWxpYl9kZWZhdWx0cyk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCisJKGRlZmF1bHRfYXJnKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KKwkoc2V0X211bHRpbGliX2Rpcik6IElnbm9yZSBkZWZhdWx0IGFyZ3VtZW50cy4KKwkocHJpbnRfbXVsdGlsaWJfaW5mbyk6IElnbm9yZSBlbnRyaWVzIHdoaWNoIHVzZSBkZWZhdWx0IGFyZ3VtZW50cy4KKworVHVlIEp1bCAyNSAxMDowNjowOSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChhbGxvY2F0ZV9zdGFjayk6IERvbid0IGNvcHkgdGhlIExSIHJlZ2lzdGVyIHRvCisJdGhlIG5ldyBzdGFjayBlbmQuCisJKiByczYwMDAuYyAocnM2MDAwX3N0YWNrX2luZm8pOiBDb3JyZWN0bHkgc3RvcmUgdGhlIExSIGluCisJdGhlIGNhbGxlcidzIGZyYW1lLCBub3QgdGhlIGN1cnJlbnQgZnJhbWUsIGZvciBWLjQgY2FsbHMuCisJKiByczYwMDAvZWFiaS5hc20gKF9zYXZlKiwgX3Jlc3QqKTogUHJvdmlkZSBhbGwgbWFuZGF0ZWQgVi40IHNhdmUKKwlhbmQgcmVzdG9yZSBmdW5jdGlvbnMsIGV4Y2VwdCBmb3IgdGhlIHNhdmUqX2cgZnVuY3Rpb25zIHdoaWNoCisJcmV0dXJuIHRoZSBHT1QgYWRkcmVzcy4KKworRnJpIEp1bCAyMSAxNDoyNDoyNSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL2VhYmkuaCAoX19lYWJpKTogTG9hZCB1cCByMTMgdG8gYmUgdGhlIHNtYWxsIGRhdGEKKwlwb2ludGVyLCB1bmxlc3MgLW1yZWxvY2F0YWJsZS4KKworCSogcnM2MDAwL2FpeDNuZXdhcy5oIChMSU5LX1NQRUMpOiBJbXBvcnQgbWFjaGluZSBpbmRlcGVuZGVudAorCWZ1bmN0aW9ucyBpZiAtbWNwdT1jb21tb24uCisJKiByczYwMDAvbWlsbGkuZXhwOiBJbXBvcnQgZmlsZSByZWZlcmVuY2VkIGluIGFpeDNuZXdhcy5oLgorCisJKiByczYwMDAvZWFiaS5hc20gKF9fZWFiaSk6IFN1cHBvcnQgZm9yIGZpeGluZyB1cCB1c2VyIGluaXRpYWxpemVkCisJcG9pbnRlcnMgd2hlbiAtbXJlbG9jYXRhYmxlIGlzIHVzZWQuCisJKiByczYwMDAvZWFiaS5oIChBU01fT1VUUFVUX0lOVCk6IFJlY29yZCBhbnkgcG9pbnRlcnMgaW5pdGlhbGl6ZWQKKwlieSB0aGUgdXNlciBpZiAtbXJlbG9jYXRhYmxlLCB0byBiZSBmaXhlZCB1cCBieSBfX2VhYmkuCisJKENPTlNUX1NFQ1RJT05fQVNNX09QKTogSWYgLW1yZWxvY2F0YWJsZSwgcHV0IHJlYWQtb25seSBzdHVmZiBpbiAuZGF0YSwKKwlub3QgLnJvZGF0YSwgdG8gYWxsb3cgdXNlciBpbml0aWFsaXplZCBwb2ludGVycyB0byBiZSB1cGRhdGVkIGJ5IF9fZWFiaS4KKworCSogcnM2MDAwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWRlYnVnLXtzdGFjayxhcmd9LgorCShUQVJHRVRfe0VMRixOT19UT0MsVE9DfSk6IEFkZCBkZWZhdWx0cyBmb3Igbm9uIHN5c3RlbSBWLgorCShyczYwMDBfc3RhY2spOiBOZXcgc3RydWN0dXJlIHRvIGRlc2NyaWJlIHN0YWNrIGxheW91dC4KKwkoUlM2MDAwX3tSRUdfU0FWRSxTQVZFX0FSRUEsVkFSQVJHU18qfSk6IE5ldyBtYWNyb3MgdXNlZCB0bworCXN1cHBvcnQgYm90aCBBSVggYW5kIFYuNCBjYWxsaW5nIHNlcXVlbmNlcy4KKwkoRlBfQVJHXyosIEdQX0FSR18qKTogRGl0dG8uCisJKEZQX1NBVkVfSU5MSU5FKTogRGl0dG8uCisJKFNUQVJUSU5HX0ZSQU1FX09GRlNFVCk6IE1vZGlmeSB0byBzdXBwb3J0IGJvdGggQUlYIGFuZCBWLjQKKwljYWxsaW5nIHNlcXVlbmNlcy4KKwkoRklSU1RfUEFSTV9PRkZTRVQpOiBEaXR0by4KKwkoUkVHX1BBUk1fU1RBQ0tfU1BBQ0UpOiBEaXR0by4KKwkoU1RBQ0tfUE9JTlRFUl9PRkZTRVQpOiBEaXR0by4KKwkoRlVOQ1RJT05fQVJHX1JFR05PX1ApOiBEaXR0by4KKwkoeyxJTklUX31DVU1VTEFUSVZFX0FSR1MpOiBEaXR0by4KKwkoTEVHSVRJTUFURV9MT19TVU1fQUREUkVTU19QKTogRGl0dG8uCisJKEZVTkNUSU9OX0FSR3ssX0FEVkFOQ0UsUEFSVElBTF9OUkVHUyxQQVNTX0JZX1JFRkVSRU5DRX0pOiBEaXR0by4KKwkoU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6IERpdHRvLgorCShFWFBBTkRfQlVJTFRJTl9TQVZFUkVHUyk6IERpdHRvLgorCShDQU5fRUxJTUlOQVRFKTogRGl0dG8uCisJKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogRGl0dG8uCisJKExFR0lUSU1BVEVfQ09OU1RBTlRfUE9PTF97QkFTRSxBRERSRVNTfV9QKTogRGl0dG8uCisJKEdPX0lGX3tMRUdJVElNQVRFX0FERFJFU1MsTU9ERV9ERVBFTkRFTlRfQUREUkVTU30pOiBEaXR0by4KKwkoTEVHSVRJTUlaRV9BRERSRVNTKTogRGl0dG8uCisJKENPTlNUX0NPU1RTKTogRGl0dG8uCisJKEFTTV9PVVRQVVRfU1BFQ0lBTF9QT09MX0VOVFJZX1ApOiBEaXR0by4KKwkoQVNNX09VVFBVVF9SRUdfe1BVU0gsUE9QfSk6IFVzZSByZWdfbmFtZXMgdG8gcHJpbnQgcmVnaXN0ZXJzLgorCShmdW5jdGlvbiBkZWNsYXJhdGlvbnMpOiBBZGQgbmV3IHJzNjAwMC5jIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywKKwlhbmQgZGVsZXRlIGRlY2xzIG9mIGRlbGV0ZWQgZnVuY3Rpb25zLgorCShTSElGVF9DT1VOVF9UUlVOQ0FURUQpOiBQYXJlbnRoZXNpemUgdGhlIGV4cHJlc3Npb24uCisKKwkqIHJzNjAwMC5jIChpbml0X2N1bXVsYXRpdmVfYXJncyk6IE5ldyBmdW5jdGlvbiB0byBzdXBwb3J0IEFJWAorCWFuZCBWLjQgY2FsbGluZyBzZXF1ZW5jZXMuCisJKGZ1bmN0aW9uX2FyZ3ssX2FkdmFuY2UscGFydGlhbF9ucmVncyxwYXNzX2J5X3JlZmVyZW5jZX0pOiBEaXR0by4KKwkoc2V0dXBfaW5jb21pbmdfdmFyYXJncyk6IERpdHRvLgorCShleHBhbmRfYnVpbHRpbl9zYXZlcmVncyk6IERpdHRvLgorCShyczYwMDBfc3RhY2tfaW5mbyk6IERpdHRvLgorCShkZWJ1Z19zdGFja19pbmZvKTogRGl0dG8uCisJKGRpcmVjdF9yZXR1cm4pOiBDaGFuZ2VzIHRvIHN1cHBvcnQgQUlYIGFuZCBWLjQgY2FsbGluZyBzZXF1ZW5jZXMuCisJKGZpcnN0X3JlZ190b19zYXZlKTogRGl0dG8uCisJKHN2cjRfdHJhY2ViYWNrKTogRGl0dG8uCisJKG91dHB1dF97cHJvbG9nLGVwaWxvZ30pOiBEaXR0by4KKwkocHJpbnRfb3BlcmFuZCk6IFVzZSByZWdfbmFtZXMgdG8gcHJpbnQgcmVnaXN0ZXJzLiAgQWRkIHN1cHBvcnQKKwlmb3IgVi40IEhJR0gvTE9fU1VNIGFkZHJlc3MgbW9kZXMuCisJKG11c3Rfc2F2ZV9jcik6IEZ1bmN0aW9uIGRlbGV0ZWQsIGluIHJld3JpdGUgb2YgQUlYL1YuNCBjYWxsaW5nCisJc2VxdWVuY2Ugc3VwcG9ydC4KKwkocnM2MDAwX3NhX3NpemUpOiBEaXR0by4KKwkocnM2MDAwX3B1c2hlc19zdGFjayk6IERpdHRvLgorCShvdXRwdXRfdG9jKTogQWRkIGFib3J0IGlmIG5vIHRvYy4KKworCSogcnM2MDAwLm1kIChjYWxsIGluc25zKTogQWRkIGEgbmV3IGFyZ3VtZW50IHRvIGZsYWcgYSBWLjQKKwlmdW5jdGlvbiBuZWVkcyB0byBzZXQgYml0IDYgb2YgdGhlIENSLgorCShlbGZfe2xvdyxoaWdofSk6IE5ldyBWLjQgZnVuY3Rpb25zIHRvIGNyZWF0ZSBhZGRyZXNzZXMgdmlhIEhJR0gKKwlhbmQgTE9fU1VNIHBhdHRlcm5zLgorCShtb3ZzaSk6IFVzZSBlbGZfe2xvdyxoaWdofSBpZiBhcHByb3ByaWF0ZS4KKwkobW92e3NpLGRpfV91cGRhdGUpOiBOYW1lIHRoZXNlIHBhdHRlcm5zIGZvciBhbGxvY2F0ZV9zdGFjay4KKwkoYWxsb2NhdGVfc3RhY2spOiBTdXBwb3J0IGZvciBWLjQgc3RhY2sgbGF5b3V0LgorCShzeW5jKTogTmV3IHBhdHRlcm4gZm9yIFYuNCB0cmFtcG9saW5lcyB0byBpc3N1ZSB0aGUgc3luYworCWluc3RydWN0aW9uLgorCisJKiByczYwMDAvc3lzdjQuaCAoVEFSR0VUX1NXVElDSEVTKTogQWRkIC1tY2FsbC17YWl4LHN5c3Z9LCBhbmQKKwktbXByb3RvdHlwZS4gIFJlbW92ZSBzZXBhcmF0ZSBmbGFnIGJpdCBmb3IgLW1uby10b2MuCisJKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogRG9uJ3QgdGVzdCBmb3IgLW1uby10b2MuCisJKEZQX0FSR18qKTogQWRqdXN0IGZvciBWLjQgY2FsbGluZyBzZXF1ZW5jZXMuCisJKFJTNjAwMF8qKTogRGl0dG8uCisJKEZQX1NBVkVfSU5MSU5FKTogRGl0dG8uCisJKHRvY19zZWN0aW9uKTogRWxpbWluYXRlIHVzZSBvZiBBSVggc3R5bGUgZnVsbCBUT0MuCisJKFRSQU1QT0xJTkVfe1RFTVBMQVRFLFNJWkV9KTogUmVkZWZpbmUgZm9yIFYuNCBzdXBwb3J0LgorCShJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBEaXR0by4KKworCSogcnM2MDAwL2VhYmkuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX0NBTExfU1lTViBvciBfQ0FMTF9BSVgsCisJZGVwZW5kaW5nIG9uIHdoZXRoZXIgLW1jYWxsLXN5c3Ygb3IgLW1jYWxsLWFpeCB3YXMgdXNlZC4KKwkqIHJzNjAwMC9lYWJpbGUuaCAoQ1BQX1NQRUMpOiBEaXR0by4KKwkqIHJzNjAwMC9zeXN2NGxlLmggKENQUF9TUEVDKTogRGl0dG8uCisKKwkqIHJzNjAwMC90LWVhYmlnYXMgKE1VTFRJTElCX3tPUFRJT05TLERJUk5BTUVTfSk6IERlbGV0ZSBuby10b2MKKwlsaWJyYXJpZXMsIGV4cGxpY2l0IGJpZyBlbmRpYW4gbGlicmFyaWVzLgorCSogcnM2MDAwL3QtcHBjZ2FzIChNVUxUSUxJQl97T1BUSU9OUyxESVJOQU1FU30pOiBEaXR0by4KKworCSogcnM2MDAwL3QtZWFiaWFpeDogTmV3IGZpbGUgZm9yIGVhYmksIHVzaW5nIC1tY2FsbC1haXggYXMgdGhlCisJZGVmYXVsdC4KKwkqIHJzNjAwMC9lYWJpYWl4Lmg6IERpdHRvLgorCisJKiByczYwMDAvdC1lYWJpbGVnYXM6IE5ldyBmaWxlIGZvciBlYWJpIG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcy4KKwkqIHJzNjAwMC90LXBwY2xlZ2FzOiBOZXcgZmlsZSBmb3IgVi40IG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcy4KKworCSogcnM2MDAwL3QtcnM2MDAwIChNVUxUSUxJQl97T1BUSU9OUyxESVJOQU1FU30pOiBCdWlsZCBsaWJnY2MuYQorCWZvciAtbWNwdT1jb21tb24uCisKKwkqIGNvbmZpZ3VyZSAocG93ZXJwYy0qLWVhYmlhaXgpOiBOZXcgY29uZmlndXJhdGlvbiBmb3IgZGVmYXVsdGluZworCXRvIG9sZC1zdHlsZSBBSVggY2FsbGluZyBzZXF1ZW5jZS4KKwkocG93ZXJwY2xlKik6IFVzZSBuZXcgdC17ZWFiaSxwcGN9bGVnYXMgZmlsZXMsIHRvIGF2b2lkIGJ1aWxkaW5nCisJZXhwbGljaXQgbGl0dGxlIGVuZGlhbiBtdWx0aWxpYiBsaWJyYXJpZXMuCisKK0ZyaSBKdWwgMjEgMTM6MjM6MDYgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdG9wbGV2LmMgKG1haW4pOiBEb24ndCBkZWZpbmUgc2JyayAjaWZkZWYgX19hbHBoYV9fLgorCitUdWUgSnVsIDE4IDE5OjIzOjQ0IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBQcmVmaXggLUggb3V0cHV0IGxpbmVzIHdpdGggc3BhY2VzLCBub3QgZG90cy4KKwkob3V0cHV0X2RvdHMpOiBSZW1vdmUuCisKKwkqIGNjY3AuYyAobWFpbik6IGNwbHVzcGx1c19jb21tZW50cyBub3cgZGVmYXVsdHMgdG8gMS4KKwlCdXQgY2xlYXIgaXQgaWYJLXRyYWRpdGlvbmFsIG9yIHRoZSBuZXcgb3B0aW9uIC1sYW5nLWM4OSBpcyBnaXZlbi4KKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycywgY3BwKTogU3BlY2lmeSAtbGFuZy1jODkgaWYgLWFuc2kgaXMgZ2l2ZW4uCisJVGhpcyB0dXJucyBvZmYgQysrIGNvbW1lbnQgcmVjb2duaXRpb24uCisKK1R1ZSBKdWwgMTggMTk6MTY6MzggMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiB2YS1zcGFyYy5oICh2YV9hcmcpOiBBZGQgc3VwcG9ydCBmb3IgMTI4IGJpdCBsb25nIGRvdWJsZSB0eXBlLgorCitUdWUgSnVsIDE4IDE5OjExOjE4IDE5OTUgIEpvcm4gUmVubmVja2UgIChhbXlsYWFyQG1lb2x5b24uaGFuc2UuZGUpCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcywgY2FzZSBBX0FMSUdORUQpOiBIYW5kbGUgaXNfdHlwZQorCWNhc2UgcHJvcGVybHkuCisKK1R1ZSBKdWwgMTggMTk6MDM6MDIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIENPTlZFUlRfRVhQUik6IERvbid0IG1lcmdlIGNvbnZlcnNpb25zCisJaWYgb3V0ZXIgaXMgdG8gaGFuZGxlIGEgdHlwZSB3aXRoIGRpZmZlcmluZyBwcmVjaXNpb24uCisKK01vbiBKdWwgMTcgMTQ6Mzc6MzUgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIHZheC92bXMuaCAoSEFWRV9BVEVYSVQpOiBEZWZpbmUuCisJKERPX0dMT0JBTF9DVE9SU19CT0RZKTogRG9uJ3QgY2FsbCBhdGV4aXQ7IGxldCBfX2RvX2dsb2JhbF9jdG9ycyBkbyBpdC4KKwkqIHZheC94bS12bXMuaCAoSEFWRV9WUFJJTlRGKTogRGVmaW5lLgorCitNb24gSnVsIDE3IDA2OjQxOjE5IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHt1bnNpZ25lZCxzaWduZWR9X3R5cGUpOiBIYW5kbGUgaW50WFhfdHlwZV9ub2RlIHR5cGVzLgorCisJKiB4bS1hbHBoYS5oIChzYnJrKTogQWRkIGRlY2xhcmF0aW9uLgorCisJKiBjb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IElmIFRZUEUgaXMgYSBlbnVtZXJhbCB0eXBlIG9yCisJaWYgaXRzIHByZWNpc2lvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHNpemUgb2YgaXRzIG1vZGUsCisJY29udmVydCBpbiB0d28gc3RlcHMuCisKKwkqIG02OGsubWQgKHRzdGRpLCBjbXBkaSk6IFVzZSBtYXRjaF9zY3JhdGNoLCBub3QgbWF0Y2hfb3BlcmFuZC4KKworRnJpIEp1bCAxNCAxOToyMzo0MiAxOTk1ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKworCSogYy1kZWNsLmMgKGZpZWxkX2RlY2xfY21wKTogUmV3cml0dGVuIHRvIG1ha2Ugc3VyZSB0aGF0IGEgbnVsbAorCW5hbWUgYWx3YXlzIHNvcnRzIGxvdyBhZ2FpbnN0IG90aGVyIG5hbWVzLgorCSogYy10eXBlY2suYyAobG9va3VwX2ZpZWxkKTogQ2hhbmdlIG5hbWUgY29tcGFyaXNvbiB0byBtYXRjaCB3aGF0CisJZmllbGRfZGVjbF9jbXAgZG9lcy4KKworRnJpIEp1bCAxNCAxODo0NjoyNCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLm1kIChtb3ZzaSk6IENvbnZlcnQgYSBDT05TVF9ET1VCTEUgaW50byBhIENPTlNUX0lOVCBvZgorCXRoZSBsb3cgcGFydC4KKworRnJpIEp1bCAxNCAxODozMDo1MiAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChtYWluKTogUmV3b3JkIGR3YXJmL2MrKy8tZyB3YXJuaW5nLgorCitGcmkgSnVsIDE0IDE4OjE5OjM0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuaCAoTk9fREVGRVJfUE9QKTogUmVtb3ZlIGxhc3QgY2hhbmdlLgorCSogZXhwci5jIChzdG9yX2V4cHIpOiBGb3JjZSBzdGFjayBhZGp1c3QgYmVmb3JlIE5PX0RFRkVSX1BPUC4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKGV4cGFuZF9zdGFydF9zdG10X2V4cHIpOiBMaWtld2lzZS4KKworRnJpIEp1bCAxNCAwNzo1ODozNSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGZ1bmN0aW9uLmMgKHN0cnVjdCB0ZW1wX3Nsb3QpOiBOZXcgZmllbGRzIGJhc2Vfb2Zmc2V0LCBmdWxsX3NpemUuCisJKGFzc2lnbl9zdGFja190ZW1wKTogRm9yICFGUkFNRV9HUk9XU19ET1dOV0FSRCwgc2V0IHAtPnNpemUgdG8gc2l6ZS4KKwlTZXQgbmV3IGZpZWxkcyBiYXNlX29mZnNldCBhbmQgZnVsbF9zaXplLgorCShjb21iaW5lX3RlbXBfc2xvdHMpOiBVc2UgbmV3IGZpZWxkcyBiYXNlX29mZnNldCBhbmQgZnVsbF9zaXplIGluc3RlYWQKKwlvZiBzbG90IGFuZCBzaXplLgorCisJKiBsb29wLmMgKGxvb3BfbnVtYmVyX2V4aXRfY291bnQpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgorCShsb29wX29wdGltaXplKTogQWxsb2NhdGUgc3BhY2UgZm9yIGl0LgorCShmaW5kX2FuZF92ZXJpZnlfbG9vcHMsIG1hcmtfbG9vcF9qdW1wKTogU2V0IGl0LgorCShzdHJlbmd0aF9yZWR1Y2UsIGNoZWNrX2RicmFfbG9vcCk6IFVzZSBsb29wX251bWJlcl9leGl0X2NvdW50CisJaW5zdGVhZCBvZiBsb29wX251bWJlcl9leGl0X2xhYmVscy4KKwkqIGxvb3AuaCAobG9vcF9udW1iZXJfZXhpdF9jb3VudCk6IERlY2xhcmUgaXQuCisJKiB1bnJvbGwuYyAoZmluZF9zcGxpdHRhYmxlX3tyZWdzLGdpdnN9LCBmaW5hbF9bYmddaXZfdmFsdWUpOiBVc2UKKwlsb29wX251bWJlcl9leGl0X2NvdW50IGluc3RlYWQgb2YgbG9vcF9udW1iZXJfZXhpdF9sYWJlbHMuCisJKHJlZ19kZWFkX2FmdGVyX2xvb3ApOiBDaGVjayBsb29wX251bWJlcl9leGl0X2NvdW50LCBhbmQgZmFpbAorCWlmIHRoZSBjb3VudCBkb2Vzbid0IG1hdGNoIGxvb3BfbnVtYmVyX2V4aXRfbGFiZWxzLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBJZmRlZiBvdXQgY29kZSB0aGF0IHByZS10cnVuY2F0ZXMgc3JjX2ZvbGRlZC4KKworCSogc3BhcmMubWQgKHNldGhpX2RpX3NwNjQpOiBSZXR1cm4gbnVsbCBzdHJpbmcgYXQgZW5kLgorCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgc3RkYXJnIGZpZWxkLgorCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9zdGRhcmcpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgorCShwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBTYXZlIGl0LgorCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogUmVzdG9yZSBpdC4KKwkoYXNzaWduX3Bhcm1zKTogU2V0IGl0LgorCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogQ2xlYXIgaXQuCisJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9zdGRhcmcpOiBEZWNsYXJlIGl0LgorCSogaTk2MC5tZDogTW9kaWZ5IGFsbCBwYXR0ZXJucyB3aGljaCBoYW5kbGUgc3RvcmVzIHRvIG1lbW9yeSB0byBhbHNvCisJY2hlY2sgY3VycmVudF9mdW5jdGlvbl92YXJhcmdzIGFuZCBjdXJyZW50X2Z1bmN0aW9uX3N0ZGFyZy4KKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBXaGVuIHRyeWluZyB0byB0YWtlIGluc3RydWN0aW9uCisJZnJvbSBhZnRlciB0aGUgYnJhbmNoLCBkb24ndCBjb250aW51ZSBwYXN0IHRhcmdldCBsYWJlbC4gIExvY2FsCisJdmFyaWFibGVzIHBhc3NlZF9sYWJlbCBhbmQgdGFyZ2V0X3VzZXMgYXJlIG5vIGxvbmdlciBuZWNlc3NhcnkuCisKK1RodSBKdWwgMTMgMTk6MzA6MDQgMTk5NSAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9iYik6IEZpeCBlcnJvciBpbiBsb25nIGJhY2t3YXJkcyBicmFuY2ggd2l0aAorCW51bGxpZmllZCBkZWxheSBzbG90LgorCitUaHUgSnVsIDEzIDE5OjI2OjEzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogZXhwbWVkLmMgKFNISUZUX0NPVU5UX1RSVU5DQVRFRCk6IFVzZSAjaWZkZWYgbm90ICNpZi4KKworTW9uIEp1bCAxMCAyMDoxNjo0NCAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jIChyZXNjYW4pOiBEb24ndCBhZGRyZXNzIG91dHNpZGUgb2YgYXJyYXkgd2hlbgorCXByZXByb2Nlc3NpbmcgQysrIGNvbW1lbnRzLgorCitNb24gSnVsIDEwIDIwOjA1OjQ2IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogUmVtb3ZlICNpZiAwIGNvbmRpdGlvbmFscworCWFnYWluc3QgdXNpbmcgbGFyZ2VyIGJsb2NrIG1vdmVzLgorCisJKiB0LXJzNjAwMCAoRVhUUkFfUEFSVFMpOiBDb3B5IG1pbGxpLmV4cCB0byByZWxlYXNlIGRpci4KKwkobWlsbGkuZXhwKTogQ29weSB0byBidWlsZCBkaXIgZnJvbSBtYWNoaW5lIGRlcGVuZGVuZCBkaXIuCisKK01vbiBKdWwgMTAgMjA6MDM6MjkgMTk5NSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBhcm0ubWQgKG1hdGNoZXIgZm9yIChzaGlmdGFibGVfb3AgKGNvbmQtZXhwKSAocmVnKSkpOiBJZgorCXNoaWZ0YWJsZV9vcCBpcyBtaW51cywgdGhlbiBzdWJ0cmFjdCBmcm9tIHplcm8gd2hlbiBjb25kIGZhaWxzLgorCitNb24gSnVsIDEwIDE5OjU4OjI2IDE5OTUgIEpvaG4gRi4gQ2FyciA8amZjQG1pdC5lZHU+CisKKwkqIHNwYXJjLmggKFNFTEVDVF9TRUNUSU9OKTogVXNlIFRSRUVfQ09ERV9DTEFTUyBpbnN0ZWFkIG9mIGRpcmVjdGx5CisJcmVmZXJlbmNpbmcgdHJlZV9jb2RlX3R5cGUuCisKK01vbiBKdWwgMTAgMTk6NTQ6MzEgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBwcm90b2l6ZS5jIChyZXZlcnNlX2RlZl9kZWNfbGlzdCk6IERlbGV0ZSBjb25zdCBxdWFsaWZpZXJzIGZyb20KKwlsb2NhbCB2YXJpYWJsZXMsIGFuZCBkZWxldGUgY2FzdHMgd2hpY2ggd2VyZSBjYXN0aW5nIGF3YXkgY29uc3QuCisKK01vbiBKdWwgMTAgMTk6MTQ6MzkgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1sYW5nLmMgKGZpbmlzaF9maWxlKTogQWRkIG1pc3NpbmcgcGFybSB0byBzdGFydF9mdW5jdGlvbiBjYWxsLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBQYXNzIG91dGVyX2NvZGUgYXJnIHRvIHJ0eF9jb3N0LgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfbmFtZSwgYmNfYXNzZW1ibGVfaW50ZWdlcik6IENhbGwKKwliY19lbWl0X2xhYmVscmVmIHdpdGggcHJvcGVyIGFyZ3MuCisKKwkqIGZ1bmN0aW9uLmMgKHNldGptcF9hcmdzX3dhcm5pbmcpOiBSZW1vdmUgYm9ndXMgYXJnLgorCitNb24gSnVsIDEwIDE4OjIwOjU0IDE5OTUgIEZlcmd1cyBIZW5kZXJzb24gIChmamhAY3MubXUub3ouYXUpCisKKwkqIGdjYy5jIChwe2ZhdGFsLGVycm9yfV93aXRoX25hbWUsIHBlcnJvcl9leGVjKTogUXVvdGUgZmlsZW5hbWUuCisKK01vbiBKdWwgMTAgMTg6MTI6NTEgMTk5NSAgR3JhbiBVZGRlYm9yZyAodWRkZWJvcmdAY2FybWVuLnNlKQorCisJKiBpMzg2L2lzY2RieC5oIChTVEFSVEZJTEVfU1BFQyk6IEhhbmRsZSAtWHAuCisKK1dlZCBKdWwgIDUgMDI6NDI6MTcgMTk5NSAgUGVyIEJvdGhuZXIgIChib3RobmVyQHNwaWZmLmdudS5haS5taXQuZWR1KQorCisJKiBjcHBoYXNoLmggKGVudW0gbm9kZV90eXBlKTogIFJlbW92ZSB1bm5lZWRlZCBhbmQgbm9uLXN0YW5kYXJkCisJZm9yd2FyZCBkZWNsYXJhdGlvbi4KKworU2F0IEp1bCAgMSAyMDoxNTozOSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIG1pcHMvdC1taXBzLCBtaXBzL3QtbWlwcy1nYXMgKE1VTFRJTElCXyosIExJQkdDQywgSU5TVEFMTF9MSUJHQ0MpOgorCURlbGV0ZS4KKworCSogc3BhcmMvc29sMi5oIChMSU5LX1NQRUMpOiBSZXZlcnQgTWFyY2ggMTYgY2hhbmdlLiAgRG8gbm90IGFkZCAtUgorCWZvciBlYWNoIC1MLgorCisJKiBjb2xsZWN0Mi5jIChsaWJjb21wYXJlKTogVmVyaWZ5IHRoYXQgZmlsZSBuYW1lIGV4dGVuc2lvbnMgYXJlIHZhbGlkLgorCVB1dCBmaWxlcyB3aXRoIGludmFsaWQgZXh0ZW5zaW9ucyBsYXN0IGluIHRoZSBzb3J0LgorCisJKiBpbnRlZ3JhdGUuYyAoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IFNldCBERUNMX0FCVFJBQ1RfT1JJR0lOIGJlZm9yZQorCXB1c2hkZWNsIGNhbGwgZm9yIGxvY2FsIHZhcmlhYmxlcy4KKworU2F0IEp1bCAgMSAwODoxMzozOCAxOTk1ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGNwcGxpYi5jIChvdXRwdXRfbGluZV9jb21tYW5kKTogSWYgbm90IGVtaXR0aW5nICNsaW5lIGRpcmVjdGl2ZXMKKwlkZWxheSByZXR1cm5pbmcgdW50aWwgYWZ0ZXIgYWRqdXN0X3Bvc2l0aW9uIGhhcyBiZWVuIGNhbGxlZC4KKworCSogYXJtLm1kIChtb3Z7c2ksc2YsZGZ9Y2MpOiBDYWxsIGdlbl9jb21wYXJlX3JlZyB0byBnZW5lcmF0ZQorCXRoZSBjb25kaXRpb24gY29kZSByZWdpc3Rlci4KKworU2F0IEp1bCAgMSAwNjo1NTowOSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGRlY29kZV9maWVsZF9yZWZlcmVuY2UpOiBOZXcgcGFybSBQQU5EX01BU0suCisJKHVuZXh0ZW5kKTogTmV3IHBhcm0gTUFTSy4KKwkoZm9sZF90cnV0aG9wKTogUGFzcyBuZXcgcGFybXMgdG8gZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSBhbmQgdW5leHRlbmQuCisKKwkqIHZhLWFscGhhLmggKF9fdmFfdHNpemUpOiBVc2UgX19leHRlbnNpb25fXyB0byBhdm9pZCB3YXJuaW5nCisJb24gdXNlIG9mIGBsb25nIGxvbmcnLgorCisJKiBleHByLmggKE5PX0RFRkVSX1BPUCk6IERvIGFueSBwZW5kaW5nIHN0YWNrIGFkanVzdHMuCisKKwkqIHJlY29nLmMgKHJlZ2lzdGVyX29wZXJhbmQpOiBEaXNhbGxvdyBzdWJyZWcgb2YgcmVnIG5vdCBhbGxvd2VkIHRvCisJY2hhbmdlIHNpemUuCisKK1RodSBKdW4gMjkgMDU6NTE6NTcgMTk5NSAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChyZWxvYWQgYWRkc2kzKTogTmV3IHBhdHRlcm4gdG8gYXZvaWQgcmVsb2FkIGxvc3NhZ2UKKwl3aXRoIHJlZ2lzdGVyIGVsaW1pbmF0aW9ucy4KKworCSogcGEuYyAob3V0cHV0X2NicmFuY2gpOiBXaGVuIGNoZWNraW5nIGZvciBhIGp1bXAgdG8gdGhlIGdpdmVuCisJaW5zbidzIGRlbGF5IHNsb3QsIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBKVU1QX0xBQkVMIGZvciB0aGUKKwlnaXZlbiBpbnNuIGRvZXMgbm90IHBvaW50IHRvIHRoZSBmaXJzdCBsYWJlbCBpbiBhIHNlcmllcyBvZgorCWxhYmVscy4KKwkob3V0cHV0X2JiLCBvdXRwdXRfZGJyYSwgb3V0cHV0X21vdmIpOiBMaWtld2lzZS4KKworV2VkIEp1biAyOCAxODowNDo1NiAxOTk1ICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoUElDX09GRkVTVF9UQUJMRV9SRUdOVU1fU0FWRUQpOiBEZWZpbmUgdG8gJXI0LgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IE1ha2UgaXQgZml4ZWQgd2hlbiBjb21waWxpbmcKKwlQSUMgY29kZS4KKwkoSU5JVF9FWFBBTkRFUlMpOiBEZWxldGUuCisJKiBwYS5jIChocHBhX3NhdmVfcGljX3RhYmxlX3J0eCk6IERlbGV0ZSB2YXJpYWJsZS4KKwkoaHBwYV9leHBhbmRfcHJvbG9ndWUpOiBGb3IgUElDIGdlbmVyYXRpb24sIGNvcHkgdGhlIFBJQworCXJlZ2lzdGVyIGludG8gYSBmaXhlZCBjYWxsZWUgcmVnaXN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUKKwlwcm9sb2d1ZSBvZiBub24tbGVhZiBmdW5jdGlvbnMuCisJKiBwYS5tZCAoY2FsbCBleHBhbmRlcnMpOiBSZWxvYWQgdGhlIFBJQyByZWdpc3RlciBmcm9tIHRoZQorCWZpeGVkIGNhbGxlZSBzYXZlZCByZWdpc3Rlci4gIERvbid0IHRyeSB0byBzYXZlIHRoZSBQSUMKKwlyZWdpc3RlciBiZWZvcmUgdGhlIGNhbGwuCisKK1dlZCBKdW4gMjggMTg6MDE6MTQgMTk5NSAgU3RhbiBDb3ggIChjb3hzQGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsvZGd1eGJjcy5oIChBU01fU1BFQyk6IFJlbW92ZWQgLWggZmxhZy4KKwkqIG04OGsvZGd1eC5oIChBU01fU1BFQyk6IExpa2V3aXNlLgorCitXZWQgSnVuIDI4IDE3OjAxOjU4IDE5OTUgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuYyAocHJvY2Vzc29yX3RhcmdldF90YWJsZSk6IFJlbW92ZSBDUFUgbmFtZSBzeW5vbnltcy4KKwkqIHJzNjAwMC5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogcnM2MDAwL3N5c3Y0LmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKEFTTV9TUEVDKTogTGlrZXdpc2UuCisJKiByczYwMDAvc3lzdjRsZS5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogcnM2MDAwL2VhYmlsZS5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogcnM2MDAwL3Bvd2VycGMuaCAoQ1BQX1NQRUMpOiBMaWtld2lzZS4KKwkoQVNNX1NQRUMpOiBTZXQgYXNzZW1ibGVyIHRhcmdldCBhY2NvcmRpbmcgdG8gY29tcGlsZXIgdGFyZ2V0LgorCSogcnM2MDAwL2FpeDNuZXdhcy5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCShBU01fU1BFQyk6IExpa2V3aXNlLgorCSogcnM2MDAwL2FpeDQxLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKEFTTV9TUEVDKTogTGlrZXdpc2UuCisKK1dlZCBKdW4gMjggMTY6MjU6NTMgMTk5NSAgR3JhbiBVZGRlYm9yZyAgKHVkZGVib3JnQGNhcm1lbi5zZSkKKworCSogaTM4Ni94LWlzYzMgKElOU1RBTExfSEVBREVSU19ESVIpOiBEZWxldGU7IGRvbmUgYnkgY29uZmlndXJlLgorCitXZWQgSnVuIDI4IDE2OjEwOjQ3IDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogeG0tcnM2MDAwLmggKGFsbG9jYSk6IEV4dGVybiBkZWNsIGFkZGVkIGZvciBub24tR05VIGNvbXBpbGVyLgorCitXZWQgSnVuIDI4IDExOjMxOjMwIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNwcGxpYi5jIChwcm9nbmFtZSk6IFJlbW92ZSBkZWZpbml0aW9uIGZyb20gaGVyZS4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRml4IGVycm9yIGluIGxhc3QgY2hhbmdlLgorCisJKiBydGxhbmFsLmMgKHJlZ19zZXRfcF8xKTogTm93IHN0YXRpYzsgYWRkIGV4dHJhIHBhcm0uCisKKwkqIHN0bXQuYzogRGVsZXRlIHJlZHVuZGFudCBmb3J3YXJkIGRlY2xzLgorCShleHBhbmRfYW5vbl91bmlvbl9kZWNsKTogQ29ycmVjdGx5IGNhbGwgZXhwYW5kX2RlY2wuCisKKwkqIHRvcGxldi5jIChzdHJpcF9vZmZfZW5kaW5nKTogU3RyaXAgb2ZmIGFueSBlbmRpbmc7IGRvbid0CisJcHJldGVuZCB3ZSBrbm93IHdoYXQgdmFsaWQgZW5kaW5ncyBhcmUuCisKKwkqIHN2cjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBEb24ndCBjcmFzaCBpZiBERUNMIGlzIG51bGwuCisKKwkqIHJzNjAwMC5tZCAoe2xvYWQsc3RvcmV9X211bHRpcGxlKTogRG9uJ3QgdXNlIGluZGlyZWN0X29wZXJhbmQKKwlpbiBkZWZpbmVfaW5zbjsgdXNlIGV4cGxpY2l0IE1FTSBvZiByZWdpc3Rlcl9vcGVyYW5kIGluc3RlYWQuCisKK1R1ZSBKdW4gMjcgMTE6NDI6NTYgMTk5NSAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CisKKwkqIGkzODYvaTM4Ni5jIChwcmludF9vcGVyYW5kLCBjYXNlIGBKJyk6IFVzZSBqbnMgZm9yIEdFIGFuZCBqcyBmb3IKKwlMVC4KKworVHVlIEp1biAyNyAwNzo1ODo1NSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgVEFSR0VUX0VYUFIpOiBPbmx5IHVzZSBvcmlnaW5hbF90YXJnZXQKKwlpZiAhaWdub3JlLgorCitUdWUgSnVuIDI3IDA3OjI3OjI2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogQ29tbXV0ZSB1bmV4dGVuZCBhbmQgY29udmVydCBvbgorCWxfY29uc3QgYW5kIHJfY29uc3QuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcywgY2FzZSBBX0NPTlNUUlVDVE9SLCBBX0RFU1RSVUNUT1IpOgorCVNldCBUUkVFX1VTRUQuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERvbid0IGNhbGwgYWx0ZXJfY29uZCB1bmxlc3MKKwljb25kaXRpb24gaXMgb24gY2MwLgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBIYW5kbGUgaW5wdXQgb3BlcmFuZHMgdGhhdCBtYXkgbm90CisJYmUgaW4gYSByZWdpc3Rlci4KKworTW9uIEp1biAyNiAxOToyMzowNSAxOTk1ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGFybS9saWIxZnVuY3MuYXNtIChMX2R2bWRfdGxzKTogUmVuYW1lZCBmcm9tIExfZGl2bW9kc2lfdG9vbHMuCisJKiBhcm0vdC1zZW1pIChMSUIxQVNNRlVOQ1MpOiBSZW5hbWUgX2R2bWRfdGxzIGZyb20gX2Rpdm1vZHNpX3Rvb2xzLgorCitNb24gSnVuIDI2IDE5OjE4OjA2IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogdW5yb2xsLmMgKGZpbmRfc3BsaXR0YWJsZV9yZWdzKTogV2hlbiBjb21wbGV0ZWx5IHVucm9sbGluZyBsb29wLAorCWNoZWNrIGZvciBub24taW52YXJpYW50IGluaXRpYWwgYml2IHZhbHVlcy4KKworTW9uIEp1biAyNiAxOToxMzo1NCAxOTk1ICBHcmFuIFVkZGVib3JnICA8dWRkZWJvcmdAY2FybWVuLnNlPgorCisJKiBjb25maWd1cmUgKGlbMzQ1XTg2LSotaXNjKik6IEZpeCBtaXNzcGVsbGVkICJyZmlsZSIgdG8gImlmaWxlIi4KKworTW9uIEp1biAyNiAxODo1ODoyMiAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogUHJvdGVjdCB0aGUgY29uZGl0aW9uIGZyb20KKwliZWluZyBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2UuCisJKGRvX2p1bXAsIGNhc2UgVFJVVEhfQU5ESUZfRVhQUiwgVFJVVEhfT1JJRl9FWFBSKTogTGlrZXdpc2UuCisKK01vbiBKdW4gMjYgMTg6NTI6MzYgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBmaXhpbmNsdWRlcyAoc3RyaW5nLmgpOiAgRml4IHJldHVybiB2YWx1ZSBmb3IgbWVte2NjcHksY2hyLGNweSxzZXR9CisJYW5kIHN0cntsZW4sc3BuLGNzcG59IG9uIHN5c1Y2OC4KKworTW9uIEp1biAyNiAwNjo1NDo1MCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogaTM4Ni9vc2Zyb3NlLmggKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IEdvIGJhY2sgdG8gbWFraW5nIGxvbmcKKwlkb3VibGUgPT0gZG91YmxlLgorCitUaHUgSnVuIDIyIDE5OjE0OjQxIDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBtYWtlLWNjMS5jb20gKGlmIERPX0xJTkspOiBTa2lwIGMtcGFyc2UuKiBwcm9jZXNzaW5nIHdoZW4KKwlvbmx5IHJlbGlua2luZy4KKwkoZ2FzX21lc3NhZ2UpOiBVcGRhdGUgdG8gcmVmbGVjdCBjdXJyZW50IHZlcnNpb24sIGFuZCBnaXZlCisJYSBkaWZmZXJlbnQgbWVzc2FnZSBpZi93aGVuIG5vIHZlcnNpb24gb2YgZ2FzIGlzIGZvdW5kLnhvCisKK1RodSBKdW4gMjIgMTg6NTI6MzcgMTk5NSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBhcm0vbGliMWZ1bmNzLmFzbSAoX19fbW9kc2kzKTogQ29ycmVjdGx5IHNldCBTSUdOIHJlZ2lzdGVyIGZvcgorCW1vZHVsbyBpbnZvbHZpbmcgbmVnYXRpdmUgbnVtYmVycy4KKworVGh1IEp1biAyMiAxODozMjoyNyAxOTk1ICBVd2UgU2VpbWV0ICAoc2VpbWV0QGNoZW1pZS51bmkta2wuZGUpCisKKyAgICAgICAgKiB4bS1hdGFyaS5oIChIWik6IE5vdyAxMDAgYW5kIGRvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCisKK1RodSBKdW4gMjIgMTg6MjY6MTIgMTk5NSAgSmVmZnJleSBBIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBDb3JyZWN0bHkgaGFuZGxlIHJldHVybmluZyBCTEttb2RlCisJc3RydWN0dXJlcyBpbiByZWdpc3RlcnMgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGlzIG5vdAorCWEgbXVsdGlwbGUgb2Ygd29yZF9zaXplLgorCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogTGlrZXdpc2UuCisKKwkqIHBhLWd1eDcuaCAoTElCX1NQRUMpOiBVbmRlZmluZSBiZWZvcmUgcmVkZWZpbmluZy4KKwkqIHBhLWhwdXguaCAoTElCX1NQRUMpOiBMaWtld2lzZS4KKwkqIHBhLWhwdXg3LmggKExJQl9TUEVDKTogTGlrZXdpc2UuCisKKwkqIGdlbm11bHRpbGliOiBXb3JrIGFyb3VuZCBocHV4OCAvYmluL3NoIGNhc2UgYnVnLgorCisJKiBwYS5oIChMSUJfU1BFQyk6IERlZmluZSB0byBhdm9pZCAtbGcuCisKK1RodSBKdW4gMjIgMTg6MTk6MDkgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIFRBUkdFVF9FWFBSKTogVXNlIG9yaWdpbmFsX3RhcmdldC4KKworCSogY29sbGVjdDIuYyAobG9jYXRlbGliKTogRml4IHBhcnNpbmcgb2YgTERfTElCUkFSWV9QQVRILgorCitUaHUgSnVuIDIyIDE4OjE1OjU0IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjb25maWd1cmU6IENyZWF0ZSBhbiBlbXB0eSBNYWtlZmlsZS5zZWQgZmlyc3QsIHRvIHdvcmsKKwlhcm91bmQgYSBOZXh0c3RlcCAzLjMgYnVnLgorCitUaHUgSnVuIDIyIDE4OjAzOjQ0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChTVEFHRVNUVUZGKTogQWRkIHN0YW1wLWNydC4KKwkoY3J0YmVnaW4ubywgY3J0ZW5kLm8pOiBOb3cgZGVwZW5kIG9uIHN0YW1wLWNydC4KKwkoc3RhbXAtY3J0KTogTmV3IHJ1bGUsIHRvIGFjdHVhbGx5IGJ1aWxkIGNydHtiZWdpbixlbmR9Lm8uCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBVbmxpbmsgZXhwb3J0X2ZpbGUgYmVmb3JlIHdlIHJldHVybi4KKworVGh1IEp1biAyMiAxNDoyNTo1NiAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogcnM2MDAwLmggKFNUUklQX05BTUVfRU5DT0RJTkcpOiBTdG9yZSBOQU1FIGFuZCBzdHJsZW4oTkFNRSkgaW50bworCWxvY2FsIHZhcmlhYmxlczsgY2FzdCByZXN1bHQgb2YgYWxsb2NhIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgorCitUdWUgSnVuIDIwIDE4OjI1OjI5IDE5OTUgIERvdWdsYXMgUnVwcCAgKGRydXBwQGNzLndhc2hpbmd0b24uZWR1KQorCisJKiBhbHBoYS9jb25maWctbnQuc2VkLCBpMzg2L2NvbmZpZy1udC5zZWQ6IEVkaXQgdG8gYWRkCisJYSBtaXNzaW5nICQoZXhlZXh0KSBmb3IgQ0NDUC4KKworVHVlIEp1biAyMCAxODoxODowMCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBwcm90b2l6ZS5jIChkZWZhdWx0X2luY2x1ZGUpOiBVc2UgbmFtZSBhbmQgdHdvIGludHMgdG8gYmUKKwljb21wYXRpYmxlIHdpdGggZGVmaW5pdGlvbiBvZiBJTkNMVURFX0RFRkFVTFRTLgorCitNb24gSnVuIDE5IDE5OjI0OjI5IDE5OTUgIFRlZCBMZW1vbiAgPG1lbGxvbkB0b2NjYXRhLmZ1Z3VlLmNvbT4KKworICAgICAgKiBtaXBzL25ldGJzZC5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRG9uJ3QgZW1pdCBmdW5jdGlvbiBsYWJlbC4KKworTW9uIEp1biAxOSAxODozNDo1NSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IERvbid0IGRlZmluZSB3Y2hhcl90IHVuZGVyIEMrKy4KKworTW9uIEp1biAxOSAxNzoxMjo0MSAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jIChjb2xsZWN0X2V4cGFuc2lvbik6IFdvcmsgYXJvdW5kIGVudW0gYnVnIGluIHZheAorCXVsdHJpeCA0LjMgcGNjLgorCSogdHJlZS5jIChzaW1wbGVfY3N0X2VxdWFsKTogTGlrZXdpc2UuCisKK01vbiBKdW4gMTkgMTY6NTM6MDAgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIHdpbm50L3NwYXdudi5jOiBOZXcgZmlsZS4KKworTW9uIEp1biAxOSAxNjozMDoyOSAxOTk1ICBHbGVubiBCcm93biAgPGdsZW5uQG1hcnMubXlyaS5jb20+CisKKyAJKiBjYWxsZXItc2F2ZS5jIChzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBJZiBBVVRPX0lOQ19ERUMsIG1hcmsKKwlyZWdpc3RlciBpbmRpY2F0ZWQgYnkgUkVHX0lOQyBub3RlcyBhcyBsaXZlIHNvIHRoZXkgd2lsbCBiZSBzYXZlZC4KKworTW9uIEp1biAxOSAxNjoyMToxMiAxOTk1ICBKZWZmcmV5IEEgTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MsIGNhc2UgTE9XX1NVTSk6IEZpeCBsb2dpYyBidWcKKwlpbiBsYXN0IGNoYW5nZS4KKworTW9uIEp1biAxOSAxNDoxMTo0OSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIGludGVncmF0ZS5jIChpbnRlZ3JhdGVfZGVjbF90cmVlKTogT25seSBzZXQgREVDTF9BQlNUUkFDVF9PUklHSU4KKwlpZiB0aGUgZGVjbCByZXR1cm5lZCBieSBwdXNoZGVjbCBpcyB0aGUgb25lIHdlIHN0YXJ0ZWQgd2l0aC4KKworCSogbWlwcy5oIChjdXJyZW50X2Z1bmN0aW9uX25hbWUpOiBEZWxldGUgZGVjbGFyYXRpb24uCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBEb24ndCBzZXQgY3VycmVudF9mdW5jdGlvbl9uYW1lLgorCSogZ251LmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBMaWtld2lzZS4KKwkqIG1pcHMuYyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTogRGVsZXRlIGRlY2xhcmF0aW9uLgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IE5ldyB2YXJpYWJsZSBmbm5hbWUuICBVc2UgaXQgaW5zdGVhZCBvZgorCWN1cnJlbnRfZnVuY3Rpb25fbmFtZS4KKwkoZnVuY3Rpb25fZXBpbG9ndWUpOiBMaWtld2lzZS4KKworTW9uIEp1biAxOSAxMzoxMzoxNSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBhbHBoYS5oIChBU01fT1VUUFVUX0FTQ0lJKTogQWx3YXlzIHJlc2V0IGxpbmUgY291bnQgd2hlbgorCXN0YXJ0aW5nIG5ldyBsaW5lLgorCisJKiBzY2FuLWRlY2xzLmMgKHNjYW5fZGVjbHMpOiBGaXggdHlwbyB3aGVuIHJlc2V0dGluZyBQUkVWX0lEX1NUQVJULgorCisJKiBpMzg2L2NvbmZpZy1udC5zZWQsIGFscGhhL2NvbmZpZy1udC5zZWQ6IENoYW5nZSB2ZXJzaW9uIHRvIDIuNy4xLgorCitNb24gSnVuIDE5IDEzOjA2OjE0IDE5OTUgIERKIERlbG9yaWUgIChkakBkZWxvcmllLmNvbSkKKworCSogbXNkb3MvdG9wLnNlZDogU3VwcG9ydCBuZXcgYnVpbGQgdmFyaWFibGVzLgorCSogbXNkb3MvY29uZmlndXIuYmF0OiBNYWtlIG9wdGlvbnMuaCBhbmQgc3BlY3MuaC4KKwlDaGFuZ2UgcmVhbGNsZWFuIHRvIG1haW50YWluZXItY2xlYW4uCisKK0ZyaSBKdW4gMTYgMDY6NTQ6MDMgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogVmVyc2lvbiAyLjcuMCBSZWxlYXNlZC4KKworCSogb2JzdGFjay5jOiBBbHdheXMgZW5hYmxlIHRoaXMgY29kZSBmb3Igbm93LgorCisJKiBhbHBoYS5jIChhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogVXNlIHB0cl9tb2RlIGFuZCBjb252ZXJzaW9ucworCXdoZW4gbmVlZCBzbyB3b3JrcyBmb3IgYm90aCBPU0YgYW5kIE5ULgorCSogdmEtYWxwaGEuaCAoX192YV90c2l6ZSk6IFJvdW5kIHRvIGxvbmcgbG9uZyBub3QgbG9uZy4KKworVGh1IEp1biAxNSAxNzo1NDo1MiAxOTk1ICBCZGFsZSBHYXJiZWUgIDxiZGFsZUBnYWcuY29tPgorCisJKiBjb25maWd1cmUgKGEyOWstKi1jb2ZmKTogU3lub255bSBmb3IgYTI5ay0qLXVkaS4KKworVGh1IEp1biAxNSAxNzo1MToyMSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBEbyBhbGwgY29udmVyc2lvbnMgaW4gQ09OVkVSU0lPTl9JTlNOUy4KKworVGh1IEp1biAxNSAxNzozNjo0OSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9yZWdfbGlmZSk6IENhbGwgcmVjb3JkX3JlZ19saWZlX3BhdCB3aXRoIDAKKwlmb3IgZG91c2UgYXJndW1lbnQgc28gdGhhdCBVU0UncyBjcmVhdGVkIHRvIG1hcmsgdmFyaWFibGVzIHdpdGhpbgorCWJsb2NrcyBkb24ndCBnZXQgbWFya2VkIGFzIHNldC4KKworVGh1IEp1biAxNSAwNjoyODoxNSAxOTk1ICBEZW5uaXMgR2xhdHRpbmcgIChkZW5uaXNnQEN5YmVyU0FGRS5DT00pCisKKwkqIGNvbmZpZ3VyZTogQ2hhbmdlIG9uZSBzZWQgY29tbWFuZCB0byB3b3JrIGFyb3VuZCBtNjhrLW5leHQgYnVnLgorCitXZWQgSnVuIDE0IDIyOjE0OjM5IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBkZW5lYi5jeWdudXMuY29tPgorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogRG9uJ3QgdHVybiBvZmYgYXV0b19leHBvcnQgYmVjYXVzZSBvZiAtZy4KKwkobWFpbik6IElnbm9yZSB0aGUgYXJndW1lbnQgdG8gLW8uCisKKwkqIGFscGhhLmggKExJTktfU1BFQyk6IERvbid0IHBhc3MgLWluaXQgX19tYWluIGFueW1vcmUuCisJKiBhbHBoYS9vc2YxMi5oIChMSU5LX1NQRUMpOiBEaXR0by4KKwkqIG1pcHMvaXJpczUuaCAoTElOS19TUEVDKTogRGl0dG8uCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBQbGFjZSBvX2ZpbGUgYWZ0ZXIgYW4gaW5pdGlhbCAubyAobGlrZSBjcnQwLm8pLgorCUlmIHdlIGhhdmUgTERfSU5JVF9TV0lUQ0gsIHVzZSBpbml0IGFuZCBmaW5pIGZ1bmN0aW9ucyBmb3IKKwlleGVjdXRhYmxlcywgdG9vLiAgU3BlY2lmeSB0aGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWVzLgorCSh3cml0ZV9jX2ZpbGVfc3RhdCk6IEZpeCB0aGUgY2FzZSBvZiBkZXN0cnVjdG9ycyBidXQgbm8gY29uc3RydWN0b3JzLgorCURvbid0IGluY2x1ZGUgdGhlIGdlbmVyaWMtbmFtZWQgZnVuY3Rpb25zIGZvciBleGVjdXRhYmxlcy4KKwkod3JpdGVfY19maWxlKTogSWYgd2UgaGF2ZSBMRF9JTklUX1NXSVRDSCwgYWx3YXlzIHVzZQorCXdyaXRlX2NfZmlsZV9zdGF0LgorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogQWxzbyBhZGQgX0dMT0JBTF9fRD8gdG8gZXhwb3J0IGxpc3QuCisKKwkqIGdpbmNsdWRlL2lzbzY0Ni5oOiBEbyBub3RoaW5nIGlmIGNvbXBpbGVkIGFzIEMrKy4KKworV2VkIEp1biAxNCAxNzozOToxMCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnbnUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAoZm9ybWF0X2NoYXJfaW5mbywgY2FzZSAnbScpOiBTZXQgdHlwZSB0byB2b2lkLgorCShjaGVja19mb3JtYXRfaW5mbyk6IElmIHR5cGUgaXMgdm9pZCwgaWdub3JlIG9wZXJhbmQuCisKK1dlZCBKdW4gMTQgMTc6MDQ6MTAgMTk5NSAgUGF1bCBGLiBLdW56ICAoUGF1bF9LdW56QFNMQUMuU3RhbmZvcmQuRURVKQorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluX2FwcGx5X2FyZ3MpOiBQdXQgYmFjayBvcmlnaW5hbAorCXJlZ2lzdGVyIHNhdmUgYW5kIHJlc3RvcmUgb3JkZXIuCisKK1dlZCBKdW4gMTQgMTY6NTY6MjIgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9lYWJpLmggKElOVk9LRV9fbWFpbik6IERlZmluZSwgc28gX19lYWJpIGlzIGNhbGxlZCBhZnRlcgorCW1haW4ncyBhcmd1bWVudHMgYXJlIHNhdmVkLgorCisJKiByczYwMDAuYyAob3V0cHV0X3Byb2xvZyk6IERvbid0IGNhbGwgX19lYWJpIGhlcmUsIGxldAorCWNvbXBpbGVyIGNhbGwgaXQgYWZ0ZXIgdGhlIGFyZ3VtZW50cyB0byBtYWluIGFyZSBzYXZlZC4KKwkob3V0cHV0X3twcm9sb2csZXBpbG9nfSk6IERvbid0IHVzZSBmdW5jdGlvbnMgdW5kZXIgVi40IHRvIHNhdmUKKwlhbmQgcmVzdG9yZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisKK1dlZCBKdW4gMTQgMTY6NTI6MTIgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrL21vdDMzMDAuaCAoUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6IERlZmluZWQuCisKK1dlZCBKdW4gMTQgMTY6NDg6NTMgMTk5NSAgSmVycnkgRnJhaW4gIChqZXJyeUB0aXZvbGkuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoc3RhZ2VbMS00XSk6IENvcnJlY3RseSBsaW5rIGBhcycsIGBsZCcsIGFuZCBgY29sbGVjdDInLgorCitXZWQgSnVuIDE0IDA1OjUyOjA0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9iamMtYWN0LmMgKGhhY2tfbWV0aG9kX3Byb3RvdHlwZSk6IFNldCBERUNMX0NPTlRFWFQgb2YgcGFybXMuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBBbHdheXMgc2V0IExBU1QuCisKKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IE5ldyBwYXJhbWV0ZXIgZm9yIGF0dHJpYnV0ZXMuCisJKiBjLXRyZWUuaCAoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KKwkqIGMtbGFuZy5jIChmaW5pc2hfZmlsZSk6IFBhc3MgZXh0cmEgcGFybSB0byBzdGFydF9mdW5jdGlvbi4KKwkqIG9iamMtYWN0LmMgKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yLCByZWFsbHlfc3RhcnRfbWV0aG9kKTogTGlrZXdpc2UuCisJKiBjLXBhcnNlLmluIChmbmRlZiwgbmVzdGVkX2Z1bmN0aW9uLCBub3R5cGVfbmVzdGVkX2Z1bmN0aW9uKToKKwlMaWtld2lzZS4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogVXNlIGNvbnZlcnRfdG9fbW9kZSBpbnN0ZWFkIG9mCisJZ2VuX2xvd3BhcnQgd2hlbiBjb252ZXJ0aW5nIGluY29taW5nIHBhcm0uCisKK1R1ZSBKdW4gMTMgMTk6MTA6MzIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogcnM2MDAwLm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaCk6IEZpbmlzaCBsYXN0IGZpeDsgdXBkYXRlIG1hdGNoaW5nCisJY29uc3RyYWludC4KKworVHVlIEp1biAxMyAxODozMjo1MSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYm96by5tYXRlbWF0aWsuc3Uuc2U+CisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFdoZW4gY29udmVydGluZyBhIENPTkRfRVhQUiB0byBhbiBBQlNfRVhQUiwKKwlnZXQgdGhlIHR5cGVzIHJpZ2h0IGZvciBBQlNfRVhQUiB0byB3b3JrLgorCitNb24gSnVuIDEyIDE3OjA5OjU1IDE5OTUgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AYXhvbi5jeWdudXMuY29tKQorCisJKiByZW9yZy5jIChmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IFNldCBNQVlCRV9ORVZFUiBhY2NvcmRpbmcgdG8KKwljb2RlIG9mIFRSSUFMX0RFTEFZLCBub3QgVFJJQUwuCisKK01vbiBKdW4gMTIgMTU6MDI6MzcgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFJlc3RvcmUgY29kZSB0byBtYWtlIGxkIHN5bWxpbmsgaWYgISB1c2VfY29sbGVjdDIuCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IFVuZG8gcGF0Y2ggb2YgTWF5IDExLgorCS1ub3N0ZGxpYiBpbXBsaWVzIC1ub3N0YXJ0ZmlsZXMgYWdhaW4uCisJKiBkc3AxNnh4LmggKENST1NTX0xJTktfU1BFQyk6IExpa2V3aXNlLgorCSogaTM4Ni9mcmVlYnNkLmggKExJTktfU1BFQyk6IFVuZG8gcGF0Y2ggb2YgTWF5IDI0LgorCURvbid0IHBhc3MgIi1lIHN0YXJ0IiBpZiBub3N0ZGxpYi4KKwkqIGkzODYvc3VuLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogbTY4ay9zdW4ybzQuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBtNjhrL3N1bjMuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBtNjhrL3Z4bTY4ay5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIG1pcHMvbmV0YnNkLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogY29uZmlnL25ldGJzZC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHJzNjAwMC9tYWNoLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogc3BhcmMuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBzcGFyYy92eHNwYXJjLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBOZXcgYXJndW1lbnQgLW5vZGVmYXVsdGxpYnMuCisKK1N1biBKdW4gMTEgMjA6NDc6NTMgMTk5NSAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIE1ha2VmaWxlLmluIChmaXgtaGVhZGVyLm8pOiBEZXBlbmRzIG9uIHhzeXMtcHJvdG9zLmguCisKK1N1biBKdW4gMTEgMTU6MDc6NTggMTk5NSAgVGltIENhcnZlciAgKHRpbWNAaWJlYW0uaW50ZWwuY29tKQorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRG9uJ3QgY2FsbCBIQVJEX1JFR05PX05SRUdTCisJb24gcHN1ZWRvIHdoZW4gY2xlYXJpbmcgcmVnX2xhc3RfcmVsb2FkX3JlZy4KKworU3VuIEp1biAxMSAxNDowNzowNSAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIG02OGsubWQgKHthZGQsc3VifWRpe19tZW0sM30pOiBQYXR0ZXJucyBtZXJnZWQuCisKK1N1biBKdW4gMTEgMTM6NDM6MjYgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGJvem8ubWF0ZW1hdGlrLnN1LnNlPgorCisJKiBtNjhrLm1kIChjbXBkaSBtYXRjaGVyKTogU2V0IGNjX3N0YXR1cyBiZWZvcmUgcmV0dXJuaW5nLgorCisJKiBjb25maWcveG0tZnJlZWJzZC5oIChET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QpOiBEZWZpbmUuCisKK1N1biBKdW4gMTEgMTM6Mzg6NDkgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzIChtYXRoLmgpOiAgS2VlcCBkZWNsYXJhdGlvbiBvZiBhYnMgb24gSFBVWC4KKworU3VuIEp1biAxMSAxMjozMTo0MiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG9yLWxheW91dC5jICh2YXJpYWJsZV9zaXplKTogRG8gbm90aGluZyBpZiBTSVpFIGlzIGNvbnN0YW50LgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBTZWUgaWYgb3V0cHV0IG9wZXJhbmQgcGVybWl0cworCXJlZ2lzdGVyLiAgSWYgbm90LCBtYXJrIG91dHB1dCBhZGRyZXNzYWJsZSwgY2FsbCBleHBhbmRfb3BlcmFuZAorCW9uIGl0LCBhbmQgZ2l2ZSBlcnJvciBpZiBub3QgTUVNLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBIYW5kbGUgcHJvbW90aW9ucyBvZiBib3RoCisJcGFzc2VkIGFuZCBub21pbmFsIG1vZGVzIHNlcGFyYXRlbHkgYW5kIGluc2VydCBuZWVkZWQgY29udmVyc2lvbnMuCisJKHByb21vdGVkX2lucHV0X2FyZyk6IFJldHVybiAwIGlmIG5vbWluYWwgYW5kIHBhc3NlZCBtb2RlcyBkaWZmZXIuCisKKwkqIHN0bXQuYyAoYWxsX2Nhc2VzX2NvdW50LCBjYXNlIElOVEVHRVJfVFlQRSk6IEZpeCB0eXBvIGluIGNoZWNraW5nCisJZm9yIGludGVnZXIgYm91bmRzLgorCitTYXQgSnVuIDEwIDA4OjU1OjI1IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxpYmdjYzIuYyAoX2Zsb2F0ZGlkZik6IENvcnJlY3RseSBzZXQgZmxvYXQgc2l6ZXMuCisKKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24sIGNhc2UgIi1XYWxsIik6IERvbid0IHNldCBleHRyYV93YXJuaW5ncy4KKworCSogTWFrZWZpbGUuaW4gKGNwcGxpYi5vLCBmaXgtaGVhZGVyLm8pOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgorCShjcHBlcnJvci5vLCBjcHBleHAubywgY3BwaGFzaC5vKTogTmV3IHJ1bGVzLCB0byBzaG93IC5oIGRlcGVuZGVuY2llcy4KKworRnJpIEp1biAgOSAxODowNjoxMCAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgorCisJKiBjc2UuYyAoY3NlX2Jhc2ljX2Jsb2NrKTogRml4IHRlc3QgZm9yIHdoZXRoZXIgYmxvY2sgZW5kcyB3aXRoIGEKKwliYXJyaWVyLiAgUmV0dXJuIG5leHQgaW5zbiwgbm90IDAsIGlmIGJsb2NrIGVuZHMgaW4gYSBiYXJyaWVyLgorCitGcmkgSnVuICA5IDE3OjU4OjI5IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBmb2xkLWNvbnN0LmMgKGxzaGlmdF9kb3VibGUpOiBSZXBsYWNlIGAmJyB3aXRoIGAlJyB0byBmaXggdHlwby4KKwkoW2xyXXNoaWZ0X2RvdWJsZSk6IFRydW5jYXRlIHNoaWZ0IGNvdW50IG9ubHkgaWYgU0hJRlRfQ09VTlRfVFJVTkNBVEVELgorCVJlbW92ZSB1bm5lY2Vzc2FyeSBgY291bnQgPj0gcHJlYycgdGVzdC4KKworCSogY2V4cC55IChsZWZ0X3NoaWZ0KTogSWdub3JlIGludGVnZXIgb3ZlcmZsb3cuCisKKwkqIGNleHAueSAoc2tpcF9ldmFsdWF0aW9uKTogTmV3IHZhcmlhYmxlLgorCSgmJiwgfHwsID86KTogSW5jcmVtZW50IGl0IGluIHVuZXZhbHVhdGVkIHN1YmV4cHJlc3Npb25zLgorCSgvLCAlLCBpbnRlZ2VyX292ZXJmbG93KTogU3VwcHJlc3MgZGlhZ25vc3RpY3MgaWYgc2tpcF9ldmFsdWF0aW9uICE9IDAuCisJKHl5ZXJyb3IpOiBDbGVhciBza2lwX2V2YWx1YXRpb24uCisKK0ZyaSBKdW4gIDkgMTc6NDk6MDUgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGJvem8ubWF0ZW1hdGlrLnN1LnNlPgorCisJKiBtNjhrLm1kICh0c3RkaSk6IFJld3JpdGUuCisKK0ZyaSBKdW4gIDkgMTc6Mjg6NTUgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CisKKwkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6ICBIYW5kbGUgZGVjbGFyYXRpb25zIHdpdGgKKwltdWx0aXBsZSBjb21tYS1zZXBhcmF0ZWQgZGVjbGFyYXRvcnMuCisKK1RodSBKdW4gIDggMTk6MTY6MTIgMTk5NSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQorCisJKiBhcm0ubWQgKG1vdltzZF1mIGV4cGFuZHMpOiBEb24ndCBhbGxvdyBmcCBjb25zdGFudHMgaW4gcHNldWRvcworCXdoZW4gVEFSR0VUX1NPRlRfRkxPQVQuCisKK1RodSBKdW4gIDggMTk6MTE6NDMgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBleHBtZWQuYyAoc3RvcmVfc3BsaXRfYml0X2ZpZWxkKTogV2hlbiBhZGp1c3QgYXJnIGluCisJQllURVNfQklUX0VORElBTiBjYXNlLCB1c2UgbnVtYmVyIG9mIGJpdHMgaW4gYXJnIGZvciBNRU0gb3BlcmFuZHMKKwlhbmQgQklUU19QRVJfV09SRCBmb3Igb3RoZXIgb3BlcmFuZHMuCisJKGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKTogVW5kbyBsYXN0IGNoYW5nZS4KKworCSogdW5yb2xsLmMgKHZlcmlmeV9hZGRyZXNzZXMpOiBOZXcgZnVuY3Rpb24uCisJKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogVXNlIGl0IGluc3RlYWQgb2YgbWVtb3J5X2FkZHJlc3NfcC4KKworVGh1IEp1biAgOCAxODo1ODoxOCAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYm96by5tYXRlbWF0aWsuc3Uuc2U+CisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogQWx3YXlzIGNoZWNrIHJlc3VsdCBvZiBlbWl0X3N0b3JlX2ZsYWcuCisKK1RodSBKdW4gIDggMTI6MDI6MzQgMTk5NSAgRGF2aWQgRCBadWhuICAoem9vQGFybWFkaWxsby5jb20pCisKKwkqIGNwcGxpYi5jIChjcHBfcHVzaF9idWZmZXIpOiBJbmNsdWRlIGZpbGVuYW1lIGluIGVycm9yIG1lc3NhZ2UuCisKK1RodSBKdW4gIDggMTE6NTM6NDUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRG9uJ3QgY2FsbCBwcm9tb3RlX21vZGUgb24gYXJnCisJdW5sZXNzIFBST01PVEVfRlVOQ1RJT05fQVJHUyBkZWZpbmVkLgorCisJKiByczYwMDAubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoKTogRW5zdXJlIGxhYmVsIGlzIG9wZXJhbmQgMC4KKworCSogcnM2MDAwLm1kIChhdXhfdHJ1bmNkZnNmMik6IE5ldyBwYXR0ZXJuLgorCShtb3ZzZik6IFVzZSBpdCBpbnN0ZWFkIG9mIGludmFsaWQgU1VCUkVHIGFuZCB0cnVuY2Rmc2YyLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfbmFtZSk6IERpc2FibGUgd2Fybl9pZF9jbGFzaCBhcm91bmQKKwlnZXRfaWRlbnRpZmllciBjYWxsLgorCitXZWQgSnVuICA3IDE3OjIyOjI1IDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogY29uZmlndXJlIChnZGJfbmVlZHNfb3V0X2ZpbGVfcGF0aCk6IE5ldyB2YXJpYWJsZS4KKwkobTY4ay1tb3Rvcm9sYS1zeXN2KTogU2V0IGdkYl9uZWVkc19vdXRfZmlsZV9wYXRoIGlmIG5vdCB1c2luZyBnYXMuCisJKC5nZGJpbml0KTogSWYgZ2RiX25lZWRzX291dF9maWxlX3BhdGggaXMgc2V0LCBhZGQgYSAnZGlyJyBjb21tYW5kCisJZm9yICQob3V0X2ZpbGUpLgorCitXZWQgSnVuICA3IDE3OjE3OjE5IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBib3pvLm1hdGVtYXRpay5zdS5zZT4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogV2hlbiBmb2xkaW5nIGA8JyB0eXBlIG5vZGVzLCBtYWtlIHRydWVfdmFsdWUKKwlhbmQgZmFsc2VfdmFsdWUgaGF2ZSBjb3JyZWN0IHR5cGVzLgorCitXZWQgSnVuICA3IDA1OjA2OjQyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBjb2xsZWN0Mi5jIChDT0ZGIHNjYW5fcHJvZ19maWxlKTogVXNlIHRoZSBBSVggZHVwbGljYXRlIGVudHJ5LgorCitUdWUgSnVuICA2IDE4OjQzOjA5IDE5OTUgIEplZmZyZXkgQSBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEZVTkNUSU9OX0FSR19DQUxMRUVfQ09QSUVTKTogRGVmaW5lLgorCitUdWUgSnVuICA2IDE4OjIxOjE4IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgUExBQ0VIT0xERVJfRVhQUik6IENvbnNpZGVyIHR3byB0eXBlcworCWlkZW50aWNhbCBpZiB0aGVpciBUWVBFX01BSU5fVkFSSUFOVHMgYXJlIHRoZSBzYW1lLgorCisJKiBjLWRlY2wuYyAoc3RhcnRfZGVjbCk6IFNldCBERUNMX0NPTU1PTiBiZWZvcmUgY2FsbGluZworCWRlY2xfYXR0cmlidXRlcy4KKworCSogYTI5ay5jIChwcmludF9vcGVyYW5kcyk6IENhc3QgYXJncyB0byBiY29weSB0byBjaGFyICouCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBjbGVhciBERUNMX0NPTlRFWFQgb2YKKwluZXcgZGVjbCBpZiBpdCBpcyBhIGZ1bmN0aW9uLgorCitUdWUgSnVuICA2IDE3OjU3OjQ0IDE5OTUgIEViZXJoYXJkIE1hdHRlcyAgKG1hdHRlc0BhenUuaW5mb3JtYXRpay51bmktc3R1dHRnYXJ0LmRlKQorCisJKiBnY2MuYyAoZG9fc3BlY18xLCBjYXNlICdnJyk6IEhhbmRsZSAlTyBhcyBzdWZmaXggaWYgTUtURU1QX0VBQ0hfRklMRS4KKworVHVlIEp1biAgNiAxNzo1MzowNSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogVXBkYXRlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMKKwlpbnNpZGUgdGhlIGxvb3AgbW92aW5nIHRoZSBieXRlcywgbm90IG91dHNpZGUuCisKK1R1ZSBKdW4gIDYgMTQ6NTg6MzcgMTk5NSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIG02OGsuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEb24ndCBtYXJrIHBpYyByZWcgYXMgZml4ZWQuCisJKiBtNjhrLmMgKGZpbmFsaXplX3BpYyk6IEVtaXQgVVNFIGluc24gYXQgc3RhcnQgYW5kIGVuZCBvZiBmdW5jdGlvbi4KKworVHVlIEp1biAgNiAxMzo0Njo1NyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHNoLmMgKHByaW50X29wZXJhbmQpOiBDaGVjayBmb3IgYW5udWxsZWQgYnJhbmNoZXMuCisJKG91dHB1dF9tb3ZlZG91YmxlKTogSGFuZGxlIFNVQlJFRyBhZGRyZXNzZXMuCisJKG91dHB1dF9icmFuY2gpOiBIYW5kbGUgYW5udWxsZWQgYnJhbmNoZXMuCisJKHNoX2V4cGFuZF9wcm9sb2d1ZSk6IENvcnJlY3QgbnVtYmVyIG9mIHNhdmVkIHJlZ2lzdGVycyBmb3IKKwl2YXJhcmdzIGZ1bmN0aW9ucy4KKwkqIHNoLmg6IEFkZCBzb21lIGNvbW1lbnRzLgorCSogc2gubWQ6IEFkZCBzb21lIGNvbW1lbnRzLiAgQ2xlYW51cCBmb3JtYXR0aW5nLgorCSh0eXBlIGF0dHJpYnV0ZSk6IEFkZCBwc3RvcmUgYW5kIGNhbGwuCisJKHJldHVybiBkZWZpbmVfZGVsYXkpOiBSZW9yZ2FuaXplIHRvIG1ha2UgY2xlYXJlci4KKwkoY2FsbC9zZnVuYyBkZWZpbmVfZGVsYXkpOiBEZWZpbmUuCisJKGNicmFuY2ggZGVmaW5lX2RlbGF5KTogRGVmaW5lIHRvIGhhdmUgYW5udWwtdHJ1ZSBkZWxheSBzbG90LgorCShzdWJzaTMpOiBVc2UgYXJpdGhfcmVnX29wZXJhbmQgZm9yIG9wZXJhbmQgMi4KKwkoc2hpZnQgcGF0dGVybnMpOiBVc2UgY29uc3RfaW50X29wZXJhbmQgaW5zdGVhZCBvZiBpbW1lZGlhdGVfb3BlcmFuZAorCWZvciBzaGlmdCBjb3VudHMuCisJKHB1c2gpOiBBZGQgcHN0b3JlIGNvbnN0cmFpbnQgY2FzZS4KKwkobW92c2lfaSk6IE1vdmUgdC96IGNvbnN0cmFpbnQgcGFpciB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuCisJKGNhbGxpLCBjYWxsX3ZhbHVlaSk6IEFkZCAiY2FsbCIgYXR0cmlidXRlLgorCitNb24gSnVuICA1IDE5OjIzOjEzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogc2NoZWQuYyAoYXR0YWNoX2RlYXRocyk6IEluIGxhc3QgY2hhbmdlLCB1c2UgZmluZF9yZWdfbm90ZSBpbnN0ZWFkCisJb2YgZmluZF9yZWdub19ub3RlLgorCitNb24gSnVuICA1IDE5OjE3OjMxIDE5OTUgIFRvbSBRdWlnZ2xlICAocXVpZ2dsZUBsb3ZlbGFjZS5lbmdyLnNnaS5jb20pCisKKwkqIG1pcHMvaXJpczUuaCAoTUFDSElORV9UWVBFKTogU2F5ICJJUklYIDUueCIsIG5vdCAiNS4wIi4KKwkoTk9fRE9MTEFSX0lOX0xBQkVMKTogVW5kZWZpbmUuCisJKiBtaXBzLmggKHNkYl9iZWdpbl9mdW5jdGlvbl9saW5lKTogTmV3IGRlY2xhcmF0aW9uLgorCShQVVRfU0RCX0ZVTkNUSU9OX0VORCk6IE5ldyBkZWZpbml0aW9uLgorCitNb24gSnVuICA1IDE4OjU2OjEwIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAuYyAoZXhwYW5kX2Jsb2NrX21vdmUpOiBEb24ndCBkbyBibG9jayBtb3ZlcyB3aGVyZSB3ZSBjbG9iYmVyCisJZml4ZWQgbnVtYmVycyBvZiByZWdzLCBpbnN0ZWFkIG1vdmUganVzdCAxLTggYnl0ZXMgYXQgYSB0aW1lLgorCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRik6IENvcHkgZmlsZXMgcHJvZHVjZWQgYnkgLWRhIGFuZAorCS1zYXZlLXRlbXBzIHRvIHRoZSBzdGFnZSBzdWJkaXJlY3Rvcmllcy4KKworTW9uIEp1biAgNSAwODoxODo0NiAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYm96by5tYXRlbWF0aWsuc3Uuc2U+CisKKwkqIGNvbWJpbmUuYyAocmVnX2RlYWRfYXRfcCk6IFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzLCBzdG9wIGF0IEJBUlJJRVIuCisKKwkqIG02OGsuYyAocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSAnUicgZm9yIHJlZ2lzdGVycy4KKwkqIG02OGsubWQgKGNtcGRpKTogUmV3cml0ZSB0byBhdm9pZCBib2d1cyBtYXRjaGluZyBjb25zdHJhaW50cy4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEluIGxhc3QgY2hhbmdlLCBkb24ndCBkZWZlcmVyZW5jZSBUQVJHRVQKKwlpZiBpdCBpcyAwLgorCisJKiBwYS5tZCAobW92c2ljYyk6IFVzZSBNQVRDSF9EVVAgZm9yIG9wZXJhbmQgNCBhbmQgNS4KKworTW9uIEp1biAgNSAwODoxNDo1NiAxOTk1ICBKZWZmcmV5IEEgTGF3ICAobGF3QGNzLnV0YWguZWR1KQorCisJKiBwYS5jIChocHBhX2VuY29kZV9sYWJlbCk6IEFsbG9jYXRlIHN0dWZmIG9uIHBlcm1hbmVudF9vYnN0YWNrCisJcmF0aGVyIHRoYW4gdmlhIG1hbGxvYy4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRml4IHR5cG8gaW4gc2l6ZSBwYXNzZWQgdG8gYWxsb2NhLgorCitNb24gSnVuICA1IDA4OjEwOjU1IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLm1kOiBVc2UgInNvbWVfb3BlcmFuZCIgZm9yIHBhdHRlcm5zIHZhbGlkIG9ubHkgZHVyaW5nCisJcmVsb2FkIGFuZCBtZWFudCB0byBoYW5kbGUgYWRkaW5nIG1vcmUgUExVUyBvcGVyYXRvcnMgZHVyaW5nCisJcmVnaXN0ZXIgZWxpbWluYXRpb24uCisKK01vbiBKdW4gIDUgMDc6MzE6NTMgMTk5NSAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24sIGNhc2UgRkxPQVQsIFVOU0lHTkVEX0ZMT0FUKToKKwlUcnVuY2F0ZSB0byByZXF1ZXN0ZWQgbW9kZS4KKworU2F0IEp1biAgMyAyMjowODo1MSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20+CisKKwkqIHNjaGVkLmMgKGF0dGFjaF9kZWF0aHMpOiBEb24ndCBhZGQgYSBSRUdfREVBRCBub3RlIGlmIGEgUkVHX1VOVVNFRAorCW5vdGUgaXMgYWxyZWFkeSBwcmVzZW50LgorCitTYXQgSnVuICAzIDE4OjM2OjU3IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHBhLmggKGhwcGFfYnVpbHRpbl9zYXZlcmVncyk6IEFkZCBkZWNsYXJhdGlvbi4KKworU2F0IEp1biAgMyAxODoxMToyNiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKHNjYW4tZGVjbHMubyk6ICBEZXBlbmRzIG9uIGNwcGxpYi5oLgorCitGcmkgSnVuICAyIDE5OjIzOjQ3IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBEb24ndCB1c2Ugbm9uLVJFRyBUQVJHRVQgaW4gMi13b3JkIGNhc2UuCisKK1RodSBKdW4gIDEgMTk6MzA6MzAgMTk5NSAgVG9yIEVnZ2UgICh0ZWdnZUBmbGlwcGVyLnB2di51bml0Lm5vKQorCisJKiBtODhrLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBOZXcgYXJndW1lbnQuCisJKiBtODhrL2RvbHBoaW4ubGQ6IEFkZGVkIHN0YXJ0IG9mIGNvbW1lbnQuCisKK1RodSBKdW4gIDEgMTk6MTI6MjggMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlIChhMjlrLSotYnNkKik6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitUaHUgSnVuICAxIDE4OjUxOjUzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKTogRm9yIFJFRyBjYXNlLCBjb21wdXRlIHRvdGFsX2JpdHMKKwlmcm9tIG1vZGUgaW5zdGVhZCBvZiBhc3N1bWluZyBCSVRTX1BFUl9XT1JELgorCitUaHUgSnVuICAxIDE4OjM0OjMxIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoRklYRURfUjEzKTogRGVmYXVsdCB0byAwLgorCSh7RklYRUQsQ0FMTF9VU0VEfV9SRUdJU1RFUlMpOiBVc2UgRklYRURfUjEzIGZvciByZWdpc3RlciAxMy4KKwkqIHN5c3Y0LmggKEZJWEVEX1IxMyk6IERlZmluZSB0byBiZSAxLgorCitXZWQgTWF5IDMxIDIwOjU3OjI2IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CisKKwkqIG02OGsubWQgKFtzdV1tdWxzaTNfaGlnaHBhcnQpOiBQYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyB0bworCWNvbnN0X3VpbnQzMl9vcGVyYW5kLgorCSogbTY4ay5jIChjb25zdF91aW50MzJfb3BlcmFuZCk6IFJlamVjdCBuZWdhdGl2ZSBudW1iZXJzLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHRfaGlnaHBhcnQpOiBVc2Ugd2lkZV9vcDEgZm9yIGFsbCBtdWx0aXBsaWVzLgorCShleHBhbmRfZGl2bW9kKTogVW5kbyBOb3YgMTIgY2hhbmdlLiAgSW5zdGVhZCwgYWRkIHNwZWNpYWwgY2FzZQorCWZvciBkaXZpc2lvbiBieSBNSU5fSU5UIGluIHNpZ25lZCBUUlVOQ19ESVZfRVhQUiBjYXNlLgorCitXZWQgTWF5IDMxIDIwOjQ0OjIxIDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay5tZCAob25lX2NtcGxkaTIpOiBOZXcgcGF0dGVybi4KKwkoe2EsbH1zaHJkaXszLF9jb25zdH0pOiBBbGxvdyA2MyBhcyBzaGlmdCBjb3VudC4KKworV2VkIE1heSAzMSAxNDo1NjozMSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24sIGFzc2VtYmxlX3ZhcmlhYmxlKToKKwlNYWtlIHN1cmUgZmlyc3RfZ2xvYmFsX29iamVjdF9uYW1lIGlzIGluIHBlcm1hbmVudCBvYnN0YWNrLgorCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6IENsZWFuIHVwIHNldHRpbmcgb2YgUlRYX1VOQ0hBTkdJTkdfUAorCXdoZW4gbWFraW5nIGEgTUVNLgorCisJKiByZW9yZy5jIChzdHJ1Y3QgcmVzb3VyY2VzKTogTmV3IGZpZWxkIHVuY2hfbWVtb3J5LgorCShDTEVBUl9SRVNPVVJDRVMsIG1hcmtfdGFyZ2V0X2xpdmVfcmVncywgZGJyX3NjaGVkdWxlKTogQ2xlYXIgaXQuCisJKG1hcmtfe3JlZmVyZW5jZWQsc2V0fV9yZXNvdXJjZXMsIHJlZHVuZGFudF9pbnNuKTogU2V0IGl0LgorCShmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IExpa2V3aXNlLgorCShyZXNvdXJjZV9jb25mbGljdHNfcCk6IFRlc3QgaXQuCisKKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IEZpeCB0eXBvIGluIGNhbGwgdG8gc2V0c19jYzBfcC4KKworCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBjYWxsIGV4cGFuZF9mdW5jdGlvbl9lbmQuCisKKwkqIGNhbGxzLmMgKHByZXBhcmVfY2FsbF9hZGRyZXNzKTogT25seSBjYWxsIHVzZV9yZWcgb24KKwlzdGF0aWNfY2hhaW5fcnR4IGlmIGl0IGlzIGEgUkVHLgorCisJKiBjb25maWd1cmUgKGEyOWstKi1ic2QqKTogVXNlIHQtYTI5ay4KKwkqIHQtYTI5azogTmV3IGZpbGUuCisJKiBhMjlrL3QtYTI5a2JhcmUgKExJQkdDQzFfVEVTVCk6IE5ldyBudWxsIGRlZmluaXRpb24uCisJKiBhMjlrL3QtdngyOWsgKExJQkdDQzFfVEVTVCk6IExpa2V3aXNlLgorCitXZWQgTWF5IDMxIDE0OjE3OjQyIDE5OTUgIEplZmZyZXkgQSBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaHBwYSotKi1ic2QqKTogRG8gbm90IHJ1biBmaXhpbmNsdWRlcy4KKwkoaHBwYSotKi1vc2YqKTogTGlrZXdpc2UuCisJKGhwcGEqLSotbGl0ZXMqKTogTGlrZXdpc2UuCisKKwkqIHBhLmggKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IFVzZSAiUlInIiByYXRoZXIgdGhhbiAiUiciIGZvcgorCXN5bWJvbGljIGFkZHJlc3Nlcy4KKwkqIHBhLm1kIChzeW1ib2xpYyBISUdIIHBhdHRlcm5zKTogTGlrZXdpc2UuCisJKHN5bWJvbGljIExPX1NVTSBwYXR0ZXJuKTogTGlrZXdpc2UuCisKK1dlZCBNYXkgMzEgMTQ6MTE6NTMgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAoYWxsIG1vdnN0cmkgcmVjb2duaXplcnMpOiBFbGltaW5hdGUgdXBkYXRpbmcgdGhlIHBvaW50ZXJzLgorCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogRG9uJ3QgcGFzcyBhcmd1bWVudCBvZiAjIGJ5dGVzIHRvCisJaW5jcmVtZW50IHBvaW50ZXJzIGJ5IHRvIG1vdnN0cnNpIGV4cGFuZGVycy4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogRml4IHR5cG8gd2l0aCAtbXN0cmluZyBoYW5kbGluZy4KKworCSogcnM2MDAwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IFNldCBNQVNLX1NUUklOR19TRVQgZXhwbGljaXRseQorCWlmIC1tbm8tc3RyaW5nLCBzbyB0aGF0IGl0IGNhbiBvdmVycmlkZSB0aGUgcHJvY2Vzc29yIGRlZmF1bHQuCisKK1dlZCBNYXkgMzEgMDc6MzE6NTMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGMtY29tbW9uLmMgKHRydXRodmFsdWVfY29udmVyc2lvbiwgQklUX0FORF9FWFBSKTogTWFrZSBzdXJlIHRoYXQKKwl0aGUgcmVzdWx0IGhhcyBib29sZWFuX3R5cGVfbm9kZS4KKworVHVlIE1heSAzMCAxOTowMzoyMSAxOTk1ICBKLlQuIENvbmtsaW4gIDxqdGNAY3lnbnVzLmNvbT4KKworCSogc3RkZGVmLmg6IFVuZGVmaW5lIF9CU0RfWFhYX1RfIGlmIF9HQ0NfWFhYX1QgaXMgZGVmaW5lZCBvbiBCU0QKKwlOZXQvMiBkZXJpdmVkIHN5c3RlbXMuCisKK1R1ZSBNYXkgMzAgMDg6MTc6MzcgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvKTogT3BlcmFuZCAwIGNvbnN0cmFpbnQKKwljaGFuZ2VkIGZyb20gIitnIiB0byAiK2QqYW0iLgorCShzaW1pbGFyIGFub255bW91cyBISW1vZGUgcGF0dGVybik6IExpa2V3aXNlLgorCisJKiBtNjhrLm1kICh0c3RkaSk6IFVzZSB0c3Qvc3VieCAjMCBpbnN0ZWFkIG9mIG5lZy9uZWd4LgorCUFsbG93ICJhIiBhbmQgIj4iIGZvciBvcGVyYW5kIDAuCisKK01vbiBNYXkgMjkgMTk6MjQ6NDMgMTk5NSAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogbTY4ay5tZCAoYWRkc2lfbHNocnNpXzMxKTogVXNlIG1hdGNoX2R1cCwgbm90IGNvbnN0cmFpbnQgIjEiLAorCWZvciBtYXRjaGluZyBpbnB1dHMuCisKK01vbiBNYXkgMjkgMTI6Mzk6NTggMTk5NSAgQWxsZW4gQnJpZ2dzIDxicmlnZ3NAcnJpbmMuY29tPgorCisJKiBpMzg2L2lzYy5oICh7U1RBUlRGSUxFLExJQixDUFB9X1NQRUMpOiBIYW5kbGUgLVhwIGxpa2UgLXBvc2l4LgorCSogaTM4Ni94LWlzYzMgKFhfQ0ZMQUdTKTogQWRkIC1YcC4KKworTW9uIE1heSAyOSAxMjoyODo0MSAxOTk1ICBKLlQuIENvbmtsaW4gIChqdGNAY3lnbnVzLmNvbSkKKworCSogY29uZmlndXJlIChzcGFyYy0qLW5ldGJzZCk6IEFkZCBtaXNzaW5nIGFzdGVyaXNrIGF0IGVuZC4KKworTW9uIE1heSAyOSAwODo1NTo0OCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHJlY29nX2Zvcl9jb21iaW5lKTogTmV3IHBhcm0gUEFEREVEX1NDUkFUQ0hFUzsgc2V0IGl0LgorCSh0cnlfY29tYmluZSk6IEFjY3VtdWxhdGUgbnVtYmVyIG9mIHNjcmF0Y2hlcyBhbmQgdXBkYXRlIG1heF9zY3JhdGNoLgorCShzaW1wbGlmeV9zZXQpOiBBZGQgZXh0cmEgcGFybSB0byByZWNvZ19mb3JfY29tYmluZS4KKworCSogcm9tcC5tZCAoY2FsbCk6IFB1dCBVU0UgZm9yIHIwIGluIENBTExfSU5TTjsgY2FsbCBjYWxsX2ludGVybmFsCisJdG8gZW1pdCBpbnNuLgorCShjYWxsX2ludGVybmFsKTogTmV3IG5hbWUgZm9yIGFub255bW91cyBjYWxsLgorCShjYWxsX3ZhbHVlLCBjYWxsX3ZhbHVlX2ludGVybmFsKTogTGlrZXdpc2UuCisKKwkqIHdpbm50L3htLXdpbm50Lmg6IFByb3RlY3QgbW9zdCBkZWZpbml0aW9ucyB3aXRoICNpZm5kZWYuCisJKiBhbHBoYS94bS13aW5udC5oOiBJbmNsdWRlIGFscGhhL3htLWFscGhhLmgsIHRoZW4gd2lubnQveG0td2lubnQuaC4KKwkoUE9TSVgpOiBVbmRlZmluZS4KKwkqIHhtLWFscGhhLmg6IERvbid0IGluY2x1ZGUgYWxsb2NhLmggZm9yIHdpbm50LgorCitTdW4gTWF5IDI4IDE4OjM0OjAxIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZTogTWFrZSBzZWQgY29tbWFuZHMgbW9yZSB1bmlmb3JtLgorCisJKiBNYWtlZmlsZS5pbjogUHJvcGVybHkgdXNlICQoc3JjZGlyKSBmb3IgZmlsZXMgdGhhdCBoYXZlIGl0CisJaW4gdGhlaXIgcmVmZXJlbmNlIGFzIGEgdGFyZ2V0IG9mIGEgcnVsZS4KKwkobGliZ2NjMS5hKTogQWRkIG1pc3NpbmcgUkFOTElCX1RFU1QgdXNlLgorCisJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogQ2FsbCBkb19wZW5kaW5nX3N0YWNrX2FkanVzdC4KKworU3VuIE1heSAyOCAxODowODo0MSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogbTY4ay5tZCAoZGl2bW9kaGk0LCB1ZGl2bW9kaGk0KTogVXNlICJkbXNLIiBmb3Igb3BlcmFuZCAyLgorCitGcmkgTWF5IDI2IDE3OjAxOjIyIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBmaXhpbmNsdWRlczogRml4IGJvZ3VzIHJlY3Vyc2l2ZSA8c3RkbGliLmg+IGluIE5FV1MtT1MgNC4wQy4KKworRnJpIE1heSAyNiAwODowMjoxNCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEZvciB0aGUgQ09OU1RSVUNUT1IKKwljYXNlLCBpZiB0aGUgdHlwZSBpcyBhIHJlY29yZCwgcmVjdXJzZSwganVzdCBsaWtlIGZvciB1bmlvbnMuCisKK1RodSBNYXkgMjUgMDc6NTY6MTQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBBZGQgYHNlbCcsIGB0YWhvZScsIGByMzAwMCcsIGByNDAwMCcgdG8gdGhlCisJbGlzdCBvZiBwcmUtQU5TSSBzeW1ib2xzIHRoYXQgbmVlZCB0byBiZSBzdXJyb3VuZGVkIHdpdGggX18gX18uCisJQWxsb3cgd2hpdGUgc3BhY2UgYmV0d2VlbiBgIycgYW5kIGBpZicgd2hlbiBsb29raW5nIGZvciBsaW5lcyB0byBwYXRjaC4KKworCSogb2JqYy9zYXJyYXkuaCAoUFJFQ09NUFVURV9TRUxFQ1RPUlMsIHN0cnVjdCBzb2Zmc2V0KToKKwlVc2UgI2lmZGVmIF9fc3BhcmNfXywgbm90IHNwYXJjLgorCisJKiBtNjhrLm1kIChhZGRzaV9sc2hyc2lfMzEsIGFzaGxkaV9jb25zdCwgYXNocmRpX2NvbnN0LCBsc2hyZGlfY29uc3QpOgorCVJlcGxhY2UgYG1vdicgd2l0aCBgbW92ZScuCisKK1RodSBNYXkgMjUgMDc6MzU6MzcgMTk5NSAgQWxsZW4gQnJpZ2dzICA8YnJpZ2dzQHJyaW5jLmNvbT4KKworCSogbGliZ2NjMi5jIChMX2VoLCBpMzg2KTogUmVtb3ZlIGluLWxpbmUgY29tbWVudHMgaW4gYXNzZW1ibHkKKwljb2RlLS10aGUgJyMnIGNoYXJhY3RlciBpcyBub3QgdmFsaWQgZm9yIHRoZSBTWVNWIGFzLgorCitUaHUgTWF5IDI1IDA3OjI4OjU0IDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoQkNfQUxMKTogUmVzdG9yZSBpdCBmcm9tIE1heSAyMiBjaGFuZ2U7IHZtcyB1c2VzIGl0LgorCShTVEFHRVNUVUZGKTogVXNlIGl0LgorCitUaHUgTWF5IDI1IDA3OjExOjU2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKGFscGhhX2VtaXRfc2V0X2NvbnN0KTogRG9uJ3QgY2FsbCBleHBhbmRfYmlub3AgZm9yCisJb3RoZXIgdGhhbiBhZGQgaWYgU0ltb2RlIGFuZCBjYW4ndCBjcmVhdGUgcHNldWRvcy4KKworV2VkIE1heSAyNCAyMTozODoyNCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNjaGVkLmMgKHJlZW1pdF9ub3Rlcyk6IE5ldyBmdW5jdGlvbi4KKwkoc2NoZWR1bGVfYmxvY2spOiBDYWxsIHJlZW1pdF9ub3RlcyB0d2ljZS4gIFJlb3JnYW5pemUgY29kZSBmb3IKKwloYW5kbGluZyBTQ0hFRF9HUk9VUF9QIGluc25zLCBzbyB0aGF0IHJlZW1pdF9ub3RlcyB3b3Jrcy4KKworCSogc2gvc2guYyAoc2hpZnRjb3N0cywgZ2Vuc2hpZnR5X29wKTogQWRkIFNIMyBzdXBwb3J0LgorCSogc2gvc2gubWQgKGFzaGxzaTMsIGxzaHJzaTMpOiBBZGQgU0gzIHN1cHBvcnQuCisJKGFzaGxzaTNfZCwgYXNocnNpM19kLCBsc2hyc2kzX2QpOiBOZXcgcGF0dGVybnMgZm9yIFNIMy4KKwkoYXNocnNpMl8zMSk6IFJlbW92ZSByLyFyIGNvbnN0cmFpbnQuCisKK1dlZCBNYXkgMjQgMTc6MDA6NDcgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHRyZWUuYyAodHlwZV9saXN0X2VxdWFsKTogQ2FsbCBzaW1wbGVfY3N0X2VxdWFsIGJlZm9yZSBjaGVja2luZworICAgICAgICB0eXBlcy4KKworV2VkIE1heSAyNCAxNjo0OTo0OSAxOTk1ICBEb3VnbGFzIFJ1cHAgIChkcnVwcEBjcy53YXNoaW5ndG9uLmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYzIuYSk6IEhhbmRsZSBjYXNlIG9mIHNlcGFyYXRlIHNyY2Rpci4KKworV2VkIE1heSAyNCAxNjoyMjowMSAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY29uZmlndXJlOiBEZWZpbmUgJChNQUtFKSBpZiBgbWFrZScgZG9lc24ndC4KKworV2VkIE1heSAyNCAxNTo1MDo1MSAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGRzcDE2eHguaCAoQ1JPU1NfTElOS19TUEVDKTogRU5ERklMRV9TUEVDIG1vdmVkIHRvIC1ub3N0YXJ0ZmlsZXMuCisJKiBpMzg2L2ZyZWVic2QuaCAoTElOS19TUEVDKTogRG9uJ3QgcGFzcyAiLWUgc3RhcnQiIGlmIG5vc3RhcnRmaWxlcworCXJhdGhlciB0aGFuIG5vc3RkbGliLgorCSogaTM4Ni9zdW4uaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBtNjhrL3N1bjJvNC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIG02OGsvc3VuMy5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIG02OGsvdnhtNjhrLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy9uZXRic2QuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBjb25maWcvbmV0YnNkLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogcnM2MDAwL21hY2guaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBzcGFyYy5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHNwYXJjL3Z4c3BhcmMuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisKKwkqIG04OGsvbTg4ay5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBVc2UgR0VUX01PREVfQklUU0laRS4KKworV2VkIE1heSAyNCAxNTo0NDowNCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogTWFrZSBzdXJlIHRoYXQgYSBmb2xkZWQgVFJVVEhfTk9UX0VYUFIKKyAgICAgICAgcmV0YWlucyB0aGUgc2FtZSB0eXBlLgorCisJKiBjLWNvbW1vbi5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBBbHNvIGFjY2VwdCBUUlVUSF9OT1RfRVhQUi4KKworV2VkIE1heSAyNCAxNTo0MTo1MSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjcGx1cy1kZW0uYyAoc3Ryc3RyLCBzdHJuY21wLCBzdHJsZW4pOiBSZW1vdmUgZGVjbGFyYXRpb25zLgorCisJKiB0cmVlLmMgKHR5cGVfbGlzdF9lcXVhbCwgc2ltcGxlX2NzdF9saXN0X2VxdWFsLCBpbmRleF90eXBlX2VxdWFsKToKKwlDaGVjayBmb3Igc2ltcGxlX2NzdF9lcXVhbCByZXR1cm4gdmFsdWUgb2YgLTEuCisKK1dlZCBNYXkgMjQgMTA6MDU6MjQgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzEtdGVzdC5jIChzdGFydCwgX3N0YXJ0KTogUHJvdmlkZSBkZWNsYXJhdGlvbnMsIHNvIHRoYXQKKwl0aGUgR05VIGxpbmtlciBkb2Vzbid0IGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgZGVmYXVsdGluZyB0aGUKKwlzdGFydCBhZGRyZXNzLgorCisJKiByczYwMDAvc3lzdjQuaCAoU1RSSVBfTkFNRV9FTkNPRElORyk6IFJlZGVmaW5lIGJhY2sgdG8gdGhlCisJb3JpZ2luYWwgZGVmaW5hdGlvbiwgcmF0aGVyIHRoYW4gdGhlIGRlZmluYXRpb24gdXNlZCBpbiByczYwMDAuaC4KKwkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IFVzZSBTVFJJUF9OQU1FX0VOQ09ESU5HLgorCSogcnM2MDAwLmggKFNUUklQX05BTUVfRU5DT0RJTkcpOiBTa2lwIGxlYWRpbmcgJyonLgorCisJKiByczYwMDAuaCAoTUFTS19TVFJJTkdfU0VULCBUQVJHRVRfU1RSSU5HX1NFVCk6IEFkZCB0YXJnZXQKKwlmbGFncyBiaXQgZm9yIHdoZXRoZXIgLW1zdHJpbmcgd2FzIGFjdHVhbGx5IHVzZWQuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBNQVNLX1NUUklORyB0byBhbGwgcG93ZXIgdGFyZ2V0cy4gIFNldAorCU1BU0tfU1RSSU5HX1NFVCBmb3IgLW1zdHJpbmcgYW5kIC1tbm8tc3RyaW5nLgorCShUQVJHRVRfREVGQVVMVCk6IEFkZCBNQVNLX1NUUklORy4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogQWRkIE1BU0tfU1RSSU5HIHRvCisJYWxsIHBvd2VyIHRhcmdldHMuICBNYWtlIGFuIGV4cGxpY2l0IC1tc3RyaW5nLy1tbm8tc3RyaW5nIG92ZXJyaWRlCisJdGhlIC1tY3B1PXByb2Nlc3NvciBkZWZhdWx0LgorCisJKiByczYwMDAvZWFiaWxlLmggKENQUF9TUEVDKTogQ29weSBmcm9tIHN5c3ZsZS5oIHRvIHByb3ZpZGUgdGhlCisJYXBwcm9wcmlhdGUgbGl0dGxlIGVuZGlhbiBkZWZhdWx0cy4KKworCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBVc2UgYXNzZW1ibGVfbmFtZSB0bworCW91dHB1dCB0aGUgY2Fub25pY2FsIG5hbWUuCisKK1dlZCBNYXkgMjQgMDE6MjE6MTUgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogRGVmaW5lLgorCShSUzYwMDBfT1VUUFVUX0JBU0VOQU1FKTogVXNlIGl0LgorCitUdWUgTWF5IDIzIDE5OjU0OjIxIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogZ2NjLmMgKGxpbmtfY29tbWFuZF9zcGVjKTogTW92ZSBFTkRGSUxFX1NQRUMgZnJvbSAtbm9zdGRsaWIKKwl0byAtbm9zdGFydGZpbGVzLgorCitUdWUgTWF5IDIzIDE3OjAxOjUwIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogYWxwaGEubWQgKG5lZ3NpMi0yKTogQ2hhbmdlIG91dHB1dCBwYXR0ZXJuIHRvICMuCisKKwkqIG1pcHMuYyAoZW1iZWRkZWRfcGljX29mZnNldCk6IE91dHB1dCBSVEwgdG8gaW5pdGlhbGl6ZQorCWVtYmVkZGVkX3BpY19mbmFkZHJfcnR4LgorCShtaXBzX2ZpbmFsaXplX3BpYyk6IERlbGV0ZS4KKwkqIG1pcHMuaCAobWlwc19maW5hbGl6ZV9waWMpOiBEZWxldGUgZGVjbGFyYXRpb24uCisJKEZJTkFMSVpFX1BJQyk6IERlbGV0ZS4KKwkoSU5JVF9FWFBBTkRFUlMpOiBDbGVhciBlbWJlZGRlZF9waWNfZm5hZGRyX3J0eC4KKwkqIG1pcHMubWQgKGdldF9mbmFkZHIpOiBBZGQgPSB0byBvdXRwdXQgY29udHJhaW50LgorCisJKiBzaC5jIChzaGlmdF9hbW91bnRzKTogQ29ycmVjdCBlbnRyeSBmb3Igc2hpZnRzIGJ5IDI5LgorCSogc2gubWQgKHNldHQpOiBOZXcgcGF0dGVybi4KKwkobW92c2lfaSk6IENoYW5nZSBzb3VyY2UgY29uc3RyYWludCBmb3IgbW92ZSB0byBUIHJlZyB0byBiZSAneicuCisKKwkqIG1pcHMvZWNvZmYuaCAoU1RBUlRGSUxFX1NQRUMpOiBEZWZpbmUgdG8gbnVsbCBzdHJpbmcuCisJKiBtaXBzL2VsZmwuaCwgbWlwcy9lbGZsNjQuaDogQ29ycmVjdCB0eXBvIGluIGNvbW1lbnQuCisKKwkqIG1pcHMvZWxmbG9yaW9uLmgsIG1pcHMvZWxmb3Jpb24uaCAoTUlQU19DUFVfREVGQVVMVCk6IERlbGV0ZS4KKwkqIG1pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IERlbGV0ZSAjaWZkZWYgTUlQU19DUFVfREVGQVVMVCBjb2RlLgorCUFkZCAjaWZkZWYgTUlQU19DUFVfREVGQVVMVF9TVFJJTkcgY29kZSBiZWZvcmUgdGhlIGZpcnN0CisJbWlwc19jcHVfc3RyaW5nIHRlc3QuCisKK1R1ZSBNYXkgMjMgMDc6MjI6MzYgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcm9tcC5jIChoYXNoX3J0eCk6IEF2b2lkIHdhcm5pbmcgb24gaW50LXRvLXBvaW50ZXIgY29udmVyc2lvbi4KKwkob3V0cHV0X2Zwb3BzKTogQ2FzdCBhcmdzIHRvIGJjb3B5IHRvIGNoYXIgKi4KKworCSogY3BwbGliLmMgKGluaXRpYWxpemVfYnVpbHRpbnMpOiBBZGQgbWlzc2luZyBwYXJtIHRvIHRpbWVzdGFtcCBjYWxsLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1saWJvYmpjKTogRG9uJ3QgZGVwZW5kIG9uIGxpYm9iamMuYS4KKworCSogYy1wYXJzZS5pbjogT2JqYyBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIG5vdyA0OC4KKwkocGFybSk6IFVzZSBzZXRzcGVjcy9yZXN0b3JlIGhlcmUuCisJKHBhcm1saXN0X29yX2lkZW50aWZpZXJzKTogTm90IGhlcmUuCisKK01vbiBNYXkgMjIgMTk6MzA6MzAgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBoODMwMC5tZCAobW92c2ZfaDgzMDBoKTogQWRkIG1pc3NpbmcgcG9zdC1pbmMgY2FzZSB0byBjb25zdHJhaW50cy4KKworTW9uIE1heSAyMiAxNDozODozNiAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogRG8gU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMKKwloZXJlLgorCSogcnM2MDAwLmggKE9WRVJSSURFX09QVElPTlMpOiBOb3QgaGVyZS4KKworCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogSGFuZGxlIG1vdmVzIHdpdGhvdXQgc3RyaW5nCisJaW5zdHJ1Y3Rpb25zIGJ5IGdlbmVyYXRpbmcgYSBzZXJpZXMgb2YgbG9hZHMgYW5kIHN0b3Jlcy4KKwkob3V0cHV0X3Byb2xvZyk6IFN1cHBvcnQgLW1uby10b2Mgb24gVi40IGFuZCBlYWJpIHN5c3RlbXMuCisKKwkqIHJzNjAwMC9zeXN2NC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW10b2MgYW5kIC1tbm8tdG9jLgorCShTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBzb21lIHdhcm5pbmdzIGZvciBpbmNvbXBhdGlibGUKKwlzd2l0Y2hlcy4KKwkoVE9DX1NFQ1RJT05fRlVOQ1RJT04pOiBNYWtlIC1tbm8tdG9jIGxpa2UgLW1yZWxvY2F0YWJsZSBpbiB0aGF0CisJd2UgZG9uJ3QgcHV0IHRoZSBtaW5pbWFsIHRvYyBwb2ludGVyIGluIHRoZSBnbG9iYWwgdG9jIHNlY3Rpb24uCisJKExJTktfU1BFQyk6IFVzZSAtb2Zvcm1hdCB0byBzZXQgbGluayBvdXRwdXQgZm9ybWF0LCBub3QgLW0uCisKKwkqIHJzNjAwMC90LWVhYmlnYXMgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogQnVpbGQKKwlsaWJnY2MuYSB2YXJpYW50cyB3aXRoIC1tbm8tdG9jIHN1cHBvcnQuCisJKiByczYwMDAvdC1wcGNnYXMgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogRGl0dG8uCisKK01vbiBNYXkgMjIgMDc6MTA6NTIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3BsdXMtZGVtLmMgKG15c3Ryc3RyKTogUmVwbGFjZW1lbnQgZm9yIHN0cnN0ci4KKworCSogY29uZmlndXJlOiBTcGxpdCB1cCBsb25nIHNlZCBjb21tYW5kLgorCSogTWFrZWZpbGUuaW4gKFNZTUxJTkspOiBEZWxldGVkOyB1bnVzZWQuCisJKG9sZG9iamV4dCk6IERlbGV0ZWQ7IG5vIGxvbmdlciB1c2VkLgorCShGTEFHU19UT19QQVNTKTogSW5jbHVkZSBvYmpleHQgYW5kIGV4ZWV4dC4KKwkoU1RBR0VTVFVGRiwgcHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogVXNlICQob2JqZXh0KSwgbm90IC5vLgorCSh0ZXN0X3Byb3RvaXplX3NpbXBsZSwgY29tcGFyZXssM30sIGdudWNvbXBhcmV7LDN9KTogTGlrZXdpc2UuCisJKFNUQUdFU1RVRkYsIHNwZWNzLCBnY2MtY3Jvc3MsIGNvbGxlY3QyKTogQWRkIG1pc3NpbmcgJChleGVleHQpLgorCShsaWJnY2MxLm51bGwsIGxpYmdjY1sxMl0uYSwgc3RhZ2VbMS00XSk6IExpa2V3aXNlLgorCSh4Z2NjLCBjYzEsIGNjMW9iaiwgZW5xdWlyZSk6IFVzZSAkQCBpbnN0ZWFkIG9mIGZpbGVuYW1lIGZvciAtbyB2YWx1ZS4KKwkoY29sbGVjdDIsIG1pcHMtdGZpbGUsIG1pcHMtdGR1bXAsIGdlbiopOiBMaWtld2lzZS4KKwkoYmktYXJpdHksIGJpLW9wY29kZSwgYmktb3BuYW1lLCBjY2NwLCBjcHBtYWluKTogTGlrZXdpc2UuCisJKHByb3RvaXplLCB1bnByb3RvaXplLCBnZW4tcHJvdG9zLCBmaXgtaGVhZGVyKTogTGlrZXdpc2UuCisJKGNydGJlZ2luLm8sIGNydGVuZC5vKTogRG9uJ3QgdXNlIC1vOyBtb3ZlIG91dHB1dCB0byBwcm9wZXIKKwlmaWxlbmFtZSAodXNpbmcgb2JqZXh0KSBpbnN0ZWFkLgorCShCSV9BTEwsIEJDX0FMTCwgYnl0ZWNvZGUpOiBEZWxldGVkOyB1bnVzZWQuCisJKGJpLSoubywgY2V4cC5vLCBzdGFtcC17cHJvdG8sZml4aW5jfSk6IFJlbW92ZSB1bm5lZWRlZCAkKHNyY2RpcikuCisJKGdldG9wdHssMX0ubywgU1lTQ0FMTFMuYy5YKTogTGlrZXdpc2UuCisJKGluc3RhbGwtZHJpdmVyKTogTmV3IHRhcmdldC4KKwkoaW5zdGFsbC1ub3JtYWwpOiBEZXBlbmQgb24gaXQuCisJKGluc3RhbGwtY29tbW9uKTogRG9uJ3QgZGVwZW5kIG9uIHhnY2MuCisJKG1ha2V0ZXN0KTogRGVsZXRlZDsgbm8gbG9uZ2VyIHVzZWQuCisJKHN0YWdlWzEtNF0pOiBVc2UgbmFtZSBjb2xsZWN0LWxkLCBub3QgcmVhbC1sZC4KKwkocmlza3ktc3RhZ2VbMS00XSk6IFVzZSBzdGFnZVsxLTRdIGFzIGRlcGVuZGVuY2llczsgZG9uJ3QgY29weS4KKwkqIGFscGhhL2NvbmZpZy1udC5iYXQsIGkzODYvY29uZmlnLW50LmJhdDogTWFrZSB7LGgsdH1jb25maWcuaAorCWFuZCB0bS5oIGJ5IHdyaXRpbmcgYSBzaW5nbGUgI2luY2x1ZGUgbGluZS4KKwlVcGRhdGUgd2F5IHNwZWNzLmggYW5kIG9wdGlvbnMuaCBhcmUgd3JpdHRlbi4KKwkqIGFscGhhL2NvbmZpZy1udC5zZWQsIGkzODYvY29uZmlnLW50LnNlZDogU2V0IG5ldyB2YXJpYWJsZXMKKwlpbnRvIE1ha2VmaWxlLgorCUJ1aWxkIHdpbm50Lm9iai4KKwlFZGl0IENDQ1AgZGVmaW5pdGlvbi4KKwkqIGFscGhhL3gtd2lubnQsIGkzODYveC13aW5udCAob2xkb2JqZXh0KTogRGVsZXRlZC4KKwlBZGQgcnVsZXMgZm9yIC5jLm9iaiwgLmFkYi5vYmosIGFuZCAuYWRzLm9iai4KKwkoTElCMkZVTkNTX0VYVFJBLCBzcGF3bnYubyk6IE5ldyBydWxlcy4KKwkqIGkzODYveC13aW5udCAob2JqZXh0KTogTm93IC5vYmosIG5vdCAuby4KKworCSogZ2NjLmMgKEhBVkVfT0JKRUNUX1NVRkZJWCk6IE5ldyBtYWNyby4KKwkocHJvY2Vzc19jb21tYW5kKTogQ29udmVydCB4Lm8gdG8geC5mb28gZm9yIE9CSkVDVF9TVUZGSVggb2YgIi5mb28iLgorCShkb19zcGVjXzEpOiBBdm9pZCBzaGFkb3cgdmFyaWFibGUgImkiIGFuZCBhbHdheXMgdXNlIGZvciBsb29wIHZhci4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsX3RvcF9sZXZlbCk6IFJlbW92ZWQ7IG5vIGxvbmdlciB1c2VkLgorCSogb2JqYy1hY3QuYzogTnVtZXJvdXMgZm9ybWF0dGluZyBjaGFuZ2VzLgorCShOVUxMVCk6IERlbGV0ZWQ7IGFsbCB1c2VzIGNoYW5nZWQgdG8gTlVMTF9UUkVFLgorCShnZXRfe3N0YXRpYyxvYmplY3R9X3JlZmVyZW5jZSwgb2JqY19hZGRfc3RhdGljX2luc3RhbmNlKToKKwlVc2UgcHVzaF9vYnN0YWNrcyBpbnN0ZWFkIG9mIHNhdmluZyBvYnN0YWNrcyBtYW51YWxseS4KKwkoYnVpbGRfe3NlbGVjdG9yLGNsYXNzfV9yZWZlcmVuY2VfZGVjbCk6IExpa2V3aXNlLgorCShidWlsZF9vYmpjX3N0cmluZ19kZWNsLCBidWlsZF9wcm90b2NvbF9yZWZlcmVuY2UpOiBMaWtld2lzZS4KKwkoY29tcF97bWV0aG9kLHByb3RvfV93aXRoX3Byb3RvKTogTGlrZXdpc2UuCisJKGNyZWF0ZV9idWlsdGluX2RlY2wsIHN5bnRoX21vZHVsZV9wcm9sb2d1ZSk6IFNldCBERUNMX0FSVElGSUNJQUwKKwlmb3IgaW50ZXJuYWwgb2JqZWN0cy4KKwkoYnVpbGRfe3NlbGVjdG9yLGNsYXNzfV9yZWZlcmVuY2VfZGVjbCwgYWRkX29iamNfZGVjbHMpOiBMaWtld2lzZS4KKwkoZ2VuZXJhdGVfb2JqY19zeW10YWJfZGVjbCwgYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiBMaWtld2lzZS4KKwkoYnVpbGRfcHJvdG9jb2xfcmVmZXJlbmNlKTogTGlrZXdpc2UuCisJKGJ1aWxkX29iamNfc3RyaW5nX2RlY2wsIHN5bmNoX2ZvcndhcmRfZGVjbGFyYXRpb25zKTogTGlrZXdpc2UuCisJRGVsZXRlIGNhbGwgdG8gZW5kX3RlbXBvcmFyeV9hbGxvY2F0aW9uLgorCShnZW5lcmF0ZV9zdGF0aWNfcmVmZXJlbmNlcywgZ2VuZXJhdGVfc3RyaW5ncyk6IExpa2V3aXNlLgorCShidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSwgZ2VuZXJhdGVfY2F0ZWdvcnkpOiBMaWtld2lzZS4KKwkoZ2VuZXJhdGVfe2l2YXJzLHByb3RvY29sfV9saXN0LCBidWlsZF9wcm90b2NvbF9yZWZlcmVuY2UpOiBMaWtld2lzZS4KKwkoYnVpbGRfb2JqY19zdHJpbmdfb2JqZWN0KTogSWYgbmV4dF9ydW50aW1lLCBwdXQgZXZlcnl0aGluZyBpbgorCXBlcm1hbmVudCBvYnN0YWNrLgorCShvYmpjX2FkZF9zdGF0aWNfaW5zdGFuY2UpOiBVc2UgYnVpbGRfZGVjbCBpbnN0ZWFkIG9mIHN0YXJ0X2RlY2wKKwlhbmQgZmluaXNoX2RlY2xfdG9wX2xldmVsLgorCShidWlsZF97Y2xhc3NfcmVmZXJlbmNlLG9iamNfc3RyaW5nfV9kZWNsKTogQ2xlYXIgREVDTF9DT05URVhULgorCShzdGFydF9jbGFzcyk6IEV4aXQgd2l0aCBGQVRBTF9FWElUX0NPREUsIG5vdCAxLgorCShhZGRfb2JqY19kZWNscyk6IERvbid0IHNldCBERUNMX0lOX1NZU1RFTV9IRUFERVIuCisKKwkqIHRyZWUuYyAodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBIYW5kbGUgYXR0cmlidXRlIG9uCisJcG9pbnRlci10by1mdW5jdGlvbiB0eXBlcy4KKworU3VuIE1heSAyMSAxNzoxNjozNyAxOTk1ICBKLiBULiBDb25rbGluIDxqdGNAY3lnbnVzLmNvbT4KKworCSogbWlwcy9uZXRic2QuaCAoSEFWRV9TVFJFUlJPUik6IFJlbW92ZS4KKwkqIG1pcHMveG0tbmV0YnNkLmg6IE5ldyBmaWxlLgorCSogbWlwcy90LW1pcHMtbmV0YnNkOiBEZWxldGVkLgorCSogY29uZmlndXJlIChtaXBzLWRlYy1uZXRic2QpOiBVc2UgeG0tbmV0YnNkLmggYW5kIHQtbGliYy1vay4KKworU3VuIE1heSAyMSAxNzoxNjozNyAxOTk1ICBBcm5lIEguIEp1dWwgIChhcm5lakBwdnYudW5pdC5ubykKKworCSogbWlwcy9uZXRic2QuaDogVXNlIF9fc3RhcnQgYXMgZW50cnkgcG9pbnQuIElmZGVmIHNvbWUKKwlwYXRocyBvbiBDUk9TU19DT01QSUxFLgorCitTdW4gTWF5IDIxIDA4OjM5OjI2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKGRhdGFkZWYsIGZuZGVmLCBpdmFyX2RlY2wsIG15ZGVjbHMpOgorCVJlc3RvcmUgZGVjbHNwZWNfc3RhY2sgc2luY2Ugc2V0c3BlY3MgaXMgdXNlZC4KKwkocGFybWxpc3Rfb3JfaWRlbnRpZmllcnMpOiBVc2Ugc2V0c3BlY3MgYmVmb3JlIHBhcnNpbmcgcGFybXMKKwlhbmQgcmVzdG9yZSBhZnRlciBwYXJzaW5nIHBhcm1zLgorCitTdW4gTWF5IDIxIDAxOjA0OjUyIDE5OTUgIEplZmZyZXkgQS4gTGF3ICA8bGF3QHNuYWtlLmNzLnV0YWguZWR1PgorCisJKiBwYS5jIChocHBhX2VuY29kZV9sYWJlbCk6IE5ldyB2YXJpYWJsZSAicGVybWFuZW50IiB0bworCXdoZXJlL2hvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGUgbmV3IGxhYmVsLiAgQWxsCisJY2FsbGVycyBjaGFuZ2VkLgorCitTYXQgTWF5IDIwIDE2OjUzOjMwIDE5OTUgIE1pa2UgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAubWQgKGluc3YsIGV4dHopOiBGYWlsIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgUUkgb3IgSEkgcmVnIHRvCisJYXZvaWQgcGFyYWRveGljYWwgc3VicmVnJ3MgYmVpbmcgY3JlYXRlZCBpbiBSVEwgcGhhc2UsIHdoaWNoIHVzZXMKKwlTSW1vZGUgdG8gbG9hZCBmcm9tIG1lbW9yeSBpZiAgc3RydWN0dXJlIGlzIGxhdGVyIG1vdmVkIHRvIHN0YWNrLgorCitTYXQgTWF5IDIwIDA2OjQ0OjU5IDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay5tZCAodWRpdm1vZGhpNCk6IE91dHB1dCAiZGl2dSIgaW5zdGVhZCBvZiAiZGl2cyIuCisKK1NhdCBNYXkgMjAgMDY6MTE6MzIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogRG9uJ3QgcmVsb2FkIGluc2lkZSBhIFNVQlJFRworCXdoZW4gU1VCUkVHX1dPUkQgaXMgbm9uemVyby4KKworCSogYy1kZWNsLmMgKHNoYWRvd190YWdfd2FybmVkKTogRG9uJ3Qgd2FybiBhYm91dCB1c2VsZXNzIGtleXdvcmQKKwlpZiBpbiBzeXN0ZW0gaGVhZGVyIGZpbGUuCisKKwkqIHRyZWUuYyAoc2ltcGxlX2NzdF9lcXVhbCk6IERvbid0IGxvb2sgYXQgbGFuZ3VhZ2Utc3BlY2lmaWMKKwlub2RlcyBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQncyBpbiB0aGVtLgorCisJKiBjcHBlcnJvci5jOiAjaW5jbHVkZSBjb25maWcuaCBiZWZvcmUgYW55IG90aGVyIC5oIGZpbGUuCisJKiBjb2xsZWN0Mi5jOiBMaWtld2lzZS4KKworCSogaTM4Ni9jb25maWctbnQuYmF0OiBBZGQgbWlzc2luZyBeTSBvbiB0d28gbGluZXMuCisJQWRkIGNhc2UgZm9yIEZvcnRyYW47IGZpeCB0eXBvIGluIEFkYSBjYXNlLgorCSogYWxwaGEvY29uZmlnLW50LmJhdDogQWRkIGNhc2UgZm9yIEZvcnRyYW47IGZpeCB0eXBvIGluIEFkYSBjYXNlLgorCisJKiBtNjhrL3QtbmV4dCAoTElCR0NDMSwgQ1JPU1NfTElCR0NDMSk6IE1ha2Ugbm90LCBub3QgImxpYmdjYzEubnVsbCIuCisJKE9USEVSX0ZJWElOQ0xVREVTX0RJUlMsIExJTUlUU19IX1RFU1QpOiBEZWxldGUgZnJvbSBoZXJlLgorCSogbTY4ay94LW5leHQgKE9USEVSX0ZJWElOQ0xVREVTX0RJUiwgTElNSVRTX0hfVEVTVCk6IE1vdmUgdG8gaGVyZS4KKworRnJpIE1heSAxOSAxOTozMDoyMCAxOTk1ICBTdGFuIENveCAgKGdjY0BkZy1ydHAuZGcuY29tKQorCisgICAgICAqIGNydHN0dWZmLmM6IEFkZGVkIHJlZmVyZW5jZSB0byBJTklUX1NFQ1RJT05fUFJFQU1CTEUgZm9yIHN5c3RlbXMgdGhhdAorICAgICAgZG8gc29tZXRoaW5nIHdoaWNoIG11c3QgYmUgdW5kb25lIHByaW9yIHRvIF9fZG9fZ2xvYmFsX2N0b3JzLgorCitGcmkgTWF5IDE5IDE5OjI3OjA4IDE5OTUgIEFsYW4gTW9kcmEgIDxhbGFuQFNQUkkuTGV2ZWxzLlVuaVNBLkVkdS5BdT4KKworCSogaTM4Ni9saW51eC1hb3V0LmggKENQUF9TUEVDKTogQWRkIGRlZmluZXMgZm9yIC1mUElDLgorCSogaTM4Ni9saW51eC1vbGRsZC5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCitGcmkgTWF5IDE5IDE3OjQ2OjI4IDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogY29sbGVjdDIuYyAoc3Ryc3RyKTogRGVsZXRlZC4KKwkqIGNwbHVzLWRlbS5jIChzdHJzdHIpOiBEZWZpbmUgaWZuZGVmIFBPU0lYLgorCitGcmkgTWF5IDE5IDExOjE2OjUxIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBjcHBsaWIuYyAoY29sbGVjdF9leHBhbnNpb24pOiAgRG9uJ3QgZXNjYXBlICdAJyBpbnNpZGUgc3RyaW5nLgorCitGcmkgTWF5IDE5IDA2OjU5OjIxIDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiB2bXNjb25maWcuY29tIChwcm9jZXNzX29iamNfbGliLCBjb25maWd1cmVfbWFrZWZpbGUpOiBOZXcgcm91dGluZXMuCisJKGJjX2FsbC5saXN0LCAuL3ZheC5tZCwgb2JqYy1vYmpzLm9wdCwgb2JqYy1oZHJzLmxpc3QpOiBOZXcgZmlsZXMKKwljcmVhdGVkIGF0IGNvbmZpZyB0aW1lLgorCShiY19hbGwub3B0LCAuL21kLik6IE5vIGxvbmdlciBjcmVhdGVkLgorCSogbWFrZS1jYzEuY29tOiBIYW5kbGUgcmV2aXNlZCBmaWxlbmFtZXMgZnJvbSB2bXNjb25maWcuY29tOworCShET19PQkpDTElCKTogTmV3IHZhcmlhYmxlLCBwbHVzIGNvZGUgdG8gY29tcGlsZSBvYmpjLyoue2MsbX0uCisKK1dlZCBNYXkgMTcgMTY6MTU6MzEgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGN5Z251cy5jb20+CisKKwkqIGk5NjAuYyAoaTk2MF9vdXRwdXRfbGRjb25zdCk6IE5ldyBjb2RlIGZvciBYRm1vZGUuCisJQWxzbywgbW92ZSBTRm1vZGUgY29kZSB0byBpbW1lZGlhdGVseSBhZnRlciBERm1vZGUgY29kZS4KKwkoU19NT0RFUywgRF9NT0RFUyk6IEhhbmRsZSBYRm1vZGUuCisJKFhGX01PREVTKTogV2FzIFRGX01PREVTLCBoYW5kbGUgWEZtb2RlIGluc3RlYWQgb2YgVEZtb2RlLgorCShoYXJkX3JlZ25vX21vZGVfb2spOiBSZXBsYWNlIFRGbW9kZSB3aXRoIFhGbW9kZS4KKwkoaTk2MF9vdXRwdXRfbG9uZ19kb3VibGUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGk5NjAuaCAoREFUQV9BTElHTk1FTlQpOiBEZWZpbmUuCisJKFJPVU5EX1RZUEVfQUxJR04pOiBBbGlnbiBYRm1vZGUgc2NhbGFycyBhdCAxMjggYml0IGJvdW5kYXJpZXMuCisJKFJPVU5EX1RZUEVfU0laRSk6IFJvdW5kIHVwIHRoZSBzaXplIG9mIFhGbW9kZSBvYmplY3RzIHRvIDEyOCBiaXRzLgorCShDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogVXNlIENPTlNUMF9SVFggYW5kIENPTlNUMV9SVFgKKwlzbyB0aGF0IGFsbCBGUCBtb2RlcyBhcmUgcmVjb2duaXplZC4KKwkoQVNNX09VVFBVVF9MT05HX0RPVUJMRSk6IERlZmluZS4KKworCSogaTk2MC5tZDogQ2hhbmdlIGFsbCBURm1vZGUgcGF0dGVybnMgdG8gaGF2ZSBYRm1vZGUuCisJKG1vdnhmIHJlY29nbml6ZXIsIGZyYW1lIHZlcnNpb24pOiBVc2UgbW92dCwgbGR0LCBhbmQgc3R0LgorCShtb3Z4ZiByZWNvZ25pemVyLCBub24tZnJhbWUgdmVyc2lvbik6IERlbGV0ZS4KKwkoZXh0ZW5kZGZ4ZjIpOiBEZWxldGUgKiBiZWZvcmUgZiBjb25zdHJhaW50LgorCShleHRlbmRzZnhmMik6IExpa2V3aXNlLgorCitXZWQgTWF5IDE3IDE3OjUzOjM1IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogSW5jcmVtZW50IGNvcHlfc3RhcnRfbHVpZCBpZiBjb3B5X3N0YXJ0CisJaXMgbG9vcF9zdGFydC4KKworV2VkIE1heSAxNyAxNzo0NDo1NyAxOTk1ICBMZWUgSXZlcnNvbiAgPGxlZWlAQ2FuYWRhLkFJLlNSSS5DT00+CisKKwkqIGZvbGQtY29uc3QuYyAoaW52ZXJ0X3RydXRodmFsdWUsIGNhc2UgQ0xFQU5VUF9QT0lOVF9FWFBSKTogTmV3IGNhc2UuCisKK1R1ZSBNYXkgMTYgMTg6NTE6MTYgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9yczYwMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tc3RyaW5nIHRvIGVuYWJsZSBzdHJpbmcKKwlpbnN0cnVjdGlvbnMsIGFuZCAtbW5vLXN0cmluZyB0byBkaXNhYmxlIHRoZW0uCisJKE1PVkVfTUFYKTogRG9uJ3QgdGVzdCBUQVJHRVRfTVVMVElQTEUgYW55bW9yZS4KKwkoTUFYX01PVkVfTUFYKTogU2V0IHRvIDgsIG5vdCAxNi4KKwkoZXhwYW5kX2Jsb2NrX21vdmUpOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIHJzNjAwMC9yczYwMDAuYyAoZXhwYW5kX2Jsb2NrX21vdmUpOiBOZXcgZnVuY3Rpb24gdG8gZXhwYW5kCisJYmxvY2sgbW92ZXMgd2hlbiAtbXN0cmluZyBpcyB1c2VkLgorCisJKiByczYwMDAvcnM2MDAwLm1kIChtb3Z0aSk6IFVzZSBUQVJHRVRfU1RSSU5HLCBub3QgVEFSR0VUX01VTFRJUExFLgorCShsb2FkX211bHRpcGxlLCBzdG9yZV9tdWx0aXBsZSk6IERpdHRvLgorCShzdHJpbmcgaW5zbnMpOiBBZGQgOCwgNiwgNCwgMiwgYW5kIDEgcmVnaXN0ZXIgdmFyaWFudHMgZm9yIHVzaW5nCisJdGhlIG5hdGl2ZSBzdHJpbmcgaW5zdHJ1Y3Rpb25zIGlmIC1tc3RyaW5nLgorCisJKiByczYwMDAvc3lzdjQuaCAoQ1BQX1NQRUMpOiBJZiBsaXR0bGUgZW5kaWFuLCBkZWZpbmUKKwlfTElUVExFX0VORElBTiBhbmQgc2V0IGxpdHRsZWVuZGlhbiBhc3NlcnRpb24uICBJZiBiaWcgZW5kaWFuLAorCWRlZmluZSBfQklHX0VORElBTiBhbmQgc2V0IGJpZ2VuZGlhbiBhc3NlcnRpb24uCisJKiByczYwMDAvc3lzdjRsZS5oIChDUFBfU1BFQyk6IENvcHkgZnJvbSBzeXN2NC5oLCBhbmQgY2hhbmdlCisJZGVmYXVsdCB0byBsaXR0bGUgZW5kaWFuLgorCisJKiByczYwMDAvcnM2MDAwLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBDaGVjayBmb3IgLW1tdWx0aXBsZSBhbmQKKwktbXN0cmluZyBvbiBsaXR0bGUgZW5kaWFuIHN5c3RlbXMgaGVyZS4KKwkqIHJzNjAwMC9zeXN2NC5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IERvbid0IGRvIHRoZSBjaGVjaworCWhlcmUuCisKK1R1ZSBNYXkgMTYgMTg6MzY6NDEgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIGFscGhhLmM6IENoYW5nZWQgV0lOTlQgdG8gX1dJTjMyLgorCSogYWxwaGEvY29uZmlnLW50LmJhdCwgaTM4Ni9jb25maWctbnQuYmF0OiBBZGRlZCBjb21tYW5kcyB0bworCWdlbmVyYXRlIHNwZWNzLmggYW5kIG9wdGlvbnMuaC4KKwkqIGkzODYvY29uZmlnLW50LnNlZDogQ2hhbmdlZCBsaW5rMzIgdG8gbGluay4KKwkqIHdpbm50L2xkLmMgKG1haW4pOiBSZW1vdmVkIGNhbGwgdG8gZnJlZS4KKwkqIGNvbmZpZ3VyZS5iYXQ6IEFkZGVkIGxpbmUgdG8gZWNobyB1c2FnZSBvbiBpbnZhbGlkIGlucHV0LgorCSogZ2NjLmMgKGZpeF9hcmd2KTogUmVtb3ZlZCBjYWxsIHRvIGZyZWUuCisJKiBnY2MuYywgZ2V0cHdkLmMsIHByb3RvaXplLmMsIHNkYm91dC5jOiBDaGFuZ2VkIFdJTk5UIHRvIF9XSU4zMi4KKwkqIHRvcGxldi5jOiBMaWtld2lzZS4KKworVHVlIE1heSAxNiAxODowNDo0NyAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0b3BsZXYuYyAocGZhdGFsX3dpdGhfbmFtZSwgZmF0YWxfaW9fZXJyb3IsIHZmYXRhbCk6CisJVXNlIEZBVEFMX0VYSVRfQ09ERSBpbnN0ZWFkIG9mIG1hZ2ljIG51bWJlci4KKwkqIGNjY3AuYywgY3BwbGliLmMsIGNwcGxpYi5oOiBVc2UgRkFUQUxfRVhJVF9DT0RFIGluc3RlYWQKKwlvZiBGQUlMVVJFX0VYSVRfQ09ERS4KKwkqIGZpeC1oZWFkZXIuYywgZ2VuLXByb3Rvcy5jOiBMaWtld2lzZS4KKwkqIGNwcGVycm9yLmMsIGNwcG1haW4uYzogTGlrZXdpc2UuCisJSW5jbHVkZSBjb25maWcuaCAjaWZuZGVmIEVNQUNTLgorCSogeG0tYWxwaGEuaCwgeG0tcnM2MDAwLmgsIHhtLXZtcy5oIChGQUlMVVJFX0VYSVRfQ09ERSk6IFJlbW92ZS4KKworVHVlIE1heSAxNiAxNzo0Njo1NyAxOTk1ICBBZGFtIEZlZG9yICA8ZmVkb3JAY29sb3JhZG8uZWR1PgorCisJKiBvYmpjL2FyY2hpdmUuYyAoX19vYmpjX3dyaXRlX2NsYXNzKTogV3JpdGUgY2xhc3MgdmVyc2lvbi4KKwkoX19vYmpjX3dyaXRlX3NlbGVjdG9yLCBvYmpjX3t3cml0ZSxyZWFkfV9zZWxlY3Rvcik6IEhhbmRsZSBudWxsCisJc2VsZWN0b3IuCisKKyAgICAgICAgKiBvYmpjL3NhcnJheS5oIChzdHJ1Y3Qgc2FycmF5KTogTWFrZSBjYXBhY2l0eSBzaXplX3QuCisgICAgICAgICogb2JqYy9zYXJyYXkuYyAoc2FycmF5X3JlYWxsb2MpOiBNYWtlIGFycmF5IGluZGV4IHZhcmlhYmxlcyBzaXplX3QuCisKK1R1ZSBNYXkgMTYgMDY6NTk6MDggMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGRzcDE2eHguYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogRml4IG1pc3NwZWxsaW5ncyBpbiBtZXNzYWdlcy4KKwkqIGkzNzAvbXZzLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogTGlrZXdpc2UuCisJKiBtaXBzLXRkdW1wLmMgKHR5cGVfdG9fc3RyaW5nKTogTGlrZXdpc2UuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBMaWtld2lzZS4KKworCSogcHJvdG9pemUuYyAoZWRpdF9mbl9kZWZpbml0aW9uKTogRml4IG1pc3BlbGxlZCBsb2NhbCBgaGF2ZV9mbG90c2FtJy4KKworCSogb2JqYy9zZW5kbXNnLmMgKF9fb2JqY19pbml0X2luc3RhbGxfZHRhYmxlKTogRml4IG1pc3NwZWxsaW5nCisJaW4gbmFtZSBvZiBsb2NhbCBsYWJlbCBgYWxyZWFkeV9pbml0aWFsaXplZCcuCisKKwkqIHdpbm50L3dpbm50LmggKFNURENfVkFMVUUpOiBXYXMgbWlzc3BlbGxlZC4KKworCSogbTY4ay9jY3VyLUdBUy5oIChGVU5DVElPTl9CT1VOREFSWSk6IFdhcyBtaXNzcGVsbGVkLgorCisJKiAxNzUwYS5oIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogV2FzIG1pc3NwZWxsZWQuCisKK01vbiBNYXkgMTUgMjM6NDE6MjUgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAc25ha2UuY3MudXRhaC5lZHU+CisKKwkqIHBhLmggKEFTTV9PVVRQVVRfRVhURVJOQUxfTElCQ0FMTCk6IE1ha2Ugc3VyZSB0byBlbmNvZGUgc2VjdGlvbgorCWluZm8gZm9yIGFsbCBsaWJjYWxscy4KKworTW9uIE1heSAxNSAyMDo1ODowMCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogY29sbGVjdDIuYyAoc3Ryc3RyKTogRGVmaW5lIGlmbmRlZiBQT1NJWC4KKworCSogZGVmYXVsdHMuaCAoU1VQUE9SVFNfV0VBSyk6IFByb3ZpZGUgZGVmYXVsdC4KKwkqIGFvdXRvcy5oLCBzcGFyYy9zdW5vczQuaDogRG9uJ3Qgc3VwcG9ydCB3ZWFrIHN5bWJvbHMuCisJKiBuZXRic2QuaCwgc3ZyNC5oLCBpMzg2L2ZyZWVic2QuaCwgaTM4Ni9vc2Zyb3NlLmgsCisgICAgICAgIG04OGsvbTg4ay5oOiBEZWZpbmUgQVNNX1dFQUtFTl9MQUJFTCBpbnN0ZWFkIG9mIFdFQUtfQVNNX09QLgorCSogYy1wcmFnbWEuaDogQ2hlY2sgQVNNX1dFQUtFTl9MQUJFTCBpbnN0ZWFkIG9mIFdFQUtfQVNNX09QLgorICAgICAgICBIQU5ETEVfUFJBR01BX1dFQUsgaXMgbmV2ZXIgZGVmaW5lZCBpbiBhIHRtLmggZmlsZS4KKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQcm9wYWdhdGUgREVDTF9XRUFLLgorCSogdHJlZS5oIChERUNMX1dFQUspOiBOZXcgbWFjcm8uCisJKHRyZWVfZGVjbCk6IEFkZCB3ZWFrX2ZsYWcuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBEZWNsYXJlIHRoZSBzeW1ib2wgd2VhayBpZgorCWFwcHJvcHJpYXRlLgorCShhc3NlbWJsZV92YXJpYWJsZSk6IERpdHRvLgorCShhc3NlbWJsZV9hbGlhcyk6IERpdHRvLiAgTWFyayB0aGUgZGVjbCBhcyB3cml0dGVuLgorCShkZWNsYXJlX3dlYWspOiBDaGVjayBmb3Igd2VhayBkZWNsYXJhdGlvbiBhZnRlciBkZWZpbml0aW9uLgorCVNldCBERUNMX1dFQUsuCisJKHdlYWtfZmluaXNoKTogVXNlIEFTTV9XRUFLRU5fTEFCRUwuCisJKiBsaWJnY2MyLmM6IFRoZSBDKysgZnJlZS1zdG9yZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhcmUgd2VhaworICAgICAgICBhbGlhc2VzIG9uIHRhcmdldHMgdGhhdCBhbHdheXMgc3VwcG9ydCB0aGVtLgorCitNb24gTWF5IDE1IDE5OjAxOjQzIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZSAob3V0X29iamVjdF9maWxlKTogTmV3IHZhcmlhYmxlOyBwdXQgdmFsdWUgaW4gTWFrZWZpbGUuCisJKiBNYWtlZmlsZS5pbiAob3V0X29iamVjdF9maWxlKTogVXNlIGluIHBsYWNlIG9mIGF1eC1vdXRwdXQuby4KKworCSogZm9sZC1jb25zdC5jIChjb25zdF9iaW5vcCk6IERvbid0IHBhc3MgT1ZFUkZMT1cgdG8gZm9yY2VfZml0X3R5cGUKKwlpZiB0eXBlIGlzIHVuc2lnbmVkLgorCitNb24gTWF5IDE1IDE4OjQ4OjI2IDE5OTUgIFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKyAgICAgICAgKiBpbnN0YWxsLnNoICh0cmFuc2Zvcm1iYXNlbmFtZSk6IEZpeCBtaXNzcGVsbGluZy4KKworCSogdGFob2UuaCAoQ0hFQ0tfRkxPQVRfVkFMVUUpOiBGaXggbWlzc3BlbGxpbmcgb2YgT1ZFUkZMT1cgcGFyYW1ldGVyLgorCisJKiBpMzg2LmggKFZBTElEX01BQ0hJTkVfe0RFQ0wsVFlQRV9BVFRSSUJVVEUpOiBGaXggdHlwby4KKworCSogZng4MC5oIChDSEVDS19GTE9BVF9WQUxVRSk6IEZpeCBtaXNzcGVsbGVkIHVzZSBvZiBwYXJhbWV0ZXIuCisKKwkqIGEyOWsuYyAoc3BlY19yZWdfb3BlcmFuZCk6IEZpeCBtaXNzcGVsbGluZyBvZiBgZGVmYXVsdDonLgorCitNb24gTWF5IDE1IDE4OjM2OjQxIDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay5tZCAoYntlcSxuZSxnZSxsdH0wX2RpKTogRml4ZWQgZm9yIG5vbi1NT1RPUk9MQSBzeW50YXguCisJKiBtNjhrL3htLW1vdDMzMDAuaCAoYWxsb2NhKTogRXh0ZXJuIGRlY2wgYWRkZWQgZm9yIG5vbi1HTlUgY29tcGlsZXIuCisKK01vbiBNYXkgMTUgMTM6MTQ6MjkgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIGNwcGV4cC5jIChjcHBfcmVhZGVyKTogIFRlc3QgZm9yICcjJyAoc3RhcnQgb2YgYXNzZXJ0aW9uKSAqYWZ0ZXIqCisJc2tpcHBpbmcgaHNwYWNlLCBub3QgYmVmb3JlLgorCitNb24gTWF5IDE1IDA4OjEzOjU0IDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiB2bXNjb25maWcuY29tOiBDb25zdHJ1Y3Qgb3B0aW9ucy5oIGFuZCBzcGVjcy5oIHRvICNpbmNsdWRlCisJYWxsICIqL2xhbmcte29wdGlvbnN8c3BlY3N9LmgiIGZpbGVzIGZvdW5kLgorCitTdW4gTWF5IDE0IDIxOjMyOjQ5IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYWxwaGEvYWxwaGEubWQgKG1vdnNpY2MsIGNhc2UgTkUpOiBEb24ndCBnZW5lcmF0ZSB1bnJlY29nbml6YWJsZQorCWluc24uCisJKG1vdmRpY2MsIGNhc2UgTkUpOiBMaWtld2lzZS4KKworU3VuIE1heSAxNCAxNTo0NDo1NCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IE1ha2UgbG9jYWxfcmVnbm8gaGF2ZSBzaXplCisJbWF4X3JlZ19iZWZvcmVfbG9vcC4gIERvbid0IGRvIGxvY2FsIHJlZ2lzdGVyIG9wdGltaXphdGlvbiBpZgorCWNvcHlfZW5kIGhhcyBubyBJTlNOX0xVSUQuCisKK1N1biBNYXkgMTQgMTA6Mzg6MjMgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb2JqYy1hY3QuYyAoc3RhcnRfbWV0aG9kX2RlZik6IE1hcmsgX3NlbGYgYXMgcG9zc2libHkgdW51c2VkLgorCisJKiBjb25maWd1cmU6IENyZWF0ZSBzcGVjcy5oIGFuZCBvcHRpb25zLmggZnJvbSAqL2xhbmctc3BlY3MuaAorCWFuZCAqL2xhbmctb3B0aW9ucy5oLgorCVNldCBsYW5nX3NwZWNzX2ZpbGVzIGFuZCBsYW5nX29wdGlvbnNfZmlsZSB2YXJpYWJsZXMgaW4gTWFrZWZpbGUuCisJKiBNYWtlZmlsZS5pbiAobGFuZ197c3BlY3Msb3B0aW9uc31fZmlsZXMpOiBOZXcgdmFyaWFibGVzLgorCShnY2Mubyk6IERlcGVuZHMgb24gJChsYW5nX3NwZWNzX2ZpbGVzKS4KKwkodG9wbGV2Lm8pOiBEZXBlbmRzIG9uICQobGFuZ19vcHRpb25zX2ZpbGUpOyBtZXJnZSB0d28gZGVwIGxpc3RzLgorCShkaXN0Y2xlYW4pOiBSZW1vdmUgc3Blcy5oIGFuZCBvcHRpb25zLgorCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUmVtb3ZlIGVudHJpZXMgZm9yIEFkYSwgQysrLCBDaGlsbCwKKwlhbmQgRm9ydHJhbjsgI2luY2x1ZGUgc3BlY3MuaCBpbnN0ZWFkLgorCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IFJlbW92ZSBlbnRyaWVzIGZvciBBZGEsIEMrKywgYW5kIEZvcnRyYW47CisJaW5jbHVkZSBvcHRpb25zLmggaW5zdGVhZC4KKworU2F0IE1heSAxMyAyMzoxMToyMSAxOTk1ICBESiBEZWxvcmllICA8ZGpAZGVsb3JpZS5jb20+CisKKwkqIGNvbmZpZ3VyZSAoaVszNDVdODYtZ28zMi1tc2RvcywgaVszNDVdODYtKi1nbzMyKTogTmV3IHRhcmdldHMuCisKK1NhdCBNYXkgMTMgMTA6NTg6MzggMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBsb29wLmMgKHJlY29yZF9naXYpOiBXaGVuIGNvbXB1dGluZyByZXBsYWNlYWJsZSwgdXNlCisJYmFja19icmFuY2hfaW5fcmFuZ2VfcCBpbnN0ZWFkIG9mIGxvb2tpbmcgZm9yIGJyYW5jaGVzIHRvIG5hbWVkCisJbGFiZWxzLgorCSogbG9vcC5oIChiYWNrX2JyYW5jaF9pbl9yYW5nZV9wKTogRGVjbGFyZS4KKwkqIHVucm9sbC5jIChiYWNrX2JyYW5jaF9pbl9yYW5nZV9wKTogTm8gbG9uZ2VyIHN0YXRpYy4KKworU2F0IE1heSAxMyAwNjo0NzoxMSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvdW50LCBjYXNlIExTSElGVFJUKTogRG9uJ3QgbWVyZ2UKKwlzaGlmdHMgb2YgZGlmZmVyZW50IG1vZGVzIGlmIGZpcnN0IGlzIGFueSByaWdodCBzaGlmdC4KKworU2F0IE1heSAxMyAwNTozOTowOSAxOTk1ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCisKKwkqIGNvbmZpZ3VyZSAoYXJtLXNlbWktYW91dCk6IE5ldyBjb25maWd1cmF0aW9uLgorCSogY29uZmlnLnN1YjogQWRkIHN1cHBvcnQgZm9yIHNlbWktaG9zdGVkIEFSTS4KKwkqIGFybS90LXNlbWksIGFybS9zZW1pLmg6IE5ldyBmaWxlcy4KKworRnJpIE1heSAxMiAyMTo1MToyMiAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBPbmx5IHBlcmZvcm0gbl9iYXNpY19ibG9ja3Mgc2FuaXR5CisJY2hlY2sgb24gZmlyc3QgcGFzcywgYW5kIG9uIHNlY29uZCBwYXNzIGVuc3VyZSBpdCBoYXMgdGhlIGNvcnJlY3QKKwl2YWx1ZS4KKworRnJpIE1heSAxMiAxOToyMzoxMSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IFdhcm4gd2hlbiB+dW5zaWduZWQgaXMgY29tcGFyZWQKKwlhZ2FpbnN0IHVuc2lnbmVkLCBhbmQgdHlwZSBwcm9tb3Rpb25zIHJlc3VsdCBpbiBhbiB1bmV4cGVjdGVkCisJYW5zd2VyLgorCitGcmkgTWF5IDEyIDE5OjEwOjIxIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZ3VyZSAoKi0qLWdudSopOiBBbHdheXMgdXNlIEVMRjsgc2V0IHRtX2ZpbGU9JHtjcHVfdHlwZX0vZ251LmguCisJKiBjb25maWcvaTM4Ni9nbnUuaDogQ29udGVudHMgcmVwbGFjZWQgd2l0aCBvbGQgaTM4Ni9nbnVlbGYuaC4KKwkqIGNvbmZpZy9pMzg2L2dudWVsZi5oOiBGaWxlIHJlbW92ZWQuCisKK0ZyaSBNYXkgMTIgMTc6Mjk6NTcgMTk5NSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCisKKwkqIG02OGsvbGIxc2Y2OC5hc20gKF9fSU1NRURJQVRFX1BSRUZJWF9fKTogRGVmYXVsdCB0byAjLgorCShJTU0pOiBOZXcgbWFjcm8uCisJKGFsbCBjb2RlKTogVXNlIElNTSBtYWNybyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgIyBmb3IgaW1tZWRpYXRlCisJb3BlcmFuZHMuCisKK0ZyaSBNYXkgMTIgMTY6NTI6MTAgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLmMgKG91dHB1dF9zY2NfZGkpOiBOZXcgZnVuY3Rpb24uCisJKGV4dGVuZF9vcGVyYXRvcikgOiBBbGxvdyBESW1vZGUgdGFyZ2V0LgorCSogbTY4ay5oIChIQVJEX1JFR05PX01PREVfT0spOiBEb24ndCBhbGxvdyBkNy9hMCBhcyBESW1vZGUgcmVnIHBhaXIuCisJKiBtNjhrLm1kICh0c3RkaSwgY21wZGksIGFkZHNpX2xzaHJzaV8zMSwgYXNobGRpX2V4dHNpKTogTmV3IHBhdHRlcm5zLgorCShleHRlbmRxaWRpMiwgZXh0ZW5kaGlkaTIsIGV4dGVuZHNpZGkyKTogQWxsb3cgImdlbmVyYWxfb3BlcmFuZCIKKwlpbnN0ZWFkIG9mICJyZWdpc3Rlcl9vcGVyYW5kIiAwLgorCShhZGRkaWRfc2V4dGhpc2hsMzIsIHN1YmRpZF9zZXh0aGlzaGwzMiwgc3ViZGlfZGlzaGwzMik6IExpa2V3aXNlLgorCShhZGRkaV9kaWxzaHIzMik6IE9wZXJhbmQgMCBjb25zdHJhaW50IGNoYW5nZWQgZnJvbSAicm8iIHRvICJkbyI7CisJQ29kZSBnZW5lcmF0aW9uIGZpeGVkLgorCShhZGRkaV9tZW0sIHN1YmRpX21lbSk6IEZpeGVkIGZvciAiPCIgYW5kICI+IiBvcGVyYW5kIDAuCisJKGFkZGRpMywgc3ViZGkzKTogT3BlcmFuZCAyIGNvbnN0cmFpbnQgY2hhbmdlZCBmcm9tICJhbyIgdG8gIiphbyIKKwkoYXNobGRpX3NleHRoaSwgYXNocmRpX2NvbnN0MzIpOiBBbGxvdyBvbmx5ICJyZWdpc3Rlcl9vcGVyYW5kIgorCWluc3RlYWQgb2YgImdlbmVyYWxfb3BlcmFuZCIgMC4KKwkoYXNoW2xyXWRpX2NvbnN0LCBhc2hbbHJdZGkzKTogQWxsb3cgYWxzbyA4IGFuZCAxNiBhcyBzaGlmdCBjb3VudC4KKwkoc3VicmVnMWFzaHJkaV9jb25zdDMyKTogUGF0dGVybiBkZWxldGVkLgorCShzdWJyZWdoaTFhc2hyZGlfY29uc3QzMiwgc3VicmVnc2kxYXNocmRpX2NvbnN0MzIpOiBOZXcgcGF0dGVybi4KKwkobHNocnNpXzMxKTogTmV3IGltcGxlbWVudGF0aW9uLgorCShzY2MwX2RpLCBzY2NfZGksIGJlcTBfZGksIGJuZTBfZGksIGJnZTBfZGksIGJsdDBfZGkpOiBOZXcgcGF0dGVybnMuCisKK0ZyaSBNYXkgMTIgMTY6NTA6NDkgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogcGEubWQgKGJiIHBhdHRlcm5zKTogRml4IGJ1Z3MgaW4gbGVuZ3RoIGNvbXB1dGF0aW9uIGV4cG9zZWQgYnkKKwlyZWNlbnQgYnJhbmNoIHNob3J0ZW5pbmcgYW5kIGdlbmF0dHJ0YWIgY2hhbmdlcy4KKworRnJpIE1heSAxMiAxNjoyMjoyNyAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KKworCSogY2NjcC5jIChlbnVtIG5vZGVfdHlwZSk6IEFkZCBUX0lNTUVESUFURV9QUkVGSVhfVFlQRS4KKwkoc3BlY2lhbF9zeW1ib2wpOiBIYW5kbGUgaXQ7IGVtaXQgdmFsdWUgb2YgSU1NRURJQVRFX1BSRUZJWC4KKwkoSU1NRURJQVRFX1BSRUZJWCk6IERlZmF1bHQgdG8gZW1wdHkgc3RyaW5nLgorCShpbml0aWFsaXplX2J1aWx0aW5zKTogSW5zdGFsbCBfX0lNTUVESUFURV9QUkVGSVhfXyBidWlsdGluLAorCXBhcmFsbGVsIHRvIF9fUkVHSVNURVJfUFJFRklYX18uCisKK0ZyaSBNYXkgMTIgMTQ6NDA6MDMgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGNjY3AuYzogI2lmIFZNUywgZG9uJ3QgZGVmaW5lIGBzdGF0JyBtYWNybyB0byBiZSBWTVNfc3RhdC4KKwlDb21wYXJlIGVudW1zIGV4cGxpY2l0bHkgdG8gMCB0byB3b3JrIGFyb3VuZCBWQVggQyBidWcuCisJKGRvX2luY2x1ZGUpOiBDYXN0IGFsbG9jYSdzIHZhbHVlLgorCisJKiBtYWtlLWNjMS5jb20gKGJjX2xvb3ApOiBQcm9jZXNzIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHJhdGhlcgorCXRoYW4gc3BhY2Utc2VwYXJhdGVkIG9uZTsgcmVzdG9yZSAuaCBzdWZmaXggc3RyaXBwZWQgYnkgdm1zY29uZmlnOworCShsb29wMSk6IE1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIGRpcmVjdG9yeSBwcmVmaXggb24gZmlsZSBuYW1lcy4KKwkqIHZtc2NvbmZpZy5jb20gKFRQVSBtYWtlZmlsZS5pbik6IFJlb3JnYW5pemUgYW5kIHJlZm9ybWF0IGNvZGUuCisJTWFrZSBnZW5lcmF0ZWQgLm9wdCBmaWxlcyBoYXZlIG1vcmUgY29uc2lzdGVudCBmb3JtYXQgKGFsbCBjb21tYQorCXNlcGFyYXRlZCwgZXhjZXNzIHdoaXRlc3BhY2UgZWxpbWluYXRlZCk7CisJKGFkZGl0aW9uYWxfY29tcGlsZXIpOiBOZXcgcm91dGluZS4KKwkocHJvY2Vzc19tYWtlZmlsZSk6IFVzZSBpdCB0byBoYW5kbGUgY2MxcGx1cyB2aWEgY3AvTWFrZS1sYW5nLmluLgorCitGcmkgTWF5IDEyIDEzOjM1OjA3IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYXJtLmg6IFJlcGxhY2UgQVJNX1JFR19QUkVGSVggd2l0aCBSRUdJU1RFUl9QUkVGSVguCisJUmVwbGFjZSBBUk1fQ09NTUVOVF9DSEFSIHdpdGggQVNNX0NPTU1FTlRfU1RBUlQuCisJKFJFR0lTVEVSX1BSRUZJWCk6IERlZmluZS4KKwkoVVNFUl9MQUJFTF9QUkVGSVgsIExPQ0FMX0xBQkVMX1BSRUZJWCk6IERlZmluZS4KKwkoU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBIYW5kbGUgREZtb2RlcyBvbmx5IGlmCisJVEFSR0VUX0hBUkRfRkxPQVQuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBzb2Z0X2RmX29wZXJhbmQuCisJKiBhcm0uYzogUmVwbGFjZSBBUk1fUkVHX1BSRUZJWCB3aXRoIFJFR0lTVEVSX1BSRUZJWC4KKwlSZXBsYWNlIEFSTV9DT01NRU5UX0NIQVIgd2l0aCBBU01fQ09NTUVOVF9TVEFSVC4KKwkoYXJtX2FzbV9vdXRwdXRfbGFiZWwpOiBVc2UgVVNFUl9MQUJFTF9QUkVGSVguCisJKHNvZnRfZGZfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGFybS5tZCAobW92c2ljYyk6IE5ldyBwYXR0ZXJuLgorCShtb3ZzZmNjLCBtb3ZkZmNjLCAqbW92c2ljY19pbnNuLCAqbW92c2ZjY19oYXJkX2luc24pOiBMaWtld2lzZS4KKwkoKm1vdnNmY2Nfc29mdF9pbnNuLCAqbW92ZGZjY19pbnNuKTogTGlrZXdpc2UuCisJKCptb3ZkZl9zb2Z0X2luc24pOiBSZXdyaXRlLgorCShtb3ZzaSBtYXRjaGVyKTogRml4IHR5cG8gaW4gdHlwZSBhdHRyaWJ1dGUuCisKK0ZyaSBNYXkgMTIgMTA6MjU6NDAgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQGN5Z251cy5jb20pCisKKwkqIGkzODYuaCAoVEFSR0VUX1JURCk6IFVzZSBNQVNLX1JURCwgbm90IE1BU0tfUkVHUEFSTS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1teyxuby19YWxpZ24tZG91YmxlIHN3aXRjaC4KKwkoVEFSR0VUX09QVElPTlMpOiBBZGQgLW1yZWdwYXJtPSBzd2l0Y2ggdG8gc2V0IG51bWJlciBvZiByZWdpc3RlcnMKKwl0byB1c2UgZm9yIHBhc3NpbmcgYXJndW1lbnRzLiAgQWRkIC1tYWxpZ24tbG9vcHM9IHN3aXRjaCB0byBzZXQKKwl0aGUgYWxpZ25tZW50IGZvciBsb29wcy4gIEFkZCAtbWFsaWduLWp1bXBzPSBzd2l0Y2ggdG8gc2V0IHRoZQorCWFsaWdubWVudCBmb3IgY29kZSB0aGF0IGlzIGp1bXBlZCB0by4gIEFkZCAtbWFsaWduLWZ1bmN0aW9ucz0KKwlzd2l0Y2ggdG8gc2V0IHRoZSBpbml0aWFsIGFsaWdubWVudCBvZiBmdW5jdGlvbnMuCisJKFRBUkdFVF9SRUdQQVJNKTogRGVsZXRlLCBpbiBmYXZvciBvZiAtbXJlZ3Bhcm09CisJKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSAtbXJlZ3Bhcm0sIGFkZCAtbWRlYnVnLWFyZyBzd2l0Y2hlcy4KKwkoUkVUVVJOX1BPUFNfQVJHUyk6IENhbGwgaTM4Nl9yZXR1cm5fcG9wc19hcmdzIHRvIGRvIHRoZSByZWFsIHdvcmsuCisJKFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUpOiBEZWZpbmUgYXMgZnVuY3Rpb24gY2FsbC4KKwkoVkFMSURfTUFDSElORV9UWVBFX0FUVFJJQlVURSk6IERlZmluZSBhcyBmdW5jdGlvbiBjYWxsLgorCShDT01QX1RZUEVfQVRUUklCVVRFUyk6IERlZmluZSBhcyBmdW5jdGlvbiBjYWxsLgorCShSRUdQQVJNX01BWCk6IE1heGltdW0gbnVtYmVyIG9mIHJlZ3MgdG8gdXNlIGZvciBwYXNzaW5nIGFyZ3VtZW50cy4KKwkoQ1VNVUxBVElWRV9BUkdTKTogTWFrZSB0aGlzIGEgc3RydWN0dXJlLCBub3QgYW4gaW50LgorCShJTklUX0NVTVVMQVRJVkVfQVJHUywgRlVOQ1RJT05fQVJHeyxfQURWQU5DRX0pOiBDYWxsIGZ1bmN0aW9uLgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUyk6IExpa2V3aXNlLgorCShNQVhfQ09ERV9BTElHTik6IE1heGltdW0gdmFsdWUgdG8gYWxpZ24gbG9vcHMvanVtcHMgdG8uCisJKEJJR0dFU1RfQUxJR05NRU5UKTogUmV0dXJuIDY0IGlmIC1tYWxpZ24tZG91YmxlLCAzMiBvdGhlcndpc2UuCisJKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IFVzZSB2YWx1ZSBvZiAtbWFsaWduLWp1bXBzPSBzd2l0Y2guCisJKEFTTV9PVVRQVVRfTE9PUF9BTElHTik6IFVzZSB2YWx1ZSBvZiAtbWFsaWduLWxvb3BzPSBzd2l0Y2guCisJKHRvcGxldmVsKTogRGVjbGFyZSBhbGwgbmV3IGZ1bmN0aW9ucyBhbmQgZXh0ZXJuYWwgdmFyaWFibGVzIGFkZGVkCisJaW4gaTM4Ni5jLgorCisJKiBpMzg2LmMgKGkzODZfcmVncGFybV9zdHJpbmcsIGkzODZfcmVncGFybSk6IE5ldyB2YXJpYWJsZXMKKwlmb3IgLW1yZWdwYXJtPSBzd2l0Y2ggdG8gc2V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHVzZSBmb3IKKwlwYXNzaW5nIGFyZ3VtZW50cy4KKwkoaTM4Nl9hbGlnbl9sb29wc19zdHJpbmcsIGkzODZfYWxpZ25fbG9vcHMpOiBOZXcgdmFyaWFibGVzIGZvcgorCS1tYWxpZ24tbG9vcHM9IHN3aXRjaCB0byBzZXQgYWxpZ25tZW50IHRvIHVzZSBmb3IgbG9vcHMuCisJKGkzODZfYWxpZ25fanVtcHNfc3RyaW5nLCBpMzg2X2FsaWduX2p1bXBzKTogTmV3IHZhcmlhYmxlcyBmb3IKKwktbWFsaWduLWp1bXBzPSBzd2l0Y2ggdG8gc2V0IGFsaWdubWVudCB0byB1c2UgZm9yIGxhYmVscyB0aGF0IGFyZQorCWp1bXBlZCB0by4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFN1cHBvcnQgbmV3IHN3aXRjaGVzLgorCShpMzg2X3ZhbGlkX2RlY2xfYXR0cmlidXRlX3ApOiBOZXcgZnVuY3Rpb24gdG8gdmFsaWRhdGUgZGVjbAorCXNwZWNpZmljIGF0dHJpYnV0ZXMuICBQcmVzZW50bHkgcmV0dXJucyAwLgorCShpMzg2X3ZhbGlkX3R5cGVfYXR0cmlidXRlX3ApOiAgTmV3IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHR5cGUKKwlzcGVjaWZpYyBhdHRyaWJ1dGVzLiAgUmVjb2duaXplICJzdGRjYWxsIiwgd2hpY2ggc2F5cyBmdW5jdGlvbgorCXdpdGggZml4ZWQgbnVtYmVycyBvZiBhcmd1bWVudHMgaXMgcmVzcG9uc2libGUgZm9yIHBvcHBpbmcgc3RhY2ssCisJImNkZWNsIiwgd2hpY2ggc2F5cyB0byB1c2UgdGhlIG5vcm1hbCBDIGNhbGxpbmcgc2VxdWVuY2UsIGV2ZW4gaWYKKwktbXJ0ZCBpcyB1c2VkLCBhbmQgInJlZ3Bhcm0iLCB3aGljaCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZgorCXJlZ2lzdGVycyB0byB1c2UgZm9yIHBhc3NpbmcgYXJndW1lbnRzLgorCShpMzg2X2NvbXBfdHlwZV9hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uLCB0byB2YWxpZGF0ZSB3aGV0aGVyCisJYXR0cmlidXRlcyBhcmUgY29tcGF0aWJsZS4KKwkoaTM4Nl9yZXR1cm5fcG9wc19hcmdzKTogTmV3IGZ1bmN0aW9uLCB0byByZXR1cm4gd2hldGhlciBvciBub3QKKwl0aGUgZnVuY3Rpb24gcG9wcyBpdHMgYXJndW1lbnQgbGlzdCBvciBub3QsIHRha2luZyBpbnRvIGFjY291bnQKKwktbXJ0ZCwgYW5kIHRoZSBzdGRjYWxsL2NkZWNsIGF0dHJpYnV0ZXMuCisJKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogUmV3cml0ZSBhcyBhIGZ1bmN0aW9uLCB0YWtpbmcgdmFyaWFibGUKKwlhcmd1bWVudCBmdW5jdGlvbnMsIGFuZCByZWdwYXJtIHN1cHBvcnQgaW50byBhY2NvdW50LgorCShmdW5jdGlvbl9hcmd7LF9hZHZhbmNlLF9wYXJ0aWFsX25yZWd9KTogTGlrZXdpc2UuCisJKHByaW50X29wZXJhbmQpOiBTdXBwb3J0ICVKLCB0byBwcmludCBhcHByb3ByaWF0ZSBqdW1wIGluc24uCisKKwkqIGkzODYubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBEZWZpbmUgcGF0dGVybiwKKwlzbyB0aGF0IGxvb3BzIHRoYXQgY291bnQgZG93biB0byB6ZXJvLCBkb24ndCBoYXZlIGFuIHVubmVlZGVkCisJY29tcGFyZSBhZnRlciB0aGUgZGVjcmVtZW50LiAgQWRkIGEgZ2VuZXJhbCBpbnNuIHJlY29nbml6ZXIgZm9yCisJYWRkIHRvIGEgdmFsdWUgYW5kIGNvbXBhcmUgYWdhaW5zdCB6ZXJvLgorCisJKiBpMzg2L2dvMzIuaCwgaTM4Ni93aW5udC5oIChWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKToKKwlEZWxldGUsIGNvZGUgZm9sZGVkIGludG8gdGhlIG1haW5saW5lLgorCShSRVRVUk5fUE9QU19BUkdTKTogTGlrZXdpc2UuCisKKwkqIGkzODYvd2lubnQuaCAoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IFRoZSBzdGRjYWxsIGF0dHJpYnV0ZSBpcyBub3cKKwlzdG9yZWQgb24gdGhlIHR5cGUgZmllbGQsIHJhdGhlciB0aGFuIHRoZSBkZWNsLgorCisJKiBpMzg2L2dhcy5oIChBU01fT1VUUFVUX0FMSUdOX0NPREUsIEFTTV9PVVRQVVRfTE9PUF9BTElHTik6IFVzZQorCWkzODZfYWxpZ25fe2xvb3BzLGp1bXBzfSB2YXJpYWJsZXMgdG8gZG8gYWxpZ25tZW50LgorCSogaTM4Ni9vc2Zyb3NlLmgsIGkzODYvc3ZyM2RieC5oOiBMaWtld2lzZS4KKworRnJpIE1heSAxMiAxMjo0ODoxOSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSwgY2FzZSBBUlJBWV9UWVBFKTogQ29tcHV0ZSBsZW5ndGggdXNpbmcKKwlNQVggb2YgbGVuZ3RoIGFuZCB6ZXJvIGlmIHNpemV0eXBlIHNpZ25lZCBhbmQgbmVpdGhlciBib3VuZCBjb25zdGFudC4KKworCSogaTM4Ni9nbnVlbGYuaCwgaTM4Ni9saW51eC1vbGRsZC5oLCBpMzg2L2x5bngtbmcuaCwgaTM4Ni92M2dhcy5oOgorCVVzZSA8Li4uPiBpbiAjaW5jbHVkZSBpbnN0ZWFkIG9mICIuLi4iLgorCSogbTY4ay9seW54LW5nLmgsIHNwYXJjL2x5bngtbmcuaDogTGlrZXdpc2UuCisKKwkqIGMtcGFyc2UuaW4gKG15cGFybSk6IEhhbmRsZSBhdHRyaWJ1dGVzLgorCSogb2JqYy1hY3QuYyAodW51c2VkX2xpc3QpOiBOZXcgdmFyaWFibGUuCisJKGJ1aWxkX3RtcF9mdW5jdGlvbl9kZWNsKTogQ2FsbCBwdXNoX3Bhcm1fZGVjbCB3aXRoIG5ldyBmb3JtYXQuCisJKHN0YXJ0X2NsYXNzKTogSW5pdGlhbGl6ZSB1bnVzZWRfbGlzdC4KKwkoc3RhcnRfbWV0aG9kX2RlZik6IENhbGwgcHVzaF9wYXJtX2RlY2wgd2l0aCBuZXcgZm9ybWF0IGFuZAorCW1hcmsgX2NtcCBhcyBwb3NzaWJseSB1bnVzZWQuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBEb24ndCBjaGFuZ2UgU0hJRlRfTU9ERQorCWZvciBMU0hJRlRSVCBlaXRoZXIuCisKKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IERvbid0IG1vdmUgcmVnIGlmIHVzZWQgaW4gY29weV9lbmQgYW5kCisJdGhhdCBpcyBhIEpVTVBfSU5TTi4KKworRnJpIE1heSAxMiAxMjozMTozNyAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGFybS9saWIxZnVuY3MuYXNtOiBOZXcgZmlsZS4KKworRnJpIE1heSAxMiAxMTo1MjowMyAxOTk1ICBLdW5nIEhzdSAgPGt1bmdAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChhMjlrLSotdnh3b3JrcyopOiBOZXcgdGFyZ2V0LgorCSogY29uZmlnLnN1YiAodnh3b3JrczI5ayk6IE5ldyBhbGlhcy4KKwkqIGEyOWsvdC12eDI5azogTmV3IGZpbGUuCisJKiBhMjlrL3Z4MjlrLmg6IE5ldyBmaWxlLgorCitGcmkgTWF5IDEyIDExOjE3OjI4IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBXaGVuIHJldmVyc2luZyBsb29wIHdoZW4KKwlub191c2VfZXhjZXB0X2NvdW50aW5nIGlzIGZhbHNlLCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGJpdi4KKworRnJpIE1heSAxMiAwNzoxMDowMCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBPbmx5IHVzZSBsb2NhbF9yZWdubyBmb3IgcHNldWRvcy4KKworCSogZ2VuYXR0cnRhYi5jICh3cml0ZV90ZXN0X2V4cHIsIGNhc2UgTUFUQ0hfRFVQKTogVXNlIG9wZXJhbmRzW05dCisJaW5zdGVhZCBvZiBKVU1QX0xBQkVMICh3aGljaCBtYXkgbm90IGJlIHNldCkuCisJKHdhbGtfYXR0cl92YWx1ZSwgY2FzZSBNQVRDSF9EVVApOiBTZXQgbXVzdF9leHRyYWN0LgorCisJKiBjLXBhcnNlLmluOiBBZGp1c3QgbnVtYmVyIG9mIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMuCisJKHBhcm0pOiBTdXBwb3J0IGF0dHJpYnV0ZXMuCisJKiBjLWRlY2wuYyAocHVzaF9wYXJtX2RlY2wpOiBQYXNzIGFueSBhdHRyaWJ1dGVzIHRvIGRlY2xfYXR0cmlidXRlcy4KKworRnJpIE1heSAxMiAwMDozNjoyNiAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogY3BwbGliLmMgKHNraXBfcXVvdGVkX3N0cmluZyk6ICBSZW1vdmVkIC0gbm8gbG9uZ2VyIG5lZWRlZC4KKwkoc2tpcF9pZl9ncm91cCk6ICBVc2UgY3BwX2dldF90b2tlbiBpbnN0ZWFkIG9mIHNraXBfcXVvdGVkX3N0cmluZy4KKworCSogY3BwbGliLmggKHN0cnVjdCBjcHBfcmVhZGVyKTogIFJlbW92ZSBzdGFydF9saW5lIGZpZWxkLgorCUFkZCBtdWx0aWxpbmVfc3RyaW5nX2xpbmUgZmllbGQuCisKKwkqIGNwcGxpYi5jIChjcHBfZXJyb3Jfd2l0aF9saW5lLCBjcHBfd2FybmluZ193aXRoX2xpbmUsCisJY3BwX3BlZHdhcm5fd2l0aF9saW5lKTogIFRha2UgZXh0cmEgY29sdW1uIG51bWJlciBwYXJhbWV0ZXIuCisJKG1hY3JvZXhwYW5kLCBjcHBfZ2V0X3Rva2VuKTogIEZpeCByZXBvcnRpbmcgb2YgdW50ZXJtaW5hdGVkIHN0cmluZ3MuCisJKGxpbmVfZm9yX2Vycm9yKTogIFJlbW92ZWQgLSBubyBsb25nZXIgbmVlZGVkLgorCitGcmkgTWF5IDEyIDAyOjIxOjM0IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy9zdnI0LXQuaCAoTURfU1RBUlRGSUxFX1BSRUZJWCwgTURfRVhFQ19QUkVGSVgsCisJU1RBUlRGSUxFX1NQRUMsIExJTktfU1BFQyk6IERlZmluZS4KKwkqIGNvbmZpZ3VyZSAobWlwcy10YW5kZW0tc3lzdjQpOiBVc2UgdC1taXBzIG5vdCB0LXN2cjQuCisKK1RodSBNYXkgMTEgMTk6MTg6NTQgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIGNwcGxpYi5jIChsaW5lX2Zvcl9lcnJvcik6ICBNYWtlIGl0IHdvcms7IGFkZCBleHRyYSBwYXJhbWV0ZXIuCisJKHNraXBfcXVvdGVkX3N0cmluZywgY3BwX2dldF90b2tlbik6ICBVcGRhdGUgY2FsbHMgdG8gbGluZV9mb3JfZXJyb3IuCisJKG1hY3JvZXhwYW5kKTogIFJlbWVtYmVyIGluaXRpYWwgbGluZSBzbyB3ZSBjYW4gcmVwb3J0IGl0IGlmIHRoZQorCWNhbGwgaXMgdW50ZXJtaW5hdGVkLiAgQWxzbywgc2ltcGxpZnkgZXJyb3IgbG9naWMgc2xpZ2h0bHkuCisJKGRvX2luY2x1ZGUpOiAgQ2FzdCBhbGxvY2EgcmV0dXJuIHZhbHVlLCB0byBhdm9pZCBwY2Mgd2FybmluZy4KKworCSogY3BwZXhwLmMgKHBhcnNlX251bWJlcik6ICBDbGVhbnVwIHNvbWUgQ3lnbnVzIGNydWQgZm9yIE1QVy4KKworVGh1IE1heSAxMSAyMTozNToyMyAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAY3lnbnVzLmNvbT4KKworCUZyb20gTW9zaGllcjoKKwkqIGk5NjAuYyAoaTk2MF9vdXRwdXRfbGRjb25zdCk6IExldCBzcGxpdF9kb3VibGUgaGFuZGxlIERJbW9kZS4KKwkoaTk2MF9wcmludF9vcGVyYW5kKTogVXNlIFJFQUxfVkFMVUVfVE9fREVDSU1BTCBmb3IgZGVjaW1hbCBzdHJpbmdzLgorCShpOTYwX291dHB1dF9kb3VibGUsIGk5NjBfb3V0cHV0X2Zsb2F0KTogIExpa2V3aXNlOyBhbHNvIGNoYW5nZSBhcmcKKwlWQUxVRSBmcm9tIGBkb3VibGUnIHRvIGBSRUFMX1ZBTFVFX1RZUEUnLgorCitUaHUgTWF5IDExIDIxOjA5OjI1IDE5OTUgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwcGVycm9yLmMgKGNwcF9wcmludF9jb250YWluaW5nX2ZpbGVzKTogIFJlbW92ZSBzb21lCisJQ3lnbnVzLWxvY2FsIHN0dWZmLgorCitUaHUgTWF5IDExIDIxOjA2OjQ3IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IE1ha2UgLW5vc3RkbGliIG5vIGxvbmdlciBpbXBseQorCS1ub3N0YXJ0ZmlsZXMuCisKK1RodSBNYXkgMTEgMTg6NDg6NTcgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGMtY29tbW9uLmMgKGNvbnZlcnRfYW5kX2NoZWNrKTogRG9uJ3QgZGlhZ25vc2Ugb3ZlcmZsb3cgaW4gY29uc3RhbnQKKwlleHByZXNzaW9uIG1lcmVseSBiZWNhdXNlIGNvbnZlcnNpb24gb3ZlcmZsb3dlZC4KKworVGh1IE1heSAxMSAxODo0Mzo1OSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgUEFSTV9GTEFHIHRvIHNlZSBpZiBzaG91bGQKKwltYWtlIFBBUk1fREVDTC4KKwkqIGMtcGFyc2UuaW4gKG5lc3RlZF9mdW5jdGlvbiwgbm90eXBlX25lc3RlZF9mdW5jdGlvbik6CisJQWxsb3cgb2xkLXN0eWxlIGFyZyBkZWZpbml0aW9ucyAodXNlIHhkZWNscykuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogUHJvcGVybHkgdXBkYXRlIERFQ0xfUEFDS0VELgorCitUaHUgTWF5IDExIDE1OjI0OjE1IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBBbHNvIGZvbGQgQ0xFQU5VUF9QT0lOVF9FWFBScyBpbnRvCisgICAgICAgIFRSVVRIXypfRVhQUnMgYW5kIGludG8gdGhlIGZpcnN0IG9wZXJhbmQuCisJKG9wZXJhbmRfZXF1YWxfZm9yX2NvbXBhcmlzb25fcCk6IEFsc28gbWFrZSBzdXJlIHRoZSBzZWNvbmQgb3BlcmFuZAorCWlzIGludGVncmFsLgorCitUaHUgTWF5IDExIDE0OjIyOjAzIDE5OTUgIFRlZCBMZW1vbiAgPG1lbGxvbkB0b2NjYXRhLmZ1Z3VlLmNvbT4KKworCSogY29uZmlnL21pcHMvbmV0YnNkLmg6IE5ldyBmaWxlLgorCSogY29uZmlnL21pcHMvdC1taXBzLW5ldGJzZDogTmV3IGZpbGUuCisJKiBjb25maWcvbWlwcy94LW5ldGJzZDogTmV3IGZpbGUuCisKKwkqIGNvbmZpZ3VyZSAobWlwcy1kZWMtbmV0YnNkKik6IEFkZCBlbnRyeS4KKworCSogbWlwcy5oIChMT0NBTF9MQUJFTF9QUkVGSVgsIFVTRVJfTEFCRUxfUFJFRklYKTogRGVmaW5lLgorCShQVVRfU0RCX0JMT0NLX1NUQVJULCBQVVRfU0RCX0JMT0NLX0VORCwgQVNNX09VVFBVVF9MQUJFTF9SRUYsCisJQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCwgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMLAorCUFTTV9PVVRQVVRfQUREUl9WRUNfRUxULCBBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBVc2UgdGhlbS4KKworCSogbWlwcy5jIChtaXBzX291dHB1dF9saW5lbm8pOiBVc2UgTE9DQUxfTEFCRUxfUFJFRklYLgorCitUaHUgTWF5IDExIDE0OjIyOjAzIDE5OTUgIFN0YW4gQ294ICAoZ2NjQGRnLXJ0cC5kZy5jb20pCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9kZWNsKTogRG9uJ3Qgb3V0cHV0IERJRSBmb3Igc3RydWN0IG9yIHVuaW9uIHR5cGUKKwl3aXRoIG5vIG5hbWUgb3Igd2l0aCBFUlJPUl9NQVJLIGZvciB0aGUgZmllbGRzLgorCitUaHUgTWF5IDExIDA2OjM2OjM0IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBjeWdudXMuY29tKQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogSWYgYSBTVUJSRUcgZG9lcyBub3QgaGF2ZSBhIFJFRyBpbiB0aGUKKwlTVUJSRUdfUkVHIHBvc2l0aW9uLCByZWN1cnNpdmVseSBjYWxsIG1hcmtfdXNlZF9yZWdzLCBpbnN0ZWFkIG9mCisJc2VnZmF1bHRpbmcuCisKK1RodSBNYXkgMTEgMDY6NDQ6MzQgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGV4cHIuYyAoZG9fanVtcCwgY2FzZSBFUV9FWFBSLCBORV9FWFBSKTogRml4IHR5cG8gZm9yIGNvbXBsZXguCisKK1dlZCBNYXkgMTAgMTI6MzQ6NDYgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogQWRkIHN1cHBvcnQgZm9yIHRoZSBsaXR0bGUgZW5kaWFuIHZhcmlhbnQgb2YgdGhlCisJUG93ZXJQQyBTeXN0ZW0gVi40IGFuZCBFYWJpIHRhcmdldHMuICBJZiB0aGUgR05VIGFzc2VtYmxlciB3YXMgbm90CisJc3BlY2lmaWVkLCBkb24ndCBidWlsZCBsaWJnY2MuYSB2YXJpYW50cyBvbiB0aGUgUG93ZXJQQyBzeXN0ZW1zCisJdGhhdCB1c2UgLW1yZWxvY2F0YWJsZSwgLW1saXR0bGUsIGFuZCAtbWJpZy4KKworCSogZ2VubXVsdGlsaWI6IEZvciBNVUxUSUxJQl9NQVRDSEVTIGFyZ3VtZW50cywgbWFwIHF1ZXN0aW9uIG1hcmtzCisJaW50byBlcXVhbCBzaWducyBhZnRlciBzcGxpdGluZyB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZSBvZgorCWVxdWl2YWxlbnQgb3B0aW9ucywgdG8gYWxsIHN1cHBvcnQgZm9yIG9wdGlvbnMgbGlrZTogLW1jcHU9NDAzLgorCisJKiByczYwMDAvcnM2MDAwLm1kIChyczYwMDBfaW1tZWRfZG91YmxlX2NvbnN0KTogTmV3IGZ1bmN0aW9uIHRoYXQKKwlpcyBsaWtlIGltbWVkX2RvdWJsZV9jb25zdCwgZXhjZXB0IHRoYXQgaXQgcmV2ZXJzZXMgdGhlIHR3byB3b3JkcworCWluIHRoZSBjb25zdGFudCBpZiB0aGUgdGFyZ2V0IGlzIGxpdHRsZSBlbmRpYW4uCisKKwkqIHJzNjAwMC9yczYwMDAubWQgKGZsb2F0c2lkZjIpOiBVc2UgcnM2MDAwX2ltbWVkX2RvdWJsZV9jb25zdCwKKwlub3QgaW1tZWRfZG91YmxlX2NvbnN0LgorCShmbG9hdHVuc3NpZGYyKTogRGl0dG8uCisKKwkqIHJzNjAwMC9yczYwMDAuaDogQWRkIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGZ1bmN0aW9ucyBpbiByczYwMDAuYy4KKworCSogcnM2MDAwL3N5c3Y0LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxpdHRsZSwgLW1saXR0bGUtZW5kaWFuLAorCS1tYmlnLCBhbmQgLW1iaWctZW5kaWFuIGZvciBiaS1lbmRpYW4gc3VwcG9ydC4KKwkoQVNNX1NQRUMpOiBQYXNzIC1tbGl0dGxlLy1tYmlnIHRvIHRoZSBhc3NlbWJsZXIgaWYgaXQgd2FzIHBhc3NlZAorCXRvIHVzLgorCShMSU5LX1NQRUMpOiBJZiBleHBsaWNpdCBsaXR0bGUgb3IgYmlnIGVuZGlhbiBzdXBwb3J0IHdhcworCXJlcXVlc3RlZCwgdGVsbCB0aGUgR05VIGxpbmtlciB0byB1c2UgdGhlIGFwcHJvcHJpYXRlIHRhcmdldAorCWZvcm1hdC4KKworCSogcnM2MDAwL3QtZWFiaSAoTVVMVElMSUJfKik6IEJ1aWxkIGxpYmdjYy5hIHZhcmlhbnRzIGZvciBzb2Z0d2FyZQorCWZsb2F0aW5nIHBvaW50LiAgUmVtb3ZlIG1yZWxvY2F0YWJsZSBsaWJnY2MuYSB2YXJpYW50LgorCisJKiByczYwMDAvdC1lYWJpZ2FzOiBOZXcgZmlsZSwgY2xvbmVkIGZyb20gdC1lYWJpLiAgQnVpbGQKKwltcmVsb2NhdGFibGUgbGliZ2NjLmEgdmFyaWFudCBpbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgdmFyaWFudHMuCisKKwkqIHJzNjAwMC90LXBwYzogTmV3IGZpbGUsIGZvciBQb3dlclBDIFN5c3RlbSBWLjQgc3VwcG9ydCB3aXRob3V0CisJdGhlIEdOVSBhc3NlbWJsZXIuCisKKwkqIHJzNjAwMC90LXBwY2dhczogTmV3IGZpbGUsIGZvciBQb3dlclBDIFN5c3RlbSBWLjQgc3VwcG9ydCB3aXRoCisJdGhlIEdOVSBhc3NlbWJsZXIuCisKKwkqIHJzNjAwMC9lYWJpbGUuaDogTmV3IGZpbGUsIGxpdHRsZSBlbmRpYW4gZWFiaSBjb25maWcgZmlsZS4KKwkqIHJzNjAwMC9zeXN2NGxlLmg6IE5ldyBmaWxlLCBsaXR0bGUgZW5kaWFuIFYuNCBjb25maWcgZmlsZS4KKworV2VkIE1heSAxMCAxNDoyMjoyOCAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzEtdGVzdC5jIChtYWluX3dpdGhvdXRfX21haW4pOiBSZW5hbWVkIGZyb20gYG1haW4nLgorCSogTWFrZWZpbGUuaW4gKGxpYmdjYzEtdGVzdCk6IFRlbGwgdGhlIHVzZXIgdG8gaWdub3JlIHdhcm5pbmdzLgorCisJKiBjb25maWd1cmU6IFN1cHBvcnQgLS1lbmFibGUtZm9vLCAtLWRpc2FibGUtZm9vLgorCitXZWQgTWF5IDEwIDEwOjM0OjAwIDE5OTUgIExlZSBJdmVyc29uICA8bGVlaUBDYW5hZGEuQUkuU1JJLkNPTT4KKworCSogdW5yb2xsLmM6IEFkZCBkZWNsYXJhdGlvbnMgb2Ygc3RhdGljIGZ1bmN0aW9ucy4KKwkodW5yb2xsX2xvb3ApOiBSZW51bWJlciByZWdzIGxvY2FsIHRvIGxvb3AgZm9yIGVhY2ggdW5yb2xsZWQgaXRlcmF0aW9uLgorCitXZWQgTWF5IDEwIDA4OjI3OjAzIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKGFscGhhX3NldF9lbWl0X2NvbnN0KTogQ2xlYW51cHMgdG8gd29yayBwcm9wZXJseQorCXdoZW4gcnVuIG9uIDMyLWJpdCBob3N0LgorCisJKiBjb25maWd1cmU6IEluc3RlYWQgb2Ygc3ltbGlua2luZyB0bS5oIGFuZCB7aCx0LH1jb25maWcuaCwKKwltYWtlIHRoZW0gZmlsZXMgdGhhdCAjaW5jbHVkZSB0aGUgcHJvcGVyIGZpbGU7IHBhc3MgdG8gTWFrZWZpbGUuCisJUGFzcyBvdXRfZmlsZSBhbmQgbWRfZmlsZSB0byBNYWtlZmlsZSBpbnN0ZWFkIG9mIG1ha2luZyBzeW1saW5rcy4KKwkqIE1ha2VmaWxlLmluIChvdXRfZmlsZSwgbWRfZmlsZSwgdG1fZmlsZSwge2J1aWxkLGhvc3R9X3htX2ZpbGUpOgorCU5ldyBzeW1ib2xzLCB0byBiZSBvdmVycmlkZGVuIGJ5IGNvbmZpZ3VyZS4KKwkoaW5zbi0qKTogVXNlICQobWRfZmlsZSksIG5vdCBtZC4KKwkoYXV4LW91dHB1dC5vKTogVXNlICQob3V0X2ZpbGUpLCBub3QgYXV4LW91dHB1dC5jLgorCSgkKE1EX0ZJTEUpKTogUmV3b3JrIHRvIHVzZSBuZXcgY29udmVudGlvbnMuCisJKGdlbioubywgYmktKi5vKTogRGVwZW5kIG9uICQoYnVpbGRfeG1fZmlsZSksIG5vdCBoY29uZmlnLmguCisJKHNjYW4ubywgZml4LWhlYWRlci5vLCBzY2FuLWRlY2xzLm8pOiBMaWtld2lzZS4KKwkoZGlzdGNsZWFuKTogQWRqdXN0IGZpbGVzIHJlbW92ZWQgZm9yIG5ldyBjb252ZW50aW9uLgorCitUdWUgTWF5ICA5IDE5OjI2OjQyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiByczYwMDAvcnM2MDAwLmggKExJQkdDQ19TUEVDKTogRG8gbGluayB3aXRoIGxpYmdjYyB3aGVuIC1zaGFyZWQuCisKKwkqIE1ha2VmaWxlLmluIChTVEFHRVNUVUZGKTogQWRkIHVuZGVyc2NvcmUuYy4KKwkodW5kZXJzY29yZS5jKTogUmVuYW1lIHRlbXBvcmFyeSBmaWxlcyB0byBiZWdpbiB3aXRoICd0bXAtJyBzbyB0aGF0CisJdGhleSB3aWxsIGJlIHJlbW92ZWQgYnkgJ21ha2UgbW9zdGx5Y2xlYW4nLgorCitUdWUgTWF5ICA5IDE5OjE5OjU1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCBuZXcgZmxhZyAtZmZvci1zY29wZS4KKworVHVlIE1heSAgOSAxOToxMTo0NyAxOTk1ICBMZWUgSXZlcnNvbiAgKGxlZWlAYWkuc3JpLmNvbSkKKworCSogb2JqYy9pbml0LmMgKG9iamNfaW5pdF9zdGF0aWNzKTogRml4IG1pc3NpbmcgcGFydCBvZiBsYXN0IGNoYW5nZS4KKworVHVlIE1heSAgOSAxODoyNTozNCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBpMzg2L2dudS5oLCBpMzg2L2xpbnV4LmgsIGkzODYvbGludXgtYW91dC5oLCBpMzg2L2x5bnguaDoKKwlVc2UgPC4uLj4gaW4gI2luY2x1ZGUgaW5zdGVhZCBvZiAiLi4uIiB0byBhdm9pZCByZWN1cnNpb24uCisJKiBpMzg2L25ldGJzZC5oLCBpMzg2L3htLWdudS5oLCBpMzg2L3htLWxpbnV4Lmg6IExpa2V3aXNlLgorCSogaTM4Ni94bS1seW54LmgsIGkzODYveG0tZnJlZWJzZC5oLCBpMzg2L3htLW5ldGJzZC5oOiBMaWtld2lzZS4KKwkqIG02OGsvbHlueC5oLCBtNjhrL25ldGJzZC5oLCBtNjhrL3htLWx5bnguaDogTGlrZXdpc2UuCisJKiBtNjhrL3htLW5ldGJzZC5oLCBtaXBzL2dudS5oLCBuczMyay9uZXRic2QuaDogTGlrZXdpc2UuCisJKiBuczMyay94bS1uZXRic2QuaCwgcnM2MDAwL2x5bnguaCwgcnM2MDAwL3htLWx5bnguaDogTGlrZXdpc2UuCisJKiBzcGFyYy9seW54LmgsIHNwYXJjL25ldGJzZC5oLCBzcGFyYy94bS1seW54Lmg6IExpa2V3aXNlLgorCSogc3BhcmMveG0tbmV0YnNkLmgsIHZheC9uZXRic2QuaCwgdmF4L3htLW5ldGJzZC5oOiBMaWtld2lzZS4KKworVHVlIE1heSAgOSAxNTo1MjowNSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogY29uZmlnLnN1YjogUmVjb2duaXplIHBvd2VycGNsZSBhcyB0aGUgbGl0dGxlIGVuZGlhbiB2YXJpZW50IG9mCisJdGhlIFBvd2VyUEMuICBSZWNnb25pemUgcHBjIGFzIGEgUG93ZXJQQyB2YXJpYW50LCBhbmQgcHBjbGUgYXMgYQorCXBvd2VycGNsZSB2YXJpYW50LiAgQ29udmVydCBwZW50aXVtIGludG8gaTU4Niwgbm90IGk0ODYuICBBZGQgcDUKKwlhbGlhcyBmb3IgaTU4Ni4gIE1hcCBuZXcgeDg2IHZhcmlhbnRzIHA2LCBrNSwgbmV4Z2VuIGludG8gaTU4NgorCXRlbXBvcmFyaWx5LgorCitUdWUgTWF5ICA5IDE1OjQzOjI3IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiByczYwMDAvcnM2MDAwLmggKExJTktfU1BFQywgTElCX1NQRUMpOiBEb24ndCBtZXNzIHdpdGggbGliZworICAgICAgICBpZiAtc2hhcmVkLgorCSogcnM2MDAwL2FpeDQxcHBjLmggKExJTktfU1BFQyk6IERpdHRvLgorCisJKiByczYwMDAvcG93ZXJwYy5oOiBEb24ndCBlbWl0IC5leHRlcm4gZGlyZWN0aXZlcy4KKworVHVlIE1heSAgOSAxNDowODowOSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNoL2xpYjFmdW5jcy5hc20gKF9fYXNocnNpMywgX19hc2hsc2kzLCBfX2xzaHJzaTMpOiBVc2UgLmJ5dGUKKwlpbnN0ZWFkIG9mIC53b3JkIG9mZnNldHMgaW4gc3dpdGNoIHRhYmxlLgorCitUdWUgTWF5ICA5IDExOjQ0OjQ3IDE5OTUgIEplcmVteSBCZXR0aXMgIDxqYmV0dGlzQGNzZS51bmwuZWR1PgorCisJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX3NlbmRfaW5pdGlhbGl6ZSk6IENhbGwgc3VwZXJjbGFzcyBpZiBvYmplY3QKKwlkb2VzIG5vdCBpbXBsZW1lbnQgK2luaXRpYWxpemUuCisKK1R1ZSBNYXkgIDkgMDI6NDQ6MTYgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC94bS1yczYwMDAuaCAoQ09MTEVDVF9FWFBPUlRfTElTVCk6IERlZmluZSBpZiBub3QKKyAgICAgICAgY3Jvc3MtY29tcGlsaW5nLgorCSogcnM2MDAwL3htLW1hY2guaDogI3VuZGVmIENPTExFQ1RfRVhQT1JUX0xJU1QuCisJKiByczYwMDAvcnM2MDAwLmggKENPTExFQ1RfU0NBTl9PQkpFQ1RTKTogTG9zZS4KKworCSogY29sbGVjdDIuYyAoY29sbGVjdF9leGl0KTogVW5saW5rIGV4cG9ydF9maWxlLgorCShwcmVmaXhfZnJvbV9zdHJpbmcpOiBCcm9rZW4gb3V0IGZyb20gcHJlZml4X2Zyb21fZW52LgorCShwcmVmaXhfZnJvbV9lbnYpOiBDYWxsIGl0LgorCShtYWluKTogVW5kZXIgQUlYLCByZWNvZ25pemUgLWJFOiBhbmQgLWJleHBvcnQ6LCBhbmQgZG9uJ3QKKwlhdXRvbWF0aWNhbGx5IGV4cG9ydCBldmVyeXRoaW5nIGlmIHdlIHNlZSBvbmUuICBPdGhlcndpc2UsIHNjYW4gdGhlCisJb2JqZWN0cyBpbmRpdmlkdWFsbHkgYW5kIGFkZCBhbGwgdGhlaXIgc3ltYm9scyB0byBhbiBleHBvcnQgZmlsZSB0byBiZQorCXBhc3NlZCB0byB0aGUgbGlua2VyLgorCSh3cml0ZV9leHBvcnRfZmlsZSk6IE5ldyBmdW5jdGlvbi4KKwkoc2Nhbl9wcm9nX2ZpbGUpOiBJZ25vcmUgc3ltYm9scyBzdGFydGluZyB3aXRoICcuJworCisJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2hpZGRlbl9jaGFyX2FycmF5KTogTWFyayBkZWNsIGFydGlmaWNpYWwuCisKK01vbiBNYXkgIDggMTg6MTM6NTcgMTk5NSAgQWRhbSBGZWRvciAgPGZlZG9yQGNvbG9yYWRvLmVkdT4KKworCSogb2JqYy9pbml0LmMgKF9vYmpjX2xvYWRfY2FsbGJhY2spOiBBZGQgZGVjbGFyYXRpb24uCisJKF9fb2JqY19leGVjX2NsYXNzKTogQ2FsbCBfb2JqY19sb2FkX2NhbGxiYWNrIGFmdGVyIGV2ZXJ5IENsYXNzCisJb3IgQ2F0ZWdvcnkgaXMgYWRkZWQuCisJKiBvYmpjL29iamMtYXBpLmggKF9vYmpjX2xvYWRfY2FsbGJhY2spOiBBZGQgZGVjbGFyYXRpb24uCisKK01vbiBNYXkgIDggMTc6NTY6MjggMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBJTkRJUkVDVF9SRUYpOiBTZXQgUlRYX1VOQ0hBTkdJTkdfUAorCWlmIGJvdGggVFJFRV9SRUFET05MWSBhbmQgVFJFRV9TVEFUSUMgc2V0LgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogRG9uJ3QgZ2l2ZSBlcnJvcnMgYWJvdXQKKwlhZGRpbmcgY29uc3Qgb3Igdm9sYXRpbGUgdW5sZXNzIGJvdGggc2lkZXMgcG9pbnQgdG8gZnVuY3Rpb25zLgorCitNb24gTWF5ICA4IDExOjQ4OjIzIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IElmIC4uL2xkL01ha2VmaWxlLCBzeW1saW5rIC4uL2xkL2xkLm5ldyB0byBjb2xsZWN0LWxkLAorCW5vdCByZWFsLWxkLiAgRG9uJ3QgdGVzdCBmb3IgJHVzZV9jb2xsZWN0MiBhbnkgbW9yZS4KKworU3VuIE1heSAgNyAxNzo1MjoyMyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJbXByb3ZlIC1XaW5saW5lIHdhcm5pbmdzLgorCitTdW4gTWF5ICA3IDE3OjI4OjI3IDE5OTUgIERKIERlbG9yaWUgIChkakBkZWxvcmllLmNvbSkKKworCSogY29uZmlndXJlLmJhdDogVXNlICJnbzMyIiBpbnN0ZWFkIG9mICJtc2RvcyIgZm9yIGZ1dHVyZSBleHBhbnNpb24uCisKKwkqIGkzODYvZ28zMi5oOiBBZGQgc3VwcG9ydCBmb3Igd2luMzIncyBzdGRjYWxsIGZ1bmN0aW9ucy4KKworCSogY29uZmlndXJlLmJhdDogQWRkIF5NIHRvIGVuZCBvZiBlYWNoIGxpbmUuCisJKiBpMzg2L2NvbmZpZy1udC5iYXQsIGFscGhhL2NvbmZpZy1udC5iYXQ6IExpa2V3aXNlLgorCitTdW4gTWF5ICA3IDAyOjEyOjI2IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiB0cmVlLmggKERFQ0xfQVJUSUZJQ0lBTCk6IE5ldyBtYWNyby4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IERvbid0IHdhcm4gYWJvdXQgdW51c2VkCisgICAgICAgIGFub255bW91cyBvciBhcnRpZmljaWFsIHBhcm1zLgorCitGcmkgTWF5ICA1IDE4OjQxOjIyIDE5OTUgIEppbSBNZXllcmluZyAgKG1leWVyaW5nQGNvbWNvLmNvbSkKKworCSogY29uZmlndXJlOiBGaXggdHlwbyBpbiBuYW1lIG9mICJtYWludGFpbmVyLWNsZWFuIi4KKworRnJpIE1heSAgNSAxNDo1ODowMSAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworIAkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEZvcmNlIHByb2JsZW1hdGljYWwgY29uc3RhbnRzCisJaW50byBtZW1vcnkgZHVyaW5nIHRoZSByZWxvYWQgcGFzcyB3aGVuIGdlbmVyYXRpbmcgUElDLgorCitGcmkgTWF5ICA1IDEzOjMwOjMzIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogb2JqYy9OWENvbnN0U3RyLm06IE5YQ29uc3RhbnRTdHJpbmcuaCByZW5hbWVkIHRvIE5YQ29uc3RzdHIuaC4KKworRnJpIE1heSAgNSAwNzoxMDoxNSAxOTk1ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChlbWRub3JtLCB0b2U2NCwgZXRvZTY0KTogU2lnbmlmaWNhbmQgb2YgSW50ZWwgbG9uZyBkb3VibGUKKwlkZW5vcm1hbHMgaXMgc2hpZnRlZCBkb3duIG9uZSBiaXQuCisKK0ZyaSBNYXkgIDUgMDc6MDQ6MTIgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBEb24ndCBjbGVhcl9tb21lbnRhcnkgaWYKKwljb25zdHJ1Y3Rvcl9zdGFjayBpcyBub3QgZW1wdHkuCisKKwkqIG9iamMvTWFrZWZpbGUgKFNIRUxMKTogTm93IC9iaW4vc2guCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IEFsc28gd2FybiBhYm91dCBvcmRlcmVkCisJY29tcGFyaXNvbiBvZiBwb2ludGVyIHdpdGggemVybyBpZiAtV2FsbC4KKworCSogZXhwci5jIChkb19qdW1wLCBjYXNlIEVRX0VYUFIsIE5FX0VYUFIpOiBQcm9wZXJseSBjb21wYXJlIGNvbXBsZXguCisKK1RodSBNYXkgIDQgMTg6MDE6MjUgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBvYmpjL01ha2VmaWxlOiBOWENvbnN0YW50U3RyaW5nIHJlbmFtZWQgdG8gTlhDb25zdFN0ci4KKwkqIG9iamMvTlhDb25zdFN0ci5tOiBSZW5hbWVkIGZyb20gb2JqYy9OWENvbnN0YW50U3RyaW5nLm0uCisJKiBvYmpjL05YQ29uc3RTdHIuaDogUmVuYW1lZCBmcm9tIG9iamMvTlhDb25zdGFudFN0cmluZy5oLgorCitUaHUgTWF5ICA0IDE3OjM4OjIxIDE5OTUgIEouVC4gQ29ua2xpbiAgPGp0Y0BuZXRic2Qub3JnPgorCisJKiBjb25maWd1cmUgKHZheC0qLW5ldGJzZCopOiBOZXcgY29uZmlndXJhdGlvbi4KKwkqIHZheC9uZXRic2QuaCwgdmF4L3htLW5ldGJzZC5oOiBOZXcgZmlsZXMuCisKK1RodSBNYXkgIDQgMTY6Mzk6MDUgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBBZGQgY2hlY2sgZm9yICdjb2xsZWN0LWxkJywganVzdCBsaWtlCisgICAgICAgICdyZWFsLWxkJywgZXhjZXB0IHRoYXQgb2xkIHZlcnNpb25zIHdvbid0IGJlIGxvb2tpbmcgZm9yIGl0IGluIHRoZQorICAgICAgICBwYXRoLiAgRG9uJ3QgbG9vayBmb3IgJ3JlYWwtbGQnIGluIHRoZSBwYXRoIGFueW1vcmUuICBTaWdoLgorCisJKiBjb2xsZWN0Mi5jOiAjaW5jbHVkZSBkZW1hbmdsZS5oIGFuZCBvYnN0YWNrLmguCisJKG9ic3RhY2tfY2h1bmtfYWxsb2MpOiBEZWZpbmUuCisJKG9ic3RhY2tfY2h1bmtfZnJlZSk6IERlZmluZS4KKwkoZ2VuZXJpYyk6IERvbid0IGRlZmluZS4gIERvbid0IHVzZS4KKwkobWFpbik6IEluaXRpYWxpemUgb2JzdGFja3MgYW5kIGRlbWFuZ2xpbmcuCisKKwkqIGNvbGxlY3QyLmMgKGR1bXBfZmlsZSk6IEFkanVzdCBzcGFjZSBwYWRkaW5nIGluIG91dHB1dCB0bworICAgICAgICBtYWludGFpbiB0YWJ1bGF0aW9uIHdpdGggU29sYXJpcyBsZC4gIERvbid0IGRlbWFuZ2xlIGlmIHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBDT0xMRUNUX05PX0RFTUFOR0xFIGlzIHNldC4KKworICAgICAgICAqIGNvbGxlY3QyLmMgKG1haW4pOiBSZWRpcmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBmaXJzdCBsaW5rIGFuZAorICAgICAgICBkZW1hbmdsZSBpdC4gIERvbid0IGNvbGxlY3Qgc3RhdGljIGMvZHRvcnMgdW5sZXNzIFVTRV9DT0xMRUNUMiBpcworICAgICAgICBkZWZpbmVkLiAgTnVsbC10ZXJtaW5hdGUgdGhlIGxpc3Qgb2Ygb2JqZWN0cy4KKwkoZHVtcF9maWxlKTogTmV3IGZ1bmN0aW9uLgorCShmaWxlX2V4aXN0cyk6IE5ldyBmdW5jdGlvbi4KKwkoY29sbGVjdF9leGl0KTogUmVuYW1lZCBmcm9tIG15X2V4aXQuICBEdW1wIGFuZCByZW1vdmUgdGhlIHRlbXBvcmFyeQorCWxkIG91dHB1dCBmaWxlLgorCShjb2xsZWN0X2V4ZWN1dGUpOiBCcmVhayBvdXQgZnJvbSBmb3JrX2V4ZWN1dGUuICBTdXBwb3J0IHJlZGlyZWN0aW9uLgorCShmb3JrX2V4ZWN1dGUpOiBDYWxsIGl0LgorCShmYXRhbF9wZXJyb3IsIGZhdGFsLCBlcnJvcik6IE1ha2Ugbm9uLXN0YXRpYy4KKwkoeGNhbGxvYywgeG1hbGxvYyk6IERvbid0IHVzZSBnZW5lcmljLgorCSh4cmVhbGxvYyk6IERlZmluZS4KKwkoY29sbGVjdF93YWl0KTogQnJlYWsgb3V0IGZvciBkb193YWl0LiAgSnVzdCByZXR1cm4gdGhlIGV4aXQgc3RhdHVzLgorCShkb193YWl0KTogQ2FsbCBpdC4KKworCSogY29sbGVjdDIuYzogQ2hlY2sgU1VOT1M0X1NIQVJFRF9MSUJSQVJJRVMgdXNpbmcgI2lmLCBub3QgI2lmZGVmLgorCisJKiBNYWtlZmlsZS5pbiAoY29sbGVjdDIpOiBOb3cgdXNlcyBjcGx1cy1kZW0ubyBhbmQgdW5kZXJzY29yZS5vLgorCShjb2xsZWN0Mi5vKTogUGFzcyBNQVlCRV9VU0VfQ09MTEVDVDIgdG8gY29tcGlsZS4KKwkodW5kZXJzY29yZS5jKTogUnVsZXMgZm9yIGNyZWF0aW9uLgorCisJKiBjcGx1cy1kZW0uYywgZGVtYW5nbGUuaDogQ29weSBmcm9tIGxpYmliZXJ0eS4KKworVGh1IE1heSAgNCAxNDoxMjozNSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHNkYm91dC5jIChwbGFpbl90eXBlKTogUGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBsYWluX3R5cGVfMS4KKwkocGxhaW5fdHlwZV8xKTogTmV3IHBhcmFtZXRlciBsZXZlbC4gIEluY3JlbWVudCBpdCB3aGVuIG1ha2luZworCXJlY3Vyc2l2ZSBjYWxscy4gIEZvcmNlIHRoZSB0eXBlIHRvIHZvaWRfdHlwZV9tb2RlIGJlZm9yZSBzdGFydGluZworCWEgN3RoIGxldmVsIG9mIHJlY3Vyc2lvbi4KKworCSogc2guYyAoZ2VuZXJhbF9tb3ZzcmNfb3BlcmFuZCwgZ2VuZXJhbF9tb3Zkc3Rfb3BlcmFuZCk6IERlbGV0ZQorCXJlZmVyZW5jZXMgdG8gUE9TVF9ERUMgYW5kIFBSRV9JTkMuCisJKiBzaC5oOiBDbGVhbiB1cCB3aGl0ZXNwYWNlLCBjb21tZW50cywgZXRjLgorCShUQVJHRVRfU0gsIFJUTF9CSVQsIERUX0JJVCwgQ19CSVQsIFJfQklULCBUQVJHRVRfRFVNUF9SVEwsCisJVEFSR0VUX0RVTVBfUiwgVEFSR0VUX0NEVU1QKTogRGVsZXRlLgorCShUQVJHRVRfU1dJVENIRVMpOiBEZWxldGUgLW1SLCAtbWMsIC1tciBvcHRpb25zLgorCShDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogRGVsZXRlICdHJyBjb250cmFpbnQuCisJKEZVTkNUSU9OX1ZBTFVFKTogU2ltcGxpZnkuCisJKFJFR19PS19GT1JfUFJFX1BPU1RfUCwgSVNfSU5ERVgpOiBEZWxldGUuCisJKEJBU0VfUkVHSVNURVJfUlRYX1AsIElOREVYX1JFR0lTVEVSX1JUWF9QKTogUmV3cml0ZSB0byBhbGxvdworCVNVQlJFR3MuCisJKEdPX0lGX0xFR0lUSU1BVEVfSU5ERVgpOiBEZWxldGUgdW51c2VkIFJFR05PIGFyZ3VtZW50LgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBVc2UgQkFTRV9SRUdJU1RFUl9SVFhfUCBpbnN0ZWFkIG9mCisJUkVHX09LX0ZPUl9QUkVfUE9TVF9QLiAgRG9uJ3QgYWNjZXB0IFBSRV9JTkMgb3IgUE9TVF9ERUMgYWRkcmVzc2VzLgorCShQUkVESUNBVEVfQ09ERVMsIFBST01PVEVfTU9ERSk6IERlZmluZS4KKworV2VkIE1heSAgMyAwOTo1Nzo1NSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3JzNjAwMC5tZCAobm9uIHBvd2VyIGFicyBpbnNucyk6IElmIG5vdCBwb3dlcnBjLCB1c2UKKwlzZi9zdWJmYyBpbnN0cnVjdGlvbnMsIG5vdCBzdWJmLgorCitXZWQgTWF5ICAzIDA4OjQ5OjA2IDE5OTUgIEFsYW4gTW9kcmEgIDxhbGFuQFNQUkkuTGV2ZWxzLlVuaVNBLkVkdS5BdT4KKworCSogcHJvdG9pemUuYyAoZ2VuX2F1eF9pbmZvX2ZpbGUpOiBVc2Ugc3RyZXJyb3IgI2lmZGVmIEhBVkVfU1RSRVJST1IuCisKK1dlZCBNYXkgIDMgMDE6MDY6MDEgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogcGEuYyAob3V0cHV0X2NhbGwpOiBGaXggdHlwby90aGlua28gaW4gbGFzdCBjaGFuZ2UuCisJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IEFsaWduIHRoZSBkYXRhIHNlY3Rpb24gYmVmb3JlCisJZW1pdHRpbmcgZGVmZXJyZWQgcGxhYmVscy4KKworCUZyb20gVG9yYmpvcm46CisJKiBwYS5jIChiZWZvcmUgZnVuY3Rpb25zKTogRGVjbGFyZSBkZWZlcnJlZF9wbGFiZWxzIGFuZAorCW5fZGVmZXJyZWRfcGxhYmVscy4KKwkob3V0cHV0X2NhbGwpOiBXaGVuIGdlbmVyYXRpbmcgcGljLCBkb24ndCB1c2UgTFAgYW5kIFJQLiAgVXNlIDMyIGJpdAorCXBsYWJlbCBpbnN0ZWFkLgorCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBPdXRwdXQgcGxhYmVscyBhY2N1bXVsYXRlZCBpbiBvdXRwdXRfY2FsbC4KKworVHVlIE1heSAgMiAxNzoxNTowOCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBwYS5jIChocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IEZpeCB0aGlua28gaW4gbGFzdCBjaGFuZ2UuCisKK1R1ZSBNYXkgIDIgMTY6NTQ6MzUgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUsIGNhbl9yZWFjaF9lbmQgZGV0ZXJtaW5hdGlvbik6IEEgYmFycmllciBjYW4KKwlmb2xsb3cgdGhlIHJldHVybiBpbnNuLgorCitUdWUgTWF5ICAyIDEyOjM5OjU1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogRW5zdXJlIHRoYXQgd2UgZG9uJ3QgYWx0ZXIgdGhlIGV4cHJlc3Npb24ncworCXR5cGUgd2hlbiBmb2xkaW5nIENMRUFOVVBfUE9JTlRfRVhQUnMuCisKK1R1ZSBNYXkgIDIgMTM6MzY6MDggMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBXaGVuIGNyZWF0aW5nIHN0b3JlIGZsYWcKKwlpbnN0cnVjdGlvbnMgZnJvbSBzaW1wbGVyIHBhcnRzLCBzdWNoIGFzIFhPUiwgQUJTLCBldGMuIGRvIG5vdAorCXJldXNlIHBzZXVkbyByZWdpc3RlcnMgaWYgZXhwZW5zaXZlIG9wdGltaXphdGlvbnMsIGluc3RlYWQgY3JlYXRlIG5ldworCXBzZXVkb3MgZm9yIGVhY2ggaW5zbiByZXN1bHQuCisKK1R1ZSBNYXkgIDIgMDE6MjU6MjkgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAc25ha2UuY3MudXRhaC5lZHU+CisKKwkqIHBhLmMgKGhwcGFfZXhwYW5kX2VwaWxvZ3VlKTogQ29ycmVjdGx5IGhhbmRsZSByZXN0b3JlIG9mICVycAorCWZvciBmdW5jdGlvbnMgd2l0aCBhIHN0YWNrIHNpemUgb2YgZXhhY3RseSA4a2J5dGVzIGFuZCBubyBmcmFtZQorCXBvaW50ZXIuCisKK01vbiBNYXkgIDEgMTk6Mjc6MDggMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X29uZV90eXBlKTogRG9uJ3Qgc3dpdGNoIHRvIHRleHQgc2VjdGlvbiBpZgorCWluIGZ1bmN0aW9uIHdpdGggc2VjdGlvbiBhdHRyaWJ1dGUuCisKKwkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnV0aW9ucyk6IFNldCBzdWJzdF9wcmV2X2luc24gdG8gemVyby4KKwkodHJ5X2NvbWJpbmUsIHVuZG9fYWxsKTogTGlrZXdpc2UuCisJKGdldF9sYXN0X3ZhbHVlKTogUmV0dXJuIHplcm8gaWYgc3Vic3RfcHJldl9pbnNuIHNldC4KKworCSogc3BhcmMuaCAoSU5JVF9UQVJHRVRfT1BUQUJTKTogTW92ZSBJTklUX1NVQlRBUkdFVF9PUFRBQlMgdG8gZW5kLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kaXIpOiBjaG1vZCBhK3J4IGFsbCBuZXdseSBjcmVhdGVkIGRpcmVjdG9yaWVzLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFNBVkVfRVhQUik6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZQorCW1vZGUgaXMgVk9JRG1vZGUuCisKK0ZyaSBBcHIgMjggMTU6Mzk6MzggMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIGNwcGxpYi5oIChjcHBfYnVmZmVyKTogIE5vdGUgbmV3IGVzY2FwZSBjb21iaW5hdGlvbiAiQCAiLgorCSogY3BwbGliLmMgKG1hY3JvZXhwYW5kKTogIERlbGV0ZSAiQCAiIGlmIHN0cmluZ2lmeWluZy4KKwkoY3BwX3NraXBfaHNwYWNlKTogIEFsc28gc2tpcCAiQCAiIGlmIGlucHV0IGJ1ZmZlciBoYXNfZXNjYXBlcy4KKwkoY29sbGVjdF9leHBhbnNpb24pOiAgIENsZWFudXAgd2hpdGUtc3BhY2UgaGFuZGxpbmcuCisJKGNyZWF0ZV9kZWZpbml0aW9uKTogIFJlbW92ZSBhbGwgbGVhZGluZyBzcGFjZXMsIG5vdCBqdXN0IGZpcnN0IG9uZS4KKwkoY3BwX2V4cGFuZF90b19idWZmZXIpOiAgU2V0IGhhc19lc2NhcGVzIG9uIHJlc3VsdGluZyBpbnB1dCBidWZmZXIuCisJKG1hY3JvZXhwYW5kKTogIFNldCBvdXRwdXRfZXNjYXBlcyBkdXJpbmcgd2hvbGUgZnVuY3Rpb24gKGFuZAorCXNwZWNpZmljYWxseSBkdXJpbmcgY2FsbHMgb2YgbWFjYXJnKS4KKwkobWFjcm9leHBhbmQpOiAgU2V0ICJAICIgYmVmb3JlIGFuZCBhZnRlciBleHBhbnNpb24gcmVzdWx0LgorCShwdXNoX21hY3JvX2V4cGFuc2lvbik6ICBSZW1vdmUgdW5uZWVkZWQgaW5pdGlhbCAiQCAiLCBub3QgIiAiLgorCShjcHBfZ2V0X3Rva2VuKTogIFJlbW92ZSB1bm5lZWRlZCAiQCAiIChub3QgIiAiKSBhdCBlbmQgb2YgZXhwYW5zaW9uLgorCShjcHBfZ2V0X3Rva2VuKTogIEhhbmRsZSAiQCAiLgorCisJKiBjcHBsaWIuYyAocmVhZF9uYW1lX21hcCk6ICBBZGQgY3BwX3JlYWRlciBwYXJhbWV0ZXIuICBBY2Nlc3MKKwltYXBfbGlzdCBmcm9tIGZvcm1lciAoaW5zdGVhZCBvZiBoYXZpbmcgaXQgYmUgc3RhdGljKS4KKwkob3Blbl9pbmNsdWRlX2ZpbGUpOiAgRXh0cmEgcGFyYW1ldGVyIChiZWNhdXNlIG9mIGFib3ZlIGNoYW5nZXMpLgorCShkb19pbmNsdWRlLCBsb29rdXBfaW1wb3J0KTogIFVwZGF0ZSBjYWxscyBvZiBvcGVuX2luY2x1ZGVfZmlsZS4KKworCSogY3BwbGliLmMgKGRvX2luY2x1ZGUpOiAgRml4IG1lbW9yeSBsZWFrLgorCisJKiBjcHBsaWIuYyAoZGVsZXRlX2Fzc2VydGlvbik6ICBBbHNvIGRlbGV0ZSB0b2tlbmxpc3QuCisJKGRvX3VuYXNzZXJ0KTogIERvbid0IGRlbGV0ZSB0b2tlbmxpc3QgKGhhbmRsZWQgYnkgZGVsZXRlX2Fzc2VydGlvbikuCisJKGNwcF9jbGVhbnVwKTogIE5ldyBmdW5jdGlvbi4gIEZyZWVzIHJlc291cmNlcyB1c2VkIGJ5IGEgY3BwX3JlYWRlci4KKwkqIGNwcGhhc2guYyAoY3BwX2hhc2hfY2xlYW51cCk6ICBOZXcgZnVuY3Rpb24uCisJKGRlbGV0ZV9tYWNybyk6ICBFbmFibGUgY29tbWVudGVkLW91dCBjb2RlLgorCShmaWxlX2NsZWFudXApOiAgRnJlZSBhY3R1YWwgYnVmZmVyLgorCisJKiBjcHBsaWIuYyAoY3BwX29wdGlvbnMpOiAgQWRkIG1hcF9saXN0LgorCisJKiBjcHBsaWIuaCAoUEFSU0VfR0VUQyk6ICBSZW1vdmVkLiAgQm9ndXMgYW5kIHVudXNlZC4KKwkqIGNwcG1haW4uYyAobWFpbik6ICBSZW1vdmUgY29tbWVudGVkLW91dCBjb2RlIHRoYXQgdXNlZCBQQVJTRV9HRVRDLgorCisJKiBjcHBsaWIuYzogIERvbid0ICNpbmNsdWRlIDxzdHJpbmcuaD4uICBDYXVzZXMgY2xhc2hlcworCW9uIE5leHRzdGVwICh3aGVuIGluZGV4L3JpbmRleCBhcmUgbWFjcm9zKS4KKwkoY3BwX2dyb3dfYnVmZmVyLCBpbnRfcGFyc2VfZmlsZSk6ICBDYXN0IHRvIFVfQ0hBUiosIHJhdGhlciB0aGFuIGNoYXIqLgorCitTdW4gQXByIDMwIDA4OjExOjIzIDE5OTUgIEFsYW4gTW9kcmEgIChhbGFuQHNwcmkubGV2ZWxzLnVuaXNhLmVkdS5hdSkKKworCSogc3RkYXJnLmgsIHZhcmFyZ3MuaCAodmFfYXJnKTogRG9uJ3QgYXNzdW1lIF9fdmFfcm91bmRlZF9zaXplIChjaGFyKQorCWhhcyB0aGUgdmFsdWUgb2YgNC4KKworU3VuIEFwciAzMCAwNzoxMzo0MyAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXguaCAoTk9USUNFX1VQREFURV9DQyk6IENvcnJlY3RseSBoYW5kbGUgYW9iIGluc25zLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTlNUUlVDVE9SKTogRG9uJ3Qgc2V0IHRhcmdldCB0bworCXplcm8gaWYgbW9yZSB0aGVuIG9uZSB3b3JkLgorCVBhc3Mgc2l6ZSBhbmQgYWxpZ25tZW50IHRvIG1vdmVfYnlfcGllY2VzX25pbnNucyBpbiBieXRlcywgbm90IGJpdHMuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFByb3Blcmx5IHNldCBJTl9NRU1PUlkgZm9yIFNFVF9ERVNULgorCisJKiB0cmVlLmMgKHN1YnN0aXR1dGVfaW5fZXhwcik6IFByZXNlcnZlIFRSRUVfUkVBRE9OTFkuCisKKwkqIGMtY29tbW9uLmMgKGVudW0gYXR0cnMpOiBBZGQgQV9VTlVTRUQuCisJKGluaXRfYXR0cmlidXRlcyk6IEluaXRpYWxpemUgaXQuCisJKGRlY2xfYXR0cmlidXRlcywgY2FzZSBBX1VOVVNFRCk6IE5ldyBjYXNlLgorCitTYXQgQXByIDI5IDE1OjQyOjAzIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBSZS1maXggbWlub3IgbWVtb3J5IGxlYWsgYnkgdXNpbmcKKwlhbGxvY2EgaW5zdGVhZCBvZiB4bWFsbG9jIGFuZCBmcmVlLgorCisJKiBjY2NwLmMgKG1hY2FyZyk6IEV4Y2VwdCBmb3IgcmVwb3J0aW5nIGVycm9yLCB0cmVhdCB1bnRlcm1pbmF0ZWQKKwltYWNybyBjYWxsIGFzIGlmIGl0IHdlcmUgdGVybWluYXRlZCwgc2luY2UgYG1hY3JvZXhwYW5kJyByZWxpZXMKKwlvbiAqYXJncHRyIGJlaW5nIGZpbGxlZCBpbi4KKworU2F0IEFwciAyOSAwNjowOTozNSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAY3lnbnVzLmNvbT4KKworCSogcGEuYyAob3V0cHV0X211bF9pbnNuKTogU2ltcGxpZnksIGl0IGlzIG5ldmVyIGNhbGxlZCB3aXRoCisJVU5TSUdORURQIHNldC4KKworCSogcGEubWQgKGRpdnNpMywgdWRpdnNpMywgbW9kc2kzLCB1bW9kc2kzKTogU2ltcGxpZnkuCisJKGFzaGxzaTMpOiBDbGVhbiB1cCBpbmRlbnRhdGlvbiBhbmQgY29tbWVudGFyeS4KKworRnJpIEFwciAyOCAxMjo0ODowMSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBlbWl0IGFueSBub3RlcyB1bnRpbAorICAgICAgICBhZnRlciB3ZSd2ZSBleHBhbmRlZCB0aGUgYWN0dWFsIHBhcmFtZXRlcnMuCisKK0ZyaSBBcHIgMjggMTE6NTE6MDYgMTk5NSAgU3RhbiBDb3ggIChnY2NAZGctcnRwLmRnLmNvbSkKKworICAgICAgICAqIG04OGsvZGd1eC5oOiAoRU5ERklMRV9TUEVDLCBMSUJfU1BFQykgRml4IGNydGJlZ2luIGFuZCBjcnRlbmQKKyAgICAgICAgKFNFTEVDVF9SVFhfU0VDVElPTikgUHV0IHJlbG9jYXRhYmxlIHBpYyBjb25zdGFudHMgaW4gZGF0YSBzZWN0aW9uCisKKyAgICAgICAgKiBtODhrL2RndXhiY3MuaDogKExJQl9TUEVDKSBMaWtld2lzZQorCisgICAgICAgICogbTg4ay9tODhrLmM6IChzeW1ib2xpY19vcGVyYW5kKSBQdXQgcmVsb2NhdGFibGUgcGljIGNvbnN0YW50cyBpbiBkYXRhCisKKyAgICAgICAgKiBtODhrL204OGsuaDogKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpIEFkZCAtbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyCisKKyAgICAgICAgKiBtODhrL204OGsubWQ6ICh1bXVsc2lkaTMpIERvZXNuJ3Qgd29yayBmb3IgODgxMTAgd2l0aCBtb2QvZGl2IGNoYW5nZXMKKworICAgICAgICAqIG04OGsveC1kZ3V4OiAoR0NDX0ZPUl9UQVJHRVQpIHRkZXNjIGdldHMgbWl4ZWQgdXAgZm9yIGNydGJlZ2luL2NydGVuZAorCitGcmkgQXByIDI4IDA2OjM2OjQ3IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHBvcF9pbml0X2xldmVsLCBvdXRwdXRfaW5pdF9lbGVtZW50KTogUGFzcworCXJlcXVpcmVfY29uc3RhbnRfKiB0byBkaWdlc3RfaW5pdC4KKworCSogYWxwaGEuYyAoYWxwaGFfZW1pdF9zZXRfY29uc3QpOiBOb3cgcmV0dXJucyBydHggYW5kIHRha2UgTU9ERSBhcmcuCisJUmV3b3JrIHRvIHVzZSBhIG5ldyBwc2V1ZG8gZm9yIGludGVybWVkaWF0ZSB2YWx1ZXMgaWYgaGlnaCBvcHQgbGV2ZWwuCisJQWxzbyB1c2UgZXhwYW5kX3tiaW4sdW59b3AuCisJKiBhbHBoYS5oIChhbHBoYV9lbWl0X3NldF9jb25zdCk6IEFkZCBkZWNsYXJhdGlvbi4KKwkqIGFscGhhLm1kIChtb3Zbc2RdaSBhbmQgc3BsaXRzKTogQ2hhbmdlIGNhbGwgdG8gYWxwaGFfZW1pdF9zZXRfY29uc3QuCisKKwkqIHJlZy1zdGFjay5jIChzdGFja19yZXN1bHQpOiBGaXggYnVnIGluIGxhc3QgY2hhbmdlLgorCitGcmkgQXByIDI4IDAxOjA4OjQzIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogb2JqYy1hY3QuYzogVXBkYXRlIGNhbGxzIHRvIHN0YXJ0X2RlY2wsIGZpbmlzaF9zdHJ1Y3QsCisJcGFzcyBOVUxMcyBmb3IgYXR0cmlidXRlcy4KKworVGh1IEFwciAyNyAyMToxMzoxNCAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjLm1kICh0YWJsZWp1bXApOiBPbmx5IGlmICEgVEFSR0VUX01FREFOWS4KKwkoY2FzZXNpKTogTmV3IHBhdHRlcm4gZm9yIFRBUkdFVF9NRURBTlkgY2FzZS4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQWx3YXlzIGNvbnRpbnVlIGlmIGF0dHJpYnV0ZSBub3QgZm91bmQuCisJKiBjLXR5cGVjay5jIChjb21tb25fdHlwZSk6IENhbGwgbG9va3VwX2F0dHJpYnV0ZSBpbnN0ZWFkIG9mCisJdmFsdWVfbWVtYmVyLgorCSogdHJlZS5jIChhdHRyaWJ1dGVfaGFzaF9saXN0KTogTmV3IGZ1bmN0aW9uLgorCShidWlsZF90eXBlX2F0dHJpYnV0ZV92YXJpYW50KTogQ2FsbCBpdC4KKwkodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBIYW5kbGUgYXR0cmlidXRlcyB3aXRoIGFyZ3VtZW50cy4KKwkoaXNfYXR0cmlidXRlX3ApOiBOZXcgZnVuY3Rpb24uCisJKGxvb2t1cF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCisJKGF0dHJpYnV0ZV9pbl9saXN0KTogRGVsZXRlZC4KKwkoYXR0cmlidXRlX2xpc3RfY29udGFpbmVkKTogQ2hlY2sgVFJFRV9QVVJQT1NFIGFuZCBUUkVFX1ZBTFVFLgorCSogdHJlZS5oICh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IEFkZCBwcm90b3R5cGUuCisJKGlzX2F0dHJpYnV0ZV9wLCBsb29rdXBfYXR0cmlidXRlKTogTGlrZXdpc2UuCisJKiBpMzg2L3dpbm50LmggKFJFVFVSTl9QT1BTX0FSR1MpOiBDYWxsIGxvb2t1cF9hdHRyaWJ1dGUuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBMaWtld2lzZS4KKwkoQ1BQX1BSRURFRklORVMpOiBVc2UgX19zdGRjYWxsX18sIF9fY2RlY2xfXy4KKwkoVkFMSURfTUFDSElORV9ERUNMX0FUVFJJQlVURSk6IENhbGwgaXNfYXR0cmlidXRlX3AuCisJYGFyZ3MnIG11c3QgYmUgTlVMTC4KKworVGh1IEFwciAyNyAyMToxMDo0MSAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLm1kIChpbnN2KTogTmV3IGFub255bW91cyBwYXR0ZXJucyB0byBjb21iaW5lIGluc2VydCB3aXRoCisJYXJiaXRyYXJ5IGFzaGlmdCwgYXNoaWZ0cnQsIGxzaGlmdHJ0LCBvciB6ZXJvX2V4dHJhY3QuICAoQmFzZWQgb24KKwlwYXRjaCBmcm9tIEpvaG4gQnJvb2tzIDxqYnJvb2tzQGVhLmNvbT4uKQorCShhc2hsc2kzKTogUmVtb3ZlIGV4dHJhbmVvdXMgb3BlcmFuZCBwcm9jZXNzaW5nLgorCitUaHUgQXByIDI3IDE4OjQ3OjI0IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2gvYXNobHNpMy5jLCBzaC9hc2hyc2kzLmMsIHNoL2xzaHJzaTMuYzogRGVsZXRlLgorCSogc2gvbGliMWZ1bmNzLmFzbSAoYXNoaWZ0cnRfcjRfKik6IFJld3JpdGUgZm9yIGVmZmljaWVuY3kuCisJKGFzaHJzaTMsIGxzaHJzaTMsIGxzaHJzaTMpOiBBZGQuCisJKiB0LXNoIChMSUIxQVNNRlVOQ1MpOiBBZGQgbmV3IGZ1bmN0aW9ucy4KKwkoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCisJKExJQjJGVU5DU19FWFRSQSk6IFJlbW92ZSBkZWxldGVkIGZpbGVzLgorCShhc2hsc2kzLmMsIGFzaHJzaTMuYywgbHNocnNpMy5jKTogUmVtb3ZlIHJ1bGVzIGZvciBkZWxldGVkIGZpbGVzLgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBXaGVuIHJldHVybmluZyBCTEttb2RlIHN0cnVjdHVyZSwgdXNlCisJb3BlcmFuZF9zdWJ3b3JkIGluc3RlYWQgb2YgZG9pbmcgYXJpdGhtZXRpYyBvbiB0aGUgcmVnaXN0ZXIgbnVtYmVyLgorCUFsc28sIGZvciBzdHJ1Y3R1cmVzIHNtYWxsZXIgdGhhbiB3b3JkX21vZGUsIGNvcHkgaXQgaW50byBhIHdvcmRfbW9kZQorCXRlbXBvcmFyeSBhbmQgdGhlbiBzdWJyZWcgaXQuCisKKwkqIHNwYXJjLm1kOiBEZWxldGUgdHdvIGRlZmluZV9wZWVwaG9sZXMgd2hpY2ggcHJpbnQgYGJhZCBwZWVwaG9sZScuCisKK1RodSBBcHIgMjcgMTY6MTc6MDEgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQ2FsbCBzaG9ydGVuX2JyYW5jaGVzIGV2ZW4gd2hlbgorCSFvcHRpbWl6ZS4KKwkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBGb3Igbm9uLW9wdGltaXppbmcgY29tcGlsZXMsIGJyZWFrCisJYWZ0ZXIgZmlyc3QgcGFzcy4KKworVGh1IEFwciAyNyAxNDoyMjo1MCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogaTM4Ni9saW51eC1vbGRsZC5oOiBOZXcgZmlsZSwgdGhhdCBpcyBjbG9uZWQgZnJvbSBsaW51eC1hb3V0LmgsCisJZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgcGFzcyAtbSBpMzg2bGludXggdG8gdGhlIGxpbmtlci4gIFRoaXMgaXMKKwl0byBzdXBwb3J0IHRoZSBvcmlnaW5hbCBMaW51eCBsZCB0aGF0IGlzIG9uIG1vc3QgZGlzdHJpYnV0aW9ucy4KKworCSogY29uZmlndXJlIChpWzM0NV04Ni0qLWxpbnV4Km9sZGxkKik6IFVzZSBpMzg2L2xpbnV4LW9sZGxkLmggYXMKKwl0aGUgdGFyZ2V0IGZpbGUuCisKK1RodSBBcHIgMjcgMDg6NTY6NTAgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jICh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IFVwZGF0ZSBsYXN0IGNoYW5nZS4KKworVGh1IEFwciAyNyAwODowNjozMyAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIGZpeC1oZWFkZXIuYywgY3BwbGliLmM6IERvbid0IGluY2x1ZGUgPHN5cy9zdGF0Lmg+IHR3aWNlLgorCSogY3BwbGliLmMgKGNwcF9ncm93X2J1ZmZlciwgaW5pdF9wYXJzZV9maWxlKTogQ2FzdCB7eG1hbGxvYyx4cmVhbGxvY30KKwlmb3IgdG9rZW5fYnVmZmVyIHRvIFVfQ0hBUiogaW5zdGVhZCBvZiBjaGFyKi4KKworCSogbTY4ay94LW1vdDMzMDA6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtNjhrLW1vdG9yb2xhLXN5c3YqKTogVXNlIHgtbW90MzMwMCBpbnN0ZWFkIG9mIHgtYWxsb2NhLgorCitUaHUgQXByIDI3IDA3OjA0OjA5IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBGaXggbWlub3IgbWVtb3J5IGxlYWsuCisKKwkqIGNjY3AuYyAoc3RydWN0IGFyZ2RhdGEpOiBSZW1vdmUgdW51c2VkIGBjb21tZW50cycgbWVtYmVyLgorCShtYWNhcmcpOiBEb24ndCBzZXQgYGNvbW1lbnRzJyBtZW1iZXIuCisKKwkqIGNjY3AuYyAoY29sbGVjdF9leHBhbnNpb24pOiBBc3N1bWUgbGVhZGluZyB3aGl0ZSBzcGFjZQorCWFscmVhZHkgcmVtb3ZlZC4KKwlEb24ndCBhbGxvY2F0ZSB1bm5lY2Vzc2FyeSBzcGFjZSBmb3IgZXhwYW5zaW9uLgorCisJKiBjY2NwLmMgKGRlcHNfb3V0cHV0KTogRG9uJ3QgZ2VuZXJhdGUgb3Zlcmx5IGxvbmcgb3V0cHV0IGxpbmVzLgorCURvIG5vdCBpbnZva2Ugc2VsZiByZWN1cnNpdmVseSB3aXRoIHNwYWNlciA9PSAwOyB0aGlzIHNpbXBsaWZpZXMKKwl0aGUgY29kZSBhIGJpdC4KKworV2VkIEFwciAyNiAxOToyMDowMiAxOTk1ICBBbmRyZXcgTWNDYWxsdW0gIDxtY2NhbGx1bUBsZW9wYXJkLmNzLnJvY2hlc3Rlci5lZHU+CisKKwkqIG9iamMvT2JqZWN0Lmg6IENoYW5nZWQgQ2xhc3MgKiB0byBDbGFzcyBpbiBvcmRlciB0byBtYXRjaCBORVhUU1RFUAorCWFuZCBPcGVuU3RlcCBydW50aW1lLgorCSogb2JqYy9PYmplY3QubSwgb2JqYy9PYmplY3QuaCwgb2JqYy9hcmNoaXZlLmMsIG9iamMvY2xhc3MuYzogTGlrZXdpc2UuCisJKiBvYmpjL2VuY29kaW5nLmMsIG9iamMvaW5pdC5jLCBvYmpjL29iamMtYXBpLmgsIG9iamMvb2JqYy5oOiBMaWtld2lzZS4KKwkqIG9iamMvb2JqZWN0cy5jLCBvYmpjL3J1bnRpbWUuaCwgb2JqYy9zZWxlY3Rvci5jOiBMaWtld2lzZS4KKwkqIG9iamMvc2VuZG1zZy5jLCBvYmpjL3R5cGVkc3RyZWFtLmg6IExpa2V3aXNlLgorCitXZWQgQXByIDI2IDE5OjE4OjUyIDE5OTUgIFBpZXRlciBTY2hvZW5tYWtlcnMgIDx0aWdnckBlcy5lbGUudHVlLm5sPgorCisJKiBvYmpjL29iamMtYXBpLmggKG9iamNfc3RhdGljX2luc3RhbmNlcyk6IE5ldyBzdHJ1Y3QgdG8gcmVjb3JkCisJc3RhdGljIGluc3RhbmNlcyBvZiBhIGNlcnRhaW4gY2xhc3MuCisJKG9iamNfbW9kdWxlKTogTmV3IHRhZyBTVEFUSUNTIHRvIHBvaW50IHRvIHRoZSB0YWJsZSBvZgorCW9iamNfc3RhdGljc19pbnN0YW5jZXMuCisKKwkqIG9iamMvaW5pdC5jIChPQkpDX1ZFUlNJT04pOiBWZXJzaW9uIDcuCisJKG9iamNfaW5pdF9zdGF0aWNzKTogTmV3IGZ1bmN0aW9uLgorCShfX29iamNfZXhlY19jbGFzcyk6IEludm9rZSBvYmpjX2luaXRfc3RhdGljcyBpZiBuZWVkZWQuCisKKwkqIG9iamMvTlhDb25zdGFudFN0cmluZy5tLCBvYmpjL05YQ29uc3RhbnRTdHJpbmcuaDogTmV3IGZpbGVzLgorCSogb2JqYy9NYWtlZmlsZSAoT0JKQ19PKTogQWRkZWQgYmFyZS1ib25lcyBpbXBsZW1lbnRhdGlvbiBvZgorCU5YQ29uc3RhbnRTdHJpbmcuCisKKwkqIG9iamMtYWN0LmMgKE9CSkNfVkVSU0lPTik6IFZlcnNpb24gNy4KKwkoYnVpbGRfb2JqY19zdHJpbmdfb2JqZWN0KTogQnVpbGQgYSBmdWxsIGRlY2xhcmF0aW9uIGlmIG5vdCB1c2luZworCXRoZSBuZXh0IHJ1bnRpbWUuCisJKG9iamNfYWRkX3N0YXRpY19pbnN0YW5jZSk6IE5ldyBmdW5jdGlvbi4KKwkoaW5pdF9tb2R1bGVfZGVzY3JpcHRvcik6IEFkZCByZWZlcmVuY2UgdG8gc3RhdGljIGluc3RhbmNlcyB0YWJsZS4KKwkoYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiBBZGQgZmllbGQgZm9yIHN0YXRpYyBpbnN0YW5jZXMgdGFibGUuCisJKGdldF9vYmpjX3N0cmluZ19kZWNsKTogTmV3IGZ1bmN0aW9uLgorCShnZW5lcmF0ZV9zdGF0aWNfcmVmZXJlbmNlcyk6IE5ldyBmdW5jdGlvbi4KKwkoZmluaXNoX29iamMpOiBDYWxsIGdlbmVyYXRlX3N0YXRpY19yZWZlcmVuY2VzIGlmIG5lZWRlZC4KKworCSogYy10cmVlLmggKGZpbmlzaF9kZWNsX3RvcF9sZXZlbCk6IE5ldyBkZWNsYXJhdGlvbi4KKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbF90b3BfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCisKK1dlZCBBcHIgMjYgMTg6MDQ6MzIgMTk5NSAgRGlyayBTdGVpbmJlcmcgIChEaXJrLlN0ZWluYmVyZ0BnbWQuZGUpCisKKwkqIHN0ZGRlZi5oOiBUcmVhdCBfTUFDSElORV9BTlNJX0hfIGxpa2UgX0FOU0lfSF8uCisKK1dlZCBBcHIgMjYgMTQ6MDk6NTkgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBzcGFyYy5oIChORUdURjJfTElCQ0FMTCk6IERlZmluZS4KKwkoSU5JVF9UQVJHRVRfT1BUQUJTKTogQWRkIHN1cHBvcnQgZm9yIGFsbCBURm1vZGUgKl9MSUJDQUxMIG1hY3Jvcy4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IERlbGV0ZSBhbGwgdXNlcyBvZiB1bmRvY3VtZW50ZWQgVEltb2RlIGFuZAorCVRGbW9kZSAqX0xJQkNBTEwgbWFjcm9zLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCwgY2FzZSBUUlVOQ0FURSk6IEFkZC4gIFVzZSBmb3JjZV90b19tb2RlLgorCShmb3JjZV90b19tb2RlLCBjYXNlIEFORCk6IEFsbG93IHNvbWUgc2ltcGxpZmljYXRpb25zIHdoZW4gR0VUX01PREUgKHgpCisJaGFzIG1vcmUgYml0cyB0aGFuIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCisJKiBtaXBzL21pcHMubWQgKHRydW5jZGlxaTIrWzQ1Nl0pOiBBZGQgcGF0dGVybnMgdG8gc2ltcGxpZnkgWkVST19FWFRFTkQKKwlvZiBhIFRSVU5DQVRFLgorCitXZWQgQXByIDI2IDEzOjAxOjIyIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMubWQgKG1lbW9wIGRlZmluZV9zcGxpdHMpOiBSZXdyaXRlIHRvIG5vdCB1c2UgbWVtb3AuCisJUHJlc2VydmUgTUVNX0lOX1NUUlVDVF9QLCBNRU1fVk9MQVRJTEVfUCwgUlRYX1VOQ0hBTkdJTkdfUCBiaXRzLgorCSogc3BhcmMuYyAobWVtb3ApOiBEZWxldGVkLgorCShzcGxpdHRhYmxlX3N5bWJvbGljX21lbW9yeV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShzcGxpdHRhYmxlX2ltbWVkaWF0ZV9tZW1vcnlfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKworV2VkIEFwciAyNiAxMjo1NDoyNiAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogY29uZmlndXJlOiBBZGQgaHBwYTEuMS1ocC1saXRlcyBzdXBwb3J0LgorCitXZWQgQXByIDI2IDA4OjA0OjQ2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNoLm1kIChhc2hyc2kyXzMxKTogRG9uJ3QgdXNlIGRlYWRfb3Jfc2V0X3AgYWZ0ZXIgcmVsb2FkLgorCSogcHlyLm1kOiBSZW1vdmUgYmFkIHBlZXBob2xlcyB0aGF0IGltcHJvcGVybHkgdXNlIGRlYWRfb3Jfc2V0X3AuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBXYXJuIGFib3V0IHVudXNlZCBwYXJtcworCWlmIGJvdGggLVd1bnVzZWQgYW5kIC1XLgorCisJKiB0cmVlLmggKFRZUEVfUEFSU0VfSU5GTyk6IERlbGV0ZSB1bnVzZWQgZmllbGQuCisJKFRZUEVfUEFDS0VEKTogQWRkIG5ldyBtYWNyby4KKwkoc3RydWN0IHRyZWVfdHlwZSk6IERlbGV0ZSB1bnVzZWQgZmllbGQgYHBhcnNlX2luZm8nLgorCUFkZCBuZXcgZmllbGQgYHBhY2tlZF9mbGFnJy4KKwkqIGMtdHJlZS5oIChmaW5pc2hfZW51bSwgZmluaXNoX3N0cnVjdCk6IEFkZCBBVFRSSUJVVEVTIGFyZ3VtZW50LgorCSogYy1jb21tb24uYyAoaW5pdF9hdHRyaWJ1dGVzKTogRG9uJ3QgcmVxdWlyZSBkZWNsIGZvciBBX1BBQ0tFRC4KKwkoZGVjbF9hdHRyaWJ1dGVzLCBjYXNlIEFfUEFDS0VEKTogU2V0IFRZUEVfUEFDS0VEIGZvciB0eXBlLgorCSogYy1wYXJzZS5pbjogVXBkYXRlIG51bWJlciBvZiBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzLgorCShzdHJ1Y3RzcCk6IFBhc3MgYXR0cmlidXRlIGFyZyB0byBmaW5pc2hfc3RydWN0LgorCVN1cHBvcnQgYXR0cmlidXRlcyBvbiBlbnVtcyBhbmQgcGFzcyB0byBmaW5pc2hfZW51bS4KKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogQWRkIEFUVFJJQlVURVMgYXJndW1lbnQsIGNhbGwKKwlkZWNsX2F0dHJpYnV0ZXMgYW5kIHNldCBERUNMX1BBQ0tFRCBmcm9tIFRZUEVfUEFDS0VELgorCShmaW5pc2hfZW51bSk6IEFkZCBBVFRSSUJVVEVTIGFyZ3VtZW50LCBjYWxsIGRlY2xfYXR0cmlidXRlcywKKwlhbmQgbWFrZSBlbnVtIG5hcnJvdyBpZiBUWVBFX1BBQ0tFRC4KKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IFByaW50IFRZUEVfUEFDS0VELgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEb24ndCBnaXZlIGJ1aWx0aW5fX2NvbnN0YW50X3AgYW4KKwlhcmd1bWVudCB0eXBlLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9DT05TVEFOVF9QKTogQSBwb2ludGVyIHRvIGEKKwlzdHJpbmcgY29uc3RhbnQgaXMgYSBjb25zdGFudC4KKworCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCk6IENvbnN0cnVjdG9yIGlzIG5vdCBzaW1wbGUgaWYKKwlhIGJpdGZpZWxkIGlzIGJlaW5nIGFzc2lnbmVkIGEgbm9uLWludGVnZXIuCisKKwkqIGMtdHlwZWNrLmMgKHB1c2hfaW5pdF9sZXZlbCk6IFVwZGF0ZSBjb25zdHJ1Y3Rvcl9kZXB0aCB3aGVuIHdlCisJcHVzaCBzcGVsbGluZyBsZXZlbC4KKworVHVlIEFwciAyNSAxOTo1MDowNiAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogSGFuZGxlIGZ1bmN0aW9uIGxhYmVsIGFyaXRobWV0aWMgZm9yCisJUElDIGNvZGUgZ2VuZXJhdGlvbiB0b28uCisKK1R1ZSBBcHIgMjUgMTg6NTI6NDMgMTk5NSAgU3RlcGhlbiBSLiB2YW4gZGVuIEJlcmcgIChiZXJnQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZSkKKworCSogcmVnLXN0YWNrLmMgKGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19yZWFsKTogRGVsZXRlZCAodW51c2VkKS4KKwkoRlBfbW9kZV9yZWcpOiBUcmltbWVkIHRvIGEgc21hbGxlciBzaXplLCBsZXNzIG92ZXJoZWFkLgorCShGUF9NT0RFX1JFRyk6IE5ldyBtYWNybyBvdmVyIHdoaWNoIEZQX21vZGVfcmVnIHdpbGwgYmUgYWNjZXNzZWQuCisJKG1hcmtfcmVnc19wYXQsIHN0cmFpZ2h0ZW5fc3RhY2spOiBOZXcgZnVuY3Rpb25zLgorCShyZWdfdG9fc3RhY2spOiBBbWVuZCBpbml0aWFsaXNhdGlvbiBvZiBGUF9tb2RlX3JlZy4KKwlNYXJrIEZQIHJlZ2lzdGVycyBtZW50aW9uZWQgaW4gVVNFIGluc25zIGJlZm9yZSBOT1RFX0lOU05fRlVOQ1RJT05fQkVHLgorCShnZXRfdHJ1ZV9yZWcpOiBFbGltaW5hdGUgRlAgc3VicmVnIGFjY2Vzc2VzIGluIGZhdm91ciBvZiB0aGUKKwlhY3R1YWwgRlAgcmVnaXN0ZXIgaW4gdXNlLgorCShyZWNvcmRfcmVnX2xpZmVfcGF0KTogTWFrZSBpdCB3b3JrIG9uIFNVQlJFR3MgYXMgd2VsbC4gIE1ha2UgdXNlIG9mCisJdGhlIG5ldyBtYXJrX3JlZ3NfcGF0IGZ1bmN0aW9uLiAgSGFuZGxlIFVTRSBpbnNucyBpZiBjYWxsZWQgdW5uZXN0ZWQuCisJKHJlY29yZF9yZWdfbGlmZSk6IERvbid0IGNoZWNrIGZvciBRSW1vZGUgYWdhaW4sIHdlIGtub3cgdGhhdCBpdAorCWlzIHRoZXJlLiAgUHJvY2VzcyBDQUxMX0lOU05zIGxpa2UgYWxsIG90aGVyIGluc25zLCB0aGV5IG1pZ2h0IGB1c2UnCisJc29tZSBGUCBhcmd1bWVudCByZWdpc3RlcnMgaWYgcmVnaXN0ZXIgcGFzc2luZy4KKwkoc3RhY2tfcmVzdWx0X3ApOiBDaGFuZ2VkIGluIHN0YWNrX3Jlc3VsdCBhbmQgcmV0dXJuaW5nIGFuIHJ0eC4KKwkoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBUYWtlIGEgbmV3IHN0YWNrZW50cnkgc3RhdGUgYXJndW1lbnQuCisJVXNlIHN0YWNrX3Jlc3VsdCBhbmQgdGhlIHJ0eCB0byBtYXJrIHVzaW5nIG1hcmtfcmVnc19wYXQuICBUaGlzIGVuc3VyZXMKKwl0aGF0IHR5cGVzIHRoYXQgbmVlZCBtdWx0aXBsZSBGUCByZWdpc3RlcnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorCURlbGV0ZSB0aGUgbm9fbGl2ZV9yZWdzIHNob3J0Y3V0IHRvIHNhdmUgc3BhY2UuCisJVXNlIHN0YWNrZW50cnkgc3RhdGUgdG8gZGV0ZXJtaW5lIGZpbGxlZCByZWdpc3RlcnMuCisJKHJlcGxhY2VfcmVnKTogQWNjZXB0IENPTVBMRVhfRkxPQVQgYXMgd2VsbC4KKwkobW92ZV9mb3Jfc3RhY2tfcmVnKTogT3B0aW1pc2UgYXdheSBzb21lIHBvaW50ZXIgZGVyZWZlcmVuY2luZy4KKwkoc3Vic3Rfc3RhY2tfcmVncyk6IE1ha2Ugc3VyZSB0aGUgc3RhY2sgaXMgaW4gdGhlIHJpZ2h0IG9yZGVyCisJYW5kIG9mIHRoZSByaWdodCBzaXplIGZvciByZWdpc3RlciBwYXNzaW5nLgorCShnb3RvX2Jsb2NrX3BhdCk6IE1ha2Ugc3VyZSB0aGUgc3RhY2sgaXMgaW4gdGhlIHJpZ2h0IG9yZGVyCisJdG8gcmV0dXJuIHBvc3NpYmxlIG11bHRpLXJlZ2lzdGVyIHZhbHVlcyBmcm9tIHRoZSBmdW5jdGlvbi4KKwkoY29udmVydF9yZWdzKTogRml4IGNvbW1lbnQgYWJvdXQgQ0FMTF9JTlNOLCBpdCdzIG5vIGxvbmdlciB2YWxpZC4KKwlNYWtlIHN1cmUgdGhlIHN0YWNrIGlzIG9mIHRoZSByaWdodCBzaXplIGFuZCBpbiB0aGUgcmlnaHQgb3JkZXIKKwl0byByZXR1cm4gcG9zc2libGUgbXVsdGktcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIGZ1bmN0aW9uLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBJZiBTVEFDS19SRUdTIGlzIGRlZmluZWQsIGdlbmVyYXRlIFVTRQorCWluc25zIGJlZm9yZSB0aGUgZnVuY3Rpb24gYm9keSwgdGh1cyBzaG93aW5nIHdoaWNoIHJlZ2lzdGVycyBhcmUgZmlsbGVkCisJd2l0aCBwYXJhbWV0ZXJzLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbl9hcHBseV9hcmdzKTogTGlrZXdpc2UuCisJUmV2ZXJzZSBvcmRlciBvZiBzYXZpbmcgcmVnaXN0ZXJzLCBtb3JlIGNvbXBhY3QgY29kZSBmb3IgaTM4Ny4KKwkoZXhwYW5kX2J1aWx0aW5fYXBwbHkpOiBMaWtld2lzZS4KKwkqIGVtaXQtcnRsLmMgKGdlbl9oaWdocGFydCk6IEFkZCBjb21tZW50IGFib3V0IGJyb2tlbiBpbXBsZW1lbnRhdGlvbi4KKwkqIGkzODYubWQgKHVudHlwZWRfY2FsbCk6IE1ha2UgaXQgcmV0dXJuIGEgY29tcGxleCBkb3VibGUuCisKKyAgICAgICAgKiBjLXBhcnNlLmluIChhdHRyaWIpOiBQZXJtaXQgbnVsbC1sZW5ndGggYXJndW1lbnQgbGlzdCB0byBhdHRyaWJ1dGVzLgorCisJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogVXNlIG5ldyBmdW5jdGlvbiBhdHRyaWJ1dGVfaW5fbGlzdCwKKwltYWtlcyBzdXJlIHR5cGVfYXR0cmlidXRlX3ZhcmlhbnRzIGFyZSByZXVzZWQgZXZlbiB3aGVuIGF0dHJpYnV0ZXMgaGF2ZQorCXBhcmFtZXRlcnMuCisJQXNzaWduIGFueSBuZXcgdHlwZSB0byBUUkVFX1RZUEUgKGRlY2wpLgorCShhdHRyaWJ1dGVfaW5fbGlzdCk6IE5ldyBmdW5jdGlvbi4KKwkoYXR0cmlidXRlX2xpc3RfY29udGFpbmVkKTogVXNlIGl0LgorCSogdHJlZS5oIChhdHRyaWJ1dGVfaW5fbGlzdCk6IE5ldyBkZWNsYXJhdGlvbi4KKworVHVlIEFwciAyNSAxODoyNTo1MyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGV4cHIuYyAoc3RydWN0IG1vdmVfYnlfcGllY2VzKTogQWRkIHRvX3N0cnVjdCBhbmQgZnJvbV9zdHJ1Y3QgZmllbGRzLgorCShtb3ZlX2J5X3BpZWNlcyk6IFNldCB0b19zdHJ1Y3QgYW5kIGZyb21fc3RydWN0IGZpZWxkcy4KKwkobW92ZV9ieV9waWVjZXNfMSk6IFNldCBNRU1fSU5fU1RSVUNUX1Agb2YgdG8xIGFuZCBmcm9tMS4KKwkoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fTUVNQ1BZKTogTmV3IHZhcmlhYmxlIHR5cGUuCisJU2V0IE1FTV9JTl9TVFJVQ1RfUCBvZiBzcmNfbWVtIGFuZCBkZXN0X21lbS4KKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogRGVsZXRlIGxpYmdjYzEtYXNtLmEuCisKKwkqIG02OGsvdnhtNjhrLmggKENQUF9TUEVDKTogRGVmaW5lLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCB0ZXN0IERFQ0xfRVhURVJOQUwgd2hlbiBkZWNpZGluZyB3aGV0aGVyCisJdG8gcmVnaXN0ZXIgYSBkdXBsaWNhdGUgZGVjbCBpbiB0aGUgY3VycmVudCBibG9jay4KKworCSogY3Jvc3M2NC5oIChJTklUX0VOVklST05NRU5UKTogRGVmaW5lIGFzIHN0cmluZyBub3QgcHV0ZW52IGNhbGwuCisJKiBnY2MuYyAobWFpbik6IFBhc3MgSU5JVF9FTlZJUk9OTUVOVCB0byBwdXRlbnYuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IFdoZW4gcmV0dXJuaW5nIEJMS21vZGUgc3RydWN0dXJlIGluCisJcmVnaXN0ZXJzLCBjb3B5IGl0IHRvIGEgcHN1ZWRvLXJlZyBpbnN0ZWFkIG9mIHRvIGhhcmQgcmVnaXN0ZXJzLgorCitUdWUgQXByIDI1IDE1OjE0OjU4IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRG9uJ3QgY3JlYXRlIGEgREYgYWRkcmVzcyB1c2luZyB0d28KKwlyZWdzIGlmIC1tc29mdC1mbG9hdCBvciAtbWNwdT00MDMuCisKK1R1ZSBBcHIgMjUgMTU6NDU6NDQgMTk5NSAgUmljaGFyZCBIZW5kZXJzb24gIChyaWNoYXJkQGF0aGVpc3QudGFtdS5lZHUpCisKKwkqIG02OGsubWQgKGRpdmhpMywgdWRpdmhpMywgbW9kaGkzLCB1bW9kaGkzKTogRGVsZXRlZAorCXRoZXNlIGluc25zIHBsdXMgc29tZSBzdXJyb3VuZGluZyB0cmFzaC4KKyAJKGRpdm1vZGhpNCwgdWRpdm1vZGhpNCk6IEFkZGVkIHRoZXNlIGluc25zLgorCitUdWUgQXByIDI1IDEwOjEyOjQwIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKGFscGhhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBSZWZpbmUgbGFzdCBjaGFuZ2UgdG8gd29yaworCWZvciBib3RoIHN0ZGFyZyBhbmQgdmFyYXJncy4KKworCSogdHJlZS5jIChjaGFpbl9tZW1iZXJfcHVycG9zZSk6IE1ha2Ugc2ltaWxhciB0byBjaGFpbl9tZW1iZXJfdmFsdWUuCisKKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IENoYW5nZSAicmVhbGNsZWFuIiB0byAibWFpbnRhaW5lci1jbGVhbiIuCisKKwkqIHByb3RvaXplLmM6IFJlbW92ZWQgX19OZXRCU0RfXyBmcm9tIGNvbmRpdGlvbmFsLgorCURlY2xhcmUgc3RyZXJyb3IgaWYgSEFWRV9TVFJFUlJPUiBpcyBkZWZpbmVkOyBvdGhlcndpc2UKKwlkZWNsYXJlIHN5c19lcnJsaXN0IGFuZCBzeXNfbmVyci4KKwkobXlfc3RyZXJyb3IpOiBOZXcgZnVuY3Rpb24uCisJKGVycm5vKTogRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZCBhcyBhIG1hY3JvLgorCisJKiBhbHBoYS5jIChjdXJyZW50X2ZpbGVfZnVuY3Rpb25fb3BlcmFuZCk6IFJldHVybiBmYWxzZSBpZiBwcm9maWxpbmcuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogRG9uJ3QgYWNjZXNzIGEgaGFyZCByZWcgaW4gYW4gaW52YWxpZAorCW1vZGUgd2hlbiBkb2luZyBhIHRydW5jYXRpb24uCisKKwkqIGFscGhhLmMgKGFkZF9vcGVyYW5kKTogVGVzdCBmb3IgZXhhY3RseSB0aGUgY29uc3RhbnRzIGFsbG93ZWQgYnkKKwl0aGUgY29uc3RyYWludHMuCisJKiBhbHBoYS5oIChDT05TVF9PS19GT1JfTEVUVEVSX1AsIGNhc2UgJ0wnKTogUmVqZWN0IDB4ODAwMDAwMDAuCisKKwkqIGMtcGFyc2UuaW4gKGluaXRkY2wsIG5vdHlwZV9pbml0ZGNsKTogUGFzcyBhdHRyaWJ1dGVzIHRvCisJc3RhcnRfZGVjbDsgZGVsZXRlIGNhbGwgdG8gZGVjbF9hdHRyaWJ1dGVzLgorCSogYy10cmVlLmggKHN0YXJ0X2RlY2wpOiBUd28gbmV3IHRyZWUgcGFyYW1ldGVycy4KKwkqIGMtZGVjbC5jIChzdGFydF9kZWNsKTogTmV3IGFyZ3MgZm9yIGF0dHJpYnV0ZXM7IGNhbGwgZGVjbF9hdHRyaWJ1dGVzLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgbG9vayBhdCBUWVBFX0FDVFVBTF9BUkdfVFlQRVMKKwlpZiBpdCBpcyBub3Qgc2V0LgorCisJKiB4bS0xNzUwYS5oOiBOZXcgZmlsZS4KKworCSogYWxwaGEuYyAoYWxwaGFfYnVpbHRpbl9zYXZlcmVncyk6IEFkZCB0byBpbmNvbWluZyBhcmdzIGFkZHIKKwlpZiBsZXNzIHRoYW4gNiBuYW1lZCBhcmdzLCBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvLgorCitNb24gQXByIDI0IDE1OjI1OjE5IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG1pcHMtdGZpbGUuYyAoZmF0YWwsIGVycm9yKTogTWFrZSBmaXJzdCBhcmcgY29uc3QgdG8gYXZvaWQgd2FybmluZy4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogV3JpdGUgYSBCQVJSSUVSIGFmdGVyIGNhbGwKKwl0byBhYm9ydCBpbiBub25sb2NhbCBoYW5kbGVyLgorCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsX2luaXQpOiBDYWxsIHByZXNlcnZlX3RlbXBfc2xvdHMgdG8ga2VlcAorCWFyb3VuZCBhbnkgdGVtcCB3aG9zZSBhZGRyZXNzIHdhcyB0YWtlbi4KKworRnJpIEFwciAyMSAxNjoyNjoxNSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYWRkZXIuY3lnbnVzLmNvbT4KKworCSogcGEubWQgKGNhbGxfaW50ZXJuYWxfcmVnKTogRml4IHR5cG9zIGluIGxlbmd0aCBjYWxjdWxhdGlvbi4KKwkoY2FsbF92YWx1ZV9pbnRlcm5hbF9yZWcpOiBMaWtld2lzZS4KKworRnJpIEFwciAyMSAxMzoxNzoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvZ251LmggKFNUQU5EQVJEX0lOQ0xVREVfRElSKTogTmV3IG1hY3JvLgorCSogY29uZmlnL21pcHMvZ251LmggKFNUQU5EQVJEX0lOQ0xVREVfRElSKTogTWFjcm8gbW92ZWQgdGhlcmUuCisKK0ZyaSBBcHIgMjEgMDg6MjM6NTggMTk5NSAgVG9tIFF1aWdnbGUgIChxdWlnZ2xlQGxvdmVsYWNlLmVuZ3Iuc2dpLmNvbSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCAtSSBmb3IgR05BVC4KKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLUkgdG8gZ25hdDEuCisKK0ZyaSBBcHIgMjEgMDc6NTg6MDYgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jIChpbnRlZ2VyX2FsbF9vbmVzcCk6IFRlc3QgdG8gc2l6ZSBvZiBtb2RlLCBub3QgVFlQRV9QUkVDSVNJT04uCisKKwkqIHRvcGxldi5jIChtYWluKTogVHVybiBvbiAtZmZvcmNlLW1lbSBmb3IgLU8yLgorCisJKiBmb2xkLWNvbnN0LmMgKFtscl1yb3RhdGVfZG91YmxlKTogUmVwbGFjZTsgb2xkIHZlcnNpb25zIHdlcmUgYm9ndXMuCisJKGZvbGQsIHNoaWZ0IGFuZCByb3RhdGUpOiBEb24ndCBjYWxsIHRyZWVfaW50X2NzdF9zZ24gb24gbm9uLWludGVnZXIuCisJKGZvbGQsIGNhc2UgTFJPVEFURV9FWFBSKTogSWYgY29uc3RhbnQgY291bnQsIGNvbnZlcnQgdG8gUlJPVEFURV9FWFBSLgorCShmb2xkLCBjYXNlIFJST1RBVEVfRVhQUik6IFNvbWV0aW1lcyBjb21tdXRlIGxvZ2ljYWwgb3Agd2l0aCByb3RhdGUuCisJRGVsZXRlIHBhaXIgb2YgY291bnRlcmFjdGluZyBzaGlmdHMuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfbG9naWNhbCwgY2FzZSBBTkQpOiBJZiBzdGlsbCBhbiBBTkQsIGdldAorCW5ldyB2YWx1ZXMgZm9yIG9wMCBhbmQgb3AxLgorCitUaHUgQXByIDIwIDE3OjUyOjEwIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogc2guYzogQ29tcGxldGVseSByZXdyaXR0ZW4uCisJKiBzaC5oIChGQVNUX0JJVCwgQ09OU1RMRU5fMl9CSVQsIENPTlNUTEVOXzNfQklULCBDT05TVExFTl8wX0JJVCwKKwlUQVJHRVRfRkFTVENPREUsIFRBUkdFVF9DTEVOMywgVEFSR0VUX0NMRU4wLCBUQVJHRVRfT1BUSU9OUyk6IERlbGV0ZS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogRGVsZXRlIC1tY2xlbjMgYW5kIC1tY2xlbjAgb3B0aW9ucy4KKwkoVEFSR0VUX0RFRkFVTFQpOiBJcyB6ZXJvLgorCShPVkVSUklERV9PUFRJT05TKTogRGVsZXRlIGNvZGUgdG8gc2V0IG1heF9jb3VudF9zaSBhbmQgbWF4X2NvdW50X2hpLgorCShTUEVDSUFMX1JFRyk6IE5ldyBtYWNyby4KKwkoSEFSRF9SRUdOT19NT0RFX09LKTogQWxsb3cgYW55IG1vZGUgaW4gYW55IGdlbmVyYWwgcmVnaXN0ZXIuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERlbGV0ZSBjb25zdGFudCArIHJlZyBhZGRyZXNzIGNhc2UuCisJKE1PVkVfUkFUSU8pOiBEZWZpbmUgdG8gMiB3aGVuIFRBUkdFVF9TTUFMTENPREUuCisJKG1heF9zaSwgbWF4X2hpLCBtYXhfY291bnRfc2ksIG1heF9jb3VudF9oaSk6IERlbGV0ZS4KKwkqIHNoLm1kOiBEZWxldGUgc3B1cmlvdXMgY29uc3RyYWludHMgZnJvbSBhbGwgZGVmaW5lX2V4cGFuZHMuCisJKHJvdGxzaTNfMSk6IFNldCBUIHJlZyBpbnN0ZWFkIG9mIGNsb2JiZXJpbmcgaXQuCisJKGFzaHJzaTMpOiBVc2UgZXhwYW5kX2FzaGlmdHJ0IGluc3RlYWQgb2YgZ2VuX3NoaWZ0eV9vcC4KKwkobW92c2lfaSwgbW92aGlfaSwgbW92c2ZfaSk6IEFkZCBjb25kaXRpb25zIHRvIHJlamVjdCBwYXR0ZXJucworCW5lZWRpbmcgYSByZWxvYWQuCisJKG1vdmRpLTIsIG1vdmRmX2spOiBDb3JyZWN0IGNvbmRpdGlvbnMgdG8gcmVqZWN0IHBhdHRlcm5zIG5lZWRpbmcKKwlhIHJlbG9hZC4KKwkoW2ludmVyc2VfXWJyYW5jaF97dHJ1ZSxmYWxzZX0pOiBQYXNzIG9wZXJhbmRzIHRvIG91dHB1dF9icmFuY2guCisJKGp1bXApOiBEZWxldGUgdW5uZWNlc3NhcnkgYnJhY2VzLgorCShjYWxsLCBjYWxsX3ZhbHVlKTogRG9uJ3QgdXNlIGV4cGFuZF9hY2FsbC4gIEZvcmNlIG9wZXJhbmQwIGludG8KKwlhIHJlZ2lzdGVyLgorCitUaHUgQXByIDIwIDEyOjU3OjE2IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBVc2UgVFJFRV9BRERSRVNTQUJMRSByYXRoZXIgdGhhbgorICAgICAgICBUWVBFX05FRURTX0NPTlNUUlVDVElORyB0byBkZWNpZGUgd2hldGhlciBhIHBhcmFtZXRlciBuZWVkcyB0byBiZQorICAgICAgICBwYXNzZWQgYnkgaW52aXNpYmxlIHJlZmVyZW5jZS4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEaXR0by4gIEFib3J0IGlmIHdlIHRyeSB0byBwcmUtZXZhbHVhdGUgYQorICAgICAgICBwYXJhbWV0ZXIgb2YgVFJFRV9BRERSRVNTQUJMRSB0eXBlLgorCitXZWQgQXByIDE5IDE3OjUwOjI0IDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBjeWdudXMuY29tPgorCisJKiBwYS5oIChUQVJHRVRfU1dJVENIRVMpOiBGaXggdHlwby4KKworVHVlIEFwciAxOCAxODowNjowMyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6ICBVc2UgQllURVNfQklHX0VORElBTiByYXRoZXIKKwl0aGFuIEJJVFNfQklHX0VORElBTiB0byBsYXlvdXQgYml0cyB3aXRoaW4gYml0c3RyaW5nLgorCSogdHJlZS5jIChnZXRfc2V0X2NvbnN0cnVjdG9yX2J5dGVzKTogIExpa2V3aXNlLgorCitUdWUgQXByIDE4IDE3OjIyOjQ2IDE5OTUgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrL3t4LWhwMzIwLHgtaHAzMjBnfSAoRklYUFJPVE9fREVGSU5FUyk6CisJRGVmaW5lIF9IUFVYX1NPVVJDRSBzbyBwdXRlbnYgYW5kIG90aGVyIGZ1bmN0aW9ucyBnZXQgc2Vlbi4KKworVHVlIEFwciAxOCAwMzo1NzozNSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogdmFyYXNtLmMgKHdlYWtfZGVjbHMpOiBNYWtlIHRoaXMgYSB1bmlxdWUgc3RydWN0dXJlLCBpbnN0ZWFkIG9mCisJYSB0cmVlIHN0cnVjdHVyZS4KKwkoaGFuZGxlX3ByYWdtYV93ZWFrKTogRG9uJ3QgcmVkZWNsYXJlIGFzbV9vdXRfZmlsZS4gIFVzZSBuZXcgd2VhaworCXN0cnVjdHVyZSB0byBjb3B5IG5hbWUgYW5kIHZhbHVlIHRvLiAgUHJvdGVjdCBuYW1lIGFuZCB2YWx1ZSBieQorCWNvcHlpbmcgdGhlbSB0byB0aGUgcGVybWFuZW50IG9ic3RhY2suCisJKGRlY2xhcmVfd2Vhayk6IENhbGwgaGFuZGxlX3ByYWdtYV93ZWFrLCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nCisJdGhlIGNvZGUuCisJKGZpbmlzaF93ZWFrKTogUmV3cml0ZSB0byB1c2UgbmV3IHdlYWsgc3ltYm9scyBsaXN0IHN0cnVjdHVyZS4KKworCSogYy1wcmFnbWEuaDogTmV3IGZpbGUgdG8gZGVmaW5lIHRoZSBjLXByYWdtYS5jIGludGVyZmFjZXMuCisJKiBjLXByYWdtYS5jOiBJbmNsdWRlIGl0LgorCSogdmFyYXNtLmM6IEluY2x1ZGUgaXQuCisJKiBjLWxleC5jOiBJbmNsdWRlIGl0LgorCSogY3AvbGV4LmM6IEluY2x1ZGUgaXQuCisKKwkqIHZhcmFzbS5jIChoYW5kbGVfcHJhZ21hX3dlYWspOiBObyBsb25nZXIgcGFzcyBvdXRwdXQgZmlsZQorCXN0cmVhbSwgc2luY2Ugd2VhayBwcmFnbWFzIGFyZSBkZWxheWVkIHVudGlsIHRoZSBlbmQgb2YgdGhlCisJY29tcGlsYXRpb24uCisJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogQ2FsbCBoYW5kbGVfcHJhZ21hX3dlYWsKKwl3aXRob3V0IGZpbGUgc3RyZWFtIGFyZ3VtZW50LgorCisJKiBNYWtlZmlsZS5pbiAodmFyYXNtLm8sIGMtbGV4Lm8sIGMtcHJhZ21hLm8pOiBBZGQgZGVwZW5kZW5jaWVzIG9uCisJYy1wcmFnbWEuaC4KKworCSogY29uZmlnL3JzNjAwMC5tZCAobW92ZGYpOiBJZiAtbXNvZnQtZmxvYXQsIGRvIG5vdCBnZW5lcmF0ZQorCW1lbW9yeSB0byBtZW1vcnkgcmVmZXJlbmNlcywgbGlrZSBpcyBhbHJlYWR5IGRvbmUgZm9yIHRoZQorCS1taGFyZC1mbG9hdCBjYXNlLiAgUmVtb3ZlIGFuIGV4dHJhIHRlc3QgZm9yIC1taGFyZC1mbG9hdCBpbnNpZGUKKwlvZiAtbWhhcmQtZmxvYXQgY29kZS4KKworVHVlIEFwciAxOCAwNjoxOTo1MCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKHNpemVfaW50KTogQXJnIGlzIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQuCisJKiB0cmVlLmggKHNpemVfaW50KTogTGlrZXdpc2UuCisKK01vbiBBcHIgMTcgMjM6MzY6NTcgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9haXg0MS5oOiBSZXN0b3JlIE1hcmNoIDExdGggY2hhbmdlcywgcGx1cworICAgICAgICAoQVNNX09VVFBVVF9FWFRFUk5BTCk6IERvIGFkZCBbRFNdIG9yIFtSV10sIGp1c3QgZG9uJ3QgZW1pdAorICAgICAgICBhbnl0aGluZy4KKwkqIHJzNjAwMC9haXgzbmV3YXMuaCAoQVNNX09VVFBVVF9FWFRFUk5BTCk6IERpdHRvLgorCitNb24gQXByIDE3IDE1OjU4OjUyIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBjb25maWcvbWlwcy94LWlyaXMgKEZJWFBST1RPX0RFRklORVMpOiAgQWRkIC1EX0xBTkdVQUdFX0NfUExVU19QTFVTLgorCSogY29uZmlnL21pcHMveC1pcmlzNjogIExpa2V3aXNlLgorCisJKiBjcHBsaWIuYzogIFJlbmFtZSAgbWFrZV9kZWZpbml0aW9uIHRvIGNwcF9kZWZpbmUuCisJKiBjcHBsaWIuaCAoY3BwX2RlZmluZSk6ICBOZXcgZGVjbGFyYXRpb24uCisKKwkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6ICBGb3IgVF9TUEVDTElORSwgY2FsY3VsYXRlIF9fTElORV9fCisJaW4gZW5jbG9zaW5nIGZpbGUgYnVmZmVyLCBub3QgY3VycmVudCBidWZmZXIgKGlmIG1hY3JvIGV4cGFuZGluZykuCisJKGNwcF9nZXRfdG9rZW4pOiAgRml4IHRoaW5rbyAoaW4gY29kZSBmb3IgY2hvcHBpbmcgdW5uZWVkZWQgc3BhY2UpLgorCitNb24gQXByIDE3IDExOjM2OjA3IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogYWJpNjQuaCAoQ1BQX1NQRUNTKTogRGVmaW5lIGFuZCB1c2UgX0FCSTY0IGluc3RlYWQgb2YKKwlfTUlQU19TSU1fQUJJNjQuCisJKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBTZXQgTUVNX0lOX1NUUlVDVF9QIGlmIGJpZyBlbmRpYW4gdGFyZ2V0LgorCSogaXJpczYuaCAoQVNNX0lERU5USUZZX0dDQywgQVNNX0lERU5USUZZX0xBTkdVQUdFKTogRGVmaW5lLgorCisJKiBjb21iaW5lLmMgKGdldF9sYXN0X3ZhbHVlKTogSWdub3JlIEJBUlJJRVIgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMuCisJKG1vdmVfZGVhdGhzKTogTmV3IHZhcmlhYmxlcyBiZWZvcmVfZGVhZCBhbmQgYWZ0ZXJfZGVhZC4gIFNldCB0aGVtCisJdG8gaW5zdHJ1Y3Rpb25zIHRoYXQgaGF2ZSB2YWxpZCBJTlNOX0NVSUQgdmFsdWVzIGFuZCB1c2UgaW4gdGVzdC4KKworCSogY29tYmluZS5jIChzdWJzdF9wcmV2X2luc24pOiBOZXcgdmFyaWFibGUuCisJKHRyeV9jb21iaW5lKTogU2V0IGl0LgorCShnZXRfbGFzdF92YWx1ZSk6IFVzZSBpdC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFJlY29tcHV0ZSByZWdfZXF1aXZfYWRkcmVzcyBmcm9tCisJcmVnX2VxdWl2X21lbW9yeV9sb2MgYmVmb3JlIHVzaW5nIGl0LgorCShmaW5kX3JlbG9hZHNfdG9wbGV2LCBtYWtlX21lbWxvYyk6IExpa2V3aXNlLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX01FTUNQWSk6IENhbGwgZm9yY2Vfb3BlcmFuZAorCW9uIGRlc3RfcnR4IGJlZm9yZSByZXR1cm5pbmcgaXQuCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzKTogVXNlIHRlbXBvcmFyeSBhbGxvY2F0aW9uIGlmCisJREVDTF9ERUZFUl9PVVRQVVQgaXMgc2V0LgorCitTYXQgQXByIDE1IDIzOjE5OjAzIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBhb3V0b3MuaCAoQVNNX09VVFBVVF9ERUYpOiBEZWZpbmUgaW5zdGVhZCBvZiBTRVRfQVNNX09QLgorCSogc3BhcmMvc3Vub3M0LmggKEFTTV9PVVRQVVRfREVGKTogRGl0dG8uCisKKwkqIHZhcmFzbS5jICh3ZWFrX2ZpbmlzaCk6IERvbid0IGhhbmRsZSBhbGlhc2VzLgorCShkZWNsYXJlX3dlYWspOiBEaXR0by4KKwkoYXNzZW1ibGVfYWxpYXMpOiBIYW5kbGUgYWxpYXNlcy4KKworCSogYy1jb21tb24uYyAoZW51bSBhdHRycyk6IEFkZCBBX0FMSUFTLgorCShpbml0X2F0dHJpYnV0ZXMpOiBEaXR0by4KKwkoZGVjbF9hdHRyaWJ1dGVzKTogRGl0dG8uCisKK1NhdCBBcHIgMTUgMTM6MjY6MzQgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBDYWxsIHByZXNlcnZlX3RlbXBfc2xvdHMgb24gdGVtcHMKKwltYWRlIGZvciBCTEttb2RlIGFyZ3MgcmV0dXJuZWQgaW4gcmVnaXN0ZXJzLgorCisJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogRml4IHR5cG8uCisKK1NhdCBBcHIgMTUgMTI6MTE6NDYgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KKworCSogYWxwaGEvYWxwaGEuYyAob3V0cHV0X2VwaWxvZyk6IEluaXRpYWxpemUgZnBfb2Zmc2V0IHRvIDAsIGFuZAorCW1ha2Ugc3VyZSBpdCdzIG5vbi16ZXJvIGJlZm9yZSB3ZSB0cnkgdG8gdXNlIGl0IHRvIHJlc3RvcmUgdGhlCisJZnJhbWUgcG9pbnRlci4KKworRnJpIEFwciAxNCAxOTo0NTowNSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZ2luY2x1ZGUvdmEte2NsaXBwZXIscGEscHlyLHNwYXJjLHNwdXJ9LmggKHZhX2FyZyk6IFJlb3JnYW5pemUKKyAgICAgICAgdG8gYXZvaWQgQklORF9FWFBScyBhbmQgQ09ORF9FWFBScyBvZiBhZ2dyZWdhdGUgdHlwZS4KKworRnJpIEFwciAxNCAxOTozMToxNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvc3ZyNC5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IE1ha2UgdGhlIHNlY3Rpb24KKyAJcmVhZC1vbmx5IGV4ZWN1dGFibGUgImF4IiBpZiBERUNMIGlzIGEgRlVOQ1RJT05fREVDTDsgcmVhZC1vbmx5CisgCSJhIiAocHJldmlvdXNseSB0aGUgY2FzZSBhbHdheXMpIGlmIERFQ0wgaXMgVFJFRV9SRUFET05MWTsKKyAJb3RoZXJ3aXNlIHdyaXRhYmxlICJhdyIuCisKK0ZyaSBBcHIgMTQgMTg6NDk6MTEgMTk5NSAgTGludXMgVG9ydmFsZHMgIDxMaW51cy5Ub3J2YWxkc0Bjcy5IZWxzaW5raS5GST4KKworCSogYWxwaGEubWQgKHByb2JlX3N0YWNrKTogUHJvYmUgd2l0aCB3cml0ZSwgbm90IHJlYWQuCisJKGFsbG9jYXRlX3N0YWNrKTogVXBkYXRlIGFuZCBjb3JyZWN0IHN0YWNrIHByb2JlIGNvZGUuCisJKiBhbHBoYS5jIChvdXRwdXRfcHJvbG9nKTogQ2hhbmdlZCBzdGFjayBwcm9iZSBhdCBmdW5jdGlvbiBlbnRyeS4KKworRnJpIEFwciAxNCAxODo0MjozNCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGRlbGV0ZV9pbnNuKTogV2hlbiBkZWxldGluZyBhZnRlciBsYWJlbCwgZGVsZXRlCisJYSBCQVJSSUVSIGFzIHdlbGwuCisKK0ZyaSBBcHIgMTQgMTQ6NDA6NDggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIHdlYWtfZmluaXNoLgorCisJKiBjLWNvbW1vbi5jIChlbnVtIGF0dHJzKTogQWRkIEFfV0VBSy4KKwkoaW5pdF9hdHRyaWJ1dGVzKTogRGl0dG8uCisJKGRlY2xfYXR0cmlidXRlcyk6IFN1cHBvcnQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBieQorICAgICAgICBjYWxsaW5nIGRlY2xhcmVfd2Vhay4KKworCSogc3BhcmMvc3Vub3M0LmggKEhBTkRMRV9QUkFHTUFfV0VBSywgV0VBS19BU01fT1AsIFNFVF9BU01fT1ApOgorICAgICAgICBEZWZpbmUgdG8gc3VwcG9ydCB3ZWFrIHN5bWJvbHMgd2l0aCAtZmdudS1saW5rZXIuCisJKiBhb3V0b3MuaDogRGl0dG8uCisKKwkqIHZhcmFzbS5jIChoYW5kbGVfcHJhZ21hX3dlYWspOiBBZGQgZGVjbGFyZWQgd2VhayBzeW1ib2xzIHRvCisgICAgICAgIHdlYWtfZGVjbHMgcmF0aGVyIHRoYW4gZW1pdHRpbmcgdGhlbSBpbW1lZGlhdGVseS4KKwkoZGVjbGFyZV93ZWFrKTogQWRkIHRoZSBpbmRpY2F0ZWQgZGVjbGFyYXRpb24gdG8gd2Vha19kZWNscy4KKwkod2Vha19maW5pc2gpOiBFbWl0IC53ZWFrIGRpcmVjdGl2ZXMgZm9yIGFueSB3ZWFrIHN5bWJvbHMuCisKKwkqIGxpYmdjYzIuYzogVGhlIEMrKyBmcmVlLXN0b3JlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSB3ZWFrLgorCitGcmkgQXByIDE0IDEzOjAwOjI5IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBjeWdudXMuY29tKQorCisJKiByczYwMDAvcnM2MDAwLmMgKG91dHB1dF9wcm9sb2cpOiBGb3IgZWFiaSBzeXN0ZW1zLCBlbWl0IG1haW4ncworCWNhbGwgdG8gX19lYWJpIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBtaW5pbWFsIFRPQyB1c2VkIHdpdGggdGhlCisJLW1yZWxvY2F0YWJsZSBzdXBwb3J0LgorCisJKiByczYwMDAvZWFiaS5oIChJTlZPS0VfX21haW4pOiBEb24ndCBkZWZpbmUgYW55IG1vcmUsCisJb3V0cHV0X3Byb2xvZyB3aWxsIGVtaXQgdGhlIGNhbGwuCisKK0ZyaSBBcHIgMTQgMDk6MDk6MDMgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAoY2FsbF9vcGVyYW5kKTogQW55IHJlZyBpcyB2YWxpZCBmb3IgTlQuCisJKG91dHB1dF9wcm9sb2d1ZSk6IE5ldmVyIG5lZWQgR1AgZm9yIFdpbmRvd3MvTlQuCisJU2V0IFNZTUJPTF9SRUZfRkxBRyBpbiBjdXJyZW50IGZ1bmN0aW9uIGRlY2wuCisKK1RodSBBcHIgMTMgMjA6MTk6MzAgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGFscGhhL3htLWFscGhhLmggKEhBVkVfVlBSSU5URik6IERlZmluZS4KKwkoSEFWRV9QVVRFTlYpOiBEZWZpbmUuCisJKFBPU0lYKTogRGVmaW5lLgorCitUaHUgQXByIDEzIDE5OjU3OjQ0IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogZW1pdC1ydGwuYyAoZ2VuX3NlcXVlbmNlKTogSWYgdGhlIGluc24gaGFzIGEgbm9uLW51bGwKKwlDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UgZmllbGQsIG91dHB1dCBpdCBhcyBhIHNlcXVlbmNlIHNvIHRoZQorCWxhdHRlciBpc24ndCBkaXNjYXJkZWQuCisKKwkqIGMtcGFyc2UuaW46IFVwZGF0ZSBleHBlY3RlZCBjb25mbGljdCBjb3VudC4KKworVGh1IEFwciAxMyAwODoxMDoyMCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUuYmF0OiBBcmcgMiBpcyB3aGljaCBtYWNoaW5lIChpMzg2IG9yIGFscGhhKS4KKwkqIGNvbmZpZ3VyZSAoYWxwaGEtKi13aW5udDMqKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBhbHBoYS5jOiBEb24ndCAjaW5jbHVkZSBzdGFtcC5oIGZvciBXSU5OVC4KKwkoaW5wdXRfb3BlcmFuZCwgY2FzZSBDT05TVCk6IEFsbG93IHB0cl9tb2RlIGFuZCBESW1vZGUuCisJKiBhbHBoYS5oIChXSU5ET1dTX05UKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCisJKEFTTV9PVVRQVVRfSU5UKTogVXNlIG91dHB1dF9hZGRyX2NvbnN0LgorCShBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBVc2UgLmxvbmcgZm9yIE5ULgorCSogYWxwaGEubWQgKGNhbGxsLCB0YWJsZWp1bXAsIG1vdnNpKTogTmV3IHZhcmlhbnRzIGZvciBOVC4KKwkqIGFscGhhL3dpbm50LmgsIGFscGhhL3htLXdpbm50LmgsIGFscGhhL3gtd2lubnQ6IE5ldyBmaWxlcy4KKwkqIGFscGhhL2NvbmZpZy1udC5iYXQsIGFscGhhL2NvbmZpZy1udC5zZWQ6IE5ldyBmaWxlcy4KKwkqIGkzODYvY29uZmlnLW50LmJhdDogQWRkIEFkYSBmcmFnbWVudHMgdG8gTWFrZWZpbGUuCisJKiBpMzg2L2NvbmZpZy1udC5zZWQ6IEFkanVzdCBmb3IgZGVsZXRpb24gb2YgY29uZmlnLnJ1biBpbiBNYWtlZmlsZS5pbgorCUNoYW5nZSB2ZXJzaW9uIHRvIDIuNi4zLgorCUFkZCBzb21lIG1pc3NpbmcgdGFicy4KKwkqIHdpbm50L3dpbm50LmggKFRBUkdFVF9NRU1fRlVOQ1RJT05TKTogRGVmaW5lLgorCShMSU5LX1NQRUMpOiBEZWxldGUgImFsaWduOjB4MTAwMCIuCisJKiB3aW5udC94bS13aW5udC5oIChPQkpFQ1RfU1VGRklYKTogRGVmaW5lLgorCSogZ2luY2x1ZGUvc3RkYXJnLmgsIGdpbmNsdWRlL3ZhcmFyZ3MuaDogQ2xlYW4gdXAgY29kZSB0aGF0CisJZGVmaW5lcyAqREVGSU5FRCogc3ltYm9scy4KKworCSogY29uZmlndXJlIChhMjlrLSotc3ltMSopOiBTYW1lIGFzIGEyOWstKi1ic2QqLgorCSogYTI5ay5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IE5ldyBtYWNyby4KKworV2VkIEFwciAxMiAxNDozNjowMyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9maWVsZHMpOiBDb3JyZWN0IGFyZ3VtZW50cyB0byBDSEFSUyBtYWNybworCWluIGZsYWdfbWluaW1hbF9kZWJ1ZyBjYXNlLgorCShkYnhvdXRfc3ltYm9sX25hbWUpOiBVc2UgREVDTF9BU1NFTUJMRVJfTkFNRSB1bmNvbmRpdGlvbmFsbHkuCisJKiBzZGJvdXQuYyAoc2Rib3V0X3JlY29yZF90eXBlX25hbWUpOiBDb3JyZWN0IGluZGVudGF0aW9uLgorCShzZGJvdXRfc3ltYm9sKTogVXNlIERFQ0xfQVNTRU1CTEVSX05BTUUgdW5jb25kaXRpb25hbGx5LgorCShzZGJvdXRfb25lX3R5cGUpOiBMaWtld2lzZS4KKworVHVlIEFwciAxMSAxMzoyNDoxMyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogZml4LWhlYWRlci5jIChtYWluKTogIEZpeCBsb29wIG92ZXIgcmVxdWlyZWRfZnVuY3Rpb25zX2xpc3QuCisJKGZhdGFsKTogIEFsc28gcHJpbnQgaW5jX2ZpbGVuYW1lLgorCisJKiBjcHBsaWIuYyAoY3BwX3B1c2hfYnVmZmVyKTogIEFkZGVkIG1pc3NpbmcgaW5pdGlhbGl6YXR1b24gb2YgYnVmLgorCShjcHBfZmlsZV9idWZmZXIpOiAgQ29tcGFyZSBhZ2FpbnN0IENQUF9OVUxMX0JVRkZFUiwgbm90IE5VTEwuCisJKGZpbmNsdWRlKTogIE5vIGxvbmdlciBjYWxsIGNwcF9wdXNoX2J1ZmZlciAtIGxldCBjYWxsZXJzIGRvIGl0LgorCShkb19pbmNsdWRlKTogIEFkZCBjYWxsIHRvIGNwcF9wdXNoX2J1ZmZlci4KKwkocHVzaF9wYXJzZV9maWxlKTogIENhbGwgY3BwX3B1c2hfYnVmZmVyIGVhcmx5LCBzbyBpbml0aWFsCisJZGVmaW5lcyBjYW4gdXNlIGZpbGUgYW5kIGxpbmUgZnJvbSBhIHZhbGlkIGNwcF9idWZmZXIuCisJKG5yZXZlcnNlX3BlbmRpbmcpOiAgTmV3IGZ1bmN0aW9uLgorCShwdXNoX3BhcnNlX2ZpbGUpOiAgVXNlIG5yZXZlcnNlX3BlbmRpbmcuCisJKHB1c2hfcGFyc2VfZmlsZSk6ICBGb3IgLWluY2x1ZGUgZmlsZXMsIGp1c3QgcHVzaCB0aGVtIGluIHJldmVyc2UKKwlvcmRlciAtIHdlIGRvbid0IG5lZWQgdG8gc2NhbiB0aGVtIG5vdy4KKwkoY3BwX2Vycm9yX2Zyb21fZXJybm8sIGNwcF9wZXJyb3Jfd2l0aF9uYW1lKTogIERvbid0IGVtaXQgZXh0cmEgJ1xuJy4KKworVHVlIEFwciAxMSAxMzozNjo0NCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAobWlwcy1kZWMtbWFjaDMpOiBBZGQuCisKKwkqIHNoLmMgKHNoaWZ0Ynlfb3BlcmFuZCk6IERlbGV0ZS4KKwkqIHNoLmggKFRBUkdFVF9TV0lUQ0hFUyk6IC1tMyBhbmQgLW0zbCBhbHNvIHNldCBTSDJfQklULgorCShPVkVSUklERV9PUFRJT05TKTogRG9uJ3QgYWRkIENQVV9TSDIgdG8gQ1BVX1NIMyB3aGVuIFRBUkdFVF9TSDMuCisJKiBzaC5tZCAoYXNobHNpMyk6IFVzZSBub25tZW1vcnlfb3BlcmFuZCBhcyBhIHByZWRpY2F0ZSBpbnN0ZWFkIG9mCisJc2hpZnRieV9vcGVyYW5kLiAgRG9uJ3QgdXNlIHNoaWZ0Ynlfb3BlcmFuZCBpbiB0aGUgb3V0cHV0IHN0YXRlbWVudC4KKwkobHNocnNpMyk6IExpa2V3aXNlLgorCisJKiBjLWRlY2wuYyAocG9wbGV2ZWwpOiBEbyBvdXRwdXQgaW5saW5lIGZ1bmN0aW9uIGlmCisJREVDTF9BQlNUUkFDVF9PUklHSU4gcG9pbnRzIHRvIGl0c2VsZi4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IENhc3QgYXNzZW1ibGVfc3RyaW5nIGFyZ3VtZW50IHRvIGNoYXIgKi4KKworTW9uIEFwciAxMCAxNDoyOToyOCAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYWRkZXIuY3lnbnVzLmNvbT4KKworCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdFJyk6IE1ha2UgdGhpcyB3b3JrIGxpa2UKKwljb25zdHJhaW50IGNoYXJhY3RlciBgRicgd2hlbiBSRUFMX0FSSVRITUVUSUMgaXMgZGVmaW5lZC4KKwkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3NlcywgY2FzZSAnRScpOiBMaWtld2lzZS4KKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMsIGNhc2UgJ0UnKTogTGlrZXdpc2UuCisKK01vbiBBcHIgMTAgMTQ6MzA6MzEgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9haXgzbmV3YXMuaCwgcnM2MDAwL2FpeDQxLmg6IEVsaW1pbmF0ZSBNYXJjaCAxMXRoIGNoYW5nZXMKKwl0byB1bmRlZmluZSBBU01fT1VUUFVUX0VYVEVSTkFMeyxfTElCQ0FMTH0sIHNpbmNlIHRoaXMgY2F1c2VzIHRoZQorCWNvbXBpbGVyIG5vdCB0byBib290c3RyYXAuCisKK01vbiBBcHIgMTAgMDc6MTc6MzkgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3BwYWxsb2MuYzogI2luY2x1ZGUgY29uZmlnLmguCisJKiBjcHBleHAuYzogQWRkIGRlY2xhcmF0aW9ucyBvZiB4bWFsbG9jIGFuZCB4cmVhbGxvYy4KKwkoY3BwX3BhcnNlX2V4cHIpOiBDYXN0IGFyZ3MgdG8gYmNvcHkgdG8gY2hhciAqLgorCSogY3BwaGFzaC5jOiBBZGQgZGVjbGFyYXRpb24gb2YgeG1hbGxvYy4KKwkqIGNwcGxpYi5jIChpbml0X3BhcnNlX29wdGlvbnMsIGNwcF9yZWFkZXIpOiBDYXN0IGFyZ3MgdG8gYmNvcHksCisJYmNtcCwgYW5kIGJ6ZXJvIHRvIGNoYXIgKi4KKwkoYWRkX2ltcG9ydCwgcHVzaF9wYXJzZV9maWxlLCBpbml0X3BhcnNlX2ZpbGUpOiBMaWtld2lzZS4KKworCSogYy1jb21tb24uYyAoZW51bSBhdHRycyk6IE5ldyBhdHRyaWJ1dGUsIEFfTk9DT01NT04uCisJKGluaXRfYXR0cmlidXRlKTogSW5pdGlhbGl6ZSBpdC4KKwkoZGVjbF9hdHRyaWJ1dGVzKTogSW1wbGVtZW50IGl0LgorCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwpOiBBbGxvdyBzZWN0aW9uIGF0dHJpYnV0ZSBpZiAtZm5vLWNvbW1vbgorCW9yIHZhcmlhYmxlIGlzIG5vdCB0byBiZSBwbGFjZWQgaW4gY29tbW9uIGZvciBzb21lIG90aGVyIHJlYXNvbi4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9zZXQpOiBEb24ndCBtb3ZlIGEgU1VCUkVHIHRvIGRlc3QgaWYgaXQKKwlpcyBjaGFuZ2luZyB0aGUgc2l6ZSBvZiBhIGhhcmQgcmVnIGluIENMQVNTX0NBTk5PVF9DSEFOR0VfU0laRS4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogSWYgZ29hbCBpcyBhIHBzZXVkbyB0aGF0IGdvdCBtZW1vcnksCisJYSBzdG9yZSBpbnRvIG1lbW9yeSBtYWtlcyBpdCBpbnZhbGlkLgorCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogQ2FsbCBmb3JnZXRfb2xkX3JlbG9hZHNfMSBvbgorCXBhdHRlcm4gYmVmb3JlIHJlZyBlbGltaW5hdGlvbi4KKworTW9uIEFwciAxMCAwMDoyNjoxNCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEuYyAocGFfcmVvcmcpOiBCdW1wIGxhYmVsIHVzZSBjb3VudCBmb3IgZWFjaCBlbnRyeSBpbiBhbgorCWV4cGxvZGVkIEFERFJfVkVDLgorCitTdW4gQXByICA5IDA5OjIyOjUxIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGkzODYubWQgKGFkZGRpMywgc3ViZGkzKTogTmVlZCBzY3JhdGNoIHJlZyB3aGVuZXZlciBvcGVyYW5kIDAgaW4KKwltZW0gYW5kIG9wZXJhbmRzIDEgbm90ICcwJy4KKwkoc3ViZGkzKTogRG9uJ3QgdHJlYXQgdHdvIG5vbi1lcXVhbCBNRU1zIGFzIG5vbi1hbGlhc2luZy4KKworU2F0IEFwciAgOCAyMjo1MzozOCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEuYyAocGFfcmVvcmcpOiBGaXggdHlwby4KKworU2F0IEFwciAgOCAxOTozNjozNiAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3JzNjAwMC5oIChTRUxFQ1RfU0VDVElPTik6IFRSRUVfQ09ERV9DTEFTUyBtdXN0IGJlIGNhbGxlZAorCXdpdGggYSB0cmVlIGNvZGUsIG5vdCBhIHRyZWUgdmFsdWUuCisKK1NhdCBBcHIgIDggMTI6NDE6MDEgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBjcHBoYXNoLmM6IERvbid0IHVzZSBjb25zdCBvbiBjb21waWxlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LgorCitTYXQgQXByICA4IDE2OjMyOjIyIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IEhhbmRsZSBjYXNlIHdoZXJlIElOQ1JFTUVOVEVECisJaGFzIGEgbm9uLXRyaXZpYWwgY29udmVyc2lvbi4KKworRnJpIEFwciAgNyAxOTozMzoyMSAxOTk1ICBQaGlsIE5lbHNvbiAgKHBoaWxAY3Mud3d1LmVkdSkKKworCSogbnMzMmsuaCAoVFJBTVBPTElORV9URU1QTEFURSwgVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKToKKwlGaXggYXNzZW1ibGVyIHN5bnRheCBlcnJvcnMuCisKK0ZyaSBBcHIgIDcgMTk6Mjc6MjMgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGNjY3AuYyAoVk1TX2ZzdGF0LCBWTVNfc3RhdCk6ICBOZXcgZnVuY3Rpb25zLgorCitGcmkgQXByICA3IDE5OjI1OjIxIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogSWYgdHJhZGl0aW9uYWwsIHNldCBzdHJpbmdpZnkKKwltZW1iZXIgdG8gU0hBUlBfVE9LRU4gcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YKKwlzdHJpbmdpZnlfc2hhcnBfdG9rZW5fdHlwZS4KKworRnJpIEFwciAgNyAwNzo0ODozNSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogI2lmZGVmIFBPSU5URVJTX0VYVEVORF9VTlNJR05FRCwKKwloYW5kbGUgc2lnbi0gb3IgemVyby1leHRlbmRpbmcgYWRkcmVzc2VzLgorCisJKiBvcHRhYnMuYyAoaW5pdHssX2ludGVncmFsLF9mbG9hdGluZyxfY29tcGxleH1fbGliZnVuY3MpOgorCUNoYW5nZSBTVUZGSVggdG8gImNoYXIiIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHByb3RvdHlwZS4KKworCSogZXhwbG93LmMgKGNvbnZlcnRfbWVtb3J5X2FkZHJlc3MpOiBObyBsb25nZXIgc3RhdGljLgorCU5ldyBhcmcsIFRPX01PREUuCisJRG8gc29tZXRoaW5nIHNwZWNpYWwgZm9yIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kIENPTlNULgorCShtZW1vcnlfYWRkcmVzcyk6IEFkZCBleHRyYSBhcmcgdG8gY2FsbCB0byBjb252ZXJ0X21lbW9yeV9hZGRyZXNzLgorCSogcnRsLmggKGNvbnZlcnRfbWVtb3J5X2FkZHJlc3MpOiBBZGQgZXh0cmEgYXJnLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBRERSX0VYUFIpOiBBbHdheXMgY2FsbAorCWNvbnZlcnRfbWVtb3J5X2FkZHJlc3Mgd2hlbiBjb252ZXJ0aW5nOyBhZGQgZXh0cmEgYXJnLgorCSogc3RtdC5jIChleHBhbmRfY29tcHV0ZWRfZ290byk6IENvbnZlcnQgZnJvbSBwdHJfbW9kZSB0byBQbW9kZS4KKworCSogZ2NjLmMgKE9CSkVDVF9TVUZGSVgpOiBEZWZhdWx0IG5vdyAiLm8iLCBub3QgIm8iLgorCShhbGwgc3BlY3MpOiBSZW1vdmUgIi4iIGJlZm9yZSAlTzsgdXNlICVPIGluIGEgZmV3IG1pc3NpbmcgY2FzZXMuCisJKiBpMzg2L29zMi5oIChPQkpFQ1RfU1VGRklYKTogRGVsZXRlIGZyb20gaGVyZS4KKwkqIGkzODYveG0tb3MyLmggKE9CSkVDVF9TVUZGSVgpOiBNb3ZlIHRvIGhlcmU7IG5vdyBoYXMgcGVyaW9kLgorCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRik6IFVzZSAkKGV4ZWV4dCkgZm9yIGV4ZWN1dGFibGVzLgorCitGcmkgQXByICA3IDAzOjMyOjI5IDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnLnN1YjogQWNjZXB0IC1saXRlcyogYXMgb3Agc3lzLgorCitUaHUgQXByICA2IDIzOjA4OjUwIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBjcHBsaWIuYyAoYmNvcHksIGJ6ZXJvLCBiY21wKTogIFJlbW92ZSAjdW5kZWZzLgorCSogY3BwYWxsb2MuYyAoeGNhbGxvYyk6ICBSZS1pbXBsZW1lbnQgdXNpbmcgY2FsbG9jLAorCXJhdGhlciB0aGFuIG1hbGxvYytiemVyby4KKwkqIGNwcGxpYi5jIChTRUxGX0RJUl9EVU1NWSk6ICBOZXcgbWFjcm8uCisJKGRvX2luY2x1ZGUpOiAgRG9uJ3QgcGFzcyBzZWFyY2hwdHIgdG8gZmluY2x1ZGUgaWYgaXQgaXMgZHNwLAorCXNpbmNlIHRoYXQgaXMgb24gdGhlIHN0YWNrLCBhbmQgd291bGQgY2F1c2UgYSBkYW5nbGluZyBwb2ludGVyLgorCUlmIGhhbmRsaW5nICNpbmNsdWRlX25leHQsIHJlY29nbml6ZSBTRUxGX0RJUl9EVU1NWS4KKworRnJpIEFwciAgNyAwMDo1NDoyNCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEuaCAoTUFDSElORV9ERVBFTkRFTlRfUkVPUkcpOiBEZWZpbmUuCisJKiBwYS5tZCAoc3dpdGNoX2p1bXApOiBOZXcgcGF0dGVybiBmb3IganVtcHMgd2hpY2ggaW1wbGVtZW50CisJYSBzd2l0Y2ggdGFibGUuCisJKiBwYS5jIChwYV9yZW9yZyk6IE5ldyBmdW5jdGlvbiB0byBleHBsb2RlIGp1bXAgdGFibGVzLgorCShwYV9hZGp1c3RfaW5zbl9sZW5ndGgpOiBBY2NvdW50IGZvciBqdW1wcyBpbiBzd2l0Y2ggdGFibGVzIHdpdGgKKwl1bmZpbGxlZCBkZWxheSBzbG90cy4KKworVGh1IEFwciAgNiAxNDozMToxMCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogRG9uJ3QgY2FsbCBjb21tb25fdHlwZSBmb3IKKyAgICAgICAgdW5jb21tb24gcG9pbnRlciB0eXBlcy4KKworV2VkIEFwciAgNSAxMzo1MzoxNyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCVJlLXdyaXRlIGZpeHByb3RvL2ZpeC1oZWFkZXIvZXRjIHRvIHVzZSBjcHBsaWI6CisJKiBmaXgtaGVhZGVyLmM6ICBDb21tZW50IG91dCBzdXBwb3J0IGZvciBhZGRpbmcgbWlzc2luZyBleHRlcm4gIkMiCisJdXNpbmcgI2lmZGVmIEFERF9NSVNTSU5HX0VYVEVSTl9DIGluc3RlYWQgb2YgI2lmIDAuCisJKiBmaXhwcm90bzogIFJlbW92ZWQgY2FzZSBvZiByZXF1aXJlZCBmdW5jdGlvbnMuICAgSW5zdGVhZCB1c2UgLi4uCisJKiBmaXgtaGVhZGVyLmMgKHN0ZF9pbmNsdWRlX3RhYmxlKTogIC4uLiBuZXcgcmVxdWlyZWQtZnVuY3Rpb25zIHRhYmxlLgorCShjcHBfZmlsZV9saW5lX2Zvcl9tZXNzYWdlLCBjcHBfcHJpbnRfY29udGFpbmluZ19maWxlcywgY3BwX21lc3NhZ2UpOgorCU5ldyBzdHViIGZ1bmN0aW9ucywgdG8gaW50ZXJjZXB0IGNwcGxpYiBlcnJvciBtZXNzYWdlLgorCSogZml4cHJvdG86ICBEb24ndCBjYWxsICRDUFAsIHNpbmNlIGZpeC1oZWFkZXIgbm93IGluY29ycG9yYXRlcyBjcHBsaWIuCisJKiBnZW4tcHJvdG9zLmMgKGZhdGFsLCBoYXNoZik6ICBOZXcgZnVuY3Rpb25zLgorCShtYWluKTogIFVzZSBoYXNoZiwgaW5zdGVhZCBvZiBoYXNoLgorCSogc2Nhbi1kZWNscy5jIChzY2FuX2RlY2xzLCBza2lwX3RvX2Nsb3NpbmdfYnJhY2UpOiAgUmUtd3JpdGUgdG8KKwl0YWtlIGEgY3BwX3JlYWRlciogYXMgYXJndW1lbnQsIG5vdCBhIEZJTEUqLgorCSogc2Nhbi5oIChoYXNoKTogIE1ha2UgcGFyYW1ldGVyIGNvbnN0LgorCSogc2Nhbi5jIChoYXNoKTogIFJlbW92ZWQuCisJKiBzY2FuLmMgKG1lbW9yeV9mdWxsLCB4bWFsbG9jLCB4cmVhbGxvYyk6ICBSZW1vdmVkLgorCVVzZSBmdW5jdGlvbnMgZnJvbSBjcHBhbGxvYy5jIGluc3RlYWQuCisJKiBNYWtlZmlsZS5pbiAoZ2VuLXBydG9zLCBmaXgtaGVhZGVyLCBzdG1wLWZpeHByb3RvKTogIFVwZGF0ZS4KKworV2VkIEFwciAgNSAxMzoyNDoxNCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogY3BwbGliLmMgKGNwcF9nZXRfdG9rZW4pOiBJZiB0cmFkaXRpb25hbCwgcmV0dXJuIGFmdGVyIGNvbW1lbnQsCisJaW5zdGVhZCBvZiByZWFkaW5nIG1vcmUsIHNvIGVuZC1vZi1saW5lIGNhbiBiZSBwZWVrZWQgYXQuCisJKiBjcHBlcnJvci5jIChjcHBfZmlsZV9saW5lX2Zvcl9tZXNzYWdlLCBjcHBfbWVzc2FnZSk6ICBOZXcKKwlmdW5jdGlvbnMsIHRoYXQgZG8gdGhlIGFjdHVhbCBwcmludGluZyBvZiBlcnJvciBtZXNzYWdlcy4KKwkoY3BwX3ByaW50X2ZpbGVfYW5kX2xpbmUsIGNwcF9lcnJvciwgY3BwX3dhcm5pbmcsIGNwcF9wZWR3YXJuLAorCWNwcF9lcnJvcl93aXRoX2xpbmUsIGNwcF93YXJuaW5nX3dpdGhfbGluZSwgY3BwX3BlZHdhcm5fd2l0aF9saW5lLAorCWNwcF9wZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwgY3BwX2Vycm9yX2Zyb21fZXJybm8sIG15X3N0cmVycm9yLAorCWNwcF9wZXJyb3Jfd2l0aF9uYW1lKTogIFJlLXdyaXRlIHRvIHVzZSBjcHBfZmlsZV9saW5lX2Zvcl9tZXNzYWdlCisJYW5kIGNwcF9tZXNzYWdlLCBhbmQgbW92ZSB0byBjcHBsaWIuYy4KKworVHVlIEFwciAgNCAyMzozNTo0OSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvZ251LmggKEdOVV9DUFBfUFJFREVGSU5FUyk6IFJlbW92ZSAtRF9fSFVSRF9fLgorCitUdWUgQXByICA0IDE3OjE1OjU0IDE5OTUgIEplZmZyZXkgQS4gTGF3ICA8bGF3QG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIHBhLmggKERPX0dMT0JBTF9EVE9SU19CT0RZKTogRml4IHBvaW50ZXIgLT4gaW50ZWdlciBhc3NpZ25tZW50CisJcHJvYmxlbS4KKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBEb24ndCB1c2UgYSBKVU1QX0lOU04KKwlhIHRoZSB0YXJnZXQgb2YgYW5vdGhlciBKVU1QX0lOU04gdG8gZmlsbCBhIGRlbGF5IHNsb3QuCisKK01vbiBBcHIgIDMgMTk6MDM6NDggMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGFkZGVyLmN5Z251cy5jb20+CisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBTaWduLWV4dGVuZCBjb25zdGFudHMgd2hlbgorCXRoZXkgaGF2ZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0IGZvciB0aGUgdGFyZ2V0LgorCisJKiBtNjhrLm1kICh1bXVsc2kzX2hpZ2hwYXJ0KTogVGVzdCBmb3IgQ09OU1RfSU5UIGFuZCBDT05TVF9ET1VCTEUsCisJbm90IENPTlNUQU5UX1AuCisJKHNtdWxzaTNfaGlnaHBhcnQpOiBMaWtld2lzZS4KKwkqIG02OGsuYyAoY29uc3RfdWludDMyX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGNvbnN0X3NpbnQzMl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogbTY4ay5tZCAoY29uc3RfdW11bHNpM19oaWdocGFydCk6IFVzZSBjb25zdF91aW50MzJfb3BlcmFuZCBpbnN0ZWFkCisJb2YgaW1tZWRpYXRlX29wZXJhbmQgZm9yIG9wMy4gIERlbGV0ZSBtb2RlLgorCShjb25zdF9zbXVsc2kzX2hpZ2hwYXJ0KTogQW5hbG9nb3VzIGNoYW5nZS4KKworTW9uIEFwciAgMyAxOTowMzo0OCAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogU2lnbi1leHRlbmQgY29uc3RhbnRzIHdoZW4KKwl0aGV5IGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCBmb3IgdGhlIHRhcmdldC4KKworCSogY29tYmluZS5jIChmb3JjZV90b19tb2RlLCBjYXNlIFBMVVMpOiBTaWduIGV4dGVuZCBtYXNrcyB0aGF0IGFyZQorCW5lZ2F0aXZlIGluIE9QX01PREUuCisJKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBTaWduLWV4dGVuZCBjb25zdGFudHMgd2hlbiB0aGV5IGhhdmUgdGhlCisJbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0IGZvciB0aGUgdGFyZ2V0LgorCShtZXJnZV9vdXRlcl9vcHMpOiBMaWtld2lzZS4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBMaWtld2lzZS4KKworTW9uIEFwciAgMyAxODoyMzo0OCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCAtZntuby0sfXJlcG8uCisKK01vbiBBcHIgIDMgMTg6MTM6MTUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChub256ZXJvX2JpdHMsIGNhc2UgUkVHKTogQ2hlY2sgUE9JTlRFUlNfRVhURU5EX1VOU0lHTkVELgorCShudW1fc2lnbl9iaXRfY29waWVzLCBjYXNlIFJFRyk6IExpa2V3aXNlLgorCSogZXhwbG93LmMgKGNvbnZlcnRfbWVtb3J5X2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uCisJKG1lbW9yeV9hZGRyZXNzKTogQ2FsbCBpZiBpdCBuZWVkZWQuCisJKHByb21vdGVfbW9kZSwgY2FzZSBQT0lOVEVSX1RZUEUpOiBVc2UgUG1vZGUgYW5kIHBvaW50ZXIgZXh0ZW5zaW9uLgorCShhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogQ29udmVydCBzaXplIGZyb20gcHRyX21vZGUuCisJKiBleHByLmMgKGNsZWFyX3N0b3JhZ2UsIGV4cGFuZF9hc3NpZ25tZW50LCBzdG9yZV97ZXhwcixjb25zdHJ1Y3Rvcn0pOgorCVVzZSBwdHJfbW9kZSBpbnN0ZWFkIG9mIFBtb2RlIGluIHNvbWUgcGxhY2VzLgorCShleHBhbmRfZXhwciwgZXhwYW5kX2J1aWx0aW4pOiBMaWtld2lzZS4KKwkocHVzaF9ibG9jaywgc3RvcmVfZXhwcik6IENvbnZlcnQgc2l6ZSB0byBQbW9kZS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQUREUl9FWFBSKTogQ29udmVydCBmcm9tIFBtb2RlIHRvIHB0cl9tb2RlLgorCitNb24gQXByICAzIDE4OjAwOjUyIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBDb3JyZWN0IHR5cG8gaW4gbGFzdAorCWNoYW5nZS4KKworCSogc2guYyAoZ2VuX3NoaWZ0eV9vcCwgY2FzZSBBU0hJRlRSVCk6IFJldHVybiAwIGlmIHNoaWZ0IGNvdW50IGlzIG5vdAorCWEgY29uc3RhbnQuCisKK01vbiBBcHIgIDMgMTI6MTc6MTAgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQGN5Z251cy5jb20pCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IFdoZW4gY29udmVydGluZyBhIFNVQlJFRyBpbnRvIGEKKwlSRUcsIGlmIHRoZSBzeXN0ZW0gaXMgYmlnIGVuZGlhbiwgYWRqdXN0IHRoZSBiaXQgb2Zmc2V0CisJYXBwcm9wcmlhdGVseS4KKworTW9uIEFwciAgMyAwMDowODo0NSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvaTM4Ni9saW51eC5oOiBJbmNsdWRlICJjb25maWcvbGludXguaCIgaW5zdGVhZCBvZgorIAkibGludXguaCIsIHRvIGF2b2lkIHJlY3Vyc2lvbi4KKworU3VuIEFwciAgMiAyMzo1MDoyNyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvaTM4Ni9nbnVlbGYuaDogSW5jbHVkZSBpMzg2L2xpbnV4LmggaW5zdGVhZCBvZgorIAlpMzg2L2xpbnV4ZWxmLmguCisKK1N1biBBcHIgIDIgMTc6MzU6MTAgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBjc2UuYyAoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBEb24ndCBzaW1wbGlmeSBBLUIgZm9yCisJY29tcGFyZSBvZiBBIGFuZCBCIHdoZW4gdGhlIGNvbXBhcmUgaXMgdW5zaWduZWQuCisKK1N1biBBcHIgIDIgMDg6MjM6MzggMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGZpeGluY2x1ZGVzIChzdGRpby5oKTogQlNESSAyLjAgY2hhbmdlZCB0aGUgc3BlbGxpbmcgb2YgX1ZBX0xJU1RfCisJdG8gX0JTRF9WQV9MSVNUXy4KKworU3VuIEFwciAgMiAwNzo1NzoyOCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgorCisJKiBpMzg2L3htLWJzZDM4Ni5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaVszNDVdODYtKi1ic2QqKTogQWRkIHhtX2ZpbGUuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLVcgYW5kIC13IHRvIGduYXQxLgorCisJKiB3aW5udC93aW5udC5oIChTVERDX1ZBTFVFKTogQWRkICN1bmRlZi4KKwkqIGkzODYvd2lubnQuaCAoTElCX1NQRUMpOiBMaWtld2lzZS4KKworU3VuIEFwciAgMiAwNzo1NToyNSAxOTk1ICBEb3VnbGFzIFJ1cHAgIChkcnVwcEBjcy53YXNoaW5ndG9uLmVkdSkKKworCSogaTM4Ni93aW5udC5oIChSRVRVUk5fUE9QU19BUkdTLCBFTkNPREVfU0VDVElPTl9JTkZPKTogQ2FsbAorCWNoYWluX21lbWJlcl9wdXJwb3NlLCBub3QgY2hhaW5fbWVtYmVyX3ZhbHVlLgorCShBU01fRklMRV9TVEFSVCwgTElCX1NQRUMpOiBNb3ZlIHRvIGhlcmUuCisJKiB3aW5udC93aW5udC5oIChBU01fRklMRV9TVEFSVCwgTElCX1NQRUMpOiBEZWxldGUgZnJvbSBoZXJlLgorCSogdHJlZS5jIChjaGFpbl9tZW1iZXJfcHVycG9zZSk6IE5ldyBmdW5jdGlvbi4KKworU2F0IEFwciAgMSAxMjoxOToxNCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogTmV3IHZhcmlhYmxlIGJ1aWxkX3R5cGUgY29udHJvbHMKKwl0eXBlIGdpdmVuIHRvIGV4cHJlc3Npb24gd2hlbiBjcmVhdGVkLiAgU2V0IHRvIGludGVnZXJfdHlwZV9ub2RlIGZvcgorCWNvbXBhcmlzb24gb3BzIGluc3RlYWQgb2YgcmVzdWx0X3R5cGUgc28gcmVzdWx0X3R5cGUgc3RpbGwgaG9sZHMgdHlwZQorCWluIHdoaWNoIGNvbXBhcmlzb24gaXMgZG9uZS4gIFdoZW4gY2hlY2tpbmcgZm9yIGNvbXBhcmlzb24gYmV0d2VlbgorCXNpZ25lZCBhbmQgdW5zaWduZWQsIHVzZSByZXN1bHRfdHlwZSByYXRoZXIgdGhhbiAocG9zc2libHkgc2hvcnRlbmVkKQorCXR5cGUgb2Ygb3AwLiAgRG9uJ3Qgd2FybiBhYm91dCBlcXVhbGl0eSBjb21wYXJpc29uIG9mIHNpZ25lZCBvcGVyYW5kCisJdG8gdW5zaWduZWQgY29uc3RhbnQgdGhhdCBmaXRzIGluIHNpZ25lZCB0eXBlLgorCitTYXQgQXByICAxIDA5OjQ3OjAyIDE5OTUgIERvdWdsYXMgUnVwcCAgKGRydXBwQGNzLndhc2hpbmd0b24uZWR1KQorCisJKiBpMzg2L3dpbm50LmggKENQUF9QUkVERUZJTkVTKTogQWRkIGRlZmluaXRpb25zIGZvciBfX3N0ZGNhbGwKKwlhbmQgX19jZGVjbC4KKwkqIHdpbm50L3dpbm50LmggKExJQl9TUEVDKTogQWRkIE9MRE5BTUVTLkxJQi4KKwkqIHdpbm50L3htLXdpbm50Lmg6IFJlbW92ZSB1bm5lZWRlZCAjZGVmaW5lJ3MgZm9yIG5vbi1BTlNJIGZ1bmN0aW9ucy4KKwkqIGZpeGluYy53aW5udDogUmVtb3ZlIHVubmVlZGVkIGZpeGVzIHJlbGF0aW5nIHRvIF9fc3RkY2FsbC4KKworCSogb2JqYy9NYWtlZmlsZSAoU0hFTEwpOiBOZXcgZGVmaW5pdGlvbi4KKworU2F0IEFwciAgMSAwODoyNToyNiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBXaGVuIGVtaXR0aW5nIGEgQkFSUklFUiwgZG9uJ3QgcHV0IGl0IGFmdGVyCisJYSBkZWxldGVkIGluc24uCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IEluaXRpYWxpemUgc2Vjb25kYXJ5X3tpbixvdXR9X2ljb2RlLgorCisJKiBnY2MuYyAocHJpbnRfbXVsdGlsaWJfaW5mbyk6IERvbid0IHVzZSBMQVNUX1BBVEggaWYgbm90IHNldC4KKworU2F0IEFwciAgMSAwODoxNTo1OSAxOTk1ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogdmF4Lm1kIChleHR2LCBleHR6dik6IERvbid0IHVzZSBpbW1lZGlhdGUgdmFsdWUgZm9yIG9wZXJhbmQgMS4KKworU2F0IEFwciAgMSAwNzo0ODoyOSAxOTk1ICBZdXJ5IFNoZXZjaHVrICAoc2l6aWZAYm90aWsueWFyb3NsYXZsLnN1KQorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBQcm9wZXJseSBpZ25vcmUgaW52YWxpZCByZWcgaW4gY2xvYmJlci4KKworU2F0IEFwciAgMSAwNzowMjoyNCAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jOiBHZW5lcmFsIGNvZGUgY2xlYW51cC4KKwlBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwlSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMgdG8gKGNoYXIgKik7IGFkZCBjYXN0cyB0byAoVV9DSEFSICopLgorCUFkZCBwYXJlbnRoZXNlcyBzdWdnZXN0ZWQgYnkgYGdjYyAtV3BhcmVudGhlc2VzJy4KKwlSZW5hbWUgbG9jYWwgdmFyaWFibGVzIGFzIHN1Z2dlc3RlZCBieSBgZ2NjIC1Xc2hhZG93Jy4KKwk8ZmNudGwuaD4sIDxzdGRsaWIuaD4sIDxzdHJpbmcuaD4sIDx1bmlzdGQuaD46IE5ldyBpbmNsdWRlcy4KKwk8c3lzL3RpbWUuaD4sIDxzeXMvcmVzb3VyY2UuaD46IEluY2x1ZGUgb25seSBpZiBkZWZpbmVkKFJMSU1JVF9TVEFDSykuCisJPHRpbWUuaD46IEluY2x1ZGUsIHVubGVzcyA8c3lzL3RpbWUuaD4gYWxyZWFkeSBkb2VzLgorCShIQVZFX0ZDTlRMX0gsIEhBVkVfU1RETElCX0gsIEhBVkVfU1lTX1RJTUVfSCk6IE5ldyBzeW1ib2xzLgorCShIQVZFX1VOSVNURF9ILCBTVERDX0hFQURFUlMsIFRJTUVfV0lUSF9TWVNfVElNRSk6IExpa2V3aXNlLgorCShfX2F0dHJpYnV0ZV9fLCBQUk9UTywgVkFfU1RBUlQsIFBSSU5URl9BTElTVCwgUFJJTlRGX0RDTCk6IE5ldyBtYWNyb3MuCisJKFBSSU5URl9QUk9UT3ssXzEsXzIsXzN9LCBET19QUk9UTyk6IExpa2V3aXNlLgorCShiY29weSwgYnplcm8sIGJjbXApOiBJZiAjZGVmaW5lZCBieSBjb25maWd1cmF0aW9uIGZpbGUsIHVzZSB0aGF0LgorCUlmIFNURENfSEVBREVSUyBpcyBkZWZpbmVkLCB1c2Ugc3RhbmRhcmQgQyBmdW5jdGlvbnMuCisJSWYgQlNUUklORyBpcyBkZWZpbmVkLCBvciBVU0cgYW5kIFZNUyBhcmUgbm90IGRlZmluZWQsIHVzZQorCXRoZSBDIGxpYnJhcnkuICBPdGhlcndpc2UsIHVzZSBteV9iY29weSwgbXlfYnplcm8sIG15X2JjbXAuCisJKGxvY2FsdGltZSk6IFJlbW92ZSBuby1sb25nZXItbmVjZXNzYXJ5IGV4cGxpY2l0IGRlY2xhcmF0aW9uLgorCShnZXRlbnYsIGluZGV4LCByaW5kZXgpOiBEb24ndCBkZWNsYXJlIGV4cGxpY2l0bHkgaWYgdGhlCisJYXBwcm9wcmlhdGUgc3lzdGVtIGhlYWRlciBzaG91bGQgZGVjbGFyZSBpdC4KKwkoZmRvcGVuKTogUmVtb3ZlIG5vLWxvbmdlci11c2VkIGRlY2xhcmF0aW9uLgorCSh2cHJpbnRmKTogRGVmaW5lIGEgc3Vic2l0dXRlIG1hY3JvIGlmICFkZWZpbmVkKEhBVkVfVlBSSU5URikuCisJKG1haW4pOiBSZXBsYWNlIGBmZG9wZW4gKGR1cCAoZmlsZW5vIChzdGRvdXQpKSwgInciKSknCisJd2l0aCBgc3Rkb3V0Jy4KKwkoZ2V0X2xpbnRjbWQsIHJlc2NhbiwgY3JlYXRlX2RlZmluaXRpb24pOiBVc2UgYmNtcCBpbnN0ZWFkIG9mIHN0cm5jbXAKKwl3aGVuIGJvdGggb3BlcmFuZHMgYXJlIGtub3duIHRvIGJlIGZyZWUgb2YgbnVsbCBieXRlcy4KKwkoY2hlY2tfbWFjcm9fbmFtZSwgY29tcGFyZV9kZWZzLCBjb2xsZWN0X2V4cGFuc2lvbik6IExpa2V3aXNlLgorCShkb19hc3NlcnQsIGNvbXBhcmVfdG9rZW5fbGlzdHMsIGFzc2VydGlvbl9sb29rdXAsIGRvX2xpbmUpOiBMaWtld2lzZS4KKwkoc2tpcF9pZl9ncm91cCwgbG9va3VwKTogTGlrZXdpc2UuCisJKHJlc2Nhbik6IFJlbW92ZSB1bnVzZWQgbGFiZWwgYHN0YXJ0YWdhaW4nLgorCUFib3J0IGluc3RlYWQgb2YgcHJpbnRpbmcgbm9uc2Vuc2UgaWYgdGhlIHN0YWNrIGlzIGNvcnJ1cHRlZAorCXdoZW4gdGhlcmUgd2FzIGFuIHVudGVybWluYXRlZCBzdWNjZXNzZnVsIGNvbmRpdGlvbmFsLgorCShwY2ZpbmNsdWRlKTogSW5jbHVkZSBleHBsaWNpdCBkb3VibGUtY2FzdCB0aHJvdWdoIEdFTkVSSUNQVFIKKwl0byBpZGVudGlmeSBwYXJ0aWN1bGFybHkgZWdyZWdpb3VzIHR5cGUgcHVucy4KKwkoY3JlYXRlX2RlZmluaXRpb24sIGRvX2RlZmluZSwgY2hlY2tfbWFjcm9fbmFtZSk6IFVzZSAlLipzCisJcHJpbnRmIGZvcm1hdCB0byBhdm9pZCBwYWluZnVsIGNvcHlpbmctYW5kLWNhc3RpbmcuCisJKGRvX29uY2UpOiBSZXR1cm4gdm9pZCwgbm90ICh1bnVzZWQpIGludC4KKwkoZG9faWRlbnQsIGRvX3ByYWdtYSwgZG9fc2Njcyk6IEFjY2VwdCBleHRyYSBhcmd1bWVudHMgc28gdGhhdAorCWFsbCBkaXJlY3RpdmUtaGFuZGxlcidzIHR5cGVzIG1hdGNoLgorCShkb19zY2NzKTogRGVmaW5lIG9ubHkgaWYgU0NDU19ESVJFQ1RJVkUgaXMgZGVmaW5lZC4KKwkoc2tpcF9pZl9ncm91cCwgZHVtcF9zaW5nbGVfbWFjcm8pOiBBZGQgYGRlZmF1bHQ6IGJyZWFrOycgdG8KKwlrZWVwIC1Xc3dpdGNoIGhhcHB5LgorCShlcnJvciwgd2FybmluZywgZXJyb3Jfd2l0aF9saW5lLCB2d2FybmluZ193aXRoX2xpbmUsIHBlZHdhcm4pOiBVc2UKKwlzdGRhcmcvdmFyYXJnL3ZmcHJpbnRmIGluc3RlYWQgb2YgcGFzc2luZyBib2d1cyBjaGFyICogYXJncyBhcm91bmQuCisJKHBlZHdhcm5fd2l0aF9saW5lLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwgZmF0YWwpOiAgTGlrZXdpc2UuCisJKHZlcnJvciwgdndhcm5pbmcsIHZlcnJvcl93aXRoX2xpbmUsIHZ3YXJuaW5nX3dpdGhfbGluZSk6IE5ldyBmY25zLgorCShkdW1wX3NpbmdsZV9tYWNybyk6IEFib3J0IGlmIGFwIHBvaW50cyB0byBnYXJiYWdlLgorCShtYWtlX2RlZmluaXRpb24sIG1ha2VfdW5kZWYsIG1ha2VfYXNzZXJ0aW9uKTogUGFyYW1ldGVyIG5vdyBjaGFyICouCisJKHhtYWxsb2MsIHhyZWFsbG9jLCB4Y2FsbG9jLCBzYXZlc3RyaW5nLCBpbmRleDApOiBNYWtlIHNpemVzIHNpemVfdAorCWluc3RlYWQgb2YgdW5zaWduZWQ7IG1ha2UgcG9pbnRlciBwYXJhbWV0ZXJzIEdFTkVSSUNQVFIsIG5vdCBjaGFyICouCisJKHhjYWxsb2MpOiBVc2UgYnplcm8gdG8gY2xlYXIgbWVtb3J5IGluc3RlYWQgb2YgdXNpbmcgb3duIGxvb3AuCisKK0ZyaSBNYXIgMzEgMDg6MzM6MDcgMTk5NSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogbG9uZ2xvbmcuaCAodW11bF9wcG1tIG1jNjgwMDApOiBVc2UgJSMgaW5zdGVhZCBvZiAjLgorCitGcmkgTWFyIDMxIDA2OjM3OjU0IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBjeWdudXMuY29tKQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IEltcGxtZW50IC1mcGFjay1zdHJ1Y3QuCisJKGxheW91dF9yZWNvcmQpOiBEaXR0by4KKworCSogZmxhZ3MuaCAoZmxhZ19wYWNrX3N0cnVjdCk6IE5ldyBmbGFnIHZhcmlhYmxlLgorCisJKiB0b3BsZXYuYyAoZmxhZ19wYWNrX3N0cnVjdCk6IE5ldyBmbGFnIHZhcmlhYmxlLgorCShmX29wdGlvbnMpOiBBZGQgLWZwYWNrLXN0cnVjdCBzdXBwb3J0LgorCisJKiBNYWtlZmlsZS5pbiAoc3Rvci1sYXlvdXQubyk6IEFkZCBmbGFncy5oIGRlcGVuZGVuY3kuCisKK0ZyaSBNYXIgMzEgMDg6NDA6MTYgMTk5NSAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaVszNDVdODYtKi13aW5udDMqKTogQWRkIHRtYWtlX2ZpbGUuCisJKiBpMzg2L3gtd2lubnQgKHdpbm50Lm8pOiBEZWxldGVkLgorCSogaTM4Ni90LXdpbm50OiBOZXcgZmlsZS4KKworRnJpIE1hciAzMSAwNzoyNjozNyAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtNjhrL25ldGJzZC5oLCBtNjhrL2hwM2JzZDQ0Lmg6IFJlbW92ZSAjaW5jbHVkZSBvZiBtYWNoaW5lL2Fuc2kuaC4KKworCSogY29uZmlndXJlIChhMjlrLSotYnNkKTogU2V0IHRtYWtlX2ZpbGUgdG8gdC1saWJjLW9rLgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBQcm9wZXJseSBoYW5kbGUgb3V0cHV0IHRoYXQgY2FuJ3QKKwliZSBkaXJlY3RseSB3cml0dGVuIGludG8uCisKKwkqIGMtcGFyc2UuaW4gKHN0cnVjdHNwKTogQ29ycmVjdCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KKwkqIGMtY29tbW9uLmMgKGluaXRfYXR0cmlidXRlcyk6IEFfRk9STUFUIGlzIG9ubHkgZm9yIGRlY2xzLgorCitUaHUgTWFyIDMwIDE4OjI3OjM0IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmM6IFJlbW92ZSBleHBsaWNpdCAwLWluaXRpYWxpemF0aW9ucyBvZiBzdGF0aWMgdmFyaWFibGVzLgorCitUaHUgTWFyIDMwIDE4OjIyOjM5IDE5OTUgIEZlcmd1cyBIZW5kZXJzb24gIDxmamhAY3MubXUub3ouYXU+CisKKwkqIGMtdHlwZWNrLmMgKGludGVybmFsX2J1aWxkX2NvbXBvdW5kX2V4cHIpOiBXYXJuIGlmIExIUyBvZiBjb21tYQorCWV4cHJlc3Npb24gaGFzIG5vIHNpZGUgZWZmZWN0cywgb3IgY29tcHV0ZXMgdmFsdWUgd2hpY2ggaXMgbm90IHVzZWQuCisJKiBzdG10LmMgKG1ha2Ugd2Fybl9pZl91bnVzZWRfdmFsdWUpOiBObyBsb25nZXIgc3RhdGljLgorCSogdHJlZS5oICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IEFkZCBkZWNsYXJhdGlvbi4KKworVGh1IE1hciAzMCAxODoxNToxMSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNvbWJpbmUuYyAoZ2V0X2xhc3RfdmFsdWUpOiBSZXZlcnQgYmFjayB0byB1c2UgcHJldl9ub25ub3RlX2luc24KKwlpbnN0ZWFkIG9mIHByZXZfcmVhbF9pbnNuLiAgTW9kaWZ5IHRlc3QgdGhhdCBpZ25vcmVzIFVTRSBpbnNucy4KKworCSogcnM2MDAwLmggKFNFTEVDVF9TRUNUSU9OKTogQXBwbHkgY29uc3RhbnQgREVDTF9JTklUSUFMIHRlc3QKKwlvbmx5IHRvIERFQ0xzLgorCisJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IFRlc3QgU1RBQ0tfQk9VTkRBUlkgYWdhaW5zdAorCUJJR0dFU1RfQUxJR05NRU5UIGF0IHJ1biB0aW1lIGluc3RlYWQgb2YgYXQgY29tcGlsZSB0aW1lLgorCUdpdmUgTVVTVF9BTElHTiBtYWNybyBhIHZhbHVlLCBhbmQgdGVzdCB0aGlzIHZhbHVlIGluIGlmIHN0YXRlbWVudHMuCisKK1RodSBNYXIgMzAgMDg6NTk6NTYgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1wYXJzZS5pbjogTm93IGhhdmUgMjcgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cy4KKwkoYXR0cmlidXRlX2xpc3QpOiBKdXN0IG1ha2UgY2hhaW4gb2YgYWxsIGF0dHJpYnV0ZXMuCisJKGF0dHJpYik6IENvbnNpc3RlbnRseSBwdXQgbmFtZSBhcyBQVVJQT1NFLCBhcmdzLCBpZiBhbnksIGFzIFZBTFVFLgorCShzdHJ1Y3RzcCk6IEFsbG93IGF0dHJpYnV0ZXMgb24gYW55IHN0cnVjdCBvciB1bmlvbi4KKwkqIGMtY29tbW9uLmMgKGVudW0gYXR0cnMpOiBOZXcgZW51bSBjbGFzcy4KKwkoYXR0cnRhYiwgYXR0cnRhYl9pZHgpOiBOZXcgdmFyaWFibGVzLgorCShhZGRfYXR0cmlidXRlLCBpbml0X2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb25zLgorCShkZWNsX2F0dHJpYnV0ZXMpOiBNYWpvciByZXdyaXRlLgorCSogdHJlZS5jICh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IE5vdyByZWNlaXZlIG5hbWUgYW5kIGFyZ3MuCisKK1RodSBNYXIgMzAgMDc6MjA6MTQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIHByb3RvaXplLmM6IFVzZSB0aGUgcGhyYXNlIGBwcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZScgY29uc2lzdGVudGx5LgorCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlLCBkb19saW5lLCBza2lwX2lmX2dyb3VwKTogTGlrZXdpc2UuCisJKG91dHB1dF9saW5lX2RpcmVjdGl2ZSk6IFJlbmFtZWQgZnJvbSBvdXRwdXRfbGluZV9jb21tYW5kLgorCShub19saW5lX2RpcmVjdGl2ZXMpOiBSZW5hbWVkIGZyb20gbm9fbGluZV9jb21tYW5kcy4KKworCSogY2NjcC5jIChyZXNjYW4pOiBEb24ndCByZWNvZ25pemUgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzCisJd2l0aGluIG1hY3JvIGFyZ3MuICBXYXJuIGlmIG9uZSBpcyBmb3VuZC4KKworVGh1IE1hciAzMCAwNjoyMDozNiAxOTk1ICBILkouIEx1ICAgKGhqbEBueW5leHN0LmNvbSkKKworCSogY29uZmlndXJlIChpWzM0NV04Ni0qLWxpbnV4Kik6IFNldCB4bWFrZV9maWxlPXgtbGludXgsCisJdG1fZmlsZT1pMzg2L2xpbnV4LmgsIGFuZCBkb24ndCBzZXQgZXh0cmFfcGFydHMuCisJKGlbMzQ1XTg2LSotbGludXgqYW91dCopOiBOZXcgY29uZmlndXJhdGlvbi4KKwkoaVszNDVdODYtKi1saW51eGVsZik6IERlbGV0ZWQuCisJKiBjb25maWcvbGludXh7LC1hb3V0fS5oLCBjb25maWcveC1saW51eCwgY29uZmlnL3htLWxpbnV4Lmg6IE5ldyBmaWxlcy4KKwkqIGNvbmZpZy9pMzg2L2xpbnV4LWFvdXQuaDogTmV3IGZpbGUuCisJKiBjb25maWcvaTM4Ni9saW51eC5oOiBFeHRlbnNpdmUgbW9kaWZpY2F0aW9ucyB0byB1c2UgRUxGIGZvcm1hdAorCWFzIGRlZmF1bHQuCisJKExJQl9TUEVDKTogRG9uJ3QgdXNlIGxpYmNfcC5hIGZvciAtcC4gZG9uJ3QgdXNlIGxpYmcuYQorCXVubGVzcyBmb3IgLWdnZGIuCisJKExJTlVYX0RFRkFVTFRfRUxGKTogRGVmaW5lZC4KKwkqIGNvbmZpZy9pMzg2L2xpbnV4ZWxmLmgsY29uZmlnL2kzODYveC1saW51eDogRmlsZXMgZGVsZXRlZC4KKwkqIGNvbmZpZy9pMzg2L3htLWxpbnV4Lmg6IEp1c3QgaW5jbHVkZSB4bS1pMzg2LmggYW5kIHhtLWxpbnV4LmguCisKK1dlZCBNYXIgMjkgMTk6MDk6MzYgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmMgKF9fdGhyb3dfdHlwZV9tYXRjaCk6IFVwZGF0ZSB0byB1c2UgbmV3IGNhbGxpbmcgY29udmVudGlvbi4KKworV2VkIE1hciAyOSAxNDo1MzoyMyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBEZWxldGUgY29kZSBtb2RpZnlpbmcgZ2NjX2V4ZWNfcHJlZml4LgorCShtYWluKTogUHV0IGl0IGhlcmUgYWZ0ZXIgbGFzdCB1c2Ugb2YgZ2NjX2V4ZWNfcHJlZml4LiAgRm9yIGNyb3NzCisJY29tcGlsZXIsIHNldCBzdGFydGZpbGVfcHJlZml4ZXMgaWYgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBhbmQKKwlzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4IGlzIGEgcmVsYXRpdmUgcGF0aC4KKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgQU5EIGNhc2UpOiBVbmRvIEp1bHkgNywgMTk5NAorCWNoYW5nZS4KKworCSogbWlwcy9taXBzLm1kIChjYWxsX2ludGVybmFsMSwgY2FsbF92YWx1ZV9pbnRlcm5hbDEpOiBNb3ZlICUqIGZyb20KKwlzdGFydCBvZiBhc3NlbWJsZXIgb3V0cHV0IHRvIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgamFsLgorCisJKiBtaXBzL21pcHMuYyAoZnVuY3Rpb25fcHJvbG9ndWUpOiBQdXQgU0RCX0RFQlVHR0lOR19JTkZPIGlmZGVmIGFyb3VuZAorCWNvZGUgZm9yIFNEQl9ERUJVRyBzdXBwb3J0LgorCShtaXBzX3NlbGVjdF9ydHhfc2VjdGlvbiwgbWlwc19zZWxlY3Rfc2VjdGlvbik6IENoYW5nZSByZGF0YV9zZWN0aW9uCisJdG8gUkVBRE9OTFlfREFUQV9TRUNUSU9OIGFuZCBzZGF0YV9zZWN0aW9uIHRvIFNNQUxMX0RBVEFfU0VDVElPTi4KKwkqIG1pcHMvbWlwcy5oIChTTUFMTF9EQVRBX1NFQ1RJT04pOiBEZWZpbmUuCisKKwkqIHJlb3JnLmMgKG1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMpOiBNYWtlIHNldGptcCB1c2UgYWxsIHJlZ2lzdGVycy4KKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncywgY2FzZSBTVUJSRUcpOiBPbmx5IGZhbGwgdGhyb3VnaCB0byBSRUcgY2FzZQorCWlmIG9wZXJhbmQgaXMgYSBSRUcuCisKKwkqIGk5NjAvaTk2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBNYWtlIC1tb2xkLWFsaWduIHNldAorCVRBUkdFVF9GTEFHX1NUUklDVF9BTElHTi4KKwkoU1RSSUNUX0FMSUdOTUVOVCk6IFRlc3QgVEFSR0VUX1NUUklDVF9BTElHTi4KKworCSogc2gvc2guYyAoYW5kY29zdHMpOiBNb2RpZnkgY29zdHMgdG8gbWF0Y2ggdGhlIGhhcmR3YXJlLCBhbmQgYWRkCisJZXhwbGFuYXRvcnkgY29tbWVudHMuCisKKwkqIHNwYXJjL3NvbDIuaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgLURfX1NWUjQuCisKK1dlZCBNYXIgMjkgMTQ6MzA6MzAgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9yczYwMDAubWQgKG1vdnNmKTogV2hlbiBtb3ZpbmcgdG8vZnJvbSBpbnRlZ2VyIHJlZ2lzdGVycywKKwlkb24ndCBtb3ZlIGZsb2F0aW5nIHBvaW50IHRvIG1lbW9yeSBpZiBpdCBpcyBiZWluZyBzaW11bGF0ZWQgd2l0aAorCS1tc29mdC1mbG9hdC4KKworV2VkIE1hciAyOSAwNjo0NzozNiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXBhcnNlLmluIChpbml0ZGNsKTogT25seSBjYWxsIGRlY2xfYXR0cmlidXRlcyBvbmNlLgorCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQ2xlYW4gdXAgdGVzdCBmb3IgX19tb2RlX18uCisKK1R1ZSBNYXIgMjggMDg6MzQ6MzcgMTk5NSAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogaTM4Ni5tZCAoYWRkZGkzKTogRG9uJ3QgdHJlYXQgdHdvIG5vbi1lcXVhbCBNRU1zIGFzIG5vbi1hbGlhc2luZy4KKworVHVlIE1hciAyOCAwODoyMDo0OSAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLmggKENPTlNUQU5UX0FERFJFU1NfUCk6IFByb3ZpZGUgY29uc2lzdGVudCBkZWZpbml0aW9uLgorCitUdWUgTWFyIDI4IDA3OjI2OjQxIDE5OTUgIFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAoZG9feGlmZGVmLCBkb19lbmRpZik6IFJlbW92ZSB1bm5lY2Vzc2FyeSBwb2ludGVyIGNvbXBhcmlzb25zLgorCitNb24gTWFyIDI3IDIwOjQ1OjE1IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsLCBzdG9yZV9vbmVfYXJnKTogRG9uJ3Qgc2V0IEtFRVAgaW4gY2FsbHMKKwl0byBhc3NpZ25fc3RhY2tfdGVtcC4KKwkqIGZ1bmN0aW9uLmMgKHByZXNlcnZlX3RlbXBfc2xvdHMpOiBDbGVhciBBRERSX1RBS0VOIG9uIGl0ZW0KKwl0aGF0IHdlIGFyZSBwcmVzZXJ2aW5nLgorCitNb24gTWFyIDI3IDE0OjM5OjM1IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogbWlwcy9taXBzLmggKEZJUlNUX1BTRVVET19SRUdJU1RFUik6IEluY3JlbWVudC4KKwkoRklYRURfUkVHSVNURVJTLCBDQUxMX1VTRURfUkVHSVNURVJTKTogQWRkIG5ldyByZWdpc3Rlci4KKwkoTURfUkVHX0xBU1QpOiBJbmNyZW1lbnQuCisJKFNUX1JFR19GSVJTVCwgU1RfUkVHX0xBU1QpOiBJbmNyZW1lbnQuCisJKEhJTE9fUkVHTlVNKTogRGVmaW5lLgorCShlbnVtIHJlZ19jbGFzcyk6IEFkZCBISUxPX1JFRy4KKwkoUkVHX0NMQVNTX05BTUVTKTogQWRkICJISUxPX1JFRyIuCisJKFJFR19DTEFTU19DT05URU5UUyk6IEFkZCBISUxPX1JFRyBpbml0aWFsaXplciwgYW5kIGFkanVzdCBTVF9SRUdTCisJYW5kIEFMTF9SRUdTIGluaXRpYWxpemVycy4KKwkoU0VDT05EQVJZX1JFTE9BRF9DTEFTUyk6IFJlbW92ZS4KKwkoU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUyk6IERlZmluZS4KKwkoU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBEZWZpbmUuCisJKFJFR0lTVEVSX01PVkVfQ09TVCk6IFRyZWF0IEhJTE9fUkVHIGFzIE1EX1JFR1MuCisJKFJFR0lTVEVSX05BTUVTKTogQWRkIGluaXRpYWxpemF0aW9uIGxpbmUuCisJKERFQlVHX1JFR0lTVEVSX05BTUVTKTogQWRkICJhY2N1bSIuCisJKiBtaXBzL21pcHMubWQ6IEZvciBlYWNoIGluc3RydWN0aW9uIHdoaWNoIHNldHMgSEkgb3IgTE8sIGNsb2JiZXIKKwlISUxPX1JFR05VTSB3aXRoIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOk1PREUgTiAiPWEiKSkuICBDaGFuZ2UKKwllYWNoIGV4cGxpY2l0IHJlZmVyZW5jZSB0byByZWdpc3RlciA2NiB0byByZWdpc3RlciA2Ny4KKwkobXVsc2lkaTMpOiBDaGFuZ2UgdG8gZGVmaW5lX2V4cGFuZC4KKwkobXVsc2lkaTNfaW50ZXJuYWwpOiBOZXcgbmFtZSBvZiBvbGQgbXVsc2lkaTMuCisJKG11bHNpZGkzXzY0Yml0KTogTmV3IGluc24uCisJKHVtdWxzaWRpMyk6IENoYW5nZSB0byBkZWZpbmVfZXhwYW5kLgorCSh1bXVsc2lkaTNfaW50ZXJuYWwpOiBOZXcgbmFtZSBvZiBvbGQgdW11bHNpZGkzLgorCSh1bXVsc2lkaTNfNjRiaXQpOiBOZXcgaW5zbi4KKwkobWFkZGRpXzY0Yml0LCB1bWFkZGlfNjRiaXQpOiBOZXcgaW5zbnMuCisJKG1vdmRpX2ludGVybmFsMik6IEFkZCBjYXNlIGZvciBzZXR0aW5nIEhJTE9fUkVHIHRvIHplcm8uCisJKHJlbG9hZF9pbmRpLCByZWxvYWRfb3V0ZGkpOiBOZXcgZGVmaW5lX2V4cGFuZHMuCisJKG1vdnNpX2ludGVybmFsMSwgbW92c2lfaW50ZXJuYWwyKTogQWRkIGNhc2VzIGZvciBzZXR0aW5nIE1EX1JFR1MKKwl0byB6ZXJvLCBhbmQgZm9yIHNldHRpbmcgYSBnZW5lcmFsIHJlZyB0byBISUxPX1JFRy4KKwkocmVsb2FkX291dHNpKTogTmV3IGRlZmluZV9leHBhbmQuCisJKiBtaXBzL21pcHMuYyAobWlwc19yZWdfbmFtZXMpOiBBZGQgImFjY3VtIi4KKwkobWlwc19zd19yZWdfbmFtZXMpOiBMaWtld2lzZS4KKwkobWlwc19yZWdub190b19jbGFzcyk6IE1hcCBISUxPX1JFR05VTSB0byBISUxPX1JFRy4KKwkobWlwc19tb3ZlXzF3b3JkKTogSGFuZGxlIG1vdmluZyBISUxPX1JFR05VTSB0byBhIGdlbmVyYWwKKwlyZWdpc3Rlci4gIE1ha2Ugc3VyZSB0aGF0IHRoZSBub3JtYWwgTURfUkVHIGNhc2VzIGFyZW4ndCB1c2VkIGZvcgorCUhJTE9fUkVHTlVNLiAgSGFuZGxlIG1vdmluZyB6ZXJvIHRvIGEgTURfUkVHLgorCShtaXBzX21vdmVfMndvcmRzKTogTWFrZSBzdXJlIHRoYXQgdGhlIG5vcm1hbCBNRF9SRUcgY2FzZXMgYXJlbid0CisJdXNlZCBmb3IgSElMT19SRUdOVU0uICBIYW5kbGUgbW92aW5nIHplcm8gdG8gYSBNRF9SRUcuCisJKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgbWlwc19jaGFyX3RvX2NsYXNzIGZvciAnYScgYW5kICdiJy4KKwkobWlwc19zZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogQWRkIGluX3AgYXJndW1lbnQuICBIYW5kbGUKKwlISUxPX1JFR05VTS4KKworTW9uIE1hciAyNyAwNzoxNjowNSAxOTk1ICBXYXJuZXIgTG9zaCAgPGltcEB2aWxsYWdlLm9yZz4KKworCSogZ2NjLmM6IFJlbW92ZWQgX19OZXRCU0RfXyBmcm9tIGNvbmRpdGlvbmFsLgorCURlY2xhcmUgc3RyZXJyb3IgaWYgSEFWRV9TVFJFUlJPUiBpcyBkZWZpbmVkOyBvdGhlcndpc2UKKwlkZWNsYXJlIHN5c19lcnJsaXN0IGFuZCBzeXNfbmVyci4KKwkobXlfc3RyZXJyb3IpOiBOZXcgZnVuY3Rpb24uCisKK0ZyaSBNYXIgMjQgMTg6MDg6MTQgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHB5dGhvbi5jeWdudXMuY29tPgorCisJKiBpMzg2L2xpbnV4LmggKExJQl9TUEVDKTogRG9uJ3QgdHJ5IHRvIGxpbmsgd2l0aCBsaWJyYXJpZXMgd2UKKwlrbm93IG9ubHkgZXhpc3QgaW4gYXJjaGl2ZSBmb3JtIHVubGVzcyAtc3RhdGljLgorCitGcmkgTWFyIDI0IDE2OjEyOjE2IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKG11bHRpbGliLmgpOiBEZXBlbmQgb24gTWFrZWZpbGUsIG5vdCBjb25maWcuc3RhdHVzLgorCitGcmkgTWFyIDI0IDE1OjAxOjE3IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAvcnM2MDAwLmggKFRBUkdFVF9NVUxUSVBMRV9TRVQpOiBOZXcgdGFyZ2V0X2ZsYWdzIGJpdCB0aGF0CisJaW5kaWNhdGVzIC1tbXVsdGlwbGUgb3IgLW1uby1tdWx0aXBsZSB3YXMgZXhwbGljaXRseSBwYXNzZWQgYnkgdGhlCisJdXNlciwgYW5kIG5vdCBzZXQgYXMgcGFydCBvZiB0aGUgY3B1IGRlZmF1bHRzLgorCShUQVJHRVRfU1dJVENIRVMpOiBTZXQgVEFSR0VUX01VTFRJUExFX1NFVCBiaXQgZm9yIGJvdGggLW1tdWx0aXBsZQorCWFuZCAtbW5vLW11bHRpcGxlLgorCisJKiByczYwMDAvcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogSWYgLW1tdWx0aXBsZSBvcgorCS1tbm8tbXVsdGlwbGUgd2FzIGV4cGxpY2l0bHkgdXNlZCwgZG9uJ3Qgb3ZlcnJpZGUgdGhlIHNldHRpbmcgd2l0aAorCXRoZSBwcm9jZXNzb3IgZGVmYXVsdC4KKworV2VkIE1hciAyMiAyMTo0MjoxMyAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGk5NjAvaTk2MC5jIChpOTYwX2Z1bmN0aW9uX2FyZ19hZHZhbmNlKTogRW5zdXJlIGFsbCByZWdzIG1hcmtlZAorCWFzIHVzZWQgaWYgc3RhY2sgaXMgYWxzbyB1c2VkIChmb3IgdmFfc3RhcnQpLgorCShpOTYwX3NldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBSZXdyaXRlIHRvIGJlIHNpbWlsYXIgdG8gSW50ZWwncworCXZlcnNpb24sIGJ1dCBkb24ndCBhbGxvY2F0ZSByZWcgYmxvY2sgdW5sZXNzIG5lY2Vzc2FyeS4KKwkqIGdpbmNsdWRlL3ZhLWk5NjAuaCAodmFyYXJncyB2YV9zdGFydCk6IFNhdmUgZzE0IGV4cGxpY2l0bHkuCisJQWNjb3VudCBmb3IgYXJndW1lbnRzIHByZWNlZGluZyB2YV9hbGlzdC4KKworV2VkIE1hciAyMiAxMzoyNDo1NSAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAYWRkZXIuY3lnbnVzLmNvbT4KKworCSogcGEuYyAoc2luZ2xlbW92ZV9zdHJpbmcpOiBIYW5kbGUgU0Ztb2RlIGNvbnN0YW50cyBhZ2Fpbi4gIFNpbXBsaWZ5LgorCSh6ZGVwaV9jaW50X3ApOiBNYWtlIHNvbWUgdmFyaWFibGVzIEhPU1RfV0lERV9JTlQuCisJKGxoc19sc2hpZnRfY2ludF9vcGVyYW5kKTogTGlrZXdpc2UuCisJKG91dHB1dF9hbmQpOiBMaWtld2lzZS4KKwkob3V0cHV0X2lvcik6IExpa2V3aXNlLgorCitXZWQgTWFyIDIyIDEyOjQwOjA5IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogc2gubWQgKHVkaXZzaTMpOiBEb24ndCBjbG9iYmVyIHJlZ2lzdGVyIDYuCisJKHVkaXZzaTMsIGRpdnNpMywgbXVsc2kzX2NhbGwpOiBVc2UgYSBwc2V1ZG8tcmVnIHdpdGggcmVnY2xhc3MgJ3onCisJZm9yIG91dHB1dCByYXRoZXIgdGhhbiBoYXJkIHJlZ2lzdGVyIDAuCisJKGJsb2NrX21vdmVfcmVhbCk6IERvbid0IGNsb2JiZXIgcmVnaXN0ZXJzIDQgYW5kIDUuCisKKwkqIG1pcHMuYyAobWlwc19zZWxlY3Rfc2VjdGlvbik6IEFwcGx5IGNvbnN0YW50IERFQ19JTklUSUFMIHRlc3RzCisJb25seSB0byBWQVJfREVDTHMuCisKK1dlZCBNYXIgMjIgMDM6NTM6MTcgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcuc3ViIChybTQwMCwgcm02MDApOiBOZXcgbWFjaGluZSBuYW1lcy4KKwkoc2luaXg1LiosIHNpbml4KTogTmV3IG9zIGFsaWFzZXMuCisJKG1pcHMtc2llbWVucyk6IERlZmF1bHQgb3MgdG8gc3lzdjQuCisKK01vbiBNYXIgMjAgMjE6NTY6NDcgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwlNZXJnZWQgUGF1bCBFZ2dlcnQncyBwYXRjaCB0byBjY2NwLmMgb2YgV2VkIE1hciAgOCAxODoyMTo1MSAxOTk1OgorCSogY3BwbGliLmMgKGRvX2luY2x1ZGUpOiBGaXggdHlwZSB0eXBvOiBwY2ZidWZsaW1pdCBpcyBjaGFyICosIG5vdCBpbnQuCisKKwlNZXJnZWQgRG91ZyBFdmFucycgcGF0Y2ggdG8gY2NjcC5jIG9mIE1vbiBGZWIgMjcgMTc6MDY6NDcgMTk5NToKKwkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogQ2hlY2sgZm9yIHJlZHVuZGFudCBmaWxlIGJlZm9yZSBvcGVuaW5nIGluCisJcmVsYXRpdmUgcGF0aCBjYXNlLiAgRG9uJ3QgY2FsbCBmc3RhdCB1bm5lY2Vzc2FyaWx5LgorCisJTWVyZ2VkIEouVC4gQ29ua2xpbidzIHBhdGNoIHRvIGNjY3AuYyBvZiBXZWQgRmViIDIyIDIwOjI5OjMxIDE5OTU6CisJKiBjcHBlcnJvci5jOiAgUmVtb3ZlZCBfX05ldEJTRF9fIGZyb20gY29uZGl0aW9uYWwuCisKKwlNZXJnZWQgS2VubmVyJ3MgcGF0Y2ggdG8gY2NjcC5jICYgY2V4cC55IG9mIFR1ZSBTZXAgMjAgMTc6NDk6NDcgMTk5NDoKKwkqIGNwcGV4cC5jIChzdHJ1Y3Qgb3BlcmF0aW9uKTogIE1ha2UgdmFsdWUgYnkgSE9TVF9XSURFX0lOVC4KKwkoY3BwX3BhcnNlX2V4cHIpOiAgQ2hhbmdlIHJldHVybiB0eXBlIHRvIEhPU1RfV0lERV9JTlQuCisJKiBjcHBsaWIgKGV2YWxfaWZfZXhwcik6ICBMaWtld2lzZS4KKwkoZG9faWYsIGRvX2VsaWYpOiAgVXBkYXRlIGFwcHJvcHJpYXRlbHkuCisJKiBjcHBsaWIuaCAoY3BwX3BhcnNlX2V4cHIpOiAgUmVtb3ZlZCwgdG8gYXZvaWQgZGVmaW5pbmcgSE9TVF9XSURFX0lOVC4KKworCU1lcmdlZCBQYXVsIEVnZ2VydCdzIHBhdGNoIHRvIGNjY3AuYyBvZiBNb24gQXVnICA4IDE5OjQyOjA5IDE5OTQ6CisJKiBjcHBsaWIuYyAoY3JlYXRlX2RlZmluaXRpb24pOiBXYXJuIGFib3V0IGAjZGVmaW5lIGFAJywgc2luY2UgYQorCWRpYWdub3N0aWMgaXMgbm93IHJlcXVpcmVkIChzZWUgSVNPIFRDMSdzIGFkZGl0aW9uIHRvIHN1YmNsYXVzZSA2LjgpLgorCUFsc28gd2FybiBhYm91dCBgI2RlZmluZSBpcy1lbXB0eSh4KSAoIXgpJy4KKworVHVlIE1hciAyMSAwMDoxMDo1MCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiB4LXBhIChDQyk6IEFkZCAiLURic2Q0XzQiLgorCitNb24gTWFyIDIwIDE4OjQwOjMxIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiB0b3BsZXYuYyAocHJpbnRfZXJyb3JfZnVuY3Rpb24pOiAgTmV3IGZ1bmN0aW9uIGhvb2suCisJKGRlZmF1bHRfcHJpbnRfZXJyb3JfZnVuY3Rpb24pOiAgTmV3IGZ1bmN0aW9uLiAgRGVmYXVsdCB2YWx1ZQorCW9mIHByaW50X2Vycm9yX2Z1bmN0aW9uLiAgQ29kZSBtb3ZlZCBoZXJlIGZyb20gcmVwb3J0X2Vycm9yX2Z1bmN0aW9uLgorCShyZXBvcnRfZXJyb3JfZnVuY3Rpb24pOiAgVXNlIHByaW50X2Vycm9yX2Z1bmN0aW9uIGhvb2suCisKK01vbiBNYXIgMjAgMjA6Mjc6NDMgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjY2NwLmMgKGRvX3hpZmRlZik6IEhhbmRsZSBjKysgY29tbWVudHMuCisJKGRvX2VuZGlmKTogTGlrZXdpc2UuCisKK01vbiBNYXIgMjAgMTU6MzE6NDUgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSAoaTM4NiBjb25maWd1cmF0aW9ucyk6IFByZXBlbmQgaTM4Ni8gdG8gdC1jcnQqLgorCitNb24gTWFyIDIwIDA3OjU4OjA0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0bXQuYyAoZml4dXBfZ290b3MpOiBBZGQgbWlzc2luZyBjYWxsIGZyb20gbGFzdCBjaGFuZ2UuCisKKwkqIG9iamMvbWlzYy5jOiBQdXQgQWxwaGEtc3BlY2lmaWMgZGVjbHMgYmVmb3JlICNpbmNsdWRlIG9mIHJ1bnRpbWUuaC4KKworCSogYWxwaGEuaCAoRVhUUkFfU0VDVElPTlMpOiBXcml0ZSB6ZXJvcyBmaXJzdCB0aW1lIGluIC5yZGF0YS4KKworU2F0IE1hciAxOCAxNjozNzoyNCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzLCBjYXNlIFNVQlJFRyk6IFNldCByZWdfY2hhbmdlc19zaXplIGV2ZW4KKwlmb3IgaW50ZWdlciBtb2Rlcy4KKwkobWFya191c2VkX3JlZ3MpOiBTZXQgcmVnX2NoYW5nZXNfc2l6ZSBmb3IgUkhTLCBpZiBuZWNlc3NhcnkuCisJKiBjb21iaW5lLmMgKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogU2V0IHJlZ19jaGFuZ2VzX3NpemUsIGlmIG5lZWRlZC4KKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IFJlbG9hZCBhIFNVQlJFRyBpZiBwYXJhZG94aWNhbCBhbmQKKwljbGFzcyBpcyBDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUuCisJKiByZWxvYWQxLmMgKGdlbl9yZWxvYWQpOiBIYW5kbGUgcGFyYWRveGljYWwgU1VCUkVHcy4KKwkqIGFscGhhLmggKFNFQ09OREFSWV97SU5QVVQsT1VUUFVUfV9SRUxPQURfQ0xBU1MpOiBOZWVkIEdFTkVSQUxfUkVHUworCWZvciBwYXJhZG94aWNhbCBTVUJSRUcgYW5kIEZMT0FUX1JFR1MuCisJKFNFQ09OREFSWV9ORUVERURfTU9ERSk6IFVzZSBhY3R1YWwgbW9kZSBmb3IgNCBieXRlcyBvciB3aWRlci4KKwkqIGFscGhhLm1kIChtb3ZzaSk6IEFsbG93IEZQIHJlZ3MgYW5kIGFkZCBjYXNlIGZvciBzdG9yZSBvZiBGUCByZWcuCisJUmVtb3ZlIGN2dGxxIGZyb20gTUVNIHRvIEZQIHJlZyBjYXNlLgorCisJKiBydGwuaCAoZW1pdF9pbnNuc19hZnRlcik6IEFkZCBkZWNsYXJhdGlvbi4KKwkqIHN0bXQuYyAoZml4dXBfZ290b3MpOiBEbyBhIGNsZWFudXAgZm9yIGEgYmxvY2sgd2hlbiBpdCBpcyBleGl0ZWQKKwlldmVuIGlmIGxhYmVsIGlmIG5vdCBkZWZpbmVkIHlldC4KKworCSogZnVuY3Rpb24uYyAocG9wX2Z1bmN0aW9uX2NvbnRleHQpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2U7CisJcmVmZXJlbmNlIG9sZCB2YWx1ZSBvZiBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgYmVmb3JlIHdlIG1vZGlmeSBpdC4KKworRnJpIE1hciAxNyAyMTo1Nzo0NCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBIYW5kbGUgLVdyZXR1cm4tdHlwZSBwcm9wZXJseQorCWZvciBpbmxpbmVzIHdlIGFyZW4ndCBjb21waWxpbmcgeWV0LgorCitGcmkgTWFyIDE3IDIxOjI2OjQ4IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogbGliZ2NjMi5jIChfX3JlZ2lzdGVyX2V4Y2VwdGlvbnMpOiBIYW5kbGUgZW1wdHkgdGFibGVzLgorCitGcmkgTWFyIDE3IDExOjQ4OjMxIDE5OTUgIERvdWdsYXMgUnVwcCAgKGRydXBwQGNzLndhc2hpbmd0b24uZWR1KQorCisJKiBpMzg2L3dpbm50LmMgKHdpbm50X2Z1bmN0aW9uX3Byb2xvZ3VlKTogRGVsZXRlZC4KKwkoZ2VuX3N0ZGNhbGxfc3VmZml4KTogTmV3IGZ1bmN0aW9uLgorCitUaHUgTWFyIDE2IDE3OjM2OjUyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBzdnI0LmggKExJTktfU1BFQyk6IElmIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeSAtaCBuYW1lLCB1c2UgdGhlCisJb3V0cHV0IGZpbGUgbmFtZSwgaWYgYW55LgorCSogc3BhcmMvc29sMi5oIChMSU5LX1NQRUMpOiBEaXR0by4gIEFsc28sIGlmIHRoZSB1c2VyIGRpZCBub3QKKwlzcGVjaWZ5IC1SIHBhdGgsIGFkZCBhbiAtUiBmb3IgZWFjaCAtTC4KKworCU1vdmUgU3VuT1MgNC1zcGVjaWZpYyBhc3NlbWJsZXIgc3dpdGNoZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UuCisJKiBtNjhrL3N1blsyM10uaCAoQVNNX1NQRUMpOiBBZGQgJXtSfSAle2p9ICV7Sn0gJXtofSAle2QyfQorCSV7a2VlcC1sb2NhbC1hcy1zeW1ib2xzOi1MfS4KKwkqIGkzODYvc3VuLmggKEFTTV9TUEVDKTogQWRkICV7Un0gJXtrZWVwLWxvY2FsLWFzLXN5bWJvbHM6LUx9LgorCSogc3BhcmMvc3BhcmMuaCAoQVNNX1NQRUMpOiBEaXR0by4KKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFJlbW92ZSAle1J9ICV7an0gJXtKfSAle2h9ICV7ZDJ9CisJJXtrZWVwLWxvY2FsLWFzLXN5bWJvbHM6LUx9IGZyb20gYXNzZW1ibGVyIHJ1bGVzLgorCitUaHUgTWFyIDE2IDE2OjU4OjA5IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAvZWFiaS1jdG9ycy5jOiBOZXcgZmlsZSwgaGFuZGxlIEMrKyBzdGF0aWMgY29uc3RydWN0b3JzCisJYW5kIGRlc3RydWN0b3JzIHdpdGhvdXQgcmVxdWlyaW5nIGFueXRoaW5nIGVsc2UgZnJvbSBhIGxpYmMuCisKKwkqIHJzNjAwMC90LWVhYmkgKExJQjJGVU5DU19FWFRSQSk6IEJ1aWxkIGVhYmktY3RvcnMuYy4KKworCSogcnM2MDAwL2VhYmkuYXNtOiBEbyBub3QgbG9hZCB1cCByZWdpc3RlciAyIGlmIHRoZXJlIGlzIG5vIC5nb3QKKwlzZWN0aW9uLiAgSnVtcCB0byB0aGUgX19kb19nbG9iYWxfY3RvcnMgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZgorCXByb2Nlc3NpbmcgdG8gY2FsbCBDKysgc3RhdGljIGNvbnN0cnVjdG9ycywgYW5kIGl0IHdpbGwgcmV0dXJuIHRvCisJX19lYWJpJ3MgY2FsbGVyLiAgVXNlIG5vcm1hbCB2b2xhdGlsZSByZWdpc3RlcnMsIGluc3RlYWQgb2Ygc2F2aW5nCisJYW5kIHJlc3RvcmluZyByZWdpc3RlcnMgMzAgYW5kIDMxLgorCisJKiByczYwMDAvZWFiaS5oIChTVEFSVEZJTEVfU1BFQyk6IERlZmluZSBhcyBudWxsLgorCShMSUJfU1BFQyk6IERpdHRvLgorCShFTkRGSUxFX1NQRUMpOiBEaXR0by4KKwkoTElCR0NDX1NQRUMpOiBBbHdheXMgbG9vayBmb3IgbGliZ2NjLmEuCisKK1RodSBNYXIgMTYgMTc6MDU6MTQgMTk5NSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSwgY2FzZSBTQVZFX0VYUFIpOiBOZXcgY2FzZS4KKwkod2Fybl9pZl91bnVzZWRfdmFsdWUsIGNhc2UgTk9QX0VYUFIpOiBPSyBpZiBDQUxMX0VYUFIgaW5zaWRlLgorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBBbGxvdyBhbGlnbm1lbnQgZm9yIFRZUEVfREVDTHMuCisKKwkqIE1ha2VmaWxlLmluICh4c3lzLXByb3Rvcy5oKTogRml4IHR5cG8gaW4gLVUgb3BlcmFuZC4KKworVGh1IE1hciAxNiAxMzo0OToxMCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAcnRsLmN5Z251cy5jb20+CisKKwkqIGNwcGxpYi5jLCBjcHBsaWIuaDogIE5ldyBmaWxlcyAtIGEgQyBQcmVQcm9jZXNzb3IgbGlicmFyeS4KKwkqIGNwcGhhc2guYywgY3BwaGFzaC5oLCBjcHBhbGxvYy5jLCBjcHBlcnJvci5jLCBjcHBleHAuYzoKKwlOZXcgZmlsZXMgLSB1dGlsaXR5IGZlYXR1cmVzIHVzZWQgYnkgY3BwbGliLgorCSogY3BwbWFpbi5jOiAgTmV3IGZpbGUgLSBjcHAgcmVwbGFjZW1lbnQgbWFpbiBwcm9ncmFtIGZvciBjcHBsaWIuCisJKiBNYWtlZmlsZS5pbjogIE5ldyBydWxlcyB0byBidWlsZCBjcHBtYWluLgorCitUaHUgTWFyIDE2IDE2OjExOjA1IDE5OTUgIERvdWdsYXMgUnVwcCAgKGRydXBwQGNzLndhc2hpbmd0b24uZWR1KQorCisJKiBpMzg2L3dpbm50LmggKEZVTkNUSU9OX1BST0xPR1VFLCBIQVZFX3Byb2JlLCBnZW5fcHJvYmUpOiBEZWxldGVkLgorCShFTkNPREVfU0VDVElPTl9JTkZPLCBWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKTogTmV3IG1hY3JvLgorCitUaHUgTWFyIDE2IDE1OjU4OjI0IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoYXBwbHlfZGlzdHJpYnV0aXZlX2xhdywgY2FzZSBTVUJSRUcpOiBGaXggdHlwbyB3aGVuCisJY2hlY2tpbmcgZm9yIHBhcmFkb3hpY2FsIFNVQlJFRy4KKworV2VkIE1hciAxNSAxODo0NTowOCAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzEtdGVzdC5jOiBSZW5hbWVkIGZyb20gY3Jvc3MtdGVzdC5jLgorCSogTWFrZWZpbGUuaW4gKExJQkdDQzFfVEVTVCk6IFJlbmFtZWQgZnJvbSBDUk9TU19URVNULgorCShhbGwuY3Jvc3MpOiBEZWxldGUgJChFTlFVSVJFKSBkZXBlbmRlbmN5LgorCShsaWJnY2MxLXRlc3QpOiBSZW5hbWVkIGZyb20gY3Jvc3MtdGVzdC4KKwlEZWxldGUgdW5uZWNlc3NhcnkgZ2NjLWNyb3NzIGFuZCAkKExJQkdDQykgZGVwZW5kZW5jaWVzLgorCUxpbmsgd2l0aCAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYgorCWAkKEdDQ19GT1JfVEFSR0VUKSAtLXByaW50LWxpYmdjYy1maWxlLW5hbWVgLgorCShsaWJnY2MxLXRlc3Qubyk6IFJlbmFtZWQgZnJvbSBjcm9zcy10ZXN0Lm8uCisJQ2hhbmdlIGdjYy1jcm9zcyBkZXBlbmRlbmN5IHRvIHhnY2Mgc2luY2UgdGhlIGxhdHRlciBpcyB1c2VkLgorCitXZWQgTWFyIDE1IDEzOjQ5OjIxIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBOb3cgdGFrZXMgYSB0cmVlICdjb250ZXh0JyBpbnN0ZWFkIG9mCisJYSBib29sZWFuICd0b3BsZXZlbCcgYXMgYW4gYXJndW1lbnQuICBJZiAnY29udGV4dCcgaXMgbm90CisJY3VycmVudF9mdW5jdGlvbl9kZWNsLCBjcmVhdGUgYSBuZXcgb2JzdGFjayBmb3IgdGhlIG5ldyBmdW5jdGlvbi4KKwlBbHNvIHNhdmUgaW5saW5lX29ic3RhY2tzLgorCShyZXN0b3JlX3RyZWVfc3RhdHVzKTogTm8gbG9uZ2VyIHRha2VzIGEgc2Vjb25kIGFyZ3VtZW50LiAgQWxzbworCXJlc3RvcmUgaW5saW5lX29ic3RhY2tzLgorCSh0ZW1wb3JhcnlfYWxsb2NhdGlvbik6IENsZWFyIGlubGluZV9vYnN0YWNrcy4KKwkocGVybWFuZW50X2FsbG9jYXRpb24pOiBGcmVlIHVwIHRoZSBvYnN0YWNrcyBpbiBpbmxpbmVfb2JzdGFja3MuCisKKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBmaWVsZHMgY29udGFpbnNfZnVuY3Rpb25zIGFuZAorCWlubGluZV9vYnN0YWNrcy4KKworCSogZnVuY3Rpb24uYyAocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogTm93IHRha2VzIGEgdHJlZQorCSdjb250ZXh0JyBpbnN0ZWFkIG9mIGEgYm9vbGVhbiAndG9wbGV2ZWwnIGFzIGFuIGFyZ3VtZW50LgorCUFsc28gc2F2ZSBjdXJyZW50X2Z1bmN0aW9uX2NvbnRhaW5zX2Z1bmN0aW9ucy4KKwkocHVzaF9mdW5jdGlvbl9jb250ZXh0KTogUGFzcyBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgdG8gaXQuCisJKHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20pOiBUYWtlcyAnY29udGV4dCcgaW5zdGVhZCBvZiAndG9wbGV2ZWwnLgorCVNldCBjdXJyZW50X2Z1bmN0aW9uX2NvbnRhaW5zX2Z1bmN0aW9ucyBwcm9wZXJseS4KKwkocG9wX2Z1bmN0aW9uX2NvbnRleHQpOiBQYXNzIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCB0byBpdC4KKworV2VkIE1hciAxNSAxNDo1MzowOSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogcnM2MDAwL3JzNjAwMC5tZCAoYWJzc2kyKTogVHVybiBpbnRvIGEgZGVmaW5lX2V4cGFuZC4gIElmCisJVEFSR0VUX1BPV0VSLCBkbyBvbGQgY29kZSB0aGF0IHVzZXMgdGhlIGFicyBpbnN0cnVjdGlvbi4gIElmIG5vdCwKKwlkbyBhYnMgaW4gdGhyZWUgaW5zdHJ1Y3Rpb25zLCB1c2luZyBhIHRlbXBvcmFyeSByZWdpc3Rlciwgd2hpY2gKKwllbmFibGVzIGdlbmVyYXRpbmcgbW9yZSByZWFzb25hYmxlIGNvZGUgZm9yIHNuZS4gIEFkZCBhIHJlY29nbml6ZXIKKwlmb3IgbmVnYXRpdmUgb2YgdGhlIGFic29sdXRlIHZhbHVlLiAgQWRkIGRlZmluZV9zcGxpdHMgZm9yIHRoZQorCVBvd2VyUEMuCisJKHNuZSBpbnNuKTogQWRkIGEgcmVjb2duaXplciBmb3Igc25lIG9uIHRoZSBQb3dlclBjIHRvIHVzZSB0d28KKwlpbnN0cnVjdGlvbnMsIGNvbXBhcmVkIHRvIHRoZSBmb3VyIGdlbmVyYXRlZCB1c2luZyB0aGUgYWJzb2x1dGUKKwl2YWx1ZSBpbnNuLgorCitUdWUgTWFyIDE0IDE4OjM4OjQwIDE5OTUgIEouVC4gQ29ua2xpbiAgPGp0Y0BjeWdudXMuY29tPgorCisJKiBtNjhrLm1kICh7YWRkLHN1YixtdWwsZGl2fVtzZHhdZjMpOiBBZGQgbmV3IHBhdHRlcm5zIGZvciByZWNvZ25pemluZworCVNJbW9kZSwgSEltb2RlLCBhbmQgUUltb2RlIG9wZXJhbmRzLgorCitNb24gTWFyIDEzIDE4OjU5OjM2IEVTVCAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmggKENQUF9TUEVDKTogQWRkIFBQQzQwMy4KKwkocHJvY2Vzc29yX3R5cGUpOiBBZGQgUFBDNDAzLgorCShSVFhfQ09TVFMpOiBBZGQgUFBDNDAzLgorCSogcG93ZXJwYy5oIChDUFBfU1BFQyk6IEFkZCBQUEM0MDMuCisJKiBzeXN2NC5oIChDUFBfU1BFQyk6IEFkZCBQUEM0MDMuCisJKiByczYwMDAuYyAocHJvY2Vzc29yX3RhcmdldF90YWJsZSk6IEFkZCBQUEM0MDMuCisJKiByczYwMDAubWQgKGRlZmluZV9hdHRyIGNwdSBhbmQgZnVuY3Rpb24gdW5pdHMpOiBBZGQgUFBDNDAzLgorCitNb24gTWFyIDEzIDE0OjQwOjIzIDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAvcnM2MDAwLm1kIChjYWxsLCBjYWxsX3ZhbHVlIGluc25zKTogRG8gbm90IHB1dCBhIG5vcAorCWFmdGVyIGEgYmwgaW5zdHJ1Y3Rpb24gb24gU3lzdGVtIFYuNCBhbmQgZUFCSS4KKworCSogcnM2MDAwL3N5c3YuNCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIHN1cHBvcnQgZm9yCisJLW1uby10cmFjZWJhY2sgdG8gc3VwcHJlc3MgdGhlIFYuNCB0cmFjZWJhY2sgd29yZC4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IERvbid0IHB1dCBvdXQgYSB0cmFjZWJhY2sgd29yayBpZgorCS1tbm8tdHJhY2ViYWNrLgorCitNb24gTWFyIDEzIDEzOjM2OjM3IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiB0LXN2cjQsIGkzODYvdC17Y3J0cGljLHNvbDJ9LCBtODhrL3Qtc3ZyNCwgc3BhcmMvdC1zb2wyOgorCVVzZSAtZlBJQywgcmF0aGVyIHRoYW4gLWZwaWMsIGZvciBidWlsZGluZyBjcnRzdHVmZi4KKworU2F0IE1hciAxMSAxNzoyNzowOCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlOiBVc2UgYWl4M25ld2FzLmggZm9yIEFJWCAzLjIuNCBhbmQgNS4KKwkqIHJzNjAwMC9haXg0MS5oOiBVbmRlZmluZSBBU01fT1VUUFVUX0VYVEVSTkFMeyxfTElCQ0FMTH0uCisJKiByczYwMDAvYWl4M25ld2FzLmg6IE5ldyBmaWxlLiAgRGVmaW5lIEFTTV9TUEVDIHRvIC11LCBhbmQKKwl1bmRlZmluZSBBU01fT1VUUFVUX0VYVEVSTkFMeyxfTElCQ0FMTH0uCisKK1NhdCBNYXIgMTEgMDY6NDI6NTAgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBQcm9wZXJseSBoYW5kbGUgZGVjbCB3aG9zZSBERUNMX05BTUUKKwlwb2ludHMgdG8gYSBUWVBFX0RFQ0wgd2l0aCBhIHplcm8gVFlQRV9OQU1FLgorCitGcmkgTWFyIDEwIDE4OjE4OjMzIDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBjeWdudXMuY29tPgorCisJKiBwYS5oIChQUk9NT1RFX01PREUpOiBEZWZpbmUuCisKK0ZyaSBNYXIgMTAgMTQ6Mzc6NTggMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9yZWNvcmRfdHlwZV9uYW1lKTogSWYgVFlQRV9OQU1FIGlzCisJYSBUWVBFX0RFQ0wsIGdldCBuYW1lIGZyb20gREVDTF9OQU1FLgorCitGcmkgTWFyIDEwIDE0OjA5OjI2IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogYXJtL3Jpc2NpeC5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBSZW5hbWVkIGZyb20KKwlBUk1fRVhUUkFfVEFSR0VUX1NXSVRDSEVTLgorCSogYXJtL3Jpc2NpeDEtMS5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KKwkqIGFybS5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KKwkoVEFSR0VUX0hBUkRfRkxPQVQsIFRBUkdFVF9TT0ZUX0ZMT0FUKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1zb2Z0LWZsb2F0LCAtbWhhcmQtZmxvYXQuCisJKEJZVEVTX0JJR19FTkRJQU4pOiBEZWxldGUgI2lmbmRlZi8jZW5kaWYuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgLW1zb2Z0LWZsb2F0LCBkaXNhYmxlIGZwIHJlZ3MuCisJKEZVTkNUSU9OX1ZBTFVFKTogUjE2IGlzIHJldHVybiByZWcgb25seSBpZiAhLW1zb2Z0LWZsb2F0LgorCShMSUJDQUxMX1ZBTFVFKTogTGlrZXdpc2UuCisJKiBhcm0ubWQgKGFsbCBmcCBwYXR0ZXJucyk6IENvbmRpdGlvbmFsaXplIG9uIFRBUkdFVF9IQVJEX0ZMT0FULgorCSgqbW92c2Zfc29mdF9pbnNuLCAqbW92ZGZfc29mdF9pbnNuKTogTmV3IHBhdHRlcm5zLgorCitGcmkgTWFyIDEwIDEzOjUzOjQ2IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3RhcmdldCk6IEV4aXQgYXQgdGhlIHRvcCBpZiB0aGUKKwlicmFuY2ggaW4gU0VRIGlzIG5vdCBhIHNpbmdsZSBzZXQuCisKKwkqIHNoLm1kIChtb3ZkaSBkZWZpbmVfc3BsaXQsIG1vdmRmIGRlZmluZV9zcGxpdCk6IENvcnJlY3QgaW5kZW50YXRpb24KKwlhbmQgZm9ybWF0dGluZy4gIE1ha2UgdGhlIGNvbmRpdGlvbiBmYWlsIGlmIGFuIG9wZXJhbmQgaXMgYSBNRU0KKwl3aXRoIGFuIGF1dG8taW5jIGFkZHJlc3MuCisKKwkqIHZhcmFzbS5jIChjb3B5X2NvbnN0YW50KTogQ29weSBvcGVyYW5kIG9mIEFERFJfRVhQUiBpZiBpdCBpcyBhCisJY29uc3RhbnQuCisKKwkqIG1pcHMvYWJpNjQuaCAoU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6IENvcnJlY3QgYXJndW1lbnRzIHRvCisJbW92ZV9ibG9ja19mcm9tX3JlZyBjYWxsLgorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogV2hlbiBvZmZzZXQgaXMgemVybywgbWFrZSBuZXcgTUVNCisJYmVmb3JlIHNldHRpbmcgTUVNX1ZPTEFUSUxFX1AuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMsIGNhc2UgJ28nKTogQWNjZXB0IGEgZnVsbHkgcmVsb2FkZWQKKwlhdXRvLWluY3JlbWVudCBhZGRyZXNzLgorCisJKiBjb21iaW5lLmMgKG1heF91aWRfY3VpZCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCisJKElOU05fQ1VJRCk6IENhbGwgYWJvcnQgaWYgSU5TTiBpcyBvdXQgb2YgcmFuZ2UuCisJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogU2V0IG1heF91aWRfY3VpZC4gIFNldCB1aWRfY3VpZCBkaXJlY3RseQorCWluc3RlYWQgb2YgdGhyb3VnaCBJTlNOX0NVSUQuCisJKGdldF9sYXN0X3ZhbHVlKTogVXNlIHByZXZfcmVhbF9pbnNuIGluc3RlYWQgb2YgcHJldl9ub25ub3RlX2luc24uCisJSWdub3JlIFVTRSBpbnNucyBnZW5lcmF0ZWQgYnkgY29tYmluZS4KKworRnJpIE1hciAxMCAxMzo0NzowOCAxOTk1ICBSb2QgQmFybWFuICA8cm9kYkBjcy51YmMuY2E+CisKKwkqIG02OGsvZnBnbnVsaWIuYyAoX19maXhkZnNpKTogQ2F0Y2ggdmFsdWVzIDwgMC41IGluIG1hZ25pdHVkZS4KKworRnJpIE1hciAxMCAxMjowMjozMyAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBGaXggYHR5cGVkZWYgc3RydWN0IHRlcm07JyBvbiBocHBhMS4xLWhwLWhwdXg5LgorCitGcmkgTWFyIDEwIDA1OjUwOjExIDE5OTUgIE9saXZlciBLZWxsb2dnICAoT2xpdmVyLktlbGxvZ2dAUlNUMTMuREFTQS5EQk1BSUwuZDQwMC5kZSkKKworCSogMTc1MGEuYyAoc2VjdG5hbWUpOiBSZXZlcnNlIEluaXQgYW5kIE5vcm1hbC4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzLCBjYXNlIFBMVVMpOiBBZGQgY2FzZSBmb3IgTEFCRUxfUkVGLgorCShwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgTEFCRUxfUkVGKTogU3BsaXQgZm9tIFNZTUJPTF9SRUYuCisJKHByaW50X29wZXJhbmRfYWRkcmVzcywgY2FzZSBDT0RFX0xBQkVMKTogTmV3IGNhc2UuCisJKEFTTV9GSUxFX0VORCk6IERlbGV0ZS4KKwkqIDE3NTBhLmggKEZVTkNUSU9OX0VQSUxPR1VFKTogUmVzdG9yZSBzdGFjayBiZWZvcmUgZnJlZWluZyBsb2NhbCB2YXJzLgorCShERUZBVUxUX1NJR05FRF9DSEFSKTogTm93IDEuCisJKERBVEFfU0VDVElPTl9BU01fT1ApOiBVc2UgcHNldWRvLW9wIGZvciByZWFkLW9ubHkgZGF0YSAobGF0ZXIgY29waWVkKS4KKwkoSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0FTQ0lJKTogU3BsaXQgaW50byBtdWx0aXBsZSBsaW5lcyBpZiBsb25nLgorCShBU01fT1VUUFVUX3tDSEFSLFNIT1JULElOVCxMT05HX0lOVH0pOiBTcGxpdCB1cC4KKwkoQVNNX09VVFBVVF9DT01NT04pOiBDYWxsIGNoZWNrX3NlY3Rpb24uCisKK1RodSBNYXIgIDkgMTI6NDY6NTMgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAobW92c2YpOiBEbyBub3QgY2FsbCB0cnVuY2Rmc2YyIGZvciBub24gUG93ZXJQQworCXdoZW4gZXhwYW5kaW5nIGEgc3RvcmUgdG8gbWVtb3J5IGFuZCAtbXNvZnQtZmxvYXQgd2FzIHVzZWQuCisKK1RodSBNYXIgIDkgMDg6NTE6MzUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogSGFuZGxlIG5ldyBwYXJhbWV0ZXIgQVRUUklCVVRFUy4KKwkqIGMtdHJlZS5oIChzdGFydF9mdW5jdGlvbik6IEFkZCBuZXcgcGFyYW1ldGVyLgorCSogYy1sYW5nLmMgKGZpbmlzaF9maWxlKTogUGFzcyBuZXcgcGFybSB0byBzdGFydF9mdW5jdGlvbi4KKwkqIG9iamMtYWN0LmMgKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yLCByZWFsbHlfc3RhcnRfbWV0aG9kKTogTGlrZXdpc2UuCisJKiBjLXBhcnNlLmluIChmbmRlZiwgbmVzdGVkX2Z1bmN0aW9uKTogUGFzcyBwcmVmaXhfYXR0cmlidXRlcworCXRvIHN0YXJ0X2Z1bmN0aW9uLgorCShzZXRzcGVjcyk6IFNhdmUgcHJlZml4X2F0dHJpYnV0ZXMgaW4gZGVjbHNwZWNfc3RhY2suCisJKGRlY2wgcnVsZXMpOiBSZXN0b3JlIHByZWZpeF9hdHRyaWJ1dGVzIGFsb25nIHdpdGggY3VycmVudF9kZWNsc3BlY3MuCisJKHNldGF0dHJzKTogQ29uY2F0ZW5hdGUgcHJlZml4X2F0dHJpYnV0ZXMgdG8gcHJldmlvdXMgdmFsdWUuCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBIYW5kbGUgcHJlZml4IGFuZCBzdWZmaXggYXR0cmlidXRlcworCXRoZSBzYW1lIHdheS4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogRml4IHR5cG8gaW4gcHJpbnRpbmcgbGFyZ2UgSU5URUdFUl9DU1QuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IENvbnNpc3RlbnRseSB1c2UgREVDTF9TSVpFIGZvcgorCWV2ZXJ5dGhpbmcuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBGaXggdHlwbyBpbiB0ZXN0aW5nIGZvcgorCXBvaW50ZXIgdG8gZnVuY3Rpb24gdHlwZS4KKworCSogdmFyYXNtLmMgKHJlY29yZF9jb25zdGFudF8xKTogSGFuZGxlIE5PTl9MVkFMVUVfRVhQUi4KKwlSZXdyaXRlIHRvIHVzZSBzd2l0Y2ggaW5zdGVhZCBvZiBpZi90aGVuL2Vsc2VpZi9lbHNlLgorCitXZWQgTWFyICA4IDE4OjIxOjUxIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBGaXggdHlwZSB0eXBvOiBwY2ZidWZsaW1pdCBpcyBjaGFyICosIG5vdCBpbnQuCisKK1dlZCBNYXIgIDggMTc6MzA6MjkgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb3JjZV9maXRfdHlwZSk6IEFsd2F5cyBwcm9wYWdhdGUgT1ZFUkZMT1cuCisKKwkqIHJ0bC5kZWYgKElOTElORV9IRUFERVIpOiBBZGQgbmV3ICJlIiBmaWVsZC4KKwkqIHJ0bC5oIChGT1JDRURfTEFCRUxTKTogTmV3IGZpZWxkOyBvdGhlciBmaWVsZHMgYWRqdXN0ZWQuCisJKGdlbl9pbmxpbmVfaGVhZGVyX3J0eCk6IE5ldyBwYXJtIEZPUkNFRF9MQUJFTFMuCisJKiBlbWl0LXJ0bC5jIChnZW5faW5saW5lX2hlYWRlcik6IEFkZCBuZXcgcGFybSBGT1JDRURfTEFCRUxTLgorCSogaW50ZWdyYXRlLmMgKGluaXRpYWxpemVfZm9yX2lubGluZSwgb3V0cHV0X2lubGluZV9mdW5jdGlvbik6CisJSGFuZGxlIEZPUkNFRF9MQUJFTFMuCisKK1dlZCBNYXIgIDggMTM6NDc6MjAgMTk5NSAgSmFzb24gTWVycmlsbCAgKGphc29uQGN5Z251cy5jb20pCisKKwkqIGFscGhhLmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IEFkZCAtcnBhdGguCisJKExJTktfU1BFQyk6IFBhc3MgdGhyb3VnaCAtdGFzbyBhbmQgLXJwYXRoLgorCSogYWxwaGEvb3NmMTIuaCAoTElOS19TUEVDKTogRGl0dG8uCisKK1dlZCBNYXIgIDggMDk6NTk6NTYgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9lYWJpLmFzbTogUmV3cml0ZSBzbyB0aGF0IHRoZSBpbml0aWFsaXplZCBwb2ludGVycyBnbworCWludG8gdGhlIC5nb3QyIHNlY3Rpb24sIHdoaWNoIGFsbG93cyBlYWJpLmFzbSB0byBiZSBhc3NlbWJsZWQgd2l0aAorCXRoZSAtbXJlbG9jYXRhYmxlIG9wdGlvbi4gIE1vdmUgdGhlIGRhdGEgcGlja2VkIHVwIGZyb20gdGhlIGJsCisJaW5zdHJ1Y3Rpb24gdG8gYmVmb3JlIHRoZSB0cmFjZWJhY2sgdGFnLgorCisJKiByczYwMDAvc3lzdjQuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX1JFTE9DQVRBQkxFIGlmIC1tcmVsb2NhdGFibGUKKwlzd2l0Y2ggaXMgdXNlZC4KKworCSogbGliZ2NjMi5jIChfX25ld19oYW5kbGVyKTogRG9uJ3QgaW5pdGlhbGl6ZSB0aGUgcG9pbnRlciB2YXJpYWJsZQorCXdpdGggdGhlIGFkZHJlc3Mgb2YgX19kZWZhdWx0X25ld19oYW5kbGVyLCB3aGljaCBtYXkgbm90IHdvcmsgaW4KKwlzb21lIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbXMuCisJKF9fYnVpbHRpbl9uZXcpOiBJZiBfX25ld19oYW5kbGVyIGlzIE5VTEwsIGNhbGwgdGhlIGZ1bmN0aW9uCisJX19kZWZhdWx0X25ld19oYW5kbGVyLgorCitUdWUgTWFyICA3IDE3OjM0OjU5IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogaTk2MC5oIChQUk9DRVNTX1BSQUdNQSk6IERlZmluZS4KKwkoUk9VTkRfVFlQRV9BTElHTik6IFBhc3MgbWF4aW11bSBvZiBDT01QVVRFRCBhbmQgU1BFQ0lGSUVEIHRvCisJaTk2MF9yb3VuZF9hbGlnbi4KKwkoUk9VTkRfVFlQRV9TSVpFKTogRGVsZXRlLgorCSogaTk2MC5jIChwcm9jZXNzX3ByYWdtYSk6IFVuY29tbWVudCwgYW5kIHJld3JpdGUgZm9yIGdjYyAyLgorCShpOTYwX3JvdW5kX3NpemUpOiBEZWxldGUuCisJKGk5NjBfcm91bmRfYWxpZ24pOiBEb24ndCBhZGp1c3Qgc3VnZ2VzdGVkIGFsaWdubWVudCBkb3dud2FyZC4KKwlSZXN0cmljdCBhbGlnbm1lbnQgdG8gdmFsdWUgc2V0IGJ5ICNwcmFnbWEgYWxpZ24uCisKK1R1ZSBNYXIgIDcgMTI6MTQ6NDYgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUgKHNwYXJjNjQtKi1lbGYpOiBBZGQgY3J0YmVnaW4ubywgY3J0ZW5kLm8gdG8gZXh0cmFfcGFydHMuCisJKiBzcGFyYy9zcDY0LWVsZi5oIChUQVJHRVRfVkVSU0lPTik6IERlZmluZS4KKwkoQ1BQX1BSRURFRklORVMpOiBEZWxldGUgc3VuLCBzcGFyYywgdW5peC4gIERlbGV0ZSBPUyBhc3NlcnRpb25zLgorCShBU01fU1BFQyk6IERlZmluZS4KKwkoTElOS19TUEVDKTogRGVsZXRlIHNvbGFyaXMgc3R1ZmYsIHRoaXMgaXMgYW4gZW1iZWRkZWQgdGFyZ2V0LgorCShTVEFSVEZJTEVfU1BFQywgRU5ERklMRV9TUEVDKTogRGVmaW5lLgorCitNb24gTWFyICA2IDE3OjU0OjAxIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uKTogRml4IHR5cG8gaW4gaW5zdGFsbGF0aW9uIG9mIGNwcC4KKwlMaWtld2lzZSB3aXRoIGdjYy1jcm9zcy4KKworTW9uIE1hciAgNiAwMjoyOTowNSAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBwYS5tZCAobW92c2ljYyk6IE5ldyBleHBhbmRlci4KKworRnJpIE1hciAgMyAxMzozNDoyMCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9TUEVDKTogSWYgLW1yZWxvY2F0YWJsZSB3YXMgcGFzc2VkIHRvCisJY29tcGlsZXIsIHBhc3MgaXQgb24gdG8gdGhlIGFzc2VtYmxlci4KKworRnJpIE1hciAgMyAxMjoxMToyOCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGZpeGluY2x1ZGVzOiBBZGQgZml4ZXMgZm9yIFZ4V29ya3MgaGVhZGVyIGZpbGVzLgorCSogZ2luY2x1ZGUvc3RkZGVmLmg6IElmIFZ4V29ya3MgdHlwZWRlZiBtYWNyb3MgYXJlIGRlZmluZWQsIGludm9rZQorCXRoZW0gYXMgYXBwcm9wcmlhdGUuCisKK0ZyaSBNYXIgIDMgMDU6NDg6NTQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAoZHVtcF9zaW5nbGVfbWFjcm8pOiBGaXggdHlwbzogJSB3YXNuJ3QgcHJvcGVybHkKKwlkb3VibGVkIGluIHByaW50ZiBmb3JtYXRzLgorCitUaHUgTWFyICAyIDE5OjQ0OjAyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBDTEVBTlVQX1BPSU5UX0VYUFIpOiBGb3JjZSB0aGUgb3BlcmFuZCBvdXQKKwlvZiBtZW1vcnkgYmVmb3JlIHJ1bm5pbmcgY2xlYW51cHMuCisKK1RodSBNYXIgIDIgMTk6MTU6MjQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAocmVzY2FuKTogUHJldmVudCBhY2NpZGVudGFsIHRva2VuLXBhc3RpbmcgdG8KKwlnZXQgIT0sICo9LCAvPSwgPT0sIG9yIF49LgorCitUaHUgTWFyICAyIDE1OjM3OjEzIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBBdm9pZCBzcHVyaW91cyB3YXJuaW5nCisJY29tcGFyaW5nIGVudW1lcmF0b3IgdG8gdW5zaWduZWQgdmFyaWFibGUuCisKK1RodSBNYXIgIDIgMTg6MTg6MzggMTk5NSAgSi5ULiBDb25rbGluICA8anRjQG5ldGJzZC5vcmc+CisKKwkqIG02OGsubWQgKHNxcnRzZjIsc3FydGRmMik6IFVzZSBmcCBwcmVjaXNpb24gc3BlY2lmaWVycy4KKworVGh1IE1hciAgMiAxODowOTowMSAxOTk1ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogYy1sZXguYyAoeXlsZXgsIGNhc2UgIU5PVF9GTE9BVCk6IFJlbW92ZSBwcmV2aW91cyBjaGFuZ2UuCisKK1RodSBNYXIgIDIgMTU6MjY6NTAgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGJvb3RzdHJhcCopOiBQYXNzIG5ldyBTVEFHRV9QUkVGSVggdG8gcmVjdXJzaXZlIG1ha2VzLgorCitXZWQgTWFyICAxIDE0OjUyOjE2IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogaTk2MC9pOTYwLWNvZmYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBEZWZpbmUuCisJKENUT1JTX1NFQ1RJT05fQVNNX09QLCBEVE9SU19TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KKwkoRVhUUkFfU0VDVElPTlMsIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogRGVmaW5lLgorCShDVE9SU19TRUNUSU9OX0ZVTkNUSU9OLCBEVE9SU19TRUNUSU9OX0ZVTkNUSU9OKTogRGVmaW5lLgorCShJTlRfQVNNX09QKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWZpbmUuCisJKiBpOTYwL3Z4OTYwLWNvZmYuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUuCisJKENQUF9TUEVDKTogRGVmaW5lLgorCShDQzFfU1BFQyk6IERlZmF1bHQgdG8gLW1jYS4KKworV2VkIE1hciAgMSAxMToxMDo1NCAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogcnM2MDAwL3JzNjAwMC5jIChvdXRwdXRfcHJvbG9ndWUpOiBEbyBub3QgZW1pdCB0aGUgd29yZCB0aGF0CisJZ2l2ZXMgdGhlIFBDIHJlbGF0aXZlIGxvY2F0aW9uIHRvIHRoZSBsb2NhbCBHT1QgdGFibGUgZm9yIHRoZQorCS1tcmVsb2NhdGFibGUgb3B0aW9uIGhlcmUuCisJKiByczYwMDAvc3lzdjQuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IEVtaXQgaXQgaGVyZS4KKworCSogdC1lYWJpIChNVUxUSUxJQl9PUFRJT05TLCBNVUxUSUxJQl9ESVJOQU1FUyk6IEJ1aWxkIC1tc29mdC1mbG9hdAorCWFuZCAtbXJlbG9jYXRhYmxlIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LgorCisJKiByczYwMDAvcG93ZXJwYy5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSB0aGUgY3B1IGFuZCBtYWNoaW5lIGFzCisJcG93ZXJwYywgbm90IHJzNjAwMC4KKworCSogbGliZ2NjMi5jIChfdW53aW5kX2Z1bmN0aW9uKTogQ2xvbmUgZm9yIHBvd2VycGMsIHVzaW5nIHRoZQorCVBvd2VyUEMgbW5lbW9uaWNzLgorCisJKiByczYwMDAvcnM2MDAwLm1kICh1bWluc2kzLCB1bWF4c2kzKTogU2lsZW5jZSB3YXJuaW5ncyB0aGF0CisJLTIxNDc0ODM2NDggaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBhIHNpZ25lZCBpbnRlZ2VyIG9uIDMyLWJpdAorCWhvc3RzLgorCitXZWQgTWFyICAxIDA2OjQ4OjMxIDE5OTUgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGZvbGQtY29uc3QuYyAoZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSk6IERvbid0IGNoZWNrIFRSRUVfQ09ERQorCW9mIEVYUDsgbGV0IGdldF9pbm5lcl9yZWZlcmVuY2UgZGVjaWRlIGlmIGhhdmUgcmVmZXJlbmNlLgorCUFsbG93IG5vIGJpdCByZWZlcmVuY2UgaWYgaGF2ZSBBTkRfTUFTSy4KKwkoYWxsX29uZXNfbWFza19wKTogVXNlIHRyZWVfaW50X2NzdF9lcXVhbCwgbm90IG9wZXJhbmRfZXF1YWxfcC4KKwkodW5leHRlbmQpOiBOZXcgZnVuY3Rpb24uCisJKGZvbGRfdHJ1dGhvcCk6IEZvciBjb25zdGFudCBjYXNlcywgdXNlIG5ldyBmdW5jdGlvbiwgcmV3b3JrCisJY29udmVyc2lvbiwgYW5kIHdhcm4gaWYgY29tcGFyaXNvbiBjYW4gbmV2ZXIgYmUgdHJ1ZS4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogRG8gY29udmVyc2lvbiBpbiB0d28gc3RlcHMgZm9yIHByb21vdGVkIGxocy4KKworU2VlIENoYW5nZUxvZy45IGZvciBlYXJsaWVyIGNoYW5nZXMuCmRpZmYgLS1naXQgYS9nY2MvQ2hhbmdlTG9nLjIgYi9nY2MvQ2hhbmdlTG9nLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlMDkyYwotLS0gL2Rldi9udWxsCisrKyBiL2djYy9DaGFuZ2VMb2cuMgpAQCAtMCwwICsxLDcyMjkgQEAKK1RodSBKYW4gMzEgMDA6MzM6MzMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ2hlY2sgZWFjaCBsaWJjYWxsIGZvciByZWdzIGl0IHVzZXMKKwlidXQgZG9lcyBub3QgbWVudGlvbiBpbiB0aGUgZXF1aXZhbGVudCB2YWx1ZS4KKwlUbyBtb3ZlIHRoZSBsaWJjYWxsLCB3ZSBtdXN0IGhhdmUgYXQgbW9zdCBvbmUgc3VjaCByZWcKKwlhbmQgaXQgbXVzdCBiZSBtb3ZlZCBhcyB3ZWxsLgorCShsaWJjYWxsX290aGVyX3JlZyk6IE5ldyBzdWJyb3V0aW5lLgorCSogcnRsYW5hbC5jIChyZWNvcmRfZXhjZXNzX3JlZ3MpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHRyZWUuYyAoZ2NjX29ic3RhY2tfaW5pdCk6IE5ldyBmdW5jdGlvbi4KKwkoaW5pdF9vYnN0YWNrcywgc2F2ZV90cmVlX2NvbnRleHQpOiBVc2UgdGhhdC4KKwkoT0JTVEFDS19DSFVOS19TSVpFKTogTmV3IHBhcmFtZXRlci4KKwkqIHhtLW5leHQuaDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKG02OGsvbmV4dCk6IFVzZSB0aGF0IGZpbGUuCisKKwkqIGZsYWdzLmggKGZsYWdfbm9fY29tbW9uKTogRGVjbGFyZSBuZXcgZmxhZyB0byB0cmVhdCBleHRlcm5hbCBkZWZzCisJYXMgQU5TSSBzcGVjaWZpZXMgKGkuZS4gbm90IGFzIGNvbW1vbikuCisJKiB0b3BsZXYuYyAoZmxhZ19ub19jb21tb24sIGZfb3B0aW9ucyk6IFN1cHBvcnQgLWZuby1jb21tb24uCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBEb24ndCBvdXRwdXQgYSBjb21tb24gaWYKKwlmbGFnX25vX2NvbW1vbiBpcyBzZXQuCVRyZWF0IGFzIGlmIGluaXRpYWxpemVkIHRvIDAuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IERlZmluZSBfX0FTU0VNQkxFUl9fIGZvciAuUyBmaWxlLgorCisJKiB0bS1haXgzODYuaCAoQVNNX09VVFBVVF9MT0NBTCk6IE9rIHRvIHVzZSBic3MsIHNpbmNlIG5vIHNoYXJlZCBsaWJzLgorCShMSU5LX1NQRUMpOiBQYXNzIHRocm91Z2ggYWxsIC1LIGFuZCAtVCBvcHRpb25zLgorCSogeG0tYWl4Mzg2LmggKFRSVUUsIEZBTFNFKTogVW5kZWYgaWYgYWxyZWFkeSBkZWYsIHRvIGF2b2lkIHdhcm5pbmcuCisKKwkqIHRtLW02OGsuaCAoVEFSR0VUXzY4MDQwLCBUQVJHRVRfNjgwNDBfT05MWSk6IE5ldyBtYWNoaW5lIGZsYWdzLgorCShUQVJHRVRfU1dJVENIRVMpOiBBbHRlcm5hdGl2ZXMgdG8gc2V0IHRoZW0uCisJKiB0bS1uZXh0LmggKFRBUkdFVF9ERUZBVUxUKTogQ2hhbmdlZCB0byAwNDA3IGZvciA2ODA0MC4KKworCSogb3V0LW02OGsuaCAoc3RhbmRhcmRfNjg4ODFfY29uc3RhbnRfcCk6ICBBbHdheXMgcmV0dXJuIDAKKwlmb3IgVEFSR0VUXzY4MDQwIHNpbmNlIGZtb3ZlY3IgaXMgbm8gbG9uZ2VyIGltcGxlbWVudGVkIGluIGhhcmR3YXJlLgorCisJKiBtNjhrLm1kIChmdHJ1bmNkZjIsIGZ0cnVuY3NmMik6IERvbid0IGVtaXQgZmludHJ6IGZvcgorCVRBUkdFVF82ODA0MCwgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIGltcGxlbWVudGVkIGluIGhhcmR3YXJlLgorCShtdWxkZjMpOiBEb24ndCB1c2UgZnNjYWxlIG9uIDY4MDQwLCBzaW5jZSBub3QgaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuCisKKwkqIHRvcGxldi5jIChvcHRpbWl6ZSk6IE5vdyBzdG9yZXMgc3BlY2lmaWVkIG9wdGltaXphdGlvbiBsZXZlbC4KKwkobWFpbik6IEtlZXAgdGhlIGxhcmdlc3Qgb3B0aW1pemF0aW9uIGxldmVsIHNwZWNpZmllZC4KKwlIYW5kbGUgYW55IGludGVnZXIuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IERvbid0IG1ha2UgYW4gZXh0ZXJuIGdsb2JhbCBmb3IgLXRyYWRpdGlvbmFsCisJaWYgaXQgdXNlcyBhbnkgbG9jYWwgdHlwZXMuCisKKwkqIHRtLXN1bjM4NmkuaCAoUENDX0JJVEZGSUVMRF9UWVBFX01BVFRFUlMpOiBVc2UgMSBhcyB2YWx1ZS4KKworV2VkIEphbiAzMCAxMjo0MToxNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKHN5cy9zeXN0eXBlcy5oKTogRWRpdCB0aGlzIHRvIGhhbmRsZSBfU0laRV9ULCBldGMuCisKKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IEFsbG9jYXRlIHZhciByZWYgY2hhaW4gbGluaworCXdoaWxlIGluIHRoZSBwcm9wZXIgZnVuY3Rpb24ncyBvYnN0YWNrLgorCisJKiBmb2xkLWNvbnN0LmMgKGNvbnN0X2Jpbm9wKTogRG9uJ3QgY3Jhc2ggZm9yIHJlYWwvMCBpZiBoYXZlIGluZmluaXR5LgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBEb24ndCBtYWtlIGxvZyBsaW5rIGZvciBoYXJkIHJlZyBpbiBhc20gaW5zbi4KKworV2VkIEphbiAzMCAwNzo0NTozMyAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBJbmRpY2F0ZSB3aGF0IGluc25zIGNvbnN0aXR1dGUgZWFjaAorCWJhc2ljIGJsb2NrLgorCitUdWUgSmFuIDI5IDEyOjM1OjQyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliMS4qLCBnbnVsaWIyLiopOiBEZWNsYXJlIHRoZW0gcGhvbnkgdGFyZ2V0cy4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgbWVzc2FnZSBpZiBUUkVFX1BFUk1BTkVOVCBpcyB3cm9uZy4KKwkqIHRyZWUuYyAob2JqZWN0X3Blcm1hbmVudF9wKTogTmV3IGZ1bmN0aW9uLgorCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBSZW1vdmUgREVDTF9MQU5HX0ZMQUdfMTAuCisKK1R1ZSBKYW4gMjkgMTA6MDc6NDggMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKG1pbnVzL3hvci9hbmQsIG5lZy9uZS9jb21wYXJlL2FuZCk6IERlbGV0ZSB0aGVzZS4gIFRoaXMKKwlzaG91bGQgYmUgZG9uZSBieSBjb21iaW5lLgorCShjb21wYXJlIG9wZXJhdG9yKTogRWxpbWluYXRlIGV4Y2VwdCB3aGVuIGEgU0VUX1NSQy4KKwkqIHRtLW04OGsuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiAtZm9taXQtZnJhbWUtcG9pbnRlciBpcyBhCisJZGVmYXVsdCBvcHRpbWl6YXRpb24uCisKK01vbiBKYW4gMjggMTI6NTI6MTEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuaCAoREVDTF9WSVJUVUFMX1ApOiBSZW5hbWVkIGZyb20gVFJFRV9WSVJUVUFMLgorCShzdHJ1Y3QgdHJlZV9jb21tb24pOiBFbGltaW5hdGUgdmlydHVhbF9mbGFnLgorCShzdHJ1Y3QgdHJlZV9kZWNsKTogQWRkIHZpcnR1YWxfZmxhZy4KKworCSogTWFrZWZpbGUuaW4gKGVucXVpcmUubyk6IFBhc3MgLUROT19TVERERUYuCisKKwkqIG02OGsubWQgKHRhYmxlanVtcCk6IE5vdyBoYXZlIGEgZGVmaW5lX2V4cGFuZCB0aGF0IGRvZXMKKwlkaWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRSwKKwlhbmQgYSBzZXBhcmF0ZSBkZWZpbmVfaW5zbiBmb3IgZWFjaCBjYXNlLgorCisJKiBmdW5jdGlvbi5oIChvdXRlcl9mdW5jdGlvbl9jaGFpbik6IERlY2xhcmUgdGhlIHZhcmlhYmxlLgorCisJKiB0cmVlLmMgKGRlYnVnX29ic3RhY2spOiBGaXggdHlwb3MuCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2NvbW1vbik6IEZpeCB0eXBvLgorCisJKiBNYWtlZmlsZS5pbiAoR05VTElCMV9UQVJHRVQsIEdOVUxJQjJfVEFSR0VUKTogVmFyaWFibGVzIGRlbGV0ZWQuCisJKGdudWxpYik6IERlcGVuZCBvbiBnbnVsaWIxLnRhcmdldCBhbmQgZ251bGliMi50YXJnZXQgZXhwbGljaXRseS4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogVXNlIERFQ0xfVklSVFVBTF9QLCBub3QgVFJFRV9WSVJUVUFMLgorCisJKiBjcGx1cy10cmVlLmggKFRSRUVfUFJJVkFURSwgVFJFRV9QUk9URUNURUQpOiAjaWYgMC4KKworCSogY2V4cC55IChrZXl3b3Jkcyk6IENhc3QgbmFtZXMgZm9yIHBhcmVucyB0byBVX0NIQVIgKi4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IEZpeCB0eXBvIHNldHRpbmcgc3dpdGNoZXNbbl9zd2l0Y2hlc10uYXJnLgorCisJKiBsb29wLmMgKGxvb3BfcmVnX3VzZWRfYmVmb3JlX3ApOiBDaGVjayBpbnNucyBiZWZvcmUgSU5TTiwgbm90IGFmdGVyLgorCisJKiBvYmpjLWFjdGlvbnMuYyAob2JqY19maW5pc2gpOiBSZW5hbWVkIGZyb20gbGFuZ19maW5pc2guCisJKiBvYmpjLXBhcnNlLnkgKHByb2dyYW0pOiBDYWxsIG9iamNfZmluaXNoIGF0IHRoZSBlbmQuCisKKwkqIENoYW5nZXMgZnJvbSBNYXR0aGV3IFNlbGYgKG1zZWxmQG5leHQuY29tKToKKworCSogb2JqYy1wYXJzZS55OgkgU2luY2Ugb2JqYy1wYXJzZS55IHdhcyBzbyBvdXQgb2YgZGF0ZSB3aXRoCisJcmVzcGVjdCB0byBjLXBhcnNlLnksIEkgc3RhcnRlZCBvdmVyIHdpdGggYy1wYXJzZS55IGFuZAorCXJlaW50ZWdyYXRlZCB0aGUgT2JqZWN0aXZlLUMgbW9kaWZpY2F0aW9ucy4gIE5vdyB0aGF0CisJT2JqZWN0aXZlLUMgaXMgd29ya2luZyBJIGhvcGUgdGhhdCBvYmpjLXBhcnNlLnkgd2lsbCBiZSBrZXB0CisJbW9yZSB1cCB0byBkYXRlLi4uLiAgSSBkaWQgbm90IHJlLWludGVncmF0ZSB0aGUgbGV4ZXIgc2luY2UgSQorCWRvbid0IGhhdmUgZ3BlcmYgd29ya2luZy4gIEkgc2ltcGx5IGN1dCBhbmQgcGFzdGVkIHdoYXQKKwlTdGFsbG1hbiBoYWQgaW4gb2JqYy1wYXJzZS55LiAgU29tZW9uZSB3aXRoIGFjY2VzcyB0byBncGVyZgorCXNob3VsZCByZS1nZW5lcmF0ZSB0aGlzIHN0dWZmLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoY29tcF9tZXRob2Rfd2l0aF9wcm90bywKKwljb21wX3Byb3RvX3dpdGhfcHJvdG8pOgkgU3RhbGxtYW4ncyBjaGFuZ2UgdG8gdXNlIHRoZQorCWZ1bmN0aW9ucyBlbmRfdGVtcG9yYXJ5X2FsbG9jYXRpb24gYW5kCisJcmVzdW1lX3RlbXBvcmFyeV9hbGxvY2F0aW9uIGlzIGluY29ycmVjdCwgc2luY2UgaXQgYWx3YXlzCisJbGVhdmVzIGFsbG9jYXRpb24gdGVtcG9yYXJ5LCB3aGV0aGVyIGl0IHdhcyBiZWZvcmUgb3Igbm90LiAKKworCVBlcmhhcHMgdGhlIHB1c2ggYW5kIHBvcCBmdW5jdGlvbnMgd291bGQgZG8gdGhlIHRyaWNrLi4uLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoZ2V0X2FyZ190eXBlX2xpc3QpOiAgVXNlIG5ldyBmdW5jdGlvbgorCWdyb2t0eXBlbmFtZV9pbl9wYXJtX2NvbnRleHQuCisKKwkqIG9iamMtYWN0aW9ucy5jIChfT0JKQ19TRUxFQ1RPUl9SRUZFUkVOQ0VTX2RlY2wsCisJX09CSkNfU0VMRUNUT1JfUkVGRVJFTkNFU19pZCk6CVJlbW92ZWQuCisKKwkqIG9iamMtYWN0aW9ucy5jIChzeW50aF9tb2R1bGVfcHJvbG9ndWUpOiAgRWxpbWluYXRlZCBjb2RlIHRvCisJZm9yd2FyZCBkZWNsYXJlIHRoZSBzZWxlY3RvciByZWZlcmVuY2VzIGFycmF5LgorCisJKiBvYmpjLWFjdGlvbnMuYyAoaW5pdF9vYmpjX3N5bXRhYik6ICBFbGltaW5hdGVkIGNvZGUgdG8KKwlpbml0aWFsaXplICJyZWZzIiBmaWVsZCBpbiBvYmpjX3N5bXRhYiBzdHJ1Y3R1cmUgKHdoaWNoIGlzCisJbm93IHZlc3RpZ2lhbCkuCisKKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSk6IFJld3JvdGUuCisKKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9zZWxlY3Rvcl9yZWZlcmVuY2UpOiAgTmV3IHJvdXRpbmUuCisKKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9tZXNzYWdlX2V4cHIsIGJ1aWxkX3NlbGVjdG9yX2V4cHIpOgorCVVzZSBuZXcgcm91dGluZS4KKworCSogY29uZmlnL3RtLW5leHQuaCAoR09fSUZfSU5ERVhBQkxFX0JBU0UpOiAgRG9uJ3QgdXNlIHBjCisJcmVsYXRpdmUgYWRkcmVzc2luZyBmb3IgTEFCRUxfUkVGJ3MuICBTaW5jZSBicmFuY2ggdGFibGVzIGFyZQorCWluIHRoZSBjb25zdCBzZWN0aW9uLCB3ZSB0cmVhdCBMQUJFTF9SRUYncyBsaWtlIFNZTUJPTF9SRUYncworCWhlcmUuICBPdGhlcndpc2UgaW52YWxpZCBhZGRyZXNzZXMgd2VyZSBiZWluZyBnZW5lcmF0ZWQuCisKKwkqIGNvbmZpZy90bS1uZXh0LmggKENBU0VfVkVDVE9SX1BDX1JFTEFUSVZFLCBDQVNFX1ZFQ1RPUl9NT0RFKToKKwlVc2UgYWJzb2x1dGUgYnJhbmNoIHRhYmxlcyByYXRoZXIgdGhhbiByZWxhdGl2ZSBvbmVzLgorCisJKiBjb25maWcvdG0tbmV4dC5oIChBU01fT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogIE91dHB1dAorCWFuIE5fU08gc3ltYm9sIHdpdGggbm8gbmFtZSB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIG1vZHVsZS4KKwlUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IHNjYXR0ZXJlZCBsb2FkaW5nIG9uIHRoZSBOZVhULgorCisJKiBjb25maWcvb3V0LW5leHQuYyAoaGFuZGxlX3ByYWdtYSk6ICBDYWxsIHRvIHhyZWFsbG9jIGhhZCB3cm9uZyBhcmdzLgorCisJKiBjb25maWd1cmU6IEVudHJ5IGZvciBOZVhUIG11c3Qgc2V0IG91dF9maWxlIHRvIG91dC1uZXh0LmMuCisKKwkqIGNvbmZpZy9vdXQtbmV4dC5jOiAgVHlwbzogImZsYWdzIiAtPiAiZmxhZ3MuaCIKKworCSogY29uZmlnL3RtLW5leHQuaCAoTElCX1NQRUMpOglCcm91Z2h0IHVwLXRvLWRhdGUuICBUaGVyZQorCWFyZSBwcm9iYWJseSBtb3JlIGNoYW5nZXMgbmVlZGVkIGhlcmUuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbF90b3BfbGV2ZWwpOiAgTmV3IGZ1bmN0aW9uLgkgVGhpcyB3YXMKKwljb3BpZWQgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIG9mIGcrKy4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTWFrZSBhbGxvY2EgZmlyc3QgYXJnIHNpemV0eXBlLgorCisJKiBjLWRlY2wuYyAoZ3Jva3R5cGVuYW1lX2luX3Bhcm1fY29udGV4dCk6IE5ldyBmdW5jdGlvbi4KKworTW9uIEphbiAyOCAwNzowNzowMSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKGxvb3BfcmVnX3VzZWRfYmVmb3JlX3ApOiBEb24ndCB1c2UgSU5TTl9MVUlEIHNpbmNlIElOU04KKwltaWdodCBoYXZlIGJlZW4gbWFkZSBieSBsb29wLmMgZm9yIGFuIG91dGVyIGxvb3AuCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcywgc3RyZW5ndGhfcmVkdWNlKTogUmVwbGFjZSByZWdpc3RlciByZWZlcmVuY2VzCisJaW4gUkVHX05PVEVTIGFzIHdlbGwgYXMgUEFUVEVSTi4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBDYWxsIG1heWJlX2VsaW1pbmF0ZV9iaXYgdHdpY2UsIG5vdCAKKwl0aHJlZSB0aW1lcy4KKwkobWF5YmVfZWxpbWluYXRlX2Jpdik6IERvbid0IGFib3J0IGlmIGVsaW1pbmF0aW9uIGZhaWxzIGV2ZW4gdGhvdWdoCisJd2UgdGhvdWdodCBpdCB3b3VsZG4ndC4JIFRoaXMgY2FuIGhhcHBlbiBpZiBjZXJ0YWluIGluc24gcGF0dGVybnMgCisJYXJlbid0IHZhbGlkLgorCShtYXliZV9lbGltaW5hdGVfYml2XzEpOiBFbnN1cmUgdGhhdCB3ZSBkbyBub3QgY2hhbmdlIHRoZSBpbnNuIGF0CisJYWxsIGlmIGFsbCB0aGUgcmVxdWlyZWQgY2hhbmdlcyBjYW4ndCBiZSBkb25lLgorCitTdW4gSmFuIDI3IDIxOjI2OjI5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbjogUmVuYW1lIGNvbmZpZy1kaXIgYmFjayB0byBjb25maWcuCisKK1NhdCBKYW4gMjYgMTc6NDg6MjIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG9iamMtcGFyc2UueSAocHJvZ3JhbSk6IENhbGwgb2JqY19maW5pc2guCisJKiBvYmpjLWFjdGlvbnMuYyAob2JqY19maW5pc2gpOiBSZW5hbWVkIGZyb20gbGFuZ19maW5pc2guCisKKwkqIG9iamMtYWN0aW9ucy5jLCBvYmpjLXBhcnNlLnk6IE5ldyB2ZXJzaW9uIGZyb20gTmVYVC4KKworU2F0IEphbiAyNiAxNzozNzo0OCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IERpc2FibGUgc3BlY2lhbC1jYXNlIG9mCisJQSA/IEIgOiBDIHdoZW4gQiBhbmQgQyBhcmUgc2ltcGxlLiAgVGhpcyBpcyBub3cgZG9uZSBiZXR0ZXIgYnkganVtcC4KKworU2F0IEphbiAyNiAxMzoxNjo1OCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChUUkVFX1BSSVZBVEUsIFRSRUVfUFJPVEVDVEVELCBUUkVFX1ZJUlRVQUwpOiBOZXcgbWFjcm9zLgorCShzdHJ1Y3QgdHJlZV9jb21tb24pOiBOZXcgZmxhZyBmaWVsZHMuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBHZXQgcmlkIG9mIGNvbmRpdGlvbmFsOyBjYW4gYWx3YXlzIHVzZSB0aGVzZS4KKworCSogY2NjcC5jIChsb29rdXBfaW1wb3J0KTogRG8gcmV0dXJuIC0yIGlmIGZpbGUgZm91bmQuCisJKG1haW4pOiBIYW5kbGUgYC5tJyBzdWZmaXggbGlrZSBgLlMnLgorCisJKiBjb25maWd1cmUgKG02OGsvbmV4dCk6IFVzZSBvdXQtbmV4dC5jLgorCisJKiBXT1JEX1NXSVRDSF9UQUtFU19BUkcgYW5kIFNXSVRDSF9UQUtFU19BUkcgbm93IGdpdmUgIyBvZiBhcmdzLgorCSogZ2NjLmMgKHN0cnVjdCBzd2l0Y2hzdHIpOiBOZXcgZmllbGQgYGFyZ3MnIHJlcGxhY2VzIGBwYXJ0MicuCisJKHByb2Nlc3NfY29tbWFuZCk6IFJlY29yZCBhbGwgdGhlIGFyZ3MgYSBzd2l0Y2ggaGFzLgorCShnaXZlX3N3aXRjaCk6IFBhc3MgYWxsIHRoZSBzdHJpbmdzIGluIGBhcmdzJy4KKworCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9jb21tb24pOiBOb3JtYWxseSBtYWtlIGBjb2RlJyBhbiBlbnVtIHRyZWVfY29kZS4KKworCSogbTY4ay5tZCAodGFibGVqdW1wKTogTmV3IHBhdHRlcm4uCisJKGNhc2VzaSwgZXRjLik6IERlbGV0ZWQuCisKKwkqIHRyZWUuYyAoZGVidWdfb2JzdGFjayk6IE5ldyBmdW5jdGlvbi4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgZGJ4b3V0X2ZpbmlzaCBuZWFyIHRoZSBlbmQuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2ZpbmlzaCk6IE5ldyBmdW5jdGlvbi4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogQWx3YXlzIHByaW50IEVSUk9SX01BUksgbm9kZSBicmllZmx5LiAKKworCSogb2JqYy1hY3Rpb25zLmggKE1FVEhPRF9FTkNPRElORywgQ0xBU1NfQ0FURUdPUllfTElTVCk6IE5ldyBtYWNyb3MuCisKKwkqIGdjYy5jIChleGVjdXRlKTogTWFrZSBmYXRhbCBzaWduYWwgbWVzc2FnZSBjbGVhcmVyLgorCShkZWZhdWx0X2NvbXBpbGVycyk6IEZvciAubSBmaWxlLCBkZWZpbmUgX19PQkpDX18sCisJYW5kIHBhc3MgLWxhbmctb2JqYyBhbmQgLWdlbi1kZWNscyB0byBjYzEuCisKKwkqIGR3YXJmb3V0LmM6IEluY2x1ZGUgb3V0cHV0LmguCisJKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCwgYXNtX291dF9maWxlKTogRXhwbGljaXQgZXh0ZXJuIGRlY2xzIGRlbGV0ZWQuCisJKGFib3J0LCBmYXRhbCk6IEV4cGxpY2l0IGV4dGVybiBkZWNscyBkZWxldGVkLgorCShOT19SRVRVUk4pOiBEZWZpbml0aW9uIGRlbGV0ZWQuCisJKG5hbWVkX2xhYmVscyk6IERvbid0IGRlY2xhcmUgaXQuCisJKG91dHB1dF9zeW1ib2wpOiBEb24ndCB1c2UgaXQuCisJKE1BWFBBVEhMRU4pOiBEb24ndCBkZWZpbmUgdGhpcy4gIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmguCisJKG91dHB1dF9zb3VyY2VfZmlsZV9kaWUpOiBBdm9pZCBsaW1pdCBvbiBmaWxlIG5hbWUgc2l6ZS4KKwkob3V0cHV0X3N5bWJvbHNfZm9yX3N0bXQpOiBEZWxldGVkLgorCShvdXRwdXRfc3ltYm9sc19mb3JfYmxvY2spOiBBZGFwdCB0byB1c2luZyBCTE9DSywgbm90IExFVF9TVE1ULgorCisJKiBjb25maWd1cmU6IFJlbmFtZWQgZnJvbSBgY29uZmlnJy4KKwkqIGNvbmZpZzogRGlyZWN0b3J5IHJlbmFtZWQgYmFjayBmcm9tIGNvbmZpZy1kaXIuCisKK1NhdCBKYW4gMjYgMTk5MAkgUm9uIEd1aWxtZXR0ZSAocmZnIGF0IG5jZC5jb20pCisKKwkqIFJFQURNRS5EV0FSRjogdXBkYXRlZCB0byByZWZsZWN0IGNoYW5nZXMgdG8gZHdhcmZvdXQuYywgdGhlCisJaW5jbHVzaW9uIG9mIGR3YXJmLmggKGFuZCBpdHMgY2hhbmdlcykgYW5kIHRoZSBmYWN0IHRoYXQgdGhlCisJRFdBUkYgc3VwcG9ydCBpcyBubyBsb25nZXIgZGlyZWN0bHkgdGllZCB0byB0aGUgREcgdmVyc2lvbnMgb2YKKwlHQ0MuCisKKwkqIGR3YXJmb3V0LmM6IGluY2x1ZGVkIGEgcGF0Y2ggKHByb3ZpZGVkIGJ5IFJheSBFc3NpY2spIHRvIGFsbG93CisJZHdhcmZvdXQuYyB0byBwcm9wZXJseSBnZXQgYSB2YWx1ZSBmb3IgTUFYUEFUSExFTiBldmVuIG9uIChvbGQpCisJU3lzdGVtIFYuMyBzeXN0ZW1zLgorCisJKiBkd2FyZm91dC5jOiBhZGRlZCBzdXBwb3J0IGZvciBsb25nIGxvbmcgdHlwZXMgKGFzIHN1Z2dlc3RlZCBieQorCVJheSBFc3NpY2spLgorCisJKiBkd2FyZm91dC5jOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgQVRfY29tcF9kaXIgYXR0cmlidXRlLiAgQWxzbywKKwlhcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IGlzCisJbm8gbG9uZ2VyIHBsYWNlZCBpbnRvIGluIHRoZSAuc291cmNlcyBzZWN0aW9uLgorCisJKiBkd2FyZm91dC5jOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgQVRfYWRkcl9yYW5nZXMgYXR0cmlidXRlLgorCisJKiBkd2FyZm91dC5jOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgQVRfcHJvdG90eXBlZCBhdHRyaWJ1dGUuCisKKwkqIGR3YXJmb3V0LmM6IGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBBVF9zcmNfaW5mbyBhdHRyaWJ1dGUuIEFsc28sCisJYXMgcGFydCBvZiB0aGlzIGNoYW5nZSwgdGhlcmUgaXMgbm8gbG9uZ2VyIGEgInNwZWNpYWwiIGVudHJ5CisJYXQgdGhlIHN0YXJ0IG9mIHRoZSAuc3JjaW5mbyBzZWN0aW9uIGZvciBlYWNoIGNvbXBpbGF0aW9uIHVuaXQsCisJYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgInNwZWNpYWwiIGZpbmFsIGVudHJ5IGluIHRoZSAuc3JjaW5mbworCXNlY3Rpb24gaGF2ZSBjaGFuZ2VkICh0byB7IC0xLCAtMSB9KS4KKworCSogZHdhcmZvdXQuYzogbW9kaWZpZWQgdG8gYWxsb3cgYWRkaXRpb25hbCBHTlUgRFdBUkYgZXh0ZW5zaW9ucworCXRvIGJlIGdlbmVyYXRlZCB3aGVuZXZlciB0aGUgY29ycmVzcG9uZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUKKwljb2RlcyBhcmUgZGVmaW5lZCAocHJlc3VtYWJseSB3aXRoaW4gYSBtb2RpZmllZCBkd2FyZi5oIGZpbGUpLgorCisJKiBkd2FyZm91dC5jOiB1c2UgdGhlIHNlY3Rpb24gbmFtZXMgLnNyY2luZm8gYW5kIC5zb3VyY2VzIHJhdGhlcgorCXRoYW4gLmZpbmZvIGFuZCAuZmlsZXMuCSBUaGUgYWRkaXRpb25hbCBzcGVjaWZpY2l0eSBpcyB3YXJyYW50ZWQKKwliZWNhdXNlIHRoZSBEV0FSRiBpbmZvcm1hdGlvbiBtYXkgc29tZWRheSBpbmNsdWRlIGluZm9ybWF0aW9uCisJYWJvdXQgb2JqZWN0IGZpbGVzIGFzIHdlbGwgYXMgc291cmNlIGZpbGVzLgorCisJKiBkd2FyZm91dC5jOiBmaXhlZCBhIGJ1ZyB3aGVyZSBhIHR5cGUgYXR0cmlidXRlIHdhcyBiZWluZyBnZW5lcmF0ZWQKKwlmb3IgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbiB0eXBlcyBldmVuIHdoZW4gdGhlIHJldHVybiB0eXBlIHdhcworCXZvaWQuICAiU3RhbmRhcmQiIGR3YXJmIHNheXMgdGhhdCBpZiB0aGUgcmV0dXJuIHR5cGUgZm9yIGEgZnVuY3Rpb24KKwlvciBmdW5jdGlvbiB0eXBlIGlzIHZvaWQgdGhlbiBubyB0eXBlIGF0dHJpYnV0ZSBzaG91bGQgYmUgZ2VuZXJhdGVkCisJZm9yIHRoZSBjb3JyZXNwb25kaW5nIERJRS4KKworU2F0IEphbiAyNiAwNDoyMjowOCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWxleC5jIChpbnRlcmZhY2Vfc3RyY21wKTogSGFuZGxlIFN0cmluZy5TdHJpbmcuTWFwLmNjIGFuZAorCWZyaWVuZHMuCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IE1lcmdlIGNoYW5nZSB0byBnZW5lcmF0ZSBiZXR0ZXIKKwljb2RlIGZyb20gc2ltcGxlIGNhc3QgZXhwcmVzc2lvbi4KKworRnJpIEphbiAyNSAxMDowNjoyOCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAocHVzaHRhZyk6IERvbid0IGNhbGwgYHB1c2hkZWNsJyBpZiB0aGUgdHlwZSdzIG5hbWUKKwlpcyBhbm9ueW1vdXMsIGxlc3Qgd2UgcmVjdXJzZSBhZCBpbmZpbml0dW0uCisKK1RodSBKYW4gMjQgMjM6NTY6NTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGV4cGFuZF91bm9wKTogV29yZCBhdCBhIHRpbWUgb25seSBmb3IgaW50cy4KKworVGh1IEphbiAyNCAwOTo0MDozNyAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBBcHBseSBjaGFuZ2VzIGluIGRieG91dC5jIHRvIGRlYWwgd2l0aAorCVNVQlJFRy4JIERvbid0IGVtaXQgYSBzeW1ib2xpYyBkZWZpbml0aW9uIGZvciB2YXJpYWJsZXMgdGhhdCBjYW4ndAorCWJlIHJlcHJlc2VudGVkLgorCitUaHUgSmFuIDI0IDIxOjE4OjE1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjb25maWc6IENvbmRpdGlvbmFsIGZvciBzZXR0aW5nICRvcyB3YXMgYmFja3dhcmQuCisJQWxzbyBtZW50aW9uIG5hbWUgb2YgbWFrZS12YXIgZmlsZSBpZiBvbmUgZXhpc3RzLgorCisJKiBvdXQtaTM4Ni5jOiBEZWxldGUgYSBsYXJnZSBwaWVjZSBvZiBhY2NpZGVudGFsIGluc2VydGlvbi4KKworCSogZHdhcmZvdXQuYzogRG9uJ3QgaW5jbHVkZSBjLXRyZWUuaCBvciBjcGx1cy10cmVlLmguCisJKElOVF9UWVBFX1NJWkUsIGV0Yy4pOiBEZWZpbmUgdGhlbSBpZiBub3Qgb3ZlcnJpZGRlbi4KKwkoZnVuZGFtZW50YWxfdHlwZV9jb2RlKTogRGlzdGluZ3Vpc2ggdHlwZXMgYnkgVFlQRV9QUkVDSVNJT04uCisJQnV0IGFsc28gY2hlY2sgZm9yIHRoZSBidWlsdC1pbiBDIHR5cGUgbmFtZXMuCisKK1RodSBKYW4gMjQgMTU6MjM6MTcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyBhbGwgYXJncyBzdGFydGluZyB3aXRoICJPIiB0byAKKwljYzEgc28gdGhhdCAtTzIgaXMgcGFzc2VkIGFsb25nLgorCitUaHUgSmFuIDI0IDEzOjEwOjI3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9leHByX3N0bXQpOiBEb24ndCB3YXJuIGZvciBhbnkgY2FzdHMgdG8gdm9pZC4KKworCSogY29uZmlnOiBGaXggdHlwb3Mgc2V0dGluZyBzaGVsbCB2YXJzLgorCVJlbmFtZSBjb25maWcgdG8gY29uZmlnLWRpci4KKwlJbnNlcnQgbWlzc2luZyBcIGluIGNhc2UgZm9yIGRlbHRhLgorCitXZWQgSmFuIDIzIDE2OjMxOjI3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGVtaXRfanVtcF9pbnNuX3tiZWZvcmUsYWZ0ZXJ9KTogQWxsb3cgUEFUVEVSTiB0byBiZQorCWEgU0VRVUVOQ0UuCisKKwkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVXNlIGVtaXRfanVtcF9pbnNuX2JlZm9yZSB3aGVuIHdyaXRpbmcgCisJb3V0IGNvbXBhcmUgYW5kIGp1bXAgc2VxdWVuY2UsIG5vdCBlbWl0X2luc25fYmVmb3JlLCB0byBlbnN1cmUgdGhhdAorCWlmIHdlIG9ubHkgd3JpdGUgb25lIGluc24gIHRoYXQgaXQgaXMgYSBKVU1QX0lOU04uCisKKwkqIHRvcGxldi5jIChmbGFnX3JlcnVuX2NzZV9hZnRlcl9sb29wKTogTmV3OiAtZnJlcnVuLWNzZS1hZnRlci1sb29wLgorCShyZXN0X29mX2NvbXBpbGF0aW9uKTogUmVydW4gY3NlIGFmdGVyIGxvb3AgaWYgZGVzaXJlZC4KKwkobWFpbik6IEFkZCBzdXBwb3J0IGZvciAtTzIuCisJUHJlc2NhbiBhcmdzIGZvciAtTyBhbmQgLU8yIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWFueSAtZiBvcHRpb25zLgorCUFkZCBjYWxsIHRvIG5ldyBtYWNybyBPUFRJTUlaQVRJT05fT1BUSU9OUy4KKwlTYXZlIHN0YXR1cyBvZiAtdmVyc2lvbiB1bnRpbCBhbGwgYXJncyBoYXZlIGJlZW4gcHJvY2Vzc2VkOyB0aGVuCisJd3JpdGUgb3V0IHRoZSBpbmZvLgorCShwcmludF9zaW5nbGVfc3dpdGNoKTogTmV3IGZ1bmN0aW9uLgorCShwcmludF9zd2l0Y2hfdmFsdWVzKTogUmVuYW1lZCBmcm9tIHByaW50X3RhcmdldF9zd2l0Y2hfZGVmYXVsdHMuCisJTm93IHByaW50cyBvdXQgY3VycmVudGx5IGVuYWJsZWQgLWYsIC1tLCBhbmQgLVcgc3dpdGNoZXMuICBDYWxscworCXByaW50X3NpbmdsZV9zd2l0Y2ggdG8gd3JpdGUgb3V0IHN3aXRjaCBhbmQgaGFuZGxlIGxvbmcgbGluZXMuCisKKwkqIHJ0bC5kZWYgKFNVQlJFRyk6IENoYW5nZSBydHggY2xhc3MgZnJvbSAnbycgdG8gJ3gnLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBJZ25vcmUgaGFzaCB0YWJsZSBlbnRyeSBpZiBub3QgdmFsaWQuCisKK1dlZCBKYW4gMjMgMDA6MTI6MjQgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZzogRmlsZSByZW5hbWVkIGZyb20gY29uZmlnLmdjYy4KKwlBbGxvdyBhYmJyZXZpYXRpb25zIGZvciArLW9wdGlvbnMuCisJQWxsb3cgY29uZmlnIEhPU1QgVEFSR0VULgorCVN1cHBvcnQgK2dhcyBhbmQgK25mcCBhcyBzZXBhcmF0ZSBvcHRpb25zLgorCVJlbmFtZSBhbGwgdGhlIG1hY2hpbmUgYWx0ZXJuYXRpdmVzIHRvIGdlbmVyYWwgc2NoZW1lOgorCWNwdS9jb21wYW55LXN5c3RlbS4gIEFsbG93IGFiYnJldmlhdGlvbnMgZm9yIGNwdS9jb21wYW55IHBhaXJzLgorCSogY29uZmlnLWRpcjogRGlyIHJlbmFtZWQgZnJvbSBjb25maWcuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRpcik6IENyZWF0ZSBiaW5kaXIgaGVyZS4KKworCSogY2NjcC5jIChtYWluKTogRGVsZXRlIGR1cGxpY2F0IHArKyBsZWZ0IGluIGxhc3QgY2hhbmdlLgorCisJKiBNYWtlZmlsZS5pbiAoR05VTElCMSwgR05VTElCMV9UQVJHRVQpOiBSZW5hbWVkIGZyb20gR05VTElCKi4KKwkoZ251bGliMS5wb3J0YWJsZSwgZ251bGliMS50YXJnZXQpOiBSZW5hbWVkIGZyb20gZ251bGliLiouCisJVGhleSBub3cgbWFrZSBhIGZpbGUgbmFtZWQgZ251bGliMSwgZnJvbSBnbnVsaWIxLmMuCisJKExJQjFGVU5DUywgTElCMUZVTkNTX0VYVFJBKTogUmVuYW1lZCBmcm9tIExJQkZVTkNTKi4KKwkoZm9yLWJvb3RzdHJhcCwgcmVzdC5lbmNhcCk6IERlcGVuZCBvbiBnbnVsaWIsIG5vdCBHTlVMSUIyX1RBUkdFVC4KKwkoc3RhbXAtZ251bGliMik6IFRoaXMgZmlsZSBpcyBubyBsb25nZXIgdXNlZC4KKwkoZ251bGliMi5wb3J0YWJsZSk6IE9sZCBzdGFtcC1nbnVsaWIyIHJ1bGUgcmVuYW1lZCB0byB0aGlzLgorCU5vdyBjcmVhdGUgYSBmaWxlIG5hbWVkIGdudWxpYjIsIGZyb20gZ251bGliMi5jIGFsb25lLgorCShnbnVsaWIpOiBOZXcgdGFyZ2V0LCBjb21iaW5lcyBnbnVsaWIxIGFuZCBnbnVsaWIyIGludG8gZ251bGliLgorCShtb3N0bHljbGVhbik6IERlbGV0ZSBhZGRpdGlvbmFsIHRlbXBvcmFyeSBmaWxlcy4KKwlObyBuZWVkIHRvIGF2b2lkIGRlbGV0aW5nIHN0YW1wLWdudWxpYjIuCisJKGNsZWFuKTogRGVsZXRlIGdudWxpYjEgYW5kIGdudWxpYjIsIGJ1dCBub3Qgc3RhbXAtZ251bGliMi4KKwkocmVhbGNsZWFuKTogTm8gbmVlZCB0byBkZWxldGUgZ251bGliIGhlcmUuCisJKGluc3RhbGwtZ251bGliKTogQ2hhbmdlZCBkZXBlbmRlbmNpZXMuCisJKiBnbnVsaWIxLmM6IEZpbGUgZ251bGliLmMgcmVuYW1lZC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGlyKTogQ3JlYXRlIGJpbmRpciBoZXJlLgorCisJKiBjY2NwLmMgKG1haW4pOiBEZWxldGUgZHVwbGljYXQgcCsrIGxlZnQgaW4gbGFzdCBjaGFuZ2UuCisKK1N1biBKYW4gMjAgMTQ6MDA6MTYgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQ29uZGl0aW9uYWxpemUgRU1QVFlfRklFTERfQk9VTkRBUlkKKwlvbiB3aGV0aGVyIG9yIG5vdCBpdCBpcyBkZWZpbmVkLiAgU2ltaWxhcmx5IGZvcglQQ0NfQklUX0ZJRUxEX01BVFRFUlMuIAorCitXZWQgSmFuIDE2IDE4OjU2OjMwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBXaGVuIGZvbGRpbmcgZGlzcGF0Y2ggdGFibGUsIHN0YXkgaW5zaWRlIGJvdW5kcy4KKworV2VkIEphbiAxNiAwODoxMTo0OCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IEZpeCB0eXBvIGluIHJlY2VudCBjaGFuZ2UuCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBJZiB3ZSBoYXZlIGEgbm9uLXBhcmFkb3hpY2FsCisJKHN1YnJlZyAocHNldWRvKSkgYW5kIHRoZSBwc2V1ZG8gaGFzIGFuIGVxdWl2YWxlbnQgbWVtb3J5CisJbG9jYXRpb24sIHJlcGxhY2UgdGhlIFNVQlJFRyBiZWNhdXNlIGZpbmRfcmVsb2FkcyBtYXkgZG8gaXQuCisKK1R1ZSBKYW4gMTUgMDE6NDE6MjggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ29uZGl0aW9uIGZvciBtb3ZhYmlsaXR5IHdhcyB3cm9uZy4KKwlBIHJlZyB0aGF0IGlzbid0IG5lY2Vzc2FyaWx5IHNldCBtYXkgYmUgdW5zYWZlCisJZXZlbiBpZiB1c2VkIG9ubHkgaW5zaWRlIHRoZSBsb29wLgorCUhvd2V2ZXIsIGEgcmVnIHVzZWQgb25seSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBhZnRlciB0aGUgc2V0IGlzIHNhZmUuCisJU28gaXMgYSByZWcgdGhhdCBpc24ndCBhIHVzZXItbGV2ZWwgdmFyaWFibGUuCisKKwkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSk6IFJldmVyc2Ugb3JkZXIgb2Ygc2Nhbm5pbmcgbG9vcHMuCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQWZ0ZXIgc2tpcHBpbmcgdGhlIGluc25zIG9mIGEgbGliY2FsbCBzZXF1ZW5jZSwKKwlpZ25vcmUgbm90ZXMgd2hlbiBzZWFyY2hpbmcgYmFjayB0byBmaW5kIHRoZSBsYXN0IGluc24gb2YgdGhlIHNlcS4KKworCSogY2NjcC5jIChtYWluKTogVXNlIGVudnZhciBHQ0NfRVhFQ19QQVRIIHRvIHNwZWNpZnkgdHJhbnNsYXRpb24KKwlvZiBwcmVmaXhlIGluIGRlZmF1bHQgaW5jbHVkZSBkaXJzLgorCisJKiBjY2NwLmMgKG1haW4pOiBEbyBwYXRoX2luY2x1ZGVzIGFmdGVyIGV4cGxpY2l0IG9wdGlvbnMuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2Rpc3RyaWIpOiBEb24ndCBwdXNoICsgdGhydSBuZWdhdGl2ZSBjb3VudCBzaGlmdHMuCisKK01vbiBKYW4gMTQgMDk6NDA6MjggMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogY3BsdXMtbGV4LmMgKHl5bGV4KTogRXZlbiBpbiBgZXh0ZXJuICJDIicsIHRoZSBrZXl3b3JkcyBhcmUgdGhlCisJc2FtZS4KKworCSogY3BsdXMtbGV4LmMgKGlucHV0X2Zyb21fc2F2ZWRfdGV4dCk6IE5ldyBmdW5jdGlvbi4gIFNldCBzdHJpbmcKKwlzb3VyY2UgZm9yIEZJTEUgcG9pbnRlci4KKwkoeXlsZXgsIGRvX3BlbmRpbmdfaW5saW5lcyk6IENhbGwgaXQuCisKKwkqIGNwbHVzLXBhcnNlLnkgKHN0bXRzLCBzdG10KTogVHlwZSBpcyBub3cgYHRyZWUnLiAgU29tZSBhY3Rpb25zCisJZml4ZWQgdG8gcmV0dXJuIGl0LgorCisJKiBjcGx1cy1sZXguYyAocmVpbml0X3BhcnNlX2Zvcl9ibG9jayk6IE5ldyBmdW5jdGlvbiwgd2l0aCBtb3N0IG9mCisJdGhlIGd1dHMgb2YgcmVpbml0X3BhcnNlX2Zvcl9tZXRob2QuICBNYWdpYyBhcmd1bWVudCBJU19URU1QTEFURQorCWNob29zZXMgYSBzZXQgb2YgZXJyb3IgbWVzc2FnZXMuCisJKHJlaW5pdF9wYXJzZV9mb3JfbWV0aG9kKTogQ2FsbCBpdC4KKwljcGx1cy10ZW1wbGF0ZS5jIChyZWluaXRfcGFyc2VfZm9yX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLCBhbHNvCisJY2FsbHMgcmVpbml0X3BhcnNlX2Zvcl9ibG9jay4KKworTW9uIEphbiAxNCAwNzoyMDozNiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHNraXBfY29uc2VjX2luc25zLCBtb3ZlX21vdmFibGVzLCBzdHJlbmd0aF9yZWR1Y2UpOiBEb24ndAorCWNhbGwgZmluZF9yZWdfbm90ZSBvbiBhIE5PVEUuCisKK1N1biBKYW4gMTMgMTU6NDU6MjMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYzogU2VwYXJhdGUgbmFtZXNwYWNlIGZvciBhc3NlcnRpb25zLiAgRG9uJ3QgZXhwYW5kIG1hY3JvcworCWluc2lkZSBhc3NlcnRpb25zIGluICNpZi4gIEFsbG93IGFyYml0cmFyeSB0b2tlbiBzZXF1ZW5jZXMuCisJKHJlc2Nhbik6IFNwZWNpYWwgaGFuZGxpbmcgYWZ0ZXIgYCMnIGlmIGFzc2VydGlvbnNfZmxhZy4KKwkoZXhwYW5kX3RvX3RlbXBfYnVmZmVyKTogTmV3IGFyZyBzZXRzIGFzc2VydGlvbnNfZmxhZy4gQ2FsbGVycyBjaGFuZ2VkLgorCShldmFsX2lmX2V4cHJlc3Npb24pOiBQYXNzIDEgZm9yIHRoYXQgYXJnLgorCShza2lwX3BhcmVuX2dyb3VwKTogTmV3IGZ1bmN0aW9uLgorCShhc3NlcnRpb25faGFzaHRhYiwgQVNTRVJUSU9OX0hBU0hTSVpFLCBBU1NFUlRJT05fSEFTSE5PREUpOiBOZXcuCisJKGFzc2VydGlvbl9pbnN0YWxsLCBhc3NlcnRpb25fbG9va3VwLCBkZWxldGVfYXNzZXJ0aW9uKTogTmV3IGZ1bmN0aW9ucy4KKwkoVF9BU1NFUlRJT04pOiBEZWxldGVkLgorCSh0b2tlbmxpc3RfbGlzdCk6IFJlbmFtZWQgZnJvbSBhcmdsaXN0X2xpc3QuCisJKHJlYWRfdG9rZW5fbGlzdCk6IFJlbmFtZWQgZnJvbSByZWFkX2tleXdvcmRfbGlzdC4gIE11Y2ggY2hhbmdlZC4KKwlDb3B5IHRoZSBzdHJpbmdzIGludG8gdGhlIGhlYXAuCisJKGZyZWVfdG9rZW5fbGlzdCk6IFJlbmFtZWQgZnJvbSBmcmVlX2tleXdvcmRfbGlzdC4gIEZyZWUgdGhlIHN0cmluZ3MuCisJKGRvX2Fzc2VydCwgZG9fdW5hc3NlcnQpOiBDb25zaWRlcmFibHkgY2hhbmdlZC4KKwkoY2hlY2tfYXNzZXJ0aW9uKTogU29tZXdoYXQgY2hhbmdlZC4KKwkoY2hlY2tfbWFjcm9fbmFtZSk6IEV4dHJhIGFyZyBjb250cmlidXRlcyB0byBlcnJvciBtZXNzYWdlLgorCSogY2V4cC55ICh5eWxleCk6IFBhcnNlIGV2ZXJ5dGhpbmcgYXMgYSBuYW1lIGlmIGtleXdvcmRfcGFyc2luZy4KKwkocnVsZSBmb3IgYXNzZXJ0aW9ucyk6IFNldCwgdGhlbiBjbGVhciwga2V5d29yZF9wYXJzaW5nLgorCShrZXl3b3Jkcyk6IEFsbG93IGVtcHR5IHNlcXVlbmNlLiAgQWxsb3cgbmVzdGVkIHBhcmVucy4KKworU2F0IEphbiAxMiAxMjoxODowMCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBNYWtlIGJldHRlciBjb2RlIGZvciBzaW1wbGUgY2FzdHMuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBDb21wdXRpbmcgcmVsb2FkX3doZW5fbmVlZGVkLCBkb24ndCBuZWdsZWN0CisJb3BlcmFuZHMgdGhhdCBkb24ndCBoYXZlIG91dHB1dCByZWxvYWRzLgorCisJKiBjc2UuYyAocmVmZXJzX3RvX21lbV9wKTogQXQgY2hlY2tfYWRkciwgaGFuZGxlIFBMVVMgaW5zaWRlIENPTlNULgorCitTYXQgSmFuIDEyIDA2OjMwOjU2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKHN0ZWFsX2RlbGF5X2xpc3RfZnJvbV8qKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgdG8gY2FsbHMgdG8KKwlpbnNuX3NldHNfcmVzb3VyY2VfcC4KKwkoZmlsbF9lYWdlcl9kZWxheV9zbG90cywgcmVsYXhfZGVsYXlfc2xvdHMpOiBBZGQgbWlzc2luZyBhcmd1bWVudAorCXRvIGNhbGxzIHRvIG1vc3RseV90cnVlX2p1bXAuCisJKHJlbGF4X2RlbGF5X3Nsb3RzKTogQ29ycmVjdGx5IGhhbmRsZSBjYXNlIHdoZXJlIHdlIGNhbid0IGludmVydCBqdW1wLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IElmIHdlIGhhdmUgYSBTVUJSRUcgb2YgYQorCXBzZXVkbyB0aGF0IHJlc2lkZXMgaW4gbWVtb3J5IGFuZCB0aGUgYWRkcmVzcyBpcyBub3Qgb2Zmc2V0dGFibGUsCisJc3Vic3RpdHV0ZSBmb3IgdGhlIHBzZXVkbyBub3cgc28gd2UgY2FuIGdlbmVyYXRlIGEgcmVsb2FkIGZvciB0aGUKKwlhZGRyZXNzLgorCitGcmkgSmFuIDExIDE0OjM5OjA5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiB0bS1uZXh0LmggKExJQl9TUEVDLCBTVEFSVEZJTEVfU1BFQyk6IERvbid0IHN1cHBvcnQgLXAuCisKK1RodSBKYW4gMTAgMTI6MjY6NDkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRtLXN1bjIuaCAoQ0MxX1NQRUMpOiBEZWZpbmUgdG8gaWdub3JlIC1zdW4yIGFuZCAtdGFyZ2V0LgorCShXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBEZWZpbmUgdG8gcmVjb2duaXplIC10YXJnZXQuCisJKExJQl9TUEVDKTogRGVmaW5lOyBoYW5kbGUgLWEuCisJKiB0bS1zdW4yb3M0Lmg6IE5ldyBmaWxlLgorCSogdG0tbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBIYW5kbGUgLW1za3kgYW5kIC1tbm9za3kuCisJKFRBUkdFVF9TS1kpOiBOZXcgbWFjcm8uCisKKwkqIHRtLW5leHQuaCAoTElCX1NQRUMpOiBVc2UgLWxzeXNfcywgbm90IC1sYy4KKworCSogYy1wYXJzZS55ICh5eWxleCk6IEZpeCB0eXBvLgorCisJKiBnZW5vdXRwdXQuYyAob3V0cHV0X3Byb2xvZ3VlKTogTWFrZSBpbnNuLW91dHB1dC5jIHVzZSBpbnNuLWNvZGVzLmguCisJKiBNYWtlZmlsZS5pbiAoaW5zbi1vdXRwdXQubyk6IERlcGVuZCBvbiBpbnNuLWNvZGVzLmguCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWhlYWRlcnMpOiBTYXZlICQobGlic3ViZGlyKSBiZWZvcmUgY2QuCisKKwkqIE1ha2VmaWxlLmluIChnbnVsaWIpOiBEZXBlbmQgb24gY29uZmlnLnN0YXR1cy4KKworCSogZ251bGliMi5jIChfX3VtdWxzaWRpMyk6IFVzZSAjZWxzZSBhcm91bmQgaW5saW5lIGZ1bmN0aW9uLgorCVVzZSBfXy1zdHlsZSBuYW1lcyBmb3IgYWxsIG1hY2hpbmVzLgorCitXZWQgSmFuCSA5IDE3OjA2OjE4IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogb3V0LXNwYXJjLmMgKHZhcmlvdXMgcGxhY2VzKTogQ2hhbmdlIFw7IHRvIFxuXHQgaW4gcHJpbnRmCisJc3RyaW5ncy4KKworCSogc3BhcmMubWQ6IENoYW5nZSBQSUMgaW5pdGlhbGl6YXRpb24gcGF0dGVybiB0byByZWNvZ25pemUgcGF0dGVybgorCXRoYXQgZG9lc24ndCBpbnZvbHZlIGEgY2xvYmJlci4KKwkqIG91dC1zcGFyYy5jOiBSZXN0IG9mIGNoYW5nZSBpcyBoZXJlLCB3aGVyZSBQSUMgaW5pdGlhbGl6YXRpb24gaXMKKwllbWl0dGVkLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uLCBzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKToKKwlDb3JyZWN0bHkgYWRqdXN0IFZBTCBmb3IgYml0cyBvdXRzaWRlIE1PREUuCisKK1dlZCBKYW4JIDkgMTU6NDU6MjYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZsb3cuYyAobGliY2FsbF9kZWFkX3ApOiBIYW5kbGUgYSBDQUxMIGluIGEgUEFSQUxMRUwuCisKK1R1ZSBKYW4JIDggMTM6MzU6NTAgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKGVtaXRfc3RvcmVfZmxhZyk6IENvcnJlY3QgVU5TSUdORURQIHZhbHVlIHBhc3NlZCB0bworCWNvbnZlcnRfdG9fbW9kZSBhbmQgZXhwYW5kX3Vub3AuCisKK01vbiBKYW4JIDcgMTE6NTY6MzEgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBncGx1cy5ncGVyZjogTmV3IGtleXdvcmRzIGZvciB0ZW1wbGF0ZXMgYW5kIG90aGVyIGV4dGVuc2lvbnMuCisKKwkqIGNwbHVzLWxleC5jOiBJbmNvcnByYXRlIG5ldyBncGVyZiBjb2RlLgorCisJKiBjcGx1cy1jbGFzcy5jIChyZXNvbHZlX3Njb3BlX3RvX25hbWUpOiBOZXcgZnVuY3Rpb24uCisJKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IENhbGwgYHJlc29sdmVfc2NvcGVfdG9fbmFtZScgaW5zdGVhZCBvZgorCWhhbmRsaW5nIGJ5IGl0c2VsZi4KKwkqIGNwbHVzLWRlY2wuYyAocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBHaXZlIGZvcndhcmQgZGVjbGFyYXRpb24uCisJKGxvb2t1cF9uZXN0ZWRfdHlwZSk6IE5ldyBmdW5jdGlvbi4KKwkocHVzaHRhZyxsb29rdXBfdGFnLHhyZWZfdGFnKTogSGFuZGxlIG5lc3RlZCBjbGFzc2VzLgorCShmaW5pc2hfZnVuY3Rpb24pOiBBZGQgY29tbWVudCBhYm91dCBvYnNjdXJlIGFyZ3VtZW50IHBhc3NpbmcKKwljb252ZW50aW9uIGZvciBzdGF0aWMgbWV0aG9kIGNhbGxzIChhdCB0aGUgY2FsbCBzaXRlKS4JQWxzbywgZG9uJ3QKKwljYWxsIG9wZXJhdG9yIGRlbGV0ZSB3aXRoIE5VTEwgcG9pbnRlci4JIENhbGwgaXQgd2l0aAorCWBjdXJyZW50X2NsYXNzX2RlY2wnIGluc3RlYWQuCisJKGdsb2JhbGl6ZV9uZXN0ZWRfdHlwZSk6IE5ldyBmdW5jdGlvbi4JVXNlZCB3aGVuIHdlIGxlYXJuIHRoYXQgYQorCXR5cGUgd2hpY2ggaW5pdGlhbGx5IGFwcGVhcmVkIHRvIGJlIG5lc3RlZCBzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGUKKwlnbG9iYWwgc2NvcGUgaW5zdGVhZC4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBDYWxsIGBnbG9iYWxpemVfbmVzdGVkX3R5cGUnIHdoZW4gZ3Jva2tpbmcgYW4KKwlhcy15ZXQgdW5kZWZpbmVkIGNsYXNzIHR5cGUuCisJKiBjcGx1cy1kZW0uYzogVXBkYXRlZCB0byBoYW5kbGUgcXVhbGlmaWVkIChpLmUuIG5lc3RlZCkgdHlwZXMuCisJVGhpcyBtZWFucyBoYW5kbGluZyB0aGUgbmV3IGxldHRlciBgUScgaW4gbWFuZ2xlZCBuYW1lcy4KKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBIYW5kbGUgbmVzdGVkIGNsYXNzZXMgdXNpbmcKKwlgcmVzb2x2ZV9zY29wZV90b19uYW1lJyBpbnN0ZWFkIG9mIGhhbmRsaW5nIGl0c2VsZi4KKwkqIGNwbHVzLWxleC5jICh0eXBlbmFtZV9zY29wZV9pbl9wcm9ncmVzcyk6IE5ldyBzdGF0aWMgdmFyaWFibGUgdG8KKwlhbGxvdyB0aGUgbGV4ZXIgdG8gZmlndXJlIG91dCB3aGF0IGFyZSBuZXN0ZWQgY2xhc3MgdHlwZW5hbWVzLAorCXNjb3BlZCBtZW1iZXIgcmVmZXJlbmNlcywgZXRjLiwgd2l0aG91dCBnZXR0aW5nIHRoZSBwYXJzZXIgdG9vCisJaW52b2x2ZWQuCisJKHl5bGV4KTogUmVjb2duaXplIFNDT1BFRF9UWVBFTkFNRSBhbmQgVFlQRU5BTUVfU0NPUEUgdG9rZW5zLgorCUFsc28sIHJlY29nbml6ZSAnPCcgYW5kICc+JyBzZXBhcmF0ZWx5IGZyb20gQVJJVEhDT01QQVJFIHNvIHdlIGNhbgorCWltcGxlbWVudCB0ZW1wbGF0ZXMuCisJTm8gbG9uZ2VyIHJlY29nbml6ZXMgKFg6OiopIG9yIChYOjomKSBhcyBzaW5nbGUgdG9rZW5zLgorCSogY3BsdXMtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogTmV3IGZ1bmN0aW9uIHRvIGJ1aWxkCisJaW50ZXJuYWwgbmFtZXMgZm9yIG5lc3RlZCB0eXBlbmFtZXMuCisJKiBjcGx1cy1wYXJzZS55OiBIYW5kbGUgcGFyYW1ldGVyaXplZCB0eXBlIHN5bnRheCAobW9yZSBvciBsZXNzKS4KKwkoZHVtbXlfZGVjbCk6IEdvbmUhCisJTmVzdGVkIHR5cGVzIGFyZSBub3cgaGFuZGxlZC4KKwkqIGNwbHVzLXRyZWUuaCAoREVDTF9VTkRFRklORURfRlJJRU5EUyk6IE1vdmVkIG91dCBvZiBERUNMX0NPTlRFWFQKKwlzbG90IG9mIFRZUEVfREVDTHMuICBERUNMX0NPTlRFWFQgb2YgdHlwZW5hbWUgaXMgbm93IHRoZSBlbmNsb3NpbmcKKwl0eXBlIGZvciBuZXN0ZWQgdHlwZXMuCisJKERFQ0xfTkVTVEVEX1RZUEVOQU1FKTogQW4gaWRlbnRpZmllciBwb2ludGVyIHRoYXQgbWFrZXMgdGhlIG5hbWUgb2YKKwl0aGUgdHlwZSB1bmlxdWUgZm9yIHRoZSBjb21waWxhdGlvbi4KKwkoSURFTlRJRklFUl8qKTogV2hlbiBpbml0aWFsaXppbmcsIGNhbGwgYHBlcm1fY2FsbG9jJywgbm90CisJcGVybWFsbG9jLCBzaW5jZSBub24temVybyB2YWx1ZXMgYWN0dWFsbHkgbWVhbiBzb21ldGhpbmcsCisJYW5kIHdlIGRvbid0IGd1YXJhbnRlZSB0byBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgaW4gb25lIGdvLgorCSogdHJlZS5jIChwZXJtX2NhbGxvYyk6IE5ldyBmdW5jdGlvbi4KKwkqIGNwbHVzLXR5cGVjay5jIChkZWZhdWx0X2NvbnZlcnNpb24pOiBEb24ndCBkZWZhdWx0bHkgY29udmVydCBhCisJbmFrZWQgTUVUSE9EX1JFRiBzdWNoIHRoYXQgaXQgYmVjb21lcyBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUKKwlpbmRleC4JT25seSBsZXQgdGhpcyBoYXBwZW4gaWYgdXNlciByZXF1ZXN0cyBpdCB3aXRoIGAmJy4KKworCSogTWFrZWZpbGUuaW46IEhhbmRsZSBuZXcgc291cmNlIGZpbGUgY3BsdXMtdGVtcGxhdGUuYy4KKworTW9uIEphbgkgNyAxNTowMzo1MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRXJyb3IgaWYgdmFsdWVzCisJcHJvdmlkZWQgZm9yIGFuIGFycmF5IG9mIGVtcHR5IGVsZW1lbnRzLgorCisJKiBvdXQtaTM4Ni5jIChmcF90b3BfZGVhZF9wMSk6IEZvbGxvdyBqdW1wIG9ubHkgaWYgb3B0aW1pemluZy4KKwkoZnBfY2FsbF9pbnRlcm5hbCk6IERpc2NhcmQgcmVzdWx0IGlmIHVudXNlZC4gIFVzZSBmcF90b3BfZGVhZF9wMS4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogSW4gc3BlY2lhbCBjYXNlIGZvciAoc2V0IFJFRzAgUkVHMSksCisJY2hhbmdlIGFueSBSRUdfRVFVSVYgbm90ZXMgdG8gUkVHX0VRVUFMLgorCisJKiB0bS1zdW4zODZpLmggKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBEZWZpbmUgaXQuCisKKwkqIHRtLWF0dDM4Ni5oIChBU01fT1VUUFVUX0xPQ0FMKTogQ2hhbmdlIGJhY2sgdG8gZGF0YSBzZWN0aW9uLgorCisJKiBnZW5yZWNvZy5jICh3cml0ZV90cmVlXzEpOiBUeXBvIGluIHByaW50ZiBzdHJpbmcuCisKKwkqIGZsb3cuYyAobGliY2FsbF9kZWFkX3ApOiBOZXcgYXJndW1lbnRzIE5PVEUgYW5kIElOU04uCisJTm93IHRlc3QgdGhhdCB0aGUgaGFyZCByZXR1cm4gcmVnIGluIHRoZSBjYWxsIGlzIGRlYWQuCisJQ2FsbGVycyBjaGFuZ2VkLgorCitNb24gSmFuCSA3IDEyOjI3OjA3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlY29nLmMgKGNhbmNlbF9jaGFuZ2VzKTogQ2FuY2VsIGNoYW5nZXMgaW4gb3Bwb3NpdGUgb3JkZXIgd2UgbWFkZQorCXRoZW0uCisKKwkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBPbmx5IGNvbW11dGUgb3BlcmFuZHMgaWYgb3AwIGlzIGNvbnN0LgorCisJKiBydGwuZGVmIChJTkxJTkVfSEVBREVSKTogQWRkIG5ldyBpbnRlZ2VyIGZpZWxkLgorCSogcnRsLmggKFBPUFNfQVJHUyk6IE5ldyBtYWNybyBmb3IgcGxhY2UgdG8gc2F2ZQorCWN1cnJlbnRfZnVuY3Rpb25fcG9wc19hcmdzLgorCShGVU5DVElPTl9GTEFHX1BPUFNfQVJHUyk6IERlbGV0ZWQ7IG5vIGxvbmdlciBhIHNpbmdsZSBiaXQuCisJKiBlbWl0LXJ0bC5jIChnZW5faW5saW5lX2hlYWRlcl9ydHgpOiBBZGQgbmV3IGFyZyBmb3IgInBvcHMgYXJncyIuCisJKiBpbnRlZ3JhdGUuYyAoaW5pdGlhbGl6ZV9mb3JfaW5saW5lLCBvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKToKKwlDb3JyZWN0bHkgc2F2ZSBhbmQgcmVzdG9yZSBjdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJncy4KKworU3VuIEphbgkgNiAxNDoxMDo0NCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGwuaCAoQVNNX09QRVJBTkRTX0lOUFVUX0xFTkdUSCk6IE5ldyBtYWNyby4KKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBVc2UgQVNNX09QRVJBTkRTXy4uLiBtYWNyb3MuCisJKiByZWNvZy5jIChhc21fbm9wZXJhbmRzLCBkZWNvZGVfYXNtX29wZXJhbmRzKTogTGlrZXdpc2UuCisKKwkqIHJ0bC5kZWYgKElGX1RIRU5fRUxTRSk6IFNldCBjbGFzcyB0byAnMycuCisKKwkqIGNzZS5jIChzaW1wbGlmeV97dW5hcnksYmluYXJ5LHRlcm5hcnl9X29wZXJhdGlvbik6IE5ldyBmdW5jdGlvbnMsCisJZnJvbSBmb2xkX3J0eC4KKwkoZm9sZF9ydHgpOiBDYWxsIHRoZXNlIGZ1bmN0aW9uIHRvIGRvIHRoZSBidWxrIG9mIHRoZSB3b3JrLgorCVVzZSBHRVRfUlRYX0NMQVNTIHRvIGZpbmQgY29tbXV0YXRpdmUgYW5kIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4KKwlTd2FwIGZvbGRlZF9hcmdbMDFdIHdoZW4gY29tbXV0aW5nIG9wZXJhbmRzLgorCSogcnRsLmg6IERlZmluZSBuZXcgZnVuY3Rpb25zLgorCSogaW50ZWdyYXRlLmMgKHRyeV9jb25zdGFudHMpOiBSZXBsYWNlIGNvbnN0YW50IGZvbGRpbmcgY29kZSB3aXRoCisJY2FsbHMgdG8gbmV3IGZ1bmN0aW9ucyBhYm92ZS4KKwlJbiBjb21tdXRhdGl2ZSBvcGVyYXRpb25zLCBwdXQgY29uc3RhbnRzIGxhc3QuCisJCisJKiBnZW5lbWl0LmMgKHN0cnVjdCBjbG9iYmVyX3BhdCk6IE5ldyBkYXRhIHN0cnVjdHVyZS4KKwkoZ2VuX2luc24pOiBJZiBwYXR0ZXJuIGVuZHMgd2l0aCBhIGdyb3VwIG9mIENMT0JCRVJzIG9mIGhhcmQKKwlyZWdpc3RlcnMsIHN0b3JlIHRoaXMgaW5mb3JtYXRpb24gaW4gYSBzdHJ1Y3QgY2xvYmJlcl9wYXQuCisJKG91dHB1dF9hZGRfY2xvYmJlcnMpOiBOZXcgZnVuY3Rpb24uCisJKG1haW4pOiBDYWxsIGl0IHRvIHdyaXRlIGNvZGUgdG8gYWRkIENMT0JCRVJzLgorCSogZ2VucmVjb2cuYyAoc3RydWN0IGRlY2lzaW9uKTogQWRkIG5ldyBmaWVsZCBudW1fY2xvYmJlcnNfdG9fYWRkLgorCShtYWtlX2luc25fc2VxdWVuY2UpOiBJZiBwYXR0ZXJuIGVuZHMgd2l0aCBhIGdyb3VwIG9mIENMT0JCRVJzLAorCXNldCB1cCB0byByZWNvZ25pemUgaXQgd2l0aG91dCB0aGUgQ0xPQkJFUnMgYnV0IHRvIGluZGljYXRlIHRoZQorCW51bWJlciBvZiBDTE9CQkVScyBvbWl0dGVkLgorCShhZGRfdG9fc2VxdWVuY2UpOiBJbml0aWFsaXplIG51bV9jbG9iYmVyc190b19hZGQuCisJUmVtb3ZlIHVubmVjZXNzYXJ5IGNvbmRpdGlvbmFsaXphdGlvbiBvbiBTVE9SRV9GTEFHX1ZBTFVFLgorCShicmVha19vdXRfc3Vicm91dGluZXMsIHdyaXRlX3N1YnJvdXRpbmUsIHdyaXRlX3RyZWUpOiBSZW1vdmUKKwlSRVRVUk5fUFJFRklYIHBhcmFtZXRlcjsgVFlQRSBpcyBzdWZmaWNpZW50LgorCSh3cml0ZV9zdWJyb3V0aW5lKTogQWRkIGV4dHJhIHBhcmFtZXRlciBmb3IgcmVjb2dfKiBmdW5jdGlvbnMuCisJKHdyaXRlX3RyZWVfMSk6IFBhc3MgVFlQRSBpbnN0ZWFkIG9mIHN0cmluZyBmb3IgcmV0dXJuLgorCVdyaXRlIG91dCBjb2RlIHRvIHJldHVybiBudW1iZXIgb2YgQ0xPQkJFUnMgbmVlZGVkLgorCSh3cml0ZV90cmVlKTogQWRkIG5ldyBwYXJhbWV0ZXIgdG8gcmVjb2dfKi4KKwkobWFpbik6IEFkZCBuZXcgcGFyYW1ldGVyIHRvIHJlY29nLgorCURvbid0IHBhc3MgcmV0dXJuIHN0cmluZyB0byBicmVha19vdXRfc3Vicm91dGluZXMgYW5kIHdyaXRlX3RyZWUuCisJKiByZWNvZy5jIChyZWNvZ19tZW1vaXplZCk6IFBhc3MgZXh0cmEgKDApIHBhcmFtZXRlciB0byByZWNvZy4KKwkqIGNvbWJpbmUuYyAocmVjb2dfZm9yX2NvbWJpbmUpOiBOZXcgZnVuY3Rpb24uCisJKHRyeV9jb21iaW5lLCBzaW1wbGlmeV9hbmRfY2MwLCB0cnlfZGlzdHJpYik6IFVzZSBpdCBpbnN0ZWFkIG9mIHJlY29nLgorCShyZWdfZGVhZF9hdF9wLCByZWdfZGVhZF9hdF9wXzEpOiBOZXcgZnVuY3Rpb25zLgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBDb3VudCBpbiByZWdfbl9zZXRzIHdoZW4gYSBwYXJ0IG9mIGEgcmVnaXN0ZXIKKwlpcyBtb2RpZmllZC4KKwlVcGRhdGUgU0lHTklGSUNBTlQgY29ycmVjdGx5IHdoZW4gc3VicmVnX3AgYW5kIG11bHRpcGxlIGhhcmQgcmVncy4KKwlDb21wdXRlIHJlZ19uX3NldHMgZm9yIGhhcmQgcmVnaXN0ZXJzLgorCitTdW4gSmFuCSA2IDEzOjQxOjQ5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChsb2NhdGVfYW5kX3BhZF9wYXJtKTogRG8gUkVHX1BBUk1fU1RBQ0tfU1BBQ0UganVzdCBvbmNlLgorCisJKiBDaGFuZ2VzIGJ5IHdpbHNvbkBjeWdudXMuY29tLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBUZXN0IHZhbHVlIG9mIFJFR19QQVJNX1NUQUNLX1NQQUNFIGluc3RlYWQKKwlvZiBhc3N1bWluZyB0aGF0IGl0IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2FtZSBhcyBhYm92ZS4gIEFsc28sIGNvcnJlY3QKKwljYWxjdWxhdGlvbiBvZiBTVEFDS19CWVRFUy4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfcCk6IE9sZCBpbnB1dCByZWxvYWQgYmxvY2tzIGlucHV0X2FkZHIuCisKK1NhdCBKYW4JIDUgMTg6MzI6MTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IE5ldyBuYW1lIGZvciBvbGQgYGNsZWFuJy4KKwkoY2xlYW4pOiBEZWxldGVzIGdudWxpYiBhbHNvLgorCShjbGVhbmNvbmZpZyk6IE5lZWQgbm90IGRlbGV0ZSBnbnVsaWIgaGVyZS4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogRG9uJ3QgdXNlIGR5aW5nIHJlZyB1bmxlc3Mgb3BlcmFuZCBmaXRzLgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogSGV4IGFuZCBvY3RhbCBjb25zdGFudHMgbm93IHRyYWRpdGlvbmFsbHkgc2lnbmVkLgorCitTYXQgSmFuCSA1IDE4OjAzOjUwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogcmVnX25fc2V0cyBpcyBvbmUgcGVyIHNldC4gIEl0IGRvZXMgbm90CisJdGFrZSBpbnRvIGFjY291bnQgbG9vcF9kZXB0aC4gIFNvIGRvbid0IGFkanVzdCBieSBsb29wX2RlcHRoIGhlcmUuCisKK0ZyaSBKYW4JIDQgMTM6MTg6MDcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IERvbid0IG11bmcgdmlydHVhbCByZWcuCisJKGZpeF9sZXhpY2FsX2FkZHIpOiBBY2NlcHQgdGhlIHZpcnR1YWwgYXJnIHBvaW50ZXIuCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgdmFyX3JlZnNfcXVldWUpOiBOZXcgc3RydWN0dXJlLgorCShzdHJ1Y3QgZnVuY3Rpb24pOiBVc2UgdGhhdCBmb3IgdGhlIHBlbmRpbmcgdmFyIHJlZnMgcXVldWUuCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IE5pY2VyIGZvcm1hdCBmb3IgcnRsIG9mIGRlY2xzLgorCisJKiBjLWRlY2wuYyAocHVzaF9jX2Z1bmN0aW9uX2NvbnRleHQsIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQpOgorCU5vIG5lZWQgdG8gZGVhbCB3aXRoIGN1cnJlbnRfZnVuY3Rpb25fZGVjbC4KKworCSogYy1wYXJzZS55IChuZXN0ZWRfZnVuY3Rpb24pOiBEZWxldGUgc3B1cmlvdXMgbm9udGVybWluYWwuCisKK0ZyaSBKYW4JIDQgMTI6MTM6MTQgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJpZXMpOiBJbiBjYXNlIHdlIGFyZSBtb2RpZnlpbmcKKwl0aGUgbWFpbiB2dGFibGUsIHN0YXJ0IHdpdGggdGhlIHZ0YWJsZSB0aGF0IGNvbWVzIGZyb20gdGhlIGltbWVkaWF0ZQorCWJhc2VjbGFzcywgbm90IHRoZSBtb3N0IGJhc2UgY2xhc3MuICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGxhdGVyCisJZml4dXBzIChmb3Igbm9uLWZpcnN0IGFuZCB2aXJ0dWFsIGJhc2VjbGFzc2VzKSBkbyBub3QgZml4IHVwIHRoaXMKKwljYXNlLgorCitGcmkgSmFuCSA0IDA2OjU1OjAwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBGaXggdHlwbyBpbiB0ZXN0aW5nIGZvciBTSW1vZGUgb3BlcmF0aW9uLgorCUdlbmVyYWxpemUgdG8gYXBwbHkgaW4gbW9yZSBjYXNlcyBieSBjYWxsaW5nIGVtaXRfc3RvcmVfZmxhZyByYXRoZXIKKwl0aGFuIGRvaW5nIHRoZSBnZW5fc2x0dSBleHBsaWNpdGx5LgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkLCBleHRyYWN0X2JpdF9maWVsZCk6IFdoZW4gaW5zdi9leHR2CisJZG9uJ3QgYWxsb3cgTUVNIGFuZCB3ZSBuZWVkIHRvIGxvYWQgdGhlIGZpZWxkIGludG8gYSByZWdpc3RlciwgZG9uJ3QKKwl1c2UgdGhlIG1vZGUgb2YgT1AwIGlmIGl0IGlzIHdpZGVyIHRoYW4gdGhlIG1vZGUgdG8gYmUgdXNlZCBmb3IKKwlpbnN2L2V4dHYgb3BlcmF0aW5nIG9uIGEgcmVnaXN0ZXIuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JfZmxhZyk6IFRyeSB0byBjb252ZXJ0IHNvbWUgY29tcGFyaXNvbnMgd2l0aAorCTEgYW5kIC0xIHRvIGNvbXBhcmlzb25zIHdpdGggemVyby4KKwlFeHBsaWNpdGx5IHRlc3Qgc2lnbiBiaXQgb2YgU1RPUkVfRkxBR19WQUxVRSByYXRoZXIgdGhhbiB0ZXN0aW5nIGl0CisJZm9yIGJlaW5nIGxlc3MgdGhhbiB6ZXJvLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBEb24ndCBjb21wdXRlIFNUT1JFX0ZMQUdfVkFMVUUgPCAwOworCWluc3RlYWQsIHRlc3QgdGhlIHJlbGV2YW50IHNpZ24gYml0LgorCVVzZSBHRVRfUlRYX0NMQVNTIGluc3RlYWQgb2YgY29tcGFyaXNvbl9jb2RlX3AuCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBMaWtld2lzZS4KKworCSogcmVjb2cuYyAodmFsaWRhdGVfY2hhbmdlKTogRWxpbWluYXRlIGR1cGxpY2F0ZSBjb2RlIGJ5IGFsd2F5cworCXNhdmluZyB0aGUgY2hhbmdlLiAgSWYgaW5fZ3JvdXAgPT0gMCwgY2FsbCBhcHBseV9jaGFuZ2VfZ3JvdXAuCisJKGFwcGx5X2NoYW5nZV9ncm91cCk6IElmIHJlY29nX21lbW9pemVkIGZhaWxzLCBzZWUgaWYgd2UgaGF2ZSBhCisJQ0xPQkJFUiBhdCB0aGUgZW5kLiAgVXNlIHZhbGlkYXRlX2NoYW5nZSB0byByZXBsYWNlIHRoZSBwYXR0ZXJuCisJd2l0aCBvbmUgd2l0aG91dCB0aGUgQ0xPQkJFUiBpZiBzbzsgbGF0ZXIgd2Ugd2lsbCB2ZXJpZnkgdGhhdCBjaGFuZ2UuCisKKwkqIHRyZWUuYyAoc3RhYmlsaXplX3JlZmVyZW5jZV8xKTogTm93IHN0YXRpYzsgYWxzbywgZGVmaW5lIGFzIGZvcndhcmQKKwlyZWZlcmVuY2UgYXQgc3RhcnQgb2YgZmlsZS4KKworCSogcnRsLmRlZjogQWRkIG5ldyBmaWVsZCBpbiBERUZfUlRMX0VYUFIgbWFjcm8gdG8gZ2l2ZSB0aGUgImNsYXNzIgorCW9mIHRoZSBydHggb3BlcmF0aW9uLgorCSogcnRsLmg6IERFRl9SVExfRVhQUiBoYXMgb25lIGFkZGl0aW9uYWwgYXJnLgorCShydHhfY2xhc3MsIEdFVF9SVFhfQ0xBU1MpOiBOZXcgdmFyIGFuZCBtYWNyby4KKwkqIHJ0bC5jOiBERUZfUlRMX0VYUFIgaGFzIG9uZSBhZGRpdGlvbmFsIGFyZy4KKwkocnR4X2NsYXNzKTogSW5pdGlhbGl6ZSB0YWJsZS4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogSWYgYW4gaW5wdXQgb3BlcmFuZCBjb250YWlucyBhIGRlYWQKKwlyZWdpc3RlciB1c2VkIG5vd2hlcmUgZWxzZSBpbiB0aGUgaW5zbiwgdHJ5IHRvIHVzZSBpdCBhcyBhIHJlbG9hZCByZWcuCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBJZiBjYW5jZWxsaW5nIG9wdGlvbmFsIHJlbG9hZCwKKwljbGVhciByZWxvYWRfcmVnX3J0eC4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgd2UgY2FuIGZpbmQgcmVsb2FkIHZhbHVlIGx5aW5nIGFyb3VuZCwKKwl1c2UgdGhhdCByZWdpc3RlciB1bmxlc3MgY2hvaWNlIG1hZGUgYnkgZmluZF9yZWxvYWRzIHdvdWxkIGFsc28gc2F2ZQorCWFuIGluc24gKHRoZSBuZXcgY2hvaWNlIGFkZGVkIGFib3ZlIHdvbid0KS4KKworCSogZ2Vub3V0cHV0LmM6IFVwZGF0ZSBjb21tZW50cyBvbiB0aGluZ3Mgd3JpdHRlbi4gIENoYW5nZSBvcmRlciB0bworCWFncmVlIHdpdGggdGhlIG9yZGVyIHdyaXR0ZW4uCisJKG91dHB1dF9lcGlsb2d1ZSk6IFJlbW92ZSBleHRyYW5lb3VzIHRlc3RzLgorCitUaHUgSmFuCSAzIDEzOjMyOjU0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBydGwuYyAocmVhZF9ydHgpOiBDYXN0IE5VTEwgdmVjdG9yLgorCisJKiBCeSBKaW0gV2lsc29uLgorCSogdHJlZS5jIChzdGFiaWxpemVfcmVmZXJlbmNlKTogTW9kaWZpZWQgdG8gY2FsbCBzdGFiaWxpemVfcmVmZXJlbmNlXzEKKwlpbnN0ZWFkIG9mIHNhdmVfZXhwci4KKwkoc3RhYmlsaXplX3JlZmVyZW5jZV8xKTogTmV3IGZ1bmN0aW9uLglGb3IgYXJpdGhtZXRpYyBvcGVyYXRvciB0cmVlcywKKwlyZWN1cnNlIG9uIHRoZSBzdWJ0cmVlcy4gIE90aGVyd2lzZSwgcHV0IGEgU0FWRV9FWFBSIGFyb3VuZCB0aGUKKwl0cmVlIGlmIGl0IGhhcyBzaWRlLWVmZmVjdHMuICAKKworVGh1IEphbgkgMyAxMjozNzo1NiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IE9ubHkgc2V0IHJlbG9hZF93aGVuX25lZWRlZCB0bworCVJFTE9BRF9GT1JfT1VUUFVUIG9yIFJFTE9BRF9GT1JfSU5QVVQgd2hlbiBpdCB1c2VkIHRvIGJlIFJFTE9BRF9PVEhFUi4KKworV2VkIEphbgkgMiAxODoyODoyMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBGaXggdHlwbyBzZXR0aW5nIGNvbnN0bTFfcnR4LgorCitXZWQgSmFuCSAyIDA3OjUzOjA0IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogc3BhcmMubWQgKGZpeF90cnVuY2Rmc2kyIHJlY29nbml6ZXIpOiB4b3BlcmFuZHMgbXVzdCBoYXZlIDMKKwllbGVtZW50cyBiZWNhdXNlIGBvdXRwdXRfZnBfbW92ZV9kb3VibGUnIGNhbiB3cml0ZSB0byBvcGVyYW5kc1syXS4KKworV2VkIEphbgkgMiAxNzoxNjoyMCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IElmIHdlIGhhdmUgY2FsbF9wb3AsIHVzZSBpdCBpZiB3ZSBoYXZlCisJbm8gc3RhY2sgYXJndW1lbnRzLgorCisJKiBvdXQtdmF4LmMgKHJlbGF0aW9uYWxfb3ApOiBEZWxldGVkLCByZWR1bmRhbnQuCisJKiB2YXgubWQgKGJyYW5jaCk6IFVzZSBjb21wYXJpc29uX29wZXJhdG9yIChpbiByZWNvZy5jKSBpbnN0ZWFkIG9mCisJcmVsYXRpb25hbF9vcC4KKwkqIHRtLXZheC5oIChQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1ApOiAiQyIgaXMgbm90IHB1bmN0dWF0aW9uLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQsIGZvcmdldF9vbGRfcmVsb2Fkc18xKTogRG9uJ3QgY2xlYXIKKwlyZWdfaGFzX291dHB1dF9yZWxvYWQgYW5kIHJlZ19pc19vdXRwdXRfcmVsb2FkIGZvciBlYWNoIGluc24sIGp1c3QKKwlvbmVzIHRoYXQgbmVlZCByZWxvYWQuCUluc3RlYWQsIGludGVycHJldCBlYWNoIGVudHJ5IGFzIHplcm8gaWYKKwluX3JlbG9hZHMgPT0gMC4KKworV2VkIEphbgkgMiAxNTo1MjoxMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEZpeCB0eXBvcy4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDbGVhciBjc2Vfbm90X2V4cGVjdGVkIGFmdGVyIGxvb3AuCisJKiBydGwuaCAoY3NlX25vdF9leHBlY3RlZCk6IERlY2xhcmUgaGVyZS4KKwkqIGV4cHIuaDogTm90IGhlcmUuCisKK1R1ZSBKYW4JIDEgMjE6NTU6MTEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGNvbnN0bTFfcnR4KTogTmV3IHN0YW5kYXJkIGNvbnN0YW50LgorCShnZW5fcnR4KTogVXNlIGl0IHdoZW4gYXBwcm9wcmlhdGUuCisJKGluaXRfZW1pdF9vbmNlKTogSW5pdGlhbGl6ZSBpdC4KKworCSogb3V0LXZheC5jIChzcGxpdF9xdWFkd29yZF9vcGVyYW5kcyk6IE5ldyBmdW5jdGlvbi4KKwkocmVsYXRpb25hbF9vcCk6IExpa2V3aXNlLgorCSogdmF4Lm1kIChleHRlbmRzaWRpMiwgYWRkZGkzLCBzdWJkaTMpOiBOZXcgcGF0dGVybnMuCisJKG1vdmRpKTogVXNlIGNscnEgd2hlbiBhcHByb3ByaWF0ZS4KKwkobW92YXEgcmVjb2duaXplcik6IE5ldyBwYXR0ZXJuLgorCisJKiByZWNvZy5oIChPVVRfRkNOKTogTmV3IG1hY3JvLgorCSogZ2Vub3V0cHV0LmM6IEluY2x1ZGUgcmVjb2cuaCBpbiBvdXRwdXQgZmlsZS4JTm8KKwlsb25nZXIgZGVmaW5lICJjb25zdCIsIHNpbmNlIHRoYXQgaGFwcGVucyBpbiByZWNvZy5oLgorCisJKiB0bS12YXguaCAoUFJJTlRfT1BFUkFORCk6IEFkZCAnQycgdG8gcHJpbnQgYSByZXZlcnNlZCBjb25kaXRpb24uCisJKiBvdXQtdmF4LmMgKHJldl9jb25kX25hbWUpOiBSZXR1cm4gaXRzIG5hbWUuCisJKiB2YXgubWQgKHVubmFtZWQgcGF0dGVybnMpOiBDb21iaW5lIHNldmVyYWwgcmV2ZXJzZWQgYnJhbmNoIHBhdHRlcm5zCisJaW50byBvbmUsIHVzaW5nIG1hdGNoX29wZXJhdG9yIHdpdGggcmVsYXRpb25hbF9vcCBhbmQgIiVDIi4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEhhbmRsZSBtdWx0aS13b3JkIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbi4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZ251bGliKTogVXNlIFJBTkxJQl9URVNULiAgVXNlIGxpYmdfZGlyLgorCShsaWJnX2Rpcik6IE5ldyBjdXN0b21pemF0aW9uIHZhcmlhYmxlLgorCisJKiBhc3NlcnQuaCAoX19hc3NlcnQpOiBVc2Ugc3RhbmRhcmQgR05VIGZvcm1hdCBmb3IgZXJyb3IgbWVzc2FnZXMuCisKK1R1ZSBKYW4JIDEgMjE6MjU6MDAgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEpCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MsIGNhc2UgUExVUyk6IEFsd2F5cyBtb3ZlIGNvbnN0YW50IHRvIHRoZQorCW91dHNpZGUgb2YgYSBQTFVTIGV4cHJlc3Npb24uCisKK1R1ZSBKYW4JIDEgMTE6NDU6MjIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGVjb2ZmLWNtcDogU3BlY2lmeSBgYycgaW4gb3B0aW9uIHRvIHRhaWwuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQsIGxheW91dF91bmlvbiwgbGF5b3V0X3R5cGUpOgorCVVzZSBST1VORF9UWVBFX0FMSUdOIGFuZCBST1VORF9UWVBFX1NJWkUgdG8gY29tcHV0ZQorCWFsaWdubWVudCBhbmQgc2l6ZSBvZiByZWNvcmRzLCB1bmlvbnMgYW5kIGFycmF5cy4KKwkqIFJPVU5EX1RZUEVfQUxJR046IE5ldy4gIEFyZ3MgYXJlIHR5cGUsIHNwZWMnZCBhbGlnbiwgb3RoZXIgbWluIGFsaWduLgorCSogUk9VTkRfVFlQRV9TSVpFOiBOZXcuCSBBcmdzIGFyZSB0eXBlLCBzaXplIG9mIGNvbnRlbnRzLCBhbGlnbi4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucykgW1BSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUF06CisJU2NhbiBvdXRwdXQgYW5kIG91dHB1dC1hZGRyZXNzIHJlbG9hZHMgdG9nZXRoZXIuCisJQ2hlY2sgZm9yIG1hdGNoaW5nIGhhcmQgcmVnLgorCisJKiBjb25maWcuZ2NjOiBTZXQgcHJvcGVyIHNoZWxsIHZhcnMgaW4gYmlnIGRpc3BhdGNoLiAgTm90IGBtYWNoaW5lJy4KKwkoaTM4Ni1pc2MpOiBOZXcgYWx0ZXJuYXRpdmUuCisKK1R1ZSBKYW4JIDEgMDg6Mjk6NDkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVvcmcuYyAodXBkYXRlX2Jsb2NrKTogVHVybiBiYl90aWNrIHVwZGF0ZSBiYWNrIG9uOyBpdCBpcyBuZWVkZWQsCisJYWZ0ZXIgYWxsLgorCitNb24gRGVjIDMxIDE4OjEyOjA3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmF0dHJ0YWIuYyAod3JpdGVfdGVzdF9leHByLCBjYXNlIEVRX0FUVFIpOiBVc2UgY29ycmVjdCBleHByZXNzaW9uCisJbnVtYmVyIGZvciBhdHRyaWJ1dGUgdmFsdWUuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFVzZSBzaW5nbGVfc2V0IHdoZW4gbG9va2luZyBmb3IgYW4gaW5zbiB0aGF0IHNldHMKKwljYzAgZm9sbG93ZWQgYnkgb25lIHRoYXQgbm8gbG9uZ2VyIGRvZXMuCisKKwkqIHJlY29nLmMgKGZpbmRfc2luZ2xlX3VzZSk6IElmIHRoZSBuZXh0IGluc24gYWZ0ZXIgb25lIHRoYXQgc2V0cworCWNjMCBpcyBub3QgYW4gSU5TTiBvciBKVU1QX0lOU04sIHJldHVybiAwOyBkb24ndCBibG93IHVwIG9uIGEgTk9URS4KKworCSogZW1pdC1ydGwuYyAoZW1pdF9pbnNuX2JlZm9yZSwgZW1pdF9pbnNuX2FmdGVyLCBlbWl0X2luc24pOiBSZXR1cm4KKwlzb21ldGhpbmcgc2Vuc2libGUgaWYgYSBTRVFVRU5DRSBvZiBsZW5ndGggemVybyB3YXMgcGFzc2VkLgorCVdlIG5vIGxvbmdlciBtYWtlIGEgU0VRVUVOQ0Ugd2l0aCBYVkVDID09IDAsIHNvIGRvbid0IHRlc3QgZm9yIGl0LgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogSGFuZGxlIGdlbl9tb3ZlX2luc24gcmV0dXJuaW5nCisJbm8gaW5zbnMgKG9jY3VycyBvbiBSVCBmb3IgZHVtbXkgcmVnaXN0ZXJzKS4KKwkKKwkqIHJ0bC5oIChyZWdfY2MwX3J0eCwgZmluZF9jYyk6IE5vIGxvbmdlciBuZWVkZWQuCisJKiBlbWl0LXJ0bC5jOiBMaWtld2lzZS4KKwkqIGNvbmRpdGlvbnMuaDogRW50aXJlIGZpbGUgaXMgI2lmZGVmIEhBVkVfY2MwLgorCSogZmluYWwuYyAoQ0NfU1RBVFVTX0lOSVQpOiBNYWtlIGEgbnVsbCBkZWZhdWx0ICNpZm5kZWYgSEFWRV9jYzAuCisJKGNjX3N0YXR1cyk6IE5vIGxvbmdlciBleGlzdHMgI2lmbmRlZiBIQVZFX2NjMC4KKwkoZmluYWxfc2Nhbl9pbnNuKTogRG8gQ0MgcHJvY2Vzc2luZyBvbmx5ICNpZmRlZiBIQVZFX2NjMC4KKwkoYWx0ZXJfY29uZCk6IE9ubHkgZXhpc3RzICNpZmRlZiBIQVZFX2NjMC4KKwkqIGdlbmVtaXQuYyAoZ2VuX2V4cCk6IE5vIGxvbmdlciBoYXZlIENDMF9SRUdOVU0gb3IgcmVnX2NjMF9ydHguCisJKiBnZW5vdXRwdXQuYyAobWFpbik6IEluY2x1ZGUgaW5zbi1jb25maWcuaCBiZWZvcmUgY29uZGl0aW9ucy5oLgorCSogcmVvcmcuYzogTGlrZXdpc2UuCisJKiBqdW1wLmMgKHJ0eF9lcXVhbF9mb3JfdGhyZWFkX3ApOiBSZW1vdmUgcmVmZXJlbmNlIHRvIENDMF9SRUdOVU07CisJd2UnbGwgaGF2ZSB0byBkbyB0aGlzIG9wdGltaXphdGlvbiBzb21lIG90aGVyIHdheSBsYXRlci4KKwkqIHRtLWEyOWsuaCAoTk9USUNFX1VQREFURV9DQyk6IERlbGV0ZWQuCisKK01vbiBEZWMgMzEgMTQ6NDQ6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5oIChlbnVtX3JlbG9hZF93aGVuX25lZWRlZCk6CisJTmV3IGFsdGVybmF0aXZlcyBSRUxPQURfRk9SX09VVFBVVCwgUkVMT0FEX0ZPUl9JTlBVVC4KKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogVXNlIHRob3NlIHdoZW4gYXBwcm9wcmlhdGUuCisJKG1hcmtfcmVsb2FkX3JlZ19pbl91c2UpOiBSZWNvcmQgdGhpcyB1c2FnZSBzcGVjaWFsbHkuCisJKHJlbG9hZF9yZWdfZnJlZV9wLCByZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3ApOiBIYW5kbGUgdGhpcyB1c2FnZS4KKwkocmVsb2FkX3JlZ19yZWFjaGVzX2VuZF9wKTogTGlrZXdpc2UuCisJKGVtaXRfcmVsb2FkX2luc25zKTogVHJlYXQgUkVMT0FEX0ZPUl9JTlBVVCBsaWtlIFJFTE9BRF9PVEhFUi4KKworCSogaTM4Ni5tZCAocHVzaCBmb3IgU0Ztb2RlKTogT3BlcmFuZCBvZiBmc3Qgd2FzIG1pc3NpbmcuCisKK01vbiBEZWMgMzEgMDg6NTA6MTcgMTk5MCAgQ3JhaWcgQnVybGV5CShidXJsZXkgYXQgcG9nby5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IEZvciBBUlJBWV9UWVBFIGNhc2UsIGRvbid0IHRyeQorCWFuZCBjb21wdXRlIGEgc2l6ZSBpZiB0aGVyZSBpcyBubyBUWVBFX01BWF9WQUxVRSBmb3IgdGhlIGluZGV4LgorCSogdHJlZS5jLCB0cmVlLmggKGJ1aWxkX2luZGV4XzJfdHlwZSk6IE5ldyBmdW5jdGlvbiwgbGlrZQorCWJ1aWxkX2luZGV4X3R5cGUgZXhjZXB0IGl0IGFjY2VwdHMgdGhlIGxvdyB2YWx1ZSBhcyBhbiBhcmcgaW5zdGVhZAorCW9mIGFzc3VtaW5nIDAuCisKK01vbiBEZWMgMzEgMDg6MDk6MTAgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogSGFuZGxlIGNhc2Ugd2hlbiB3ZSB0cnkKKwl0byByZXR1cm4gYSB2b2lkIHZhbHVlIChzdWNoIGFzIGEgdm9pZCBmdW5jdGlvbiBjYWxsKSBpbiBhCisJZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQsIGFuZCB0aGVyZSBhcmUgY2xlYW51cHMgdG8gcnVuLgorCitTdW4gRGVjIDMwIDIxOjA4OjMyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRtLWEyOWsuaCAoVEFSR0VUX1ZFUlNJT04pOiBDYW4ndCB1c2UgdGFyZ2V0X2ZsYWdzIHNpbmNlIHdlIGNhbgorCWJlIGNhbGxlZCBmcm9tIGdjYy5jLgorCisJKiB0bS1yczYwMDAuaCAoUkVHX0FMTE9DX09SREVSKTogUHV0IHIxMiBhZnRlciByMTM7IGl0IG1pZ2h0IGJlIAorCWhvbGRpbmcgYSBESW1vZGUgdmFsdWUgYW5kIHNvIG1pZ2h0IGJlIHZlcnkgZXhwZW5zaXZlICh3ZSB3b24ndAorCXdvcnJ5IGFib3V0IFRJbW9kZSkuCisKKwkqIHJzNjAwMC5tZCAoc3VidHJhY3QgcGF0dGVybnMpOiBGaXggaW5jb3JyZWN0IG9wZXJhbmQgbnVtYmVyIGluICVJLgorCShtb3Z0aSk6IERpc2FsbG93IGluZGV4ZWQgbWVtb3J5IG9wZXJhbmRzLgorCisJKiBvdXQtcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ20nKTogRml4IHR5cG8uCisJKGluY2x1ZGVzX3JzaGlmdF9wKTogQ29ycmVjdGx5IGNvbXB1dGUgbWFzay4KKworCSogb3V0LWEyOWsuYyAob3V0cHV0X29wZXJhbmQpOiBBZGQgbWlzc2luZyBwYXJlbnRoZXNlcy4KKwkocHJpbnRfb3BlcmFuZCk6IFJlcGxhY2UgaWYvdGhlbi9lbHNlIHN0cnVjdHVyZSB3aXRoIHN3aXRjaCBzdGF0ZW1lbnQuCisKKwkqIGEyOWsubWQgKGJlcSwgYm5lKTogVHJ5IHRvIHVzZSBORSB0ZXN0IHdoZW5ldmVyIHBvc3NpYmxlOyBpdAorCXdpbGwgcHJvZHVjZSBiZXR0ZXIgY29kZSBpZiB3ZSBoYXZlIGJpdC10ZXN0cy4KKworU3VuIERlYyAzMCAxMjowMjowMyAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIHRtLXNwYXJjLmggKFBSSU5UX09QRVJBTkQpOiBQdXQgJ1InIGNhc2UgYmVmb3JlIFJFRyBzbyB0aGF0IGl0CisJdGFrZXMgd2hlbiAnUicgaXMgcGFzc2VkIGluIGFzIENPREUuICBBbHNvLCBoYW5kbGUgJ0InIGxldHRlci4KKworCSogc3BhcmMubWQ6IChwYXR0ZXJuIGZvciBjb252ZXJ0aW5nIERGbW9kZSB0byBTSW1vZGUpOiBTZWNvbmQKKwlhcmd1bWVudCB0byBgb3V0cHV0X2FzbV9pbnNuJyBzaG91bGQgYmUgYG9wZXJhbmRzJywgbm90IHplcm8uCisJKHRhYmxlanVtcCk6IFRoZSBqdW1wIGluc24gaXMgImptcCIsIG5vdCAianVtcCIuCisJKGdlbl9maXh0cnVuY2Rmc2kyKTogb3BlcmFuZHNbMl0gc2hvdWxkIGdldCB0aGUgcHNldWRvLCBub3QKKwlvcGVyYW5kc1szXSAod2hpY2ggaXMgbm9uZXhpc3RlbnQpLgorCShjYWxsKTogRml4IHR5cG8gd2hpY2ggaGFkICVvNyBiZWluZyBlbWl0dGVkIGFzICVvLgorCSh2YXJpb3VzIHBhdHRlcm5zKTogRml4ZWQgcGxhY2VzIHdoZXJlIG1hdGNoX29wZXJhbmQgaGFkIHRoZSB3cm9uZworCW9wZXJhbmQgbnVtYmVyLgorCitTYXQgRGVjIDI5IDE3OjI3OjAwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNwYXJjLm1kOiBjY19zdGF0dXMgbm8gbG9uZ2VyIGhhbmRsZXMgY29uZGl0aW9uIGNvZGUgdXBkYXRlcy4KKwlJbnN0ZWFkLCBjb25kaXRpb24gY29kZXMgYXJlIGV4cGxpY2l0bHkgc2V0IGFuZCB1c2VkIHZpYQorCWhhcmQgcmVnaXN0ZXIgMC4gIFNwZWNpYWwgYXR0cmlidXRlcyBzcGVjaWZpYyB0byBjb25kaXRpb24gY29kZXMKKwkoc3VjaCBhcyB3aGV0aGVyIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHNob3VsZCB0ZXN0IHRoZSBpbnRlZ2VyIG9yCisJZmxvYXRpbmctcG9pbnQgY29uZGl0aW9uIGNvZGVzLCBvciB0aGF0IHRoZSBjb25kaXRpb24gY29kZXMgY2Fubm90CisJYmUgdGVzdGVkIGZvciBhIGNvbmRpdGlvbiB3aGljaCB3b3VsZCB0ZXN0IHRoZSBvdmVyZmxvdyBiaXQpIGFyZQorCWhhbmRsZWQgYnkgZW5jb2RpbmcgdGhlIGF0dHJpYnV0ZSBpbiB0aGUgbW9kZSBmb3IgdGhlIGNvbmRpdGlvbgorCWNvZGUgcmVnaXN0ZXIuCisJKHR5cGUgYXR0cmlidXRlcyk6IHR5cGUgInVuYXJ5IiBpbnNucyBoYXZlIG9uZSBpbnB1dCBvcGVyYW5kICgxKQorCWFuZCBvbmUgb3V0cHV0IG9wZXJhbmQgKDApCisJdHlwZSAiYmluYXJ5IiBpbnNucyBoYXZlIHR3byBpbnB1dCBvcGVyYW5kcyAoMSwyKSBhbmQgb25lIG91dHB1dCAoMCkKKwl0eXBlICJjb21wYXJlIiBpbnNucyBoYXZlIG9uZSBvciB0d28gaW5wdXQgb3BlcmFuZHMgKDAsMSkgYW5kIG5vIG91dHB1dAorCXR5cGUgIm1vdmUiIGFuZCB0eXBlICJhcml0aCIgaGF2ZSBiZWVuIGRlbGV0ZWQuCisJKHByZXNjYW4gYXR0cmlidXRlKTogRGVsZXRlZC4gIE1hY2hpbmUgZGVzY3JpcHRpb24gbm93IHB1dHMKKwlmbG9hdGluZy1wb2ludCB6ZXJvIGluIHJlZ2lzdGVycyB3aGVuIG5lZWRlZC4KKwkodXNlX2NjIGF0dHJpYnV0ZSk6IERlbGV0ZWQuCisJKGZwY2MgZGVmaW5lX2RlbGF5KTogTm8gbG9uZ2VyIGRlcGVuZCBvbiAidXNlX2NjIiBhdHRyaWJ1dGUuCisJQWxzbywgZnBjYyBkZWxheSBjaGFyYWN0ZXJpc3RpY3MgaG9sZCBmb3IgImZwY2MiIHR5cGUgaW5zbnMuCisJKGNjIGF0dHJpYnV0ZSk6IERlbGV0ZWQuCisJKGNtcHh4IHBhdHRlcm5zKTogTm93IHdyaXR0ZW4gYXMgYGRlZmluZV9leHBhbmQncyBzbyB3ZSBjYW4gc3RvdworCWF3YXkgb3BlcmFuZHMuCVdoZW4gdGhlIHBhdHRlcm4gdGhhdCB3aWxsIHVzZSB0aGUgcmVzdWx0cyBvZiB0aGUKKwljb25kaXRpb25hbCB0ZXN0IGlzIGVtaXR0ZWQsIGl0IGNhbiB1c2UgdGhlc2Ugb3BlcmFuZHMgdG8gZmlndXJlCisJb3V0IHRoZSByaWdodCB3YXkgdG8gZW1pdCB0aGUgY29tcGFyZS4KKwkoYmNjIHBhdHRlcm5zKTogUmV3cml0dGVuIHRvIGVtaXQgY29tcGFyaXNvbiAoYmFzZWQgb24gc3Rvd2VkLWF3YXkKKwlpbmZvKSBiZWZvcmUgZW1pdHRpbmcgYnJhbmNoLgorCShzY2MgcGF0dGVybnMpOiBIYW5kbGUgYWxsIHRoZSBjYXNlcyB3aXRoIGJyYW5jaC1mcmVlIGNvZGUuCisJQWRkZWQgbmV3IHBhdHRlcm4gdG8gcmVjb2duaXplICh4ICsgKGkgPT0gMCkpLgorCShtb3ZzaSBwYXR0ZXJuIHJlY29nbml6ZXIpOiBTcGxpdCBpbnRvIHR3byBwYXR0ZXJucyBzbyB0aGF0IGUuZy4KKwkiKHNldDpTSSAobWVtOlNJIC4uLikgKGNvbnN0X2ludCA1KSkiIGlzIG5ldmVyIGNvbnNpZGVyZWQgdmFsaWQuCisJSW5zdGVhZCB0aGlzIGhhcyB0byBiZSBhIHR3by1pbnNuIHNlcXVlbmNlLgorCShtb3Z7aHF9aSBwYXR0ZXJuIHJlY29nbml6ZXJzKTogRGl0dG8uCisJKG1vdnN0cnNpKTogRm9yY2Ugb3BlcmFuZHNbMl0gb3V0IG9mIG1lbW9yeSBpZiBpdCB3YXMgaW4gbWVtb3J5LgorCSh7emVybyxzaWdufV9leHRlbmRYWSk6IE5vdyB3cml0dGVuIGFzIGBkZWZpbmVfZXhwYW5kJ3MgaW5zdGVhZCBvZgorCWBkZWZpbmVfaW5zbidzIGZvciBtb3JlIGFjY3VyYXRlIG1hY2hpbmUgbW9kZWxpbmcuCisJQWRkZWQgbmV3IHBhdHRlcm4gdG8gb3B0aW1pemUgYml0LWZpZWxkIGNvbXBhcmVzLgorCShmbG9hdHNpc2YyIHBhdHRlcm5zKTogRGVsZXRlIHJlZHVuZGFudCBzZXR0aW5nIG9mICJpbl9jYWxsX2RlbGF5IgorCWF0dHJpYnV0ZS4KKwkoZml4X3RydW5je3NmLGRmfXNpMiBwYXR0ZXJuKTogVXNlIGNsb2JiZXJhYmxlIHJlZ2lzdGVyIGluIHdoaWNoCisJdGhlIGNvbnZlcnNpb24gY2FuIHRha2UgcGxhY2UuCVVzZWQgdG8gdXNlICVmMzAsJWYzMS4KKwkoe2FkZCxzdWJ9ZGkzIHBhdHRlcm4pOiBQdXQgZXhwbGljaXQgY2xvYmJlciBvZiAocmVnIDApIGluIHRoZQorCXBhdHRlcm4uCisJKG5lZ2RpMiBwYXR0ZXJuKTogRGl0dG8uCisJQWRkZWQgbmV3IHBhdHRlcm5zIHRvIGhhbmRsZSBtZXJnaW5nIG9mIGFkZGl0aW9uL3N1YnRyYWN0aW9uIHdpdGgKKwljb25kaXRpb24gY29kZSB0ZXN0aW5nICh3aXRoIChyZWc6Q0NfTk9PViAwKSkuCisJKHthbmQsaW9yLHhvcn1jYnNpMyBwYXR0ZXJuKTogT2Jzb2xldGUuCSBEZWxldGVkLgorCUFkZGVkIHBhdHRlcm5zIHRvIHJlcHJlc2VudCBzZXR0aW5nIG9mIGNvbmRpdGlvbiBjb2RlcyBpbiBhZGRpdGlvbgorCXRvIHBlcmZvcm1pbmcgbG9naWNhbCBvcGVyYXRpb25zLgorCSh7bmVnLGFic31kZjIgcGF0dGVybik6IFVzZSBgUicgcHJpbnQgbGV0dGVyIHRvIG92ZXJjb21lIHRoZSBuZWVkCisJdG8gdXNlIGEgQyBhY3Rpb24gaW5zdGVhZCBvZiBhIHNpbXBsZSB0ZW1wbGF0ZS4KKwkoYXNoe2wscn17aGkscWl9Myk6IERlZmluZSBwYXR0ZXJucyBmb3Igc2hpZnRzIG9uIHN1Yi1TSW1vZGUKKwlvcGVyYW5kcy4KKwkoanVtcCBwYXR0ZXJuKTogVXNlIGAqJyBwcmludCBjb2RlIHRvIG9idmlhdGUgdGhlIG5lZWQgZm9yIGEgQworCWFjdGlvbiB3aGVuIGEgdGVtcGxhdGUgY2FuIGRvLgorCSh0YWJsZWp1bXAgcGF0dGVybik6IERpdHRvLCB3aXRoIGBeJyBjb2RlIGFzIHdlbGwuCisJRGVsZXRlZCBgZGVmaW5lX3NwbGl0J3MgdGhhdCB3ZXJlIHVzZWQgdG8gaGFuZGxlIG1lbS1tZW0gbW92ZXMgaW4KKwl0aGUgY2FzZSBvZiBQSUMgZ2VuZXJhdGlvbi4gIFNpbmNlIGFsbCBtb3ZlIGluc25zIGFyZSBlbWl0dGVkIGFuZAorCW1haW50YWluZWQgYXMgU1BBUkMtdmFsaWQgaW5zbnMsIHRoZXNlIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLgorCSh2YXJpb3VzIHBhdHRlcm5zKTogKEhJIC4uLikgaXMgc3BlbGxlZCAoSEk6U0kgLi4uKS4gIEFsc28sIHVzZQorCWBnZW5fbG93cGFydCcgaW5zdGVhZCBvZiBidWlsZGluZyBzdWJyZWdzIGRpcmVjdGx5LgorCU5ldyBgZGVmaW5lX3NwbGl0J3Mgd2VyZSBhZGRlZCB0byBzcGxpdCBzY2MgaW5zbnMgaW50byBzaW1wbGVyCisJY29tcG9uZW50cyB3aGljaCBoYXZlIHNpbmdsZS1pbnNuIHRlbXBsYXRlcy4KKwlGaXhlZCBhIHJldHVybiBwZWVwaG9sZSB3aGVuIHJldHVybmluZyBhIFNGbW9kZSB2YWx1ZSAoaXQgd2FzCisJbWlzc2luZyB0aGUgInJldCIhKS4KKwlMb3RzIG9mIGNvbXBsaWNhdGVkIHBlZXBob2xlcyB0aGF0IGJyb3VnaHQgY2MgdGVzdGluZyBhbmQKKwlhcml0aG1ldGljIG9wZXJhdGlvbnMgdG9nZXRoZXIgd2VyZSBkZWxldGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZQorCWNvbWJpbmVyIHNob3VsZCBub3cgaGFuZGxlIGFsbCB0aGVzZSBjYXNlcy4KKworCSogb3V0LXNwYXJjLmMgKHNwYXJjX2NvbXBhcmVfb3B7MCwxfSk6IE5ldyBnbG9iYWwgdmFyaWFibGVzLgorCVVzZWQgdG8gaG9sZCB0aGUgb3BlcmFuZChzKSB0byBjb21wYXJlIGluc25zIGluIGxpZXUgb2YgZW1pdHRpbmcgYQorCWNvbXBhcmUuCisJKHJlZ19vcl9jYzBfb3BlcmFuZCk6IERlbGV0ZWQuCisJKG5vcm1hbF9jb21wX29wZXJhdG9yKTogTmV3IGZ1bmN0aW9uLgorCShjY19hcml0aG9wKTogTm93IHJldHVybnMgMCBmb3IgUExVUyBhbmQgTUlOVVMuCisJKGNjX2FyaXRob3BuKTogTm93IHJldHVybnMgMCBmb3IgWE9SLgorCShnZW5fY29tcGFyZV9yZWcpOiBOZXcgZnVuY3Rpb24uCisJKHNwYXJjX2FkZHJlc3NfY29zdCk6IFNpbXBsaWZpZWQgYmVjYXVzZSBpdCB0dXJucyBvdXQgaXQgZG9lc24ndAorCW1hdHRlciB3aGF0IGlzIHJldHVybmVkIGZvciBpbGxlZ2l0aW1hdGUgYWRkcmVzc2VzLgorCShoYXJkX3JlZ25vX21vZGVfb2spOiBVcGRhdGVkIHRvIHVzZSB0aGVzZSBuZXcgI2RlZmluZXMuCisJKENfTU9ERVMpOiBOZXcgI2RlZmluZSwgZm9yIGNvbmRpdGlvbiBjb2RlIG1vZGVzLgorCShTX01PREVTKTogRGl0dG8sIGZvciBzaW5nbGUtd29yZCAoYW5kIHNtYWxsZXIpIHF1YW50aXRpZXMuCisJKERfTU9ERVMpOiBEaXR0bywgZm9yIGRvdWJsZS13b3JkIChhbmQgc21hbGxlcikgcXVhbnRpdGllcy4KKwkoVF9NT0RFUyk6IERpdHRvLCBmb3IgdGV0cmEtd29yZCAoYW5kIHNtYWxsZXIpIHF1YW50aXRpZXMuCisJKFNGX01PREVTKTogRGl0dG8sIGZvciBTRm1vZGUgcXVhbnRpdGllcy4KKwkoREZfTU9ERVMpOiBEaXR0bywgZm9yIFNGX01PREUsIERGbW9kZSwgU0Ntb2RlLCBldGMuCisJKFRGX01PREVTKTogRGl0dG8sIGZvciBERl9NT0RFLCBURm1vZGUsIERDbW9kZSwgZXRjLgorCShvdXRwdXRfZmxvYXRzaXtkZixzZn0yKTogR3JlYXRseSBzaW1wbGlmaWVkLgorCShvdXRwdXRfcGljX3NlcXVlbmNlLG91dHB1dF9waWNfc2VxdWVuY2VfMixmcF96ZXJvX2hvb2ssCisJb3V0cHV0X3RhaWxfY2FsbCk6IFR1cm5lZCBvZmYuCisKKwkqIHRtLXNwYXJjLmggKEFTTV9TUEVDKTogUGFzcyBgLWsnIHRvIGFzc2VtYmxlciBpZiBjb21waWxpbmcgUElDLgorCShXT1JEU19CSUdfRU5ESUFOKTogRGVmaW5lIGFzIDEsIG5vdCAwLgorCShGSVhFRF9SRUdJU1RFUlMpOiAlZjMwIGFuZCAlZjMxIGFyZSBub3cgYWxsb2NhdGFibGUuCisJKFJFR19DQzBfUlRYLCBDQzBfUkVHTlVNKTogRGVsZXRlZC4KKwkoRVhUUkFfQ0NfTU9ERVMpOiBOZXcgbW9kZXMgQ0NfTk9PVm1vZGUgYW5kIENDRlBtb2RlLiAgVGhlIGZvcm1lcgorCWlzIGZvciB3aGVuIHRoZSBvdmVyZmxvdyBiaXQgaXQgbm90IHRvIGJlIHRlc3RlZDsgdGhlIGxhdHRlciBpcworCWZvciB3aGVuIHRoZSBjb25kaXRpb24gaXMgc2l0dGluZyBpbiB0aGUgZmxvYXRpbmcgcG9pbnQgdW5pdC4KKwkoU0VMRUNUX0NDX01PREUpOiBOZXcgbWFjcm8uCisJKEZJTkFMX1BSRVNDQU5fSU5TTik6IERlbGV0ZWQuCisJKENDXyogbWFjcm9zKTogRGVsZXRlZC4KKwkoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogTmV3IHZhbGlkIGNoYXJzIGFyZSAnIycgKGZvcgorCXdoZXRoZXIgdG8gcHJpbnQgYSBub29wIG9yIG5vdCksICcqJyAoZm9yIHdoZXRoZXIgdG8gcHJpbnQgYSAiLGEiCisJb3Igbm90KSwgYW5kICdeJyAoZm9yIHdoZXRoZXIgdG8gZW1pdCBjb2RlIGZvciBQSUMgYnJhbmNoIG9yIG5vdCkuCisJKFBSSU5UX09QRVJBTkR7LF9BRERSRVNTfSk6IFJlcGxhY2UgY2FsbHMgdG8gZnByaW50ZiBieSBjYWxscyB0bworCWZwdXRzIHdoZXJlIHRoYXQgaXMgY29udmVuaWVudC4KKworCSogZXhwci5oLCBjcGx1cy1kYnhvdXQuYzogI2lmZGVmIEJZVEVTX0JJR19FTkRJQU4gc2hvdWxkIGJlICNpZi4KKworCSogcmVsb2FkLmMgKHN0cnVjdCByZXBsYWNlbWVudCk6IEFkZCBuZXcgZmllbGQgc3VicmVnX2xvYy4KKwkocHVzaF9yZWxvYWQpOiBJZiByZWxvYWRpbmcgU1VCUkVHX1JFRyBvZiBhIHBhcmFkb3hpY2FsIFNVQlJFRywKKwlzdG9yZSB0aGUgbG9jYXRpb24gb2YgdGhlIFNVQlJFRyBpbiBzdWJyZWdfbG9jIGluIFJFUExBQ0VNRU5UUy4KKwkocHVzaF9yZXBsYWNlbWVudCk6IEluaXRpYWxpemUgc3VicmVnX2xvYy4KKwkoc3Vic3RfcmVsb2Fkcyk6IERvbid0IHByb2R1Y2UgbmVzdGVkIFNVQlJFR3M7IHVzZSBzdWJyZWdfbG9jLgorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IEhhbmRsZSAoc2V0IFggKG9wIENPTlNUIFkpKSBwcm9wZXJseSB3aGVuCisJdGhlIG1vZGVzIG9mIG9wZXJhbmRzIDAgYW5kIDEgYXJlIGRpZmZlcmVudC4KKworU2F0IERlYyAyOSAxNjozNzoxMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWNyb2V4cGFuZCk6IFRlc3QgdHJhZGl0aW9uYWwgd2hlbiBjb21wdXRpbmcgZXhwYW5zaW9uIHNpemUuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOgorCUlmIHByb2ZpbGluZywgbGVhdmUgc29tZSBzcGFjZSBhZnRlciBgZ2NjX2NvbXBpbGVkLicuCisJKiB0bS1tODhrLmgsIHRtLXNwYXJjLmgsIHRtLXN1bjM4NmkuaCAoQVNNX0lERU5USUZZX0dDQyk6IERlbGV0ZWQuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBTZXQgcmVnX3JlbG9hZGVkX2NvbnRlbnRzLCBldGMsIGhlcmUuCisJKGNob29zZV9yZWxvYWRfcmVncyk6IE5vdCBoZXJlLS1leGNlcHQgZm9yIHJlZ19oYXNfb3V0cHV0X3JlbG9hZC4KKworCSogYy1wYXJzZS55IChuZXN0ZWRfZnVuY3Rpb24sIG5vdHlwZV9uZXN0ZWRfZnVuY3Rpb24pOgorCVVzZSBjb21wc3RtdCBmb3IgYm9keSwgbm90IGNvbXBzdG10X29yX2Vycm9yLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1oZWFkZXJzKTogVXNlIGJhc2VuYW1lIG9uIAorCSogc3R1cGlkLmMgKHN0dXBpZF9tYXJrX3JlZnMpOiBSZWFsbHkgZG8gbWFyayBjbG9iYmVyZWQgaGFyZHJlZworCWxpdmUgYmVmb3JlIHRoZSBpbnNuLgorCitGcmkgRGVjIDI4IDA1OjQ0OjEwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKHN1YnJlZ19sb3dwYXJ0X3ApOiBVc2UgY29ycmVjdCBtb2RlcyBpbgorCVdPUkRTX0JJR19FTkRJQU4gY2FzZS4KKworCSogcmVsb2FkLmMgKGNvbWJpbmVfcmVsb2Fkcyk6IERvbid0IHRyeSB0byByZWZlcmVuY2UKKwlpbnNuX29wZXJhbmRfY29uc3RyYWludCBmb3IgYW4gQVNNIGluc24uCisJRml4IHR5cG8gaW4gdGVzdGluZyBmb3IgbW9kaWZpZWQgb3BlcmFuZC4KKworVGh1IERlYyAyNyAxOTowMjo1NCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBFbnN1cmUgd2UgaW52YWxpZGF0ZSBTRVRfREVTVCBpZiBTRVRfU1JDIGlzIGEgQ0FMTC4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogU2F2ZSBtb2RlIG9mIG9yaWdpbmFsIGZpcnN0IG9wZXJhbmQgaW4gY2FzZSB0aGlzCisJaXMgYmVjb21pbmcgKHNpZ25fZXh0ZW5kIChjb25zdF9pbnQpKS4KKworVGh1IERlYyAyNyAxNjoxNTo1NiAxOTkwICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCwgb3V0LW04OGsuYyAoQ0Ntb2RlKTogVXNlIGl0LgorCShlbWl0X2JjbmQpOiBBdm9pZCBsb29zaW5nIHdoZW4gYmNuZCBpcyBjaGFuZ2VkIGludG8gc3h4LgorCShoaTE2L2xvMTYpOiBEb24ndCB1c2UgdGhlc2UgdG8gZm9ybSAxNi1iaXQgaW1tZWRpYXRlIHZhbHVlcy4KKwlJbnRyb2R1Y2UgYW5kIHVzZSAlWC8leC4KKwkobGVuZ3RoIGF0dHJpYnV0ZSk6IE1ha2UgYmV0dGVyIHVzZSBvZiBkZWZhdWx0cy4KKworCSogdG0tdjg4cjMyLmggKExJQl9TUEVDKTogR29lcyBoZXJlIHJhdGhlciB0aGFuIGluIHhtLXY4OHIzMi5oLgorCSogeG0tKjg4Ki5oOiBDbGVhbiB0aGVzZSB1cC4gIE1vc3QgZGlmZmVyZW5jZXMgZ28gYXdheSBieSByZWx5aW5nCisJb24gdGhlIDg4b3BlbiBzdGFuZGFyZHMuCisKK1RodSBEZWMgMjcgMTI6NDg6MjYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKToKKwlDaGFuZ2UgI2lmZGVmIHRvICNpZiwgdGVzdGluZyBCWVRFU19CSUdfRU5ESUFOLgorCitUaHUgRGVjIDI3IDA3OjM2OjQ1IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbmRfZW5kX2xhYmVsKTogSWdub3JlIFVTRSBhbmQgQ0xPQkJFUnMgd2hlbiBsb29raW5nIGZvcgorCWxhYmVsIGF0IGVuZCBvZiBmdW5jdGlvbi4KKworV2VkIERlYyAyNiAyMjozNTo1OSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChzZXF1ZW5jZV9lbGVtZW50X2ZyZWVfbGlzdCwgc2VxdWVuY2VfcmVzdWx0KTogTmV3IHZhcnMuCisJKHJlc3RvcmVfZW1pdF9zdGF0dXMsIGluaXRfZW1pdCk6IEluaXRpYWxpemUgdGhlbS4KKwkoZW1pdF9pbnNuX2JlZm9yZSwgZW1pdF9pbnNuX2FmdGVyLCBlbWl0X2luc24pOiBTYXZlIFNFUVVFTkNFIGluCisJc2VxdWVuY2VfcmVzdWx0LgorCU1ha2UgdGhlc2UgdGhyZWUgcm91dGluZXMgbW9yZSBhbGlrZSBpbiBzdHJ1Y3R1cmUuCisJKHN0YXJ0X3NlcXVlbmNlLCBlbmRfc2VxdWVuY2UsIHB1c2hfdG9fc2VxdWVuY2UpOiBDYWNoZSBJTlNOX0xJU1QgcGFpcnMKKwlpbiBzZXF1ZW5jZV9lbGVtZW50X2ZyZWVfbGlzdCByYXRoZXIgdGhhbiBtYWtpbmcgbmV3IG9uZXMuCisJKHN0YXJ0X3NlcXVlbmNlKTogTm8gbG9uZ2VyIHJldHVybiB1bnVzZWQgcnR4OyBvbmx5IG9uZSBjYWxsZXIKKwluZWVkZWQgdG8gYmUgY2hhbmdlZCAoaW4gZnVuY3Rpb24uYywgc2VlIGJlbG93KS4KKwkoZW5kX3NlcXVlbmNlKTogTm8gbG9uZ2VyIGhhcyBhcmd1bWVudC4KKwkoZ2VuX3NlcXVlbmNlKTogVHJ5IG9idGFpbmluZyBhIHByZS1idWlsdCBTRVFVRU5DRSBmcm9tCisJc2VxdWVuY2VfcmVzdWx0OyBubyBsb25nZXIgc3BlY2lhbC1jYXNlIGxlbmd0aCAwIHZlY3RvcnMuCisJKiBmdW5jdGlvbi5jIChmaXh1cF9tZW1vcnlfc3VicmVnKTogc3RhcnRfc2VxdWVuY2Ugbm8gbG9uZ2VyCisJcmV0dXJucyBhbiBydHggYW5kIGVuZF9zZXF1ZW5jZSBubyBsb25nZXIgaGFzIGFuIGFyZ3VtZW50LgorCSogcnRsLmggKHN0YXJ0X3NlcXVlbmNlKTogTm93IHZvaWQuCisJKHB1c2hfdG9fc2VxdWVuY2UsIGVuZF9zZXF1ZW5jZSk6IERlZmluZS4KKworV2VkIERlYyAyNiAxMzoxOTo0MCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ251bGliLmM6IE5vIGxvbmdlciAjdW5kZWYgcGVyZm9ybV8qIGlmIG5vdCBfX0dOVUNfXy4KKwkocGVyZm9ybV8qKTogRGVmaW5lIGVhY2ggaWYgbm90IGFscmVhZHkgZGVmLgorCitUdWUgRGVjIDI1IDE3OjMxOjE3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IFJld29yayBzY2FuIHRoYXQgbG9va3MgZm9yIHNldHMgb2YgdGhpbmdzCisJYmVpbmcgY29tcGFyZWQgdG8gYWxsb3cgaW50ZXJ2ZW5pbmcgaW5zbnM7IGNoZWNrIHRvIGVuc3VyZSB0aGF0CisJdGhleSBkb24ndCBzZXQgc29tZXRoaW5nIHRoYXQgd2UgbmVlZC4JUmV0dXJuIDAgaWYgdGhlIGJlc3Qgd2UgY2FuCisJZG8gaXMgZmluZCBzb21ldGhpbmcgd2hvc2UgbW9kZSBpcyBpbiBjbGFzcyBNT0RFX0NDLgorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IFJFVFVSTl9QT1BTX0FSR1Mgbm93IGdldHMgdGhlIGxlbmd0aCBvZgorCWFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwb3BwZWQgYnkgdGhlCisJY2FsbGVkIGZ1bmN0aW9uLgorCSogb3V0cHV0LmggKGN1cnJlbnRfZnVuY3Rpb25fcG9wc19hcmdzKTogQ2hhbmdlIGRlc2NyaXB0aW9uLgorCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9wb3BzX2FyZ3MpOiBMaWtld2lzZS4KKwkoYXNzaWduX3Bhcm1zKTogSW5pdGlhbGl6ZSBjdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJncyBoZXJlLgorCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogTm90IGhlcmUuCisJKiB0bS0qLmggKFJFVFVSTl9QT1BTX0FSR1MpOiBSZWZsZWN0IG5ldyBtZWFuaW5nLgorCShGVU5DVElPTl9FUElMT0dVRSk6IFVzZSBuZXcgbWVhbmluZyBvZiBjdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJncy4KKwkqIG91dC1pMzg2LmMgKGZ1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisKK1R1ZSBEZWMgMjUgMTU6NTI6MDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYi5jIChhbGwgZnVuY3Rpb25zKTogU3VwcG9ydCBhIGhvb2sgZm9yIHJlZGVmaW5pbmcgY29udGVudHMuCisJVGhlc2UgaG9va3MgYXJlIGNhbGxlZCBwZXJmb3JtX2FkZHNpMywgYW5kIHNvIG9uLgorCVRoZXkgYXJlIHVzZWQgb25seSBpZiBjb21waWxpbmcgd2l0aCBHQ0MuCisKKwkqIHJ0bGFuYWwuYyAoc2luZ2xlX3NldCk6IE1vdmVkIGZyb20gbG9vcC5jLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBGb3IgYSBNRU0sIGZvbGQgYWRkcmVzcyB3aGVuIGxvb2tpbmcgZm9yIGNvbnN0YW50LgorCShjc2VfaW5zbik6IFdoZW4gZmV0Y2ggYSBjb25zdGFudCBsYWJlbCBmcm9tIGEgZGlzcGF0Y2gsCisJc3Vic3RpdHV0ZSBpbnRvIGZvbGxvd2luZyB0YWJsZWp1bXAuCisJKGZpbmRfYmVzdF9hZGRyKTogQ2xlYXIgZG9fbm90X3JlY29yZCBiZWZvcmUgaGFzaGluZy4KKwkqIGp1bXAuYyAobWFya19qdW1wX2xhYmVsKTogRG9uJ3QgcmVjb3JkIHRhYmxlLWxhYmVscyBvbiBub24tanVtcHMuCisKKwkqIG02OGsubWQgKGNhc2VzaV8yIHJlY29nbml6ZXIpOiBVc2UgcmVnaXN0ZXJfb3BlcmFuZCBhcyBwcmVkaWNhdGUuCisKK01vbiBEZWMgMjQgMTc6NTQ6NDIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IEhhbmRsZSBBRERSX0RJRkZfVkVDIGxpa2UgQUREUl9WRUMsCisJd2hlbiB0aGUgaW5kZXggaW4gaXQgaXMgY29uc3RhbnQuCisKKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IEhhbmRsZSBuZXcgb3B0aW9uIC1XbWlzc2luZ19wcm90b3R5cGVzLgorCShjX2RlY29kZV9vcHRpb24pOiBMaWtld2lzZS4KKworTW9uIERlYyAyNCAwNzoyMTowNiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGwuaCAocmVsb2FkX2NvbXBsZXRlZCwgcmVsb2FkX2luX3Byb2dyZXNzKTogTm93IGRlZmluZWQgaGVyZS4KKwkqIG91dHB1dC5oIChyZWxvYWRfY29tcGxldGVkKTogTm8gbG9uZ2VyIGRlZmluZWQgaGVyZS4KKwkqIGVtaXQtcnRsLmMsIG9wdGFicy5jLCByZWNvZy5jLCBzY2hlZC5jLCB0b3BsZXYuYywgb3V0LWEyOWsuYzoKKwlEb24ndCBkZWZpbmUgcmVsb2FkX2luX3Byb2dyZXNzIG9yIHJlbG9hZF9jb21wbGV0ZWQuCisJKiBhMjlrLm1kLCByb21wLm1kLCByczYwMDAubWQ6IExpa2V3aXNlLgorCisJKiBtYWNobW9kZS5kZWY6IFRlcm1pbmF0ZSBHRVRfTU9ERV9XSURFUl9NT0RFIGNoYWlucyB3aXRoIFZPSURtb2RlLAorCW5vdCB6ZXJvLgorCShDQ21vZGUpOiBOZXcgbW9kZS4KKwkqIG1hY2htb2RlLmggKGVudW0gbWFjaGluZV9tb2RlKTogSW5jbHVkZXMgbW9kZXMgaW4gRVhUUkFfQ0NfTU9ERVMsCisJaWYgZGVmaW5lZC4KKwkoZW51bSBtb2RlX2NsYXNzKTogTmV3IGNsYXNzIE1PREVfQ0M7IGRlbGV0ZSBNT0RFX0ZVTkNUSU9OLgorCSogcnRsLmMgKG1vZGVfbmFtZSk6IERlZmluZSB0byBiZSBrbm93biBzaXplOyBhZGQgbmFtZXMgZm9yIGV4dHJhCisJQ0MgbW9kZXMsIGlmIHByZXNlbnQuCisJKG1vZGVfY2xhc3MsIG1vZGVfc2l6ZSwgbW9kZV91bml0X3NpemUsIG1vZGVfd2lkZXJfbW9kZSk6IERlZmluZQorCXRvIGJlIGtub3duIHNpemUuCisJKGluaXRfcnRsKTogSW5pdGlhbGl6ZSBleHRyYSBDQyBtb2Rlcy4KKworU2F0IERlYyAyMiAxOTozMzo1NCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogdG0taTM4NnYuaCAoTUFYUEFUSExFTik6IERlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgorCSogdG0taTM4NnZnYXMuaDogTmV3IGZpbGUuCisKKwkqIG91dC1pMzg2LmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IEhhbmRsZSBzY2FsZWQgaW5kZXhpbmcuCisKK1NhdCBEZWMgMjIgMTE6MTU6MDMgMTk5MCAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQsIG91dC1tODhrLmMsIHRtLW04OGsuaCAoc3dhcHBlZCBjbXBzaSk6IERvbid0IHJlbHkgb24KKwlOT1RJQ0VfVVBEQVRFX0NDIGRvaW5nIHRoZSBqb2IuCSBJbnN0ZWFkLCBjb21wbGltZW50IHRoZSBzd2FwcGVkCisJY29tcGFyZS4gIEFsc28sIG1ha2UgQ09NUEFSRSBTSW1vZGUuCisJKGFuZC9jbXBzaS9zeHgvbmVnKTogQWRkIHBhdHRlcm5zIHRvIGRvIHRoaXMgaW4gb25lIGluc3RydWN0aW9uLgorCUNoYW5nZSBzaWduX2V4dGVuZC9zeHggdG8gbmVnL3N4eCBmb3Igb3RoZXIgY2FzZXMuCisJKGlvcnNpMy94b3JzaTMpOiBVc2UgYWx0ZXJuYXRpdmVzIGFuZCBleHBsaWNpdCBwYXR0ZXJucy4KKwkoY2FzZXNpKTogTWFrZSB0aGUgY29uc3RhbnQgdGhlIHNlY29uZCBvcGVyYW5kIHRvIGNtcHNpLgorCShvdXRwdXRfYW5kKTogTXVzdCBjb21wbGltZW50IHZhbHVlIHRvIHVzZSB0aGUgY2xyIGluc3RydWN0aW9uLgorCShvdXRwdXRfcmVnX2FkanVzdCk6IFNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UgYW5kIHVzZSBURU1QX1JFR05VTS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogRWxpbWluYXRlIG5lZWRsZXNzIG5vLSogb3B0aW9ucy4KKworRnJpIERlYyAyMSAwNTo0NjozNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWNvZy5jIChmaW5kX3NpbmdsZV91c2V7LF8xfSk6IE5ldyBmdW5jdGlvbnMuCisJKiBydGwuaCAoZmluZF9zaW5nbGVfdXNlKTogRGVjbGFyZSBpdC4KKworVGh1IERlYyAyMCAyMToyNzozNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogQWRkIF9fIHRvIG5hbWVzIG9mIGZsb2F0aW5nIGNvbXBhcmUgZmNucy4KKworVGh1IERlYyAyMCAxODoyMTozOCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUSU5fRkZTKTogR2V0IG1vZGUgZm9yIGFyZyBmcm9tCisJdHJlZSwgbm90IHJ0eCwgaW4gY2FzZSBhcmcgd2FzIENPTlNUX0lOVC4KKworVGh1IERlYyAyMCAxNzozMTo0NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgZGVmaW5lIGBmZnMnLgorCitXZWQgRGVjIDE5IDE2OjU5OjM4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobWFpbik6IEhhbmRsZSBpZiBTSUdQSVBFIG5vdCBkZWZpbmVkLgorCisJKiBjY2NwLmMgKHhtYWxsb2MsIHhyZWFsbG9jLCB4Y2FsbG9jKTogRG9uJ3QgZGVjbGFyZSBtYWxsb2Mgb3IgcmVhbGxvYy4KKworV2VkIERlYyAxOSAwNjo1MDoxNyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogQXZvaWQgbWFraW5nIGEgbmVzdGVkIFNVQlJFRworCXdoZW4gd2UgYXJlIGJlaW5nIHBhc3NlZCBhIHBhcmFkb3hpY2FsIFNVQlJFRyBvZiBNRU0uCisKKwkqIGNzZS5jIChuZXdfYmFzaWNfYmxvY2spOiBDb21waWxhdGlvbnMgc3BlbmQgYWJvdXQgNSUgb2YgdGhlaXIgdGltZQorCWluIHRoaXMgZnVuY3Rpb24gc28gcmVwbGFjZSBsb29wIGluaXRpYWxpemluZyBxdHlfe2ZpcnN0LGxhc3R9X3JlZworCXdpdGggY29weSBmcm9tIGEgbGFyZ2VyIGNvbnNlY19pbnRzLiAgT25seSBsb29wIG92ZXIgZXh0cmEgZW50cmllcy4KKwkoY3NlX21haW4pOiBBbGxvY2F0ZSBjb25zZWNfaW50cyB0byBiZSBkZWZhdWx0IHNpemUgb2YgbWF4X3F0eSBsYXJnZS4KKworCSogcmVvcmcuYyAoZ2V0X2JyYW5jaF9jb25kaXRpb24pOiBGaXggdHlwb3Mgd2hlbiByZXZlcnNpbmcgY29uZGl0aW9uLgorCShjb25kaXRpb25fZG9taW5hdGVzX3ApOiBGaXggdHlwbyBpbiBjb21wYXJpc29uLgorCShyZWR1bmRhbnRfaW5zbl9wKTogVGhpcyBmdW5jdGlvbiB3YXMgdGFraW5nIGFib3V0IDQlIG9mIHRoZQorCWNvbXBpbGF0aW9uIHRpbWUuICBSZXdvcmsgc28gaXQgZG9lc24ndCBzcGxpdCwgb25seSBsb29rcyBhdCByZXNvdXJjZQorCXVzYWdlIGlmIGl0IGZpbmRzIGEgbWF0Y2hpbmcgaW5zbiAoc2luY2UgaXQgdXN1YWxseSB3b24ndCksIGFuZAorCWltcHJvdmUgY29kZSB0aGF0IGxvb2tzIGF0IHJlc291cmNlcy4gIE5vdyB0YWtlcyBhYm91dCAwLjUlIG9mCisJY29tcGlsYXRpb24gdGltZS4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBBbHdheXMgY2FsbCBtYXJrX3RhcmdldF9saXZlX3JlZ3Mgd2l0aCBhbgorCWFjdGl2ZSBpbnNuOyBjdXJyZW50bHkgYmVpbmcgY2FsbGVkIHdpdGggYSBDT0RFX0xBQkVMLgorCitUdWUgRGVjIDE4IDE0OjA4OjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBvdXQtc3BhcmMuYzogRml4IHVuaW5pdGlhdGVkIGNvbW1lbnQuCisKKwkqIGZpbmFsLmMgKGVuZF9maW5hbCk6IENhbGwgc3RyaXBfb2ZmX2VuZGluZyB0byByZW1vdmUgdGhlIGZpbGUKKwluYW1lIHN1ZmZpeC4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBFeGVjdXRlIFNEQl9ERUJVR0dJTkdfSU5GTyBjb2RlIG9ubHkgaWYKKwlnZW5lcmF0aW5nIFNEQiBzeW1ib2wgaW5mby4KKworCSogTWFrZWZpbGUuaW4gKGNjY3Aubyk6IERlcGVuZCBvbiBnY2MuCisKKwkqIHRtLXNwYXJjLmgsIHhtLXNwYXJjLmg6IE1ha2UgdGhpcyBtYWNoaW5lIGJpZy1lbmRpYW4uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBQYXNzIGNvcnJlY3QgYXJndW1lbnRzIHRvIGdlbl9jbXBzdHJzaTQuCisKKwkqIHJlY29nLmMgKG5vbm1lbW9yeV9vcGVyYW5kKTogUmVqZWN0IHJlZyB3aG9zZSBjbGFzcyBpcyBOT19SRUdTLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX3N0cnVjdCwgZ3Jva2RlY2xhcmF0b3IpOgorCVN0cmlwIE5PTl9MVkFMVUVfRVhQUiBtb3JlIHRoYW4gb25jZS4KKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IENoZWNrIHRoYXQgYSBqdW1wIGluc24gdXNlcyBDQzAKKwliZWZvcmUgdHJ5aW5nIHRvIGNvbWJpbmUgaXQgd2l0aCBhbiBpbnNuIHRoYXQgc2V0cyBDQzAuCisKKwkqIGNwbHVzLWRlY2wuYywgY3BsdXMtc2VhcmNoLmMsIGdjYy5jLCBvYmpjLWFjdGlvbnMuYywgcnRsLmMsIHN0bXQuYywKKwlzeW1vdXQuYywgdG9wbGV2LmM6IFVzZSB4bWFsbG9jIGluc3RlYWQgb2YgbWFsbG9jLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBDaGVjayBmb3IgdHJ1bmNhdGlvbiBvZiBwcmVjb21waWxlZCBmaWxlIG5hbWUuCisKK01vbiBEZWMgMTcgMTY6NTM6NDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQsIGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOgorCUZpeCBpbmRlbnRhdGlvbi4KKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRml4IGluZGVudGF0aW9uLgorCShnZW5faW5wdXRfcmVsb2FkKTogRml4IHR5cG8gaW4gY29tbWVudC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IENhbGwgYWJvcnQgd2hlbiB0aGUgbGFzdCBvcGVyYW5kIGlzCisJbWFya2VkIGNvbW11dGF0aXZlLCB0byBtYWtlIGl0IGVhc2llciB0byBmaW5kIHRoaXMgZXJyb3IuCisKKwkqIHJ0bGFuYWwuYyAocmVmZXJzX3RvX3JlZ25vX3ApOiBEb24ndCBjcmFzaCBpZiBYIGlzIDAuCisKK01vbiBEZWMgMTcgMTU6Mjk6MzQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAoY29tYmluZV9yZWdzKTogTm8gbmVlZCB0byBzZWUgaWYgc3VnZ2VzdGVkIGhhcmQgcmVnCisJaXMgc3VpdGFibGU7IGlmIGl0IGlzbid0LCBpdCB3b24ndCBlbmQgdXAgYmVpbmcgdXNlZC4gIEV4aXN0aW5nIHRlc3RzCisJd2VyZSB0b28gY29uc2VydmF0aXZlLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9qdW1wKTogV2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBTRVQgb2YgdGhlIGNvbmRpdGlvbgorCWNvZGVzIGZvciBhIGp1bXAgaW5zbiwgZ2l2ZSB1cCBpZiB3ZSBoaXQgYSBTRVFVRU5DRS4KKworTW9uIERlYyAxNyAwMjoxNDowNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY19zaXplX2luX2J5dGVzKTogTmV3IGZ1bmN0aW9uLgorCShwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZik6IFVzZSB0aGF0LgorCShwb2ludGVyX2RpZmYpOiBIYW5kbGUgd2Fybl9wb2ludGVyX2FyaXRoLgorCitTdW4gRGVjIDE2IDIyOjI3OjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc3RhcnRfZGVjbCk6IElnbm9yZSB3aXRoIGVycm9yIGFueSBpbml0IGZvciBhIHBhcm0uCisJKGZpbmlzaF9kZWNsKTogTGlrZXdpc2UuCisKK1N1biBEZWMgMTYgMDE6MDI6NTcgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBqdW1wLmMgKHJ0eF9lcXVhbF9mb3JfdGhyZWFkX3ApOiBUcmVhdCB0aGUgc3BlY2lhbCBDQyByZWdpc3RlciBhcworCWVxdWl2YWxlbnQgZm9yIHRoZSB0d28gdGhyZWFkcyB3ZSBhcmUgbG9va2luZyBhdC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IEZpeCB0eXBvIGluIGxvb3Agb3ZlciBJMSB3aXRoIFBBUkFMTEVMCisJYm9keS4gIEFsc28sIGRvbid0IHRlc3QgSEFSRF9SRUdOT19NT0RFX09LIGZvciBoYXJkIHJlZ2lzdGVycyB3ZSBhcmUKKwl0aGlua2luZyBhYm91dCBjb21iaW5pbmcuICBUaGlzIHNjcmV3cyB1cCB1c2luZyByZWdpc3RlcnMgdG8KKwlyZXByZXNlbnQgdGhlIGNvbmRpdGlvbiBjb2RlcywgYW5kIHByb2JhYmx5IGRvZXNuJ3Qgc2F2ZSBhbnl0aGluZyBpbgorCXRoZSBnZW5lcmFsIGNhc2UuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfYW5kKTogQ29tbWVudCBzYXlzIHRoYXQgcmVzdWx0IGlzIGFsd2F5cyBzdG9yZWQKKwlpbiB0YXJnZXQsIHNvIHRoZSBjb2RlIG5vdyBkb2VzIHRoaXMuCisKK1NhdCBEZWMgMTUgMTg6MDk6NDYgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBUcnkgYSBsaXR0bGUgaGFyZGVyIHRvIGZpbmQgdGhlIHNldHRlciBvZgorCXRoZSByZWdpc3RlciB1c2VkIGluIGEgY29uZGl0aW9uYWwgdGVzdC4gIE9uIHRoZSBTUEFSQyBpdCBpcyB2aXRhbAorCXRvIGVpdGhlciBmaW5kIHRoZSBzZXR0ZXIgb2YgdGhlIHJlZ2lzdGVyIHVzZWQgZm9yIHRoZSBjb25kaXRpb24KKwljb2RlcyBvciBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gMC4JIEFsc28sIGhhdmUgdGVzdCBmb3IKKwlub24tTlVMTCwgbWF0Y2hpbmcgYHNldCcgZ292ZXJuIGJvdGggbm9ybWFsIGFuZCByZXZlcnNlZCBjYXNlcyBvZgorCWNvbXBhcmlzb25zLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIG1vdmluZyBVU0UgaW5zbnMgZnJvbSBiZWZvcmUganVtcHMgdG8KKwlhZnRlciBCQVJSSUVScywgcHV0IHRoZSBsYWJlbCBmb3IgdGhlIHJlZGlyZWN0ZWQganVtcCBhZnRlciB0aGUKKwlCQVJSSUVSIGluc3RlYWQgb2YganVzdCBiZWZvcmUgdGhlIFBSRVZfSU5TTiBvZiB0aGUgb3JpZ2luYWwgdGFyZ2V0LgorCVRoaXMgZ2V0cyBhcm91bmQgcHJvYmxlbXMgd2hlbiB0aGVyZSBhcmUgTk9URXMgYmV0d2VlbiB0aGUgQkFSUklFUgorCWFuZCB0aGUgb3JpZ2luYWwgdGFyZ2V0LgorICAKK1NhdCBEZWMgMTUgMTA6MTY6MjkgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBzcGFyYy5tZCAoY21wZGYsY21wc2YpOiBObyBsb25nZXIgYSBkZWZpbmUgZXhwYW5kLiAgTm93IGRlcGVuZHMKKwlvbiBmcCB6ZXJvIGJlaW5nIGxvYWRlZCBpbnRvIGEgcmVnaXN0ZXIuCisJKHRzdHNpLHRzdGRmLHRzdHNmKTogRGVsZXRlZC4KKwkoc2VxLHNuZSk6IEZhaWwgaWYgd2UgYXJlIG5vdCB0ZXN0aW5nIG9wZXJhbmRzIG9mIGludGVnZXIgbW9kZS4KKwkobW92c2kpOiBTcGxpdCByZWNvZ25pemVycyBpbnRvIHR3byBwYXJ0cy4gIFRoZSBmaXJzdCBoYW5kbGVzCisJW3JlZyxtZW0semVyb10gPD0+IFtyZWcsbWVtXTsgdGhlIHNlY29uZCBoYW5kbGVzIFtyZWcsY29uc3RdID0+CisJW3JlZ10uCisJKGFkZGRmLHN1YmRmLG5lZ2RmKTogU2ltcGxpZnkgb3V0cHV0IHJvdXRpbmVzIHVzaW5nICdSJyBhcyBhbgorCW91dHB1dCBsZXR0ZXIuCisJKHRhaWxfY2FsbCk6IFR1cm4gdGhpcyBvZmYuICBJdCBpcyBuZXZlciB1c2VkLCBhbmQgaXQgZGVwZW5kcyBvbgorCXJvdXRpbmVzIHdoaWNoIGFyZSBhYm91dCB0byBiZWNvbWUgYnJva2VuLgorCSh2YXJpb3VzIHBsYWNlcyk6IEFkZCBVU0VfQ0MgYXR0cmlidXRlIHdoZXJlIGFwcHJvcHJpYXRlLgorCSh2YXJpb3VzIHBsYWNlcyk6IENoYW5nZSAodXNlIChyZWc6U0kgMCkpIHRvIChjbG9iYmVyIChyZWc6U0kgMCkpCisJYW5kIGRlbGV0ZSBDQ19DTE9CQkVSIGF0dHJpYnV0ZSBmcm9tIHRoZSBwYXR0ZXJuLgorCSogb3V0LXNwYXJjLmMgKG1vdmVfb3BlcmFuZCk6IE5vIGxvbmdlciByZWNvZ25pemUgY2VydGFpbgorCWltbWVkaWF0ZXMgYXMgYSBgbW92ZV9vcGVyYW5kJy4KKwkobW92ZV9yZWdfb3JfaW1tZWRfb3BlcmFuZCk6IE5ldyByZWNvZ25pemVyIGZvciBpbW1lZGlhdGVzIG5vCisJbG9uZ2VyIHJlY29nbml6ZWQgYnkgYG1vdmVfb3BlcmFuZCcuCisJKG91dHB1dF9waWNfc2VxdWVuY2UqKTogVHVybmVkIG9mZi4KKwkoc3BhcmNfYWRkcmVzc19jb3N0KTogU2ltcGxpZmllZCwgc2luY2UgdGhlIHZhbHVlIHJldHVybmVkIGlzIG5vdAorCXVzZWQgaWYgdGhlIGFkZHJlc3MgaXMgbm90IGxlZ2l0aW1hdGUuCisJKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IFVzZSBgZ2VuX2xvd3BhcnQnIGluc3RlYWQgb2YgYnVpbGRpbmcKKwlTVUJSRUdzIGV4cGxpY2l0bHkuCisJKG1ha2VfZjMwX2NvbnRhaW5femVybyk6IERlbGV0ZWQuCisJKG91dHB1dF90YWlsX2NhbGwpOiBUdXJuZWQgb2ZmLgorCSogdG0tc3BhcmMuaCAoUFJJTlRfT1BFUkFORCk6IFJlY29nbml6ZSAnUicgY29kZSBsZXR0ZXIsIHdoaWNoCisJbWVhbnMgcHJpbnQgdGhlIG5hbWUgb2YgUkVHTk8gKFgpKzEuICBObyBsb25nZXIgcmVjb2duaXplcyB0aGUgJ0cnCisJbGV0dGVyLgorCShQUklOVF9PUEVSQU5ELFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IFJlcGxhY2UgdmFyaW91cyBjYWxscyB0bworCWZwcmludGYgd2l0aCBjYWxscyB0byBmcHV0cyBvciBmcHV0Yy4KKwkoRklOQUxfUFJFU0NBTl9JTlNOKTogTm8gbG9uZ2VyIGRlZmluZWQuCisKK1NhdCBEZWMgMTUgMTQ6Mzc6NTEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHJlY29nLmMgKG9mZnNldHRhYmxlX2FkZHJlc3NfcCk6IENoZWNrIHZhbGlkaXR5IGluIG5hcnJvd2VyIG1vZGVzLgorCitTYXQgRGVjIDE1IDExOjIxOjU1IDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBzeW1zLmggc2Rib3V0LmMgKFRfVk9JRCk6IEVuc3VyZSB0aGF0IFRfVk9JRCBpcyBwcm92aWRlZCBhCisJZGVmYXVsdCBtZWFuaW5nIGlmIDxzeW1zLmg+IGlzIHVzZWQuCisKK0ZyaSBEZWMgMTQgMTQ6Mzk6MTAgMTk5MCAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKGluY3JlbWVudCBhbmQgdGVzdCBwZWVwaG9sZSk6IFVwZGF0ZWQgc28gaXQgd291bGQgYXBwbHkKKwl3aXRoIHRoZSBuZXcgbWV0aG9kIGZvciBkb2luZyBjbXBzaS9ieHguCisJKiBtODhrLm1kIChmdW5jdGlvbiB1bml0cyk6IFJlcGxhY2UgZGVjb2RlIHdpdGggYWx1IGFuZCB1cGRhdGUKKwlhY2NvcmRpbmdseS4KKwkqIG91dC1tODhrLmMgKGVtaXRfdGVzdCk6IEFkZCBhIG1vZGUgcGFyYW1ldGVyLgorCSogdG0tbTg4ay5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBDb25zdHJhaW4gaG93IHRoZSBhcmcKKwlwb2ludGVyIGNhbiBiZSB1c2VkLgorCitGcmkgRGVjIDE0IDA2OjQ4OjA3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgdG8gc29tZSByZWN1cnNpdmUgY2FsbHMuCisKKwkqIGp1bXAuYyAoaW52ZXJ0X2p1bXApOiBQYXNzIG5ldyBsYWJlbCB0byByZWN1cnNpdmUgY2FsbC4KKworCSogZXhwci5oIChzZXRjY19nZW5fY29kZSk6IFJlcGxhY2VzIHNldGNjX2dlbl9mY3RuOyBzdG9yZXMgaW5zbl9jb2RlLgorCShleHBhbmRfYW5kLCBlbWl0X3N0b3JlX2ZsYWcsIGxhYmVsX3J0eCk6IEFkZCBkZWZpbml0aW9ucy4KKwkoZ2V0X2NvbmRpdGlvbiwgY29tcGFyZV9mcm9tX3J0eCk6IExpa2V3aXNlLgorCSogcnRsLmgJIChTVE9SRV9GTEFHX1ZBTFVFKTogUHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgb2YgMS4KKwkocmVnX3NldF9sYXN0KTogQWRkIGRlZmluaXRpb24uCisJKGNvbnN0X3RydWVfcnR4KTogTmV3IHZhcmlhYmxlLgorCSogY3NlLmM6IFJlbW92ZSBkZWZhdWx0aW5nIG9mIFNUT1JFX0ZMQUdfVkFMVUUgZnJvbSBoZXJlLgorCShjb25zdF90cnVlX3J0eCk6IFJlbW92ZSBzdGF0aWMgdmVyc2lvbjsgbm93IGdsb2JhbC4KKwkqIGVtaXQtcnRsLmMgKGNvbnN0X3RydWVfcnR4KTogRGVmaW5lIGhlcmUuCisJKGdlbl9ydHgpOiBSZXR1cm4gY29uc3RfdHJ1ZV9ydHggZm9yIENPTlNUX0lOVCBvZiBTVE9SRV9GTEFHX1ZBTFVFLgorCShpbml0X2VtaXRfb25jZSk6IEluaXRpYWxpemUgY29uc3RfdHJ1ZV9ydHguCisJKiBleHBtZWQuYyAoZW1pdF9zdG9yZV9mbGFnKTogUmV3cml0dGVuLiAgSXMgcGFzc2VkIHRoZSBvcGVyYW5kcworCXRvIGNvbXBhcmUgaW4gYWRkaXRpb24gdG8gdGhlIGNvbXBhcmUgb3BlcmF0aW9uIGFuZCBlbWl0cyBib3RoIHRoZQorCWNvbXBhcmlzb24gYW5kIHRoZSBzdG9yZS1mbGFnIGluc24uCisJSGFuZGxlcyBzcGVjaWFsLWNhc2Ugb2YgdGVzdGluZyBmb3IgQSA8IDAgYW5kIEEgPj0gMC4KKwlJZiByZXN1bHQgaXMgY29uc3RhbnQsIGp1c3QgcmV0dXJuIGl0LgorCUFjY2VwdHMgYW4gYXJndW1lbnQgc2F5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIHJlc3VsdCBhbmQgZG9lcworCWFwcHJvcHJpYXRlIG5vcm1hbGl6YXRpb24uCisJR2l2ZSBwcmVmZXJlbmNlIHRvIHVzaW5nIHRoZSBzaWduIGJpdCByYXRoZXIgdGhhbiB0aGUgbG93LW9yZGVyIGJpdC4KKwlBbGxvdyBzeHggaW5zbnMgdG8gZmFpbC4KKwlJZiBkb24ndCBoYXZlIHNlcSBvciBzbmUgaW5zbnMsIGNhbiBzb21ldGltZXMgZG8gd2l0aCBhYnMuCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IEZvciBYID8gQSArIDEgOiBBLCBvbmx5CisJZG8gc3RvcmVfZmxhZyBpZiBpdCBpcyBjaGVhcC4KKwkoZG9fanVtcCk6IFRydWUgY29tcGFyaXNvbnMgcmV0dXJuIFNUT1JFX0ZMQUdfVkFMVUUsIG5vdCAxLgorCShjb21wYXJlX2NvbnN0YW50cyk6IENvcnJlY3RseSBoYW5kbGUgdW5zaWduZWQgY29tcGFyaXNvbnMuCisJUmV0dXJuIFNUT1JFX0ZMQUdfVkFMVUUsIG5vdCAxLCBmb3IgdHJ1ZSBjb21wYXJpc29uLgorCShjb21wYXJlX2Zyb21fcnR4KTogTmV3IG5hbWUgZm9yIGNvbXBhcmUxLgorCUFjY2VwdCBzaXplIGFuZCBhbGlnbm1lbnQsIGZvciBCTEttb2RlLgorCU5vIGxvbmdlciBzdGF0dWMuCisJKGNvbXBhcmUsIGNvbXBhcmVfZnJvbV9ydHgpOiBObyBuZWVkIHRvIHBhc3MgZm9yd2FyZCBhbmQgcmV2ZXJzZSBjb2RlczsKKwljYW4gdHJpdmlhbGx5IGRlcml2ZSB0aGUgcmV2ZXJzZSBjb2RlIGZyb20gdGhlIGZvcndhcmQgb25lLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJSWYgb25lIG9wZXJhbmQgaXMgY29uc3RhbnQsIG1ha2UgaXQgdGhlIHNlY29uZCBvbmUuCisJKGNvbXBhcmUpOiBMZXQgY29tcGFyZTEgZG8gbW9zdCBvZiB0aGUgd29yay4KKwkoZG9fc3RvcmVfZmxhZyk6IFJld3JpdHRlbiwgbm93IGxldHMgZW1pdF9zdG9yZV9mbGFnIGRvIG1vc3Qgb2YKKwl0aGUgd29yay4KKwlIYW5kbGVzIHRoZSBzcGVjaWFsLWNhc2Ugb2YgY29tcGFyaW5nIGEgc2luZ2xlIGJpdCB3aXRoIHplcm8uLAorCUFkZCBhZGRpdGlvbmFsIGFyZ3VtZW50IE9OTFlfQ0hFQVA7IGlmIG5vbi16ZXJvLCBmYWlsIGlmIGl0IGxvb2tzIGxpa2UKKwl0aGlzIHdpbGwgYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbjsgYWxsIGNhbGxlcnMgY2hhbmdlZC4KKwlJZiBpdCBsb29rcyBsaWtlIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gZG8gYSBzdG9yZS1mbGFnIG9wZXJhdGlvbiwKKwljYWxsIGVtaXRfc3RvcmVfZmxhZzsgaWYgaXQgY2FuJ3QgZG8gaXQsIGVtaXQgYXMgYXNzaWdubWVudHMgYW5kIGEKKwlqdW1wLiAgSWYgaXQgZG9lc24ndCBsb29rIHBvc3NpYmxlIHRvIGRvIGEgc3RvcmUtZmxhZyBvcGVyYXRpb24sIHJldHVybgorCXplcm8gYmVmb3JlIGV4cGFuZGluZyBhbnl0aGluZy4KKwkqIGZpbmFsLmM6IChmaW5hbF9zY2FuX2luc24pOiBEb24ndCBjaGVjayBTVE9SRV9GTEFHX1ZBTFVFOyBpZiB0aGUKKwlpbnNuIGRvZXNuJ3QgZXhpc3QsIHdlIHdvbid0IHRyeSB0byBjaGFuZ2UgaXQuCisJKiBnZW5lbWl0LmMgKGdlbl9leHApOiBVc2UgY29uc3RfdHJ1ZV9ydHggd2hlbiBhcHByb3ByaWF0ZS4KKwkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IExpa2V3aXNlLgorCSh0cnlfbWVyZ2VfMSk6IFR3byBub2RlcyBhcmVuJ3QgaWRlbnRpY2FsIGlmIHRoZXkgYXJlIHRvIHRlc3QKKwlkaWZmZXJlbnQgbW9kZXMgb3IgaWYgdGhleSBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgb2YgRVhBQ1QuCisJKiBpbnRlZ3JhdGUuYzogRG9uJ3Qgc3VwcGx5IGEgZGVmYXVsdCB2YWx1ZSBmb3IgU1RPUkVfRkxBR19WQUxVRSBoZXJlLgorCSoganVtcC5jOiBOb3cgaW5jbHVkZXMgZXhwci5oIChmb3IgZW1pdF9zdG9yZV9mbGFnIGFuZCBnZXRfY29uZGl0aW9uKS4KKwkoanVtcF9vcHRpbWl6ZSk6IFNwbGl0IG9wdGltaXphdGlvbiB0aGF0IG1hZGUgc3RvcmUtZmxhZyBpbnNuCisJaW50byB0aHJlZSBzZXBhcmF0ZSBvcHRpbWl6YXRpb25zLCB0aGUgZmlyc3QgdHdvIG9mIHdoaWNoIGFyZSB1c2VmdWwKKwlldmVuIGluIHRoZSBhYnNlbmNlIG9mIHN0b3JlLWZsYWcgb3BlcmF0aW9ucy4KKwkoY2FuX3JldmVyc2VfY29tcGFyaXNvbik6IFNldCBhbmQgdXNlIG9mIGNjMCBtdXN0IGJlIGltbWVkaWF0ZWx5CisJYWRqYWNlbnQuCisJKG1hcmtfanVtcF9sYWJlbCk6IEFib3J0IGlmIExBQkVMX1JFRiBjb2Rlc24ndCBjb250YWluIGEgQ09ERV9MQUJFTC4KKwlDb25zaWRlciB0d28gbGFiZWxzIGFkamFjZW50IGFmdGVyIHJlbG9hZCBpZiBzZXBhcmF0ZWQgYnkganVzdCBVU0Ugb3IKKwlDTE9CQkVSIGluc25zLgorCSogbG9vcC5jOiBOb3cgaW5jbHVkZXMgcmVhbC5oLgorCShnZXRfY29uZGl0aW9uX2Zvcl9sb29wKTogTmV3IGZ1bmN0aW9uLgkgQWxsIGNhbGxlcnMgb2YgZ2V0X2NvbmRpdGlvbgorCWluIHRoaXMgZmlsZSBub3cgY2FsbCB0aGlzIGZ1bmN0aW9uLgorCShzdHJlbmd0aF9yZWR1Y2UpOiBub19sYWJlbHNfYmV0d2Vlbl9wIG5vdyBza2lwcyBGUk9NLgorCShnZXRfY29uZGl0aW9uKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwlSZWZpbmUgY2FzZXMgd2hlbiB3ZSBjYW4ndCByZXZlcnNlIGEgY29tcGFyaXNvbiBvcGVyYXRpb24uCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBJbml0aWFsaXplIGFuZCBkZWZpbmUgc2V0Y2NfZ2VuX2NvZGUKKwlpbnN0ZWFkIG9mIHNldGNjX2dlbl9mY3RuLgorCSogcnRsYW5hbC5jIChub19sYWJlbHNfYmV0d2Vlbl9wKTogU2tpcCBGUk9NLCBsaWtlIGFzIC4uLl9iZXR3ZWVuXy4uLgorCWZ1bmN0aW9ucyBkby4KKwkobm9fbGFiZWxzX2JldHdlZW4pOiBEZWxldGVkLgorCShyZWdfc2V0X2xhc3QsIHJlZ19zZXRfbGFzdF8xKTogTmV3IGZ1bmN0aW9ucy4KKwkqIE1ha2VmaWxlLmluIChqdW1wLm8pOiBOb3cgaW5jbHVkZSBleHByLmguCisJKGxvb3Aubyk6IE5vdyBpbmNsdWRlcyByZWFsLmguCisKKwkqIGMtdHJlZS5oIChpbnRfZnR5cGVfY3B0cl9jcHRyX3NpemV0LCBwdHJfZnR5cGVfcHRyX2NwdHJfc2l6ZXQpOgorCU5ldyBuYW1lcy4KKworCSogYWxsaWFudC5tZCwgaTM4Ni5tZCwgbTY4ay5tZCwgbTg4ay5tZCwgbnMzMmsubWQsIHNwYXJjLm1kOiBBZGQgbW9kZQorCXRvIGNvbXBhcmlzb24gb3BlcmF0b3JzIChFUSwgTkUsIGV0Yy4pIHRvIGFncmVlIHdpdGggdGhlIG1vZGUgb2YgdGhlCisJZGVzdGluYXRpb24uCisJKiBvdXQtbTg4ay5jIChlbWl0X3Rlc3QpOiBMaWtld2lzZS4KKworRnJpIERlYyAxNCAwMDoxMjo0NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBTdHJpcCBOT05fTFZBTFVFX0VYUFIgZnJvbSBmaWVsZCB3aWR0aC4KKworVGh1IERlYyAxMyAxMzoxMDo0NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY3BsdXMtaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBBZGQgbWlzc2luZyBhcmcgdG8KKwlleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlLgorCisJKiBjb25maWcuZ2NjICh0cm9uKTogQWxpYXMgZm9yIGdtaWNyby4KKworCSogYy1kZWNsLmMgKGludF9mdHlwZV9jcHRyX2NwdHJfc2l6ZXQpOiBWYXJpYWJsZSByZW5hbWVkLgorCShwdHJfZnR5cGVfcHRyX2NwdHJfc2l6ZXQpOiBMaWtld2lzZS4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogSGFuZGxlIC5DLgorCisJKiBNYWtlZmlsZS5pbiAoZW5xdWlyZS5vKTogQWRkIC1JLiBzbyBjYW4gZmluZCBzdGRkZWYuaC4KKwkoaW5zdGFsbC1jcm9zcyk6IEluc3RhbGwgY2Mxb2JqIGxpa2UgdGhlIG90aGVycy4KKworCSogTWFrZWZpbGUuaW4gKGdudWxpYi50YXJnZXQpOiBSZW5hbWVkIGZyb20gZ251bGliLgorCShnbnVsaWIpOiBSZW5hbWVkIGZyb20gdG1wZ251bGliLiAgUmVuYW1lIHRoYXQgZmlsZSBpbiB0aGlzIHJ1bGUuCisJQWxzbyBkZWxldGUgc3RhbXAtZ251bGliMiBoZXJlLgorCShnbnVsaWIucG9ydGFibGUsIGdudWxpYi5jb252ZXJ0KTogSW5wdXQgbm93IGlzIG5hbWVkIGdudWxpYi4KKwkoR05VTElCX1RBUkdFVCwgR05VTElCMl9UQVJHRVQpOiBEZWZpbmUgdGhlc2UgdmFycyAoYWxyZWFkeSBpbiB1c2UpLgorCShnbnVsaWIyLnRhcmdldCk6IFJlbmFtZWQgZnJvbSBnbnVsaWIyLgorCShnbnVsaWIyKTogTmV3IHJ1bGUsIGFsaWFzIGZvciBnbnVsaWIyLnRhcmdldC4KKworCSogbG9jYWwtYWxsb2MuYyAobG9jYWxfYWxsb2MpOiBDYXN0IGFuIGVudW0gdXNlZCBhcyBpbmRleC4KKwkqIG9wdGFicy5jIChlbWl0X2luZGlyZWN0X2p1bXApOiBMaWtld2lzZS4KKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogTGlrZXdpc2UuCisKK1RodSBEZWMgMTMgMTI6Mzg6MzEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IFZlcmlmeSB0aGF0IG9wZXJhbmQgMSBvZiBtb3ZzdHJpY3QKKwlzYXRpc2ZpZXMgaXRzIHByZWRpY2F0ZS4KKworV2VkIERlYyAxMiAxNzoyNjoyMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ3ZhcmFyZ3MuaDogQXZvaWQgZHVwbGljYXRlIGluY2x1c2lvbiB1c2luZyBfVkFSQVJHU19ILgorCitXZWQgRGVjIDEyIDE0OjExOjMwIDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB0bS1tODhrLmgsIG91dC1tODhrLmMsIG04OGsubWQ6IEVsaW1pbmF0ZWQgdGhlIGZpeGVkIGNvbmRpdGlvbgorCWNvZGUgcmVnaXN0ZXIuCUFzIGEgdGVtcG9yYXJ5IG1lYXN1cmUsIE5PVElDRV9VUERBVEVfQ0MgaXMgdXNlZAorCXRvIHRyYWNrIHN3YXBwZWQgY21wc2kgY2FzZXMuCisKKwkqIG04OGsubWQgKHNoaWZ0IHBhdHRlcm5zKTogRGVhbCB3aXRoIFRBUkdFVF8qX0xBUkdFX1NISUZUCisJdW5pZm9ybWx5IHdpdGggZGVmaW5lX2V4cGFuZC4gIE1ha2UgZ2VuX2xzaGxzaTMgZ2VuZXJhdGUgQVNISUZUCisJYW5kIGVsaW1pbmF0ZSB0aGUgb3B0aW1pemF0aW9uIHBhdHRlcm5zIHVzaW5nIEFTSElGVC4gIEVsaW1pbmF0ZQorCW90aGVyIG9wdGltaXphdGlvbiBwYXR0ZXJucyB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSBjb21iaW5lLgorCitUdWUgRGVjIDExIDIyOjEzOjQ4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFdpdGggc2x0LCBoYW5kbGUgZGVzdCB0aGF0J3MgaW52YWxpZC4KKworCSogc3RtdC5jLCB0cmVlLmggKHN0bXRfbmVzdGluZyk6CisJVHlwZWRlZiBkZWxldGVkOyB1c2UgYHN0cnVjdCBuZXN0aW5nIConLgorCSogc3RtdC5jIChleHBhbmRfc3RhcnRfY29uZCk6IElmIGV4aXRhYmxlLCBtYWtlIGFuIGV4aXQgbGFiZWwuCisKK1R1ZSBEZWMgMTEgMjE6Mjg6NTYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBTVUJSRUcpOiBVcGRhdGUgVE8gZm9yIGVhcmxpZXIKKwljaGFuZ2VzIHNvIHdlIGNhbiBhbHdheXMgZGV0ZWN0IChzdWJyZWcgKG1lbSAuLi4pKS4KKworVHVlIERlYyAxMSAxMDo1Njo1MyAxOTkwICBDcmFpZyBCdXJsZXkJKGJ1cmxleSBhdCBwb2dvLmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2xvb3B7LF9jb250aW51ZV9lbHNld2hlcmV9KTogUmV0dXJuIHBvaW50ZXIKKwl0byBuZXN0aW5nIHN0cnVjdHVyZSAobmV3IHR5cGUgc3RtdF9uZXN0aW5nKS4KKwkoZXhwYW5kX2V4aXRfbG9vcHssX2lmX2ZhbHNlfSxleHBhbmRfY29udGludWVfbG9vcCk6IEFjY2VwdCBwb2ludGVyCisJdG8gbmVzdGluZyBzdHJ1Y3R1cmUsIHN1YnN0aXR1dGUgbG9vcF9zdGFjayBpZiAwIChzYW1lIGJlaGF2aW9yIGFzCisJYmVmb3JlIHdoZW4gdGhlcmUgd2FzIG5vIGFyZ3VtZW50KSwgc28gRjkwIENZQ0xFIGFuZCBFWElUIHN0YXRlbWVudHMKKwkobGlrZSBDJ3MgY29udGludWUgYW5kIGJyZWFrIHN0bXRzKSBjYW4gcmVmZXIgdG8gb3RoZXIgdGhhbiB0aGUKKwlpbm5lcm1vc3QgbG9vcC4KKwkoZXhwYW5kX3N0YXJ0X2NvbmQpOiBVc2VzIG5ldyBuYW1lcyBmb3IgaWYtcmVsYXRlZCBsYWJlbHMgdGhhdAorCXJlZmxlY3QgYWRkaXRpb24gb2YgImVsc2VpZiIgY2FsbCwgYW5kIHNldHMgZW5kaWZfbGFiZWwgdG8gd2hhdGV2ZXIKKwlleGl0X2xhYmVsIGdldHMgc2V0IHRvIChzbyB3ZSBkb24ndCBnZW5lcmF0ZSB0d28gaWRlbnRpY2FsIGxhYmVscworCWZvciBsYW5ndWFnZXMgZnJvbSB3aGljaCBpZiBpcyBleGl0YWJsZSB2aWEgZXhwYW5kX2V4aXRfc29tZXRoaW5nKS4KKwkoZXhwYW5kX3N0YXJ0X2Vsc2VpZik6IE5ldyBmdW5jdGlvbiwgdXNlZCBieSBGb3J0cmFuLgorCShleHBhbmRfc3RhcnRfZWxzZSk6IE1vdmVkIGFib3ZlIF9lbmRfY29uZCBzbyB0aGVzZSBmb3VyIGZ1bmN0aW9ucworCWFwcGVhciBpbiB0aGUgb3JkZXIgdGhleSBnZXQgY2FsbGVkOyB1c2VzIG5ldyBuYW1lcywgYW5kIGZpbGxzIGluCisJb25seSBlbmRpZl9sYWJlbCBpZiBuZWVkZWQsIG5vdCBleGl0X2xhYmVsLgorCShleHBhbmRfZW5kX2NvbmQpOiBIYW5kbGVzIGVuZCBvZiBhbnkgaWYsIG5vdCBqdXN0IGlmLXdpdGhvdXQtZWxzZS4KKwlHZW5lcmF0ZXMgYm90aCBsYWJlbHMgZm9yIG5leHQgZWxzZS9lbHNlaWYgcGVuZGluZyAodGhlcmUgd2FzIG5vbmUpCisJYW5kIHRoZSBlbmRpZiBpdHNlbGYsIGlmIHRoZXkgZXhpc3QgKGFuZCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdAorCW9uZSkuCisJKGV4cGFuZF9lbmRfZWxzZSk6IEdvbmUsIGNhbGwgZXhwYW5kX2VuZF9jb25kIGluc3RlYWQuCisJKiBjLXBhcnNlLnksIGNwbHVzLXBhcnNlLnksIG9iamMtcGFyc2UueTogUGFzcyBuZXcgMCBhcmd1bWVudCB0bworCWV4cGFuZF8uLi5fbG9vcF8uLi4gdG8gaW5kaWNhdGUgdGhlIGlubmVybW9zdCBsb29wOyBjYWxsCisJZXhwYW5kX2VuZF9jb25kIGluc3RlYWQgb2YgZXhwYW5kX2VuZF9lbHNlLgorCSogdHJlZS5oOiBUeXBlZGVmIGZvciBzdG10X25lc3RpbmcgcmV0dXJuZWQgYnkgZXhwYW5kX3N0YXJ0X2xvb3AuLi4KKwlhbmQgY2hhbmdlIHRoZWlyIHJldHVybiB0eXBlcyBhY2NvcmRpbmdseS4KKworTW9uIERlYyAxMCAwNjo1OToxNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGNoZWNrX2FzbV9vcGVyYW5kcyk6IERlbGV0ZSBmcm9tIGhlcmUuCisJKiByZWNvZy5jIChjaGVja19hc21fb3BlcmFuZHMpOiBNb3ZlIHRvIGhlcmU7IG5vIGxvbmdlciBzdGF0aWMuCisJKHZhbGlkYXRlX2NoYW5nZSk6IERvbid0IGFzc3VtZSBjaGFuZ2UgaXMgdmFsaWQgaXMgYXNtX25vcGVyYW5kcyA+PSAwLgorCUlmIHJlY29nX21lbW9pemVkIHJldHVybnMgPCAwLCBhY2NlcHQgY2hhbmdlIGlmIGFzbV9ub3BlcmFuZHMgPj0gMAorCWFuZCBjaGVja19hc21fb3BlcmFuZHMgcmV0dXJucyBub24temVyby4KKwkoYXBwbHlfY2hhbmdlX2dyb3VwKTogTGlrZXdpc2UuCisJKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEpOiBTd2FwIG9wZXJhbmRzIG9uIGNvbW11dGF0aXZlIG9wZXJhdGlvbgorCWlmIGZpcnN0IGlzIGNvbnN0YW50LgorCVVzZSBwbHVzX2NvbnN0YW50IHRvIHNpbXBsaWZ5IGEgUExVUyB3aXRoIENPTlNUX0lOVCBhcyBzZWNvbmQgb3BlcmFuZC4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogV2UgbXVzdCBoYXZlIGEgc3RhYmxlIFNQIGlmIEdPQUwgaXMKKwlhIE1FTSB0aGF0IHVzZXMgU1AuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBkbyBhbnl0aGluZyBpZiBJMiBvciBJMQorCWhhcyBhbiBBU01fT1BFUkFORFMgYW5kIENMT0JCRVJTOyB3ZSdsbCBuZWVkIHRob3NlIGNsb2JiZXJzCisJYW5kIGl0IGlzIHRvbyBtZXNzeSB0byB0cnkgdG8gZ2V0IHRoaW5ncyBzZXQgdXAgY29ycmVjdGx5LgorCitTdW4gRGVjCSA5IDIyOjA3OjQxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogRG9uJ3QgY2hlY2sgZm9yIC8qICovIGNvbmNhdCBoZXJlLgorCShtYWNyb2V4cGFuZCk6IEFsd2F5cyB1c2UgcmF3IGFyZyBpZiB0cmFkaXRpb25hbC4KKworCSogYy1wYXJzZS55ICh1bmFyeSk6IE1hcmsgYWRkcmVzcyBvZiBsYWJlbCBhcyBjb25zdGFudC4KKworU3VuIERlYwkgOSAxNDo0NTozNCAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNsYXNzLmMgKHByb3BhZ2F0ZV9iYXNldHlwZV9vZmZzZXRzKTogVGFrZSBlZmZlY3Qgb24gQVNTT0MKKwliZWZvcmUgcmVjdXJzaXZlIGNhbGxpbmcuCisJKGZpbmlzaF9zdHJ1Y3QpOiBDYWxsIGBsYXlvdXRfZGVjbCcgd2l0aCB6ZXJvIGZvciBLTk9XTl9BTElHTgorCXdoZW4gbGF5aW5nIG91dCBUWVBFX0RFQ0wuCisJKiBjcGx1cy10cmVlLmMgKGFzc29jX3ZhbHVlKTogQ2hhbmdlIHJlY3Vyc2lvbiBjb25kaXRpb24gdG8gY29tcGFyZQorCUFTU09DX1ZBTFVFIChhc3NvYykgYWdhaW5zdCBUWVBFX01BSU5fVkFSSUFOVCAodHlwZSkgaW5zdGVhZCBvZiBqdXN0CisJYWdhaW5zdCB0eXBlLgorCitTYXQgRGVjCSA4IDEwOjQwOjAwIDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kIChhdHRyaWJ1dGVzKTogUmVvcmdhbml6ZSBhbmQgaW5jbHVkZSBhIGJsb2NrIGRpYWdyYW0uCisJTWFrZSBiZXR0ZXIgdXNlIG9mIGRlZmF1bHRzLgorCSogbTg4ay5tZCAocGVlcGhvbGUpLCBvdXQtbTg4ay5jLCB0bS1tODhrLmggKHNob3J0X2JyYW5jaCk6IEFkZAorCXRoZSBzcGFyYyBwZWVwaG9sZXMgZm9yIGNoYW5naW5nIGJzci9iciBpbnRvIGJzci5uL2FkZHUgb3IKKwlic3Iubi9zdWJ1LiAgSW5zdGFsbCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZSBmb3IgdGhpcy4gIFJlcXVpcmVzIHRoZQorCXVzZSBvZiBgZGVmJyB0byBhY2NvbW9kYXRlIGJyb2tlbiBhc3NlbWJsZXJzIGluIHRoZSBic3Iubi9hZGR1CisJY2FzZS4KKworRnJpIERlYwkgNyAwNjoxMjo0MyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jIChmaW5kX2VuZF9sYWJlbCk6IEluY3JlbWVudCB1c2FnZSBjb3VudCBvZiBsYWJlbCB3ZSByZXR1cm4KKwlzbyB3ZSBrbm93IGl0IHdvbid0IGdvIGF3YXkuCisJKGRicl9zY2hlZHVsZSk6IERlY3JlbWVudCBjb3VudCBvZiBlbmQgbGFiZWwgYW5kIGRlbGV0ZSBpdCBpZiBkZWFkLgorCitXZWQgRGVjCSA1IDE3OjM2OjIzIDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kOiBBZGQgaW5zdHJ1Y3Rpb24gYXR0cmlidXRlcyBmb3Igc2NoZWR1bGluZyBhbmQgZGVsYXkKKwlzbG90IGluZm9ybWF0aW9uLgorCSogbTg4ay5tZCAoYWRkc2kgcGF0dGVybik6IEFkZGluZyBsYXJnZSBjb25zdGFudHMgZG9lcyBhcmlzZS4KKwkodWRpdnNpIHBhdHRlcm4pOiBXcm9uZyBwcmVkaWNhdGUuCisJKiB0bS1tODhrLmgsIG91dC1tODhrLmMgKE5PVElDRV9VUERBVEVfQ0MpOiBEbyBzbyB1c2luZworCWF0dHJpYnV0ZXMuCisKKwkqIG1ha2UtbTg4aywgbWFrZS1tODhrZGd1eDogU2F5IGhvdyB0byBjcmVhdGUgbTg4ay10cmFjZS5hc20uCisKK1dlZCBEZWMJIDUgMTM6NTI6MTYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBTdXBwb3J0IGluc25fYmVmb3JlID09IDAuCisKKwkqIGZ1bmN0aW9uLmMgKG9wdGltaXplX2JpdF9maWVsZCk6IEZpeCB3cm9uZyBhcmcgdG8gdmFsaWRhdGVfY2hhbmdlLgorCisJKiBNYWtlZmlsZSAoaW5jbHVkZXMpOiBFeHBvcnQgTElCLgorCitXZWQgRGVjCSA1IDEzOjMxOjU3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBkaXNjYXJkIENMT0JCRVJzIGZyb20gYW4gaW5zbgorCXdpdGggQVNNX09QRVJBTkRTLgorCitUdWUgRGVjCSA0IDE2OjEyOjIxIDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB0bS1tODhrLmgsIG91dC1tODhrLmMsIG04OGsubWQ6IE1vcmUgY2xlYW51cHM6IGludHJvZHVjZQorCVBPV0VSX09GXzIgZm9yIHRlc3RzICh4ICYmICh4ICYgKHgtMSkgPT0gMCk7IHJlbmFtZSBwcmVkaWNhdGUKKwlmdW5jdGlvbnMgKl9wIGluc3RlYWQgb2YgKl9vcGVyYW5kOyBjbGVhbnVwIGFkZHNpMyBpbnNuczsgc2ltcGxpZnkKKwl1ZGl2c2kzIGluc25zOyBzaW1wbGlmeSBtZW1vcnkgc2hpZnQgaW5zbnM7IG1ha2UgTE9XX1NVTSBhbmQgSElHSAorCVNJbW9kZSBpbnN0ZWFkIG9mIFZPSURtb2RlOyBhZGQgYSBwcmVkaWNhdGUgdG8gdGhlIGluY3JlbWVudCBhbmQKKwl0ZXN0IHBlZXBob2xlIGluc247IGRlYWwgd2l0aCBzZXR0aW5nIFNGbW9kZSB0byB6ZXJvOyBkZWxldGUgYm9ndXMKKwlwYXR0ZXJuIGZvciBkaXZpZGUtYnktcG93ZXItb2YtMi4KKwkqIG1ha2UtbTg4aywgbWFrZS1tODhrZGd1eDogZGc4OGstdHJhY2UuYXNtIGlzIG5vdyBtODhrLXRyYWNlLmFzbS4KKwlNb3ZlIG1vdnN0ci1tODhrLnNoIHRvIGNvbmZpZy9tODhrLW1vdnN0ci5zaC4KKworTW9uIERlYwkgMyAxOTowODowMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGdudWxpYjIucmVhZHkpOiBOZXcgdGFyZ2V0LgorCShzdGFtcC1nbnVsaWIyKTogRGVwZW5kIG9uIHRoYXQuCisJQXZvaWRzIHJlY29tcGlsaW5nIGdudWxpYjIgZWFjaCB0aW1lIGNjMSBjaGFuZ2VzLgorCitNb24gRGVjCSAzIDE2OjE3OjU2IDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB0bS1tODhrZGd1eC5oLCB4bS1tODhrZGd1eC5oIChTRVBBUkFURV9BVVhfT1VUUFVUKTogU2hvdWxkIGJlIGluCisJeG0tbTg4a2RndXguaC4KKwkqIHRtLW04OGsuaCwgb3V0LW04OGsuYywgbTg4ay5tZDogRWxpbWluYXRlZCB0aGUgZml4ZWQgbGl0ZXJhbAorCXN5bnRoZXNpcyByZWdpc3Rlci4gIFJld29ya2VkIHRoZSBhZGRyZXNzaW5nIG1ldGhvZCB0byBiZSBsaWtlIHRoZQorCXNwYXJjICh1c2VzIEhJR0ggYW5kIExPX1NVTSkuICBOdW1lcm91cyBjbGVhbnVwcy4gIFRoZXNlIGNoYW5nZXMKKwlhcmUgYmFzZWQgb24gd29yayBkb25lIGJ5IFN0ZXZlIENoYW1iZXJsYWluIChzdGV2ZUBjeWdudXMpLgorCSogdG0tbTg4ay5oLCBvdXQtbTg4ay5jIChCTE9DS19QUk9GSUxFUiwgRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIpOgorCUltcGxlbWVudGVkLgorCitNb24gRGVjCSAzIDE1OjE5OjA0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKHNwZWNpYWxfc3ltYm9sKTogVXNlIHRpbWVfdCBhcyB0eXBlIG9mIHQuCisKKwkqIG04OGstbW92c3RyLnNoLCBtODhrLXRyYWNlLmFzbSwgdmEtbTg4ay5oOiBOZXcgZmlsZXMuCisKKwkqIGdjYy5jOiBEb24ndCBkZWZpbmUgUl9PSywgZXRjLiBpZiBhbHJlYWR5IGRlZmluZWQuCisKKwkqIG91dC1zcGFyYy5jIChmaW5hbGl6ZV9waWMsIGVtaXRfbW92ZV9zZXF1ZW5jZSwgb3V0cHV0X2FyY19wcm9maWxlcik6CisJRmluaXNoIGNoYW5nZSB0byBlbWl0IEhJR0ggYW5kIExPX1NVTSBhcyBQbW9kZSBpbnN0ZWFkIG9mIFZPSURtb2RlLgorCitTdW4gRGVjCSAyIDIyOjEzOjUzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjb25maWcuZ2NjICh0b3dlcik6IE5ldyBhbHRlcm5hdGl2ZS4KKwkobWlwcy1uZXdzKTogQWRhcHQgZm9yIHZlcnNpb24gMi4KKworCSogdG0tdG93ZXIuaCwgdG0tdG93ZXItYXMuaCwgeG0tdG93ZXIuaDogTmV3IGZpbGVzLgorCitTdW4gRGVjCSAyIDE3OjQ3OjI4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MsIGNhc2UgQVNNX09QRVJBTkRTKTogRml4IHR5cG8gaW4gdGVzdGluZworCWZvciBjaGFuZ2VkIHZlY3Rvci4KKworCSogb3V0LXJzNjAwMC5jIChvdXRwdXRfZXBpbG9ndWUpOiBGaXggdHlwbyByZXN0b3JpbmcgZ2VuZXJhbCByZWdpc3RlcnMuCisJKHByaW50X29wZXJhbmQpOiBBZGQgbmV3IG9wdGlvbiAlSC4KKwkqIHJzNjAwMC5tZDogQWRkIChjbG9iYmVyIChyZWc6U0kgNjQpKSB0byBtYW55IHBhdHRlcm5zIGV2ZW4gdGhvdWdoCisJdGhleSBkb24ndCBjbG9iYmVyIE1RIHRvIGFsbG93IGNvbWJpbmluZyB0byB3b3JrIHdlbGwuCVRoaXMgd2lsbCBiZQorCXJlbW92ZWQgb25jZSBjb21iaW5lIGtub3dzIGhvdyB0byBhZGQgY2xvYmJlcnMgd2hlbiByZXF1aXJlZC4KKwlDaGFuZ2UgcGF0dGVybnMgdG8gcmVmbGVjdCBuZXcgY2Fub25pY2FsaXphdGlvbiBydWxlcy4KKwlXaGVyZSB3ZSBoYXZlIChhbmQgKHhzaGlmdCkpLCBhZGQgcGF0dGVybnMgZm9yICh6ZXJvX2V4dGVuZCAoeHNoaWZ0KSkuCisJKGFuZHNpMywgeG9yc2kzKTogRml4IGJ1ZyBpbiBjYXNlIHdoZXJlIHR3byBpbnNucyBhcmUgbmVlZGVkLgorCShtb3ZldGkpOiBEb24ndCBjYWxsIGNoYW5nZV9hZGRyZXNzIHdoZW4gaW4gcmVsb2FkLgorCShzaWduX2V4dGVuZCk6IEFkZCBwYXR0ZXJucyBmb3Igc2lnbiBleHRlbmQgcHJlY2VlZGVkIG9yIGZvbGxvd2VkIGJ5CisJb25lIG9mIHRoZSBzaGlmdHMgaXQgd2lsbCBkby4gIFVzZSAlSCB0byBvdXRwdXQgdGhlIG1lcmdlZCBzaGlmdC4KKworCSogb3V0LXJvbXAuYyAocHJpbnRfb3BlcmFuZCk6IEFsbG93IGV4YWN0X2xvZzIgcmVzdWx0IHRvIGJlIHplcm8uCisJKiByb21wLm1kOiBMaWtld2lzZS4KKwkqIHRtLXJvbXAuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUik6IExpa2V3aXNlLgorCisJKiBhMjlrLm1kICh0eXBlIGF0dHJpYnV0ZSk6IEFkZCB0eXBlcyBmb3IgZmxvYXRpbmctcG9pbnQgaW5zbnMuCisJKGluX2RlbGF5X3Nsb3QgYXR0cmlidXRlKTogVXBkYXRlIHRvIGFsbG93IGZvciBuZXcgdHlwZXMuCisJKGZ1bmN0aW9uX3VuaXQgZGVmaW5pdGlvbnMpOiBBZGQgZGVmaW5pdGlvbnMgZm9yIGZsb2F0aW5nLXBvaW50IHVuaXRzLgorCShhbmRjYiozKTogRGVsZXRlIG9ic29sZXRlIG5hbWVzLgorCShjb252ZXJ0IGluc24pOiBVc2UgcmVnaXN0ZXJfb3BlcmFuZCBpbnN0ZWFkIG9mIGdlbl9yZWdfb3BlcmFuZCBmb3IKKwlmbG9hdGluZy1wb2ludCBvcGVyYW5kLgorCShjcGVxLCBmZXEsIGRlcSwgZXRjKTogTmV3IHBhdHRlcm5zLgorCShmbG9hdGluZy1wb2ludCBhcml0aG1ldGljKTogQWRkIHN1cHBvcnQgZm9yIDI5MDUwIGluc25zIGFuZAorCWFjY3VtdWxhdG9yczsgaW5kaWNhdGUgZnVuY3Rpb24gdW5pdCB1c2FnZS4KKwkoaW9yL2FuZCBwYXR0ZXJucyk6IFB1dCBOT1QgYXMgc2Vjb25kIG9wZXJhbmQuCisJKG9ybiBpbnNuKTogTmV3LCBmb3IgMjkwNTAuCisJKGxvYWQgcGF0dGVybnMpOiBJZiB1c2luZyBtYXRjaF9vcGVyYXRvciwgbWFrZSBpdCB0aGUgaGlnaGVzdCBvcGVyYW5kCisJbnVtYmVyLgorCShsb2FkbSBpbnNucyk6IEFkZCB3b3JrYXJvdW5kIGZvciByZXYgQTEgYnVnIG9uIDI5MDUwLgorCShuZWdzZjIsIG5lZ2RmMik6IERvbid0IHVzZSBYT1IgdG8gbmVnYXRlIG9uIDI5MDUwLgorCShtb3ZzZiwgbW92ZGYpOiBBZGQgc3VwcG9ydCBmb3IgYWNjdW11bGF0b3JzIG9uIDI5MDUwLgorCShtb3ZzaSwgbW92aGksIG1vdnFpKTogTm8gbmVlZCB0byBzdXBwb3J0IHNwZWNpYWwtPnNwZWNpYWwgY29waWVzLgorCVN1cHBvcnQgY29uc3RoeiBpbnNuIG9uIDI5MDUwLgorCShjb21wYXJlLCBzY2MsIGFuZCBicmFuY2ggaW5zbnMpOiBSZXdvcmsgdG8gbm90IHVzZSBjYzAuICBVc2UgYSBwc2V1ZG8KKwlyZWdpc3RlciBpbnN0ZWFkLiAgQ29tcGFyZSBkb2Vzbid0IGdlbmVyYXRlIGFueSBjb2RlLCBidXQgbWVyZWx5CisJc2F2ZXMgdGhlIG9wZXJhbmRzLiAgc2NjIGFuZCBicmFuY2ggdGhlbiBlbWl0IHRoZSBhcHByb3ByaWF0ZSBjb21wYXJlCisJYW5kIGp1bXAgKGlmIGJyYW5jaCkgaW5zbnMuCisJKHRzdHNpKTogRGVsZXRlIHBhdHRlcm47IG5vdCB1c2VkIHdoZW4gbm8gY2MwLgorCShwZWVwaG9sZXMpOiBSZW1vdmUgcGVlcGhvbGVzIHRvIGNvbnZlcnQganVtcHMgdG8gc2NjIGluc25zOyBub3cKKwlkb25lIGluIGp1bXAuYy4KKwkqIG91dC1hMjlrLmMgKGEyOWtfY29tcGFyZV8qKTogTmV3IHZhcmlhYmxlcy4KKwkobG9uZ19jb25zdF9vcGVyYW5kKTogQW55dGhpbmcgd2l0aCBsb3ctb3JkZXIgMTYgYml0cyB6ZXJvIGlzIG5vdCBhCisJbG9uZyBjb25zdGFudCBvbiB0aGUgMjkwNTAuCisJKGFjY3VtX3JlZ19vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShnZW5fcmVnX29wZXJhbmQpOiBSZXR1cm5zIGZhbHNlIGZvciBhY2N1bXVsYXRvciByZWdpc3RlcnMuCisJKG91dHB1dF9vcGVyYW5kKTogQWxsb3cgYWNjdW11bGF0b3JzLgorCShuZV9jb21wYXJpc29uX3AsIGZwX2NvbXBhcmlzb25fcCwgcmV0dXJuX3BlZXBfb3BlcmFuZCk6IERlbGV0ZWQuCisJKGZwX2NvbXBhcmlzb25fb3BlcmF0b3IsIGJyYW5jaF9vcGVyYXRvcik6IE5ldyBmdW5jdGlvbnMuCisJKG91dHB1dF9jb21wYXJlKTogRGVsZXRlZC4KKwkocHJpbnRfb3BlcmFuZCk6IENoYW5nZSBtZWFuaW5nIG9mICViIGFuZCAlQi4KKwlBZGQgbmV3IGNvZGUgJUouCisJKiB0bS1hMjlrLmggKFRBUkdFVF9WRVJTSU9OKTogU2F5IGlmIGNvbXBpbGluZyBmb3IgMjkwNTAuCisJKFRBUkdFVF9GTEFHUyk6IEFkZCAtMjkwMDAgdG8gdHVybiBvZmYgc3VwcG9ydCBmb3IgMjkwNTA7IHRoaXMgaXMKKwlzdGlsbCB0aGUgZGVmYXVsdC4KKwkodmFyaW91cyByZWdpc3RlciBtYWNyb3MpOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGZsb2F0aW5nLXBvaW50CisJYWNjdW11bGF0b3JzIG9uIHRoZSAyOTA1MC4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUik6IFVzZSAnTycgZm9yIGEgY29uc3RhbnQgdGhhdCBjYW4gYmUgc2V0IHVzaW5nCisJY29udGh6IG9uIHRoZSAyOTA1MDsga2VlcCBvbGQgZGVmaW5pdGlvbiBmb3IgMjkwMDAuCisJKFNUT1JFX0ZMQUdfVkFMVUUpOiBOb3cgMHg4MDAwMDAwMC4KKwkoQVNNX0ZJTEVfU1RBUlQpOiBXcml0ZSAiLmNwdXR5cGUgMjkwNTAiIHdoZW4gY29tcGlsaW5nIGZvciAyOTA1MC4KKworCSogY29tYmluZS5jIChzdWJzdCk6IFB1dCBOT1QsIE5FRywgTVVMVCwgUExVUywgYW5kIE1JTlVTIGFzIHRoZQorCWZpcnN0IG9wZXJhbmQgb2YgY29tbXV0YXRpdmUgb3BlcmF0aW9ucy4gIE5vdGUgdGhhdCBOT1QgdXNlZCB0byBiZQorCXB1dCBhcyB0aGUgc2Vjb25kIG9wZXJhbmQgYnV0IGl0IGhhcyBhbHdheXMgYmVlbiBhc3N1bWVkIHRoYXQgCisJTVVMVCB3b3VsZCBiZSB0aGUgZmlyc3Qgb3BlcmFuZCBpbiBhZGRyZXNzIGV4cHJlc3Npb25zLCBzbyB3ZSBoYXZlCisJdG8gY2hhbmdlIHRoZSBwcmV2aW91cyBjYW5vbmljYWxpemF0aW9uLiAgVGhpcyBpcyBwb3NzaWJsZSBub3cgdGhhdCB3ZQorCWhhdmUgZWxpbWluYXRlZCB0aGUgYW5kY2JtMyBvcGVyYXRpb25zLgorCSogaTg2MC5tZCAoYW5kbm90KTogUmVtb3ZlIG9ic29sZXRlIGFuZGNic2kzIG5hbWUgYW5kIHBsYWNlIE5PVAorCWFzIGZpcnN0IG9wZXJhbmQuCisJKiBtNjhrLm1kIChmcG0qKTogRGVsZXRlIHBhdHRlcm5zIHdpdGggTVVMVCBhcyBzZWNvbmQgb3BlcmFuZCBhbmQKKwl1c2UgIkAiIGNvbnN0cnVjdCB3aGVuIHBvc3NpYmxlLgorCSogbTg4ay5tZCAoYW5kLmMsIGlvci5jKTogUmVtb3ZlIG9ic29sZXRlIGFuZGNic2kzIGFuZCBpb3JjYnNpMyBuYW1lcy4KKwlEZWxldGUgcGF0dGVybnMgd2l0aCBOT1QgYXMgc2Vjb25kIG9wZXJhbmQuCisJKHhvci5jKTogUmV3cml0ZSBpbiBuZXcgY2Fub25pY2FsIGZvcm0uCisJKiBtaXBzLm1kIChub3IpOiBSZXdyaXRlIGluIG5ldyBjYW5vbmljYWwgZm9ybS4KKwkqIHB5ci5tZCAoYmljdyk6IFJlbW92ZSBwYXR0ZXJuIHdpdGggTk9UIGFzIGZpcnN0IG9wZXJhbmQsIHJlbW92aW5nCisJb2Jzb2xldGUgbmFtZSBhbmRjYnNpMyBpbiB0aGUgcHJvY2Vzcy4KKwkqIHNwYXJjLm1kOiBSZW1vdmUgcGF0dGVybnMgd2l0aCBOT1QgYXMgZmlyc3Qgb3BlcmFuZC4KKwlSZW1vdmUgb2Jzb2xldGUgbmFtZXMgYW5kY2JzaTMsIGlvcmNiMywgYW5kIHhvcmNic2kzLgorCVJld3JpdGUgeG5vciBpbnRvIG5ldyBjYW5vbmljYWxpemVkIGZvcm0uCisJQWRkIG1vZGUgdG8gSElHSCBhbmQgTE9fU1VNIG9wZXJhdGlvbnMuCisJKiB2YXgubWQgKGJpYyopOiBSZW1vdmUgb2Jzb2xldGUgYW5kY2JtMyBuYW1lcy4KKwlQdXQgTk9UIGFzIGZpcnN0IG9wZXJhbmQgd2hlbiBib3RoIGdlbmVyYXRpbmcgYW5kIHJlY29nbml6aW5nIFJUTC4KKwkoamxiYyk6IFJld3JpdGUgd2l0aCBOT1QgYXMgZmlyc3Qgb3BlcmFuZC4KKworU3VuIERlYwkgMiAxNzowODoxNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZCAocmVjb2duaXplciBmb3IgY2FzZXNpXzIpOiBIYW5kbGUgQVNNX1JFVFVSTl9DQVNFX0pVTVAuCisKKwkqIHN0ZGRlZi5oIChwdHJkaWZmX3QpOiBQcmV2ZW50IGRlZmluaXRpb24sIGFzIHdpdGggc2l6ZV90LgorCitTYXQgRGVjCSAxIDE2OjMxOjMwIDE5OTAgIFJvbiBHdWlsbWV0dGUJIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAobG9va3VwX2ZpbGVuYW1lLCBkd2FyZm91dF9maW5hbGl6ZSk6IGNoYW5nZWQgZnJvbQorCW1haW50YWluaW5nIGEgbGlua2VkIGxpc3Qgb2YgZmlsZW5hbWUgZW50cmllcyB0byBtYWludGFpbmluZyBhbgorCShleHBhbmRhYmxlKSBhcnJheSBvZiBmaWxlbmFtZSBlbnRyaWVzIGluc3RlYWQuCSBBbHNvLCBjaGFuZ2VkCisJY29kZSBzbyB0aGF0ICphbGwqIGZpbGVuYW1lIHN0cmluZ3MgYXJlIG91dHB1dCAodG8gdGhlIC5maWxlcworCXNlY3Rpb24gb2YgdGhlIGFzbSBmaWxlKSBpbiBvbmUgc3dlbGwgZm9vcCBqdXN0IGFzIHRoZSBhc20gZmlsZSBpcworCWJlaW5nIGZpbmFsaXplZCByYXRoZXIgdGhhbiB3cml0aW5nIG91dCBuZXcgZmlsZW5hbWVzIG9uZS1ieS1vbmUKKwlhcyB0aGV5IGFyaXNlIChhcyBwcmV2aW91c2x5KS4gVGhpcyBjaXJjdW12ZW50cyBhIHByb2JsZW0gY2F1c2VkCisJYnkgcmZnJ3MgbmFpdmUgYXNzdW1wdGlvbiB0aGF0IGFzc2VtYmxlcnMga2VwdCBhIHN0YWNrIG9mIHByaW9yCisJc2VjdGlvbiBuYW1lcyAob2YgZGVwdGggPiAxKSB3aGljaCBjb3VsZCBiZSBzdWNjZXNzaXZlbHkgcG9wcGVkCisJdmlhIG11bHRpcGxlIGBwcmV2aW91cycgZGlyZWN0aXZlcy4gIEZvciBzb21lIGFzc2VtYmxlcnMsIHRoZQorCWRlcHRoIG9mIHRoZSBzdGFjayBpcyBvbmx5IDEgYW5kIHRoZXkgY2FuIGdldCBjb25mdXNlZCBpZiB5b3UgZG8KKwl0d28gKG9yIG1vcmUpIGBwcmV2aW91cycgZGlyZWN0aXZlcyBpbiBhIHJvdy4gIEFueXdheSwgaXQgaXMgbm8KKwlsb25nZXIgZWl0aGVyIG5lY2Vzc2FyeSBvciB1c2VmdWwgdG8gZG8gdGhhdCwgc28gd2hvIGNhcmVzLgorCisJKiBkd2FyZm91dC5jOiBhZGRlZCBjb2RlIHRvIG91dHB1dCBuZXdsaW5lcyB0byB0aGUgYXNtIGZpbGUganVzdAorCXByaW9yIHRvIGVhY2ggYW5kIGV2ZXJ5IGNoYW5nZSBvZiBzZWN0aW9uIChmb3IgYmV0dGVyIHJlYWRhYmlsaXR5CisJb2YgdGhlIGFzbSBmaWxlcykuCisKKwkqIGR3YXJmb3V0LmM6IGNoYW5nZWQgY29kZSBzbyB0aGF0IGlmIERXQVJGX0RFU0NSSUJFX1VTRURfRVhURVJOUworCWlzIGRlZmluZWQsIGl0IGZvcmNlcyBEV0FSRl9MT0NBVElPTl9BVFRSSUJVVEVTIHRvIGFsc28gYmUgZGVmaW5lZC4KKworCSogZHdhcmZvdXQuYzogY2hhbmdlZCBjb2RlIHNvIHRoYXQgaWYgRFdBUkZfTE9DQVRJT05fQVRUUklCVVRFUworCWlzIGRlZmluZWQsIGl0IGZvcmNlcyBEV0FSRl9ERVNDUklCRV9GSUxFUyB0byBiZSBkZWZpbmVkICh0byBgMScpLgorCisJKiBkd2FyZm91dC5jOiBjaGFuZ2VkIGNvZGUgc28gdGhhdCBpZiBEV0FSRl9ERVNDUklCRV9GSUxFUyBpcyBub3QKKwlhbHJlYWR5IGRlZmluZWQgKGluIHRoZSB1c2VyJ3MgdG0uaCBmaWxlKSBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKKwlkZWZpbmVkIChieSBkZWZhdWx0KSB0byBgMScuICBBbHNvIGNoYW5nZWQgYWxsIGluc3RhbmNlcyBvZgorCWAjaWZkZWYgRFdBUkZfREVTQ1JJQkVfRklMRVMnIHRvIGAjaWYgRFdBUkZfREVTQ1JJQkVfRklMRVMnLgorCVRoZSB1c2VyIG11c3Qgbm93IGludGVudGlvbmFsbHkgKmRpc2FibGUqIHRoaXMgZmVhdHVyZSAoYnkKKwlkZWZpbmluZyBEV0FSRl9ERVNDUklCRV9GSUxFUyB0byBgMCcgaW4gaGlzIHRtLmggZmlsZSkgaWYgaGUKKwl3aXNoZXMgdG8gaGF2ZSB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBzdXBwcmVzc2VkLgorCisJKiBkd2FyZm91dC5jOiBjaGFuZ2VkIGNvbW1lbnRzIHJlbGF0aW5nIHRvIG9wdGlvbmFsIGRlZmluZXMgZm9yCisJZXh0ZW5kZWQgR05VIERXQVJGIGZlYXR1cmVzIHRvIGluY2x1ZGUgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdG8KKwlhZGQgc29tZSBhZGRpdGlvbmFsIGNsYXJpdHkuCisKK1NhdCBEZWMJIDEgMTY6MDA6MzQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdCk6IENhbGwgcmV2ZXJzZV9jb25kaXRpb24gaW5zdGVhZCBvZgorCXJldmVyc2VfY29tcGFyaXNvbi4KKwlXZSBhcmUgYWxsb3dlZCB0byByZXZlcnNlIGZsb2F0aW5nLXBvaW50IEVRIGFuZCBORSBjb21wYXJpc29ucy4KKworCSogY29tYmluZS5jIChzdWJzdCk6IENhbGwgc2ltcGxpZnlfYW5kX2NvbnN0X2ludCBmb3IgYWxsIEFORAorCWFuZCBaRVJPX0VYVEVORCBjYXNlcyBhbmQgYWxsIGNhc2VzIHdoZXJlIHdlIG1ha2Ugb25lIG9mIHRoZW0uCisJUmVtb3ZlIGFsbCBvdGhlciBjb2RlIGluIEFORCBhbmQgWkVST19FWFRFTkQgY2FzZXMuCisJKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBSZXdyaXR0ZW4gdG8gZm9sbG93IGEgY29uc2lzdGVudCBtb2RlbAorCW9mIHRyYWNraW5nIHdoYXQgQU5EJ3MgbmVlZCB0byBiZSBkb25lIGFuZCB3aGljaCBiaXRzIGFyZSBub3QKKwlzaWduaWZpY2FudC4gIENvbnNpc3RlbnRseSB0cnkgYSBaRVJPX0VYVEVORCBmb3IgYWxsIGNhc2VzIHdoZXJlCisJdGhlIHJlc3VsdCBpcyBhbiBBTkQgd2l0aCBhIG1vZGUtd2lkZSBtYXNrLiAgTW92ZSBhbGwgcmVtYWluaW5nCisJY2FzZXMgZnJvbSBBTkQgYW55IFpFUk9fRVhURU5EIGNhc2VzIGZyb20gc3Vic3QuCisKK1NhdCBEZWMJIDEgMDk6MTM6MTcgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy10cmVlLmggKGxhbmdfdHlwZSk6IFJlbW92ZSBhbnlfYXNzaWduc190aGlzLAorCW5vbmVfYXNzaWduc190aGlzIGZyb20gdHlwZV9mbGFncy4KKwkqIGNwbHVzLWRlY2wyLmMgKGdldF90ZW1wX25hbWUpOiBJZiB0aGUgaW5pdGlhbGl6ZXIgaXMgYQorCXBvaW50ZXIgdG8gemVybywgY2FjaGUgaXQgaW4gRU1QVFlfVEFCTEUuCisJKGZpbmlzaF9idWlsdGluX3R5cGUpOiBOZXcgZnVuY3Rpb24sIHRvIGZhY3RvciBjb21tb24gY29kZQorCWFyaXNpbmcgZnJvbSBidWlsZGluZyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorCSogY3BsdXMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgaXQuCisKK0ZyaSBOb3YgMzAgMTA6Mzk6MDQgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBDTEFTU1RZUEVfQVNNX1dSSVRURU4gaW5zdGVhZAorCW9mIFRSRUVfVVNFRCB0byBpbmRpY2F0ZSB0aGF0IHdlIG5lZWQgZGVidWdnaW5nIGluZm8gZm9yCisJVFRZUEUuCisJTm90ZSB0aGF0IG5vYm9keSBldmVyIHNldHMgRVhURU5ERURfREJYX0RFQlVHLglGb3Igbm93LAorCWNoYW5nZSB0byB0ZXN0IERCWF9ERUJVRy4gIEZvciBsYXRlciwgY2hhbmdlIGV2ZXJ5dGhpbmcgdG8KKwlrZXkgb2ZmIG9mIEVYVEVOREVEX0RCWF9ERUJVRy4JCisJQWxzbywgc2V0IGB3YXJuX3JldHVybl90eXBlJyB0byBvbmUgYWx3YXlzLCBzaW5jZSB0aGlzIHdhcm5pbmcKKwlpcyB0b28gdmFsdWFibGUgdG8gbG9zZS4KKwkqIGNwbHVzLXRyZWUuYyAobGFuZ19vdXRwdXRfZGVidWdfaW5mbyk6IERvbid0IHRlc3QgVFJFRV9VU0VELglUaGF0CisJZmllbGQgaXMgYWxyZWFkeSB1c2VkIGJ5IG90aGVyIHJvdXRpbmVzLCBhbmQgd2UgaGF2ZSBhbGwgd2UgbmVlZCBub3cKKwlpbiBDTEFTU1RZUEVfQVNNX1dSSVRURU4uCisJKiBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3R5cGVfbWV0aG9kXzEpOiBIYW5kbGUgY29uc3QsCisJdm9sYXRpbGUsIGFuZCBjb25zdC92b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb25zLgorCitGcmkgTm92IDMwIDA0OjUxOjQ2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAocmVnX2xhc3Rfc2V0X3ZhbHVlKTogTmV3IHZhcmlhYmxlLgorCShjb21iaW5lX2luc3RydWN0aW9ucyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGl0LgorCShyZWNvcmRfZGVhZF9hbmRfc2V0X3JlZ3MpOiBTZXQgcmVnX2xhc3RfdmFsdWUgdG8gc291cmNlCisJb2YgYXNzaWdubWVudDsgY2xlYXIgaXQgZm9yIGEgQ0xPQkJFUiBvciBwYXJ0aWFsIGFzc2lnbm1lbnQuCisJKHN1YnN0KTogVXNlIHJlZ19sYXN0X3NldF92YWx1ZSBpbnN0ZWFkIG9mIGludGVycHJldGluZyB0aGUKKwlpbnNuIGluIHJlZ19sYXN0X3NldCBhcyBpZiBpdCB3YXMgYSBzaW5nbGUgU0VULgorCisJKiBjb21iaW5lLmMgKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogQ2FsbCBnZW5fbG93cGFydCBmb3IgQ09OU1RfSU5ULgorCVdoZW4gbWFraW5nIGEgbmV3IE1FTSwgY29weSBNRU1fVk9MQVRJTEVfUCBhbmQgTUVNX0lOX1NUUlVDVF9QLgorCUlmIGNhbm5vdCByZWNvZ25pemUgdGhlIGFyZ3VtZW50LCBqdXN0IGZvcm0gYSBTVUJSRUc7IHVzdWFsbHksCisJaXQgd29uJ3QgYmUgcmVjb2duaXplZCwgYnV0IHNvbWV0aW1lcyB3aWxsIGFsbG93IGZ1cnRoZXIKKwlzaW1wbGlmaWNhdGlvbnMuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuKTogU2F2ZSBzaXplIG9mIHVpZCBtYXA7IHJlYWxsb2NhdGUgaWYKKwl3ZSBoYXZlIG1vcmUgcmVnaXN0ZXJzIHRoYW4gd2UgYWxsb2NhdGVkLgorCUxlYXZlIHNvbWUgZXh0cmEgcm9vbSBpbiBtYXAuCisKKwkqIHN0bXQuYyAoZW1pdF9jYXNlX25vZGVzKTogU3VwcGx5IG1pc3NpbmcgYXJndW1lbnQgdG8gZW1pdF9jbXBfaW5zbi4KKworCSogZm9sZC1jb25zdC5jIChkZWNvZGVfZmllbGRfcmVmZXJlbmNlKTogQWRkIG1pc3NpbmcgYXJnIGRlY2xhcmF0aW9uLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogQWRkIG1pc3NpbmcgbGFzdCBhcmd1bWVudCB0bworCXJlY3Vyc2l2ZSBjYWxsLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBSZW1vdmUgZXh0cmEgYXJnIHBhc3NlZCB0byBydHhfZXF1YWxfcC4KKworCSogTWFrZWZpbGUuaW4gKHByb3RvKTogTWFrZSBwcm90b2l6ZS4xIGFuZCB1bnByb3RvaXplLjEuCisJKHByb3RvaXplLjEsIHVucHJvdG9pemUuMSk6IE5ldyB0YXJnZXRzLgorCShpbnN0YWxsX21hbik6IEluc3RhbGwgcHJvdG9pemUuMSBhbmQgdW5wcm90b2l6ZS4xLi8KKwkqIHByb3RvLXVucHJvdG8uMTogTmV3IGZpbGUuCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogUHJvcGVybHkgc2V0IFNFVF9TUkMgaW4gbW92YWJsZXMgZW50cnkgZm9yCisJTU9WRV9JTlNOID09IDEgYW5kIENPTlNFQyA+IDAgY2FzZS4KKwkoZm9yY2VfbW92YWJsZXMpOiBEb24ndCBsb29rIGF0IFNFVF9TUkMgd2hlbiBDT05TRUMgPiAwLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFSUkFZX1JFRik6IEVuc3VyZSBUWVBFX1BPSU5URVJfVE8KKwlnZXRzIGluaXRpYWxpemVkIGFmdGVyIHdlIGJ1aWxkIGEgdmFyaWFudCB0eXBlLgorCitGcmkgTm92IDMwIDAwOjM1OjA2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kIChhc2hyIG9mIDE2IHRvIDI0IGJpdHMpOiBVc2UgZXh0bCwgbm90IGV4dHcuCisKK1RodSBOb3YgMjkgMjE6NDE6MDMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRtLXZheC5oIChCTE9DS19QUk9GSUxFUiwgRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIpOiBOZXcgbWFjcm9zLgorCisJKiBnY2MuYyAoYWRkX3ByZWZpeCk6IEFkZCBuZXcgZWxlbWVudCwgZG9uJ3QgcmVwbGFjZSBvbGQgZmlyc3QgZWx0LgorCisJKiBkd2FyZm91dC5jIChkd2FyZm91dF9maW5hbGl6ZSk6IEdvIHRvIERFQlVHX1NFQ1RJT04gZmlyc3QgdGhpbmcuCisKK1RodSBOb3YgMjkgMTc6NTA6NDMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1KQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfbG9vcCk6IFN0b3AgbG9va2luZyBmb3IgYnJhbmNoIHRvIHRoZSBsb29wCisJZXhpdCB3aGVuIHdlIGhpdCBhIE5PVEVfSU5TTl9CTE9DS197QkVHLEVORH0uCisJKiBqdW1wLmMgKGR1cGxpY2F0ZV9sb29wX2V4aXRfdGVzdCk6IExpa2V3aXNlLgorCUFsc28sIG9ubHkgY29weSBsaW5lLW51bWJlciBub3Rlcy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGV4cGFuZF9leHByIGZvciB0aGUKKwlhcmd1bWVudHMgYmVmb3JlIGFsbG9jYXRpbmcgbWFwcyB0aGF0IGFyZSBiYXNlZCBvbiByZWdpc3RlciBudW1iZXJzLgorCisJKiBsb29wLmMgKGxvb3BfcmVnX3VzZWRfYmVmb3JlX3ApOiBBY2NlcHQgbmV3IGFyZ3VtZW50LCBTRVQsIHRvCisJaW5kaWNhdGUgd2hpY2ggcGFydCBvZiBJTlNOIGlzIHNldHRpbmcgdGhlIHJlbGV2YW50IHJlZ2lzdGVyLgorCShzY2FuX2xvb3ApOiBQYXNzIG5ldyBhcmcgdG8gbG9vcF9yZWdfdXNlZF9iZWZvcmVfcC4KKworCSogZnVuY3Rpb24uYyAob3B0aW1pemVfYml0X2ZpZWxkKTogRG9uJ3QgYXNzdW1lIFpFUk9fRVhUUkFDVCBjYW4KKwliZSByZXBsYWNlZCBieSBNRU07IHVzZSB2YWxpZGF0ZV9jaGFuZ2UgdG8gY2hlY2suCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogQWRkIG1pc3NpbmcgYXJnIHRvIHJlY3Vyc2l2ZSBjYWxsLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENvcnJlY3QgdHdvIGNhc2VzIG9mIG1pc3NpbmcgbW9kZSB0byBnZW5fcnR4LgorCitUaHUgTm92IDI5IDAyOjQyOjM1IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogdmVyc2lvbi5jOiBCdW1wIHZlcnNpb24gbnVtYmVyIHRvIDEuOTAuMDQuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogSWYgRkxBR19QSUMgaXMgbm9uemVybywgZW1pdCBhbnkKKwlzcGVjaWFsIFBJQyBjb2RlIG9uY2Ugd2Ugc3RhcnQgcmVhbGx5IGNvbXBpbGluZyBhIGZ1bmN0aW9uIChpLmUuLCB3ZQorCWFyZSBub3QgaW4gYW4gaW5saW5lIGZ1bmN0aW9uKS4JIElubGluZSBmdW5jdGlvbnMgY2Fubm90CisJbWVhbmluZ2Z1bGx5IGhvbGQgUElDIGNvZGUgYmVjYXVzZSB0aGVyZSBpcyBubyBub3Rpb24gb2YgcG9zaXRpb24KKwlpbmRlcGVuZGVuY2UgaW4gY29kZSB0aGF0IGlzbid0IHJlYWxseSBiZWluZyB3cml0dGVuIGRvd24uCisKKwkqIE1ha2VmaWxlLmluOiBEb24ndCBidWlsZCBjcGx1cy1jYWRpbGxhYy5vIGJ5IGRlZmF1bHQuCSBCdWlsZAorCWNwbHVzLWVkc2VsLm8gaW5zdGVhZC4JVW50aWwgTHVjaWQgZnJlZXMgdGhlaXIgcHJvZ3JhbW1pbmcKKwllbnZpcm9ubWVudCwgdGhlaXIgQ2FkaWxsYWMgd2lsbCBhbHdheXMgYmUgYW4gRWRzZWwgdG8gR05Vc2Vycy4KKworCSogc3RtdC5jIChmaXh1cF9nb3Rvcyk6IENoYW5nZSBsb29wIHRvIHJ1biBpbiB0d28gcGFzc2VzIHNvIHRoYXQKKwljbGVhbnVwcyBkb24ndCBleHBlcmllbmNlIGEgcmFjZSBjb25kaXRpb24uCisJKGV4cGFuZF9jbGVhbnVwcyk6IFJlcGxhY2UgTm92IDUgd29yZC1hcm91bmQgd2l0aCBjb25zaXN0ZW5jeSBjaGVjay4KKwlUaGUgc2FtZSBjbGVhbnVwcyBzaG91bGQgbmV2ZXIgYmUgcnVuIHR3aWNlLgorCisJKiBjcGx1cy1kZWNsLmMgKGxhbmdfe2luaXQsZmluaXNofSk6IE1vdmUgdGhlc2UgZnVuY3Rpb25zLi4uCisJY3BsdXMtbGV4LmM6IC4uLnRvIGhlcmUuICBBbHNvLCBtYWtlIGNoYW5nZSB0byBsYW5nX2luaXQgYW5hbG9nb3VzCisJdG8gTm92IDI3IGNoYW5nZSBmb3IgQyBjb21waWxlci4KKworCSogY3BsdXMtZGVjbC5jIChwdXNoZGVjbCk6IERvbid0IHdhcm4gYWJvdXQgc3RhdGljL2V4dGVybiBjb25mbGljdHMKKwlpZiBYIGlzIGEgVFlQRV9ERUNMLgorCShidWlsZF9lbnVtZXJhdG9yKTogQ2VydGFpbiBDT05TVF9JTlQgbm9kZXMgY2Fubm90IGJlIGNvb3B0ZWQgdG8gYmUKKwl0aGUgY29uc3RhbnQgZm9yIGVudW1lcmF0b3IuICBNYXJrIHRoZW0gYXMgbm9uLXNoYXJlYWJsZSBhbmQgZG9uJ3QKKwljb29wdCB0aGVtLgorCisJKiBjcGx1cy1kZWNsLmMgKGxhbmdfe2luaXQsZmluaXNofSk6IERlY2xhcmUgdGhlc2UgdG8gYmUgdm9pZAorCWZ1bmN0aW9ucyB0byBtYXRjaCBuZXcgdHJlZS5oLgorCitXZWQgTm92IDI4IDE4OjQ4OjMzIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBDb252ZXJ0IChzdWJyZWcgKG1lbSkpIHRvIChtZW0pIHdoZW4KKwlub3QgYSBwYXJhZG94aWNhbCBTVUJSRUcuCisKK1dlZCBOb3YgMjggMTc6MTU6NDMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sYWJlbF9ydHgpOiBDbGVhciBMQUJFTF9OQU1FIHZpYSBnZW5fcnR4LgorCitUdWUgTm92IDI3IDIxOjU0OjE1IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9leHRlcm5hbCk6IE5ldmVyIHdyaXRlIGEgLmV4dGVybiBmb3IgYSBzdGF0aWMKKwluYW1lLgorCisJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xKTogSGFuZGxlIG1ha2luZyBhIFNVQlJFRyBvZiBhIE1FTQorCWJ5IHRyeWluZyBhIG5ldyBNRU0uCisKK1R1ZSBOb3YgMjcgMTE6NTQ6MjggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtbGFuZy5jLCBvYmpjLWFjdGlvbi5jOiBJbmNsdWRlIGlucHV0LmguCisJKGxhbmdfaW5pdCk6IENhbGwgY2hlY2tfbmV3bGluZSBoZXJlLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IE5vdCBoZXJlLgorCUNhbGwgbGFuZ19pbml0IGFmdGVyIHNldHRpbmcgaW5wdXRfZmlsZW5hbWUuCisKKwkqIHRyZWUuaDogRGVjbGFyZSBudW1lcm91cyBmdW5jdGlvbnMgdGhhdCB0aGUgZnJvbnQgZW5kIG11c3QgcHJvdmlkZS4KKworCSogcnRsLmggKExBQkVMX1JFRlMpOiBVc2Ugb3BlcmFuZCA1LCBzYW1lIGFzIExBQkVMX05VU0VTLgorCisJKiB0b3BsZXYuYyAod2Fybl9yZXR1cm5fdHlwZSwgV19vcHRpb25zKTogSGFuZGxlIC1XcmV0dXJuLXR5cGUgaGVyZS4KKwkqIGMtZGVjbC5jOiBOb3QgaGVyZS4KKwkqIGZsYWdzLmg6IERlY2xhcmUgaXQgaGVyZSwgbm90IGluIGMtdHJlZS5oLgorCisJKiBnY2MuYyAocGV4ZWN1dGUpOiBXYWl0IGFuZCByZXRyeSBpZiBmb3JrIGZhaWxzLgorCisJKiBleHByLmMgKGRvX2p1bXApOiBQYXNzIGFsbCBhcmdzIHRvIGdldF9pbm5lcl9yZWZlcmVuY2UuCisJKGV4cGFuZF9hc3NpZ25tZW50KTogRml4IHR5cG8gaW4gYXJnIHRvIGdldF9pbm5lcl9yZWZlcmVuY2UuCisKKwkqIHRtLWhwOWszMjAuaCAoU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWCk6IERvbid0IGFsdGVyIGlmIGFscmVhZHkgc2V0LgorCitNb24gTm92IDI2IDE4OjI4OjUxIDE5OTAgIE1pY2hhZWwgSSBCdXNobmVsbCAgKG1pYiBhdCBjaHVyY2h5LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IERvIGJhY2tzbGFzaC1uZXdsaW5lcyBpbnNpZGUgb2YKKwlzdHJpbmdzLgorCitNb24gTm92IDI2IDE1OjM5OjI5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBIYW5kbGUgLXcuCisJKHdhcm5pbmcpOiBEbyBub3RoaW5nIGlmIC13LgorCSogZ2NjLmMgKGNvbXBpbGVycyk6IFBhc3MgLXcgdG8gY3BwLgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBkaXNjYXJkIGFyZyB0eXBlcworCWZvciBwcm90b3R5cGUgZXZlbiBpZiB0cmFkaXRpb25hbC4KKworU3VuIE5vdiAyNSAyMDo1MjozMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcHJvdG9pemUuYzogVW5kZWYgQ0hBUl9CSVQsIGV0YywgYmVmb3JlIGluY2x1ZGluZyBsaW1pdHMuaC4KKworCSogcmVsb2FkMS5jIChvbGRfYXNtX29wZXJhbmRzX3ZlYywgbmV3X2FzbV9vcGVyYW5kc192ZWMpOiAKKwlUeXBlIHNob3VsZCBwb2ludCB0byBhIHZlY3Rvci4KKwkoRWxpbWluYXRlX3JlZ3MpOiBGb3IgYXNtX29wZXJhbmRzLCBjb3B5IHRoZSB2ZWN0b3IgcHJvcGVybHkuCisKK1N1biBOb3YgMjUgMjA6MzU6MTIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBGaXggdHlwbyBpbiBzdGFjayBwdXNoIGNvbWJpbmluZyBjb2RlLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRW5zdXJlIHdlIHNoYXJlIG9wZXJhbmRzIDMgYW5kIDQKKwlvZiBBU01fT1BFUkFORFMgb3BlcmF0aW9ucyBpZiB0aGV5IHdlcmUgb3JpZ2luYWxseSBzaGFyZWQuCisJQ29weSBhbGwgcnR4IGZsYWdzIHdoZW4gbWFraW5nIGEgbmV3IE1FTS4KKwkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IEluaXRpYWxpemUgZm9yIEFTTV9PUEVSQU5EUyBzaGFyaW5nIGNoZWNrLgorCitTdW4gTm92IDI1IDE2OjM3OjEwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoc3RhbXAtZ251bGliMik6IERvbid0IGRlcGVuZCBvbiBnbnVsaWIyLWluZGlyZWN0LgorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogSGFuZGxlICVXey4uLn0uCisJKGRlZmF1bHRfY29tcGlsZXJzKTogVXNlICVXey4uLn0gd2hlbiBwYXNzaW5nIC1vIG9wdGlvbi4KKworU2F0IE5vdiAyNCAxNjozOTo1NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY3BsdXMtbGV4LmMgKGluaXRfbGV4LCBkb19wZW5kaW5nX2lubGluZXMsIHJlaW5pdF9sYW5nX3NwZWNpZmljKToKKwlBZGQgY29uZGl0aW9uYWxzIGZvciBfX0dOVV9MSUJSQVJZX18uCisKK1RodSBOb3YgMjIgMTM6NDg6MDYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSk6IFBhc3MgYWRkaXRpb25hbAorCWFyZyB0byBnZXRfaW5uZXJfcmVmZXJlbmNlOyBpdCBnZXRzIHNldCBpZiBzb21ldGhpbmcgd2FzIHZvbGF0aWxlLgorCShkZWNvZGVfZmllbGRfcmVmZXJlbmNlKTogTmV3IGFyZyBQVk9MQVRJTEVQOyBwYXNzZWQgdG8KKwlnZXRfaW5uZXJfcmVmZXJlbmNlLgorCShtZXJnZV9jb21wb25lbnRfcmVmZXJlbmNlcyk6IEFkZCBwb2ludGVyIHRvIHBsYWNlIHRvIHN0b3JlIGlmCisJc29tZXRoaW5nIGlzIHZvbGF0aWxlIHRvIGNhbGxzIHRvIGRlY29kZV9maWVsZF9yZWZlcmVuY2U7IGRvbid0CisJZG8gYW55dGhpbmcgaWYgaXQgZ2V0cyBzZXQgKHRoaXMgbWF5IGJlIHZlcnkgY29uc2VydmF0aXZlKS4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2xvb3ApOiBTa2lwIGluaXRpYWwgQ09ERV9MQUJFTCBhdCBzdGFydCBvZgorCWxvb3Agd2hlbiBsb29raW5nIGZvciBxdWFsaWZpZWQgY29uZGl0aW9uYWwgZXhpdC4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogSWYgKHN1YnJlZzpNMSAocmVnOk0yIC4uLi4pKSBhbmQgd2UKKwloYXZlIHRyb3VibGUgYWNjZXNzIHRoZSByZWdpc3RlciBpbiBNMSwgcmVsb2FkIHRoZSByZWcsIG5vdCBzdWJyZWcuCisJRml4IHR5cG8gaW4gdGVzdGluZyBmb3IgbWVtb3J5LgorCShyZWxvYWQpOiBGb3JjZSByZWxvYWQgb2YgdGhlIG9wZXJhbmQgaW4gdGhlIGFib3ZlIGNhc2VzLgorCitXZWQgTm92IDIxIDE3OjM5OjQyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlLCBjb21iaW5lX2dpdnMpOiBEb24ndCBwZW5hbGl6ZQorCW5vbi1yZXBsYWNlYWJsZSBnaXZzIHVubGVzcyB0aGV5IGFyZSB1c2VyIHZhcmlhYmxlczsgdGVtcG9yYXJpZXMKKwlhcmUgcHJvYmFibHkgZGVhZCBldmVuIHRob3VnaCB3ZSBjYW4ndCBwcm92ZSBpdC4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfY29uc3RhbnRzKTogRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGxvb2tpbmcKKwlpbnNpZGUgQ09OU1RfRE9VQkxFX01FTS4KKwlDYWxsIHJlY3Vyc2l2ZWx5IG9uIHdoYXQgZ2V0X3Bvb2xfY29uc3RhbnQgcmV0dXJuZWQsIGluIGNhc2UgaXQKKwl3YXMgaXRzZWxmIHRoZSBhZGRyZXNzIG9mIGEgcG9vbCBjb25zdGFudC4KKwkoY29weV9mb3JfaW5saW5lLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgcmVzdG9yZV9jb25zdGFudHMpOgorCVJlbWFrZSBDT05TVF9ET1VCTEUgc28gaXQgZ2V0cyBjaGFpbmVkIGluIGNvcnJlY3RseSBhbmQgd2UgZG9uJ3QgdXNlCisJb2Jzb2xldGUgQ09OU1RfRE9VQkxFX01FTSB2YWx1ZXMuICBDYWxsIHJlY3VzaXZlbHkgb24gb3BlcmFuZCB3ZSBhcmUKKwlhYm91dCB0byBwYXNzIHRvIGZvcmNlX2NvbnN0X21lbTsgaXQgbWlnaHQgaGF2ZSBiZWVuIGEgY2FzZSBvZiBhCisJY29uc3RhbnQgdmFsdWUgYmVpbmcgYW4gYWRkcmVzcyBvZiBhbm90aGVyIGNvbnN0YW50LgorCisJKiBsb29wLmMgKGZpbmRfbWVtX2dpdnMpOiBEb24ndCBtYWtlIGEgREVTVF9BRERSIGdpdiB3aXRoIG11bHRfdmFsID09IDEKKwlhbmQgYWRkX3ZhbCA9PSAwLgorCShtYXliZV9lbGltaW5hdGVfYml2XzEpOiBUdXJuIG9mZiBlbGltaW5hdGlvbiBpbiAoY29tcGFyZSBiaXYxIGJpdjIpCisJY2FzZXM7IHRoZXkgaGF2ZSBwcm9ibGVtcy4KKworV2VkIE5vdiAyMSAxNjowNjoxNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZHdhcmZvdXQuYyAobG9jYXRpb25fYXR0cmlidXRlKTogT2Zmc2V0IGZvciBiaXRmaWVsZHMgaXMgc3BlY2lhbC4KKworCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogTmV3IGFyZyBwdm9sYXRpbGVwLgorCShleHBhbmRfZXhwciwgZXhwYW5kX2Fzc2lnbm1lbnQpOiBVc2UgdG8gc2V0IE1FTV9WT0xBVElMRV9QLgorCitXZWQgTm92IDIxIDEwOjM0OjI1IDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IFJlY29yZCB3aGV0aGVyIGEgRklFTERfREVDTCBpcyBhCisJYml0LWZpZWxkIGFuZCBpZiBzbyBpdHMgb3JpZ2luYWwgdHlwZS4KKwkqIHRyZWUuaCAoREVDTF9CSVRfRklFTERfVFlQRSk6IE5ldy4KKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFVzZSBERUNMX0JJVF9GSUVMRF9UWVBFLgorCSogZHdhcmZvdXQuYyAob3V0cHV0X21lbWJlcl9kaWUsIGJpdF9vZmZzZXRfYXR0cmlidXRlLAorCWJpdF9zaXplX2F0dHJpYnV0ZSwgbWVtYmVyX2RlY2xhcmVkX3R5cGUpOiBVc2UgREVDTF9CSVRfRklFTERfVFlQRS4KKwkqIHNkYm91dC5jIChzZGJvdXRfb25lX3R5cGUpOiBVc2UgREVDTF9CSVRfRklFTERfVFlQRS4KKworCSogc2Rib3V0LmMgKERFQlVHR0VSX0FSR19PRkZTRVQsIERFQlVHR0VSX0FVVE9fT0ZGU0VUKTogTmV3CisJaW50ZXJmYWNlcyB0byBjb21wdXRlIHRoZSBsb2NhdGlvbiBvZiBhcmd1bWVudHMgYW5kIGF1dG9tYXRpYworCXZhcmlhYmxlcy4KKwkqIGRieG91dC5jIChERUJVR0dFUl9BUkdfT0ZGU0VULCBERUJVR0dFUl9BVVRPX09GRlNFVCk6IExpa2V3aXNlLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogRGVzY3JpYmUgYSBwYXJhbWV0ZXIgcGFzc2VkIGluCisJcmVnaXN0ZXJzIGJ1dCBsaXZpbmcgb24gdGhlIHN0YWNrIGFzIE5fUFNZTSByYXRoZXIgdGhhbiBOX0xTWU0uCisJVGhlc2UgYXJlIHR5cGljYWxseSBhcmdfcG9pbnRlciBiYXNlZCBsb2NhdGlvbnMuCisKKwkqIG91dC1tODhrLmMgKG04OGtfZGVidWdnZXJfb2Zmc2V0KTogTmV3IGZ1bmN0aW9uLgorCSogdG0tbTg4ay5oIChERUJVR0dFUl9BUkdfT0ZGU0VULCBERUJVR0dFUl9BVVRPX09GRlNFVCk6IFJlcGxhY2VzCisJU0RCX0FVVE9fTk9STUFMSVpFX09GRlNFVC4KKwkqIHRtLW04OGsuaCAoU1RBQ0tfQk9VTkRBUlkpOiBVcGRhdGUgdG8gMTYgYnl0ZSBhbGlnbmVkIHN0YWNrcy4KKworVHVlIE5vdiAyMCAyMzo0ODo1NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfaW5pdCk6IFNldCBzdGFjayBkZXB0aCB0byAxIGF0IHN0YXJ0LgorCShvdXRwdXRfcGFkZGVkX251bGxfZGllKTogTmV3IGZ1bmN0aW9uLgorCShkd2FyZm91dF9maW5hbGl6ZSk6IFVzZSB0aGF0IHRvIGVuc3VyZSBsZW5ndGggZGl2aXNpYmxlIGJ5IDQuCisKKwkqIG5zMzJrLm1kIChhZGRzaTMpOiBEb24ndCB1c2UgYGFkZHInIGZvciB2ZXJ5IGxhcmdlIGRpc3BsYWNlbWVudHMuCisKK1R1ZSBOb3YgMjAgMDU6NDg6NDIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChjYW5fcmV2ZXJzZV9jb21wYXJpc29uX3ApOiBJdCBpcyBzYWZlIHRvIHJldmVyc2UgYW4gRVEKKwlvciBORSBjb21wYXJpc29uLCBldmVuIGlmIElFRUUgZmxvYXRpbmctcG9pbnQuCisKKwkqIGludGVncmF0ZS5oIChzdHJ1Y3QgaW5saW5lX3JlbWFwKTogY29uc3RfKl9tYXAgbm93IG1hcHMgcmVnaXN0ZXJzCisJaW4gY2FsbGluZyBmdW5jdGlvbiwgbm90IGNhbGxlZCBmdW5jdGlvbi4KKwlBZGQgZmllbGRzIHRvIHNhdmUgdmFsdWVzIHJlY29yZGVkIGZyb20gU0VUcy4KKwkqIGludGVncmF0ZS5jOiBOb3cgaW5jbHVkZXMgaW5zbi1jb25maWcuaCBhbmQgcmVhbC5oLgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogTmV3IG1lYW5pbmcgZm9yIGNvbnN0XypfbWFwLgorCURvbid0IGZpbGwgaW4gY29uc3RhbnQgZXF1aXZhbGVuY2VzIGhlcmU7IG5vdyBkb25lIGluIHRyeV9jb25zdGFudHMuCisJU2hvdyBDQUxMX0lOU05zIHBvdGVudGlhbHkgY2xvYmJlciBhbGwgaGFyZCByZWdpc3RlcnMgc2luY2Ugd2UKKwlub3cgcmVjb3JkIGVxdWl2YWxlbmNlcyBmb3IgaGFyZCByZWdpc3RlcnMuCisJKHRyeV9jb25zdGFudHMpOiBObyBsb25nZXIgbmVlZCBvcmlnaW5hbCBSVEw7IGFsbCBjYWxsZXJzIGNoYW5nZWQuCisJQ2FsbCBub3RlX3N0b3JlcyB0byBraWxsIGFueSBrbm93biBlcXVpdmFsZW5jZXMgZm9yIHJlZ2lzdGVycyBjaGFuZ2VkLgorCVJlY29yZCBlcXVpdmFsZW5jZXMgZm9yIFBDLCBDQzAsIGFuZCByZWdpc3RlcnMgc2V0IGJ5IHRoaXMgaW5zbi4KKwkoc3Vic3RfY29uc3RhbnRzKTogTm8gbG9uZ2VyIG5lZWQgb3JpZ2luYWwgUlRMOyBhbGwgY2FsbGVycyBjaGFuZ2VkLgorCVJlZmxlY3QgbmV3IG1lYW5pbmcgb2YgY29uc3RfKl9tYXAuCisJUGVyZm9ybSBtb3JlIGV4dGVuc2l2ZSBjb25zdGFudCBmb2xkaW5nLCBiYXNpY2FsbHkgYSBzdWJzZXQgb2YKKwlmb2xkX3J0eCBpbiBjc2UuYzsgc3BlY2lmaWNhbGx5LCBmb2xkIHRoZSByZXN1bHQgb2YgY29tcGFyaXNvbgorCW9wZXJhdGlvbnMgYW5kIElGX1RIRU5fRUxTRSBvcGVyYXRpb25zLgorCVJlY29yZCB0aGUgY29uc3RhbnQgZXF1aXZhbGVuY2VzIG9mIFNFVHMsIGlmIGFueS4KKwkodHJ5X2ZvbGRfY29uZGl0aW9uLCBjb25zdF9lcXVpdiwgZm9sZF9vdXRfY29uc3RfY2MwKTogRGVsZXRlZC4KKwkqIE1ha2VmaWxlLmluIChpbnRlZ3JhdGUubyk6IE5vdyBpbmNsdWRlcyBpbnNuLWNvbmZpZy5oIGFuZCByZWFsLmguCisKK1NhdCBOb3YgMTcgMDc6NDg6NDUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAobG9jYWxfYWxsb2MpOiBEb24ndCBhbGxvY2F0ZSBhIHJlZyB0aGF0IHdhbnRzIGEKKwljbGFzcyB0aGF0IGhhcyBvbmx5IG9uZSByZWdpc3RlcjsgbGV0IGdsb2JhbC1hbGxvYyBkbyBpdCBzbyB0aGF0IGl0CisJY2FuIGJlIGdpdmVuIGEgR0VORVJBTF9SRUcgaWYgcmVsb2FkIG5lZWRzIGEgc3BpbGwgcmVnIG9mIHRoYXQgY2xhc3MuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzLCByZWdfY2xhc3NfcmVjb3JkKTogQ291bnQgc2F2aW5ncyBpbiBsb29wcyBhcworCWJlaW5nIGdyZWF0ZXIgdGhlIHNhbWUgd2F5IHdlIGFkanVzdCByZWdfbl9yZWZzIGZvciBsb29wcyBpbiBmbG93LmMuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogUmVtb3ZlIGNoYW5nZSBvZgorCU9jdCAxNjsgaXQgY2F1c2VzIHByb2JsZW1zIHdpdGggbG9uZyBsb25nIGJpdCBmaWVsZHMuCisKKwkqIHJ0bGFuYWwuYyAocmVnX292ZXJsYXBfbWVudGlvbmVkX3ApOiBJZiBjYWxsZWQgd2l0aCBhIGNvbnN0YW50LAorCXJldHVybiB6ZXJvLiAgSWYgY2FsbGVkIHdpdGggYSBNRU0sIHJldHVybiAxIGlmZiB0aGUgc2Vjb25kIGFyZworCWNvbnRhaW5zIGEgTUVNLiAKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IENhbGwgcmVnX292ZXJsYXBfbWVudGlvbmVkX3Agb25seSBpZiBPVVQKKwlpcyBhIE1FTSBhbmQgdGhlbiBwYXNzIGl0IHRoZSBhZGRyZXNzIG9mIE9VVC4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogUmVmaW5lIHdoZW4gU1JDX0VRViwgU1JDLCBhbmQgREVTVCBhcmUgYWRkZWQKKwl0byB0aGUgaGFzaCB0YWJsZS4gIFNSQ19FUVYgaXMgbm90IGFkZGVkIHRvIHRoZSBoYXNoIHRhYmxlIGlmIGl0CisJaXMgdm9sYXRpbGUgb3IgZXF1YWwgdG8gREVTVCBhbmQgc2ltaWxhcmx5IGZvciBTUkMuICBERVNUIGlzIG5vdAorCWFkZGVkIHRvIHRoZSBoYXNoIHRhYmxlIHVubGVzcyBlaXRoZXIgU1JDX0VRViBvciBTUkMgaXMuCisKK1RodSBOb3YgMTUgMjM6NDM6MjAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBDaGFuZ2Ugd2FybmluZyBtZXNzYWdlLgorCitUaHUgTm92IDE1IDE4OjQ0OjQ5IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9sb29wKTogR2VuZXJhbGl6ZSBjb2RlIHRvIGxvb2sgZm9yIG1vcmUKKwl0aGFuIG9uZSBicmFuY2ggdG8gdGhlIGV4aXQgYW5kIGluY2x1ZGUgdW5jb25kaXRpb25hbCBicmFuY2hlcworCXRvIHRoZSBleGl0OyBtb3ZlIHRoZSB3aG9sZSByYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBsb29wLgorCSoganVtcC5jIChkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QpOiBOZXcgZnVuY3Rpb24uCisJKGp1bXBfb3B0aW1pemUpOiBDYWxsIGl0LgorCURvbid0IGFsbG9jYXRlIGp1bXBfY2hhaW4gdW50aWwgd2UgaGF2ZSBmaW5pc2hlZCBkZWxldGluZyBkZWFkIGNvZGUuCisJTGVhdmUgc29tZSBtb3JlIHJvb20gaW4ganVtcF9jaGFpbi4KKwkoc2ltcGxlanVtcF9wKTogUmVqZWN0IGlmIG5vdCBKVU1QX0lOU04uCisJKGRlbGV0ZV9pbnNuKTogSWYgc2ltcGxlanVtcF9wLCByZW1vdmUgZnJvbSBqdW1wIGNoYWluLgorCSogbG9vcC5jIChsb29wX3NraXBfb3Zlcik6IERlbGV0ZWQuCisJKHNjYW5fbG9vcCk6IE5vIGxvbmdlciBjYWxsIGl0LgorCSogY3NlLmMgKHByZWRlY2lkZV9sb29wX2VudHJ5KTogRGVsZXRlZC4KKwkoY3NlX2Jhc2ljX2Jsb2NrKTogTm8gbG9uZ2VyIGNhbGwgaXQuCisKK1RodSBOb3YgMTUgMTg6MDA6MjAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG1hdGgtNjg4ODEuaCAoSFVHRV9WQUwpOiBBZGQgZXh0cmEgYnJhY2VzIGZvciBTdW4uCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogRG9uJ3QgbGV0IGFycmF5IGhhdmUgbGVzcworCWFsaWdubWVudCB0aGFuIGl0cyBtb2RlIGNhbGxzIGZvci4KKworVGh1IE5vdiAxNSAxMzowNTozMCAxOTkwICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9wYXJtcywgc2Rib3V0X3JlZ19wYXJtcyk6IFJlaW1wbGVtZW50ZWQgYmFzZWQKKwlvbiBkYnhvdXRfcGFybXMgYW5kIGRieG91dF9yZWdfcGFybXMuCisKK1dlZCBOb3YgMTQgMDg6NDg6NDMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZW1pdC1ydGwuYyAoZW1pdF8uLi4pOiBBbGwgb2YgdGhlc2Ugbm93IHJldHVybiB0aGUgbGFzdCBpbnNuCisJZW1pdHRlZDsgcHJldmlvdXNseSBzb21lIG9mIHRoZW0gcmV0dXJuZWQgdm9pZC4KKwkoZW1pdF9iYXJyaWVyX2JlZm9yZSk6IE5ldyBmdW5jdGlvbiwgc2ltaWxhciB0byBvdGhlcnMuCisJKiBydGwuaDogQWxsIGVtaXRfLi4uIGZ1bmN0aW9ucyBub3cgcmV0dXJuIGFuIHJ0eDsgcmVvcmRlciBzbworCWRlY2xhcmF0aW9ucyBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgZGVmaW5pdGlvbnMgaW4gZW1pdC1ydGwuYy4KKworCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3t0YXJnZXQsZmFsbHRocm91Z2h9KTogQWRkIG1pc3NpbmcKKwl0ZXN0IHdoZW4gY2hlY2tpbmcgY2FuZGlkYXRlIGluc24gZm9yIHJlc291cmNlIGNvbmZsaWN0cy4KKworV2VkIE5vdiAxNCAwNzowODoxOSAxOTkwICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogYy1wYXJzZS55IChwdXNobGV2ZWwsIGNvbXBzdG10KTogUGxhY2UgYSBsaW5lIG5vdGUgYXQgdGhlIGZpcnN0CisJdG9rZW4gYmVnaW5uaW5nIGEgYmxvY2sgYW5kIGF0IHRoZSBjbG9zZSBicmFjZSBlbmRpbmcgYSBibG9jay4KKwlUaGVzZSBhcmUgdGhlIGNvbnZlbnRpb25hbCBsb2NhdGlvbnMgZm9yIFNEQiBhbmQgRFdBUkYgZGVidWdnaW5nCisJaW5mb3JtYXRpb24uCisKK1R1ZSBOb3YgMTMgMTg6MTY6NDcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9zdGFja19sb2NhbCk6IElmIGFsaWdubWVudCBub3Qgc3BlY2lmaWVkCisJYW5kIG5vdCBCTEttb2RlLCB1c2UgYXQgbGVhc3Qgd29yZCBhbGlnbm1lbnQuCisJKGFzc2lnbl9vdXRlcl9zdGFja19sb2NhbCk6IExpa2V3aXNlLgorCisJKiBzcGFyYy5tZDogVHVybiBvZmYgcGF0dGVybnMgdGhhdCBzcGVjaWZ5IG5vX292IG9yIENDX05PX09WRVJGTE9XLgorCisJKiBkd2FyZm91dC5jIChmaWxlX2F0dHJpYnV0ZSk6IEZpeCBhcmcgdG8gQVNNX09VVFBVVF9EV0FSRl9BVFRSSUJVVEUuCisJKEFUX2xpbmUsIEFUX2ZpbGUpOiBOZXcgZGVmaW5pdGlvbnMuCisKKwkqIG91dC1pODYwLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogTW92ZSAuTG0lMyBkb3duIG9uZSBpbnNuLgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiAtZnVuc2lnbmVkLWJpdC1maWVsZCBkb2Vzbid0IGFmZmVjdCBlbnVtcy4KKworVHVlIE5vdiAxMyAwOToyODoyNyAxOTkwICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUmVwb3J0IGFuIGVycm9yIGlmIC1DIGlzIHVzZWQgd2l0aG91dAorCS1FLiAgUGFzcyAtSCB0byBjcHAuCisKKwkqIHNkYm91dC5jIChwbGFpbl90eXBlLCBwbGFpbl90eXBlMSk6IHNhdmUgYW5kIG91dHB1dCB0aGUKKwlyaWdodG1vc3QgYXJyYXkgZGltZW5zaW9ucy4KKworCSogc3ltcy5oIChlbnVtIHNkYl90eXBlKTogQWRkIFRfVk9JRCwgZXF1YWwgaW4gdmFsdWUgdG8gVF9BUkcuCisJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogVXNlIFRfVk9JRCBmb3IgVk9JRF9UWVBFIGFuZCBkZWZpbmUgaXQKKwl0byBiZSBUX0lOVCBpZiBub3QgcHJlc2VudCBpbiA8c3ltcy5oPi4KKworCSogc2Rib3V0LmMgKHNkYm91dF90b3BsZXZlbF9kYXRhKTogVXNlIGFib3J0IHJhdGhlciB0aGFuIGZhdGFsLgorCitNb24gTm92IDEyIDA4OjQ5OjMzIDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChjb21wYXJlKTogRml4IHVzZSBvZiBHRVRfTU9ERV9DTEFTUyBzbyB3ZSBkb24ndCBhYm9ydCBpZgorCU1PREUgaXMgVk9JRG1vZGUuCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYik6IENhbGwgYHhtYWxsb2MnIGluc3RlYWQgb2YgYG1hbGxvYycuCisKKwkqIG91dC1zcGFyYy5jIChoYXJkX3JlZ25vX21vZGVfb2spOiBDaGFuZ2UgaW5pdGlhbGl6YXRpb24gb2YgYXJyYXkKKwl0byBtYXRjaCBiZWhhdmlvciBvZiBOb3YgMTEgY2hhbmdlIGZvciBjb21wbGV4IG1vZGVzLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9sYWJlbHJlZl9pbnNuKTogQ2hhc2UgYWxsIExPR19MSU5LUyBvZiBpbnNuIHRvIHRyeQorCXRvIGRlbGV0ZSByZWZlcmVuY2VzIHRvIExBQkVMLglUaGlzIGlzIG5lZWRlZCBmb3IgbWFjaGluZXMgbGlrZQorCVNQQVJDIHdoaWNoIHVzZSBtdWx0aXBsZSBpbnNucyB0byBnZXQgdGhlIHZhbHVlIG9mIExBQkVMIGludG8gYQorCXJlZ2lzdGVyLgorCitNb24gTm92IDEyIDE2OjA3OjI3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBtYWNobW9kZS5kZWYgKFNDbW9kZSwgLi4uKTogQ2xhc3MgaXMgTU9ERV9DT01QTEVYX0ZMT0FULgorCitTdW4gTm92IDExIDAwOjI3OjM0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiB0bS1pODYwLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEhhbmRsZSB2YWx1ZXMgbW9yZSB0aGFuIDIgcmVncyBsb25nLgorCSogdG0tbTY4ay5oIChIQVJEX1JFR05PX01PREVfT0spOiBMaWtld2lzZSwgZm9yIGQ3L2EwIGJvdW5kYXJ5LgorCSogdG0tc3B1ci5oIChIQVJEX1JFR05PX01PREVfT0spOiBMaWtld2lzZSwgZm9yIDMxLzMyIGJvdW5kYXJ5LgorCSogdG0tKi5oIChIQVJEX1JFR05PX05SRUdTKTogVXNlIEdFVF9NT0RFX05VTklUUyB0byBoYW5kbGUKKwljb21wbGV4IHZhbHVlcyBpbiBmcCByZWdpc3RlcnMgb24gbWFjaGluZXMgd2hlcmUgb25lIHJlZyBob2xkcyBhIERGLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X29uZV90eXBlKTogRG8gbm90aGluZyBmb3IgaW5jb21wbGV0ZSB0eXBlLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogV2FybmluZyBvbmx5IHdoZW4gcmVkZWZpbmluZyBidWlsdC1pbiBmbi4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIHNpemV0eXBlLCBub3QgdW5zaWduZWQgbG9uZywKKwlpbiBwcm90b3R5cGVzIGZvciBtZW1jcHkgYW5kIG1lbWNtcC4KKworCSogYy1wYXJzZS55IChjb21wb25lbnRfZGVjbCk6IERvbid0IHJlYWQgdGhlIHNlbWljb2xvbiBoZXJlLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogUmV2ZXJzZSB0b3AtbGV2ZWwgZGVjbHMgYmVmb3JlIG91dHB1dC4KKworU2F0IE5vdiAxMCAyMjoyNzo0NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBVc2UgTU9ERV9DT01QTEVYX3tJTlQsRkxPQVR9LgorCitTYXQgTm92IDEwIDIwOjM0OjU1IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jOiBQcm92aWRlIGEgZGVmYXVsdCBkZWZpbml0aW9uIG9mIFJFR0lTVEVSX01PVkVfQ09TVC4KKworU2F0IE5vdiAxMCAwMTo0MzowOSAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBEb24ndCB1c2UgQ0xBU1NUWVBFX0FTU09DIGFzIGEgbGlzdAorCW9mIG9ubHkgaW1tZWRpYXRlIGJhc2V0eXBlcyBhbnltb3JlLiAgVXNlIGBnZXRfYmFzZV9kaXN0YW5jZScgdG8KKwljaGVjayB3aGV0aGVyIGEgdHlwZSBpcyBhbiBpbW1lZGlhdGUgYmFzZXR5cGUgb3Igbm90LgorCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBEb24ndCBlbWl0IGEgVVNFIGlmIFZBTCBpcyBhCisJcHNldWRvLXJlZ2lzdGVyLgorCisJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogQ2FsbCB0byBzdHJjbXAgZm9yCisJIl9fYnVpbHRpbl92YV9hbGlzdCIgbXVzdCB1c2UgSURFTlRJRklFUl9QT0lOVEVSIG5vdAorCURFQ0xfTkFNRS4KKworCSogZ2VuYXR0cnRhYi5jIChjaGVja19hdHRyX3Rlc3QpOiBVc2UgWFNUUiBtYWNybyBpbnN0ZWFkIG9mCisJWEVYUCBtYWNybyBpbiBwbGFjZXMgd2hlcmUgc3RyaW5ncyBhcmUgdXNlZC4KKworCSogdHJlZS5jICh0eXBlX2hhc2hfbG9va3VwKTogSGF2ZSB0byBjaGVjayBUWVBFX0RPTUFJTiBmb3Igbm9uLXplcm8KKwliZWZvcmUgY29tcGFyaW5nIHRoZSBlcXVhbGl0eSBvZiB0aGUgcG9zc2libGUgbGlzdHMuCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBDaGVjayBUUkVFX1RZUEUgYmVmb3JlIGNoZWNraW5nCisJdGhhdCB0aGUgVFJFRV9UWVBFIGlzIGFuIE9GRlNFVF9UWVBFLgorCisJKiBjcGx1cy10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogVXNlIERFQ0xfUkVTVUxUIG9mCisJY3VycmVudF9mdW5jdGlvbl9kZWNsIGluc3RlYWQgb2YgYHJlc3VsdCcgc2luY2UgYHJlc3VsdCcgbWlnaHQgYmUKKwlzZXQgdG8gemVyby4KKworCSogY3BsdXMtZGVjbC5jICh4cmVmX3RhZyk6IEZpeGVkIHR5cG8gaW4gc2V0dGluZworCVRZUEVfVVNFU19DT01QTEVYX0lOSEVSSVRBTkNFLgorCisJKiBjcGx1cy10cmVlLmMgKGFzc29jX3ZhbHVlKTogQ2hhbmdlZCBpbnRlcmZhY2UgdG8gdGFrZSBDT1BZSU5HCisJcGFyYW1ldGVyLgorCSogY3BsdXMte2NsYXNzLGluaXQsc2VhcmNoLHRyZWV9LmMgIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBSZXNvbHZlIE9GRlNFVF9SRUZzIGlmIHRoZSB0eXBlIHdlCisJYXJlIGNvbnZlcnRpbmcgdG8gaXMgbm90IGFuIE9GRlNFVF9UWVBFLgorCitUaHUgTm92CSA4IDE1OjI2OjI3IDE5OTAgIENyYWlnIEJ1cmxleQkoYnVybGV5IGF0IHBvZ28uYWkubWl0LmVkdSkKKworCSogdG0tKi5oOiBUcnkgdG8gY2hhbmdlIEhBUkRfUkVHTk9fTlJFR1MsIEhBUkRfUkVHTk9fT0ssIGFuZCBvdGhlcgorCW1hY3JvIGRlZnMgdG8gaGFuZGxlIG5ldyBjb21wbGV4IHR5cGUgc3R1ZmYuICBNb3N0bHkgZ3Vlc3N3b3JrOyBuZWVkcworCWNoZWNraW5nIGJ5IHBlb3BsZSB3aG8gcmVhbGx5IGtub3cgZWFjaCBtYWNoaW5lLgorCSogbWFjaG1vZGUuZGVmIChTQ21vZGUsIERDbW9kZSwgWENtb2RlLCBUQ21vZGUpOiBOZXcgY29tcGxleCBtb2Rlcy4KKwkqIG1hY2htb2RlLmggKEdFVF9NT0RFX0FMSUdOTUVOVCk6IE5ldyBtYWNybyBmcm9tIHN0b3ItbGF5b3V0LmMuCisJKiB0cmVlLmMgKGJ1aWxkX2NvbXBsZXhfdHlwZSk6IE5ldyBmdW5jdGlvbi4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogSGFuZGxlIENPTVBMRVhfVFlQRS4KKwkqIGV4cHIuYyAoY29tcGFyZTEsIGNvbXBhcmUsIG1vdmVfYmxvY2tfdG9fcmVnLCBlbWl0X3B1c2hfaW5zbik6CisJQ2hhbmdlIHVzZXMgb2YgR0VUX01PREVfQ0xBU1MuCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdHdvdmFsX2Jpbm9wLCBleHBhbmRfdW5vcCk6CisJKGVtaXRfY21wX2luc24pOiBMaWtld2lzZS4KKworVGh1IE5vdgkgOCAwNjoxOTo1NyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChub19jb25mbGljdF9wKTogSW5pdGlhbGl6ZSAqV0hFUkVfREVBRDsgcHJldmlvdXNseQorCXVuaW5pdGlhbGl6ZWQuCisKK1RodSBOb3YJIDggMDE6MDg6NDUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBTaXplIG9mIHdpZGUgU1RSSU5HX0NTVCBjb3VudGVkIHRlcm1pbmF0b3Igd3JvbmcuCisKK1dlZCBOb3YJIDcgMTQ6NTU6MzggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYjIuYyAoTF90cmFtcG9saW5lKTogUHV0IGl0IGluc2lkZSBhIGR1bW15IGZ1bmN0aW9uLgorCisJKiBlbnF1aXJlLmM6IFJlbmFtZWQgZnJvbSBoYXJkLXBhcmFtcy5jOyBuZXcgdmVycyBmcm9tIHN0ZXZlbkBjd2kubmwuCisJTW9kaWZpZWQgdG8gdW5kZWYgQ0hBUl9CSVQsIGV0Yy4gaWYgZGVmaW5lZCBpbiBzdGRpby5oLgorCSogTWFrZWZpbGUuaW4gKGVucXVpcmUpOiBUYXJnZXRzIHJlbmFtZWQuCisJKGVucXVpcmUubyk6IERlZmluZSBOT19NRU0uCisKK1dlZCBOb3YJIDcgMTQ6MTg6MzQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChpbnZlcnRfanVtcCk6IElmIGl0IGlzIGdvaW5nIHRvIGZhaWwgKGkuZS4sIHJlZGlyZWN0X2p1bXAKKwlmYWlscyksIGRvbid0IGludmVydCB0aGUganVtcC4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBEb24ndCBhY2NlcHQgYSBoYXJkIHJlZ2lzdGVyCisJYXMgYSB0YXJnZXQgaWYgd2UgYXJlIGdvaW5nIHRvIHN0b3JlIGludG8gaXQgYmVmb3JlIHRlc3RpbmcgdGhlCisJY29uZGl0aW9uIGJlY2F1c2UgdGhhdCBldmFsdWF0aW9uIG1heSBpbnZvbHZlIGEgc3Vicm91dGluZSBjYWxsCisJd2hpY2ggbWlnaHQgY2xvYmJlciBpdC4KKworCSoganVtcC5jIChkZWxldGVfanVtcCk6IHJlZ19zZXRfcCBzaG91bGQgYmUgY2FsbGVkIHdpdGggUEFUVEVSTiAoaW5zbikuCisJKHRocmVhZF9qdW1wcyk6IEFkZCBvbWl0dGVkIGxhc3QgYXJndW1lbnQgdG8gcnR4X2VxdWFsX2Zvcl90aHJlYWRfcC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IE9ubHkgc2tpcCBpbnNucyB3aGljaCBzZXQgb25lIGhhcmQgcmVnaXN0ZXIKKwl0byBhbm90aGVyIGlmIHRoZSBjb3N0IG9mIGRvaW5nIHNvIGlzIGxvdzsgIGlmIG5vdCwgdGhlcmUgbWF5IG5vdCBiZQorCWEgc2luZ2xlIGluc24gdG8gZG8gdGhlIGNvcHkgYW5kIHdlIG1heSBuZWVkIGEgcmVsb2FkIHJlZ2lzdGVyLgorCitXZWQgTm92CSA3IDAwOjAxOjE4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKGNvbXBvbmVudF9kZWNsX2xpc3QpOiBBbGxvdyBtaXNzaW5nIHNlbWkgYXQgZW5kLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBXaGVuIG1vdmluZyBhbmQgZGVsZXRpbmcgbGlicmFyeSBjYWxsLAorCWRvbid0IGJlIGNvbmZ1c2VkIGlmIGFuIGluc24gaXMgZGVsZXRlZC4KKworVHVlIE5vdgkgNiAyMDo0OTo1NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogdG0tbTY4ay5oIChUUkFOU0ZFUl9UT19UUkFNUE9MSU5FKTogRml4IGFzbSBzeW50YXguCisgCisJKiB4bS1pcmlzLmggKGFsbG9jYSk6IERlbGV0ZSByZWR1bmRhbnQgZGVmaW5pdGlvbi4KKwkqIHRtLWlyaXMuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgdmFyaWFudCBzeW1ib2xzIHN0YXJ0aW5nIHdpdGggXy4KKwlEZWZpbmUgX19FWFRFTlNJT05TX18uCisKKwkqIGNvbmZpZy5nY2MgKGVkaXRpbmcgLmdkYmluaXQpOiBTZWFyY2ggY3VycmVudCBkaXIsIG5vdCBqdXN0IHNyY2Rpci4KKworVHVlIE5vdgkgNiAyMjoyNDowOSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IEdlbmVyYXRlIGVmZmljaWVudCBjb2RlIGZvcgorCUEgPyBBIDogRk9PIGFuZCBzaW1pbGFyLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogSWYgd2UgaGF2ZSwgZS5nLiwgKGx0IENPTlNUIEZPTyksIGNvbnZlcnQgaXQKKwl0byAoZ3QgRk9PIENPTlNUKS4KKworCSogcmVjb2cuYyAoY29tcGFyaXNvbl9vcGVyYW5kKTogVXNlIGNvbXBhcmlzb25fY29kZV9wLgorCisJKiBnZW5jb25maWcuYyAod2Fsa19pbnNuX3BhcnQpOgkgQWRkIG9wZXJhbmQgdG8gaW5kaWNhdGUgaWYgUEFSVCBpcworCWdvaW5nIHRvIGJlIHVzZWQgdG8gcmVjb2duaXplIGFuIGluc24gKGFzIG9wcG9zZWQgdG8gZW1pdHRpbmcgcnRsKS4KKwlJZiBub3QsIGlnbm9yZSBDQzAuCisJKGdlbl9pbnNuLCBnZW5fZXhwYW5kLCBnZW5fc3BsaXQsIGdlbl9wZWVwaG9sZSk6IEFkZCBuZXcgb3BlcmFuZCB0bworCXdhbGtfaW5zbl9wYXJ0IGNhbGxzLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBDb3JyZWN0bHkgY29tcHV0ZSBydHhfY29kZSBvZgorCWNvbXBhcmlzb247IGlmIHdlIGZpbmQgYW5vdGhlciBjb21wYXJpc29uIGNvZGUgaW5zaWRlLCB1c2UgaXQuCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBMaWtld2lzZS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEZvciBmZnMsIGRvbid0IHBhc3MgVk9JRG1vZGUgdG8gZXhwYW5kX3Vub3AuCisKK01vbiBOb3YJIDUgMTI6NTU6MDAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKG91dHB1dF9hZGRyX2NvbnN0KTogRG9uJ3QgcHJpbnQgcGFyZW5zIGZvciBDT05TVC4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBIYW5kbGUgY2FzZSB3aGVyZSBmaW5kX2VxdWl2X3JlZworCXJldHVybnMgYSBTVUJSRUcuICBBbHNvLCB1c2UgdmFyaWFibGUgYHJlZ25vJyB1bmlmb3JtbHkgdGhyb3VnaG91dAorCWNvZGUgdGhhdCBmaW5kcyBlcXVpdmFsZW50IHJlZ2lzdGVyLgorCisJKiBnbnVsaWIyLmMgKF9fZmxvYXRkaXNmLCBfX2ZpeHVuc3Nmc2kpOiBOZXcgZnVuY3Rpb25zLgorCShfX2ZpeHNmZGksIF9fZml4dW5zc2ZkaSk6IE5ldyBmdW5jdGlvbnMuCisJKiBnbnVsaWIuYyAoX19mbG9hdHNpc2YsIF9fZml4c2ZzaSk6IE5ldyBmdW5jdGlvbnMuCisKK01vbiBOb3YJIDUgMDY6Mzc6MDIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIEVRX0VYUFIgYW5kIE5FX0VYUFIpOiBDb252ZXJ0LCBlLmcuLAorCShBICYgMikgPT0gMiB0byAoQSAmIDIpICE9IDAuICBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIHRoZXNlCisJcGF0dGVybnMgaW4gTUQgZmlsZXMuCisJRGV0ZWN0IG1vcmUgZ2VuZXJhbCBjYXNlcyBvZiBjb21wYXJpbmcgc29tZXRoaW5nIHdpdGggaXRzZWxmLgorCitNb24gTm92CSA1IDAwOjA5OjU1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9jbGVhbnVwcyk6IERvbid0IHJ1biBhbnkgY2xlYW51cCB0d2ljZS4KKworU3VuIE5vdgkgNCAyMzo0OToyMiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVzZSBlbWl0X25vX2NvbmZsaWN0X2Jsb2NrIHdoZW4gY29udmVydGluZworCVNJbW9kZSB0byBESW1vZGUuCisJSWYgaGF2ZSBzbHQgaW5zbiwgZW1pdCBhIGNvbXBhcmUgaW5zbjsgd2UgbXVzdCBub3QgaGF2ZSBhIHVzZSBvZgorCWNjMCB3aXRob3V0IGEgc2V0OyBub3JtYWxseSwgdGhlIGNvbXBhcmUgd2lsbCBiZSBkZWxldGVkIGFzCisJcmVkdW5kYW50IGluIGZpbmFsLmMuCisJVXNlIHNoaWZ0IHJhdGhlciB0aGFuIGNsZWFyL3Rlc3QvbmVnYXRlIGZvciBoaWdoLW9yZGVyIHdvcmQgd2hlbgorCWRvaW5nIHNpZ24gZXh0ZW5zaW9uLgorCisJKiBvcHRhYnMuYyAoZW1pdF9ub19jb25mbGljdF9ibG9jayk6IERvbid0IHB1dCBSRUdfTk9fQ09ORkxJQ1QKKwlub3RlcyBvbiB0aGUgdHJhaWxpbmcgY29weSBpbnNuOyBub2JvZHkgbG9va3MgdGhlcmUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBjb21iaW5lIGEgcmVnLXJlZyBjb3B5IGlmIHRoZQorCWRlc3RpbmF0aW9uIGlzIHVzZWQgaW4gYSBSRUdfTk9fQ09ORkxJQ1Qgbm90ZS4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogVXNlIHRydWVfcmVnbnVtIHRvIHN1cHBvcnQgU1VCUkVHcworCWFzIHdlbGwgYXMgUkVHcy4KKworU3VuIE5vdgkgNCAxMjo1NTowMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAoZXh0ZW5kKik6IFRha2Ugb3V0IGxhc3QgY2hhbmdlLgorCVVuaXggYXNzZW1ibGVyIHJlamVjdHMgbW92c3guLi4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFNwZWNpYWwgY2FzZSBmb3IgaWdub3JlZCB2b2xhdGlsZQorCWZhaWxlZCB0byByZXR1cm4uCisKK1NhdCBOb3YJIDMgMTQ6NDI6MzQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChkb19qdW1wLCBjYXNlIFBMVVNfRVhQUik6IFR1cm4gb2ZmIHRoaXMgY2FzZTsgaXQgd2FzIGEKKwlwZXNzaW1pemF0aW9uLgorCitGcmkgTm92CSAyIDAxOjUxOjMxIDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogRG9uJ3QgZW1pdCBhIFVTRSBpZiBWQUwgaXMgYQorCXBzZXVkby1yZWdpc3Rlci4KKworRnJpIE5vdgkgMiAxNTozMDo0OCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ251bGliMi5jIChfX2J1aWx0aW5fc2F2ZXJlZ3MpOiBBZGQgdmVyc2lvbiBmb3IgaTg2MC4KKworCSogb3V0LWk4NjAuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBSZWFycmFuZ2UgdGhlIGNvcHkgbG9vcC4KKwlOb3cgdXNlcyB0d28gbGFiZWxzIGFuZCBhIG1vcmUgY29tcGxpY2F0ZWQgbGVhZC1pbi4KKworRnJpIE5vdgkgMiAxNDoxNzoyNCAxOTkwICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoZXh0ZW5kc2lkaTIpOiAgTmV3IGRlZmluZV9leHBhbmQuCisKKwkqIG91dC1tODhrLmM6ICBDb252ZXJ0ZWQgdmFyaW91cyBjb25zdHJ1Y3RzIHRvIHVzZSBjb252ZW50aW5hbAorCWZvcm1hdHRpbmcuCisKKwkqIG04OGsubWQgKGV4dCBwYXR0ZXJuKTogTXVzdCBoYXZlIHBhcmVucy4KKwkqIG04OGsubWQgKG11bC9kaXYgcGF0dGVybnMpOiBBZGRlZCBiZXR0ZXIgZG9jdW1lbnRhdGlvbi4gIFJlbW92ZWQKKwl1bmZvdW5kZWQgcmVzdHJpY3Rpb24gb24gaW1tZWRpYXRlIHZhbHVlcy4KKwkqIG04OGsubWQgKGluY3JlbWVudCBhbmQgdGVzdCBwZWVwaG9sZSk6IERvbid0IHVzZSAlTC4KKworCSogb3V0LW04OGsuYyAobTg4a19sYXlvdXRfZnJhbWUpOiBNdXN0IGFsbG9jYXRlIHNwYWNlIGZvciB0aGUKKwlhZGRyZXNzaW5nIGJhc2UgcmVnaXN0ZXIgKC1tcGljKS4KKwkqIG91dC1tODhrLmMgKG91dHB1dF90ZGVzYyk6IFVzZSB2ZXJzaW9uIDIgdGRlc2Mgd2l0aCBQSUMuCisKKwkqIHRtLW04OGsuaCwgdG0tbTg4a2RndXguaCw6IERvbid0IHByZWRlZmluZSBtZW1jcHkgYW5kIG90aGVycy4KKwkqIHRtLW04OGsuaDogRml4ZXMgZm9yIGR3YXJmLgorCSogdG0tbTg4a3N2cjQuaDogRHdhcmYgY2hhbmdlcy4KKwkqIHhtLW04OGsuaCB4bS1tODhrZGd1eC5oIHhtLXY4OHIzMi5oOiBVcGRhdGUgY29tbWVudHMuCisKK0ZyaSBOb3YJIDIgMTI6MzA6MTUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChjb21wYXJpc29uX2RvbWluYXRlc19wKTogUmV0dXJuIDEgaWYgY29kZXMgYXJlIHRoZSBzYW1lLgorCSh0aHJlYWRfanVtcHMpOiBVc2UgZ2V0X2xhYmVsX2FmdGVyLgorCisJKiBhMjlrLm1kIChtb3ZkaSk6IEhhbmRsZSBDT05TVF9JTlQgYXMgd2VsbCBhcyBDT05TVF9ET1VCTEUuCisJKGNvbXBhcmlzb25zKTogRml4IHR5cG8gaW4gZGVmaW5lX3NwbGl0IGZvciBmbG9hdGluZy1wb2ludCBORS4KKworCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IERvbid0IG1hcmsgYXMgYW5udWxsZWQgaWYgbm8KKwlkZWxheSBsaXN0LgorCisJKiBsb29wLmM6IEFsbG93IHVzZSBvZiBhbnkgcmVnaXN0ZXIgdG8gc3RvcmUgY29tcGFyaXNvbiByZXN1bHRzLgorCShsb29wX3NraXBfb3Zlcik6IERvbid0IHRyZWF0IGNvbXBhcmlzb24gc3BlY2lhbGx5OyBjb3B5IGFsbCBpbnNucworCXByZWNlZWRpbmcgdGhlIGp1bXAuCisJKGNoZWNrX2Zvcl9lbmR0ZXN0LCBvdGhlcl9yZWdfdXNlX3ApOiBEZWxldGVkLgorCShjYW5fZWxpbWluYXRlX2Jpdl9wLCBlbGltaW5hdGVfYml2KTogRGVsZXRlZDsgY29kZSBtZXJnZWQgYW5kCisJcGxhY2VkIGludG8gbmV3IG1heWJlX2VsaW1pbmF0ZV9wXzEuCisJKG1heV9lbGltaW5hdGVfYml2LCBtYXlfZWxpbWluYXRlX2Jpdl8xKTogTmV3IGZ1bmN0aW9uczsgcmVjdXJzaXZlbHkKKwlsb29rIGF0IGFsbCBydHggdG8gc2VlIGlmIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgYSBiaXYgY2FuIGJlCisJZWxpbWluYXRlZC4KKwkoY2hlY2tfZWxpbWluYXRlX2Jpdik6IERlbGV0ZWQ7IGNhbGxlcnMgY2hhbmdlZCB0byBjYWxsCisJbWF5X2VsaW1pbmF0ZV9iaXYuCisJKGdldF9jb25kaXRpb24pOiBSZXdvcmsgdG8gbG9vayBpbnRvIHByZXZpb3VzIGluc25zIHRvIGZpbmQgaW5zbnMKKwl0aGF0IHNldCB0aGUgZmlyc3Qgb3BlcmFuZCBvZiBjb21wYXJpc29uIGluc25zLgorCitUaHUgTm92CSAxIDIyOjA3OjQyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBDT01QQVJFKTogT25seSBjb252ZXJ0IGNvbXBhcmUgdG8gdGVzdCBpZgorCUhBVkVfY2MwIGlzIGRlZmluZWQuCisJKiBjb21iaW5lLmMgKHN1YnN0KTogQ29weSBDT01QQVJFIGNhc2UgZnJvbSBmb2xkX3J0eC4gIAorCVNpbXBsaWZ5IHRoaW5ncyBsaWtlIChuZSAoZXEgRk9PIEJBUikgKGNvbnN0X2ludCAwKSkuCisKK1RodSBOb3YJIDEgMTg6MDY6NTYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG1hdGgtNjg4ODEuaCAoSFVHRV9WQUwpOiBBbHRlcm5hdGUgZGVmaW5pdGlvbiBmb3IgU3Vucy4KKworCSogY29uZmlnLmdjYyAoc3VuMywgZXRjLik6IEFzc3VtZSBvczQgYXMgZGVmYXVsdCBmb3IgU3VuIDMgYW5kIFN1biA0LgorCisJKiB0bS1pMzg2di5oIChTVEFSVEZJTEVfU1BFQywgTElCX1NQRUMpOiBIYW5kbGUgLXBvc2l4LgorCShDUFBfU1BFQyk6IE5ldyBtYWNyby4KKwkoTElCX1NQRUMpOiBIYW5kbGUgLXNobGliLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYWtlIGxhc3QgYXJnIHRvIG1lbWNweSBhbmQgbWVtY21wCisJYW4gdW5zaWduZWQgbG9uZywgdG8gYmUgbGlrZSBzaXplX3QuCisKKwkqIE1ha2VmaWxlLmluIChoYXJkLXBhcmFtcyk6IERlcGVuZCBvbiBnbnVsaWIyLCBub3QgZ251bGliLgorCitXZWQgT2N0IDMxIDIyOjEyOjMzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjb25maWcuZ2NjICh1bHRyaXgpOglOZXcgYWx0ZXJuYXRpdmUuCisKKwkqIGkzODYubWQgKGV4dGVuZCopOiBDaGFuZ2Ugb3Bjb2RlIHRvIG1vdnN4LiAgV2FzIG1vdnMuCisKK1dlZCBPY3QgMzEgMDk6NDE6MjcgMTk5MCAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQ6IERlbGV0ZWQgYW4gb2xkIHBhdHRlcm4gZm9yIHN1YnRyYWN0aW5nIDAuCisJKiBtODhrLm1kOiBEZWxldGVkIHBhdHRlcm5zIGZvciBhbGlnbmVkIGJpdC1maWVsZCBpbnNucy4KKwkqIG04OGsubWQ6IENoYW5nZWQgZGVmaW5lX2V4cGFuZCB0byBkZWZpbmVfaW5zbiBmb3IgbXVsc2kzIGFuZAorCXVtdWxzaTMuCisJKiBtODhrLm1kOiBDb252ZXJ0ZWQgdmFyaW91cyBjb25zdHJ1Y3RzIHRvIHVzZSBjb252ZW50aW9uYWwKKwlmb3JtYXR0aW5nLgorCSogbTg4ay5tZCAobWFrIHBhdHRlcm5zKTogIEZpeGVkIHRyYW5zY3JpcHRpb24gZXJyb3JzLgorCitXZWQgT2N0IDMxIDAwOjA1OjU0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBQcmVkZWZpbmUgdGhlIG9yZGluYXJ5IG5hbWVzCisJb2YgYWxsb2NhLCBhYnMsIG1lbWNweSwgZXRjLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQWxsb3cgcmVkZWZpbmluZyBidWlsdC1pbiBhcyBzdGF0aWMsCisJYnV0IG9wdGlvbmFsbHkgd2Fybi4KKworVHVlIE9jdCAzMCAxNDozOToxNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBERUZBVUxUX01BSU5fUkVUVVJOIGluIGBtYWluJy4KKwkqIHRtLXZtcy5oIChERUZBVUxUX01BSU5fUkVUVVJOKTogRGVmaW5lIHRoaXMuCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBCYXNlIGlzIG5vdCA4IGZvciBqdXN0IGAwJy4KKworCSogY2NjcC5jIChkb19kZWZpbmUpOiBJbnZlcnQgdGVzdCBvZiBjb21wYXJlX2RlZnMuCisKKwkqIGNjY3AuYyAobWFrZV9kZWZpbml0aW9uKTogQ29udmVydCBuZXdsaW5lIHRvIG5ld2xpbmUtbmV3bGluZS4KKworCSogTWFrZWZpbGUuaW4gKGhhcmQtcGFyYW1zKTogRGVwZW5kIG9uIGdudWxpYi4KKworCSogbTg4ay5tZCAoZGl2c2kzKTogRGVsZXRlIGRlY2xhcmF0aW9ucyBvZiBnZW5fLi4uIGZ1bmN0aW9ucy4KKworVHVlIE9jdCAzMCAxNDoyNjoyMCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYzogUmV3b3JrIGhhbmRsaW5nIG9mIGNvbXBhcmlzb25zIHRvIGdlbmVyYWxpemUgYmV0dGVyIHRvCisJbWFjaGluZXMgdGhhdCB1c2UgcmVnaXN0ZXJzIHRvIGhvbGQgY29uZGl0aW9uIGNvZGUgaW5mb3JtYXRpb24uCisJKHByZXZfaW5zbl9jYzAqKTogSnVzdCBzdG9yZSBsYXN0IHJ0eCBhc3NpZ25lZCB0byBjYzAgaW4gcHJldl9pbnNuX2NjMC4KKwkoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBOZXcgZnVuY3Rpb24uCisJKGZvbGRfcnR4KTogRm9sZGVkIHZhbHVlIG9mIGNjMCBpcyB0aGUgdmFsdWUgcHJldmlvdXNseSBzdG9yZWQgaW50byBpdC4KKwlSZXdvcmsgaGFuZGxpbmcgb2YgY29tcGFyaXNvbnM6CSB1c2UgZmluZF9jb21wYXJpc29uX2FyZ3MgdG8gc2VlIHdoYXQKKwlpcyBiZWluZyBjb21wYXJlZC4gIElmIHRoZXkgYXJlIGNvbnN0YW50cywgY29tcHV0ZSB0aGUgcmVzdWx0IG9mIHRoZQorCWNvbXBhcmlzb24uICBJZiBub3QsIHNlZSBpZiB0aGUgdHdvIG9wZXJhbmRzIGFyZSBlcXVpdmFsZW50IChvbmx5IGZvcgorCW5vbiBGUCBvciBub24tSUVFRSBGUCkuCSBUaGVuIHNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgc2VlbiBhIGNvbXBhcmlzb24KKwlpbnZvbHZpbmcgdGhlc2Ugb3BlcmFuZHMgdGhhdCBsZXRzIHVzIGdpdmUgYSB2YWx1ZSB0byB0aGlzIGNvbXBhcmlzb24uCisJVHJ1ZSBjb21wYXJpc29ucyByZXR1cm4gU1RPUkVfRkxBR19WQUxVRSwgbm90IDEuCisJKGZvbGRfY2MwKTogRGVsZXRlZC4KKwkocHJlZGVjaWRlX2xvb3BfZW50cnkpOiBDYWxsIGNzZV9pbnNuIG9uIGEgY29weSBvZiBlYWNoIGluc24gYXQgdGhlCisJbG9vcCB0ZXN0IHRvIHByb3BhZ2F0ZSB0aGUgdmFsdWVzIG9mIGl0ZW1zIGF0IHRoZSBzdGFydCBvZiB0aGUgbG9vcC4KKwlUaGVuIHVzZSBmb2xkX3J0eCB0byBzZWUgaWYgd2Uga25vdyB0aGUgcmVzdWx0IG9mIHRoZSBqdW1wLgorCShyZWNvcmRfanVtcF9lcXVpdik6IFVzZSBuZXcgZnVuY3Rpb24gZmluZF9jb21wYXJpc29uX2FyZ3MuCisJKGNzZV9pbnNuKTogSnVzdCByZWNvcmQgdmFsdWUgb2YgQ0MwIGlmIHNldDsgZG9uJ3QgY2FsbCBmb2xkX2NjMC4KKwlEb24ndCBtb2RpZnkgUFJFVl9JTlNOIChpbnNuKSBpZiBJTlNOIGlzIGEgY29weS4KKwkoY3NlX21haW4pOiBJbml0aWFsaXplIGNvbnN0X3RydWVfcnR4IHRvIHJ0eCBmb3IgU1RPUkVfRkxBR19WQUxVRS4KKworCSoganVtcC5jIChjb21wYXJpc29uX2NvZGVfcCwgY29tcGFyaXNvbl9kb21pbmF0ZXNfcCk6IE5ldyBmdW5jdGlvbnMuCisJKHRocmVhZF9qdW1wcyk6IFVzZSBjb21wYXJpc29uX2RvbWluYXRlc19wLgorCVJlbW92ZSBkZWJ1Z2dpbmcgY29kZS4KKwkqIHJlb3JnLmMgKGNvbmRpdGlvbl9kb21pbmF0ZXNfcCk6IFVzZSBuZXcgZnVuY3Rpb24KKwljb21wYXJpc29uX2RvbWluYXRlc19wLgorCisJKiBlbWl0LXJ0bC5jIChuZXh0X2NjMF91c2VyKTogRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGJlaW5nIGNhbGwgd2l0aCBhCisJY29weSBvZiBhbiBpbnNuOyB1c2UgSU5TTl9VSUQgdG8gY2hlY2sgZm9yIGFuIGluc24gaW4gYSBkZWxheSBzbG90LgorCisJKiBydGwuYyAocmVnX25vdGVfbmFtZSk6IEFkZCBuYW1lIGZvciBuZXcgUkVHX0xBQkVMIG5vdGUuCisKKwkqIGVtaXQtcnRsLmMgKG1ha2VfaW5zbl9yYXcpOiBObyBsb25nZXIgaGF2ZSBKVU1QX0xBQkVMIGZvciBJTlNOLgorCitUdWUgT2N0IDMwIDA5OjI2OjE1IDE5OTAgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBVcGRhdGUgd2hhdCBzdHJpbmdzIGluIGZpbGVzIGVkaXRlZCBzbyBmYXIuCisJKiB0bS1tODhrLmgsIHRtLW04OGtkZ3V4LmgsIHRtLW04OGtzdjRyLmg6IEludHJvZHVjZSBWRVJTSU9OX1NUUklORworCWFuZCBWRVJTSU9OX0lORk8gdG8gbW9yZSBhcHByb3ByaWF0ZWx5IGlkZW50aWZ5IHRoZSBjb21waWxlci4KKworCSogdG0tbTg4ay5oIChBU01fT1VUUFVUX09QQ09ERSk6IFN0b3AgcHJvY2Vzc2luZyB0aGUgb3Bjb2RlIGlmIGAlJworCWlzIGVuY291bnRlcmVkLgorCSogb3V0LW04OGsuYyAocHJpbnRfb3BlcmFuZCk6IEFkZCBhIHRhYiB0byAlTCBvdXRwdXQuICBEZWxldGUKKwl1bnVzZWQgY2FzZXMuCisKKwkqIG04OGsubWQ6ICBSZXdvcmsgdGhlIG1vdnN0cnNpIHBhdHRlcm4gYW5kIHByb3ZpZGUgY2FsbF9ibG9ja19tb3ZlCisJYW5kIGNhbGxfYmxvY2tfbW92ZV9sb29wIHRvIHN1cHBvcnQgZXhwYW5kX2Jsb2NrX21vdmUuCisJKiBvdXQtbTg4ay5jOiAgUmV3b3JrIHRoZSBibG9jayBtb3ZlIGZ1bmN0aW9ucy4KKwkqIG1ha2UtbTg4aywgbWFrZS1tODhrZGd1eDogIEVsaW1pbmF0ZSBtb3ZzdHIuaC4KKworCSogbTg4ay5tZCwgb3V0LW04OGsuYzogRWxpbWluYXRlIGFzc2VtYmxlciBjb21tZW50cy4KKworCSogbTg4ay5tZCAoYXNobHNpMyBhc2hyc2kzIGxzaGxzaTMgbHNocnNpMyk6IEVsaW1pbmF0ZSB3YXJuaW5ncworCWFib3V0IG91dCBvZiByYW5nZSBzaGlmdHMuCisKKwkqIHRtLW04OGsuaCwgb3V0LW04OGsuYzogUmVuYW1lIENPTkRJVElPTl9DT0RFX1JFR05VTSBDQzBfUkVHTlVNLgorCitNb24gT2N0IDI5IDE4OjA2OjU0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChmaW5hbF9lbmRfZnVuY3Rpb24pOiBIYW5kbGUgZHdhcmYgb3V0cHV0LgorCShmaW5hbF9zY2FuX2luc24pOiBMaWtld2lzZS4KKwkob3V0cHV0X3NvdXJjZV9saW5lKTogTGlrZXdpc2UsIHVzaW5nIEFTTV9PVVRQVVRfRFdBUkZfTElORS4KKwkqIHRvcGxldi5jIChyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiBMaWtld2lzZS4KKwkocmVzdF9vZl9jb21waWxhdGlvbiwgbWFpbik6IExpa2V3aXNlLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogTGlrZXdpc2UuCisJKiBmbGFncy5oIChlbnVtIGRlYnVnZ2VyKTogRGVmaW5lIERXQVJGX0RFQlVHLgorCisJKiBjY2NwLmMgKGRvX2RlZmluZSk6IFJld3JpdGUgY3JpdGVyaW9uIGZvciB3YXJuaW5nLgorCURvbid0IHdhcm4gaWYgLUQgcmVkZWZpbmluZyBzeW1ib2wgd2l0aCBjb25zdGFudCBudW1lcmljIHZhbHVlLgorCisJKiB0b3BsZXYuYyAob3V0cHV0X2ZpbGVfZGlyZWN0aXZlKTogTmV3IGZ1bmN0aW9uLgorCSogc2Rib3V0LmMgKHNkYm91dF9maWxlbmFtZSk6IERlbGV0ZWQuCisJKiB0bS0zYjEuaCwgdG0tYXR0Mzg2LmgsIHRtLWVuY29yZS5oLCB0bS1tODhrLmgsCisJdG0tbW90MzMwMC5oLCB0bS10YWhvZS5oLCB0bS12YXh2LmggKEFTTV9GSUxFX1NUQVJUKTogVXNlIHRoYXQuCisKKwkqIGMtZGVjbC5jIChuYW1lZF9sYWJlbHMpOiBObyBsb25nZXIgc3RhdGljLgorCShwdXNobGV2ZWwpOiBDbGVhciBuYW1lZF9sYWJlbHMuCisJKHBvcGxldmVsKTogRG9uJ3QgY2xlYXIgaXQgaGVyZS4KKworTW9uIE9jdCAyOSAxMzozMjo1NyAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluOiBVcGRhdGUgZGVwZW5kZW5jaWVzIGZvciB2YXJpb3VzIGZpbGVzLCBtb3N0bHkgY3BsdXMtKgorCWZpbGVzLgorCisJKiBydGwuZGVmOiBSZW1vdmUgU2VwIDI2IHRoYXQgYWRkZWQgSlVNUF9MQUJFTHMgdG8gSU5TTiBhbmQKKwlDQUxMX0lOU04uCisJKiBydGwuaDogQWRkIFJFR19MQUJFTCByZWdpc3RlciBub3RlLiAgRm9yIElOU04gYW5kIENBTExfSU5TTiwgdGhlCisJcHJlc2VuY2Ugb2YgdGhpcyByZWdpc3RlciBub3RlIGhhcyB0aGUgc2FtZSBtZWFuaW5nIHRoYXQgYSBub24tTlVMTAorCUpVTVBfTEFCRUwgd291bGQgaGF2ZSB3aXRoIHRoZSBTZXAgMjYgY2hhbmdlLgorCSoganVtcC5jIChqdW1wX29wdGltaXplKTogUmV2ZXJ0IHRvIGNsZWFyaW5nIEpVTVBfTEFCRUwgZmllbGQgb2YKKwlKVU1QX0lOU05zIG9ubHkuCisJKG1hcmtfanVtcF9sYWJlbCk6IElmIElOU04gaXMgYW4gSU5TTiBvciBhIENBTExfSU5TTiwgYWRkIGEKKwlSRUdfTEFCRUwgbm90ZSBpZiBhIExBQkVMIGFwcGVhcnMgKGFuZCBubyBzdWNoIG5vdGUgYWxyZWFkeSBleGlzdHMpLgorCT8/PyBPbmNlIHJlY29yZGVkLCB0aGlzIGluZm9ybWF0aW9uIGFwcGVhcnMgbmV2ZXIgdG8gYmUgdXNlZC4KKworCSoganVtcC5jIChkZWxldGVfanVtcCk6IFRoZSBkZWxldGlvbiBvZiBJTlNOIG11c3QgdGFrZSBwbGFjZSB3aGVuCisJSU5TTiBpcyBhIHNpbXBsZSBqdW1wLglBbHNvLCBkb24ndCB0cnkgdG8gb3B0aW1pemUgaWYgd2UgY29tZQorCWFjcm9zcyBhbiBpbnNuIHdpdGggdGhlIHJlb3JnLWdlbmVyYXRlZCBwYXR0ZXJuIChVU0UgKElOU04gLi4uKSkuCisKKwkqIGNwbHVzLWxleC5jLCBjcGx1cy1kYnhvdXQuYzogUmVtb3ZlIHZlc3RpZ2lhbCBzdXBwb3J0IGZvciBkdW1waW5nCisJYW5kIHVuZHVtcGluZyB0aGUgY29tcGlsZXIuCisKKwkqIE1lcmdlIGNwbHVzIGRpZmZzIGZyb20gS2VubmVyLgorCSogY3BsdXMtY3Z0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IEZvbGQgdGhlIENPTkRfRVhQUiB3ZSBjb25zdHJ1Y3QuCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERpdHRvIGluIHRocmVlIHBsYWNlcy4KKwkqIGNwbHVzLWxleC5jICh5eWxleCxkb19wZW5kaW5nX2lubGluZXMpOiBBZGQgY29uZGl0aW9uYWxzIGZvcgorCV9JQk1SMi4JIFRoaXMgaGFpciB3aWxsIGRpc2FwcGVhciB3aGVuIHBjY2NwIHN1cHBvcnQgaXMgbWVyZ2VkLCBidXQKKwluZWVkZWQgZm9yIG5vdy4KKwkqIGNwbHVzLXRyZWUuaDogQ29uZGl0aW9uYWxpemUgdXNlIG9mIG5vbi1pbnQgYml0ZmllbGQgdHlwZXMgb24KKwlPTkxZX0lOVF9GSUVMRFMuICBBbHNvLCByZW1vdmUgZHVwbGljYXRpb24gZGVjbGFyYXRpb25zIG9mCisJZ2V0X3RlbXBfbmFtZSwgZ2V0X3RlbXBfYWdnciwgYW5kIGdldF90ZW1wX3JlZ3ZhcjsgYWRkIGRlY2xhcmF0aW9uCisJb2YgYnVpbGRfZGVjbF9saXN0LgorCitNb24gT2N0IDI5IDExOjQ1OjAzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogRml4IG1pc3Npbmcgc2VtaSBpbiBydXNlcnMuaC4KKworTW9uIE9jdCAyOSAwNzowNzo0NyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogV2hlbiBjb252ZXJ0aW5nICIuLi4qcC4uLjsgcSA9IHAgKyBzaXplIgorCXRvICJxID0gcCwgLi4uKnEuLi4sIHEgPSBxICsgc2l6ZSIsIHNob3cgdGhhdCBRIGlzIG5lZWRlZCBhZnRlciBJTlNOLgorCisJKiByb21wLm1kIChuZWdkaSk6IERpcmVjdGx5IGdlbmVyYXRlIGFzc2VtYmx5IGNvZGUgcmF0aGVyIHRoYW4KKwljb252ZXJ0aW5nIHRoaXMgaW50byBhIE1JTlVTLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgQ09ORF9FWFBSKTogQWRkIG1pc3NpbmcgY29uZGl0aW9uIGluIHRlc3QKKwlmb3IgKEEgPyAwIDogQSkuCisKK1N1biBPY3QgMjggMTU6MDE6MTkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBBbiBpbmRpcmVjdCBqdW1wIGNhbiBnbworCXRvIGFueSBsYWJlbCB3aG9zZSBhZGRyZXNzIGlzIHVzZWQgYXMgZGF0YS4KKworCSogbTY4ay5tZCAoemVyby1leHRlbmQgUUkpOiBVc2UgZ2VuX3J0eCwgbm90IGNoYW5nZV9hZGRyZXNzLgorCisJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogTGlzdCB2YS0qLmggZXhwbGljaXRseS4KKwkodG9wbGV2Lm8pOiBEZXBlbmQgb24gUlRMX0guCisJKHN0YW1wLSopOiBEZXBlbmQgb24gbW92ZS1pZi1jaGFuZ2UuCisJKGluc3RhbGwtaGVhZGVycyk6IERlcGVuZCBvbiB2YXJpb3VzIGhlYWRlciBmaWxlcy4KKwkoaW5zdGFsbC1tYW4pOiBEZXBlbmQgb24gZ2NjLjEuCisJKGdjYy5vKTogRGVwZW5kIG9uIGd2YXJhcmdzLmggYW5kIG9ic3RhY2suaC4KKworCSogTWFrZWZpbGUuaW46IE1ha2Ugc3VyZSBldmVyeSBgaWYnIGhhcyBhbiBgZWxzZScuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBQcmV2ZW50IHdhcm5pbmcgZm9yCisJdmFyaWFibGUgc2hpZnQgY291bnQuCisKKwkqIGk4NjAubWQgKG1vdnNmKTogSGFuZGxlIG1vdmluZyBmcm9tIENPTlNUX0RPVUJMRSB0byByZWcgb3IgbWVtLgorCitTdW4gT2N0IDI4IDA5OjM5OjE0IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSoganVtcC5jIChkZWxldGVfanVtcCk6IFRoZSBkZWxldGlvbiBvZiBJTlNOIG11c3QgdGFrZSBwbGFjZSB3aGVuCisJSU5TTiBpcyBhIHNpbXBsZSBqdW1wLglBbHNvLCBkb24ndCB0cnkgdG8gb3B0aW1pemUgaWYgd2UgY29tZQorCWFjcm9zcyBhbiBpbnNuIHdpdGggdGhlIHJlb3JnLWdlbmVyYXRlZCBwYXR0ZXJuIChVU0UgKElOU04gLi4uKSkuCisKKwkqIHNwYXJjLm1kLCB0bS1zcGFyYy5oLCBvdXQtc3BhcmMuYzogU2lnbmlmaWNhbnRseSByZXdyaXR0ZW4gdG8gdGFrZQorCWFkdmFudGFnZSBvZiBuZXcgMi4wIG9wdGltaXphdGlvbiBjYXBhYmlsaXRpZXMuCisJKiBvbGQtc3BhcmMubWQsIHRtLW9sZC1zcGFyYy5oLCBvdXQtb2xkLXNwYXJjLmM6IFRoZXNlIGFyZSBjb3BpZXMgb2YKKwl0aGUgYWJvdmUgZmlsZXMgYmVmb3JlIHRoZSByZXdyaXRlLiAgVGhleSBtYXkgYmUgaW50ZXJlc3RpbmcgZm9yCisJbWVhc3VyaW5nIHBlcmZvcm1hbmNlIG9mIG9sZCB2cy4gbmV3IG1hY2hpbmUgZGVzY3JpcHRpb24gaWRpb21zLgorCitTdW4gT2N0IDI4IDAwOjIyOjQwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogRG9uJ3QgdGhpbmsgdGhhdCBhIGJyYW5jaCB0byBhbiBlbmQtdGVzdCBvZgorCWEgY29udGFpbmluZyBsb29rIGlzIGFjdHVhbGx5IHRoZSBicmFuY2ggdG8gdGhlIGVuZC10ZXN0IG9mIHRoZQorCW91dGVyIGxvb3AuCisKKwkqIHJlbG9hZC5jIChpbmRpcmVjdF9vayk6IERlbGV0ZWQuCisJKGZpbmRfcmVsb2Fkcyk6IEFjY2VwdCBuZXcgYXJnIElORF9MRVZFTFMgaW5zdGVhZCBvZiBvbGQgSU5EX09LOworCXBhc3MgdGhpcyB0byBmaW5kX3JlbG9hZHNfYWRkcmVzcyBhbmQgZmluZF9yZWxvYWRzX3RvcGxldi4KKwkoZmluZF9yZWxvYWRzX3RvcGxldik6IEFjY2VwdCBJTkRfTEVWRUxTIGFuZCBwYXNzIHRvCisJZmluZF9yZWxvYWRzX2FkZHJlc3MuCisJKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogQWNjZXB0IElORF9MRVZFTFMgYW5kIHBhc3MgaXQgb24gdG8gCisJZmluZF9yZWxvYWRzX2FkZHJlc3NfMS4KKwlXaGVuIGNhbGxpbmcgb3Vyc2VsZiByZWN1cnNpdmVseSBmb3IgYSBNRU0gYXMgYW4gYWRkcmVzcywgc2hvdworCW9uZSBpbmRpcmVjdCBsZXZlbCBoYXMgYmVlbiB1c2VkLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogQWNjZXB0IElORF9MRVZFTFMgYW5kIHBhc3MgaXQgdG8gb3Vyc2VsdmVzCisJaW4gcmVjdXJzaXZlIGNhbGxzIGFuZCB0byBmaW5kX3JlbG9hZHNfYWRkcmVzcy4KKwkqIHJlbG9hZDEuYyAoc3BpbGxfaW5kaXJlY3RfbGV2ZWxzKTogTmV3IHZhcjsgdXNlZCB0byBiZQorCXNwaWxsX2luZGlyZWN0X29rLgorCShyZWxvYWQpOiBDb21wdXRlIG51bWJlciBvZiBsZXZlbHMgb2YgaW5kaXJlY3Rpb24gYW5kIHNldCBpdCBpbnRvCisJc3BpbGxfaW5kaXJlY3RfbGV2ZWxzLgorCShyZWxvYWQsIHJlbG9hZF9hc19uZWVkZWQpOiBQYXNzIHNwaWxsX2luZGlyZWN0X2xldmVscyBub3QKKwlzcGlsbF9pbmRpcmVjdF9vay4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IE1ha2Ugc2ltaWxhciBjaGFuZ2UgdG8gIlYiIGFzICJPIi4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IEZvciBiaW5hcnkgb3BlcmF0aW9ucywgZG9uJ3QgY2FsbAorCXJlY3Vyc2l2ZWx5IG9uIHNlY29uZCBhcmcgaWYgbnVsbCAoZm9yIEVYUFJfTElTVCkuCisJKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBQZXJmb3JtIHJlZ2lzdGVyIGVsbWluYXRpb24gaW4gdGhlCisJUkVHX05PVEVTIG9mIGFuIGluc24gd2hlbiB3ZSBhcmUgZG9pbmcgaXQgZm9yIHRoZSBsYXN0IHRpbWUuCisKKwkqIHZheC5tZCAoY2FsbF92YWx1ZV9wb3ApOiBVc2UgY29ycmVjdCBvcGVyYW5kIG51bWJlciBmb3IgbnVtYmVyCisJb2YgYnl0ZXMgcG9wcGVkLgorCisJKiB0bS1yb21wLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBFbnN1cmUgd2UgaWdub3JlIHJlZ19yZW51bWJlciBpZgorCXJlZ2lzdGVyIGFsbG9jYXRpb24gaGFzbid0IGJlZW4gZG9uZSB5ZXQuCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplIHJlZ19yZW51bWJlciB0byB6ZXJvOworCWl0IGlzIGNoZWNrZWQgaW4gcnR4X3JlbnVtYmVyZWRfZXF1YWxfcC4KKworCSogbG9vcC5jIChsb29wX29wdGltaXplKTogRW5zdXJlIHdlIGFzc2lnbiBhIG5ldyBMVUlEIHRvIGFsbAorCXNwZWNpYWwgbm90ZXMsIGluY2x1ZGluZyBOT1RFX0lOU05fRlVOQ1RJT05fQkVHICgwKS4KKworU2F0IE9jdCAyNyAxMjoyMjo0NiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvdXQtYTI5ay5jIChwcmludF9vcGVyYW5kLCBvdXRwdXRfcHJvbG9nKTogRG9uJ3QgdHJ5IHRvIGZpbGwgZGVsYXkKKwlzbG90cyB3aXRoIHBhcnRzIG9mIGVwaWxvZ3VlIG9yIHByb2xvZ3VlIHVubGVzcyAtTyAtZmRlbGF5ZWQtYnJhbmNoLgorCisJKiB0bS1yczYwMDAuaCAoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBTaG91bGQgYmUgOC4KKworCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogSWdub3JlIFJFR19ERUFEIG5vdGVzIGZvciBwc2V1ZG9zOworCXRoZXkgbXVzdCBub3QgaGF2ZSBnb3R0ZW4gaGFyZCByZWdpc3RlcnMuCisKK0ZyaSBPY3QgMjYgMTE6MzA6MjggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChtYWluKTogU2V0IG1hY2hpbmVfc3VmZml4IGJlZm9yZSByZWFkaW5nIHNwZWNzIGZpbGUuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBXYXJuIGZvciBiYWQgc2hpZnQgY291bnRzLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKToKKwlCSVRGSUVMRF9OQllURVNfTElNSVRFRCBhZmZlY3RzIGJpdGZpZWxkcyBvbmx5LgorCisJKiBsb29wLmMgKG5vdGVfYWRkcl9zdG9yZWQpOiBEb24ndCBhc3N1bWUgUExVUyBpbiBhZGRyZXNzIGlzIGFnZ3JlZ2F0ZS4KKworRnJpIE9jdCAyNiAwMDo0NjowOSAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLXRyZWUuaDogRGVjbGFyZSBgYnVpbGRfdHlwZV9jb252ZXJzaW9uJyBvbmNlIGluc3RlYWQgb2YKKwl0aHJlZSB0aW1lcy4KKworCSogbG9vcC5jIChsb29wX3NraXBfb3Zlcik6IEhhbmRsZSBtYWNoaW5lcyB3aXRob3V0IGNjMC4KKwkobGFiZWxzX2luX3JhbmdlX3ApOiBGaXhlZCB0eXBvIHdoZXJlIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQgMCB3aGVuCisJaXQgbWVhbnQgdG8gcmV0dXJuIDEuCisJKGNoZWNrX2Zvcl9lbmR0ZXN0KTogTmV3IGZ1bmN0aW9uLiAgUmV0dXJucyBub24temVybyB3aGVuCisJYXJndW1lbnQgaXMgYSBzaW1wbGUgY29uZGl0aW9uYWwgdGVzdCBpbnNuIChzdWl0YWJsZSBmb3IgYmVpbmcgdGhlCisJZW5kdGVzdCBvZiBhIGxvb3ApLgorCShzdHJlbmd0aF9yZWR1Y2UpOiBVc2UgYGNoZWNrX2Zvcl9lbmR0ZXN0JyB0byBpZGVudGlmeSB0aGUgZW5kdGVzdC4KKwlBbHNvIGZpeGVkIHNvbWUgdHlwb3MgaW4gY29tbWVudHMuCisJKGNhbl9lbGltaW5hdGVfYml2KTogVXNlIGBjaGVja19mb3JfZW5kdGVzdCcgaGVyZSwgdG9vLgorCShnZXRfY29uZGl0aW9uKTogR2VuZXJhbGl6ZWQgdG8gaGFuZGxlIG1hY2hpbmVzIHdpdGhvdXQgY2MwLiAgTm93CisJVEhJU19DQ19SVFggaXMgdGhlIHZhbHVlIG9mIHRoZSBjYyBydHguCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQ29uZGl0aW9uYWxpemUgYXdheQorCWNjMC1zcGVjaWZpYyBjb2RlIHdpdGggSEFWRV9jYzAuCisJKHRyeV9jb25zdGFudHMpOiBBZGQgYXBwcm9wcmlhdGUgZGVjbGFyYXRpb24gZm9yIE9SSUcuCisJKHRyeV9mb2xkX2NvbmRpdGlvbik6IEdlbmVyYWxpemVkIHRvIHdvcmsgZm9yIG5vbi1jYzAgY29uZGl0aW9uCisJdmFsdWVzLgorCisJKiBjcGx1cy10eXBlMi5jIChkaWdlc3RfaW5pdCk6IEFkZCBtaXNzaW5nIGRlY2xhcmF0aW9uIG9mIEZJRUxELgorCSogcnRsLmg6IEFkZCBtaXNzaW5nIGRlY2xhcmF0aW9uIG9mIHBsdXNfY29uc3RhbnRfZm9yX291dHB1dC4KKwkqIGp1bXAuYyAoY2FuX3JldmVyc2VfY29tcGFyaXNvbik6IEZpeGVkIHR5cG8uCisJKGRlbGV0ZV9qdW1wKTogTWFkZSB0byB3b3JrIHdpdGhvdXQgY2MwX3J0eC4KKworRnJpIE9jdCAyNiAwMDowMToyNyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jOiBDb25kaXRpb25hbGl6ZSByZWZlcmVuY2VzIHRvIENDMF9SVFggb24gSEFWRV9jYzAuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBGb3IgdGhlIGBvJyBjb25zdHJhaW50LCBpZiBJTkRfT0sgaXMKKwl0cnVlLCB1c2Ugb2Zmc2V0dGFibGVfbWVtcmVmX3AgaW5zdGVhZCBvZiB0aGUgbm9uc3RyaWN0IHZlcnNpb24uCisKKwkqIGp1bXAuYyAoZGVsZXRlX2p1bXApOiBJZiBIQVZFX2NjMCBpcyBub3QgZGVmaW5lZCwgaXQgaXMgbm90IHNhZmUgdG8KKwlkZWxldGUgcHJldmlvdXMgaW5zbiB0aGF0IHNldHMgYSBjb25kaXRpb24gY29kZSByZWdpc3RlciwgYmVjYXVzZSBpdAorCW1pZ2h0IG5vdCBiZSBkZWFkLiAgUmV3b3JrIHRvIGxvb2sgYXQgYWxsIHJlZ2lzdGVycyBkeWluZyBpbiB0aGlzIGluc24KKwlhbmQgZGVsZXRlIHRoZSBmaXJzdCBwcmV2aW91cyBpbnNuIHRoYXQgc2V0cyBhbnkgc3VjaCByZWdpc3RlciBpZiB0aGF0CisJaXMgYWxsIGl0IGRvZXMuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFJlbW92ZSBleHRyYW5lb3VzIGNhbGwgdG8gbmV4dF9hY3RpdmVfaW5zbgorCWluIG9wdGltaXphdGlvbiBvZiAiaWYgKC4uLikgeCA9IDE7IGVsc2UgLi4uOyBpZiAoeCkgLi4uIi4KKworCSogY3NlLmMgKHByZWRlY2lkZV9sb29wX2VudHJ5KTogRG9uJ3Qgc2V0IGNjX3ZhbHVlIHRvIG51bGwgYW5kIHRoZW4KKwlzdGljayBpdCBpbiB0aGUgcnRsLgorCisJKiBydGxhbmFsLmMgKGZpbmRfbmV4dF9yZWYpOiBEZWxldGVkIGZyb20gaGVyZS4KKwkqIGV4cGxvdy5jOiBJbmNsdWRlIGhhcmQtcmVnLXNldC5oIGZvciBmaW5kX25leHRfcmVmLgorCShmaW5kX25leHRfcmVmKTogTW92ZWQgdG8gaGVyZS4KKwkqIE1ha2VmaWxlLmluIChleHBsb3cubyk6IEluY2x1ZGVzIGhhcmQtcmVnLXNldC5oLgorCitUaHUgT2N0IDI1IDIxOjM3OjE1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiB2YS1taXBzLmggKHZhX2xpc3QpOiBQdXQgX18gaW4gbWVtYmVyIG5hbWVzLgorCSh2YV9kY2wpOiBSZW5hbWUgX3ZhX2FsaXN0IHRvIF9fdmExX2FsaXN0LgorCSogdmEtaTg2MC5oIChfX3ZhX3N0cnVjdCk6IFB1dCBfXyBpbiBtZW1iZXIgbmFtZXMuCisJKiBndmFyYXJncy5oLCB2YS0qLmg6IChfX3ZhX2VsbGlwc2lzKTogTmV3IG1hY3JvLgorCSh2YV9kY2wpOiBVc2UgdGhhdC4KKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEZvciBmdW5jdGlvbnMsIHJldmVyc2UgdGhlCisJdXN1YWwgY3JpdGVyaW9uIGZvciB3YXJuaW5nIGFib3V0IGNvbnN0IHZzIG5vbi1jb25zdC4gIFZvbGF0aWxlIGFsc28uCisKKwkqIG04OGsubWQsIHRtLW04OGsuaCwgb3V0LW04OGsuYzogUmV3cml0ZXMgYnkgd29vZEBkZy1ydHAuZGcuY29tLgorCSogdG0tbTg4a2RndXguaCwgdG0tdjg4cjMyLmgsIHRtLW04OGtzdnI0Lmg6IE5ldyBmaWxlcy4KKwkqIHhtLW04OGtkZ3V4LmgsIHhtLXY4OHIzMi5oLCB4bS1tODhrc3ZyNC5oOiBOZXcgZmlsZXMuCisJKiBtYWtlLW04OGssIG1ha2UtbTg4a2RndXg6IE5ldyBmaWxlcy4KKwkqIGNvbmZpZy5nY2MgKG04OGstZGd1eCwgbTg4ay12ODhyMzIsIG04OGstc3ZyNCk6IE5ldyBhbHRlcm5hdGl2ZXMuCisKKwkqIGd2YXJhcmdzLmgsIGdzdGRhcmcuaDogSW5jbHVkZSBhbHRlcm5hdGUgZmlsZSBmb3IgbTg4ay4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEZvciBBUlJBWV9SRUYsIHByZXNlcnZlIGNvbnN0IGFuZCB2b2xhdGlsZS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEhhbmRsZSBzdHJjbXAgYW5kIG1lbWNtcCB3aXRoIGZ1bmN0aW9uIGNhbGxzCisJaWYgY2FuJ3QgYmUgb3BlbiBjb2RlZC4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IFJvdW5kIHRyYW1wb2xpbmUgYWRkciB0byBpbml0LgorCShyb3VuZF90cmFtcG9saW5lX2FkZHIpOiBGaXggYnJhaW5vIGluIGFsaWdubWVudC4KKworVGh1IE9jdCAyNSAxNDo1NDoxOCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmM6IE5vdyBpbmNsdWRlcyBpbnNuLWNvbmZpZy5oLgorCShqdW1wX29wdGltaXplKTogaW5lcXVhbGl0eV9jb21wYXJpc29uc19wIHRha2VzIG9ubHkgb25lIG9wZXJhbmQgYWdhaW4uCisJKGNhbl9yZXZlcnNlX2NvbXBhcmlzb25fcCk6IEhhbmRsZSBjYXNlIHdoZXJlIGEgcmVnaXN0ZXIgaXMgdXNlZAorCWZvciB0aGUgY29uZGl0aW9uIGNvZGU7IGlmIHdlIGNhbid0IGVhc2lseSBmaW5kIHRoZSBDT01QQVJFIHRoYXQKKwl3YXMgdXNlZCB0byBzZXQgdGhlIHJlZ2lzdGVyLCBzYXkgd2UgY2FuJ3QgcmV2ZXJzZSB0aGUgY29tcGFyaXNvbi4KKwkqIE1ha2VmaWxlLmluIChqdW1wLm8pOiBOb3cgaW5jbHVkZXMgaW5zbi1jb25maWcuaC4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogUHV0IGJhY2sgY2hhbmdlIHJlbW92ZWQgb24gT2N0IDIxc3Q7CisJZW1pdF9zdG9yZV9mbGFnIGhhcyBub3cgYmVlbiB1cGRhdGVkLgorCisJKiBydGxhbmFsLmMgKGluZXF1YWxpdHlfY29tcGFyaXNvbnNfcCk6IFJlamVjdCBhbnkgb3JkZXJlZAorCWNvbXBhcmlzb247IHdlIG5lZWQgbm90IGp1c3QgcmVqZWN0IHdoZW4gY29tcGFyaW5nIGFnYWluc3QKKwljYzBfcnR4LgorCSogcmVjb2cuYyAobmV4dF9pbnNueyxzfV90ZXN0X25vX2luZXF1YWxpdHkpOiBpbmVxdWFsaXR5X2NvbXBhcmlzb25zX3AKKwlhZ2FpbiBoYXMgb25seSBvbmUgb3BlcmFuZC4KKwkqIGdlbmF0dHJ0YWIuYyAoY2MwX3J0eCk6IE5vIGxvbmdlciBuZWVkZWQ7IHJlbW92ZSBjaGFuZ2Ugb2YgT2N0IDIxLgorCisJKiBnZW5jb25maWcuYyAoaGF2ZV9jYzBfZmxhZyk6IE5ldyB2YXJpYWJsZS4KKwkod2Fsa19pbnNuX3BhcnQpOiBTZXQgaXQgd2hlbiB3ZSBzZWUgQ0MwLgorCShtYWluKTogV3JpdGUgI2RlZmluZSBIQVZFX2NjMCB3aGVuIGl0IGlzIHNldC4KKwkqIGZsb3cuYzogTm93IGluY2x1ZGVzIGluc24tY29uZmlnLmguCisJKiBNYWtlZmlsZS5pbiAoZmxvdy5vKTogTGlrZXdpc2UuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBJZiBYIGFuZCBGUk9NIGFyZSB0aGUgc2FtZSByZWdpc3RlciBudW1iZXIsCisJYnV0IGluIGRpZmZlcmVudCBtb2RlcywgZm9yY2UgdGhlIGNvbWJpbmUgbm90IHRvIGJlIGRvbmUuCisJQWRkIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgdW5kb2J1Zi5zdG9yYWdlLgorCitUaHUgT2N0IDI1IDExOjM0OjM1IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogc2NoZWQuYyAobmV3X3NvbWV0aW1lc19saXZlKTogUHJvdGVjdCB0aGlzIGZ1bmN0aW9uIGluIGNhc2UgaXQgaXMKKwljYWxsZWQgd2l0aCAoT0ZGU0VULEJJVCkgdGhhdCBldmFsdWF0ZXMgdG8gPj0gTUFYX1JFR05PLgorCisJKiBqdW1wLmMgKHNldHNfY2MwX3ApOiBDb25kaXRpb25hbGl6ZWQgdG8gYWJvcnQgaWYgY2FsbGVkIHdoZW4KKwltYWNoaW5lIGRvZXMgbm90IHN1cHBvcnQgY2MwLgorCisJKiBydGxhbmFsLmMgKHJlZ19zZXRfcCk6IE5vdyBub24tc3RhdGljLgorCSogcnRsYW5hbC5jIChydHhfdmFyaWVzX3ApOiBIYW5kbGUgTE9fU1VNIG1vcmUgYWNjdXJhdGVseS4KKwkqIHJ0bGFuYWwuYyAoZmluZF9uZXh0X3JlZik6IE5ldyBmdW5jdGlvbi4gIFJldHVybnMgdGhlIGluc24gdGhhdAorCW5leHQgcmVmZXJlbmNlcyBSRUcgYWZ0ZXIgSU5TTiwgb3IgMCBpZiBSRUcgaXMgY2xvYmJlcmVkIGJlZm9yZSBuZXh0CisJcmVmZXJlbmNlZCBvciBpdCBjYW5ub3QgZWFzaWx5IGZpbmQgYSByZWZlcmVuY2UgdG8gUkVHLgorCisJKiByZWNvZy5jIChuZXh0X2luc25fdGVzdHNfbm9faW5lcXVhbGl0eSk6IENvbmRpdGlvbmFsaXplZCBvbgorCUhBVkVfY2MwLgorCisJKiBydGxhbmFsLmMgKGluZXF1YWxpdHlfY29tcGFyaXNvbnNfcCk6IFRha2VzIG5ldyBhcmd1bWVudAorCVRISVNfQ0MwX1JUWCB3aGljaCBpcyB0aGUgcnRsIGZvciB0aGUgY29uZGl0aW9uIGNvZGUgdmFsdWUgd2UgYXJlCisJY29uY2VybmVkIGFib3V0IHRlc3RpbmcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayxtYXJrX3VzZWRfcmVncyk6IENvbmRpdGlvbmFsaXplCisJc3BlY2lhbGl6ZWQgY2MwIGhhbmRsaW5nIG9ubHkgaWYgSEFWRV9jYzAgaXMgZGVmaW5lZC4KKworCSogZ2VuZW1pdC5jIChnZW5fZXhwKTogSW4gUkVHIGNhc2UsIElmIENDMF9SRUdOVU0gaXMgZGVmaW5lZCwKKwlzYXZlIHNwYWNlIGJ5IHVzaW5nIFJFR19DQzBfUlRYIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldworCShSRUcsIG1vZGUsIENDMF9SRUdOVU0pIHJ0eCBpZiB0aGUgbW9kZSBpcyBTSW1vZGUuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9hZGRyX2NvbnN0KTogSGFuZGxlIFBDIGZvciBQLkkuQy4gY29kZSBnZW5lcmF0aW9uLgorCUFsc28sIHB1dCBwYXJlbnMgYXJvdW5kIENPTlNUIGV4cHJlc3Npb25zIHNvIHRoYXQgcHJlY2VkZW5jZSBjYW4gYmUKKwltYWludGFpbmVkLgorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3QgbG9vayBmb3IgcmVkdW5hbnQgY29tcGFyZXMKKwlleGNlcHQgd2hlbiBIQVZFX2NjMCBpcyBkZWZpbmVkLgorCUFsc28sIHVzZSBgZmluZF9jYycgdG8gbG9jYXRlIHRoZSBydHggZnVuY3Rpb25pbmcgYXMgdGhlCisJY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIgaW4gb3JkZXIgdG8gcGVyZm9ybSBhcHByb3ByaWF0ZSBjYWxscworCXRvIGBhbHRlcl9jb25kJy4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFN1cHBseSBtaXNzaW5nIGFyZyBpbiBjYWxscyB0byBgc3RvcmVfZXhwcicuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBOZXcgYXJndW1lbnQgQ09NUEFSSVNPTiBpcyB0aGUKKwljb21wYXJpc29uIG9wZXJhdGlvbiB3aG9zZSByZXN1bHQgd2Ugc3RvcmUuCisKKwkqIHJlY29nLmMgKG9mZnNldHRhYmxlX2FkZHJlc3NfcCxhZGpfb2Zmc2V0dGFibGVfb3BlcmFuZCk6IFVzZQorCWBwbHVzX2NvbnN0YW50X2Zvcl9vdXRwdXQnIGluc3RlYWQgb2YgYHBsdXNfY29uc3RhbnQnIHNpbmNlIHdlCisJYXJlIHRlc3RpbmcgY29uZGl0aW9ucyB3aGljaCByZWx5IG9uIGJlaW5nIGFibGUgdG8gYWRkIHNtYWxsCisJb2Zmc2V0cyB0byBlLmcuIExPX1NVTSBvcGVyYW5kcy4KKwkqIGV4cGxvdy5jIChwbHVzX2NvbnN0YW50KTogTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgTE9fU1VNLiAgSXQgaXMKKwlub3QgdmFsaWQgdG8gYWRkIGEgY29uc3RhbnQgdG8gYSB0ZXJtIHdpdGggTE9fU1VNLCBzaW5jZSB0aGUKKwljb25zdGFudCBtYXkgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgaGlnaCBiaXRzIHRoYXQgZm9ybSB0aGUgc3VtLAorCWFuZCB0aG9zZSBoaWdoIGJpdHMgYXJlIG5vdCByZWFkaWx5IGF2YWlsYWJsZS4KKwkqIGV4cGxvdy5jIChwbHVzX2NvbnN0YW50X2Zvcl9vdXRwdXQpOiBTYW1lIGFzIGBwbHVzX2NvbnN0YW50JworCWV4Y2VwdCB0aGF0IHdlIGRvIGFsbG93IGFkZGluZyBjb25zdGFudHMgdG8gTE9fU1VNIHRlcm1zLiAgVGhpcworCWZ1bmN0aW9uIHdvcmtzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcyBzdWNoIGFzIGZvcgorCWBhZGpfb2Zmc2V0dGFibGVfb3BlcmFuZCcgYW5kIGBvZmZzZXR0YWJsZV9hZGRyZXNzX3AnLgorCisJKiBlbWl0LXJ0bC5jOiBEZWNsYXJlIHJlZ19jYzBfcnR4IHdoaWNoIGlzIGxpa2UgY2MwX3J0eCwgYnV0CisJaXMgYSByZWdpc3RlciBpbnN0ZWFkIG9mIGEgc3BlY2lhbCBmb3JtLiAgcmVnX2NjMF9ydHggc2hvdWxkCisJYmUgdXNlZCB3aGVuIHJlcHJlc2VudGluZyB0aGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIgb24gYQorCW1hY2hpbmUgd2hlcmUgY29uZGl0aW9uIGNvZGVzIGFyZSBvbmx5IHNldCBpZiBleHBsaWNpdGx5IHNldC4KKwlGb3IgbWFjaGluZXMgd2hpY2ggYWxsb3cgYXJiaXRyYXJ5IHJlZ2lzdGVycyB0byBiZSB1c2VkIGFzCisJY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzIChzdWNoIGFzIHRoZSBNSVBTIGFuZCA4OGspLCBub3JtYWwKKwlwc2V1ZG8gcmVnaXN0ZXJzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisJKiBlbWl0LXJ0bC5jIChuZXh0X2NjMF91c2VyLHByZXZfY2MwX3NldHRlcik6IENvbmRpdGlvbmFsaXplZAorCW9uIEhBVkVfY2MwLgorCSogZW1pdC1ydGwuYyAoZmluZF9jYyk6IE5ldyBmdW5jdGlvbi4gIEdpdmVuIElOU04sIHJldHVybnMKKwl0aGUgcnR4IG9mIHdoYXQgZnVuY3Rpb25zIGFzIHRoZSBjb25kaXRpb24gY29kZSByZWdpc3RlciBmb3IKKwlJTlNOLiAgT24gbWFjaGluZXMgd2hpY2ggdXNlIGNjMF9ydHgsIHRoaXMgaXMgYWx3YXlzIGNjMF9ydHguCisJT24gbWFjaGluZXMgd2hpY2ggaGF2ZSBhIGRlZGljYXRlZCByZWdpc3RlciBmb3IgY2MwLCB0aGlzIGlzCisJdGhhdCByZWdpc3Rlci4JT24gbWFjaGluZXMgd2hpY2ggYWxsb2NhdGUgcHNldWRvcyBmb3IgaG9sZGluZworCWNvbmRpdGlvbiBjb2RlcywgdGhpcyBpcyB0aGUgcHNldWRvIGZvdW5kIGluIGEgUkVHX0NDMCBub3RlLgorCU90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuCisJKiBlbWl0LXJ0bC5jIChpbml0X2VtaXRfb25jZSk6IEFsbG9jYXRlIGByZWdfY2MwX3J0eCcgaWYKKwlDQzBfUkVHTlVNIGlzIGRlZmluZWQuCisKKwkqIGNzZS5jIChtYWtlX3JlZ3NfZXF1aXYpOiBEb24ndCBjb25zaWRlciBtYWtpbmcgYSByZWcKKwllcXVpdmFsZW50IHRvIGFub3RoZXIgcmVnIHdob3NlIGNsYXNzIGlzIE5PX1JFR1MuCisJKiBjc2UuYyAoY2Fub25fcmVnKTogRG9uJ3QgY2Fub25pY2FsaXplIGEgcmVnaXN0ZXIgdG8KKwlvbmUgd2hvc2UgY2xhc3MgaXMgTk9fUkVHUy4KKwkqIGNzZS5jIChmb2xkX3J0eCk6IENvbmRpdGlvbmFsaXplIGNvZGUgZm9yIGhhbmRsaW5nIGNjMF9ydHgKKwl3aXRoIEhBVkVfY2MwLgorCSogY3NlLmMgKHByZWRlY2lkZV9sb29wX2VudHJ5KTogR2VuZXJhbGl6ZSBjb2RlIHRvIHVzZSBlaXRoZXIKKwlhIHJlZ2lzdGVyIG9yIGNjMF9ydHguCisJKiBjc2UuYyAoY3NlX2luc24pOiBDb25kaXRpb25hbGl6ZSBjb2RlIGZvciBoYW5kbGluZyBjYzBfcnR4CisJd2l0aCBIQVZFX2NjMC4KKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyx0cnlfY29tYmluZSxzdWJzdCk6CisJQ29uZGl0aW9uYWxpemUgY29kZSBoYW5kbGluZyBjYzBfcnR4IHdpdGggSEFWRV9jYzAuCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NldF9jYzBfYW5kKTogQWJvcnQgaWYgSEFWRV9jYzAgaXMgbm90CisJZGVmaW5lZC4KKwkqIGNvbWJpbmUuYyAodHJ5X2Rpc3RyaWIpOiBBZGQgYnJlYWsgYXQgZW5kIG9mIHN3aXRjaCBjYXNlcy4gIEl0IGlzCisJZGFuZ2Vyb3VzIHRvIGxlYXZlIHRoZSBsYXN0IGNhc2VzIG9mIGEgc3dpdGNoIHN0YXRlbWVudCB0byBmYWxsCisJdGhyb3VnaCBzaW5jZSBuZXcgY2FzZXMgYWRkZWQgYWZ0ZXIgd2lsbCBnZXQgZmFsbGVuIGludG8uCisKKwkqIHJlY29nLmMgKHZhbGlkYXRlX2NoYW5nZSk6IEFsd2F5cyBzdWNjZWVkIGZvciBhbiBhc20gaW5zbiwKKwlzaW5jZSByZWNvZyBhbHdheXMgZmFpbHMgdG8gcmVjb2duaXplIGFzbSBpbnNucy4gIFRoaXMgaXMKKwluZWVkZWQgZm9yIHZpcnR1YWwgcmVnaXN0ZXIgaW5zdGFudGlhdGlvbiBpbiBhc20gaW5zbnMuCisKKwkqIGNzZS5jIChjc2VfbWFpbik6IFdoZW4gZm9sbG93aW5nIGp1bXBzLCBub3RpY2Ugd2hldGhlciBhCisJcGFydGljdWxhciBiYXNpYyBibG9jayBjYXVzZXMgQ1NFX0pVTVBTX0FMVEVSRUQgdG8gYmVjb21lIHNldC4JV2hlbgorCXRoaXMgaGFwcGVucywgcmVwZWF0IHRoZSBzY2FuLgorCSogY3NlLmMgKHJlZmVyc190b19tZW1fcCk6IENoYW5nZWQgcGFyYW1ldGVyIG5hbWUgUkVHIHRvIEJBU0UsCisJd2hpY2ggaXMgbW9yZSBhY2N1cmF0ZS4JIEFsc28sIHRhdWdodCBpdCBob3cgdG8gY29wZSB3aXRoCisJTE9fU1VNIHJ0bCBjb25zdHJ1Y3RzLgorCitXZWQgT2N0IDI0IDE1OjM2OjEyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBBY2NlcHQgYWRkaXRpb25hbCBhcmcsIEZOREVDTC4KKwlEb24ndCBzYXZlIGFyZ3VtZW50IGFyZWEgaWYgaXQgaXMgd2l0aGluIHRoZSBSRUdfUEFSTV9TVEFDS19TUEFDRQorCWFyZWEsIGJ1dCBtYXJrIHRoZSBhcmVhIGluIHVzZS4KKwkoZXhwYW5kX2NhbGwpOiBJZiBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MgYW5kIFJFR19QQVJNX1NUQUNLX1NQQUNFLAorCXRyZWF0IHRoZSBzdGFjayBhcmVhIGZvciB0aGUgcmVnaXN0ZXJzIGFzIGJlIGNsb2JiZXJlZCBieSB0aGUgY2FsbGVkCisJcm91dGluZSAoZS5nLiwgaWYgaXQgd2FzIGNvbXBpbGVkIHdpdGhvdXQgLU8pIGFuZCBzYXZlIGFuZCByZXN0b3JlCisJaXQgaWYgaXQgd2FzIHByZXZpb3VzbHkgdXNlZCBmb3IgYXJndW1lbnRzIGluIGEgc2ltaWxhciBtYW5uZXIgdG8KKwl0aGUgcmVtYWluZGVyIG9mIHRoZSBhcmd1bWVudCBhcmVhIChkb25lIGJ5IHN0b3JlX29uZV9hcmcpLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFN1cHBvcnQgbmV3IGRlc2NyaXB0aW9uIG1hY3JvLAorCVNUQUNLX1BBUk1TX0lOX1JFR19QQVJNX0FSRUEuCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KKworV2VkIE9jdCAyNCAxMjo0NzoyMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogVXNlIG1haW4gdmFyaWFudCBmb3IgdmFsdWUgdHlwZS4KKworCSogZ2Vub3V0cHV0LmMgKG91dHB1dF9wcm9sb2d1ZSk6IExldCBTRVBBUkFURV9BVVhfT1VUUFVUCisJY2F1c2UgYXV4LW91dHB1dC5jIG5vdCB0byBiZSBpbmNsdWRlZC4KKwlNYWtlZmlsZS5pbiAoYXV4LW91dHB1dDIuYyk6IENvcHkgYXV4LW91dHB1dC5jIGFuZCB0aGVuIGNvbXBpbGUgaXQuCisKKwkqIHJlbG9hZC5jIChzdWJzdF9yZWdfZXF1aXZzKTogVHJlYXQgSElHSCBsaWtlIG90aGVyIGNvbnN0YW50cy4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogV2hlbiB0ZXN0aW5nIGhhcmQgcmVnIGZvciB2YWxpZGl0eSwKKwl0ZXN0IHN1YnNlcXVlbnQgcmVncyBvbmx5IGFnYWluc3QgY2xhc3MsIG5vdCBmb3IgSEFSRF9SRUdOT19NT0RFX09LLgorCitUdWUgT2N0IDIzIDIyOjQ5OjMzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogU2tpcCAjIyBhdCBzdGFydCBhZnRlciB0aGUgZXJyb3IuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEhhbmRsZSAtIGFzIHN1ZmZpeC4KKwkobWFpbik6IE1ha2UgdGhhdCBhIHNwZWNpYWwgY2FzZTsgaXQgbWF0Y2hlcyBvbmx5IGV4YWN0bHkgYC0nLgorCitUdWUgT2N0IDIzIDIyOjQwOjMzIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJvbXAubWQgKHN0b3Jle3MsaCxxfWkgcGF0dGVybik6IEFsbG93ICJiIiBmb3IgY2xvYmJlcmVkIHBzZXVkbworCWluIGFkZGl0aW9uIHRvICJkIiBpbiBmaXJzdCBhbHRlcm5hdGl2ZS4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IElGX1RIRU5fRUxTRSBpc24ndCBhIHVuYXJ5IG9wZXJhdGlvbi4KKworVHVlIE9jdCAyMyAyMDozNToxMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZCAoemVyby1leHRlbmQgUUkpOiBXaGVuIHB1c2hpbmcsIHN0b3JlIHZhbHVlIGF0IDEoc3ApLgorCitNb24gT2N0IDIyIDEyOjI3OjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKHJlc2Nhbik6IEluIHRoZSBsb29wIHRoYXQgaGFuZGxlcyBudW1iZXJzLCBkaXNjYXJkIFxuZXdsaW5lLgorCUFsc28gbWFrZSBgLi4nIHRlcm1pbmF0ZSBhIHByZXByb2Nlc3NpbmcgbnVtYmVyLgorCisJKiBNYWtlZmlsZS5pbiAodG1wZ251bGliLCBzdGFtcC1nbnVsaWIyKTogRG8gYHNldCAtZScuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEdpdmUgX19HTlVDX18gdmFsdWUgMi4KKwlEb24ndCBkZWZpbmUgaXQgZm9yIC5TIGZpbGVzLgorCitNb24gT2N0IDIyIDA3OjMzOjQyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jIChlbWl0X2luZGlyZWN0X2p1bXApOiBOZXcgZnVuY3Rpb247IG5vdyBjaGVja3MgcHJlZGljYXRlCisJb2YgaW5kaXJlY3RfanVtcC4KKwkqIHN0bXQuYyAoZXhwYW5kX2NvbXB1dGVkX2dvdG8sIGV4cGFuZF9nb3RvKTogVXNlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkCisJb2YgZGlyZWN0bHkgZW1pdHRpbmcgaW5kaXJlY3QganVtcC4KKworCSogZmxvdy5jIChtYXJrX3NldF8xKTogTWFrZSBMT0dfTElOS1MgZm9yIGhhcmQgcmVnaXN0ZXJzLgorCSogY29tYmluZS5jIChzdWJzdCk6IE1ha2UgbmV3IG1hY3JvIENPTUJJTkVfUlRYX0VRVUFMX1Agd2hpY2gKKwljb25zaWRlcnMgdGhpbmdzIGVxdWFsIGlmIHRoZXkgYXJlIHRoZSBpZGVudGljYWwgUlRYIG9yIHRoZSBzYW1lCisJcmVnaXN0ZXIgd2l0aCB0aGUgc2FtZSBtb2RlOyB1c2UgdG8gc2VlIGlmIHNvbWV0aGluZyBjaGFuZ2VkIGFuZAorCWlmIHdlIGhhdmUgYSBtYXRjaC4KKworCSogY2NjcC5jIChTX0lTUkVHKTogVXNlIGFyZ3VtZW50IGluc3RlYWQgb2YgZ2xvYmFsLgorCShtYWluKTogQ29ycmVjdCBzZW5zZSBvZiBTX0lTUkVHIHVzYWdlLgorCShjaGVja19wcmVjb21waWxlZCk6IFVzZSBTX0lTUkVHLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogRG9uJ3QgYWxsb3cgcmVnX25leHRfdXNlIHRvIHBvaW50IHRvCisJYSBOT1RFOyBlaXRoZXIgcG9pbnQgaXQgdG8gcmVwbGFjZW1lbnQgaW5zbiBvciBpbnZhbGlkYXRlIGl0LgorCitNb24gT2N0IDIyIDAwOjEzOjEyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHhkZWNscyk6IE5vIHdhcm5pbmcgdW5sZXNzIC1wZWRhbnRpYy4KKworU3VuIE9jdCAyMSAxNzo0OToyNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5hdHRydGFiLmMgKGNjMF9ydHgpOiBEZWZpbmUsIHJlZmVyZW5jZWQgaW4gcnRsYW5hbC5jLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBSZW1vdmUgY29kZSB0aGF0IGRlcGVuZHMgb24gY2hhbmdlcyB0bworCWVtaXRfc3RvcmVfZmxhZyB0aGF0IGhhdmVuJ3QgYmVlbiBtYWRlIHlldC4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogQ29ycmVjdGx5IGNoZWNrIGZvciBiaXRmaWVsZAorCWNvbXBsZXRlbHkgZmlsbGluZyBhIG1vZGUuCisKKwkqIG91dC1yb21wLmMgKG91dHB1dF9lcGlsb2d1ZSk6IENvcnJlY3RseSB3cml0ZSBudW1iZXIgb2Ygd29yZHMgb2YKKwlhcmd1bWVudHMgaW50byB0cmFjZSB0YWJsZS4KKworCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IEZpeCBlcnJvciBpbiBjaGFuZ2Ugb2YgT2N0IDE5dGguCisKKwkqIHJlb3JnLmMgKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IFJldmVydCBiYWNrIHRvIG9sZCBiZWhhdmlvcgorCW9mIHNjYW5uaW5nIGFsbCBpbnNucywgZXZlbiB0aG9zZSBpbiBkZWxheSBzbG90cy4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBOZWVkIG9ubHkgY2FsbCB1cGRhdGVfYmxvY2sgaWYgd2UgbW92ZQorCWFuIGluc24gYWNyb3NzIGEgbGFiZWwuCisKKwkqIE1ha2VmaWxlLmluIChMSUJGVU5DUyk6IFVzZSBjb25zaXN0ZW50IG5hbWluZyBjb252ZW50aW9uIGZvcgorCWNvbXBhcmlzb24gcm91dGluZXM7IGdudWxpYi5jIHdhcyBhbHdheXMgY29ycmVjdC4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRG9uJ3Qgb3ZlcndyaXRlIERFQ0xfSU5DT01JTkdfUlRMIHdoZW4KKwl3ZSBhcmUgY2FsbGVkIGZvciB0aGUgc2Vjb25kIHRpbWUuCisKKwkqIGludGVncmF0ZS5jIChpbml0aWFsaXplX2Zvcl9pbmxpbmUpOiBEb24ndCBtYWtlIGEgbmV3IHJldHVybiBsYWJlbAorCWhlcmU7IHRoZSBtYXhpbXVtIGxhYmVsIG51bWJlciBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLgorCShzYXZlX2Zvcl9pbmxpbmVfY29weWluZywgc2F2ZV9mb3JfaW5saW5lX25vX2NvcHkpOiBEbyBpdCBoZXJlIGluc3RlYWQuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IEZvciBpbmRpcmVjdCBhZGRyZXNzIHdoZXJlIHRoZQorCXVuZGVybHlpbmcgYWRkcmVzcyBpcyBhbHNvIGludmFsaWQsIGVuc3VyZSB0aGF0IHdlIHN1YnN0aXR1dGUgaW50bworCXRoZSBNRU0gdGhhdCB3ZSB3aWxsIHVzZS4KKworU3VuIE9jdCAyMSAxNDoxMjo0NyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVncyk6IFJlamVjdCByZWcgdGhhdCBvdmVybGFwcyBnb2FsLgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBGb3IgYmlnIGZpZWxkcywgbWFrZSBzdXJlCisJdmFsdWUgcmVhbGx5IGdvZXMgaW4gdGhlIHRhcmdldC4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IERlbGV0ZSBfX2J1aWx0aW5fdmFyYXJncy4KKwkoRVhQQU5EX0JVSUxUSU5fU0FWRVJFR1MpOiBOZXcgbWFjcm8gc2F5cyBob3cgdG8gZG8gX19idWlsdGluX3NhdmVyZWdzLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IE5vICJjYW4ndCBpbmxpbmUiIHdhcm5pbmcgaWYgLWZuby1pbmxpbmUuCisKKwkqIHN0ZGRlZi5oOiBBZGQgbWlzc2luZyAjZW5kaWYuCisKK1NhdCBPY3QgMjAgMTQ6MzM6MTQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKHJvdW5kX3RyYW1wb2xpbmVfYWRkcik6IE5ldyBmdW5jdGlvbi4KKwkodHJhbXBvbGluZV9hZGRyZXNzKTogVXNlIHRoYXQuCisKK0ZyaSBPY3QgMTkgMTU6MTM6MzEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IERvbid0IG1hcmsgc3RhY2sgYXJlYSB1c2VkIHVudGlsIGFmdGVyCisJd2UgaGF2ZSB3cml0dGVuIGludG8gaXQ7IGlmIHdlIGRvIGl0IGJlZm9yZSwgdGhlIHJlc3RvcmUgbWlnaHQKKwljbG9iYmVyIGEgZnVuY3Rpb24gcmVzdWx0IGJlaW5nIHB1dCBpbnRvIHRoYXQgc3RhY2sgYXJlYS4KKworCSogb2JqYy1hY3Rpb25zLmMgKHByaW50X2xhbmdfc3RhdGlzdGljcyk6IEFkZCBlbXB0eSBmdW5jdGlvbi4KKworCSogcmVjb2cuYyAoaW5lcXVhbGl0eV9jb21wYXJpc29uc19wKTogRGVsZXRlZCBmcm9tIGhlcmUuCisJKiBydGxhbmFsLmMgKGluZXF1YWxpdHlfY29tcGFyaXNvbnNfcCk6IE1vdmVkIHRvIGhlcmU7IG5vdCBzdGF0aWMuCisKKwkqIGEyOWsubWQgKGV4dGVuZGhpc2kyKTogRml4IHR5cG8gaW4gZGVmaW5lX3NwbGl0LgorCisJKiBNYWtlZmlsZS5pbiAoaW50ZWdyYXRlLm8pOiBJbmNsdWRlcyBpbnRlZ3JhdGUuaC4KKwkocmVvcmcubyk6IEluY2x1ZGVzIGluc24tZmxhZ3MuaC4KKworRnJpIE9jdCAxOSAxNDo0OToyNiAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogSWYgYSB2YXJpYWJsZSBiZWxvbmdzIHRvIGFuIGlubGluZQorCWZ1bmN0aW9uLCB0aGUgZGVjbCdzIHJ0bCBtYXkgbm90IGJlIHJld3JpdHRlbiBieSBhbHRlcl9yZWcuICBTbyBpZgorCXdlIGhhdmUgYSB2YXJpYWJsZSBhbGxvY2F0ZWQgdG8gYSBwc2V1ZG8sIGp1c3QgZ2V0IHRoZSBoYXJkIHJlZ2lzdGVyCisJbnVtYmVyIGZyb20gYHJlZ19yZW51bWJlcicuICA/PyBCdXQgSSB0aG91Z2h0IHRoYXQgQ09GRiB3YXMgc28KKwlsb3NpbmcgdGhhdCBpdCB3YXMgZGVjaWRlZCBvbmUgY291bGQgbm90IHJlcHJlc2VudCBkZWJ1ZyBpbmZvIGZvcgorCWlubGluZSBmdW5jdGlvbnMgaW4gQ09GRi4KKworRnJpIE9jdCAxOSAxMzoyMToyNSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChzcGxpdF90cmVlKTogVXNlIE5FR0FURV9FWFBSIHRvIG5lZ2F0ZSAqY29ucC4KKworRnJpIE9jdCAxOSAwMDoxNToyMSAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIHZlcnNpb24uYzogQnVtcGVkIHRvIDEuOTAuMDMuCisKKwkqIHRyZWUuYzogQWRkZWQgZmFjaWxpdHkgZm9yIGdhdGhlcmluZyBzdGF0aXN0aWNzIG9uIHRoZSBudW1iZXIgb2YKKwl0cmVlIG5vZGVzIGFsbG9jYXRlZCBhbmQgdGhlIHNpemUgaW4gYnl0ZXMgdGhleSBvY2N1cHkuCSBUaGUKKwlzdGF0aXN0aWNzIGFyZSBieSB0cmVlX25vZGVfa2luZCwgd2hpY2ggaXMgYWxtb3N0IGxpa2UgdXNpbmcgdGhlCisJdHJlZSBjb2RlIGxldHRlciwgYnV0IGhhcyBtb3JlIHJlc29sdXRpb24gZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQKKwlraW5kcyBvZiBgeCcgbm9kZXMuICBUaGUgZmFjaWxpdHkgaXMgZW5hYmxlZCBieSBjb21waWxpbmcgdGhlCisJY29tcGlsZXIgd2l0aCAtREdBVEhFUl9TVEFUSVNUSUNTIGFuZCB1c2luZyB0aGUgLWZzdGF0cyBmbGFnLgorCisJKiBleHByLmMgKGRvX3RhYmxlanVtcCk6IEVtaXQgYSBCQVJSSUVSIGFmdGVyIHRoZSBqdW1wIHRoYXQgcGVyZm9ybXMKKwl0aGUgdGFibGVqdW1wLgorCisJKiBjcGx1cy10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogUmV3cml0dGVuIHNvIHRoYXQgdGhlIGZ1bmN0aW9uCisJdmFsdWUgcmV0dXJuIHJlZ2lzdGVyIGlzIG5vdCB1c2VkIGV4Y2VwdCBhcyBhIHRhcmdldCBvZiB0aGUgZnVuY3Rpb24KKwlyZXR1cm4gdmFsdWUuCisKKwkqIGNwbHVzLXRyZWUuYyAoYnVpbGRfY3BsdXNfbmV3KTogTmV3IGFyZ3VtZW50IFdJVEhfQ0xFQU5VUF9QCisJY29udHJvbHMgd2hldGhlciB0aGlzIGZ1bmN0aW5vIHNob3VsZCBidWlsZCBpdHMgcmVzdWx0IHdpdGggYQorCWNsZWFudXAgb3Igbm90LgkgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKworCSogY3BsdXMtbGV4LmM6IEZpbGUgdXBkYXRlZCB0byBsYXRlc3QgY2hhbmdlcyB0byBjLXBhcnNlLnkncyBsZXhpY2FsCisJYW5hbHl6ZXIuCisKKwkqIGNwbHVzLWV4Y2VwdC5jIChjcGx1c19leHBhbmRfcmFpc2UpOiBOZXcgcGFyYW1ldGVyIEZPUl9SRVJBSVNFCisJaXMgdXNlZCB0byBjb250cm9sIHdoZXRoZXIgdG8gb3V0cHV0IGV4dHJhIGdvdG9zIG9yIG5vdC4gIFdoZW4KKwlub256ZXJvLCB0aGUgY29tcGlsZXIgY2FuIGF2b2lkIHdyaXRpbmcgb3V0IHRoZSBleHRyYSBnb3RvcyB0aGF0IGFyZQorCW90aGVyd2lzZSBuZWVkZWQgdG8gYXZvaWQgd2FybmluZyBtZXNzYWdlcy4KKworCSogY3BsdXMtZGVjbDIuYyAoZmxhZ19zaG9ydF9kb3VibGUpOiBBZGQgc3VwcG9ydCBmb3IgdGhpcyBvcHRpb24uCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQWx3YXlzIGNhdXNlIHJldHVybnMgdG8ganVtcCB0bworCXRoZSByZXR1cm4gbGFiZWwuICBUaGlzIGFsbG93cyAtV3JldHVybiB0byBnaXZlIG1lYW5pbmdmdWwgZXJyb3IKKwltZXNzYWdlcy4KKworCSoganVtcC5jIChpbnZlcnRfZXhwKTogTWFrZSB0aGlzIG5vbi1zdGF0aWMuCisJKGp1bXBfb3B0aW1pemUpOiBSZW9yZ2FuaXphdGlvbiBhbmQgc2ltcGxpZmljYXRpb24gb2YgbWFpbiBpbm5lcgorCWxvb3AuICBDb21tZW50cyBhZGRlZCBleHBsYWluaW5nIHdoYXQgdGhlIG9wdGltaXplcnMgYXJlIGxvb2tpbmcKKwlmb3IuICBOZXcgb3B0aW1pemF0aW9uIGFkZGVkIHRoYXQgb3B0aW1pemVzIGZvciBjb25zZWN1dGl2ZSB0ZXN0aW5nCisJb2YgYW4gaW5lcXVhbGl0eSB0ZXN0IGZvbGxvd2VkIGJ5IGFuIGVxdWFsaXR5IHRlc3QgKG9yIHZpY2UtdmVyc2EpLgorCUNoYW5nZXMgbWFkZSB0byBhY2NvbW1vZGF0ZSByZW9yZy5jIG9uIFNwYXJjLiAgQ29kZSBmb3IKKwljcm9zcy1qdW1waW5nIHJldHVybiBzdGF0ZW1lbnRzIHdhcyBwcmV2aW91c2x5IGRlYWQgaW4gdGhpcworCWZ1bmN0aW9uOyBhcyBhIHJlc3VsdCBvZiB0aGUgcmVvcmdhbml6YXRpb24sIGl0IGlzIG5vdyBsaXZlLgorCShmaW5kX2Nyb3NzX2p1bXApOiBBZGRlZCB0ZW1wb3JhcnkgdmFyaWFibGUgUFJFVjEgdG8gaG9sZCByZXR1cm4KKwl2YWx1ZSBvZiBgcHJldl9ub25ub3RlX2luc24nIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZnVuY3Rpb24gMyB0aW1lcworCWluIGEgcm93LiAgQWxzbyBjaGFuZ2VkIHNvIHRoYXQgVVNFIG9yIENMT0JCRVJTIGFyZSBub3QgY3Jvc3MtanVtcGVkCisJdW5sZXNzIHNvbWUgcmVhbCBpbnNucyBhcmUgYWxzbyBjcm9zcy1qdW1wZWQuICBUaGlzIGhlbHBzIHJlb3JnLgorCShyZWRpcmVjdF9qdW1wKTogRml4ZWQgYSByZXR1cm4gdGhhdCByZXR1cm5lZCBubyB2YWx1ZSBzbyB0aGF0IGl0CisJcmV0dXJucyAxLgorCShydHhfcmVudW1iZXJlZF9lcXVhbF9wKTogVGVzdCB0aGF0IHJlZ19yZW51bWJlciBpcyBub256ZXJvIGJlZm9yZQorCXVzaW5nIGl0LiAgV2UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGVhcmxpZXIgdGhhbiBieSB0aGUKKwl0aW1lIHRoYXQgYXJyYXkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisKKwkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfe2NvcHlpbmcsbm9jb3B5fSk6IE5ldyBmdW5jdGlvbnMgdG8KKwlyZXBsYWNlIGBzYXZlX2Zvcl9pbmxpbmUnLiAgc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcgc2F2ZXMgdGhlIHJ0bAorCWZvciBpbmxpbmUgZnVuY3Rpb25zIGJ5IGNvcHlpbmcgdGhlIHJ0bCB0byB0aGUKKwltYXliZXBlcm1hbmVudF9vYnN0YWNrLgkgSXQgaXMgY2FsbGVkIHdoZW4gdGhlIHJ0bCBvZiB0aGUgY3VycmVudAorCWZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGltbWVkaWF0ZWx5LgorCXNhdmVfZm9yX2lubGluZV9ub2NvcHkgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgaW5saW5lCisJZnVuY3Rpb24gcnRsIGlzIGFscmVhZHkgYWxsb2NhdGVkIHRvIHRoZSBtYXliZXBlcm1hbmVudF9vYnN0YWNrLCBhbmQKKwluZWVkIHRoZXJlZm9yZSBub3QgYmUgY29waWVkIGlmIGl0J3Mgbm90IGdvaW5nIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZQorCWNvbXBpbGVyIChzdWNoIGFzIGJ5IGByZXN0X29mX2NvbXBpbGF0aW9uJykuCisJKHtpbml0aWFsaXplX2ZvcixmaW5pc2h9X2lubGluZSk6IE5ldyBoZWxwZXIgcm91dGluZXMgZm9yCisJc2F2ZV9mb3JfaW5saW5lXy4uLiBmdW5jdGlvbnMuCisJKG5vdGVfbW9kaWZpZWRfcGFybXJlZ3MpOiBGdW5jdGlvbiBjYWxsZWQgYnkgYG1hcmtfc3RvcmVzJyB0byBub3RlCisJd2hldGhlciBwYXJhbWV0ZXJzIGFyZSBhc3NpZ25lZCB0byBpbiB0aGUgYm9keSBvZiBhbiBpbmxpbmUKKwlmdW5jdGlvbi4KKwlOZXcgaW50ZXJmYWNlLCBpbnRlZ3JhdGUuaCwgcHJvdmlkZXMgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgdXNlZAorCWJ5IG90aGVyIHJvdXRpbmVzIHRoYXQgbWlnaHQgd2FudCB0byBjb3B5IGNodW5rcyBvZiBydGwuCisJKHtzYXZlLHRyeX1fY29uc3RhbnRzKTogTm93IGdsb2JhbCAoZm9yIGludGVncmF0ZS5oKS4KKwkobWFya19zdG9yZXMpOiBEaXR0by4KKwkodHJ5X2ZvbGRfY29uZGl0aW9uKTogRGl0dG8uCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogSWYgYSB2YXJpYWJsZSBiZWxvbmdzIHRvIGFuIGlubGluZQorCWZ1bmN0aW9uLCB0aGUgZGVjbCdzIHJ0bCBtYXkgbm90IGJlIHJld3JpdHRlbiBieSBhbHRlcl9yZWcuICBTbyBpZgorCXdlIGhhdmUgYSB2YXJpYWJsZSBhbGxvY2F0ZWQgdG8gYSBwc2V1ZG8sIGp1c3QgZ2V0IHRoZSBoYXJkIHJlZ2lzdGVyCisJbnVtYmVyIGZyb20gYHJlZ19yZW51bWJlcicuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RfcG9vbCk6IE5vIGxvbmdlciBzdGF0aWMuCisJKGFzc2VtYmxlX3ZhcmlhYmxlKTogRG8gb3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgZ2xvYmFsCisJcmVnaXN0ZXIgdmFyaWFibGVzLiAgR0RCIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBnbG9iYWwgcmVnaXN0ZXIKKwl2YXJpYWJsZXMuCisKKwkqIHRvcGxldi5jOiBOZXcgZmxhZyBgd2Fybl9pbmxpbmUnIGZvciB3YXJuaW5nIHdoZW4gYSBmdW5jdGlvbgorCWRlY2xhcmVkIGlubGluZSB3YXMgbm90IGluIGZhY3QgaW5saW5lZC4gIEFsc28sIG5ldyBmbGFnCisJYGZsYWdfbm9faW5saW5lJyB3aGljaCBkaXNhYmxlcyBmdW5jdGlvbiBpbmxpbmluZywgYnV0IHJldGFpbnMKKwlvdGhlciBwcm9wZXJ0aWVzIG9mIGlubGluZSBmdW5jdGlvbnMgKHN1Y2ggYXMgbGF6eSBjb21waWxhdGlvbgorCWFuZCB3cml0ZS1vbmx5LWlmLW5lZWRlZCkuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2hhbmdlZCBsb2dpYyBmb3IgaW5saW5lIGZ1bmN0aW9uCisJaGFuZGxpbmcgdG8gd29yayB3aXRoIGB3YXJuX2lubGluZScgYW5kIGBmbGFnX25vX2lubGluZScuCisJQWxzbyBtb2RpZmllZCB0byBjYWxsIGBzYXZlX2Zvcl9pbmxpbmVfbm9jb3B5JyB3aGVuIGluc25zIGFyZSB0byBiZQorCXNhdmVkIGJ1dCBub3QgaW1tZWRpYXRlbHkgY29tcGlsZWQuCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzKTogSWYgaW5zdGFudGlhdGluZyBhIGZ1bmN0aW9uCisJd2hpY2ggd2FzIHNhdmVkIGZvciBpbmxpbmUgZXhwYW5zaW9uLCBwcmVzZXJ2ZSB0aGUgcnRsIGNyZWF0ZWQKKwlieSB0aGUgaW5zdGFudGlhdGlvbiBhcyB3ZWxsLgorCisJKiBmbGFncy5oIChmbGFnX25vX2lubGluZSk6IE5ldyBmbGFnOyBpZiBub256ZXJvLCB0aGVuIG5vCisJY2FsbHMgYXJlIGlubGluZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZGVjbGFyYXRpb24uICBXZSBzdGlsbAorCXNhdmUgdGhlIGluc25zIGZvciB0aGVzZSBmdW5jdGlvbnMgaW4gREVDTF9TQVZFRF9JTlNOUyBzbyB0aGF0CisJdGhlIGZ1bmN0aW9ucyBuZWVkIG5vdCBiZSB3cml0dGVuIGlmIHRoZXkgYXJlIG5ldmVyIGNhbGxlZC4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJZiBgZmxhZ19ub19pbmxpbmUnIGlzIHNldCwgZG9uJ3QKKwlpbmxpbmUgdGhlIGNhbGwsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCB3YXMgZGVjbGFyZWQgaW5saW5lCisJb3Igbm90LgorCitUaHUgT2N0IDE4IDEzOjEwOjI2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBydGwuZGVmIChDT0RFX0xBQkVMKTogQWRkIG5ldyBzdHJpbmcgZmllbGQuCisJKiBydGwuaCAoTEFCRUxfTkFNRSk6IERlZmluZSBtYWNybyBmb3IgYWNjZXNzLgorCSogZW1pdC1ydGwuYyAoZ2VuX2xhYmVsX3J0eCk6IEluaXRpYWxpemUgaXQgdG8gMC4KKwkqIHN0bXQuYyAoZXhwYW5kX2xhYmVsKTogU3RvcmUgcHJvcGVyIG5hbWUgb2YgbGFiZWwuCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBDYWxsIHNkYm91dF9sYWJlbC4KKworCSogdHJlZS5oIChidWlsdF9pbl9mdW5jdGlvbik6IEFkZCBCVUlMVF9JTl9WQVJBUkdTLgorCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRGVjbGFyZSBfX2J1aWx0aW5fdmFyYXJncy4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBHZW5lcmF0ZSBjb2RlIGZvciBpdC4KKwlVc2VzIG5ldyBtYWNybyBFWFBBTkRfQlVJTFRJTl9WQVJBUkdTLgorCisJKiBzZGJvdXQuYyAoU0RCX0lTX0ZBS0UpOiBNYWNybyBkZWxldGVkLgorCShNQUtFX0xJTkVfU0FGRSk6IE5ldyBtYWNyby4KKwkoc2Rib3V0X2JlZ2luX2Jsb2NrLCBzZGJvdXRfZW5kX2Jsb2NrLCBzZGJvdXRfZW5kX2Z1bmN0aW9uKTogVXNlIGl0LgorCShzZGJvdXRfb25lX3R5cGUpOiBEZWxldGUgc3B1cmlvdXMgc2Vjb25kIGFyZyBpbiBhbGwgY2FsbGVycy4KKwkoc2Rib3V0X3R5cGVzLCBzZGJvdXRfZW5kX2Z1bmN0aW9uKToKKwlVc2Ugc2Rib3V0X2RlcXVldWVfYW5vbnltb3VzX3R5cGVzLgorCShzZGJvdXRfbGFiZWwpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGV4cHIuaCAoRlVOQ1RJT05fQVJHX0JPVU5EQVJZKTogRGVmYXVsdCBpcyBub3cgUEFSTV9CT1VOREFSWS4KKworCSogZ3ZhcmFyZ3MuaCwgdmEtKi5oICh2YV9kY2wpOgorCUFkZCBlbGxpcHNpcyBzbyBjdXJyZW50X2Z1bmN0aW9uX3ZhcmFyZ3MgaXMgc2V0LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBFeGl0IHB1c2gtb3B0aW1pemUgbG9vcCBhdCBlbmQgb2YgaW5zbnMuCisKK1RodSBPY3QgMTggMDc6MDk6MDYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVvcmcuYzogTWFqb3IgcmVvcmdhbml6YXRpb24uICBNYW55IHNwZWNpYWwgY2FzZXMgaGF2ZSBiZWVuIG1vdmVkCisJaW50byBtb3JlIGdlbmVyYWwgY29kZSBhbmQgYW4gb3ZlcmFsbCByZXN0cnVjdHVyaW5nIGhhcyBiZWVuIGRvbmUuCisJTnVtZXJvdXMgYnVncyBoYXZlIGJlZW4gZml4ZWQuCUhpZ2hsaWdodHM6CisJKGRicl9zY2hlZHVsZSk6IEZpcnN0IG1ha2UgbGlzdCBvZiBhbGwgaW5zbnMgbmVlZGluZyBmaWxsaW5nLiAgVGhlbgorCWl0ZXJhdGUgZm9yIHR3byBwYXNzZXMuCSBJbiBlYWNoIHBhc3MsIHRyeSB0d28gbWV0aG9kcyBvZiBmaWxsaW5nCisJZGVsYXkgc2xvdHMsIHRoZW4gZG8gc29tZSBjYW5vbmljYWxpemF0aW9ucywgd2hpY2ggbWF5IGNyZWF0ZSBtb3JlCisJaW5zbnMgdG8gZmlsbC4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBOb3cgdXNlcyBsaXN0IG9mIGluc25zIHRoYXQgbmVlZCBmaWxsaW5nLAorCXJhdGhlciB0aGFuIG1ha2luZyBzdWNoIGEgbGlzdC4KKwlFbmhhbmNlIGNvZGUgdGhhdCBmaW5kcyBpbnNucyB3aGVuIGNvZGUgcGF0aHMgbWVyZ2UgdG8gYWxsb3cgbXVsdGlwbGUKKwl1c2VzIG9mIHRoZSBsYWJlbCBhcyBsb25nIGFzIGFsbCB1c2VzIGFyZSBpbiB0aGUgc2tpcHBlZCBjb2RlLgorCShzdHJ1Y3QgcmVzb3VyY2UpOiBOb3RpY2Ugdm9sYXRpbGUgbWVtcmVmcy4KKwkoc3RvcF9zZWFyY2hfcCk6IEFsbG93IG9wdGlvbiB0byBjb250aW51ZSB3aGVuIGxhYmVsIGlzIHJlYWNoZWQuCisJKGZpbmRfZW5kX2xhYmVsLCBtYWtlX3JldHVybl9pbnNucyk6IE5ldyBmdW5jdGlvbnM7IHdoZW4gd2UgaGF2ZSBhCisJZmlsbGVkIGJyYW5jaCB0aGF0IGlzIHJlYWxseSBhIFJFVFVSTiwgZmlyc3QgY29udmVydCBpdCB0byBhIGp1bXAKKwl0byBhIHJldHVybiBsYWJlbCBhbmQgdGhlbiBsYXRlciBzZWUgaWYgdGhlIGluc25zIGluIHRoZSBkZWxheSBzbG90cworCWFyZSBhbHNvIHZhbGlkIGZvciBhIFJFVFVSTi4KKwkobW9zdGx5X3RydWVfanVtcCk6IFRlc3QgZm9yIGJyYW5jaCB0byBsb29wIGJlZ2lubmluZyByYXRoZXIgdGhhbgorCWJyYW5jaCBhdCBlbmQgb2YgbG9vcC4JQWxzbywgY29uZGl0aW9uYWwgcmV0dXJuIGluc25zIHByZWRpY3QgZmFsc2UuCisJKG93bl90aHJlYWRfcCk6IE5ldyBmdW5jdGlvbiB0byByZXBsYWNlIGZhbGxfdGhyb3VnaF90b19wLgorCSh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBPbmx5IHN1cHBvcnQgbWVyZ2luZyBpbnNucyBhbHJlYWR5IGluIGFuCisJaW5zbnMgZGVsYXkgbGlzdC4KKwkoZ2V0X2JyYW5jaF9jb25kaXRpb24sIGNvbmRpdGlvbl9kb21pbmF0ZXNfcCk6IE5ldyBmdW5jdGlvbnMuCisJKHN0ZWFsX2RlbGF5X2xpc3RfZnJvbV97dGFyZ2V0LGZhbGx0aHJvdWdofSk6IE5ldyBmdW5jdGlvbnMgdG8KKwlyZXBsYWNlIHN0ZWFsX2RlbGF5X2xpc3QuCisJKHJlZHVuZGFudF9pbnNuX3ApOiBOZXcgZnVuY3Rpb24uCisJKHVwZGF0ZV9ibG9jaywgbWFya190YXJnZXRfbGl2ZV9yZWdzLCBkYnJfc2NoZWR1bGUpOiBXaGVuIG1vdmluZworCWFuIGluc24gbm90IGF0IHRoZSBmcm9udCBvZiB0aGUgYmFzaWMgYmxvY2sgdG8gYSBkZWxheSBzbG90LAorCWxlYXZlIGEgImdob3N0IiBVU0Ugc28gdGhhdCB3ZSBjYW4gdHJhY2sgdGhpbmdzIGxpdmVuZWQgYW5kIGtpbGxlZC4KKwkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IEVsaW1pbmF0ZSB1c2Ugb2Ygc3RhdGljIHZhcnMgZm9yIG51bWJlcgorCW9mIHNsb3RzIHRvIGZpbGwgYW5kIGFscmVhZHkgZmlsbGVkLgorCVRyeSB0byBtb2RpZnkgYW4gaW5zbiB0aGF0IGZvbGxvd3MgYSByZWdpc3Rlci1yZWdpc3RlciBjb3B5IHRvIHVzZQorCXRoZSBvcmlnaW5hbCByZWdpc3RlcjsgdGhpcyBtYXkgY3JlYXRlIGEgZGVsYXktc2xvdCBvcHBvcnR1bml0eS4KKwkodHJ5X2hvaXN0X3RhcmdldHssXzF9KTogRGVsZXRlZC4KKwkocmVsYXhfZGVsYXlfc2xvdHMpOiBSZXdyaXR0ZW4gdG8ganVzdCBwZXJmb3JtIGNhbm9uaWNhbGl6YXRpb25zCisJcHJldmlvdXNseSBkb25lIGVsc2V3aGVyZS4gIE5vIGFjdHVhbCBkZWxheSBzbG90IGZpbGxpbmcgaXMgZG9uZQorCWhlcmUuICBBbnkgbmV3IGRlbGF5IHNsb3RzIGNyZWF0ZWQgd2lsbCBob3BlZnVsbHkgYmUgZmlsbGVkIGluIHRoZQorCW5leHQgcGFzcyBhcm91bmQgdGhlIGxvb3AgaW4gZGJyX3NjaGVkdWxlLgorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogRG9uJ3QgdHJ5IHRvIGNvbXB1dGUgYSBTVUJSRUcgb2YgYQorCWhhcmQgcmVnaXN0ZXIgaW4gYSBub24taW50ZWdlciBtb2RlIHdoZW4gcHVzaGluZyBhICJwYXJ0aWFsIiBhcmcuCisKKwkqIHJlY29nLmMgKHZhbGlkYXRlX2NoYW5nZSwgYXBwbHlfY2hhbmdlX2dyb3VwKTogQWZ0ZXIgcmVsb2FkLCBlbnN1cmUKKwl0aGF0IG9wZXJhbmRzIG1lZXQgdGhlIGNvbnN0cmFpbnRzIGJ5IGNhbGxpbmcgY29uc3RyYWluX29wZXJhbmRzLgorCSh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xKTogQ29uc2lkZXIgdHdvIHJ0eCBlcXVhbCBpZiB0aGV5IHJlZmVyIHRvCisJdGhlIHNhbWUgcmVnaXN0ZXIuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEV4dGVuZCBjaGFuZ2Ugb2YgT2N0IDE2dGggdG8gaGFuZGxlCisJdGhlIG90aGVyIHVzYWdlIG9mIGZpbmRfZXF1aXZfcmVnOyByZW1vdmUgaW52YWxpZCBkZWF0aCBub3RlcyB0aGVyZS4KKworCSogcnM2MDAwLm1kLCB0bS1yczYwMDAuaCwgb3V0LXJzNjAwMC5jLCB4bS1yczYwMDAuaCwgbWFrZS1yczYwMDA6CisJTmV3IGZpbGVzLgorCisJKiBvdXQtYTI5ay5jIChleHRyYWN0X3N1YndvcmQpOiBVc2UgZ2VuX3toaWdoLGxvd31wYXJ0IGZyb20KKwlhbiBGUCBDT05TVF9ET1VCTEUgaWYgaG9zdCBhbmQgdGFyZ2V0IGZsb2F0IGZvcm1hdHMgYXJlIHRoZSBzYW1lCisJb3IgUkVBTF9JU19OT1RfRE9VQkxFLgorCisJKiBvdXQtcm9tcC5jIChvdXRwdXRfZnBvcCwgb3V0cHV0X2Zwb3BzKTogUHJvdmlkZSBmcjAgYXMgYSBzY3JhdGNoCisJcmVnaXN0ZXIgdW5sZXNzIGl0IGlzIHVzZWQgaW4gdGhlIGluc24uCisKKwkqIHJvbXAubWQ6IEluIGNvbWJpbmVkIHNldCBDQzAgYW5kIG1vdmUsIG9wdGltaXplIGNhc2Ugd2hlcmUgbW92ZQorCWlzIG5vcC4KKwkoREYgbW92ZXMpOiBGaXggdHlwbyBpbiBnZW5lcmF0aW9uIG9mIGBnZXQnIGluc24uCisJRG9uJ3Qgc3BsaXQgaWYgaW5wdXQgaXMgQ09OU1RfRE9VQkxFIGJlY2F1c2Ugd2UgY2FuJ3QgZWFzaWx5CisJZ2VuZXJhdGUgdGhlIHByb3BlciBjb25zdGFudHMuCisJKGNhbGwgcGF0dGVybnMpOiBDb3B5IGRhdGEgYXJlYSBhZGRyZXNzIHZpYSBhIHBzZXVkbyB0byBhbGxvdworCWJldHRlciBDU0UnaW5nLgorCisJKiB0bS1yb21wLmggKFJUWF9DT1NUUyk6IE1lbW9yeSBpcyBleHBlbnNpdmUsIGV4Y2VwdCBmb3IgYSByZWZlcmVuY2UKKwl0byBvdXIgb3duIGRhdGEgYXJlYSwgd2hpY2ggaXMgdmVyeSBjaGVhcC4KKwkoQUREUkVTU19DT1NUKTogUmVmZXJlbmNlcyB0byB0aGUgY29uc3RhbnQgcG9vbCBhcmUgYXMgY2hlYXAgYXMKKwlyZWdpc3RlciArIG9mZnNldCwgc2luY2UgdGhhdCdzIHdoYXQgaXQgd2lsbCBiZS4KKworCSogZW1pdC1ydGwuYyAoZ2VuX3tsb3csaGlnaH1wYXJ0KTogQ2FuIG9mdGVuIGV4dHJhY3Qgd29yZCBmcm9tIEZQCisJQ09OU1RfRE9VQkxFIHdoZW4gaG9zdCBhbmQgdGFyZ2V0IGZsb2F0aW5nIGZvcm1hdHMgYWdyZWUuCisJKGFkZF9pbnNuX2FmdGVyKTogTm8gbG9uZ2VyIHN0YXRpYy4KKworCSogcmVsb2FkMS5jIChyZWdfZXF1aXZfbWVtb3J5X2xvYyk6IFJlbmFtZWQgZnJvbSByZWdfZXF1aXZfc3RhY2tfc2xvdAorCWFuZCBub3cgc3RhdGljLgorCShyZWxvYWQpOiBJZiBoYXZlIGVxdWl2YWxlbmNlIHdpdGggY29uc3RhbnQgdGhhdCBpcyBub3QgYSBsZWdpdGltYXRlCisJY29uc3RhbnQgb3BlcmFuZCwgZm9yY2UgaXQgaW50byBtZW1vcnkgYW5kIGhhbmRsZSB0aGlzIGFzIGFuCisJZXF1aXZhbGVuY2UgdG8gbWVtb3J5LgorCSogcmVsb2FkLmggKHJlZ19lcXVpdl9zdGFja19sb2MpOiBEZWxldGVkLgorCitXZWQgT2N0IDE3IDIwOjUwOjU4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBnY2MuYywgY2NjcC5jIChtYWluKTogVXNlIFRBUkdFVF9WRVJTSU9OIGlmIC12LgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBUeXBvIGluIGxhc3QgY2hhbmdlLgorCisJKiBNYWtlZmlsZS5pbiAodG1wZ251bGliKTogU3VwcG9ydCBhc3NlbWJsZXIgZmlsZXMgbmFtZWQgKi5hc20uCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBOdWxsLXRlcm1pbmF0ZSBlcnJvciBtZXNzYWdlLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCk6IEhhbmRsZSBzdWJyZWcgYXMgREVDTF9SVEwuCisJVGhpcyBoYXBwZW5zIGZvciB2YXJzIGZyb20gdGhlIHBhcm1zIG9mIGlubGluZSBmdW5jdGlvbnMuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IExpa2V3aXNlLgorCisJKiBnZW5hdHRyLmMgKGZhbmN5X2Fib3J0KTogTmV3IGZ1bmN0aW9uLCBhcyBpbiBnZW4qLmMuCisKK1dlZCBPY3QgMTcgMTQ6NTM6NDggMTk5MCAgTWljaGFlbCBJLiBCdXNobmVsbCAgKG1pYiBhdCBnZWVjaC5haS5taXQuZWR1KQorCisJKiBwY3AuaDogTmV3IGZpbGUuCisKKwkqIGNjY3AuYzogU3VwcG9ydCB1c2Ugb2YgcHJlY29tcGlsZWQgZmlsZXMKKwlJbmNsdWRlICJwY3AuaCIuCisJKG5vX3ByZWNvbXAsIHN0cmluZ2xpc3QsIHN0cmluZ2xpc3RfdGFpbHApOiBOZXcgdmFyaWFibGVzLiAKKwkodW5pb24gaGFzaHZhbCk6IE5ldyBmaWVsZCBga2V5ZGVmJy4KKwkoZW51bSBub2RldHlwZSk6IE5ldyBhbHRlcm5hdGl2ZSBgVF9QQ1NUUklORycuCisJKG1haW4pOiBTdXBwb3J0IC1ub3ByZWNvbXAuCisJVXNlIHdyaXRlX291dHB1dCB0byB3cml0ZSBvdXRwdXQuCisJKHJlc2Nhbik6IENhbGwgcGNzdHJpbmdfdXNlZCBmb3IgVF9QQ1NUUklORyBzeW1ib2xzLgorCShkb19pbmNsdWRlKTogTmV3IGxvY2FsIHZhcmlhYmxlcyBwY2Z0cnksIHBjZm5hbWUsIHBjZiwgcGNmYnVmLCAKKwlwY2ZidWZsaW1pdCwgYW5kIHBjZm51bS4KKwlDaGVjayBmb3IgcG9zc2libGUgdXNlIG9mIHByZWNvbXBpbGVkIGZpbGVzLgorCShjaGVja19wcmVjb21waWxlZCk6IE5ldyBmdW5jdGlvbi4KKwkoY2hlY2tfcHJlY29uZGl0aW9ucyk6IE5ldyBmdW5jdGlvbi4KKwkocGNmaW5jbHVkZSk6IE5ldyBmdW5jdGlvbi4KKwkocGNzdHJpbmdfdXNlZCk6IE5ldyBmdW5jdGlvbi4KKwkod3JpdGVfb3V0cHV0KTogTmV3IGZ1bmN0aW9uLgorCShjcmVhdGVfZGVmaW5pdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkoZG9fZGVmaW5lKTogTW92ZWQgbW9zdCBvZiB0aGUgd29yayBpbnRvIGNyZWF0ZV9kZWZpbml0aW9uLgorCShkdW1wX3NpbmdsZV9tYWNybyk6IE5ldyBmdW5jdGlvbi4KKwkoZHVtcF9hbGxfbWFjcm9zKTogTW92ZWQgbW9zdCBvZiB0aGUgd29yayBpbnRvIGR1bXBfc2luZ2xlX21hY3JvLgorCShkdW1wX2RlZm5fMSk6IE5ldyBhcmd1bWVudCBPRi4KKwkoZHVtcF9hcmdfbik6IE5ldyBhcmd1bWVudCBPRi4KKworCSogY2NjcC5jOiBTdXBwb3J0IGdlbmVyYXRpb24gb2YgcHJlY29tcGlsZWQgZmlsZXMKKwkocGNwX291dGZpbGUsIHBjcF9pbnNpZGVfaWYpOiBOZXcgdmFyaWFibGVzLgorCShzdHJ1Y3QgZGVmaW5pdGlvbik6IE5ldyBmaWVsZCBgcHJlZGVmaW5lZCcuCisJKG1haW4pOiBTdXBwb3J0IC1wY3AuCisJKHJlc2Nhbik6IERvbid0IGV4cGFuZCBtYWNyb3Mgb3V0c2lkZSAjaWYgZHVyaW5nIC1wY3AuCisJKHNwZWNpYWxfc3ltYm9sKTogRXJyb3IgZm9yIG1vc3Qgc3BlY2lhbCBzeW1ib2xzIGR1cmluZyAjaWYgaW4gLXBjcC4KKwlPdXRwdXQgcHJlY29uZGl0aW9uIGZvciBUX0NPTlNUIGFuZCBUX1NQRUNfREVGSU5FRCBzeW1ib2xzLgorCShldmFsX2lmX2V4cHJlc3Npb24pOiBTZXQgYW5kIGNsZWFyIHBjcF9pbnNpZGVfaWYuCisJKGRvX2lmeGRlZik6IE91dHB1dCBwcmVjb25kaXRpb25zLgorCitUdWUgT2N0IDE2IDEzOjIyOjA1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogRm9yIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMsCisJbWFrZSBpdCB0cnVlIHRoYXQgemVyby1sZW5ndGggZmllbGQgYWZmZWN0cyBhbGlnbm1lbnQgb2YgbmV4dCBmaWVsZC4KKworCSogcnRsYW5hbC5jIChnZXRfaW50ZWdlcl90ZXJtLCBnZXRfcmVsYXRlZF92YWx1ZSk6IE1vdmVkIGZyb20gY3NlLmMuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gcmV1c2luZyB2YWx1ZSB2aWEgZmluZF9lcXVpdl9yZWcsCisJZGVsZXRlIG9ic29sZXRlIGRlYXRoIG5vdGUuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCwgc3RvcmVfYml0X2ZpZWxkKToKKwlIYW5kbGUgZmllbGRzIHdpZGVyIHRoYW4gYSB3b3JkLgorCVJlc3RyaWN0IHNwZWNpYWwgY2FzZSBmb3Igd29yZC1zaXplZCBmaWVsZCB0byBhbGlnbmVkIHdvcmRzLgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQsIHN0b3JlX2JpdF9maWVsZCk6IERvbid0IGxldAorCUJFU1RNT0RFIGJlIGJpZ2dlciB0aGFuIHRoZSBpbnNuIGNhbiBoYW5kbGUuCisKKwkqIE1ha2VmaWxlLmluICh0bXBnbnVsaWIpOiBGaXggdHlwb3MgaGFuZGxpbmcgTElCRlVOQ1NfRVhUUkEuCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IFR1cm4gb24gY29kZSB0byBoYW5kbGUgIyBMSU5FTlVNLAorCWFuZCBtb3ZlIGluaXRpYWxpemF0aW9ucyBwYXN0IHRoZSBsYWJlbCBgb2xkX2xpbmVudW0nLgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBJZiB0cmFkaXRpb25hbCwgbWFrZSBiaXRmaWVsZHMgdW5zaWduZWQuCisJKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBkbyB0aGF0IGhlcmUuCisKKwkqIGZpeGluY2x1ZGVzIChDVFJMKTogRG9uJ3QgcHV0IHF1b3RlcyBhcm91bmQgYSBxdW90ZS4KKworCSogc3RkZGVmLmggKHNpemVfdCk6IEFsc28gaW5oaWJpdCBpZiBfU0laRV9UXy4KKworTW9uIE9jdCAxNSAxMzoxNTozMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTWFrZSBmbGFnX3NpZ25lZF9iaXRmaWVsZHMgd29yaworCWZvciBpbnQgYW5kIGZvciB0eXBlZGVmcy4KKworU3VuIE9jdCAxNCAyMToyODozMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogTm8gaGFyZCByZWdzIGZvciBhbnkgcHNldWRvcyBsaXZlIGF0IHNldGptcC4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IHN1cHByZXNzIHdhcm5pbmcgZm9yIGZuIGRlZm4KKwlhZnRlciBpbXBsaWNpdCBkZWNsYXJhdGlvbiwgaWYgZm4gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLgorCitGcmkgT2N0IDEyIDE1OjU0OjExIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHhkZWNscyk6IEFsbG93IGVsbGlwc2lzIGFmdGVyIHBhcm0gZGVjbHMuCisJQ2FsbCBjX21hcmtfdmFyYXJncy4KKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IENsZWFyIGNfZnVuY3Rpb25fdmFyYXJncy4KKwkoY19tYXJrX3ZhcmFyZ3MpOiBOZXcgZnVuY3Rpb24uCSBTZXQgaXQuCisJKHN0b3JlX3Bhcm1fZGVjbHMpOiBNYXliZSBjYWxsIG1hcmtfdmFyYXJncy4KKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBDbGVhciBjdXJyZW50X2Z1bmN0aW9uX3ZhcmFyZ3MuCisJKG1hcmtfdmFyYXJncyk6IE5ldyBmdW5jdGlvbi4gIFNldCBpdC4KKworVGh1IE9jdCAxMSAxMzoxNTozNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ2VuYXR0cnRhYi5jIChmYW5jeV9hYm9ydCk6IE5ldyBmdW5jdGlvbiwgYXMgaW4gZ2VuKi5jLgorCisJKiBleHByLmMgKHNhdmVyZWdzX3ZhbHVlKTogTmV3IHZhcmlhYmxlLgorCShpbml0X2V4cHIsIHNhdmVfZXhwcl9zdGF0dXMsIHJlc3RvcmVfZXhwcl9zdGF0dXMpOgorCUluaXQsIHNhdmUsIHJlc3RvcmUgdGhlIHZhcmlhYmxlLgorCShleHBhbmRfYnVpbHRpbik6IERvbid0IGNhbGwgX19idWlsdGluX3NhdmVyZWdzIHR3aWNlIGluIG9uZSBmdW5jdGlvbi4KKworCSogdmEtKi5oOiBSZW5hbWUgYWxsIHN0cnVjdHVyZSBmaWVsZHMgdG8gc3RhcnQgd2l0aCBfXy4KKwkqIHZhLXB5ci5oOiBSZW5hbWUgdmFyaWFibGVzIGFsc28uCisJKHZhX3N0YXJ0KTogRGVsZXRlIHRoZSB1bm1hdGNoZWQgey4KKwkodmFfZW5kKTogTm93IGEgbm9wLgorCitXZWQgT2N0IDEwIDIyOjAzOjIwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiB2YS1zcGFyYy5oIChfX3ZhX2N0bCk6IFJlbmFtZSBmaWVsZHMgdG8gc3RhcnQgd2l0aCBfXy4KKworVHVlIE9jdAkgOSAxMjo1NTo0OCAxOTkwICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogQWxsb3cgY29uZmlndXJhdGlvbiB0byBzcGVjaWZ5IHNpemUgb2YgYSB3aWRlIGNoYXJhY3Rlci4KKwkoV0NIQVJfVFlQRV9TSVpFKTogTmV3IHBhcmFtZXRlci4KKwkoV0NIQVJfVU5TSUdORUQpOiBOZXcgcGFyYW1ldGVyLCBzYXlzIHdoZXRoZXIgdHlwZSBpcyBzaWduZWQuCisKKwkqIGMtZGVjbC5jIChXQ0hBUl9UWVBFX1NJWkUpOiBEZWZpbmUgaWYgbm90IGRlZmluZWQuCisJKFdDSEFSX1VOU0lHTkVEKTogTGlrZXdpc2UuCisJKHdjaGFyX3R5cGVfbm9kZSwgc2lnbmVkX3djaGFyX3R5cGVfbm9kZSwgdW5zaWduZWRfd2NoYXJfdHlwZV9ub2RlKToKKwkod2NoYXJfYXJyYXlfdHlwZV9ub2RlKTogTmV3IHZhcmlhYmxlcy4KKwkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0IHRoZW0uCisJKiBjLXRyZWUuaDogTWFrZSB0aGVtIGV4dGVybi4KKworCSogYy1jb21tb24uYyAoV0NIQVJfVFlQRV9TSVpFLCBXQ0hBUl9CWVRFUyk6IERlZmluZSB0aGVtLgorCShjb21iaW5lX3N0cmluZ3MpOiBIYW5kbGUgdGhlbS4KKwkqIGMtcGFyc2UueSAoaW5pdF9sZXgsIHl5bGV4KTogTGlrZXdpc2UuCisKKwkqIGMtdHlwZWNrLmggKGRpZ2VzdF9pbml0KTogVXNlIHdjaGFyX3R5cGVfbm9kZSBhbmQKKwlzaWduZWRfd2NoYXJfdHlwZV9ub2RlIHRvIGdldCB0aGUgYmFzZSB0eXBlIG9mIHdpZGUgc3RyaW5ncywgcmF0aGVyCisJdGhhbiB1c2luZyBpbnQgYW5kIHVuc2lnbmVkLgorCitUdWUgT2N0CSA5IDE0OjE2OjM3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBUeXBvOyBzZWN0aW9uIGZvciBleHR2IHVzZWQgZXh0enYuCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogRXJyb3IgaWYgdW5pb24gaGFzIG5vIG5hbWUgZmllbGQuCisJKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IEZvciB1bmlvbiwgdXNlIGZpcnN0IG5hbWVkIGZpZWxkLgorCisJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IEluY2x1ZGUgTk9URSBhdCBlbmQgb2YgYmxvY2sgaW4gc2Nhbi4KKworCSogZml4aW5jbHVkZXM6IEZpeCBtaXNzaW5nIHNlbWljb2xvbiBpbiByc3RhdC5oLgorCisJKiBjY2NwLmMgKG1haW4pOiBSZWNvcmQgdGhlIG9wdGlvbiBuYW1lcyB1c2VkIGZvciBhc3NlcnRpb25zLgorCUNhbGwgbWFrZV9hc3NlcnRpb24gcHJvcGVybHkuCisKK1R1ZSBPY3QJIDkgMDY6MTg6MzggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGZvbGRfcnR4KTogQ2FsbCBmaW5kX2Jlc3RfYWRkciBiZWZvcmUgc2VlaW5nIGlmIHdlIGtub3cKKwl3aGF0IGlzIGxvY2F0ZWQgYXQgdGhhdCBhZGRyZXNzLgorCURvbid0IHRyeSB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGFuIEFERFJfRElGRl9WRUMgdGFibGU7IHdlIGhhdmUKKwlubyBzaW1wbGUgd2F5IG9mIHJlcHJlc2VudGluZyBpdC4KKwkoY3NlX2luc24pOiBEZXRlY3QgU1JDID09IERFU1QgZXZlbiB3aGVuIERFU1QgaXMgbm90IHRoZSBjYW5vbmljYWxpemVkCisJZm9ybSBvZiB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgU1JDLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IERvbid0IHNldCBUSFJFU0hPTEQgdW50aWwgTE9PUF9IQVNfQ0FMTAorCWhhcyBiZWVuIHNldC4KKwkoc3RydWN0IGluZHVjdGlvbik6IEFkZCBmaWVsZCBNRU1fTU9ERS4KKwkoZmluZF9tZW1fZ2l2cywgY29tYmluZV9naXZzX3ApOiBSZWNvcmQgbW9kZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkKKwl3aGVuIG1ha2luZyBERVNUX0FERFIgZ2l2IGFuZCB1c2UgaXQgdG8gdGVzdCB2YWxpZGl0eSBvZgorCWRlcml2ZWQgYWRkcmVzcy4KKworCSoganVtcC5jIChkZWxldGVfanVtcCk6IE5vIGxvbmdlciBzdGF0aWMuCisJKGludmVydF9qdW1wKTogQWxsb3cgY2hhbmdpbmcgUkVUVVJOcyB0byBicmFuY2hlcyBhbmQgdmljZSB2ZXJzYS4KKwlOb3cgcmV0dXJucyBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdGlvbiBsaWtlIHJlZGlyZWN0X2p1bXAuCisJKiBydGwuaCAoZGVsZXRlX2p1bXApOiBEZWZpbmUuCisKKwkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBEb24ndCBleHBhbmQgYSBgcGFydGlhbCcgYXJnIGludG8KKwlhcmctPnN0YWNrIGFuZCBkb24ndCBzZXQgYXJnLT52YWx1ZSB0byBhcmctPnN0YWNrX3Nsb3QgZm9yCisJc3VjaCBhcmdzLgorCUNsZWFuIHVwIGJ5IGJyZWFraW5nIG91dCBjb21tb24gY29kZS4KKworTW9uIE9jdAkgOCAxNTowOTozMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChjYW5fZWxpbWluYXRlX2Jpdl9wKTogSW5zaXN0IHRoYXQgbXVsdF92YWwgYmUgcG9zaXRpdmUuCisKKwkqIE1ha2VmaWxlLmluIChpbnNuLSopOiBSZW1vdmUgc2VtaWNvbG9uIGZyb20gdGhlc2UgcnVsZXMuCisJKElOU1RBTExfUFJPR1JBTSwgSU5TVEFMTF9GSUxFKTogTmV3IHZhcmlhYmxlcy4KKwkoaW5zdGFsbC0qKTogVXNlIHRob3NlIHZhcmlhYmxlcy4KKwkobWFuZGlyKTogRGVmYXVsdCBiYXNlZCBvbiBtYW5leHQuCisKK01vbiBPY3QJIDggMTA6NTc6MTQgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKGV4cGFuZF9jYXRjaF9kZWZhdWx0KTogUmV0dXJuIDEgaWYgRVhDRVBUX1NUQUNLIGlzCisJbm9uemVyby4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogQXJndW1lbnQgdG8gZmxvb3JfbG9nMiBpbgorCWNhbGN1bGF0aW9uIG9mIG5lZ3ByZWNpc2lvbiB3YXMgbm90IG5lZ2F0ZWQuCisKK01vbiBPY3QJIDggMDY6NTA6MTUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmggKElOU05fQU5OVUxMRURfQlJBTkNIX1AsIElOU05fRlJPTV9UQVJHRVRfUCk6IE5ldyBmaWVsZHMuCisKK1N1biBPY3QJIDcgMjM6MzM6MjQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRtLWkzODZ2LmggKFNUQVJURklMRV9TUEVDKTogSGFuZGxlIC1wIGhlcmUuCisJKExJQl9TUEVDKTogTm90IGhlcmUuCisKK1RodSBPY3QJIDQgMDU6MDY6MDIgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19PUFRJTUlaRV9fIGZvciAle08qfSwgbm90IGp1c3QKKwkle099LiBUaGlzIHBlcm1pdHMgdGhlIHVzZSBvZiAtTzIsIC1PMywgZXRjLiwgd2l0aCBwcmVkaWN0YWJsZQorCXJlc3VsdHMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEbyBub3QgYnVpbGQgbmV3IGNsZWFudXBzIGZvcgorCVRBUkdFVF9FWFBScy4gIFRoZWlyIGNsZWFudXBzIGFyZSBub3cgaGFuZGxlZCBlbnRpcmVseSBieSB0aGUKKwlsYW5ndWFnZS1zcGVjaWZpYyBjb2RlIHRoYXQgY2F1c2VzIHRoZW0gdG8gYmUgZ2VuZXJhdGVkLgorCisJKiBmdW5jdGlvbi5jICh7cHVzaCxwb3B9X3RlbXBfc2xvdHMpOiBEbyBub3QgY2hhbmdlCisJdGVtcF9zbG90X2xldmVsIGlmIHdpdGhpbiBhIHNlcXVlbmNlLiAgR05VIEMrKyBtdXN0IGJlIGFibGUgdG8KKwllbWl0IGEgc2VxdWVuY2UgaXQgaXMgYnVpbGRpbmcgYW55d2hlcmUgYXQgdGhlIGxldmVsIHRoZSBzZXF1ZW5jZQorCXdhcyBpbml0aWF0ZWQuCUlmIHRoZSBsZXZlbCBpcyBjaGFuZ2VkIHdoZW4gYnVpbGRpbmcgYSBzZXF1ZW5jZSwKKwl0ZW1wb3JhcmllcyBjb3VsZCBiZSB1bndpdHRpbmdseSBzaGFyZWQuCisKKwkqIGNwbHVzLXRyZWUuZGVmOiBjaGFuZ2UgcHJpbnQgc3RyaW5ncyBmb3IgTkVXX0VYUFIgYW5kCisJQ1BMVVNfQ0FUQ0hfREVDTC4KKworCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBTdXBwb3J0IGBsb25nIGxvbmcnIHR5cGVzLgorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9maWxlKTogTm8gbG9uZ2VyIHRyeSB0byBlbWl0IF9pbml0LF9maW5pCisJcmVjb3JkcyBmb3IgR05VIEMrKy4gIFRoaXMgd2FzIHN1cHBvc2VkIHRvIGhlbHAgdGhlIFN1bk9TIGR5bmFtaWMKKwlsaW5rZXIgbGluayBDKysgY29kZSwgYnV0IGl0IHR1cm5lZCBvdXQgbm90IHRvIHdvcmsuCisKKwkqIGNwbHVzLWRlY2wuYyAoe3N0YXJ0LGZpbmlzaH1fZnVuY3Rpb24pOiBEb24ndCBlbWl0IGFuIGV4dHJhCisJYmluZGluZyBjb250b3VyIGlmIG5vdCBpbiBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3IuCUl0IGlzIG5vdAorCW5lZWRlZCwgYW5kIHNhdmVzIHdyaXRpbmcgb3V0IHVubmVlZGVkIGRlYnVnZ2luZyBpbmZvLgorCisJKiBjcGx1cy1jbGFzcy5jIChidWlsZF9tZXRob2RfY2FsbCk6IENvbmRpdGlvbmFsaXplIGhhbmRsaW5nIG9mCisJd3JhcHBlcnMgYW5kIG9wZXJhdG9yLT4oKTsgdGhlc2UgYXJlIG5vdyBvbmx5IGNvbXBpbGVkIGlmIEVTS0lUIGlzCisJI2RlZmluZWQuCisKKwkqIGNwbHVzLWRlY2wuYyAoZGVmaW5lX2xhYmVsKTogVXBkYXRlZCB0byB0cmVhdCBsYWJlbHMgaW4gdGhlIHNhbWUKKwluZXcgZmFzaGlvbiB0aGF0IGMtZGVjbC5jIHRyZWF0cyB0aGVtLgorCisJKiBjcGx1cy0qLmM6IEMrKyBmcm9udC1lbmQgZmlsZXMgbm93IHN1cHBvcnQgYSBnZW5lcmljCisJY2xhc3MtYnJvd3NlciBpbnRlcmZhY2UuICBJdCBpcyB1cCB0byBzb21lIGFkdmVudHVyb3VzIGhhY2tlciB0bworCWltcGxlbWVudCB0aGUgY2xhc3MgYnJvd3Nlci4KKworCSogY3BsdXMtKi5jOiBDKysgZnJvbnQtZW5kIGZpbGVzIG5vIGxvbmdlciAjaW5jbHVkZSBydGwuaC4KKworU3VuIFNlcCAzMCAxNTo1MzowMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWtlX2Fzc2VydGlvbik6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IEhhbmRsZSAtQSBieSBjYWxsaW5nIG1ha2VfYXNzZXJ0aW9uLgorCS1BLSBnZXRzIHJpZCBvZiBwcmVkZWZpbmVkIG1hY3JvcyBhbmQgdGhvc2Ugc3BlY2lmaWVkIGVhcmxpZXIuCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZV9icmllZik6IERlY2xhcmUgaSBmb3IgcHJpbnRpbmcgUkVBTF9DU1QuCisKKwkqIHJlY29nLmMgKGltbWVkaWF0ZV9vcGVyYW5kLCBub25tZW1vcnlfb3BlcmFuZCk6IERvbid0IGFjY2VwdAorCWludGVnZXIgY29uc3RhbnRzIGlmIGNhbGxlciB3YW50cyBhIGZsb2F0aW5nIG1vZGUuCisKK1NhdCBTZXAgMjkgMTg6NDA6MDggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBIYW5kbGUgcHJlc2VydmluZyBkZWF0aCBpbmZvCisJd2l0aCBmaW5kX2VxdWl2X3JlZy4KKworCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogSGFuZGxlIElOU05fQ0xPQkJFUlNfUkVHTk9fUC4KKworCSogZml4aW5jbHVkZXM6IEZvciBsaW5rIHBvaW50aW5nIG91dHNpZGUgL3Vzci9pbmNsdWRlLAorCXVzZSAkeCByYXRoZXIgdGhhbiAkZGVzdC4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCwgZXhwYW5kX2ZpeCk6IFVzZSBkY29uc3QxLCBub3QgMS4wLgorCitTYXQgU2VwIDI5IDA2OjM4OjM4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IFVzZSBlbWl0X2luc25fYWZ0ZXIgYW5kIGRlbGV0ZV9pbnNuIHRvCisJZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgaW5zbiBjaGFpbiBpcyBtYWludGFpbmVkIGluIHRoZSBwcmVzZW5jZSBvZgorCVNFUVVFTkNFczsgYmUgY2FyZWZ1bCBpZiB0aGUgaW5zbiBiZWluZyBzcGxpdCBoYXMgYSBmb2xsb3dpbmcgQkFSUklFUi4KKwkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBDb3JyZWN0bHkgdXBkYXRlIGluc24gY2hhaW4gd2hlbiBkZWxldGluZworCWluc24gZm9sbG93aW5nIG9yIHByZWNlZWRpbmcgYSBTRVFVRU5DRS4KKworRnJpIFNlcCAyOCAxNjowNzo0MiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55ICh5eWxleCk6IFVzZSBSRUFMX1ZBTFVFX1RSVU5DQVRFIGZvciBgZicgc3VmZml4LgorCisJKiBmb2xkLWNvbnN0LmMgKGNvbnN0X2Jpbm9wKTogRG9uJ3QgaW5pdGlhbGl6ZSBSRUFMX1ZBTFVFX1RZUEUgZGVjbHMuCisKK1RodSBTZXAgMjcgMTQ6MDY6MzcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBTZXQgTUVNX1ZPTEFUSUxFX1AgZnJvbSBUUkVFX1RISVNfVk9MQVRJTEUuCisKK1dlZCBTZXAgMjYgMDA6MjE6MjMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRtLW1pcHMtbmV3cy5oOiBOZXcgZmlsZS4KKworCSogb3V0LWk4NjAuYyAob3V0cHV0X3NpemVfZm9yX2Jsb2NrX21vdmUpOiBEb24ndCBkZWNyZW1lbnQuCisJKG91dHB1dF9ibG9ja19tb3ZlKTogRGVjcmVtZW50IGluaXRpYWwgc3RvcmluZyBhZGRyZXNzIGluc3RlYWQuCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBBbHdheXMgdHJ5IHVuc2lnbmVkIGludCBpZiBgdScgaXMgd3JpdHRlbi4KKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBEb24ndCBsZXQgJiogbWFrZSBhbiBsdmFsdWUuCisKKwkqIGMtcGFyc2UueSAoaW5pdGxpc3QpOiBVc2UgW05dIHJhdGhlciB0aGFuIGNhc2UgTjogZm9yIGFycmF5IGluZGV4LgorCisJKiB0bS1zZXEzODYuaCAoTElOS19TUEVDKTogRGVmaW5lIGl0LgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogRG9uJ3QgdHJ5IHNpZ25lZCBpbnQgZm9yIG5vbmRlY2ltYWwgY29uc3RhbnQKKwlpZiAtdHJhZGl0aW9uYWwuICBJbXByb3ZlIG1lc3NhZ2VzIGZvciAtV3RyYWRpdGlvbmFsLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogQXZvaWQgdXNpbmcgREVDTF9TSVpFX1VOSVQuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFNjYW4gYWxsIGluc25zIGZvciBsYWJlbCByZWZzLgorCShtYXJrX2p1bXBfbGFiZWwpOiBRdWlja2x5IGlnbm9yZSB1bmludGVyZXN0aW5nIHJ0bCB0eXBlcy4KKwkqIHJ0bC5kZWYgKElOU04sIENBTExfSU5TTik6IEFkZCBhIHNsb3QgZm9yIEpVTVBfTEFCRUwuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFRyeSBjb21iaW5pbmcgc3RhY2sgYWRqdXN0cyB3aXRoIHB1c2hlcy4KKworTW9uIFNlcCAyNCAwNzozMTo0MCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogRW1pdCBiYXJyaWVyIGFmdGVyIGp1bXAuCisKKwkqIGV4cHIuYyAoY2FzZSBMQUJFTF9ERUNMKTogUmV0dXJuIGEgTUVNLCBzbyB3ZSBjYW4gdGFrZSBpdHMKKwlhZGRyZXNzOyBjb3JyZWN0bHkgZm9ybSBMQUJFTF9SRUYuCisKK1N1biBTZXAgMjMgMjI6NTQ6MzggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9vcC5jIChzdHJ1Y3QgbW92YWJsZSk6IERlbGV0ZSBmaWVsZCBTRVRfRVFVQUw7IG5ldyBmaWVsZCBNT1ZFX0lOU04uCisJKHNjYW5fbG9vcCk6IE9ubHkgdXNlIFJFR19FUVVBTCBub3RlIHVuZGVyIHZlcnkgcmVzdHJpY3RlZAorCWNpcnN1bXN0YW5jZXMuCVNldCBNT1ZFX0lOU04gZmllbGQgaW4gbW92YWJsZXMgd2hlbiBhcHByb3ByaWF0ZS4KKwkoY29tYmluZV9tb3ZhYmxlcyk6IFNpbXBsaWZ5IG1hdGNoaW5nIHRlc3Qgbm93IHRoYXQgd2Ugb25seSBoYXZlIG9uZQorCXNvdXJjZSBmaWVsZC4KKwkobW92ZV9tb3ZhYmxlcyk6IEhhbmRsZSBNT1ZFX0lOU04gbW92YWJsZXMgYnkgZW1pdHRpbmcgYSBuZXcgbW92ZQorCWluc24gaW4gZnJvbnQgb2YgdGhlIGxvb3AuCisJQ29ycmVjdCB0eXBvIGluIGNoZWNraW5nIGZvciBDQUxMX0lOU04uCisJRG9uJ3QgdHJ5IHRvIG1ha2UgYSBSRUdfRVFVQUwgbm90ZS4KKwkoY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSBleHRyYW5lb3VzIGFzc2lnbm1lbnQgdG8gTUFZX05PVF9NT1ZFLgorCitTdW4gU2VwIDIzIDE0OjU5OjIxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKFNfSVNSRUcpOiBEZWZpbmUgaXQgdW5sZXNzIG92ZXJyaWRkZW4uCisJKG1haW4sIGZpbmNsdWRlKTogVXNlIHRoYXQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgaW5zbiBhZnRlciBhIGZ1bmN0aW9uIGNhbGwgdXNlcyB0aGUKKwlmdW5jdGlvbiB2YWx1ZSwgYW5kIHRoYXQgcmVnIGlzIHNwaWxsZWQsIGFuZCB0aGUgaW5zbiBtaWdodAorCXVzZSBpdCBmb3IgcmVsb2FkaW5nLCBhZGQgYW4gZXh0cmEgbmVlZC4KKwkocmVsb2FkX2FzX25lZWQpOiBEZXRlY3Qgc3VjaCBpbnNucyBmb3IgbmV3IGFyZyB0byBjaG9vc2VfcmVsb2FkX3JlZ3MuCisJKGNob29zZV9yZWxvYWRfcmVncyk6IEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hvb3NlIGZ1bmN0aW9uIHZhbHVlIHJlZy4KKworCSogdG0tY29udmV4MS5oLCB0bS1jb252ZXgyLmggKENQUF9TUEVDKTogRGVmaW5lIF9fTk9fSU5MSU5FX01BVEguCisKK1N1biBTZXAgMjMgMDc6NTI6MzIgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiB2ZXJzaW9uLmMgKHZlcnNpb25fc3RyaW5nKTogQnVtcGVkIHRvIDEuOTAuMDIuCisKKwkqIGZpbmFsLmMgKGxlYWZfZnVuY3Rpb24pOiBWYXJpYWJsZSBub3cgbm9uLXN0YXRpYy4KKwkqIGZpbmFsLmMgKG9ubHlfbGVhZl9yZWdzX3VzZWQpOiBGdW5jdGlvbiBub3cgbm9uLXN0YXRpYy4KKwkqIGZpbmFsLmMgKGxlYWZfZnVuY3Rpb25fcCk6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YKKwlgbGVhZl9mdW5jdGlvbicgZnJvbSBoZXJlLi4uCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogLi4udG8gaGVyZS4JV2Ugd2FudCB0byBrbm93IHRoZQorCXZhbHVlIG9mIGBsZWFmX2Z1bmN0aW9uJyB3aGVuIHdlIHBlcmZvcm0gY29kZSByZW9yZ2luaXphdGlvbi4KKwkqIGZpbmFsLmMgKGxlYWZfZnVuY3Rpb25fcCk6IElmIHByb2ZpbGluZyBhcmNzLCB3ZSBjYW5ub3QgaGF2ZQorCWEgbGVhZiBmdW5jdGlvbi4gIEFsc28sIHdlIGhhdmUgdG8gbG9vayBhdCBpbnNucyBpbgorCWBlcGlsb2d1ZV9kZWxheV9saXN0JyB0byBrbm93IHRoYXQgYWxsIG91ciBjb25zdHJhaW50cyBhcmUKKwlzYXRpc2ZpZWQuCisJKiBmaW5hbC5jIChvbmx5X2xlYWZfcmVnc191c2VkKTogSGF2ZSB0byBsb29rIGluCisJYGVwaWxvZ3VlX2RlbGF5X2xpc3QnIHRvIGtub3cgdGhhdCBhbGwgb3VyIGNvbnN0cmFpbnRzIGFyZQorCXNhdGlzZmllZC4KKworCSogdG9wbGV2LmMgKHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLHdhcm5pbmcpOiBEZWNsYXJlIHRoaXJkCisJYXJndW1lbnQgVjMgZm9yIHdhcm5pbmdzIHRoYXQgcmVxdWlyZSAzIGAlJyBleHByZXNzaW9ucyBpbiBTLgorCSogdG9wbGV2LmMgKHN0cmlwX29mZl9lbmRpbmcpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcworCWEgR0NDLXJlY29nbml6ZWQgZmlsZW5hbWUgZXh0ZW5zaW9uLiAgQ2FsbCB0aGlzIGZ1bmN0aW9uIGluCisJR0NDIGluc3RlYWQgb2YgZXhwYW5kaW5nIGl0IGlubGluZSBpbiBDIGNvZGUgZXZlcnl3aGVyZS4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBUaGUgbGFzdCBiYXNpYyBibG9jayBkb2VzIG5vdCBoYXZlCisJbm8gbGl2ZSByZWdpc3RlcnMuICBBbHNvLCBjaGVjayB0aGF0IHdlIGRvbid0IGNvcHkgZnJvbSBhbgorCWVudHJ5IGluIGBiYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0JyB0aGF0IGRvZXMgbm90IGV4aXN0LgorCSogc2NoZWQuYyAodXBkYXRlX3JlZ19maXJzdF91c2UpOiBXaGVuIHNwbGl0dGluZyBpbnNucywgdGhlCisJaW5zbiB0aGF0IGlzIGluIFJFR19GSVJTVF9VU0UgbWlnaHQgYmVjb21lIGEgTk9URSwgYW5kIGEgbmV3CisJaW5zbiBiZWNvbWUgdGhlIGluc24gdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgZmlyc3QgdXNlLgorCWB1cGRhdGVfZmlyc3RfdXNlJyBrZWVwcyBSRUdfRklSU1RfVVNFIHVwIHRvIGRhdGUuCisJKiBzY2hlZC5jICh1cGRhdGVfbGlua3MpOiBDYWxsIG5vdGVfc3RvcmVzIHdpdGgKKwlgdXBkYXRlX2ZpcnN0X3VzZScgd2hlbiBhbiBpbnNuIHNwbGl0cy4KKworU3VuIFNlcCAyMyAwMDowNTo0OSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUHV0IHZhciBhcnJheSBib3VuZCBpbiBzYXZlX2V4cHIuCisKK1NhdCBTZXAgMjIgMTQ6MDE6MDAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAoYnVpbGRfaW5kZXhfdHlwZSk6IERvbid0IGhhc2ggdmFyaWFibGUtYm91bmQgdHlwZS4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBFcnJvciBoZXJlIGlmIHZhci1zaXplIG9iamVjdCBpbml0aWFsaXplZC4KKwkoZ3Jva2RlY2xhcmF0b3IsIGZpbmlzaF9zdHJ1Y3QpOiBSZWNvcmQgdHlwZXMgJiBkZWNscworCXdpdGggYXJyYXkgc2l6ZXMgbm90IHdyaXR0ZW4gYXMgY29uc3RhbnRzLgorCSogYy10cmVlLmggKENfVFlQRV9WQVJJQUJMRV9TSVpFLCBDX0RFQ0xfVkFSSUFCTEVfU0laRSk6IE5ldyBtYWNyb3MuCisKKwkqIHRtLWFpeDM4Ni5oIChMSUJfU1BFQyk6IERpZmZlcmVudCBsaWJyYXJ5IG5hbWUgZm9yIC1wLiAgQWx3YXlzIC1sYy4KKwkoTElOS19TUEVDKTogRG9uJ3QgcGFzcyAtbGcgb3IgLWcuCisJKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIF9JMzg2IGFuZCBfQUlYLiAgRG9uJ3QgZGVmaW5lIHVuaXguCisJKFNEQl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZSBpdC4KKwkoREJYX0RFQlVHR0lOR19JTkZPKTogVW5kZWZpbmUgaXQuCisJKEFTTV9GSUxFX1NUQVJUKTogT3V0cHV0IC5ub29wdCBpZiBub3Qgb3B0aW1pemluZy4KKwkoUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6IERlZmluZSBpdC4KKwkoRlVOQ1RJT05fUFJPRklMRVIpOiBBZGQgZGVmaW5pdGlvbi4KKworRnJpIFNlcCAyMSAxNjoyNjo1MSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX2VwaWxvZ3VlX2xpc3QpOiBEZWZpbmUgdGhpcyBoZXJlLgorCSogcmVvcmcuYzogTm90IGhlcmUuCisKK0ZyaSBTZXAgMjEgMTM6MTE6MTEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9leHRlcm5hbF9saWJjYWxsKTogRnJvYiBTWU1CT0xfUkVGX1VTRUQgaGVyZS4KKworVGh1IFNlcCAyMCAxNToyOTo0NCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZXhwci5oIChzdHJ1Y3Qgb3B0YWIpOiBGaWVsZCBsaWJmdW5jLCBhbiBydHgsIHJlcGxhY2VzIGxpYl9jYWxsLgorCSogcnRsLmggKFNZTUJPTF9SRUZfVVNFRCk6IE5ldyBtYWNyby4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IEluaXRpYWxpemUgdGhhdCBmaWVsZCBwcm9wZXJseS4KKwlBbHNvIGluaXRpYWxpemUgbmV3IHZhcmlhYmxlcyAqX2xpYmZ1bmMuCisJKHZhcmlvdXMgZnVuY3Rpb25zKTogVXNlIHRob3NlIHZhcnM7IHVzZSBsaWJmdW5jIGZpZWxkLgorCSogZXhwci5jIChjb252ZXJ0X21vdmUsIGVtaXRfYmxvY2tfbW92ZSwgY2xlYXJfc3RvcmFnZSk6IFVzZSB0aGUgdmFycy4KKwkoZW1pdF9wdXNoX2luc24sIGV4cGFuZF9hc3NpZ25tZW50KTogTGlrZXdpc2UuCisKK1RodSBTZXAgMjAgMTM6NTE6MTggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3V0LWEyOWsuYyAoY3VycmVudF9mdW5jdGlvbl9lcGlsb2d1ZV9kZWxheV9zbG90KTogUmVuYW1lZCBmcm9tCisJZXBpbG9ndWVfZGVsYXlfc2xvdC4KKworCSogcm9tcC5tZCAobW92ZGkpOiBGaXggbWlzc2luZyBzaG9ydC9sb25nIHF1YWxpZmllciBvbiBtZW1vcnkgcmVmLgorCShTRm1vZGUvREZtb2RlIG1vdmUgcGF0dGVybnMpOiBBZGQgZXhwbGljaXQgYWx0ZXJuYXRpdmVzIGZvcgorCXN0b3JpbmcgYW5kIGxvYWRpbmcgZ2VuZXJhbCByZWdpc3RlcnMgZnJvbSBtZW1vcnk7IGFsc28gYWRkCisJREVGSU5FX1NQTElUcyBmb3IgdGhlc2UgY2FzZXMgZm9yIERGbW9kZS4KKwkobmVnc2YyLG5lZ2RmMik6IERvbid0IHVzZSBYT1IgaWYgYW4gb3BlcmFuZCBpcyBhIGhhcmQgRlAgcmVnaXN0ZXIuCisKKwkqIHRtLXJvbXAuaCAoRklYRURfUkVHSVNURVJTLCBDQUxMX1VTRURfUkVHSVNURVJTKTogVXNlIGNvcnJlY3QKKwlyZWdpc3RlciBudW1iZXJzIGZvciBGUCByZWdpc3RlcnMuCisKKwkqIG91dHB1dC5oIChjdXJyZW50X2Z1bmN0aW9uX2VwaWxvZ3VlX2RlbGF5X2xpc3QpOiBOZXcgdmFyLgorCSogZnVuY3Rpb24uYzogSW5jbHVkZSBvdXRwdXQuaCBhbmQgaW5pdGlhbGl6ZSBuZXcgdmFyIGFib3ZlLgorCSogTWFrZWZpbGUuaW4gKGZ1bmN0aW9uLm8pOiBOb3cgaW5jbHVkZXMgb3V0cHV0LmguCisJKiByZW9yZy5jIChlcGlsb2d1ZV9kZWxheV9saXN0KTogUmVuYW1lZCB0bworCWN1cnJlbnRfZnVuY3Rpb25fZXBpbG9ndWVfZGVsYXlfbGlzdC4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3QgZGVsZXRlIG5vLW9wIGluc24gaWYgaW4gZGVsYXkgc2xvdAorCW9yIGlmIHdlIGhhdmUgYWxyZWFkeSBwcmUtc2Nhbm5lZC4KKworCSogZ2VuY29uZmlnLmMgKG1heF9pbnNuc19wZXJfc3BsaXQpOiBSZW5hbWUgZnJvbQorCW1heF9pbnNuc19wZXJfc3BsaXRfZmxhZyBhbmQgZGVmYXVsdCB0byAxIGluc3RlYWQgb2YgMC4KKworCSogZ2VuYXR0cnRhYi5jIChuX2NvbW1hX2VsdHMpOiBSZXR1cm4gemVybyBmb3IgbnVsbCBzdHJpbmcuCisKKwkqIHNkYm91dC5jIChNSU4sTUFYKTogQWRkIHRvIGhlcmU7IHJlcXVpcmVkIGJ5IHJlY2VudCBjaGFuZ2VzLgorCisJKiBleHByLmMgKHNhZmVfZnJvbV9wKTogQSBNRU0gcnR4IGlzIG5vdCBzYWZlIGZyb20gYW4gSU5ESVJFQ1RfUkVGLgorCisJKiBjLXBhcnNlLnkgKHJpZHBvaW50ZXJzKTogTW92ZSBkZWZpbml0aW9uIGluIGZyb250IG9mIGZpcnN0IHVzZS4KKworCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcyk6IEFsbG93IGZvciBDT0RFX0xBQkVMcyBiZXR3ZWVuIGEKKwlDQUxMX0lOU04gYW5kIFVTRSBpbnNucyBwcmVjZWVkaW5nIGl0LgorCShtYXJrX3NldF9yZXNvdXJjZXMpOiBMaWtld2lzZSwgZm9yIGZvbGxvd2luZyBDTE9CQkVScy4KKworV2VkIFNlcCAxOSAxNzo0NTo0OSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhc3NlcnQuaCAocHJpbnRmKTogRG9uJ3QgZGVmaW5lOyBzaG91bGQgYmUgaW4gc3RkaW8uaC4KKworCSogcnRsLmggKFBVVF9SRUdfTk9URV9LSU5EKTogTmV3IG1hY3JvLgorCSogc2NoZWQuYyAoYXR0YWNoX2RlYXRocyk6IFVzZSBpdC4KKworCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcyk6IElmIHdlIHB1dCBpbnNucyB0byBsb2FkCisJcGFyYW1ldGVycyBpbnRvIHRoZSBkZWxheSBzbG90IG9mIGEgQ0FMTCwgaWdub3JlIHRoZSBVU0UgaW5zbnMKKwlmb3IgdGhvc2UgcGFyYW1ldGVycy4KKworCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfMSk6IERvbid0IGNhbGwgZml4dXBfbWVtb3J5X3N1YnJlZyB1bmxlc3MKKwlpdHMgd291bGQtYmUgb3BlcmFuZCBpcyBhIFNVQlJFRy4KKworV2VkIFNlcCAxOSAwMDoyNjo1OSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogSW5kZW50IGJlZm9yZSBwcmludGluZyBSVEwuCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOiBMb29rIGZvciBTWVNDQUxMUy5jLlgKKwlpbiBsaWJzdWJkaXIuCisKK1R1ZSBTZXAgMTggMjE6NTU6MDEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGZvbGRfcnR4KTogRm9yIE1FTSB3aXRoIGNvbnN0YW50IGFkZHJlc3MsIHNwbGl0IHRoZQorCWFkZHJlc3MgaW50byBwb3NzaWJsZSBiYXNlIGFuZCBvZmZzZXQ7IGVuc3VyZSBjb25zdGFudCBwb29sCisJdmFsdWUgaXMgc2FtZSBtb2RlIGFzIG91ciByZWZlcmVuY2UgdW5sZXNzIHdlIGFyZSBnZXR0aW5nIGEKKwl3b3JkIG9mIGEgREltb2RlIENPTlNUX0lOVC4KKwlUcmVhdCBTWU1CT0xfUkVGIGFuZCBMQUJFTF9SRUYgYXMgY29uc3RhbnRzLgorCUlmIHdlIGFyZSBnZXR0aW5nIGEgd29yZCBhdCBhIGNvbnN0YW50IG9mZnNldCBmcm9tIGEganVtcCB0YWJsZSwKKwlyZXBsYWNlIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoYXQganVtcCB0YWJsZSBlbnRyeS4KKwkoY3NlX2luc24pOiBXaGVuIGZvbGRpbmcganVtcCB0byB2YXJpYWJsZSBsb2NhdGlvbiAoZS5nLiwgdGFibGVqdW1wKSwKKwlMQUJFTF9SRUYgaXMgdGhlIGNoZWFwZXN0IG9mIGFsbCwgc2luY2UgdGhlIGJyYW5jaCB3b3VsZCBiZSBzaW1wbGUuCisJU3BlY2lhbC1jYXNlIGNoYW5naW5nIHZhcmlhYmxlIGJyYW5jaCB0byBub3JtYWwgdW5jb25kaXRpb25hbAorCWJlY2F1c2UgdGhlIFJUTCBtYXkgYmUgZGlmZmVyZW50IChlLmcuLCB0aGUgdmFyaWFibGUgYnJhbmNoIG1heQorCWluY2x1ZGUgYSBVU0UpLgorCitUdWUgU2VwIDE4IDE4OjMzOjE5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAoY291bnRfZXJyb3IpOiBIYW5kbGUgd2FybmluZ3NfYXJlX2Vycm9ycy4KKwkoV19vcHRpb25zKTogSGFuZGxlIC1XZXJyb3IuCisKK01vbiBTZXAgMTcgMDA6MDI6MTIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChsb29rdXBfbGFiZWwpOiBVc2Ugdm9pZCBhcyB0eXBlIG9mIGxhYmVsLgorCSogc3RtdC5jIChsYWJlbF9ydHgpOiBObyBsb25nZXIgc3RhdGljLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBMQUJFTF9ERUNMLgorCitTdW4gU2VwIDE2IDE2OjI3OjI5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogRXJyb3IgZm9yIF9fYnVpbHRpbl9uZXh0YXJnCisJaWYgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2Vzbid0IGhhdmUgYC4uLicuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBBZGp1c3QgQklUUE9TIHRvIFVOSVQgYWxsIGF0IG9uY2UuCisJZm9yIGluc3YsIHVzZSBtb2RlIG9mIG9wZXJhbmQgMyBpbnN0ZWFkIG9mIFNJbW9kZS4gIERlZmluZSBNQVhNT0RFLgorCUFkanVzdCBYQklUUE9TIGFsb25nIHdpdGggbW9kZSBvZiBYT1AwLgorCShleHRyYWN0X2JpdF9maWVsZCk6IEFkanVzdCBYQklUUE9TIGFsb25nIHdpdGggbW9kZSBvZiBYT1AwLgorCWZvciBleHR2IGFuZCBleHR6diwgdXNlIG1vZGUgb2Ygb3BlcmFuZCAzIHRob3JvdWdobHkgaW5zdGVhZCBvZiBTSW1vZGUuCisKKwkqIHNkYm91dC5jIChDSEFSX1RZUEVfU0laRSwuLi4pOiBEZWZhdWx0IGRlZmluaXRpb25zIG9mIHRoZXNlIG1hY3Jvcy4KKwkocGxhaW5fdHlwZV8xKTogVXNlIHRob3NlIG1hY3JvcyB0byBkaXN0aW5ndWlzaCBpbnQgYW5kIGZsb2F0aW5nIHR5cGVzLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogT3V0cHV0IFRZUEVfREVDTCBoZXJlIGZvciBzZGIKKwlvbmx5IGlmIHRvcF9sZXZlbC4KKworCSogYy1wYXJzZS55ICh1bmFyeSk6IERvbid0IGZvcmdldCB0byBsb29rIHVwIHRoZSBsYWJlbC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERvbid0IHNraXAgYXJnIHByb21vdGlvbi4KKworU3VuIFNlcCAxNiAxNDo1NDowMyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogSWYgd2UgZG9uJ3QgcmVjb2duaXplIHRoZSBjb21iaW5lZCBpbnNuLAorCXRyeSBpdCB3aXRob3V0IGFueSBDTE9CQkVScy4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogUHJldmVudCBDQyB0cmFja2luZyBmcm9tIHRoaW5raW5nCisJdGhhdCB0aGUgQ0Mgd2FzIHNldCBieSBhbiBpbnNuIGluIHRoZSBkZWxheSBzbG90IG9mIGEgQ0FMTF9JTlNOLgorCisJKiBleHBtZWQuYyAoaW5pdF9leHBtZWQsIGV4cGFuZF9kaXZtb2QpOiBBbGxvdyBtYWNoaW5lIHRvIGhhdmUKKwlsb3cgY29zdCBzcGVjaWZpZWQgZm9yIGRpdmlkZXMgYnkgcG93ZXJzIG9mIHR3byBpZiBpdCBjYW4gZG8gaXQgYnkKKwlhIG1ldGhvZCB0aGF0IGlmIGNoZWFwZXIgdGhhbiB0aGUgbm9ybWFsIHNoaWZ0L2JyYW5jaC9hZGp1c3QgbWVjaGFuaXNtLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBXaGVuIHB1dHRpbmcgY29uc3RhbnQgbGFzdCwgZW5zdXJlIHRoYXQgdGhlCisJcmVzdWx0aW5nIGluc24gaXMgdmFsaWQuCisKKwkqIG9iamMtYWN0aW9ucyAoZmluaXNoX29iamMpOiBSZW1vdmUgZHVwIGRlZm4gb2YgZ2VuX2RlY2xhcmF0aW9uX2ZpbGUuCisKKwkqIG9iamMtcGFyc2UueSAocmlkcG9pbnRlcnMsIHRva2VuX2J1ZmZlcik6IERlZmluZSBiZWZvcmUgdXNlLgorCisJKiByZWxvYWQxLmMgKHNjYW5fcGFyYWRveGljYWxfc3VicmVncyk6IERlY2xhcmUgY29ycmVjdGx5LgorCisJKiB0bS1yb21wLmggKEVOQ09ERV9TRUdNRU5UX0lORk8pOiBVc2UgSU5URUdSQVRFRCBiaXQgdG8gbWFyaworCVNZTUJPTF9SRUZzIHRoYXQgYXJlIGFkZHJlc3NlcyBvZiBmdW5jdGlvbnMgKHJlYWxseSB0aGVpciBkYXRhIGJsb2NrcykuCisJKExFR0lUSU1BVEVfQ09OU1RBTlRfUCk6IERhdGEgYmxvY2sgYWRkcmVzc2VzIG9mIGZ1bmN0aW9ucyBhcmUgbm90CisJdmFsaWQgb3BlcmFuZHMuCisJKiBvdXQtcm9tcC5jIChzeW1ib2xpY19vcGVyYW5kKTogTGlrZXdpc2UuCisJKiByb21wLm1kIChjYWxsKik6IGVtaXRfbW92ZV9pbnNuIHdpbGwgbm93IGRvIGZvcmNlX2NvbnN0X21lbQorCXNvIGl0IG5lZWRuJ3QgYmUgZG9uZSBleHBsaWNpdGx5LgorCisJKiBvdXQtcm9tcC5jIChvdXRwdXRfZnBvcCk6IFdvcmsgYXJvdW5kIHlldCBhbm90aGVyIFJUIGZwIGJ1ZzsKKwljYW5ub3QgbWVyZ2Ugb3V0cHV0IGFuZCBmaXJzdCBvcGVyYW5kIGZvciBTRm1vZGUgaWYgZ2VuZXJhbCByZWcuCisKKwkqIHJvbXAubWQ6IEFkZCBuZXcgcGF0dGVybiB0byBtYXRjaCBjb21iaW5hdGlvbiBvZiBjb3B5IGFuZCB0ZXN0LgorCVVzZSBuaWxvIGluc3RydWN0aW9uIHRvIHNldCBDQy4KKworRnJpIFNlcCAxNCAwNzowNzowMSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXRyZWUuaDogRGVmaW5lIGFsbCAqX3R5cGVfbm9kZSB0cmVlcyBkZWZpbmVkIGluIGMtZGVjbC5jLCBpbiB0aGUKKwlzYW1lIG9yZGVyIGFzIGRlZmluZWQgdGhlcmUuCisKK0ZyaSBTZXAgMTQgMDg6Mzk6MTcgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogQ29udmVydCBSRUFET05MWV9ERUNMcyB0byBtYWtlIHVwCisJZm9yIHRoZSBmYWN0IHRoYXQgd2UgZG8gbm90IGNhbGwgYGRlZmF1bHRfY29udmVyc2lvbicgYW55bW9yZS4KKworCSogZnVuY3Rpb24uYyAoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzKTogSWYgdGhlIGZ1bmN0aW9uIGlzIGlubGluZSwKKwl3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1ha2luZyB2YWxpZCBydGwsIGJ1dCB3ZSBkbyBuZWVkIHRvCisJd29ycnkgYWJvdXQgaW5zdGFudGlhdGluZyBhbGwgdmlydHVhbCByZWdpc3RlcnMuICBPdGhlcndpc2Ugd2UgbXVzdAorCW1ha2UgdGhlIHJ0bCB2YWxpZCwgYW5kIHdlIGhhdmUgb3RoZXIgb3Bwb3J0dW5pdGllcyB0byBlbGltaW5hdGUgdGhlCisJdmlydHVhbCByZWdpc3RlcnMgZHVyaW5nIHRoZSBjb21waWxhdGlvbi4KKworVGh1IFNlcCAxMyAxNjowMDowNSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKE1BVENIRVMpOiBDaGVjayBmb3IgZGlmZmVyZW50IHJ0eCdzIHdpdGggc2FtZSByZWcgbnVtYmVyLgorCisJKiBmaXhpbmNsdWRlczogRGlzY2FyZCBgLicgZnJvbSB2YWx1ZSBvZiBgZmlsZXMnLgorCisJKiBjLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBVc2UgdW5hcnkgJiYgdG8gZ2V0IGFkZHJlc3Mgb2YgbGFiZWwuCisJKHN0bXQpOiBIYW5kbGUgYGdvdG8gKkVYUFJFU1NJT047Jy4KKwkqIHN0bXQuYyAoZXhwYW5kX2NvbXB1dGVkX2dvdG8pOiBOZXcgZnVuY3Rpb24uCisKKwkqIGdzdGRhcmcuaDogTmV3IG5hbWUgZm9yIHN0ZGFyZy5oLgorCSogTWFrZWZpbGUgKGluc3RhbGwtaGVhZGVycyk6IFJlbmFtZSBnc3RkYXJnLmggd2hpbGUgaW5zdGFsbGluZyBpdC4KKworCSogc2Rib3V0LmMgKFBVVF9TREJfTEFTVF9ESU0pOiBHZXQgcmlkIG9mIFNEQl9ERUxJTS4KKwkocGxhaW5fdHlwZSk6IE91dHB1dCBhY2N1bXVsYXRlZCBhcnJheSBkaW1zIGFuZCBzaXplLgorCShwbGFpbl90eXBlXzEpOiBFbGltaW5hdGUgYXJnIE5PU0laRS4gIFNhdmUgdXAgZGltcyBhbmQgc2l6ZS4KKwlDYWxsIHNlbGYgcmF0aGVyIHRoYW4gcGxhaW5fdHlwZSBmb3IgcG9pbnRlcnMgYW5kIGZ1bmN0aW9ucy4KKwkoc2Rib3V0X2FycmF5X3R5cGUsIHNkYm91dF9hcnJheV9kZXB0aCk6IEZ1bmN0aW9ucyBkZWxldGVkLgorCitUaHUgU2VwIDEzIDE2OjEyOjE1IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtY2xhc3MuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBGaXggdHlwbyBpbiBkZWNpZGluZyB3aGV0aGVyIHRvCisJZG8gaGFpcnkgb3IgdHJpdmlhbCBwb2ludGVyIGNvbnZlcnNpb25zIG9uIGB0aGlzJy4KKworCSogY3BsdXMtdHJlZS5jIChsYXlvdXRfdmJhc2V0eXBlcyk6IERvbid0IGRvdWJsZS1jb3VudCBzcGFjZSB0YWtlbgorCXVwIGJ5IHZpcnR1YWwgYmFzZWNsYXNzZXMuCisKK1dlZCBTZXAgMTIgMTg6MTQ6MTkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRtLW02OGsuaDogVXNlIGFzbV9mcHJpbnRmIHdpZGVseS4KKwkoUkVHX1BSRUZJWCwgSU1NRURJQVRFX1BSRUZJWCwgTE9DQUxfTEFCRUxfUFJFRklYLCBVU0VSX0xBQkVMX1BSRUZJWCk6CisJTmV3IG1hY3Jvcy4KKworCSogZmluYWwuYyAoYXNtX2ZwcmludGYpOiBOZXcgZnVuY3Rpb24uCisKK1dlZCBTZXAgMTIgMDY6MDc6NTAgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBPdXRwdXQgYmFzZXR5cGUgc2l6ZSBhbmQgb2Zmc2V0IGluZm8KKwlpbiBiaXRzLCBub3QgYnl0ZXMuCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX3tkZWNsLGZ1bmN0aW9ufSk6IFNldCBDTEFTU1RZUEVfQVNNX1dSSVRURU4KKwliaXQgb2YgdHlwZXMgdXNlZCBieSBub24tZXh0ZXJuIFZBUl9ERUNMcy4gIFNldCBpdCBhbHNvIGZvciB0eXBlcyBvZgorCVBBUk1fREVDTHMgYW5kIHJldHVybiB0eXBlcyBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgZmlsZSBiZWluZworCWNvbXBpbGVkLgorCitUdWUgU2VwIDExIDEzOjIxOjQwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogTmV3IGFyZ3VtZW50IE5PU0laRS4JIEluaGliaXRzIHNpemUgb3V0cHV0LgorCShzZGJvdXRfYXJyYXlfdHlwZSk6IENhbGwgcGxhaW5fdHlwZV8xIGRpcmVjdGx5OyBzZXQgTk9TSVpFLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X2FycmF5X3R5cGUpOiBOZXcgYXJndW1lbnQgREVQVEguCisJRG9uJ3Qgb3V0cHV0IG1vcmUgdGhhbiBTREJfTUFYX0RJTSBkaW1lbnNpb25zLgorCShzZGJvdXRfYXJyYXlfZGVwdGgpOiBOZXcgZnVuY3Rpb24uCisJKHBsYWluX3R5cGVfMSk6IFN0YXJ0IERFUFRIIGJ5IGNhbGxpbmcgc2Rib3V0X2FycmF5X2RlcHRoLgorCisJKiBnbnVsaWIyLmMgKF9iYl9pbml0X2Z1bmMpOiBMaWJyYXJ5IG1lbWJlciBub3cgbmFtZWQgX2JiLgorCisJKiB0cmVlLmg6IEFkZCBjb21tZW50cy4KKworTW9uIFNlcCAxMCAxNzoyMDowNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBGaXggdHlwby4KKworCSogY2NjcC5jIChtYWNhcmcxKTogV2l0aCAtdHJhZGl0aW9uYWwsIGJhY2tzbGFzaCBxdW90ZXMgY2hhcnMuCisKK01vbiBTZXAgMTAgMTY6Mzc6MDEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRG9uJ3Qgc3dhcCBUSEVOIGFuZCBFTFNFIHBhcnRzIGR1cmluZyBqdW1wcworCXJ1bnMgYWZ0ZXIgcmVsb2FkLgorCitNb24gU2VwIDEwIDEzOjA3OjM5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogRG9uJ3QgYWN0dWFsbHkgc3Vic3RpdHV0ZWUgaW50byBhCisJc3RyaW5nIGlmIEFOU0k7IGp1c3QgY29uc2lkZXIgd2FybmluZy4KKworCSogZ251bGliMi5jIChkaXZfcXJybmQgZm9yIGkzODYpOiBGaXggdHlwby4gIFJlbmFtZSBzb21lIGFyZ3MuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfYXJyYXlfdHlwZSk6IE5ldyBhcmd1bWVudCBERVBUSC4KKwlEb24ndCBvdXRwdXQgbW9yZSB0aGFuIFNEQl9NQVhfRElNIGRpbWVuc2lvbnMuCisJKHBsYWluX3R5cGVfMSk6IFN0YXJ0IERFUFRIIGF0IDEuCisKK1N1biBTZXAJIDkgMjI6MDI6MjQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3V0LWEyOWsuYyAoZ2VuX3JlZ19vcGVyYW5kKTogRXhjbHVkZSBTVUJSRUcgb2YgYSBzcGVjaWFsCisJcmVnaXN0ZXIuCisKKwkqIGNzZS5jOiAoZm9sZF9ydHgpOiBHZXQgZXF1aXZhbGVudCBmb3IgcmVnaXN0ZXIgYmVmb3JlIHNlZWluZyBpZgorCW1lbW9yeSByZWZlcmVuY2UgaXMgdG8gY29uc3RhbnQgcG9vbC4KKwkoY3NlX2lucyk6IE9ubHkgY2FsbCBmb3JjZV9jb25zdF9tZW0gaWYgd2UgYWN0dWFsbHkgdHJ5IHRvIHVzZQorCXRoZSBjb25zdGFudCAoaS5lLiwgd2UgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyBjaGVhcGVyKS4KKworU3VuIFNlcAkgOSAyMTo0OToxOCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogLi4uX0JJR19FTkRJQU46IE5vdyBleHBlY3QgZGVmaW5pdGlvbiB0byBiZSAwIG9yIDEuCisJQWxsIHJlZnMgYW5kIGRlZnMgY2hhbmdlZC4KKworCSogdG0tbWlwcy5oIChDUFBfU1BFQyk6IEVycm9yIGZvciAtRUwgKGZvciAtRUIsIGlmIERFQ1NUQVRJT04pLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X29uZV90eXBlKTogU2V0IFRSRUVfQVNNX0JFSU5HX1dSSVRURU4gYmVmb3JlCisJcmVjdXJzaW9uLCBhbmQgVFJFRV9BU01fV1JJVFRFTiBhZnRlci4KKworU2F0IFNlcAkgOCAxNjo0NzoyNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogaGFyZC1wYXJhbXMuYyAobWFpbik6IERvbid0IHRyeSB0byBtYWxsb2MgYWxsIG1lbW9yeS4KKworU2F0IFNlcAkgOCAxNjozODo1MyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNldCByZWdfZXF1aXZfY29uc3RhbnQgaWYgdGhlIGVxdWl2YWxlbmNlCisJaXMgYW55IGNvbnN0YW50LCBub3QganVzdCBhIGxlZ2l0aW1hdGUgY29uc3RhbnQgb3BlcmFuZC4KKworCSogZmluYWwuYyAoZ2V0X2F0dHJfbGVuZ3RoLCBzaG9ydGVuX2JyYW5jaGVzLCBmaW5hbF9zY2FuX2luc24pOgorCUlmIEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTiBpcyBkZWZpbmVkLCBkb24ndCBwdXQganVtcCB0YWJsZXMKKwlpbiByZWFkb25seSBkYXRhIHNlY3Rpb24sIGV2ZW4gaWYgaXQgZXhpc3RzLgorCitTYXQgU2VwCSA4IDE0OjA3OjA1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoYm9vdHN0cmFwKik6IFBhc3MgbnVsbCBBTExPQ0EgZGVmaW5pdGlvbiB0byByZWN1cnNpdmUKKwltYWtlcyB3aGVuIGNvbXBpbGluZyB3aXRoIEdDQyBzaW5jZSBpdCBuZXZlciBuZWVkcyBhbGxvY2EuYy4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IFdhcm4gZm9yIHNpZ25lZCA8IHVuc2lnbmVkLgorCUNvbnRyb2xsZWQgYnkgLVcuCisKKwkqIHRtLWkzODZ2NC5oOiBOZXcgZmlsZS4KKworRnJpIFNlcAkgNyAxMzoxMDoyNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChTVERDX1ZBTFVFKTogTmV3IG1hY3JvLCBkZWZhdWx0aW5nIHRvIDEuCisJKGludGlhbGl6ZV9idWlsdGlucyk6IFVzZSB0aGF0LgorCisJKiBtNjhrLm1kIChtb3ZxaSk6IGBzdCcgZG9lcyBub3Qgc2V0IGNjJ3MuCisKK0ZyaSBTZXAJIDcgMDc6NDk6MjMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2VuZW1pdC5jIChnZW5fZXhwYW5kKTogRml4IHRlc3QgZm9yIG5vIEMgY29kZS4KKwlJZiBubyBDIGNvZGUsIG5vIE1BVENIX0RVUHMsIGFuZCBvbmx5IG9uZSBpbnNuIHRvIHdyaXRlLCBoYW5kbGUKKwlsaWtlIERFRklORV9JTlNOIGFuZCByZXR1cm4gdGhhdCBpbnNuIHJhdGhlciB0aGFuIG1ha2luZyBhIHNlcXVlbmNlLgorCisJKiBlbWl0LXJ0bC5jIChhZGRfaW5zbl9hZnRlcik6IElmIHByZXZpb3VzIG9yIG5leHQgaW5zbiBpcyBhCisJU0VRVUVOQ0UsIHVwZGF0ZSB0aGUgTkVYVF9JTlNOIGluIHRoZSBsYXN0IGluc24gaW4gdGhlIFNFUVVFTkNFIG9yCisJUFJFVl9JTlNOIG9mIHRoZSBmaXJzdCwgYXMgYXBwcm9wcmlhdGUuCisJKGVtaXRfaW5zbl9iZWZvcmUsIGVtaXRfanVtcF9pbnNuX2JlZm9yZSwgZW1pdF9ub3RlX2JlZm9yZSk6CisJQ2FsbCBhZGRfaW5zbl9hZnRlci4KKworCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IElmIGEgc3dpdGNoIHdob3NlIGluZGV4CisJaXMgYW4gZW51bWVyYXRlZCB0eXBlIGNvbnRhaW5zIGxhYmVscyBmb3IgZXZlcnkgZW51bWVyYXRpb24gdmFsdWUsCisJbWFrZSB0aGUgbGFiZWwgZm9yIHRoZSBsYXN0IHZhbHVlIHRoZSBkZWZhdWx0IGxhYmVsIHNpbmNlIHN1Y2ggYQorCXN3aXRjaCBjYW4gbmV2ZXIgZmFsbCB0aHJvdWdoLgorCisJKiBnZW5hdHRyLmMgKGZhdGFsKTogRGVjbGFyZSBmaXJzdCBhcmcgY29ycmVjdGx5LgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogTm8gbG9uZ2VyIGNoZWNrIFJFR19GVU5DVElPTl9WQUxVRV9QOworCWl0cyB2YWx1ZSBzaG91bGRuJ3QgbWF0dGVyIG9uY2UgUlRMIGdlbmVyYXRpb24gaXMgY29tcGxldGUuCisJKHN1YnN0KTogSWYgTk9UIGlzIHByZXNlbnQgYXMgYW4gb3BlcmFuZCBpbiBjb21tdXRhdGl2ZSBvcGVyYXRpb24sCisJcHV0IGl0IGxhc3QgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgcGF0dGVybnMuCisKKwkqIG91dC1yb21wLmMgKG91dHB1dF9mcG9wcyk6IEFsaWduIHRvIHdvcmQgYm91bmRhcnkgYmVmb3JlIHdyaXRpbmcKKwlhbnkgZmxvYXRpbmctcG9pbnQgYmxvY2tzLgorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IEZpeCB0eXBvIGluIHByZXZpb3VzIGNoYW5nZS4KKwlXaGVuIGEgTUVNIG11c3QgYmUgY29waWVkLCB1c2UgY29weV9ydHg7IHRoZSBQTFVTIG1heSBhbHNvIGJlIHNoYXJlZC4KKworVGh1IFNlcAkgNiAxNToxOTo0MiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IERvbid0IGFkZCBfXyB0byAtRCBpZiBfXyBhbHJlYWR5IHByZXNlbnQuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOgorCUJldHRlciB3YXJuaW5nIGZvciBGQ04gKiB2cy4gdm9pZCAqCisJU3BlY2lmaWMgd2FybmluZyBmb3IgY2hhciAqIHZzLiB1bnNpZ25lZCBjaGFyICouCisKK1RodSBTZXAJIDYgMTQ6NTI6MDggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVvcmcuYyAoZmluZF9iYXNpY19ibG9jayk6IFJldHVybiAtMSwgbm90IDAsIGlmIHdlIGNhbid0IGZpbmQKKwl0aGUgYmFzaWMgYmxvY2suCisJKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IENsZWFyIFBFTkRJTkdfREVBRF9SRUdTIHVuY29uZGl0aW9uYWxseS4KKwkocmVsYXhfZGVsYXlfc2xvdHMpOiBEb24ndCBjYWxsIG9wdGltaXplX3NraXAgZm9yIHVuY29uZGl0aW9uYWwganVtcC4KKwlPbmx5IHRyeSB0byByZW1vdmUganVtcCBpZiBpdCBpcyBhIHNpbXBsZSBjb25kaXRpb25hbCBvcgorCXVuY29uZGl0aW9uYWwganVtcCAoYnV0IG5vdCBhIHRhYmxlanVtcCBvciBzaW1pbGFyIHN1Y2gpLgorCisJKiBjc2UuYyAoaW52YWxpZGF0ZSwgcmVmZXJzX3RvX21lbV9wLCBjc2VfcnR4X2FkZHJfdmFyaWVzX3ApOgorCUNvbnNpZGVyIChwbHVzIChyZWcpIChjb25zdF9pbnQpKSB0byBiZSBhIGZpeGVkIGFkZHJlc3MgaWYgUkVHCisJaXMgY29uc3RhbnQ7IG9sZCBjb2RlIGp1c3QgaGFuZGxlZCBSRUcuCisKKwkqIGdlbnJlY29nLmMgKGVudW0gcm91dGluZV90eXBlKTogVXNlIHRvIGRpc3Rpbmd1aXNoIHR3byB0eXBlcyBvZgorCXJvdXRpbmVzIHRoYXQgd2Ugd3JpdGU6IHJlY29nIGFuZCBzcGxpdF9pbnNucy4KKwkobWFrZV9zcGxpdF9zZXF1ZW5jZSk6IFdyaXRlIG91dCBleHRlcm4gZm9yIGdlbl9zcGxpdF8gZnVuY3Rpb24uCisJKGJyZWFrX291dF9zdWJyb3V0aW5lcywgd3JpdGVfc3Vicm91dGluZSwgd3JpdGVfdHJlZSwgbWFpbik6CisJVXNlIG5ldyBlbnVtIHJvdXRpbmVfdHlwZSBpbnN0ZWFkIG9mIHBhc3NpbmcgInNwbGl0IiBvciAicmVjb2ciLgorCSh3cml0ZV9zdWJyb3V0aW5lKTogV3JpdGUgY29ycmVjdCB0eXBlIGZvciBzcGxpdHRpbmcgZnVuY3Rpb25zIGFuZAorCXJldHVybiAwLCBub3QgLTEuCisJKG1haW4pOiBXcml0ZSBpbmNsdWRlcyBiZWZvcmUgZGVjbGFyYXRpb25zIG9mIGdlbl9zcGxpdF8gZnVuY3Rpb25zCisJc2luY2UgInJ0eCIgaXMgbmVlZGVkIGZvciB0aGVtLgorCSogcnRsLmggKHRyeV9zcGxpdCwgc3BsaXRfaW5zbnMpOiBBZGRlZCBkZWZpbml0aW9ucy4KKworV2VkIFNlcAkgNSAxNjoyMDowNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluY2x1ZGVzKTogVXNlIHByb3BlciBkaXJlY3RvcnkuCisKK1R1ZSBTZXAJIDQgMTM6NTk6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogTGV0IGV4dHJhX3dhcm5pbmdzIGNvbnRyb2wKKwl3YXJuaW5ncyBhYm91dCBwYXJtcyBub3QgZGVjbGFyZWQuCisKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IE1vdmUgY29kZSB0byBkZXRlY3Qgc3RhY2stYWRqdXN0IGluc25zLgorCUl0IHdhcyB1bnJlYWNoYWJsZS4KKworCSogZ251bGliLmMsIGdudWxpYjIuYyAoYWJvcnQpOiAjdW5kZWYgaW4gY2FzZSBjb25maWcuaCBkZWZpbmVzIGl0LgorCitNb24gU2VwCSAzIDE3OjUwOjE2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSWYgU0VUVVBfSU5DT01JTUdfVkFSQVJHUyBpcyBkZWZpbmVkLCBwYXNzCisJdW5uYW1lZCBhcmdzIGluIHJlZ2lzdGVycy4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IENhbGwgU0VUVVBfSU5DT01JTkdfVkFSQVJHUyBmb3IKKwlzdGRhcmdzIGFzIHdlbGwgYXMgdmFyYXJnczsgZW5zdXJlIHdlIG9ubHkgY2FsbCBpdCBvbmNlLgorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IERvbid0IGFzc3VtZSBhbGwgbWVtb3J5CisJYWRkcmVzc2VzIGFyZSB2YWxpZCBmb3IgYWxsIGluc25zLgorCitTdW4gU2VwCSAyIDIyOjE3OjQwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogUHVzaCBhbGwgc3RhY2sgYXJncywgdGhlbiBsb2FkIHJlZ3MuCisKKwkqIGMtZGVjbC5jIChjX2J1aWxkX3R5cGVfdmFyaWFudCk6IEZvciBhbiBBUlJBWV9UWVBFLAorCXB1dCB0aGUgcXVhbGlmaWVyIGludG8gdGhlIGFycmF5IGFzIHdlbGwgYXMgdGhlIGVsZW1lbnQuCisJKGdyb2tkZWNsYXJhdG9yKTogV2hlbiBhIGZpZWxkIG9yIHZhcmlhYmxlIGlzIHN1cHBvc2VkIHRvIGJlCisJYSBjb25zdCBvciB2b2xhdGlsZSBhcnJheSwgbWFrZSB0aGUgYXJyYXkgZWxlbWVudHMgY29uc3Qgb3IKKwl2b2xhdGlsZSwgYnV0IGFsc28gbWFrZSB0aGUgZmllbGQgb3IgdmFyaWFibGUgc28uCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFR1cm4gb2ZmIHRoZSB3YXJuaW5nIGZvciBjb25zdCBvciB2b2xhdGlsZQorCWZ1bmN0aW9uIHR5cGUgd2hlbiBtYWtpbmcgYW4gYXJyYXkuICBJdCB3YXMgdXNlbGVzcy4KKworRnJpIEF1ZyAzMSAxNjoyNjo0MCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogTGV0IHRoZQorCWxhbmd1YWdlLXNwZWNpZmljIGNvZGUgZGVjaWRlIGhvdyB0byBjb252ZXJ0IEVYUFIKKwlpZiBpdCBpcyBub3Qgb25lIG9mIHRoZSBzcGVjaWFsIGZvcm1zIHdlIHJlY29nbml6ZS4KKworRnJpIEF1ZyAzMSAxNTowODoxOSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnY2MuYyAoZXhlY3V0ZSk6IFVzZSBJIGluc3RlYWQgb2YgdW5kZWZpbmVkIHZhciBKIGlmIERFQlVHIGRlZmluZWQuCisKK0ZyaSBBdWcgMzEgMTQ6Mzc6MzYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHNkYm91dC5jIChzZGJvdXRfYmVnaW5fYmxvY2spOiBEZWxldGUgZXhjZXNzIGFyZyB0byBzZGJvdXRfYmxvY2suCisKK1RodSBBdWcgMzAgMjE6MzE6NTUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogRml4IHR5cG9zIGluIGNvbXB1dGF0aW9ucyBvZiBVTklULgorCitXZWQgQXVnIDI5IDEyOjMzOjMzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3JlZ19wYXJtcyk6IERvbid0IGFkdmFuY2UgcGFybSB0d2ljZS4KKworVHVlIEF1ZyAyOCAyMjo0OTo0MSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChkZWxldGVfbmV3bGluZXMpOiBOZXcgZnVuY3Rpb24uCisJKG1hY3JvZXhwYW5kKTogUmVtb3ZlIG5ld2xpbmVzIGZyb20gYXJncyB1c2VkIG1vcmUgdGhhbiBvbmNlLgorCitUdWUgQXVnIDI4IDIyOjE2OjUwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChzY2hlZC5vKTogQWRkIHRvIGxpc3Qgb2YgZmlsZXMgdG8gY29tcGlsZS4KKworCSogYy1wYXJzZS55IChwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSk6IERlY2xhcmUgd2l0aCBjb3JyZWN0IHR5cGUuCisKKwkqIGZvbGQtY29uc3QuYyAob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUpOiBGaXggdHlwby4KKworCSogcmVvcmcuYyAoc3BsaXRfaW5zbnMpOiBObyBsb25nZXIgbmVlZCBleHRlcm4gZm9yIHRoaXMgaGVyZS4KKworCSogdG9wbGV2LmMgKHNjaGVkX2R1bXBfZmlsZSk6IERlZmluZS4KKwkoY29tcGlsZV9maWxlKTogSW5pdGlhbGl6ZSBhbmQgcHJpbnQgc2NoZWRfdGltZSBhbmQgc2NoZWQyX3RpbWUuCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogRml4IHR5cG8gaW4gYWxsb2NhdGlvbiBvZiBpbnNuX21hcC4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogVHJ5IHJlbGF0ZWQgdmFsdWUgaW4gY2FzZSB3aGVyZSBDT05TVCBpcyBzZWVuCisJZmlyc3QgYW5kIFNZTUJPTF9SRUYgbGF0ZXIuCisKK1R1ZSBBdWcgMjggMTY6MjY6NTAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IERvbid0IG1vZGlmeSBvciB2YWxpZGF0ZSBhcmcgb2YgLUQgaGVyZS4KKwkobWFrZV9kZWZpbml0aW9uKTogRG8gaXQgYWxsIGhlcmUuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFJlZW5hYmxlIGByZWdpc3RlcicgZm9yIHBhcm1zLgorCitUdWUgQXVnIDI4IDA3OjEyOjE5IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRtLWEyOWsuaCAoQ09OU1RfQ09TVFMpOiBBbGwgQ09OU1RfSU5UcyBhcmUgY29zdCB6ZXJvOyBhZGp1c3QKKwlTWU1CT0xfUkVGIGFuZCBDT05TVF9ET1VCTEUgY29zdHMgdG8gcmVmbGVjdCB0aGVpciBhY3R1YWwgY29zdC4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IERvbid0IHN1cHByZXNzIEVYUEFORF9TVU0gaGVyZSBpZiBub3QgUG1vZGUuCisJKGV4cGFuZF9leHByLCBjYXNlICpfREVDTCk6IFJldHVybiBjb25zdGFudCBhZGRyZXNzIGlmCisJRVhQQU5EX1NVTSBvciBFWFBBTkRfSU5UT19TVEFDSyBpbiBhZGRpdGlvbiB0byBFWFBBTkRfQ09OU1RfQUREUkVTUzsKKwlhbGwgb2YgdGhlc2UgY2FzZXMgd2lsbCBsYXRlciBjYWxsIG1lbW9yeV9hZGRyZXNzLgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogQWx3YXlzIG1ha2UgcmVjdXJzaXZlIGNhbGwgd2l0aAorCUVYUEFORF9TVU0uCisJKGV4cGFuZF9leHByLCBjYXNlIFBMVVNfRVhQUik6IFRyeSB0byBmb3JtIGNvbnN0YW50IGlmIFggKyBDT05TVCBhbmQKKwltb2RlIGlzIFBtb2RlIHdpdGhvdXQgRVhQQU5EX1NVTTsgaWYgbm90IEVYUEFORF9TVU0sIHVzZSBmb3JjZV9vcGVyYW5kLgorCUNoZWNrIGZvciBNT0RFICE9IFBtb2RlIHdpdGggRVhQQU5EX1NVTSBoZXJlLgorCShleHBhbmRfZXhwciwgY2FzZSBNSU5VU19FWFBSKTogQWx3YXlzIHByb2Nlc3MgWCAtIENPTlNUX0lOVCBhcworCVggKyAoLUNPTlNUX0lOVCkpLgorCitTdW4gQXVnIDI2IDIzOjEwOjEwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mdW5zaWduZWQtYml0ZmllbGRzLiAKKwkoZ3Jva2RlY2xhcmF0b3IpOiBEbyB0aGUgcmVhbCB3b3JrLgorCShncm9rZmllbGQpOiBQYXNzIGVpdGhlciBGSUVMRCBvciBCSVRGSUVMRCB0byBncm9rZGVjbGFyYXRvci4KKworCSogdG0tYXR0Mzg2LmggKGFzbV9vdXRwdXRfY29tbW9uKTogVXNlIFNJWkUsIG5vdCBST1VOREVELgorCitTYXQgQXVnIDI1IDE3OjE3OjI3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBUdXJuIG9mZiBoYW5kbGluZyBvZiAmLi4uCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IFR1cm4gb2ZmIGV4dHJhIGR1bW15IHBhcmFtZXRlci4KKworCSogdG0tYXR0Mzg2LmggKEVYVFJBX1NFQ1RJT05TLCBFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IE5ldyBtYWNyb3MuCisJKEJTU19TRUNUSU9OX0FTTV9PUCk6IE5ldyBtYWNyby4KKwkoQVNNX09VVFBVVF9MT0NBTCk6IENhbGwgYnNzX3NlY3Rpb24sIGRvbid0IGp1c3QgcHJpbnQgLmJzcy4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEhhbmRsZSBzaGlmdCB3aXRoaW4gbWVtLCBhcyBtdWx0aXBsaWNhdGlvbi4KKworU2F0IEF1ZyAyNSAxMTo0MzowOSAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGZpbmFsLmMgKGFsdGVyX2NvbmQpOiBIYW5kbGUgQ0NfSU5WRVJURUQuCisKKwkqIGNvbmRpdGlvbnMuaCAoQ0NfSU5WRVJURUQpOiBOZXcgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGNvbmRpdGlvbgorCXRlc3RlZCBsZWF2ZXMgdGhlIGZhbGdzIHNldCBvcHBvc2l0ZSB0byB0aGUgY29uZGl0aW9uIHRlc3RlZC4gIFRoaXMKKwlpcyB1bnNhZmUgZm9yIElFRUUgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucywgYnV0IHVzZWZ1bCBmb3IgaW50ZWdlcgorCW9wZXJhdGlvbnMgd2hpY2ggY2FuIGNvbWJpbmUgd2l0aCBjb25kaXRpb24tY29kZSBzZXR0aW5nIG9wZXJhdGlvbnMuCisKKwkqIGMtcGFyc2UueSAocG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UpOiBOZXcgZnVuY3Rpb24uCSBTa2lwcworCWFsbCBvZiB0aGUgd2hpdGVzcGFjZSBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiB0aGUgaW5wdXQKKwlmaWxlLCB0YWtpbmcgTkVYVENIQVIgaW50byBhY2NvdW50LiAgQ2hhbmdlZCBhbGwgY2FsbGVycyBvZgorCWBza2lwX3doaXRlX3NwYWNlJyBpbiBncmFtbWFyIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCisKKwkqIGdlbnJlY29nLmMgKG1haW4pOiBHZW5lcmF0ZSBjb2RlIHdoaWNoIGlzIG1vcmUgZWFzaWx5IG9wdGltaXplZCBieQorCUdDQydzIGNzZS4gIEluIHBhcnRpY3VsYXIsIHN0YXJ0IGVhY2ggcmVjb2duaXplciB3aXRoIHRoZSBhZGRyZXNzIG9mCisJYHJlY29nX29wZXJhbmRzJyBpbiBhIHJlZ2lzdGVyLgorCisJKiByZWxvYWQuYyAoY29tYmluZV9yZWxvYWRzKTogQ2FuIG9ubHkgY29tYmluZSByZWxvYWRzIGlmIHRoZQorCXJlZ2lzdGVyIHdlIGZpbmQgY2FuIGhvbGQgdGhlIGVudGlyZSBvdXRwdXQgcmVsb2FkIChpLmUuLCBTRm1vZGUKKwlyZWdpc3RlciBtYXkgbm90IGJlIHN1aXRhYmxlIGZvciBjb21iaW5pbmcgd2l0aCBERm1vZGUgcmVnaXN0ZXIpLgorCisJKiBvcHRhYnMuYyAoaGF2ZV9zdWIyX2luc24pOiBGaXhlZCB0eXBvLgorCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IEVtaXQgYSBiYXJyaWVyIGFmdGVyIGEgUkVUVVJOCisJanVtcC4KKworCSogQWRkZWQgZGlmZnMgZm9yIG5ldyBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGNvZGUuCisJKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBNb3ZlZCBoZXJlIGZyb20gcmVvcmcuYyBhbmQgbWFkZQorCXB1YmxpYy4JIEJvdGggaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBhbmQgZGVsYXllZCBicmFuY2gKKwlmaWxsaW5nIG5vdyB1c2UgdGhlIHNhbWUgY29kZSB0byBzcGxpdCBpbnNucy4KKwkqIGZsYWdzLmg6IEFkZCBuZXcgZmxhZ3MgRkxBR19TQ0hFRFVMRV9JTlNOUyBmb3IgaW5zdHJ1Y3Rpb24KKwlzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uIGFuZAorCUZMQUdfU0NIRURVTEVfSU5TTlNfQUZURVJfUkVMT0FEIGZvciBpbnNuIHNjaGVkdWxpbmcgYWZ0ZXIKKwlyZWdpc3RlciBhbGxvY2F0aW9uLgorCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogUmVjb2duaXplIHBzZXVkbyByZWdpc3RlcnMgYXMKKwlyZWdpc3RlcnMgZm9yIHRoZSBwdXJwb3NlIG9mIGluc24gY29uc3RyYWludCBtYXRjaGluZyBiZWZvcmUKKwlyZWdpc3RlciBhbGxvY2F0aW9uLiAgT3RoZXJ3aXNlLCB0aGUgaW5zbiBzY2hlZHVsZXIgYXNzdW1lcworCXRoZSBvcGVyYW5kcyB3aWxsIGJlIG1lbW9yeSwgd2hpY2ggaXMgdXN1YWxseSB3cm9uZyAoYW5kCisJY2F1c2VzIGl0IHRvIGJ1aWxkIGJhZCBzY2hlZHVsZXMpLgorCSogc2NoZWQuYyAob3JkZXJfY2FsbHMpOiBOZXcgZnVuY3Rpb24uCUZvciB0d28gQ0FMTF9JTlNOUyBpbgorCXRoZSBydGwgY2hhaW4sIHdlIHNldCB1cCBhIGNvbnN0cmFpbnQgdGhhdCB0aGUgc2Vjb25kCisJQ0FMTF9JTlNOIG1heSBub3QgYmUgc2NoZWR1bGVkIHRvIHJ1biBiZWZvcmUgdGhlIGZpcnN0LgorCShzY2hlZF9hbmFseXplXyopOiBUaHJlZSBraW5kcyBvZiBkZXBlbmRlbmNpZXMgKHRydWUsIGFudGksCisJYW5kIG91dHB1dCkgY29uc3RyYWluIHRoZSBvcmRlciBpbiB3aGljaCBpbnNucyBjYW4gYmUKKwlyZWFycmFuZ2VkIGFuZCBzdGlsbCBwcmVzZXJ2ZSB0aGVpciBleGVjdXRpb24gc2VtYW50aWNzLgorCVdlIG5vdyBoYW5kbGUgZGVwZW5kZW5jaWVzIGZvciBwc2V1ZG8gYW5kIGhhcmQgcmVnaXN0ZXIgdXNhZ2UKKwlhbmQgZm9yIG1lbW9yeSB1c2FnZSBpbiB0aGVzZSBmdW5jdGlvbnMuCisJKGxhdW5jaF9saW5rcyk6IFRoZSBvcmRlcmluZyBvZiB3aGljaCBuZXdseSByZWFkeSBpbnNucyB0bworCWV4ZWN1dGUgaXMgbm93IHByZXNlcnZlZCBhY2NvcmRpbmcgdG8gdGhlaXIgYHByaW9yaXR5JyBpbiB0aGUKKwlpbnNuIGNoYWluLCBhbmQgbm8gbG9uZ2VyIG9uIHRoZWlyIG9yZGVyIGluIHRoZSBkZXBlbmRlbmN5CisJbGlzdCBmcm9tIHdoaWNoIHRoZXkgd2VyZSBsYXVuY2hlZC4KKwkoc2NoZWR1bGVfYmxvY2spOiBSZW1vdmVkIHN1cHBvcnQgZm9yIHRyeWluZyB0byBzY2hlZHVsZSBpbnNucworCXRha2luZyBicmFuY2ggZGVsYXlzIGludG8gYWNjb3VudC4gIFJlb3JnLmMgc2hvdWxkIGJlIGhhY2tlZAorCXRvIHVuZGVyc3RhbmQgd2hpY2ggaW5zbnMgdG8gcHVsbCBpbnRvIGRlbGF5IHNsb3RzIGFuZCB3aGljaAorCWluc25zIHRvIGxlYXZlIGFsb25lLgorCShzY2hlZHVsZV9ibG9jayk6IChSZS0pY29tcHV0ZSBhbGwgcmVnaXN0ZXIgbGlmZSBpbmZvcm1hdGlvbiBoZXJlLgorCU5vIGxvbmdlciBkZXBlbmRlbnQgb24gZmxvdyB0byBrZWVwIGBiYXNpY19ibG9ja19saXZlX2F0X2VuZCcKKwlhbGxvY2F0ZWQuCisJKHNjaGVkdWxlX2luc25zKTogUmVjb21wdXRlIExBQkVMLT5CQVNJQyBCTE9DSyBtYXBwaW5nLCBzbyB3ZQorCWNhbiBjb21wdXRlIHJlZ2lzdGVyIGxpZmUgaW5mb3JtYXRpb24uCisJKiBydGwuYyAoYWRkX2RlcGVuZGVuY2UpOiBOZXcgZnVuY3Rpb24gdG8gYWRkIGFuZCByZW1vdmUgaW5zbgorCWRlcGVuZGVuY2llcy4gIElmIGFuIGluc24gKEkyKSBtdXN0IGV4ZWN1dGUgYWZ0ZXIgYW5vdGhlcgorCShJMSksIHdlIGFkZCBhbiBJTlNOX0xJU1QgY29udGFpbmluZyBJMSB0byBJMidzCUxPR19MSU5LUy4KKwlJZiBzdWNoIGFuIElOU05fTElTVCBpcyBhbHJlYWR5IGluIEkyJ3MgTE9HX0xJTktTLCB3ZSBkb24ndAorCWFkZCBhIHNlY29uZC4KKwkocmVtb3ZlX2RlcGVuZGVuY2UpOiBTaW1pbGFyLCBidXQgcmVtb3ZlcyBkZXBlbmRlbmNpZXMuCSBNYXkKKwlub3QgYWN0dWFsbHkgYmUgbmVlZGVkLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSxyZXN0X29mX2NvbXBpbGF0aW9uKTogQWRkZWQgY29kZSBmb3IKKwlkdW1waW5nIGluZm8gYWJvdXQgaW5zbiBzY2hlZHVsaW5nLgorCitGcmkgQXVnIDI0IDE3OjI0OjAzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBJbXBsZW1lbnQgYGFsaWduZWQgKElOVEVHRVIpJyBhdHRyaWJ1dGUgZm9yIHJlYWwuCisJKiBjLXBhcnNlLnkgKGF0dHJpYik6IFJlYWxseSByZWNvcmQgaW5mbyBmb3IgYGFsaWduZWQnIGF0dHJpYnV0ZS4KKwlEb24ndCB3YXJuIGZvciBhbnkgaW50ZWdlciBhbGlnbm1lbnQuCisJKGF0dHJpYnV0ZV9saXN0KTogTWFrZSBhIGxpc3QuCisJKGluaXRkY2wsIG5vdHlwZV9pbml0ZGNsLCBjb21wb25lbnRfZGVjbGFyYXRvcik6IEhhbmRsZSB0aGF0IGluZm8uCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb24uCisKK0ZyaSBBdWcgMjQgMDc6MTI6MDUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2VuYXR0cnRhYi5jIChpbnNuLWNvbmZpZy5oKTogVGhpcyBpcyByZWFsbHkgbmVlZGVkIGFmdGVyIGFsbC4KKwkqIE1ha2VmaWxlLmluIChnZW5hdHRyYWIubyk6IFNob3cgZGVwZW5kZW5jeSBvbiBpbnNuLWNvbmZpZy5oLgorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IERvbid0IHVwZGF0ZSBxdHlfYmlydGggZm9yIGEKKwlyZWdpc3RlciB3aG9zZSBxdWFudGl0eSBpcyA8PSAwLgorCisJKiBmb2xkLWNvbnN0LmMgKGRlY29kZV9maWVsZF9yZWZlcmVuY2UpOiBBY3R1YWxseSBvYnRhaW4gdW5zaWduZWQKKwl0eXBlIHdoZXJlIG9uZSBpcyB3YW50ZWQuCisJKG1lcmdlX2NvbXBvbmVudF9yZWZlcmVuY2VzKTogQ29ycmVjdGx5IHRlc3QgZm9yIG11dHVhbGx5IGV4Y2x1c2l2ZQorCWNvbmRpdGlvbnMuCisKK1RodSBBdWcgMjMgMTQ6NTY6NDQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0aWFsaXplcik6IE5vIHBlZGFudGljIHdhcm5pbmcgZm9yIHN0cmluZworCWFuZCBhcnJheSBvZiB1bnNpZ25lZCBjaGFyLgorCisJKiB0cmVlLmMgKGdldF9pZGVudGlmaWVyKTogRG8gaWRfY2xhc2hfbGVuIHN0dWZmIGlmIGxlbmd0aCBlcXVhbHMgdGhhdC4KKworVGh1IEF1ZyAyMyAxMDozMDoxMCAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLXRyZWUuaCAoQ0xBU1NUWVBFX0NJRCk6IEtleSBvZmYgb2YgVFlQRV9NQUlOX1ZBUklBTlQuCisKK1RodSBBdWcgMjMgMDY6NDQ6MzMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3V0LXJvbXAuYyAocm9tcF9wdXNoZXNfc3RhY2spOiBEb24ndCBjb3VudAorCWN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUgaW4gc2l6ZSBvZiBzdGFjay4KKworV2VkIEF1ZyAyMiAxODowMDowNyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0bS1hMjlrLmgsIHRtLWEyOWt1bml4LmgsIHhtLWEyOWsuaCwgYTI5ay5tZCwgb3V0LWEyOWsuYzogTmV3IGZpbGVzLgorCisJKiBjb25maWcuZ2NjIChhMjlrLXVuaXgpOiBOZXcgdGFyZ2V0LgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEFsbG93IEZVTkNUSU9OX0FSRyB0byByZXR1cm4gYW4gRVhQUl9MSVNUCisJc3BlY2lmeWluZyBtdWx0aXBsZSByZWdpc3RlcnMgdG8gbG9hZC4KKwkoc3RvcmVfb25lX2FyZyk6IExpa2V3aXNlOyBhbHNvIGRlbGV0ZSBoYW5kbGluZyBvZiBmdWxseS1pbi1yZWdpc3RlcgorCWNhc2UsIHdoaWNoIGhhc24ndCBiZWVuIGhhbmRsZWQgaGVyZSBmb3IgYSB3aGlsZS4KKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBPdXIgc3Vic2V0IG9mIGNhbGxpbmcgc2VxdWVuY2UgZm9yCisJbGlicmFyeSByb3V0aW5lcyBkb2VzIG5vdCBpbmNsdWRlIG11bHRpcGxlIHJlZ2lzdGVycyBmb3IgYW4gYXJnLgorCitUdWUgQXVnIDIxIDE3OjQ0OjQ5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBtYWtlLWNjMS5jb206IENvbXBpbGUgYW5kIGxpbmsgdmVyc2lvbi5jLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1nbnVsaWIpOiBDcmVhdGUgbGliZy5hIGlmIG5vbmUgYWxyZWFkeS4KKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBIYW5kbGUgZXhwYW5kX3Vub3AgcmV0dmFsIG5vdCBzYW1lIGFzIHRhcmdldC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZvciByZWdpc3RlciBsZXR0ZXJzLCBkb24ndCB3aW4gaWYgQkxLLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3RvcGxldmVsX2RhdGEpOiBGaXggZXJyb3IgbWVzc2FnZS4KKworCSogcHJvdG9pemUuYyAob3Blbik6IFByb3RvdHlwZSBkZWxldGVkLgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEsIG1hcmtfdXNlZF9yZWdzKTogVXBkYXRlIHJlZ19maXJzdF91c2UuCisJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogQWxsb2NhdGUgYW5kIGNsZWFyIGl0LgorCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBDYWxjdWxhdGUgSU5TTl9NQVAuCisJR2V0IGZpcnN0IHVzZSBvZiBlYWNoIHJlZyBmcm9tIHJlZ19maXJzdF91c2UuCisKKwkqIHRtLXZtcy5oIChNQVlCRV9WTVNfRlVOQ1RJT05fUFJPTE9HVUUpOiBEaXN0aW5ndWlzaCBDIGZyb20gQysrLgorCShFWFRSQV9TRUNUSU9OUywgRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOiBBZGQgYSBjb25zdCBkYXRhIHNlY3Rpb24uCisJKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBVc2UgdGhhdCBzZWN0aW9uLgorCShTRUxFQ1RfU0VDVElPTik6IEdvIHRvIHRoYXQgc2VjdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorCitUdWUgQXVnIDIxIDE4OjI2OjQ3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogTWFyayBhbnl0aGluZyByZWZlcmVuY2VkIGJ5IGFuCisJaW5zbiB0aGF0IHdpbGwgYmUgcGxhY2VkIGluIGEgZGVsYXkgc2xvdCBpbiB0aGUgZXBpbG9ndWUgYXMgYmVpbmcKKwluZWVkZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCisKKwkqIGNzZS5jIChjb25zdGFudF9wb29sX2VudHJpZXNfZm91bmQpOiBOZXcgc3RhdGljIHZhci4KKwkoY3NlX21haW4pOiBJbml0aWFsaXplIGl0LgorCSh1c2VfcmVsYXRlZF92YWx1ZSk6IENvcnJlY3RseSBsb29rIGZvciByZWdpc3RlcnMgaW4gaGFzaCB0YWJsZS4KKwkoZm9sZF9ydHgpOiBGb2xkIGNvbnN0YW50IHBvb2wgZW50cmllcyB0byB0aGVpciBjb25zdGFudHMgYW5kCisJc2V0IGNvbnN0YW50X3Bvb2xfZW50cmllc19mb3VuZC4KKwkoY3NlX2luc24pOiAgSWYgd2Ugd2VyZW4ndCBhYmxlIHRvIHBsYWNlIGEgY29uc3RhbnQgaW4gYW4gaW5zbgorCWFuZCB3ZSBoYXZlIHByZXZpb3VzbHkgc2VlbiBjb25zdGFudCBwb29sIGVudHJpZXMgdXNlZCwgc2V0IHVwCisJdG8gdHJ5IHRoZSBjb25zdGFudCBwb29sIGVudHJ5IGFsc28uCisKK01vbiBBdWcgMjAgMTI6MTQ6MjcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFNldCBMQVNUX05BTUVEIGZvciBwYXJtIGJlZm9yZSBkdW1teS4KKwlTZWUgQXVndXN0IDkgY2hhbmdlIGluIGMtcGFyc2UueS4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IFNwbGl0IC1vRk9PIGludG8gdHdvIGFyZ3VtZW50cy4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogSGFuZGxlIENPTVBPTkVOVF9SRUYgYW5kCisJQVJSQVlfUkVGIGRpcmVjdGx5IGFzIG91dHB1dCBvcGVyYW5kcy4JQXZvaWRzIGNyYXNoIGlmIEJMS21vZGUuCisKKwkqIGMtcGFyc2UueSwgY3BsdXMtcGFyc2UueSwgb2JqYy1wYXJzZS55OiBJbmNsdWRlIHN0ZGlvIGJlZm9yZSBpbnB1dC5oLgorCSogaW5wdXQuaDogRGVjbGFyZSBmaW5wdXQuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBEb24ndCBhZGp1c3QgZm9yIEVYVFJBIHNlcGFyYXRlbHkKKwlpZiB3aWxsIGhhdmUgdG8gYWRqdXN0IHRoZSBzdGFjayBhbnl3YXkuCisKKwkqIG02OGsubWQgKCpzaCpzaTMpOiBPbiA2ODAwMCwgb3B0aW1pemUgY2FzZSBvZiA+PSAxNiBiaXRzLgorCisJKiB2YXJhc20uYyAoZGVjb2RlX3J0eF9jb25zdCk6IERvbid0IGRlcmVmZXJlbmNlIGEgUExVUworCXN1YmV4cHJlc3Npb24gb2YgYSBDT05TVCB0d2ljZS4KKworU3VuIEF1ZyAxOSAyMTo1MTo1MSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGZpbnB1dCk6IERlZmluZSBoZXJlLgorCSogKi1wYXJzZS55IChsaW5lbm8sIGZpbnB1dCk6IER1cGxpY2F0ZSBkZWZpbml0aW9ucyBkZWxldGVkLgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZmluZF9yZWcpOiBUZXN0IGJlc3RfcmVnIGFnYWluc3QgMCwKKwlub3QgZmlyc3RfcHNldWRvX3JlZ2lzdGVyLgorCitTdW4gQXVnIDE5IDE3OjQ4OjIyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cGxvdy5jIChwbHVzX2NvbnN0YW50KTogSWYgYWRkaW5nIHRvIGNvbnN0YW50IHBvb2wgY29uc3RhbnQsCisJcmV0dXJuIGEgbmV3IG9uZS4KKworCSogZ2VuYXR0cnRhYi5jOiBOZWVkIG5vdCBpbmNsdWRlIGluc24tY29uZmlnLmguCisKK1N1biBBdWcgMTkgMTc6MjM6MTAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHRtLWhwOWszMjBic2QuaCAoQ1BQX1NQRUMpOiBEZWYgX19IQVZFXzY4ODgxX18gbGlrZSBfX0hBVkVfRlBVX18uCisKKwkqIE1ha2VmaWxlLmluIChVU0VfQUxMT0NBKTogVGVzdCB3YXMgYmFja3dhcmRzLgorCShVU0VfSE9TVF9BTExPQ0EpOiBMaWtld2lzZS4KKworU3VuIEF1ZyAxOSAwOTo1ODoxNiAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIHN0bXQuYzogRml4ZXMgZnJvbSAyLjAgZm9yIGZpeHVwX2dvdG8gaW5jb3Jwb3JhdGVkIGhlcmUuCisKKwkqIGNwbHVzLWRlY2wyLmMgKHdyaXRlX3Z0YWJsZV9lbnRyaWVzKTogRG9uJ3QgdGVzdCBUUkVFX0VYVEVSTkFMCisJb2YgREVDTF9DT05URVhUIChGTikuICBUUkVFX0VYVEVSTkFMIGlzIG5vdCBtZWFuaW5nZnVsIGZvciB0eXBlcy4KKworRnJpIEF1ZyAxNyAyMjoxNDowOSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBEb24ndCBhYm9ydCBhZnRlciBmbG9hdGluZyBsaWIgY21wLgorCitUaHUgQXVnIDE2IDIzOjE2OjQwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSwgYXNzZW1ibGVfc3RhdGljX3NwYWNlKTogRG9uJ3QKKwljYWxsIGRhdGEgc2VjdGlvbiBpZiAtZnNoYXJlZC1kYXRhLiAgSWYgdGhpcyBzZWN0aW9uIGlzIG5lZWRlZCwKKwlpdCBzaG91bGQgYmUgZW50ZXJlZCBmcm9tIGVsc2V3aGVyZSwgYW5kIHRoaXMgaXMgYmVsaWV2ZSB0byBiZQorCWRvbmUgaW4gYWxsIGtub3duIGNhc2VzLgorCShvdXRwdXRfY29uc3RhbnRfcG9vbCk6IEFkZCBzdXBwb3J0IGZvciBBU01fT1VUUFVUX1NQRUNJQUxfUE9PTF9FTlRSWQorCXdoaWNoIHdyaXRlcyBjZXJ0YWluIGNvbnN0YW50IHBvb2wgZW50cmllcyBzcGVjaWFsbHk7IHVzZWQgZm9yIFRPQworCW9uIFJTLzYwMDAuCisJKGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwpOiBOZXcgZnVuY3Rpb24uCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogQ2FsbCBpdC4KKworCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogRG9uJ3QgZm9sbG93IGFyb3VuZCBpbmZpbml0ZSBsb29wcy4KKworCSogdmFyYXNtLmMgKHN0cnVjdCBydHhfY29udCk6IERvbid0IHVzZSBlbnVtcyBpbiBiaXQgZmllbGRzIGlmCisJT05MWV9JTlRfRklFTERTIGlzIGRlZmluZWQuCisKKwkqIGNzZS5jIChyZW1vdmUpOiBSZW5hbWUgdG8gcmVtb3ZlX2Zyb21fdGFibGUgdG8gYXZvaWQgY29uZmxpY3QKKwl3aXRoIGByZW1vdmUnIGRlZmluZWQgaW4gc3RkaW8uaC4KKworVGh1IEF1ZyAxNiAyMjo0NDozNSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jOiBmaXh1cF9nb3RvcyBtdXN0IGlnbm9yZSBibG9ja3Mgc3RhcnRlZCBhZnRlciB0aGUgZ290by4KKwkoYmxvY2tfc3RhcnRfY291bnQpOiBOZXcgdmFyaWFibGUsIGFuZCBzbG90IGluIHNvbWUgc3RydWN0dXJlcy4KKwkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogSW5pdGlhbGl6ZSBpdC4KKwkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzKTogSW5jcmVtZW50IGl0IGFuZCBzdG9yZSBpbiBzdHJ1Y3QgbmVzdGluZy4KKwkoZXhwYW5kX2dvdG8pOiBTdG9yZSBpdCBpbiBzdHJ1Y3QgZ290b19maXh1cC4KKwkoZml4dXBfZ290b3MpOiBDb21wYXJlIGZpeHVwJ3MgY291bnQgd2l0aCBibG9jaydzIGNvdW50LgorCShzYXZlX3N0bXRfc3RhdHVzLCByZXN0b3JlX3N0bXRfc3RhdHVzKTogSGFuZGxlIGJsb2NrX3N0YXJ0X2NvdW50LgorCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTWFrZSBzbG90IHRvIHNhdmUgaXQuCisKK1RodSBBdWcgMTYgMTg6MDI6MDMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG9idGFicy5jIChleHBhbmRfZml4LCBleHBhbmRfZmxvYXQpOiBTdXBwb3J0IGRpcmVjdCBjb252ZXJzaW9uCisJYmV0d2VlbiBTRm1vZGUgYW5kIGZpeGVkIG1vZGVzIGJ5IGxpYnJhcnkgY2FsbC4KKworV2VkIEF1ZyAxNSAxODozNjoyOCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBBbGxvdyAtTSB0byB3b3JrIG9uIC5zIGZpbGVzIGJ5IGNoZWNraW5nIGZvciAucworCWFuZCAuUyBzdWZmaXhlcyB3aGVuIHdyaXRpbmcgZGVwZW5kZW5jaWVzLgorCisJKiByZW9yZy5jIChvcHRpbWl6ZV9za2lwLCBmaWxsX2VhZ2VyX2RlbGF5X3Nsb3RzLCB0cnlfaG9zdF90YXJnZXQpOgorCURvbid0IG5lZWQgdG8gY2FsbCBjYW5fcmV2ZXJzZV9jb21wYXJpc29uX3AgYmVjYXVzZSBpbnZlcnRfanVtcCBpcworCXNhZmUgZm9yIGZsb2F0aW5nLXBvaW50OyBvbmx5IHJldmVyc2VfY29uZGl0aW9uIGlzbid0LgorCitXZWQgQXVnIDE1IDE1OjUwOjM2IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogU2tpcCBwYXN0IGNvbnN0IGFuZCB2b2xhdGlsZSBxdWFsaWZpZXJzCisJdGhhdCBtaWdodCBhcHBlYXIgaW4gbWV0aG9kIG5hbWVzLgorCitXZWQgQXVnIDE1IDE1OjQ0OjE3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKGhhc2gsIGlzX3Jlc2VydmVkX3dvcmQpOiBVc2UgX19pbmxpbmUuCisKKwkqIGNjY3AuYyAobWFpbik6IFN1cHBvcnQgLWROIGFuZCAtZEQuICBTdXBwb3J0IC1saW50LgorCShkdW1wX21hY3Jvcyk6IFR3byBuZXcgYWx0ZXJuYXRpdmVzLgorCShoYW5kbGVfZGlyZWN0aXZlKTogT3V0cHV0IG1hY3JvIGRlZmluaXRpb25zIGlmIC1kTiBvciAtZEQuCisJKHJlc2Nhbik6IENoZWNrIGNvbW1lbnRzIGlmIC1saW50LgorCShnZXRfbGludGNtZCk6IE5ldyBzdWJyb3V0aW5lLgorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mc2hvcnQtZG91YmxlLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENyZWF0ZSBkb3VibGVfdHlwZV9ub2RlIGFjY29yZGluZ2x5LgorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1Xbm8uLi4KKworVHVlIEF1ZyAxNCAyMzoxMDo0MCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBsb3cuYyAoYnJlYWtfb3V0X21lbW9yeV9yZWZzKTogRG9uJ3QgYnJlYWsgb3V0IHJlZmVyZW5jZSBpZgorCWNvbnN0YW50IGJ1dCBub3QgbGVnaXRpbWF0ZSBjb25zdGFudCBmb3IgYSBtYWNoaW5lIGluc24uCisJKG1lbW9yeV9hZGRyZXNzKTogT25seSBwdXQgbGVnaXRpbWF0ZSBjb25zdGFudHMsIHJhdGhlciB0aGFuIGFsbAorCWNvbnN0YW50cywgaW50byByZWdpc3RlcnMgaWYgdGhleSBhcmUgdXNlZCBhcyBhbiBhZGRyZXNzLgorCitUdWUgQXVnIDE0IDE0OjM0OjAyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdCk6IENhbid0IHB1dCBzb21ldGhpbmcgaW4gYQorCW5vbi1hbm51bGxlZCBkZWxheSBzbG90IHRoYXQgY2FuIHRyYXAuCisKKwkqIHRtLWk4NjAuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogVHlwbyB0ZXN0aW5nIG9mZnNldCBhbGlnbm1lbnQuCisKKwkqIGNjY3AuYyAoZG9fYXNzZXJ0LCBkb191bmFzc2VydCwgY2hlY2tfYXNzZXJ0aW9uKTogTmV3IGZ1bmN0aW9ucy4KKwkoY29tcGFyZV9rZXl3b3JkX2xpc3RzLCByZWFkX2tleXdvcmRfbGlzdCwgZnJlZV9rZXl3b3JkX2xpc3QpOgorCU5ldyBmdW5jdGlvbnMuCisJKiBjZXhwLnkgKHl5bGV4KTogQWxsb3cgYCMnIGFzIHRva2VuLgorCVJldHVybiBuYW1lIGFuZCBsZW5ndGggb2Ygc3ltYm9sLgorCShrZXl3b3Jkcyk6IE5ldyBub250ZXJtaW5hbC4KKwkoZXhwcik6IFJlY29nbml6ZSAjIHRvIHRlc3QgYW4gYXNzZXJ0aW9uLgorCShVX0NIQVIsIHN0cnVjdCBhcmdsaXN0KTogRGF0YSB0eXBlcyBjb3BpZWQgZnJvbSBjY2NwLmMuCisJKCV1bmlvbik6IE5ldyBhbHRlcm5hdGl2ZXMgYGtleXdvcmRzJyBhbmQgYG5hbWUnLgorCitNb24gQXVnIDEzIDIyOjI2OjE5IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRtLXJvbXAuaCAoU0xPV19CWVRFX0FDQ0VTUyk6IFNldCB0byAwLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkLCBleHRyYWN0X2JpdF9maWVsZCk6IFVzZSBnZXRfYmVzdF9tb2RlCisJdG8gc2VsZWN0IG1vZGUgdG8gdXNlIGZvciBhY2Nlc3NpbmcgbWVtb3J5IHdoZW4gYml0ZmllbGQgaW5zbnMgZG9uJ3QKKwlhY2NlcHQgbWVtb3J5LgorCisJKiBjLWNvbW1vbi5jIChyZXdyaXRlX2Zvcl9tZXJnZWRfcmVmLCBtYWtlX21lcmdlZF9yZWYpOiBEZWxldGVkLgorCShtZXJnZV9jb21wb25lbnRfY29tcGFyaXNvbnMpOiBEZWxldGUgZnJvbSBoZXJlLgorCSogYy10cmVlLmggKG1lcmdlX2NvbXBvbmVudF9jb21wYXJpc29ucyk6IE5vIGxvbmdlciBnbG9iYWwuCisJKiBjLWNvbnZlcnQuYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IERvbid0IHRyeSB0byBtZXJnZSBjb21wb25lbnQKKwlyZWZlcmVuY2VzIGhlcmU7IG5vdyBkb25lIGluIGZvbGQuCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4gKGZvbGQtY29uc3Qubyk6IE5vdyBpbmNsdWRlcyBmbGFncy5oLgorCSogZm9sZC1jb25zdC5jOiBMaWtld2lzZS4KKwkoU1RSSVBfTk9QUyk6IE5ldyBtYWNyby4KKwkoZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSwgYWxsX29uZXNfbWFzayk6IE5ldyBmdW5jdGlvbnMuCisJKG1lcmdlX2NvbXBvbmVudF9yZWZlcmVuY2VzKTogUHV0IHJld3JpdHRlbiB2ZXJzaW9uIGhlcmUuCisJVGhpcyBmaXhlcyBidWdzIGluIHRoZSB3YXkgdGhhdCBjb21wYXJpc29ucyB3aXRoIG5vbi1lcXVhbAorCWNvbnN0YW50cyAoIXAtPmEgJiYgcC0+YikgYXJlIGhhbmRsZWQgYW5kIGluIGVuZGlhbm5lc3MgY2hlY2tpbmcuCisJQWxzbyBhY2NlcHRzIG1vcmUgZ2VuZXJhbCBjb21wYXJpc29ucywgYW5kLCBpbiBwYXJ0aWN1bGFyLCBpdHMKKwlvd24gb3V0cHV0IHNvIG1vcmUgdGhhbiBhIHBhaXIgb2Ygb3BlcmF0aW9ucyBjYW4gYmUgbWVyZ2VkLgorCShmb2xkKTogQ2FsbCBpdCBmb3IgVFJVVEhfe0FORCosT1IqfV9FWFBSLgorCisJKiB0cmVlLmRlZiAoQklUX0ZJRUxEX1JFRik6IE5ldyB0cmVlIGNvZGUuCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBTdXBwb3J0IEJJVF9GSUVMRF9SRUYuCisJSWYgYml0ZmllbGQgaXMgYSBjb21wbGV0ZSBtb2RlLXNpemVkIHVuaXQsIHJldHVybiB0aGF0IG1vZGU7IGlmIGl0CisJaXMgYSBzdWJzZXQgb2YgYml0cyB3aXRoaW4gYSBtb2RlLXNpemVkIHVuaXQsIHJldHVybiBWT0lEbW9kZS4KKwkoZXhwYW5kX2Fzc2lnbm1lbnQpOiBDaGVjayBmb3IgQklUX0ZJRUxEX1JFRi4KKwlVc2UgbW9kZSByZXR1cm5lZCBmcm9tIGdldF9pbm5lcl9yZWZlcmVuY2UgdG8gc2VlIGlmIGJpdCBmaWVsZC4KKwkoc3RvcmVfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KKwkoc3RvcmVfZmllbGQpOiBEb24ndCBwYXNzIGFyZyBCSVRfRklFTEQ7IHVzZSBNT0RFID09IFZPSURtb2RlCisJaW5zdGVhZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKGV4cGFuZF9leHByLCBjYXNlIEJJVF9GSUVMRF9SRUYpOiBOZXcgY2FzZS4gIEhhbmRsZWQgc2FtZSBhcworCUNPTVBPTkVOVF9SRUYuCisJVXNlIG1vZGUgcmV0dXJuZWQgZnJvbSBnZXRfaW5uZXJfcmVmZXJlbmNlIHJhdGhlciB0aGFuIERFQ0xfQklUX0ZJRUxELgorCShleHBhbmRfaW5jcmVtZW50KTogTXVzdCBzdGFiaWxpemUgQklUX0ZJRUxEX1JFRi4KKwkoZG9fanVtcCwgY2FzZSBOT1BfRVhQUik6IENoZWNrIGZvciBpbm5lciBCSVRfRklFTERfUkVGIGFuZCBBUlJBWV9SRUYuCisJKGRvX2p1bXAsIGNhc2UgQ09NUE9ORU5UX1JFRik6IEdlbmVyYWxpemUgdG8gaGFuZGxlIEJJVF9GSUVMRF9SRUYKKwlhbmQgc29tZSBBUlJBWV9SRUZzIGFsc28uCisJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IEhhbmRsZSBCSVRfRklFTERfUkVGLgorCSogdHJlZS5jIChzdGF0aWNwKTogUmV3b3JrIHRvIHVzZSBzd2l0Y2ggaW5zdGVhZCBvZiBpZi10aGVuLWVsc2UuCisJQWRkIHN1cHBvcnQgZm9yIEJJVF9GSUVMRF9SRUYuCisJKHN0YWJpbGl6ZV9yZWZlcmVuY2UsIHNpbXBsZV9jc3RfZXF1YWwpOiBTdXBwb3J0IEJJVF9GSUVMRF9SRUYuCisKKwkqIGMtY29tbW9uLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6IFJld29yayB0byB1c2Ugc3dpdGNoIHJhdGhlcgorCXRoYW4gaWYtdGhlbi1lbHNlLgorCUdlbmVyYXRlIGVpdGhlciBUUlVUSF97T1IqfEFORCp9X0VYUFIgb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFzCisJbXVjaCBhcyBwb3NzaWJsZS4KKwlIYW5kbGUgUkVBTF9DU1QsIEFERFJfRVhQUiwgQUJTX0VYUFIsIEZMT0FUX0VYUFIsIEZGU19FWFBSLAorCUxST1RBVEVfRVhQUiwgUlJPVEFURV9FWFBSLCBCSVRfWE9SX0VYUFIsIGFuZCBNSU5VU19FWFBSLgorCUNhbGwgZm9sZCBmb3IgQ09ORF9FWFBScyB0aGF0IHdlIG1ha2UuCisJKiBjLWNvbnZlcnQuYyAoYnVpbGRfdW5hcnlfb3ApOiBpbnZlcnRfdHJ1dGh2YWx1ZSBjYW4ndCByZXR1cm4gMCwKKwlzbyBkb24ndCBjaGVjayBmb3IgaXQuCisJKGludmVydF90cnV0aHZhbHVlKTogRGVsZXRlIGZyb20gaGVyZS4KKwkoY29udmVydF90b19pbnRlZ2VyLCBidWlsZF9jb25kaXRpb25hbF9leHByKTogVHJ5IHRvIGZvbGQgQ09ORF9FWFBSLgorCSogYy1wbHVzLWN2dC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBMaWtld2lzZS4KKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCisJKGJ1aWxkX3VuYXJ5X29wKTogaW52ZXJ0X3RydXRodmFsdWUgY2FuJ3QgcmV0dXJuIDAuCisJKGludmVydF90cnV0aHZhbHVlKTogRGVsZXRlIGZyb20gaGVyZS4KKwkqIGZvbGQtY29uc3QuYyAoaW52ZXJ0X3RydXRodmFsdWUpOiBNb3ZlIHRvIGhlcmUuCisJRG9uJ3QgaW52ZXJ0IGZsb2F0aW5nLXBvaW50IHRlc3QuCisJTG9vayBpbnNpZGUgY29udmVyc2lvbnMuCisJVXNlIHJlY3Vyc2l2ZSBjYWxsIHRvIG5lZ2F0ZSBpbnNpZGUgbG9naWNhbCBvcGVyYXRpb25zIHJhdGhlciB0aGFuCisJYnVpbGRpbmcgYSBUUlVUSF9OT1RfRVhQUi4KKwlBbGxvdyBvbmx5IGNlcnRhaW4gVFJFRV9DT0RFcyBhcyBvcGVyYW5kczsgYWJvcnQgZm9yIHRoZSByZXN0LgorCShmb2xkX2NvbnZlcnQpOiBBY2NlcHQgc2Vjb25kIGFyZ3VtZW50IHRoYXQgaXMgaXRlbSBiZWluZworCWNvbnZlcnRlZCB0byBlbnN1cmUgdGhhdCBOT1BzIGhhdmUgYmVlbiBzdHJpcHBlZC4KKwkob3BlcmFuZF9lcXVhbF9wKTogUmV0dXJuIDAgaWYgZWl0aGVyIG9wZXJhbmQgaGFzIHNpZGUgZWZmZWN0cy4KKwlJZiBib3RoIGludGVnZXIgb3IgcmVhbCBjb25zdGFudHMsIGNoZWNrIHRoZSB2YWx1ZXMuCisJRG8gYSBtb3JlIHRob3JvdWdoIHRlc3QgdG8gc2VlIGlmIHR3byBpdGVtcyBhcmUgaWRlbnRpY2FsOworCXNwZWNpZmljYWxseSwgY29tcGFyZSB0aGUgb3BlcmFuZHMgb2Ygc2ltcGxlIFRSRUVfQ09ERXMuCisJKG9taXRfb25lX29wZXJhbmQsIGRpc3RyaWJ1dGVfYml0X2V4cHIpOiBOZXcgZnVuY3Rpb25zLgorCShtYWtlX2JpdF9maWVsZF9yZWYsIG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlKTogTGlrZXdpc2UuCisJKGZvbGQpOiBSZW1vdmUgTE9TRVM7IG5vdyBkb25lIGV4cGxpY2l0bHkgb3IgYnkgY2FsbGluZworCW9taXRfb25lX29wZXJhbmQuICBTb21lIHByZXZpb3VzIHVzZXMgd2VyZW4ndCBuZWVkZWQuCisJVHJ5IHRvIGZvbGQgYW55IENPTkRfRVhQUnMgYW5kIHNvbWUgQ09NUE9VTkRfRVhQUnMgd2UgbWFrZS4KKwlSZW1vdmUgcGFpciBvZiBORUdBVEVfRVhQUnMgYW5kIEJJVF9OT1RfRVhQUnMuCisJQ29udmVydCAiLSAoYSAtIGIpIiB0byAiYiAtIGEiIGZvciBub24tZmxvYXRpbmctcG9pbnQuCisJQUJTX0VYUFIgYXBwbGllZCB0byBBQlNfRVhQUiBvciBORUdBVEVfRVhQUiBpcyBBQlNfRVhQUiBvZiBpbm5lciBhcmcuCisJQ29udmVydCAiYSArICgtYikiIHRvICJhIC0gYiIgYW5kICJhIC0gKC1iKSIgdG8gImEgKyBiIi4KKwlJZiBhZGRpbmcgQU5EcyB3aXRoIGNvbnN0YW50cyB0aGF0IGhhdmUgbm8gYml0cywgaW4gY29tbW9uLCB0cnkKKwliaXR3aXNlLW9yLCBzaW5jZSB3ZSBtYXkgdGhlbiBiZSBhYmxlIHRvIGRpc3RyaWJ1dGUgdGhlIG9wZXJhdGlvbiwKKwllLmcuLCAoYSAmIDcpICsgKGEgJiAweDcwKSAtPiBhICYgMHg3Ny4KKwlBZGQgbWlzc2luZyBsYXN0IGFyZyB0byBvcGVyYW5kX2VxdWFsX3AgY2FsbC4KKwlDYWxsIGRpc3RyaWJ1dGVfYml0X2V4cHIgZm9yIEJJVF9BTkRfRVhQUiBhbmQgQklUX0lPUl9FWFBSLgorCUV4Y2x1c2l2ZS1vciB3aXRoIGFsbCBvbmVzIGlzIGJpdCBuZWdhdGlvbi4KKwlJZiBzZWNvbmQgYXJnIG9mIEJJVF9BTkRfVENfRVhQUiBpcyBjb25zdGFudCwgY29udmVydCB0byBCSVRfQU5EX0VYUFIuCisJSGFuZGxlIFRSVVRIX05PVF9FWFBSIGJ5IGNhbGxpbmcgaW52ZXJ0X3RydXRodmFsdWUuCisJQ2FsbCBvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSBmb3IgY29tcGFyaXNvbnMgb2YgYml0ZmllbGRzLgorCUhhbmRsZSAiYSA/IDEgOiAwIiBhbmQgImEgPyAwIDogMSIgYXMgdGVzdCBvciBuZWdhdGVkIHRlc3QuCisJU2ltcGxpZnkgImEgJiA0ID8gYSAmIDQgOiAwIiBhbmQgImEgPyBhIDogMCIgdG8gcmVtb3ZlIGNvbmRpdG9uYWwuCisJKiBzdG9yLWxheW91dC5jIChnZXRfYmVzdF9tb2RlKTogTmV3IGZ1bmN0aW9uLgorCSogbWFjaG1vZGUuaDogRGVmaW5lIGl0LgorCSogdHJlZS5jIChpbnRlZ2VyX3BvdzJwKTogTmV3IGZ1bmN0aW9uLgorCSogdHJlZS5oOiBEZWNsYXJlIG5ldyBmdW5jdGlvbnMgYW5kIGZ1bmN0aW9ucyBubyBsb25nZXIgc3RhdGljLgorCitNb24gQXVnIDEzIDE3OjQ1OjEzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY29uZmlnLmdjYyAoc3VuMy1tYWNoKTogTmV3IGFsdGVybmF0aXZlLgorCSogdG0tc3VuM21hY2guaDogTmV3IGZpbGUuCisKKwkqIG02OGsubWQgKGJmZXh0dSBwYXR0ZXJucyk6IFNldCBDQ19OT1RfTkVHQVRJVkUuCisKK01vbiBBdWcgMTMgMTA6MTQ6MzcgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsMi5jIChmbGFnX21pbmltYWxfZGVidWcpOiBOb3cgaXMgZGVmYXVsdCBpcworCS1mZmxhZy1taW5pbWFsLWRlYnVnLgorCisJKiBjcGx1cy10cmVlLmMgKHZpcnR1YWxfbWVtYmVyKTogUmV0dXJuIHRoZSBhc3NvYyBvZiBhIG5vbi12aXJ0dWFsCisJYmFzZXR5cGUgdGhhdCBjb21lcyBmcm9tIGEgdmlydHVhbCBiYXNlY2xhc3MuICBDaGFuZ2VkIGNhbGxlcnMKKwl3aGljaCB1c2VkIHRvIGNhbGwgYHZhbHVlX21lbWJlcicgdG8gY2FsbCB2aXJ0dWFsX21lbWJlciBpbnN0ZWFkLgorCitNb24gQXVnIDEzIDA2OjU0OjA0IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfdHdvdmFsX2Jpbm9wKTogRml4IHR5cG8uCisKKwkqIGNzZS5jIChsb29rdXBfYXNfZnVuY3Rpb24pOiBEb24ndCBhc3N1bWUgQ09ERSBpcyBhIHVuYXJ5CisJb3BlcmF0aW9uLiAgSXQgbWlnaHQgYmUgYSBiaW5hcnkgb3Agb3IgUkVHLgorCitTdW4gQXVnIDEyIDIxOjQyOjU1IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogRG9uJ3QgYWJvcnQgaWYgZmlyc3QgYXJnIG9mCisJQ09ORF9FWFBSIGlzbid0IGEgY29tcGFyaXNvbjsganVzdCBzdXBwcmVzcyB0aGUgZG9fc3RvcmVfZmxhZyBjYWxsLgorCitTdW4gQXVnIDEyIDE0OjI2OjQ1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTogRGVsZXRlIGNvbW1hIGFmdGVyIGxhc3QgbmFtZS4KKwkqIGMtcGFyc2UuaCAoZW51bSByaWQpOiBMaWtld2lzZS4KKwkqIGV4cHIuaCAoZW51bSBvcHRhYl9tZXRob2RzKTogTGlrZXdpc2UuCisJKiBzdGFiLmg6IEFkZCBkdW1teSBlbnVtIG5hbWUgYXQgZW5kLgorCisJKiBjb25maWcuZ2NjIChnZW5peCk6IFNldCB0bV9maWxlLgorCSogdG0tZ2VuaXguaCAoQVNNX09VVFBVVF9ET1VCTEUpOiBOZXcgb3ZlcnJpZGluZyBkZWZpbml0aW9uLgorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX3R5cGUsIHN0cnVjdCB0cmVlX2RlY2wpOiBIYW5kbGUgT05MWV9JTlRfRklFTERTLgorCSogcnRsLmggKHN0cnVjdCBydHhfZGVmKTogTGlrZXdpc2UuICBUaGF0IG1hY3JvIGdvZXMgaW4geG0tKi5oLgorCitTYXQgQXVnIDExIDE2OjU2OjE5IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQ2hlY2sgdmFsdWUgb2YgSEFWRV9yZXR1cm4gYmVmb3JlCisJY2FsbGluZyBnZW5fcmV0dXJuLgorCisJKiByZW9yZy5jIChvcHRpbWl6ZV9za2lwKTogRG9uJ3QgcmVqZWN0IHNraXAgd2hlbiB3ZSBqdW1wIGFyb3VuZCBhbgorCWluc24gYW5kIG1lcmdlIGF0IHRoZSByZXR1cm4gcG9pbnQuCisKK0ZyaSBBdWcgMTAgMTc6MDA6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zLCBkYnhvdXRfcmVnX3Bhcm1zKTogSWdub3JlIG5hbWVsZXNzIHBhcm1zLgorCSogc2Rib3V0LmMgKHNkYm91dF9wYXJtcywgc2Rib3V0X3JlZ19wYXJtcyk6IElnbm9yZSBuYW1lbGVzcyBwYXJtcy4KKworRnJpIEF1ZyAxMCAxNDoxNDowOCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWNvZy5jIChpbmRpcmVjdF9vcGVyYW5kKTogTW9kZXMgbmVlZCBub3QgYWdyZWUgaWYgTU9ERSA9PSBWT0lEbW9kZTsKKwlyZW1vdmUgdGVzdCBmcm9tIGhlcmUgc2luY2UgaXQgaXMgaW4gbWVtb3J5X29wZXJhbmQsIHdoaWNoIHRoaXMgY2FsbHMuCisKK1RodSBBdWcJIDkgMTU6MTk6MTcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IElmIGZ1bmN0aW9uIGhhcyB2YXJpYWJsZSBudW1iZXIgb2YgYXJncywKKwlwdXQgYSBkdW1teSBkZWNsIGF0IGVuZCBvZiBwYXJtbGlzdC4KKwkqIGMtcGFyc2UueSAodW5hcnlfZXhwcik6IEhhbmRsZSAmLi4uIHdpdGggYWRkcmVzcyBvZiBkdW1teSBkZWNsLgorCisJKiB0bS0qLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IEdvIHRvIFdJTiBpbnN0ZWFkIG9mIHJldHVybmluZy4KKworCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlKTogQWRkIGNvZGUgdG8gc3VwcG9ydCBgIyBESUdJVCcKKwlidXQgZGlzYWJsZSBpdCBmb3IgdGhlIHRpbWUgYmVpbmcuCisKKwkqIHRtLWhwOWszMjAuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX0hQVVhfU09VUkNFIGlmIG5vdCBBTlNJLgorCShDUFBfUFJFREVGSU5FUyk6IERvbid0IGRlZmluZSBpdCBoZXJlLgorCURvIGRlZmluZSBhbHRlcm5hdGl2ZXMgd2l0aCBfXyBwcmVwZW5kZWQuCisKK1dlZCBBdWcJIDggMTQ6MDA6MjYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3V0LXJvbXAuYzogRG9uJ3QgaW5jbHVkZSBoYXJkLXJlZy1zZXQ7IGFscmVhZHkgaW4gaW5zbi1vdXRwdXQuYy4KKwkgCisJKiBleHBsb3cuYzogaW5zbi1mbGFncy5oIGlzIG5lZWRlZCB0byBzZWUgaWYgInByb2JlIiBpbnNuIGV4aXN0cy4KKwkqIE1ha2VmaWxlLmluIChleHBsb3cubyk6IExpa2V3aXNlLgorCitXZWQgQXVnCSA4IDEzOjM1OjAwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChjaGVja19tYWNyb19uYW1lKTogV2FybiBpZiBuYW1lIGlzIGBkZWZpbmVkJy4KKworCSogdG0tc3VuMzg2aS5oIChBU01fSURFTlRJRllfR0NDKTogSWYgcHJvZmlsaW5nLCBwdXQgYSBOT1AgYWZ0ZXIKKwlnY2NfY29tcGlsZWQuCisKK1R1ZSBBdWcJIDcgMjM6NTE6MzggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbik6IEhhbmRsZSAtVyBvcHRpb25zIGxpa2UgLWYgb3B0aW9ucy4KKwlUaGlzIHN1cHBvcnRzIC1Xbm91bnVzZWQsIGFuZCBzdWNoIGxpa2UuCisJKHdhcm5fdW5pbml0aWFsaXplZCk6IE5ldyB2YXJpYWJsZSwgY29udHJvbHMgdGhvc2Ugd2FybmluZ3MuCisJU2V0IGl0IGZvciAtV3VuaW5pdGlhbGl6ZWQsIGFuZCBmb3IgLVcuCisKK1R1ZSBBdWcJIDcgMTM6MjQ6NTggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2VuZXh0cmFjdC5jICh3YWxrX3J0eCk6IEZpeCB0eXBvIGluIE1BVENIX1BBUkFMTEVMIGNhc2UuCisKKwkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogUGFzcyBzaXplIG9mIGFsbG9jYXRlZCBzdGFjaworCXRvIGdlbl9wcm9iZS4KKworVHVlIEF1ZwkgNyAxMjoxOTo0NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHB5ci5tZCAoZXh0ZW5kc2ZkZjIsIHRydW5jc2ZkZjIsIGZsb2F0KiwgZml4Kik6IFVzZSBgJicuCisKK1R1ZSBBdWcJIDcgMDc6MTM6NTQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChmaW5kX2Nyb3NzX2p1bXApOiBJbmNsdWRlIGEgVVNFIG9yIENMT0JCRVIgaW4gY3Jvc3MganVtcAorCWJ1dCBkb24ndCBjb3VudCBpdCBhZ2FpbnN0IG1pbmltdW0gc2l6ZS4KKwlOZXZlciByZXR1cm4gd2hlbiBjcm9zcy1qdW1wIGhhc24ndCBhY3R1YWxseSBiZWVuIGRvbmUuCisKK01vbiBBdWcJIDYgMTg6NTA6MTIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmFyYXNtLmM6IEluY2x1ZGUgcmVncy5oLgorCShkZWNvZGVfcmVnX25hbWUpOiBSZW1vdmUgZXh0ZXJuIGZvciByZWdfbmFtZXM7IGl0IGlzIGluIHJlZ3MuaC4KKwkqIE1ha2VmaWxlLmluICh2YXJhc20ubyk6IERlcGVuZHMgb24gcmVncy5oLgorCitNb24gQXVnCSA2IDEyOjQ2OjA3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgd2FybiBpZiBpbml0aWFsaXplZCBmY24gaXMgZXh0ZXJuLgorCShzdGFydF9kZWNsKTogRG9uJ3Qgd2FybiBhdCBhbGwgZm9yIGluaXRpYWxpemVkIGV4dGVybi4KKworCSogZmluYWwuYyAoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBIYW5kbGUgUFJPRklMRV9CRUZPUkVfUFJPTE9HVUUuCisJKHByb2ZpbGVfZnVuY3Rpb24pOiBOZXcgc3Vicm91dGluZS4KKworCSogdG0taTM4NnNjby5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy5nY2MgKGkzODYtc2NvKTogTmV3IGFsdGVybmF0aXZlLgorCisJKiBnY2MuYyAoRU5ERklMRV9TUEVDKTogTmV3IG1hY3JvLgorCShkb19zcGVjXzEpOiBIYW5kbGUgJUUuCisJKGxpbmtfc3BlYyk6IFVzZSAlRS4KKworCSogeG0taTM4Ni5oIChhbGxvY2EpOiBEZWZpbmUgd2l0aG91dCBhcmcuCisKKwkqIE1ha2VmaWxlLmluIChzdGFnZSopOiBVc2UgUkFOTElCX1RFU1QuCisJKExJTUlUU19IKTogTmV3IHZhcmlhYmxlLgorCShVU0VSX0gpOiBVc2UgdGhhdC4KKwkqIG1ha2UtaTM4NnNjbzogTmV3IGZpbGUuCisKK1N1biBBdWcJIDUgMTM6MTE6MDQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmg6IERlbGV0ZSBhbGwgbWFjaGluZSBtb2RlIGRlZm5zOyBpbmNsdWRlIG1hY2htb2RlLmggaW5zdGVhZC4KKwkqIHRyZWUuaDogTGlrZXdpc2UuCisJKiBtYWNobW9kZS5oOiBOZXcgZmlsZS4KKwkqIHN0b3ItbGF5b3V0LmM6IE5vIGxvbmdlciBpbmNsdWRlIHJ0bC5oLgorCSogTWFrZWZpbGUuaW46IChSVExfSCwgVFJFRV9IKTogQWRkIG1hY2htb2RlLmguCisJKHN0b3ItbGF5b3V0Lm8pOiBObyBsb25nZXIgZGVwZW5kcyBvbiBSVExfSC4KKworCSogYy1jb21tb24uYyAgKGJpbmFyeV9vcF9lcnJvciwgc2hvcnRlbl9jb21wYXJlKTogU2hvdWxkIG5vIGxvbmdlcgorCWhhdmUgYmVlbiBzdGF0aWMgd2hlbiBtb3ZlZCBoZXJlLgorCitTdW4gQXVnCSA1IDEyOjU3OjAyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCwgbGF5b3V0X3VuaW9uKTogVGVzdCB2YWx1ZSBvZiAKKwlQQ0NfQklURklFTERfVFlQRV9NQVRURVJTIGZvciBiZWluZyBub256ZXJvLCBpZiBpdCBpcyBkZWZpbmVkLgorCSogdG0tKi5oOiBEZWZpbmUgd2l0aCB2YWx1ZSAxLgorCSogdG0tdmF4LmggKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBEZXBlbmRzIG9uIC1tdmF4Yy1hbGlnbm1lbnQuCisKKwkqIHByb3RvLmg6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuaW4gKFVTRVJfSCk6IEFkZCB0aGF0IGZpbGUuCisKK1N1biBBdWcJIDUgMDA6MDQ6MDggMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsMi5jIChncm9rZmllbGQpOiBJdCBpcyBubyBsb25nZXIgbGVnYWwgdG8gc3BlY2lmeQorCXRoZSBpbml0aWFsaXplciBmb3IgYSBzdGF0aWMgY29uc3QgbWVtYmVyIGluIHRoZSBjbGFzcworCWRlY2xhcmF0aW9uLiAgRGVhbGluZyB3aXRoIGRlZmF1bHQgaW5pdGlhbGl6ZXJzIGlzIGJhc2ljYWxseQorCWltcG9zc2libGUuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfZGVsZXRlKTogRG9uJ3Qgd3JhcCBgYWRkcicgaW4gYSBTQVZFX0VYUFIKKwl1bnRpbCBpdCBpcyBpbiBmYWN0IGFuIGFkZHJlc3MuCSBUaGlzIGFsbG93cyB1cyB0byBjYWxsCisJZGVzdHJ1Y3RvcnMgb24gdGhlIHJldHVybiB2YWx1ZXMgb2YgZnVuY3Rpb24gY2FsbHMuCisKKwkqIGNwbHVzLXR5cGVjay5jIChjb21tb250eXBlKTogRml4ZWQgYnVnIGluIE9GRlNFVF9UWVBFIGNhc2Ugd2hpY2gKKwlsZWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uIChzaW5jZSB3ZSBkaWQgbm90IHJlZHVjZSB0aGUgdHlwZXMKKwliZWZvcmUgd2UgcmVjdXJzZWQpLgorCisJKiBjcGx1cy1sZXguYyAoY2hlY2tfbmV3bGluZSk6IE1ha2UgYCNwcmFnbWEgaW1wbGVtZW50YXRpb24nIG1vcmUKKwlmb3JnaXZpbmcuCisKKwkqIGNwbHVzLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdCk6IENoYW5nZWQgSmFuIDIwdGggY2hhbmdlIHNvIHRoYXQKKwl3ZSB0ZXN0IHdoZXRoZXIgVFlQRSBoYXMgYSBjb25zdHJ1Y3RvciBkZWZpbmVkLCBhbmQgd2UgZG8gbm90IHRlc3QKKwlhdCBhbGwgd2hldGhlciBJTklUIHdhcyBmcm9tIGEgR05VIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gb3Igbm90LgorCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHJfMSk6IERvbid0IHJldHVybgorCWBlcnJvcl9tYXJrX25vZGUnIHVubGVzcyB0aGVyZSByZWFsbHkgd2FzIGFuIGVycm9yLiAgSWYgdGhlcmUgaXMKKwlubyB3b3JrIHRvIGRvLCByZXR1cm4gYGludGVnZXJfemVyb19ub2RlJy4KKworCSogY3BsdXMtY2xhc3MuYyAocHJvcGFnYXRlX2Jhc2V0eXBlX29mZnNldHMpOiBDb3VudCB0aGUgc3BhY2UKKwliZXR3ZWVuIGJhc2VjbGFzc2VzLCBub3QganVzdCB0aGUgc3BhY2UgdGhleSBvY2N1cHkuCisKKwkqIGNwbHVzLXR5cGVjay5jIChjb21tb250eXBlKTogRG9uJ3QgZHJvcCB0aGUgZXhjZXB0aW9ucyB0aGF0IGFyZQorCXJhaXNlZCBieSBmdW5jdGlvbnMgYW5kIG1ldGhvZHMuCisKKwkqIGNwbHVzLWN2dC5jIChjb252ZXJ0X3RvX3JlYWwpOiBGaXggaWYvZWxzZSBsZXZlbCBwcm9ibGVtIGluCisJY2FzZSB3aGVyZSBFWFBSIGlzIG9mIGFnZ3JlZ2F0ZSB0eXBlLgorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogRW1pdCBhIGxpbmUtbnVtYmVyIG5vdGUgdG8gZ2l2ZQorCXVzZXJzIGEgY2hhbmNlIHRvIHNldCBhIGJyZWFrcG9pbnQgYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbgorCW9iamVjdCB0YWtlcyBwbGFjZS4KKworCSogY3BsdXMtY2xhc3MuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBJZiB0aGUgZnVuY3Rpb24gd2UgZ2V0IGlzIG5vdAorCWRpcmVjdGx5IGZyb20gdGhlIG9iamVjdCB3ZSBoYXZlLCBjYWxsIGBjb252ZXJ0X3BvaW50ZXJfdG8nIGlmIHRoZQorCW9iamVjdCB1c2VzIG11bHRpcGxlIGluaGVyaXRhbmNlIG9yIHZpcnR1YWwgYmFzZWNsYXNzZXMuCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogRG9uJ3QgY2FsbAorCWBjb252ZXJ0X3RvX3BvaW50ZXInIHdpdGggYW4gYXJndW1lbnQgdGhhdCBtaWdodCBiZQorCXRoZSBpbnRlZ2VyIHplcm8uCisKKwkqIGNwbHVzLW1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBMb29rIGZvciBERUNMX1JFRkVSRU5DRV9TTE9UCisJaW4gUkVTVUxUX0RFQ0xzIGFzIHdlbGwuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IERvbid0IGZvcmdldCB0byBkZWFsbG9jYXRlIHRoZQorCWNvbnRhaW5lciBpZiByZXF1ZXN0ZWQuCSBSZWFsbHkgdXNlIEFVVE9fREVMRVRFIGFuZAorCUFVVE9fREVMRVRFX1ZFQyB3aXRoIHRoZSBzYW1lIGludGVycHJldGF0aW9uIGFzIGBidWlsZF9kZWxldGUnCisJZ2l2ZXMgdG8gaXRzIEFVVE9fREVMRVRFIHBhcmFtZXRlci4KKworU2F0IEF1ZwkgNCAyMjowODo0NCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IFVzZSBwcmV2X25vbm5vbmVfaW5zbi4KKwlEb24ndCBjcm9zcy1qdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhIFVTRS1DQUxMX0lOU04tQ0xPQkJFUgorCWJsb2NrOyBkb2luZyBzbyBjYW4gY29uZnVzZSByZW9yZy5jLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfYmlub3AsIGV4cGFuZF90d292YWxfYmlub3ApOgorCUlmIHByZWRpY2F0ZSBkb2Vzbid0IG1hdGNoLCBlbnN1cmUgdGhhdCBvcGVyYW5kIGlzIGluIGEgcHNldWRvCisJcmVnaXN0ZXIuICBDdXJyZW50IGNvZGUgYXNzdW1lcyB0aGF0IGFueSByZWdpc3RlciB3aWxsIHN1ZmZpY2UsCisJYnV0IGFuIGluc24gbWF5IHdhbnQgdG8gcmVqZWN0IGNlcnRhaW4gaGFyZCByZWdpc3RlcnMuCisJKGV4cGFuZF91bm9wLCBlbWl0X3Vub3BfaW5zbiwgZW1pdF9jbXBfaW5zbik6IExpa2V3aXNlLgorCitTYXQgQXVnCSA0IDE1OjI5OjA5IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBGb3IgcGFybXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSwKKwltYWtlIHRoZSBtZW1vcnkgb2JqZWN0J3MgbW9kZSBhZ3JlZSB3aXRoIHRoZSBwYXJtJ3Mgb3JpZ2luYWwKKwl0eXBlIG1vZGUuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEZpeGVkIGJyYWlubyBpbiBidWlsZGluZyBhcmd1bWVudAorCXJlZmVyZW5jZSB3aGVuIEZVTkNUSU9OX0FSR19QQVNTX0JZX1JFRkVSRU5DRSBpcyBkZWZpbmVkLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBIYWNrIG91ciB3YXkgYXJvdW5kIHRoZSBwcm9ibGVtCisJdGhhdCBzdGF0aWMgY2xhc3MgbWVtYmVycyBsb29rIGxpa2UgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGZvciB0aGUKKwlwdXJwb3NlcyBvZiBlc3RhYmxpc2hpbmcgRklSU1RfR0xPQkFMX09CSkVDVF9OQU1FLgorCisJKiBjcGx1cy1sZXguYyAocmVpbml0X3BhcnNlX2Zvcl9tZXRob2QpOiBHaXZlIGVycm9yIG1lc3NhZ2UgZm9yCisJY29tbW9uIG1pc3Rha2Ugb2YgZm9yZ2V0dGluZyB0aGUgZnVuY3Rpb24gYm9keS4KKworCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBNYWtlIGJldHRlciBlcnJvciBtZXNzYWdlCisJd2hlbiBmaWVsZCBpcyBub3QgZm91bmQuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBUWVBFX0dFVFNfKl9JTklUX1JFRiBjb21lcyBmcm9tCisJbWVtYmVycyBhcyB3ZWxsLgorCisJKiBjcGx1cy10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogR2l2ZSB3YXJuaW5nIGFib3V0IHJldHVybmluZworCW5vbi1sdmFsdWVzIHRoYXQgY29tZSBmcm9tIGZ1bmN0aW9uYWwgY2FzdHMuCisKKwkqIGNwbHVzLXNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZSk6IENoYW5nZWQgdG8gZm9sbG93IGxlZnRtb3N0CisJcGF0aCBvbmx5IHdoZW4gUEFSRU5UID09IFRZUEVfTUFJTl9WQVJJQU5UIChQQVJFTlQpLgorCisJKiBjcGx1cy1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJpZXMpOiBDYWxsIGdldF9iYXNlX2Rpc3RhbmNlCisJd2l0aCAwIHBhdGhfcHRyLCBzaW5jZSB3ZSBkbyBub3QgYXBwZWFyIHRvIHVzZSB0aGUgcGF0aCBjb21wdXRlZC4KKworRnJpIEF1ZwkgMyAwNzozNzozMCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaW5hbC5jIChsZWFmX2Z1bmN0aW9uX3ApOiBEZWxldGUgbGluZSBhZHZlcnRlbnRseSByZXRhaW5lZAorCWFmdGVyIGNoYW5nZSBvZiBKdWx5IDI5LgorCisJKiByZW9yZy5jIChvcHRpbWl6ZV9za2lwLCB0cnlfaG9pc3RfdGFyZ2V0KTogRG9uJ3QgaW52ZXJ0IGp1bXAKKwl1bmxlc3MgY2FuX3JldmVyc2VfY29tcGFyaXNvbl9wIHNheXMgaXQgaXMgT0suCVVzZSBpbnZlcnRfanVtcAorCXRvIGRvIGl0LgorCShmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IEFub3RoZXIgd2F5IGZsb3cgb2YgY29udHJvbCBjYW4gbWVyZ2UgaXMKKwlmb3IgdHdvIGluc25zIHRvIGp1bXAgdG8gdGhlIHNhbWUgcGxhY2U7IHRyeSB0byBnZXQgaW5zbnMgZnJvbSB0aGVyZS4KKwkobW9zdGx5X3RydWVfanVtcCk6IFJldHVybiAyIGZvciBhIGp1bXAgdmVyeSBsaWtlbHkgdG8gYmUgdHJ1ZSAodGhlCisJYnJhbmNoIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIGEgbG9vcCkuCisJKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBBY2NlcHQgbmV3IGFyZyBMSUtFTFkuICBJZiB0cnVlLCBzZWUgaWYgY2FuCisJcHV0IGluY3JlbWVudCBpbiBkZWxheSBzbG90IGFuZCB1bmRvIGl0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxvb3AuCisJKGZpbGxfZWFnZXJfZGVsYXlfc2xvdHMpOiBQYXNzIG5ldyBhcmcgdG8gZmlsbF9zbG90c19mcm9tX3RocmVhZC4KKwlJZiBwcmV2aW91cyBpbnNuIGlzIGNvbmRpdGlvbmFsIGp1bXAgdGhhdCBhbHNvIGRpZG4ndCBnZXQgYSBkZWxheQorCXNsb3QsIHNlZSBpZiBzd2FwcGluZyB0YXJnZXRzIGhlbHBzLgorCitGcmkgQXVnCSAzIDAwOjE4OjM1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChNQUtFX1BPUyk6IEF2b2lkIGNvbnN0YW50IG9mIHVuY2VydGFpbiBzaWduZWRuZXNzLgorCisJKiBnbnVsaWIyLmMgKF9fYmJfaW5pdF9mdW5jKTogQWRkIGR1bW15IGZ1bmN0aW9uIHRvIHByZXZlbnQgd2FybmluZy4KKworVGh1IEF1ZwkgMiAxNzo0NDo1OSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9yZXR1cm5fcnR4KTogQWRkIG5ldyB2YXJpYWJsZS4KKwkqIGZ1bmN0aW9uLmggKHJldHVybl9ydHgpOiBMaWtld2lzZS4KKwkqIGZ1bmN0aW9uLmMgKHB1c2hfZnVuY3Rpb25fY29udGV4dCwgcG9wX2Z1bmN0aW9uX2NvbnRleHQpOiBTYXZlCisJYW5kIHJlc3RvcmUgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5fcnR4LgorCShhc3NpZ25fcGFybXMsIGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybl9ydHgKKwl0byB3aGF0IGlzIHB1dCBpbiBERUNMX1JUTCAoREVDTF9SRVNVTFQgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpLgorCSogcmVvcmcuYzogTm8gbG9uZ2VyIHVzZXMgdHJlZS5oLgorCShkYnJfc2NoZWR1bGUpOiBHZXQgcmVzdWx0IFJUTCBmcm9tIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuX3J0eCBpbnN0ZWFkCisJb2YgcmVhZGluZyBpdCBmcm9tIGN1cnJlbnRfZnVuY3Rpb25fZGVjbC4KKwkqIE1ha2VmaWxlLmluIChyZW9yZy5vKTogTm8gbG9uZ2VyIGRlcGVuZHMgb24gVFJFRV9ILgorCisJKiBjc2UuYyAocmVtb3ZlX2ludmFsaWRfcmVmcyk6IE9ubHkgaW52YWxpZGF0ZSBhbiBlbnRyeSBpZiBpdCAKKwlyZWZlcmVuY2VzIHRoZSBhY3R1YWwgcmVnaXN0ZXIsIG5vdCBtZXJlbHkgc29tZXRoaW5nIHNoYXJpbmcgaXRzCisJcXVhbnRpdHkuCisJKGNzZV9pbnNuKTogRG9uJ3QgYWJvcnQgaWYgU1JDIGFuZCBTUkNfRVFVSVYgbWFwIHRvIGRpZmZlcmVudAorCWhhc2ggY2xhc3Nlcy4gIE1lcmdlIHRoZW0gaW5zdGVhZC4KKworCSogcm9tcC5tZCAobXVsc2kzKTogRW1pdCBjYWxsIHRvIGxtdWwkJCBhcyBhIHJlZ3VsYXIgaW5zbgorCXJhdGhlciB0aGFuIGEgQ0FMTF9JTlNOLgorCShkaXZzaTMsIG1vZHNpMywgdWRpdnNpMywgdW1vZHNpMywgY2FsbF9saWJmY24pOiBEZWxldGVkLgorCShkaXZtb2RzaTQsIHVkaXZtb2RzaTQpOiBOZXcgcGF0dGVybnMgdG8gY2FsbCBsZGl2JCQgYW5kIHVsZGl2JCQKKwlhcyBhIG5vcm1hbCBpbnNuIHRvIGFsbG93IENTRSdpbmcgb2YgTU9EIHdpdGggRElWLgorCitXZWQgQXVnCSAxIDIxOjU2OjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55ICh5eWxleCk6IERvbid0IHdhcm4gYWJvdXQgbm9uLWRlY2ltYWwgdW5zaWduZWQgYnkgZGVmYXVsdAorCWlmIGB1JyB3YXMgc3BlY2lmaWVkLiAgQWRkIHNpbWlsYXIgd2FybmluZyBmb3IgbG9uZyBhbmQgbG9uZyBsb25nLgorCitUdWUgSnVsIDMxIDIzOjMxOjQ2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG0tZW5jb3JlLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogT3ZlcnJpZGUsIHB1dHRpbmcgYC4nIGluIGxhYmVsLgorCisJKiB4bS12bXMuaCAoY29uc3QpOiBEZWxldGUgdGhlIGRlZmluaXRpb24uCisKK01vbiBKdWwgMzAgMTg6MzM6MDQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogTm9ybWFsbHkgbm8gd2FybmluZworCWJldHdlZW4gY2hhciAqIGFuZCB1bnNpZ25lZCBjaGFyICosIGV0Yy4KKwkoY29udmVydF9hcmd1bWVudHMpOiBJbmNsdWRlIGFyZyBudW1iZXIgaW4gaW5jb21wbGV0ZSB0eXBlIHdhcm5pbmcuCisKK01vbiBKdWwgMzAgMDc6Mzg6NTUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChpbnZlcnRfanVtcCk6IERvbid0IGRvIGFueXRoaW5nIHdpdGggbGFiZWxzIGlmIE5MQUJFTCAKKwllcXVhbHMgSlVNUF9MQUJFTC4KKwkocmVkaXJlY3RfanVtcCk6IERvbid0IHRyeSB0byByZWZlcmVuY2UgTEFCRUxfTlVTRVMgaWYgb2xhYmVsIGlzCisJemVybyAobWVhbmluZyB0aGlzIGlzIGEgcmV0dXJuIGluc24pLgorCShyZWRpcmVjdF9leHApOiBIYW5kbGUgY2FzZSBvZiBjb252ZXJ0aW5nIHJldHVybiB0byBqdW1wIHRvCisJbGFiZWwuCisKKwkqIGRieG91dC5jIChkYnhvdXRfcGFybXMpOiBBbGxvdyBwYXJhbWV0ZXIgYXQgemVybyBvZmZzZXQgZnJvbQorCUFQIHRvIGJlIHJlcHJlc2VudGVkIGFzIChNRU0gKFJFRyAuLi4pKS4KKwkqIHNkYm91dC5jIChzZGJvdXRfcGFybXMpOiBMaWtld2lzZS4KKworU3VuIEp1bCAyOSAyMjo1MTowMCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX3R3b3ZhbF9iaW5vcF9jb252ZXJ0KTogRGVsZXRlZC4KKwkoZXhwYW5kX3R3b3ZhbF9iaW5vcCk6IFJld29yayB0byBiZSBoYW5kbGUgcHJlZGljYXRlcywgbW9kZXMsIGFuZAorCWZhaWx1cmVzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCBleHBhbmRfYmlub3AuCisJTW92ZSBjb2RlIGZyb20gZXhwYW5kX3R3b3ZhbF9iaW5vcF9jb252ZXJ0IGlubGluZSBhbmQgcmV3b3JrIHRvCisJbm8gbG9uZ2VyIGhhcmQtd2lyZSBTSW1vZGUgYW5kIHRvIGhhbmRsZSBmYWlsdXJlLgorCisJKiBjb25maWcuZ2NjOiBGaW5pc2ggY2hhbmdlIG9mIEp1bHkgMjR0aCB0byBoYXZlIG1ha2VfdmFyX2ZpbGUgZGVwZW5kCisJb24gaG9zdCBtYWNoaW5lLgorCisJKiBqdW1wLmM6IE5vdyBpbmNsdWRlcyBpbnNuLWZsYWdzLmguCisJKGp1bXBfb3B0aW1pemUpOiBUcnkgdG8gcHV0IGEgUkVUVVJOIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGlmCisJY29udHJvbCBmbG93cyB0aHJvdWdoIHRvIGl0LgorCUpVTVBfTEFCRUwgY2FuIG5vdyBiZSB6ZXJvIGZvciBhIFJFVFVSTiBvciBjb25kaXRpb25hbCBSRVRVUk4uCisJVHJ5IHRvIGNvbnZlcnQganVtcCB0byBlbmQgb2YgZnVuY3Rpb24gaW50byAocG9zc2libHkgY29uZGl0aW9uYWwpCisJUkVUVVJOLgorCVVzZSBuZXh0X2FjdGl2ZV9pbnNuIGluc3RlYWQgb2YgbmV4dF9yZWFsX2luc247IHRoZXNlIGRvIHRoZSBzYW1lCisJdGhpbmcgcHJpb3IgdG8gcmVsb2FkLCBhZnRlciB3aGljaCBVU0UgYW5kIENMT0JCRVJzIGRvbid0IG1hdHRlci4KKwlyZWRpcmVjdF9qdW1wIG1heSBub3cgZmFpbCBzbyBkb24ndCBzZXQgQ0hBTkdFRCBpZiBpdCBkb2VzLgorCURlbGV0ZSBvcHRpbWl6YXRpb24gb2YganVtcCB0byBSRVRVUk47IG5vdyBzdWJzdW1lZCBieSBmb2xsb3dfanVtcHMuCisJUmVzZXQgSU5TTl9DT0RFIGlmIGNoYW5naW5nIGNvbmRpdGlvbmFsIGp1bXAgdG8gdW5jb25kaXRpb25hbC4KKwkoY29uZF9qdW1wX3ApOiBDb25kaXRpb25hbCBSRVRVUk4gaXMgY29uZGl0aW9uYWwganVtcC4KKwkoZm9sbG93X2p1bXBzKTogQ2hhbmdlIGFyZ3VtZW50IG5hbWUgdG8gQUZURVJfUkVMT0FELgorCUlmIG5vdCBhZnRlciByZWxvYWQsIGRvIG5vdCBjaGFpbiBhY3Jvc3MgYSBVU0Ugb3IgQ0xPQkJFUi4KKwlSZWNvZ25pemUgUkVUVVJOIGluc25zLgorCSh0ZW5zaW9uX3ZlY3Rvcl9sYWJlbHMpOiBMaWtld2lzZS4KKwkocmVkaXJlY3RfanVtcCwgcmVkaXJlY3RfZXhwKTogSWYgTkxBQkVMIGlzIHplcm8sIHR1cm4gSlVNUCBpbnRvIGEKKwkocG9zc2libHkgY29uZGl0aW9uYWwpIFJFVFVSTjsgdXNlIHZhbGlkYXRlX2NoYW5nZSB0byBzZWUgaWYgc3VjaCBhbgorCWluc24gZXhpc3RzLiAKKwlOb3cgcmV0dXJucyBub24temVybyBpZiBzdWNjZWVkcywgMCBvdGhlcndpc2UuCisJVW5jb25kaXRpb25hbCBSRVRVUk4gbG9va3MgbGlrZSAoUkVUVVJOKSwgbm90IChTRVQgKFBDKSAoUkVUVVJOKSkuCisJKHRocmVhZF9qdW1wcyk6IElnbm9yZSBhbnkgdHlwZSBvZiBSRVRVUk4gaW5zbi4KKwkqIE1ha2VmaWxlLmluIChqdW1wLm8pOiBEZXBlbmRzIG9uIGluc24tZmxhZ3MuaC4KKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRG9uJ3QgY29uZnVzZSBjb25kaXRpb25hbCByZXR1cm4gd2l0aAorCWp1bXAgdG8gdG9wIG9mIGxvb3Agd2hlbiBMT09QX1RPUCA9PSAwLgorCSogZmluYWwuYyAobGVhZl9mdW5jdGlvbl9wKTogTm8gbG9uZ2VyIHN0YXRpYzsgbm8gbG9uZ2VyIHRha2VzIGFuIGFyZy4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBwYXNzIFNUQVJUIHRvIGxlYWZfZnVuY3Rpb25fcC4KKwkqIHJvbXAubWQgKHJldHVybiBwYXR0ZXJuKTogQ29udmVydCB0byBhIG5hbWVkIHBhdHRlcm4uCisKK1N1biBKdWwgMjkgMTY6MDU6MjcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS12bXMuaCAoQVNNX09VVFBVVF9FWFRFUk5BTCk6IENoZWNrIFRSRUVfUkVBRE9OTFkuCisKKwkqIHhtLXZtcy5oIChhbGxvY2EpOiBVc2UgYnVpbHQtaW4gYWxsb2NhLgorCitTdW4gSnVsIDI5IDA2OjQ3OjMzIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBSZXN0b3JlIGluYWR2ZXJ0YW50bHkgZGVsZXRlZAorCWxpbmVzLgorCitGcmkgSnVsIDI3IDE5OjUzOjE4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChyZW9yZy5vKTogRGVwZW5kcyBvbiB0cmVlLmgsIGJhc2ljLWJsb2NrLmgsIHJlZ3MuaCwKKwlhbmQgb3V0cHV0LmgKKworRnJpIEp1bCAyNyAxNjozMDowMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IEhhbmRsZSBBU01fT1VUUFVUX1NIQVJFRF9DT01NT04KKwlhbmQgQVNNX09VVFBVVF9TSEFSRURfTE9DQUwuCisKKwkqIHRtLWVuY29yZS5oIChTSEFSRURfU0VDVElPTl9BU01fT1ApOiBOZXcgbWFjcm8uCisJKEFTTV9PVVRQVVRfU0hBUkVEX0NPTU1PTiwgQVNNX09VVFBVVF9TSEFSRURfTE9DQUwpOiBOZXcuCisJQWxsIHRoaXMgd2FpdGluZyBmb3IgcGFwZXJzIGZyb20gcGFidWhyQHdhdG1zZy53YXRlcmxvby5lZHUuCisKK0ZyaSBKdWwgMjcgMTY6MTA6MDIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbWFrZS1yb21wIChDQyk6IFNldCB1cCB0byBhbGxvdyB1c2Ugb2YgaGMuCisKK0ZyaSBKdWwgMjcgMTU6MDc6MDAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogSGFuZGxlIChBU0hJRlQgMSB4KSBpbiAoRVEgKEFORCAuLi4geSkgMCkKKwlvbmx5IGlmIGxpdHRsZS1lbmRpYW4uCisKK1RodSBKdWwgMjYgMjM6MTk6MTUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogQ29uc2lzdGVudGx5IGNhbGwgcHJvdGVjdF9mcm9tX3F1ZXVlCisJYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisJQWx3YXlzIHB1dCBvcGVyYW5kMSBvZiBleHR6diBpbnRvIGEgcmVnaXN0ZXIgYmVjYXVzZSBpdCBpcyBTSW1vZGUKKwlhbmQgd2UgYXNzdW1lIHRoYXQgdGhpcyBtZWFucyBhIHJlZ2lzdGVyLgorCitUaHUgSnVsIDI2IDE0OjE4OjExIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IERlbGV0ZSBkZWFkIGNvZGUuCisJREFUQV9BTElHTk1FTlQgdGFrZXMgdHJlZSBhbmQgY3VycmVudCBhbGlnbm1lbnQgYW5kIGdpdmVzIG5ldworCWFsaWdubWVudCBmb3IgYSBub24tYXV0b21hdGljIHZhcmlhYmxlIG9mIHRoYXQgdHlwZS4KKwlBbHNvIGFwcGx5IENPTlNUQU5UX0FMSUdOTUVOVCB0byB0aGUgaW5pdGlhbCB2YWx1ZTsgaXQgbm93IHRha2VzCisJdGhlIGNvbnN0YW50IGFuZCBvbGQgYWxpZ25tZW50IGFuZCBnaXZlcyB0aGUgbmV3IGFsaWdubWVudC4KKwlBZGp1c3QgREVDTF9BTElHTiB0byB0aGUgcmVzdWx0aW5nIGFsaWdubWVudC4KKwlVc2UgZmxvb3JfbG9nMiBjb25zaXN0ZW50bHkgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdHMgZnVuY3Rpb24uCisJKGdldF9vcl9hc3NpZ25fbGFiZWwpOiBVc2UgQ09OU1RBTlRfQUxJR05NRU5UIGluc3RlYWQgb2YgREFUQV9BTElHTk1FTlQKKwlhbmQgcGFzcyB0eXBlIGluc3RlYWQgb2YgZGVjbC4KKwkqIGV4cHIuYyAoZ2V0X3BvaW50ZXJfYWxpZ25tZW50KTogUmV3b3JrIHRvOiBkaXN0aW5ndWlzaCByZWxpYWJseQorCWJldHdlZW4gZXhwcmVzc2lvbnMgZ2l2aW5nIHRoZSBhZGRyZXNzIGFuZCB0aG9zZSBnaXZpbmcgdGhlIGl0ZW0gYmVpbmcKKwlhZGRyZXNzZWQ7IHVzZSB0aGUgYWxpZ25tZW50IGZyb20gdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZworCXBvaW50ZXIgdG87IHJldHVybiAwIGlmIHRoZSB0eXBlIGlzIG5vdCBhIHBvaW50ZXI7IGFuZCBvdGhlciAKKwltaXNjZWxsYW5lb3VzIGNoYW5nZXMuCisJKHN0cmluZ19jb25zdGFudCk6IFNraXAgQ09OVkVSVF9FWFBSIGFuZCBOT05fTFZBTFVFX0VYUFIgYXMgd2VsbAorCWFzIE5PUF9FWFBSLgorCShleHBhbmRfYnVpbHRpbik6IEFsbG93IGdldF9wb2ludGVyX2FsaWdubWVudCB0byBmYWlsLCBpbiB3aGljaCBjYXNlCisJd2UgY2FsbCB0aGUgYWN0dWFsIGZ1bmN0aW9uLgorCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IFNldCBhY3R1YWwgYWxpZ25tZW50IG9idGFpbmVkIGludG8gREVDTF9BTElHTgorCXNpbmNlIGl0IG1heSBiZSBiZXR0ZXIgYWxpZ25lZCB0aGFuIHJlcXVpcmVkIGFuZCBnZXRfcG9pbnRlcl9hbGlnbm1lbnQKKwljYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcy4KKwkqIHRtLWdtaWNyby5oLCB0bS1weXIuaCwgdG0ucm9tcC1oOiBBZGQgb3IgcmVwbGFjZSBkZWZpbml0aW9ucyBvZgorCUNPTlNUQU5UX0FMSUdOTUVOVCB0byB3b3JkLWFsaWduIHN0cmluZyBjb25zdGFudHMgYW5kCisJREFUQV9BTElHTk1FTlQgdG8gd29yZC1hbGlnbiBjaGFyYWN0ZXIgYXJyYXJ5cyBmb3IgYnVpbHRpbiBtZW1vcnkKKwlmdW5jdGlvbnMuCisKKwkqIGZvbGQtY29uc3QuYyAocnNoaWZ0X2RvdWJsZSk6IFJlc2V0IGNhcnJ5IGFmdGVyIGVhY2ggc2hpZnQgb2YKKwlvbmUgYml0LgorCisJKiB2YXgubWQgKGFzaHJzaTMpOiBJZiByaWdodCBzaGlmdCBieSBjb25zdGFudCwgZW1pdCBhcyBBU0hJRlRSVC4KKwkoYXNocnNpM19jb25zdCk6IE5ldyBwYXR0ZXJuICB0byBtYXRjaCBpdC4KKwkoY2FzZWwpOiBEZWxldGUgcGF0dGVybnMgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGNzZS5jIChjc2VfaW5zbik6IFJlbW92ZSB1bm5lZWRlZCBwYXJ0IG9mIGNoYW5nZSBvZiBKdWx5IDIzLgorCShmb2xkX3J0eCk6IENvbnZlcnQgc2hpZnQgd2l0aCBuZWdhdGl2ZSBjb25zdGFudCBjb3VudCB0byBzaGlmdCBpbgorCXRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCisJKiBjb21iaW5lLmMgKHN1YnN0KTogTGlrZXdpc2UuCisKKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogSW5pdGlhbGl6ZSBhcmdfcG9pbnRlcl9ydHggYmVmb3JlCisJc3RydWN0IHBvaW50ZXIgYW5kIHN0YXRpYyBjaGFpbiB2YWx1ZXMgaW4gY2FzZSB0aGV5IHdhbnQgdG8gdXNlIGl0LgorCitUaHUgSnVsIDI2IDEyOjMxOjAyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQWxpZ24gbGFiZWwgdGFibGUgdG8gYm91bmRhcnkgYXBwcm9wcmlhdGUKKwlmb3IgaXRlbXMgb2YgaXRzIHNpemUuCisJKGdldF9hdHRyX2xlbmd0aCwgc2hvcnRlbl9icmFuY2hlcyk6IEFsbG93IGZvciBsYWJlbCB0YWJsZSBhbGlnbm1lbnQuCisKK1dlZCBKdWwgMjUgMTU6MDY6NDQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogSGFuZGxlIHVzZXMgb2YgX0lPKiBmb2xsb3dlZCBieSBzcGFjZXMuCisJQ2hhbmdlIHJlZGlyZWN0aW9ucyBmb3IgY2Qgd2hlbiB0ZXN0aW5nIHRoYXQgZGlyZWN0b3J5IGV4aXN0cy4KKworCUJ5IFRpZW1hbm46CisKKwkqIGVtaXQtcnRsLmMgKG5leHRfY2MwX3VzZXIpOiBIYW5kbGUgaW5zbnMgaW4gd2hpY2ggY2MwCisJaXMgc2V0IGFuZCB1c2VkIGluIHRoZSBzYW1lIGluc24uCisKKwkqIGZpbmFsLmMgKGxlYWZfZnVuY3Rpb25fcCk6IExvb2sgaW5zaWRlIElOU05zIHdoaWNoIGNvbnRhaW4KKwlhIGRlbGF5ZWQtY2FsbCBzZXF1ZW5jZS4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBUZXN0IGBvbmx5X2xlYWZfcmVnc191c2VkJyBiZWZvcmUKKwlgbGVhZl9mdW5jdGlvbl9wJywgc2luY2UgdGhhdCBpcyBsaWtlbHkgdG8gYmUgZmFzdGVyLgorCShmaW5hbF9zY2FuX2luc25zKTogTm9ybWFsbHkgd2UgZG9uJ3QgaGF2ZSBOT1RJQ0VfVVBEQVRFX0NDCisJdGFrZSBhY3Rpb24gd2hlbiBwcm9jZXNzaW5nIHRoZSBwYXRoIG9mIGFuIGFubnVsbGVkIGJyYW5jaCwKKwlzaW5jZSB0aGF0IHBhdGggZG9lcyBub3QgYWZmZWN0IHRoZSBjYydzIG9mIHRoZSBmYWxsLXRocm91Z2gKKwlpbnNucyBhdCBhbGwuICBIb3dldmVyLCB3ZSBjYW5ub3QgYWx3YXlzIGlnbm9yZSB0aGUgZWZmZWN0IG9mCisJdGhlIGNjJ3Mgd2hlbiBwcm9jZXNzaW5nIGEgZGVsYXllZCBhbm51bGxlZCBicmFuY2g6IHdoZW4gdGhlCisJZGVsYXllZCBhbm51bGxlZCBicmFuY2ggZm9sbG93cyBhIGxhYmVsIGFuZCBjYXJyaWVzIGEKKwlSRUdfQ0NfU1RBVFVTIG5vdGUsIHRoYXQgbm90ZSBtdXN0IGJlIHByb2Nlc3NlZC4KKworCSogZ2VuYXR0ci5jIChtYWluKTogR2VuZXJhdGUgI2RlZmluZXMgZm9yIGFubnVsbGVkIGJyYW5jaGVzCisJd2hpY2ggYXJlIGNvbnNpc3RlbnQgd2l0aCBkb2N1bWVudGF0aW9uLgorCisJKiByZW9yZy5jOiBGaW5pc2ggcmVjZW50IHJld29yayBieSBtb2RpZnlpbmcgY29kZSBzcGVjaWZpYyB0bworCW1hY2hpbmVzIHRoYXQgaGF2ZSBhbm51bGxpbmcgYnJhbmNoZXMuCisKKwkqIGMtY29tbW9uLmMgKG1lcmdlX2NvbXBvbmVudF9jb21wYXJpc29ucyk6IFByZXZpb3VzIGxvZ2ljIGRpZAorCW5vdCBoYW5kbGUgY2FzZXMgb2YgKEEgPT0gMSkgJiYgKEIgPT0gMSksIChBICE9IDApICYmIChCICE9IDApLAorCWFuZCAoQSAhPSAxKSB8fCAoQiAhPSAxKS4gIEZpeGVkIGJ5IGV4cGFuZGluZyB0aGUgbG9naWMgb3V0CisJbG9uZ2hhbmQgYW5kIGxldHRpbmcgdGhlIGNvbXBpbGVyIGRvIHRoZSBwcm9wZXIgY3Jvc3MtanVtcGluZy4KKworCSogdG0tdm1zLmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBVc2UgYXNzZW1ibGVfbmFtZS4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEZvciBCSU5EX0VYUFIsIGRvIHRoZSBpbml0IGZvciBhbGwgdmFycy4KKworCSogc3R1cGlkLmM6IEluY2x1ZGUgZmxhZ3MuaC4KKwkqIGdlbnJlY29nLmMgKG1haW4pOiBNYWtlIGluc24tcmVjb2cuYyBpbmNsdWRlIGZsYWdzLmguCisKK1N1biBKdWwgMjIgMTI6MDQ6NDMgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1leGNlcHQuYyAoY3BsdXNfZXhwYW5kX2VuZF9leGNlcHQpOiBJZiB0aGUgdXNlciBnaXZlcyBhCisJZGVmYXVsdCBoYW5kbGVyLCB0aGUgZXhjZXB0aW9uIGlzIGNvbnNpZGVyZWQgY2F1Z2h0IGluIHRoYXQKKwloYW5kbGVyLgorCSogY3BsdXMtcGFyc2UueSAoZXhjZXB0X3N0bXRzKTogUmVzdCBvZiBmaXggd2VudCBoZXJlLCBpbiBERUZBVUxUCisJY2FzZS4KKworCSogY3BsdXMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IERvbid0IGVtaXQgY2xlYW51cHMgdHdpY2UuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IERvbid0IGNhbGwKKwlgZml4dXBfdmJhc2Vfb2Zmc2V0cycuCisJKiBjcGx1cy10cmVlLmMgKGZpeHVwX3ZiYXNlX29mZnNldHMpOiAjaWYgMCB0aGlzIGZ1bmN0aW9uLgorCisJKiBjcGx1cy1jdnQuYyAoYnVpbGRfZGVmYXVsdF9iaW5hcnlfdHlwZV9jb252ZXJzaW9uKTogSGFuZGxlCisJYXJndW1lbnRzIHdoaWNoIGFyZSBSRUZFUkVOQ0VfVFlQRS4KKworCSogY3BsdXMtbWV0aG9kLmMgKHByZXBhcmVfaW5saW5lKTogU2V0IERFQ0xfQ09OVEVYVCBvZiB0aGlzCisJZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLgorCisJKiBjcGx1cy1kZWNsLmMgKGdyb2tmbmRlY2wpOiBXaGVuIGFkZGluZyBhIG5ldyB2aXJ0dWFsIGZ1bmN0aW9uCisJZW50cnksIFJBSVNFUyBtYXkgY2hhbmdlIGEgc2Vjb25kIHRpbWUuCisKK1RodSBKdWwJIDUgMTA6NDQ6MzkgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsMi5jIChncm9rZmllbGQpOiBTdGF0aWMgY29uc3RzIG5lZWQgbm90IGJlIGluaXRpYWxpemVkCisJaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisKK01vbiBKdWwJIDIgMDY6MTI6NDkgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1pbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IElmIEJBU0VUWVBFIGlzIG5vdCBhIGJhc2UKKwl0eXBlIGZvciB0aGUgY3VycmVudCBjbGFzcywgZ2l2ZSBlcnJvciBhbmQgcmV0dXJuLgorCitTdW4gSnVsCSAxIDAwOjE4OjQ3IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBUaHJvdyBhd2F5IG1vcmUgY29kZSBpZiB3ZSBoYXZlCisJYW4gaW5saW5lIGZ1bmN0aW9uIGZyb20gdGhlIGludGVyZmFjZS4KKworCSogY3BsdXMtY2xhc3MuYyAoYWRkX3ZpcnR1YWxfZnVuY3Rpb24pOiBTZXQgREVDTF9WSU5ERVggZnJvbSB0aGUKKwl2aXJ0dWFsIGZ1bmN0aW9uIHdoaWNoIGNvbWVzIGZyb20gdGhlIHZ0YWJsZSBzaGFyZWQgYnkKKwlDVVJSRU5UX0NMQVNTX1RZUEUsIGlmIHBvc3NpYmUuCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBDYWxsIGBkZWZhdWx0X2NvbnZlcnNpb24nCisJYWZ0ZXIgZG9pbmcgdHlwZSBpbnN0YW50aWF0aW9uLgorCisJKiBjcGx1cy1pbml0LmMgKGJ1aWxkX25ldyk6IE5ldyAyLjAgaW50ZXJwcmV0YXRpb246IGBuZXcgaW50ICgxMCknCisJbWVhbnMgYWxsb2NhdGUgYW4gaW50LCBhbmQgaW5pdGlhbGl6ZSBpdCB3aXRoIDEwLgorCisJKiBjcGx1cy1pbml0LmMgKGVtaXRfYmFzZV9pbml0KTogQ29tcGxldGlvbiBvZiBmaXggZm9yIHZpcnR1YWwKKwlmdW5jdGlvbiB0YWJsZSBpbml0aWFsaXphdGlvbi4JQEAgQlRXLCB0aGlzIG1heSBub3cgY2F1c2UgZXh0cmEKKwl2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIGluaXRpYWxpemF0aW9ucy4JIFRoZXkgd2lsbCBhbGwgYmUgY29ycmVjdCwKKwlidXQgdGhleSBtYXkgYWxzbyBiZSByZWR1bmRhbnQuCSBHQ0MncyBvcHRpbWl6ZXIgZG9lc24ndCBrbm93IGhvdworCXRvIHJlbW92ZSBldmVuIHRoZSBzaW1wbGVzdCBzdWNoIHJlZHVuZGFuY3kuCisKK1NhdCBKdW4gMzAgMTM6NTQ6MzAgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBTdG9yZSBCQVNFVFlQRSBpbiB0aGUKKwlWRklFTERTIGNoYWluIChpbiBpdHMgVFJFRV9UWVBFKS4KKworRnJpIEp1biAyOSAwOToyNjoxNyAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSxwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IFN0YXNoIHRoZQorCXR5cGUgdGhhdCBjYXVzZWQgdGhpcyB2dGFibGUgdG8gYmUgZGVmaW5lZCBpbiBERUNMX0NPTlRFWFQKKwkqIGNwbHVzLXNlYXJjaC5jIChiZnNfdW5tYXJrX2ZpbmlzaGVkX3N0cnVjdCk6IFdvcmsgYXJvdW5kCisJREVDTF9DT05URVhUIGNvbmZsaWN0IGZvciB2dGFibGVzLiAgQEAgTk9UIEEgU09MVVRJT04uCisKKwkqIGNwbHVzLWxleC5jOiBFeHRlbmQgbWVhbmluZyBvZiBgI3ByYWdtYSBpbXBsZW1lbnRhdGlvbicKKwl0byBhbGxvdyBmaWxlcyB0byBgaW1wbGVtZW50JyB0eXBlcyBmcm9tIGdlbmVyYWwgaGVhZGVycy4KKworVHVlIEp1bCAyNCAyMjoxODoyMyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jOiBNYWpvciByZXdvcmsuICBDaGFuZ2VzIGluY2x1ZGVzOgorCShtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBTY2FuIGNvZGUgdG8gY29tcHV0ZSB3aGljaCByZWdpc3RlcnMgYXJlCisJbGl2ZSBhdCBwYXJ0aWN1bGFyIGluc25zLiAgVXNlcyB0YWJsZXMgY3JlYXRlZCBieSBmbG93LCBSRUdfREVBRAorCW5vdGVzLCBhbmQgcmVnaXN0ZXJzIHNldCBiZWZvcmUgdGhleSBhcmUgdXNlZC4KKwkoZW1pdF9kZWxheV9zZXF1ZW5jZSk6IEFsd2F5cyB3cml0ZSBTRVFVRU5DRSBhcyBJTlNOLiAgTWFueSByb3V0aW5lcworCWNoYW5nZWQgdG8gcmVmbGVjdCB0aGlzLgorCShmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IExvb3AgZm9yIG1lcmdlIHBvaW50IHdoZW4gdGFyZ2V0IG9mIGp1bXAKKwljb21lcyBiYWNrIHRvIGZhbGx0aHJvdWdoIGNvZGUuCSBUcnkgdG8gZ2V0IGluc25zIGZyb20gdGhlcmUuCisJKGZpbGxfZWFnZXJfZGVsYXlfc2xvdHMpOiBGYWxsdGhyb3VnaCBhbmQgdGFyZ2V0IGNhc2UgbWVyZ2VkIGludG8gbmV3CisJZnVuY3Rpb24gZmlsbF9zbG90c19mcm9tX3RocmVhZC4KKworCSogdG0tcm9tcC5oLCByb21wLm1kLCBvdXQtcm9tcC5jLCB4bS1yb21wLmgsIG1ha2Utcm9tcDogTmV3IGZpbGVzIHRvCisJc3VwcG9ydCB0aGUgUk9NUCBtaWNyb3Byb2Nlc3NvciwgdXNlZCBpbiB0aGUgSUJNIFBDIFJULgorCisJKiByZWNvZy5jIChjb21wYXJpc29uX29wZXJhdG9yKTogTmV3IGZ1bmN0aW9uLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJZiBwdXR0aW5nIGNvbnN0YW50IGludG8gcmVnaXN0ZXIsIHNlZQorCWlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcmVnaXN0ZXIuCisKK1R1ZSBKdWwgMjQgMTU6MzU6MDQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQWxsb3cgY29tcGFyZSBvZiBhbnkKKwlwb2ludGVyIHdpdGggY29uc3Qgdm9pZCAqLCBldGMuCisKK1R1ZSBKdWwgMjQgMTc6MTA6NTkgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfYXNzaWdubWVudCk6IFVzZSBpdCB0byBmaW5kIG91dCBhYm91dCBvdXIgdGFyZ2V0LgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogTGlrZXdpc2UuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IElmIGNhbiBkbyBzdG9yZS1mbGFnLCBjb252ZXJ0CisJWCA/IEErMSA6IEEgdG8gQSArIChYIT0wKTsgZm9sZC1jb25zdCBtYWRlIHRoZSBmb3JtZXIgZnJvbSB0aGUgbGF0dGVyLgorCU9ubHkgY3JlYXRlIGxhYmVsIHdoZW4gd2Uga25vdyB3ZSB3aWxsIG5lZWQgaXQuCisJU2ltcGxpZnkgdW5uZXNzYXJpbHkgY29tcGxleCBjYWxsIHRvIHNhZmVfZnJvbV9wLgorCShleHBhbmRfZXhwcik6IE1ha2UgbmV3IHZhcmlhYmxlIFVOU0lHTkVEUCBhbmQgdXNlIGl0IGluc3RlYWQKKwlvZiBUUkVFX1VOU0lHTkVEICh0eXBlKS4gIEFsc28sIGNvbnNpc3RlbnRseSB1c2UgZXhpc3RpbmcKKwl2YXJpYWJsZSBUWVBFIGluc3RlYWQgb2YgVFJFRV9UWVBFIChleHApIGFuZCBzaW1pbGFybHkgZm9yIE1PREUuCisKK1R1ZSBKdWwgMjQgMTM6NTA6MzMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogRXJyb3IgaWYgIyMgYXQgYmVnIG9yIGVuZC4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRXJyb3IgZm9yIGxvbmcsIGV0Yy4gd2l0aCBub25hcml0aCB0eXBlLgorCUVycm9yIGZvciBzaWduZWQgb3IgdW5zaWduZWQgd2l0aCBmbG9hdGluZyB0eXBlLgorCUVycm9yIGZvciBpbml0aWFsaXplZCBwYXJtLgorCisJKiBjb25maWcuZ2NjOiBNYWtlIG1ha2VfdmFyX2ZpbGUgZGVwZW5kIG9uIGhvc3QgbWFjaGluZSwgbm90IHRhcmdldC4KKworVHVlIEp1bCAyNCAxMzo0MDozNSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXJhc20uYyAoZGVjb2RlX3JlZ19uYW1lKTogTWFrZSBUQUJMRSBzdGF0aWMgZm9yIG5vbi1HQ0MgY29tcGlsZXJzLgorCisJKiBjLXR5cGVjay5jICh0eXBlX2Zvcl9zaXplLCB0eXBlX2Zvcl9tb2RlKTogRGVsZXRlIGZyb20gaGVyZS4KKwkoYmluYXJ5X29wX2Vycm9yLCBzaG9ydGVuX2NvbXBhcmUsIHRydXRodmFsdWVfY29udmVyc2lvbik6IExpa2V3aXNlLgorCSogY3BsdXMtdHlwZWNrLmM6IERlbGV0ZSBzZWNvbmQgY29weSBmcm9tIGhlcmUuCisJKiBjLWNvbW1vbjogTW92ZSBhYm92ZSBmdW5jdGlvbnMgdG8gaGVyZS4KKworVHVlIEp1bCAyNCAxMjoyMDowNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAocGF0aF9pbmNsdWRlKTogRml4IHR5cG8gaW4gdmFyIG5hbWUuCisKK01vbiBKdWwgMjMgMTc6NDY6NTcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlnLmdjYzogUmVtb3ZlIHJlZHVuZGFudCBhc3NpZ25tZW50IHRvIHRtX2ZpbGUgZm9yIDg4MDAwLgorCUZpeCB0eXBvIHdoZW4gYXNzaWduaW5nIHRvIG1ha2VfdmFyX2ZpbGUuCisKKwkqIGZ1bmN0aW9uLmMgKG9wdGltaXplX2JpdF9maWVsZCk6IEZpeCB0eXBvIGluIGNoYW5nZV9hZGRyZXNzIGNhbGwuCisKK01vbiBKdWwgMjMgMTY6NTk6MjcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAoZGVjb2RlX3JlZ19uYW1lKTogSWdub3JlICUgYXQgYmVnaW5uaW5nIG9mIG5hbWUuCisJU3VwcG9ydCBleHRyYSBuYW1lcyBkZWZpbmVkIGJ5IEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMuCisJKiB0bS1pMzg2LmggKEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMpOiBEZWZpbmUgaXQuCisKKwkqIGRieG91dC5jIChkYnhvdXRfaW5pdCk6IEhhbmRsZSBuZXcgbWFjcm9zCisJQVNNX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFTkFNRSBhbmQgQVNNX09VVFBVVF9NQUlOX1NPVVJDRV9ESVJFQ1RPUlkuCisJKiBzZGJvdXQuYyAoc2Rib3V0X2ZpbGVuYW1lKTogSGFuZGxlIEFTTV9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUuCisKK01vbiBKdWwgMjMgMTY6NTA6MzIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdG0tdmF4LmggKE5PVElDRV9VUERBVEVfQ0MpOiBDQUxMIGNsb2JiZXJzIENDIGlmIGluc2lkZSBQQVJBTExFTCB0b28uCisKKwkqIHZheC5tZCAoY2FsbF92YWx1ZV9wb3ApOiBGaXggdHlwbyBpbiBhcmd1bWVudCBudW1iZXIuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFNoaWZ0J3MgYXJlbid0IGFzc29jaWF0aXZlIGlmIGluIGRpZmZlcmVudAorCWRpcmVjdGlvbnMsIGV2ZW4gaWYgc2FtZSBydHhfY29kZS4KKwlUcnkgdG8gZm9sZCByZXN1bHQgb2YgYXNzb2NpYXRpbmcgdGhlIG9wZXJhdGlvbiBpbiBjYXNlIGl0IGlzIG5vdworCXRyaXZpYWwuCisKKwkqIGp1bXAuYyAobWFya19tb2RpZmllZF9yZWcpOiBOZXcgZnVuY3Rpb24uCisJKHRocmVhZF9qdW1wcyk6IExvb2sgYXQgaW5zbnMgYmV0d2VlbiB0YXJnZXQgb2YgZmlyc3QganVtcCBhbmQgdGhlCisJc2Vjb25kIGp1bXAuICBNYXJrIGFueSByZWdpc3RlcnMgdGhhdCB0aGV5IG1vZGlmeSBhbmQgcmVjb3JkIGlmIHRoZXkKKwltb2RpZnkgbWVtb3J5LgorCURvbid0IGdvIHBhc3QgYSBDT0RFX0xBQkVMLgorCUlmIHdlIHBhc3MgYW4gdW5jb25kaXRpb25hbCBqdW1wLCBmb2xsb3cgaXQuCisJVXNlIHByZXZfbm9ubm90ZV9pbnNuIGluc3RlYWQgb2YgZXhwbGljaXQgbG9vcC4KKwkocnR4X2VxdWFsX2Zvcl90aHJlYWRfcCk6IENvbnN1bHQgcmVjb3JkZWQgaW5mb3JtYXRpb24gdG8gc2VlIGlmCisJbWVtb3J5IG9mIHJlZ2lzdGVycyB3ZXJlIG1vZGlmaWVkIHByaW9yIHRvIHNlY29uZCBqdW1wLgorCSogTWFrZWZpbGUuaW4gKGp1bXAubyk6IE5vdyBuZWVkcyBoYXJkLXJlZy1zZXQuaC4KKworU2F0IEp1bCAyMSAxMzo1ODoxNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoT19SRE9OTFkpOiBEZWZpbmUgaXQgaWYgbm90IGRlZmluZWQuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IE5vIGVycm9yIGZvciBub25zdGF0aWMgaW5jb21wbGV0ZSBhcnJheS4KKworU2F0IEp1bCAyMSAwODoyNDowNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbGxpYW50Lm1kIChjYWxsIHBhdHRlcm5zKTogRnVuY3Rpb24gYWRkcmVzcyBtdXN0IGJlIG1lbW9yeSBvcGVyYW5kLgorCSogY29udmV4Lm1kLCBtNjhrLm1kLCBtaXBzLm1kLCBuczMyay5tZCwgdGFob2UubWQsIHZheC5tZDogTGlrZXdpc2UuCisKK1RodSBKdWwgMTkgMTY6MDY6MDIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKHBhdGhfaW5jbHVkZSk6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IENhbGwgdGhhdCB0byBoYW5kbGUgQ1BBVEggZW52dmFyLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBFcnJvciBpZiBzaXplIGV4Y2VlZHMgMioqMzItMS4KKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBQYXNzIHdyaXRlX3N5bWJvbHMgdG8gdGhpcyBmdW5jdGlvbgorCShpbml0X2VtaXQpOiBOb3QgdGhpcyBvbmUuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCitUdWUgSnVsIDE3IDIxOjI0OjA4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKHVwZGF0ZV9lcXVpdl9yZWdzKTogRG9uJ3QgcmVwbGFjZSBhIHJlZ2lzdGVyIHdpdGgKKwlhbiBlcXVpdmFsZW5jZSBpZiB0aGUgaW5zbiBtYWtpbmcgdGhlIGVxdWl2YWxlbmNlIGhhcyBhIHNvdXJjZQorCWRpZmZlcmVudCBmcm9tIHRoZSBlcXVpdmFsZW50IHZhbHVlLgorCitUdWUgSnVsIDE3IDE2OjQ3OjQyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBBbGxvdyBtb3ZzdHIqIHRvIGZhaWwuCisKK1R1ZSBKdWwgMTcgMTU6MTk6MTggMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZW1pdC1ydGwuYyAoY2hhbmdlX2FkZHJlc3MpOiBEb24ndCBjYWxsIG1lbW9yeV9hZGRyZXNzIGlmIHJlbG9hZAorCWlzIGluIHByb2dyZXNzLCBub3QganVzdCBhZnRlciBpdCBoYXMgY29tcGxldGVkLgorCitNb24gSnVsIDE2IDAwOjM0OjI3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoY2FuX3JldmVyc2VfY29tcGFyaXNvbl9wKTogTmV3IGZ1bmN0aW9uLgorCShqdW1wX29wdGltaXplKTogSW4gaWYgKHgpIC4uLiBlbHNlIHggPSAwOyByZXZlcnNlIGNvbXBhcmlzb24KKwlpZiBzZWNvbmQgb3BlcmFuZCBvZiBJRl9USEVOX0VMU0UgaXMgUEM7IHVzZSBuZXcgZnVuY3Rpb24gdG8KKwl2YWxpZGF0ZSB0aGUgcmV2ZXJzYWwuCisJKGp1bXBfYmFja19wKTogVXNlIG5ldyBmdW5jdGlvbiB0byBzZWUgaWYgc2FmZSB0byByZXZlcnNlIGNvbXBhcmlzb24uCisKK1N1biBKdWwgMTUgMTc6MDM6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBCdWcgaW4gbGFzdCBjaGFuZ2U7IHJlamVjdCB1bmNvbmQganVtcAorCXdoZXJlIGNvbmRpdGlvbmFsIGlzIGV4cGVjdGVkLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogSGFuZGxlIGF1dG9pbmNyZW1lbnQgZm9yICpwCisJZm9sbG93ZWQgYnkgcSA9IHArc2l6ZSAobmVpdGhlciBvbmUgZGVhZCkuCisKK1NhdCBKdWwgMTQgMjI6Mzc6NDUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogUmVtb3ZlICh6ZXJvX2V4dGVuZCAoc3VicmVnKSkgYXJvdW5kIGxzaGlmdHJ0LgorCVJlbW92ZSAoYW5kLi4uKSBmcm9tIHNlY29uZCBhcmcgb2Ygc2hpZnQuCisJUmVtb3ZlIChhbmQuLi4pIGZyb20gYXJvdW5kIHNoaWZ0LgorCitTYXQgSnVsIDE0IDIxOjM1OjUwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKHVwZGF0ZV9lcXVpdl9yZWdzKTogTmV3IGZ1bmN0aW9uLgorCShsb2NhbF9hbGxvYyk6IENhbGwgaXQuCisJKGJsb2NrX2FsbG9jKTogRG9uJ3QgaGFuZGxlIFJFR19FUVVJViBub3RlcyBoZXJlOyBub3cgZG9uZSBpbgorCXVwZGF0ZV9lcXVpdl9yZWcuCisJCisJKiBjYWxscy5jOiBJbmNsdWRlIGluc24tZmxhZ3MuaC4KKwkqIE1ha2VmaWxlLmluIChjYWxscy5vKTogTGlrZXdpc2UuCisKK1NhdCBKdWwgMTQgMTM6Mjg6MjggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgc2V0IERFQ0xfRlJBTUVfU0laRSBmb3IgYnVpbHRpbnMuCisKKwkqIHZheC5tZCAoU0ltb2RlIGJpdC1maWVsZCBwYXR0ZXJucyk6IFVzZSBub25tZW1vcnlfb3BlcmFuZC4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKToKKwlGb3IgaWYgKC4uLikgeCA9IDE7IGVsc2UgeCA9IDA7IHggbXVzdCBiZSBpbnRlZ2VyLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBQYXNzIC1QIHRvIGNwcC4KKworVGh1IEp1bCAxMiAyMzozODoxNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBIYW5kbGUgQklURklFTERfTkJZVEVTX0xJTUlURUQuCisKKwkqIHNwYXJjLm1kIChjYWxsIHJlY29nbml6ZXJzKTogRG9uJ3QgYWxsb3cgYWRkcmVzcyBhcml0aG1ldGljLgorCitUaHUgSnVsIDEyIDIxOjQ3OjQ1IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGNoYW5nZV9hZGRyZXNzKTogSWYgcmVsb2FkIGhhcyBjb21wbGV0ZWQsIGRvbid0IGNhbGwKKwltZW1vcnlfYWRkcmVzcy4JIEluc3RlYWQsIGFib3J0IGlmIGFkZHJlc3MgaXMgbm90IHZhbGlkLgorCitUaHUgSnVsIDEyIDIwOjQxOjMyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBIYW5kbGUgdmF4LCB3aXRob3V0IGNhbGwgYW5kIGNhbGxfdmFsdWUuCisKK1RodSBKdWwgMTIgMjA6Mzk6MzMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKG1lcmdlX2VxdWl2X2NsYXNzZXMpOiBOZXcgZnVuY3Rpb24sIGZyb20gcmVjb3JkX2p1bXBfZXF1aXYuCisJKHJlY29yZF9qdW1wX2VxdWl2KTogVXNlIG5ldyBmdW5jdGlvbi4KKwkoZ2VuX2xvd3BhcnRfaWZfcG9zc2libGUpOiBOZXcgZnVuY3Rpb24sIGJhc2VkIG9uIGdlbl9sb3dwYXJ0LgorCShjc2VfaW5zbik6IEluIHNvbWUgY2FzZXMgb2YgKHNldCAoc3VicmVnIChGT08pIDApIChCQVIpKSwgbm90ZQorCXRoYXQgKHN1YnJlZyBCQVIpIGlzIGFuIGVxdWl2YWxlbnQgb2YgRk9PLgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBMaWtld2lzZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IENoZWNrIGZvciBjb25zdGFudCBpbiBtZXJnZSBvZiBzaGlmdCBpbnRvCisJWkVST19FWFRSQUNULgorCShnZW5fbG93cGFydF9mb3JfY29tYmluZSk6IExvb2sgZm9yIFNJR05fRVhURU5EIG9yIFpFUk9fRVhURU5EOgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydCwgZ2VuX2hpZ2hwYXJ0KTogSWYgcGFzc2VkIGEgaGFyZCByZWdpc3RlciwKKwlyZXR1cm4gYSBuZXcgcnR4IGZvciBpdCBpbiB0aGUgcHJvcGVyIG1vZGUsIHJhdGhlciB0aGFuIGEgU1VCUkVHLgorCitXZWQgSnVsIDExIDE3OjA1OjA0IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IElmIGFscmVhZHkgaGF2ZSBhIFJFR19XQVNfMCBub3RlLCBkb24ndCBtYWtlCisJYW5vdGhlciBvbmUuCisJUmV3b3JrIHNvbWUgbG9vcHMgb24gU0VUcyB0byBlbGltaW5hdGUgZHVwbGljYXRlIGNvZGUgYW5kIGNsZWFuIHVwCisJYSBiaXQuCisKKwkqIHJ0bGFuYWwuYyAocmVmZXJzX3RvX3JlZ25vX3AsIHJlZ19vdmVybGFwX21lbnRpb25lZCk6IEFsbG93IHRoZXNlCisJdG8gd29yayBvbiBwc2V1ZG9zIGFzIHdlbGwgYXMgaGFyZCByZWdpc3RlcnMuCisKKwkqIG9wdGFicy5jIChlbWl0X25vX2NvbmZsaWN0X2Jsb2NrKTogVXNlIHJlZ19vdmVybGFwX21lbnRpb25lZAorCXRvIHNlZSBpZiByZWdpc3RlciBpcyBtZW50aW9uZWQgaW4gaW5zbi4KKworV2VkIEp1bCAxMSAxNjo1NjowMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERvbid0IG9wdGltaXplIGp1bXBzIHRvIHN0b3JlLWZsYWdzCisJaWYgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gIEFuZCBkb24ndCBkbyBpdCBpZiBtZW1yZWYgaXMgdXNlZC4KKworV2VkIEp1bCAxMSAxNjoxMjo1NSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbWl0LXJ0bC5jICh7bmV4dCxwcmV2fV9ub25ub3RlX2luc24sIHByZXZfbGFiZWwsIHByZXZfY2MwX3NldHRlcik6CisJTmV3IGZ1bmN0aW9ucy4KKwkoe25leHQscHJldn1fe3JlYWwsYWN0aXZlfV9pbnNuLCBuZXh0X2xhYmVsKTogUmV3b3JrIHRvIGFsbG93CisJYXJndW1lbnQgb2YgemVybzsgcmV0dXJuIHplcm8gaW4gdGhhdCBjYXNlLgorCShuZXh0X2FjdGl2ZV9pbnNuLCBwcmV2X2FjdGl2ZV9pbnNuKTogSWYgcmVsb2FkIGlzIG5vdCB5ZXQgY29tcGxldGUsCisJZG8gdGhlIHNhbWUgdGhpbmcgYXMgbmV4dF9yZWFsX2luc24gYW5kIHByZXZfcmVhbF9pbnNuLgorCShuZXh0X2NjMF91c2VyKTogRml4IHNvbWUgYnVncyBhbmQgdHlwb3MuCisKKwkqIHJ0bGFuYWwuYyAocmVnX21lbnRpb25lZF9wKTogQWxsb3cgc2VhcmNoZXMgZm9yIGxhYmVscyB0byB3b3JrLgorCitXZWQgSnVsIDExIDEyOjI1OjI3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEluIHByZXYgZml4LCB1c2UgVFJFRV9QVUJMSUMgYm90aCB0aW1lcy4KKworVHVlIEp1bCAxMCAyMjo1NDozMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHJ0bC5kZWYgKHRyYXApOiBOZXcgY29kZS4KKworVHVlIEp1bCAxMCAxNzo0ODoyNiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKGludGVnZXJfemVyb3AsIGludGVnZXJfb25lcCwgaW50ZWdlcl9hbGxfb25lc3ApOiBMb29rIGluc2lkZQorCWEgTk9OX0xWQUxVRV9FWFBSLgorCShyZWFsX3plcm9wLCByZWFsX29uZXAsIHNpbXBsZV9jc3RfZXF1YWwpOiBMaWtld2lzZS4KKworVHVlIEp1bCAxMCAxNzowNTo1MCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55LCBjcGx1cy1sZXguYyAoeXlsZXgpOgorCVRlcm1pbmF0ZSB0b2tlbl9idWYgYWZ0ZXIgaW50ZWdlci4KKworTW9uIEp1bAkgOSAxNToyMjoyMiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ29ycmVjdCB0ZXN0IGZvciBleHRlcm4gZm9sbG93ZWQgYnkKKwlzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisKK01vbiBKdWwJIDkgMTQ6MTM6MDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBNb3ZlIHdhcm5pbmcgYW5kIGVycm9yCisJYWJvdXQgaW5pdGlhbGl6ZXIgd2l0aCBleHRlcm4gdG8gdGhlIHNhbWUgcGxhY2UuICBEbyBvbmUgb3IgdGhlIG90aGVyLgorCisJKiBybHRhbmFsLmMgKHJlZ19tZW50aW9uZWRfcCk6IERvbid0IGxvb2sgaW5zaWRlIGEgQ09OU1RfRE9VQkxFLgorCitTdW4gSnVsCSA4IDE0OjEyOjIxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKHBlZHdhcm4sIHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lLCBwZWR3YXJuX3dpdGhfZGVjbCk6CisJTmV3IGZ1bmN0aW9ucy4KKwkoZmxhZ19wZWRhbnRpY19lcnJvcnMpOiBOZXcgdmFyaWFibGUgY29udHJvbHMgdGhlbS4KKwkqIGMtZGVjbC5jLCBjLXBhcnNlLnksIGMtdHlwZWNrLmM6IFVzZSBuZXcgZnVuY3Rpb25zIGZvciBtYW55IHdhcm5pbmdzLgorCSogdmFyYXNtLmM6IExpa2V3aXNlLgorCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtcGVkYW50aWMqIHRvIGNjMSwgY3BwLCBldGMuCisJKiBjY2NwLmMgKHBlZHdhcm4pOiBOZXcgZnVuY3Rpb24uICBNYW55IGNhbGxzIHRvIGB3YXJuaW5nJyBjaGFuZ2VkLgorCisJKiBjLWNvbW1vbi5jIChjX2V4cGFuZF9leHByX3N0bXQpOiBOZXcgZnVuY3Rpb24uCisJRXJyb3IgYWJvdXQgaW5jb21wbGV0ZSB0eXBlIG1vdmVkIGhlcmUuCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRXJyb3IgZGVsZXRlZCBmcm9tIGhlcmUuCisJKiBjLXBhcnNlLnk6IFVzZSBjX2V4cGFuZF9leHByX3N0bXQgd2hlcmUgc3VpdGFibGUuCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogU2V0IGZvbGxvd2luZ19pbnNuX2RlYWQgb24gaW5zbiBhZnRlciB0ZXN0LgorCShtYXJrX3VzZWRfcmVncyk6IFRlc3QgdGhhdCB2YXI7IGRvbid0IGNhbGwgaW5zbl9kZWFkX3AgaGVyZS4KKworRnJpIEp1bAkgNiAxMzowNTowMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6CisJTm8gZXJyb3IgaWYgcmVzdWx0IGlzIGluY29tcGxldGUgYXJyYXkuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogTmV3IGFyZyBUT1RBTF9TSVpFLgorCURvbid0IGV4dHJhY3QgYSBiaWdnZXIgdW5pdCBmcm9tIG1lbW9yeSB0aGFuIHRoaXMuCisJKiBleHByLmM6IENhbGxlcnMgY2hhbmdlZC4KKwkoc3RvcmVfZmllbGQpOiBOZXcgYXJnIFRPVEFMX1NJWkU7IGNhbGxlcnMgY2hhbmdlZC4KKworCSogb3V0LW5zMzJrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IENoYW5nZXMgZnJvbSBJYW4gRGFsbC4KKwkqIHhtLW5zMzJrLmg6IFVzZSBidWlsdCBpbiBhbGxvY2EuCisJKiBuczMyay5tZCAoYXNobHNpMyk6IERvbid0IGZvcmdldCB0byByZXR1cm4gYSB2YWx1ZS4KKwkobW92c2YpOiBPdXRwdXQgZmxvYXRpbmcgY29uc3RhbnRzIG9ubHkgaWYgR0FTX1NZTlRBWC4KKwkoY2FsbCwgY2FsbF92YWx1ZSk6IFN1cHBvcnQgSlNSX0FMV0FZUy4KKwlDaGFuZ2UgaGFuZGxpbmcgb2YgYnNyIGlmIEdBU19TWU5UQVguCisJKGJpdCB0ZXN0IHBhdHRlcm5zKTogVXNlIGcgY29uc3RyYWludCBmb3Igb3AxIGFuZCBybSBmb3Igb3AwLgorCitUaHUgSnVsCSA1IDIxOjUzOjEwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRG9uJ3QgZG8gaW1wbGljaXQgYXJpdGhtZXRpYyBjb252ZXJzaW9ucy4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IGNvbWJpbmUgdHdvIGNvbnZlcnNpb25zIGlmIG9uZSBpcworCXNpZ25lZCBhbmQgdGhlIG90aGVyIGlzIHVuc2lnbmVkLgorCSogaW50ZWdyYXRlLmMgKGNvcHlfcGFybV9kZWNscyk6IEZpbmlzaCBtYWtpbmcgbGFzdCBjaGFuZ2UuCisKK1RodSBKdWwJIDUgMTg6MjY6MDMgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzYWZlX2Zyb21fcCk6IElmIEVYUCBpcyByZWFkb25seSBtZW1vcnksIGFueSBtZW1vcnkgbG9jYXRpb24KKwlpcyBzYWZlIGZyb20gaXQuCisKK1RodSBKdWwJIDUgMTU6MDU6MTkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnbnVsaWIyLmMgKF9fZml4dW5zZGZzaSk6IENoYW5nZSA+IHRvID49LgorCisJKiBjLWRlY2wuYyAoc3RhcnRfc3RydWN0LCBzdGFydF9lbnVtKTogU2V0IENfVFlQRV9CRUlOR19ERUZJTkVELgorCShncm9rZGVjbGFyYXRvcik6IERvbid0IHdhcm4gb2YgYXJyYXkgaWYgZWx0IHR5cGUgYmVpbmcgZGVmaW5lZC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IEhhbmRsZSAoKHZvaWQgKikgMCkuCisJQWxsb3cgMCB2ZXJzdXMgZnVuY3Rpb24gcG9pbnRlci4KKworVGh1IEp1bAkgNSAwODowNTowOSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBJZiBtYWNoaW5lIGhhcyBwb3N0LWluY3JlbWVudCwgZG9uJ3QgYXNzb2NpYXRlCisJUExVUyBvcGVyYXRpb25zIGlmIHRoZXkgYXJlIGJvdGggYWRkaW5nIHRoZSBzYW1lIGNvbnN0YW50IHRoYXQgaXMKKwlhIHBvd2VyIG9mIHR3by4JIFNpbWlsYXJseSBmb3IgcG9zdC1kZWNyZW1lbnQuCisKK1dlZCBKdWwJIDQgMTk6MDQ6MjAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogRG9uJ3Qgc2NhbiBhIGNvbXBhcmlzb24gaWYgdGhlIGZvbGxvd2luZworCWluc24gdGhhdCB1c2VzIHRoZSBjYydzIGlzIGRlYWQuCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogSWYgY2MtdXNpbmcgaW5zbiBpcyBkZWFkLCBzbyBpcyBwcmV2aW91cy4KKworCSogZXhwbWVkLmMgKGVtaXRfc3RvcmVfZmxhZyk6IE5ldyBmdW5jdGlvbi4KKworV2VkIEp1bAkgNCAxODo0NTowNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXR5cGVjay5jIChjb21tb25fdHlwZSwgY29tcHR5cGVzLCBkZWZhdWx0X2NvbnZlcnNpb24pOgorCVVzZSBUWVBFX1JFQURPTkxZIGluIHR5cGUgdG8gaW5kaWNhdGUgY29uc3QgdHlwZTsgdXNlIFRSRUVfUkVBRE9OTFkKKwlpbiBkZWNsIHRvIGluZGljYXRlIG9iamVjdCB3aWxsIG5ldmVyIGNoYW5nZS4KKwkoYnVpbGRfdW5hcnlfb3AsIHJlYWRvbmx5X3dhcm5pbmcsIGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCisJKGNfZXhwYW5kX2FzbV9vcGVyYW5kcyk6IExpa2V3aXNlLgorCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9iaXRzKTogTGlrZXdpc2UuCisJKiBjcGx1cy1jdnQuYyAoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogTGlrZXdpc2UuCisJKiBjcGx1cy10eXBlMi5jIChyZWFkb25seV93YXJuaW5nX29yX2Vycm9yKTogTGlrZXdpc2UuCisJKiBjcGx1cy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uLCBidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlCisJKGJ1aWxkX21vZGlmeV9leHByLCBjX2V4cGFuZF9hc21fb3BlcmFuZHMpOiBMaWtld2lzZS4KKworCSogY3BsdXMtY3Z0LmMgKHBvcGNsYXNzKTogV2hlbiBtYWtpbmcgSU5ESVJFQ1RfUkVGLCBkb24ndCBzZXQKKwlUUkVFX1JFQURPTkxZIGZyb20gVFlQRV9SRUFET05MWS4KKworV2VkIEp1bAkgNCAxNToxNjozNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEZpeCBidWdzIGluIGxhc3QgY2hhbmdlLgorCitXZWQgSnVsCSA0IDA3OjUyOjUzIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IERlbGV0ZSBleHRyYW5lb3VzIHRlc3QKKwlmb3Igc3RydWN0dXJlLXZhbHVlIHN0YWNrIHNsb3QsIHdoaWNoIG5vIGxvbmdlciBleGlzdHMuCisKKwkqIHJlbG9hZDEuYyAoYmFkX3NwaWxsX3JlZ3MpOiBTaG91bGQgYmUgc3RhdGljLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBnZW5fbG93cGFydF9mb3JfY29tYmluZSk6IFByb3BhZ2F0ZQorCVJUWF9VTkNIQU5HSU5HX1Agd2hlbiBtYWtpbmcgYSBuZXcgTUVNLgorCSogYy10eXBlY2suYywgY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IEFOU0kgc2F5cyB0aGF0CisJZGUtcmVmZXJlbmNlIG9mIHBvaW50ZXItdG8tY29uc3QgaXMgbm90IHJlYWRvbmx5IHNvIGRvbid0IHNldAorCVJUWF9VTkNIQU5HSU5HX1AuCisJKiBleHBsb3cuYyAodmFsaWRpemVfbWVtKTogVXNlIGNoYW5nZV9hZGRyZXNzIHNvIGZsYWdzIGdldCBjb3BpZWQKKwl0byBuZXcgTUVNLgorCSogZXhwci5jIChjb252ZXJ0X21vdmUsIGJsb2NrX2Jsb2NrX3t0byxmcm9tfV9yZWcsIGVtaXRfbW92ZV9pbnNuKToKKwlMaWtld2lzZS4KKwkoZG9fdGFibGVqdW1wKTogU2V0IFJUWF9VTkNIQU5HSU5HX1AgaW4gTUVNIGFjY2Vzc2luZyBhZGRyZXNzIHRhYmxlLgorCSogZnVuY3Rpb24uYyAob3B0aW1pemVfYml0X2ZpZWxkLCBpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6CisJUHJlc2VydmUgZmxhZ3Mgd2hlbiBtYWtpbmcgbmV3IE1FTS4KKwkqIGxvb3AuYyAoaW52YXJpYW50X3ApOiBNZW1vcnkgcmVmZXJlbmNlcyB0byBhbiBpbnZhcmlhbnQgYWRkcmVzcworCWFyZSBpbnZhcmlhbnQgaWYgUlRYX1VOQ0hBTkdJTkdfUCBpcyBzZXQuCisJKiByZWNvZy5jIChhZGpfb2Zmc2V0dGFibGVfb3BlcmFuZCk6IFByb3BhZ2F0ZSBSVFhfVU5DSEFOR0lOR19QCisJd2hlbiBtYWtpbmcgbmV3IE1FTS4KKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMgKGFsdGVyX3JlZyk6IFN0YWNrIHNsb3QgaXMgcmVhZG9ubHkgaWYgcHNldWRvIHdhcy4KKwkoZWxpbWluYXRlX3JlZ3MpOiBQcm9wYWdhdGUgUlRYX1VOQ0hBTklOR19QIGluIG5ldyBNRU0uCisJKiB2YXJhc20uYyAoZm9yY2VfY29uc3RfZG91YmxlX21lbSk6IFNldCBSVFhfVU5DSEFOR0lOR19QIGluIG5ldyBNRU0uCisKK1R1ZSBKdWwJIDMgMjE6NTA6NTggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoZXhwYW5kX2FuZCk6IE5ldyBmdW5jdGlvbi4KKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogCisJSWYgdmFsdWUgaXMgdm9sYXRpbGUsIGZldGNoIGl0IGFuZCB0aGVuIGlnbm9yZSBpdC4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEVycm9yIGlmIHZhcmlhYmxlIHR5cGUgaXMgaW5jb21wbGV0ZS4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgd2FybiBvZiBpbmNvbXBsZXRlIGFycmF5IGluIHR5cGVkZWYuCisKK1R1ZSBKdWwJIDMgMTg6MDM6MjQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogQ29udmVydCAiKDEgPDwgZm9vKSAmIGJhciIgdG8gIihiYXIgPj4gZm9vKSAmIDEiCisJSW4gIihhICYgMSkgIT0gMCIsIGNhbiBjb252ZXJ0IHRvIHNpbXBseSAiYSAmIDEiLgorCSogY29tYmluZS5jIChzdWJzdCk6IENvbnZlcnQgYnJhbmNoIG9uIHNpZ24gYml0IHRvIHNpZ25lZCBjb21wYXJpc29uCisJd2l0aCB6ZXJvIChwb3NzaWJseSBhZGRpbmcgYSBTVUJSRUcpLgorCUNvbnZlcnQgWkVST19FWFRSQUNUIG9mIHRoZSBsb3ctb3JkZXIgYml0IG9mIGEgcmlnaHQgc2hpZnQgaW50byBhCisJWkVST19FWFRSQUNUIG9mIHRoZSBwcm9wZXIgYml0LgorCitNb24gSnVsCSAyIDEyOjA3OjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogQ29udmVydCBjb25kaXRpb25hbHMgZm9yIHN0b3Jpbmcgb25lCisJdmFsdWUgaW50byBhIHN0b3JlLWZsYWdzIGluc24uCisKKwkqIHZheC5tZCAoY2FsbF9wb3AsIGNhbGxfdmFsdWVfcG9wKTogTmV3IG5hbWVzIGZvciBjYWxsIHBhdHRlcm5zLgorCUluY2x1ZGUgdGhlIHBvcHBpbmcgZXhwbGljaXRseSBpbiB0aGUgcnRsLiAKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRGVsZXRlIGNhc2UgZm9yIGNvbmRqdW1wIGZvbGxvd2VkCisJYnkgdW5jb25kaXRpb25hbCB0byBzYW1lIGxhYmVsOyB3YXMgc3BlY2lhbCBjYXNlIG9mIGFub3RoZXIgY2FzZS4KKwlTd2l0Y2ggYmFjayB0byBuZXh0X2FjdGl2ZV9pbnNuIG9yIHByZXZfYWN0aXZlX2luc24gaW4gYSBmZXcgY2FzZXMuCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplCisJZnJhbWVfcG9pbnRlcl9uZWVkZWQgdG8gemVyby4KKworCSogaTM4Ni5tZCAodHN0c2YpOiBDbG9iYmVyIHJlZyAwIGluIFNJbW9kZS4KKworU3VuIEp1bAkgMSAxNDozMToxNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYzogVXNlIG5leHRfcmVhbF9pbnNuIGluc3RlYWQgb2YgbmV4dF9hY3RpdmVfaW5zbi4KKwlMaWtld2lzZSBmb3IgcHJldl9hY3RpdmVfaW5zbi4JVVNFIGluc25zIG1ha2UgYSBkaWZmZXJlbmNlIQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcCk6IFVzZSBsYXJnZXN0IGFsaWdubWVudCBpZiBCTEttb2RlLgorCisJKiBzdGRkZWYuaDogQ2hlY2sgX19TSVpFX1QgYWxzby4KKworCSogdG9wbGV2LmM6IEluY2x1ZGUgdHlwZXMuaCBmaXJzdC4KKworCSogaTM4Ni5tZCAodHJ1bmMqMik6IERvbid0IGFsbG93IG1vdmluZyBzeW1ib2xpYyBjb25zdGFudCB0byBtZW1vcnkuCisJVXNlIHdpZGVyIG1vdmUgb25seSBmb3Igc3ltYm9saWMgY29uc3RhbnQuCisKKwkqIHRtLWNvbnZleC5oIChMSU5LX1NQRUMpOiBQb3NpeCBsaW5rIGZsYWdzLgorCSogdG0tY29udmV4LmggKFNUQVJURklMRV9TUEVDKTogUG9zaXggc3RhcnQgZmlsZXMuCisJKiB0bS1jb252ZXhbMTJdLmggKENQUF9TUEVDKTogUG9zaXggZGVmaW5lcy4KKwkqIHRtLWNvbnZleFsxMl0uaCAoTElCX1NQRUMpOiBQb3NpeCBsaWJyYXJpZXMuCisJKiB0bS1jb252WzEyXW9zNy5oOiBOZXcgZmlsZXMuCisJKiBjb25maWcuZ2NjOiB1c2UgdG0tY29udipvczcgaWYgL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIGlzbid0IHRoZXJlLgorCisJKiB4bS1jb252ZXguaCAoU19JRk1ULCBTX0lGUkVHKTogbWFrZSB2aXNpYmxlIGlmIGhpZGRlbiBmb3IgcG9zaXguCisJKiB4bS1jb252ZXguaCAoX1BST1RPKTogZGVmaW5lIHRvIGtlZXAgOC4wIGluY2x1ZGVzIGZyb20gc2NyZXdpbmcgdXAuCisKKwkqIHRtLWNvbnZleC5oIChBU01fT1VUUFVUX3tGTE9BVCxET1VCTEV9LCBQUklOVF9PUEVSQU5EKToKKwkgIHVzZSAlZSBpbnN0ZWFkIG9mICUjZywgd2hpY2ggaXMgYnJva2VuIG9yIG5vbi1wb3NpeC4KKworCSogdG0tY29udmV4LmggKGN1cnJlbnRfc2VjdGlvbl9pc190ZXh0KTogbWFrZSBleHRlcm4uCisJKiBvdXQtY29udmV4LmMgKGN1cnJlbnRfc2VjdGlvbl9pc190ZXh0KTogZGVmaW5lIGhlcmUuCisJKiB0bS1jb252ZXguaCAoT1ZFUlJJREVfT1BUSU9OUyksIG91dC1jb252ZXguYyAob3ZlcnJpZGVfb3B0aW9ucyk6CisJICB1c2VsZXNzOyByZW1vdmUuCisJKiB0bS1jb252ZXguaCAoQ1BQX1BSRURFRklORVMpOiByZW1vdmUgcGFyc2VjLCBsb25nIGdvbmUgZnJvbQorCSAgc3lzdGVtIGluY2x1ZGVzLgorCitTYXQgSnVuIDMwIDE0OjAxOjUyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHBlbmRpbmdfeHJlZl9lcnJvcik6IEZpeCB0eXBvIGluIGFyZyBvcmRlci4KKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogTWVudGlvbiBub24tZXggc3lzdGVtIGhlYWRlcnMgZm9yIC1NLgorCUd1ZXNzIHRoZSBkaXJlY3RvcnkuCisJKGNoZWNrX21hY3JvX25hbWUpOiBTaG91bGQgbm90IGJlIHN0YXRpYy4KKworCSogcnRsLmRlZiAoaW5saW5lX2hlYWRlcik6IEFkZCBhIHZlY3RvciBhdCB0aGUgZW5kLgorCSogcnRsLmggKE9SSUdJTkFMX0FSR19WRUNUT1IpOiBOZXcgbWFjcm8uCisJKFJUVkVDX0VMVCk6IE5ldyBtYWNyby4KKwkqIGVtaXQtcnRsLmMgKGdlbl9pbmxpbmVfaGVhZGVyX3J0eCk6IE5ldyBhcmd1bWVudCBmb3IgdGhhdCB2ZWN0b3IuCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lKTogQ29weSBhcmcgcnRscyBpZiBuZWMsIHRoZW4gbWFrZQorCWFuIGFyZyB2ZWN0b3IgdG8gcHV0IGluIHRoZSBoZWFkZXIuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBMb29rIGluIHRoYXQgdmVjdG9yIGZvciB0aGUgcnRsLgorCShjb3B5X3Bhcm1fZGVjbHMpOiBMaWtld2lzZS4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFdhcm4gaWYgZnVuY3Rpb24gZGVjbGFyZWQgZXh0ZXJuYWwKKwlhbmQgbGF0ZXIgc3RhdGljLgorCitGcmkgSnVuIDI5IDEzOjI5OjI0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlKTogU3VwcGx5IG1pc3NpbmcgKi4KKworVGh1IEp1biAyOCAyMTozOTo0MyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgKG11bGRmMyBmb3IgNjg4ODEpOiBHZW5lcmF0ZSBmc2NhbGUgaWYgYXBwcm9wcmlhdGUuCisJKiBvdXQtbTY4ay5jIChmbG9hdGluZ19leGFjdF9sb2cyKTogTmV3IGZ1bmN0aW9uLgorCitXZWQgSnVuIDI3IDE3OjE5OjM2IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBOZXcgaGFuZGxpbmcgb2YgemVyby13aWR0aCBiaXQgZmllbGRzLgorCVN0b3JlIGFwcHJvcHJpYXRlIGRhdGEgaW4gdGhlbSBsaWtlIG90aGVyIGJpdCBmaWVsZHMuCisJRG9uJ3QgZGVsZXRlIHRoZW0gdW50aWwgYWZ0ZXIgbGF5b3V0LgorCURvbid0IG1lc3Mgd2l0aCBhbGlnbm1lbnQgb2YgZm9sbG93aW5nIGZpZWxkOyBzZXQgaXRzIG93bi4KKwlJZiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTLCBnZXQgYWxpZ25tZW50IGZyb20gdHlwZS4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBGb3IgemVyby13aWR0aCBmaWVsZCwgaWYKKwlQQ0NfQklURklFTERfVFlQRV9NQVRURVJTLCBhbGlnbm1lbnQgZG9lcyBub3QgYWZmZWN0IHRoYXQgb2Ygc3RydWN0dXJlLgorCShsYXlvdXRfZGVjbCk6IERvbid0IGFib3J0IGZvciB6ZXJvLXdpZHRoIGlmIG5vIG5hbWUuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6CisJT3V0cHV0IC4uLkZVTkNUSU9OX0JFRyBub3RlIGhlcmUsIGFmdGVyIGFzc2lnbl9wYXJtcy4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IE5vdCBoZXJlLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3JlY29yZF90eXBlX25hbWUpOiBDb25kaXRpb25hbGl6ZSBmb3IgCisJU0RCX0FMTE9XX0ZPUldBUkRfUkVGRVJFTkNFUy4gIERvbid0IHVzZSB0eXBlZGVmIG5hbWVzLCBqdXN0IHRhZ3MuCisJKHNkYm91dF9iZWdpbl9ibG9jayk6IExpa2V3aXNlLgorCShwbGFpbl90eXBlXzEpOiBMaWtld2lzZS4gIEFsc28gbW92ZSBjb2RlIHRvIG91dHB1dCBzdHJ1Y3R1cmUgc2l6ZS4KKwkoc2Rib3V0X3N5bWJvbCk6IE91dHB1dCB0aGUgdHlwZSBpZiBub3QgeWV0IG91dHB1dC4KKwlEb24ndCBvdXRwdXQgdG9wLWxldmVsIGluaXRpYWxpemVkIHZhcmlhYmxlcyB5ZXQuCisJQXZvaWQgY3Jhc2ggaWYgdmFyaWFibGUgbmV2ZXIgZ290IGFueSBydGwuCisJQWRkIGNvbmRpdGlvbmFsIGZvciBTREJfQVVUT19OT1JNQUxJWkVfT0ZGU0VULgorCShzZGJvdXRfdG9wbGV2ZWxfZGF0YSwgc2Rib3V0X3F1ZXVlX2Fub255bW91c190eXBlKTogCisJKHNkYm91dF9kZXF1ZXVlX2Fub255bW91c190eXBlKTogTmV3IGZ1bmN0aW9ucy4KKwkoc2Rib3V0X3RhZ3MpOiBSZXZlcnNlIHRoZSBsaXN0IGZpcnN0LgorCU91dHB1dCBlbnVtcyBiZWZvcmUgb3RoZXIgdGhpbmdzLgorCShzZGJvdXRfcmVnX3Bhcm0pOiBGYWtlIGEgbmFtZSBpZiBuZWNlc3NhcnkuICBVc2UgQ19SRUdQQVJNLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgc2Rib3V0X3RvcGxldmVsX2RhdGEuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBEaXNhYmxlIHdhcm5pbmdzIGZvciBwb2ludGVycworCXRvIGNvbnN0IGFuZCB2b2xhdGlsZSBmdW5jdGlvbnMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBNYXJrIHZhcmlhYmxlIGFzIHVzZWQuCisKK1R1ZSBKdW4gMjYgMTc6MDU6MDAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1zcGFyYy5oIChMSU5LX1NQRUMpOiBEZWxldGUgc3B1cmlvdXMgYC0nLgorCisJKiB0bS1zdW4zLmggKEFTTV9PVVRQVVRfRkxPQVRfT1BFUkFORCk6IEhhbmRsZSBtaW51cyB6ZXJvLgorCShBU01fT1VUUFVUX0RPVUJMRV9PUEVSQU5EKTogTGlrZXdpc2UuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogQ2hlY2sgVFlQRV9OT19GT1JDRV9CTEsgaW4gdW5pb24gZmllbGRzLgorCitUdWUgSnVuIDI2IDAxOjQ4OjU3IDE5OTAgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogdHJlZS5jIChkdW1wX3RyZWVfc3RhdGlzdGljcyk6IER1bW15IGZ1bmN0aW9uLiAgVG8gYmUgZmlsbGVkIGluCisJbGF0ZXIgd2hlbiB3ZSBkZWNpZGUgd2hhdCB0cmVlIHN0YXRpc3RpY3Mgc2hvdWxkIGJlIG1lYXN1cmVkLgorCShidWlsZCk6IE5vdyBvayB0byB0YWtlIGFyZ3VtZW50cyBvZiBsZW5ndGggMS4JYGJ1aWxkMScgY2Fubm90IGJlCisJdXNlZCB0byBhbGxvY2F0ZSAncycgdHJlZSBub2RlcyB3aGNpaCBtaWdodCBoYXZlIGxlbmd0aCAxLgorCisJKiBBbGwgR05VIEMrKyBmaWxlcyB1cGRhdGVkIHRvIDEuMzcuMiAoYWxwaGEgMikuICBOT1RFOiBjcGx1cy1kZWNsLmMKKwluZWVkcyB0byBiZSBmaXhlZCB0byBub3QgdXMgUlRMLiAgSSdtIGxlYXZpbmcgdGhpcyBmaWxlIGluIGl0cworCWN1cnJlbnQgc3RhdGUgc28gdGhhdCB0aGUgR05VIEMrKyBjb21waWxlciBhdCBsZWFzdCBjb21waWxlcy4KKworCSogQWxsIFNQQVJDIGZpbGVzOiBtb2RpZmllZCB0byB1c2UgcmVnaXN0ZXJzICVmMzAgYW5kICVmMzEgYXMKKwl0ZW1wb3JhcmllcyBmb3IgaG9sZGluZyBmbG9hdGluZy1wb2ludCB6ZXJvLiAgVXNlZCB0byB1c2UgJWYwIGFuZAorCSVmMSwgd2hpY2ggbWFkZSBpdCBpbXBvc3NpYmxlIHRvIGNvbXBhcmUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcyB3aXRoCisJemVyby4KKworTW9uIEp1biAyNSAxNjo1NDoxMyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBOZXcgYXJncyBnaXZlIGZpbGUvbGluZSBmb3IgZmlyc3Qgbm90ZS4KKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogUGFzcyB0aGVtLgorCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBQYXNzIGR1bW1pZXMgZm9yIHRoZW0uCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbik6IEZvciBzZGIsIGRvbid0IG91dHB1dCBhIGxpbmUgbnVtYmVyLCAKKwlqdXN0IHNldCBsYXN0X2xpbmVudW0uCisKKwkqIGMtcGFyc2UueSAoaGFzaCwgaXNfcmVzZXJ2ZWRfd29yZCk6IE5ldyBrZXl3b3JkIF9fbGFiZWxfXy4KKworCSogc3RkZGVmLmg6IENoZWNrIF9UX1NJWkUgYXMgd2VsbCBhcyBfU0laRV9ULgorCitTdW4gSnVuIDI0IDE2OjA5OjE3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IERvIHByZXNlcnZlX3RlbXBfc2xvdHMgZm9yIFRBUkdFVF9FWFBSLgorCitTYXQgSnVuIDIzIDA5OjUyOjQwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbnBlZXAuYyAoZ2VuX3BlZXBob2xlKTogSWdub3JlIFVTRSBhbmQgQ0xPQkJFUiBpbnNuIGFzIHdlbGwgYXMKKwlOT1RFIHdoZW4gbWF0Y2hpbmcgcGVlcGhvbGUuCisKK0ZyaSBKdW4gMjIgMTc6NDA6NTYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBTZXQgdXAgVFJFRV9QVVJQT1NFCisJaW4gcmVjb3JkIGNvbnN0cnVjdG9yIGVsZW1lbnRzLgorCisJKiBjZXhwLnkgKGV4cDEpOiBJZiBwZWRhbnRpYywgd2FybiBhYm91dCBjb21tYXMuCisJKHRva2VudGFiMik6IEFkZCBlbnRyaWVzIGZvciArKyBhbmQgLS0uCisJKHl5bGV4KTogRXJyb3IgaWYgdGhvc2UgYXJlIHVzZWQuCisKKwkqIGMtZGVjbC5jIChsb29rdXBfdGFnKTogRm9yIHdyb25nIGtpbmQgb2YgdHlwZSwganVzdCBzZXQgZmxhZy4KKwkoc2hhZG93X3RhZyk6IENsZWFyIHRoZSBmbGFnLgorCShwZW5kaW5nX3hyZWZfZXJyb3IpOiBQcmludCB0aGUgZXJyb3IgbWVzc2FnZSBoZXJlIGlmIGZsYWcgc2V0LgorCSogYy1wYXJzZS55IChzZXRzcGVjcyk6IENhbGwgdGhhdC4KKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBVc2UgY2FsbF9wb3AgYW5kIGNhbGxfdmFsdWVfcG9wIGluc25zCisJdG8gcmVjb3JkIHdoZW4gdGhlIGNhbGxlZCBmdW5jdGlvbiBwb3BzIGl0cyBhcmdzLgorCitGcmkgSnVuIDIyIDE2OjQzOjEyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKHdpcGVfZGVhZF9yZWcpOiBSZW1vdmUgUkVHX0RFQUQgbm90ZSBmb3IgdW5zZXQgcmVnLgorCisJKiB0bS1zcGFyYy5oOiBSZXBsYWNlIEZJWF9GUkFNRV9QT0lOVEVSX0FERFJFU1Mgd2l0aAorCUlOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQuCisKKwkqIHRtLXZheC5oIChSVFhfQ09TVFMpOiBTaG93IHNoaWZ0cyBhcmUgcmVsYXRpdmVseSBleHBlbnNpdmUuCisKK0ZyaSBKdW4gMjIgMTU6MDU6MjQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoR0VOKTogTmV3IHZhcmlhYmxlLgorCShQKTogTmV3IHZhcmlhYmxlLgorCShjYzEsIGNjMXBsdXMsIGNjMW9iaik6IFVzZSAkKFApLgorCisJKiBjY2NwLmMgKGNoZWNrX21hY3JvX25hbWUpOiBOZXcgc3Vicm91dGluZSB0YWtlbiBmcm9tIGRvX2RlZmluZS4KKwkoZG9fZGVmaW5lLCBkb191bmRlZik6IFVzZSB0aGlzLgorCShkb191bmRlZik6IFdhcm4gaWYganVuayBmb2xsb3dzIG5hbWUuCisJKGhhbmRsZV9kaXJlY3RpdmUpOiBBbHdheXMgaWdub3JlIGVtcHR5IGRpcmVjdGl2ZS4KKwlXYXJuIGlmIFxmIG9yIFx2IGluIGRpcmVjdGl2ZS4JRXJyb3IgZm9yIG1hbGZvcm1lZCBkaXJlY3RpdmUgbmFtZS4KKworCSogdHJlZS5oIChCVUlMVF9JTl9ORVhUX0FSRyk6IERlZmluZSBpdC4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlY2xhcmUgX19idWlsdGluX25leHRfYXJnLgorCSogZXhwci5oIChjdXJyZW50X2Z1bmN0aW9uX2FyZ19vZmZzZXRfcnR4KTogRGVjbGFyZSBpdC4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFNldCB0aGF0IHZhcmlhYmxlIGF0IGVuZC4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBJbXBsZW1lbnQgX19idWlsdGluX25leHRfYXJnLgorCSogc3RkYXJnLmggKHZhX3N0YXJ0KTogVXNlIF9fYnVpbHRpbl9uZXh0X2FyZy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2hlY2sgZm9yIFRSQURJVElPTkFMX1JFVFVSTl9GTE9BVC4KKworRnJpIEp1biAyMiAwNzowNzo1MyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBQdXQgbGFiZWwgZm9yIGp1bXAgdGFibGUgaW4gc2FtZSBzZWN0aW9uCisJKHJlYWQtb25seSBkYXRhKSBhcyBqdW1wIHRhYmxlLgorCisJKiBsb29wLmM6IEFsbG93IHRtLmggdG8gZGVmaW5lIC4uLl9CRU5FRklUIGFuZCBDT1BZX1BFTkFMVFkuCisKK1dlZCBKdW4gMjAgMTM6MDM6NTMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1hcG9sbG82OC5oIChGVU5DVElPTl9BUkdfUEFERElORyk6IE5ldmVyIHBhZC4KKwkoU1RBQ0tfQk9VTkRBUlkpOiBNYWtlIGl0IDMyLgorCShDUFBfU1BFQyk6IEFkZCBzcGFjZXMuCSBEZWZpbmUgX0FQT0xMT19TT1VSQ0UgaWYgbm90IC1hbnNpLgorCisJKiBjLWNvbW1vbi5jIChjaGVja19jYXNlX3ZhbHVlKTogTmV3IGZ1bmN0aW9uLgorCSogYy1wYXJzZS55IChzdG10LCB3aGVuIHBhcnNpbmcgY2FzZSk6IFVzZSB0aGF0LgorCUFkZCBuZXcgcnVsZSBmb3IgY2FzZSByYW5nZS4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfaW5oZXJpdGFuY2VfaW5zbik6IE5ldyB2YXJpYWJsZS4KKwkocmVnX3JlbG9hZGVkX2luc24pOiBOZXcgdmFyaWFibGUuCisJKGNob29zZV9yZWxvYWRfcmVncyk6IFVwZGF0ZSB0aG9zZSB2YXJpYWJsZXMuCisJKGVtaXRfcmVsb2FkX2luc25zKTogVXNlIHRoZW0gdG8gcmVtb3ZlIGRlYXRocyBmcm9tIGluc25zCisJdGhhdCB1c2VkIGlucHV0IHJlbG9hZHMuCisJKHJlbG9hZF9hc19uZWVkZWQpOiBDbGVhciByZWdfcmVsb2FkZWRfaW5zbiB3aGVuIG5lY2Vzc2FyeS4KKworCSogbTY4ay5tZCAoYXNobHNpMywgbHNobHNpMyk6IFVzZSBhZGQgdG8gc2VsZiB0byBzaGlmdCBvbmUgYml0LgorCisJKiBkYnhvdXQuYyAoU1RBQl9DT0RFX1RZUEUpOiBOZXcgbWFjcm8gZGVmaW5lZCBhcyB0eXBlIGZvciBzdGFiIGNvZGVzLgorCVVzZSBpbiBwbGFjZSBvZiBlbnVtIF9fc3RhYl9kZWJ1Z19jb2RlLgorCitUdWUgSnVuIDE5IDIyOjU2OjQwIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfaW5jcmVtZW50KTogRm9yIHByZWluY3JlbWVudCwgZG9uJ3QgbG9hZCB2YWx1ZSB0d2ljZToKKwl1c2UgVEVNUCBhcyBpbnB1dCB0byBhZGRpdGlvbi4KKworVHVlIEp1biAxOSAwNjo1MzoxMyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBsb3cuYyAoYWRqdXN0X3N0YWNrLCBhbnRpX2FkanVzdF9zdGFjayk6IFVzZSBleHBhbmRfYmlub3AgaW5zdGVhZAorCW9mIGdlbl97YWRkLHN1Yn0yX2luc24gc2luY2UgdGhlIGxhdHRlciB3aWxsIGFib3J0IGlmIHRoZSBjb25zdGFudCBpcworCW91dCBvZiByYW5nZSBmb3IgdGhlIG1hY2hpbmUuCisKK1R1ZSBKdW4gMTkgMDA6MzU6MTYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChwb3N0X21hcmtfbGlmZSk6IERvbid0IGRlY3JlbWVudCBERUFUSAorCWlmIGl0IGVxdWFscyBCSVJUSC4gIERvbid0IGV2ZXIgaW5jcmVtZW50IERFQVRILgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0cnVjdG9yKTogRGlzY2FyZCBub25fbHZhbHVlX2V4cHIsIG5vdCBub3BfZXhwci4KKwlIYW5kbGUgbWlzc2luZyB2YWx1ZXMuCVVzZSBmaWVsZCBpbiB0aGUgdHJlZV9saXN0LCBpZiBhbnkuCisJKG91dHB1dF9hZGRyZXNzZWRfY29uc3RhbnRzKTogRG9uJ3QgZGllIGlmIHZhbHVlIGlzIG1pc3NpbmcuCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBIYW5kbGUgaW5kZXggYW5kIGZpZWxkIHNwZWNzLgorCSogYy1wYXJzZS55IChpbml0bGlzdCk6IFBhcnNlIHRoZW0uCisKK01vbiBKdW4gMTggMTU6NTg6NDggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYywgY3BsdXMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOgorCVR5cGVzIGRvbid0ICJtYXRjaCIgaWYgb25lIGlzIGVycm9yLgorCisJKiBjLXBhcnNlLnkgKGxhYmVsX2RlY2wpOiBVc2UgbmV3IGtleXdvcmQgX19sYWJlbF9fLCBub3QgY29sb24uCisKKwkqIGMtcGFyc2UuZ3BlcmYgKF9fbGFiZWxfXyk6IE5ldyBrZXl3b3JkLgorCisJKiBtaXBzLm1kIChwcm9iZSk6IE1ha2UgYSBzaW5nbGUgaW5zbiwganVzdCBhIG1lbXJlZi4KKworTW9uIEp1biAxOCAxNDoyNzo1NSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUpOiBTZXQgbWF4X2x1aWQgdG8gbGFzdCBsdWlkICsgMSwgYXMgZG9jdW1lbnRlZC4KKworCSogbG9jYWwtYWxsb2MuYyAocXR5X2Nsb2JiZXIpOiBOZXcgdmFyaWFibGUuCisJKGxvY2FsX2FsbG9jKTogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaXQuCisJKHJlZ19pc19zZXQpOiBTZXQgcXR5X2Nsb2JiZXIgZm9yIGEgY2xvYmJlciBvZiBhIHBzZXVkbyB1c2VkIG9ubHkKKwlpbiB0aGlzIGluc24uCisJKGZpbmRfZnJlZV9yZWcpOiBQYXNzIHF0eV9jbG9iYmVyIHRvIHBvc3RfbWFya19saWZlLgorCShwb3N0X21hcmtfbGlmZSk6IElmIENMT0JCRVIgaWYgbm9uLXplcm8sIHJlZ2lzdGVyIGlzbid0IGxpdmUgYWZ0ZXIKKwlpdHMgZGVhdGggaW5zbi4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBjYWxsIHRyeV9jb25zdGFudHMgb24KKwlhbiBpbnNuIHRoYXQgc2V0cyBDQzAgdW50aWwgd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIG5leHQgaW5zbi4gIFRoZW4KKwljYWxsIGl0IG9uIGJvdGguICBUaGlzIGlzIGJlY2F1c2UgdGhlIHJlY29nbml6ZXIgZm9yIHRoZXNlIGluc25zCisJbWF5IHdhbnQgdG8gbG9vayBhdCB0aGUgdXNlciBvZiBDQzAuCisKK01vbiBKdW4gMTggMTM6MjU6NTkgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBtaXBzLm1kIChhc2hscWkzLCBhc2hsaGkzLCBvbmVfY21wbHFpMiwgb25lX2NtcGxoaTIpOiBEZWxldGVkLgorCShhc2hsc2kzLCBhc2hyc2kzLCBsc2hyc2kzLCBuZWcqLCBvbmVfY21wbHNpMik6IFNpbXBsaWZpZWQuCisJRG9uJ3Qgb3V0cHV0IGNvbW1lbnRzLglVc2UgbW9yZSBzcGVjaWZpYyBwcmVkaWNhdGVzLgorCisJKiBtaXBzLm1kIChtb3ZzZiwgbW92ZGYpOiBVc2UgTCwgTSBjb2RlcyB0byBhdm9pZCAjaWZkZWYncy4KKwlBbHNvIHNpbXBsaWZ5IGFuZCBkb24ndCBvdXRwdXQgY29tbWVudHMuCisJKGFub255bW91cyBwYXR0ZXJucyBmb3IgdGhvc2UgaW5zbnMpOiBEZWxldGVkLgorCShsb2FkaW5nIGZsb2F0aW5nIGNvbnN0YW50KTogTmV3IHBhdHRlcm5zIGFkZGVkLgorCShtb3ZlIHFpIHRvIHNpIHBhdHRlcm4pOiBEZWxldGVkOyByaWRpY3Vsb3VzLgorCShtb3ZkaSwgbW92c2ksIG1vdmhpLCBtb3ZxaSk6IE5vIG5lZWQgdG8gY2hlY2sgZm9yIG1vdmluZyByZWcgdG8gc2VsZi4KKworCSogbWlwcy5tZCAobm9wKTogVXNlIC5zZXQgbm9yZW9yZGVyIHRvIHBsYWNhdGUgYXNzZW1ibGVyLgorCitTdW4gSnVuIDE3IDIwOjAxOjM4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy5jIChzZXRfc3BlYyk6IERvbid0IHVzZSBgbmFtZScgZm9yIGJvdGggb2xkIHNwZWMgYW5kIG5hbWUgb2YKKwlzcGVjLiAgVXNlIG5ldyB2YXIgb2xkX3NwZWMgZm9yIHRoZSBmb3JtZXIgdXNlLgorCURvbid0IHVzZSAoY2hhciAqKSAwIGZvciBudWxsIHNwZWM7IHVzZSBhIG51bGwgc3RyaW5nIGluc3RlYWQuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERvbid0IHNwZWNpYWwtY2FzZSBkZWxldGluZyBhbiBBRERSX0RJRkZfVkVDLgorCU1lcmdlIGNvZGUgdG8gZGV0ZWN0IHRyaXZpYWwgQUREUl9WRUMgYW5kIEFERFJfRElGRl9WRUMuCisJKG1hcmtfanVtcF9sYWJlbCk6IERvbid0IGNvdW50IHRoZSB1c2Ugb2YgYSB2ZWN0b3IgdGFibGUgbGFiZWwgaW4gCisJQUREUl9ESUZGX1ZFQy4KKwkoZGVsZXRlX2luc24pOiBDYW4gbm93IGhhbmRsZSBBRERSX0RJRkZfVkVDLgorCShkZWxldGVfbGFiZWxyZWZfaW5zbik6IE5ldyBmdW5jdGlvbi4KKwkocmVkaXJlY3RfdGFibGVqdW1wKTogQ2FsbCBuZXcgZnVuY3Rpb24gdG8gZGVsZXRlIGluc24gdGhhdCByZWZlcmVuY2VzCisJdGhlIGp1bXAgdGFibGUuCisKK1N1biBKdW4gMTcgMDE6MTk6MjYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBnZW5lbWl0LmMgKGdlbl9leHBhbmQpOiBEb24ndCBnZW5lcmF0ZSBgb3BlcmFuZHMnIGlmIHNpemUgaXMgMC4KKworCSogdG0taTg2MC5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBEaXNwbGFjZW1lbnQgbXVzdCBiZSBtdWx0aXBsZQorCW9mIHRoZSBhbGlnbm1lbnQgb2YgdGhlIG9wZXJhbmQuCisKKwkqIGk4NjAubWQgKHNpZ25lZCBiaXQgZmllbGQgcmVjb2duaXplcnMpOiBEb24ndCBzaGlmdCBieSA+MzEgYml0cy4KKworCSogb3V0LWk4NjAuYyAob3V0cHV0X2RlbGF5ZWRfYnJhbmNoKTogUGFzcyByZWdpc3RlciBwcm9wZXJseSB0bworCWxvYWRfb3Bjb2RlLgorCisJKiBtaXBzLm1kIChnZW5lcmFsL2ZwIHJlZyBtb3ZlIHBhdHRlcm5zKTogVXNlIGNvZGVzIEwsIE0sIEQuCisJKG1vdmRpKTogTGlrZXdpc2UuICBBbmQgZG9uJ3Qgb3V0cHV0IHVzZWxlc3MgY29tbWVudHMuCisJVXNlIHRoZSBhc3NlbWJsZXIgdGVtcCByZWcgZm9yIG5vbi1vZmZzZXR0YWJsZSBhZGRyZXNzLgorCShtb3ZzaSwgbW92aGksIG1vdnFpKTogT3V0cHV0IG5vdGhpbmcgZm9yIG1vdmUgZnJvbSByZWcgdG8gaXRzZWxmLgorCU91dHB1dCBsaSB0byBsb2FkIGEgY29uc3RhbnQuICBVc2UgYG1vdmUnIGluc3RlYWQgb2YgYGFkZCcuCisJRG9uJ3Qgb3V0cHV0IHVzZWxlc3MgY29tbWVudHMuCisJKGxvYWQtYWRkcmVzcyBwYXR0ZXJuKTogRGVsZXRlZDsgaGFuZGxlZCBieSBhZGRzaTMgcGF0dGVybi4KKworCSogbWlwcy5tZCAoYWRkc2kzLCBtdWxzaTMpOiBNYWtlIGJvdGggaW5wdXQgcHJlZGljYXRlcyBhcml0aF9vcGVyYW5kCisJc2luY2UgdGhleSBhcmUgY29tbXV0YXRpdmUuCisJKGFuZHNpMywgaW9yc2kzLCB4b3JzaTMpOiBMaWtld2lzZS4KKworCSogdG0tbWlwcy5oIChNT1NUX1NJR05JRklDQU5UX1dPUkQsIExFQVNUX1NJR05JRklDQU5UX1dPUkQpOiBOZXcuCisKKwkqIHRtLW1pcHMuaCAoUFJJTlRfT1BFUkFORCk6IE5ldyBjb2RlcyBELCBMLCBNLgorCSogbWlwcy5tZCAoYW5kZGkzLCBpb3JkaTMsIHhvcmRpMyk6IFVzZSBlYXJseWNsb2JiZXIgdG8gc3RvcCBvdmVybGFwLgorCVVzZSBuZXcgcHJpbnQgY29kZSBELgorCisJKiBtaXBzLm1kIChhbmRzaTMsIGlvcnNpMywgeG9yc2kzKTogTWFrZSBwcmVkaWNhdGVzIG1vcmUgc3BlY2lmaWMuCisJKGFuZGhpMywgLi4uLCBhbmRxaTMsIC4uLik6IFBhdHRlcm5zIGRlbGV0ZWQuCisJKHBhdHRlcm5zIGZvciBub3IpOiBOZXcgYW5vbnltb3VzIHBhdHRlcm5zLgorCSogb3V0LW1pcHMuYyAodW5zX2FyaXRoX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIG1pcHMubWQgKHRydW5jKiwgemVyb19leHRlbmQqLCBleHRlbmQqLCBmaXhfdHJ1bmMqLCBmbG9hdCopOgorCVVzZSBtb3JlIHNwZWNpZmljIHByZWRpY2F0ZXMuCisKKwkqIG1pcHMubWQgKGFkZGhpMywgLi4uLCBhZGRxaTMsIC4uLik6IFBhdHRlcm5zIGRlbGV0ZWQuCisJKGFkZHNpMywgc3Vic2kzLCBtdWxzaTMsIGRpdnNpMyk6IE1ha2UgcHJlZGljYXRlcyBtb3JlIHNwZWNpZmljLgorCURlbGV0ZSB1c2VsZXNzIGNvbW1lbnRzIGZyb20gYXNzZW1ibGVyIGNvZGUuCisJVXNlIG1vcmUgZ2VuZXJpYyBvcCBjb2RlcyByYXRoZXIgdGhhbiBzcGVjaWFsIGNhc2VzIHN1Y2ggYXMgYWRkaXUuCisJKGRpdm1vZHNpNCwgdWRpdm1vZHNpNCwgdWRpdnNpMywgbW9kc2kzLCB1bW9kc2kzKTogTmV3IHBhdHRlcm5zLgorCShhYnNzZjIsIGFic2RmMik6IE5ldyBwYXR0ZXJucy4KKworU3VuIEp1biAxNyAwNjo1NjoxMCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoQ09TVCwgcnR4X2Nvc3QsIG1ha2VfcmVnc19lcXYpOiBJbmRpY2F0ZSB0aGF0IGhhcmQgcmVnaXN0ZXJzCisJaW4gZml4ZWRfcmVncyBhcmUgZXZlbiBjaGVhcGVyIHRoYW4gcHNldWRvcy4KKworCSogZnVuY3Rpb24uYyAoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEpOiBJZiB2YWxpZCwgcmVwbGFjZSBQTFVTCisJd2hvc2Ugc2Vjb25kIG9wZXJhbmQgd291bGQgYmUgemVybyB3aXRoIGl0cyBmaXJzdCBvcGVyYW5kLgorCitTdW4gSnVuIDE3IDAwOjE3OjAzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBHZXQgcmlnaHQgcmVnbm8gZm9yIHZhci1sZW5ndGggb2JqZWN0LgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NldF9jYzBfYW5kKTogU3RyaXAgU1VCUkVHcywgYnV0IG9ubHkgaWYKKwl0aGV5IHRydW5jYXRlLglIYW5kbGUgQVNISUZUUlQgbGlrZSBMU0hJRlRSVC4KKwkodHJ5X2NvbWJpbmUpOiBDYWxsIHNpbXBsaWZ5X3NldF9jYzBfYW5kIGluIGFsbCB0aG9zZSBjYXNlcy4KKwkoc3Vic3QpOiBIYW5kbGUgKHplcm9fZXh0cmFjdCAoc3VicmVnIChsc2hpZnQgKHJlZyApKSkpLgorCitTYXQgSnVuIDE2IDIzOjExOjUyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChnZXRfbmFycm93ZXIsIGdldF91bndpZGVuZWQpOiBCaXQgZmllbGQgdGVzdCB3YXMgYmFja3dhcmRzLgorCitTYXQgSnVuIDE2IDE5OjA3OjE2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEZpeCB0eXBvIGluIHRlc3QgZm9yIGRpc3RyaWJ1dGluZyBiaW5hcnkKKwlvcGVyYXRvciBvdmVyIGNvbmRpdGlvbmFsIGFuZCBjb21wb3VuZCBleHByZXNzaW9ucy4KKworCSogZ2Vub3V0cHV0LmM6IFJlbW92ZSB2ZXN0aWdlcyBvZiBvYnNvbGV0ZSBhbmQgbmV2ZXIgdXNlZAorCUlOU05fTUFDSElORV9JTkZPLgorCisJKiBydGwuZGVmIChNQVRDSF9QQVJBTExFTCk6IEFkZCBuZXcgUlRMIGNvZGUuCisJKiBnZW5jb25maWcuYyAod2Fsa19pbnNuX3BhcnQpOiBTdXBwb3J0IE1BVENIX1BBUkFMTEVMLgorCSogZ2VuZW1pdC5jIChtYXhfb3BlcmFuZF8xKTogTGlrZXdpc2UuCisJKGdlbl9leHApOiBKdXN0IHdyaXRlIG9wZXJhbmQgZm9yIE1BVENIX1BBUkFMTEVMLgorCShnZW5fZXhwYW5kLCBnZW5fc3BsaXQpOiBTdXBwb3J0IE1BVENIX1BBUkFMTEVMLgorCSogZ2VucmVjb2cuYyAod2Fsa19ydHgpOiBBZGQgc3VwcG9ydCBmb3IgTUFUQ0hfUEFSQUxMRUwuCisJKiBnZW5vdXRwdXQuYyAoc2Nhbl9vcGVyYW5kcyk6IFN1cHBwb3J0IE1BVENIX1BBUkFMTEVMCisJbGlrZSBNQVRDSF9PUEVSQVRPUi4KKwkqIGdlbnBlZXAuYyAobWF0Y2hfcnR4KTogQWRkIGNvZGUgdG8gc3VwcG9ydCBNQVRDSF9QQVJBTExFTC4KKwlEb24ndCB3cml0ZSB1bm5lY2Vzc2FyeSBjYXN0IHRvIGBydHgnLgorCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogU2ltcGxpZnkgaGFuZGxpbmcgb2YgbW9kZS4KKwlTdXBwb3J0IE1BVENIX1BBUkFMTEVMLgorCisJKiBleHByLmMgKG1vdmVfYmxvY2tfe3RvLGZyb219X3JlZyk6IFN1cHBvcnQgbG9hZC9zdG9yZSBtdWx0aXBsZS4KKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogSWYgY2FuJ3Qgc3Vic3RpdHV0ZQorCW5ldyBwc2V1ZG8gZm9yIHZpcnR1YWwgcmVnaXN0ZXIsIHRyeSBkb2luZyB0aGUgc3Vic3RpdHV0aW9uCisJZ2xvYmFsbHkgdGhyb3VnaG91dCB0aGUgZW50aXJlIGluc24uICBUaGlzIGxldHMgbG9hZC9zdG9yZSBtdWx0aXBsZQorCWluc25zIHJlZmVyIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGluIHRoZWlyIGFkZHJlc3Nlcy4KKwkKKwkqIGdlbnJlY29nLmMgKHdyaXRlX3NwbGl0X3RyZWUsIHdyaXRlX3NwbGl0X3N1YnJvdXRpbmUpOiBEZWxldGVkLgorCShicmVha19vdXRfc3Vicm91dGluZXMsIHdyaXRlX3N1YnJvdXRpbmUsIHdyaXRlX3RyZWUpOglBY2NlcHQKKwlwYXJhbWV0ZXJzIHRoYXQgaW5kaWNhdGUgd2hldGhlciB3ZSBhcmUgbWFraW5nIGdlbl9zcGxpdCBvciBnZW5fcmVjb2cuCisJKG1haW4pOiBQYXNzIG5ldyBwYXJhbWV0ZXJzIHRvIGJyZWFrX291dF9zdWJyb3V0aW5lcyBhbmQgd3JpdGVfdHJlZS4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogUHJvY2VzcyBpbnNucyB0aGF0IHNldCBDQyB3aGVuZXZlciBhCisJUkVHX0NDX1NUQVRVUyBub3RlIGlzIGZvdW5kOyBub3Qgb25seSBKVU1QX0lOU05zIGNhbiB1c2UgQ0MuCisJV2hlbiBzY2FubmluZyBSRUdfQ0NfU1RBVFVTIGluc25zLCBzZXQgY2NfcHJldl9zdGF0dXMgZnJvbSBjY19zdGF0dXMKKwllYWNoIHRpbWUuCisKKwkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4KTogTmV3IGZ1bmN0aW9uIHRoYXQgdHJpZXMgdG8gCisJcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgYW4gb2JqZWN0IHdpdGhpbiBhbiBpbnNuIGFuZCBzZWUgaWYgdGhlCisJcmVzdWx0aW5nIGluc24gaXMgdmFsaWQuCisKK1RodSBKdW4gMTQgMDY6NTg6MjYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3B0YWJzLmMgKGVtaXRfbm9fY29uZmxpY3RfYmxvY2spOiBXcml0ZSBSRUdfTk9fQ09ORkxJQ1Qgbm90ZXMgYWxsCisJYWxsIGluc25zIGluIHRoZSBibG9jayB0aGF0IG1vZGlmeSB0aGUgb3V0cHV0LglXcml0ZSB0aGVtIG9uIHRoZQorCWZpbmFsIGluc24gZXZlbiBpZiB3ZSBkb24ndCBwdXQgYSBSRUdfRVFVQUwgbm90ZSB0aGVyZS4KKworCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogT25seSBkaXN0cmlidXRlIHJldHVybiBkb3duIGEgY29uZGl0aW9uYWwKKwlleHByZXNzaW9uIGlmIHRhaWwgcmVjdXJzaW9uIGlzIHBvc3NpYmxlIGluIGEgYnJhbmNoLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogUmVtb3ZlIG9ic29sZXRlIHJlZmVyZW5jZSB0byB3aGVuIHdlIGhhZAorCWEgc2hhcmVkIHN0cnVjdHVyZS12YWx1ZSBzbG90LgorCisJKiBqdW1wLmMgKGdldF9sYWJlbF9iZWZvcmUsIGdldF9sYWJlbF9hZnRlciwgZm9sbG93X2p1bXBzKTogTm8gbG9uZ2VyCisJc3RhdGljLgorCSogcnRsLmg6IERlZmluZSB0aGVtLgorCitNb24gSnVuIDExIDE3OjM1OjQwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoSU5TTl9MVUlEKTogQ2hlY2sgZm9yIElOU05fVUlEIGFib3ZlIHRoZSBhcmVhIHRoYXQgd2UKKwlrbm93IGFib3V0LgorCShsb29wX29wdGltaXplKTogQ2Fubm90IHVzZSBJTlNOX0xVSUQgYXMgbGhzLgorCShzY2FuX2xvb3ApOiBJZiBmaXJzdCBqdW1wIGlzIHRvIGxhYmVsIG1hZGUgYnkgbG9vcCwgd2UgY2FuJ3QKKwl0ZWxsIGlmIGl0IGlzIGluIHJhbmdlIG9yIG5vdCwgc28gcmVqZWN0IGxvb3AuCisJUmVqZWN0IGxvb3AgaWYgU0NBTl9TVEFSVCB3YXMgYW4gaW5zbiBwcmV2aW91c2x5IG1hZGUgYnkgbG9vcCBzaW5jZQorCXdlIHdvbid0IGtub3cgaXRzIGx1aWQuCisJT25seSBjYWxsIGxvb3BfcmVnX3VzZWRfYmVmb3JlIGlmIGFyZ3VtZW50IGhhcyBrbm93biBsdWlkLgorCU1hcmsgcGFydGlhbCBpbnZhcmlhbnQgYXMgZ2xvYmFsIGlmIGl0cyBpbnNuIHdhcyBtYWRlIGJ5IGxvb3AuCisJKGlnbm9yZV9zb21lX21vdmFibGVzKTogRG9uJ3QgYXNzdW1lIGFsbCBpbnZhcmlhbnRzIGhhdmUgbHVpZHMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFVzZSBub19sYWJlbHNfYmV0d2Vlbl9wIGluc3RlYWQgb2YKKwlsYWJlbHNfaW5fcmFuZ2VfcC4KKwlEb24ndCBsb29rIGF0IGx1aWQgb2YgaW5zbnMgZm9yIHdoaWNoIG9uZSBkb2Vzbid0IGV4aXN0LgorCSh2YWxpZF9pbml0aWFsX3ZhbHVlX3ApOiBSZWplY3QgaW5pdGlhbGl6YXRpb25zIGluIGluc25zIHdob3NlCisJbHVpZCB3ZSBkb24ndCBrbm93LgorCisJKiBsb29wLmMgKHByb2R1Y3RfY2hlYXBfcCk6IFB1dCBhbGwgb3VyIHJ0bCBpbnRvIGEgc2VwYXJhdGUgb2JzdGFjaworCWFuZCBmcmVlIG1lbW9yeSBmcm9tIGl0LiAgSWYgd2UgdXNlIGN1cnJlbnRfb2JzdGFjaywgd2UgbWF5IGZyZWUKKwltZW1vcnkgYWxsb2NhdGVkIGJ5IGdlbl9yZWdfcnR4LCB3aGljaCBtdXN0IGJlIHByZXNlcnZlZC4KKworCSogYy1jb21tb24uYyAocmV3cml0ZV9mb3JfbWVyZ2VkX3JlZik6IEEgbm9uLXplcm8gb25lLWJpdCBzaWduZWQgZmllbGQKKwlpcyAtMSwgbm90IDEuCisJKiBjLXR5cGVjay5jLCBjcGx1cy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IElmIGNhbid0CisJbWVyZ2UgY29tcGFyaXNvbnMsIGRvbid0IHVzZSByZXN1bHQgb2YgcmV3cml0ZV9mb3JfbWVyZ2VkX3JlZjsKKwljb21wYXJpc29ucyB3aXRoIHplcm8gYXJlIG1vcmUgZWZmaWNpZW50LgorCisJKiBwcm90b2l6ZS5jIChtYWluKTogRG9uJ3QgZGVjbGFyZSBhcyBleHRlcm4uCisKKwkqIGMtYXV4LWluZm8uYyAoZ2VuX2F1eF9pbmZvX3JlY29yZCk6IERvbid0IGRlY2xhcmUgZXh0ZXJuLgorCisJKiBnZW5lbWl0IChnZW5fc3BsaXQpOiBSZXdvcmsgdG8gZml4IG51bWVyb3VzIGJ1Z3MgYW5kIHR5cG9zLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBBdm9pZCBnZW5lcmF0aW5nIChQTFVTIGZvbyAoY29uc3RfaW50IDApKS4KKworV2VkIEp1bgkgNiAyMDowMzozMSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5jb2Rlcy5jIChtYWluKTogQ291bnQgYSBjb2RlIG51bWJlciBmb3IgREVGSU5FX1NQTElULgorCisJKiBydGxhbmFsLmMgKG5vdGVfc3RvcmUpOiBQYXNzIFNVQlJFRyBvZiBhIGhhcmQgcmVnaXN0ZXIgdG8gZnVuY3Rpb24uCisJKHJlZ19vdmVybGFwX21lbnRpb25lZF9wKTogSGFuZGxlIHJlY2VpdmluZyBTVUJSRUcgb2YgaGFyZCByZWdpc3Rlci4KKwkqIGludGVncmF0ZS5jIChtYXJrX3N0b3Jlcyk6IExpa2V3aXNlLgorCSogbG9jYWwtYWxsb2MuYyAocmVnX2lzX3NldCwgcmVnX2lzX2Jvcm4pOiBMaWtld2lzZS4KKwkqIHJlbG9hZDEuYyAobWFya19ub3RfZWxpbWluYWJsZSk6IExpa2V3aXNlLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBEb24ndCBibG93IHVwIGlmIG1vdmluZyBsYXN0IHJlYWwgaW5zbgorCWluIGZ1bmN0aW9uLgorCitXZWQgSnVuCSA2IDE5OjQ0OjA0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtdHJhZGl0aW9uYWwgYmVmb3JlIC1mKi4KKwlEZWxldGUgLWdnIG9wdGlvbi4KKworU3VuIEp1bgkgMyAyMjo0NDoxMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdhcm4gYWJvdXQgZXh0ZXJuIHdpdGggaW5pdGlhbGl6ZXIuCisKK1N1biBKdW4JIDMgMjI6MzI6MTkgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2VucmVjb2cuYyAobWFpbik6IERvbid0IGNhbGwgd3JpdGVfdHJlZSB3aXRoIG51bGwgaWYgbm8gaW5zbnMKKwl3ZXJlIGluIGZpbGUuCisKK1NhdCBKdW4JIDIgMjE6NDk6MjQgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZXMgQUJTX0VYUFIsIE1BWF9FWFBSLCBNSU5fRVhQUik6IFVzZSB0YXJnZXQKKwl1bmxlc3MgemVybyBvciBzYWZlX2Zyb21fcCByZWplY3RzIGl0LgorCShleHBhbmRfZXhwciwgY29uZGl0aW9uYWwgY2FzZXMpOiBMaWtld2lzZS4KKworU2F0IEp1bgkgMiAxNDo0NjoxOCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEhhbmRsZSBjb25zdCBhbmQgdm9sYXRpbGUgd2l0aCBwYXJtCisJc3BlY2lmaWVkIGFzIGZ1bmN0aW9uIHR5cGUuCisKK0ZyaSBKdW4JIDEgMTY6MTM6MzkgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmRlZiAoREVGSU5FX0ZVTkNUSU9OX1VOSVQpOiBDaGFuZ2Ugc3BlY2lmaWNhdGlvbnMgc28KKwlpdCBub3cgaXMgb25lIHBlciBvcGVyYXRpb24gdHlwZSwgcmF0aGVyIHRoYW4gb25lIHBlcgorCWZ1bmN0aW9uIHVuaXQuCisJKiBnZW5hdHRyLmMgKHdyaXRlX3VuaXRzKTogV3JpdGUgb3V0IG5ldyBmdW5jdGlvbiBuYW1lcyBhbmQKKwlmdW5jdGlvbiB1bml0IHRhYmxlIHN0cnVjdHVyZS4KKwkqIGdlbmF0dHJ0YWIuYyAoc3RydWN0IGZ1bmN0aW9uX3VuaXRfb3ApOiBOZXcgc3RydWN0dXJlLgorCShzdHJ1Y3QgZnVuY3Rpb25fdW5pdCk6IFVwZGF0ZWQgZm9yIG5ldyBkZWZpbml0aW9uIG9mCisJREVGSU5FX0ZVTkNUSU9OX1VOSVQuCisJKFNJTVBMSUZZX1RFU1RfRVhQKTogTmV3IG1hY3JvIHRvIHJlZHVjZSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMKKwl0byBzaW1wbGlmeV90ZXN0X2V4cC4gIFJlcGxhY2UgYWxsIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHdpdGgKKwl1c2VzIG9mIHRoZSBtYWNyby4KKwkoY2hlY2tfYXR0cl90ZXN0LCBtYWtlX2FsdGVybmF0aXZlX2NvbXBhcmUpOiBTaG93IHRoYXQgRVFfQVRUUiB3aXRoCisJYXR0cmlidXRlIG9mICJhbHRlcm5hdGl2ZSIsIE1BVENIX09QRVJBTkQsIGFuZCBjb21wYXJpc29uIGNhc2VzIGNhbid0CisJYmUgc2ltcGxpZmllZC4KKwkoZXhwYW5kX3VuaXRzLCBnZW5fdW5pdCwgd3JpdGVfZnVuY3Rpb25fdW5pdF9pbmZvKTogU3VwcG9ydCBuZXcKKwltZWFuaW5nIG9mIERFRklORV9GVU5DVElPTl9VTklULgorCShzaW1wbGlmeV90ZXN0X2V4cHIpOiBSZXdvcmsgQU5EIGFuZCBJT1IgY2FzZXMgdG8gcmVkdWNlIHJlc2NhbnMuCisJT25jZSBhbiBleHByZXNzaW9uIGhhcyBiZWVuIHNpbXBsaWZpZWQsIHNldCBSVFhfVU5DSEFOR0lOR19QIHNvCisJd2Ugd29uJ3QgdHJ5IHNpbXBsaWZ5aW5nIGl0IGFnYWluLiAgRG9uJ3QgZG8gdGhpcyBpZiBJTlNOX0NPREUgPT0gLTIuCisJKHdyaXRlX2F0dHJfc2V0KTogRG9uJ3QgbWFrZSBhIHJlY3Vyc2l2ZSBjYWxsIGlmIHdlIGtub3cgdGhhdAorCXRoZSB0ZXN0IHdlIGFyZSB3cml0aW5nIHdpbGwgYWx3YXlzIGJlIGZhbHNlLiAgQWxzbyBjbGVhbiB1cCBhIGJpdC4KKwkobWFpbik6IHRydWVfcnR4IGFuZCBmYWxzZV9ydHggZG9uJ3QgbmVlZCB0byBiZSBzaW1wbGlmaWVkLgorCVdyaXRlIGdlbl9hdHRyXy4uLiByb3V0aW5lcyBiZWZvcmUgc3BlY2lhbCByb3V0aW5lcy4KKworRnJpIEp1bgkgMSAxNDoxNzo0OCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHRtLXNwYXJjLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6CisJUm91bmQgZnJhbWUgc2l6ZSB0byBtdWx0aXBsZSBvZiBTVEFDS19CT1VOREFSWS4KKworRnJpIEp1bgkgMSAwOTozODo1MSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZW1pdF9ub19jb25mbGljdF9ibG9jayk6IFBsYWNlIFJFR19OT19DT05GTElDVCBub3RlcyBvbgorCWluc24gdGhhdCBjb250YWlucyBSRUdfRVFVQUwgbm90ZSBpbnN0ZWFkIG9mIGluc24gZG9pbmcgY29tcHV0YXRpb24uCisKKwkqIGNwbHVzLWRlY2wyLmMsIGNwbHVzLWxleC5jOiBSZW5hbWUgZ2V0dGltZSB0byBnZXRfcnVuX3RpbWUuCisJTGlrZXdpc2UgZm9yIG15X2dldHRpbWUgdG8gbXlfZ2V0X3J1bl90aW1lLgorCisJKiBNYWtlZmlsZS5pbiAodmFyYXNtLm8sIGNhbGxzLm8sIGV4cGxvdy5vLCBpbnRlZ3JhdGUubywgbG9vcC5vKToKKwlUaGVzZSBkbyBub3QgZGVwZW5kIG9uIGluc24tY29kZXMuaC4KKwkqIGZ1bmN0aW9uLmM6IEV4cGxpY2l0bHkgaW5jbHVkZSBpbnNuLWNvZGVzLmggdG8gbWFrZSBpdCBjbGVhciB0aGF0IGl0CisJaXMgbmVlZGVkIGZvciB0aGUgdmFsdWVzIG9mIHRoZSBDT0RFX0ZPUl8uLi4gbWFjcm9zLgorCitUaHUgTWF5IDMxIDEyOjU5OjI4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ251bGliMi5jIChfX3RyYW1wb2xpbmUpOiBOZXcgZnVuY3Rpb24uCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTKTogQ29tcGlsZSBpdC4KKwkqIHRtLW02OGsuaCAoVFJBTVBPTElORV9BTElHTik6IERlZmluZSBpdC4KKwkqIGZ1bmN0aW9uLmMgKHRyYW1wb2xpbmVfYWRkcmVzcyk6IEhhbmRsZSBleHRyYSBhbGlnbm1lbnQuCisJKiB0bS1tNjhrLmggKFRSQU1QT0xJTkVfVEVNUExBVEUsIElOSVRJQUxJWkVfVFJBTVBPTElORSk6IAorCVJlZGVmaW5lIHRvIHRyYW5zZmVyIHZpYSBfX3RyYW1wb2xpbmUuCisJKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IERlZmluZSBpdCwgZm9yIGdudWxpYjIuYy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogUHJlc2VydmUgc2lnbiBvbiBjb25zdGFudCB3aGVuIG90aGVyIHRlcm1zCisJY2FuY2VsIChhZnRlciBjYWxsIHRvIHNwbGl0X3RyZWUpLgorCitUaHUgTWF5IDMxIDEyOjM5OjUxIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAocHJlZXhwYW5kX2NhbGxzKTogSWdub3JlIEJMT0NLIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbi4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRml4IHR5cG8gZ2V0dGluZyBtb2RlIG9mIHJlc3VsdC4KKworCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IERvbid0IGdvIHBhc3QgVE8gaWYgaXQgaXMgdGFyZ2V0IG9mCisJZm9sbG93ZWQganVtcC4KKworV2VkIE1heSAzMCAyMTozMToxNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoZm5kZWYsIG5lc3RlZF9mdW5jdGlvbiwgbm90eXBlX25lc3RlZF9mdW5jdGlvbik6CisJVXNlIFlZRVJST1IxIGluc3RlYWQgb2YgWVlFUlJPUi4gCisJKFlZRVJST1IxKTogTmV3IG1hY3JvLgorCSogY3BsdXMtcGFyc2UueSwgb2JqYy1wYXJzZS55OiBMaWtld2lzZS4KKworVHVlIE1heSAyOSAyMTo1MzoxOSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfZmxvYXQpOiBEb24ndCB1c2UgaGFyZCByZWcgYXMgaW50ZXJtZWRpYXRlLgorCisJKiBjLXBhcnNlLnksIG9iamMtcGFyc2UueSAoeXlsZXgpOiBGaXggdHlwbyBjaGVja2luZyBmb3IgRVJBTkdFLgorCSogY3BsdXMtbGV4LmMgKHl5bGV4KTogQ29weSBjdXJyZW50IGNvZGUgZm9yIEVSQU5HRSBmcm9tIGMtcGFyc2UueS4KKworCSogdG9wbGV2LmMgKGdldF9ydW5fdGltZSk6IFJlbmFtZWQgZnJvbSBnZXR0aW1lLgorCitNb24gTWF5IDI4IDE1OjQ3OjQ4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IERvbid0IHB1c2ggYnkgcGllY2VzIGlmIGFsaWdubWVudAorCWZvcmNlcyB1c2Ugb2Ygc21hbGwgcHVzaGVzIHRoYXQgZG8gcHJvYmxlbWF0aWNhbCBwYWRkaW5nLgorCisJKiB0bS1zcGFyYy5oIChTRUxFQ1RfU0VDVElPTik6IFVzZSBUUkVFX1NJREVfRUZGRUNUUy4KKwkoU1RBQ0tfUE9JTlRFUl9PRkZTRVQpOiBOb3cgNjg7IGRvZXMgbm90IGluY2x1ZGUgUkVHX1BBUk1fU1RBQ0tfU1BBQ0UuCisJKFJFR19QQVJNX1NUQUNLX1NQQUNFKTogTm93IHRha2VzIGFyZyBhbmQgaGFzIHZhbHVlLgorCShBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MpOiBEZWZpbmUgdGhpcy4KKwkoRlVOQ1RJT05fUFJPTE9HVUUsIEZVTkNUSU9OX0VQSUxPR1VFLCBFWElUX0lHTk9SRV9TVEFDSyk6IFVzZQorCWN1cnJlbnRfZnVuY3Rpb25fb3V0Z29pbmdfYXJnc19zaXplLCBub3QgLi4uX3ByZXRlbmRfLi4uCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IFVzZSBzaXplX2ludC4KKworCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwsIG1ha2VfZnVuY3Rpb25fcnRsKTogUnVuIEVOQ09ERV9TRUdNRU5UX0lORk8KKwlpZiBpdCBpcyBkZWZpbmVkLgorCisJKiB0cmVlLmRlZiAoQklORF9FWFBSKTogQWRkIG9wZXJhbmQsIHdoaWNoIGhvbGRzIHRoZSBCTE9DSy4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBXaGVuIEJJTkRfRVhQUiBpcyBzZWVuLCBmbGFnIHRoZSBCTE9DSy4KKwkqIGRieG91dC5jIChkYnhvdXRfYmxvY2spOiBUZXN0IHRoZSBmbGFnIGluIHRoZSBCTE9DSy4KKwkqIHNkYm91dC5jIChzZGJvdXRfYmxvY2spOiBMaWtld2lzZS4KKwkqIHN5bW91dC5jIChzeW1vdXRfZnVuY3Rpb24pOiBMaWtld2lzZS4KKwkqIGMtcGFyc2UueSAoc3RtdCBleHByIHJ1bGUpOiBDb3JyZXNwb25kaW5nIGNoYW5nZS4KKworU3VuIE1heSAyNyAyMDo1MzoxNiAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxsZXItc2F2ZS5jIChzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBDb3JyZWN0bHkgbWFyayByZWdpc3RlcnMKKwlsaXZlIGZvciBtdWx0aS13b3JkIHBzZXVkb3MuCisKK1NhdCBNYXkgMjYgMTM6NDI6MDQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzZGJvdXQuYyAoc2RiX2JlZ2luX2Z1bmN0aW9uX2xpbmUpOiBOb3cgLTEgaWYgbm90IGluIHVzZS4KKwkoc2Rib3V0X2VuZF9mdW5jdGlvbik6IFNldCBpdCB0byAtMS4KKworCSogdHJlZS5kZWY6IFJlbmFtZSBFWElUX1NUTVQgdG8gRVhJVF9FWFBSIGFuZCBsaWtld2lzZSBmb3IgTE9PUF9TVE1ULgorCUFsc28gTEVUX1NUTVQgdG8gQklORF9FWFBSLCBhbmQgR09UT19TVE1ULCBMQUJFTF9TVE1ULCBSRVRVUk5fU1RNVAorCXRvIC4uLl9FWFBSLgorCShzdHJ1Y3QgdHJlZV9zdG10LCBzdHJ1Y3QgdHJlZV9pZl9zdG10LCBzdHJ1Y3QgdHJlZV9iaW5kX3N0bXQpOgorCShzdHJ1Y3QgdHJlZV9jYXNlX3N0bXQpOiBUeXBlcyBkZWxldGVkLgorCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSwgY29weV9ub2RlKTogVHJlYXQgJ3MnIGxpa2UgJ2UnIGZvciBzaXplIG9mIG5vZGUuCisJSW4gbWFrZV9ub2RlLCBtYWtlIEJMT0NLIGFuZCBCSU5EX0VYUFIgc2F2YWJsZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBSZW5hbWUsIGFuZCB1c2UgVFJFRV9PUEVSQU5EIHRvIGdldCBib2R5LgorCSogY3BsdXMtaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogTGlrZXdpc2UsIGFuZCBidWlsZCBhcHByb3ByaWF0ZWx5LgorCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgYW5kIElGX1NUTVQuCisJKiBzdG10LmMgKHdhcm5faWZfdW51c2VkX3ZhbHVlKTogTGlrZXdpc2UuCisKKwkqIHRyZWUuZGVmIChCTE9DSyk6IE5ldyB0cmVlIGNvZGUgZm9yIGJpbmRpbmcgYmxvY2tzLgorCSogdHJlZS5oIChCTE9DS19WQVJTLCBCTE9DS19UWVBFX1RBR1MpOgorCShCTE9DS19TVUJCTE9DS1MsIEJMT0NLX1NVUEVSQ09OVEVYVCk6IFJlbmFtZWQgZnJvbSBTVE1UXy4uLgorCShTVE1UXy4uLik6IEV4Y2VwdCBmb3IgdGhvc2UsIGFsbCBkZWxldGVkLgorCShCTE9DS19DT05UUk9MTEVSKTogUG9pbnRzIHRvIGNvcnJlc3BvbmRpbmcgQklORF9FWFBSLCBpZiBhbnkuCisJKEJMT0NLX0NIQUlOKTogTmV3IG1hY3JvLgorCSogdHJlZS5jIChidWlsZF9ibG9jayk6IFJlbmFtZWQgZnJvbSBidWlsZF9sZXQuCisJKGRlY2xfdHlwZV9jb250ZXh0LCBkZWNsX2Z1bmN0aW9uX2NvbnRleHQpOiBDb3JyZXNwb25kaW5nIGNoYW5nZS4KKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IExpa2V3aXNlLgorCSogYy1kZWNsLmMsIGNwbHVzLWRlY2wuYyAocG9wbGV2ZWwpOiBMaWtld2lzZS4KKwkqIGludGVncmF0ZS5jIChjb3B5X2RlY2xfdHJlZSk6IExpa2V3aXNlLgorCSogZnVuY3Rpb24uYyAoc2V0am1wX3Byb3RlY3QsIHVuaW5pdGlhbGl6ZWRfdmFyc193YXJuaW5nKToKKwkoaW5zdGFudGlhdGVfZGVjbHNfMSk6IExpa2V3aXNlLgorCSogYy1wYXJzZS55LCBjcGx1cy1wYXJzZS55LCBvYmpjLXBhcnNlLnkgKHN0bXQgZXhwciBydWxlKTogTGlrZXdpc2UuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2Jsb2NrKTogRXhwZWN0IG9ubHkgQkxPQ0tzIGluIHRoaXMgdHJlZS4KKwlJZ25vcmUgdGhvc2Ugd2l0aCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgbWFya2VkIHVzZWQuCisJKiBzZGJvdXQuYyAoc2Rib3V0X2Jsb2NrKTogTGlrZXdpc2UuCisJKiBzeW1vdXQuYyAoc3ltb3V0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCisKKwkqIHRyZWUuZGVmOiBEZWxldGUgSUZfU1RNVCwgQ09NUE9VTkRfU1RNVCwgV0lUSF9TVE1ULgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IERlbGV0ZSBoYW5kbGluZyBvZiBJRl9TVE1ULgorCSogdHJlZS5jIChidWlsZF9pZiwgYnVpbGRfbG9vcCwgYnVpbGRfY2FzZSwgYnVpbGRfZ290byk6IERlbGV0ZWQuCisJKGJ1aWxkX2V4cHJfc3RtdCwgYnVpbGRfYXNtX3N0bXQsIGJ1aWxkX3JldHVybiwgYnVpbGRfZXhpdCk6IExpa2V3aXNlLgorCShidWlsZF9jb21wb3VuZCk6IExpa2V3aXNlLgorCSogY3BsdXMtaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogVXNlIENPTkRfRVhQUiBpbnN0ZWFkIG9mIElGX1NUTVQuCisKK1NhdCBNYXkgMjYgMTM6MjM6MTIgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoc3RydWN0IGFyZ19kYXRhKTogQWRkIG5ldyBmaWVsZHMgc2xvdF9vZmZzZXQgYW5kIHN0YWNrX3Nsb3QuCisJKGV4cGFuZF9jYWxsKTogQ29tcHV0ZSBib3RoIGxvY2F0aW9uIG9mIHN0YXJ0IG9mIHN0YWNrIHNsb3QgYW5kCXRoZQorCXBsYWNlIGluIHRoZSBzdGFjayBzbG90IHdoZXJlIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBhcmd1bWVudCB3aWxsIGJlCisJcGxhY2VkLgorCVVzZSBzdGFja19zbG90IHdoZW4gbG9hZGluZyBhIEJMS21vZGUgb2JqZWN0IGludG8gcmVnaXN0ZXJzLgorCVdoZW4gbG9hZGluZyBpbnRvIHJlZ2lzdGVycywgZG9uJ3QgY2hlY2sgcmVnX3Bhcm1fc2VlbiwganVzdCBsb29rCisJYXQgYXJnc1tpXS5yZWcuCisJKGV4cGFuZF9jYWxsLCBzdG9yZV9vbmVfYXJnKTogU2F2ZSBhbmQgcmVzdG9yZSBzdGFjayBzbG90IHN0YXJ0aW5nCisJZnJvbSBiZWdpbm5pbmcgb2Ygc2xvdCwgbm90IGJlZ2luaW5nIGxvY2F0aW9uIHdoZXJlIGFyZyBpcyBzdG9yZWQuCisJKHN0b3JlX29uZV9hcmcpOiBBZnRlciBjYWxsaW5nIGVtaXRfcHVzaF9pbnNuLCBhcmd1bWVudCBpcyByZWFsbHkKKwlhdCBhcmctPnN0YWNrX3Nsb3QgaW5zdGVhZCBvZiBhcmctPnN0YWNrIGJlY2F1c2UgaWYgd2Ugd2FudCB0bworCWxvYWQgaXQgaW50byByZWdpc3RlcnMsIHdlIGluY2x1ZGUgYW55IHBhZGRpbmcuCisKK1NhdCBNYXkgMjYgMDE6Mzc6MjcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX3R5cGUpOiBSZW5hbWUgc2VwPT5taW52YWwsIHNlcF91bml0PT5wcmVjaXNpb24uCisKKwkqIHRyZWUuYyAoaW5pdF9vYnN0YWNrcywgaW5pdF90cmVlX2NvZGVzKTogaW5pdF90cmVlIHNwbGl0IGluIHR3by4KKwkqIHRvcGxldi5jIChjb21waWtlX2ZpbGUpOiBDYWxsIHRoZW0uCisKK0ZyaSBNYXkgMjUgMTY6NDA6NDUgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogTnVrZSBleGNlc3Mgc2V0IG9mIERFQ0xfRklFTERfQklUUE9TLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6IEJpdHBvcyBpcyB6ZXJvIGZvciBhcnJheSAoZmllbGQgPT0gMCkuCisKK0ZyaSBNYXkgMjUgMDA6NDg6NDUgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogUmVzdG9yZSBpbmFkdmVydGVudCBkZWxldGlvbiBpbiBjaGFuZ2UKKwlvZiBNYXkgMjR0aC4KKworRnJpIE1heSAyNSAwMDoxMzoxMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IFByaW50IHNvbWUgbWlzc2luZyBmaWVsZHMgZm9yIGRlY2xzLgorCShwcmludF9ub2RlX2JyaWVmKTogQWx3YXlzIHByaW50IHZhbHVlIG9mIGludGVnZXIgb3IgcmVhbCBjb25zdGFudC4KKworVGh1IE1heSAyNCAyMToyODozNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAocmVhbF96ZXJvcCk6IEZ1bmN0aW9uIGRlbGV0ZWQ7IHdhcyByZWR1bmRhbnQuCisKKwkqIHRyZWUuaCAoREVDTF9PRkZTRVQpOiBNYWNybyBkZWxldGVkLgorCShzdHJ1Y3QgdHJlZV9kZWNsKTogRmllbGQgZGVsZXRlZC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBGb3IgQUREUl9FWFBSIG9mIENPTVBPTkVOVF9SRUYsCisJdXNlIERFQ0xfRklFTERfQklUUE9TIGFuZCBoYW5kbGUgbm9uLWNvbnN0YW50IHZhbHVlcy4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQsIGxheW91dF91bmlvbik6IExpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCwgc3RvcmVfY29uc3RydWN0b3IsIGV4cGFuZF9leHByKTogTGlrZXdpc2UuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBMaWtld2lzZS4KKwkqIHNkYm91dC5jIChzZGJvdXRfb25lX3R5cGUpOiBMaWtld2lzZS4KKwkqIGMtY29tbW9uLmMgKG1lcmdlX2NvbXBvbmVudF9jb21wYXJpc29ucywgbWFrZV9tZXJnZWRfcmVmKTogTGlrZXdpc2UuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBMaWtld2lzZS4KKwkqIHZhcmFzbS5jIChkZWNvZGVfYWRkcl9jb25zdCwgb3V0cHV0X2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfaXZhcl9saXN0X2luaXRpYWxpemVyKTogTGlrZXdpc2UuCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X2FkZHIpOiBMaWtld2lzZS4KKwlBbmQgcHJlc2VydmUgVFJFRV9DT05TVEFOVCBmbGFnLgorCSh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IExpa2V3aXNlLgorCQorCSogdHJlZS5oIChERUNMX0ZVTkNUSU9OX0NPREUpOiBVc2UgdGhlIGZyYW1lX3NpemUgZmllbGQsIG5vdCBgb2Zmc2V0Jy4KKwlOb3cgbWVhbmluZ2Z1bCBvbmx5IGlmIGZ1bmN0aW9uIGlzIGJ1aWx0IGluLgorCShERUNMX0JVSUxUX0lOKTogTmV3IGZsYWcgbWFjcm8uCisJKiBjLWRlY2wuYyAoYnVpbHRpbl9mdW5jdGlvbik6IFNldCB0aGUgZmxhZy4KKwkocHVzaGRlY2wsIGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBhbmQgc2V0IGl0LgorCSogYy10eXBlY2suYywgY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBUZXN0IGl0LgorCSogY3BsdXMtZGVjbC5jIChkZWZpbmVfZnVuY3Rpb24pOiBTZXQgdGhlIGZsYWcuCisJKHB1c2hkZWNsLCBkdXBsaWNhdGVfZGVjbHMpOiBVc2UgYW5kIHNldCBpdC4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIHByZWV4cGFuZF9jYWxscyk6IFRlc3QgaXQuCisKKwkqIHRyZWUuaCAoREVDTF9JTkNPTUlOR19SVEwpOiBOZXcgbWFjcm8uCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBTZXQgdXAgdGhhdCBmaWVsZC4KKwkqIGRieG91dC5jIChkYnhvdXRfcGFybXMsIGRieG91dF9yZWdfcGFybXMpOiBEb24ndCB0cnkgdG8gdXNlCisJREVDTF9PRkZTRVQgZm9yIGEgcGFybTsgaXQgaXMgbm90IHNldC4JVXNlIERFQ0xfSU5DT01JTkdfUlRMLgorCShQQVJNX1BBU1NFRF9JTl9NRU1PUlkpOiBOZXcgbWFjcm8uCisJKiBzZGJvdXQuYyAoc2Rib3V0X3Bhcm1zLCBzZGJvdXRfcmVnX3Bhcm1zKTogTGlrZXdpc2UuCisJKFBBUk1fUEFTU0VEX0lOX01FTU9SWSk6IE5ldyBtYWNyby4KKworCSogY2NjcC5jIChtYWNhcmcpOiBXaGVuIHBvcHBpbmcgZnJhbWUsIGZyZWUgdmlhIGZyZWVfcHRyLCBub3QgYnVmLgorCitUaHUgTWF5IDI0IDE4OjA0OjA2IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKG5leHRfY2MwX3VzZXIpOiBOZXcgZnVuY3Rpb24uCisJKiByZWNvZy5jIChuZXh0X2luc25fdGVzdHNfbm9faW5lcXVhbGl0eSk6IFVzZSBuZXh0X2NjMF91c2VyLgorCSogcnRsLmg6IERlZmluZSBuZXh0X2NjMF91c2VyLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBNYWtlIGNhbm9uX3JlZyBjYWxscyBpbiBzZXBhcmF0ZSBsb29wIG92ZXIgdGhlCisJU0VUcyB0byBhdm9pZCBwcm9ibGVtcyB3aGVuIE1BVENIX0RVUHMgYXJlIHByZXNlbnQgaW4gYW4gaW5zbgorCXBhdHRlcm4uCisJRG9uJ3QgY2Fub24gQ0xPQkJFUiBpbiBQQVJBTExFTC4gIEluc3RlYWQsIGNhbm9uIE1FTSBvZiBDTE9CQkVSLAorCWJvdGggd2l0aGluIGEgUEFSQUxMRUwgYW5kIHN0YW5kYWxvbmUuCUFsc28sIGNhbGwgbm90ZV9tZW1fY2xvYmJlcmVkCisJb25seSBmb3IgTUVNLgorCitUaHUgTWF5IDI0IDEzOjA4OjI1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZ251bGliMi5jIChfX25lZ2RpMik6IE1ha2UgdGhpcyBpbmxpbmUgZm9yIG90aGVyIGZ1bmN0aW9ucy4KKworVGh1IE1heSAyNCAwNzoxNTowNCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKG5vX2xhYmVsc19iZXR3ZWVuX3AsIHByZXZfcmVhbF9pbnNuLCBuZXh0X3JlYWxfaW5zbik6CisJKHByZXZfYWN0aXZlX2luc24sIG5leHRfYWN0aXZlX2luc24sIG5leHRfbGFiZWwpOiBEZWxldGUgZnJvbSBoZXJlLgorCSogcnRsYW5hbC5jIChub19sYWJlbHNfYmV0d2Vlbl9wKTogUHV0IGhlcmUuCisJKiBlbWl0LXJ0bC5jIChwcmV2X3JlYWxfaW5zbiwgbmV4dF9yZWFsX2luc24sIHByZXZfYWN0aXZlX2luc24pOgorCShuZXh0X2FjdGl2ZV9pbnNuLCBuZXh0X2xhYmVsKTogQWRkIHRvIGhlcmUuCisKKwkqIGMtY29tbW9uLmM6IERlZmluZSBOVUxMIHNvIE5VTExfVFJFRSBtYWNybyB3aWxsIHdvcmsuCisKKwkqIGNwbHVzLXR5cGVjay5jIChjb21tb25fcGFybXMpOiBVc2Ugb2JhbGxvYyBhbmQgb2JmcmVlIHRvCisJYXZvaWQgZXh0ZXJuYWwgY3VycmVudF9vYnN0YWNrLgorCisJKiBjc2UuYyAoZm9sZF9jYzAsIGNzZV9pbnNuKTogVXNlIEhBU0ggbWFjcm8gaW5zdGVhZCBvZiBjYWxsIHRvCisJY2Fub25faGFzaC4KKwkoY3NlX2luc24pOiBXaGVuIGp1c3QgcmVjb3JkaW5nIGp1bXAgaW5zbiwgc2hvdyBpdCBkb2Vzbid0IHNldCBDQzAKKwlhbmQgc2V0IGl0IGFzIHByZXZpb3VzIGluc24uCisKKwkqIGdlbm91dHB1dC5jIChnZW5fc3BsaXQpOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisJKiByZW9yZy5jOiBObyBsb25nZXIgbmVlZCBkZWZpbmUgbmV4dF9sYWJlbCBhbmQgbmV4dF9yZWFsX2luc24gYXMKKwlleHRlcm4uCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogVXNlIERFTEFZX1NMT1RTIGluc3RlYWQgb2YKKwlvYnNvbGV0ZSBIQVZFX0RFTEFZRURfQlJBTkNIOyBpbmNsdWRlIGluc24tYXR0ci5oLgorCisJKiBmaW5hbC5jIChkYnJfc2VxdWVuY2VfbGVuZ3RoKTogTm93IHByZXNlbnQgI2lmZGVmIERFTEFZRURfQlJBTkNIRVMuCisJRWxpbWluYXRlIHJlZmVyZW5jZXMgdG8gb2Jzb2xldGUgREJSX0lOU05fU0xPVFMuCisJKGdldF9hdHRyX2xlbmd0aCk6IFN1cHBvcnQgQURKVVNUX0lOU05fTEVOR1RILgorCShnZXRfYXR0cl9sZW5ndGgsIHNob3J0ZW5fYnJhbmNoZXMpOiBIYW5kbGUgYSBTRVFVRU5DRSBidWlsdCBmb3IgYW4KKwlpbnNuIHdpdGggZmlsbGVkIGRlbGF5IHNsb3RzLgorCShmaW5hbF9zY2FuX2luc24pOiBBdm9pZCB1bm5lY2Vzc2FyeSBjYWxsIHRvIHJlY29nX21lbW9pemVkLgorCVVzZSB2YWxpZGF0ZV9jaGFuZ2UgaW5zdGVhZCBvZiBhc3N1bWluZyByZXBsYWNlbWVudCBvZiBDQzAgYnkKKwlTVE9SRV9GTEFHX1ZBTFVFIG9yIGNvbnN0MF9ydHggaXMgdmFsaWQuCisKK1dlZCBNYXkgMjMgMTY6MzI6MzIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXQtbTY4ay5jLCBvdXQtYWxsaWFudC5jIChvdXRwdXRfYnRzdCk6CisJVXNlIG5leHRfaW5zbl90ZXN0c19ub19pbmVxdWFsaXR5LCBub3QgbmV4dF9pbnNuc190ZXN0Xy4uLgorCSogcmVjb2cuYyAobmV4dF9pbnNuc190ZXN0X25vX2luZXF1YWxpdHkpOiBGdW5jdGlvbiBkZWxldGVkLgorCitXZWQgTWF5IDIzIDEzOjI2OjU3IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBEb24ndCBib3RoZXIgbWFraW5nIGEgU1VCUkVHIHdoZW4gd2UKKwljYWxsIG91cnNlbGYgcmVjdXJzaXZlbHk7IHRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIGp1c3Qgc3RyaXAgaXQgb2ZmLgorCisJKiByZW9yZy5jOiBJbmNsdWRlIGluc24tYXR0ci5oIGJlZm9yZSB0ZXN0aW5nIERFTEFZX1NMT1RTLgorCShlbWl0X2RlbGF5X3NlcXVlbmNlKTogQXNzaWduIG5ldyBJTlNOX1VJRCB0byB0aGUgU0VRVUVOQ0UuCisJQ2hhaW4gaW5zbnMgdGhyb3VnaCB0aGUgc2VxdWVuY2UgdmlhIE5FWFRfSU5TTiBhbmQgUFJFVl9JTlNOLgorCSogZW1pdC1ydGwuYyAobmV4dF9pbnNuLCBwcmV2X2luc24pOiBHbyBpbnNpZGUgYSBTRVFVRU5DRSB0bworCWZpbmQgdGhlIG5leHQgb3IgcHJldmlvdXMgaW5zbi4KKwkobWFrZV9pbnNuX3Jhdyk6IE5vIGxvbmdlciBzdGF0aWMuCisJKiBydGwuaDogRGVmaW5lIG1ha2VfaW5zbl9yYXcsIHByZXZfYWN0aXZlX2luc24sIG5leHRfYWN0aXZlX2luc24sCisJbmV4dF9pbnNuLCBhbmQgcHJldmlvdXNfaW5zbi4KKworCSogZ2VuYXR0cnRhYi5jICh3cml0ZV9lbGlnaWJsZV9kZWxheSk6IEFsd2F5cyB1c2UgIipkZWxheV90eXBlIjsKKwlhbm51bGluZyBvbmx5IGFwcGxpZXMgdG8gY2FuZGlkYXRlIGluc24sIG5vdCBpbnNuIG5lZWRpbmcgc2xvdC4KKworCSogdHJlZS5jIChpbml0X3RyZWUpOiB0cmVlX25vZGVfY291bnRlciBkb2Vzbid0IGV4aXN0IGFueSBtb3JlLgorCShtYWtlX25vZGUsIGNvcHlfbm9kZSwgbWFrZV90cmVlX3ZlYywgYnVpbGQxKTogTm8gbG9uZ2VyIHNldCBUUkVFX1VJRC4KKworV2VkIE1heSAyMyAwMDo0ODo1NyAxOTkwICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGdlbmVtaXQuYywgZ2VuZXh0cmFjdC5jOiBBZGQgc3VwcG9ydCBmb3IgTUFUQ0hfT1BfRFVQIGFuZAorCURFRklORV9TUExJVC4KKworCSogY3BsdXMtaW5pdC5jIChidWlsZF9kZWxldGUpOiBUUkVFX1NJREVfRUZGRUNUUyBjYW4gYmUKKwlub256ZXJvIHdoZW4gYWRkcmVzcyB0byBiZSBkZWxldGVkIGlzIGEgY2FzdCBvZiBzb21ldGhpbmcKKwl3aXRoIHNpZGUtZWZmZWN0cyAobGlrZSBhIGNhbGwpLgorCShidWlsZF92ZWNfZGVsZXRlKTogU2ltcGxpZnkgY29kZSBub3cgdGhhdCBgbWFrZV9ub2RlJyBkb2VzIHRoZQorCXJpZ2h0IHRoaW5nIGZvciBfU1RNVCBub2Rlcy4KKworVHVlIE1heSAyMiAyMjo1OTo0MyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2VuZF9iYXNpY19ibG9jayk6IERvbid0IGNyYXNoIGlmIE5FWFRfSU5TTiBvZgorCW91ciBicmFuY2ggdGFyZ2V0IGlzIHplcm8uCisJRG9uJ3Qgc2tpcCBzY2FubmluZyBmaXJzdCBpbnNuIGFmdGVyIGRlc3RpbmF0aW9uIGxhYmVsIG9mIGJyYW5jaC4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IEFib3J0IGlmIG1vZGVzIGRpZmZlci4KKwkoZXhwYW5kX2V4cHIsIGNvbXBhcmlzb24gY2FzZXMpOiBVc2UgVE1PREUgd2hlbiBjb252ZW5pZW50LgorCShleHBhbmRfZXhwciwgY2FzZSBDT05EKTogV2hlbiBvcHRpbWl6aW5nIChDID8gMSA6IDApLCBlbnN1cmUKKwl3ZSByZXR1cm4gYSByZXN1bHQgb2YgdGhlIGNvcnJlY3QgbW9kZS4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYW4ndCBjYWxsIHRyeV9jb25zdGFudHMgZm9yCisJSlVNUF9JTlNOIHNpbmNlIHdlIG1heSBoYXZlIGNoYW5nZWQgUkVUVVJOIHRvIGp1bXAuCisKK1R1ZSBNYXkgMjIgMjI6NDA6MjIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2NvbW1vbik6IERlbGV0ZSBmaWVsZCBgdWlkJy4KKwkoVFJFRV9VSUQpOiBNYWNybyBkZWxldGVkLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEaXNjYXJkIGFueSB2YXJpYWJsZSBzaXplcyBpbiB0aGUgZGVjbC4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBXaGVuIG1ha2luZyByZWdfbm90ZXMgZm9yIGNvbnN0IGZ1bmN0aW9uLAorCWRvbid0IHRlc3QgaXNfY29uc3QgdHdpY2UsIGFuZCB0YWtlIGFjY291bnQgb2Ygb3JkZXIgb2YgcHVzaGluZy4KKworVHVlIE1heSAyMiAyMTo0MTo0OCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRW5zdXJlIHdlIHByb2Nlc3MgcHNldWRvIHRoYXQgaXMgZmlyc3QKKwlvcGVyYW5kIG9mIFBMVVMuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBXaGVuIHN0cmlwcGluZyBhIFNVQlJFRywgYWRqdXN0IHRoZQorCWJpdCBwb3NpdGlvbiB0byBjb3JyZXNwb25kIHRvIHRoZSBjaGFuZ2UgaW4gbW9kZXMuCisKKwkqIGNzZS5jIChydHhfY29zdCk6IFVzZSBDT1NUU19OX0lOU05TIG1hY3JvLgorCisJKiBjc2UuYyAocXR5X2NvbXBhcmlzb25fKik6IE5ldyB2YXJzLgorCShuZXdfYmFzaWNfYmxvY2spOiBJbml0aWFsaXplIHF0eV9jb21wYXJpc29uX2NvZGUuCisJKGZvbGRfcnR4KTogSWYgd2Ugc2VlIGEgY29tcGFyaXNvbiwgY2hlY2sgaWYgd2UgaGF2ZSBzZWVuIHRoZQorCXNhbWUgY29tcGFyaXNvbiBiZWZvcmUuCSBJZiBzbywgd2Uga25vdyB0aGUgcmVzdWx0LgorCShyZWNvcmRfanVtcF9lcXVpdik6IFNhdmUgdGhlIGNvbXBhcmlzb24gYmVpbmcgcGFzc2VkIGluIHRoZQorCXF0eV9jb21wYXJpc29uXyogdmFyaWFibGVzIGZvciBwb3NzaWJsZSBsYXRlciB1c2UgYnkgZm9sZF9ydHguCisJKGNzZV9pbnNuKTogSWYgdGhlIGN1cnJlbnQgaW5zbiBkb2Vzbid0IHJlZmVyZW5jZSBjYzAsIGJ1dCB0aGUKKwlwcmV2aW91cyBpbnNuIHNldHMgaXQsIGRlbGV0ZSB0aGUgcHJldmlvdXMgaW5zbjsgcHJlc3VtYWJseSB3ZQorCXVzZWQgdG8gdGVzdCBpdC4KKwkoY3NlX2Jhc2ljX2Jsb2NrKTogQWxsb2NhdGUgbmV3IHF0eV9jb21wYXJpc29uXyogdmFycy4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IFNlY29uZCBhcmcgaXMgbm93IG1vZGUgb2YgZW5jbG9zaW5nCisJTUVNLCBpZiBhbnksIHJhdGhlciB0aGFuIHNpbXBseSBmbGFnIGluZGljYXRpbmcgaW5zaWRlIE1FTS4KKwlVc2UgdGhpcyBtb2RlIHRvIGRldGVybWluZSBhbW91bnQgdGhhdCwgZS5nLiwgUFJFX0RFQyBhZGp1c3RzIGJ5LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNldCByZWdzX2V2ZXJfbGl2ZSBmb3IgYSByZWdpc3RlciB0aGF0IGNvdWxkbid0CisJYmUgZWxpbWluYXRlZC4KKwkqIGZpbmFsLmMgKG9ubHlfbGVhZl9yZWdzX3VzZWQpOiBEb24ndCBkbyBpdCBoZXJlLgorCisJKiByZW9yZy5jOiBFbGltaW5hdGUgb2Jzb2xldGUgbWFjcm9zICpfUkVPUkdfRlVOQ1RJT04uCisJRW50aXJlIGZpbGUgaXMgY29uZGl0aW9uYWwgb24gI2lmZGVmIERFTEFZX1NMT1RTLgorCisJKiBNYWtlZmlsZS5pbjogVXNlIHJlb3JnLmMgaW5zdGVhZCBvZiBkYnJhbmNoLmMuCisKK1R1ZSBNYXkgMjIgMjA6NDA6MzAgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IEdldCBzdHJpbmcgZWx0IHNpemUgaW4gYnl0ZXMuCisKK1R1ZSBNYXkgMjIgMDA6NDI6MDcgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBUdXJuIG9mZiBWRVJCT1NFIGFyZyB0byB0aHJlYWRfanVtcHMuCisKKwkqIG9iamMtcGFyc2UueSwgb2JqYy1hY3Rpb25zLmM6IFJlcGxhY2VzIHVzZXMgb2YgYnVpbGQgd2l0aCBidWlsZDEKKwl3aGVuIGJlaW5nIHVzZWQgZm9yIDEtb3BlcmFuZCBub2Rlcy4KKworTW9uIE1heSAyMSAyMzo1OToyMSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnbG9iYWwtYWxsb2MuYyAoaGFyZF9yZWdfZnVsbF9wcmVmZXJlbmNlcyk6IE5ldyB2YXJpYWJsZS4KKwkoZ2xvYmFsX2FsbG9jKTogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaXQuCisJKHBydW5lX3ByZWZlcmVuY2VzKTogSW5jbHVkZSBpbiByZWdzX3NvbWVvbmVfcHJlZmVycyBhbGwgd29yZHMKKwlvZiBtdWx0aS13b3JkIGl0ZW1zIHRoYXQgaGF2ZSBwcmVmZXJlbmNlcy4gIERvbid0IGluY2x1ZGVzIHJlZ2lzdGVycworCXdlIGFsc28gcHJlZmVyIHVubGVzcyB0aGV5IGFyZSBwcmVmZXJlZCBieSBhbiBhbGxvY25vIHRoYXQgbmVlZHMKKwltb3JlIHJlZ2lzdGVycy4KKwkoc2V0X3ByZWZlcmVuY2UpOiBTZXQgaGFyZF9yZWdfZnVsbF9wcmVmZXJlbmNlcyBhbHNvLgorCitNb24gTWF5IDIxIDIxOjM2OjI5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChtYWtlX25vZGUpOiBBbGwgLi4uX1NUTVQgbm9kZXMgaGF2ZSBzaWRlIGVmZmVjdHMsIHR5cGUgdm9pZC4KKworTW9uIE1heSAyMSAxNjowMzoyMyAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFNldCBpbnNuc19hdF9zdGFydCBiZWZvcmUKKwlwcm9jZXNzaW5nIHBhcmFtZXRlcnMgc2luY2UgaXQgbWlnaHQgYmUgbmVlZGVkIGR1cmluZyB0aGF0IHByb2Nlc3NpbmcuIAorCVNldCBSVFhfSU5URUdSQVRFRF9QIGluIGFsbCBpbnNucyBlbWl0dGVkLCBpbmNsdWRpbmcgbGFiZWxzIGFuZAorCWJhcnJpZXJzLgorCUVuc3VyZSBDT1BZIGlzIHNldCBjb3JyZWN0bHkgd2hlbiByZXBsYWNpbmcgUkVUVVJOIGFuZCBhdm9pZAorCWR1cGxpY2F0ZSBiYXJyaWVycyBieSBjYWxsaW5nIGVtaXRfanVtcF9pbnNuIGluc3RlYWQgb2YgZW1pdF9qdW1wLgorCUNhbGwgbm90ZV9zdG9yZXMgZm9yIEpVTVBfSU5TTnMgYW5kIENBTExfSU5TTnMgaW4gY2FzZSB0aGV5IGhhdmUKKwlzaWRlLWVmZmVjdHMgd2UgY2FyZSBhYm91dC4KKwkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBDb252ZXJ0ICh1c2UgKHN1YnJlZyBGT08pKSB0byAodXNlIEZPTykuCisJKHN1YnN0X2NvbnN0YW50cyk6IERvbid0IGNyYXNoIGlmIHdlIHNlZSBhIFNVQlJFRyByZXBsYWNlZCBieSBhCisJUkVHIG9yIHZpY2UgdmVyc2E7IHdlIGhhdmUgbm8gd29yayB0byBkbyBpbiB0aGF0IGNhc2UuCisJRml4IHR5cG8gaW4gY2FzZSBNVUxULgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBDYWxsIHJlZ19maXRzX2NsYXNzX3Agd2l0aCBvcmlnaW5hbAorCW1vZGUgb2YgT1AsIG5vdCBtb2RlIG9mIFNVQlJFR19SRUcgKG9wKSB3aGVuIE9QIGlzIFNVQlJFRy4KKworTW9uIE1heSAyMSAxNDoyNToxNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IFVzZSBjbGFzcyBvZiBUTU9ERSBmb3Igc2ltcGxlIHJlZyBjYXNlLgorCisJKiBmbGFncy5oIChmbGFnX3BpYyk6IERlY2xhcmUgaXQuCisJKiB0cmVlLmggKG1vZGVfZm9yX3NpemUpOiBEZWNsYXJlIGl0LgorCSogYy10cmVlLmggKG1lcmdlX2NvbXBvbmVudF9jb21wYXJpc29ucyk6IERlY2xhcmUgaXQuCisKK01vbiBNYXkgMjEgMDc6Mjc6MTIgMTk5MCAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBqdW1wLmMgKHRocmVhZF9qdW1wcyk6IE5ldyBmdW5jdGlvbiB0byBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSBvbmUKKwljb25kaXRpb25hbCBqdW1wIGp1bXBzIHRvIGFub3RoZXIgdGVzdGluZyB0aGUgc2FtZSBjb25kaXRpb24uICBUaGlzCisJZnVuY3Rpb24gdXNlZnVsbHkgb3B0aW16aWVzIGNvZGUgYm90aCBiZWZvcmUgY29tbW9uIHN1YmV4cHJlc3Npb24KKwllbGltaW5hdGlvbiAod2hlcmUgaXQgImZpbmRzIiBjb21tb24gc3ViZXhwcmVzc2lvbnMgdGhhdCBjc2Ugd29uJ3QKKwlmaW5kKSBhbmQgYWZ0ZXIgbG9vcCBvcHRpbWl6YXRpb24gKHdoZXJlIHRoZSBsb29wIG9wdGltaXplcgorCWludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIGp1bXBzIGFmdGVyIHJlYXJyYW5naW5nIGxvb3BzKS4KKwkocnR4X2VxdWFsX2Zvcl90aHJlYWRfcCk6IGNoZWFwbHkgYnVpbGRzIGVxdWl2YWxlbmNlcyBiZXR3ZWVuCisJcmVnaXN0ZXIgc28gdGhhdCBqdW1wIHRocmVhZGluZyBjYW4gYmUgZWZmZWN0aXZlbHkgcnVuIGJlZm9yZSBjc2UuCisKKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogSW5pdGlhbGl6ZSBQSUNfT0ZGU0VUX1RBQkxFX1JUWCBpZgorCVBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGlzIGRlZmluZWQuCisKKwkqIHRyZWUuYyAoYnVpbGQsYnVpbGQxLGJ1aWxkX250KTogU2V0IFRSRUVfUkFJU0VTIGluIGFkZGl0aW9uIHRvCisJVFJFRV9TSURFX0VGRkVDVFMuCisJKHt0ZW1wLHNhdmVhYmxlLHBlcm19X3RyZWVfY29ucyk6IENhbGwgYHRyZWVfY29ucycgd2l0aCBhcmd1bWVudHMKKwlpbnN0ZWFkIG9mIGNhbGxpbmcgYG1ha2Vfbm9kZScgZGlyZWN0bHkuICBFdmVudHVhbGx5LCBgdHJlZV9jb25zJworCWNvdWxkIGJlIGZhc3RlciB0aGFuIGBtYWtlX25vZGUnLgorCShnZXRfaWRlbnRpZmllcik6IFVzZSBgYmNtcCcgaW5zdGVhZCBvZiBgc3RyY21wJywgc2luY2UgaXQncworCWZhc3Rlci4JIEFsc28sIHRlc3QgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHN0cmluZyBiZWZvcmUgY2FsbGluZworCXRoZSBzdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbi4KKworCSogdG9wbGV2LmM6IEFkZCBuZXcgZmxhZ3MgRkxBR19USFJFQURfSlVNUFMgYW5kIEZMQUdfUElDLiAgVGhlCisJZm9ybWVyIGdpdmVzIGJldHRlciBjb21tb24gc3ViLWV4cHJlc3Npb24gZWxpbWluYXRpb24gd2hpbGUgdGhlCisJbGF0dGVyIHRlbGxzIHRoZSBjb21waWxlciB0byBlbWl0IHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUuCisJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBUaHJlYWQganVtcHMgaWYgcmVxdWVzdGVkLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfe3JlY29yZCx1bmlvbn0pOiBGb3IgbG9vcCBib2RpZXMgbWVhbnQgb25seQorCWZvciBGSUVMRF9ERUNMcywgbWFrZSBzdXJlIHdlIGhhdmUgYSBGSUVMRF9ERUNMIGJlZm9yZSBwcm9jZWVkaW5nLgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IFVzZSBBRERSX0RJRkZfVkVDIGlmIEZMQUdfUElDIGlzCisJbm9uemVyby4KKwlAQCBOT1RFOiBUaGlzIHdvdWxkIGxvb2sgYSBsb3QgbmljZXIgaWYgQ0FTRV9WRUNUT1JfUENfUkVMQVRJVkUgd2VyZQorCWFuIGV4cHJlc3Npb24gKGxpa2UgemVyby9ub256ZXJvKSBpbnN0ZWFkIG9mIHNvbGV5IGEgI2RlZmluZS4KKwkoZml4dXBfY2xlYW51cHMpOiBJZiBjbGVhbnVwcyBlbWl0dGVkIG5vIGNvZGUsIGRvbid0IGNhbGwKKwlgcmVvcmRlcl9pbnNucycuCisJKGV4cGFuZF9kZWNsX2NsZWFudXApOiBSZXR1cm4gMCBpbiBjYXNlIHdlIGFyZSBub3QgaW4gYSBibG9jaworCShidXQgaW5zdGVhZCBhdCB0b3AtbGV2ZWwpLgorCisJKiBzdGFjay5oOiBOZXcgR05VIEMrKyBmaWxlLgorCisJKiBydGwuYyAoUkVHX05PVEVfTkFNRVMpOiBBZGQgUkVHX0NDX1NUQVRVUyBhbmQgUkVHX1RBSUxfQ0FMTC4KKwkqIHJ0bC5oOiBEaXR0by4JIEFsc28gbWFrZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBvZgorCXBpY19vZmZzZXRfdGFibGVfcnR4LgorCSogcnRsLmRlZjogQWRkIHRoZSBmb2xsb3dpbmcgbmV3IFJUTCBjb2RlczogREVGSU5FX1NQTElULAorCU1BVENIX09QX0RVUCwgTE9fU1VNIGFuZCBISUdILgorCisJKiByZW9yZy5jOiBOZXcgZmlsZS4gIFBlcmZvcm1zIGluc3RydWN0aW9uIHJlb3JnYW5pemF0aW9ucworCShwcmltYXJpbHkgYnJhbmNoIHNjaGVkdWxpbmcpIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uCisKKwkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogSWYgZGVmaW5lZCwgZXhlY3V0ZQorCU9SREVSX1JFR1NfRk9SX0xPQ0FMX0FMTE9DLgorCisJKiBnZW5yZWNvZy5jIChzdHJ1Y3QgZGVjaXNpb24pOiBFeHRlbmRlZCB0byBoYW5kbGUgREVGSU5FX1NQTElUcy4KKwkod3JpdGVfdHJlZSk6IFNwbGl0IGludG8gdGhyZWUgc3Vicm91dGluZXM6IGB3cml0ZV90cmVlXzEnIHdoaWNoCisJZG9lcyB0aGUgbWFpbiB3b3JrLCBgd3JpdGVfdHJlZScgd2hpY2ggZG9lcyB0aGUgb3JpZ2luYWwgam9iLCBhbmQKKwlgd3JpdGVfc3BsaXRfdHJlZScgd2hpY2ggYnVpbGRzIHRoZSByZWNvZ25pemVyIGZvciBpbnNuIHNwbGl0dGluZy4KKwkoYWRkX3RvX3NlcXVlbmNlKTogSGFuZGxlIE1BVENIX09QX0RVUC4KKwkobWFpbik6IEJ1aS5CdWlsZCBib3RoIGluc24tPmluc25fY29kZSBhbmQgaW5zbi0+aW5zbl9saXN0CisJcmVjb2duaXplcnMuCisJQWxzbywgZml4ZWQgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLgorCSogZ2VucGVlcC5jIChtYWluKTogSGFuZGxlIERFRklORV9TUExJVC4KKwkobWF0Y2hfcnR4KTogSGFuZGxlIE1BVENIX09QX0RVUC4KKwkqIGdlbm91dHB1dC5jIChtYWluKTogSGFuZGxlIERFRklORV9TUExJVC4KKwkqIGdlbmNvbmZpZy5jIChtYWluKTogSGFuZGxlIERFRklORV9TUExJVCBhbmQgTUFUQ0hfT1BfRFVQLgorCSogZ2VuYXR0cnRhYi5jIChtYWluKTogSGFuZGxlIERFRklORV9TUExJVC4KKworCSogZm9sZC1jb25zdC5jICh2YXJpb3VzIHBsYWNlcyk6IFVzZSBgYnVpbGQxJyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mCisJYGJ1aWxkJyBjb25zdHJ1Y3RvciB3aGVuZXZlciBwb3NzaWJsZS4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogSWYgd2Uga25vdyB0aGUgc3RhdHVzIG9mIHRoZSBjb25kaXRpb24KKwljb2RlcyBhdCBhIHBhcnRpY3VsYXIgSlVNUF9JTlNOIChieSBkaW50IG9mIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEKKwlSRUdfQ0NfU1RBVFVTIG5vdGUpLCBzZXQgQ0NfU1RBVFVTIHRvIHJlZmxlY3QgdGhhdCB2YWx1ZS4KKwkob25seV9sZWFmX3JlZ3NfdXNlZCk6IEBAIEZvciBzb21lIHJlYXNvbiB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3RlcgorCWlzIG5vdCBtYXJrZWQgbGl2ZSwgZXZlbiB3aGVuIGl0IGlzLiAgSWYgRlJBTUVfUE9JTlRFUl9ORUVERUQgaXMKKwlub256ZXJvLCBzZXQgUkVHU19FVkVSX0xJVkVbRlJBTUVfUE9JTlRFUl9SRUdOVU1dIHRvIDEuCisKKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBSb3VuZCBBUkdTX1NJWkUuQ09OU1RBTlQgdXAsIG5vdCBkb3duLgorCVVzZSBuZXcgbWFjcm8gTUFYIHRvIGFjY29tcGxpc2ggdGhpcy4KKwkoc2FmZV9mcm9tX3ApOiBEb24ndCBjaGVjayB0aGF0IEVYUCBpcyBub256ZXJvLgkgSW5zdGVhZCwgbWFrZQorCWNhbGxlciBjaGVjayAob25seSBpbiBvbmUgcGxhY2UpIHRoYXQgYXJndW1lbnQgdG8gYHNhZmVfZnJvbV9wJyBpcworCW5vbi16ZXJvLgorCShleHBhbmRfZXhwcik6IEluIENPTkRfRVhQUiBjYXNlLCBtYWtlIHN1cmUgdGhhdCB0aGUgcHJlZGljYXRlIGlzCisJc2FmZSBmcm9tIHRoZSB0d28gY29uZGl0aW9ucy4gIExvc3NhZ2Ugb2NjdXJlZCBpbiBhIGNvbnN0cnVjdCBvZiB0aGUKKwlmb3JtIChjID0gYyA8IDAgPyBkIDogLWQpLgorCisJKiBleHBsb3cuYyAocGx1c19jb25zdGFudCk6IEhhbmRsZSBMT19TVU0gcnRsLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogSWYgb3B0aW1pemluZywgdHJ5IG1lcmdpbmcKKwljb21wb25lbnQgcmVmcyBhbmQvb3IgY29tcGFyaXNvbnMgaW50byBsYXJnZXIgb3BlcmF0aW9ucy4KKworCSogYy1jb21tb24uYyAocmV3cml0ZV9mb3JfbWVyZ2VkX3JlZik6IE5ldyBmdW5jdGlvbi4gIENhbm9uaWNhbGxpemVzCisJZXhwcmVzc2lvbnMgdG8gYmUgcmVjb2duaXphYmxlIGFzIGNhbmRpZGF0ZXMgZm9yIG1lcmdlZAorCUNPTVBPTkVOVF9SRUYgb3BlcmF0aW9ucy4KKwkobWFrZV9tZXJnZWRfcmVmKTogQnVpbGRzIGN1c3RvbSBGSUVMRF9ERUNMcyBmb3IgYWNjZXNzaW5nIG11bHRpcGxlCisJYml0cyBpbiBhIGJ5dGUgc2ltdWx0YW5lb3VzbHkuCisJKG1lcmdlX2NvbXBvbmVudF9jb21wYXJpc29ucyk6IE9wdGltaXplIENPTVBPTkVOVF9SRUZzIGluCisJZXhwcmVzc2lvbnMgdGhhdCBsb29rIGxpa2UgKHgucCA9PSB5LnAgJiYgeC5xID09IHkucSkgb3IKKwkoeC5wICE9IHkucCB8fCB4LnEgIT0geS5xKS4gIEFsc28gb3B0aW1pemUgKHgucCA9PSBjMSAmJiB4LnEgPT0gYzIpLAorCXdoZXJlIEMxIGFuZCBDMiBhcmUga25vd24gY29uc3RhbnRzLgorCisJKiBjLWxhbmcuYyAocHJpbnRfbGFuZ19zdGF0aXN0aWNzKTogQWRkZWQgbmV3IGhvb2sgZnVuY3Rpb24uCisJQ3VycmVudGx5IGRvZXMgbm90aGluZyBmb3IgQy4KKworCSogYy1jb252ZXJ0LmM6IFVzZSBgYnVpbGQxJyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGBidWlsZCcKKwljb25zdHJ1Y3RvciB3aGVuZXZlciBwb3NzaWJsZS4KKworCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBDYWxsIHRoaXMgZnVuY3Rpb24gZm9yCisJYmV0dGVyIGFwcGxpY2FiaWxpdHkgb2YgdGhlIG1lcmdlZCBjb21wb25lbnQgcmVmIG9wdGltaXphdGlvbi4gCisJQWxzbywgYWRkIG1vcmUgcmVjb2duaXplZCBjYXNlcy4KKworCSogY3BsdXMtdHlwZTIuYyAobWVyZ2VfY29tcG9uZW50X2NvbXBhcmlzb25zKTogQ29kZSBpbXByb3ZlZCwgYW5kCisJbW92ZWQgdG8gYy1jb21tb24uYy4KKworCSogY3BsdXMtcGFyc2UueSAob3BlcmF0b3JfbmFtZSk6IFJlY29nbml6ZSBgb3BlcmF0b3IsJy4KKwkoZXhwcik6IE9uIHBhcnNpbmcgJywnLCBjYWxsIGBidWlsZF94X2NvbXBvdW5kX2V4cHInIGluc3RlYWQgb2YKKwlgYnVpbGRfY29tcG91bmRfZXhwcicuCisJKHZhcmlvdXMgcGxhY2VzKTogQ2FsbCBgbm90ZV9kZWNsX2xpc3RfZ290X3NlbWljb2xvbicgaW5zdGVhZCBvZgorCWBub3RlX2RlY2xfZ290X3NlbWljb2xvbicgd2hlcmUgb2JqZWN0IGluIHF1ZXN0aW9uIGlzIGEgbGlzdCBpbnN0ZWFkCisJb2YgYSB0eXBlLgorCShjb21wb25lbnRfZGVjbGFyYXRvcjApOiBTZXQgQ1VSUkVOVF9ERUNMU1BFQ1MgZnJvbSB0aGUgYml0ZmllbGQKKwl0eXBlLgorCisJKiBjcGx1cy1tZXRob2QuYyAoaGFja193cmFwcGVyKTogUmVuYW1lIHBhcmFtZXRlciBUWVBFIHRvIENOQU1FLAorCXNpbmNlIGl0IGlzIGEgdHlwZSBuYW1lIHdlIHBhc3MgaW4sIG5vdCBhIHR5cGUuCisKKwkqIGNwbHVzLWxleC5jIChvcG5hbWVfdGFiKTogQWRkIGBvcGVyYXRvciwnLgorCShub3RlX2RlY2xfbGlzdF9nb3Rfc2VtaWNvbG9uKTogTWFrZSBub3RhdGlvbiB0aGF0IGEgbGlzdCBvZgorCWRlY2xhcmF0aW9ucyBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBoYXZpbmcgImdvdHRlbiBhIHNlbWljb2xvbiIuCisJKGV4dHJhY3RfaW50ZXJmYWNlX2luZm8saW50ZXJmYWNlX3N0cmNtcCk6IENvbW1lbnRlZC4KKworCSogY3BsdXMtaW5pdC5jIChidWlsZF9kZWxldGUpOiBSZXN0IG9mIGNoYW5nZXMgdG8gcmVpbXBsZW1lbnQgbmV3CisJZGVzdHJ1Y3RvciBtZWNoYW5pc20uCisJKGJ1aWxkX3ZiYXNlX2RlbGV0ZSk6IEZpeCBidWcgd2hlcmVieSBhcnJheXMgb2YgbGVuZ3RoIDAgYW5kIDEgd2VyZQorCW5vdCBiZWluZyBjb3JyZWN0bHkgaGFuZGxlZC4gIEFsc28sIHdoZXJlIGVsc2VtZW50cyB3ZXJlIG5vdCBiZWluZworCWRlbGV0ZWQuICBVc2UgbmV3IGRlc3Ryb3VjdCBjYWxsaW5nIGNvbnZlbnRpb24uCisJKHZhcmlvdXMgcGxhY2VzKTogQ2hhbmdlIFRZUEVfSEFTX0NPTlNUUlVDVE9SIHRvCisJVFJFRV9IQVNfQ09OU1RSVUNUT1Igd2hlcmUgYXBwcm9wcmlhdGUuCisKKwkqIGNwbHVzLWV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBVc2UgYGVtaXRfYmxvY2tfbW92ZScgdG8gY29weQorCWRhdGEgZnJvbSBSRVRVUk5fVEFSR0VUIHRvIENBTExfVEFSR0VUIGluIGNhc2UgdGhleSBkbyBub3QgbGluZSB1cAorCW5vcm1hbGx5LgorCisJKiBjcGx1cy1kZWNsMi5jIChmaW5pc2hfZmlsZSk6IE5vIG5lZWQgdG8gY2FsbCBgYnVpbGRfdmJhc2VfZGVsZXRlJworCW9uIHRvcC1sZXZlbCBvYmplY3RzIGFueW1vcmUsIHNpbmNlIGRlc3RydWN0b3JzIG5vdyBkbyB0aGUgcmlnaHQKKwl0aGluZy4KKworCSogY3BsdXMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBJbXBsZW1lbnQgbmV3IGRlc3RydWN0b3IKKwltZWNoYW5pc206IGRlc3Ryb3kgdmlydHVhbCBiYXNlY2xhc3Mgb2JqZWN0cyBpZiAoaW4kY2hhcmdlICYgMikgaXMKKwlub256ZXJvLiAgRGVhbGxvY2F0ZSBpZiAoaW4kY2hhcmdlICYgMSkgaXMgbm9uemVyby4KKworCSogY3BsdXMtY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFVzZSBUUkVFX0hBU19DT05TVFJVQ1RPUiwgbm90CisJVFlQRV9IQVNfQ09OU1RSVUNUT1Igb24gbm9uLVRZUEUgdHJlZSBub2Rlcy4KKwkoYnVpbGRfdXBfcmVmZXJlbmNlKTogT25seSBidWlsZCB1cCByZWZlcmVuY2VzIGJldHdlZW4gY29tcGF0aWJsZQorCXR5cGVzLglJLmUuLCBkb24ndCBidWlsZCBhIGNoYXImIHRvIGFuIGludCBvYmplY3QuCisJKGNvbnZlcnRfdG9fYWdncik6IFNldCB0aGUgVFJFRV9TSURFX0VGRkVDVFMgYml0IGlmIHRoZSByZXN1bHQgaXMgYQorCUNBTExfRVhQUi4KKworCSogY3BsdXMtY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IFJlY292ZXIgZnJvbSBiYWQgcGFyc2UgZXJyb3JzLgorCShidWlsZF9tZXRob2RfY2FsbCk6IEltcGxlbWVudCBuZXcgY3Rvci9kdG9yIHNlbWFudGljcyB0byBhbGxvdworCWRpZmZlcmVudGlhdGlvbiBiZXR3ZWVuIHRlYXJpbmcgYW4gb2JqZWN0IGRvd24gYW5kIGRlYWxsb2NhdGluZyBpdC4KKwlUaGlzIGFsc28gbWVhbnMgdGhhdCBjdG9ycyBhbmQgZHRvcnMgY2FuIG5vdyBhdmlvZCBnb2luZyB0aHJvdWdoIHRoZQorCXZpcnR1YWwgZnVuY3Rpb24gdGFibGUgbWVjaGFuaXNtIGFzIHRoZXkgY29uc3RydWN0L2Rlc3RydWN0IHRoZWlyCisJb2JqZWN0cy4KKworCSogQUxMIEdOVSBDKysgZmlsZXM6IFVzZSBuZXcgbWFjcm8gSURFTlRJRklFUl9UWVBFX1ZBTFVFIHRvIGxvb2t1cAorCXR5cGUgdmFsdWUgb2YgYW4gaWRlbnRpZmllci4gIEFsc28gaW1wbGVtZW50IHJlbGF0ZWQgbWFjcm9zCisJSURFTlRJRklFUl9IQVNfVFlQRV9WQUxVRSwgYW5kIElERU5USUZJRVJfVFlQRURFQ0xfVkFMVUUuCisKKwkqIGNwbHVzLWNhZGlsbGFjLmMgKGNhZGlsbGFjX3N3aXRjaF9zb3VyY2UpOiBDaGFuZ2UgUHJvdG90eXBlCisJZGVjbGFyYXRpb24gdG8gbm9uLXByb3RvdHlwZSBkZWNsYXJhdGlvbi4KKwkocmVhZGFibGVfcCk6IERpdHRvLgorCitTdW4gTWF5IDIwIDIwOjIzOjM5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY19zaXplb2YpOiBGb3IgaW5jb21wbGV0ZSB0eXBlLCB3YXJuIGFuZCByZXR1cm4gMC4KKwkoY19zaXplb2YpOiBTaW1pbGFyLgorCitTdW4gTWF5IDIwIDE3OjIwOjQ4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9oaWdocGFydCk6IFN1cHBvcnQgU1VCUkVHIGxpa2UgZ2VuX2xvd3BhcnQuCisKK1N1biBNYXkgMjAgMTY6NTk6MTcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBXYXJuIGFib3V0IHBvaW50ZXItaW50ZWdlciBjYXN0cyAKKwl3aGVyZSBzaXplIGRpZmZlcnMuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogTXVsdGktd29yZCBmaWVsZCBkb2Vzbid0IGZvcmNlIEJMS21vZGUuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IFVzZSBtb2RlX2Zvcl9zaXplIGZvciBsc2ItYWxpZ25lZAorCWZpZWxkcyBpbiByZWdzLgkgTm8gbG9uZ2VyIGtub3dzIGV4cGxpY2l0IG1vZGVzIGZvciB0aGlzLgorCitTdW4gTWF5IDIwIDE1OjEyOjM4IDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluOiAocmVsb2FkMS5vKTogTm93IGRlcGVuZHMgb24gb3V0cHV0LmguCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTm8gbmVlZCB0byBzZXQgZnJhbWVfcG9pbnRlcl9uZWVkZWQuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9ydHgpOiBJZiByZWZlcmVuY2UgdG8gc3AsIGFwLCBvciBmcCwgdXNlCisJYXBwcm9wcmlhdGUgYWxyZWFkeS1tYWRlIHJ0eCAoZS5nLiwgc3RhY2tfcG9pbnRlcl9ydHgpLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0FMTE9DQSk6IE5vIG5lZWQgdG8gc2V0CisJZnJhbWVfcG9pbnRlcl9uZWVkZWQuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogTm8gbG9uZ2VyIHJvdW5kIHNpemUgb2YgZnJhbWUgaGVyZS4KKwkoZmluYWxfc2Nhbl9pbnNuKTogQ2FsbCBjb25zdHJhaW5fb3BlcmFuZHMgd2l0aCBuZXcgb3BlcmFuZC4KKworCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogQ2hhbmdlIHRlc3Qgb24gd2hldGhlciBzcCBpcyBsaXZlIG9yCisJbm90IHRvIGRlcGVuZCBvbiBGUkFNRV9QT0lOVEVSX1JFUVVJUkVEIGFuZCAtZm9taXQtZnJhbWUtcG9pbnRlci4KKwkoVGhpcyBjb2RlIG1heSBub3QgYmUgcmVsZXZhbnQgYW55IG1vcmUuKQorCisJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHQsIHBvcF9mdW5jdGlvbl9jb250ZXh0KTogTm8gbmVlZAorCXRvIHNhdmUgYW5kIHJlc3RvcmUgZnJhbWVfcG9pbnRlcl9uZWVkZWQuCisJKGFzc2lnbl97b3V0ZXJfLH1zdGFja19sb2NhbCk6IE5vIG5lZWQgdG8gc2V0IGZyYW1lX3BvaW50ZXJfbmVlZGVkLgorCShhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IERvbid0IGluaXRpYWxpemUgZnJhbWVfcG9pbnRlcl9uZWVkZWQgaGVyZS4KKworCSogZnVuY3Rpb24uaCAoZnJhbWVfcG9pbnRlcl9uZWVkZWQpOiBEZWxldGVkLgorCisJKiBnZW5hdHRydGFiLmMgKHdyaXRlX2F0dHJfY2FzZSk6IFdyaXRlIGNhbGwgdG8gY29uc3RyYWluX29wZXJhbmRzCisJd2l0aCBuZXcgc2Vjb25kIGFyZ3VtZW50IChyZWxvYWRfY29tcGxldGVkKS4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9hbGxvYyk6IERvbid0IGxlZnQgZnAgYmUgYWxsb2NhdGVkIGlmIHdlCisJYWxyZWFkeSBrbm93IHdlIGNhbid0IGVsaW1pbmF0ZSBpdC4KKwkoZmluZF9yZWcpOiBBcmd1bWVudCBMT1NFUlMgaXMgbm93IGEgSEFSRF9SRUdfU0VUIGluc3RlYWQgb2YgYW4JYXJyYXkuCisJUHJlY29tcHV0ZSBIQVJEX1JFR19TRVRzIGJlZm9yZSBsb29wIG92ZXIgcmVnaXN0ZXJzIHRvIHNwZWVkIHVwCisJYWxsb2NhdGlvbi4KKwkocmV0cnlfZ2xvYmFsX2FsbG9jKTogQXJndW1lbnQgRk9SQklEREVOX1JFR1MgaXMgbm93IGEgSEFSRF9SRUdfU0VULgorCShjaGVja19mcmFtZV9wb2ludGVyX3JlcXVpcmVkKTogRGVsZXRlZDsgbm8gbG9uZ2VyIG5lZWRlZC4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZSwgb3V0cHV0X2lubGluZV9mdW5jdGlvbik6IE5vIGxvbmdlcgorCW5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBmcmFtZV9wb2ludGVyX25lZWRlZC4KKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBObyBsb25nZXIgaGF2ZSB0byB3b3JyeSB0aGF0IGhhdmluZworCWEgc3RhY2sgdmFyaWFibGUgbWlnaHQgY2F1c2UgYSBmcmFtZSBwb2ludGVyIHRvIGJlIG5lZWRlZCB3aGVuIGl0CisJbWlnaHQgb3RoZXJ3aXNlIG5vdCBiZS4KKwkoZmluZF9mcmVlX3JlZyk6IERvbid0IGFsbG9jYXRlIGludG8gcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGVsaW1pbmF0ZWQKKwlsYXRlciBldmVuIGlmIHRoZXkgYXJlIG5vdCBGSVhFRF9SRUdTLgorCisJKiBvdXRwdXQuaDogRGVmaW5lIHJlbG9hZF9jb21wbGV0ZWQuCisKKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcyk6IEFkZCBuZXcgYXJndW1lbnQsIFNUUklDVC4gIElmIHplcm8KKwlhbmQgdGhlIGNvbnN0cmFpbnRzIGNvdWxkIG5vdCBiZSBtYXRjaGVkLCB0cnkgYWdhaW4gd2l0aCBhIGxlc3MKKwlzdHJpY3QgdmlldyAoaS5lLiwgYXNzdW1lIHRoYXQgcmVsb2FkIHdpbGwgZml4IHRob3NlIHRoaW5ncyB0aGF0CisJaXQgY2FuKS4gIFRoaXMgYWxsb3dzIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gYmUgb2J0YWluZWQgcHJpb3IgdG8KKwlyZWxvYWQuCisJRG9uJ3QgY2FsbCBhbHRlcl9zdWJyZWcgb3IgYXNzdW1lIGl0IGhhcyBiZWVuIGNhbGxlZC4gIEluc3RlYWQsCisJbG9vayBpbnNpZGUgU1VCUkVHcy4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzeyxfMX0pOiBIYW5kbGUgYW4gYWRkcmVzcyB0aGF0CisJaXMgYSBNRU07IGl0IG1heSBoYXZlIGJlZW4gcHJvZHVjZWQgYnkgcmVnaXN0ZXIgZWxpbWluYXRpb24uCisJKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogc3AgY2FuIGFsc28gYmUgdGhlIGJhc2UgcmVnaXN0ZXIgZm9yIGEKKwlzdGFjayBzbG90LgorCShmb3JtX3N1bSk6IE5vIGxvbmdlciBzdGF0aWMuCisKKwkqIHJlbG9hZDEuYzogUmV3cml0ZSBjb2RlIHRoYXQgcGVyZm9ybXMgZnJhbWUgcG9pbnRlciBlbGltaW5hdGlvbi4gIERvCisJaXQgZHVyaW5nIHJlbG9hZCB0byBlbnN1cmUgdGhhdCBhbGwgYWRkcmVzc2VzIGFuZCBvcGVyYW5kcyByZW1haW4KKwl2YWxpZDsgYWxzbyBnZW5lcmFsaXplIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBwYWlyIG9mIGVsaW1pbmF0aW9ucy4KKwkocmVnX2VxdWl2X3N0YWNrX3Nsb3QsIGJhZF9zcGlsbF9yZWdzKTogTmV3IHZhcnMuCisJKGZvcmJpZGRlbl9yZWdzKTogTm93IGEgSEFSRF9SRUdfU0VULgorCShzdHJ1Y3QgZWxpbV90YWJsZSk6IE5ldyBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgcmVnaXN0ZXIgZWxpbWluYXRpb25zLgorCShyZWxvYWQpOiBTdGFydCBzY2FubmluZyByZWdpc3RlcnMgYWZ0ZXIgdmlydHVhbCByZWdpc3RlcnMuCisJSW5pdGlhbGl6ZSByZWdfZXF1aXZfc3RhY2tfc2xvdCBmb3IgZWFjaCByZWdpc3Rlci4gIENvbXB1dGUKKwlyZWdfZXF1aXZfe21lbSxhZGRyZXNzfSBkdXJpbmcgcmVnaXN0ZXIgc2NhbiBvbmx5IGlmIG5vdCBlbGltaW5hdGluZworCXJlZ2lzdGVycy4KKwlDb21wdXRlIGluaXRpYWwgZGVmYXVsdCB2YWx1ZSBvZiBmcmFtZV9wb2ludGVyX25lZWRlZC4KKwlSb3VuZCBmcmFtZSBzaXplIHRvIEJJR0dFU1RfQUxJR05NRU5ULgorCUNyZWF0ZSBvYnN0YWNrIGZvciBzY3JhdGNoIHJ0bCBjcmVhdGVkIGJ5IHJlZ2lzdGVyIGVsbWluYXRpb24uCisJSW5pdGlhbGl6ZSBlbGltaW5hdGlvbiB0YWJsZSBhbmQgc3BpbGwgcmVnaXN0ZXJzIHRoYXQgd2Uga25vdyBjYW4ndAorCWJlIGVsaW1pbmF0ZWQuCisJT24gZWFjaCBzY2FuIG9mIHRoZSBpbnNuczogUmVzZXQgYWxsIGVsaW1pbmF0aW9uIGVudHJpZXMgdG8gaW5pdGlhbAorCW9mZnNldHMsIGNvbXB1dGUgcmVnX2VxdWl2X3ttZW0sYWRkcmVzc30sIGFuZCBzZWUgaWYgYW55IHBvdGVudGlhbGx5CisJZWxpbWluYWJsZSByZWdpc3RlciBjaGFuZ2VkIHN0YXR1cy4KKwlUcnkgdG8gZWxpbWluYXRlIHJlZ2lzdGVycyBmcm9tIGVhY2ggaW5zbiB1bmxlc3Mgd2Uga25vdyB0aGF0IG5vbmUKKwljYW4gYmUgZWxpbWluYXRlZC4KKwlEb24ndCBjb21wbGV0ZSBncm91cHMgZm9yIHNwaWxsIHJlZ2lzdGVycyBmcm9tIHJlZ2lzdGVycyB0aGF0CisJc2hvdWxkbid0IGJlIHVzZWQgYXMgc3BpbGwgcmVnaXN0ZXJzLgorCUNhbGwgcmVsb2FkX2FzX25lZWRlZCBpZiByZWdpc3RlciBlbGltaW5hdGlvbnMgY2FuIGJlIGRvbmUsIGV2ZW4gaWYKKwlubyByZWxvYWRzIGFyZSBuZWVkZWQuCisJKG5ld19zcGlsbF9yZWcpOiBEb24ndCBhbGxvdyBzcGlsbGluZyBhbiBlbGltaW5hYmxlIHJlZ2lzdGVyLgorCURvbid0IHNldCBmb3JiaWRkZW5fcmVncyBoZXJlLgorCUluZGljYXRlIHNvbWV0aGluZyBjaGFuZ2VkIGlmIGEgcmVnaXN0ZXIgdGhhdCB3YXNuJ3QgZXZlciB1c2VkIGJlZm9yZQorCXdhcyBtYWRlIGEgc3BpbGwgcmVnaXN0ZXIuCisJKGVsaW1pbmF0ZV9mcmFtZV9wb2ludGVyLCB7YWx0ZXIsZml4fV9mcmFtZV9wb2ludGVyX2FkZHJlc3MpOiBEZWxldGVkLgorCShkZWxldGVfZGVhZF9pbnNuKTogTmV3IGZ1bmN0aW9uLgorCShhbHRlcl9yZWcpOiBDYWxsIGl0LgorCUFsd2F5cyBzZXQgcmVnX2VxdWl2X3N0YWNrX3Nsb3Q7IGlmIG5vdCBlbGltaW5hdGluZyByZWdpc3RlcnMsIGFsc28KKwlzZXQgcmVnX2VxdWl2X3ttZW0sYWRkcmVzc30uCisJKGVsaW1pbmF0ZV9yZWdzLCBlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogTmV3IGZ1bmN0aW9ucy4KKwkoc3BpbGxfaGFyZF9yZWcpOiBBZGQgbmV3IGFyZ3VtZW50LCBDQU5UX0VMSU1JTkFURS4KKwlTZXQgYml0IGZvciByZWdpc3RlciBiZWluZyBzcGlsbGVkIGluIGZvcmJpZGRlbl9yZWdzLgorCVVzZSBuZXcgYXJndW1lbnQgaW5zdGVhZCBvZiBzZWVpbmcgaWYgd2UgYXJlIHNwaWxsaW5nIGZwLgorCU5vIGxvbmdlciBuZWVkIHRvIGhhdmUgZnJhbWUgcG9pbnRlciBqdXN0IGJlY2F1c2UgYSByZWcgbmVlZHMgYQorCXN0YWNrIHNsb3QuCisJKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IFNldCBiYWRfc3BpbGxfcmVncyB0byBjb250YWluIHRob3NlIHJlZ2lzdGVycworCXRoYXQgY2FuJ3QgYmUgdXNlZCBmb3Igc3BpbGwgcmVnaXN0ZXJzLgorCUNvbnNpZGVyIGFueSBlbGltaW5hYmxlIHJlZ2lzdGVyIGFzIGJhZCB0byB1c2UgYXMgYSBzcGlsbCByZWdpc3Rlci4KKwlSZXdvcmsgaW5pdGlhbGl6YXRpb24gb2YgcG90ZW50aWFsX3JlbG9hZF9yZWdzLgorCShyZWxvYWRfYXNfbmVlZGVkKTogSGFuZGxlIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIGluIGEgc2ltaWxhciBtYW5uZXIKKwlhcyBmdW5jdGlvbiByZWxvYWQuCisJKGdlbl9pbnB1dF9yZWxvYWQpOiBXaGVuIGdlbmVyYXRpbmcgYSByZWxvYWQgZm9yIGEgUExVUywgZmlyc3QgdHJ5IHRvCisJdXNlIGEgdGhyZWUtb3BlcmFuZCBhZGQgaW5zbi4gIElmIHRoYXQgZmFpbHMsIGVtaXQgdHdvIHR3by1vcGVyYW5kCisJaW5zbnMuCisKKwkqIHJ0bC5oIChGVU5DVElPTl9GTEFHU19GUkFNRV9QT0lOVEVSX05FRURFRCk6IERlbGV0ZWQ7IGFsbCBvdGhlcnMKKwlyZW51bWJlcmVkLgorCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogTm8gbG9uZ2VyIGhhdmUgdG8gc2V0IGZyYW1lX3BvaW50ZXJfbmVlZGVkCisJZm9yIHZhcmlhYmxlLXNpemVkIGRlY2wuCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfZmluZF9yZWcpOiBEb24ndCB0cnkgdG8gYWxsb2NhdGUgYW4gZWxpbWluYWJsZQorCXJlZ2lzdGVyLgorCisJKiB0bS12YXguaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IEFkZCBkZWZpbml0aW9uLgorCisJKiByZWNvZy5jIChuZXh0X2luc25fdGVzdHNfbm9faW5lcXVhbGl0eSk6IElmIG5vIG5leHQgaW5zbiwgcmV0dXJuIDAuCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IFNldCBsZW5ndGggZm9yIFRSRUVfVkVDLgorCisJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogU2V0IGFyZy0+dmFsdWUgdG8gbG9jYXRpb24gd2hlcmUgYXJndW1lbnQKKwl3YXMgcGxhY2VkIChlaXRoZXIgcmVnaXN0ZXIgb3Igc3RhY2spLgorCisJKiByZWNvZy5jOiBOZWVkcyBmbGFncy5oIChmb3IgZmxhZ19wcmV0ZW5kX2Zsb2F0KToKKwkqIE1ha2VmaWxlLmluIChyZWNvZy5vKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogQWRkIG1pc3NpbmcgUkVUVVJOIHN0YXRlbWVudHMuCisKK1NhdCBNYXkgMTkgMTQ6MjY6MzEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBFWElUX1NUTVQpOiBSZXR1cm4gcmF0aGVyIHRoYW4gZmFsbGluZworCW91dCBvZiBzd2l0Y2ggc3RhdGVtZW50IChhbmQgaW50byBgYmlub3AnKS4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogQWxsb3cgY29uZGl0aW9uYWwgYnJhbmNoZXMgdG8gYmUgdHVybmVkIGludG8KKwlub29wcyB3aGVuIHRoZSBjb25kaXRpb24gaXMga25vd24gZmFsc2UgYnkgbm90IGNhbGxpbmcgdmFsaWRhdGVfY2hhbmdlLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBBZGQgTEFCRUxfUkVGIHRvIGxpc3Qgb2YgZmFzdCBSVEwgY29kZXMuCisKK1NhdCBNYXkgMTkgMTI6NDE6NDQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1pMzg2Z2FzLmggKEFTTV9PVVRQVVRfQUxJR04pOiBVc2UgbG9nIGFzIGFyZyB0byAuYWxpZ24uCisJKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IExpa2V3aXNlLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBGb3IgLmNjLCBwYXNzIC1nKiB0byBjYzEuCisKK1NhdCBNYXkgMTkgMDY6NTE6MjYgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jIChwdXNoX29ic3RhY2tzLCBwb3Bfb2JzdGFja3MpOiBQdXQgc3RydWN0IG9ic3RhY2tfc3RhY2sKKwlpbiBvYnN0YWNrIGluc3RlYWQgb2YgdXNpbmcgeG1hbGxvYy9mcmVlLgorCShpbml0X3RyZWUpOiBJbml0aWFsaXplIG5ldyBvYnN0YWNrIGZvciB7cHVzaCxwb3B9X29ic3RhY2tzLgorCisJKiB0cmVlLmMgKHNpbXBsZV9jc3RfbGlzdF9lcXVhbCk6IE5vIGxvbmdlciBzdGF0aWMuCisKK0ZyaSBNYXkgMTggMTk6Mzg6MDEgMTk5MCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5oIChNVVNUX1BBU1NfSU5fU1RBQ0spOiBSZWZpbmUgdGVzdCBmb3IgY2FzZSB3aGVyZSBwYWRkaW5nCisJcmVxdWlyZW1lbnQgcHJvaGliaXRzIHBhc3NpbmcgaW4gcmVnaXN0ZXIuCisKK0ZyaSBNYXkgMTggMTg6MTQ6MTggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogRml4IENBVCBtYWNybyBpbiBtZW12YXIuaC4KKworRnJpIE1heSAxOCAxNjoxMzo1OSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGRvX2p1bXApOiBEb24ndCBleHBsaWNpdGx5IGNvcHkgaXRlbSBiZWluZyB0ZXN0ZWQgZnJvbQorCU1FTSB0byBSRUcuICBJZiBuZWVkZWQsIHRoaXMgd2lsbCBiZSBkb25lIGxhdGVyLgorCitUaHUgTWF5IDE3IDE0OjMzOjUwIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChib290c3RyYXApOiBQYXNzIExBTkdVQUdFUyB0byBpbm5lciBtYWtlcy4KKworVGh1IE1heSAxNyAxMzo1NzozNCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBIYW5kbGUgX0NUUkwgbGlrZSBDVFJMLgorCitXZWQgTWF5IDE2IDIxOjA5OjQyIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLmVkdSkKKworCSogZm9sZC1jb25zdCAoZm9sZCk6IFR3byBjb252ZXJzaW9ucyBpbiBhIHJvdyBhcmUgbmVlZGVkIGlmIGZyb20gYW4KKwlpbnRlZ2VyIHR5cGUgdG8gYSBwb2ludGVyIHR5cGUgb2YgYSBkaWZmZXJlbnQgcHJlY2lzaW9uLgorCitXZWQgTWF5IDE2IDE2OjA5OjQ3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IE1ha2Ugc3VyZSBhIHZvbGF0aWxlIHZhbHVlIGlzIHJlZmVyZW5jZWQKKwlldmVuIGlmIHZhbHVlIGlzIGlnbm9yZWQuCisKKwkqIGMtdHlwZWNrLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6IFJlc3VsdCBDT05EX0VYUFIgZ2V0cyB0eXBlIGludC4KKwkoaW52ZXJ0X3RydXRodmFsdWUpOiBTaW1wbGlmeSBDT05EX0VYUFIuCisKK1R1ZSBNYXkgMTUgMDA6MjU6MDMgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogRG8gc2V0IFRZUEVfU0laRSBpZiBzaXplIGlzIHZhci4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogSWYgaW5zbiBpcyBhbiBhc20sIHZlcmlmeSB0aGF0IENMQVNTCisJaXMgYXQgbGVhc3QgcG9zc2libGUgZm9yIHRoZSBzcGVjaWZpZWQgbW9kZS4KKworCSogYy1kZWNsLmMgKGNvbXBsZXRlX2FycmF5X3R5cGUpOiBDb21wZW5zYXRlIGZvciB3aWRlIHN0cmluZyBjb25zdGFudC4KKworCSogZmluYWwuYyAobGVhZl9mdW5jdGlvbl9wKTogUmVqZWN0IGV2ZXJ5dGhpbmcgaWYgcHJvZmlsaW5nLgorCisJKiBmdW5jdGlvbi5jIChvcHRpbWl6ZV9iaXRfZmllbGQpOiBBZGp1c3QgT0ZGU0VUIGlmCisJQklUU19CSUdfRU5ESUFOICE9IEJZVEVTX0JJR19FTkRJQU4uCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogUmV3b3JrIHRoZSBjb2RlCisJdG8gYWRqdXN0IFhCSVRQT1MgZm9yIHRoZSBzaXplIHdpdGhpbiB3aGljaCB0byBjb3VudC4KKwkoZXh0cmFjdF9iaXRfZmllbGQpOiBXaGVuIGNvbnZlcnRpbmcgTUVNIHRvIFJFRywgZG9uJ3QgbWFrZSBTVUJSRUcKKwlpbW1lZGlhdGVseTsgZmFsbCB0aHJvdWdoIGFuZCBsZXQgdGhpcyBoYXBwZW4gaW4gdGhlIGNvZGUgdGhhdAorCWhhbmRsZXMgb3JpZ2luYWwgcmVnaXN0ZXJzIG9mIHRoZSB3cm9uZyBtb2RlLgorCitNb24gTWF5IDE0IDE2OjAxOjEzIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKKworCSogY2V4cC55ICh5eWxleCk6IElnbm9yZSBjYXJyaWFnZSByZXR1cm4uCisJKiBjY2NwLmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBMaWtld2lzZS4KKwkobmV3bGluZV9maXgsIG5hbWVfbmV3bGluZV9maXgpOiBMaWtld2lzZS4KKworCSogYy1jb21tb24uYzogTmV3IGZpbGUuCisJKGNvbWJpbmVfc3RyaW5ncyk6IE1vdmVkIGhlcmUuCUZpeCBlcnJvcnMgZm9yIHdpZGUgc3RyaW5nIGxlbmd0aC4KKwkqIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55LCBjcGx1cy1sZXguYzogRnVuY3Rpb24gZGVsZXRlZCBoZXJlLgorCitTdW4gTWF5IDEzIDA4OjA4OjQxIDE5OTAgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBGaXggdHlwbyBpbiBjYXNlICdFJy4KKworU2F0IE1heSAxMiAxNzoxNDoyNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBEb24ndCBjaGFuZ2UgLSh5LXgpIHRvIHgteSBmb3IgSUVFRSBmbG9hdHMuCisJSW5jbHVkZSByZWFsLmguCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IERvbid0IHNpbXBsaWZ5IGZsb2F0KzAsIGZsb2F0LTAsIGZsb2F0KjAKKwlpZiB1c2luZyBJRUVFIGZsb2F0aW5nIHBvaW50LgorCURvbid0IHNpbXBsaWZ5IGZsb2F0LXNlbGYgZXZlbiBpZiBub3QgSUVFRS4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IExpa2V3aXNlLgorCisJKiBpMzg2Lm1kICh0cnVuYyoqKTogVXNlIGxvbmcgbW92ZSBpZiBzb3VyY2UgaXMgY29uc3RhbnQuCisJKiBvdXQtaTM4Ni5jIChQUklOVF9SRUcpOiBIYW5kbGUgQ09ERSA9PSAnaycuCisKKwkqIGZpeGluY2x1ZGVzOiBVc2Ugcm0gLWZyIHRvIGRlbGV0ZSBiZWZvcmUgbWFraW5nIGxpbmsuCisKKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IFN1cHBvcnQgTVVMREkzX0xJQkNBTEwsIGV0Yy4KKworU2F0IE1heSAxMiAxNzowNDo1OCAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoZmluZF9iZXN0X2FkZHIpOiBEb24ndCBtb2RpZnkgY29uc3RhbnQgYWRkcmVzcyBNRU1zOyB0aGV5CisJYXJlIHNoYXJlZC4KKworU2F0IE1heSAxMiAxNToxNzozNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCisKKwkqIG5zMzJrLm1kIChzaWduZWQgYml0ZmllbGQgZXh0cmFjdCk6IERvbid0IG91dHB1dCBhc3NlbWJsZXIgY29tbWVudC4KKworRnJpIE1heSAxMSAxNToyMzo1NSAxOTkwICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBNYWtlZmlsZS5pbjogRG9uJ3QgdXNlICQobGlic3ViZGlyKSBhcyBhIHRhcmdldCBzaW5jZSBpdCBpbnZvbHZlcworCXNoZWxsIGAuLi5gIGNvbnN0cnVjdHMuCisKKwkqIGdlbmF0dHIuYyAoZmF0YWwsIG1haW4pOiBSZW1vdmUgcmVsaWNzIG9mIG9sZCBwcm9ncmFtIG5hbWUuCisJKiBnZW5hdHRydGFiLmM6IExpa2V3aXNlLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IHRvCisJb3BlcmFuZF9lcXVhbF9wLgorCisJKiByZWxvYWQuYyAoZm9ybV9zdW0pOiBIYW5kbGUgY2FzZSB3aGVyZSBzZWNvbmQgb3BlcmFuZCBpcworCShwbHVzIGZvbyAoY29uc3RfaW50IC4uLikpLgorCisJKiBjLXR5cGVjay5jIChjX3NpemVvZnssX25vd2Fybn0sIGNfYWxpZ25vZik6IERvbid0IGJsb3cgdXAgZm9yCisJRVJST1JfTUFSSy4KKwkqIGNwbHVzLXR5cGVjay5jIChjX3NpemVvZnssX25vd2Fybn0sIGNfYWxpZ25vZik6IExpa2V3aXNlLgorCisJKiBjcGx1cy10eXBlY2suYyAoY19zaXplb2Z7LF9ub3dhcm59KTogQ29udmVydCBmcm9tIGJ5dGVzIHRvIGNoYXJzLAorCXNpbmNlIGMgZGVmaW5lcyBzaXplb2YgKGNoYXIpIGFzIDEuCisKKwkqIGxvb3AuYyAobWFya19sb29wX2p1bXApOiBSRVRVUk4sIFNJR05fRVhURU5ELCBhbmQgWkVST19FWFRFTkQgY2FuCisJYWxzbyBvY2N1ciBpbiBKVU1QX0lOU04ncy4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2FkcywgZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBDb3JyZWN0IGVycm9ycyB3aGVyZQorCWFuIGFyZyB0byBmaW5kX3JlbG9hZHMgaXMgIlZPSURtb2RlIiBpbnN0ZWFkIG9mICIwIiBhbmQgdmljZSB2ZXJzYS4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IExpa2V3aXNlLgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2FsbG9jKTogQXZvaWQgZGl2aWRlLWJ5LXplcm8gZm9yIGFsbG9jbm9zCisJd2hlcmUgYWxsIHJlZ3MgaGF2ZSByZWdfbGl2ZV9sZW5ndGggPT0gLTIuCisKK0ZyaSBNYXkgMTEgMTQ6NDU6MDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiB0bS1pODYwLmggKEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCk6IEFsaWduIHRvIG11bHRpcGxlIG9mIDQuCisKK1RodSBNYXkgMTAgMjM6NDM6MzEgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQorCisJKiBvdXQtaTg2MC5jIChzaW5nbGVfaW5zbl9zcmNfcCwgc3RyaWN0X3NpbmdsZV9pbnNuX3NyY19wKToKKwlDb3JyZWN0IGNvbmRpdGlvbnMgZm9yIG5lZWRpbmcgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zLgorCShvdXRwdXRfZGVsYXllZF9icmFuY2gpOiBMaWtld2lzZS4KKworU2VlIGZpbGUgQ2hhbmdlTG9nLjEuCisMCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBpbmRlbnRlZC10ZXh0CitsZWZ0LW1hcmdpbjogOAorZmlsbC1jb2x1bW46IDc2Cit2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCitFbmQ6CmRpZmYgLS1naXQgYS9nY2MvQ2hhbmdlTG9nLjMgYi9nY2MvQ2hhbmdlTG9nLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2MzExYQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9DaGFuZ2VMb2cuMwpAQCAtMCwwICsxLDgwNjMgQEAKK0ZyaSBKdWwgMTkgMTg6NTY6MTQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNhbm9uX3JlZyk6IEFsbG93IGZvciByZWN1cnNpdmUgY2FsbCByZXR1cm5pbmcgMCAoaWYgd2UgaGFkCisJYW4gRVhQUl9MSVNUKS4KKwkqIHNjaGVkLmMgKGluaXRfYWxpYXNlc19hbmFseXNpcyk6IElnbm9yZSBSRUdfRVFVQUwgbm90ZSB3aGVuIGl0cyB2YWx1ZQorCWlzIGFuIEVYUFJfTElTVC4KKwkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBMaWtld2lzZS4KKworCSogcnM2MDAwLm1kIChhbmRzaTMpOiBGaXggdHlwbyBpbiBhbmQtd2l0aC1jYyBwYXR0ZXJuLgorCitGcmkgSnVsIDE5IDExOjIzOjIyIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB0b3BsZXYuYyAoc2V0X3RhcmdldF9zd2l0Y2gpOiBGb3IgVEFSR0VUX09QVElPTlMsIHNldCB0aGUKKwl2YXJpYWJsZSB0byB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgYWN0dWFsIG9wdGlvbi4KKwkqIHRtLW04OGsuaCwgb3V0LW04OGsuYzogQ2hhbmdlIHRoZSB1c2Ugb2YgbTg4a19zaG9ydF9kYXRhLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X2RlZik6IE1lcmdlIGdldF9vcl9hc3NpZ25fbGFiZWwgYW5kCisJZGVsZXRlIGl0LiAgRW5zdXJlIHRoYXQgRU5DT0RFX1NFR01FTlRfSU5GTyBpcyBldmFsdWF0ZWQgYmVmb3JlCisJU0VMRUNUX1NFQ1RJT04uCisKK1RodSBKdWwgMTggMTk6NTc6NDUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmggKE1VU1RfUEFTU19JTl9TVEFDS19CQURfUEFERElORyk6IERlZmluaXRpb25zIHdlcmUgYmFja3dhcmRzLgorCitUaHUgSnVsIDE4IDE3OjUyOjQ2IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogdW5yb2xsLmM6IEZpeCB0eXBvcyBpbiBjb21tZW50cy4KKwkoc3BsaXR0YWJsZV9yZWdzX3VwZGF0ZXMpOiBOZXcgc3RhdGljIGdsb2JhbCB2YXJpYWJsZS4KKwlJbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCBtb2RpZnkgYSBzcGxpdCBiaXYKKwlyZW1haW5pbmcgZHVyaW5nIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiBhIGxvb3AsIHNvIHRoYXQgdGhlIGxhc3Qgb25lCisJY2FuIGJlIGhhbmRsZWQgc3BlY2lhbGx5LgorCSh1bnJvbGxfbG9vcCk6IEFsbG9jYXRlIGFuZCBjbGVhciBpdC4KKwkoY29weV9sb29wX2JvZHkpOiBVc2UgaXQgdG8gZGV0ZXJtaW5lIGhvdyB0byByZXdyaXRlIGFuIGluc24KKwltb2RpZnlpbmcgYSBzcGxpdCBpdi4KKwkoZmluZF9zcGxpdHRhYmxlX3JlZ3MpOiBXaGVuIGEgc3BsaXR0YWJsZSBiaXYgaXMgaWRlbnRpZmllZCwgc2V0IGl0CisJZXF1YWwgdG8gdGhlIG51bWJlciBvZiBpbnNuIG1vZGlmeWluZyB0aGUgYml2LgorCShmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IFdoZW4gYSBzcGxpdHRhYmxlIGdpdiBpcyBpZGVudGlmaWVkLCBzZXQKKwlpdCB0byBvbmUgaWYgdGhpcyBnaXYgaXMgYSByZWcuCisJCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBJbnN0ZWFkIG9mIHRyeWluZyB0byBzcGVjaWFsIGNhc2UKKwlpbnNucyB0aGF0IHVzZSBzdGFydF9sYWJlbCwgdXNlIHRoZSBsYWJlbF9tYXAgdG8gbWFwIHRoZSBzdGFydAorCWxhYmVsIHRvIHRoZSBhcHByb3ByaWF0ZSBsYWJlbCBmb3IgYWxsIGluc25zIGV4Y2VwdCB0aG9zZSB0aGF0CisJbXVzdCBiZSBpbnZlcnRlZCBhbmQgcmVkaXJlY3RlZC4gIFRoZSBmb3JtZXIgY29kZSBkaWQgbm90IGhhbmRsZQorCXRhYmxlanVtcHMgdGhhdCB1c2VkIHRoZSBzdGFydF9sYWJlbCBjb3JyZWN0bHkuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IERvbid0IGxlZ2l0aW1pemUgYW4KKwlhZGRyZXNzIGluc2lkZSBvZiBhbiBBRERSRVNTIHJ0eC4gIFRoaXMgZmFpbHMsIGJlY2F1c2UgdGhpcyBuZWVkCisJbm90IGJlIGEgdmFsaWRhdGUgYWRkcmVzcywgYnV0IGl0IGlzIGFsd2F5cyB2YWxpZCBpbiB0aGUgY29udGV4dAorCWl0IGFwcGVhcnMgaW4uCisKK1RodSBKdWwgMTggMDg6MTM6NTYgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHRvcGxldi5jIChzZXRfdGFyZ2V0X3N3aXRjaCk6IFN1cHBvcnQgVEFSR0VUX09QVElPTlMgZm9yIGNvbW1hbmQKKwlvcHRpb25zIHdpdGggdmFsdWVzLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X2RlZik6IFNldCBmbGFncyB3aXRoCisJRU5DT0RFX1NFR01FTlRfSU5GTyBmb3Igc3RyaW5ncyBhbmQgY29uc3RydWN0b3JzLgorCSogdG0tbWlwcy5oIChFTkNPREVfU0VHTUVOVF9JTkZPKTogTXVzdCBiZSBhIFZBUl9ERUNMLgorCisJKiBvdXQtbTg4ay5jLCB0bS1tODhrLmgsIG04OGsubWQ6IEltcGxlbWVudCBhIGdsb2JhbCBwb29sIGFwcHJvYWNoCisJdG8gc2hvcnQgYWRkcmVzc2luZy4KKworCSogbTg4ay5tZCAoZXh0ZW5kc2ZkZjIsIHRydW5jZGZzZjIpOiBVc2UgZnN1YiByYXRoZXIgdGhhbiBmYWRkLgorCVRoaXMgY29uZm9ybXMgdG8gSUVFRSA3NTQgaW4gYWxsIHJvdW5kaW5nIG1vZGVzIGV4Y2VwdCByb3VuZCB0bworCW5lZ2F0aXZlIGluZmluaXR5IHdoZXJlYXMgZmFkZCBjb25mb3JtcyBvbmx5IGluIHRoYXQgbW9kZS4KKworVGh1IEp1bCAxOCAwMTowMTozNyAxOTkxICBFcmljIFlvdW5nZGFsZSAoeW91bmdkYWxlIGF0IHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIG1ha2UtY2MxLmNvbTogQWRkIGNvbW1hbmQgbGluZSB0byBjb21waWxlIHJlZy1zdGFjay5jLCBhbmQgYWRkCisJcmVnLXN0YWNrLm9iaiB0byB0aGUgbGlzdCBvZiBmaWxlcyBwYXNzZWQgdG8gdGhlIFZNUyBsaW5rZXIuCisKK1RodSBKdWwgMTggMDA6MTE6MDAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZW5xdWlyZS5vKTogTmVlZCBub3QgZGVwZW5kIG9uIGdudWxpYi4KKwkoZ251bGliMik6IFJlbmFtZWQgZnJvbSBnbnVsaWIyLnBvcnRhYmxlLgorCURvbid0IGRvIHJhbmxpYi4KKwkoZ251bGliMi5wb3J0YWJsZSk6IEp1c3QgcmVmZXJzIHRvIGdudWxpYjIuCisJKGdudWxpYjEucG9ydGFibGUpOiBEb24ndCBkbyByYW5saWIuCisKK1dlZCBKdWwgMTcgMTE6MTk6MDkgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZ2NjKTogRG8gYSAtZHVtcHNwZWNzIGFmdGVyIGJ1aWxkaW5nIGdjYyBzbyB0aGF0IC1CLi8KKwl3aWxsIG92ZXJyaWRlIGFueSBpbnN0YWxsZWQgc3BlY3MgaW4gL3Vzci9sb2NhbC9saWIuCisJKG1vc3RseWNsZWFuKTogRGVsZXRlICouY3BwIGZpbGVzIHdoaWNoIGFyZSBsZWZ0IGlmIHlvdSB1c2UKKwktc2F2ZS10ZW1wcy4KKworV2VkIEp1bCAxNyAwNjowODozMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogV2hlbiBwdXR0aW5nIEkyIGFuZC9vciBJMSBpbnRvIE5FV1BBVCwKKwljaGVjayBmb3IgYSBQQVJBTExFTDsgaWYgc28sIGp1c3QgcHV0IGluIHRoZSByZWxldmFudCBTRVQgaW5zdGVhZAorCW9mIG1ha2luZyBhIFBBUkFMTEVMIGNvbnRhaW5pbmcgYSBQQVJBTExFTC4KKworVHVlIEp1bCAxNiAxODo1ODo1MSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHJlY29yZF92YWx1ZV9mb3JfcmVnKTogU2hvdyB3ZSBoYXZlbid0IHNlZW4gdGhlIGRlYXRoCisJb2YgYSByZWdpc3RlciBvbmNlIHdlIGhhdmUgc2VlbiBpdCBtb2RpZmllZC4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBJZiB3ZSBkZWNpZGUgdG8gcHV0IGEgcHNldWRvIHdoaWNoIHVzZWQgdG8gaGF2ZQorCWEgTUVNIGVxdWl2IG9udG8gdGhlIHN0YWNrLCBzZXQgU09NRVRISU5HX0NIQU5HRUQgYW5kIHJlcHJvY2VzcyBhbGwKKwllbGltaW5hdGlvbnMgYW5kIHBzZXVkb3Mgd2l0aG91dCBzY2FubmluZyB0aGUgaW5zbnMuCisKK1R1ZSBKdWwgMTYgMTM6MTc6MTQgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwbHVzLWRlY2wuYyAoc2lnc2Vndik6IE1ha2Ugc2lnbmFsIGhhbmRsZXIgdm9pZCBmb3IgZnVsbAorCXByb3RvdHlwaW5nIHN5c3RlbXMuCisKK1R1ZSBKdWwgMTYgMTI6MjU6MTggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IElnbm9yZSB0eXBlcyB3aXRoIG5vIG5hbWVzIG9mIGFueSBraW5kLgorCitUdWUgSnVsIDE2IDA3OjEyOjUyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0bXQuYyAocHVzaGNhc2UsIHB1c2hjYXNlX3JhbmdlKTogUmV0dXJuIGxhYmVsIGluICpEVVBMSUNBVEUsCisJbm90IGludGVnZXIgdmFsdWUuCisKKwkqIHJ0bGFuYWwuYyAocmVnX3JlZmVyZW5jZWRfcCwgcmVnX292ZXJsYXBfbWVudGlvbmVkX3ApOiBBbGxvdyBYIHRvCisJYmUgKGNjMCkgb3IgKHBjKS4KKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBTRVQpOiBEZWxldGUgY29kZSB0byByZW1vdmUgInVubmVjZXNzYXJ5IgorCVNVQlJFRzsgY29kZSB3YXMgaW5jb3JyZWN0IGFuZCB0aGlzIGlzIGRvbmUgKGNvcnJlY3RlZCBiZWxvdykgaW4KKwlzaW1wbGlmeV9jb21wYXJpc29uLgorCShzaW1wbGlmeV9jb21wYXJpc29uKTogQ2FuIG9ubHkgcmVtb3ZlIFNVQlJFRyBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogSWYgY29uZGl0aW9uIGhhcyBzaWRlIGVmZmVjdHMsCisJZW5zdXJlIHdlIGV2YWx1YXRlIGl0IGJlZm9yZSBldmFsdWF0aW5nIGFuIGFybSBvZiB0aGUgQ09ORF9FWFBSLgorCitNb24gSnVsIDE1IDIxOjU5OjM2IDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX1JFVFVSTlNfU1RSVUNUKTogRml4IHR5cG8gaW4gdmFsdWUuCisKK01vbiBKdWwgMTUgMjI6MTg6NDAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBJZ25vcmUgQ1BBVEggaWYgLW5vc3RkaW5jLgorCitNb24gSnVsIDE1IDIyOjAwOjAyIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBjaHVyY2h5LmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRml4IHR5cG8gKHJlZ19zZXRzX3AgaW5zdGVhZCBvZgorCXJlZ19zZXRfcCkuCisKK01vbiBKdWwgMTUgMjE6NDk6MDkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHN0bXQpOiBFbWl0IHRoZSBub3AgZm9yIHRoZSBzdGFydCBvZiBhIGxvb3AKKwlvbmx5IGFmdGVyIHRoZSBsaW5lIG51bWJlci4KKworTW9uIEp1bCAxNSAxNjo1MDo1MSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWRuKQorCisJKiBydGxhbmFsLmMgKHJlZ19zZXRfcCk6IElmIHdlIGFyZSBwYXNzZWQgYW4gaW5zbiwgb25seSBwYXNzIHRoZQorCXBhdHRlcm4gdG8gbm90ZV9zdG9yZXMuCisKKwkqIGxvY2FsLWFsbG9jLmMgKHZhbGlkYXRlX2VxdWl2X21lbSk6IEEgQ0FMTF9JTlNOIGludmFsaWRhdGVzIGFsbAorCW1lbW9yeS4KKworU3VuIEp1bCAxNCAwNjozNDo0NyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5oeXUuZWR1KQorCisJKiBjc2UuYyAobGFzdF9qdW1wX2VxdWl2X2NsYXNzKTogTmV3IHZhcmlhYmxlLgorCShyZWNvcmRfanVtcF9lcXVpdik6IFNldCBpdC4KKwkoY3NlX2luc24pOiBDbGVhciBpdC4KKwkoY3NlX2Fyb3VuZF9sb29wKTogSW52YWxpZGF0ZSBhbGwgZW50cmllcyBpbiBsYXN0X2p1bXBfZXF1aXZfY2xhc3MuCisJKGNzZV9zZXRfYXJvdW5kX2xvb3ApOiBFbnN1cmUgb3VyIHJlcGxhY2VtZW50IGlzIGNoZWFwZXIuCisKK1NhdCBKdWwgMTMgMTc6MTU6MzAgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogRml4IHR5cG8gaW4gYXJndW1lbnRzIGZvciBmaW5pc2hfZGVjbC4KKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBMaWtld2lzZS4KKworRnJpIEp1bCAxMiAxNjo0NTowMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogRG9uJ3QgY3Jhc2ggd2hlbiBERUNMX05BTUUgaXMgMC4KKworRnJpIEp1bCAxMiAxNTozODoyNCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGRvX3RhYmxlanVtcCk6IERvbid0IHdyaXRlIEJBUlJJRVIgYmV0d2VlbiBqdW1wIGFuZCB0YWJsZQorCWlmIHRoZXkgbXVzdCByZW1haW4gYWRqYWNlbnQuCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogU2V0IFJFR19VU0VSVkFSX1Agd2hlbiByZWdpc3RlciBuYW1lCisJaXMgc3BlY2lmaWVkLgorCSogaW50ZWdyYXRlLmMgKHN1YnN0X2NvbnN0YW50cyk6IERvbid0IHN1YnN0aXR1dGUgZm9yIGEgdXNlcgorCXZhcmlhYmxlIGFzc2lnbmVkIHRvIGEgaGFyZCByZWdpc3Rlci4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFkZCBuZXcgdmFycyBub197aW5wdXQsb3V0cHV0fV9yZWxvYWRzIHRvCisJaW5kaWNhdGUgd2hlbiB0aGUgY29ycmVzcG9uZGluZyByZWxvYWQgdHlwZSBpcyBub3QgcGVybWl0dGVkOyByZWplY3QKKwlhbiBhbHRlcm5hdGl2ZSB0aGF0IHdvdWxkIHRyeSBzdWNoIGEgcmVsb2FkLgorCSogcnM2MDAwLm1kIChkZWNyZW1lbnQtYW5kLWJyYW5jaCk6IE5vIGxvbmdlciBuZWVkIGtsdWRnZXMgdG8KKwlhdm9pZCBvdXRwdXQgcmVsb2Fkcy4KKwlVc2UgJzAnIGluc3RlYWQgb2YgJ2MnIGZvciBpbnB1dCAxIGluIGFsdGVybmF0aXZlIDAuCisJQWxsb3cgb3BlcmFuZCAwIHRvIGJlIGluIG5vbi1nZW5lcmFsIHJlZ2lzdGVyLgorCQorRnJpIEp1bCAxMiAxMDo1NDozOSAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0LCBmaW5pc2hfZW51bSk6IEZpeCB0eXBvIGluIGFyZ3VtZW50cyBmb3IKKwlmaW5pc2hfZGVjbC4KKworCSogaTM4Ni5tZCAoYml0IHRlc3QgcGF0dGVybnMpOiBEZWxldGUgYml0IHRlc3RzIHVzaW5nIGltcGxpY2l0bHkKKwltYXNrZWQgYml0IG51bWJlciBvcGVyYW5kOiB0aGUgaGFyZHdhcmUgZG9lc24ndCB3b3JrIGxpa2UgdGhhdC4KKworRnJpIEp1bCAxMiAwOTo1MDo0MyAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgc3BpZmYuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRtLWhwOWsyYnNkLmggKHRvcGxldmVsKTogUmVtb3ZlIFJDUyBISVNUT1JZIGxvZy4KKworVGh1IEp1bCAxMSAwMDo0Njo0OCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBEbyB0cnkgc2lnbmVkIGludCBmb3IgQU5TSSBub25kZWNpbWFsIGNvbnN0YW50cy4KKworCSogYy10eXBlY2suYyAocmVjb3JkX2Zvcm1hdF9pbmZvKTogVGhlIGZpcnN0IHRpbWUsIHVzZSB4bWFsbG9jLgorCitXZWQgSnVsIDEwIDE4OjU0OjI2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEZpeCB0eXBvIGluICJpZiAoLi4uKSB4ID0gYTsgZWxzZSB4ID0gYjsiCisJY2FzZTogaGFkIHRlbXAzIGluc3RlYWQgb2YgdGVtcDQuCisKKwkqIGNwbHVzLWxleC5jIChsaW5lbm8sIGVuZF9vZl9maWxlKTogTW92ZSBkZWZpbml0aW9uIHRvIGJlZm9yZQorCWZpcnN0IHVzZS4KKwkocmVpbml0X3BhcnNlX2Zvcl9ibG9jayk6IFZhcmlhYmxlIGBjJyBtdXN0IGJlIGludCB0byBlbnN1cmUgRU9GIGZpdHMuCisJKiBjcGx1cy1pbnB1dC5jIChnZXRjaCk6IFJlbW92ZSBleHRyYW5lb3VzIGRlY2xhcmF0aW9uIG9mIGVuZF9vZl9maWxlLgorCisJKiByZWxvYWQxLmM6IEluY2x1ZGUgaW5zbi1mbGFncy5oLgorCShlbWl0X3JlbG9hZF9pbnNucyk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSByZWxvYWQgYW4gZW50aXJlCisJYWRkcmVzczsgdXNlICJyZWxvYWRfbG9hZF9hZGRyZXNzIiBwYXR0ZXJuLCBpZiBpdCBleGlzdHMuCisJUmVtb3ZlIGV4cGxpY2l0IFNJbW9kZSByZWZlcmVuY2U7IHNob3VsZCBoYXZlIGJlZW4gUG1vZGUsIGJ1dAorCUlOIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgcmVidWlsZGluZyBpdC4KKwkqIE1ha2VmaWxlLmluIChyZWxvYWQxLm8pOiBJbmNsdWRlcyBpbnNuLWZsYWdzLmguCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBJZiByZXBsYWNpbmcgYW4gb3V0cHV0IFJFRyB3aXRoIGEgTUVNLAorCXdyaXRlIGEgQ0xPQkJFUiBmb3IgdGhlIFJFRyBhZnRlciB0aGUgaW5zbi4KKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBBZGQgbmV3IGFyZyBJTlNOOyBpZiBub256ZXJvLCBhZGQgYQorCUNMT0JCRVIgd2hlbiByZXBsYWNpbmcgYSBSRUcgaW4gU0VUX0RFU1Qgd2l0aCBhIE1FTS4KKwkocmVsb2FkLCBlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogQWRkIG5ldyBhcmcgdG8gZWxpbWluYXRlX3JlZ3MuCisJKiBkd2FyZm91dC5jIChvdXRwdXRfYm91bmRfcmVwcmVzZW50YXRpb24sIGxvY2F0aW9uX2F0dHJpYnV0ZSk6CisJTGlrZXdpc2UuCisJCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IElmIGEgcmVnX2VxdWl2X21lbW9yeV9sb2MgaXNuJ3Qgc3RyaWN0bHkgdmFsaWQKKwlhbmQgaXNuJ3Qgc3VmZmljaWVudGx5IHNpbXBsZSwgdXNlIGEgc3RhY2sgc2xvdCBpbnN0ZWFkLgorCShhbHRlcl9yZWdzKTogRG9uJ3QgZGVsZXRlIHJlZ19lcXVpdl9pbml0IGluc25zIGhlcmUuCisJKHJlbG9hZF9hc19uZWVkZWQpOiBEbyBpdCBoZXJlLgorCisJKiBzdG9yLWxheW91dC5jIChnZXRfYmVzdF9tb2RlKTogQ29ycmVjdCB0ZXN0IGZvciBhbGlnbm1lbnQuCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IERvbid0IGdldCBjb25mdXNlZCBieSBOT1RFIGluc25zIGluIGdudWxpYgorCWNhbGwgc2VxdWVuY2UuCisKK1dlZCBKdWwgMTAgMTg6NDA6MzIgMTk5MSAgTWF0dGhldyBTZWxmICAobXNlbGYgYXQgZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoZW51bSBub2RlX3R5cGUpOiAgQWRkZWQgVF9XQVJOSU5HLgorCisJKiBjY2NwLmMgKGRpcmVjdGl2ZV90YWJsZSk6ICBBZGRlZCAjd2FybmluZy4KKworCSogY2NjcC5jIChkb193YXJuaW5nKTogIFByaW50IHdhcm5pbmcgbWVzc2FnZSBhbmQgY29udGludWUuCisKK1dlZCBKdWwgMTAgMTg6Mzg6MjggMTk5MSAgTWF0dGhldyBTZWxmICAobXNlbGYgYXQgZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55IChhdHRyaWIpOiAgUGFzcyAiZm9ybWF0IiBhdHRyaWJ1dGUKKwl0aHJvdWdoLiAgVGFrZXMgb25lIGlkZW50aWZpZXIgYW5kIHR3byBjb25zdGFudHMgYXMgYXJncy4KKwlpZGVudGlmaWVyIG11c3QgYmUgZWl0aGVyIHByaW50ZiBvciBzY2FuZi4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogIFByb2Nlc3MgImZvcm1hdCIgYXR0cmlidXRlcy4KKwlDYWxsIG5ldyByb3V0aW5lIHJlY29yZF9mb3JtYXRfaW5mbygpLgorCisJKiBjLXR5cGVjay5jIChzdHJ1Y3QgZnVuY3Rpb25faW5mbyk6ICBDaGFuZ2VkIGZ1bmN0aW9uX2lkZW50IGZpZWxkOworCXN0b3JlIGlkZW50aWZpZXIgbm9kZSByYXRoZXIgdGhhbiBjaGFyICogdG8gc3BlZWQgbG9va3VwLgorCVJlbmFtZWQgYXJnX251bSBmaWVsZCB0byBmb3JtYXRfbnVtLiAgUmVwbGFjZWQgaXNfdmFyYXJncyBmaWVsZAorCXdpdGggbmV3IGZpcnN0X2FyZ19udW0gZmllbGQuCisKKwkqIGMtdHlwZWNrLmMgKGNoZWNrX2Zvcm1hdCk6ICBNb2RpZmllZCB0byB1c2UgbmV3IGFyZ19udW0gYW5kCisJZmlyc3RfYXJnX251bSBmaWVsZHMuCisKKwkqIGMtdHlwZWNrLmMgKHJlY29yZF9mb3JtYXRfaW5mbyk6ICBOZXcgcm91dGluZS4gIFJlcGxhY2VzIHN0YXRpYworCXRhYmxlIG9mIGZ1bmN0aW9ucyB0byBjaGVjay4KKworCSogY3BsdXMtdHlwZWNrLmMgKHJlY29yZF9mb3JtYXRfaW5mbyk6ICBOZXcgc3R1YiByb3V0aW5lIHNvIGMrKworCXdpbGwgbGluay4gIFNvbWVvbmUgc2hvdWxkIGltcGxlbWVudCBmb3JtYXQgY2hlY2tpbmcgZm9yIGMrKy4KKworCSogYy10eXBlY2suYyAoaW5pdF9mb3JtYXRfaW5mb190YWJsZSk6ICBOZXcgcm91dGluZSB0byBhZGQKKwllbnRyaWVzIGZvciBBTlNJIGZ1bmN0aW9ucyB0byB0YWJsZS4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIENhbGwgaW5pdF9mb3JtYXRfaW5mb190YWJsZSgpLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsKTogIE1vZGlmaWVkIHRvIHVzZSBkeW5hbWljIHRhYmxlCisJcmF0aGVyIHRoYW4gc3RhdGljIG9uZS4gIENvbXBhcmUgaWRlbnRpZmllciBub2RlcyByYXRoZXIgdGhhbgorCXVzaW5nIHN0cmNtcCgpLgorCisJKiBnY2MudGV4aW5mbyAoKTogIERvY3VtZW50ICJmb3JtYXQiIGF0dHJpYnV0ZS4KKworCSogYy10eXBlY2suYyAoY2hlY2tfZm9ybWF0KTogIENhbGwgd2FybmluZygpIGRpcmVjdGx5IHJhdGhlciB0aGFuCisJcmV0dXJuaW5nIHRoZSB3YXJuaW5nIHN0cmluZy4gIFRoaXMgd2F5IHdlIGNhbiBnaXZlIG11bHRpcGxlIHdhcm5pbmdzCisJYnkgY29udGludWluZy4gIFNldmVyYWwgY2hhbmdlcyB0byBtYWtlIGNvbnRpbnVpbmcgc2FmZS4KKworCSogYy10eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbCk6ICBJbmNvcnBvcmF0ZWQgY2hhbmdlZCByZXR1cm4KKwl2YWx1ZSBvZiBjaGVja19mb3JtYXQoKS4KKworCSogYy10eXBlY2suYyAoY2hlY2tfZm9ybWF0KTogIENoZWNrIGZvciBOVUxMIGZvcm1hdCBzdHJpbmcuCisKK1dlZCBKdWwgMTAgMTY6NDA6NTQgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHNkYm91dC5jIChzZGJvdXRfdGFncyk6IERlbGV0ZSB0aGlzIGFuZCB1c2UgdGhlIFRZUEVfREVDTAorCXJlcHJlc2VudGF0aW9uIG9mIHRhZ2dlZCB0eXBlcy4gIFR5cGVzIGFyZSBub3cgb3V0cHV0IGluIHRoZWlyCisJb3JpZ2luYWwgbGV4aWNhbCBvcmRlci4KKwkoc2Rib3V0X3N5bWJvbCk6IFJldHVybiBlYXJseSAob25seSB1c2luZyBzZGJvdXRfb25lX3R5cGUpIHdoZW4gYQorCXRhZ2dlZCB0eXBlIGlzIGVuY291bnRlcmVkLgorCShzZGJvdXRfYmxvY2ssIHNkYm91dF9zeW1ib2wpOiBEb24ndCB1c2Ugc2Rib3V0X3RhZ3MuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogRG9uJ3QgdXNlIHNkYm91dF90YWdzLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX2Z1bmN0aW9uKTogRG9uJ3QgdXNlIHNkYm91dF90YWdzLgorCitXZWQgSnVsIDEwIDE1OjEzOjMzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90YWdzKTogRnVuY3Rpb24gZGVsZXRlZC4gIENhbGxzIGRlbGV0ZWQgdG9vLgorCShkYnhvdXRfdGFnZ2VkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCisJKGRieG91dF9zeW1ib2wpOiBDYWxsIHRoYXQuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2FsbCB0byBkYnhvdXRfdGFncyBkZWxldGVkLgorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogU2ltcGxpZnkgY2hvaWNlIG9mIHR5cGUgZm9yIGludGVnZXJzLgorCVdoZW4gdHJhZGl0aW9uYWwsIGFsbCBpbnRlZ2VycyBhcmUgc2lnbmVkIHVubGVzcyBleHBsaWNpdGx5IHVuc2lnbmVkLgorCitXZWQgSnVsIDEwIDEzOjM1OjI3IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWd1cmUgKG04OGstc3ZyNCk6IE5lZWRzIG1ha2UtbTg4a3N2cjQuCisJKiBtYWtlLW04OGtzdnI0OiBOZXcgZmlsZS4KKworV2VkIEp1bCAxMCAxMzoxODowMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBXYXJuIGlmIGBpbmxpbmUnIGlzIG5vdCBjb25zaXN0ZW50LgorCisJKiBjY2NwLmMgKGhhY2tfdm1zX2luY2x1ZGVfc3BlY2lmaWNhdGlvbik6IEZpeCB0eXBvcy4KKworVHVlIEp1bCAgOSAyMjoyMToyMiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IFJFVFVSTiBpbnNucyBhcmVuJ3QgbGlzdGVkIGluCisJbG9vcF9udW1iZXJfZXhpdF9sYWJlbHMsIHNvIGRvbid0IHRyeSB0byByZW1vdmUgSlVNUF9MQUJFTCBvZiBhCisJUkVUVVJOIGZyb20gdGhhdCBsaXN0LgorCisJKiBydGxhbmFsLmMgKHJlZ19yZWZlcmVuY2VkX2JldHdlZW5fcCk6IE5ldyBmdW5jdGlvbi4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFVzZSBpdCBpbnN0ZWFkIG9mIHJlZ191c2VkX2JldHdlZW5fcCB3aGVuCisJY2hlY2tpbmcgZm9yICJpZiAoLi4uKSB4ID0gYTsgZWxzZSB4ID0gYjsiIGNhc2UuCisKK1R1ZSBKdWwgIDkgMTM6MDM6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKG1vdmVfYmxvY2tfdG9fcmVnKTogRG9uJ3QgZm9yY2VfY29uc3RfbWVtIG9uIG5vbi1jb25zdGFudC4KKworVHVlIEp1bCAgOSAwOToxMzozMiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZWNvcmQgdGFnZ2VkIHR5cGVzIGFzIGEgVFlQRV9ERUNMCisJd2l0aCBhIE5VTEwgREVDTF9OQU1FLgorCShmaW5pc2hfZW51bSk6IERpdHRvLgorCSogY3BsdXMtZGVjbC5jIChmaW5pc2hfZW51bSk6IERpdHRvLgorCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IERpdHRvLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IElnbm9yZSBUWVBFX0RFQ0xzIGZvciB0YWdnZWQgdHlwZXMuCisJKiBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IERpdHRvLgorCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBEaXR0by4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERFQ0xfTkFNRSBtYXkgYmUgbnVsbC4KKworCSogZHdhcmZvdXQuYyAob3V0cHV0X3N5bWJvbCk6IFVzZSBvdXRwdXRfZGllc19mb3JfdGFnZ2VkX3R5cGUgZm9yCisJVFlQRV9ERUNMcyBvZiB0YWdnZWQgdHlwZXMuCisJKGR3YXJmb3V0X291dHB1dF90YWdnZWRfdHlwZSk6IERlbGV0ZWQuCisJKG91dHB1dF9kaWVzX2Zvcl90YWdnZWRfdHlwZSk6IE1hcmsgVFJFRV9BU01fV1JJVFRFTiBlYXJseS4KKworTW9uIEp1bCAgOCAxOTozNjo0NCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogQ2hlY2sgZm9yIGV4dHJhIGxhYmVscyB3aGVuIGRldGVjdGluZworCSJpZiAoLi4uKSB4ID0gYTsgZWxzZSB4ID0gYjsiLiAgSW5jbHVkZSB0aGUgaW5zbiBmb3IgInggPSBhOyIgd2hlbgorCXRlc3RpbmcgZm9yIGRhdGEgY29uZmxpY3QuCisKK01vbiBKdWwgIDggMTk6MzQ6MTQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSwgY2FzZSBNRU0pOiBNdXN0IGNvcHkgYSBNRU0gZXZlbiBpZgorCWl0IGhhcyBhIGNvbnN0YW50IGFkZHJlc3MgaWYgdGhhdCBhZGRyZXNzIGludm9sdmVzIGEgTEFCRUxfUkVGLgorCisJKiBydGxhbmFsLmMgKHJlZ19zZXRfcCk6IE9ubHkgY2hlY2sgZm9yIFJFR19JTkMgbm90ZXMgYW5kIGEgQ0FMTF9JTlNOCisJaWYgd2UgYXJlIHBhc3NlZCBhbiBpbnNuLgorCSogbG9jYWwtYWxsb2MuYyAob3B0aW1pemVfcmVnX2NvcHkpOiBSZW1vdmUgdGVzdHMgbm93IGRvbmUgaW4KKwlyZWdfc2V0X3AuCisKK01vbiBKdWwgIDggMTY6Mzg6NDkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHl5bGV4KTogUGVkYW50aWMgd2FybmluZyBoZXJlIGZvciBgYXNtJy4KKwlObyB3YXJuaW5nIGZvciBgX19hc21fXycuCisJKG1heWJlX3R5cGVfcXVhbCwgbWF5YmVhc20sIGV4dGRlZik6IE5vIHdhcm5pbmcgaGVyZS4KKworCSogb2JqYy1hY3Rpb25zLmM6IFJlbmFtZSBPQkpDX1NFTFNfUl9JTlRTIHRvIE9CSkNfSU5UX1NFTEVDVE9SUy4KKwlSZW5hbWUgT0JKQ19VTklRVUVfU0VMUyB0byBPQkpfTk9OVU5JUVVFX1NFTEVDVE9SUywgcmV2ZXJzaW5nIHNlbnNlLgorCUVsaW1pbmF0ZSBPQkpDX1NFTFNfUl9TVFJVQ1RfUFRSUy4KKworTW9uIEp1bCAgOCAwNjozNzowMCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGxhbmFsLmMgKHJlZ197dXNlZCxzZXR9X2JldHdlZW5fcCk6IEFsbG93IEZST01fSU5TTiA9PSBUT19JTlNOOworCXJldHVybiAwIGluIHRoYXQgY2FzZS4KKworCSoganVtcC5jIChtYXJrX2p1bXBfbGFiZWwpOiBGaXggdHlwbyBpbiB1c2Ugb2YgR0VUX1JUWF9MRU5HVEguCisKKwkqIHJlbG9hZC5jIChyZWxvYWRfc3RyaWN0X2xvdyk6IENoYW5nZSBjb21tZW50IHRvIHNheSB0aGF0IHRoaXMgaXMKKwlhbHdheXMgemVybzsgd2UgZG9uJ3QgdXNlIGl0IGFueSBtb3JlLgorCitTdW4gSnVsICA3IDIyOjE0OjEzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBjaHVyY2h5LmdudS5haS5taXQuZWR1KQorCisJKiB0bS1taXBzLmggKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBGaXggdHlwbyB0aGF0IHJlcXVpcmVkIGEgZnJhbWUKKwlpZiBhbGxvY2Egd2FzIG5vdCBjYWxsZWQsIGluc3RlYWQgb2YgdGhlIHJldmVyc2UuCisKK1N1biBKdWwgIDcgMTc6MTQ6MTcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKHN0cnVjdCBmaWxlX2J1Zik6IE5ldyBmaWVsZCBzeXN0ZW1faGVhZGVyX3AuCisJRXZlcnl0aGluZyB0aGF0IHB1c2hlcyBvbiBpbnN0YWNrIG5vdyBpbml0aWFsaXplcyB0aGlzIGZpZWxkLgorCShmaW5jbHVkZSk6IE5ldyBhcmcgdG8gc2V0IHRoYXQgZmllbGQuICBDYWxsZXJzIGNoYW5nZWQuCisJKGRvX2luY2x1ZGUpOiBQYXNzIHRoYXQgYXJnIGFzIDEgZm9yIDwuLi4+LCBlbHNlIDAuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IFdhcm4gZm9yIGZpcnN0IHVzZSBvZiAjaW1wb3J0CisJZXhjZXB0IGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuCisJKGhhbmRsZV9kaXJlY3RpdmUpOiBTdXBwb3J0ICNpbXBvcnQgaWYgY29tcGlsaW5nIGZvciBOZXh0LgorCisJKiBjY2NwLmMgKGRvX3ByYWdtYSk6IEZvciAjcHJhZ21hIG9uY2UsIHdhcm4gaXQgaXMgb2Jzb2xldGUuCisKK1N1biBKdWwgIDcgMTQ6Mjk6MDQgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiB0bS1hdHQzODYuaCAoTk9fRE9MTEFSX0lOX0xBQkVMKTogRGVmaW5lIHRoaXMgaGVyZSwKKwkqIHRtLWkzODZzY28uaCAoTk9fRE9MTEFSX0lOX0xBQkVMKTogICAgbm90IGhlcmUuCisKK1N1biBKdWwgIDcgMDY6MjA6MDMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsYW5hbC5jIChyZWdfc2V0X3ApOiBSZXR1cm4gMSBpZiBSRUcgaXMgZm91bmQgaW4gYSBSRUdfSU5DCisJbm90ZSBvciBpZiBJTlNOIGlzIGEgQ0FMTF9JTlNOIGFuZCBSRUcgaXMgYSBoYXJkIHJlZy4KKwkocmVnX3NldF9sYXN0KTogT25seSByZXR1cm4gYSByZWdpc3RlciBvciBjb25zdGFudDsgaWYgcmV0dXJuaW5nIGEKKwlyZWdpc3RlciwgZW5zdXJlIGl0IGlzbid0IG1vZGlmaWVkIGJldHdlZW4gdGhlIFNFVCB3ZSBmb3VuZCBhbmQgSU5TTi4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSWYgU01BTExfUkVHSVNURVJfQ0xBU1NFUywgZG9uJ3QgbWFrZSBhCisJc3RvcmUtZmxhZyBpbnNuIGlmIGFueSByZWdpc3RlciBpbnZvbHZlZCBpcyBhIGhhcmQgcmVnLgorCitTYXQgSnVsICA2IDE0OjUxOjE1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IERvbid0IGFib3J0IGZvciB2b2xhdGlsZSBzdHJ1Y3R1cmUgZmllbGQKKwlldmVuIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaW4gYSByZWdpc3Rlci4KKwlOT1RFOiBUaGlzIGxlYXZlcyB0aGUgcHJvYmxlbSBvZiBpbXBsZW1lbnRpbmcgd2hhdGV2ZXIgbWVhbmluZworCWEgdm9sYXRpbGUgZmllbGQgc2hvdWxkIGFjdHVhbGx5IGhhdmUuCisKKwkqIGZvbGQtY29uc3QuYyAoZGl2X2FuZF9yb3VuZF9kb3VibGUpOiBNYWtlIGxudW0gYW5kIGxkZW4gdW5zaWduZWQuCisJVXNlIHRoZSBzbWFsbC1kZW5vbWluYXRvciBhbGdvcml0aG0gb25seSBmb3IgZGVub20gPCAyKioyNC4KKwlGaXggYmFja3dhcmQgY29uZGl0aW9uYWxzIGluID86IG9wZXJhdG9ycyBpbiBnZW5lcmFsIGNhc2UuCisJQ2hhbmdlIGkgKyBqIHRvIGkgLSAxICsgaiB3aGVuIGluZGV4aW5nIG51bS4KKworRnJpIEp1bCAgNSAyMTozNjo1NyAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBnZW5wZWVwLmMgKG1hdGNoX3J0eCwgY2FzZSBNQVRDSF9PUF9EVVApOiBPdXRwdXQgc2VtaWNvbG9uIGFmdGVyCisJImdvdG8iIHN0YXRlbWVudC4KKworRnJpIEp1bCAgNSAwOTo0NTo1NiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQgKGFuZHNpMyk6IEJpYXMgYWx0ZXJuYXRpdmVzIHNvIHdlIGFsd2F5cyBwcmVmZXIgY29uc3RhbnRzLgorCShkZWZpbmVfc3BsaXRzIG9mIERJbW9kZSwgU0Ztb2RlLCBhbmQgREZtb2RlKTogRG9uJ3Qgc3BsaXQKKwl1bmxlc3MgYWZ0ZXIgcmVsb2FkLgorCShhc2hsZGkzLCBsc2hyZGkzKTogRml4IGJ1Z3MgaW4gaW5zdHJ1Y3Rpb24gb3JkZXI7IHVzZSAmIGluCisJb3V0cHV0IGNvbnN0cmFpbnQgc28gY2FuJ3QgY29uZmxpY3Qgd2l0aCBvcGVyYW5kIDI7IHVzZSAnMCcKKwljb25zdHJhaW50IHRvIGFsbG93IG9wZXJhbmRzIDAgYW5kIDEgdG8gYmUgdGhlIHNhbWUgcmVnaXN0ZXIuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19uX3NldHMpOiBNb3ZlIGRlZmluaXRpb24gYmVmb3JlIHVzZS4KKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBDYW5kaWRhdGUgZm9yIGRlbGF5IHNsb3QgY2Fubm90CisJc2V0IGFueXRoaW5nIHNldCBiZXR3ZWVuIGl0IGFuZCB0aGUgZGVsYXkgaW5zbi4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSW4gImlmICguLi4pIHggPSBhOyBlbHNlIHggPSBiOyIsIGNvcnJlY3RseQorCXNwZWNpZnkgcmFuZ2UgdG8gY2hlY2sgaWYgWCBpcyB1c2VkIG9yIHNldC4KKwlVc2UgcnR4X2VxdWFsX3AgdG8gY2hlY2sgZm9yIG1hdGNoaW5nIFguCisKK1RodSBKdWwgIDQgMTU6NTU6NDUgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGRlZmF1bHRfaW5jbHVkZSk6IEFkZCAvdXNyL21hY2gvaW5jbHVkZSBmb3IgTUFDSCBzeXN0ZW1zLgorCisJKiBjb25maWd1cmUgKG04OGstbHVuYSk6IE5lZWRzIG1ha2UtbTg4a2x1bmEuCisJKiBtYWtlLW04OGtsdW5hOiBOZXcgZmlsZS4KKworCSogZHdhcmYuaDogTmV3IGZpbGUgZGVyaXZlZCBmcm9tIHRoZSBVTklYIEludGVybmF0aW9uYWwKKwlQcm9ncmFtbWluZyBMYW5ndWFnZXMgU3BlY2lhbCBJbnRlcmVzdCBHcm91cCBEV0FSRiBzcGVjaWZpY2F0aW9uLgorCSogZHdhcmZvdXQuYyAoaW5jbHVkZXMpOiBJbmNsdWRlICJkd2FyZi5oIi4KKwkoc3Vic2NyaXB0X2RhdGFfYXR0cmlidXRlKTogVXNlIEZNVF9DT0RFIHRvIGVuY29kZSBhcnJheSBzdWJzY3JpcHRzLgorCShsYW5ndWFncmlidXRlKTogTEFORyB0eXBlIG5vIGxvbmdlciBwcm92aWRlZCBieSBkd2FyZi5oLgorCShvdXRwdXRfc291cmNlX2ZpbGVfZGllKTogRGV0ZXJtaW5lIHByb3BlciBsYW5ndWFnZSBhdHRyaWJ1dGUuCisKK1RodSBKdWwgIDQgMTI6MTQ6MTYgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjcGx1cy14cmVmLmM6IGRlZmluZSByaW5kZXggaWYgVVNHCisKK1RodSBKdWwgIDQgMTI6MzY6NTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogQ29ycmVjdGx5IHNwbGl0IC1MIGZyb20gaXRzIGFyZy4KKwkqIFNXSVRDSEVTX05FRURfU1BBQ0VTOiBOZXcgaG9zdCBtYWNoaW5lIG9wdGlvbi4KKwlUaGlzIHJlYWxseSBvdWdodCB0byBiZSBkZWZpbmVkIG5vdyBmb3IgY2VydGFpbiBob3N0cywKKwlidXQgSSBkb24ndCBrbm93IHdoaWNoIG9uZXMgdGhleSBhcmUuCisKK1dlZCBKdWwgIDMgMjM6MzE6MDAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0bS1tNjhrLmggKEFTTV9PVVRQVVRfRkxPQVQpOiBDaGVjayBDUk9TU19DT01QSUxFICh0aGVyZSB3YXMgYSB0eXBvKS4KKworV2VkIEp1bCAgMyAyMjowNTo1NSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgY2FzZSBNSU5VUyk6IEZpeCB0eXBvIGluIG9wIG51bWJlci4KKworCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgVE8KKwl3YXMgYSBsYWJlbCB3aXRoIHplcm8gdXNlcyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KKworCSogY29tYmluZS5jIChzaWduaWZpY2FudF92YWxpZCk6IE5ldyB2YXJpYWJsZS4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBUdXJuIHNpZ25pZmljYW50X3ZhbGlkIG9mZiB1bnRpbCBhZnRlcgorCXdlIGZpbmlzaGVkIGNvbXB1dGluZyByZWdfc2lnbmlmaWNhbnQuCisJKHNpZ25pZmljYW50X2JpdHMpOiBJZ25vcmUgcmVnX3NpZ25pZmljYW50IHdoZW4gc2lnbmlmaWNhbnRfdmFsaWQKKwlpcyB6ZXJvLgorCisJKiBydGxhbmFsLmMgKHJlZ19zZXRfbGFzdCk6IEdvIHBhc3QgQ0FMTF9JTlNOIGFzIGxvbmcgYXMgd2UgYXJlIG5vdAorCWxvb2tpbmcgZm9yIGEgaGFyZCByZWdpc3Rlci4KKworV2VkIEp1bCAgMyAyMTowNzoxOCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogV2hlbiBjb21wdXRpbmcgd2hhdCByZWdpc3RlcnMgYXJlIGRlYWQKKwlhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJsb2NrLCBjb3JyZWN0bHkgaGFuZGxlIFJFR19ERUFEIG5vdGVzCisJdGhhdCByZWZlciB0byBtdWx0aS13b3JkIGhhcmQgcmVnaXN0ZXJzLgorCisJKiBsb29wLmMgKG1hcmtfbG9vcF9qdW1wKTogV2hlbiBpbnZhbGlkYXRpbmcgbG9vcHMgd2l0aCBtdWx0aXBsZQorCWVudHJpZXMsIG11c3QgaW52YWxpZGF0ZSBldmVyeSBuZXN0ZWQgbG9vcCBjb250YWluaW5nIHRoZSB0YXJnZXQKKwlvZiBhIGxvb3AgZW50cnkganVtcCwgZXhjZXB0IGZvciB0aG9zZSB0aGF0IGFsc28gY29udGFpbiB0aGUganVtcAorCWl0c2VsZi4KKworCSogbG9vcC5jIChyZWNvcmRfZ2l2KTogV2hlbiBjb21wdXRpbmcgd2hldGhlciBhIGdpdiBpcworCXJlcGxhY2VhYmxlLCBjaGVjayB3aGV0aGVyIHRoZSBiaXYgdXBkYXRlIGhhcyBhIHZhbGlkIGx1aWQsIGFuZAorCW1hcmsgaXQgYXMgbm90IHJlcGxhY2VhYmxlIGlmIG5vdC4KKworCSogY29tYmluZS5jIChnZW5fcnR4X2NvbWJpbmUpOiBDYWxsIHJ0eF9hbGxvYyBpbnN0ZWFkIG9mIGdlbl9ydHgsCisJYmVjYXVzZSBpdCBpcyBtdWNoIGZhc3RlciwgZXNwZWNpYWxseSBvbiBzb21lIFJJU0MgbWFjaGluZXMuCisKKwkqIGZpeGluY2x1ZGVzOiBBZGQgb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHRvIHB1dAorCXRoZSBmaXhlZCBpbmNsdWRlIGZpbGVzLiAgRWNobyB0aGUgZGlyZWN0b3J5IG5hbWUgd2hlcmUgdGhlCisJaW5jbHVkZSBmaWxlcyB3aWxsIGJlIHB1dC4KKworCSogY2NjcC5jIChzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlKTogRG9uJ3QgZXhhbWluZQorCVNUQU5EQVJEX0lOQ0xVREVfRElSIG9yIC91c3IvbG9jYWwvaW5jbHVkZSB3aGVuCisJTk9fU1RBTkRBUkRfSU5DTFVERV9ESVIgaXMgZGVmaW5lZC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gYnVpbGRpbmcKKwljcm9zcyBjb21waWxlcnMuIAorCShtYWluKTogT25seSBzZW5kIFNJR1BJUEUgc2lnbmFsIGlmIHRoZSBTSUdQSVBFIHNpZ25hbCBleGlzdHMgb24KKwl0aGUgaG9zdC4KKwkocmVzY2FuLCBoYW5kbGVfZGlyZWN0aXZlLCBza2lwX2lmX2dyb3VwLCB2YWxpZGF0ZV9lbHNlLAorCXNraXBfdG9fZW5kX29mX2NvbW1lbnQsIG1hY2FyZzEsIGRpc2NhcmRfY29tbWVudHMpOiBBY2NlcHQgJy8vJyBhcworCWEgY29tbWVudCBpbiBPYmplY3RpdmUtQyBhcyB3ZWxsIGFzIEMrKy4gIFRoZSBPYmplY3RpdmUgQyBsYW5ndWFnZQorCXNwZWNpZmllcyB0aGF0ICcvLycgc3RhcnRzIGEgY29tbWVudC4KKworCSogLmdkYmluaXQgKHB0bik6IERlZmluZSBuZXcgbWFjcm8gdG8gcHJpbnQgb3V0IHRoZSBuYW1lIG9mIGEgdHlwZQorCW5vZGUuCisKKwkqIHN0YWIuZGVmOiBDb3JyZWN0IGVycm9ycyBpbiB0YWJsZSBmb3IgdmFsdWVzIG9mIERTTElORSBhbmQKKwlCU0xJTkUuICBEb2N1bWVudCB0aGUgY29uZmxpY3QgYmV0d2VlbiBCUk9XUyBhbmQgQlNMSU5FLiAgRG9jdW1lbnQKKwl0aGUgdmFsdWUgb2YgdGhlIEJST1dTIGZpZWxkLgorCitUdWUgSnVsICAyIDIzOjI2OjIwIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBtaXBzLXRmaWxlLmMgKHRvcGxldmVsKTogQWRkIGEgY29tbWVudCBleHBsYWluaW5nIHRoZSBNSVBTIEVDT0ZGCisJZmlsZSBmb3JtYXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgorCitUdWUgSnVsICAyIDE0OjAwOjM5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogUmVwb3J0IGVycm9yIGhlcmUgaWYgdGhlICJhcnJheSIKKwlpcyBub3QgYW4gYXJyYXkgb3IgcG9pbnRlci4gIERvbid0IGxlYXZlIHRoaXMgZm9yIHRoZSBQTFVTX0VYUFIuCisKKwkqIGNjY3AuYzogSW5sY3VkZSBjb250YWluaW5nIGZpbGUgbmFtZXMvbGluZXMgaW4gZXJyb3IgbWVzc2FnZXMuCisJKHByaW50X2NvbnRhaW5pbmdfZmlsZXMpOiBOZXcgZnVuY3Rpb24uCisJKGVycm9yKiwgd2FybmluZyk6IENhbGwgaXQuCisJKGZpbmNsdWRlKTogSW5jcmVtZW50IGlucHV0X2ZpbGVfc3RhY2tfdGljayB3aGVuIGZpbGUgY2hhbmdlcy4KKworCSogY2NjcC5jOiBJbmNsdWRlIGRlc2NyaXAuaC4KKworVHVlIEp1bCAgMiAwNzo0NDoxOSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIHRtLW04OGsuaCAoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IERlZmluZSBvbmx5IGZvciBTREIuCisJKiB0bS1tODhrZGd1eC5oIChBU19CVUdfKik6IFN1cHBvcnQgdGhlc2UgZm9yIG5vdy4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBJbnZva2UgZHdhcmZvdXRfb3V0cHV0X3RhZ2dlZF90eXBlCisJb25seSB3aGVuIHByb2R1Y2luZyBEV0FSRiBkZWJ1Z2dpbmcgaW5mby4KKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEaXR0by4KKworTW9uIEp1bCAgMSAyMzowMzozNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDbG9zZSBzdGFja19yZWdfZHVtcF9maWxlIGlmZiBTVEFDS19SRUdTLgorCitNb24gSnVsICAxIDE1OjE3OjU3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2V0X3NpZ25pZmljYW50KTogSWdub3JlIENMT0JCRVJzLgorCShzaW1wbGlmeV9hbmRfY29uc3RfaW50LCBjYXNlIFNVQlJFRyk6IE9ubHkgaWdub3JlIHBhcmFkb3hpY2FsIFNVQlJFR3MKKwlpZiBCWVRFX0xPQURTX1pFUk9fRVhURU5ELgorCShyZWNvcmRfdmFsdWVfZm9yX3JlZyk6IEZpeCB0eXBvOyBoYWQgSSBmb3IgUkVHTk8uCisKK01vbiBKdWwgIDEgMDg6Mjg6MDkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfbGluZSk6IE91dHB1dCBEV0FSRiBsaW5lIG51bWJlcnMuCisKKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X291dHB1dF90YWdnZWRfdHlwZSk6IE5ldyBmdW5jdGlvbi4KKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogQ2FsbCBpdC4KKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBDYWxsIGl0LgorCisJKiBkd2FyZm91dC5jIChpbmNsdWRlcyk6IE5lZWQgaW5zbi1jb25maWcuaCBhbmQgcmVsb2FkLmguCisJKGxvY2F0aW9uX2F0dHJpYnV0ZSk6IFVzZSBlbGltaW5hdGVfcmVncyBmb3IgY29ycmVjdCBleHByZXNzaW9uLgorCShvdXRwdXRfYm91bmRfcmVwcmVzZW50YXRpb24pOiBVc2UgU0FWRV9FWFBSX1JUTCB0byBnZXQgcnRsIGFuZAorCXRoZW4gdXNlIGVsaW1pbmF0ZV9yZWdzLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFdoZW4gZmluaXNoZWQsIGluZGljYXRlIHJlZ19lcXVpdl9jb25zdGFudAorCWFuZCByZWdfZXF1aXZfbWVtb3J5X2xvYyBhcmUgbm8gbG9uZ2VyIHZhbGlkLgorCShlbGltaW5hdGVfcmVncyk6IERvbid0IGF0dGVtcHQgdXNlIG9mIHJlZ19lcXVpdl9jb25zdGFudCBvcgorCXJlZ19lcXVpdl9tZW1vcnlfbG9jIGlmIHRoZXkgYXJlbid0IHZhbGlkLiAgTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIHJlbG9hZC5oOiBEZWNsYXJlIGVsaW1pbmF0ZV9yZWdzLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogT25seSBjYWxsIGR3YXJmb3V0X2ZpbGVfc2NvcGVfc3ltYm9sCisJZm9yIFZBUl9ERUNMcy4gCisKK1N1biBKdW4gMzAgMTU6NDk6MzkgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9NRU1DUFkpOiBJZiBhbGlnbm1lbnQgdGVzdAorCWZhaWxzLCBhbmQgZnVuY3Rpb24gd2FzIHJlYWxseSBCVUlMVF9JTl9TVFJDUFksIHplcm8gb3V0IGxlbmd0aAorCXBhcmFtZXRlciBiZWZvcmUgZXhwYW5kaW5nIGNhbGwuCisKK1N1biBKdW4gMzAgMTg6Mjc6MTQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJbiAiaWYgKC4uLikgeCA9IGE7IGVsc2UgeCA9IGI7IiwgZG9uJ3QKKwltb3ZlIHRoZSAieCA9IGI7IiBpZiB0aGUgdGVzdCBtb2RpZmllcyBYIG9yIGlmIFggaXMgYSBoYXJkIHJlZ2lzdGVyCisJYW5kIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMgaXMgZGVmaW5lZC4KKwlUdXJuICJpZiAoLi4uKSB4ID0gMTsgZWxzZSB7Li4ufSBpZiAoeCkgLi4uIiBjb2RlIG9uIHdoZW4gd2UgaGF2ZSBjYzAuCisKK1N1biBKdW4gMzAgMTM6NDk6MDMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnbnVsaWIyLmMgKF9fYnVpbHRpbl9zYXZlcmVncyk6CisJRm9yIGk4NjAsIG1ha2UgZGF0YSBzdHJ1Y3R1cmUgZml0IGluIHdpdGggdmEtaTg2MC5oLgorCisJKiB0cmVlLmMgKGdjY19vYnN0YWNrX2luaXQpOgorCVN1cHBvcnQgT0JTVEFDS19DSFVOS19BTExPQyBhbmQgT0JTVEFDS19DSFVOS19GUkVFLgorCisJKiBjYWxscy5jIChwcmVwYXJlX2NhbGxfYWRkcmVzcyk6IDNyZCBhcmcgbm93IGFkZHJlc3Mgb2YgY2hhaW4gdmFyLgorCShleHBhbmRfY2FsbCk6IENhbGwgY2hhbmdlZC4KKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBDYWxsIGNoYW5nZWQuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeF9sZXhpY2FsX2FkZHIpOiBJbiByZWN1cnNpdmUgY2FsbCwgcGFzcyBzbG90IGFkZHJlc3MuCisKKwkqIE1ha2VmaWxlLmluIChjc2Uubyk6IEFkZGVkIGRlcHMuCisKKwkqIE1ha2VmaWxlLmluIChHTlVMSUIyX0NGTEFHUyk6IFVzZSAtTzIuCisKKwkqIGdudWxpYjEuYywgZ251bGliMi5jIChhYm9ydCk6IFVuZGVmaW5lIG9ubHkgaWYgZGVmaW5lZC4KKworCSogZ2VuYXR0ci5jIChtYWluKTogRml4IHR5cG8gaW4gY29tbWVudCBlbmQuCisKK1NhdCBKdW4gMjkgMjE6NTc6MjggMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IHpldnMuc2ljcy5zZSkKKworCSogbG9uZ2xvbmcuaCAoX19zcGFyYzhfXyB1bXVsX3BwbW0pOiBJbnNlcnQgMyBub3A6cyBmb3Igd3IgZGVsYXkuCisJKiBsb25nbG9uZy5oIChfX19JQk1SMl9fKTogRGVmaW5lIHVtdWxfcHBtbSwgYWRkX3NzYWFhYSwgc3ViX2RkbW1zcy4uCisJKiBsb25nbG9uZy5oIChfX3NwYXJjX18pOiBEb24ndCBjYWxsIC51bXVsOyBleHBhbmQgYXNtIGluc3RlYWQuCisJICBEb24ndCBkZWZpbmUgX191bXVsc2lkaTMgKGkuZS4gdXNlIGRlZmF1bHQgZGVmaW5pdGlvbikuCisKK1NhdCBKdW4gMjkgMDY6MjU6MTkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0bS12YXguaCAoQ1BQX1NQRUMpOiBOZXcgbWFjcm8uCisJKExJQl9TUEVDKTogSGFuZGxlIC1tZy4KKworCSogY2NjcC5jIChpbnN0YWxsX2J1aWx0aW5zKTogRml4IGJhY2t3YXJkIHRlc3Qgb2Ygb2JqYy4KKworCSogZm9sZC1jb25zdC5jIChzaXplX2ludCk6IE5vIG5lZWQgdG8gdGVzdCBzaWduIG9mIE5VTUJFUi4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IFNwbGl0IC1MIGZyb20gaXRzIGFyZy4KKworCSogZ2NjLmMgKFNfSVNSRUcpOiBEZWZpbmUgaWYgbm90IGRlZmluZWQuCisJKGRlbGV0ZV90ZW1wX2ZpbGVzKTogVXNlIGl0LgorCisJKiBsaW1pdHMuaCAoVUNIQVJfTUFYLCBDSEFSX01BWCwgVVNIUlRfTUFYKTogRGVsZXRlIGBVJy4KKwkoTE9OR19NQVgsIFVMT05HX01BWCk6IEFkZCBgTCcuCisKK0ZyaSBKdW4gMjggMjI6MjI6NTggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZSAocmVhbGNsZWFuKTogRGVsZXRlIHN0YWdlMSwgc3RhZ2UyLCBzdGFnZTMuCisKKwkqIGdjYy5jIChmYXRhbCkgW0hBVkVfVkZQUklOVEZdOiBEbyBwcmludCBwcm9ncmFtIG5hbWUuCisKK0ZyaSBKdW4gMjggMTU6MzQ6MDggMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlCisJdGhlIHNpemUgaXMgbm90IGEgQ09OU1RfSU5ULCBhbmQgaGFzIGEgdmFsdWUgb2YgMC4KKworCSogZmxhZ3MuaCAoZmxhZ19ub19pbmxpbmUpOiBNb2RpZnkgY29tbWVudCB0byBtYXRjaCB0aGUgb25lIGluCisJdG9wbGV2LmMuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFdoZW4gY3JlYXRpbmcgbmV3IHJ0eCwKKwltYWtlIHN1cmUgYWxsIG9mIHRoZSBuZXcgYml0ZmllbGRzIGFyZSBjb3BpZWQsIGUuZy4KKwlSRUdfTE9PUF9URVNUX1AsIExBQkVMX09VVFBVVF9MT09QX1AsIGV0Yy4KKworCSogbG9vcC5jIChsb29wX29wdGltaXplKTogQ2FsbCByZWdfc2NhbiBhZnRlcgorCWZpbmRfYW5kX3ZlcmlmeV9sb29wcywgYmVjYXVzZSBpdCBtYXkgY2hhbmdlIHJlZ2lzdGVyIGxpZmV0aW1lcy4KKwkoZmluZF9hbmRfdmVyaWZ5X2xvb3BzKTogQWZ0ZXIgbW92aW5nIGEgYmxvY2sgb2YgY29kZSBvdXRzaWRlIHRoZQorCWxvb3AsIG11c3QgcmVhZGp1c3QgdGhlIGxvb3BfbnVtYmVyX2V4aXRfbGFiZWwgYW5kCisJTEFCRUxfT1VUU0lERV9MT09QX1AgZGF0YSBvZiB0aGUgbW9kaWZpZWQganVtcCBhbmQgdGhlIG1vdmVkIGp1bXAuCisJdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEZWxldGUgcmVnX3NjYW4gY2FsbCBiZWZvcmUKKwlsb29wX29wdGltaXplLgorCitGcmkgSnVuIDI4IDEzOjE2OjM3IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB0bS1taXBzLmggKHRvcGxldmVsKTogQWRkIHRhcmdldF9mbGFncyB0byBleHRlcm5hbHMgZGVjbGFyZWQuCisJKHRvcGxldmVsKTogQWRkIGRzbG90c19udW1iZXJfbm9wcywgbWlwc19sb2FkX3JlZ3ssMn0sCisJbWlwc19maWxsX2RlbGF5X3Nsb3QgZXh0ZXJuYWwgZGVjbGFyYXRpb25zIGZvciBkZWxheSBzbG90IHJlb3JnLgorCShDQzFQTFVTX1NQRUMpOiBCeSBkZWZhdWx0LCBwYXNzIC1mbm8tZ251LWJpbnV0aWxzIHRvIGNjMXBsdXMuCisJKFRBUkdFVF9GTEFHUyk6IEFkZCAtbXdjOCwgLW13YzE2LCAtbXdjMzIgdG8gc2V0IHNpemUgb2Ygd2NoYXJfdCwKKwl0aG91Z2ggdGhlIHN3aXRjaGVzIGFyZSBub3QgdXNlZCByaWdodCBub3cuCisJKFRBUkdFVF9GTEFHUyk6IEFkZCAtbXNvZnQtZmxvYXQgY29kZSBmcm9tIHJmZ0BuY2QuY29tIHRvIGNvbXBpbGUKKwlvbiBzeXN0ZW1zIHcvbyBmbG9hdGluZyBwb2ludC4KKwkoVEFSR0VUX0ZMQUdTKTogLW1kZWJ1Z2Ygc3VwcHJlc3NlcyBmaWxsaW5nIGxvYWQgZGVsYXkgc2xvdHMuCisJKEhBUkRfUkVHTk9fT0spOiBSZWxheCBjb25zdHJhaW50cywgYWxsb3cgYW55dGhpbmcgaW4gR1AKKwlyZWdpc3RlcnMsIGFueXRoaW5nIGluIGV2ZW4gRlAgcmVnaXN0ZXJzLCBpbnQncyBvbmx5IGluIG11bHRpcGx5CisJYW5kIGRpdmlkZSByZWdpc3RlcnMsIGludC9DQyBpbiB0aGUgRlBTVyByZWdpc3Rlci4KKwkoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IFJlcXVpcmUgZnJhbWUgaWYgYWxsb2NhIGlzIGNhbGxlZCBmb3IKKwlub3cuCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IEluZGV4IGZyb20gYW4gYXJyYXkgKG1pcHNfY2hhcl90b19jbGFzcykKKwlpbnN0ZWFkIG9mIGhhdmluZyBsb3RzIG9mID86J3MuICBBbHNvLCBhbGxvdyAnZCcgdG8gc2lnbmlmeSBHUAorCXJlZ2lzdGVycy4KKwkoRU5DT0RFX1NFR01FTlRfSU5GTyk6IE9ubHkgcmVjb3JkIHRoaW5ncyBiZWluZyBpbiBzbWFsbCBkYXRhL2JzcworCWlmIC1tZ3BPUFQgKC1PIHNldHMgYnkgZGVmYXVsdCksIC1PLCBhbmQgLUcgeHggd2hlcmUgeHggPiAwLgorCShGSU5BTF9QUkVTQ0FOX0lOU04pOiBSZXdvcmsgdG8gYXV0b21hdGljYWxseSBub3QgZmlsbCB0aGUKKwlwcmV2aW91cyBpbnN0cnVjdGlvbidzIGxvYWQgZGVsYXkgc2xvdHMgd2l0aCBub3AncyBpZiBpdCBpcyBzYWZlLgorCShBU01fT1VUUFVUX0xBQkVMKTogSWYgY29tcGlsaW5nIGNvbGxlY3QsIGRvbid0IHVzZSBhc3NlbWJsZV9uYW1lLgorCShBU01fR0xPQkFMSVpFX0xBQkVMKTogSWYgY29tcGlsaW5nIGNvbGxlY3QsIGRvbid0IHVzZQorCWFzc2VtYmxlX25hbWUuCisJKEFTTV9PVVRQVVRfTEFCRUxSRUZfQVNfSU5UKTogRGVmaW5lIHRoaXMgZm9yIGNvbGxlY3QuCisJKEFTTV9PVVRQVVRfSU5UKTogSWYgY29sbGVjdCwgZG9uJ3QgdXNlIG91dHB1dF9hZGRyX2NvbnN0LgorCisJKiBtaXBzLm1kIChhbGwgZmxvYXRpbmcgcG9pbnQpOiBJZiAtbXNvZnQtZmxvYXQsIGRvbid0IGFsbG93IGFueQorCWZsb2F0aW5nIHBvaW50IGJ1aWx0aW4gb3BlcmF0aW9ucy4KKwkoYWxsIHBhdHRlcm5zKTogVXNlICdkJyBjb25zdHJhaW50IHRvIGxpbWl0IHRoaW5ncyB0byBHUAorCXJlZ2lzdGVycywgcmF0aGVyIHRoYW4gJ3InLiAgVGhpcyBhbGxvd3MgdW5pb25zIG9mCisJZmxvYXQvaW50L2RvdWJsZSB0byBvY2N1cHkgYW55IHJlZ2lzdGVycy4KKwkoKmV4dGVuZCopOiBDYWxsIG1pcHNfbW92ZV8xd29yZCB0byBoYW5kbGUgbG9hZHMsIHdoaWNoIGluIHR1cm4KKwlzZWVzIGlmIHdlIGNhbiBvbWl0IHRoZSBsb2FkIG5vcC4KKwkoZml4X3RydW5jKik6IFJlZG8sIHNpbmNlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW4gaGFuZGxlIG1vdmluZyB0bworCXRoZSBhcHByb3ByaWF0ZSByZWdpc3RlciBzZXQuCisJKG1vdmRmX3hmZXIqKTogVXNlIGV4cGxpY2l0IHJldHVybidzIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoCisJYW5kIGhhdmluZyB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgaW4gYSByZWdpc3RlciBmcm9tIHRoZSBwcmV2aW91cworCWNhbGwuCisJKG1vdnNmX3hmZXIqKTogTmV3IHBhdHRlcm5zIHRvIGFjY29taWRhdGUgdW5pb25zIG9mIGZsb2F0cyBhbmQKKwlpbnQncy4KKwkobW92c2lfdW5hbGlnbmVkKTogTmV3IGRlZmluZV9leHBhbmQgdG8gY2FsbCBlaXRoZXIgbW92c2lfdWx3IG9yCisJbW92c2lfdXN3LiAgQWxzbywgaWYgbm90IGEgbWVtb3J5IG9wZXJhdGlvbiwgdXNlIG1vdnNpLgorCShtb3ZzaV91bHcpOiBTZXQgdXAgdG8gb21pdCBsb2FkIGRlbGF5IG5vcCBpZiB3ZSBjYW4uCisJKG1vdnNpX3Vzdyk6IFVzZSBtZW1vcnlfb3BlcmFuZCBpbnN0ZWFkIG9mIHNpbXBsZV9tZW1vcnlfb3BlcmFuZC4KKwlBbHNvLCBhbGxvdyBzdG9yaW5nIDAgdG8gYW4gdW5hbGlnbmVkIGxvY2F0aW9uLgorCSh2YXJpb3VzIG1vdmUgcGF0dGVybnMpOiBtaXBzX21vdmVfMXdvcmQgbm93IHRha2VzIGEgdGhpcmQKKwlhcmd1bWVudCB0byBzcGVjaWZ5IHdoZXRoZXIgYSBsb2FkIHNob3VsZCBzaWduIG9yIHplcm8gZXh0ZW5kLgorCShjYWxsX3ZhbHVlKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQgb24gcmV0dXJuIHZhbHVlLgorCShwcm9iZSk6IFR1cm4gaW50byBkZWZpbmVfZXhwYW5kLCBhbmQgc2V0IGEgcmVnaXN0ZXIgdG8gdGhlCisJY29udGVudHMgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgdGhlIHN0YWNrIHBvaW50ZXIgd2l0aCB2b2xhdGlsCisJc2V0LgorCisJKiBvdXQtbWlwcy5jICh0b3BsZXZlbCk6IEFkZCBuZXcgZ2xvYmFsIHZhcmlhYmxlczoKKwlkc2xvdHNfbnVtYmVyX25vcHMsIG1pcHNfbG9hZF9yZWd7LDJ9LCBtaXBzX3JlZ25vX3RvX2NsYXNzLAorCW1pcHNfY2hhcl90b19jbGFzcy4KKwkoc2ltcGxlX21lbW9yeV9vcGVyYW5kKTogSWYgbm90IG9wdGltaXppbmcsIG5vIGdsb2JhbCBtZW1vcnkKKwlyZWZlcmVuY2UgaXMgYXNzdW1lZCB0byBiZSBpbiB0aGUgR1AgYXJlYS4KKwkobWlwc19maWxsX2RlbGF5X3Nsb3QpOiBOZXcgZnVuY3Rpb24gdG8gdGVsbCBGSU5BTF9QUkVTQ0FOX0lOU04KKwl0aGUgY3VycmVudCBpbnNuIGlzIGEgbG9hZCBhbmQgbWF5IG5lZWQgYSBub3AuCisJKG1pcHNfbW92ZV8xd29yZCk6IFRha2UgYSB0aGlyZCBhcmd1bWVudCB0byBzYXkgd2hldGhlciBsb2FkIGJ5dGUKKwlhbmQgbG9hZCBoYWxmLXdvcmQgc2lnbiBleHRlbmQgb3IgemVybyBleHRlbmQuICBDaGFuZ2UgYWxsCisJY2FsbGVycy4gIElmIHRoaXMgaXMgYSBsb2FkLCBjYWxsIG1pcHNfZmlsbF9kZWxheV9zbG90cyB0bworCXNjaGVkdWxlIHRoZSBub3BzLiAgQ2hhbmdlIGFsbCByZXR1cm4ncyB0byBzZXR0aW5nIGEgdmFyaWFibGUsIGFuZAorCWZhbGxpbmcgdGhyb3VnaCB0byB0aGUgZW5kLgorCShtaXBzX21vdmVfMndvcmRzKTogIElmIHRoaXMgaXMgYSBsb2FkLCBjYWxsIG1pcHNfZmlsbF9kZWxheV9zbG90cworCXRvIHNjaGVkdWxlIHRoZSBub3BzLiAgQ2hhbmdlIGFsbCByZXR1cm4ncyB0byBzZXR0aW5nIGEgdmFyaWFibGUsCisJYW5kIGZhbGxpbmcgdGhyb3VnaCB0byB0aGUgZW5kLgorCShmdW5jdGlvbl9hcmcpOiBpZiAtbXNvZnQtZmxvYXQsIGZsb2F0aW5nIHBvaW50IGlzIHBhc3NlZCBpbiBHUAorCXJlZ2lzdGVycy4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IEluaXRpYWxpemUgbWlwc19jaGFyX3RvX2NsYXNzLgorCShwcmludF9vcGVyYW5kKTogJSggYW5kICUpIG5vIGxvbmdlciBkbyAuc2V0IG5vbWFjcm8uCisJKHByaW50X29wZXJhbmQpOiAlIyBwcmludHMgI25vcCBpZiBnYXMgb3IgLW1zdGF0cy4KKwkocHJpbnRfb3BlcmFuZCk6IENoZWNrIGZvciB0b28gbWFueSAlKSwgJV0sIGFuZCAlPidzLgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBBbGxvY2F0ZSBzcGFjZSBpbiBzdGFjayB0byBob2xkIEZQLCBqdXN0IGluCisJY2FzZSB3ZSBsYXRlciBuZWVkIGEgRlAgYW5kIHByZXZpb3VzbHkgdGhvdWdodCB3ZSBjb3VsZCBlbGltaW5hdGUKKwlpdC4KKwkoc2F2ZV9yZXN0b3JlKTogVGFrZSBhIHN0cmluZyB0byBpbmRpY2F0ZSB0aGUgMndvcmQgbG9hZC9zdG9yZSB0bworCXVzZSwgYnV0IGRvbid0IHVzZSBpdCBhdCBwcmVzZW50LiAgQ2hhbmdlIGFsbCBjYWxsZXJzLiAgSG9tZQorCXZhcmFyZ3MgcmVnaXN0ZXJzIHdpdGggc2QgaWYgd2UgY2FuLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IERlYWwgd2l0aCBvbmUgb3IgbW9yZSBvdXRzdGFuZGluZyBub3AncyBmcm9tCisJRklOQUxfUFJFU0NBTl9JTlNOLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IFJldmFtcCAtbXN0YXRzIG91dHB1dCBmb3JtYXQuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogWmVybyBuZXcgZ2xvYmFsIHZhcmlhYmxlcy4KKworCSogbWFrZS1kZWNyb3NlICh0b3BsZXZlbCk6IFNvcnQgbWFrZSB2YXJpYWJsZXMuCisJKENMSUIpOiBBZGQgLWxsZCBsaWJyYXJ5LgorCShMQU5HVUFHRVMpOiBBZGQgYnVpbGQgb2YgY29sbGVjdC1vc2YgYW5kIGcrKy4KKwkoVUxUUklYX0RJUik6IENoYW5nZSBpbnRlcm5hbCB3b3JrIGRpcmVjdG9yeSBsb2NhdGlvbi4KKwkoY3BsdXMtbGV4Lm8pOiBEb24ndCBvcHRpbWl6ZSB0byBhdm9pZCBwcm9ibGVtIHdpdGggMS4zOSBjb21waWxlci4KKwkoY29sbGVjdC1vc2YpOiBBZGQgcnVsZXMgdG8gYnVpbGQgT1NGL3Jvc2UgdmVyc2lvbiBvZiBjb2xsZWN0LgorCisJKiBtYWtlLW1pcHMgKExBTkdVQUdFUyk6IEFkZCBidWlsZCBvZiBnKysuCisKKwkqIHRtLWRlY3Jvc2UuaCAoU0laRV9UWVBFKTogU3BlY2lmeSB0byBiZSBsb25nIHVuc2lnbmVkIGludC4KKwkoUFRSRElGRl9UWVBFKTogU3BlY2lmeSB0byBiZSBsb25nIGludC4KKwkoV0NIQVJfVFlQRSk6IFNwZWNpZnkgdG8gYmUgbG9uZyB1bnNpZ25lZCBpbnQuCisKKwkqIHNkYm91dC5jIChwbGFpbl90eXBlXzEpOiBBZGQgc3VwcG9ydCBmb3IgdW5rbm93biB0YWdzIGlmCisJU0RCX0FMTE9XX1VOS05PV05fUkVGRVJFTkNFUyBpcyBkZWZpbmVkLiAgVGhlIE1JUFMgRUNPRkYgc3VwcG9ydAorCW5lZWRzIHRoaXMsIGJ1dCBzdGFuZGFyZCBDT0ZGIHR5cGljYWxseSBkb2Vzbid0IGFsbG93IHVua25vd24KKwlyZWZlcmVuY2VzLgorCisJKiBnY2MudGV4aW5mbyAoRGVidWdnaW5nIEluZm8pOiBEb2N1bWVudAorCVNEQl9BTExPV19VTktOT1dOX1JFRkVSRU5DRVMgYW5kIFNEQl9BTExPV19GT1JXQVJEX1JFRkVSRU5DRVMuCisKKwkqIGNvbGxlY3Qtb3NmLmMgKHdob2xlIGZpbGUpOiBOZXcgZmlsZSB0byBwcm92aWRlIGNvbGxlY3Qgc3VwcG9ydAorCW9uIE9TRi9yb3NlLgorCitGcmkgSnVuIDI4IDA5OjIwOjE4IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWd1cmUgKG04OGstbHVuYSk6IE5ldyB0YXJnZXQuCisJKiB0bS1tODhrbHVuYS5oOiBOZXcgZmlsZSBmb3IgdGhlIE9tcm9uIEx1bmEvODhrLgorCSogeG0tbTg4ay5oOiBEb24ndCB1c2UgVVNHIGZvciB0aGUgbHVuYTg4ay4KKworCSogdG0tbTg4a2RndXguaDogREcvVVggaW1wbGVtZW50cyBjb2ZmIGFuZCBlbGYuICBDdXJyZW50bHkgZWxmIGlzCisJYSBzdHJhbmdlIHZhcmlhbnQgb2YgY29mZiB0aGF0J3Mgbm9uLXN0YW5kYXJkIChpdCB1c2VzIFNEQgorCWRlYnVnZ2luZyBpbmZvIGZvciBleGFtcGxlKS4gIFNvb24sIHRoZSBERy9VWCBlbGYgd2lsbCBzdXBwb3J0CisJRFdBUkYuICBUaGVzZSBjaGFuZ2VzIHByb3ZpZGUgdHJhbnNpdGlvbmFsIHN1cHBvcnQgZm9yIGFsbCB0aHJlZS4KKwkoRFdBUkZfREVCVUdHSU5HX0lORk8sIFNEQl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZSBib3RoLgorCShWRVJTSU9OXzAzMDBfU1lOVEFYKTogVHJ1ZSB3aGVuIC1tc3ZyNCBhbmQgLW12ZXJzaW9uLTAzLjAwLgorCSogdG0tbTg4a3N2cjQuaCAoQVNNX0ZJTEVfRU5ELCBBU01fT1VUUFVUX0RXQVJGX0xJTkUpOiBNb3ZlIHRoZXNlCisJdG8gdG0tbTg4ay5oLiAgVGhleSBhcmUgZHdhcmYgc3BlY2lmaWMuCisJKiB0bS1tODhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbXZlcnNpb24tMDMuMDAgYW5kIC1tZHdhcmYuCisJKE9WRVJSSURFX09QVElPTlMpOiBJZiB1c2luZyB2ZXJzaW9uIDAzLjAwIHN5bnRheCwgYXNzdW1lIERXQVJGX0RFQlVHLgorCisJKiB0bS1tODhrLmggKFJFR19BTExPQ19PUkRFUik6IEFkYXB0IHNsaWdodGx5IGZvciB1c2luZyByMjYtcjI5LgorCisJKiBvdXQtbTg4ay5jIChtODhrX2RlYnVnZ2VyX29mZnNldCk6IERvbid0IGNvbXBsYWluIGlmIHRoZSBiYXNlCisJcmVnaXN0ZXIgaXMgb3B0aW1pemVkIGF3YXkuCisKK1RodSBKdW4gMjcgMjE6NDM6MzYgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAobWVtcmVmX3JlZmVyZW5jZWRfcCwgbWVtcmVmX3VzZWRfYmV0d2Vlbl9wKToKKwlOZXcgZnVuY3Rpb25zLgorCSh1cGRhdGVfZXF1aXZfcmVncyk6IENhbGwgbWVtcmVmX3VzZWRfYmV0d2Vlbl9wLgorCitUaHUgSnVuIDI3IDE5OjU5OjM2IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCB3YXRjaC5jb20pCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IENoYW5nZWQgdGhlIHZhcmlvdXMgImxhbmdfIyIgc3RyaW5ncyB0bworCWluZGljYXRlIHdoaWNoIG9mIHNldmVyYWwgcG9zc2libGUgZmllbGRzIGFyZSBiZWluZyBleGFtaW5lZDsgbmV3CisJc3RyaW5ncyBhcmUgInRyZWVfIyIsICJkZWNsXyMiLCAidHlwZV8jIi4KKworVGh1IEp1biAyNyAxNTowNTo0MyAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKKworCSogeG0tbWlwcy5oIChPTkxZX0lOVF9GSUVMRFMpOiBEZWZpbmUgaWYgbm90IGNvbXBpbGluZyB3aXRoIEdDQworCXNpbmNlIHRoZSBNSVBTIGNvbXBpbGVyIHRyZWF0cyBlbnVtIGJpdGZpZWxkcyBhcyBzaWduZWQuCisKK1dlZCBKdW4gMjYgMTk6NDg6MTYgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzY2hlZC5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBFeHBsaWNpdGx5IGhhbmRsZSBjYXNlIHdoZXJlIGJvdGgKKwlYIGFuZCBZIGFyZSBDT05TVC4KKwkoc2NoZWRfYW5hbHl6ZV8yKTogRG8gY3JlYXRlIGRlcGVuZGVuY2llcyBmb3IgaW5zbnMgd2l0aCBSRUdfRVFVSVYKKwlub3Rlcy4KKwkoc2NoZWRfbm90ZV9zZXQpOiBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBkZXN0aW5hdGlvbgorCXJlZ2lzdGVyIGlzIGEgbXVsdGktd29yZCBoYXJkIHJlZ2lzdGVyLgorCShhdHRhY2hfZGVhdGhzKTogRG9uJ3QgYWRkIGEgUkVHX0RFQUQgbm90ZSB0byBhbiBpbnNuIHdpdGggYQorCVJFR19VTlVTRUQgbm90ZSB0aGF0IG1lbnRpb25zIHRoZSBzYW1lIHJlZ2lzdGVyLiAgQ29ycmVjdGx5IGhhbmRsZQorCXRoZSBjYXNlIHdoZXJlIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhIG11bHRpLXdvcmQgaGFyZAorCXJlZ2lzdGVyLgorCShzY2hlZHVsZV9ibG9jayk6IEFsc28gY2FsbCBzY2hlZF9ub3RlX3NldCBmb3IgQ0xPQkJFUnMgd2hlbgorCWNvbXB1dGluZyB3aGljaCByZWdpc3RlcnMgYXJlIGRlYWQgYXQgdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxvY2suCisJQWxzbyBjYWxsIHNjaGVkX25vdGVfc2V0IGZvciBVU0VzIHdoZW4gY29tcHV0aW5nIHdoYXQgcmVnaXN0ZXJzCisJYXJlIHN0aWxsIGxpdmUgYWZ0ZXIgYSBqdXN0IHNjaGVkdWxlZCBpbnNuLgorCShyZWdub191c2VfaW4pOiBOZXcgZnVuY3Rpb24sIHN1YnJvdXRpbmUgb2Ygc3BsaXRfaGFyZF9yZWdfbm90ZXMuCisJU2VhcmNoZXMgYW4gcnR4IGZvciBhbnkgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiByZWdpc3RlciwgYW5kCisJcmV0dXJucyB0aGUgcmVnaXN0ZXIgcnR4IHVzZWQgaWYgYW55LgorCShzcGxpdF9oYXJkX3JlZ19ub3Rlcyk6IE5ldyBmdW5jdGlvbi4gIEhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYQorCW11bHRpLXdvcmQgaGFyZCByZWdpc3RlciB3aXRoIGEgUkVHX0RFQUQgbm90ZSBnZXRzIHNwbGl0LiAgQ3JlYXRlcworCWEgbmV3IFJFR19ERUFEIG5vdGUgZm9yIGVhY2ggcGFydCBvZiB0aGUgb3JpZ2luYWwgaGFyZCByZWdpc3RlcgorCXVzZWQgYnkgdGhlIHNwbGl0IGluc25zLgorCShuZXdfaW5zbl9kZWFkX25vdGVzKTogRG9uJ3QgYWRkIGEgUkVHX0RFQUQgbm90ZSB0byBhbiBpbnNuIHdpdGggYQorCVJFR19VTlVTRUQgbm90ZSB3aGljaCBtZW50aW9ucyB0aGUgc2FtZSByZWdpc3Rlci4KKwkodXBkYXRlX2xpbmtzKTogQWRkIGNhbGwgdG8gbmV3IGZ1bmN0aW9uIHNwbGl0X2hhcmRfcmVnX25vdGVzLgorCUNvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgZGVzdCBvZiB0aGUgb3JpZ2luYWwgaW5zbiB3YXMgYQorCW11bHRpLXdvcmQgcmVnaXN0ZXIgd2hpY2ggd2FzIHNwbGl0IGluIHRoZSBzcGxpdCBpbnNucy4gIEluIHRoaXMKKwljYXNlLCB0aGUgZGVzdCBpcyBubyBsb25nZXIga2lsbGVkIGhlcmUsIHNvIG11c3QgcmVtb3ZlIHRoZQorCVJFR19ERUFEIG9uIHRoZSBsYXN0IHByZXZpb3VzIGluc24gaW4gdGhpcyBiYXNpYyBibG9jayB3aGljaCB1c2VkCisJZGVzdCwgaWYgYW55IHN1Y2ggZXhpc3RzLgorCisJKiB1bnJvbGwuYyAocmVnX2RlYWRfYWZ0ZXJfbG9vcCk6IENoZWNrIHRoYXQgYSBDT0RFX0xBQkVMIHdoaWNoIGlzCisJdGhlIHRhcmdldCBvZiBhIEpVTVBfSU5TTiBoYXMgYSBub24temVybyBQUkVWX0lOU04gZmllbGQgYmVmb3JlCisJdHJ5aW5nIHRvIGRlcmVmZW5jZSBpdC4gIEZhaWwgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgaW5zbi4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBGaXggdHlwby4KKwkqIGxvY2FsLWFsbG9jLmMgKG9wdGltaXplX3JlZ19jb3B5KTogTGlrZXdpc2UuCisJKiBnbG9iYWwtYWxsb2MgKGhhcmRfcmVnX2NvcHlfcHJlZmVyZW5jZXMpOiBMaWtld2lzZS4KKwkqIGdjYy50ZXhpbmZvIChSRUdfTE9PUF9URVNUX1ApOiBMaWtld2lzZS4KKwkqIG9wdGFicy5jIChleHBhbmRfZmxvYXQpOiBMaWtld2lzZS4KKwkqIHRtLXZheHYuaCAoQVNNX09VVFBVVF9BU0NJSSk6IExpa2V3aXNlLgorCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X21vdmVfZG91YmxlKTogU2lnbiBleHRlbmQgQ09OU1RfSU5UcyB0aGF0CisJZmVlZCBESW1vZGUgdGFyZ2V0cy4KKwkqIHRtLXNwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERvbid0IGFjY2VwdCBhIExBQkVMX1JFRgorCWFzIGEgbGVnYWwgYWRkcmVzcy4gIEFsc28sIGRlbGV0ZSBvYnNvbGV0ZSBwYXJ0cyBvZiBwcmVjZWVkaW5nCisJY29tbWVudC4KKworCSogcmVsb2FkMS5jIChhbHRlcl9yZWcpOiBPbmx5IHRyeSB0byBkZWxldGUgdGhlIHJlZ19lcXVpdl9pbml0CisJaW5zbiBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRlbGV0ZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvCisJZGVsZXRlX2RlYWRfaW5zbi4KKworCSogdG9wbGV2LmMgKG1haW4pOiBIYW5kbGUgLWdkYnggaW4gYWRkaXRpb24gdG8gLWdzZGIgZm9yCisJb3J0aG9nb25hbGl0eS4KKwkqIGdjYy50ZXhpbmZvOiBEb2N1bWVudCAtZ2RieC4KKworVHVlIEp1biAyNSAwOTo1NzowOCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoY2FzZXNpKTogRG9uJ3QgZW1pdCBhIGJhcnJpZXI7IHRoZSBkaXNwYXRjaCBjb2RlIG11c3QKKwlhZGpvaW4gdGhlIHRhYmxlLgorCSogdG0tbTg4ay5oIChET05UX1JFRFVDRV9BRERSKTogRG9uJ3QgdXNlIHRoaXMuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogVGhlIFBJQyByZWdpc3RlciBpcyBhbHNvIGNhbGwtdXNlZC4KKwkqIG91dC1tODhrLmMgKG04OGtfbGF5b3V0X2ZyYW1lKTogU2F2ZSB0aGUgUElDIHJlZ2lzdGVyLgorCitUdWUgSnVuIDI1IDA3OjQwOjQzIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBGTkRFQ0wgc2hvdWxkCisJYmUgQ1VSUkVOVF9GVU5DVElPTl9ERUNMLgorCisJKiBjb21iaW5lLmMgKGZpbmRfc3BsaXRfcG9pbnQpOiBJZiB3ZSBzZWUgYW4gQU5EIG9wZXJhdGlvbiBhcyB0aGUKKwlmaXJzdCBvcGVyYW5kIG9mIHNvbWUgbm9uLUFORCBvcGVyYXRpb24sIHVzZSBpdCBhcyBhIHNwbGl0IHBvaW50LgorCShzdWJzdCk6IEFkZCBjb3VudGVyIHRvIGxpbWl0IHJlc3RhcnRzLCBnbyB0byByZXN0YXJ0IG1vcmUgb2Z0ZW4uCisJKHN1YnN0LCBjYXNlIEFORCk6IElmIHdlIGdldCAoaW9yIChhbmQgKFggQzEpIEMyKSkgYW5kIGNhbid0CisJcmVzdGFydCBtb3JlIHRoYW4gb25jZSwgcmV3cml0ZSB3aXRoIEMxIGFzIHNtYWxsIGFzIHBvc3NpYmxlIGFuZCBleGl0LgorCisJKiBjc2UuYyAoY3NlX2VuZF9vZl9iYXNpY19ibG9jayk6IERvbid0IHB1dCBicmFuY2ggaW4gb3VyIHBhdGggbW9yZQorCXRoYW4gb25jZS4KKwkoY3NlX21haW4pOiBDbGVhciBQQVRIX1NJWkUgd2hlbiBza2lwcGluZyBhIGJsb2NrLgorCShjc2VfYmFzaWNfYmxvY2spOiBVc2UgR0VUX1JUWF9DTEFTUy4KKworVHVlIEp1biAyNSAwNzozOToyOSAxOTkxICBNYXR0aGV3IFNlbGYgIChtc2VsZiBhdCBuZXh0LmNvbSkKKworCSogdmFyYXNtLmMgKGNvbnN0X2hhc2gsIGNvbXBhcmVfY29uc3RhbnRfMSwgcmVjb3JkX2NvbnN0YW50XzEpOgorCUZvciBBRERSX0VYUFIncywgZG9uJ3QgaGFzaCBhZGRyZXNzIG9mIFNZTUJPTF9SRUYuICBPbmx5IHVzZQorCW9mZnNldCBhbmQgbmFtZSBvZiBzeW1ib2wuICBUaGlzIGFsbG93cyBjb25zdHJ1Y3RvcnMgd2hpY2gKKwljb250YWluIHBvaW50ZXJzIHRvIGlkZW50aWNhbCBzdHJpbmcgbGl0ZXJhbHMgdG8gYmUgdW5pcXVlZC4KKworCSogbG9vcC5jIChsb29wX29wdGltaXplLCBpbml0X2xvb3ApOiAgTW92ZWQgY2FsbCB0bworCWdjY19vYnN0YWNrX2luaXQoKSBmcm9tIGxvb3Bfb3B0aW1pemUoKSB0byBpbml0X2xvb3AoKS4KKworCSogcmVsb2FkMS5jIChyZWxvYWQsIGluaXRfcmVsb2FkKTogIE1vdmVkIGNhbGwgdG8KKwlnY2Nfb2JzdGFja19pbml0KCkgZnJvbSByZWxvYWQoKSB0byBuZXcgZnVuY3Rpb24gaW5pdF9yZWxvYWQoKS4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6ICBDYWxsIG5ldyBmdW5jdGlvbiBpbml0X3JlbG9hZCgpLgorCitNb24gSnVuIDI0IDE2OjA1OjU3IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZW5kX3N0bXRfZXhwcik6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisKKwkqIHJlbG9hZDEuYyAobW9kZXNfZXF1aXZfZm9yX2NsYXNzX3ApOiBPbmx5IGZhaWwgaWYgcmVnaXN0ZXJzIGluCisJQ0xBU1MgdGhhdCBjYW4gaG9sZCBBTExPQ0FURV9NT0RFIGNhbid0IGFsc28gaG9sZCBPVEhFUl9NT0RFLiAgRG8KKwlub3QgZmFpbCBmb3IgdGhlIHJldmVyc2UgdGVzdC4gIEFMTE9DQVRFX01PREUgaXMgYWx3YXlzIGEgbGFyZ2VyCisJb3Igc2FtZSBzaXplIG1vZGUgYXMgT1RIRVJfTU9ERSwgYW5kIHdpbGwgYmUgdGhlIG1vZGUgdGhhdCByZWxvYWQKKwl1c2VzIHdoZW4gYWxsb2NhdGluZyBzcGlsbCByZWdpc3RlcnMuICBSZXdyaXRlIGNvbW1lbnRzIHRvIGV4cGxhaW4KKwluZXcgYmVoYXZpb3VyLgorCShyZWxvYWQpOiBDaGFuZ2UgY2FsbCB0byBtb2Rlc19lcXVpdl9mb3JfY2xhc3NfcCB0byBtYXRjaCBuZXcKKwlzZW1hbnRpY3MuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBXaGVuIHNpbXBsaWZ5aW5nIChhc2hpZnRydAorCShhc2hpZnQgaW5uZXJfY29uc3RfaW50KSBjb25zdF9pbnQpLCB3YXMgY2hlY2tpbmcgdGhlIHdyb25nIG51bWJlciBvZgorCWhpZ2ggb3JkZXIgYml0cyBvZiBpbm5lcl9jb25zdF9pbnQuICBBbHNvIGNvcnJlY3QgdHlwb3MgaW4gY29tbWVudHMuCisKKwkqIGMtY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBNdXN0IGFsc28gY2hlY2sgQVJHMSBmb3IKKwl1bnNpZ25lZG5lc3MsIGJlY2F1c2UgQVJHMCBjb3VsZCBiZSBhIGNvbnN0YW50IHdoZW4gRVhQUiBpcyBhCisJTUlOVVNfRVhQUi4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFdoZW4gc3BsaXR0aW5nLCBpdCBpcyBub3Qgc2FmZSB0byB1c2UKKwlJMkRFU1QgaWYgaXQgaXMgcmVmZXJlbmNlZCBieSBORVdQQVQuCisKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IEFmdGVyIGNvbnZlcnRpbmcgUkVHX0RFQUQgbm90ZXMgdG8KKwlSRUdfVU5VU0VEIG5vdGVzLCBjbGVhciBQTEFDRSBpZiBpdCBhbHJlYWR5IGhhcyBhIFJFR19VTlVTRUQgbm90ZSwKKwl0byBwcmV2ZW50IGFkZGluZyBhIGR1cGxpY2F0ZSBSRUdfVU5VU0VEIG5vdGUuCisKKwkqIGdjYy50ZXhpbmZvIChTSUdORURfQ0hBUl9TUEVDKTogRG9jdW1lbnQuCisKK01vbiBKdW4gMjQgMTA6MDI6MzIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9zZXRfYXJvdW5kX2xvb3ApOiBFbnN1cmUgdGhlIGluc24gd2UgZmluZCBpbiBmcm9udAorCW9mIHRoZSBsb29wIGRvZXMgdGhlIHNldCBpbiB0aGUgcHJvcGVyIG1vZGUuCisKKwkqIG9wdGFicy5jIChleHBhbmRfZmxvYXQpOiBBbHdheXMgZG8gY29udmVyc2lvbnMgdG8gRk1PREUgaW4gdGhlCisJc2lnbmVkbmVzcyBvZiB0aGUgaW5wdXQuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMsIGZpbmRfcmVsb2Fkc190b3BsZXYpOiBJZiByZWdfZXF1aXZfYWRkcmVzcworCWlzIG5vdCBhIGNvbnN0YW50IGFkZHJlc3MsIGNvcHkgaXQgaW4gY2FzZSBpdCBpcyBzaGFyZWQuCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBDb3B5IHJlZ19lcXVpdl9tZW1vcnlfbG9jIGluIGNhc2UKKwlpdCBpcyBzaGFyZWQgYW5kIHdlIG1ha2UgYSByZWxvYWQgaW5zaWRlIGl0LgorCisJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IFJlZ2lzdGVycyB0aGF0IGFyZW4ndCB1c2VkIG11c3QgZGllCisJaW4gdGhlIGluc24gYWZ0ZXIgdGhlaXIgYmlydGggc28gdGhleSBjb25mbGljdCB3aXRoIG90aGVyIG91dHB1dHMuCisKKwkqIHZheC5tZDogUmVwbGFjZSBwYXR0ZXJucyB0byBjb252ZXJ0IChhbmQgKGFzaGlmdHh4KSkKKwlpbnRvIChhbmQgKHJvdGF0ZXh4KSkgd2l0aCB0aGUgcGF0dGVybnMgdGhhdCBhcmUgYWN0dWFsbHkgbWFkZQorCWJ5IGNvbWJpbmUuCisJV2UgY2FuIGFsbG93IG9mZnNldHRhYmxlIGFkZHJlc3NlcyBmb3Igb3BlcmFuZCAwIGFuZCBpdCBpcyBub3QKKwllYXJseS1jbG9iYmVyLgorCisJKiBvdXQtcnM2MDAwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBDb3JyZWN0bHkgaW50ZXJwcmV0IHJlc3VsdCBvZgorCXRydWVfcmVnbnVtLgorCisJKiBvdXQtcnM2MDAwLmMgKG91dHB1dF90b2MpOiBXcml0ZSBGUCBjb25zdGFudHMgaW4gVE9DLgorCSogdG0tcjYwMDAuaCAoVEFSR0VUX0ZQX0lOX1RPQyk6IE5ldyBmbGFnLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1mcC1pbi10b2MgYW5kIC1tbm8tZnAtaW4tdG9jLgorCShUQVJHRVRfREVGQVVMVCk6IC1tZnAtaW4tdG9jIGlzIHRoZSBkZWZhdWx0LgorCShBU01fT1VUUFVUX1NQRUNJQUxfUE9PTF9FTlRSWV9QKTogRlAgY29uc3RhbnRzIG1heSBiZSBwdXQgaW4gdGhlIFRPQy4KKworTW9uIEp1biAyNCAwMDo1Mjo0NCAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIG91dC1pMzg2LmMgKG91dHB1dF9maXhfdHJ1bmMpOiBJZiB0aGUgZGVzdCBvcGVyYW5kIG1lbnRpb25zIHRoZQorCXN0YWNrIHBvaW50ZXIsIHRoZW4gd2UgbXVzdCBhZGp1c3QgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHRlbXBvcmFyeQorCXNwYWNlIHdlIGFsbG9jYXRlIG9uIHRoZSBzdGFjayBoZXJlLgorCitTYXQgSnVuIDIyIDA3OjI0OjMzIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2Vfc2V0X2Fyb3VuZF9sb29wKTogRml4IHR5cG8gaW4gY2FsbCB0byBub3RlX21lbV93cml0dGVuLgorCisJKiBlbWl0LXJ0bC5jIChyZW9yZGVyX2luc25zKTogQ29ycmVjdGx5IGhhbmRsZSBjYXNlIHdoZW4gQUZURVIgaXMgbGFzdAorCWluc24uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogQ29ycmVjdGx5IGhhbmRsZSBYID8gQSA6IFggKyAxLgorCVByZXZpb3VzIGNoYW5nZSBjYWxsZWQgaW52ZXJ0X3RydXRodmFsdWUgd2hpY2ggY2FuIG1vZGlmeSBFWFA7IHdlIG5vdworCWNhbGwgaXQgYSBzZWNvbmQgdGltZSB0byB1bmRvIGl0cyBhY3Rpb24gaWYgZG9fc3RvcmVfZmxhZyBmYWlscy4KKworU2F0IEp1biAyMiAwMjozNzo1OSAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGNzZS5jIChjc2Vfc2V0X2Fyb3VuZF9sb29wKTogRG9uJ3QgdHJ5IHRvIGluaXRpYWxpemUgYW4KKwlhdXRvbWF0aWMgc3RydWN0dXJlLgorCisJKiByZWctc3RhY2suYyAoY29tcGFyZV9mb3Jfc3RhY2tfcmVnKTogSWYgYm90aCBvcGVyYW5kcyB0byBhCisJY29tcGFyZSBhcmUgdGhlIHNhbWUgc3RhY2sgcmVnLCBkb24ndCBwcm9jZXNzIGRlYXRoIG9uIHRoZSBzZWNvbmQuCisKKwkqIGkzODYubWQgKGFsbCBmbG9hdCBwYXR0ZXJucyk6IERvbid0IGFsbG93IGNvbnN0YW50cyBpbiB0aGUKKwlvcGVyYW5kIHByZWRpY2F0ZXMuCisJKGFsbCBwYXR0ZXJucyB1c2luZyBjb252ZXJ0XzM4N19vcCk6IFNwbGl0IHBhdHRlcm5zIGludG8gb25lIHVzaW5nCisJRkxPQVQgYW5kIGFub3RoZXIgdXNpbmcgRkxPQVRfRVhURU5ELgorCitGcmkgSnVuIDIxIDIwOjM3OjAzIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBzY2hlZC5jIChsaW5lX25vdGUsIGxpbmVfbm90ZV9oZWFkKTogTmV3IHZlY3RvcnMgZm9yIHVzZSB3aGVuCisJZGVhbGluZyB3aXRoIGxpbmUtbnVtYmVyIG5vdGVzLgorCSh1bmxpbmtfbm90ZXMpOiBQdXQgbGluZS1udW1iZXIgbm90ZXMgaW4gTElORV9OT1RFIGZvciByZXVzZS4KKwkoc2NoZWR1bGVfYmxvY2spOiBKdXN0IGJlZm9yZSByZW9yZGVyaW5nIHRoZSBpbnNucywgd2FsayB0aGUgaW5zbnMKKwlhbmQgcmVjb3JkIHRoZSBsaW5lLW51bWJlciBub3RlIGluIGVmZmVjdCBmb3IgZWFjaCBvbmUuICBXaGVuCisJcmVvcmRlcmluZyBpcyBjb21wbGV0ZSwgcmVzdG9yZSB0aGUgbGluZS1udW1iZXIgbm90ZXMgYXMgbmVlZGVkLgorCShzY2hlZHVsZV9pbnNucyk6IFdoZW4gZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHByZXNlbnQsIGFsbG9jYXRlCisJYW5kIGluaXRpYWxpemUgbGluZV9ub3RlIGFuZCBsaW5lX25vdGVfaGVhZC4gIEFmdGVyIHNjaGVkdWxpbmcsCisJd2FsayB0aGUgaW5zbnMgdG8gZGVsZXRlIHJlZHVuZGFudCBsaW5lLW51bWJlciBub3Rlcy4KKworRnJpIEp1biAyMSAxOTo1NDoyOSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIG9sZC1zcGFyYy5jLCBvdXQtb2xkLXNwYXJjLmMsIHRtLW9sZC1zcGFyYy5oOiBEZWxldGUgb2Jzb2xldGUKKwlmaWxlcy4KKworCSogbG9vcC5jIChsb29wX251bWJlcl9leGl0X2xhYmVscyk6IEV4cGFuZCBjb21tZW50LiAgTWVudGlvbiB0aGF0CisJcmV0dXJucyBhcmUgbm90IGluY2x1ZGVkIGJlY2F1c2UgYWxsIGJpdnMgYW5kIGdpdnMgYXJlIHBzZXVkb3MgYW5kCisJaGVuY2UgbXVzdCBiZSBkZWFkIGFmdGVyIGEgcmV0dXJuLgorCitGcmkgSnVuIDIxIDA3OjEwOjU2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgUExVUywgTUlOVVMpOiBSZW1vdmUgY2FzZXMgZm9yIHRoaW5ncyBsaWtlCisJKHgteSkreTsgbm93IGRvbmUgaW4gc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbi4KKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBIYW5kbGUgKHNpZ25fZXh0ZW5kICh0cnVuY2F0ZSAuLikpCisJYXMgdXNlZCBpbiBjYXNlc2kgcGF0dGVybnMuCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgUExVUywgTUlOVVMpOiBEb24ndCBkbyBtb3N0CisJc2ltcGxpZmljYXRpb25zIGlmIElFRUUgZmxvYXRpbmctcG9pbnQuCisJQWRkIGNhc2VzIGZvciB0aGluZ3MgbGlrZSAoeC15KSt5LgorCShmb2xkX3J0eCk6IFJlcGxhY2UgUEMgd2l0aCBMQUJFTF9SRUYgaWYgd2UgYXJlIGltbWVkaWF0ZWx5IGluCisJZnJvbnQgb2YgYSBqdW1wIHRhYmxlLgorCU1vdmUgY29kZSB0byBhcHBseSBhc3NvY2lhdGl2ZSBsYXcgdG8gYWZ0ZXIgd2UgaGF2ZSBmb2xkZWQgdGhlCisJb3BlcmFuZHMuCisJKGZvbGRfcnR4LCBjYXNlIE1FTSk6IEZpeCBlcnJvcnMgaW4gY2hlY2tpbmcgZm9yIGluZGV4IG9mIGp1bXAKKwl0YWJsZSBiZWluZyBvdXQgb2YgcmFuZ2UuCisJRm9yIEFERFJfRElGRl9WRUMsIHJldHVybiBhIE1JTlVTIG9yICh0cnVuY2F0ZSAobWludXMgTDEgTDIpKS4KKwkoZm9sZF9ydHgsIGNhc2UgUExVUyk6IElmIHdlIGhhdmUgKHBsdXMgWCAobGFiZWxfcmVmIEwpKSwgc2VlCisJaWYgWCBpcyBlcXVpdmFsZW50IHRvIChtaW51cyBMMSBMMikuCisJKGNzZV9pbnNuKTogUHV0IChtaW51cyBMMSBMMikgaW4gYHNyY19jb25zdCcgc28gaXQgZ2V0cyBpbiBhCisJUkVHX0VRVUFMIG5vdGUgYW5kIGdldHMgcHV0IGluIHRoZSBoYXNoIHRhYmxlLgorCUlmIHdlIGFyZSBicmFuY2hpbmcgdG8gYSBqdW1wIHRhYmxlLCB3ZSBhcmUgcmVhbGx5IGJyYW5jaGluZyB0bworCWltbWVkaWF0ZWx5IGFmdGVyIHRoZSBqdW1wIHRhYmxlCisJUmVtb3ZlIHNwZWNpYWwtY2FzZSBrbHVkZ2UgZm9yIEFERFJfRElGRl9WRUM7IG5vdyBoYW5kbGVkIHByb3Blcmx5LgorCisJKiB2YXgubWQgKGNhc2VzaSk6IE1ha2UgcGF0dGVybiBhZ3JlZSB3aXRoIG1hY2hpbmUgaW5zdHJ1Y3Rpb247CisJc3BlY2lmaWNhbGx5LCBpbmRleCBpcyBtdWx0aXBsaWVkIGJ5IHR3byBhbmQgdGhlIGNvbXBhcmlzb24gaXMgTEVVLAorCW5vdCBMRS4KKworCSogY3NlLmMgKGVxdWl2X2NvbnN0YW50KTogSWYgWCBpcyBhIG9uZS13b3JkIFNVQlJFRyBvZiBhIGxhcmdlcgorCXF1YW50aXR5LCB1c2UgYGxvb2t1cF9hc19mdW5jdGlvbicgdG8gc2VlIGlmIGl0IGlzIGVxdWl2YWxlbnQKKwl0byBhIENPTlNUX0lOVC4KKworCSoganVtcC5jIChzcXVlZXplX25vdGVzKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIGxvb3AuYyAoZmluZF9hbmRfdmVyaWZ5X2xvb3BzKTogTmVlZCB0byBjYWxsIHNxdWVlemVfbm90ZXMgd2hlbgorCW1vdmluZyBibG9jayBvZiBjb2RlIChzZWUgbGFzdCBjaGFuZ2UpLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogV2hlbiBmb3JjaW5nIGNvbnN0YW50IHRvIG1lbW9yeSwKKwlzZXQgcmVjb2dfb3BlcmFuZCB0byB0aGUgcmVzdWx0IG9mIGZpbmRfcmVsb2Fkc190b3BsZXYuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgUExVUyk6IEFkZCAoYzEgLSBhKSArIGMyIC0+IChjMStjMikgLSBhLgorCShzdWJzdCwgY2FzZSBNSU5VUyk6IFVzZSBzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uIHJhdGhlciB0aGFuCisJbWFraW5nIENPTlNUX0lOVCBmcm9tIHN1YnRyYWN0aW9uIG9mIHR3byBJTlRWQUwncyB0byBlbnN1cmUgaXQKKwlnZXRzIHRydW5jYXRlZCBhcyBhcHByb3ByaWF0ZSBmb3IgaXRzIG1vZGUuCisJQWRkIChjMSAtIChjMiAtIGEpKSAtPiAoYzEtYzIpICsgYS4KKworCSogYTI5ay5tZCAobmVnZGYyKTogVXNlIG9wZXJhbmRfc3Vid29yZF9mb3JjZSwgbm90IG9wZXJhbmRfc3Vid29yZC4KKwkobW92c2YpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkLCBub3QgZ2VuX2xvd3BhcnQuCisKKwkqIG91dC1yczYwMDAuYyAodV9zaG9ydF9jaW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKHByaW50X29wZXJhbmQpOiBTdXBwb3J0IGF1dG8tZGVjcmVtZW50LgorCisJKiB0bS1yczYwMDAuaCAoT1ZFUlJJREVfT1BUSU9OUyk6IEZvcmNlIHByb2ZpbGluZyBvZmYuCisJKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBSZXR1cm4gTk9fUkVHUyBmb3IgcmVhbCBDT05TVF9ET1VCTEUuCisJKEhBVkVfUFJFX0RFQ1JFTUVOVCk6IERlZmluZSB0aGlzLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MsIEdPX0lGX01PREVfREVQRU5ERU5UX0FERFJFU1MpOgorCVN1cHBvcnQgUFJFX0RFQy4KKworCSogcnM2MDAwLm1kICh6ZXJvX2V4dGVuZHh4KTogVXNlIHJsaW5tLCBub3QgYW5kaWwgc28gd2UgYXZvaWQKKwljbG9iYmVyaW5nIGNyMC4KKwkoYXJpdGgtYW5kLXJlY29yZCBwYXR0ZXJucyk6IENvcnJlY3Qgc29tZSBiYWQgb3BlcmFuZCBudW1iZXJzLgorCVB1dCBTSW1vZGUgb3V0cHV0IGFzIG9wZXJhbmQgMCB0byBpbXByb3ZlIHJlZ2lzdGVyIHR5aW5nLgorCShhbmRzaSk6IFByZWZlciBybGlubSBvdmVyIGFuZGlsIGFuZCBhbmRpdS4KKwkobG9hZC9zdG9yZS13aXRoLXVwZGF0ZSk6IEFkZCBwYXR0ZXJucyBmb3IgdGhlc2UgaW5zdHJ1Y3Rpb25zLgorCShhbGxvY2F0ZV9zdGFjayk6IE5ldywgcmVwbGFjZXMgc3RhY2sgcHJvYmUuCisJKGFkZC1hbmQtY29tcGFyZSk6IE5ldyBwYXR0ZXJucywgd2l0aCBkZWZpbmVfc3BsaXQuCisJKHN1YnRyYWN0LW9uZS1hbmQtanVtcCk6IEFsbG93IG91dHB1dHMgYW55d2hlcmU7IGhhbmRsZSB3aXRoCisJbWF0Y2hfc2NyYXRjaCBhbmQgZGVmaW5lX3NwbGl0LgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfc3RtdF9leHByKTogSWYgYGxhc3RfZXhwcl92YWx1ZScgaXMgMCwgc2V0IGl0CisJdG8gY29uc3QwX3J0eC4KKworCSogcmVnY2xhc3MuYyAocmVnX25fc2V0cyk6IE1vdmUgZGVmaW5pdGlvbiB0byBiZWZvcmUgdXNlLgorCisJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IERvbid0IHRyeSB0byBzdWJzdGl0dXRlIFJFR19FUVVBTAorCXZhbHVlcyB1bmxlc3MgdGhleSBhcmUgY29uc3RhbnRzLgorCitGcmkgSnVuIDIxIDAyOjM3OjU5IDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEb24ndCBjbGVhciBhZnRlcl9jYWxsIGZvciBlYWNoIGluc24uCisKK1N1biBKdW4gMTYgMTc6Mjg6NDMgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCwgcmVsb2FkX2FzX25lZWRlZCwgY2hvb3NlX3JlbG9hZF9yZWdzKTogRW5hYmxlCisJY29kZSB0byBhdm9pZCByZXR1cm4gcmVnaXN0ZXIgd2hlbiBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIGRlZmluZWQuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERvbid0IGxvb2sgZm9yIG5vLW9wIG1vdmVzIGlmCisJcHJvY2Vzc29yIGhhcyBTVEFDS19SRUdTLgorCisJKiBoYXJkLXJlZy1zZXQuaCAoR09fSUZfSEFSRF9SRUdfRVFVQUwpOiBOZXcgbWFjcm8uCisKKwkqIGp1bXAuYyAoY3Jvc3NfanVtcF9kZWF0aF9tYXR0ZXJzKTogTmV3IHZhcmlhYmxlLgorCShmaW5kX2Nyb3NzX2p1bXApOiBJZiBwcm9jZXNzb3IgaGFzIFNUQUNLX1JFR1MsIGNvbXBhcmUgZGVhdGgKKwlub3RlcyBpZiB0aGV5IG1hdHRlci4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSwgcmVzdF9vZl9jb21waWxhdGlvbik6IFN1cHBvcnQgbmV3CisJc3RhY2stcmVncyBjb252ZXJzaW9uIHBhc3MuCisJKG1haW4sIGNvbXBpbGVfZmlsZSwgcmVzdF9vZl9jb21waWxhdGlvbik6IEFkZCBzdXBwb3J0IGZvciAtZGsgdG8KKwlkdW1wIGFmdGVyIHN0YWNrLXJlZ3MgY29udmVyc2lvbi4KKwkqIHJlZy1zdGFjay5jOiBOZXcgZmlsZS4gIEltcGxlbWVudHMgc3RhY2stcmVncyBjb252ZXJzaW9uIHBhc3MuCisJKiBNYWtlZmlsZS5pbiAocmVnLXN0YWNrLm8pOiBOZXcgZmlsZS4KKworCSogdG0taTM4Ni5oIChTVEFDS19SRUdTKTogTmV3IG1hY3JvLgorCShhbGwgcmVnaXN0ZXIgbWFjcm9zKTogRGVmaW5lIGFsbCBlaWdodCBmbG9hdCBwb2ludCByZWdpc3RlcnMuCisJKEhBUkRfUkVHTk9fTlJFR1MpOiBPbmx5IG9uZSBmbG9hdCByZWcgaXMgbmVlZGVkIGZvciBhbnkgbW9kZS4KKwkoSEFSRF9SRUdOT19NT0RFX09LKTogTW92ZSBjb2RlIGhlcmUgZnJvbSBvdXQtaTM4Ni5jLgorCShGSVJTVF9TVEFDS19SRUcsTEFTVF9TVEFDS19SRUcpOiBOZXcgbWFjcm9zLgorCShBUkdfUE9JTlRFUl9SRUdOVU0pOiBNb3ZlIHRvIHJlZyAxNi4KKwkoRlBfUkVHTk9fUCk6IFJlY29nbml6ZSBhbGwgZmxvYXQgcmVncy4KKwkoUUlfUkVHX1ApOiBOZXcgbWFjcm8uCisJKFNUQUNLX1JFR19QLE5PTl9TVEFDS19SRUdfUCxTVEFDS19UT1BfUCk6IE5ldyBtYWNyb3MuCisJKFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUCk6IERlbGV0ZS4KKwkoT1ZFUkxBUFBJTkdfUkVHTk9fUCk6IERlbGV0ZS4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogUmVjb2duaXplIGNvbnN0YW50IG1hc2sgZm9yIGJ5dGUgb3Igd29yZC4KKwlSZWNvZ25pemUgY29uc3RhbnQgMC4uMyBmb3IgYGxlYScgc2hpZnRzLgorCShDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKToKKwkoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IERvbid0IHB1dCBDT05TVF9ET1VCTEUgaW4gZmxvYXQgcmVncy4KKwlRSW1vZGUgbXVzdCBnbyBpbiBjbGFzcyBRX1JFR1MuICBGbG9hdCByZWdzIGNhbid0IGhvbGQgTU9ERV9JTlQuCisJKE1PVkVfUkFUSU8pOiBOZXcgbWFjcm8uCisJKFNISUZUX0NPVU5UX1RSVU5DQVRFRCk6IERlbGV0ZS4gIEJpdCBvcGNvZGVzIGRvbid0IHRydW5jYXRlLgorCShSVFhfQ09TVFMpOiBOZXcgbWFjcm8uCisJKENPTlNUX0NPU1RTKTogTWFrZSBjb25zdGFudHMgY2hlYXBlci4KKwkoUUlfSElHSF9SRUdJU1RFUl9OQU1FUyk6IFJlbmFtZWQgZnJvbSBRSV9SRUdJU1RFUl9OQU1FU19UT1AuCisJKElOU05fQ0xPQkJFUlNfUkVHTk9fUCk6IERlbGV0ZS4KKwkoRlBfVE9QLFJFVENPTSxQT1BfT05FX1BPUCxGUF9DQUxMMSxGUF9DQUxMKTogRGVsZXRlLgorCisJKiBvdXQtaTM4Ni5jIChmcF9wb3BfbGV2ZWwpOiBEZWxldGUuCisJKGZwX2NhbGxfaW50ZXJuYWwsIG91dHB1dF9hc21faW5zbl9kb3VibGVfcmVnX29wLCB2aWFfbWVtb3J5LAorCWZwX3N0b3JlX3NmLGZwX3BvcF9zZixmcF9zdG9yZV9kZixmcF9wb3BfZGYsZnBfcG9wX2ludCwKKwlmcF9wdXNoX3NmLGZwX3B1c2hfZGYsb3V0cHV0X21vdnNmLG91dHB1dF9tb3ZkZixvdXRwdXRfbW92ZiwKKwl0b3BfZGVhZF9wLGNhbGxfdG9wX2RlYWRfcCxmcF90b3BfZGVhZF9wMSxtZW50aW9uZWRfZnBfdG9wKTogRGVsZXRlLgorCShoYXJkX3JlZ25vX21vZGVfb2spOiBNb3ZlZCB0byB0bS1pMzg2LmguCisJKHFpX2hpZ2hfcmVnX25hbWUpOiBOZXcgdmFyaWFibGUuCisJKG91dHB1dF9vcF9mcm9tX3JlZywgb3V0cHV0X3RvX3JlZyk6IE5ldyBmdW5jdGlvbi4KKwkoc2luZ2xlbW92ZV9zdHJpbmcsb3V0cHV0X21vdmVfY29uc3Rfc2luZ2xlKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkoc2luZ2xlbW92ZV9zdHJpbmcpOiBVc2UgY29ycmVjdCBvcGVyYW5kIG51bWJlcglpbiBgcHVzaCcgc3RyaW5nLgorCShzdGFuZGFyZF84MDM4N19jb25zdGFudF9wKTogVXNlIHJlY29tbWVuZGVkIG1ldGhvZCB0byBleHRyYWN0CisJZmxvYXQgZnJvbSBDT05TVF9ET1VCTEUuCisJKFBSSU5UX1JFRyk6IEFkZCAnaCcgZm9yICJoaWdoIiByZWdpc3RlciBuYW1lcywgJ3knIGZvciAic3QoMCkiLgorCShwcmludF9vcGVyYW5kKTogQ29kZSAneicgcHJpbnRzIG5vIHNpemUgc3VmZml4IGZvciBzdGFjayByZWdzLgorCVByaW50IERJbW9kZSBzdWZmaXggYXMgImxsIiwgbm90IGp1c3QgImwiLgorCShvdXRwdXRfZml4X3RydW5jKTogTmV3IGFyZ3VtZW50IGBpbnNuJy4gIEdlbmVyYWxpemUgdG8gb3V0cHV0IHRvCisJTUVNIG9yIFJFRy4gIFJldHVybiAiY2hhciAqIiBsaWtlIG90aGVyIG91dHB1dCByb3V0aW5lcy4KKwlHZW5lcmFsaXplIGZvciBTSW1vZGUgb3IgREltb2RlIG91dHB1dC4KKwkoYmluYXJ5XzM4N19vcCxjb252ZXJ0XzM4N19vcCxmbG9hdF9vcCxmaXhfb3Asc2hpZnRfb3ApOiBOZXcKKwltYXRjaF9vcGVyYXRvciBwcmVkaWNhdGVzLgorCShvdXRwdXRfMzg3X2JpbmFyeV9vcCxvdXRwdXRfZmxvYXRfY29tcGFyZSk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGkzODYubWQgKGFsbCBNT0RFX0ZMT0FUIHBhdHRlcm5zKTogUmVwbGFjZSB3aXRoIG5ldyBjb2RlIHRvIHVzZQorCWFsbCBGUFUgcmVnaXN0ZXJzLgorCShhbGwgcGF0dGVybnMpOiBVc2UgQVMyIGFuZCBBUzEgbWFjcm9zIHdoZXJlIHBvc3NpYmxlLCBmb3IKKwlldmVudHVhbCBzdXBwb3J0IG9mIEludGVsIHN5bnRheCBvdXRwdXQuCisJKHRzdE0pOiBEb24ndCBpbml0aWFsaXplIG9wZXJhbmRzIHVubGVzcyB3ZSBuZWVkIHRvLgorCShjbXBNKTogQ2hvb3NlIG9wZXJhbmdlIG9yZGVyIGluIG91dHB1dCBmb3Igc3BlZWQgb24gaTM4Ni4KKwkobG9naWNhbCB0ZXN0IHBhdHRlcm5zKTogVGhlIG9wZXJhbmRzIGNvbW11dGUuICBJZiBwb3NzaWJsZSwKKwlTSW1vZGUgdGVzdHMgc2hvdWxkIHVzZSBqdXN0IFFJbW9kZS4KKwkobW92c3RyaWN0TSk6IE5ldyBwYXR0ZXJucy4KKwkobW92cWkpOiBEb24ndCBhbGxvdyBhIGNvbnN0YW50IG9mIHVua25vd24gdmFsdWUgaW50byBRX1JFR1MuCisJKGBsZWEnIHBhdHRlcm4pOiBNb3ZlIGFmdGVyIGFkZHNpMy4KKwkoYWRkc2kzKTogRG8gdGhyZWUgb3BlcmFuZCBhZGRzIHdpdGggYGxlYScuCisJKGRpdnNpMyxkaXZoaTMsdWRpdnNpMyx1ZGl2aGkzKTogRGVsZXRlIGluIGZhdm9yIG9mIHU/ZGl2bW9kTTQuCisJKGRpdnFpMyx1ZGl2cWkzKTogUmVtb3ZlIGVhcmx5Y2xvYmJlciBmb3Igb3BlcmFuZCAwLgorCShhbmRNMyk6IERlZmluZSB0aHJlZSBvcGVyYW5kIEFORHMgZm9yIDI1NSBhbmQgNjU1MzUgdXNpbmcgemVybworCWV4dGVuZCBvcGNvZGUuICBBbHNvIGRpcmVjdGx5IGRvIGFuIEFORCBpbiB0aGUgc2Vjb25kIGJ5dGUgb2YgYQorCXJlZ2lzdGVyLgorCShpb3JNMyx4b3JNMyk6IERvIGJ5dGUgaW9yIGluc3RlYWQgb2Ygd29yZCB3aGVyZSBwb3NzaWJsZS4KKwkoeG9ycWkzKTogQWxsb3cgb3BlcmFuZHNbMl0gZnJvbSBNRU0uCisJKGFzaGxzaTMpOiBBbGxvdyB0aHJlZS1vcGVyYW5kIHNoaWZ0IG9mIDAuLjMgd2l0aCBgbGVhJyBvcGNvZGUuCisJKGxzaGxNMyk6IFJlZHVuZGFudCwgZGVsZXRlLgorCShzaGlmdCAmIHJvdGF0ZSBwYXR0ZXJucyk6IFByaW50ICUwIGFzIGRlc3RpbmF0aW9uIG9wZXJhbmQuCisJKGJpdCByZWNvZ25pemVycyk6IE5ldyBwYXR0ZXJucyB0byBzZXQsIGNsZWFyIGFuZCBjb21wbGltZW50LgorCShjYWxsIGluc25zKTogVXNlICIlUCIgY29kZSBmb3IgdGFyZ2V0cyB0byBzdXBwb3J0IEludGVsIHN5bnRheC4KKwkobW92c3Ryc2kpOiBFeHByZXNzIGNoYW5nZXMgdG8gdGhlIG9wZXJhbmRzIGluc3RlYWQgb2YganVzdAorCWNsb2JiZXJpbmcgdGhlbS4gIERvbid0IGFjY2VwdCBub24tY29uc3RhbnQgbW92ZSBjb3VudCwgYXMgb3VyCisJY29kZSBpc24ndCBhcyBlZmZpY2llbnQgYXMgYSBsaWJyYXJ5IGNhbGwuCisKK1RodSBKdW4gMjAgMTM6NTE6MDIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogSWYgd2UgZm9sZCBhIGNvbmRpdGlvbmFsIG9yIGNvbXB1dGVkIGJyYW5jaCB0byBhbgorCXVuY29uZGl0aW9uYWwgYnJhbmNoLCBpdCBpcyBub3cgbm90IGluIHRoZSBub3JtYWwgZm9ybWF0IGZvciBhbgorCXVuY29uZGl0aW9uYWwgYnJhbmNoLCBhbmQgaXQgb25seSBoYXMgb25lIHNldCwgZGVsZXRlIGl0IGFuZAorCXJlLWVtaXQgaXQuCisJV2hlbmV2ZXIgd2UgbWFrZSBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaCwgc2V0IGBjc2Vfc2tpcF90b19uZXh0X2Jsb2NrJworCWFuZCBkbyBub3RoaW5nIGVsc2UuCisJKGNzZV9iYXNpY19ibG9jayk6IEluY3JlbWVudCBMQUJFTF9OVVNFUyBvbiBUTyBpZiBpdCBpcyBhIGxhYmVsCisJc28gaXQgd29uJ3QgZ28gYXdheSB3aGlsZSB3ZSBhcmUgdXNpbmcgaXQgYXMgYSBzdG9wcGluZyBwb2ludC4KKwlJZiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYmxvY2sgKGBjc2Vfc2tpcF90b19uZXh0X2Jsb2NrJyBub256ZXJvKSwKKwlwcmV0ZW5kIHdlIGp1c3QgZGlkIHRoZSBpbnNuIGJlZm9yZSBUTy4KKwlEZWNyZW1lbnQgTEFCRUxfTlVTRVMgb2YgVE8gaWYgaXQgaXMgYSBsYWJlbDsgaWYgaXQgYmVjYW1lIHplcm8sCisJZGVsZXRlIGl0IGFuZCB0cnkgdG8gZXh0ZW5kIHRoZSBiYXNpYyBibG9jay4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZpeCB0eXBvIGluIGNoZWNrIGZvciBubyBhbHRlcm5hdGl2ZXMKKwlmb3VuZC4KKworCSogY29tYmluZS5jIChyZWdfc2lnbmlmaWNhbnQsIHNpZ25pZmljYW50X21vZGUpOiBOZXcgdmFycy4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSByZWdfc2lnbmlmaWNhbnQuCisJKHNldF9zaWduaWZpY2FudCk6IE5ldyBmdW5jdGlvbi4KKwkoc2lnbmlmaWNhbnRfYml0cywgY2FzZSBSRUcpOiBVc2UgcmVnX3NpZ25pZmljYW50LCBpZiBub24temVybworCWFzIHRoZSBzaWduaWZpY2FudCBiaXRzIG9mIGEgcmVnaXN0ZXIuCisKKwkqIGxvb3AuYyAobl90aW1lc19zZXQpOiBEZWZpbmUgLTIgdG8gbWVhbiB0aGF0IGEgcmVnaXN0ZXIgaXMKKwlhbiBjYW5kaWRhdGUgdG8gYmUgbW92ZWQgYW5kIGlzIGEgY29uc3RhbnQuCisJKHNjYW5fbG9vcCk6IFNldCBuX3RpbWVzX3NldCB0byAtMSBvciAtMiBhcyBhcHByb3ByaWF0ZS4KKwkocmVnc19tYXRjaF9wKTogTm8gbmVlZCB0byBjaGVjayBSRUdfRlVOQ1RJT05fVkFMVUVfUC4KKwlBIHJlZ2lzdGVyIGFuZCBhIGNvbnN0YW50IGNhbiBiZSBlcXVhbCBpZiB0aGUgcmVnaXN0ZXIgaXMga25vd24JCisJZXF1aXZhbGVudCB0byB0aGUgY29uc3RhbnQuCisJKGludmFyaWFudF9wKTogQ2hlY2sgbl90aW1lc19zZXQgPCAwLCBub3QgPT0gLTEuCisKKwkqIHJ0bC5oIChSRUdfTE9PUF9URVNUX1ApOiBOZXcgbWFjcm8uCisJKiBqdW1wLmMgKGR1cGxpY2F0ZV9sb29wX2V4aXRfdGVzdCk6IE1hcmsgcmVnaXN0ZXJzIHVzZWQgb25seSBpbgorCWxvb3AgZXhpdCB0ZXN0LgorCSogY3NlLmMgKGNzZV9hcm91bmRfbG9vcCwgY3NlX2NoZWNrX2xvb3Bfc3RhcnQsIGNzZV9zZXRfYXJvdW5kX2xvb3ApOgorCU5ldyBmdW5jdGlvbnMuCisJKGNzZV9lbmRfb2ZfYmFzaWNfYmxvY2spOiBBZGQgbmV3IGFyZyB0byBzYXkgaWYgd2UgYXJlIGJlaW5nIGNhbGxlZAorCWFmdGVyIGxvb3AuYyBoYXMgcnVuOyBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIGFmdGVyIGxvb3AuYywgd2UgY2FuCisJaWdub3JlIE5PVEVfSU5TTl9MT09QX0VORHMuCisJKGNzZV9tYWluKTogQWNjZXB0IG5ldyBBRlRFUl9MT09QIGFyZzsgcGFzcyB0byBjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrLgorCUlmIHdlIGFyZSBjYWxsZWQgYmVmb3JlIGxvb3AuYywgc2VlIGlmIHdlIGNhbiBjc2UgYXJvdW5kIHRvIHRoZQorCXN0YXJ0IG9mIGEgbG9vcC4gIAorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBUZWxsIGNzZV9tYWluIGlmIGl0IGlzIGJlaW5nIGNhbGxlZAorCWJlZm9yZSBvciBhZnRlciBsb29wLmMuCisKKwkqIHJ0bC5oIChMQUJFTF9PVVRTSURFX0xPT1BfUCk6IE5ldyBtYWNyby4KKwkqIGxvb3AuaCAodWlkX2xvb3BfbnVtKTogUmVuYW1lZCBmcm9tIGx1aWRfbG9vcF9udW0gYW5kIG5vdworCW1hcHMgSU5TTl9VSUQgdG8gbG9vcCBudW1iZXIgaW5zdGVhZCBvZiBJTlNOX0xVSUQuCisJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUpOiBNb2RpZmljYXRpb25zIGZvciB0aGUgYWJvdmUuCisJKGZpbmRfYW5kX3ZlcmlmeV9sb29wKTogQ2hhbmdlIGx1aWRfbG9vcF9udW0gdG8gdWlkX2xvb3BfbnVtLgorCUxvb2sgZm9yIGJsb2NrcyBvZiBjb2RlIGVuZGluZyBpbiBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaCBvdXQKKwlvZiB0aGUgbG9vcCBzdXJyb3VuZGVkIGJ5IGEgY29uZGl0aW9uYWwgYnJhbmNoIGFuZCB0cnkgdG8gbW92ZQorCXN1Y2ggYSBibG9jayBvdXQgb2YgdGhlIGxvb3AuCisJKG1hcmtfbG9vcF9qdW1wKTogQ2hhbmdlIGx1aWRfbG9vcF9udW0gdG8gdWlkX2xvb3BfbnVtLgorCU1hcmsgYWxsIExBQkVMX1JFRnMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgY3VycmVudCBsb29wLCBmb3IKKwlicmFuY2ggcHJlZGljdGlvbi4KKwkoc3RyZW5ndGhfcmVkdWNlLCBjaGVja19kYnJhX2xvb3ApOiBDaGFuZ2UgbHVpZF9sb29wX251bSB0byAKKwl1aWRfbG9vcF9udW0uCisJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3AsIGZpbmRfc3BsaXR0YWJsZV97cmVncyxnaXZzfSk6IExpa2V3aXNlLgorCShyZWdfZGVhZF9hZnRlcl9sb29wLCBmaW5hbF97Yml2LGdpdn1fdmFsdWUpOiBMaWtld2lzZS4KKworCSogZmxvdy5jIChyZWdfbl9zZXRzKTogRG9uJ3QgZGVmaW5lIHRoaXMgaGVyZS4KKwkqIHJlZ2NsYXNzLmMgKHJlZ19uX3NldHMpOiBEZWZpbmUgaXQgaGVyZS4KKwkocmVnX3NjYW4pOiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSByZWdfbl9zZXRzLgorCShyZWdfc2Nhbl9tYXJrX3JlZnMpOiBDb3VudCBzZXRzIG9mIGEgcmVnaXN0ZXIgaW4gcmVnX25fc2V0cy4KKworCSogc2NoZWQuYyAocmVnX2tub3duX3ZhbHVlX3NpemUpOiBOZXcgdmFyaWFibGUuCisJKGNhbm9uX3J0eCk6IERvbid0IGxvb2sgaW4gcmVnX2tub3duX3ZhbHVlIG91dHNpZGUgaXRzIGFsbG9jYXRlZCBzcGFjZS4KKwkoaW5pdF9hbGlhc19hbmFseXNpcyk6IEluaXRpYWxpemUgcmVnX2tub3duX3ZhbHVlX3NpemUuCisKKwkqIGxvb3AuYyAoe3Vua25vd24sZml4ZWR9X2FnZ3JlZ2F0ZV9hbHRlcmVkKTogRGVsZXRlZC4KKwkobG9vcF9zdG9yZV9tZW1zKTogUmVwbGFjZXMgbG9vcF9zdG9yZV9hZGRycyBhbmQgbG9vcF9zdG9yZV93aWR0aHMuCisJKGxvb3Bfb3B0aW1pemUpOiBDYWxsIGluaXRfYWxpYXNfYW5hbHlzaXMuCisJKHByZXNjYW5fbG9vcCwgbm90ZV9hZGRyX3N0b3JlZCk6IFNhdmUgYWxsIE1FTXMgc3RvcmVkIGludG8sIHJhdGhlcgorCXRoYW4ganVzdCB0aG9zZSB0aGF0IGFwcGVhciBmaXhlZDsgc2F2ZSBNRU1zIHJhdGhlciB0aGFuIGFkZHJlc3NlcworCWFuZCB3aWR0aHMuCisJKGludmFyaWFudF9wKTogVXNlIHRydWVfZGVwZW5kZW5jZSB0byBzZWUgaWYgYSBNRU0gaXMgaW52YXJpYW50OworCWNvbXBhcmUgaXQgd2l0aCBhbGwgTUVNcyBzdG9yZWQgZHVyaW5nIHRoZSBsb29wLgorCisJKiBzY2hlZC5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBJZiBYU0laRSBvciBZU0laRSBpcyB6ZXJvCisJdGhlIG9iamVjdCBjb25mbGljdCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgYmFzZSwgaXJyZWdhcmRsZXNzCisJb2YgdGhlIG9mZnNldHMuCisKKwkqIHJlb3JnLmMgKGRicl9zY2hlZHVsZSk6IFJlYWxsb2NhdGUgdW5maWxsZWRfZmlyc3RvYmogYWZ0ZXIKKwlmcmVlaW5nIG1lbW9yeSBmcm9tIHRoZSBvYnN0YWNrLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBBbHdheXMgcmVsb2FkIG9iamVjdCBpbnNpZGUgU1VCUkVHIGlmCisJU1RSSUNUX0xPV19QQVJUIGlzIHByZXNlbnQuCisJQWx3YXlzIHNldCBSRUxPQURfU1RSSUNUX0xPVyB0byB6ZXJvOyBtYXliZSB3ZSBzaG91bGQgZ2V0IHJpZCBvZiBpdC4KKworCSogcmVsb2FkLmMgKG1ha2VfbWVtbG9jKTogQ29weSB0aGUgYWRkcmVzcyBpZiBpdCB2YXJpZXMgdG8gYXZvaWQKKwlwb3RlbnRpYWwgc2hhcmluZyBwcm9ibGVtcy4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGhhcmRfcmVnX2NvcHlfcHJlZmVyZW5jZXMpOiBOZXcgdmFyLgorCShnbG9iYWxfYWxsb2MpOiBBbGxvY2F0ZSBhbmQgaW5pdGlhbHplIGl0LgorCShwcnVuZV9wcmVmZXJlbmNlcyk6IFBydW5lIGl0LgorCShmaW5kX3JlZyk6IFRyeSBwcmVmZXJlbmNlcyBpbiBoYXJkc19yZWdfY29weV9wcmVmZXJlbmNlcyBmaXJzdCwKKwl0aGVuIGhhcmRfcmVnX3ByZWZlcmVuY2VzLgorCShzZXRfcHJlZmVyZW5jZSk6IFNldCBiaXQgaW4gaGFyZF9yZWdfY29weV9yZWZlcmVuY2VzLCBpZiBhcHByb3ByaWF0ZS4KKworCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogSWYgd2UgYXJlIHNwbGl0dGluZyBhIEpVTVBfSU5TTiwgY29weQkKKwlKVU1QX0xBQkVMIGZyb20gdGhlIG9sZCB0byBuZXcgaW5zbiB1cGRhdGUgdGhlIGNvdW50IG9mIHRoYXQgbGFiZWwuCisKKwkqIGNzZS5jIChsb29rdXApOiBBbHdheXMgY2FsbCBleHBfZXF1aXZfcCB1bmxlc3Mgd2UgaGF2ZSBhIFJFRy4KKworCSogY3NlLmMgKGluc2VydCk6IElmIHdlIGFyZSBtYWtpbmcgYSByZWdpc3RlciBlcXVpdmFsZW50IHRvIGEKKwljb25zdGFudCB0aGF0IHdhcyBhbHJlYWR5IGVxdWl2YWxlbnQgdG8gYSBjb25zdGFudCwgdXBkYXRlCisJcXR5X2NvbnN0X2luc24uCisJKGNzZV9pbnNuKTogRG9uJ3QgZG8gaXQgaGVyZS4KKwkqIGNzZS5jIChmb2xkX3J0eCk6IEFsd2F5cyBjYWxsIHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbi4KKworCSogY3NlLmMgKHJlY29yZF9qdW1wX2VxdWl2KTogRG9uJ3QgZ2V0IHByaW1hcnkgZWxlbWVudHMgZm9yIE9QMCBhbmQKKwlPUDEgc2luY2UgdGhleSBtaWdodCBub3QgYmUgdmFsaWQuCisKKwkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IEFjY2VwdCBuZXcgYXJnLCBFQVJMSUVTVCB0aGF0IGlzIGEgcG9pbnRlcgorCXRvIHdoZXJlIHdlIHBsYWNlIHRoZSBlYXJsaWVzdCBpbnNuIHVzZWQgdG8gZm9ybSB0aGUgY29uZGl0aW9uLgorCUNoZWNrIGZvciBjb21wYXJpc29uIHdpdGggQ0MwIGluIG1haW4gbG9vcCwgbm90IGVhcmxpZXIuCisJTmV2ZXIgcmV0dXJuIGNvbmRpdGlvbiBpbnZvbHZpbmcgQ0MwLgorCShnZXRfY29uZGl0aW9uX2Zvcl9sb29wKTogQ2FsbCBnZXRfY29uZGl0aW9uIHdpdGggbmV3IGFyZy4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gd2UgbWFrZSBzdG9yZS1mbGFnIGluc24sIHB1dCBuZXcKKwlpbnNucyBiZWZvcmUgZWFybGllc3QgaW5zbiB1c2VkIHRvIGZvcm0gY29uZGl0aW9uIGFuZCB1c2UgbmV3CisJcHN1ZWRvIGFzIHRhcmdldCwgd2hpY2ggd2UgY29weSBpbnRvIFZBUiBpbW1lZGlhdGVseSBhZnRlciB0aGUgaW5zbgorCXRoYXQgY3VycmVudGx5IHNldHMgVkFSLgorCVR1cm4gb2ZmICJpZiAoLi4uKSB4ID0gMTsgZWxzZSB7Li4ufSBpZiAoeCkgLi4uIiBjb2RlOyBpdCBpcyBub3QKKwljb3JyZWN0IGFuZCBjYW4ndCBiZSBlYXNpbHkgZml4ZWQuCisJKGdldF9sYWJlbF97YmVmb3JlX2FmdGVyfSk6IFVzZSB7cHJldixuZXh0fV9ub25ub3RlX2luc24uCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERvbid0IGludGVycHJldCBOT09QX01PVkVTIGFzIG1lYW5pbmcKKwkiYWZ0ZXJfcmVsb2FkIjsgY2hlY2sgcmVsb2FkX2NvbXBsZXRlZCBpbnN0ZWFkLiAgRG9uJ3QgcGFzcyBOT09QX01PVkVTCisJdG8gZnVuY3Rpb25zIHRoYXQgYXJlbid0IGFjdHVhbGx5IHRyeWluZyB0byBub29wIG1vdmVzLgorCShmb2xsb3dfanVtcHMsIHRlbnNpb25fdmVjdG9yX2xhYmVscyk6ICBEb24ndCBhY2NlcHQgQUZURVJfUkVMT0FEIGFyZzsKKwljaGVjayByZWxvYWRfY29tcGxldGVkIGluc3RlYWQuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBjaGVjayB0aGF0IHdlIGRvbid0IGhhdmUgYQorCXNpbmdsZV9zZXQgd2hlbiB0cnlpbmcgdG8gcmVwbGFjZSBhIFNFVF9ERVNUIGluIGEgUEFSQUxMRUwgaW4gSTIuCisJKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBBbHdheXMgZG8gdGhlIEFORCBpbiB0aGUgbW9kZSBwYXNzZWQuCisJKHNpZ25pZmljYW50X2JpdHMsIGNhc2UgRElWIGFuZCBVRElWKTogTm90aGluZyBzcGVjaWFsIGtub3duCisJYWJvdXQgbG93LW9yZGVyIGJpdHMgaGVyZS4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QsIHNoaWZ0IGNhc2VzKTogRG9uJ3QgZ28gaW50byBpbmZpbml0ZSBsb29wIGlmCisJd2UgY29tYmluZSB0d28gc2hpZnRzIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KKworCSogYy1wYXJzZS55LCBjcGx1cy1wYXJzZS55LCBvYmpjLXBhcnNlLnkgKHNldF95eWRlYnVnKTogTW92ZSB0bworCWVuZCBvZiBmaWxlIHNvIHdlIGRvbid0IGhhdmUgYSByZWZlcmVuY2UgdG8geXlkZWJ1ZyBhZnRlciBpdHMKKwlkZWZpbml0aW9uOyBhbHNvIGRlbGV0ZSBkdXBsaWNhdGUgZGVjbGFyYXRpb24uCisKK1RodSBKdW4gMjAgMDk6MDg6MjEgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IEZpeGVkIHR5cG8gaW4gbGFzdCBlZGl0LgorCitXZWQgSnVuIDE5IDE3OjA1OjUyIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogVmVyaWZ5IHJlbG9hZF9pbltpXSBleGlzdHMgYmVmb3JlIHVzaW5nCisJR0VUX0NPREUgb24gaXQuCisKKwkqIG04OGsubWQ6IFVTRSBpbnNucyBtdXN0IGJlIGltbWVkaWF0ZWx5IGJlZm9yZSBDQUxMX0lOU05zIHRvIHdvcmsKKwlwcm9wZXJseSwgb3RoZXJ3aXNlIHNjaGVkLmMgYW5kIHJlb3JnLmMgd2lsbCBub3QgYXNzb2NpYXRlIHRoZW0gd2lsbAorCXRoZSBDQUxMLgorCisJKiB1bnJvbGwuYyAoY2FsY3VsYXRlX2dpdl9pbmMpOiBBY2NlcHQgY29uc3RhbnQgaW5jcmVtZW50cworCXJlcHJlc2VudGVkIGFzIGEgTE9fU1VNLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogRG9uJ3QgcHV0IGEgUkVHX0RFQUQgbm90ZSBvbiBpbnNucyB0aGF0CisJYWxyZWFkeSBoYXZlIGEgUkVHX1VOVVNFRCBub3RlLiAgVGhpcyBtYWtlcyBpdCBjb25zaXN0ZW50IHdpdGgKKwljb21iaW5lLmMuCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBJZiBhIFJFR19VTlVTRUQgcmVnIGlzIG5vIGxvbmdlcgorCXNldCBieSBhbiBpbnNuLCBidXQgaXMgc3RpbGwgdXNlZCBieSB0aGUgaW5zbiwgdGhlbiBtdXN0IGNvbnZlcnQKKwl0aGUgUkVHX1VOVVNFRCBub3RlIHRvIGEgUkVHX0RFQUQgbm90ZS4KKworCSogZ2NjLmMgKFNJR05FRF9DSEFSX1NQRUMpOiBQdXQgaWZuZGVmcyBhcm91bmQgaXQsIHNvIHRoYXQgaXQgY2FuCisJYmUgb3ZlcnJpZGVuIGJ5IGEgZGVmaW5pdGlvbiBpbiB0aGUgdG0uaCBmaWxlLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBBZGQgbWlzc2luZyB0aGlyZCBwYXJhbWV0ZXIgdG8gZmluZF9yZWdfbm90ZSBjYWxscy4KKworCSogdG0tYXJtLmggKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogVGFrZSBMSUJOQU1FIGFzIHRoaXJkIGFyZ3VtZW50LgorCisJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBSZW1vdmUgZXh0cmEgYXJndW1lbnQgaW4gY2FsbCB0bworCWZpbmRfcmVnX25vdGUuCisKKwkqIHJ0bGFuYWwuYyAoZmluZF9yZWdub19ub3RlKTogVmVyaWZ5IHRoYXQgdGhlIG5vdGUgY29udGFpbnMgYQorCVJFRyBiZWZvcmUgY2hlY2tpbmcgaXRzIFJFR05PLgorCisJKiBjc2UuYyAoY2Fub25fcmVnKTogRml4IHNwYWNpbmcvcHVuY3R1YXRpb24gZXJyb3IuCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBMaWtld2lzZS4KKwkqIHRyZWUuaDogTGlrZXdpc2UuCisJKiB2YXJhc20uYyAoQXNzZW1ibGUgZnVuY3Rpb24pOiBMaWtld2lzZS4KKworV2VkIEp1biAxOSAxMzoxNDoyMiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogV2hlbiBjb3VudGluZyBpbnN0cnVjdGlvbnMsIGFib3J0IGlmCisJYSBsb29wIGlzIGRldGVjdGVkLiAgSW1wcm9wZXJseSB0aHJlYWRlZCBpbnNucyBhcmUgZWFzeSB0byBwcm9kdWNlCisJd2hlbiB3b3JraW5nIG9uIHRoZSBzY2hlZHVsZXIuCisKK1NhdCBKdW4gMTUgMDY6MTM6MTEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9hbmRfY29uc3RfaW50LCBjYXNlIEFTSElGVFJUKTogQXZvaWQgaW5maW5pdGUKKwlsb29wIGlmIHNpbXBsaWZ5X3NoaWZ0X2NvbnN0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisKK1RodSBKdW4gMTMgMDk6MDU6MTIgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBBZGQgdGhpcyBpbnNuLgorCQorVGh1IEp1biAxMyAwNzozMjozNyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBsb3cuYyAocGx1c19jb25zdGFudCk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZTsgQ09OU1QgY2FzZQorCXdhc24ndCBoYW5kbGVkIGNvcnJlY3RseS4KKworCSogdG0tbTY4ay5oIChDT05TVF9DT05TVFMpOiBDb25zdGFudHMgYmV0d2VlbiAtNyBhbmQgLTEgYXJlIGNoZWFwCisJYmVjYXVzZSBvZiBzdWJxLgorCisJKiBtNjhrLm1kIChkYnJhKTogT3BlcmFuZCAwIHNob3VsZCBoYXZlICcrJyBjb25zdHJhaW50LCBub3QgJz0nLgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogQ2xlYW4gdXAgc29tZSBjb25mdXNpb24gYmV0d2VlbgorCXRhcmdldHMgYW5kIHJlc3VsdHMgaW4gZXhwYW5kX2Jpbm9wIGNhbGxzLgorCisJKiBsb2NhbC1hbGxvYy5jIChvcHRpbWl6ZV9yZWdfY29weSk6IEZpeCBzZXZlcmFsIHR5cG9zIHJlbGF0aW5nIHRvCisJc3RhdHVzIHVwZGF0aW5nLgorCUNvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgREVTVCBkaWVzIGJlZm9yZSBTUkMuCisJRml4IHNvbWUgY29tbWVudHMgdGhhdCBoYWQgU1JDIGFuZCBERVNUIGJhY2t3YXJkcy4KKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogU3dhcCBvcmRlciBvZiBhcmdzIG9mICYmIHRvIGF2b2lkCisJdW5uZWNlc3NhcnkgY2FsbHMgdG8gdXNlX2Nyb3NzZXNfc2V0X3AuCisJKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQsIGNhc2UgU1VCUkVHKTogTWFrZSBjb2RlIGFncmVlIHdpdGggY29tbWVudC4KKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogQXZvaWQgY29tcGlsYXRpb24gd2FybmluZy4KKworCSogZXhwbWVkLmMgKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IERvbid0IHVzZSBPUDAgYXMgU1VCVEFSR0VUCisJaWYgaXQgaXMgYSBNRU0gYW5kIC1mZm9yY2VfbWVtIHdhcyBzcGVjaWZpZWQuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBBZnRlciBzY2MgaW5zbnMsIGNvbnZlcnQgdG8gd2lkZXIKKwltb2RlIHVzaW5nIHVuc2lnbmVkIGNvbnZlcnNpb24gaWYgU1RPUkVfRkxBR19WQUxVRSBpcyBwb3NpdGl2ZS4KKworCSogZXhwbWVkLmMgKGluaXRfZXhwbWVkKTogVXNlIG1vZGUgb2Ygc2l6ZSBCSVRTX1BFUl9XT1JEIGluc3RlYWQKKwlvZiBTSW1vZGUuCisJKHN0b3JlX2JpdF9maWVsZCwgZXh0cmFjdF9iaXRfZmllbGQpOiBSZXBsYWNlIHJlZmVyZW5jZXMgdG8gU0ltb2RlCisJd2l0aCBNQVhNT0RFLgorCShzdG9yZV9maXhlZF9iaXRfZmllbGQsIGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKTogRG9uJ3QgdXNlIGV4cGxpY2l0CisJbW9kZXM7IHVzZSBnZXRfYmVzdF9tb2RlIGluc3RlYWQuCisJKHN0b3JlX3NwbGl0X2JpdF9maWVsZCwgZXh0cmFjdF9zcGxpdF9iaXRfZmllbGQpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkCisJYW5kIG1vZGVfZm9yX3NpemUgaW5zdGVhZCBvZiBtYWtpbmcgU1VCUkVHcyBhbmQgdXNpbmcgU0ltb2RlLgorCisJKiBzdG9yLWxheW91dC5jIChnZXRfYmVzdF9tb2RlKTogQWxsb3cgTEFSR0VTVF9NT0RFIHRvIGJlIFZPSURtb2RlLAorCWluIHdoaWNoIGNhc2Ugd2UgY2FuIHVzZSBhbnkgYXBwcm9wcmlhdGUgbW9kZS4KKworV2VkIEp1biAxMiAxNjozMjozNyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHBvZ28uZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwbHVzLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDb21wZW5zYXRlIGZvciB0bS1zcGFyYy5oCisJY2hhbmdlIHRvIFdDSEFSX1RZUEUgaGFuZGxpbmcuCisKK1dlZCBKdW4gMTIgMTA6MTk6MTMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworICAgICAgICAqIHRtLXNwYXJjLmggKFdDSEFSX1RZUEUpOiBNdXN0IGJlICJzaG9ydCB1bnNpZ25lZCBpbnQiLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBtYWtlX2V4dHJhY3Rpb24sIHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogRG9uJ3QKKwljaGFuZ2UgbW9kZSBvZiB2b2xhdGlsZSBNRU07IHJlcGxhY2VzIHNpbWlsYXIgY2hhbmdlIG9mIEp1bmUgMXN0LgorCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfMSwgb3B0aW1pemVfYml0X2ZpZWxkKTogTGlrZXdpc2UuCisJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xKTogTGlrZXdpc2UuCisKK1R1ZSBKdW4gMTEgMjI6MDk6MjggMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBFeHByZXNzaW9ucyBvZiBib3RoIHRoZSBmb3JtCisJWCA/IEEgKyAxIDogQSBhbmQgWCA/IEEgOiBBICsgMSB3ZXJlIGJlaW5nIGRvbmUsIGJ1dCBvbmx5IHRoZSBmb3JtZXIKKwl3YXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuCisKK1R1ZSBKdW4gMTEgMTI6MTM6NTMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IElmIHB1dHRpbmcgYSBDT05TVF9JTlQgaW4gYQorCVpFUk9fRVhURU5EIG9yIFNJR05fRVhURU5ELCB0cnkgdG8gc2ltcGxpZnkgdGhlIG9wZXJhdGlvbiBvciBmYWlsOworCXRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wZXJhdGlvbiByZXF1aXJlIGEgbm9uLVZPSURtb2RlIGFyZ3VtZW50LgorCisJKiBjc2UuYyAoZGVsZXRlX2RlYWRfZnJvbV9jc2UpOiBEb24ndCBkZWxldGUgbGFzdCBpbnNuIGluIGEgbGliY2FsbC4KKworCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBEb24ndCBjbG9iYmVyIFNJWkUgd2hlbgorCXJvdW5kaW5nIGl0LgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgQ09ORF9FWFBSKTogRW5zdXJlIHdlIGFsd2F5cyByZXR1cm4gYW4KKwlleHByZXNzaW9uIGluIHRoZSBjb3JyZWN0IHR5cGUuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBEb24ndCBuZWVkIHRvIHB1dCBYIGluIHJlZ2lzdGVyIGlmIGl0CisJaXMgY29uc3RhbnQ7IG9wZXJhbmRfc3Vid29yZF9mb3JjZSBjYW4gZG8gc28gaWYgbmVlZGVkLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogU2ltcGxpZnkgbmVzdGVkIGBpZicgc3RhdGVtZW50cy4KKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcyk6IExpa2V3aXNlLgorCisJKiBqdW1wLmMgKG1hcmtfanVtcF9sYWJlbCk6IEZpeCB0eXBvIChleHRyYSBwYXJlbikgaW4gbGFzdCBjaGFuZ2UuCisKK1R1ZSBKdW4gMTEgMTA6MDM6MDggMTk5MSAgTWljaGVhbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jOiBOZXcgZmlsZS4KKworCSogc2NoZWQuYyAobWVtcmVmc19jb25mbGljdF9wKTogRmluaXNoIHJlbW92aW5nIEFTSElGVCBjYXNlLgorCisJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBDaGFuZ2UgdGVzdCBvZiBCSVRTX1BFUl9XT1JEIDwKKwlIT1NUX0JJVFNfUEVSX1dPUkQgZnJvbSBjb21waWxlLXRpbWUgdG8gcnVuLXRpbWUuCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogRGl0dG8uCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBEaXR0by4KKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEaXR0by4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogQWRkIGBjb250aW51ZScgYWZ0ZXIgZGVsZXRpbmcgSU5TTiBpbiBjYXNlCisJd2hlcmUgZnVydGhlciBhdHRlbXB0cyB0byBvcHRpbWl6ZSB0aGUgaW5zbiBhcmUgaW52YWxpZC4KKwkobWFya19qdW1wX2xhYmVsKTogRG9uJ3QgY3Jhc2ggaWYgTkVYVCA9PSAwLgorCitUdWUgSnVuIDExIDA5OjE0OjA1IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBvdXQtbTg4ay5jIChsZWdpdGltaXplX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24gdG8gY29udmVydAorCUNPTlNUX0RPVUJMRSB0byBTRm1vZGUgd2hlbiBwb3NzaWJsZS4KKwkqIG04OGsubWQgKGNtcGRmLCBhZGRkZjMsIHN1YmRmMywgbXVsZGYzLCBkaXZkZjMpOiBVc2UgaXQuCisJKiB0bS1tODhrLmg6IERlY2xhcmUgaXQuCisKKwkqIHhtLW04OGsuaCAoT0JTVEFDS19DSFVOS19TSVpFKTogRm9yIERHL1VYIGF0IGxlYXN0LCB0aGUgZGVmYXVsdAorCXZhbHVlIHJlc3VsdHMgaW4gYSBwZXJmZWN0IGNoZWNrZXJib2FyZC4KKworVHVlIEp1biAxMSAwNzoyMzo0NSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEZMT0FUX0VYUFIsIEZJWF9FWFBSKTogRG9uJ3QgdHJ5IHRvCisJZG8gYW55IHBhcnRpYWwgY29udmVyc2lvbnMgaGVyZTsgZXhwYW5kX2ZpeCBhbmQgZXhwYW5kX2Zsb2F0IG5vdworCWhhbmRsZSBhbGwgbW9kZXMuCisJKiBvcHRhYnMuYyAoZml4dGFiLCBmaXh0cnVuY3RhYiwgZmxvYXR0YWIpOiBUYWJsZSBub3cgY29udGFpbnMKKwlhbGwgbW9kZXMuCisJKGNhbl9maXhfcCwgY2FuX2Zsb2F0X3ApOiBVc2UgbW9kZSBhcyBpbmRleCBpbiB0YWJsZXMuCisJKGluaXRfZml4dGFiLCBpbml0X2Zsb2F0dGFiKTogTGlrZXdpc2UuCisJQWRkIHN1cHBvcnQgZm9yIFFJbW9kZSBhbmQgSEltb2RlIG9wZXJhdGlvbnMuCisJKGV4cGFuZF9mbG9hdCk6IFJld29yayB0byByZW1vdmUgZGVwZW5kZW5kZW5jZSBvbiBzcGVjaWZpYyBtb2Rlcy4KKwlDYW4gb25seSB1c2UgUkVBTF9WQUxVRV9MREVYUCBpbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLgorCShleHBhbmRfZml4KTogTGlrZXdpc2UuCisJSWYgY2FuJ3QgZG8gb3BlcmF0aW9uIHVuc2lnbmVkLCBvciBzaWduZWQgaW50byB3aWRlciBtb2RlLCBlbWl0IGEKKwlzZXF1ZW5jZSB0aGF0IGNvbXBhcmVzIG9wZXJhbmQgd2l0aCAyKiooTi0xKSBhbmQsIGlmIGxhcmdlciwKKwlzdWJ0cmFjdHMgMioqKE4tMSksIGNvbnZlcnRzLCBhbmQgYWRkcyBpdCBiYWNrLgkKKwlQcm90ZWN0IGZyb20gcXVldWUgYW5kIGZvcmNlIG5vdCBtZW1vcnkgYXQgc3RhcnQuCisJKiBtODhrLm1kIChmaXh1bnNfdHJ1bmNkZnNpMiwgZml4dW5zX3RydW5jc2ZzaTIpOiBEZWxldGVkOyBub3cgZG9uZQorCWluIGV4cGFuZF9maXggaW4gb3B0YWJzLmMuCisKKwkqIGNvbWJpbmUuYyAoZXhwYW5kX2ZpZWxkX2Fzc2lnbm1lbnQpOiBDb252ZXJ0IFNFVF9TUkMgdG8gbW9kZSBvZgorCUlOTkVSLgorCShzaW1wbGlmeV9zaGlmdF9jb25zdCwgY2FzZSBBU0hJRlRSVCk6IERvbid0IHVzZSB1bmRlZmluZWQgaW5pdGlhbAorCXZhbHVlIG9mIE1BU0suCisKKwkqIGV4cGxvdy5jOiBJbmNsdWRlIGluc24tY29uZmlnLmgsIHJlY29nLmgsIGFuZCBpbnNuLWNvZGVzLmguCisJKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBSZXdvcmsgdG8gYmUgbW9yZSBwcmVjaXNlIGluIHJlcXVpcmVkCisJYWxpZ25tZW50LiAgTXVzdCBtYWludGFpbiBhbGlnbm1lbnQgb2Ygc3RhY2sgdG8gU1RBQ0tfQk9VTkRBUlkgYXQKKwlhbGwgdGltZXMgKGl0IG11c3Qgbm90IGJlIG1vbWVudGFyaWx5IG1pc2FsaWduZWQpIGFuZCBtdXN0IGFsaWduCisJcmV0dXJuZWQgYWRkcmVzcyB0byBCSUdHRVNUX0FMSUdOTUVOVC4gCisJKiBNYWtlZmlsZS5pbiAoZXhwbG93Lm8pOiBTaG93IG5ldyBpbmNsdWRlcy4KKworVHVlIEp1biAxMSAwNzoyMjo1NCAxOTkxICBNYXR0aGV3IFNlbGYgIChtc2VsZiBhdCBuZXh0LmNvbSkKKworCSogbTY4ay5tZDogIENoYW5nZSBpbmNvcnJlY3QgcmVmZXJlbmNlIHRvIC1tNjgwNDAtZnAgdG8gLW02ODA0MC1vbmx5LgorCUZpeCBzZXZlcmFsIHNwZWxsaW5nIGVycm9ycy4KKworCSogbTY4ay5tZCAoZml4X3RydW5jKmYqaTIpOiAgTmV3IGluc24ncyB0byByZXBsYWNlIGZpbnRyeiBvbiB0aGUKKwknMDQwLiAgVGhlc2UgZW1pdCBhIHNlcXVlbmNlIG9mIGluc24ncyB0byBjaGFuZ2UgdGhlIHJvdW5kaW5nIG1vZGUKKwl0byByb3VuZC10by16ZXJvLCBwZXJmb3JtIHRoZSB0cnVuY2F0aW9uLCBhbmQgcmVzdG9yZSB0aGUgcm91bmRpbmcKKwltb2RlLiAKKworTW9uIEp1biAxMCAwOTo1NzozMSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjLWxhbmcuYyAoR05VX3hyZWZfe2JlZ2luLGVuZH0pOiBBZGQgc3R1YiBmdW5jdGlvbnMgZm9yIHhyZWYgaW5mby4KKworCSogY3BsdXMtZGVjbC5jIChyZWNvcmRfYnVpbHRpbl90eXBlKTogQWRkIHN1cHBvcnQgZm9yIGhhbmRsaW5nCisJYnVpbHRpbiB0eXBlcycgbmlja25hbWVzIChlLmcuICJ1bnNpZ25lZCBsb25nIiBmb3IgImxvbmcgdW5zaWduZWQKKwlpbnQiKS4KKworCSogZXhwbWVkLmMgKHN0cnVjdCBhbGdvcml0aG0pOiBDaGFuZ2UgYXJyYXkgc2l6ZSBmcm9tIEJJVFNfUEVSX1dPUkQKKwl0byBNQVhfQklUU19QRVJfV09SRC4KKwlnY2MudGV4aW5mbzogRG9jdW1lbnQgTUFYX0JJVFNfUEVSX1dPUkQuCisKK01vbiBKdW4gMTAgMDc6NDU6MTcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFdoZW4gbWFraW5nIGFuIEkxIGZyb20gYW4gSTIgdGhhdCBpcworCWEgUEFSQUxMRUwsIGdpdmUgdGhlIG5ldyBJMSB0aGUgc2FtZSBJTlNOX1VJRCBhcyBJMi4KKworCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdwJyk6IFBhc3Mgb3BlcmFuZCBtb2RlCisJKGZyb20gbWF0Y2hfb3BlcmFuZCkgdG8gc3RyaWN0X21lbW9yeV9hZGRyZXNzX3AuCisKKwkqIG02OGsubWQgKGFuZHNpMyk6IGJjbHIgZG9lcyBub3Qgc2V0IHRoZSBjb25kaXRpb24gY29kZXMgaW4gdGhlCisJc3RhbmRhcmQgd2F5LgorCitTdW4gSnVuICA5IDExOjE2OjI0IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBTd2FwIHByZWZlcnJlZF9jbGFzcyBhbmQgcHJlZl9vcl9ub3RoaW5nCisJd2hlbiB3ZSBzd2FwIGNvbW11dGF0aXZlIG9wZXJhbmRzLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBzaW1wbGlmeV9zaGlmdF9jb25zdCk6IFRyZWF0IFVESVYgYW5kIE1VTFQKKwl3aXRoIGEgc2Vjb25kIG9wZXJhbmQgb2YgYSBjb25zdGFudCB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvIGFzIHRoZQorCWFwcHJvcHJpYXRlIHNoaWZ0IGlmIGl0IGZlZWRzIG9yIGlzIGZlZCBieSBhIHNoaWZ0LgorCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IFdoZW4gc2VhcmNoaW5nIGZvciB0aGUgYmVzdCBtb2RlIHRvCisJcGVyZm9ybSB0aGUgY29tcHV0YXRpb24sIHRha2UgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgd2Ugc29tZXRpbWVzCisJZG8gYSBzaGlmdCwgbm90IGEgZGl2aWRlLgorCisJKiBleHBtZWQuYyAoZW1pdF9zdG9yZV9mbGFnKTogQ29ycmVjdGx5IGhhbmRsZSAiYSA9IGIgPCAwOyIgaWYgQQorCWlzIG5hcnJvd2VyIHRoYW4gQi4KKwlEb24ndCBjaGVjayBmb3IgU1RPUkVfRkxBR19WQUxVRSBlcXVhbCB0byBqdXN0IHRoZSBzaWduIGJpdCBvZgorCU9QMCBpZiB0aGUgd2lkdGggb2YgaXRzIG1vZGUgaXMgbGFyZ2VyIHRoYW4gSE9TVF9CSVRTX1BFUl9JTlQuCisJVXNlIHN3aXRjaCByYXRoZXIgdGhhbiBpZi9lbHNlaWYvZWxzZWlmLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0LCBzaGlmdCBjYXNlcyk6IFdlIHdlcmUgbm90IGZvcm1pbmcKKwl0aGUgbWFzayBjb3JyZWN0bHkgd2hlbiBWQVJPUCBpcyBhIExTSElGVFJUIGFuZCBuYXJyb3dlciB0aGFuIFg7CisJc2ltcGxpZnkgdGhlIG1hc2sgZm9ybWF0aW9uIGJ5IHVzaW5nIHNpZ25pZmljYW50X2JpdHMgYW5kCisJc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbi4KKworCSogcmVsb2FkLmMgKG1ha2VfbWVtbG9jKTogQ29weSBSVFhfVU5DSEFOR0lOR19QIGZyb20gUkVHIHRvIE1FTS4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3MsIGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBEb24ndCBzaG9ydGN1dAorCXJlbG9hZGluZyB0aGUgYWRkcmVzcyBpbiByZWdfZXF1aXZfYWRkcmVzczsgYWx3YXlzIGNhbGwKKwlmaW5kX3JlbG9hZHNfYWRkcmVzcyBvbiBpdC4KKworCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdwJyk6IFZhbGlkYXRlIGFkZHJlc3MgaWYKKwl0ZXN0aW5nIHN0cmljdGx5LgorCisJKiBvdXQtYWxsaWFudC5jLCBvdXQtbTY4ay5tZCAob3V0cHV0X21vdmVfZG91YmxlKTogRXh0cmFjdGlvbiBvZgorCXBhcnRzIG9mIENPTlNUX0lOVCB3YXMgYmFja3dhcmRzOyB0aGVzZSBtYWNoaW5lcyBhcmUgd29yZHMtYmlnLWVuZGlhbi4KKworU2F0IEp1biAgOCAxMjoxOToyNiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBzcGFyYy5tZDogUmVtb3ZlIHNwZWNpYWwtY2FzZSBzaGlmdCBpbnNucyB3aGljaCBsb2FkIGFuZCBzaGlmdAorCW1lbW9yeS1iYXNlZCBvcGVyYW5kcy4gIENvbWJpbmUgbm93IGRvZXMgdGhpcyBmb3IgdXMuICBBbHNvIGNoYW5nZQorCWFicyBwYXR0ZXJucyBzbyB0aGF0IHRoZXkgY29uc2lzdGVudGx5IHByaW50IHRoZSBuZWdhdGlvbiBmb2xsb3dlZAorCWJ5IHRoZSBtb3Ygb24gYSBzaW5nbGUgbGluZS4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBDYXN0IGBlbnVtIHJlZ19jbGFzcycgdmFsdWVzIHRvCisJYGludCcgd2hlbiB1c2luZyB0aGVtIGFzIGFycmF5IGluZGljaWVzLgorCisJKiBnbnVsaWIyLmMgKExPTkdfVFlQRV9TSVpFKTogRG9uJ3QgaW5oZXJpdCB0aGUgZGVmaW5pdGlvbiBvZgorCUxPTkdfVFlQRV9TSVpFIGZyb20gdG0uaCwgc2luY2UgdGhhdCBtYXkgYmUgdGFyZ2V0X2ZsYWctc3BlY2lmaWMuCisJSW5zdGVhZCBzeW50aGVzaXplIHRoZSB2YWx1ZSBmcm9tIGBzaXplb2YgKGxvbmcpJy4KKworCSogY3BsdXMtZ2MuYyAoYnVpbGRfbV9kZXNjKTogRmlndXJlIG91dCB3aGV0aGVyIHRoZSBpX2Rlc2Mgc2hvdWxkCisJY29uc3RpdHV0ZSBhIGRlZm4gb2YgaXRzIHR5cGUgb3Igbm90LiAgQW5hbG9nb3VzIHRvIE1heSAyNiBjaGFuZ2UKKwlmb3IgaW5zdGFuY2UgdmFyaWFibGVzLgorCitTYXQgSnVuICA4IDA3OjExOjI2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6IERldGVjdCBhbmQgcmVtb3ZlIHJlZHVuZGFudAorCWFsaWdubWVudCBvcGVyYXRpb24uCisJKHNpZ25pZmljYW50X2JpdHMsIGNhc2UgUkVHKTogUmVhbGl6ZSB0aGF0IHRoZSBzdGFjayBwb2ludGVyIG1pZ2h0CisJYmUgYWxpZ25lZC4KKwkoc2lnbmlmaWNhbnRfYml0cywgY2FzZSBQTFVTLCBNVU5VUywgTVVMVCwgRElWLCBVRElWKTogVHJhY2sgbG93LW9yZGVyCisJYml0cyBvZiB6ZXJvIGFzIHdlbGwgYXMgaGlnaC1vcmRlciB6ZXJvIGJpdHMgKHNvIHdlIGRldGVjdCBhbGlnbm1lbnQKKwlvcGVyYXRpb25zKS4KKwkocmVjb3JkX3ZhbHVlX2Zvcl9yZWcpOiBJZiB1cGRhdGluZyBhIHJlZ2lzdGVyLCB0cnkgdG8gc3Vic3RpdHV0ZSBpdHMKKwlvbGQgdmFsdWUgaW50byB0aGUgZXhwcmVzc2lvbiBmb3IgYmV0dGVyIHRyYWNraW5nIG9mIHZhbHVlcy4KKworCSogYTI5ay5tZCAoZm1hYy9kbWFjKTogRGVsZXRlIGluY29ycmVjdCBwYXR0ZXJucy4KKworVGh1IEp1biAgNiAxOTowODoyOSAxOTkxICBTZWFuIEZhZ2FuICAoc2VmIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBTYXkgd2UgYXJlIG9uIGxpbmUgbnVtYmVyIDEgaWYKKwlzZGJfYmVnaW5fZnVuY3Rpb25fbGluZSBpcyAtMSwgbm90IDAuCisKK1RodSBKdW4gIDYgMDg6MDE6MDUgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3Rvci1sYXlvdXQuYyAoZ2V0X2Jlc3RfbW9kZSk6IERvbid0IGFzc3VtZSBHRVRfTU9ERV9TSVpFIChTSW1vZGUpCisJaXMgVU5JVFNfUEVSX1dPUkQ7IGlmIFNMT1dfQllURV9BQ0NFU1MgZGVmaW5lZCwgdHJ5IHRvIHJldHVybiB0aGUKKwltb2RlIHdob3NlIHNpemUgaXMgVU5JVFNfUEVSX1dPUkQuCisKKwkqIHNwYXJjLm1kIChmbG9hdHNpc2YyLCBmbG9hdHNpZGYyKTogQWRkIG1pc3NpbmcgbW9kZSBmb3IKKwlvcGVyYW5kIDE7IHVzZSBjb25zdF9pbnRfb3BlcmFuZCBhcyBwcmVkaWNhdGUuCisKKwkqIGNzZS5jIChjYW5vbl9yZWcpOiBBZGQgYXJnIElOU047IGlmIHJlcGxhY2luZyBhIHBzZXVkbyB3aXRoIGEgaGFyZAorCXJlZ2lzdGVyIG9yIHZpY2UgdmVyc2EsIHVzZSB2YWxpZGF0ZV9jaGFuZ2UgdG8gZW5zdXJlIHRoZSBpbnNuCisJcmVtYWlucyB2YWxpZC4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkOyBtb3N0IHBhc3MgemVybyBzaW5jZSB0aGV5IHZhbGlkYXRlIHJlcGxhY2VtZW50LgorCShjc2VfaW5zbik6IFVzZSB2YWxpZGF0ZV9jaGFuZ2Ugb24gcmVzdWx0IG9mIGNhbm9uX3JlZyB3aGVuCisJcmVxdWlyZWQuCisKKwkqIGMtY29tbW9uLmMgKGNvbWJpbmVfc3RyaW5ncyk6IFVzZSBXQ0hBUl9CWVRFUyBpbnN0ZWFkIG9mCisJVU5JVF9QRVJfV09SRCBmb3IgdGhlIHNpemUgb2YgYSB3aWRlIGNoYXIuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0X2NvbW1vbik6IEFsd2F5cyBleHRyYWN0IGludGVncmFsIG1vZGVzCisJZnJvbSBpbnRlZ2VyIENPTlNUX0lOVHMgYW5kIENPTlNUX0RPVUJMRXMuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X2Zvcl9pbmxpbmUsIGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogRG9uJ3QKKwl0cnkgdG8gZXh0cmFjdCBhIGZsb2F0IGZyb20gYSBmaXhlZC1tb2RlIENPTlNUX0RPVUJMRS4KKwkoY29weV9mb3JfaW5saW5lLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgcmVzdG9yZV9jb25zdGFudHMpOgorCURlY2xhcmUgdGFyZ2V0IG9mIFJFQUxfVkFMVUVfRlJPTV9DT05TVF9ET1VCTEUgdG8gYmUgUkVBTF9WQUxVRV9UWVBFLgorCisJKiBsb2NhbC1hbGxvYy5jICh1cGRhdGVfZXF1aXZfcmVncyk6IEZpeCB0eXBvIGluIHRlc3RpbmcKKwlyZWdfYmFzaWNfYmxvY2suCisKK1dlZCBKdW4gIDUgMDk6MTU6MDkgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogRWxpbWluYXRlIHVubmVlZGVkIGJpbmRpbmcgbGV2ZWxzIHdoZW4gb3ZlcmxvYWRpbmcgdGVtcGxhdGUgY2xhc3MKKwluYW1lczoKKwkqIGNwbHVzLXB0LmMgKG92ZXJsb2FkX3RlbXBsYXRlX25hbWUpOiBBY2NlcHQgc2Vjb25kIGFyZ3VtZW50CisJY2xhc3NsZXZlbCwgaW5kaWNhdGluZyB0aGF0IG5ldyBkZWNsIHNob3VsZCBiZSBwdXNoZWQgaW50byBjdXJyZW50CisJY2xhc3MgYmluZGluZyBsZXZlbDsgb3RoZXJ3aXNlLCBhc3N1bWUgY3VycmVudCBsZXZlbCBpcyBva2F5IHRvIHVzZS4KKwlDYWxsZXJzIGNoYW5nZWQuCisJKHVuZG9fdGVtcGxhdGVfbmFtZV9vdmVybG9hZCk6IE5ldyBzZWNvbmQgYXJndW1lbnQgY2xhc3NsZXZlbAorCWluZGljYXRlcyB3aGVyZSBiaW5kaW5nIGZvciB2YXJpYWJsZSB3YXMgbWFkZS4gIENhbGxlcnMgY2hhbmdlZC4KKworCSogY3BsdXMtcGFyc2UueSAoc3RydWN0c3ApOiBDYWxsIHVuZG9fdGVtcGxhdGVfbmFtZV9vdmVybG9hZCBpbiBhbGwKKwlhcHByb3ByaWF0ZSBjYXNlcy4KKworCSogR2V0IGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiBmbGFncyBzZXQgcHJvcGVybHkgb24gbWV0aG9kcyBpbgorCWNsYXNzIHRlbXBsYXRlcywgYW5kIHVzZSBpdDoKKwkqIGNwbHVzLWxleC5jIChzdG9yZV9wZW5kaW5nX2lubGluZSk6IElmIGluc2lkZSBhIGNsYXNzLCB3YWxrIHVwCisJdGhyb3VnaCBuZXN0ZWQgY2xhc3NlcyB0byB0b3AgbGV2ZWwgbG9va2luZyBmb3IgdGVtcGxhdGUgcGFyYW1ldGVycy4KKwlGb3IgY2xhc3MgbWV0aG9kcywgdXNlIGN1cnJlbnQgaW50ZXJmYWNlIGZsYWcgc2V0dGluZ3MgcmF0aGVyIHRoYW4KKwlmbGFncyBmb3IgY2xhc3MuCisJKGV4dHJhY3RfaW50ZXJmYWNlX2luZm8pOiBObyBsb25nZXIgc3RhdGljLgorCShkb19wZW5kaW5nX2lubGluZXMsIHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBDYWxsCisJZXh0cmFjdF9pbnRlcmZhY2VfaW5mbyB0byBnZXQgaW50ZXJmYWNlIGZsYWdzIHNldCBwcm9wZXJseSBhZnRlcgorCWNoYW5naW5nIGZpbGUgbmFtZXMuCisJKiBjcGx1cy1wdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERpdHRvLgorCShlbmRfdGVtcGxhdGVfaW5zdGFudGlhdGlvbik6IERpdHRvLgorCShkb19wZW5kaW5nX2V4cGFuc2lvbnMpOiBJZiBpbnRlcmZhY2UvaW1wbGVtZW50YXRpb24gZmxhZ3Mgb2YKKwljb250YWluaW5nIGNsYXNzIGFyZSBzZXQsIHVzZSB0aGVtLgorCSogY3BsdXMtdHJlZS5oIChpbnRlcmZhY2VfdW5rbm93bik6IEFkZGVkIGRlY2xhcmF0aW9uLgorCitXZWQgSnVuICA1IDA3OjM2OjQ0IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFVuc2hhcmUgYSBNRU0gaWYgaXRzIGFkZHJlc3MgaXMKKwl0aGUgYWRkcmVzcyBvZiBhIGNvbnN0YW50IHBvb2wgbG9jYXRpb24uCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBGaXggdHlwb3MgaW4gbXVsdGktd29yZCBhZGRpdGlvbjsgaGFkCisJTU9ERSBmb3IgU1VCTU9ERS4KKworCSogcmVsb2FkMS5jIChhbHRlcl9yZWcpOiBDb3JyZWN0bHkgZGVsZXRlIGluc24gdGhhdCBtYWtlcyBhIFJFRworCWVxdWl2YWxlbnQgdG8gYSBNRU0gaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIE1FTSBpcyB0aGUgU0VUX0RFU1QuCisKKwkqIGEyOWsubWQgKG5lZ2RmMik6IEFkZCBtaXNzaW5nIGFsdGVybmF0aXZlIGluIG9wZXJhbmRzIDIuCisJKG1vdmRpKTogQ2hhbmdlICJpIiBjb25zdHJhaW50IHRvICJuIi4KKwlTcGxpdCBmb3IgY29uc3RhbnQgaW50ZWdlciBhcyBpbnB1dDsgc3BsaXQgY2Fubm90IGZhaWwuCisJQ29ycmVjdCB0eXBvIGluIERFRklORV9TUExJVCAoREZtb2RlIGZvciBESW1vZGUpLgorCSogb3V0LWEyOWsuYyAoZ2VuX3JlZ19vcl9pbnRlZ2VyX2NvbnN0YW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNvbmZpZ3VyZTogRml4IHR5cG8gaW4gcmVmZXJlbmNlIHRvIHRtLXN1bjMtbmZwLmguCisKK1dlZCBKdW4gIDUgMDY6NTY6MTAgMTk5MSAgTWF0dGhldyBTZWxmICAobXNlbGYgYXQgbmV4dC5jb20pCisKKwkqIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55IChhdHRyaWIpOiBBbHdheXMgcGFzcyBhbGlnbmVkIGF0dHJpYnV0ZQorCXRocm91Z2guICBSZXR1cm4gJDEgb24gZmFpbHVyZSByYXRoZXIgdGhhbiBOVUxMX1RSRUUgZm9yIGNvbnNpc3RlbmN5LgorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBXYXJuIGlmIHJlcXVlc3RlZCBhbGlnbm1lbnQgaXMgbm90CisJYSBwb3dlciBvZiB0d28uICBBbHNvIHdhcm4gaWYgZGVjbCBpcyBub3QgYSBWQVJfREVDTCBvciBhIEZJRUxEX0RFQ0wsCisJc2luY2Ugc3BlY2lmeWluZyBhbGlnbm1lbnQgbWFrZXMgbm8gc2Vuc2UgZm9yIGEgVFlQRV9ERUNMLCBhbmQgaXMKKwlub3QgaW1wbGVtZW50ZWQgZm9yIGEgRlVOQ1RJT05fREVDTC4KKworCSogYy1wYXJzZS55LCBvYmpjLXBhcnNlLnkgKGluaXRkY2wsIG5vdHlwZV9pbml0ZGNsKTogQ2FsbAorCWRlY2xfYXR0cmlidXRlcyBiZWZvcmUgZmluaXNoX2RlY2wgaW4gb3JkZXIgZm9yIGFsaWdubWVudCBhdHRyaWJ1dGUKKwl0byB0YWtlIGVmZmVjdC4KKwkKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFdhcm4gaWYgREVDTF9BTElHTiBpcyBncmVhdGVyIHRoYW4KKwlNQVhfT0ZJTEVfQUxJR05NRU5ULCBpZiBkZWZpbmVkLiAgVGhpcyBhbGxvd3MgZXJyb3JzIHRvIGJlCisJZGV0ZWN0ZWQgd2l0aCBmb3JtYXRzIGxpa2UgYS5vdXQgd2hpY2ggc3VwcG9ydCBhIG1heGltdW0gYWxpZ25tZW50CisJb2YgNC4KKworCSogYy1wYXJzZS55LCBvYmpjLXBhcnNlLnkgKGNvbXBvbmVudF9kZWNsYXJhdG9yKTogQ2FsbCBkZWNsX2F0dHJpYnV0ZXMKKwl3aXRoIGNvcnJlY3QgYXJncy4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCwgbGF5b3V0X3VuaW9uKTogRG8gbm90IGNsYW1wIHN0cnVjdAorCWFsaWdubWVudCBhdCBCSUdHRVNUX0FMSUdOTUVOVCwgc2luY2UgaW5kaXZpZHVhbCBmaWVsZHMgbWF5IGhhdmUKKwlyZXF1ZXN0ZWQgZ3JlYXRlciBhbGlnbm1lbnQgdGhhbiB0aGlzLiAgVGhpcyBjaGVjayBzaG91bGRuJ3QgaGF2ZQorCWRvbmUgYW55dGhpbmcgYW55d2F5LgorCisJKiBjLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiAgV2hlbiBhbGlnbm9mIGlzIGFwcGxpZWQgdG8gYW4gZXhwcmVzc2lvbiwKKwljYWxsIGNfYWxpZ25vZl9leHByIHNvIHRoYXQgd2UgY2FuIGNoZWNrIERFQ0xfQUxJR04gaW5zdGVhZCBvZiBjYWxsaW5nCisJY19hbGlnbm9mIChUWVBFX0FMSUdOIChUUkVFX1RZUEUgKGV4cHIpKSkuCisKKwkqIGMtdHlwZWNrLmMgKGNfYWxpZ25vZl9leHByKTogIE5ldyBmdW5jdGlvbiB0byBjb21wdXRlIGFsaWdub2YgZm9yCisJZXhwcidzLiAgUmV0dXJucyBERUNMX0FMSUdOIGZvciBWQVJfREVDTCdzIGFuZCBGSUVMRF9ERUNMJ3MuICBBbHNvCisJcmV0dXJuIDEgYWZ0ZXIgcmVwb3J0aW5nIGVycm9yIGFib3V0IGFwcGx5aW5nIGFsaWdub2YgdG8gYml0ZmllbGRzLgorCisJKiBjLXRyZWUuaCAoY19hbGlnbm9mX2V4cHIpOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6ICBNQVhfT0ZJTEVfQUxJR05NRU5UIGRlZmF1bHRzIHRvCisJQklHR0VTVF9BTElHTk1FTlQgaWYgbm90IGRlZmluZWQgaW4gY29uZmlnLmguCisKK1dlZCBKdW4gIDUgMDY6NTU6MTIgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKG1vdiopOiBDaGFuZ2UgdGhlIGludGVyZmFjZSB0byBlbWl0X21vdmVfc2VxdWVuY2UuCisJKiBvdXQtbTg4ay5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBTaW1pbGFyIHRvIHRoZSBzcGFyYyB2ZXJzaW9uLgorCisJKiB0bS1tODhrLmggKFNJWkVfVFlQRSk6IFNwZWNpZnkgYXMgdW5zaWduZWQgaW50LgorCisJKiB4bS1tODhrLmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBEZWZpbmUuCisKK1dlZCBKdW4gIDUgMDE6NDU6MDcgMTk5MSAgU2VhbiBGYWdhbiAgKHNlZiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiAgZG9uJ3Qgb3V0cHV0IGRlZmluaXRpb24gaW5mb3JtYXRpb24gZm9yCisJYSBuZXN0ZWQgZnVuY3Rpb24gaW5zaWRlIHRoZSBwYXJlbnQgZnVuY3Rpb247IHRoaXMgbWFrZXMgQ09GRgorCWFzc2VtYmxlcnMgdXBzZXQuCisKK1R1ZSBKdW4gIDQgMTc6MzU6MTMgMTk5MSAgU2VhbiBGYWdhbiAgKHNlZiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogZnVuY3Rpb24uYyAodHJhbXBvbGluZV9hZGRyZXNzKTogbWFrZSB0aGUgUlRMX0VYUFIgbm9kZSB0ZW1wb3JhcnksCisJbm90IG1vbWVudGFyeSwgc28gdGhhdCB0aGUgdHJhbXBvbGluZV9saXN0IGRvZXNuJ3QgYmVjb21lIGdhcmJhZ2UuCisJRml4IG1hZGUgYnkgamltIHdpbHNvbiAod2lsc29uQGN5Z251cy5jb20pLgorCitUdWUgSnVuICA0IDA5OjQwOjU5IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAobW92ZV9ibG9ja190b19yZWcpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBDaGVjayBmb3IgcmVnX25fcmVmcyA9PSAyLAorCW5vdCBsb29wX2RlcHRoICogMi4KKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBDbGVhciBJTlNOX0RFTEVURURfUCBvbiBpbnNucworCXBsYWNlZCBpbiBjdXJyZW50X2Z1bmN0aW9uX2VwaWxvZ3VlX2RlbGF5X2xpc3QuCisKKwkqIG1ha2UtcnM2MDAwIChBTExPQ0FfRkxBR1MsIEFMTE9DQV9GSU5JU0gpOiBBZGQgb3ZlcnJpZGUgdG8KKwljb21wZW5zYXRlIGZvciB0aGUgZmFjdCB0aGF0IHRoZSBSUy82MDAwIEMgY29tcGlsZXIgaGFzIG5vIC1TLgorCisJKiBvdXQtcnM2MDAwLmMgKGVhc3lfZnBfY29uc3RhbnQpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkLgorCShwcmludF9vcGVyYW5kKTogVXNlIElOVF9QIGFuZCBJTlRfTE9XUEFSVCB0byBhbGxvdyBhY2NlcHRpbmcgYm90aAorCUNPTlNUX0lOVCBhbmQgQ09OU1RfRE9VQkxFIGZvciBpbnRlZ2Vycy4KKworCSogcnM2MDAwLm1kIChmbG9hdHNpZGYyLCBmbG9hdHVuc3NpZGYyKTogUmV3b3JrIHRoZXNlIHRvIGVtaXQgb25seQorCXR3byBpbnNucywgZWFjaCBvZiB3aGljaCBoYXMgREltb2RlIG9yIERGbW9kZSBvcGVyYW5kcy4gIFRoZW4KKwlzcGxpdCB0aGUgZnVubnkgREltb2RlIGluc24gdG8gZ2VuZXJhdGUgaXQuCisJKGZpeF90cnVuY2Rmc2kyLCBmaXh1bnNfdHJ1bmNkZnNpMik6IFN1cnJvdW5kIG91ciBjYWxsIHdpdGgKKwlSRUdfTElCQ0FMTC9SRUdfUkVUVkFMIG5vdGVzLgorCVVzZSBvcGVyYW5kX3N1YndvcmQuCisJKG1vdnNmLCBtb3ZkZik6IENvcnJlY3RseSBoYW5kbGUgYSBwc2V1ZG8gcGFzc2VkIGR1cmluZyByZWxvYWQuCisJVXNlIG9wZXJhbmRfc3Vid29yZC4KKwlTcGxpdCBtb3ZlcyBpbnZvbHZpbmcgImVhc3kiIEZQIGNvbnN0YW50cy4KKwkoc3VidHJhY3QtYW5kLWJyYW5jaCk6IERpc2FibGUgZm9yIG5vdywgdG8gYXZvaWQgb3V0cHV0IHJlbG9hZCBpbiBqdW1wLgorCisJKiB0bS1yczYwMDAuaCAoV0NIQVJfVFlQRSk6IEFkZCBkZWZpbml0aW9uLgorCShJTlRfUkVHTk9fUCk6IEZpeCB0eXBvOyByZWdpc3RlciAzMSBpcyBhIG5vcm1hbCByZWdpc3Rlci4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogVGhlIG9ubHkgRlAgY29uc3RhbnRzIHRoYXQgYXJlIHZhbGlkIGFyZQorCXRoZSAiZWFzeSIgb25lcy4KKworCSogYTI5ay5tZCAobmVnZGYyKTogVXNlIFhPUiB3aGVuIG5vdCBpbnZvbHZpbmcgYWNjdW11bGF0b3IuCisJQWRkIFNDUkFUQ0ggc28gd2UgZG9udCB1c2UgZ3IxMjIuCisJSGFuZGxlIGNhc2Ugd2hlcmUgaW5wdXQgYW5kIG91dHB1dCBhcmUgc2FtZSByZWdpc3Rlci4KKwkobmVnc2YyKTogVXNlIFNDUkFUQ0guCisJKERJbW9kZSBvcGVyYXRpb25zKTogVXNlIG9wZXJhbmRfc3Vid29yZCwgbm90IGdlbl97bG93LGhpZ2h9X3BhcnQuCisJKG1vdnNmLCBtb3ZkZiwgbW92ZGkpOiBBbHdheXMgc3BsaXQgaWYgd2UgY2FuIGxvb2sgaW5zaWRlIENPTlNUX0RPVUJMRS4KKwlVc2Ugb3BlcmFuZF9zdWJ3b3JkLgorCURvbid0IHNwbGl0IGludG8gc2VwYXJhdGUgd29yZHMgaW4gREVGSU5FX0VYUEFORC4KKwkqIG91dC1hMjlrLmMgKGluX29wZXJhbmQpOiBBY2NvdW50IGZvciBmYWN0IHRoYXQgaW50ZWdlciBDT05TVF9ET1VCTEUKKwlpcyBWT0lEbW9kZS4KKwkoZXh0cmFjdF9zdWJ3b3JkKTogRGVsZXRlZC4KKwkocHJpbnRfb3BlcmFuZCk6IEFkZCBtYWNyb3MgSU5UX1AgYW5kIElOVF9MT1dQQVJUIHNvIHdlIGNhbiBhY2NlcHQKKwllaXRoZXIgQ09OU1RfSU5UIG9yIENPTlNUX0RPVUJMRS4KKworCSogcm9tcC5tZCAobW92ZGksIG1vdmRmLCBuZWdzZjIsIG5lZ2RmMik6IFVzZSBvcGVyYW5kX3N1YndvcmQgYW5kCisJb3BlcmFuZF9zdWJ3b3JkX2ZvcmNlLCBpbnN0ZWFkIG9mIGdlbl97aGlnaCxsb3d9cGFydC4KKwlVc2UgZm9yY2VfY29uc3RfbWVtIGluc3RlYWQgb2YgZm9yY2VfY29uc3RfZG91YmxlX21lbS4KKworCSogbTg4ay5tZCAobW92ZGkpOiBSZW1vdmUgJ0YnIGNvbnN0cmFpbnQ7ICduJyBub3cgaW5jbHVkZXMgaW50ZWdlcgorCUNPTlNUX0RPVUJMRS4KKwkoYW5kZGkzLCBpb3JkaTMsIHhvcmRpMyk6IExpa2V3aXNlLgorCVVzZSBvcGVyYW5kX3N1YndvcmQgdG8gZXh0cmFjdCBpbmRpdmlkdWFsIHdvcmRzLgorCSogb3V0LW04OGsuYyAob3V0cHV0X2xvYWRfY29uc3Rfe2Zsb2F0LGRvdWJsZSxkaW1vZGV9KToJVXNlCisJb3BlcmFuZF9zdWJ3b3JkLgorCisJKiBNYWtlZmlsZS5pbiAoZW1pdC1ydGwubyk6IE5vdyBpbmNsdWRlcyBleHByLmguCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFBhc3MgbW9kZSB0byBtb3ZlX2Jsb2NrX3RvX3JlZy4KKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgU1VCUkVHKTogU2ltcGxpZnkgU1VCUkVHIG9mIGhhcmQgcmVnaXN0ZXIKKwlhbmQgc29tZSBTVUJSRUdzIG9mIGNvbnN0YW50cy4KKwkoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBJZiBvYmplY3QgaXMgZGVzaXJlZCBtb2RlLCBhbHdheXMgcmV0dXJuIGl0LgorCVVzZSBnZW5fbG93cGFydF9jb21tb24gZm9yIG1vc3QgY2FzZXM7IGp1c3Qgc3VwcG9ydCBNRU0gYW5kCisJc3Vycm91bmRpbmcgd2l0aCBhIFNVQlJFRyBoZXJlLgorCSogY3NlLmMgKGluc2VydCk6IENPTlNUQU5UX1AgaW5jbHVkZXMgQ09OU1RfRE9VQkxFLgorCShmb2xkX3J0eCk6IFVzZSBNT0RFIGZvciBHRVRfTU9ERSAoWCkuCisJKGZvbGRfcnR4LCBjYXNlIFNVQlJFRyk6IEhhbmRsZSBzaW1wbGUgY2FzZXMgb2YgZm9sZGluZyBTVUJSRUdzLgorCShmb2xkX3J0eCwgY2FzZSBNRU0pOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkIGFuZCBnZW5fbG93cGFydF9pZl9wb3NzaWJsZQorCXRvIGdldCBwYXJ0cyBvZiBjb25zdGFudCBpbnN0ZWFkIG9mIGdlbl9sb3dwYXJ0IGFuZCBnZW5faGlnaHBhcnQuCisJKGdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlKTogVXNlIGdlbl9sb3dwYXJ0X2NvbW1vbiBmb3IgbW9zdCBjYXNlcy4KKwkqIGV4cHIuYzogSW5jbHVkZSBleHByLmguCisJKGdlbl9sb3dwYXJ0X2NvbW1vbik6IE5ldyBmdW5jdGlvbiwgZnJvbSBnZW5fbG93cGFydC4KKwkoZ2VuX2xvd3BhcnQpOiBVc2UgZ2VuX2xvd3BhcnRfY29tbW9uIGZvciBtb3N0IGNhc2VzOyBqdXN0IGhhbmRsZSBNRU0uCisJKGdlbl9oaWdocGFydCk6IERlbGV0ZWQuCisJKHN1YnJlZ19sb3dwYXJ0X3ApOiBUZXN0IFdPUkRTX0JJR19FTkRJQU4gaW4gYGlmJywgbm90IGAjaWYnLgorCShvcGVyYW5kX3N1YndvcmQsIG9wZXJhbmRfc3Vid29yZF9mb3JjZSk6IE5ldyBmdW5jdGlvbnMuCisJKiBleHBsb3cuYyAocGx1c19jb25zdGFudCk6IEhhbmRsZSBhZGRpbmcgQ09OU1RfSU5UIHRvIENPTlNUX0RPVUJMRS4KKwlSZXdvcmsgdG8gdXNlIHN3aXRjaCBzdGF0ZW1lbnQuCisJUmVtb3ZlIG9ic29sZXRlIE9MRF9JTkRFWElORyBjb2RlLgorCShwbHVzX2NvbnN0YW50X2Zvcl9vdXRwdXQpOiBVc2UgcGx1c19jb25zdGFudCBmb3IgbW9zdCBjYXNlcy4KKwkoYnJlYWtfb3V0X21lbW9yeV9yZWZzKTogUmVmaW5lIHdoaWNoIGNvbnN0YW50cyBnZXQgYnJva2VuIG91dC4KKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogRG9uJ3QgdXNlCisJZ2VuX2hpZ2hwYXJ0IGZvciBtdWx0aS13b3JkIGZpZWxkczsgaW5zdGVhZCwgbG9vcCBhbmQgdXNlCisJb3BlcmFuZF9zdWJ3b3JkLiAgV2Ugbm93IHN1cHBvcnQgZmllbGRzIG1vcmUgdGhhbiB0d28gd29yZHMgbG9uZy4KKwkobWFza19ydHgsIGxzaGlmdF92YWx1ZSk6IEp1c3QgcGFzcyBoaWdoIGFuZCBsb3cgd29yZHMgdG8KKwlpbW1lZF9kb3VibGVfY29uc3Q7IGl0IHdpbGwgbWFzayBhbmQgY2hvb3NlIENPTlNUX0lOVCB2cy4gQ09OU1RfRE9VQkxFLgorCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkIGluc3RlYWQgb2YgZ2VuX2hpZ2hwYXJ0LgorCURvbid0IGFzc3VtZSBHRVRfTU9ERV9TSVpFIChESW1vZGUpID4gVU5JVFNfUEVSX1dPUkQuCisJKG1vdmVfYmxvY2tfdG9fcmVnKTogQWRkIE1PREUgYXJnLgorCVVzZSBvcGVyYW5kX3N1YndvcmRfZm9yY2UuCisJKG1vdmVfYmxvY2tfZnJvbV9yZWcpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkLgorCShtb3ZlX2Jsb2NrX2Zyb21fcmVnLCBtb3ZlX2Jsb2NrX3RvX3JlZywgdXNlX3Jncyk6CisJRG9uJ3QgYXNzdW1lIEdFVF9NT0RFX1NJWkUgKFNJbW9kZSkgPT0gVU5JVFNfUEVSX1dPUkQuCisJKGVtaXRfbW92ZV9pbnNuLCBlbWl0X3B1c2hfaW5zbik6IExpa2V3aXNlLgorCVVzZSBvcGVyYW5kX3N1YndvcmQgYW5kIG9wZXJhbmRfc3Vid29yZF9mb3JjZS4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgSU5URUdFUl9DU1QpOiBKdXN0IGNhbGwgaW1tZWRfZG91YmxlX2NvbnN0LgorCShleHBhbmRfZXhwciwgY2FzZXMgRklYX1RSVU5DX0VYUFIsIEZMT0FUX0VYUFIpOiBEb24ndCBhc3N1bWUKKwlHRVRfTU9ERV9TSVpFIChTSW1vZGUpID09IFVOSVRTX1BFUl9XT1JELgorCShleHBhbmRfYnVpbHRpbik6IExpa2V3aXNlLgorCShkb19qdW1wX2J5X3BhcnRzX3tncmVhdGVyLGVxdWFsaXR5KTogTGlrZXdpc2UuCisJVXNlIG9wZXJhbmRfc3Vid29yZF9mb3JjZS4KKwkqIGV4cHIuaCAob3BlcmFuZF9zdWJ3b3JkKTogUmVtb3ZlIGRlY2xhcmF0aW9uIGZyb20gaGVyZS4KKwkodmFsaWRpemVfbWVtKTogQWRkIG1pc3NpbmcgZGVjbGFyYXRpb24uCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBJZiBhc3NlbWJsZXIgY29kZSBzdHJpbmcgaXMgIiMiLAorCXRyeSB0byBzcGxpdCBpbnNuLgorCUlnbm9yZSBpbnNucyB3aXRoIElOU05fREVMRVRFRF9QIHNldC4KKwkoYWx0ZXJfc3VicmVnKTogUmVtb3ZlIGVycm9uZW91cyBjb2RlIGZvciBDT05TVF9ET1VCTEUuCisJKG91dHB1dF9hZGRyX2NvbnN0KTogSW50ZWdlciBDT05TVF9ET1VCTEVzIGFyZSBub3cgVk9JRG1vZGUuCisJKiBmb2xkLWNvbnN0LmMgKGFkZF9kb3VibGUpOiBObyBsb25nZXIgc3RhdGljLgorCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSwgY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOgorCVVzZSB2YWxpZGl6ZV9tZW0gdG8gdmFsaWRhdGUgZm9yY2VfY29uc3RfbWVtJ3MgcmVzdWx0LgorCShzdWJzdF9jb25zdGFudHMsIGNhc2UgU1VCUkVHKTogVXNlIG9wZXJhbmRfc3Vid29yZCBhbmQKKwlnZW5fbG93cGFydF9jb21tb24gaW5zdGVhZCBvZiBnZW5fbG93cGFydCBhbmQgZ2VuX2hpZ2hwYXJ0LgorCShyZXN0b3JlX2NvbnN0YW50cyk6IERvbid0IGFzc3VtZSBhbGwgQ09OU1RfRE9VQkxFcyBhcmUgZmxvYXRpbmcuCisJVXNlIHZhbGlkaXplX21lbSB0byB2YWxpZGF0ZSBmb3JjZV9jb25zdF9tZW0ncyByZXN1bHQuCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCwgZXhwYW5kX3Vub3ApOiBEb24ndCBhc3N1bWUKKwlHRVRfTU9ERV9TSVpFIChTSW1vZGUpID09IFVOSVRTX1BFUl9XT1JELgorCVVzZSBvcGVyYW5kX3N1YndvcmRfZm9yY2UuCisJKG9wZXJhbmRfc3Vid29yZCk6IERlbGV0ZWQgZnJvbSBoZXJlLiAgTmV3IHZlcnNpb24gaW4gZW1pdC1ydGwuYy4KKwkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEpOiBDaGVjayBmb3IgYW55IGNvbnN0YW50LAorCW5vdCBqdXN0IENPTlNUX0lOVC4KKwkoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdtJywgJ28nKTogQW55IGNvbnN0YW50IE9LIGlmIHN0cmljdCA8IDAuCisJKGNvbnN0cmFpbl9vcGVyYW5kcywgY2FzZSAnRScpOiBNdXN0IGhhdmUgaG9zdCBhbmQgdGFyZ2V0IHdvcmQgc2l6ZXMKKwl0aGUgc2FtZS4KKwkoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdzJywgJ24nKTogQ09OU1RfRE9VQkxFIGNhbiBiZSBpbnRlZ2VyLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2FkcywgY2FzZSAnbScsICdvJywgJ0UnLCAncycsICduJyk6IExpa2V3aXNlLgorCURvbid0IGNhbGwgZm9yY2VfY29uc3RfZG91YmxlX21lbTsgdXNlIGZvcmNlX2NvbnN0X21lbSBpbnN0ZWFkLgorCShmaW5kX3JlbG9hZHNfdG9wbGV2KTogTGlrZXdpc2UuCisJVXNlIGdlbl9sb3dwYXJ0X2NvbW1vbiB0byBnZXQgbG93IHBhcnQgb2YgY29uc3RhbnQuCisJKiBydGwuaCAoZ2VuX2hpZ2hwYXJ0LCBmb3JjZV9jb25zdF9kb3VibGVfbWVtKTogRGVsZXRlZC4KKwkoZ2VuX2xvd3BhcnRfY29tbW9uLCBvcGVyYW5kX3N1YndvcmQsIG9wZXJhbmRfc3Vid29yZF9mb3JjZSk6CisJTmV3IGRlY2xhcmF0aW9ucy4KKwkqIHZhcmFzbS5jIChjb25zdF9kb3VibGVfY2hhaW4pOiBSZW5hbWVkIGZyb20gcmVhbF9jb25zdGFudF9jaGFpbi4KKwkoaW1tZWRfZG91YmxlX2NvbnN0KTogRm9yIGludGVnZXIgY29uc3RhbnRzLCBwZXJmb3JtIGFueSBuZWVkZWQKKwltYXNraW5nIGFuZCBtYWtlIGVpdGhlciBDT05TVF9JTlQgb3IgQ09OU1RfRE9VQkxFLgorCShmb3JjZV9jb25zdF9kb3VibGVfbWVtKTogRGVsZXRlZDsgd291bGQgbmVlZCBhIG1vZGUgYXJnIGFkZGVkCisJd2hpY2ggd291bGQgbWFrZSBpdCBhbG1vc3QgaWRlbnRpY2FsIHRvIGZvcmNlX2NvbnN0X21lbS4KKwkqIG91dC12YXguYyAoc3BsaXRfcXVhZHdvcmRfb3BlcmFuZHMpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkIGluc3RlYWQKKwlvZiBnZW5fbG93cGFydCBhbmQgZ2VuX2hpZ2hwYXJ0LgorCisJKiBmdW5jdGlvbi5jIChmaW5kX3JlcGxhY2VtZW50KTogTmV3IGZ1bmN0aW9uLgorCShmaXh1cF92YXJfcmVmc19pbnNucyk6IFBhc3MgcG9pbnRlciB0byBsaXN0aGVhZCBvZiAobmV3KQorCWZpeHVwX3JlcGxhY2VtZW50IHN0cnVjdHVyZXM7IGlmIGFueSBlbnRyaWVzIHdlcmUgcHNldWRvcywgY29weSBmcm9tCisJbWVtb3J5IHRvIHRoZSBwc2V1ZG8uCisJKGZpeHVwX3Zhcl9yZWZzXzEpOiBOZXcgYXJnIFJFUExBQ0VNRU5UUzsgcHJvdmlkZSB0aGF0IGFyZyBpbgorCXJlY3Vyc2l2ZSBjYWxscy4KKwlVc2UgZmluZF9yZXBsYWNlbWVudHMgdG8gZW5zdXJlIHdlIGRvbid0IGJyZWFrIGFueSBNQVRDSF9EVVBzLgorCitUdWUgSnVuICA0IDA1OjA3OjUzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIHN0bXQuYyAocHVzaGNhc2UsIHB1c2hjYXNlX3JhbmdlKTogVGFrZSBuZXcgcGFyYW1ldGVyIERVUExJQ0FURS4KKwlVc2UgdGhpcyB0byBzdG9yZSBleGlzdGluZyBMQUJFTF9ERUNMIGlmIExBQkVMIGlzIGEgZHVwbGljYXRlLgorCSogYy1wYXJzZS55LCBjcGx1cy1wYXJzZS55LCBvYmpjLXBhcnNlLnksIHN0bXQuYzogQWxsIGNhbGxlcnMKKwljaGFuZ2VkLgorCitNb24gSnVuICAzIDE3OjE5OjQwIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWV4cHIuYyAoZGVjbF9pbl9tZW1vcnlfcCk6IE5ldyBmdW5jdGlvbi4KKwkqIGNwbHVzLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogVGVzdCBgZGVjbF9pbl9tZW1vcnlfcCcgaW5zdGVhZAorCW9mIHRlc3RpbmcgbWVtb3J5X29wZXJhbmQsIHNpbmNlIHRoZSBERUNMX1JUTCBvZiBhIGRlY2wgbWF5IGJlIGEKKwkoTUVNIC4uLikgYnkgbm90IGEgdmFsaWQgbWVtb3J5IGFkZHJlc3MuCisKKwkqIGNwbHVzLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogV2hlbiB3ZSBkZWNpZGUgdGhhdCBhIHN0YXRpYworCWNvbnN0IHZhcmlhYmxlIG11c3QgZ28gdG8gbWVtb3J5LCBtYWtlIHN1cmUgdGhhdCBpdHMgcnRsIGlzCisJYWxsb2NhdGVkIGZyb20gdGhlIGNvcnJlY3Qgb2JzdGFjay4KKworCSogY3BsdXMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFJlcGxhY2UgdW5kb2N1bWVudGVkIEJSRUFLX0NfVEFHUworCSNkZWZpbmUgY29udHJvbCB3aXRoIGNvbW1lbnRzIGV4cGxhaW5pbmcgd2h5IG9yIGhvdyBpdCBpcyBjb3JyZWN0CisJZm9yIEdOVSBDKysgdG8gYnJlYWsgQydzIG5vdGlvbnMgb2Ygd2hhdCBhIHRhZyBpcy4KKworCSogY3BsdXMtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IFJlcGxhY2UgdW5kb2N1bWVudGVkICNpZgorCUFNQklHVU9VU19XT1JLSU5HIGNvbnRyb2wgd2l0aCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgYWN0aW9ucworCXdoZXJlIHRoaXMgY29udHJvbCB1c2VkIHRvIGJlLgorCitNb24gSnVuICAzIDE1OjA3OjQ3IDE5OTEgIFNlYW4gRXJpYyBGYWdhbiAgKHNlZiBhdCBraXRocnVwKQorCisJKiB0bS1pMzg2LmggKFRSQU1QT0xJTkVfVEVNUExBVEUpOiAgQ2hhbmdlZCBhIDA0MCB0byAweGUwOworCXRoaXMgaXMgdGhlIHByb3BlciBjb2RlIGZvciBhIGptcCBbJWVheF0gaW5zdHJ1Y3Rpb24uCisKK01vbiBKdW4gIDMgMDg6MDc6NDIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2NjcC5jIChpbml0aWFsaXplX2J1aWx0aW5zKTogSW5zdGFsbCBfX1NJWkVfX1RZUEVfXywKKwlfX1BUUkRJRkZfVFlQRV9fLCBhbmQgX19XQ0hBUl9fVFlQRV9fIGFzIGJ1aWx0aW5zLgorCitTdW4gSnVuICAyIDE4OjE4OjE5IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAobWFya19zZXRfMSk6IERvbid0IHNldCBMQVNUX01FTV9TRVQgZnJvbSBhIE1FTSB0aGF0IGhhcyBhbnkKKwlzaWRlLWVmZmVjdHMgKHN1Y2ggYXMgYXV0by1pbmMpLCBub3QganVzdCB2b2xhdGlsZSBNRU1zLgorCisJKiBydGxhbmFsLmMgKHJlZ19yZWZlcmVuY2VkX3ApOiBOZXcgZnVuY3Rpb24uCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQ29ycmVjdCB0ZXN0IGZvciBhZGRlZF9zZXRzXzEgdG8gYWNjb3VudAorCWZvciBjYXNlIHdoZXJlIEkxIGFuZCBJMiBib3RoIGZlZWQgSTMuCisJKGRpc3RyaWJ1dGVfbm90ZXMpOiBEb24ndCBpbnRlcnByZXQgc2V0dGluZyBhIHJlZyBhcyBhIHVzZSBvZiB0aGUKKwlyZWc7IHVzZSBuZXcgcmVnX3JlZmVyZW5jZWRfcCBhbmQgc2ltcGxpZnkgY29kZS4KKworCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBFbnN1cmUgdGhhdCBMT09QX0RFUFRIIGlzIGNvcnJlY3QgYXQgYWxsCisJaW5zbnMgaW4gYSBiYXNpYyBibG9jaywgb3RoZXJ3aXNlIHJlZ19uX3JlZnMgd2lsbCBiZSBzZXQgaW5jb3JyZWN0bHkuCisKKwkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEpOiBEb24ndCBjaGFuZ2UgbW9kZSBvZiBtZW1vcnkKKwlyZWZlcmVuY2UgdGhhdCBpcyBtb2RlLWRlcGVuZGVudC4KKwlEb24ndCBtYWtlIGEgTUVNIHdpdGggYSBsYXJnZXIgbW9kZSB0aGFuIG9yaWdpbmFsLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRGlzYWJsZSBjb2RlIHRvIGNoZWNrIE1PREVTX1RJRUFCTEVfUAorCWFkZGVkIE1heSAyMHRoIGFuZCAyMm5kOyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIG5vdyB0aGF0CisJTElNSVRfUkVMT0FEX0NMQVNTIGhhcyBiZWVuIGFkZGVkIHRvIHJlbG9hZC4KKworCSogZmxvdy5jIChtYXJrX3NldF8xKTogQWxsb3cgZm9yIHRoZSBmYWN0IHRoYXQgc3RhY2sgcHVzaGVzIGRvbid0IGhhdmUKKwlSRUdfSU5DIG5vdGVzLgorCSogbG9jYWwtYWxsb2MuYyAob3B0aW1pemVfcmVnX2NvcHkpOiBMaWtld2lzZS4KKwlEb24ndCBjaGFuZ2UgbGl2ZXMgb2YgaGFyZCByZWdpc3RlcnMgI2lmZGVmIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMuCisJQSBVU0Ugb2YgYSByZWdpc3RlciBtdXN0IG5vdCBiZSBjaGFuZ2VkLgorCSh2YWxpZGF0ZV9lcXVpdl9tZW0pOiBEb24ndCBtYWtlIGFuIGVxdWl2YWxlbmNlIHRvIHZvbGF0aWxlIE1FTXMuCisKKwkqIHJlb3JnLmMgKG1hcmtfc2V0X3Jlc291cmNlcyk6ICNpZmRlZiBQVVNIX1JPVU5ESU5HLCBtYXJrIFNQIGFzIGFsd2F5cworCXNldCBzaW5jZSB0aGUgaW5zbiBtaWdodCBoYXZlIGEgKHByZV9kZWMgc3ApLgorCitTdW4gSnVuICAyIDE2OjAzOjMxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGxpYmdfZGlyKTogVmFyaWFibGUgZGVsZXRlZC4KKwkoaW5zdGFsbC1nbnVsaWIpOiBEb24ndCBib3RoZXIgY3JlYXRpbmcgbGliZy5hLgorCisJKiBjY2NwLmMgKHNpemVfdHlwZV9zdHJpbmcsIGV0Yy4pOiBWYXJpYWJsZXMgZGVsZXRlZC4KKwkoc3BlY2lhbF9zeW1ib2wpOiBVc2UgbWFjcm9zIFNJWkVfVFlQRSwgZXRjLiwgZGlyZWN0bHkuCisKK1NhdCBKdW4gIDEgMTI6NTQ6MDUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBMZXQgdG0uaCBzcGVjaWZ5IHR5cGVzIGZvciBzaXplX3QsIHB0cmRpZmZfdCBhbmQgd2NoYXJfdC4KKwkoU0laRV9UWVBFLCBQVFJESUZGX1RZUEUsIFdDSEFSX1RZUEUpOiBOZXcgcGFyYW1zLgorCSogY2NjcC5jLCBjLWRlY2wuYzogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb25zIG9mIHRoZSBuZXcgcGFyYW1zLgorCSogY2NjcC5jIChfX1NJWkVfVFlQRV9fLCBfX1BUUkRJRkZfVFlQRV9fLCBfX1dDSEFSX1RZUEVfXyk6IEJ1aWx0aW5zLgorCShzcGVjaWFsX3N5bWJvbCk6IEltcGxlbWVudCB0aGVtIGJhc2VkIG9uIG5ldyBwYXJhbXMuCisJKiBzdGRkZWYuaCAoc2l6ZV90LCBwdHJkaWZmX3QsIHdjaGFyX3QpOiBEZWNsYXJlIHVzaW5nIHRob3NlIGJ1aWx0aW5zLgorCSogYy10cmVlLmggKHB0cmRpZmZfdHlwZV9ub2RlKTogRGVjbGFyZSB2YXJpYWJsZS4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSAqX1RZUEUgcGFyYW1zCisJdG8gY29udHJvbCBzZXR0aW5nIG9mIHNpemV0eXBlLCB3Y2hhcl90eXBlX25vZGUgYW5kIHB0cmRpZmZfdHlwZV9ub2RlLgorCSogYy10eXBlY2suYyAocG9pbnRlcl9kaWZmKTogVGFrZSByZXN1bHQgdHlwZSBmcm9tIHB0cmRpZmZfdHlwZV9ub2RlLgorCisJKiBjb25maWd1cmUgKHRhcmdldDEpOiBSZWFsbHkgY2hhbmdlIC8gdG8gLS4KKworU2F0IEp1biAgMSAwMjo0OTowNCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWxleC5jIChleHRyYWN0X2ludGVyZmFjZV9pbmZvKTogTm93IG5vbi1zdGF0aWMuICBDYWxsZWQKKwl3aGVuZXZlciBJTlBVVF9GSUxFTkFNRSBjaGFuZ2VzLgorCSogY3BsdXMtcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsCisJYGV4dHJhY3RfaW50ZXJmYWNlX2luZm8nIHdoZW4gc3dpdGNoaW5nIGZpbGVzLgorCSogY3BsdXMtaW5wdXQuYyAoZ2V0Y2gpOiBEaXR0by4KKworCSogY29tYmluZS5jIChzdWJzdCk6IERvbid0IGNoYW5nZSB0aGUgbW9kZSBvZiBtZW1vcnkgYWNjZXNzIGZvcgorCXZvbGF0aWxlIG1lbW9yeS4KKworCSogdG0tc3BhcmMuaCAoQ09OU1RfQ09TVFMpOiBGaXggdHlwbyBpbiBjb21wdXRpbmcgY29zdCBvZgorCUNPTlNUX0RPVUJMRSBmb3IgREltb2RlIGludGVnZXJzLgorCitGcmkgTWF5IDMxIDE2OjExOjU3IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCB3YXRjaC5jb20pCisKKwkqIGNwbHVzLWxleC5jIChwcm9jZXNzX25leHRfaW5saW5lKTogU2V0IGxpbmUgbnVtYmVyIGFuZCBmaWxlbmFtZSBpZgorCW1vcmUgaW5saW5lIGRhdGEgaXMgdG8gYmUgcHJvY2Vzc2VkLgorCShzdG9yZV9wZW5kaW5nX2lubGluZSk6IFRyZWF0IEZVTkNUSU9OX1RZUEUgbGlrZSBNRVRIT0RfVFlQRS4gIFVzZQorCWN1cnJlbnRfY2xhc3NfdHlwZSBpbnN0ZWFkIG9mIGV4dHJhY3RpbmcgaXQgZnJvbSBtZXRob2QgdHlwZTsgdGhlCisJdHdvIHNob3VsZCBiZSB0aGUgc2FtZSwgYW5kIHRoZSBsYXR0ZXIgZG9lc24ndCB3b3JrIGZvciBzdGF0aWNzLgorCisJKiBjcGx1cy1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBXaGVuIGNvbnN0cnVjdGluZyB0ZW1wbGF0ZXMsIHVzZQorCW9yaWdpbmFsIG5hbWUgb2YgZnVuY3Rpb24gcmF0aGVyIHRoYW4gIm1hbmdsZWQiIG5hbWUuICBMb29rIGZvcgorCUZVTkNUSU9OX0RFQ0wsIG5vdCBGVU5DVElPTl9UWVBFLCB3aGVuIGRlY2lkaW5nIGhvdyB0byBwdXNoIHRoZQorCW5ldyBkZWNsLgorCShzdGFydF9tZXRob2QpOiBEZWZhdWx0IGlubGluaW5nIGRvZXMgbm90IGFwcGx5IHRvIHRlbXBsYXRlCisJZXhwYW5zaW9ucy4KKworCSogY3BsdXMtcHQuYyAocGVuZGluZ190ZW1wbGF0ZV9leHBhbnNpb25zKTogTW92ZWQgZGVjbGFyYXRpb24gdG8KKwlzdGFydCBvZiBmaWxlLgorCSh0c3Vic3QpOiBGb3IgRlVOQ1RJT05fREVDTCwgdXNlIG9yaWdpbmFsIG5hbWUgb2Ygc291cmNlLCBub3QKKwltYW5nbGVkIG5hbWUuCisJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogTG9jYWwgdmFyaWFibGVzIG5vdyBub24tc3RhdGljLiAgRmlsbCBpbgorCXBlbmRpbmctaW5saW5lIGZpZWxkIG9mIG5ldyBkZWNsLCByYXRoZXIgdGhhbiB0ZW1wbGF0ZS1pbmZvLCBhbmQKKwljaGFpbiBpbnRvIGVpdGhlciBwZW5kaW5nLWlubGluZXMgb3IgcGVuZGluZy10ZW1wbGF0ZS1leHBhbnNpb25zLgorCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSWYgYSB0ZW1wbGF0ZSBpcyBmb3VuZCwKKwl0cmVhdCBpdCBhcyBhbiBvdmVybG9hZGVkIGRlY2xhcmF0aW9uLgorCitGcmkgTWF5IDMxIDE0OjIwOjQ1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGFsbC5jcm9zcyk6IE5ldyB0YXJnZXQuCisJKiBjb25maWd1cmU6IElmIGNyb3NzLWNvbXBpbGluZywgY2hhbmdlIGBBTEwnIHRvIHVzZSBhbGwuY3Jvc3MuCisKK0ZyaSBNYXkgMzEgMTE6NDM6MzEgMTk5MSAgTWF0dGhldyBTZWxmICAobXNlbGYgYXQgbmV4dC5jb20pCisKKwkqIHRtLW5leHQuaCAoRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOgorCUFkZCBuZXcgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3Igc2VjdGlvbnMuCisJKE1BWF9PRklMRV9BTElHTk1FTlQpOiBEZWZpbmUgYXMgMl4xNSBmb3IgTWFjaC1PLgorCShBU01fT1VUUFVUX0FMSUdOKTogVXNlIC5hbGlnbiwgbm90IC5ldmVuLiAgQWxsb3cgYWxpZ25tZW50cyA+IDIuCisJKENQUF9QUkVERUZJTkVTKTogQWRkZWQgLURtNjhrIHNpbmNlIHNvbWUgY29kZSBleHBlY3RzIHRoaXMuCisKK0ZyaSBNYXkgMzEgMDU6NDE6NTEgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtY2xhc3MuYyAocHVzaGNsYXNzKTogTmV3IGFyZ3VtZW50IHZhbHVlIGZvciBNT0RJRlkgYWNjZXB0ZWQuCisJKiBjcGx1cy1kZWNsMi5jIChidWlsZF9wdXNoX3Njb3BlKTogQ2FsbCBgcHVzaGNsYXNzJyB3aXRoIE1PRElGWSA9PSAzLgorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFNldCBUUkVFX1BVQkxJQyBhbmQgVFJFRV9FWFRFUk5BTAorCWJpdHMgb24gZnVuY3Rpb25zIGFjY29yZGluZyB0byAjcHJhZ21hIGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiwKKwlyZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBmdW5jdGlvbidzIGlubGluZS4gIFRoaXMgZml4ZXMgdGhlCisJYnVnIG9mIG5lZWRsZXNzIGNvZGUgcmVwbGljYXRpb24gd2l0aCAtZm5vLWlubGluZS4KKworVGh1IE1heSAzMCAxNzozOTo1MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOgorCURvbid0IGxvc2Ugdm9sYXRpbGl0eSBvZiBmaWVsZHMgaW4gQ09NUE9ORU5UX1JFRi4KKworVGh1IE1heSAzMCAxNzozNjo0NSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY291bnRfcmVnX3VzYWdlLCBkZWxldGVfZGVhZF9mcm9tX2NzZSk6IE5ldyBmdW5jdGlvbnMuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgZGVsZXRlX2RlYWRfZnJvbV9jc2UgaW1tZWRpYXRlbHkKKwlhZnRlciB0aGUgZmlyc3QgY3NlIHBhc3MuCisKKwkqIGxvY2FsLWFsbG9jLmMgKHZhbGlkYXRlX2VxdWl2X21lbV9mcm9tX3N0b3JlLCB2YWxpZGF0ZV9lcXVpdl9tZW0pOgorCU5ldyBmdW5jdGlvbnMsIHRvIGZpbmQgY2FzZXMgd2hlcmUgYSBSRUcgaXMgZXF1aXZhbGVudCB0byBhIE1FTS4KKwkob3B0aW1pemVfcmVnX2NvcHkpOiBOZXcgZnVuY3Rpb24uCisJKHVwZGF0ZV9lcXVpdl9yZWdzKTogQ2FsbCB0aGVzZSBuZXcgZnVuY3Rpb25zLgorCUxvb2sgZm9yIGEgcmVnaXN0ZXIgdXNlZCBpbiBvbmx5IG9uZSBiYXNpYyBibG9jayBiZWluZyBzdG9yZWQgaW50bworCW1lbW9yeS4KKwlLZWVwIHRyYWNrIG9mIGxvb3AgZGVwdGggc28gd2UgY2FuIGZpbmQgcmVncyB1c2VkIG9ubHkgb25jZSwgYnV0CisJaW5zaWRlIGEgbG9vcC4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogVXNlIHNpbmdsZV9zZXQgd2hlbiBsb29raW5nIGZvciBhbiBpbnNuCisJdGhhdCBpbml0aWFsaXplcyBhIHJlZ2lzdGVyLgorCUlmIG1ha2luZyBhIFJFRyBlcXVpdmFsZW50IHRvIGEgTUVNLCB0aGUgaW5zbiB3aXRoIFNFVF9ERVNUIGJlaW5nCisJdGhlIHJlZ2lzdGVyIGlzbid0IGFsd2F5cyB0aGUgb25lIG1ha2luZyB0aGUgZXF1aXZhbGVuY2UsIHNpbmNlIHRoZQorCWVxdWl2YWxlbmNlIG1pZ2h0IGJlIG9jY3VycmluZyBkdWUgdG8gYSBzdG9yZSBpbnRvIE1FTTsgaW4gdGhhdAorCWNhc2Ugc2V0IHJlZ19lcXVpdl9pbml0IHRvIHRoZSBsYXR0ZXIgaW5zbi4KKworVGh1IE1heSAzMCAxNDoyMzowMSAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBQZW5kaW5nIGV4cGFuc2lvbnMgcHJvY2Vzc2VkIGF0IGVuZC1vZi1maWxlIGNhbiBiZSBwcm9jZXNzZWQgb3V0CisJb2Ygb3JkZXIsIHNvIGZyZWVpbmcgdGhlIGFzc29jaWF0ZWQgZGF0YSBmcm9tIHRoZSBvYnN0YWNrcyBpcyBub3QKKwlwb3NzaWJsZS4KKwkqIGNwbHVzLXRyZWUuaCAoc3RydWN0IHBlbmRpbmdfaW5saW5lKTogTmV3IGZpZWxkIGNhbl9mcmVlCisJaW5kaWNhdGVzIHdoZXRoZXIgdG8gZnJlZSB0aGUgdGV4dCBhZnRlciBwcm9jZXNzaW5nIGl0LgorCSogY3BsdXMtbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lLCBwcm9jZXNzX25leHRfaW5saW5lKTogSWYKKwljYW5fZnJlZSBmbGFnIGlzIHNldCwgc3BlY2lmeSBpbmxpbmUtdGV4dCBvYnN0YWNrLCBvdGhlcndpc2UgbnVsbAorCXBvaW50ZXIuCisJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IENsZWFyIGZsYWcuCisJKHJlaW5pdF9wYXJzZV9mb3JfbWV0aG9kKTogU2V0IGl0LgorCShzdG9yZV9wZW5kaW5nX2lubGluZSk6IENsZWFyIGl0IHdoZW4gY2hhbmdpbmcgb2JzdGFja3MuCisJKHBlbmRpbmdfdGVtcGxhdGVfb2JzdGFjayk6IERlbGV0ZWQuICBSZWZlcmVuY2VzIGNoYW5nZWQgdG8gdXNlCisJcGVybWFuZW50X29ic3RhY2suCisKKwkqIGNwbHVzLWxleC5jIChzdG9yZV9wZW5kaW5nX2lubGluZSk6IFNldCBERUNMX1BFTkRJTkdfSU5MSU5FX0lORk8KKwl2YWx1ZSBhZnRlciBzd2FwcGluZyBvYnN0YWNrcywgbm90IGJlZm9yZS4KKworVGh1IE1heSAzMCAwNzoyMzoxOCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIHZhLXNwYXJjLmg6IEhhcyB0byBiZSBhIGNoYXIgKiB0byBiZSBjb21wYXRpYmxlIHdpdGggU3VuLgorCWkuZS4sIHdlIGhhdmUgdG8gcGFzcyBhIGB2YV9saXN0JyB0byB2c3ByaW50Zi4gIEFsc28sIGZpeGVkCisJYnVnIGluIHBhc3NpbmcgdmFyYXJnIHN0cnVjdHMuCisKK1RodSBNYXkgMzAgMDA6MzI6MTggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmU6IERlbGV0ZSBNYWtlZmlsZS50ZW0gYmVmb3JlIHdyaXRpbmcgaXQuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOgorCUlnbm9yZSBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTIGZvciBpbmNvbXBsZXRlIHR5cGUuCisKKwkqIGZpeGluY2x1ZGVzIChzdGR0eXBlcy5oKTogSGFuZGxlIHdjaGFyX3QgbGlrZSB0aGUgb3RoZXIgdHlwZXMuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IERvbid0IGRlY2xhcmUgYXJnc19zb19mYXIgcmVnaXN0ZXIuCisKK1dlZCBNYXkgMjkgMTU6MTM6MDUgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogY3BsdXMtdHJlZS5kZWYgKFRFTVBMQVRFX1BBUk1fSURYKTogRGVsZXRlZC4KKwkoVEVNUExBVEVfVFlQRV9QQVJNKTogTmV3IG5vZGUgdHlwZSwgbG9va3MgbGlrZSBhIHR5cGUgbm9kZS4KKwkoVEVNUExBVEVfQ09OU1RfUEFSTSk6IE5ldyBub2RlIHR5cGUsIGxvb2tzIGxpa2UgYSBjb25zdCBub2RlLgorCisJKiBjcGx1cy10cmVlLmggKElERU5USUZJRVJfVFlQRV9WQUxVRV9QVFIpOiBJbmxpbmVkIHVuZGVyIGdjYy4KKwkoVFlQRV9JREVOVElGSUVSX1BUUik6IERpdHRvLgorCShERUNMX05FU1RFRF9UWVBFTkFNRV9QVFIpOiBEaXR0by4KKwkoc3RydWN0IGxhbmdfdHlwZSk6IE5ldyBiaXRmaWVsZCBgdXNlX3RlbXBsYXRlJy4KKwkoQ0xBU1NUWVBFX1VTRV9URU1QTEFURSk6IEFjY2Vzc29yIG1hY3JvIGZvciBhYm92ZS4KKwkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCBgdGVtcGxhdGVfaW5mbycuCisJKERFQ0xfVEVNUExBVEVfSU5GTyk6IEFjY2Vzc29yIG1hY3JvIGZvciBhYm92ZS4KKwkoVEVNUExBVEVfRVhQQU5TSU9OX05BTUVfUCk6IERlbGV0ZWQuCisJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsX3RvcF9sZXZlbCk6IEFkZGVkIGRlY2xhcmF0aW9uLgorCShURU1QTEFURV9UWVBFX1RQQVJNTElTVCwgVEVNUExBVEVfVFlQRV9JRFgsCisJVEVNUExBVEVfVFlQRV9TRVRfSU5GTywgVEVNUExBVEVfQ09OU1RfVFBBUk1MSVNULAorCVRFTVBMQVRFX0NPTlNUX0lEWCwgVEVNUExBVEVfQ09OU1RfU0VUX0lORk8pOiBOZXcgbWFjcm9zIGZvcgorCWFjY2Vzc2luZyBmaWVsZHMgb2YgVEVNUExBVEVfLi4uX1BBUk0gbm9kZXMuCisJKHN0cnVjdCBwZW5kaW5nX2lubGluZSk6IE5ldyBmaWVsZHMgZm9yIG5hbWVzIGFuZCB2YWx1ZXMgdG8gYmluZAorCXRvIHRoZW0gd2hpbGUgcHJvY2Vzc2luZy4KKwkoc3RydWN0IHRlbXBsYXRlX2luZm8pOiBEZWZpbml0aW9uIG1vdmVkIGhlcmUgZnJvbSBjcGx1cy1wdC5jLgorCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IEFkZGVkIGRlY2xhcmF0aW9uLgorCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERpdHRvLgorCShwcm9jZXNzaW5nX3RlbXBsYXRlX3tkZWNsLGRlZm59KTogTmV3IHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJvdmlkZSBtaXNzaW5nIGFyZ3VtZW50IHRvCisJcHJpbnRfbm9kZSBmb3IgYGJpdHBvcycgZmllbGQuICBEaXNwbGF5IGB2aXJ0dWFsJyBmbGFnLCBhbmQgKGZvcgorCWZ1bmN0aW9uIGFuZCBtZXRob2QgdHlwZXMpIGBjbGFzcycgZmllbGQ7IHRoZXNlIGFyZSBvbmx5IHVzZWQgYnkKKwlDKysgdGhhdCBJJ20gYXdhcmUgb2YsIGJ1dCBhcmUgZGVmaW5lZCBpbiBjb21tb24gY29kZSwgc28gdGhleQorCXNob3VsZCBiZSBkaXNwbGF5ZWQgaGVyZS4KKworCSogY3BsdXMtcGFyc2UueSAodGVtcGxhdGVfZGVmKTogU2VwYXJhdGUgc2V0IG9mIGRlcml2YXRpb25zLCBmb3IKKwljbGFzcyBhbmQgZnVuY3Rpb24gdGVtcGxhdGVzLiAgVGVtcGxhdGVfZGVmIGlzIGEgdHlwZSBvZiBleHRkZWY7CisJZXh0ZXJuX2xhbmdfc3RyaW5nIGJlZm9yZSB0ZW1wbGF0ZV9kZWYgaXMgbm90IHBlcm1pdHRlZC4KKwkoZm5fdG1wbF9lbmQpOiBOZXcgbm9udGVybWluYWwsIGFueXRoaW5nIHRoYXQgc2lnbmFscyB0aGUgZW5kIG9mCisJdGhlIHBvcnRpb24gb2YgYSB0ZW1wbGF0ZSB0aGF0IHdlIHNob3VsZCBwYXJzZS4KKwkoeXlwcmludCk6IERlZmluZSBvbmx5IGlmIFlZREVCVUcuICBIYW5kbGUgVFlQRVNQRUMuCisJKGRhdGFkZWYpOiBDb21wbGFpbiBhdCBjbGFzcyB0ZW1wbGF0ZSBvdmVycmlkZSBkZWNsYXJhdGlvbiBpZiB0aGF0CisJc3BlY2lhbGl6YXRpb24gaGFzIGFscmVhZHkgYmVlbiBwcm9kdWNlZCBieSBleHBhbnNpb24uICBUZW1wbGF0ZQorCWRlZmluaXRpb25zIG5vIGxvbmdlciBiZWxvbmcgaGVyZS4KKwkodG1wbC4yKTogQWx3YXlzIGNhbGwgaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGU7IGxldCBpdCBkZWNpZGUKKwl3aGV0aGVyIG9yIG5vdCB0byBnbyB0aHJvdWdoIHdpdGggaXQuCisJKHRlbXBsYXRlX2luc3RhbnRpYXRpb24pOiBQdXQgZGVjbCBpbiBnbG9iYWwgc2NvcGUgb25seSBpZiBub3QKKwlhbHJlYWR5IHRoZXJlLgorCSh0eXBlc3BlYywgc2NvcGVkX3R5cGVuYW1lKTogU2NvcGVkIHR5cGVuYW1lIGluc2lkZSB0ZW1wbGF0ZSB0eXBlCisJc2hvdWxkIGJlIGEgc2NvcGVkX3R5cGVuYW1lLCBub3QgYSB0eXBlc3BlYy4gIEhvd2V2ZXIsIGEKKwl0ZW1wbGF0ZV90eXBlIHNob3VsZCBiZSBhbGxvd2VkIGFzIGEgdHlwZXNwZWMuCisJKHN0cnVjdHNwKTogRG9uJ3QgdW5kbyB0ZW1wbGF0ZSBuYW1lIG92ZXJsb2FkIGhlcmUuICBEZWxldGVkCisJZGVyaXZhdGlvbiBmcm9tIHRlbXBsYXRlX3R5cGUuCisJKG5hbWVkX2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSk6IERvbid0IG92ZXJsb2FkIHRlbXBsYXRlIG5hbWUuCisJKExDKTogRG8gaXQgaGVyZS4KKwkobm90eXBlX2RlY2xhcmF0b3IpOiBGb3Igc2NvcGVkX2lkIGRlcml2YXRpb25zLCBkb24ndCBjYWxsCisJYnVpbGRfcHVzaF9zY29wZSBpZiB0aGUgc2NvcGVkX2lkIGlzIGEgU0NPUEVfUkVGLgorCShzY29wZWRfaWQpOiBNb3ZlZCBvbGQgdHlwZXNwZWMtZnJvbS10ZW1wbGF0ZV90eXBlIHJ1bGUgaGVyZS4KKwlDYWxsIHJlc29sdmVfc2NvcGVfdG9fbmFtZSBvbmx5IGlmIHRlbXBsYXRlIHBhcm1zIGFyZW4ndCBpbnZvbHZlZC4KKworCSogY3BsdXMtcHQuYyAoc3RydWN0IHRlbXBsYXRlX2luZm8pOiBEZWZpbml0aW9uIGRlbGV0ZWQuCisJKHRlbXBsYXRlcywgY3VycmVudF90ZW1wbGF0ZV9pbmZvKTogVmFyaWFibGVzIGRlbGV0ZWQuCisJKHByb2Nlc3NpbmdfdGVtcGxhdGVfe2RlY2wsZGVmbn0pOiBOZXcgdmFyaWFibGVzLgorCShwdXNoX3RlbXBsYXRlX2RlY2xzLCBwb3BfdGVtcGxhdGVfZGVjbHMpOiBBY2NlcHQgcGFybWxpc3QgYW5kCisJYXJnbGlzdCBhcyBzZXBhcmF0ZSBhcmd1bWVudHMsIGluc3RlYWQgb2YgZGVyaXZpbmcgYm90aCBmcm9tIHRoZQorCXRlbXBsYXRlLiAgSWYgY2xhc3NfbGV2ZWwgaXMgbm9uLXplcm8sIHB1c2ggYW5kIHBvcCBhIGxldmVsLAorCW1ha2luZyBpdCB0cmFuc3BhcmVudCB0byB0YWdzLiAgUmVtb3ZlZCBzb21lIHBvaW50bGVzcyBjaGVja3MgZnJvbQorCXBvcF90ZW1wbGF0ZV9kZWNscyB0aGF0IGFyZSBvbmx5IG5lZWRlZCBpbiBwdXNoX3RlbXBsYXRlX2RlY2xzLAorCWFuZCBzb21lIGFzc2VydGlvbnMgZnJvbSBib3RoLiAgQ2FsbGVycyBjaGFuZ2VkLgorCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogUmV0dXJuIG5vbi16ZXJvIGlmZiBhcmd1bWVudCByZWZlcnMgdG8gYW55CisJVEVNUExBVEVfKl9QQVJNIG5vZGVzLgorCSh0c3Vic3QpOiBXYWxrIHRyZWUsIHN1YnN0aXR1dGluZyBmb3IgdGVtcGxhdGUgcGFybXMsIHJldHVybmluZworCW5ldyB0cmVlLgorCSh0eXBlX3VuaWZpY2F0aW9uKTogUmV3cml0dGVuIGEgYml0LCB0byBtYWtlIGl0IHdvcmsuICBOZXcKKwlhcmd1bWVudCBuc3Vic3RzIGlzIHBvaW50ZXIgdG8gcGxhY2UgdG8gcmVjb3JkIG51bWJlciBvZgorCXN1YnN0aXR1dGlvbnMgbWFkZSB3aGVuIG1hdGNoaW5nLgorCSh1bmlmeSk6IFJlbmFtZWQgZnJvbSB1bmlmeTEuICBSZXdyaXR0ZW4gY29tcGxldGVseSwgdG8gd29yay4KKwlTdGlsbCBtYXkgbmVlZCBleHRlbmRpbmcgZm9yIHNvbWUgdHJlZSBub2RlIHR5cGVzLgorCShkb19wZW5kaW5nX2V4cGFuc2lvbnMpOiBBdCBlbmQtb2YtZmlsZSwgZXhwYW5kIGFueSB0ZW1wbGF0ZXMgbm90CisJeWV0IGV4cGFuZGVkIHdoaWNoIHdlcmUgYWN0dWFsbHkgbmVlZGVkLiAgTmVlZHMgd29yayB0byBhY2NvbW9kYXRlCisJbGF0ZXN0IHNwZWNzLgorCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBTaW1wbGlmaWVkIHNsaWdodGx5LiAgTm9uLXR5cGUgcGFybXMKKwlzaG91bGQgYmUgbWFya2VkIHJlYWQtb25seTsgYWdncmVnYXRlIHR5cGVzIGFyZSBub3QgYWxsb3dlZCwgc2luY2UKKwllcXVhbGl0eSBjaGVja3MgZG9uJ3Qgd29yay4KKwkoZW5kX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IE1vdmVkIHRvIGFmdGVyIHByb2Nlc3NfdGVtcGxhdGVfcGFybS4KKwlQdXNoIGEgbGV2ZWwsIGFuZCBwdXNoIGRlY2xzIGZvciBURU1QTEFURV8qX1BBUk1zLiAgU2V0CisJcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGZsYWcuCisJKGVuZF90ZW1wbGF0ZV9kZWNsKTogRm9yIG5vbi1jbGFzcyB0ZW1wbGF0ZXMsIGJ1aWxkIGEKKwlURU1QTEFURV9ERUNMIGFuZCBzdG9yZSB0aGUgcmVndWxhciBkZWNsIGluIGl0cyByZXN1bHQgZmllbGQuCisJQ29udGV4dCBhbmQgb3RoZXIgdmFsdWVzIGdldCBjb3BpZWQgb3ZlciB0b28uICBDYWxsIHBvcGxldmVsIHRvCisJZ2V0IHJpZCBvZiB0aGUgVEVNUExBVEVfKl9QQVJNIGRlY2xzLCBhbmQgY2FsbAorCWRvbnRfZm9yZ2V0X292ZXJsb2FkIHRvIGF2b2lkIGxvc2luZyB0aGUgZGVjbGFyYXRpb24gbGF0ZXIuICBDbGVhcgorCXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCBmbGFnLiAgQ2FsbCBnZXRfcGVuZGluZ19zaXplcywgc28gbGF0ZXIKKwlmdW5jdGlvbiBjb21waWxhdGlvbiBkb2Vzbid0IHRyeSB0byBldmFsdWF0ZSBzaXplcyBvZiB0ZW1wbGF0ZXMuCisJKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IENvbnZlcnQgdHlwZS9ub24tdHlwZSBjaGVjayBmcm9tCisJc3dpdGNoIHRvIGlmIHRlc3QuICBBZGRlZCBzdXBwb3J0IGZvciBFTlVNRVJBTF9UWVBFLCBSRUFMX1RZUEUsCisJYW5kIFBPSU5URVJfVFlQRSBwYXJtcy4KKwkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZW5hbWVkIGZyb20gb2xkCisJaW5zdGFudGlhdGVfdGVtcGxhdGUuICBEb24ndCBleHBhbmQgaWYgdHlwZSBzaXplIGlzIHNldCwgb3IgaWYKKwliZWluZy1kZWZpbmVkIGZsYWcgaXMgc2V0LCBvciB1c2UtdGVtcGxhdGUgZmxhZyBpcyBub24temVyby4gIElmCisJb3RoZXItdGVtcGxhdGUgcGFybXMgYXJlIHVzZWQgaW4gdGhlIHBhcm0gbGlzdCwgY29uc3RydWN0IGEgc2ltcGxlCisJUkVDT1JEX1RZUEUgbm9kZSBhbmQgcmV0dXJuIGl0LiAgQ2F0Y2ggY2FzZSBvZiB0ZW1wbGF0ZSBkZWNsYXJlZAorCWJ1dCBub3QgZGVmaW5lZCBiZWZvcmUgdXNlLiAgUmVuYW1lZCBhcmd1bWVudCBmcm9tIGNsYXNzIHRvCisJY2xhc3NuYW1lLiAgU2V0IHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVmbiBmbGFnLgorCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IE5ldyByb3V0aW5lOyBjb25zdHJ1Y3RzIG5ldyBkZWNsIG5vZGUKKwlnaXZlbiBURU1QTEFURV9ERUNMIG5vZGUgYW5kIHRlbXBsYXRlIGFyZyB2ZWN0b3IuCisJKGVuZF90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogIFNldCB1c2UtdGVtcGxhdGUgZmllbGQgdG8gMiAoImRpZAorCXVzZSB0ZW1wbGF0ZSIpLiAgQ2xlYXIgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWZuIGZsYWcuCisJKHJlaW5pdF9wYXJzZV9mb3JfdGVtcGxhdGUpOiBHZXQgdGVtcGxhdGUtaW5mbyBwdHIgZnJvbSBkZWNsIG5vZGUuCisJU3RvcmUgdGVtcGxhdGUgcGFybSB2ZWN0b3IgaW4gaXQuCisJKHBlbmRpbmdfdGVtcGxhdGVfZXhwYW5zaW9ucyk6IExpc3Qgb2YgdGVtcGxhdGVzIHRoYXQgbWF5IG5lZWQKKwlleHBhbmRpbmcgbGF0ZXIgZm9yIGZ1bmN0aW9uIG9yIGNsYXNzIGRhdGEgZGVmaW5pdGlvbnMuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEVuc3VyZSB0cmVlIGNvZGUgaXMKKwlQQVJNX0RFQ0wuICBIYW5kbGUgRU5VTUVSQUxfVFlQRSBsaWtlIElOVEVHRVJfVFlQRS4gIEZvciBESW1vZGUKKwl2YWx1ZXMsIGNvbXBhcmUgYWdhaW5zdCBpbnRlZ2VyX3plcm9fbm9kZSBpbnN0ZWFkIG9mIGNvbnN0cnVjdGluZworCWFub3RoZXIgb25lLiAgQWRkZWQgc3VwcG9ydCBmb3IgUE9JTlRFUl9UWVBFcy4gIElmIG5vdAorCVJFQUxfSVNfTk9UX0RPVUJMRSwgc3VwcG9ydCByZWFsIHZhbHVlcyBhcyB3ZWxsLgorCShidWlsZF9vdmVybG9hZF9uYW1lKTogQWNjZXB0IFRFTVBMQVRFXypfUEFSTSBub2RlcywgYnV0IGdlbmVyYXRlCisJYSBzdHJpbmcgdGhhdCBzaG91bGQgY2F1c2Ugc29tZSBhc3NlbWJsZXIgZXJyb3JzLgorCisJKiBjcGx1cy1wdHJlZS5jIChwcmludF9sYW5nX2RlY2wpOiBSZXRyaWV2ZSB0ZW1wbGF0ZS1pbmZvIGZyb20gaXRzCisJbmV3IHBsYWNlLgorCShwcmludF9sYW5nX3R5cGUpOiBGb3IgVEVNUExBVEVfVFlQRV9QQVJNLCBwcmludCBpdHMgKHNob3J0KSBpbmZvCisJYW5kIHJldHVybi4gIEZvciBSRUNPUkRfVFlQRSwgcHJpbnQgdXNlLXRlbXBsYXRlIGFuZCBpbnRlcmZhY2UtKgorCWZpZWxkcy4KKworCSogY3BsdXMtc2VhcmNoLmMgKHB1c2hfY2xhc3NfZGVjbHMpOiBEb24ndCBjYWxsCisJcHVzaF90ZW1wbGF0ZV9kZWNsczsgdGhlIGJpbmRpbmdzIG9mIHRlbXBsYXRlIHBhcmFtZXRlciBuYW1lcworCXNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRlbXBsYXRlIGJvZHksIG5vdCB3aXRoIHRoZSBjbGFzcy4KKwlEbyBvdmVybG9hZCB0aGUgdGVtcGxhdGUgbmFtZSwgaG93ZXZlci4KKwkocG9wX2NsYXNzX2RlY2xzKTogRG9uJ3QgY2FsbCBwb3BfdGVtcGxhdGVfZGVjbHMuCisKKwkqIGNwbHVzLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBDaGFuZ2VkIHRvIHJlY29nbml6ZQorCWNvbnN0cnVjdG9yIG9mIHRlbXBsYXRlIGNsYXNzLgorCShidWlsZF9vdmVybG9hZF9jYWxsKTogQWRkIGluIG51bWJlciBvZiB0ZW1wbGF0ZSBzdWJzdGl0dXRpb25zIGFzCisJZXh0cmEgY29zdCBvZiBhIGNhbmRpZGF0ZSBmdW5jdGlvbi4gIEZvciB0ZW1wbGF0ZSBkZWNscywgdHJ5CisJdW5pZmljYXRpb24gYW5kIGluc3RhbnRpYXRpb24gYmVmb3JlIGV2YWx1YXRpbmcgY29zdCBvZiByZXN1bHQuCisJVGhpcyB0b28gaXMgaW5jb3JyZWN0IGluIHRlcm1zIG9mIHRoZSBzcGVjLCBidXQgaXQncyBhIHN0YXJ0aW5nCisJcG9pbnQgZm9yIGxhdGVyIHdvcmsuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBJZiBzdHJ1Y3R1cmUgaXMgbmFtZWQsIHVuZG8KKwlvdmVybG9hZCBvZiBpdHMgbmFtZSBhcyBhIHRlbXBsYXRlLgorCShwdXNoY2xhc3MpOiBJZiBwcmV2X2NsYXNzX3R5cGUgd2FzIGEgdGVtcGxhdGUgY2xhc3MsIHBvcCBpdDsgdGhlCisJZGVjbHMgYXJlIGhhbmRsZWQgd3JvbmcgYW5kIHNob3VsZCBiZSByZS1lbnRlcmVkLgorCisJKiBjcGx1cy1kZWNsLmMgKHBvcGxldmVsKTogQXNzZXJ0IHRoYXQgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgbm90CisJZ2xvYmFsLgorCShwdXNoX3RvX3RvcF9sZXZlbCk6IEluY2x1ZGUgZ2xvYmFsIHNjb3BlIHdoZW4gbG9va2luZyBmb3Igb2xkCisJdmFsdWVzLCBiZWNhdXNlIGNsYXNzIGJpbmRpbmdzIGFyZW4ndCBsaXN0ZWQgaW4gYW55IG90aGVyIG9uZQorCXBsYWNlLgorCShwdXNoX292ZXJsb2FkZWRfZGVjbF90b3BfbGV2ZWwpOiBOZXcgZnVuY3Rpb247IGxpa2UKKwlwdXNoX292ZXJsb2FkZWRfZGVjbCwgYnV0IHBsYWNlcyBkZWNsIGluIGdsb2JhbCBiaW5kaW5nIGxldmVsLgorCShkb250X2ZvcmdldF9vdmVybG9hZCk6IE5ldyBmdW5jdGlvbjsgcmVtb3ZlcyBkZWNsIGZyb20gbGlzdCBvZgorCW92ZXJsb2FkcyB0byBiZSBmb3Jnb3R0ZW4gd2hlbiBzY29wZSBpcyBleGl0ZWQuCisJKHN0YXJ0X2RlY2wpOiBJZiB0ZW1wbGF0ZSBwYXJtcyBhcmUgdXNlZCwgY29uc3RydWN0IGEKKwlURU1QTEFURV9ERUNMIG5vZGUgcmVmZXJlbmNpbmcgdGhlIGN1cnJlbnQgZGVjbC4gIEZvciBmdW5jdGlvbgorCXRlbXBsYXRlcywgY2FsbCBwdXNoX292ZXJsb2FkZWRfZGVjbDsgZm9yIGNsYXNzIHRlbXBsYXRlIG1lbWJlcnMsCisJY2hhaW4gdGhlbSBpbnRvIHRoZSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uLgorCShncm9rZGVjbGFyYXRvcik6IERvbid0IHRyeSBkZXRlcm1pbmluZyBzaXplIG9mIGEKKwlURU1QTEFURV9DT05TVF9QQVJNIG5vZGUuICBGb3IgdGVtcGxhdGUgY2xhc3MtZGF0YSBkZWNscywKKwljb25zdHJ1Y3QgYSBwaG9ueSBWQVJfREVDTCBub2RlIGFuZCByZXR1cm4gaXQuCisKKwkqIGNwbHVzLWRlY2wyLmMgKGdyb2tmaWVsZCk6IEZvciBzdGF0aWMgY2xhc3MgZGF0YSwgdXNlCisJYnVpbGRfb3ZlcmxvYWRfbmFtZSByZXN1bHQsIGluc3RlYWQgb2YgY29weWluZyBjbGFzcyBuYW1lLCBzaW5jZQorCXRoZSBsYXR0ZXIgY291bGQgYmUgYSBodW1hbi1yZWFkYWJsZSB0ZW1wbGF0ZSBjbGFzcyBuYW1lLiAgKElmCisJTkVXX09WRVJMT0FEX1NDSEVNRSBpcyBub3QgZGVmaW5lZCwgZG8gdGhpcyBvbmx5IGlmIHRoZSBjbGFzcyBoYXMKKwlhIHRlbXBsYXRlLWRlcml2ZWQgbmFtZS4pCisKKwkqIGNwbHVzLWxleC5jIChwZW5kaW5nX3RlbXBsYXRlX29ic3RhY2spOiBOZXcgdmFyaWFibGU7IG9ic3RhY2sKKwlmb3IgcGVuZGluZy10ZW1wbGF0ZSBzdHVmZiB0byBiZSBzYXZlZCB0byBlbmQtb2YtZmlsZS4KKwkoaW5pdF9sZXgpOiBJbml0aWFsaXplIGl0LgorCShkZWZhdWx0X2RlZik6IE5ldyB2YXJpYWJsZTsgdXNlZCBmb3IgZGVmYXVsdCBkZWZpbml0aW9uIG9mIGNvcHkKKwljb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLgorCShkb19wZW5kaW5nX2lubGluZXMpOiBGaWd1cmUgb3V0IHdoZXRoZXIgdGV4dCBpcyBpbiBhbiBvYnN0YWNrLAorCWFuZCB3aGljaCBvbmUsIGZvciBjYWxsaW5nIGZlZWRfaW5wdXQuICBQdXNoIHRlbXBsYXRlIGRlY2xzIGlmCisJbmVlZGVkLCBhcyBzcGVjaWZpZWQgaW4gcGVuZGluZ19pbmxpbmUgZGF0YS4gIFBhc3MgY3VycmVudAorCXBlbmRpbmdfaW5saW5lcyBwb2ludGVyIGJhY2sgaW4gUFJFX1BBUlNFRF9GVU5DVElPTl9ERUNMIGluc3RlYWQKKwlvZiBuZXh0LgorCShwcm9jZXNzX25leHRfaW5saW5lKTogRGl0dG8uICBQb3AgcGVuZGluZyBpbmxpbmUgZGF0YSBpZiBuZWVkZWQuCisJKHN0b3JlX3BlbmRpbmdfaW5saW5lKTogTmV3IGZ1bmN0aW9uLiAgRGVjaWRlcyB3aGljaCBvYnN0YWNrIHRvCisJc3RvcmUgYSBwZW5kaW5nIGRlZmluaXRpb24gb24sIGFuZCB3aGljaCBsaXN0IHRvIGNoYWluIGl0IGludG8uCisJKHJlaW5pdF9wYXJzZV9mb3JfbWV0aG9kKTogQ2FsbCBpdC4KKwkocmVpbml0X3BhcnNlX2Zvcl9ibG9jayk6IElmIGNoYXJhY3RlciBwYXNzZWQgaW4gaXMgJz0nLCBsb29rIGZvcgorCWEgc2VtaWNvbG9uIHRvIGVuZCB0aGUgYmxvY2s7IGRvbid0IHJlcXVpcmUgYSB7fSBibG9jay4gIERvbid0IHBhZAorCXRvIDggYnl0ZXMgb24gVVNHLCBzaW5jZSB3ZSBhcmVuJ3QgZmVlZGluZyBpbnB1dCB2aWEgc3RkaW8gYW55CisJbW9yZS4gIEFsc28sIHVzZSBuZXdsaW5lcyBpbnN0ZWFkIG9mICMgZGlyZWN0aXZlcyBmb3IgYWR2YW5jaW5nCisJbGluZSBudW1iZXIgb25seSBhIGZldyBsaW5lcy4KKwkoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogUHVudCBwYWRkaW5nIGZvciBVU0cgc3RkaW8sIHNpbmNlIHdlCisJYXJlbid0IHVzaW5nIGl0IGFueSBtb3JlLiAgVXNlIGRlZmF1bHRfZGVmIGZvciBkZWZpbml0aW9uLiAgQ2FsbAorCXN0b3JlX3BlbmRpbmdfaW5saW5lIHRvIHNhdmUgaXQgYXdheS4KKwkoaWRlbnRpZmllcl90eXBlKTogRm9yIFRFTVBMQVRFX0RFQ0wsIERFQ0xfUkVTVUxUIGZpZWxkIG5vbi1udWxsCisJaW5kaWNhdGVzIGEgbm9uLXR5cGUgdGVtcGxhdGUsIHNvIGRvbid0IHJldHVybiBQVFlQRU5BTUUuCisJKHl5bGV4KTogSWYgZW5kLW9mLWZpbGUgYW5kIGlucHV0IGlzbid0IHJlZGlyZWN0ZWQsIGNhbGwKKwlkb19wZW5kaW5nX2V4cGFuc2lvbnMgYW5kIG1heWJlIHN0YXJ0IHl5bGV4IG92ZXIuICBEb24ndCBjaGVjaworCVRFTVBMQVRFX0VYUEFOU0lPTl9OQU1FX1A7IGEgcHJvcGVyIG5hbWUgdHJhbnNmb3JtYXRpb24gc3lzdGVtCisJd2lsbCBlbGltaW5hdGUgY29uZmxpY3RzLiAgVHJ5IGZvciBTQ09QRURfVFlQRU5BTUUgd2l0aCBQVFlQRU5BTUUKKwl0b28uCisKK1dlZCBNYXkgMjkgMTE6NDg6MzQgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBDaGVjayB0aGF0IC0+Y29udHJvbF9tYWNybyBpcyBub24temVyby4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IFVzZSBgZXJyb3InIGluIGxhc3QgY2hhbmdlLgorCitXZWQgTWF5IDI5IDExOjEwOjEyIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kIChtb3ZkaSk6IEFjY2VwdCBDT05TVF9JTlQuCisJKiBvdXQtbTg4ay5jIChvdXRwdXRfbG9hZF9jb25zdF9kaW1vZGUpOiBBY2NlcHQgQ09OU1RfSU5ULgorCShvdXRwdXRfY2FsbCk6IERvbid0IHVzZSAjcGx0IGZvciBqc3IuCisKK1dlZCBNYXkgMjkgMDA6NTE6MzYgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtdHlwZTIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogR2l2ZSBlcnJvciBpZiBmdW5jdGlvbmFsCisJY2FzdCBpcyBtaXNzaW5nIGFyZ3VtZW50LgorCisJKiBjcGx1cy10cmVlLmggKGludGVyZmFjZV91bmtub3duKTogQWRkIGEgZGVjbGFyYXRpb24gZm9yIHRoaXMKKwl2YXJpYWJsZS4KKworCSogY3BsdXMtdHlwZTIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IE5vcm1hbGx5IGluaXRpYWxpemVkIFBJQyBkYXRhCisJbXVzdCBiZSBsYWlkIGludG8gdGhlIHRleHQgc2VnbWVudCBhbmQgdGhlbiBjb3BpZWQgaW50byB0aGUgZGF0YQorCXNlZ21lbnQuICBCdXQgY2VjYXVzZSBvZiBzcGVjaWFsIHRoaW5ncyB3ZSBkbyBmb3IgY3RvcnMgYW5kIGR0b3JzCisJKHRoZSBvbmx5IHRoaW5ncyB0aGF0IGNhbiByZWZlcmVuY2Ugc3VjaCB0aGluZ3MpLCB3ZSBjYW4gbGVhdmUKKwl2dGFibGVzIGluIGluaXRpYWxpemVkIGRhdGEgc3BhY2UuCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBVc2UgI3ByYWdtYSBpbnRlcmZhY2Uga25vd2xlZGdlIGlmCisJYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nIGluaXRpYWxpemVkIHZhcmlhYmxlcyBvZiB0eXBlIGNvbnN0LgorCitUdWUgTWF5IDI4IDE4OjM5OjIwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNjaGVkLmMgKHt0cnVlLGFudGksb3V0cHV0fV9kZXBlbmRlbmNlKTogQ29ycmVjdCBNRU1fSU5fU1RSVUNUX1AKKwljb2RlOyBvbmx5IGF2b2lkIGNvbmZsaWN0IGlmIE1FTV9JTl9TVFJVQ1RfUCByZWYgaGFzIHZhcnlpbmcgYWRkcmVzcy4KKworCSogcHJvdG9pemUuYyAoc3RhdCk6IFJlbW92ZSBkZWNsYXJhdGlvbiBvZiBzdGF0OyBpdCBpcyBkZWZpbmVkCisJZGlmZmVyZW50bHkgKG5vIGNvbnN0IGluIGFyZyAxKSBvbiBzb21lIG1hY2hpbmVzLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogQXZvaWQgaW5maW5pdGUgbG9vcHMgYnkgcXVpdHRpbmcKKwl3aGVuIENPVU5UIGJlY29tZXMgemVybzsgZGVsZXRlIG5vdy11bm5lY2Vzc2FyeSB0ZXN0cyBvbiBDT1VOVC4KKworCSogZmxvdy5jIChsYXN0X21lbV9zZXQpOiBOZXcgdmFyaWFibGUuCisJKHByb3BhZ2F0ZV9ibG9jayk6IEluaXRpYWxpemUgaXQuCisJU2hvdyBjYWxscyBjYW4gY2hhbmdlIG1lbW9yeS4KKwkoaW5zbl9kZWFkX3ApOiBSZW1vdmUgdW5uZWVkZWQgYXJnIFNUUklDVF9MT1dfT0s7IGRvbid0IHRyZWF0CisJU1RSSUNUX0xPV19QQVJUIGRpZmZlcmVudGx5IHRoYW4gWkVST19FWFRSQUNULgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJSWYgaW5zbiBzdG9yZXMgaW50byB0aGUgc2FtZSwgbm9udm9sYXRpbGUsIE1FTSBhcyByZWNvcmRlZCBpbgorCWxhc3RfbWVtX3NldCwgaXQgaXMgZGVhZC4KKwkobWFya19zZXRfMSk6IElmIHdyaXRpbmcgaW50byByZWdpc3RlciBtZW50aW9uZWQgaW4gbGFzdF9tZW1fc2V0IG9yCisJd3JpdGluZyBpbnRvIG1lbW9yeSwgY2xlYXIgbGFzdF9tZW1fc2V0LgorCVJlY29yZCBsYXN0IE1FTSB3cml0dGVuLgorCShmaW5kX2F1dG9faW5jKTogTmV3IGZ1bmN0aW9uLCBmcm9tIG1hcmtfdXNlZF9yZWdzLgorCUFkZCBzdXBwb3J0IGZvciBwcmUtaW5jcmVtZW50IGFuZCBwcmUtZGVjcmVtZW50LgorCShtYXJrX3VzZWRfcmVncywgY2FzZSBNRU0pOiBDbGVhciBsYXN0X21lbV9zZXQuCisJQ2FsbCBmaW5kX2F1dG9faW5jOyBtb3ZlIGNvZGUgdG8gdGhlcmUuCisJKG1hcmtfdXNlZF9yZWdzLCBjYXNlIFNFVCk6IERvbid0IGNhbGwgcmVjdXJzaXZlbHkgb24gTUVNIGlmIGl0IGlzCisJU0VUX0RFU1QsIGluc3RlYWQgY2FsbCBmaW5kX2F1dG9faW5jIG91cnNlbHZlcy4KKworVHVlIE1heSAyOCAxNzoyOTo1MiAxOTkxICBNaWNoZWFsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGdudWxpYjEuYyAoX19maXhzZnNpLCBfX2NtcHNmMiwgX19leHRlbmRzZmRmMik6IEFkZCBkZWNsYXJhdGlvbnMKKwlmb3IgaW50aWZ5LgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBBY2NlcHQgYC5jeHgnIGFzIGEgQysrIGV4dGVuc2lvbi4KKworVHVlIE1heSAyOCAxNzowNToyOCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAobW92c3Ryc2kpOiBQYXNzIG9yaWdpbmFsIE1FTSBleHByZXNzaW9ucy4KKwkqIG91dC1tODhrLmMgKGV4cGFuZF9ibG9ja19tb3ZlLCBibG9ja19tb3ZlX3tzZXF1ZW5jZSxub19sb29wLGxvb3B9KToKKwlVc2Ugb3JpZ2luYWwgTUVNIGV4cHJlc3Npb25zIHRvIHNldCBSVFhfVU5DSEFOR0lOR19QLCBNRU1fVk9MQVRJTEVfUCwKKwlhbmQgTUVNX0lOX1NUUlVDVF9QLgorCisJKiBvdXQtbTg4ay5jIChlbWl0X2JjbmQpOiBVc2UgYnh4IHdoZW4gb3B0aW1pemluZyBzbyBqdW1wX29wdGltaXplCisJd2lsbCB3b3JrIG9uIG1vcmUgY2FzZXMuICBDaGFuZ2UgdGhpcyBiYWNrIHdoZW4ganVtcF9vcHRpbWl6ZSB1c2VzCisJZ2V0X2NvbmRpdGlvbiB0byBmaW5kIHRoZSB2YWx1ZXMgYmVpbmcgY29tcGFyZWQuCisKKwkqIG04OGsubWQ6IERvbid0IHVzZSBvcGVyYW5kMCBvciBvcGVyYW5kMS4KKworVHVlIE1heSAyOCAxNjowMDo1NiAxOTkxICBNaWNoZWFsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IE1ha2Ugc3VyZSBgYWZ0ZXInIGV4aXN0cyBiZWZvcmUgY2hlY2tpbmcKKwl0byBzZWUgaWYgaXQgaXMgYSBCQVJSSUVSLgorCitUdWUgTWF5IDI4IDE1OjA4OjQ0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IFdhcm4gaWYgLXggZm9sbG93cyBsYXN0IGlucHV0IGZpbGUuCisKKwkqIGNjY3AuYzogRG9uJ3QgaW5jbHVkZSBmaWxlIHR3aWNlIGlmIGEgI2lmbmRlZiB3b3VsZCBtYWtlIGl0IGEgbm8tb3AuCisJKHN0cnVjdCBmaWxlX25hbWVfbGlzdCk6IE5ldyBmaWVsZCwgY29udHJvbF9tYWNyby4KKwlJbml0aWFsaXplIGl0IHdoZXJlIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGNyZWF0ZWQuCisJKHN0cnVjdCBpZl9zdGFjayk6IExpa2V3aXNlLgorCShkb19pbmNsdWRlKTogSWYgZmlsZSBhbHJlYWR5IGtub3duLCBjaGVjayBpdHMgY29udHJvbCBtYWNybyBpZiBhbnkuCisJRG9uJ3QgaW5jbHVkZSB0aGUgZmlsZSBpZiB0aGUgbWFjcm8gaXMgbm93IGRlZmluZWQuCisJKGRvX3hpZmRlZik6IERldGVjdCBjYXNlIG9mIHN1Y2Nlc3NmdWwgI2lmbmRlZiBhdCBzdGFydCBvZiBmaWxlLgorCShjb25kaXRpb25fc2tpcCk6IEFjY2VwdCBtYWNybyBuYW1lIGFzIG5ldyBhcmcuICBSZWNvcmQgaW4gaWZfc3RhY2suCisJKGRvX2VuZGlmKTogRGV0ZWN0IGJlaW5nIGVmZmVjdGl2ZWx5IGF0IGVuZCBvZiBmaWxlLgorCShyZWNvcmRfY29udHJvbF9tYWNybyk6IE5ldyBmdW5jdGlvbi4gIENhbGxlZCBmcm9tIGRvX2VuZGlmLgorCisJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogU2V0IHVzZWQgYWZ0ZXIgY2FsbGluZyBwdXNoX3JvdW5kaW5nLgorCisJKiBzcGFyYy5tZCAoZmxvYXRpbmcgbW92ZSBwZWVwaG9sZXMpOiBBbGxvdyBgcicgZm9yIG9wZXJhbmQgMi4KKworCSogYXJtLm1kLCB0bS1hcm0uaCwgb3V0LWFybS5jLCB4bS1hcm0uaDogTmV3IGZpbGVzLgorCSogY29uZmlndXJlIChhcm0pOiBOZXcgYWx0ZXJuYXRpdmUuCisKK1R1ZSBNYXkgMjggMTE6NTM6MjEgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLWRlY3N0YXRuLmggKENQUF9QUkVERUZJTkVTKTogQWRkIFVsdHJpeCA0LjIgc3VwcG9ydC4KKworCSogdG0tbWlwcy5oIChjbXBfdHlwZSwgYnJhbmNoX2NtcCwgYnJhbmNoX3R5cGUpOiBHbG9iYWwgdmFyaWFibGVzCisJYW5kIHR5cGUgdG8gcmVjb3JkIHdoYXQgdHlwZSBvZiBjb21wYXJpc29uIGlzIGJlaW5nIGRvbmUuCisJKG1pcHNfcHJpbnRfb3BlcmFuZF9wdW5jdCk6IE5ldyBhcnJheSB0byBzcGVjaWZ5IHdoZXRoZXIgYQorCWNoYXJhY3RlciBpcyB2YWxpZCBmb3IgcHJpbnRfb3BlcmFuZCBhcyBwdW5jdHVhdGlvbi4KKwkoc2V0X25vbWFjcm8sIHNldF9ub2F0LCBzZXRfbm9yZW9yZGVyKTogTmV3IHZhcmlhYmxlcyB0byByZWNvcmQKKwl3aGV0aGVyIGEgLnNldCBub21hY3JvLCAuc2V0IG5vYXQsIG9yIC5zZXQgbm9yZW9yZGVyIGhhcyBiZWVuCisJZG9uZS4KKwkoZHNsb3RzX3tmaWxsZWQsdG90YWx9X3tsb2FkLGp1bXB9KTogTmV3IGdsb2JhbCB2YXJpYWJsZXMgdG8KKwlyZW1lbWJlciBob3cgbWFueSBkZWxheSBzbG90cyBleGlzdCBhbmQgYXJlIGZpbGxlZCBmb3IgdGhlIC1tc3RhdHMKKwlvcHRpb24uCisJKENDMV9TUEVDKTogQ29tYmluZSAle086Li4ufSAle08qOi4uLn0gY2FzZXMuICBGb3IgLUczMiwgcGFzcyAtRworCTMyLiAgQWRkIGR1bW15IHBhdHRlcm4gZm9yIC1zYXZlLXRlbXBzIHRvIGF2b2lkIGVycm9yIG1lc3NhZ2UuCisJKERCWF9ERUJVR0dJTkdfSU5GTyk6IERlZmluZSB0aGlzIGFsbCB0aGUgdGltZS4KKwkoU0RCX0FMTE9XX0ZPUldBUkRfUkVGRVJFTkNFUyk6IERlZmluZSB0aGlzIGZvciBNSVBTIEVDT0ZGIHN1cHBvcnQuCisJKFNEQl9BTExPV19VTktOT1dOX1JFRkVSRU5DRVMpOiBEZWZpbmUgdGhpcyBmb3IgTUlQUyBFQ09GRiBzdXBwb3J0LgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1zdGF0cyB0byBwcmludCBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgorCUFkZCAtbW1lbWNweSB0byBmb3JjZSBtZW1jcHkgdG8gYmUgY2FsbGVkLiAgQWRkIC1tZGVidWdbZmdoaWpdLgorCUFkZCAtbW5vLSB2ZXJzaW9uIG9mIHN3aXRjaGVzLgorCShEQVRBX0FMSUdOTUVOVCk6IEFsaWduIGFsbCBjaGFyL3Nob3J0IGFycmF5cy91bmlvbnMvc3RydWN0dXJlcywKKwlyYXRoZXIgdGhhbiBqdXN0IGNoYXIgYXJyYXlzLgorCShCWVRFX0xPQURTX1pFUk9fRVhURU5EKTogRGVmaW5lIHRoaXMuCisJKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6ICdOJyByZXR1cm5zIHRydWUgaWYgcG93ZXIgb2YgMi4KKwkoRVhUUkFfQ09OU1RSQUlOVCk6IFJlZGVmaW5lICdRJyB0byBiZSAxIHdvcmQgbWVtb3J5IHJlZmVyZW5jZXMsCisJJ1InIHRvIGJlIG11bHRpd29yZCBtZW1vcnkgcmVmZXJlbmNlcy4KKwkoc3RydWN0IGZyYW1lX2luZm8pOiBBZGQgaW5pdGlhbGl6ZWQgZmllbGQuCisJKGN1cnJlbnRfZnJhbWVfaW5mbyk6IE5ldyBnbG9iYWwgc3RydWN0dXJlIHRvIGhvbGQgZnJhbWUgaW5mby4KKwkoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IFVzZSBjdXJyZW50X2ZyYW1lX2luZm8uCisJKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogUGFzcyBMSUJOQU1FIHRvIGluaXRfY3VtdWxhdGl2ZV9hcmdzLgorCShERUxBWV9TTE9UU19GT1JfRVBJTE9HVUUpOiBEZWZpbmUgdGhpcyB0byBmaWxsIGogJHIzMSBkZWxheSBzbG90LgorCShFTElHSUJMRV9GT1JfRVBJTE9HVUVfREVMQVkpOiBEaXR0by4KKwkoRU5DT0RFX1NFR01FTlRfSU5GTyk6IERvbid0IGZsYWcgcmVmZXJlbmNlcyB0byAwLXNpemVkIGFycmF5cyBhcworCWJlaW5nIGluIHRoZSBzbWFsbCBkYXRhIHNlZ21lbnQuCisJKENPTlNUX0NPU1RTKTogUmV3b3JkIHRvIGJlIG1vcmUgYWNjdXJhdGUuCisJKFJUWF9DT1NUUyk6IERlZmluZSB0aGlzLgorCShBRERSRVNTX0NPU1QpOiBEZWZpbmUgdGhpcy4KKwkoQ0xBU1NfQ01QX09QLCBDTEFTU19FUVVBTElUWV9PUCwgQ0xBU1NfVU5TX0NNUF9PUCk6IE5ldyBiaXRzIGZvcgorCXJ0eF9jbGFzc2lmeSB0byBjbGFzc2lmeSB2YXJpb3VzIGNvbXBhcmlzb24gb3BlcmF0b3JzLgorCShGSU5BTF9QUkVTQ0FOX0lOU04pOiBEZWZpbmUgdGhpcyB0byBjb2xsZWN0IGluZm8gZm9yIC1tc3RhdHMuCisJKE5PVElDRV9VUERBVEVfQ0MpOiBPbmx5IGRvIENDX1NUQVRVU19JTklUIGlmIHRoZSBpbnNuIGlzIGEKKwljb21wYXJpc29uLgorCShFWFRSQV9DQ19NT0RFUyk6IERlZmluZSBuZXcgbW9kZXMgQ0NfRVFtb2RlLCBDQ19GUG1vZGUsIENDXzBtb2RlLgorCShFWFRSQV9DQ19OQU1FUyk6IERlZmluZSB0aGlzLgorCShTRUxFQ1RfQ0NfTU9ERSk6IERlZmluZSB0aGlzLgorCShQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1ApOiBSZWRlZmluZSB0aGlzIHRvIGluZGV4IGludG8KKwltaXBzX3ByaW50X29wZXJhbmRfcHVuY3QuCisJKERCUl9PVVRQVVRfU0VRRU5EKTogUmVzZXQgLnNldCByZW9yZGVyLCAuc2V0IG1hY3JvIGFzIGFwcHJvcHJpYXRlLgorCisJKiBvdXQtbWlwcy5jIChicmFuY2hfY21wLCBicmFuY2hfdHlwZSk6IE5ldyBHbG9iYWwgdmFyaWFibGVzCisJYW5kIHR5cGUgdG8gcmVjb3JkIHdoYXQgdHlwZSBvZiBjb21wYXJpc29uIGlzIGJlaW5nIGRvbmUuCisJKG1pcHNfcHJpbnRfb3BlcmFuZF9wdW5jdCk6IE5ldyBhcnJheSB0byBzcGVjaWZ5IHdoZXRoZXIgYQorCWNoYXJhY3RlciBpcyB2YWxpZCBmb3IgcHJpbnRfb3BlcmFuZCBhcyBwdW5jdHVhdGlvbi4KKwkoc2V0X25vbWFjcm8sIHNldF9ub2F0LCBzZXRfbm9yZW9yZGVyKTogTmV3IHZhcmlhYmxlcyB0byByZWNvcmQKKwl3aGV0aGVyIGEgLnNldCBub21hY3JvLCAuc2V0IG5vYXQsIG9yIC5zZXQgbm9yZW9yZGVyIGhhcyBiZWVuCisJZG9uZS4KKwkoZHNsb3RzX3tmaWxsZWQsdG90YWx9X3tsb2FkLGp1bXB9KTogTmV3IGdsb2JhbCB2YXJpYWJsZXMgdG8KKwlyZW1lbWJlciBob3cgbWFueSBkZWxheSBzbG90cyBleGlzdCBhbmQgYXJlIGZpbGxlZCBmb3IgdGhlIC1tc3RhdHMKKwlvcHRpb24uCisJKHJlZ19vcl8wX29wZXJhbmQpOiBSZXdyaXRlIHRvIGFkZCBzdXBwb3J0IGZvciBDT05TVF9ET1VCTEUuCisJKG1pcHNfY29uc3RfZG91YmxlX29rKTogQWxsb3cgbm9ybWFsIEZQIGNvbnN0YW50cyAobm90IEluZmluaXR5LAorCU5hbiwgZXRjKSB0byBiZSB1c2VkIGFzIG9wZXJhbmRzIHdoZW4gdXNpbmcgdGhlIE1JUFMgYXNzZW1ibGVyLgorCShzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBDb21iaW5lIEdQIG1lbW9yeSByZWZlcmVuY2VzIGZyb20KKwlncF9tZW1vcnlfb3BlcmFuZC4gIERlbGV0ZSBncF9tZW1vcnlfb3BlcmFuZC4KKwkoZXF1YWxpdHlfb3ApOiBSZXR1cm4gdHJ1ZSBpZiBFUSBvciBORS4KKwkoY21wX29wKTogUmV0dXJuIHRydWUgaWYgY29tcGFyaXNvbiBvcGVyYXRvci4KKwkodW5zX2NtcF9vcCk6IFJldHVybiB0cnVlIGlmIHVuc2lnbmVkIGNvbXBhcmlzb24uCisJKG1pcHNfbW92ZV8xd29yZCk6IE5ldyBuYW1lIGZvciBtaXBzX21vdmVfaW5zdHJ1Y3Rpb25zLiAgQWxzbywgbG9hZHMKKwlvZiBISW1vZGUvUUltb2RlIHVzZSB1bnNpZ25lZCBsb2FkcywgcmF0aGVyIHRoYW4gc2lnbmVkIGxvYWRzLCBzbworCXRoYXQgQllURV9MT0FEU19aRVJPX0VYVEVORCBjYW4gYmUgZGVmaW5lZC4gIFVzZSAleiB0byBnZXQgbmFtZSBvZgorCSQwLCBpbnN0ZWFkIG9mIGhhcmR3aXJpbmcgaXQuICBFeHBsaWNpdGx5IHVzZSBsdWkgd2hlcmUgYXBwcm9wcmlhdGUuCisJKG1pcHNfbW92ZV8yd29yZHMpOiBOZXcgbmFtZSBmb3IgbWlwc19tb3ZlXzJ3b3Jkc19pbnN0cnVjdGlvbnMuICBVc2UKKwkleiB0byBnZXQgbmFtZSBvZiAkMCwgaW5zdGVhZCBvZiBoYXJkd2lyaW5nIGl0LgorCShtaXBzX2FkZHJlc3NfY29zdCk6IE5ldyBmdW5jdGlvbiB0byBkZWZpbmUgQUREUkVTU19DT1NUIG1hY3JvLgorCShnZW5fY29uZGl0aW9uYWxfYnJhbmNoKTogTmV3IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFsbCBvZiB0aGUgdGVzdHMKKwlhbmQgYnJhbmNoZXMuCisJKGJsb2NrX21vdmVfc2VxdWVuY2UpOiBOZXcgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgc3RyYWlnaHQgbGluZSBjb2RlCisJZm9yIGJsb2NrIG1vdmVzLgorCShibG9ja19tb3ZlX2NhbGwpOiBOZXcgZnVuY3Rpb24gdG8gc2V0IHVwIGEgY2FsbCB0byBtZW1jcHkvYmNvcHkgYXMKKwlhcHByb3ByaWF0ZSBmb3IgYmxvY2sgbW92ZXMuCisJKGV4cGFuZF9ibG9ja19tb3ZlKTogTmV3IGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBtb3ZzdHJzaQorCWRlZmluZV9leHBhbmQsIHRvIHNldCB1cCBibG9jayBtb3Zlcy4gIEF0IHByZXNlbnQsIHVubGVzcyAtbW1lbWNweQorCWlzIHVzZWQsIG1vdmVzIG9mIGxlc3MgdGhhbiAzMiBieXRlcywgZ2V0IHN0cmFpZ2h0IGxpbmUgY29kZSwgYWxsCisJb3RoZXJzIGdldCBhIGNhbGwuCisJKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogVGFrZSBsaWJuYW1lIGFzIHRoaXJkIGFyZ3VtZW50LgorCShmdW5jdGlvbl9hcmdfcGFydGlhbF9ucmVncyk6IEZpeCBidWcsIHRvIG5vdCByZXR1cm4gYSBuZWdhdGl2ZQorCW51bWJlciB3aGVuIHBhc3Npbmcgc21hbGwgc3RydWN0cyBpbiByZWdpc3RlcnMuCisJKGNvbXBhcmVfY29sbGVjdCwgY29tcGFyZV9yZXN0b3JlKTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucywgc2luY2UKKwl0aGV5IGFyZSBubyBsb25nZXIgY2FsbGVkLgorCShvdmVycmlkZV9vcHRpb25zKTogSW5pdGlhbGl6ZSBtaXBzX3J0eF9jbGFzc2lmeSBmb3IgYWxsIG9mIHRoZQorCWNvbXBhcmlzb24gb3BlcmF0b3IgYml0cy4gIEluaXRpYWxpemUgbWlwc19wcmludF9vcGVyYW5kX3B1bmN0IHRvCisJcmV0dXJuIFRSVUUgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgdXNlZCBpbgorCXByaW50X29wZXJhbmQuCisJKHByaW50X29wZXJhbmQpOiAlWCBub3cgcHJpbnRzIDMyIGJpdCBpbnRzIGluIGhleCBmb3JtYXQuICAleiBub3cKKwlwcmludHMgJDAgaWYgdGhlIG9wZXJhbmQgaXMgdGhlIGNvbnN0YW50IGludGVnZXIgMC4gICUoLCAlKSBub3cgdHVybgorCW9uL29mZiBib3RoIC5zZXQgbm9yZW9yZGVyLy5zZXQgbm9tYWNyby4gICU8LCAlPiB0dXJucyBvbi9vZmYgLnNldAorCW5vbWFjcm8uICAlKiB0dXJucyBvbiBib3RoIC5zZXQgbm9yZW9yZGVyIGFuZCAuc2V0IG5vbWFjcm8gaWYKKwlmaWxsaW5nIGRlbGF5IHNsb3RzLiAgJSEgdHVybnMgb24gLnNldCBub21hY3JvIGlmIGZpbGxpbmcgZGVsYXkKKwlzbG90cy4KKwkoY29tcHV0ZV9mcmFtZV9zaXplLCBzYXZlX3Jlc3RvcmUsIGZ1bmN0aW9uX3Byb2xvZ3VlLAorCWZ1bmN0aW9uX2VwaWxvZ3VlKTogQ2hhbmdlIHRoZSBjYWxsaW5nIHNlcXVlbmNlIG9mCisJY29tcHV0ZV9mcmFtZV9zaXplIHRvIHNhdmUgZXZlcnl0aGluZyBpbiBhIGdsb2JhbCBzdHJ1Y3R1cmUsIHdoaWNoCisJaGFzIGFuIGluaXRpYWxpemVkIGZpZWxkIHRvIGluZGljYXRlIHRoYXQgY29tcHV0ZV9mcmFtZV9zaXplIG5lZWRzCisJdG8gYmUgY2FsbGVkLgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IElOSVRfQ1VNVUxBVElWRV9BUkdTIG5vdyB0YWtlcyAzIGFyZ3MuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogSWYgY3VycmVudF9mdW5jdGlvbl9lcGlsb2d1ZV9kZWxheV9saXN0IGlzCisJbm9uLW51bGwsIHVzZSB0aGF0IHRvIGZpbGwgdGhlIGZpbmFsIGRlbGF5IHNsb3QuICBBbHNvLCBtYWtlIHN1cmUKKwl0aGUgdmFyaW91cyBhc20gLnNldCdzIGFyZSByZXNldCBwcm9wZXJseS4gIFdyaXRlIGludGVyZXN0aW5nCisJc3RhdGlzdGljcyBvdXQgdG8gc3RkZXJyIGlmIC1tc3RhdHMuCisJKG1pcHNfZXBpbG9ndWVfZGVsYXlfc2xvdHMpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJuICMgb2YgZGVsYXkgc2xvdHMKKwl0aGUgZXBpbG9ndWUgbmVlZHMuCisJKG51bGxfZXBpbG9ndWUpOiAgUmV0dXJuIHRydWUgaWYgdGhlIGZ1bmN0aW9uIGhhcyBhIG51bGwgZXBpbG9ndWUsCisJd2hpY2ggYWxsb3dzIHRoZSBvcHRpbWl6ZXIgdG8gb21pdCBqdW1wcyB0byB0aGUgZmluYWwgaiAkMzEgaWYgbm8KKwlzdGFjayB3YXMgY3JlYXRlZC4KKworCSogbWlwcy5tZCAodHlwZSBhdHRyaWJ1dGUpOiBSZWRvIGhvdyB0aGUgdHlwZSBhdHRyaWJ1dGVzIHdvcmssIGFuZAorCWNoYW5nZSBzb21lIG5hbWVzLgorCShtb2RlIGF0dHJpYnV0ZSk6IE5ldyBhdHRyaWJ1dGUgdG8gZGVzY3JpYmUgdGhlIGluc24ncyByZXN1bHQgbW9kZS4KKwkobGVuZ3RoIGF0dHJpYnV0ZSk6IE5ldyBhdHRyaWJ1dGUgdG8gZ2l2ZSBpbnNuIGxlbmd0aCBpbiB3b3Jkcy4KKwkoZHNsb3QgYXR0cmlidXRlKTogTmV3IGF0dHJpYnV0ZSB0byByZXR1cm4gd2hldGhlciBhbiBpbnNuIG5lZWRzIGEKKwlkZWxheSBzbG90LgorCShkZWZpbmVfZGVsYXkpOiBVc2UgZHNsb3QgYW5kIGxlbmd0aCBhdHRyaWJ1dGVzIHRvIGRldGVybWluZSBpZiBhCisJZGVsYXkgc2xvdCBpcyBuZWVkZWQuCisJKGRlZmluZV9mdW5jdGlvbl91bml0KTogRGVmaW5lIGFsbCBvZiB0aGUgZnVuY3Rpb24gdW5pdHMgbm93LgorCShhbGwgcGF0dGVybnMpOiBQcm92aWRlIG5ldyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMuCisJKGFsbCBtZW1vcnkgcmVmZXJlbmNlIHBhdHRlcm5zKTogbW9kaWZ5IGFsdGVybmF0aXZlcyB0byB1c2UgJ1EnIGZvcgorCTEgd29yZCBpbnN0cnVjdGlvbnMsICdSJyBmb3IgbXVsdGl3b3JkIGluc3RydWN0aW9ucy4KKwkodW5uYW1lZCBwYXR0ZXJucyk6IFByb3ZpZGUgbmFtZXMgZm9yIGFsbCBwYXR0ZXJucywgc28gdGhhdCAtZHAgd2lsbAorCXBpbnBvaW50IGV4YWN0bHkgd2hpY2ggcGF0dGVybiBpcyB1c2VkLgorCSgqZGl2c2kzLCAqZGl2bW9kc2k0LCAqbW9kc2kzKTogSWYgb3B0aW1pemluZyBhbmQgbm90IC1tZGVidWdjLCB1c2UKKwl0aGUgKmRpdm1vZHNpNCBwYXR0ZXJucywgc28gdGhhdCB0aGUgb3BpbWl6ZXIgd2lsbCBvbmx5IHVzZSAxIGRpdmlkZQorCWlmIGRvaW5nIGEgPSBiIC8gYzsgZCA9IGIgJSBjOyAgVGhpcyByZXBsYWNlcyB0aGUgcGVlcGhvbGVzLCB3aGljaAorCXByZXZpb3VzbHkgd2VyZSB1c2VkIGZvciB0aGlzLiAgSWYgbm90IG9wdGltaXppbmcsIHVzZSB0aGUgbm9ybWFsCisJZGl2L21vZCBwYXR0ZXJucy4KKwkoemVyb19leHRlbmRxaWhpMiwgZXh0ZW5kcWloaTIpOiBBbGxvdyB6ZXJvL3NpZ24gZXh0ZW5kaW5nIGZyb20KKwltZW1vcnkuCisJKGZpeHVuc190cnVuY3tkZixzZn1zaTIpOiBVc2UgZ2VuZXJhdG9yIHBhdHRlcm5zIHRvIGdlbmVyYXRlCisJYXBwcm9wcmlhdGUgYnJhbmNoZXMuCisJKG1vdnNpX3VsdywgbW92c2lfdXN3KTogTmV3IHBhdHRlcm5zIHRvIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZQorCXVuYWxpZ25lZCBsb2FkL3N0b3JlIGZvciB1c2UgaW4gdGhlIGJsb2NrIG1vdmUgZXhwYW5zaW9uLgorCShtb3YqKTogUHJvdmlkZSBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIG1vdmVzLgorCShtb3ZzdHJzaSk6IE5ldyBwYXR0ZXJuIHRvIGdlbmVyYXRlIGJsb2NrIG1vdmVzLgorCShuZWdzaTIpOiBDaGFuZ2UgdG8gYSBkZWZpbmVfZXhwYW5kLCB3aGljaCB1c2VzIG1pbnVzLgorCShvbmVfY21wc2xpMik6IENoYW5nZSB0byBhIGRlZmluZV9leHBhbmQsIHdoaWNoIHVzZSB0aGUgbm9yIHBhdHRlcm4uCisJKGNtcCosIGIqKTogUmVkbyBjb21wYXJpc29uL2JyYW5jaCBjb21wbGV0ZWx5IHRvIHNhdmUgdGhpbmdzIGluCisJZ2xvYmFsIHZhcmlhYmxlcywgY2FsbCB0aGUgY29tbW9uIEMgY29kZSB0byBleHBhbmQgdGhlIGJyYW5jaCwgYW5kCisJcHJvdmlkZSBtYXRjaF9vcGVyYXRvcnMgdG8gZG8gdGhlIGFjdHVhbCBicmFuY2guCisJKHMqKTogUHJvdmlkZSBmb3IgdGhlIGFiaWxpdHkgdG8gc2V0IGEgcmVnaXN0ZXIgd2l0aCBhbiBpbnRlZ2VyCisJY29tcGFyaXNvbiwgd2l0aG91dCB1c2luZyBhIGJyYW5jaC4KKworCSogbWFrZS1kZWNyb3NlIChBVVhfT1VUUFVUMik6IERlbGV0ZSBtYWNybywgc2luY2UgYXV4LW91dHB1dC5jIGlzCisJYWx3YXlzIGNvbXBpbGVkIHNlcGFyYXRlbHkgbm93LgorCShMQU5HVUFHRVMpOiBTdXBwcmVzcyBHKyssIE9iamMgdGVtcG9yYXJpbHkuCisJKGNzZS5vKTogUmVidWlsZCBjc2UgaWYgdGhlIGNvbmZpZyBmaWxlcyBjaGFuZ2UsIHRvIGdldCBuZXcgY29zdAorCWZ1bmN0aW9ucywgbm8gbG9uZ2VyIHJlYnVpbGQgY2FsbHMvZnVuY3Rpb24gc2luY2UgdGhlIEZVTkNUSU9OX0FSRworCW1hY3JvcyBqdXN0IGNhbGwgZnVuY3Rpb25zIGluIG91dC1taXBzLmMuCisJKFNSQ1MpOiBDaGFuZ2UgJChBVVhfT1VUUFVUMl9TUkMpIHRvIGF1eC1vdXRwdXQuYy4KKworCSogbWFrZS1taXBzIChBVVhfT1VUUFVUMik6IERlbGV0ZSBtYWNybywgc2luY2UgYXV4LW91dHB1dC5jIGlzCisJYWx3YXlzIGNvbXBpbGVyIHNlcGFyYXRlbHkgbm93LgorCShDT05GSUcyX0gpOiBBZGQgcnVsZXMgdG8gcmVidWlsZCBzZWxlY3RlZCBtb2R1bGVzIHdoZW4gdGhlCisJdG0tbWlwcy5oIGZpbGUgY2hhbmdlcy4KKwkobWlwcy10ZmlsZSk6IFJ1bGVzIHRvIGJ1aWxkIG1pcHMtdGZpbGUuCisJKG1pcHMtdGR1bXApOiBSdWxlcyB0byBidWlsZCBtaXBzLXRkdW1wLgorCShMQU5HVUFHRVMpOiBTdXBwcmVzcyBHKyssIE9iamMgdGVtcG9yYXJpbHksIGJ1aWxkIG1pcHMtdGZpbGUuCisKKwkqIG1pcHMtdGZpbGUuYyAod2hvbGUgZmlsZSk6IE5ldyBmaWxlIHRvIHB1dCB0aGUgTUlQUyBzcGVjaWZpYyBkZWJ1ZworCWluZm9ybWF0aW9uIGludG8gdGhlIG9iamVjdCBmaWxlLCBhZnRlciB0aGUgYXNzZW1ibGVyIGhhcyBiZWVuIHJ1bi4KKwlUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBNSVBTIGFzc2VtYmxlciBwcm92aWRlcyBubyBtZXRob2Qgb2YKKwlzZXR0aW5nIHVwIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgbG9jYWwgdmFyaWFibGVzLiAgVGhpcyBpcworCWVuYWJsZWQgYnkgdGhlIG1ha2UtbWlwcyBNYWtlZmlsZSBtb2RpZmllci4KKworCSogbWlwcy10ZHVtcC5jICh3aG9sZSBmaWxlKTogTmV3IGZpbGUgdG8gZHVtcCB0aGUgY29udGVudHMgb2YgdGhlCisJTUlQUyBFQ09GRiBzeW1ib2wgdGFibGUgaW4gYSBzeW1ib2xpYyBmb3JtYXQuICBUaGlzIGlzIG5vdCBjdXJyZW50bHkKKwlidWlsdCBieSBkZWZhdWx0LCBidXQgbWFrZS1taXBzIGNvbnRhaW5zIHJ1bGVzIHRvIGJ1aWxkIGl0LgorCisJKiB0bS1kZWNyb3NlLmggKE1EX0VYRUNfUFJFRklYKTogQ2hhbmdlIHRvIHVzZSB0aGUgdGVzdCBwcmVmaXgKKwkvdXNyL2Njcy9nY2MtMi4wMC9nY2MtIGluc3RlYWQgb2YgdGhlIHJlbGVhc2UgcHJlZml4IC91c3IvY2NzL2djYy4KKwkoV0NIQVJfVFlQRV9TSVpFKTogRGVmaW5lIGFzIDE2LgorCShXQ0hBUl9VTlNJR05FRCk6IERlZmluZSBhcyAxLgorCShEQlhfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUgbW92ZWQgdG8gdG0tbWlwcy5oLgorCisKK1R1ZSBNYXkgMjggMDY6MjY6NDQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCwgZXh0cmFjdF9iaXRfZmllbGQpOiBJZiAtZmZvcmNlLW1lbQorCXNwZWNpZmllZCwgY29weSBPUDAgaW50byByZWdpc3RlciAoYW5kIGJhY2sgYWdhaW4sIGZvciBzdG9yZSkuCisKKwkqIHNjaGVkLmMgKG1lbXJlZnNfY29uZmxpY3RfcCwge3RydWUsYW50aSxvdXRwdXR9X2RlcGVuZGVuY2UpOiBBZGQKKwltaXNzaW5nIHBhcmVucy4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFR1cm4gdXNhZ2Ugb2YgcmVnX3ByZWZlcnJlZF9jbGFzcyBiYWNrIG9uCisJbm93IHRoYXQgdGhlIGNvZGUgaGFzIGJlZW4gcmVmaW5lZC4KKworTW9uIE1heSAyNyAxMjo0MToxNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBTZXQgY29udmVydGVkIGZvciBzaGlmdHMsCisJc28gb3AxIGlzIG5vdCBjb252ZXJ0ZWQgdG8gdGhlIHJlc3VsdCB0eXBlLgorCUNsZWFuIHVwIHNvbWUgd2FybmluZyBtZXNzYWdlcy4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFVzZSB0ZW1wIHN0YWNrIHNsb3QgZm9yIEJMS21vZGUgU0FWRV9FWFBSLgorCisJKiBNYWtlZmlsZS5pbiAoYWxsb2NhLm8pOiBVc2UgbmV3IHZhcnMgQUxMT0NBX0ZMQUdTIGFuZCBBTExPQ0FfRklOSVNILgorCitNb24gTWF5IDI3IDA1OjQyOjIwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNjaGVkLmMgKHtyZWFkLHRydWUsYW50aSxvdXRwdXR9X2RlcGVuZGVuY2UpOiBSZW1vdmUgdW51c2VkIGFyZyBJTlNOLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgUExVUyk6IEZpeCB0eXBvIGluIChwbHVzIChwbHVzIFggQykgWSkgY2FzZS4KKwkoc3Vic3QsIGNhc2UgTVVMVCk6IERpc3RyaWJ1dGUgTVVMVCBvdmVyIFBMVVMgdG8gdHJ5IHRvIHNpbXBsaWZ5IGl0LgorCitNb24gTWF5IDI3IDA1OjE1OjE2IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIHRtLXNwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERvbid0IGFjY2VwdCBhIFNZTUJPTF9SRUYKKwlzdW0gaWYgRkxBR19QSUMgaXMgbm90IDEuICBUaGlzIGZvcmNlcyB0aGUgLWZQSUMgdG8gdGFrZSBlZmZlY3QsCisJZXZlbiB3aGVuIHRoZSBvcHRpbWl6ZXIga25vd3MgaG93IHRvIHN0aXRjaCB0b2dldGhlciBISUdIIGFuZCBMT19TVU0KKwljb21iaW5hdGlvbnMuCisJKFBSSU5UX09QRVJBTkQpOiBNb3ZlIGJvZHkgdG8gb3V0LXNwYXJjLmMuCisJKiBvdXQtc3BhcmMuYyAocHJpbnRfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiwgaW1wbGVtZW50aW5nIGFjdGlvbnMgb2YKKwlvbGQgUFJJTlRfT1BFUkFORCBtYWNyby4gIENvbW1lbnRzIHdyaXR0ZW4gZm9yIGFsbCBjYXNlcy4KKwkocmVnX3VudXNlZF9hZnRlcik6IERvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwgd2l0aCBKVU1QX0lOU05zLiAgT25seQorCWRvIHNvbWV0aGluZyBzcGVjaWFsIHdpdGggQ0FMTF9JTlNOIGlmIFJFR05PIGlzIGEgY2FsbC11c2VkIHJlZy4KKworCSogY3BsdXMtdHlwZTIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IEJhY2sgb3V0IDIzIEZlYiBjaGFuZ2UsIHdoaWNoCisJd2FzIGNvbXBsZXRlbHkgYmFja3dhcmQuCisKKwkqIGRieG91dC5jLCBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogQWxzbyB0ZXN0IHRoYXQgVFJFRV9UWVBFCisJKFBBUk1TKSBpcyBub3QgRVJST1JfTUFSS19OT0RFLgorCisJKiBjcGx1cy1pbml0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IENoZWNrIEZMQUdTIHBhcmFtZXRlciB0byBzZWUgaWYKKwl3ZSBjYW4gYWNjZXB0IGJ1aWxkaW5nIGEgcmVmZXJlbmNlIHRvIGEgY29uc3RydWN0b3ItZ2VuZXJhdGVkCisJdGVtcG9yYXJ5LgorCSh2YXJpb3VzIHBsYWNlcyk6IENoYW5nZSBjYWxscyB0byBgYnVpbGRfdXBfcmVmZXJlbmNlJyB0aGF0IHVzZWQgdG8KKwl1c2UgYW4gZXhwbGljaXQgYDEnIHRvIHVzZSBMT09LVVBfUFJPVEVDVCBpbnN0ZWFkLgorCShidWlsZF9vZmZzZXRfcmVmKTogVXNlIElERU5USUZJRVJfVFlQRV9WQUxVRSBtYWNybyB0byB0aGUgdGhlIHR5cGUKKwlhc3NvY2lhdGVkIHdpdGggQ05BTUUuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BhdGgpOiBGaXggMTEgTWF5IGNoYW5nZSBieSBvbmx5CisJY2hhbmdpbmcgVFJFRV9UWVBFIChFWFBSKSBpZiBOVUxMX0VYUFIuICBXZSBtaWdodCBidWlsZCBkaWZmZXJlbnQKKwl2YmFzZSBwYXRocyBmb3IgdGhlIHNhbWUgZXhwciBpbiBtdWx0aXBsZSBpbmhlcml0YW5jZQorCWluaXRpYWxpemF0aW9uLgorCisJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIHNlZCBzY3JpcHQgc28gaXQgbWF0Y2hlcyAnXiMgJyBpbnN0ZWFkIG9mIGp1c3QKKwknXiMnLiAgVGhpcyBhbGxvd3MgcHJvY2Vzc2luZyBvZiBtZCBmaWxlcyB3aXRoICNpZi8jZW5kaWYgY29udHJvbHMKKwlpbiB0aGVpciBDIGZ1bmN0aW9uIGJvZGllcy4KKworCSogY3BsdXMtdHJlZS5jIChidWlsZF9jcGx1c19uZXcpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMgb24gUlZBTC4KKworCSogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IERvbid0IHdhcm4gYWJvdXQgRVhJVF9FWFBScy4KKwkoZXhwYW5kX2RlY2xfY2xlYW51cCk6IEFkZCBtaXNzaW5nIHR5cGUgZGVjbGFyYXRpb25zIGZvciBwYXJhbWV0ZXJzLgorCisJKiBjcGx1cy1jYWxsLmMsIGNwbHVzLWNsYXNzLmMsIGNwbHVzLWRieG91dC5jLCBjcGx1cy1lZHNlbC5jOiBJbmNsdWRlCisJc3RkaW8uaCBhZnRlciBjcGx1cy10cmVlLmggc2luY2UgdGhlIGxhdHRlciByZWZlcmVuY2VzIHByaW50Zi4KKwkqIGNwbHVzLXNlYXJjaC5jLCBjcGx1cy14cmVmLmM6IExpa2V3aXNlLgorCSogY3BsdXMtY2xhc3MuYyAocHJldl9jbGFzc190eXBlKTogTm90IHN0YXRpYzsgZGVmaW5lZCBpbiBjcGx1cy10cmVlLmguCisJKiBjcGx1cy1kZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24sIGF1dG9fZnVuY3Rpb24pOiBEb24ndCBwdXQgJiBpbgorCWZyb250IG9mIGZ1bmN0aW9uIG5hbWUuCisJKiBjcGx1cy10eXBlY2suYyAoY29tcHR5cGVzLGNvbXBfdGFyZ2V0X3R5cGVzKTogTGlrZXdpc2UuCisJKiBjcGx1cy1zZWFyY2guYyAocmVwb3J0X2FtYmlndW91c19taV92aXJ0dWFscyk6IExpa2V3aXNlLCBmb3IgYXJyYXlzLgorCitTdW4gTWF5IDI2IDIyOjQ3OjM1IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAobWFrZV90ZW1wb3JhcnlfZm9yX3JlZmVyZW5jZSk6IE5ldyBmdW5jdGlvbi4gIFNwbGl0CisJb3V0IGNvZGUgZnJvbSBgZ3Jva19yZWZlcmVuY2VfaW5pdCcgc28gd2UgY291bGQgY2FsbCBpdCBpbiB0d28KKwlwbGFjZXM6IHdoZXJlIGl0IHdhcyBjYWxsZWQgYmVmb3JlLCBhbmQgd2hlbiBpbml0aWFsaXppbmcgYQorCXJlZmVyZW5jZSB0aHJvdWdoIGEgY29uc3RydWN0b3IgZm9yIGEgdGVtcG9yYXJ5LgorCShncm9rZGVjbGFyYXRvcik6IEdpdmUgZXJyb3IgbWVzc2FnZSBpbnN0ZWFkIG9mIGFib3J0aW5nIGlmIHVzZXIKKwlnYXZlIG1ldGhvZCBxdWFsaWZpZXJzIGZvciBmdW5jdGlvbiBkZWNsLgorCShzdGFydF9mdW5jdGlvbik6IFN3aXRjaCB0byB0ZW1wb3Jhcnkgb2JzdGFjayBiZWZvcmUgY29tcHV0aW5nCisJZGVzdHJ1Y3RvciBhbmQgY29uc3RydWN0b3IgbGFiZWxzLCBhbmQgYmVmb3JlIGJ1aWxkaW5nIHRoZQorCWZ1bmN0aW9uJ3MgUkVTVUxUX0RFQ0wuCisKKwkqIGNwbHVzLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IE1ha2UgYSBjbGVhbnVwIHRoYXQgY29udHJvbHMgdGhlCisJYWN0aW9uIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjYWxsIHRvCisJX19nY19wb3AgZG9lc24ndCBnZXQgc2tpcHBlZCBpbiB0aGUgZnVuY3Rpb24gaXNzdWVzIGEgcmV0dXJuIHN0bXQuCisJKiBjcGx1cy1nYy5jIChleHBhbmRfZ2NfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlKTogV29yayB3aXRoIG5ldworCWNsZWFudXAgbW9kZWwuCisKKwkqIGNwbHVzLWdjLmMgKGJ1aWxkX2lfZGVzYyk6IEZpZ3VyZSBvdXQgd2hldGhlciB0aGUgaV9kZXNjIHNob3VsZAorCWNvbnN0aXR1dGUgYSBkZWZuIG9mIGl0cyB0eXBlIG9yIG5vdC4KKworCSogY3BsdXMtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IExvb2sgdGhyb3VnaCBUQVJHRVRfRVhQUiBhcyB3ZWxsCisJYXMgTkVXX0VYUFIgZm9yIHJldHVybmluZyBhZGRyZXNzZXMgb2YgbG9jYWwgdmFyaWFibGVzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSW50aWFsaXplZCBgZ29hbF9hbHRlcm5hdGl2ZV9zd2FwcGVkJworCXdoZXJlIGBzd2FwcGVkJyBpcyBpbml0aWFsaXplZCB0byB6ZXJvLgorCitTdW4gTWF5IDI2IDIxOjI5OjI2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVjb2cuYyAoY29uc3RfZG91YmxlX29wZXJhbmQpOiBGaXggdHlwby4KKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRml4IHR5cG8tLXN3YXAgI2VuZGlmIHdpdGggfS4KKworCSogbG9vcC5jIChpbml0X2xvb3ApOiBNdWx0aXBseSBjb3B5X2Nvc3QgYnkgMi4KKwkoZ2VuZXJhbF9pbmR1Y3Rpb25fdmFyKTogVXNlIHJ0eF9jb3N0IGRpcmVjdGx5LgorCShleHByX2JlbmVmaXQpOiBGdW5jdGlvbiBkZWxldGVkLgorCisJKiBtNjhrLm1kIChhbmRzaTMpOiBHZW5lcmF0ZSBiY2xyIGlmIGFwcHJvcHJpYXRlLgorCisJKiBjY2NwLmMgKGRvX3VuZGVmKTogSnVzdCBhIHdhcm5pbmcsIGlmIGRlbGV0aW5nIHNvbWV0aGluZyB1bnVzdWFsLgorCitTdW4gTWF5IDI2IDE4OjUxOjMzIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgc3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChmb3JjZV9vcGVyYW5kKTogV2hlbiBjYWxsaW5nIHJlY3Vyc2l2ZWx5LCB1c2UKKwlhIHRlbXBvcmFyeSB0byBmb3JjZSBldmFsdWF0aW9uIG9mIGNhbGxzLiAgVGhlIEMgbGFuZ3VhZ2UKKwlhbGxvd3MgYGYgKGcgKHgpLCBnICh5KSknIHRvIGJlIGV2YWx1YXRlZCBpbiBkaWZmZXJlbnQgb3JkZXJzCisJb24gZGlmZmVyZW50IGhvc3RzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRpZmZlcmVudCBjb2RlCisJZ2VuZXJhdGlvbiBmb3IgZGlmZmVyZW50IGhvc3RzLgorCisJKiByZWNvZy5jIChjb25zdF9kb3VibGVfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiBmb3IgcmVjb2duaXppbmcKKwlDT05TVF9ET1VCTEUgcnR4J3MuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdF9hZGQpOiBBZGQgbmV3IHBhcmFtZXRlciBUQVJHRVQgd2hpY2ggaXMgYQorCXN1Z2dlc3Rpb24gb2Ygd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdDsgcGFzcyBpdCB0byBleHBhbmRfZXhwci4KKwkqIGxvb3AuYyAoZW1pdF9pdl9hZGRfbXVsdCk6IFBhc3MgUkVHIHRvIGV4cGFuZF9tdWx0X2FkZCBjYWxsIGFzCisJdGFyZ2V0IGZvciB0aGUgcmVzdWx0LgorCisJKiBnbWljcm8ubWQsIG9sZC1zcGFyYy5tZCwgcHlyLm1kOiBEZWxldGUgb2Jzb2xldGUgVU1VTFQgcGF0dGVybnMuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCk6IENvbnZlcnQgREltb2RlIGNvbnN0YW50cyB0byBhIENPTlNUX0lOVAorCWlmIHBvc3NpYmxlLCBzbyB0aGF0IG11bHRpcGxpZXMgYnkgdGhlc2UgY2FuIGJlIG9wdGltaXplZCBieSB0aGUKKwlleGlzdGluZyBjb2RlLgorCitTdW4gTWF5IDI2IDAwOjU5OjQyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IC1zYXZlLXRlbXBzIGlzIGFsd2F5cyB2YWxpZC4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6IERvbid0IGNyYXNoIGlmIHZhbCA9PSAwLgorCisJKiBjc2UuYyAocmVmZXJzX3RvX21lbV9wKTogSGFuZGxlIGNvbnN0YW50IGFkZHJlc3Nlcy4KKworCSogY2NjcC5jIChtYWluKTogRG9uJ3Qgc3RvcmUgdGhydSBsYXN0X2luY2x1ZGUgaWYgbnVsbC4KKworU2F0IE1heSAyNSAwNjozMzoxOSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRG9uJ3QgYXNzdW1lIHdlIGhhdmUgYXQgbGVhc3QgdHdvIG9wZXJhbmRzCisJd2hlbiB3ZSBjaGVjayBmb3IgYSBzaW1wbGUgY29weS4KKworCSogc2NoZWQuYyAodXBkYXRlX3JlZ19rbm93bl92YWx1ZSk6IERlbGV0ZWQuCisJKGluaXRfYWxpYXNfYW5hbHlzaXMpOiBJZiBoYXZlIFJFR19FUVVJViBub3RlLCBjYW4gYWx3YXlzIHVzZSBOT1RFJ3MKKwl2YWx1ZSBpcnJlc3BlY3RpdmUgb2YgbnVtYmVyIG9mIHNldHMuCisJVGFrZSBrbm93biB2YWx1ZSBmcm9tIG5vdGUsIG5vdCBTRVRfU1JDLgorCShtZW1yZWZzX2NvbmZsaWN0X3ApOiBSZW1vdmUgZ290b3MuCisJQVNISUZUIGNhbid0IG9jY3VyIGluIGFuIGFkZHJlc3MuCisJKHRydWVfZGVwZW5kZW5jZSwgYW50aV9kZXBlbmRlbmNlLCBvdXRwdXRfZGVwZW5kZW5jZSk6IFRha2UgaW50bworCWFjY291bnQgdGhlIGZhY3QgdGhhdCBhIE1FTV9JTl9TVFJVQ1RfUCByZWZlcmVuY2UgY2Fubm90IGNvbmZsaWN0CisJd2l0aCBhIG5vbi1NRU1fSU5fU1RSVUNUX1AgcmVmZXJlbmNlIGF0IGEgZml4ZWQgYWRkcmVzcy4KKworRnJpIE1heSAyNCAxMTozNDozOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChjcGx1cy10YWIuYyk6IFB1dCBiYWNrIC1kIG9wdGlvbi4KKworRnJpIE1heSAyNCAwNjo0NjowNyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGwuYyAocnR4X2FsbG9jKTogRW5zdXJlIHdlIGtlZXAgdGhlIG9ic3RhY2sgYWxpZ25lZC4KKworRnJpIE1heSAyNCAwMDoxNzoxMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogVHJ5IHdpdGggaW5oZXJpdGFuY2UsIHRoZW4gd2l0aG91dC4KKwkjaWYgMCB0aGUgY29kZSB0byBhdm9pZCBpbmhlcml0YW5jZSBpbiBjZXJ0YWluIGNhc2VzLgorCitGcmkgTWF5IDI0IDAwOjEzOjQwIDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogb3V0LWkzODYuYyAoc3BsaXRfZGkpOiBDaGVjayBmb3IgQ09OU1RfRE9VQkxFIGJlZm9yZSBDT05TVEFOVF9QLgorCisJKiB0bS1pMzg2LmggKExJTUlUX1JFTE9BRF9DTEFTUyk6IG5ldyBtYWNyby4KKwkoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IGEgQ09OU1RfRE9VQkxFIGNhbiBhcHBlYXIgaW4gbmFycm93ZXIKKwljbGFzc2VzIHRoYW4gR0VORVJBTF9SRUdTLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBMaW1pdCByZWxvYWQgY2xhc3MgZXZlbiBpZiB0aGUgU1VCUkVHIGhhcworCWFscmVhZHkgYmVlbiBzdHJpcHBlZC4KKworVGh1IE1heSAyMyAxMTowODoyMSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2luc25zKTogRG9uJ3Qgc2NoZWR1bGUgYSBibG9jayBpZiB0aGUgb25seSBpbnNuIGlzCisJYSBDT0RFX0xBQkVMLgorCitUaHUgTWF5IDIzIDA3OjU0OjU3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogUHJvY2VzcyByZWxvYWQgaW4gZmlyc3QgcGFzcyBpZgorCWEgc3Vic2VxdWVudCByZWxvYWQgcmVxdWlyZXMgZmV3ZXIgcmVnaXN0ZXJzLgorCUNoYW5nZSBjcml0ZXJpYSBmb3IgcHJvY2Vzc2luZyBmcm9tIGJlaW5nIGEgc3RyaWN0IHN1cGVyc2V0IHRvIAorCWhhdmluZyBhbiBpbnRlcnNlY3RpbmcsIG5vbi1lcXVhbCBjbGFzcy4KKwlJZ25vcmUgb3B0aW9uYWwgYW5kIHR1cm5lZC1vZmYgcmVsb2FkcyBpbiBsb29wIHRvIHNlZSB3aGF0IGlzIGZvcmNlZAorCXRvIGJlIGFsbG9jYXRlZCBpbiBmaXJzdCBwYXNzLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogRml4IHR5cG8gaW4gbGVuZ3RoIG9mIHN0cmluZyB0byBhbGxvY2F0ZQorCWZvciBzY2hlZDIgZHVtcCdzIG5hbWUuCisKKwkqIGp1bXAuYyAoZmluZF9jcm9zc19qdW1wKTogRG9uJ3QgY3Jhc2ggaWYgc2luZ2xlX3NldCByZXR1cm5zIDAuCisKKwkqIHJlY29nLmMgKGdlbmVyYWxfb3BlcmFuZCk6IEEgU1VCUkVHIG9mIGEgY29uc3RhbnQgaXMgbmV2ZXIgdmFsaWQuCisKKwkqIGxvY2FsLWFsbG9jLmMgKHF0eV9jb21wYXJlLCBxdHlfY29tcGFyZV8xKTogTWFrZSBwcmlvcml0eSBmdW5jdGlvbgorCXRoZSBzYW1lIGFzIGluIGdsb2JhbC1hbGxvYzogcXVhbnRpdGllcyB3aXRoIHNob3J0ZXIgbGl2ZXMgYXJlCisJYWxsb2NhdGVkIGZpcnN0LiAgVGhpcyBjYW4gc3BlZWQgdXAgc29tZSBjb2RlIGJ5IGEgZmFjdG9yIG9mIHRocmVlLgorCitXZWQgTWF5IDIyIDE3OjQwOjQ5IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBGaXggc29tZSBtaW5vciBidWdzIGluIG1ha2luZworCVJFR19ERUFEIG5vdGVzIGFuZCByZWNvcmRpbmcgaW5zbiB0aGF0IGRvZXMgc3RvcmU7IGNvZGUgc29tZXRpbWVzCisJYXNzdW1lZCB0aGF0IGVhY2ggY2FsbCB0byBnZW5fbW92ZV9pbnNuIHByb2R1Y2VkIGF0IG1vc3Qgb25lIGluc24uCisKK1dlZCBNYXkgMjIgMTY6NTE6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBTdXBwb3J0IExJTUlUX1JFTE9BRF9DTEFTUy4KKworV2VkIE1heSAyMiAxNDoxNDo1MSAxOTkxICBNaWNoZWFsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFVwZGF0ZSB0aGUgdGhyZWUgc2ltcGxpZmljYXRpb25zIHRoYXQKKwlzdGFydCB3aXRoIHRoZSAiaWYgKC4uLikgeCA9IDE7IiBjYXNlLiAgQWRkIGNvbW1lbnRzIGV4cGxhaW5pbmcgaG93CisJdG8gbWFrZSB0aGVtIG1vcmUgbWFjaGluZSBpbmRlcGVuZGVudCwgYW5kIGNvbW1lbnRzIGV4cGxhaW5pbmcgaG93CisJdGhleSBtaWdodCBmYWlsIGluIHRoZSBmdXR1cmUuICBJZmRlZiBvdXQgdGhlIHNlY29uZCBjYXNlLCBhbmQgYWRkCisJY29kZSBleHBsYWluaW5nIHdoeSBpdCBkb2VzIG5vdCB3b3JrLgorCisJKiBydGwuaDogUHV0IGRlZmluaXRpb24gb2YgRlVOQ1RJT05fRkxBR1NfVVNFU19DT05TVF9QT09MIGhlcmUuCisJKiBpbnRlZ3JhdGUuYzogUmVtb3ZlIGRlZmluaXRpb24gb2YgaXQgaGVyZS4KKworCSogaW50ZWdyYXRlLmg6IE5ldyBmaWVsZHMgaW4gc3RydWN0IGlubGluZV9yZW1hcCwgbWluX2luc25ubyBhbmQKKwltYXhfaW5zbm5vLCB3aGljaCBpbmRpY2F0ZSB0aGUgcmFuZ2Ugb2YgaW5zbnMgY292ZXJlZCBieSBpbnNuX21hcC4KKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IG1pbl9pbnNubm8gYW5kIG1heF9pbnNubm8uCisKK1dlZCBNYXkgMjIgMTI6MzE6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0bS12YXh2LmggKEFTTV9PVVRQVVRfTE9DQUwpOiBVc2UgZGF0YV9zZWN0aW9uLgorCisJKiBwcm90b2l6ZS5jIChmYW5jeV9hYm9ydCk6IERlZmluZSBpdC4KKwkqIG9iamMtcGFyc2UueSAoeXlwcmludCwgc2V0X3l5ZGVidWcpOiBOZXcgZnVuY3Rpb25zLgorCisJKiB0cmVlLmggKGdldHRhZ3MsIGdldF9wZXJtYW5lbnRfdHlwZXMsIGdldF90ZW1wb3JhcnlfdHlwZXMpOgorCURlY2xhcmUgdGhlbS4KKworCSogTWFrZWZpbGUuaW4gKHByb3RvaXplLm8sIHVucHJvdG9pemUubyk6CisJVXNlIHRoZSBzdGFuZGFyZCBmbGFncyBhbmQgaW5jbHVkZSBkaXJzLiAgRG9uJ3QgdXNlIC1XYWxsLgorCSogcHJvdG9pemUuYyAoYWJvcnQpOiBEZWNsYXJhdGlvbiBkZWxldGVkLgorCisJKiBjY2NwLmMgKG1haW4pOiBFbnN1cmUgYG5leHQnIGZpZWxkIGluIGRpcmVjdG9yeSBsaXN0IGlzIGluaXRpYWxpemVkLgorCitXZWQgTWF5IDIyIDA5OjI3OjQ5IDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogZXhwbWVkLmMgKHN5bnRoX211bHQpOiBSZXR1cm4gY29zdCBvZiAtMSBpZiBzaGlmdCBpcyB0b28KKwlleHBlbnNpdmUuCisKK1dlZCBNYXkgMjIgMDc6NTM6NTIgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IE1vcmUgU0ltb2RlLT5QbW9kZSBmaXhlcy4KKworV2VkIE1heSAyMiAwMjo0MzowMiAxOTkxICBNaWNoZWFsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluLCBlbWl0LXJ0bC5jLCBleHBsb3cuYywgZmluYWwuYywgZ2xvYmFsLWFsbG9jLmMsCisJZ251bGliMi5jLCBoYXJkLXJlZy1zZXQuaCwgcmVnY2xhc3MuYywgcmVsb2FkMS5jLCBjY2NwLmM6IEZpeCB0eXBvcworCWFuZCBpbmRlbnRhdGlvbi4KKworV2VkIE1heSAyMiAwMDoxNDozNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBBZGQgdG8gbGFzdCBjaGFuZ2U7IGhhbmRsZSBzdWJyZWcKKwlpbiBzcmMgYXMgd2VsbCBhcyBpbiBkZXN0IG9mIGkzLgorCitUdWUgTWF5IDIxIDIyOjMyOjA4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG02OGsubWQgKGRicmEpOiBSZXdyaXRlIHBhdHRlcm4gc28gaXQgcmVmbGVjdHMgc2ltcGxpZmljYXRpb25zIHRoYXQKKwljb21iaW5lIHdpbGwgbWFrZS4KKworVHVlIE1heSAyMSAxMDo0NDowNSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogV2hlbiBhIGxvb3AtdnRvcCBub3RlIGlzIGVuY291bnRlcmVkLAorCXJlc2V0IGBub3RfZXZlcnlfaXRlcmF0aW9uJy4KKworVHVlIE1heSAyMSAwMDoxNzozMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFsd2F5cyB1c2UgbG9uZyB0eXBlIGZvciBzaXplX3QuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFVzZSBBU01fREVDTEFSRV9PQkpFQ1RfTkFNRS4KKworCSogcHJvdG9pemUuYzogSW5jbHVkZSBjb25maWcuaC4KKwkoY2htb2QsIGtpbGwpOiBEZWNsYXJhdGlvbnMgZGVsZXRlZC4KKwlUaGV5IGFyZW4ndCBuZWVkZWQsIGFuZCBjYW4gY29uZmxpY3Qgd2l0aCBzeXN0ZW0gaGVhZGVycy4KKwkod2FpdCk6IEJTRCBkZWNsYXJhdGlvbiBkZWxldGVkLgorCShzYXZlX2RlZl9vcl9kZWMpOiBBZGQgbWlzc2luZyBmcHJpbnRmIGFyZy4KKworCSogdG0tbmV4dC5oIChFWFRSQV9GT1JNQVRfRlVOQ1RJT05TKTogRml4IHR5cG8uCisKKwkqIHByb3RvaXplLmM6IFVzZSBVU0cgYW5kIFZNUyBhcyBtb3N0IGZpbGVzIGRvLgorCURvbid0IGV4cGVjdCBCU0QgdG8gYmUgbmVjZXNzYXJ5IGRlZmluZWQgb3V0c2lkZSB0aGlzIGZpbGUuCisJRGVmaW5lIGdldHdkIHVzaW5nIGdldGN3ZCwgbm90IHZpY2UtdmVyc2EsIHRvIGJlIGxpa2UgZGJ4b3V0LmMuCisJKiBjY2NwLmMsIFNZU0NBTExTLmM6IFVzZSBVU0cgYW5kIFZNUyBhcyBtb3N0IGZpbGVzIGRvLgorCURvbid0IGV4cGVjdCBCU0QgdG8gYmUgbmVjZXNzYXJ5IGRlZmluZWQgb3V0c2lkZSB0aGlzIGZpbGUuCisKK01vbiBNYXkgMjAgMTY6NTQ6MTcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0bS1pMzg2LmgsIHRtLWF0dDM4Ni5oLCB0bS1ic2QzODYuaCwgdG0tc3VuMzg2LmggKEFTTV9CWVRFX09QKToKKwlSZW5hbWVkIGZyb20gQVNNX0JZVEUuCisJKiB2YXJhc20uYyAoQVNNX0JZVEVfT1ApOiBMaWtld2lzZS4KKworCSogYy1kZWNsLmMsIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBUeXBvOgorCUhhZCBQQ0NfQklUX0ZJRUxEX01BVFRFUlMgd2hpY2ggaXMgbm93IFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMuCisKKwkqIGdjYy5jIChoYW5kbGVfYnJhY2VzKTogRG9uJ3QgZGVyZWYgaW5wdXRfc3VmZml4IGlmIG51bGwuCisKK01vbiBNYXkgMjAgMTU6MTk6MjcgMTk5MSAgTWljaGFlbCBJIEJ1c2huZWxsICAobWliIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKHBjZmluY2x1ZGUpOiBTVFJJTkdERUYgc3RydWN0IGlzIG5vdyBsb25nd29yZCBhbGlnbmVkLgorCitNb24gTWF5IDIwIDE0OjI2OjE4IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIHNwYXJjLm1kOiBSZW1vdmUgYWxsIGFyaXRobWV0aWMsIGxvZ2ljYWwsIGFuZCBzaGlmdCBwYXR0ZXJucyBmb3IKKwlzdWItU0ltb2RlIG9wZXJhbmRzLiAgQWxzbyBmaXggc29tZSBESW1vZGUgcGF0dGVybnMuCisKKwkqIG91dC1zcGFyYy5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBTaW1wbGlmaWVkIGNvbnNpZGVyYWJseS4KKworCSogcnRsLmMgKHJ0eF9hbGxvYyk6IElubGluZS1jb2RlIGFuIG9wdGltaXplZCBvYnN0YWNrX2FsbG9jLgorCisJKiBjcGx1cy1sZXguYyAobWFrZV97cG9pbnRlcixyZWZlcmVuY2V9X2RlY2xhcmF0aW9uKTogQ2FsbAorCWBidWlsZF9wYXJzZV9ub2RlJyBpbnN0ZWFkIG9mIGBidWlsZDEnIHNvIG1lbW9yeSBjYW4gYmUgZnJlZWQuCisKKwkqIGNwbHVzLXBhcnNlLnk6IFJlbW92ZSB1bm5lZWRlZCBlcHNpbG9uIHJ1bGVzIHRvIHByb2R1Y2UgYW4gYXZlcmFnZQorCTE1JSByZWR1Y3Rpb24gaW4gdGhlIG51bWJlciBvZiByZWR1Y3Rpb25zIHBlcmZvcm1lZC4KKworCSogY3BsdXMtcGFyc2UueSAoUkVUVVJOX0lOSVQpOiBVc2UgbmV3IGludGVyZmFjZSB0byBzcGVlZCB1cAorCWdyYW1tYXIuCisJKiBjcGx1cy1kZWNsLmMgKHN0b3JlX3JldHVybl9pbml0KTogVXNlIG5ldyBpbnRlcmZhY2UuCisKK01vbiBNYXkgMjAgMTE6MTY6MzQgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IEEgcmVnaXN0ZXIgd2hpY2ggZGllcyBpbiBhIENBTExfSU5TTgorCWRvZXMgbm90IGNyb3NzIGNhbGxzLiAgQSBzaW5nbGUgaW5zbiBibG9jayBtdXN0IGJlIHNjaGVkdWxlZCwgdG8KKwllbnN1cmUgdGhhdCByZWdpc3RlciBsaWZldGltZSBpbmZvIGlzIGNvcnJlY3RlZCB1cGRhdGVkLgorCitNb24gTWF5IDIwIDA2OjUwOjM3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBjb21iaW5lIHdoZW4gSTEgYW5kIEkyIGJvdGggZmVlZAorCWludG8gSTMgYW5kIEkxIHVzZXMgdGhlIHJlZ2lzdGVyIHNldCBpbiBJMi4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFByZWZlciBwc2V1ZG9zIG92ZXIgb3RoZXIgdGhpbmdzIHdlIG1heQorCXJlbG9hZC4KKworTW9uIE1heSAyMCAwMjowMjoxNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBUZXN0IE1PREVTX1RJRUFCTEVfUCB3aGVuIGkzIHNyYyBpcyBzdWJyZWcuCisKKwkqIG02OGsubWQgKHRydW5jKik6IERvbid0IHNldCBjYyBpZiB1c2Ugd2lkZXIgaW5zbi4KKworU3VuIE1heSAxOSAxNDo0NTo0NiAxOTkxICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIE1ha2VmaWxlLmluIChjbGVhbik6IERlbGV0ZSBzdGFnZTEuLi5zdGFnZTQuCisJKHJlYWxjbGVhbik6IERlbGV0ZSBjZXhwLm91dHB1dC4KKworCSogZml4aW5jbHVkZXM6IEhhbmRsZSBCU0Q0M19fSU8qIGFuZCBCU0Q0M19DVFJMIGxpa2UgSU8qIGFuZCBDVFJMLgorCitTdW4gTWF5IDE5IDE1OjAwOjA1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjb3VudF9wb3NzaWJsZV9ncm91cHMpOiBOZXcgZnVuY3Rpb24uCisJKHJlbG9hZCk6IENhbGwgaXQgdHdpY2UuICBUaGlzIGNoZWNrcyBmb3IgcG9zc2libGUgZ3JvdXBzCisJYWZ0ZXIgbWF5YmUgc3BpbGxpbmcgc29tZSBzaW5nbGUgcmVncy4KKworCSogY29uZmlndXJlIChtYWdudW0sIG0zMjMwKTogQWxpYXNlcyBmb3IgbWlwcy9taXBzLgorCisJKiBmaXhpbmNsdWRlcyAobWFjaGluZS9jcHUuaCk6CisJQ3JlYXRlIGluIHByb3BlciBkaXIuICBGaXggbWlwcy9jcHUuaCB0b28uCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBUdXJuIG9mZiB1c2FnZSBvZiByZWdfcHJlZmVycmVkX2NsYXNzLgorCitTdW4gTWF5IDE5IDA5OjUxOjI0IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBDb250aW51ZSBwdXR0aW5nIFJFR19ERUFEIG5vdGVzIG9uIAorCWZpeGVkIHJlZ2lzdGVycy4KKworCSogcmVnY2xhc3MuYyAocmVnX2NsYXNzX3JlY29yZCk6IERvbid0IGNvdW50IGNsYXNzZXMgaW4gd2hpY2ggb2JqZWN0cworCXdvbid0IGZpdC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFByZS1jb21wdXRlIHByZWZlcnJlZCBjbGFzc2VzIGZvciBlYWNoCisJb3BlcmFuZDsgaWYgb3BlcmFuZCAxIGlzIGNvcGllZCB0byBvcGVyYW5kIDAsIG1lcmdlIHRoZSBjbGFzc2VzLgorCVJFSkVDVCBpcyBub3cgb25seSAxLzMgYXMgY29zdGx5IGFzIExPU0VSUzsgPyBhZGRzIDMgdG8gUkVKRUNUIHNvCisJdGhhdCBpdCdzIHNlbWFudGljcyBkb24ndCBjaGFuZ2UuCisKKwkqIGV4cHIuYyAoY29tcGFyZV9mcm9tX3J0eCk6IERvIEVRIGFuZCBORSBjb21wYXJpc29ucyB1bnNpZ25lZCBzaW5jZQorCXRoZXkgYXJlIHVzdWFsbHkgY2hlYXBlciBhbmQgd2lsbCBjc2Ugd2l0aCBjb21wYXJpc29ucyBhZ2FpbnN0IHplcm8KKwl3aGljaCBhcmUgYWxyZWFkeSB1bnNpZ25lZC4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBEb24ndCB0cnkgdG8gYWNjZXNzIHJlbG9hZF9vdXQKKwlmb3IgZGlzYWJsZWQgcmVsb2FkIChyZWxvYWRfc3RyaWN0X2xvdyBtYXkgbm90IGhhdmUgYmVlbiBjbGVhcmVkKS4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBEb24ndCBsZXQgb3B0aW9uYWwgcmVsb2FkcyBpbmhlcml0CisJc3BpbGwgcmVncyB1bnRpbCBhbGwgbm9uLW9wdGlvbmFsIHJlbG9hZHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBzcGlsbAorCXJlZ3MuCisJV2UgY2FuIHVzZSBmaW5kX2VxdWl2X3JlZyBldmVuIGlmIG11c3RfcmV1c2UsIHdlIGp1c3QgY2FuJ3QgZ2V0IGEKKwlzcGlsbCByZWcgdGhhdCB3YXkuCisKKwkqIGV4cHIuYyAoZG9fdGFibGVqdW1wKTogV2hlbiB1c2luZyBMQUJFTF9SRUYgaW4gYXJpdGhtZXRpYywgbWFrZSBpdAorCWluIFBtb2RlIGluc3RlYWQgb2YgVk9JRG1vZGUuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBEb24ndCB0cnkgdG8gbWFrZSBwYXJhZG94aWNhbAorCW1lbW9yeSBTVUJSRUdzOyBpbnN0ZWFkIGtlZXAgU1VCUkVHX1JFRyBhIHBzZXVkbyBhbmQgY29weSBiZXR3ZWVuCisJbWVtb3J5IGFuZCB0aGUgcHNldWRvLgorCShmaXh1cF9tZW1vcnlfc3VicmVnKTogQWJvcnQgaWYgd2UgdHJ5IG1ha2luZyBwYXJhZG94aWNhbCBTVUJSRUdzLgorCisJKiByZW9yZy5jIChyZWR1bmRhbnRfaW5zbl9wKTogSW5zbnMgd2UgcGFzcyBtYXkgcmVmZXJlbmNlIHJlc291cmNlcworCXNldCBieSBJTlNOOyBpdCBpcyBzdWZmaWNpZW50IHRoYXQgdGhleSBub3Qgc2V0IHJlc291cmNlcyBpbiBJTlNOLgorCitTdW4gTWF5IDE5IDA4OjA2OjE3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIHRtLXNwYXJjLmggKFNUUlVDVF9WQUxVRSk6IENoYW5nZSBTSW1vZGUgdG8gUG1vZGUgaGVyZSwgYW5kIGluCisJb3RoZXIgcGxhY2VzLgorCShGSVJTVF9QQVJNX09GRlNFVCk6IENoYW5nZSA0IHRvIFVOSVRTX1BFUl9XT1JEIGhlcmUsIGFuZCBpbiBvdGhlcgorCXBsYWNlcy4KKwkoUk9VTkRfQURWQU5DRSk6IE5ldyBtYWNybyB0byBjb21wdXRlIGhvdyBmYXIgdG8gYWR2YW5jZSB0aGUgYXJnCisJcG9pbnRlciBmb3IgYSBnaXZlIHBhcmFtZXRlci4KKwkoRlVOQ1RJT05fQVJHKTogVXNlIFBBUk1fQk9VTkRBUlkgaW5zdGVhZCBvZiAzMi4KKwkoRVhUUkFfQ09OU1RSQUlOVCk6IERvbid0IGRlcGVuZCBvbiBgcmVsb2FkX2NvbXBsZXRlZCcuCisJKiBzcGFyYy5tZCAodmFyaW91cyBwbGFjZXMpOiBDaGFuZ2UgbWFueSBESW1vZGUgcHJlZGljYXRlcyBmcm9tCisJYGdlbmVyYWxfb3BlcmFuZCcgdG8gYHJlZ2lzdGVyX29wZXJhbmQnLgorCisJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IEZpeGVkIDE4IE1heSBjaGFuZ2UgdG8gdXNlCisJYHZhbGlkYXRlX2NoYW5nZScgdG8gbWFrZSBzdXJlIHdlIGdldCB2YWxpZCwgaW5pdGlhbGl6ZWQgdmFsdWVzCisJcmVnYXJkbGVzcyBvZiB3aGljaCBwYXRoIHdlIGNob29zZS4KKworU2F0IE1heSAxOCAxNTowNzoyOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYzogUmVuYW1lIEZBVEFMX0VYSVRfQ09ERSB0byBGQUlMVVJFX0VYSVRfQ09ERS4KKworCSogZ251bGliMS5jOiBSZW5hbWUgU0ZWQUxVRSB0byBGTE9BVF9WQUxVRV9UWVBFLgorCSh1bmlvbiBmbHRfb3JfdmFsdWUpOiBOZXcgdHlwZS4KKwkoKik6IFVzZSB0aGF0IGluc3RlYWQgb2YgZmx0X29yX2ludCBpbiBtb3N0IHBsYWNlcy4KKwlEZWxldGUgc29tZSB2YXJpYWJsZXMgYGludGlmeScgdGhhdCBhcmVuJ3QgbmVlZGVkLgorCSogdG0taTM4Ni5oOiBSZW5hbWUgU0ZWQUxVRSB0byBGTE9BVF9WQUxVRV9UWVBFLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogQklURklFTERfTkJZVEVTX0xJTUlURUQgbm93IDEgb3IgMC4KKworCSogcnRsLmggKHN0cnVjdCBydHhfZGVmKTogRHJvcCBTSE9SVF9FTlVNX0JVRzsga2VlcCBPTkxZX0lOVF9GSUVMRFMuCisKKwkqIGxvb3AuYyAoYWRkX2Nvc3QsIGNvcHlfY29zdCk6CisJVmFyaWFibGVzIHJlcGxhY2Ugb2xkIG1hY3JvcyAqX0JFTkVGSVQgYW5kIENPUFlfUEVOQUxUWS4KKwkoaW5pdF9sb29wKTogTmV3IGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFyaWFibGVzLgorCShleHByX2JlbmVmaXQpOiBVc2UgcnR4X2Nvc3QuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2FsbCBpbml0X2xvb3AuCisJKiBjc2UuYyAocnR4X2Nvc3QpOiBUcmVhdCBtdWx0IGJ5IDIqKm4gYXMgYSBzaGlmdCBieSBkZWZhdWx0LgorCisJKiB0b3BsZXYuYyAob3V0cHV0X2ZpbGVfZGlyZWN0aXZlKToKKwlUeXBvIGluIEFTTV9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUuCisKKwkqIGdudWxpYjIuYyBbTF90cmFtcG9saW5lXTogUmVuYW1lIGZ1bmN0aW9uIHRvIF9fdHJhbXBvbGluZS4KKwlBbHdheXMgY29tcGlsZSBpdCBldmVuIGlmIGVtcHR5LiAgTWFrZSBpdCBnbG9iYWwuCisKK1NhdCBNYXkgMTggMTQ6MTE6MzcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSB0ZXN0IHdoZW4gaW5jcmVhc2luZworCWNvc3Qgb2YgYWx0ZXJuYXRpdmUgZHVlIHRvIG5vbi1wcmVmZXJyZWQgcmVnaXN0ZXIgY2xhc3MuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRml4IHR5cG8uCisKKwkqIHRtLXJzNjAwMC5oOiBBZGQgaGFyZCByZWdpc3RlcnMgZm9yIHRoZSA4IENSIGZpZWxkczsgYWRkIGNsYXNzZXMKKwlDUjBfUkVHUyBhbmQgQ1JfUkVHUy4KKwlEb24ndCB1c2UgQ0MwOyBhZGQgQ0NVTlNtb2RlIGFuZCBDQ0ZQbW9kZS4KKwkoRklYRURfUkVHSVNURVJTKTogcjMxIChmcCkgaXMgbm8gbG9uZ2VyIGZpeGVkLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBSZW1vdmUgJ2QnIGZvciBHRU5FUkFMX1JFR1M7ICdyJyBhbHJlYWR5CisJbWVhbnMgdGhpcy4KKwkoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVIpOiBJZiB3ZSBjYW4gbW92ZSBhIGNvbnN0YW50IGluIHR3byBpbnNucworCWZvciBERiBvciBvbmUgaW5zbiBmb3IgU0YsIGxldCBpdCBtYXRjaCAnRycuCisJKFNFQ09OREFSWV9SRUxPQURfQ0xBU1MpOiBEZWZpbmUgdGhpcyBuZXcgbWFjcm8uCisJKEZVTkNUSU9OX0FSRyk6IEZpeCB0eXBvIGluIHRlc3RpbmcgbmFyZ3NfcHJvdG90eXBlLgorCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBBbHdheXMgcmV0dXJuIDEuCisJKEZJWFVOU19UUlVOQ19MSUtFX0ZJWF9UUlVOQyk6IERvIG5vdCBkZWZpbmUuCisJKiByczYwMDAubWQ6IERvbid0IHVzZSBDQzA7IGluc3RlYWQgdXNlIGEgcHNldWRvIHdoaWNoIHdpbGwgYmUgYXNzaWduZWQKKwl0byBDUl9SRUdTIG9yIENSMF9SRUdTLiAgTWFrZSB2YXJpYW50cyBvZiBhcml0aG1ldGljIGluc25zIHRoYXQKKwlzZXQgb25seSB0aGUgY29uZGl0aW9uIGNvZGUgYW5kIHRoYXQgc2V0IGJvdGggdGhlIGNvbmRpdGlvbiBjb2RlCisJYW5kIGEgbm9ybWFsIHJlc3VsdC4KKwlEZWxldGUgImNjIiBhdHRyaWJ1dGUgYW5kIGFkZCAidHlwZSIgYXR0cmlidXRlLgorCURlZmluZSBkZWxheXMgZm9yIGNjLXNldHRpbmcgaW5zbnMgYW5kIGZvciBsb2Fkcy4KKwlSZXBsYWNlIGBkJyBjb25zdHJhaW50IHdpdGggYHInLgorCURlbGV0ZSBwYXR0ZXJucyBmb3IgSEltb2RlIGFuZCBRSW1vZGUgYXJpdGhtZXRpYyBvcGVyYXRpb25zLgorCUhhbmRsZSBwdXR0aW5nICJlYXN5IiBERm1vZGUgb3IgU0Ztb2RlIGNvbnN0YW50IGludG8gYSByZWdpc3Rlci4KKwlSZXdvcmsgY29tcGFyZSBhbmQgYnJhbmNoZXM7IGFkZCBzY2MgaW5zbnMuCisJRml4IHVwIGRlY3JlbWVudC1hbmQtYnJhbmNoIGluc25zLCBidXQgdGhleSBzdGlsbCB3b24ndCBiZSB1c2VkIHlldC4KKwkoY2FsbCBpbnNucyk6IFVzZSBwc2V1ZG8gZm9yICJsciIgaW4gaW5kaXJlY3QgY2FsbHMuCisJKG1vdmRmLCBtb3ZzZik6IEV4cGxpY3RseSBoYW5kbGUgbmVlZCB0byB1c2UgbWVtb3J5IHRvIGNvcHkgYmV0d2VlbgorCWdlbmVyYWwgYW5kIEZQIHJlZ2lzdGVycy4KKwkqIG91dC1yczYwMDAuYyAobmV4dF9pbnNuX3Rlc3RzX25vX3Vuc2lnbmVkLCB1bnNpZ25lZF9jb21wYXJpc29uc19wKToKKwlEZWxldGVkLgorCSh1cGRhdGVfY2MpOiBMaWtld2lzZS4KKwkoZ2VuX3JlZ19vcGVyYW5kKTogVGlnaGVuIHVwIGEgYml0LgorCShjY19yZWdfb3BlcmFuZCwgcmVnX29yX3Vfc2hvcnRfb3BlcmFuZCwgZWFzeV9mcF9jb25zdGFudCk6IE5ldyBmbnMuCisJKGZwX3JlZ19vcl9tZW1fb3BlcmFuZCwgbWVtX29yX2Vhc3lfY29uc3Rfb3BlcmFuZCk6IExpa2V3aXNlLgorCShjYWxsX29wZXJhbmQpOiBBY2NlcHQgcHNldWRvIHJlZ2lzdGVyLgorCShicmFuY2hfY29tcGFyaXNvbl9vcGVyYXRvciwgc2NjX2NvbXBhcmlzb25fb3BlcmF0b3IpOiBOZXcgZnVuY3Rpb25zLgorCShzZWNvbmRhcnlfcmVsb2FkX2NsYXNzLCBjY3JfYml0LCBtdXN0X3NhdmVfY3IpOiBMaWtld2lzZS4KKwkocHJpbnRfb3BlcmFuZCwgY2FzZSAndycsICd1Jyk6IFN1cHBvcnQgQ09OU1RfRE9VQkxFLgorCShwcmludF9vcGVyYW5kLCBjYXNlcyAnVycsICdmJywgJ0YnLCAnUicsICd0JywgJ1QnLCAnQycsICdEJyk6CisJTmV3IGNhc2VzLgorCShwcmludF9vcGVyYW5kLCBjYXNlcyAnaicgYW5kICdKJyk6IE5vdyB1c2UgZm9yIGJpdCBudW1iZXIgaW4gQ0NSLgorCShvdXRwdXRfe3BybyxlcGl9bG9ndWUpOiBJZiB3ZSBjYWxsIGZ1bmN0aW9uIHRvIHNhdmUvcmVzdG9yZSBmcHIncywKKwl3ZSBuZWVkIHRvIHNhdmUvcmVzdG9yZSBMUi4KKwlTYXZlIENSIGlmIHdlIG1vZGlmeSB0aGUgY2FsbC1zYXZlZCBmaWVsZHMuCisKKwkqIHJvbXAubWQ6IERlbGV0ZSBISW1vZGUgYW5kIFFJbW9kZSBhcml0aG1ldGljIG9wZXJhdGlvbnMuCisJKHN3YXB4aSk6IERlbGV0ZTsgb2Jzb2xldGUgYW5kIG5ldmVyIHVzZWQuCisKKwkqIHRtLWEyOWsuaCAoVEFSR0VUX1NXSVRDSEVTKTogQ2hhbmdlIC1tbm9kdyB0byAtbW5kdy4KKwlBZGQgLW17bm8tLH1yZXVzZS1hcmctcmVncy4KKwkoU0VDT05EQVJZX1JFTE9BRF9DTEFTUyk6IFByb3ZpZGUgYSBkZWZpbml0aW9uIGZvciB0aGlzIG5ldyBtYWNyby4KKwkqIGEyOWsubWQ6IERlbGV0ZSBhbGwgSEltb2RlIGFuZCBRSW1vZGUgYXJpdGhtZXRpYyBvcGVyYXRpb25zLgorCSogb3V0LWEyOWsuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IE5ldyBmdW5jdGlvbi4KKwkoaW5jb21pbmdfcmVnKTogTG9vayBhdCBUQVJHRVRfTk9fUkVVU0VfQVJHUy4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IERvbid0IHJlbW92ZSBhIFBMVVMgdW5sZXNzIGluc2lkZQlhbgorCWFkZHJlc3Mgc2luY2UgaXQgd291bGQgbmVlZCB0byBjaGFuZ2UgSU5TTl9DT0RFIGFuZCBjYW4ndCBkbyBpdCBoZXJlLgorCisJKiByZW9yZy5jICh1aWRfdG9fcnVpZCwgbWF4X3VpZCk6IE5ldyB2YXJzLgorCShtb3N0bHlfdHJ1ZV9qdW1wKTogUmVmaW5lIHByZWRpY3Rpb24gc2xpZ2h0bHkuCisJVXNlIHVpZF90b19ydWlkIG1hcCB0byBhY2N1cmF0ZWx5IHNlZSBpZiBicmFuY2hlcyBhcmUgYmFja3dhcmQuCisJKHJlbGF4X2RlbGF5X3Nsb3RzKTogUGFzcyBjb25kaXRpb24gdG8gbW9zdGx5X3RydWVfanVtcC4KKwkoZGJyX3NjaGVkdWxlKTogQWxsb2NhdGUgYW5kIGJ1aWxkIHVpZF90b19ydWlkIG1hcC4KKworU2F0IE1heSAxOCAxMjo1NDo0NSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChpbnNlcnQpOiAiVW5jaGFuZ2luZyIgcHNldWRvcyBjb3VudCBhcyBjb25zdGFudC4KKworCSogdHJlZS5jIChtYWtlX25vZGUpOiBSZXdyaXRlIGVuZCBhcyBhIHN3aXRjaC4KKworU2F0IE1heSAxOCAwMzo1MTowNiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjc2UuYyAoRklYRURfQkFTRV9QTFVTX1ApOiBTaW5jZSB0aGlzIGlzIHVzZWQgd2hlbiBjYWxsZWQgZnJvbQorCWBleHBhbmRfaW5saW5lX2Z1bmN0aW9uJywgYWxzbyBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUgYmFzZQorCXJlZ2lzdGVyIGlzIFZJUlRVQUxfU1RBQ0tfVkFSU19SVFguCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBJbiBFUSBhbmQgTkUgY2FzZSwgY29udmVydCBhIENPTVBBUkUKKwlvcGVyYW5kIHRvIHNvbWV0aGluZyB3ZSBjYW4gb3B0aW1pemUuCisJKHJlZmVyc190b19tZW1fcCk6IEhhbmRsZSB0aGUgY2FzZSB3aGVuIGBiYXNlJyBpcyBhIExPX1NVTS4KKwkqIGludGVncmF0ZS5jIChGSVhFRF9CQVNFX1BMVVNfUCk6IERlZmluZSB0aGlzIHRvIHJlY29nbml6ZSBvZmZzZXRzCisJZnJvbSB0aGUgdmFyaW91cyB2aXJ0dWFsIHJlZ2lzdGVycy4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEV4cGFuZCBleHBycyB1c2luZyBFWFBBTkRfU1VNIHNvIGFzIHRvIGdldAorCXN0YWNrIGZyYW1lIGFkZHJlc3NlcyBpbnN0ZWFkIG9mIHBzZXVkb3MuICBUaGlzIHlpZWxkcyBtdWNoIGJldHRlcgorCWNzZSAoYXQgbGl0dGxlIGNvc3QpIGZvciBHTlUgQysrLiAgQWxzbywgdGVzdCBGSVhFRF9CQVNFX1BMVVNfUCBhcworCWFuIGFsdGVybmF0aXZlIHRvIENPTlNUQU5UX1AgdG8gcmVjb3JkIGEga25vd24gcmVnaXN0ZXIgdmFsdWUuCisJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IElmIHdlIGFyZSBwcm9jZXNzaW5nIGEgY3Jvc3MganVtcCBhbmQKKwl0aGUgaW5zbnMgZmFpbCB0byBtYXRjaCwgdHJ5IGxvb2tpbmcgZm9yIGEgUkVHX0VRVUFMIG5vdGUgdGhhdCBtYWtlcworCXRoZW0gZXF1aXZhbGVudCBpbnNucy4gIElmIGZvdW5kLCBrZWVwIGdvaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgZm9yCisJbWVyZ2luZyBjbGVhbnVwIGNvZGVzIHdoZW4gb25lIGNsZWFudXAgcGF0aCBnZXRzIGZyYW1lIGFkZHJlc3MgaW4gYQorCXJlZ2lzdGVyIHdoZW4gdGhlIG90aGVyIHBhdGggZ2V0cyB0aGUgZnJhbWUgYWRkcmVzcyBleHBsaWNpdGx5LgorCisJKiBjcGx1cy1pbml0LmMgKGJ1aWxkX2RlbGV0ZSk6IEZpeGVkIHJlc2lkdWFsIHVzZSBvZiAxLWJhc2VkCisJaW5kZXhpbmcgdG8gdXNlIDAtYmFzZWQgaW5kZXhpbmcgaW5zdGVhZC4KKworCSogY3BsdXMtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBGaXggcmFlYnVybidzIE1heSAxMiBjaGFuZ2Ugc28gdGhhdAorCWRlc3RydWN0b3JzIHN0aWxsIGhhdmUgdGhlIHNhbWUgbmFtZS4KKworCSogY3BsdXMtZGVjbC5jIChkZWNsc19tYXRjaCk6IFJlbW92ZSBkZXBlbmRlbmNlIG9uIE1FUkdFRC4KKworCSogY3BsdXMtY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IEZpeGVkIGJ1ZyBpbiBjb21wdXRpbmcgb2Zmc2V0cworCWZvciBleHBycyB3aGljaCBhcmUgRklYRURfVFlQRV9QLgorCShidWlsZF92Zm5fcmVmKTogQ2hhbmdlIGluaXRpYWxpemVyIGZvciBSRUYgZnJvbSAwIHRvIE5VTExfVFJFRS4KKworCSogY3BsdXMtZGVjbC5jIChtYXliZV9idWlsZF9jbGVhbnVwKTogQWRkIExPT0tVUF9OT05WSVJUVUFMIHRvIGZsYWdzCisJYXJndW1lbnQgaW4gY2FsbCB0byBgYnVpbGRfZGVsZXRlJyBpZiBERUNMIGRvZXMgbm90IHVzZSB2aXJ0dWFsCisJYmFzZWNsYXNzZXMuICBJZiBpdCBkb2VzLCB3ZSBnbyB0aHJvdWdoIGEgZnVuY3Rpb24gY2FsbCB0byBzYXZlCisJc3BhY2UsIHVubGVzcyBGTEFHX0VYUEVOU0lWRU9fT1BUSU1JWkFUSU9OUyBpcyBub256ZXJvLiAgPz9CZXR0ZXIKKwlhcHByb2FjaCBpcyB0byBrbm93LCBpbiBleHBhbmRfY2xlYW51cHMsIHRvIGNsZWFyIGBmbGFnX25vX2lubGluZScKKwlkdXJpbmcgdGhlIGNsZWFudXAncyBleHBhbnNpb24uCisKKwkqIGNwbHVzLSouYyAodmFyaW91cyBwbGFjZXMpOiBBZGQgTE9PS1VQX0RFU1RSVUNUT1IgdG8gYWxsIHBsYWNlcworCXdoZXJlIHdlIGtub3cgd2UgYXJlIGNhbGxpbmcgYSBkZXN0cnVjdG9yIGZvciBhIG5vbi1udWxsIG9iamVjdC4KKworCSogc3RtdC5jIChmaXh1cF9nb3Rvcyk6IFJ1biBkZXN0cnVjdG9ycyBvbiBjbGVhbnVwcyB0aGF0IGNvbWUKKwlmcm9tIHRoZSBibG9jayBiZWluZyBleGl0ZWQsIGluIGFkZGl0aW9uIHRvIGFueSBpbm5lciBibG9ja3MKKwlmb3Igd2hpY2ggTEFCRUwgaXMgbm93IGRlZmluZWQuCisJKGV4cGFuZF9yZXR1cm4pOiBUYWtlIGNhcmUgb2YgZGVzdHJ1Y3RvcnMgdGhhdCBvY2N1ciBpbiB0aGUKKwljdXJyZW50IGJpbmRpbmcgbGV2ZWwuCisJKGZpeHVwX2NsZWFudXBzKTogSWYgd2UgZW1pdHRlZCBubyBpbnNucywgZG9uJ3QgY2hhbmdlICpCRUZPUkVfSlVNUC4KKworCSogcnRsYW5hbC5jOiBEZWZpbmUgYHRhcmdldF9mbGFncycgaGVyZS4uLgorCSogdG9wbGV2LmM6IC4uLm5vdCBoZXJlLiAgVGhpcyBlbmFibGVzIHVzIHRvIGxpbmsgZ2VuKiBwcm9ncmFtcworCXdoaWNoIG1pZ2h0LCB0aHJvdWdoIHJ0bGFuYWwubywgcHVsbCBpbiByZWZlcmVuY2VzIHRvIGB0YXJnZXRfZmxhZ3MnCisJdGhhdCBhcmUgbmV2ZXIgdXNlZC4KKworCSogZnVuY3Rpb24uYzogQWRkIGRlY2xhcmF0aW9uIGZvciBgY3VycmVudF9mdW5jdGlvbl91c2VzX2NvbnN0X3Bvb2wnLgorCSogZXhwci5oOiBBZGQgZXh0ZXJuIGRlY2xhcmF0aW9uIGZvciB0aGF0IHZhcmlhYmxlLgorCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIGEgc2xvdCBuYW1lZAorCWB1c2VzX2NvbnN0X3Bvb2wnIGZvciBgY3VycmVudF9mdW5jdGlvbl91c2VzX2NvbnN0X3Bvb2wnLgorCSogZnVuY3Rpb24uYyAoe3B1c2gscG9wfV9mdW5jdGlvbl9jb250ZXh0KTogc2F2ZSBhbmQgcmVzdG9yZSB0aGUKKwl2YWx1ZSBvZiBgY3VycmVudF9mdW5jdGlvbl91c2VzX2NvbnN0X3Bvb2wnLgorCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX1VTRVNfQ09OU1RfUE9PTCk6IERlZmluZWQgdG8gYmUgMDIwMC4KKwkqIGludGVncmF0ZS5jIChpbml0aWFsaXplX2Zvcl9pbmxpbmUpOgorCUZVTkNUSU9OX0ZMQUdTX1VTRVNfQ09OU1RfUE9PTCBub3cgY29udHJpYnV0ZXMgdG8gdGhlIHZhbHVlIG9mCisJYGZ1bmN0aW9uX2ZsYWdzJy4KKwkob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IFJlc3RvcmUgYGN1cnJlbnRfZnVuY3Rpb25fdXNlc19jb25zdF9wb29sJworCWZyb20gYGZ1bmN0aW9uX2ZsYWdzJy4KKwkoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBPbmx5IGNhbGwgYHNhdmVfY29uc3RhbnRzJyBpZgorCWBjdXJyZW50X2Z1bmN0aW9uX3VzZXNfY29uc3RfcG9vbCcgaXMgbm9uemVyby4KKwkoc2F2ZV9mb3JfaW5saW5lX25vY29weSk6IERpdHRvLgorCShzYXZlX2NvbnN0YW50cyk6IFR3ZWFrZWQgdG8gcGVyZm9ybSBpdHMgdHJlZXdhbGsgZmFzdGVyLiAgTm90YWJseSwKKwlpdCBubyBsb25nZXIgYWNjZXB0cyBwdHJzIHRvIE5VTEwgcnRsLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkqIHZhcmFzbS5jIChmb3JjZV9jb25zdF9tZW0pOiBTZXQgYGN1cnJlbnRfZnVuY3Rpb25fdXNlc19jb25zdF9wb29sJworCWlmIHdlIGNyZWF0ZSBhIGNvbnN0YW50IHBvb2wgcmVmZXJlbmNlLgorCisJKiBjcGx1cy1wYXJzZS55LCBjLXBhcnNlLnk6IEFkZCBuZXcgZnVuY3Rpb24gYHNldF95eWRlYnVnJy4gIElmCisJWVlERUJVRyBpcyBkZWZpbmVkLCBzZXRzIGB5eWRlYnVnJyB0byBWQUxVRS4gIE90aGVyd2lzZSwgcHJpbnRzCisJd2FybmluZyB0aGF0IG9wZXJhdGlvbiBpcyBpbnZhbGlkLgorCSogdG9wbGV2LmMgKG1haW4pOiBDYWxsIGBzZXRfeXlkZWJ1ZycgaW5zdGVhZCBvZiBzZXR0aW5nIGB5eWRlYnVnJworCWRpcmVjdGx5LiAgVGhpcyBhbGxvd3MgdXNlciB0byB0dXJuIFlZREVCVUcgb2ZmIGZvciBmYXN0ZXIgcGFyc2luZy4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBFbGltaW5hdGUgYWJvcnQgd2hlbiBwYXNzZWQKKwlESW1vZGUgb3BlcmFuZHMuCisKK0ZyaSBNYXkgMTcgMjE6NTY6NDEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaGFyZC1yZWctc2V0LmggKHJlZ19jbGFzc19zdXBlcnVuaW9uKTogTmV3IHZhci4KKwkqIHJlZ2NsYXNzLmMgKGluaXRfcmVnX3NldHMpOiBDb21wdXRlIHJlZ19jbGFzc19zdXBlcnVuaW9uLgorCShyZWdfY2xhc3Nlc19pbnRlcnNlY3RfcCk6IE5ldyBmdW5jdGlvbi4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFsdGVybmF0aXZlIGlzIGRpc2NvdXJhZ2VkIGlmIGl0IHB1dHMKKwlhIHBzZXVkbyBpbiBhIHJlZ2lzdGVyIGNsYXNzIGl0IGRvZXNuJ3QgcHJlZmVyLgorCisJKiByZWxvYWQxLmMgKGJhc2ljX2Jsb2NrX25lZWRzKTogTm93IGFuIGFycmF5LCBwZXIgcmVnaXN0ZXIgY2xhc3MuCisJKHJlbG9hZCk6IENvbXB1dGUgc2VwYXJhdGUgYmFzaWNfYmxvY2tfbmVlZHMgZm9yIGVhY2ggY2xhc3MuCisJKHNwaWxsX2hhcmRfcmVnKTogSWYgcHNldWRvIGlzIG9ubHkgaW4gb25lIGJsb2NrLCBzZWUgaWYgdGhhdCBibG9jaworCW5lZWRzIGEgc3BpbGwgcmVnaXN0ZXIgb2YgYSBjbGFzcyBjb250YWluaW5nIHRoZSBoYXJkIHJlZzsgbGVhdmUgdGhlCisJcHNldWRvIGFsb25lIGlmIG5vdC4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfbW9kZSwgcmVsb2FkX25yZWdzKTogTmV3IHZhcnMuCisJKHJlbG9hZF9yZWdfY2xhc3NfbG93ZXIpOiBVc2UgdGhlbS4KKwkoYWxsb2NhdGVfcmVsb2FkX3JlZyk6IE5ldyBmdW5jdGlvbi4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogVHJhY2sgc2l6ZSBhbmQgY2xhc3Mgb2YgYW55IGdyb3Vwcy4gIFdlCisJY2FuIGluaGVyaXQgcmVsb2FkcyBpZiB3ZSBhcmUgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgZ3JvdXAgb3IKKwlpZiBvdXIgY2xhc3MgaXMgZGlzam9pbnQgZnJvbSB0aG9zZSBuZWVkZWQgZm9yIGdyb3Vwcy4KKwlUcnkgYWxsIGluaGVyaXRzIGZpcnN0IGJlZm9yZSBhbGwgc3BpbGwgcmVnaXN0ZXIgYWxsb2NhdGlvbnMKKwl1bmxlc3MgdGhlcmUgaXMgYSBsYXRlciByZWxvYWQgd2l0aCBhIHNtYWxsZXIgY2xhc3M7IGNhbGwKKwlhbGxvY2F0ZV9yZWxvYWRfcmVnIHRvIGRvIHRoZSBhY3R1YWwgYWxsb2NhdGlvbi4KKwlVc2UgbmV3IHZhcnMgYWJvdmUuCisJKGVtaXRfcmVsb2FkX2luc25zKTogRGVsZXRlIG91dHB1dCByZWxvYWQgZXZlbiBpZiB3ZSB3ZXJlbid0CisJc3RvcmluZyB0byBtZW1vcnkuCisKKwkqIHJlbG9hZC5oIChyZWxvYWRfc2Vjb25kYXJ5X3JlbG9hZCwgcmVsb2FkX3NlY29uZGFyeV9wKTogTmV3IHZhcnMuCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBJZiBzZWNvbmRhcnkgcmVsb2FkIHJlZ2lzdGVyIGlzIG5lZWRlZCwKKwltYWtlIGEgc2Vjb25kYXJ5IHJlbG9hZC4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUmVsb2FkIHdpdGggcmVsb2FkX3NlY29uZGFyeV9wIG5vbnplcm8gaXMgaW4gdXNlLgorCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBMaWtld2lzZS4KKwkoZW1pdF9yZWxvYWRfaW5zbnMpOiBIYW5kbGUgc2Vjb25kYXJ5IHJlbG9hZHMsIHdoZW4gbmVlZGVkLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEFkZCBwYXNzIHRvIHJlbW92ZSBkZWF0aCBub3RlcyBmb3IgdGhpbmdzIHRoYXQKKwlhcmUgbm8gbG9uZ2VyIHJlZ2lzdGVycyBvciBkb24ndCBkaWUgaWYgd2UgbXVzdCBwcmVzZXJ2ZSBkZWF0aCBub3Rlcy4KKwkoZW1pdF9yZWxvYWRfaW5zbnMpOiBSZWZpbmUgUkVHX0RFQUQgbm90ZXMgdG8gYmUgbW9yZSBhY2N1cmF0ZTsgbWFrZQorCW5vdGVzIGZvciBzZWNvbmRhcnkgcmVsb2Fkcy4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEFib3J0IGZvciBvdXRwdXQgcmVsb2FkcyBmb3IganVtcHM7CisJd2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhpcyBhdCBzb21lIHBvaW50LgorCitGcmkgTWF5IDE3IDIwOjA4OjIyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcHJvdG9pemUuYzogSGFuZGxlIHVsdHJpeCBsaWtlIEJTRC4KKworRnJpIE1heSAxNyAxNTo1Njo0MSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJKiBQYXNzIGxpYnJhcnkgZnVuY3Rpb24gbmFtZSB0byBJTklUX0NVTVVMQVRJVkVfQVJHUy4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogUGFzcyBleHRyYSBhcmcgdG8gSU5JVF9DVU1VTEFUSVZFX0FSR1MuCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogTGlrZXdpc2UuCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KKwkqIHRtLSouaCAoSU5JVF9DVU1VTEFUSVZFX0FSR1MpOiBBY2NlcHQgdGhlIGV4dHJhIGFyZy4KKwkoSU5JVF9DVU1VTEFUSVZFX0lOQ09NSU5HX0FSR1MpOiBMaWtld2lzZSwganVzdCBmb3Igc3ltbWV0cnkuCisKK0ZyaSBNYXkgMTcgMTU6NDE6MjIgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiB0bS1pMzg2djQuaCAoQVNNX09VVFBVVF9DT01NT04pOiBEb24ndCBhdHRlbXB0IGFsaWdubWVudCBvbiBhCisJdGhyZWUgYnl0ZSBib3VuZGFyeS4KKworRnJpIE1heSAxNyAxNToyNToxNiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsLCBhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOiBNYWtlCisJdGhlIGFsaWdubWVudCBpbiBieXRlcy4KKworRnJpIE1heSAxNyAxNDozMTowMCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogT25seSBidWlsZCBhIENPTkRfRVhQUiBpZgorCU5PTk5VTEwgaXMgemVyby4KKwkocmVzb2x2ZXNfdG9fZml4ZWRfdHlwZV9wKTogQ2hlY2sgVFJFRV9IQVNfQ09OU1RSVUNUT1IgZm9yCisJQ0FMTF9FWFBScyBhbmQgSU5ESVJFQ1RfUkVGcy4KKworCSogY3BsdXMtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEFkZCBjYWxsIHRvIGBjb25zdHJ1Y3Rvcl9uYW1lJworCWlmIEJBU0VUWVBFIGNoYW5nZXMuCisJKiBjcGx1cy1pbml0LmMgKGJ1aWxkX25ldyk6IEFkZCBMT09LVVBfTk9OVklSVFVBTCB0byBGTEFHUyBhcmd1bWVudAorCXRvIGBidWlsZF9tZXRob2RfY2FsbCcuICBDb25zdHJ1Y3RvcnMgYXJlIG5ldmVyIHZpcnR1YWwuICBBbHNvLCBzZXQKKwlUUkVFX0hBU19DT05TVFJVQ1RPUiBiaXQgZm9yIHJldHVybiB2YWx1ZSBmcm9tIGBidWlsZF9tZXRob2RfY2FsbCcuCisKK1RodSBNYXkgMTYgMjE6MzY6MTAgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmggKENPTlNUQU5UX1ApOiBOb3cgdHJ1ZSBmb3IgYSBDT05TVF9ET1VCTEUuCisJKiBjb21iaW5lLmMsIGNzZS5jLCBlbWl0LXJ0bC5jLCBleHByLmMsIGludGVncmF0ZS5jLCBsb29wLmM6CisJVXBkYXRlIGZvciBuZXcgbWVhbmluZyBvZiBDT05TVEFOVF9QIHRvIGluY2x1ZGUgQ09OU1RfRE9VQkxFLgorCSogb3B0YWJzLmMsIHJlY29nLmMsIHJlbG9hZC5jLCByZWxvYWQxLmMsIHJ0bC5oLCBydGxhbmFsLmM6CisJTGlrZXdpc2UuCisJKiByb21wLm1kLCByczYwMDAubWQsIG91dC1hbGxpYW50LmMsIG91dC1jb252ZXguYzogTGlrZXdpc2UuCisJKiBvdXQtZ21pY3JvLmMsIG91dC1pMzg2LmMsIG91dC1pODYwLmMsIG91dC1tNjhrLmM6IExpa2V3aXNlLgorCSogb3V0LXNwYXJjLmMsIG91dC1zcHVyLmMsIG91dC10YWhvZS5jOiBMaWtld2lzZS4KKworCSogY29tYmluZS5jIChTVUJTVCwgU1VCU1RfSU5UKTogSWYgSU5UTyBlcXVhbHMgTkVXVkFMLCBkb24ndAorCXJlY29yZCB0aGUgc3Vic3RpdHV0aW9uLgorCSh0cnlfY29tYmluZSwgc3Vic3QsIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uLCBzaW1wbGlmeV9hbmRfY29uc3RfaW50KToKKwlObyBsb25nZXIgbmVlZCBjaGVjayBmb3IgY2hhbmdlcyBiZWZvcmUgdXNpbmcgU1VCU1QgbWFjcm8uCisJKHNpbXBsaWZ5X3NoaWZ0X2NvdW50KTogTGlrZXdpc2UuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgY2FzZSBDT05TVCk6IElmIHdoYXQKKwl3YXMgb3JpZ2luYWxseSBhIGNvbnN0YW50IGJlY29tZXMgc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgY29uc3RhbnQKKwl3aGVuIHBhc3NlZCB0aHJvdWdoIGEgcmVjdXJzaXZlIGNhbGwsIHJldHVybiBpdCB3aXRob3V0IHRoZSBDT05TVC4KKworCSogcnRsLmMgKGNvcHlfbW9zdF9ydHgpOiBOZXcgZnVuY3Rpb24uCisJKiBydGwuaCAoY29weV9tb3N0X3J0eCk6IERlY2xhcmUgaXQuCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xLCBjYXNlIE1FTSk6IElmIGEgTUVNIGNvbnRhaW5zIFZBUiwKKwllbnN1cmUgdGhlIE1FTSBpc24ndCBzaGFyZWQgYnkgY29weWluZyBpdC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBJZiBkb2luZyBNT0QsIHByb2R1Y2UgZGl2aWRlIHJlc3VsdAorCWludG8gdW5pcXVlIHBzZXVkbyBzbyB0aGF0IHdlIG1pZ2h0IENTRSB0aGUgZGl2aXNpb24uCisKK1RodSBNYXkgMTYgMTI6MDE6NDIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBUcnkgZmluZF9kdW1teV9yZWxvYWQgYmVmb3JlIGRlYWQgcmVncy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsKik6IFVzZSBHRVRfTU9ERV9BTElHTk1FTlQuCisJVXNlIENFSUxfUk9VTkQgY29uc2lzdGVudGx5LgorCURvbid0IGZvcmNlIHdvcmQgYWxpZ25tZW50IGV2ZW4gaWYgU1RSSUNUX0FMSUdOTUVOVCAoZXhwZXJpbWVudCkuCisKK1RodSBNYXkgMTYgMTA6MzE6MDQgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBEb24ndCBhYm9ydCBpZiBzdGFydCBsYWJlbCBkb2VzIG5vdAorCWltbWVkaWF0ZWx5IGZvbGxvdyBMT09QX0JFRyBub3RlLiAgVGhpcyBjYW4gaGFwcGVuIGFzIGEgcmVzdWx0IG9mCisJanVtcCB0aHJlYWRpbmcuCisJKiByZW9yZy5jIChtb3N0bHlfdHJ1ZV9qdW1wKTogRWxpbWluYXRlIHJlcGVhdGVkIHRlc3QgaW4gc2Vjb25kIGxvb3AuCisKKwkqIHNjaGVkLmMgKHByaW9yaXR5KTogQWJvcnQgaWYgZmluZCBhIE5PVEUgaW4gYSBncm91cHMgb2YgaW5zbnMgdGhhdAorCW11c3QgYmUgc2NoZWR1bGVkIHRvZ2V0aGVyLgorCShmcmVlX3BlbmRpbmdfbGlzdHMpOiBOZXcgZnVuY3Rpb24uICBNb3ZlcyBldmVyeSAqX0xJU1QgcnR4IG9uIHRoZQorCXBlbmRpbmcgbGlzdHMgdG8gdGhlIGZyZWUgbGlzdC4KKwkoYWRkX2luc25fbWVtX2RlcGVuZGVuY2UpOiBHZXQgYSAqX0xJU1QgZnJvbSB0aGUgZnJlZSBsaXN0IGluc3RlYWQKKwlvZiBjcmVhdGluZyBvbmUgaWYgcG9zc2libGUuCisJKHNjaGVkX2FuYWx5emVfMSk6IERvbid0IG1vdmUgYW4gaW5zbiBhY3Jvc3MgYSBjYWxsIGlmIGl0IHVzZXMgYQorCXJlZ2lzdGVyIHRoYXQgaXMgbm90IGFscmVhZHkgbGl2ZSBhY3Jvc3MgY2FsbHMuIAorCShzY2hlZF9hbmFseXplX2luc24pOiBMaWtld2lzZS4KKwkoc2NoZWRfYW5hbHl6ZV8xKTogV2hlbiBmbHVzaW5nIHRoZSBwZW5kaW5nIGxpc3RzLCBwdXQgdGhlICpfTElTVAorCXJ0eCBvbiB0aGUgZnJlZSBsaXN0LgorCShzY2hlZF9hbmFseXplKTogTGlrZXdpc2UuCisJKHNjaGVkdWxlX2Jsb2NrKTogTGlrZXdpc2UuCisJKHNjaGVkX2FuYWx5emVfMik6IEZvciBhIGNjMCBzZXR0ZXIvdXNlciBwYWlyLCBwdXQgYSBjb3B5IG9mIGFsbAorCWRlcGVuZGVuY2llcyBvbiB0aGUgZmlyc3QgaW5zbiBvbnRvIHRoZSBzZWNvbmQgaW5zbi4KKwkoc2NoZWRfYW5hbHl6ZV9pbnNuKTogTGlrZXdpc2UgZm9yIGNhbGwgc2VxdWVuY2VzLgorCShzY2hlZF9hbmFseXplX2luc24pOiBIYW5kbGUgUkVHX0lOQyBub3RlcyBqdXN0IGxpa2UgU0VUcy4KKwkoc2NoZWRfbm90ZV9zZXQpOiBIYW5kbGUgaGFyZCByZWdpc3RlcnMgc2FtZSBhcyBwc3VlZG8gcmVncy4KKwkoYXR0YWNoX2RlYXRocyk6IExpa2V3aXNlLiAgRG9uJ3QgYWRkIFJFR19ERUFEIG5vdGVzIHRvIHRoZSBmcmFtZQorCXBvaW50ZXIsIGFyZyBwb2ludGVyIG9yIHN0YWNrIHBvaW50ZXIuCisJKHNjaGVkdWxlX2Jsb2NrKTogTGlrZXdpc2UuCisJKHJhbmtfZm9yX3NjaGVkdWxlKTogRG8gbm90IGNoZWNrIHdoZXRoZXIgZWFjaCBpbnNuIG9mIGEgc2VxdWVuY2UKKwl0aGF0IG11c3QgYmUgc2NoZWR1bGVkIHRvZ2V0aGVyIGlzIHJlYWR5LiAgVGhleSB3aWxsIG9ubHkgcmVhY2ggaGVyZQorCWlmIHRoZXkgYXJlIGFsbCBhbHJlYWR5IHJlYWR5LgorCShzY2hlZHVsZV9ibG9jayk6IEFmdGVyIHJlbG9hZCwgZG9uJ3QgbmVlZCB0byBnaXZlIHNwZWNpYWwgdHJlYXRtZW50CisJdG8gaW5zbnMgYXQgZnVuY3Rpb24gc3RhcnQgd2hpY2ggc2V0IHVwIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorCURvbid0IHRyZWF0IHRhaWwgc3BlY2lhbGx5IGlmIGl0IGlzIHBhcnQgb2YgYSBncm91cCB0aGF0IG11c3QgYmUKKwlzY2hlZHVsZWQgdG9nZXRoZXIuCisJV2hlbiBhIGdyb3VwIG9mIGluc3RydWN0aW9ucyBpcyBzY2hlZHVsZWQgdG9nZXRoZXIsIHJ1biB0aGUgbGlmZXRpbWUKKwlhbmFseXNpcyBjb2RlIG9uIGV2ZXJ5IGluc3RydWN0aW9uIGluIHRoZSBncm91cCBmcm9tIGxhc3QgdG8gZmlyc3QuCisJQSBjYWxsX2luc24ga2lsbHMgYWxsIGNhbGxfdXNlZCBhbmQgZ2xvYmFsIHJlZ3MgZXhjZXB0IHRob3NlCisJZXhwbGljaXRseSB1c2VkIGJ5IHRoZSBjYWxsX2luc24uCisJKHNjaGVkdWxlX2luc24pOiBJbml0aWFsaXplIG5ldyB2YXJpYWJsZXMuICBJZiBVU0VfQ19BTExPQ0EsIGZyZWUKKwlhbGxvY2VkIG1lbW9yeSBpbW1lZGlhdGVseSBhZnRlciBlYWNoIHNjaGVkdWxlX2Jsb2NrIGNhbGwsIG5vdCBvbmNlCisJYXQgdGhlIGVuZC4KKworCSogcnRsLmMgKGFkZF9kZXBlbmRlbmNlKTogV2hlbiBhZGRpbmcgYSBkZXBlbmRlbmNlIHRoYXQgcG9pbnRzIHRvIGFuCisJaW5zbiB0aGF0IGlzIHBhcnQgb2YgYSBzZXF1ZW5jZSB0aGF0IG11c3QgYmUgc2NoZWR1bGVkIHRvZ2V0aGVyLAorCW1ha2UgdGhlIGRlcGVuZGVuY2UgcG9pbnQgdG8gdGhlIGxhc3QgaW5zbiBvZiB0aGUgc2VxdWVuY2UgaW5zdGVhZC4KKworV2VkIE1heSAxNSAxMzowODozMiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBJZiB3ZSBoYXZlCisJKGFuZCAoT1AgKGxzaGlmdHJ0IFggWSkgWikgQyksIGZvciBPUCBvZiBJT1IsIFhPUiwgYW5kIE5PVCwgY29tbXV0ZQorCU9QIGFuZCBMU0hJRlRSVCB0byBwdXQgQU5EIGFuZCBMU0hJRlRSVCBhZGphY2VudCB0byB0cnkgdG8gZm9ybQorCVpFUk9fRVhUUkFDVC4KKworCSogY29tYmluZS5jIChzdWJzdCwgZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUsIGdldF9sYXN0X3ZhbHVlX3ZhbGlkYXRlKToKKwlVc2Ugb2JqZWN0J3MgbW9kZSBpbnN0ZWFkIG9mIFZPSURtb2RlIHdoZW4gd2UgbWFrZQorCShjbG9iYmVyIChjb25zdF9pbnQgMCkpIGluIGNhc2Ugc29tZW9uZSB1c2VzIHRoZSBtb2RlIGZvciBzaWduaWZpY2FudAorCWJpdHMuCisJKiBydGxhbmFsLmMgKHNpZGVfZWZmZWN0c19wKTogUmVqZWN0IG5vbi1WT0lEbW9kZSBDTE9CQkVScy4KKworCSogcnRsYW5hbC5jIChyZWdfc2V0X3BfMSk6IFJlbW92ZSB0ZXN0IGZvciBgcmVnX3NldF9yZWcnIGJlaW5nIE1FTS4KKwkocmVnX3NldF9wKTogQWJvcnQgaWYgcGFzc2VkIGEgTUVNLgorCisJKiB0b3BsZXYuYyAoc3RyaXBfb2ZmX2VuZGluZyk6IFN0cmlwIHRyYWlsaW5nICIuZiIuCisKK1dlZCBNYXkgMTUgMTI6NTQ6MTggMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByXzEpOiBJZiB0aGUgVFJFRV9UWVBFIG9mIHRoZQorCXJlY3Vyc2l2ZSByZXN1bHQgaXMgYW4gQVJSQVlfVFlQRSwgY2hhbmdlIGl0IHRvIHZvaWRfdHlwZV9ub2RlIHNvCisJYnVpbGRfY29tcG91bmRfZXhwciBkb2Vzbid0IGxvc2Ugd2hlbiBjYWxsaW5nIGRlZmF1bHRfY29udmVyc2lvbi4KKworCSogY3BsdXMtdHJlZS5oIChsYW5nX3R5cGUpOiBSZW1vdmUgQVNfTElTVCBmaWVsZCBmcm9tIGxhbmdfdHlwZS4KKwlVc2UgVFlQRV9NQVhfVkFMVUUgZmllbGQgb2YgdHlwZSBpbnN0ZWFkLgorCShUUkVFX1JFRkVSRU5DRV9FWFBSKTogTmV3IG1hY3JvLgorCisJKiBjcGx1cy1wYXJzZS55IChMQyk6IElmIHdlIGFyZSBub3QgaW4gdGVtcG9yYXJ5IGFsbG9jYXRpb24sIGNhbGwKKwlwZXJtYW5lbnRfYWxsb2NhdGlvbi4gIFRoaXMgZnJlZXMgdXAgYW55IFBBUk1fREVDTCBub2RlcyB0aGF0IHdlcmUKKwlhbGxvY2F0ZWQgc2luY2Ugd2UgcHJvY2Vzc2VkIGFuIGlubGluZSBmdW5jdGlvbi4gIE5PVEU6IHdlIHN0aWxsCisJaGF2ZSB0byBjbGVhbiB1cCB0aGVzZSBwYXJtcyBmcm9tIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkaWQgbm90IGdvCisJaW5saW5lLgorCisJKiBjcGx1cy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBTaW5jZSB3ZSBubyBsb25nZXIgcHVzaCBhbiBleHRyYQorCWJpbmRpbmcgbGV2ZWwgaWYgISBQQVJNU19IQVZFX0NMRUFOVVBTLCB0ZXN0IENMRUFOVVBfTEFCRUwgdG8gZmlndXJlCisJb3V0IGhvdyBmYXIgdXAgdGhlIGJpbmRpbmcgY291bnRvdXJzIHdlIG11c3QgbG9vay4KKwkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJZiBGTEFHX05PX0lOTElORSBpcyBub256ZXJvLCBzZXQKKwlGTEFHX0RFRkFVTFRfSU5MSU5FIHRvIHplcm8uCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IENvcHkgVFlQRV9NSU5fVkFMVUUgYW5kCisJVFlQRV9NQVhfVkFMVUUuICBUaGVzZSBhY3R1YWxseSBob2xkIEMrKy1yZWxhdGVkIGRhdGEgdGhhdCdzIG1vdmVkCisJdXAgZnJvbSB0aGUgbGFuZ190eXBlIGRhdGEgc3RydWN0dXJlLgorCisJKiBjcGx1cy0qLmM6IENoYW5nZSBSRUZFUkVOQ0VfRVhQUiB0byBDT05WRVJUX0VYUFIuICBTZXQKKwlUUkVFX1JFRkVSRU5DRV9FWFBSIGJpdCB0byBpbmRpY2F0ZSBhIENPTlZFUlRfRVhQUiB0aGF0J3MgcmVhbGx5IHRoZQorCWFkZHJlc3Mgb2YgYSBDKysgcmVmZXJlbmNlIGV4cHJlc3Npb24uCisKK1dlZCBNYXkgMTUgMTI6MzA6MjYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0bS1zcGFyYy5oIChGSVhFRF9SRUdJU1RFUlMpOiBSZWdpc3RlciAwIGlzIG5vdCBmaXhlZDsgaXQgaXMgdXNlZAorCWZvciB0aGUgY29uZGl0aW9uIGNvZGUsIG5vdCB0byByZXByZXNlbnQgdGhlIGZpeGVkICVnMC4KKworVHVlIE1heSAxNCAxODo1OTowNiAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGV4cGxvdy5jIChmaW5kX25leHRfcmVmKTogU3RhcnQgc2VhcmNoIGF0IGZpcnN0IGluc24gYWZ0ZXIgSU5TTi4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogVXBkYXRlIHRoZSB0aHJlZSBzaW1wbGljYXRpb25zIHRoYXQgc3RhcnQKKwl3aXRoIHRoZSAiaWYgKC4uLikgeCA9IDE7IGVsc2Ugey4uLn0gaWYgKHgpIC4uLiIgY2FzZSwgc28gdGhhdCB3aGVuCisJSEFWRV9jYzAgaXMgbm90IGRlZmluZWQsIHRoZXkgZG8gbm90IGFjY2VwdCBUU1QgaW5zbnMgKHdoaWNoIGNvdWxkCisJanVzdCBiZSBhIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyIG1vdmUpLiAgVGhleSBzaG91bGQgb25seSBhY2NlcHQgaW5zbnMKKwl3aXRoIHRoZSBDT01QQVJFIG9wZXJhdG9yLgorCitUdWUgTWF5IDE0IDE0OjUxOjMzIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6IERvbid0IGFib3J0IHdoZW4gY29tcGFyaW5nCisJdHdvIENPTlNUX0RPVUJMRSB2YWx1ZXMuCisKK1R1ZSBNYXkgMTQgMTE6MzU6NDcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBGaXggdHlwbyBpbiBuYW1lIG9mIGF0dHJpYnV0ZS4KKwlJdCBzaG91bGQgYmUgYGFsaWduZWQnLiAgQWxzbyBkb24ndCBjcmFzaCBvbiB1bmtub3duIGF0dHJpYnV0ZS4KKworCSogZXhwbWVkLmMgKGluaXRfZXhwbWVkKTogTWFrZSBhIHNlcGFyYXRlIG9iamVjdCB0byBmcmVlIGJhY2sgdG8uCisKKwkqIGhhcmQtcmVnLXNldC5oIChIT1NUX0JJVFNfUEVSX0xPTkdfTE9ORyk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEltcGxlbWVudCAtZ2R3YXJmLgorCitUdWUgTWF5IDE0IDA2OjMyOjQ4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBEb24ndCBtYWtlIFJFR19ERUFEIG5vdGVzIGZvciBmaXhlZCByZWdzLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogQ29udmVydCAobm90IChhc2hpZnQgQyBYKSkgdG8gKG9yIChyb3RhdGUgLi4pKQorCWFuZCBzaW1pbGFybHkgZm9yIChub3QgKGxzaGlmdHJ0IEMgWCkpLgorCShtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQpOiBNYWtlIGNvcnJlc3BvbmRpbmcgY2hhbmdlIGluIGhvdyB3ZSByZWNvZ25pemUKKwliaXRmaWVsZCBhc3NpZ25tZW50IG9mIHNpbmdsZSBiaXQgdG8gemVyby4KKworCSogY29tYmluZS5jIChtZXJnZV9vdXRlcl9vcHMpOiBOZXcgZnVuY3Rpb24uCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogVXNlIG1lcmdlX291dGVyX29wcyB0byBnZW5lcmFsaXplIGFuZAorCXNpbXBsaWZ5IGhhbmRsaW5nIG9mIG91dGVyX29wcy4KKwlUcnkgdXNpbmcgZGlzdHJpYnV0aXZlIGxhdyBmb2xsb3dlZCBieSBpbnZlcnQgZGlzdHJpYnV0aXZlIGxhdworCXRvIHNpbXBsaWZ5IGNvbWJpbmF0aW9ucyBvZiBsb2dpY2FsIG9wZXJhdGlvbnMgYW5kIHNoaWZ0cy4KKworCSogZW1pdC1ydGwuYyAoZ2VuX2hpZ2hwYXJ0KTogQ29ycmVjdCBjb25kaXRpb25hbCB0aGF0IHNheXMgd2hlbiB3ZQorCWNhbiBnZXQgdGhlIGJpdHMgb2YgYSBERm1vZGUgb2JqZWN0OyBjb3B5IGZyb20gZ2VuX2xvd3BhcnQuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIE1VTFQpOiBTaW1wbGlmeSB6ZXJvIGNhc2UuCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgRElWKTogSW4gMC94LCByZXR1cm4gemVybyBpbiBwcm9wZXIKKwltb2RlLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBDYW4gb25seSBleHRlbmQgY29tcGFyaXNvbgorCXRvIHdpZGVyIG1vZGUgaWYgZXF1YWxpdHkgY29tcGFyaXNvbiBvciB0ZXN0IG9mIHNpZ24gYml0LgorCitUdWUgTWF5IDE0IDAzOjI2OjM2IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXRyZWUuaCAobGFuZ190eXBlKTogQ2hhbmdlIHRvIHVzZSBUUkVFX1ZFQyB0byBob2xkIGJhc2V0eXBlCisJaW5mby4KKwkoQ0xBU1NUWVBFX05fQkFTRUNMQVNTRVMsIENMQVNTVFlQRV9CQVNFQ0xBU1MpOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgorCUJhc2VjbGFzc2VzIGFyZSBub3cgY291bnRlZCBbMC4ubikgaW5zdGVhZCBvZiBbMS4ubl0uCisJKENMQVNTVFlQRV9CQVNFVFlQRUNMQVNTRVMpOiBEZWxldGVkLgorCSogY3BsdXMtKi5jICh2YXJpb3VzIHBsYWNlcyk6IENoYW5nZSBjb2RlIHRvIHdvcmsgd2l0aCBuZXcKKwlyZXByZXNlbnRhdGlvbiBmb3IgYmFzZXR5cGVzLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEhhbmRsZSBgLWdkd2FyZicgYXMgYSBkZWJ1ZyBvcHRpb24uCisKKwkqIGNzZS5jIChpbnNlcnQpOiBUcmVhdCBwc2V1ZG9zIG1hcmtlZCBSVFhfVU5DSEFOR0lOR19QIGFzIGJlaW5nCisJY29uc3QuCisKK01vbiBNYXkgMTMgMjI6NDQ6MTggMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBvay5jeWdudXMuY29tKQorCisJKiBtaXBzLm1kOiBJbiB0aGUgZGl2L21vZCBwZWVwaG9sZXMsIGRvbid0IGFwcGx5IHRoZSBwZWVwaG9sZSBpZiB0aGUKKwlmaXJzdCBvcGVyYXRpb24gb3ZlcndyaXRlcyBvbmUgb2YgaXRzIHR3byBvcGVyYW5kcy4KKworTW9uIE1heSAxMyAxMjoxNDo1MSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKToKKwlTZXQgdm9sYXRpbGVfcCB3aGlsZSBjaGVja2luZyBwcmVkaWNhdGVzLgorCSogcmVjb2cuaCAodm9sYXRpbGVfcCk6IERlY2xhcmUgaXQuCisJKiBleHBsb3cuYyAoZm9yY2Vfbm90X21lbSk6IERvIG5vdGhpbmcgd2l0aCBCTEttb2RlLgorCisJKiBTWVNDQUxMUy5jICh1X2ludCk6IERvbid0IGRlZmluZSBvbiBER1VYLS1hbHJlYWR5IGRlZmluZWQuCisKKwkqIG02OGsubWQgKHplcm9fZXh0ZW5kKik6IERvbid0IG1ha2UgdGhlIHN1YnJlZyBpbiB0aGUgdGVtcGxhdGUuCisJTWFrZSBpdCBleHBsaWNpdGx5LCBhbmQgaGFuZGxlIHN1YnJlZ3MgYXMgb3BlcmFuZCAwLgorCisJKiB0bS1jb252ZXguaCAoTU9ERVNfVElFQUJMRV9QKTogRml4IHR5cG9zLgorCisJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFRvIGNoZWNrIGZvciBhIGxvb3Agd2l0aCBhIGBicmVhaycsIHVzZQorCWxvb3BfbnVtYmVyX2V4aXRfbGFiZWwsIG5vdCB0aGUgdWlkX2x1aWQgb2YgZWFjaCBsYWJlbCwgc2luY2UgbG9vcAorCXVucm9sbGluZyBtYXkgaGF2ZSBjcmVhdGVkIG5ldyBsYWJlbHMgd2l0aCBubyB1aWRfbHVpZC4KKworCSogZXhwci5jIChwdXNoX2Jsb2NrKTogRml4ZWQgdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworTW9uIE1heSAxMyAxMjowNzoyNSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogSWYgd2UgY2FuJ3QgY2hhbmdlIGNvbXBhcmlzb24gY29kZSwgc2VlIGlmCisJd2UgY2FuIGluc3RlYWQgc3Vycm91bmQgb3VyIG9wZXJhdGlvbiB3aXRoIGFuIFhPUi4KKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6CisJRW5zdXJlIHNoaWZ0IGNvdW50cyBhcmUgbm9uLW5lZ2F0aXZlIGFuZCBpbiByYW5nZSBiZWZvcmUgdXNpbmcgdGhlbQorCXRvIHBlcmZvcm0gc2hpZnRzLgorCShzaW1wbGlmeV9jb21wYXJpc29uKTogTGlrZXdpc2UuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBTZWUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IG1lcmdlZCBhCisJY29tcGFyZSBhbmQgYXJpdGhtZXRpYyBvcGVyYXRpb24uICBJZiBzbyB0cnkgdG8gdGFrZSBpdCBhcGFydCB0bworCWFsbG93IGZ1cnRoZXIgY29tYmluZXMgKHN1Y2ggYXMgbWFraW5nIGEgYnJhbmNoLWFuZC1kZWNyZW1lbnQpLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgbWFrZSBWT0lEbW9kZSByZWdpc3RlciBpZiBvdXIgc3BsaXQKKwlwb2ludCBpcyBhIGNvbnN0YW50LgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogVXNlIENPTUJJTkVfUlRYX0VRVUFMX1AgdG8gc2VlIGlmIFNFVF9ERVNUCisJaXMgb3VyIHJlZ2lzdGVyOyB0d28gaGFyZCByZWdzIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHJ0eC4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEdlbmVyYWxpemUgYXNzb2NpYXRpdmUgbGF3IGhhbmRsaW5nIHRvCisJY2FzZXMgbm90IGludm9sdmluZyBjb25zdGFudHMuCisKKwkqIGNvbWJpbmUuYyAoZXhwYW5kX2NvbXBvdW5kX29wZXJhdGlvbik6IElmIHdlIHdvdWxkIHJldHVybiBhCisJKGNsb2JiZXIgKGNvbnN0X2ludCAwKSksIHJldHVybiB3aGF0IHdlIHdlcmUgZ2l2ZW4uCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBDbGVhbiB1cCBieSByZW1vdmluZyBmYWxsdGhyb3VnaC4KKworTW9uIE1heSAxMyAxMDoyNjowMCAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKGFsbCBjYWxscyB0byBvdXRwdXRfbW92ZV9kb3VibGUpOiBjYWxsIHJldHVybgorCXZhbHVlIHRvIGF2b2lkIHNwdXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzLgorCUFsbG93IFJFRyBpbiBhbGwgYWx0ZXJuYXRpdmVzIG9mIG9wZXJhbmQgMCB3aGVyZSBwb3NzaWJsZS4KKwlSZW1vdmUgcGF0dGVybnMgdG8gcmVjb2duaXplIGluY3JlbWVudC9kZWNyZW1lbnQuCisJKGFkZHNpMywgYWRkaGkzLCBhZGRxaTMpOiBEbyB0aGlzIGluIGhlcmUgaW5zdGVhZC4KKwkoZmxvYXRkaWRmMik6IE5ldyBwYXR0ZXJuLgorCShhZGRkaTMsIHN1YmRpMywgbmVnZGkyKTogTmV3IHBhdHRlcm5zLgorCSh1bXVsc2kzLCB1bXVsaGkzKTogUmVtb3ZlIG9ic29sZXRlIFVNVUxUIHBhdHRlcm5zLgorCShkaXZNMywgdWRpdk0zLCBkaXZtb2RNNCwgdWRpdm1vZE00KTogVXNlICJyIiBjb25zdHJhaW50IGluc3RlYWQKKwlvZiAieCIgb3IgImFiYyIuCisJKHNxcnRzZjIsIHNxcnRkZjIpOiBOZXcgcGF0dGVybnMuCisJKGFzaGxkaTMsIGFzaHJkaTMsIGxzaGxkaTMsIGxzaHJkaTMpOiBOZXcgcGF0dGVybnMKKwkoQWxsIHNoaWZ0IGFuZCByb3RhdGUgcGF0dGVybnMpOiBEb24ndCB1c2UgcmVnIG5hbWUgZXhwbGljaXRseSBpbgorCW91dHB1dCBzdHJpbmc6IHVzZSAlTiBvcGVyYW5kIHJlZmVyZW5jZS4KKwkoYXNobE0zLCBsc2hsTTMpOiBVc2UgYGFkZCcgaW5zdGVhZCBvZiBgc2hsJy9gc2FsJyBpZiBwb3NzaWJsZS4KKwkoaW5zdik6IEZpeCBvdXRwdXQgY29uc3RyYWludC4gIENsYXJpZnkgc291cmNlLiAgRGlzYWJsZSBmb3Igbm93IC0KKwltYWtlcyB3b3JzZSBjb2RlLgorCShTSW1vZGUgYml0IHRlc3QsIGFsbCBTY29uZCBwYXR0ZXJucyk6IEFsbG93IE1FTSBvcGVyYW5kcyB0b28uCisJKHNlcSwgc25lKTogSGFuZGxlIENDX1pfSU5fTk9UX0MuCisJKGp1bXAsIGluZGlyZWN0X2p1bXAsIHRhYmxlanVtcCk6IEFsaWduIGNvZGUgb24gd29yZCBib3VuZGFyeQorCWFmdGVyIHVuY29uZGl0aW9uYWwganVtcHMuCisJKGBsb29wJyBwYXR0ZXJucyk6IERlbGV0ZSAtIHdpbGwgbmV2ZXIgYmUgdXNlZnVsIG9uIGkzODYuCisJKGNhbGxfcG9wLCBjYWxsX3ZhbHVlX3BvcCk6IE5ldyBwYXR0ZXJucy4KKwkocmV0dXJuKTogTmV3IHBhdHRlcm46IERvIGByZXR1cm4nIGlmIHNpbXBsZSBlcGlsb2d1ZS4gIEJ1dCBvbmx5IGlmCisJdGhlIHJlYWwgZnVuY3Rpb24gZXBpbG9ndWUgaXNuJ3QgbmV4dC4KKwkobW92c3Ryc2kpOiBEbyB3b3JkIG1vdmVzLCBub3QganVzdCBieXRlcywgaWYgY291bnQgaXMgdW5rbm93bi4KKwkoZmZzTTIpOiBOZXcgcGF0dGVybnMuCisKKwkqIG91dC1pMzg2LmMgKEZQX1RPUCwgQVRfU1AsIFJFVCwgUkVUQ09NLCBQT1BfT05FX0ZQLAorCUZQX0NBTEwxLCBGUF9DQUxMKTogTW92ZSB0byB0bS1pMzg2LmggZm9yIHVzZSBieSBpMzg2Lm1kLgorCShvdXRwdXRfbW92ZiwgZnBfY2FsbF9pbnRlcm5hbCwgb3V0cHV0X2ZpeF90cnVuYywgc3BsaXRfZGkpOgorCU5vIGxvbmdlciBzdGF0aWMgLSBjYWxsZWQgZnJvbSBpMzg2Lm1kLgorCSh2aWFfbWVtb3J5KTogRmluaXNoIHJldHVybiB2YWx1ZSBjaGFuZ2UuCisJKG91dHB1dF9tb3ZlX2NvbnN0X2RvdWJsZSk6IERlbGV0ZSB1bnVzZWQgZnVuY3Rpb24uCisJKHNpbXBsZV8zODZfZXBpbG9ndWUpOiBOZXcgcHJlZGljYXRlLgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IEFsbG9jYXRlIGZyYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QKKwl0aGVyZSBpcyBhIGZyYW1lIHBvaW50ZXIuCisJVXNlIG91dHB1dF9hc21faW5zbiBpbnN0ZWFkIG9mIGZwcmludGYgdG8gcHVzaCByZWdpc3RlcnMuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisJSWYgdGhlcmUgaXMgYSBmcmFtZSBwb2ludGVyLCBkb24ndCBuZWNlc3NhcmlseSBmaXggJWVzcCBqdXN0IHRvCisJcG9wIGEgcmVnIC0gdXNlIG9mZnNldCBmcm9tIGZyYW1lIHBvaW50ZXIuCisJRml4IC1mb21pdC1mcmFtZS1wb2ludGVyIHN1cHBvcnQuCisJRml4IFJFVFVSTl9QT1BTX0FSR1MgY2FzZSB3aGVyZSBhcmdzID4gMzJLIGJ5dGVzLgorCShwcmludF9vcGVyYW5kKTogQSBMQUJFTF9SRUYgZ2V0cyBhbiBPRkZTRVRfUFJFRklYIHRvby4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogJWVzcCBjYW4gb25seSBiZSBiYXNlIHJlZywgbmV2ZXIgaW5kZXguCisJKHNwbGl0X2RpKTogTmV3IGZ1bmN0aW9uLgorCisJKiB0bS1pMzg2Lmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9ic29sZXRlIHRtLWNvbXBhcS5oIGZpbGUuCisJKFRBUkdFVF80ODYpOiBOZXcgZmxhZy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogTmV3IG9wdGlvbnMgLW00ODYsIC1tbm80ODYsIC1tMzg2LgorCShTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTmV3IG1hY3JvLgorCShBU01fT1VUUFVUX0xPT1BfQUxJR04pOiBOZXcgbWFjcm8uCisJKGFsbCByZWcgbWFjcm9zLCBBUkdfUE9JTlRFUl9SRUdOVU0pOiBDcmVhdGUgYXJndW1lbnQgcG9pbnRlciwKKwl0byBiZSBlbGltaW5hdGVkIGluIGZhdm9yIG9mICVlc3Agb3IgJWVicC4KKwkoSEFSRF9SRUdOT19OUkVHUywgUkVHTk9fUkVHX0NMQVNTKTogVXNlIEZQX1JFR05PX1AuCisJKFJFR0lTVEVSX01PVkVfQ09TVFMpOiBJdCBpcyBleHBlbnNpdmUgdG8gbW92ZSBiZXR3ZWVuIGludGVnZXIgYW5kCisJZmxvYXQgcmVnaXN0ZXJzLgorCShGUF9SRUdOT19QKTogRGV0ZWN0IG9ubHkgdGhlIEZQIHJlZ3MuCisJKGFsbCBjbGFzcyBtYWNyb3MpOiBEZWxldGUgb2Jzb2xldGUgY2xhc3NlcyBBQkNfUkVHUyAmIEFCQ0lfUkVHUy4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogQWRkIGBTJyBmb3IgU0lSRUcsIHJlbW92ZSBgeCcgZm9yIEFCQ0lfUkVHUy4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQWRkIGBKJyBmb3IgREltb2RlIHNoaWZ0cy4KKwkoRklSU1RfUEFSTV9PRkZTRVQpOiBPZmZzZXQgbm93IHplcm8uCisJKEVMSU1JTkFCTEVfUkVHUywgQ0FOX0VMSU1JTkFURSwgSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOgorCVVzZSBnZW5lcmFsaXplZCBzY2hlbWUgdG8gZWxpbWluYXRlIGZyYW1lIGFuZCBhcmcgcG9pbnRlcnMuCisJKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBEZWxldGUuCisJKFJFR19PS19GT1JfQkFTRV9QKTogYWxsb3cgdmlydHVhbCBhcmcgcG9pbnRlci4KKwkoRlBfVE9QLCBBVF9TUCwgUkVULCBSRVRDT00sIFBPUF9PTkVfRlAsIEZQX0NBTEwxLCBGUF9DQUxMKToKKwlNb3ZlZCBoZXJlIGZyb20gb3V0LWkzODYuYyBmb3IgdXNlIGJ5IGkzODYubWQuCisKKwkqIHRtLWNvbXBhcS5oOiBEZWxldGUgb2Jzb2xldGUgZmlsZS4KKworU3VuIE1heSAxMiAxODozODo0MSAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKHByaW50X2JpbmRpbmdfbGV2ZWwsIHByaW50X2JpbmRpbmdfc3RhY2ssCisJcHJpbnRfb3RoZXJfYmluZGluZ19zdGFjayk6IE5ldyBkZWJ1Z2dpbmcgcm91dGluZXM7IGR1bXAgb25lIG9yCisJbW9yZSBiaW5kaW5nIGxldmVscyB0byBzdGRlcnIuCisKKwkqIGNwbHVzLWRlY2wuYyAocHVzaF90b190b3BfbGV2ZWwpOiBOZXcgcm91dGluZTsgc2F2ZXMgY29waWVzIG9mCisJYWxsIGNsYXNzIGFuZCBsb2NhbCBiaW5kaW5ncywgYW5kIHNvbWUgb3RoZXIgc3RhdGUsIGFuZCBjbGVhcnMgdGhlCisJcmVhbCB2YWx1ZXMsIHRvIGVmZmVjdGl2ZWx5IG1vdmUgdG8gZ2xvYmFsIHNjb3BlLgorCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBSZXN0b3JlIHRoZSBzYXZlZCBzdGF0ZS4KKworCSogY3BsdXMtZGVjbC5jIChhZGp1c3RfdHlwZV92YWx1ZSk6IE5vIGxvbmdlciBzdGF0aWMuICBBYm9ydCBpZgorCWN1cnJlbnRfYmluZGluZ19sZXZlbCBpcyBjbGFzcyBiaW5kaW5nIGxldmVsOyBuZWVkIHRvIGludmVzdGlnYXRlCisJdGhhdCBzaXR1YXRpb24gZnVydGhlci4KKworCSogY3BsdXMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBDaGVjayB0aGF0IHRoZSBiaW5kaW5nIGxldmVsIGJlaW5nCisJcG9wcGVkIHJlYWxseSBpcyBhIGZ1bmN0aW9uLXBhcmFtZXRlciBiaW5kaW5nIGxldmVsLgorCisJKiBjcGx1cy10cmVlLmggKERFU1RSVUNUT1JfREVDTF9QUkVGSVgpOiBSZXBsYWNlcworCURFU1RSVUNUT1JfREVDTF9GT1JNQVQ7IHVzZWQgYXMgYSBwcmVmaXggYmVmb3JlIHRoZSBjbGFzcyBuYW1lLgorCSogY3BsdXMtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBVc2UgaXQsIGFuZCBjYWxsIGJ1aWxkX292ZXJsb2FkX25hbWUKKwlyYXRoZXIgdGhhbiBqdXN0IGNvcHlpbmcgdGhlIGNsYXNzIG5hbWUuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChmbmRlY2xfYXNfc3RyaW5nKTogVXNlIFRSRUVfVFlQRSByYXRoZXIgdGhhbgorCWluZGlyZWN0aW5nIHRocm91Z2ggdHlwZSBuYW1lIGFuZCB0aGUgaWRlbnRpZmllcidzIGFzc29jaWF0ZWQgdHlwZSwKKwlzaW5jZSB0aGUgbGF0dGVyIG1heSBoYXZlIGNoYW5nZWQuCisJKGJ1aWxkX25lc3RlZF9uYW1lKTogTmV3IGFyZ3VtZW50LCB0ZXh0X2VuZDsgY2FsbGVycyBjaGFuZ2VkLiAgQ2FsbAorCWJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIgcmF0aGVyIHRoYW4gY29weWluZyBjbGFzcyBuYW1lLgorCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IFN0cmlwIG5vbi1sdmFsdWUgbm9kZXMgZm9yIGFsbCBhcmd1bWVudHMuCisJRml4ZWQgdXAgdGhlIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIERJbW9kZSB2YWx1ZXMuCisJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBOZXcgZnVuY3Rpb24uICBDb3B5IGNsYXNzIG5hbWUgKHdpdGgKKwlsZW5ndGgpIGlmIG5vbi10ZW1wbGF0ZSwgb3IgYnVpbGQgYSBuYW1lIGZyb20gdGVtcGxhdGUgcGFyYW1ldGVycy4KKwkoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IENhbGwgYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllciBmb3IgY2xhc3MKKwluYW1lcy4KKworCSogY3BsdXMtcGFyc2UueTogQWRkZWQgY29tbWVudCBhYm91dCB1c2Ugb2YgJCQgZm9yICQxLgorCSh0ZW1wbGF0ZV90eXBlX25hbWUpOiBSZW1vdmVkIHVzZWxlc3MgcHJlY2VkZW5jZSBzcGVjaWZpY2lhdGlvbi4KKwkodGVtcGxhdGVfYXJnX2xpc3QpOiBXcmFwIFRSRUVfTElTVCBub2RlcyBhcm91bmQgYWxsIGFyZ3VtZW50cyBpbgorCXRoZSBsaXN0LgorCSh0ZW1wbGF0ZV9hcmcpOiBDYWxsIGdyb2t0eXBlbmFtZSBvbiB0eXBlIG5hbWVzLiAgRm9yIGV4cHJlc3Npb25zLAorCXNwZWNpZnkgIlVOQVJZIiBwcmVjZWRlbmNlLgorCShQUkVfUEFSU0VEX0NMQVNTX0RFQ0wgaGFuZGxpbmcpOiBQdXQgYSBjb3B5IG9mIHRoZSBuZXcgY2xhc3MgZGVjbAorCWludG8gZ2xvYmFsIHNjb3BlLCB0byBhdm9pZCByZWN1cnNpdmUgZXhwYW5zaW9uLCBzaW5jZSB3ZSBzdGFydCBpbiBhCisJbm9uLWdsb2JhbCBzY29wZSBzZXQgdXAgZm9yIHRoZSBwYXJhbWV0ZXJzLgorCisJKiBjcGx1cy1wdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBOZXcgZnVuY3Rpb24uICBDb252ZXJ0cworCXRlbXBsYXRlIGFyZ3VtZW50cyB0byBhcHByb3ByaWF0ZSB0eXBlcywgcmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nCisJcmVzdWx0cy4KKwkobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogUmVtb3ZlZCBucGFybXMgYXJndW1lbnQuCisJQ2hhbmdlZCB0byBkZWFsIHdpdGggYXJnbGlzdCBhcyB2ZWN0b3IuICBObyBsb25nZXIgY2FsbAorCWdyb2t0eXBlbmFtZS4gIFNvbWUgaW5pdGlhbCBjb2RlIGFkZGVkIGZvciBQQVJNX0RFQ0wgKG5vbi10eXBlKQorCXBhcmFtZXRlcnM7IHdvcmsgbm90IGNvbXBsZXRlZC4KKwkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogQ2FsbCBjb2VyY2VfdGVtcGxhdGVfcGFybXMuICBSZW1vdmVkIHNvbWUKKwl1bnVzZWQgY29kZS4KKwkocHVzaF90ZW1wbGF0ZV9kZWNscywgcG9wX3RlbXBsYXRlX2RlY2xzKTogRml4ZWQgdG8gZGVhbCB3aXRoCisJYXJnbGlzdCBhcyB2ZWN0b3IuICBNb3JlIGNvZGUgZm9yIG5vbi10eXBlIHBhcmFtZXRlcnMuCisJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogUHVzaCB0byB0b3AgYmluZGluZyBsZXZlbCBiZWZvcmUgcHVzaGluZyBhbnkKKwlkZWNsYXJhdGlvbnMuCisJKGVuZF90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogUG9wIGZyb20gdG9wIGxldmVsLCB0aGVuIHB1c2ggdGhlIG5ldworCWRlY2wgYXQgdG9wIGxldmVsLgorCisJKiBjcGx1cy10cmVlLmggKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIpOiBSZW5hbWVkIGZpZWxkICJ0ZW1wbGF0ZSIgdG8KKwkiY2xhc3NfdGVtcGxhdGVfaW5mbyI7IGFjY2Vzc29yIG1hY3JvcyBjaGFuZ2VkLgorCisJKiBjcGx1cy1wdC5jIChzdHJ1Y3QgdGVtcGxhdGVfaW5mbyk6IFJlbmFtZWQgZnJvbSAidGVtcGxhdGUiLgorCVJlbW92ZWQgdW51c2VkIGZpZWxkcy4KKworU3VuIE1heSAxMiAxNzozODo0NiAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IEZpeCB0eXBvOiBoYWQgYD09JyBmb3IgYD0nLgorCitTdW4gTWF5IDEyIDE3OjA1OjA3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2VuYXR0cnRhYi5jIChnZW5fYXR0cik6IENsZWFyIGhhc19hc21faW5zbiBmaWVsZCBpbiBuZXcgb2JqZWN0LgorCitTdW4gTWF5IDEyIDA0OjIxOjUyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGhhcmQtcmVnLXNldC5oIChIQVJEX0NPTlNUKTogTmV3IG1hY3JvLiAgQ29udmVydHMgaW50ZWdlcgorCWNvbnN0YW50cyB0byBhcHByb3ByaWF0ZSB0eXBlIGZvciB1c2Ugd2l0aCBIQVJEX1JFR19TRVQuCisJKHtTRVQsQ0xFQVIsVEVTVH1fSEFSRF9SRUdfQklUKTogVXNlIHRoaXMgbWFjcm8gd2hlcmUgYXBwcm9wcmlhdGUuCisJKEdPX0lGX0hBUkRfUkVHX1NVQlNFVCk6IERpdHRvLgorCShIQVJEX1JFR19TRVQpOiBBZGQgbmV3IGNhc2UgaWYgRklSU1RfUFNFVURPX1JFR0lTVEVSIDw9CisJSE9TVF9CSVRTX1BFUl9MT05HTE9ORy4KKwkqIGdsb2JhbC1hbGxvYy5jOiBQYXNzIEhBUkRfQ09OU1QgKDApIGluc3RlYWQgb2YgMCB0byBmdW5jdGlvbnMKKwl3aGljaCBhcmUgbG9va2luZyBmb3IgYSBIQVJEX1JFR19TRVQgYXJndW1lbnQuCisJKiByZW9yZy5jIChyZXNvdXJjZV9jb25mbGljdHNfcCk6IENoYW5nZSBjb21wYXJpc29uIG9mIEhBUkRfUkVHX1NFVAorCXZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdCBIQVJEX0NPTlNULgorCisJKiBhbGwgeG0tKi5oIGZpbGVzOiBBZGRlZCBIT1NUX0JJVFNfUEVSX0xPTkdMT05HIHdoZXJlCisJSE9TVF9CSVRTX1BFUl9MT05HIHdhcyBkZWZpbmVkLgorCSogdG0tc3BhcmMuaCAoUkVHX0NMQVNTX0NPTlRFTlRTKTogRml4ZWQgaW4gY2FzZSB3ZSdyZSB1c2luZyBsb25nCisJbG9uZyBIQVJEX1JFR19TRVRzLgorCisJKiB0b3BsZXYuYyAobWFpbik6IHN1cHBvcnQgLWdkd2FyZiBzd2l0Y2guCisKKwkqIGxvbmdsb25nLmggKHVtdWxzaWRpMyk6IFNQQVJDIC51bXVsIHJvdXRpbmUgcmV0dXJucyB0aGUgdmFsdWUgaW4KKwlXT1JEX0xJVFRMRV9FTkRJQU4gZm9ybSwgc28gc3dhcC4gIE90aGVyIHdvcmQtZW5kaWFuIGNoYW5nZXMgZm9yCisJaW5saW5lIG11bCByb3V0aW5lcy4KKworCSogZ251bGliMi5jIChfX2RpdmRpMyk6IElmIEMgaXMgbm9uemVybywgbmVnYXRlIHdob2xlIGRpdmlzaW9uCisJaW5zdGVhZCBvZiByZXR1cm5pbmcgbmVnYXRpb24gb2YgcXVvdGllbnQuCisKK1NhdCBNYXkgMTEgMjA6MDY6MDggMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IGtyaXNobmEuc2ljcy5zZSkKKworCSogZXhwbWVkLmMgKG91dHNpZGUgb2YgZnVuY3Rpb25zKTogTmV3IHZhcnM6IGxlYV9jb3N0LCBsZWFfbWF4X211bC4KKwkoaW5pdF9leHBtZWQpOiBJbml0aWFsaXplIGxlYV9jb3N0IGFuZCBsZWFfbWF4X211bC4gCisJKHN5bnRoX211bHQpOiBVc2UgdGhlbS4KKworU2F0IE1heSAxMSAyMDoxMTo0MSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogUmV3cml0dGVuIGFuZCBzaW1wbGlmaWVkLgorCSogY3BsdXMtY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFRyeSB0byBnZXQgYXdheSB3aXRob3V0IGJ1aWxkaW5nCisJYSBOT1BfRVhQUiBhcm91bmQgdGhlIHJldHVybiB2YWx1ZSBvZiBgYnVpbGRfY29tcG9uZW50X2FkZHInLgorCURpdHRvIGZvciByZXR1cm4gdmFsdWUgZnJvbSBgY29udmVydF9wb2ludGVyX3RvJy4KKworCSogY3BsdXMtZGVjbC5jICh2b2lkX3plcm9fbm9kZSk6IE5ldyBub2RlLiAgVXNlZCBpbiBjb25kaXRpb25hbAorCWV4cHJlc3Npb25zIHdoZXJlIG9uZSBhcm0gbXVzdCBkbyBub3RoaW5nLgorCSogdmFyaW91cyBwbGFjZXM6IHJlcGxhY2UgY2FsbHMgdGhhdCBidWlsdCB0aGlzIG5vZGUgZHluYW1pY2FsbHkgdG8KKwlqdXN0IHVzZSB0aGUgZ2xvYmFsIGNvcHkuCisJKiBjcGx1cy10cmVlLmggKHZvaWRfemVyb19ub2RlKTogRGVjbGFyZSBpdCBnbG9iYWxseS4KKworCShtYXliZV9idWlsZF9jbGVhbnVwKTogRG9uJ3QgY2FsbCBgY29udmVydF9mb3JjZScgb24gdGhlIHJldHVybgorCXZhbHVlIG9mIGBidWlsZF91bmFyeV9vcCcuICBXZSBzaG91bGQgaGF2ZSBsaWNlbnNlIHRvIG1vZGlmeSBpdHMKKwl0eXBlIHdpdGhvdXQgaGFybS4KKwkqIGNwbHVzLWdjLmMgKHByb3RlY3RfdmFsdWVfZnJvbV9nYyk6IFNhbWUgaWRlYSBmb3IgVkFSX0RFQ0wgYW5kCisJUEFSTV9ERUNMIG5vZGVzLgorCisJKiB0b3BsZXYuYyAoZl9vcHRpb25zKTogQWRkIGNob2ljZSBmb3IgLWZQSUMuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9mdW5jdGlvbik6IElmIGl0J3MgYSBmdW5jdGlvbiBuYW1lIHRoYXQncyB0aGUKKwlmaXJzdCBnbG9iYWwgbmFtZSwgc3RyaXAgb2YgYSBsZWFkaW5nICcqJyBpZiB0aGVyZSBpcyBvbmUuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBGaXggY29tbWVudC4KKworCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogQ2FsbCBgYW55X3BlbmRpbmdfY2xlYW51cHMnIHdpdGggYXJndW1lbnQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBJbiBUQVJHRVRfRVhQUiBjYXNlLCBJZiBUQVJHRVQgaXMgbnVsbCBhbmQKKwlERUNMIGFscmVhZHkgaGFzIHJ0bCwgdXNlIHRoYXQgYXMgdGhlIHRhcmdldC4KKwkoZXhwYW5kX2V4cHIpOiBJbiBCSU5EX0VYUFIgdHJ5IHVzaW5nIGV4cGFuZF97c3RhcnQsZW5kfV9iaW5kaW5ncyB0bworCWNhdGNoIGNsZWFudXBzLi4ub3RoZXJ3aXNlIGZpeHVwX2NsZWFudXBzIG11c3QgYmUgbW9kaWZpZWQgdG8gZGVhbAorCXdpdGggY2xlYW51cHMgbm90IGluIGFueSBjb250b3Vycy4KKworU2F0IE1heSAxMSAxNTowOTo0MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG91dC1pMzg2LmMgKHZpYV9tZW1vcnkpOiBSZXR1cm4gYSBtZW1yZWYgdG8gdGhlIHN0YWNrLgorCShmcF9jYWxsX2ludGVybmFsKTogQ2hhbmdlIGNhbGwgdG8gdmlhX21lbW9yeS4KKworCSogZXhwci5jIChwdXNoX2Jsb2NrKTogTmV3IGFyZyBCRUxPVyBzcGVjaWZpZXMgcGFkZGluZyBkaXJlY3Rpb24uCisJQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkoZW1pdF9wdXNoX2luc24pOiBQYXNzIGFuIGludGVyZXN0aW5nIHZhbHVlIGZvciBCRUxPVy4KKworCSogYy1wYXJzZS55ICh0eXBlc3BlYyk6IFBhc3MgdGhlIFRZUEVfREVDTCBmb3IgYSB0eXBlZGVmIG5hbWUuCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgVFlQRV9ERUNMIGluIGRlY2xzcGVjcy4KKworVGh1IE1heSAgOSAxNToxNzo0NCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoemVyb19leHRlbmQgcGF0dGVybik6IENvbXB1dGUgY29ycmVjdCBjb25zdGFudC4KKworVGh1IE1heSAgOSAwNzo0NDoyMCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogUmVtb3ZlIFdBU19SRVBMQUNFRDsgYWx3YXlzIGNoZWNrIHRoZSBydGwKKwlmb3Igc3BlY2lmaWMgY2FzZXMgb2YgaW50ZXJlc3QgYW5kIGRvbid0IHVzZSBUTyBhbmQgRlJPTSB3aGVuCisJbG9va2luZyBpbnRvIHRoZSBydGwuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgTUVNKTogQ2FsbCBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiBoZXJlCisJc28gYW55IEFTSElGVHMgd2lsbCBiZSBNVUxUcyBmb3IgbW9kZV9kZXBlbmRhbnRfYWRkcmVzc19wIGNhbGxzIGxhdGVyLgorCShzdWJzdCwgY2FzZSBQTFVTKTogUmVtb3ZlIGNhc2VzIGFscmVhZHkgZG9uZSBlbHNld2hlcmUuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBEb24ndCBsZXQgdGhlIGRlbGV0ZV9pbnNuc19zaW5jZSBjYWxsCisJd2UgZG8ga2lsbCBpbnNucyB0byBkbyBhbiBhdXRvLWluYy4KKworCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBEb24ndCB0cmVhdCBnbG9iYWwgcmVncyBhcyBjbG9iYmVyZWQKKwlvdmVyIGEgQ0FMTF9JTlNOIGV2ZW4gaWYgY2FsbC1jbG9iYmVyZWQuIAorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfc3RtdF9leHByKTogQ29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbgorCWV4cHJlc3Npb24gc3RhdGVtZW50ICBpcyBqdXN0IGFuIGF1dG8taW5jIG9mIGEgdmFyLgorCisJKiBzcGFyYy5tZCAoZml4X3RydW5jW3NkXWZzaTIpOiBGaW5pc2ggY2hhbmdlIHRvIHVzZSBNQVRDSF9TQ1JBVENICisJYnkgZWxpbWluYXRpbmcgREVGSU5FX0VYUEFORCBhbmQgbWFraW5nIERFRklORV9JTlNOIGEgbmFtZWQgcGF0dGVybi4KKworV2VkIE1heSAgOCAxMzozMToyMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAocmVzY2FuKTogSGFuZGxlIHN5bWJvbHMgYmVmb3JlIC8vIGFzIGJlZm9yZSAvKi4KKworCSogTWFrZWZpbGUuaW4gKG9iamMtcGFyc2Uubyk6IFNwZWNpZnkgdGhlIGNvbW1hbmQuCisKKwkqIGMtcGFyc2UueSAodHlwZXNwZWMpOiBGaXggcHJldmlvdXMgY2hhbmdlLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IFVzZSBzcGlsbHJlZ3MgaW4gcm91bmQgcm9iaW4uCisKK1dlZCBNYXkgIDggMTE6MDA6MjkgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1sZXguYyAodHJlZV9ub2RlX2tpbmRzKTogUmVuYW1lZCB0byBgdHJlZV9ub2RlX2NvdW50cycuCisKK1dlZCBNYXkgIDggMDU6NTA6MjkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogRG9uJ3Qgcm91bmQgZnJhbWUgc2l6ZS4KKworCSogbG9vcC5jOiBNdXN0IGluY2x1ZGUgaW5zbi1mbGFncy5oIHRvIGdldAorCUhBVkVfZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVyby4KKwkqIE1ha2VmaWxlLmluIChsb29wLm8pOiBMaWtld2lzZS4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBVc2UgTE9HIGluc3RlYWQgb2YgSU5UVkFMIChPUDEpCisJb25jZSB3ZSBzdGFydCBnZW5lcmF0aW5nIHJ0bC4KKworV2VkIE1heSAgOCAwNTozODowNiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNyYXNoIG9uIGR1cGxpY2F0ZQorCVRFTVBMQVRFX0RFQ0xzLgorCShnbG9iYWxpemVfbmVzdGVkX3R5cGUpOiBIYW5kbGUgZ2xvYmFsaXppbmcgdHlwZXMgd2hlbgorCUNMQVNTX0JJTkRJTkdfTEVWRUwgZ29lcyBvdXQgb2YgZWZmZWN0LgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENvbW1lbnQgb3V0IGRlY2xzIGZvciBBQlMsIEZBQlMgYW5kIExBQlMuCisJVGhleSBjb25mbGljdCB3aXRoIGxpYmcrKyBpbmxpbmVzLgorCisJKiBjcGx1cy1kZWNsMi5jIChidWlsZF9wdXNoX3Njb3BlKTogRml4IGJ1ZyBpbiBsYXN0IGNoYW5nZS4KKwkoZmluaXNoX2ZpbGUpOiBNYWtlIHRoZSBkdW1teSBkZWNsIHRoYXQgd2UgdGFjayBvbiB0byB0aGUgZ2xvYmFsCisJc2NvcGUgYSBUWVBFX0RFQ0wgaW5zdGVhZCBvZiBhIFZBUl9ERUNMLiAgRmFrZSBnbG9iYWwgVkFSX0RFQ0xzIGFyZQorCXByb2JsZW1hdGljIG9uIHNvbWUgbWFjaGluZXMgKGkuZS4gTUlQUykuCisKKwkqIGNwbHVzLWluaXQuYyAoaW5pdF92ZmllbGRzKTogVXNlIFRSRUVfVFlQRSAoVkZJRUxEUykgdG8gZmluZCB0aGUKKwl0eXBlIGZvciB3aGljaCB0aGUgVkZJRUxEIHdhcyBsYXN0IGRpc3Rpbmd1aXNoZWQuICBUaGlzIHBpY2tzIHVwCisJY2FzZXMgd2hlcmUgc2luZ2xlIGluaGVyaXRhbmNlIG92ZXJyaWRlcyBiYXNlIGNsYXNzIHZ0YWJsZXMgYW5kIHRoZQorCWJhc2UgY2xhc3MgZG9lcyBub3QgZ2V0IGEgbmV3IHZ0YWJsZSBmb3IgdGhlIG92ZXJyaWRlLgorCisJKiBjcGx1cy1wYXJzZS55IChuYW1lZF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGUpOiBIYW5kbGUgYQorCWB0ZW1wbGF0ZV90eXBlX25hbWUnIGJ5IGl0c2VsZi4gIFRoaXMgaGFwcGVucyB3aXRoIGUuZy4KKwlmcmllbmQgY2xhc3MgU3RhY2s8VD4uCisKKwkqIGNwbHVzLXB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IFB1dCAnLCcgYmV0d2VlbgorCXBhcmFtZXRlcnMuCisJKHB1c2hfdGVtcGxhdGVfZGVjbHMpOiBEb24ndCBjcmFzaCBpZiBBUkdMSVNUIGlzIEVSUk9SX01BUktfTk9ERS4KKworCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX2Jhc2Vfc3RydWN0KTogQ29tcHV0ZSBNQVhfSEFTX1ZJUlRVQUwgYnkKKwlsb29raW5nIGF0IGFsbCB0aGUgYmFzZSBjbGFzc2VzIHJlbGV2YW50IHRvIFZGSUVMRFMuCisJKGJ1aWxkX3ZiYXNlX3BhdGgpOiBJbml0aWFsaXplIE5PTk5VTEwgdG8gemVyby4KKworVHVlIE1heSAgNyAyMzo0Nzo0MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAoYW55X3BlbmRpbmdfY2xlYW51cHMpOiBEb24ndCBmYWlsIGlmIGJsb2NrX3N0YWNrIGlzIGVtcHR5LgorCitUdWUgTWF5ICA3IDIyOjQ2OjE2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uOyBjYXNlIEVRLCBORSk6IERvbid0IGFzc3VtZQorCXRoZSBhZGRyZXNzIG9mIGEgc3ltYm9sIGlzIG5vbi16ZXJvLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IEVuc3VyZSB3ZSBmcmVlIG1lbW9yeSB1c2VkIGJ5CisJc2NoZWR1bGVfYmxvY2sgd2hlbiB1c2luZyB0aGUgQyBhbGxvY2EuCisKK1R1ZSBNYXkgIDcgMTQ6MTM6NTcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKG1hcmtfcmVsb2FkX3JlZ19pbl91c2UpOiBOZXcgYXJnIE1PREUuICBNYXJrIGFsbCB0aGUgcmVncy4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogUGFzcyB0aGF0IGFyZzsgZG9uJ3QgbG9vcCBoZXJlLgorCisJKiBjLXBhcnNlLnkgKHR5cGVzcGVjKTogQ29udmVydCBhIFRZUEVOQU1FIHRvIGl0cyBtZWFuaW5nLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBEb24ndCBhc3N1bWUgc3ltYm9saWMgY29uc3RhbnQgaXMgbm9uemVyby4KKworCSogYy10eXBlY2suYyAoY19leHBhbmRfYXNtX29wZXJhbmRzKTogQ29udmVydCBhcnJheXMsIGZjbnMgdG8gcG9pbnRlcnMuCisKK01vbiBNYXkgIDYgMjM6Mjk6MjEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogT25seSBtYWtlIGEgUkVHX1dBU18wIG5vdGUgaWYgdGhlIHByZXZpb3VzCisJc2V0IHdhcyB0byB0aGUgc2FtZSByZWdpc3Rlciwgbm90IGp1c3QgdGhlIHNhbWUgcXVhbnRpdHk7CisJaWYgcHJldmlvdXMgUkVHX1dBU18wIG5vdGUsIHVwZGF0ZSBiYWNrIHBvaW50ZXIuCisJSWYgc2V0dGluZyBhIHJlZ2lzdGVyIHRvIGEgY29uc3RhbnQsIHVwZGF0ZSBRVFlfQ09OU1QgYW5kCisJUVRZX0NPTlNUX0lOU04gc28gaXQgcG9pbnRzIHRvIHRoZSBsYXN0IHNldC4KKwlJbiBzcGVjaWFsIGNhc2UgZm9yIChzZXQgUkVHMCBSRUcxKSwgZW5zdXJlIGFueSBSRUdfV0FTXzAgbm90ZXMgYXJlCisJdXBkYXRlZCBjb3JyZWN0bHkuCisKKwkqIGdlbnJlY29nLmMgKG1ha2VfaW5zbl9zZXF1ZW5jZSk6IERvbid0IGNsb2JiZXIgYGknIHdoZW4gaXQgaXMKKwlzdGlsbCBuZWVkZWQuCisKKwkqIG91dC12YXguYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogRml4IGJ1ZyBpbiBsYXN0IGNoYW5nZSBpbiBoYW5kbGluZworCShwbHVzIChyZWcpIChyZWcpKS4KKworTW9uIE1heSAgNiAxNjo0MTo1MCAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgemV2cy5zaWNzLnNlKQorCisJKiBleHBtZWQuYyAoc3ludGhfbXVsdCk6IE1ha2UgaXQgaGFuZGxlIHQgPT0gMC4gSW1wcm92ZSBjb21tZW50cy4KKwlVc2UgKG1heF9jb3N0IDw9IGFkZF9jb3N0KSBpbnN0ZWFkIG9mIChtYXhfY29zdCA8IGFkZF9jb3N0KSB0bworCWRldGVybWluZSBpZiB3ZSBzaG91bGQgZmFpbCBlYXJseSAodG8gYmV0dGVyIHBydW5lIHRoZSBzZWFyY2gpLiAgCisJUmVtb3ZlIGxvb3Agd2l0aCBuIGZyb20gZmFjdG9yIHN5bnRoZXNpcy4gIFJlbW92ZSAtMiBiaWFzIGZyb20gbQorCWxvb3AgKGZvciBjbGVhcml0eSkuICBBZGQgY29kZSB0byB1c2UgbG9hZC1lZmZlY3RpdmUtYWRkcmVzcworCWluc3RydWN0aW9ucy4gIFVzZSBiaXQtZmlkZGxpbmcgaW5zdGVhZCBvZiBsb29wIHRvIGRldGVybWluZSBxIGluCisJdGhlIGxhc3Qgc3ludGhlc2lzIGNhc2UuCisKK01vbiBNYXkgIDYgMTE6MjE6NDUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogUmV3b3JkIGFuIGVycm9yIG1lc3NhZ2UuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBUeXBvIGluIGxhc3QgY2hhbmdlLgorCisJKiBNYWtlZmlsZS5pbiAoZW5xdWlyZSwgZW5xdWlyZS5vKTogRGVwZW5kIG9uIGdudWxpYi4KKworU3VuIE1heSA1IDE3OjI4OjIyIDE5OTEgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBtYWtlLWNjMS5jb206IFVwZGF0ZSBmb3IgR0NDIDIuMDsgYnVpbGQgaW5zbi1hdHRyLmgsIGluc24tYXR0cnRhYi5jLgorCUNvbXBpbGUgYW5kIGFkZCBvYmogdG8gbGlua2VyIGxpc3Q6IGMtYXV4LWluZm8uYywgYy1jb21tb24uYywgYy1sYW5nLmMsCisJYXV4LW91dHB1dC5jLCBjYWxscy5jLCBkd2FyZm91dC5jLCBmdW5jdGlvbi5jLCByZW9yZy5jLCBzY2hlZC5jLAorCXNkYm91dC5jLCB1bnJvbGwuYywgaW5zbi1hdHRydGFiLmMuICBSZW1vdmUgcmVmZXJlbmNlcyB0byBzeW1vdXQuYy4KKworU3VuIE1heSAgNSAxNTozMjowMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChyZXN0LmVuY2FwKTogTWFrZSBnbnVsaWIgYmVmb3JlIGZsb2F0LmguCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOgorCURvbid0IGFzc3VtZSBzeW1ib2xpYyBjb25zdGFudCBpcyBub256ZXJvLgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IElnbm9yZSBhdm9pZF9yZXR1cm5fcmVnLgorCShyZWxvYWRfYXNfbmVlZGVkLCByZWxvYWQpOiBEb24ndCBib3RoZXIgc2V0dGluZyBhdm9pZF9yZXR1cm5fcmVnLgorCitTdW4gTWF5ICA1IDE0OjMwOjE0IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNsYXNzLmMgKHByZXZfY2xhc3NfdHlwZSk6IERlY2xhcmUgdGhpcyB0byBiZSBzdGF0aWMuCisJKGJ1aWxkX3ZiYXNlX3BhdGgpOiBUZXN0IE5PTk5VTEwgdG8gZGVjaWRlIHdoZXRoZXIgYSBDT05EX0VYUFIgaXMKKwlhY3R1YWxseSBuZWVkZWQuCisJKGZpbmlzaF9zdHJ1Y3QpOiBBbm90aGVyIHNvcnQgb2YgaGFyZCB2aXJ0dWFsIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aAorCWlzIG9uZSB3aGljaCBjb21lcyBmcm9tIHRoZSBub24tbGVmdG1vc3QgYmFzZWNsYXNzLCBhbmQgd2hvJ3MgaW5kZXgKKwlpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGF0IGNsYXNzIGFuZCB0aGUgbWFpbiBkZXJpdmVkIGNsYXNzLiAgVXNlIG5ldworCXZhcmlhYmxlIERPSU5HX0hBUkRfVklSVFVBTFMgdG8gY29udHJvbCB3aGVuIHdlIHB1bnQgYW5kIHdoZW4gd2UKKwlwbG93IHRocm91Z2guCisJKG1vZGlmeV92dGFibGVfZW50cnkpOiBJZiB3ZSBmaW5kIGF0IHRoaXMgcG9pbnQgdGhhdCB3ZSBoYXZlIGEgaGFyZAorCXZpcnR1YWwgZnVuY3Rpb24sIGp1c3QgcHV0IGl0IG9uIHRoZSBsaXN0IFBFTkRJTkdfSEFSRF9WSVJUVUFMUyBpZgorCURPSU5HX0hBUkRfVklSVFVBTFMgaXMgbm9uemVyby4KKwkoZml4ZWRfdHlwZV9wKTogSGFuZGxlIFNBVkVfRVhQUiwgUlRMX0VYUFIsIFBMVVNfRVhQUiwgTUlOVVNfRVhQUiwKKwlOT1BfRVhQUiBhbmQgQ09OVkVSVF9FWFBSLgorCShwdXNoY2xhc3MpOiBGaXhlZCBjb21tZW50LiAgQWxzbyBjaGFuZ2UgdGVzdCBmb3Igd2hldGhlciB0aGlzIGlzCisJdGhlIHRvcC1sZXZlbCBjbGFzcyBzY29wZSBmcm9tIGFuIG9ic2N1cmUgb25lIHRvIGFuIG9idmlvdXMgb25lLCBhbmQKKwlhZGQgY29tbWVudC4KKwkocHVzaGNsYXNzLHBvcGNsYXNzKTogTm93IGFsd2F5cyBhbGxvY2F0ZSBhIGJpbmRpbmcgbGV2ZWwuICBMYXRlcgorCXdlJ2xsIGhhdmUgdG8gcmV3cml0ZSB0aGlzIHRvIGFjdHVhbGx5IHVzZSBpdC4KKworCSogY3BsdXMtZ2MuYyAodHlwZV9uZWVkc19nY19lbnRyeSk6IERvbid0IG5lZWQgYSBHQyBlbnRyeSBmb3IKKwlFUlJPUl9NQVJLX05PREUuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfbmV3KTogU2V0IFRSRUVfQ0FMTFNfTkVXIG9uIFJUTF9FWFBSLiAgVGhpcworCWdpdmVzIHVzIGEgY2FzZSB0aGF0IGBmaXhlZF90eXBlX3AnIGNhbiBncm9rLgorCisJKiBjcGx1cy1sZXguYyAoaWRlbnRpZmllcl90eXBlKTogTWFrZSB0aGlzIF9faW5saW5lIGlmIGNvbXBpbGluZworCXdpdGggR05VIEMuCisJKHRyZWVfbm9kZV9raW5kcyk6IFJlbmFtZWQgdG8gYHRyZWVfbm9kZV9jb3VudHMnLgorCisJKiBjcGx1cy1wYXJzZS55ICh2YXJpb3VzIHBsYWNlcyk6IFRha2UgYWR2YW50YWdlIG9mIGRlZmF1bHQgcnVsZQorCWAkJCA9ICQxJywgYW5kIHdoZXJlIHBvc3NpYmxlLCB1c2UgJCQgaW5zdGVhZCBvZiAkMS4KKwlBbHNvLCBiYWNrIG91dCBjaGFuZ2UgZm9yIHNldHRpbmcgYGxvb2tpbmdfZm9yX3R5cGVuYW1lJyB0byAxIGF0IHRvcAorCWxldmVsLgorCisJKiBjcGx1cy1kZWNsMi5jIChidWlsZF9wdXNoX3Njb3BlKTogSWYgdGhlIHVzZXIgZ2l2ZXMgWDo6Zm9vIGluIFgncworCXNjb3BlLCBkb24ndCByZXR1cm4gYSBTQ09QRV9SRUYuICBKdXN0IHJldHVybiBgZm9vJyBpbnN0ZWFkLgorCisJKiBjcGx1cy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgZGVmaW5lIGBhbGxvY2EnIGFzIGEKKwlidWlsdC1pbiBmdW5jdGlvbiB1bnRpbCBsaWJnKysgaGVhZGVyIGZpbGVzIGFncmVlIHdpdGggaXRzIGJ1aWx0LWluCisJdHlwZS4KKwkoZmluaXNoX2RlY2wpOiBEb24ndCBjcmFzaCBpZiBUWVBFIGlzIGVycm9yX21hcmtfbm9kZS4KKworCSogZm9sZC1jb25zdC5jIChzcGxpdF90cmVlKTogV2hlbiBzcGxpdHRpbmcgdGhlIHRyZWUsIGRvbid0IGNhbGwKKwljb252ZXJ0IGlmIHRoZSBUWVBFX01PREVzIGFyZSB0aGUgc21hZS4gIFRoaXMgc2NyZXdzIHVwIEMrKyB3aGVyZQorCWNvbnZlcnNpb24gb2Ygb25lIHBvaW50ZXIgdHlwZSB0byBhbm90aGVyIGNhbiBjYXVzZSB0aGUgcG9pbnRlcidzCisJdmFsdWUgdG8gY2hhbmdlLgorCisJKiB0cmVlLmMgKGdldF9pZGVudGlmaWVyKTogU3BlZWQgdXAgYGdldF9pZGVudGlmaWVyJyBieSBhYm91dCBhCisJZmFjdG9yIG9mIDIuICBUaGlzIGJlY29tZXMgbm90aWNhYmxlIHdpdGggdGhlIGxvbmcgbmFtZXMgdXNlZCBmb3IKKwlDKysgb3ZlcmxvYWRpbmcuCisJKHRyZWVfY29ucyk6IE1ha2UgdGhpcyBtb3N0IGZyZXF1ZW50IHVzZXIgb2YgYG1ha2Vfbm9kZScgcGVyZm9ybSBpdHMKKwlhY3Rpb25zIGlubGluZS4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBFbGltaW5hdGUgbWFueSAobW9zdCkgY2FsbHMgdG8gc3RyY21wIGJ5CisJYmVpbmcgc21hcnRlciBhYm91dCB3aGVuIHRvIGNhbGwgaXQuICBBbHNvLCBkb24ndCBjYWxsIGBwdXNoX2Jsb2NrJworCWluIHRoZSB0cml2aWFsIGNhc2Ugd2hlbiBpdCdzIG5vdCBuZWVkZWQuCisKK1N1biBNYXkgIDUgMDg6NTE6MTQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChjb252ZXJ0X3RvX21vZGUpOiBGaXggKGZvciB0aGUgc2Vjb25kIHRpbWUpIHRlc3QgZm9yIHdoZW4KKwlnZW5fbG93cGFydCBzaG91bGQgYmUgY2FsbGVkLgorCisJKiBjc2UuYyAoZmluZF9iZXN0X2FkZHIpOiBUcnkgdG8gZm9sZCBhZGRyZXNzLgorCShmb2xkX3J0eCk6IERvIGFzc29jaWF0aXZpdHkgYW5kIChub3QgKG5vdCAuLi4pKSBjaGVja3MgaGVyZS4KKwkoY3NlX2luc24pOiBOb3QgaGVyZS4KKworCSogY29tYmluZS5jIChyZWNvZ19mb3JfY29tYmluZSk6IE5ldyBwYXJhbWV0ZXIsIFBOT1RFUy4KKwlXaGVuIHdlIGFkZCBhIENMT0JCRVIsIHB1dCBhIFJFR19VTlVTRUQgbm90ZSBmb3IgaXQgaW4gKlBOT1RFUy4KKwkodHJ5X2NvbWJpbmUpOiBDYWxsIHJlY29nX2Zvcl9jb21iaW5lIHdpdGggbmV3IHBhcmFtZXRlci4KKwlEZWxldGUgYW55IG5vdy1pbnZhbGlkIFJFR19VTlVTRUQgbm90ZXMgaW4gT1RIRVJfSU5TTiBhbmQgYWRkIGFueQorCXJlcXVpcmVkIG5ldyBvbmVzLgorCUFkZCBSRUdfTk9URVMgdG8gSTMgYW5kIEkyIGR1ZSB0byBhZGRlZCBDTE9CQkVScy4KKwkocmVtb3ZlX2RlYXRoKTogQ2FsbCBuZXcgZnVuY3Rpb24sIHJlbW92ZV9ub3RlLgorCShtb3ZlX2RlYXRocyk6IERvbid0IGdldCBjb25mdXNlZCBieSBhIENMT0JCRVIuCisJKGRpc3RyaWJ1dGVfbm90ZXMpOiBEb24ndCBtYWtlIGR1cGxpY2F0ZSBSRUdfVU5VU0VEIG5vdGVzLgorCURvbid0IHB1dCBhIFJFR19ERUFEIG5vdGUgb24gYW4gaW5zbiB3aGVuIHRoZSByZWdpc3RlciBpcworCXBhcnRpYWxseSBtb2RpZmllZCwgYnV0IHJlbWFpbnMgdmFsaWQuCisKKwkqIHJ0bGFuYWwuYyAocmVtb3ZlX25vdGUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBXaGVuIG1ha2luZyBhIFBBUkFMTEVMIHRoYXQgZG9lcyBhIGNvbXBhcmUKKwlhbmQgYXJpdGhtZXRpYywgZG9uJ3Qgc2ltcGxpZnkgdGhlIENPTVBBUkUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBWYWxpZGF0ZSB0aGF0IEkxREVTVCBpc24ndCBiZWluZworCW1vZGlmaWVkIGludmFsaWRseS4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogSW4gWkVST19FWFRSQUNUIGNhc2UsIGFkZCBtaXNzaW5nCisJdGVzdCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbiBhZ2FpbnN0IHplcm87IGFsc28gaW52ZXJ0IGNvbXBhcmlzb24KKwljb25kaXRpb24uCisJSWYgd2UgY2FuJ3QgZG8gYSBjb21wYXJpc29uIGluIGEgbmFycm93ZXIgbW9kZSwgYnV0IHdlIGtub3cgdGhhdAorCXNvbWUgd2lkZXIgYml0cyBhcmUgemVybywgc2VlIGlmIHdlIGNhbiBkbyBpdCBpbiBhIHdpZGVyIG1vcmUuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogUmVtb3ZlIG9ic29sZXRlIGNvZGUgdG8gY29udmVydAorCW5lZ2F0aXZlIHNoaWZ0IGNvdW50cyB0byB0aGUgb3Bwb3NpdGUgc2hpZnQuCisJRG9uJ3QgZm9sZCBpbnZhbGlkIHNoaWZ0cyBzaW5jZSB0aGV5IG1heSB0cmFwIChlLmcuLCBvbiBWYXgpLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogVXNlIHJ0eF9lcXVhbF9wIHRvIHNlZSBpZiBhIHJlc3VsdAorCWlzIGFscmVhZHkgaW4gdGhlIGRlc2lyZWQgcmVnaXN0ZXIuCisKKwkqIGNvbWJpbmUuYyAoZmluZF9zcGxpdF9wb2ludCk6IEFkZCB0d28gbW9yZSB3YXlzIHRvIHNwbGl0IGFuIGluc24uCisKKwkqIGNvbWJpbmUuYyAoZ2VuX2JpbmFyeSk6IFB1dCBhIGNvbXBsZXggb3BlcmFuZCBmaXJzdCBpbiBhZGRpdGlvbiB0bworCXB1dHRpbmcgY29uc3RhbnRzIHNlY29uZCwganVzdCBsaWtlIHN1YnN0IHdvdWxkIGRvLgorCisJKiBjb21iaW5lLmMgKHNpZ25pZmljYW50X2JpdHMpOiBDb3JyZWN0IGNvbXB1dGF0aW9uIG9mIHNpZ25pZmljYW50IGJpdHMKKwlmb3IgZGl2aXNpb24gb3BlcmF0aW9ucy4KKworCSogY29tYmluZS5jIChhcHBseV9kaXN0cmlidXRpdmVfbGF3KTogUmVqZWN0IGNvbXBsZXggU1VCUkVHcy4KKwlTVUJSRUcgZGlzdHJpYnV0ZXMgb3ZlciBsb2dpY2FsIGFuZCBhZGRpdGlvbiBvcGVyYXRpb25zLgorCisJKiBjb21iaW5lLmMgKHN1YnN0OyBjYXNlIEFORCwgSU9SLCBYT1IpOiBBZGQgc29tZSBib29sZWFuCisJYXJpdGhtZXRpYyBzaW1wbGlmaWNhdGlvbnMuCisKKwkqIGV4cHIuYyAoZG9fanVtcCk6IEFERFJFU1NfRVhQUiBpcyBub3QgYWx3YXlzIHplcm8sIHVuZm9ydHVuYXRlbHkuCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IEluIGNhc2Ugd2hlcmUgd2UgYXJlIHRlc3RpbmcgYSBzaW5nbGUgYml0LAorCWRvbid0IGNvbnZlcnQgdG8gb3V0cHV0IG1vZGUgdW50aWwgYWZ0ZXIgd2UgZG8gdGhlIHNoaWZ0LgorCQorCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3AsIGV4cGFuZF9maXgpOiBDb21wYXJlCisJZW51bSBpbnNuX2NvZGUgb2JqZWN0cyBhZ2FpbnN0IENPREVfRk9SX25vdGhpbmcgaW5zdGVhZCBvZiAwLgorCisJKiByb21wLm1kIChiaXRfaW5zdik6IFVzZSBDQzAgaW4gc3RhbmRhcmQgd2F5OyBpLmUuLCBpbiBORS4KKworU2F0IE1heSA0IDIwOjQxOjEyIDE5OTEgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBjLWF1eC1pbmZvLmMgKGdlbl9hdXhfaW5mb19yZWNvcmQpOiBVc2UgZ2V0Y3dkIG9uIFZNUyBhIGxhIFVTRy4KKwkqIGRieG91dC5jOiBTYW1lIGhlcmUuCisJKiB4bS12bXMuaDogRGVmaW5lIHVubGluayBhcyByZW1vdmUKKwkoR0NDX0lOQ0xVREVfRElSKTogUHJvdmlkZSBhIGR1bW15IGRlZmluaXRpb24uCisKK1NhdCBNYXkgIDQgMTY6NDY6NDggMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wLCB0cnlfY29tYmluZSk6IFVzZSBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTCisJdG8gaW5kaWNhdGUgd2hlbiBpdCBpcyB2YWxpZCB0byBkbyBjb21iaW5lcyBpbnZvbHZpbmcgaGFyZCByZWdpc3RlcnMuCisJKiBjc2UuYyAoY2Fub25faGFzaCk6ICNpZmRlZiBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTLCBkb24ndCByZWNvcmQKKwloYXJkIHJlZ2lzdGVycyB1bmxlc3MgdGhleSBhcmUgZnAsIGFwLCBzcCBvciBhcmUgZml4ZWQuCisJKiBsb29wLmMgKHZhbGlkX2luaXRpYWxfdmFsdWVfcCk6ICNpZmRlZiBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTLCAKKwloYXJkIHJlZ2lzdGVyIGFyZW4ndCB2YWxpZCBpbml0aWFsIHZhbHVlcy4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSW5pdGlhbGl6ZSBGT1JCSURERU5fUkVHUyBkZXBlbmRpbmcgb24KKwl3aGV0aGVyIHdlIGhhdmUgc21hbGwgcmVnaXN0ZXIgY2xhc3NlcyBvciBub3QuCisKKwkqIG5zMzJrLm1kOiBSZXBsYWNlIGNvbnN0X2ludCB3aXRoIGNvbnN0X2ludF9vcGVyYW5kLgorCVJlbW92ZSBISW1vZGUgZXh0cmFjdGlvbnMuCisJUmVtb3ZlIHBhdHRlcm5zIGFzc2lnbmluZyBhbiBBTkQgdG8gQ0MwLgorCShhbmRjYnh4Myk6IFJlbW92ZSBuYW1lIGFuZCBlbGltaW5hdGUgY2FzZSB3aXRoIE5PVCBhcyBzZWNvbmQgb3BlcmFuZC4KKwkoc2JpdHgsIGNiaXR4KTogUmVtb3ZlIHBhdHRlcm5zIGludm9sdmluZyBJT1IgYW5kIEFTSElGVDsgYWRkIHBhdHRlcm5zCisJd2l0aCBaRVJPX0VYVFJBQ1QgYXMgZGVzdGluYXRpb24uCisJKGliaXR4KTogUHV0IEFTSElGVCBhcyBmaXJzdCBvcGVyYW5kIGluIFhPUi4KKwkoYml0ZmllbGQgY29tcGFyZSk6IFJlbW92ZSBjb21wYXJpc29uIG9mIDEgYml0IGZpZWxkIHdpdGggMTsgY29tYmluZQorCWNvbnZlcnRzIHRoaXMgdG8gY29tcGFyaXNvbiB3aXRoIHplcm8uCisJKGFuZC1jb21wYXJlLWJyYW5jaCk6IEZvbGQgUExVUyBvciBNSU5VUyBpbnRvIGNvbnN0YW50LCBsaWtlIGNvbWJpbmUKKwl3aWxsIGRvLgorCVJlbW92ZSBwYXR0ZXJucyBmb3IgcmV2ZXJzZWQgY2FzZXMuCisJKiBvdXQtbnMzMmsuYyAoY29uc3RfaW50KTogRGVsZXRlZC4KKwkKKwkqIHJ0bGFuYWwuYyAocmVnX3VzZWRfYmV0d2Vlbl9wLCByZWdfc2V0X2JldHdlZW5fcCk6IFVzZSBHRVRfUlRYX0NMQVNTLgorCShyZWdfc2V0X3BfMSk6IElmIHdlIGFyZSBzZXR0aW5nIGEgTUVNLCBkb24ndCB0aGluayB3ZSBhcmUgc2V0dGluZworCXJlZ2lzdGVycyB1c2VkIGluIGl0cyBhZGRyZXNzLgorCisJKiBtNjhrLm1kIChjbXBzZiwgY21wZGYsIHRzdHNmLCB0c3RkZiBmb3IgRlBBKTogVXNlIE1BVENIX1NDUkFUQ0guCisJKiBzcGFyYy5tZCAobWVtb3J5IHN0b3JlIHBhdHRlcm5zKTogTGlrZXdpc2UuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEZ1bmN0aW9uIGlzIHZhcmFyZ3MgZnVuY3Rpb24gaWYgdGhlCisJbGFzdCBwYXJhbWV0ZXIgaXMgYF9fYnVpbHRpbl92YV9hbGlzdF8nIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIGZpcnN0CisJcGFyYW1ldGVyLiAgTm9ybWFsbHksIHRoaXMgaXMgdGhlIHNhbWUsIGJ1dCBzb21lIGZ1bmN0aW9ucyBpbiBNQUNICisJaGF2ZSBuYW1lZCBwYXJhbWV0ZXJzIGJlZm9yZSB2YV9hbGlzdC4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogUmVtb3ZlIGFib3J0IG9uIHBhcmFkb3hpY2FsIFNVQlJFR3MKKwlub3cgdGhhdCB3ZSBrbm93IHRoZXkgY2FuIG9jY3VyLgorCisJKiByZWxvYWQuYyAoZGVjb21wb3NlKTogSGFuZGxlIFNDUkFUQ0g7IGl0IGNhbid0IGNvbmZsaWN0IHdpdGgKKwlhbnl0aGluZy4KKwkoZmluZF9yZWxvYWRzKTogQWxsIG9wZXJhbmRzIGNhbiBzZXQgZWFybHljbG9iYmVyLCBub3QganVzdCBSRUcgJiBNRU0uCisJQWRkIHN1cHBvcnQgZm9yICJYIiBjb25zdHJhaW50LgorCVNDUkFUQ0ggZG9lcyBub3QgbWF0Y2ggImciIGNvbnN0cmFpbnQuCisKK1NhdCBNYXkgIDQgMTQ6MDM6MTYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBlbnF1aXJlLmMgKEVQUk9QKTogQXZvaWQgYSA8PSBvdXQgaWYgYmFkIGlzIHNldC4KKworCSogU1lTQ0FMTFMuYzogVGVzdCBic2Q0XzIgYWxvbmcgd2l0aCBCU0QuCisKK0ZyaSBNYXkgIDMgMTQ6MjY6NTEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBTdG9wIGxvb3Bpbmcgb24gdHlwZSBpZiBmaW5kIGVycm9yIG1hcmsuCisKKwkqIGxvb3AuYyAoaW52YXJpYW50X3ApOiBBbiBhZGRyZXNzIHdpdGggYSBQTFVTIGlzIG5vdCB0aGUgc2FtZSBhcworCU1FTV9JTl9TVFJVQ1RfUCBiZWluZyBzZXQuCisKKwkqIHRyZWUuaCAoVFJFRV9OT19VTlVTRURfV0FSTklORyk6IE5ldyBtYWNyby4KKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBUaGF0IGZsYWcgc3VwcHJlc3NlcyB3YXJuaW5ncy4KKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogU2V0IGZsYWcgd2hlbiBjb252ZXJ0aW5nIHBvc3RpbmMuCisKK0ZyaSBNYXkgIDMgMDg6MDk6NDcgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHRtLW04OGsuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogUmVtb3ZlIHdvcmthcm91bmRzIGZvcgorCXJlZ2lzdGVyIGVsaW1pbmF0aW9uIHByb2JsZW1zLgorCitGcmkgTWF5ICAzIDA3OjE0OjIyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGEyOWsubWQ6IEZpeCB0eXBvIGluIGRtYWMgcGF0dGVybi4KKwlNYWtlIG1hbnkgZGVmaW5lX3NwbGl0cyB0aGF0IGNvbnZlcnQgREZtb2RlIGFuZCBESW1vZGUgdG8gb25lIHdvcmQKKwlhdCBhIHRpbWUgdG8gb3BlcmF0ZSBvbmx5IGFmdGVyIHJlbG9hZCBjb21wbGV0ZXMgdG8gaW1wcm92ZSByZWcgYWxsb2MuCisJKG1vdmRmKTogQ29ycmVjdCB0eXBvIGluIG1mYWNjLgorCShyb3Rsc2kzKTogQ291bnQgaXMgUUltb2RlLCBub3QgU0ltb2RlLgorCisJKiB0bS1hMjlrdW5peC5oIChCSUdHRVNUX0FMSUdOTUVOVCk6IENoYW5nZSB0byA2NC4KKwkKKwkqIHRtLXJvbXAuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBFbmFibGUgaW5zbiBzY2hlZHVsaW5nLgorCShyZWdpc3RlciBkZWZpbml0aW9ucyk6IE5vIGxvbmdlciBuZWVkIGR1bW15IHJlZ2lzdGVyIGFuZCBjbGFzczsKKwlyZWdpc3RlciBudW1iZXJzIGZvciBGUCByZWdpc3RlciBjaGFuZ2UuCisJKiByb21wLm1kOiBVc2UgTUFUQ0hfU0NSQVRDSCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgcHNldWRvcworCXRvIHRoZSBkdW1teSByZWdpc3RlciBjbGFzcyBvciBiYXNlIHJlZ2lzdGVyIGRlcGVuZGluZyBvbiBhbHRlcm5hdGl2ZS4KKwkoRlAgaW5zbnMpOiBBZGQgbWlzc2luZyAiPSIgdG8gY29uc3RyYWludHMgaW4gQ0xPQkJFUnMuCisJKGV4dGVuZHFpc2kyLCBleHRlbmRxaWhpMik6IE5vdyBERUZJTkVfRVhQQU5ELgorCShtYzAzIHBlZXBob2xlKTogQ2FuIGRvIGlmIHJpZ2h0IHNoaWZ0ID49IDI0IGJpdHMuCisJKiBvdXQtcm9tcC5jIChyZWdfMTVfb3BlcmFuZCk6IFJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yIEZQIGRlbGF5IHNsb3QuCisJKHJvbXBfc2Ffc2l6ZSwgb3V0cHV0X2Zwb3AsIG91dHB1dF9sb2Fkc2F2ZV9mcG9wcywgb3V0cHV0X2Zwb3BzKToKKwlDaGFuZ2UgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgbnVtYmVycy4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9zaGlmdF9jb25zdCwgY2FzZSBmb3Igc2hpZnRzKTogVmVyaWZ5IHRoYXQgCisJdGhlIGhvc3Qgd29yZCBzaXplIGlzIHdpZGUgZW5vdWdoLgorCVByb3Blcmx5IGhhbmRsZSAoYXNoaWZ0IChzdWJyZWcgKGFzaGlmdHJ0IC4uLikgLi4uKSAuLi4pLgorCisJKiBvdXQtdmF4LmMgKHByaW50X29wZXJhbmRfYWRkcmVzcywgY2FzZSBQTFVTKTogSGFuZGxlIGFsbCBhZGRyZXNzZXMKKwlhY2NlcHRlZCBieSBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MuCisKKwkqIGV4cGxvdy5jIChwbHVzX2NvbnN0YW50KTogZm9yY2VfY29uc3RfbWVtIGRvZXMgbm90IG5lY2Vzc2FyaWx5CisJcmV0dXJuIGEgdmFsaWQgYWRkcmVzcy4KKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5pbiAobG9jYWwtYWxsb2Mubyk6IEluY2x1ZGVzIG91dHB1dC5oLgorCSogcnRsLmRlZiAoU0NSQVRDSCwgTUFUQ0hfU0NSQVRDSCk6IE5ldyBSVEwgY29kZXMuCisJKiByZWdzLmggKG1heF9zY3JhdGNoKTogQWRkIGRlZmluaXRpb24uCisJKiBnZW5jb25maWcuYyAod2Fsa19pbnNuX3BhcnQpOiBIYW5kbGUgTUFUQ0hfU0NSQVRDSC4KKwkqIGdlbmV4dHJhY3QuYyAod2Fsa19ydHgpOiBMaWtld2lzZS4KKwkqIGdlbmVtaXQuYyAobWF4X29wZXJhbmRfMSk6IExpa2V3aXNlLgorCShnZW5fZXhwKTogRW1pdCBhIFNDUkFUQ0ggZm9yIGZvciBNQVRDSF9TQ1JBVENILgorCShnZW5faW5zbik6IFdlIGNhbiBjcmVhdGUgKGNsb2JiZXIgKHNjcmF0Y2gpKS4KKwkqIGdlbm91dHB1dC5jIChzY2FuX29wZXJhbmRzKTogSGFuZGxlIE1BVENIX1NDUkFUQ0g7CisJdXNlIHN3aXRjaCBpbnN0ZWFkIG9mIGlmJ3MuCisJKiBnZW5yZWNvZy5jIChtYWtlX2luc25fc2VxdWVuY2UpOiBXZSBjYW4gY3JlYXRlZCAoY2xvYmJlciAoc2NyYXRjaCkpLgorCShhZGRfdG9fc2VxdWVuY2UpOiBIYW5kbGUgTUFUQ0hfU0NSQVRDSC4KKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IEluaXRpYWxpemUgbWF4X3NjcmF0Y2guCisJKHByb3BhZ2F0ZV9ibG9jayk6IFVwZGF0ZSBtYXhfc2NyYXRjaCB3aXRoIGNvdW50IGZyb20gdGhpcyBibG9jay4KKwkobWFya19zZXRfMSk6IE1ha2UgUkVHX1VOVVNFRCBub3RlIGZvciBTQ1JBVENIIGFuZCBjb3VudCBpdC4KKwkqIGxvY2FsLWFsbG9jLmM6IEluY2x1ZGUgb3V0cHV0LmguCisJKHF0eV9zY3JhdGNoX3J0eCk6IE5ldyB2YXJpYWJsZS4KKwkoYWxsb2NfcXR5KTogUmVuYW1lIElOU05fTlVNQkVSIHRvIEJJUlRIIHNpbmNlIHRoYXQncyB3aGF0IGl0IGlzLgorCShhbGxvY19xdHlfZm9yX3NjcmF0Y2gpOiBOZXcgZnVuY3Rpb24uCisJKGxvY2FsX2FsbG9jKTogQWNjb3VudCBmb3IgcXVhbnRpdGllcyBuZWVkZWQgZm9yIFNDUkFUQ0guCisJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcXR5X3NjcmF0Y2hfcnR4LgorCShibG9ja19hbGxvYyk6IEFsbG9jYXRlIHF1YW50aXRpZXMgZm9yIFNDUkFUQ0ggb3BlcmFuZHMuCisJKHJlcXVpcmVzX2lub3V0X3ApOiBBZGQgIlgiIGNvbnN0cmFpbnQuCisJKiByZWNvZy5jIChzY3JhdGNoX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IFNDUkFUQ0ggbWF0Y2hlcyBhIHJlZ2lzdGVyIGNvbnN0cmFpbnQgdW5sZXNzCisJc3RyaWN0LgorCUFkZCAiWCIgY29uc3RyYWludC4KKwkqIHJlZ2NsYXNzLmMgKHJlZ19jbGFzc19yZWNvcmQpOiBBZGQgIlgiIGNvbnN0cmFpbnQuCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQWRkIFNDUkFUQ0ggdG8gdGVzdCBmb3Igb3BlcmFuZCB0aGF0CisJZGllcyByaWdodCBhd2F5OyB1cGRhdGUgUkVHX1VOVVNFRCBub3RlIGZvciBTQ1JBVENILgorCU5ldmVyIG5lZWQgcmVsb2FkIGluc24gZm9yIFNDUkFUQ0gsIGV2ZW4gaWYgbm8gUkVHX1VOVVNFRCBub3RlLgorCSogcnRsYW5hbC5jIChyZWdfbWVudGlvbmVkX3AsIHJlZ19vdmVybGFwX21lbnRpb25lZF9wLCBydHhfZXF1YWxfcCk6CisJU3VwcG9ydCBTQ1JBVENILgorCSh2b2xhdGlsZV9yZWZzX3AsIHNpZGVfZWZmZWN0c19wLCBtYXlfdHJhcF9wKTogTGlrZXdpc2UuCisJKGluZXF1YWxpdHlfY29tcGFyaXNvbnNfcCwgcmVwbGFjZV9yZWdzKTogTGlrZXdpc2UuCisKKwkqIGZsb3cuYyAobWFya19zZXRfMSk6IERvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwgd2l0aCBwYXJ0aWFsCisJYXNzaWdubWVudHM7IHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IG1hcmtfdXNlZF9yZWdzIGFuZCB3ZSBub3cKKwl3YW50IHRvIG1ha2UgTE9HX0xJTktTIGZvciB0aGVzZS4KKworCSogY29tYmluZS5jOiBJbmNsdWRlcyBleHByLmguCisJKGV4cGFuZF9maWVsZF9hc3NpZ25tZW50LCBtYWtlX2V4dHJhY3Rpb24pOiBOZXcgZnVuY3Rpb25zLgorCShnZXRfcG9zX2Zyb21fbWFzaywgbWFrZV9maWVsZF9hc3NpZ25tZW50KTogTGlrZXdpc2UuCisJKGNhbl9jb21iaW5lX3ApOiBSZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBTVUJSRUcgaW4gU0VUX0RFU1Q7IGNhbGwKKwlleHBhbmRfZmllbGRfYXNzaWdubWVudCBpbnN0ZWFkLgorCSh0cnlfY29tYmluZSk6IFJlbW92ZSBjb2RlIHRvIGhhbmRsZSBTVFJJQ1RfTE9XX1BBUlQgaGVyZS4KKwlDYWxsIGV4cGFuZF9maWVsZF9hc3NpZ25tZW50IG9uIFNFVHMgaW4gSTMuCisJKGZpbmRfc3BsaXRfcG9pbnQpOiBTcGxpdCB1cCBzaW1wbGUgY2FzZXMgb2YgYml0ZmllbGQgYXNzaWdubWVudHMuCisJKHN1YnN0LCBjYXNlIFpFUk9fRVhUUkFDVCk6IFJlbW92ZSBwcm9jZXNzaW5nIG9mIFpFUk9fRVhUUkFDVCBpbiBhCisJU0VUX0RFU1QgZnJvbSBoZXJlLgorCShzdWJzdCwgY2FzZSBTRVQpOiBUcnkgdG8gY29udmVydCB0aGlzIGludG8gYSBmaWVsZCBhc3NpZ25tZW50IGJ5CisJY2FsbGluZyBtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQuCisJTm8gbmVlZCB0byBjYWxsIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uIGZvciBDT01QQVJFczsKKwltYWtlX2NvbXBvdW5kX29wZXJhdGlvbiBub3cgcmV0dXJucyBhbiBydHggYW5kIGlzIG5vIGxvbmdlciBwYXNzZWQKKwlhIHBvaW50ZXIuCisJUmVtb3ZlIHRlc3RzIGZvciBaRVJPX0VYVFJBQ1QgaW4gU0VUX0RFU1QuCisJKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogTm93IHJldHVybnMgcnR4IGFuZCBpcyBwYXNzZWQgcnR4LCBpbnN0ZWFkCisJb2YgcnR4ICouCisJQ2FsbCBtYWtlX2V4dHJhY3Rpb24uCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBDYWxsIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uIGhlcmUgYW5kIHJlbW92ZSBhbnkKKwlvdXRlcm1vc3QgU1VCUkVHcyB0aGF0IGFyZW4ndCBkb2luZyBhbnl0aGluZy4KKworCSogTWFrZWZpbGUuaW4gKGNvbWJpbmUubyk6IEluY2x1ZGVzIGV4cHIuaC4KKworCSogZXhwci5jIChjb252ZXJ0X3RvX21vZGUpOiBDb3JyZWN0IHdoaWNoIGNhc2VzIGNhbiB1c2UgZ2VuX2xvd3BhcnQuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERvbid0IHNldCBJTlNOX0RFTEVURURfUCBhZnRlciB3cml0aW5nCisJaW5zbi4KKworCSogZ2Vub3V0cHV0LmMgKG1haW4pOiBEb24ndCBpbmNsdWRlIGF1eC1vdXRwdXQuYyBpbiBpbnNuLW91dHB1dC5jLgorCUluY2x1ZGUgc3RkaW8uaCBiZWZvcmUgb3V0cHV0LmguCisJKG91dHB1dF9lcGlsb2d1ZSk6IFdyaXRlIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIHByZWRpY2F0ZXMKKwlwbGFjZWQgaW4gYGluc25fb3BlcmFuZF9wcmVkaWNhdGUnLgorCSogb3V0cHV0Lmg6IE5vIGxvbmdlciBuZWVkIHRvIGRlZmluZSBvcGVyYW5kLXByZWRpY2F0ZSBmdW5jdGlvbnMuCisJKiBjb25maWd1cmU6IChtODhrL2RnKTogT25seSBkaWZmZXJlbmNlIGJldHdlZW4geG0tbTg4a3ssZGd1eH0uaCB3YXMKKwlkZWZpbml0aW9uIG9mIFNFUEFSQVRFX0FVWF9PVVRQVVQsIHNvIHdlIGRvbid0IG5lZWQgeG0tbTg4a2RndXguaC4KKwkqIHhtLW04OGtkZ3V4Lmg6IERlbGV0ZWQuCisJRml4IHR5cG8gc2V0dGluZyBgdGFyZ2V0JyBpbiBNYWtlZmlsZS4KKwkqIE1ha2VmaWxlLmluIChBVVhfT1VUUFVUMik6IERlbGV0ZWQuCisJKE9CSlMpOiBSZW1vdmUgQVVYX09VVFBVVDIgYW5kIGFkZCBhdXgtb3V0cHV0Lm8uCisJKGF1eC1vdXRwdXQyLm8pOiBOb3cgYXV4LW91dHB1dC5vLgorCShpbnNuLW91dHB1dC5vKTogTm8gbG9uZ2VyIGRlcGVuZHMgb24gYXV4LW91dHB1dC5jLgorCSogbWFrZS1tODhrZGd1eCAoQVVYX09VVFBVVDIpOiBObyBsb25nZXIgZGVmaW5lLgorCSogdG0tbTY4ay5oLCB0bS1yb21wLmgsIHRtLXNwYXJjLmg6IERlZmluZSBmdW5jdGlvbnMgaW4gb3V0LSouYyBhbmQKKwl1c2VkIGJ5IGluc24tb3V0cHV0LmMuCisJKiB0bS1tODhrLmg6IFJlbW92ZSBjb25kaXRpb25hbGl6YXRpb24gZm9yIFNFUEFSQVRFX0FVWF9PVVRQVVQ7IG5vdworCWFsd2F5cyBkb25lLgorCU5vIGxvbmdlciBkZWZpbmUgcHJlZGljYXRlIGZ1bmN0aW9uczsgZG9uZSBieSBnZW5vdXRwdXQuYy4KKwkqIHRtLW1pcHMuaDogTm8gbG9uZ2VyIGRlZmluZSBTRVBBUkFURV9BVVhfT1VUUFVULgorCSogb3V0LSouYzogQWRkIGluY2x1ZGVzIHByZXZpb3VzbHkgcHJlc2VudCBpbiBpbnNuLW91dHB1dC5jLgorCSogb3V0LXNwYXJjLmMgKG91dHB1dF9mcF9tb3ZlX2RvdWJsZSk6IE5vIGxvbmdlciBzdGF0aWMuCisJKG91dHB1dF9zaXplZF9tZW1vcCk6IE5vIGxvbmdlciBuZWVkIHRvIGRlZmluZSBhc21fb3V0X2ZpbGUgaGVyZS4KKwkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogQ29ycmVjdCB0eXBlOyBmdW5jdGlvbiBpcyB2b2lkLCBub3QgY2hhciAqLgorCitGcmkgTWF5ICAzIDAxOjA1OjQ0IDE5OTEgIE1pY2hlYWwgVGllbWFubiAgKHRpZW1hbm4gYXQgcG9nby5nbnUuYWkubWl0LmVkdSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9vbmVfdHlwZSk6IFRZUEVfRklFTERzIG1heSBjb250YWluIG90aGVyIGtpbmRzIG9mCisJX0RFQ0wgbm9kZXMgdGhhbiBqdXN0IEZJRUxEX0RFQ0wgbm9kZXMgKGluIEdOVSBDKyssIGF0IGxlYXN0KS4KKwlEb24ndCBsb29rIHRocm91Z2ggc3VjaCBub2RlcyB1bnRpbCBmdXJ0aGVyIG1vZHMgYXJlIG1hZGUgdG8gaGFuZGxlCisJdGhlbSBiZXR0ZXIuCisKK1RodSBNYXkgIDIgMTQ6NDM6NDggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBEb24ndCBzdG9yZSBlbnVtIHR5cGUgYXMgdHlwZSBvZiB2YWx1ZS4KKworCSogYy1wYXJzZS55IChZWVBSSU5ULCB5eXByaW50KTogTmV3IG1hY3JvIGFuZCBuZXcgZnVuY3Rpb24uCisKKwkqIGV4cG1lZC5jIChleHBhbmRfYW5kKTogSGFuZGxlIGJvdGggYXJncyBjb25zdGFudC4KKworCSogZXhwci5jIChzdG9yZV9maWVsZCk6IEF2b2lkIHJlZmV0Y2hpbmcgZnJvbSBiaXRmaWVsZCBpZiBwb3NzaWJsZS4KKworCSogbWF0aC02ODg4MS5oIChwb3cpOiBOZWdhdGUgeCBpZiBuZWdhdGl2ZSB3aGVuIHRha2luZyBsb2cuCisKKwkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc24pOiBGaXhlZCB0eXBvIGluIGB5MSA9IGNoYW5nZV9hZGRyZXNzJyBjYWxsLgorCVJlZW5hYmxlIHRoZSBjb2RlIHRvIG1vdmUgb2JqZWN0cyB3b3JkIGF0IGEgdGltZS4KKworVGh1IE1heSAgMiAxMjoyOToxNiAxOTkxICBFcmljIFlvdW5nZGFsZSAgKHlvdW5nZGFsZSBhdCB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBjY2NwLmMgKGhhY2tfdm1zX2luY2x1ZGVfc3BlY2lmaWNhdGlvbik6IE1vZGlmaWVkIGNvbnZlcnNpb24gb2YKKwl1bml4IGZpbGVuYW1lcyB0byBWTVMgZmlsZW5hbWVzLCBpZiBubyBWTVMgZGV2aWNlIG9yIGRpcmVjdG9yeSBpcworCXByZXNlbnQsIGFuZCBhIHVuaXggc3R5bGUgZGlyZWN0b3J5IG5hbWUgaXMgcHJlc2VudCwgdGhlbiB1c2UgdGhlCisJZmlyc3QgdW5peCBkaXJlY3RvcnkgbmFtZSBhcyB0aGUgVk1TIGRldmljZSBzcGVjLiBUaGlzIGlzIG9ubHkKKwl1c2VkIGluICcjaW5jbHVkZSA8Li4uPicgdHlwZSBpbmNsdWRlcywgd2hlbiB0aGUgaW5jbHVkZSBmaWxlIGhhcworCW5vdCBiZWVuIGZvdW5kIGluIHRoZSBzdGFuZGFyZCBsb2NhdGlvbnMuCisKK1RodSBNYXkgIDIgMTA6MDY6NDcgMTk5MSAgTWljaGVhbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBjcGx1cy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBpbml0X2djX3Byb2Nlc3NpbmcgaWYKKwktZmdjIGlzIHJlcXVlc3RlZC4KKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfbmV3KTogQXJndW1lbnQgdG8gYnVpbGRfY29tcG91bmRfZXhwciBtdXN0IGJlCisJYSBUUkVFX0xJU1QgYWxsIHRoZSB3YXkuICBUaGUgbGFzdCBlbHQgb2YgdGhlIGNoYWluIGNhbm5vdCBiZSBhbgorCV9FWFBSLgorCitUaHUgTWF5ICAyIDA3OjMzOjUwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09OVkVSVF9FWFBSKTogUGFzcyBiaXRzaXplIHRvIHN0b3JlX2ZpZWxkCisJaW5zdGVhZCBvZiBzaXplIGluIGJ5dGVzLgorCitXZWQgTWF5ICAxIDEzOjMzOjU4IDE5OTEgIE1pY2hlYWwgVGllbWFubiAgKHRpZW1hbm4gYXQgcG9nby5nbnUuYWkubWl0LmVkdSkKKworCSogdmVyc2lvbi5jOiBCdW1wZWQgdmVyc2lvbiBudW1iZXIgdG8gMS45My4KKworV2VkIE1heSAgMSAxMjoyNjozNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IFBhc3MgcGxhaW4gLW0gdG8gbGQuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZW51bSk6IENsZWFuIHVwIHJlLWxheWluZyBvdXQgb2YgdHlwZS4KKworV2VkIE1heSAgMSAwODowNDo0NCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluOiBIYW5kbGUgbmV3IGNwbHVzLSouYyBmaWxlcy4KKworCSogY3BsdXMtdHlwZWNrLmMgKGNvbW1vbl9iYXNlX3R5cGUpOiBNYWtlIHRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlLgorCShidWlsZF9jb21wb25lbnRfcmVmKTogVGVzdCB3aGV0aGVyIG9yIG5vdCBhIEZJRUxEX0RFQ0wsIG5vdCB3aGV0aGVyCisJb3Igbm90IGEgVkFSX0RFQ0x8fENPTlNUX0RFQ0x8fFRZUEVfREVDTC4KKworCSogY3BsdXMtcGFyc2UueTogRml4ZWQgZ3JhbW1hciBzbyB0aGF0IHRlbXBsYXRlIHR5cGUgZGVjbHMgY291bGQgYmUKKwl1c2VkLiAgUHJldmlvdXNseSwgc3VwcG9ydCBleGlzdGVkIGZvciB0ZW1wbGF0ZSBkZWNscyBmb2xsb3dpbmcKKwl0eXBlcywgYnV0IG5vdCBhcyB0eXBlcy4KKwkqIGNwbHVzLXB0LmMgKHtwdXNoLHBvcH1fdGVtcGxhdGVfZGVjbHMpOiBOZXcgZnVuY3Rpb25zLgorCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IENhbGwgYHB1c2hfdGVtcGxhdGVfZGVjbHMnLgorCShlbmRfdGVtcGxhdGVfaW5zdGFudGlhdGlvbik6IExldCBgcG9wbGV2ZWwnIHJlc3RvcmUgb2xkIGJpbmRpbmdzLgorCU5vIG5lZWQgdG8gY2xlYXIgb3V0IGV4dHJhIHN0dWZmLgorCShwdXNoY2xhc3MsIHBvcGNsYXNzKTogQ2FsbCBge3B1c2gscG9wfV90ZW1wbGF0ZV9kZWNscycgaWYgdGhlIGNsYXNzCisJd2UgYXJlIHB1c2hpbmcgb3IgcG9wcGluZyBoYXMgdGVtcGxhdGUgYXJndW1lbnRzLiAgVGhlc2UgYXJndW1lbnRzCisJZ28gYXQgY2xhc3MgbGV2ZWwuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFRlc3QgVFJZX1NFQ09ORCBiZWZvcmUgdGVzdGluZworCXBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgWEFSRzIuCisKKwkqIGNwbHVzLWxleC5jIChpbml0X2xleCk6IEluaXRpYWxpemUgTk9ERV9UQUJMRSwgT1BOQU1FX1RBQiBhbmQKKwlBU1NJR05PUF9UQUIgdG8gaG9sZCB6ZXJvLiAgU2luY2UgdGhlc2UgY29tZSBmcm9tIG1hbGxvYydkIG1lbW9yeSwKKwl3ZSBjYW5ub3QgdHJ1c3QgdGhlbSB0byBiZSBpbml0aWFsaXplZCBvbiBzdGFydHVwLgorCisJKiBjcGx1cy1pbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IFdoZW4gaW5pdGlhbGl6aW5nIHRocm91Z2ggYQorCVRBUkdFVF9FWFBSIGZvciBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgKGUuZy4sIFggYSA9IFggKDEwKTspCisJdXNlIEVYUCdzIERFQ0xfUlRMIGFzIHRoZSBERUNMX1JUTCBvZiB0aGUgVEFSR0VUX0VYUFIuCisKKwkqIGNwbHVzLWRlY2wyLmMgKGZpbmlzaF9maWxlKTogSGFuZGxlIG5ldyBmbGFnIGAtZmdudS1iaW51dGlscycuCisJV2hlbiB6ZXJvLCBkb24ndCB1c2UgR05VIGV4dGVuc2lvbnMgdG8gYS5vdXQgZm9ybWF0LiAgPz8/U2hvdWxkIGJlCisJbWVyZ2VkIGludG8gdmFyYXNtLmMuCisKKwkqIGNwbHVzLWNsYXNzLmM6IEFkZGVkIHN1cHBvcnQgZm9yIGBkb3NzaWVycycuICBUaGlzIHN1cHBvcnQgaXMKKwlpbXBsZW1lbnRlZCBieSBleHRlbmRpbmcgdGhlIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgYW5kIGJ5IGdpdmluZworCWFsbCBDKysgb2JqZWN0cyBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgdG8gaG9sZCBpdCdzIGRvc3NpZXIuCisJKiBjcGx1cy1kZWNsLmMgKHJlY29yZF9idWlsdGluX3R5cGUpOiBOZXcgZnVuY3Rpb24gdG8gY29uc3RydWN0CisJZG9zc2llciBpbmZvcm1hdGlvbiBmb3IgYnVpbHQtaW4gdHlwZXMuCisJKG91dHB1dF9idWlsdGluX3RkZXNjX2VudHJpZXMpOiBUbyBrZWVwIHJlcGVhdGVkIGluZm9ybWF0aW9uIHVuZGVyCisJY29udHJvbCwgd2Ugb25seSBvdXRwdXQgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpbGUgdGhhdCBjb250YWlucworCWBtYWluJy4KKwkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYW55IGRvc3NpZXItcmVsYXRlZCBjaGFuZ2VzLgkKKwkoaW5pdF9sZXgpOiBSZWNvZ25pemUgbmV3IHJlc2VydmVkIHdvcmRzIGBoZWFkb2YnIGFuZCBgY2xhc3NvZicgaWYKKwktZmdjLgorCSogY3BsdXMtcGFyc2UueTogR3JhbW1hciBub3cgcmVjb2duaXplcyBgaGVhZG9mJyBhbmQgYGNsYXNzb2YnCisJZXhwcmVzc2lvbnMuCisJKiBjcGx1cy1tZXRob2QuYzogQWRkZWQgZG9zc2llciBjb25zdHJ1Y3RvcnMgaGVyZS4KKwkqIGNwbHVzLXRyZWUuaCAoQ0xBU1NUWVBFX0RPU1NJRVIpOiBOZXcgbWFjcm86IGBkb3NzaWVyJyBpcyBhIG5ldworCWZpZWxkIGluIGxhbmdfdHlwZS4KKwkqIGNwbHVzLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogSGFuZGxlCisJYGNsYXNzX3N0YXJfdHlwZV9ub2RlJy4KKworCSogY3BsdXMtY2xhc3MuYzogTmV3IHZhcmlhYmxlIGN1cnJlbnRfY2xhc3NfZGVwdGguICBVc2VkIHRvIHRlbGwKKwl3aGF0IGNsYXNzIG5lc3RpbmcgbGV2ZWwgdGhlIGNvbXBpbGVyIGlzIGF0LgorCSogY3BsdXMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IE5vdyBzdXBwb3J0cyByZWZlcmVuY2VzIHRvIGRlY2xzCisJdGhhdCBjb21lIGZyb20gbmVzdGVkIHR5cGVzLiAgRm9yIGV4YW1wbGUsIGludCBmb286OmJhciAoZm9vX3RhZyk7CisJd2hlcmUgYGZvb190YWcnIGlzIGEgdGFnIHRoYXQgY29tZXMgZnJvbSBmb28uICBQcmV2aW91c2x5IHRoaXMgd2FzCisJc3VwcG9ydGVkIG9ubHkgYXMgaW50IGZvbzo6YmFyIChmb286OmZvb190YWcpOworCSogY3BsdXMtZGVjbDIuYyAoYnVpbGRfcHVzaF9zY29wZSk6IGJ1aWxkIGEgU0NPUEVfUkVGIG5vZGUgd2hpbGUKKwlwdXNoaW5nIGludG8gdGhlIGNvbnRleHQgZm9yIHRoZSBzY29wZS4gIFdoZW4gYGdyb2tkZWNsYXJhdG9yJyBzZWVzCisJb25lIG9mIHRoZXNlIG5vZGVzIChkaXN0aW51aXNoZWQgYnkgaXRzIFRSRUVfQ09NUExFWElUWSBiZWluZyBzZXQgdG8KKwl0aGUgY3VycmVudF9jbGFzc19kZXB0aCksIGl0IHByb2Nlc3NlcyB0aGUgZGVjbCBhbmQgcG9wcyB0aGUgc2NvcGUuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BhdGgpOiBUcnVzdCBvYmplY3RzIHRoYXQgYXJlCisJYGZpeGVkX3R5cGVfcCcuICBBbHNvLCBkb24ndCBhc3N1bWUgYW4gb2JqZWN0IGlzIG5vbi1udWxsIHVubGVzcworCWZsYWcgc2F5cyB0aGlzIGlzIGV4cGxpY2l0bHkgc28uICBJbnRlclZpZXdzIGNyZWF0ZXMgYW5kIG1heQorCW1hbmlwdWxhdGUgKHZpYSBkZWxldGUpIGxvdHMgb2YgbnVsbCBvYmplY3RzLgorCShidWlsZF92Zm5fcmVmZXJlbmNlKTogVXNlIElTX0FHR1JfVFlQRSB0ZXN0IG9uIHR5cGUsIG5vdCBpbgorCUlOU1RBTkNFLgorCShyZXNvbHZlc190b19maXhlZF90eXBlX3ApOiBOZXcgYXJndW1lbnQgTk9OTlVMTCBpcyB1c2VkIGluIGNhc2Ugd2UKKwlrbm93IGFuZCBvYmplY3QgdG8gYmUgbm9uLXplcm8uICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiBjcGx1cy1jYWxsLmM6IE5ldyBmaWxlLCBmcm9tIGZpbGUgY3BsdXMtY2xhc3MuYy4gIENvbnRhaW5zIGNvZGUgdG8KKwlnZW5lcmF0ZSBtZXRob2QgY2FsbHMuCisgCSogY3BsdXMtY2xhc3MuaDogTmV3IGZpbGUsIGNvbnRhaW5zIGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yCisJY3BsdXMtY2xhc3MuYyBhbmQgY3BsdXMtY2FsbC5jLgorCisJKiBjcGx1cy1jbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBEb24ndCBsZWF2ZSBsYXN0X2NvbnZlcnNpb25zCisJdW5pbml0aWFsaXplZC4KKworVHVlIEFwciAzMCAxNzoxNDowMCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOgorCVByZXNlcnZlIHZvbGF0aWxpdHkgd2hlbiBjaGFuZ2luZyBBUlJBWV9SRUYgdG8gdXNlIGEgcG9pbnRlci4KKworCSogdmF4Lm1kIChpbmRpcmVjdF9qdW1wKTogVXNlIHBhcmVucyBhcm91bmQgcmVnaXN0ZXIsIG5vdCBALgorCisJKiBmaXhpbmNsdWRlcyAobWFjaGluZS9jcHUuaCk6IERlbGV0ZSBzdXBlcmZsdW91cyBgc3RhdGljJy4KKworCSogdG0tZGVjc3RhdG4uaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgX19taXBzIGFuZCBfX0xBTkdVQUdFX0MuCisKKwkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogQ29tcGVuc2F0ZSBpZgorCVNUQUNLX1BPSU5URVJfT0ZGU0VUIHRocm93cyBvZmYgdGhlIGFsaWdubWVudC4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBUeXBvcyBzZXR0aW5nIG5vdF9ldmVyeV9pdGVyYXRpb24uCisKK1R1ZSBBcHIgMzAgMTY6MTA6MzIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmF4Lm1kIChiaWNiKTogRml4IHR5cG8gdGhhdCBjYXVzZWQgb3BlcmFuZCBub3QgdG8gYmUgbmVnYXRlZC4KKwkoamxicy9qbGJjKTogT3BlcmFuZFswXSBjYW5ub3QgYmUgYSBjb25zdGFudC4KKworCSogcnRsLmg6IFB1dCBOT1RFX0lOU05fLi4uIGNvZGVzIGluIG9yZGVyLgorCShmaW5kX3JlZ25vX25vdGUpOiBBZGQgbWlzc2luZyBkZWZpbml0aW9uLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBIYW5kbGUgYW4gaW5kZXhlZCBzdGFjayBzbG90IHRoYXQKKwlpcyBtYWRlIG91dCBvZiByYW5nZSBieSBmcmFtZSBwb2ludGVyIGVsaW1pbmF0aW9uLgorCitUdWUgQXByIDMwIDE0OjA5OjI4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IE91dHB1dCBnY2MyX2NvbXBpbGVkLCBub3QgZ2NjX2NvbXBpbGVkLgorCSogdG0tdG93ZXItYXMuaCAoQVNNX0lERU5USUZZX0dDQyk6IExpa2V3aXNlLgorCitUdWUgQXByIDMwIDEzOjU2OjQwIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB2YXJhc20uYyAob3V0cHV0X2FkZHJlc3NlZF9jb25zdGFudHMpOiBSZXR1cm4gYW5kIGluZGljYXRpb24gb2YKKwl3aGV0aGVyIHRoZSB2YXJpYWJsZSByZXF1aXJlcyBsaW5rLXRpbWUgcmVsb2NhdGlvbnMuCisJKGFzc2VtYmxlX3ZhcmlhYmxlLCBnZXRfb3JfYXNzaWduX2xhYmVsKTogVXNlIHRoaXMgdmFsdWUgd2hlbgorCWNob29zaW5nIHRoZSBzZWN0aW9uLiAgVXNlIHRoZSBkYXRhIHNlY3Rpb24gZm9yIHZhcmlhYmxlcyBhbmQKKwljb25zdGFudHMgdGhhdCBhcmUgb3RoZXJ3aXNlIHJlYWQtb25seSB3aGVuIC1mcGljIGlzIGdpdmVuIGFuZAorCXdoZW4gbGluay10aW1lIHJlbG9jYXRpb25zIGFyZSByZXF1aXJlZC4KKwkqIHRtLSouaCAoU0VMRUNUX1NFQ1RJT04pOiBBY2NlcHQgYSBuZXcgc2Vjb25kIHBhcmFtZXRlciBSRUxPQy4KKworVHVlIEFwciAzMCAxMDoyNDozNiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogcnRsLmggKE5PVEVfSU5TTl9MT09QX1ZUT1ApLCBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgYSBuZXcKKwlub3RlIGluZGljYXRpbmcgdGhlIHZpcnR1YWwgdG9wIG9mIGEgbG9vcC4KKwkqIGp1bXAuYyAoZHVwbGljYXRlX2xvb3BfZXhpdF90ZXN0KTogTWFyayB0aGUgZHVwbGljYXRlZCBleGl0IGNvZGUKKwlpbiB0aGUgbG9vcCBhcyB0aGUgdmlydHVhbCB0b3Agb2YgdGhlIGNvbnZlcnRlZCBsb29wLgorCShzcXVlZXplX25vdGVzKTogTW92ZSBsb29wLXZ0b3Agbm90ZXMgYXMgd2VsbC4KKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogV2hlbiBhIGxvb3AtdnRvcCBub3RlIGlzIGVuY291bnRlcmVkLCByZXNldAorCWBtYXliZV9uZXZlcicgYW5kIGBjYWxsX3Bhc3NlZCcuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFNpbWlsYXJseSwgcmVzZXQgYG5vdF9ldmVyeV9pdGVyYXRpb24nLgorCitUdWUgQXByIDMwIDA4OjE1OjUwIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBNb3ZlIHRoZSBqb2luIGxhYmVsIGFmdGVyIHNldHRpbmcgdGhlCisJdGFyZ2V0IHZhbHVlIHRvIDAsIHJhdGhlciB0aGFuIGJlZm9yZSwgd2hpY2ggZ2VuZXJhdGVzIGNvZGUgdGhhdAorCWFsd2F5cyBzdG9yZXMgMCBpbnRvIHRoZSB0YXJnZXQgaWYgdGhlIG1hY2hpbmUgZG9lcyBub3QgaGF2ZSBhCisJYnVpbHRpbiBzY2Mgb3BlcmF0aW9uLgorCitUdWUgQXByIDMwIDA2OjI2OjM2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogV2hlbiBtYWtpbmcgcmVnX2VxdWl2X21lbSBhbmQgcmVnX2VxdWl2X2FkZHJlc3MKKwlmcm9tIHJlZ19lcXVpdl9tZW1vcnlfbG9jLCBjbGVhciB0aGUgb25lIHdlIGFyZW4ndCBzZXR0aW5nOyBpdCBtaWdodAorCWhhdmUgYmVlbiBwcmV2aW91c2x5IHNldC4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQ29ycmVjdGx5IGhhbmRsZSB3aGVuIHRoZSBmaXJzdCBpbnNuIGluIGEKKwlTRVFVRU5DRSBpcyBhIEpVTVBfSU5TTiB0aGF0IGZvcmNlcyByZXN0b3JhdGlvbiBvZiBhIGNvbXBhcmlzb24KKwlwcmV2aW91c2x5IHRob3VnaHQgdW5uZWNlc3NhcnkuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBQTFVTX0VYUFIpOiBJZiB3ZSBoYXZlIDIgKiByZWFsX2NzdCwgCisJZm9sZCBpbnRvIGEgbmV3IGNvbnN0YW50IGluc3RlYWQgb2YgbWFraW5nIHJlYWxfY3N0ICsgcmVhbF9jc3QuCisKK01vbiBBcHIgMjkgMjM6MDk6MTcgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogY3BsdXMtZGVjbC5jIChvdXRwdXRfYnVpbHRpbl90ZGVzY19lbnRyaWVzKTogQ29ycmVjdGVkCisJZGVjbGFyYXRpb24gb2YgcGVybWFuZW50X29ic3RhY2suCisJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVjb3JkIGRlY2xhcmF0aW9uIG9mIGludCB3aXRoIG5hbWUgImludCIKKwlyYXRoZXIgdGhhbiBudWxsLgorCShmaW5pc2hfZGVjbCk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBNYWRlIGVycm9yIG1lc3NhZ2UgZm9yIHVuaW9uCisJbWVtYmVyIHJlcXVpcmluZyBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIGEgbGl0dGxlIHRpZGllci4KKwkocmVzb2x2ZV9zY29wZV90b19uYW1lKTogTG9vayBhdCBmaWVsZHMgb2YgY3VycmVudCB0eXBlIGFzIHdlbGwgYXMKKwl0YWdzLCBpbiBjYXNlIG9mIGxvY2FsIHR5cGVkZWZzLgorCShidWlsZF9tZXRob2RfY2FsbCk6IFBlcm1pdCBleHBsaWNpdCBjYWxsIG9mIGRlc3RydWN0b3IgaW4gY2xhc3MKKwl0aGF0IGRvZXNuJ3QgaGF2ZSBvbmUuICAoVGhhdCdzIHdoYXQgdGhlIEFSTSBzYXlzLi4uLikKKworCSogY3BsdXMtZGVjbC5jIChzZXRfbmVzdGVkX3R5cGVuYW1lKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbQorCXdpdGhpbiBwdXNodGFnLiAgRXh0ZW5kZWQgdG8gZGVhbCB3aXRoIG51bGwgY2xhc3NuYW1lLgorCShwdXNodGFnKTogQ2FsbCBpdC4KKwkocHVzaGRlY2wpOiBGb3IgYSBUWVBFX0RFQ0wsIGVuc3VyZSB0aGF0IHRoZSBuZXN0ZWQgdHlwZW5hbWUgZ2V0cworCXNldC4KKwkocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBEaXR0by4KKwkoY29uc3RydWN0b3JfbmFtZSk6IFRlc3QgdmFyaW91cyBhc3NlcnRpb25zLgorCShoYWNrX2luY29tcGxldGVfc3RydWN0dXJlcyk6IElmIHR5cGUgaXMgYSBjbGFzcyB0ZW1wbGF0ZSwgcHVudC4KKworCSogY3BsdXMtaW5wdXQuYyAoZ2V0Y2gpOiBSZW5hbWVkIGZyb20gZ2V0X2NoYXJhY3Rlci4gIENhbGxlcnMKKwljaGFuZ2VkLgorCWNwbHVzLWxleC5jIChvbGQgZ2V0Y2gpOiBEZWxldGVkLgorCisJKiBjcGx1cy1sZXguYyAoc2F2ZV9wZW5kaW5nX2lucHV0LCByZXN0b3JlX3BlbmRpbmdfaW5wdXQpOiBOZXcKKwlmdW5jdGlvbnMgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGxleGVyIHN0YXRlLgorCShwcm9jZXNzX25leHRfaW5saW5lKTogUmVzdG9yZSBsZXhlciBzdGF0ZSBhZnRlciBlYWNoIGZ1bmN0aW9uLgorCWNwbHVzLXB0LmMgKGVuZF90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogRGl0dG8uCisJY3BsdXMtaW5wdXQuYyAoc3RydWN0IGlucHV0X3NvdXJjZSwgZ2V0Y2gsIGZlZWRfaW5wdXQpOiBQcmVzZXJ2ZQorCXB1dGJhY2tfY2hhciBhbmQgbGV4ZXIgc3RhdGUuCisKKwkqIGNwbHVzLWlucHV0LmMgKGdldGNoKTogUmV0dXJuIG1hZ2ljIGNvb2tpZSBvbiBlbmQgb2Ygc2F2ZWQgaW5wdXQKKwlmb3IgbGV4ZXIgdG8gcmVjb2duaXplLgorCWNwbHVzLWxleC5jICh5eWxleCk6IFR1cm4gaXQgaW50byBFTkRfT0ZfU0FWRURfSU5QVVQuCisJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBSZXF1aXJlIGl0IGFmdGVyIGlubGluZSBmdW5jdGlvbiBib2R5LgorCisJKiBjcGx1cy1sZXguYyAoZG9fcGVuZGluZ19pbmxpbmVzKTogRG9uJ3Qgc2F2ZSBhd2F5IGN1cnJlbnQKKwlmaWxlL2xpbmUtbm8gaW5mbzsgY2hhcmFjdGVyIGlucHV0IHByb2Nlc3Npbmcgc2hvdWxkIGRvIHRoYXQuCisJKHl5dW5nZXRjKTogVHVybiBjb25kaXRpb25hbCBhYm9ydCBpbnRvIGFzc2VydGlvbiB0ZXN0LgorCShub3RlX2xpc3RfZ290X3NlbWljb2xvbik6IFNpbmNlIHZhcmlhYmxlICJ0eXBlIiBpcyBhdmFpbGFibGUsIHVzZQorCWl0IHJhdGhlciB0aGFuIHJlY29tcHV0ZS4KKwkoaWRlbnRpZmllcl90eXBlKTogTm93IHN0YXRpYy4KKwkoeXlsZXgpOiBXYXJuIGFib3V0IGNvbmZsaWN0cyB3aXRoIGNsYXNzIHRlbXBsYXRlIGV4cGFuc2lvbiBuYW1lcy4KKworCSogY3BsdXMtcGFyc2UueSAodGVtcG9yYXJ5X3Njb3BlKTogTmV3IHZhcmlhYmxlLgorCShvYmplY3QgYW5kIHNjb3BlZF9pZCBhY3Rpb25zKTogU2V0IGl0IHRvIGN1cnJlbnQgdHlwZS4KKwkobWFueSBvdGhlciBhY3Rpb25zKTogQ2xlYXIgaXQuCisJKHNjb3BlZF90eXBlbmFtZSk6IE5vdyBkZXJpdmFibGUgYWxzbyBmcm9tIHNjb3BlZF9pZCBhbmQgVFlQRU5BTUUuCisJY3BsdXMtbGV4LmMgKHl5bGV4KTogSWYgdGVtcG9yYXJ5X3Njb3BlIGlzIHNldCwgdXNlIGl0IHRvCisJZGV0ZXJtaW5lIHR5cGUgb2YgY3VycmVudCB0b2tlbiBiZWluZyBleGFtaW5lZCwgaW5zdGVhZCBvZiBsb29raW5nCisJYWx3YXlzIGluIHRoZSBnbG9iYWwgc2NvcGUuICAoQ2FuJ3QgcHJvcGVybHkgZG8gbmVzdGVkIHRlbXBsYXRlCisJY2xhc3NlcyBvdGhlcndpc2UuKQorCisJKiBjcGx1cy1wdHJlZS5jIChwcmludF9sYW5nX2RlY2wpOiBQcmludCBvdXQgdGVtcGxhdGUtaW5mbywKKwlvcmlnaW5hbC1uYW1lLCBkZWNsLW1haW4tdmFyaWFudCwgYW5kIHBlbmRpbmctaW5saW5lLWluZm8gbm9kZXMgaWYKKwlub3QgbnVsbC4KKworCSogY3BsdXMtcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogRm9yIG5lZ2F0aXZlCisJbnVtYmVycywgdXNlICJtIiBwcmVmaXggcmF0aGVyIHRoYW4gcHJpbnRmJ3MgIi0iLgorCShvdmVybG9hZF90ZW1wbGF0ZV9uYW1lKTogVGVzdCBtb3JlIGFzc2VydGlvbnMuICBVc2UKKwlTRVRfSURFTlRJRklFUl9UWVBFX1ZBTFVFIG1hY3JvLgorCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBBc3NlcnQgdGVtcGxhdGUgZGVjbCBub2RlIGlzIG5vbi1udWxsLgorCVB1c2ggdG8gcGVybWFuZW50IG9ic3RhY2tzIGZvciBuZXcgYWxsb2NhdGlvbnMuCisJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogUmV0dXJuIG5ldyBjbGFzcyB0eXBlIGluIGEgbGlzdC4KKworCSogY3BsdXMtcHQuYyAodW5kb190ZW1wbGF0ZV9uYW1lX292ZXJsb2FkKTogQ2xlYXIgdHlwZSBsb2NhbAorCWRlZmluaXRpb24gb2YgdGVtcGxhdGUgbmFtZS4KKwkoZW5kX3RlbXBsYXRlX2luc3RhbnRpYXRpb24pOiBDYWxsIGl0LgorCWNwbHVzLXBhcnNlLnkgKHN0cnVjdHNwIGFjdGlvbnMpOiBEaXR0by4KKwkobmFtZWRfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogRG9uJ3QgY2FsbAorCW92ZXJsb2FkX3RlbXBsYXRlX25hbWUgaGVyZS4KKwkobmFtZWRfY2xhc3NfaGVhZCk6IENhbGwgeHJlZl90YWcsIHRvIGRlZmluZSBhIHRhZywgYmVmb3JlIGNhbGxpbmcKKwlpdCBoZXJlLgorCisJKiBjcGx1cy1wYXJzZS55ICh0bXBsLjEsIHRtcGwuMik6IERlbGV0ZSB0eXBlIGRlY2xhcmF0aW9ucywgc2luY2UKKwl0aGV5IGhhdmUgbm8gdmFsdWVzLgorCSh5eXByaW50LCBZWVBSSU5UKTogTmV3IGZ1bmN0aW9uIGFuZCBtYWNybyB0byB3b3JrIHdpdGggZGVidWdnaW5nCisJY29kZSBhZGRlZCB0byBiaXNvbi4KKwkoZGF0YWRlZiAtPiB0ZW1wbGF0ZV9oZWFkZXIuLi4gYWN0aW9ucyk6IEFzc2lnbiB5eWNoYXIsIHJhdGhlcgorCXRoYW4gY2FsbGluZyB5eXVuZ2V0YyBhbmQgeXlsZXguICBSZXF1aXJlIHRyYWlsaW5nIHNlbWljb2xvbi4KKwkoZm4uZGVmMSAtPiBQUkVfUEFSU0VEX0ZVTkNUSU9OX0RFQ0wgYWN0aW9uKTogUHJlc2VydmUgYWxsIG9mCisJdGVybWluYWwgdmFsdWUsIGluc3RlYWQgb2YganVzdCBUUkVFX1BVUlBPU0UuCisJKHRtcGwuMSBhY3Rpb24pOiBEbyBpbnN0YW50aWF0aW9uIG9ubHkgaWYgJ3snIG9yICc6JyBub3QgZm91bmQuCisJKHRlbXBsYXRlX2luc3RhbnRpYXRpb24pOiBDYWxsIG92ZXJsb2FkX3RlbXBsYXRlX25hbWUgcmlnaHQgYXdheS4KKwkocHJpbWFyeSAtPiAuc2NvcGUgbmV3ICcoJyB0eXBlbmFtZSAnKScgJ1snIC4uLik6IERldGVjdCBhbmQgd2FybgorCWFib3V0IHRoaXMgY29uc3RydWN0LCB3aGljaCBhcHBlYXJzIHRvIGJlIHJlY29nbml6ZWFibGUsIHRob3VnaAorCWRpc2FsbG93ZWQgYnkgdGhlIEFSTS4KKwkocHJpbWFyeSAtPiBkZWxldGVbXSk6IFJldHVybiBlcnJvcl9tYXJrX25vZGUuCisJKHByaW1hcnkgLT4gb2JqIFRZUEVTUEVDOjp+VFlQRVNQRUMoKSk6IENhdGNoLCBwYXJzZSBhcyB2YWxpZC4KKwlSZXR1cm5lZCB2YWx1ZSBub3QgZGV0ZXJtaW5lZCB5ZXQuCisJKHR5cGVzcGVjKTogTm8gbG9uZ2VyIGRlcml2ZWQgZnJvbSBQVFlQRU5BTUUuCisJKExDKTogQWRkZWQgbWlzc2luZyBzZW1pY29sb24gYXQgZW5kIG9mIHJ1bGUuCisJKHN0bXQpOiBBIFBUWVBFTkFNRSBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgbGFiZWwgbmFtZS4KKworTW9uIEFwciAyOSAyMjoxODo0NyAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHRtLWF0dDM4Ni5oIChBU01fT1VUUFVUX0xPQ0FMKTogQWxpZ24gc3RhdGljIGxvY2FsIHZhcmlhYmxlcy4KKworTW9uIEFwciAyOSAxNToyMDozNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IGFzc3VtZSBhbiBhZGRyZXNzIGlzIG5vbnplcm8uCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBMaWtld2lzZS4KKworCSogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IE5vIHdhcm5pbmcgZm9yIGNhc3Qgb2YgY2FzdCBvZiBtb2RpZnkuCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBSZW1vdmUgZmxvYXQuaC4KKworTW9uIEFwciAyOSAxMzo0Njo0OCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogV2hlbiBzZWUgYSBSRUdfRVFVQUwgbm90ZSwgY2hlY2sgZm9yIGJvdGgKKwl0aGUgbW92ZV9pbnNuIGFuZCB0aGUgUkVHX1JFVFZBTCBjYXNlLCBzaW5jZSB0aGV5IGNhbiBvY2N1ciB0b2dldGhlci4KKwkobW92ZV9tb3ZhYmxlcyk6IEZvciB0aGUgbW92ZV9pbnNuIGNhc2UsIGhhbmRsZSBsaWJyYXJ5IGNhbGxzIGp1c3QKKwlsaWtlIHRoZSBvbGRlciBub3JtYWwgY2FzZSBjb2RlIGJlbG93LCB0aGF0IGlzLCBza2lwIHRvIHRoZSBlbmQgb2YgYQorCWxpYnJhcnkgY2FsbCB3aGVuIHdoZW4gc2VlIGEgUkVHX0xJQkNBTEwgbm90ZSwgYW5kIGRlbGV0ZSBhbiBlbnRpcmUKKwlsaWJyYXJ5IGNhbGwgaWYgd2hlbiBzZWUgYSBSRUdfUkVUVkFMIG5vdGUuCisKK01vbiBBcHIgMjkgMTI6NTg6MTkgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBjeWdudXMuY29tKQorCisJKiBzY2hlZC5jOiAoc2NoZWR1bGVfYmxvY2spOiBSZXdyaXRlIGNvZGUgdGhhdCBjb21wdXRlcyB3aGljaAorCXJlZ2lzdGVycyBhcmUgbGl2ZSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIENvbXB1dGUgdGhpcyBmcm9tCisJYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCBpbmZvIG9mIGN1cnJlbnQgYmxvY2ssIGluc3RlYWQgb2YgZnJvbQorCWFsbCByZWFjaGFibGUgYmxvY2tzLiAgUHJldmlvdXMgY29kZSBmYWlsZWQgaWYgb25lIG9mIHRoZQorCXJlYWNoYWJsZSBibG9ja3MgY29uc2lzdGVkIG9mIGRlYWQgY29kZS4KKwkoc2NoZWRfbm90ZV9zZXQpOiBTZXQgYmJfbGl2ZV9yZWdzIHdoZW4gREVBVEggaXMgZmFsc2UuCisKKwkqIHNjaGVkLmM6IFVwZGF0ZSBjb3B5cmlnaHQuICBDb3JyZWN0IHZhcmlvdXMgcHJvYmxlbXMgd2l0aAorCWluZGVudGF0aW9uIGFuZCB3aGl0ZSBzcGFjZS4KKwkoY2Fub25fcnR4KTogRGVsZXRlIG9ic29sZXRlIGNvZGUgaGFuZGxpbmcgSU5TTl9MSVNUIHJ0eC4gIEFkZAorCWNvZGUgdG8gcmVjdXJzZSBvbiB0aGUgb3BlcmFuZHMgb2YgYSBQTFVTIHJ0eC4KKwkoZmluZF9zeW1ib2xpY190ZXJtKTogTmV3IGZ1bmN0aW9uLiAgUmVjdXJzaXZlbHkgc2VhcmNoIGFuIHJ0eCBmb3IKKwlhIFNZTUJPTF9SRUYgb3IgYSBMQUJFTF9SRUYgYW5kIHJldHVybiBwb2ludGVyIHRvIG9uZSBpZiBmb3VuZC4KKwkobWVtcmVmc19jb25mbGljdF9wKTogTm8gbG9uZ2VyIG5lZWRzIHRvIGNhbGwgY2Fub25fcnR4IG9uCisJb3BlcmFuZHMgb2YgYSBwbHVzLiAgTm93IGhhbmRsZXMgY2FzZSBvZiB0d28gYWRkcmVzc2VzIHdpdGgKKwlkaWZmZXJlbnQgYmFzZSBhZGRyZXNzZXMuCisJKHNjaGVkdWxlX2Jsb2NrKTogRG9uJ3Qgc2V0IElOU05fREVMRVRFRF9QIGJpdCBvZiBpZ25vcmVkIG5vdGVzLgorCVZlcmlmeSB0aGF0IFJFR19ERUFEIG5vdGVzIGhhdmUgYSByZWdpc3RlciB2YWx1ZS4KKwkoc2NoZWRfYW5hbHl6ZV8xKTogSWZkZWYgb3V0IG9ic29sZXRlIGNvZGUgd2hpY2ggY2FsY3VsYXRlcyBjYzAKKwlkZXBlbmRlbmNpZXMuCisJKHNjaGVkX2FuYWx5emUpOiBMaWtld2lzZS4KKwkoc2NoZWR1bGVfYmxvY2spOiBMaWtld2lzZS4KKwkobGF1bmNoX2xpbmtzKTogRGVsZXRlIG9ic29sZXRlIGNvZGUgZm9yIGhhbmRsaW5nIFNQQVJDCSdvcmNjJyBpbnNucy4KKworTW9uIEFwciAyOSAxMjowOTozMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogQWxsb3cgc3BhY2VzIGJldHdlZW4gb3B0aW9ucyBhbmQgdGhlaXIgYXJncy4KKworTW9uIEFwciAyOSAwNjozNTowOSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBlbWl0IGp1bXAgdG8gbmV4dCBpbnNuOyB0aGlzIHdvdWxkCisJY2F1c2UganVtcF9vcHRpbWl6ZSB0byBsb29wLgorCShqdW1wX29wdGltaXplLCBkdXBsaWNhdGVfbG9vcF9lbmRfdGVzdCwgZG9fY3Jvc3NfanVtcCk6IE5ldmVyIHB1dAorCWluc24gaW4ganVtcF9jaGFpbiBpZiBpdHMgSU5TTl9VSUQgaXMgdG9vIGxhcmdlLgorCShyZWRpcmVjdF90YWJsZWp1bXApOiBMaWtld2lzZS4KKworU3VuIEFwciAyOCAwODowMDowMSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNZXJnZSBjaGFuZ2VzIGluIGJ1aWx0aW4KKwlmdW5jdGlvbiBoYW5kbGluZyB0byBtYXRjaCB0aGUgd2F5IHRoYXQgYy1kZWNsLmMgbm93IHdvcmtzLgorCUFsc28gYWRkIGdsb2JhbCB2YXJpYWJsZXMgdG8gc3VwcG9ydCB0aGF0IGNoYW5nZS4KKwkoZGVmaW5lX2Z1bmN0aW9uKTogRGl0dG8uCisKKwkqIGNwbHVzLWRlY2wyLmM6IEFkZCBmbGFncyBmb3IgZ2MgYW5kIHhyZWYuCisJKiBjcGx1cy10cmVlLmggKERFQ0xfR0NfT0ZGRVNUKTogTmV3IG1hY3JvIGZvciBnYy4KKwkqIGNwbHVzLXRyZWUuaDogUmVhcnJhbmdlIENMQVNTVFlQRV9BU1NPQyBhbmQgQ0xBU1NUWVBFX0JBU0VUWVBFUyBzbworCXRoYXQgdGhlIGZvcm1lciBub3cgdXNlcyBUWVBFX0xBTkdfU1BFQ0lGSUMgc3RvcmFnZSwgYW5kIHRoZSBsYXR0ZXIKKwl1c2VzIFRZUEVfQkFTRVRZUEVTLgorCSogY3BsdXMtdHJlZS5oOiBDaGFuZ2Ugb3ZlcmxvYWQgbmFtZXMgb2YgbmV3IGFuZCBkZWxldGUgdG8gYG53JyBhbmQKKwlgZGwnLiAgRm9ybWVybHksIGBuZXcnIHdhcyBiZWluZyBzZWVuIGFzIGBuZScsIHRoZSBlbmNvZGluZyBmb3IgYG5vdAorCWVxdWFsJy4KKworCSogY3BsdXMteHJlZi5jOiBOZXcgZmlsZS4gIEFkZHMgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZworCWNyb3NzLXJlZmVyZW5jZSBpbmZvcm1hdGlvbiBzdWNoIGFzIGEgY2xhc3MgYnJvd3NlciBvciBwcm9ncmFtCisJYW5hbHl6ZXIgd291bGQgdXNlLgorCisJKiBjcGx1cy1nYy5jOiBOZXcgZmlsZS4gIEFkZCBzdXBwb3J0IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogVGllIGRlY2xzIHRvIHRoZWlyIHBsYWNlcyBpbiB0aGUKKwlnYXJiYWdlIGNvbGxlY3Rvci4KKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfbmV3KTogQWRkZWQgaG9va3MgZm9yIGdjLgorCSogY3BsdXMtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogcHJvdGVjdCBhcmd1bWVudHMgZnJvbSB0aGUKKwlnYXJiYWdlIGNvbGxlY3RvciBpZiAtZmdjLgorCShidWlsZF9tb2RpZnlfZXhwcik6IE1vcmUgZ2MtcmVsYXRlZCBjaGFuZ2VzLgorCitGcmkgQXByIDI2IDA3OjMxOjI2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWRkIG1pc3NpbmcgaW5jcmVtZW50IG9mIEkuCisKK1RodSBBcHIgMjUgMTE6MDc6MTEgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKHZhcmlvdXMgcGF0dGVybnMpOiBVc2Ugbm9uaW1tZWRpYXRlX29wZXJhbmQgaW4gcGxhY2Ugb2YKKwlyZWdfb3Jfbm9uc3ltYl9tZW1fb3BlcmFuZCBhbmQgY29uc3RyYWludCBgbScgaW4gcGxhY2Ugb2YgYFEnLgorCSogdG0tbTg4ay5oIChFWFRSQV9DT05TVFJBSU5UKTogT25seSBuZWVkZWQgZm9yIGEgY2FsbCBhZGRyZXNzLgorCSogb3V0LW04OGsuYzogcmVnX29yX25vbnN5bWJfbWVtX29wZXJhbmQgYW5kIHN5bWJvbGljX21lbW9yeV9wIGFyZQorCW5vdyB1bnVzZWQuCisKKwkqIG04OGsubWQgKHN5bWJvbGljIHN0b3JlIHBhdHRlcm5zKTogVGhlc2UgcGF0dGVybnMgYXJlIGFsbAorCXVubmVjZXNzYXJ5IGFuZCBhcmUgZGVsZXRlZC4KKwkqIG91dC1tODhrLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEVsaW1pbmF0ZSB0aGUgY2FzZSB0aGF0CisJZ2VuZXJhdGVkIGEgQ0xPQkJFUi4gIFRoaXMgd2FzIGludGVuZGVkIHRvIHVzZSB0aGUgc3ltYm9saWMgc3RvcmUKKwlwYXR0ZXJucywgYnV0IGlzbid0IG5lZWRlZC4KKwkoc3ltYm9saWNfbWVtb3J5X29wZXJhbmQpOiBEZWxldGUsIG5vIGxvbmdlciB1c2VkLgorCShvdXRwdXRfcHJvbG9ndWUpOiBEb24ndCBjaGVjayBmb3Igc3VzcGljaW91cyByZWdpc3RlciBlbGltaW5hdGlvbgorCWNoYW5nZXMuCisJKiB0bS1tODhrLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFRyZWF0IHRoZSBmcmFtZSBwb2ludGVyCisJbGlrZSB0aGUgYXJndW1lbnQgcG9pbnRlciBhcyBib3RoIG1heSBjaGFuZ2UgdG8gUkVHK1NNQUxMSU5ULgorCitUdWUgQXByIDIzIDE1OjA4OjAzIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgY3lnbnVzLmNvbSkKKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9zY2NfaW5zbik6IENsZWFuIHVwIGFuZCBleHBhbmQgY29tbWVudHMuCisJRG9uJ3QgYXNzdW1lIHRoYXQgSlVNUF9MQUJFTCBmaWVsZHMgYXJlIGFsd2F5cyB2YWxpZCwgdGhleSBhcmVuJ3QKKwl3aGVuIGNvbXBpbGluZyB3aXRob3V0IG9wdGltaXphdGlvbi4KKworTW9uIEFwciAyMiAxMzo1Njo0MyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNsYXNzLmMgKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogVGhvcm91Z2hseSB1cGRhdGUgdmlydHVhbAorCWZ1bmN0aW9uIHRhYmxlcyB0aGF0IGNvbWUgZnJvbSBiYXNlY2xhc3NlcyB0byBjb250YWluIHRoZSBsYXRlc3QKKwlvdmVycmlkZXMgZnJvbSBkZXJpdmVkIGNsYXNzZXMuICBUaGlzIHdhcyBkb25lIChpbiBhIGRpZmZlcmVudCB3YXkpCisJZm9yIHZpcnR1YWwgYmFzZWNsYXNzZXMsIGJ1dCBsZWZ0IHVuZG9uZSBmb3Igbm9uLXZpcnR1YWwKKwliYXNlY2xhc3Nlcy4KKwkoZmluaXNoX3N0cnVjdF9iaXRzKTogVXNlIGFzc29jIGxpc3RzIGluc3RlYWQgb2YgY2xhc3MgYmFzZXR5cGUgbGlzdAorCXRvIHdhbGsgdGhyb3VnaCB0aGUgY2xhc3NlcyBiYXNlIGNsYXNzZXMuICBUaGlzIGdpdmVzIHVzIG1vcmUKKwlyZWxhdmFudCBjbGFzc2VzIHRvIGNoZWNrIGFnYWluc3QuCisJKiBjcGx1cy1pbml0LmMgKGluaXRfdmZpZWxkcyk6IE5ldyBmdW5jdGlvbiB0byByZWN1cnNpdmVseSB3YWxrCisJb2JqZWN0cyBhbmQgbWFrZSBzdXJlIHRoZWlyIHZmaWVsZHMgYXJlIGluaXRpYWxpemVkLgorCSogY3BsdXMtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IENhbGwgYGluaXRfdmZpZWxkcycgZnJvbSB0b3AgbGV2ZWwuCisKKwkqIGNwbHVzLXRyZWUuaCAoVFlQRV9JREVOVElGSUVSKTogTmV3IG1hY3JvLCBnaXZlcyB0aGUKKwlJREVOVElGSUVSX05PREUgZm9yIGEgZ2l2ZW4gYWdnciBUWVBFLgorCSogY3BsdXMtY2xhc3MuYyAoYWRkX21ldGhvZCk6IFVzZSBUWVBFX0lERU5USUZJRVIuCisJKiBjcGx1cy1jdnQuYyAodmFyaW91cyBwbGFjZXMpOiBEaXR0by4KKworCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IEFkZCBUWVBFX0RFQ0xzIHRvIHRoZSBsaXN0IG9mIGEKKwljbGFzcydzIG1lbWJlcnMgdGhhdCBjb21lIGZyb20gdGhlIHR5cGVzIGltcGxpY2l0bHkgZGVjbGFyZWQgdGFncy4KKworCSogY3BsdXMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IElmIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYHN0YXRpYworCWlubGluZScsIGRvbid0IGdpdmUgaXQgZ2xvYmFsIHZpc2liaWxpdHksIHJlZ2FyZGxlc3Mgb2Ygd2hhdCAjcHJhZ21hCisJaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uIHN1Z2dlc3RzLgorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6ID8/PyBRdWVzdGlvbmFibGUgY2hhbmdlIGZvciBQSUM6CisJZG9uJ3QgbGV0IGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgdGhhdCBtYW5pcHVsYXRlIHZ0YWJsZXMgZ28KKwlpbmxpbmUsIHNpbmNlIHRoaXMgc29tZWhvdyByZWR1Y2VzIHBhZ2Ugc2hhcmluZy4gIFJlYWxseT8/PworCisJKiBjcGx1cy1leGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFVzZSBgcHVzaGRlY2wnIHRvCisJaW5zdGFsbCBnbG9iYWwgaW5mbyB0aGF0IHRoaXMgZnVuY3Rpb24gc2V0cyB1cC4gIFRoYXQgd2F5IGxhdGVyCisJZGVjbHMgY2FuIG92ZXJyaWRlIHRoaXMgaW5mbyAoc3VjaCBhcyB3aXRoIGFuIGlubGluZSBmdW5jdGlvbikuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IFNldCBUUkVFX1NJREVfRUZGRUNUUyBvZgorCWNvbnRyb2xsZXIuICBPdGhlcndpc2UgdGhlIGxvb3Agd29uJ3QgZXhlY3V0ZS4KKworCSogY3BsdXMtbWV0aG9kLmMgKHByZXBhcmVfaW5saW5lKTogUmV3cml0dGVuIGFuZCBzaW1wbGlmaWVkLgorCShkb19pbmxpbmVfbWV0aG9kX2hhaXIpOiBEaXR0by4KKworCSogY3BsdXMtdHJlZS5jIChsYW5nX291dHB1dF9kZWJ1Z19pbmZvKTogT25seSBvdXRwdXQgbmVzdGVkIHR5cGUgaWYKKwl3ZSB3b3VsZCBhbHNvIG91dHB1dCBlbmNsb3NpbmcgdHlwZS4KKworCSogY3BsdXMtdHlwZWtjLmMgKGNfZXhwYW5kX3JldHVybik6IFVzZSBwc2V1ZG8gZm9yIGludGVybWVkaWF0ZQorCXJldHVybiB2YWx1ZSBpZiBuZWNlc3NhcnkuICBHQ0MgY2FuJ3QgcmVhZCB0aGUgZnVuY3Rpb24gcmV0dXJuCisJcmVnaXN0ZXJzIGluIGFuIGlubGluZSBmdW5jdGlubyB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgYmVpbmcKKwlpZ25vcmVkLgorCitNb24gQXByIDIyIDE0OjM2OjAxIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgY3lnbnVzLmNvbSkKKworCSogc2NoZWQuYyAoaW5pdF9hbGlhc19hbmFseXNpcyk6IEhhbmRsZSBSRUdfRVFVSVYgbm90ZXMganVzdCBsaWtlCisJUkVHX0VRVUFMIG5vdGVzLgorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplXzIpOiBEb24ndCByZWN1cnNlIG9uIGNvbnN0YW50IHJ0eCdzLgorCVRoaXMgaXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhlIGNjMF9ydHggaW4gQ09OU1RfRE9VQkxFcyB3b24ndCBiZSBzZWVuLgorCShzY2hlZF9hbmFseXplKTogQ2FsbCBzY2hlZF9hbmFseXplX2luc24gZm9yIEpVTVBfSU5TTlMJYWxzbywgc28KKwl0aGF0IGNjMCB1c2VycyB3aWxsIGdldCBhbiBhdXRvbWF0aWMgZGVwZW5kZW5jZSBvbiB0aGVpciBwcmV2aW91cworCWluc24uCisJKGxhdW5jaF9saW5rcyk6IElmZGVmIG91dCBzcGVjaWFsIHRyZWF0bWVudCBvZiBpbnNucyB3aGljaCBzZXQgdGhlCisJY29uZGl0aW9uIGNvZGVzLiAgVGhpcyBpcyBvYnNvbGV0ZSwgYW5kIHdhcyBTUEFSQyBzcGVjaWZpYyBhbnl3YXlzLgorCShuZXdfc29tZXRpbWVzX2xpdmUpOiBDbGFyaWZ5IGNvZGUgdGhhdCBhYm9ydHMgaWYgcmVnbm8gaXMgZ3JlYXRlcgorCXRoYW4gbWF4X3JlZ25vLgorCShzY2hlZHVsZV9ibG9jayk6IElmIHRoZSBsYXN0IGluc24gc2V0cyBjYzAsIHRoZW4gaXQgbXVzdCBhbHdheXMKKwliZSBsZWZ0CWluIHBsYWNlLgorCShuZXdfaW5zbl9kZWFkX25vdGVzKTogTmV3IGZ1bmN0aW9uLiAgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgU0VUIG9yCisJQ0xPQkJFUiBpbiBhbiBpbnNuIGNyZWF0ZWQgYnkgc3BsaXR0aW5nIG5lZWRzIGEgUkVHX0RFQUQgb3IKKwlSRUdfVU5VU0VEIG5vdGUgYWRkZWQuCisJKHVwZGF0ZV9saW5rcyk6IElnbm9yZSBSRUdfRVFVSVYgYW5kIFJFR19FUVVBTCBub3RlcyBvbiBpbnNucyB0aGF0CisJaGF2ZSBtb3JlIHRoYW4gb25lIHNldC4gIEdlbmVyYWxpemUgZmxvdyBhbmFseXNpcyBvZiB0aGUgc2V0cyBpbgorCXRoZSBuZXcgaW5zbnMgc28gdGhhdCBpdCBjYW4gaGFuZGxlIG5ldyBpbnNucyB3aGljaCBoYXZlIG11bHRpcGxlCisJc2V0cyBvciBuZXcgY2xvYmJlcnMuCisKK01vbiBBcHIgMjIgMDg6MTU6NTAgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIGdjYy5jIChpbnB1dF9zdWZmaXgpOiBOZXcgZ2xvYmFsIHZhcjsgaG9sZHMgY3VycmVudCBmaWxlJ3Mgc3VmZml4LgorCShoYW5kbGVfYnJhY2VzKTogU3Vic3RpdHV0ZSBYIGluICV7LlM6WH0gaWYgdGhlIGN1cnJlbnQgZmlsZSBoYXMKKwlzdWZmaXggLlMuICBTaW1pbGFybHksIHN1YnN0aXR1dGUgWCBpbiAleyEuUzpYfSBpZiB0aGUgY3VycmVudCBmaWxlCisJZG9lcyBub3QgaGF2ZSBzdWZmaXggLlMuCisJKHZhbGlkYXRlX3N3aXRjaGVzKTogSWdub3JlIC5TIHBhcnQgaW4gJXsuUzpYfSBjb25zdHJ1Y3QuCisKK1NhdCBBcHIgMjAgMTQ6NDE6MTcgMTk5MSAgTWljaGVhbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChsZWFmX2Z1bmN0aW9uX3ApOiBEZWZpbmUgdGhpcyBpbiBhbnkgZXZlbnQuCisKK1NhdCBBcHIgMjAgMTA6NDU6NDMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVc2UgR0VUX1JUWF9DTEFTUyB3aGVuIGFwcHJvcHJpYXRlLgorCUNoZWNrIGZvciBzZXR0aW5nIGJpdiB3aXRoIHNpbmdsZV9zZXQgcmF0aGVyIHRoYW4gb25seSBhbGxvd2luZyBhIFNFVC4KKwlJZiBhIGxvb3AgaGFzIGEgYGJyZWFrJywgd2UgY2FuJ3QgcmV2ZXJzZSBpdC4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRm9sZCBpbnNpZGUgb3BlcmFuZHMgb2YgYSBDQUxMIChtb3N0bHkgdG8gZmluZCB0aGUKKwliZXN0IGFkZHJlc3MgZm9ybSB0byB1c2UpLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogQ29udmVydCAobmVnIChuZWcgLi4pKSB0byBORUcuCisJU2ltaWxhcmx5IGZvciBOT1QuCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBTaW1wbGlmeSB0aGluZ3MgbGlrZSAoLWEpICsgYi4KKwlDb252ZXJ0IFVESVYgd2l0aCBkaXZpc29yIGEgY29uc3RhbnQgcG93ZXIgb2YgdHdvIGludG8gTFNISUZUUlQuCisJU2ltaWxhcmx5IGZvciBVTU9ELgorCU9ubHkgZm9sZCBzaGlmdHMgb2YgYSB6ZXJvIGJ5IGEgdmFsdWUgaW50byB6ZXJvIGlmIHRoZSB2YWx1ZSBoYXMKKwlubyBzaWRlIGVmZmVjdHMuCisJUmVtb3ZlIGNvZGUgdG8gaGFuZGxlIG5lZ2F0aXZlIHNoaWZ0IGNvdW50cy4KKworCSogdG0tYTI5ay5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IEFsbG93IGluc24gc2NoZWR1bGluZyB0byBiZQorCWVuYWJsZWQsIG5vdyB0aGF0IGl0IHdvcmtzIGZvciB0aGUgMjlrLgorCisJKiB0bS1yczYwMDAuaCAoTElOS19TUEVDKTogQWRkICItYmhhbHQ6NCIgdG8gTElOS19TUEVDIChkb24ndCBhc2shKS4KKworRnJpIEFwciAxOSAxMzoxODo1MiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBsb3cuYyAobWVtb3J5X2FkZHJlc3MpOiBUZXN0IGBjc2Vfbm90X2V4cGVjdGVkJyBpbnN0ZWFkIG9mCisJYG9wdGltaXplJyBzbyB0aGF0IHdlIGRvbid0IG1ha2UgbmV3IHBzZXVkb3MgYWZ0ZXIgZmxvdyBpcyBydW4uCisKKwkqIGdlbmZsYWdzLmMgKGdlbl9pbnNuKTogSWYgZXh0cmEgY29uZGl0aW9uIGlzIG1vcmUgdGhhbiBvbmUgbGluZSwKKwl1c2UgXCdzIHRvIG1ha2UgcHJvcGVyIG11bHRpLWxpbmUgbWFjcm8gZGVmaW5pdGlvbi4KKworVGh1IEFwciAxOCAxMzo0MDowMSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogUmVlbmFibGUgbm9fdXNlX2V4Y2VwdF9mb3JfY291bnRpbmcgY29kZQorCXdoaWNoIHdhcyBtaXN0YWtlbmx5IGlmZGVmZWQgb3V0IGFzIGJ1Z2d5LiAgVGhlIGFjdHVhbCBidWcgd2FzIGluCisJc3RyZW5ndGhfcmVkdWNlLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBmaXhlZC4KKworVGh1IEFwciAxOCAwOTo0NzoyNSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHJlY29yZF9naXYpOiBBbGxvdyBmb3IgdGhlIGNhc2Ugd2hlcmUgcmVnbm9fbGFzdF91aWQKKwlvZiBERVNUX1JFRyBoYXMgYmVlbiBtb3ZlZCBvciBkZWxldGVkLgorCisJKiBydGxhbmFsLmMgKHJlcGxhY2VfcmVncyk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IGluIHJlY3Vyc2l2ZSBjYWxsLgorCisJKiByZWNvZy5jIChub25tZW1vcnlfb3BlcmFuZCk6IE9ubHkgY2FsbCBnZW5lcmFsX29wZXJhbmQgZm9yCisJYSBTVUJSRUcgaWYgaXQgaXMgYSBNRU0sIGp1c3QgbGlrZSByZWdpc3Rlcl9vcGVyYW5kLgorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IEhhbmRsZSBjYXNlIHdoZXJlIHRoZSBsYXN0IGluc24gb2YKKwlhIFJFR19OT19DT05GTElDVCBibG9jayByZXF1aXJlcyBzb21lIENMT0JCRVJzLCBidXQgaXMgYSBzaW5nbGUgU0VULgorCisJKiBvdXQtcm9tcC5jLCBvdXQtcnM2MDAwLmMgKG5leHRfaW5zbl90ZXN0c19ub191bnNpZ25lZCk6IElmIGEKKwlSRUdfVU5VU0VEIG5vdGUgZm9yIChjYzApIGlzIHByZXNlbnQgb24gSU5TTiwgcmV0dXJuIDEuCisKKwkqIGp1bXAuYyAoZGVsZXRlX2p1bXApOiBJZiB0aGUgcHJldmlvdXMgaW5zbiBzZXRzIGNjMCBidXQgd2UgY2FuJ3QKKwlkZWxldGUgaXQgZm9yIHNvbWUgcmVhc29uLCBhZGQgYSBSRUdfVU5VU0VEIG5vdGUgZm9yIGNjMCBpbiB0aGF0IGluc24uCisKKwkqIG91dC1hMjlrLmM6IFJlbmFtZSBpbnB1dF9vcGVyYW5kIHRvIGluX29wZXJhbmQgYW5kIG91dHB1dF9vcGVyYW5kCisJdG8gb3V0X29wZXJhbmQgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBvdXRwdXRfb3BlcmFuZCBpbiBmaW5hbC5jLgorCSogYTI5ay5tZDogTGlrZXdpc2UuCisJKGNhbGwgcGF0dGVybnMpOiBEb24ndCBwdXQgU1lNQk9MX1JFRiBpbiBNRU0gZm9yIHJlY3Vyc2l2ZSBjYWxsOworCWl0IG1pZ2h0IG5vdCBiZSByZWN1cnNpdmUgaWYgaW5saW5lZDsgbGV0IGNzZSBkbyBpdCBsYXRlci4KKwkqIHRtLWEyOWsuaCAoUlRYX0NPU1QsIEFERFJFU1NfQ09TVCk6IEFsbCBhZGRyZXNzZXMgaGF2ZSB0aGUgc2FtZQorCWNvc3QsIGJ1dCBNRU0gaXMgZXhwZW5zaXZlLgorCitUdWUgQXByIDE2IDE2OjAxOjQ3IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjb25maWd1cmU6IEFkZCBvc2Zyb3NlLCBvc2YsIGFuZCBtaXBzL2RlYy1vc2Zyb3NlLgorCisJKiBvdXQtbWlwcy5jICh0b3BsZXZlbCk6IEluY2x1ZGUgbmVjZXNzYXJ5IGluY2x1ZGUgZmlsZXMgc28KKwlvdXQtbWlwcy5jIGNhbiBiZSBjb21waWxlZCBzZXBhcmF0ZWx5LgorCShnX3N3aXRjaF92YWx1ZSk6IE5ldyB2YXJpYWJsZSB0byBob2xkIC1HIHh4IHZhbHVlLgorCShnX3N3aXRjaF9zZXQpOiBOZXcgdmFyaWFibGUgdG8gaW5kaWNhdGUgaWYgLUcgeHggdXNlZC4KKwkoY3VycmVudF9mdW5jdGlvbl9maWxlKTogTmV3IHZhcmlhYmxlIHRvIGhvbGQgbGFzdCAuZmlsZS4KKwkoZmlsZV9pbl9mdW5jdGlvbl93YXJuaW5nKTogTmV3IHZhcmlhYmxlIHRvIGhvbGQgaWYgd2UndmUgd2FybmVkIHRoZQorCXVzZXIgdGhhdCBFQ09GRiBjYW4ndCBzd2l0Y2ggZmlsZXMgd2l0aGluIGEgZnVuY3Rpb24uCisJKG1pcHNfcnR4X2NsYXNzaWZ5KTogTmV3IGFycmF5IHRvIGNsYXNzaWZ5IGFuIGluc24uCisJKG1pcHNfcmVnX25hbWVzKTogTmV3IGFycmF5IHRvIGhvbGQgdGhlIHJlZ2lzdGVyIG5hbWVzLgorCVJFR0lTVEVSX05BTUVTIGluaXRpYWxpemVzIGFsbCBlbGVtZW50cyB0byBwb2ludCBpbnRvIGhlcmUsIGFuZAorCW92ZXJyaWRlX29wdGlvbnMgcmVzZXRzIHRoZSBuYW1lcyBpZiAtbXJuYW1lcyBpcyB1c2VkLgorCShtaXBzX3N3X3JlZ19uYW1lcyk6IE5ldyBhcnJheSB0byBob2xkIHRoZSBhbHRlcm5hdGUgcmVnaXN0ZXIgbmFtZXMuCisJKG1pcHNfcmVnbm9fdG9fY2xhc3MpOiBOZXcgYXJyYXkgdG8gbWFwIGhhcmQgcmVnaXN0ZXIgbnVtYmVyIHRvCisJcmVnaXN0ZXIgY2xhc3MuCisJKHVuc19hcml0aF9vcGVyYW5kKTogUmV3cml0ZSBzbyBjYWxsIHRvIHJlZ2lzdGVyX29wZXJhbmQgaXMgZG9uZQorCWxhc3QsIG5vdCBmaXJzdC4KKwkoYXJpdGhfb3BlcmFuZCk6IGRpdHRvLgorCShhcml0aDMyX29wZXJhbmQpOiBkaXR0by4KKwkobGFyZ2VfaW50KTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlIGlmIGludCBjb25zdGFudCB3aWxsIHRha2UgMgorCWluc3RydWN0aW9ucyB0byBsb2FkIGludG8gYSByZWdpc3Rlci4KKwkocmVnX29yXzBfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSBpZiBhIHJlZ2lzdGVyIG9yCisJY29uc3RhbnQgMCBpcyB0aGUgb3BlcmFuZCBmb3IgdXNlIGluIHN0b3JlIHBhdHRlcm5zLgorCShtZF9yZWdpc3Rlcl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlIGlmIGVpdGhlciB0aGUgaGkKKwlvciBsbyByZWdpc3RlciBpcyB1c2VkLgorCShtaXBzX2NvbnN0X2RvdWJsZV9vayk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSBpZiBhCisJQ09OU1RfRE9VQkxFIGNhbiBiZSB1c2VkIGFzIGEgY29uc3RhbnQgaW4gYSBSVEwgZXhwcmVzc2lvbi4gIEF0CisJcHJlc2VudCwgb25seSBESW1vZGUgY29uc3RhbnRzIGFuZCAwLjAgaXMgYWxsb3dlZC4KKwkoc2ltcGxlX21lbW9yeV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlIGlmIGEgbWVtb3J5CisJcmVmZXJlbmNlIGlzIGEgc2ltcGxlIHJlZ2lzdGVyICsgc21hbGwgb2Zmc2V0LgorCShncF9tZW1vcnlfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSBpZiBhIG1lbW9yeQorCXJlZmVyZW5jZSB1c2VzIHRoZSBnbG9iYWwgcG9pbnRlci4KKwkobWlwc19tb3ZlX2luc3RydWN0aW9ucyk6IE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgYWxsIGRhdGEgbW92ZW1lbnQKKwlvZiBvbmUgd29yZCBvciBsZXNzLgorCShtaXBzX21vdmVfMndvcmRzX2luc3RydWN0aW9ucyk6IE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgYWxsIGRhdGEKKwltb3ZlbWVudCBvZiB0d28gd29yZHMuCisJKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogUmVtb3ZlIHByaW50X3RyZWUgZGVidWcgY2FsbC4KKwkoZnVuY3Rpb25fYXJnX3BhcnRpYWxfbnJlZ3MpOiBGaXggYnVnIGluIHBhc3Npbmcgc3RydWN0dXJlcyB3aGVyZQorCXRoZSB3cm9uZyBmaWVsZCB3YXMgdXNlZC4KKwkocHJpbnRfb3B0aW9ucyk6IEVuYWJsZSB0aGlzIGZ1bmN0aW9uLCBib2R5IHdhcyBpbiAjaWYgMC4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFNwZWxsIGZ1bmN0aW9uIG5hbWUgd2l0aCB0d28gcidzLiAgQ2hhbmdlIGhvdworCXRoZSAtRyB4eCBhbmQgLW1HeCBvcHRpb25zIGFyZSBoYW5kbGVkLiAgSWYgbmVpdGhlciBwYXNzZWQgdXNlIHRoZQorCWFwcHJvcHJpYXRlIGRlZmF1bHQuICBJZiAtbWdhcyBtYWtlIHN1cmUgZGVidWcgZm9ybWF0IGlzIERCWCwgYW5kIGlmCisJbm90IC1tZ2FzLCB1c2UgU0RCIGRlYnVnIGZvcm1hdC4gIElmIC1tcm5hbWVzIGFuZCAtbWdhcywgZ2l2ZSBhbgorCWVycm9yIG1lc3NhZ2UsIG90aGVyd2lzZSBzZXQgdXAgbWlwc19yZWdfbmFtZXMuICBTZXQgdXAgdGhlCisJbWlwc19ydHhfY2xhc3NpZnkgYXJyYXkuCisJKHByaW50X29wdGlvbnMpOiBOZXcgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGxvbmcgbWFjcm8uICBBZGQgJUMgdG8KKwlwcmludCBwYXJ0IG9mIHRoZSBvcGNvZGUgZm9yIGEgYnJhbmNoIGNvbmRpdGlvbiwgJU4gdG8gcHJpbnQgdGhlCisJaW52ZXJ0ZWQgYnJhbmNoIGNvbmRpdGlvbiwgJSggdG8gZG8gLnNldCBub3Jlb3JkZXIsICUpIHRvIGRvIC5zZXQKKwlyZW9yZGVyLCAlWyB0byBkbyAuc2V0IG5vYXQsICVdIHRvIGRvIC5zZXQgYXQsICUmIHRvIGRvIC5zZXQKKwlub3Jlb3JkZXIgaWYgZmlsbGluZyBkZWxheSBzbG90cywgYW5kICUjIHRvIHByaW50IG5vcCBpZiBkZWxheSBzbG90CisJbm90IGZpbGxlZC4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogTmV3IGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBsb25nIG1hY3JvLgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBOZXcgZnVuY3Rpb24gdG8gYWJzdHJhY3QgYWxsIHRoZSBmcmFtZSByZWxhdGVkCisJaW5mb3JtYXRpb24gbGlrZSBmcmFtZSBzaXplLCBzYXZlZCByZWdpc3RlcnMsIGV0Yy4KKwkoc2F2ZV9yZXN0b3JlKTogQ29tbW9uIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSB0bworCXNhdmUvcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGluIHRoZSBwcm9wZXIgb3JkZXIuICBNYWtlICQzMSBzYXZlZCBhdAorCWZ1bmN0aW9uIHBjICs0LgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IENhbGwgY29tcHV0ZV9mcmFtZV9zaXplIGFuZCBzYXZlX3Jlc3RvcmUuICBNYWtlCisJc3VyZSB0aGUgYXBwcm9wcmlhdGUgLmZpbGUgaXMgZG9uZSBiZWZvcmUgYW55IHN0YXRlbWVudCBpbiB0aGUKKwlwcm9sb2d1ZSBzaW5jZSB0aGUgTUlQUyBFQ09GRiByZXF1aXJlcyB0aGlzLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IENhbGwgY29tcHV0ZV9mcmFtZV9zaXplIGFuZCBzYXZlX3Jlc3RvcmUuCisKKwkqIHRtLWRlY3N0YXRuLmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBtYWNyb3MuCisJKCpfU1BFQyk6IE1vdmUgdGhlIERFQ3N0YXRpb24gcmVsYXRlZCBzcGVjcyBoZXJlIGZyb20gdG0tbWlwcy5oLgorCisJKiB0bS1kZWNyb3NlLmggKG5ldyBmaWxlKTogRmlsZSB0byBzdXBwb3J0IE9TRi8xIHdpdGggT1NGL3Jvc2UKKwlvYmplY3QgZm9ybWF0LgorCisJKiB0bS1taXBzLXN5c3YuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgdGhlIGFwcHJvcHJpYXRlIG1hY3Jvcy4KKwkoKl9TUEVDKTogTW92ZSB0aGUgREVDc3RhdGlvbiByZWxhdGVkIHNwZWNzIGhlcmUgZnJvbSB0bS1taXBzLmguCisKKwkqIHRtLW1pcHMtYnNkLmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBtYWNyb3MuCisJKCpfU1BFQyk6IE1vdmUgdGhlIERFQ3N0YXRpb24gcmVsYXRlZCBzcGVjcyBoZXJlIGZyb20gdG0tbWlwcy5oLgorCisJKiB0bS1taXBzLW5ld3MuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgdGhlIGFwcHJvcHJpYXRlIG1hY3Jvcy4KKwkoKl9TUEVDKTogTW92ZSB0aGUgREVDc3RhdGlvbiByZWxhdGVkIHNwZWNzIGhlcmUgZnJvbSB0bS1taXBzLmguCisKKwkqIHRtLWlyaXMuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgdGhlIGFwcHJvcHJpYXRlIG1hY3Jvcy4KKwkoKl9TUEVDKTogTW92ZSB0aGUgREVDc3RhdGlvbiByZWxhdGVkIHNwZWNzIGhlcmUgZnJvbSB0bS1taXBzLmguCisJKFNFVF9GSUxFX05VTUJFUik6IERlZmluZSwgc28gdGhhdCAuZmlsZSBudW1iZXIgaXMgYWx3YXlzIDEuCisJKExBQkVMX0FGVEVSX0xPQyk6IERlZmluZSwgc28gdGhhdCBhIGxhYmVsIGFwcGVhcnMgYWZ0ZXIgLmxvYy4KKwkoU1RBQ0tfQVJHU19BREpVU1QpOiBJcmlzIGZyYW1lcyByZXF1aXJlIDMyIGJ5dGVzIGF0IHRoZSB0b3Agb2YgdGhlCisJY2FsbCBmcmFtZSBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgTUlQUyAxNi4KKworCSogbWlwcy5tZCAoYWxsKTogQWRkIGZpcnN0IGN1dCBhdCBhdHRyaWJ1dGVzIHRvIGlkZW50aWZ5IGluc24gdHlwZS4KKwkoYWxsKTogV2hlcmUgYXBwcm9wcmlhdGUsIHVzZSBAIGZvcm0gZm9yIGFsdGVybmF0ZXMsIGluc3RlYWQgb2YKKwl1c2luZyBDIGNvZGUuCisJKGRlZmluZV9kZWxheSk6IFB1dCBhcml0aG1ldGljIGFuZCBvbmUgd29yZCBzdG9yZXMgaW4gY2FsbCwganVtcCwKKwlicmFuY2ggZGVsYXkgc2xvdHMuCisJKGRlZmluZV9mdW5jdGlvbl91bml0KTogQWRkIGZ1bmN0aW9uYWwgdW5pdCBkZWZpbml0aW9ucyBmb3IgbWVtb3J5CisJYW5kIGludGVnZXIgbXVsdGlwbHkvZGl2aWRlLgorCShhbm9ueW1vdXMgYWRkL3N1YnRyYWN0IGluc24pOiBSZW1vdmUgc3VwcG9ydCBmb3IgcmVnICsgbGFyZ2Ugb2Zmc2V0CisJdGhhdCBvbWl0dGluZyB0aGUgZnJhbWUgcG9pbnRlciBjYXVzZWQgaW4gMS54eCB0byBzZWUgaWYgaXQgaXMKKwluZWVkZWQgYW55bW9yZS4KKwkobXVsc2kzKTogQWRkIGNsb2JiZXJzIGZvciB0aGUgaGkvbG8gcmVnaXN0ZXJzLiAgQWRkIGEgZGVmaW5lX3NwbGl0CisJYW5kIGFuIGFub255bW91cyBkZWZpbmVfaW5zbiB0byBzZXBhcmF0ZSB0aGUgbXVsdCBpbnN0cnVjdGlvbiBmcm9tCisJdGhlIG1mbG8uCisJKGRpdm1vZHNpNCk6IEFkZCBjbG9iYmVycyBmb3IgdGhlIGhpL2xvIHJlZ2lzdGVycy4KKwkodWRpdm1vZHNpNCk6IEFkZCBjbG9iYmVycyBmb3IgdGhlIGhpL2xvIHJlZ2lzdGVycy4KKwkoZGl2c2kzKTogQWRkIGNsb2JiZXJzIGZvciB0aGUgaGkvbG8gcmVnaXN0ZXJzLiAgUmVzdHJpY3QgZGl2aWRlcworCWFuZCBtb2R1bHVzIHRvIHJlZ2lzdGVyIC8gcmVnaXN0ZXIuCisJKG1vZHNpMyk6IGRpdHRvLgorCSh1ZGl2c2kzKTogZGl0dG8uCisJKHltb2RzaTMpOiBkaXR0by4KKwkoZGl2aWRlIHBlZXBob2xlcyk6IEFkZCB0d28gcGVlcGhvbGVzIHRvIGNhdGNoIGRpdmlkZSBmb2xsb3dlZCBieQorCW1vZHVsdXMgb2YgdGhlIHNhbWUgdmFsdWVzLgorCShhbmRkaTMpOiBSZW1vdmUgcGF0dGVybiwgdXNlIGRlZmF1bHQgYmVoYXZpb3IuCisJKGlvcmRpMyk6IFJlbW92ZSBwYXR0ZXJuLCB1c2UgZGVmYXVsdCBiZWhhdmlvci4KKwkoeG9yZGkzKTogUmVtb3ZlIHBhdHRlcm4sIHVzZSBkZWZhdWx0IGJlaGF2aW9yLgorCSh0cnVuY3NpcWkyKTogUmVtb3ZlIHBhdHRlcm4sIHVzZSBkZWZhdWx0IGJlaGF2aW9yLgorCSh0cnVuY3NpaGkyKTogUmVtb3ZlIHBhdHRlcm4sIHVzZSBkZWZhdWx0IGJlaGF2aW9yLgorCSh0cnVuY2hpcWkyKTogUmVtb3ZlIHBhdHRlcm4sIHVzZSBkZWZhdWx0IGJlaGF2aW9yLgorCSh0cnVuY2Rmc2YyKTogUmVtb3ZlIGFzbSBjb21tZW50LgorCShleHRlbmRoaXNpMik6IEFkZCBhIGRlZmluZV9zcGxpdCBmb3Igc2hpZnQgY2FzZS4KKwkoZXh0ZW5kcWlzaTIpOiBBZGQgYSBkZWZpbmVfc3BsaXQgZm9yIHNoaWZ0IGNhc2UuCisJKGV4dGVuZHFpaGkyKTogQWRkIGEgZGVmaW5lX3NwbGl0IGZvciBzaGlmdCBjYXNlLgorCShtb3ZkaSk6IFR1cm4gaW50byBhIGRlZmluZV9leHBhbmQgdG8gZ3VhcmFudGVlIHRoYXQgbWVtb3J5IDwtPgorCW1lbW9yeSBtb3ZlcyBnbyB0aHJvdWdoIGEgcmVnaXN0ZXIuCisJKG1vdnNpKTogZGl0dG8uCisJKG1vdmhpKTogZGl0dG8uCisJKG1vdnFpKTogZGl0dG8uCisJKG1vdnNmKTogZGl0dG8uCisJKG1vdmRmKTogZGl0dG8uCisJKG1vdmRpX2ludGVybmFsKTogbmV3IGRlZmluZV9pbnNuLiAgQWRkIGZwIHJlZ2lzdGVycyB0byB0aGUKKwlhbHRlcm5hdGl2ZXMuICBDYWxsIG1pcHNfbW92ZV8yd29yZHNfaW5zdHJ1Y3Rpb25zIHRvIGRvIHRoZSBhY3R1YWwKKwltb3ZlbWVudC4gIFJlcXVpcmUgbWVtb3J5IGFkZHJlc3NlcyB0byBiZSBvZmZzZXRhYmxlLgorCShtb3ZkZl9pbnRlcm5hbCk6IGRpdHRvLgorCShtb3ZzaV9pbnRlcm5hbCk6IG5ldyBkZWZpbmVfaW5zbi4gIEFkZCBzdG9yaW5nIDAgdG8gbWVtb3J5CisJZGlyZWN0bHkgdXNpbmcgJDAuICBBZGQgdHJhbnNmZXIgdG8vZnJvbSBtdWx0aXBseS9kaXZpZGUgcmVnaXN0ZXJzLAorCWFuZCB0byB0aGUgZnAgc3RhdHVzIHJlZ2lzdGVyLiAgQ2FsbCBtaXBzX21vdmVfaW5zdHJ1Y3Rpb25zIHRvIGRvCisJdGhlIGFjdHVhbCB3b3JrLgorCShtb3ZoaV9pbnRlcm5hbCk6IGRpdHRvLgorCShtb3ZxaV9pbnRlcm5hbCk6IGRpdHRvLgorCShtb3ZzZl9pbnRlcm5hbCk6IGRpdHRvLgorCShqdW1wKTogQWRkICUmIHRvIHR1cm4gb24gLnNldCBub3Jlb3JkZXIgaWYgZmlsbGluZyBkZWxheSBzbG90LgorCSh0YWJsZWp1bXApOiBEaXR0by4KKwkoY2FsbCk6IERpdHRvLgorCShjYWxsX3ZhbHVlKTogRGl0dG8uCisJKGluZGlyZWN0X2p1bXApOiBOZXcgcmVxdWlyZWQgcGF0dGVybiwgYWRkICUmIGZvciBkZWxheSBzbG90LgorCShub3ApOiBVc2UgJSggJSkgdG8gdHVybiBvbi9vZmYgLnNldCBub3Jlb3JkZXIuCisJKHByb2JlKTogVXNlICVbICVdIHRvIHR1cm4gb24vb2ZmIC5zZXQgbm9hdC4KKworCSogdG0tbWlwcy5oIChhYm9ydCk6IERlZmluZSBhYm9ydCB0byBiZSBmYW5jeV9hYm9ydCBmb3Igbm93LgorCSh0b3BsZXZlbCk6IE1vdmUgYWxsIGV4dGVybidzIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZSwgcmF0aGVyIHRoYW4KKwlzY2F0dGVyZWQgdGhyb3VnaG91dC4KKwkoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBOZXcgbWFjcm8sIC1PIHNldHMgLWZvbWl0LWZyYW1lLXBvaW50ZXIsIGFuZAorCS1mZGVsYXllZC1icmFuY2guICAtTzIgc2V0cyAtZnN0cmVuZ3RoLXJlZHVjZSwgLWZjc2UtZm9sbG93LWp1bXBzLAorCS1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMsIC1mdGhyZWFkLWp1bXBzLCAtZnJlcnVuLWNzZS1hZnRlci1sb29wLgorCS1PMyBzZXRzIC1maW5saW5lLWZ1bmN0aW9ucy4KKwkoKl9TUEVDKTogTW92ZSBtb3N0IG9mIHRoZSB0YXJnZXQgc3BlY2lmaWMgc3BlYydzIHRvIHRoZSBhcHByb3ByaWF0ZQorCWZpbGUsIHJhdGhlciB0aGFuIGRlZmluaW5nIHRoZW0gaW4gdG0tbWlwcy5oLiAgRGVmYXVsdHMgYXJlIGZvciBNSVBTCisJUklTQy1PUyB3aXRoIGRlZmF1bHQgc3lzdGVtLgorCShDUFBfU1BFQyk6IElmIHByZXByb2Nlc3NpbmcgLlMgZmlsZXMsIGRlZmluZSBMQU5HVUFHRV9BU1NFTUJMWQorCWluc3RlYWQgb2YgTEFOR1VBR0VfQy4KKwkoTUlQU19WRVJTSU9OKTogQWRkIG1laXNzbmVyIHZlcnNpb24gbnVtYmVyLgorCShNSVBTX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lIHRoaXMgZm9yIHRoZSBmdXR1cmUuCisJKFRBUkdFVF8qKTogcmVvcmRlciB3aGljaCBiaXQgbWVhbnMgd2hhdC4gIEFkZCBiaXRzIHNvIHdlIGNhbiB0ZWxsCisJd2hldGhlciBhbnkgb2YgdGhlIC1tR1swMTJdIG9wdGlvbnMgd2VyZSB1c2VkLiAgUmVkZWZpbmUgc29tZSBkZWJ1ZworCXN3aXRjaGVzLgorCShCWVRFU19CSUdfRU5ESUFOKTogQWx3YXlzIGRlZmluZSB0byAwLzEgbm93LgorCShXT1JEU19CSUdfRU5ESUFOKTogQWx3YXlzIGRlZmluZSB0byAwLzEgbm93LgorCShNQVhfUEFSTV9CT1VOREFSWSk6IERlbGV0ZSwgc2luY2UgaXQncyBubyBsb25nZXIgdXNlZC4KKwkoQklHR0VTVF9GSUVMRF9BTElHTk1FTlQpOiBEZWZpbmUgdG8gYmUgNjQuCisJKENPTlNUQU5UX0FMSUdOTUVOVCk6IE5ldyBtYWNybywgbWFrZSBzdXJlIHN0cmluZ3MgYXJlIGFsaWduZWQuCisJKERBVEFfQUxJR05NRU5UKTogTmV3IG1hY3JvLCBtYWtlIHN1cmUgYnl0ZSBhcnJheXMgYXJlIGFsaWduZWQuCisJKEZJUlNUX1BTRVVET19SRUdJU1RFUik6IEJ1bXAgdG8gNjcsIGFkZCBoaSwgbG8sIGZjcjMxLgorCShGSVhFRF9SRUdJU1RFUlMpOiBBZGQgaW5pdGlhbGl6YXRpb25zIGZvciBoaSwgbG8sIGFuZCBmY3IzMS4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IEFkZCBpbml0aWFsaXphdGlvbnMgZm9yIGhpLCBsbywgYW5kIGZjcjMxLgorCShNRF9SRUdfUCk6IE5ldyBtYWNybyB0byByZXR1cm4gaWYgaGkvbG8gcmVnaXN0ZXIuCisJKFNUX1JFR19QKTogTmV3IG1hY3JvIHRvIHJldHVybiBpZiBmcCBjb250cm9sIHJlZ2lzdGVyLgorCShIQVJEX1JFR05PX05SRUdTKTogUmV0dXJuIDQgZm9yIHNpbmdsZSBwcmVjaXNpb24gY29tcGxleC4KKwkoTU9ERVNfVElFQUJMRV9QKTogQWRkIGNvbXBsZXggZmxvYXQgdHlwZSBzdXBwb3J0LgorCShGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKTogTWFrZSB0aGlzIGFsd2F5cyAwLgorCShOT19SRUNVUlNJVkVfRlVOQ1RJT05fQ1NFKTogTmV3IG1hY3JvLCBkZWZpbmUgYXMgMS4KKwkoZW51bSByZWdfY2xhc3MpOiBBZGQgY2xhc3MgZm9yIHRoZSBoaSByZWdpc3RlciwgbG8gcmVnaXN0ZXIsIGVpdGhlcgorCWhpIG9yIGxvIHJlZ2lzdGVycywgc3RhdHVzIHJlZ2lzdGVycy4KKwkoUkVHX0NMQVNTX05BTUVTKTogU3VwcG9ydCBuZXcgcmVnaXN0ZXIgY2xhc3Nlcy4KKwkoUkVHX0NMQVNTX0NPTlRFTlRTKTogZGl0dG8uCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IGRpdHRvLgorCShSRUdOT19SRUdfQ0xBU1MpOiBVc2UgYW4gYXJyYXkgdG8gbWFwIHJlZ2lzdGVyICMgLT4gY2xhc3MuCisJKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IEFkZCBgTCcgZm9yIGNvbnN0YW50cyB3aGljaCBoYXZlIGJvdHRvbSAxNgorCWJpdHMgYWxsIHplcm8sIGFuZCBgTScgd2hpY2ggcmVxdWlyZSB0d28gaW5zdHJ1Y3Rpb25zIHRvIGxvYWQuCisJKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBVc2UgYENPTlNUX0RPVUJMRV9ISUdIJyBhbmQKKwlgQ09OU1RfRE9VQkxFX0xPVycuCisJKEVYVFJBX0NPTlNUUkFJTlQpOiBOZXcgbWFjcm8sIGBRJyBmb3IgZ3AgbWVtb3J5IHJlZmVyZW5jZXMsIGFuZCBgUicKKwlmb3IgcmVnICsgc21hbGwgb2Zmc2V0IHJlZmVyZW5jZXMuCisJKHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8pOiBOZXcgc3RydWN0dXJlIHRvIGhvbGQgYWxsIGZyYW1lIHJlbGF0ZWQKKwlpbmZvcm1hdGlvbiwgY2FsY3VsYXRlZCBieSBjb21wdXRlX2ZyYW1lX3NpemUuCisJKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBOZXcgbWFjcm8sIHVzZSBjb21wdXRlX2ZyYW1lX3NpemUgdG8KKwljYWxjdWxhdGUgd2hlcmUgdGhlIGZyYW1lIHNob3VsZCBnby4KKwkoQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTKTogTmV3IG1hY3JvLCBkZWZpbmUgc28gc3RhY2sgcHVzaGVzIGFyZQorCWZvbGRlZCBpbnRvIHRoZSBmcmFtZS4KKwkoUkVHX1BBUk1fU1RBQ0tfU1BBQ0UpOiBSZWRlZmluZSB0byB0YWtlIGFuIGFyZ3VtZW50IGFuZCByZXR1cm4gMTYuCisJKE9VVEdPSU5HX1JFR19QQVJNX1NUQUNLX1NQQUNFKTogTmV3IG1hY3JvLCBkZWZpbmUgdG8gc2F5IHdlIG11c3QKKwlhbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3IgYXJndW1lbnRzIHBhc3NlZCBpbiByZWdpc3RlcnMuCisJKFRBUkdFVF9GTE9BVF9GT1JNQVQpOiBOZXcgbWFjcm8sIGRlZmluZSBhcyBJRUVFX0ZMT0FUX0ZPUk1BVC4KKwkoRlVOQ1RJT05fQVJHX0JPVU5EQVJZKTogTmV3IG1hY3JvIHRvIGRldGVybWluZSBhcmd1bWVudCBwYWRkaW5nCisJcmVxdWlyZW1lbnRzLgorCShNSVBTX1NUQUNLX0FMSUdOKTogTmV3IG5hbWUgZm9yIEFMX0FESlVTVF9BTElHTiBtYWNyby4KKwkoRklYX0ZSQU1FX1BPSU5URVJfQUREUkVTUyk6IERlbGV0ZSwgbm8gbG9uZ2VyIHVzZWQuCisJKEZVTkNUSU9OX1BST0ZJTEVSKTogTm8gbG9uZ2VyIGhhdmUgdG8gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50CisJcmVnaXN0ZXIgbmFtZXMsIG92ZXJyaWRlX29wdGlvbnMgbm93IHNldHMgdXAgcmVnX25hbWVzIGNvcnJlY3RseS4KKwkoVFJBTVBPTElORV9URU1QTEFURSk6IE5ldyBtYWNybywgZGVmaW5lIGFzIGEgZHVtbXkuCisJKFRSQU1QT0xJTkVfU0laRSk6IGRpdHRvLgorCShJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBkaXR0by4KKwkoSU5ESVJFQ1RBQkxFX0FERFJFU1MpOiBEZWxldGUsIGZvbGQgaW50byBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IElmIC1tZGVidWdhLCBkb24ndCBhbGxvdyA8bGFiZWw+KDxyZWc+KQorCXR5cGUgYWRkcmVzc2VzLCB3aGljaCB0aGUgbWFjaGluZSByZWFsbHkgZG9lc24ndCBzdXBwb3J0LCBidXQgeW91CisJY3VycmVudGx5IGdldCBiZXR0ZXIgY29kZSBpbiBzb21lIGluc3RhbmNlcyBieSBwcmV0ZW5kaW5nIGl0IGRvZXMKKwlzdXBwb3J0IGl0LgorCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBDYWxsIG1pcHNfY29uc3RfZG91YmxlX29rIGlmIENPTlNUX0RPVUJMRS4KKwkoRU5DT0RFX1NFR01FTlRfSU5GTyk6IE5ldyBtYWNybywgc2V0IFNZTUJPTF9SRUZfRkxBRyAoaWUsIHZvbGF0aWwpCisJaWYgcmVmZXJpbmcgdG8gYW4gaXRlbSB2aWEgdGhlIGdwIHBvaW50ZXIuCisJKFNMT1dfQllURV9BQ0NFU1MpOiBEZWZpbmUgdG8gMSwgaXQgaXMgc3VwcG9zZWQgdG8gZ2VuZXJhdGUgYmV0dGVyCisJY29kZSBvbiBSSVNDIG1hY2hpbmVzLgorCShjbGFzc2lmeV9vcCk6IE5ldyBtYWNybyB0byBjbGFzc2lmeSBhbiBpbnNuLgorCShhZGRpdGl2ZV9vcCk6IFVzZSBjbGFzc2lmeV9vcCB0byBmaWd1cmUgb3V0IGlmIFBMVVMgb3IgTUlOVVMuCisJKGRpdm1vZF9vcCk6IE5ldyBtYWNybyB0byBpZGVudGlmeSBESVYsIE1PRCwgVURJViwgVU1PRCBpbnNucy4KKwkodW5zaWduZWRfb3ApOiBOZXcgbWFjcm8gdG8gaWRlbnRpZnkgVURJViwgVU1PRCBpbnNucy4KKwkoUkVHSVNURVJfTkFNRVMpOiBBbGwgbmFtZXMgYXJlIG5vdyBwb2ludGVycyBpbnRvIG1pcHNfcmVnX25hbWVzLCBzbworCXRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjb250aW51YWxseSB0ZXN0IHdoZXRoZXIgLW1ybmFtZXMgaXMgdXNlZCBvcgorCW5vdC4gIFRoZSBvdmVycmlkZV9vcHRpb25zIGZ1bmN0aW9uIHNldHMgdGhpcyB1cCBhcHByb3ByaWF0ZWx5LgorCShSRUdJU1RFUl9OVU1DSEFSKTogRGVsZXRlZC4KKwkoUkVHX05BTUUpOiBEZWxldGVkLgorCShBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTKTogRGVmaW5lIGJvdGggbmFtZXMgZm9yIHRoZSBncCByZWdpc3RlcnMsCisJc28gcGVvcGxlIGNhbiB1c2UgZWl0aGVyICRyNCBvciBhMCBpbiBhc20gc3RhdGVtZW50cy4KKwkoUFJJTlRfT1BFUkFORCk6IENhbGwgcHJpbnRfb3BlcmFuZCBmdW5jdGlvbiBpbnN0ZWFkIG9mIGV4cGFuZGluZyBhCisJaHVnZSBtYWNyby4gIEFkZCAlQywgJU4sICUoLCAlKSwgJVssICVdLCAlJiwgJSMuCisJKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IEFkZCBgKCcsIGApJywgYFsnLCBgXScsIGAmJywgYW5kIGAjJy4KKwkoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogQ2FsbCBwcmludF9vcGVyYW5kX2FkZHJlc3MgZnVuY3Rpb24gaW5zdGVhZAorCW9mIGV4cGFuZGluZyBhIGh1Z2UgbWFjcm8uCisJKERCWF9PVVRQVVRfU0VRRU5EKTogTmV3IG1hY3JvLCBlbWl0IC5zZXQgcmVvcmRlciBhZnRlciBmaWxsaW5nCisJZGVsYXkgc2xvdChzKS4KKwkoQVNNX09VVFBVVF9TT1VSQ0VfRklMRU5BTUUpOiBBZGQgY2hlY2sgZm9yIGRvaW5nIC5maWxlIG9mIHNhbWUgZmlsZQorCS0tIHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgcHJvbG9ndWUgdG8gZG8gYSAuZmlsZSBiZWZvcmUgYWxsIHByb2xvZ3VlCisJaW5zdHJ1Y3Rpb25zLCByYXRoZXIgdGhhbiBhZnRlciB0aGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIHNldCB1cCB0aGUKKwlzdGFjay4gIEFsc28sIHdhcm4gYWJvdXQgI2xpbmUgcmVxdWVzdHMgdGhhdCBjYW5ub3QgYmUgaG9ub3JlZCBpbgorCU1JUFMgRUNPRkYgYmluYXJpZXMuCisJKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBEZWxldGUsIHNpbmNlIGl0IHdhcyBvbmx5IHVzZWQgdG8gZ28gYmFjayB0bworCXRoZSB0ZXh0IHNlY3Rpb24sIGFuZCBHQ0MgZG9lcyB0aGlzIG5vdyBhdXRvbWF0aWNhbGx5LgorCShSRUFET05MWV9EQVRBX1NFQ1RJT04pOiBOZXcgbWFjcm8sIGRlZmluZSB0byBiZSByZGF0YV9zZWN0aW9uLgorCShTRUxFQ1RfU0VDVElPTik6IERvbid0IGZvcmNlIHZvbGF0aWxlIHJlYWRvbmx5IGl0ZW1zIGludG8gLmRhdGEuCisJKEFTTV9DT01NRU5UX1NUQVJUKTogTmV3IG1hY3JvLCBkZWZpbmUgdG8gYmUgJ1x0XHQjICcgZm9yIC1kcC4KKwkoU0VQQVJBVEVfQVVYX09VVFBVVCk6IE5ldyBtYWNybywgZGVmaW5lIHRoaXMgdG8gc2VwYXJhdGVseSBjb21waWxlCisJb3V0LW1pcHMuYy4KKworVHVlIEFwciAxNiAxNTowMDo1MSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIHVucm9sbC5jIChmaW5hbF9naXZfdmFsdWUpOiBVc2UgZXhwYW5kX2Jpbm9wIGluc3RlYWQgb2YKKwlnZW5fc3ViMl9pbnNuIHdoZW4gZW1pdHRpbmcgc3VidHJhY3QgaW5zbnMsIHNpbmNlIGV4cGFuZF9iaW5vcAorCXdpbGwgd29yayBmb3IgYW55IG9wZXJhbmRzLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IERvbid0IHNwbGl0IG5vLW9wIG1vdmVzOyBkb2luZyBzbworCWJyZWFrcyB0aGUgY29kZSB0aGF0IGhhbmRsZXMgUkVHX05PX0NPTkZMSUNUIGJsb2Nrcy4KKwkodXBkYXRlX2xpbmtzKTogRGVsZXRlIHRoZSBjb2RlIHRoYXQgcHJpbnRzIGEgd2FybmluZyBmb3IKKwlSRUdfRVFVQUwgbm90ZXMgd2hlcmUgdGhlIG9yaWdpbmFsIGRlc3QgY2FuJ3QgYmUgZm91bmQuICBUaGlzIG5vCisJbG9uZ2VyIG9jY3VycyBiZWNhdXNlIG9mIHRoZSBhYm92ZSBjaGFuZ2UuCisKKwkqIHNjaGVkLmM6IEdlbmVyYWxpemUgbWVtb3J5IGFsaWFzaW5nIGNvZGUgc28gdGhhdCBpdCB3aWxsIHdvcmsgb24KKwlub24tUklTQyBtYWNoaW5lcy4gIEluc3RlYWQgb2Ygc2F2aW5nIGp1c3QgdGhlIGluc24gb24gdGhlIHBlbmRpbmcKKwlsaXN0cywgbm93IHNhdmVzIGJvdGggdGhlIGluc24gYW5kIHRoZSBtZW0gcnR4LiAgT2xkIHZhcmlhYmxlcworCXBlbmRpbmdfcmVhZCBhbmQgcGVuZGluZ193cml0ZSByZXBsYWNlZCB3aXRoIHBlbmRpbmdfcmVhZF9pbnNucywKKwlwZW5kaW5nX3JlYWRfbWVtcywgcGVuZGluZ193cml0ZV9pbnNucywgYW5kIHBlbmRpbmdfd3JpdGVfbWVtcy4KKwkocmVhZF9kZXBlbmRlbmNlLCB0cnVlX2RlcGVuZGVuY2UsIGFudGlfZGVwZW5kZW5jZSwKKwlvdXRwdXRfZGVwZW5kZW5jZSk6IE5vdyBwYXNzZWQgYSBNRU0gcnR4IGluc3RlYWQgb2YgYSBQQVR0ZXJuLgorCShhZGRfaW5zbl9tZW1fZGVwZW5kZW5jZSk6IE5ldyBmdW5jdGlvbi4gIEFkZHMgYW4gaW5zbiBhbmQgYSBtZW0KKwl0byBhIHBlbmRpbmcgbGlzdCBwYWlyLgorCShzY2hlZF9hbmFseXplXzEsIHNjaGVkX2FuYWx5emVfMiwgc2NoZWRfYW5hbHl6ZSk6IE1vZGlmaWVkIHRvIHVzZQorCW5ldyBwZW5kaW5nIGxpc3Qgc2NoZW1lLgorCShzY2hlZHVsZV9ibG9jayk6IExpa2V3aXNlLgorCShzY2hlZHVsZV9pbnNucyk6IExpa2V3aXNlLgorCitUdWUgQXByIDE2IDEyOjMxOjA3IDE5OTEgIEplZmZyZXkgQS4gTGF3ICAobGF3IGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLW1hbik6IExvb2sgZm9yIHByb3RvaXplLjEgYW5kIHVucHJvdG9pemUuMQorCWluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgbm90ICQoc3JjZGlyKQorCShpbnN0YWxsLWhlYWRlcnMpOiBVc2UgYmFzZW5hbWUgdG8gc3RyaXAgb2ZmICQoc3JjZGlyKSBmcm9tIAorCWluY2x1ZGUgZmlsZXMgd2hlbiBpbnN0YWxsaW5nIGFuZCBjaGFuZ2luZyBtb2RlLgorCitUdWUgQXByIDE2IDA4OjEwOjM4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZXh0ZW5kcWl4aTIpOiBBZGQgQ0xPQkJFUiB0byB0aGUgZmlyc3QgU0VUIGFzIHdlbGwgYXMKKwl0aGUgc2Vjb25kLgorCShsb2FkX211bHRpcGxlKTogRml4IHR5cG8gaW4gb3BlcmFuZCBudW1iZXIgYW5kIGFkZCBuZXdsaW5lLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IFBhc3MgYWN0dWFsIGxvY2F0aW9uIG9mIGEKKwlNRU0gdXNlZCBpbiBhbiBhZGRyZXNzOyBhbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBNRU0gd2FzCisJY29waWVkLiAgRW5zdXJlIHdlIHJlbG9hZCB0aGUgY29weSwgbm90IHRoZSBvcmlnaW5hbCBhZGRyZXNzLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzLCBjYXNlIHtJTlNOLEVYUFJ9X0xJU1QpOiBDb3JyZWN0bHkgaGFuZGxlCisJdGhlIGNhc2VzIHdoZW4gb25lIG9yIG1vcmUgb3BlcmF0aW9ucyBpcyAobmlsKS4KKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBDaGVjayBmb3IgUkVHX0VRVUFMIG9uIGxpc3QgaW5zbgorCW9mIFJFR19OT19DTE9CQkVSIHNlcXVlbmNlLCBub3QgZmlyc3QuCisJKG5vX2NvbmZsaWN0X3ApOiBTZXQgTEFTVCBhbmQgdXNlIElOU04gaW5zdGVhZCBvZiBQIGZvciBsb29wIHN0YXJ0LgorCitNb24gQXByIDE1IDEyOjU1OjEyIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgY3lnbnVzLmNvbSkKKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEb24ndCBlbWl0IGFuIGluc24gYWZ0ZXIgbG9vcF9lbmQgdG8KKwlzZXQgdGhlIGZpbmFsIHZhbHVlIG9mIGEgcmV2ZXJzZWQgYml2LiAgVGhlcmUgaXMgYWxyZWFkeSBhbiBpbnNuCisJdGhlcmUgc2V0dGluZyB0aGUgYml2J3MgcHJvcGVyIGZpbmFsIHZhbHVlLgorCitTdW4gQXByIDE0IDE4OjMyOjA1IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogZ251bGliMS5jICh2YXJpb3VzIGZ1bmN0aW9ucyk6IEFkZGVkIGRlY2xhcmF0aW9uIG9mIElOVElGWSB0bworCWV2ZXJ5IGZ1bmN0aW9uIHdoaWNoIGhhcyBhIEZMT0FUX0FSR19UWVBFIGFyZ3VtZW50IG9yIHJldHVybiB2YWx1ZS4KKworU3VuIEFwciAxNCAxODozMTo1OSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogVHJhZGl0aW9uYWwgZmxvYXQgcGFybSBiZWNvbWVzIGRvdWJsZS4KKworU2F0IEFwciAxMyAxNzozNTowNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgKHN0b3JpbmcgMzItYml0IGZpZWxkIHdpdGggbW92bCk6IEFsbG93IGFueSBpbW1lZGlhdGUgYXJnIDMuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBGb3IgZmllbGRzIGJpZ2dlciB0aGFuIGEgd29yZDoKKwlBdm9pZCBzcGVjaWFsIHVzZSBvZiBTSW1vZGUsIGFuZCBkb24ndCBjcmFzaCBpZiBWQUxVRSBpcyBDT05TVF9JTlQuCisKK0ZyaSBBcHIgMTIgMDI6MDQ6NDYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTGlrZSBwcmV2IGNoYW5nZSBoZXJlLCBmb3Igb3B0aW9uYWwgcmVsb2Fkcy4KKworCSogdG0tc3BhcmMuaCAoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIpOiBNdXN0IHNldCAlbzAgdG8gdGhlIGFkZHJlc3MKKwlMUEJYMCBieSBhZGRpbmcgaW4gdGhlIGxvdyBwYXJ0IG9mIHRoZSBhZGRyZXNzIGJlZm9yZSBjYWxsaW5nCisJX19fYmJfaW5pdF9mdW5jLgorCisJKiB0bS1uZXh0LmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsIEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6CisJTmV3IG1hY3Jvcy4gIFBsYWNlIHJlZmVyZW5jZSB0byBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIGludG8KKwljb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNlY3Rpb24uCisKKwkqIHRtLW5leHQuaCAoRVhUUkFfU0VDVElPTlMsIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogIEFkZAorCW5ldyBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBzZWN0aW9ucy4KKworCSoganVtcC5jIChzcXVlZXplX2Jsb2NrX25vdGVzLHNxdWVlemVfbm90ZXMpOiBDaGFnZSB0aGUgbmFtZSBvZgorCXNxdWVlemVfYmxvY2tfbm90ZXMgdG8gc3F1ZWV6ZV9ub3Rlcy4gIEFsc28gaGFuZGxlIExPT1BfQkVHLCBMT09QX0NPTlQKKwlhbmQgTE9PUF9FTkQgbm90ZXMsIHNpbmNlIHRoZXNlIG11c3QgcmVtYWluIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisJKiBjY2NwLmMgKHNraXBfdG9fZW5kX29mX2NvbW1lbnQpOiBIYW5kbGUgd2Fybl9jb21tZW50LgorCisJKiBtNjhrLm1kIChkYnJhIHBhdHRlcm5zKTogVXNlIGA9JyBpbiBjb25zdHJhaW50IG9mIG9wIDAuCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBIYW5kbGUgLXNhdmUtdGVtcHMuCisJKGRvX3NwZWNfMSk6IEhhbmRsZSAlZyBsaWtlICViIGlmIC1zYXZlLXRlbXBzLgorCSh2ZXJib3NlX2ZsYWcpOiBSZW5hbWVkIGZyb20gYHZmbGFnJy4KKworCSogdG0tc3BhcmMuaCAoRklYVU5TX1RSVU5DX0xJS0VfRklYX1RSVU5DKTogRG9uJ3QgZGVmaW5lIHRoaXMuCisKK0ZyaSBBcHIgMTIgMDA6NTc6NDggMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBjeWdudXMuY29tKQorCisJKiBzY2hlZC5jOiBVcGRhdGUgYWxsIGNvbW1lbnRzIHRvIHJlZmxlY3Qgc291cmNlIGNoYW5nZXMuCisJTWFrZSBvbGRfbGl2ZV9yZWdzIGEgc3RhdGljIGdsb2JhbCwgaW5zdGVhZCBvZiBsb2NhbCB0byBzY2hlZHVsZV9ibG9jay4KKwlTY2hlZHVsZV9ibG9jayBpcyBub3cgdm9pZCwgc2luY2UgaXRzIHJldHVybiB2YWx1ZSB3YXMgYWx3YXlzIDEuCisJUmVuYW1lIGxhc3RfZnVuY3Rpb25fY2FsbF9ub3RfY29uc3QgdG8gbGFzdF9wZW5kaW5nX21lbW9yeSBmbHVzaC4KKwlUaGlzIGNhbiBub3QgYmUgYSBDQUxMX0lOU04gb3IgYSBJTlNOIHRoYXQgd3JpdGVzIG1lbW9yeS4KKwlOZXcgdmFyaWFibGUgcGVuZGluZ19saXN0c19sZW5ndGggc28gdGhhdCB0aGUgbGlzdHMgY2FuIGJlIGZsdXNoZWQKKwl3aGVuIHRoZXkgZ2V0IHRvbyBsb25nLgorCVVzZSBHRVRfUlRYX0NMQVNTIGluc3RlYWQgb2YgbXVsdGlwbGUgR0VUX0NPREUgY2FsbHMgd2hlbmV2ZXIgaXQKKwltYWtlcyBzZW5zZS4KKwkocmVhZF9kZXBlbmRlbmNlKTogTmV3IEZ1bmN0aW9uLiAgUmV0dXJucyBvbmUgaWYgdHdvIHJlYWRzIGFyZQorCWRlcGVuZGVudC4gIFRoaXMgY2FuIGhhcHBlbiBpZiBib3RoIGFyZSB2b2xhdGlsZSByZWFkcy4KKwkodHJ1ZV9kZXBlbmRlbmNlLCBhbnRpX2RlcGVuZGVuY2UsIG91dHB1dF9kZXBlbmRlbmNlKTogVHdvIHZvbGF0aWxlCisJbWVtb3J5IGFjY2VzcyBhcmUgYWx3YXlzIGRlcGVuZGVudC4KKwkob3JkZXJfY2FsbHMpOiBGdW5jdGlvbiBkZWxldGVkLiAgSXQgd2FzIHZlcnkgc2hvcnQsIGl0IHdhcyBvbmx5IGNhbGxlZAorCW9uY2UsIGFuZCBpdCBubyBsb25nZXIgZGlkIHdoYXQgaXRzIG5hbWUgaW1wbGllZC4gIEl0cyBvbmUgY2FsbCB3YXMKKwlyZXBsYWNlZCB3aXRoIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbi4KKwkoc2NoZWRfYW5hbHl6ZV8xKTogQ29ycmVjdGx5IGhhbmRsZSBzdHJpcHBpbmcgb2YgU1VCUkVHcywgZXRjIGZyb20KKwl0aGUgc2V0IGRlc3QuCisJSWYgdGhlIHBlbmRpbmcgbGlzdHMgYXJlIGxvbmdlciB0aGFuIDMyIHdoZW4gcHJvY2Vzc2luZyBhIG1lbW9yeQorCXdyaXRlLCB0aGVuIG1ha2UgdGhpcyB3cml0ZSBkZXBlbmQgb24gYWxsIHByZXZpb3VzIGFuZCBhbGwgZnV0dXJlCisJbWVtb3J5IGFjY2Vzc2VzIHNvIHdlIGNhbiBmbHVzaCB0aGUgcGVuZGluZyBsaXN0LiAgVGhpcyBpcyBuZWNlc3NhcnkKKwliZWNhdXNlIHRoZSBhbGdvcml0aG1zIHVzZWQgYXJlIE8oTipOKS4KKwkoc2NoZWRfYW5hbHl6ZV8yKTogRm9yIG1lbW9yeSByZWFkcywgY2hlY2sgd2hldGhlciBpdCBpcyByZWFkCisJZGVwZW5kZW50IG9uIGFueSBwcmV2aW91cyBtZW1vcnkgcmVhZCAodGhpcyBjYW4gaGFwcGVuIGlmIGJvdGggcmVhZHMKKwlhcmUgdm9sYXRpbGUpLgorCShzY2hlZF9hbmFseXplX2luc24pOiBSZXBsYWNlIGNhbGwgdG8gb3JkZXJfY2FsbHMgd2l0aCB0aGUgYm9keSBvZgorCXRoYXQgZnVuY3Rpb24uCisJKHNjaGVkX2FuYWx5emUpOiBEb24ndCBjbGVhciBsYXN0X21lbW9yeV9wZW5kaW5nX2ZsdXNoIGZvciBhIG5vbi1jb25zdAorCWNhbGwsIHNpbmNlIGFueSBmdXR1cmUgY2FsbCBtdXN0IHN0aWxsIGRlcGVuZCBvbiBhbGwgcHJldmlvdXMgbWVtb3J5CisJYWNjZXNzZXMuCisJKHNjaGVkX25vdGVfc2V0KTogQ29ycmVjdCBoYW5kbGluZyBvZiBTVUJSRUdzLCBldGMuICBGb3IgcGFydGlhbCBzZXRzCisJb2YgYSByZWdpc3RlciwgbXVzdCB0cmVhdCB0aGlzIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGZsb3cuYywgaS5lLgorCWEgcGFydGlhbCBzZXQgb2YgYSByZWdpc3RlciBkb2VzIG5vdCBraWxsIHRoZSByZWdpc3Rlci4gIERlbGV0ZQorCWlmZGVmZWQgb3V0IGNvZGUgd2hpY2ggaXMgb2Jzb2xldGUuCisJKGF0dGFjaF9kZWF0aHMpOiBOZXcgYXJndW1lbnQgU0VUX1AsIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMKKwlhIHNldCAoaWYgdHJ1ZSkgb3IgYSB1c2UgKGlmIGZhbHNlKSBvZiB0aGUgcnR4IFguICBDb3JyZWN0IGhhbmRsaW5nCisJb2YgUkVHX0RFQUQgbm90ZXMsIHRvIGFjY291bnQgZm9yIHRoZSBuZXcgUkVHX1VOVVNFRCBub3RlLgorCShhdHRhY2hfZGVhdGhzX2luc24pOiBQYXNzIG5ldyBhZGRpdGlvbmFsIHBhcmFtZXRlciB0byBhdHRhY2hfZGVhdGhzLgorCUFsd2F5cyBjYWxsIGF0dGFjaF9kZWF0aHMgZm9yIHNldHMgd2l0aGluIGEgcGFyYWxsZWwuICBDYWxsCisJYXR0YWNoX2RlYXRocyBmb3IgY2xvYmJlcnMuCisJKG5ld19zb21ldGltZXNfbGl2ZSk6IElmZGVmIG91dCBjb2RlIHdoaWNoIHNob3VsZCBuZXZlciBiZSBleGVjdXRlZCwKKwlhbmQgcmVwbGFjZWQgd2l0aCBjYWxsIHRvIGFib3J0LgorCShzY2hlZHVsZV9ibG9jayk6IE5vdyB2b2lkLgorCVdoZW4gcHJvY2Vzc2luZyBibG9jayB0byBmaW5kIGRlYWRfcmVncywgZG9uJ3QgdW5saW5rIFJFR19VTlVTRUQgbm90ZXMsCisJYnV0IG11c3QgbWFyayB0aGUgaW5kaWNhdGVkIHJlZ2lzdGVyIGFzIGRlYWQuCisJKHVwZGF0ZV9saW5rcyk6IENvbXBsZXRlbHkgcmV3cml0dGVuIHRvIG1ha2UgbW9yZSBnZW5lcmFsLiAgTm93IGhhbmRsZXMKKwlhbGwgUkVHX05PVEVzIGV4Y2VwdCBSRUdfSU5DIGFuZCBSRUdfTEFCRUwuICBObyBsb25nZXIgbWFrZXMgc2ltcGxlCisJYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGZvcm0gb2YgaW5zdHJ1Y3Rpb25zLiAgTmV3IGFyZ3VtZW50IG9yaWdfaW5zbiwKKwl3aGljaCBpcyB0aGUgb3JpZ2luYWwgdW5zcGxpdCBpbnNuLgorCShzY2hlZHVsZV9pbnNucyk6IERlbGV0ZSB1bnVzZWQgdm9sYXRpbGVwIGNvZGUuICBQYXNzIG5ldyBwYXJhbWV0ZXIKKwl0byB1cGRhdGVfbGlua3MuCisKK1RodSBBcHIgMTEgMTU6MzQ6NDQgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG91dC1tODhrLmMgKHBpY19hZGRyZXNzaW5nX2Jhc2VfcnR4KTogVXNlIHBpY19vZmZzZXRfdGFibGVfcnR4CisJaW5zdGVhZC4gIE90aGVyd2lzZSwgUElDIGZhaWxzIG1pc2VyYWJseSBmb3IgaW5saW5lIGZ1bmN0aW9ucy4KKwkobGVnaXRpbWl6ZV9hZGRyZXNzKTogU3VwcG9ydCAtbWJpZy1waWMuCisJKHByaW50X29wZXJhbmQpOiBBZGQgYGcnIGZvciBwcmludGluZyAjZ290X3JlbCAoZm9yIC1tYmlnLXBpYykuCisJKiB0bS1tODhrLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogUElDX09GRlNFVF9UQUJMRV9SRUdOVU0KKwlpcyB1c2VkIGFuZCBpcyBmaXhlZCBmb3IgUElDLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBEaXN0aW5ndWlzaCB0aGUgLW1iaWctcGljIGNhc2UuCisJKiBtODhrLm1kIChTSW1vZGUgaGkxNi9sbzE2KTogVXNlICVnIGZvciAtbWJpZy1waWMuCisKK1dlZCBBcHIgMTAgMjE6NTM6MzIgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBjeWdudXMuY29tKQorCisJKiB1bnJvbGwuYzogQ2hhbmdlIGdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8gc3RhdGljLgorCUZvdXIgbmV3IGdsb2JhbCB2YXJpYWJsZXMgbG9vcF9pdGVyYXRpb25fdmFyLCBsb29wX2luaXRpYWxfdmFsdWUsCisJbG9vcF9pbmNyZW1lbnQsIGFuZCBsb29wX2ZpbmFsX3ZhbHVlLCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4KKwlsb29wX2l0ZXJhdGlvbnMgYW5kIHByZWNvbmRpdGlvbl9sb29wX3AuCisJKHVucm9sbF9sb29wKTogQmVmb3JlIGRlbGV0ZWluZyB0aGUgaW5zbnMgaW4gdGhlIG9yaWdpbmFsIGxvb3AgYm9keSwKKwllbWl0IGEgbGFiZWwgYWZ0ZXIgdGhlIGxhc3QgaW5zbiB0byBiZSBkZWxldGVkLCB0byBlbnN1cmUgdGhhdCBubworCWRlbGV0ZV9pbnNuIGNhbGwgd2lsbCBkZWxldGUgcGFzdCB0aGF0IHBvaW50LgorCShwcmVjb25kaXRpb25fbG9vcF9wKTogVXNlIGdsb2JhbCBsb29wXyogdmFyaWFibGVzIHNldHVwIGJ5CisJbG9vcF9pdGVyYXRpb25zLCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjYWxjdWxhdGUgdGhlaXIgdmFsdWVzIGFnYWluLgorCShjb3B5X2xvb3BfYm9keSk6IERvbid0IGVtaXQgY29waWVzIG9mIHRoZSBzdGFydF9sYWJlbC4KKwkoYXBwcm94X2ZpbmFsX3ZhbHVlKTogQ09NUEFSSVNPTiBhcmd1bWVudCBub3cgcGFzc2VkIGFzIHRoZSBwYWlyCisJQ09NUEFSSVNPTl9DT0RFIGFuZCBDT01QQVJJU09OX1ZBTFVFLgorCShmaW5kX3NwbGl0dGFibGVfcmVncyk6IFdoZW4gY29tcGxldGVseSB1bnJvbGxpbmcgYSBsb29wLCBhbmQgdGhlCisJaW5pdGlhbCB2YWx1ZSBvZiBhIGJpdiBpcyBhIGhhcmQgcmVnaXN0ZXIgb3IgaXRzZWxmLCB0aGVuIG11c3QKKwljcmVhdGUgYSBuZXcgcmVnaXN0ZXIgdG8gaG9sZCBpdHMgaW5pdGlhbCB2YWx1ZSBmb3Igc3BsaXR0aW5nLgorCShsb29wX2l0ZXJhdGlvbnMpOiBTZXQgdGhlIG5ldyBnbG9iYWwgdmFyaWFibGVzIGxvb3BfKi4KKwlJZiB0aGUgY29tcGFyaXNvbiB2YWx1ZSBpcyBhbiBpbnZhcmlhbnQgcmVnaXN0ZXIsIHRoZW4gc2VhcmNoIHRoZSBpbnNucworCWJlZm9yZSB0aGUgbG9vcCB0byB0cnkgdG8gZmluZCBhIGNvbnN0YW50IHZhbHVlIGZvciB0aGUgcmVnaXN0ZXIuCisKK1dlZCBBcHIgMTAgMTY6MDI6MTYgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG91dC1tODhrLmMgKHBpY19hZGRyZXNzaW5nX2Jhc2VfcnR4KTogQSBwc2V1ZG8gcmVnaXN0ZXIgY29pbmVkCisJZm9yIGVhY2ggZnVuY3Rpb24gYXMgbmVlZGVkIGluIGxlZ2l0aW1pemVfYWRkcmVzcy4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogVXNlIGxlZ2l0aW1pemVfYWRkcmVzcyBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcKKwlISUdIL0xPX1NVTS4KKwkobGVnaXRpbWl6ZV9hZGRyZXNzKTogUmV3b3JrLCBiYXNlZCBvbiB0aGUgc3BhcmMgdmVyc2lvbiwgdG8KKwlpbXBsZW1lbnQgUElDLgorCShvdXRwdXRfY2FsbCk6IFVzZSB0aGUgI3BsdCBmb3JtIHdoZW4gZG9pbmcgUElDLgorCShtODhrX2xheW91dF9mcmFtZSk6IFRoZSBhZGRyZXNzaW5nIGJhc2UgcmVnaXN0ZXIgaXMgbm8gbG9uZ2VyCisJZml4ZWQgYW5kIHIxIG5lZWQgbm90IGJlIHNhdmVkIGZvciBQSUMuCisJKG91dHB1dF9wcm9sb2d1ZSk6IE91dHB1dCBpbnN0cnVjdGlvbnMgdG8gc2V0dXAgdGhlIGFkZHJlc3NpbmcKKwliYXNlIHJlZ2lzdGVyIGlmIG9uZSBpcyBuZWVkZWQuCisJKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFN1cHBvcnQgdGhlIFBJQyBjYXNlLgorCSogbTg4ay5tZCAobW9zdCBwYXR0ZXJucyB1c2luZyBoaTE2L2xvMTYpOiBEaXNhYmxlIHRoZXNlIGZvciBQSUMuCisJKiB0bS1tODhrLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTm8gbG9uZ2VyIG5lZWRlZC4KKwkoQUREUkVTU0lOR19CQVNFX1JFR05VTSk6IERlcml2ZWQgZnJvbSBwaWNfYWRkcmVzc2luZ19iYXNlX3J0eC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWNjZXB0IHRoZSBQSUMgY2FzZS4KKwkoTEVHSVRJTUlaRV9BRERSRVNTKTogVXNlIGxlZ2l0aW1pemVfYWRkcmVzcyBpbnN0ZWFkIG9mIEhJR0gvTE9fU1VNLgorCisJKiBtYWtlLW04OGssIG1ha2UtbTg4a2RndXg6IFVzZSBTeXNWIElOU1RBTEwgPSBjcCBhbmQgZm9yIERHL1VYLAorCXVzZSB0aGUgYmlzb24gLWwgb3B0aW9uIHRvIGFsbG93IGRlYnVnZ2luZyBpbiBjLXBhcnNlLnRhYi5jLgorCisJKiBGcm9tIGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1LgorCSogb3V0LW04OGsuYzogSW5jbHVkZSBpbnNuLWNvbmZpZy5oIGJlZm9yZSBjb25kaXRpb25zLmgsIHdoaWNoCisJcmVxdWlyZXMgaXQuCisJKiB4bS1tODhrZGd1eC5oOiBEZWZpbmUgU0VQQVJBVEVfQVVYX09VVFBVVCBiZWZvcmUgaW5jbHVkaW5nIGNvbmZpZy5oLgorCSogdG0tbTg4ay5oOiBEZWNsYXJlIE1EIGZ1bmN0aW9ucyBvbmx5IGlmIFNFUEFSQVRFX0FVWF9PVVRQVVQuCisKKwkqIHRtLW04OGsuaCwgdG0tbTg4a2RndXguaCwgdG0tbTg4a3N2cjQuaDogUmV3b3JrIFRBUkdFVF9WRVJTSU9OLgorCitXZWQgQXByIDEwIDA4OjE5OjAyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgYXBwbGUtZ3Vua2llcykKKworCSogY2FsbGVyLXNhdmUuYyAoZW1pdF9tdWx0X3Jlc3RvcmUpOiBUeXBvIHRlc3Rpbmcgb2Zmc2V0W3JlZ25vXSBzaWduLgorCisJKiBmb2xkLWNvbnN0LmMgKHRhcmdldF9pc2luZik6IFRlc3QgcmVhbCB2YWx1ZSBmb3IgaW5maW5pdHVkZS4KKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9JU0lORik6IFVzZSB0YXJnZXRfaXNpbmYuCisKKwkqIGNvbmZpZ3VyZTogQ2hhbmdlIC8gdG8gLS0gaW4gdmFsdWUgb2YgYHRhcmdldCcgaW4gTWFrZWZpbGUuCisKK1R1ZSBBcHIgIDkgMjA6MDk6NDkgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjb25maWd1cmU6IE1vZGlmeSBhc3NpZ25tZW50IHRvIGB0YXJnZXQnIGluIE1ha2VmaWxlLgorCShBSVggdGFyZ2V0KTogVXNlIGNvcnJlY3QgY29uZmlnIGZpbGVzLgorCQorCSogbWFrZS1haXgzODY6IE5ldyBmaWxlLgorCitUdWUgQXByICA5IDE5OjI4OjE2IDE5OTEgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZSBhdCB6ZXZzLnNpY3Muc2UpCisKKwkqIGxvbmdsb25nLmggKGhlYWRlcik6CisJTW9kaWZ5IGRlZmluaXRpb24gb2YgY291bnRfbGVhZGluZ196ZXJvcyBmb3IgaW5wdXQgPSAwLgorCSogKDY4MDIwKTogVGVzdCBmb3IgX19OZVhUX18gdG9vLgorCSogKDY4MDIwIF9fdW11bHNpZGkzLCB1bXVsX3BwbW0sIHVkaXZfcXJubmQpOgorCVVzZSBjb25zdHJhaW50cyAiZG1pIiwgbm90ICJnIiAoYXZvaWQgYWRkcmVzcyByZWdpc3RlcnMpLgorCSogKDg4MDAwIGFkZF9zc2FhYSwgc3ViX2RkbW1zcyk6IFVzZSByIG1vZGlmaWVyIGZvciBvdXRwdXQKKwl0ZW1wbGF0ZXMsIHVzZSBKLCBub3QgSSwgYXMgY29uc3RyYWludCBmb3IgdGhlIGNhcnJ5LWluIGluc25zCisJKiAoYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSk6IElmIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpcyBub3QKKwlkZWZpbmVkLCBkZWZpbmUgaXQgYXMgMC4KKworVHVlIEFwciAgOSAxOToxNDozNCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChvcHRpbWl6ZV9iaXRfZmllbGQpOiBGaXggdHlwby4KKworCSogY2NjcC5jIChkb19kZWZpbmUpOiBEb24ndCBjcmFzaCB3aGVuIGEgYnVpbHRpbiBtYWNybyBpcworCXJlZGVmaW5lZC4KKworVHVlIEFwciAgOSAxNToxMTo0MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMpCisKKwkqIGV4cHIuYyAobW92ZV9ieV9waWVjZXMpOiBEb24ndCBmYWlsIHRvIGNvbXBpbGUgaWYgbm8gbW92cWkuCisKKwkqIGVtaXQtcnRsLmMgKGdldF9sYXN0X2luc25fYW55d2hlcmUpOiBVc2UgZmlyc3Qgbm9uZW1wdHkgc2VxLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfY29uc3RydWN0b3IpOiBGaXggdHlwby4KKworRnJpIEFwciAgNSAyMjoxNTo1NyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQgKGV4dGVuZHFpeGkpOiBBZGQgQ0xPQkJFUiB0byBBU0hJRlRSVCBpbnNuLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogU2hpZnQgb3BlcmFuZCBvZiBQTFVTIHVzaW5nCisJY29ycmVjdCBtb2RlLgorCUNvcnJlY3RseSBzaW1wbGlmeSBvdXRlcl9jb25zdCB3aGVuIGRvbmUuCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IERvbid0IGRlLXJlZmVyZW5jZSBJTkxPQyBpZiBpdCBpcyAwLgorCisJKiBleHByLmMgKGNvbnZlcnRfdG9fbW9kZSk6IENhbGwgcHJvdGVjdF9mcm9tX3F1ZXVlLgorCitGcmkgQXByICA1IDEzOjI5OjU1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmFyYXNtLmMgKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsIEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6CisJQWNjZXB0IHR3byBhcmd1bWVudHMuCisKK0ZyaSBBcHIgIDUgMDg6NDU6MTggMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBDb252ZXJ0IE9QMSB0byBDT01QVVRFX01PREUgd2hlbiB3ZQorCWNvbnZlcnQgT1AwLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogVXNlIGdlbl9iaW5hcnkuCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBJZiB3ZSBoYXZlIGEgWkVST19FWFRSQUNUIGZyb20gYSBjb25zdGFudAorCXdpdGggb25seSBvbmUgYml0IHNldCwgY29udmVydCBpbnRvIGNvbXBhcmlzb24gb2YgcG9zaXRpb24gd2l0aAorCWxvY2F0aW9uIG9mIGJpdCBpbiBjb25zdGFudDsgdGhpcyBzaW1wbGlmaWVzICgoMSA8PCB4KSAmIDEpID09IDAuCisKKwkqIGNvbWJpbmUuYyAoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBDb3B5IGNvZGUgZm9yIENPTlNUX0RPVUJMRQorCWZyb20gZ2VuX2xvd3BhcnQgaW5zdGVhZCBvZiBjYWxsaW5nIGl0OyBpdCB3aWxsIGFib3J0IGZvciBjZXJ0YWluCisJZmxvYXRpbmctcG9pbnQgY2FzZXMsIHdoaWxlIHdlIHdpbGwganVzdCBzdXJyb3VuZCB0aGUgb2JqZWN0IHdpdGgKKwlhIFNVQlJFRy4KKworVGh1IEFwciAgNCAyMjozMTozNiAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIHVucm9sbC5jIChuZXcgZmlsZSk6IEltcGxlbWVudHMgbG9vcCB1bnJvbGxpbmcuICBDb21wbGV0ZWx5CisJdW5yb2xscyBzbWFsbCBjb25zdGFudCBib3VuZGVkIGxvb3BzLiAgVW5yb2xscyBvdGhlciBjb25zdGFudAorCWJvdW5kZWQgbG9vcHMgYnkgYW4gYW1vdW50IG1vZHVsbyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgc28gdGhhdAorCW9ubHkgb25lIGV4aXQgdGVzdCBpcyBuZWVkZWQuICBQcmVjb25kaXRpb25zIGxvb3BzIHdob3NlIGl0ZXJhdGlvbgorCWNvdW50IGNhbiBiZSBjYWxjdWxhdGVkIGF0IHJ1biB0aW1lLCBzbyB0aGF0IG9ubHkgb25lIGV4aXQgdGVzdAorCWlzIG5lZWRlZC4gIENhbiBhbHNvIHVucm9sbCBhbnkgb3RoZXIgbG9vcCBieSBoYXZpbmcgbXVsdGlwbGUKKwljb3BpZXMgb2YgdGhlIGV4aXQgdGVzdHMuICBUcmllcyB0byBzaW1wbGlmeSBhZGRyZXNzZXMgd2hpbGUKKwl1bnJvbGxpbmcuCisKKwkqIHRyZWUuZGVmOiBCTE9DSyB0cmVlcyBoYXZlIDQgZmllbGRzLCBub3QgNS4KKworCSogdG9wbGV2LmM6IEFkZCBuZXcgZmxhZyAtZHQgdG8gZHVtcCBSVEwgYWZ0ZXIgdGhlIHNlY29uZCBjc2UgcGFzcy4KKwlEZWZpbmUgdHdvIG5ldyBmbGFncywgZmxhZ191bnJvbGxfbG9vcHMgYW5kIGZsYWdfdW5yb2xsX2FsbF9sb29wcywKKwlhbmQgYWRkIGNvZGUgdG8gc3VwcG9ydCB0aGVpciB1c2UgZm9yIGxvb3AgdW5yb2xsaW5nLiAgUHJpbnQgdGhlCisJZXhlYyB0aW1lIGZvciB0aGUgc2hvcnRlbi1icmFuY2ggcGFzcyBpbiB0aGUgcHJvcGVyIHBsYWNlLCBpLmUuCisJYWZ0ZXIgZGVsYXllZCBicmFuY2ggcmVvcmdhbml6YXRpb24uCisKKwkqIHN0bXQuYyAoZmluZF9sb29wX3RyZWVfYmxvY2tzKTogTmV3IGZ1bmN0aW9uLiAgQ3JlYXRlcyBhIG1hcHBpbmcKKwliZXR3ZWVuIEJMT0NLIHRyZWVzIGFuZCBsb29wcy4gIFRoaXMgaW5mbyBpcyBuZWVkZWQgd2hlbiBkb2luZyBib3RoCisJbG9vcCB1bnJvbGxpbmcgYW5kIG91dHB1dHRpbmcgZGVidWdnZXIgaW5mby4KKwkodW5yb2xsX2Jsb2NrX3RyZWVzKTogTmV3IGZ1bmN0aW9uLiAgTWFrZXMgQ09QSUVTIGNvcGllcyBvZiB0aGUgYmxvY2sKKwl0cmVlcyBjb3JyZXNwb25kaW5nIHRoZSBsb29wIGluZGljYXRlZCBieSBMT09QX05VTUJFUiwgc28gdGhhdCB0aGUKKwlCTE9DSyBub3RlcyBpbnNpZGUgdGhlIGxvb3Agd2lsbCBzdGlsbCBtYXRjaCB0aGUgQkxPQ0sgdHJlZXMgZm9yCisJdGhlIGxvb3AuCisKKwkqIHJ0bC5oOiBEb2N1bWVudCB0aGUgbmV3IG5hbWVkIHBhdHRlcm4KKwkiZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyIuICBBZGQgbWFjcm9zIHRvIGFjY2VzcyBuZXcKKwlmaWVsZCBvZiBpbmxpbmVfaGVhZGVyIHJ0eCwgd2hpY2ggaG9sZHMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbidzCisJb3JpZ2luYWwgREVDTF9JTklUSUFMIHRyZWUuCisKKwkqIHJ0bC5kZWY6IE5ldyBlbnRyeSBmb3IgaW5saW5lX2hlYWRlciB0byBob2xkIGEgcG9pbnRlciB0byB0aGUKKwlmdW5jdGlvbidzIG9yaWdpbmFsIERFQ0xfSU5JVElBTCB0cmVlLgorCisJKiBsb29wLmggKG5ldyBmaWxlKTogTW92ZSBtYW55IGRlY2xhcmF0aW9ucyBmcm9tIGxvb3AuYyB0byB0aGUgbmV3CisJZmlsZSBsb29wLmgsIGFuZCBjaGFuZ2Ugc29tZSBmcm9tIHN0YXRpYyB0byBleHRlcm4sIHNvIHRoYXQgdGhleQorCWNhbiBiZSBzaGFyZWQgd2l0aCB1bnJvbGwuYy4gIEFsc28gZ2xvYmFsaXplIG5hbWVzIGZvciB2YXJpYWJsZXMKKwljaGFuZ2VkIGZyb20gc3RhdGljIHRvIGV4dGVybi4KKworCSogbG9vcC5jOiBNb3ZlIG1hbnkgZGVjbGFyYXRpb25zIGZyb20gbG9vcC5jIHRvIHRoZSBuZXcJZmlsZSBsb29wLmgsCisJYW5kIGNoYW5nZSBzb21lIGZyb20gc3RhdGljIHRvIGV4dGVybiwgc28gdGhhdCB0aGV5IGNhbiBiZSBzaGFyZWQKKwl3aXRoIHVucm9sbC5jLiAgQWRkIG1pc2MgY29tbWVudHMgdG8gYmV0dGVyIGV4cGxhaW4gdGhlIGNvZGUuCisJQ2hhbmdlIG5hbWUgb2YgZ2xvYmFsIGFycmF5cyBsb29wX3N0YXJ0IGFuZCBsb29wX2VuZCB0bworCWxvb3BfbnVtYmVyX2xvb3Bfc3RhcnRzIGFuZCBsb29wX251bWJlcl9sb29wX2VuZHMgc28gdGhhdCB0aGV5IHdvbid0CisJYmUgY29uZnVzZWQgd2l0aCBsb2NhbCBsb29wX3N0YXJ0IGFuZCBsb29wX2VuZCB2YXJpYWJsZXMuCisJTmV3IHZhcmlhYmxlcyBsb29wX251bWJlcl9leGl0X2xhYmVscywgbG9vcF9udW1iZXJfZmlyc3RfYmxvY2ssCisJbG9vcF9udW1iZXJfbGFzdF9ibG9jaywgbG9vcF9udW1iZXJfYmxvY2tfbGV2ZWwsIGxvb3Bfbl9pdGVyYXRpb25zLgorCU9sZF9tYXhfcmVnIHJlbmFtZWQgdG8gbWF4X3JlZ19iZWZvcmVfbG9vcC4gIE1heF91aWQgcmVuYW1lZCB0bworCW1heF91aWRfZm9yX2xvb3AuICBJbmR1Y3RfdmFyIHJlbmFtZWQgdG8gcmVnX2l2X3R5cGUuCisJSW5kdWN0X3N0cnVjdCByZW5hbWVkIHRvIHJlZ19pdl9pbmZvLiAgQ2xhc3Nfc3RydWN0IHJlbmFtZWQgdG8KKwlyZWdfYml2X2NsYXNzLiAgSXZfbGlzdCByZW5hbWVkIHRvIGxvb3BfaXZfbGlzdC4KKwlSZW5hbWUgKHN0cnVjdCBpbmR1Y3Rpb24pIGZpZWxkIGFsd2F5cyB0byBhbHdheXNfY29tcHV0YWJsZS4KKwlSZW5hbWUgKHN0cnVjdCBpbmR1Y3Rpb24pIGZpZWxkIGZhbWlseSB0byBuZXh0X2l2LgorCU5ldyAoc3RydWN0IGluZHVjdGlvbikgZmllbGQgbm90X3JlcGxhY2VhYmxlLgorCShsb29wX29wdCk6IEFkZCBjb2RlIHRvIGFsbG9jYXRlIHNvbWUgbmV3IGFycmF5cyBmb3IgdW5yb2xsaW5nCisJc3VwcG9ydC4gIEFkZCBjYWxsIHRvIGZpbmRfbG9vcF90cmVlX2Jsb2NrcyB0byBjcmVhdGUgdGhlIEJMT0NLIHRyZWUKKwl0byBsb29wIG1hcCBuZWVkZWQgd2hlbiB1bnJvbGxpbmcgYW5kIG91dHB1dHRpbmcgZGVidWdnZXIgaW5mby4KKwkoc2Nhbl9sb29wKTogRml4IHNldHRpbmcgb2YgbWF5YmVfbmV2ZXIgb2YgbGFiZWwvanVtcC4gIFRoZSBvbGQgY29kZQorCWFsd2F5cyBmYWlsZWQuCisJKHByZXNjYW5fbG9vcCk6IERlbGV0ZSBvYnNvbGV0ZSBjb2RlLgorCShmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBBZGQgY29kZSB0byBpbml0aWFsaXplCisJbG9vcF9udW1iZXJfZXhpdF9sYWJlbHMuCisJKG1hcmtfbG9vcF9qdW1wKTogQWRkIGNvZGUgZm9yIGtlZXAgY2hhaW4gb2YgbG9vcF9udW1iZXJfZXhpdF9sYWJlbHMKKwlmb3IgZWFjaCBsb29wLgorCShpbnZhcmlhbnRfcCk6IExBQkVMX1JFRnMgYXJlIG5vdCBpbnZhcmlhbnQgd2hlbiBkb2luZyBsb29wIHVucm9sbGluZy4KKwlSZW1vdmUgc3RhdGljIGZyb20gZGVmaW5pdGlvbiwgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGZyb20gdW5yb2xsLmMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IENoYW5nZSBuYW1lIG9mIHZhcmlhYmxlIG1heWJlX25ldmVyIHRvCisJbm90X2V2ZXJ5X2l0ZXJhdGlvbiwgdG8gaGVscCBlbXBoYXNpemUgdGhhdCBpdCBpcyBub3QgdGhlIHNhbWUKKwlhcyB0aGUgdmFyaWFibGUgbWF5YmVfbmV2ZXIgaW4gdGhlIGNvZGUgbW90aW9uIGNvZGUuICBNb2RpZnkgY29kZQorCXRoYXQgY29tcHV0ZXMgaXRzIHZhbHVlIHNvIHRoYXQgaXQgd2lsbCBiZSBmYWxzZSBtb3JlIG9mdGVuLCByZXN1bHRpbmcKKwlpbiBiZXR0ZXIgY29kZS4KKwkoc3RyZW5ndGhfcmVkdWNlKTogQWRkZWQgY29kZSB0byBjYWxsIHRoZSBuZXcgbG9vcCB1bnJvbGxpbmcKKwlmdW5jdGlvbnMsIGUuZy4gdW5yb2xsX2xvb3AsIGxvb3BfaXRlcmF0aW9ucywgZXRjLgorCShzdHJlbmd0aF9yZWR1Y2UpOiBOZXcgY29kZSB0byBoYW5kbGUgYml2J3MgYW5kIGdpdidzIHdoaWNoIG11c3QKKwliZSBzZXQgdG8gdGhlaXIgZmluYWxfdmFsdWUgYWZ0ZXIgdGhlIGxvb3AgZXhpdHMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFJldmVyc2VkIGdpdidzIGFuZCBiaXYncyBtdXN0IGhhdmUgdGhlaXIgdmFsdWVzCisJY2FsY3VsYXRlZCBkaWZmZXJlbnRseS4gIEFkZCBuZXcgZmllbGQgcmV2ZXJzZWQgdG8gc3RydWN0IGluZHVjdGlvbiwKKwlhbmQgY29kZSB0byBjaGVjayBhbmQgdXNlIGl0cyB2YWx1ZS4KKwkoc3RyZW5ndGhfcmVkdWNlKTogT25seSBjaGVjayB2YWx1ZSBvZiBibC0+bm9ubmVnIGZvciBhcmNoaXRlY3R1cmVzCisJdGhhdCBoYXZlIGEgZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyBpbnN0cnVjdGlvbi4KKwkoZmluZF9tZW1fZ2l2cyk6IE5ldyBhcmd1bWVudCBsb29wX3N0YXJ0LgorCShyZWNvcmRfZ2l2KTogTmV3IGFyZ3VtZW50IGxvb3Bfc3RhcnQuCisJVGhlIGFsd2F5c19jb21wdXRhYmxlIGZpZWxkIGZvciBERVNUX0FERFIgZ2l2cyBpcyBhbHdheXMgc2V0IHRydWUuCisJTmV3IGNvZGUgdG8gY2hlY2sgZm9yIGNhc2Ugb2Ygc3BhZ2hldHRpIGNvZGUsIGluIHdoaWNoIGNhc2UgdGhlCisJZ2l2IGNhbiBuZXZlciBiZSBjb25zaWRlcmVkIHJlcGxhY2VhYmxlLgorCShjaGVja19maW5hbF92YWx1ZSk6IE5ldyBmdW5jdGlvbi4gRm9yIGdpdnMgd2hpY2ggYXJlIG5vdCBvdGhlcndpc2UKKwlyZXBsYWNlYWJsZSwgdHJ5IHRvIGNhbGN1bGF0ZSB0aGVpciBmaW5hbCB2YWx1ZSwgYW5kIHRoZW4gdHJ5CisJdG8gdXNlIHRoaXMgdG8gbWFrZSB0aGVtIHJlcGxhY2VhYmxlLgorCSh1cGRhdGVfZ2l2X2Rlcml2ZSk6IFNraXAgaW5uZXIgbG9vcCBpZiBnaXYgaXMga25vd24gdG8gYmUgdW5kZXJpdmFibGUKKwlhdCB0aGUgYmVnaW5uaW5nLiAgTXVzdCBzZXQgY2FudF9kZXJpdmUgaWYgd2UgcGFzcyBhbiBpbnNuIHRoYXQKKwltb2RpZmllcyB0aGUgZ2l2J3MgYml2LCBhbmQgd2UgY2FuJ3QgY2FsY3VsYXRlIGFuIGFkanVzdG1lbnQuCisJKGVtaXRfaXZfYWRkX211bHQpOiBSZW1vdmUgc3RhdGljIGRlZmluaXRpb24gc28gdGhhdCBpdCBpcyBjYWxsYWJsZQorCWZyb20gdW5yb2xsLmMuCisJKGNoZWNrX2RicmFfbG9vcCk6IFJldmVyc2VkIGJpdidzIG11c3QgYmUgbWFya2VkIGFzIHN1Y2gsIHNvIHRoYXQKKwl0aGV5IGNhbiBiZSB0cmVhdGVkIHNwZWNpYWxseSBpbiB0aGUgcmVzdCBvZiBsb29wLmMuCisJKGZpbmFsX2Jpdl92YWx1ZSk6IE1vdmVkIHRvIHVucm9sbC5jLCBhbG9uZ3NpZGUgdGhlIG5ldyBmdW5jdGlvbgorCWZpbmFsX2dpdl92YWx1ZS4gIEV4dGVuc2l2ZWx5IHJld3JpdHRlbiB0byB3b3JrIGZvciBtb3N0IGNvbW1vbgorCWNhc2VzLgorCSh1cGRhdGVfcmVnX2xhc3RfdXNlKTogVmVyaWZ5IHRoYXQgaW5zbnMgaGF2ZSBhIHZhbGlkIGx1aWQgYmVmb3JlCisJdHJ5aW5nIHRvIHVzZSBpdC4gIERvbid0IHBlcmZvcm0gYW55IGFjdGlvbiBpZiBubyB2YWx1ZSBsdWlkLgorCShnZXRfY29uZGl0aW9uKTogQ29ycmVjdCBpbml0aWFsIGNvbW1lbnQuCisJKGdldF9jb25kaXRpb25fZm9yX2xvb3ApOiBSZW1vdmUgc3RhdGljIGRlZmluaXRpb24gc28gaXQgaXMgY2FsbGFibGUKKwlmcm9tIHVucm9sbC5jLgorCisJKiBpbnRlZ3JhdGUuaDogUmVwbGFjZSBgdHJlZScgdXNlIGluIGRlZmluaXRpb24gd2l0aAorCWB1bmlvbiB0cmVlX25vZGUgKicgc28gdGhhdCB0cmVlLmggZG9lcyBub3QgaGF2ZSB0byBiZSBpbmNsdWRlZCB3aGVuCisJdGhpcyBmaWxlIGlzIGluY2x1ZGVkLgkKKworCSogaW50ZWdyYXRlLmMgKGluaXRpYWxpemVfZm9yX2lubGluZSk6IFBhc3MgYWRkaXRpb25hbCBhcmd1bWVudCwKKwl0aGUgREVDTF9JTklUSUFMIChmbmRlY2wpIHRyZWUsIHRvIGdlbl9pbmxpbmVfaGVhZGVyX3J0eC4gIFVwZGF0ZQorCWFuZCBjb3JyZWN0IGNvbW1lbnQuCisJKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogQ29weSB0aGUgZGVjbCB0cmVlLCBzbyB0aGF0IHZpcnR1YWwgcmVnCisJaW5zdGFudGlhdGlvbiwgYW5kIGxvb3AgdW5yb2xsaW5nLCB3b24ndCBhZmZlY3QgdGhlIHNhdmVkIHRyZWUuCisJKGNvcHlfZGVjbF90cmVlKTogTmV3IGFyZ3VtZW50LCBmdW5jdGlvbmJvZHksIHdoaWNoIGRpc3Rpbmd1aXNoZWQKKwliZXR3ZWVuIGNhbGxzIGZyb20gc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcgYW5kIGNhbGxzIGZyb20KKwlleHBhbmRfaW5saW5lX2Z1bmN0aW9uLgorCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFJldHVybiBvcmlnIGluc3RlYWQgb2YgYWJvcnRpbmcgd2hlbgorCWlubGluZV90YXJnZXQgaXMgemVybyBzbyB0aGF0IGxvb3AgdW5yb2xsaW5nIGNhbiB1c2UgdGhpcyBjb2RlLgorCisJKiBnY2MudGV4aW5mbzogRG9jdW1lbnQgdGhlIG5ldyBvcHRpbWl6YXRpb24gZmxhZ3MgLWZ1bnJvbGwtbG9vcHMKKwlhbmQgLWZ1bnJvbGwtYWxsLWxvb3BzLCB0aGUgbmV3IGR1bXAgb3B0aW9uIC1kdCwgYW5kIHRoZSBuZXcgbmFtZWQKKwlwYXR0ZXJuCSJkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvIi4KKworCSogZmxhZ3MuaDogRGVmaW5lIHR3byBuZXcgZmxhZ3MsIGZsYWdfdW5yb2xsX2xvb3BzIGFuZAorCWZsYWdfdW5yb2xsX2FsbF9sb29wcy4KKworCSogZW1pdC1ydGwuYyAoZ2VuX2lubGluZV9oZWFkZXJfcnR4KTogTmV3IGFyZ3VtZW50CisJb3JpZ2luYWxfZGVjbF9pbml0aWFsLiAgUGFzcyB0byBnZW5fcnR4IGNhbGwuCisKKwkqIGFsbGlhbnQubWQsIG02OGsubWQ6IE5hbWUgdGhlIHBhdHRlcm4gdGhhdCB1c2VzIHRoZSBSRUdfTk9OTkVHCisJbm90ZSB0byAiZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyIuCisKKwkqIE1ha2VmaWxlLmluOiBBZGQgc291cmNlIGZpbGUgdW5yb2xsLmMgYW5kIGhlYWRlciBmaWxlIGxvb3AuaCB0bworCXRoZSBjYzEgZGVwZW5kZW5jaWVzLiAgQWRkICouY3NlMiB0byB0aGUgbGlzdCBvZiBmaWxlcyBkZWxldGVkIGJ5CisJYG1ha2UgY2xlYW4nLgorCitUaHUgQXByICA0IDE2OjEzOjM3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX2NvbnN0cnVjdG9yLCBhc3NlbWJsZV9kZXN0cnVjdG9yKTogTmV3IGZ1bmN0aW9ucy4KKwlUaGV5IHVzZSBBU01fT1VUUFVUX0NPTlNUUlVDVE9SIGFuZCBBU01fT1VUUFVUX0RFU1RSVUNUT1IuCisJKiBjcGx1cy1kZWNsMi5jIChmaW5pc2hfZmlsZSk6IFVzZSB0aGVtLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUGFzcyBsb2NhdGlvbiBhcyBvdXRsb2MgZm9yIG91dHB1dCByZWxvYWQuCisKKwkqIG9iamMtYWN0aW9ucy5jIChvYmpjX2NsYXNzX2lkLCBzeW50aF9tb2R1bGVfcHJvbG9ndWUpOgorCUluaXRpYWxpemUgbmV3IHZhcmlhYmxlIHRvIGhvbGQgaWRlbnRpZmllciBmb3IgIm9iamNfY2xhc3MiLgorCisJKiBvYmpjLWFjdGlvbnMuYyAob2JqY19jb21wdHlwZXMpOiBBbGxvdyBhc3NpZ25pbmcgYmV0d2VlbiB0eXBlcworCWlkIGFuZCBDbGFzcyB3aXRob3V0IHdhcm5pbmcuCisKKwkqIGMtdHlwZWNrLmMgKHdhcm5fZm9yX2Fzc2lnbm1lbnQpOiBXaGVuIHRoZXJlIGlzIGEgdHlwZSBtaXNtYXRjaAorCWluIHRoZSBoaWRkZW4gYXJndW1lbnRzIG9mIGEgbWVzc2FnZSBleHByZXNzaW9uLCBkb24ndCBwcmludCB0aGUKKwlhcmd1bWVudCBudW1iZXIgYXMgMCBvciAtMS4gIEluc3RlYWQgcHJpbnQgdGhlIHdhcm5pbmcgYXMgd291bGQKKwliZSBkb25lCWZvciBhbiBleHBsaWNpdCBjYWxsIHRvIG9iamNfbXNnU2VuZCAodGhpcyBzaG91bGQgbmV2ZXIKKwloYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2UpLgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydCk6IFJldmVyc2UgI2lmIGZvciBDT05TVF9ET1VCTEUgY2FzZS4KKworVGh1IEFwciAgNCAxMzoyNzowMiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogaGFyZC1yZWctc2V0LmggKFNFVF9IQVJEX1JFR19CSVQsIENMRUFSX0hBUkRfUkVHX0JJVCwKKwlURVNUX0hBUkRfUkVHX0JJVCk6IFVzZSB1bnNpZ25lZCBhcml0aG1ldGljIHRvIGlzb2xhdGUgdGhlIHdvcmQgYW5kCisJYml0IG51bWJlciwgd2hpY2ggcHJvZHVjZXMgYmV0dGVyIG9wdGltaXplZCBjb2RlLgorCitUaHUgQXByICA0IDA3OjM0OjE3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogQXZvaWQgYWRqdXN0aW5nIExBQkVMX05VU0VTIGlmIHRoZQorCWluc24gaXMgYSBjb25kaXRpb25hbCByZXR1cm4uCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgd2UgZmluZCB0aGF0IGEgcmVwbGFjZW1lbnQgY2Fubm90IGJlCisJZG9uZSBhbmQgdGhhdCByZXBsYWNlbWVudCBub3cgZW5hYmxlcyBhIHNlY29uZGFyeSByZXBsYWNlbWVudCwKKwl0aGlzIG1heSBkaXNhYmxlIGEgdGhpcmQgcmVwbGFjZW1lbnQgaW4gc29tZSBjYXNlcy4KKwkoZWxpbWluYXRlX3JlZ3MsIGNhc2UgU0VUKTogRG9uJ3Qgc3RvcCBhZnRlciB3ZSBmaW5kIHRoZSBmaXJzdAorCW1hdGNoIHdoZW4gbG9va2luZyBmb3IgbW9kaWZpZWQgcmVnaXN0ZXJzLgorCisJKiBjb21iaW5lLmMgKHByZXZpb3VzX251bV91bmRvcyk6IE5ldyB2YXIuCisJKHRyeV9jb21iaW5lKTogU2V0IGl0IGFmdGVyIGVhY2ggY2FsbCB0byBzdWJzdC4KKwlXaGVuIHN1YnN0aXR1dGluZyBJMSBpbnRvIEkyLCBzb210aW1lcyBtYWtlIGEgY29weSBvZiBQQVRURVJOIChpMikuCisJKGdlbl9ydHhfY29tYmluZSk6IFN0YXJ0IGF0IFBSRVZJT1VTX05VTV9VTkRPUy4KKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogU3RhcnQgY2hlY2sgZm9yIHZvbGF0aWxlIHJlZmVyZW5jZXMKKwlhZnRlciBJTlNOLCBub3QgYXQgSU5TTi4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFdoZW4gd2UgZmluZCBhIHNwbGl0IHBvaW50LCBlbnN1cmUKKwl0aGF0IEkyIGlzIGEgcmVnaXN0ZXIuICBJZiBpdCBpcyBvZiB0aGUgd3JvbmcgbW9kZSwgY2hhbmdlIHRoZQorCW1vZGUgaWYgd2UgY2FuLCBqdXN0IGxpa2Ugd2UgZG8gd2l0aCBDQ21vZGUgcmVnaXN0ZXJzLgorCShmaW5kX3NwbGl0X3BvaW50KTogRG9uJ3Qgc3BsaXQgYW4gZXh0cmFjdGlvbiBpZiBpdCBjcm9zc2VzIHRoZQorCWJvdW5kYXJ5IGdpdmVuIGJ5IHRoZSBmaWVsZCAoaS5lLiwgYSBieXRlIGJvdW5kYXJ5IGlmIFFJbW9kZSkuCisJQ29ycmVjdCB0eXBvOiBTaG91bGQgZ2VuZXJhdGUgTFNISUZUUlQsIG5vdCBMU0hJRlQuCisJKHN1YnN0KTogQ29ycmVjdGx5IHRlc3QgdG8gc2VlIGlmIHdlIGNhbiBjaGFuZ2UgdGhlIG1vZGUgb2YKKwlhIHJlZ2lzdGVyIGZvciBhIE1PREVfQ0MgY29tcGFyaXNvbi4KKwkoZGlzdHJpYnV0ZV9ub3Rlcyk6IElmIGEgTk9URSByZWZlcmVuY2VzIGEgcHNldWRvLXJlZ2lzdGVyLAorCWVuc3VyZSBpdCByZWZlcmVuY2VzIHRoZSBsYXRlc3QgY29weSBvZiB0aGF0IHJlZ2lzdGVyLgorCVdoZW4gc2Nhbm5pbmcgZm9yIGxhc3QgdXNlLCBkb24ndCBzdG9wIGF0IENBTExfSU5TTnMuCisKKwkqIGNvbWJpbmUuYyAoZXhwYW5kX2NvbXBvdW5kX29wZXJhdGlvbik6IERvbid0IGdldCBjb25mdXNlZCBhYm91dAorCSh6ZXJvX2V4dGVuZCAoYXNtX29wZXJhbmRzIC4uKSkgYmVjYXVzZSBvZiB0aGUgVk9JRG1vZGUgQVNNX09QRVJBTkRTLgorCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogRW5zdXJlIHdlIGRvIGNvbXB1dGF0aW9ucyBpbiBwcm9wZXIgbW9kZS4KKwlTaW1wbGlmeSBaRVJPX0VYVFJBQ1QgYW5kIFpFUk9fRVhURU5EIHdoZW4gd2UgaGF2ZSBhIFBMVVMuCisJKHNpZ25pZmljYW50X2JpdHMpOiBEb24ndCBjYWxsIGdldF9sYXN0X3ZhbHVlIG9uIGEgU1VCUkVHLCBqdXN0IFJFRy4KKwlDb3JyZWN0IHNpZ25pZmljYW50IGJpdHMgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBXaGVuIFZBUk9QIGlzIGxvZ2ljYWwsIHVzZSBwcm9wZXIgbW9kZSB3aGVuCisJY29tcHV0aW5nIHNoaWZ0ZWQgY29uc3RhbnQuCisKKwkqIGNvbWJpbmUuYyAoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBDYWxsIGdlbl9sb3dwYXJ0IGlmIHdlIGhhdmUKKwlhIENPTlNUX0RPVUJMRS4KKworCSogZ2VuY29uZmlnLmMgKHdhbGtfaW5zbl9wYXJ0LCBtYWluKTogV3JpdGUgYSBkZWZpbml0aW9uCisJZm9yIEhBVkVfbG9fc3VtIGlmIGEgTE9fU1VNIGlzIHByZXNlbnQgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBJZiB3ZSBoYXZlIGEgUEFSQUxMRUwgb2YgYSBTSUdOX0VYVEVORAorCWFuZCBhIGxvYWQgb2YgbWVtb3J5LCBzcGxpdCBpdCBpbnRvIGEgbG9hZCBhbmQgU1VCUkVHIGFzc2lnbm1lbnQuCisJKGZpbmRfc3BsaXRfcG9pbnQpOiBJZiB3ZSBoYXZlIExPX1NVTSBmb3IgdGhpcyBtYWNoaW5lLAorCXNwbGl0IChtZW0gKHN5bWJvbF9yZWYgLi4pKSB1c2luZyBISUdIIGFuZCBMT19TVU0uCisJSWYgd2UgaGF2ZSBvcGVyYXRpb24gd2l0aCBzZWNvbmQgb3BlcmFuZCBjb25zdGFudCwgbWF5YmUgd2UgY291bGRuJ3QKKwlmaXQgdGhlIGNvbnN0YW50IGluIHRoZSBpbnNuLCBzbyB0cnkgdG8gc3BsaXQgdGhlcmUuCisJTW92ZSBOT1QgdG8gZmlyc3Qgb3BlcmFuZCBzbyB3ZSdsbCB0cnkgdG8gc3BsaXQgdGhlIG90aGVyIG9wZXJhbmQKKwlmaXJzdC4KKwkoc3Vic3QpOiBObyByZWFzb24gdG8gYXZvaWQgbWFraW5nIHBhcmFkb3hpY2FsIFNVQlJFR3MgYW5kIHdlIG1pc3MKKwlzb21lIG9wdGltaXphdGlvbnMgaWYgd2UgZG9uJ3QuCisJQ29udmVydCAobG9fc3VtIChoaWdoIEZPTykgRk9PKSB0byBGT08uCisJQ29udmVydCAoQzEgKyAoeCArIEMyKSB0byAoQzEgLSBDMikgLSB4LgorCVVzZSBkaXN0cmlidXRpdmUgbGF3IGluIG1vcmUgcGxhY2VzIHdpdGggbG9naWNhbCBvcGVyYXRpb25zLgorCShhcHBseV9kaXN0cmlidXRpdmVfbGF3KTogUHJvcGVybHkgZGlzdHJpYnV0ZSBJT1Igb3ZlciBYT1IuCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogU2ltcGxpZnkgKGFzaGlmdCAocGx1cyAuLikgLi4uKS4KKwkoc2ltcGxpZnlfY29tcGFyaXNvbik6IEFkZCBjb2RlIHRvIHJlbW92ZSBleHRyYW5lb3VzIEFORAorCW9wZXJhdGlvbnMgd2hlbiBjb21wYXJpbmcgcmVzdWx0IG9mIHR3byBjb21wYXJpc29ucyBvbiBzb21lIG1hY2hpbmVzLgorCUlnbm9yZSBiaXRzIG5vdCBhcHBsaWNhYmxlIGluIG91ciBtb2RlLgorCVRyZWF0IHNvbWUgU1VCUkVHcyBhcyBaRVJPX0VYVEVORHMuCisJQ29udmVydCBlcXVhbGl0eSBjb21wYXJpc29uIG9mIEFORCB3aXRoIHNpZ24gYml0IGludG8gTFQgb3IgR0UKKwljb21wYXJpc29uLgorCQorCSogY29tYmluZS5jIChnZW5fYmluYXJ5LCBnZW5fdW5hcnkpOiBOZXcgZnVuY3Rpb25zLgorCShhcHBseV9kaXN0cmlidXRpdmVfbGF3LCBzaW1wbGlmeV9zaGlmdF9jb25zdCk6IFVzZSBnZW5fYmluYXJ5LgorCitXZWQgQXByICAzIDE2OjE1OjE3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGdudWxpYik6IEluc2VydCBvbmx5IC5vIGZpbGVzIGluIGNvbWJpbmVkIGFyY2hpdmUuCisJKGdudWxpYjEucG9ydGFibGUpOiBVc2UgJChIUFhUKS4KKwkqIG1ha2UtaHA5azMyMGc6IERlZmluZSBIUFhULgorCisJKiBGcm9tIHdpbHNvbkBjeWdudXMuY29tLgorCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBEZWxldGUgcHJldmlvdXNseSB1bnVzZWQgdmFyaWFibGUgbGFzdF9xLgorCUNvcnJlY3QgaGFuZGxpbmcgb2YgcmVnaXN0ZXJzIHdpdGggbXVsdGlwbGUgbGlmZXRpbWVzIHdpdGhpbiBhIHNpbmdsZQorCWJsb2NrLCBhbHdheXMgc2F2ZSBsaWZldGltZSBpbmZvLCBhbmQgY2xlYXIgdGhlIGFwcHJvcHJpYXRlIGJpdCBpbgorCW9sZF9saXZlX3JlZ3MuICBEZWxldGUgbm93IHVudXNlZCB2YXJpYWJsZSBzY2hlZF9yZWdfbl9zZXRzLgorCitXZWQgQXByICAzIDA3OjQzOjM1IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRtLXJvbXAuaCAoQ09OU1RfQ09TVFMpOiBBbGwgQ09OU1RfSU5UcyBhcmUgY29zdCAwLiAgU3ltYm9saWMKKwl2YWx1ZXMgY29zdCB0d28gaW5zbnMuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBDb3JyZWN0bHkgcGVyZm9ybSBwb3NpdGlvbgorCWNvbXB1dGF0aW9uIGZvciBiaXQgZXh0cmFjdHM7IGRpc2FsbG93IG1vZGUtZGVwZW5kZW50IGFkZHJlc3Nlcy4KKwkob3B0aW1pemVfYml0X2ZpZWxkKTogTGlrZXdpc2UuCisJUmVtb3ZlIGV4cGxpY2l0IG1lbnRpb24gb2YgSEltb2RlIGFuZCBRSW1vZGUgYnkgY2FsbGluZyBtb2RlX2Zvcl9zaXplLgorCU5vIG5lZWQgdG8gY2hlY2sgZm9yIG9mZnNldHRhYmxlX2FkZHJlc3NfcDsgd2UgY2FsbCBjaGFuZ2VfYWRkcmVzcworCWFuZCBhcmUgbm90IGNhbGxlZCBhZnRlciByZWxvYWQ7IGRvbid0IGNhbGwgYWRqX29mZnNldHRhYmxlX29wZXJhbmQuCisJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xKTogQ29ycmVjdCBlbmRpYW4gY29tcHV0YXRpb24KKwlhbmQgZG9uJ3QgY2hhbmdlIG1vZGUgb2YgYSBNRU0gd2l0aCBhIG1vZGUtZGVwZW5kZW50IGFkZHJlc3MuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogVHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdCBtb2RlIHdpbGwgYmUgdXNlZAorCWFuZCBjb252ZXJ0IHRvIHRoYXQgb25jZSBhdCB0aGUgYmVnaW5uaW5nLCByYXRoZXIgdGhhbiByZXBlYXRlZGx5LAorCXNpbmNlIHdlIG1heSBiZSB3cml0aW5nIGp1bXBzLgorCisJKiB2YXgubWQgKHt6ZXJvLHNpZ259X2V4dHJhY3QgcGF0dGVybnMpOiBGaWVsZCB3aWR0aCBpcyBRSW1vZGUsIG5vdAorCVNJbW9kZS4KKworVHVlIEFwciAgMiAwODo0MjoyMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfdGVybmFyeV9vcGVyYXRpb24pOiBBZGQgYXJndW1lbnQgZm9yIHByZXZpb3VzCisJbW9kZSBvZiBvcGVyYW5kIDAuCisJRG9uJ3QgZG8gYW55dGhpbmcgZm9yIGV4dHJhY3Rpb25zIGlmIGJpdHMgZG9uJ3QgZml0IGluIE9QMF9NT0RFLgorCVVzZSBPUDBfbW9kZSBpbnN0ZWFkIG9mIG1vZGUgb2YgT1AwIGZvciBlbmRpYW4gY29ycmVjdGlvbi4KKwkoZm9sZF9ydHgpOiBQYXNzIG5ldyBvcGVyYW5kIHRvIHNpbXBsbGlmeV90ZXJuYXJ5IG9wZXJhdGlvbi4KKwkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBBZGQgZXh0cmEgYXJnIHRvIGNhbGwgdG8KKwlzaW1wbGlmeV90ZXJuYXJ5X29wZXJhdGlvbiBhbmQgY2FsbCBmb3IgcnR4IGNsYXNzICdiJy4KKwkqIGNvbWJpbmUuYyAoZmluZF9zcGxpdF9wb2ludCk6IERvbid0IHNwbGl0IGFuIGV4dHJhY3Qgd2hlbiB0aGUKKwliaXRzIGFyZSBvdXRzaWRlIHRoZSBtb2RlIG9mIG9wZXJhbmQgMC4KKwkoc3Vic3QpOiBQYXNzIG5ldyBwYXJhbWV0ZXIgdG8gc2ltcGxpZnlfdGVybmFyeSBvcGVyYXRpb24gYW5kIGNhbGwKKwlmb3IgcnR4IGNsYXNzICdiJy4KKwkoc3Vic3QsIGNhc2UgWkVST19FWFRSQUNUKTogRG9uJ3QgY2hhbmdlIHRoZSBtb2RlIG9mIGEgTUVNCisJaWYgaXQgaXMgYSBtb2RlLWRlcGVuZGVudCBhZGRyZXNzLgorCUNvcnJlY3RseSBkbyBlbmRpYW4gYWRqdXN0bWVudHMgc28gdGhleSBhcmUgY29ycmVjdCBmb3IgZmllbGRzIHRoYXQKKwlnbyBvdXRzaWRlIGEgYnl0ZSBib3VuZGFyeS4KKwkoc3Vic3QsIGNhc2Uge1pFUk8sU0lHTn1fRVhUUkFDVCk6IERvbid0IGFkanVzdCBNRU0gaGVyZSBmb3Igbm9uLWRlc3QKKwlvYmplY3RzOyBhbHJlYWR5IGRvbmUgaW4gbWFrZV9jb21wb3VuZF9vcGVyYXRpb24uCisJKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogUmV3b3JrIGNvZGUgdGhhdCBtYWtlcyBleHRyYWN0cyBhbmQKKwlleHRlbmRzIHRvIGNvcnJlY3R5IGNvbXB1dGUgcG9zaXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmYWN0CisJdGhhdCBmaWVsZCBjYW4gY3Jvc3MgYnl0ZSBib3VuZGFyaWVzLiAgUmVtb3ZlIHJlZHVuZGFudCBhZGp1c3RtZW50cy4KKwlVc2UgbW9kZV9kZXBlbmRlbnRfYWRkcmVzc19wIHRvIHZhbGlkYXRlIGNoYW5naW5nIG1vZGVzIG9mIE1FTS4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBDaGVjayBmb3IgbW9kZS1kZXBlbmRlbnQgYWRkcmVzcyB3aGVuCisJY2hhbmdpbmcgbW9kZSBvZiBhIE1FTS4KKwkoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBMaWtld2lzZS4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IENvZGUgdG8gdXNlIGV4dHp2IGZvciBsb2dpY2FsIHJpZ2h0IHNoaWZ0CisJaGFkIG51bWVyb3VzIGFzc3VtcHRpb25zIGFib3V0IHNwZWNpZmljIG1vZGVzIGFuZCBkaWQgbm90IHZhbGlkYXRlCisJb3BlcmFuZHMgcHJvcGVybHkuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgTk9QX0VYUFIpOiBJZiBubyB0YXJnZXQgd2FzIHNwZWNpZmllZCwKKwl1c2UgY29udmVydF90b19tb2RlIGluc3RlYWQgb2YgY29udmVydF9tb3ZlOyB0aGlzIG1heSByZXR1cm4gYSBTVUJSRUcuCisKKwkqIGV4cHIuYyAoZG9fanVtcCk6IENvbnZlcnNpb24gaXNuJ3QgTk9QIGlmIGl0IG5hcnJvd3MgdGhlIG9iamVjdC4KKwlJZiB0ZXN0aW5nIEEgJiBDT05TVCBhbmQgdGhlIHJlc3VsdCBmaXRzIGluIGEgc21hbGxlciBtb2RlLCB0cnkKKwl0aGUgY29tcGFyZSB0aGVyZS4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBJZiBlbGltaW5hdGluZyByZWZlcmVuY2UgdG8KKwlvcGVyYW5kLCB2ZXJpZnkJdGhhdCBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLgorCUFkZCBjYXNlcyBmb3IgImEgfCAofmEpIiBhbmQgImEgJiAofmEpIi4KKworCSogcmVjb2cuYyAocmVnaXN0ZXJfb3BlcmFuZCk6IE9ubHkgY2FsbCBnZW5lcmFsX29wZXJhbmQgZm9yCisJKHN1YnJlZyAobWVtIC4uLikgWCksIG5vdCBhbGwgU1VCUkVHcy4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogUmVtb3ZlIG5lZWRsZXNzIGluY3JlbWVudGluZyBvZiBMQUJFTF9OVVNFUworCXdoaWNoIGNhbiBjYXVzZSBhIGRlYWQgbGFiZWwgbm90IHRvIGdvIGF3YXkuCisKK01vbiBBcHIgIDEgMTk6MDg6NDAgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogQWRkIG1pc3NpbmcgY2FsbCB0byBpbnNlcnRfcmVncy4KKworTW9uIEFwciAgMSAxODoyMTozMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IENoYW5nZSAjaWYgdG8gI2lmZGVmLgorCisJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFRha2Ugb3V0IEZlYiAyNCBjaGFuZ2UuCisKK1N1biBNYXIgMzEgMjI6NDM6MzkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChpbnNuX2NvdW50ZXIpOiBOZXcgdmFyaWFibGUuCisJKGZpbmFsX3NjYW5faW5zbik6IEluY3JlbWVudCBpdC4KKwkob3V0cHV0X2FzbV9pbnNuKTogVXNlIGl0IGZvciAlPS4KKworU3VuIE1hciAzMSAyMjoxNjozMSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvdXQtYTI5ay5jIChvdXRwdXRfcHJvbG9nKTogQ29ycmVjdGx5IHdyaXRlIHN0YWNrIHNpemUgaW4gdGFnIHdvcmQuCisKKwkqIG91dC1hMjlrLmMgKHNyY2Jfb3BlcmFuZCk6IElmIFFJbW9kZSwgYW55IGNvbnN0YW50IGlzIE9LIHNpbmNlCisJd2Ugb25seSBjYXJlIGFib3V0IDggYml0cy4KKwkocHJpbnRfb3BlcmFuZCk6IEFkZCAlUSBmb3IgUUltb2RlIHNyY2IgdmFsdWVzLgorCSogYTI5ay5tZCAoUUltb2RlIHBhdHRlcm5zKTogc3JjYidzIHRoYXQgYWNjZXB0IGNvbnN0YW50cyBzaG91bGQgaGF2ZQorCSduJyBjb25zdHJhaW50LCBub3QgJ0knOyB1c2UgJVEgdG8gb3V0cHV0LgorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBQcm9wZXJseSBnZW5lcmF0ZSByZWxvYWQgd2hlbiB3ZSBhcmUKKwlhZGRpbmcgYSBwc2V1ZG8gYW5kIGEgaGFyZCByZWdpc3Rlci4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IERvbid0IHVzZSBmZnMuCisKK1N1biBNYXIgMzEgMjA6NTk6NTIgMTk5MSAgTWljaGVhbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBnbnVsaWIxLmMgKHBlcmZvcm1fYXNoe2wscn1zaTMpOiBGaXggdHlwbyB0aGF0IGhhZCB0aGVzZQorCXBlcmZvcm1hY2VzIHN3YXBwZWQuCisKK1N1biBNYXIgMzEgMTM6MzU6NTAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBydGwuaCAoRklORF9SRUdfSU5DX05PVEUpOiBOZXcgbWFjcm8uCisJKiBydGwuaCAoQVVUT19JTkNfREVDKTogRGVmaW5lIGhlcmUuCisJKiBmbG93LmMgKEFVVE9fSU5DX0RFQyk6IE5vdCBoZXJlLgorCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wLCB0cnlfY29tYmluZSk6IFVzZSBGSU5EX1JFR19JTkNfTk9URS4KKwlNYWtlIG90aGVyIHNjYW5zIGZvciBSRUdfSU5DIG5vdGVzIGNvbmRpdGlvbmFsIG9uIEFVVE9fSU5DX0RFQy4KKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFVzZSBGSU5EX1JFR19JTkNfTk9URS4KKwkqIGp1bXAuYyAoZGVsZXRlX2p1bXApOiBMaWtld2lzZS4KKwkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IExpa2V3aXNlLgorCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEsIGZpbmRfZXF1aXZfcmVnKTogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBMaWtld2lzZS4KKwkqIHJlb3JnLmMgKGRlbGV0ZV9zY2hlZHVsZWRfanVtcCwgbWFya19zZXRfcmVzb3VyY2VzKTogTGlrZXdpc2UuCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2NvbmZsaWN0cyk6IExpa2V3aXNlLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBGb3IgaW50ZWdlcnMsIHJlYWxzLCBhbmQgYXJyYXlzLAorCXVzZSBhY3R1YWwgdHlwZSBudW1iZXIgb2YgaW50IG9yIGNoYXIsIGluIGNhc2UgdGhvc2UgYXJlIG5vdCAxIGFuZCAyLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogVGFrZSBvdXQgbGFzdCBjaGFuZ2UgKHJlZ2FyZGluZyBsYW5nX2luaXQpLgorCisJKiBlbWl0LXJ0bC5jIChzZXF1ZW5jZV9lbGVtZW50X2ZyZWVfbGlzdCk6IENoYW5nZSBkYXRhIHR5cGUuCisJKGdldF9sYXN0X2luc25fYW55d2h5ZXJlLCBhZGRfaW5zbl9hZnRlcik6IEZpbmlzaCBsYXN0IGNoYW5nZS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEZpbmlzaCBsYXN0IGNoYW5nZS4KKworU2F0IE1hciAzMCAxNToxNjoxNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBzZXF1ZW5jZV9zdGFjayk6IE5ldyBkYXRhIHR5cGUuCisJKHNlcXVlbmNlX3N0YWNrKTogRGVjbGFyZSB2YXJpYWJsZS4gIFVzZSBuZXcgZGF0YSB0eXBlLgorCSogZW1pdC1ydGwuYyAoZ2V0X2xhc3RfaW5zbl9hbnl3aGVyZSwgYWRkX2luc25fYWZ0ZXIpOiBBZGFwdCB0byB0aGF0LgorCShzdGFydF9zZXF1ZW5jZSwgZW5kX3NlcXVlbmNlLCBpbl9zZXF1ZW5jZSk6IExpa2V3aXNlLgorCShzdGFydF9zZXF1ZW5jZSk6IEFsbG9jYXRlIHN0YWNrIGxpbmtzIGFzIHBlcm1hbmVudC4KKwkoaW5pdF9lbWl0X29uY2UpOiBJbml0IHNlcXVlbmNlX3N0YWNrIGhlcmUuCisJKGluaXRfZW1pdCk6IE5vdCBoZXJlLgorCSogZnVuY3Rpb24uYyAocHVzaF90ZW1wX3Nsb3RzLCBwb3BfdGVtcF9zbG90cyk6CisJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBVc2UgaW5fc2VxdWVuY2UuCisJKGZpeHVwX3Zhcl9yZWZzKTogVXNlIG5ldyBkYXRhIHR5cGUuCisJKHB1dF92YXJfaW50b19zdGFjayk6IERvbid0IGRlY2xhcmUgc2VxdWVuY2Vfc3RhY2suCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6CisJVHJhY2Ugc3RhdGljIGNoYWluIHByb3Blcmx5IHBhc3QgZmlyc3QgbGluay4KKworCSogbnMzMmsubWQgKGFuZGNiaGkzLCBhbmRjYnFpMyk6IENvbnN0cmFpbnQgc2hvdWxkbid0IHNheSBjb21tdXRhdGl2ZS4KKworU2F0IE1hciAzMCAwMjowNjoyMCAxOTkxIE5vcnRoLUtleXMgKGVybGtvbmlnIGF0IGFwcGxlLWd1bmtpZXMuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEZpeCB0eXBvIGBpbnRlZ2VyX3RwZV9ub2RlJy4KKwkqIGRieG91dC5jIChkYnhvdXQtc3ltYm9sKTogQWRkZWQgY2hhciAqIGRlY2xhcmF0aW9uIGZvciBgbmFtZScuCisJKiBvYmpjLWFjdGlvbnMuYyAoZW5jb2RlX2FycmF5KTogQXZvaWQgcmV0dXJuaW5nIGEgdmFsdWUuCisKK0ZyaSBNYXIgMjkgMTU6NTk6MjIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWZpbmUgX19idWlsdGluX2NvbnN0YW50X3AuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogSW1wbGVtZW50IGl0LgorCSogdHJlZS5oIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTogTmV3IGFsdGVybmF0aXZlLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTW92ZSBsYW5nX2luaXQgY2FsbCBhZnRlciBkZWJ1Z2dlciBpbml0LgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19jcGx1c3BsdXMgZm9yIEMrKyBjb2RlLgorCisJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBVc2UgMCBmb3IgbmFtZSBvZiByZXN1bHQgZGVjbC4KKwkodmFsdWVfaWRlbnRpZmllcik6IFZhcmlhYmxlIGRlbGV0ZWQuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IEhhbmRsZSBMQU5HX1RZUEUuCisJKGRieG91dF9zeW1ib2wpOiBIYW5kbGUgUkVTVUxUX0RFQ0wuCisJSGFuZGxlIHZhcmlhYmxlcyB3aXRoIGNvbnN0YW50IHZhbHVlcyB0aGF0IGFyZSBub3Qgb3V0cHV0LgorCVVzZSB0aGUgbWFuZ2xlZCBuYW1lIHdoZW4gYXBwcm9wcmlhdGUuCisJKGRieG91dF90YWdzKTogT3V0cHV0IGVxdWl2YWxlbnQgdHlwZWRlZiB3aGVuIGFwcHJvcHJpYXRlLgorCShkYnhvdXRfZnVuY3Rpb24pOiBPdXRwdXQgdGhlIERFQ0xfUkVTVUxUIGlmIGl0IGhhcyBhIG5hbWUuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IERlbGV0ZSBjYWxscyB0byBzZXRfY3VycmVudF9nZGJmaWxlLgorCitUaHUgTWFyIDI4IDE2OjE0OjEzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKG1haW4pOiBDYWxjdWxhdGUgYmFzZW5hbWVfbGVuZ3RoIHRvIGV4Y2x1ZGUgbGFzdCBwZXJpb2QuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGV4cGFuZF91bm9wKToKKwlXaGVuIHdpZGVuaW5nLCBkb24ndCBrZWVwIENPTlNUX0lOVCBiZXlvbmQgYSBzaW5nbGUgd29yZC4KKworCSogdG0tdmF4LmggKENIRUNLX0ZMT0FUX1ZBTFVFKTogQ2hhbmdlIGZsb2F0IG1heCB0byAuLi40NDRlKzM4LgorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliMSwgZ251bGliMi5wb3J0YWJsZSk6CisJTWFrZSB0ZXN0IG9mICQkPyBub3JtYWxseSBzdWNjZWVkLCBub3Qgbm9ybWFsbHkgZmFpbC4KKwkoZ251bGliMSk6IERvbid0IHVzZSAtZSBpbiBzZWNvbmQgbG9vcC4gIFRlc3QgZXhwbGljaXRseSBpbnN0ZWFkLgorCisJKiBkYnhvdXQuYyAobGFzdGZpbGUpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgorCShkYnhvdXRfaW5pdCk6IEluaXRpYWxpemUgbGFzdGZpbGUuCisJKiBmaW5hbC5jIChsYXN0ZmlsZSk6IERlbGV0ZWQuCisJKGluaXRfZmluYWwpOiBEb24ndCBzZXQgbGFzdGZpbGUuCisKKwkqIGZpbmFsLmMgKHNldF9jdXJyZW50X2dkYmZpbGUpOiBGdW5jdGlvbiBkZWxldGVkLgorCShvdXRwdXRfc291cmNlX2xpbmUpOiBIYW5kbGluZyBvZiBHREIgZGVidWdnaW5nIGluZm8gZGVsZXRlZC4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24sIGZpbmFsX2VuZF9mdW5jdGlvbik6IExpa2V3aXNlLgorCitUaHUgTWFyIDI4IDA5OjU4OjE4IDE5OTEgIE1pY2hlYWwgVGllbWFubiAgKHRpZW1hbm4gYXQgcG9nby5nbnUuYWkubWl0LmVkdSkKKworCSogY3BsdXMtZGVjbC5oIChkZWNsX2NvbnRleHQpOiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbiBmb3IgQklURklFTEQuCisKKwkqIHRtLXNwYXJjLmggKENDMV9TUEVDKTogQ2hhbmdlIHRvIGhhbmRsZSBuZXcgaW50ZXJwcmV0YXRpb24gb2YgLU8yLgorCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IFVzZSB0aGlzIG1hY3JvIHRvIGNvbnRyb2wgZGVmYXVsdCBleHBlbnNpdmUKKwlvcHRpbWl6YXRpb25zLgorCShNT0RFU19USUFCTEVfUCk6IFVzZSBHRVRfTU9ERV9DTEFTUyB0byBzaW1wbGlmeSB0aGlzIG1hY3JvLgorCShGVU5DVElPTl9BUkcsRlVOQ1RJT05fQVJHX1BBUlRJQUxfTlJFR1MpOiBNYWtlIHN1cmUgVFlQRSBpcyBub256ZXJvCisJYmVmb3JlIHdlIHVzZSBpdC4KKwkoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIpOiBGaXggYSBidWcgaW4gdGhlIGFzbSBjb2RlLgorCShFWFRSQV9DT05TVFJBSU5UKTogRm9yICdTJyBjb25zdHJhaW50LCBpZiBPUCBpcyBhIHJlZ2lzdGVyLCBtYWtlCisJc3VyZSBpdCdzIG5vdCBhIHBzZXVkby4gIEFsc28sIGNoYW5nZSBjYWxsIHRvIGBtZW1vcnlfYWRkcmVzc19wJyB0bworCWBzdHJpY3QgX21lbW9yeV9hZGRyZXNzX3AnLiAgQm90aCBvZiB0aGVzZSBhcmUgZm9yIHRoZSBzdHJpY3QgY2FzZXMuCisJKFNMT1dfQllURV9BQ0NFU1MpOiBUcnkgZ29pbmcgd2l0aCB0aGlzIHNldCAxLgorCSogc3BhcmMubWQ6IFRha2UgYWR2YW50YWdlIG9mIG5ldyBjb21iaW5lciB0byBoYW5kbGUgc2lnbmVkIGJpdGZpZWxkCisJY29tcGFyaXNvbnMgYW5kIHNpZ25lZCBzdWItd29yZCBjb21wYXJpc29ucy4KKwlBZGRlZCBwZWVwaG9sZXMgZm9yIGRvaW5nIHN1YndvcmQgbWVtb3J5IHRlc3RzIGFuZCBvcGVyYXRpb25zLgorCitUaHUgTWFyIDI4IDA5OjQzOjMwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKHN0YXJ0X3NlcXVlbmNlLCBnZW5fc2VxdWVuY2UpOiBFbnN1cmUgd2UgYWxsb2NhdGUgcnRsCisJb24gc2F2ZWFibGVfb2JzdGFjayBzaW5jZSB3ZSB3aWxsIGJlIHNhdmluZyBpdCBhbmQgd2UgbWF5IGJlIGNhbGxlZAorCWZyb20gYW4gb3B0aW1pemVyIHRoYXQgd2lsbCByZXVzZSBhbGxvY2F0ZWQgbWVtb3J5IGluIGN1cnJlbnRfb2JzdGFjay4KKworV2VkIE1hciAyNyAxODo0NjoyNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChtYWluKTogUHJpbnQgdmVyc2lvbiB3aXRoIC12ZXJzaW9uLCByZWdhcmRsZXNzIG9mCisJLXF1aWV0LgorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliLCBnbnVsaWIyLnJlYWR5KTogUHV0IGAtJyBiZWZvcmUgYGlmJy4KKworCSogbWFrZS1ocDlrMzIwLCBtYWtlLWhwOWszMjBnIChDQywgT0xEQ0MpOiBEZWxldGUgLWxzZXRqbXAuCisJQWRkIC1XYywtTncyMDAwLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3NvdXJjZV9maWxlKTogTmV3IG5hbWUgZm9yIGZuIG1vdmVkIGZyb20gZmluYWwuYy4KKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfZmlsZSk6IE1vdmVkIHRvIGRieG91dC5jLiAgQ2FsbGVycyBjaGFuZ2VkLgorCShvdXRwdXRfc291cmNlX2xpbmUpOiBDYWxsIGRieG91dF9zb3VyY2VfZmlsZS4KKworV2VkIE1hciAyNyAxMTowOToxMyAxOTkxICBNaWNoZWFsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHBvZ28uZ251LmFpLm1pdC5lZHUpCisKKwkqIHZlcnNpb24uYzogQnVtcGVkIHRvIHZlcnNpb24gMS45Mi4KKworCSogZmluYWwuYyAob3V0cHV0X3NvdXJjZV97ZmlsZSxsaW5lfSk6IEZpeCBidWcgaW4gbmV3IGhhbmRsaW5nIG9mCisJIkx0ZXh0Ii4KKworCSogY3BsdXMtY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEhhbmRsZSBCSU5EX0VYUFIuCisKKwkqIE1ha2VmaWxlLmluIChjcGx1cy1sZXgubyk6IGRlcGVuZCBvbiBjcGx1cy1pbnB1dC5jLgorCSogY3BsdXMtaW5wdXQuYzogTmV3IGZpbGUuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IENhbGwgYSBkaWZmZXJlbnQKKwlgcHJlcGFyZV9pbmxpbmUnLCBhbmQgZG9uJ3QgZGVhbCB3aXRoIHBlbmRpbmdfaW5saW5lcyBoZXJlLgorCSogY3BsdXMtbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcyk6IERlYWwgd2l0aCBwZW5kaW5nX2lubGluZXMKKwloZXJlLi4uCisJKHJlaW5pdF9wYXJzZV9mb3JfbWV0aG9kKTogLi4uYW5kIGhlcmUuCisKKwkqIGNwbHVzLWRlY2wuYyAoZ3Jva19jdG9yX3Byb3BlcnRpZXMpOiBVc2UgVFlQRV9OQU1FX1NUUklORyB3aGVyZQorCWFwcHJvcHJpYXRlLiAgQWxzbywgZG9uJ3QgYXNzdW1lIHRoYXQgQ1VSUkVOVF9DTEFTU19UWVBFIGlzIHdoYXQgd2UKKwl1c2UgZm9yIGVycm9yIG1lc3NhZ2U7IHVzZSBDVFlQRSBpbnN0ZWFkLgorCisJKiBjcGx1cy10eXBlMi5jIChkaWdlc3RfaW5pdCk6IFN0cmlwIE5PTl9MVkFMVUVfRVhQUnMuCisKKwkqIGNwbHVzLXRyZWUuYyAoX19lcHJpbnRmKTogQWRkZWQgdGhpcyBmdW5jdGlvbiBmcm9tIGdudWxpYjIgdW50aWwKKwlnbnVsaWIgY29uZmlndXJhdGlvbiBpcyB3b3JrZWQgb3V0LgorCisJKiBjcGx1cy1wYXJzZS55IChtZW1iZXJfaW5pdCk6IENhbGwgZG9fbWVtYmVyX2luaXQuICBQcmV2aW91cyBjb2RlCisJd2FzIHdyb25nICh1c2luZyBhIGdvdG8gdG8gZmFjdG9yIGNvbW1vbiBjb2RlKSBiZWNhdXNlIHRoZSBwYXJzZQorCXN0YWNrIHdhcyBkaWZmZXJlbnQgaW4gdGhlIHR3byBjb250ZXh0cy4KKwkqIGNwbHVzLWluaXQuYyAoZG9fbWVtYmVyX2luaXQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9jb21wb3VuZF9leHByKTogQ29udmVydCBhcnJheXMgdG8gcG9pbnRlcnMuCisJKGJ1aWxkX2NfY2FzdCk6IFdhcm4gYWJvdXQgcG9zc2libGUgYWxpZ25tZW50IHByb2JsZW1zLgorCitXZWQgTWFyIDI3IDA1OjU1OjMyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEaXNhbGxvdyBhIFBMVVMgYXMgYW4gb3BlcmFuZCBldmVuIGlmCisJImciIGlzIGluIHRoZSBjb25zdHJhaW50OyB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yICJwIi4KKworVHVlIE1hciAyNiAwNjo0Njo0OCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IEhhdmUgaW5zbiBudW1iZXJzIHN0YXJ0IGF0IDEsIG5vdCAyLgorCisJKiBydGxhbmFsLmMgKHJlcGxhY2VfcmVncyk6IE1vdmUgdG8gaGVyZTsgYWRkIG5ldyBwYXJhbWV0ZXIuCisJKiBsb29wLmMgKHJlcGxhY2VfcmVncyk6IERlbGV0ZSBmcm9tIGhlcmUuCisJKG1vdmVfbW92YWJsZXMsIHN0cmVuZ3RoX3JlZHVjZSk6IFBhc3MgbmV3IHBhcmFtZXRlciB0byByZXBsYWNlX3JlZ3MuCisJKiBqdW1wLmMgKGR1cGxpY2F0ZV9sb29wX2V4aXRfdGVzdCk6IE1ha2UgbmV3IHBzZXVkb3MgZm9yIHBzZXVkb3MKKwl1c2VkIG9ubHkgaW4gbG9vcCBleGl0IHRlc3Q7IHRoaXMgcHJldmVudHMgdW5uZWNlc3NheSBzaGFyaW5nCisJYmV0d2VlbiBjb2RlIGluc2lkZSBhbmQgb3V0c2lkZSBvZiBsb29wLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIHJlZ19zY2FuIGJlZm9yZSBqdW1wLgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBJZiB3ZSBhcmUgc2VhcmNoaW5nIGJhY2sgZm9yIHRoZSBsYXN0CisJdXNlIG9mIGEgcmVnaXN0ZXIgSTMgYW5kIEkyIG5vIGxvbmdlciB1c2UgYW5kIHRoZSBsYXN0IHVzZSBpcyBhIFNFVAorCW9mIHRoYXQgcmVnaXN0ZXIsIHBsYWNlIGEgUkVHX1VOVVNFRCBub3RlIGluc3RlYWQgb2YgYSBSRUdfREVBRCBub3RlLgorCU5vIGxvbmdlciBuZWVkIGhhbmRsZSBSRUdfREVBRCBub3RlIGZvciBvdXRwdXQgb2YgSTM7IGl0IHdpbGwgbm93IGJlCisJYSBSRUdfVU5VU0VEIG5vdGUuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBJZiBJM1NSQyBpcyBhIHJlZ2lzdGVyIGFuZCBJMiBpcyBhCisJbXVsdGktb3V0cHV0IGluc24sIHNlZSBpZiB3ZSBjYW4gcmVwbGFjZSBvbmUgb2YgdGhlIG91dHB1dHMgd2l0aAorCUkzREVTVC4gIElmIHNvLCBtb3ZlIExPR19MSU5LUyBwb2ludGluZyBhdCB0aGUgb3RoZXIgb3V0cHV0cyB0bworCW5vdyBwb2ludCB0byBJMyBpbnN0ZWFkIG9mIEkyLgorCisJKiBydGxhbmFsLmMgKHNpbmdsZV9zZXQpOiBSZXR1cm4gMCBpZiBub3QgYW4gaW5zbi4KKwlPbmx5IGlnbm9yZSBTRVQgd2l0aCB1bnVzZWQgb3V0cHV0IGlmIGl0IGhhcyBubyBzaWRlIGVmZmVjdHMuCisJKHNpZGVfZWZmZWN0c19wKTogTmV3IGZ1bmN0aW9uLgorCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogT25seSBpZ25vcmUgU0VUIHdpdGggdW51c2VkIG91dHB1dCBpZgorCWl0IGhhcyBubyBzaWRlIGVmZmVjdC4KKwlEb24ndCBleHRlbmQgdGhlIGxpZmUgb2YgYSBoYXJkIHJlZ2lzdGVyLgorCSh0cnlfY29tYmluZSk6IEFsd2F5cyBnaXZlIHVwIGlmIEkxIG9yIEkyIHVzZWQgcmVnIGluYydkIGluIEkzLgorCShzaWduaWZpY2FudF9iaXRzKTogUmV0dXJuIG1vZGUgbWFzayBpZiBtb2RlIHdpZGVyIHRoYW4gaG9zdCBpbnQuCisJRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5ICh6ZXJvX2V4dGVuZCAoY29uc3RfaW50IC4uKSkgYW5kIHNpbWlsYXIgd2hlcmUKKwl0aGUgaW5uZXIgbW9kZSBpcyBWT0lEbW9kZS4KKwlBcml0aG1ldGljIG9wZXJhdGlvbnMgbm93IGFsd2F5cyBoYXZlIHNhbWUgbW9kZXMgb24gb3BlcmFuZHMgYXMKKwlvbiB0aGUgcmVzdWx0LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBTZXQgdGhpc19pc197c2ltcGxlLGNvbmR9anVtcCBhdCB0aGUgc3RhcnQKKwlvZiBsb29wLCBub3QgaW4gbWlkZGxlLCBhbmQgdXNlIGNvbnNpc3RlbnRseS4KKwlVc2UgY2FuX3JldmVyc2VfY29tcGFyaXNvbl9wIGluIGNhc2Ugd2hlcmUgd2UgbWFrZSBzY2MgaW5zbi4KKwlEb24ndCB1c2UgY2FuX3JldmVyc2VfY29tcGFyaXNvbl9wIHdoZW4gd2UgY2FsbCBpbnZlcnRfanVtcC4KKwlVc2UgaW5kaXJlY3RfanVtcCBpbnN0ZWFkIG9mIGluZGlyZWN0X2V4cC4KKwlDaGVjayBpbnZlcnRfanVtcCdzIHJlc3VsdCBiZWZvcmUgbWFraW5nIGFueSBvdGhlciBjaGFuZ2VzOyBoYW5kbGUKKwlmYWlsdXJlLgorCVNpbXBsaWZ5IGNvZGUgdGhhdCBsb29rcyBmb3IgYW5kIGRlbGV0ZXMgVVNFIGluc25zLgorCShqdW1wX2JhY2tfcCk6IENhbGwgY2FuX3JldmVyc2VfY29tcGFyaXNvbl9wIG9ubHkgaWYgd2UgaGF2ZSB0bworCXJldmVyc2UgdGhlIGNvbXBhcmlzb24uCisJKGNhbl9yZXZlcnNlX2NvbXBhcmlzb25fcCk6IEFjY2VwdCBjb21wYXJpc29uIGV4cHJlc3Npb24gYW5kIGluc24KKwlpdCBjb21lcyBmcm9tLgorCVJld29yayB0byBiZSBtb3JlIGdlbmVyYWwgbm93IHRoYXQgd2UgaGF2ZSBNT0RFX0NDIGFuZCB0aWdodGVuCisJdXAgYSBiaXQuCisJKGludmVydF9qdW1wKTogQWxsb3cgaW52ZXJ0X2V4cCBhbmQgcmVkaXJlY3RfanVtcCB0byBmYWlsLgorCShpbnZlcnRfZXhwKTogT25seSBpbnZlcnQganVtcCwgZG9uJ3QgY2hhbmdlIHRhcmdldC4KKwlJZiBjYW4gcmV2ZXJzZSBjb21wYXJpc29uIGNvZGUsIHRyeSBpdCB1c2luZyB2YWxpZGF0ZV9jaGFuZ2UuCisJSWYgdGhhdCBkb2Vzbid0IHdvcmssIHN3YXAgdGhlIGFybXMgb2YgdGhlIElGX1RIRU5fRUxTRS4gIElmIHRoYXQKKwlkb2Vzbid0IHdvcmssIHJldHVybiAwLgorCShyZWRpcmVjdF9leHApOiBOb3cgc3RhdGljLgorCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogQ2FsbCBpbnZlcnRfanVtcCB0byBpbnZlcnQganVtcAorCXRvIGZhbHNlIGxhYmVsIGFmdGVyIGVtaXR0aW5nIGp1bXA7IGlmIHRoaXMgZmFpbHMsIGNvbnZlcnQgdG8KKwlqdW1wIGFyb3VuZCB1bmNvbmRpdGlvbmFsIGp1bXAgdG8gZmFsc2UgbGFiZWwuCisJKGRvX3N0b3JlX2ZsYWcpOiBTZXQgdG8gMSBmaXJzdCwgdGhlbiBicmFuY2gsIHRoZW4gc2V0IHRvIDAuICBUaGlzCisJYXZvaWRzIGludmVydGluZyBicmFuY2hlcy4KKwkqIHJlb3JnLmMgKG9wdGltaXplX3NraXAsIHJlbGF4X2RlbGF5X3Nsb3RzKTogQWx3YXlzIGFsbG93IGludmVydF9qdW1wCisJdG8gZmFpbC4KKwkqIHJ0bGFuYWwuYyAoc2luZ2xlX3NldCk6IFJldHVybiAwIGlmIG5vdCBJTlNOLCBDQUxMX0lOU04sCisJb3IgSlVNUF9JTlNOLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogSWYgYW55IGVsaW1pbmFibGUgcmVncyBvY2N1ciBpbiBhIFVTRSwKKwllbGltaW5hdGUgdGhlbS4KKworVHVlIE1hciAyNiAwMDowOToxOCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBBbHdheXMgbWFrZSBpbXBsaWNpdCBkZWNsIHBlcm1hbmVudC4KKworTW9uIE1hciAyNSAxNjozODoxNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdlbmV4dHJhY3QuYyAod2Fsa19ydHgpOiBSZWNvcmQgb3BlcmFuZCBudW1iZXJzIHRoYXQgYXJlIHNlZW4uCisJKGdlbl9pbnNuKTogSWYgdGhlcmUgYXJlIGdhcHMgaW4gb3BlcmFuZCBudW1iZXJzLCBtYWtlIGNvZGUgdG8gc3RvcmUKKwlzb21ldGhpbmcgZm9yIHRoZSBvcGVyYW5kcyBub3QgdXNlZCBpbiB0aGlzIHBhdHRlcm4uCisJKG1haW4pOiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcy4KKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6CisJQWx3YXlzIGFsbG93IGxlbmd0aC1wcmVzZXJ2aW5nIGNvbnZlcnNpb25zIGJldHdlZW4gaW50ZWdlciB0eXBlcy4gCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19jbGFzc19yZWNvcmQpOiBSZXR1cm4gcmlnaHQgYXdheSBpZiBvcGVyYW5kIGlzIDAuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBXYXJuIGlmIGRlY2xhcmUgZmNuIGlubGluZSBhZnRlciBjYWxscy4KKworCSogcmVsb2FkLmMgKGNvbWJpbmVfcmVsb2Fkcyk6CisJVGVzdCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCBpbiBib3RoIGRpcmVjdGlvbnMuCisKK01vbiBNYXIgMjUgMTU6MDU6MjkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGdlbm91dHB1dC5jIChvdXRwdXRfZXBpbG9ndWUpOiBDaG9vc2UgYSBuYW1lIGZvciBhbiB1bm5hbWVkCisJcGF0dGVybiBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgY2xvc2VzdCBuYW1lZCBwYXR0ZXJuLiAgRGVmaW5lCisJYGluc25fbmFtZV9wdHInIGFzIGEgcG9pbnRlciB0byBgaW5zbl9uYW1lJyBmb3IgdXNlIGJ5IHByaW50X3J0eC4KKwkqIGZpbmFsLmMgKG91dHB1dF9hc21faW5zbik6IFVzZSB0aGUgcGF0dGVybiBuYW1lIGNob3NlbiBieQorCWdlbm91dHB1dCBhbmQgb3V0cHV0IHRoZSBJTlNOX1VJRCBhcyB3ZWxsLgorCSogcnRsLmMgKGluc25fbmFtZV9wdHIpOiBQcm92aWRlIGFuIGFsdGVybmF0ZSBkZWZpbml0aW9uIHRvIGF2b2lkCisJbGluayBlcnJvcnMgd2hlbiBydGwubyBpcyBub3QgbGlua2VkIHdpdGggaW5zbi1vdXRwdXQuby4KKwkocHJpbnRfcnR4KTogV2hlbiBwcmludGluZyB0aGUgSU5TTl9DT0RFIGZpZWxkIG9mIGFuIGluc24sIHByaW50CisJdGhlIG5hbWUgaWYgaXQgaXMgYXZhaWxhYmxlLgorCitNb24gTWFyIDI1IDA5OjM5OjQzIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlZ3MuaCAocmVnX2ZpcnN0X3VzZSk6IERlbGV0ZWQuCisJKiBydGwuaCAoUkVHX1VOU0VUKTogRGVsZXRlZC4KKwkoUkVHX1VOVVNFRCk6IE5ldyBub3RlLgorCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IERlbGV0ZSBsb29wIGZpeGluZyB1cAorCXJlZ19maXJzdF91c2UuCisJKGNhbl9jb21iaW5lX3ApOiBJZ25vcmUgYSBicmFuY2ggb2YgYSBQQVJBTExFTCBpZiBpdHMgb3V0cHV0IGlzCisJbmV2ZXIgdXNlZC4KKwkobW92ZV9kZWF0aHMpOiBEb24ndCB1cGRhdGUgcmVnX2ZpcnN0X3VzZS4KKwkoZGlzdHJpYnV0ZV9ub3Rlcyk6IERvbid0IGhhbmRsZSBSRUdfVU5TRVQ7IGFkZCBjb2RlIGZvciBSRUdfVU5VU0VELgorCSogZmxvdy5jIChyZWdfZmlyc3RfdXNlKTogRGVsZXRlZC4KKwkobGlmZV9hbmFseXNpcyk6IFJlc3RvcmUgY29kZSB0aGF0IG1hcmtzIHZhcnMgbGl2ZSBhdCBzdGFydCBvZiBmdW5jdGlvbgorCWFzIGdsb2JhbHMuICBUaGVzZSBhcmUgcmVnaXN0ZXJzIHRoYXQgd2VyZSBuZXZlciBzZXQuCisJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogRG9uJ3QgYWxsb2NhdGUgcmVnX2ZpcnN0X3VzZS4KKwkocHJvcGFnYXRlX2Jsb2NrKTogU2VhcmNoIGZvciBjYzAtc2V0dGluZyBpbnNuIHdpdGggcHJldl9ub25ub3RlX2luc24uCisJKG1hcmtfc2V0XzEpOiBEb24ndCBzZXQgcmVnX2ZpcnN0X3VzZS4KKwlJZiByZWdpc3RlciBpcyBuZXZlciB1c2VkLCBtYWtlIFJFR19VTlVTRUQgbm90ZSwgbm90IFJFR19ERUFELgorCShtYXJrX3VzZWRfcmVncyk6IERvbid0IHNldCByZWdfZmlyc3RfdXNlLgorCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbC1jb25mbGljdHMpOiBEZWFkIG91dHB1dHMgYXJlIG5vdyBkZW5vdGVkIGJ5CisJUkVHX1VOVVNFRCBub3Rlcywgbm90IFJFR19ERUFELgorCSogcmVsb2FkLmMgKGZpbmRfZHVtbXlfcmVsb2FkKTogRGVsZXRlIHRlc3Qgb2YgUkVHX1VOU0VUOyBhZGQgdGVzdAorCW9mIFJFR19VTlVTRUQuCisJKGZpbmRfZXF1aXZfcmVnKTogRG9uJ3QgcmUtdXNlIGFuIG91dHB1dCBtYXJrZWQgYXMgUkVHX1VOVVNFRDsKKwl3ZSB3YW50IHRoZXNlIG5vdGVzIHRvIGJlIGFjY3VyYXRlOyB0aGlzIHdvdWxkIHJhcmVseSB3aW4gYW55d2F5LgorCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFRlc3QgUkVHX1VOVVNFRCB0byBzZWUgaWYgYW4KKwlvdXRwdXQgd29uJ3QgYmUgdXNlZCBhbnkgbW9yZS4KKwkqIHJlb3JnLmMgKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IFVzZSBSRUdfVU5VU0VEIG5vdGVzIHRvIGtpbGwJCisJcmVnaXN0ZXJzIGRlYWQgYWZ0ZXIgYW4gaW5zbi4KKwkqIHJ0bC5jIChyZWdfbm90ZV9uYW1lKTogRGVsZXRlIFJFR19VTlNFVCwgYWRkIFJFR19VTlVTRUQuCisJKiBydGxhbmFsLmMgKHNpbmdsZV9zZXQpOiBJZ25vcmUgYSBTRVQgd2hvc2Ugb3V0cHV0IGhhcyBhIFJFR19VTlVTRUQKKwlub3RlLgorCSogc2NoZWQuYyAodXBkYXRlX2ZpcnN0X3VzZSk6IERlbGV0ZWQuCisJKHVwZGF0ZV9saW5rcyk6IE5vIG5lZWQgdG8gY2FsbCB1cGRhdGVfZmlyc3RfdXNlLgorCisJKiBsb2NhbC1hbGxvYy5jOiBNYWpvciBjaGFuZ2VzIHRvIHVzZSBSRUdfVU5VU0VEIG5vdGVzLCBtYWtlCisJaGFuZGxpbmcgb2Ygb25seS1zZXQgcmVnaXN0ZXJzIG1vcmUgY29uc2lzdGVudCwgYW5kIGFsbG93CisJdHdvIGNvbnNlY3V0aXZlIENMT0JCRVJzIHRvIHNoYXJlIGEgcmVnaXN0ZXIuICBBbHNvLCBhdm9pZCBsb29wcworCW92ZXIgYWxsIHJlZ2lzdGVyIGVhY2ggYmFzaWMgYmxvY2s7IGVsaW1pbmF0aW5nIHRoZXNlIG1ha2UgbG9jYWwtYWxsb2MKKwl0aHJlZSB0aW1lcyBmYXN0ZXIhCisJUXVhbnRpdHkgbnVtYmVycyBub3cgc3RhcnQgYXQgemVyby4KKwkocXR5X2ZpcnN0X3JlZywgcmVnX25leHRfaW5fcXR5KTogTmV3IHZhcmlhYmxlcy4KKwkocXR5X2Nsb2JiZXIpOiBObyBsb25nZXIgbmVlZGVkLgorCShyZWdfcXR5KTogLTEgaWYgcmVnaXN0ZXIgY2Fubm90IGJlIGFsbG9jYXRlZCBieSBsb2NhbC1hbGxvYy4KKwlOb3cgdW5kZWZpbmVkIGZvciBoYXJkIHJlZ2lzdGVycy4KKwkocmVnX29mZnNldCk6IE5vdyBjaGFyICouCisJKGNhbGxfc2Vlbik6IERlbGV0ZWQsIG5ldmVyIHVzZWQuCisJKHJlZ3NfbGl2ZV9hdCk6IE5vdyB0d28gZW50cmllcyBwZXIgaW5zbi4KKwkoYWxsb2NfcXR5KTogSW5pdGlhbGl6ZSBjaGFpbiBvZiByZWdpc3RlciBpbiBxdWFudGl0eS4KKwkobG9jYWxfYWxsb2MpOiBSZW1vdmUgYWxsIHBlci1ibG9jayBsb29wcyBvdmVyIHJlZ2lzdGVycy4KKwlPbmx5IGFsbG9jYXRlIHF0eV8uLi4gdmFycyBmb3IgbWF4X3JlZyAtIEZJUlNUX1BTRVVET19SRUdJU1RFUi4KKwlJbml0aWFsaXplIHJlZ19xdHkgb25jZSBwZXIgZnVuY3Rpb24uCisJRG9uJ3QgaW5pdGlhbGl6ZSBxdHlfLi4uIHZhcnMgdGhhdCBhcmUgYWx3YXlzIHNldCBiZWZvcmUgdXNlLgorCShibG9ja19hbGxvYyk6IERlbGV0ZSBpbnNuX21hcCwgbWF4X3VpZCwgYW5kIGNhbGxfdXNlZC4KKwlJbnNuIG51bWJlcnMgc3RhcnQgYXQgMSBhbmQgd2UgaGF2ZSB0d28gZW50cmllcyBpbiByZWdzX2xpdmVfYXQKKwlmb3IgZWFjaCBpbnNuLgorCVNlYXJjaCBmb3IgUkVHX05PX0NPTkZMSUNUIGJsb2NrIHdoZW4gd2Ugc2VlIGEgQ0xPQkJFUiBpbnNuOyB0aGlzCisJYXZvaWRzIGhhdmluZyBhbHJlYWR5IHNlZW4gc2V0cyB0byB0aGUgb3V0cHV0IHJlZ2lzdGVyLgorCUNhbGwgd2lwZV9kZWFkX3JlZyBmb3IgYW55dGhpbmcgaW4gYSBSRUdfVU5VU0VEIG5vdGUuCisJRGVsZXRlIHJlZmVyZW5jZXMgdG8gcmVnX2ZpcnN0X3VzZS4KKwlEb24ndCBjaGVjayBmb3IgaW52YWxpZCBiaXJ0aCBhbmQgZGVhdGggaGVyZS4KKwlEb24ndCBjYWxsIHFzb3J0IGlmIHdlIGhhdmUgMCBvciAxIHF1YW50aXRpZXMuCisJRmluZCBhbGwgcmVnaXN0ZXJzIGZvciBhIHF1YW50aXR5IHVzaW5nIHJlZ19uZXh0X2luX3F0eSBjaGFpbiBpbnN0ZWFkCisJb2YgbG9vcGluZyBvdmVyIGFsbCBwc2V1ZG9zLgorCShjb21iaW5lX3JlZ3MpOiBSZWZpbmUgdGVzdHMgdG8gYWdyZWUgd2l0aCBuZXcgY29udmVudGlvbnMuICAKKwlOZXZlciB0aWUgcHNldWRvcyBpZiBTUkVHIGFscmVhZHkgaGFzIGEgcXVhbnRpdHkgYXNzaWduZWQuCisJV2hlbiB1cGRhdGluZyBzaXplLCB1c2UgcmVnX25leHRfaW5fcXR5IGluc3RlYWQgb2YgbG9vcGluZyBvdmVyCisJYWxsIHJlZ2lzdGVycy4KKwkocmVnX2lzX3NldCk6IEp1c3QgY2FsbCByZWdfaXNfYm9ybi4gIFdoZXJlIGl0IGlzIGJvcm4gZGVwZW5kcyBvbgorCXdoZXRoZXIgd2UgaGF2ZSBhIENMT0JCRVIgb3Igbm90LiAgQmlydGggbG9jYXRpb24gaXMgbm93IHR3aWNlCisJdGhlIGluc24gbnVtYmVyLgorCShyZWdfaXNfYm9ybik6IEhhbmRsZSBjYXNlIHdoZW4gYSBoYXJkIHJlZyBpcyBib3JuIGJlZm9yZSB0aGUKKwljdXJyZW50IGluc24uCisJU2hvdyB3ZSBkb24ndCBrbm93IHRoZSBkZWF0aCBsb2NhdGlvbi4KKwkod2lwZV9kZWFkX3JlZyk6IFBhcmFtZXRlcnMgYXJlIG5vdyBqdXN0IHJlZ2lzdGVyIGFuZCBhbiBpbi9vdXQgZmxhZy4KKwlEZWF0aCBsb2NhdGlvbnMgYXJlIG5vdyB0d2ljZSB0aGUgaW5zbiBudW1iZXIuCisJU3VwcG9ydCBoYXJkIHJlZ3MgdGhhdCBkaWUgaW1tZWRpYXRlbHkgYWZ0ZXIgY3VycmVudCBpbnNuLgorCURvbid0IG1ha2UgUkVHX1VOU0VUIG5vdGVzLgorCShmaW5kX2ZyZWVfcmVnKTogVmFsaWRhdGUgQklSVEggYW5kIERFQVRIIGhlcmUuCisJV2Ugbm8gbG9uZ2VyIGhhdmUgcXR5X2Nsb2JiZXIuCisJKHBvc3RfbWFya19saWZlKTogRWxpbWluYXRlIENMT0JCRVIgcGFyYW1ldGVyLgorCShub19jb25mbGljdF9wKTogTm93IHBhc3NlZCBDTE9CQkVSIGF0IHN0YXJ0IG9mIGJsb2NrLiAgUmV0dXJuIDAgaWYKKwljYW4ndCBmaW5kIGRlYXRoIG5vdGUgb3IgaWYgUjEgaXMgYSBoYXJkIHJlZ2lzdGVyLgorCisJKiBtNjhrLm1kIChkaXZzaTMsIHVkaXZzaTMpOiBSZW1vdmUgcGF0dGVybnMuICBVc2luZyBkaXZtb2RzaTQgYW5kCisJdWRpdm1vZHNpNCBwcm9kdWNlcyBiZXR0ZXIgY29kZS4KKwkoZGl2bW9kc2k0LCB1ZGl2bW9kc2k0KTogSWYgcmVtYWluZGVyIGlzbid0IG5lZWRlZCwgdXNlIGRpdnNsL2RpdnVsCisJaW5zdGVhZCBvZiBkaXZzbGwvZGl2dWxsLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFJlbW92ZSBjaGFuZ2Ugb2YgTWFyY2ggMjB0aC4KKwlJbnN0ZWFkLCBleHBhbmQgYXJncyBpbiB0d28gcGFzc2VzLiAgRmlyc3QsIGV4cGFuZCBhbGwgdGhhdCBnbworCWludG8gcmVnaXN0ZXJzLiAgVGhlbiBkbyB0aG9zZSBpbiBtZW1vcnkgd2l0aCBzdG9yZV9leHByLgorCisJKiBpbnRlZ3JhdGUuYyAoaW5pdGlhbGl6ZV9mb3JfaW5saW5lKTogUHV0IHRoZSBvcmlnaW5hbCBjb3B5IG9mIHRoZQorCWFkZHJlc3MgaW50byBBUkdfVkVDVE9SOyB0aGUgbmV3IG9uZSB3aWxsIGJlIG1vZGlmaWVkLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBIYW5kbGUgcGFyYWRveGljYWwgU1VCUkVHcyBvbiBhbiBvdXRwdXQKKwlhcyB3ZWxsIGFzIGFuIGlucHV0LgorCisJKiBmbG93LmMgKG1hcmtfbGFiZWxfcmVmKTogRG9uJ3QgYmxvdyB1cCB3aGVuIFggaXMgMC4KKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbik6IEZpeCB0eXBvczsgcmVzdWx0IG9mIAorCWV4YWN0X2xvZzIgaXMgaW50ZXJlc3RpbmcgaWYgPj0wLgorCisJKiBhMjlrLm1kIChzdG9yZV9tdWx0aXBsZSk6IEFsbG93IGdlbl9zdG9yZV9tdWx0aXBsZXtfbm8sfV9idWcgdG8gZmFpbDsKKwl3ZSBmYWlsIGlmIHRoZXkgZG8uCisKKwkqIHJlb3JnLmMgKGVtaXRfZGVsYXlfc2VxdWVuY2UpOiBSZWNvcmQgdGhhdCB3ZSBkZWxldGVkIGEgQkFSUklFUgorCWFuZCByZXN0b3JlIGl0IHByZWNpc2VseSBvbiB0aG9zZSBvY2NhaXNpb25zLgorCitTdW4gTWFyIDI0IDIxOjE5OjU1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogQ2hhbmdlIGVycm9yIG1lc3NhZ2UuCisJKiB0b3BsZXYuYyAodmFyaW91cyk6IENoYW5nZSBlcnJvciBtZXNzYWdlcy4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogSGFuZGxlIEFTTV9PVVRQVVRfTE9PUF9BTElHTi4KKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBQYXNzIG51bWJlciBvZiBieXRlcyB0byBwb3AgdG8gY2FsbF9wb3AuCisJKiB2YXgubWQgKGNhbGxfcG9wLCBjYWxsX3ZhbHVlX3BvcCk6IFVzZSB0aGF0IGFyZy4KKworU2F0IE1hciAyMyAyMzoyODo1OSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluICh2ZXJzaW9uKTogUnVuIGF3aywgbm90IGdjYywgdG8gZ2V0IHRoaXMgdmFsdWUuCisKK1NhdCBNYXIgMjMgMTg6MDQ6MjMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IEFkZCBtaXNzaW5nIGNhc2VzIGZvciBBQlMgYW5kIEZGUy4KKworCSogYWxsaWFudC5tZDogRWxpbWluYXRlIHVubmVlZGVkIHBhdHRlcm5zOiBISW1vZGUgemVyb19leHRyYWN0LCAKKwkoc2V0IChjYzAgKHN1YnJlZyAuLi4pKSksIChzZXQgKGNjMCkgKGFuZCAuLi4pKSwKKwkoYW5kICh6ZXJvX2V4dGVuZCAuLi4pIC4uLiksIHNoaWZ0IHJpZ2h0IG9mIDI0IGFuZCAxNi4KKwlVc2UgYWx0ZXJuYXRpdmVzIHRvIHNlbGVjdCBhc3NlbWJsZXIgdGVtcGxhdGUgd2hlbiBwb3NzaWJsZS4KKwlVc2UgY29uc3RfaW50X29wZXJhbmQgaW5zdGVhZCBvZiBpbW1lZGlhdGVfb3BlcmFuZCB3aGVuCisJcG9zc2libGUgdG8gYXZvaWQgZXhwbGljaXQgdGVzdCBmb3IgQ09OU1RfSU5ULgorCVdyaXRlIGFkZC1hbmQtYnJhbmNoIHBhdHRlcm5zIHdpdGggUExVUyByZW1vdmVkLCB0aGUgd2F5IGNvbWJpbmUKKwlwcm9kdWNlcyB0aGVtLgorCisJKiBydGxhbmFsLmMgKHJlZmVyc190b19yZWdub19wKTogSWYgWCBpcyBhIFNVQlJFRyBvZiBhIGhhcmQKKwlyZWdpc3RlciwgdHJlYXQgaXQgYXMgaWYgaXQgd2VyZSB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIuCisJQ0xPQkJFUiBkb2Vzbid0IHJlZmVyIHRvIGFueXRoaW5nLgorCQorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogVXNlIHByZXZfbm9ubm90ZV9pbnNuLCBub3QgUFJFVl9JTlNOLAorCXRvIGZpbmQgY2MwLXNldHRpbmcgaW5zbiBmcm9tIGNjMC11c2luZyBpbnNuLgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZmluZF9yZWcpOiBEb24ndCBsb29rIGZvciBvdGhlciByZWdpc3RlcnMgdG8KKwlyZW51bWJlciB1bmxlc3Mgd2Uga25vdyB0aGF0IHdlIGFyZSBzaGFyaW5nIHJlZ2lzdGVycy4KKworCSogZW1pdC1ydGwuYyAoZW5kX3NlcXVlbmNlKTogRml4IHR5cG8gdGhhdCBwcmV2ZW50ZWQgc3BlZWR1cCBvZgorCURlYyAyNnRoIGZyb20gZG9pbmcgYW55dGhpbmcuCisKKwkqIHRvcGxldi5jIChkb19hYm9ydCk6IE5ldyBmdW5jdGlvbiwganVzdCBjYWxscyBhYm9ydC4KKwkobWFpbik6IFNldCBsYW5nX2V4cGFuZF9leHByIHRvIGFkZHJlc3Mgb2YgZG9fYWJvcnQ7IGFib3J0IG1pZ2h0IGJlCisJYSBtYWNybyB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IGEgZnVuY3Rpb24gbmFtZS4KKworCSogY3NlLmM6IChxdHlfLi4uIHZhcmlhYmxlcyk6IFJlZmluZWQgdG8gYmUgdW5kZWZpbmVkIGZvciBpbmRpY2VzCisJbGVzcyB0aGFuIE1BWF9SRUcuICBUaHVzLCB3ZSBuZWVkIG5vdCBpbnRpYWxpemUgdGhlbSBhdCB0aGUgc3RhcnQKKwlvZiBhIGJhc2ljIGJsb2NrIGFuZCBjYW4gaW5zdGVhZCBpbmlhbGl6ZSBhIHF1YW50aXR5IGFzIHdlIGNyZWF0ZSBpdC4KKwkocmVnX3tuZXh0LHByZXZ9X2Vxdik6IFRoZXNlIHZhcmlhYmxlcyB3aWxsIG5vdyBiZSBkZWZpbmVkIG9ubHkgd2hlbgorCXJlZ19xdHlbTl0gIT0gTiBhbmQgaGVuY2UgbmVlZCBub3QgYmUgaW5pdGlhbGl6ZWQgZXZlcnkgYmxvY2sgZWl0aGVyLgorCShuZXdfYmFzaWNfYmxvY2spOiBOZWVkIG5vdCBpbml0aWFsaXplIHJlZ19ydHggZm9yIG5ldyBibG9jazsgdGhlCisJb25seSB0aW1lIHdlIGNhbiBpbmhlcml0IHZhbHVlcyBmcm9tIHByZXZpb3VzIGJsb2NrcyBpcyBmb3IgaGFyZAorCXJlZ3MgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIGluIHRoYXQgY2FzZS4KKworCSogYy1wYXJzZS55ICh5eWxleCk6IEF2b2lkIHVzZSBvZiBzaXplX3Q7IGl0IG1heSBub3QgYmUgZGVmaW5lZC4KKwlDYXN0IGFsbG9jYSB0byAoY2hhciAqKS4KKworCSogb3V0LXJvbXAuYyAodXBkYXRlX2NjKTogY2Nfc3RhdHVzLnZhbHVlWzEyXSBjYW4gYWxzbyBiZSBhIENPTVBBUkUsCisJc28gdXNlIHJlZ19vdmVybGFwX21lbnRpb25lZF9wIHRvIHNlZSBpZiBhbiBpbnNuIHRoYXQgbW9kaWZpZXMgYQorCXJlZ2lzdGVyIGludmFsaWRhdGVzIGNjMC4KKworCSogcmVvcmcuYyAobGlua19jYzBfaW5zbnMpOiBJZiBuZXh0IGluc24gaXMgYSBTRVFVRU5DRSwgdGhlIGluc24KKwl1c2luZyBjYzAgaXMgdGhlIGZpcnN0IGluc24gaW4gdGhlIHNlcXVlbmNlLgorCShtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBEb24ndCBhc3N1bWUgdGhhdCBhIFJFR19ERUFEIG5vdGUgYWx3YXlzCisJcmVmZXJzIHRvIGEgcmVnaXN0ZXIuCisKK1NhdCBNYXIgMjMgMTU6MzU6NTkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6CisJQW4gaW5wdXQgcmVsb2FkIGlzIHVzZSBiZWZvcmUgYW4gb3V0cHV0IG9yIG91dHB1dCBhZGRyZXNzIHJlbG9hZC4KKworCSogZ2Vub3V0cHV0LmMgKHZhbGlkYXRlX2luc25fYWx0ZXJuYXRpdmVzKTogTmV3IGZ1bmN0aW9uLgorCUxvb3Agb3ZlciBpbnNuJ3MgYWx0ZXJuYXRpdmVzIHRvIGZpbmQgb3V0IGhvdyBtYW55CisJYWx0ZXJuYXRpdmVzIHRoZSBpbnNuIHBhdHRlcm4gaXMgdG8gc3VwcG9ydC4gIFZlcmlmeSB0aGF0IGlmCisJYW55IGFsdGVybmF0aXZlcyBhcmUgc3BlY2lmaWVkIGZvciBhIGdpdmVuIG9wZXJhbmQgdGhhdCB0aGUKKwludW1iZXIgb2YgYWx0ZXJuYXRpdmVzIG1hdGNoIHRoZSBudW1lciBvZiBhbHRlcm5hdGl2ZXMgZm9yCisJdGhpcyBpbnNuLgorCShnZW5fe2luc24scGVlcGhvbGUsZXhwYW5kLHNwbGl0fSk6IENhbGwKKwlgdmFsaWRhdGVfaW5zbl9hbHRlcm5hdGl2ZXMnIGFmdGVyIHNjYW5uaW5nIHRoZSBpbnNuLiAgVGhpcworCXNldHMgdXAgdGhlIHZhbHVlIE5fQUxURVJOQVRJVkVTIGZvciB0aGUgaW5zbiBzbyB0aGF0CisJYHByb2Nlc3NfdGVtcGxhdGUnIGNhbiBjaGVjayB0aGF0IHRoZSBudW1iZXIgb2YgYWx0ZXJuaXR2ZXMKKwlnaXZlbiBtYXRjaGVzIHRoZSBudW1iZXIgb2YgYXNtIGNob2ljZXMgZm9yIGBAJyBjb25zdHJ1Y3RzLgorCitTYXQgTWFyIDIzIDA4OjA5OjU3IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBkYnhvdXQuYyAodG9wbGV2ZWwsIGRieG91dF9pbml0KTogSW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgYEx0ZXh0JworCWFzIHRoZSBsYWJlbCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IHJlZ2lvbiwgcHJvcGVybHkgbG9jYWxpemUKKwlpdCwgc28gdGhhdCBtYWNoaW5lcyB3aGljaCBkbyBub3QgcHV0IGxlYWRpbmcgdW5kZXJzY29yZXMgaW4gZnJvbnQKKwlvZiBleHRlcm5hbCBuYW1lcyBkbyBub3QgaGF2ZSBhIHByb2JsZW0gaWYgdGhlIHVzZXIgdXNlcyBgTHRleHQnLgorCShkYnhvdXRfaW5pdCk6IENhbGwgdGV4dF9zZWN0aW9uIGJlZm9yZSBwdXR0aW5nIG91dCBsb2NhbGl6ZWQKKwlgTHRleHQnLCBpbiBjYXNlIEFTTV9GSUxFX1NUQVJUIHB1dCB1cyBpbnRvIGEgZGlmZmVyZW50IHNlY3Rpb24uCisKK0ZyaSBNYXIgMjIgMTk6MjY6MjMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5tZCAoanVtcGZkZWMpOiBTaW1wbGlmeSBwYXR0ZXJuIHRvIG1hdGNoIHdoYXQgY29tYmluZSB3aWxsCisJcHJvZHVjZTsgcmVtb3ZlIHJldmVyc2VkIHBhdHRlcm4uCisJKiBvdXQtYTI5ay5jIChnZW5fcmVnX29wZXJhbmQpOiBTcGVlZCB1cCBieSBub3QgY2FsbGluZworCXJlZ2lzdGVyX29wZXJhbmQ7IGNoZWNrIHJlZ2lzdGVyIG51bWJlciBvdXJzZWxmLgorCisJKiBvdXQtcm9tcC5jICh1cGRhdGVfY2MsIGNhc2UgQ0NfQ09NUEFSRSk6IENhbGwgQ0NfU1RBVFVTX0lOSVQuCisJKiByb21wLm1kOiBJbiBwYXR0ZXJuIHRoYXQgc2V0cyBjYzAgYW5kIGNvcGllcyBhIHJlZ2lzdGVyIHRvIGFub3RoZXIKKwlyZWdpc3RlciwgYWxsb3cgdGhlIG91dHB1dCB0byBiZSBpbiBtZW1vcnkgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW4KKwlvdXRwdXQgcmVsb2FkLCB3aGljaCB3aWxsIGNhdXNlIHByb2JsZW1zLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBFbnN1cmUgREVDTF9JTklUSUFMIGlzIG5vbi16ZXJvCisJYmVmb3JlIHdlIHJlZmVyZW5jZSBpdDsgaXQgbWlnaHQgYmUgemVybyBpZiAtZm5vLWNvbW1vbi4KKworRnJpIE1hciAyMiAxNjoxMTozNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChhYm9ydCk6IERvbid0IGRlY2xhcmUgaWYgZGVmaW5lZCBhcyBtYWNyby4KKworRnJpIE1hciAyMiAxMTo0OTo0MyAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoYnh4dSk6IERvbid0IGF0dGVtcHQgdG8gdXNlIGJjbmQuCisJKHVtdWxzaTMsIGFzaGlmdC9hbmQpOiBSZW1vdmUgdGhlc2UgcGF0dGVybnMuCisJKGR1bW15KTogVGhpcyBtdXN0IGJlIGEgZGVmaW5lX2V4cGFuZC4KKwkqIG91dC1tODhrLmMgKG04OGtfaGFuZGxlX3ByYWdtYV90b2tlbik6IEhhbmRsZSAjcHJhZ21hIHdlYWsuCisJKiB0bS1tODhrLmgsIHRtLW04OGtkZ3V4LmgsIHRtLW04OGtzdnI0LmgsIHRtLXY4OHIzMi5oOiBWYXJpb3VzCisJY2hhbmdlcyB0byBzdXBwb3J0IFNWUjQsIGluY2x1ZGluZyBzdXBwb3J0IGZvciAjcHJhZ21hIHdlYWsuCisJKFNMT1dfQllURV9BQ0NFU1MpOiBCZXR0ZXIgY29kZSBpZiB0aGlzIGlzIHRydWUuCisKK1RodSBNYXIgMjEgMDk6MTU6NDcgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGdlbi1ydHgpCisKKwkqIGMtcGFyc2UueSAoTVVMVElCWVRFX0NIQVJTKTogTmV3IG1hY3JvLgorCShpbml0X2xleCk6IENoYW5nZSB0byB0aGUgbmF0aXZlIGxvY2FsZS4KKwkoeXlsZXgpOiBQcm9jZXNzIHdpZGUgY2hhcmFjdGVyIGxpdGVyYWxzIGFuZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcKKwlsaXRlcmFscyB1c2luZyBtYnRvd2MgYW5kIG1ic3Rvd2NzIGJhc2VkIG9uIE1VTFRJQllURV9DSEFSUy4KKworVGh1IE1hciAyMSAxNTo0Njo0NSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGxhbmFsLmMgKGRlYWRfb3Jfc2V0X3ApOiBBIHJlZ2lzdGVyIGlzIGRlYWQgaWYgaXQgaXMgYXNzaWduZWQKKwl2aWEgYSBTVUJSRUcgdGhhdCByZWZlcmVuY2VzIHRoZSBhbGwgdGhlIHdvcmRzIGluIHRoZSByZWdpc3Rlci4KKworCSogdG0tdmF4LmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IERlZmluZSBgSScgdG8gYmUgY29uc3RhbnQgemVyby4KKwkoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IERlZmluZSBgRycgdG8gYmUgZmxvYXRpbmcgemVyby4KKwkoQ09OU1RfQ09TVFMpOiArLy0gMSBzaG91bGQgYmUgdmVyeSBjaGVhcCBkdWUgdG8gZGVjbC9pbmMvYW9iL3NvYi4KKwkoUFJJTlRfT1BFUkFORCk6IEFkZCBgUCcsIGBOJywgYEgnLCBhbmQgYEInLgorCSogdmF4Lm1kOiBSZXdvcmsgbWFueSBwYXR0ZXJucyB0byBhdm9pZCBDIGNvZGUgZm9yIG91dHB1dCB0ZW1wbGF0ZTsKKwl1c2UgIkAiIGNvbnN0cnVjdCB3aGVuZXZlciBwb3NzaWJsZS4KKwlVc2UgSU5TTl9ERUxFVEVEX1AuCisJUmVtb3ZlIGV4dGVuZHNpZGkyOyB0aGUgc3VwcGxpZWQgcGF0dGVybiBkb2VzIGV4YWN0bHkgd2hhdCBjb252ZXJ0X21vdmUKKwl3aWxsIGRvIHdoZW4gdGhlIHBhdHRlcm4gaXMgbm90IHByZXNlbnQuCisJVXNlIGNvbnN0bTFfcnR4IHRvIGNoZWNrIGZvciBjb25zdGFudCBvZiAtMS4KKwlBZGQgbXVsc2lkaTMgYW5kIHJlbGF0ZWQgYWRkLW11bHRpcGx5IHBhdHRlcm4gZm9yIGVtdWwgaW5zbi4KKwlVc2UgY29uc3RfaW50X29wZXJhbmQgYXMgcHJlZGljYXRlIGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIENPTlNUX0lOVC4KKwlSZW1vdmUgdW5uZWVkZWQgKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKG5lIChhbmQgLi4uKSAuLi4pIC4uLikpCisJcGF0dGVybnMuCisJTWVyZ2UgamxicyBhbmQgamJzIGFuZCBzaW1pbGFybHkgZm9yIGpsYmMgYW5kIGpiYy4KKwlSZW1vdmUgdW5uZWVkZWQgcmV2ZXJzZSBicmFuY2ggcGF0dGVybnMgZm9yIGFib3ZlIGluc25zLgorCVJld3JpdGUgcGF0dGVybnMgZm9yIGFkZC1hbmQtYnJhbmNoIGluc25zIHRvIHRha2UgaW50byBhY2NvdW50CisJc2ltcGxpZmljYXRpb25zIGRvbmUgYnkgY29tYmluZSBhbmQgcmVtb3ZlIHJldmVyc2VkIGNhc2VzLgorCUNvbnZlcnQgcGVlcGhvbGVzIGZvciBvcHRpbWl6aW5nIGV4dHp2IGZvbGxvd2VkIG9yIHByZWNlZWRlZCBieSBhbmRsCisJaW50byBwYXR0ZXJucyBmb3IgYSBzaW5nbGUgaW5zbi4KKworVGh1IE1hciAyMSAxNTo0NjoyMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChhYm9ydCk6IERlY2xhcmUgaXQuCisKK1RodSBNYXIgMjEgMDg6MTY6MTIgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHZhLW1pcHMuaCAod2hvbGUgZmlsZSk6IFJlcGxhY2Ugd2l0aCB0aGUgMS4zOSB2ZXJzaW9uIG9mIHRoaXMKKwlmaWxlLCB3aGljaCB3YXMgYSB0b3RhbCByZXdyaXRlIG9mIHRoZSAxLjM3LjEgdmVyc2lvbi4gIEFkZAorCXByaW1pdGl2ZSBzdXBwb3J0IGZvciAyLjAwLgorCitXZWQgTWFyIDIwIDE4OjMxOjQyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoZHVwbGljYXRlX2xvb3BfZXhpdF90ZXN0KTogTWFrZSBjb3B5IG9mIGNvbnRlbnRzIG9mCisJcmVnaXN0ZXIgbm90ZTsgaWYgaXQgd2FzIGEgUkVHX0VRVUFMIG5vdGUsIGl0IG1pZ2h0IGhhdmUgYmVlbiBhbgorCWFyYml0cmFyeSBleHByZXNzaW9uIGFuZCBzaGFyaW5nIGl0IGNhbiBjYXVzZSBwcm9ibGVtcyBpbiBjc2UuCisKKwkqIHJ0bC5kZWYgKFVNVUxUKTogUmVtb3ZlIHVuc2lnbmVkIG11bHRpcGx5IGNvZGUuCisJKiBjb21iaW5lLmMgKHN1YnN0LCBzaWduaWZpY2FudF9iaXRzKTogUmVtb3ZlIGNvZGUgVU1VTFQgYW5kCisJc3VwcG9ydCBmb3IgaW5kaWNhdGluZyB3aWRlbmluZyBtdWx0aXBseSB3aXRoIGRpZmZlcmVudCBtb2RlcworCW9uIHRoZSBNVUxUIG9wZXJhdGlvbiB2cy4gaXRzIG9wZXJhbmRzLgorCSogY3NlLmMJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBSZW1vdmUgc3VwcG9ydCBmb3Igd2lkZW5pbmcKKwltdWx0aXBseS4KKwkocnR4X2NvZGUsIGV4cF9lcXVpdl9wLCBzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjc2VfaW5zbik6IFJlbW92ZQorCWNvZGUgVU1VTFQuCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IExpa2V3aXNlLgorCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IExpa2V3aXNlLgorCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBMaWtld2lzZTsgcmVwbGFjZSB3aXRoIEdFVF9SVFhfQ0xBU1MuCisJKiBsb29wLmMgKHNpbXBsaWZ5X2dpdl9leHByLCBleHByX2JlbmVmaXQpOiBSZW1vdmUgY29kZSBVTVVMVAorCWFuZCBzdXBwb3J0IGZvciB3aWRlbmluZyBtdWx0aXBseS4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IFNldCBjb2RlIG9mIHdpZGVuaW5nIG11bHRpcGx5IHRhYmxlcworCXRvIFVOS05PV04uCisKKwkqIGEyOWsubWQgKG11bHNpZGkyLCB1bXVsc2lkaTIpOiBSZXdyaXRlIHVzaW5nIFNJR05fRVhURU5EIGFuZAorCVpFUk9fRVhURU5ELiAgQWxzbyBmaXggdHlwbyBpbiBTVUJSRUdfV09SRCB3aGVuIHNwbGl0dGluZy4KKwkqIHRtLWFsbGlhbnQuaCwgdG0tbTY4ay5oIChOT1RJQ0VfVVBEQVRFX0NDKTogUmVtb3ZlIGNvZGUgVU1VTFQuCisJKiBhbGxpYW50Lm1kLCBtNjgubWQgKG11bGhpc2kzLCB1bXVsaGlzaTMpOiBSZXdyaXRlIHVzaW5nCisJU0lHTl9FWFRFTkQgYW5kIFpFUk9fRVhURU5ELgorCShkaXZoaXNpMywgdWRpdmhpc2kzLCBtb2RoaXNpMywgdW1vZGhpc2kzKTogUmV3cml0ZSB1c2luZyBUUlVOQ0FURS4KKwkqIGFsbGlhbnQubWQsIG5zMzJrLm1kICh1bXVsc2kzLCB1bXVsaGkzLCB1bXVscWkzKTogUmVtb3ZlIHVubmVlZGVkCisJcGF0dGVybnMgdGhhdCB1c2UgVU1VTFQuCisJKiBuczMyay5tZCAodW11bHNpZGkzKTogUmV3cml0ZSB1c2luZyBaRVJPX0VYVEVORC4KKworCSogdG0tYWxsaWFudC5oIChOT1RJQ0VfVVBEQVRFX0NDKTogTU9EIGFuZCAodHJ1bmMgKG1vZCAuLi4pKQorCWNsb2JiZXIgQ0MuCisJKiBhbGxpYW50Lm1kIChtb2QqLCB1bW9kKik6IE5vIGxvbmdlciBuZWVkIENDX1NUQVRVU19JTklULgorCisJKiByZWNvZy5jOiBJbmNsdWRlIGluc24tYXR0ci5oLgorCShnZW5lcmFsX29wZXJhbmQpOiBJZiB3ZSBoYXZlIGluc24gc2NoZWR1bGluZywgZG9uJ3QgYWxsb3cgcGFyYWRveGljYWwKKwlTVUJSRUdzIHNpbmNlIHRoZXkgY2FuIHByZXZlbnQgc2NoZWR1bGluZyBtZW1vcnkgcmVmZXJlbmNlczsgdGhleQorCWFyZW4ndCBoZWxwZnVsIG9uIFJJU0NzIGFueXdheSBhbmQgY2FuIGNhdXNlIHBvb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKwkqIE1ha2VmaWxlLmluIChyZWNvZy5vKTogSW5jbHVkZXMgaW5zbi1hdHRyLmguCisKKwkqIGNzZS5jIChDT1NUKTogQSByZWdpc3RlciBvbmx5IGluIE5PX1JFR1MgaXNuJ3QgYSBzcGVjaWFsbHktY2hlYXAgcmVnLgorCShzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24sIGNhc2Uge1pFUk8sU0lHTn1fRVhURU5EKTogSWYgT1BfTU9ERSB3YXMKKwlnaXZlbiBhcyBWT0lEbW9kZSwgdXNlIE1PREU7IGFsbG93IG1vZGUgc2l6ZSBvZiBIT1NUX0JJVFNfUEVSX0lOVC4KKwkoY3NlX2luc24pOiBEb24ndCBtYWtlIFNFVF9TUkMgZXF1YWwgU0VUX0RFU1QgaWYgZG9pbmcgc28gd2lsbCBjYXVzZQorCXR3byByZWdpc3RlcnMgdG8gYmUgbGl2ZSBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlLgorCShjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogQ291bnQgU0VUcyBpbiBDQUxMX0lOU05zIGFuZCBKVU1QX0lOU05zLgorCitXZWQgTWFyIDIwIDE1OjQwOjQ4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKE1EX0VYRUNfUFJFRklYLCBNRF9TVEFSVEZJTEVfUFJFRklYKTogTmV3IG1hY3Jvcy4KKwkobWRfZXhlY19wcmVmaXgsIG1kX3N0YXJ0ZmlsZV9wcmVmaXgpOiBOZXcgdmFyaWFibGVzLgorCShwcm9jZXNzX2NvbW1hbmQpOiBQdXQgdGhvc2UgcHJlZml4ZXMgb24gdGhlIHBhdGhzLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFVzZSBhYm9ydCwgbm90IGZhbmN5X2Fib3J0LgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFVzZSBlbWl0X2Jsb2NrX21vdmUKKwl0byBjb3B5IEJMS21vZGUgcGFybSB2YWx1ZS4gIFNhdmUgc2l6ZSBhbmQgYWxpZ25tZW50IGZvciB0aGlzLgorCisJKiBnbnVsaWIyLmMgKF9fYnVpbHRpbl9zYXZlcmVncylbTUlQU106IEdvIHRvIHRleHQgc2VjdGlvbi4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3QgZ28gdG8gdGV4dCBhZnRlciBqdW1wLXRhYiBsYWJlbC4KKworVHVlIE1hciAxOSAyMToyNzowOSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0bS1hMjlrLmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBBbHdheXMgd3JpdGUgcmVnaXN0ZXJzIHRvCQorCTAoYXApLCBubyBtYXR0ZXIgaG93IG1hbnkgbmFtZWQgYXJncyBhcmUgcHJlc2VudC4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEluIElGX1RIRU5fRUxTRSwgY2Fub25pY2FsaXplIHRvIHB1dCB0aGUgKHBjKQorCWluIHRoZSBzZWNvbmQgb3BlcmFuZCBpZiB3ZSBjYW4gcmV2ZXJzZSB0aGUgY29tcGFyaXNvbi4KKwkoc2lnbmlmaWNhbnRfYml0cyk6IFN1cHBvcnQgVFJVTkNBVEUgYW5kIFNJR05fRVhURU5ELgorCisJKiB0bS1yb21wLmggKENDX1VOU0lHTkVEKTogTmV3IGZsYWcgZm9yIGNjX3N0YXR1cy4KKwkqIG91dC1yb21wLmMgKHVwZGF0ZV9jYywgY2FzZSBDQ19DT01QQVJFKTogUmVjb3JkIHRoZSBvcGVyYW5kcyBvZiB0aGUKKwljb21wYXJlIGFuZCBtYXJrIHdoZXRoZXIgdGhlIHRlc3Qgd2lsbCBiZSBzaWduZWQgb3IgdW5zaWduZWQuCisJKHJlc3RvcmVfY29tcGFyZV9wKTogTmV3IGZ1bmN0aW9uLgorCSogcm9tcC5tZCAoY29uZGl0aW9uYWwgYnJhbmNoIGFuZCByZXR1cm4gcGF0dGVybnMpOiBVc2UgbmV3CisJcmVzdG9yZV9jb21wYXJlX3AgdG8gc2VlIGlmIHdlIG5lZWQgdG8gdGVsbCBmaW5hbCB0byByZWluY2x1ZGUKKwlkZWxldGVkIGNvbXBhcmUgaW5zbi4KKworCSogb3V0cHV0LmggKGNvbnN0X2ludF9vcGVyYW5kKTogRGVmaW5lLgorCSogcmVjb2cuYyAoY29uc3RfaW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKiBvdXQtYTI5ay5jLCBvdXQtcm9tcC5jLCBvdXQtcnM2MDAwLmMgKGNvbnN0X2ludF9vcGVyYW5kKTogUmVtb3ZlIGZyb20KKwl0aGVzZS4KKworCSogdHJlZS5jIChydGxfaW5fc2F2ZWFibGVfb2JzdGFjayk6IE5ldyBmdW5jdGlvbi4KKwkqIHZhcmFzbS5jIChpbW1lZF9kb3VibGVfY29uc3QsIGltbWVkX3JlYWxfY29uc3RfMSk6IEVuc3VyZSB0aGF0IHRoaW5ncworCXRoYXQgZ2V0IHBsYWNlZCBvbiB0aGUgY2hhaW4gYXJlIGFsd2F5cyBwdXQgaW50byBzYXZlYWJsZV9vYnN0YWNrLgorCitUdWUgTWFyIDE5IDE3OjIxOjMwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RkZGVmLmggKHdjaGFyX3QpOiBOZXcgdHlwZWRlZi4KKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogSGFuZGxlIE5PX1VOREVSU0NPUkVTIHN5bnRheC4KKworCSogdG0tcGJkLmgsIHhtLXBiZC5oOiBOZXcgZmlsZXMuCisKKwkqIHRvcGxldi5jIChyZXBvcnRfZXJyb3JfZnVuY3Rpb24pOiBEb24ndCBjcmFzaCBpZiBiZXR3ZWVuIGZ1bmN0aW9ucy4KKworVHVlIE1hciAxOSAxMjo1ODoxMyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIHNjaGVkLmMgKG1lbXJlZnNfY29uZmxpY3RfcCk6IEMgd2FzIGJlaW5nIHVzZWQgYXMgb2Zmc2V0IGZvciBYLAorCW5vdCBmb3IgWS4gIEZsaXBwaW5nICsgYW5kIC0gaW4gb2Zmc2V0IHVzZXMgY2xlYXJlZCB1cCB0aGlzIHByb2JsZW0uCisJKHt0cnVlLGFudGksb3V0cHV0fV9kZXBlbmRlbmNlKTogQWRkIGRlY2xhcmF0aW9uIGZvciBJTlNOLgorCShvcmRlcl9jYWxscyk6IEludGVyZmFjZSBjaGFuZ2VkOyBub3cgcmV0dXJucyB2b2lkLiAgQWxsIGNhbGxlcnMKKwljaGFuZ2VkLgorCShzY2hlZF9hbmFseXplX3sxLDJ9KTogTWFrZSBkZXBlbmRlbmNlIGJldHdlZW4gY2FsbHMgYW5kCisJY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXJzIGV4cGxpY2l0LgorCShzY2hlZF9hbmFseXplKTogVHJhY2sgbGFzdF9mdW5jdGlvbl9jYWxsX25vdF9jb25zdC4KKwkoc2NoZWRfbm90ZV9zZXQpOiBOZXcgcGFyYW1ldGVyIERFQVRIIHNheXMgd2hldGhlciBYIGlzIG1hcmtlZCBmb3IKKwlkZWF0aC4gIEFsc28sIGxvb2sgdGhyb3VnaCBTVUJSRUdzIGFuZCBleHRyYWN0aW9ucy4KKwkocmFua19mb3Jfc2NoZWR1bGUpOiBTdGFiaWxpemUgZm9yIHFzb3J0LgorCShhdHRhY2hfZGVhdGhzKTogV2Ugc2hvdWxkIG5vdCBlbmQgdXAgd2l0aCBtb3JlIFJFR19ERUFEIG5vdGVzIHRoYW4KKwl3ZSBzdGFydGVkIHdpdGgsIHNvIGFib3J0IGlmIHdlIHJ1biBvdXQgZWFybHkuCisJKGF0dGFjaF9kZWF0aHNfaW5zbik6IEhhbmRsZSBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzIG9mIHJlZ2lzdGVycworCWR5aW5nIGluIGluc25zLgorCSh1bmxpbmtfbm90ZXMpOiBXb3JrIGZyb20gYmFjay10by1mcm9udCBpbnN0ZWFkIG9mIGZyb250LXRvLWJhY2suCisJKG5ld19zb21ldGltZXNfbGl2ZSk6IEZpeCBjb2RlIHRoYXQgbG9va3MgZm9yIGFuIGVsZW1lbnQgYWxyZWFkeSBpbgorCXRoZSB0YWJsZS4KKwkoc2NoZWR1bGVfYmxvY2spOiBOZXcgdmFyaWFibGUgVEFJTF9QUklPUklUWSAgdXNlZCB0byBoZWxwIGRldGVybWluZQorCW1heCBJUEMgb2Ygc2NoZWR1bGVkIGNvZGUuICBBbHNvLCBmb3Igbm93IHdlIGFuYWx5emUgKHNjaGVkdWxlKSBhbGwKKwlibG9ja3MsIGV2ZW4gb25lcyB3aGljaCB3b24ndCBiZW5maXQgZnJvbSBzY2hlZHVsaW5nLiAgVGhpcyBpcworCW5lY2Vzc2FyeSB0byBrZWVwIHJlZ2lzdGVyIGxpdmUgaW5mbyBjb3JyZWN0LCBidXQgaGFzIHRoZQorCWRpc2FkdmFudGFnZSBvZiBzY3Jld2luZyAqYWxsKiBkZWJ1ZyBpbmZvLCBub3QganVzdCBmb3IgdGhlIGJsb2NrcworCXRoYXQgd2VyZSBzY2hlZHVsZWQuCisJKHVwZGF0ZV9saW5rcyk6IEZpeCBjb21wbGljYXRlZCBjb2RlIHRoYXQgd2FzIHRvIGJlIGEgc2ltcGxlCisJaGVhZC1jb25zIHRvIGJlIGEgc2ltcGxlIGhlYWQtY29ucy4KKwkoc2NoZWR1bGVfaW5zbnMpOiBVcGRhdGUgUkVHX0xJVkVfTEVOR1RIIGFuZCBSRUdfTl9DQUxMU19DUk9TU0VECisJYWZ0ZXIgc2NoZWR1bGluZy4KKworCSogc3BhcmMubWQgKGNtcGRmKTogRGVmaW5lIGFuIGV4cGFuZCBwYXR0ZXJuIGZvciB0aGlzLgkoRHJvcHBlZCBieQorCW1pc3Rha2Ugd2hlbiBjb252ZXJ0ZWQgZnJvbSBvbGQtc3R5bGUgdG8gbmV3LXN0eWxlIGNvbmRpdGlvbiBjb2RlcykuCisKKwkqIG91dC1zcGFyYy5jIChzaW5nbGVtb3ZlX3N0cmluZyk6IENhdGNoIGNhc2Ugd2hlcmUgYHNldGhpJyBjYW4gYmUKKwl1c2VkIGluc3RlYWQgb2YgYG1vdicuCisKKwkqIGdjYy50ZXhpbmZvIChPcHRpbWl6ZSBPcHRpb25zKTogQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlCisJYC1maW5saW5lJyBvcHRpb24gKGFjdHVhbGx5LCB0aGUgYC1mbm8taW5saW5lJyBvcHRpb24pLgorCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBVc2UgYHJ0eF9hbGxvYycgaW5zdGVhZCBvZgorCWBnZW5fcnR4JyB0byBjb25zIGEgQ09OU1RfSU5UIHdob3NlIElOVFZBTCB3ZSBjYW4gY2hhbmdlLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFJlY29nbml6ZSBhbGwgLU8gc3RyaW5ncyAoaS5lLiAtTzMsIC1PNjkpLCBub3QKKwlqdXN0IC1PIGFuZCAtTzIuCisKK01vbiBNYXIgMTggMjI6MzA6MjEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBGb3IgVFJVVEhfQU5ESUZfRVhQUiwgZG9uJ3QgdXNlIGhhcmQgdGFyZ2V0CisJaWYgbm90IG9wdGltaXppbmcuCisKKwkqIGNvbWJpbmUuYzogRml4IHNvbWUgY29tbWVudHM7IHJlb3JkZXIgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KKworTW9uIE1hciAxOCAxMjowNzowMyAxOTkxICBNYXR0aGV3IFNlbGYJKG1zZWxmQG5leHQuY29tKQorCisJKiB0bS1uZXh0LmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6ICBSZXR1cm4gbnVtYmVyIG9mIGFyZ3MgdGFrZW4uCisKKwkqIHRtLW5leHQuaCAoQ1BMVVNQTFVTKTogIERlbGV0ZWQgKG9ic29sZXRlKS4KKworCSogb3V0LW5leHQuYyAoZmxhZ19ub19tYWNoX3RleHRfc2VjdGlvbnMsIGhhbmRsZV9wcmFnbWEpOgorCUhhbmRsZSAjcHJhZ21hIENDX05PX01BQ0hfVEVYVF9TRUNUSU9OUy4KKworTW9uIE1hciAxOCAxMjoxMjoxMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGdvbGRtYW4pCisKKwkqIGNwbHVzLXB0LmM6IFJlbmFtZWQgZnJvbSBjcGx1cy10ZW1wbGF0ZS5jLgorCSogTWFrZWZpbGUuaW4gKGNwbHVzLXB0Lm8pOiBOZXcgdGFyZ2V0LgorCisJKiBjLXR5cGVjay5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKToKKwlBbGxvdyBjYXN0cyB0aGF0IGNoYW5nZSB3aWR0aCBvbmx5IGZvciBleHBsaWNpdCB2YWx1ZXMuCisJKiB0cmVlLmMgKHJlYWxseV9jb25zdGFudF9wKTogTmV3IGZ1bmN0aW9uLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBNSU5VU19FWFBSIHdpdGggRVhQQU5EX1NVTS4KKworCSogdG0tbTY4ay5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IERvbid0IG5vcm1hbGx5IGRlZmluZSB0aGlzLgorCSogb3V0LW02OGsuYyAodXNlX3JldHVybl9pbnNuKTogRG9uJ3QgbG9vayBhdCBGVU5DVElPTl9FWFRSQV9FUElMT0dVRS4KKworCSogb3V0LXNwYXJjLmMgKG5vcm1hbF9jb21wX29wZXJhdG9yKTogUmVwbGFjZSBjb21wYXJpc29uX2NvZGVfcC4KKworU3VuIE1hciAxNyAyMjo1MzoyNSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtNjhrLm1kOiBEZWxldGUgcGF0dGVybnMgbm93IGNvbnZlcnRlZCBieSBjb21iaW5lIHRvIHNpbXBsZXIKKwlwYXR0ZXJucyBvciBvdGhlcndpc2Ugb2Jzb2xldGUuCSBTcGVjaWZpY2FsbHk6CVpFUk9fRVhUUkFDVCBmcm9tCisJYW4gSEltb2RlIG9iamVjdCwgc2V0dGluZyBjYzAgdG8gU1VCUkVHIG9yIEFORCwgdW11bGhpMywgdW11bHNpMywKKwlBTkQgb2YgYSBaRVJPX0VYVFJBQ1QsIHNoaWZ0cyBvZiAyNCBhbmQgMTYgZnJvbSBNRU0sIGFuZCBwYXR0ZXJucyB3aXRoCisJY29uc3RhbnRzIGFzIGZpcnN0IG9wZXJhbmQgb2YgY29tcGFyaXNvbiBvcGVyYXRvci4KKwlSZW1vdmUgQ09NUEFSRSBleGNlcHQgYXMgYSBTRVRfU1JDLgorCisJKiBhbGxpYW50Lm1kLCB0YWhvZS5tZCwgcnM2MDAwLm1kOiBSZW1vdmUgQ09NUEFSRSBleGNlcHQgYXMgYSBTRVRfU1JDLgorCisJKiBmbGFncy5oIChmbGFnX2NvbWJpbmVfcmVncyk6IERlbGV0ZWQuCisJKiB0b3BsZXYuYzogTGlrZXdpc2UuCisJKiB0bS1hMjlrLmgsIHRtLXJvbXAuaCwgdG0tcnM2MDAwLmggKE9WRVJSSURFX09QVElPTlMpOiBObyBsb25nZXIKKwl0dXJuIG9uIGZsYWdfY29tYmluZV9yZWdzLgorCisJKiB0bS1yb21wLmgsIHRtLXJzNjAwMC5oIChTTE9XX0JZVEVfQUNDRVNTKTogU2V0IHRvIDEuCisKKwkqIE1ha2VmaWxlLmluIChjb21iaW5lLm8pOiBJbmNsdWRlIGluc24tY29kZXMuaCBhbmQgaW5zbi1hdHRyLmguCisKKwkqIGNvbWJpbmUuYzogTWFqb3IgcmV3b3JrIHRvIHN1cHBvcnQgbWFueSBtb3JlIHNpbXBsaWZpY2F0aW9ucyBpbgorCWEgbW9yZSByZWd1bGFyIG1hbm5lciBhbmQgc3VwcG9ydCBjb21iaW5pbmcgdGhyZWUgaW5zbnMgaW50byB0d28uCisJVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlcyBhcmUgdGhlIGZvbGxvd2luZzoKKwkoc3Vic3QpOiBSZW1vdmUgc2ltcGxpZmljYXRpb25zIGludm9sdmluZyBaRVJPX0VYVFJBQ1QsIFNJR05fRVhUUkFDVCwKKwlaRVJPX0VYVEVORCwgU0lHTl9FWFRFTkQsIEFORCwgYW5kIHNoaWZ0cy4KKwlDYWxsIG5ldyByb3V0aW5lcyBiZWxvdzsgaW4gdGhlIGNhc2Ugb2YgY29tcGFyaXNvbnMsIGhhbmRsZSBjYWxsCisJZmluZF9uZXh0X3VzZSBpZiB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgY29tcGFyaXNvbiBjb2RlIG9yIHRoZQorCXBhcnRpY3VsYXIgTU9ERV9DQyBtb2RlIHJlcXVpcmVkLgorCU5vIG5lZWQgdG8gZXZlciBjaGFuZ2UgQVNISUZUIHRvIE1VTFQgaGVyZS4KKwkoZXhwYW5kX2NvbXBvdW5kX29wZXJhdGlvbik6IE5ldyBmdW5jdGlvbiB0byBjb252ZXJ0CisJe1pFUk8sU0lHTn1fe0VYVFJBQ1QsRVhURU5EfSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwYWlyIG9mIHNoaWZ0cy4KKwkobWFrZV9jb21wb3VuZF9vcGVyYXRpb24pOiBOZXcgZnVuY3Rpb24gdG8gbWFrZQorCXtaRVJPLFNJR059X3tFWFRSQUNULEVYVEVORH0gb3BlcmF0aW9ucyBmcm9tIHNoaWZ0cyBhbmQgQU5Ecy4KKwlJZiB3ZSBhcmUgb24gYSBtYWNoaW5lIChsaWtlIGEgVmF4KSB0aGF0IGhhcyBvbmx5IGFyaXRobWV0aWMgc2hpZnRzLAorCWNvbnZlcnQgbG9naWNhbCB0byBhcml0aG1ldGljIHNoaWZ0cyB3aGVuIGl0IGRvZXNuJ3QgbWF0dGVyIAorCXdoaWNoIHNoaWZ0IGlzIHVzZWQgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0IGNhbm9uaWNhbGl6ZXMgdG8KKwlsb2dpY2FsIHNoaWZ0cykuCisJSWYgaW5zaWRlIGFuIGFkZHJlc3MsIGNvbnZlcnQgQVNISUZUIHRvIE1VTFQuCisJKHNpZ25pZmljYW50X2JpdHMpOiBOZXcgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGJpdHMgb2YKKwlhIHZhbHVlIGFyZSBrbm93biB0byBiZSB6ZXJvLgorCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogVXNlIHNpZ25pZmljYW50X2JpdHMuCisJQ2FsbCBleHBhbmRfY29tcG91bmRfb3BlcmF0aW9uIHdoZW4gcmVxdWlyZWQuCisJSGFuZGxlIEFORCBvZiBhbiBBU0hJRlRSVCB3aXRoIGEgY29uc3RhbnQuCisJRG9uJ3QgbWFrZSBaRVJPX3tFWFRFTkQsRVhUUkFDVH0gaGVyZS4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBOZXcgZnVuY3Rpb24gdG8gc2ltcGxpZnkgYSBzaGlmdCBvZiBhbgorCWFuIG9iamVjdCBieSBhIGNvbnN0YW50IGludGVnZXIuCisJKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogV2hlbiBhcHBsaWVkIHRvIGEgY29tcGFyaXNvbiBvcGVyYXRvciwKKwlyZXR1cm4gY29tcGFyaXNvbiBvcGVyYXRvciBpbiByZXF1ZXN0ZWQgbW9kZS4KKwkoc2ltcGxpZnlfc2V0X2NjMF9hbmQpOiBEZWxldGVkLgorCSh0cnlfY29tYmluZSk6IE5vIGxvbmdlciBjYWxsIHNpbXBsaWZ5X3NldF9jYzBfYW5kLgorCShyZXZlcnNpYmxlX2NvbXBhcmlzb25fcCk6IE5ldyBmdW5jdGlvbi4KKwkoc2ltcGxpZnlfY29tcGFyaXNvbik6IE5ldyBmdW5jdGlvbi4KKworCShjb21iaW5lX2luc3RydWN0aW9ucyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG5ldyB2YXJzCisJcmVnX2xhc3Rfc2V0X3t0YWJsZV90aWNrLGxhYmVsLGludmFsaWR9LgorCSh1cGRhdGVfdGFibGVfdGljaywgcmVjb3JkX3ZhbHVlX2Zvcl9yZWcpOiBOZXcgZnVuY3Rpb25zLgorCShnZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSwgZ2V0X2xhc3RfdmFsdWUpOiBOZXcgZnVuY3Rpb25zLgorCShyZWNvcmRfZGVhZF9hbmRfc2V0X3JlZ3MpOiBDYWxsIHJlY29yZF92YWx1ZV9mb3JfcmVnLgorCisJKGZpbmRfc3BsaXRfcG9pbnQpOiBOZXcgZnVuY3Rpb24gdG8gbG9jYXRlIGEgcGxhY2Ugd2hlcmUgYSBjb21wbGV4CisJcGF0dGVybiBjYW4gYmUgc3BsaXQgaW50byB0d28gaW5zbnMuCisJKHRyeV9jb21iaW5lKTogSWYgd2UgYXJlIGNvbWJpbmluZyB0aHJlZSBpbnNucyBhbmQgY2FuJ3QgcmVjb2duaXplIHRoZQorCW5ldyBwYXR0ZXJuLCB0cnkgdG8gc3BsaXQgaXQuCisJQ2FsbCBuZXcgZnVuY3Rpb25zIGJlbG93IHRvIHVwZGF0ZSBpbnNuIHN0YXR1cy4KKwlSZXR1cm4gaW5zbiBhdCB3aGljaCB0byBjb250aW51ZSBzY2FuLgorCShhZGphY2VudF9pbnNuc19wLCBhZGRfbGlua3MsIHJlbW92ZV9saW5rcyk6IERlbGV0ZWQuCisJKGFkZF9pbmNzLCBhZGRfbm9fY29uZmxpY3RzLCByZW1vdmVfZGVhdGgsIG1vdmVfZGVhdGhzXzIpOiBEZWxldGVkLgorCShtb3ZlX2RlYXRocyk6IEdlbmVyYWxpemUgdG8gaW5jbHVkZSBtb3ZlbWVudHMgaW4gYm90aCBkaXJlY3Rpb25zLgorCVVwZGF0ZSByZWdfZmlyc3RfdXNlIHdoZW4gd2UgbWFrZSBhbiBlYXJsaWVyIHVzZS4KKwkoZGlzdHJpYnV0ZV9ub3RlcywgZGlzdHJpYnV0ZV9saW5rcyk6IE5ldyBmdW5jdGlvbnMuCisJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogTm8gbG9uZ2VyIG5lZWQgY2hlY2sgZm9yIExPR19MSU5LUworCXBvaW50aW5nIGF0IGEgTk9URS4KKwlSZXNjYW4gZnJvbSBsb2NhdGlvbiBpbmRpY2F0ZWQgYnkgdHJ5X2NvbWJpbmUsIGlmIGFueSwgd2hlbgorCWNvbWJpbmluZyB0aHJlZSBpbnNucy4KKwlVcGRhdGUgcmVnX2ZpcnN0X3VzZSBpZiB3ZSBtb3ZlZCBhIHVzZSB0byBhIGxhdGVyIGluc24uCisKKwkodHJ5X2Rpc3RyaWIpOiBEZWxldGVkLgorCShhcHBseV9kaXN0cmlidXRpdmVfbGF3KTogTmV3IGZ1bmN0aW9uLCBjb250YWlucyBjb2RlIGZyb20gb2xkCisJdHJ5X2Rpc3RyaWIuCisJKHN1YnN0KTogQ2FsbCBhcHBseV9kaXN0cmlidXRpdmVfbGF3IGZvciBhcHBsaWNhYmxlIG9wZXJhdGlvbnMuCisJVHJ5IHRvIGFwcGx5IGFzc29jaWF0aXZlIGxhdy4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBObyBsb25nZXIgY2FsbCB0cnlfZGlzdHJpYi4KKwkoZHVtcF9jb21iaW5lX3N0YXRzLCBkdW1wX2NvbWJpbmVfdG90YWxfc3RhdHMsIGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKToKKwlObyBsb25nZXIgY291bnQgZGlzdHJpYnV0ZXIgc3RhdGlzdGljcy4KKworCShjYW5fY29tYmluZV9wKTogTmV3IGZ1bmN0aW9uIHRvIHNlZSBpZiBJMiBvciBJMSBpcyBjb21iaW5hYmxlLgorCUJlIG1vcmUgcHJlY2lzZSBhYm91dCB3aGVuIHdlIGNhbiBjb21iaW5lIGluc25zIGludm9sdmluZyBjYzAuCisJRWxpbWluYXRlIC1mY29tYmluZS1yZWdzOyBhbHdheXMgZG8gaXQuCisJKHRyeV9jb21iaW5lKTogCisJQ2FsbCBjYW5fY29tYmluZV9wIHRvIHZhbGlkYXRlIEkyIGFuZCBJMS4KKwlJZiAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zLCB0cnkgdG8gc2ltcGxpZnkgSTEgb3IgSTIuCisJSGFuZGxlIChzZXQgKGZvbykgKGNvbnN0X2ludCAwKSkgZm9sbG93ZWQgYnkgYSBTVFJJQ1RfTE9XX1BBUlQKKwlhc3NpZ25tZW50IHRvIEZPTyBhcyBhIFpFUk9fRVhURU5ELgorCShzdWJzdCk6IFF1aXQgdmVyeSBlYXJseSBpZiBYIGlzIGEgcm9vdCBub2RlIChsaWtlIFBDMCkuCisJUmVtb3ZlIG1vc3QgY2Fub25pY2FsaXphdGlvbnMgZG9uZSBpbiBmaXJzdCBzd2l0Y2ggc3RhdGVtZW50OyBub3cKKwlkb25lIGVsc2V3aGVyZS4KKwlDYWxsIHNpbXBsaWZ5X3t1bmFyeSxiaW5hcnksdGVybmFyeX1fb3BlcmF0aW9uLgorCUFkZCBjYXNlcyBpbnZvbHZpbmcgbG9naWNhbCBhbmQgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGFwcGxpZWQKKwl0byBjb21wYXJpc29uIG9wZXJhdG9ycyBvciB2YWx1ZXMgd2l0aCBvbmx5IG9uZSBzaWduaWZpY2FudCBiaXQuCisJQWRkIG1vcmUgY2FzZXMgaW52b2x2aW5nIEFCUyBzaW5jZSBjb21wYXJpc29ucyByZXR1cm5pbmcgdmFsdWVzCisJY2FuIGJlIGRvbmUgd2l0aCBBQlMuCisJQXZvaWQgZ2VuZXJhdGluZyAoY29uc3QgKGNvbnN0IC4uLikgLi4uKS4KKwlDb252ZXJ0ICh4bXVsdCAoeF9leHRlbmQgLi4uKSAuLi4pIHRvIGEgd2lkZW5pbmcgbXVsdGlwbHkuCisKKwkoZ2VuX3J0eF9jb21iaW5lKTogTmV3IGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYW4gb3BlcmF0aW9uIGluCisJdW5kb2J1Zi4gIE1hbnkgY2FsbGVycyB0byBnZW5fcnR4IGNoYW5nZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorCShjb3B5X3N1YnN0aXR1dGlvbnMpOiBPbmx5IGNvcHkgYSBzdWJzdGl0dXRpb24gaWYgaXQgd2FzIHBsYWNlZCBpbnRvCisJbW9yZSB0aGFuIG9uZSBsb2NhdGlvbi4KKworU3VuIE1hciAxNyAxNzoyNjowOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAoc2hvcnRlbl9jb21wYXJlKTogV2FybiBmb3IgKHVuc2lnbmVkIGNoYXIpID09IC0xLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBTZXQgZGVidWdfaW5zbiBiZWZvcmUgZmlyc3Qgb3V0cHV0LgorCShvdXRwdXRfYXNtX2luc24pOiBDbGVhciBpdCBoZXJlLgorCisJKiBleHByLmMgKGRvX2p1bXApOiBEb24ndCB0cnkgdG8gc3BsaXQgbm9uLWludGVnZXJzLgorCisJKiBmaXhpbmNsdWRlcyAoZG5ldGRiLmgpOiBGaXggbWlzc2luZyBzZW1pIGluIG5vZGVlbnQuCisJKHJ1c2Vycy5oKTogQ29kZSB0byBmaXggdGhpcyBmaWxlIHdhcyBkdXBsaWNhdGVkLgorCisJKiB0b3BsZXYuYyAoZGVjbF9wcmludGFibGVfbmFtZSk6IE5vdyBnaXZlbiBhbiBleHRyYSBhcmcuCisJKGRlY2xfbmFtZSk6IEFjY2VwdCB0aGF0IGFyZy4KKwkoYW5ub3VuY2VfZnVuY3Rpb24sIHJlcG9ydF9lcnJvcl9mdW5jdGlvbik6IFBhc3MgdGhhdCBhcmcuCisJKGVycm9yX3dpdGhfZGVjbCwgd2FybmluZ193aXRoX2RlY2wpOiBMaWtld2lzZS4KKworCSogZGJ4b3V0LmMgKGdldHdkKSBbVVNHXTogRGVmaW5lIGFzIG1hY3JvLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbmRpY2F0ZSBieXRlIGFsaWdubWVudCBmb3Igdm9pZC4KKworCSogZXhwci5jIChkb19qdW1wX2J5X3BhcnRzXyopOiBDb21wdXRlIG53b3JkcyBmcm9tIGNvbXBhcmUgYXJnLgorCVBhc3MgMCBhcyBzaXplIGFuZCBhbGlnbm1lbnQgdG8gY29tcGFyZV9mcm9tX3J0eC4KKwkoZG9fanVtcF9ieV9wYXJ0c19ncmVhdGVyKTogQ29tcGFyZSBoaWdoIHdvcmQgZmlyc3QuCisJSGFuZGxlIHVuc2lnbmVkIGNvbXBhcmVzIHByb3Blcmx5LgorCUZpeCBsb2dpYyBmb3IgZHJvcHBpbmcgdGhyb3VnaCB2ZXJzdXMgZmFpbGluZy4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IENoYW5nZSBjbXBzdHJzaTQgdG8gY21wc3Ryc2kgYXMgaW4gb3B0YWJzLmMuCisKKwkqIGMtY29tbW9uLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6IEhhbmRsZSBwdHIgdnMgaW50IGluIE1JTlVTX0VYUFIuCisKK1N1biBNYXIgMTcgMTU6NDM6NDggMTk5MSAgTWF0dGhldyBTZWxmCShtc2VsZkBuZXh0LmNvbSkKKworCUFsbG93IG11bHRpcGxlIHJldHVybiBwb2ludHMgaW4gc29tZSBmcmFtbGVzcyBmdW5jdGlvbnMgKDIvMi85MSk6CisKKwkqIG02OGsubWQgKHJldHVybik6ICBOZXcgaW5zbiBwYXR0ZXJuIGZvciBydHMgKGFuZCBydGQpLgorCisJKiB0bS1tNjhrLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSwKKwlVU0VfUkVUVVJOX0lOU04pOglDYWxsIG5ldyBmdW5jdGlvbnMgdG8gYXZvaWQgZ2lhbnQgbWFjcm9zCisJd2hpY2ggYXJlIGhhcmQgdG8gZWRpdC4KKworCSogb3V0LW02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLAorCW91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6ICBOZXcgZnVuY3Rpb25zLgorCisJKiBvdXQtbTY4ay5jICh1c2VfcmV0dXJuX2luc24pOgkgTmV3IGZ1bmN0aW9uLglEZXRlcm1pbmVzCisJd2hldGhlciB0aGUgZXBpbG9ndWUgd2lsbCBjb25zaXN0IG9mIGEgc2luZ2xlIGluc24uICBTb21lCisJY29kZSB3YXMgZHVwbGljYXRlZCBmcm9tIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZS4gIFRoZXJlCisJc2hvdWxkIGJlIHByb2JhYmx5IGEgbmV3IGxheW91dCByb3V0aW5lIHRvIGRvIHRoaXMgY29tbW9uCisJd29yay4gIEFsc28gI2luY2x1ZGUgImZsYWdzLmgiLgorCisJKm91dC1tNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6CSBEb24ndCBvdXRwdXQKKwlhbnl0aGluZyBpZiB0aGUgZXBpbG9ndWUgd2FzIG91dHB1dCBhcyBSVEwuICBXZSBkZXRlY3QgdGhpcworCWJ5IHRoZSBiYXJyaWVyIGluc24gd2hpY2ggaXMgYWx3YXlzIHBsYWNlZCBhZnRlciBhIHJldHVybgorCWluc24uICBUaGlzIG1hY2hpbmUtaW5kZXBlbmRlbnQgdGVzdCBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQKKwliYWNrIGludG8gZmluYWwuYyBhbmQgcmVtb3ZlZCBmcm9tIG91dC1zcGFyYy5jIGFuZCBvdXQtbTg4ay5jLgorCisJKiBvdXQtbmV4dC5jOiAgRG9uJ3QgI2luY2x1ZGUgImZsYWdzLmgiLgorCitTdW4gTWFyIDE3IDAwOjA3OjIwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmVtaXQuYyAoZ2VuX2V4cCk6IFN1cHBvcnQgY29uc3RtMV9ydHguCisJKiBnZW5yZWNvZy5jIChhZGRfdG9fc2VxdWVuY2UpOiBMaWtld2lzZS4KKworU2F0IE1hciAxNiAxNzoyNjo1OCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1sYW5nLmMgKG1heWJlX2J1aWxkaW5nX29iamNfbWVzc2FnZV9leHByKTogTmV3IGR1bW15IGZ1bmN0aW9uLgorCSogYy10eXBlY2suYyAod2Fybl9mb3JfYXNzaWdubWVudCk6IFVzZSBpdC4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFdyaXRlIG91dCBhbGwgc3RhdGljIGNvbnN0cyB0aGF0IGFyZSB1c2VkLgorCitTYXQgTWFyIDE2IDE0OjA4OjEyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBEb24ndCByZXBsYWNlIHJlZ2lzdGVycyBpbiBVU0Ugb3IKKwlDTE9CQkVSIGV4cHJlc3Npb25zLgorCisJKiBnZW5hdHRydGFiLmMgKG1haW4pOiBQcm9wZXJseSBzZXQgdXAgYSBkZWZhdWx0IERFRklORV9BU01fQVRUUklCVVRFUy4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogQ29ycmVjdGx5IGNoZWNrIGZvciBhIGhhc2ggdGFibGUgZWxlbWVudCBlcXVhbCB0bworCXRoZSBkZXN0aW5hdGlvbiBvZiBhIFNFVC4KKworRnJpIE1hciAxNSAxNjo1NTozMiAxOTkxICBSb24gR3VpbG1ldHRlIChyZmcgYXQgcGVwcGVyLm5jZC5jb20pCisKKwkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkZWQgZHdhcmZvdXQubyB0byBsaXN0IG9mIHRoaW5ncyB0byBiZQorCWJ1aWx0LgorCisJKiBNYWtlZmlsZS5pbiAoZHdhcmZvdXQubyk6IEFkZGVkIHRoaXMgcnVsZS4KKworCSogZHdhcmZvdXQuYyAoRlRfKl9sb25nX2xvbmcpOiBBZGRlZCBkZWZhdWx0IGRlZmluaXRpb25zIGZvciBhbGwgb2YKKwl0aGVzZSBleHRlbmRlZCBmdW5kYW1lbnRhbCB0eXBlIGNvZGVzIHRvIGNhdGVyIHRvIHBsYWluIHZhbmlsbGEKKwk8ZHdhcmYuaD4gZmlsZSB3aGljaCBkbyBub3QgZGVmaW5lIGNvZGVzIGZvciB0aGVzZSBmdW5kYW1lbnRhbCB0eXBlcy4KKworCSogZHdhcmZvdXQuYyAoVFJFRV9VSUQpOiBBZGRlZCBhIGxvY2FsIGRlZmluaXRpb24gb2YgdGhpcyBtYWNybworCWJlY2F1c2UgZ2NjIHYyIG5vIGxvbmdlciBwcm92aWRlcyBhIGRlZmluaXRpb24gZm9yIGl0IGFuZCBiZWNhdXNlCisJZHdhcmZvdXQuYyBuZWVkcyBzb21lIHdheSBvZiBnZXR0aW5nIGEgdW5pcXVlIG51bWVyaWMgY29kZSBmb3IgZWFjaAorCXR5cGUuCisKKwkqIGR3YXJmb3V0LmMgKENMQVNTVFlQRV8qKTogQWRkZWQgc29tZSBsb2NhbCBkZWZhdWx0IGRlZmluaXRpb25zCisJZm9yIHRoZXNlIG1hY3JvcyBpbiBvcmRlciB0byBnZXQgYXJvdW5kIHRoZSBmYWN0IHRoYXQgdGhleSBhcmUKKwljdXJyZW50bHkgZGVmaW5lZCBvbmx5IGluIGNwbHVzLXRyZWUuaCAoYW5kIHJtcyB3YW50cyBkd2FyZm91dC5jCisJdG8gYmUgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQpLgorCisJKiBkd2FyZm91dC5jIChCSVRGSUVMRF9PRkZTRVRfKik6IEFkZGVkIHNvbWUgbG9jYWwgbWFjcm9zIHRvIGhlbHAKKwljb21wdXRlIHZhcmlvdXMgcXVhbnRpdGllcyByZWxhdGluZyB0byBiaXRmaWVsZCBvZmZzZXRzLgorCisJKiBkd2FyZm91dC5jIChsb2NhdGlvbl9hdHRyaWJ1dGUpOiBDaGFuZ2VkIGNvZGUgd2hpY2ggb3V0cHV0cyBsb2NhdGlvbgorCWF0dHJpYnV0ZXMgZm9yIGJpdGZpZWxkIHNvIHRoYXQgaXQgdXNlcyBnY2MyIG1hY3Jvcy4KKworCSogZHdhcmZvdXQuYyAoYnl0ZV9zaXplX2F0dHJpYnV0ZSk6IENoYW5nZWQgY29kZSB3aGljaCBvdXRwdXRzIHRoZQorCWJ5dGVfc2l6ZSBhdHRyaWJ1dGUgc28gdGhhdCBpdCBubyBsb25nZXIgdXNlcyB0aGUgb2Jzb2xldGUKKwlERUNMX1NJWkVfVU5JVCBtYWNybyAoZnJvbSBnY2MxKS4KKworCSogZHdhcmZvdXQuYzogIFJlcGxhY2VkIGFsbCB1c2VzIG9mIHRoZSBvYnNvbGV0ZSBtYWNybyBUUkVFX1BBQ0tFRAorCXRvIHVzZXMgb2YgdGhlIG5ldyBnY2MyIG1hY3JvIERFQ0xfQklUX0ZJRUxELgorCisJKiBkd2FyZm91dC5jIChkZXJpdl9saXN0X2F0dHJpYnV0ZSk6IEZpeGVkIHR5cG8gImRlY2wiID0+ICJ0eXBlIi4KKworCSogZHdhcmZvdXQuYyAob3V0cHV0X2RpZXNfZm9yX3R5cGUpOiBSZXBsYWNlZCBib2d1cyByZWZlcmVuY2UgdG8gdGhlCisJbm9uLWV4aXN0YW50IHJvdXRpbmUgIm91dHB1dF9tZW1iZXJfZnVuY3Rpb25fdHlwZV9kaWUiIHdpdGggYSBwcm9wZXIKKwlyZWZlcmVuY2UgdG8gdGhlIHJvdXRpbmUgIm91dHB1dF9zdWJyb3V0aW5lX3R5cGVfZGllIi4KKworCSogZHdhcmZvdXQuYyAob3V0cHV0X3N5bWJvbHNfZm9yX2Jsb2NrKTogRml4ZWQgY2FsbGluZyBlcnJvciB3aGljaAorCXdhcyBpbnRyb2R1Y2VkIGJ5IHJtcy4KKworCSogZHdhcmZvdXQuYzogUmVwbGFjZWQgYWxsIHVzZXMgb2YgdGhlIG9ic29sZXRlIG1hY3JvIFNUTVRfU1VCQkxPQ0tTCisJd2l0aCB1c2VzIG9mIHRoZSBuZXcgZ2NjMiBtYWNybyBCTE9DS19TVUJCTE9DS1MuCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9zeW1ib2wpOiBSZW1vdmVkIHJlZmVyZW5jZSB0byBUQUdfREVDTC4gIFRoZQorCXVzZSBvZiBUQUdfREVDTHMgd2FzIGFuIGVhcmx5IGlkZWEgd2hpY2ggZGlkbid0IHdvcmsgb3V0LgorCisJKiBkd2FyZm91dC5jOiAoZHdhcmZvdXRfaW5pdCk6IENoYW5nZWQgbmFtZSBmcm9tIGR3YXJmb3V0X2luaXRpYWxpemUKKwliZWNhdXNlIHJtcyBmYWlsZWQgdG8gZG8gc28gd2hlbiBoZSBjaGFuZ2VkIHRoZSBuYW1lIGluIHRoZSBjYWxsLgorCitGcmkgTWFyIDE1IDE3OjIyOjE0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBBZGQgYCVzJyB0byBzb21lIGVycm9yIG1lc3NhZ2VzLgorCisJKiBzcGFyYy5tZDogQWRkIGV4dHJhIGFzc2VtYmxlciBhbHRlcm5hdGl2ZSBpbiBsYXN0IGNoYW5nZS4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiwgc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6CisJUmVtb3ZlIGVycm9yIGNoZWNrcyB0aGF0IHJlamVjdGVkIFNGbW9kZS4KKworCSogZXhwci5jIChnZXRfcG9pbnRlcl9hbGlnbm1lbnQpOiBEb24ndCBsb3NlIG9uIGNhc3RzIGZyb20gaW50ZWdlcgorCXRvIHBvaW50ZXIuCisKK0ZyaSBNYXIgMTUgMDc6NTc6MTkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogRml4IHR5cG8gaW4gcHJldmlvdXMgY2hhbmdlLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfe3VuYXJ5LGJpbmFyeX1fb3BlcmF0aW9uKTogRml4IHVzYWdlIG9mCisJUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRSBpbiByZWNlbnQgY2hhbmdlLgorCitUaHUgTWFyIDE0IDE4OjU2OjUzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBXYXJuIGlmIG1pc21hdGNoIHdpdGggaW1wbGljaXQgZGVjbC4KKworCSogZmluYWwuYyAoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBIYW5kbGUgTk9OX1NBVklOR19TRVRKTVAuCisJSW5jbHVkZSBoYXJkLXJlZy1zZXQuaC4KKwkqIGZ1bmN0aW9uLmMgKHNldGptcF9wcm90ZWN0LCBzZXRqbXBfcHJvdGVjdF9hcmdzKTogTGlrZXdpc2UuCisJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBDYWxsIHRob3NlIGlmIE5PTl9TQVZJTkdfU0VUSk1QLgorCitUaHUgTWFyIDE0IDE0OjQwOjQ1IDE5OTEgIEphbWVzIFdpbHNvbgkod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIHJlbG9hZDEuYyAob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogV2hlbiBSRUdfQUxMT0NfT1JERVIgaXMgZGVmaW5lZCwKKwl1c2UgdGhhdCBkZWZpbml0aW9uIG9ubHkgdG8gb3JkZXIgcmVncywgZG8gbm90IHRyeSB0byBwdXQgY2FsbAorCXVzZWQgcmVncyBmaXJzdC4gIFRoaXMgZWxpbWluYXRlcyB0aGUgYmVuZWZpdHMgb2YgZGVmaW5pbmcgdGhlIG1hY3JvCisJaW4gdGhlIGZpcnN0IHBsYWNlLgorCisJKiByZWFsLmg6IE5ldyBtYWNyb3MgZm9yIHJlYWwgYXJpdGhtZXRpYywgUkVBTF9WQUxVRV9GSVhfVFJVTkNBVEUsCisJUkVBTF9WQUxVRV9VTlNJR05FRF9GSVhfVFJVTkNBVEUsIFJFQUxfVkFMVUVfRklYLAorCVJFQUxfVkFMVUVfVU5TSUdORURfRklYLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogQWRkZWQgY29kZSB0byBzaW1wbGlmeSBmbG9hdGluZworCXBvaW50IHJ0eC4gIE5vdyBzaW1wbGlmaWVzIFVOU0lHTkVEX0ZMT0FULCBBQlMsIEZMT0FUX1RSVU5DQVRFLAorCUZMT0FUX0VYVEVORCwgRklYLCBhbmQgVU5TSUdORURfRklYLiAgQWRkIGFib3J0cyB0byBkZWZhdWx0IGNhc2UKKwlvZiBzd2l0Y2hlcy4KKwkoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6IEFkZGVkIGNvZGUgdG8gc2ltcGxpZnkgZmxvYXRpbmcgcG9pbnQKKwlydHguICBOb3cgc2ltcGxpZmllcyBQTFVTLCBNSU5VUywgTVVMVCwgYW5kIERJVi4gIEFkZCBhYm9ydHMgdG8KKwlkZWZhdWx0IGNhc2Ugb2Ygc3dpdGNoZXMuCisJKCopOiBBbHdheXMgdXNlIFJFQUxfVkFMVUVfVFlQRSBhbmQgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRQorCXdoZW4gZXh0cmFjdGluZyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBmcm9tIGEgQ09OU1RfRE9VQkxFLgorCitUaHUgTWFyIDE0IDE0OjQwOjQ1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGdldF9wb2ludGVyX2FsaWdubWVudCk6IFVwZGF0ZSBBTElHTiBmb3IgTk9QX0VYUFIuCisKKwkqIGMtZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uKTogTmV3IGFyZyBMSUJSQVJZX05BTUUuCisJKGluaXRpYWxpemVfZGVjbF9wcm9jZXNzaW5nKTogUGFzcyB0aGF0IGFyZ3VtZW50LgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgQ19UWVBFX0ZJRUxEU19WT0xBVElMRS4KKwkoZmluaXNoX3N0cnVjdCk6IExpa2V3aXNlLgorCSogYy10cmVlLmggKENfVFlQRV9GSUVMRFNfVk9MQVRJTEUpOiBEZWZpbmUgaXQuCisKKwkqIE1ha2VmaWxlLmluIChnbnVsaWIxLCBnbnVsaWIyLnBvcnRhYmxlKTogVGVzdCAkJD8gYWZ0ZXIgY29tcGlsYXRpb24uCisKKwkqIGMtdHlwZWNrLmMgKGNoZWNrX2Zvcm1hdCk6IERpc2NhcmQgbXVsdGlwbGUgTk9QX0VYUFIgbGV2ZWxzLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfbWVzc2FnZV9leHByLCBidWlsZF9zZWxlY3Rvcl9leHByLAorCWJ1aWxkX2VuY29kZV9leHByLCBnZXRfY2xhc3NfaXZhcnMsIHN0YXJ0X2NsYXNzKTogIEZpbmRpbmcKKwlPYmplY3RpdmUtQyBjb2RlIGluIGMgc291cmNlIGZpbGVzIGlzIG5vdyBhIGZhdGFsIGVycm9yLgorCShUaGV5IHNob3VsZCByZWNvbXBpbGUgd2l0aCAtbGFuZy1vYmpjLikKKworCSogb2JqYy1hY3Rpb25zLmMgKGdlbl9tZXRob2RfZGVjbCk6ICBEb24ndCBjcmFzaCBmb3Igc3ludGF4CisJZXJyb3IgaW4gbWV0aG9kIGRlY2xhcmF0aW9uOiAtYmFyOiB4LCB5CisJKGVuY29kZV9hcnJheSk6CSBUcmVhdCBhbiB1bmRpbWVuc2lvbmVkIGFycmF5IHRoZSBzYW1lIGFzIGEgcG9pbnRlci4KKworVGh1IE1hciAxNCAwNzozOTozMCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBQcmV2aW91cyBmaXggaGFkIGVmZmVjdCBvZiAKKwlkaXNhYmxpbmcgdGhpcyBmdW5jdGlvbi4gIFJld29yayB0byB0YWtlIGludG8gYWNjb3VudCB0aGluZ3MKKwluZWVkZWQsIGluc3RlYWQgb2Ygc2V0LgkgVGhpcyBpcyBzdGlsbCBzb21ld2hhdCBvZiBhIGtsdWRnZS4KKworCSogcmVjb2cuYyAoYXBwbHlfY2hhbmdlX2dyb3VwKTogQW4gaW5zbiBjb25zaXN0aW5nIG9mIGp1c3QgYSBVU0UKKwlvciBDTE9CQkVSIGlzIGFsd2F5cyB2YWxpZCwgYnV0IHJlY29nX21lbW9pemVkIHJldHVybnMgYSAtMSBmb3IgaXQuCisKKwkqIGdlbmF0dHJ0YWIuYzogQ291bnQgYWxsIGRlZmluaXRpb25zIGFzIHdlbGwgYXMgY291bnRpbmcgaW5zbnM7IHVzZQorCWRlZmluaXRpb24gIyBpbiBlcnJvciBtZXNzYWdlLgorCU1vc3QgZnVuY3Rpb25zIHRoYXQgYWNjZXB0ZWQgaW5zbl9jb2RlIG5vdyBhY2NlcHQgaW5zbl9pbmRleCBhcyB3ZWxsCisJYW5kIHNpbWlsYXJseSBmb3Igc3RydWN0dXJlcyBjb250YWluaW5nIGluc25fY29kZS4KKworCSogcmVvcmcuYyAodHJ5X21lcmdlX2RlbGF5X2luc25zKTogSWYgbm90IGFuIGFubnVsbGluZyBicmFuY2gsIHRha2UgCisJaW50byBhY2NvdW50IHRoaW5ncyBzZXQgaW4gdGhlIGRlbGF5IHNsb3QuICBUaGlzIHByZXZlbnRzIG1lcmdpbmcKKwl0d28gaW5jcmVtZW50cyBpbnRvIG9uZS4KKworCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogRml4IHR5cG8gaW4gcHJpbnRpbmcgc3RhdGlzdGljcy4KKworVGh1IE1hciAxNCAwMjoxMTo1NiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ2VuZW1pdC5jLCBnZW5vdXRwdXQuYywgZ2VucmVjb2cuYzogQ291bnQgYWxsIGRlZmluaXRpb25zCisJYXMgd2VsbCBhcyBjb3VudGluZyBpbnNuczsgdXNlICMgb2YgZGVmaW5pdGlvbiBpbiBlcnJvciBtZXNzYWdlcy4KKworCSogdG9wbGV2LmMgKHBpcGVfY2xvc2VkLCBmbG9hdF9zaWduYWwpOiBHaXZlIGl0IGFuIGV4cGxpY2l0IGFyZy4KKwkqIGNwbHVzLWRlY2wuYyAoc2lnc2Vndik6IExpa2V3aXNlLgorCSogY2NjcC5jIChwaXBlX2Nsb3NlZCk6IExpa2V3aXNlLgorCisJKiBjY2NwLmM6IERlbGV0ZSB0cmlncmFwaCBmcm9tIGNvbW1lbnQuCisKKwkqIE1ha2VmaWxlLmluIChyZWFsY2xlYW4pOiBEZWxldGUgb2JqYyBwYXJzZXIgZmlsZXMuCisKKwkqIGFzc2VydC5oIChfX2Fzc2VydCBmb3IgX19HTlVDX18pOiBEb24ndCByZXR1cm4gdmFsdWUgb2YgYWJvcnQuCisKK1dlZCBNYXIgMTMgMTY6MTI6NTQgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBjaHVyY2h5LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZG9fanVtcF9ieV9wYXJ0c19ncmVhdGVyKTogRG9uJ3QgbG9zZSBpZiBsYWJlbHMgYXJlIDAuCisKKwkqIGNwbHVzLWVkc2VsLmM6IE5ldyBuYW1lIGZvciBjcGx1cy1jYWRpbGxhYy5jLgorCSogTWFrZWZpbGUuaW4gKGNwbHVzLWVkc2VsLm8pOiBGaXggdGhlIGNvbXBpbGF0aW9uIHJ1bGUuCisKK1dlZCBNYXIgMTMgMDY6NDc6NTMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVvcmcuYyAobWFya19zZXRfcmVzb3VyY2VzKTogQW55IHJlZ2lzdGVycyBtZW50aW9uZWQgaW4gUkVHX0lOQworCW5vdGVzIGFyZSBzZXQgYnkgYW4gSU5TTi4KKworCSogZmxhZ3MuaCAoZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9ucyk6IEFkZCBuZXcgZmxhZy4KKwkqIHRvcGxldi5jOiBTdXBwb3J0IC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgYW5kIHR1cm4gb24gZm9yIC1PMi4KKwkqIHN0bXQuYyAocHJlc2VydmVfc3ViZXhwcmVzc2lvbnNfcCk6IFVzZSBmbGFnX2V4cGVuc2l2ZV9vcHRpbWl6YXRpb25zCisJaW5zdGVhZCBvZiB0ZXN0aW5nIGZvciAtTzIgZXhwbGljaXRseS4KKworCSogZXhwci5oIChvcGVyYW5kX3N1YndvcmQpOiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbi4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IEhhbmRsZSBJTlNOX0xJU1QgKGZvdW5kIGluIFJFR19OT1RFUykuCisKKwkqIHRtLWkzODYuaCAoUkVUVVJOX1BPUFNfQVJHUyk6IERvbid0IGNhbGwgYWdncmVnYXRlX3R5cGVfcCB3aXRoIAorCUlERU5USUZJRVJfTk9ERS4KKworV2VkIE1hciAxMyAwMDowMDoyOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBJZiB3b3Jkd2lzZSwgbWFrZSB0YXJnZXQgbm9uMC4KKworVHVlIE1hciAxMiAxNToyNDowOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IFF1b3RlIHRoZSAjIGluIGFuIGVjaG8uCisJKiBmaXhpbmNsdWRlczogRml4IHR5cG9zIGhhbmRsaW5nIHNpemVfdCBhbmQgcHRyZGlmZl90LgorCSogZml4aW5jbHVkZXMgKHN5cy9maWxlLmgpOiBGaXggaW5jb3JyZWN0IGNvbmRpdGlvbmFsIGluIFVsdHJpeC4KKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEFsbG93IE5PTl9MVkFMVUVfRVhQUi4KKwlSZXR1cm4gYSB0cmVlIHRoYXQgaW5kaWNhdGVzIHRoZSByZWxvY2F0aW9uLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFJlcmVjb2duaXplIGp1bXAgaW5zbiBhZnRlciBpbnZlcnRpbmcgaXQuCisKKwkqIGV4cHIuYyAoZG9fanVtcCk6CisJVXNlIGNhbl9jb21wYXJlX3Agb24gdGhlIG9wZXJhbmQgbW9kZSwgbm90IHRoZSBjb21wYXJpc29uJ3MgbW9kZS4KKworCSogcmVsb2FkLmMgKHN1YnN0X3JlbG9hZHMpOiBGaXggZHVtYiBlcnJvciBpbiBsYXN0IGNoYW5nZS4KKworCSogZXhwci5jIChkb19qdW1wX2J5X3BhcnRzX2VxdWFsaXR5Kik6IEZpeCBsb2dpYyBlcnJvcnMuCisKK01vbiBNYXIgMTEgMTQ6Mjc6NDAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChzdWJzdF9yZWxvYWRzKTogRG9uJ3QgbWFrZSBzdWJyZWdzLCBqdXN0IG5ldyByZWdzLgorCisJKiBleHByLmMgKGRvX2p1bXBfYnlfcGFydHNfZXF1YWxpdHksIGRvX2p1bXBfYnlfcGFydHNfZ3JlYXRlcik6CisJKGRvX2p1bXBfZm9yX2NvbXBhcmUsIGRvX2p1bXBfYnlfcGFydHNfZXF1YWxpdHlfcnR4KTogTmV3IGZ1bmN0aW9ucy4KKwkoZG9fanVtcCk6IFVzZSB0aGVtIHRvIGhhbmRsZSB3aWRlIHZhbHVlcy4KKwkqIG9wdGFicy5jIChjYW5fY29tcGFyZV9wKTogTmV3IGZ1bmN0aW9uLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRG9uJ3QgbWFrZSBzdWJyZWcgYXJvdW5kIFJFTE9BRFJFRzsKKwlqdXN0IG1ha2UgYSBuZXcgUkVHLgorCisJKiBjc2UuYywgdmFyYXNtLmM6IEZpeCB0eXBvcy4KKworCSogc3BhcmMubWQgKG1vdmUgU0kgdG8gcmVnX29yX25vbnN5bWJfbWVtX29wZXJhbmQpOgorCVNlcGFyYXRlIHRoaXJkIGFsdGVybmF0aXZlIGludG8gdHdvIGFsdGVybmF0aXZlcy4KKwkqIHRtLXNwYXJjLmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBSZXR1cm4gQ0xBU1MgYXMgZ2l2ZW4uCisKKwkqIG9wdGFicy5jIChvcGVyYW5kX3N1YndvcmQpOiBGaXggdHlwby4KKworCSogbG9uZ2xvbmcuaCAoX191bXVsc2lkaTMpOiBSZXR1cm4gLmxsIGZpZWxkLgorCitNb24gTWFyIDExIDExOjQzOjIxIDE5OTEgIEplZmZyZXkgQS4gTGF3ICAobGF3IGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogbWFrZS1ocDlrMmJzZDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGhwOWsyMDAtYnNkKTogVXNlIGl0LgorCitNb24gTWFyIDExIDA3OjA4OjEyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBDbGVhciBUUkVFX0lOVF9DU1RfSElHSCBvbmNlIGluc3RlYWQKKwlvZiBjbGVhcmluZyBUUkVFX0lOVF9DU1RfTE9XIHR3aWNlLgorCitNb24gTWFyIDExIDA2OjUxOjUyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBJZiB3ZSBhcmUgZ29pbmcgdG8gdXNlIGEgbGF0ZXIKKwlyZWdpc3RlciB0byBhdXRvLWluY3JlbWVudCwgbWFrZSBzdXJlIGl0IHJlYWxseSBpcyBhIFJFRy4KKwlJbiB0aGUgY2FzZSBhYm92ZSwgY291bnQgYW55IGNhbGxzIGNyb3NzZWQgYnkgdGhlIG5ldyByZWdpc3Rlci4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9jb25mbGljdHMpOiBNYXJrIHJlZ2lzdGVycyBtb2RpZmllZCBieQorCXZpcnR1ZSBvZiBhIFJFR19JTkMgbm90ZSBhcyBtb2RpZmllZCBpbiB0aGUgaW5zbiB0byBtYWtlIGNvbmZsaWN0cy4KKwkobWFya19yZWdfc3RvcmUpOiBBY2NlcHQgU0VUVEVSIHZhbHVlIG9mIDAuCisKK1N1biBNYXIgMTAgMTY6NTY6MjUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChvcGVyYW5kX3N1YndvcmQpOiBOZXcgZnVuY3Rpb24gdG8gZ2V0IG9uZSB3b3JkIG9mIG9wZXJhbmQuCisJKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBVc2UgaXQgZm9yIHdvcmQgYXQgYSB0aW1lIGNhc2UuCisKKwkqIGNvbmZpZ3VyZSAoYTI5LWJzZCopOiBSZW5hbWVkIGZyb20gYTI5LXN5c3YqLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogSGFuZGxlIEdOVUxJQl9ORUVEU19ET1VCTEUuCisJKiB0bS1pODYwLmggKEdOVUxJQl9ORUVEU19ET1VCTEUpOiBEZWZpbmUgaXQuCisKKwkqIHRtLWhhcnJpcy5oIChBU01fRklMRV9TVEFSVCk6IE91dHB1dCBhIC5maWxlLgorCisJKiByZWxvYWQxLmMgKGNvbnN0cmFpbnRfYWNjZXB0c19yZWdfcCk6IFVuZGVyc3RhbmQgcmVnIGNsYXNzZXMuCisKK1N1biBNYXIgMTAgMDY6NTg6MjAgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlcywgbW92ZV9ieV9waWVjZXNfbmluc25zLCBlbWl0X3B1c2hfaW5zbik6CisJSWYgU0xPV19VTkFMSUdORURfQUNDRVNTIGlzIGRlZmluZWQsIHJlc3BlY3QgYWxpZ25tZW50IGV2ZW4gaWYKKwlTVFJJQ1RfQUxJR05NRU5UIGlzIG5vdCBkZWZpbmVkLgorCSogdG0tYTI5ay5oIChTTE9XX1VOQUxJR05FRF9BQ0NFU1MpOiBEZWZpbmUgdGhpcy4KKworU3VuIE1hciAxMCAwMjo1Nzo0MCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlKTogSWYgcGFzc190aHJ1IGFuZCAtQywgcHJpbnQgdGhlCisJaW5wdXQgYmVmb3JlIHJlbW92aW5nIGNvbW1lbnRzIGZyb20gaXQuCisKK1NhdCBNYXIJIDkgMjE6MTg6NDggMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IG11c3RhLm5hZGEua3RoLnNlKQorCisJKiBnbnVsaWIyLmMgKGRpdl9xcm5uZCwgX191bXVsc2lkaTMsIGxvd3BhcnQsIGhpZ2hwYXJ0LCBCKTogTW92ZQorCXRvIGxvbmdsb25nLmguCisJKHVkaXZfcXJubmQpOiBOZXcgbmFtZSBvZiBkaXZfcXJubmQuICBSZXdyaXRlIHRvIHdvcmsgY29ycmVjdGx5LgorCShmaWxlIGhlYWRlcik6IFJlbW92ZSBvYnNvbGV0ZSBjb21tZW50IGFib3V0IGludGVybmFsIGZvcm1hdC4KKwkoYml0cyk6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uLiAgY291bnRfbGVhZGluZ196ZXJvcyBpbiBsb25nbG9uZy5oCisJaXMgc2ltaWxhci4KKwkoX191ZGl2ZGkzKTogVXNlIGNvdW50X2xlYWRpbmdfemVyb3MgaW5zdGVhZCBvZiBiaXRzLgorCShfX3VkaXZkaTMpOiBVc2UgdW11bF9wcG1tIGluc3RlYWQgb2YgX191bXVsc2lkaTMsIGFzIHRoaXMgbWFrZXMKKwliZXR0ZXIgY29kZS4KKworU2F0IE1hcgkgOSAxODowMjo0NyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBBdm9pZCBsb29raW5nIGF0IFBBVFRFUk4gb2YgTk9URQorCW9yIENPREVfTEFCRUwuCisKKwkqIHJlbG9hZDEuYyAocmVnX2lzX291dHB1dF9yZWxvYWQsIGNvdW50X2Zvcl8qZ3JvdXBzKTogVXNlCisJSEFSRF9SRUdfU0VUIGluc3RlYWQgb2YgYXJyYXkgdG8gYXZvaWQgYnplcm8gY2FsbHMuCisJKHJlbG9hZF9yZWdfdXNlZCopOiBMaWtld2lzZS4KKworCSogZW1pdC1ydGwuYyAoZ2VuX3J0eCwgaW5pdF9lbWl0X29uY2UpOiBQcmUtY29tcHV0ZSBDT05TVF9JTlRzCisJZnJvbSAtNjQgdG8gNjQgdG8gc2F2ZSBzcGFjZS4KKworU2F0IE1hcgkgOSAxNDoyODozNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworU2F0IE1hcgkgOSAwMTowMzowMSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAocHVzaHRhZyk6IERvbid0IGNhbGwgYHB1c2hkZWNsJyBmb3IgbmVzdGVkIHR5cGUgaWYKKwl0aGUgdHlwZSBpcyBhbHJlYWR5IGRlZmluZWQuCisKK0ZyaSBNYXIJIDggMTc6MjQ6MjAgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbnMzMmsubWQsIHZheC5tZCAocmlnaHQgc2hpZnQgcGF0dGVybnMpOiBXaGVuIGdlbmVyYXRpbmcgYSByaWdodAorCXNoaWZ0LCB1c2UgeFNISUZUUlQgYnV0IHVzZSAobmVnIHgpIGFzIHRoZSBzaGlmdCBjb3VudCB0bworCW1vcmUgYWNjdXJhdGVseSByZXByZXNlbnQgd2hhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIG1hY2hpbmUuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBDYW4ndCBuYXJyb3cgcmVzdWx0IG9mIHNjYyBpbnNuIGJlZm9yZQorCW5vcm1hbGl6aW5nLgorCitGcmkgTWFyCSA4IDEyOjU2OjQxIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtY2xhc3MuYyAocHVzaGNsYXNzKTogU2V0IENVUlJFTlRfRlVOQ1RJT05fREVDTCB0bworCWFwcHJvcHJpYXRlIHZhbHVlIHNvIHRoYXQgcHVzaHRhZyBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IgdGFncworCXB1c2hlZCBpbnRvIHNjb3BlLgorCitGcmkgTWFyCSA4IDAyOjQ3OjUzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZGVsZXRlX3RlbXBfZmlsZXMpOiBEZWxldGUgb25seSBvcmRpbmFyeSBmaWxlcy4KKworCSogdHJlZS5jLCBjcGx1cy10cmVlLmMgKFRZUEVfSEFTSCk6IDc3Nzc3NyB3YXMgc3VwcG9zZWQgdG8gYmUgb2N0YWwuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogUHJvcGVybHkgZW5zdXJlIEVRVUlWCisJaXMgZnJlZSBhbmQgb2YgdGhlIGRlc2lyZWQgY2xhc3MuCisJV2hlbiBhIHJlbG9hZCBtYXkgYmUgYSBncm91cCwgbWFyayBhbGwgaXRzIHJlZ3MgaW4gdXNlLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBEb24ndCBjYWxsIHJlZ19vdmVybGFwX21lbnRpb25lZF9wCisJdW5sZXNzIElOIGlzIGEgUkVHIG9yIE1FTS4KKworCSogYy1jb21tb24uYywgY3BsdXMtc2VhcmNoLmMsIGNwbHVzLWNsYXNzLmMgKE5VTEwpOgorCVVuZGVmIGJlZm9yZSBkZWZpbmluZy4KKworCSogc2Rib3V0LmMgKHNkYm91dF9vbmVfdHlwZSk6IERvbid0IHRlbXBvcmFyaWx5IGNsZWFyIEtOT1dOX1RZUEVfVEFHLgorCitUaHUgTWFyCSA3IDEwOjUzOjMyIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tCisKKwkqIHRvcGxldi5jIChtYWluKTogQWRkIC1kcDogYW5ub3RhdGUgdGhlIGFzc2VtYmx5IHdpdGggYSBjb21tZW50CisJZGVzY3JpYmluZyB0aGUgcGF0dGVybiBhbmQgYWx0ZXJuYXRpdmUgdXNlZC4gIEFsc28sIG1ha2UgLWRtIHdvcmsKKwlmb3IgVVNHIHN5c3RlbXMuCisJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2VwaWxvZ3VlKTogT3V0cHV0IHRoZSBhcnJheSBgaW5zbl9uYW1lJy4KKwkqIGZpbmFsLmMgKGRlYnVnX2luc24sIGZpbmFsX3NjYW5faW5zbik6IFJlY29yZCB0aGUgdmFsdWUgb2YgdGhlCisJbGFzdCBpbnNuIHByb2Nlc3NlZCBieSBmaW5hbF9zY2FuX2luc24uCisJKG91dHB1dF9hc21faW5zbik6IEFubm90YXRlIHRoZSBhc3NlbWJseSBvdXRwdXQuCisJKEFTTV9DT01NRU5UX1NUQVJUKTogUHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuCisJKiB0bS1hdHQzODYuaCwgdG0tYnNkMzg2LmgsIHRtLXN1bjM4Ni5oIChBU01fQ09NTUVOVF9TVEFSVCk6CisJU3BlY2lmeSAiLyIuCisKK1RodSBNYXIJIDcgMDY6MTU6MDQgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChwcm9wYWdhdGVfYmFzZXR5cGVfb2Zmc2V0cyk6IENoZWNrIEFTU09DX1RZUEUgaW4KKwlhZGRpdGlvbiB0byByZXR1cm4gdmFsdWUgZnJvbSBhc3NvYyB2YWx1ZSBiZWZvcmUgYWJvcnRpbmcuICAgPz8/CisJc2hvdWxkIGZpZ3VyZSBvdXQgd2h5IGFzc29jcyBhcmUgbm90IHNoYXJlZC4KKworV2VkIE1hcgkgNiAxNjoyOTozNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKE5VTEwpOiBVbmRlZiBiZWZvcmUgZGVmaW5pbmcuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEFsbG9jYXRlIGZpbGUgbmFtZSBwZXJtYW5lbnRseS4KKworV2VkIE1hcgkgNiAwOTowNjozOSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoYW5kL2FzaGlmdCk6IEFkZGVkIGZvciB0aGUgbmV3IGNvbWJpbmUuYyAoYXNoaWZ0L2FuZAorCXdvcmtzIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24pLgorCShiY25kIGluc25zKTogVXNlIGJjbmQgdG8gdGVzdCBmb3Igc2lnbiBhbmQgemVyby4KKwkobXVsZGYzLCBkaXZkZjMpOiBVc2UgbmV3IG1ldGhvZCB0byBkZWFsIHdpdGggYSBwb3dlciBvZiB0d28uCisJKGFuZHNpMywgaW9yc2kzLCB4b3JzaTMpOiBTcGxpdCBpbnRvIHR3byBpbnNucyBmb3Igc29tZSBjb25zdGFudHMuCisJKGNhbGwsIGNhbGxfdmFsdWUpOiBEZWFsIHByb3Blcmx5IHdpdGggYSBDT05TVF9JTlQgYWRkcmVzcy4KKwkqIG91dC1tODhrLmMgKGNhbGxfYWRkcmVzc19vcGVyYW5kKTogRG9uJ3QgYWxsb3cgQ09OU1RfSU5ULgorCSh1c2VzX2FyZ19hcmVhX3ApOiBOZXcgZnVuY3Rpb24gZm9yIC1tb3B0aW1pemUtYXJnLWFyZWEuCisJKiB0bS1tODhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSAtbXBpYyBpbiBmYXZvciBvZiAtZnBpYy4KKwlBZGQgLW1vcHRpbWl6ZS1hcmctYXJlYSBhbmQgLW1uby1vcHRpbWl6ZS1hcmctYXJlYS4KKworV2VkIE1hcgkgNiAwMDowNzowOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX0ZST01fQ09OU1RfRE9VQkxFKTogVGFrZXMgaW5wdXQgYW5kIG91dHB1dCBhcmdzLgorCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSwgY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOgorCShyZXN0b3JlX2NvbnN0YW50cyk6IENhbGxzIGNoYW5nZWQuCisKK1R1ZSBNYXIJIDUgMjM6MDY6MzYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYyAoZml4dXBfZ290b3MpOiBIYW5kbGUganVtcGluZyB0byBlbmQgb2YgcnRsLgorCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IElmIC10cmFkaXRpb25hbCwKKwlhbGxvdyB1bnNpZ25lZCBpbnQgaW4gcHJvdG90eXBlIGluIHBsYWNlIG9mIGludC4KKworCSogY3BsdXMtY2FkaWxsYWMuYzogRGVsZXRlIGFsbCBidXQgdGhlIHN0dWJzLgorCitUdWUgTWFyCSA1IDE2OjU5OjE4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEhhbmRsZSBjYXNlIG9mIG9ubHkgTk9URSBpbnNucyBhZnRlcgorCU5PVEVfSU5TTl9MT09QX0JFRy4KKwkoZHVwbGljYXRlX2xvb3BfZXhpdF90ZXN0KTogUmV0dXJuIDAgd2hlbiB3ZSBoaXQgYSBibG9jaworCXN0YXJ0IG9yIGVuZCwgcmF0aGVyIHRoYW4gcXVpdHRpbmcgbG9vcCBhbmQgZ2V0dGluZyBjb25mdXNlZC4KKworCSogaW50ZWdyYXRlLmMgKHN1YnN0X2NvbnN0YW50cyk6IENvcnJlY3RseSBtb3ZlIGNvbnN0YW50cyB0bworCXNlY29uZCBvcGVyYW5kIG9mIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMuCisKKwkqIGp1bXAuYyAoY29tcGFyaXNvbl9jb2RlX3ApOiBEZWxldGVkLgorCSogY29tYmluZS5jIChzdWJzdCk6IFVzZSBHRVRfUlRYX0NMQVNTIGluc3RlYWQgb2YgY29tcGFyaXNvbl9jb2RlX3AuCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBMaWtld2lzZS4KKwkqIHJlY29nLmMgKGNvbXBhcmlzb25fb3BlcmF0b3IpOiBMaWtld2lzZS4KKwkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IExpa2V3aXNlLgorCitUdWUgTWFyCSA1IDE0OjIxOjU3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBXaGVuIGNoZWNraW5nIGZvciBjb25zdGFudCBwb29sIGFkZHJlc3NlcywKKwloYW5kbGUgYWRkcmVzc2VzIGNvbnN0cnVjdGVkIGZyb20gTE9fU1VNLgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBJZiBiZWZvcmUgcmVsb2FkLCBgbScgYW5kIGBvJworCWFjY2VwdCBhbGwgdGhhdCBjb3VsZCBiZSByZWxvYWRlZCB0byBmaXQgdGhvc2UgY29uc3RyYWludHMuCisKKwkqIHJlbG9hZDEuYyAoZ2VuX2lucHV0X3JlbG9hZCk6IFJldHVybiB0aGUgZmlyc3QgaW5zbiBlbWl0dGVkIGJ5CisJdGhpcyBmdW5jdGlvbiwgaW5zdGVhZCBvZiB0aGUgbGFzdCBpbnNuIGVtaXR0ZWQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9sb29wKTogV2hlbiBtb3ZlIGV4aXQgdGVzdCB0byBsb29wIGJvdHRvbSwKKwlhbHNvIG1vdmUgYSBwcmVjZWVkaW5nIE5PVEVfSU5TTl9MT09QX0NPTlQgbm90ZSBpZiBpdCBleGlzdHMuCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBDaGVjayBmb3IgcnVubmluZyBvdXQgb2YgYXJncyBhZnRlciBvcHRpb24uCisKKwkqIG91dC1taXBzLmMsIG91dC1yb21wLmM6IFRlc3QgQllURVNfQklHX0VORElBTiB3aXRoICNpZi4KKwkqIHRtLWk4NjAuaCAoKl9CSUdfRU5ESUFOKTogRGVmaW5lIGFzIDAuCisJKiB0bS1taXBzLW5ld3MuaCAoQllURVNfQklHX0VORElBTiwgV09SRFNfQklHX0VORElBTik6IERlbGV0ZWQuCisJKERFQ1NUQVRJT04pOiBEZWxldGVkLgorCisJKiB0bS1taXBzLmg6IFRlc3QgV09SRFNfQklHX0VORElBTiB3aXRoICNpZi4KKworCSogdG0tbWlwcy5oLCB0bS1zcGFyYy5oLCB0bS1zcHVyLmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOgorCVVzZSBDT05TVF9ET1VCTEVfTE9XIGFuZCBDT05TVF9ET1VCTEVfSElHSC4KKworCSogcmVhbC5oOiBkY29uc3QwLCBkY29uc3QxLCBkY29uc3RtMSBhcmUgZGVjbGFyZWQgdHdpY2UuCisJRWxpbWluYXRlIHRoZSBzZWNvbmQgcmVkdW5kYW50IGRlY2xhcmF0aW9uLgorCisJKiBjc2UuYyAoRklYRURfUkVHTk9fUCk6IEV4Y2x1ZGUgT1ZFUkxBUFBJTkdfUkVHTk9fUCByZWdpc3RlcnMuCisKKwkqIGNjY3AuYyAocGF0aF9pbmNsdWRlKTogSGFuZGxlIGVtcHR5IG5hbWVzIGluIHBhdGguCisKKwkqIGZpbmFsLmM6IFVzZSBndmFyYXJncy5oLCBub3QgdmFyYXJncy5oCisKKwkqIGNvbmZpZ3VyZSAoaTg2MCwgaTg2MC1ic2QpOiBIYW5kbGUgK2dhcy4KKwkqIHRtLWk4NjBnLmgsIHRtLWk4NjBic2RnLmg6IE5ldyBmaWxlcy4KKworTW9uIE1hcgkgNCAyMjo0MTozNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IFdoZW4gbWFraW5nIGEgcmVhbCBjb25zdCwgdXNlIE1PREUuCisKK01vbiBNYXIJIDQgMjE6MzU6NDcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9lbmRfb2ZfYmFzaWNfYmxvY2spOiBDb3JyZWN0bHkgaGFuZGxlIGNhc2Ugd2hlcmUKKwl3ZSBmaW5kIGEgIm5ldyIgYnJhbmNoIHRvIGZvbGxvdy4KKwkoY3NlX2VuZF9vZl9iYXNpY19ibG9jaywgY3NlX21haW4sIGNzZV9iYXNpY19ibG9jayk6IFBBVEhfU0laRQorCWlzIG5vdyBhY3R1YWwgc2l6ZSwgbm90IHNpemUgLSAxLgorCitNb24gTWFyCSA0IDA2OjQ0OjI3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtZGVjbC5jIChwb3BsZXZlbCk6IENoYW5nZSB0ZXN0IGZvciB3aGV0aGVyIHRvIGNsb2JiZXIgdGhlCisJREVDTF9DT05URVhUIG9mIGxvY2FsIHZhcmlhYmxlcy4gIE5vdyB3ZSB3b24ndCBjbG9iYmVyIGNvbnRleHQgZm9yCisJYW55IG5lc3RlZCB0eXBlcy4KKworTW9uIE1hcgkgNCAwMDozOToxMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogV2hlbiBkZWxldGluZyB4PXkgYWZ0ZXIgeT14LAorCWRvbid0IGRlbGV0ZSBtb3JlIHRoYW4gb25lIGRlYXRoIG5vdGUsIGFuZCBkb24ndCBkZWxldGUgYW55CisJdW5sZXNzIHdlIHJlYWxseSBkbyBkZWxldGUgeD15LgorCisJKiBjY2NwLmMgKG1haW4pOiBTdXBwb3J0IC1sYW5nLW9iamMrKy4KKwlFbGltaW5hdGUgY29tcGlsYXRpb24gcGFyYW1ldGVyIENQTFVTUExVUy4KKworCSogY2NjcC5jIChtYWluKTogSGFuZGxlIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2UgaW4gYHByZWRlZnMnLgorCisJKiBmaXhpbmNsdWRlczogRml4IHR5cG9zIGhhbmRsaW5nIHNpemVfdCBhbmQgcHRyZGlmZl90LgorCitTdW4gTWFyCSAzIDE2OjQxOjI0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBIYW5kbGUgbXVsdGlwbGUgc3BhY2VzLCBhbmQgdGFicywgaW4gYHByZWRlZnMnLgorCSogZ2NjLmMgKGRvX3NwZWNfMSk6ICBBbGxvdyBleHRyYSB3aGl0ZXNwYWNlIGluIENQUF9QUkVERUZJTkVTLgorCUFsc28gdHJhbnNmb3JtIC1EZm9vPWJhciBpbnRvIC1EX19mb29fXz1iYXIgY29ycmVjdGx5LgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfemVyb3MpOiBVc2UgQVNNX0JZVEUgaWYgZGVmaW5lZC4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBPbmx5IHNwZWNpYWwtY2FzZSBhIHNwaWxsIHJlZyBhbG9uZSBpbiBhIGNsYXNzCisJaWYgdGhlcmUgaXMgbm9uLWdyb3VwIG5lZWQgZm9yIHRoYXQgY2xhc3MuICBCZSBjYXJlZnVsIG5vdCB0byBjb3VudAorCWEgcmVnIGluIHRoZSB1c3VhbCBwbGFjZSBpZiBpdCB3YXMgY291bnRlZCBpbiB0aGUgc3BlY2lhbCBjYXNlLgorCisJKiByZWxvYWQxLmMgKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IE1ha2UgZml4ZWQgcmVncyBhbmQKKwllbGltaW5hYmxlIHJlZ3MgdHdpY2UgYXMgYmFkIGFzIGV4cGxpY2l0bHkgbWVudGlvbmVkIHJlZ3MuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRml4IHR5cG9zIGluIGxhc3QgY2hhbmdlLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOgorCVJldHVybiB0eXBlIG9mIG1lbWNweSB2YXJpZXMgaWYgLXRyYWRpdGlvbmFsLgorCShwdHJfZnR5cGVfcHRyX2NwdHJfc2l6ZXQpOiBHbG9iYWwgdmFyIGRlbGV0ZWQuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBXaGVuIHVwZGF0aW5nIHJlZ19yZWxvYWRlZF9jb250ZW50cywKKwlmaXJzdCBhbHdheXMgY2xlYXIsIHRoZW4gbWF5YmUgc3RvcmUgbm9uemVybyB2YWx1ZS4KKworU3VuIE1hcgkgMyAxNjoxMjoxNyAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy10ZW1wbGF0ZS5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBBZGQgdHdvCisJbGVhZGluZyB1bmRlcnNjb3JlcywgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggcHJvZ3JhbW1lcidzIG5hbWVzLgorCisJKiBjcGx1cy10cmVlLmggKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIpOiBOZXcgZmllbGQgYHRlbXBsYXRlJworCXBvaW50cyB0byB0ZW1wbGF0ZSBpbmZvIGZyb20gd2hpY2ggdGhpcyBpZGVudGlmaWVyIHdhcworCWNvbnN0cnVjdGVkLgorCisJKiBjcGx1cy10ZW1wbGF0ZS5jIChjdXJyZW50X3RlbXBsYXRlX2V4cGFuc2lvbiwKKwljdXJyZW50X3RlbXBsYXRlX25hbWUpOiBWYXJpYWJsZXMgZGVsZXRlZC4KKworCSogY3BsdXMtdGVtcGxhdGUuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogVG9wIGhhbGYgb2Ygb2xkCisJaW5zdGFudGlhdGVfdGVtcGxhdGU7IHJldHVybnMgdGhlIGlkX25vZGUuCisJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVGFrZXMgdGhlIGlkX25vZGUgYXMgYXJndW1lbnQgbm93LgorCSogY3BsdXMtcGFyc2UueSAodGVtcGxhdGUgcnVsZXMpOiBVc2Ugc2VwYXJhdGUgcnVsZSBmb3IgY2hlY2tpbmcKKwl3aGV0aGVyIGV4cGFuc2lvbiBpcyByZXF1aXJlZC4JRm9yIGJhc2UgY2xhc3NlcywgYWx3YXlzIHRyeSBpdDsKKwllbHNlIGRvIGl0IG9ubHkgaWYgYHsnIGlzIG5vdCBuZXh0IHRva2VuLgorCSh0ZW1wbGF0ZV90eXBlX25hbWUpOiBOZXcgbm9udGVybWluYWwgZm9yIHRlbXBsYXRlIGNsYXNzIG5hbWUKKwl3aXRob3V0IGV4cGFuc2lvbi4KKwkodGVtcGxhdGVfdHlwZSk6IEluY2x1ZGVzIGV4cGFuc2lvbiwgaWYgbmVlZGVkLgorCisJKiBjcGx1cy1pbnB1dC5jIChpbnB1dF9mcm9tX3NhdmVkX3RleHQpOiBEZWxldGVkLgorCSogY3BsdXMtdGVtcGxhdGUuYyAoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBDYWxsIGZlZWRfaW5wdXQgZGlyZWN0bHkuCisKKwkqIGNwbHVzLXBhcnNlLnkgKGJhc2VfY2xhc3NfdmlzaWJpbGl0eV9saXN0KTogTm93IHR5cGUgPGl0eXBlPiwKKwljYXN0IHRvIHRyZWUgaW4gYmFzZV9jbGFzcyBhY3Rpb24uCisKK1N1biBNYXIJIDMgMDc6NDY6NTUgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChkb19zdG9yZV9mbGFnKTogQ29uc2lkZXIgQSAmIHNpbmdsZS1iaXQgYXMgY2hlYXAuCisKKwkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogSWYgQVJHMCBhbmQgQVJHMSBhcmUgdGhlIHNhbWUKKwlTQVZFX0VYUFIsIHRoZXkgYXJlIGVxdWFsLgorCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xKTogTW92ZSBtaXNwb3NpdGlvbmVkIGNvZGUgaW4KKwkoc2V0ICh6ZXJvX2V4dHJhY3QgLi4uKSAuLi4pIGNhc2U7IGZpeCBpbmNvcnJlY3QgaW5kZW50YXRpb24uCisKK1N1biBNYXIJIDMgMDE6MTE6NDYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaW5jbHVkZV9kZWZhdWx0cywgY3BsdXNwbHVzX2luY2x1ZGVfZGVmYXVsdHMpOgorCVVzZSBTVEFOREFSRF9JTkNMVURFX0RJUi4KKwkoU1RBTkRBUkRfSU5DTFVERV9ESVIpOiBEZWZpbmUgYnkgZGVmYXVsdCBhcyAvdXNlL2luY2x1ZGUuCisJKiB0bS1taXBzLmggKFNUQU5EQVJEX0lOQ0xVREVfRElSKTogRGVmaW5lLCBpZiBNSVBTX0JTRDQzLgorCShDUFBfU1BFQyk6IERvbid0IGRvIC1JIHRvIGhhbmRsZSAtWlNZU1YsIC1aQlNENDMuCisKK1NhdCBNYXIJIDIgMTc6MjA6NTcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBSZW1vdmUgdW5uZWVkZWQgY2FsbHMgdG8KKwlzYWZlX2Zyb21fcCBpbiBBID8gQSA6IEZPTyBjYXNlcy4KKworU2F0IE1hcgkgMiAxNjoxNDoyNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBTdXBwb3J0IHN1YnJlZyBhcyByZWxvYWRfb3ZlcnJpZGVfaW4uCisJTGlrZXdpc2UgcmVsb2FkX3JlZ19ydHguICBKdXN0IGRvbid0IHVzZSBSRUdOTyBvbiB0aGVtLgorCShlbWl0X3JlbG9hZF9pbnNucyk6IEhhbmRsZSBzdWJyZWcgYXMgT0xERVFVSVYuCisKKwkqIHJlbG9hZDEuYyAoZGVsZXRlX291dHB1dF9yZWxvYWQpOiBQYXNzIHRoZSBvdXRwdXQgcmVsb2FkIGluc24sCisJbm90IGEgc3BpbGwgcmVnIGluZGV4LglDYWxsIGluIGVtaXRfcmVsb2FkX2luc25zIGNoYW5nZWQuCisJKGVtaXRfcmVsb2FkX2luc25zKTogRG9uJ3QgYWN0dWFsbHkgdXBkYXRlIHNwaWxsX3JlZ19zdG9yZQorCXRpbGwgYWZ0ZXIgYWxsIHJlbG9hZCBpbnNucyBoYXZlIGJlZW4gbWFkZS4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogSWYgZXhpc3RpbmcgcmVsb2FkIGhhcyBhIHJlbG9hZCByZWcsCisJbWFrZSBzdXJlIGl0IGZpdHMgdGhlIGNsYXNzIG9mIHRoaXMgcmVsb2FkLgorCisJKiBzdG10LmMgKGZpeHVwX2dvdG9zKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRG9uJ3QgdXNlIGVxdWl2IHJlZworCXRoYXQgaXMgY2xvYmJlcmVkIGluIHRoaXMgaW5zbi4KKworU2F0IE1hcgkgMiAxMjoxOToxOSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlbS5jIChvcHRhYmxlKTogQWRkIG9wIGZvciBgb3BlcmF0b3IsJy4KKworCSogdG9wbGV2LmMgKG1haW4pOiBDbGVhciBXQVJOX0lOTElORSBpZiBGTEFHX05PX0lOTElORSBpcyBub256ZXJvLgorCisJKiBjcGx1cy10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogUGVyZm9ybSBjb252ZXJzaW9uIHRvIHJlZmVyZW5jZQorCWluIHRpbWUgdGhhdCB3ZSBjYW4gd2FybiBhYm91dCB0aGUgcmV0dXJuIG9mIG1vcmUgbm9uLWx2YWx1ZXMuCisJQWxzbywgZml4IHdoYXQgYXBwZWFyZWQgdG8gYmUgYnVncyBpbiB0aGUgY29kZSBkZWFsaW5nIHdpdGgKKwlXSEFUU19SRVRVUk5FRC4KKworU2F0IE1hcgkgMiAwMDoxMToxOCAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy1wYXJzZS55IChiYXNlX2NsYXNzKTogQmFzZSBjbGFzcyBtYXkgYmUgYSB0ZW1wbGF0ZSBjbGFzcy4KKwlTcGxpdCBvZmYgbm9uLXZpc2liaWxpdHkgcG9ydGlvbiBpbnRvIGJhc2VfY2xhc3MuMS4KKworCSogY3BsdXMtcGFyc2UueTogUmVwbGFjZWQgUFVCTElDLCBQUklWQVRFLCBQUk9URUNURUQgd2l0aCBhIHNpbmdsZQorCXRlcm1pbmFsIFZJU1NQRUMsIHdpdGggPGl0eXBlPiB2YWx1ZSwgdG8gc2ltcGxpZnkgcGFyc2VyIHNsaWdodGx5LgorCSogY3BsdXMtcGFyc2UuaCAoZW51bSByaWQpOiBBZGRlZCB2YWx1ZXMgZm9yIFZJU1NQRUMgdGVybWluYWwuCisJKiBjcGx1cy1sZXguYyAoaXNfcmVzZXJ2ZWRfd29yZCk6IENoYW5nZWQgdG9rZW4gdHlwZXMgdG8gVklTU1BFQywKKwlyaWQgdmFsdWVzIGFzIGFwcHJvcHJpYXRlLgorCSh5eWxleCk6IEZvciBWSVNTUEVDLCBzZXQgaXR5cGUgdmFsdWUgcmF0aGVyIHRoYW4gdHR5cGUuCisKK0ZyaSBNYXIJIDEgMjE6NTA6MjMgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogY3BsdXMtcGFyc2UueSAoLnNldF9iYXNlX2luaXQpOiBEaXNjYXJkZWQgYHByZXNlcnZlJyBjb2RlLCB3aGljaAorCXdhcyBkb2luZyBub3RoaW5nLgorCitGcmkgTWFyCSAxIDE5OjAxOjI1IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKHJlZHVuZGFudF9pbnNuX3ApOiBSZW5hbWUgc2Vjb25kIGFyZyB0byBUQVJHRVQuCisJSGFuZGxlIHRoZSBjYXNlIHdoZXJlIFRBUkdFVCBpcyBhIFNFUVVFTkNFLgorCShtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBEb24ndCBnZXQgY29uZnVzZWQgYnkgcmVnaXN0ZXJzIGNvbmRpdGlvbmFsbHkKKwlzZXQgaW4gYSBKVU1QX0lOU04gd2hlbiBsb29raW5nIGZvciByZWdzIHNldCBiZWZvcmUgdXNlZC4KKworVGh1IEZlYiAyOCAxNzoyNTo1OSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFJlcGxhY2UgY29kZSB0aGF0IHRoaW5rcyBpdCBrbm93cworCWV4YWN0bHkgd2hhdCB0aGUgUlRMIGxvb2tzIGxpa2UgKGFuZCBnZXRzIGl0IHdyb25nKSB3aXRoIGNhbGwKKwl0byBnZXRfY29uZGl0aW9uX2Zvcl9sb29wLgorCitUaHUgRmViIDI4IDE2OjM1OjIxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb21wb3VuZF9leHByKTogQ29udmVydCBhcnJheSB0byBwb2ludGVyLgorCitXZWQgRmViIDI3IDE1OjQ2OjU0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBnbnVsaWIxLmMgKEZMT0FUX0FSR19UWVBFLCBGTE9BVElGWSk6IE5ldyBtYWNyb3MuCisJKF9fKnNmKik6IFVzZSB0aGVtIGZvciBgZmxvYXQnIGFyZ3MuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKToKKwlUZXN0IHZhbHVlIG9mIEhBVkVfY2FzZXNpIGFuZCBIQVZFX3RhYmxlanVtcCBhdCBydW50aW1lLgorCisJKiBzdG10LmMgKGZpeHVwX2dvdG9zKTogQ2hlY2sgdGhhdCBqdW1wIGludG8gYmluZGluZ3MKKwlyZWFsbHkgY29tZXMgZnJvbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBiaW5kaW5ncy4KKwlVc2UgVFJFRV9SRUdERUNMIHRvIGluZGljYXRlIGVycm9yIG1lc3NhZ2UgcHJpbnRlZC4KKworV2VkIEZlYiAyNyAxNTowMTo1MSAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy10ZW1wbGF0ZS5jIChlbmRfdGVtcGxhdGVfZGVjbCk6IFN0b3JlIGNvcnJlY3QgbmFtZSBpbiBuZXcKKwlkZWNsLiAgVXNlIHB1c2hkZWNsLCBub3QgcHVzaHRhZy4KKwkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBVc2UgaWRlbnRpZmllcidzIGdsb2JhbCB2YWx1ZSwgbm90IGl0cworCXR5cGUuICBQYXNzIGJhY2sgYm90aCB0ZW1wbGF0ZSBhbmQgbmV3IGNsYXNzIGluIHRva2VuIHZhbHVlLgorCSogY3BsdXMtbGV4LmMgKGlkZW50aWZpZXJfdHlwZSk6IFRlbXBsYXRlcyBub3cgaGF2ZSB0eXBlCisJVEVNUExBVEVfREVDTCwgbm90IFRZUEVfREVDTCB3cmFwcGVkIGFyb3VuZCBhIFRFTVBMQVRFX0RFQ0wuCisKK1dlZCBGZWIgMjcgMDY6Mjc6NDUgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9vcC5jIChyZXBsYWNlX3JlZ3MpOiBEb24ndCBtYWtlIG5lc3RlZCBTVUJSRUdzLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBTVUJSRUdfTE9DIGFwcGxpZXMgb25seSB0byBJTkxPQywgbm90IE9VVExPQy4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBTaW1wbGlmeSBBJkEsIEF8QSwgYW5kIEFeQS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBDb3JyZWN0bHkgaGFuZGxlIChwb3N0X2luYyAobWVtKSkuCisKK1R1ZSBGZWIgMjYgMjE6NDk6MTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogIENhbGxzIHRvCisJZ2V0X2Jlc3RfbW9kZSB3ZXJlIHBhc3NpbmcgYWxpZ25tZW50IGluIGJ5dGVzIHJhdGhlciB0aGFuCisJYWxpZ25tZW50IGluIGJpdHMuCisKKwkqIGZsYWdzLmggKGZsYWdfcGVkYW50aWNfZXJyb3JzKTogRGVjbGFyZSBpdC4KKworCSogYy10cmVlLmggKENfVFlQRURFRl9FWFBMSUNJVExZX1NJR05FRCk6IE5ldyBmbGFnLgorCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUmVjb3JkIHRoYXQgZmxhZyBpbiBuZXcgdHlwZWRlZnMuCisJQ2hlY2sgaXQgd2hlbiBkZXRlcm1pbmluZyBzaWduZWRuZXNzIG9mIGJpdGZpZWxkcy4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEluIEEgPyBBIDogQiwgbWFrZSBvdXRwdXQgc2FmZSBmcm9tIEEgYW5kIEIuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcywgZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6CisJUmVsb2FkIGFueSByZWcgdGhhdCBhcHBlYXJzIGluIGEgY2xvYmJlciBpbiB0aGUgc2FtZSBpbnNuLgorCShyZWdub19jbG9iYmVyZWRfcCk6IE5ldyBmdW5jdGlvbi4KKworVHVlIEZlYiAyNiAyMTo0MTo0MyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBBZGQgbWlzc2luZyBhcmcgdG8gZXhhcG5kX2V4aXRfbG9vcCBpbgorCUVYSVRfRVhQUiBjYXNlLgorCitUdWUgRmViIDI2IDE0OjM1OjQ3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDaGVjayBwZWRhbnRpYyBlcnJvciBsYXN0LgorCisJKiB0bS1pMzg2LmggKFNUUlVDVF9WQUxVRSwgU1RSVUNUX1ZBTFVFX0lOQ09NSU5HKTogVmFsdWUgaXMgMC4KKwkoUkVUVVJOX1BPUFNfQVJHUyk6IFBvcCB0aGUgc3RydWN0dXJlIHJldHVybiBwb2ludGVyIGhlcmUuCisJKiBvdXQtaTM4Ni5jIChmdW5jdGlvbl9lcGlsb2d1ZSk6CisJY3VycmVudF9mdW5jdGlvbl9wb3BzX2FyZ3Mgc2F5cyBob3cgbWFueSBhcmdzIHRvIHBvcC4KKworCSogdG0taTM4Ni5oIChDQ19aX0lOX05PVF9DKTogTmV3IGNjIGZsYWcuCisJKiBpMzg2Lm1kIChqZSBhbmQgam5lIHBhdHRlcm5zKTogSGFuZGxlIHRoaXMgZmxhZy4KKwkocGF0dGVybiB1c2luZyBidCBpbnNucyk6IFNldCB0aGUgZmxhZy4KKwlPdXRwdXQgdGVzdCBpbnNuIGluc3RlYWQgaWYgYml0IG51bWJlciBpcyBjb25zdGFudC4KKwkoaW5zdik6IENoYW5nZWQgY29uc3RyYWludC4KKworCSogdG0taTM4Ni5oIChlbnVtIHJlZ19jbGFzcyk6IERlZmluZSBBQkNJX1JFR1MuCisJKFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTKTogU3VwcG9ydCBBQkNJX1JFR1MuCisJRml4IHRoZSBjb250ZW50cyBmb3IgQUJDX1JFR1MuCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IERlZmluZSBgeCcgZm9yIEFCQ0lfUkVHUy4KKwkqIGkzODYubWQgKGRpdnNpMywgdWRpdnNpMyk6IFVzZSBgeG0nIGZvciBvcGVyYW5kIDIgY29uc3RyYWludC4KKwkoZGl2aGkzLCB1ZGl2aGkzLCBkaXZtb2QqLCB1ZGl2bW9kKik6IExpa2V3aXNlLgorCisJKiBjY2NwLmMgKHBlZHdhcm4pOiBEZWNsYXJlIGFzIHZvaWQuCisKK1R1ZSBGZWIgMjYgMDY6NDE6MzQgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiB0cmVlLmggKElERU5USUZJRVJfVklSVFVBTF9QKTogTmV3IG1hY3JvIGZvciBJREVOVElGSUVSX05PREUuCisJTm9uemVybyBtZWFucyB0aGF0IHRoaXMgaWRlbnRpZmllciBpcyB1c2VkIGJ5IGEgZnVuY3Rpb24gZGVjbGFyZWQKKwl2aXJ0dWFsLgorCSogY3BsdXMtZGVjbC5jIChncm9rZm5kZWNsKTogU2V0IElERU5USUZJRVJfVklSVFVBTF9QIGluc3RlYWQgb2YKKwlERUNMX1ZJUlRVQUxfUC4KKwkqIGNwbHVzLXNlYXJjaC5jIChnZXRfZmlyc3RfbWF0Y2hpbmdfdmlydHVhbCk6IFRlc3QKKwlJREVOVElGSUVSX1ZJUlRVQUxfUCBpbnN0ZWFkIG9mIERFQ0xfVklSVFVBTF9QLgorCisJKiBjcGx1cy1kZWNsLmMgKHB1c2h0YWcpOiBIYW5kbGUgY2xhc3NlcyB3aGljaCBhcmUgbmVzdGVkIGluCisJZnVuY3Rpb24gc2NvcGUgKGFzIG9wcG9zZWQgdG8gY2xhc3Mgc2NvcGUpLgorCShsb29rdXBfbmVzdGVkX3R5cGUpOiBEaXR0by4KKwkqIGNwbHVzLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IERpdHRvLgorCisJKiBjcGx1cy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogT25seSBnbG9iYWxpemUgbm9uLW5lc3RlZCBjbGFzc2VzCisJZGVjbGFyZWQgaW4gY2xhc3Mgc2NvcGUgKGkuZS4sIGRvbid0IGdsb2JhbGl6ZSBpbiBmdW5jdGlvbiBzY29wZSkuCisKK1R1ZSBGZWIgMjYgMDY6MTE6MzcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5tZCAoc3RvcmVtKTogRml4IHR5cG8gaW4gb3BlcmFuZCBudW1iZXIuCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IEFkZCBtaXNzaW5nIGNhc3QgcmVxdWlyZWQgZm9yIHNvbWUgY29tcGlsZXJzLgorCisJKiB0bS1hMjlrLmggKFJFR19DTEFTU18qLCBSRUdOT19SRUdfQ0xBU1MpOiBBZGQgbmV3IGNsYXNzIFFfUkVHUworCWFuZCBjb25zdHJhaW50IGxldHRlciBgcScgZm9yIHRoZSBRIHJlZ2lzdGVyLiAgUmVxdWVzdGVkIGJ5IHRlZ2UuCisKKwkqIHRtLWEyOWsuaCAoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogQWxsb3cgc2hvcnQgY29uc3RhbnQgYXMgYWRkcmVzcy4KKworTW9uIEZlYiAyNSAyMDo0Njo0MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEluIGhhbmRsaW5nIEEgOiBBID8gRk9PLCB1c2Ugc2FmZV9mcm9tX3AKKwlhZ2FpbnN0IEZPTy4gIEZpeCBtYW55IGluY29ycmVjdCBvcGVyYW5kIHJlZnMgaW4gQSA6IEZPTyA/IEEuCisKKwkqIHNkYm91dC5jIChwbGFpbl90eXBlXzEpOiBSZWNvcmQgdHlwZSBuYW1lIG9ubHkgaWYgdXNpbmcgZm9yd2FyZCByZWZzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTWFyayB0aG9zZSBSRUxPQURfT1RIRVIgcmVsb2FkcworCXRoYXQgYXJlIHVzZWQgZm9yIG91dHB1dCBhZGRyZXNzZXMsIGZvciBjaG9vc2VfcmVsb2FkX3JlZ3MuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6CisJQ29weSBSRUdfVVNFUlZBUl9QIGZyb20gb3JpZ2luYWwgcmVncyB0byBuZXcgcmVncy4KKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBIYW5kbGUgU1RSSU5HX0NTVCBiZWZvcmUgc2FtZS10eXBlIGNhc2UuCisKK01vbiBGZWIgMjUgMTM6MzE6NTEgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSGFuZGxlIHRoZSBpZGVudGlmaWNhdGlvbiBvZgorCWNvbnN0cnVjdG9ycyBkZWNsYXJlZCBpbiBuZXN0ZWQgc2NvcGUuCisKK01vbiBGZWIgMjUgMDY6Mjc6MjggMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVvcmcuYyAobmV4dF9pbnNuX25vX2FubnVsKTogTmV3IGZ1bmN0aW9uLgorCShtYXJrX3NldF9yZXNvdXJjZXMsIG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IERvbid0IGNvdW50IGluc25zIGZyb20KKwl0aGUgdGFyZ2V0IG9mIGEgYnJhbmNoIGlmIHRoZSBicmFuY2ggaXMgYW5udWxsaW5nLgorCisJKiBleHBtZWQuYyAoZW1pdF9zdG9yZV9mbGFnKTogR2V0IG5ldyByZWdpc3RlciBmb3IgdGFyZ2V0IGlmCisJcHJlc2VydmVfc3ViZXhwcmVzc2lvbnNfcCByZXR1cm5zIG5vbnplcm8uCisJQ29udmVydCB0byBkZXNpcmVkIG1vZGUsIHRoZW4gbm9ybWFsaXplLCBpbnN0ZWFkIG9mIGRvaW5nIGl0CisJdGhlIG90aGVyIHdheSBhcm91bmQ7IHRoaXMgYWxsb3dzIGJldHRlciBjb21iaW5pbmcuCisKK1N1biBGZWIgMjQgMjA6MDc6MDIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGZpbmRfY29tcGFyaXNvbl9hcmdzKTogRml4IGluZGVudGF0aW9uIGFuZCBtaXNwbGFjZWQgcGFyZW4uCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWhlYWRlcnMpOiBSZW1vdmUgZXh0cmFuZW91cyBwYXJlbnMgZnJvbQorCXVzZXMgb2Ygc2hlbGxsaWJzdWJkaXIuCisKK1N1biBGZWIgMjQgMTU6NDk6NDIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCisKKwkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogV2luIGlmIGxvb3AgYml2IGlzIHVzZWQgb25seSBmb3IgY291bnRpbmcuCisKKwkqIGNjY3AuYyAoc3RydWN0IGRlZmluaXRpb24pOiBSZWNvcmQgZmlsZSBhbmQgbGluZS4KKwkoY3JlYXRlX2RlZmluaXRpb24pOiBTdG9yZSB0aGF0IGluZm9ybWF0aW9uLgorCShkb19kZWZpbmUpOiBJZGVudGlmeSBsb2NhdGlvbiBvZiBwcmV2aW91cyBkZWZpbml0aW9uLgorCShwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IE5ldyBmdW5jdGlvbi4KKworU2F0IEZlYiAyMyAxMzozNjoxMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRXJyb3IgZm9yIGBzaWduZWQgdm9pZCcsIGV0Yy4KKwlXYXJuaW5nIGZvciBgc2lnbmVkIG15X2ludCcsIGFuZCBvbmx5IGlmIHBlZGFudGljLgorCisJKiB0b3BsZXYuYyAod2Fybl9jYXN0X2FsaWduKTogTmV3IGZsYWcsIHdpdGggLVcgb3B0aW9uLgorCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogV2FybiBpZiB0YXJnZXQgYWxpZ25tZW50IGluY3JlYXNlcy4KKworU2F0IEZlYiAyMyAxMDoyMjowMyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGUyLmMgKHN0b3JlX2luaXRfdmFsdWUpOiBHbG9iYWwgdmFyaWFibGVzIG11c3QgYmUKKwlzcGVjaWFsbHkgaW5pdGlhbGl6ZWQgaW4gUElDIHVuZGVyIFN1bk9TLgorCisJKiBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3RhZ3MpOiBUZXN0IHRoYXQgdGhlIHRhZydzIHZhbHVlIGhhcyBub3QKKwliZWVuIGNsZWFyZWQgYmVmb3JlIHRyeWluZyB0byB1c2UgaXQgYXMgYSB0eXBlLgkgVGhpcyBoYXBwZW5zIHdoZW4gYQorCWNsYXNzIHN0YXJ0cyBvdXQgbG9va2luZyBsaWtlIGEgbmVzdGVkIGNsYXNzLCBidXQgdHVybnMgb3V0IHRvIGJlIGEKKwlyZWZlcmVuY2UgdG8gYW4gaW1wbGljaXRseSBkZWZpbmVkIGdsb2JhbCBjbGFzcy4KKworU2F0IEZlYiAyMyAwNjoxNjo0NCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKHRydWVfcmVnbnVtKTogSWYgZ2l2ZW4gYSBwc2V1ZG8gbm90IGFzc2lnbmVkIGEgaGFyZCByZWcsCisJcmV0dXJuIHRoZSBwc2V1ZG8gcmVnaXN0ZXIgbnVtYmVyLgorCisJKiBvdXQtcnM2MDAwLmMgKHVwZGF0ZV9jYyk6IFJlbW92ZSBDQ19SRVZFUlNFIGFuZCBDQ19OT05ORUcuCisJKiByczYwMDAubWQgKGRlZmluZV9hdHRyICJjYyIpOiBSZW1vdmUgcmV2ZXJzZS4KKwkoY21wc2kpOiBPbmx5IGFsbG93IHNlY29uZCBhcmcgdG8gYmUgYSBjb25zdGFudC4KKwlSZW1vdmUgc29tZSB1bm5lZWRlZCBjb21wYXJpc29uIHBhdHRlcm5zLgorCisJKiByczYwMDAubWQgKG1pc2MgbG9naWNhbCBwYXR0ZXJucyk6IE9ubHkgYWRkIENMT0JCRVIgZm9yIE1RCisJd2hlbiB3ZSByZWFsbHkgY2xvYmJlciBpdDsgd2UgdXNlZCB0byBkbyBzbyBpbiBtb3JlIGNhc2VzIHRvCisJd29yayBhcm91bmQgYSBzaW5jZS1maXhlZCByZXN0cmljdGlvbiBpbiBjb21iaW5lLmMKKworCSogcnM2MDAwLm1kIChleHRlbmQqKTogVXNlIERFRklORV9FWFBBTkQgaW5zdGVhZCBvZiBhIHBhdHRlcm4KKwl0aGF0IGdlbmVyYXRlcyB0d28gaW5zbnMuICBSZW1vdmUgKHNpZ25fZXh0ZW5kIChhc2hpZnQgLi4pIC4uLikKKwlhbmQgc2ltaWxhciBwYXR0ZXJuczsgbm8gbG9uZ2VyIG5lZWVkLgorCisJKiByczYwMDAubWQgKGZtYSBpbnN0cnVjdGlvbik6IEFkZCBtaXNzaW5nIHNpbmdsZS1wcmVjaXNpb24gY2FzZS4KKworCSogb3V0LXJzNjAwMC5jIChwcmludF9vcGVyYW5kLCBjYXNlICdzJyBhbmQgJ1MnKTogVHJ1bmNhdGUgdG8gbG93LW9yZGVyCisJNSBiaXRzLgorCisJKiBvdXQtcnM2MDAwLmMgKG91dHB1dF9wcm9sb2csIG91dHB1dF9lcGlsb2cpOiBDb3JyZWN0IGNvZGUgdG8gaGFuZGxlCisJbGFyZ2Ugc3RhY2sgZnJhbWVzOyB1c2VkIDY1NTM1IGluc3RlYWQgb2YgMzI3NjcgYW5kIGhhZCBhIHR5cG8uCisKKwkqIHRtLXJvbXAuaCAoQ0NfSU5fTk9UX1RCKTogRGVsZXRlZC4KKwkqIG91dC1yb21wLmMgKHVwZGF0ZV9jYyk6IE5vIGxvbmdlciBuZWVkIENDX1JFVkVSU0UsIENDX05PTk5FRywgb3IKKwlDQ19OT1RUQklULgorCShwcmludF9vcGVyYW5kKTogUmVtb3ZlIHVzZSBvZiBDQ19JTl9OT1RfVEIuCisJKiByb21wLm1kIChkZWZpbmVfYXR0ciAiY2MiKTogUmVtb3ZlIHJldmVyc2Usbm9ubmVnLCBhbmQgbm90dGJpdC4KKwkobXR0YmkpOiBSZW1vdmUgcmVkdW5kYW50IHBhdHRlcm4uCisJKGNtcHNpKTogRmlyc3QgYXJnIGNhbiBvbmx5IGJlIHJlZ2lzdGVyX29wZXJhbmQuCisJUmVtb3ZlIHNvbWUgdW5uZWVkZWQgQ09NUEFSRSBwYXR0ZXJucy4KKwkKKwkqIHJvbXAubWQgKG1vdmhpKTogVXNlIHplcm8tZXh0ZW5kLCBub3Qgc2lnbi1leHRlbmQgbG9hZC4KKworCSogb3V0LXJvbXAuYzogKGZsb2F0X2NvbnZlcnNpb24pOiBBbGxvdyBDT05TVF9JTlQgYXMgb3BlcmFuZC4KKworCSogb3V0LXJvbXAuYyAoZmlyc3RfcmVnX3RvX3NhdmUpOiBFbnN1cmUgd2Ugc2F2ZSByMTQgaWYgd2UgdXNlIGl0LgorCisJKiBhMjlrLm1kIChkaXZzZjMpOiBGaXggdHlwbyBpbiBuYW1lOyB3YXMgZGl2ZHMzLgorCisJKiB0bS1hMjlrLmg6IEFkZCBuZXcgLW1uby1zdG9yZW0tYnVnIGFuZCBUQVJHRVRfTk9fU1RPUkVNX0JVRy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogLW0yOTA1MCB0dXJucyBvbiAtbW5vLXN0b3JlbS1idWcuCisJKiBhMjlrLm1kOiAoc3RvcmVfbXVsdGlwbGVfYnVnKTogTmV3IHBhdHRlcm4gdG8gd29yayBhcm91bmQgY2hpcCBidWcuCisJKHN0b3JlX211bHRpcGxlX25vX2J1Zyk6IE5ldyBuYW1lIGZvciBvcmlnaW5hbCBwYXR0ZXJuLgorCShzdG9yZV9tdWx0aXBsZSk6IENob29zZSBkZXBlbmRpbmcgb24gVEFSR0VUX05PX1NUT1JFTV9CVUcuCisJKHN0b3JlbSBwYXR0ZXJucyk6IFR3byBjYXNlcywgd2l0aCBhbmQgd2l0aG91dCBidWcuCisKKwkqIGEyOWsubWQgKGV4dGVuZCopOiBEb24ndCBkZWZpbmUgc2luZ2xlIGluc24gZm9yIHNpZ25fZXh0ZW5kLgorCUluc3RlYWQsIHVzZSBERUZJTkVfRVhQQU5ELiAgRGVsZXRlIERFRklORV9TUExJVHMgZm9yIHRoZSBvbGQgcGF0dGVybnMuCisKKwkqIGEyOWsubWQgKGp1bXBmZGVjIHBhdHRlcm4pOiBGaXggdHlwby4KKworCSogdG0tYTI5ay5oLCB0bS1yb21wLmgsIHRtLXJzNjAwMC5oIChDQzFfU1BFQyk6IFJlbW92ZSBvcHRpbWl6YXRpb24KKwlzZWxlY3Rpb25zLgorCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IFR1cm4gb2ZmIGluc24gc2NoZWR1bGluZyBieSBkZWZhdWx0IHVudGlsCisJaXQgaXMgZml4ZWQuCisKKwkqIHRtLWEyOWsuaCwgdG0tcm9tcC5oLCB0bS1yczYwMDAuaCAoU0VUVVBfSU5DT01JTkdfVkFSQVJHUyk6CisJQ29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSBvZiB0aGUgc3BlY2lhbCBhcmd1bWVudCBiZWluZyBvdGhlciB0aGFuCisJdGhlIGZpcnN0IGFyZy4KKworCSogdG0tYTI5ay5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBIHRpbnkgY29uc3RhbnQgKDwgMjU1KQorCWlzIGFsc28gYSB2YWxpZCBhZGRyZXNzLgorCisJKiB0bS1hMjlrLmgsIHRtLXJvbXAuaCwgdG0tcnM2MDAwLmggKEJZVEVfTE9BRFNfWkVST19FWFRFTkQpOiBBZGQgdG8KKwlzdXBwb3J0IGNvbWJpbmUuYyBpbiBkZXZlbG9wbWVudC4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplLCBjYW5fcmV2ZXJzZV9jb21wYXJpc29uX3AsIGRlbGV0ZV9qdW1wKToKKwlDb25zaXN0ZW50bHkgYWxsb3cgTk9URXMgYmV0d2VlbiB0aGUgc2V0IGFuZCB1c2Ugb2YgQ0MwLgorCSogcmVvcmcuYyAoZGVsZXRlX3NjaGVkdWxlZF9qdW1wKTogTGlrZXdpc2UuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBQYXNzIGluIFVOU0lHTkVEUDsgY2FuJ3QgZGVyaXZlIGl0IGZyb20KKwljb21wYXJpc29uIGNvZGUuCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBBZGQgVU5TSUdORURQIGFyZyB0byBlbWl0X3N0b3JlX2ZsYWcgY2FsbC4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IExpa2V3aXNlLgorCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IExpa2V3aXNlLgorCisJKiBsb2NhbC1hbGxvYy5jIChyZXF1aXJlc19pbm91dF9wKTogTmV3IGZ1bmN0aW9uLgorCShibG9ja19hbGxvYyk6IFVzZSBoaWdoLXByaW9yaXR5IHByZWZlcmVuY2VzIGlmIHdlIGhhdmUgYSBoYXJkCisJcmVnaXN0ZXIgdXNlZCBpbiBhbiBpbnNuIHRoYXQgcmVxdWlyZXMgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yCisJaW5wdXQgYXMgZm9yIHRoZSBvdXRwdXQuCisJKGNvbWJpbmVfcmVncyk6IFJlbmFtZSBhcmd1bWVudCBDT1BZIHRvIE1BWV9TQVZFX0NPUFkuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIE1VTFQpOiBDb252ZXJ0IG11bHRpcGx5CisJYnkgcG93ZXIgb2YgdHdvIHRvIHNoaWZ0LgorCShjc2VfaW5zbik6IERvbid0IHNoYXJlIHJ0eCBvYnRhaW5lZCBmcm9tIHRoZSBoYXNoIHRhYmxlOyBjb3B5IGl0LgorCitTYXQgRmViIDIzIDAwOjI3OjI2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBydGxhbmFsLmMgKGRlYWRfb3Jfc2V0X3ApOiBEb24ndCBjaGVjayBmb3IgUkVHX0lOQy4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogKHN1YnJlZzptMSAocmVnOm0yIC4uLikgLi4uKSB3aXRoIE0xIHdpZGVyCisJdGhhbiBNMiBpcyBhbHNvIGEgcGFyYWRveGljYWwgU1VCUkVHLgorCitGcmkgRmViIDIyIDE0OjQzOjQ0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKHBvc3NpYmxlX2dyb3VwX3ApOiBBZGQgbWlzc2luZyBmb3J3YXJkIGRlY2xhcmF0aW9uLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzLCBjYXNlIFBMVVMpOiBFbnN1cmUgd2UgaGFuZGxlIHRoZQorCWNhc2Ugb2YgKHBsdXMgcmVnMSByZWcyKSB3aGVyZSBSRUcxIGlzIGVsaW1pbmFibGUgYW5kIFJFRzIgaXMKKwlwc3VlZG8gdGhhdCBkaWRuJ3QgZ2V0IGEgaGFyZCByZWcgYW5kIGhhcyByZWdfZXF1aXZfY29uc3RhbnQgbm9uemVyby4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgcmVsb2FkX25lZWRlZF9mb3JfbXVsdGlwbGUsCisJdGhlIHJlbG9hZCBjYW4ndCBiZSBpbnB1dC1vbmx5IG9yIG91dHB1dC1vbmx5LgorCShlbWl0X3JlbG9hZF9yZWdzKTogQXZvaWQgcmVnbm9fZGVhZF9wLgorCSogY29tYmluZS5jIChyZWdub19kZWFkX3ApOiBGdW5jdGlvbiBkZWxldGVkLgorCisJKiBNYWtlZmlsZS5pbiAobWFrZXRlc3QpOiBGaW5pc2ggcmVuYW1pbmcgY29uZmlnIHRvIGNvbmZpZ3VyZS4KKworCSogZ2NjLmMgKGxvb2t1cF9jb21waWxlcik6IENyZWF0ZSBhIG5ldyBlbnRyeSB0byByZXByZXNlbnQKKwl0aGUgcmVzdWx0IG9mIHNlYXJjaGluZyBmb3IgYW4gYWxpYXMgZW50cnkuCisKKwkqIHJlbG9hZC5jIChjb21iaW5lX3JlbG9hZHMpOiBTd2FwIGFyZ3MgdG8gcmVnX292ZXJsYXBfbWVudGlvbmVkX3AuCisKK0ZyaSBGZWIgMjIgMDk6NDA6NTAgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1wYXJzZS55IChiYXNlX2NsYXNzX2xpc3QpOiBSZS1maXggcHJlY2VkZW5jZSBzbyB3ZSBjYW4gdXNlIE1JLgorCisJKiBjcGx1cy1leGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFB1c2ggZXhjZXB0aW9uIGN0b3JzCisJYW5kIGR0b3JzIGludG8gc2NvcGUgc28gdGhleSBjYW4gYmUgaW5saW5lZC4KKworRnJpIEZlYiAyMiAwODowMzo0NyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5lbWl0LmMgKG91dHB1dF9pbml0X21vdl9vcHRhYik6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IEhhdmUgaW5zbi1lbWl0LmMgaW5jbHVkZSBpbnNuLWNvZGVzLmguCisJQ2FsbCBvdXRwdXRfaW5pdF9tb3Zfb3B0YWIuCisJKiBvcHRhYnMuYyAoZ2VuX21vdmVfaW5zbik6IEhhbmRsZSBtb3ZpbmcgTU9ERV9DQyBtb2Rlczsgd2UgbWF5IGhhdmUKKwl0byBmaW5kIGEgZGlmZmVyZW50IG1vZGUgdG8gZG8gdGhpcyBpbi4KKwkoaW5pdF9vcHRhYnMpOiBUcnkgdG8gaW5pdGlhbGl6ZSBDQ21vZGUgaW4gbW92X29wdGFiOyBpZiB3ZSBoYXZlCisJRVhUUkFfQ0NfTU9ERVMsIGNhbGwgaW5pdF9tb3Zfb3B0YWIuCisJKiBNYWtlZmlsZS5pbiAoaW5zbi1lbWl0Lm8pOiBOb3cgZGVwZW5kcyBvbiBpbnNuLWNvZGVzLmguCisKKwkqIHJ0bC5oIChnZXRfbGFzdF9pbnNuX2FueXdoZXJlKTogQWRkIG1pc3NpbmcgZGVjbGFyYXRpb24uCisKKwkqIHN0bXQuYzogTm93IGluY2x1ZGVzIGhhcmQtcmVnLXNldC5oIChmb3Igbl9ub25fZml4ZWRfcmVncykuCisJKHByZXNlcnZlX3N1YmV4cHJlc3Npb25zX3ApOiBSZW5hbWVkIGZyb20gaW5zaWRlX2xvb3AuCisJQWx3YXlzIHJldHVybiB0cnVlIGlmIG9wdGltaXplID49IDI7IGFsd2F5cyByZXR1cm4gZmFsc2UgaWYKKwlvcHRpbWl6ZSA9PSAwLglJZiBvcHRpbWl6ZSA9PSAxLCBvbmx5IHJldHVybiB0cnVlIGlmIHdlIGFyZW4ndAorCXZlcnkgZmFyIGludG8gYSBsb29wIGluc3RlYWQgb2Ygd2hlbmV2ZXIgd2UgYXJlIGluIGFueSBsb29wLgorCSogTWFrZWZpbGUuaW4gKHN0bXQubyk6IE5vdyBpbmNsdWRlcyBoYXJkLXJlZy1zZXQuaC4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBVc2UgcHJlc2VydmVfc3ViZXhwcmVzc2lvbnNfcCBpbnN0ZWFkIG9mCisJaW5zaWRlX2xvb3AuCisJT25seSBzZXQgVEFSR0VUIHRvIFNVQlRBUkdFVCBpZiBUQVJHRVQgaXNuJ3QgYSBwc2V1ZG8gcmVnaXN0ZXIuCisJKGV4cGFuZF9leHByLCBjYXNlIFJFQUxfQ1NUKTogRG9uJ3QgY2FsbCBmb3JjZV9yZWc7IG5vdyBkb25lIGluCisJZXhwYW5kX2Jpbm9wLCBpZiByZXF1aXJlZC4KKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGV4cGFuZF90d292YWxfYmlub3AsIGVtaXRfY21wX2luc24pOgorCUlmIGFyZyBpcyBleHBlbnNpdmUgY29uc3RhbnQgYW5kIHByZXNlcnZlX3N1YmV4cHJlc3Npb25zX3AgaXMgdHJ1ZSwKKwlmb3JjZSBpdCBpbnRvIGEgcmVnaXN0ZXIuCisJKiBvdXQtc3BhcmMuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogQ2FsbCBwcmVzZXJ2ZV9zdWJleHByZXNzaW9uc19wCisJaW5zdGVhZCBvZiBpbnNpZGVfbG9vcC4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncywgY2FzZSBTVUJSRUcpOiBDb3JyZWN0IHRlc3QgZm9yIHBhcmFkb3hpY2FsCisJU1VCUkVHLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBJZiBlbnRyeSByZWZlcnMgdG8gYSBkZWxldGVkIGxhYmVsLAorCXdyaXRlIGEgemVybyBpbnN0ZWFkIG9mIHRoZSB1bmRlZmluZWQgbGFiZWwuCisKK0ZyaSBGZWIgMjIgMDI6NDk6MjQgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IHdhdGNoLmNvbSkKKworCSogUmV2ZXJzZWQgYWxsIGNoYW5nZXMgZGF0ZWQgMjAgRmVicnVhcnkuCisJKiBjcGx1cy10ZW1wbGF0ZS5jIChwZW5kaW5nX3RlbXBsYXRlX2V4cGFuc2lvbik6IE5ldyBmdW5jdGlvbjsKKwlnaXZlbiB0ZW1wbGF0ZSBuYW1lLCByZXR1cm5zIGNsYXNzIG5hbWUgb2YgZXhwYW5zaW9uIGluIHByb2dyZXNzLgorCSogY3BsdXMtcGFyc2UueSAoUFRZUEVOQU1FIC0+IHR5cGVzcGVjKTogQ2FsbCBpdC4KKwkoJ34nIFBUWVBFTkFNRSAtPiBub3R5cGVfZGVjbGFyYXRvcik6IERpdHRvLgorCitUaHUgRmViIDIxIDE1OjE3OjEzIDE5OTEgIENyYWlnIEJ1cmxleQkoYnVybGV5IGF0IGdlZWNoLmFpLm1pdC5lZHUpCisKKwkqIGMtY29tbW9uLmMgKGNoZWNrX2Nhc2VfdmFsdWUpOiBJZiB2YWx1ZSBpcyBOVUxMX1RSRUUsIHJldHVybiBpdAorCXdpdGhvdXQgYW55IGZ1cnRoZXIgY2hlY2tpbmcuCisKKwkqIHN0bXQuYyAocHVzaGNhc2VfcmFuZ2UpOiBJZiB2YWx1ZTEgaXMgTlVMTF9UUkVFLCBzdWJzdGl0dXRlCisJbWluaW11bSB2YWx1ZSBmb3IgdGhlIHR5cGUsIGlmIHZhbHVlMiBpcyBOVUxMX1RSRUUsIHN1YnN0aXR1dGUKKwltYXhpbXVtIHZhbHVlIGZvciB0aGUgdHlwZSwgZnJvbSB0aGVuIG9uIGFzc3VtZSBib3RoIGFyZSBub3QgTlVMTF9UUkVFLgorCVRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIHByb3ZpZGUgbWluaW1hbCBzdXBwb3J0IGZvciBjYXNlIHJhbmdlcy4KKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBGb3IgZXhwbGljaXQgYXJyYXkgZWxlbWVudCBpbml0aWFsaXplcgorCWNhc2UsIGNoYW5nZSBjaGVjayBhZ2FpbnN0IG1heCB2YWx1ZSBvZiBkb21haW4gc28gaW5kZXggbWF5IGVxdWFsIGl0LgorCUZvciBhcnJheSBlbGVtZW50IGluaXRpYWxpemF0aW9uLCBnaXZlIG5leHQgaW5pdGlhbGl6ZXIgYSBjaGFuY2UgdG8KKwlvdmVycmlkZSB0aGUgY2hvaWNlIG9mIG5leHQgaW5kZXggYmVmb3JlIGZhbGxpbmcgb3V0IG9mIGxvb3AgYmVjYXVzZQorCW5leHQgaW5kZXggaXMgb3V0IG9mIHJhbmdlLiAgRm9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgZ2l2ZSBuZXh0CisJaW5pdGlhbGl6ZXIgYSBzaW1pbGFyIGNoYW5jZSBiZWZvcmUgZmFsbGluZyBvdXQgb2YgbG9vcCBiZWNhdXNlIG5vCisJbW9yZSBmaWVsZHMgZXhpc3QuCisKKwkqIHJlbG9hZDEuYyAocG9zc2libGVfZ3JvdXBfcCk6IE5lZWRlZCBhIGZvcndhcmQgZGVjbCAoc3RhdGljKS4KKworVGh1IEZlYiAyMSAxNDozNzowMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKToKKwlEb24ndCBtYWtlIGJpdGZpZWxkIHR5cGUgdW5zaWduZWQgaWYgY29tZXMgZnJvbSB0eXBlZGVmLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERvbid0IHJlcXVpcmUgSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVAorCWlmIGNhbm5vdCBlbGltaW5hdGUgdGhlIGZyYW1lIHBvaW50ZXIuCisKKwkqIGk4NjAubWQgKGNicmFuY2gsIGludmVyc2VfY2JyYW5jaCk6IFVzZSBlcSB0byB0ZXN0IGNjMC4KKwkobmVnYXRlZCBicmFuY2ggcGF0dGVybnMpOiBOZXcgcGF0dGVybnMuCisKKwkqIHRtLWk4NjAuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogVXNlIHNpemVfaW50LCBub3QgYnVpbGRfaW50LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNhdmUgYW5kIHJlc3RvcmUgbm90ZXMgYXJvdW5kIGZpbmRfcmVsb2Fkcy4KKworCSogdG0tc3VuMm9zNC5oIChMSU5LX1NQRUMpOiBOZXcgbWFjcm8uCisJKiB0bS1zdW4zODZpLmggKExJTktfU1BFQyk6IFVuZGVmIGJlZm9yZSByZWRlZmluaW5nLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBDaGVjayBmb3IgLTIsIG5vdCAtMSwgYXMgdmFsdWUgb2YgbG9va3VwX2ltcG9ydC4KKworCSogYy1wYXJzZS55IChpbml0bGlzdCk6IEZpeCB0eXBvLgorCitNb24gRmViIDE4IDAyOjUwOjM4IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFRyeSB0byBjb21lIHVwIHdpdGggYmV0dGVyIG1hZ2ljCisJZm9yIGltcGxpY2l0bHkgZ2xvYmFsaXppbmcgY2xhc3NlcyBpbXBsaWNpdGx5IGRlY2xhcmVkIGluIGNsYXNzCisJc2NvcGUuCisKK1N1biBGZWIgMTcgMDk6Mjc6MzggMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy10cmVlLmMgKHZpcnR1YWxfb2Zmc2V0KTogTmV3IGZ1bmN0aW9uLglSZXR1cm5zIHRoZSBvZmZzZXQKKwlvZiBhIGJhc2VjbGFzcyB0aGF0IGlzIHZpcnR1YWwgb3IgY29tZXMgZnJvbSBhIHZpcnR1YWwgYmFzZWNsYXNzLCBvcgorCU5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBiYXNlY2xhc3MuCisJKiBjcGx1cy1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJpZXMpOiBDYWxsIHRoaXMgZnVuY3Rpb24gaW5zdGVhZAorCW9mIGB2aXJ0dWFsX21lbWJlcicuICBgdmlydHVhbF9tZW1iZXInIGNhbiByZXR1cm4gdGhlIHdyb25nIHRoaW5nIGlmCisJd2UgdHJ5IHRvIHVzZSBpdCBmb3IgYW4gb2Zmc2V0IGNvbXB1dGF0aW9uIG9mIGEgYmFzZWNsYXNzIHdoaWNoIGlzCisJbm90IHN0cmljdGx5IGEgdmlydHVhbCBiYXNlY2xhc3MuCisKK1NhdCBGZWIgMTYgMDY6MjE6MDMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IFVzZSBjb3JyZWN0IHJ0eF9jb2RlIGZvciB0aGUKKwluZXcgb3BlcmF0aW9uIHdoZW4gY29tbXV0aW5nIG9wZXJhbmRzLgorCUdlbmVyYWxpemUgdG8gY29tbXV0ZSBvcGVyYW5kcyBvbiBjb21wYXJpc29uIG9wZXJhdGlvbi4KKworRnJpIEZlYiAxNSAyMzowMToyNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGdlZWNoLmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoaW5pdGxpc3QpOiBGaW5pc2ggY2hhbmdpbmcgYGNhc2UgTjonIHRvIGBbTl0nLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogVXBkYXRlIHJlZ19maXJzdF91c2UuICBGbHVzaCB1c2VsZXNzIGxpbmtzLgorCitUaHUgRmViIDE0IDE3OjA2OjQ0IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCB3YXRjaC5jb20pCisKKwkqIGNwbHVzLXBhcnNlLnkgKHRlbXBsYXRlX3Bhcm0pOiBOZXcgZGVyaXZhdGlvbiBmcm9tIGBjbGFzcyBJRCcsCisJZm9yIGNvbnNpc3RlbnQgcmV0dXJuIG9mIGBpZGVudGlmaWVyX25vZGUnIG5vZGVzIHdpdGggYGNsYXNzIEEgOgorCUInIGNhc2UuCisJKiBjcGx1cy10ZW1wbGF0ZSAoZW5kX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IE5vdGhpbmcgdG8gc3RyaXAgb2ZmIG9mCisJaWRlbnRpZmllcl9ub2RlcyBub3cuCisJKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IFN0cmlwIG9mZiBvbmUgbGV2ZWwgb2YgdHJlZV9saXN0LAorCWRpc2NhcmRpbmcgKGZvciBub3cpIHRoZSByZXF1aXJlZCBiYXNlIGNsYXNzLiAgRG9uJ3QgbmVlZCB0byBydW4KKwl0aHJvdWdoIGdyb2sqIGFueSBtb3JlLgorCitTdW4gRmViIDEwIDE5OjIzOjIxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobWFpbiwgcHJvY2Vzc19jb21tYW5kLCBkZWZhdWx0X2NvbXBpbGVycyk6IEZpeCB0eXBvcy4KKworU2F0IEZlYgkgOSAxNTowNjo0MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IEhhbmRsZSBzZXBhcmF0ZSBhcmdzIGZvciAtQiwgLWIsIC1WLgorCisJKiBnY2MuYyAobG9va3VwX2NvbXBpbGVyKTogTmV3IGZ1bmN0aW9uLiAgSGFuZGxlcyBhbGlhcyBlbnRyaWVzLgorCShtYWluKTogQ2FsbCB0aGF0LgorCShkZWZhdWx0X2NvbXBpbGVycyk6IE1ha2UgYWxsIHJlYWwgc3VmZml4ZXMgaW50byBhbGlhcyBlbnRyaWVzLgorCShpbmZpbGVzKTogTm93IGEgdmVjdG9yIG9mIHN0cnVjdHVyZXMsIGNvbnRhaW5pbmcgc3BlY2lmaWVkIGxhbmd1YWdlLgorCShwcm9jZXNzX2NvbW1hbmQpOiBIYW5kbGUgLXggdG8gc3BlY2lmeSBsYW5ndWFnZS4KKwkobWFpbik6IFVzZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgaWYgYW55LgorCitGcmkgRmViCSA4IDE4OjMxOjAwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBTZXQgVFJFRV9VU0VEIHdoZW4gY3JlYXRlIENPTVBPVU5EX0VYUFIuCisJKiBzdG10LmMgKHdhcm5faWZfdW51c2VkX3ZhbHVlKTogRG9uJ3Qgd2FybiBpZiBUUkVFX1VTRUQuCisJKiBjLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IEhhbmRsZSBtdWx0aXBsZSBjYXN0cyBpbnNpZGUgKysuCisKK0ZyaSBGZWIJIDggMDc6Mzc6MjQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVhbC5oIChkY29uc3QyKTogTmV3IHZhcmlhYmxlLgorCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBJbml0aWFsaXplIGRjb25zdDIuCisJKiB0cmVlLmMgKHJlYWxfdHdvcCk6IE5ldyBmdW5jdGlvbi4KKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBGb2xkIEZMT0FULCBGTE9BVF9FWFRFTkQsIGFuZAorCUZMT0FUX1RSVU5DQVRFLgorCShzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogQ29udmVydCB4KjIgdG8geCt4LgorCShjc2VfaW5zbik6IEhhbmRsZSBjYXNlIHdoZXJlIGNvbnN0YW50IGVxdWl2YWxlbnQgaXMgaW4gdGFibGUuCisJRml4IG1pbm9yIGJ1ZyB3aXRoIG1lcmdpbmcgc3JjX3JlbGF0ZWRfZWx0LgorCSogZm9sZC1jb25zdC5jIChmb2xkKTogSWYgY29tbXV0YXRpdmUgb3BlcmF0aW9uLCBtb3ZlIGEgY29uc3RhbnQKKwlmaXJzdCBvcGVyYW5kIHRvIHRoZSBzZWNvbmQgb3BlcmFuZC4KKwlSZW1vdmUgdGVzdHMgb2YgY29uc3RhbnRzIGFzIGZpcnN0IG9wZXJhbmQgZm9yIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMuCisJQ29udmVydCB4KjIgdG8geCt4LgorCitGcmkgRmViCSA4IDAzOjA3OjM0IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCB3YXRjaC5jb20pCisKKwkqIGNwbHVzLXB0cmVlLmMgKHByaW50X2xhbmdfZGVjbCk6IENvcnJlY3RlZCBhcmd1bWVudCBsaXN0LiAgUHJpbnQKKwlhZGRyZXNzIG9mIHRlbXBsYXRlIGluZm8gZm9yIFRFTVBMQVRFX0RFQ0wgbm9kZXMuCisKKwkqIGNwbHVzLWRlY2wuYyAoc2V0X2N1cnJlbnRfbGV2ZWxfdGFnc190cmFuc3BhcmVuY3kpOiBOZXcKKwlmdW5jdGlvbiwgZm9yIGFsdGVyaW5nIHRhZy10cmFuc3BhcmVuY3kgb2YgYSBjb250ZXh0LgorCisJKiBjcGx1cy1wYXJzZS55IChQUkVfUEFSU0VEX01FVEhPRF9ERUYpOiBXYXMgdW51c2VkOyBub3cgZ29uZS4KKwkodGVtcGxhdGVfaW5zdGFudGlhdGlvbik6IEhhbmRsZSAkLXJlZmVyZW5jZXMgY29ycmVjdGx5LiAgR2VuZXJhdGUKKwlhIGNsYXNzX2hlYWQtbGlrZSB2YWx1ZSBmb3IgTEMgYWN0aW9ucyB0byBvcGVyYXRlIG9uLgorCShtYXliZV9iYXNlX2NsYXNzX2xpc3QpOiBOZXcgbm9uLXRlcm1pbmFsOiBjb2xvbiBhbmQgYmFzZSBjbGFzcworCWxpc3QsIG9yIGVtcHR5LgorCShuYW1lZF9jbGFzc19oZWFkKTogVXNlIGl0LgorCSh1bm5hbWVkX2NsYXNzX2hlYWQpOiBVc2UgJ3snLCBub3QgTEMuCisJKGNsYXNzX2hlYWQpOiBJZiB0ZW1wbGF0ZV9pbnN0YW50aWF0aW9uIGZvdW5kLCB1c2UgaXRzIHZhbHVlLgorCSh0ZW1wbGF0ZV9hcmcpOiBBcHBseSBncm9rdHlwZW5hbWUgdG8gdHlwZW5hbWUgYXJncy4KKworCSogY3BsdXMtdGVtcGxhdGUuYyAodGVtcGxhdGVfdGV4dF9vYnN0YWNrKTogRGVsZXRlZCwganVzdCB1c2UKKwlwZXJtYW5lbnRfb2JzdGFjayBpbnN0ZWFkLgorCShpbml0X3RlbXBsYXRlKTogRGVsZXRlZDsgY2FsbGVycyBjaGFuZ2VkLgorCShjdXJyZW50X3RlbXBsYXRlX2luZm8pOiBOZXcgdmFyaWFibGU6IHBvaW50ZXIgdG8gbGFzdC1zYXZlZAorCXRlbXBsYXRlIGluZm8gcmVjb3JkLgorCShlbmRfdGVtcGxhdGVfZGVjbCk6IFVzZSBERUNMX05BTUUsIERFQ0xfQVJHVU1FTlRTLAorCURFQ0xfTEFOR19TUEVDSUZJQywgcmF0aGVyIHRoYW4gVFJFRV9PUEVSQU5Ecy4JU2F2ZSBtb3N0IG9mCisJdGVtcGxhdGUgaW5mbyBoZXJlLgorCShyZWluaXRfcGFyc2VfZm9yX3RlbXBsYXRlKTogT25seSBzYXZlIHRleHQgaGVyZSwgaW4KKwlhbHJlYWR5LWFsbG9jYXRlZCB0ZW1wbGF0ZSBpbmZvIHJlY29yZC4KKwkobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLgorCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IEZpbmFsbHkgd3JpdHRlbi4KKworVGh1IEZlYgkgNyAyMjowNjo1NiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogdG0taTM4NnY0LmggKEFTTV9PVVRQVVRfQ09NTU9OKTogU3BlY2lmeSByb3VuZGluZyBpbiB0aGUgb3V0cHV0LgorCShBU01fT1VUUFVUX0xPQ0FMKTogVXNlIC5sb2NhbCBhbmQgLmNvbW0uCisKKwkqIHRtLW5ld3MuaCAoRlVOQ1RJT05fUFJPTE9HVUUpOiBDb3JyZWN0IHN5bnRheCBvZiBsaW5rIGluc24uCisJKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IFVzZSBwZXJpb2QsIG5vdCBjb2xvbiwgYmVmb3JlIGluZGV4IHJlZyB3aWR0aC4KKworCSogc3RtdC5jIChwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOgorCURvbid0IHdhcm4gZm9yIGNvZGUgYmVmb3JlIGZpcnN0IGBjYXNlJyBpZiB0aGVyZSBpcyBhIGxhYmVsIG9uIGl0LgorCitUaHUgRmViCSA3IDA2OjIzOjEwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChpbml0aWFsaXplX2Zvcl9pbmxpbmUpOiBBY2NlcHQgQ09QWSBhcmd1bWVudC4KKwlPbmx5IGNvcHkgcGFyYW1ldGVyIERFQ0xfUlRMIGlmIENPUFkgbm9uLXplcm87IGluIHRoYXQgY2FzZSwKKwlhbHNvIHJlcGxhY2UgREVDTF9SVEwgd2l0aCBjb3B5LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkoY29weV9kZWNsX3J0bHMpOiBOZXcgZnVuY3Rpb24uCisJKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogVXNlIGNvcHlfZGVjbF9ydGxzIHRvIGNvcHkgTUVNIERFQ0xfUlRMcworCWluIHRoZSBmdW5jdGlvbi4KKwlDb3B5IGFkZHJlc3Mgb2YgcHNldWRvcyBpZiB0aGV5IGFyZSBhIE1FTS4KKworV2VkIEZlYgkgNiAxOToxOToyNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IE5vIHdhcm4gZm9yIFJTSElGVCBieSAwLgorCitXZWQgRmViCSA2IDE3OjM3OjIzIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiAgQWNjZXB0IGEgbG9jYXRpb24gaW4gcnR4IGluc3RlYWQKKwlvZiBhbiBydHguCisJVW5sZXNzIC1mZm9yY2UtbWVtLCBpZiBhbiBpbnNuIGlzIHZhbGlkIHdpdGggTUVNLCBsZWF2ZSBpdCBhbG9uZS4KKwlSZXdvcmsgWkVST18gYW5kIFNJR05fRVhUUkFDVCBjYXNlcyB0byBwcm9wZXJseSBkbyBhZGp1c3RtZW50cworCWFuZCBnZW5lcmFsaXplIHRvIHN1cHBvcnQgb3RoZXIgdGhhbiBRSW1vZGUgTUVNcy4KKwkoZml4dXBfdmFyX3JlZnNfaW5zbnMpOiBDaGFuZ2UgY2FsbCB0byBmaXh1cF92YXJfcmVmc18xLgorCitXZWQgRmViCSA2IDA4OjE0OjIxIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kIChjbXApOiBVc2UgcmVnX29yXzBfb3BlcmFuZCB0byBhdm9pZCBzd2FwcGVkIGNvbXBhcmVzLgorCShjYWxsIHBhdHRlcm5zKTogUHV0IHVzZSBvZiByMSBpbiBhIHBhcmFsbGVsIGNvbnN0cnVjdC4KKwkobXVsdGlwbHkgYW5kIGRpdmlkZSBieSBhIHBvd2VyIG9mIHR3byk6IE5vdyBqdXN0IG11bHRpcGx5LiAgVGhlCisJbmV3IGNvbWJpbmVyIHdpbGwgY2hhbmdlIGRpdmlkZSBieSBhIHBvd2VyIG9mIHR3byBpbnRvIG11bHRpcGx5LgorCShtb3ZoaSwgbW92cWkpOiBVc2UgemVyby1leHRlbmQgbG9hZC4KKwkqIHRtLW04OGsuaCAoQllURV9MT0FEU19aRVJPX0VYVEVORCk6IFVzZSBpdC4KKwkoSCBjb25zdHJhaW50KTogQ2hhbmdlZCB0byBtZWFuIG9uZSBvciB0d28uCisJKiBvdXQtbTg4ay5jOiBVc2UgdGhlIHByb3BlciBpbmNsdWRlcyBmb3Igbm9uLVVTRyBzeXN0ZW1zLgorCSogeG0tbTg4ay5oOiBJbmNsdWRlIHRtLmggYXQgdGhlIGVuZC4JCisKK1dlZCBGZWIJIDYgMDI6MjQ6MzggMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKHB1c2h0YWcpOiBEb24ndCB0cnkgdG8gbmVzdCBjbGFzc2VzIGZyb20gbm9uLUMrKworCWxhbmd1YWdlIHNjb3Blcy4KKworV2VkIEZlYgkgNiAwMTozMzoxNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBEb24ndCBjaGFuZ2UgZGl2IGludG8gbXVsdC4KKworVHVlIEZlYgkgNSAxMDo1OTo1MyAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy1wYXJzZS55ICh0ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogU3VwcGx5IGJhc2UgY2xhc3MgbGlzdAorCWFuZCB1c2UgZ3V0cyBvZiBjbGFzcyBkZWNsYXJhdGlvbi4gIFVudGVzdGVkOyB3aWxsIGhhdmUgdG8gYmUKKwlmaXhlZCB1cCB0byBkZWFsIHdpdGggdGVtcGxhdGUgY29udGV4dCBtYW5pcHVsYXRpb25zLgorCitUdWUgRmViCSA1IDAwOjUyOjU3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQorCisJKiBjLWNvbW1vbi5jIChjb21iaW5lX3N0cmluZ3MpOiBGaW5pc2ggZml4aW5nIHdpZGUgc3RyaW5ncy4KKworCSogcmVsb2FkMS5jIChwb3NzaWJsZV9ncm91cF9wKTogTmV3IHN1YnJvdXRpbmUuCisJKHJlbG9hZCk6IERvbid0IGtpbGwgbGFzdCBncm91cCB3aGVuIGxvb2tpbmcgZm9yIGEgbm9uLWdyb3VwLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IElmIGVtaXQgY21wIGluc24sIGZvcmNlIG9wMCBpbnRvIHJlZy4KKworCSogb2JqYy1wYXJzZS55IChpbml0X2xleCwgeXlsZXgpOiBtYXhfd2lkZSBub3cgbWVhc3VyZWQgaW4gY2hhcnMuIAorCSh5eWxleCk6IFRyZWF0IFxyIGFzIHdoaXRlc3BhY2UgaWYgdHJhZGl0aW9uYWwuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBBZGQgbWlzc2luZyBhcmcgZm9yIGRieG91dF9maW5pc2guCisKKwkqIG9iamMtYWN0aW9ucy5jIChsYW5nX2ZpbmlzaCk6IE5ldyBkdW1teSBmdW5jdGlvbi4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBSZWNvZ25pemUgb3RoZXIgbmFtZXMgZm9yIHNldGptcC1saWtlIGZucy4KKworCSogZ2NjLmMgKG1haW4pOiBVc2Ugb2JzdGFja19pbml0LCBub3QgZ2NjX29ic3RhY2tfaW5pdC4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3plcm9zKTogTmV3IGZ1bmN0aW9uLgorCUFsbCBjYWxscyB0byBBU01fT1VUUFVUX1NLSVAgZWxzZXdoZXJlIG5vdyB1c2UgdGhpcyBmdW5jdGlvbi4KKwlIYW5kbGUgQVNNX05PX1NLSVBfSU5fVEVYVC4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBVc2UgYXNzZW1ibGVfemVyb3MuCisJKiBmaW5hbC5jIChlbmRfZmluYWwpOiBMaWtld2lzZS4KKwkqIHRtLTNiMS5oLCB0bS1hdHQzODYuaCwgdG0tbW90MzMwMC5oIChBU01fTk9fU0tJUF9JTl9URVhUKToKKwlEZWZpbmUgYXMgMS4KKwkqIHRtLTNiMS5oIChBU01fT1VUUFVUX1NLSVApOiBEb24ndCBkZWFsIHdpdGggb3V0cHV0dGluZyB6ZXJvcy4KKworTW9uIEZlYgkgNCAyMDozNzozMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZDogVXNlICUkIGFuZCAlJiB3aGVyZSBhcHByb3ByaWF0ZS4KKwkoc3BlY2lhbCBmbG9hdF90cnVuY2F0ZSBwYXR0ZXJuKTogTmV3LCBmb3IgNjgwNDAuCisJKDY4ODgxIERGIG11bHRpcGx5IHJlY29nbml6ZXJzKTogQXZvaWQgZnNjYWxlIGlmIDY4MDQwLiAKKwkoNjg4ODEgU0YgbXVsdGlwbHkgcmVjb2duaXplcnMpOiBBdm9pZCBmc2dsbXVsIGlmIDY4MDQwLgorCisJKiB0bS1uZXh0LmggKFNFQ1RJT05fRlVOQ1RJT04pOiBTaW1wbGlmeTsgcmVtb3ZlIGxhc3QgYXJnLiAKKwkoRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOiBSZXdyaXRlIHRvIGdvIHdpdGggdGhhdCBjaGFuZ2UuIAorCitNb24gRmViCSA0IDE4OjIyOjU0IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKGxpbmtfY2MwX2lzbnMpOiBOZXcgZnVuY3Rpb24uCisJKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzLCBmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogQ2FsbCBpdC4KKwkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IERvbid0IG1ha2UgUkVHX0NDX1NUQVRVUyBub3Rlcy4KKwkoZGVsZXRlX3NjaGVkdWxlZF9qdW1wKTogVXNlIFJFR19DQ19TRVRURVIgaW5zdGVhZCBvZiBSRUdfQ0NfU1RBVFVTLgorCUNvcnJlY3RseSBsb2NhdGUgY29tcGFyZSBpbnNuIGluIENDMCBjYXNlLgorCShzdGVhbF9kZWxheV9saXN0X2Zyb21fdGFyZ2V0KTogRG9uJ3Qgc3RlYWwgYW4gaW5zbiB0aGF0IHNldHMgY2MwOworCXdlIGNhbid0IHNhZmVseSBjb3B5IGl0LgorCShmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogQ2FuJ3QgcHV0IGluc24gdGhhdCBzZXRzIENDMCBpbiBkZWxheSBzbG90CisJaWYgd2UgZG9uJ3Qgb3duIGl0cyB0aHJlYWQ7IHRoaXMgd291bGQgb3RoZXJ3aXNlIHJlcXVpcmUgY29weWluZyBpdC4KKwkocmVsYXhfZGVsYXlfc2xvdHMpOiBEb24ndCBjb2xsYXBzZSBqdW1wIHRvIG5leHQgaW5zbiBpZiBpdCBoYXMgYQorCWNjMC1zZXR0aW5nIGluc24gaW4gYSBkZWxheSBzbG90LgorCisJKiByZW9yZy5jICh1cGRhdGVfYmxvY2spOiBBY2NlcHQgbG9jYXRpb24gdG8gcGxhY2UgVVNFIG1hcmtlcjsgdXNlIGlmCisJSU5TTiBpcyBpbiBhIGRlbGF5IHNsb3QuCisJKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBkZWxldGVkIHRoZSBzdGFydAorCW9mIHRoZSBiYXNpYyBibG9jayB0aGF0IHdhcyBwcmV2aW91c2x5IHVzZWQgZm9yIGEgdGFyZ2V0LgorCUlnbm9yZSBpbnNucyB3aXRoIElOU05fRlJPTV9UQVJHRVRfUC4KKwkob3B0aW1pemVfc2tpcCwgdHJ5X21lcmdlX2RlbGF5X2luc25zLCBmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6CisJUGFzcyBuZXcgYXJndW1lbnQgdG8gdXBkYXRlX2Jsb2NrLgorCSh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMsIHJlZHVuZGFudF9pbnNuX3ApOiBDbGVhciBJTlNOX0ZST01fVEFSR0VUX1AKKwl0byBzaG93IHRoYXQgdGhpcyBpbnNuIHdpbGwgYmUgdXNlZCBpbiBib3RoIHBhdGhzIG9mIHRoZSBicmFuY2guCisJKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IEFkZCBjYWxscyB0byB1cGRhdGVfYmxvY2sgZm9yIGluc25zIGRlbGV0ZWQKKwlmcm9tIGRlbGF5IHNsb3RzLgorCisJKiByZW9yZy5jIChtb3N0bHlfdHJ1ZV9qdW1wKTogSWYgbm8ganVtcHMgYmV0d2VlbiB0YXJnZXQgYW5kIGVuZCBvZgorCWZ1bmN0aW9uLCBwcmVkaWN0IGFzIGZhbHNlLgorCUlmIGNvbXBhcmlzb24gPT0gMCwgcHJlZGljdCBmYWxzZTsgIT0gMCwgcHJlZGljdCB0cnVlLgorCisJKiByZW9yZy5jIChzdGVhbF9kZWxheV9saXN0X2Zyb21fe3RhcmdldCxmYWxsdGhyb3VnaH0pOgorCUlnbm9yZSByZWR1bmRhbnQgaW5zbiBldmVuIGlmIGl0IGNhbid0IGJlIHBsYWNlZCBpbiBvdXIgZGVsYXkgc2xvdC4KKwkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgorCUVuc3VyZSB3ZSBkb24ndCBjYWxsIHJlZHVuZGFudF9pbnNuX3Agb24gYW55IGluc25zIHRoYXQgY29uZmxpY3QKKwl3aXRoIHdoYXQgd2UgbmVlZCBhbmQgc2V0LgorCisJKiByZW9yZy5jIChmaWxsX2VhZ2VyX2RlbGF5X3Nsb3RzKTogUGljayB1cCBuZXcgdmFsdWUgb2YgSlVNUF9MQUJFTDsKKwlpdCBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgYnkgZmlyc3QgY2FsbCB0byBmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkLgorCisJKiBydGwuaCAoUkVHX1RBSUxfQ0FMTCk6IERlbGV0ZWQ7IG5ldmVyIGRvY3VtZW50ZWQgb3IgdXNlZC4KKwkoUkVHX0NDX1NFVFRFUiwgUkVHX0NDX1VTRVIpOiBSZXBsYWNlbWVudHMgZm9yIFJFR19DQ19TVEFUVVMuCisJKiBydGwuYyAocmVnX25vdGVfbmFtZSk6IE5ldyBuYW1lcy4KKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFJlcGxhY2UgUkVHX0NDX1NUQVRVUyB3aXRoIFJFR19DQ19TRVRURVI7CisJbm93IG9ubHkgb25lIGluc24uCisJKiBlbWl0LXJ0bC5jIChuZXh0X2NjMF91c2VyLCBwcmV2X2NjMF9zZXR0ZXIpOiBVc2UgUkVHX0NDX1NFVFRFUiBhbmQKKwlSRUdfQ0NfVVNFUi4KKworCSogY3BsdXMtY2FkaWxsYWMuYywgY3BsdXMtY2xhc3MuYywgY3BsdXMtZGVjbC5jLCBjcGx1cy1sZXguYzoKKwlSZXBsYWNlIG9ic3RhY2tfaW5pdCB3aXRoIGdjY19vYnN0YWNrX2luaXQuCisJKiBjcGx1cy1zZWFyY2guYywgZmxvdy5jLCBnY2MuYywgbG9vcC5jLCByZWxvYWQxLmM6IExpa2V3aXNlLgorCSogcmVvcmcuYywgc3RtdC5jOiBMaWtld2lzZS4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncywgY2FzZSBBU01fT1BFUkFORFMpOiBGaXggdHlwbyB3aGVuIG1ha2luZworCW5ldyBBU01fT1BFUkFORFMuCisKKwkqIHJlY29nLmM6IE5vdyBpbmNsdWRlcyBpbnNuLWZsYWdzLmggYW5kIGluc24tY29kZXMuaC4KKwkodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IElmIHJlcGxhY2luZyB0aGUgc291cmNlIG9mIGEgWkVST18gb3IKKwlTSUdOX0VYVFJBQ1Qgd2l0aCBhIE1FTSwgdHJ5IHRvIHB1dCB0aGUgTUVNIGluIHRoZSBtb2RlIHRvIGJlIHVzZWQgZm9yCisJdGhlIE1FTS4KKwkqIE1ha2VmaWxlLmluIChyZWNvZy5vKTogRGVwZW5kcyBvbiBpbnNuLWZsYWdzLmggYW5kIGluc24tY29kZXMuaC4KKworTW9uIEZlYgkgNCAxNzozOTozNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBFcnJvciBpZiBpbml0IGFycmF5IHdpdGggYW5vdGhlciBhcnJheS4KKworTW9uIEZlYgkgNCAwNDo1ODoyMCAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy10cmVlLmRlZiAoVEVNUExBVEVfREVDTCk6IE5ldyBub2RlIHR5cGUuCisJKFRFTVBMQVRFX1BBUk1fSURYKTogTmV3IG5vZGUgdHlwZTsgbGlrZSBpbnRlZ2VyLCB3aXRoIGFuIGV4dHJhCisJZmllbGQuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChjaGVja190ZXh0X2xlbik6IEZpeCB1cCBlcnJvciBtZXNzYWdlIHRvIGJlIG1vcmUKKwljb3JyZWN0LiAgTW92ZWQgZnVuY3Rpb24gYmVmb3JlIG5ld190ZXh0X2xlbiBzbyB0aGF0IHRoZSBsYXR0ZXIKKwljYW4gY2FsbCBpdCBhbmQgaW5saW5pbmcgY2FuIHdvcmsuCisJKG5ld190ZXh0X2xlbik6IENhbGwgY2hlY2tfdGV4dF9sZW4uCisKKwkqIGNwbHVzLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uYW1lKTogTm8gbG9uZ2VyIHN0YXRpYy4KKworCSogY3BsdXMtY2xhc3MuYyAodW51c2VfZmllbGRzKTogTm93IHN0YXRpYy4KKwkocG9wY2xhc3MpOiBVc2UgYSB0ZW1wb3Jhcnkgd2hlbiBidWlsZGluZyBDX0NfRC4KKworCSogY3BsdXMtZGVjbC5jIChsb29rdXBfdGFnKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgdHlwZSBtaXNtYXRjaCBpZgorCXRoZSB0YWcgZm91bmQgaXMgZm9yIGEgdGVtcGxhdGUuCisKKwkqIGNwbHVzLWxleC5jOiBOZXcgbG9va3VwIHRhYmxlcywgZm9yIG5ldyAidGVtcGxhdGUiIGtleXdvcmQuCisJKHJlaW5pdF9sYW5nX3NwZWNpZmljKTogQ2FsbCBpbml0X3RlbXBsYXRlLgorCShpbml0X2xleCk6IERpdHRvLgorCShmaWxlX2Zyb21fc2F2ZWRfdGV4dCk6IFJlbmFtZWQgZnJvbSBpbnB1dF9mcm9tX3NhdmVkX3RleHQuCisKKwkqIGNwbHVzLWxleC5jIChpZGVudGlmaWVyX3R5cGUpOiBOZXcgZnVuY3Rpb247IHJldHVybnMgcHJpbWFyeQorCXR5cGUgKElERU5USUZJRVIsIFRZUEVOQU1FLCBQVFlQRU5BTUUpIGluZGljYXRlZCBieSB0b2tlbiBuYW1lLgkgQQorCVBUWVBFTkFNRSBpcyByZXR1cm5lZCBmb3IgKFRZUEVfREVDTCAoVEVNUExBVEVfREVDTCAuLi4pKSBub2Rlcy4KKwkoc2VlX3R5cGVuYW1lKTogQ2FsbCBpdC4KKworCSogY3BsdXMtbGV4LmMgKHl5bGV4KTogSW4gaGFuZGxpbmcgaWRlbnRpZmllcnMsIHVzZSBzdWJzZXQgb2YKKwlUWVBFTkFNRSBjb2RlIGZvciBQVFlQRU5BTUUgdG9rZW5zLgorCisJKiBjcGx1cy10ZW1wbGF0ZS5jOiBOZXcgZmlsZS4KKwkoYmVnaW5fdGVtcGxhdGVfcGFybV9saXN0KTogUHVzaCBuZXcgc2NvcGUgYW5kIHN3aXRjaCB0byBwZXJtYW5lbnQKKwlvYnN0YWNrLgorCShlbmRfdGVtcGxhdGVfcGFybV9saXN0KTogUmV0dXJuIHBhcmFtZXRlciBsaXN0IGFzIGEgdHJlZSB2ZWN0b3IuCisJKGVuZF90ZW1wbGF0ZV9kZWNsKTogU2F2ZSBhd2F5IG5ldyBURU1QTEFURV9ERUNMIG5vZGUuCisJKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEJ1aWxkIHVwIHRyZWUgbGlzdCBvZiB0ZW1wbGF0ZQorCXBhcmFtZXRlcnMuCisJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogRm9yIG5vdywganVzdCBjb21wbGFpbi4KKwkoaW5pdF90ZW1wbGF0ZSk6IFNldCB1cCB0ZW1wbGF0ZSBvYnN0YWNrLgorCShyZWluaXRfcGFyc2VfZm9yX3RlbXBsYXRlKTogR29iYmxlIHVwIGNsYXNzIGRlZmluaXRpb24gdGV4dCBhbmQKKwlzYXZlIGl0IGF3YXkuCisKKwkqIGNwbHVzLXBhcnNlLnkgKHRlbXBsYXRlX2hlYWRlciwgdGVtcGxhdGVfcGFybV9saXN0KTogQ2FsbCBhYm92ZQorCXJvdXRpbmVzLgorCShkYXRhZGVmKTogUHV0IHRlbXBsYXRlIGRlY2xhcmF0aW9ucyBoZXJlLCBpbnN0ZWFkIG9mIGluCisJY2xhc3NfaGVhZC4KKwkobmFtZWRfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlLCBuYW1lZF9jbGFzc19oZWFkLAorCXVubmFtZWRfY2xhc3NfaGVhZCk6IEJyZWFrIHVwIG9sZCBjbGFzc19oZWFkIGRlcml2YXRpb25zLgorCShjbGFzc19oZWFkKTogTm93IGFueSBvZiB0aGUgYWJvdmUsIHBsdXMgdGVtcGxhdGUgdHlwZXMgd2l0aCBvcgorCXdpdGhvdXQgaW5zdGFudGlhdGlvbi4KKwkodGVtcGxhdGVfdHlwZSk6IENhbGwgaW5zdGFudGlhdGVfdGVtcGxhdGUuCisJKHRlbXBsYXRlX2FyZ19saXN0KTogQnVpbGQgdXAgbGlzdCBvZiBhcmdzLgorCisJKiBjcGx1cy10cmVlLmggKGxhbmdfdHlwZSk6IEFkZCBURU1QTEFURSBmaWVsZC4JIEFsc28gYWRkIG1hY3JvCisJVFlQRV9URU1QTEFURS4KKworU3VuIEZlYgkgMyAyMToxNjozNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogdG0tbTY4ay5oIChQUklOVF9PUEVSQU5EKTogSGFuZGxlIGAmJyBhbmQgYCQnLgorCShQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEKTogVGhleSBhcmUgdmFsaWQuCisKKwkqIG91dC1uZXh0LmMgKGhhbmRsZV9wcmFnbWEpOiBVbnJlYWQgdGhlIG5ld2xpbmUuCisKKwkqIHRvcGxldi5jIChtYWluKTogV2FybiBpZiBtZWFuaW5nbGVzcyBvcHRpbWl6YXRpb25zIGFyZSByZXF1ZXN0ZWQuCisJRG9uJ3QgZW5hYmxlIG9wdGlvbnMgYnkgZGVmYXVsdCB0aGF0IHdvdWxkIGdldCB3YXJuaW5ncy4KKworCSogbTY4ay5tZCAoZXh0ZW5kIFFJIHRvIEhJKTogVHlwbyBpbiBjbHIgaW5zbi4KKworCSogYy1jb21tb24uYyAoY29tYmluZV9zdHJpbmdzKTogRGVjcmVtZW50IExFTiBwcm9wZXJseSB3aGVuIGNvcHlpbmcuCisJKiBjLXBhcnNlLnkgKGluaXRfbGV4LCB5eWxleCk6IG1heF93aWRlIG5vdyBtZWFzdXJlZCBpbiBjaGFycy4gCisKKwkqIHRyZWUuYyAoZ2NjX29ic3RhY2tfaW5pdCk6IEZpeCB0eXBvIGluIGZvcndhcmQgZGVjbC4KKworU2F0IEZlYgkgMiAwOToyNDo1NiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAocG9wbGV2ZWwpOiBDaGFuZ2UgREVDTF9DT05URVhUIG9mIGRlY2xzIG9ubHkgb2YKKwl0aGVpciBjb250ZXh0IGlzIENVUlJFTlRfRlVOQ1RJT05fREVDTC4KKworRnJpIEZlYgkgMSAxMzo0NjowNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogRG9uJ3QgcHJpbnQgY2hhaW4gZm9yIGBjJyBhbmQgYHgnIG5vZGVzLgorCisJKiBsb29wLmMgKHJlY29yZF9leGNlc3NfcmVncyk6IE1vdmVkIGhlcmUuCisKK1NlZSBmaWxlIENoYW5nZUxvZy4yLgpkaWZmIC0tZ2l0IGEvZ2NjL0NoYW5nZUxvZy40IGIvZ2NjL0NoYW5nZUxvZy40Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjY4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvQ2hhbmdlTG9nLjQKQEAgLTAsMCArMSwxMDc4MyBAQAorTW9uIEphbiAxMyAxOToxMjoxOCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IFdoZW4gY29tcGxldGVseSB1bnJvbGxpbmcgbG9vcCwKKwl1c2UgYml2IGluaXRpYWwgdmFsdWUgc3RvcmVkIGluIHNwbGl0dGFibGVfcmVncyBpbnN0ZWFkIG9mCisJYmwtPmluaXRpYWxfdmFsdWUsIHNpbmNlIHRoZSBsYXRlciBtYXkgbm90IGJlIHNhZmUuCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogIFdoZW4gY2FsY3VsYXRpbmcgd2hldGhlciBhIHJlZ2lzdGVyCisJY3Jvc3NlcyBhIGNhbGwsIG11c3QgZG8gdGhpcyBhZnRlciByZWdpc3RlcnMgYXJlIGtpbGxlZCBhbmQgYmVmb3JlCisJbmV3IHJlZ2lzdGVycyBhcmUgbWFkZSBsaXZlLgorCisJKiB4LXJzNjAwMDogRGVmaW5lIElOU1RBTEwgYXMgL3Vzci91Y2IvaW5zdGFsbCAtYy4gIC9ldGMvaW5zdGFsbAorCSh0aGUgU1lTIFYgdmVyc2lvbikgZG9lcyBub3QgaGFuZGxlIC1jIG9wdGlvbiBhcyBNYWtlZmlsZS5pbgorCWludGVuZHMgaXQuCisKK01vbiBKYW4gMTMgMTE6MjE6MjQgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMtdGZpbGUgKHBhcnNlX3N0YWJzX2NvbW1vbik6IERvbid0IHJlbG9jYXRlIE5fTEJSQUMgYW5kCisJTl9SQlJBQyBzdGFicyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHN0YWJzIGltcGxlbWVudGF0aW9ucy4KKworTW9uIEphbiAxMyAwNzo0MTozMiAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBzZXQgVFJFRV9QUklWQVRFIGhlcmUuCisJVFJFRV9QUklWQVRFIGlzIG9ubHkgZm9yIHZpc2liaWxpdHkuCisJKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3QgdGVzdCBUUkVFX1BSSVZBVEUgaGVyZS4gICNwcmFnbWEKKwlpbnRlcmZhY2UvaW1wbGVtZW50YXRpb24gc2hvdWxkIHByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSBvZiBzdGF0aWMKKwkoaS5lLiBub24tcHVibGljKSBkZWZucyBpbiBpbXBsZW1lbnRhdGlvbiBzZWN0aW9uIG5vdy4KKworTW9uIEphbiAxMyAwNzozMTozOCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuYyAob3V0cHV0X2FzY2lpKTogVGhlIEFJWCBhc3NlbWJsZXIgc2lsZW50bHkgdHJ1bmNhdGVzCisJc3RyaW5ncyBsb25nZXIgdGhhbiA2NjYgY2hhcmFjdGVycywgc28gYnJlYWsgdGhlbSB1cCB3ZWxsIGJlZm9yZSB0aGF0LgorCitNb24gSmFuIDEzIDAwOjI2OjQ3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogV2FybiBhYm91dCBzaGFkb3dpbmcgYXQgdG9wIGxldmVsIGFueSBzeW1ib2wKKwl0aGF0IHdhcyBkZWNsYXJlZCBhbW9uZyB0aGUgZnVuY3Rpb24gcGFybXMuICBCdXQgZG9uJ3Qgd2FybiBmb3IKKwlwYXJtcyBpbiBhIG5lc3RlZCBmdW5jdGlvbi4KKwkqIHRyZWUuYyAoY2hhaW5fbWVtYmVyKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcGFyYy5jIChvdXRwdXRfcmV0dXJuKTogSGFuZGxlIHN0cnVjdHVyZSB2YWx1ZSBpbiBhbGwgdGhlIGNhc2VzLgorCisJKiB0b3BsZXYuYyAobWFpbik6IC1nc3RhYnMrIG1lYW5zIHVzZSBzdGFicyB3aXRoIGdkYiBleHRlbnNpb25zLgorCisJKiBmaXhpbmNsdWRlczogSW5zZXJ0ICN1bmRlZiBOVUxMIGJlZm9yZSAjZGVmaW5lIE5VTEwuCisKKwkqIGd2YXJhcmdzLmggKHZhX2xpc3QpOiBDaGVjayBzb21lIG1hY3JvcyB0byBhdm9pZCByZWRlZmluaXRpb24uCisKKwkqIHRyZWUuaCAoREVDTF9QQUNLRUQpOiBOZXcgbWFjcm8uCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZSk6IEhhbmRsZSBgcGFja2VkJy4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBIYW5kbGUgREVDTF9QQUNLRUQuCisJKiBjLXBhcnNlLnkgKGF0dHJpYik6IEFjY2VwdCBgcGFja2VkJyB3aXRoIG5vIGFyZy4KKworCSogYy1kZWNsLmMgKHNoYWRvd190YWcpOiBGb3IgdXNlbGVzcyBrZXl3b3JkLCBqdXN0IHdhcm4uCisJKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IHByZXNlcnZlIHZvbGF0aWxlIGJpdCBmcm9tIG9sZCBkZWNsCisJaWYgdGhhdCBpcyBqdXN0IGEgZGVmYXVsdCBkZWNsYXJhdGlvbiBmb3IgYWJvcnQsIGV4aXQsIGV0Yy4KKworCSogY2NjcC5jIChkb19hc3NlcnQsIGRvX3VuYXNzZXJ0LCBjaGVja19hc3NlcnRpb24pOgorCU5vIHBlZGFudGljIHdhcm5pbmdzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuCisKKwkqIHVsdHJpeC5oIChTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSwgV0NIQVJfVFlQRSk6IERlZmluZWQuCisJKFdDSEFSX1RZUEVfU0laRSk6IERlZmluZWQuCisKKwkqIGkzODYuaCAoSElfUkVHSVNURVJfTkFNRVMpOiBBZGQgYSBuYW1lIGZvciBkdW1teSByZWcgMTYuCisKKwkqIGRieG91dC5jIChmbGFnX21pbmltYWxfZGVidWcpOiBNYWtlIGl0IHN0YXRpYy4KKworU3VuIEphbiAxMiAxODoxMDo0NiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBDaGVjayAjbGluZSBmb3IgYDMnIG1lYW5pbmcgc3lzdGVtIGhlYWRlci4KKwkqIGNjY3AuYyAob3V0cHV0X2xpbmVfY29tbWFuZCk6IE91dHB1dCBgMycgaWYgc3lzdGVtIGhlYWRlci4KKwkqIGMtdHJlZS5oIChzeXN0ZW1faGVhZGVyX3ApOiBEZWNsYXJlIGl0LgorCShyaWRwb2ludGVycyk6IERlY2xhcmF0aW9uIGRlbGV0ZWQuCisKKwkqIGR3YXJmb3V0LmMgKGZ1bmRlbWVudGFsX3R5cGVfY29kZSk6IFRyZWF0IE9GRlNFVF9UWVBFIGxpa2UgaW50ZWdlci4KKwkodHlwZV9pc19mdW5kYW1lbnRhbCwgb3V0cHV0X3R5cGUpOiBMaWtld2lzZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCk6IEFib3J0IGlmIEZST00gaGFzIFZPSURtb2RlLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgRkxPQVRfRVhQUiBjYXNlKTogRG9uJ3QgcGFzcyBhIFZPSURtb2RlLgorCitTdW4gSmFuIDEyIDE2OjExOjQwIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmggKEFTTV9PVVRQVVRfU1BBQ0UpOiBJZiBhc3NlbWJsZXIgaXMgZ2FzLCBkb24ndCB1c2UgdGhlCisJLnNwYWNlIGRpcmVjdGl2ZSwgc2luY2UgdGhlIHRhYmxlIFBSRURJQ0FURV9DT0RFUyBnZW5lcmF0ZXMgdGlja2xlcworCWEgYnVnLgorCitTdW4gSmFuIDEyIDE1OjU5OjQxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cG1lZC5jOiBJbmNsdWRlIHJlYWwuaC4KKwkobWFrZV90cmVlKTogUHJvcGVybHkgaGFuZGxlIENPTlNUX0lOVCBhbmQgaGFuZGxlIG1hbnkgbW9yZSBydGwgY29kZXMuCisJKGV4cGFuZF9tdWx0X2FkZCk6IERvbid0IGRvIGZvbGRpbmcgaGVyZTsganVzdCBjYWxsIG1ha2VfdHJlZSBhbmQgZm9sZC4KKwkqIE1ha2VmaWxlLmluIChleHBtZWQubyk6IEluY2x1ZGVzIHJlYWwuaC4KKworU3VuIEphbiAxMiAxMjoyNjoyMCAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IEZpbmlzaCBjaGFuZ2Ugc3RhcnRlZCAxMSBKYW4gMTk5Mi4KKworCSogY3AtZGVjbC5jIChwdXNodGFnKTogRG9uJ3Qgc2V0IENMQVNTVFlQRV9UQUdTIGFmdGVyCisJQ1VSUkVOVF9DTEFTU19UWVBFIGhhcyBiZWVuIGRlZmluZWQuCisKKwkqIGNwLWxleC5jIChjaGVja19uZXdsaW5lKTogU2V0IElOVEVSRkFDRV9VTktOT1dOIGlmIHdlIHNlZSBhCisJI3ByYWdtYSBpbXBsZW1lbnRhdGlvbiBvciBpZiBpdCdzIHRoZSB0b3BsZXZlbCBmaWxlLgorCitTYXQgSmFuIDExIDIyOjA0OjM0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChmaXhfdHJ1bmNzZnNpMl9vcHQpOiBEZWxldGUsIHNpbmNlIHRoZSBvcHRpbWl6ZXIgd2lsbAorCXN0cmlwIHRoZSBjbG9iYmVycyB3aGVuIHN1YnN0aXR1dGluZyBhIHJlZ2lzdGVyIGZvciBhIGNzJ2VkIHZhbHVlLAorCXVubGlrZSBHQ0MgMS4KKwkoZml4X3RydW5jZGZzaTJfb3B0KTogTGlrZXdpc2UuCisJKGxvbmcgbG9uZyBzaGlmdHMpOiBGaXggdmFyaW91cyB0eXBvcy4KKworU2F0IEphbiAxMSAxNToyNjoyNCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuaCAoR0VOX0ZDTik6IEFsdGVybmF0ZSBkZWZpbml0aW9uIGlmIEZVTkNUSU9OX0NPTlZFUlNJT05fQlVHLgorCSogeG0tcm9tcC5oIChGVU5DVElPTl9DT05WRVJTSU9OX0JVRyk6IERlZmluZSBpdC4KKworCSogaTM4Ni5tZCAoY21wc3Ryc2kgcmVjb2duaXplcnMpOiBDaGFuZ2UgYmFjayB0byByZXB6LgorCitTYXQgSmFuIDExIDExOjE4OjMyIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogRG9uJ3QgcHV0IG5vbi1QQVJNX0RFQ0wgbm9kZXMgaW4gdGhlCisJbGlzdCB0aGF0IHdpbGwgYmVjb21lIERFQ0xfQVJHVU1FTlRTLgorCisJKiBjcC1kZWNsMi5jIChncm9rZmllbGQpOiBDb252ZXJ0ICgpIGluaXRpYWxpemF0aW9uIHRvID0KKwlpbml0aWFsaXphdGlvbiBpbiBGSUVMRCBjb250ZXh0LgorCSogY3AtZGVjbC5jIChwYXJtbGlzdF9pc19leHBybGlzdCk6IE5vdyBub24tc3RhdGljLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgbGV0IHN0YXRpYyBjbGFzcyBtZW1iZXJzIGJlCisJZGVjbGFyZWQgYHN0YXRpYycgYXQgdG9wLWxldmVsLgorCisJKiBjcC1kZWNsLmMgKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogRG9uJ3QgdXNlIERFQ0xfQVNTRU1CTEVSX05BTUUuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBsZXQgbGFuZ3VhZ2UgbGlua2FnZSBpbnRlcmZlcmUKKwl3aXRoIGRlY2xhcmF0b3IgZ3Jva2tpbmctLXRoZSB0d28gYXJlIGluZGVwZW5kZW50LgorCisJKiBjcC1jYWxsLmMgKGNvbXB1dGVfY29udmVyc2lvbl9jb3N0cyk6IExvb2sgZm9yIGNvbnN0cnVjdG9yIG9yIHR5cGUKKwljb252ZXJzaW9ucyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgaGF2ZSBDT05UUkFWQVJJQU5DRV9IQVJTSE5FU1MKKwlvciBub3QuICBBbHNvLCBgI2lmIDAnIHNvbWUgZGVhZCBjb2RlLgorCisJKiBjcC1tZXRob2QuYyAocmVwb3J0X3R5cGVfbWlzbWF0Y2gpOiBGaXggYnVncyBpbiBmb3JtYXR0aW5nIGVycm9yCisJbWVzc2FnZXMuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBWZXJpZnkgdGhhdCB3aGVuIHN0YXRpYyBjbGFzcyBtZW1iZXJzIGFyZQorCWRlY2xhcmVkIGF0IHRvcGxldmVsLCB0aGUgdHlwZXMgbWF0Y2ggdGhlaXIgaW5pdGlhbCBkZWNsYXJhdGlvbi4KKworU2F0IEphbiAxMSAwODo0MToyNCAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgZmlzaHBvbmQpCisKKwkqIGNvbmZpZy9tNjhrdjQuaCAoTk9fRE9MTEFSX0lOX0xBQkVMKTogIFVuZGVmaW5lIHNvIHRoYXQgdGhlCisJZGVmYXVsdCBmb3IgbTY4ay9TVlI0IHN5c3RlbXMgaXMgdG8gdXNlICckJywgd2hpY2ggaXMgbW9yZQorCXdpZGVseSBzdXBwb3J0ZWQuCisKK1NhdCBKYW4gMTEgMTA6NTY6MTAgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXcgYXQgd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBGaW5pc2ggUElDIGltcGxlbWVudGF0aW9uIG9uIHRoZSA2OGsKKwkqIG91dHB1dC5oIChmbGFnX3BpYyk6IERlY2xhcmUgaGVyZSBzbyB0aGF0IGluc24tKi5jIGNhbiBzZWUgaXQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogV2hlbiBjb21waWxpbmcgUElDIGlnbm9yZSBSRUdfRVFVSVYgbm90ZXMKKwl3aGljaCBhcmUgQ09OU1RBTlRfUCwgYnV0IGFyZSBub3QgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QLgorCisJKiBtNjhrLm1kIChjYWxsLCBjYWxsX3ZhbHVlKTogTWFrZSB0aGVzZSBpbnRvIGRlZmluZV9leHBhbmRzLiBJZgorCWNvbXBpbGluZyBQSUMgY29kZSwgdGhlbiBsb2FkIHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBpbnRvIGEgCisJcmVnaXN0ZXIgc28gdGhhdCB3ZSBtYWtlIGluZGlyZWN0IGNhbGxzLgorCShOb24tUElDIGNhbGwsIGNhbGxfdmFsdWUpOiBOZXcgZGVmaW5lX2luc25zLiAgVGhlc2UgYXJlIAorCXN0YW5kYXJkIGNhbGwgaW5zbnMuCisJKFBJQyBjYWxsLCBjYWxsX3ZhbHVlKTogTmV3IGRlZmluZV9pbnNucyB3aGljaCBvdXRwdXQgUElDIGNhbGxzLgorCShtb3ZzaSk6IE1ha2UgdGhpcyBpbnRvIGEgZGVmaW5lX2V4cGFuZC4gIExlZ2l0aW1pemUgUElDIGFkZHJlc3NlcworCWlmIG5lY2Vzc2FyeS4gIE9sZCBtb3ZzaSBjb2RlIGlzIG5vdyBhbiB1bm5hbWVkIGRlZmluZV9pbnNuIHBhdHRlcm4uCisKKwkqIG02OGsuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTIGNhc2UgSU5ESVJFQ1RBQkxFXzFfQUREUkVTU19QKToKKwlVc2UgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QIHRvIHJlamVjdCBTWU1CT0xfUkVGUyBhbmQgTEFCRUxfUkVGUyAKKwl3aXRob3V0IFBJQyByZWxvY2F0aW9uIHdoZW4gY29tcGlsaW5nIFBJQyBjb2RlLgorCisJKiBtNjhrLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uICBHaXZlbiBhbiBhZGRyZXNzIAorCXJldHVybiB0aGF0IGFkZHJlc3MgYXMgImxlZ2l0aW1pemVkIiBQSUMgY29kZS4gCisJKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFdoZW4gZ2VuZXJhdGluZyBQSUMgY29kZSwgaGFuZGxlIFBJQworCXJlbG9jYXRlZCBsYWJlbF9yZWZzIGp1c3QgbGlrZSBhIFBJQyByZWxvY2F0ZWQgc3ltYm9sX3JlZi4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSWYgLWZwaWMgdGhlbiBhZGQgIjp3IiB0byBkaXNwbGFjZW1lbnQgaW4KKwlQSUMgcmVsb2NhdGVkIHJlZmVyZW5jZXMuCisJKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IElmIC1mUElDIHRoZW4gYWRkICI6bCIgdG8gZGlzcGxhY2VtZW50IGluIAorCVBJQyByZWxvY2F0ZWQgcmVmZXJlbmNlcy4KKworRnJpIEphbiAxMCAxODowMzowOCAxOTkyICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKKworCSogY3AtaW5pdC5jIChidWlsZF9uZXcpOiBEb24ndCBhbGxvY2F0ZSBoZWFkZXIgZm9yIGFycmF5cyBpZiBubworCWRlc3RydWN0b3IgaXMgbmVlZGVkLiAgQWxzbyBmaXggYnJva2VuIGNhbGN1bGF0aW9uIG9mIGFycmF5IHNpemUuCisJKGJ1aWxkX2RlbGV0ZSk6IERvbid0IHNraXAgYXJyYXkgaGVhZGVyIGlmIG5vIGRlc3RydWN0b3IgaXMgbmVlZGVkLgorCitGcmkgSmFuIDEwIDE0OjU0OjE5IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmMgY3AtZGVjbDIuYyBjcC1leHByLmMgY3AtZ2MuYyBjcC1pbml0LmMgY3AtbGV4LmMgY3AtcGFyc2UueQorCWNwLXB0LmMgY3Atc2VhcmNoLmMgY3AtdHJlZS5jOiBDbGVhbiB1cCBwcm9ibGVtcyBmb3VuZCB3aXRoIC1XcmV0dXJuCisJKGZyb20gcmZnKS4KKworCSogY3AtdHlwZWNrLmMgY3AtdHJlZS5jIGNwLWN2dC5jIGNwLWxleC5jIGNwLWNhbGwuYyBjcC1jbGFzcy5jOgorCUFkZCAodW5zaWduZWQpIGNhc3RzIHRvIGFsbCBwbGFjZXMgd2hlcmUgbmF0aXZlIFNWcjQgY29tcGlsZXJzCisJZXhwZWN0IHRvIHNlZSB1bnNpZ25lZCB2YWx1ZXMuCisKK0ZyaSBKYW4gMTAgMDg6MzQ6MzYgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IHN1bmZpc2gpCisKKwkqIG02OGtzZ3MuaCAoUkVHSVNURVJfTkFNRVMpOiAgUHJvdmlkZSBzZXBhcmF0ZSB2ZXJzaW9ucyBmb3IKKwlTVVBQT1JUX1NVTl9GUEEgZGVmaW5lZCBhbmQgbm90IGRlZmluZWQuCisKK0ZyaSBKYW4gMTAgMjI6MzY6NDEgMTk5MiAgICAoRXJpYyBZb3VuZ2RhbGUgYXQgeW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIEltcHJvdmUgSS9PIHBlcmZvcm1hbmNlIG9mIGdjYyBvbiBWTVMuCisJKiBjY2NwLmMgKFZNU19vcGVuLCBWTVNfZm9wZW4sIFZNU19mcmVvcGVuKTogTmV3IGZ1bmN0aW9ucy4KKwkob3BlbiwgZm9wZW4sIGZyZW9wZW4pOiBEZWZpbmUgYXMgbWFjcm9zIG9uIFZNUy4KKwkqIHRvcGxldi5jIChWTVNfZm9wZW4pOiBOZXcgZnVuY3Rpb24uCisJKGZvcGVuKTogRGVmaW5lIGFzIG1hY3JvIG9uIFZNUy4KKworRnJpIEphbiAxMCAyMjowMDo1MCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5yZWNvZy5jIChtZXJnZV90cmVlcyk6IElmIHR3byB0cmVlcyBib3RoIGhhdmUgYWN0aW9ucywgYnV0CisJb25lIGFkZHMgY2xvYmJlcnMgYW5kIG9uZSBkb2Vzbid0LCBpZ25vcmUgdGhlIG9uZSB0aGF0IGRvZXMuCisKKwkqIGdlbmVtaXQuYyAoZ2VuX3NwbGl0KTogU2F5IHRoYXQgd2UgYXJlIGdpdmluZyB0aGUgZGVmaW5pdGlvbiBudW1iZXIKKwlpbiBvdXIgZXJyb3IgbWVzc2FnZS4KKwkqIGdlbnJlY29nLmMgKGZhdGFsKTogTGlrZXdpc2UuCisJKiBnZW5vdXRwdXQuYyAoc2Nhbl9vcGVyYW5kcyk6IExpa2V3aXNlLgorCisJKiBjYWxsZXItc2F2ZS5jOiBJbmNsdWRlIGV4cHIuaCAoZm9yIGdlbl9tb3ZlX2luc24pLgorCShyZWdub19zYXZlX2VsaW0pOiBEZWxldGVkLgorCShpbml0X3NhdmVfYXJlYXMpOiBEb24ndCBpbml0aWFsaXplIGl0LgorCShzZXR1cF9zYXZlX2FyZWFzKTogRG9uJ3Qgc2V0IGl0LgorCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MsIHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogQWNjZXB0IG1vZGUsCisJbm90IHNwaWxsIHJlZ2lzdGVyLgorCShpbnNlcnRfc2F2ZV9yZXN0b3JlKTogRG9uJ3QgZG8gb3VyIG93biByZWdpc3RlciBlbGltaW5hdGlvbiBhbmQKKwlyZWxvYWRpbmc7IGluc3RlYWQgc2V0IHRoZSBpbnNucyB3ZSBtYWtlIHRvIHRoZSBkZXNpcmVkIG1vZGUuCisJKiByZWxvYWQxLmMgKHN0cnVjdCBlbGltX3RhYmxlKTogTmV3IGZpZWxkIE1BWF9PRkZTRVQuCisJKHJlbG9hZCk6IEFsd2F5cyBjYWxsIGluaXRfc2F2ZV9hcmVhcy4KKwlJbml0aWFsaXplIG1heF9vZmZzZXQgZWFjaCBwYXNzLgorCUF0IGVhY2ggQ0FMTF9JTlNOLCBjcmVhdGUgYSBuZWVkIGZvciBhIHNwaWxsIHJlZ2lzdGVyIHRoYXQgd2lsbAorCWJlIHVzZWQgYnkgY2FsbGVyLXNhdmUuCisJUGFzcyBtb2RlIGZvciBpbnNucyB0byBzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MgaW5zdGVhZCBvZiBhCisJc3BpbGwgcmVnIG51bWJlci4KKwlDYWxsIHJlbG9hZF9hc19uZWVkZWQgaWYgd2Ugd2lsbCBoYXZlIHRvIHJlbG9hZCB0aGUgY2FsbGVyLXNhdmUKKwlpbnNucywgZXZlbiBpZiBub3RoaW5nIGVsc2UgbmVlZHMgcmVsb2FkICh1bmxpa2VseSkuCisJKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBSZWNvcmQgbWF4aW11bSBvZmZzZXQgdmFsdWUuCisJKiBNYWtlZmlsZS5pbiAoY2FsbGVyLXNhdmUubyk6IEluY2x1ZGVzIGV4cHIuaC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IENBTExfSU5TTnMgY2FuJ3QgaGF2ZSBvdXRwdXQgcmVsb2Fkcy4KKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBQdXQgYW55IHJlbG9hZHMgZm9yIGEgQ0FMTF9JTlNOCisJaW4gZnJvbnQgb2YgYW55IGltbWVkaWF0ZWx5LXByZWNlZWRpbmcgVVNFIGluc25zLgorCisJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXMpOiBNYXJrIGFsbCBnbG9iYWwgcmVncyBhcyBsaXZlIGF0IHRoZSBlbmQgb2YKKwl0aGUgZnVuY3Rpb24uCisJKHByb3BhZ2F0ZV9ibG9jayk6IEVhY2ggY2FsbCBtYWtlcyBhbGwgZ2xvYmFsIHJlZ2lzdGVycyBsaXZlLgorCShtYXJrX3VzZWRfcmVncyk6IEEgUkVUVVJOIG1heSB1c2UgdGhlIHN0YWNrIHBvaW50ZXIgYW5kIHVzZXMgYWxsCisJZ2xvYmFsIHJlZ3MuCisJKiBjc2UuYyAoY3NlX2luc24pOiBBIENBTExfSU5TTiBjbG9iYmVycyBhbnkgZ2xvYmFsIHJlZ3MuCisJKiByZW9yZy5jIChtYXJrX3JlZmVyZW5jZWRfcmVzb3VyY2VzKTogQ2FsbHMgdXNlZCBnbG9iYWwgcmVncy4KKwkobWFya19zZXRfcmVzb3VyY2VzKTogQ0FMTF9JTlNOcyBjbG9iYmVyIGdsb2JhbCByZWdzLgorCitGcmkgSmFuIDEwIDE3OjI0OjA2IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjb2xsZWN0Mi5jICh3aG9sZSBmaWxlKTogTWFqb3IgcmV3cml0ZSB0byBtZXJnZSBpbiBjb2xsZWN0MworCWZ1bmN0aW9uYWxpdHkgd2hpY2ggdXNlcyBHQ0MgdG8gYnVpbGQgdXAgdGhlIGNvbnN0cnVjdG9yIGFuZAorCWRlc3RydWN0b3IgdGFibGVzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBhc3NlbWJsZXIuICBBbHNvIGltcHJvdmUKKwl0aGUgc3VwcG9ydCBmb3IgY3Jvc3MgY29tcGlsZXJzIHRvIGZpbmQgdGhlIHRvb2xzLiAgVGhlIG9sZCBhc3NlbWJseQorCWxhbmd1YWdlIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZC4KKworCSogbWlwcy10ZmlsZS5jIChDT0RFX01BU0spOiBNb3ZlIHRvIG1pcHMuaCB0byB1c2Ugd2l0aCBtaXBzLXRkdW1wCisJYWxzby4KKwkoTUlQU19JU19TVEFCKTogTGlrZXdpc2UuCisJKE1JUFNfTUFSS19TVEFCKTogTGlrZXdpc2UuCisJKE1JUFNfVU5NQVJLX1NUQUIpOiBMaWtld2lzZS4KKworCSogbWlwcy10ZHVtcC5jICh2YXJpb3VzKTogQ2hhbmdlcyBieSBQZXIgQm90aG5lciB0byBwcmludAorCWVuY2Fwc3VsYXRlZCBzdGFicywgYW5kIHRvIHNob3J0ZW4gdGhlIG91dHB1dC4KKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBTZXQgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDcuCisJKGNtcDJfb3ApOiBNYWtlIGNtcDJfb3AgYSByZWFsIGZ1bmN0aW9uIGluc3RlYWQgb2YganVzdCBhCisJbWFjcm8gdG8gY21wX29wLgorCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IC1PIG5vdyBzZXRzIGZsYWdfY2FsbGVyX3NhdmVzIGFuZAorCWZsYWdfc2NoZWR1bGVfaW5zbnNfYWZ0ZXJfcmVsb2FkLgorCShDQzFfU1BFQyk6IEZpeCB0eXBvIHByZXZlbnRpbmcgLW1ncG9wdCBmcm9tIGJlaW5nIHNldCBpZgorCW9wdGltaXphdGlvbi4KKwkoUFJFRElDQVRFX0NPREVTKTogRGVmaW5lLgorCShVU0VfQ09MTEVDVCwgRVhURU5ERURfQ09GRiwgTk9fVU5ERVJTQ09SRVMpOiBEZWxldGUsIG5vdCBuZWVkZWQgaW4KKwlHQ0MgMi4wMC4KKwkoQVNNX0lOVF9PUCwgQVNNX1NIT1JUX09QLCBBU01fQ0hBUl9PUCk6IExpa2V3aXNlLgorCShDT0RFX01BU0spOiBNb3ZlIGZyb20gbWlwcy10ZmlsZS4KKwkoTUlQU19JU19TVEFCKTogTGlrZXdpc2UuCisJKE1JUFNfTUFSS19TVEFCKTogTGlrZXdpc2UuCisJKE1JUFNfVU5NQVJLX1NUQUIpOiBMaWtld2lzZS4KKworCSogbWlwcy5jIChjbXAyX29wKTogTWFrZSB0aGlzIGEgcmVhbCBmdW5jdGlvbiwgaW5zdGVhZCBvZiBhIG1hY3JvCisJcG9pbnRpbmcgdG8gY21wX29wLgorCSh2b2xhdGlsZV9idWZmZXIpOiBOZXcgc3RhdGljIHZhcmlhYmxlIHRvIHN1cHBvcnQgLnNldCB2b2xhdGlsZS4KKwkobWlwc19tb3ZlXzF3b3JkKTogRG8gLnNldCB2b2xhdGlsZS8uc2V0IG5vdm9sYXRpbGUgYXJvdW5kIHZvbGF0aWxlCisJbWVtb3J5IHJlZmVyZW5jZXMuCisJKG1pcHNfbW92ZV8yd29yZHMpOiBMaWtld2lzZS4KKworCSogbWlwcy5tZCAoc25lIGRlZmluZV9zcGxpdCk6IEZpeCBzbyB0aGF0IGl0IGdlbmVyYXRlcyBhIGd0dSAwLgorCShhbGwgc2V0IGNjIGRlZmluZV9zcGxpdHMpOiBSZW1vdmUgcmVsb2FkX2NvbXBsZXRlZCB0ZXN0cy4KKwkoYWxsIHNldCBjYyBkZWZpbmVfaW5zbnMpOiBEb24ndCBhbGxvdyAwIGFzIG9wZXJhbmQgMS4KKworRnJpIEphbiAxMCAxNjo0MDo0NSAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhdyBhdCB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgKGFkZHNpMywgYWRkaGkzLCBzdWJzaTMsIHN0YWNrIGFkanVzdG1lbnQgcGVlcGhvbGVzKToKKwlQZXJmb3JtIHNtYWxsICg4IDwgTiA8PSAxNikgY29uc3RhbnQgYWRkaXRpb25zIGFuZCBzdWJyYWN0aW9ucyB0bworCWFkZHJlc3MgcmVnaXN0ZXJzIHdpdGggdHdvIGFkZHF3IChvciBzdWJxdykgaW5zdHJ1Y3Rpb25zLgorCitGcmkgSmFuIDEwIDA2OjU0OjIyIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogQ2hlY2sgZm9yIF9sb25nam1wIGFzIHdlbGwgYXMgbG9uZ2ptcDsKKwljbGVhbiB1cCBjb2RlIGEgYml0IGFuZCBtZXJnZSB3aXRoIGNoZWNrIGZvciBzZXRqbXAtbGlrZSBuYW1lcy4KKwlFbWl0IGEgQkFSUklFUiBpZiB0aGlzIGlzIGEgY2FsbCB0byBsb25nam1wIGluIGFkZGl0aW9uIHRvCisJdm9sYXRpbGUgY2FsbHMuCisKK0ZyaSBKYW4gMTAgMDI6MjU6NTQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IFByb3Blcmx5IHJldHVybiBlcnJvcl9tYXJrX25vZGUKKwlhZnRlciBpbnZhbGlkIGVsZW1lbnQgaW4gYXJyYXkgaW5pdGlhbGl6ZXIuCisKKwkqIGdjYy5jIChwZXhlY3V0ZSk6IFVzZSBgZm9yaycgaW4gZXJyb3IgbWVzc2FnZSBpZiBkb24ndCBoYXZlIHZmb3JrLgorCisJKiBNYWtlZmlsZS5pbjogQWRkIC5OT0VYUE9SVC4KKworVGh1IEphbiAgOSAxMzozNjoyNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBIYW5kbGUgT0ZGU0VUX1JFRi4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBOZXZlciB1c2UgYXNzb2NpYXRpdmUgbGF3IGZvcgorCWZsb2F0aW5nIGFyaXRobWV0aWMuCisKKwkqIGZpeGluYy5zdnI0OiBSZW5hbWVkIElOQ0xVREVTIHRvIElOUFVULgorCisJKiBpMzg2Lm1kIChjbXBzdHJzaSByZWNvZ25pemVycyk6IE91dHB1dCByZXBlLCBub3QgcmVwei4KKworVGh1IEphbiAgOSAxODowMjozNCAxOTkyICBEZW5uaXMgUC4gR2xhdHRpbmcgIChkZW5uaXNnIGF0IHR0aSkKKworCSogdHJlZS5oIChDT05TVFJVQ1RPUl9OQU1FX0ZPUk1BVCk6IENoYW5nZWQgbmFtZSBmb3JtYXQuICBPbGQgZm9ybWF0CisJd2FzIHJlY29nbml6ZWQgYXMgZGVzdHJ1Y3RvcnMgbm90IGNvbnN0cnVjdG9ycy4KKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9tb2R1bGVfZGVzY3JpcHRvcik6CisJTnVsbC10ZXJtaW5hdGUgZ2xvYmFsX29iamVjdF9uYW1lLgorCitUaHUgSmFuICA5IDEwOjM1OjU4IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bXMpOiBEb24ndCBhdHRlbXB0IHRvIG91dHB1dCBhIExBQkVMX0RFQ0wuCisKK1RodSBKYW4gIDkgMDg6MTc6NDQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChtZXJnZV9jb21wb25lbnRfcmVmZXJlbmNlcyk6IFRyZWF0IGNvbnN0YW50cyBhcworCXVuc2lnbmVkLCBzbyB3ZSBkb24ndCBnZXQgZXh0cmEgc2lnbiBiaXRzIHdoZXJlIHdlIGRvbid0IHdhbnQgdGhlbS4KKworV2VkIEphbiAgOCAxOToxMjo1OSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHJlbG9hZC5jIChjb21iaW5lX3JlbG9hZHMpOiBEb24ndCB1c2UgYSBmaXhlZF9yZWcgYXMgYW4gcmVsb2FkCisJcmVnLCBldmVuIGlmIGl0IGRpZXMuCisKKwkqIGxvb3AuYyAocmVjb3JkX2dpdik6IEZpeCB0eXBvIGV4dHJhY3RpbmcgaW5zbl91aWQuCisKK1dlZCBKYW4gIDggMTU6NDE6MTAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcHAudGV4aSwgZ2NjLnRleGk6IEZpbGVzIHJlbmFtZWQuCisJKiBpbnZva2UudGV4aSwgZXh0ZW5kLnRleGksIG1kLnRleGksIHJ0bC50ZXhpLCB0bS50ZXhpOiBOZXcgc3ViZmlsZXMuCisJKiBNYWtlZmlsZS5pbjogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCisJKiBmaXhpbmNsdWRlczogUmVuYW1lZCBJTkNMVURFUyB0byBJTlBVVC4KKworCSogbTY4ay5jIChub3RpY2VfdXBkYXRlX2NjLCBwcmludF9vcGVyYW5kKTogRml4IHR5cG9zLgorCisJKiBjcC1kZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IFNhdmUgYW5kIHJlc3RvcmUgY3VycmVudCBvYnN0YWNrcy4KKworCSogYy1kZWNsLmMgKHBvcGxldmVsKTogUHV0IGxhYmVscyBpbiBCTE9DS19WQVJTIG9mIHRvcC1sZXZlbCBibG9jay4KKworV2VkIEphbiAgOCAxMjo1Mzo0OCAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZXhwYW5kX3N0YXRpY19pbml0KTogU3dpdGNoIHRvIFBFUk1BTkVOVF9PQlNUQUNLIGR1cmluZworCWV4cGFuc2lvbi4KKworV2VkIEphbiAgOCAwNzo0NTo1OCAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4a3YzLmggKFNUQVJURklMRV9TUEVDKTogU1ZSMyBoYXMgKmNydDAubyBmaWxlcy4KKworCSogY29uZmlndXJlIChtODhrLSpzeXN2ezMsNH0pOiBUaGUgZmlsZXMgYXJlIG5hbWVkIG04OGt2ezMsNH0uCisKK1dlZCBKYW4gIDggMDY6MDE6NDQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcm9tcC5tZCAobWZ0YmkpOiBBbGxvdyBtZW1vcnkgaW4gdGhlIGNvbnRyYWludHMgc2luY2UgdGhlcmUgY2FuJ3QKKwliZSBhbiBpbnB1dCByZWxvYWQgb24gYW4gaW5zbiB0aGF0IHVzZXMgY2MwLgorCisJKiBjc2UuYyAoRklYRURfQkFTRV9QTFVTX1ApOiBJbmNsdWRlIHZpcnR1YWxfaW5jb21pbmdfYXJnc19ydHguCisJKE5PTlpFUk9fQkFTRV9QTFVTX1ApOiBOZXcgbWFjcm8uCisJKGZpbmRfY29tcGFyaXNvbiwgc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb25fYXJncyk6IFVzZQorCU5PTlpFUk9fQkFTRV9QTFVTX1AgaW5zdGVhZCBvZiBGSVhFRF9CQVNFX1BMVVNfUCB3aGVuIGFwcHJvcHJpYXRlLgorCisJKiBtNjhrLm1kIChwZWVwaG9sZXMpOiBEb24ndCBjaGFuZ2UgYXJvdW5kIHN0YWNrIGFkanVzdHMgYW5kIHB1c2hlcworCXdoZW4gd2UgYXJlIHB1c2hpbmcgc29tZXRoaW5nIHdob3NlIGFkZHJlc3MgaW52b2x2ZXMgc3AuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBDaGVjayBmb3Igb3BlcmF0aW9ucyBvbgorCWludGVnZXJzIGJ5IGxvb2tpbmcgYXQgbW9kZSBvZiBPUCwgbm90IG91dHB1dCBtb2RlLCB0byBhdm9pZAorCWNvbmZ1c2lvbiB3aXRoIEZJWCBvcGVyYXRpb25zIHdob3NlIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLgorCisJKiBydGwuaCAoW2RmXWNvbnN0WzAxMl1fcnR4KTogRGVsZXRlZC4KKwkoY29uc3RfdGlueV9ydHgpOiBOZXcgZGVjbGFyYXRpb24uCisJKENPTlNUMF9SVFgpOiBVc2UgY29uc3RfdGlueV9ydHggaW5zdGVhZCBvZiB7ZCxmLH1jb25zdDBfcnR4LgorCShDT05TVDFfUlRYLCBDT05TVDJfUlRYKTogTmV3IG1hY3Jvcy4KKwkqIGVtaXQtcnRsLmMgKFtkZl1jb25zdFswMTJdX3J0eCk6IERlbGV0ZWQuCisJKGNvbnN0X3RpbnlfcnR4KTogTmV3IGRlZmluaXRpb24uCisJKGluaXRfZW1pdF9vbmNlKTogSW5pdGlhbGl6ZSBjb25zdF90aW55X3J0eCBpbnN0ZWFkIG9mIG9sZCB2YXJzLgorCSogY3NlLmMgKHNpbXBpZnlfYmluYXJ5X29wZXJhdGlvbik6IFVzZSBDT05TVFswMV1fUlRYLgorCSogdmFyYXNtLmMgKGltbWVkX3JlYWxfY29uc3RfMSk6IExpa2V3aXNlLgorCSogY29tYmluZS5jIChzdWJzdCk6IExpa2V3aXNlLgorCSogcmVnLXN0YWNrLmMgKHJlY29yZF9yZWdfbGlmZSwgc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBMaWtld2lzZS4KKwkqIGNvbnZleC5tZCwgaTg2MC5tZCwgbTg4ay5jLCBzcHVyLm1kLCB2YXguaCwgbnMzMmsubWQ6IExpa2V3aXNlLgorCitUdWUgSmFuICA3IDIyOjExOjE3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeC1pMzg2aXNjIChFTlFVSVJFX0xERkxBR1MpOiBOZXcgZGVmbjogYWRkIC1wb3NpeC4KKworCSogcHJvdG9pemUuYyAoX1BPU0lYX1NPVVJDRSk6IERlZmluZSBvbmx5IGlmIFBPU0lYLgorCisJKiBtNjhrLmggKEZQQV9SRUdfUCk6IEFsd2F5cyBkZWZpbmUgdGhpcyBzb21laG93LgorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1XY2hhci1zdWJzY3JpcHRzLgorCSogYy10eXBlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogRG8gdGhlIHJlYWwgd29yay4KKworVHVlIEphbiAgNyAyMToxNTo1NCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy5tZCAoYnJhbmNoX3plcm9fZmFsc2UpOiBVc2UgY29ycmVjdCBtb2RlIChDQ18wKSBvbgorCW1hdGNoX29wZXJhdG9yLgorCitUdWUgSmFuICA3IDE0OjI0OjQ1IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKHJlcGxhY2VfcmVnKTogZ2V0IG1vZGUgY2xhc3MgZnJvbSBhIG1vZGUsIG5vdCBhIHJlZy4KKworVHVlIEphbiAgNyAxNDoxNjoxOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlZy1zdGFjay5jIChlbWl0X3BvcF9pbnNuKTogRml4IHR5cG8gRlBtb2RlX3JlZy4KKworCSogcHJvdG9pemUuYyAobG9uZ2ptcCk6IERvbid0IGRlY2xhcmUgaXQuCisKK1R1ZSBKYW4gIDcgMDk6NDc6NDcgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IEZyb20gSm9obiBIYXNzZXksIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUKKwl0ZXJtaW5hdGluZyBudWxsIG9uIHdpZGUgY2hhcmFjdGVyIGxpdGVyYWxzLgorCitUdWUgSmFuICA3IDA3OjQxOjQyIDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrdjMuaCAoTElCX1NQRUMpOiBBZGQgLWxnLgorCitUdWUgSmFuICA3IDA2OjI5OjMwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogRG9uJ3Qgb3Zlci1hbGlnbiBhIHN0cnVjdHVyZQorCXdoZW4gc3RyaWN0IGFsaWdubWVudCBpcyBub3QgcmVxdWlyZWQuCisKKwkqIHJzNjAwMC5oIChDQUxMX1VTRURfUkVHSVNURVJTKTogcjMxIHNob3VsZCBub3QgYmUgbWFya2VkIGNhbGwtdXNlZC4KKworCSogcnM2MDAwLm1kIChhZGQtYW5kLWNvbXBhcmUpOiBGaXggZHVwbGljYXRlIG9wZXJhbmQgbnVtYmVyLgorCisJKiBhMjlrLm1kIChpbmJ5dGUsIGluaHcpOiBDb3JyZWN0IGR1cGxpY2F0ZSBvcGVyYW5kIG51bWJlci4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIE1VTFRfRVhQUik6IFNpbXBsaWZ5IChhICogKDEgPDwgYikpLgorCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBNVUxUKTogTGlrZXdpc2UuCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0LCBzaGlmdCBjYXNlcyk6IFNpbWlsYXJseSwgYXNzb2NpYXRlIEEgPDwgQiA8PCBDLgorCisJKiBnZW5vdXRwdXQuYyAoc2Vlbik6IE5ldyBhcnJheS4KKwkoc2Nhbl9vcGVyYW5kcyk6IEdpdmUgZXJyb3IgaWYgYW4gb3BlcmFuZCBudW1iZXIgd2FzIHNwZWNpZmllZAorCXR3aWNlLiAgSW5jbHVkZSBwYXR0ZXJuIG51bWJlciBpbiBlcnJvciBtZXNzYWdlLgorCShnZW5faW5zbiwgZ2VuX2V4cGFuZCwgZ2VuX3NwbGl0LCBnZW5fcGVlcGhvbGUpOiBJbml0aWFsaXplIGBzZWVuJy4KKwkoZ2VuX3NwbGl0LCBnZW5fcGVlcGhvbGUpOiBBZGQgaW5pdGlhbGl6YXRpb25zIGZvciBhcnJheXMgdGhhdAorCWFyZSBjb3BpZWQuCisKKwkqIG9wdGFicy5jIChleHBhbmRfdW5vcCk6IENvbXBsZXRlIHJlY2VudCBjaGFuZ2U7IG9uZSBUQVJHRVQgd2FzCisJbm90IGNoYW5nZWQgdG8gVEVNUC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogQWx3YXlzIHRyeSBtdWx0aXBsaWNhdGlvbiBieSB2YWx1ZSBhbmQKKwlieSBuZWdhdGVkIHZhbHVlLiBGaXggYnVnIHdoZXJlIHdlIGRvbid0IGluY2x1ZGUgdGhlIGNvc3Qgb2YgdGhlIG5lZ2F0ZQorCXdoZW4gc2VlaW5nIHdoaWNoIHdheSBpcyBiZXR0ZXIuICBXcml0ZSBwcm9wZXIgdmFsdWUgaW4gUkVHX0VRVUFMCisJbm90ZS4KKworCSogb3B0YWJzLmMgKGV4dGVuZHRhYik6IFJlcGxhY2VtZW50IGZvciB7emVybyxzaWdufV9leHRlbmRfY29kZXMuCisJKGNhbl9leHRlbmRfcCk6IFVzZSBuZXcgdGFibGUgYW5kIHJldHVybiB0eXBlIGlzIG5vdCBlbnVtIGluc25fY29kZS4KKwkoZ2VuX2V4dGVuZF9pbnNuKTogRGVsZXRlZDsgbm90IHVzZWQuCisJKGluaXRfZXh0ZW5kcyk6IE1ha2UgbGlrZSBpbml0X2Zsb3R0YWI6IHVzZSBuZXcgdGFibGUgYW5kIGluaXRpYWxpemUKKwl1bnVzZWQgZW50cmllcyB0byBDT0RFX0ZPUl9ub3RoaW5nLCBub3QgemVyby4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogY2FuX2V4dGVuZF9wIGZhaWxzIGlmIGl0IHJldHVybnMKKwlDT0RFX0ZPUl9ub3RoaW5nLCBub3QgemVyby4KKwkqIGV4cHIuaCAoY2FuX2V4dGVuZF9wKTogQWRkIGRlZmluaXRpb24uCisKKwkqIGV4cHIuaDogQWRkICJleHRlcm4iIHRvIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorCitNb24gSmFuICA2IDEwOjEyOjM0IDE5OTIgIExlb25hcmQgTm9ycmdhcmQgICh2aW5zY2kgYXQgbmljLmZ1bmV0LmZpKQorCisJKiBtNjhrLmMgKFNVUFBPUlRfU1VOX0ZQQSk6IENvbmRpdGlvbmFsaXplIHJlZmVyZW5jZXMgdG8gdGhlCisJb3B0aW9uYWwgU3VuIDMgRmxvYXRpbmcgUG9pbnQgQWNjZWxlcmF0b3Igd2l0aCBTVVBQT1JUX1NVTl9GUEEuCisJKiBtNjhrLmggKFNVUFBPUlRfU1VOX0ZQQSk6IExpa2V3aXNlLgorCisJKiBtNjhrLmMgKG5vdGljZV91cGRhdGVfY2MpOiBOZXcgZnVuY3Rpb24uCisJKiBtNjhrLmggKE5PVElDRV9VUERBVEVfQ0MpOiBKdXN0IGNhbGwgbm90aWNlX3VwZGF0ZV9jYy4KKworICAgICAgICAqIHN1bjMuaCAoU1VQUE9SVF9TVU5fRlBBKTogTmV3IGRlZmluZS4KKworTW9uIEphbiAgNiAxNjo0Mjo0MyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9nbG9iYWwsIGFzc2VtYmxlX2xhYmVsKTogTmV3IGZ1bmN0aW9ucy4KKwkqIG9iamMtYWN0aW9ucy5jIChmaW5pc2hfb2JqYyk6IENhbGwgdGhlbSB0byBkZWZpbmUgYW5kIGdsb2JhbGl6ZS4KKwlVc2Ugb3V0cHV0X2NvbnN0YW50IHRvIHJlZmVyZW5jZSBhIGNsYXNzLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1saW1pdHMtaCk6IE5ldyB0YXJnZXQuCisJKGluc3RhbGwtaGVhZGVycyk6IERlcGVuZCBvbiBpbnN0YWxsLWxpbWl0cy1oLgorCShVU0VSX0gpOiBEZWxldGVkIExJTUlUU19ILgorCShJTlNUQUxMRURfSCk6IEFkZGVkIGxpbWl0cy5oLgorCShtb3N0bHljbGVhbik6IFJlbW92ZSB0bXAtbGltaXRzLmguCisJKiBsaW1pdHguaDogTmV3IGZpbGUuCisKKwkqIHgtaXNjOiBGaWxlIGRlbGV0ZWQuCisKKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9tb2R1bGVfZGVzY3JpcHRvcik6IEluaXQgZ2xvYmFsX29iamVjdF9uYW1lLgorCisJKiBNYWtlZmlsZS5pbiAoY29sbGVjdDIpOiBEZXBlbmQgb24gdmVyc2lvbi5vLgorCisJKiBwcm90b2l6ZS5jIChQQVRIX01BWCk6IERlZmluaXRpb24gZGVsZXRlZC4gIEp1c3QgdGVzdCBpdAorCXRvIHNlZSBpZiBwYXJhbS5oIHNob3VsZCBiZSBpbmNsdWRlZC4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgTVVMVCk6IE1ha2UgYSBjb3B5CisJb2YgdGhlIG9wZXJhbmQgd2hlbiBjb252ZXJ0aW5nIDIuMCAqIFggdG8gWCtYLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUmVmaW5lIHdoZW4gd2Ugc2V0IGZvcmNlX3JlbG9hZCBhbmQKKwliZXR0ZXIgZG9jdW1lbnQgdGhlIGNhc2VzLgorCitNb24gSmFuICA2IDA4OjIyOjE5IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5jIChvdXRwdXRfZmxvYXRfY29tcGFyZSk6IE91dHB1dCBvbmx5IHNpbmdsZS1wb3AgY29tcGFyZQorCWlmIGJvdGggb3BlcmFuZHMgYXJlIHRoZSBGUCB0b3Agb2Ygc3RhY2sgcmVnLgorCVdoZW4gY29tcGFyaW5nIEZQIHRvcCBvZiBzdGFjayB3aXRoIGl0c2VsZiwgcHJpbnQgYCVzdCgwKScgYXMgdGhlCisJcmVnIG5hbWUsIG5vdCBgJXN0Jy4KKworTW9uIEphbiAgNiAxMjowMTo1MSAxOTkyICBUaWdnciAgKHJjcGlldGVyIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGFybS5tZCAobXVsc2kzKTogRml4ZWQgY29udHJhaW50cy4KKworTW9uIEphbiAgNiAwODoyMTo0NiAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay1tb3ZlLnNoOiBSZW5hbWVkIGZyb20gbTg4ay1tb3ZzdHIuc2guICBSZW5hbWUgdGhlIGdlbmVyYXRlZAorCWZpbGVzIG1vdmUqLmFzbSBmcm9tIG1vdnN0ciouYXNtIHRvIGJlIFNWUjMtbGVnaXQuCisJKiB0LW04OGssIHQtbTg4a2x1bmEsIHQtbTg4a3Y0OiBVc2UgdGhlIG5ldyBuYW1lcy4KKworCSogYy1hdXgtaW5mby5jLCBkYnhvdXQuYzogSW5jbHVkZSBlcnJuby5oIGFzIGluIHByb3RvaXplLmMuCisKKwkqIE1ha2VmaWxlLmluIChCSVNPTkZMQUdTKTogRG9uJ3QgdXNlIC12IHNpbmNlICoub3V0cHV0IGlzIGJpZy4KKwkoY3AtcGFyc2UuYyk6IERvIHVzZSAtZCB0byBjcmVhdGUgY3AtcGFyc2UuaC4KKwkoY3AtcGFyc2Uubyk6IERvbid0IGRlZmluZSBQQVJTRV9PVVRQVVQuCisJKiB4LW1pcHMsIHgtbTg4a2RndXggKEJJU09ORkxBR1MpOiBObyAtdi4KKworTW9uIEphbiAgNiAwNzo1NDo1NSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5wZWVwLmMgKG1hdGNoX3J0eCk6IExvb3Agb3ZlciB2ZWN0b3JzIChlLmcuLCBQQVJBTExFTCkgaW4gdGhlCisJbmF0dXJhbCBvcmRlciBzbyB3ZSBzZWUgYW4gb3BlcmFuZCBiZWZvcmUgd2Ugc2VlIGEgTUFUQ0hfRFVQIHJlZmVycmluZworCXRvIGl0LgorCisJKiBnZW5yZWNvZy5jICh3cml0ZV90cmVlXzEpOiBTaW1wbGlmeSBjb2RlIHRoYXQgd3JpdGVzIGJyYWNlcyBhbmQKKwlhdm9pZCB3cml0aW5nIHRoZW0gdW5uZWNlc3NhcmlseS4KKwlEb24ndCB3cml0ZSBkZWFkIGNvZGUgd2hlbiBsYXN0IHRlc3Qgd2FzIHVuY29uZGl0aW9uYWwuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGV4cGFuZF90d292YWxfYmlub3AsIGV4cGFuZF91bm9wKToKKwlTdGFuZGFyZGl6ZSBsb29wIGZvciB3aWRlciBtb2RlLgorCShlbWl0X2NtcF9pbnNuLCBlbWl0X2Zsb2F0X2xpYl9jbXApOiBMaWtld2lzZS4KKwkoZXhwYW5kX2Jpbm9wKTogQ29ycmVjdCBob3cgZXh0ZW5zaW9ucyBhcmUgZG9uZTogdXNlIGNvbnZlcnRfdG9fbW9kZSwKKwlkb24ndCB1c2UgU1VCUkVHIGZvciBub24taW50ZWdlciBvcGVyYXRpb25zLCBhbmQgcmVtb3ZlIHRlc3QKKwlpbnZvbHZpbmcgSE9TVF9CSVRTX1BFUl9JTlQuCisJKGV4cGFuZF91bm9wKTogU2ltaWxhciBjaGFuZ2VzOyBtYWtlIGNvZGUgY2xvc2VyIHRvIGV4cGFuZF9iaW5vcC4KKwlIYW5kbGUgZmFpbHVyZSBvZiByZWN1cnNpdmUgY2FsbCB3aGVuIGV4cGFuZGluZy4gIEZpeCBpbmNvcnJlY3QgdXNlCisJb2YgVEVNUCB3aGVuIHdpZGVuaW5nLiAgVXNlIFNVQlJFRyBmb3IgTkVHIGFuZCBOT1QuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc19wYXJ0KTogTmV3IGZ1bmN0aW9uLgorCShmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IENhbGwgaXQgaW5zdGVhZCBvZiBwdXNoX3JlbG9hZCB3aGVuIHdlIGFyZQorCXJlbG9hZGluZyBhIFBMVVMgb3IgYSBjb25zdGFudC4KKworU3VuIEphbiA1IDE4OjM0OjE1IDE5OTIgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBtYWtlLWNjMS5jb206ICBDaGFuZ2UgZmlsZSBuYW1lcyBmcm9tIGNwLXRhYi4qIHRvIGNwLXBhcnNlLiouCisKK1N1biBKYW4gIDUgMTg6MDY6MTEgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ29ycmVjdGx5IGdyb2sgUkVGRVJFTkNFX1RZUEUKKwlwYXJhbWV0ZXJzIHdoZW4gVFlQRV9SRUZFUkVOQ0VfVE8gaXMgYXV0b21hZ2ljYWxseSBjb252ZXJ0ZWQuCisKK1N1biBKYW4gIDUgMDU6MTk6MTkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKENPTlNUUlVDVE9SX05BTUVfRk9STUFUKTogTmV3IG1hY3JvLgorCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yKTogTWFrZSBjb25zdHJ1Y3RvciBuYW1lCisJZnJvbSBuYW1lIG9mIGZpbGUgb3Igb2YgYSBnbG9iYWwgdGhhdCBpdCBkZWZpbmVzLgorCVJldHVybiBjb25zdHJ1Y3RvciBuYW1lLgorCShmaW5pc2hfb2JqYyk6IFVzZSBuYW1lIHJldHVybmVkIGFzIG5hbWUgdG8gY2FsbC4KKworCSogcHJvdG9pemUuYyAoR1VFU1NQQVRITEVOKTogTmV3IG1hY3JvLgorCShtYWluKTogVXNlIHRoYXQgZm9yIGluaXRpYWwgYnVmZmVyIHNpemUgZm9yIGdldGN3ZC4KKwkqIGRieG91dC5jIChnZXR3ZCwgZ2V0Y3dkLCBHVUVTU1BBVEhMRU4pOiBEZWZpbmUgYXMgaW4gcHJvdG9pemUuYy4KKwkoZGJ4b3V0X2luaXQpOiBDYWxsIGdldGN3ZCBpbiBsb29wLCBhcyBpbiBwcm90b2l6ZS5jLgorCSogYy1hdXgtaW5mby5jIChnZXR3ZCwgZ2V0Y3dkLCBHVUVTU1BBVEhMRU4pOiBEZWZpbmUgYXMgaW4gcHJvdG9pemUuYy4KKwkoZ2VuX2F1eF9pbmZvX3JlY29yZCk6IENhbGwgZ2V0Y3dkIGluIGxvb3AuCisJKiBpMzg2di5oLCBpMzg2dmdhcy5oIChNQVhQQVRITEVOKTogRG9uJ3QgZGVmaW5lLgorCisJKiBzdnIzLmggKExJTktfU1BFQyk6IERvbid0IHBhc3MgLUsuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyByZWNvcmQgaW4gbm9uX3JlbG9hZGVkX29wZXJhbmRzIGlmIG5vIC1PLgorCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKToKKwlBZGQgYnJhY2VzIGFuZCBhZGp1c3QgY29uZGl0aW9uYWxzIHRvIGZpeCBiYWxhbmNlIGFuZCBpbmRlbnRhdGlvbi4KKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yKTogTWFyayBfX29iamNfZmlsZV9pbml0IHVzZWQuCisKK1NhdCBKYW4gIDQgMTM6Mjc6NDAgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBwcm90b2l6ZS5jOiB1bnByb3RvaXplIGdldGN3ZCAmIGZvcmsgZGVjbGFyYXRpb25zLgorCShlZGl0X2ZuX2RlY2xhcmF0aW9uKTogdXNlICJWT0xBVElMRSIsIG5vdCAidm9sYXRpbGUiLgorCitTYXQgSmFuICA0IDIwOjE5OjQxIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmggKHNldF92b2xhdGlsZSk6IEFkZCBuZXcgZ2xvYmFsIHZhcmlhYmxlIHJlZmVyZW5jZS4KKworCSogbWlwcy5jIChzZXRfdm9sYXRpbGUpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlIHRvIGtlZXAgdHJhY2sgb2YgdGhlCisJbnVtYmVyIG9mIC5zZXQgdm9sYXRpbGUncyBkb25lLiAgQXQgcHJlc2VudCwgbm8gY29kZSBhY3R1YWxseSB0dXJucworCXRoaXMgb24uCisJKG1pcHNfbW92ZV8xd29yZCk6IFVzZSAlLiBpbnN0ZWFkIG9mIHB1dHRpbmcgY29uc3QwX3J0eCBpbnRvIGFuCisJdW51c2VkIG9wZXJhdG9yIGFuZCB1c2luZyAleiB0byBnZXQgdG8gJDAsIHdoaWNoIGlzIGhhcmR3aXJlZCB0byAwLgorCShtaXBzX21vdmVfMndvcmRzKTogTGlrZXdpc2UuCisJKG92ZXJyaWRlX29wdGlvbnMpOiBBbGxvdyAlLiwgJXssIGFuZCAlfSBwdW5jdHVhdGlvbi4KKwkocHJpbnRfb3BlcmFuZHMpOiBBZGQgc3VwcG9ydCBmb3IgJS4gdG8gZ2V0IHRoZSBjdXJyZW50IG5hbWUgb2YKKwlyZWdpc3RlciAwLCAleyB0byB0dXJuIG9uIC5zZXQgdm9sYXRpbGUsIGFuZCAlfSB0byB0dXJuIG9uIC5zZXQKKwlub3ZvbGF0aWxlLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IEdpdmUgYW4gZXJyb3IgaWYgLnNldCB2b2xhdGlsZSB3YXMgbGVmdCBvbiBpbgorCXRoZSBlcGlsb2d1ZS4KKwkobWlwc19hc21fZmlsZV9zdGFydCk6IERvbid0IGVtaXQgLnNldCBub2JvcHQgdW5sZXNzIHdlIGFyZSBmaWxsaW5nCisJYnJhbmNoIGRlbGF5IHNsb3RzLgorCisJKiBtaXBzLm1kIChzZXQgcmVnIG9uIGNvbXBhcmlzb24gZGVmaW5lX3NwbGl0cyk6IERvbid0IGFsbG93IHRoZQorCXNjaGVkdWxlciB0byBzcGxpdCBhbnkgc2V0IG9mIGEgY29tcGFyaXNpb24gaW5zbnMsIHRvIHdvcmsgYXJvdW5kIGEKKwlidWcgaW4gc2NoZWQuYy4KKworU2F0IEphbiAgNCAyMzowMTo0MSAxOTkyICBKZWZmcmV5IEEgTGF3ICAobGF3IGF0IHBsYW5ldC5zdXBlci5vcmcpCisKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZyk6IERlY3JlbWVudCAoaW5zdGVhZCBvZiAKKwlpbmNyZW1lbnQpIG51bV9zYXZlZF9yZWdzIHdoZW4gYSBmcmFtZSBwb2ludGVyIGlzIG5lZWRlZC4KKwkodGhlIGxpbmsvdW5sayB3aWxsIHJlc3RvcmUgdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIpICAKKworU2F0IEphbiAgNCAxMToxMToyNCAxOTkyICBEZW5uaXMgUC4gR2xhdHRpbmcgIChkZW5uaXNnIGF0IHR0aSkKKworCSogbmV4dC5oIChXQ0hBUl9UWVBFLCBXQ0hBUl9UWVBFX1NJWkUpOiAjdW5kZWYgYmVmb3JlIGRlZmluaW5nLgorCitTYXQgSmFuICA0IDA3OjQwOjI1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoY29udmVydF90b19tb2RlKTogQ29ycmVjdGx5IHplcm8tZXh0ZW5kIGEgY29uc3RhbnQgaW50bworCWEgbW9kZSB3aG9zZSBzaXplIGlzIHR3aWNlIHRoZSBob3N0IGludCBzaXplLgorCisJKiBtYWNobW9kZS5oIChlbnVtIG1vZGVfY2xhc3MpOiBBZGQgTUFYX01PREVfQ0xBU1MuCisJKEdFVF9DTEFTU19OQVJST1dFU1RfTU9ERSk6IE5ldyBtYWNyby4KKwkoYnl0ZV9tb2RlLCB3b3JkX21vZGUpOiBBZGQgZGVjbGFyYXRpb25zLgorCSogY2FsbGVyLXNhdmUuYyAoY2hvb3NlX2hhcmRfcmVnX21vZGUpOiBVc2UgR0VUX0NMQVNTX05BUlJPV0VTVF9NT0RFLgorCSogY29tYmluZS5jIChtYWtlX2V4dHJhY3Rpb24pOiBEb24ndCB1c2UgZXhwbGljaXQgUUltb2RlIGFuZCBTSW1vZGUuCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogSW50ZWdlciBDT05TVF9ET1VCTEVzIGhhdmUgCisJVk9JRG1vZGUsIG5vdCBESW1vZGUuCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBSZW1vdmUgZXhwbGljaXQgREZtb2RlIHJlZmVyZW5jZS4KKwkqIGV4cG1lZC5jIChpbml0X2V4cG1lZCk6IERvbid0IG1ha2Ugb3VyIG93biBjb3B5IG9mIHdvcmRfbW9kZS4KKwkoc3RvcmVfYml0X2ZpZWxkLCBleHRyYWN0X2JpdF9maWVsZCk6IFJlbW92ZSBleHBsaWNpdAorCVFJbW9kZSByZWZlcmVuY2U7IGRvbid0IHJlY29tcHV0ZSB3b3JkX21vZGUuCisJKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCwge3N0b3JlLGV4dHJhY3R9X3NwbGl0X2JpdF9maWVsZCk6IERvbid0CisJcmVjb21wdXRlIHdvcmRfbW9kZS4KKwkoZW1pdF9zdG9yZV9mbGFnKTogTGlrZXdpc2UuCisJKGV4dHJhY3RfZml4ZWRfYml0X2ZpZWxkKTogUmVwbGFjZSBleHBsaWNpdCBtb2RlIHJlZmVyZW5jZXMgd2l0aCBhCisJbG9vcCBvbiBtb2RlczsgZG9uJ3QgcmVjb21wdXRlIHdvcmRfbW9kZS4KKwkqIGV4cHIuYyAoY29udmVydF9tb2RlLCBtb3ZlX2Jsb2NrX3t0byxmcm9tfV9yZWcsIHVzZV9yZWdzKTogRG9uJ3QKKwlyZWNvbXB1dGUgd29yZF9tb2RlLgorCShlbWl0X3B1c2hfaW5zbiwgZG9fanVtcF9ieV9wYXJ0cyopOiBMaWtld2lzZS4KKwkocHVzaF9ibG9jayk6IFJlbW92ZSBleHBsaWNpdCBRSW1vZGUgcmVmZXJlbmNlLgorCShnZXRfaW5uZXJfcmVmZXJlbmNlKTogVXNlIG1vZGVfZm9yX3NpemUuCisJKiBlbWl0LXJ0bC5jIChyZXN0b3JlX3JlZ19kYXRhKTogTWFrZSB1bnVzZWQgcmVncyB3b3JkX21vZGUuCisJKG9wZXJhbmRfc3Vid29yZCk6IERvbid0IHJlY29tcHV0ZSB3b3JkX21vZGUuCisJKiBmb2xkLWNvbnN0LmMgKG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlKTogTGlrZXdpc2UuCisJKG1lcmdlX2NvbXBvbmVudF9yZWZlcmVuY2VzKTogTGlrZXdpc2UuCisJKiBmbG93LmMgKG1hcmtfc2V0XzEsIG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCisJKiBsb29wLmMgKGNvbWJpbmVfbW92YWJsZXMpOiBVc2UgR0VUX0NMQVNTX05BUlJPV0VTVF9NT0RFLgorCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IFJlcGxhY2UgU0ltb2RlIHJlZmVyZW5jZXMgaW4gbXVsdGktd29yZAorCW11bHRpcGx5IHdpdGggdGhlIG1vZGUgdXNlZCBmb3IgZWFjaCBzdWJwYXJ0LgorCShleHBhbmRfYmlub3AsIGV4cGFuZF91bm9wKTogRG9uJ3QgcmVjb21wdXRlIHdvcmRfbW9kZS4KKwkqIHJlZy1zdGFjay5jIChyZWdfdG9fc3RhY2spOiBVc2UgR0VUX0NMQVNTX05BUlJPV0VTVF9NT0RFLgorCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogQ2hlY2sgZm9yIE1PREVfRkxPQVQsIG5vdCBTRm1vZGUvIERGbW9kZS4KKwkqIHJ0bC5jIChjbGFzc19uYXJyb3dlc3RfbW9kZSwgYnl0ZV9tb2RlLCB3b3JkX21vZGUpOiBEZWZpbmUuCisJKGluaXRfcnRsKTogSW5pdGlhbGl6ZSB0aGVtLgorCSogc2NoZWQuYyAoYXR0YWNoX2RlYXRocyk6IERvbid0IHJlY29tcHV0ZSB3b3JkX21vZGUuCisJKiBzdG9yLWxheW91dC5jIChtb2RlX2Zvcl9zaXplKTogVXNlIEdFVF9DTEFTU19OQVJST1dFU1RfTU9ERS4KKwkoZ2V0X2Jlc3RfbW9kZSk6IExpa2V3aXNlLgorCURvbid0IHJlY29tcHV0ZSB3b3JkX21vZGUuCisJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBSZXBsYWNlIGRlZmF1bHQgb2YgU0ltb2RlIHdpdGggd29yZF9tb2RlLgorCisJKiBjYWxscy5jIChjYWxsc19hbGxvY2EpOiBEb24ndCByZWN1cnNlIG9uIEJMT0NLX1NVUEVSQ09OVEVYVC4KKworU2F0IEphbiAgNCAwMzo0MjowOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHByb3RvaXplLmMgKHBvaW50ZXJfdHlwZSk6IFVzZSBjaGFyICogaWYgbm9uLUFOU0kuCisJKGNvbnN0X3BvaW50ZXJfdHlwZSk6IExpa2V3aXNlLgorCShtYWxsb2MsIHJlYWxsb2MpOiBEZWNsYXJlIHRvIHJldHVybiBwb2ludGVyX3R5cGUuCisJKHNldGptcCk6IERvbid0IGRlY2xhcmUsIHRvIGF2b2lkIHRyb3VibGUgd2l0aCBtYWNybyBkZWZucy4KKwkoY29uc3QpOiBJZiBub3QgQU5TSSwgZGVmaW5lIGFzIGVtcHR5IG1hY3JvLgorCitTYXQgSmFuICA0IDAwOjU5OjUzIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMuYyAobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IFdoZW4gY29udmVydGluZyBhIHN5bWJvbF9yZWYsCisJdXNlIGFuIGV4dHJhIHRlbXAgcmVnIHdoZW4gLWZQSUMsIGFuZCBhZGQgYSBSRUdfRVFVQUwgbm90ZSB0byB0aGUKKwlpbnNuIHJlZmVyZW5jaW5nIHRoZSBnbG9iYWwgb2Zmc2V0IHRhYmxlLiAgVGhpcyBhbGxvd3MgbG9vcCB0bworCW9wdGltaXplIHRoZXNlIFBJQyBzZXF1ZW5jZXMuCisKK0ZyaSBKYW4gIDMgMjA6Mjk6NTcgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChyZXR1cm4pOiBBbHdheXMgb3V0cHV0IHJldHVybiBpbnNucy4KKworCSogaTM4Ni5oIChGVU5DVElPTl9QUk9MT0dVRSk6IElmIHRoZSBsYXN0IG5vbm5vdGUgaW5zbiBpbiBhIGZ1bmN0aW9uCisJaXMgYSBCQVJSSUVSLCBkb24ndCBvdXRwdXQgYSBmdW5jdGlvbiBlcGlsb2d1ZS4KKworRnJpIEphbiAgMyAxMjo0MzowOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHQtZGVjcm9zZSwgdC1kZWNzdGF0biwgdC1lbmNyb3NlLCB0LWkzODZyb3NlLCB0LW1pcHMgKEFMTCk6CisJVXNlIGxpYmdjYy5hLCBub3QgbGliZ2NjLgorCisJKiBwcm90b2l6ZS5jIChTVFJJTkdJRlkpOiBQcm92aWRlIG5vbi1BTlNJIGFsdGVybmF0aXZlIGRlZmluaXRpb24uCisKKwkqIGMtZGVjbC5jIChnZXRfcGFybV9pbmZvKTogS2VlcCBub24tcGFybXMgaW4gdGhlIHBhcm0gbGlzdC4KKworCSogc3RtdC5jIChjb3N0X3RhYmxlKTogTm93IHNob3J0LgorCShlc3RpbWF0ZV9jYXNlX2Nvc3RzKTogSGFuZGxlIHRoYXQuCisKKwkqIE1ha2VmaWxlLmluIChmbG9hdC5oLCAqcHJvdG9pemUuMSwgZ2NjLnh0YXIuWik6CisJTWFrZSB0ZW1wIGZpbGVzLCB0aGVuIHJlbmFtZS4KKwkoY2xlYW4pOiBEZWxldGUgdGhvc2UgdGVtcCBmaWxlcy4KKworCSogTWFrZWZpbGUuaW4gKGMtcGFyc2UuYyk6IERvbid0IHVzZSAtZCwgc2luY2UgY3AtcGFyc2Uub3V0cHV0IGlzIGJpZy4KKworRnJpIEphbiAgMyAxMDozMjozMSAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChjcC1wYXJzZS5jKTogQWRkIG1pc3NpbmcgLW8gZmxhZy4KKworRnJpIEphbiAgMyAwODoyMTowNCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWctc3RhY2suYzogQ29tcGxldGUgbGFzdCBjaGFuZ2UgKHJlbmFtaW5nIERGbW9kZV9yZWcpLgorCisJKiBleHBtZWQuYyAoaW5pdF9leHBtZWQpOiBQYXNzIGR1bW15IHBvaW50ZXIgdG8gbnVtYmVyIG9mIGNsb2JiZXJzIHRvCisJcmVjb2cgc28gaXQgY2FuIGxldCB1cyBzZWUgcGF0dGVybnMgdGhhdCBuZWVkIGFkZGVkIGNsb2JiZXJzLgorCitGcmkgSmFuICAzIDA3OjU0OjMyIDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjLWRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogUmVjb3JkIHdoZXRoZXIgdGhpcyBpcyBhbiBpbXBsaWNpdAorCWRlY2xhcmF0aW9uIGJlZm9yZSBzZXR0aW5nIElERU5USUZJRVJfSU1QTElDSVRfREVDTC4KKworVGh1IEphbiAgMiAyMToxNzoxMiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy5jIChjb21wdXRlX2ZyYW1lX3NpemUpOiBEb24ndCBjb3VudCBGUCByZWdpc3RlcnMgdHdpY2UuCisKK1RodSBKYW4gIDIgMTQ6NTk6NTUgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBoYWwpCisKKwkqIGNwLWxleC5oOiBSZW5hbWVkIGZyb20gY3AtcGFyc2UuaC4gIE5vdyBjcC1wYXJzZS5oIGlzIHRoZSBmaWxlCisJY3JlYXRlZCBieSBiaXNvbiBmcm9tIGNwLXBhcnNlLnkuCisJKiBNYWtlZmlsZS5pbjogcmVmbGVjdCB0aGlzIG5hbWluZyBjaGFuZ2UuCisKK1RodSBKYW4gIDIgMTI6Mzc6MzIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfb2JqX21ldGhvZF9jYWxsKTogVHlwbyBpbiBORVhUIGNhc2UuCisKKwkqIG5leHQuaCAoSEFWRV9BVEVYSVQpOiBEZWZpbmVkLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKToKKwlObyBlcnJvciBpZiBvdmVycmlkZSBkZWNsIHRoYXQgaGFzIERFQ0xfQlVJTFRfSU5fTk9OQU5TSS4KKworCSogTWFrZWZpbGUuaW4gKGMtcGFyc2UuYyk6IERvbid0IHVzZSAtbywgc2luY2UgY3AtcGFyc2Uub3V0cHV0IGlzIGJpZy4KKworCSogTWFrZWZpbGUuaW4gKHByb3RvaXplLCBQUk9UT0laRSk6IERlbGVlIHRoZXNlIDIgbmV3IHRhcmdldHM7CisJYHByb3RvaXplJyB3YXMgcmVkdW5kYW50LgorCisJKiBjLXR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsKTogSWYgdGhlIGZuIGlzIHZvbGF0aWxlLAorCW1ha2UgYSBwb2ludGVyLXRvLXZvbGF0aWxlLWZ1bmN0aW9uIHR5cGUgcG9pbnRlci4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSGFuZGxlIGNhbGxzIHRvIHN1Y2ggcG9pbnRlcnMgYXMgdm9sYXRpbGUuCisKKwkqIGV4cG1lZC5jIChpbml0X2V4cG1lZCk6IFBhc3MgYWxsIDMgYXJncyB0byBgcmVjb2cnLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50KTogRm9yIFJFQUxfVFlQRSwgbW9kZV9mb3Jfc2l6ZSBhcmcgaXMgYml0cy4KKworCSogc3BhcmMubWQgKHN0b3JpbmcgU0YgaW50byBtZW0gYXQgc3ltYiBhZGRyKTogRml4IHR5cG9zLgorCisJKiBwcm90b2l6ZS5jIChteV9hY2Nlc3MsIG15X3N0YXQsIG15X2V4ZWN2cCwgbXlfbGluaywgbXlfdW5saW5rKToKKwkobXlfb3BlbiwgbXlfY2htb2QpOiBNYWNyb3MgdGhhdCBydW4gYWNjZXNzLCBzdGF0LC4uLiB3aXRoIGNhc3RzLgorCVJlbmFtZWQgZnJvbSBmb3JtZXIgUE9TSVgtb25seSBtYWNyb3MgYW5kIG1hZGUgdW5jb25kaXRpb25hbC4KKwlBbGwgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGFsc28gcmVuYW1lZC4KKworCSogbTY4ay5oIChMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1ApOiBVbmRvIGNoYW5nZSBiZWxvdywKKwl0aHVzIG1ha2luZyB0aGUgYmVoYXZpb3IgcmVhbGx5IGNoYW5nZSB0byBhY2NlcHQgYWxsIENPTlNUX0RPVUJMRS4KKworCSogbGliZ2NjMS5jLCBsaWJnY2MyLmM6IFJlbmFtZWQgZnJvbSBnbnVsaWIxLmMsIGdudWxpYjIuYy4KKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IExpbmsgd2l0aCBsaWJnY2MuYS4KKwkqIE1ha2VmaWxlLmluIChsaWJnY2MpOiBSZW5hbWUgdGFyZ2V0cyBhbmQgdmFyaWFibGVzIGZyb20gZ251bGliLgorCSogKi5oLCB0LSosIHgtKjogUmVuYW1lIHJlZnMgdG8gdGhvc2Ugc3ltYm9scyBhbmQgZmlsZXMuCisJKiBleHByLmMgKExJQkdDQ19ORUVEU19ET1VCTEUpOiBSZW5hbWVkIGZyb20gR05VTElCXy4uLgorCisJKiBtNjhrLmMgKHN5bWJvbGljX29wZXJhbmQpOiBSZWplY3QgYWxsIENPTlNUX0RPVUJMRS4KKwkqIG02OGsuaCAoU0VMRUNUX1JUWF9TRUNUSU9OKTogVXNlIExFR0lUSU1BVEVfUElDX09QRVJBTkRfUC4KKwkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogUmVqZWN0IHRoZSBDT05TVF9ET1VCTEVzCisJdGhhdCBzeW1ib2xpY19vcGVyYW5kIHVzZWQgdG8gYWNjZXB0LgorCitUaHUgSmFuICAyIDIxOjA2OjEzIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcHJvdG9pemUuYyAoaXNfaWRfY2hhcixmcmVlX2RlZl9kZWMsY2hlY2tfYXV4X2luZm8pOgorCURvbid0IGRlY2xhcmUgdGhlbSBgaW5saW5lJy4KKwkoc2F2ZV9kZWZfb3JfZGVjLG11bmdlX2NvbXBpbGVfcGFyYW1zLGZpbmRfZXh0ZXJuX2RlZixjaGVja19zb3VyY2UsCisJc2Nhbl9mb3JfbWlzc2VkX2l0ZW1zKTogVXNlIGFsbG9jYSBpbnN0ZWFkIG9mIHZhcmlhYmxlIGxlbmd0aCBhcnJheXMuCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZSx1bnByb3RvaXplKTogR2V0ICQoTElCUykgZm9yIGFsbG9jYS4KKworVGh1IEphbiAgMiAyMTo0MDo1MiAxOTkyICBKZWZmcmV5IEEgTGF3ICAobGF3IGF0IGIxMTUuc3VwZXIub3JnKQorCisJKiBzcGFyYy5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IEVuYWJsZSBjYWxsZXItc2F2ZXMgZm9yIC1PMgorCWFuZCBoaWdoZXIgb3B0aW1pemF0aW9uIGxldmVscy4KKworVGh1IEphbiAgMiAwNjo0Njo1NiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBDb21wYXJlIGRlYnVnX2luZm9fbGV2ZWwgd2l0aCBlbnRyaWVzIGluCisJaXRzIGVudW0sIG5vdCB3aXRoIGludGVnZXJzLgorCisJKiByZWctc3RhY2suYyAoe1NGLERGfW1vZGVfcmVnKTogRGVsZXRlZC4KKwkoRlBfbW9kZV9yZWcpOiBOZXcgYXJyYXksIGluZGV4ZWQgYnkgcmVnaXN0ZXIgYW5kIGJ5IG1vZGUuCisJKHJlZ190b19zdGFjayk6IFJlcGxhY2UgaW5pdGlhbGl6YXRpb24gb2Ygb2xkIHZhcnMgd2l0aCBpbml0aWFsaXphdGlvbgorCW9mIEZQX21vZGVfcmVnLgorCShyZXBsYWNlX3JlZyk6IFVzZSBuZXcgYXJyYXkuCisKKwkqIHJvbXAuYywgcm9tcC5oLCByb21wLm1kOiBSZW5hbWUgc3ltYm9saWNfb3BlcmFuZCB0bworCXJvbXBfc3ltYm9saWNfb3BlcmFuZC4KKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBDcmVhdGUgdmlydHVhbCByZWdpc3RlcnMgYmVmb3JlIHRoZQorCXN0cnVjdHVyZSB2YWx1ZSByZWdzaXN0ZXJzLCBzaW5jZSB0aGUgbGF0dGVyIG1pZ2h0IHVzZSB0aGUgZm9ybWVyLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50KTogRml4IHR5cG86IG1pc3NpbmcgYXJnIHRvIGV4cGFuZF9leHByLgorCisJKiB2YXgubWQgKGNhbGxfcG9wLCBjYWxsX3BvcF92YWx1ZSk6IFVzZSBjb3JyZWN0IHJlZ2lzdGVyIG51bWJlciBmb3IKKwlzdGFjayBwb2ludGVyLiAgQWRkIG5ldyBwYXR0ZXJucyBmb3IgY2FzZSBvZiB6ZXJvIGFyZ3MuCisKK1RodSBKYW4gIDIgMDg6MTI6NTkgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IHN1bmZpc2gpCisKKwkqIHgtYW1peDogIE1pbm9yIGNoYW5nZXMgdG8gc29tZSBjb21tZW50cy4KKwkqIHgtYW1peCAoQ0NMSUJGTEFHUywgR05VTElCMl9DRkxBR1MsIFhDRkxBR1MpOiAgUmVtb3ZlIGRlZmluaXRpb25zLgorCSogeC1hbWl4IChtYW5leHQpOiAgQWRkIGRlZmluaXRpb24uCisKK1RodSBKYW4gIDIgMTE6MTQ6MjggMTk5MSAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBQTFVTX0VYUFIpOiBJZiBhc3NvY2lhdGlvbiBwZXJtaXRzCisJcmVkdWN0aW9uIHRvIHZhciswLCBjb252ZXJ0IHZhciB0byB0aGUgZGVzaXJlZCB0eXBlIGJlZm9yZSByZXR1cm5pbmcKKwlpdC4KKworV2VkIEphbiAgMSAxMDozNzo1MCAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogV2hlbiBHRVRfTU9ERV9CSVRTSVpFIChUT19NT0RFKSA+CisJQklUU19QRVJfV09SRCwgY2hlY2sgdGhhdCBpdCdzIGFsc28gPiBHRVRfTU9ERV9CSVRTSVpFIChGUk9NX01PREUpLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogSW4gQ09OU1RSVUNUT1IgY2FzZSwgcHJlc2VydmUKKwlNRU1fSU5fU1RSVUNUX1Agd2hlbiBjcmVhdGluZyBhIG5ldyB0YXJnZXQgd2hlbiBUQVJHRVQgYW5kIEVYUCBtaWdodAorCW5vdCBiZSBpbmRlcGVuZGVudC4KKworV2VkIEphbiAgMSAxODozMjowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAocGFybWxpc3RfMSk6IEFjY2VwdCBgUEFSTVM7IFBBUk1TJy4KKwkocGFybWxpc3Rfb3JfaWRlbnRpZmllcnNfMSk6IExpa2V3aXNlLiAgQWxzbyB1c2UgcGxhaW4gcGFybWxpc3RfMi4KKwlEZWxldGUgdGhlIChbbmFtZXNdIGRlY2xzKSBzeW50YXguCisJKGRlZm5fcGFybXMsIGRlZm5fcGFybWxpc3RfMik6IERlbGV0ZWQuCisJKiBjLWRlY2wuYyAoZ2V0X3Bhcm1faW5mbyk6IFB1dCBwYXJtIGRlY2xzIGludG8gb3JpZ2luYWwgb3JkZXIuCisJRG9uJ3QgbnJldmVyc2UgdGhlIG9yaWdpbmFsIGRlY2xzIGxpc3QuCisJKHB1c2hkZWNsLCBkdXBsaWNhdGVfZGVjbHMpOiBBdm9pZCBlcnJvciBmb3IgZm9yd2FyZCBwYXJtIGRlY2wuCisJKGNsZWFyX3Bhcm1fb3JkZXIpOiBOZXcgZnVuY3Rpb24uCisJKHB1c2hfcGFybV9kZWNsKTogUmVjb3JkIG9yaWdpbmFsIG9yZGVyIG9mIHBhcm1zLgorCisJKiBjLWRlY2wuYyAoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiBOZXcgc2xvdCBzdWJibG9ja3NfdGFnX3RyYW5zcGFyZW50LgorCShwdXNobGV2ZWwpOiBVc2UgdGhhdCwgbm90IC0+cGFybV9mbGFnLgorCShzdGFydF9mdW5jdGlvbik6IFNldCB0aGF0IHNsb3QuCisKKwkqIGNvbmZpZy5zdWI6IEFsd2F5cyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFtaXggYW5kIHN5c3Y0LgorCUNvbnZlcnQgY29tbW9kb3JlIHRvIGNibSBhbmQgZGlnaXRhbCB0byBkZWMuCisKKwkqIG02OGsubWQgKHN0YWNrIGFkanVzdCB0aGVuIHB1c2ggU0kpOiBOZXcgcGVlcGhvbGUuCisKKwkqIG02OGsuaCwgZng4MC5oIChXQ0hBUl9UWVBFKTogVXNlIHByZWNpc2VseSAibG9uZyBpbnQiLgorCSogc3VuMy5oIChXQ0hBUl9UWVBFLCBXQ0hBUl9UWVBFX1NJWkUpOiBVbmRlZiBiZWZvcmUgZGVmaW5pbmcuCisKKwkqIGNleHAueSAoeXlsZXgpOiBVc2UgTE9OR19UWVBFX1NJWkUsIG5vdCBJTlRfVFlQRV9TSVpFLgorCShMT05HX1RZUEVfU0laRSk6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24uCisKKwkqIG9iamMtYWN0aW9ucy5jOiBEZWNsYXJlIGluZGV4IGFuZCByaW5kZXguCisJKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yKTogU2ltcGxpZnkgbGFzdCBjaGFuZ2UuCisJVXNlIGEgZml4ZWQgbmFtZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorCShpbml0X29iamMpOiBEb24ndCBkbyBjb25zdHJ1Y3RvciBoZXJlLgorCShmaW5pc2hfb2JqYyk6IERvIGl0IGhlcmUsIHdpdGggcHJvcGVyIG5hbWUgaWYgbm90IE5FWFRfT0JKQ19SVU5USU1FLgorCisJKiBwcm90b2l6ZS5jOiBVbnByb3RvaXplZC4KKwkoZWRpdF9maWxlKTogSW1wcm92ZSBtZXNzYWdlIGluIC1uIGNhc2UuCisKKwkqIE1ha2VmaWxlLmluIChMQU5HVUFHRVMpOiBBZGQgcHJvdG8uCisJKEMsIEMrKywgT0JKQywgT0JKRUNUSVZFLUMpOiBBbGlhc2VzIGZvciBsLmMuIHRhcmdldHMuCisJKFBST1RPSVpFLCBwcm90b2l6ZSwgUFJPVE8pOiBBbGlhc2VzIGZvciBwcm90by4KKwkocmVzdC5lbmNhcCk6IERlbGV0ZSBkZXAgYHByb3RvJy4KKworV2VkIEphbiAgMSAxNTowNzo0MSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy5tZCAoZXh0ZW5kKik6IFVzZSBnZW5fbG93cGFydCB0byBtYWtlIHRoZSBTVUJSRUcsIHJhdGhlciB0aGFuCisJZG9pbmcgaXQgd3JvbmcgYnkgaGFuZC4gIElmIG5vdCBvcHRpbWl6aW5nLCBtYWtlIHNpZ24gZXh0ZW5kcyBmcm9tCisJbWVtb3J5IG5vdCBmb3JjZSB0aGUgb3BlcmFuZCBpbnRvIGEgcmVnaXN0ZXIgZmlyc3QgYW5kIGRvIHR3bworCXNoaWZ0cyAtLSBjb21iaW5lIGFscmVhZHkgZG9lcyB0aGlzIHdoZW4gb3B0aW1pemluZy4KKwkoY29weXJpZ2h0KTogQWRkIDE5OTIgdG8gbGlzdCBvZiB5ZWFycyB0aGUgZmlsZSB3YXMgbW9kaWZpZWQuCisKK1dlZCBKYW4gIDEgMDY6MTA6MDEgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBXaGVuIGZvcmNpbmcgYW4gaWxsZWdpdGltYXRlIGNvbnN0YW50IGludG8KKwltZW1vcnksIHVzZSBtb2RlIG9mIFNFVF9ERVNUIGluIGNhc2UgY29uc3RhbnQgaXMgVk9JRG1vZGUuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogUGFzcyBpbmRleCB0eXBlIHRvIGVtaXRfY2FzZV9ub2RlcyBpbnN0ZWFkCisJb2YgdW5zaWduZWQgZmxhZy4KKwkobm9kZV9oYXNfe2xvdyxoaWdofV9ib3VuZCk6IEFjY2VwdCBJTkRFWF9UWVBFIGFzIGFuIGFyZ3VtZW50IGFuZCBzZWUKKwlpZiB0aGUgYSBub2RlIHZhbHVlIGlzIGF0IHRoZSBsaW1pdCBvZiB2YWx1ZXMgb2YgdGhlIHR5cGUuCisJKG5vZGVfaXNfYm91bmRlZCk6IEFjY2VwdCBJTkRFWF9UWVBFIGFuZCBwYXNzIHRvIGFib3ZlIGZ1bmN0aW9uczsKKwlhbHdheXMgY2FsbCB0aGVtLgorCShlbWl0X2Nhc2Vfbm9kZXMpOiBBY2NlcHQgSU5ERVhfVFlQRSBpbnN0ZWFkIG9mIFVOU0lHTkVEUCBhcyBhcmc7CisJcGFzcyBpbmRleCB0eXBlIHRvIHJlY3Vyc2l2ZSBjYWxscyBhbmQgdG8gY2FsbHMgdG8gYm91bmQgY2hlY2tpbmcKKwlmdW5jdGlvbnMuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9pbnRlZ2VyX3plcm8pOiBEZWxldGVkLgorCShhc3NlbWJsZV9pbnRlZ2VyLCBhc3NlbWJsZV9yZWFsKTogTmV3IGZ1bmN0aW9ucy4KKwkob3V0cHV0X2NvbnN0YW50X3Bvb2wsIG91dHB1dF9jb25zdGFudCk6IFVzZSBuZXcgZnVuY3Rpb25zLgorCSogZmluYWwuYyAoZW5kX2ZpbmFsLCBwcm9maWxlX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisKKwkqIGNhbGxzLmMgKGNhbGxzX2FsbG9jYSk6IERvbid0IGludGVycHJldCBvcGVyYW5kcyB0aGF0IGFyZSBSVEwgYXMgaWYKKwl0aGV5IHdlcmUgdHJlZXM7IGNoZWNrIGFyZ3Mgb2YgbmVzdGVkIENBTExfRVhQUiBmb3IgYWxsb2NhIGNhbGxzLgorCitXZWQgSmFuICAxIDE2OjUxOjMwIDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBmaXNocG9uZCkKKworCSogTWFrZWZpbGUuaW4gKG1hbmV4dCk6IEluY2x1ZGUgdGhlICcuJyBjaGFyYWN0ZXIuCisJKG1hbmRpcik6IERvbid0IHVzZSBtYW5leHQuCisJKGluc3RhbGwtbWFuLCB1bmluc3RhbGwpOiBDaGFuZ2UgdXNlcyBvZiBtYW5leHQuCisKK1dlZCBKYW4gIDEgMjE6MzE6MDEgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBpODYwLm1kIChjbXBlcXNpLCBjbXBsdHNpLCBjbXBndHNpKTogIE1hZGUgY29udHJvbCBmbG93IG1vcmUgb2J2aW91cy4KKwkoY21wbmVzaSwgY21wbGVzaSwgY21wZ2VzaSk6ICBOZXcgcGF0dGVybnMuCisJKGNtcGdldXNpLCBjbXBsZXVzaSk6ICBGaXhlZCBidWcgaW4gY29tcGFyZXMgYWdhaW5zdCB6ZXJvLgorCitUdWUgRGVjIDMxIDExOjE2OjM3IEVTVCAxOTkxICAgRGVubmlzIFAuIEdsYXR0aW5nICguLi4hdXVuZXQhdHRpIWRlbm5pc2cpCisKKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9tb2R1bGVfZGVzY3JpcHRvcik6IEVtaXQgYSBjb25zdHJ1Y3RvciAKKwlmdW5jdGlvbi4gIENvbnN0cnVjdG9yIGZ1bmN0aW9uIGNhbGxzIGEgT2JqQyBydW4tdGltZSByb3V0aW5lIHBhc3NpbmcKKwlhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZSdzIG1vZHVsZSBzdHJ1Y3R1cmUuCisJKGluaXRfb2JqYyk6IENhbGwgZGlmZmVyZW50IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGlmIG5vdCBOZXh0LgorCShidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSk6IERvbid0IGdpdmUgYSBzZWxlY3RvciBnbG9iYWwgc2NvcGUuCisJQ2hhbmdlZCBpbiBjb25zdHJ1Y3Rpb24gb2YgZGVjbF9zcGVjcy4KKworVHVlIERlYyAzMSAxODowNjoyMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5yZWNvZy5jIChhZGRfdG9fc2VxdWVuY2UpOiBDbGVhciBQUkVEUyBmb3IgImNvbnN0X2ludF9vcGVyYW5kIi4KKwkoc2FtZV9tb2Rlcyk6IFByb3Blcmx5IGNoZWNrIHdoZW4gd2Ugc2hvdWxkIGlnbm9yZSBhIG1vZGUgdGVzdC4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IE9ubHkgY2hhbmdlIHNwaWxsX3JlZ19zdG9yZSBmb3IKKwlvdXRwdXQgcmVsb2Fkcy4KKwlDbGVhciBzcGlsbF9yZWdfc3RvcmUgd2hlbiB3ZSBkaWQgYW4gaW5wdXQgcmVsb2FkIHRvIGEgc3BpbGwgcmVnaXN0ZXIuCisJKGRlbGV0ZV9vdXRwdXRfcmVsb2FkKTogVXNlIHNpbmdsZV9zZXQuCisJKGNvdW50X29jY3VycmVuY2VzKTogRG9uJ3QgY291bnQgdXNlIHdoaWNoIGlzIFNFVF9ERVNULgorCitUdWUgRGVjIDMxIDE2OjUxOjM3IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IENoYW5nZSBNZWlzc25lciB2ZXJzaW9uICMgdG8gNi4KKwkoQVNNX0ZJTkFMX1NQRUMpOiBEb24ndCBwYXNzIC1kIGFuZCBmcmllbmRzIHRvIG1pcHMtdGZpbGUuCisJKENPTlNUQU5UX0FMSUdOTUVOVCk6IEFsaWduIGNvbnN0cnVjdG9ycyBvbiB3b3JkIGJvdW5kYXJpZXMuCisKKwkqIG1pcHMubWQgKGV4dGVuZCopOiBSZXBsYWNlIHNpZ24gZXh0ZW5zaW9uIGluc25zIHdpdGggYQorCWRlZmluZV9leHBhbmQgdGhhdCBjb252ZXJ0cyB0aGUgZXhwYW5zaW9uIGludG8gdGhlIGFwcHJvcHJpYXRlCisJc2hpZnRzLiAgQWRkIGluc25zIHRoYXQgZG8gc2lnbiBleHRlbnNpb24gZnJvbSBtZW1vcnksIHdoaWNoIHRoZQorCW9wdGltaXplciB3aWxsIHV0aWxpdGl6ZSBpZiB0aGUgdGhpbmcgYmVpbmcgc2lnbiBleHRlbmRlZCByZWFsbHkKKwljb21lcyBmcm9tIG1lbW9yeS4gIFRoaXMgYWxsb3dzIHRoZSBzaGlmdHMgdG8gY29tcGV0ZSBmb3IgQ1NFLCBhdCBhCisJcG90ZW50aWFsIGNvc3Qgb2YgZ2VuZXJhdGluZyB3b3JzZSBjb2RlIGlmIHJlbG9hZCBzcGlsbHMgYSBISSBvciBRSQorCXJlZ2lzdGVyIHRvIHRoZSBzdGFjay4KKwkoc25lIGRlZmluZV9zcGxpdCk6IEluc3RlYWQgb2YgdXNpbmcgYSBjb25zdGFudCAwIGFzIHRoZSBzZWNvbmQKKwlhcmd1bWVudCB0byB0aGUgc2x0aSBpbnN0cnVjdGlvbiwgdXNlIGEgaGFyZCBjb2RlZCByZWdpc2l0ZXIgMC4KKworCSogbWlwcy1zeXN2LmggKE1EX1NUQVJURklMRV9QUkVGSVgpOiBEZWZpbmUgdG8gcG9pbnQgaW50byB0aGUKKwlkaXJlY3Rvcnkgd2hlcmUgdGhlIE1JUFMgY29tcGlsZXJzIGxpdmUuCisJKExJQl9TUEVDKTogQWRkIGNydG4ubyBhZnRlciBhbGwgbGlicy4KKwkoU1RBUlRGSUxFX1NQRUMpOiBVc2UgY3J0MS5vLCBub3QgY3J0bi5vLgorCShNQUNISU5FX1RZUEUpOiBDb3JyZWN0IHR5cG8sIHRoaXMgaXMgU3lzdGVtIFYsIG5vdCBCU0QuCisJQ2hhbmdlcyBhcmUgZnJvbSBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkuCisKKwkqIGNvbmZpZ3VyZSAobWlwcy0qLXN5c3YpOiBDb3JyZWN0bHkgdXNlIG1pcHMtc3lzdi5oIGluc3RlYWQgb2YKKwltaXBzLmguICBDaGFuZ2UgaXMgZnJvbSBSb24gR3VpbG1ldHRlLgorCitUdWUgRGVjIDMxIDE2OjUxOjM3IDE5OTEgIE1pY2hhZWwgU3R1bXAgIChtcnMgYXQgY2hhcmxpZS5zZWNzLmNzdW4uZWR1KQorCisJKiB0LWRlY3Jvc2UsIHQtZGVjc3RhdG4sIHQtZW5jcm9zZSwgdC1pMzg2cm9zZSwgdC1taXBzOiBSZW1vdmUKKwljb2xsZWN0MiBmcm9tIEVYVFJBX1BBU1NFUywgYXMgY29sbGVjdDIgZG9lcyBub3QgbmVlZCBpbnN0YWxsaW5nIGFzCisJY29sbGVjdDIuICBBbHNvLCBjaGFuZ2UgdGhlIHN5bWxpbmsgYmFjayB0byBhIGhhcmQgbGluay4KKworCSogTWFrZWZpbGUuaW46IEFkZCBjb2xsZWN0MiB0byBTVEFHRVNUVUZGIGFzIGl0IGlzIHNvbWV0aGluZyB0aGF0CisJbmVlZHMgcmVtb3Zpbmcgb3IgbW92aW5nIHRvIHN0YWdlbiwgYnV0IGl0IHNob3VsZCBub3QgYmUgaW5zdGFsbGVkLgorCitUdWUgRGVjIDMxIDE1OjQ3OjUwIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgaGFsKQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBTd2FwIGV2YWx1YXRpb24gb2YgT1AwIGFuZCBPUDEgc28KKwl0aGUgbGF0dGVybiBjYW4gdXNlIHRoZSByZXN1bHQgb2YgdGhlIGZvcm1lci4KKworCSogY29uZGl0aW9ucy5oOiBJbiBjb21tZW50cywgcmVmZXIgdG8gYHRtLmgnLCBzaW5jZSBgdG0tJyBpcyBubworCWxvbmdlciB0aGUgZm9ybSB1c2VkIGZvciB0aGVzZSBmaWxlcy4KKworVHVlIERlYyAzMSAxMTo0NToyNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLWxleC5jIChsaW5lbm8sIGZpbnB1dCk6IERlY2xzIGRlbGV0ZWQuCisKKwkqIGdsb2JhbC1hbGxvYy5jIChmaW5kX3JlZyk6IE5ldyBhcmcgUkVUUllJTkcuCisJKHJldHJ5X2dsb2JhbF9hbGxvYywgZ2xvYmFsX2FsbG9jKTogUGFzcyB0aGF0IGFyZy4KKworCSogTWFrZWZpbGUuaW4gKCpwcm90b2l6ZSwgKnByb3RvaXplLm8pOiBDb21waWxlIHdpdGggQ0MuCisJKiBwcm90b2l6ZS5jOiBJbmNsdWRlIGNvbmZpZy5oLCBub3QgdGNvbmZpZy5oLgorCUFsd2F5cyBkZWZpbmUgX1BPU0lYX1NPVVJDRS4KKworCSogY29udmV4Ki5oIChDUFBfU1BFQyk6ICFhbnNpIGNvbnRyb2xzIF9QT1NJWF9TT1VSQ0UsIF9DT05WRVhfU09VUkNFLgorCSogY29udjEqLmgsIGNvbnYyKi5oOiBGaWxlcyBkZWxldGVkLgorCisJKiBtNjhrLmgsIGZ4ODAuaCAoV0NIQVJfVFlQRSwgV0NIQVJfVFlQRV9TSVpFKTogRGVmaW5lZC4KKworVHVlIERlYyAzMSAwODowODozMiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogY2V4cC55ICh5eWxleCk6IFJlY29yZCB0aGUgcGFyc2VkIGNoYXJhY3RlcnMgd2hlbiBkZWFsaW5nIHdpdGgKKwltdWx0aWJ5dGUgY2hhcmFjdGVycy4KKworTW9uIERlYyAzMCAxNzoxMzozMCAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKG11bGhpMyxtdWxzaTMpOiBJZiBhIG11bHRpcGx5IGJ5IGNvbnN0YW50IDEyOCwgdXNlIHRoZQorCXR3byBvcGVyYW5kIG11bHRpcGx5IGluc3RlYWQgb2YgdGhyZWUgb3BlcmFuZCBmb3JtOiB0aGUgQVQmVAorCWFzc2VtYmxlcnMgZ2VuZXJhdGUgaW5jb3JyZWN0IG9iamVjdCBjb2RlIGZvciB0aGUgbGF0dGVyLgorCitNb24gRGVjIDMwIDE3OjM5OjM2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IENvbXBsZXRlIGxhc3QgY2hhbmdlOiB1c2UgZXhwYW5kX2FuZCByZXN1bHQuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBDaGVjayBpZiByZWxvYWRfaW4gbmVlZHMgYSBzZWNvbmRhcnkKKwlyZWxvYWQgaWYgd2UgaGF2ZSBhbiBpbi1vdXQgcmVsb2FkLCBzaW5jZSBpdCBtaWdodCBoYXZlIGJlZW4gdGhlCisJb3V0cHV0IHRoZSBuZWVkZWQgdGhlIHNlY29uZGFyeSByZWxvYWQuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBNb2RlIG9mIGludGVnZXIgQ09OU1RfRE9VQkxFIGlzCisJVk9JRG1vZGUsIG5vdCBESW1vZGUuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBDT05EX0VYUFIpOiBNYWtlIGFuIEFCU19FWFBSIHdoZW4gdGhlCisJY29tcGFyaXNvbiBpcyBMRV9FWFBSIG9yIExUX0VYUFIuCisKKwkqIGNhbGxzLmMgKGNhbGxzX2FsbG9jYSk6IE5ldyBmdW5jdGlvbi4KKwkoZXhwYW5kX2NhbGwpOiBQcmVleHBhbmQgYW55IGFyZ3VtZW50IHRoYXQgY29udGFpbnMgYSBjYWxsIHRvIGFsbG9jYQorCWlmIHRoaXMgY2FsbCB3aWxsIHVzZSB0aGUgc3RhY2suCisKKwkqIHJzNjAwMC5oIChEQVRBX1NFQ1RJT05fT1ApOiBNYWtlIHJlc3VsdCBhIHN0cmluZyB0byBhdm9pZCBjb21waWxhdGlvbgorCWVycm9yLgorCisJKiByczYwMDAuaCwgc3BhcmMuaCwgc3VuMm80LmgsIHN1bjMuaCAoV0NIQVJfVFlQRV9TSVpFKTogRml4CisJaW5jb3JyZWN0IGRlZmluaXRpb24uCisKK01vbiBEZWMgMzAgMTY6MTA6NDYgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoQ0MxX1NQRUMpOiBDb21wbGV0ZSBjaGFuZ2UgZGVsZXRpbmcgLW1ub2dwb3B0IGFuZCAtbW5ncG9wdAorCWluIGZhdm9yIG9mIC1tbm8tZ3BvcHQuCisKK01vbiBEZWMgMzAgMTE6MzI6MDUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChidWlsZF92dGFibGUpOiBJZiB3ZSdyZSBkb2luZyAjcHJhZ21hIGludGVyZmFjZQorCWFuZCB0aGUgaW50ZXJmYWNlIGlzIGtub3duLCBzZXQgVFJFRV9QVUJMSUMsIHJlZ2FyZGxlc3Mgb2YKKwlUUkVFX0VYVEVSTkFMIHNldHRpbmdzLgorCisJKiBjcC1kZWNsLmMgKG1ha2VfdGVtcG9yYXJ5X2Zvcl9yZWZlcmVuY2UpOiBEb24ndCBjYWxsCisJYGNvbnZlcnRfcG9pbnRlcl90bycsIHNpbmNlIHRoZSB0eXBlIG1heSBub3QgYmUgYW4gYWdnciB0eXBlLgorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsKTogTm93IHRha2VzIDR0aCBhcmcgTkVFRF9QT1AuCisJQWxsIGNhbGxlcnMgY2hhbmdlZC4KKworCSogY3AtY2xhc3MuYyAocGVybWFuZW50X29ic3RhY2spOiBEZWNsYXJlIGl0LgorCShhZGRfbWV0aG9kKTogcHVzaCBhbmQgcG9wIG9ic3RhY2tzIGJlZm9yZSBjaGFuZ2luZyBvdXQgb2YvaW50bworCXRlbXBvcmFyeSBhbGxvY2F0aW9uLgorCSogY3AtZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBBZGQKKwlwdXNoX29ic3RhY2tzX25vY2hhbmdlL3BvcF9vYnN0YWNrcyBhcm91bmQgY2hhbmdlcyBvdXQgb2YvaW50bworCXRlbXBvcmFyeSBhbGxvY2F0aW9uLgorCShzaGFkb3dfdGFnLHhyZWZfdGFnLHN0YXJ0X2RlY2wsZmluaXNoX2RlY2wpOiBEaXR0by4KKwkqIGNwLWRlY2wyLmMgKGdyb2tmaWVsZCxnZXRfdGVtcF9uYW1lKTogRGl0dG8uCisJKiBjcC1leGNlcHQuYyAoe2Fuc2lffWxvb2t1cF9leGNlcHRpb25fb2JqZWN0KTogRGl0dG8uCisJKiBjcC1sZXguYyAoZ2V0X3RpbWVfaWRlbnRpZmllcik6IERpdHRvLgorCSogY3AtdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IERpdHRvLgorCSogY3AtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBEaXR0by4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcixtYXliZV9idWlsZF9jbGVhbnVwKTogRGVsZXRlIGNhbGxzIHRvCisJcHJlc2VydmUgYWxsb2NhdGlvbiBzdGF0dXMuICBOb3cgaGFuZGxlZCBieSBjYWxsZXJzLgorCitNb24gRGVjIDMwIDAxOjQ0OjIxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sZXguYyAoeXlwcmludCk6IEZ1bmN0aW9uIG1vdmVkIGhlcmUuCisJKiBjLXBhcnNlLnksIG9iamMtcGFyc2UueTogTW92ZWQgZnJvbSBoZXJlLgorCisJKiBNYWtlZmlsZS5pbiAoYy1wYXJzZS5jLCBvYmpjLXBhcnNlLmMsIGNwLXRhYi5jLCBjZXhwLmMpOgorCWNkIHRvIHNyY2RpciB0byBydW4gQmlzb24uCisKKwkqIGMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBHZXQgcmlkIG9mICNpZGVudCBwZWRhbnRpYyB3YXJuaW5nLgorCSogY2NjcC5jIChkb19pZGVudCk6IFB1dCBpdCBoZXJlLgorCURvbid0IHdhcm4gaWYgaW4gc3lzdGVtIGhlYWRlciBmaWxlLgorCisJKiBjY2NwLmMgKG1haW4sIGZpbmNsdWRlKTogV2FybiBpZiBmaWxlIGVuZHMgaW4gYmFja3NsYXNoLW5ld2xpbmUuCisKKwkqIG5leHQuaCAoV0NIQVJfVFlQRSwgV0NIQVJfVFlQRV9TSVpFKTogTmV3IGRlZmluaXRpb25zLgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZmluZF9yZWcpOiBLaWNrIG91dCBsb2NhbCByZWdzIGlmIHRoYXQgaGVscHMuCisJKGdsb2JhbF9hbGxvYyk6IFNldCB1cCB2YXJzIGxvY2FsX3JlZ3NfbGl2ZV9sZW5ndGgsIGxvY2FsX3JlZ3Nfbl9yZWZzLgorCisJKiBwcm90b2l6ZS5jIChkb19wcm9jZXNzaW5nKTogRml4IHNldHRpbmcgc3lzY2FsbHNfYWJzb2x1dGVfZmlsZW5hbWUuCisKKwkqIGNvbmZpZ3VyZSAobTY4ay0qLXN5c3Y0KiwgbTY4ay0qLWFtaXgqKTogTmV3IGFsdGVybmF0aXZlcy4KKwkqIGNvbmZpZy5zdWIgKCotY29tbW9kb3JlKTogRGVmYXVsdCBPUyB0byBBbWlnYWRvcy4KKwkoLWFtaXgqKTogQWxsb3cgdGhpcyBhcyBpbnB1dC4KKwkoYW1pZ2EpOiBOZXcgYWJicmV2aWF0aW9uLgorCisJKiBzcGFyYy5jIChvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBTa2lwIHVuaW1wIGRpZmZlcmVudGx5IGluIGxlYWYuCisJVXNlIGptcCBpbnNuIHJhdGhlciB0aGFuIHNlcGFyYXRlIGFkZC4KKwkob3V0cHV0X3JldHVybik6IFNraXAgdW5pbXAgaGVyZSB0b28uCisJKiBzcGFyYy5tZCAocmV0dXJuICJwZWVwaG9sZXMiKS4gSGFuZGxlIHNraXBwaW5nIHRoZSB1bmltcC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBvcHRpbWl6aW5nIDIqRVhQUik6IFVzZSBzYXZlX2V4cHIuCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogUGVybWl0IGluaXRpYWxpemVyIGZvciBsb2NhbCBleHBsaWNpdCByZWcuCisKKwkqIGMtZGVjbC5jIChrZXB0X2xldmVsX3ApOiAgQ2hhbmdlZCB0byBhbHNvIHJldHVybiBUUlVFIGZvciBiaW5kaW5nCisJbGV2ZWxzIHdoaWNoIGNvbnRhaW4gb25seSB0YWdnZWQgdHlwZSBkZWNsYXJhdGlvbnMuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogQ2xlYW5lZCB1cCBwcmV2IGNoYW5nZS4KKworTW9uIERlYyAzMCAxMToyOTo0NyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogQ2FsbCBSRUFMX1ZBTFVFX1RSVU5DQVRFIHdpdGggMiBhcmdzLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEhhbmRsZSBhbGxvY2F0aW5nIEFSR0JMT0NLIGluIHRoZSBjYXNlCisJdGhhdCBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MgaXMgbm90IGRlZmluZWQuCisKK01vbiBEZWMgMzAgMTA6Mjc6MTEgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBwcm90b2l6ZS5jOiBmaXggdHlwbyBpbiA8c3lzL3dhaXQuaD4gaW5jbHVzaW9uLgorCitNb24gRGVjIDMwIDA2OjE2OjE2IDE5OTEgIExlb25hcmQgTm9ycmdhcmQgICh2aW5zY2kgYXQgbmljLmZ1bmV0LmZpKQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDaGFuZ2VkIGVycm9uZXVzIGVycm9yIG1lc3NhZ2UuCisKK1N1biBEZWMgMjkgMTY6MTY6NTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbik6IExhc3QgLU9uIG9wdGlvbiB3aW5zLgorCSogTWFrZWZpbGUuaW4gKEVOUVVJUkVfQ0ZMQUdTKTogQWRkIC1PMC4KKworCSogTWFrZWZpbGUuaW4gKGNwLXRhYi5jKTogQ2hhbmdlICJleHBlY3QiIG1lc3NhZ2UuCisKKwkqIGZpbmFsLmMgKGxlYWZfcmVudW1iZXJfcmVncyk6IFJlbnVtYmVyIGp1c3QgdGhlIFBBVFRFUk4uCisKK1N1biBEZWMgMjkgMTQ6MjA6MTUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFRpZW1hbm4ncyBERUNMX0lHTk9SRURfUCBvcHRpbWl6YXRpb24gKE5vdgorCTIwKSB3YXMgYSBsaXR0bGUgdG9vIGRyYXN0aWM6IElmIGl0IHN1Y2NlZGVkLCBubyB0eXBlIGluZm8gd2FzCisJZW1pdHRlZCBhdCBhbGwsIHdoaWNoIG1hZGUgZm9yIHN5bnRhY3RpY2FsbHkgaW52YWxpZCBzdGFicy4KKwlJbnN0ZWFkLCBqdXN0IHNldCAnZnVsbD0wJywKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogUmUtd3JpdGUgY29kZSBmb3IgVFlQRV9ERUNMIHRvIGJlIGEKKwlsaXR0bGUgY2xlYW5lci4gIEl0ICpzZWVtcyogdG8gd29yayAuLi4KKworU3VuIERlYyAyOSAwNzowNDoyMiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IEFkZCB0cnVuY2F0ZXMgZnJvbSBESW1vZGUgdG8gc21hbGxlciBtb2Rlcy4KKwkobW92ZV9ieV9waWVjZXMsIG1vdmVfYnlfcGllY2VzX25pbnNucyk6IFJld29yayB0byByZW1vdmUgZXhwbGljaXQKKwlyZWZlcmVuY2VzIHRvIGludGVnZXIgbW9kZXMuCisJTmV2ZXIgbmVlZCB0byBhbGlnbiBncmVhdGVyIHRoYW4gQklHR0VTVF9BTElHTk1FTlQuCisKKwkqIG9wdGFicy5jIChpbml0X2V4dGVuZHMsIGluaXRfZml4dGFiLCBpbml0X2Zsb2F0dGFiLCBpbml0X29wdGFicyk6CisJQWRkIFRJbW9kZSBvcGVyYXRpb25zLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUHJlZmVyIGFsdGVybmF0aXZlcyB0aGF0IHJlbG9hZCBTQ1JBVENICisJaW5zdGVhZCBvZiBzb21ldGhpbmcgZWxzZS4KKworCSogcnM2MDAwLm1kIChtb3Z0aSk6IEFkanVzdCBjb25zdHJhaW50cyBhbmQgYWx0ZXJuYXRpdmUgb3JkZXIgc28KKwl3ZSBhY3R1YWxseSBnZXQgdG8gdXNlIHRoZSAgc3RzaSBpbnNuLgorCisJKiByczYwMDAuaCAoUkVHX0FMTE9DX09SREVSKTogUHV0IHI5IGluIGZyb250IG9mIHIxMSBzbyB3ZSBkb24ndCB0cnkgdG8KKwlwdXQgYSBUSW1vZGUgdmFsdWUgaW4gcjExIGFzIG9mdGVuLgorCisJKiBjYWxsZXItc2F2ZS5jIChzZXR1cF9zYXZlX2FyZWFzKTogTmV3IHBhcmFtZXRlciBwY2hhbmdlZDsgc2V0IHdoZW4KKwltZW1vcnkgaXMgYWxsb2NhdGVkLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBQYXNzIHBvaW50ZXIgdG8gc29tZXRoaW5nX2NoYW5nZWQgdG8KKwlzZXR1cF9zYXZlX2FyZWFzLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IERvbid0IHN1cHByZXNzIG1vdmluZyBpbnNucyB0aGF0IGNhbiB0cmFwIGp1c3QKKwliZWNhdXNlIHdlIGhhdmUgcGFzc2VkIGEgY2FsbCBpbnNpZGUgYSBsaWJjYWxsL3JldHZhbCBibG9jay4KKworCSoganVtcC5jIChnZXRfbGFiZWxfYmVmb3JlKTogRG9uJ3Qgc2VwYXJhdGUgYSBDQUxMX0lOU04gZnJvbSBhbnkgVVNFCisJaW5zbnMgaW1tZWRpYXRlbHkgcHJlY2VlZGluZyBpdC4KKwkoZ2V0X2xhYmVsX2FmdGVyKTogTGlrZXdpc2UsIGZvciBmb2xsb3dpbmcgQ0xPQkJFUnMuCisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSAnPCcpOiBXaGVuIHNlZWluZyBpZiB3ZSBoYXZlIHNlZW4gdGhpcworCWNvbXBhcmlzb24gYmVmb3JlLCB1c2UgYSBjb25zdGFudCBlcXVpdmFsZW5jZS4KKwlBZGQgdGVzdCBmb3IgdGhpbmdzIGxpa2UgIihhIHwgMSkgIT0gMCIuCisJKGZvbGRfcnR4LCBjYXNlICcyJyk6IE1vdmUgY29kZSB0byBoYW5kbGUgYXNzb2NpYXRpdmUgb3BlcmF0aW9ucyB0bworCWhlcmU7IGFkZCBzdXBwb3J0IGZvciBNSU5VUywgU01BWCwgU01JTiwgVU1BWCwgYW5kIFVNSU4uCisJKHJlY29yZF9qdW1wX2VxdWl2KTogU2VlIGlmIE9QMSBpcyBlcXVpdmFsZW50IHRvIGEgY29uc3RhbnQuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERvbid0IHBhc3MgYSBTVUJSRUcgYXMgYSB0YXJnZXQgdG8KKwlleHBhbmRfYW5kLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogTmV2ZXIgYXNzb2NpYXRlIGZsb2F0aW5nLXBvaW50LCBldmVuIGlmIG5vdCBJRUVFLgorCUFzc29jaWF0ZSBNQVggYW5kIE1JTiBvcGVyYXRpb25zLgorCisJKiBvdXRwdXQuaCAob3V0cHV0X2FzbV9pbnNuLCBhc21fZnByaW50Zik6IEFkZCAiZXh0ZXJuIiB0byBkZWNscy4KKwkoYWx0ZXJfc3VicmVnKTogQWRkIGRlY2xhcmF0aW9uLgorCSogcnM2MDAwLm1kIChtb3ZzZiwgbW92ZGYpOiBEb24ndCBkZWNsYXJlIGFsdGVyX3N1YnJlZyBoZXJlLgorCSh0cnVuY19jYWxsX3J0bCk6IERvbid0IGRlY2xhcmUgdHJ1bmNfdXNlZDsgdXNlIHJzNjAwMF90cnVuY191c2VkLgorCSogcnM2MDAwLmMgKHJzNjAwMF90cnVuY191c2VkKTogTmV3IG5hbWUgb2YgdHJ1bmNfdXNlZC4KKwkqIHJzNjAwMC5oIChyczYwMDBfdHJ1bmNfdXNlZCk6IEFkZCBkZWNsYXJhdGlvbi4KKworU2F0IERlYyAyOCAxODoxNDoyMSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uYW1lKTogRG9uJ3QgY2FsbCBPQl9GSU5JU0ggdW5sZXNzIEVORAorCWlzIG5vbnplcm8uCisKK1NhdCBEZWMgMjggMTc6NDY6MDUgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBIYW5kbGUgLWFuc2kgaW4gdGhlIEMrKyBlbnRyaWVzCisJZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIEMgZW50cmllcyBkby4KKworCSogcnRsLmMgKGFkZF9kZXBlbmRlbmNlKTogQ2FzdCBlbnVtcyB0byBpbnQgYmVmb3JlIGRvaW5nIGFuCisJb3JkZXJlZCBjb21wYXJpc29uLCBzaW5jZSBzb21lIGNvbXBpbGVycyBjYW4ndCBkbyB0aGlzLgorCisJKiBzcGFyYy5jIChwaWNfYWRkcmVzc19uZWVkc19zY3JhdGNoKTogTmV3IGZ1bmN0aW9uLiAgUmV0dXJucworCXRydWUgaWYgdGhlIHBpYyBhZGRyZXNzIFggbmVlZHMgYSBzY3JhdGNoIHJlZ2lzdGVyIHdoZW4gbG9hZGVkLgorCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogQ2xlYW4gdXAuICBOZXcgYXJndW1lbnQgU0NSQVRDSCwgd2hpY2gKKwlpcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgZm9yIHRob3NlIGxvYWRzIHRoYXQgbmVlZCBpdC4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogTmV3IGFyZ3VtZW50IFNDUkFUQ0hfUkVHLCB3aGljaCBpcyBhIHNjcmF0Y2gKKwlyZWdpc3RlciBmb3IgdGhvc2UgbG9hZHMgdGhhdCBuZWVkIGl0LiAgV2hlbiBsb2FkaW5nIGEgcGljIGxhYmVsLAorCXNldCAlbzcgaW5zdGVhZCBvZiBjbG9iYmVyaW5nIGl0IHNvIGl0cyB2YWx1ZSBjYW4gYmUgdXNlZCBsYXRlci4KKwkoY29tcHV0ZV9mcmFtZV9zaXplKTogTGVhZiBmdW5jdGlvbnMgbmVlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IKKwlyZWdpc3RlciB3aW5kb3cgaW4gZnJhbWUgaWYgc2l6ZSBncmVhdGVyIHRoYW4gMC4KKwkocHJpbnRfb3BlcmFuZCk6IERlbGV0ZSBvYnNvbGV0ZSAlXiB3aGljaCBhZGRlZCAlbzcgdG8gYWRkcmVzc2VzLgorCUFsbCB1c2VzIG9mICVvNyBhcmUgbm93IGV4cGxpY2l0LgorCSogc3BhcmMuaDogRml4IGNhbGxlcnMgb2YgbGVnaXRpbWl6ZV9waWNfYWRkcmVzcy4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogQWRkICdyJyBjYXNlLgorCShTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogTmV3IG1hY3JvLCB0byBmb3JjZSByZWxvYWQgdG8KKwlhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIgZm9yIGNlcnRhaW4gcGljIGFkZHJlc3MgcmVsb2Fkcy4KKwkoZmxhZ19waWMpOiBEZWZpbmUgYXMgZXh0ZXJuIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWZpbmVkIGZvcgorCWluc24tZW1pdC5jLgorCSogc3BhcmMubWQ6IEZpeCBhbGwgY2FsbGVycyBvZiBsZWdpdGltaXplX3BpY19hZGRyZXNzIGFuZAorCWVtaXRfbW92ZV9zZXF1ZW5jZS4KKwkocmVsb2FkX2luc2kpOiBOZXcgcGF0dGVybi4gIFVzZWQgdG8gZm9yY2UgcmVsb2FkIHRvIGFsbG9jYXRlIGEKKwlzY3JhdGNoIHJlZ2lzdGVyIGZvciB0aG9zZSBwaWMgYWRkcmVzcyBsb2FkcyB0aGF0IG5lZWQgb25lLgorCShyZWxvYWRfaW5zaSsyKTogV2hlbiBsb2FkaW5nIHBpYyBsYWJlbCwgc2V0ICVvNyBpbnN0ZWFkIG9mCisJY2xvYmJlcmluZyBpdC4KKwkobW92ZGYsIG1vdnNmKTogUmVqZWN0IG1hdGNoZXMgdGhhdCB3b3VsZCByZXF1aXJlIHJlbG9hZGluZyB2aWEKKwl1c2Ugb2YgYSBjb25kaXRpb24uCisJKHRhYmxlanVtcCk6IE5vdyBhIGRlZmluZV9leHBhbmQsIHNvIGNhbiBnZW5lcmF0ZSBkaWZmZXJlbnQKKwlwYXR0ZXJuIHdoZW4gcGljLgorCShwaWNfdGFibGVqdW1wKTogRXhwbGljaXRseSBtZW50aW9uIGluIHJ0bCB0aGF0ICVvNyBpcyB1c2VkLAorCWluc3RlYWQgb2YgdXNpbmcgJV4uCisKKwkqIG04OGsuaCwgc3BhcmMuaDogRGVsZXRlIHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0ZW50CisJQkxPQ0tfUFJPRklMRVJfVVNFRF9SRUdfUCBtYWNyby4KKworU2F0IERlYyAyOCAxNDozMTozNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBTZXQgaWdub3JlX2VzY2FwZV9mbGFnIGZvciByZWFkaW5nIGZpbGVuYW1lLgorCSh5eWxleCk6IEhhbmRsZSBpZ25vcmVfZXNjYXBlX2ZsYWcgaW4gc3RyaW5nIGNvbnN0YW50LgorCisJKiBnbnVsaWIyLmMgKF9fZG9fZ2xvYmFsX2R0b3JzKTogQ291bnQgZWxlbWVudHMgcHJvcGVybHkuCisKKwkqIG02OGsubWQgKHRzdGhpKTogRG9uJ3QgYWxsb3cgYWRkcmVzcyByZWdpc3Rlci4KKworU2F0IERlYyAyOCAxMTo0OTowNiAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGZpbmFsLmMgKGZpbmFsKTogSW5pdGlhbGl6ZSBlbGVtZW50cyBvZiBsaW5lX25vdGVfZXhpc3RzLgorCisJKiBwcm90b2l6ZS5jOiBEb24ndCBpbmNsdWRlIDxzeXMvd2FpdC5oPiBvbiBVU0cgdW5sZXNzIFNWUjQuCisKK1NhdCBEZWMgMjggMTE6MDk6MzYgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGZpc2hwb25kKQorCisJKiBNYWtlZmlsZS5pbiAoaW5jbHVkZXMpOiBQcmUtcmVtb3ZlIHRoZSB0bXAgZGlyOyBmaXggSU5TVEFMTEVEX0ggcmVmLgorCitTYXQgRGVjIDI4IDA2OjMxOjE2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNwYXJjLm1kIChtb3ZzdHJzaSk6IEZpeCB0eXBvIHRlc3RpbmcgZm9yIG1vcmUgdGhhbiAzMiBzdWJ1bml0cy4KKworCSogZ2VucmVjb2cuYzogTWFqb3IgcmV3b3JrLgorCVdlIG5vdyBjaGVjayB0byBzZWUgaWYgcGFpcnMgb2YgY29tcGFyaXNvbiBub2RlcyBjYW4gaGF2ZSBhbnl0aGluZworCXRoYXQgdGhleSBib3RoIG1hdGNoLiAgSWYgbm90LCB0aGV5IGNhbiBiZSByZW9yZGVyZWQuICBBbiBlZmZpY2llbnQKKwlvcmRlcmluZyBpcyBlc3RhYmxpc2hlZCB0aGF0IGdyb3VwcyBhbGwgbm9kZXMgd2l0aCBpZGVudGljYWwgcnRsCisJY29kZXMgaW5zaWRlIGdyb3VwcyB3aXRoIGlkZW50aWNhbCBtb2Rlcy4gIFRoaXMgYWxsb3dzIHVzIHRvIGdlbmVyYXRlCisJYSBjb21wYXJpc29uIHRyZWUgdGhhdCBpcyBhIGxpc3Qgb2YgbmVzdGVkIHN3aXRjaCBzdGF0ZW1lbnRzLgorCUFsc28sIGdlbnJlY29nLmMgaXMgbm93IGluZGVudGVkIHByb3Blcmx5IHNvIHRoYXQgZGVidWdnaW5nIGlzIGVhc2VkLgorCShhZGRfdG9fc2VxdWVuY2UpOiBFbmZvcmNlIG1vZGUgb24gdGhlIGZpcnN0IGFyZyBvZiBDT01QQVJFLCBjb21wYXJpc29uCisJb3BlcmF0aW9uLCBTSUdOX0VYVEVORCwgYW5kIFpFUk9fRVhURU5ELgorCisJKiBhMjlrLmgsIHJvbXAuaCwgcnM2MDAwLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBkZWZpbml0aW9uLgorCitGcmkgRGVjIDI3IDE3OjMxOjQ4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGEyOWsuaCwgZGVjcm9zZS5oLCBlbmNyb3NlLmgsIG04OGtkZ3V4LmggKFdDSEFSX1RZUEVfU0laRSk6CisJQWRkIGRlZmluaXRpb24uCisJKiByczYwMDAuaCwgc3BhcmMuaCwgc3VuMm80LmgsIHN1bjMuaCwgc3ZyMy5oLCBzdnI0Lmg6IExpa2V3aXNlLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHQpOiBGb3IgbmVnYXRpdmUgdmFsdWVzLCB0cnkgbXVsdGlwbGljYXRpb24gYnkKKwl0aGUgb3JpZ2luYWwgdmFsdWUgYXMgd2VsbCBhcyBieSBuZWdhdGVkIHZhbHVlLgorCitGcmkgRGVjIDI3IDIwOjU0OjU5IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBmaXNocG9uZCkKKworCSogbTY4a3Y0Lmg6ICBJbmNsdWRlIG02OGtzZ3MuaCByYXRoZXIgdGhhbiBtNjhrLmguCisKKwkqIG02OGt2NC5oOiAgRGVmaW5lIFRBUkdFVF9ERUZBVUxUIHRvIGJlIDY4MDIwICsgNjg4ODEuCisJKENQUF9TUEVDKTogRGVmaW5lIGJhc2VkIG9uIFRBUkdFVF9ERUZBVUxUCisKKwkqIG02OGt2NC5oIChQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4pOiBVbmRlZiB0aGlzLgorCShDVE9SU19TRUNUSU9OX0FTTV9PUCwgRFRPUlNfU0VDVElPTl9BU01fT1ApOiBEZWZzIGRlbGV0ZWQuCisJKEFTQ0lJX0RBVEFfQVNNX09QLCBBU01fT1VUUFVUX0FTQ0lJKTogRGVmcyBkZWxldGVkLgorCisJKiBtNjhrdjQuaCAoQVNNX09VVFBVVF9TS0lQLCBGVU5DVElPTl9WQUxVRV9SRUdOT19QKToKKwkoRlVOQ1RJT05fUFJPRklMRVIsIFNUUlVDVF9WQUxVRV9SRUdOVU0sIEJTU19BU01fT1ApOgorCShGVU5DVElPTl9WQUxVRSwgRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUsIExJQkNBTExfVkFMVUUpOgorCShTVEFDS19CT1VOREFSWSwgRU1QVFlfRklFTERfQk9VTkRBUlksIEJJR0dFU1RfQUxJR05NRU5UKToKKwlSZWRlZmluZWQgdG8gbWF0Y2ggbTY4ay9TVlI0IGNvbnZlbnRpb25zLgorCisJKiBtNjhrc2dzLmggKEFTTV9PVVRQVVRfU0tJUCk6IFJlZGVmaW5lZCB0byB1c2UgYC5zcGFjZScuCisJKEFTTV9OT19TS0lQX0lOX1RFWFQpOiBEZWZpbmVkLgorCisJKiBhbWl4LmgsIHhtLWFtaXguaCwgeC1hbWl4OiBOZXcgZmlsZXMuCisKK0ZyaSBEZWMgMjcgMjA6NDM6MTEgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBEZWNsYXJlIHRoaXMgZnVuY3Rpb24uCisJKiBjcC1kZWNsMi5jLCBjcC1tZXRob2QuYzogRGVsZXRlIHJhbmRvbSBgZXh0ZXJuJyBkZWNsYXJhdGlvbnMuCisKKwkqIGNwLWxleC5jIChnZXRfZGlyZWN0aXZlX2xpbmUpOiBEZWNsYXJlIGl0IGV4dGVybi4KKwkobGluZW5vLHl5Y2hhcix5eWx2YWwsbGFzdGlkZGVjbCxmaW5wdXQpOiBEaXR0by4KKwkocmlkcG9pbnRlcnMpOiBEb24ndCBuZWVkIHRvIGRlY2xhcmUgaXQgaGVyZS4KKwkoY2hlY2tfbmV3bGluZSk6IEhhbmRsZSBuZXcgI3ByYWdtYXMuCisKKwkqIGNwLWNsYXNzLmMgKGFkZF9tZXRob2QpOiBBZGQgYSBjYXN0IGluIGNhbGwgdG8gYG9ic3RhY2tfYmFzZScuCisKK0ZyaSBEZWMgMjcgMjA6MjI6MDUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogTm93IHJldHVybnMgYSB2YWx1ZS4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEdpdmUgYmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB1c2VyCisJZGVjbGFyYXRpb24gY29uZmxpY3RzIHdpdGggYnVpbHQtaW4gb25lLiAgQWxzbywgd2hlbiB3ZSBkZWNpZGUgdG8KKwlrZWVwIGEgYnVpbHRpbiBmdW5jdGlvbiBidWlsdGluLCBjb3B5IHRoZSBERUNMX1JUTCBmcm9tIE9MRERFQ0wgdG8KKwlORVdERUNMLgorCitGcmkgRGVjIDI3IDE3OjE4OjE1IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmggKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBEZWZpbmUgY29ycmVjdGx5IGZvciBNSVBTLgorCShUUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgdG8gYmUgOSB3b3Jkcy4KKwkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRGVmaW5lIGNvcnJlY3RseSBmb3IgTUlQUy4KKwkoVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKTogRGVmaW5lIHRvIGRvIGEgbXByb3RlY3Qgb2YgdGhlCisJdHJhbXBvbGluZSwgc28gdGhhdCB3ZSBjYW4ganVtcCB0byBpdC4gIEkgc3VzcGVjdCB0aGUgbXByb3RlY3QgbWF5CisJZmFpbCBvbiBzb21lIE1JUFMgYmFzZWQgc3lzdGVtcywgYmVjYXVzZSB0aGUgdHJhbXBvbGluZSBpcyBvbiB0aGUKKwlzdGFjaywgYW5kIG5vdCBpbiB0aGUgZGF0YSBzZWN0aW9uLgorCisJKiBtaXBzLmMgKG1pcHNfb3V0cHV0X2ZpbGVuYW1lKTogRG9uJ3Qgd2FybiBhYm91dCBFQ09GRiBub3QKKwloYW5kbGluZyAjbGluZSdzIHdpdGhpbiBmdW5jdGlvbnMgaWYgd2UgYXJlIHVzaW5nIHRoZSBPU0Yvcm9zZQorCW9iamVjdCBmb3JtYXQuCisKK0ZyaSBEZWMgMjcgMTU6MzU6MzggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9hcnJheV9yZWYpOiBTcGVjaWFsIHdhcm5pbmcgYWJvdXQgYHJlZ2lzdGVyJyBhcnJheS4KKworCSogZ251bGliMi5jIChMX3RyYW1wb2xpbmUpOiBEb24ndCBjcmVhdGUgYSBmdW5jdGlvbiBoZXJlLgorCVRoZSBkZWZpbml0aW9uIG9mIFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSBjYW4gZG8gdGhhdCBpZiBuZWMuCisJKiBtNjhrLmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IE1ha2UgdGhlIGZ1bmN0aW9uIGhlcmUuCisKKwkqIGZ4ODAuKjogUmVuYW1lZCBmcm9tIGFsbGlhbnQuKi4KKwkqIGNvbmZpZ3VyZTogQWx0ZXJuYXRpdmUgcmVuYW1lZCB0byBmeDgwLWFsbGlhbnQtKi4KKwkqIGNvbmZpZy5zdWI6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKworCSogY2NjcC5jICh0cmFkaXRpb25hbCk6IE5vIGxvbmdlciBzdGF0aWMuCisJKiBjZXhwLnkgKHl5bGV4KTogSGFuZGxlIGZ1bGwgdmFyaWV0eSBvZiBjaGFyYWN0ZXIgY29uc3RhbnRzLgorCUluY2x1ZGUgc3RkbGliLmggYW5kIGxvY2FsZS5oIGlmIG5lZWRlZC4KKworCSogYy1kZWNsLmMgKHNoYWRvd190YWcpOiBDaGFuZ2Ugd2FybmluZ3MgdG8gZXJyb3Igb3IgcGVkd2Fybi4KKworCSogZ251bGliMi5jIChfX2RvX2dsb2JhbF9kdG9ycyk6IElmIGxlbmd0aCBub3QgZ2l2ZW4sIGNvdW50IGl0LgorCSogZ2JsLWN0b3JzLmggKERPX0dMT0JBTF9DVE9SU19CT0RZKTogSWdub3JlIGxlbmd0aDsgc2NhbiB0aWxsIG51bGwuCisJKF9fQ1RPUl9FTkRfXywgX19EVE9SX0VORF9fKTogRGVjbGFyYXRpb25zIGRlbGV0ZWQuCisKKwkqIGNwLWRlY2wyLmMgKGZpbmlzaF9maWxlKTogQWx3YXlzIGNoYW5nZSAkIHRvIF8KKwlyZWdhcmRsZXNzIG9mIE5PX0RPTExBUl9JTl9MQUJFTC4KKworRnJpIERlYyAyNyAxNTowNDo0MCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogc3ZyNC5oIChBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OKTogRml4IHR5cG8uCisKKwkqIG04OGsuYzogTW92ZSBleHRlcm4gZGVjbHMuCisJKG91dHB1dF9hc2NpaSk6IFVzZSBBU0NJSV9EQVRBX0FTTV9PUC4KKwkqIG04OGsuaCAoSEFWRV9BVEVYSVQpOiBEZWxldGUuCisJKEFTTV9PVVRQVVRfQUxJR05FRF9DT01NT04sIEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCwKKwkgQVNDSUlfREFUQV9BU01fT1ApOiBPdmVycmlkZSBzdnI0LmguCisJKEVYVFJBX1NFQ1RJT05TKTogTm8gY3RvcnMvZHRvcnMgZm9yIG04OGstbHVuYS4KKwkqIG04OGtkZ3V4LmggKFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVgpOiBObyBuZWVkIHRvIG92ZXJyaWRlIHN2cjQuaC4KKworRnJpIERlYyAyNyAxMTozNDo1OSAxOTkxICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKKworCSogY3AtcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogVXNlIGEgbG9jYWwgb2JzdGFjaworCXJhdGhlciB0aGFuIGZpeGVkLXNpemUgYnVmZmVycy4KKworCSogY3AtY2xhc3MuYyAoYWRkX21ldGhvZCk6IENhc2Ugb2JzdGFja19iYXNlIHZhbHVlIHRvIGRlc2lyZWQgdHlwZQorCXdoZW4gcmVhbGxvY2F0aW5nIHZlY3RvciBub2RlLgorCitGcmkgRGVjIDI3IDA5OjE2OjUwIDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogc29ydC1wcm90b3M6ICBOZXcgZmlsZS4KKworCSogaTM4Ni5jOiBSZW1vdmUgZGVjbHMgb2YgZnJhbWVfcG9pbnRlcl9uZWVkZWQ7IGluY2x1ZGUgZmxhZ3MuaC4KKwkqIGkzODYuYyAob3V0cHV0XzM4N19iaW5hcnlfb3AsIG91dHB1dF9mbG9hdF9jb21wYXJlKToKKwlNb3ZlZCBkZWNsYXJhdGlvbnMgb2Ygc3RyY2F0IHRvIHRvcCBsZXZlbC4KKworCSogaTg2MC5tZCAoY21wbmVzZiwgY21wbmVkZik6ICBOZXcgcGF0dGVybnMuCisJKiBpODYwLm1kIChjbXBsZXNmLCBjbXBnZXNmKTogIENvcnJlY3RlZCB0byBhbGxvdyBmb3IgSUVFRSBjb25mb3JtYW5jZS4KKworVGh1IERlYyAyNiAxMToyMDowNyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmM6IERlY2xhcmUgTl8qIHZhcmlhYmxlcyBoZXJlLgorCSogY3AtY2xhc3MuaDogRGVjbGFyZSBOXyogdmFyaWFibGVzIGV4dGVybiBoZXJlLgorCisJKiBjcC1nYy5jIChidWlsZF9zdGF0aWNfZ2NfZW50cnkpOiBDYWxsIGBhc3NlbWJsZV9nY19lbnRyeScgaW5zdGVhZAorCW9mIGltcGxlbWVudGluZyBpdCBkaXJlY3RseS4KKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9nY19lbnRyeSk6IE5ldyBmdW5jdGlvbi4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEb24ndCBjcmFzaCBpZiBzb21lYm9keSBkZWNsYXJlZCBhIHZvaWQKKwlmdW5jdGlvbiBgY29uc3QnLgorCisJKiBjcC1jdnQuYyAoY29udmVydCk6IEhhbmRsZSBjYXNlIHdoZW4gdHdvIGVxdWFsIGFycmF5IHR5cGVzIGFyZQorCWRpc3RpbmN0IChpbiBtZW1vcnkpLgorCSogdHJlZS5jIChidWlsZF9pbmRleF8yX3R5cGUpOiBEb24ndCBzZXQgVFJFRV9UWVBFIG9mIGxvd2VyIGJvdW5kLgorCShpbmRleF90eXBlX2VxdWFsKTogTmV3IGZ1bmN0aW9uLgorCisJKiBjcC1zcGV3LmMgKHl5bGV4KTogRXh0ZW5kIHNwZWNpYWwtY2FzZSBwdHItdG8tZnVuYyAoKCopKCkpIHBhcnNpbmcKKwl0byBoYW5kbGUgKCopW10gYW5kICgmKVtdIGRlY2xhcmF0aW9ucyBhcyB3ZWxsLgorCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfZmlsZSk6IFVuY29uZGl0aW9uYWxseSBjYWxsCisJYXNzZW1ibGVfe2NvbnN0cnVjdG9yLGRlc3RydWN0b3J9LiAgQWxzbywgZGVsZXRlIGNvZGUgZm9yIHdyaXRpbmcKKwlfaW5pdCBhbmQgX2Zpbmkgc2VjdGlvbnMgdGhhdCB3YXMgI2lmIDAnZC4gIFRoZXNlIGFjdGlvbnMgYmVsb25nIGluCisJdmFyYXNtIGlmIGFueXdoZXJlLgorCisJKiBjcC1jbGFzcy5jIChhZGRfbWV0aG9kKTogRml4IGhhbmRsaW5nIG9mIG9ic3RhY2tzIHRvIGNvcnJlY3RseQorCWV4dGVuZCBUUkVFX1ZFQ3MuCisKK1RodSBEZWMgMjYgMTU6MjQ6NDUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBBZGQgbmV3IG9wdGlvbiAtaW5jbHVkZS4gIFJlbmFtZSAtaSB0byAtaW1hY3Jvcy4KKwkqIGdjYy5jIChTV0lUQ0hfVEFLRVNfQVJHKTogUmVtb3ZlIC1pLgorCShXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBBZGQgLWluY2x1ZGUsIC1pbWFjcm9zLgorCSogaHA4MDAuaCAoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogQWRkIGFsbCB0aGUgc3RhbmRhcmQgYWx0ZXJuYXRpdmVzLgorCSogbWlwcy5oIChTV0lUQ0hfVEFLRVNfQVJHKTogUmVtb3ZlIC1ZIGFuZCAtaS4KKwkqIG5leHQuaCwgc3BhcmMuaCAoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogQWRkIC1pbmNsdWRlLCAtaW1hY3Jvcy4KKwkqIHN1bjIuaCwgc3VuMy5oIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBDb3B5IGZyb20gc3BhcmMuaC4KKwkqIHN2cjQuaCAoU1dJVENIX1RBS0VTX0FSRyk6IFJlbW92ZSAtaSwgLWYuCisJKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IEFkZCAtaW5jbHVkZSwgLWltYWNyb3MuCisKKwkqIHRvcGxldi5jIChmbGFnX2dudV9saW5rZXIpOiBOZXcgdmFyaWFibGUuICAtZmdudS1saW5rZXIuCisJKiBmbGFncy5oIChmbGFnX2dudV9saW5rZXIpOiBEZWNsYXJlIGl0LgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX2NvbnN0cnVjdG9yLCBhc3NlbWJsZV9kZXN0cnVjdG9yKToKKwlIYW5kbGUgZmxhZ19nbnVfbGlua2VyLgorCisJKiBzcGFyYy5tZCAoc3RydWN0dXJlIHZhbHVlcyk6IFNlcGFyYXRlIHVuaW1wIHBhdHRlcm4gZGVsZXRlZC4KKwlOZXcgcGF0dGVybiBmb3IgY29tYmluZWQgY2FsbCBhbmQgdW5pbXAuICBgY2FsbCcgcGF0dGVybiBjaGFuZ2VkLgorCSh0eXBlKTogRGVsZXRlZCB0eXBlIG1hcmtlciwgYWRkZWQgY2FsbF9ub19kZWxheV9zbG90LgorCitUaHUgRGVjIDI2IDA1OjA0OjI4IDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKG1vdmVfZm9yX3N0YWNrX3JlZyk6IElmIGEgU0VUX0RFU1QgaXMgUkVHX1VOVVNFRCwKKwlqdXN0IHBvcCB0aGUgU0VUX1NSQy4KKworV2VkIERlYyAyNSAxNzoyMzoyNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEZpeCB0eXBlIG9mIGV4aXQsIF9leGl0LgorCisJKiBqdW1wLmMgKGNyb3NzX2p1bXBfZGVhdGhfbWF0dGVycyk6IE1vdmUgZGVmIHRvIGZyb250LCBtYWtlIHN0YXRpYy4KKworVHVlIERlYyAyNCAyMDo0MTozMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGhhcmQtcmVnLXNldC5oIChyZWdfbmFtZXMpOiBEZWNsYXJlIGhlcmUuCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBOb3QgaGVyZS4KKworCSogZ2NjLmMgKGhhbmRsZV9icmFjZXMsIGRvX3NwZWNfMSwgZ2l2ZV9zd2l0Y2gpOiBDbGVhciB1cCAlKi4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IERlbGV0ZSBkZWNsIG9mIGxhbmdfZXhwYW5kX2V4cHIuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERlbGV0ZSBsaW5lIG51bWJlciBmb2xsb3dlZCBieSBhbm90aGVyCisJbGluZSBudW1iZXIsIGlmIG51bWJlcnMgYXJlIGVmZmVjdGl2ZWx5IGNvbnNlY3V0aXZlLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBTZXQgY3Jvc3NfanVtcF9kZWF0aF9tYXR0ZXJzIGZyb20gY3Jvc3NfanVtcC4KKwkqIHJlZy1zdGFjay5jIChyZWdfdG9fc3RhY2spOiBQYXNzIDIgZm9yIGNyb3NzX2p1bXAgdG8ganVtcF9vcHRpbWl6ZS4KKwlEb24ndCBzZXQgY3Jvc3NfanVtcF9kZWF0aF9tYXR0ZXJzIGhlcmUuCisJKHJlY29yZF9yZWdfbGlmZSk6IERlbGV0ZSBkZWNsIG9mIGNhbGxfdXNlZF9yZWdfc2V0LgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOgorCURlY2xhcmUgYWJvcnQsIGV4aXQsIGFuZCBfZXhpdCBhcyB2b2xhdGlsZS4KKworCSogYy1kZWNsLmMgKGltcGxpY2l0bHlfZGVjbGFyZSk6IFNldCBJREVOVElGSUVSX0lNUExJQ0lUX0RFQ0wgZWFybGllci4KKwkocHVzaGRlY2wpOiBUZXN0IHRoYXQgYW5kIGF2b2lkIG5lc3RlZCBleHRlcm4gd2FybmluZy4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgaGFuZGxlIEVYUEFORF9CVUlMVElOX1ZBUkFSR1MuCisKK1R1ZSBEZWMgMjQgMTU6NDI6MzQgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1pbml0LmMgKGFkZF9mcmllbmRzKTogQWRkIG1pc3NpbmcgSURFTlRJRklFUl9QT0lOVEVSIG1hY3JvCisJYXBwbGljYXRpb24gdG8gc3RybmNtcCBhcmd1bWVudC4KKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkXyopOiBOb3cgdXNlcyBTQ1JBVENIX09CU1RBQ0sgaW5zdGVhZAorCW9mIHJlbHlpbmcgb24gZml4ZWQgYnVmZmVycyBvZiBmaW5pdGUgbGVuZ3RoLgorCShmbmRlY2xfYXNfc3RyaW5nKTogRGl0dG8uCisJQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkqIGNwLWV4Y2VwdC5jIChjcGx1c19leGNlcHRpb25fbmFtZSk6IERlZmluaXRpb24gbW92ZWQgdG8KKwljcC1tZXRob2QuYy4KKworVHVlIERlYyAyNCAxMDozODo0OSAxOTkxICBNaWNoYWVsIENvbGxpc29uICAoY29sbGlzb24gYXQgb3NmLm9yZykKKworCSogbnMzMmsuYyAoaGFyZF9yZWdub19tb2RlX29rKTogRGVmaW5lIHRoaXMgYXMgYSBmdW5jdGlvbiBub3cuCisJQWxzbyBjaGFuZ2UgdGhlIHdheSBpdCB3b3JrIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cgbW92ZXMgYmV0d2VlbgorCXRoZSBnZW5lcmFsIHJlZ2lzdGVycyBhbmQgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4KKworCSogbnMzMmsuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogVHVybiBpdCBpbnRvIGEgZnVuY3Rpb24gY2FsbC4KKworCSogbnMzMmsubWQgKGNhbGxfdmFsdWUpOiBmaXggdG8gY29ycmVjdCBhIGJ1ZyB3aGVyZSB0aGUgY29tcGlsZXIgdGhpbmtzCisJdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGNhbGwgaXMgaW4gZjAgaW5zdGVhZCBvZiByMC4gRml4CisJY291cnRlc3kgb2YgdmluY2UgcnVzc28uCisJKG1vdnFpLCBtb3ZoaSk6IEZpeCB1cCB0aGVzZSBwYXR0ZXJucyBiZWNhdXNlIHRoZXkgY291bGQgcmV0dXJuCisJdW5kZWZpbmVkIGluc3RydWN0aW9uIHRlbXBsYXRlcy4gRml4IGNvdXJ0ZXN5IG9mIHZpbmNlIHJ1c3NvLgorCitUdWUgRGVjIDI0IDEwOjE0OjIwIDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogbWlwcy10ZmlsZS5jIChtYWluKTogTW92ZSBuZXN0ZWQgZXh0ZXJuIGRlY2wgb2YgdmVyc2lvbl9zdHJpbmcgdG8KKwlmaWxlLXNjb3BlLgorCShjYXRjaF9zaWduYWwpOiBNb3ZlIG5lc3RlZCBleHRlcm4gZGVjbCBvZiBzeXNfc2lnbGlzdCB0bworCWZpbGUtc2NvcGUuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IEhhbmRsZSBBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OLgorCSogc3ZyNC5oIChBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OLCBBU01fT1VUUFVUX0FMSUdORURfTE9DQUwpOiBOZXcuCisJKEFTTV9PVVRQVVRfQ09NTU9OLCBBU01fT1VUUFVUX0xPQ0FMKTogRGVsZXRlZC4KKworCSogZ2NjLmMgKFNXSVRDSF9UQUtFU19BUkcsIGRlZmF1bHRfY29tcGlsZXJzKTogIEVsaW1pbmF0ZWQgLVkqIG9wdGlvbi4KKwkoZXhlY3V0ZSk6ICBNb3ZlZCBkZWNscyBvZiBleGVjdiBhbmQgZXhlY3ZwIHRvIHRvcCBsZXZlbC4KKwkoZG9fc3BlYywgZG9fc3BlYzEsIGhhbmRsZV9icmFjZXMsIGdpdmVfc3dpdGNoKTogU3VwcG9ydCBuZXcgJSogc3BlYy4KKworCSogYy1sYW5nLmMgKHJlY29nbml6ZV9vYmpjX2tleXdvcmQpOiAgQWRkZWQgZXhwbGljaXQgcmV0dXJuLgorCisJKiBzdnI0LmggKFNXSVRDSF9UQUtFU19BUkcsIFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6ICBOZXcgZGVmaW5pdGlvbnMuCisJKEFTTV9TUEVDLCBMSU5LX1NQRUMpOiBTdXBwb3J0IG1vcmUgc3RhbmRhcmQgc3ZyNCBvcHRpb25zLgorCShMSUJfU1BFQyk6ICBGaXhlZCB0byBsaW5rIGNydGVuZC5vICphZnRlciogbGliYy5hLgorCisJKiBzdnI0LmggKENPTlNUX1NFQ1RJT05fRlVOQ1RJT04pOiAgTW92ZWQgZGVjbCBvZiBgdGV4dF9zZWN0aW9uJyB0bworCXRvcCBsZXZlbC4KKworCSogY2V4cC55IChtYWluKTogQWRkIGV4cGxpY2l0IHJldHVybiB0eXBlIGFuZCBleHBsaWNpdCB2YWx1ZS4KKwlNb3ZlIGRlY2wgb2YgeXlkZWJ1ZyB0byB0b3AgbGV2ZWwuCisKKwkqIGdudWxpYjIuYyAoX19iYl9pbml0X2Z1bmMpOiAgTW92ZWQgZGVjbCBvZiBfX190Y292X2luaXQgdG8gdG9wIGxldmVsLgorCisJKiB0b3BsZXYuYyAobWFpbik6ICBEZWxldGVkIG9ic29sZXRlIGNoZWNrcyBmb3IgLW9wdCBhbmQgLW5vcmVnLgorCU1vdmVkIGRlY2xzIG9mIGVudmlyb24sIHZlcnNpb25fc3RyaW5nLCBsYW5ndWFnZSBzdHJpbmcgdG8gZmlsZS1zY29wZS4KKwlDb21waWxlLXRpbWUgZXJyb3IgaWYgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIGlzIG1pc3NpbmcuCisKKwkqIHRyZWUuYyAoZHVtcF90cmVlX3N0YXRpc3RpY3MpOiBEZWxldGVkIGRlY2wgb2YgY2xhc3Nfb2JzdGFjay4KKwkob2JqZWN0X3Blcm1hbmVudF9wKTogIEFkZGVkIGV4cGxpY2l0IHJldHVybiB0eXBlLgorCitUdWUgRGVjIDI0IDA5OjI5OjI0IDE5OTEgIENoYXJsZXMgSGFubnVtICAobXljcm9mdCBhdCBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuaCAobGFuZ19leHBhbmRfZXhwcik6IEZpeCB0eXBvLgorCitUdWUgRGVjIDI0IDA2OjUyOjQ1IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBnbnVsaWIyLmMgKF9fbWFpbik6IE1ha2Ugc3VyZSB0aGUgZXhpdCBtb2R1bGUgaXMgcHVsbGVkIGluIGlmIHdlCisJaGF2ZSBhdGV4aXQsIHNpbmNlIHRoYXQgbW9kdWxlIGRlZmluZXMgY29uc3RydWN0b3IvZGVzdHJ1Y3RvcgorCXZhcmlhYmxlcyBhcyBic3Mgc3ltYm9scyByYXRoZXIgdGhhbiBhcyByZWZlcmVuY2VzLgorCisJKiBkZWNyb3NlLmggKEhBVkVfQVRFWElUKTogRGVmaW5lLgorCSogZW5jcm9zZS5oIChIQVZFX0FURVhJVCk6IERlZmluZS4KKwkqIGkzODZyb3NlLmggKEhBVkVfQVRFWElUKTogRGVmaW5lLgorCSogZGVjc3RhdG4uaCAoSEFWRV9BVEVYSVQpOiBEZWZpbmUuCisKKwkqIGdjYy50ZXhpbmZvIChIQVZFX0FURVhJVCk6IEV4cGFuZCBkb2N1bWVudGF0aW9uLgorCShFWElUX0JPRFkpOiBEb2N1bWVudC4KKworCSogcHJvdG9pemUuYyAoUE9TSVgpOiBNYWtlIHByb3RvaXplIGFjY2VwdCBUQVJHRVRfUE9TSVggYXMgYSBzeW5vbnltCisJZm9yIFBPU0lYIHRvIG1ha2UgdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gYWdyZWUuICBBbHNvLCBpZiB0aGUKKwl1c2VyIGRlZmluZWQgX1BPU0lYX1NPVVJDRSBleHBsaWNpdGx5LCB0dXJuIG9uIFBPU0lYIHN1cHBvcnQgaW4KKwlwcm90b2l6ZS4KKworVHVlIERlYyAyNCAwMDoxNDozOCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNhbGxzLmMgKGVtaXRfY2FsbF8xKTogQWRkaXRpb25hbCBhcmcgU1RSVUNUX1ZBTFVFX1NJWkUuCisJVXNlIGFzIGFyZyBpbiBjYWxsIGFuZCBjYWxsX3ZhbHVlIGluc25zLgorCShleHBhbmRfY2FsbCk6IFJlY29yZCB0aGUgc2l6ZSwgdG8gcGFzcyBpdC4KKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBQYXNzIDAgZm9yIFNUUlVDVF9WQUxVRV9TSVpFLgorCSogc3BhcmMubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBNYWtlIHVzZSBvZiBuZXcgYXJnLgorCUdlbmVyYXRlIGFuIHVuaW1wIGluc3RydWN0aW9uIHRvIHVzZSBzcGFyYyBjYWxsaW5nIGNvbnZlbnRpb24uCisJQWRkIG5hbWVsZXNzIHBhdHRlcm4gdG8gcmVjb2duaXplIGl0LgorCSogc3BhcmMuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogU2tpcCB0aGUgY2FsbGVyJ3MgdW5pbXAgaW5zbi4KKworCSogTWFrZWZpbGUuaW4gKElOU1RBTExFRF9IKTogTmV3IHZhcmlhYmxlLgorCShpbmNsdWRlcyk6IFByZXNlcnZlIGp1c3QgdGhvc2Ugc3BlY2lmaWMgZmlsZXMuCisKKwkqIGV4cHIuaCAobGFuZ19leHBhbmRfZXhwcik6IERlY2xhcmUgaXQuCisJKiBleHByLmM6IERvbid0IGRlY2xhcmUgaXQuCisJKiBjcC1leHByLmMgKGluaXRfY3BsdXNfZXhwYW5kKTogU2V0IHVwIGxhbmdfZXhwYW5kX2V4cHIgaGVyZS4KKwkqIGNwLWxleC5jIChpbml0X2xleCk6IENhbGwgaW5pdF9jcGx1c19leHBhbmQuCisKK01vbiBEZWMgMjMgMTU6MTc6NTkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGNvbmZpZ3VyZTogRGVsZXRlIG04OGstdjg4cjMyICh0aGlzIGlzIHN1cHBvcnRlZCBieSBtODhrLXN2cjMpCisJYW5kIGFkZCBtODhrLgorCSogY29uZmlnLnN1YjogRGVsZXRlIHY4OHIgYXMgYSBzeXN0ZW0gdHlwZS4KKworTW9uIERlYyAyMyAxOTo1MDo0OCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgZmlzaHBvbmQpCisKKwkqIDNiMS5oLCBjcmRzLmgsIGhwMzIwLmgsIG02OGsubWQsIG02OGtzZ3MuaCwgbW90MzMwMC5oLCBuZXdzLmgsCisJdG93ZXItYXMuaDogIFJlcGxhY2UgcG9ydCBvcmllbnRlZCBtYWNyb3MgU0dTXzNCMSwgSFBVWF9BU00sIGFuZAorCVNPTllfQVNNLCB3aXRoIGNvbmZpZ3VyYXRpb24gb3JpZW50ZWQgbWFjcm9zIFNHU19TV0lUQ0hfVEFCTEVTLAorCVNHU19TV0FQX1csIFNHU19DTVBfT1JERVIsIGFuZCBTR1NfTk9fTEkuCisKKwkqIG02OGtzZ3MuaDogTmV3IGZpbGUuCisKKwkqIG02OGsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogQ2hhbmdlIHN3aXRjaCBsYWJlbHMgZm9yIE1PVE9ST0xBLgorCURvbid0IHVzZSBhIGAlJy4gIEFkZCBtaXNzaW5nIGBMJyB0byBzb21lIGxhYmVscy4KKwlGb3IgU0dTIGFzc2VtYmxlciwgdXNlIG9uZSBzeW1ib2wgZm9yIHRoZSBvZmZzZXQuCisKK01vbiBEZWMgMjMgMTc6MDM6MTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWNvZy5oIChpbnNuX25hbWUpOiBOZXcgZGVjbGFyYXRpb24uCisJKiBmaW5hbC5jIChvdXRwdXRfYXNtX2luc24pOiAgRG9uJ3QgZGVjbGFyZSBpbnNuX25hbWUgaGVyZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9mdW5jdGlvbiwgZGJ4b3V0X2JlZ2luX2Z1bmN0aW9uKToKKwlQYXNzIG1pc3NpbmcgYXJnIHRvIGRieG91dF9yZWFsbHlfYmVnaW5fZnVuY3Rpb24uCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFNldCBuZXcgdmFyIGNhbl9yZWFjaF9lbmQuCisJKiBjLWRlY2wuYywgY3AtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOgorCU1lcmdlIHRoYXQgaW50byBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfbnVsbC4KKworCSogY29uZmlnLnN1YiAoZngyODAwKTogTmV3IG1hY2hpbmUgYWxpYXMuCisKKwkqIHZhLW04OGsuaCAodmFfc3RhcnQpOiBUZXN0IF9fR05VQ19fLCBub3QgX19DTEFTU0lGWV9UWVBFX18uCisKKwkqIG04OGt2NC5oOiBOZXcgdmVyc2lvbiBmcm9tIFdvb2QuCisJKENQUF9QUkVERUZJTkVTKTogUHV0IC1BIG9wdGlvbnMgaGVyZS4gIFJlbW92ZSBfX0NMQVNTSUZZX1RZUEVfXy4KKworCSogY2NjcC5jIChpbml0aWFsaXplX2J1aWx0aW5zKTogRGVmaW5lIF9fR05VQ19fIGFzIDIuCisKKwkqIHJ0bC5oIChyZWFkX3J0eCk6IE5ldyBkZWNsYXJhdGlvbi4KKworCSogYy1sZXguYzogRG9uJ3QgaW5jbHVkZSBvdXRwdXQuaC4KKwkoYXNtX291dF9maWxlKTogRGVjbGFyZSBpdC4KKwkocmlkcG9pbnRlcnMpOiBBbGxvY2F0ZSBzdG9yYWdlIGhlcmUuCisKKwkqIGMtbGV4LmggKGxhc3RpZGRlY2wsIHRva2VuX2J1ZmZlcik6IERlY2xhcmUgaGVyZS4KKwkoeXlsZXgsIG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yLCByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKiBjLXBhcnNlLnksIG9iamMtcGFyc2UueTogTm90IGhlcmUuCisKKwkqIG9iamMtYWN0aW9ucy5jIChlcnJvcl93aXRoX2l2YXIsIGVycm9yX3dpdGhfbWV0aG9kKToKKwkod2Fybl93aXRoX21ldGhvZCk6IFVzZSBjb3VudF9lcnJvciwgbm90IGVycm9yY291bnQuCisKK01vbiBEZWMgMjMgMTE6NTA6MzcgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBzZGJvdXQuYzogIEZpeGVkIHR5cG8uCisJKiBzdG10LmMgKGluaXRfc3RtdCwgaW5pdF9zdG10X2Zvcl9mdW5jdGlvbik6ICBFeHBsaWN0IHJldHVybiB0eXBlLgorCSogZ251bGliMi5jIChfX2ZpeHVuc2RmZGksIF9fZml4dW5zc2ZkaSk6IE1vdmUgZXh0ZXJuIGRlY2xzLgorCSogcmVjb2cuYyAoaW5pdF9yZWNvZyk6ICBBZGRlZCBleHBsaWNpdCByZXR1cm4gdHlwZS4KKwkqIGxvbmdsb25nLmggKGNvdW50X2xlYWRpbmdfemVyb3MpOiAgTW92ZWQgZGVjbCBvZiBgX19jbHpfdGFiJy4KKwkqIHByaW50LXJ0bC5jIChpbnNuX25hbWVfcHRyKTogIE1ha2UgZGVjbCBgZXh0ZXJuJy4KKworCSogb2JqYy1hY3Rpb25zLmgsIG9iamMtYWN0aW9ucy5jIChkb2luZ19vYmpjX3RoYW5nKTogIE1ha2UgZXh0ZXJuLgorCSogb2JqYy1hY3Rpb25zLmgsIG9iamMtYWN0aW9ucy5jIChmaW5pc2hfY2xhc3MpOiAgUmV0dXJuIHZvaWQuCisJKiBvYmpjLWFjdGlvbnMuYyAoY29udGludWVfY2xhc3MpOiAgQWRkZWQgZGVmYXVsdCBlcnJvciByZXR1cm4gdmFsdWUuCisKKwkqIGZpeGluYy5zdnI0OiBNYXAgYXNzZXJ0aW9uIHRlc3RzIHRvIGVxdWl2YWxlbnQgQU5TSSBtYWNybyB0ZXN0cy4KKworCSogaTg2MC5jIChvdXRwdXRfYmxvY2tfbW92ZSk6ICBEaXNhYmxlZCBjb2RlIHRvIG1vdmUgYnkgd29yZHMgb3IKKwloYWxmd29yZHMgdW50aWwgaXQgY2FuIGJlIG1hZGUgdG8gd29yayByaWdodC4KKworCSogaTg2MC5jIChvdXRwdXRfYmxvY2tfbW92ZSk6ICBNb3ZlZCBhIHNlcXVlbmNlIG9mIGNvbW1vbgorCWBvdXRwdXRfYXNtX2luc24nIGNhbGxzIG91dCBvZiAoYW5kIGJlZm9yZSkgY29uZGl0aW9uYWxzLgorCisJKiBpODYwLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogIENvcnJlY3RlZCBidWdzIGluIG1vdmUgbG9vcC4KKworTW9uIERlYyAyMyAxNToyNTowMSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4a3Y0LmggKENQUF9QUkVERUZJTkVTKTogRml4IGZvciB2YXJhcmdzL3N0ZGFyZy4KKwkoaW5jbHVkZXMpOiBJbmNsdWRlIHN2cjQuaCBiZWZvcmUgbTg4ay5oIHNvIHRoZSBvdmVycmlkZXMgaW4gbTg4ay5oCisJd2lsbCB0YWtlIGVmZmVjdC4KKworTW9uIERlYyAyMyAwNzowNjoyNyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBpODYwLmMgKG91dHB1dF9kZWxheWVkX2JyYW5jaCk6IENhbGwgaW5zbl9leHRyYWN0IGFuZAorCWNvbnN0cmFpbl9vcGVyYW5kcyBzbyB0aGF0IGB3aGljaF9hbHRlcm5hdGl2ZScgaXMgc2V0IHByb3Blcmx5LgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSwgY2FzZSBBUlJBWV9UWVBFKTogSGFuZGxlCisJVFlQRV9OT19GT1JDRV9CTEsgc2ltaWxhciB0byBSRUNPUkRfVFlQRS4KKworCSogZW5jcm9zZS5oLCBpMzg2cm9zZS5oLCBtaXBzLmggKExJQkdfU1BFQyk6IERlbGV0ZWQ7IHVudXNlZC4KKworU3VuIERlYyAyMiAxMjowMjowMyAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYuYyAoZnVuY3Rpb25fZXBpbG9ndWUpOiBVc2UgY29ycmVjdCBvcGVyYW5kIGZvciBpbnNuIG1vZGUuCisKK1N1biBEZWMgMjIgMTI6MjA6MTYgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgc2V0IFRSRUVfUFVCTElDIGZvciBtZW1iZXIKKwlmdW5jdGlvbnMgdGhhdCBhcmUgcmVhbGx5IGRlY2xhcmVkIGFzIGlubGluZSBtZXRob2RzLgorCisJKiBjcC1pbml0LmMgKGJ1aWxkX3ZpcnR1YWxfaW5pdCk6IEFkZCBtaXNzaW5nIGNhbGwgdG8KKwlgYXNzZW1ibGVfZXh0ZXJuYWwnIHdoZW4gd2UgdXNlIGEgdmlydHVhbCBmdW5jdGlvbiB0YWJsZS4KKworCSogY3AtZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBEb24ndCBhbGxvY2F0ZSBhIGRlY2wgaWYgYXQgdGhlCisJZ2xvYmFsIGJpbmRpbmcgbGV2ZWwuCisKKwkqIHZheC5oIChQUklOVF9PUEVSQU5EKTogSGFuZGxlIG5ldyAnUicgY2FzZS4KKwkqIHZheC5tZDogQ2hhbmdlIGFsbCBwYXR0ZXJucyB3aGljaCBwYXNzZWQgYSBuZWdhdGVkIG9wZXJhbmQgZm9yCisJYHJvdGwnIHRvIHVzZSAnUicgYXMgdGhlIG5lZ2F0b3IsIHNpbmNlIHJvdGwgY2Fubm90IGFjY3R1YWxseSBoYW5kbGUKKwluZWdhdGl2ZSBhcmd1bWVudHMuCisKK1N1biBEZWMgMjIgMTI6MzE6NDYgMTk5MSAgUm9uIEd1aWxtZXR0ZSAocmZnIGF0IG5jZC5jb20pCisKKwkqIGkzODZ2NC5oIChUQVJHRVRfVkVSU0lPTik6ICBBZGRlZCBkZWZpbml0aW9uLgorCSogaTg2MHY0LmggKFRBUkdFVF9WRVJTSU9OKTogIEFkZGVkIGRlZmluaXRpb24uCisKKwkqIG02OGt2NC5oOiAgTmV3IGZpbGUuCisJKiBmeDI4MDAuaDogIE5ldyBmaWxlLgorCisJKiBtODhrdjQuaCAoRFdBUkZfREVCVUdHSU5HX0lORk8pOiAgRGVsZXRlZCByZWR1bmRhbnQgZGVmaW5pdGlvbi4KKwkoSXQncyBkZWZpbmVkIGFscmVhZHkgaW4gc3ZyNC5oLikKKworCSogbTg4a3Y0LmggKENQUF9QUkVERUZJTkVTKTogQWRkZWQgZGVmaW5pdGlvbi4KKworCSogbTg4a3Y0LmggKENQUF9TUEVDLCBMSUJfU1BFQywgTElOS19TUEVDLCBTVEFSVEZJTEVfU1BFQyk6CisJRGVsZXRlZCByZWR1bmRhbnQgZGVmaW5pdGlvbnMuICAoVGhlc2UgYXJlIGRlZmluZWQgaW4gc3ZyNC5oLikKKworCSogY2NjcC5jIChlcnJubywgc3lzX25lcnIsIHN5c19lcnJsaXN0KTogTW92ZWQgZXh0ZXJuIGRlY2xzIHRvIHRvcCBsZXYuCisJKiBmdW5jdGlvbi5jIChyb3VuZF9kb3duKTogTGlrZXdpc2UuCisJKiBjYWxscy5jLCBjLWNvbnZlcnQuYzogRGVsZXRlIGJsb2NrLWxldmVsIGV4dGVybiBkZWNscy4KKwkqIGMtY29udmVydC5jOiBJbmNsdWRlIGZsYWdzLmguCisKKwkqIGNvbmZpZ3VyZSAoaTM4Ni0qLXN5c3YqKTogIEZpeGVkIHRtYWtlX2ZpbGUgdmFsdWUuCisJKGk4NjAtKi1zeXN2MyopOiAgRml4ZWQgeG1ha2VfZmlsZSBhbmQgdG1ha2VfZmlsZSB2YWx1ZS4KKwkoaTg2MC1hbGxpYW50LSopOiAgTmV3IGNvbmZpZ3VyYXRpb24uCisKKwkqIGk4NjAuYyAocmVjb2dfb3BlcmFuZCwgY2FsbF91c2VkX3JlZ3MsIGluc25fdGVtcGxhdGUsCisJaW5zbl9uX29wZXJhbmRzLCBpbnNuX291dGZ1biwgYWx0ZXJfc3VicmVnKTogIE1vdmVkIGV4dGVybgorCWRlY2xhcmF0aW9ucyBvdXQgb2YgbG9jYWwgY29udGV4dHMgYW5kIHB1dCB0aGVtIGF0IGZpbGUtc2NvcGUuCisKKwkqIGk4NjAuYyAoemVyb19vcGVyYW5kKTogIERlbGV0ZWQgdXNlbGVzcyBmdW5jdGlvbi4KKworCSogaTg2MC5jIChzaW5nbGVtb3ZlX3N0cmluZyk6IEFkZGVkIGNvZGUgdG8gb3B0aW1pemUgbW92aW5nIGhhbGZ3b3JkCisJY29uc3RhbnRzLgorCisJKiBpODYwLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogIERvbid0IGRvIENDX1NUQVRVU19JTklUIHVudGlsIGl0IGlzCisJZGVmaW5pdGVseSBuZWNlc3NhcnkgJiBhcHByb3ByaWF0ZS4KKworCSogaTg2MC5jIChvdXRwdXRfYmxvY2tfbW92ZSk6ICBDcmVhdGUgdXAgdG8gMTYgc2VxdWVudGlhbCBsb2FkL3N0b3JlCisJcGFpcnMgZm9yIGNvbnN0YW50IGxlbmd0aCBtb3ZlcyByZWdhcmRsZXNzIG9mIG9wZXJhbmQgc2l6ZXMgKGUuZy4KKwlieXRlLCBoYWxmd29yZCwgd29yZCkuCisKKwkqIGk4NjAuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiAgVHJ5IHRvIGdlbmVyYXRlIHdpZGVzdCBraW5kIG9mCisJc2VxdWVudGlhbCBsb2FkL3N0b3JlIHBhaXJzIGZvciBjb25zdGFudCBsZW5ndGggbW92ZXMgYmVmb3JlIHRyeWluZworCXRoZSBsZXNzIGVmZmljaWVudCAobmFycm93ZXIpIG9uZXMuCisKKwkqIGk4NjAuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiAgRG9uJ3QgZG8gc2VxdWVudGlhbCBsb2FkL3N0b3JlIHBhaXJzCisJZm9yIGNvbnN0YW50IGxlbmd0aCBtb3ZlcyB1bmxlc3MgdGhlIHNpemUgaXMgYSBtdWx0aXBsZSBvZiB0aGUKKwlzaXplIG9mIHRoZSBvcGVyYW5kcyBtb3ZlZCBlYWNoIHRpbWUgKGkuZS4gd29yZCwgaGFsZndvcmQsIGJ5dGUpLgorCisJKiBpODYwLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogIFJlLXdyb3RlIGNvZGUgdG8gZG8gaW5saW5lIHZhcmlhYmxlCisJbGVuZ3RoIGJsb2NrIG1vdmVzIHRvIGNvcnJlY3QgZmF0YWwgZXJyb3JzIChlLmcuIG5vIGNoZWNrIGZvciB6ZXJvCisJb3IgbmVhZ3RpdmUgc3RhcnQgY291bnQpIGFuZCB0byBtYWtlIGl0IG1vcmUgZWZmaWNpZW50IChzYXZlZCAxIGN5Y2xlCisJcGVyIGl0ZXJhdGlvbikuCisKKwkqIGk4NjAuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiAgTWFrZSB2YXJpYWJsZSBsZW5ndGggbW92ZXMgd2l0aCBzdGFydGluZworCWFsaWdubWVudCBvZiA0IG9yIDIgYCNpZiAwJyBmb3Igbm93LCB1bnRpbCB0aGV5IGNhbiBiZSBmaXhlZCB0byB3b3JrCisJcmlnaHQuICBBbHNvIHJlb3JkZXJlZCBhbGwgdGhyZWUgY2FzZXMgc28gdGhhdCBsb25nZXIgYWxpZ25tZW50cyBhcmUKKwljaGVja2VkIGZvciBmaXJzdC4KKworU3VuIERlYyAyMiAwMToyNTowNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGkzODZ2NC5oOiBJbmNsdWRlIHN2cjQuaCBqdXN0IG9uY2UuCisKKwkqIHByb3RvaXplLmMgKGZwcmludGYsIHByaW50Zik6IERlY2xzIHB1dCBpbiAjaWYgMC4KKworCSogZW1pdC1ydGwuYyAoc3RhY2tfc2xvdF9saXN0KTogRGVsZXRlIHN1cGVyZmx1b3VzIGV4dGVybiBkZWNsLgorCShlbWl0KTogQWJvcnQgaWYgYXJnIGlzbid0IHJlY29nbml6ZWQuCisKKwkqIGMtcGFyc2UueSAoY3VycmVudF9kZWNsc3BlY3MsIGRlY2xzcGVjX3N0YWNrKTogRGVjbGFyZSBzdGF0aWMuCisJKHVuZGVjbGFyZWRfdmFyaWFibGVfbm90aWNlKTogTGlrZXdpc2UuCisJKGxhc3RpZGRlY2wpOiBEZWNsYXJlIGV4dGVybi4KKwkqIG9iamMtcGFyc2UueTogU2FtZSBjaGFuZ2VzIGFzIGMtcGFyc2UueS4KKwkodG9rZW5fYnVmZmVyKTogRGVjbGFyZSBleHRlcm4uCisKKwkqIGMtbGV4LmM6IEluY2x1ZGUgb3V0cHV0LmguCisJKGNoZWNrX25ld2xpbmUpOiBEZWNsIG9mIGFzbV9vdXRfZmlsZSBkZWxldGVkLgorCisJKiBjLWxleC5oIChyaWRwb2ludGVycywgTk9SSUQpOiBEZWNsYXJlL2RlZmluZSBoZXJlLgorCSogYy1sZXguYywgYy1wYXJzZS55LCBvYmpjLXBhcnNlLnk6IE5vdCBoZXJlLgorCisJKiBzdW4zLmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IEFkZCBgLWFzc2VydCcuCisJKExJTktfU1BFQyk6IFBhc3MgLWFzc2VydCB0byBsaW5rZXIuCisKKwkqIGdibC1jdG9ycy5oIChfX0NUT1JfRU5EX18sIF9fRFRPUl9FTkRfXyk6IFJlbW92ZSBgZXh0ZXJuJy4KKworCSogc3BhcmMuaCAoUlRYX0NPU1RTKTogSW5jcmVhc2UgbXVsdGlwbHkgY29zdCB0byAyMC4KKwkoTVVMU0kzX0xJQkNBTEwpOiBVc2UgLnVtdWwuCisJKFVNVUxTSTNfTElCQ0FMTCk6IERlbGV0ZWQuCisKK1NhdCBEZWMgMjEgMTg6MzQ6MjcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogQWxsb3cgT1AwIHRvIGJlIFZPSURtb2RlIGlmIGl0CisJaXMgYSBDT01QQVJFIG9yIGEgY29tcGFyaXNvbiBvcGVyYXRpb24uCisKKwkqIGk4NjAubWQgKGJ0ZSk6IFJlbW92ZSBub3cgdW5uZWVkZWQgcGF0dGVybnMuCisJQ29ycmVjdCBtb2RlIG1pc21hdGNoIGVycm9ycyBpbiBwYXR0ZXJucyB0aGF0IHdpbGwgbm93IGJlIHVzZWQuCisKK1NhdCBEZWMgMjEgMDA6MTQ6MjUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBuczMyay5oIChUUkFNUE9MSU5FX1RFTVBMQVRFLCBUUkFNUE9MSU5FX1NJWkUpOiBEdW1taWVzIGRlbGV0ZWQuCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IExpa2V3aXNlLiAgI2Vycm9yIGluc2VydGVkLgorCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBGb3IgaW52YWxpZCBhZGRyZXNzLCBqdXN0IGFib3J0LgorCisJKiBNYWtlZmlsZS5pbiAoRklYSU5DTFVERVMpOiBOZXcgdmFyaWFibGUuCisJKGluY2x1ZGVzLCBtYWtldGVzdCk6IFVzZSB0aGF0LgorCSogeC1pMzg2djQgKEZJWElOQ0xVREVTKTogT3ZlcnJpZGUgaGVyZS4KKworRnJpIERlYyAyMCAxODoyODo1NCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGRieG91dC5jIChkYnhvdXRfcmVhbGx5X2JlZ2luX2Z1bmN0aW9uKTogTmV3IHN1YnJvdXRpbmUuCisJKGRieG91dF9mdW5jdGlvbik6IFVzZSB0aGF0LCBidXQgb25seSBpZiBub3QgREJYX0ZVTkNUSU9OX0ZJUlNULgorCShkYnhvdXRfYmVnaW5fZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb24uCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBDYWxsIGRieG91dF9iZWdpbl9mdW5jdGlvbi4KKworCSogZGJ4b3V0LmMgKGRieG91dF9mdW5jdGlvbik6IEltcGxlbWVudCBEQlhfT1VUUFVUX0ZVTkNUSU9OX0VORC4KKworCSogc3BhcmMubWQgKG1vdnN0cnNpKTogQWRkIG1pc3NpbmcgZG91YmxlIHF1b3RlLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogSGFuZGxlIC1YbGlua2VyLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFRyZWF0IHZmb3JrIGxpa2Ugc2V0am1wLgorCisJKiBjLWRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogVXNlIHB1c2hfb2JzdGFja3Nfbm9jaGFuZ2UuCisKKwkqIHNwYXJjLmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IEFkZCAtYXNzZXJ0LgorCShMSU5LX1NQRUMpOiBQYXNzIC1hc3NlcnQgdG8gbGlua2VyLgorCisJKiBzdnI0LmggKEFTTV9PVVRQVVRfTE9DQUwpOiBGaXggdHlwby4KKworRnJpIERlYyAyMCAwNzo1MjoxOSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFJlY29nbml6ZSBtb3JlIC1mbm8tT1BUSU9OCisJb3B0aW9ucyB3aGljaCBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IChpbiB0aGUgdHVybmluZyBvZmYgb2YgdGhlCisJb3B0aW9uKS4KKworCSogY3AtcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlX2VpdGhlcik6IFJ1bGUgZGVsZXRlZC4KKwkoaWRlbnRpZmllcl9laXRoZXIpOiBSdWxlIGRlbGV0ZWQuCisJKGRlbGV0ZSk6IERvbid0IGNhbGwgYGJ1aWxkX3hfZGVsZXRlJycgaWYgdGhlIHR5cGUgZG9lcyBub3QgaGF2ZSBhCisJZGVzdHJ1Y3Rvci4gIFdlIG1heSBzdGlsbCBuZWVkIHRvIGFkanVzdCB0aGUgYWRkcmVzcyBwYXNzZWQgdG8KKwlgb3BlcmF0b3IgZGVsZXRlJy4KKworCSogY3AtaW5pdC5jIChidWlsZF9kZWxldGUpOiBOZXcgYXJndW1lbnQgTUFZQkVfQURKVVNULiAgQWxsIGNhbGxlcnMKKwljaGFuZ2VkLiAgQWxzbywgYWRkICNpZiAwLyNlbmRpZiBhcm91bmQgY29kZSBkZWFsaW5nIHdpdGggQUxJR05NRU5ULgorCUl0J3MgZGVhZCBjb2RlLCBhbmQgdGhhdCdzIHVuY2xlYXIgb3RoZXJ3aXNlLgorCShtYXliZV9hZGp1c3RfYWRkcl9mb3JfZGVsZXRlKTogTmV3IGZ1bmN0aW9uLgorCShidWlsZF9uZXcpOiBJbml0aWFsaXplIHNwZWNpYWwgaGVhZGVyIGZvciBhcnJheXMgYWxsb2NhdGVkIHdpdGgKKwlgb3BlcmF0b3IgbmV3W10nLiAgVGhpcyBpcyBhIHJld3JpdGUgb2YgS2VuJ3MgY29kZS4KKwkoaW5pdF9pbml0X3Byb2Nlc3NpbmcpOiBOZXcgYnVpbHQtaW4gdHlwZSBCSV9oZWFkZXJfdHlwZS4KKworCSogY3AtaW5pdC5jIChidWlsZF97bmV3LGRlbGV0ZX0pOiBDYWxsIGBidWlsZF9idWlsdGluX2NhbGwnIGZvciBCSU4sCisJQklELgorCShidWlsZF9idWlsdGluX2NhbGwpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBTZXQgVFJFRV9FWFRFUk5BTC4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBTZXQgVFJFRV9QVUJMSUMgZm9yIGFsbCBtZW1iZXIgZnVuY3Rpb25zLiAgVGhleQorCWFyZSBlZmZlY3RpdmVseSBnbG9iYWwuICBEbyB0aGUgc2FtZSBmb3Igc3RhdGljIG1lbWJlcnMuCisJKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3QgY2xlYXIgVFJFRV9FWFRFUk5BTCBpbiBjYXNlIHRoZSBmdW5jdGlvbgorCWJlbG9uZ3MgdG8gYW5vdGhlciBmaWxlJ3MgaW1wbGVtZW50YXRpb24uICBPdGhlciBmaXhlcyB0bworCVRSRUVfUFVCTElDL1RSRUVfRVhURVJOQUwgbG9naWMgYmFzZWQgb24gaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uLgorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogQ2FsbCBgYXNzZW1ibGVfZXh0ZXJuYWwnIGlmCisJbmVjZXNzYXJ5LgorCitGcmkgRGVjIDIwIDA2OjI3OjM4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBBbHdheXMgcmVjb3JkIGZpcnN0IGluc24gZW1pdHRlZAorCWZvciBhIHJlbG9hZCwgaW5jbHVkaW5nIGFueSBpbnNucyBmb3IgYSBzZWNvbmRhcnkgcmVsb2FkLgorCShnZW5faW5wdXRfcmVsb2FkKTogQ29ycmVjdCBkb2N1bWVudGF0aW9uIG9mIGZ1bmN0aW9uLgorCitUaHUgRGVjIDE5IDIyOjAxOjUxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ251bGliMS5jIChwZXJmb3JtX2ZpeGRmc2kpOiBOZXcgY3VzdG9taXphdGlvbiBtYWNyby4KKworCSogc3ZyNC5oIChTRUxFQ1RfUlRYX1NFQ1RJT04pOiBVbmRlZiBiZWZvcmUgZGVmaW5pbmcuCisKK1RodSBEZWMgMTkgMTY6NTk6MTIgMTk5MSAgICAoRXJpYyBZb3VuZ2RhbGUgYXQgeW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIGNjY3AuYyAoaGFja192bXNfaW5jbHVkZV9zcGVjaWZpY2F0aW9uKTogTWFrZSBjb252ZXJzaW9uIG9mIAorCWZpbGVuYW1lcyBtb3JlIHZlcnNhdGlsZSBmb3IgdXNlciBzcGVjaWZpZWQgaW5jbHVkZSBkaXJlY3Rvcmllcy4KKworVGh1IERlYyAxOSAxNzozODoxOCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy5oICgjZXJyb3Incyk6IFB1dCB0YWIgaW4gZnJvbnQgb2YgYWxsICNlcnJvcidzLCBzbyB0aGF0CisJYW5jaWVudCBwcmUtQU5TSSBjb21waWxlcnMgd2lsbCBub3QgY29tcGxhaW4gYWJvdXQgdW5rbm93bgorCWRpcmVjdGl2ZXMsIGV2ZW4gaWYgdGhlICNlcnJvciBpcyAjaWZkZWYnZWQgb3V0LgorCisJKiBtaXBzLm1kIChmaXhfdHJ1bmMqKTogUmVvcmRlciBjb25zdHJhaW50cyBzbyB0aGF0ICdkJyBjb21lcyBiZWZvcmUKKwknZicsIGFuZCBwdXQgYSAnKicgaW4gZnJvbnQgb2YgJ2YnIGNvbnN0cmFpbnRzIHRvIGtlZXAgaW50ZWdlciBpbgorCXRoZSBHUCByZWdpc3RlcnMuCisJKGRlZmluZV9zcGxpdHMpOiBBZGQgcmVsb2FkX2NvbXBsZXRlZCBjaGVjayBmb3IgYWxsIGRlZmluZV9zcGxpdHMKKwl0aGF0IHVzZSBzdWJyZWcgb24gdGhlIGFyZ3VtZW50cyB0byB3b3JrIGFyb3VuZCBidWcgaW4gc2NoZWQuYy4KKworCSogY2NjcC5jIChsYW5nX2FzbSk6IE5ldyBzdGF0aWMgdmFyaWFibGUgdG8gaW5kaWNhdGUgd2UgYXJlCisJcHJvY2Vzc2luZyBhbiBhc3NlbWJseSBmaWxlIGFuZCB0byBpZ25vcmUgdW5rbm93biBkaXJlY3RpdmVzIGluIGNhc2UKKwl0aGV5IGFyZSBjb21tZW50cywgbGlrZSB0aGV5IGFyZSBvbiB0aGUgTUlQUyBzeXN0ZW1zLgorCShtYWluKTogU2V0IGxhbmdfYXNtIGlmIC1sYW5nLWFzbSBzd2l0Y2guCisJKGhhbmRsZV9kaXJlY3RpdmUsIHNraXBfaWZfZ3JvdXApOiBEb24ndCByZXBvcnQgYWJvdXQgdW5rbm93bgorCWRpcmVjdGl2ZXMgaWYgbGFuZ19hc20gaXMgc2V0LgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMgYXJyYXkpOiBQYXNzIC1sYW5nLWFzbSB0byBjcHAgd2hlbgorCXByb2Nlc3NpbmcgLlMgZmlsZXMgaW5zdGVhZCBvZiAtbGFuZy1jLgorCitUaHUgRGVjIDE5IDE1OjA2OjA5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZm5vLWlkZW50LgorCSogYy1sZXguYyAoY2hlY2tfbmV3bGluZSk6IElnbm9yZSAjaWRlbnQgZm9yIC1mbm8taWRlbnQuCisKKwkqIHN2cjQuaCAoQVNNX09VVFBVVF9MT0NBTCk6IFVzZSBhc3NlbWJsZV9uYW1lLgorCisJKiBtaXBzLmg6IFVzZSAjZXJyb3IsIG5vdCAjaW5jbHVkZSwgZm9yIGVycm9yIG1lc3NhZ2VzLgorCisJKiBjY2NwLmMgKHdhcm5pbmcsIG1haW4pOiBJbXBsZW1lbnQgLVdlcnJvci4KKworCSogaTM4NnNjby5oIChDUFBfU1BFQyk6IE1vdmUgbm9uLWZpeGVkIG9wdGlvbiBoZXJlLgorCShDUFBfUFJFREVGSU5FUyk6IEZyb20gaGVyZS4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEZvciAlcCwganVzdCBwYXNzIC1EIG9wdGlvbnMuCisJRm9yICVQLCBwYXNzIGFsbCAtQSBvcHRpb25zLiAgUHV0IGluIHdoaXRlc3BhY2UsIGZpeCB0eXBvcy4KKworCSogYy1wYXJzZS55IChwYXJtbGlzdF8yLCBkZWZuX3Bhcm1saXN0XzIpOiBXYXJuIGFib3V0ICguLi4pLgorCSogYy1kZWNsLmMgKGdldF9wYXJtX2luZm8pOiBEb24ndCB3YXJuIGhlcmUuCisKK1RodSBEZWMgMTkgMDY6MTU6NDYgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IEF2b2lkIG9yZGVyZWQgY29tcGFyaXNvbiBvZiBkZWJ1Z19pbmZvX2xldmVsCisJc2luY2UgaXQgaXMgYW4gZW51bS4KKworCSogbWlwcy5jOiBJbmNsdWRlIGdzdGFiLmguCisKKwkqIHNwYXJjLm1kOiBGaXggdHlwby4KKworCSogY2FsbGVyLXNhdmUuYyAoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogRG9uJ3Qgc2F2ZSByZWdzIHRoYXQKKwlkaWUgaW4gYSBDQUxMX0lOU04gb3IgdGhhdCBhcmUgYm9ybiB0aGVyZS4KKworVGh1IERlYyAxOSAwNDoyODoyMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtYXV4LWluZm8uYyAoZ2VuX2F1eF9pbmZvX3JlY29yZCk6IERvbid0IHdyaXRlIHNwYWNlIGF0IGxpbmUgYmVnLgorCitXZWQgRGVjIDE4IDExOjQ2OjEzIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjc2UuYyAoY3NlX21haW4pOiBVc2UgZ2V0X21heF91aWQgcmF0aGVyIHRoYW4gY29tcHV0aW5nIGl0LgorCitXZWQgRGVjIDE4IDE4OjEzOjA2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogRW5zdXJlIHJlcGxhY2VtZW50IG1hZGUgIGJ5IHNpbmdsZS11c2UgY29kZQorCWlzIG5vdCBtb2RpZmllZCBpbiB0aGUgbGlmZSBvZiB0aGUgcmVnaXN0ZXIgYmVpbmcgcmVwbGFjZWQuCisKK1dlZCBEZWMgMTggMTU6Mzc6NTIgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBydGwuaCAoZmNvbnN0Ml9ydHgsIGRjb25zdDJfcnR4KTogIEFkZGVkIGV4dGVybiBkZWNsYXJhdGlvbnMuCisKKwkqIGZsYWdzLmggKGZsYWdfaW5oaWJpdF9zaXplX2RpcmVjdGl2ZSk6IERlY2xhcmVkLgorCisJKiBzdnI0LmggKElOVF9BU01fT1AsIElOSVRfU0VDVElPTl9BU01fT1ApOiAgTW92ZWQgYXJvdW5kLgorCShBU0NJSV9EQVRBX0FTTV9PUCk6ICBEZWZpbml0aW9uIGFkZGVkLgorCShmbGFnX2luaGliaXRfc2l6ZV9kaXJlY3RpdmUpOiAgRGVsZXRlZCBzdXBlcmZsdW91cyBleHRlcm4gZGVjbHMuCisKKwkqIE1ha2VmaWxlLmluOiAgQ29ycmVjdCBudW1iZXIgb2YgZXhwZWN0ZWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cworCXJlcG9ydGVkIGJ5IGJpc29uIGZvciBjcC1wYXJzZS55LgorCisJKiBzcGFyY3Y0Lmg6ICBOZXcgZmlsZS4KKworCSogaTg2MC5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiAgQWRkZWQgZGVmaW5pdGlvbi4KKwkoc2Ztb2RlX2NvbnN0YW50X3RvX3Vsb25nKTogIEFkZGVkIGV4dGVybiBkZWNsYXJhdGlvbi4KKworCSogaTg2MC5tZCAoQlRFL0JUTkUgcGF0dGVybnMpOiAgQ2hhbmdlZCBhbGwgaW5zdGFuY2VzIG9mCisJYChtYXRjaF9vcGVyYW5kOlNJIDIgInplcm9fb3BlcmFuZCIgIkoiKScgdG8gYChjb25zdF9pbnQgMCknLgorCisJKiBpODYwLm1kIChsb2FkIHRoZW4gQlRFL0JUTkUgcGF0dGVybnMpOiAgQWRkZWQgOCBuZXcgcGF0dGVybnMsCisJZm9yIGNvbmQgYnJhbmNoIG9uIEVRL05FIG9mIGEgemVyby1leHRlbmRlZCBtZW1yZWYgd2l0aCBzbWFsbCBpbnRlZ2VyLgorCisJKiBpODYwLm1kOiAyMCBuZXcgcGF0dGVybnMgKGludm9sdmluZyBCVEUvQlRORSkgbGlrZSBleGlzdGluZyAyMAorCWJ1dCBzaW1wbGlmaWVkIHNvIHRoYXQgdGhlIGNvbWJpbmVyIHdpbGwgZmluZCB0aGVtLgorCisJKiBpODYwLm1kIChzZm1vZGVfY29uc3RhbnRfdG9fdWxvbmcsIGZjb25zdDJfcnR4KTogIFJlbW92ZWQKKwlzdXBlcmZsdW91cyBuZXN0ZWQgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKworV2VkIERlYyAxOCAxNTozOTo0NiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZhLWk4NjAuaCAodmFfc3RhcnQgZm9yIHN0ZGFyZy5oKTogRGl2aWRlIHJlZyBjb3VudHMgYnkgNC4KKworCSogc3RtdC5jIChlbWl0X2Nhc2Vfbm9kZXMpOiBGaXggdHlwbywgbmVhciB0ZXN0aW5nIGNvc3RfdGFibGUuCisKKwkqIGk4NjAuaCAoQ1VNVUxBVElWRV9BUkdTKTogRGVmaW5lIGEgbmFtZWQgc3RydWN0LCB0aGVuIHVzZSBpdC4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogQ29tcHV0ZSBzaXplcyBpbiBwcm9wZXIgb3JkZXIuCisKKwkqIHN2cjQuaCAoTURfU1RBUlRGSUxFX1BSRUZJWCk6IERlZmluZWQuCisJKFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVgpOiBEZWxldGVkLgorCisJKiBzcGFyYy5tZCAobW92c3Ryc2kpOiBEaXNhYmxlIGlmIG5lZWRzIG1vcmUgdGhhbiAzMiBpbnNucy4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogSGFuZGxlIGNvcHlpbmcgdG9vLXNob3J0IFNUUklOR19DU1QuCisKKwkqIGdzdGRhcmcuaCAoX1ZBX0xJU1QpOiBIYW5kbGUgdGhpcyBsaWtlIF9WQV9MSVNUXy4KKworCSogbTY4ay5oIChMT0NBTF9MQUJFTF9QUkVGSVgpOiBSZW1vdmUgdGhlIGBMJy4KKwlGaXggdXNlcyBvZiAlTCBieSBhZGRpbmcgYEwnLgorCSogbTY4ay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBGaXggdXNlIG9mICVMLgorCSogbTY4ay5tZCAobW92aGkpOiBGaXggdXNlIG9mICVMLiAgVGhleSB3ZXJlIGluY29uc2lzdGVudC4KKworV2VkIERlYyAxOCAxNDo1OToyNiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbGltaXRzLmggKHdob2xlIGZpbGUpOiBQcm90ZWN0IGFnYWluc3QgaW5jbHVzaW9uLgorCisJKiB0LWRlY3Jvc2UgKExJTUlUU19IKTogRG9uJ3QgaW5zdGFsbCBsaW1pdHMuaCBvbiBPU0YvMS4KKwkqIHQtZW5jcm9zZSAoTElNSVRTX0gpOiBEb24ndCBpbnN0YWxsIGxpbWl0cy5oIG9uIE9TRi8xLgorCSogdC1pMzg2cm9zZSAoTElNSVRTX0gpOiBEb24ndCBpbnN0YWxsIGxpbWl0cy5oIG9uIE9TRi8xLgorCisJKiB4LWRlY3Jvc2UgKFNZU1RFTV9JTkNMVURFUyk6IERvbid0IGRvIC1JL3Vzci9pbmNsdWRlLgorCSogeC1lbmNyb3NlIChTWVNURU1fSU5DTFVERVMpOiBEb24ndCBkbyAtSS91c3IvaW5jbHVkZS4KKwkqIHgtaTM4NnJvc2UgKFNZU1RFTV9JTkNMVURFUyk6IERvbid0IGRvIC1JL3Vzci9pbmNsdWRlLgorCitXZWQgRGVjIDE4IDA0OjUzOjIzIDE5OTEgIEtlbiBSYWVidXJuICAoUmFlYnVybkBDeWdudXMuQ09NKQorCisJKiBjcC1pbml0LmMgKGJ1aWxkX25ldyk6IFJld3JvdGUgc29tZSBvZiB0aGUgYXJyYXktaGFuZGxpbmcgY29kZS4KKwlOb3cgc3RvcmVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgKGFmdGVyIHN0cmlwcGluZyBvZmYgYWxsIG91dGVyCisJQVJSQVlfVFlQRSBub2RlcykgYXQgdGhlIHN0YXJ0IG9mIGFsbG9jYXRlZCBzdG9yYWdlLCBqdXN0IGJlZm9yZSB0aGUKKwlwb2ludGVyIHRoZSB1c2VyJ3MgcHJvZ3JhbSBzZWVzLiAgV2UgYWxzbyBzdG9yZSB0aGUgMnMgY29tcGxpbWVudAorCXZhbHVlIG9mIHRoZSBwb2ludGVyIHJldHVybmVkIHNvIHdlIGNhbiBkaXN0aW5ndWlzaCB3aGVuIGRlbGV0aW5nIGEKKwlwb2ludGVyIHdoZXRoZXIgaXQgd2FzICJhZGp1c3RlZCIgb3Igbm90LgorCShleHBhbmRfdmVjX2luaXQpOiBBZGRlZCBhIHR5cGUgY29udmVyc2lvbiBmb3IgY2FzZXMgd2hlbiB0aGUKKwlhZGRyZXNzIG9mIGFuIGFycmF5IGdldHMgcGFzc2VkIGluIGFuZCB3ZSB3YW50IHRvIGRlYWwgd2l0aCB0aGUKKwllbGVtZW50cy4KKwkoYnVpbGRfZGVsZXRlKTogQ2F0Y2ggYSBjYXNlIHdoZXJlIGRlbGV0aW9uIG9mIGFycmF5cyBjb3VsZCBzbGlwCisJdGhyb3VnaC4KKwkoYnVpbGRfdmVjX2RlbGV0ZSk6IE1vcmUgYXJyYXktaGFuZGxpbmcgcmV3cml0ZXMuICBFeHRyYWN0IHRoZQorCXN0b3JlZCB2YWx1ZSBhbmQgdXNlIGl0IGFzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBkZXN0cm95OyBpZ25vcmUKKwlhbnkgdmFsdWUgc3VwcGxpZWQgYnkgdGhlIHVzZXIuCisKKwkqIGNwLWluaXQuYyAoaW5pdF92ZmllbGRzKTogTm93IHN0YXRpYy4KKworCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ19kZWNsX2ZsYWdzKTogTWVyZ2VkICJkdW1teSIgZmllbGRzLgorCisJKiBjcC10cmVlLmggKERFQ0xfVEVNUExBVEVfSU5TVEFOVElBVElPTlMpOiBOZXcgbWFjcm8gZm9yIGZpbmRpbmcgYQorCWxpc3Qgb2YgaW5zdGFudGlhdGlvbnMgYWxyZWFkeSBtYWRlIG9mIGEgdGVtcGxhdGUuICAoT25seQorCWltcGxlbWVudGVkIGZvciBmdW5jdGlvbnMgY3VycmVudGx5LikKKwkqIGNwLXRyZWUuZGVmIChERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TKTogRGVzY3JpYmUgaXQuCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IE1haW50YWluIGFuZCBtYWtlIHVzZSBvZiBpdC4KKworCSogY3AtcHQuYyAodHN1YnN0LCBjYXNlIFJFRkVSRU5DRV9UWVBFKTogQ2FsbCBidWlsZF9yZWZlcmVuY2VfdHlwZQorCWluc3RlYWQgb2YgY29uc3RydWN0aW5nIHRoZSB0eXBlIGhlcmUuCisKK1dlZCBEZWMgMTggMDM6Mzc6NDYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKGxhYmVsX2RlY2wpOiBVc2UgaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzLgorCisJKiBjLXBhcnNlLnk6IFN1cHBvcnQgRlVOQ1RJT04gKFtBUkdOQU1FU10gREVDTFMpIHsuLi59LgorCShkZWZuX3Bhcm1saXN0XzIsIGRlZm5fcGFybXMpOiBOZXcgbm9udGVybWluYWxzLgorCShpZGVudGlmaWVyc19vcl90eXBlbmFtZXMpOiBOZXcgbm9udGVybWluYWwuCisJKHBhcm1saXN0X29yX2lkZW50aWZpZXJzXzEpOiBDaGFuZ2VkLgorCSogYy1kZWNsLmMgKGNvbWJpbmVfcGFybV9kZWNscyk6IE5ldyBmdW5jdGlvbi4KKworVHVlIERlYyAxNyAyMjoxODo0MyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfbWFpbl9mdW5jdGlvbik6IEJ1aWxkIFNZTUJPTF9SRUYgd2l0aCBQbW9kZSwKKwlub3QgVk9JRG1vZGUuCisKKwkqIHJzNjAwMC5oIChIQVJEX1JFR05PX05SRUdTLCBDTEFTU19NQVhfTlJFR1MpOiBGUCByZWdzIGNhbiBvbmx5IGhvbGQKKwk2NCBiaXRzLCBub3QgYW55IHNpemUgRlAgdmFsdWUuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUmVtb3ZlIHZhcmlhYmxlIG9sZF9jYWxsZXJfc2F2ZV9uZWVkZWQuCisJQ2FsbCBpbml0X3NhdmVfYXJlYXMgYW5kIHNldHVwX3NhdmVfYXJlYXMgaW5zdGVhZCBvZgorCWFsbG9jYXRlX3NhdmVfYXJlYXMgYW5kIGVsaW1fc2F2ZV9hZGRycy4KKwkqIGNhbGxlci1zYXZlLmMgKGluaXRfY2FsbGVyX3NhdmUpOiBOZXcgZnVuY3Rpb24sIGZyb20gcGFydCBvZgorCWFsbG9jYXRlX3NhdmVfYXJlYXMuCisJKHNldHVwX3NhdmVfYXJlYXMpOiBOZXcgZnVuY3Rpb24sIGZyb20gcmVzdCBvZiBhbGxvY2F0ZV9zYXZlX2FyZWFzCisJYW5kIGVsaW1fc2F2ZV9hZGRycy4KKwlXaGVuIHNjYW5uaW5nIHBzZXVkb3MgdG8gZmluZCBoYXJkIHJlZ3MgdGhhdCBtaWdodCBuZWVkIGNhbGxlci1zYXZlLAorCWxvb2sgYXQgYWxsIHBhcnRzIG9mIG11bHRpLXdvcmQgcmVnaXN0ZXJzLgorCisJKiBmbG93LmMgKGVsaW1fcmVnX3NldCk6IE5ldyB2YXJpYWJsZS4KKwkoZmxvd19hbmFseXNpcyk6IFNldCBpdCB0byBjb250YWluIHRob3NlIHJlZ3MgdGhhdCB3ZSBjYW4gZWxpbWluYXRlLgorCShtYXJrX3VzZWRfcmVncyk6IERvbid0IHNldCBlbGltaW5hYmxlIHJlZ3MgYXMgbGl2ZSB3aGVuIHRoZXkgYXJlIHVzZWQuCisKKwkqIGdsb2JhbC1hbGxvYy5jIChnbG9iYWxfYWxsb2MpOiBDbGVhciBwcmVmZXJlbmNlcyB3aXRoIGVsaW1pbmFibGUKKwlyZWdzLCBpbiBhZGRpdGlvbiB0byBjbGVhcmluZyBjb25mbGljdHMuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogQWJvcnQgaW5zdGVhZCBvZiBtYWtpbmcKKwlhIFNVQlJFRyBvZiBhIFZPSURtb2RlIGNvbnN0YW50LgorCisJKiBlbWl0LXJ0bC5jIChjb3B5X3J0eF9pZl9zaGFyZWQpOiBTQ1JBVENIIG1heSBhbHdheXMgYmUgc2hhcmVkLgorCitUdWUgRGVjIDE3IDIxOjA2OjAzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgTU0gdmVyc2lvbiBudW1iZXIgdG8gNS4KKwkocHJvY2Vzc29yX3R5cGUpOiBOZXcgZW51bSB0byBob2xkIHdoaWNoIHR5cGUgb2YKKwlwcm9jZXNzb3IgdG8gc2NoZWR1bGUgZm9yLgorCShtaXBzX2NwdSk6IE5ldyBnbG9iYWwgdG8gaG9sZCBwcm9jZXNzb3IgdHlwZS4KKwkoTUFTS18qLCBUQVJHRVRfKik6IFJlYXJyYW5nZSB0YXJnZXQgYml0cywgYWRkIGJpdHMgdG8gc2VsZWN0CisJcHJvY2Vzc29yIHR5cGUsIHI0MDAwIGludC9sb25nL2xvbmcgbG9uZyBzaXplcy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogRGVsZXRlIHJlZHVuYW50IG5vIG9wdGlvbnMsIG9ubHkgbGVhdmUgbm8tCisJdmVyc2lvbi4KKwkoQ1VNVUxBVElWRV9BUkdTKTogTWFrZSB0aGlzIGEgc3RydWN0dXJlLCBub3QgYSBwb2ludGVyIHRvIGEKKwlzdHJ1Y3R1cmUuCisJKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogQ1VNVUxBVElWRV9BUkdTIGNoYW5nZXMuCisJKEZVTkNUSU9OX0FSR19BRFZBTkNFKTogRGl0dG8uCisJKEZVTkNUSU9OX0FSRyk6IERpdHRvLgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUyk6IERpdHRvLgorCShSVFhfQ09TVFMpOiBDb3VudCBzaW1wbGUgbWVtb3J5IHJlZnMgYXMgb25lIGluc3RydWN0aW9uLgorCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBEZWZpbmUgYXMgNCwgdG8gbWFrZSBzdXJlIGNvbnN0cmFpbnRzIGFyZQorCWNoZWNrZWQuCisKKwkqIG1pcHMubWQgKGhpbG8gdHlwZSBhdHRyaWJ1dGUpOiBBZGQgaGlsbyB0eXBlIGF0dHJpYnV0ZSB0bworCXNlcGFyYXRlIG1vdmVzIHRvL2Zyb20gdGhlIGhpL2xvIHJlZ2lzdGVycyB3aXRoIG90aGVyIHJlZ2lzdGVyCisJdHJhbnNmZXJzLgorCShtb3ZlIHBhdHRlcm5zKTogU2V0IGhpbG8gYXR0cmlidXRlIGFzIGFwcHJvcHJpYXRlLgorCShkZWZpbmVfZnVuY3Rpb25fdW5pdHMpOiBVcGRhdGUgdGhlIGludGVnZXIgYW5kIG1lbW9yeSBmdW5jdGlvbmFsCisJdW5pdHMgdG8gaW5jbHVkZSBSNDAwMCBhbmQgUjYwMDAgcHJvY2Vzc29ycywga2V5ZWQgb2ZmIG9mIHRoZQorCS1tcls0Nl0wMDAgc3dpdGNoZXMuICBBZGQgYSBuZXcgZnVuY3Rpb25hbCB1bml0IGZvciB0cmFuc2ZlcmluZworCXN0dWZmIGJldHdlZW4gcmVnaXN0ZXIgc2V0cy4KKwkobW92e3NmLGRmfV94ZmVyKik6IFJlbW92ZSB0aGVzZSBwYXR0ZXJucywgYXMgdGhleSBhcmUgbm8gbG9uZ2VyCisJbmVlZGVkIGluIEdDQyAyLjAwIHRvIG1vdmUgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHJlZ2lzdGVyIHNldHMsCisJYW5kIGdlbmVyYXRlIGluc24gbm90IGZvdW5kIG1lc3NhZ2VzIGlmIHVzZWQuCisJKG1vdnNpX3VsdywgbW92c2lfdXN3KTogQ29ycmVjdCB0ZXN0IHRvIHNlZSBpZiBzdGFjayBsb2FkcyBhcmUKKwlhbGlnbmVkLiAgVXNlIFVOSVRTX1BFUl9XT1JELTEgaW5zdGVhZCBvZiBhIGhhcmQgY29kZWQgMy4KKwkobW92ZSBkZWZpbmVfZXhwYW5kcyk6IERlbGV0ZSBtb3ZlIGRlZmluZV9leHBhbmRzLCBzaW5jZSB0aGV5IGFyZQorCWlsbGVnYWwgYWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uLCBhbmQgdGhlIGJ1ZyB0aGV5IGd1YXJkCisJYWdhaW5zdCBoYXMgbG9uZyBhZ28gYmVlbiBmaXhlZC4KKworCSogbWlwcy5jIChtaXBzX2NwdSk6IE5ldyBnbG9iYWwgdG8gaG9sZCBwcm9jZXNzb3IgdHlwZS4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFNldCBtaXBzX2NwdSwgY2hlY2sgZm9yIDY0IGJpdCByNDAwMCBzd2l0Y2hlcworCWlmIHByb2Nlc3NvciBub3QgYSByNDAwMC4KKwkoaW5pdF9jdW11bGF0aXZlX2FyZ3MpOiBDVU1VTEFUSVZFX0FSR1MgY2hhbmdlcy4KKwkoZnVuY3Rpb25fYXJnX2FkdmFuY2UpOiBEaXR0by4KKwkoZnVuY3Rpb25fYXJnKTogRGl0dG8uCisJKGZ1bmN0aW9uX2FyZ19wYXJ0aWFsX25yZWdzKTogRGl0dG8uCisJKG1pcHNfb3V0cHV0X2ZpbGVuYW1lKTogRXhjZXB0IGZvciBmaXJzdCAuZmlsZSwgZG9uJ3QgZW1pdCBhbnkgb3RoZXIKKwkuZmlsZSBpZiBlbmNhcHN1bGF0aW5nIHN0YWJzIGluIEVDT0ZGLCBqdXN0IHB1dCBvdXQgc3RhYnMuICBUaGlzCisJY29uZnVzZXMgZ2RiLgorCShtaXBzX291dHB1dF9saW5lbm8pOiBEb24ndCBwdXQgb3V0IC5sb2MncyBpZiBlbmNhcHVsYXRpbmcgc3RhYnMgaW4KKwlFQ09GRi4KKwkobWlwc19hc21fZmlsZV9zdGFydCk6IFB1dCBhIC5zZXQgbm9ib3B0IGZvciBNSVBTIGFzc2VtYmxlciB0bworCXdvcmsgYXJvdW5kIGJ1ZyB3aGVyZSB0aGUgYXNzZW1ibGVyIGdvZXMgYm9ua2VycyBpZiBhIGJyYW5jaAorCWluc2lkZSBvZiBhIC5zZXQgbm9yZW9yZGVyIHNlY3Rpb24ganVtcHMgdG8gYSBsYWJlbCBvdXRzaWRlIG9mIGEKKwkuc2V0IG5vcmVvcmRlciBzZWN0aW9uLiAgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSBmaXhlZCBpbiAyLjIwIG9mCisJdGhlIGFzc2VtYmxlci4KKwkoZnVuY3Rpb25fZXBpbG9ndWUpOiBDb3JyZWN0bHkgZW1pdCBub3BzIHdpdGggdGFicyBhbmQgbmV3bGluZXMgaWYKKwluZWVkZWQuCisKKwkqIGRlY3Jvc2UuaCAoT0JKRUNUX0ZPUk1BVF9ST1NFKTogRGVmaW5lLCB0byB0ZWxsIGNvbGxlY3QgdG8KKwllbmFibGUgT1NGL3Jvc2Ugc3VwcG9ydCwgcmF0aGVyIHRoYW4gdXNlIG5tLgorCisJKiBlbmNyb3NlLmggKE9CSkVDVF9GT1JNQVRfUk9TRSk6IERlZmluZSwgdG8gdGVsbCBjb2xsZWN0IHRvCisJZW5hYmxlIE9TRi9yb3NlIHN1cHBvcnQsIHJhdGhlciB0aGFuIHVzZSBubS4KKworCSogaTM4NnJvc2UuaCAoT0JKRUNUX0ZPUk1BVF9ST1NFKTogRGVmaW5lLCB0byB0ZWxsIGNvbGxlY3QgdG8KKwllbmFibGUgT1NGL3Jvc2Ugc3VwcG9ydCwgcmF0aGVyIHRoYW4gdXNlIG5tLgorCisJKiB0LWRlY3Jvc2UgKEVYVFJBX1BBU1NFUyk6IEJ1aWxkIGNvbGxlY3QyIGluc3RlYWQgb2YgY29sbGVjdC1vc2YsCisJYW5kIGxpbmsgaXQgdG8gbGQuCisKKwkqIHQtZW5jcm9zZSAoRVhUUkFfUEFTU0VTKTogQnVpbGQgY29sbGVjdDIgaW5zdGVhZCBvZiBjb2xsZWN0LW9zZiwKKwlhbmQgbGluayBpdCB0byBsZC4KKworCSogdC1pMzg2cm9zZSAoRVhUUkFfUEFTU0VTKTogQnVpbGQgY29sbGVjdDIgaW5zdGVhZCBvZiBjb2xsZWN0LW9zZiwKKwlhbmQgbGluayBpdCB0byBsZC4KKworCSogeC1kZWNyb3NlIChERUJVRyk6IERlbGV0ZSAtZywgc2luY2UgQ0ZMQUdTIGFscmVhZHkgcGFzc2VzIGl0LgorCShHQ0NfQ0ZMQUdTKTogRGVmaW5lIFBPU0lYIHNvIHdlIGNhbiBidWlsZCBwcm90b2l6ZS4KKworCSogeC1lbmNyb3NlIChERUJVRyk6IERlbGV0ZSAtZywgc2luY2UgQ0ZMQUdTIGFscmVhZHkgcGFzc2VzIGl0LgorCShHQ0NfQ0ZMQUdTKTogRGVmaW5lIFBPU0lYIHNvIHdlIGNhbiBidWlsZCBwcm90b2l6ZS4KKworCSogeC1pMzg2cm9zZSAoREVCVUcpOiBEZWxldGUgLWcsIHNpbmNlIENGTEFHUyBhbHJlYWR5IHBhc3NlcyBpdC4KKwkoR0NDX0NGTEFHUyk6IERlZmluZSBQT1NJWCBzbyB3ZSBjYW4gYnVpbGQgcHJvdG9pemUuCisKKwkqIHQtZGVjc3RhdG4gKEVYVFJBX1BBU1NFUyk6IEV4cGxpY2l0bHkgbWVudGlvbiBjb2xsZWN0Mi4KKwkobGQpOiBVc2UgJChTWU1MSU5LKSByYXRoZXIgdGhhbiBqdXN0IGxuLgorCisJKiB0LW1pcHMgKEVYVFJBX1BBU1NFUyk6IEV4cGxpY2l0bHkgbWVudGlvbiBjb2xsZWN0Mi4KKworCSogY29sbGVjdDIuYyAod2hvbGUgZmlsZSk6IFJld3JpdGUgZmlsZSBiYXNlZCBvbiBjb2xsZWN0LW9zZiwgdG8KKwltYWtlIGl0IG1vcmUgcG9ydGFibGUuICBIaWdobGlnaHRzIGluY2x1ZGU6IHJ1bm5pbmcgbGQgb25seSBvbmNlIGlmCisJdGhlcmUgYXJlIG5vIGNvbnN0cnVjdG9yczsgT1NGL3Jvc2Ugc3VwcG9ydDsgbm90IGFzc3VtaW5nIHRoYXQgdGhlCisJbGlua2VyLCBhc3NlbWJsZXIsIG5tIGxpdmUgaW4gL2JpbjsgLXYgc3VwcG9ydCB0byB0cmFjZSB0aGUgY29tbWFuZHMKKwliZWluZyBleGVjdXRlZCBhbmQgcHJpbnQgYSB2ZXJzaW9uIG51bWJlcjsgbG9vcHMgaW5zdGVhZCBvZgorCXJlY3Vyc2lvbiB1c2VkIHRvIHdyaXRlIG91dCB0aGUgdGFibGVzOyBzdXBwb3J0IGZvciB1c2VyIHVzaW5nIC1yOworCWNoZWNraW5nIGFsbCBlcnJvciByZXR1cm5zOyBub3QgdXNpbmcgdGhlIHNoZWxsIHRvIHN0YXJ0IHByb2Nlc3Nlcy4KKworCSogY29sbGVjdC1vc2YuYyAod2hvbGUgZmlsZSk6IERlbGV0ZWQsIG1lcmdlZCBpbnRvIGNvbGxlY3QyLmMuCisKK1R1ZSBEZWMgMTcgMTU6NDk6MDYgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IERvbid0IHVwZGF0ZSB2YWx1ZSBvZiByZWdfbGl2ZV9sZW5ndGgKKwl3aGVuIGl0IGlzIG5lZ2F0aXZlLCBiZWNhdXNlIG5lZ2F0aXZlIHZhbHVlcyBhcmUgc3BlY2lhbC4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBNYWtlIG5ld19uZWVkcyBhbiBpbnQgbm90IGFuIGVudW0sIHNpbmNlCisJc29tZSBjb21waWxlcnMgd29uJ3QgYWNjZXB0IHVzaW5nIGB8JyBhbmQgYCYnIHdpdGggZW51bXMuCisKKwkqIHNwYXJjLm1kOiBEb24ndCBlbWl0IG5vcCBhZnRlciBmbG9hdGluZyBwb2ludCBjb21wYXJlOyB0aGlzIGlzCisJbm8gbG9uZ2VyIG5lZWRlZC4KKworCUZyb20gVG9tIFdvb2Q6CisJKiBzY2hlZC5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBFeGNoYW5nZSB4c2l6ZSBhbmQgeXNpemUgd2hlbiB4CisJYW5kIHkgYXJlIGV4Y2hhbmdlZC4KKworVHVlIERlYyAxNyAxNTowMTowNCAxOTkxICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHNldF9uZXN0ZWRfdHlwZW5hbWUpOiB1c2UgU0VUX0lERU5USUZJRVJfVFlQRV9WQUxVRSwKKwlub3Qgc2V0X2lkZW50aWZpZXJfdHlwZV92YWx1ZSwgc28gdGhhdCB0aGUgYmluZGluZyBkb2Vzbid0IGdldAorCXVud291bmQgYnkgbGVhdmluZyBjbGFzcyBzY29wZS4KKworVHVlIERlYyAxNyAxMDo1NzoxMiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogdG9wbGV2LmMgKG1haW4pOiBNYWtlIC1nMCBwcm9kdWNlIG5vIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworVHVlIERlYyAxNyAxNToxNToyMCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBJbiAlUCwgZHVwbGljYXRlIHRoZSBuYW1lcyB3aXRoIF9fIGp1c3QgaW4gZnJvbnQuCisKKwkqIGdzdGFiLmg6IFJlbmFtZWQgZnJvbSBzdGFiLmguCisJKiBjb2xsZWN0Mi5jLCBkYnhvdXQuYywgZmluYWwuYywgbWlwcy10ZmlsZS5jOiAjaW5jbHVkZSBjaGFuZ2VkLgorCSogZGJ4b3V0LmMgKE5fQ0FUQ0gpOiBEZWZpbmUgdGhpcyBpZiBzdGFiLmggZG9lcyBub3QuCisJKiBNYWtlZmlsZS5pbjogRGVwZW5kIG9uIGdzdGFiLmggd2hlcmUgYXBwcm9wcmlhdGUuCisKKwkqIE1ha2VmaWxlLmluIChTVEFHRVNUVUZGKTogUmVtb3ZlIGNvbGxlY3QgYW5kIGNvbGxlY3QyLgorCisJKiBjLXBhcnNlLnkgKHBhcm1saXN0XzIpOiBBbGxvdyBqdXN0IGAuLi4nIHdpdGggbm8gbmFtZWQgYXJncy4KKwkqIGMtZGVjbC5jIChnZXRfcGFybV9pbmZvKTogUGVkYW50aWMgd2FybmluZyBmb3IgdGhhdCB1c2FnZS4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3Qgb3V0cHV0IGJsb2NrcyBmb3IgLWcxLgorCisJKiBNYWtlZmlsZS5pbiAoY3J0YmVnaW4ubywgY3J0ZW5kLm8pOiBVc2UgLWcwLgorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfbWFpbl9mdW5jdGlvbik6IERvIG5vdGhpbmcgaWYgSU5JVF9TRUNUSU9OX0FTTV9PUC4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX2FzbSk6IEhhbmRsZSBBRERSX0VYUFIgb2YgYSBTVFJJTkdfQ1NULgorCSogc3RtdC5jIChleHBhbmRfYXNtKTogTGlrZXdpc2UuCisJKiBjLXBhcnNlLnkgKGV4dGRlZiwgc3RtdCk6IEFjY2VwdCBTVFJJTkdfQ1NUIG9yIEFERFJfRVhQUiBpbiBhc20uCisKK1R1ZSBEZWMgMTcgMTU6MDE6MTEgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuaCAoSU5JVF9TRUNUSU9OX0FTTV9PUCk6IE92ZXJyaWRlIHN2clszNF0uaC4KKwkqIG04OGt2NC5oIChJTklUX1NFQ1RJT05fQVNNX09QKTogT3ZlcnJpZGUgc3ZyNC5oIGFuZCBtODhrLmguCisJKiBtODhrZGd1eC5oICh7SU5JVCxDVE9SUyxEVE9SU31fU0VDVElPTl9BU01fT1ApOiBPdmVycmlkZSBtODhrLmgKKwlleGNlcHQgd2hlbiBjb21waWxpbmcgY3J0c3R1ZmYuYy4KKworTW9uIERlYyAxNiAyMTo1MDo0MiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG10LmMgKHN0cnVjdCBjYXNlX25vZGUpOiBSZW1vdmUgdW51c2VkIGZpZWxkIGB0ZXN0X2xhYmVsJy4KKwkocHVzaGNhc2UsIHB1c2hjYXNlX3JhbmdlKTogRG9uJ3QgaW5pdGlhbGl6ZSBpdC4KKworCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IE9ubHkgcHJpbnQgd2FybmluZ3MKKwlpZiAtV3N3aXRjaCBpcyBzcGVjaWZpZWQuCisJKGV4cGFuZF9lbmRfY2FzZSk6IENhbGwgY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcgZXZlbiBpZgorCS1Xc3dpdGNoIGlzIG5vdCBzcGVjaWZpZWQuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogQWRkIG1pc3NpbmcgYXJnIHRvIGNhbGwgdG8gZm9yY2VfcmVnLgorCShjb252ZXJ0X3RvX21vZGUpOiBMaWtld2lzZSwgZm9yIHByb3RlY3RfZnJvbV9xdWV1ZS4KKworTW9uIERlYyAxNiAyMDozMzoxMCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBDaGVjayBudW1iZXIgYW5kIHR5cGVzIG9mIGFyZ3MuCisKKwkqIGMtcGFyc2UueSAoc3RtdCwgZXh0ZGVmKTogQWxsb3cgY29uc3RhbnQgZXhwcmVzc2lvbiBpbnNpZGUgcGxhaW4gYXNtLgorCisJKiBtNjhrLm1kIChtb3ZoaSk6IFVzZSBhc21fZnByaW50ZiB0byBwcmludCAuc2V0IG9yIGVxdWl2YWxlbnQuCisJKiBtNjhrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFVzZSAlUiB3aGVuIHByaW50aW5nIHBjIHJlZ2lzdGVyLgorCSogbTY4ay5oIChBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMLCBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOgorCVVzZSAlTC4KKworCSogYy10eXBlY2suYywgY3AtdHlwZWNrLmMgKGNfc2l6ZW9mKTogR2l2ZSBlcnJvciBmb3IgaW5jb21wbGV0ZSB0eXBlLgorCitNb24gRGVjIDE2IDExOjE0OjI4IDE5OTEgIEtlbiBSYWVidXJuICAoUmFlYnVybkBDeWdudXMuQ09NKQorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgZGVjbGFyZSB1bnVzZWQgZnVuY3Rpb24KKwlfX2J1aWx0aW5fdmVjX2RlbGV0ZS4KKworTW9uIERlYyAxNiAwODozNTowNCAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBnbnVsaWIyLmMgKF9fdWRpdm1vZGRpNCk6IEFkZCBjb21tZW50LgorCitNb24gRGVjIDE2IDA3OjQ3OjEzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChpZGVhbF9jYW5kaWRhdGUpOiBBbHdheXMgc2V0IEJFU1QgYmVmb3JlIHVzaW5nIGl0LgorCUFsc28sIGNhbGwgYGJ1aWxkX2NvbXBvbmVudF9yZWZfMScgd2l0aCAzIGFyZ3MgZXZlcnl3aGVyZSwgYW5kCisJYGJ1aWxkX2luZGlyZWN0X3JlZicgd2l0aCAyIGFyZ3MgZXZlcnl3aGVyZS4KKworTW9uIERlYyAxNiAwNzoxNzo0NiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuaDogQWRkIGBleHRlcm4nIHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKwkoZ2VuX2lucHV0X3JlbG9hZCk6IEFkZCBkZWNsYXJhdGlvbi4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQWxsb2NhdGUgc2F2ZSBhcmVhIGlmIGNhbGxlci1zYXZlcyBhcmUgbmVlZGVkOworCWNoZWNrIGZvciBjYXNlIHdoZW4gaXQgYmVjb21lcyBuZWVkZWQgYWZ0ZXIgc29tZSBzcGlsbCByZWdpc3RlcnMgYXJlCisJb2J0YWluZWQuCisJQ2FuIG5vdyBlbGltaW5hdGUgZnJhbWUgcG9pbnRlciBldmVuIHdoZW4gY2FsbGVyLXNhdmVzIGFyZSBuZWVkZWQuCisJUGVyZm9ybSByZWdpc3RlciBlbGltaW5hdGlvbiBvZiBzYXZlIGFyZWEgYW5kIHNlZSBpZiBjYWxsZXItc2F2ZSBuZWVkcworCWEgc3BpbGwgcmVnaXN0ZXIuCisJSWYgcmVxdWlyZWQsIGZpbmQgYSBzcGlsbCByZWdpc3RlciBhbmQgcGFzcyBpdCB0byBjYWxsZXItc2F2ZSBjb2RlLgorCShnZW5faW5wdXRfcmVsb2FkKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIE1ha2VmaWxlLmluIChjYWxsZXItc2F2ZS5vKTogTm93IGluY2x1ZGVzIHJlbG9hZC5oIChhZ2FpbikuCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2FsbG9jKTogQ2FuIGVsaW1pbmF0ZSBmcmFtZSBwb2ludGVyIGV2ZW4gaWYKKwl3ZSBoYXZlIGNhbGxlci1zYXZlcy4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGluaXRfY2FsbGVyX3NhdmVzLgorCQorCSogY2FsbGVyLXNhdmUuYzogTWFqb3IgcmV3cml0ZTsgYWxtb3N0IGVudGlyZWx5IG5ldyBjb2RlLgorCUludGVncmF0ZSBjYWxsZXItc2F2aW5nIHdpdGggZnJhbWUgcG9pbnRlciBlbGltaW5hdGlvbi4KKwlEb24ndCB0cnkgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlcnMgdGhhdCBjYW5ub3QgYmUgZGlyZWN0bHkKKwljb3BpZWQgdG8gbWVtb3J5IChzdWNoIGFzIE1RKS4KKwlDb3JyZWN0bHkgcGxhY2Ugc2F2ZSBhbmQgcmVzdG9yZSBpbnNucy4KKwlEb24ndCByZXN0b3JlIGEgc2F2ZWQgcmVnaXN0ZXIgdW50aWwgZW5kIG9mIGJsb2NrIG9yIGlmIGl0IGlzIG5lZWRlZC4KKworCSogY3NlLmMgKG1lbnRpb25fcmVncyk6IE5vdyByZXR1cm5zIGludCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBoYXNoIGNvZGUKKwltYXkgaGF2ZSBjaGFuZ2VkLgorCUZvciBDT01QQVJFIGFuZCBjb21wYXJpc29uIG9wLCBlbnN1cmUgdGhhdCBhbnkgcmVnaXN0ZXIgb3BlcmFuZCBoYXMKKwlhIHF1YW50aXR5IG51bWJlci4KKwkoaW5zZXJ0X3JlZ3MpOiBSZXR1cm4gdmFsdWUgZnJvbSBtZW50aW9uX3JlZ3MuCisJKHJlaGFzaF91c2luZ19yZWcpOiBOZXcgZnVuY3Rpb24uCisJKHJlY29yZF9qdW1wX2VxdWl2LCBtZW50aW9uX3JlZ3MpOiBDYWxsIHJlaGFzaF91c2luZ19yZWcgaWYgYW4gb3BlcmFuZAorCW9mIGEgY29tcGFyZSBpcyBhIFJFRyB3aG9zZSBoYXNoIGNvZGUgaXMgY2hhbmdpbmcuCisKK01vbiBEZWMgMTYgMDc6MDk6MjEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfbWFpbl9mdW5jdGlvbik6IE5ldyBzdWJyb3V0aW5lLiAgQ2FsbCBfX21haW4uCisJKiBjLWRlY2wuYywgY3AtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogVXNlIHRoYXQuCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgZGVjbGFyZSBfX21haW4uCisKKwkqIG9iamMtYWN0aW9ucy5jIChpbml0X29iamMpOiBDYWxsIF9fb2JqY0luaXQgYXMgYSBjb25zdHJ1Y3Rvci4KKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFJlZW5hYmxlIFNEQiBjb2RlICNpZiAwJ2QgYmVmb3JlLgorCisJKiBwcm90b2l6ZS5jICh2ZXJzaW9uX3N0cmluZyk6IE1ha2UgaXQgZXh0ZXJuLgorCSogTWFrZWZpbGUuaW4gKHByb3RvaXplLCB1bnByb3RvaXplKTogTGluayB3aXRoIHZlcnNpb24uby4KKworU3VuIERlYyAxNSAyMzozMTo0NyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuYyAodmlydHVhbF9tZW1iZXIpOiBXaGVuIHJlY3VycmluZywgZG9uJ3QgZGl2ZSBpbnRvCisJbm9uZXhpc3RlbnQgYmFzZWNsYXNzZXMuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBTZXQgVFJFRV9TVEFUSUMgZm9yIGluaXRpYWxpemVkIGNvbnN0CisJYXJyYXlzLgorCSogY3AtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBBIGRlY2wgdGhhdCB3YXMgVFJFRV9TVEFUSUMgbWlnaHQKKwliZSBjaGFnbmVkIHRvIFRSRUVfRVhURVJOQUwgZHVlIHRvICNwcmFnbWEgaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uLgorCitTdW4gRGVjIDE1IDE0OjU3OjIzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKFNZU0NBTExTLmMuWCk6IEZpeCB0eXBvLgorCShJTlRFUk5BTF9DRkxBR1MpOiBEZWxldGUgLURNRVJHRUQuCisKKwkqIGRieG91dC5jIChkYnhvdXRfaW5pdCk6IFBhc3MgcHJvcGVyIGFyZ3MgdG8gQVNNX09VVFBVVF9NQUlOXyouCisJKiBuZXdwYmIuaCAoQVNNX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFTkFNRSk6IEFkZCBwcm9wZXIgYXJndW1lbnRzLgorCisJKiBzdG10LmMgKGVtaXRfY2FzZV9ub2Rlcyk6IFJld3JpdGUgdG8gY2hhbmdlIGluZHVjdGlvbiBjb25kaXRpb25zLgorCUhhbmRsZSBib3VuZGVkbmVzcyBpbiB0aGUgYm91bmRlZCBub2RlIGl0c2VsZi4KKwlIYW5kbGUgYnJhbmNoaW5nIGVudGlyZWx5IGF0IHRoZSBwYXJlbnQgbGV2ZWwuCisKKwkqIGdzdGRhcmcuaDogVXNlIHZhLWk4NjAuaC4KKwkqIHZhLWk4NjAuaCAodmFfc3RhcnQgZm9yIEFOU0kpOiBGaXggdHlwby4gIENhbGwgX19idWlsdGluX25leHRfYXJnLgorCitTYXQgRGVjIDE0IDIwOjQ1OjMwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiB2YS1ocDlrOC5oIHNob3VsZCBiZSB2YS1ocDgwMC5oLgorCisJKiBsb29wLmMgKGludmFyaWFudF9wKTogQ2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXIgaXMgbm90IGludmFyaWFudCBpZgorCWxvb3AgaGFzIGNhbGxzLgorCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQ291bnQgYSBDTE9CQkVSIGFzIGEgc2V0dGluZyBvZiBhIHJlZ2lzdGVyLgorCisJKiBzdG10LmM6IE1vdmUgaW5jbHVkZSBvZiBjdHlwZS5oIGFuZCBkZWZpbml0aW9uIG9mIGNvc3QgdmFyaWFibGVzIHRvCisJZnJvbnQgb2YgZmlsZS4KKwkoZXhwYW5kX2VuZF9jYXNlKTogQWx3YXlzIHNldCB1c2VfY29zdF90YWJsZS4gIENoZWNrIHR5cGUgaGVyZSBpbnN0ZWFkCisJb2YgaW4gZXN0aW1hdGVfY2FzZV9jb3N0cy4gIERvbid0IHN1cHByZXNzIHVzZSBvZiBjb3N0IHRhYmxlIHdoZW4KKwlub3Qgb3B0aW1pemluZy4KKwkoZXN0aW1hdGVfY2FzZV9jb3N0cyk6IE5vdyByZXR1cm5zIGludC4gIENoZWNrIGZvciBhbnkgY2FzZSB0YWcKKwl0aGF0IGlzIGFuIHVudXN1YWwgY29udHJvbCBjaGFyYWN0ZXIgaGVyZSBhbmQgcmVqZWN0IHVzZSBvZiB0YWJsZQorCWlmIHNvLiAgQWx3YXlzIGRvIGNvbXBhcmlzb25zIHNpZ25lZCwgc2luY2UgdGhhdCdzIGhvdyB3ZSBhY2Nlc3MgdGhlCisJY29zdCB0YWJsZS4KKwkoYmFsYW5jZV9jYXNlX25vZGVzKTogRG9uJ3QgY2hlY2sgZm9yIHN0cmFuZ2UgY29udHJvbCBjaGFyYWN0ZXJzIGhlcmUuCisJKG5vZGVfaGFzX2xvd19ib3VuZCk6IERvIGNoZWNraW5nIGlmIHdlIGRvbid0IGhhdmUgYSBsZWZ0IGJyYW5jaCwKKwlpbnN0ZWFkIG9mIGlmIHdlIGRvLgorCShub2RlX2hhc197bG93LGhpZ2h9X2JvdW5kKTogUmVtb3ZlIHNwdXJpb3VzIGNoZWNrcyBvbiBicmFuY2hlcy4KKwkoZW1pdF9jYXNlX25vZGVzKTogRW5zdXJlIG9wZXJhdGlvbiBwYXNzZWQgdG8gZW1pdF9jbXBfaW5zbiBtYXRjaGVzCisJdGhlIGJyYW5jaCB3ZSBhY3R1YWxseSBlbWl0LgorCUZpeCBjYXNlIG9mIGEgcmFuZ2Ugbm9kZSB3aXRoIG5vIGxlZnQgb3IgcmlnaHQgYnJhbmNoOyB1c2Ugb2YgY2FzZQorCWFuZCBkZWZhdWx0IGxhYmVsIHdlcmUgYmFja3dhcmQgZm9yIHRoZSBoaWdoIHRlc3QuCisJUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgZGVmYXVsdGVkX3tsZWZ0LHJpZ2h0fS4KKworU2F0IERlYyAxNCAxNjoxMDoxMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHByb3RvaXplLmM6IERvbid0IGluY2x1ZGUgbGltaXRzLmguCisJUmVuYW1lIGBwYXRobmFtZScgdG8gYGZpbGVuYW1lJyBldmVyeXdoZXJlLgorCUNsZWFuIHVwIGluZGVudGF0aW9uIG9mIGZwcmludGYgY2FsbHMuCisJVXNlIHN0YW5kYXJkIEdOVSBmb3JtYXQgZm9yIGZpbGUgbmFtZS9saW5lIGluIGVycm9yIG1lc3NhZ2VzLgorCShuX2Jhc2Vfc291cmNlX2ZpbGVzKTogUmVuYW1lZCBmcm9tIGJhc2Vfc291cmNlX2ZpbGVzLgorCShjb252ZXJ0X2ZpbGVuYW1lLCBpbnZvY2F0aW9uX2ZpbGVuYW1lLCBiYXNlX3NvdXJjZV9maWxlbmFtZXMpOgorCWBwYXRoJyByZW5hbWVkIHRvIGBmaWxlbmFtZScuCisJKHN5c2NhbGxzX2Fic29sdXRlX2ZpbGVuYW1lKTogUmVuYW1lZCBmcm9tIHN5c2NhbGxzX3BhdGhuYW1lLgorCShmaW5kX2ZpbGUpOiBBcmcgRklMRU5BTUUgbm8gbG9uZ2VyIGNvbnN0LgorCShtYWluKTogRml4IGdldGN3ZCBlcnJvci1jaGVja2luZyBsb2dpYy4KKwkodmFyYXJnc19zdHlsZV9pbmRpY2F0b3IpOiBEZWxldGUgYGNvbnN0Jy4KKwkoc2F2ZXN0cmluZyk6IERlY2xhcmUgYXJnIGBpbnB1dCcgY29uc3QuCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZSwgcHJvdG9pemUubywgdW5wcm90b2l6ZSwgdW5wcm90b2l6ZS5vKToKKwlVc2UgR0NDX0ZPUl9UQVJHRVQuCisJKGdldG9wdC5vLCBnZXRvcHQxLm8pOiBMaWtld2lzZS4KKwkoR0NDX0ZPUl9UQVJHRVQpOiBEZWxldGUgLUIuLy4KKwkoR0NDX0NGTEFHUyk6IEFkZCAtQi4vLiAgQ29weSBBTExfQ0ZMQUdTJ3MgZGVmaW5pdGlvbiwgbGVzcyBYQ0ZMQUdTLgorCisJKiBjcC1pbml0LmMgKGFkZF9mcmllbmRzKTogUGFzcyBwcm9wZXIgYXJncyB0byBzdHJuY21wLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2xlYXIgREVDTF9SVEwgZm9yIHZhcnMgbm90IHJlYWxseSBvdXRwdXQuCisJI2lmIDAgcG9zc2libHkgcmVkdW5kYW50IGNvZGUgZm9yIFNEQiBvdXRwdXQuCisKKwkqIHN5cy10eXBlcy5oOiBJbmNsdWRlIGdzdGRkZWYuaCB0byBnZXQgc2l6ZV90IGFuZCB3Y2hhcl90LgorCisJKiB1bHRyaXguaCAoQ1BQX1BSRURFRklORUQpOiBBZGQgX191bml4LCBfX3VsdHJpeCwgX19ic2Q0XzIuCisKKwkqIE1ha2VmaWxlLmluIChTVEFHRVNUVUZGKTogQWRkIGNvbGxlY3QsIGNvbGxlY3QyLgorCitTYXQgRGVjIDE0IDEyOjE2OjEyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGdldF9iYXNlbGlua3MpOiBVc2Ugb2JzdGFja3MgcmlnaHQsIGluc3RlYWQgb2YKKwlhYm9ydGluZyB3aGVuIHdlIGtub3cgd2UncmUgdXNpbmcgdGhlbSB3cm9uZy4KKworCSogY3AtcGFyc2UueSAoc3RydWN0c3ApOiBGaXggdHlwbyBpbiBleGNlcHRpb24gZGVjbGFyYXRpb24gcnVsZS4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByXzEpOiBSZWN1cnNpdmUgY2FsbCB0bworCWBidWlsZF9tb2RpZnlfZXhwcl8xJyB1c2VkIHByZS1CSU5GTyByZXByZXNlbnRhdGlvbiBmb3IKKwlCQVNFVFlQRV9QQVRIIGFyZ3VtZW50LgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBEb24ndCBzd2l0Y2ggdG8gdGVtcG9yYXJ5IGFsbG9jYXRpb24gZm9yCisJZGVjbHMgb2YgdHlwZSBSRUZFUkVOQ0VfVFlQRSwgYXMgdGhlaXIgaW5pdGlhbGl6ZXJzIG1heSBsaXZlIGEgbG9uZworCXRpbWUsIHRvby4KKworU2F0IERlYyAxNCAwNzoxMTowMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IElmIHdlIGhhdmUgYSBTVUJSRUcgb2YgYSBtdWx0aS13b3JkCisJY29uc3RhbnQsIHRyeSB0byBleHRyYWN0IGp1c3QgdGhlIHdvcmQgd2Ugd2FudC4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9hbGxvYyk6IENvcnJlY3QgcmVmZXJlbmNlIHRvIEVMSU1JTkFCTEVTLgorCitGcmkgRGVjIDEzIDE1OjI4OjM4IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKG1pcHMtbWlwcy1zeXN2KTogT24gTUlQUyBTeXN0ZW0gViwgdXNlIHhtLXVtaXBzLmgsIG5vdAorCXhtLW1pcHMuaC4KKworCSogZ3N0ZGRlZi5oIChfX1BUUkRJRkZfVFlQRV9fKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24gaW4gY2FzZQorCW5vbi1HQ0MgMi4wMCBjb21waWxlciBpcyB1c2VkLgorCShfX1NJWkVfVFlQRV9fKTogRGl0dG8uCisJKF9fV0NIQVJfVFlQRV9fKTogRGl0dG8uCisKK0ZyaSBEZWMgMTMgMTQ6NDk6NTQgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3ViOiBSZW5hbWVkIGZyb20gY29uZmlnLnN1YnIuCisJU3VwcG9ydCBvcyAtc3ltMS4KKwlDb252ZXJ0IC1zdnIzLCAtc3ZyNCB0byAtc3lzdjMsIC1zeXN2NC4KKwkqIGNvbmZpZ3VyZTogVXNlZCBuZXcgbmFtZS4KKworCSogTWFrZWZpbGUuaW4gKGluY2x1ZGVzKTogUHJlc2VydmUgZmlsZXMgZnJvbSBHQ0MgYWxyZWFkeSBpbiBkaXIuCisKK0ZyaSBEZWMgMTMgMTE6MDE6MTIgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGZpc2hwb25kKQorCisJKiBhdHQzODYuaDogIEZpeCB1bnBhcmVudGhlc2l6ZWQgbWFjcm8gYXJndW1lbnRzIGluCisJQVNNX09VVFBVVF9BU0NJSSBtYWNyby4KKworCSogaTM4NnY0Lmg6ICBTZWxlY3QgYW4gYXNzZW1ibHkgbGFuZ3VhZ2Ugc3ludGF4IGZpbGUgYW5kIGluY2x1ZGUKKwlpdC4gIFN1cHBseSBtaXNzaW5nIG1hY3JvcyBmcm9tIG9uZXMgaW4gaTM4NnYuaCAoVEFSR0VUX0RFRkFVTFQsCisJVkFMVUVfUkVHTk8sIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1ApLgorCisJKiBzdnI0Lmg6ICBGaXggbWlzc3BlbGxlZCB2YXJpYWJsZSBuYW1lIGxhYmVsbm8gKHdhcyBsYWJlbm8pLgorCitGcmkgRGVjIDEzIDA5OjA3OjIyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBDYWxsIGBhc3NlbWJsZV9leHRlcm5hbCcgYXMKKwluZWMuCisJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IENhbGwgYGFzc2VtYmxlX2V4dGVybmFsJyBhcyBuZWMuIGZvcgorCWZ1bmN0aW9uIGNhbGxzIHdlIGJ1aWxkLiAgQ29kZSBzbGlnaHRseSByZWFycmFuZ2VkIGZvciBjbGFyaXR5LgorCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENhbGwgYGFzc2VtYmxlX2V4dGVybmFsJyBhcyBuZWMuCisKK1RodSBEZWMgMTIgMjI6MDM6NTIgMTk5MSAgRXJpYyBZb3VuZ2RhbGUgKHlvdW5nZGFsZSBhdCB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBtYWtlLWNjMS5jb206IENoYW5nZSBtZXNzYWdlIGdpdmVuIHRvIHVzZXIuIENoYW5nZSBjLXBhcnNlX3RhYi4qCisJICB0byBjLXBhcnNlLioKKworCSogY29uZmlnLWdjYy5jb206IFB1cmdlIGV4Y2VzcyB2ZXJzaW9ucyBvZiB2ZXJzaW9uLm9wdC4KKworVGh1IERlYyAxMiAyMDoyNToyMCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogTWFrZWZpbGUuaW4gKEJPT1RfQ0ZMQUdTKTogUmVtb3ZlIHF1b3RlcyBhcm91bmQgdGhlIGFyZ3VtZW50LAorCXNpbmNlIHRoaXMgY2F1c2VzIGEgc3ludGF4IGVycm9yIHdoZW4gaXQgaXMgbGF0ZXIgZXhwYW5kZWQuCisKK1RodSBEZWMgMTIgMTc6NTM6NTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3VicjogQWRkIG1hbnkgbmV3IG1hY2hpbmVzIGFuZCBzb21lIE9TJ3MuCisKKwkqIHZhLWk4NjAuaDogUmV3cml0ZSBmcm9tIHJmZy4KKworCSogdG9wbGV2LmMgKG1haW4pOiBIYW5kbGUgLWRtIG9uIFVTRyBzeXN0ZW1zLgorCisJKiBtNjhrLmMgKHByaW50X29wZXJhbmQsIHByaW50X29wZXJhbmRfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbnMuCisJKiBtNjhrLmggKFBSSU5UX09QRVJBTkQsIFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IEp1c3QgY2FsbCB0aGVtLgorCisJKiBtNjhrLmMgKFNfKiwgRF8qKTogRGVsZXRlIHRoZSAjdW5kZWZzIGF0IHRoZSBlbmQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IFNwZWNpYWwgY2FzZSBpZiBmY24gcmV0dXJucyB2b2lkLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfb2JqY19tZXRob2RfY2FsbCk6IEZpeCB0eXBvIGluIE5lWFQgY2FzZS4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgQlVJTFRfSU5fQVJHU19JTkZPKTogQ2FzdCBpbml0IG9mIHdvcmRfcHRyLgorCisJKiBwcm90b2l6ZS5jOiBEZWxldGUgdGhlIGBleHRlcm4gIkMiJyBmb3IgQysrIGNvbXBpbGF0aW9uLgorCitUaHUgRGVjIDEyIDEwOjAxOjEzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBnYmwtY3RvcnMuaCAoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBGaXggb2ZmIGJ5IG9uZSBlcnJvciBpbgorCWhhbmRsaW5nIHRoZSBjb25zdHJ1Y3RvciBsaXN0IHdoZW4gYSB2YWxpZCBjb3VudCBpcyBzdXBwbGllZC4KKworCSogY29sbGVjdDIuYyAod3JpdGVfaG9va3MpOiBFbWl0IGEgY291bnQgYmVmb3JlIHRoZSBsaXN0IG9mCisJY29uc3RydWN0b3JzLCB0byBnbyBiYWNrIHRvIHRoZSBvbGQgZm9ybWF0LgorCisJKiBjb2xsZWN0LW9zZi5jICh3cml0ZV9zX2ZpbGUpOiBFbWl0IGEgY291bnQgYmVmb3JlIHRoZSBsaXN0IG9mCisJY29uc3RydWN0b3JzLCB0byBnbyBiYWNrIHRvIHRoZSBvbGQgZm9ybWF0LgorCisJKiBnbnVsaWIyLmMgKGV4aXQpOiBQcm92aWRlIGRlZmF1bHQgZGVmaW50aW9ucyBhcyBic3Mgc3ltYm9scyBmb3IKKwlhbGwgb2YgdGhlIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IgcmVsYXRlZCBzeW1ib2xzIGlmIHRoZSBtYWNybworCUlOSVRfU0VDVElPTl9BU01fT1AgaXMgbm90IGRlZmluZWQuICBUaGUgc2Vjb25kIGxpbmsgdGhhdCBjb2xsZWN0CisJZG9lcyBhbmQvb3IgZ2xkIHdpbGwgcHJvdmlkZSB0aGUgcmlnaHQgdmFsdWVzLgorCisJKiBkZWNyb3NlLmggKEhBVkVfQVRFWElUKTogTnVrZSBtYWNybywgbm8gbG9uZ2VyIHVzZWQuCisJKiBlbmNyb3NlLmggKEhBVkVfQVRFWElUKTogTnVrZSBtYWNybywgbm8gbG9uZ2VyIHVzZWQuCisJKiBpMzg2cm9zZS5oIChIQVZFX0FURVhJVCk6IE51a2UgbWFjcm8sIG5vIGxvbmdlciB1c2VkLgorCitUaHUgRGVjIDEyIDA3OjI3OjA1IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBnYmwtY3RvcnMuaCAoX19DVE9SX0xJU1RfXywgX19EVE9SX0xJU1RfXyk6IFJlbmFtZWQgZnJvbSAqX0JFR0lOX18uCisJKiBjb2xsZWN0LW9zZi5jIGNvbGxlY3QyLmM6IFJlbmFtZSBoZXJlIGFzIHdlbGwuCisKK1RodSBEZWMgMTIgMDQ6MTU6MjIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHN0bXQpOiBNYWtlIGFzbSBhbHRlcm5hdGl2ZXMgYWxsb3cgZXhwci4KKwkqIGMtdHlwZWNrLmMgKGNfZXhwYW5kX2FzbV9vcGVyYW5kcyk6IEdldCB0aGUgU1RSSU5HX0NTVCBmcm9tIHRoZSBleHByLgorCisJKiBjLXBhcnNlLnkgKGRhdGFkZWNsLCBkYXRhZGVjbHMsIGxpbmVub19kYXRhZGVjbCk6IE5ldyBydWxlcy4KKwkoeGRlY2xzKTogVXNlIHRoZW0uCisKK1dlZCBEZWMgMTEgMTg6MzY6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnYmwtY3RvcnMuaCAoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBKdXN0IG9uZSBkZWZpbml0aW9uOyB1c2UgT05fRVhJVC4KKwlUZXN0IGZvciAtMSBhbmQgaGFuZGxlIGJvdGgga2luZHMgb2YgdGFibGUgZm9ybWF0LgorCSogZ251bGliMi5jIChfX2RvX2dsb2JhbF9kdG9ycyk6IENoZWNrIGZvciAtMS4uLgorCShfX2RvX2dsb2JhbF9jdG9ycyk6IER1bW15IGRlZm4gb2YgT05fRVhJVCBpZiBubyBvdGhlciBkZWZpbmVkLgorCShfX21haW4pOiBEbyBub3RoaW5nIGlmIGNhbGxlZCBhZ2Fpbi4KKwkoZXhpdCk6IFVzZSBFWElUX0JPRFkgaWYgZGVmaW5lZC4KKwkqIGNydHN0dWZmLmMgKF9fQ1RPUl9MSVNUX18sIF9fRFRPUl9MSVNUX18pOgorCVJlbmFtZWQgZnJvbSAqX0JFR0lOX18uICBBZGQgLTEgYXMgZmlyc3QgZWx0LgorCShfX0NUT1JfRU5EX18sIF9fRFRPUl9FTkRfXyk6IEFkZCAwIGFzIGxhc3QgZWx0LgorCShPTl9FWElUKTogRHVtbXkgZGVmbiBpZiBubyBvdGhlciBpcyBkZWZpbmVkLgorCitXZWQgRGVjIDExIDE4OjA4OjM2IDE5OTEgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHRlbXBsYXRlX3Bhcm0pOiByZW1vdmVkIHNvbWUgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKKwlieSBub3Rpbmcgd2hpY2ggb2YgaWRlbnRpZmllciBvciBpZGVudGlmaWVyX2RlZm4gd291bGQgYWN0dWFsbHkgYmUKKwlwYXNzZWQgdXAgaW4gdGhpcyBjb250ZXh0LgorCitXZWQgRGVjIDExIDE3OjUyOjQ2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogQWRqdXN0IGxvb3AgZGVwdGggaWYgaXQgaXMgY2hhbmdlZCBpbgorCW5vdGVzIGF0IHRoZSBlbmQgb2YgYSBibG9jay4KKwlBYm9ydCBpZiBsb29wIGRlcHRoIGV2ZXIgcmVhY2hlcyB6ZXJvLgorCitXZWQgRGVjIDExIDE2OjMwOjA5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChkb19lbmRpZik6IERvbid0IGNhbGwgcmVjb3JkX2NvbnRyb2xfbWFjcm8gYXQgdG9wIGxldmVsLgorCitXZWQgRGVjIDExIDE0OjQ1OjQyIDE5OTEgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc2V0X2lkZW50aWZpZXJfdHlwZV92YWx1ZSk6IElmIHdlJ3JlIGluIGEKKwljbGFzc19iaW5kaW5nX2xldmVsLCBzaGFkb3cgdGhlIHR5cGUgdGhlcmUuCisJKHhyZWZfZGVmbl90YWcpOiBOZXcgZnVuY3Rpb24uIENhbGxzIHhyZWZfdGFnIHdpdGggc3BlY2lhbCBmbGFnIHNldAorCXRvIGluZGljYXRlIHRoYXQgd2Uga25vdyB3ZSdyZSBkZWZpbmluZyBzb21ldGhpbmcuCisJKHB1c2hkZWNsX3RvcF9sZXZlbCk6IGlmIGNsYXNzX2JpbmRpbmdfbGV2ZWwgaXMgc2V0LCBzZWFyY2ggZnJvbSBpdAorCWluc3RlYWQgb2Ygb25seSBmcm9tIGN1cnJlbnRfYmluZGluZ19sZXZlbCB3aGVuIHRyeWluZyB0byBmaW5kCisJc2hhZG93ZWQgdmFsdWVzLiBUaGlzIGlzIGluIHN1cHBvcnQgb2YgdGVzdHMgbTUuY2MgdGhyb3VnaCBtOC5jYywKKwl3aGljaCBicm9rZSBhZnRlciB0aGUgY2hhbmdlcyBmb3IgbTkuY2Mgd2VyZSBpbnN0YWxsZWQuCisKKwkqIGNwLXNwZXcuYyAoZG9fYWdncik6IE5ldyBmdW5jdGlvbi4gTG9va3MgYWhlYWQgZnJvbSBBR0dSIHRvIHNlZSBpZgorCXdlIGhhdmUgQUdHUiBpZGVudGlmaWVyIHsgb3IgQUdHUiBpZGVudGlmaWVyIDogd2hpY2ggYXJlIGJvdGgKKwlkZWZpbml0aW9ucywgYW5kIHBhc3NlcyB1cCBpZGVudGlmaWVyX0RFRk4gaW5zdGVhZC4gVGhpcyBpcyBpbgorCXN1cHBvcnQgb2YgdGVzdCBtOS5jYy4KKwkoeXlsZXgpOiBhZGQgU1BFV19ERUJVRyBjYXNlIGFmdGVyIEVNUFRZLCBzbyB3ZSBkb24ndCBoYXZlIGdhcHMgaW4KKwl0aGUgZGlzcGxheWVkIHN0cmVhbS4KKwkoeXlsZXgsIGNhc2UgQUdHUik6IGFkZGVkIGNhbGwgdG8gZG9fYWdnci4KKwkoZGVidWdfeXljaGFyKTogYWRkZWQgY2FsbCB0byBkZWJ1Z195eXRyYW5zbGF0ZSBmb3IgcHJvcGVyCisJdHJhbnNsYXRpb25zLgorCisJKiBjcC1wYXJzZS55IChkZWJ1Z195eXRyYW5zbGF0ZSk6IE5ldyBmdW5jdGlvbiB0byBzdXBwb3J0IFNQRVdfREVCVUcKKwl0cmFuc2xhdGlvbnMuIAorCShUWVBFTkFNRV9ERUZOKTogbmV3IHRva2VuLCBUWVBFTkFNRSBzZWVuIGJ5IGRvX2FnZ3IuCisJKElERU5USUZJRVJfREVGTik6IG5ldyB0b2tlbiwgZGl0dG8uCisJKFBUWVBFTkFNRV9ERUZOKTogbmV3IHRva2VuLCBkaXR0by4KKwkoaWRlbnRpZmllcl9kZWZuKTogY29ycmVzcG9uZHMgdG8gaWRlbnRpZmllciwgYnV0IHdoZW4gdGhlCisJaWRlbnRpZmllciBoYXMgYmVlbiBzZWVuIGJ5IGRvX2FnZ3IuCisJKG5hbWVkX2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZV9kZWZuKTogc3BlY2lhbGx5IHJlY29nbml6ZSBhZ2dyCisJaWRlbnRpZmllcl9kZWZuLgorCShuYW1lZF9jbGFzc19oZWFkKTogYWRkIHBhcmFsbGVsIGNsYXVzZXMgY2FsbGluZyB4cmVmX3RhZ19kZWZuIHdoZW4KKwl3ZSBrbm93IHdlJ3JlIGRlZmluaW5nIHRoaXMgYWdnci4KKwkobmFtZWRfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlX2RlZm5fZWl0aGVyKTogZm9yIHdoZW4gd2UgZG9uJ3QgY2FyZQorCWlmIGl0IGlzIGEgZGVmbiBvciBub3QgKHN1Y2ggYXMgdGVtcGxhdGVzKQorCShpZGVudGlmaWVyX2VpdGhlcik6IGRpdHRvLgorCisJKiBjcC10cmVlLmggKHhyZWZfZGVmbl90YWcpOiBOZXcgZGVjbGFyYXRpb24uCisKK1dlZCBEZWMgMTEgMTI6Mzc6NTEgMTk5MSAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCisKKwkqIGNwLXBhcnNlLnkgKGxhYmVsX2NvbG9uKTogTmV3IG5vbnRlcm1pbmFsLCB3aXRoIGFsbCBsYWJlbCBwcmVmaXhlcworCWZyb20gInN0bXQiIG1vdmVkIGhlcmUuCisJKHN0bXQpOiBVc2UgaXQuICBBbHNvIHByb3ZpZGUgdXNlZnVsIG1lc3NhZ2UgZm9yIGxhYmVsIGZvbGxvd2VkIGJ5CisJZW5kIG9mIGJsb2NrIChjbG9zZS1icmFjZSkuCisKKwkqIGNwLWluaXQuYyAoQklWTik6IERlbGV0ZWQgdW51c2VkIHZhcmlhYmxlLgorCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IGRlY2xhcmUgZnVuY3Rpb24KKwlfX2J1aWx0aW5fdmVjX25ldzsgaXQncyBuZXZlciB1c2VkLgorCitXZWQgRGVjIDExIDEwOjU5OjQ4IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB0b3BsZXYuYyAobWFpbik6IENvbXBsZXRlIGxhc3QgY2hhbmdlIGZyb20gUk1TLCB1c2UgdmFyaWFibGUKKwknbGV2ZWwnIHdoaWNoIHVzZWQgdG8gYmUgbmFtZWQgJ2FyZycuCisKKwkqIGdibC1jdG9ycy5oIChET19HTE9CQUxfQ1RPUlNfQk9EWSk6IERvbid0IHJlZmVyZW5jZSBPTl9FWElUIGZvcgorCXRob3NlIHBvb3Igc3lzdGVtcyB3aXRob3V0IGF0ZXhpdCBvciBvbl9leGl0LgorCitXZWQgRGVjIDExIDA5OjA2OjUyIDE5OTEgIEplZmZyZXkgQS4gTGF3ICAobGF3IGF0IHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6CisJV2hlbiBzYXZpbmcvcmVzdG9yaW5nIG9ubHkgMiByZWdpc3RlcnMsIGRvIHNvIHdpdGggdHdvICJtb3ZlbCIKKwlpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBhIHNpbmdsZSAibW92ZW1sIi4gIFRoaXMgcmVzdWx0cyBpbgorCWZhc3RlciBjb2RlIGZvciB0aGUgNjgwMjAgYW5kIGxhdGVyIG1hY2hpbmVzLgorCitXZWQgRGVjIDExIDA2OjQ1OjA4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHgtcm9tcCAoTUFLRSk6IEFkZCBkZWZpbml0aW9uOyB0aGUgc3VwcGxpZWQgYG1ha2UnIGRvZXNuJ3QgZGVmaW5lIGl0LgorCitUdWUgRGVjIDEwIDIyOjE3OjUwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBBbHdheXMgbWFrZSBhIGNvcHkgb2YgSTIncyBwYXR0ZXJuIGlmCisJaXQgd2lsbCBiZSB1c2VkIGluIGEgUEFSQUxMRUwgKGBhZGRlZF9zZXRzXzInIG5vbnplcm8pLgorCisJKiBNYWtlZmlsZS5pbiAoQk9PVF9DRkxBR1MpOiBOZXcgcGFyYW1ldGVyLgorCShib290c3RyYXAqKTogVXNlIGl0LgorCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogU2V0IGRlcHRoIG9mIGxhc3QgaW5zbiwgbm90IGZpcnN0LAorCWludG8gYmFzaWNfYmxvY2tfbG9vcF9kZXB0aC4KKwkocHJvcGFnYXRlX2Jsb2Nrcyk6IFVzZSBjb25zaXN0ZW50bHkgd2l0aCBuZXcgZGVmaW5pdGlvbi4KKworCSogY3NlLmMgKGNzZV9lbmRfb2ZfYmFzaWNfYmxvY2ssIGNzZV9iYXNpY19ibG9jayk6IFJlbW92ZSBwcmV2aW91cworCWNoYW5nZTsgaXQgY2FuIGNhdXNlIGxvb3BzIGZvbGxvd2luZyBhcm91bmQgYnJhbmNoZXMuCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgdmEtaHA5azguaC4KKworVHVlIERlYyAxMCAxNzoyMjowMSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ayouaDogSW5jbHVkZSBzdnIzLmggYXMgdGhlIGRlZmF1bHQuICBtODhrdjQuaCBhbmQgbTg4a2RndXguaAorCWluY2x1ZGUgc3ZyNC5oLiAgT3ZlcnJpZGUgc3ZyWzM0XS5oIGFzIG5lZWRlZC4KKwkqIHQtbTg4aywgdC1tODhrdjQ6IFNwZWNpZnkgRVhUUkFfUEFSVFMuCisKKwkqIG04OGsuYyAodXNlc19hcmdfYXJlYV9wKTogQ2hlY2sgY3VycmVudF9mdW5jdGlvbl92YXJhcmdzLgorCitUdWUgRGVjIDEwIDE1OjQxOjAzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBvc2YtbWFpbi5jICh3aG9sZSBmaWxlKTogRGVsZXRlLCBzaW5jZSB0aGUgY29uc3RydWN0b3Igc3R1ZmYgd2FzCisJbW92ZWQgdG8gZ251bGliMi5jLgorCisJKiBNYWtlZmlsZS5pbiAoY29sbGVjdDIsIGNvbGxlY3QyLm8pOiBDaGFuZ2UgdG8gdXNlIHRoZSBkZWZhdWx0CisJY29tcGlsZXIgdG8gYnVpbGQgY29sbGVjdDIsIGluc3RlYWQgb2YgdGhlIG5ld2x5IGJ1aWx0IEdDQywgc2luY2UKKwlvdGhlcndpc2UsIGNvbGxlY3QyIHdpbGwgY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4gIEFsc28sIHBhc3MKKwlMREZMQUdTIHdoZW4gbGlua2luZy4KKworCSogY29sbGVjdC1vc2YuYyAod3JpdGVfc19maWxlKTogQ2hhbmdlIHRvIHRoZSBuZXcgd2F5IG9mIGRvaW5nCisJY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBvZiBoYXZpbmcgYW4gZW5kIG1hcmtlciBpbnN0ZWFkIG9mIGEKKwljb3VudC4KKworCSogY29sbGVjdC5jIChSRUFMX0FTX1BBVEgsIFJFQUxfTERfUEFUSCwgUkVBTF9OTV9QQVRIKTogTmV3IG1hY3JvcworCXRvIGFsbG93IGNyb3NzIGNvbXBpbGVycyB0byBzcGVjaWZ5IHdoZXJlIHRoZSByZWFsIGxpbmtlciwKKwlhc3NlbWJsZXIsIGFuZCBubSBsaXZlLgorCShOTV9GTEFHUyk6IE5ldyBtYWNybyB0byBhbGxvdyBhIGNvbmZpZ3VyYXRpb24gdG8gY2hhbmdlIHdoYXQgZmxhZ3MKKwlnZXQgcGFzc2VkIHRvIG5tLgorCShhbGxvY2EgZGVmaW5lcyk6IFJlbW92ZSBhbGxvY2EgZGVmaW5lcywgc2luY2UgY29uZmlnLmggcHJvdmlkZXMKKwl0aGVtLgorCSh3cml0ZV9ob29rcyk6IENoYW5nZSB0byB0aGUgbmV3IHdheSBvZiBkb2luZyBjb25zdHJ1Y3RvcnMgYW5kCisJZGVzdHJ1Y3RvcnMgb2YgaGF2aW5nIGFuIGVuZCBtYXJrZXIgaW5zdGVhZCBvZiBhIGNvdW50LiAgQ2FzdCBhbGwKKwlhbGxvY2EgY2FsbHMgdG8gYmUgdGhlIGFwcHJvcHJpYXRlIHBvaW50ZXIgdHlwZS4gIFB1dCBib3RoCisJY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBpbnRvIHRoZSBkYXRhIHNlY3Rpb24sIGJlY2F1c2UgdGhlIE1JUFMKKwl0b29scyBkbyBub3QgbGlrZSBub24taW5zdHJ1Y3Rpb25zIGluIHRoZSAudGV4dCBzZWN0aW9uLgorCisJKiBkZWNyb3NlLmggKEhBVkVfQVRFWElUKTogRGVmaW5lLCBPU0YvMSBoYXMgYXRleGl0LgorCShGVUxMX1BST1RPVFlQRVMsIE5PX0NPTlNUX0lOX1NZU0NBTEwpOiBSZW1vdmUsIG5vIGxvbmdlciB1c2VkLgorCisJKiBlbmNyb3NlLmggKEhBVkVfQVRFWElUKTogRGVmaW5lLCBPU0YvMSBoYXMgYXRleGl0LgorCShGVUxMX1BST1RPVFlQRVMpOiBSZW1vdmUsIG5vIGxvbmdlciB1c2VkLgorCisJKiBpMzg2cm9zZS5oIChIQVZFX0FURVhJVCk6IERlZmluZSwgT1NGLzEgaGFzIGF0ZXhpdC4KKworCSogdC1kZWNyb3NlIChMSUIyRlVOQ1NfRVhUUkEpOiBSZW1vdmUsIG9zZi1tYWluLmMgaXMgbm8gbG9uZ2VyCisJbmVlZGVkLCBzaW5jZSBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIHN1cHBvcnQgbW92ZWQgaW50byBnbnVsaWIyLmMuCisKKwkqIHQtZW5jcm9zZSAoTElCMkZVTkNTX0VYVFJBKTogUmVtb3ZlLCBvc2YtbWFpbi5jIGlzIG5vIGxvbmdlcgorCW5lZWRlZCwgc2luY2UgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciBzdXBwb3J0IG1vdmVkIGludG8gZ251bGliMi5jLgorCisJKiB0LWkzODZyb3NlIChMSUIyRlVOQ1NfRVhUUkEpOiBSZW1vdmUsIG9zZi1tYWluLmMgaXMgbm8gbG9uZ2VyCisJbmVlZGVkLCBzaW5jZSBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIHN1cHBvcnQgbW92ZWQgaW50byBnbnVsaWIyLmMuCisKKwkqIHQtZGVjc3RhdG4gKENDTElCRkxBR1MsIEdOVUxJQjJfQ0ZMQUdTKTogRGVmaW5lIHNvIHRoYXQgZ251bGliMQorCWFuZCBnbnVsaWIyIGFyZSBib3RoIGNvbXBpbGVkIHdpdGggLUcgMCwgaW4gY2FzZSB0aGUgdXNlcnMgY29tcGlsZXMKKwlhbmQgbGlua3MgdGhpcyB3YXkuICBJdCBhbHNvIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBjb25zdHJ1Y3RvcnMgYW5kCisJZGVzdHJ1Y3RvcnMgdGhhdCBjb2xsZWN0MiBwcm9kdWNlcyBhcmUgaW4gdGhlIGJpZyBkYXRhIHNlY3Rpb24sIGJ1dAorCWdudWxpYjIgdGhpbmtzIHRoZXkgYXJlIGluIHRoZSBzbWFsbCBkYXRhIHNlY3Rpb24sIGJlY2F1c2UgaXQgb25seQorCXNlZXMgYSBwb2ludGVyLgorCShsZCk6IEFkZCAtZiB0byByZW1vdmUgb2xkIGxkIGxpbmsgdG8gY29sbGVjdDIsIGlmIGl0IGV4aXN0cy4KKworCSogdC1taXBzIChDQ0xJQkZMQUdTLCBHTlVMSUIyX0NGTEFHUyk6IERlZmluZSBzbyB0aGF0IGdudWxpYjEKKwlhbmQgZ251bGliMiBhcmUgYm90aCBjb21waWxlZCB3aXRoIC1HIDAsIGluIGNhc2UgdGhlIHVzZXJzIGNvbXBpbGVzCisJYW5kIGxpbmtzIHRoaXMgd2F5LiAgSXQgYWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgY29uc3RydWN0b3JzIGFuZAorCWRlc3RydWN0b3JzIHRoYXQgY29sbGVjdDIgcHJvZHVjZXMgYXJlIGluIHRoZSBiaWcgZGF0YSBzZWN0aW9uLCBidXQKKwlnbnVsaWIyIHRoaW5rcyB0aGV5IGFyZSBpbiB0aGUgc21hbGwgZGF0YSBzZWN0aW9uLCBiZWNhdXNlIGl0IG9ubHkKKwlzZWVzIGEgcG9pbnRlci4KKwkobGQpOiBBZGQgcnVsZSB0byBsaW5rIGNvbGxlY3QyIHRvIGxkLgorCShFWFRSQV9QQVNTRVMpOiBCdWlsZCBjb2xsZWN0MiAoYWthIGxkKS4KKworCSogeG0tbWlwcy5oIChhbGxvY2EpOiBJZiBub3QgR05VIEMsIGRlY2xhcmUgYWxsb2NhIHRvIGJlIGNoYXIgKi4KKworCSogbWlwcy10ZmlsZS5jIChhZGRfYXV4X3N5bV90aXIpOiBNb3ZlIGNvZGUgdG8gcmVjb3JkIGJpdGZpZWxkIHNpemUsCisJc28gdGhhdCBpdCBhZ3JlZXMgd2l0aCBNSVBTIEVDT0ZGIHByYWN0aWNlLCByYXRoZXIgdGhhbiB0aGUKKwlkb2N1bWVudGF0aW9uLCB3aGljaCBhZmZlY3RzIGVudW0gYml0ZmllbGRzLiAgQ2hhbmdlcyBmcm9tIFBlcgorCUJvdGhuZXIuCisKK1R1ZSBEZWMgMTAgMTQ6MTA6MTAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnYmwtY3RvcnMuaCAoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBHZXQgcmlkIG9mIF9fcmV2ZXJzZV9vcmRlciwgZXRjLgorCSogZ251bGliMi5jIChfX2RvX2dsb2JhbF9kdG9ycyk6IFJlbW92ZSAmIGJlZm9yZSBhcnJheXMuCisKKwkqIGNvbmZpZ3VyZTogU2V0IGEgZGVmYXVsdCB2YWx1ZSBmb3IgeG1fZmlsZS4KKwlSZW1vdmUgcmVkdW5kYW50IGRlZmF1bHRpbmcgb2YgY3B1X3R5cGUuCisKKwkqIHN2cjQuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSk6IE91dHB1dCBpbnRlcm5hbCBsYWJlbCBwcm9wZXJseS4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fYXJnc19pbmZvLgorCSogb3V0cHV0Lmg6IERlY2xhcmUgdGhhdCB2YXIuCisJKiB0cmVlLmggKEJVSUxUSU5fQVJHU19JTkZPKTogUmVuYW1lZCBmcm9tIEJVSUxUX0lOX1ZBUkFSR1MuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogSW1wbGVtZW50IF9fYnVpbHRpbl9hcmdzX2luZm8uCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWNsYXJlIGl0LgorCSogdmEtaTg2MC5oOiBVc2UgaXQuCisJQWxzbyB1cGRhdGUgb3JkZXIgb2YgZWxlbWVudHMgaW4gc3RydWN0IF9fdmFfY3RsLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEVsaW1pbmF0ZSAtZ3NkYiBhbmQgLWdkYnguCisJQ2xlYW4gdXAgc2V0dGluZyBvZiB1c2VfZ2RiX2RieF9leHRlbnNpb25zLgorCitUdWUgRGVjIDEwIDEwOjMzOjU4IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBnZW4tcnR4KQorCisJKiBzdnI0LmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUpOiBVc2UgYW4gaW50ZXJuYWwgbGFiZWwuCisKK1R1ZSBEZWMgMTAgMDc6MTI6MjggMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzQHJhaWQpCisKKwkqIE1ha2VmaWxlLmluIChjcnRiZWdpbi5vLCBjcnRlbmQubyk6IGNyc3R1ZmYuYyBpcyBpbiAkKHNyY2RpcikuCisKK1R1ZSBEZWMgMTAgMDY6NTY6MjYgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGtlcHRfbGV2ZWxfcCk6IE5ldyBmdW5jdGlvbiwgYm9ycm93ZWQgZnJvbSBjLWRlY2wuYy4KKwkqIGNwLXBhcnNlLnkgKGNvbXBzdG10KTogQ2FsbCBpdC4KKworTW9uIERlYyAgOSAxODozNzozMiAxOTkxICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKKworCSogY3AtZGVjbC5jIChncm9rX2VudW1fZGVjbHMpOiBEb24ndCBnaXZlIHdhcm5pbmcgZm9yIGNsYXNzLWxvY2FsCisJZW51bSB0eXBlczsgdGhpcyBpcyBhIHBlcmZlY3RseSByZWFzb25hYmxlIHVzYWdlLgorCitNb24gRGVjICA5IDEyOjIzOjQ4IDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogdG9wbGV2LmMgKG1haW4pOiAgQ2hlY2sgdGhhdCBubyBleHRyYSBjaGFycyBmb2xsb3cgdGhlIGxldmVsICMKKwlpbiBhIC1nTk5OIG9wdGlvbi4gIEFsc28gY2hlY2sgdGhhdCB0aGUgZGVidWdnaW5nIGxldmVsIHJlcXVlc3RlZAorCWlzIGJldHdlZW4gMCBhbmQgMyAoaW5jbHVzaXZlKS4KKworTW9uIERlYyAgOSAyMDozNDo0OCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogRG9uJ3QgY3Jhc2ggaWYgYGxpbmUnIGlzIHplcm8uCisJKHNjaGVkdWxlX2luc25zKTogSW5pdGlhbGl6ZSBsaW5lX25vdGVfaGVhZC4KKworTW9uIERlYyAgOSAxNTozMTo0NiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jIChwc2V1ZG9fb3BzIGFycmF5KTogQ29ycmVjdGx5IHNpemUgdGhlIC5zdGFicyBhbmQKKwkuc3RhYm4gZWxlbWVudHMuCisKKwkqIG1pcHMuYyAoZnVuY3Rpb25fcHJvbG9ndWUsIGZ1bmN0aW9uX2VwaWxvZ3VlKTogVXNlIGFzc2VtYmxlX25hbWUKKwl0byBwcmludCB0aGUgY3VycmVudCBmdW5jdGlvbiwgaW5zdGVhZCBvZiBmcHJpbnRmLCBpbiBjYXNlIHRoZXJlIGlzCisJYSAgbGVhZGluZyAnKicuCisKKwkqIG1pcHMtbmV3cy5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBuZXdzMzcwMCwgbm90IG5ld3M3MzAwLgorCisJKiBtaXBzLm1kIChhc2hsZGkzX2ludGVybmFsMyk6IEZpeCB0eXBvcy4KKwkoYXNocmRpM19pbnRlcm5hbDMpOiBEaXR0by4KKwkobHNobGRpM19pbnRlcm5hbDMpOiBEaXR0by4KKworTW9uIERlYyAgOSAxMTo0OTo1MiAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBsb25nbG9uZy5oIChfX2EyOWtfXyB1ZGl2X3Fybm5kKTogQ2hhbmdlICJxIiB0byAiMSIgZm9yIG9wZXJhbmQKKwkyIGNvbnN0cmFpbnQuCisKK01vbiBEZWMgIDkgMTE6MjI6NTggMTk5MSAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBBIG1ldGhvZCBtaWdodCBoYXZlIHR5cGUKKwlwb2ludGVyLXRvLW1ldGhvZCBhcyB3ZWxsLiAgRG9uJ3QgYnVpbGQgYW4gT0ZGU0VUX1JFRiBmb3IgYW55CisJImZ1bmN0aW9uIiB0aGF0IGFscmVhZHkgaGFzIHBvaW50ZXIgdHlwZS4gIE9ubHkgdXNlCisJREVDTF9DTEFTU19DT05URVhUIHRvIGZpbmQgdHlwZSBvZiBgdGhpcycgZm9yIEZVTkNUSU9OX0RFQ0xzOyBmb3IKKwltZXRob2QgcG9pbnRlciBleHByZXNzaW9ucywgbG9vayB1cCB0aGUgYmFzZXR5cGUgb2YgdGhlIG1ldGhvZCB0eXBlLgorCShidWlsZF91bmFyeV9vcCk6IEZpeCBjb21tZW50IGluIHR5cG8uCisKKwkqIGNwLXRyZWUuYzogRml4IHR5cG8gaW4gY29tbWVudCBhdCBzdGFydCBvZiBmaWxlLgorCitNb24gRGVjICA5IDA3OjE3OjEzIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFdoZW4gYSBqdW1wIGlzIGNvbnZlcnRlZCB0byB1bmNvbmRpdGlvbmFsLCAKKwlkZWxldGUgdGhlIGRlYWQgY29kZSwgYnV0IGxlYXZlIHRoZSBub3Rlcy4KKwkoY3NlX2Jhc2ljX2Jsb2NrLCBjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogU29tZSB1bmNvbmRpdGlvbmFsIGp1bXBzIGFyZQorCXBhcnQgb2YgdGhlIGJhc2ljIGJsb2NrLgorCShjc2VfYmFzaWNfYmxvY2spOiBBZGQgbWlzc2luZyBhcmcgdG8gY3NlX2VuZF9vZl9iYXNpY19ibG9jayBjYWxsLgorCQorTW9uIERlYyAgOSAwNzoxNjoxNSAxOTkxICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIHN5cy10eXBlcy5oOiAgTmV3IGZpbGUuCisJKiBzeXMtcHJvdG9zLmg6ICBOZXcgZmlsZS4KKwkqIFNZU0NBTExTLmM6IEp1c3QgaW5jbHVkZSB0aG9zZSBmaWxlcy4KKworCSogcHJvdG9pemUuYyAoVk9MQVRJTEUpOiAgRGVmaW5lIHRoaXMgc3ltYm9sIGNvbmRpdGlvbmFsbHkgc28gdGhhdAorCWl0IGNhbiBiZSB1c2VkIHRvIGRlY2xhcmUgR05VIGB2b2xhdGlsZScgZnVuY3Rpb25zLgorCShhYm9ydCk6ICBBZGRlZCBWT0xBVElMRSBleHRlcm4gZGVjbGFyYXRpb24gKGJ1dCBub3QgaWYgaXQncyBhIG1hY3JvKS4KKwkoa2lsbCwgZm9yayk6ICBBZGRlZCBleHRlcm4gZGVjbGFyYXRpb24uCisJKHN1YnN0cik6IERlY2xhcmUgYyBhcyBpbnQuCisKKwkqIGdibC1jdG9ycy5oOiBOZXcgZmlsZS4KKwkqIGNydHN0dWZmLmM6IEluY2x1ZGUgZ2JsLWN0b3JzLmguCisJKElOSVRfU0VDVElPTl9BU01fT1ApOiAgRGVsZXRlIGRlZmF1bHQgZGVmaW5pdGlvbi4KKwlPbmx5IGNvbXBpbGUgLmluaXQgc2VjdGlvbiBjb2RlIGlmIElOSVRfU0VDVElPTl9BU01fT1AgaXMgZGVmaW5lZC4KKwkocG9pbnRlcik6ICBHbG9iYWxseSBjaGFuZ2VkIHRvIGBmdW5jX3B0cicuCisJKiBNYWtlZmlsZS5pbiAoY3J0YmVnaW4ubywgY3J0ZW5kLm8sIGdudWxpYjIpOiBEZXBlbmQgb24gZ2JsLWN0b3JzLmguCisJKiBnbnVsaWIyLmM6ICBBZGRlZCBkZWZpbml0aW9uIG9mIF9fYnVpbHRpbl9zYXZlcmVncyBmb3IgaTg2MC9zdnI0CisJYW5kIGZpeGVkIHVwIGRlZmluaXRpb24gb2YgX19idWlsdGluX3NhdmVyZWdzIGZvciBpODYwL25vbi1zdnI0LgorCShfX2JiX2F2b2lkX3dhcm5pbmcpOiAgQWRkZWQgZXhwbGljaXQgcmV0dXJuIHR5cGUuCisJKF9fYnVpbHRpbl9uZXcsIF9fYnVpbHRpbl92ZWNfbmV3LCBfX2J1aWx0aW5fZGVsZXRlLAorCV9fYnVpbHRpbl92ZWNfZGVsZXRlKTogVXNlIGB2b2lkKicgd2hlcmUgYXBwcm9wcmlhdGUuCisJKGV4aXQpOiBDaGFuZ2UgY29uZGl0aW9uYWwgdG8gT05fRVhJVC4gIE1ha2UgZHVtbXkgaWYgbm8gcmVhbCBleGl0LgorCUluY2x1ZGUgZ2JsLWN0b3JzLmguCisJKF9fbWFpbik6IENoYW5nZSBjb25kaXRpb25hbCB0byBJTklUX1NFQ1RJT05fQVNNX09QLgorCShfX2RvX2dsb2JhbF9jdG9ycyk6IENvbmRpdGlvbmFsIG9uIElOSVRfU0VDVElPTl9BU01fT1AuCisJVXNlIERPX0dMT0JBTF9DVE9SU19CT0RZIGZvciB0aGUgZ3V0cy4KKwlJbmNsdWRlIGdibC1jdG9ycy5oLgorCitNb24gRGVjICA5IDAxOjA3OjU2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jLnN2cjQ6IERvbid0IGNoYW5nZSAjaWRlbnQgb3IgYXNzZXJ0aW9uIHRlc3RzLgorCURvbid0IGluc3RhbGwgaW5saW5lLmguCisKKwkqIGMtY29tbW9uLmMgKGdldF9kaXJlY3RpdmVfbGluZSk6IERlY2xhcmUgYyBhcyBpbnQuCisKKwkqIGNvbmZpZ3VyZTogQ3JlYXRlIGFkZGl0aW9uYWwgZmlsZSB0Y29uZmlnLmguCisJKiBwcm90b2l6ZS5jOiBJbmNsdWRlIHRoYXQsIG5vdCB0bS5oLgorCSogTWFrZWZpbGUuaW4gKHByb3RvaXplLm8sIHVucHJvdG9pemUubyk6IERlcGVuZCBvbiB0Y29uZmlnLmguCisKKwkqIHN2cjQuaCAoSEFWRV9BVEVYSVQpOiBEZWZpbmVkLgorCSogZ251bGliMi5jIChfbWFpbiwgZXhpdCk6IFVzZSBIQVZFX0FURVhJVCB0byBjb250cm9sIHVzZSBvZiBhdGV4aXQuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IE91dHB1dCBmaXJzdCBhbmQgbGFzdCBub3RlIGluIGEgc2VyaWVzLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfb2JqY19tZXRob2RfY2FsbCk6CisJTmV3IGFyZyBMT09LVVBfT0JKRUNULgorCShidWlsZF9tZXNzYWdlX2V4cHIpOiBQYXNzIFJFQ0VJVkVSIGZvciBMT09LVVBfT0JKRUNULgorCVBhc3MgUkVDRUlWRVIgb3Igc2VsZl9kZWNsIGFzIE9CSkVDVC4KKworCSogdW54Mzg2LmggKFBSSU5UX0lNTUVEX1BSRUZJWCwgUFJJTlRfT0ZGU0VUX1BSRUZJWCk6IERlbGV0ZWQuCisKKwkqIHJ0bC5oOiBVbmRlZiBGTE9BVC4KKworCSogc3ZyNC5oIChBU01fREVDTEFSRV9PQkpFQ1RfTkFNRSwgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSk6CisJRml4IHR5cG8uCisKK1N1biBEZWMgIDggMjE6NDY6NTEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwcm90b2l6ZS5jIChtYWluKTogRGVjbGFyZSBgdmFsdWUnLgorCShhYnNwYXRoKTogRGVjbGFyZSBlbmRwLiAgRGVjbGFyZSBhbmQgc2V0IG91dHAgYW5kIGlucC4KKworCSogY3AtZGVjbC5jIChzaWdzZWd2KTogRnVuY3Rpb24gZGVsZXRlZC4KKwkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEb24ndCB1c2UgaXQuCisJQWxzbyBkb24ndCBpbmNsdWRlIHNpZ25hbC5oLgorCisJKiB0LXN2cjQ6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpMzg2LSotc3lzdjQqLCBpODYwLSotc3lzdjQqKTogVXNlIHRoYXQgZmlsZS4KKworU3VuIERlYyAgOCAxMjowMTozNiAxOTkxICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogZml4aW5jLnN2cjQ6IE5ldyBmaWxlLgorCisJKiBmaW5hbC5jIChwcm9maWxlX2Z1bmN0aW9uKTogU3BlY2lmeSByZXR1cm4gdHlwZS4KKwkoZ2V0X2F0dHJfbGVuZ3RoKTogIEFkZGVkIGEgcmV0dXJuIHN0YXRlbWVudCB0byBwcmV2ZW50IHdhcm5pbmdzLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiAgU3dpdGNoIHRvIC50ZXh0IHNlY3Rpb24gYmVmb3JlIG91dHB1dAorCW9mIGp1bXB0YWJsZSBsYWJsZSAoaWYgcmVxdWVzdGVkIGJ5IEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTikuCisJRG9uJ3Qgc3dpdGNoIHNlY3Rpb25zIGFnYWluIGFmdGVyIHRoZSBsYWJlbC4KKworCSogY29uZmlndXJlIChpMzg2LSotc3lzdiopOiAgQ29uZmlndXJhdGlvbiBkZWxldGVkLgorCShpMzg2LSotc3lzdjMsIGkzODYtKi1zeXN2NCwgaTg2MC0qLXN5c3YzLCBpODYwLSotc3lzdjQpOgorCUFkZGVkIGFzc2lnbm1lbnQgdG8gYHRtYWtlX2ZpbGUnICh0byBwaWNrIHVwIGRlZiBvZiBFWFRSQV9QQVJUUykuCisJKGk4NjAtKi1zeXN2MywgaTg2MC0qLXN5c3Y0KTogIEFkZGVkIGFzc2lnbm1lbnQgdG8gYHhtYWtlLWZpbGUnLgorCShpODYwLSotc3lzdjMpOiAgRGVsZXRlZCBib2d1cyBHQVMgcmVsYXRlZCBzdHVmZi4KKworCSogY29tYmluZS5jIChjb21iaW5hYmxlX2kzcGF0KTogIEFkZGVkIGV4cGxpY2l0IHJldHVybiB0eXBlLgorCisJKiBpODYwLmggKFRBUkdFVF9GUFUpOiAgRGVsZXRlZCB0aGlzIHRhcmdldCBmbGFnLiAgaTg2MCBmcHUgaXMgb24gY2hpcC4KKwkoVEFSR0VUX1hQKTogIE5ldyB0YXJnZXQgZmxhZyBmb3IgWFIgYW5kIFhQIG1vZGVscy4KKwkoVEFSR0VUX0ZMQUdTLCBIQVJEX1JFR05PX01PREVfT0spOiAgQWRqdXN0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisJKFJFR19BTExPQ19PUkRFUik6IFVzZSBmaXJzdCB0aGUgcmVncyBsZXNzIGxpa2VseSBmb3Igb3RoZXIgcHVycG9zZXMuCisJKExJVEVSQUxfQ09NUEFSRV9CRVRURVJfVU5TSUdORUQpOiAgRGVmaW5lZC4KKwkoQlJBTkNIX0NPU1QpOiBEZWZpbmVkLgorCShDQ19PTkxZXyopOiAgRGVsZXRlZCB0aGVzZSBvYnNvbGV0ZSBkZWZpbmVzLgorCShDQ19ORUdBVEVEKTogIEFkZGVkIGZvciBJRUVFIGJlaGF2aW9yIHdpdGggY21wZ2VzZiBhbmQgY21wbGVzZi4KKwkoQVNNX09VVFBVVF9DQVNFX0xBQkVMKToKKwlBZGRlZCAuYWxpZ24gc28gYXNzZW1ibGVyIGRvZXNuJ3QgYmFyZiBvbiBzdWJzZXF1ZW50IC5sb25nKHMpLgorCShGTE9BVF9UWVBFX1ZBTFVFLCBJTlRJRlksIEZMT0FUSUZZLCBGTE9BVF9BUkdfVFlQRSk6CisJQWRkZWQgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIGJ1aWxkIGEgdXNlYWJsZSBnbnVsaWIxIGxpYnJhcnkuCisKKwkqIGk4NjAubWQ6ICBSZW1vdmVkIGFsbCByZWZlcmVuY2VzIHRvIENDX09OTFlfKiBzeW1ib2xzLgorCShjbXBsZWRmLCBjbXBnZWRmKTogIEFkanVzdGVkIGFzc2VtYmxlciBjb2RlICBhcyBzdWdnZXN0ZWQKKwlieSBpODYwIG1hbnVhbHMsIGZvciBJRUVFIHJlc3VsdHMuCisJKGNicmFuY2gsIGZsaXBwZWRfY2JyYW5jaCwgaW52ZXJzZV9jYnJhbmNoLCBmbGlwcGVkX2ludmVyc2VfY2JyYW5jaCk6CisJQ2hlY2sgZm9yIENDX05FR0FURUQuCisJKGJ0ZSwgYnRuZSBwYXR0ZXJucyk6IENvbXBsZXRlIHJld3JpdGUuCisJKGFub255bW91cyBzaWduLWV4dGVuZCBwYXR0ZXJucyk6IE1vdmVkIGJlZm9yZSB0aGUgbmFtZWQgcGF0dGVybnMuCisKKwkqIGk4NjAubWQgKGFkZHNpMywgc3Vic2kzKTogIERpc3BhcmFnZWQgYWx0ZXJuYXRpdmVzIHdpdGggYSBmbG9hdGluZy0KKwlwb2ludGVyIGlucHV0IHJlZ2lzdGVyIHRvIGF2b2lkIGNvbXBsaWNhdGVkIHJlbG9hZGluZyBwcm9ibGVtLgorCShuZWdzaTIpOiAgRGVsZXRlZCBib2d1cyBgSScgY29uc3RyYWludCBvbiBvcGVyYW5kIDEuCisJKGRpdmRmMywgZGl2c2YzKTogIEFkZGVkIGFkZGl0aW9uYWwgY29udGludWF0aW9uIGNoYXJhY3RlcnMKKwluZWVkZWQgdG8gbWFrZSBsaW5lcyBhY2NlcHRhYmxlIHRvIGByZWFkX3J0eCcgaW4gdGhlIGdlbiogcHJvZ3JhbXMuCisKKwkqIGk4NjAuYzogIEluY2x1ZGUgImZsYWdzLmgiIHRvIGdldCBhY2Nlc3MgdG8gYG9wdGltaXplJyBmbGFnLgorCShsZWFmX2Z1bmN0aW9uX3ApOiAgQWRkZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorCSh6ZXJvX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKG11c3RfcHJlc2VydmVfcjEsIG11c3RfcHJlc2VydmVfYnl0ZXMpOiBOZXcgdmFyaWFibGVzLgorCShmdW5jdGlvbl9wcm9sb2d1ZSwgZnVuY3Rpb25fZXBpbG9ndWUpOiAKKwlTdXBwb3J0IHRyZWF0bWVudCBvZiByZXR1cm4tYWRkcmVzcyByZWcgKHIxKSBpbiBsZWFmIGZ1bmN0aW9ucy4KKworCSogaTg2MHY0LmggKENQUF9QUkVERUZJTkVTKTogIEFkZCBwcmUtYXNzZXJ0aW9ucyBmb3IgaTg2MC9zdnI0LgorCShDUFBfU1BFQyk6ICBEZWxldGVkIGRlZmluaXRpb24uCisJKFRZUEVfT1BFUkFORF9GTVQpOiAgTmV3IGRlZmluaXRpb24uCisJKEFTTV9PVVRQVVRfRlVOQ1RJT05fUFJFRklYKTogICN1bmRlZiBiZWZvcmUgZGVmaW5pbmcuCisJKEFTTV9PVVRQVVRfRVBJTE9HVUVfU1VGRklYKTogIERlbGV0ZWQgb2Jzb2xldGUgbWFjcm8uCisJKENUT1JTX1NFQ1RJT05fQVNNX09QLCBEVE9SU19TRUNUSU9OX0FTTV9PUCwKKwlUREVTQ19TRUNUSU9OX0FTTV9PUCwgRVhUUkFfU0VDVElPTlMsIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TLAorCVRERVNDX1NFQ1RJT05fRlVOQ1RJT04pOiAgRGVmaW5pdGlvbnMgYWRkZWQuCisKKwkqIGk4NjB2My5oOiBDb21wbGV0ZSByZXdyaXRlLiAgVXNlcyBzdnIzLmguCisKKwkqIGkzODZ2NC5oOiAgRG9uJ3QgaW5jbHVkZSBpMzg2di5oLiAgSW5jbHVkZSBpMzg2LmggaW5zdGVhZC4KKwkoU0RCX0RFQlVHR0lOR19JTkZPKTogICN1bmRlZiBkZWxldGVkLgorCShBU01fT1VUUFVUX0RXQVJGX1NUUklORyk6ICBBZGRlZCBkZWZpbml0aW9uLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiAgUGFzcyAtZyogb3B0aW9ucyB0byBjcHAuCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiAgRG9uJ3QgZHVwbGljYXRlIC1BIG9wdGlvbnMgaW4gQ1BQX1BSRURFRklORVMuCisKKwkqIGdudWxpYjIuYyAoZXhpdCwgX19tYWluLCBfX2RvX2dsb2JhbF9kdG9ycywgX19kb19nbG9iYWxfY3RvcnMpOgorCU5ldyBmdW5jdGlvbnMuCisKKwkqIGkzODYuaCAoUFJJTlRfSU1NRURfUFJFRklYLCBQUklOVF9PRkZTRVRfUFJFRklYKToKKwlEZWZpbmUgaGVyZSwgYW5kIHVzZSBJUC4KKworCSogaTM4Ni5oOiBEb24ndCBpbmNsdWRlIHN5bXMuaCBvciBkZWZpbmUgRklMTk1MRU4uCisKKwkqIHgtaTg2MHYzLCB4LWk4NjB2NDogTmV3IGZpbGVzLgorCSogeC1pMzg2djQgKENDTElCRkxBR1MsIEdDQ19DRkxBR1MpOiAgQWRkZWQgZGVmaW5pdGlvbnMuCisKKwkqIHhtLXN2cjMuaDogIE5ldyBmaWxlLgorCSogeG0taTg2djMuaCwgeG0taTg2djQuaCwgeG0taTM4NnYuaDogUmV3cml0dGVuLgorCSogeG0taTM4djQuaDogTmV3IGZpbGUuCisKKwkqIHN2cjQuaCAoTElCX1NQRUMpOiAgTWFrZSBjcnRlbmQubyBjb21lIGJlZm9yZSBhbnkgKmNydG4ubworCWZpbGUgKHRvIGF2b2lkIGhpdHRpbmcgcmV0dXJuIHdpdGhvdXQgc3RhbmRhcmQgZXBpbG9ndWUgaW4gLmluaXQgY29kZSkuCisJKElOSVRfU0VDVElPTl9BU01fT1ApOiAgQWRkZWQgZGVmaW5pdGlvbiBmb3IgY3J0c3R1ZmYuYyAoYW5kIGZyaWVuZHMpLgorCShDVE9SU19TRUNUSU9OX0ZVTkNUSU9OLCBEVE9SU19TRUNUSU9OX0ZVTkNUSU9OKToKKwlBZGp1c3RlZCBpbmRlbnRhdGlvbiBvZiBjb250aW51YXRpb25zIHRvIG1hdGNoIHRob3NlIGluIHJlc3Qgb2YgZmlsZS4KKworCSogc3ZyMy5oIChDUFBfUFJFREVGSU5FUyk6ICBEb24ndCBkZWZpbmUgdGhpcyBoZXJlLgorCShBU01fRklMRV9TVEFSVF8xKTogIFByb3ZpZGUgbm8tb3AgZGVmYXVsdCBkZWZpbml0aW9uLgorCShBU01fT1VUUFVUX0NPTU1PTiwgQVNNX09VVFBVVF9MT0NBTCk6ICBVbmRlZiB0aGVzZSBiZWZvcmUgZGVmaW5pbmcuCisJKElOVF9BU01fT1AsIFVTRV9DT05TVF9TRUNUSU9OLCBJTklUX1NFQ1RJT05fQVNNX09QLAorCUNPTlNUX1NFQ1RJT05fQVNNX09QLCBDVE9SU19TRUNUSU9OX0FTTV9PUCwgRFRPUlNfU0VDVElPTl9BU01fT1AsCisJRVhUUkFfU0VDVElPTlMsIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TLCBSRUFET05MWV9EQVRBX1NFQ1RJT04sCisJQ09OU1RfU0VDVElPTl9GVU5DVElPTiwgQ1RPUlNfU0VDVElPTl9GVU5DVElPTiwgRFRPUlNfU0VDVElPTl9GVU5DVElPTiwKKwlBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IsIFNFTEVDVF9TRUNUSU9OLAorCVNFTEVDVF9SVFhfU0VDVElPTik6ICBEZWZpbml0aW9ucyBhZGRlZC4KKworU3VuIERlYyAgOCAxNToyNzo1NiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKyAgIAkqIG5leHQuYyAoaGFuZGxlX3ByYWdtYSk6IFVzZSBnZXRfZGlyZWN0aXZlX2xpbmUuCisKKwkqIGdudWxpYjIuYyAoX19kb19nbG9iYWxfZHRvcnMsIF9fZG9fZ2xvYmFsX2N0b3JzKToKKwlSZW1vdmUgdGhlIGZlYXR1cmUgdG8gY29udHJvbCB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uLgorCVRoaXMgaXMgbm90IGEgY2xlYW4gc29sdXRpb24gdG8gdGhlIG92ZXJhbGwgcHJvYmxlbS4KKworU3VuIERlYyAgOCAxNDo0Nzo0NCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jICh0b3BsZXZlbCwgYWRkX2xvY2FsX3N5bWJvbCwgcGFyc2Vfc3RhYnNfY29tbW9uKToKKwlNb3JlIGNoYW5nZXMgZm9yIHNtdWdnbGluZyBzdGFicyB0aHJvdWdoIGZyb20gbWVpc3NuZXJAb3NmLm9yZyBhbmQKKwlib3RobmVyQGN5Z251cy5jb20uCisKKwkqIG1pcHMuaCAoaWdub3JlX2xpbmVfbnVtYmVyKTogTmV3IGdsb2JhbCwgc2V0IHdoZW4gd2UgbXVzdCBhdm9pZAorCXB1dHRpbmcgb3V0IGEgTUlQUyBFQ09GRiAubG9jIGJlY2F1c2UgdGhlIGZpbGUgY2hhbmdlZCBpbnNpZGUgb2YgYQorCWZ1bmN0aW9uLCBhbmQgd2UgYXJlIGFsc28gcHV0dGluZyBvdXQgc3RhYnMsIHdoaWNoIGNhbiBoYW5kbGUgdGhpcy4KKwkoQVNNX1NUQUJTX09QLCBBU01fU1RBQk5fT1AsIEFTTV9TVEFCRF9PUCk6IERlZmluZSB0byBwdXQgYSBjb21tZW50CisJaW4gZnJvbnQgb2YgdGhlIHBzZXVkbyBvcCwgaWYgd2UgYXJlIGVuY2Fwc3VsYXRpbmcgc3RhYnMgaW4gTUlQUworCUVDT0ZGLgorCShBU01fT1VUUFVUX1NPVVJDRV9GSUxFTkFNRSk6IENoYW5nZSB0byBjYWxsIG1pcHNfb3V0cHV0X2ZpbGVuYW1lLgorCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogY2hhbmdlIHRvIGNhbGwgbWlwc19vdXRwdXRfbGluZW5vLgorCisJKiBtaXBzLmMgKHRvcGxldmVsKTogSW5jbHVkZSBzdGFiLmggZm9yIGVuY2Fwc3VsYXRpbmcgc3RhYnMuCisJKGlnbm9yZV9saW5lX251bWJlcik6IE5ldyBnbG9iYWwgdmFyaWFibGUuCisJKHJlZ19vcl8wX29wZXJhbmQpOiBDYWxsIHJlZ2lzdGVyX29wZXJhbmQgZm9yIFJFRydzIGFzIHdlbGwgYXMKKwlTVUJSRUcncy4KKwkob3ZlcnJpZGVfb3B0aW9uKTogRG9uJ3QgYWxsb3cgaW50cyBpbiBGUCByZWdpc3RlcnMgdW5sZXNzIC1tZGVidWdoLgorCShtaXBzX291dHB1dF9maWxlbmFtZSk6IE5ldyBmdW5jdGlvbiB0byB3cml0ZSB0aGUgZmlsZW5hbWUgdG8gdGhlCisJYXNzZW1ibGVyIG91dHB1dC4gIEFkZCBzcGVjaWFsIHN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpbmcgLnN0YWJzIGluCisJTUlQUyBFQ09GRi4KKwkobWlwc19vdXRwdXRfbGluZW5vKTogTmV3IGZ1bmN0aW9uIHRvIHdyaXRlIHRoZSBsaW5lIG51bWJlciB0byB0aGUKKwlhc3NlbWJsZXIgb3V0cHV0LiAgQWRkIHNwZWNpYWwgc3VwcG9ydCBmb3IgZW5jYXBzdWxhdGluZyAuc3RhYnMgaW4KKwlNSVBTIEVDT0ZGLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IENsZWFyIGlnbm9yZV9saW5lX251bWJlci4KKworCSogbWlwcy5tZCAoZml4X3RydW5jPz9zaV9vcHQsIG1vdj8/X2ludGVybmFsKTogQ2hhbmdlICchJyBjb25zdHJhaW50CisJYmFjayB0byAnKicuCisKK1NhdCBEZWMgIDcgMTY6NTg6NTcgMTk5MSAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCisKKwkqIGNwLXNwZXcuYyAoc2Nhbl90b2tlbnMpOiBTdG9wIHNjYW5uaW5nIGF0IHNlbWktY29sb24uCisKKwkqIGNwLXNwZXcuYzogTWFkZSBTUEVXX0RFQlVHIGNvZGUgdXNlYWJsZToKKwkoeXlsZXgpOiBVc2Ugc3RkZXJyIGluIFNQRVdfREVCVUcgY29kZS4KKwkoeXl0YWdzKTogRGVsZXRlZCB0YWJsZS4KKwkoZGVidWdfeXljaGFyKTogUHJpbnQgdG8gc3RkZXJyLCBhbmQgZG9uJ3QgdHJ5IGZpbmRpbmcgdHJhbnNsYXRpb25zCisJZm9yIHZhbHVlcyBvdmVyIDI1Ni4KKworCSogY3AtY2xhc3MuYyAocHVzaF9sYW5nX2NvbnRleHQpOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsKTogVW5kbyBgcHVzaGNsYXNzJyBkb25lIGluIHN0YXJ0X2RlY2wgZm9yCisJdG9wLWxldmVsIGRlY2xzIG9mIG1ldGhvZHMuCisKKwkqIGNwLWxleC5jIChyZXN0b3JlX3BlbmRpbmdfaW5wdXQpOiBDYXN0IDAgdG8gcG9pbnRlciB0eXBlIGZvcgorCW9ic3RhY2tfZnJlZS4KKworCSogY3AtcHQuYyAoZG9fcGVuZGluZ19leHBhbnNpb25zKTogVXNlIFRSRUVfVVNFRCBpbnN0ZWFkIG9mCisJVFJFRV9BRERSRVNTQUJMRSBmb3IgZnVuY3Rpb25zLiAgUHV0IGluIGNvbW1lbnRzIGV4cGxhaW5pbmcgd2h5IHdlCisJY29tcGlsZSB1bnVzZWQgbWV0aG9kcyBvZiBjbGFzc2VzIHRoYXQgYXJlIGludGVyZmFjZS11bmtub3duOiB0aGUKKwlmaWxlIGluaXRpYWxpemVyL2NsZWFudXAgZnVuY3Rpb25zIG1pZ2h0IG5lZWQgdGhlbS4KKwkobXVtYmxlZnJvdHopOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9uOyB0aGlzIGNvZGUgaXMgaW4gY3AtcGFyc2UueS4KKworU2F0IERlYyAgNyAxNTo0Njo1NSAxOTkxICBUaW1vdGh5IE1vb3JlIChtb29yZUBjcy51dGFoLmVkdSkKKworCSogZnVuY3Rpb24uYzogSGFuZGxlIEFSR1NfR1JPV19ET1dOV0FSRC4KKwkocGFkX2JlbG93LCBwYWRfdG9fYXJnX2FsaWdubWVudCwgcm91bmRfZG93bik6IE5ldyBzdWJyb3V0aW5lcy4KKwkobG9jYXRlX2FuZF9wYWRfcGFybSk6IFVzZSB0aGVtLCBmb3IgdGhlIGV4aXN0aW5nIGNhc2UuCisJQWxzbyBoYW5kbGUgdGhlIEFSR1NfR1JPV19ET1dOV0FSRCBjYXNlLCB1c2luZyB0aGVtLgorCitTYXQgRGVjICA3IDE1OjQ2OjU1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdHJlZS5oIChERUNMX0FSR19UWVBFX0FTX1dSSVRURU4pOiBOZXcgbWFjcm8uCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBTdG9yZSB2YWx1ZSB0aGVyZS4KKworCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6CisJU3VwcG9ydCBNT1RPUk9MQSBzeW50YXguCisKKwkqIHRvcGxldi5jIChtYWluKTogVGVzdGluZyBmb3IgLWdnZGIgY2F0Y2hlcyAtZyBhbHNvLgorCURlZmF1bHQgdXNlX2dkYl9kYnhfZXh0ZW5zaW9ucyB0byAxIGZvciAtZ3N0YWJzLCAwIGZvciAtZ2RieC4KKwlTcGVjaWZpZWQgZGVmYXVsdCBpcyBmb3IgLWcuCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IFN0b3JlIHN0YXJ0IGFkZHJlc3MgaW4gZGlyZWN0aXZlX3N0YXJ0LgorCShkb194aWZkZWYpOiBVc2UgdGhhdCwgY2hlY2tpbmcgaWYgYXQgc3RhcnQgb2YgZmlsZS4KKwkoZG9fZW5kaWYpOiBDb21wdXRlIGVwIHByb3Blcmx5LgorCisJKiBwcm90b2l6ZS5jIChhYnNwYXRoKTogRml4IGVycm9ycyByZWZlcmVuY2luZyBhcmd1bWVudCBjd2QuCisJKG1haW4pOiBBbGxvY2F0ZSBiaWcgZW5vdWdoIGJ1ZmZlciBmb3IgZ2V0Y3dkLgorCURvbid0IGNsb2JiZXIgdmFyYXJnc19zdHlsZV9pbmRpY2F0b3IsIGNvcHkgaXQuCisJKHNhdmVzdHJpbmcpOiBOZXcgZnVuY3Rpb24uCisKK1NhdCBEZWMgIDcgMDA6NTM6MTYgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjLWRlY2wuYyAod2Fybl9yZWR1bmRhbnRfZGVjbHMsIHdhcm5fbmVzdGVkX2V4dGVybnMpOiBOZXcgdmFycy4KKwkoY19kZWNvZGVfb3B0aW9uKTogU3VwcG9ydCAtV3JlZHVuZGFudC1kZWNscyBhbmQgLVduZXN0ZWQtZXh0ZXJucy4KKwkocHVzaGRlY2wpOiBQcmludCB0aG9zZSB3YXJuaW5ncy4KKwkqIGMtdHJlZS5oICh3YXJuX3JlZHVuZGFudF9kZWNscywgd2Fybl9uZXN0ZWRfZXh0ZXJucyk6IERlY2xhcmVkLgorCisJKiBjLWRlY2wuYyAocGVuZGluZ194cmVmX2Vycm9yLCBjX21hcmtfdmFyYXJncyk6ICBBZGRlZCByZXR1cm4gdHlwZS4KKworCSogY2NjcC5jIChtYWluKTogIEFkZGVkIGNvZGUgdG8gc3VwcG9ydCB0aGUgcHJlc2VuY2Ugb2YgLUEgKGFzc2VydGlvbikKKwlvcHRpb25zIHdpdGhpbiBDUFBfUFJFREVGSU5FUy4KKworCSogYy1sYW5nLmM6IE1pbm9yIGNsZWFudXBzLgorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSAtZzMgb3B0aW9uLgorCisJKiBkd2FyZm91dC5jICh0eXBlX3RhZyk6ICBGaXhlZCBidWcgaW4gZ2NjIER3YXJmIGdlbmVyYXRpb24gZm9yCisJdGFnZ2VkIHR5cGVzLgorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfZGVjbCk6ICBBZGRlZCB0d28gcHJlLWNoZWNrcyB0byBzZWUgaWYgbm9kZXMKKwlhcmUgRVJST1JfTUFSSyBub2RlcyBiZWZvcmUgdXNpbmcgdGhlbS4KKworCSogZHdhcmZvdXQuYyAoZ2VuZXJhdGVfbmV3X3NmbmFtZV9lbnRyeSk6ICBGdW5jdGlvbiBhZGRlZC4KKworCSogZHdhcmZvdXQuYyAobG9va3VwX2ZpbGVuYW1lKTogIENhbGwgZ2VuZXJhdGVfbmV3X3NmbmFtZV9lbnRyeQorCWFzIHNvb24gYXMgZWFjaCBuZXcgc291cmNlIGZpbGVuYW1lIGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9mCisJa25vd24gZmlsZW5hbWVzICh0aHVzIGF2b2lkaW5nIGFuIG02OGsgZm9yd2FyZC1yZWYgYXNzZW1ibGVyIGJ1ZykuCisKKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2xpbmUpOiAgSW5pdGlhbGl6ZSBwcmV2X2ZpbGVfZW50cnlfbnVtIHRvCisJKHVuc2lnbmVkKSAtMSByYXRoZXIgdGhhbiB6ZXJvIHRvIGF2b2lkIGJvZ3VzIHN1cHByZXNzaW9uIG9mCisJZmlyc3QgLmRlYnVnX3NmbmFtZXMgc2VjdGlvbiBlbnRyeS4KKworCSogZHdhcmZvdXQuYyAoY29tcGFyZV9maWxlbmFtZV9lbnRyaWVzKTogIEZ1bmN0aW9uIGRlbGV0ZWQuICAoSXQncworCW5vIGxvbmdlciBuZWVkZWQuKQorCisJKiBkd2FyZm91dC5jIChkd2FyZm91dF9maW5pc2gpOiAgRG9uJ3QgZ2VuZXJhdGUgLmRlYnVnX3NmbmFtZXMKKwlzZWN0aW9uIGVudHJpZXMgaGVyZSBhbnltb3JlLiAgKFNlZSBsb29rdXBfZmlsZW5hbWUuKQorCisJKiBNYWtlZmlsZS5pbiAocmVhbGNsZWFuKTogRGVsZXRlIGMtcGFyc2UuaC4KKwlEZWxldGUgb2JqYy1wYXJzZS5vdXRwdXQganVzdCBvbmNlLgorCitGcmkgRGVjICA2IDE3OjQ5OjI4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChGSVhFRF9CQVNFX1BMVVNfUCk6IFRoZSBmcmFtZSBvciBhcmd1bWVudCBwb2ludGVyIGl0c2VsZiBpcworCWEgZml4ZWQgYWRkcmVzcy4KKwkoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBJZiB3ZSBmaW5kIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvIGEKKwlmaXhlZCBhZGRyZXNzLCByZXR1cm4gdGhlIGZpeGVkIGFkZHJlc3MuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBhY2Nlc3MgbmV3X2kyX25vdGVzIGlmIGl0IGhhc24ndCBiZWVuCisJZGVmaW5lZCAoaXQgaXNuJ3QgZGVmaW5lZCB1bmxlc3MgbmV3aTJwYXQgIT0gMCkuCisKK0ZyaSBEZWMgIDYgMTY6MDE6MDIgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBydGwuaCAoZW51bSByZWdfbm90ZSk6IERlZmluZSB0d28gbmV3IHZhbHVlcyBSRUdfREVQX0FOVEksCisJUkVHX0RFUF9PVVRQVVQsIHdoaWNoIGFyZSB1c2VkIHRvIG1hcmsgTE9HX0xJTktTLgorCSogcnRsLmMgKHJlZ19ub3RlX25hbWUpOiBMaWtld2lzZS4KKwkoYWRkX2RlcGVuZGVuY2UpOiBSZXR1cm4gdm9pZC4gIE5ldyBwYXJhbWV0ZXIgREVQX1RZUEUgdG8gaW5kaWNhdGUKKwl0eXBlIG9mIGRlcGVuZGVuY2UuCisKKwkqIHNjaGVkLmM6IE1ham9yIHJld3JpdGUgdG8gZGVsZXRlIG11Y2ggb2Jzb2xldGUgY29kZSwgY29ycmVjdCBtYW55CisJY29tbWVudHMsIGRlbGV0ZSB1bnVzZWQgdmFyaWFibGVzLCBldGMuICBNb2RpZnkgYWxsIGNhbGxlcnMgb2YKKwlhZGRfZGVwZW5kZW5jZSB0byBwYXNzIG5ldyBhcmd1bWVudC4gIFNpZ25pZmljYW50IGNoYW5nZXMgYXJlOgorCShyZWFzc2lnbl9kZXBlbmRlbmNlKTogRGVsZXRlZCwgd2FzIHVubmVjZXNzYXJ5LgorCShwcmlvcml0eSk6IEFjY291bnQgZm9yIHR5cGUgb2YgZGVwZW5kZW5jZSB3aGVuIGNhbGN1bGF0aW5nCisJcHJpb3JpdHkuCisJKGZsdXNoX3BlbmRpbmdfbGlzdHMpOiBOZXcgZnVuY3Rpb24uICBFbmNhcHN1bGF0ZSBjb2RlIHdoaWNoIG1ha2VzCisJZGVwZW5kZW5jaWVzIGJldHdlZW4gYW4gSU5TTiBhbmQgZXZlcnkgaW5zbiBvbiB0aGUKKwlwZW5kaW5nX3JlYWRfaW5zbnMgYW5kIHBlbmRpbmdfd3JpdGVfaW5zbnMgbGlzdHMuCisJKHJhbmtfZm9yX3NjaGVkdWxlKTogQWNjb3VudCBmb3IgdHlwZSBvZiBkZXBlbmRlbmNlIHdpdGggbGFzdAorCXNjaGVkdWxlZCBpbnNuIHdoZW4gZGVjaWRpbmcgd2hpY2ggcmVhZHkgaW5zbiB0byBzY2hlZHVsZSBuZXh0LgorCShsYXVuY2hfbGluayk6IEdpdmUgYWxsIGJpcnRoaW5nIGluc25zIHRoZSBzYW1lIHByaW9yaXR5LgorCShzY2hlZHVsZV9ibG9jayk6IE9ubHkgc29ydCB0aGUgcmVhZHkgbGlzdCBvbmNlLCBhZnRlciBhbGwgcmVhZHkKKwlpbnNucyBoYXZlIGJlZW4gYWRkZWQgdG8gaXQuCisJKHNjaGVkdWxlX2Jsb2NrKTogV2hlbiBkZWNpZGluZyB3aGF0IFJFR19ERUFEIG5vdGVzIGFyZSBuZWVkZWQgb24gYQorCWp1c3Qgc2NoZWR1bGVkIGluc25zLCBwcm9jZXNzIGFsbCBzZXRzIGZpcnN0IChzY2hlZF9ub3RlX3NldCkgdGhlbgorCXByb2Nlc3MgYWxsIHVzZXMgKGF0dGFjaF9kZWF0aHNfaW5zbikuCisJKGF0dGFjaF9kZWF0aHMpOiBTaW1wbGlmaWVkIGJ5IGFib3ZlIGNoYW5nZS4KKwkoc2NoZWRfbm90ZV9zZXQpOiBMaWtld2lzZS4KKwkodXBkYXRlX2Zsb3dfaW5mbyk6IFJlbmFtZWQgZnJvbSB1cGRhdGVfbGlua3MsIHNpbmNlIGl0IG5vIGxvbmdlcgorCWRvZXMgYW55dGhpbmcgd2l0aCBMT0dfTElOS1MuICBTY2hlZF9hbmFseXplX2luc24gY3JlYXRlcyBhbGwKKwluZWNlc3NhcnkgbmV3IExPR19MSU5LUyBhbHJlYWR5LgorCShzY2hlZHVsZV9pbnNuKTogRGVsZXRlIG5vIG9wIG1vdmUgaW5zbnMgYWZ0ZXIgcmVsb2FkLgorCitGcmkgRGVjICA2IDEzOjMzOjQ4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3J0c3R1ZmYuYzogR2l2ZSBwZXJtaXNzaW9uIHRvIGxpbmsgd2l0aCBub24tZnJlZSBwcm9ncmFtcy4KKworCSogdG9wbGV2LmMgKGZsYWdfaW5oaWJpdF9zaXplX2RpcmVjdGl2ZSk6IE5ldyB2YXIgYW5kIC1mIG9wdGlvbi4KKwkqIHN2cjQuaCAoQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUsIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUpOiBVc2UgaXQuCisJKiBNYWtlZmlsZS5pbiAoY3J0YmVnaW4ubywgY3J0ZW5kLm8pOiBVc2UgdGhhdCBvcHRpb24uICBVc2UgLWcxLgorCitGcmkgRGVjICA2IDA4OjQyOjUzIDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKFNUQUdFU1RVRkYpOiAgQWRkZWQgX19tYWluIGFuZCBfZXhpdCB0byBzdXBwb3J0IGcrKy4KKworCSogYy1jb21tb24uYyAoY19leHBhbmRfZXhwcl9zdG10KTogIE1hZGUgcmV0dXJuIHR5cGUgZXhwbGljaXQuCisKKwkqIGMtY29tbW9uLmM6IChnZXRfZGlyZWN0aXZlX2xpbmUpOiAgRnVuY3Rpb24gYWRkZWQgdG8gc3VwcG9ydCAtZzMuCisKK0ZyaSBEZWMgIDYgMDQ6NTA6MzkgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKE9QRVJBVE9SX0FTU0lHTl9DSEFSU19QKTogRmx1c2hlZC4KKwkqIGNwLWRlY2wuYyAoZ3Jva19vcF9wcm9wZXJ0aWVzKTogRmx1c2ggT1BFUkFUT1JfQVNTSUdOX0NIQVJTX1AuCisJKiBjcC1pbml0LmMgKGFkZF97ZnJpZW5kLGZyaWVuZHN9KTogRGl0dG8uCisKK1RodSBEZWMgIDUgMjI6MzE6MTIgMTk5MSAgSmVmZnJleSBBIExhdyAgKGxhdyBhdCBzdXBlci5zdXBlci5vcmcpCisKKwkqIG02OGsuaCAoQ09OU1RfQ09TVFMpOiBTaG93IHRoYXQgY29uc3RhbnRzIHdoaWNoIGNhbiBiZSBlYXNpbHkKKwlnZW5lcmF0ZWQgYXJlIGxlc3MgZXhwZW5zaXZlIHRoYW4gbW9zdC4KKworCSogbTY4ay5tZCAobW92c2kpOiBVc2UgdHdvIGluc3RydWN0aW9uIHNlcXVlbmNlcyB0byBsb2FkIGNvbnN0YW50cworCXdoaWNoIGFyZSBqdXN0IG91dHNpZGUgbW92ZXEncyByYW5nZSAod2l0aGluIDggb2YgbW92ZXEncyByYW5nZSkuCisJTGlrZXdpc2UgZm9yIHBvc2l0aXZlIGV2ZW4gY29uc3RhbnRzIHdpdGhpbiB0d2ljZSBtb3ZlcSdzIHJhbmdlLgorCitUaHUgRGVjICA1IDIwOjE3OjEzIDE5OTEgIEVyaWMgWW91bmdkYWxlICh5b3VuZ2RhbGUgYXQgdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogY29uZmlnLWdjYy5jb206IEdlbmVyYXRlIGEgZmlsZSAndmVyc2lvbi5vcHQnIHdoaWNoIHdpbGwgYmUgZ2l2ZW4KKwkgIHRvIHRoZSBWTVMgbGlua2VyIHRvIHB1dCB0aGUgZ2NjIHZlcnNpb24gbnVtYmVyIGluIHRoZSBpbWFnZSAKKwkgIGhlYWRlciB2ZXJzaW9uIG51bWJlciBmaWVsZC4KKworCSogbWFrZS1jYzEuY29tOiBDb21waWxlIGMtbGV4LmMgd2hlbiBidWlsZGluZyBnY2MgYW5kIG9iamMsIGFuZAorCSAgYWRkIGMtbGV4Lm9iaiB0byB0aGUgbGlzdCBvZiBmaWxlcyBnaXZlbiB0byB0aGUgbGlua2VyLgorCSAgQWRkIHZlcnNpb24ub3B0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIGdpdmVuIHRvIHRoZSBsaW5rZXIuCisKKwkqIG1ha2UtY2NjcC5jb206IEFkZCB2ZXJzaW9uLm9wdCB0byB0aGUgbGlzdCBvZiBmaWxlcyBnaXZlbiB0byB0aGUKKwkgIGxpbmtlci4KKworVGh1IERlYyAgNSAyMzowNDoyMCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IERvbid0IG1ha2UgYSBTVFJJQ1RfTE9XX1BBUlQgb2YgYSBNRU07CisJY2xlYW4gdXAgY29tbWVudHMgc28gdGhleSBhZ3JlZSB3aXRoIHRoZSBjb2RlLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQ29ycmVjdCB0ZXN0IGZvciB3aGVuIHdlIGNhbiBzYWZlbHkgY2hhbmdlCisJdGhlIG1vZGUgb2YgYSBwc2V1ZG87IGNhbid0IGlmIGl0IGRvZXNuJ3QgZGllIGluIEkzLgorCisJKiBjLWRlY2wuYyAoV0NIQVJfVFlQRV9TSVpFKTogRGVsZXRlZDsgbmV2ZXIgdXNlZC4KKwkqIGMtY29tbW9uLmMgKFdDSEFSX1RZUEVfU0laRSwgV0NIQVJfQllURVMpOiBEZWxldGVkLCBubyBsb25nZXIgbmVlZGVkLgorCShjb21iaW5lX3N0cmluZ3MpOiBVc2Ugc2l6ZSBvZiBgd2NoYXJfdHlwZV9ub2RlJyB0byBnZXQgbnVtYmVyIG9mCisJYnl0ZXMgaW4gd2NoYXJfdC4KKwkqIG5leHQuaCAoV0NIQVJfVFlQRV9TSVpFKTogRGVsZXRlOyBubyBsb25nZXIgdXNlZC4KKworCSogY3NlLmMgKGNzZV9tYWluKTogQWRkIG5ldyBhcmd1bWVudCB0byBjc2VfYmFzaWNfYmxvY2tfY2FsbC4KKwlEb24ndCBjYWxsIGNzZV9hcm91bmRfbG9vcCBoZXJlLgorCShjc2VfYmFzaWNfYmxvY2spOiBDYWxsIGNzZV9hcm91bmRfbG9vcCBmcm9tIGhlcmUgd2hpbGUgd2Ugc3RpbGwKKwloYXZlIG91ciBhcnJheXMgYWxsb2NhdGVkLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2U7IGRvbid0CisJcmVmZXJlbmNlIFRFTSBiZWZvcmUgaXQgaXMgc2V0LgorCisJKiB0b3BsZXYuYyAoZmF0YWxfaW5zbl9ub3RfZm91bmQpOiBGbHVzaCBhbGwgZmlsZXMgYmVmb3JlIGFib3J0aW5nLgorCitUaHUgRGVjICA1IDIxOjQyOjI5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX29iamNfbWV0aG9kX2NhbGwpOiBFdmFsIE9CSkVDVCBhbmQgU0VMRUNUT1IKKwlvbmx5IG9uY2UuICBBbHdheXMgcGFzcyBzZWxmX2RlY2wgYXMgc2VsZiB0byB0aGUgbWV0aG9kLgorCitUaHUgRGVjICA1IDE0OjUyOjE2IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY2NydHN0dWZmLmMsIGdudWxpYjIuYywgcHJvdG9pemUuYzogSW5jbHVkZSB0bS5oIG5vdCBjb25maWcuaCwKKwlzaW5jZSB0aGVzZSBhcmUgY29tcGxpZWQgZm9yIHRoZSB0YXJnZXQsIGhvc3QgZGVmaW5lcyBkbyBub3QgYXBwbHkuCisKK1RodSBEZWMgIDUgMTQ6NTI6MjQgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIGRieG91dC5jIChBU01fU1RBQlNfT1AsIEFTTV9TVEFCTl9PUCwgQVNNX1NUQUJEX09QKTogSWYKKwlub3QgZGVmaW5lZCwgZGVmaW5lIGFzIC5zdGFicy8uc3RhYm4vLnN0YWJkIHJlc3BlY3RpdmVseS4gIENoYW5nZQorCWFsbCBwbGFjZXMgZW1pdHRpbmcgc3RhYnMgdG8gdXNlIHRoZSBtYWNyb3MuCisJKiBjcC1kZWNsMi5jOiBEaXR0by4KKwkqIGNwLWdjLmM6IERpdHRvLgorCSogZmluYWwuYzogRGl0dG8uCisJKiB2YXJhc20uYzogRGl0dG8uCisJKiBnY2MudGV4aW5mbzogRG9jdW1lbnQgQVNNX1NUQUJbRE5TXV9PUCBtYWNyb3MuCisKK1RodSBEZWMgIDUgMTI6MDM6NDAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogRG9uJ3QgcHV0IGAuJyBvbiBzdGFydGZpbGVfcHJlZml4LgorCUNhc3QgcmVzdWx0IG9mIGFsbG9jYS4KKworCSogY29uZmlnLyouaCAoQVNNX09VVFBVVF9BU0NJSSk6IFB1dCBwYXJlbnMgYXJvdW5kIGFsbCB1c2VzIG9mIGFyZ3MuCisKKwkqIGhwODAwLmgsIGhwODAwLmMsIGhwODAwLm1kLCB4bS1ocDgwMC5oOiBOZXcgZmlsZXMuCisJKiB2YS1ocDgwMC5oOiBOZXcgZmlsZS4KKwkqIGd2YXJhcmdzLmg6IFVzZSB2YS1ocDgwMC5oIGlmIG5lZWRlZC4KKwkqIGNvbmZpZy5zdWJyLCBjb25maWd1cmU6IEFkZCBhbHRlcm5hdGl2ZXMgZm9yIGhwODAwLCBocDcwMC4KKworVGh1IERlYyAgNSAwOTozNToxNSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChub3RlX2RlYnVnX2luZm9fbmVlZGVkKTogRG8gdGhlIHJpZ2h0IHRoaW5nIGZvcgorCXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLgorCitUaHUgRGVjICA1IDAxOjI1OjEzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmVyc2lvbi5jOiBOb3cgMS45Ni4KKworV2VkIERlYyAgNCAyMzoxNzoyMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMsIGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogQ29ycmVjdGx5CisJdXBkYXRlIE5FWFRfVFJJQUwgYWZ0ZXIgcG9zc2libHkgc3BsaXR0aW5nIGFuIGluc24uCisKK1dlZCBEZWMgIDQgMTc6MDM6MTEgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBncGx1cy5ncGVyZjogQWRkIHRocm93IGFuZCB0ZW1wbGF0ZSBrZXl3b3Jkcy4gIFVwZGF0ZSBwcml2YXRlLAorCXByb3RlY3RlZCwgYW5kIHB1YmxpYyBkZWZpbml0aW9ucy4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogQWRkIG1pc3NpbmcgaW5kZW50YXRpb24gYXJndW1lbnQgdG8KKwlwcmludF9ub2RlIGNhbGwgZm9yIHZhbHVlcyBmaWVsZC4KKworV2VkIERlYyAgNCAxODozOTozMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0aW9ucy5jIChidWlsZF9vYmpjX21ldGhvZF9jYWxsKTogRGVmaW5lIGFzIHN0YXRpYy4KKworV2VkIERlYyAgNCAxNzowNDo0OSAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jIChhZGRfdmFycmF5X3BhZ2UsIGFsbG9jX3R5cGUgZW51bSk6IEtlZXAgdHJhY2sgb2YgaG93CisJbWFueSBwYWdlcyB3ZSBhbGxvY2F0ZWQgZm9yIHZhcnJheXMgYXMgd2VsbCBhcyB0aGUgc21hbGwgc3R1ZmYuCisJKHN0YWJzX2ZpbGVuYW1lKTogTmV3IHN0YXRpYyB0byBob2xkIHRoZSBzcGVjaWFsIGZpbGVuYW1lIHVzZWQgZm9yCisJcGFzc2luZyBzdGFicyB0aHJvdWdoLgorCShwYXJzZV9zdGFic19jb21tb24sIHBhcnNlX3N0YWJzLCBwYXJzZV9zdGFibik6IE5ldyBmdW5jdGlvbnMgdG8KKwlzbXVnZ2xlIHN0YWJzIHRocm91Z2ggdG8gdGhlIGRlYnVnZ2VyLiAgU3RhYnMgbXVzdCBiZSBjb21tZW50ZWQgb3V0LAorCWp1c3QgbGlrZSB0aGUgb3RoZXIgZGVidWcgZGlyZWN0aXZlcy4KKwkoYWRkX2xvY2FsX3N5bWJvbCk6IENoZWNrIGhhc2hfcHRyIHRvIHNlZSBpZiBpdCdzIG51bGwgYmVmb3JlCisJc3RvcmluZyBpbnRvIGl0LCBpbiBjYXNlIG5vIG5hbWUgaXMgcGFzc2VkLgorCShhZGRfZmlsZSk6IEFkZCBzdXBwb3J0IGZvciB0aGUgc3BlY2lhbCBzdGFicyBmaWxlLgorCShjb3B5X29iamVjdCk6IEJlZm9yZSBjb3B5aW5nIHRoZSBleHRlcm5hbCBzeW1ib2xzLCBmaWd1cmUgb3V0IHRoZQorCWZpbGUgaW5kZXhlcyBvZiBlYWNoIG9mIHRoZSBmaWxlcywgYW5kIHRoZW4gZXhwbGljaXRseSByZW1hcCB0aGUKKwlvcmlnaW5hbCBmaWxlIGluZGV4ZXMgb2YgdGhlIGV4dGVybmFsIHN5bWJvbCB0byBiZSB0aGUgbmV3IGZpbGUKKwlpbmRleC4gIElmIHRoaXMgaXNuJ3QgZG9uZSwgdGhlbiBiYWQgZmlsZSBudW1iZXJzIGNhbiBnZXQgZ2VuZXJhdGVkCisJaWYgYSBmaWxlbmFtZSBpcyByZXBlYXRlZC4KKwkodmFyaW91cyk6IENoYW5nZSB0aGUgbmFtZSBvZiBzbWFsbF9hbGxvYyB0byBhbGxvY19jb3VudHMsIHNpbmNlIHdlCisJbm93IHRyYWNrIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucyBhcyB3ZWxsLgorCisJKiBtaXBzLXRkdW1wLmMgKHRvcGxldmVsKTogRGVsZXRlIHVubmVjZXNzYXJ5IGluY2x1ZGUgZmlsZSBzdGFtcC5oLgorCitXZWQgRGVjICA0IDExOjA1OjA0IDE5OTEgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbiBhdCBvc2Yub3JnKQorCisJKiBlbmNvcmUuaCAoQVNNX09VVFBVVF9MQUJFTFJFRl9BU19JTlQpOiBhZGQgZGVmaW5pdGlvbgorCSogbnMzMmsuaDogZGl0dG8KKworCSogbnMzMmsuaCAoQVNNX09VVFBVVF9MQUJFTCwgQVNNX0dMT0JBTElaRV9MQUJFTCk6IElmIENPTExFQ1QgaXMKKwlkZWZpbmVkIHByb3ZpZGUgYWx0ZXJuYXRlIGRlZmluaXRpb25zCisKKwkqIGVuY3Jvc2UuaCAoQVNNX09VVFBVVF9JTlQpOiBJZiBDT0xMRUNUIGlzIGRlZmluZWQgcHJvdmlkZQorCWFsdGVybmF0ZSBkZWZpbml0aW9uCisKK1dlZCBEZWMgIDQgMDE6Mzk6MDcgMTk5MSAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCisKKwkqIGNwLXB0LmMgKGVuZF90ZW1wbGF0ZV9kZWNsKTogRm9yIG1ldGhvZCB0ZW1wbGF0ZXMsIHBvcCB0aGUgY2xhc3MKKwliaW5kaW5nIGxldmVsIGJlZm9yZSB0aGUgb3RoZXJzIHJhdGhlciB0aGFuIGFmdGVyLgorCisJKiBjcC1jbGFzcy5jOiBBZGRlZCBERUJVR19DUF9CSU5ESU5HX0xFVkVMUyBjb2RlLiAgSW5jbHVkZSBjcC1kZWNsLmgKKwlpZiB0aGF0IHN5bWJvbCBpcyBkZWZpbmVkLCBidXQgZG9uJ3QgbGlzdCBpdCBpbiBNYWtlZmlsZS5pbiBzaW5jZQorCXRoYXQncyBub3QgdGhlIG5vcm1hbCBtb2RlLgorCShwdXNoY2xhc3MpOiBQcmludCBtZXNzYWdlcyBhbmQgZnJvYiBpbmRlbnRhdGlvbiBsZXZlbC4KKwkocG9wY2xhc3MpOiBMaWtld2lzZS4KKworCSogY3Atc3Bldy5jICh5eWxleCk6IElmIGlkZW50aWZpZXJfdHlwZSBzYXlzIFBUWVBFTkFNRSwgYW5kCisJZm9sbG93aW5nIHRva2VuIGlzICI8IiwgZm9yY2UgbG9va2luZ19mb3JfdHlwZW5hbWUgdG8gYmUKKwlub24tbmVnYXRpdmUuCisKKwkqIGNwLXB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IERyb3AgZXh0cmEgc3BhY2VzCisJYmV0d2VlbiBsYXN0IHBhcm0gYW5kIGNsb3NpbmcgIj4iLiAgUHJpbnQgYSBtZXNzYWdlIGJlZm9yZSBhYm9ydGluZworCWlmIGEgcGFybSB0eXBlIGlzbid0IGhhbmRsZWQuCisKKwkqIGNwLWRlY2wuYyAobWF5YmVfZ2xvYmFsaXplX3R5cGUpOiBEb24ndCBkbyBpdCBpZiB0aGUgaWRlbnRpZmllcgorCXRoYXQgbmFtZXMgdGhlIHR5cGUgZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBhIHR5cGUgdmFsdWUuCisKK1dlZCBEZWMgIDQgMDE6MDY6MjggMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9lbnVtKTogQ2FsbCBgcmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uJyBmb3IKKwlFTlVNVFlQRS4KKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEaXR0by4KKwkqIGNwLWRlY2wuYyAocHVzaHRhZyk6IFNldCBUWVBFX1NUVUJfREVDTC4KKwkqIGNwLXNlYXJjaC5jIChub3RlX2RlYnVnX2luZm9fbmVlZGVkKTogQ2FsbAorCWByZXN0X29mX3R5cGVfY29tcGlsYXRpb24nIGlmIHdlIG5vdGljZSB3ZSBuZWVkIGRlYnVnIGluZm8gZm9yIFRZUEUuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2luaXQpOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisJKiBjcC1wYXJzZS55IChET1RfU1RBUik6IE5ldyB0b2tlbi4KKwkoZXhwcl9ub19jb21tYXMpOiBIYW5kbGUgRE9UX1NUQVIgZXhwcmVzc2lvbnMuCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IFJlY29nbml6ZSBET1RfU1RBUi4gIEFsc28sIHJlYXJyYW5nZQorCXNjYW5uZXIgdG8gbWFrZSBpdCBtb3JlIGVmZmljaWVudC4KKworCSogY3AtZGVjbC5jIChtYXliZV9idWlsZF9jbGVhbnVwKTogV2hlbiBidWlsZGluZyBjbGVhbnVwcywgcGFzcworCVRZUEVfTUFJTl9WQVJJQU5UIHRvIGBidWlsZF9kZWxldGUnLgorCitUdWUgRGVjICAzIDIyOjUyOjMzIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChtYXJrX3NldF8xKTogTWFrZSBhIFJFR19VTlVTRUQgbm90ZSBub3QgYSBSRUdfREVBRCBub3RlCisJZm9yIHRoZSBwYXJ0IG9mIG11bHRpLXdvcmQgaGFyZCByZWdpc3RlcnMgbm90IG5lZWRlZC4KKworVHVlIERlYyAgMyAyMjozNDoxMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogU3VwcG9ydCAtLW9iamRpci4KKworCSogb2JqYy1wYXJzZS55OiBHZXQgcmlkIG9mIG1hbnkgc3RhdGljIGRlY2xzLgorCVJlb3JkZXIgYWxsIHRva2VuIGRlZmluaXRpb25zIHRvIG1hdGNoIGMtcGFyc2UueS4KKwkocmVjb2duaXplX29iamNfa2V5d29yZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGMtbGV4LmMgKHRva2VuX2J1ZmZlcik6IE5vIGxvbmdlciBzdGF0aWMuCisJKHl5bGV4KTogRm9yIEAsIGNhbGwgcmVjb2duaXplX29iamNfa2V5d29yZC4gIERvbid0IHVzZSBrZXl3b3JkIHRhYmxlLgorCSogYy1sYW5nLmMgKHJlY29nbml6ZV9vYmpjX2tleXdvcmQpOiBEdW1teSBkZWZpbml0aW9uLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfb2JqY19tZXRob2RfY2FsbCkgWyFORVhUX09CSkNfUlVOVElNRV06CisJUGFzcyBzZWxlY3RvciBhcyBhcmcgdG8gdGhlIG1ldGhvZC4KKwlBbHdheXMgY2FzdCB0aGUgbWV0aG9kIHRvIGEgZnVuY3Rpb24gdHlwZS4KKworCSogeG0tc3BhcmMuaCAoYWxsb2NhKTogSWYgdXNpbmcgU3VuIENDLCBpbmNsdWRlIGFsbG9jYS5oLgorCUlmIHVzaW5nIEdDQywgZGVmaW5lIGFzIF9fYnVpbHRpbl9hbGxvY2EgdGhlIHdheSBvdGhlciBtYWNoaW5lcyBkby4KKworCSogY2NjcC5jIChwcmludF9jb250YWluaW5nX2ZpbGVzKTogUHJpbnQgdGhlIG5vbWluYWwgZmlsZSBuYW1lcy4KKworVHVlIERlYyAgMyAxNjo1NDowNCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJZiBicmFuY2hlcyBhcmUgZXhwZW5zaXZlLCBjb252ZXJ0IGp1bXBzCisJYXJvdW5kIGluY3JlbWVudHMgb3IgZGVjcmVtZW50cyBieSBvbmUgaW50byBhbiBpbmNyZW1lbnQgYnkgdGhlCisJY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogRG9uJ3QgcmVtb3ZlIGEgU1VCUkVHIHVubGVzcworCWl0IGRvZXNuJ3QgYWZmZWN0IGVpdGhlciBvcGVyYW5kLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBSZXdvcmsgc28gdGhhdCB3ZSBjYW4gY29ycmVjdGx5CisJZm9sZCBjb21wYXJpc29ucyBvbiBtYWNoaW5lcyB0aGF0IHNldCBDQzAgdG8gdGhlIHJlc3VsdCBvZiBhIAorCWNvbmRpdGlvbiB0ZXN0LCBub3QganVzdCBhIENPTVBBUkUuCisJKGNzZV9pbnNuKTogRG9uJ3Qgc2V0IFRISVNfSU5TTl9DQzAgdG8gYSBjb25zdGFudCBpZiB3ZSBkb24ndCBrbm93CisJaXRzIG1vZGUuCisKK1R1ZSBEZWMgIDMgMTI6MDE6MTIgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBtaXBzLm1kOiBVc2UgQU5EIG5vdCBJT1IgaW4gZGVmaW5lX2Z1bmN0aW9uX3VuaXQgZGVmaW5pdGlvbnMuCisJQ29ycmVjdCBzZXR0aW5nIG9mIE1PREUgYXR0cmlidXRlIGluIHZhcmlvdXMgaW5zbiBwYXR0ZXJucy4KKworVHVlIERlYyAgMyAwODozMToxOCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXNwZXcuYyAoc2Nhbl90b2tlbnMpOiBEZWxldGUgRGVjIDIgY2hhbmdlLgorCSh5eWxleCk6IEluc3RlYWQsIGNvcHkgVE1QX1RPS0VOLllZTFZBTC5UVFlQRSBpZiBpdCB3YXMgYWxsb2NhdGVkIG9uCisJdGhlIHdyb25nIG9ic3RhY2suCisJKHByb2JlX29ic3RhY2spOiBOZXcgZnVuY3Rpb24gdG8gc3VwcG9ydCB0aGUgYWJvdmUgY2hhbmdlLgorCisJKiBjcC10cmVlLmggKENMQVNTVFlQRV9ERUJVR19SRVFVRVNURUQpOiBOZXcgZmxhZy4KKwkoQ0xBU1NUWVBFX0FTTV9XUklUVEVOKTogRGVsZXRlZC4KKwljcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogTm93IGFsbW9zdCBhbHdheXMgYXNzdW1lIHRoYXQgY2xhc3NlcworCXdpdGggbWV0aG9kcyBhcmUgdG8gaWdub3JlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCWNwLXNlYXJjaC5jIChkZnNfZGVidWdfe21hcmssdW5tYXJrZWRwfSk6IFJld3JpdHRlbiB0byBoYW5kbGUgbmV3CisJYWxnb3JpdGhtIGZvciBtaW5pbWl6aW5nIGRlYnVnIG91dHB1dC4KKworCSogY3AtZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZSk6IEhhbmRsZSBjYXNlIHdoZW4gVEhJTkcgaXMgYQorCVVOSU9OX1RZUEUuCisKK1R1ZSBEZWMgIDMgMDY6MzU6MzggMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBqdW1wLmMgKGR1cGxpY2F0ZV9sb29rX2V4aXRfdGVzdCk6IElmIFJFR19NQVAgaXMgbm9uLXplcm8sIGNhbGwKKwlyZXBsYWNlX3JlZ3Mgb24gdGhlIFJFR19OT1RFUyBvZiBDT1BZLgorCisJKiBjcC1zcGV3LmMgKHNjYW5fdG9rZW5zKTogRG9uJ3QgcmVhZCBwYXN0ICc9Jy4KKworCSogY3AtY2FsbC5jIChjb21wdXRlX2NvbnZlcnNpb25fY29zdHMpOiBGb3Igbm93LCB0cmVhdAorCUNPTlRSQVZBUklBTkNFX0hBUlNITkVTUyBhcyBFVklMX0hBUlNORVNTLCBzaW5jZSB3ZSBjYW5ub3QgdGVsbCB0aGUKKwlkaWZmZXJlbmNlIGJldHdlZW4gd2hlbiB3ZSBzaG91bGQgYWNjZXB0IGl0IChwb2ludGVycyB0byB0aGUgcmlnaHQKKwlzb3J0IG9mIG1ldGhvZHMpIGFuZCB3aGVuIHdlIHNob3VsZG4ndCAoYmFzZSogdG8gZGVyaXZlZCoKKwljb252ZXJzaW9ucykuCisKK01vbiBEZWMgIDIgMTg6NTM6NDIgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoY3NlX2Fyb3VuZF9sb29wKTogRml4IHR5cG8gaW4gY29tbWVudC4KKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9maWVsZHMpOiBMaWtld2lzZS4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8xKTogUGFzcyB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmdzIG9mIGEKKwlaRVJPX0VYVFJBQ1Qgb3IgU0lHTl9FWFRSQUNUIGluIHRoZSBTRVRfREVTVCB0byBzY2hlZF9hbmFseXplXzIuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9jb21wb3VuZF9vcGVyYXRpb24pOiBDaGFuZ2UgKGxzaGlmdHJ0IChhc2hpZnQgLi4uKSkKKwl0byBhIFpFUk9fRVhUUkFDVCwgbm90IGEgU0lHTl9FWFRSQUNULgorCitNb24gRGVjICAyIDE1OjA5OjEzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogTmV3IGFyZyBBRlRFUl9SRUdTQ0FOLgorCUlmIG5vdCBzZXQsIGRvbid0IHVzZSBkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogUGFzcyBuZXcgYXJnIHRvIGp1bXBfb3B0aW1pemUuCisKKwkqIG5leHQuaCAoU0VMRUNUX1NFQ1RJT04pOiBUZXN0IFRSRUVfQ09OU1RBTlQgYXMgd2VsbCBhcyBUUkVFX1JFQURPTkxZLgorCisJKiB4bS1pODZ2WzM0XS5oOiBSZW5hbWVkIGZyb20geG0taTg2MHZbMzRdLmguCisJKiBjb25maWd1cmU6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKworCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBQdXQgJVIgb24gYWxsIHJlZ3MgaW4gYXNtX2ZwcmludGYuCisKKwkqIHQtZGVjc3RhdG4gKGxkKTogSnVzdCBjb3B5IGNvbGxlY3QyLgorCShjb2xsZWN0KTogVGFyZ2V0IGRlbGV0ZWQuCisJKEVYVFJBX1BBU1NFUyk6IERlbGV0ZWQgY29sbGVjdC4KKwkobWlwcy10ZmlsZSwgbWlwcy10ZHVtcCk6IERlcGVuZCBvbiBMSUJERVBTLgorCSogdC1taXBzIChtaXBzLXRmaWxlLCBtaXBzLXRkdW1wKTogRGVwZW5kIG9uIExJQkRFUFMuCisJKiBjb2xsZWN0Mi5jIChtYWluKTogUnVuIC9iaW4vbGQuCisJVXNlIGZhdGFsX3BlcnJvciB3aGVyZSBhcHByb3ByaWF0ZS4KKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX21lc3NhZ2VfZXhwcik6IEZpeCB0eXBvLgorCisJKiBjb25maWd1cmU6IEFkZCBtaXNzaW5nIGZpIHRvIGZpbmlzaCBsYXN0IGNoYW5nZS4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBSZXN0b3JlIG1pc3NpbmcgYnJlYWsgaW4gY2FzZSBESVYuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfaW5pdCk6IEV4cGxpY2l0bHkgZG8gbm90aGluZy4KKwkoc2Rib3V0X3R5cGVkZWZzKTogRnVuY3Rpb24gZGVsZXRlZC4KKworTW9uIERlYyAgMiAxMjo1MDQ6MzUgMTk5MSAgRXJpYyBZb3VuZ2RhbGUgKHlvdW5nZGFsZSBhdCB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBjb25maWctZ2NjLmNvbTogRmluaXNoIGNoYW5nZW92ZXIgZnJvbSB0bS0qLmggdG8gKi5oLgorCitTdW4gRGVjICAxIDA1OjE4OjMyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGxvb2t1cF97ZmllbGQsZm5maWVsZHN9KTogSWYgUFJPVEVDVCBpcyAwLCBkb24ndAorCW1lbW9pemUgdGhlIGVudHJ5IHdlIGZpbmQuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBDYWxsIGBidWlsZF9sYW5nX2ZpZWxkX2RlY2wnIGluc3RlYWQgb2YKKwlgYnVpbGRfZGVjbCcgaWYgd2UgcmV0cm9hY3RpdmVseSBhbGxvY2F0ZSBhIFZBUl9ERUNMLgorCitTdW4gRGVjICAxIDAwOjEwOjE4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlOiBDb252ZXJ0IG9wdGlvbiBzeW50YXggZnJvbSArIHRvIC0tLgorCVN1cHBvcnQgLS10YXJnZXQuCisKKwkqIGkzODZ2NC5oIChBU01fT1VUUFVUX0xPQ0FMLCBBU01fT1VUUFVUX0dMT0JBTCk6IERlbGV0ZWQuCisJKEFTTV9GSUxFX1NUQVJUKTogRGVsZXRlZC4KKwkoU1RBUlRGSUxFX1NQRUMsIExJQl9TUEVDLCBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYKTogRGVsZXRlZC4KKwkoU1REQ19WQUxVRSk6IERlbGV0ZWQuCisKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9UUlVOQ0FURSk6IENoZWNrIGZvciBzYW1lIHNpemUgYXMgU0Ztb2RlLgorCisJKiBjb25maWcvKi5oOiBSZW5hbWVkIGZyb20gdG0tKi5oLiAgI2luY2x1ZGVzIGFuZCBjb21tZW50cyBjaGFuZ2VkLgorCSogY29uZmlndXJlOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgorCSogdC0qOiB0bS0qLmggZmlsZSBuYW1lcyBjaGFuZ2VkLgorCisJKiBnbnVsaWIyLmMgKF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2spOiBSZW5hbWVkIGZ1bmN0aW9uLgorCSogY29udmV4LmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IFVzZSBuZXcgbmFtZS4KKworU3VuIERlYyAgMSAwODo1Nzo0NSAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogY2NjcC5jIChtYWluKTogQWRkIGNhc3QgaW4gZnJvbnQgb2YgYWxsb2NhIGZvciBub24gR0NDIGNvbXBpbGVycy4KKworU2F0IE5vdiAzMCAyMjozMzoyNCAxOTkxICBDaHJpcyBTbWl0aCAgKGNzbWl0aEBjb252ZXguY29tKQorCisJKiBjb25maWcuc3VicjogUmVjb2duaXplIC1jMyouCisJTmV3IGFsdGVybmF0aXZlcyBmb3IgY29udmV4LWMzKi4KKwkqIGNvbmZpZ3VyZTogQWx0ZXJuYXRpdmVzIGZvciBjb252ZXggcmV3cml0dGVuLgorCisJKiBnbnVsaWIyLmMgKF9fZXhlY3V0ZV9lbmFibGVfc3RhY2spOiBOZXcgZnVuY3Rpb24gZm9yIENvbnZleCBvbmx5LgorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogVXNlIFwgYXMgcXVvdGluZyBjaGFyLgorCisJKiBjb252ZXguaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG5ldyBtYWNoaW5lIHR5cGVzIGMzMiwgYzM0LCBjMzguCisJQWRkIGZsYWcgVEFSR0VUX0lORElSRUNUUywgdHJ1ZSBmb3IgYzEgYW5kIGMyLCBmYWxzZSBmb3IgYzMuCisJKiBjb252ZXguaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQXZvaWQgaW5kaXJlY3QKKwlhZGRyZXNzaW5nIGlmICEgVEFSR0VUX0lORElSRUNUUy4KKwkKKwkqIGNvbnZleC5oOiAoQklUU19QRVJfV09SRCwgVU5JVFNfUEVSX1dPUkQsIFdPUkRTX0JJR19FTkRJQU4pOgorCUl0IG5vdyB3b3JrcyB0byBkZXNjcmliZSBtYWNoaW5lIGNvcnJlY3RseS4KKworCSogY29udmV4LmggKFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFKTogTWFrZSB0aGVtIGludHMgcmF0aGVyCisJdGhhbiBsb25ncyB0byBtYXRjaCB1c2FnZSBpbiAvdXNyL2luY2x1ZGUuCisKKwkqIGNvbnZleC5oIChlbnVtIHJlZ19jbGFzcyk6IEFkZCBjbGFzc2VzIFNQX1JFR1MsIHRoZSBzdGFjaworCXBvaW50ZXIsIGFuZCBJTkRFWF9SRUdTLCB0aGUgcmVtYWluaW5nIEFfUkVHUy4KKwkoUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR05PX1JFR19DTEFTUyk6IEFkanVzdAorCWZvciBuZXcgY2xhc3Nlcy4KKwkoSU5ERVhfUkVHX0NMQVNTLCBCQVNFX1JFR19DTEFTUyk6IFVzZSBJTkRFWF9SRUdTIHNvIGdjYyB3aWxsCisJbm90IGluZGV4IG9mZiB0aGUgc3RhY2sgcG9pbnRlciAocmVnaXN0ZXIgMCkuCisKKwkqIGNvbnZleC5oIChUUkFNUE9MSU5FX1RFTVBMQVRFLCBUUkFNUE9MSU5FX1NJWkUsCisJSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRGVmaW5lLgorCisJKiBjb252ZXguaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IERlZmluZS4KKworCSogY29udmV4LmggKFJUWF9DT1NUUyk6IFNwZWNpZnkgY29zdHMgdG8gcHJldmVudCBtdWx0aXBseQorCWZyb20gYmVpbmcgc3ludGhlc2l6ZWQgZnJvbSBzaGlmdHMgKHdoaWNoIGFyZW4ndCBmYXN0ZXIpLgorCisJKiBjb252ZXguaCAoTk9USUNFX1VQREFURV9DQyk6IE5vIG5lZWQgdG8gZG8gQ0NfU1RBVFVTX0lOSVQsCisJY2MgaXMgbmV2ZXIgbG9va2VkIGF0LgorCisJKiBjb252ZXguaCAoVlRBQkxFX1VTRVNfTUFTSywgVklOREVYX01BU0ssIFNFVF9ERUNMX1ZJTkRFWCk6CisJZGVmaW5lIHNvIGcrKyB3b3Jrcy4KKworCSogY29udmV4Lmg6IElmIENPTExFQ1QgaXMgZGVmaW5lZCwgZGVmaW5lIG91dHB1dCBtYWNyb3MgZm9yCisJY29sbGVjdCB0byBjYWxsLgorCisJKiBjb252ZXgqLmg6IElmICF0cmFkaXRpb25hbCwgZGVmaW5lIF9MT05HTE9ORyBhbmQgNjQtYml0CisJdHlwZWRlZnMgdG8gcHJldmVudCB0eXBlcy5oIGZyb20gbXVyZGVyaW5nIGFuc2kgY29tcGlsYXRpb25zLgorCisJKiBjb252ZXgubWQgKG1vdnNpKTogc3BsaXQgaW50byBkZWZpbmVfZXhwYW5kIGFuZCB0d28KKwlhbm9ueW1vdXMgZGVmaW5lX2luc25zLCBvbmUgdGhhdCB1c2VzIGluZGlyZWN0aW9uIGFuZAorCW9uZSB0aGF0IGRvZXNuJ3QuICBUQVJHRVRfSU5ESVJFQ1RTIHNlbGVjdHMgd2hpY2guCisKKwkqIGNvbnZleC5jIChvdXRwdXRfY2FsbCk6ICBOZXcgcm91dGluZS4gIFNjYW4gZm9yd2FyZCBmcm9tIGNhbGwKKwl0byBkZWNpZGUgaWYgQVAgaXMgbGl2ZSwgb21pdCBBUCByZWxvYWQgaWYgbm90LgorCSogY29udmV4Lm1kIChjYWxsLCBjYWxsX3ZhbHVlKTogdXNlIG91dHB1dF9jYWxsLgorCisJKiBjb252ZXgubWQgKGJpdCBtYW5pcHVsYXRpb24gcGVlcGhvbGVzKTogcmVtb3ZlLCBub3cgZG9uZSBpbgorCWNvbWJpbmUuCisKKwkqIGNvbnZleC5tZCAoaW5kaXJlY3RfanVtcCk6IERlZmluZS4KKworCSogY29udmV4LmMgKGNvbnN0X2RvdWJsZV97aGlnaCxsb3d9X2ludCk6IEp1c3QgcmV0dXJuIHRoZQorCWFwcHJvcHJpYXRlIHdvcmQsIHJlbW92ZSBzbG93IGZsb2F0IGNvbXB1dGF0aW9ucy4KKworCSogbWF0aC1jb252ZXg6IE5ldyBmaWxlIHRvIHVzZSBidWlsdGluIGluc3RydWN0aW9ucy4KKworCSogeC1jb252ZXg6IFVzZSBjYyAtcGNjIHRvIGJvb3RzdHJhcCBnY2MuCisKK1NhdCBOb3YgMzAgMTA6MjE6MjYgMTk5MSAgUm9uIEd1aWxtZXR0ZSAocmZnIGF0IG5jZC5jb20pCisKKwkqIHRtLWkzODZ2NC5oIChEQlhfUkVHSVNURVJfTlVNQkVSKTogRGlmZmVyZW50IHJlbnVtYmVyaW5nLgorCisJKiB0bS1zdnI0LmggKENUT1JTX1NFQ1RJT05fQVNNX09QLCBEVE9SU19TRUNUSU9OX0FTTV9PUCk6IENoYW5nZWQgCisJc28gdGhhdCB0aGUgcHJvZ2JpdHMgcGFyYW1ldGVyIGFjdHVhbGx5IGFwcGVhcnMgaW4gdGhlIGRlZmluaXRpb25zLgorCisJKiB0bS1zdnI0LmggKENUT1JTX1NFQ1RJT05fRlVOQ1RJT04sIERUT1JTX1NFQ1RJT05fRlVOQ1RJT04pOiAgQWRhcHRlZAorCWZvciBjaGFuZ2UgaW4gQ1RPUlNfU0VDVElPTl9BU01fT1AsIERUT1JTX1NFQ1RJT05fQVNNX09QLgorCitTYXQgTm92IDMwIDA3OjA1OjA2IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3Atc3Bldy5jIChmb2xsb3dzX3tpZGVudGlmaWVyLHR5cGVuYW1lfSk6IE5ldyBhcnJheXMuCisJKiBjcC1zcGV3LmMgKGluaXRfc3Bldyk6IEluaXRpYWxpemUgbmV3IGFycmF5cy4KKwkqIGNwLWRlY2wuYyAobG9va3VwX25hbWUpOiB0YWtlcyBuZXcgcGFyYW1ldGVyIFBSRUZFUl9UWVBFLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKiBjcC1zcGV3LmMgKHl5bGV4KTogU2V0IExPT0tJTkdfRk9SX1RZUEVOQU1FIGV2ZXJ5IHRpbWUgd2Ugc2VlIGFuCisJQUdHUiBvciBFTlVNLgorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IFdoZW4gY29tcG9zaW5nIEVYVEVSTl9MQU5HX1NUUklORywgY2FsbAorCWByZWFsX3l5bGV4Jywgbm90IGB5eWxleCcuICBDaGFuZ2VkIG90aGVyIHBsYWNlcyB0aGF0IGRlcGVuZGVkIG9uCisJY2FsbGluZyBgcmVhbF95eWxleCcgZm9yIHRoZWlyIGlucHV0LgorCisJKiBjcC1zcGV3LmMgKHNjYW5fdG9rZW5zKTogTmV2ZXIgcmVhZCBwYXN0ICd7JyBvciAnOicuICBGaWxsIHRoZQorCXRva2VuIGJ1ZmZlciB3aXRoIEVNUFRZIHRva2VucyBpbiB0aGF0IGNhc2UuCisJKHl5bGV4KTogSGFuZGxlIEVNUFRZIHRva2Vucy4KKworCSogY3AtcGFyc2UueSAoc3RydWN0c3ApOiBBdm9pZCB1c2luZyBgeXl1bmdldGMnIHRvIHB1c2ggYSAnOycgYmFjaworCW9uIHRoZSBpbnB1dCBzdHJlYW0uCisJKFNUQVJUX0RFQ0xBUkFUT1IpOiBOZXcgdG9rZW4uCisJKGFic2RjbCk6IEhhbmRsZSBTVEFSVF9ERUNMQVJBVE9SLgorCSogY3Atc3Bldy5jIChjb25zdW1lX3Rva2VuKTogUmVuYW1lZCBmcm9tIGBkaXNjYXJkX3Rva2VuJy4KKwkoc3RydWN0IHRva2VuKTogQ2hhbmdlZCBzdHJ1Y3R1cmUgdG8gbWFrZSBpdCBzbWFsbGVyLgorCShzcGV3X2luaXQpOiBSZW5hbWVkIGZyb20gaW5pdF9zcGV3LiAgTm93IGNhbGxlZCBmcm9tIGluaXRfbGV4LgorCShzY2FuX3Rva2Vucyk6IFJlbmFtZWQgZnJvbSBzbHVycF9uZXh0X3Rva2VuLgorCU1hbnkgZnVuY3Rpb25zIHJlZm9ybWF0dGVkIHRvIG1hdGNoIEdDQyBpbmRlbnRhdGlvbiBzdHlsZS4KKworCSogY3AtbGV4LmMgKGFyYml0cmF0ZV9sb29rdXApOiBEb24ndCBndWVzcyBpbiBmYXZvciBvZiB0eXBlIGlmCisJeXljaGFyIGlzICcpJy4KKworCSogY3AtZGVjbC5jIChsb29rdXBfbmFtZSk6IEZpeGVkIHNvIHRoYXQgYWxsIGJpbmRpbmcgbGV2ZWxzIHVzZQorCWBsb29raW5nX2Zvcl90eXBlbmFtZScgY29uc2lzdGVudGx5LgorCSogY3AtdHlwZTIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogSGFuZGxlIG5ldyBjYXNlIHRoYXQgd2UgYXJlCisJY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSBhIG1ldGhvZCBpcyBhcHByb3ByaWF0ZSAoYnV0IHdlIHBhcnNlZCBpdAorCWFzIGEgY3RvciBjYWxsKS4KKworCSogY3AtY2FsbC5jIChDT05TVF9IQVJTSE5FU1MpOiBDaGFuZ2UgYml0IHRoYXQgd2UgdGVzdC4KKwkoY29udmVydF9oYXJzaG5lc3MsY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogQ2FsbCBDT05TVF9IQVJTSE5FU1MKKwljb25zaXNlbnRseSB3aGVuIG5lZWRlZC4KKworCSogY3AtaW5pdC5jIChkZWNsX2NvbnN0YW50X3ZhbHVlKTogS2VlcCBlbmFibGVkIGV2ZW4gd2hlbgorCUNVUlJFTlRfRlVOQ1RJT05fREVDTCBpcyBudWxsLgorCitTYXQgTm92IDMwIDAxOjIzOjM4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9pbml0KTogSnVzdCBjYWxsIHNkYm91dF9vbmVfdHlwZSBvbiBlYWNoIHR5cGUuCisKKwkqIHRtLWF0dDM4Ni5oIChBU01fT1VUUFVUX0FTQ0lJKTogT3V0cHV0IGEgc3BhY2UgYWZ0ZXIgQVNNX0JZVEVfT1AuCisJKiB0bS1zdW4zODYuaDogTGlrZXdpc2UuCisJKiB0bS1pMzg2LmggKEFTTV9PVVRQVVRfQllURSwgQVNNX09VVFBVVF9DSEFSKTogTGlrZXdpc2UuCisJKEFTTV9PVVRQVVRfU0hPUlQsIEFTTV9PVVRQVVRfTE9ORywgQVNNX09VVFBVVF9ET1VCTEUpOiBMaWtld2lzZS4KKwkoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQpOiBMaWtld2lzZS4KKwkqIHRtLWF0dDM4Ni5oIChBU01fQllURV9PUCwgQVNNX1NIT1JULCBBU01fTE9ORywgQVNNX0RPVUJMRSk6CisJRG9uJ3QgZW5kIHdpdGggc3BhY2UuCisJKiB0bS1zdW4zODYuaCwgdG0tYnNkMzg2Lmg6IExpa2V3aXNlLgorCisJKiBjLWxleC5oOiBSZW5hbWVkIGZyb20gYy1wYXJzZS5oLiAgQWxsICNpbmNsdWRlcyBjaGFuZ2VkLgorCSogYy1wYXJzZS5jLCBjLXBhcnNlLmg6IFJlbmFtZWQgZnJvbSBjLXBhcnNlLnRhYi4qLgorCSogTWFrZWZpbGUuaW46IENoYW5nZWQgYWNjb3JkaW5nbHkuCisJKENfT0pCUywgcmVhbGNsZWFuLCBUQUdTKTogVGhlc2UgY2hhbmdlZCB0b28uCisKKwkqIHRtLXN2cjQuaCAoRVhUUkFfU0VDVElPTlMsIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKToKKwlVbmRlZiBiZWZvcmUgZGVmaW5pbmcuCisKKwkqIHRtLWkzODZ2NC5oOiBJbmNsdWRlIHRtLXN2cjQuaC4KKwkoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgU1ZSNCwgYW5kIHNldmVyYWwgYXNzZXJ0aW9ucy4KKwkoTElCX1NQRUMpOiBEZWxldGUgLVF5LiAgTElOS19TUEVDIGhhbmRsZXMgdGhpcy4KKwkoREJYX1JFR0lTVEVSX05VTUJFUik6IE5ldyBtYWNyby4KKworRnJpIE5vdiAyOSAyMjoxNjowNiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQ6IENhbm5vdCB1c2UgIm11bHMiIGFuZCAibXVsaSIgdG8gZG8gd2lkZW5pbmcgbXVsdGlwbHkKKwlmcm9tIEhJbW9kZSB0byBTSW1vZGU7IGRlbGV0ZSB0aGUgMTIgcGF0dGVybnMgdGhhdCB0cnkgdG8gZG8gdGhpcy4KKworRnJpIE5vdiAyOSAyMTozMjo1MiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChidWlsZF90eXBlX2NvbnZlcnNpb24pOiBEb24ndCBhc3N1bWUgdGhhdCBpZgorCVRZUEVfSEFTX3tJTlQsUkVBTH1fQ09OVkVSU0lPTiBpbXBsaWVzIHRoYXQgQ0xBU1NUWVBFX0NPTlZFUlNJT04gZm9yCisJdGhlIGdpdmVuIHR5cGUgY29tYmluYXRpb24gaXMgbm9uLU5VTEwuCisKK0ZyaSBOb3YgMjkgMTY6MDg6MjIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcnRzdHVmZi5jOiBOZXcgZmlsZS4gIE5lZWRzIHBhcGVycyBmcm9tIHJmZy4KKwkqIE1ha2VmaWxlLmluIChjcnRiZWdpbi5vLCBjcnRlbmQubyk6IE5ldyB0YXJnZXRzLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfbWVzc2FnZV9leHByKTogTG90cyBvZiBjbGVhbnVwcy4KKwkoYnVpbGRfb2JqY19tZXRob2RfY2FsbCk6IE5ldyBzdWJyb3V0aW5lLgorCUhhbmRsZXMgbmV3IG9wdGlvbiBORVhUX09CSkNfUlVOVElNRS4KKworCSogZXhwci5jIChkb19qdW1wKTogQW55IExBQkVMX1JFRiBpcyBub256ZXJvLgorCShleHBhbmRfZXhwcik6IENvbnN0cnVjdCBMQUJFTF9SRUZzIHdpdGggUG1vZGUuCisKK0ZyaSBOb3YgMjkgMTQ6NDM6MzIgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMtdGZpbGUuYyAocGFyc2VfZGVmKTogQ2hhbmdlIGFuIGVycm9yIGludG8gYSB3YXJuaW5nLgorCisJKiBtaXBzLm1kIChmaXhfdHJ1bmM/P3NpX29wdCwgbW92Pz9faW50ZXJuYWwpOiBDaGFuZ2UgJyonIGNvbnN0cmFpbnQKKwl0byAnIScgdG8ga2VlcCByZWxvYWQgZnJvbSBhbGxvY2F0aW5nIEZQIHJlZ2lzdGVycyBmcm9tIGhvbGRpbmcKKwlleGNlc3MgaW50ZWdlciB2YWx1ZXMuCisJKGFzaGlmdCByaWdodCBkZWZpbmVfc3BsaXRzKTogRml4IHR5cG8sIHNvIHRoYXQgdGhlIGxvbmcgbG9uZworCWFyaXRobWV0aWMgcmlnaHQgc2hpZnRzIGFyZSByZWNvZ25pemVkLgorCShhbGwgZGVmaW5lX3NwbGl0cyk6IGR1bW15IG91dCBjb25zdHJhaW50cywgc2luY2UgdGhleSBhcmUgbm90IHVzZWQuCisKKwkqIG1pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IEFsbG93IGludCdzIGluIEZQIHJlZ2lzdGVycyBhZ2Fpbiwgbm93CisJdGhhdCAhIGNvbnN0cmFpbnRzIGFyZSB1c2VkLgorCitGcmkgTm92IDI5IDEzOjIwOjEzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZHdhcmZvdXQuYyAob3V0cHV0X2NvbXBpbGVfdW5pdF9kaWUpOiAgRG9uJ3QgaW5jbHVkZSB0aGUgbmFtZQorCW9mIHRoZSBjb21waWxlciB3aGljaCBjb21waWxlZCB0aGUgY29tcGlsZXIgaW4gdGhlIEFUX3Byb2R1Y2VyCisJc3RyaW5nLiAgSXQgZ29vZnMgdXAgY29tcGFyaXNvbnMgb2Ygc3RhZ2UyICYgc3RhZ2UzIG9iamVjdCBmaWxlcy4KKworCSogYy1wYXJzZS55LCBvYmpjLXBhcnNlLnk6IERvbid0IGRlY2xhcmUgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UKKwlhcyBzdGF0aWM7IGl0IGlzIG5vdyBpbiBjLWxleC5jLgorCitGcmkgTm92IDI5IDA1OjE1OjI2IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jICh4cmVmX3RhZyk6IENoZWNrIHRoYXQgVFJFRV9DT0RFIChyZWYpIGlzIGFnZ3IgdHlwZQorCWJlZm9yZSBzdG9yaW5nIGludG8gQ0xBU1NUWVBFX0RFQ0xBUkVEX0NMQVNTIChyZWYpLgorCisJKiBjcC1kZWNsMi5jIChidWlsZF9wdXNoX3Njb3BlKTogRG9uJ3QgbGV0IG5vbi1hZ2dyIHR5cGVzIGFwcGVhciBpbgorCWBjbmFtZTo6Zm5hbWUnIGV4cHJlc3Npb25zLgorCisJKiBjcC1jbGFzcy5jIChyZXNvbHZlc190b19maXhlZF90eXBlX3ApOiBWQVJfREVDTCBhbmQgRklFTERfREVDTAorCW5vZGVzIG9mIEFSUkFZX1RZUEUgbWF5IHJlc29sdmVkIHRvIGZpeGVkIHR5cGUuICBBbHNvIGhhbmRsZSBvdGhlcgorCWNhc2VzIG9mIFdJVEhfQ0xFQU5VUF9FWFBSLgorCisJKiBjcC1zcGV3LmMgKGZyb2JfaWRlbnRpZmllcik6IEhhbmRsZSBjYXNlIG9mIGEgdHlwZSBjb252ZXJzaW9uCisJb3BlcmF0b3IgdGhhdCBjb252ZXJ0cyB0byBhIG5lc3RlZCB0eXBlLgorCisJKiBjcC1leHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogSW4gTkVXX0VYUFIgY2FzZSwgaWYgQVJHUyBpcworCXBlcm1hbmVudCwgYnVpbGQgYSBuZXcgYXJnbGlzdCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBpdCBpbiBwbGFjZS4KKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogQWRkID8/PyB0byBjb21tZW50IGFib3V0IHZpcnR1YWwKKwlmdW5jdGlvbiBjb252ZXJzaW9ucy4gID8/PyBJIGRvbid0IHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNvZGUgaXMKKwlzdXBwb3NlZCB0byBkbyBhbnltb3JlLgorCShjb21wX3RhcmdldF9wYXJtcyk6IElmIFNUUklDVCA8PSAwLCBhY2NlcHQgdHlwZXMgd2hvc2UKKwlUWVBFX01BSU5fVkFSSUFOVHMgYXJlIGVxdWFsLgorCisJKiBjcC1jYWxsLmMgKGNvbnZlcnRfaGFyc2huZXNzKTogUmV2YW1wZWQgdG8gaGFuZGxlIGNvbnRyYXZhcmlhbmNlCisJYmV0dGVyLgorCSogY3AtY2xhc3MuaCAoc3RydWN0IGNhbmRpZGF0ZSk6IERlY2xhcmF0aW9uIG1vdmVkIGZyb20gY3AtdHJlZS5oLgorCisJKiBjcC1jbGFzcy5jIChkdXBsaWNhdGVfdGFnX2Vycm9yKTogTmV3IGZ1bmN0aW9uLgorCSogY3AtcGFyc2UueSAoTEMpOiBDYWxsIGl0IGlmIHdlJ3JlIHJlZGVmaW5pbmcgYSB0YWcuCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE9ubHkgY29weSBERUNMX0FSR1VNRU5UUyBmcm9tIE9MRERFQ0wKKwlpZiBub24tTlVMTC4gIE90aGVyd2lzZSB3ZSBnZXQgbm9uc2Vuc2Ugd2hlbiB3ZSB0cnkgdG8gcGFyc2UKKwlpbmxpbmUgZnVuY3Rpb24gYm9kaWVzIG9mIGNsYXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiByZWRlZmluZWQuCisJKiBjcC1sZXguYyAocmVpbml0X3BhcnNlX2Zvcl9tZXRob2QpOiBJZiB3ZSBnZXQgc29tZSB0ZXh0IGZvciBhCisJY2xhc3MgdGhhdCdzIGJlZW4gcmVkZWZpbmVkLCBmbHVzaCB0aGUgdGV4dC4KKwkqIGNwLXRyZWUuaCAoVFlQRV9SRURFRklORUQpOiBOZXcgZmllbGQgaW4gYHN0cnVjdCBsYW5nX3R5cGUnLgorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogT25seSB3YXJuIGFib3V0IGFuYWNocm9uaXN0aWMKKwljb252ZXJzaW9uIGZyb20gaW50IHRvIGVudW0gaWYgUEVEQU5USUMgaXMgbm9uemVyby4KKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogTm8gbG9uZ2VyIGdpdmUgd2FybmluZworCW1lc3NhZ2VzIGFib3V0IGJpdHdpc2UgY29weTogdGhpcyBpcyBjdXJyZW50bHkgaG93IHRoZSBkZWZhdWx0IFgoWCYpCisJY29uc3RydWN0b3IgaXMgaW1wbGVtZW50ZWQuCisJKiBjcC1pbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IERpdHRvLgorCisJKiBjcC1tZXRob2QuYyAoZHVtcF9pbml0KTogSGFuZGxlIFdJVEhfQ0xFQU5VUF9FWFBSIGFuZCBUQVJHRVRfRVhQUi4KKwkqIHRyZWUuYyAoc2ltcGxlX2NzdF9lcXVhbCk6IEhhbmRsZSBXSVRIX0NMRUFOVVBfRVhQUi4gIENvcnJlY3QKKwloYW5kbGluZyBvZiBUQVJHRVRfRVhQUiBjYXNlLgorCisJKiBjcC1kZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBJZiBERUNMIGlzIHBlcm1hbmVudCwgbWFrZSBpdCdzCisJREVDTF9SRUZFUkVOQ0VfU0xPVCBwZXJtYW5lbnQgYXMgd2VsbC4KKworCSogY3AtY3Z0LmMgKGJ1aWxkX3R5cGVfY29udmVyc2lvbik6IElmIFBFREFOVElDLCBnaXZlIG1lc3NhZ2UgYWJvdXQKKwljb252ZXJzaW9ucyB3aGljaCBjYXN0IGF3YXkgY29uc3QuCisKKwkqIGNwLWRlY2wuYyAoc3RvcmVfcmV0dXJuX2luaXQpOiBJZiBQRURBTlRJQywgZ2l2ZSBlcnJvciBhYm91dCBuYW1lZAorCXJldHVybiB2YWx1ZXMuCisKKwkqIGNwLWluaXQuYyAoZGVjbF9jb25zdGFudF92YWx1ZSk6IERvbid0IHJldHVybiBERUNMX0lOSVRJQUwgaWYKKwlDVVJSRU5UX0ZVTkNUSU9OX0RFQ0wgaXMgbnVsbCBvciBpZiB0aGUgaW5pdGlhbGl6ZXIgaXMgYQorCUNPTlNUUlVDVE9SLgorCitUaHUgTm92IDI4IDA1OjI5OjUyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBXaGVuIHBhc3Npbmcgb2JqZWN0cyBieQorCWludmlzaWJsZSByZWZlcmVuY2UsIGNvcnJlY3RseSBjb21wdXRlIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUKKwlhbGxvY2F0ZWQgaW4gdGhlIHBzZXVkby1mcmFtZSB3ZSBjcmVhdGUgZm9yIHRoZSBpbmxpbmUgZnVuY3Rpb24uCisKKwkqIGNwLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogQWRkIGNhbGwgdG8KKwlgbWFya19pbmxpbmVfZm9yX291dHB1dCcgdGhhdCBnb3QgbG9zdCBpbiBOb3YgMjUgY2hhbmdlLgorCisJKiBjcC1kZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogSWYgdGhlIHZhbHVlIG9mIGEgbmFtZSBpcyBhbgorCUFERFJfRVhQUiwgbG9vayBpbnNpZGUgdG8gZ2V0IHRoZSBfREVDTCBub2RlLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgY29udmVydCB0eXBlIG9mIG9wZXJhdG9ycyBuZXcKKwlhbmQgZGVsZXRlIHRvIE1FVEhPRF9UWVBFOyB0aGV5IHJlbWFpbiBGVU5DVElPTl9UWVBFcy4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IFRSRUVfUkVHREVDTCBiaXQgb24KKwlSRVNVTFRfREVDTCBpZiByZXN1bHQgc3RhcnRzIGxpZmUgaW4gYSByZWdpc3Rlci4KKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogRG9uJ3QgdHJlYXQgYSBDT05WRVJUX0VYUFIgYXMKKwlhIE5PUCB3aGVuIGl0IG9yIHRoZSBleHByZXNzaW9uIGluc2lkZSBpdCBpcyBvZiBSRUZFUkVOQ0VfVFlQRS4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFRlc3QgREVTVFJVQ1RPUl9OQU1FX1Agb24KKwlERUNMX0FTU01CTEVSX05BTUUsIG5vdCBERUNMX05BTUUuCisKK1dlZCBOb3YgMjcgMTM6NDk6MTAgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjc2UuYyAoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBDb3JyZWN0IGhhbmRsaW5nIG9mCisJQ09NUEFSRSBhcyBmaXJzdCBhcmd1bWVudC4gIEFsd2F5cyBzdHJpcCBpdCBvZmYuICBEb24ndCBpbnZlcnQKKwlyZXR1cm4gdmFsdWUgZm9yIEVRIHdoZW4gIUhBVkVfY2MwLgorCitUaHUgTm92IDI4IDIwOjA4OjE1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ21vbi5jOiBOZXcgZmlsZS4KKworVGh1IE5vdiAyOCAxNTowMjoyNCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIFNFVCk6IE5ldmVyIG1ha2UgYSBwYXJhZG94aWNhbCBTVUJSRUcgb2YKKwlhIFJFRyB1bmxlc3MgdGhlIFNVQlJFRyBhbmQgUkVHIG9jY3VweSB0aGUgc2FtZSBudW1iZXIgb2Ygd29yZHMuCisKKwkqIGVtaXQtcnRsLmM6IEluY2x1ZGUgZmxhZ3MuaC4KKwkob3BlcmFuZF9zdWJ3b3JkKTogQWx3YXlzIGxvb2sgaW5zaWRlIGZsb2F0aW5nIGlmIC1mcHJldGVuZC1mbG9hdC4KKwkqIGZpbmFsLmMgKHNwbGl0X2RvdWJsZSk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4gKGVtaXQtcnRsLm8pOiBJbmNsdWRlcyBmbGFncy5oLgorCisJKiBjLWxleC5jICh5eWxleCk6IEFkZCBnb3RvIHRvIGBMJyBjYXNlLgorCitUaHUgTm92IDI4IDA4OjM3OjAyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG0tbWlwcy5oIChBU01fT1VUUFVUX0lOVCk6IFVzZSBgZG8gey4uLn0gd2hpbGUgKDApJyBzbyBpdCBjYW4gYmUKKwl1c2VkIGluIGlmL2Vsc2UgY29uc3RydWN0cy4KKworVGh1IE5vdiAyOCAwMDoyMzoyNiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuaCAoQlVJTFRfSU5fRlJBTUVfQUREUkVTUywgQlVJTFRfSU5fUkVUVVJOX0FERFJFU1MpOgorCU5ldyBmdW5jdGlvbiBjb2Rlcy4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlY2xhcmUgdGhlIGZ1bmN0aW9ucy4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBJbXBsZW1lbnQgdGhlbS4KKworCSogZ2NjLmM6IFBhc3MgdG8gbGQgYWxsIHRoZSBkaXJzIGluIExJQlJBUllfUEFUSDoKKwkobGlicmFyeV9wcmVmaXgpOiBOZXcgbGlzdCBvZiBwcmVmaXhlcy4KKwkocHJvY2Vzc19jb21tYW5kKTogUHV0IGRpcnMgZnJvbSBMSUJSQVJZX1BBVEggb24gdGhhdCBsaXN0LgorCShkb19zcGVjXzEpOiAlRCBvdXRwdXRzIHRob3NlIGRpcnMuCisJKGxpbmtfY29tbWFuZF9zcGVjKTogVXNlICVEIGFmdGVyIHBhc3NpbmcgLUwgb3B0aW9ucy4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IERvbid0IHJlcXVpcmUgbWFjaGluZSBzdWZmaXgKKwlmb3IgZGlycyBmcm9tIENPTVBJTEVSX1BBVEggb3IgTElCUkFSWV9QQVRILgorCisJKiBjY2NwLmMgKG1haW4pOiBDX0lOQ0xVREVfUEFUSCwgZXRjLiwgYWRkIGRpcnMgcmF0aGVyIHRoYW4gcmVwbGFjaW5nLgorCisJKiBVc2UgdGhlIFRZUEVfREVDTHMgdG8gZHJpdmUgZGJ4IGFuZCBzZGIgb3V0cHV0IG9mIHR5cGUgdGFncy4KKwkqIHRvcGxldi5jIChyZXN0X29mX3R5cGVfY29tcGlsYXRpb24pOiBOZXcgZnVuY3Rpb24uCisJKGNvbXBpbGVfZmlsZSk6IFBhc3MgbGlzdCBvZiBpbml0aWFsIGRlY2xzIHRvIGRieG91dF9pbml0LCBzZGJvdXRfaW5pdC4KKwkodmFyaW91cyk6IERvbid0IGNhbGwgZ2V0XypfdHlwZXMuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2luaXQpOiBHZXQgaW5pdGlhbCB0eXBlcyBmcm9tIHRoYXQgbGlzdC4KKwkqIHNkYm91dC5jIChzZGJvdXRfaW5pdCk6IExpa2V3aXNlLgorCSogc2Rib3V0LmMsIGRieG91dC5jOiBEb24ndCBjYWxsIGdldF8qX3R5cGVzLgorCSgqb3V0X3R5cGVkZWZzKTogTmV3IHN1YnJvdXRpbmVzLgorCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QsIGZpbmlzaF9lbnVtKTogQ2FsbCByZXN0X29mX3R5cGVfY29tcGlsYXRpb24uCisJKHB1c2h0YWdzKTogUmVjb3JkIFRZUEVfU1RVQl9ERUNMLgorCSogdHJlZS5oIChUWVBFX1NUVUJfREVDTCk6IE5ldyBtYWNyby4KKwkqIHN0b3ItbGF5b3V0LmMgKGNoYWluX3R5cGUsIGdldF9wZXJtYW5lbnRfdHlwZXMsIGdldF90ZW1wb3JhcnlfdHlwZXMpOgorCURlbGV0ZWQuCisJKHNhdmVfc3RvcmFnZV9zdGF0dXMsIHJlc3RvcmVfc3RvcmFnZV9zdGF0dXMpOiBEb24ndCBmcm9iIGNoYWlucy4KKwkobGF5b3V0X3R5cGUpOiBEb24ndCBjYWxsIGNoYWluX3R5cGUuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9maWVsZHMpOiBPdXRwdXQgYC8nLXNwZWMgYWZ0ZXIgdHlwZSB0YWcKKwlvbmx5IGlmIHJlYWxseSBuZWVkZWQuCisKK1dlZCBOb3YgMjcgMTg6NTI6NTUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogVHlwbyBpbiBleHBhbmRfZW5kX2JpbmRpbmdzLCBpbiBCSU5EX0VYUFIgY2FzZS4KKworV2VkIE5vdiAyNyAyMzoxMDo0OCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IFVzZSBzYXZlc3RyaW5nLCBub3Qgc3RyZHVwLgorCitXZWQgTm92IDI3IDE3OjEwOjE3IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmMgKG1pcHNfbG9hZF9yZWczLCBtaXBzX2xvYWRfcmVnNCk6IE5ldyBnbG9iYWwgdmFyaWFibGVzIHRvCisJZW5hYmxlIHNjaGVkdWxpbmcgdGhlIHNlY29uZCBub3AgZm9yIHRoZSBtZmhpIGFuZCBtZmxvIGluc3RydWN0aW9ucy4KKwkobWlwc19oYXJkX3JlZ25vX21vZGVfb2spOiBOZXcgZ2xvYmFsIGFycmF5IHRvIGdpdmUgdGhlIHJlc3VsdHMKKwlvZiBIQVJEX1JFR05PX01PREVfT0sgZm9yIGVhY2ggcmVnaXN0ZXIgYW5kIG1vZGUuCisJKG1pcHNfZmlsbF9kZWxheV9zbG90KTogSW5zdGVhZCBvZiB0YWtpbmcgdGhlIG51bWJlciBvZiBub3BzIGFzIGEKKwlwYXJhbWV0ZXIsIHRha2UgYW4gZW51bWVyYXRpb24sIGdpdmluZyB3aGF0IGtpbmQgb2YgZGVsYXkgdGhpcyBpcy4KKwlJZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBhIGxhYmVsLCBwdXQgbm9wcyBiZWZvcmUgbGFiZWwsIG5vdAorCWFmdGVyLiAgQWRkIHN1cHBvcnQgZm9yIG1mbG8vbWZoaSwgd2hpY2ggbmVlZCAyIG5vcHMgaWYgdGhlIG5leHQKKwlpbnN0cnVjdGlvbiB3b3VsZCBtb2RpZnkgdGhlIGhpL2xvIHJlZ2lzdGVycy4KKwkobWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzKTogbWlwc19maWxsX2RlbGF5X3Nsb3QgY2FsbGluZworCXNlcXVlbmNlIGNoYW5nZXMuICBQYXNzIG1mbG8vbWZoaSB0byBzY2hlZHVsZSBub3BzLgorCShtaXBzX21vdmVfMndvcmRzKTogTW92ZSBESW1vZGUgdG8vZnJvbSBoaSBhbmQgbG8gcmVnaXN0ZXJzIGlzIG5vdworCXN1cHBvcnRlZC4KKwkoZnVuY3Rpb25fYXJnKTogQ29ycmVjdGx5IGFsaWduIGxvbmcgbG9uZyBwYXJhbWV0ZXJzLCBqdXN0IGxpa2UKKwlkb3VibGVzLiAgQWxzbyBjb3JyZWN0IHR5cG8gaW4gZGVidWcgY29kZS4gIEJ1ZyByZXBvcnQgZnJvbQorCWxpc2FATWljcm9Vbml0eS5jb20uCisJKG92ZXJyaWRlX29wdGlvbnMpOiBJbml0aWFsaXplIG1pcHNfaGFyZF9yZWdub19tb2RlX29rLiAgUmVzdHJpY3QKKwlpbnQncyBmcm9tIGdvaW5nIGluIHRoZSBGUCByZWdpc3RlcnMsIHRvIGxpbWl0IHRoZSByZWdpc3RlcgorCWFsbG9jYXRvciBmcm9tIGFsbG9jYXRpbmcgdGhlbSBpbnN0ZWFkIG9mIHVzaW5nIG1lbW9yeS4gIEFsc28sIG1ha2UKKwl0aGUgc3BlY2lhbCByZWdpc3RlcnMgKEhJLCBMTywgRlBTVykgb25seSBhY2NlcHQgZnVsbCBzaXplZCBpbnRzLCBvcgorCWEgZG91YmxlIGludCBmb3IgdGhlIEhJOkxPIGNvbWJpbmF0aW9uLgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBEb24ndCBzZXQgdGhlIGluaXRpYWxpemVkIG1lbWJlciB1bnRpbCByZWxvYWQKKwloYXMgY29tcGxldGVkLCBzaW5jZSBvdGhlcndpc2UgdGhlIGluZm9ybWF0aW9uIG1heSBjaGFuZ2UuCisKKwkqIG1pcHMubWQgKHZhcmlvdXMpOiBBZGQgNjQgYml0IGludGVnZXIgb3BlcmF0aW9ucyBmb3IgYWRkaXRpb24sCisJc3VidHJhY3Rpb24sIG5lZ2F0aW9uLCBhbmQsIGluY2x1c2l2ZSBvciwgZXhjbHVzaXZlIG9yLCBvbmUncworCWNvbXBsZW1lbnQsIHNoaWZ0cywgYW5kIG5vci4gIEFkZCAzMngzMi0+NjQgYml0IHN1cHBvcnQgZm9yCisJbXVsdGlwbHksIHdoaWNoIHRoZSBjb21waWxlciB0aGVuIHVzZXMgdG8gY29uc3RydWN0IDY0IGJpdAorCW11bHRpcGxpZXMuCisJKG11bHNpMyk6IEJyZWFrIG11bCBpbnRvIGl0J3MgdHdvIGluc3RydWN0aW9ucywgYW5kIHNjaGVkdWxlIHRoZQorCXR3byBub3BzIG5lZWRlZCBmb3IgdGhlIG1mbG8gaW5zdHJ1Y3Rpb24uICBEb24ndCBhbGxvdyBhbiBpbnRlZ2VyCisJbXVsdGlwbGllciBhbnltb3JlLgorCShmZnNzaTIpOiBEZWxldGUgZGVmaW5lX2V4cGFuZCwgYW5kIHVzZSBhIHNlY29uZCBjbG9iYmVyJ2VkIHJlZ2lzdGVyCisJdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGlucHV0LCBpbnN0ZWFkIG9mIChjbG9iYmVyIChtYXRjaF9kdXAgMSkpLgorCShtb3ZzaV91bHcpOiBDaGFuZ2UgbWlwc19maWxsX2RlbGF5X3Nsb3QgY2FsbGluZyBzZXF1ZW5jZS4KKwkobW92ZGlfaW50ZXJuYWwpOiBBbGxvdyBESW1vZGUgbW92ZSBmcm9tIEhJL0xPIHRvL2Zyb20gR1AgcmVnaXN0ZXJzLgorCShtb3ZkaSBkZWZpbmVfc3BsaXQpOiBBZGQgYSBkZWZpbmVfc3BsaXQgdG8gc2VwYXJhdGUgdGhlIHR3byBwYXJ0cworCW9mIERJbW9kZSByZWdpc3RlciBwYWlycyB3aGVuIHVzaW5nIEdQIHJlZ2lzdGVycy4KKwkobW92ZGYgZGVmaW5lX3NwbGl0KTogQWRkIGEgZGVmaW5lX3NwbGl0IHRvIHNlcGFyYXRlIHRoZSB0d28gcGFydHMKKwlvZiBERm1vZGUgcmVnaXN0ZXIgcGFpcnMgd2hlbiB1c2luZyBHUCByZWdpc3RlcnMuCisJKG1vdj8/X2ludGVybmFsKTogQ2hhbmdlIGNvbmRpdGlvbiB0byBjYWxsIG1lbW9yeV9vcGVyYW5kLCBpbnN0ZWFkCisJb2YganVzdCBjaGVja2luZyBmb3IgTUVNLCB3aGljaCBkaXNhbGxvd3MgKHN1YnJlZyAoTUVNKSkgZHVyaW5nCisJdGhlIGludGVybWVkaWF0ZSBwYXJ0cyBvZiB0aGUgY29tcGlsYXRpb24uICBSZXBvcnRlZCBieQorCWxpc2FATWljcm9Vbml0eS5jb20uCisJKG5lZ3NpMik6IFR1cm4gYmFjayBpbnRvIGEgcmVhbCBpbnNuIGluc3RlYWQgb2YganVzdCBhCisJZGVmaW5lX2V4cGFuZCBmb3Igc3Vic2kzLgorCShvbmVfY21wbHNpMik6IFR1cm4gYmFjayBpbnRvIGEgcmVhbCBpbnNuIGluc3RlYWQgb2YganVzdCBhCisJZGVmaW5lX2V4cGFuZCBmb3Igbm9yc2kzLgorCShhbmRzaTMsIGlvcnNpMywgeG9yc2kzKTogQmUgbW9yZSBsaWJlcmFsIHRoYW4gdGhlIHJlYWwgbWFjaGluZSwgYW5kCisJYWxsb3cgMzIgYml0IGNvbnN0YW50cyB0byBpbXByb3ZlIHRoZSBjb2RlIGdlbmVyYXRlZCBmb3IgYml0ZmllbGRzLAorCWF0IHRoZSBleHBlbnNlIG9mIHBvdGVudGlhbGx5IG5vdCBtb3ZpbmcgdGhlIGNvbnN0YW50IG91dCBvZiBsb29wcy4KKwkodmFyaW91cyk6IEFkZCA9IGNvbnN0cmFpbnQgdG8gYWxsIGNsb2JiZXJzLgorCShmaXhfdHJ1bmMqKTogR28gYmFjayB0byBvbGQgbWV0aG9kIG9mIHVzaW5nIHR3byBjbG9iYmVycywgc2luY2UKKwl1bm9wdGltaXplZCBjb21waWxlcyBjYWxsIGFib3J0IG90aGVyd2lzZSwgd2hlbiByZXR1cm5pbmcgdGhlIHJlc3VsdAorCW9mIHRydW5jYXRpbmcgYSBmbG9hdCBhcyBhIGZ1bmN0aW9uIHJlc3VsdC4KKworCSogdG0tbWlwcy5oIChkZWxheV90eXBlKTogTmV3IGVudW0gdG8gZXhwcmVzcyBkaWZmZXJlbnQgdHlwZXMgb2YKKwlkZWxheSBzbG90cy4KKwkobWlwc19sb2FkX3JlZzMsIG1pcHNfbG9hZF9yZWc0KTogRGVjbGFyYXRpb25zIGZvciBtb3JlIHJlZ2lzdGVycworCXRvIGNoZWNrIGZvciBuZWVkaW5nIG5vcHMuICBVc2VkIGJ5IG11bHRpcGx5L2RpdmlkZSB0byBzY2hlZHVsZQorCXRoZSB0d28gbm9wcyBuZWVkZWQgYWZ0ZXIgbWZoaS9tZmxvIGlmIHRoZSBuZXh0IGluc3RydWN0aW9uIHdvdWxkCisJY2xvYmJlciB0aGUgcmVnaXN0ZXIuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgLW1zb2Z0LWZsb2F0LCBkaXNhYmxlIGFsbCBGUAorCXJlZ2lzdGVycy4KKwkoTUFTS19ERUJVR19HKTogQWRkIGNvbW1lbnQgc2F5aW5nIC1tZGVidWdnIHR1cm5zIG9mIG5ldyBESW1vZGUKKwlwYXR0ZXJucywgaW4gY2FzZSB0aGUgY29kZSBpcyB3cm9uZy4KKwkoSEFSRF9SRUdOT19OUkVHUyk6IEFsbCBGUCByZWdpc3RlcnMgdXNlIHJlZ2lzdGVyIHBhaXJzLCBzbyB0aGF0CisJU0YgaW4gYSBHUCByZWdpc3RlciB0YWtlcyBvbmx5IG9uZSByZWdpc3RlciwgYW5kIFNJIGluIGEgRlAKKwlyZWdpc3RlciB0YWtlcyAyLgorCShIQVJEX1JFR05PX01PREVfT0spOiBDaGFuZ2UgbWFjcm8gdG8gcmVmZXJlbmNlIHRoZSBhcnJheQorCW1pcHNfaGFyZF9yZWdub19tb2RlX29rLCB3aGljaCBpcyBub3cgYnVpbHQgaW4gb3ZlcnJpZGVfb3B0aW9ucy4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogJ04nIGlzIG5vdyBmb3IgbmVnYXRpdmUgbnVtYmVycywgJ08nIGlzCisJYW4gZXhhY3QgcG93ZXIgb2YgMiwgYW5kICdQJyBpcyBub3cgZm9yIHBvc2l0aXZlIG51bWJlcnMuCisJKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBJZiAtbXNvZnQtZmxvYXQsIG5ldmVyIHByZWZlciBhIEZQCisJcmVnaXN0ZXIuCisJKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1NfRk0pOiBEZWxldGUsIHNpbmNlIG5vYm9keSB1c2VzIGl0LgorCShGSU5BTF9QUkVTQ0FOX0lOU04pOiBDaGVjayBmb3IgbWlwc19sb2FkX3JlZzMgYW5kIG1pcHNfbG9hZF9yZWc0CisJYmVpbmcgbWVudGlvbmVkLiAgQWxzbyBhZGQgYSBtaXNzaW5nIHRhYiB3aGVuIG1vcmUgdGhhbiBvbmUgZGVsYXkKKwlzbG90LgorCShDT05TVF9DT1NUUyk6IE1ha2UgYWxsIGNvbnN0YW50IGludHMgY29zdCAwIHRvIGxvd2VyIHJlZ2lzdGVyCisJcHJlc3N1cmUgYWNjb3JkaW5nIHRvIFJpY2hhcmQgS2VubmVyLgorCShSVFhfQ09TVFMpOiBBZGp1c3QgY29zdHMgZm9yIERJLCBTRiwgYW5kIERGIG1vZGVzLCBhbmQgYWRkIEFCUy9GRlMKKwljb3N0cyBhcyB3ZWxsLgorCShSRUdJU1RFUl9NT1ZFX0NPU1RTKTogQnVtcCBjb3N0cyBmb3IgbW92aW5nIGJldHdlZW4gcmVnaXN0ZXIKKwljbGFzc2VzLCBzbyB0aGF0IHJlbG9hZCBkb2Vzbid0IHRyeSB0byBzdG9yZSBpbnQgdHlwZSB2YWx1ZXMgaW4gdGhlCisJZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgorCitXZWQgTm92IDI3IDE1OjAxOjUyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLWdjYy5jb206IFJlbmFtaW5nIG9mIG91dC12YXguYy4KKwkqIG1ha2UtY2MxLmNvbTogTGluayBkYnhvdXQgd2l0aCBhbGwgbGFuZ3VhZ2VzLiAgQWRkIGNwLXNwZXcuCisKKwkqIGNjY3AuYyAoaW5jbHVkZV9kZWZhdWx0c19hcnJheSk6IEZpeCB0eXBvLgorCisJKiBnc3RkZGVmLmg6IEhhbmRsZSBfU1REREVGX0hfLgorCisJKiBjb25maWd1cmUuYmF0LCBNYWtlZmlsZS5kb3M6IE5ldyBmaWxlcy4KKworCSogYy1sZXguYzogTmV3IGZpbGUuICBBbGwgc3Vicm91dGluZXMgbW92ZWQgaGVyZS4KKwkoeXlsZXgpOiBTbWFsbCBkaWZmcyBiZXR3ZWVuIEMgYW5kIE9CSkMgbWVyZ2VkLgorCSogYy1wYXJzZS55LCBvYmpjLXBhcnNlLnk6IERlbGV0ZWQgZnJvbSBoZXJlLgorCSogYy1sYW5nLmMgKGxvb2t1cF9pbnRlcmZhY2UpOiBOZXcgc3R1Yi4KKwkqIE1ha2VmaWxlLmluIChjLWxleC5vKTogTmV3IHJ1bGUuCisJKE9CSkNfT0JKUywgQ19PQkpTKTogQ2hhbmdlZCBmb3IgbmV3IGZpbGVzLgorCitXZWQgTm92IDI3IDEzOjM0OjE1IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55ICh5eWxleCk6IERvbid0IGFzc3VtZSB0aGF0IGxvbmcgaXMgMzIgYml0cyBhbmQgbG9uZworCWxvbmcgaXMgNjQgYml0cyB3aGVuIHdhcm5pbmcgZm9yIG91dCBvZiByYW5nZSBpbnRlZ2VyIGNvbnN0YW50cywKKwlhbmQgd2hlbiBjcmVhdGluZyBhIHRyZWUgdG8gcmVwcmVzZW50IGludGVnZXIgY29uc3RhbnRzLgorCSogY3AtbGV4LmMgKHJlYWxfeXlsZXgpOiBMaWtld2lzZS4KKwkqIG9iamMtcGFyc2UueSAoeXlsZXgpOiBMaWtld2lzZS4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uLCBBU0hJRlQgY2FzZSk6IFByZXZlbnQgc2hpZnQgYnkKKwlIT1NUX0JJVFNfUEVSX0lOVCBmb3IgaW5lcXVhbGl0eSBjb21wYXJpc29ucy4KKworCSogZm9sZC1jb25zdC5jIChvcGVyYW5kX2VxdWFsX3ApOiBBcmd1bWVudHMgYXJlIG5vdCBlcXVhbCBpZgorCXNpZ25lZG5lc3MgZGlmZmVycy4gIENvbnZlcnNpb25zIGRvbid0IG1hdGNoIGlmIHNpZ25lZG5lc3MgZGlmZmVycy4KKworCSogc3BhcmMubWQgKG1vdnNpLCBtb3ZoaSwgbW92cWksIG1vdmRpKTogUHJvaGliaXQgbWF0Y2hlcyB0aGF0CisJd291bGQgcmVxdWlyZSByZWxvYWRpbmcgYnkgdGhlIHVzZSBvZiBjb25kaXRpb25zLgorCisJKiBhbGxvY2EuYyAoYWxsb2NhKTogQWRkIHBhcmVucyB0byBtYWtlIHByZWNlZGVuY2UgY2xlYXJlci4KKworCSogdG0tbmV3cy5oIChQUklOVF9PUEVSQU5EKTogQWRkIDY4MDQwIHN1cHBvcnQgc28gdGhhdCB0aGUgY29tcGlsZXIKKwl3aWxsIGJvb3RzdHJhcC4KKworV2VkIE5vdiAyNyAwOTo0MToxMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIE1JTl9FWFBSKTogRml4IHR5cG8gaW4gb3BlcmFuZCBudW1iZXIKKwlpbiBzYWZlX2Zyb21fcCBjYWxsLgorCisJKiByZWNvZy5jIChpbmRpcmVjdF9vcGVyYW5kKTogQ29ycmVjdGx5IGhhbmRsZSBjYXNlIHdoZXJlIHdlIGhhdmUKKwlhIChzdWJyZWcgKG1lbSBYKSBDKSBhZnRlciByZWxvYWQuCisKK1R1ZSBOb3YgMjYgMTY6MjQ6MDMgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfZW51bWVyYXRpb25fdHlwZV9kaWUpOiBIYW5kbGUgYSBHTlUgQyAKKwlsYW5ndWFnZSBleHRlbnNpb246IGluY29tcGxldGUgZW51bSB0eXBlcy4KKworCSogZHdhcmZvdXQuYyAob3V0cHV0X3R5cGUpOiBGaXhlZCBidWcgd2hpY2ggY2F1c2VzIERJRXMgZm9yCisJZmlsZS1zY29wZSB0YWdnZWQgdHlwZXMgdG8gYmUgZ2VuZXJhdGVkIGluIGEgbG9jYWwtc2NvcGUKKwl1bmRlciBzb21lIGNvbmRpdGlvbnMuCisKKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2luaXQsIGR3YXJmb3V0X2ZpbmlzaCk6IE1vdmVkIGNvZGUgd2hpY2gKKwlnZW5lcmF0ZXMgbW9zdCBvZiB0aGUgLmRlYnVnX2FyYW5nZXMgZW50cmllcyBmcm9tIGR3YXJmb3V0X2luaXQKKwlpbnRvIGR3YXJmb3V0X2ZpbmlzaCB0byBhdm9pZCBtNjhrIGFzc2VtYmxlciBidWcuCisKKwkqIE1ha2VmaWxlLmluIChFWFRSQV9QQVJUUyk6IE5ldyBwYXJhbWV0ZXIuCisJKGluc3RhbGwtY29tbW9uKTogQ29tcGlsZSB0aGUgdGhpbmdzIGluIEVYVFJBX1BBUlRTLgorCShHQ0NfUEFTU0VTLCBHQ0NfUEFSVFMpOiBOZXcgdmFyaWFibGVzLgorCShTVEFHRVNUVUZGLCBuYXRpdmUsIGVucXVpcmUsIGVucXVpcmUubyk6IFVzZSB0aGVtLgorCShwcm90b2l6ZSwgcHJvdG9pemUubywgdW5wcm90b2l6ZSwgdW5wcm90b2l6ZS5vLCBTWVNDQUxMUy5jLlgpOgorCShnbnVsaWIyLnJlYWR5LCBjb2xsZWN0MiwgY29sbGVjdDIubywgZ2V0b3B0Lm8sIGdldG9wdDEubyk6IExpa2V3aXNlLgorCisJKiB0bS1zdnI0LmggKENQUF9QUkVERUZJTkVTKTogRG9uJ3QgZGVmaW5lIHRoaXMgaGVyZS4gIFVuZGVmIGl0CisJc28gdGhhdCBvdGhlciBmaWxlcyB3aGljaCBpbmNsdWRlIHRoaXMgb25lIHdpbGwgYmUgZm9yY2VkIHRvCisJZGVmaW5lIGl0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBzcGVjaWZpYyB0YXJnZXQgYW5kIE9TLgorCShDUFBfU1BFQyk6IERlbGV0ZWQuCisJKExJQl9TUEVDKTogQWRkIGNydGVuZC5vIGFzIGxhc3QgdGhpbmcgbGlua2VkIGluIG9uIGVhY2ggbGluay1zdGVwLgorCShTVEFSVEZJTEVfU1BFQyk6IEFkZCBjcnRiZWdpbi5vIGFzIHRoZSBmaXJzdCB0aGluZyBsaW5rZWQgaW4uCisJKE5PX0RPTExBUl9JTl9MQUJFTCk6ICBBZGRlZCBkZWZpbmUuICBNb3N0IHN2cjQncyBkb24ndCBzdXBwb3J0ICQuCisKKwkqIHRtLXN2cjQuaDogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIC5jdG9ycyBhbmQgLmR0b3JzIHNlY3Rpb25zCisJKGFzIGZvciB0aGUgbTg4aykuCisJKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsIEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IE5ldyBtYWNyb3MuCisJKiB0bS1zdnI0LmggKEhFUkVfQVNNX09QLCBBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKTogIERlbGV0ZWQKKwlkZWZpbmUgb2YgSEVSRV9BU01fT1AgYW5kIG1hZGUgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSBub3QKKwl0cnkgdG8gdXNlIGEgZG90IHdoZW4gY29tcHV0aW5nIGEgZnVuY3Rpb24ncyBzaXplIGluIGEgLnNpemUKKwlkaXJlY3RpdmUgKGJlY2F1c2UgVG9tIFdvb2Qgc2F5cyB0aGF0IDg4b3BlbiBkb2Vzbid0IGFwcHJvdmUKKwlvZiBkb3QgYXMgYW4gYXNtIG9wZXJhbmQpLgorCisJKiB4LWdlbml4LCB4LWkzODZzY28sIHgteGVuaXggKElOU1RBTEwpOiBEZWZpbmUgYXMgY3AuCisKK1R1ZSBOb3YgMjYgMTY6MjQ6MDMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBQYXNzIC1BKiB0byBjcHAuCisKKwkqIE1ha2UgbmFtZXMgdW5pcXVlIGlmIHVucGFja2VkIG9uIE1TRE9HLgorCSogY29uZmlnLyouYzogYG91dC0nIHJlbW92ZWQgZnJvbSBhbGwgZmlsZSBuYW1lcyBvdXQtKi5jLgorCSogeC1ocCo6IFJlbmFtZWQgZnJvbSB4LWhwOWsqLgorCSogdG0tY29udjEuaCwgdG0tY29udjIuaDogUmVuYW1lZCBmcm9tIHRtLWNvbnZleCouaC4KKwkqIHRtLWhwKi5oOiBgOWsnIHJlbW92ZWQgZnJvbSB0aGVzZSBuYW1lcy4KKwkqIHRtLWlzaSouaDogYDY4JyByZW1vdmVkIGZyb20gdGhlc2UgbmFtZXMuCisJKiB0bS1pODYwYi5oLCB0bS1pODYwYmcuaDogYHNkJyByZW1vdmVkLgorCSogdG0taTg2MGczLmg6IFJlbmFtZWQgZnJvbSB0bS1pODYwdjNnLmguCisJKiB0bS1pMzg2c3VuLmg6IFJlbmFtZWQgZnJvbSB0bS1zdW4zODZpLmguCisJKiB0bS1zdW4zbzMuaCwgdG0tc3VuNG8zLmg6IFdlcmUgdG0tc3VuKm9zMy5oLgorCSogdG0tc3VuM24zLmg6IFdhcyB0bS1zdW4zb3MzbmYuaC4KKwkqIHRtLXN1bjNuLmg6IFdhcyB0bS1zdW4zLW5mcC5oLgorCSogdG0tc3VuMm80Lmg6IFdhcyB0bS1zdW4yb3M0LmguCisJKiB4bS1ocDMyMC5oOiBXYXMgeG0taHA5azMyMC5oLgorCSogeG0taTM4NnN1bi5oOiBXYXMgeG0tc3VuMzg2aS5oLgorCSogY29uZmlndXJlOiBBZGp1c3QgZm9yIHRob3NlIHJlbmFtaW5ncy4KKworCSogY29uZmlndXJlIChtNjgwMDAtaHAtaHB1eCopOiBVc2UgeG0taHAzMjAuaC4KKworCSogc3RtdC5jIChleHBhbmRfdmFsdWVfcmV0dXJuKTogTmV3IHN1YnJvdXRpbmUuCisJKGV4cGFuZF9yZXR1cm4pOiBVc2UgdGhhdC4KKworCSogbWFrZS1nY2MuY29tOiBOZXcgbmFtZSBmb3IgbWFrZS5jb20uCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBSZXR1cm4gbGlzdCBvZiBzdGF0aWMgbWVtYmVycy4KKwkobGF5b3V0X3R5cGUpOiBMYXkgdGhlbSBvdXQgaGVyZS4KKworCSogZXhwbWVkLmMgKGluaXRfZXhwbWVkKTogVXNlIDMgYXMgc2hpZnQgY291bnQgZm9yIHNoaWZ0X2Nvc3QuCisKKwkqIHgtc2NvOiBGaWxlIGRlbGV0ZWQuCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IEFsd2F5cyBiZSBicmllZiBmb3IgdmVjdG9yIGVsdHMuCisKK1R1ZSBOb3YgMjYgMDc6NDI6NDEgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZpeCB0eXBvIGludm9sdmluZyB+UklEX1NUQVRJQy4KKworTW9uIE5vdiAyNSAyMTo1MTowOSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbik6IElmIGJvdGggb3BlcmFuZHMgYXJlIFZPSURtb2RlLAorCXB1dCBmaXJzdCBvcGVyYW5kIGludG8gcmVnaXN0ZXIsIG5vdCBzZWNvbmQuCisKKwkqIGFsbGlhbnQubWQsIGdtaWNyby5tZCwgaTM4Ni5tZCwgbTY4ay5tZCwgbnMzMmsubWQsIHB5ci5tZDoKKwlEb24ndCBhbGxvdyBhIGNvbnN0YW50IGFzIHRoZSBmaXJzdCBvcGVyYW5kIHRvIHRzdHh4IGluc25zLgorCSogdGFob2UubWQsIHZheC5tZDogTGlrZXdpc2UuCisJKiBjb252ZXgubWQ6IFJlbW92ZSBlcnJvbmVvdXMgY29tbWVudCBvbiB0c3RzaS4KKworTW9uIE5vdiAyNSAyMDo1MTowMCAxOTkxICBESiBEZWxvcmllICAoZGpAY3Ryb24uY29tKQorCisJKiBjY2NwLmMgKG1haW4pOiBMb29rIGluIGVudiB2YXJzIHRvIG92ZXJyaWRlIGhlYWRlciBkaXIgbGlzdC4KKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBMaWtld2lzZS4KKworCSogZ2NjLmMgKGV4ZWN1dGUpOiBBbHRlcm5hdGUgd2F5IHRvIGdldCBzdGF0dXMgb24gTVNET1MuCisJRXJyb3IgZm9yIC1waXBlIG9uIE1TRE9TLgorCShwZXhlY3V0ZSk6IEFsdGVybmF0ZSBkZWZpbml0aW9uIGZvciBNU0RPUy4KKwkoZmluZF9hX2ZpbGUpOiBIYW5kbGUgbmV3IGhvb2sgRVhFQ1VUQUJMRV9TVUZGSVguCisJKEVYRUNVVEFCTEVfU1VGRklYKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbiwgYW5kIGFsdGVybmF0ZSBmb3IgTVNET1MuCisJKFBfdG1wZGlyKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbiBmb3IgTVNET1MuCisKK01vbiBOb3YgMjUgMTc6MTg6NTIgMTk5MSAgTWljaGFlbCBDb2xsaXNvbiAgKGNvbGxpc29uIGF0IG9zZi5vcmcpCisKKwkqIHgtZW5jcm9zZTogTmV3IGZpbGUgZm9yIG1tYXggcnVubmluZyBPU0YvMS4KKwkqIHQtZW5jcm9zZTogZGl0dG8uCisKKwkqIG5zMzJrLm1kIChtb3ZzaSk6IFVzZSBuZXcgY29uc3RyYWludCBsZXR0ZXJzICd4JyBhbmQgJ3knCisJcmVwcmVzZW50aW5nIHRoZSBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KKwkobW92aGksbW92cWkpOiBBZGQgY29uc3RyYWludHMgYW5kIHRlbXBsYXRlIGNvZGUgdG8gYWxsb3cgbW92ZXMKKwliZXR3ZWVuIHRoZSBmbG9hdGluZyBwb2ludCBhbmQgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4KKworCSogdG0tbnMzMmsuaCAoUkVHSVNURVJfTU9WRV9DT1NUKTogVXNlIHRoaXMgbWFjcm8gdG8gZGlzY291cmFnZQorCW1vdmVzIGJldHdlZW4gdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhbmQgdGhlIGZyYW1lIGFuZCBzdGFjaworCXBvaW50ZXIuICBBbHNvIGRpc2NvdXJhZ2UgbW92ZXMgYmV0d2VlbiB0aGUgZnAgYW5kIGdlbmVyYWwgcmVnaXN0ZXJzLgorCShyZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTLAorCVJFR19DTEFTU19GUk9NX0xFVFRFUik6IEFkZCB0d28gbmV3IHJlZ2lzdGVyIGNsYXNzZXMgcmVwcmVzZW50aW5nCisJdGhlIGZyYW1lIHBvaW50ZXIgYW5kIHN0YWNrIHBvaW50ZXIgcmVzcGVjdGl2ZWx5LgorCShHT19JRl9OT05JTkRFWEVEX0FERFJFU1MpOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHJlZ2lzdGVyIGlzIGFsc28gYQorCWJhc2UgcmVnaXN0ZXIuIFRoaXMgY2F1c2VzIHJlbG9hZCB0byByZWplY3QgcHNldWRvIHJlZ2lzdGVycyB3aGVuCisJUkVHX09LX1NUUklDVCBpcyBkZWZpbmVkLgorCisJKiB0bS1pMzg2cm9zZS5oOiBOZXcgZmlsZSBmb3IgMzg2IHJ1bm5pbmcgb24gT1NGLzEuCisJKiB4LWkzODZyb3NlOiBkaXR0bworCSogdC1pMzg2cm9zZTogZGl0dG8KKworCSogY29uZmlnLnN1YnI6IEFkZGVkIGNhc2UgZm9yICdvc2YtJy4KKwkqIGNvbmZpZ3VyZTogQWRkZWQgY2FzZSBmb3IgaTM4Ni1vc2Zyb3NlCisKKwkqIHRtLWVuY3Jvc2UuaCAoQ0MxX1NQRUMpOiBTaW1wbGlmaWVkIHNvIGJ5IGRlZmF1bHQgaXQgcGFzc2VzIG5vdGhpbmcuCisJKEFTTV9TUEVDKTogQ2hhbmdlZCBzbyB0aGF0IHVuZGVyIE9TRi8xIHdpdGggTk9fSl9TV0lUQ0ggZGVmaW5lZAorCW5vdGhpbmcgaXMgcGFzc2VkIHRvIHRoZSBhc3NlbWJsZXIuCisJKFRBUkdFVF9ERUZBVUxUKTogQ2hhbmdlZCBzbyB0aGF0LCBieSBkZWZhdWx0LCBubyBjb2RlIGlzIGdlbmVyYXRlZAorCXVzaW5nIHRoZSBzdGF0aWMgYmFzZSAoc2IpIHJlZ2lzdGVyLgorCShPVkVSUklERV9PUFRJT05TKTogUmVtb3ZlZCBpbiBsaWV1IG9mIHRoZSBuZXcgZGVidWcgbWFjcm9zCisJUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIGFuZCBERUZBVUxUX0dEQl9FWFRFTlNJT04uCisJKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMpOiBEZWZpbmUgaXQKKwkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogVXNlIGl0LgorCitNb24gTm92IDI1IDE3OjE4OjUyIDE5OTEgIEp5cmtpIEt1b3BwYWxhICAoamtwIGF0IGJhdG1hbi5odXQuZmkpCisKKwkqIG5zMzJrLm1kIChhc2hsaGkzKTogdXNlIGFkZHcgYWxzbyBvbiAzMjUzMiBpZiBzaGlmdGNvdW50IGlzIDEuCisJKGFzaGxxaTMpOiBsaWtld2lzZS4KKwkoYWRkc2kzKTogZG9uJ3QgdXNlIGFkZHIgaW5zdGVhZCBvZiBhZGRkIG9uIHRoZSAzMjUzMi4KKworCSogb3V0LW5zMzJrLmMgKGNhbGNfYWRkcmVzc19jb3N0KTogZG9uJ3QgYXNzdW1lIHVua25vd24gUlRYIGNvZGVzCisJaGF2ZSBYRVhQJ3Mgd2hpY2ggYXJlIHJ0eCdzLgorCisJKiBuczMyay5tZCAobW92c2kpOiBkb24ndCB1c2UgYWRkciBmb3IgdGhlIDMyNTMyIGltbWVkIGRpc3BsYWNlbWVudHMuCisJKHNoaWZ0IHBhdHRlcm5zKTogZml4ZWQgYSB0eXBvIHdpdGggJSQlbi4KKworCSogb3V0LW5zMzIuYyAoY2FsY19hZGRyZXNzX2Nvc3QpIG5ldyBmdW5jdGlvbi4KKwl0bS1uczMyay5oIChBRERSRVNTX0NPU1QpOiBjYWxsIGNhbGNfYWRkcmVzc19jb3N0LgorCisJKiBvdXQtbnMzMmsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogdXNlIGVycm9yICYgZGVidWdfcnR4IGlmIGVycm9yLgorCisJKiB0bS1uczMyay5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBjb25zdHJhaW50ICdJJyBzaG91bGRuJ3QKKwltYXRjaCBhbnl0aGluZyBvbiB0aGUgMzI1MzIgdG8gbWFrZSBuZWdhdGl2ZSBhcml0aG1ldGljIGxlZnQKKwlzaGlmdHMgYmVoYXZlIGNvbnNpc3RlbnRseS4KKworCSogbnMzMmsubWQgKHN1YnNmKzEpOiBkb24ndCB1c2UgYWpkc3BiIG9uIHRoZSAzMjUzMi4KKworCSogdG0tbnMzMmsuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogcG9zaXRpdmUgdmFsdWVzIG5vdCBPSyBmb3IKKwljb25zdHJhaW50ICdJJyBpZiBvbiAzMjUzMi4KKworCSogbnMzMmsubWQgKGFzaGw/Pyk6IGlmIFRBUkdFVF8zMjUzMiwgdXNlIGxzaHtkLHcsYn0uCisKKwkqIG5zMzJrLm1kIChhZGp1c3Rpbmcgc3RhY2sgcG9pbnRlcik6IGRvbid0IHVzZSBhamRwe2Isd30gaWYgbm90IDMyNTMyLgorCisJKiBuczMyay5tZCAoaXN2LGluc3YtMSxpbnN2LTIsZXh0enYpOiB1c2UgY29uc3RyYWludCBLIGluc3RlYWQgb2YKKwluIGZvciBvZmZzZXQuCisKKwkqIG5zMzJrLm1kIChpbnN2LTEpOiB1c2Ugb25seSByZWdpc3Rlcl9vcGVyYW5kIHdpdGggY29uc3RyYWludAorCSJyIiBmb3Igb3BlcmFuZCAyLCBpbnNkIGNhbid0IHRha2UgY29uc3RhbnQgb2Zmc2V0cyA+PSA4LgorCShwYXR0ZXJuIGluc3YtMik6IGFkZGVkIGFub3RoZXIgaW5zdi1saWtlIHBhdHRlcm4sIGZvcgorCW9mZnNldHRhYmxlIG9wZXJhbmQuCisJKGluc3YpOiBjb25zdHJhaW50IHNob3VsZCBiZSAiK2ciLgorCShwYXR0ZXJuIGJlZm9yZSBpbnN2KTogaW5zdGFsbGVkIGFuIGluc3YtbGlrZSBwYXR0ZXJuCisJd2l0aCBvcGVyYW5kIDAgaGF2aW5nIHJlZ2lzdGVyX29wZXJhbmQgYW5kIFNJbW9kZS4KKworCSogb3V0LW5zMzJrLmMgKHByaW50X29wZXJhbmQpOiBkZWZpbmUgYXMgYSB2b2lkIGZ1bmN0aW9uLgorCisJKiBuczMyay5tZCAoY2FsbF92YWx1ZSk6IHVzZSBvcGVyYW5kc1sxXSwgbm90IG9wZXJhbmRzWzBdIHRvIGNoZWNrCisJZm9yIENPTlNUQU5UX0FERFJFU1NfUC4KKworCSogb3V0LW5zMzJrLmMgKHByaW50X29wZXJhbmQpOiBlbGltaW5hdGUKKwlQUklOVF9PUEVSQU5EX0VYVFJBQ1RfRkxPQVQsIGRvbid0IGRlcGVuZCBvbiBIT1NUX1dPUkRTX0JJR19FTkRJQU4uCisKKwkqIHRtLW5zMzIuaCAoSU5ESVJFQ1RBQkxFXzFfQUREUkVTU19QKTogdXNlIENPTlNUQU5UX0FERFJFU1NfUCwKKwlub3QgQ09OU1RBTlRfUC4KKworCSogdG0tbnMzMmsuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogY2hlY2tpbmcgZm9yIENPTlNUX0lOVAorCWlzIG5vdCByaWdodCBiZWNhdXNlIGRpc3BsYWNlbWVudHMgYXJlIG5vdCAzMi1iaXQuICBVc2UKKwlDT05TVEFOVF9BRERSRVNTX05PX0xBQkVMX1AgaW5zdGVhZC4KKworCSogdG0tbnMzMmsuaCAob3V0cHV0X21vdmVfZG91YmxlLCBvdXRwdXRfc2hpZnRfaW5zbik6IE5ldyBkZWNsYXJhdGlvbnMuCisKKwkqIG91dC1uczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBVc2UgZmF0YWwgZm9yIGVycm9ycy4KKworCSogbnMzMmsubWQgKGluc3YsIGV4dHp2KTogUmVwbGFjZWQgd2l0aCB0aGUgcGF0dGVybiBuZWFyIGluc3YgaW4gMS40MC4KKworCSogb3V0LW5zMzJrLmMgKHByaW50X29wZXJhbmQpOiBmdW5jdGlvbiBtb3ZlZCBmcm9tIHRtLW5zMzJrLmguCisJTW9kaWZpZWQgdG8gdXNlIFBVVF9JTU1FRElBVEVfUFJFRklYLCBQVVRfRVhURVJOQUxfUFJFRklYOyBhZGRlZAorCW1hY3JvIFBSSU5UX09QRVJBTkRfRVhUUkFDVF9GTE9BVC4KKworCSogb3V0LW5zMzJrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IHJlcGxhY2VkIHRoZSBmdW5jdGlvbiB3aXRoCisJYSBtb3JlIGNsZWFuIHZlcnNpb24sIHdyaXR0ZW4gZm9yIGdhcyBzeW50YXguCisKKwkqIG5zMzJrLm1kIChjYWxsKTogI2lmIDAgY29kZSB3aGljaCB3YXMgdXNlZCB3aGVuIEdBU19TWU5UQVggd2FzIG5vdAorCWRlZmluZWQuCisJKGNhbGxfdmFsdWUpOiBsaWtld2lzZS4KKworCSogbnMzMmsubWQgKHBhdHRlcm4gYWZ0ZXIgYXNocnNpMyk6IGFkZGVkICUgYmVmb3JlICQgc28gdGhlCisJcGF0dGVybiB3b3JrcyBhbHNvIGZvciBnYXMgc3ludGF4LgorCShwYXR0ZXJuIGFmdGVyIGFzaHJoaTMpOiBsaWtld2lzZS4KKwkocGF0dGVybiBhZnRlciBhc2hycWkzKTogbGlrZXdpc2UuCisJKHBhdHRlcm4gYWZ0ZXIgbHNocnNpMyk6IGxpa2V3aXNlLgorCShwYXR0ZXJuIGFmdGVyIGxzaHJoaTMpOiBsaWtld2lzZS4KKwkocGF0dGVybiBhZnRlciBsc2hycWkzKTogbGlrZXdpc2UuCisJKHBhdHRlcm4gYWZ0ZXIgcm90cnNpMyk6IGxpa2V3aXNlLgorCShwYXR0ZXJuIGFmdGVyIHJvdHJoaTMpOiBsaWtld2lzZS4KKwkocGF0dGVybiBhZnRlciByb3RycWkzKTogbGlrZXdpc2UuCisKKwkqIG5zMzJrLm1kIChtb3ZzZik6IHB1dCAjaWZuZGVmIEdBU19TWU5UQVggcGFydCBpbnNpZGUgI2lmIDAgc2luY2UKKwlmb3Igbm93IHdlIG9ubHkgdXNlIEdBUyBzeW50YXguCisKKwkqIHRtLW5zMzJrLmggKElORElSRUNUQUJMRV8yX0FERFJFU1NfUCk6IGFkZCBUQVJHRVRfU0IgYXMgYQorCWNvbmRpdGlvbiBpbiBhZGRpdGlvbiB0byBDT05TVEFOVF9BRERSRVNTX1AuCisKKwkqIHRtLW5zMzJrLmggKE1FTV9SRUcpOiB1c2UgQ09OU1RBTlRfQUREUkVTU19QIGluc3RlYWQgb2YgR0VUX0NPREUKKwk9PSBTWU1CT0xfUkVHLCBhZGQgVEFSR0VUX1NCIHRvIHRoZSBzZWNvbmQtcGFydCBjb25kaXRpb24uCisKKwkqIG5zMzJrLm1kIChyb3Ryc2kzKTogZml4ZWQgYSB0eXBvIE5FR0FURS0+TkVHCisKKwkqIHRtLW5zMzJrLmg6IGFkZGVkIGEgY29tbWVudCBhYm91dCBDT05TVEFOVF9BRERSRVNTX1A7IGl0J3Mgbm90CisJc3RyaWN0bHkgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgorCisJKiB0bS1uczMyay5oOiBhZGRlZCBkZWZhdWx0cyBmb3IgQUJTT0xVVEVfUFJFRklYLElNTUVESUFURV9QUkVGSVgKKwlldGMsIHVzaW5nIGdhcyBzeW50YXguCisKKwkqIG91dC1uczMyay5jOiByZW1vdmVkIG1hY3JvIEZQX1JFR19QLgorCisJKiB0bS1uczMyay5oOiAoQVNNX09VVFBVVF9BTElHTl9DT0RFKTogY2hhbmdlZCBhbGlnbm1lbnQgZnJvbSA0IHRvCisJMiBzaW5jZSBHQVMgc3ludGF4IGlzIHRoZSBkZWZhdWx0IGFzc2VtYmxlciBzeW50YXggbm93LgorCShQUklOVF9PUEVSQU5ELCBQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBkZWZpbmVkIHRvIGNhbGwKKwlwcmludF9vcGVyYW5kIGFuZCBwcmludF9vcGVyYW5kX2FkZHJlc3MgaW4gb3V0LW5zMzJrLmMsCisJcmVzcGVjdGl2ZWx5LgorCisJKiB0bS1uczMyay5oOiBOZXcgbWFjcm9zIFRBUkdFVF9TQiwgVEFSR0VUX1BJQy4KKwlEdW1teSBjb2RlIGZvciB0cmFtcG9saW5lcywgY2FsbHMgZmF0YWwoKS4KKwlNYWNybyBGUF9SRUdfUCBtb3ZlZCBoZXJlIGZyb20gb3V0LW5zMzJrLmMuCisJU29tZSByZW9yZ2FuaXphdGlvbnMgb2YgYmxvY2tzLgorCTY4MDAwIC0+IG5zMzJrLgorCisJKiB0bS1uczMyay5oIChUQVJHRVRfVkVSU0lPTikgc2F5cyBHQVMgc3ludGF4LgorCShUQVJHRVRfKikgYWRkZWQgc29tZSBlbXB0eSBsaW5lcyBmb3IgY2xhcml0eS4KKworTW9uIE5vdiAyNSAxNDoyOTozOSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChhdXgtb3V0cHV0Lm8pOiBEZXBlbmQgb24gaW5zbi1jb2Rlcy5oLgorCisJKiBtYWtlLWNjMS5jb206IEhhbmRsZSBwcmludC1ydGwuYy4KKworCSogdG9wbGV2LmMgKHdhcm5fYWdncmVnYXRlX3JldHVybik6IE5ldyB2YXJpYWJsZS4KKwkoV19vcHRpb25zKTogRGVmaW5lIG9wdGlvbiB0byBzZXQgaXQuCisJKiBmbGFncy5oOiBEZWNsYXJlIGl0LgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBQcmludCB3YXJuaW5nIGlmIHZhbHVlIGlzIGFnZ3JlZ2F0ZS4KKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBMaWtld2lzZS4KKworTW9uIE5vdiAyNSAxMzoyOTo1MCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBGaXggcmV0dXJuIHR5cGUgb2YKKwlsb25nam1wIChmcm9tIGludCB0byB2b2lkKS4KKworTW9uIE5vdiAyNSAxMzoxMTo1MSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHJ0bGFuYWwuYyAocmVmZXJzX3RvX3JlZ25vX3ApOiBDaGVjayBmb3IgYHggPT0gMCcgb24gcmVwZWF0LgorCisJKiB4LW1pcHMsIHhtLXZtcy5oOiBDaGFuZ2UgY3BsdXMtKiB0byBjcC0qIGluIGNvbW1lbnRzLgorCSogeC10b3dlciAoWF9DRkxBR1MpOiBBZGQgbWlzc2luZyBgLScuCisKKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IFdoZW4gc2ltcGxpZnlpbmcgbG9vcHMgZXhlY3V0ZWQgb25seSBvbmNlLAorCXVzZSBsYXN0X2xvb3BfaW5zbiBub3QgY29weV9lbmQuCisKK01vbiBOb3YgMjUgMDc6NDU6NDYgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBNYXJrIGBFeGNlcHRpb25IYW5kbGVyJworCWNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGFzIGJlaW5nIFRSRUVfRVhURVJOQUwsIGFuZCBtYXJrIHRoZQorCWBFeGNlcHRpb25IYW5kbGVyJyB0eXBlIGFzIGJlaW5nIGludGVyZmFjZS1vbmx5LgorCisJKiBjcC1kZWNsLmMgKG1heWJlX2dsb2JhbGl6ZV90eXBlKTogRG9uJ3QgdGVzdCBUWVBFX0JFSU5HX0RFRklORUQKKwlmb3IgRU5VTUVSQUxfVFlQRS4KKworCSogY3AtY2xhc3MuYyAobW9kaWZ5X3Z0YWJsZV9lbnRyeSk6IERpc2FibGUgY29kZSB3aGljaCBhdHRlbXB0cyB0bworCWVuY29kZSBpbiBhIHZ0YWJsZSBhbiBpbmRpcmVjdGlvbiB0byBhbm90aGVyIHZ0YWJsZSBlbnRyeS4KKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENvbnZlcnQgRlVOQ1RJT04gdG8KKwlERUNMX01BSU5fVkFSSUFOVCAoRlVOQ1RJT04pIG9uY2Ugd2UgYXJlIGdvaW5nIHRvIHVzZSBpdCBmb3IgcmVhbC4KKwkqIGNwLWluaXQuYyAoYnVpbGRfZGVsZXRlKTogVXNlIERFQ0xfTUFJTl9WQVJJQU5UIChEVE9SKS4gICoKKwkqIGNwLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogVXNlIERFQ0xfTUFJTl9WQVJJQU5UIChYKS4KKworTW9uIE5vdiAyNSAwMDo0MToxNCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogVGllbWFubidzIERFQ0xfSUdOT1JFRF9QIG9wdGltaXphdGlvbiAoTm92CisJMjApIHdhcyBhIGxpdHRsZSB0b28gZHJhc3RpYzogSWYgaXQgc3VjY2VkZWQsIG5vIHR5cGUgaW5mbyB3YXMKKwllbWl0dGVkIGF0IGFsbCwgd2hpY2ggbWFkZSBmb3Igc3ludGFjdGljYWxseSBpbnZhbGlkIHN0YWJzLgorCUluc3RlYWQsIGp1c3Qgc2V0ICdmdWxsPTAnLAorCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBSZS13cml0ZSBjb2RlIGZvciBUWVBFX0RFQ0wgdG8gYmUgYQorCWxpdHRsZSBjbGVhbmVyLiAgSXQgKnNlZW1zKiB0byB3b3JrIC4uLgorCitTdW4gTm92IDI0IDE5OjMyOjA3IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc2NoZWQuYyAodXBkYXRlX2xpbmtzKTogVXNlIFBVVF9SRUdfTk9URV9LSU5EIHRvIGNoYW5nZSBSRUdfTk9URS4KKworU3VuIE5vdiAyNCAxNDo1MzozNyAxOTkxICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGNjY3AuYzogQWRkIGByZXR1cm4gMDsnIHN0YXRlbWVudHMgdG8gYWxsIGRvXyogZnVuY3Rpb25zIHdoaWNoCisJbmVlZGVkIHRoZW0gdG8gcHJldmVudCBzcHVyaW91cyB3YXJuaW5ncy4gIEFsc28gY2hhbmdlIHBsYWluCisJYHJldHVybjsnIHN0YXRlbWVudHMgdG8gYHJldHVybiAwOycgc3RhdGVtZW50cyB3aGVyZSBhcHByb3ByaWF0ZS4KKworU3VuIE5vdiAyNCAwNzozNzoxNyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBXaGVuIG1ha2luZyBlcXVpdmFsZW5jZXMgb2Ygc3VicGFydHMgb2YKKwlhIFNFVCwgYXZvaWQgcHV0dGluZyBhIChoYXJkKSByZWdpc3RlciBpbiB0aGUgaGFzaCB0YWJsZSB0d2ljZSwKKwllYWNoIHRpbWUgd2l0aCBkaWZmZXJlbnQgbW9kZXMuCisKKwkqIGdlbnJlY29nLmMgKHdyaXRlX3RyZWVfMSxjaGFuZ2Vfc3RhdGUpOiBEb24ndCBjaGVjayBmb3IgYSBwb3NpdGlvbgorCWNvbnRhaW5pbmcgYSAnKicgc2luY2Ugd2UgZG9uJ3Qgc2V0IGl0IHRvIHRoYXQuCisJKG1haW4pOiBEb24ndCBkZWZpbmUgcmVjb2dfYWRkcl9kdW1teTsgbm8gbG9uZ2VyIHVzZWQuCisJKiByZWNvZy5jIChyZWNvZ19hZGRyX2R1bW15KTogTm8gbG9uZ2VyIG5lZWRlZDsgd2Fzbid0IGFjdHVhbGx5IHVzZWQuCisJKGluaXRfcmVjb2dfbm9fdm9sYXRpbGUsIGluaXRfcmVjb2cpOiBEb24ndCBzZXQgcmVjb2dfYWRkcl9kdW1teS4KKworCSogZXhwbWVkLmMgKHN0b3JlX3NwbGl0X2JpdF9maWVsZCwgZXh0cmFjdF9iaXRfZmllbGQpOiBBYm9ydCBpZiAKKwlvcGVyYW5kX3N1YndvcmQgb2YgdGFyZ2V0IHJldHVybnMgMC4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlLCBtb3ZlX2Jsb2NrX2Zyb21fcmVnLCBlbWl0X21vdmVfaW5zbik6IExpa2V3aXNlLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIFNVQlJFRyk6IERvbid0IGFsbG93IG1ha2luZyBhIFNVQlJFRyBvZgorCWEgaGFyZCByZWcgaW4gYSBtb2RlIG5vdCB2YWxpZCBmb3IgdGhhdCBoYXJkIHJlZy4KKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0X2NvbW1vbiwgb3BlcmFuZF9zdWJ3b3JkKTogTGlrZXdpc2UuCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X3NwbGl0X2JpdF9maWVsZCk6IFVzZSBvcGVyYW5kX3N1YndvcmRfZm9yY2UuCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuKTogSWYgb3BlcmFuZF9zdWJ3b3JkIGZhaWxzIGZvciBub24tY29uc3QsCisJdXNlIG9wZXJhbmRfc3Vid29yZF9mb3JjZS4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogUGFzcyBPUDAgdGhyb3VnaCBwcm90ZWN0X2Zyb21fcXVldWUgc28gd2UgY2FuCisJdXNlIGl0IGluIGEgUkVHX0VRVUFMIG5vdGUgYW5kIGNoZWNrIGl0IGZvciBiZWluZyBhIE1FTS4KKworCSogcnRsLmRlZiAoU01JTiwgU01BWCwgVU1JTiwgVU1BWCk6IE5ldyBSVEwgY29kZXMuCisJKiBmb2xkLWNvbnN0LmMgKGNvbnN0X2Jpbm9wLCBjYXNlIE1JTl9FWFBSLCBNQVhfRVhQUik6IFVzZSBNSU4gYW5kIE1BWC4KKwkoZm9sZCwgY2FzZSBNSU5fRVhQUiwgTUFYX0VYUFIpOiBDaGVjayBmb3Igb3BlcmFuZHMgZXF1YWw7IGNoZWNrIGZvcgorCW1pbiAoeCwgbG93ZXN0LXZhbHVlLWZvci10eXBlKSBhbmQgbWF4ICh4LCBoaWdoZXN0LXZhbHVlLWZvci10eXBlKS4KKwkoZm9sZCwgY2FzZSBDT05EX0VYUFIpOiBMb29rIGZvciBjb25kaXRpb25hbHMgdGhhdCBhcmUgZXF1aXZhbGVudAorCXRvIEFCU19FWFBSLCBNSU5fRVhQUiwgb3IgTUFYX0VYUFIgYW5kIGNvbnZlcnQgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUKKwlleHByZXNzaW9uLgorCSogZXhwci5oIChzbWluX29wdGFiLCBzbWF4X29wdGFiLCB1bWluX29wdGFiLCB1bWF4X29wdGFiKTogTmV3IHZhcnMuCisJKiBnY2MudGV4aW5mbyAoc21pbiwgc21heCwgdW1pbiwgdW1heCk6IEFkZCBkb2N1bWVudGF0aW9uLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBQlNfRVhQUik6IElnbm9yZSBBQlMgb24gdW5zaWduZWQgdHlwZXMuCisJSWYganVtcHMgYXJlIGV4cGVuc2l2ZSwgd2UgY2FuIGRvIEFCUyB3aXRoIHNoaWZ0cyBhbmQgeG9ycy4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgTUlOX0VYUFIsIE1BWF9FWFBSKTogVHJ5IHRvIGRvIHVzaW5nIG5ldyBvcHRhYnMuCisJKiBvcHRhYnMuYyAoc21pbl9vcHRhYiwgc21heF9vcHRhYiwgdW1pbl9vcHRhYiwgdW1heF9vcHRhYik6CisJSW5pdGlhbGl6ZSBuZXcgb3B0YWJzLgorCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBOZXcgY2FzZXMgU01JTiwgU01BWCwgVU1JTiwgVU1BWC4KKwkqIHJzNjAwMC5tZCAoc21pbnNpMywgc21heHNpMywgdW1pbnNpMywgdW1heHNpMyk6IE5ldyBwYXR0ZXJucy4KKwkqIG04OGsubWQgKGFic3NpMik6IERlbGV0ZSBwYXR0ZXJuOyBub3cgZG9uZSBpbiBleHByLmMuCisKKwkqIHJzNjAwMC5tZCAoc2NjKTogQ29ycmVjdCB0eXBvcyBpbiBsYXN0IGNoYW5nZS4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogVEFSR0VUIHdpbGwgb25seSBiZSB3cml0dGVuIG9uY2UsIHNvCisJZnVuY3Rpb24gcmV0dXJuIHJlZ2lzdGVyIGlzIE9LLgorCVdyaXRlIGEgUkVHX0VRVUFMIG5vdGUgc28gbXVsdGlwbGljYXRpb25zIGNhbiBiZSBjc2UnZWQuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBTa2lwIHRyeWluZyBtb3N0IHNlcXVlbmNlcyBvZiBpbnNucworCWlmIGJyYW5jaGVzIGFyZSB2ZXJ5IGNoZWFwIChCUkFOQ0hfQ09TVCA9PSAwKS4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogQ2hlY2sgZm9yIEJSQU5DSF9DT1NUIDw9IDEsCisJbm90IGVxdWFsIHRvIDEuCisJS25vdyB0aGF0IGVtaXRfc3RvcmVfZmxhZyB3b24ndCBkbyBtb3N0IHNlcXVlbmNlIGlmIGJyYW5jaGVzIGFyZSB2ZXJ5CisJY2hlYXAuCisKKwkqIHRtLXZheC5oIChCUkFOQ0hfQ09TVCk6IERlZmluZSB0byBiZSBlcXVhbCB0byB6ZXJvLgorCitTdW4gTm92IDI0IDA3OjA3OjMxIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChtYXliZV9nbG9iYWxpemVfdHlwZSk6IERvbid0IGdsb2JhbGl6ZSBhIHR5cGUgdGhhdCdzCisJYmVpbmcgZGVmaW5lZC4KKworU3VuIE5vdiAyNCAwNTowODo1NyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogVXNlIG1haW4gdmFyaWFudCBjaGVja2luZyBBTlNJIGJpdGZpZWxkcy4KKworCSogdG0tdG93ZXItYXMuaCAoQVNNX0ZJTEVfU1RBUlQpOiBVc2Ugb3V0cHV0X2ZpbGVfZGlyZWN0aXZlLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogVHJlYXQgYC0nIGFzIGZpbGUgbmFtZSwgbm90IG9wdGlvbi4KKworU2F0IE5vdiAyMyAyMDoyODo1OCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6IFJlbW92ZSBkdXBsaWNhdGUgY29kZSBmb3IgU0Ztb2RlCisJYW5kIERGbW9kZTsgdXNlIG9mIFJFQUxfVkFMVUVfVFJVTkNBVEUgbWVhbnMgdGhhdCBhbGwgbW9kZXMgY2FuIGJlCisJaGFuZGxlZCB3aXRoIHRoZSBzYW1lIGNvZGUuCisJVHJ1bmNhdGUgcmVzdWx0IGFzIHdlbGwgYXMgaW5wdXRzIHRvIGNvbXB1dGF0aW9ucy4KKworCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IEFsbG93IHJlY29yZGluZyBvZiBkZXN0aW5hdGlvbnMgaW4gdGhlCisJZmluYWwgaW5zbiBvZiBhIExJQkNBTEwgYmxvY2suCisKKwkqIGZsb3cuYyAoaW5zbl9kZWFkX3ApOiBBZGQgbmV3IGFyZ3VtZW50IENBTExfT0suCisJKHByb3BhZ2F0ZV9ibG9jayk6IFBhc3MgbmV3IGFyZy4KKwkobGliY2FsbF9kZWFkX3ApOiBJbmRpY2F0ZSB0aGF0IHdlIGNhbiBhY2NlcHQgYSBDQUxMIHdoZW4gd2UgdXNlCisJaW5zbl9kZWFkX3AgdG8gc2VlIGlmIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgQ0FMTCBpcyBkZWFkLgorCisJKiBnZW5yZWNvZy5jIChzdHJ1Y3QgZGVjaXNpb24pOiBSZW1vdmUgZmllbGRzIGBkdXBjb3VudCcKKwlhbmQgYHJlZ19jbGFzcycgYW5kIGFsbCByZWZlcmVuY2VzOyB0aGV5IHdlcmUgYmVpbmcgc2V0IGJ1dCBuZXZlcgorCXVzZWQgYW5kIGFyZSBub3cgb2Jzb2xldGUuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0X2NvbW1vbiwgb3BlcmFuZF9zdWJ3b3JkKTogRG9uJ3QgbWFrZQorCWEgbmV3IFJFRyBmb3IgdGhlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB1bnRpbCB3ZSBhZnRlciB0aGUgUlRMCisJaXMgY29waWVkIGZvciBwb3NzaWJsZSBpbmxpbmluZzsgdXNlIGEgU1VCUkVHIGluc3RlYWQuCisKKwkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IERvbid0IG1vdmUgaW5zbiBwYXN0IGEgdm9sYXRpbGUgcmVmIGlmCisJaXQgaXMgYW4gYGFzbScsIGV2ZW4gaWYgbm9uLXZvbGF0aWxlLgorCisJKiBnbWljcm8ubWQ6IEZpeCBwdW5jdHVhdGlvbiBwcm9ibGVtIGNhdXNpbmcgc3ludGF4IGVycm9yLgorCisJKiB0bS1yczYwMDAuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQWRkIGBPJyBhbmQgYFAnLgorCSogb3V0LXJzNjAwMC5jIChyZWdfb3JfbmVnX3Nob3J0X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHJzNjAwMC5tZCAoYXR0cmlidXRlICJ0eXBlIik6IE5ldyB0eXBlIGBkZWxheWVkX2NvbXBhcmUnLgorCUFkZCBkZWZpbmVfZnVuY3Rpb25fdW5pdCBmb3IgZGVsYXllZCBjb21wYXJpc29ucy4KKwlNYXJrIGNvbXBhcmlzb24gcmVzdWx0cyBvZiBjZXJ0YWluIGluc25zIGFzIGJlaW5nIGRlbGF5ZWQgZm9yCisJbG9uZ2VyIHRoYXQgbm9ybWFsIGNvbXBhcmlzb24gcmVzdWx0czsgYWRkIGEgbmV3IG1pc3NpbmcgdHlwZXMKKwlvZiBgY29tcGFyZScuCisJKHNlcSwgc2xlKTogUmVtb3ZlIHNwZWNpYWwtY2FzZXMgZm9yIChjb25zdF9pbnQgMCkgb3BlcmFuZHM7IHVzZQorCWFsdGVybmF0aXZlIHdpdGggY29uc3RyYWludCBvZiBgTycgaW5zdGVhZC4KKwkoc2x0dSwgc2dldSk6IFN1cHBvcnQgbW9zdCBjb25zdGFudHMgaW4gc2Vjb25kIG9wZXJhbmQuCisKKwkqIGNzZS5jIChwcmV2X2luc25fY2MwX21vZGUpOiBOZXcgdmFyaWFibGUuCisJKGZvbGRfcnR4KTogV2hlbiBmb2xkaW5nIENDMCwgZ2V0IHRoZSBtb2RlIGZyb20gcHJldl9pbnNuX2NjMF9tb2RlLgorCShjc2VfaW5zbik6IFNhdmUgbW9kZSBvZiBTRVQgb2YgQ0MwIGluIHByZXZfaW5zbl9jYzBfbW9kZS4KKworU2F0IE5vdiAyMyAxNzowMTo0NyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChpbml0X2V4cG1lZCk6IE1ha2UgUkVHIGEgcHNldWRvLCBub3QgYSBoYXJkIHJlZy4KKworCSogdG0tbTY4ay5oIChSVFhfQ09TVFMpOiBOZXcgbWFjcm8uCisKKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogR2V0IHJpZCBvZiBwZWRhbnRpYyB3YXJuaW5nLgorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBEZWxldGUgY29kZSBmb3IgaGFuZGxpbmcgLWNvbGxlY3QuCisJKGRlZmF1bHRfY29tcGlsZXJzKTogR2V0IHJpZCBvZiB0aGUgJXggZm9yIGcrKy4KKwlUaGlzIGlzIGJlY2F1c2Ugbm93IGNvbGxlY3QgaXMgYWx3YXlzIHN1cHBvc2VkIHRvIGJlIHJ1bi4KKworCSogdG0tdm1zLmggKEFTTV9PVVRQVVRfQ09NTU9OKTogQXZvaWQgdm9pZCBhcyB0eXBlIGluIDo/IG9wZXJhdG9yLgorCSogdG0tc3VuMy5oIChBU01fT1VUUFVUX0ZMT0FUX09QRVJBTkQsIEFTTV9PVVRQVVRfRE9VQkxFX09QRVJBTkQpOgorCUxpa2V3aXNlLgorCSogdG0tdmF4di5oIChBU01fT1VUUFVUX0FTQ0lJKTogRGVjbGFyZSBgcycgYXMgdW5zaWduZWQgY2hhciAqLgorCSogdG0tY3Jkcy5oIChGVU5DVElPTl9FUElMT0dVRSk6IERvbid0IGNhbGwgRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUuCisKKwkqIGNvbmZpZ3VyZSAoaTM4Ni1kb250a25vdy0qLCBuczMyay0qLSopOiBBbHRlcm5hdGl2ZXMgZGVsZXRlZC4KKwkobTY4ay10dGkyLSopOiBEZWxldGVkLgorCShtNjhrLXR0aS0qKTogUmVuYW1lZCBmcm9tIG02OGstdHRpMS0qLgorCisJKiBpODYwLm1kIChmbG9hdHNpZGYyKTogRXNjYXBlIHRoZSBkb3VibGVxdW90ZXMuCisKKwkqIE1ha2VmaWxlLmluIChmaW5hbC5vKTogQWRkIGluc24tY29kZXMuaCBhcyBkZXAuCisJKE9CSlMpOiBBZGQgZGJ4b3V0Lm8uCisJKENfT0JKUywgT0JKQ19PQkpTKTogRGVsZXRlZCBoZXJlLgorCShDUExVU19PQkpTKTogRGVsZXRlZCBjcC1kYnhvdXQuby4KKwkoY3AtZGJ4b3V0Lm8pOiBUYXJnZXQgZGVsZXRlZC4KKworU2F0IE5vdiAyMyAwNjozMzoyNCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXNwZXcuYyAoeXlsZXgpOiBEb24ndCBzZWUgVFlQRU5BTUUgaWYgTE9PS0lOR19GT1JfVFlQRU5BTUUKKwlpcyA8IDAuICBEZWZpbml0ZWx5IHNlZSBUWVBFTkFNRSBpZiBMT09LSU5HX0ZPUl9UWVBFTkFNRSA+IDAuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbnkgdHlwZSBjb25zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEKKwlzdHJ1Y3QvdW5pb24vZW51bSB0eXBlIHRoYXQgaXMgbm90IHlldCBkZWZpbmVzIHB1c2hlcyB0aGF0IHR5cGUgaW50bworCXRoZSBnbG9iYWwgbmFtZXNwYWNlLgorCisJKiBjcC1zcGV3LmMgKGRpc2NhcmRfdG9rZW4pOiBSZW5hbWVkIGZyb20gYGVhdF90b2tlbicuCisJQWxzbywgbWFrZSBhbGwgbG9jYWwgZnVuY3Rpb25zIHN0YXRpYy4gIFNvbWUgZGF5IHdlJ2xsIHVzZSBpbmxpbmluZy4KKworVGh1IE5vdiAyMSAxNjowNjoxNCAxOTkxICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCBjeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbjogYWRkZWQgcnVsZSBmb3IgY3Atc3Bldy5vCisKKwkqIGNwLXBhcnNlLnkgKFRZUEVOQU1FX1NDT1BFKTogYWRkZWQgYW4gYWN0aW9uLCBzaW5jZSBpdCBpcyBubworCWxvbmdlciBkb25lIGluIHRoZSBsZXhlci4KKwkoeXlwcmludCk6IFRvb2sgb3V0IGNhc2UgZm9yIFRZUEVOQU1FX1NDT1BFLgorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IHJlbmFtZWQgZnJvbSB5eWxleC4gQWxzbyBhbGwgb2YgdGhlIGNvZGUKKwlkZWFsaW5nIHdpdGggbmVzdGVkIGNsYXNzZXMgaGFzIGJlZW4gI2lmIDAnZCBpbiBmYXZvciBvZiB0aGUgY29kZSBpbgorCWNwLXNwZXcuYy4KKworCSogY3Atc3Bldy5jIChOZXcgRmlsZSk6IFRoaXMgY2FsbHMgeXlsZXggKHdoaWNoIGlzIG5vdyByZWFsX3l5bGV4KQorCWFuZCBsb29rcyBhaGVhZCBhcyBmYXIgYXMgcG9zc2libGUgdG8gYmluZCB1cCBuZXN0ZWQgY2xhc3NlcyBhbmQKKwlwYXNzIHRoZW0gb24gdG8gdGhlIHBhcnNlci4KKworVGh1IE5vdiAyMSAxODoxNDoxMSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIG91dC1zcGFyYy5jIChvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBDb3JyZWN0IHBhcmFtZXRlcnMgaW4KKwljYWxsIHRvIGZpbmFsX3NjYW5faW5zbiwgd3JpdGVfc3ltYm9scyBwYXJhbWV0ZXIgbm8gbG9uZ2VyIGV4aXN0cy4KKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogVXNlIEdFVF9SVFhfQ0xBU1MuCisKK1RodSBOb3YgMjEgMTc6NDQ6NDYgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2NjLnRleGluZm8gKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBDbGFyaWZ5IHRoYXQgbWFjcm8KKwltdXN0IGFsd2F5cyBiZSBub24temVybyB1bmxlc3MgTUVNIGV4dHYvZXh0enYvaW5zdiBleGlzdC4KKworCSogcm9tcC5tZCAobW92ZGkpOiBEaXNhYmxlIGRlZmluZV9zcGxpdCB3aGVuIHdlIGFyZSBtb3ZpbmcKKwliZXR3ZWVuIG92ZXJsYXBwaW5nIHJlZ2lzdGVycyBwcmlvciB0byByZWxvYWQgdG8gd29yaworCWFyb3VuZCBoYXJkLXRvLWZpeCBzY2hlZC5jIGJ1Zy4KKworVGh1IE5vdiAyMSAxNzoxNDo1NCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGp1bXAuYyAoaW52ZXJ0X2V4cCk6IENvcnJlY3QgdHlwbyBpbiBjb21tZW50LgorCitUaHUgTm92IDIxIDE1OjM0OjI3IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBnY2MudGV4aW5mbyAod2FybmluZyBvcHRpb25zKTogTWFrZSB0aGUgZG9jdW1lbnRhdGlvbiBhZ3JlZSB3aXRoCisJdGhlIGNvZGUsIC1Xc3RyaWN0LXByb3RvdHlwZXMgYW5kIC1XbWlzc2luZy1wcm90b3R5cGVzIGFyZSBub3QKKwl0dXJuZWQgb24gdmlhIC1XYWxsOyAtV25vcGFyZW50aGVzaXMgaXMgbm93IHNwZWxsZWQKKwktV25vLXBhcmVudGhlc2lzLgorCShvcHRpb24gaGVhZGVyKTogTWVudGlvbiB0aGF0IC1XIG9wdGlvbnMgdGFrZSB0aGUgbm8tIHByZWZpeCBhcyB3ZWxsCisJYXMgLWYgb3B0aW9ucy4KKworVGh1IE5vdiAyMSAwODoxMjo1MSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogb3V0LW04OGsuYyAoY2hlY2tfZmxvYXRfdmFsdWUpOiBDaGFuZ2UgdXNlIG9mIFJFQUxfVkFMVUVfVFJVTkNBVEUuCisJKiB0bS1tODhrLmggKEZMT0FUX1RPX0lOVF9JTlRFUk5BTCk6IERpdHRvLgorCShBU19CVUdfUE9VTkRfVFlQRSk6IFNpbXBsaWZ5LgorCSogdG0tbTg4a2RndXguaDogRG9uJ3QgbmVlZCBBU19CVUdfRE9UX0xBQkVMUyBvciBBU19CVUdfUE9VTkRfVFlQRS4KKworVGh1IE5vdiAyMSAwNjo0NzoxMSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQgKHNjYyk6IEFkZCBtaXNzaW5nICcmJyBpbiBzb21lIGFsdGVybmF0aXZlcyBvZiBjb25zdHJhaW50cy4KKworCSogYTI5ay5tZCAobmVnZGYyKTogRml4IHR5cG8gaW4gY29uc3RyYWludHMgZm9yIFNDUkFUQ0ggaW4gMjkwNTAgY2FzZS4KKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX1RSVU5DQVRFKTogRGVmYXVsdCBpcyB0byB0cnVuY2F0ZSB0byBmbG9hdCBpZgorCW1vZGUgc2l6ZSBpcyBCSVRTX1BFUl9XT1JEIGluc3RlYWQgb2Ygd2hlbiBtb2RlIGlmIFNGbW9kZS4KKworVGh1IE5vdiAyMSAwMTo1ODoyNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFRlc3QgVFlQRV9CSU5GTyBiZWZvcmUgVFlQRV9CSU5GT19CQVNFVFlQRVMuCisKK1RodSBOb3YgMjEgMDE6NDU6NTMgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBCcmVhayBvdXQgYG5ldycgZXhwcmVzc2lvbnMgd2l0aAorCXBhcmVudGhlc2l6ZWQgdHlwZXMgaW50byBtb3JlIGJhc2ljIGZvcm1zLCBhbmQgaGFuZGxlIHRyYWlsaW5nIGFycmF5CisJZGltZW5zaW9ucyB3aXRoIGFuIGFwcHJvcHJpYXRlIHdhcm5pbmcgbWVzc2FnZS4KKworCSogY3AtY2xhc3MuYyAocHVzaGNsYXNzKTogRm9yIFVQVHlwZSwgb3ZlcmxvYWQgdGhlIHRlbXBsYXRlIG5hbWUuCisJKHBvcGNsYXNzKTogRm9yIFVQVHlwZSwgdW5kbyB0aGUgb3ZlcmxvYWQuCisKKwkqIGNwLWRlY2wuYyAocG9wX2RlY2xfbGV2ZWwpOiBEb24ndCBsb29rIHVwIERFQ0xfTkFNRSBzbG90IG9mIGEKKwludWxsIHBvaW50ZXIuCisJKHB1c2hkZWNsX3RvcF9sZXZlbCk6IFJld29ya2VkIGhhbmRsaW5nIG9mIHNoYWRvdyBsaXN0cyB0byBiZQorCWNvcnJlY3QuCisJKGxvb2t1cF90YWcpOiBCeXBhc3MgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UgZm9yIFVQVCBhcyB3ZWxsIGFzCisJZm9yIFRFTVBMQVRFX0RFQ0wuCisJKHN0YXJ0X2RlY2wpOiBBZGQgdGVtcGxhdGUgZGVjbHMgb25seSB0byB0b3AgbGV2ZWwuICBQcmludCBtZXNzYWdlCisJZm9yIG5vbi1mdW5jdGlvbiwgbm9uLWNsYXNzIHRlbXBsYXRlcy4KKwkoZmluaXNoX2RlY2wpOiBEaXNhYmxlIGNvZGUgdGhhdCByZW5hbWVzIGFub255bW91cyB0eXBlczsgbGVhdmUgaXQKKwlkaXNhYmxlZCB1bnRpbCB3ZSBmaWd1cmUgb3V0IHdoeSBpdCB3YXMgYmVpbmcgZG9uZSBpbiB0aGUgZmlyc3QKKwlwbGFjZS4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBFbGltaW5hdGUgaGFjayB0byBkZWFsIHdpdGggZGVzdHJ1Y3RvciB0ZW1wbGF0ZXMuCisJRXh0ZW5kIHNvbWUgY29kZSBoYW5kbGluZyBjb25zdHJ1Y3RvcnMgdG8gaGFuZGxlIGRlc3RydWN0b3JzIGFzCisJd2VsbC4gIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBjb2RlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbgorCXRlbXBsYXRlcy4KKworCSogY3AtZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZSk6IFRyZWF0IGNsYXNzIHRlbXBsYXRlIGRlY2wgbGlrZQorCXR5cGUgZGVjbC4KKworCSogY3AtbGV4LmMgKHN0b3JlX3BlbmRpbmdfaW5saW5lKTogSWYgYSBmdW5jdGlvbiBpcyBub3QgdG8gYmUKKwljb21waWxlZCwgZGlzY2FyZCBpdHMgdGV4dCBvbmx5IGlmIGNhbl9mcmVlIGZsYWcgaXMgc2V0LgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRm9yIGBwcmUtcGFyc2VkJyBmdW5jdGlvbnMsIG9ubHkKKwlzZXQgZXh0ZXJuLWlubGluZSBmbGFnIGlmIGlubGluZSBmbGFnIGlzIHNldC4KKwkqIGNwLWxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBEb24ndCBzZXQgaW5saW5lIGZsYWcgZm9yIG1ldGhvZAorCXRlbXBsYXRlcywgcmVnYXJkbGVzcyBvZiBkZWZhdWx0LWlubGluZSBmbGFnIHNldHRpbmcuCisJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBEaXR0by4KKworCSogY3AtbWV0aG9kLmMgKGR1bXBfdHlwZSk6IERvIHNvbWV0aGluZyBzZW1pLXVzZWZ1bCB3aXRoIFVQVAorCW5vZGVzLCBpbnN0ZWFkIG9mIGNyYXNoaW5nLgorCShmbmRlY2xfYXNfc3RyaW5nKTogRm9yIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLCB1c2UgbmFtZSBvZgorCWZ1bmN0aW9uIHJhdGhlciB0aGFuIGxvb2tpbmcgdXAgY2xhc3MgY29uc3RydWN0b3IgbmFtZTsgc2hvdWxkIGJlCisJdGhlIHNhbWUsIGFuZCBpdCdzIGNoZWFwZXIgdGhpcyB3YXkuCisJKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBNYWtlIHRlbXBsYXRlLXJlbGF0ZWQgbmFtZXMgdW5pcXVlLCBhcyB3ZWxsCisJYXMgdW5saWtlbHkgdG8gYmUgYWNjZXB0ZWQgYnkgdGhlIGFzc2VtYmxlci4KKworCSogY3AtcGFyc2UueSAoeXlwcmludCk6IEhhbmRsZSBQUkVfUEFSU0VEX0NMQVNTX0RFQ0wuCisJKHRlbXBsYXRlX2RlZik6IEluIGNhc2UgaGFuZGxpbmcgZGVzdHJ1Y3RvcnMsIHBhc3MgbmV3IGRlY2wgdG8KKwllbmRfdGVtcGxhdGVfZGVjbCwgcmF0aGVyIHRoYW4gdW5ncm9ra2VkIGNhbGxfZXhwciBub2RlLiAgUmV3cm90ZQorCWxhc3QgZGVyaXZhdGlvbi4KKwkoc2NvcGVkX3R5cGVuYW1lKTogRG9uJ3QgdHJ5IGJ1aWxkaW5nIGZyb20gdGVtcGxhdGUgdHlwZTsgaXQgZG9lc24ndAorCXdvcmsuCisJKHRyeV9mb3JfdHlwZW5hbWUpOiBUcmVhdCB0eXBlbmFtZSB1c2luZyB0ZW1wbGF0ZSBwYXJtcyBsaWtlIGFueQorCW90aGVyIHR5cGVuYW1lLgorCisJKiBjcC1wdC5jOiBOZXcgY29tbWVudCBhdCBzdGFydCBsaXN0cyBzb21lIGtub3duIHByb2JsZW1zLgorCShlbmRfdGVtcGxhdGVfZGVjbCk6IERvIG5vdGhpbmcgZm9yIGVycm9yX21hcmtfbm9kZS4gIENoZWNrCisJREVDTF9DTEFTU19DT05URVhUIGFuZCBERUNMX0VYVEVSTkFMIHdoZW4gc2V0dGluZyBUUkVFX0VYVEVSTkFMCisJZmllbGQgb2YgdGVtcGxhdGUgZGVjbC4gIERvbid0IG5lZWQgdG8gcG9wIGV4dHJhIGNsYXNzIGxldmVsIGZvcgorCW5vbi1vcGVyYXRvcnMgYW55IG1vcmUsIGJ1dCBkbyBuZWVkIHRvIGFzc2lnbiBjbGFzcyBjb250ZXh0IGZpZWxkLgorCShpbnN0YW50aWF0ZV9tZW1iZXJfdGVtcGxhdGVzKTogTm93IHJldHVybnMgdm9pZC4KKwkodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBQcm9jZXNzIGZsYWcgZmllbGRzIG9mIG1ldGhvZCBhcyBmb3IKKwlvdGhlciBmdW5jdGlvbnMuICBIYW5kbGUgY2xhc3MgY29udGV4dCBmaWVsZC4gIFB1c2ggZGVjbCBhdCB0b3AKKwlsZXZlbCBvbmx5IGlmIGRlY2wgY29udGV4dCBpcyBudWxsLgorCSh0c3Vic3QsIGNhc2UgVFJFRV9MSVNUKTogVXNlIHZpYS1wdWJsaWMgYW5kIHZpYS12aXJ0dWFsIGZpZWxkcy4KKwkoZG9fcGVuZGluZ19leHBhbnNpb25zKTogQ29ycmVjdCBoYW5kbGluZyBvZiBtZXRob2RzLgorCisJKiBjcC1wdC5jIChvdmVybG9hZF90ZW1wbGF0ZV9uYW1lKTogSWYgbm90IGNsYXNzLWxldmVsLCBwdXNoCisJZXh0cmEgYmluZGluZyBsZXZlbC4gIERpc2FibGUgY2hlY2sgdGhhdCBvdmVybG9hZCBoYXNuJ3QgYWxyZWFkeQorCWJlZW4gZG9uZTsgZm9yIG5vdywgaXQncyBuZWVkZWQuCisJKHVuZG9fdGVtcGxhdGVfbmFtZV9vdmVybG9hZCk6IFBvcCBpdC4KKworVGh1IE5vdiAyMSAwMDoxNTozMyAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9tZXRob2RzKTogRG9uJ3QgZGVyZWZlcmVuY2UgVFlQRV9OQU1FIGFuZAorCWN0b3JfbmFtZSB1bnRpbCBhZnRlciBjaGVja2luZyBmb3Igbm9uLW51bGwgbWV0aG9kcy4KKworCSogc2NoZWQuYyAoY3JlYXRlX3JlZ19kZWFkX25vdGUpOiBOZXcgZnVuY3Rpb24uICBBZGQgYSBSRUdfREVBRCBub3RlCisJZm9yIFJFRyB0byBJTlNOLCByZXVzaW5nIGEgUkVHX0RFQUQgbm90ZSBmcm9tIHRoZSBkZWFkX25vdGVzIGxpbmUuCisJKGF0dGFjaF9kZWF0aHMpOiBBZGQgcXVpY2sgZXhpdCBmb3IgbWFueSBydHggdGhhdCBjYW4ndCBjb250YWluIGEKKwlyZWdpc3Rlci4gIFJld3JpdGUgUkVHX0RFQUQgbm90ZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHNjaGVtZSAoc2VlCisJdGhlIE5vdiAxIENoYW5nZUxvZyBlbnRyeSkuCisJKG5ld19pbnNuX2RlYWRfbm90ZXMpOiBEb24ndCBhZGQgYSBSRUdfREVBRCBub3RlIHRvIGFuIGluc24gdGhhdAorCWFscmVhZHkgaGFzIG9uZS4KKwkodXBkYXRlX2xpbmtzKTogTXVzdCBjb252ZXJ0IFJFR19VTlVTRUQgbm90ZXMgdG8gUkVHX0RFQUQgd2hlbiBhCisJcmVnaXN0ZXIgZm9ybWVybHkganVzdCBjbG9iYmVyZWQgaXMgbm93IGV4cGxpY2l0bHkgc2V0IGFuZCB1c2VkIGluCisJdGhlIG5ldyBzcGxpdCBpbnNucy4KKworV2VkIE5vdiAyMCAxODowMjozOCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jLCBjY2NwLmM6IENoYW5nZSBhbGwgLVdubyBvcHRpb25zIHRvCisJLVduby0gb3B0aW9ucyBzbyBhcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdG9wbGV2LmMsIGFuZCBzbyBhcworCXRvIGFsc28gYmUgY29uc2lzdGVudCB3aXRoIHRoZSAtZm5vLSBvcHRpb25zLgorCSogb2JqYy1hY3Rpb25zLmM6IEFkZCBhIC1Xbm8tc2VsZWN0b3Igb3B0aW9uIHRvIG1hdGNoIHRoZQorCS1Xc2VsZWN0b3Igb3B0aW9uLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBQYXNzIGFsbCAtVyBvcHRpb25zIHRvIGNwcCwgc28gdGhhdAorCS1Xbm8gb3B0aW9ucyB3aWxsIGJlIHBhc3NlZCBhbG9uZyB3aXRoIHRoZSAtVyBvcHRpb25zIHRoYXQgaXQKKwl1bmRlcnN0YW5kcy4KKwkqIGNjY3AuYyAobWFpbik6IEFjY2VwdCAtV25vIG9wdGlvbiBjb3VudGVycGFydHMgZm9yIGV2ZXJ5CisJZXhpc3Rpbmcgb3B0aW9uLgorCitXZWQgTm92IDIwIDAwOjAzOjQxIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChsYW5nX291dHB1dF9kZWJ1Z19pbmZvKTogRGVsZXRlZC4KKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBTZXQgREVDTF9JR05PUkVEX1Agb24gdGhlIFRZUEVfREVDTAorCW5vZGVzIGZvciB0eXBlcyB0aGF0IHNob3VsZCBub3QgaGF2ZSB0aGVpciBkZWJ1Z2dpbmcgaW5mbyB3cml0dGVuCisJb3V0LgorCSogZGJ4b3V0LmMgKGRieG91dF97c3ltYm9sLHR5cGV9KTogQ2hlY2sgREVDTF9JR05PUkVEX1AgZm9yCisJVFlQRV9ERUNMcyBvZiBSRUNPUkRfVFlQRSBub2Rlcy4KKworCSogY3AtZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBGaXggYnVnIGluIGdyb2traW5nIE5FV19FWFBSCisJYW5kIERFTEVURV9FWFBSIG9wZXJhdG9ycy4KKwkqIGNwLW1ldGhvZC5jIChoYWNrX29wZXJhdG9yKTogRGVsZXRlZC4KKwkqIGNwLWluaXQuYyAoaW5pdF9pbml0X3Byb2Nlc3NpbmcpOiBVc2UgYGFuc2lfb3BuYW1lJyBmb3IKKwl7TkVXLERFTEVURX1fRVhQUiBpbnN0ZWFkIG9mIGNhbGxpbmcgaGFja19vcGVyYXRvciBhbmQgYnVpbGRfb3BpZC4KKwkqIGNwLWRlY2wyLmMgKGdyb2tvcGV4cHIpOiBEZWxldGVkLgorCSogY3AtbGV4LmMgKGJ1aWxkX29waWQpOiBEZWxldGVkLgorCSogY3AtY2xhc3MuYyAoYnVpbGRfaW5zdGFudGlhdGVkX2RlY2wpOiBEZWxldGVkLgorCSogQWxsIGNwLSogZmlsZXM6IE9QX0lERU5USUZJRVIgaXMgbm8gbG9uZ2VyIHVzZWQuCisKKwkqIGNwLXBhcnNlLnkgKG9wZXJhdG9yX25hbWUpOiBGb3IgbW9zdCBjYXNlcywgVXNlIGBhbnNpX29wbmFtZScKKwlkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYGJ1aWxkX29waWQnLgorCitUdWUgTm92IDE5IDE2OjAyOjUxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHhyZWZfdGFnKTogSWYgd2UgZmluZCB3cm9uZyBraW5kIG9mIHR5cGUsIHJldHVybiBpdC4KKwkobG9va3VwX3RhZyk6IEZpbGwgaW4gcGVuZGluZ19pbnZhbGlkX3hyZWZfZmlsZSwgLi4uX2xpbmUuCisKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9UUlVOQ0FURSk6IE5ldyBhcmd1bWVudCBNT0RFLgorCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiwgc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6CisJUGFzcyB0aGF0IGFyZy4KKwkqIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55LCBjcC1sZXguYyAoeXlsZXgpOiBMaWtld2lzZS4KKwkqIGZvbGQtY29uc3QuYyAoY29tYmluZSk6IFRydW5jYXRlIGZsb2F0aW5nIHJlc3VsdCB0byBmaXQgbW9kZS4KKwkoZm9sZCk6IERvbid0IGFkZCAxIHRvIGZsb2F0IGNvbnN0YW50IGlmIHRoYXQgZG9lc24ndCBjaGFuZ2UgdGhlIHZhbHVlLgorCitUdWUgTm92IDE5IDA5OjM3OjM2IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKG5zMzJrLWVuY29yZS1vc2YpOiBSZXN0b3JlIEVuY29yZSBNdWx0aW1heCB1c2luZyB0aGUKKwlPU0Yvcm9zZSBvYmplY3QgZm9ybWF0LCBzaW5jZSB0aGUgbmVjZXNzYXJ5IGZpbGVzLCBzdWNoIGFzCisJdG0tZW5jcm9zZS5oLCBhcmUgcHJlc2VudCBpbiB0aGUgZGlzdHJpYnV0aW9uLgorCitNb24gTm92IDE4IDIxOjM4OjEzIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogb3V0LXNwYXJjLmMgKG91dHB1dF9jYnJhbmNoKTogQWx3YXlzIGVtaXQgYSBub3AgYmVmb3JlIGEgRlAgYnJhbmNoCisJdG8gYXZvaWQgaWxsZWdhbCBhc3NlbWJseSBvdXRwdXQuCisJKiBzcGFyYy5tZDogRG9uJ3QgZGVmaW5lIGRlbGF5IHNsb3QgZm9yIEZQIGNvbXBhcmUgaW5zbnMuICBUaGlzIHdhcworCW1lYW50IHRvIHNvbHZlIHRoZSBhYm92ZSBwcm9ibGVtLCBidXQgZmFpbHMgd2l0aCBpbnNuIHNjaGVkdWxpbmcuCisKKwkqIHNwYXJjLm1kIChtb3ZzaSk6IE11c3QgYWNjZXB0ICdmJyBpbiBhZGRpdGlvbiB0byAncicgYmVjYXVzZQorCWNvbWJpbmUgY2FuIGNvbnZlcnQgRlAgaGFyZCByZWdpc3RlcnMgdG8gU0ltb2RlLgorCitNb24gTm92IDE4IDEzOjQzOjEyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJ0bGFuYWwuYyAocmVwbGFjZV9yZWdzKTogQ29ycmVjdCBjb2RlIHRoYXQgcHJldmVudHMgbmVzdGVkIFNVQlJFR3MuCisKK01vbiBOb3YgMTggMTM6NDM6MTIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBSZWluc3RhbGwgbG9zdCBlbmRfdGVtcG9yYXJ5X2FsbG9jYXRpb24uCisKKwkqIHRyZWUuaCAoREVDTF9MQU5HX0ZMQUdfOCk6IERlbGV0ZWQuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBEb24ndCB1c2UgaXQuIERvIHByaW50IERFQ0xfSUdOT1JFRF9QLgorCitNb24gTm92IDE4IDA2OjU5OjM3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jICh2YWx1ZV9pZGVudGlmaWVyKTogR29uZSwgZm9sbG93aW5nIGMtZGVjbC5jLiAgTm93IHVzZQorCXplcm8gREVDTF9OQU1FIGZvciB0aGlzIHB1cnBvc2UuCisJKiBjcC10eXBlY2suYzogQWxzbyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4KKworCSogYy1sYW5nLmMsIG9iamMtbGFuZy5jIChsYW5nX291dHB1dF9kZWJ1Z19pbmZvKTogTmV3IGZ1bmN0aW9uLgorCSogZGJ4b3V0LmMgKGRieG91dF90eXBlX21ldGhvZHMpOiBGaXggbWlub3IgcHJvYmxlbXMgYXJpc2luZyBmcm9tCisJYXNzdW1pbmcgYWxsIFJFQ09SRF9UWVBFIGFyZSBDKysgUkVDT1JEX1RZUEUgbm9kZXMuCisJKGRieG91dF90eXBlKTogRGl0dG8uCisKK1N1biBOb3YgMTcgMTc6MzM6NTggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmMgKHN0cnVjdCBvYnN0YWNrX3N0YWNrKTogTmV3IHNsb3RzIGV4cHJlc3Npb24gYW5kIHJ0bC4KKwkocHVzaF9vYnN0YWNrcywgcHVzaF9vYnN0YWNrc19ub2NoYW5nZSwgcG9wX29ic3RhY2tzKToKKwlTYXZlIGFuZCByZXN0b3JlIGFsbCA0IG9ic3RhY2sgdmFycyBpbmRpdmlkdWFsbHkuCisKKwkqIGMtZGVjbC5jIChzdGFydF9kZWNsKTogQ2FsbCBwdXNoX29ic3RhY2tzX25vY2hhbmdlIGhlcmUuCisJKHB1c2hfcGFybV9kZWNsLCBncm9rZmllbGQpOiBBbHNvIGhlcmUuCisJKGZpbmlzaF9kZWNsKTogTm90IGhlcmUuCisJQWxzbyBjbGVhbiB1cCB0ZXN0IGZvciB3aGV0aGVyIHRvIHJlcGxhY2UgREVDTF9JTklUSUFMIHdpdGggZXJyb3IgbWFyay4KKworU3VuIE5vdiAxNyAxNDoyNToxNSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBCZSBtb3JlIGNhcmVmdWwgYWJvdXQgdGhyb3dpbmcKKwlhd2F5IG9ubHkgY2xlYW51cCBnZW5lcmF0ZWQgYnkgJ2J1aWxkX2Z1bmN0aW9uYWxfY2FzdCcuCisKKwkqIGNwLWluaXQuYyAoYnVpbGRfbmV3KTogVXNlIFRSVUVfVFlQRSBpbnN0ZWFkIG9mIFRZUEUgbW9yZQorCWNvbnNpc3RlbnRseSwgaW4gY2FzZSBUWVBFIGlzIHJlYWxseSBhbiBBUlJBWV9UWVBFIG9uIGl0cyBvd24uCisKKwkqIGNwLWRieG91dC5jOiBHb25lLiAgTm93IEcrKyB1c2VzIGRieG91dC5jLgorCSogY3AtdHJlZS5oIChPUEVSQVRPUl9OQU1FX1ApOiBDaGFuZ2VkIHRvIElERU5USUZJRVJfT1BOQU1FX1AuCisJKE9QRVJBVE9SX1RZUEVOQU1FX1ApOiBDaGFuZ2VkIHRvIElERU5USUZJRVJfVFlQRU5BTUVfUC4KKwkoT1BFUkFUT1Jfe05FVyxERUxFVEV9X0ZPUk1BVCk6IERlbGV0ZWQuCisJKiBjcC1sZXguYyAoYW5zaV97b3BuYW1lLGFzc29wbmFtZX0pOiBOZXcgdmFyaWFibGVzLiAgQWxsIGNwLSogZmlsZXMKKwljaGFuZ2VkIHRvIHVzZSB0aGVzZSB3aGVyZSBjb21wYXJpc29ucyBhZ2FpbnN0ICpfRk9STUFUIHdlcmUgbWFkZS4KKwkoaW5pdF9sZXgpOiBJbml0aWFsaXplIGBhbnNpX3tvcG5hbWUsYXNzb3BuYW1lfScgYXJyYXlzLgorCUFsc28sIHVwZGF0ZSB7b3BuYW1lLGFzc2lnbm9wfV90YWIgZ3JvayBuZXcgQU5TSSBlcXVpdmFsZW5jZXMuCisJKGJ1aWxkX29wZXJhdG9yX2ZubmFtZSk6IENoYW5nZWQgdG8gYnVpbGQgQU5TSS1zdHlsZSBvdmVybG9hZGVkCisJbmFtZXMuCisJKiBjcC1kZW0uYyAob3B0YWJsZSk6IEFkZCBuZXcgQU5TSSBlcXVpdmFsZW5jZXMuCisJKGNwbHVzX2RlbWFuZ2xlKTogRml4ZWQgdG8gcmVjb2duaXplIG5ldyBBTlNJIGRlbWFuZ2xpbmcuICBOb3RlIHRoYXQKKwlvbGQtc3R5bGUgZGVzdHJ1Y3RvcnMsIGFuZCBwb3NzaWJseSBvdGhlciBjb2RlcyB3ZXJlIGJyb2tlbiBieSB0aGUKKwkodW5kb2N1bWVudGVkKSAyNyBPY3QgY2hhbmdlcy4KKworCSogY3AtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBTZXQgREVDTF9DTEFTU19DT05URVhUIGhlcmUuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogRG9uJ3Qgc2tpcCBvdmVyIEZVTkNUSU9OX0RFQ0wgdGhhdAorCWFscmVhZHkgaGFzIGEgREVDTF9DTEFTU19DT05URVhULgorCisJKiBjcC1leGNlcHQuYyAoY3BsdXNfZXhwYW5kX2VuZF90cnkpOiBTZXQgQkxPQ0tfSEFORExFUl9CTE9DSyBmb3IKKwlibG9ja3MgdGhhdCBoYW5kbGUgZXhjZXB0aW9ucy4KKwkoRVhDRVBUSU9OX05BTUVfUFJFRklYKTogU2hvcnRlZCB0byAiX19leCIgKGZyb20gIl9fZXhjZXB0aW9uIikuCisJKEVYQ0VQVElPTl9OQU1FX0xFTkdUSCk6IFJlZHVjZWQgdG8gNCBmcm9tIDEyLgorCisJKiBkYnhvdXQuYyAoZmxhZ19taW5pbWFsX2RlYnVnKTogRGVmaW5lIG5ldyB2YXJpYWJsZSB0aGF0IGlzCisJbm9uLXplcm8gd2hlbiBzeW10YWIgb3V0cHV0IHJvdXRpbmVzIGNhbiBvdXRwdXQgYWJicmV2aWF0ZWQuCisJKGRieG91dF90eXBlX2ZpZWxkcyk6IE1vdmUgY29kZSB0aGF0IHdyaXRlcyBvdXQgZGVidWdnaW5nIGluZm8gYWJvdXQKKwlmaWVsZHMgb2YgUkVDT1JEX1RZUEUgYW5kIFVOSU9OX1RZUEUgbm9kZXMgZnJvbSBgZGJ4b3V0X3R5cGUnIGludG8KKwl0aGlzIGZ1bmN0aW9uLiAKKwkoZGJ4b3V0X3R5cGVfe21ldGhvZCxtZXRob2RfMX0pOiBNb3ZlIGNvZGUgZnJvbSBgZGJ4b3V0X3R5cGUnIGludG8KKwl0aGVzZSBuZXcgZnVuY3Rpb25zLgorCShkYnhvdXRfdHlwZSk6IE5vdyB3cml0ZXMgb3V0IGluZm8gYWJvdXQgYmFzZXR5cGVzLiAgQWxzbywgbm8gbG9uZ2VyCisJbmVlZCB0byByZWNvcmQgaW5mbyBhYm91dCB0eXBlcyBoYXZpbmcgY3RvcnMsIGR0b3JzLCBvciBib3RoLiAgR0RCCisJbm93IGZpZ3VyZXMgb3V0IHdoYXQgaXQgbmVlZHMgdG8sIHdoZW4gaXQgbmVlZHMgdG8uCisJKGRieG91dF9zeW1ib2wpOiBJbXBsZW1lbnQgc3BlY2lhbCBhYmJyZXZpYXRlZCBmb3JtIGZvciBDKysgY2xhc3NlcywKKwl3aGljaCBwbGFjZSB0aGVpciBuYW1lcyBpbiBib3RoIHRoZSBzdHJ1Y3QgYW5kIGRlY2wgbmFtZXNwYWNlcy4KKwkoZGJ4b3V0X2Jsb2NrKTogV3JpdGUgb3V0IHNwZWNpYWwgZGVidWdnaW5nIHN0YWJzIGZvciBleGNlcHRpb24KKwloYW5kbGVyIGJsb2Nrcy4KKworCSogdHJlZS5oIChCTE9DS19IQU5ETEVSX0JMT0NLKTogRGVmaW5lIG5ldyBmbGFnIHRvIGluZGljYXRlIHRoYXQgYQorCUJMT0NLIGlzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIChhIGBjYXRjaCcgYmxvY2sgZm9yIEMrKykuCisJKFRSRUVfVkZJRUxELCBERUNMX0lHTk9SRURfUCk6IE5ldyBtYWNyb3MuCisKK1NhdCBOb3YgMTYgMjI6MjE6NTYgMTk5MSAgSmVmZnJleSBBIExhdyAgKGxhdyBhdCBzdXBlci5zdXBlci5vcmcpCisKKwkqIHRtLW02OGsuaCAoQ09OU1RfQ09TVFMpOiBJbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIC0xMjggYW5kIDEyNworCWluY2x1c2l2ZSBhcmUgdmVyeSBjaGVhcCBiZWNhdXNlIG9mIG1vdmVxLiAgCisKK1NhdCBOb3YgMTYgMDA6NDA6MDQgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jcm9zcy10b29scyk6IEF2b2lkIGNsb2JiZXJpbmcgc3ltbGlua3MgYWxyZWFkeQorCW1hZGUuICBEb3VibGUgdGhlICQgYmVmb3JlIHRoZSBAIGluIHRoZSBpbmRpcmVjdGlvbiBzY3JpcHQuCisKKwkqIHQtZGVjc3RhdG46IE5ldyBmaWxlLgorCSogY29uZmlndXJlOiAobWlwcy1kZWMtdWx0cml4Kik6IFVzZSB0LWRlY3N0YXRuLgorCisJKiBjb2xsZWN0LWxkOiBBbHdheXMgcnVuIGNvbGxlY3QgaWYgY29sbGVjdCBpcyBpbnN0YWxsZWQuCisKKwkqIGNvbGxlY3Qtb3NmLmMsIGVucXVpcmUuYywgZ251bGliMi5jOiBVc2UgZ3N0ZGRlZi5oLCBub3Qgc3RkZGVmLmguCisKKwkqIGdudWxpYjIuYyAoX19lcHJpbnRmKTogVW5kZWYgTlVMTC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYXJyYXlfcmVmKTogUmVmIGlzIHZvbGF0aWxlIGlmIGFycmF5IGlzIHZvbGF0aWxlLgorCitGcmkgTm92IDE1IDE5OjUzOjQxIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IERlbGV0ZSBFUlJPUl9DT0RFCisJYXJndW1lbnQgYmVjYXVzZSBpdCBpcyBhbHdheXMgdGhlIHNhbWUgYXMgQ09ERS4gIEFkZCBuZXcgYXJndW1lbnQKKwlDT05WRVJUX1AsIGFuZCBjYWxsIGRlZmF1bHRfY29udmVyc2lvbiBvbiB0aGUgb3BlcmFuZCB0cmVlcyBpZgorCXRydWUuICBSZW5hbWUgdG8gYnVpbGRfYmluYXJ5X29wLgorCShvbGQgYnVpbGRfYmluYXJ5X29wKTogRGVsZXRlZCBiZWNhdXNlIGl0IGlzIG5vdyB1bm5lY2Vzc2FyeS4KKwkqIGMtY29tbW9uLmMsIGMtY29udmVydC5jLCBjLWRlY2wuYywgYy10cmVlLmgsIGMtdHlwZWNrLmM6IEFsbAorCWNhbGxlcnMgYW5kIG90aGVyIHJlZmVyZW5jZXMgdG8gYnVpbGRfYmluYXJ5X29wKiBmaXhlZC4KKwkqIGMtdHlwZWNrLmMgKG5ldyBidWlsZF9iaW5hcnlfb3ApOiBBZGQgd2FybmluZyBtZXNzYWdlIGZvcgorCWNvbXBhcmlzb25zIG9mIHNpZ25lZCBhbmQgdW5zaWduZWQgdmFyaWFibGVzIHRoYXQgd29uJ3QgZ2l2ZSB0aGUKKwlleHBlY3RlZCByZXN1bHQgZHVlIHRvIHVuZXhwZWN0ZWQgc2lnbiBleHRlbnNpb24uCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogQWRkIFRGbW9kZSBzdXBwb3J0IGFuZCBjbGVhbiB1cCBjb2RlLgorCSogb3B0YWJzLmMgKGluaXRfZml4dGFiKTogQWRkIFRGbW9kZSBzdXBwb3J0LgorCShpbml0X2Zsb2F0dGFiKTogTGlrZXdpc2UuCisJKGV4cGFuZF9mbG9hdCk6IExpa2V3aXNlLgorCShleHBhbmRfZml4KTogTGlrZXdpc2UuCisJKGluaXRfb3B0YWJzKTogTGlrZXdpc2UuCisKKwlGcm9tIFBlciBCb3RobmVyOgorCSogY29sbGVjdDIuYzogRGVmaW5lIHZmb3JrIGFzIGZvcmsgZm9yIFVTRy4gIFJld3JpdGUgdG8gbm90IHVzZQorCXByb3RvdHlwZXMsIHNvIGl0IGRvZXNuJ3QgbmVlZCBnY2MgZm9yIGNvbXBpbGF0aW9uLgorCShtYWluKTogTm8gbG9uZ2VyIHVzZXMgc3RhdGljIHNpemVkIGFycmF5IGZvciBsZCBhcmd1bWVudHMsIHNvCisJdGhhdCBsb25nIGNvbW1hbmQgbGluZXMgd2lsbCB3b3JrLiAgVmZvcmsgbGQgaW5zdGVhZCBvZiBydW5uaW5nCisJdmlhIHBvcGVuIHdpdGggbm0uCisJKHdyaXRlX2hvb2tzKTogVXNlIHR5cGUgbmFtZXMgbm90IHZhcmlhYmxlIG5hbWVzIGluIHNpemVvZiBjYWxscy4KKworRnJpIE5vdiAxNSAxNTowMTo0MSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoc2l6ZV9pbnQpOiBQcm9wZXJseSBwcmVzZXJ2ZSBvbGQgb2JzdGFjayBzZXR0aW5ncy4KKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCwgZ3Jva2RlY2xhcmF0b3IsIHhyZWZfdGFnKTogTGlrZXdpc2UuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IExpa2V3aXNlLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9kZWYpOiBMaWtld2lzZS4KKwkqIHRyZWUuYyAocHVzaF9vYnN0YWNrc19ub2NoYW5nZSk6IE5ldyBmdW5jdGlvbi4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBNYWtlIHNpemUgb2YgdGVtcCB0eXBlIHNhdmVhYmxlLgorCSogdHJlZS5jIChzYXZlYWJsZV9hbGxvY2F0aW9uKTogTmV3IGZ1bmN0aW9uLgorCisJKiBjb25maWd1cmU6IENvbW1lbnQgb3V0IGNlcnRhaW4gYWx0ZXJuYXRpdmVzIG5vdCB5ZXQgdXBkYXRlZC4KKwkoc3BhcmMtdW5pY29tLSosIG02OGstdHRpMS0qLCBtNjgtdHRpMi0qKTogTmV3IGFsdGVybmF0aXZlcy4KKwkobTg4ay0qLXY4OHIzMiopOiBOZXcgYWx0ZXJuYXRpdmUuCisJKGkzODYtYWx0ZXJuYXRlLXN5c3YpOiBOZXcgYWx0ZXJuYXRpdmUsIG5vdCBzdXJlIHdoeS4KKwkoc3BhcmMtKi1zeXN2Kik6IENvbW1lbnRlZCBvdXQtLW5vdCByZWFsbHkgc3VwcG9ydGVkLgorCitGcmkgTm92IDE1IDIyOjIyOjMyIFBEVCAxOTkxICBNaWtlIFN0dW1wIChtcnMgYXQgY3N1bi5lZHUpCisKKwkqIGNvbmZpZ3VyZTogUmVjb2duaXplIG9ubHkgY2Fub25pY2FsIG5hbWVzLiAgQWRkZWQgbWlzc2luZyBlbnRyaWVzCisJZm9yIHNvbWUgY29uZmlndXJhdGlvbnMgdGhhdCBvYnZpb3VzbHkgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQgaW4gYQorCXdoaWxlLgorCisJKiBjb25maWcuc3VicjogTWFzc2l2ZSBvdmVyaGF1bC4gIEl0IGNsYWltZWQgdG8gY2Fub25pY2FsaXplCisJdGhlIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiwgYnV0IGl0IG5ldmVyIHJlYWxseSBkaWQuICBOb3cgaXQKKwlkb2VzLiAgSW4gZ2VuZXJhbCwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZSBvcyBmb3IKKwlwb3B1bGFyIG1hY2hpbmVzIHRoYXQgaGF2ZSBhIHBvcHVsYXIgb3MsIG9yIGdpdmVuIHRoZSBvcywgaXQKKwljYW4gc29tZXRpbWVzIGZpZ3VyZSBvdXQgdGhlIHZlbmRvci4gIEFkZGVkIGluIGFsbCB0aGUgb2xkCisJd2F5cyBvZiBzcGVjaWZ5aW5nIG1hY2hpbmVzIGZyb20gY29uZmlndXJlLiAgQWxzbyBhZGRlZAorCXN1cHBvcnQgZm9yIGFsbCAoYmVmb3JlIGl0IHdhcyBtaXNzaW5nIGEgZmV3KSBvZiB0aGUgdG0tKi5oCisJZmlsZXMuICBJdCBub3cgc3VwcG9ydHMgdGhlIGNvbmNlcHQgb2YgZ3Vlc3NpbmcgdGhlIHZlbmRvciBmb3IKKwlhIGdpdmVuIENQVSB0eXBlLiAgSXQgbm93IHN1cHBvcnRzIHRoZSBjb25jZXB0IG9mIGd1ZXNzaW5nIHRoZQorCW9zIHZlcnNpb24gZ2l2ZW4gdGhlIHZlbmRvciBhbmQvb3IgdGhlIENQVSB0eXBlLiAgQ2hhbmdlZCB0aGUKKwlkZWZhdWx0IG9zIGZvciB2YXggdG8gdWx0cml4LCBjaGFuZ2VkIHRoZSBkZWZhdWx0IG9zIGZvciBpMzg2CisJdG8gc2NvLgorCisJKiBjb2xsZWN0LWxkOiAgTmV3IGZpbGUuICBJdCBpcyB1c2VmdWwgd2hlbiBjb21waWxpbmcgQysrIHByb2dyYW1zCisJb24gbWFjaGluZXMgdGhhdCB1c2UgY29sbGVjdC4gIFRoaXMgaW5jbHVkZXMgdGhlIGRlY3N0YXRpb24uCisKK0ZyaSBOb3YgMTUgMTQ6MTk6MjkgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBvdXQtc3BhcmMuYzogU2luZ2xlbW92ZV9zdHJpbmcgbm8gbG9uZ2VyIHN0YXRpYy4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogRW1pdCBzZXRoaS9sb3dfc3VtIGluc24gcGFpciBmb3IgdmFsdWVzIHdoaWNoCisJYXJlIG5vdCBhcml0aF9kb3VibGVfb3BlcmFuZHMsIHdhcyBtaXNzaW5nIG5vdC4KKwkqIHNwYXJjLm1kOiBESW1vZGUgc2V0aGkgcGF0dGVybiBub3cgdXNlcyBzaW5nbGVtb3ZlX3N0cmluZyB0byBsb2FkCisJYSBjb25zdGFudCBpbnRvIGEgcmVnLgorCSogdG0tc3BhcmMuaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWNjZXB0IGFueXRoaW5nIGV4Y2VwdCBhCisJZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuCisJRGVjbGFyZSBzaW5nbGVtb3ZlX3N0cmluZyBzbyBpdCBjYW4gYmUgdXNlZCBpbiBzcGFyYy5tZC4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogQ29ycmVjdCB0eXBvcyBpbiBjb21tZW50cy4KKworRnJpIE5vdiAxNSAwODowNToyNiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvdXQtcnM2MDAwLmMgKHNjY19jb21wYXJpc29uX29wZXJhdG9yKTogQWxsb3cgbm9uLUZQIEVRLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIE5FRyk6IENvcnJlY3Qgc2hpZnQgY291bnQgaW4gY29kZSB0aGF0CisJbmVnYXRlcyBaRVJPX0VYVFJBQ1QgdG8gU0lHTl9FWFRSQUNULgorCitUaHUgTm92IDE0IDIzOjAzOjQ2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2VucmVjb2cuYyAodHJ5X21lcmdlXzEpOiBBZGQgYmlnIG5ldyBjb21tZW50LgorCitUaHUgTm92IDE0IDE5OjI4OjU3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG02OGsubWQ6IEZpeCBwZWVwaG9sZSB0aGF0IG1lcmdlcyBhIHN0YWNrIGFkanVzdCB3aXRoIGEgcHVzaCB0bworCXVzZSBhZGRxdyBpbnN0ZWFkIG9mIGFkZHFsIHNpbmNlIHdlIGtub3cgd2UgYXJlIGluY3JlbWVudGluZyBhbgorCWFkZHJlc3MgcmVnaXN0ZXIgKHNwKS4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBSZXdvcmsgY29kZSB0aGF0IGxvb2tzIGZvciBsb29wcyBzdGFydGluZyBhdCB0aGUKKwlleGl0IHRlc3Q7IGRvbid0IHNraXAgbm9uLWp1bXAgaW5zbnMgYXQgc3RhcnQgb2YgbG9vcCBhbmQgbW9kZXJuaXplCisJYW5kIGNsZWFuIHVwIGNvZGUuCisKKwkqIGdjYy50ZXhpbmZvIChTRUNPTkRBUllfUkVMT0FEX0NMQVNTKTogVXBkYXRlIGRlc2NyaXB0aW9uIHRvCisJc2hvdyB1c2VzIGZvciBib3RoIGludGVybWVkaWF0ZSBhbmQgc2NyYXRjaCByZWdpc3RlcnMuCisJKiByZWxvYWQuaCAoU0VDT05EQVJZX3tJTlBVVCxPVVRQVVR9X1JFTE9BRF9DTEFTUyk6IERlZmF1bHQgZnJvbQorCVNFQ09OREFSWV9SRUxPQURfQ0xBU1MsIGlmIGRlZmluZWQuCisJKEhBVkVfU0VDT05EQVJZX1JFTE9BRFMpOiBEZWZpbmVkIGlmIGFueSBvZiB0aGUgc2Vjb25kYXJ5IHJlbG9hZAorCW1hY3JvcyBhcmUgZGVmaW5lZC4KKwkocmVsb2FkX3NlY29uZGFyeV9pY29kZSwgcmVsb2FkX3tpbixvdXR9X29wdGFiKTogTmV3IHZhcnMuCisJKiByZWxvYWQuYzogSW5jbHVkZSBpbnNuLWNvZGVzLmguCisJKGZpbmRfc2Vjb25kYXJ5X3JlbG9hZCk6IE5ldyBmdW5jdGlvbi4KKwkocHVzaF9yZWxvYWQpOiBDYWxsIGZpbmRfc2Vjb25kYXJ5X3JlbG9hZCB0byBwcm9jZXNzIGlucHV0IGFuZAorCW91dHB1dCByZWxvYWRzLiAgQ3JlYXRlIGJvdGggc2Vjb25kYXJ5IGFuZCB0ZXJ0aWFyeSByZWxvYWRzLAorCWFzIHJlcXVpcmVkLgorCSogcmVsb2FkMS5jOiBJbmNsdWRlIGluc24tY29kZXMuaC4KKwkoaW5pdF9yZWxvYWQpOiBJbml0aWFsaXplIHJlbG9hZF97aW4sb3V0fV9vcHRhYi4KKwkoZW1pdF9yZWxvYWRfaW5zbnMpOiBIYW5kbGUgY2FzZXMgd2hlcmUgYSBzZWNvbmRhcnkgcmVsb2FkCisJaXMgYSBzY3JhdGNoIHJlZ2lzdGVyIGFuZCB3aGVyZSB0ZXJ0aWFyeSByZWxvYWRzIGFyZSByZXF1aXJlZC4KKwkqIE1ha2VmaWxlLmluIChyZWxvYWQubywgcmVsb2FkMS5vKTogTm93IGluY2x1ZGUgaW5zbi1jb2Rlcy5oLgorCisJKiB0bS1yb21wLmggKFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTKTogRGVmaW5lIHRvIHVzZSBhIEJBU0VfUkVHUworCWZvciBzeW1ib2xpYyBtZW1vcnkgbG9jYXRpb25zLgorCSogcm9tcC5tZCAocmVsb2FkX291dHNpLCByZWxvYWRfb3V0aGksIHJlbG9hZF9vdXRxaSk6IE5ldyBwYXR0ZXJucy4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFBhc3MgQlJBTkNIX0NPU1QgdG8gZG9fc3RvcmVfZmxhZy4KKwkoZG9fc3RvcmVfZmxhZyk6IENhbm9uaWNhbGl6YXRpb25zIGRvbmUgaW4gZW1pdF9zdG9yZV9mbGFnCisJbmVlZCB0byBiZSBkb25lIGhlcmUgYXMgd2VsbC4KKwlUZXN0IGZvciBmZnMgYXMgd2VsbCBhcyBhYnMgd2hlbiBzZWVpbmcgaWYgc2NjIGlzIGV4cGVuc2l2ZS4KKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBDb3JyZWN0IGNhc2VzIHRoYXQgYXJlIG9wZW4tY29kZWQ6CisJQWRkIGEgZmV3IG1pc3NpbmcgY2FzZXMgYW5kIGNvcnJlY3QgaGFuZGxpbmcgb2Ygbm9ybWFsaXplcC4KKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QsIGNhc2UgSU9SKTogQ29udmVydCBzZXF1ZW5jZQorCW9wZW4tY29kZWQgYnkgZW1pdF9zdG9yZV9mbGFnIGludG8gTEUgb3IgKG5lZyAobGUgLi4pKSwgYXMKKwlhcHByb3ByaWF0ZS4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QsIGNhc2UgTUlOVVMpOiBTaW1pbGFybHksIGZvciBHVC4KKwkoc2ltcGxpZnlfY29tcGFyaXNvbik6IHNpZ25fYml0X2NvbXBhcmlzb25fcCBub3cgdHJ1ZSBvbmx5IGlmCisJYWxzbyBjb21wYXJpbmcgYWdhaW5zdCBjb25zdGFudCB6ZXJvLgorCShzaW1wbGlmeV9jb21wYXJpc29uLCBjYXNlIE5PVCk6IElmIHNpZ24gYml0IGNvbXBhcmlzb24sIGp1c3QKKwlyZXZlcnNlIGNvbXBhcmlzb24uCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24sIGNhc2UgTUlOVVMpOiBNb3ZlIGNhc2Ugd2hlcmUgd2Ugc3VidHJhY3QKKwlvbmUgZnJvbSB0aGUgYWJzb2x1dGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRvIFBMVVMsIHNpbmNlIHdlCisJc3VidHJhY3Qgb25lIHVzaW5nIGEgUExVUyBvcGVyYXRpb24uCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24sIGNhc2UgTUlOVVMpOiBIYW5kbGUgR1QgY2FzZSBkb25lIGJ5CisJZW1pdF9zdG9yZV9mbGFnLgorCShzaW1wbGlmeV9jb21wYXJpc29uLCBjYWUgSU9SKTogU2ltaWxhcmx5LCBmb3IgSU9SLgorCisJKiB0bS1yczYwMDAuaCAoQlJBTkNIX0NPU1QpOiBEZWZpbmUgYXMgMi4KKwkqIHJzNjAwMC5tZCAoc2NjKTogQWxsb3cgc29tZSBtb3JlIGNhc2VzLgorCShuZXcgc2NjIHBhdHRlcm5zKTogQWRkIG51bWVyb3VzIHBhdHRlcm5zIHRvIHJlZmxlY3Qgc3VwZXJvcHRpbWl6ZXIKKwlyZXN1bHRzIGZvciBzY2MgaW5zbnMgb24gUlMvNjAwMC4KKworVGh1IE5vdiAxNCAxNjo0MjoxOSAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jIChhbGwpOiBDaGFuZ2Ugc21hbGwgYWxsb2NhdGlvbiByZXF1ZXN0cyB0byB1c2UKKwlzZXBhcmF0ZSBhbGxvY2F0aW9uIGFuZCBmcmVlIGZ1bmN0aW9ucywgaW5zdGVhZCBvZiB1c2luZyB0aGUgd29yZDgKKwl1bmlvbiB0byBob2xkIGVhY2ggcmVxdWVzdC4gIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBlYXNpbHksIGEgZnJlZQorCWZpZWxkIHdhcyBhZGRlZCB0byBlYWNoIHNtYWxsIHN0cnVjdHVyZSB0aGF0IGlzIHJlbGVhc2VkLgorCShtYWluKTogSWYgZGVidWdnaW5nLCBwcmludCBhIHN1bW1hcnkgb2YgdGhlIG51bWJlciBvZiBzbWFsbAorCWFsbG9jYXRpb25zLCBmcmVlcywgYW5kIHRoZSBudW1iZXIgb2YgcGFnZXMgdXNlZC4KKwkoYWRkX3Byb2NlZHVyZSwgY29weV9vYmplY3RzKTogU3R1ZmYgdGhlIHBvaW50ZXIgdG8gdGhlIGVuZCBzeW1ib2wKKwlpbnRvIHRoZSBzaGFzaCBjaGFpbiwgYW5kIHVzZSBpdCdzIHZhbHVlIHRvIGdlbmVyYXRlIHRoZSBuZXcgdmFsdWUKKwlmb3IgdGhlIGNvbXB1dGVkIGVuZCBibG9jay4gIFRoaXMgaXMgbXVjaCBzYWZlciB0aGFuIHRyeWluZyB0bworCWNhbGN1bGF0ZSB0aGlzIG9uIHRoZSBmbHkuCisJKG1haW4pOiBEb24ndCB0cnkgdG8gYXZvaWQgdXNpbmcgbWFsbG9jIGJ5IHNldHZidWYnaW5nIHRoZSBzdHJlYW1zCisJd2UgdXNlLgorCitXZWQgTm92IDEzIDIzOjQ3OjEwIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCUZyb20gdGVnZUBzaWNzLnNlOgorCSogc3BhcmMubWQ6IEluIERGIGxvYWQgcGVlcGhvbGUsIHVzZSBvcGVyYW5kcyBub3QgeG9wZXJhbmRzLCBzbworCXRoYXQgb3V0cHV0X2FzbV9pbnNuIHdpbGwgdXNlIHRoZSByaWdodCB2YWx1ZXMuCisKKwkqIHRtLXN1bjMuaCwgdG0tc3VuMm9zNC5oOiBEZWZpbmUgUFRSRElGRl9UWVBFLCBTSVpFX1RZUEUsCisJV0NIQVJfVFlQRSBzYW1lIGFzIHRtLXNwYXJjLmguCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBEb24ndCBjbGVhciBjdXJyZW50X2Z1bmN0aW9uX2RlY2wKKwlmb3IgbmVzdGVkIGZ1bmN0aW9ucy4KKworCSogZGJ4b3V0LmM6IEluY2x1ZGUgaW5zbi1jb25maWcuaCBhbmQgcmVsb2FkLmguCisJKGRieG91dF9zeW1ib2wpOiBQYXNzIERFQ0xfUlRMIChkZWNsKSB0aHJvdWdoIGVsaW1pbmF0ZV9yZWdzIGJlZm9yZQorCXVzaW5nLgorCShkYnhvdXRfcGFybXMpOiBQYXNzIERFQ0xfUlRMIGFuZCBERUNMX0lOQ09NSU5HX1JUTCBvZiBwYXJtcyB0aHJvdWdoCisJZWxpbWluYXRlX3JlZ3MgYmVmb3JlIHVzaW5nLgorCSogc2Rib3V0LmM6IEluY2x1ZGUgaW5zbi1jb25maWcuaCBhbmQgcmVsb2FkLmguCisJKHNkYm91dF9zeW1ib2wpOiBQYXNzIERFQ0xfUlRMIChkZWNsKSB0aHJvdWdoIGVsaW1pbmF0ZV9yZWdzIGJlZm9yZQorCXVzaW5nLgorCShzZGJvdXRfcGFybXMpOiBQYXNzIERFQ0xfUlRMIGFuZCBERUNMX0lOQ09NSU5HX1JUTCBvZiBwYXJtcyB0aHJvdWdoCisJZWxpbWluYXRlX3JlZ3MgYmVmb3JlIHVzaW5nLgorCSogTWFrZWZpbGUuaW46IFVwZGF0ZSBkZXBlbmRlbmN5IGxpc3RzIGZvciBkYnhvdXQuYyBhbmQgc2Rib3V0LmMuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBwYXNzIHNldHMgd2l0aCAoVVNFIChNRU0gLi4uKSkKKwlkZXN0cyB0byByZWdfcmVmZXJlbmNlZF9wLgorCitXZWQgTm92IDEzIDIxOjM4OjAzIDE5OTEgIEpvaG4gQnVuZGEgKGJ1bmRhIGF0IGNzLnV0ZXhhcy5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZ2VuX2lucHV0X3JlbG9hZCk6IElmIElOIGlzIGEgUExVUyB3aG9zZSBzZWNvbmQgYXJnCisJaXMgdGhlIHNhbWUgYXMgdGhlIHJlbG9hZCByZWdpc3Rlciwgc3dhcCB0aGUgYXJncyBvZiB0aGUgUExVUy4KKworV2VkIE5vdiAxMyAxNDo0MzowOSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHRtLXNwYXJjLmggKE9QVElNSVpBVElPTl9PUFRJT05TKTogRG9uJ3QgcmVkZWZpbmUgb3B0aW9ucyBzZXQgaW4KKwl0b3BsZXYuYywgb25seSBlZmZlY3QgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXIuCisJCisJKiBzcGFyYy5tZDogRGVsZXRlIG9ic29sZXRlIHNpZ25fZXh0cmFjdCBhbmQgemVyb19leHRyYWN0IHBhdHRlcm5zLgorCVdlIGdldCBiZXR0ZXIgY29kZSB3aXRob3V0IHRoZW0uCisJKGluZGlyZWN0X2p1bXAsIHRhYmxlanVtcCk6IEV4dGVuZCBpbmRpcmVjdF9qdW1wIHBhdHRlcm4gdG8gYWNjZXB0CisJYW55IGFkZHJlc3MsIG5vdCBqdXN0IGEgcmVnaXN0ZXIuICBBZGQgdGFibGVqdW1wIGxpa2UgcGF0dGVybiB3aGljaAorCWFsc28gYWNjZXB0cyBhbnkgYWRkcmVzcy4KKworCSogdW5yb2xsLmMgKGZpbmFsX2Jpdl92YWx1ZSk6IE1ha2Ugc3VyZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYml2CisJaXMgaW52YXJpYW50IGlmIGl0IGlzIHVzZWQgYWZ0ZXIgdGhlIGxvb3AuCisKK1R1ZSBOb3YgMTIgMjM6MTY6NTEgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoQVNNX09VVFBVVF9SRUdfUFVTSCwgQVNNX09VVFBVVF9SRUdfUE9QKTogQ29ycmVjdCBzbworCUFTTV9PVVRQVVRfUkVHX1BVU0ggYWN0dWFsbHkgZG9lcyBhIHB1c2ggaW5zdGVhZCBvZiBwb3AsIGFuZCB2aWNhCisJdmVyc2EuICBBbHNvIG1ha2UgQVNNX09VVFBVVF9SRUdfUE9QIHR1cm4gb24gLnNldCBub3Jlb3JkZXIsIGFuZAorCWluY3JlbWVudCB0aGUgYXBwcm9wcmlhdGUgLW1zdGF0cyBsb2FkIGRlbGF5IGNvdW50ZXJzLgorCitUdWUgTm92IDEyIDIyOjUzOjQ1IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuaCAoQlJBTkNIX0NPU1QpOiBTdXBwbHkgZGVmYXVsdCB2YWx1ZSBoZXJlLgorCSoganVtcC5jIChCUkFOQ0hfQ09TVCk6IERvbid0IGRlZmF1bHQgQlJBTkNIX0NPU1QgaGVyZS4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9hbGxvYyk6IFVzZSBwcm9wZXIgZW50cnkgaW4gZWxpbWluYWJsZXMKKwl3aGVuIHNlYXJjaGluZyBmb3IgdGhlIGZyYW1lIHBvaW50ZXIuCisKK1R1ZSBOb3YgMTIgMjI6MjM6MzYgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBleHByLmM6IChleHBhbmRfZXhwciwgTUlOX0VYUFIgY2FzZSk6IENoZWNrIGZvciBjb25zdF90cnVlX3J0eAorCW5vdCBjb25zdDFfcnR4IGFzIHJldHVybiB2YWx1ZSBmcm9tIGNvbXBhcmVfZnJvbV9ydHguCisJKGRvX2p1bXBzX2J5X3BhcnRfZ3JlYXRlcik6IEhhbmRsZSBjb25zdDBfcnR4IGFuZCBjb25zdF90cnVlX3J0eAorCXJldHVybiB2YWx1ZXMgZnJvbSBjb21wYXJlX2Zyb21fcnR4LgorCShkb19qdW1wc19ieV9wYXJ0X2VxdWFsaXR5LCBkb19qdW1wc19ieV9wYXJ0X2VxdWFsaXR5X3J0eCk6IExpa2V3aXNlLgorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplXzIpOiBDb3JyZWN0bHkgaGFuZGxlIEFTTV9PUEVSQU5EIGFuZAorCUFTTV9JTlBVVCBydHguICBWb2xhdGlsZSBhbmQgdHJhZGl0aW9uYWwgYXNtIHN0YXRlbWVudHMgYXJlCisJYXNzdW1lZCB0byB1c2UgYW5kIGNsb2JiZXIgYWxsIGhhcmQgcmVnaXN0ZXJzIGFuZCBhbGwgbWVtb3J5LgorCShzY2hlZHVsZV9ibG9jayk6IERlbGV0ZSBjb2RlIHRoYXQgaW5jb3JyZWN0bHkgaGFuZGxlcyBBU01fT1BFUkFORAorCWFuZCBBU01fSU5QVVQgcnR4IGJ5IGV4aXRpbmcgZWFybHkuCisKK1R1ZSBOb3YgMTIgMTU6Mzg6NTYgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHNjaGVkLmM6IEludHJvZHVjZSBuYW1lcyBmb3IgdmFyaW91cyBwcmlvcml0eSB2YWx1ZXMuICBSZWR1Y2UKKwlMQVVOQ0hfUFJJT1JJVFkgdG8gYXZpb2lkIHdyYXAtYXJvdW5kIGluIGxhdW5jaF9saW5rLgorCitUdWUgTm92IDEyIDE0OjIxOjUyIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoaW5pdF9sZXgpOiAgRXhjZXB0aW9uLWhhbmRsaW5nIGZpeGVzLgorCSogY3AtdHJlZS5oOiAgQWRkIG5ldyBPUEVSQVRPUl9DSEFSU19QIHRoYXQgaXMgbGlrZQorCU9QRVJBVE9SX05BTUVfUCwgZXhjZXB0IGlmIHRha2VzIGEgKGNoYXIqKSwgbm90IGEgdHJlZS4KKwkqIGNwLWRieG91dC5jIChkYnhvdXRfdHlwZV9tZXRob2RzKTogIEhhbmRsZSBvcGVyYXRvcnMKKwlzcGVjaWFsbHkgd2hlbiBjaG9wcGluZyBwcmVmaXggZm9yIG1pbmltYWxfZGVidWcuCisKKwkqIGNvbmZpZy90bS1uZXdzLmg6IEluIFBSSU5UX09QRVJBTkQsIHJlY29nbml6ZSBuZXcgNjgwNDAKKwlvcGVyYW5kIHR5cGVzLiAgQWRkIGRlZmluaXRpb24gb2YgQ1BQX0RFRklORVMgZm9yIGNyb3NzLWNvbXBpbGluZy4KKworVHVlIE5vdiAxMiAxMzoxMTowMSAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogcHJvdG9pemUuYyAoX19PU0YxX18gaWZkZWYpOiBSZW1vdmUgT1NGLzEgc3BlY2lmaWMgaWZkZWZzLCBzaW5jZQorCXRoZSBwcm9ibGVtIHRoZXkgYWRkcmVzcyBoYXMgYmVlbiBmaXhlZCwgYW5kIHRoZSBpZmRlZnMgbm93IGNhdXNlCisJc3B1cmlvdXMgd2FybmluZ3MuCisKKwkqIHRtLW1pcHMuaCAoSU5UX1RZUEVfU0laRSk6IERlZmluZS4KKwkoU0hPUlRfVFlQRV9TSVpFKTogRGVmaW5lLgorCShMT05HX1RZUEVfU0laRSk6IERlZmluZS4KKwkoTE9OR19MT05HX1RZUEVfU0laRSk6IERlZmluZS4KKwkoQ0hBUl9UWVBFX1NJWkUpOiBEZWZpbmUuCisJKEZMT0FUX1RZUEVfU0laRSk6IERlZmluZS4KKwkoRE9VQkxFX1RZUEVfU0laRSk6IERlZmluZS4KKwkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogRGVmaW5lLgorCisJKiBvdXQtbWlwcy5jIChibG9ja19tb3ZlX2xvYWRfc3RvcmUpOiBOZXcgY29tbW4gZnVuY3Rpb24gdG8gY3JlYXRlCisJb25lIGxvYWQgYW5kIHN0b3JlIGZvciB0aGUgYmxvY2sgbW92ZSBmdW5jdGlvbnMuICBUaGUgbG9hZCBpcworCWVtaXR0ZWQgZGlyZWN0bHksIGFuZCB0aGUgc3RvcmUgaXMgcmV0dXJuZWQsIHRvIGJlIGVtaXR0ZWQgbGF0ZXIuCisJKGJsb2NrX21vdmVfc2VxdWVuY2UpOiBDYWxsIGJsb2NrX21vdmVfbG9hZF9zdG9yZS4gIEZvciBzdHJhaWdodAorCWxpbmUgbW92ZXMsIGhhdmUgdHdvIG91dHN0YW5kaW5nIGxvYWRzIGJlZm9yZSBhIHN0b3JlLCBmb3IgbmV3ZXIKKwltYWNoaW5lcyB0aGF0IHdhbnQgdHdvIGRlbGF5IHNsb3RzLgorCShibG9ja19tb3ZlX2xvb3ApOiBDYWxsIGJsb2NrX21vdmVfbG9hZF9zdG9yZS4gIE1vdmUgNCB3b3JkcyBwZXIKKwlsb29wLCBmb3IgYSBsb29wIHRoYXQgbW92ZXMgMTYgYnl0ZXMgaW4gMTEgY3ljbGVzIGlmIGFsaWduZWQsIGFuZCAxNgorCWJ5dGVzIGluIDE5IGN5Y2xlcyBpZiBub3QgYWxpZ25lZC4KKwkoYmxvY2tfbW92ZV9tZW1jcHkpOiBDaGFuZ2UgYXJndW1lbnQgbmFtZXMgZm9yIGNvbnNpc3RhbmN5LgorCShleHBhbmRfYmxvY2tfbW92ZSk6IEFsd2F5cyBtb3ZlIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyLCBldmVuIGZvcgorCW9uZSBieXRlIG1vdmVzLiAgRml4IGJ1Z3MgaW4gY2FsbGluZyBtZW1jcHkuICBJZiBtb3ZpbmcgYSBsYXJnZQorCWNvbnN0YW50IGFtb3VudCBvZiB1bmFsaWduZWQgZGF0YSwgZW1pdCBhIHJ1bnRpbWUgY2hlY2sgdG8gc2VlIGlmCisJdGhlIGRhdGEgaXMgcmVhbGx5IGFsaWduZWQsIGFuZCBpZiBzbyBkbyBhbiBhbGlnbmVkIG1vdmUsIG90aGVyd2lzZQorCWFuIHVuYWxpZ25lZCBtb3ZlIGxvb3AuCisKKwkqIG1pcHMtdGZpbGUuYyAodG9wbGV2ZWwpOiBNYWtlIHNvbWUgY2hhbmdlcywgc28gdGhhdCBtaXBzLXRmaWxlIGNhbgorCWJlIGRlYnVnZ2VkIG9uIE9TRi8xLgorCShlZmRyIHN0cnVjdHVyZSk6IEFsaWduIGlkZW50aWZpZXJzIGluIGRlY2xhcmF0aW9uLgorCShjdXJfcHJvY192YWx1ZSk6IERlbGV0ZSB2YXJpYWJsZS4KKwkoY3VyX29wcm9jX2JlZ2luKTogTmV3IGdsb2JhbCB0byByZWNvcmQgb3JpZ2luYWwgcHJvYyAuZW50IHN5bWJvbC4KKwkoY3VyX29wcm9jX2VuZCk6IE5ldyBnbG9iYWwgdG8gcmVjb3JkIG9yaWdpbmFsIHByb2MgLmVuZCBzeW1ib2wuCisJKGFkZF9wcm9jZWR1cmUpOiBTZXQgY3VyX29wcm9jX2JlZ2luLCBjdXJfb3Byb2NfZW5kIHZhcmlhYmxlcworCWluc3RlYWQgb2YgY3VyX3Byb2NfdmFsdWUuCisJKHBhcnNlX2JlZ2luLCBwYXJzZV9lbmQpOiBBZGQgY2hlY2sgZm9yIGN1cl9vcHJvY19iZWdpbiBiZWluZyBzZXQuCisJKHBhcnNlX2VuZCk6IFVzZSBjdXJfb3Byb2NfZW5kJ3MgdmFsdWUgbm9kZSBmb3IgbmV3IHZhbHVlIG5vZGUuCisJKG1haW4pOiBBZGQgY2FzdCB0byBmcmVlX211bHRpcGxlX3BhZ2VzIGNhbGwuCisKK1R1ZSBOb3YgMTIgMDg6NTc6MzkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IE1lcmdlIHRoZSAiaWYgKC4uLikgeCA9IDA7IiBjYXNlIHdpdGgKKwl0aGUgInggPSBhOyBpZiAoLi4uKSB4ID0gYjsiIGNhc2UuCisKK01vbiBOb3YgMTEgMTk6Mjc6MDMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90byk6IENvcnJlY3RseSBnZXQgdHlwZSBvZiBhIFRSRUVfVkVDCisJb2JqZWN0LiAgKFRoaXMgcGF0Y2ggaXMgZnJvbSBzb21lb25lIGF0IEN5Z251cy4pCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBBZGQgbWlzc2luZyBwYXJlbnMuCisKK01vbiBOb3YgMTEgMTk6MjY6MjQgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0LCBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KToKKwlBICh2b2lkICopIG9iamVjdCBpcyBjb21wYXRpYmxlIHdpdGggYSBmdW5jdGlvbiBwb2ludGVyIGlmIGl0IGlzCisJdGhlIGNvbnN0YW50IHplcm8uCisJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBQcm9wZXJseSBjaGVjayBmb3IgcG9pbnRlcnMgdG8gZnVuY3Rpb25zLgorCitTdW4gTm92IDEwIDE5OjU5OjEyIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjY2NwLmMgKG1ha2VfdW5kZWYpOiBGaXggYnkgb2ZmIGJ5IG9uZSBlcnJvci4KKwkoTUlOLCBNQVgpOiBBZGQgI3VuZGVmLCBpbiBjYXNlIHNvbWUgc3lzdGVtIGluY2x1ZGUgZmlsZSBkZWZpbmVkCisJdGhlc2UgbWFjcm9zLgorCitTdW4gTm92IDEwIDEwOjM0OjE3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva2ZpZWxkKTogU2V0IFRSRUVfRVhURVJOQUwgb24gc3RhdGljIGNvbnN0CisJZGVjbHMgdGhhdCBhcmUgZWl0aGVyIHVuaW5pdGlhbGl6ZWQgaW4gdGhlaXIgaW5pdGlhbCBkZWNsYXJhdGlvbiwKKwlvciBpbml0aWFsaXplZCBieSBzb21ldGhpbmcgd2UgY2Fubm90IGV2YWx1YXRlIGF0IGluaXRpYWwKKwlkZWNsYXJhdGlvbiB0aW1lLgorCisJKiBjcC1pbml0LmMgKGJ1aWxkX25ldyk6IE1ha2UgYG9wZXJhdG9yIG5ldycgd2l0aCBwbGFjZW1lbnQgY2FzdAorCWl0cyByZXR1cm4gdHlwZSB0byB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGFsbG9jYXRlZC4KKworCSogY3AtdHlwZWNrLmMgKGNvbW1vbnBhcm1zKTogSWYgdGhlIGxhc3QgZWxlbWVudCBvZiBQMSBpcworCVZPSURfTElTVF9OT0RFLCB1c2UgdGhhdC4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IFJldHVybiBQRU5ESU5HX1NUQVRJQ1MuCisJKGxheW91dF90eXBlKTogRG9uJ3QgY29tbWl0IHN0YXRpYyBtZW1iZXJzIHRvIGEgcGFydGljdWxhciBtb2RlCisJdW50aWwgUkVDIGhhcyBiZWVuIGxhaWQgb3V0IGNvbXBsZXRlbHkuCisKK1NhdCBOb3YgIDkgMjM6MTY6NTEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2NjcC5jIChmYW5jeV9hYm9ydCk6IERvbid0IGRlY2xhcmUgYXMgc3RhdGljLgorCitTYXQgTm92ICA5IDIwOjM4OjMwIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IERvbid0IGNvbnMgbmV3IGRlY2wgdG8KKwlleGlzdGluZyBFUlJPUl9NQVJLX05PREUuICBJZiB0aGUgb2xkIGRlY2wgd2FzIGVycm9uZW91cywganVzdAorCWlnbm9yZSBpdC4KKworCSogY3AtY2FsbC5jIChpZGVhbF9jYW5kaWRhdGUpOiBGaXggdHlwbyBpbiBlcnJvciBtZXNzYWdlLgorCitTYXQgTm92ICA5IDE0OjEzOjQ2IDE5OTEgIEplZmZyZXkgQSBMYXcgIChsYXcgYXQgc3VwZXIuc3VwZXIub3JnKQorCisJKiB0bS1ocDlrMmJzZC5oIChNVUxTSTNfTElCQ0FMTCk6IE5ldyBkZWZpbmUgd2hpY2ggYXZvaWRzCisJdGhlIHVzZSBvZiBfX211bHNpMyBmb3Igc2lnbmVkIGludGVnZXIgbXVsdGlwbGljYXRpb24uCisJKFVNVUxTSTNfTElCQ0FMTCwgRElWU0kzX0xJQkNBTEwsIFVESVZTSTNfTElCQ0FMTCk6IExpa2V3aXNlLgorCShNT0RTSTNfTElCQ0FMTCwgVU1PRFNJM19MSUJDQUxMKTogTGlrZXdpc2UuCisKK0ZyaSBOb3YgIDggMTI6MDU6MzkgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCisKKwlGaXJzdCBjdXQgYXQgQU5TSS1zdHlsZSBleGNlcHRpb24gaGFuZGxpbmcgKHVzaW5nCisJc3ludGF4IGFuZCBzZW1hbnRpY3Mgb2YgU3Ryb3VzdHJ1cCAybmQgZWQpLgorCVRISVMgSVMgV09SSyBJTiBQUk9HUkVTUyEKKwkqIGNwLXRyZWUuaDogIERlY2xhcmUgZmxhZ19hbnNpX2V4Y2VwdGlvbnMuCisJKiBncGx1cy5ncGVyZjogIEFkZCAndGhyb3cnIChmb3IgQU5TSSBleGNlcHRpb24gaGFuZGxpbmcpLAorCWFuZCB1cGRhdGUgcHJpdmF0ZS9wcm90ZWN0ZWQvcHVibGljIGZyb20gKG9sZCkgY3AtbGV4LmMuCisJKiBjcC1oYXNoLmg6ICBOZXcgZmlsZSwgZ2VuZXJhdGVkIGZyb20gZ3BsdXMuZ3BlcmYuCisJKiBjcC1sZXguYzogI2luY2x1ZGUgY3AtaGFzaC5oLCBpbnN0ZWFkIG9mIHJlcXVpcmluZworCW1hbnVhbCBjdXQtYW5kLXBhc3RlIHdoZW4ga2V5d29yZHMgYXJlIGNoYW5nZWQuCisJKiBjcC1sZXguYzogIENvbW1lbnRlZCBvdXQgc29tZSBleHRlcm4gZGVjbGFyYXRpb25zIHRoYXQKKwl3ZXJlIGNvbmZsaWN0aW5nIHdpdGggaW5saW5lcyBpbiBjcC1pbnB1dC5jLgorCUhvb2tzIGZvciBBTlNJLXN0eWxlIGV4Y2VwdGlvbiBoYW5kbGluZy4KKwkqIGNwLXBhcnNlLnk6ICBQYXJzZSBBTlNJLXN0eWxlIGV4Y2VwdGlvbiBzdHVmZi4KKwkqIGNwLWRlY2wyLmM6ICBEZWZpbmUgbmV3IGZsYWcgZmxhZ19hbnNpX2V4Y2VwdGlvbnMuCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfdGFibGUpOiAgT2ZmLWJ5LW9uZSBlcnJvciBpbgorCWNhbGN1bGF0aW5nIGluZGV4IHR5cGUuCisJKiBjbHVzLWRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6ICBBZGQgbWlzc2luZworCVRSRUVfT1BFUkFORCB0byBnZXQgZG9zc2llciBkZWNsLgorCSogY3AtZXhjZXB0IChjcGx1c19leHBhbmRfc3RhcnRfZXhjZXB0KTogIEFsbG93IE5VTEwgbmFtZSwKKwlzaW5jZSB0aGVyZSBpcyBubyBkaXN0aW5ndWlzaGVkIG5hbWUgZm9yIEFOU0kgZXhjZXB0aW9ucy4KKwkqIGNwLWV4Y2VwdCAoY3BsdXNfZXhwYW5kX3JhaXNlKTogIFRvbyBmZXcKKwlwYXJhbWV0ZXJzIHRvIGV4cGFuZF9leHByOyBhZGQgdGhlbS4KKwkqIGNwLWV4Y2VwdC5jOiAgTmV3IGZ1bmN0aW9ucyBmb3IgQU5TSSBleGNlcHRpb25zOgorCWNwbHVzX2V4Y2VwdGlvbl9uYW1lLCBhbnNpX2V4Y2VwdGlvbl9vYmplY3RfbG9va3VwLAorCWNwbHVzX2V4cGFuZF90aHJvdywgYW5zaV9leHBhbmRfc3RhcnRfY2F0Y2guCisJVGhlc2UgYXJlIGhlYXZpbHkgaGFja2VkIGZyb20gc2ltaWxhciBvbGQgZnVuY3Rpb25zLgorCisJVHJ5IHRvIG1ha2UgLWZkb3NzaWVyIHdvcmsgYmV0dGVyIChidXQgbW9yZSB3b3JrIGlzIG5lZWRlZCkuCisJKEVzcGVjaWFsbHksIGdlbmVyYXRlIGZld2VyIHVubmVlZGVkIGRlc2NyaXB0b3JzLikKKwkqIGNwLWNsYXNzLmMgKGFkZF92aXJ0dWFsX2Z1bmN0aW9uLCBmaW5pc2hfc3RydWN0KTogIERvIG5vdAorCWNyZWF0ZSBhIHZ0YWJsZSBqdXN0IGJlY2F1c2Ugb2YgLWZkb3NzaWVyLgorCSogY3AtZ2MuYzogIEVhY2ggdHlwZSBwb2ludHMgdG8gYW4gYXJyYXkgb2YgZmllbGRzLAorCWluc3RlYWQgb2YgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gZmllbGRzLiAgRGl0dG8gZm9yIG1ldGhvZHMuCisJVGhpcyBzYXZlcyBvbmUgcG9pbnRlciBwZXIgZmllbGQgb3IgbWV0aG9kIGJ5IHJlbW92aW5nCisJdW5uZWRlZCBleHRyYSBpbmRpcmVjdGlvbi4gIEFsc28gb3RoZXIgdHdlYWtzIHRvIHNhdmUgc3BhY2UuCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIEFkZCBsZW5ndGggb2YKKwlmaWVsZCBhbmQgbWV0aG9kIGFycmF5cyB0byBkZXNjcmlwdG9ycywgaW5zdGVhZCBvZgorCXJlbHlpbmcgb24gTlVMTC10ZXJtaW5hdGlvbiAoc2luY2Ugd2Ugbm8gbG9uZ2VyIGhhdmUKKwl0aGUgZXh0cmEgcG9pbnRlciBhcnJheSkuCisJTWFrZSB0aGUgcGFyYW1ldGVyIGNvdW50IGFuZCByZXF1aXJlZCBjb3VudCBvZgorCW1ldGhvZCBkZXNjcmlwdG9ycyBiZSBzaG9ydHMuCisJKiBjcC1tZXRob2QuYzogIFJlbW92ZSBuby1sb25nZXItbmVlZGVkIGZ1bmN0aW9ucworCWJ1aWxkX2lfZGVzY19vdmVybG9hZCBhbmQgYnVpbGRfbV9kZXNjX292ZXJsb2FkLgorCisJT3RoZXIgQysrIGZpeGVzOgorCSogY3AtZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiAgQ2xhc3MgdHlwZXMgd2VyZQorCWVtaXR0aW5nIG9ubHkgYSAidCIgc3BlYyB3aGljaCBtYWRlIGdkYiB1bmhhcHB5LgorCUtsdWRnZWQgaXQgc28gdGhhdCBpdCBvbmNlIG1vcmUgZW1pdHMgIlR0Ii4KKwkqIGNwLXRyZWUuYyAobGFuZ19vdXRwdXRfZGVidWdfaW5mbyk6ICBEbyBlbWl0IGRlYnVnZ2luZworCWluZm8gaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBmaWxlIGNvcnJlc3BvbmRzIHRoZSB0aGUKKwl0eXBlJ3MgaW50ZXJmYWNlLCBldmVuIGlmIG5vdGhpbmcgaXMgd3JpdHRlbi4KKworRnJpIE5vdiAgOCAwODoxODo1NSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogdG0tbTg4ayouaDogRml4IGNvbW1lbnRzLCBtaW5vciBjbGVhbnVwcy4KKworVGh1IE5vdiAgNyAxNjoyMTowNSAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbG9uZ2xvbmcuaCAoX19pYm0wMzJfXyk6IEZpeCBvcGVyYW5kIG9yZGVyIGZvciBhZGRfc3NhYWFhIGFuZAorCXN1Yl9kZG1tc3MuCisKK1RodSBOb3YgIDcgMTI6NDc6MTQgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBtZWlzc25lciB2ZXJzaW9uIG51bWJlciB0byAzLjMuCisJKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBEZWZpbmUgdGhpcyB0byBiZSAxLgorCisJKiBvdXQtbWlwcy5jIChibG9ja19tb3ZlX2xvb3ApOiBOZXcgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBsb29wIHRvCisJZG8gYSBibG9jayBtb3ZlLgorCShibG9ja19tb3ZlX2NhbGwpOiBQYXNzIHRoZSBzb3VyY2UsIGRlc3RpbmF0aW9uLCBzaXplIGFzIHNlcGFyYXRlCisJYXJndW1lbnRzLCByYXRoZXIgdGhhbiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygb3BlcmFuZHMuCisJKGV4cGFuZF9ibG9ja19tb3ZlKTogQ2hhbmdlIGJsb2NrX21vdmVfY2FsbCBjYWxsaW5nIHNlcXVlbmNlLgorCShleHBhbmRfYmxvY2tfbW92ZSk6IElmIG1vdmluZyBiaWcgYWxpZ25lZCBpdGVtcywgZ2VuZXJhdGUgYSBsb29wIHRvCisJZG8gaXQsIHJhdGhlciB0aGFuIGNhbGxpbmcgbWVtY3B5L2Jjb3B5LgorCShvdmVycmlkZV9vcHRpb25zKTogSWYgLW1zb2Z0LWZsb2F0LCAnZicgY29uc3RyYWludCBwaWNrcyBHUAorCXJlZ2lzdGVycy4KKworCSogdC1kZWNyb3NlIChjb2xsZWN0KTogVXNlIEFMTF9DRkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MsIHNpbmNlIHRoaXMKKwlnZXRzIHRoZSBzaGFyZWQgbGlicmFyeSBmbGFncyBpbiB4LWRlY3Jvc2UuCisKK1RodSBOb3YgIDcgMDc6NTc6MzYgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHRtLW04OGsuaCAoTUVNT1JZX01PVkVfQ09TVCk6IERlZmluZS4KKwkoVEFSR0VUXzg4Kik6IEZpeC4KKworV2VkIE5vdiAgNiAxOTowNzo0MiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLm1kIChuZWdzZjIsIG5lZ2RmMik6IEFkZCBtaXNzaW5nIENMT0JCRVIgaW4gMjkwNTAgY2FzZS4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogV2hlbiBsb29raW5nIGZvciBhIGNvbmRpdGlvbmFsIGp1bXAKKwlza2lwcGluZyBhbiB1bmNvbmRpdGlvbmFsIGp1bXAsIGJlIHN1cmUgdGhlIGNvbmRpdGlvbmFsIGp1bXAgaXMKKwlub3QgYW4gdW5jb25kaXRpb25hbCBqdW1wLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogSWYgd2UgbWFrZSBhbiB1bmNvbmRpdGlvbmFsIGp1bXAsCisJYmUgc3VyZSBpdCBpcyBmb2xsb3dlZCBieSBhIEJBUlJJRVIuCisJKHN1YnN0LCBjYXNlIFNFVCk6IENvbnZlcnQgKHNldCAocGMpIChyZXR1cm4pKSB0byAocmV0dXJuKS4KKworV2VkIE5vdiAgNiAxMzo0MTo1NSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogdG0tbTg4a3YzLmgsIHhtLW04OGt2My5oOiBSZW5hbWVkIGZyb20gKm04OGtzeXN2MyouCisKK1dlZCBOb3YgIDYgMDk6Mjc6MTYgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBtZWlzc25lciB2ZXJzaW9uIG51bWJlciB0byAzLjIuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbXNvZnQtZmxvYXQgYW5kIC1taGFyZC1mbG9hdC4KKwkoR1BfUkVUVVJOKTogVXNlIEdQX1JFR19GSVJTVCBhcyBiYXNlIG9mIEdQIHJlZ2lzdGVycy4KKwkoRlBfUkVUVVJOKTogVXNlIEZQX1JFR19GSVJTVCBhcyBiYXNlIG9mIEZQIHJlZ2lzdGVycy4gIElmCisJLW1zb2Z0LWZsb2F0LCBtYWtlICQyIGJlIHRoZSByZXR1cm4gcmVnaXN0ZXIuCisJKEdQX0FSR19GSVJTVCwgR1BfQVJHX0xBU1QpOiBVc2UgR1BfUkVHX0ZJUlNUIGFzIDFzdCBHUCByZWcuCisJKEZQX0FSR19GSVJTVCwgRlBfQVJHX0xBU1QpOiBVc2UgRlBfUkVHX0ZJUlNUIGFzIDFzdCBGUCByZWcuCisKKwkqIG1pcHMubWQgKGZmc3NpMiwgZmZzc2kyX2ludGVybmFsKTogRml4IGZmcyBidWlsdGluIHNvIHRoYXQgaXQKKwlkb2Vzbid0IGNsb2JiZXIgdGhlIGlucHV0IGFyZ3VtZW50IGJ5IHR1cm5pbmcgaXQgaW50byBhCisJZGVmaW5lX2V4cGFuZCwgYW5kIHVzaW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uIGluY2x1ZGluZyB0aGUKKwluZWNlc3NhcnkgY2xvYmJlcidzLgorCShhYnNzaTIsIGZmc3NpMiwgZmZzc2kyX2ludGVybmFsKTogVXNlIHRoZSAnZCcgY29uc3RyYWludCB3aGljaCBvbmx5CisJbWF0Y2hlcyB0aGUgaW50ZWdlciByZWdpc3RlcnMsIHJhdGhlciB0aGFuICdyJyB3aGljaCBjYW4gbWF0Y2gKKwlmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgYXMgd2VsbC4KKworCSogdG0tbWlwcy1uZXdzLmggKENQUF9TUEVDKTogQWRkIC1EbmV3czczMDAsIC1Ec29ueV9uZXdzLCAtRG1pcHMsCisJYW5kIC1EaG9zdF9taXBzLgorCitXZWQgTm92ICA2IDA4OjQ2OjU0IDE5OTEgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGFkZF9tZXRob2QpOiB3aGVuIGFkZGluZyBhIG5ldyBjb25zdHJ1Y3RvciBvcgorCWRlc3RydWN0b3IsIGFjdHVhbGx5IGNoYWluIG9udG8gbWV0aG9kX3ZlY1swXSByYXRoZXIgdGhhbiByZXBsYWNpbmcKKwl0aGUgbGlzdCB3aXRoIHRoZSBjdXJyZW50IGVudHJ5LgorCitXZWQgTm92ICA2IDA3OjA0OjU1IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBhcmUgc3RvcmluZyBpbnRvIGEgQkxLbW9kZQorCWZpZWxkIG9mIGFuIG9iamVjdCB0aGF0IGlzIGluIGEgcmVnaXN0ZXIuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTVBPTkVOVF9SRUYpOiBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBhcmUgZXh0cmFjdGluZworCWEgQkxLbW9kZSBmaWVsZCBmcm9tIGFuIG9iamVjdCBpbiBhIHJlZ2lzdGVyLgorCitUdWUgTm92ICA1IDIyOjE2OjM5IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB0bS1taXBzLmggKHRhcmdldF9mbGFncyk6IERlbGV0ZSBzZWNvbmQgZGVjbGFyYXRpb24uCisJKE1BU0tfRzAsIE1BU0tfRzEsIE1BU0tfRzIpOiBEZWxldGUsIHNpbmNlIC1HIHh4IG5vdyB3b3JrcyB0byBzZXQKKwl0aGUgc2l6ZSBvZiB0aGUgc21hbGwgZGF0YS9ic3MgYXJlYSBjdXRvZmYuCisJKE1BU0tfRzAxMl9VU0VELCBNQVNLX0cwMTJfTlVTRUQpOiBkaXR0by4KKwkoVEFSR0VUX0dWQUxVRSk6IGRpdHRvLgorCShUQVJHRVRfRzAxMl9VU0VEKTogZGl0dG8uCisJKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSAtbUd4LCAtbW5vLUd4IHN3aXRjaGVzLgorCShUQVJHRVRfREVGQVVMVCk6IFNldCB0byAwIGluc3RlYWQgb2YgTUFTS19HMDEyX05VU0VELgorCisJKiB0bS1kZWNyb3NlLmggKFRBUkdFVF9ERUZBVUxUKTogRWxpbWluYXRlIE1BU0tfRzAxMl9OVVNFRC4KKworCSogb3V0LW1pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFJlbW92ZSBzdXBwb3J0IGZvciAtbUd4IGFuZCAtbW5vLUd4CisJc3dpdGNoZXMgdG8gc2V0IHRoZSBjdXRvZmYgc2l6ZSBmb3Igc21hbGwgZGF0YS9ic3MuCisKKwkqIG1pcHMubWQgKGFic3NpMik6IEFkZCBuZXcgcGF0dGVybi4KKwkoZmZzc2kyKTogQWRkIG5ldyBwYXR0ZXJuLgorCitUdWUgTm92ICA1IDE4OjM2OjI5IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy50ZXhpbmZvIChNRU1PUllfTU9WRV9DT1NUKTogRG9jdW1lbnQgbmV3IG1hY3JvLgorCSogcmVnY2xhc3MuYyAoTUVNT1JZX01PVkVfQ09TVCk6IERlZmF1bHQgaXQgdG8gMi4KKwkocmVnY2xhc3MsIHJlZ19jbGFzc19yZWNvcmQpOiBVc2UgTUVNT1JZX01PVkVfQ09TVCwgbm90IGNvbnN0YW50IDIuCisJKHJlZ2NsYXNzKTogTG9vayBhdCByZXN1bHQgb2Ygc2luZ2xlX3NldCBpbnN0ZWFkIG9mIGNoZWNraW5nIGFnYWluIGlmCisJcGF0dGVybiBpcyBhIFNFVC4KKwkqIHRtLXJzNjAwMC5oIChNRU1PUllfTU9WRV9DT1NUKTogQWRkIGRlZmluaXRpb24uCisKK1R1ZSBOb3YgIDUgMTc6MDE6MDUgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKHRzdWJzdCk6IEZvciBjaGFyX3R5cGVfbm9kZSwganVzdCBidWlsZCB2YXJpYW50IGFuZAorCXJldHVybiBpdC4KKwkodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBXYWxrIG1ldGhvZHMgbW9yZSBlZmZpY2llbnRseS4KKworCSogY3AtcHQuYyAob3ZlcmxvYWRfdGVtcGxhdGVfbmFtZSk6IFB1c2ggYSBiaW5kaW5nIGxldmVsLCB0bworCXNlcGFyYXRlIHRlbXBsYXRlIG5hbWUgYmluZGluZyBmcm9tIG1ldGhvZCBwYXJhbWV0ZXJzLiAgQ2hlY2sKKwlpZGVudGlmaWVyIHZhbHVlIHNsb3RzIGZvciBUWVBFX0RFQ0xzLCBub3QgUkVDT1JEX1RZUEVzLiAgRG9uJ3QgbmVlZAorCXRvIGRvIGV4dHJhIHB1c2ggb2YgVFlQRV9ERUNMIGZvciB0ZW1wbGF0ZSBuYW1lLgorCSh1bmRvX3RlbXBsYXRlX25hbWVfb3ZlcmxvYWQpOiBQb3AgaXQuICBEb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkKKwljbGVhciB0ZW1wbGF0ZSBuYW1lIGJpbmRpbmcuCisKKwkqIGNwLXB0cmVlLmMgKHByaW50X2xhbmdfZGVjbCk6IEZvciBGSUVMRF9ERUNMLCBkb24ndCB0cnkgdG8KKwlwcmludCBmaWVsZHMgdGhhdCBnbyBvZmYgdGhlIGVuZCBvZiB0aGUgbGFuZ19kZWNsX2ZsYWdzIHN0cnVjdHVyZS4KKworCSogY3AtcHQuYyAocG9wX3RlbXBsYXRlX2RlY2xzKTogRG9uJ3QgZXhwbGljaXRseSBjbGVhciBvdXQgdmFsdWUKKwlzbG90cyBvZiBpZGVudGlmaWVyOyBsZXQgcG9wbGV2ZWwvcG9wbGV2ZWxfY2xhc3MgZG8gaXQuCisKKwkqIGNwLXB0LmM6IFVzZSBidWlsZF9sYW5nX2RlY2wgaW5zdGVhZWQgb2YgYnVpbGRfZGVjbCBmb3IKKwlhbGwgVEVNUExBVEVfREVDTCBhbmQgVFlQRV9ERUNMIG5vZGVzLgorCisJKiBjcC10cmVlLmggKG1ha2VfYW5vbl9uYW1lKTogRGVjbGFyZSBpdC4KKworCSogY3AtcHQuYyAodW5pZnkpOiBEZWxldGVkIHVucmVhY2hhYmxlIGNvZGUuCisKKwkqIGNwLWRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBGaXhlZCB0eXBvIGZyb20gbWVyZ2UuCisJKHN0YXJ0X2RlY2wpOiBEaXR0by4KKwkoZ3Jva2RlY2xhcmF0b3IsIGNhc2UgQ0FMTF9FWFBSKTogUmVtb3ZlIGRlYnVnX3RyZWUgY2FsbAorCWFjY2lkZW50YWxseSBsZWZ0IGluLiAgSGFuZGxlIGNvbnN0cnVjdG9yIHRlbXBsYXRlcyBzcGVjaWFsbHksIGxpa2UKKwlkZXN0cnVjdG9yIHRlbXBsYXRlcy4gIFJlbW92ZWQgc29tZSBjb21tZW50ZWQtb3V0IGNvZGUuCisJKGdyb2tkZWNsYXJhdG9yLCBjYXNlIFNDT1BFX1JFRik6IElmIHRoZSB0eXBlIGlzIHVuaW5zdGFudGlhdGVkLAorCXRyZWF0IGl0IGxpa2UgYW55IG90aGVyIGFnZ3JlZ2F0ZSB0eXBlIGNvZGUuCisKKwkqIGNwLWxleC5jIChpZGVudGlmaWVyX3R5cGVkZWNsX3ZhbHVlKTogSWYgbm8gYmluZGluZyBzbG90IGZyb20KKwl0aGUgaWRlbnRpZmllciBpcyB0aGUgcmlnaHQgdHlwZSBkZWNsLCB1c2UgdGhlIHR5cGUgbmFtZSBpZiBpdCBpcworCW5vbi1udWxsLCBldmVuIGlmIHRoZSBuYW1lIGRvZXNuJ3QgbWF0Y2guCisJKGJ1aWxkX2xhbmdfZGVjbCk6IElmIG5ldyBkZWNsIG5vZGUgaXMgVFJFRV9QRVJNQU5FTlQsIG1ha2Ugc3VyZSB0aGUKKwlsYW5nLXNwZWNpZmljIGluZm8gZ2V0cyBhbGxvY2F0ZWQgdGhhdCB3YXkgdG9vOyBkb24ndCBhc3N1bWUgdGhhdAorCXRoZSBjdXJyZW50IG9ic3RhY2sgaXMgcGVybWFuZW50LgorCShjb3B5X2RlY2xfbGFuZ19zcGVjaWZpYyk6IElmIGRlY2wgaXMgVFJFRV9QRVJNQU5FTlQsIGFzc2VydCB0aGF0CisJdGhlIGN1cnJlbnQgb2JzdGFjayBpcyBwZXJtYW5lbnQuCisKKwkqIGNwLXBhcnNlLnkgKHRlbXBsYXRlX2RlZik6IERlbGV0ZSBkZXJpdmF0aW9ucyB0aGF0IHdlcmUKKwlwdXJwb3J0ZWRseSBmb3IgY29uc3RydWN0b3JzOyB0aGV5IGRpZG4ndCB3b3JrLgorCShub3R5cGVfZGVjbGFyYXRvcik6IERlYWwgd2l0aCB0aGVtIGhlcmUuCisJKHRlbXBsYXRlX2luc3RhbnRpYXRlX29uY2UpOiBDb3B5IGRlY2wgbm9kZSB3aXRoIHBlcm1hbmVudCBvYnN0YWNrcywKKwl0aGVyZWJ5IGNsZWFyaW5nIHRoZSBjaGFpbiBwb2ludGVyLCBiZWZvcmUgcHVzaGluZyBpdCBpbnRvIHRvcAorCWxldmVsLgorCShzdHJ1Y3RzcCk6IERvbid0IG5lZWQgdG8gdW5kbyB0ZW1wbGF0ZSBuYW1lIG92ZXJsb2FkIGhlcmUuCisJKHNjb3BlZF90eXBlbmFtZSk6IFdhbnQgVFlQRU5BTUUgd2l0aCB0ZW1wbGF0ZSB0eXBlLCBub3QgUFRZUEVOQU1FLgorCitUdWUgTm92ICA1IDEzOjQ2OjA2IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBzZGJvdXQuYyAoc2Rib3V0X2luaXQsIHNkYm91dF9zeW1ib2wpOiBEb24ndCByZXZlcnNlIHRoZQorCXBlcm1hbmVudCB0eXBlcy4gIAorCisJKiBjY2NwLmMgKG1ha2VfZGVmaW5pdGlvbik6IEVsaW1pbmF0ZSBwcmV2aW91cyBjaGFuZ2UgYXNzb2NpYXRlZAorCXdpdGggcHJldHR5LXByaW50aW5nIHN0cmluZ3MgcGFzc2VkIHRvIGRvX2RlZmluZS4KKwkocGFzc190aHJ1X2RpcmVjdGl2ZSk6IE1vdmUgcHJldHR5LXByaW50aW5nIGhlcmUuCisKK1R1ZSBOb3YgIDUgMTE6MjE6MzQgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMtbmV3cy5oIChBU01fU1BFQywgTElOS19TUEVDKTogQ29ycmVjdGx5IHBhc3MgLUVCIGluc3RlYWQKKwlvZiAtRUwsIHNpbmNlIHRoZSBTb255IE5ld3Mgc3lzdGVtIGlzIGJpZyBlbmRpYW4gbm90IGxpdHRsZSBlbmRpYW4uCisKK1R1ZSBOb3YgIDUgMDk6NTQ6MDggMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHRtLW04OGt2NC5oLCB0LW04OGt2NCwgeC1tODhrdjQ6IFJlbmFtZWQgZnJvbSAqbTg4a3N5c3Y0Ki4KKworVHVlIE5vdiAgNSAwNjozNjowNyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24sIHVuc2lnbmVkIGNvbXBhcmlzb25zKTogRG9uJ3QKKwlzaW1wbGlmeSB1bmxlc3MgbW9kZSBvZiBvcGVyYW5kIGlzIGEgTU9ERV9JTlQgbW9kZS4KKworCSogTWFrZWZpbGUuaW4gKCpDRkxBR1MpOiBNb3JlIGNsZWFybHkgZG9jdW1lbnQgdGhlIHB1cnBvc2VzIG9mIGVhY2gKKwlvZiB0aGUgZmxhZ3MuICBBZGQgWF9DRkxBR1MgYW5kIFRfQ0ZMQUdTIGZvciB4LSogYW5kIHQtKiB0byBvdmVycmlkZS4KKwkqIHgtZGVjcm9zZSwgeC1ocDlrMzIwZywgeC1pMzg2aXNjLCB4LW04OGtzeXN2NCwgeC1taXBzLCB4LXRvd2VyOgorCU92ZXJyaWRlIFhfQ0ZMQUdTIGluc3RlYWQgb2YgQ0ZMQUdTIG9yIElOVEVSTkFMX0NGTEFHUy4KKwkqIHgtdmF4OiBMaWtld2lzZS4KKwkqIHgtc2NvOiBEb24ndCBpbmNsdWRlIFhDRkxBR1MgaW4gZGVmaW5pdGlvbiBvZiBDRkxBR1MuCisKKwkqIGdzdGRkZWYuaDogUmVuYW1lZCBmcm9tIHN0ZGRlZi5oLgorCSogTWFrZWZpbGUuaW4gKFVTRVJfSCwgaW5zdGFsbC1jb21tb24taGVhZGVycyk6IEluc3RhbGwgZ3N0ZGRlZi5oIGFzCisJc3RkZGVmLmguCisKK01vbiBOb3YgIDQgMTc6NTQ6MDQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKHNhdmVfY29uc3RhbnRzKTogSWYgd2UgYXJlIHJlZmVyZW5jaW5nIGEgY29uc3RhbnQgaW4KKwl0aGUgY29uc3RhbnQgcG9vbCBpbiBhIGRpZmZlcmVudCBtb2RlIHRoYW4gaXRzIG5vcm1hbCBtb2RlLCBtYWtlCisJYSBTVUJSRUcgc28gdGhhdCB3ZSBjYW4gcmVjb3JkIGJvdGggbW9kZXMuCisJKGNvcHlfZm9yX2lubGluZSwgcmVzdG9yZV9jb25zdGFudHMpOiBIYW5kbGUgdGhlc2UgU1VCUkVHJ3MuCisJKGNvcHlfZm9yX2lubGluZSk6IE11c3QgY29weSBhIE1FTSBpZiBpdCdzIGFkZHJlc3MgY29udGFpbnMgYW4KKwlBRERSRVNTIChpLmUuLCB0aGUgYWRkcmVzcyBvZiBhIGNvbnN0YW50IHBvb2wgZW50cnkpLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFBMVVNfRVhQUik6IElmIGFkZGluZyBjb25zdGFudCwgRlAsIGFuZAorCXNvbWV0aGluZyBlbHNlLCBhZGQgRlAgdG8gdGhlIGNvbnN0YW50IGFuZCB0aGVuIGFkZCB0aGUgb3RoZXIgb3BlcmFuZC4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGZpbmRfcmVnKTogSWYgYWxsX3JlZ3NfcCwgdXNlIEFMTF9SRUdTLCBub3QKKwlHRU5FUkFMX1JFR1MuCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IExpa2V3aXNlLgorCisJKiBnZW5vdXRwdXQuYyAoZ2VuX2V4cGFuZCk6IFJlY29yZCBhbGwgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMKKwlmb3IgYSBERUZJTkVfSU5TTi4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgUExVUyk6IFNpbXBsaWZ5IGV4cHJlc3Npb25zCisJbGlrZSAoYSArLy0gYikgLSAoYSArLy0gYykuCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgTVVMVCk6IEZvciBYICogKC0xKSwgdHJ5IHRvIHNpbXBsaWZ5CisJdGhlIE5FRyBiZWZvcmUgd2UgbWFrZSBpdC4KKworTW9uIE5vdiAgNCAxNjoyOTowMSAxOTkxICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1wdC5jIChvdmVybG9hZF90ZW1wbGF0ZV9uYW1lKTogdXNlIGJ1aWxkX2xhbmdfZGVjbCBzbyB0aGF0CisJbGFuZ19zcGVjaWZpYyBnZXRzIGluaXRpYWxpemVkIHByb3Blcmx5LgorCisJKiBjcC1wYXJzZS55IChMQyk6IHVzZSBtYWtlX2xhbmdfdHlwZSB0byBwcm9kdWNlIGNvbXBsZXRlIG5vZGUsCisJbm90IGp1c3QgbWFrZV9ub2RlLgorCisJKiBjcC1wdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiByZXR1cm4gaWYgVFlQRV9MQU5HX1NQRUNJRklDIGlzCisJbnVsbCwgc2luY2UgZXZlcnl0aGluZyBwcmludGVkIGhlcmUgaXMgaW4gbGFuZ19zcGVjaWZpYy4KKworTW9uIE5vdiAgNCAxNjoxNzo0OCAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgcmFpZC5kZWxsLmNvbSkKKworCSogeC1pMzg2djQ6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpMzg2LXN5c3Y0KTogVXNlIGl0LgorCitNb24gTm92ICA0IDEyOjM2OjA5IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBnY2MudGV4aW5mbyAoQlJBTkNIX0NPU1QpOiBNb3ZlIHNvIEJSQU5DSF9DT1NUIGZvcm1hdHMgY29ycmVjdGx5LgorCitNb24gTm92ICA0IDA4OjAzOjQ0IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB4LW04OGtkZ3V4LCB4LW04OGtzeXN2NDogRG9uJ3Qgc2V0IFhDRkxBR1MuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6ICBDaGFuZ2UgImlmICguLi4pIHggPSAwOyIgdG8gdXNlIGEKKwlzdG9yZS1mbGFnIGluc24gaWYganVtcHMgYXJlIGV4cGVuc2l2ZSAoQlJBTkNIX0NPU1QpLgorCisJKiB0bS1tODhrLmggKEJSQU5DSF9DT1NUKTogQnJhbmNoZXMgYXJlIGNoZWFwIG9uIHRoZSBtODgxMDAuCisJKE9WRVJSSURFX09QVElPTlMpOiBNYWtlIG04ODEwMCB0aGUgZGVmYXVsdC4KKwkoU1RPUkVfRkxBR19WQUxVRSk6IFVzZSAtMS4KKwkoLmN0b3JzIGFuZCAuZHRvcnMgc2VjdGlvbnMpOiBDaGFuZ2Ugc2VjdGlvbiBmbGFncy4KKwkqIG04OGsubWQgKHN4eCwgbmVnYXRlIHN4eCk6IFVzZSBleHQgYW5kIGV4dHUuICBFbGltaW5hdGUgZXh0ZW5kc3h4LgorCitNb24gTm92ICA0IDA3OjE5OjM2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJvbXAubWQgKG1vdmRmLCBtb3ZkaSk6IFdoZW4gc3BsaXR0aW5nLCBlbnN1cmUgd2UgcHV0IGluIGEgQ0xPQkJFUgorCWZvciBhIHNjcmF0Y2ggcmVnaXN0ZXIsIHdoZW4gbmVlZGVkLgorCisJKiB0bS1hMjlrLmggKFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFLCBXQ0hBUl9UWVBFKTogRGVmaW5lIHRvIGJlIAorCWNvbXBhdGlibGUgd2l0aCB0aG9zZSBjaG9zZW4gYnkgRVBJLgorCisJKiB0bS1yczYwMDAuaCAoUkVHX0FMTE9DX09SREVSKTogUHV0IENSIHJlZ2lzdGVycyBiZWZvcmUgaW50ZWdlciByZWdzLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK1N1biBOb3YgIDMgMTI6MjI6NDEgMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IHNpY3Muc2UpCisKKwkqIGxvbmdsb25nLmggKG02ODAyMCBjb3VudF9sZWFkaW5nX3plcm9zKTogRml4IHR5cG8gaW4gcHJldmlvdXMKKwljaGFuZ2UuCisKK1N1biBOb3YgIDMgMDk6MjU6MzkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uLCBjYXNlcyBHRVUsIExUVSwgR1RVLCBMRVUpOgorCVNpbXBsaWZ5IGNvbXBhcmlzb25zIHRoYXQgaGF2ZSBrbm93biB2YWx1ZXMgc3VjaCBhcyAodW5zaWduZWQpIHggPCAwLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBJZiB3ZSd2ZSBqdXN0IG1hZGUgYSBicmFuY2ggdW5jb25kaXRpb25hbCwKKwljb252ZXJ0IChzZXQgKHBjKSAocmV0dXJuKSkgdG8gKHJldHVybikuCisJVXNlIGNvbnN0X3RydWVfcnR4IGluc3RlYWQgb2YgY2FsbGluZyBnZW5fcnR4IHRvIG1ha2UgaXQgYWdhaW4uCisKKwkqIHgtcm9tcCAoQ0MpOiBQYXNzIC1Ibm9jcHAgdG8gaGMgc28gaXQgd2lsbCB1c2UgYnVpbHRpbiBwcmVwcm9jZXNzb3IuCisJKElOVEVSTkFMX0NGTEFHUyk6IERvbid0IGRlZmluZSBCU1RSSU5HIGhlcmUuCisJKiB4bS1yb21wLmggKGFsbG9jYSk6IEFkZCBkZWZpbml0aW9uIHRvIGFsbG93IHVzZSBvZiBoYydzIGJ1aWx0aW4uCisJKEJTVFJJTkcpOiBEZWZpbmUgaGVyZS4KKworCSogcmVsb2FkMS5jIChzcGlsbF9oYXJkX3JlZyk6IENvcnJlY3QgdHlwbyBpbiBwcmV2aW91cyBjaGFuZ2U7IGhhZAorCXRlc3QgYmFja3dhcmRzLgorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSwgY2FzZSBQTFVTKTogSWYgY2FuJ3QKKwlyZXBsYWNlIG9wZXJhbmQgd2l0aCByZWdpc3RlciwgdHJ5IHRvIHJlcGxhY2UgYWxsIGNvcGllcyBvZiBvcGVyYW5kCisJd2l0aCB0aGUgcmVnaXN0ZXIgaW4gY2FzZSBvZiBNQVRDSF9EVVAuCisKKwkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEpOiBVc2UgcnR4X2VxdWFsX3AgdG8gc2VlIGlmCisJdGhpbmdzIGFyZSBlcXVhbC4KKworCSogZ2VuY29uZmlnLmMgKG1heF9yZWNvZ19vcGVyYW5kcywgbWF4X2R1cF9vcGVyYW5kcyk6IFJlbW92ZSBgX2ZsYWcnCisJaW4gbmFtZSBzaW5jZSB0aGVzZSBhcmVuJ3QgZmxhZ3MuCisJKG1heF9jbG9iYmVyc19wZXJfaW5zbik6IExpa2V3aXNlLgorCShtYWluKTogRGVmYXVsdCB0byBhdCBsZWFzdCAxMCBvcGVyYW5kcyAoZm9yIGFzbSkgYW5kIDEgZHVwIG9wZXJhbmQuCisKK1N1biBOb3YgIDMgMDc6MjY6NTcgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliMS5udWxsKTogVXNlICQoR0NDX0ZMQUdTKSBpbnN0ZWFkCisJb2YgJChDQ0xJQkZMQUdTKS4KKwkoZ251bGliMSk6IERvbid0IGNvcHkgZ251bGliMS5jIGludG8gYSB0ZW1wb3JhcnkgLmMgZmlsZSBiZWZvcmUKKwljb21waWxpbmcuICBUaGF0IG1lc3NlcyB1cCB0aGUgc291cmNlIGZpbGUgbmFtZXMgaW4gdGhlIGRlYnVnIGluZm8sCisJd2hpY2ggbWFrZXMgaXQgaGFyZGVyIHRvIGRlYnVnIGdudWxpYjEgcHJvYmxlbXMuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLSopOiBGb3JjZSByZW1vdmFsIG9mIHByZXZpb3VzbHkgaW5zdGFsbGVkIGZpbGVzCisJYmVmb3JlIGluc3RhbGxpbmcgbmV3IG9uZXMgKGluIGNhc2UgdGhleSBnb3Qgc2V0IHRvIHJlYWQtb25seSBzb21laG93KS4KKworCSogTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IFJlbW92ZSBwcm90b2l6ZS4xIGFuZCB1bnByb3RvaXplLjEgbWFuCisJcGFnZSBmaWxlcy4KKworU2F0IE5vdiAgMiAyMjo0MjowNiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvdXQtYTI5ay5jIChvdXRwdXRfZXBpbG9nKTogUmVtb3ZlIHdyaXRlX3N5bWJvbHMgZnJvbSBwYXJhbWV0ZXIgbGlzdAorCW9mIGNhbGwgdG8gZmluYWxfc2Nhbl9pbnNuLgorCSogb3V0LW04OGsuYyAocHJlc2VydmVfcmVnaXN0ZXJzKTogTGlrZXdpc2UuCisJKiBvdXQtbWlwcy5jIChmdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgorCSogb3V0LXNwYXJjLmMgKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSwgb3V0cHV0X3RhaWxfY2FsbCk6IExpa2V3aXNlLgorCitTYXQgTm92ICAyIDIyOjAyOjQ1IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAocHVzaF9jbGFzc19kZWNscyk6IEFkZGVkIG1pc3NpbmcgYXJndW1lbnQgdG8KKwlvdmVybG9hZF90ZW1wbGF0ZV9uYW1lLgorCisJKiBjcC1wdHJlZS5jIChwcmludF9sYW5nX2RlY2wpOiBEb24ndCBwcmludCBsYW5nLXNwZWNpZmljIGZpZWxkcworCWZvciBGSUVMRF9ERUNMLCBzaW5jZSBpdCBoYXMgb25seSB0aGUgc2hvcnRlciBmbGFncyBzdHJ1Y3R1cmUuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kKTogRml4ZWQgY29tbWVudCB0eXBvLgorCisJKiBjcC1kZWNsLmM6IEFkZCBzb21lIGNvZGUgZm9yIGRlYnVnZ2luZyBiaW5kaW5nIGxldmVsCisJbWFuaXB1bGF0aW9ucywgY29uZGl0aW9uYWxpemVkIG9uIERFQlVHX0NQX0JJTkRJTkdfTEVWRUxTLgorCShkZWJ1Z19iaW5kaW5nc19pbmRlbnRhdGlvbik6IE5ldyB2YXIsIHVzZWQgdG8gbWFpbnRhaW4gaW5kZW50YXRpb24KKwl0byBpbmRpY2F0ZSB3aGljaCBjaGFuZ2VzIGFyZSBvbiB0aGUgYmVoYWxmIG9mIG90aGVyIHJvdXRpbmVzLgorCShwdXNoX2JpbmRpbmdfbGV2ZWwpOiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gdHJhY2sgYmluZGluZworCWxldmVsIGNoYW5nZXMgYW5kIGNhbGwvbmVzdGluZyBzZXF1ZW5jZXMuCisJKHB1c2hsZXZlbCwgcG9wbGV2ZWwpOiBEaXR0by4KKwkocHVzaGxldmVsX2NsYXNzKTogRGl0dG8uCisJKHBvcF9iaW5kaW5nX2xldmVsKTogRGl0dG8uICBBbHNvIHNjcmliYmxlIG92ZXIgZnJlZWQgYmluZGluZyBsZXZlbCwKKwlhbmQgZG9uJ3Qgc3RvcmUgaXQgZm9yIHJlLXVzZS4KKwkocG9wbGV2ZWxfY2xhc3MpOiBEaXR0by4KKwkqIGNwLWRlY2wuaCAoZGVidWdfYmluZGluZ3NfaW5kZW50YXRpb24pOiBEZWNsYXJlIGl0LgorCSogY3AtcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNscywgcG9wX3RlbXBsYXRlX2RlY2xzKTogQWRkZWQKKwlkZWJ1Z2dpbmcgZnByaW50ZiBjYWxscyBoZXJlIHRvby4KKworU2F0IE5vdiAgMiAxNzowMDoyMiAxOTkxICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGNwLWV4Y2VwdC5jIChmaW5pc2hfZXhjZXB0aW9uX2RlY2wpOiBDaGFuZ2UgYGVudW0gZGVidWdnZXInIHRvCisJYGVudW0gZGVidWdfaW5mb190eXBlJy4KKwkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uLCBmaW5hbCwgZmluYWxfZW5kX2Z1bmN0aW9uLAorCW91dHB1dF9zb3VyY2VfbGluZSk6IERlbGV0ZSB0aGUgYHdyaXRlX3N5bWJvbHMnIHBhcmFtZXRlci4KKwlJbnN0ZWFkIHVzZSB0aGUgZ2xvYmFsIGB3cml0ZV9zeW1ib2xzJyBkZWNsYXJlZCBpbiBmbGFncy5oLgorCSogc2NoZWQuYyAodW5saW5rX25vdGVzLCBzY2hlZHVsZV9ibG9jaywgc2NoZWR1bGVfaW5zbnMpOiBDb21wYXJlCisJYHdyaXRlX3N5bWJvbHMnIHdpdGggTk9fREVCVUcgcmF0aGVyIHRoYW4gd2l0aCB6ZXJvLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwgcmVzdF9vZl9jb21waWxhdGlvbik6IERvbid0CisJcGFzcyBgd3JpdGVfc3ltYm9scycgdG8gYXNzZW1ibGVfdmFyaWFibGUsIGZpbmFsX3N0YXJ0X2Z1bmN0aW9uLAorCWZpbmFsLCBmaW5hbF9lbmRfZnVuY3Rpb24uCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBEZWxldGUgdGhlIGB3cml0ZV9zeW1ib2xzJyBwYXJhbWV0ZXIuCisJSW5zdGVhZCB1c2UgdGhlIGdsb2JhbGB3cml0ZV9zeW1ib2xzJyBkZWNsYXJlZCBpbiBmbGFncy5oCisKK1NhdCBOb3YgIDIgMDk6NDg6NDcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbGVyLXNhdmUuYzogRG9uJ3QgaW5jbHVkZSByZWxvYWQuaDsgbm90IHVzZWQuCisJKiBNYWtlZmlsZS5pbiAoY2FsbGVyLXNhdmUubyk6IExpa2V3aXNlLgorCisJKiBmaW5hbC5jIChmaW5hbF9zdGFydF9mdW5jdGlvbiwgZmluYWxfZW5kX2Z1bmN0aW9uLCBmaW5hbCk6IENoYW5nZQorCWVudW0gZGVidWdnZXIgdG8gZW51bSBkZWJ1ZyBpbmZvIHRvIGZpbmlzaCBwcmV2aW91cyBjaGFuZ2UuCisJKGZpbmFsX3NjYW5faW5zbiwgb3V0cHV0X3NvdXJjZV9saW5lKTogTGlrZXdpc2UuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBMaWtld2lzZS4KKworCSogcnRsYW5hbC5jIChtb2RpZmllZF9iZXR3ZWVuX3AsIGZpbmRfbGFzdF92YWx1ZSk6IE5ldyBmdW5jdGlvbnM7IG5vdAorCXlldCB1c2VkLgorCSogcnRsLmggKGZpbmRfbGFzdF92YWx1ZSk6IERlY2xhcmUuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogUmVtb3ZlIGNvbXBhcmlzb24gY2FzZXMgZnJvbQorCWhlcmU7IG5vdyBpbiBzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbi4KKworRnJpIE5vdiAgMSAxOTowNDo1MCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGwuaCAoUkVHX0RFQUQpOiBNb3JlIHByZWNpc2VseSBkZXNjcmliZSB3aGVuIGEgUkVHX0RFQUQgbm90ZQorCXNob3VsZCBiZSBwcmVzZW50LgorCSogcnRsYW5hbC5jIChkZWFkX29yX3NldF9yZWdub19wKTogTmV3IGZ1bmN0aW9uLgorCShkZWFkX29yX3NldF9wKTogQSB2YWx1ZSBpcyBkZWFkIG9yIHNldCBvbmx5IGlmIGVhY2ggcmVnaXN0ZXIgaW4gaXQKKwlpcyBkZWFkIG9yIHNldC4KKwkqIGNvbWJpbmUuYyAocmVnX2JpdGZpZWxkX3RhcmdldCk6IE5ldyBmdW5jdGlvbi4KKwkoZGlzdHJpYnV0ZV9ub3RlcywgY2FzZSBSRUdfREVBRCk6IFBsYWNlIFJFR19ERUFEIG5vdGUgb25seSBpZiBib3RoCisJZGVhZF9vcl9zZXRfcCBhbmQgcmVnX2JpdGZpZWxkX3RhcmdldCBhcmUgZmFsc2UuCisJKiBmbG93LmMgKGNjMF9saXZlKTogTmV3IHZhcmlhYmxlOyByZXBsYWNlcyBmb2xsb3dpbmdfaW5zbl9kZWFkLgorCShwcm9wYWdhdGVfYmxvY2spOiBJbml0aWFsaXplIGNjMF9saXZlIGluc3RlYWQgb2YgZm9sbG93aW5nX2luc25fZGVhZC4KKwlUcmFjayBDQzAncyBsaWZlIGp1c3QgbGlrZSBvdGhlciByZWdzIGluc3RlYWQgb2YgdXNpbmcgc3BlY2lhbAorCW1lY2hhbmlzbSBpbnZvbHZpbmcgZm9sbG93aW5nX2luc25fZGVhZC4KKwlDbGVhciBsYXN0X21lbV9zZXQgZXZlbiB3aGVuIG5vdCBmaW5hbCBwYXNzLgorCURvbid0IGNhbGwgbWFya191c2VkX3JlZ3Mgb24gZGVhZCBpbnNucy4KKwkoaW5zbl9kZWFkX3ApOiBVc2UgY2MwX2xpdmUgdG8gc2VlIGlmIGEgc2V0IG9mIENDMCBpcyBkZWFkLgorCUNvcnJlY3RseSB0ZXN0IGlmIHNldCBvZiBtdWx0aS13b3JkIHZhbHVlIGlzIG5lZWRlZDsgc2V0IGlmIGRlYWQgb25seQorCWlmIG5vbmUgb2YgdGhlIHdvcmRzIGFyZSBuZWVkZWQuCisJKGxpYmNhbGxfZGVhZF9wKTogQWxsb3cgQ0FMTCB0byBiZSBpbiBhbnkgcGFydCBvZiBQQVJBTExFTC4KKwlVc2UgaW5zbl9kZWFkX3AgdG8gc2VlIGlmIFNFVCBvZiByZXR1cm4gcmVnaXN0ZXIgaXMgZGVhZDsgb2xkIGNvZGUKKwlpbmNvcnJlY3RseSB0ZXN0ZWQgbXVsdGktd29yZCByZWdpc3RlcnMuCisJKG1hcmtfc2V0XzEpOiBUcmFjayB3aGV0aGVyIGFsbCBvciBvbmx5IHNvbWUgd29yZHMgb2YgYSB2YWx1ZSBhcmUKKwluZWVkZWQ7IHdyaXRlIHBhcnRpYWwgUkVHX1VOVVNFRCBub3RlIGlmIG9ubHkgc29tZSB3b3JkcyB3b24ndCBiZQorCW5lZWRlZC4KKwkobWFya191c2VkX3JlZ3MpOiBMaWtld2lzZSBmb3IgUkVHX0RFQUQgbm90ZXMuCisJU2V0IGNjMF9saXZlIGZvciBhIHJlZmVyZW5jZSB0byBDQzAuCisJRG9uJ3Qgd3JpdGUgUkVHX0RFQUQgbm90ZSBpZiByZWdpc3RlciBpcyBhbHJlYWR5IGRlYWQgb3Igc2V0IGluIElOU04uCisJTm8gbG9uZ2VyIGNoZWNrIGZvciB1bnVzZWQgU0VUX0RFU1Qgc2luY2UgaXQgd29uJ3QgYmUgY2FsbGVkIGZvciBkZWFkCisJaW5zbnM7IGlmIGEgc2luZ2xlIFNFVCdzIHJlc3VsdCB3YXMgdW5uZWVkZWQgYnV0IHRoZSBpbnNuIGNhbid0IGJlCisJZGVsZXRlZCwgdGhlIHNvdXJjZSBvZiB0aGUgU0VUIGlzIGxpdmUuCisJQ2xlYXIgbGFzdF9tZW1fc2V0IGV2ZW4gaWYgbm90IGZpbmFsIHBhc3MuCisKKwkqIHJlbG9hZDEuYyAoZ2VuX2lucHV0X3JlbG9hZCk6IEhhbmRsZSBSRUcrTUVNIHRoZSBzYW1lIGFzIFJFRytJTlQuCisKKwkqIGdjYy5jICh4bWFsbG9jLCB4cmVhbGxvYyk6IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIHNpemVfdCBmb3IgYHNpemUnLgorCisJKiBjY2NwLmMgKGJjb3B5LCBiemVybywgYmNtcCk6IE5vIGxvbmdlciBzdGF0aWMuICBPbmx5IGRlY2xhcmUgYXQKKwlmcm9udCBvZiBmaWxlIGlmIHdlIGFyZSBnb2luZyB0byBkZWZpbmUgdGhlbSBsYXRlci4KKworRnJpIE5vdiAgMSAxODo1NzoyNSAxOTkxICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGNjY3AuYyAodGltZWJ1Zik6IERlY2xhcmF0aW9uIG1vdmVkIG91dCBvZiBgc3BlY2lhbF9zeW1ib2wnIGFuZAorCW1hZGUgZ2xvYmFsIChhbmQgInN0YXRpYyIpIHRvIGdldCB2YWx1ZXMgb2YgX19EQVRFX18gYW5kIF9fVElNRV9fCisJdG8gcmVtYWluIGNvbnN0YW50IHRocm91Z2hvdXQgY29tcGlsYXRpb24uCisJKGRlYnVnX291dHB1dCk6IE5ldyB2YXJpYWJsZS4KKwkobWFpbik6IEFjY2VwdCAtZzMgb3B0aW9uIGFuZCBzZXQgZGVidWdfb3V0cHV0IHdoZW4gc2Vlbi4KKwkobWFpbik6IE1vdmVkIGluaXRpYWxpemF0aW9ucyBvZiBgb3V0YnVmJyBhbmQgYGZwJyB0byBiZWZvcmUgY2FsbAorCXRvIGBpbml0aWFsaXplX2J1aWx0aW5zJy4KKwlQYXNzIGZwIGFuZCAmb3V0cHV0IHRvIGluaXRpYWxpemVfYnVpbHRpbnMgc28gdGhhdCBpdCBjYW4gd3JpdGUgb3V0CisJYXJ0aWZpY2lhbCAjZGVmaW5lIGxpbmVzIGZvciBidWlsdGluIHN5bWJvbHMuCisJQ2FsbCBgb3V0cHV0X2xpbmVfZGlyZWN0aXZlJyBiZWZvcmUgZG9pbmcgZWFjaCBtYWtlX2RlZmluZSBvcgorCW1ha2VfdW5kZWYgc28gdGhhdCB3aGVuIGBkZWJ1Z19vdXRwdXQnIGlzIGluIGVmZmVjdCwgd2UnbGwKKwlnZXQgI2xpbmUgMCBkaXJlY3RpdmVzIGJlZm9yZSBlYWNoIGFydGlmaWNpYWwgI2RlZmluZSBvciAjdW5kZWYuCisJKHNwZWNpYWxfc3ltYm9sKTogSW5pdGlhbGl6YXRpb24gb2YgYHRpbWVidWYnIGRlbGV0ZWQgZnJvbSBoZXJlLgorCShpbml0aWFsaXplX2J1aWx0aW5zKTogSW5pdGlhbGl6ZSB0aW1lYnVmIGhlcmUuCisJKHBhc3NfdGhydV9kaXJlY3RpdmUpOiBOZXcgZnVuY3Rpb24uCisJKGRvX2RlZmluZSwgZG9fdW5kZWYpOiBVc2UgYHBhc3NfdGhydV9kaXJlY3RpdmUnIGZvciAicHJlY29tcGlsYXRpb24iCisJb2YgaGVhZGVyIGZpbGVzLgorCUNhbGwgYHBhc3NfdGhydV9kaXJlY3RpdmUnIHdoZW4gLWczIG9wdGlvbiB1c2VkLgorCShpbml0aWFsaXplX2J1aWx0aW5zKTogR2VuZXJhdGUgYXJ0aWZpY2lhbCAjZGVmaW5lIGRpcmVjdGl2ZXMgKGluIHRoZQorCW91dHB1dCkgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZXMgb2YgYWxsIGJ1aWx0aW4gc3ltYm9scyB3aG9zZSBkZWZzCisJY2FuJ3QgY2hhbmdlIGR1cmluZyBjb21waWxhdGlvbi4KKwkobWFrZV91bmRlZik6IEFkZGVkIG91dHB1dCBidWZmZXIgcGFyYW0gc28gdGhhdCBtYWtlX3VuZGVmIGNvdWxkIGxldAorCWRvX3VuZGVmIGRvIG91dHB1dCB0byBzdGRvdXQuCisJQ2FsbCBkb191bmRlZiB3aXRoIGEgcmVhbCBvdXRwdXQgYnVmZmVyLgorCShtYWtlX2RlZmluaXRpb24pOiBMaWtld2lzZS4KKwlNYW55IG1pbm9yIGNoYW5nZXMgdG8gZ2V0IHN0cmluZ3MgcGFzc2VkIHRvIGRvX2RlZmluZSB0byBhbHdheXMgbG9vaworCWxpa2UgY29ycmVjdGx5IGZvcm1lZCAjZGVmaW5lIGRpcmVjdGl2ZXMuCisKKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogUmVtb3ZlIG5vbi1wYXJhbXMgZnJvbSB0aGUgbGlzdCBiZWZvcmUKKwljaGVja2luZyB0byBzZWUgaWYgdGhlIHR5cGUgb2YgYW55IGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgY29tcGxldGUuCisJKHB1c2hsZXZlbCk6ICBGaXhlZCBidWcgd2hpY2ggY2F1c2VkIHNjb3BlIG9mIHRhZ2dlZCB0eXBlcyB0byBiZQorCWluY29ycmVjdGx5IGFzc2lnbmVkIHRvIHRoZSBvdXRlcm1vc3Qge30gYmxvY2sgb2YgZnVuY3Rpb25zIHJhdGhlcgorCXRoYW4gdG8gdGhlIG91dGVybW9zdCBiaW5kaW5nIGNvbnRvdXJzIG9mIGZ1bmN0aW9ucy4KKwkocHVzaHRhZyk6ICBSZXZpc2VkIHRvIGNsYXJpZnkgY29kZSB1c2VkIHRvIGZpbmQgYXBwbGljYWJsZQorCWJpbmRpbmcgbGV2ZWwgZm9yIGEgdGFnbmFtZS4KKwlTZXQgVFlQRV9DT05URVhUIG9mIG5ldyB0YWdnZWQgdHlwZSBzbyB0aGF0IGR3YXJmb3V0LmMgY2FuIHRlbGwKKwlmaWxlLXNjb3BlIHRhZ2dlZCB0eXBlcyBmcm9tIG5vbi1maWxlLXNjb3BlIHRhZ2dlZCB0eXBlcy4KKwlDcmVhdGUgYSBOVUxMLW5hbWVkIFRZUEVfREVDTCBub2RlIGZvciBlYWNoIG5ldyB0YWdnZWQgdHlwZQorCShldmVuIGluY29tcGxldGUgb25lcykuCisJKGZpbmlzaF9zdHJ1Y3QsIGZpbmlzaF9lbnVtKTogRG9uJ3QgY3JlYXRlIE5VTEwtbmFtZWQKKwlUWVBFX0RFQ0wgbm9kZXMgZm9yIGNvbXBsZXRlIHRhZ2dlZCB0eXBlcy4gIChUaGlzIGlzIG5vdyBkb25lIGluCisJYHB1c2h0YWcnIGZvciAqYWxsKiBuZXcgdGFnZ2VkIHR5cGUgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucy4pCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiAgQWRqdXN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gKKwlgZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsJyBpcyBjYWxsZWQgZHVyaW5nIGZpbmFsIHRyYXZlcnNhbCBvZgorCXRoZSBjaGFpbiBvZiBmaWxlLXNjb3BlIGRlY2xzIHNvIHRoYXQgaXQgaXMgY2FsbGVkIGFsc28gZm9yCisJZmlsZS1zY29wZSBUWVBFX0RFQ0xzLgorCShyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiAgRGVsZXRlZCBjYWxsIHRvIGBkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wnCisJZm9yIGZpbGUtc2NvcGUgVFlQRV9ERUNMczsgY2FsbCBgZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsJyBpbnN0ZWFkIG9mCisJYGR3YXJmb3V0X2ZpbGVfc2NvcGVfc3ltYm9sJy4KKworCSogZGJ4b3V0LmMsIHNkYm91dC5jLCBmbGFncy5oLCB0b3BsZXYuYzogIENoYW5nZSBERUJVR19MRVZFTF8qIHRvCisJRElORk9fTEVWRUxfKiB0byBwcmV2ZW50IHBvc3NpYmxlIGNvbmZ1c2lvbiBhYm91dCBtZWFuaW5nLgorCisJKiBmbGFncy5oLCB0b3BsZXYuYzogKGVudW0gZGVidWdfaW5mb190eXBlKTogIFJlbmFtZWQgdHlwZSBmcm9tCisJYGRlYnVnZ2VyJyBhbmQgY2xlYW5lZCB1cCBkZWZpbml0aW9uIG9mIHR5cGUgKGluY2x1ZGluZyBkZWxldGlvbgorCW9mIHVzZWxlc3MgRVhURU5ERURfREJYX0RFQlVHIGNvZGUpLgorCSh1c2VfZ2RiX2RieF9leHRlbnNpb25zKTogTWFrZSBkZWNsYXJhdGlvbnMgY29uZGl0aW9uYWwgb24KKwlEQlhfREVCVUdHSU5HX0lORk8gYmVpbmcgZGVmaW5lZC4KKworCSogb3V0LWk4NjAuYyAob3V0cHV0X2ZwX21vdmVfZG91YmxlLCBmaW5kX2FkZHJfcmVnKTogIEFkZCByZXR1cm4gc3RtdHMKKwl0byBhdm9pZCB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIC1XcmV0dXJuLXR5cGUuCisJKG91dHB1dF9kZWxheWVkX2JyYW5jaCk6ICBGaXggdGVzdCBmb3IgQ09OU1RfSU5UIHZhbHVlcyB3aGljaCBtdXN0IGJlCisJbG9hZGVkIGluIHR3byBpbnN0cnVjdGlvbnMgKGFzIHR3byBoYWx2ZXMpLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6ICBSZW1vdmUgQVNNX09VVFBVVF9FUElMT0dVRV9TVUZGSVguICAoU3VwZXJjZWVkZWQKKwlieSBBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFIGluIHZhcmFzbS5jLikKKworCSogeG0taTM4Ni5oIChpMzg2KTogRGVmaW5lIGluIGNhc2UgdGhlIG5hdGl2ZSBob3N0IGNvbXBpbGVyIGRvZXNuJ3QuCisKKwkqIHRtLXN2cjQuaCAoU1ZSNCk6IERlZmluZSB0aGlzIHJhdGhlciB0aGFuIFNWUjRfdGFyZ2V0LgorCShBU01fRklOQUxfU1BFQyk6IFN1cHBvcnQgdGhlIC1waXBlIG9wdGlvbi4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSwgQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUpOiBBbGxvdyBlYXN5CisJcmVkZWZpbml0aW9uIG9mIHRoZSBzeW50YXggZm9yIHNlY29uZCBvcGVyYW5kIG9mIC50eXBlLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKTogRml4IGxpbmUgY29udGludWF0aW9ucy4KKworRnJpIE5vdiAgMSAxNDoxNDoxNCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogb3V0LW1pcHMuYyAobWlwc19hc21fZmlsZV9lbmQpOiBHZW5lcmF0ZSBjb3JyZWN0IGNvZGUgaWYgdGhlIHVzZXIKKwl1c2VzIGFzbSgibmFtZSIpLiAgUGF0Y2ggZnJvbSBib3RobmVyQGN5Z251cy5jb20uCisKKwkqIG1pcHMtdGZpbGUuYyAoaW5pdF9maWxlIGluaXRpYWxpemF0aW9uKTogRml4ICNpZmRlZgorCUJZVEVTX0JJR19FTkRJQU4gdG8gYmUgI2lmIEJZVEVTX0JJR19FTkRJQU4sIHRvIGFsbG93IHRoZSBERUNzdGF0aW9uCisJdG8gd29yayBhZ2Fpbi4KKwkodG9wbGV2ZWwpOiBSZW1vdmUgZGVjbGFyYXRpb25zIG9mIGludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zLAorCV9mbHNidWYsIF9maWxidWYuCisKK1RodSBPY3QgMzEgMTQ6NTk6MTEgMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGxvbmdsb25nLmggKG02ODAyMCBjb3VudF9sZWFkaW5nX3plcm9zKTogVXNlICViIGZvciBvZmZzZXQgYW5kCisJd2lkdGggc3ludGF4IGZvciBiZmZmbyBpbnN0cnVjdGlvbi4KKworVGh1IE9jdCAzMSAwNTo0NTo1NCAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChQVVNIX0JJTkRJTkdfTEVWRUwsIFBPUF9CSU5ESU5HX0xFVkVMKTogUmVwbGFjZWQKKwl1c2VzIG9mIG1hY3JvcyB3aXRoIHRoZWlyIGV4cGFuc2lvbnMsIGFuZCBkZWxldGVkIHRoZSBtYWNyb3MuCisKK1dlZCBPY3QgMzAgMTI6NDU6MzMgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisgICAgICAgICogZHdhcmZvdXQuYywgZHdhcmYuaCwgUkVBRE1FLkRXQVJGOiBSZXBsYWNlbWVudCBmaWxlcyB0aGF0IGJyaW5nCisJdGhlIER3YXJmIGltcGxlbWVudGF0aW9uIHVwIHRvIHRoYXQgZGVmaW5lZCBieSBkcmFmdCA1IG9mIHRoZQorCVVJL1BMU0lHIER3YXJmIHNwZWNpZmljYXRpb24uCisKK1dlZCBPY3QgMzAgMTA6NTA6MDcgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG9iamMtcGFyc2UueSAoeXlsZXgpOiBDYXN0IHNob3J0IHR5cGVzIHRvIGludCBiZWZvcmUgc2hpZnRpbmcsIHRvCisJYXZvaWQgYm9ndXMgd2FybmluZ3MgZnJvbSB0aGUgTUlQUyBDIGNvbXBpbGVyLgorCisJKiBjY2NwLmMgKGZhbmN5X2Fib3J0KTogTWFrZSB0aGlzIGdsb2JhbCBhZ2Fpbiwgc28gdGhhdAorCS1EYWJvcnQ9ZmFuY3lfYWJvcnQgd2lsbCBub3QgY2F1c2UgYSBsaW5rIGVycm9yLCBiZWNhdXNlIG9ic3RhY2suYworCWNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFib3J0LgorCitXZWQgT2N0IDMwIDA3OjM4OjA4IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBTWVNDQUxMUy5jIChhYm9ydCk6IFVuZGVmaW5lIGZpcnN0LgorCisJKiB4bS1tODhrLmggKEhPU1RfV09SRFNfQklHX0VORElBTik6IERlZmluZSBpdC4KKwkqIG91dC1tODhrLmMgKG91dHB1dF9hbmQpOiBDaG9vc2UgImNsciIgbGFzdC4KKworVHVlIE9jdCAyOSAyMjo0OTo0NyAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogdG0tbWlwcy5oIChudW1fcmVmcyk6IE5ldyBnbG9iYWwgYXJyYXkuCisJKG1pcHNfY291bnRfbWVtb3J5X3JlZnMpOiBOZXcgZnVuY3Rpb24gZGVjbC4KKworCSogb3V0LW1pcHMuaCAobnVtX3JlZnMpOiBOZXcgZ2xvYmFsIGFycmF5IHRvIGNvdW50IG51bWJlciBvZiAxLCAyLAorCW9yIDMgaW5zdHJ1Y3Rpb24gZGF0YSByZWZlcmVuY2VzIHdpdGggLW1zdGF0cy4KKwkobWlwc19jb3VudF9tZW1vcnlfcmVmcyk6IE5ldyBmdW5jdGlvbiBkZWNsIHRvIGRldGVybWluZSB3aGV0aGVyIGEKKwlkYXRhIG1lbW9yeSByZWZlcmVuY2UgdXNlcyAxLCAyLCBvciAzIGluc3RydWN0aW9ucy4KKwkobWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzKTogQ2FsbCBtaXBzX2NvdW50X21lbW9yeV9yZWZzCisJYXMgYXBwcm9wcmlhdGUuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogUHJpbnQgbnVtYmVyIG9mIDEsIDIsIGFuZCAzIGluc3RydWN0aW9uCisJbWVtb3J5IHJlZmVyZW5jZXMgaWYgLW1zdGF0cy4KKworCSogbWlwcy5tZCAobW92c2lfdWx3LCBtb3ZzaV91c3cpOiBDYWxsIG1pcHNfY291bnRfbWVtb3J5X3JlZnMgaWYKKwluZWVkZWQuCisKK1R1ZSBPY3QgMjkgMDU6MTQ6MjcgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHRlbXBsYXRlX2RlZik6IERvbid0IHBhc3MgYm9ndXMgZGVjbHNwZWNzIHRvCisJc3RhcnRfZGVjbC4KKworCSogY3AtcHQuYyAodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBCdWlsZCBuZXcgYXJndW1lbnQgbGlzdAorCWZyb20gbWV0aG9kIHRlbXBsYXRlLCBpbnN0ZWFkIG9mIHJldGFpbmluZyB0aGUgb2xkIG9uZS4KKworVHVlIE9jdCAyOSAwMDo0NDo1MSAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFNraXAgdHlwZSBmaWVsZHMgaWYgdGhleSBhcmUKKwl0ZW1wbGF0ZSBuYW1lcyBib3VuZCB0byB0aGVpciBleHBhbnNpb25zLgorCisJKiBjcC1kZWNsLmMgKGJpbmRpbmdfbGV2ZWxzX3NhbmUpOiBEZWZpbmUgb25seSBpZiBQQVJBTk9JRDsgdXNlIGEKKwltYWNybyByZXR1cm5pbmcgMSBvdGhlcndpc2UuICBDaGVjayBjbGFzc19iaW5kaW5nX2xldmVsIHN0YWNrIGZvcgorCWNvbnNpc3RlbmN5IGFsc28uCisJKHB1c2hkZWNsKTogVmVyaWZ5IHRoYXQgYmluZGluZ3MgcHVzaGVkIGF0IGdsb2JhbCBzY29wZSBhcmUgaW4KKwlwZXJtYW5lbnQgb2JzdGFjayBzdG9yYWdlLgorCShzdGFydF9kZWNsKTogV2hpbGUgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLCBkb24ndCBhbHNvIG5lZWQgdG8KKwl2ZXJpZnkgdGhhdCB0aGUgZGVjbCB1c2VzIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiAgRm9yIG1ldGhvZAorCXRlbXBsYXRlcywgY29uc3RydWN0IHByb3BlciBtZXRob2QgdHlwZSBmb3IgcmVzdWx0LiAgVFJFRV9FWFRFUk5BTAorCWZsYWcgZm9yIG1ldGhvZHMgc2hvdWxkIGJlIGNsZWFyZWQgaWYgREVDTF9FWFRFUk5BTCBpcyBjbGVhci4KKwkoZ3Jva2RlY2xhcmF0b3IsIGNhc2UgQ0FMTF9FWFBSKTogSW50ZXJjZXB0IGRlc3RydWN0b3IgdGVtcGxhdGVzLAorCXdoaWNoIGhhdmUgYSBkaWZmZXJlbnQgaW50ZXJuYWwgZm9ybSwgYW5kIGNvbnZlcnQgdGhlbSB0byBhIGZvcm0KKwl0aGF0IGNhbiBiZSByZWNvZ25pemVkLgorCisJKiBjcC1kZWNsMi5jIChncm9rY2xhc3Nmbik6IEluY2x1ZGUgbGVuZ3RoIG9mIGNsYXNzIG5hbWUgd2hlbgorCWNyZWF0aW5nIGFzc2VtYmxlciBuYW1lIGZvciBkZXN0cnVjdG9yOyBvdGhlcndpc2UgYW1iaWd1aXRpZXMKKwlyZXN1bHQuCisKKwkqIGNwLWxleC5jIChpZGVudGlmaWVyX3R5cGVkZWNsX3ZhbHVlKTogTmV3IGZuOyBzY2FucyBiaW5kaW5ncyBvZgorCWlkZW50aWZpZXIgZm9yIGEgZ2l2ZW4gdHlwZSBkZWNsOyBmYWxscyBiYWNrIHRvIG5hbWUgb2YgdHlwZS4KKwkqIGNwLXRyZWUuaCAoSURFTlRJRklFUl9UWVBFREVDTF9WQUxVRSk6IENhbGwgaXQuCisKKwkqIGNwLW1ldGhvZC5jIChmbmRlY2xfYXNfc3RyaW5nKTogUHJpbnQgY29uc3RydWN0b3JfbmFtZSBvZiB0eXBlCisJZm9yIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLCBub3QgdHlwZSBuYW1lLgorCisJKiBjcC1wYXJzZS55ICh0ZW1wbGF0ZV9kZWYpOiBEb24ndCBvdXRwdXQgd2FybmluZyBhYm91dCBtaXNzaW5nCisJdHlwZSBhbmQgc3RvcmFnZSBjbGFzcywgc2luY2UgdGhpcyBnZXRzIHByaW50ZWQgZm9yIGRlc3RydWN0b3IKKwl0ZW1wbGF0ZXMuCisJKG5vdHlwZV9kZWNsYXJhdG9yKTogQWNjZXB0ICd+JyBQVFlQRU5BTUUuCisJKHNjb3BlZF90eXBlbmFtZSk6IFdhbnQgYSBQVFlQRU5BTUUsIG5vdCBUWVBFTkFNRS4gIEJ1aWxkIGEKKwlTQ09QRV9SRUYgbm9kZSBpbnN0ZWFkIG9mIGNhbGxpbmcgcmVzb2x2ZV9zY29wZV90b19uYW1lLgorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9tZW1iZXJfdGVtcGxhdGVzKTogTmV3IGZuLiAgSW5zdGFudGlhdGVzCisJbWVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gdGVtcGxhdGUgY2xhc3MuCisJKiBjcC1tZXRob2QuYyAodGVtcGxhdGVfaW5zdGFudGlhdGVfb25jZSk6IENhbGwgaXQuCisKKwkqIGNwLXB0LmMgKGVuZF90ZW1wbGF0ZV9kZWNsKTogQ2F0Y2ggZGVzdHJ1Y3RvciB0ZW1wbGF0ZXMgdGhhdAorCWFyZSBiZWluZyBwYXNzZWQgdGhyb3VnaCB3aXRob3V0IGJlaW5nIGNvbnZlcnRlZCB0byBURU1QTEFURV9ERUNMCisJbm9kZXM7IGNvbnZlcnQgdGhlbSBub3cuICBDb3B5IGFyZ3VtZW50IGxpc3QgZm9yIGZ1bmN0aW9uIHRlbXBsYXRlCisJaW50byBwZXJtYW5lbnQgc3RvcmFnZS4KKwkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogU3VwcGx5IElERU5USUZJRVJfVEVNUExBVEUgZGF0YSBmb3IgbmV3CisJYW5vbnltb3VzIHR5cGUgbmFtZS4KKwkodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBJbXByb3ZlIG1ldGhvZCBsb29rdXAgY29kZS4KKwkodHN1YnN0KTogVXNlIGhhc2ggdGFibGUgYW5kIGJ1aWxkX2NwbHVzXyogZnVuY3Rpb25zIGZvciBidWlsZGluZworCW5ldyBub2RlcyB3aGVuIHBvc3NpYmxlLCBzbyBlcXVhbGl0eSB0ZXN0cyBhcmUgZWFzaWVyLiAgRXh0ZW5kCisJRlVOQ1RJT05fVFlQRSBjYXNlIHRvIGhhbmRsZSBNRVRIT0RfVFlQRSBhcyB3ZWxsLgorCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IERvbid0IGRvIGFueXRoaW5nIGZvciBlcnJvcl9tYXJrX25vZGUuCisJKGRvX3BlbmRpbmdfZXhwYW5zaW9ucyk6IEtlZXAgZXhwYW5zaW9ucyBub3QgdXNlZCBpbiBxdWV1ZSB0byBjaGVjaworCWFnYWluIGxhdGVyLgorCisJKiBjcC10cmVlLmRlZjogRml4IHVwIHNvbWUgY29tbWVudHMgcmVsYXRpbmcgdG8gUFQtcmVsYXRlZCB0eXBlcy4KKworCSogdHJlZS5jIChpbml0X3RyZWVfY29kZXMpOiBOb3cgdm9pZCwgaW4gYWdyZWVtZW50IHdpdGggZGVjbAorCWVsc2V3aGVyZS4KKworTW9uIE9jdCAyOCAyMjowNzo0NCAxOTkxICBKZWZmcmV5IEEgTGF3ICAobGF3IGF0IGIxMTcuc3VwZXIub3JnKQorCisJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUpOiBEZWNsYXJlIGhlcmUKKwlzbyB0aGF0IG91dC0qLmMgY2FuIHNlZSBpdC4KKworCSogdG0tbTY4ay5oIChGSU5BTElaRV9QSUMpOiBOZXcgbWFjcm8uCisJKFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNKTogTmV3IG1hY3JvLiAgRGVmaW5lcyB3aGljaCBhZGRyZXNzCisJcmVnaXN0ZXIgaXMgdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGFibGUgZm9yIFBJQy4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBNYWtlIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGJlCisJZml4ZWQgd2hlbiBnZW5lcmF0aW5nIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUuCisKKwkqIG91dC1tNjhrLmMgKGZpbmFsaXplX3BpYyk6IE5ldyBmdW5jdGlvbi4gIAorCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBJZiBnZW5lcmF0aW5nIHBvc2l0aW9uIGluZGVwZW5kZW50CisJY29kZSBvdXRwdXQgYXNzZW1ibGVyIHRleHQgdG8gbG9hZCB0aGUgcGljX29mZnNldF90YWJsZSByZWdpc3Rlci4KKworTW9uIE9jdCAyOCAxMDowMjozNiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogdG9wbGV2LmMgKG1haW4pOiBJZiAtRyBpcyB1c2VkLCBzZXQgZ19zd2l0Y2hfc2V0IHRvIHRydWUsIGFuZCBzZXQKKwlnX3N3aXRjaF92YWx1ZSB0byBiZSB0aGUgaW50ZWdlciB2YWx1ZSBvZiBpdCdzIGFyZ3VtZW50LCBmb3IgdXNlIGluCisJdGhlIE1JUFMgcG9ydCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0YXRpYyBvciBnbG9iYWwgaXRlbSBnb2VzIGludG8KKwl0aGUgbm9ybWFsIGRhdGEgYXJlYSwgb3IgaW50byB0aGUgc21hbGwgZGF0YSBhcmVhLgorCisJKiBvdXQtbWlwcy5jIChnX3N3aXRjaF9zZXQsIGdfc3dpdGNoX3ZhbHVlKTogRGVsZXRlIHRoZXNlIGdsb2JhbAorCXZhcmlhYmxlcywgc2luY2UgdG9wbGV2LmMgbm93IGRlZmluZXMgdGhlbS4KKworCSogdG0tbWlwcy5oIChFWFRSQV9JTlRfT1BUSU9OUyk6IERlbGV0ZSBtYWNybyB3aGljaCBpcyBubyBsb25nZXIKKwl1c2VkIGluIGludGVybmFsIE9TRiBwYXRjaGVzIHRvIHByb3ZpZGUgLUcgeHggc3VwcG9ydC4KKwkoQVNNX1NQRUMsIENDMV9TUEVDLCBMSU5LX1NQRUMpOiBSZW1vdmUgLUczMiwgc2luY2UgdGhlIG5ldyAtRworCXBhdGNoZXMgdGFrZSBjYXJlIG9mIGl0IG5vdy4KKworCSogdG0tZGVjcm9zZS5oIChBU01fU1BFQywgTElOS19TUEVDKTogUmVtb3ZlIC1HMzIuCisKKwkqIHRtLWRlY3N0YXRuLmggKEFTTV9TUEVDLCBMSU5LX1NQRUMpOiBSZW1vdmUgLUczMi4KKworCSogdG0taXJpcy5oIChBU01fU1BFQywgTElOS19TUEVDKTogUmVtb3ZlIC1HMzIuCisKKwkqIHRtLW1pcHMtYnNkLmggKExJTktfU1BFQyk6IFJlbW92ZSAtRzMyLgorCisJKiB0bS1taXBzLW5ld3MuaCAoQVNNX1NQRUMsIExJTktfU1BFQyk6IFJlbW92ZSAtRzMyLgorCisJKiB0bS1taXBzLXN5c3YuaCAoTElOS19TUEVDKTogUmVtb3ZlIC1HMzIuCisKK01vbiBPY3QgMjggMDc6MTE6MjggMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IERvbid0IGRlbGV0ZSB1bnVzZWQgU0VUcyBpZiB0aGV5IGhhdmUKKwlzaWRlLWVmZmVjdHMuCisKKwkqIE1ha2VmaWxlLmluLCB0LWkzODZzY286IEhhZCBib3RoIExJTUlUX0ggYW5kIExJTUlUU19IOyBsYXR0ZXIKKwlpcyBjb3JyZWN0LgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogTmV3IGFyZ3VtZW50IGB1bmlxdWVfY29weSc7IGlmIG5vbi16ZXJvIGVuc3VyZQorCWVhY2ggY29weSBvZiBgZnJvbScgcmVwbGFjZWQgZ2V0cyBhIHVuaXF1ZSBjb3B5IG9mIGB0bycuCisJUGFzcyBhcmcgdG8gcmVjdXJzaXZlIGNhbGxlcnMuCisJKHRyeV9jb21iaW5lKTogUGFzcyBuZXcgYXJnIHRvIHN1YnN0LgorCisJKiBNYWtlZmlsZS5pbiAoTEFOR1VBR0VTKTogVXNlIGBvYmplY3RpdmUtYycgaW5zdGVhZCBvZiBgY2xhc3MtYycKKwl0byBhdm9pZCBjb25mdXNpb24uCisKKwkqIGdjYy5jICh4bWFsbG9jLCB4cmVhbGxvYyk6IFJlYWxseSBtYWtlIG5vbi1zdGF0aWMuCisKK01vbiBPY3QgMjggMDA6MjE6NTYgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoQ0MxX1NQRUMpOiBDb252ZXJ0IC1nbGluZSBpbnRvIC1nMS4KKworU3VuIE9jdCAyNyAxNzoxNTo0OCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHNwaWxsX2hhcmRfcmVnKTogUmV3b3JrIGNvZGUgdGhhdCByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAorCXJlZ19jbGFzc19zdXBlcmNsYXNzZXNbaV1bMF0gPT0gaSwgc2luY2UgaXQgaXNuJ3QgdHJ1ZSEKKworU3VuIE9jdCAyNyAwNjoxNToyNCAxOTkxICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGNvbmZpZ3VyZTogQWx3YXlzIHJlbW92ZSBhbnkgZmlsZXMgYmVmb3JlIHdlIHdyaXRlIHRoZW0gaW4gY2FzZQorCXRoZSBvbGQgY29weSB3YXMgcmVhZC1vbmx5LgorCisJKiBNYWtlZmlsZS5pbiAobWFuZXh0KTogTm93IGp1c3QgZXh0ZW5zaW9uIHdpdGhvdXQgdGhlIHBlcmlvZC4KKwkobWFuZGlyKTogRGVmYXVsdCB0byBpbmNsdWRlIG1hbmV4dC4KKwkoaW5zdGFsbC1tYW4pOiBBZGp1c3QgdG8gbmV3IGRlZmluaXRpb24gb2YgbWFuZXh0LgorCSh1bmluc3RhbGwpOiBSZW1vdmUgcHJvdG9pemUuMSBhbmQgdW5wcm90b2l6ZS4xIGZyb20gbWFuZGlyLgorCisJKiBnZW5lbWl0LmMgKGdlbl9leHApOiBXcml0ZSBpbnRlZ2VyIHVzaW5nICV1IGluc3RlYWQgb2YgJWQgdG8KKwlhdm9pZCB3YXJuaW5ncyBmcm9tIHNvbWUgY29tcGlsZXJzIHdoZW4gbW9zdCBuZWdhdGl2ZSBpbnQgaXMgd3JpdHRlbi4KKworCSogY2NjcC5jOiBNYWtlIHZhcmlhYmxlcyBub3QgdXNlZCBvdXRzaWRlIHRoaXMgZmlsZSBzdGF0aWMuCisJKG1haW4sIGxpbmVfdG9fZXJyb3IsIHhtYWxsb2MsIHhyZWFsbG9jLCB4Y2FsbG9jKTogQWRkIG1pc3NpbmcgcmV0dXJuCisJc3RhdGVtZW50cyAoaW4gdW5yZWFjaGFibGUgcGF0aHMpLgorCSh4bWFsbG9jLCB4cmVhbGxvYywgeGNhbGxvYywgc2F2ZXN0cmluZyk6IE1ha2UgU0laRSBhcmcgdW5zaWduZWQuCisJCitTdW4gT2N0IDI3IDA2OjE0OjQ1IDE5OTEgIEplZmZyZXkgQSBMYXcgIChsYXcgYXQgYjExNS5zdXBlci5vcmcpCisKKwkqIHRtLW02OGsuaCAoU0VMRUNUX1JUWF9TRUNUSU9OKTogTmV3IG1hY3JvLiAgVXNlZCB0byBmb3JjZQorCXN5bWJvbGljIG9iamVjdHMgaW4gdGhlIGNvbnN0YW50IHBvb2wgaW50byB0aGUgcmVhZC13cml0ZSBkYXRhCisJc2VjdGlvbiB3aGVuIGdlbmVyYXRpbmcgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZS4KKworCSogcmVjb2cuYyAoZ2VuZXJhbF9vcGVyYW5kLCBpbW1lZGlhdGVfb3BlcmFuZCwgbm9ubWVtb3J5X29wZXJhbmQpOgorCVVzZSBMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1AgdG8gcmVqZWN0IGNvbnN0YW50cyB3aGljaCBhcmUgbm90CisJdmFsaWQgd2hlbiBnZW5lcmF0aW5nIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyBub3Qgd2luIGluICdzJywgJ2knLCBvciAnZycgY2FzZXMKKwlpZiB0aGUgY29uc3RhbnQgZG9lcyBub3Qgc2F0aXNmeSBMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1AuCisKKwkqIHRtLW02OGsuaCAoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogTmV3IG1hY3JvLgorCisJKiBvdXQtbTY4ay5jIChzeW1ib2xpY19vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLiBDb3BpZWQgZnJvbQorCXRtLXNwYXJjLmguIAorCisJKiBnY2MudGV4aW5mbzogRG9jdW1lbnQgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QLgorCitTYXQgT2N0IDI2IDA3OjUxOjQwIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChtb3ZzaV91c3cpOiBSZW1vdmUgaW52YWxpZCAnJicgY29uc3RyYWludCBvbiBhIG1lbW9yeQorCWFkZHJlc3MuCisKK1NhdCBPY3QgMjYgMDc6MTY6MTUgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEJ1aWxkIGxhYmVsX3ZhbHVlX2xpc3QgYXMgbGlzdCBvZgorCUNPREVfTEFCRUxzLCBub3QgTEFCRUxfUkVGcy4KKworCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSk6IENhbGwgZm9sZCBvbiByZXN1bHQKKwlvZiBidWlsZDEgY2FsbCB0aGF0IGNvbnZlcnRzIGludGVnZXIgdG8gcHJvcGVyIG1vZGUuCisKKwkqIHJ0bC5oICh1bnNpZ25lZF9jb25kaXRpb24sIHNpZ25lZF9jb25kaXRpb24pOiBBZGQgZGVmaW5pdGlvbjsKKwlmdW5jdGlvbnMgd2VyZSBwcmV2aW91c2x5IGFkZGVkIHRvIGp1bXAuYy4KKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbik6IFVzZSB1bnNpZ25lZF9jb25kaXRpb24gdG8gc2ltcGxpZnkKKwlsYXN0IGNoYW5nZS4KKworU2F0IE9jdCAyNiAwNjo0ODo1OSAxOTkxICBKZWZmcmV5IEEgTGF3CShsYXcgYXQgYjExNS5zdXBlci5vcmcpCisKKwkqIHRtLXN1bjIuaCwgdG0tc3VuMy5oIChBU01fU1BFQyk6IFBhc3MgIi1rIiB0byB0aGUgYXNzZW1ibGVyIGlmCisJLWZwaWMgb3IgLWZQSUMuCisKK0ZyaSBPY3QgMjUgMjA6NDM6NTQgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoQ0MxX1NQRUMpOiBSZW1vdmUgc3BlY2lhbCBydWxlcyBmb3IgLWcwLCAtZzEsIGV0Yy4sIG5vdworCXRoYXQgR0NDIHN1cHBvcnRzIHRoZXNlIGRpcmVjdGx5LgorCisJKiBjb25maWd1cmUgKGRlYy1taXBzLW9zZik6IERFQ3N0YXRpb24gcnVubmluZyBPU0Yvcm9zZSB1c2VzCisJdC1kZWNyb3NlLCBub3QgdC1taXBzLgorCisJKiB4LWRlY3Jvc2UgKENPRkZfQ0MsIENPRkZfQ0ZMQUdTLCBXQVJOSU5HUyk6IERlbGV0ZS4KKwkobGliZGlyLCBiaW5kaXIsIG1hbmRpcik6IFB1dCBHQ0MgMiBpbiB0aGUgL3Vzci9jY3MvZ2NjIHRyZWUuCisKKwkqIHgtbWlwcyAoY29tbWVudCk6IERlbGV0ZSBhIGNvbW1lbnQgYWJvdXQgY3Jvc3MgY29tcGlsZXJzIHRoYXQgaXMKKwlubyBsb25nZXIgdHJ1ZS4KKworCSogdC1kZWNyb3NlIChjb2ZmLW9ic3RhY2subyk6IERlbGV0ZSBydWxlIHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWQuCisKK0ZyaSBPY3QgMjUgMTg6NDY6NTEgMTk5MSAgTWFyayBFaWNoaW4gIChlaWNoaW4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVtLmMgKGNwLWRlbWFuZ2xlKTogYWRkZWQgc3VwcG9ydCBmb3IgdGVtcGxhdGVzLCBzdGF0aWMKKwlkYXRhLCBhbmQgdGhlIG5ldyAoY29ycmVjdCkgbWFuZ2xpbmcgZm9yIGRlc3RydWN0b3JzLgorCitGcmkgT2N0IDI1IDE2OjE4OjE4IDE5OTEgIE1hcmsgRWljaGluICAoZWljaGluIGF0IHR3ZWVkbGVkdW1iZXIuY3lnbnVzLmNvbSkKKworICAgICAgICAqIGNwLWRlY2wyLmM6IChncm9rY2xhc3Nmbik6IGRlc3RydWN0b3IgbmFtZXMgKnNob3VsZCogY29udGFpbgorICAgICAgICB0aGUgbGVuZ3RoOyBvdGhlcndpc2UsIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisgICAgICAgIGRlc3RydWN0b3IgZm9yIGEgY2xhc3Mgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAndCcgYW5kIGEgZGVzdHJ1Y3RvcgorICAgICAgICBmb3IgYW4gaW5zdGFuY2Ugb2YgYSB0ZW1wbGF0ZSBjbGFzcy4KKworRnJpIE9jdCAyNSAwMjoxNToxMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFNZU0NBTExTLmMsIHByb3RvaXplLmM6IENoYW5nZXMgZnJvbSByZmcuCisJd2FpdGluZyBmb3IgcmVhbCBjaGFuZ2Vsb2cgZW50cmllcyBmcm9tIHJmZy4KKworCSogZ2NjLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogTm8gbG9uZ2VyIHN0YXRpYy4KKworVGh1IE9jdCAyNCAxOToyMTowNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUpOgorCVVzZSBidWlsZDEgcmF0aGVyIHRoYW4gY29udmVydCwgdG8gYXZvaWQgd2FybmluZ3MuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfbGluZSk6IEZpeCBpZi1zY29wZSBmb3IgREJYIGZtdC4KKworVGh1IE9jdCAyNCAxMzoyOTozNCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZ2NjLmMgZ2VuKi5jOiBEb24ndCBtYWtlIGZhbmN5X2Fib3J0IHN0YXRpYy4KKworVGh1IE9jdCAyNCAxMjowNzoyMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbik6IFdoZW4gbmFycm93aW5nIGEgY29tcGFyaXNvbgorCWFuZCByZW1vdmluZyBBTkRzLCBtYWtlIGl0IHVuc2lnbmVkLgorCitUaHUgT2N0IDI0IDA4OjAyOjA0IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGJpbmRpbmdfbGV2ZWxzX3NhbmUpOiBOZXcgZnVuY3Rpb24sIHRlc3RzIHRoYXQgc3RhY2sKKwlvZiBiaW5kaW5nIGxldmVscyBpcyBjb25zaXN0ZW50LiAgQXJndW1lbnQgcHJvdmlkZXMgZXh0cmEKKwlpZGVudGlmaWNhdGlvbiBmb3IgY2FsbCBzaXRlLCBpbiBjYXNlIGNvbXBpbGVyIG9wdGltaXplcyB0b28gd2VsbC4KKwlJZiBQQVJBTk9JRCBpcyBub3Qgc2V0LCBkb2VzIG5vdGhpbmcuCisJKHB1c2hfYmluZGluZ19sZXZlbCwgcG9wX2JpbmRpbmdfbGV2ZWwpOiBOb3cgZnVuY3Rpb25zLCBmb3IgZWFzaWVyCisJZGVidWdnaW5nLiAgSW5saW5lZCB1bmRlciBHTlUgQyBpZiBub3QgUEFSQU5PSUQuCisJKFBVU0hfQklORElOR19MRVZFTCwgUE9QX0JJTkRJTkdfTEVWRUwpOiBJbnZva2UgZnVuY3Rpb25zLgorCShwdXNoX3RvX3RvcF9sZXZlbCk6IFVzZSB0eXBlLXNoYWRvd2VkIHNsb3RzIHRvIHVud2luZAorCUlERU5USUZJRVJfVFlQRV9WQUxVRSBiYWNrIHRvIHRvcCBsZXZlbC4KKwkoc3RhcnRfZGVjbCk6IFdoZW4gcHJvY2Vzc2luZyBhIHRlbXBsYXRlIGRlY2wsIHNob3VsZG4ndCBuZWVkIHRvCisJY2hlY2sgdXNlc190ZW1wbGF0ZV9wYXJtcy4gIEZvciBtZXRob2RzLCBtb2RpZnkgYXJnIGxpc3QgdG8gaW5jbHVkZQorCWB0aGlzJy4gIERvbid0IHNldCBjb250ZXh0IG9mIHRlbXBsYXRlLiAgVXNlIHBlcm1fdHJlZV9jb25zIHdoZW4KKwlidWlsZGluZyBtZW1iZXJzIGxpc3QgZm9yIGNsYXNzIHRlbXBsYXRlLgorCShncm9rZGVjbGFyYXRvcik6IENoZWNrICJmcmllbmQiIGZsYWcgYmVmb3JlIGNhbGxpbmcKKwlnbG9iYWxpemVfbmVzdGVkX3R5cGUuICBCdWlsZCBhIG1ldGhvZCB0eXBlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaGFzCisJYSBjb250ZXh0LgorCisJKiBjcC1wdC5jIChlbmRfdGVtcGxhdGVfZGVjbCk6IElmIHRlbXBsYXRlIGhhcyBub24tbnVsbCBjb250ZXh0LAorCWNoYWluIGl0IG9mZiBvZiB0aGUgY29udGFpbmluZyBjbGFzcywgcmF0aGVyIHRoYW4gdXNpbmcgcHVzaGRlY2wuCisJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogSW5zdGFudGlhdGUgYWxsIHRoZSBtZW1iZXIgdGVtcGxhdGVzCisJaGFuZ2luZyBvZmYgdGhlIGNsYXNzIHRlbXBsYXRlLiAgQWxzbywgc2ltcGxpZnkgc29tZSBjb2RlIGluIHRoZQorCWNhc2Ugd2hlcmUgc2V0dXBfcGFyc2UgaXMgMC4KKwkodHN1YnN0KTogQ2hlY2sgZm9yIHNldmVyYWwgY29tbW9uIHZhbHVlcyB0aGF0IHdvbid0IGJlIG1vZGlmaWVkIGJ5CisJc3Vic3RpdHV0aW9ucy4KKwkodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBEb24ndCByZXR1cm4gdHlwZSBwYXNzZWQgaWYgaXQgaGFzIGEKKwlub24tbnVsbCBjb250ZXh0IHRoYXQgbWlnaHQgbmVlZCBmaXhpbmcuICBQcm9jZXNzIHRoYXQgY29udGV4dCB3aGlsZQorCWJ1aWxkaW5nIHVwIHRoZSBuZXcgZGVjbCBub2RlOyB1c2UgaXQgdG8gbm90aWZ5IGJ1aWxkX2RlY2xfb3ZlcmxvYWQKKwl0aGF0IHdlJ3ZlIGdvdCBhIG1ldGhvZCByYXRoZXIgdGhhbiBhIGZ1bmN0aW9uLgorCSh0c3Vic3QsIGNhc2UgTUVUSE9EX1RZUEUpOiBIYW5kbGUgbGlrZSBGVU5DVElPTl9UWVBFOyBlbmhhbmNlIHRoYXQKKwljYXNlIHRvIGhhbmRsZSBUWVBFX01FVEhPRF9CQVNFVFlQRSB3aGVuIHNldC4KKwkodW5pZnkpOiBJbmNyZW1lbnQgdmFsdWUgcG9pbnRlZCB0byBieSBuc3Vic3RzLCBub3QgdGhlIHBvaW50ZXIKKwlpdHNlbGYuCisJKGRvX3BlbmRpbmdfZXhwYW5zaW9ucyk6IE1ldGhvZCBjb250ZXh0IGlzIGluIERFQ0xfQ09OVEVYVCwgbm90CisJREVDTF9DTEFTU19DT05URVhULgorCisJKiBjcC1sZXguYyAoZG9faWRlbnRpZmllcik6IERvbid0IHRyeSBsb29raW5nIHVwIGZpZWxkcyBpbiBiYXNlCisJY2xhc3NlcyBvZiBVTklOU1RBTlRJQVRFRF9QX1RZUEUuCisKKwkqIGNwLXBhcnNlLnkgKHByaW1hcnkpOiBDYWxsIHJlcXVpcmVfY29tcGxldGVfdHlwZSBvbmx5IGZvcgorCUNBTExfRVhQUiBub2RlcyBvZiB0eXBlcyBvdGhlciB0aGFuIHZvaWQuCisJKHRlbXBsYXRlX3R5cGUpOiBEb24ndCBjYWxsIElERU5USUZJRVJfVFlQRV9WQUxVRSBvbgorCWVycm9yX21hcmtfbm9kZS4KKworCSogY3AtcHRyZWUuYyAocHJpbnRfbGFuZ19kZWNsKTogRm9yIFVOSU5TVEFOVElBVEVEX1BfVFlQRSwgc2hvdworCXRlbXBsYXRlIGFzIHdlbGwgYXMgcGFyYW1ldGVycy4KKworCSogY3AtdHJlZS5oIChERUNMX1RFTVBMQVRFXyosIFVQVF8qKTogTmV3IGFjY2Vzc29yIG1hY3JvcyBmb3IKKwlURU1QTEFURV9ERUNMIGFuZCBVTklOU1RBTlRJQVRFRF9QX1RZUEUgbm9kZXMuICBBbGwgKG1vc3Q/KSB1c2VzCisJZXhjZXB0IGZvciBub2RlIGNyZWF0aW9uIGNoYW5nZWQgdG8gdXNlIHRoZXNlLgorCSogY3AtdHJlZS5kZWY6IFVwZGF0ZWQgY29tbWVudHMgZm9yIHRoZXNlIG5vZGUgdHlwZXMuCisKKwkqIGNwLXB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgQUREUl9FWFBSLgorCShlbmRfdGVtcGxhdGVfZGVjbCk6IEZvciBmdW5jdGlvbiB3aXRoIG5vbi1udWxsIGNvbnRleHQsIHBvcCBjbGFzcworCWJpbmRpbmcgbGV2ZWwuCisKK1RodSBPY3QgMjQgMDY6NTc6MjggMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5tZCwgcm9tcC5tZCwgcnM2MDAwLm1kIChtb3ZkaSwgbW92ZGYsIG1vdnRpKTogSGFuZGxlIGNhc2Ugb2YKKwlyZWctcmVnIGNvcHkgd2l0aCBvdmVybGFwcGluZyByZWdpc3RlcnMgY29ycmVjdGx5LgorCisJKiBvdXQtcnM2MDAwLmMgKGNjcl9iaXQsIGNhc2UgTkUpOiBGaXggdHlwbyBpbiBiaXQgbnVtYmVyLgorCShvdXRwdXRfZXBpbG9nKTogTXVzdCByZXN0b3JlIHN0YWNrIHVzaW5nIGJhY2tjaGFpbiBpZiBhbGxvY2EgY2FsbGVkLgorCisJKiByb21wLm1kLCByczYwMDAubWQgKGV4dGVuZHh4eXkyLCB6ZXJvX2V4dGVuZHh4eXkyKTogVXNlIERFRklORV9FWFBBTkQKKwl0byBmb3JjZSBvcGVyYW5kIHRvIHJlZ2lzdGVyOyBERUZJTkVfSU5TTiBhbGxvd3MgbWVtb3J5IChiZXR0ZXIgY3NlKS4KKworCSogcnM2MDAwLm1kIChmZnNzaTIpOiBOZXcgcGF0dGVybnMuCisJKG1hc2tpcik6IEFkZCBwYXR0ZXJucyB0byB1c2UgbWFza2lyIGluc3RydWN0aW9ucy4KKworCSogdG0tYTI5a3VuaXguaCAoVEFSR0VUX0RFRkFVTFQsIENQUF9TUEVDKTogRGVmYXVsdCB0byAyOTA1MC4KKworCSogdG0tcnM2MDAwLmggKExJTktfU1BFQyk6IEFkZCAtYm5vZGVsY3NlY3QuCisJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IERlbGV0ZSBrbHVkZ2UgdGhhdCBkaWRuJ3QgYWxsb3cgREltb2RlIGluIHJlZyAzMQorCWFuZCBUSW1vZGUgaW4gMjktMzE7IHRoZSBidWcgd2FzIGZpeGVkIGVsc2V3aGVyZS4KKworV2VkIE9jdCAyMyAxNzo0ODo0MyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogSWYgYW4gaW5zbiBkb2Vzbid0IG1hdGNoLCBjaGVjayBmb3IgY2FzZQorCXdoZXJlIGZpcnN0IFNFVCdzIHJlc3VsdCBpc24ndCB1c2VkOyBwcmV2aW91c2x5IG9ubHkgY2hlY2tlZCBzZWNvbmQuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBXaGVuIHdlIHN1YnN0aXR1dGUgaW50byBhIENPTVBBUkUsIGNoZWNrCisJU0VMRUNUX0NDX01PREUgdG8gc2VlIGlmIHdlIHNob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBtb2RlIG9mIHRoZQorCUNPTVBBUkUgYW5kIGl0cyByZXN1bHQuCisKK1dlZCBPY3QgMjMgMTY6Mzg6MjYgMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogZ251bGliMi5jIChfX2FzaHJkaTMpOiBDb21wdXRlIHNpZ24gZXh0ZW5zaW9uIHNoaWZ0IGNvdW50IGZyb20KKwltYWNoaW5lIHdvcmQgc2l6ZSBpbnN0ZWFkIG9mIHVzaW5nIDMxLgorCitXZWQgT2N0IDIzIDE0OjI1OjA0IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB0bS1taXBzLmggKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IFVubGVzcyBvdGhlcndpc2UgZGVmaW5lZCwKKwlzZXQgdG8gU0RCX0RFQlVHLgorCisJKiB0bS1kZWNyb3NlLmggKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IERlZmluZSB0byBEQlhfREVCVUcuCisKKwkqIG91dC1taXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBEb24ndCBvdmVycmlkZSBkZWJ1Z2dlciBjaG9pY2Ugbm93CisJdGhhdCBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgaXMgcHJvdmlkZWQuCisKK1dlZCBPY3QgMjMgMDc6MjU6MzIgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sL0ZVTkNUSU9OX0RFQ0wsIHNkYm91dF90b3BsZXZlbF9kYXRhLAorCXNkYm91dF9lbmRfZXBpbG9ndWUpOiBVc2UgREVDTF9BU1NFTUJMRVJfTkFNRSB0byBhdm9pZCBsaW5rLXRpbWUKKwltdWx0aXBsZSBkZWZpbml0aW9ucy4KKworVHVlIE9jdCAyMiAxNTowNjozMSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEZvciBub3csIHdlIG11c3QgYWx3YXlzIGhhdmUgYSBmcmFtZSBwb2ludGVyCisJaWYgYSBmdW5jdGlvbiBjYWxscyBhbGxvY2EgYW5kIEVYSVRfSUdOT1JFX1NUQUNLIGlzIG5vbi16ZXJvLgorCisJKiBjc2UuYyAoaW5zZXJ0X3JlZ3MpOiBEb24ndCBtYWtlIG5ldyBxdWFudGl0eSBmb3IgdGhlIHJlZ2lzdGVyIGluCisJYSBTVUJSRUcuCisJKG1lcmdlX2VxdWl2X2NsYXNzZXMpOiBEb24ndCBpbnZhbGlkYXRlIHRoZSByZWdpc3RlciBpbnNpZGUgYSBTVUJSRUcuCisJKGNhbm9uX2hhc2gsIGNhc2UgU1VCUkVHKTogUmVtb3ZlIGNvZGUgdG8gdHJlYXQgU1VCUkVHcyBsaWtlIFJFR3MuCisKK1R1ZSBPY3QgMjIgMTA6MjU6MjkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHRtLW04OGtkZ3V4LmggKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IFVzZSBpdC4KKwkqIHRtLW04OGsuaCAoT1ZFUlJJREVfT1BUSU9OUyk6IERvbid0IG92ZXJyaWRlIHdyaXRlX3N5bWJvbHMuCisKKwkqIG91dC1tODhrLmMgKG04OGtfb3V0cHV0X3twcm9sb2d1ZSxlcGlsb2d1ZX0pOiBSZW5hbWVkLgorCitUdWUgT2N0IDIyIDAwOjUxOjQ4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYysrOiBOZXcgc2hlbGwgc2NyaXB0LgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBUcmVhdCAuaWkgZmlsZXMgYXMgY3BwJ2QgQysrLgorCisJKiB2YXJhc20uYyAobWFrZV9mdW5jdGlvbl9ydGwpOiBEb24ndCBhbHRlciBERUNMX0FTU0VNQkxFUl9OQU1FLgorCisJKiB0b3BsZXYuYyAobWFpbik6IFVzZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgaWYgc3VwcG9ydAorCW1vcmUgdGhhbiBvbmUgZm9ybWF0LgorCitNb24gT2N0IDIxIDIzOjA4OjAyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRml4IGVycm9yIG1lc3NhZ2UgZm9yIGxvbmcgZmxvYXQuCisKK01vbiBPY3QgMjEgMTY6NTU6MzEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3B0YWJzLmMgKGFkZF9lcXVhbF9ub3RlKTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfYmlub3ApOiBEZWxldGUgc29tZSBvYnNvbGV0ZSwgdHVybmVkLW9mZiBjb2RlLgorCVVzZSBHRVRfUlRYX0NMQVNTIHRvIHNlZSBpZiBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS4KKwlDYWxsIGFkZF9lcXVhbF9ub3RlIGlmIHdlIG1ha2UgYSBtdWx0aS1pbnNuIHNlcXVlbmNlOyBpZiBpdCBmYWlscywKKwlyZWRvIHRoZSBvcGVyYXRpb24gd2l0aG91dCBvdXIgdGFyZ2V0LgorCUluIG11bHRpLXdvcmQgY2FzZXMsIGRvbid0IGFsbG93IFRBUkdFVCB0byBiZSB0aGUgc2FtZSBhcyBhbiBpbnB1dC4KKwkoZXhwYW5kX3Vub3ApOiBBbGxvdyBvcGVyYXRpb24gdG8gZmFpbC4KKwlDYWxsIGFkZF9lcXVhbF9ub3RlIGFuZCBhbGxvdyBmYWlsdXJlLCBsaWtlIGluIGV4cGFuZF9iaW5vcC4KKwlJbiBtdWx0aS13b3JkIGNhc2UsIGRvbid0IGFsbG93IFRBUkdFVCB0byBiZSBPUDAuCisJKGVtaXRfdW5vcF9pbnNuKTogVXNlIGFkZF9lcXVhbF9ub3RlOyBpZ25vcmUgaXRzIGZhaWx1cmUgaGVyZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCwgZXhwYW5kX2ZpeCk6IEluIGNhc2VzIHdoZW4gd2Ugd2lsbCBqdW1wLAorCWVuc3VyZSB3ZSBjYWxsIGVtaXRfcXVldWUgYmVmb3JlIHByb3RlY3RfZnJvbV9xdWV1ZS4KKwlFbGltaW5hdGUgcmVkdW5kYW50IGNhbGxzIHRvIHByb3RlY3RfZnJvbV9xdWV1ZSBhbmQgZm9yY2Vfbm9uX21lbS4KKworCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3RhcmdldCk6IERvbid0IHRha2UgYW4gaW5zbiBmcm9tCisJdGhlIGZhbGx0aHJvdWdoIHRocmVhZCBvZiBhbiBhbm51bGxlZCBicmFuY2ggaW5zbi4KKworTW9uIE9jdCAyMSAxNjo1NTowOCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogY29uZmlndXJlIChtODhrIHRhcmdldHMpOiBDb21wbGV0ZSBsYXN0IGNoYW5nZS4KKworTW9uIE9jdCAyMSAxNjowNjoyNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFdoZW4gbWFraW5nIGNvcHkgb2YgZnJhbWUsCisJcm91bmQgc2l6ZSB0byBrZWVwIHN1YnN0aXR1dGVkIGZyYW1lIHBvaW50ZXIgYWxpZ25lZC4KKwkoQ0VJTF9ST1VORCk6IE5ldyBtYWNyby4KKworTW9uIE9jdCAyMSAxNToxNjoxNyAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogdG0tbWlwcy5oIChHUF9SRUdfT1JfUFNFVURPX05PTlNUUklDVF9QKTogTmV3IG1hY3JvIGZvcgorCVJFR19PS19GT1Jfe0JBU0UsSU5ERVh9X1AgaW4gbm9uIHN0cmljdCBtb2RlLiAgRml4IHR5cG9zIGluIHRoZQorCXByZXZpb3VzIGNoYW5nZS4KKwkoR1BfUkVHX09SX1BTRVVET19QKTogUmVuYW1lIHRvIEdQX1JFR19PUl9QU0VVRE9fU1RSSUNUX1AuCisJKFJFR19PS19GT1JfQkFTRV9QKTogVXNlIEdQX1JFR19PUl9QU0VVRE9fTk9OU1RSSUNUX1AgaWYgbm9uIHN0cmljdC4KKwkoUkVHX09LX0ZPUl9JTkRFWF9QKTogVXNlIEdQX1JFR19PUl9QU0VVRE9fTk9OU1RSSUNUX1AgaWYgbm9uIHN0cmljdC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogSW5kaWNhdGUgaWYgc3RyaWN0IGNoZWNraW5nIGlzIGJlaW5nCisJdXNlZCBpZiAtbWRlYnVnYiB0cmFjaW5nLgorCitNb24gT2N0IDIxIDE1OjA4OjE1IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoKi5vKTogQWRkIGluc24tY29kZXMuaCB0byBhbGwgbGlzdHMgdXNpbmcgZXhwci5oLgorCShkd2FyZm91dC5vKTogQWRkIGR3YXJmLmgsIHJlbG9hZC5oLCBvdXRwdXQuaCwgYW5kIGluc24tY29uZmlnLmguCisKKwkqIGMtdHJlZS5oIChUWVBFX0FDVFVBTF9BUkdfVFlQRVMpOiBOZXcgbWFjcm8gZm9yIGxpc3Qgb2YgYWN0dWFsCisJdHlwZXMuCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IENvbXB1dGUgVFlQRV9BQ1RVQUxfQVJHX1RZUEVTIGlmIGEKKwlwcm90b3R5cGUgaXMgbm90IHByZXNlbnQuICBEZWxldGUgb2xkIG1ldGhvZC4KKwkoZHVwbGljYXRlX2RlY2xzKTogUHJvdmlkZSBiZXR0ZXIgZGlhZ25vc3RpY3MgaWYgYSBwcm90b3R5cGUKKwlmb2xsb3dzIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4KKworCSogbTg4ay5tZCAoZ2VuX2RpdnNpMyk6IERlbGV0ZSBSRUdfRVFVQUwgd29ya2Fyb3VuZC4KKwkqIHQtbTg4a3ssbHVuYSxzeXN2NH06IFRhcmdldCBtYWtlZmlsZSBwb3J0aW9uIChmcm9tIE1pa2UgU3R1bXApLgorCSogeC1tODhreyxkZ3V4LGx1bmEsc3lzdjR9OiBDb3JyZXNwb25kaW5nIGRlbGV0aW9ucy4KKwkqIHt0bSx0LHh9LW04OGtzeXN2NDogUmVuYW1lZCBmcm9tIG04OGtzdnI0LiAgRGVsZXRlZCB4bS1tODhrc3ZyNC4KKwkqIHt0bSx4bX0tbTg4a3N5c3YzOiBSZW5hbWVkIGZyb20gdjg4cjMyLgorCSogY29uZmlndXJlOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisKKwkqIHRtLW04OGsuaCAoQVNNX09VVFBVVF97Q09OU1RSVUNUT1IsREVTVFJVQ1RPUn0pOiBPdXRwdXQgdG8KKwkuY3RvcnMvLmR0b3JzIHNlY3Rpb25zLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW04ODAwMCwgLW04ODEwMCwgYW5kIC1tODgxMTAuICBSZXBsYWNlCisJREcvVVggTVhEQiBvcHRpb25zIHdpdGggU1VCVEFSR0VUX1NXSVRDSEVTIG1hY3JvLgorCSogdG0tbTg4a2RndXguaCAoU1VCVEFSR0VUX1NXSVRDSEVTLCBBU01fU1BFQywgQVNNX0ZJUlNUX0xJTkUpOgorCVB1dCBNWERCIG9wdGlvbnMgaGVyZSBjaGFuZ2luZyAtbWR3YXJmIHRvIC1tc3RhbmRhcmQuCisKK1N1biBPY3QgMjAgMDY6Mzk6NTQgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uLCBjYXNlIFBMVVMpOiBPbmx5IGRvIHNpbXBsaWZpY2F0aW9uCisJZm9yIGVxdWFsaXR5IGNvbXBhcmlzb24gZHVlIHRvIG92ZXJmbG93IHByb2JsZW1zLgorCisJKiBnZW4qLmM6IFJlbW92ZSAidm9pZCAqIiBhbmQgdXNlcyBvZiBzaXplX3QgYWRkZWQgYnkgcmVjZW50IGNoYW5nZS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IElmICImIiBnaXZlbiB3aXRob3V0IGFueSByZWdpc3RlcnMsIAorCXR1cm4gb2ZmIGVhcmx5Y2xvYmJlciwgaW4gYWRkaXRpb24gdG8gZ2l2aW5nIGVycm9yLgorCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VfR0NDKTogRGVsZXRlZC4KKwkoU1RBR0VTVFVGRik6IEFkZCBnY2MgKGZyb20gU1RBR0VfR0NDKSBhbmQgZ2NjLWNyb3NzLgorCitTdW4gT2N0IDIwIDA0OjM3OjIxIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZm5kZWNsKTogVXNlIERFQ0xfTkFNRSwgbm90IERFQ0xBUkFUT1IgYXQgZW5kIG9mCisJZnVuY3Rpb24sIHNpbmNlIERFQ0xfTkFNRSBtYXkgYmUgZGlmZmVyZW50IGlmIGl0J3MgYW4gb3BlcmF0b3IgbmFtZS4KKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90byk6IFRlc3QgaWYgUEFSRU5UIGlzIFRSRUVfVkVDCisJYmVmb3JlIHRlc3RpbmcgSVNfQUdHUl9UWVBFLgorCitTdW4gT2N0IDIwIDAwOjQwOjQ3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGxpbmtfY29tbWFuZF9zcGVjKTogLWNvbGxlY3QgY29udmVydHMgdG8gLWMuCisKKwkqIHRvcGxldi5jIChtYWluKTogU3VwcG9ydCAtZ3N0YWJzIGFuZCAtZ2NvZmYuICBGaXggYXJncyB0byBzdHJuY21wLgorCitTYXQgT2N0IDE5IDIxOjUxOjAzIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmM6IFVzZSBjb25zdF90cnVlX3J0eCBpbnN0ZWFkIG9mIGNvbnN0MV9ydHguCisJKGRlbGV0ZV9zY2hlZHVsZWRfanVtcCk6IERvbid0IGRlbGV0ZSBhbiBpbnNuIHRoYXQgc2V0cyBDQzAgaWYgaXQKKwloYXMgYSBzaWRlLWVmZmVjdC4KKwkodXBkYXRlX2Jsb2NrKTogQWRkIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yIHBhcmFtZXRlciBXSEVSRS4KKwkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IFN0b3Agc2VhcmNoIGlmIHdlIGZpbmQgYW4gaW5zbiB0aGF0IHdlCisJY2FuJ3QgcHV0IGludG8gdGhlIGRlbGF5IHNsb3QgdW5sZXNzIHdlIG93biB0aGUgdGhyZWFkLgorCitTYXQgT2N0IDE5IDE3OjMwOjIzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB0bS1taXBzLmggKEdQX1JFR19PUl9QU0VVRE9fUCk6IE5ldyBtYWNybyB0byBtYWtlIHN1cmUgYSByZWcgb3IKKwlwc2V1ZG8gcmVnIGR1cmluZyByZWxvYWQgd2lsbCBldmVudHVhbGx5IGJlIGEgR1AgcmVnaXN0ZXIgZm9yIHVzZSBhcworCWEgYmFzZSBvciBpbmRleCByZWdpc3Rlci4gIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYSBGUCByZWdpc3RlcgorCWNvdWxkIGJlIHVzZWQgYXMgYSBiYXNlIG9yIGluZGV4IHJlZ2lzdGVyIGluIHNvbWUgY2FzZXMgYWZ0ZXIKKwljb252ZXJ0IGZyb20gZmxvYXRpbmcgcG9pbnQgdG8gaW50ZWdlciB3YXMgZG9uZS4KKwkoUkVHTk9fT0tfRk9SX0JBU0VfUCwgUkVHTk9fT0tfRk9SX0lOREVYX1ApOiBVc2UgR1BfUkVHX09SX1BTRVVET19QLgorCShSRUdfT0tfRk9SX0JBU0VfUCwgUkVHX09LX0ZPUl9JTkRFWF9QKTogSW4gdGhlIG5vbiBzdHJpY3QgdmVyc2lvbiwKKwlkb24ndCBhbGxvdyBoYXJkIEZQIHJlZ2lzdGVycyBldmVyLgorCitTYXQgT2N0IDE5IDExOjU5OjU1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG0tc3VuMy5oLCB0bS1zcGFyYy5oIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOgorCUNoZWNrIGZvciBUZGF0YSBhcyB3ZWxsIGFzIHRhcmdldC4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgd2FybiBmb3IgYXJyYXkgb2YgaW5jb21wbGV0ZSBlbHQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBGb3IgSU5ESVJFQ1RfUkVGLCBkb24ndCBzZXQgdW5jaGFuZ2luZyBiaXQuCisJKiBjLXR5cGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBEbyBzZXQgVFJFRV9VTkNIQU5HSU5HIGlmIG5lYy4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFdhcm5pbmcgb3IgZXJyb3IgZm9yIG1pc3VzZSBvZiBgJicuCisJKiB0b3BsZXYuYyAod2FybmluZ19mb3JfYXNtKTogTmV3IGZ1bmN0aW9uLgorCisJKiB0LWkzODZzY286IE5ldyBmaWxlLgorCSogeC1pMzg2c2NvOiBBZGQgLURpMjg2IHRvIENDLCBPTERDQy4KKwkoTElNSVRfSCk6IE1vdmVkIHRvIHQtaTM4NnNjby4KKworU2F0IE9jdCAxOSAwOTowODoxMSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnY2MuYzogQWRkIG1pc3NpbmcgZXh0ZXJuIGRlY2xhcmF0aW9ucyBkZWxldGVkIGJ5IGxhc3QgY2hhbmdlLgorCSh4cmVhbGxvYywgeG1hbGxvYyk6IERvbid0IGRlY2xhcmUgYXMgdm9pZCAqOyBub24tQU5TSSBjb21waWxlcnMKKwljYW4ndCBoYW5kbGUgaXQuCisKK1NhdCBPY3QgMTkgMDg6MjY6MTMgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiB0cmVlLmg6IEZpeCBzcGVsbGluZyBlcnJvciBpbiBjb21tZW50LgorCisJKiB0cmVlLmRlZiwgY3AtcGFyc2UueTogQ2hhbmdlIGNvbW1lbnRzIHRoYXQgcmVmZXIgdG8gTEVUX1NUTVQgbm9kZXMgdG8KKwlyZWZlciB0byBCTE9DSyBub2Rlcy4KKworCSogZ2NjLmMsIGdlbiouYzogRGVjbGFyZSBhcyBzdGF0aWMgb2JqZWN0cyB0aGF0IGFyZW4ndCByZWZlcmVuY2VkCisJb3V0c2lkZSB0aGUgZmlsZSB0aGV5IGFyZSBpbi4KKwkoeHJlYWxsb2MsIHhtYWxsb2MpOiBGdW5jdGlvbnMgcmV0dXJuIGNoYXIgKiwgbm90IGludC4KKwkobWFpbik6IEFkZCBtaXNzaW5nIHJldHVybnMgKGluIHVucmVhY2hhYmxlIGNvZGUpIHRvIGF2b2lkIHdhcm5pbmdzCisJd2hlbiBjb21waWxlZCB3aXRoIC1XcmV0dXJuLXR5cGUuCisJKiBnY2MuYyAocGV4ZWN1dGUpOiBMaWtld2lzZS4KKwkqIGdlbmF0dHJ0YWIuYyAob3BlcmF0ZV9leHApOiBMaWtld2lzZS4KKworRnJpIE9jdCAxOCAxNjo1ODoxMiAxOTkxICBFcmljIFlvdW5nZGFsZSAoeW91bmdkYWxlIGF0IHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIG1ha2UtY2MxLmNvbTogRmluaXNoIGNoYW5nZW92ZXIgZnJvbSBjcGx1cy0qIHRvIGNwLSouCisKK0ZyaSBPY3QgMTggMTY6NTc6MzcgMTk5MSAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiB0bS1zdnI0Lmg6IERlbGV0ZSBsaW5lcyBkdXBsaWNhdGVkIGR1ZSB0byB0cmFuc21pc3Npb24gcHJvYmxlbXMuCisKK0ZyaSBPY3QgMTggMTY6NTU6NTMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jICh1bnNpZ25lZF9jb25kaXRpb24sIHNpZ25lZF9jb25kaXRpb24pOiBOZXcgZnVuY3Rpb25zLgorCisJKiBjb25maWd1cmUgKHZheCk6IFNldCB0bV9maWxlIHRvIHRtLXZheC5oIHNvICJjb25maWd1cmUgdmF4LWRlYy1ic2QiCisJd29ya3MuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgUExVUywgTUlOVVMpOiBSZW1vdmUgc29tZSBzaW1wbGlmaWNhdGlvbnMKKwlmcm9tIGhlcmUuCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgY2FzZSBQTFVTLCBNSU5VUyk6IFB1dCB0aGVzZQorCXNpbXBsaWZpY2F0aW9ucyBoZXJlLgorCVN0cmlwIG9mZiBDT05TVCB3aGVuIGxvb2tpbmcgZm9yIHNvbWUgc2ltcGxpZmljYXRpb25zLgorCUFkZCBjb2RlIHRvIHNpbXBsaWZ5IChhIC0gKGEgLSBiKSkuCisKKwkqIGNvbWJpbmUuYyAoZXhwYW5kX2NvbXBvdW5kX29wZXJhdGlvbik6IENvcnJlY3RseSBoYW5kbGUgY2FzZSB3aGVyZQorCXdlIGhhdmUgYSBaRVJPX0VYVFJBQ1QgdGhhdCBleHRlbmRzIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3QuCisKKwkqIGdsb2JhbC1hbGxvYy5jIChtYXJrX2VsaW1pbmF0aW9uKTogTm8gbG9uZ2VyIGhhdmUgRk9SQklEREVOX1JFR1MgYXMKKwlhcmd1bWVudC4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRG9uJ3QgcGFzcyBGT1JCSURERU5fUkVHUyB0byBtYXJrX2VsaW1pbmF0aW9uLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfe3VuYXJ5LGJpbmFyeSxyZWxhdGlvbmFsfV9vcGVyYXRpb24pOiAgQ29tcGxldGUKKwljaGFuZ2UgdGhhdCByZW1vdmVzIHdhcm5pbmdzIGZyb20gZmxvYXRpbmctcG9pbnQgdHJhcHMgd2hlbiBjb25zdGFudAorCWZvbGRpbmcgKHNvbWUgY2FzZXMgaGFkIGJlZW4gb21pdHRlZCkuCisKK0ZyaSBPY3QgMTggMTY6NDE6MjkgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9hbm9uX3VuaW9uX2RlY2wpOiBXaGVuIGNyZWF0aW5nIG5ldyBtZW0sIGNvcHkgdGhlCisJUlRYX1VOQ0hBTkdJTkdfUCBhbmQgTUVNX0lOX1NUUlVDVF9QIGJpdHMgZnJvbSB0aGUgb2xkIG9uZS4KKworCSogc3BhcmMubWQ6IEFkZCBuZXcgc2NjIGFkZHgvc3VieCBwYXR0ZXJucy4KKworRnJpIE9jdCAxOCAwOToxMDo0MyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHN0bXRzKTogRml4IHBhcnNpbmcgcnVsZXMgdG8gbWF0Y2ggQysrIHNlbWFudGljcworCWJldHRlciAoYW5kIGhlbmNlIGdpdmUgdGhlIGNvbXBpbGVyIGJldHRlciBlcnJvciByZWNvdmVyeSkuCisKK1RodSBPY3QgMTcgMTk6MzE6MTUgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IGN5Z251cy5jb20pCisKKyAgICAgICAgKiBjcC1wdC5jICh0c3Vic3QpOiBGb3IgTkVHQVRFX0VYUFIsIGNhbGwgYnVpbGQxLCBub3QgYnVpbGQuCisgICAgICAgIEhhbmRsZSBOT1BfRVhQUiBsaWtld2lzZS4KKyAgICAgICAgKHVuaWZ5LCBjYXNlIFRFTVBMQVRFX0NPTlNUX1BBUk0pOiBDb3B5IHZhbHVlIHRvIHBlcm1hbmVudCBvYnN0YWNrLgorCisgICAgICAgICogY3AtbWV0aG9kLmMgKFBBUk1fQ0FOX0JFX0FSUkFZX1RZUEUpOiBJZiBub3QgYWxyZWFkeSBkZWZpbmVkLAorICAgICAgICBkZWZpbmUgaXQgdG8gYmUgMS4KKyAgICAgICAgKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBUZXN0IHRvIHNlZSBpZiBpdCdzIG5vbnplcm8sIHJhdGhlciB0aGFuCisgICAgICAgIHdoZXRoZXIgaXQncyBkZWZpbmVkOyB0aGlzIHBlcm1pdHMgY29tcGlsYXRpb24gb3B0aW9ucyB0byBkaXNhYmxlCisgICAgICAgIGl0LCBidXQgbGVhdmUgaXQgZW5hYmxlZCBieSBkZWZhdWx0LiAgQWRkIG9uZSB0byB0aGUgYXJyYXkgc2l6ZSwKKyAgICAgICAgc2luY2UgdGhlIHZhbHVlIHJldHJpZXZlZCBhcHBlYXJzIHRvIGJlIHRoZSBtYXhpbXVtIGluZGV4LCBub3QgdGhlCisgICAgICAgIHRydWUgYXJyYXkgc2l6ZS4KKworVGh1IE9jdCAxNyAxOToxNTozNyAxOTkxICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCB0d2VlZGxlZHVtYmVyLmN5Z251cy5jb20pCisKKyAgICAgICAgKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6ICBoYXMgYW4gYXJndW1lbnQgdG8KKyAgICAgICAgaW5kaWNhdGUgd2hldGhlciB0byBzZXR1cCBmb3IgcGFyc2luZyBvciBub3QuIChBbGwgZXhpc3RpbmcgY2FzZXMKKyAgICAgICAgZGlkIGEgZmVlZCBpbnB1dCwgYnV0IGlmIHdlIGFyZSB0cnlpbmcgdG8gc2V0IHVwIGludGVybWVkaWF0ZSBub2RlcworICAgICAgICB3aGlsZSB3YWl0aW5nIGZvciB0aGUgcGFyc2VyIHRvIHJldHVybiB0byBhIHRlbXBsYXRlX2luc3RhbnRpYXRlCisgICAgICAgIHNpdGUgd2UgbmVlZCB0byBzdXBwcmVzcyB0aGUgcGFyc2luZyBwYXJ0IG9mIGl0LCB3aGljaCB3aWxsIGdldAorICAgICAgICByZWRvbmUgbGF0ZXIuKQorICAgICAgICAodHN1YnN0KTogdW5kZXIgY2FzZSBVTklOU1RBTlRJQVRFRF9QX1RZUEUsIGFjdHVhbGx5IGluc3RhbnRpYXRlIGFueQorICAgICAgICBjbGFzcyB0ZW1wbGF0ZXMgdGhhdCBhcmUgbmVlZGVkIGZvciBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLCBhbmQgc2V0CisgICAgICAgIHRoZW0gdXAgYXMgcGVuZGluZyB0ZW1wbGF0ZXMgdG8gYmUgcnVuIGxhdGVyLgorCisgICAgICAgICogY3AtcGFyc2UueSAocHJpbWFyeSk6IHNpbmNlIGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBkb2Vzbid0CisgICAgICAgIHJlcXVpcmUgYSBjb21wbGV0ZSB0eXBlIGFueSBtb3JlIGluIGNlcnRhaW4gY2FzZXMsIHdlIGluc3RhbnRpYXRlCisgICAgICAgIGFueSBwZW5kaW5nIHRlbXBsYXRlcyBhbmQgdGhlbiByZXF1aXJlX2NvbXBsZXRlX3R5cGUgb24gdGhlCisgICAgICAgIHJlbWFpbmRlci4gCisKKyAgICAgICAgKiBjcC10eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogYWRkZWQgYW4gYXJndW1lbnQgdG8KKyAgICAgICAgb3B0aW9uYWxseSBza2lwIHRoZSByZXF1aXJlX2NvbXBsZXRlX3R5cGUuLi4gaW1wbGljaXQgdGVtcGxhdGUKKyAgICAgICAgaW5zdGFudGlhdGlvbiBoYXMgdG8gYmUgcG9zdHBvbmVkLCBzbyB3ZSB3b24ndCBnZXQgYSBjb21wbGV0ZSB0eXBlCisgICAgICAgIHVudGlsIHRoZSBwYXJzZXIgY2FuIGdyYWIgaXQuCisKKyAgICAgICAgKiBjcC1jYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IGFkZGVkIGFuIGFyZ3VtZW50IGRvCisgICAgICAgIGFsbG93IGNob2ljZSBvZiBidWlsZF9mdW5jdGlvbl9jYWxsX21heWJlIG9yIGJ1aWxkX2Z1bmN0aW9uX2NhbGwKKyAgICAgICAgYmFzZWQgb24gd2hldGhlciB3ZSB0aG91Z2h0IHdlIHdvdWxkIHJlcXVpcmUgYSBjb21wbGV0ZSB0eXBlIG91dCBvZgorICAgICAgICBidWlsZF9mdW5jdGlvbl9jYWxsLiAKKworV2VkIE9jdCAxNiAwOTowNjo1NyAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBGaXggYW5kIGRpc2FibGUgcmVjb3JkaW5nIHRoZSBhcmcKKwl0eXBlIGxpc3QgZm9yIHRoZSBmdW5jdGlvbiBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorCSogYy10eXBlY2suYyAoc2VsZl9wcm9tb3RpbmdfYXJnc19wKTogQWxsb3cgdGhlIGFyZyB0eXBlIHRvIGJlIG51bGwuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogQWRkIGNoZWNrcyBmb3IKKwlNRU1fSU5fU1RSVUNUX1AgaWYgdGhlIHN0cnVjdHVyZSByZWZlcmVuY2UgaXMgYSBNRU0uCisKK1R1ZSBPY3QgMTUgMTg6Mzc6NTAgMTk5MSAgS2VuIFJhZWJ1cm4gIChyYWVidXJuIGF0IGN5Z251cy5jb20pCisKKyAgICAgICAgKiBjcC1jYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGwpOiBJZiB0ZW1wbGF0ZSBtYXRjaCBmYWlscywgc3RpbGwKKyAgICAgICAgc2V0IGZ1bmN0aW9uIGZpZWxkIG9mIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUsIGFuZCBzZXQgYmFkX2FyZyBmaWVsZCB0bworICAgICAgICBuZXcgbWFnaWMgbnVtYmVyIC00IHRvIGluZGljYXRlIGZhaWxlZCB0eXBlIHVuaWZpY2lhdGlvbi4KKworICAgICAgICAqIGNwLWNsYXNzLmMgKGFkZF9tZXRob2QpOiBDYWxsIG1ha2VfZnVuY3Rpb25fcnRsIG9ubHkgaWYgbm90CisgICAgICAgIHByb2Nlc3NpbmcgYSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4KKworICAgICAgICAqIGNwLXRyZWUuZGVmOiBOZXcgbm9kZSB0eXBlLCBVTklOU1RBTlRJQVRFRF9QX1RZUEUsIGZvcgorICAgICAgICBwYXJhbWV0ZXJpemVkIHR5cGVzIHRoYXQgaGF2ZW4ndCBoYWQgcGFyYW1ldGVycyBmaWxsZWQgaW4geWV0LgorICAgICAgICBMb29rcyBsaWtlIGEgdHlwZSBub2RlLgorCisgICAgICAgICogY3AtZGVjbC5jIChzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IE5ldyBmbGFnIGluZGljYXRpbmcgYW55IG5hbWUKKyAgICAgICAgc2hvdWxkIGJlIGFjY2VwdGVkIHdoZW4gbG9va2VkIHVwIGF0IHRoaXMgbGV2ZWwuICBUaGlzIGlzIGEga2x1ZGdlCisgICAgICAgIHRvIHRyeSB0byBkZWFsIHdpdGggbWV0aG9kcyBvZiBwYXJhbWV0ZXJpemVkIHR5cGVzLgorICAgICAgICAoZGVjbGFyZV91bmluc3RhbnRpYXRlZF90eXBlX2xldmVsKTogU2V0IGl0LgorICAgICAgICAodW5pbnN0YW50aWF0ZWRfdHlwZV9sZXZlbF9wKTogUmV0dXJuIGl0LgorICAgICAgICAqIGNwLWNsYXNzLmMgKHB1c2hjbGFzcyk6IElmIHRoZSAiY2xhc3MiIHR5cGUgaXMKKyAgICAgICAgVU5JTlNUQU5USUFURURfUF9UWVBFLCBmbGFnIGl0IGluIHRoZSBuZXcgYmluZGluZyBsZXZlbC4KKworICAgICAgICAqIGNwLWRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBOZXcgYXJndW1lbnQgdG8gaW5kaWNhdGUKKyAgICAgICAgd2hldGhlciB0aGUgZGVjbCBzaG91bGQgYmUgZm9yZ290dGVuIHdoZW4gdGhlIGN1cnJlbnQgbGV2ZWwgaXMKKyAgICAgICAgZXhpdGVkLiAgQ2FsbGVycyBjaGFuZ2VkLgorICAgICAgICAocHVzaF9vdmVybG9hZGVkX2RlY2xfdG9wX2xldmVsKTogRGl0dG8uCisgICAgICAgIChkb250X2ZvcmdldF9vdmVybG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChwdXNoX292ZXJsb2FkZWRfZGVjbF8xKTogTmV3IGZuOyBsaWtlIHB1c2hfb3ZlcmxvYWRlZF9kZWNsLCBidXQKKyAgICAgICAgbmV2ZXIgZm9yZ2V0cy4gIEludGVuZGVkIG9ubHkgZm9yIHVzZSBieSBhdXRvX2Z1bmN0aW9uIG1hY3JvLgorICAgICAgICAoYXV0b19mdW5jdGlvbik6IFVzZSBpdC4KKworICAgICAgICAqIGNwLWRlY2wuYyAocHJpbnRfYmluZGluZ19sZXZlbCk6IFByaW50IHR5cGUtc2hhZG93ZWQgZmllbGQgYXQKKyAgICAgICAgZWFjaCBsZXZlbC4gIFNraXAgZmllbGRzIHdpdGggbm8gdmFsdWVzLgorCisgICAgICAgICogY3AtZGVjbC5jIChhZGp1c3RfdHlwZV92YWx1ZSk6IFVzZSBTRVRfSURFTlRJRklFUl9UWVBFX1ZBTFVFLAorICAgICAgICBub3Qgc2V0X2lkZW50aWZpZXJfdHlwZV92YWx1ZS4KKworICAgICAgICAqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBVbmRvIE9jdCA0IGJhY2stb3V0IG9mIHByZXZpb3VzIGNoYW5nZS4KKyAgICAgICAgU2V0IHR5cGUgdmFsdWUgb2YgbmFtZSBvZiBwYXNzZWQgZGVjbCwgaW5zdGVhZCBvZiBuYW1lIG9mIHR5cGUgaW4KKyAgICAgICAgcGFzc2VkIGRlY2wuCisgICAgICAgIChwdXNoZGVjbF90b3BfbGV2ZWwpOiBTZWFyY2ggdHlwZS1zaGFkb3dlZCBmaWVsZHMgb2Ygb3V0ZXIgYmluZGluZworICAgICAgICBsZXZlbHMsIG11bmdpbmcgb3V0ZXJtb3N0IG9uZSBpZiBmb3VuZCB0byBjYXVzZSBpdCB0byAicmVzdG9yZSIgdGhlCisgICAgICAgIG5ldyBnbG9iYWwgdmFsdWUuCisKKyAgICAgICAgKiBjcC1kZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogRG9uJ3QgcHVudCBzZWNvbmQgb3IgbGF0ZXIKKyAgICAgICAgdGVtcGxhdGVzIG9mIGEgZ2l2ZW4gbmFtZS4KKworICAgICAgICAqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCk6IFRlbXBsYXRlLWhhbmRsaW5nIGNvZGUgbW92ZWQgdXAsIHRvCisgICAgICAgIGNvcGUgYmV0dGVyIHdpdGggdmFyaWFibGUgZGVjbGFyYXRpb25zLiAgRG9uJ3QgY2hlY2sgZm9yIGluY29tcGxldGUKKyAgICAgICAgdHlwZSBvciBjb25zdHJ1Y3RvciByZXF1aXJlbWVudHMgd2hlbiBwcm9jZXNzaW5nIHRlbXBsYXRlLgorCisgICAgICAgICogY3AtZGVjbDIuYyAoYnVpbGRfcHVzaF9zY29wZSk6IElmIHBhc3NlZCBlcnJvciBtYXJrIG5vZGUsIGp1c3QKKyAgICAgICAgcmV0dXJuIGl0LgorICAgICAgICAoY29uc3RydWN0b3JfbmFtZSk6IEhhbmRsZSBVTklOU1RBTlRJQVRFRF9QX1RZUEUuCisKKyAgICAgICAgKiBjcC1sZXguYyAoaWRlbnRpZmllcl90eXBlKTogRG9uJ3QgcmV0dXJuIFBUWVBFTkFNRSBmb3IgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGUgbmFtZS4KKworICAgICAgICAqIGNwLW1ldGhvZC5jIChyZXBvcnRfdHlwZV9taXNtYXRjaCk6IE5ldyBtYWdpYyBiYWQtYXJnIHZhbHVlIC00CisgICAgICAgIGluZGljYXRlcyB0eXBlIHVuaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgICAgIChidWlsZF9vdmVybG9hZF9uYW1lLCBjYXNlIFVOSU5TVEFOVElBVEVEX1BfVFlQRSk6IEhhbmRsZSBsaWtlIG90aGVyCisgICAgICAgIHRlbXBsYXRlLXJlbGF0ZWQgdHlwZXMgdGhhdCBzaG91bGRuJ3QgZ2V0IHZpc2liaWxpdHkgb3V0c2lkZSB0aGUKKyAgICAgICAgY29tcGlsZXIuCisKKyAgICAgICAgKiBjcC1wYXJzZS55ICh0ZW1wbGF0ZV90eXBlKTogVXNlIElERU5USUZJRVJfVFlQRV9WQUxVRSBmcm9tCisgICAgICAgIG5hbWUsIGlmIGV4cGFuc2lvbiBkb2Vzbid0IGhhcHBlbi4KKyAgICAgICAgKHRtcGwuMSwgdG1wbC4yKTogTm93IHR5cGUgPHR0eXBlPi4gIFZhbHVlIGlzIG51bGwgb3IgcmV0dXJuIHZhbHVlCisgICAgICAgIGZyb20gaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUuCisgICAgICAgICh0ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogQWx3YXlzIHB1dCBjb3B5IG9mIGRlY2wgaW4gZ2xvYmFsIHNjb3BlLgorICAgICAgICBVc2UgcHVzaGRlY2xfdG9wX2xldmVsIGluc3RlYWQgb2Ygc2V0dGluZyBJREVOVElGSUVSX0dMT0JBTF9WQUxVRQorICAgICAgICBzbG90LgorICAgICAgICAoTEMpOiBJZiB0eXBlIGhhcyBiZWVuIG9yIGlzIGJlaW5nIGRlZmluZWQsIHB1c2ggYSBuZXcgdHlwZSB3aXRoIHRoZQorICAgICAgICBzYW1lIG5hbWUsIHRvIGF2b2lkIGNvbmZsaWN0LgorICAgICAgICAodHJ5X2Zvcl90eXBlbmFtZSk6IE5ldyB0eXBlIDxpdHlwZT4uICBWYWx1ZSBpcyBub24temVybyBpZmYgdHlwZSB0bworICAgICAgICBiZSBwdXNoZWQgdXNlcyBubyB0ZW1wbGF0ZSBwYXJtcyBhbmQgaXNuJ3QgZXJyb3JfbWFya19ub2RlLgorICAgICAgICAoc2NvcGVkX2lkKTogUmV0dXJuIGVycm9yX21hcmtfbm9kZSBmb3IgdGVtcGxhdGUgcGFyYW1ldGVyIHVzZXMsIGFuZAorICAgICAgICBsZWF2ZSBlcnJvcl9tYXJrX25vZGUgYWxvbmUuICBPbmx5IHBvcCBjbGFzcyBpZiB0cnlfZm9yX3R5cGVuYW1lCisgICAgICAgIHZhbHVlIGlzIG5vbi16ZXJvLgorICAgICAgICAoc2NvcGVkX3R5cGVuYW1lKTogRGl0dG8uCisKKyAgICAgICAgKiBjcC1wdC5jIChlbmRfdGVtcGxhdGVfZGVjbCk6IElmIHRlbXBsYXRlIGRlY2wvY2xhc3MgaGVhZCBhcmcgaXMKKyAgICAgICAgbnVsbCwgcHVudC4gIEZvciBub24tdHlwZSB0ZW1wbGF0ZXMgdGhhdCBkaWRuJ3QgY29tZSBpbiBhcyB0ZW1wbGF0ZQorICAgICAgICBkZWNscywgY2xlYXIgcHVibGljIGZsYWcuICBTdWNoIGNhc2VzIHNob3VsZG4ndCBhcmlzZSBhbnkgbW9yZTsganVzdAorICAgICAgICBwdXQgaW4gYWJvcnQgY2FsbCBmb3Igbm93IHVudGlsIHdlJ3JlIHN1cmUuICBDb21tZW50IG91dCBjb2RlIGZvcgorICAgICAgICBmb3JjaWJseSByZW1vdmluZyB0ZW1wb3JhcnkgdmFsdWVzIG9mIHRlbXBsYXRlIHR5cGUgcGFybXM7IE1pY2hhZWwKKyAgICAgICAgYnJva2UgdGhlIGNvZGUgYW5kIGZpeGVkIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiAgSGFuZGxlIGVycm9yIGNhc2UKKyAgICAgICAgd2hlcmUgZGVjbCB0byBiZSBwdXNoZWQgbWlnaHQgYmUgbnVsbC4KKyAgICAgICAgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEhhbmRsZSBhcmcgbGlzdCBhcyBUUkVFX1ZFQyBhcyB3ZWxsIGFzCisgICAgICAgIFRSRUVfTElTVC4gIElmIGFyZyBsaXN0IHVzZXMgdGVtcGxhdGUgcGFybXMsIHJldHVybgorICAgICAgICBVTklOU1RBTlRJQVRFRF9QX1RZUEUgbm9kZS4KKyAgICAgICAgKHVzZXNfdGVtcGxhdGVfcGFybXMsIGNhc2UgVU5JTlNUQU5USUFURURfUF9UWVBFKTogUmV0dXJuIDEuCisgICAgICAgIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IE5vdyByZXR1cm5zIHRyZWUgLS0gZXJyb3JfbWFya19ub2RlIG9yCisgICAgICAgIE5VTExfVFJFRSBvciBjbGFzcyB0eXBlOyBjYWxsZXJzIGFuZCBkZWNscyBjaGFuZ2VkLiAgQXNzaWduCisgICAgICAgIFRZUEVfTkFNRSBmaWVsZCB3aGVuIGJ1aWxkaW5nIG5ldyBSRUNPUkRfVFlQRSBhbmQgVFlQRV9ERUNMIG5vZGVzLgorICAgICAgICBEb24ndCBuZWVkIHRvIGRvIGV4dHJhIHBvcGxldmVsIGFueSBtb3JlLgorICAgICAgICAodHN1YnN0KTogSGFuZGxlIFVOSU5TVEFOVElBVEVEX1BfVFlQRSwgTUlOVVNfRVhQUiwgUExVU19FWFBSLAorICAgICAgICBORUdBVEVfRVhQUi4KKyAgICAgICAgKHVuZG9fdGVtcGxhdGVfbmFtZV9vdmVybG9hZCk6IERvbid0IG5lZWQgdG8gZXhwbGljaXRseSBjbGVhciB0eXBlCisgICAgICAgIGZpZWxkIGFueSBtb3JlLgorICAgICAgICAob3ZlcmxvYWRfdGVtcGxhdGVfbmFtZSk6IFB1c2ggYSBUWVBFX0RFQ0wsIGluc3RlYWQgb2YgZXhwbGljaXRseQorICAgICAgICBzZXR0aW5nIHR5cGUgdmFsdWUgZmllbGQuCisgICAgICAgIChlbmRfdGVtcGxhdGVfaW5zdGFudGlhdGlvbik6IERvbid0IG5lZWQgdG8gcG9wIGEgbGV2ZWwgYW55IG1vcmUuCisgICAgICAgIChyZWluaXRfcGFyc2VfZm9yX3RlbXBsYXRlKTogVGhyb3cgYXdheSBzYXZlZCBibG9jayBmb3IgbnVsbCBvcgorICAgICAgICBlcnJvciB0ZW1wbGF0ZSBub2RlLgorICAgICAgICAodHlwZV91bmlmaWNhdGlvbik6IEhhbmRsZSB2YXJpYWRpYyBmdW5jdGlvbnMsIGFuZCBmdW5jdGlvbnMgd2l0aAorICAgICAgICBkZWZhdWx0IHZhbHVlcyBmb3IgYXJndW1lbnRzLgorICAgICAgICAodW5pZnkpOiBIYW5kbGUgVFJFRV9WRUMgYW5kIFVOSU5TVEFOVElBVEVEX1BfVFlQRS4KKworICAgICAgICAqIGNwLXB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IEhhbmRsZSBVTklOU1RBTlRJQVRFRF9QX1RZUEUuCisKKyAgICAgICAgKiBjcC10cmVlLmggKHB1c2hfb3ZlcmxvYWRfZGVjbCk6IERlY2xhcmUgaGVyZSwgbm90IGluCisgICAgICAgIGNwLWRlY2wuYy4KKyAgICAgICAgKFRFTVBMQVRFX1RZUEVfKiBtYWNyb3MpOiBEZWxldGUgdW51c2VkIChhbmQgbm93IGluY29ycmVjdCkKKyAgICAgICAgdmVyc2lvbnMuCisKK01vbiBPY3QgMTQgMTQ6MzA6MzIgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEZpeCB0eXBvIGZyb20gbGFzdCBlZGl0LAorCXdoZXJlIFRZUEVfTU9ERSB3YXMgYXBwbGllZCB0byBhbiBhcmd1bWVudCwgbm90IHRoZSB0eXBlIG9mIGFuCisJYXJndW1lbnQuCisKKwkqIGNzZS5jIChjYW5vbl9oYXNoLCBTVUJSRUcgY2FzZSk6IEFkZCBjYXN0IHdoaWNoIGlzIG5lZWRlZCBieSBzb21lCisJY29tcGlsZXJzLgorCitNb24gT2N0IDE0IDA3OjU5OjUwIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENvbXB1dGUgdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhbmQKKwlwYXNzIGl0IHRvIGFzc2VtYmxlX3tzdGFydCxlbmR9X2Z1bmN0aW9uLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uKTogTmV3IHBhcmFtZXRlci4KKwkoYXNzZW1ibGVfZW5kX2Z1bmN0aW9uKTogTmV3IGZ1bmN0aW9uIGZvciBBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFLgorCSogZmluYWwuYywgc2Rib3V0LmM6IENvcnJlY3QgY29tbWVudHMuCisJKiB0bS1zdnI0LmgsIHRtLXN5c3Y0LmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUpOiBBZGQgYW5kIHVzZSBhCisJTkFNRSBwYXJhbWV0ZXIuCisJKiB0bS1tODhrLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUpOiBPdmVycmlkZSBzdnI0IGRlZmluaXRpb24uCisJKiBvdXQtbTg4ay5jIChvdXRwdXRfcHJvbG9ndWUpOiBEZWxldGUgcHJldmlvdXMgbWV0aG9kLgorCisJKiBtODhrLm1kOiBVc2UgdHJhcF9pZi4KKwkoZGl2c2kzKTogU3RvcmUgaW50byBvdXRwdXQgb3BlcmFuZCBvbmx5IG9uY2UgdG8gYXZpb2QgcHJvYmxlbXMKKwl3aXRoIFJFR19FUVVBTCBub3RlLgorCSogb3V0LW04OGsuYyAob3V0cHV0X2NhbGwpOiBBY2NvbW9kYXRlIGFzc2VtYmxlciByYW5nZQorCXJlc3RyaWN0aW9uLgorCSogdG0tbTg4a2RndXguaCAoQVNfQlVHX0lNTUVESUFURV9MQUJFTCk6IFNwZWNpZnkgdGhlIHJlc3RyaWN0aW9uLgorCShBU01fU1BFQyk6IFBhc3MgLUtWMyB0byB0aGUgYXNzZW1ibGVyIGluIHNvbWUgY2FzZXMuCisJKiB0bS1tODhrLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTWFyayB0aGUgYWRkcmVzc2luZyBiYXNlCisJcmVnaXN0ZXIgZ2xvYmFsLgorCitTYXQgT2N0IDEyIDAwOjMwOjIzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKC5TVUZGSVhFUyk6IFJ1bGUgYWRkZWQuCisKKwkqIGRieG91dC5jIChkYnhvdXRfYmxvY2spOiBIYW5kbGUgZGVidWdfaW5mb19sZXZlbC4KKwkqIHNkYm91dC5jIChzZGJvdXRfYmVnaW5fYmxvY2spOiBMaWtld2lzZS4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBMaWtld2lzZSwgd2hlbiBjYWxsaW5nIGluaXRfZW1pdF9vbmNlLgorCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBDb3NtZXRpYyBjaGFuZ2UuCisJKiBNYWtlZmlsZS5pbiAoc2Rib3V0Lm8pOiBJbmNsdWRlIGZsYWdzLmguCisKKwkqIGNvbmZpZ3VyZTogRGVmYXVsdCBzcmNkaXIgZnJvbSBkaXIgaW4gd2hpY2ggY29uZmlndXJlIGlzIGZvdW5kLgorCisJKiBpODYwLm1kIChmbG9hdHNpZGYyKTogUmV3cml0ZSB0byBiZSBpbmRlcGVuZGFudCBvZiBob3N0IG1hY2hpbmUuCisJKGRpdmRmMywgZGl2c2YzKTogTmV3IHBhdHRlcm5zLgorCisJKiB0bS1pODYwLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBNYWNybyBkZWxldGVkLgorCShBU01fT1VUUFVUX0ZVTkNUSU9OX1BSRUZJWCk6IE1hY3JvIGFkZGVkLgorCisJKiBzdG10LmMgKHB1c2hjYXNlLCBwdXNoY2FzZV9yYW5nZSwgZXhwYW5kX2VuZF9jYXNlKToKKwlEb24ndCBnaXZlICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nIGZvciBhIFVTRS4KKworCSogdG0taTM4Ni5oIChIQVJEX1JFR05PX01PREVfT0spOiBGcCByZWdzIHJlamVjdCBURm1vZGUuCisKK0ZyaSBPY3QgMTEgMTY6NDM6MzcgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGNzZS5jIChmaW5kX2NvbXBhcmlzb25fYXJncyk6IFJlamVjdCBWT0lEbW9kZSB0byBhdm9pZCBpbnZhbGlkCisJc2hpZnQuCisKK0ZyaSBPY3QgMTEgMTQ6MzA6MzEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChmdW5jdGlvbl90eXBlc19jb21wYXRpYmxlX3ApOgorCU5VTEwgYXMgYXJnIHR5cGUgbWF0Y2hlcyBzZWxmLXByb21vdGluZyB0eXBlLgorCShzZWxmX3Byb21vdGluZ190eXBlX3ApOiBOZXcgZnVuY3Rpb24uCisJKGNvbW1vbl90eXBlKTogTlVMTCBmb3IgYXJnIGluIG9uZSBmY24gdHlwZSBtZWFucyB1c2UgYXJnIGZyb20gb3RoZXIuCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IFJlY29yZCBhcmcgdHlwZSBsaXN0IGZvciB0aGUgZm4sCisJanVzdCB0byBpbmRpY2F0ZSBob3cgbWFueSBhcmdzIHRoZXJlIGFyZS4KKworCSogaTg2MC5tZCwgb3V0LWk4NjAuYywgdG0taTg2MC5oOiBNZXJnZSBtYW55IGNoYW5nZXMgYnkgcmZnLgorCSogdG0taTg2MGJzZC5oLCB4bS1pODYwLmg6IExpa2V3aXNlLgorCSogdG0taTg2MHYzLmgsIHRtLWk4NjB2NC5oOiBOZXcgZmlsZXMuCisJKiB4bS1pODYwdjMuaCwgeG0taTg2MHY0Lmg6IE5ldyBmaWxlcy4KKwkqIHRtLWk4NjB2M2cuaDogUmVuYW1lZCBmcm9tIHRtLWk4NjBnLmguCisJKiBjb25maWd1cmUgKGk4NjAtc3lzdjMqKTogUmVuYW1lZCBmcm9tIGk4NjAtc3lzdiouICBOZXcgZmlsZW5hbWVzLgorCShpODYwLXN5c3Y0Kik6IE5ldyBhbHRlcm5hdGl2ZS4KKworCSogcHJpbnQtcnRsLmM6IE5ldyBmaWxlLCBzcGxpdCBmcm9tIHJ0bC5jLgorCSogTWFrZWZpbGUuaW4gKHByaW50LXJ0bC5vKTogTmV3IHRhcmdldC4KKwkoT0JKUyk6IEFkZCB0aGF0IHRhcmdldC4KKworCSogdG9wbGV2LmMgKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMpOiBQcm92aWRlIGRlZmF1bHQgZGVmaW5pdGlvbi4KKwkobWFpbik6IFVzZSB0aGF0IGZvciAtZyB3aXRoIGRieCBmb3JtYXQuCisJRG9uJ3Qgc3VwcG9ydCAtRy4KKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEdldCByaWQgb2YgLUcuCisKK0ZyaSBPY3QgMTEgMTQ6MzA6NDMgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9hbm9uX3VuaW9uX2RlY2wpOiBDb3JyZWN0bHkgaGFuZGxlIGFub255bW91cworCXVuaW9ucywgd2hldGhlciBpbiBtZW1vcnkgb3IgcmVnaXN0ZXJzLgorCisJVGhlc2Ugd2VyZSB3cml0dGVuIGJ5IE1pY2hhZWwgVGllbWFubi4KKwlUaGUgZm9sbG93aW5nIGNoYW5nZXMgbmV0IGEgMTYlIHNwZWVkdXAgY29tcGlsaW5nIHNvbWUKKwltYWNoaW5lLWdlbmVyYXRlZCBDQUQgc3ludGhlc2lzIGNvZGUuCisJKiBjLWRlY2wuYyAoZmllbGRfZGVjbF9jbXApOiBOZXcgZnVuY3Rpb24sIHVzZSBhcyBjb21wYXJpc29uCisJZnVuY3Rpb24gZm9yIHFzb3J0LgorCShmaW5pc2hfc3RydWN0KTogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiAxNSBmaWVsZHMsIGFsbG9jYXRlIGEKKwlMQU5HX1RZUEUgZm9yIHRoZSBGSUVMRF9ERUNMcywgYW5kIHNvcnQgdGhlbSBhY2NvcmRpbmcgdG8KKwlgZmllbGRfZGVjbF9jbXAnLgorCSogYy10cmVlLmggKGxhbmdfdHlwZSk6IERlZmluZSBhIExBTkdfVFlQRSBmb3IgUkVDT1JEX1RZUEVzLgorCSogYy10eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IElmIExBTkdfVFlQRSBzZXQsIHRoZW4gdXNlCisJYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBmaWVsZCwgb3RoZXJ3aXNlIHVzZSBsaW5lYXIgc2VhcmNoIGFzCisJYmVmb3JlLgorCisJKiB0cmVlLmg6IERlY2xhcmUgc2F2ZWFsbG9jLgorCSogYy1jb21tb24uYzogRGVsZXRlIG5vdyB1bm5lY2Vzc2FyeSBjYXN0IG9mIHNhdmVhbGxvYyByZXN1bHQuCisKK0ZyaSBPY3QgMTEgMTA6MDY6MDkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGNwLSosIGdjYy50ZXhpbmZvLCBtYWtlLWNjMS5jb20sIHRyZWUuYywgdW5kb2N1bWVudGVkOiBDaGFuZ2UKKwljcGx1cy0gdG8gY3AtLiAgUmVuYW1lIGNwbHVzLXBhcnNlLnkgdG8gY3AtcGFyc2UueS4KKworRnJpIE9jdCAxMSAwNzo0ODo0MCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWNvZy5jIChmaW5kX3NpbmdsZV91c2VfMSk6IElnbm9yZSBhcHBlYXJhbmNlcyBvZiBERVNUIGluCisJY29udGV4dHMgd2hlcmUgaXQgaXMgYmVpbmcgc2V0LCBub3QgcmVmZXJlbmNlZC4KKwkoZmluZF9zaW5nbGVfdXNlKTogVXNlIGRlYWRfb3Jfc2V0X3AgaW5zdGVhZCBvZiBsb29raW5nIGZvciBSRUdfREVBRAorCW5vdGVzLgorCitGcmkgT2N0IDExIDA3OjI5OjMzIDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogYy1wYXJzZS55LCBjcC1sZXguYywgb2JqYy1wYXJzZS55IChjaGVja19uZXdsaW5lKToJVXNlIGBwZWR3YXJuJworCWluc3RlYWQgb2YgYGVycm9yJyB3aGVuIHdlIHNlZSBhbiAjaWRlbnQgaWYgLXBlZGFudGljLgorCSogY2NjcC5jIChkb19hc3NlcnQsIGRvX3VuYXNzZXJ0LCBjaGVja19hc3NlcnRpb24sIGRvX3NjY3MpOiBXYXJuCisJaWYgLXBlZGFudGljLgorCitUaHUgT2N0IDEwIDE4OjMwOjI4IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogQ29ycmVjdGx5IGhhbmRsZSBuZXcgZGVidWdnaW5nCisJb3B0aW9ucywgcGFzcyBhbGwgLWcqIGFuZCAtRyogb3B0aW9ucy4KKworCSogTWFrZWZpbGUuaW4sIGMtZGVjbC5jLCBjcC1kZWNsLmMsIGZpbmFsLmMsIGZsYWdzLmgsIGdjYy4xLAorCWdjYy5jLCBwcmludC10cmVlLmMsIHRvcGxldi5jLCB0cmVlLmRlZiwgdHJlZS5oOiBEZWxldGUgc3VwcG9ydAorCWZvciBvYnNvbGV0ZSBHREJfREVCVUcgZm9ybWF0LCAtZ2cgb3B0aW9uLCBzeW1vdXQuYywgZXRjLgorCSogZ2RiZmlsZXMuaCwgc3ltc2VnLmgsIHN5bW91dC5jOiBEZWxldGUgb2Jzb2xldGUgZmlsZXMuCisKK1RodSBPY3QgMTAgMTc6NTY6MTYgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBXaGVuIHdpZGVuaW5nIEZST00gdG8gbXVsdGktd29yZCwgZW5zdXJlIHRoYXQKKwl3ZSBvbmx5IHJlZmVyZW5jZSBlYWNoIHBpZWNlIG9mIFRPIG9uY2Ugc28gdGhhdCBlbWl0X25vX2NvbmZsaWN0X2Jsb2NrCisJY2FuIGJlIHNhZmVseSB1c2VkLgorCisJKiB0b3BsZXYuYyAoZmxvYXRfc2lnbmFsKTogUmUtZW5hYmxlIHRoZSBzaWduYWwgYWZ0ZXIgd2UgY2F0Y2ggaXQuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogQWRkIG1pc3NpbmcgZnAgZXJyb3IgaGFuZGxlcgorCXNldHVwIGluIERGbW9kZSBjYXNlLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIFhPUik6IEZpeCB0eXBvIGluIGNoZWNraW5nIGZvcgorCVNUT1JFX0ZMQUdfVkFMVUUgZXF1YWwgdG8ganVzdCB0aGUgc2lnbiBiaXQuCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBGaXggdHlwbyBpbiBjb21wdXRpbmcgbWF4aW11bSBzaWduZWQgbnVtYmVyIGluCisJYSBtb2RlOyBhbHNvLCB1c2UgR0VUX01PREVfTUFTSyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gY29tcHV0ZSBpdC4KKworVGh1IE9jdCAxMCAxNzo1Mjo0NCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKyAJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBUdXJuIG9mZiBgYWxsb2NhJyBmb3IgLWFuc2kuCisJKGNfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZmJ1aWx0aW4sIC1mbm8tYnVpbHRpbi4KKworVGh1IE9jdCAxMCAxNzo0MjowMyAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmMgKGVtaXRfbXVsdF9yZXN0b3JlKTogSW5pdGlhbGl6ZSBNQVlCRV9URU1QUkVHLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBTZXQgTUVNX0lOX1NUUlVDVF9QIHdoZW4gY3JlYXRpbmcgYQorCU1FTSBmb3IgYSBhZ2dyZWdhdGUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIElORElSRUNUX1JFRiBjYXNlKTogU2V0IE1FTV9JTl9TVFJVQ1RfUAorCXdoZW4gZGVyZWZlcmVuY2luZyBhbiBhZ2dyZWdhdGUuCisKKwkqIHNjaGVkLmMgKHNjaGVkX25vdGVfc2V0KTogQWRkIG1pc3NpbmcgcGFyZW5zLgorCisJKiBzcGFyYy5tZDogRGVsZXRlIHVubmVjZXNzYXJ5IGNsb2JiZXJzIGZyb20gYWxsIFNDQyBwYXR0ZXJucy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDb3JyZWN0IGhhbmRsaW5nIG9mIGFyZ3VtZW50cworCXBhc3NlZCBieSBpbnZpc2libGUgcmVmZXJlbmNlLgorCisJKiBjc2UuYyAoY2Fub25faGFzaCk6IENvbXB1dGUgaGFzaCBjb2RlIGZvciBTVUJSRUcgc2FtZSBhcyB3ZSBkbworCWZvciBSRUcuICBPdGhlcndpc2UsIFNVQlJFRyBoYXNoIGNvZGVzIGNhbiBjaGFuZ2Ugd2hlbiBxdHlfY29uc3QKKwljaGFuZ2VzLCB3aGljaCByZXN1bHRzIGluIGR1cGxpY2F0ZSBTVUJSRUcgZW50cmllcywgd2hpY2ggY2FuCisJY2F1c2UgYSBjcmFzaC4KKworV2VkIE9jdCAgOSAxNTo1NTo0MiAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IFVwZGF0ZSBNQVhfSU5DTFVERV9MRU4gaWYgR0NDX0VYRUNfUFJFRklYIGdldHMgaW50bworCXRoZSBhY3QuCisKKwkqIHhtLWEyOWsuaDogQ2hhbmdlIGNvcHlyaWdodCBtZXNzYWdlIGJhY2sgdG8gR1BMIHZlcnNpb24gMi4KKwkqIHhtLWEyOWstdWx0cmEuaDogVXNlIEdQTCB2ZXJzaW9uIDIgY29weXJpZ2h0LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFB1dCBhcnJheSBzaXplIGluIGNhc3QsIHRvIHByZXZlbnQgY29tcGlsZXIKKwl3YXJuaW5nLgorCisJKiBkd2FyZm91dC5jICh0eXBlX2F0dHJpYnV0ZSk6IENoZWNrIGZvciBFUlJPUl9NQVJLIG5vZGVzLgorCitXZWQgT2N0ICA5IDEzOjU5OjIyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGZsb2F0X3NpZ25hbCk6IFJlZW5hYmxlIGhhbmRsZXIuCisKKwkqIGNvbmZpZ3VyZTogQ29tbWVudCBvdXQgdmFyaW91cyBvcHRpb25zIG5vdCB5ZXQgdXBkYXRlZC4KKworCSogY3AtKi5jLCBjcC0qLmg6IFJlbmFtZWQgZnJvbSBjcGx1cy0qLltjaF0uCisJKiBNYWtlZmlsZS5pbjogUmVuYW1pbmcgaGVyZSBhbHNvLgorCisJKiB4LSo6IFJlbmFtZWQgZnJvbSBtYWtlLSouCisJKiBNYWtlZmlsZS5pbiAodG1ha2VfZmlsZSwgeG1ha2VfZmlsZSk6IE5ldyB2YXJzLgorCShNYWtlZmlsZSk6IERlcGVuZCBvbiB0aGVtLgorCSogY29uZmlndXJlOiBSZXBsYWNlIGhvc3RfbWFrZV92YXJfZmlsZSB3aXRoIGhvc3RfeG1ha2VfZmlsZS4KKwlIYW5kbGUgdG1ha2VfZmlsZSBhbHNvLCBmb3IgdGFyZ2V0IG1hY2hpbmUuCisJRm9ybSBmaWxlIG5hbWVzIGZyb20geC0gYW5kIHQtLgorCVJlYXJyYW5nZSB1c2Ugb2YgdGVtcG9yYXJ5IGZpbGVzIGR1cmluZyBlZGl0aW5nIG9mIE1ha2VmaWxlLgorCisJKiB0LW1pcHM6IE1vc3Qgb2YgeC1taXBzIG1vdmVkIGhlcmUuCisJKiB0LWRlY3Jvc2U6IExpa2V3aXNlIGZyb20geC1kZWNyb3NlLgorCisJKiB4bS1hMjlrLXVsdC5oOiBSZW5hbWVkIGZyb20geG0tYTI5ay11bHRyYS5oLgorCisJKiBNYWtlZmlsZS4gaW4gKGluc3RhbGwtY29tbW9uKTogRG9uJ3QgaGFuZGxlIGBjb2xsZWN0JyBzcGVjaWFsbHkuCisJSXQgc2hvdWxkIGJlIGluIEVYVFJBX1BBU1NFUyBpZiBpdCBpcyBuZWVkZWQuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfZXhwcmVzc2lvbik6IFVzZSBmbG9hdCBoYW5kbGVyIGZvciBERiBsaWtlIFNGLgorCURvbid0IHdhcm4gYWJvdXQgdHJhcHM7IGxlYXZlIHRoZW0gZm9yIHJ1biB0aW1lLgorCisJKiB0bS1ocDlrMzIwLmggKFNJWkVfVFlQRSk6IE5ldyBkZWZpbml0aW9uLgorCU5vdGU6IHRoaXMgYWZmZWN0cyB0bS0zYjEuaCBieSBpbmhlcml0YW5jZS4gIE5vdCBzdXJlIHRoYXQncyByaWdodC4KKworV2VkIE9jdCAgOSAxMjoxNTo0MCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogcnRsLmRlZiAoVFJBUF9JRik6IE1ha2UgVFJBUCBpbnRvIGEgY29uZGl0aW9uYWwgdHJhcC4KKwkqIHJ0bC5oIChUUkFQX0NPTkRJVElPTik6IERlZmluZS4KKwkqIHJ0bGFuYWwuYyAocmVnX3JlZmVyZW5jZWRfcCBtYXlfdHJhcF9wKTogRGVhbCB3aXRoIFRSQVBfSUYgcHJvcGVybHkuCisJKHZvbGF0aWxlX3JlZnNfcCBzaWRlX2VmZmVjdHNfcCk6IE5vdCBjdXJyZW50bHkgdHJ1ZSBmb3IgVFJBUF9JRi4KKworV2VkIE9jdCAgOSAwMzo1NToyMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG1ha2UtbWlwcyAoQklTT05GTEFHUyk6IEFzc2lnbm1lbnQgZGVsZXRlZC4KKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX01JTlVTX1pFUk8pOiBOZXcgbWFjcm8uCisJKiBmb2xkLWNvbnN0LmMgKHRhcmdldF9taW51c196ZXJvKTogTmV3IGZ1bmN0aW9uLgorCSogdG0tc3VuMm9zNC5oIChBU01fT1VUUFVUX0ZMT0FULCBBU01fT1VUUFVUX0ZMT0FUX09QRVJBTkQpOgorCShBU01fT1VUUFVUX0RPVUJMRSwgQVNNX09VVFBVVF9ET1VCTEVfT1BFUkFORCk6CisJVXNlIFJFQUxfVkFMVUVfSVNJTkYsIFJFQUxfVkFMVUVfTUlOVVNfWkVSTy4KKworVHVlIE9jdCAgOCAxNzo1NjoxMyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBJZiByZWRlY2xhcmluZyBidWlsdGluIGFzIHN0YXRpYywKKwlyZXBsYWNlIHRoZSBvbGQgZGVjbC4KKworCSogdG0tc2VxMzg2LmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IENvcHkgdXN1YWwgZGVmIGludG8gb3ZlcnJpZGUgZGVmLgorCisJKiB0bS1uZXdzLmggKENQUF9QUkVERUZJTkVTKTogR2V0IHJpZCBvZiBpbnZhbGlkIGNvbmRpdGlvbmFscy4KKwkqIHRtLXRvd2VyLmg6IExpa2V3aXNlLgorCisJKiB0bS1nbWljcm8uaCAoTU9ERVNfVElFQUJMRV9QKTogRml4IHR5cG8uCisKKwkqIG5zMzJrLm1kIChyb3Ryc2kzKTogRml4IHR5cG8gYE5FR0FURScgZm9yIGBORUcnLgorCisJKiBjLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogSGFuZGxlIENPTlNUUlVDVE9SLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBhZGRyZXNzYWJsZSBjb250cnVjdG9ycy4KKworVHVlIE9jdCAgOCAxNDo0Mjo1NiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZXhwbWVkLmMgKGxzaGlmdF92YWx1ZSk6IEVuc3VyZSB0aGUgc2hpZnQgYW1vdW50IGlzIGluIHJhbmdlLgorCitNb24gT2N0ICA3IDIwOjQ1OjM1IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCwgc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcsCisJc2F2ZV9mb3JfaW5saW5lX25vY29weSwgZXhwYW5kX2lubGluZV9mdW5jdGlvbiwKKwlvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogVXNlIEdFVF9SVFhfQ0xBU1MuCisKKwkqIGxpc3Rpbmc6IFJlbW92ZSBSQ1MgQXV0aG9yIGFuZCBMb2cgZmllbGRzLgorCisJKiBjc2UuYyAoZXhwX2VxdWl2X3ApOiBGaXggdHlwb3MgaW4gY29tbWVudHMvc3BhY2luZy4KKwkqIGVtaXQtcnRsLmM6IExpa2V3aXNlLgorCSogZXhwbWVkLmMgKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IExpa2V3aXNlLgorCSogaW50ZWdyYXRlLmMgKHN1YnN0X2NvbnN0YW50cyk6IExpa2V3aXNlLgorCisJKiBsb25nbG9uZy5oOiBBZ2FpbiBmaXggc2FtZSB0eXBvIHByZXZpb3VzbHkgZml4ZWQgU2VwdCA1LgorCitNb24gT2N0ICA3IDE3OjI4OjIzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB4bS1taXBzLmggKE1JUFMpOiBEZWZpbmUgTUlQUyB0byAxIGluc3RlYWQgb2Ygbm90aGluZywgc28KKwltaXBzLXRmaWxlIHdpbGwgY29tcGlsZSBvbmNlIGFnYWluLgorCitNb24gT2N0ICA3IDE3OjEwOjMyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluKTogUGVkYW50aWNhbGx5IHdhcm4gaWYgbm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZS4KKwkoZmluY2x1ZGUpOiBMaWtld2lzZS4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogZnVuY2RlZl9mbGFnIG92ZXJyaWRlcyBwYXJtIGxldmVsLgorCitTdW4gT2N0ICA2IDE2OjM3OjMxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMubWQgKHBlZXBob2xlIGZvciBsby1zdW0gYW5kIGxvYWQgZGYpOiBVc2Ugb3V0cHV0X21vdmVfZG91YmxlLgorCisJKiB0cmVlLmggKERFQ0xfQlVJTFRfSU5fTk9OQU5TSSk6IE5ldyBmbGFnLgorCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IGZsYWcgZm9yIGBhbGxvY2EnLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUmVhcnJhbmdlZCB0byByZWR1Y2UgY29uZGl0aW9uYWxzLgorCUFsbG93IHJlZGVmaW5pbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFzIHN0YXRpYyBldmVuIGlmIG5ldyBkZWNsCisJaXMgbm90IGEgZnVuY3Rpb24uICBBbHNvIGFsbG93IGlmIGJ1aWx0LWluIGlzIG5vdCBBTlNJLgorCisJKiBvdXQtc3BhcmMuYyAob3V0cHV0X21vdmVfZG91YmxlKTogRml4IHR5cG8gaW4gdGVzdCBmb3IgdXNpbmcgbGRkLgorCitTdW4gT2N0ICA2IDEyOjU2OjE5IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogUmVuYW1lIHZhciBhZGRlZCBpbiBsYXN0CisJY2hhbmdlOyBzb21lIEMgY29tcGlsZXJzIGRvbid0IGxpa2UgIm9wdGFiIG9wdGFiOyIuCisKK1N1biBPY3QgIDYgMDk6MjY6NTUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1tZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IFdoZW4gd2Fsa2luZyB1cCBjb250ZXh0cywgaWYKKwlDT05URVhUIGJlY29tZXMgYSBfVFlQRSBub2RlLCBwb2ludCBpdCBhdCB0aGUgX0RFQ0wgbm9kZSBmb3IgdGhlCisJdHlwZS4KKworCSogY3BsdXMtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBQYXJlbWV0ZXIgQ09NUExBSU4gZGVsZXRlZC4gIE5vCisJbG9uZ2VyIHBlcmZvcm1zIHNhbml0eSBjaGVjayBieSBpdHNlbGYuCisJKGNoZWNrX2NsYXNzZm4pOiBOZXcgZnVuY3Rpb24uICBQZXJmb3JtcyBzYW5pdHkgY2hlY2sgdGhhdAorCWBncm9rY2xhc3NmbicgdXNlZCB0byBkby4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisKKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IEFkZCBuZXcgaWdub3JlZF9mbGFnOyBkZWxldGUKKwlsYW5nX2ZsYWdfOCB0byBtYWtlIHJvb20uCisJKERFQ0xfSUdOT1JFRF9QKTogTmV3IG1hY3JvLgorCShERUNMX0xBTkdfRkxBR184KTogRGVsZXRlZC4KKwkqIGNwbHVzLWRieG91dC5jIChkYnhvdXRfdHlwZSk6IFVzZSB0aGlzIG1hY3JvIGluc3RlYWQgb2YKKwlBTk9OX0FHR1JOQU1FX1AuCisJKiBjcGx1cy1kZWNsLmMgKHB1c2h0YWcpOiBTZXQgREVDTF9JR05PUkVEX1Agd2hlbiBhcHByb3ByaWF0ZS4KKwkqIGNwbHVzLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRW5zdXJlIERFQ0xfSUdOT1JFRF9QIHJlbWFpbnMKKwljb25zaXN0ZW50LgorCisJKiBjcGx1cy1kZWNsLmMgKGdyb2tmbmRlY2wpOiBJZiB3ZSBoYXZlIGFuIG92ZXJsb2FkZWQgb3BlcmF0b3IsIHNldAorCXRoZSBERUNMX05BTUUgdG8gc29tZXRoaW5nIHRoYXQgZGJ4b3V0LmMgY2FuIGhhbmRsZS4KKwkqIGNwbHVzLW1ldGhvZC5jIChoYWNrX29wZXJhdG9yKTogQ2hhbmdlIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlCisJdGhpcyBuZXcgYmVoYXZpb3IuCisJKiBjcGx1cy1pbml0LmMgKGRvX2ZyaWVuZCk6IERpdHRvLgorCitTYXQgT2N0ICA1IDE0OjMyOjAxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogQXZvaWQgZmV0Y2hpbmcgbWVtb3J5IG1vcmUgdGhhbiBvbmNlLgorCisJKiB0bS11bHRyaXguaCAoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IERlZmluZSBhcyAxLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogQ2xhcmlmeSBlcnJvciBtZXNzYWdlIGZvciBCVUlMVF9JTl9ORVhUX0FSRy4KKworU2F0IE9jdCAgNSAwODo0MjowMiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAoY2xlYXJfYW5vbl90YWdzKTogTmV3IGZ1bmN0aW9uLgorCShtYWtlX2Fub25fbmFtZSk6IE1vdmVkIGhlcmUgZnJvbSBjcGx1cy1tZXRob2QuYy4KKwkqIGNwbHVzLWxleC5jIChjaGVja19mb3JfbWlzc2luZ19zZW1pY29sb24sIG5vdGVfbGlzdF9nb3Rfc2VtaWNvbG9uKToKKwljYWxsIGBjbGVhcl9hbm9uX3RhZ3MnIHdoZW4gZG9uZS4KKwkqIGNwbHVzLWRieG91dC5jIChkYnhvdXRfdHlwZSk6IE5vIGxvbmdlciB0ZXN0IEFOT05fQUdHUk5BTUVfUCBmb3IKKwlUWVBFX05BTUVzIHRoYXQgYXJlIElERU5USUZJRVJfTk9ERVMuICBUaGV5IG5vIGxvbmdlciBhcHBlYXIgaW4gR05VCisJQysrLiAgQWxzbywgd2UgY2FuIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgbm8gYW5vbiBhZ2dybmFtZXMKKwlpbiB0YWcgbGlzdHMuCisKKwkqIGNwbHVzLWRlY2wuYyAoeHJlZl90YWcpOiBTZXQgVFJFRV9WRUNfTEVOR1RIIChCSU5GT1MpIHRvIHRoZQorCW51bWJlciBvZiBiYXNldHlwZXMgdGhhdCB3ZXJlIGFjdHVhbGx5IGFjY2VwdGVkLgorCisJKiBjcGx1cy1wYXJzZS55IChkYXRhZGVmLCBmbmRlZik6IEFjY2VwdCBgZXh0ZXJuICJDIicgYXMgYSBzdG9yYWdlCisJY2xhc3Mgc3BlY2lmaWVyLgorCisJKiBjcGx1cy1pbml0LmMgKGJ1aWxkX25ldyk6IEhhbmRsZSBhbGxvY2F0aW5nIHR5cGVzIHdob3NlIFRSVUVfVFlQRXMKKwlzdGFydCBvZmYgYXMgQVJSQVlfVFlQRXMuCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IFdlIGRvbid0IG5lZWQgdG8gd3JhcAorCUNVUlJFTlRfQ0xBU1NfREVDTCBpbiBhIE5PTl9MVkFMVUVfRVhQUiB3aGVuIHRha2luZyB0aGUgYWRkcmVzcyBvZgorCUNfQ19ELgorCisJKiBjcGx1cy1pbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IEZpeCBlcnJvciBtZXNzYWdlIGZvcgorCW5vbi1zdGF0aWMgbWVtYmVyIHJlZmVyZW5jZXMuICBBbHNvLCBkb24ndCBjcmFzaCBpZiBFWFAgaXMgbm90IGEKKwlUUkVFX0xJU1Qgb3IgYW4gT0ZGU0VUX1JFRi4KKworCSogY3BsdXMtZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IEhhbmRsZSBPRkZTRVRfUkVGcy4KKworCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBJZiBQRURBTlRJQywgZG9uJ3QKKwlwZXJtaXQgY29tcGFyaXNvbnMgYmV0d2VlbiBwb2ludGVycyBhbmQgaW50ZWdlcnMuCisKKwkqIGNwbHVzLWRlY2wyLmMgKGV4cGxpY2l0X3dhcm5fcmV0dXJuX3R5cGUpOiBOZXcgdmFyaWFibGUuCisJKiBjcGx1cy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVGVzdCBgZXhwbGljaXRfd2Fybl9yZXR1cm5fdHlwZScKKwlpbnN0ZWFkIG9mIGB3YXJuX3JldHVybl90eXBlJy4KKworCSogY3BsdXMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZpeCBjcml0ZXJpdW0gZm9yIGRlY2lkaW5nIHdoZXRoZXIKKwl0byB0dXJuIGEgRlVOQ1RJT05fVFlQRSBkZWNsYXJhdGlvbiBpbnRvIGEgTUVUSE9EX1RZUEUgZGVjbGFyYXRpb24KKwliYXNlZCBvbiBGUklFTkRQIGFuZCBTVEFUSUNQLgorCShpbXBsaWNpdGx5X2RlY2xhcmUpOiBJZiBQRURBTlRJQywgdHJlYXQgdGhpcyBhcyBhbiBlcnJvci4KKworCSogY3BsdXMtY3Z0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IE1ha2UgYW5hY2hyb25pc21zIGVycm9ycyBpZgorCVBFREFOVElDIGlzIG5vbnplcm8uCisKKwkqIGNwbHVzLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogSWYgUEVEQU5USUMsIGRvbid0IGxldAorCXZvaWQgKiBjb252ZXJ0IHRvIG5vbi12b2lkKiB0eXBlcy4gIFNpbWlsYXJseSwgZG9uJ3QgbGV0IGNvbnN0KgorCXBvaW50ZXJzIGJlIGFzc2lnbmVkIHRvIG5vbi1jb25zdCogcG9pbnRlcnMuICBTaW1pbGFybHkgZm9yIHNpZ25lZAorCXZzLiB1bnNpZ25lZCBwb2ludGVycy4KKwkod2Fybl9mb3JfYXNzaWdubWVudCk6IEFkZCBuZXcgcGFyYW1ldGVyIFNFVkVSRS4KKworCSogY3BsdXMtZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IElmIFBFREFOVElDLCBnaXZlIGVycm9yIHdoZW4KKwlmdW5jdGlvbnMgb3ZlcmxvYWQgdmFyaWFibGVzLgorCisJKiBjcGx1cy1kZWNsMi5jIChncm9rZmllbGQpOiBJZiBQRURBTlRJQywgZG9uJ3QgbGV0IGZpZWxkcyBoYXZlCisJaW5pdGlhbGl6ZXJzIChjb25kaXRpb25hbGl6ZWQgb24gUEVEQU5USUMpLgorCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFNldCBUWVBFX0dFVFNfe0FTU0lHTk1FTlQsSU5JVF9SRUZ9CisJZm9yIFVOSU9OX1RZUEUuCisKK1NhdCBPY3QgIDUgMDY6NTI6MjkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBDYXNlIGZvciBYID8gQSArIDEgOiBBIGNhbgorCWFsc28gaGFuZGxlIE1JTlVTX0VYUFIgYW5kIEJJVF8qX0VYUFIuCisKKwkqIHJ0bC5oIChjb3B5X3J0eF9pZl9zaGFyZWQpOiBEZWNsYXJlIGhlcmUuCisJKiBlbWl0LXJ0bC5jICh1bnNoYXJlX2NvcGllcyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUuCisJKGNvcHlfcnR4X2lmX3NoYXJlZCk6IE5vIGxvbmdlciBzdGF0aWMuCisJKHJlc2V0X3VzZWRfZmxhZ3MpOiBOZXcgZnVuY3Rpb24uCisJKiBjb21iaW5lLmMgKGNvcHlfc3Vic3RpdHV0aW9ucyk6IERlbGV0ZWQuCisJKHRyeV9jb21iaW5lKTogV2hlbiBtYWtpbmcgbmV3IGluc25zLCBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSBhbnkKKwlpbXByb3BlciBzaGFyaW5nIGJ5IHVzaW5nIGNvcHlfcnR4X2lmX3NoYXJlZDsgbm8gbG9uZ2VyIGNhbGwKKwljb3B5X3N1YnN0aXR1dGlvbnMuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBJZiBhbiBpbnNuIHRoYXQgaXMgYSBQQVJBTExFTCBvZiB0d28gc2V0cworCWlzbid0IHJlY29nbml6ZWQgYW5kIHRoZSByZXN1bHQgb2YgdGhlIHNlY29uZCBTRVQgaXMgdW51c2VkLCBpZ25vcmUgaXQuCisKK0ZyaSBPY3QgIDQgMTU6MjU6MzMgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKHNldF9pZGVudGlmaWVyX3R5cGVfdmFsdWUpOiBOZXcgZnVuY3Rpb24uICBDaGFuZ2UKKwlhbGwgY2FsbGVycyBvZiBtYWNybyBTRVRfSURFTlRJRklFUl9UWVBFX1ZBTFVFIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgorCWluc3RlYWQuCisKKwkqIGNwbHVzLWRlY2wuYyAocHVzaGRlY2wpOiBCYWNrIG91dCBTZXAgMjYgY2hhbmdlLiAgPz8/IFRoaXMgcHJvYmxlbQorCXJlYWxseSBoYXMgdG8gYmUgc29sdmVkIGluIGEgbW9yZSBnbG9iYWwgZmFzaGlvbi4KKwkoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiBOZXcgZmllbGQgYHR5cGVfc2hhZG93ZWQnIGZvciB0eXBlbmFtZXMgdGhhdAorCWdldCBzaGFkb3dlZC4gIEFsbCBwb3AqIHJvdXRpbmVzIHRoYXQgcmVzdG9yZSBmcm9tIHNoYWRvd2VkIGxpc3RzCisJbm93IHJlc3RvcmUgSURFTlRJRklFUl9UWVBFX1ZBTFVFIGZyb20gdGhlIGB0eXBlX3NoYWRvd2VkJyBmaWVsZC4KKworRnJpIE9jdCAgNCAxNDo0Nzo1MiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogc2Rib3V0LmMgKGluY2x1ZGUgb2Ygc3ltcy5oKTogRG9uJ3QgaW5jbHVkZSA8c3ltcy5oPiBvbiBNSVBTCisJc3lzdGVtcywgc2luY2UgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIHRoZSBmaWxlLCByYXRoZXIgdXNlCisJImdzeW1zLmgiLiAgVGhpcyBpcyBhIHByb2JsZW0gZm9yIFNpbGljb24gR3JhcGhpY3MsIGFuZCB0aGUgU3lzdGVtIFYKKwl2YXJpZW50IG9uIFJJU0MtT1MsIGJvdGggb2Ygd2hpY2ggZGVmaW5lIHRoZSBVU0cgbWFjcm8uICBQYXRjaCBmcm9tCisJam9uYXRoYW5AaXNvci52dXcuYWMubnouCisKK0ZyaSBPY3QgIDQgMTM6Mzc6MTEgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHN0b3ItbGF5b3V0LmMgKGdldF9iZXN0X21vZGUpOiBBZGQgYSB2b2xhdGlsZXAgcGFyYW1ldGVyCisJaW5kaWNhdGluZyB0aGF0IHRoZSBzbWFsbGVzdCBtb2RlIGlzIGRlc2lyZWQuCisJKiBleHBtZWQuYywgZm9sZC1jb25zdC5jOiBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCShvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSk6IEluaXRpYWxpemUge2wscn12b2xhdGlsZXAgbm93IHRoYXQKKwl0aGV5IGFyZSB1c2VkLgorCitUaHUgT2N0ICAzIDIyOjA4OjQ1IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3Rpb25zLmggKENMQVNTX1NVUEVSX05BTUUpOiBDaGFuZ2UgdHlwZS5iYXNldHlwZXMgdG8KKwl0eXBlLmJpbmZvIHNvIHRoYXQgaXQgd2lsbCBjb21waWxlLgorCitUaHUgT2N0ICAzIDA2OjQ2OjM4IDE5OTEgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgYXBwbGkuc2UpCisKKyAgICAgICAgKiBjcGx1cy10cmVlLmggKFBBUkFOT0lEKTogRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KKwkoe1NFVCxDTEVBUn1fQ0xBU1NUWVBFX01BUktFRCopOiBOZXcgbWFjcm9zIG5lZWRlZCB0byBnZXQgdGhyb3VnaAorCUMgY29tcGlsZXJzIHdobyBkb24ndCBhbGxvdyBjb21tYSBleHByZXNzaW9ucyBhcyBsdmFsdWVzLgorCSh7U0VULENMRUFSfV9CSU5GT18qKTogRGl0dG8uCisKKwkqIGNwbHVzLWluaXQuYzogVXNlIG5ldyBTRVQvQ0xFQVIgbWFjcm9zLgorCisJKiBjcGx1cy1zZWFyY2guYzogRGl0dG8uCisJCisJKiBjcGx1cy1kZWNsLmM6IERpdHRvLgorCShsb29rdXBfdGFnKTogQWNjZXB0ICpfREVDTHMgYXMgbm9kZXMgaW4gdGhlIGNvbnRleHQgY2hhaW4uCisJKGxvb2t1cF9uZXN0ZWRfdHlwZSk6IEFjY2VwdCBGVU5DVElPTl9ERUNMcyBub3Qgb25seSBhcyBoZWFkIG9mCisJdGhlIGNvbnRleHQgY2hhaW4sIGJ1dCBhdCBhbnkgcGxhY2UgaW4gaXQuCisKK1RodSBPY3QgIDMgMDY6NDI6MDggMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiBBZGQgbmV3IHN3aXRjaCAtV3BhcmVudGhlc2VzIGFuZAorCS1Xbm9wYXJlbnRoZXNlcyB0byBjb250cm9sIHdoZXRoZXIgR0NDIHdhcm5zIGFib3V0IGFkZGluZyBleHRyYSAoKSdzCisJYXJvdW5kIGEgc3ViZXhwcmVzc2lvbi4gIE1ha2UgLVdwYXJlbnRoZXNlcyBkZWZhdWx0IGJlaGF2aW9yLgorCSh3YXJuX3BhcmVudGhlc2VzKTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KKworCSogYy10cmVlLmggKHdhcm5fcGFyZW50aGVzZXMpOiBOZXcgdmFyaWFibGUuCisKKwkqIGMtdHlwZWNrLmMgKHBhcnNlcl9idWlsZF9iaW5hcnlfb3ApOiBDaGVjayBmb3Igd2Fybl9wYXJlbnRoZXNlcworCWJlZm9yZSBlbWl0dGluZyB3YXJuaW5ncyBhYm91dCBhZGRpbmcgKCkuCisKK1dlZCBPY3QgIDIgMjA6NTE6MDQgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBnY2MudGV4aW5mbzogQ29ycmVjdCBkb2N1bWVudGF0aW9uIGZvciBDT05TVEFOVF9BRERSRVNTX1AsCisJQ09OU1RBTlRfUCwgYW5kIEhJR0guCisKK1dlZCBPY3QgIDIgMTU6MDg6MzIgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJpZXMpOiBGaXggZXJyb3IgaW4gY29tcHV0aW5nCisJb2Zmc2V0cyB0byB1c2UgZm9yIHZpcnR1YWwgZnVuY3Rpb25zIGZyb20gdmlydHVhbCBiYXNlY2xhc3Nlcy4KKwkqIGNwbHVzLWV4Y2VwdC5jIChsb29rdXBfZXhjZXB0aW9uX3R5cGUpOiBDaGFuZ2UgbG9jYWwgdmFyaWFibGUgbmFtZQorCWBiaW5mbycgdG8gYGxpbmsnLgorCSogY3BsdXMtbGV4LmMgKHl5bGV4KTogQ2FzdCBzaG9ydHMgdG8gKGxvbmcpIHdoZW4gYnVpbGRpbmcgbG9uZ2xvbmcuCisKK1dlZCBPY3QgIDIgMTE6MzI6MzUgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLWVuY3Jvc2UuaCAobmV3IGZpbGUpOiBOZXcgY29uZmlndXJhdGlvbiBmaWxlIGZvciBFbmNvcmUKKwlNdWx0aW1heCBydW5uaW5nIE9TRi8xLCBhbmQgdXNpbmcgdGhlIE9TRi9yb3NlIG9iamVjdCBmb3JtYXRzLgorCitXZWQgT2N0ICAyIDA4OjMzOjA4IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB0cmVlLmggKFRZUEVfVUlEKTogQWRkIHRoaXMgZmllbGQgdG8gVFlQRSBub2Rlcy4KKwkqIHRyZWUuYyAobWFrZV9ub2RlKTogSW5pdGlhbGl6ZSBpdC4KKwkqIGR3YXJmb3V0LmMgKFRZUEVfTkFNRV9GTVQpOiBVc2UgVFlQRV9VSUQgcmF0aGVyIHRoYW4gVFJFRV9VSUQuCisJKGVxdWF0ZV90eXBlX251bWJlcl90b19kaWVfbnVtYmVyKTogRGlzY2FyZCB0eXBlIHF1YWxpZmllcnMuCisJKG91dHB1dF90eXBlZGVmX2RpZSk6IERvbid0IHVzZSBlcXVhdGVfdHlwZV9udW1iZXJfdG9fZGllX251bWJlci4KKworV2VkIE9jdCAgMiAwODowNDo1NyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX3Byb2Nlc3Nfbm90ZXMpOiBGaXggdHlwbzsgbWlzc2luZyBhcmcgaW4gcmV0dXJuLgorCitXZWQgT2N0ICAyIDA2OjU2OjEzIDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworICAgICAgICAqIE1ha2VmaWxlLmluIChFTlFVSVJFX0NGTEFHUyk6IFJlbW92ZSBkdXBsaWNhdGUgdXNlIG9mIEdDQ19DRkxBR1MuCisKKwkqIE1ha2VmaWxlLmluIChjcGx1cy10YWIuYyk6IEFkanVzdCBudW1iZXIgb2YgZXhwZWN0ZWQgY29uZmxpY3RzLgorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBSZW1vdmUgY29sbGVjdCBhbmQgY29sbGVjdDIuCisgICAKKwkqIHRtLXN2cjQuaDogQWRkIG5ldyBmaWxlOyBwcm90b3R5cGUgZm9yIFN5c3RlbSBWLCBSZWxlYXNlIDQuCisKK1R1ZSBPY3QgIDEgMjM6MDA6MTMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogRml4IGVycm9yIGluIHByZXZpb3VzIGNoYW5nZTsKKwljbGVhbiB1cCBSRUcgY2FzZSBzbyBpdCBpcyBlYXNpZXIgdG8gcmVhZC4KKworVHVlIE9jdCAgMSAxNDowNTo0NiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX3tkZWNsLGZ1bmN0aW9ufSk6IFVzZSBuZXcgZnVuY3Rpb24KKwlgbm90ZV9kZWJ1Z19pbmZvX25lZWRlZCcgaW5zdGVhZCBvZiBzZXR0aW5nIENMQVNTVFlQRV9BU01fV1JJVFRFTi4KKwkqIGNwbHVzLXNlYXJjaC5jIChub3RlX2RlYnVnX2luZm9fbmVlZGVkKTogTmV3IGZ1bmN0aW9uLgorCVJlY3Vyc2l2ZWx5IHNldCBDTEFTU1RZUEVfQVNNX1dSSVRURU4gaW4gYSBoaWVyYXJjaHkgd2hlbiBjYWxsZWQuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBJZiBERUNMX05BTUUgb2YgdGhlIEJBU0VfRk5ERUNMIGlzCisJTlVMTF9UUkVFLCB3ZSBrbm93IHdlJ3JlIGxvb2tpbmcgYXQgYSB2aXJ0dWFsIGRlc3RydWN0b3IuCisKK1R1ZSBPY3QgIDEgMDk6NDc6MjUgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBFbmFibGUgc2NoZWR1bGluZyBpbnNucyBub3cgZm9yCisJLU8yIG9wdGltaXphdGlvbi4KKworCSogTWFrZWZpbGUuaW4gKFNUQUdFU1RVRkYpOiBBZGQgJChFWFRSQV9QQVNTRVMpLCB0byBhbGxvdyBtb3ZpbmcgYW55CisJZXh0cmEgcGFzc2VzIGludG8gdGhlIHN0YWdlWzEyMzRdIGRpcmVjdG9yaWVzLCBhbmQgdG8gcmVtb3ZlIHRoZQorCWV4dHJhIHN0dWZmIHdoZW4gZG9pbmcgbWFrZSBjbGVhbi4KKworVHVlIE9jdCAgMSAwODozNToxMSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZHdhcmZvdXQuYyAoRlVOQ19FTkRfTEFCRUxfRk1ULCBUWVBFX05BTUVfRk1UKTogVW5kbyB0aGlzIGNoYW5nZS4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogV2hlbiBtYWtpbmcgYW4gdW5zaWduZWQgYml0ZmllbGQKKwl0eXBlIGZyb20gYSB0eXBlZGVmLCBwcmVzZXJ2ZSB0aGUgc2l6ZS4gIEEgdHlwZWRlZiBvZiBhbgorCWV4cGxpY2l0bHkgc2lnbmVkIHR5cGVkZWYgaXMgZXhwbGljaXRseSBzaWduZWQuCisKK01vbiBTZXAgMzAgMjI6NTE6MDcgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBvdXQtc3BhcmMuYzogRml4IG1pc2MgdHlwb3MgYW5kIGluZGVudGF0aW9uIHByb2JsZW1zLgorCURlbGV0ZSBhbGwgdW5uZWNlc3NhcnkgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKwlJbmNsdWRlICJyZWNvZy5oIi4KKwlDb25zaXN0ZW50bHkgdXNlIFBtb2RlIGluc3RlYWQgb2YgU0ltb2RlIGZvciBhZGRyZXNzZXMuCisJVXNlIG1hY3JvcyBkZWZpbmVkIGluIHRtLXNwYXJjLmggaW5zdGVhZCBvZiBtYWdpYyBudW1iZXJzLgorCShyZWdfb3JfMF9vcGVyYW5kKTogQWNjZXB0IENPTlNUX0RPVUJMRSB6ZXJvLgorCShzeW1ib2xpY19vcGVyYW5kKTogQWNjZXB0IENPTlNUX0RPVUJMRS4KKwkobW92ZV9vcGVyYW5kKTogQWNjZXB0IGFyaXRoX2RvdWJsZV9vcGVyYW5kICgnSCcpLCBTTUFMTF9JTlQKKwkoJ0knKSwgYW5kIHNldGhpIG9wZXJhbmRzICgnSycpLgorCShtb3ZlX3BpY19sYWJlbCk6IFJlbmFtZWQgZnJvbSBtb3ZlX3JlZ19vcl9pbW1lZF9vcGVyYW5kLiAgSWYKKwlmbGFnX3BpYyBpcyB0cnVlLCBhY2NlcHQgYSBMQUJFTF9SRUYsIG90aGVyd2lzZSBmYWlsLgorCShhcml0aF9kb3VibGVfb3BlcmFuZCk6IEFjY2VwdCBTTUFMTF9JTlQgKCdJJykgQ09OU1RfSU5Ucy4gIENvcnJlY3QKKwljb21wdXRhdGlvbiBvZiB3aGVuIGEgQ09OU1RfRE9VQkxFIGlzIGEgU01BTExfSU5UICgnSCcpLgorCShlbGlnaWJsZV9mb3JfZXBpbG9ndWVfZGVsYXkpOiBBY2NlcHQgYXJpdGhfZG91YmxlX29wZXJhbmRzLgorCShlbWl0X21vdmVfc2VxdWVuY2UpOiBIYW5kbGUgYXJpdGhfZG91YmxlX29wZXJhbmRzLiAgSGFuZGxlCisJbG9hZGluZyBvZiBsYWJlbHMgZm9yIHBpYywgbmVlZCB0byBhZGQgYSBjbG9iYmVyIG9mICVvNyAocmVnIDE1KS4KKwkoZmluZF9hZGRyX3JlZyk6IERvbid0IHJldHVybiBGUkFNRV9QT0lOVEVSX1JFR05VTS4gIEl0IGlzIG5vdAorCXNhZmUgdG8gcGxheSBhcm91bmQgd2l0aCB0aGUgZnJhbWUgcG9pbnRlci4KKwkoaGFyZF9yZWdub19tb2RlX29rKTogQ2hhbmdlIGZyb20gc2hvcnQgdG8gaW50IGFycmF5LgorCShvdXRwdXRfcGljX3NlcXVlbmNlLCBvdXRwdXRfcGljX3NlcXVlbmNlXzIsIGZwX3plcm9faG9vayk6IERlbGV0ZQorCWxvbmcgb2Jzb2xldGUgcm91dGluZXMuCisJKHByaW50X29wZXJhbmQpOiBEZWxldGUgc3VwcG9ydCBmb3Igb2Jzb2xldGUgJ1MnIGFuZCAnSCcgY2FzZXMuCisJKG91dHB1dF9kb3VibGVfaW50KTogTmV3IGZ1bmN0aW9uLiAgT3V0cHV0cyBhc3NlbWJsZXIgY29kZSBmb3IgNjQKKwliaXQgKERJbW9kZSkgdmFsdWVzLgorCisJKiBzcGFyYy5tZDogRml4IG1pc2MgdHlwb3MgYW5kIGluZGVudGF0aW9uIHByb2JsZW1zLgorCURlbGV0ZSB1bm5lY2Vzc2FyeSAoc2V0X2F0dHIgInR5cGUiICJiaW5hcnkiKSBsaW5lcy4KKwlDb25zaXN0ZW50bHkgdXNlICVhMSBpbiBzZXRoaSBhbmQgb3JpIG91dHB1dCB0ZW1wbGF0ZXMuCisJQ29uc2lzdGVudGx5IHVzZSBQbW9kZSBub3QgU0ltb2RlIGZvciBhZGRyZXNzZXMuCisJQ29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBwcmVkaWNhdGUgZm9yIGJvdGggb3BlcmFuZCAxIGFuZAorCW9wZXJhbmQgMiBpbiBjb21tdXRhdGl2ZSBwYXR0ZXJucy4gIERvbid0IHVzZSBzYW1lIHByZWRpY2F0ZSBpbgorCW5vbi1jb21tdXRhdGl2ZSBwYXR0ZXJucy4KKwlDb25zaXN0ZW50bHkgdXNlIFw7IHRvIHNlcGFyYXRlIG11bHRpcGxlIGluc3R1Y3Rpb25zLgorCUNoYW5nZSAiciUiIHRvICIlciIuCisJKGRlZmluZV9hdHRyIGxlbmd0aCk6IEhhbmRsZSBhcml0aF9kb3VibGVfb3BlcmFuZCBwcmVkaWNhdGUuCisJKG1vdnNpKTogQ29tYmluZSB0d28gbW92c2kgcGF0dGVybnMgaW50byBvbmUsIGV4Y2VwdCBmb3IgbG9hZGluZworCW9mIHBpYyBsYWJlbHMuCU5ldyBwYXR0ZXJuIHRvIGxvYWQgcGljIGxhYmVscywgd2hpY2ggY2xvYmJlcnMgJW83LgorCShtb3ZoaSk6IENvbWJpbmUgdHdvIG1vdmhpIHBhdHRlcm5zIGludG8gb25lLgorCShtb3ZxaSk6IENvbWJpbmUgdHdvIG1vdnFpIHBhdHRlcm5zIGludG8gb25lLgorCShtb3ZkaSk6IERpc2NvdXJhZ2UgdGhlIFEvZiBjb25zdHJhaW50IG9wdGlvbiBzbyB0aGF0IERJbW9kZQorCXZhcmlhYmxlcyB3b24ndCBlbmQgdXAgaW4gZmxvYXRpbmcgcG9pbnRlciByZWdpc3RlcnMuCisJKGZsb2F0c2lzZjIsIGZsb2F0c2lkZjIpOiBEZWxldGUgcGF0dGVybnMgYWNjZXB0aW5nIGEgY29uc3RfaW50CisJb3BlcmFuZC4gIFRoZXNlIHNob3VsZCBuZXZlciBiZSBtYXRjaGVkLiAgSW4gcmVtYWluaW5nIHBhdHRlcm5zLAorCWFjY2VwdCBub25pbW1lZGlhdGVfb3BlcmFuZCBpbnN0ZWFkIG9mIGdlbmVyYWxfb3BlcmFuZC4KKwkoYWRkZGkzLCBzdWJkaTMsIGFuZGRpMywgaW9yZGkzLCB4b3JkaTMsIHhub3JkaTMsIG9uZV9jbXBsZGkyKToKKwlBY2NlcHQgYXJpdGhfZG91YmxlX29wZXJhbmQgcHJlZGljYXRlcyBhbmQgIkhJIiBjb25zdHJhaW50cy4KKwkobGFzdCBwZWVwaG9sZSk6IFJlZyAwIHNob3VsZCBiZSBDQ21vZGUgbm90IFNJbW9kZS4KKworCSogdG0tc3BhcmMuaDogRml4IG1pc2MgdHlwb3MuCisJKFdPUkRTX0JJR19FTkRJQU4pOiBJbmRpY2F0ZSB3aHkgaXQgbXVzdCBiZSB0cnVlLgorCShoYXJkX3JlZ25vX21vZGVfb2spOiBDaGFuZ2UgZnJvbSBzaG9ydCB0byBpbnQgYXJyYXkuCisJKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBBZGQgbmV3ICdIJyBjb25zdHJhaW50LCBmb3IgREltb2RlCisJY29uc3RhbnRzIHRoYXQgY2FuIGZpdCBpbiBhbiBpbW1lZGlhdGUgZmllbGQuCisJKENPTlNUQU5UX0FERFJFU1NfUCk6IEFjY2VwdCBhbnkgQ09OU1RBTlRfUCwgaW5jbHVkaW5nCisJQ09OU1RfRE9VQkxFcy4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWNjZXB0IENPTlNUX0RPVUJMRXMgaWYgbWF0Y2ggJ0gnCisJY29uc3RhaW50LgorCShSVFhfQ09TVFMpOiBEZWZpbmUgY29zdCBmb3IgRkxPQVQgdG8gYmUgbW9yZSBleHBlbnNpdmUgdGhhbgorCUNPTlNUX0RPVUJMRXMsIHNvIHRoYXQgY3NlIHdpbGwgcHJlZmVyIHRoZSBsYXR0ZXIuCisJKEFTTV9PVVRQVVRfRE9VQkxFX0lOVCk6IE5ldyBtYWNybyB0byBvdXRwdXQgREltb2RlIGNvbnN0YW50cy4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBXaGVuIGNhbGN1bGF0aW5nIHJlZ2lzdGVyIGxpZmV0aW1lCisJaW5mbywgaGFuZGxlIENMT0JCRVJzIGFuZCBVU0VzLiAgVGhlIGNvZGUgdGhhdCBhZGRzIFJFR19ERUFEIG5vdGVzCisJYWxyZWFkeSBoYW5kbGVzIHRoZW0uCisJKHVwZGF0ZV9uX3NldHMpOiBOZXcgZnVuY3Rpb24sIHN1YnJvdXRpbmUgb2YgdXBkYXRlX2xpbmtzLgorCUdpdmVuIGEgU0VUIG9yIENMT0JCRVIsIHVwZGF0ZXMgcmVnX25fc2V0cyBhcyBhcHByb3ByaWF0ZSwKKwlkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGluIGEgZGVsZXRlZCBvciBhIG5ldyBpbnNuLgorCSh1cGRhdGVfbGlua3MpOiBDYWxsIHVwZGF0ZV9uX3NldHMgdG8gc3VidHJhY3QgaW5mbyBmb3Igc3BsaXQKKwlpbnNuLCBhbmQgYWRkIGluZm8gZm9yIGluc25zIHJlc3VsdGluZyBmcm9tIHRoZSBzcGxpdC4KKworTW9uIFNlcCAzMCAxOTowNjo1MCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogZWNvZmYtY21wIChUTVApOiBGaXggdHlwbywgZnJvbSBqb25hdGhhbkBpc29yLnZ1dy5hYy5uei4KKworCSogbWlwcy10ZmlsZS5jICh0b3BsZXZlbCk6IERvbid0IGRlY2xhcmUgX2Zsc2J1ZiB1bmRlciBTaWxpY29uCisJR3JhcGhpY3MsIGZyb20gam9uYXRoYW5AaXNvci52dXcuYWMubnouCisKK01vbiBTZXAgMzAgMTU6NTQ6MDIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9wcm9jZXNzX25vdGVzKTogTmV3IGZ1bmN0aW9uLgorCShjc2VfYmFzaWNfYmxvY2spOiBDYWxsIGl0IGZvciBlYWNoIGluc24uCisJKGNvdW50X3JlZ191c2FnZSk6IENvdW50IHVzYWdlIGluIGEgUkVHX0VRVUFMIG5vdGUuCisJKGRlbGV0ZV9kZWFkX2Zyb21fY3NlKTogQ2FsbCBjb3VudF9yZWdfdXNhZ2Ugd2l0aCBpbnNuLCBub3QgcGF0dGVybi4KKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogUmVwbGFjZSBhIHJlZ2lzdGVyIHVzZWQgaW4gYSBSRUdfRVFVQUwgbm90ZS4KKwkoZmluZF9zaW5nbGVfdXNlX2luX2xvb3ApOiBUd28gdXNlcyBpbiBzaW5nbGUgaW5zbiBkb2Vzbid0IGRpc3F1YWxpZnkuCisJQWxsb3cgYXJndW1lbnQgdG8gYmUgUkVHX05PVEVTLgorCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQ2FsbCBmaW5kX3NpbmdsZV91c19pbl9sb29wIG9uIFJFR19OT1RFUy4KKworTW9uIFNlcCAzMCAxNTo0NzowMyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNhbGwuYyAoaWRlYWxfY2FuZGlkYXRlKTogUmV0dXJuIDAgaWYgdGhlIHRvcCB0d28gY2FuZGlkYXRlcworCWhhdmUgaWRlbnRpY2FsIHJhbmtpbmdzIGJ1dCBpbmNvbXBhdGlibGUgdHlwZXMuCisKKwkqIGNwbHVzLWxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBTZXQgREVDTF9OQU1FIChGTikgdG8KKwlOVUxMX1RSRUUgaW4gb3JkZXIgdG8gbWFyayB0aGUgZnVuY3Rpb24gYXMgYmVpbmcgZ2VuZXJhdGVkIGJ5IHRoZQorCWNvbXBpbGVyLgorCSogY3BsdXMtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IENoYW5nZSB0byB1c2UgdGhpcyBpbnRlcmZhY2UuCisJKiBjcGx1cy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscywgcmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlKTogRGl0dG8uCisJKHN0b3JlX3Bhcm1fZGVjbHMpOiBEaXR0by4KKwkqIGNwbHVzLWRlY2wyLmMgKGdyb2tjbGFzc2ZuKTogRGl0dG8uCisJKiBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3R5cGVfbWV0aG9kcyk6IERpdHRvLgorCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogRGl0dG8uCisJKiBjcGx1cy1tZXRob2QuYyAoZm5kZWNsX2FzX3N0cmluZyk6IERpdHRvLgorCSogY3BsdXMtc2VhcmNoLmMgKGxvb2t1cF9mbmZpZWxkc18xKTogRGl0dG8uCisJKGNvbXB1dGVfdmlzaWJpbGl0eSk6IERpdHRvLgorCSogY3BsdXMtdHlwZWtjLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBEaXR0by4KKwkqIGNwbHVzLXRyZWUuYyAobGFuZ19wcmludGFibGVfbmFtZSk6IERpdHRvLiAgQWxzbyB1c2UKKwlERUNMX0FTU0VNQkxFUl9OQU1FIGluc3RlYWQgb2YgREVDTF9OQU1FIGluIERFU1RSVUNUT1JfTkFNRV9QIHRlc3QuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENoYW5nZSBhbHNvIG5lZWRlZCBoZXJlLgorCitNb24gU2VwIDMwIDE1OjMxOjUzIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmM6IEluY2x1ZGUgPHBhcmFtLmg+IGJlZm9yZSBjb25maWcuaCwgYmVjYXVzZSBpdCBtYXkgZGVmaW5lCisJTUlOIGFuZCBNQVguCisKKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBEZWxldGUgaW5jb3JyZWN0IHNob3J0IGN1dCBmb3IKKwkoMCAtIGNvbnN0KS4KKworCSogZXhwci5jIChkb190YWJsZWp1bXApOiBQYXNzIEdFVF9NT0RFIChpbmRleCkgaW5zdGVhZCBvZiBQbW9kZSB0bworCWVtaXRfY21wX2luc24sIGJlY2F1c2UgdGhlIGxhdHRlciBmYWlscyB3aGVuIGludGVnZXJzIGFuZCBwb2ludGVycworCWFyZSBkaWZmZXJlbnQgc2l6ZXMuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBXaGVuIGNoZWNraW5nIHRvIHNlZSBpZiBhc3NvY2lhdGluZyBoZWxwcworCXNpbXBsaWZ5IHJ0bCwgbWFrZSBzdXJlIHdlIHBhc3MgdGhlIGNvbnN0YW50IG9wZXJhbmQgaWYgYW55IGFzIHRoZQorCXNlY29uZCBvbmUgaWYgdGhpcyBpcyBhIGNvbW11dGF0aXZlIG9wZXJhdGlvbi4KKworCSogY2NjcC5jIChyZXNjYW4pOiBTYXZlIG9idWZwX2JlZm9yZV9tYWNyb25hbWUgYXMgYW4gb2Zmc2V0IGZyb20KKwl0aGUgc3RhcnQgb2Ygb3AtPmJ1ZiBpbnN0ZWFkIG9mIGFzIGEgcG9pbnRlciBpbnRvIHRoZSBtaWRkbGUsIGluCisJY2FzZSBvcC0+YnVmIGdldHMgcmVhbGxvY2VkLgorCitNb24gU2VwIDMwIDE0OjA3OjIwIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBkd2FyZm91dC5jIChGVU5DX0VORF9MQUJFTF9GTVQsIFRZUEVfTkFNRV9GTVQpOiBUUkVFX1VJRCBpcworCXVuaXF1ZSBvbmx5IGlmIHRoZSBub2RlIGlzIFRSRUVfUEVSTUFORU5ULiAgQXVnbWVudCB0aGUgc3BlbGxpbmcKKwlvZiBsYWJlbHMgdXNpbmcgVFJFRV9VSUQgd2l0aCB0aGUgVFJFRV9VSUQgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisKKwlDaGFuZ2VzIGZyb20gUm9uIEd1aWxtZXR0ZToKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9zeW1ib2wpOiBEZWFsIHdpdGggZm9ybWFsIHBhcmFtZXRlcnMgd2l0aCBhbgorCWluY29tcGxldGUgdGFnZ2VkIHR5cGUuCisJKG91dHB1dF9ib3VuZF9yZXByZXNlbnRhdGlvbik6ICBGaXggZm9yIGFycmF5cyB3aXRoIGR5bmFtaWMgYm91bmRzLgorCisJQ2hhbmdlcyBmcm9tIEppbSBXaWxzb246CisJKiBkd2FyZm91dC5jOiBEZWZpbmUgc3RycmNociB0byByaW5kZXggZm9yIG5vbiBVU0cgc3lzdGVtcy4KKwlVc2UgREVDTF9CSVRfRklFTERfVFlQRSBub3QgREVDTF9CSVRfRklFTEQgdG8gdGVzdCBmb3IgYml0ZmllbGRzLgorCitTdW4gU2VwIDI5IDE2OjI5OjA4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5oIChpbmRpcmVjdF9zeW1yZWZfb2spOiBOZXcgdmFyaWFibGUuCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBSZW1vdmUgc2hhZG93aW5nIGRlY2xzIG9mIGB0ZW0nLgorCU9ubHkgYWxsb3cgY2VydGFpbiBmb3JtcyBhZGRyZXNzZXMgYXMgaW5kaXJlY3Q7IGNoZWNrCisJaW5kaXJlY3Rfc3ltcmVmX29rIHRvIHNlZSBpZiAobWVtIChzeW1ib2xfcmVmIC4uLikpIGlzIGEgdmFsaWQKKwlhZGRyZXNzOyBpZiBub3QgdGhhdCBmb3JtIG9yIHNpbXBsZSwgbm90IHZhbGlkIGluZGlyZWN0IGFkZHJlc3MuCisJKiByZWxvYWQxLmMgKGluZGlyZWN0X3N5bXJlZl9vayk6IERlZmluZSBoZXJlLgorCShpbml0X3JlbG9hZCk6IEluaXRpYWxpemUgdmFycyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBhZGRycyBhcmUgdmFsaWQuCisJKHJlbG9hZCk6IERvbid0IGRvIGl0IGhlcmUuCisJVXBkYXRlIGNvbW1lbnQgdG8gcmVsZWN0IHdoYXQgYGFsdGVyX3JlZ3MnIGN1cnJlbnRseSBkb2VzLgorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2RlY2wpOiBBZGQgbmV3IGZyb21faW5saW5lX2ZsYWc7IGRlbGV0ZQorCWxhbmdfZmxhZ185IHRvIG1ha2Ugcm9vbS4KKwkoREVDTF9GUk9NX0lOTElORSk6IE5ldyBtYWNyby4KKwkoREVDTF9MQU5HX0ZMQUdfOSk6IERlbGV0ZWQuCisJKiBjLWRlY2wuYywgY3BsdXMtZGVjbC5jIChwdXNoZGVjbCk6IFVzZSBERUNMX0ZST01fSU5MSU5FIGluc3RlYWQgb2YKKwlUUkVFX0lOTElORSB3aGVyZSBhcHByb3ByaWF0ZS4KKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KKwkqIGludGVncmF0ZS5jIChpbnRlZ3JhdGVfcGFybV9kZWNscywgaW50ZWdyYXRlX2RlY2xfdHJlZSk6IFNldAorCURFQ0xfRlJPTV9JTkxJTkUgaW5zdGVhZCBvZiBUUkVFX0lOTElORS4KKwkqIHByaW50LXRyZWUgKHByaW50X25vZGUpOiBQcmludCBERUNMX0ZST01fSU5MSU5FLgorCURlbGV0ZSByZWZlcmVuY2UgdG8gREVDTF9MQU5HX0ZMQUdfOS4KKworU3VuIFNlcCAyOSAxMjo0OTo0NyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGMtZGVjbC5jLCBjLXR5cGVjay5jLCBjcGx1cy1kZWNsLmMsIHRvcGxldi5jOgorCVNldC90ZXN0IFRSRUVfQUREUkVTU0FCTEUgb2YgREVDTF9BU1NFTUJMRVJfTkFNRSwgbm90IERFQ0xfTkFNRSBmb3IKKwlmdW5jdGlvbiBkZWNscy4KKworCSogY3BsdXMtY2xhc3MuYzogRXhwb3J0IGBjdXJyZW50X2xhbmdfc3RhY2snIGFuZAorCWBjdXJyZW50X2xhbmdfYmFzZScuCisJY3BsdXMtZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IEFsbG93IHJlZGVjbGFyYXRpb24gb2YgYQorCWZ1bmN0aW9uIHRoYXQgd2FzIHByZXZpb3VzbHkgZ2l2ZW4gYSBsaW5rYWdlIHNwZWNpZmljYXRpb24gYXQKKwl0b3AtbGV2ZWwgKGkuZS4sIG5vdCBpbiBhbiBleHBsaWNpdCBsaW5rYWdlIGFyZW5hKS4KKworCSogY3BsdXMtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogU3RyaXAgdGhlIGAmJyBmcm9tIGFuCisJb3ZlcmxvYWRlZCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgaW50byBhbiBlbGxpcHNlcy4KKworU2F0IFNlcCAyOCAxNTozNzoyNiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF94X2JpbmFyeV9vcCk6IFdlIGhhdmUgdG8gc3BlY2lhbC1jYXNlIHRoZQorCWZhaWx1cmUgb2YgTUVNQkVSX1JFRiB0byBiZSBvdmVybG9hZGVkIGFzIGFuIG9wZXJhdG9yLgorCitTYXQgU2VwIDI4IDEwOjQ0OjM2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgd2UgZmluZCBhdCBzb21lIHBvaW50IHRoYXQgd2UgbmVlZAorCWNhbGxlci1zYXZlcywgZGlzYWJsZSBlbGltaW5hdGlvbiBvZiB0aGUgZnJhbWUgcG9pbnRlci4KKworCSogcmVsb2FkLmMgKHN1YnN0X3JlbG9hZHMpOiBSZS1lbmFibGUgY29kZSB0byBwcmV2ZW50IG1ha2luZworCWEgU1VCUkVHIGluc2lkZSBhIFNVQlJFRy4KKworU2F0IFNlcCAyOCAwMDo0MDo1MSAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKKworCSogY3BsdXMtcHQuYyAoZG9fcGVuZGluZ19leHBhbnNpb25zKTogQWRqdXN0ICJERUNJREUiIG1hY3JvIHRvIGF2b2lkCisJY29tcGlsZXIgd2FybmluZyBmcm9tIFN1biBjYy4KKworRnJpIFNlcCAyNyAxNzozMDozOSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKKworCSogY29uZmlndXJlWy5pbl06IE1vdmUgbW9zdCBvZiB0aGUgdGFyZ2V0X3ZlbmRvciBzd2l0Y2gKKwllbnRyaWVzIChlLmcuIG5leHQsIHN1biwgc29ueSkgZnJvbSB0aGUgbTg4ayBhcmNoaXRlY3R1cmUgdG8gbTY4aywKKwl3aGVyZSB0aGV5IGJlbG9uZy4KKworRnJpIFNlcCAyNyAxNjoyMTowNCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLXNlYXJjaC5jIChyZWN1cnNpdmVfYm91bmRlZF9iYXNldHlwZV9wKTogQWRkIG5ldyBwYXJhbWV0ZXIKKwlVUERBVEVfQ0hBSU4gc28gdGhhdCBmdW5jdGlvbiBub3cgYmVoYXZlcyBhcyBjb21tZW50IHByZXNjcmliZXMuCisJKiBjcGx1cy1zZWFyY2guYyAoY29tcHV0ZV92aXNpYmlsaXR5KTogRml4IGVycm9yIGluIGNvbnZlcnNpb24gb2YKKwlkYXRhIHN0cnVjdHVyZXMgZnJvbSBsaXN0LWJhc2VkIHRvIGJpbmZvLWJhc2VkIG5vZGVzLgorCitGcmkgU2VwIDI3IDA3OjA1OjU3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IEZpeCB0eXBvOiBUUkVFX0VYVEVSTkFMIG1pc3NwZWxsZWQuCisKK1RodSBTZXAgMjYgMTc6MzY6MTQgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIHRtLW1pcHMuaCAoQVNNX0ZJTkFMX1NQRUMpOiBIYW5kbGUgZ2NjIC1jIC1vIGZvbyBiYXIuYy4KKworCSogdG0tZGVjcm9zZS5oIChBU01fRklOQUxfU1BFQyk6IEhhbmRsZSBnY2MgLWMgLW8gZm9vIGJhci5jLgorCisJKiBtYWtlLWRlY3Jvc2UgKGNwbHVzLWxleCBydWxlKTogUmVtb3ZlIGhhY2tzIGluIGNvbXBpbGluZworCWNwbHVzLWxleCwgc2luY2UgYnVnIGluIDEuMzkgaW5saW5pbmcgd2FzIGZpeGVkIHRvIGFsbG93IHVzIHRvCisJY29tcGlsZSB0aGUgbW9kdWxlIG5vcm1hbGx5LgorCitUaHUgU2VwIDI2IDExOjUzOjQ5IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQorCisJKiBjcGx1cy10cmVlLmggKFRFTVBMQVRFX1RZUEVfKik6IFVzZSBzbG93ZXIgdmVyc2lvbnMgdGhhdCB1c2VzIHRyZWUKKwlzdHJ1Y3R1cmVzIG1vcmUgcHJvcGVybHksIHNvIGFjY2Vzc29yIG1hY3JvcyBkb24ndCBsb3NlLgorCisJKiBjcGx1cy1wdC5jIChlbmRfdGVtcGxhdGVfcGFybV9saXN0KTogRm9yIHR5cGUgcGFyYW1ldGVycywgbWFrZSB0aGUKKwluZXcgZGVjbCBiZSB0aGUgbmFtZSBvZiB0aGUgInR5cGUiLgorCisJKiBNYWtlZmlsZS5pbiAoY3BsdXMtdGFiLntjLGh9KTogVGhlcmUgYXJlIG5vdyAzMCBzL3IgY29uZmxpY3RzLgorCisJKiBjcGx1cy1jbGFzcy5jIChyZXNvbHZlc190b19maXhlZF90eXBlX3AsIGNhc2UgQ0FMTF9FWFBSKTogRGVsZXRlZAorCWR1cGxpY2F0ZSBjb2RlLgorCisJKiBjcGx1cy1kZWNsLmMgKHBvcGxldmVsKTogRGVsZXRlZCBkdXBsaWNhdGUgY29kZSBzYXZpbmcgaW5mbyBvbgorCWFjY2Vzc2VzIHRvIGV4dGVybmFsIHZpYSBub24tZ2xvYmFsIGRlY2xzLgorCShwdXNoZGVjbCk6IEZvciB0eXBlZGVmIG9mIHVubmFtZWQgdHlwZSwgZG9uJ3Qgc3RvcmUgbmV3IG5hbWUgZm9yCisJdHlwZSBpZiBub3QgYXQgZ2xvYmFsIGJpbmRpbmcgc2NvcGUuICBBbHNvLCBkb24ndCBuZWVkIHRvIHRlc3QgZm9yCisJVFlQRV9ERUNMIHdoZW4gcHJldmlvdXMgY29uZGl0aW9uYWwgZ3VhcmFudGVlcyBpdC4KKwkoc3RhcnRfZGVjbCk6IENsZWFyIFRSRUVfUFVCTElDIGZsYWcgb2YgdGVtcGxhdGVzLgorCShmaW5pc2hfZGVjbCk6IEZvciB2YXJpYWJsZXMgaW4gc3RhdGljIHN0b3JhZ2Ugd2l0aCBjb25zdHJ1Y3RvcnMsCisJZm9yY2UgaXQgaW50byBkYXRhIHNlY3Rpb24gKG91dCBvZiBjb21tb24gc3RvcmFnZSkgb25seSBpZiB0aGUgbmFtZQorCWlzIGV4dGVybmFsbHkgdmlzaWJsZS4KKworCSogY3BsdXMtZ2MuYyAodHlwZV9uZWVkc19nY19lbnRyeSk6IElmIHRoZSB0eXBlIGhhcyBubyBiYXNlIHR5cGVzLAorCWRvbid0IGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZXkgbmVlZCBnYyBlbnRyaWVzLgorCisJKiBjcGx1cy1wYXJzZS55ICh5eXByaW50KTogSGFuZGxlIFNDU1BFQyBhbmQgQUdHUi4KKworCSogY3BsdXMtcHQuYyAoZW5kX3RlbXBsYXRlX2RlY2wpOiBDbGVhciBJREVOVElGSUVSX1RZUEVfVkFMVUUgc2xvdHMKKwlmb3IgdHlwZSBwYXJhbWV0ZXJzLCB0aGVuIGNhbGwgYWRqdXN0X3R5cGVfdmFsdWUuCisJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG8gbm90aGluZyBpZiBjbGFzc25hbWUgaXMKKwllcnJvcl9tYXJrX25vZGUuCisJKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IE1ha2UgYnVmIGEgc3RhdGljIGFycmF5LCBzaW5jZQorCWl0cyBhZGRyZXNzIGdldHMgcmV0dXJuZWQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUHJvdmlkZSBhcnJheSBzaXplIGluIGNhc3QsIHRvIGF2b2lkIGNvbXBpbGVyCisJd2FybmluZ3MuCisKKwlGcm9tIE5pa2xhcyBIYWxscXZpc3Q6CisJKiBjcGx1cy10cmVlLmggKHN0cnVjdCB0ZW1wbGF0ZV9pbmZvKTogQWRkZWQgbmV3IGZpZWxkICJhZ2dyIiwgd2hpY2gKKwl3aWxsIGJlIGNsYXNzX3R5cGVfbm9kZSBvciBzdHJ1Y3RfdHlwZV9ub2RlIGZvciBjbGFzcyBvciBzdHJ1Y3QKKwl0ZW1wbGF0ZXMuCisJKiBjcGx1cy1wYXJzZS55ICh0ZW1wbGF0ZV9kZWYpOiBQYXNzIGN1cnJlbnRfYWdnciB0bworCWVuZF90ZW1wbGF0ZV9kZWNsLgorCSh0ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogVXNlIGFnZ3IgZmllbGQuCisJKiBjcGx1cy1wdC5jIChlbmRfdGVtcGxhdGVfZGVjbCk6IEFyZ3VtZW50IElTX0NMQVNTIGlzIG5vdyBhIHRyZWUsCisJdXNlZCB0byBzZXQgdGhlIGFnZ3IgZmllbGQuCisJKG92ZXJsb2FkX3RlbXBsYXRlX25hbWUpOiBVc2UgYWdnciBmaWVsZC4KKworCVN1Z2dlc3RlZCBieSBKb2huIENhcnI6CisJKiBjcGx1cy1kYnhvdXQuYyAoZGJ4b3V0X3RhZ3MpOiBEb24ndCBvbWl0IGFyZ3VtZW50IHRvCisJZGJ4b3V0X2ZpbmlzaF9zeW1ib2wuCisJKGRieG91dF9jb250aW51ZSk6IE9taXQgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gaWYKKwlEQlhfQ09OVElOX0xFTkdUSCBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8sIGxpa2UgaXRzIGNhbGxzLgorCShwcmludF9pbnRfY3N0X29jdGFsKTogRGl0dG8sIGJhc2VkIG9uIGRlZmluZWQoV0lOTklOR19HREIpLgorCSogY3BsdXMtZGVjbC5jIChHTlVfZW5kX3Njb3BlKTogTmV2ZXIgdXNlZDsgZGVsZXRlZC4KKwkocHVzaGRlY2wpOiBWYXJzIG5nbG9iYWxzLCBsZW4gYXJlIHVzZWQgb25seSBpbiBjb2RlIHVuZGVyICIjaWYgMCI7CisJY29tbWVudCBvdXQgZGVjbHMgYXMgd2VsbC4KKwkqIGNwbHVzLWdjLmMgKGV4cGFuZF9nY19wcm9sb2d1ZV9hbmRfZXBpbG9ndWUpOiBWYXJpYWJsZSAiaGVhZCIgd2FzCisJdW51c2VkOyBkZWxldGVkLgorCSogY3BsdXMtaW5pdC5jIChleHBhbmRfYWdncl92YmFzZV9pbml0XzEpOiBBbGwgYXJncyBhcmUgdHlwZSB0cmVlLgorCShleHBhbmRfdmVjX2luaXQpOiBEb24ndCByZXR1cm4gd2l0aG91dCBhIHZhbHVlIHdoZW4gImluaXRpYWxpemVyCisJZW5kcyBwcmVtYXR1cmVseSIuCisJKiBjcGx1cy1tZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBQYXNzIGFsbCBuZWNlc3NhcnkKKwlhcmd1bWVudHMgaW4gcmVjdXJzaXZlIGNhbGwuCisJKiBjcGx1cy1zZWFyY2guYyAocG9wX3R5cGVfbGV2ZWwpOiBDYXN0IGFyZ3VtZW50IHRvIHBvcF9zdGFja19sZXZlbAorCXRvIHByb3BlciB0eXBlLgorCShwdXNoX21lbW9pemVkX2NvbnRleHQpOiBEaXR0byBmb3IgcHVzaF90eXBlX2xldmVsLgorCShteV9jb3B5X25vZGUpOiBVbnVzZWQ7IGRlbGV0ZWQuCisJKGxvb2t1cF9mbmZpZWxkcyk6IEFkZCBtaXNzaW5nIGFyZyB0byBnZXRfYmluZm8uCisJKGxvb2t1cF9maWVsZCk6IERpdHRvLgorCisJRnJvbSBOaWtsYXMgSGFsbHF2aXN0OgorCSogY3BsdXMtZGVjbC5jIChwdXNoX3RvX3RvcF9sZXZlbCk6IEhhbmRsZSBjYXNlIG9mIGZ1bmN0aW9uIHdpdGgKKwl1bm5hbWVkIHBhcm1zLgorCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBEaXR0by4KKworVGh1IFNlcCAyNiAwNzo0NjowOCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IERvbid0IGVsaW1pbmF0ZSByZWdpc3RlciB0aGF0IGlzIHNldCBieSAKKwljb25zZWN1dGl2ZSBpbnNucy4KKworV2VkIFNlcCAyNSAxODo1Mzo1MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IFN1cHByZXNzIHdhcm5pbmdzIGFib3V0IG1pc21hdGNoIG9mCisJZXh0ZXJuIGRlY2wgd2hlbiBpdCBjb21lcyBmcm9tIGlubGluaW5nIGEgZnVuY3Rpb24uCisKKwkqIGVtaXQtcnRsLmMgKHNldF9uZXdfZmlyc3RfYW5kX2xhc3RfbGFiZWxfbnVtYmVyKTogTmV3IGZ1bmN0aW9uLgorCShtYXhfbGFiZWxfbnVtKTogVXNlIGxhc3RfbGFiZWxfbnVtIGlmIHZhbGlkLgorCSogaW50ZWdyYXRlLmMgKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIHNldF9uZXdfLi4uCisKK1dlZCBTZXAgMjUgMTg6Mzc6MzYgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmxvdy5jIChmaW5kX2F1dG9faW5jKTogU2V0IEJMT0NLX05VTSBvZiBuZXcgaW5zbnMgZW1pdHRlZCB3aGlsZQorCW1ha2luZyBhbiBhdXRvLWluYy4KKworCSogTWFrZWZpbGUuaW4gKGdldG9wdCoubyk6IEVhY2ggZmlsZSBkZXBlbmRzIG9uIGl0cyAuYyBmaWxlIGFuZCBvbgorCXRoZSBjb21waWxlciBleGVjdXRhYmxlIGZpbGVzLgorCitXZWQgU2VwIDI1IDE4OjE4OjQ2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGRlYnVnX2luZm9fbGV2ZWwpOiBOZXcgdmFyaWFibGUuCisJKiBmbGFncy5oIChkZWJ1Z19pbmZvX2xldmVsLCBlbnVtIGRlYnVnX2luZm9fbGV2ZWwpOiBOZXcgZGVjbGFyYXRpb25zLgorCSogdG9wbGV2LmMgKG1haW4pOiBSZXdyaXRlIGhhbmRsaW5nIG9mIC1nKiBhbmQgLUcqIG9wdGlvbnMuCisJTm93IC1HIGluZGljYXRlcyB1c2Ugb2YgR0RCIGV4dGVuc2lvbnMuICAtZzAgcmVtb3ZlZC4KKworVHVlIFNlcCAyNCAwMzoyMDowNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGFsbG9jYS5jOiBUZXN0IF9fU1REQ19fLCBub3QgWDNKMTEuCisJRG8gbm90aGluZyBpZiBhbGxvY2EgaXMgZGVmaW5lZCBhcyBhIG1hY3JvLgorCitUdWUgU2VwIDI0IDA5OjE1OjE3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdsb2JhbC1hbGxvYy5jIChlbGltaW5hYmxlX3JlZ3NldCk6IE5ldyB2YXJpYWJsZS4KKwkoZ2xvYmFsX2FsbG9jKTogQ29tcHV0ZSBpdCBhbmQgdXNlIHRvIHR1cm4gb2ZmIGNvbmZsaWN0cy4KKwlSZWZpbmUgY29tcHV0YXRpb24gb2Ygbm9fZ2xvYmFsX2FsbG9jX3JlZ3Mgd2hlbiBFTElNSU5BQkxFX1JFR1MgaXMKKwlkZWZpbmVkLgorCShtYXJrX2VsaW1pbmF0aW9uKTogRG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBhbGxvY25vcyBhbmQgZG9uJ3QgZG8KKwlhbnkgYWxsb2NhdGlvbi4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogVHJ5IHRvIHJlLXJlY29nbml6ZSBpbnNuIGlmCisJd2UgcmVwbGFjZWQgYSAoc2V0IFggKHBsdXMgWSBaKSkuCisKK1R1ZSBTZXAgMjQgMDY6MzQ6MDQgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcGx1cy10cmVlLmMgKHZpcnR1YWxfbWVtYmVyKTogQ2hhbmdlIFRSRUVfVkFMVUUgYWNjZXNzb3IgbWFjcm8gdG8KKwlCSU5GT19UWVBFLgorCSogdHJlZS5oIChCSU5GT19UWVBFKTogTmV3IG5hbWUgZm9yIEJJTkZPX1ZBTFVFLgorCSogQWxsIGNwbHVzLSogZmlsZXM6IENoYW5nZWQgdG8gcmVmbGVjdCBuZXcgbmFtZS4KKworTW9uIFNlcCAyMyAxMjo1NjoxMSAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogdG0tbWlwcy5oIChBU01fU1BFQyk6IEZpeCB0eXBvLCBhbmQgY2xvc2Uge30ncyBwcm9wZXJseS4KKworTW9uIFNlcCAyMyAxMDozMDo1MSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwbHVzLXRyZWUuYyAocHJvcGFnYXRlX2Fzc29jX29mZnNldHMpOiBLZWVwIHJlbGF0aXZlIG9mZnNldHMgb2YKKwljaGlsZF9jaGlsZCBjb3JyZWN0IHdoZW4gY29weWluZyBjaGlsZHJlbi4KKworCSogY3BsdXMtY2xhc3MuYyBVc2UgYEJJTkZPX1ZBTFVFJyBpbnN0ZWFkIG9mIGBUUkVFX1ZBTFVFJyB3aGVuCisJYWNjZXNzaW5nIHRoZSB0eXBlIHZhbHVlIG9mIGEgYmluZm8gbm9kZS4KKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRGl0dG8uCisJKiBjcGx1cy1pbml0LmMgKGJ1aWxkX3ZiYXNlX2RlbGV0ZSk6IERpdHRvLgorCitNb24gU2VwIDIzIDA2OjExOjU2IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAocmVnX25fcmVmcyk6IFVzZSBpbnQsIG5vdCBzaG9ydC4gIFNob3J0IGNhbiBvdmVyZmxvdworCWlmIHdlIGhhdmUgdmVyeSBkZWVwIGxvb3AgbmVzdGluZy4KKwkoYWxsb2NhdGVfZm9yX2xpZmVfYW5hbHlzaXMpOiBBbGxvY2F0ZSByZWdfbl9yZWZzIGFzIGludC4KKwkqIHJlZ3MuaCAocmVnX25fcmVmcyk6IE5vdyBpbnQuCisJKiBzY2hlZC5jOiBEZWxldGUgZHVwbGljYXRlIGRlZmluaXRpb25zIG9mIG9iamVjdHMgZGVmaW5lZCBpbiByZWdzLmguCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBDb3JyZWN0bHkgY2hlY2sgZm9yIGluZGVwZW5kZW50IGluc25zCisJaW4gYSBQQVJBTExFTC4KKworCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGUsIGNhc2UgUkVHX0RFQUQpOiBJZiB3ZSBkaXNjb3ZlciBhIHJlZ2lzdGVyCisJaXMgbmV2ZXIgdXNlZCwgc2VlIGlmIHdlIGNhbiBkZWxldGUgdGhlIGluc24gdGhhdCBzZXQgaXQuCisKK1N1biBTZXAgMjIgMTk6MjQ6NTIgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy10eXBlMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBEb24ndCBmb3JnZXQgYSB2YWxpZAorCWZ1bmN0aW9uIGNhbGwgaWYgd2UgZm91bmQgb25lIChhbmQgbm90aGluZyBtb3JlKS4KKworU3VuIFNlcCAyMiAwNzo0ODoxOCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGxhbmFsLmMgKHJ0eF92YXJpZXNfcCwgY2FzZSBSRUcpOiBDb3JyZWN0IHR5cG87IHNlbnNlIG9mIGNvbXBhcmlzb24KKwl3YXMgYmFja3dhcmRzLgorCisJKiBnbG9iYWwtYWxsb2MuYyAobWFya19lbGltaW5hdGlvbik6IERvbid0IHVzZSBIQVJEX1JFR19TRVQgbWFjcm9zCisJdG8gYWNjZXNzIGJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQuCisKKwkqIHJlbG9hZDEuYyAoc2V0X2xhYmVsX29mZnNldHMpOiBOZXcgZnVuY3Rpb24uCisJKG9mZnNldHNfa25vd25fYXQsIG9mZnNldHNfYXQpOiBOZXcgdmFyaWFibGVzLgorCShyZWxvYWQpOiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGVtLgorCVNldCBlYWNoIGxhYmVsIGluIEZPUkNFRF9MQUJFTFMgdG8gYmUgYXQgaW5pdGlhbCBvZmZzZXRzLgorCUNhbGwgc2V0X2xhYmVsX29mZnNldCBvbiBhbGwgaW5zbnMgdGhhdCBtaWdodCBpbnZvbHZlIGxhYmVscy4KKwlVc2UgR0VUX1JUWF9DTEFTUyB3aGVuIGFwcHJvcHJpYXRlLgorCShlbGltaW5hdGVfcmVncywgbWFya19ub3RfZWxpbWluYWJsZSk6IElnbm9yZSBzZXRzIG9mIEZQIHdoZW4gbG9va2luZworCWZvciBzZXRzIG9mIGEgInRvIiByZWdpc3Rlci4KKwkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IE5vIGxvbmdlciBzdXBwcmVzcyBlbGltaW5hdGlvbiBmb3IgYW55CisJcGFpciBub3QgYXQgaXRzIGluaXRpYWwgb2ZmZXQgYXQgYSBqdW1wLgorCQorCSogY29tYmluZS5jIChkaXN0cmlidXRlX2xpbmtzKTogQ29ycmVjdGx5IGZpbmQgdGhlIHBsYWNlIHRvIHB1dCBhCisJbGluay4gIEhhbmRsZSB0aGUgY2FzZSB3aGVuIHdlIGVsaW1pbmF0ZSBhbGwgdXNlcyBvZiBzb21ldGhpbmcgdGhhdAorCXdlIHVzZWQgdG8gdXNlOyBpbiB0aGF0IGNhc2UsIHdlIG11c3Qgc2VhY2ggZm9yd2FyZC4KKwlObyBsb25nZXIgbmVlZCBJMywgSTIsIG9yIEFMTF9BREpBQ0VOVCBhcmd1bWVudHMuCisJKHRyeV9jb21iaW5lKTogQ2hhbmdlIGNhbGxzIHRvIGRpc3RyaWJ1dGVfbGlua3MuCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IFVzZSBHRVRfUlRYX0NMQVNTIHdoZW4gYXBwcm9wcmlhdGUuCisJSWYgR09BTCBpcyBhIE1FTSB3aG9zZSBhZGRyZXNzIHZhcmllcywgY2hlY2sgd2hldGhlciByZWdpc3RlcnMKKwl0aGF0IGFyZSBTRVQgYXBwZWFyIGluIHRoZSBhZGRyZXNzIHJhdGhlciB0aGFuIGFzc3VtaW5nIHRoZXkgZG8uCisJRW5zdXJlIFJFR19JTkMgbm90ZSBpcyBhIFJFRzsgaWdub3JlIGl0IGlmIG5vdC4KKworCSogcnRsYW5hbC5jIChydHhfdmFyaWVzX3ApOiBSZXdvcmsgdG8gdXNlIHN3aXRjaCBzdGF0ZW1lbnQuCisJQ2hlY2sgZm9yIHtmcmFtZSxhcmd9X3BvaW50ZXJfcnR4LCBub3QganVzdCByZWdpc3RlciBudW1iZXIuCisJKHJ0eF9hZGRyX2Nhbl90cmFwX3ApOiBOZXcgZnVuY3Rpb24uCisJKG1heV90cmFwX3ApOiBVc2UgcnR4X2FkZHJfY2FuX3RyYXBfcCBpbnN0ZWFkIG9mIHJ0eF92YXJpZXNfcC4KKwkqIGdlbmF0dHJ0YWIuYzogRGVmaW5lIHtmcmFtZSxhcmcsc3RhY2t9X3BvaW50ZXJfcnR4IGZvciBydGxhbmFsLmMuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogTWFrZSBhIFpFUk9fRVhUUkFDVCBmb3Igc29tZXRoaW5nIHdpdGgKKwlwb3MgPT0gMCBpZiBpdCB3aWxsIGJlIHBsYWNlZCBpbiBhIFNFVF9ERVNULgorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogUm90YXRlIGNhc2Ugd2FzIG1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudC4KKwlleHR6diBjYXNlIGhhZCB3cm9uZyBhcmcgdG8gZGVsZXRlX2luc25zX3NpbmNlLgorCVJlbW92ZSB1bm5lZWRlZCBjYWxscyB0byBkZWxldGVfaW5zbnNfc2luY2UuCisJQWxsb3cgQklUU19CSUdfRU5ESUFOIHRvIHZhcnkgYXQgcnVuLXRpbWUuCisJVXNlIHZhcmlhYmxlIFRFTVAgaW4gYSBjb25zaXN0ZW50IG1hbm5lci4KKwlPdGhlciBtaXNjZWxsYW5lb3VzIGNoYW5nZXMgYW5kIGNsZWFudXBzIHdlcmUgbWFkZS4KKworCSogZmxvdy5jIChtYXhfdWlkX2Zvcl9mbG93KTogTmV3IHZhcmlhYmxlLgorCShmbG93X2FuYWx5c2lzKTogQ29tcHV0ZSBtYXhpbXVtIHVpZCBpbnRvIG1heF91aWRfZm9yX2Zsb3c7IGlmCisJd2UgbWlnaHQgaGF2ZSBhdXRvLWluYywgbGVhdmUgc29tZSBzcGFjZS4KKwkoZmluZF9hdXRvX2luYyk6IFZlcmlmeSB0aGF0IHRoZSB1aWQncyBvZiB0aGUgaW5zbnMgd2UgbWFrZSBhcmUKKwl3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZSBvZiBvdXIgcGVyLWluc24gdGFibGVzLgorCVVzZSBnZXRfaW5zbnMgaW5zdGVhZCBvZiBnZW5fc2VxdWVuY2UuCisKKwkqIGdsb2JhbC1hbGxvYy5jIChyZXRyeV9nbG9iYWxfYWxsb2MpOiBXaGVuIHdlIGFsbG9jYXRlIGEgcmVnaXN0ZXIsCisJdXBkYXRlIHJlZ25vX3JlZ19ydHggYW5kIG1hcmsgdGhlIGFsbG9jYXRlZCByZWdpc3RlciBsaXZlLgorCShtYXJrX2VsaW1pbmF0aW9uKTogTmV3IGZ1bmN0aW9uLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYWxsIG1hcmtfZWxpbWluYXRpb24gZm9yIGV2ZXJ5IGVsaW1pbmF0aW9uCisJd2UgaGF2ZSBiZWVuIGFibGUgdG8gZG8uCisJKHNwaWxsX2hhcmRfcmVnKTogTm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBtYXJrX2hvbWVfbGl2ZS4KKworU3VuIFNlcCAyMiAwMjowNzo1NSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBSZWRpcmVjdCBjbXAgb3V0cHV0IHRvIC9kZXYvbnVsbDsgZG9uJ3QgY2xvc2UgaXQuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9mdW5jdGlvbik6IEhhbmRsZSBBU01fT1VUUFVUX0ZVTkNUSU9OX1BSRUZJWC4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogTm8gbmVlZCB0byBnb3RvIHRleHQgc2VjdGlvbgorCWZvciBsYWJlbCBvbiBqdW1wIHRhYmxlLiAgV2UncmUgbm9ybWFsbHkgaW4gdGhlIHRleHQgc2VjdGlvbi4KKworU2F0IFNlcCAyMSAxNDo1OTozMiAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1jYzEuY29tOiAgRml4IHR5cG8gaW4gY29kZSB0aGF0IGRlY2lkZXMgaWYgYmlzb24gbmVlZHMgdG8gYmUKKwlydW4uICBBbHNvLCBkaXNwbGF5IGEgbWVzc2FnZSB3aGVuIGJ1aWxkaW5nIHRoZSBjb21waWxlciB0aGF0IGluZm9ybXMKKwl0aGUgdXNlciBhYm91dCB0aGUgbmVlZCB0byB1cGRhdGUgdGhlIGFzc2VtYmxlci4KKworU2F0IFNlcCAyMSAxNzoyMzowNyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHN0cnVjdCBtb3ZhYmxlKTogQWRkIGZpZWxkIERFUEVOREVOQ0lFUy4KKwkoc2Nhbl9sb29wKTogUmVtb3ZlIG1lY2hhbmlzbSBiYXNlZCBvbiBSRUdfVE9fRk9SQ0UgYW5kCisJTU9WQUJMRV9UT19GT1JDRS4gIFJlcGxhY2Ugd2l0aCB1c2Ugb2YgbmV3IGZpZWxkLgorCU9wdGlvbmFsbHkgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcmVnX3NpbmdsZV91c2FnZSBhbmQgcGFzcyBpdCB0bworCWNvdW50X2xvb3BfcmVnc19zZXQuCisJSWYgYW4gaW52YXJpYW50IHJlZ2lzdGVyIGlzIHVzZWQgZXhhY3RseSBvbmNlIGFuZCB0aGlzIGlzIGEgbG9vcAorCXRoYXQgaGFzIGEgQ0FMTF9JTlNOLCB0cnkgdG8gc3Vic3RpdHV0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmVnaXN0ZXIKKwlpbnRvIGl0cyB1c2UuCisJKHJlY29yZF9leGNlc3NfcmVncyk6IEZpeCB0eXBvIGluIHNlbnNlIG9mIGNoZWNraW5nIGluIE5PVF9JTl9USElTOworCW9ubHkgY2hlY2sgcHNldWRvLXJlZ3MuCisJKGxpYmNhbGxfb3RoZXJfcmVnKTogQWx3YXlzIHJldHVybiB0aGUgbGlzdCBvZiByZWdpc3RlcnMgdXNlZCwKKwlubyBtYXR0ZXIgaG93IG1hbnkgdGhlcmUgYXJlLgorCShjb21iaW5lX21vdmFibGUpOiBPbmx5IGNvbWJpbmUgdHdvIG1vdmFibGVzIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZQorCWRlcGVuZGVuY2llcy4KKwkobW92ZV9tb3ZhYmxlcyk6IENhbiBvbmx5IG1vdmUgc29tZXRoaW5nIGlmIGl0cyBkZXBlbmRlbmNpZXMgaGF2ZQorCWFscmVhZHkgYmVlbiBtb3ZlZC4KKwkoZmluZF9zaW5nbGVfdXNlX2luX2xvb3ApOiBOZXcgZnVuY3Rpb24uCisJKGNvdW50X2xvb3BfcmVnc19zZXQpOiBEZWxldGUgY29kZSB0aGF0IHByZXZlbnRzIG1vdmluZyBhIHJlZyB0aGF0CisJaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIGFkZHJlc3MuCisJQ2FsbCBmaW5kX3NpbmdsZV91c2VfaW5fbG9vcCB3aGVuIHJlcXVpcmVkLgorCitTYXQgU2VwIDIxIDE2OjI4OjM0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOgorCUhhbmRsZSBjb25zdCBhbmQgdm9sYXRpbGUgbHZhbHVlcyBjb3JyZWN0bHkgaW4gQUREUl9FWFBSLgorCisJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9jb250YWluc19mdW5jdGlvbnMpOgorCUp1c3QgZGVjbGFyZSBpdCwgZG9uJ3QgZGVmaW5lIGl0LgorCisJKiBjc2UuYyAoZXhwX2VxdWl2X3ApOiBOZXcgYXJnIEVRVUFMX1ZBTFVFUy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisKK1NhdCBTZXAgMjEgMTI6NTk6MTUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1wYXJzZS55IChvYmplY3Rfc3Rhcik6IE5ldyBydWxlLgorCShQT0lOVFNBVF9TVEFSKTogTmV3IHRva2VuLgorCSogY3BsdXMtbGV4LmMgKGluaXRfbGV4KTogRGVmaW5lIGVudHJ5IGZvciBNRU1CRVJfUkVGLgorCUdOVSBDKysgbm93IG92ZXJsb2FkcyBgb3BlcmF0b3ItPionIGFjY29yZGluZyB0byBBUk0gc2VtYW50aWNzLiAgSXQKKwlubyBsb25nZXIgYXR0ZW1wdHMgdG8gaW1wbGVtZW50IG9wZXJhdG9yLT4qIGFzIHR3byBkaXN0aW5jdAorCW9wZXJhdGlvbnMuCisKK0ZyaSBTZXAgMjAgMTg6MDg6MDcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworICAgICAgICAqIGNvbWJpbmUuYyAoc3Vic3QpOiBEb24ndCByZXBsYWNlIGEgQ0MwIG9yIGEgUEMgaW4gYSBTRVRfREVTVCBpZgorICAgICAgICBGUk9NIGlzIHRoZSBzYW1lIHRoaW5nLgorIAorCSogY29tYmluZS5jIChzaW1wbGlmeV9zaGlmdF9jb25zdCk6IENvbXB1dGUgU0hJRlRfTU9ERSBhdCBzdGFydCBvZgorCWxvb3AgYW5kIHVzZSBpdHMgd2lkdGgsIHJhdGhlciB0aGFuIHdpZHRoIG9mIFJFU1VMVF9NT0RFLCB3aGVuIGNoZWNraW5nCisJc2hpZnQgY291bnQuCisKK0ZyaSBTZXAgMjAgMTA6NTU6NTUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcGx1cy1wdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIENPTVBPTkVOVF9SRUYgY2FzZS4KKworRnJpIFNlcCAyMCAwMDoyNzo0MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogV2hlbiBhc3NpZ25pbmcgdG8gYSBjYXN0LAorCWNvbnZlcnQgdmFsdWUgZmlyc3QgdG8gdGhlIHR5cGUgYmVpbmcgY2FzdCB0by4KKwkoYnVpbGRfdW5hcnlfZXhwcik6IERpc2FsbG93IGFkcmVzcyBvZiBhIGNhc3QuCisKKwkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKToKKwlIYW5kbGUgU0VUSk1QX1ZJQV9TQVZFX0FSRUEgYmVmb3JlIHJvdW5kaW5nIHRvIFNUQUNLX0JPVU5EQVJZLgorCitUaHUgU2VwIDE5IDIxOjEzOjE3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGRpc3QsIGdjYy0qLnRhciwgZ2NjLSoudGFyLlopOiBOZXcgdGFyZ2V0cy4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSW4gaGFuZGxpbmcgYGlmICguLi4pIHggPSBhOyBlbHNlIHggPSBiOycsCisJZG9uJ3QgY3Jhc2ggaWYgc2NhbiByZWFjaGVzIHN0YXJ0IG9mIGluc25zLgorCisJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUpOiBMaW5rIHdpdGggZ2V0b3B0Lm8gYW5kIGdldG9wdDEuby4KKwkodW5wcm90b2l6ZSk6IExpa2V3aXNlLgorCShwcm90b2l6ZS5vKTogRGVwZW5kIG9uIGdldG9wdC5oLiAgUGFzcyAtRCBvcHRpb25zIGZvciBpbmNsdWRlIGRpcnMuCisJKHVucHJvdG9pemUubyk6IExpa2V3aXNlLgorCShnZXRvcHQubywgZ2V0b3B0MS5vKTogTmV3IHRhcmdldHMuCisKKwkqIHByb3RvaXplLmM6IE1ham9yIHJld3JpdGUgYnkgUkZHIGFuZCBSTVMuCisKK1RodSBTZXAgMTkgMDk6NTg6MjUgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwlDaGFuZ2VzIGZyb20gUm9uIEd1aWxtZXR0ZToKKwkqIGR3YXJmb3V0LmM6IEtlZXAgdHJhY2sgb2YgbmV4dF9ibG9ja19udW1iZXIgY29ycmVjdGx5LgorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3QgaW52b2tlIGR3YXJmb3V0X3tiZWdpbixlbmR9X2Jsb2NrCisJZm9yIHRoZSBvdXRlcm1vc3QgYmxvY2sgb2YgYSBmdW5jdGlvbi4KKworVGh1IFNlcCAxOSAwNjoxNjozNCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoY29weV9yZXBsYWNlbWVudHMpOiBOZXcgZnVuY3Rpb24uCisJKiBvcHRhYnMuYyAoZ2VuX21vdmVfaW5zbik6IERvbid0IGNhbGwgZ2VuX2xvd3BhcnQgd2hpbGUgcmVsb2FkaW5nCisJaXMgaW4gcHJvZ3Jlc3M7IGl0IGNhbGxzIGNoYW5nZV9hZGRyZXNzLCB3aGljaCB3YW50cyB0byBtYWtlIHBzZXVkb3MuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgU0VUKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IFdoZW4gc2VhcmNoaW5nIGJhY2sgZm9yIGEgcGxhY2UgdGhhdAorCXVzZXMgYSByZWdpc3RlciBtYXJrZWQgUkVHX0RFQUQsIGNoZWNrIGZvciBzZXQgYW5kIHJlZmVyZW5jZSBzZXBhcmF0ZWx5CisJc2luY2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgZG9lc24ndCBjaGVjayBTRVRfREVTVC4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9zaGlmdF9jb25zdCk6IENvcnJlY3QgaGFuZGxpbmcgb2Ygc2hpZnQgY291bnRzCisJdGhhdCBiZWNvbWUgb3V0LW9mLXJhbmdlLgorCisJKiBjb21iaW5lLmMgKGV4cGFuZF9maWVsZF9hc3NpZ25tZW50KTogRG9uJ3QgYWxsb3cgc2hhcmluZyB0aGUgUlRMCisJZm9yIHRoZSBpbm5lciBvYmplY3QuCisKKwkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCwgdHJ5X2NvbWJpbmUsIHJlY29yZF92YWx1ZV9mb3JfcmVnKTogVXNlIAorCXJlZ19vdmVybGFwX21lbnRpb25lZF9wIGluc3RlYWQgaW4gcmVnX21lbnRpb25lZF9wIGluIG1vc3QgcGxhY2VzLgorCShkaXN0cmlidXRlX25vdGVzLCBkaXN0cmlidXRlX2xpbmtzKTogTGlrZXdpc2UuCisJKGNvbWJpbmFibGVfaTNwYXQpOiBOZXcgZnVuY3Rpb24sIGZyb20gdHJ5X2NvbWJpbmUuCisJKHRyeV9jb21iaW5lKTogRGVmYXVsdCBJMURFU1QgYW5kIEkxU1JDIHRvIHplcm8uCisJTmV3IHZhciBJMV9GRUVEU19JMy4KKwlEZWxldGUgY29kZSB0byB2YWxpZGF0ZSBJMydzIHBhdHRlcm4gZnJvbSBoZXJlOyBjYWxsIGNvbWJpbmFibGVfaTNwYXQKKwlpbnN0ZWFkLgorCUlmIGEgc3Vic3RpdHV0aW9uIHJldHVybnMgYSAoY2xvYmJlciAoY29uc3RfaW50IDApKSwgc3RvcCBpbW1lZGlhdGVseS4KKwlEb24ndCBhYm9ydCBpZiBzdWJzdGl0dXRpb24gbWFkZSBuZXcgcmVnczsganVzdCBkb24ndCBkbyBjb21iaW5lLgorCShzdWJzdCk6IElmIElOX0RFU1QsIGRvbid0IHJlcGxhY2UgYSBtYXRjaGluZyBvYmplY3QuCisJRG9uJ3QgbG9vayBhdCBhIFJFRyBhcyBhIFNFVF9ERVNULgorCUlmIHN1YnN0aXR1dGlvbiBpbnNpZGUgYSBQQVJBTExFTCBmYWlscywgZ2l2ZSB1cCBpbW1lZGlhdGVseS4KKwlSZXR1cm4gKGNsb2JiZXIgKGNvbnN0X2ludCAwKSkgZXZlbiBmb3IgYSBTRVQgd2hvc2Ugb3BlcmFuZCBmYWlscy4KKwkoc3Vic3QsIGNhc2UgU0VUKTogQ29ycmVjdGx5IHRlc3QgZm9yIGxvdy1vcmRlciBTVUJSRUcuCisJRG9uJ3QgdXNlIGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lOyBtYWtlIFNVQlJFRyBleHBsaWNpdGx5IHNpbmNlIGl0CisJY2FuJ3QgaGFuZGxlIG1vZGVzIGxhcmdlciB0aGFuIGEgd29yZC4KKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBOT1QpOiBDb2RlIGZvciAobm90IChhc2hpZnR4IC4uKSkgd2FzIHRvbworCWdlbmVyYWw7IG9ubHkgaGFuZGxlIChub3QgKGFzaGlmdCAxIFgpKS4KKwkoc3Vic3QsIGNhc2UgTkVHKTogSGFuZGxlIChuZWcgKGFzaGlmdCAuLi4pKS4KKwkobWVyZ2Vfb3V0ZXJfb3BzKTogU3VwcG9ydCBORUcuCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0LCBjYXNlIE5FRyk6IEhhbmRsZSAoYXNoaWZ0IChuZWcgLi4uKSkuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIFJPVEFURSwgUk9UQVRFUlQpOgorCVJvdGF0aW5nIGFsbCBvbmUgYml0cyBpcyBqdXN0IGFsbCBvbmVzLgorCitUaHUgU2VwIDE5IDAxOjA4OjE0IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXBhcnNlLmgsIGNwbHVzLWRlY2wuaDogUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0CisJZW51bSB2YWx1ZSBpbiBlbnVtIGRlY2xhcmF0aW9ucy4KKworCSogY3BsdXMtdHlwZTIuYyAoZGlnZXN0X2luaXQpOiBTZXQgVFJFRV9QVVJQT1NFIG9mIHVuaW9uIGluaXRpYWxpemVyCisJd2hlbiBpbml0aWFsaXppbmcgYSB1bmlvbiBieSB0aGUgZmlyc3QgZmllbGQuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChmbmRlY2xfYXNfc3RyaW5nKTogVGVzdCB3aGV0aGVyIERFQ0xfQ0xBU1NfQ09OVEVYVAorCWlzIE5VTEwgYmVmb3JlIHVzaW5nIGl0LgorCShkdW1wX2FnZ3JfdHlwZSk6IE5ldyBmdW5jdGlvbi4gIFByaW50IGFnZ3IgdHlwZSdzIGNvbnRleHQgd2hlbgorCWFwcHJvcHJpYXRlLgorCShkdW1wX3R5cGV7X3ByZWZpeH0pOiBVc2UgYGR1bXBfYWdncl90eXBlJyB0byBwcmludCBFTlVNRVJBTF9UWVBFLAorCVVOSU9OX1RZUEUsIGFuZCBTVFJVQ1RfVFlQRSB0eXBlcy4KKworCSogY3BsdXMtZGVjbC5jIChzdGFydF9kZWNsKTogRG9uJ3QgdXNlIERFQ0xfQ0xBU1NfQ09OVEVYVCBpZiBERUNMCisJaGFzIG5vIERFQ0xfTEFOR19TUEVDSUZJQy4KKworV2VkIFNlcCAxOCAyMTo0NjozMiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jIChjdXJfcHJvY192YWx1ZSk6IE5ldyBzdGF0aWMgdG8gcmVtZW1iZXIgdGhlIHN0YXJ0aW5nCisJbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisJKGFkZF9wcm9jZWR1cmUpOiBTYXZlIGN1cnJlbnQgcHJvY2VkdXJlIGxvY2F0aW9uLgorCShwYXJzZV9iZWdpbiwgcGFyc2VfYmVuZCk6IFN1YnRyYWN0IGN1cl9wcm9jX3ZhbHVlIGZyb20gbG9jYXRpb24uCisJKHBhcnNlX2JlbmQpOiBDb3JyZWN0IGVycm9yIG1lc3NhZ2VzLgorCVRoZSBhYm92ZSBjaGFuZ2VzIGFyZSBmcm9tIGJvdGhuZXJAY3lnbnVzLmNvbS4KKworCSogdG0tbWlwcy5oIChBU01fRklOQUxfU1BFQyk6IFVzZSAtbW5vLW1pcHMtdGZpbGUgdG8gc3VwcHJlc3MKKwlpbnZva2luZyBtaXBzLXRmaWxlLCBpbnN0ZWFkIG9mIHVzaW5nIC1nMC4gIElmIC1zYXZlLXRlbXBzLCBwcmVzZXJ2ZQorCXRoZSBvcmlnaW5hbCAubyBmaWxlIGJlZm9yZSBtaXBzLXRmaWxlIGlzIGNhbGxlZC4gIFBhc3MgdGhlIGNvcnJlY3QKKwluYW1lIGZvciB0aGUgYXNzZW1ibGVyIGZpbGUuCisJKE1BU0tfTUlQU19URklMRSk6IE5ldyBtYXNrIGZvciAtbW1pcHMtdGZpbGUsIC1tbm8tbWlwcy10ZmlsZSwgc2V0CisJdG8gMCwgc2luY2UgdGhhdCBzd2l0Y2ggaXMgaGFuZGxlZCBlbnRpcmVseSBpbiBBU01fRklOQUxfU1BFQy4KKwkoVEFSR0VUX0ZMQUdTKTogQWRkIC1tbWlwcy10ZmlsZSwgLW1uby1taXBzLXRmaWxlIHN3aXRjaGVzLgorCShNVVNUX1NBVkVfUkVHSVNURVIpOiBBbGxvdyAkMzAgdG8gYmUgc2F2ZWQsIGV2ZW4gaWYgbm90IGJlaW5nIHVzZWQKKwlhcyB0aGUgZnJhbWUgcG9pbnRlci4KKworCSogdG0tZGVjcm9zZS5oIChBU01fRklOQUxfU1BFQyk6IFVzZSAtbW5vLW1pcHMtdGZpbGUgdG8gc3VwcHJlc3MKKwlpbnZva2luZyBtaXBzLXRmaWxlLCBpbnN0ZWFkIG9mIHVzaW5nIC1nMC4gIElmIC1zYXZlLXRlbXBzLCBwcmVzZXJ2ZQorCXRoZSBvcmlnaW5hbCAubyBmaWxlIGJlZm9yZSBtaXBzLXRmaWxlIGlzIGNhbGxlZC4gIFBhc3MgdGhlIGNvcnJlY3QKKwluYW1lIGZvciB0aGUgYXNzZW1ibGVyIGZpbGUuCisKK1dlZCBTZXAgMTggMTg6NTQ6MTUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtKi5jOiBVc2UgREVDTF9DTEFTU19DT05URVhUIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSAoc3RhdGljIG9yCisJbm9uLXN0YXRpYykgbWVtYmVyIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwlkaXZpbmUgdGhlIGluZm8gZnJvbSBUWVBFX01FVEhPRF9CQVNFVFlQRSBvZiB0aGUgZnVuY3Rpb24ncyB0eXBlLgorCitXZWQgU2VwIDE4IDE1OjM4OjUyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRXJyb3IgaWYgbmVzdGVkIGZ1bmN0aW9uIGlzIGV4dGVybi4KKworV2VkIFNlcCAxOCAwMjo0MTowOCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogIERvbid0IGNyYXNoIGlmIHRoZQorCWZvcm1hbCBwYXJhbWV0ZXIgdHlwZSBpcyB1bmtub3duICh0eXBlPT1OVUxMKSBhbmQgdGhlCisJYWN0dWFsIGlzIGEgZnVuY3Rpb24uICBEbyB0aGUgZGVmYXVsdCBpbnN0ZWFkLgorCitUdWUgU2VwIDE3IDIyOjMzOjMwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY2hlY2tfZm9ybWF0KToKKwlObyB3YXJuaW5nIGlmIHR5cGVzIG1hdGNoIGV4Y2VwdCBmb3Igc2lnbmVkbmVzcy4KKworVHVlIFNlcCAxNyAxMDo1Njo0NiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjcGx1cy1kZWNsLmMgKHB1c2h0YWcpOiBXaGVuIGNyZWF0aW5nIGEgVFlQRV9ERUNMIHRoYXQncyBpbiBjbGFzcworCXNjb3BlLCBhbGxvY2F0ZSB0aGUgc3BhY2UgbmVlZGVkIGZvciBERUNMX0NMQVNTX0NPTlRFWFQuCisKKwkqIGNwbHVzLXNlYXJjaC5jIChnZXRfYWJzdHJhY3RfdmlydHVhbHMpOiBJZiB0aGUgQkFTRSBpcyBub3Qgb24gdGhlCisJbWFpbiBzcGluZSwgbG9vayBhdCB0aGUgdmlydHVhbHMgdGhhdCBjb21lIGZyb20gdGhlIG1vc3QgZGVyaXZlZAorCWNsYXNzIHRoYXQgaGFzIEJBU0Ugb24gaXRzIG1haW4gc3BpbmUuCisJKiBjcGx1cy10cmVlLmggKFZGXyopOiBOZXcgbWFjcm9zIGZvciBkZWFsaW5nIHdpdGggVkZJRUxEUy4KKworTW9uIEF1ZyAxNiAxMjowOTozMiAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS5jb206IEZpeCB0eXBvLgorCitUdWUgU2VwIDE3IDE1OjEzOjM5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAoc2hvcnRlbl9jb21wYXJlKTogQWx3YXlzIGNvbXB1dGUgYXJncyB3aXRoIHNpZGUgZWZmZWN0cy4KKworCSogdmFyYXNtLmMgKGRlY29kZV9hZGRyX2NvbnN0KTogVXNlIFNZTUJPTF9SRUYgdW5jaGFuZ2VkIGluIDFzdCBzd2l0Y2guCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfYWRkcmVzc2VkX2NvbnN0YW50cyk6ICBIYW5kbGUgYSBDT05TVFJVQ1RPUiBpbgorCWFuIEFERFJfRVhQUiBjb3JyZWN0bHkuCisJCisJKiBjY2NwLmMgKHJlc2Nhbik6IEZvciB1bnRlcm0gc3RyaW5nLCBtZW50aW9uIGxpbmVubyBvZiBmaXJzdCBuZXdsaW5lLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBDYWxsIG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlIGluIGNvbnN0YW50IGNhc2UKKwlldmVuIGlmIG5vdCBvcHRpbWl6aW5nLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRG9uJ3QgY2xlYXIgREVDTF9JTklUSUFMIGlmIG5lc3RlZC4KKwkocG9wX2NfZnVuY3Rpb25fY29udGV4dCk6IERvIGl0IGhlcmUgaW5zdGVhZC4KKworVHVlIFNlcCAxNyAxMTozMDozMiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogY29sbGVjdC1vc2YuYyAoc2Nhbl9wcm9nX2ZpbGUpOiBSZWNvZ25pemUgYWx0ZXJuYXRlIGZvcm1zIGZvciB0aGUKKwljb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBuYW1lcy4KKworCSogb3NmLW1haW4uYyAoX2VudHJ5KTogUHJvdmlkZSBhbiBhbHRlcm5hdGl2ZSBmdW5jdGlvbiAoX2VudHJ5KSB0bworCXN0YXJ0IHVwIHRoZSBzdGF0aWMgY29uc3RydWN0b3JzL2Rlc3RydWN0b3JzLgorCitNb24gU2VwIDE2IDA1OjM1OjIxIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBDb3JyZWN0IGVycm9ycyBpbnZvbHZpbmcgbW9kZXMKKwl0byB1c2UgZm9yIHNoaWZ0LgorCitTdW4gU2VwIDE1IDE5OjEzOjU4IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFJlbW92ZSBjb2RlIHRoYXQgZGVsZXRlcyBpbnNucyB0aGF0CisJY3JlYXRlIGVxdWl2YWxlbmNlcy4KKwkocmVsb2FkKTogUHV0IGl0IGhlcmUgc28gaXQgaXMgZXhlY3V0ZWQgZXZlbiBpZiByZWxvYWRfYXNfbmVlZGVkCisJaXNuJ3QgY2FsbGVkLgorCitTdW4gU2VwIDE1IDE3OjEzOjA5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKEdOVUxJQjJfQ0ZMQUdTKTogSW5jbHVkZSBHQ0NfQ0ZMQUdTLgorCShFTlFVSVJFX0NGTEFHUyk6IExpa2V3aXNlIChpbiBwbGFjZSBvZiBwbGFpbiBDRkxBR1MpLgorCisJKiBnZW5hdHRydGFiLmMgKG1haW4pOiBEb24ndCBpbmRleCBieSBpZC0+aW5zbl9jb2RlIGlmIG5lZ2F0aXZlLgorCisJKiBnZW5yZWNvZy5jICh3cml0ZV90cmVlXzEpOiBBdm9pZCBwb3NbZGVwdGgtMV0gaWYgZGVwdGggaXMgMC4KKworU3VuIFNlcCAxNSAxNToxOToxNiAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS5jb206IE1vZGlmeSB0byBhbGxvdyBkaXJlY3Qgc3VibWlzc2lvbiB0byBhIGJhdGNoIHF1ZXVlLgorCUFsc28sIGFkZCBpbnN0cnVjdGlvbnMgdG8gYnVpbGQgR05VIEMrKyBhcyB3ZWxsIGFzIEdOVSBDQy4KKworCSogY2NjcC5jIChoYWNrX3Ztc19pbmNsdWRlX3NwZWNpZmljYXRpb24pOiBJZiBbMDAwMDAwXSBpcyBwcmVzZW50IGluCisJKGltcGx5aW5nIGEgcGh5c2ljYWwgZGV2aWNlIG9yIGEgcm9vdGVkIGxvZ2ljYWwpIHRyeSB0byBvcGVuIGl0LgorCUlmIHRoZSBvcGVuIGZhaWxzLCB0aGVuIHJlbW92ZSB0aGUgWzAwMDAwMF0gKG1ha2luZyB0aGUgbmFtZSBzdWl0YWJsZQorCWZvciB1c2Ugd2l0aCBhIG5vbi1yb290ZWQgbG9naWNhbCBuYW1lKSBhbmQgcmV0dXJuIHRoYXQuCisKK1N1biBTZXAgMTUgMTU6MTI6NDEgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1ha2UtbWlwcyAoTWFrZWZpbGUpOiBSZW1vdmUgcnVsZSBidWlsZGluZyBNYWtlZmlsZSwgc2luY2UKKwlNYWtlZmlsZS5pbiBub3cgaGFzIG9uZS4KKworCSogbWFrZS1kZWNyb3NlIChNYWtlZmlsZSk6IFJlbW92ZSBydWxlIGJ1aWxkaW5nIE1ha2VmaWxlLCBzaW5jZQorCU1ha2VmaWxlLmluIG5vdyBoYXMgb25lLgorCitTdW4gU2VwIDE1IDE0OjEyOjQ3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZsYWdzIChTWVNDQUxMUy5jLlgpOiBVc2UgQ1BQRkxBR1MgYW5kIElOQ0xVREVTLgorCitTdW4gU2VwIDE1IDEyOjAzOjM1IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3BsdXMtZGVjbC5jIChwb3BsZXZlbCk6IE1hdGNoIGNoYW5nZSBtYWRlIHRvIGMtZGVjbC5jIG9uIE9jdCAzLAorCTE5ODkuCisKK1N1biBTZXAgMTUgMDY6NTI6NDIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbGVyLXNhdmUuYyAoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogRGVhZGVuIHJlZ2lzdGVycyBtZW50aW9uZWQKKwlpbiBSRUdfVU5VU0VEIG5vdGVzLgorCShjbGVhcl9yZWdfbGl2ZSk6IFZlcmlmeSB0aGF0IG5vdGUgcmVmZXJzIHRvIGEgUkVHLgorCShjaG9vc2VfaGFyZF9yZWdfbW9kZSk6IFJld3JpdGUgdG8gbm90IHVzZSBzcGVjaWZpYyBtb2RlcyBhbmQgdG8KKwloYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc2VwYXJhdGUgQ0Ntb2RlIHJlZ2lzdGVycyBleGlzdC4KKworU2F0IFNlcCAxNCAxMzowMzoyOSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGFsbCBjcGx1cy0qIGZpbGVzOiBDaGFuZ2Uge0FTU09DLGFzc29jfSB0byB7QklORk8sYmluZm99IHdoZXJlCisJYXBwcm9wcmlhdGUuCisJY3BsdXMtdHJlZS5oLCB0cmVlLmg6IENoYW5nZSBuYW1lIG9mIENMQVNTVFlQRV9BU1NPQyB0byBUWVBFX0JJTkZPLgorCUNoYW5nZSBuYW1lcyBvZiBDTEFTU19BU1NPQ18qIHRvIFRZUEVfQklORk9fKi4KKwlhbGwgY3BsdXMtKiBmaWxlczogRlVOQ1RJT05fREVDTHMgdGhhdCBhcmUgY2xhc3MgbWV0aG9kcyBub3cgaGF2ZQorCXRoZWlyIERFQ0xfVkNPTlRFWFQgc3RvcmVkIGluIHRoZSBERUNMX0NPTlRFWFQuCisJKGxhbmdfZGVjbCk6IFRoZSBWQ09OVEVYVCBmaWVsZCBpcyBub3cgZ29uZS4KKwkobGFuZ19kZWNsKTogX0RFQ0wgbm9kZXMgaW4gY2xhc3Mgc2NvcGUgbm93IHJlY29yZCB0aGUgY2xhc3MgYXMgYQorCWNvbnRleHQgaW4gdGhlIERFQ0xfQ0xBU1NfQ09OVEVYVCBmaWVsZC4KKwl0cmVlLmggKFRZUEVfQklORk8pOiBSZW5hbWVkIFRZUEVfQkFTRVRZUEVTIHRvIHRoaXMuCisJZGJ4b3V0LmMgKGRieG91dF90eXBlKTogVXNlciBvZiBUWVBFX0JBU0VUWVBFUyBjaGFuZ2VkLgorCShCSU5GT197VkFMVUUsT0ZGU0VULFZUQUJMRSxWSVJUVUFMUyxCQVNFVFlQRXtTfX0pOiBOZXcgbWFjcm9zCisJaW5oZXJpdGVkIGZyb20gR05VIEMrKy4KKwkoREVDTF97VklOREVYLEZDT05URVhUfSk6IERpdHRvLgorCShUUkVFX1ZJQV97UFVCTElDLFZJUlRVQUx9KTogRGl0dG8uCisKK1NhdCBTZXAgMTQgMDk6MTQ6MjYgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsYW5hbC5jIChyZWdfc2V0X3ApOiBSZW1vdmUgYWJvcnQgZm9yIE1FTTsgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AKKwlub3cgaGFuZGxlcyB0aGF0IGNhc2UgY29ycmVjdGx5LgorCVJFRyBpcyBzZXQgaWYgaXQgaXMgcmVhbGx5IGEgTUVNIGFuZCB0aGlzIGlzIGEgQ0FMTF9JTlNOLgorCitTYXQgU2VwIDE0IDAxOjM0OjM5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlICh2YXgtdWx0cml4Kik6IE5ldyBhbHRlcm5hdGl2ZS4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBBbHdheXMgaWdub3JlIGNhbmNlbGxlZCByZWxvYWRzLgorCisJKiByZWFsLmggKGF0b2YpOiBBbHRlcm5hdGUgZGVjbGFyYXRpb24gb24gTUlQUy4KKworVGh1IFNlcCAxMiAxODo1NTowNiAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEZpeCBjYXJyeSBwcm9wYWdhdGlvbiBjb2RlIGZvciBtdWx0aXBsZQorCXdvcmRzLgorCisJKiB0bS0qLmg6IEZpeCBzeXN0ZW1hdGljIHR5cG8gaW4gY29tbWVudC4KKworVGh1IFNlcCAxMiAxODoyMzo1MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGd2YXJhcmdzLmgsIHZhLW1pcHMuaCwgdmEtc3BhcmMuaCAoX3ZhX19fbGlzdCk6IFdhcyBfX3ZhX2xpc3QuCisKK1RodSBTZXAgMTIgMTI6NTM6MzYgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwcC50ZXhpbmZvOiAodGl0bGVwYWdlKSB1c2UgQHRpdGxlL0BzdWJ0aXRsZS9AYXV0aG9yCisJKGNvcHlyaWdodCBwYWdlKSBhZGQgbm90ZSByZSBmdXR1cmUgQyBtYW51YWw7IGFkZCAxOTkxIHRvIGNvcHlyaWdodHMKKwkoZ2VuZXJhbCkgcHJlcGFyZSBmb3IgZWFzeSBAc21hbGxib29rIGZvcm1hdHRpbmc7IGNsYXJpZmljYXRpb24gb24KKwlzdHJpbmdzOyBsZXNzIHBhc3NpdmU7IGFkZCBBTUQyOUsgcHJlZGVmaW5lZCBtYWNyb3M7IHVwZGF0ZSAtZCByZWZzLAorCWFkZCAtZE07IGFkZCBleGFtcGxlczsgYWRkIC1wZWRhbnRpYy1lcnJvcnM7IGFkZCAtTUQsIC1NTUQsIC1IOyBmaXgKKwltaW5vciB0eXBvcy4JCisKK1RodSBTZXAgMTIgMDc6NTg6MTEgMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgKHVtdWxzaWRpMywgbXVsc2lkaTMpOiBOZXcgREVGSU5FX0VYUEFORHMgYW5kIERFRklORV9JTlNOCisJcmVjb2duaXplcnMuCisKK1dlZCBTZXAgMTEgMjI6MTE6MTcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5tZCwgcm9tcC5tZDogVXBkYXRlIGNhbGxpbmcgc2VxdWVuY2UgdG8gZW1pdF9ub19jb25mbGljdF9ibG9jay4KKworV2VkIFNlcCAxMSAyMTowNjozMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBGaXggbGFzdCBjaGFuZ2UgZm9yIGNlaWwgYW5kIHJvdW5kLgorCisJKiBndmFyYXJncy5oLCB2YS1taXBzLmgsIHZhLXNwYXJjLmggKHZhX2xpc3QpOiBOb3cgYSBtYWNybyBhZ2Fpbi4KKwkoX192YV9saXN0KTogVGhpcyBpcyB0aGUgdHlwZWRlZi4KKworV2VkIFNlcCAxMSAxNjo1MjoyMCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQsIFJTSElGVF9FWFBSKTogQ2hhbmdlCisJInNoaWZ0IGNvdW50IiB3YXJuaW5ncyBjaGFuZ2VkIHRvIGVycm9ycyBiYWNrIHRvIHdhcm5pbmdzLgorCisJKiBjc2UuYyAoY2Fub25faGFzaCk6IEFsc28gZG8gbm90IHJlY29yZCBnbG9iYWxfcmVncyBpZgorCVNNQUxMX1JFR0lTVEVSX0NMQVNTRVMuICBNYWtlcyB0aGUgY29kZSBtYXRjaCB0aGUgY29tbWVudC4KKworCSogY2V4cC55ICh5eWxleCk6IEFkZCBzcHJpbnRmIGNhbGwgdG8gY3JlYXRlIGVycm9yIG1lc3NhZ2UsCisJYmVjYXVzZSB5eWVycm9yIGRvZXMgbm90IGNhbGwgKnByaW50ZiBpdHNlbGYuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFN1cHBvcnQgbmV3IG9wdGlvbiAtdHJhZGl0aW9uYWwtY3BwLAorCXdoaWNoIHBhc3NlcyB0cmFkaXRpb25hbCB0byBjcHAsIGJ1dCBub3QgdG8gY2MxLgorCSogZ2NjLnRleGluZm86IERvY3VtZW50IGl0LgorCisJKiBzY2hlZC5jIChJTlNOX0xVSUQpOiBOZXcgdmFyaWFibGUuICBHaXZlIGluc3RydWN0aW9ucyBsb2dpY2FsCisJbnVtYmVycywgd2hpY2ggY2FuIGJlIHVzZWQgd2hlbiBzb3J0aW5nLCB0byBtYWtlIHRoZSBzY2hlZHVsaW5nCisJYWxnb3JpdGhtIG1vcmUgc3RhYmxlLgorCShzY2hlZF9hbmFseXplKTogSW5pdGlhbGl6ZSBpdC4KKwkocmFua19mb3Jfc2NoZWR1bGUpOiBTb3J0IG9uIGl0LgorCShzY2hlZHVsZV9pbnNucyk6IEFsbG9jYSh0ZSkgaXQgYW5kIChiKXplcm8gaXQuCisJKHByaW9yaXR5KTogIE5ldyBwcmlvcml0eSBhbGdvcml0aG0uICBEb24ndCBpbmNsdWRlIGxhdGVuY3kgb2YKKwljdXJyZW50IGluc24sIGFuZCBzdWJ0cmFjdCBvbmUgZnJvbSB0b3RhbCBwcmlvcml0eSBjYWxjdWxhdGVkLgorCU1ha2VzIHRoZSBzY2hlZHVsaW5nIGFsZ29yaXRobSBtb3JlIHN0YWJsZSwgYW5kIGRvZXNuJ3QgaHVydAorCXBlcmZvcm1hbmNlLgorCisJKiBzY2hlZC5jIChzd2FwX3NvcnQpOiBNdXN0IHBhc3MgJmluc24gdG8gcmFua19mb3Jfc2NoZWR1bGUsIG5vdCBhCisJcG9pbnRlciBpbnRvIHRoZSBhcnJheSBiZWluZyBzb3J0ZWQuCisKKwkqIGNwbHVzLWxleC5jIChkb19pZGVudGlmaWVyKTogUHV0IGZ1bmN0aW9uIHJldHVybiB0eXBlIG9uCisJcHJlY2VlZGluZyBsaW5lLgorCitXZWQgU2VwIDExIDA1OjUxOjAwIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogSWYgT1AwIG9yIE9QMSBpcyBhCisJemVybyBwb2ludGVyLCBjYW5vbmljYWxpemUgaXQgdG8gTlVMTF9QT0lOVEVSX05PREUuCisKKwkqIGV4cHIuYyAocHJlZXhwYW5kX2NhbGxzKTogRG9uJ3QgcHJlZXhwYW5kIGNhbGxzIGluc2lkZSBhCisJV0lUSF9DTEVBTlVQX0VYUFIuICBUaGUgZ2VzdGFsdCBvZiBhIFdJVEhfQ0xFQU5VUF9FWFBScyBtdXN0IGJlCisJdW5kZXJzdG9vZCBhdCB0aGUgdG9wIGxldmVsLgorCisJKiBjcGx1cy10cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IFdoZW4gYnVpbGRpbmcgY2xlYW51cCwgbWFrZQorCXRoZSBjYWxsIHRvIHRoZSBjbGVhbnVwIG5vbnZpcnR1YWwuCisKK1R1ZSBTZXAgMTAgMjA6Mjg6NTYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGNvbnN0X2Jpbm9wKTogU2hvcnRjdXQgZm9yIGRpdmlkaW5nIHNpbmdsZS13b3JkCisJc2l6ZXMKKworCSogTWFrZWZpbGUuaW4gKHZhcmFzbS5vKTogRGVwZW5kIG9uIGluc24tY29kZXMuaC4KKworVHVlIFNlcCAxMCAxOToyOToyNiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogVHJ5IHRvIG9wZW4tY29kZSBtdWxkaTMgaWYgd2UgaGF2ZSBtdWxzaTMKKwlhbmQgbXVsc2lkaTMuICBJZGVhIGR1ZSB0byB0ZWdlQHNpY3Muc2UuCisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBNRU0pOiBEb24ndCBjYWxsIGZpbmRfYmVzdF9hZGRyIHdoZW4gaW5zbiA9PSAwLgorCVBhc3MgMCB0byByZWN1cnNpdmUgY2FsbCB0aGF0IHRyaWVzIHRvIGZvbGQgdGhlIGFkZHJlc3MuCisKK1R1ZSBTZXAgMTAgMTg6MTY6MTYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kIChmaXhfdHJ1bmMqKTogIENhbGwgQ0NfU1RBVFVTX0lOSVQsIHNpbmNlIHRoZXNlIHBhdHRlcm5zCisJZG8gbm90IGxlYXZlIHRoZSBjb25kaXRpb24gY29kZXMgaW4gdGhlIGV4cGVjdGVkIHN0YXRlLgorCisJKiB0bS11bHRyaXguaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgX192YXguCisKK1R1ZSBTZXAgMTAgMDQ6MTI6NTMgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IEZpeCBidWcgd2hlcmUgdGhlIGNvbnZlcnNpb24gZnJvbQorCVdJVEhfQ0xFQU5VUF9FWFBSIC0+IGluaXQvY2xlYW51cCBwYWlyIHdhcyBub3Qgc2V0dGluZyBiaXRzIG9mCisJQ1VSUkVOVF9CSU5ESU5HX0xFVkVMLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBGTEFHU19USElTX0lTX1ZBUklBQkxFIGJlZm9yZSBjYWxsaW5nCisJYGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcnLgorCitNb24gU2VwICA5IDIyOjA5OjI3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXRyZWUuaCAocHJldl9jbGFzc190eXBlKTogRGVsZXRlIHRoaXMgYm9ndXMgZGVmaW5pdGlvbi4KKworCSogY3BsdXMtY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvbid0IGNvbXBsYWluIGFib3V0IG5vIHN0YXRpYworCW1lbWJlciBmdW5jdGlvbnMgYmVpbmcgZm91bmQgdW50aWwgd2UgaGF2ZSBiZWVuIHRocm91Z2ggYWxsIHRoZQorCWJhc2VsaW5rcy4KKworCSogY3BsdXMtZGJ4b3V0LmMgKGRieG91dF90eXBlX21ldGhvZHMpOiBEb24ndCB3cml0ZSBzeW1ib2wKKwlpbmZvcm1hdGlvbiBhYm91dCBtZXRob2RzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLgorCSg/Pz8gSXMgdGhpcyByZWFsbHkgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPykKKworCSogY3BsdXMtZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogVHVybiBvbiB3YXJuX3VuaW5pdGlhbGl6ZWQgaWYKKwktV2FsbCBpcyB0aGUgYXJndW1lbnQuCisKK01vbiBTZXAgIDkgMTk6MDU6MDEgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBGb3IgLlMgZmlsZXMsIHBhc3MgLXRyYWRpdGlvbmFsIG5vdAorCS1mdHJhZGl0aW9uYWwgdG8gY3BwLgorCitNb24gU2VwICA5IDE1OjAxOjU4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSk6IERpc3Rpbmd1aXNoIE5FIGZyb20gRVEuCisKKwkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKToKKwlIYW5kbGUgU0VUSk1QX1ZJQV9TQVZFX0FSRUEgYnkgYWxsb2NhdGluZyBleHRyYSBzcGFjZS4KKworCSogY3BsdXMtcGFyc2UueSAoZW1wdHlfcGFybXMpOiBDaGFuZ2UgaW5saW5lIHRvIF9faW5saW5lLgorCitNb24gU2VwICA5IDE1OjE2OjI0IDE5OTEgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZSBhdCB6ZXZzKQorCisJKiBsb25nbG9uZy5oIChtNjgwMDAgdW11bF9wcG1tKTogQ2xvYmJlciBvbmUgcmVnaXN0ZXIgbGVzcyBieQorCXNsaWdodGx5IHJlYXJyYW5naW5nIHRoZSBjb2RlLgorCitTdW4gU2VwICA4IDE2OjQ3OjMyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluLCBmYXRhbCk6IERlbGV0ZSB0aGUgZGVwcyBvdXRwdXQgZmlsZSBpZiBlcnJvci4KKwkoZGVwc19maWxlKTogTmV3IHZhcmlhYmxlLgorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVwZGF0ZSBjYWxsIHRvIGVtaXRfbm9fY29uZmxpY3RfYmxvY2suCisKKwkqIGV4cG1lZC5jIChDRUlMKTogTmV3IG1hY3JvLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogRG9uJ3QgZG8gYWRkIGJ5IHdvcmRzIGZvciBtb3JlIHRoYW4gMiB3b3Jkcy4KKworCSogYy10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBUZXN0IFRSRUVfUkVBRE9OTFkgb2YgbGhzLgorCitTdW4gU2VwICA4IDAxOjE3OjQ3IDE5OTEgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZSBhdCB6ZXZzKQorCisJKiBzcGFyYy5tZCAoc2d0dSwgc2xldSk6IFRlc3QgZm9yIFNVQlJFRyBhcyB3ZWxsIGFzIFJFRy4KKworU3VuIFNlcCAgOCAwNzowNDozMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZW1pdF9ub19jb25mbGljdF9ibG9jaywgZW1pdF9saWJjYWxsX2Jsb2NrKTogUmV3b3JrIHRvCisJYWNjZXB0IGEgbGlzdCBvZiBpbnNucyByYXRoZXIgdGhhbiBhIFNFUVVFTkNFLgorCShleHBhbmRfYmlub3AsIGV4cGFuZF91bm9wLCBleHBhbmRfZmxvYXQsIGV4cGFuZF9maXgpOiBDaGFuZ2UgY2FsbHMgdG8KKwlhYm92ZSBmdW5jdGlvbnMuCisJKiBlbWl0LXJ0bC5jIChhZGRfaW5zbik6IE5vIGxvbmdlciBzdGF0aWMuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENoYW5nZSBjYWxsIHRvIGVtaXRfbGliY2FsbF9ibG9jay4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogRml4IHR5cG8gd2l0aCBwYXJlbnMgaW4gYXNzb2NpYXRpdmUgb3BlcmF0aW9uIGNhc2UuCisKK1NhdCBTZXAgIDcgMjE6NDk6NDYgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IEluIHRoZSBjb2RlIGhhbmRsaW5nIGJpdGZpZWxkcworCWxhcmdlciB0aGFuIHRoZSB3b3JkIHNpemU6IHNldCBmaWVsZG1vZGUgdG8gc2l6ZSBsYXJnZSBlbm91Z2gKKwl0byBob2xkIGJpdGZpZWxkOyBuZXcgdmFyaWFibGUgb3JpZ19iaXRzaXplOyBkb24ndCBsZXQKKwliaXRfb2Zmc2V0IGNhbGN1bGF0aW9uIGZvciBXT1JEU19CSUdfRU5ESUFOIGhvc3RzIGdvIG5lZ2F0aXZlLgorCShleHRyYWN0X2JpdF9maWVsZCk6IExpa2V3aXNlLgorCShzdG9yZV9zcGxpdF9iaXRfZmllbGQpOiBGb3Igc2Vjb25kIHdvcmQsIHN0cmlwIG9mIFNVQlJFRyBpZiBhbnkKKwliZWZvcmUgY2FsbGluZyBvcGVyYW5kX3N1YndvcmQuICBPZmZzZXQgZm9yIHNlY29uZCB3b3JkIGlmIGluCisJbWVtb3J5IGlzIHRoZSBuZXh0IFVOSVRTX1BFUl9XT1JEIGFsaWduZWQgYWRkcmVzcy4KKwkoZXh0cmFjdF9zcGxpdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IFdoZW4gZW1pdHRpbmcgbXVsdGlwbGUgbW92ZSBpbnNucyBpbgorCXRoZSBsb29wLCByZW1lbWJlciBsYXN0IGluc24gZW1pdHRlZCBzbyB0aGF0IGl0IGNhbiBiZSByZXR1cm5lZC4KKworCSogdHJlZS5jIChlbnVtIHRyZWVfbm9kZV9raW5kKTogQWRkIG5ldyBlbnRyeSB2ZWNfa2luZCB0bworCXJlcHJlc2VudCBUUkVFX1ZFQ3MuCisJKHRyZWVfbm9kZV9raW5kX25hbWVzKTogQWRkIG5hbWUgInZlY3MiIGZvciBpdC4KKwkobWFrZV9ub2RlKTogSGFuZGxlIFRSRUVfVkVDcyBpbiB0aGUgJ3gnIGNhc2UuCisJKG1ha2VfdHJlZV92ZWMpOiBVc2UgdmVjX2tpbmQgaW5zdGVhZCBvZiB4X2tpbmQuCQorCitTYXQgU2VwICA3IDE2OjI1OjUwIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNhbGwuYyAoaWRlYWxfY2FuZGlkYXRlKTogUHJlZmVyIG5vbi1jb25zdCBtZW1iZXIgZnVuY3Rpb25zCisJdG8gY29uc3QgbWVtYmVyIGZ1bmN0aW9ucyB3aGVuIHRoZXJlIGlzIGEgY2hvaWNlLgorCSogY3BsdXMtdHJlZS5jIChwcm9wYWdhdGVfYXNzb2Nfb2Zmc2V0cyk6IE1vdmVkIGhlcmUgZnJvbQorCWNwbHVzLWNsYXNzLmMKKwkoY29weV9ub252aXJ0dWFsX2NoaWxkcmVuKTogRGVsZXRlZC4KKworCSogY3BsdXMtY2xhc3MuYywgY3BsdXMtdHJlZS5jIChsYXlvdXRfe3Z9YmFzZXR5cGVzLAorCXByb3BhZ2F0ZV9hc3NvY19vZmZzZXRzLCBmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBOZXcgb2Zmc2V0CisJY29tcHV0YXRpb24vaGllcmFyY2h5IGltcGxlbWVudGF0aW9uLiAgTm93IHRoZSBsYXR0aWNlIGNvbnRhaW5zCisJdmJhc2V0eXBlcyB3aXRoIHplcm8tYmFzZWQgb2Zmc2V0cyAoYW5kIGNoaWxkcmVuIGZyb20gdGhlc2UgdHlwZXMKKwlhc3N1bWUgdGhleSBhcmUgemVyby1iYXNlZCkuICBUaGUgQ0xBU1NUWVBFX1ZCQVNFVFlQRSBsaXN0IGNvbnRhaW5zCisJdmJhc2V0eXBlcyB3aXRoIGhpZXJhcmNoeS1kZXBlbmRlbnQgb2Zmc2V0cyAoYW5kIGNoaWxkcmVuIGZyb20gdGhlc2UKKwl0eXBlcyBoYXZlIGhpZXJhcmNoeS1kZXBlbmRlbnQgb2Zmc2V0cykuICBOb3RlIHRoYXQgbm93LCB2aXJ0dWFsCisJYmFzZWNsYXNzZXMgYXJlIGZ1bGx5IHNoYXJlZCBpbiB0aGUgaGllcmFyY2h5LiAgVGhlIHN0aWxsIGFyZSBub3QKKwlzaGFyZWQgYXQgYWxsIGluIHRoZSBDTEFTU1RZUEVfVkJBU0VUWVBFIGxpc3QuCisJKiBjcGx1cy1kZWNsLmMgKHhyZWZfdGFnKTogU2hhcmUgdmJhc2V0eXBlcyBpbiB0aGUgbGF0dGljZS4KKwkqIGNwbHVzLXRyZWUuaCAobGFuZ190eXBlKTogQWRkIENMQVNTVFlQRV9WQVNTT0MgZmllbGQgc28gd2UgY2FuCisJc2hhcmUgdmlydHVhbCBiYXNldHlwZXMgaW4gaW5oZXJpdGFuY2UgbGF0dGljZXMuCisKK1NhdCBTZXAgIDcgMTM6MDc6MTIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKGNhc3RfZXhwcik6IFN1cHBseSBPRldIQVQgYXJnIHRvIGRpZ2VzdF9pbml0LgorCSogYy10eXBlY2suYyAoZXJyb3JfaW5pdCwgcGVkd2Fybl9pbml0KTogTmV3IGZ1bmN0aW9ucy4KKwkoZGlnZXN0X2luaXQsIHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFVzZSB0aGVtLgorCisJKiBvdXQtbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiAgQWRkIGEgbmVnYXRpdmUgY29uc3RhbnQKKwl0byBzcCByYXRoZXIgdGhhbiBhZGRpbmcgYSBwb3NpdGl2ZSBvbmUsIHNpbmNlIHRoaXMgaXMgZmFzdGVyLgorCisJKiBvdXQtbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6CisJVXNlIHdvcmQgc2l6ZWQgaW1tZWRpYXRlcyB3aGVuIHBvc3NpYmxlLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kaXIpOiBEb24ndCBkaWUgaWYgY2FuJ3QgY3JlYXRlIG1hbmRpci4KKwkoaW5zdGFsbC1tYW4pOiBEb24ndCBwdXQgLiBpbiBmcm9udCBvZiBtYW5leHQuCisJKG1hbmV4dCk6IEFkZCAuIHRvIHRoZSB2YWx1ZS4KKwkobWFuZGlyKTogRG9uJ3QgdXNlIG1hbmV4dC4KKworCSogZ2VuZXh0cmFjdC5jIChtYWluKTogRG9uJ3QgdXNlIF9fYnVpbHRpbl9tZW1jcHkgaW4gR0NDIDEuCisKK0ZyaSBTZXAgIDYgMTk6Mjk6NTUgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbGVyLXNhdmUuYyAoZW1pdF9tdWx0X3NhdmUsIGVtaXRfbXVsdF9yZXN0b3JlKTogQ29weSBjb25zdGFudCB0bworCVRFTVBSRUcgYW5kIGFkZCBpbnRlZ2VyLCBpbnN0ZWFkIG9mIHRoZSBvcHBvc2l0ZSBvcmRlciwgd2hpY2ggbWlnaHQKKwlub3Qgd29yayBvbiBzb21lIG1hY2hpbmVzLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBFbnN1cmUgd2UgYWx3YXlzIHJldHVybiBhbiBvYmplY3Qgb2YgdGhlCisJZGVzaXJlZCB0eXBlLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCwgcmVsb2FkX2FzX25lZWRlZCk6IHJlbG9hZF9pbl9wcm9ncmVzcyBtdXN0IGJlCisJc2V0IGR1cmluZyBjYWxsZXItc2F2ZSBwcm9jZXNzaW5nLgorCitGcmkgU2VwICA2IDE4OjM2OjU1IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogb3V0LXNwYXJjLmMgKGxlYWZfcmVnX3tyZW1hcCxiYWNrbWFwfSk6IERlZmluZSBtYXBwaW5nIGZvcgorCSVvNy8laTcsIHNpbmNlIHVzZXItZGVmaW5lZCByZWdpc3RlcnMgbWlnaHQgcmVmZXJlbmNlIHRoZXNlLgorCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogU2V0IENVUlJFTlRfRlVOQ1RJT05fVVNFU19QSUNfT0ZGU0VUX1RBQkxFCisJaWYgT1JJRyBpcyBhIExBQkVMX1JFRi4gIEZvciBDT05TVF9JTlQgY2FzZSwgZG9uJ3QgY2FsbCBmb3JjZV9yZWcKKwlkdXJpbmcgcmVsb2FkLCB1c2UgUkVHIGlmIGF2YWlsYWJsZSBvdGhlcndpc2UgYWJvcnQuCisKK0ZyaSBTZXAgIDYgMTc6MTY6MDUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmU6IERlZmF1bHQgJGNwdV90eXBlIHByb3Blcmx5LgorCitGcmkgU2VwICA2IDA1OjUwOjU4IDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCB3YXRjaC5jb20pCisKKwkqIGdlbmV4dHJhY3QuYzogR2VuZXJhdGUgb25lIGxhcmdlIGZ1bmN0aW9uIHdpdGggYSBzd2l0Y2gsIGluc3RlYWQKKwlvZiBhIHRhYmxlIG9mIHNtYWxsIGZ1bmN0aW9ucyB0byBjYWxsLiAgVXNlIF9fYnVpbHRpbl9tZW1jcHkgdW5kZXIKKwlHTlUgQy4KKworCSogZ2Vub3V0cHV0LmM6IEZvciAiQCIgY29uc3RydWN0cywgbm93IGdlbmVyYXRlcyBhIGxvb2t1cCB0YWJsZSBwZXIKKwlpbnNuLCBpbnN0ZWFkIG9mIGEgc3dpdGNoLgorCitGcmkgU2VwICA2IDE1OjQwOjU0IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjY2NwLmMgKHNraXBfaWZfZ3JvdXApOiBEZWFsIHdpdGggaW52YWxpZCBkaXJlY3RpdmVzIHRoZSBzYW1lCisJd2F5IGhhbmRsZV9kaXJlY3RpdmUgZG9lcy4KKworRnJpIFNlcCAgNiAxNjozNzowNCAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHRtLXNwYXJjLmggKFJUWF9DT1NUUyk6IERlZmluZSBjb3N0cyBmb3IgTVVMVCBhbmQgdmFyaW91cyBkaXZpZGVzLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBDYWxsIGBnZW5fbG93cGFydF9jb21tb24nIGluc3RlYWQgb2YKKwlidWlsZGluZyBTVUJSRUcgbWFudWFsbHkuCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogV2hlbiBjb252ZXJ0IHNjcmF0Y2ggdG8gYSByZWcsIG11c3QKKwlzZXQgcmVnc19ldmVyX2xpdmUgZm9yIGFsbCBoYXJkIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBuZXcgcmVnLCBub3QKKwlqdXN0IHRoZSBmaXJzdC4KKworRnJpIFNlcCAgNiAwNzoxNTo0NCAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ251bGliMi5jIChfX25lZ2RpMik6IENoYW5nZSBpdCB0byB3b3JrIGxpa2UgX19zdWJkaTMuCisJKiBnbnVsaWIyLmMgKF91ZGl2bW9kZGk0KTogTWFrZSBmYXN0ZXIgc3BlY2lhbCBjYXNlIGZvciBDUFVzIHdpdGgKKwlhIHVkaXZfcXJubmQgdGhhdCBjYW4gaGFuZGxlIHVubm9ybWFsaXplZCAoaS5lLiB3aXRoIGxlc3MgdGhhbgorCUxPTkdfVFlQRV9TSVpFIHNpZ25pZmljYW50IGJpdCkgZGl2aXNvcnMuCisKKwkqIGdudWxpYjIuYyAoX19tdWxkaTMpOiBDYXN0IG9wZXJhbmRzIHRvIHVuc2lnbmVkLgorCisJKiBnbnVsaWIyLmMgKF9fWGNtcGRpKTogVXNlIGBsb25nJyBmb3IgYWxsIHZhcmlhYmxlcyBmb3IKKwljb25zaXN0ZW5jeS4KKworCSogZ251bGliMi5jIChfX3VkaXZtb2RkaTQpOiBOZXcgZnVuY3Rpb24gd2l0aCBjb2RlIGZyb20gX191ZGl2ZGkzLAorCWV4dGVuZGVkIHRvIGdpdmUgcmVtYWlkZXIuCisJKiBnbnVsaWIyLmMgKF9fZGl2ZGkzLCBfX21vZGRpMywgX191ZGl2ZGkzLCBfX3Vtb2RkaTMpOiBVc2UKKwlfX3VkaXZtb2RkaTQuCisJKiBnbnVsaWIyLmM6IChfX21vZGRpMyk6IFJlc3VsdCBzaWduIGlzIG9ubHkgZGVwZW5kZW50IG9uIFUsIG5vdCBWLgorCitGcmkgU2VwICA2IDA1OjQ0OjA3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IEFjY2VwdCBuZXcgYXJnIElOX0xJQkNBTExfQkxPQ0suCisJSWYgaW4gbGliY2FsbCBibG9jaywgZG9uJ3QgcmVjb3JkIGRlc3RpbmF0aW9ucyBpbiBoYXNoIHRhYmxlLgorCVJlbW92ZSBleHBsaWNpdCB1c2Ugb2YgU0Ztb2RlIGFuZCBERm1vZGUgd2hlbiBjaGVja2luZyAtZmZsb2F0LXN0b3JlLgorCShjc2VfYmFzaWNfYmxvY2spOiBQYXNzIG5ldyBhcmcgdG8gY3NlX2luc24gdG8gaW5kaWNhdGUgd2hlbiB3ZQorCWFyZSBwcm9jZXNzaW5nIGFuIGluc24gc3Vycm91bmRlZCB3aXRoIFJFR19MSUJDQUxML1JFR19SRVRWQUwgbm90ZXMuCisKKwkqIG9wdGFicy5jIChlbWl0X2xpYmNhbGxfYmxvY2spOiBOZXcgZnVuY3Rpb24uCisJKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBSZW1vdmUga2x1ZGdlIG9mIHJlZmVyZW5jaW5nIGxpYnJhcnkKKwlmdW5jdGlvbiBTWU1CT0xfUkVGIGJlZm9yZSBsaWJjYWxsIGJsb2NrLgorCVVzZSBlbWl0X2xpYmNhbGxfYmxvY2suCisJKGV4cGFuZF9mbG9hdCwgZXhwYW5kX2ZpeCk6IFJld29yayBsaWJyYXJ5IGNhbGxzIHRvIHVzZQorCWVtaXRfbGliY2FsbF9ibG9jay4KKwkqIGNhbGxzLmMgKHN0cnVjdCBhcmdfZGF0YSk6IEFkZCBuZXcgZmllbGQsIGluaXRpYWxfdmFsdWUuCisJKGV4cGFuZF9jYWxsKTogRG9uJ3QgbWFrZSBsaWJjYWxsIGJsb2NrIGZvciBjYWxscyB0aGF0IHJldHVybgorCWFnZ3JlZ2F0ZXMuCisJUmVtb3ZlIGtsdWRnZSBvZiByZWZlcmVuY2luZyBmdW5jdGlvbiBTWU1CT0xfUkVGIG91dHNpZGUgb2YgYmxvY2suCisJRm9yIGNvbnN0YW50IGNhbGxzLCBzYXZlIFJUTCBmb3IgYXJnIGluIGFyZ3NbaV0uaW5pdGlhbF92YWx1ZSBhbmQKKwlzdGFydCBhIHNlcXVlbmNlLgorCVdoZW4gbWFraW5nIFJFR19FUVVBTCBub3RlLCB1c2UgSU5JVElBTF9WQUxVRSBpbnN0ZWFkIG9mIFZBTFVFLgorCVVzZSBlbWl0X2xpYmNhbGxfYmxvY2sgZm9yIGNvbnN0YW50IGNhbGxzLgorCSogZXhwci5oIChlbWl0X2xpYmNhbGxfYmxvY2spOiBEZWZpbmUgaXQuCisKK0ZyaSBTZXAgIDYgMTU6NTg6NTIgMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IHpldnMpCisKKwkqIGxvbmdsb25nLmggKDY4MDIwLCBpMzg2KTogRG9uJ3QgZGVmaW5lIG1hY2hpbmUtZGVwZW5kZW50CisJICBfX3VtdWxzaWRpMyAoc28gdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBpcyB1c2VkKS4KKwkqIGxvbmdsb25nLmggKGFsbCBtYWNoaW5lcyk6IENhc3QgYWxsIG9wZXJhbmRzLCBzb3VyY2VzIGFuZAorCSAgZGVzdGluYXRpb25zLCB0byBgdW5zaWduZWQgbG9uZyBpbnQnLgorCSogbG9uZ2xvbmcuaDogQWRkIGdtaWNybyBzdXBwb3J0LgorCitGcmkgU2VwICA2IDAxOjQyOjA5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRGVsZXRlIGR1cGxpY2F0ZSBsaW5lIG51bWJlciBub3Rlcy4KKworVGh1IFNlcCAgNSAxOToyMzoyNCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUgKHJvbXApOiBGaXggdHlwbyBpbiBuYW1lIG9mIHhtX2ZpbGUuCisKKwkqIHJ0bGFuYWwuYyAoZGVhZF9vcl9zZXRfcCk6IElmIElOU04gaGFzIGEgQ0xPQkJFUiBmb3IgWCwgWCBpcworCWRlYWQuCisKKwkqIGdudWxpYjEuYyAoY21wZGYyLCBjbXBzZjIpOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9ucy4KKwkqIGdudWxpYjIuYyAoYW5kZGkzLCBpb3JkaTMsIHhvcmRpMywgb25lX2NtcGxkaTIsIGFkZGRpMywgc3ViZGkzKToKKwlMaWtld2lzZS4KKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogQ2xlYW4gdXAgY29kZSBub3cgdGhhdCBpbnRlZ2VyIGFuZAorCWZsb2F0IGNvbXBhcmlzb25zIGFyZSBkb25lIGRpZmZlcmVudGx5LgorCShpbml0X29wdGFicyk6IFJlbW92ZSByZWZlcmVuY2VzIHRvIHVudXNlZCBmdW5jdGlvbnMgbGlzdGVkIGFib3ZlLgorCSogTWFrZWZpbGUuaW4gKExJQjFGVU5DUywgTElCMkZVTkNTKTogTGlrZXdpc2UuCisKK1RodSBTZXAgIDUgMTg6MzI6MjcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kICh6ZXJvX2V4dGVuZCopOiBEb24ndCBhbGxvdyBtZW1vcnktbWVtb3J5IGR1ZSB0byBhbGlhc2luZy4KKworCSogZXhwci5jIChkb19qdW1wKTogRG9uJ3QgbG9zZSBpZiBvbmx5IDEgaW5zbiBwcmVjZWRlcyBuZXcganVtcC4KKworCSogc3BhcmMubWQgKGFzaGxkaTMpOiBGaXggZHVtYiBidWcgZGV0ZWN0aW5nIGNvbnN0YW50IDEuCisKKwkqIG91dC1zcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2Ugc3BsaXRfZG91YmxlIGZvciBjb25zdGFudC4KKwlQcm9wZXJseSBkZWNyZW1lbnQgYWRkcmVnMS4KKworVGh1IFNlcCAgNSAxNToyMDoyNSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIG91dC1zcGFyYy5jOiBJbmNsdWRlIGV4cHIuaCBhbmQgZGVsZXRlIGV4dGVybiBkZWNsYXJhdGlvbnMuCisKKwkqIHJ0bGFuYWwuYyAocnR4X2VxdWFsX3ApOiBDb3JyZWN0IHR5cG8gaW4gY29tbWVudCBvciBzcGFjaW5nLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBMaWtld2lzZS4KKwkqIHByb3RvaXplLmM6IExpa2V3aXNlLgorCSogbG9uZ2xvbmcuaDogTGlrZXdpc2UuCisJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IExpa2V3aXNlLgorCSoganVtcC5jOiBMaWtld2lzZS4KKworCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKTogRG9uJ3QgY2FsY3VsYXRlIGxvb3AgaXRlcmF0aW9ucyBiYXNlZAorCW9uIGEgZ2l2IGl0ZXJhdG9yLCBzaW5jZSB0aGUgY3VycmVudCBjb2RlIG9mdGVuIGdpdmVzIHRoZSB3cm9uZworCXJlc3VsdC4gIFRoaXMgY2FzZSBpcyByYXJlLCBzbyBpdCBkb2VzIG5vdCBzZWVtIHdvcnRoIGhhbmRsaW5nIGF0IGFsbC4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfaW5zbnMpOiBXaGVuIHRoZSBvbmx5IHNjaGVkIHBhc3MgaXMgYWZ0ZXIKKwlyZWxvYWQsIG11c3QgY2xlYXIgdW51c2VkX2luc25fbGlzdCBhbmQgdW51c2VkX2V4cHJfbGlzdCB0aGVuLAorCWluc3RlYWQgb2YgZHVyaW5nIHRoZSBub25leGlzdGFudCBwYXNzIGJlZm9yZSByZWxvYWQuCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogV2hlbiBjYWxjdWxhdGluZyBlc3RpbWF0ZWQgSVBDLCBhdm9pZAorCWRpdmlkZSBieSB6ZXJvLgorCisJKiBzcGFyYy5tZDogQ29ycmVjdCB0d28gZGVmaW5lX3NwbGl0cyBmb3Igc2VxL3NuZSBwYXR0ZXJucyBvZiB0aGUKKwlmb3JtIGB4ICsgKGkgPT0gMCknLCBhbmQgYWRkIGEgbWlzc2luZyBgYWRkeCcgcGF0dGVybiB1c2VkIGJ5CisJdGhlc2UgZGVmaW5lX3NwbGl0cy4KKworCSogdG9wbGV2LmMgKGZhdGFsX2luc25fbm90X2ZvdW5kKTogQ29ycmVjdCB0eXBvIGluIGVycm9yIG1lc3NhZ2UuCisJKG1haW4pOiBJbmNsdWRlICJnc2RiIiBhbmQgImdkYngiIGluIHdhcm5pbmcgbWVzc2FnZSB3aGVuIC1nIGlzIG5vdAorCXN1cHBvcnRlZC4KKworCSogZXhwci5oIChlbnVtIGV4cGFuZF9tb2RpZmllcik6IERlbGV0ZSBsYXN0IHZlc3RpZ2Ugb2YKKwlFWFBBTkRfSU5UT19TVEFDSy4KKworVGh1IFNlcCAgNSAxMzo1MDoyMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0LCBwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBJbmNsdWRlIHRoZQorCXZhcmlhYmxlIG5hbWUsIG1lbWJlciBuYW1lLCBhbmQvb3IgYXJyYXkgaW5kaWNlcyBpbiBlcnJvciBtZXNzYWdlcy4KKwlUaGlzIG1ha2VzIGl0IHRvbGVyYWJsZSB0byBkZWJ1ZyBsYXJnZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXplcnMuCisJUmV3b3JkIHNvbWUgbWVzc2FnZXMgdG8gd29yayB3aXRoIHRoZSBuYW1lIGFuZC9vciBmdW5jdGlvbiBjYWxsCisJYXJndW1lbnQgaW5jbHVkZWQuICBOZXcgYXJnIE9GV0hBVC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgZXhjZXB0CisJb25lIGRpZ2VzdF9pbml0IGNhbGwgaW4gZWFjaCBvZiBjLXBhcnNlLnkgYW5kIG9iamMtcGFyc2UueS4KKwkod2Fybl9mb3JfYXNzaWdubWVudCk6IFJlZHVjZSB0byBhIHNpbmdsZSBtZXNzYWdlIGFyZ3VtZW50LAorCWF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgZm9ybWF0dGluZyBmb3IgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisJQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IElmIEVSUlRZUEUgaXMgYSBudWxsIHN0cmluZywgdGhpcyBpcworCXBhcmFtZXRlciBwYXNzaW5nIGZvciBhIGZ1bmN0aW9uLCBzbyBvdXRwdXQgZGlmZmVyZW50IGVycm9yIG1lc3NhZ2VzLgorCShjb252ZXJ0X2FyZ3VtZW50cyk6IFBhc3MgbnVsbCBzdHJpbmcgdG8gY29udmVydF9mb3JfYXNzaWdubWVudCB0bworCWluZGljYXRlIHBhcmFtZXRlciBwYXNzaW5nLgorCitUaHUgU2VwICA1IDEzOjQ0OjE5IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc2NoZWQuYzogQ29ycmVjdCB0eXBvcyBpbiBjb21tZW50cy4KKwkoc2NoZWRfbm90ZV9zZXQpOiBEb24ndCB0cnkgdG8gY2FsY3VsYXRlIGxpdmUgaW5mbyBmb3IgZ2xvYmFsCisJcmVnaXN0ZXIgdmFyaWFibGVzLgorCShhdHRhY2hfZGVhdGhzKTogRG9uJ3QgYWRkIFJFR19ERUFEIG5vdGVzIGZvciBnbG9iYWwgcmVnaXN0ZXIKKwl2YXJpYWJsZXMuCisKKwkqIHRtLXNwYXJjLmggKFNFTEVDVF9TRUNUSU9OKTogQ2FuJ3QgcHV0IGEgdmFyaWFibGUgaW4gdGV4dCBzZWN0aW9uCisJaWYgZmxhZ19waWMgYW5kIFJFTE9DIGFyZSBib3RoIHRydWUsIHNhbWUgdGVzdCB0aGF0IHZhcmFzbS5jIGRvZXMuCisKK1RodSBTZXAgIDUgMTM6MTU6NDMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsYW5hbC5jIChyZWdfcmVmZXJlbmNlZF9wKTogSGFuZGxlIFVTRSBhbmQgQ0FMTC4KKwlVc2Ugc3dpdGNoIGluc3RlYWQgb2YgaWYtdGhlbi1lbHNlLgorCitUaHUgU2VwICA1IDA4OjAzOjU4IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWNsYXNzLmMgKHByb3BhZ2F0ZV9hc3NvY19vZmZzZXRzKTogRG9uJ3QgZmFpbCB0bworCXByb3BhZ2F0ZSB0aGUgb2Zmc2V0IHRvIHRoZSByaWdodG1vc3QgYmFzZXR5cGUuCisKKwkqIGNwbHVzLWRlY2wuYyAoeHJlZl90YWcpOiBBbGxvY2F0ZSBub2RlcyBmb3IgYmFzZXR5cGUgaW5mbyBvbgorCXBlcm1hbmVudCBvYnN0YWNrLCBub3QgdGVtcG9yYXJ5IG9ic3RhY2suCisKK1dlZCBTZXAgIDQgMTg6NTM6MTYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlcyA6IENoYW5nZSBgbTY4aycgdG8gYF9fbTY4a19fJyBpbiBhbGwgI2lmJ3MuCisKKwkqIE1ha2VmaWxlLmluIChBTExPQ0FfRkxBR1MpOiBBZGQgLURlbWFjcy4KKwkoQUxMT0NBX0ZJTklTSCk6IFB1dCBvcHRpb24gYmVmb3JlIGlucHV0IGZpbGUgbmFtZS4KKwkoYWxsb2NhLm8pOiBTdXBwbHkgJChJTkNMVURFUykuCisKKwkqIE1ha2VmaWxlLmluIChHQ0NfQ0ZMQUdTKTogTmV3IHBhcmFtZXRlci4KKwkocHJvdG9pemUsIHByb3RvaXplLm8sIHVucHJvdG9pemUsIHVucHJvdG9pemUubyk6IFVzZSBHQ0NfQ0ZMQUdTLgorCShlbnF1aXJlLCBlbnF1aXJlLm8sIGNvbGxlY3QyLCBjb2xsZWN0Mi5vLCBTWVNDQUxMUy5jLlgpOiBMaWtld2lzZS4KKworV2VkIFNlcCAgNCAxODoxMzo1NiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IFdoZW4gcGlja2luZyB1cCBsb3ctb3JkZXIgcGFydCwKKwllbnN1cmUgdGhhdCB3ZSBkb24ndCBjcmVhdGUgYSBub24tYWxpZ25lZCBvYmplY3QgaWYgYWxpZ25tZW50CisJaXMgcmVxdWlyZWQuCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBFbnN1cmUgd2Ugb25seSBjYWxsIGZvcmNlX2NvbnN0X21lbSBvbiBhCisJY29uc3RhbnQuCisJCisJKiBjb25maWcuc3VicjogU2V0IGBvcycgdG8gYmUgdGhlIGxhc3QgYC0nIGFuZCBldmVyeXRoaW5nIGZvbGxvd2luZyBpdC4KKwlgcm9tcCcgaXMgdGhlIGJhc2ljIG1hY2hpbmUgbmFtZSBmb3IgdGhlIHJ0cGMuCisJYGFvcycgaXMgSUJNJ3MgbmFtZSBmb3IgQlNELgorCSogY29uZmlndXJlOiBEZWZhdWx0IGBjcHVfdHlwZScgdG8gdGhlIGZpcnN0IGZpZWxkIGJlZm9yZSBhbgorCW9wdGlvbmFsIGAtJy4KKwlBZGQgYTI5aywgYTI5ay11bHRyYSwgcm9tcCwgYW5kIHJzNjAwMC4KKwkqIHhtLWEyOWstdWx0cmEuaDogTmV3IGZpbGUuCisKK1dlZCBTZXAgIDQgMTU6NDY6NTAgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwlDaGFuZ2VzIGZyb20gUm9uIEd1aWxtZXR0ZToKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9zeW1ib2wpOiBNb3ZlIHRlc3RzIGZvciBvbWl0dGluZyBkZWNsYXJhdGlvbnMKKwl0byBkd2FyZm91dF9maWxlX3Njb3BlX3N5bWJvbC4gIE5vIG5lZWQgZm9yIGBsb2NhbCcgcGFyYW1ldGVyLgorCVVzZSBUUkVFX1BVQkxJQyBhbmQgVFJFRV9FWFRFUk5BTCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHZhcmlhYmxlCisJb3IgZnVuY3Rpb24gaXMgZ2xvYmFsLgorCShmaW5hbGl6aW5nLCBkd2FyZm91dF9maWxlX3Njb3BlX2RlbGF5ZWRfc3ltYm9sKTogRGVsZXRlLgorCQorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERlbGV0ZSB1c2Ugb2YgZHdhcmZvdXRfZmlsZV9zY29wZV9zeW1ib2wKKwlmb3IgaW5pdGlhbGl6ZWQgVkFSX0RFQ0xzLiAgQWxsIGdsb2JhbCBkZWNsYXJhdGlvbnMgYXJlIHBhc3NlZCB0bworCWR3YXJmb3V0X2ZpbGVfc2NvcGVfc3ltYm9sIChleGNlcHQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHR5cGVzKS4KKworCShjb21waWxlX2ZpbGUsIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbik6IEF0dHJpYnV0ZSB0aW1lIGluCisJe2RieG91dCxzZGJvdXQsZHdhcmZvdXR9IGZ1bmN0aW9ucyB0byBzeW1vdXRfdGltZS4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogQ2hlY2sgYW5kIHVwZGF0ZSBUUkVFX0FTTV9XUklUVEVOCisJZm9yIGEgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlLgorCURlbGV0ZSB1c2Ugb2YgZHdhcmZvdXRfZmlsZV9zY29wZV9zeW1ib2wgZm9yIFZBUl9ERUNMcy4gCisKK1R1ZSBTZXAgIDMgMjM6MzQ6NTcgMTk5MSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IHpldnMpCisKKwkqIHNwYXJjLm1kIChhc2hsZGkzIGV4cGFuZGVyICYgcmVjb2duaXplcik6IE1ha2Ugc2hpZnQgY291bnQgaGF2ZQorCVNJbW9kZS4gIFVzZWQgdG8gaGF2ZSBESW1vZGUuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBEZWNsYXJlIGFyZyBVTlNJR05FRFAuCisKKwkqIHZheC5tZCAoYWRkZGkzKTogTWFrZSBvcGVyYW5kcyAyIGFuZCAzIGNvbW11dGF0aXZlLgorCisJKiBzcGFyYy5tZCAoc3VidHJhY3QgY29uc3RhbnQgdGhlbiByZXR1cm4pOiBQZWVwaG9sZSBkZWxldGVkLgorCitUdWUgU2VwICAzIDIyOjIzOjUyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuLCBjbGVhbiwgcmVhbGNsZWFuKTogU29tZSBmaWxlcyB3ZXJlIG1pc3NpbmcuCisKKwkqIGd2YXJhcmdzLmggKHZhX2xpc3QpOiBNYWtlIGl0IHR5cGVkZWYsIG5vdCBtYWNyby4KKwkqIHZhLW1pcHMuaCwgdmEtcHlyLmg6IExpa2V3aXNlLgorCitUdWUgU2VwICAzIDIyOjA3OjA0IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IEZpeCBvZmYtYnktb25lIGVycm9yIGZvciBhcnJheXMKKwlvZiBsZW5ndGggMS4KKworVHVlIFNlcCAgMyAxOTozMDo0NSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgcGFzcyBhIFNUUklDVF9MT1dfUEFSVCB0bworCXJlZ19vdmVybGFwX21lbnRpb25lZF9wLgorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBJZiBJTlNOIGlzIHplcm8sIGNvcHkgWCBiZWZvcmUgd2UgY2hhbmdlIAorCWFueXRoaW5nIGluc2lkZSBpdC4KKwlXaGVuIGxvb2tpbmcgZm9yIGFzc29jaWF0aXZlIG9wZXJhdGlvbiwgcGFzcyB6ZXJvIGFzIG1pc3NpbmcgYXJnIHRvCisJcmVjdXJzaXZlIGNhbGwuCisJKGZpbmRfY29tcGFyaXNvbl9hcmdzKTogQWRkIHplcm8gZm9yIG1pc3NpbmcgYXJnIHRvIGZvbGRfcnR4IGNhbGxzLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQ29ycmVjdCBjb2RlIHRoYXQgcHJldmVudHMgcmVwbGFjaW5nCisJYSBTRVRfREVTVCB3aXRoIGEgY29uc3RhbnQgc28gdGhhdCBpdCBjb3JyZWN0bHkgbG9va3MgZm9yIGFuCisJb3BlcmFuZCBiZWluZyBhIFNFVF9ERVNULgorCitUdWUgU2VwICAzIDE5OjE3OjM0IDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogb3V0LWkzODYuYyAoc3BsaXRfZGkpOiBDYWxsIHNwbGl0X2RvdWJsZSBmb3IgQ09OU1RBTlRfUC4KKwkoZml4X29wKTogRGVsZXRlLgorCShmbG9hdF9vcCk6IERvbid0IGV4YW1pbmUgdGhlIG1vZGUgb2YgdGhlIEZMT0FUIG9wZXJhbmQuCisJKG91dHB1dF9mbG9hdF9jb21wYXJlKTogRG9uJ3QgbWFrZSBuZXcgJWF4IFJUWDogdXNlIHNjcmF0Y2gKKwlvcGVyYW5kIGZyb20gaW5zbi4KKworCSogaTM4Ni5tZCAoZmxvYXQgbW9kZSB0c3RNLGNtcE0sZml4dW5zX3RydW5jTU4yLGZpeF90cnVuY01OMik6IFVzZQorCW1hdGNoX3NjcmF0Y2guCisJKGZsb2F0IG1vZGUgdHN0TSxmaXh1bnNfdHJ1bmNNTjIsZml4X3RydW5jTU4yKTogRG9uJ3QgZ2VuIHRlbXAgUlRYOgorCXVzZSBzY3JhdGNoIG9wZXJhbmQuCisJKGZpeF90cnVuY01OMixmbG9hdE1OMik6IFNwbGl0IHBhdHRlcm4gaW50byBhIHNlcGFyYXRlIERGbW9kZSBhbmQKKwlTRm1vZGUgcGF0dGVybnMgc28gdGhhdCBvcGVyYW5kc1sxXSBoYXMgYSBtb2RlLgorCShzQ09ORCBwYXR0ZXJucyk6IERvbid0IHNldCBjY19zdGF0dXMgdG8gcHJldmlvdXMgc3RhdHVzLgorCShjbXBzdHJzaSk6IERvbid0IGV4cGxpY2l0bHkgcmVmZXJlbmNlIHJlZyAyLgorCitUdWUgU2VwICAzIDE2OjI4OjU2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEZpeCBjYXJyeSBjYWxjdWxhdGlvbi4KKworCSogdmFyYXNtLmMgKGRlY29kZV9hZGRyX2NvbnN0KTogR2l2ZW4gYSBMQUJFTF9ERUNMLCBNYWtlIGEgTEFCRUxfUkVGLgorCShjb25zdF9oYXNoKTogSGFuZGxlIGEgTEFCRUxfUkVGLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IFVzZSBGVU5DVElPTl9NT0RFIGZvciBtZW1yZWYgdG8gYSBMQUJFTF9SRUYuCisKKwkqIGNvbmZpZ3VyZTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IE5vcm1hbGx5IG5vIGVycm9yIGZvciBsaW5lIHdpdGggYCMjIycuCisKK1R1ZSBTZXAgIDMgMTA6NTM6MTIgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG91dC1tODhrLmMsIHRtLW04OGsuaDogRGVsZXRlIHJlbW5hbnRzIG9mIHRoZSBmYW5jeSBhYm9ydC4KKwkqIHRtLW04OGtkZ3V4Lmg6IE5vIGxvbmdlciBpZGVudGlmeSBhcyB2ZXJzaW9uIERHLSouCisJKiBtODhrIGZpbGVzOiBVcGRhdGUgY29weXJpZ2h0IGRhdGVzLgorCitUdWUgU2VwICAzIDAzOjE4OjU0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IEdldCByaWQgb2YgRVhQQU5EX0lOVE9fU1RBQ0suCisKK01vbiBTZXAgIDIgMTQ6MDc6NTQgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogSW4gJVgsIHRlcm1pbmF0ZSB0aGUgYXJnIGFmdGVyIGVhY2ggb3B0aW9uLgorCisJKiBjb25maWcuc3VicjogSWYgYXJndW1lbnQgY29udGFpbnMgYGxvY2FsJywgYWx3YXlzIGFjY2VwdCBpdC4KKwkqIGNvbmZpZ3VyZTogSWYgbWFjaGluZSB0eXBlIGNvbnRhaW5zIGBsb2NhbCcsCisJY29uc3RydWN0IGZpbGUgbmFtZXMgZnJvbSB0aGF0IG1hY2hpbmUgdHlwZSBuYW1lLgorCisJKiBjb25maWd1cmU6IE1ha2UgY29uZmlnLnN0YXR1cyBhIHNoZWxsc2NyaXB0IHRvIHJlZG8gdGhlIGNvbmZpZ3VyZS4KKwlObyBuZWVkIG5vdyB0byBjaGFuZ2UgLyB0byAtIHdoZW4gc3RvcmluZyAkKHRhcmdldCkgaW4gTWFrZWZpbGUuCisJU3RvcmUgJChob3N0X21ha2VfdmFyX2ZpbGUpIGluIE1ha2VmaWxlIGFsc28uCisJU2V0IGhvc3RfbWFrZV92YXJfZmlsZSB0byAuLi9NYWtlZmlsZS5pbiBhZnRlciBjcmVhdGluZyBNYWtlZmlsZQorCWlmIG5vIG1ha2UtLi4uIGZpbGUgYWN0dWFsbHkgZXhpc3RzIGZvciB0aGlzIGhvc3QuCisJKiBNYWtlZmlsZS5pbiAoaG9zdF9tYWtlX3Zhcl9maWxlKTogRHVtbXkgZGVmaW5pdGlvbiB0byBiZSBmaWxsZWQgaW4uCisJKE1ha2VmaWxlKTogTmV3IHJ1bGUgdG8gcmVydW4gYGNvbmZpZ3VyZScKKworCSogdG0tc3lzdjQuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSk6IE5ldyBtYWNyby4KKworCSogdG0tbWlwcy5oLCB0bS1tODhrLmggKGFib3J0KTogTWFjcm8gZGVmaW5pdGlvbiBkZWxldGVkLiAgSXQgaXMKKwlub3QgcmlnaHQgZm9yIGFueSBtYWNoaW5lcyBkZXNjcmlwdGlvbiB0byBzcGVjaWZ5IHVzZSBvZiBmYW5jeV9hYm9ydC4KKworCSogcHJvdG9pemUuYyBbdi40XTogSW5jbHVkZSBmY250bC5oLgorCShleGVjdnApOiBDb3JyZWN0IHR5cGUgZm9yIHNlY29uZCBhcmcuCisJKGNvbXBpbGVfcGFyYW1zKTogUmVtb3ZlIGBjb25zdCc7IHRoYXQgbG9zZXMgd2hlbiBjYWxsaW5nIGV4ZWN2cC4KKworCSogY2NjcC5jIChkaXJlY3RpdmVfdGFibGUpOiBUeXBvIGluIGVudHJ5IGZvciBkb19pZGVudC4KKworCSogeG0tbTY4ay5oIChhbGxvY2EpOiBEZWZpbmUgbWFjcm8gd2l0aCBhcmcuCisKKwkqIGVtaXQtcnRsLmMgKHJlb3JkZXJfaW5zbnNfd2l0aF9saW5lX25vdGVzKTogIE5ldyBmdW5jdGlvbi4KKwkoZmluZF9saW5lX25vdGUsIGVtaXRfbGluZV9ub3RlX2FmdGVyKTogIE5ldyBmdW5jdGlvbnMuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6ICBXaGVuIG1vdmluZyBlbHNlIGNsYXVzZSBiZWZvcmUgdGVzdCwKKwlvbmx5IG1vdmUgdGhlIGluc24gYXMgZmFyIGFzIG5lZWRlZCwgYW5kIHVzZSBuZXcgZnVuY3Rpb24KKwlyZW9yZGVyX2luc25zX3dpdGhfbGluZV9ub3Rlcy4KKworTW9uIFNlcCAgMiAwMzozMDozNSAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIE1ha2VmaWxlLmluIChjb2xsZWN0Mik6IENvbXBpbGUgd2l0aCBnY2MuCisKK1N1biBTZXAgMSA5OjAzOjQ2IDE5OTEgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJRGVmaW5lIHR3byBtYWNyb3MgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBhIHNlcGVyYXRlIGNvbGxlY3QgcGFzcy4KKworCSogdG0tdm1zLmggKEFTU0VNQkxFX09VVFBVVF9DT05TVFJVQ1RPUik6IERlZmluZS4KKwkoQVNTRU1CTEVfT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWZpbmUuCisKK1N1biBTZXAgIDEgMDg6MTQ6MjIgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIGNvbGxlY3Qtb3NmLmMgKG1haW4pOiBQcmludCB2ZXJzaW9uIG51bWJlciBpZiAtdi4gIEFsc28gaWdub3JlIGFsbAorCWFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCAtYyByYXRoZXIgdGhhbiBqdXN0ICctYycuCisKKwkqIG1ha2UtZGVjcm9zZSAoY29sbGVjdCk6IEFkZCB2ZXJzaW9uLm8gdG8gbGluay4KKworU2F0IEF1ZyAzMSAxNzowMzoyMyAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogY3BsdXMtaW5wdXQuYyAoaW5saW5lIG1hY3JvIGRlZmluaXRpb24pOiBJZiBpbmxpbmUgaXMgYWxyZWFkeQorCWRlZmluZWQsIGRvbid0IHJlZGVmaW5lIGl0LgorCisJKiBjb2xsZWN0LW9zZi5jIChtYWluKTogTG9vayBmb3IgZ2xkIGFuZCBnYXMgaW5zdGVhZCBvZiBsZCBhbmQgYXMsCisJc28gY29sbGVjdC1vc2YgY2FuIGJlIGluc3RhbGxlZCBhcyBsZC4gIFVzZSBhIGRlZmF1bHQgcGF0aCBvZgorCS91c3IvY2NzL2djYyB0byBmaW5kIHRoZSBsaW5rZXIgYW5kIGFzc2VtYmVyLiAgSWdub3JlIHRoZSAtYyBzd2l0Y2gsCisJd2hpY2ggR0NDIHVzZXMgdG8gc2F5IHRoYXQgY29sbGVjdCBpcyBuZWVkZWQuCisKKwkqIG9zZi1tYWluLmMgKF9fZmluaXMpOiBEb24ndCBjYWxsIGRlc2NydWN0b3JzIGFscmVhZHkgY2FsbGVkIGlmIG9uZQorCW9mIHRoZSBkZXN0cnVjdG9ycyBjYWxscyBleGl0ICh3aGljaCBpbiB0dXJuIGNhbGxzIF9fZmluaXMpLgorCisJKiB0bS1taXBzLmggKERCWF9SRUdJU1RFUl9OVU1CRVIpOiBVc2UgbWlwc19kYnhfcmVnbm8gdG8gbWFwCisJcmVnaXN0ZXIgbnVtYmVyIHRvIGRlYnVnIHJlZ2lzdGVyIG51bWJlci4KKwkoR1BfREJYX0ZJUlNULCBGUF9EQlhfRklSU1QpOiBOZXcgbWFjcm9zLCBnaXZpbmcgdGhlIGZpcnN0IGRlYnVnCisJcmVnaXN0ZXIgbnVtYmVycyBmb3IgZ3AgcmVnaXN0ZXJzIGFuZCBmcCByZWdpc3RlcnMuCisKKwkqIG91dC1taXBzLmMgKG1pcHNfZGJ4X3JlZ25vKTogTmV3IGdsb2JhbCBhcnJheSB0byBtYXAgR0NDIHJlZ2lzdGVyCisJbnVtYmVyIHRvIGRlYnVnIHJlZ2lzdGVyIG51bWJlciwgdG8gZml4IHByb2JsZW0gd2l0aCBPU0YvMSBzdGFicworCXVzaW5nIDM4IGZvciB0aGUgZmlyc3QgZnAgcmVnaXN0ZXJzLCByYXRoZXIgdGhhbiAzMi4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFNldCB1cCBPU0YvMSBTSUdJTkZPIHNpZ25hbCBoYW5kbGVyIHRvIG5vdG1ha2UKKwl0aGUgaW50ZXJydXB0YWJsZSBzeXN0ZW0gY2FsbHMgcmVhZCwgd3JpdGUsIGFuZCB3YWl0IG5vdCByZXR1cm4KKwllcnJvciBjb25kaXRpb24uICBBbHNvIGluaXRpYWxpemUgbWlwc19kYnhfcmVnbm8uCisKKwkqIG1ha2UtZGVjcm9zZSAoQ0ZMQUdTKTogQWRkICQoTVNUQVRTKSB2YXJpYWJsZSB0byBzZXQgLW1zdGF0cy4KKwkoQ0ZMQUdTX05PREVCVUcpOiBMaWtlIENGTEFHUywgZXhjZXB0IG5vIGRlYnVnZ2luZyBvciBpbmxpbmluZy4KKwkoREVCX09QVCk6IERlZmluZSBpbiB0ZXJtcyBvZiBERUJVRywgT1BULCBhbmQgUFJPRklMRS4KKwkoY3BsdXMtbGV4IHJ1bGUpOiBCdWlsZCBjcGx1cy1sZXggd2l0aCBubyBkZWJ1ZyBvciBpbmxpbmluZ3MuCisKK1NhdCBBdWcgMzEgMTI6NTI6MTcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBCZSBtb3JlIGZ1c3N5IGRldGVjdGluZyBgIyBMSU5FJyBjYXNlLgorCisJKiBjY2NwLmMgKGRpcmVjdGl2ZV90YWJsZSk6IFBhc3MgdGhyb3VnaCBhbmQgaWdub3JlICNpZGVudC4KKwkoZG9faWRlbnQpOiBOZXcgZnVuY3Rpb24uCisJKHNraXBfaWZfZ3JvdXApOiBFcnJvciBpZiB1bnJlY29nbml6ZWQgZGlyZWN0aXZlIHNlZW4uCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluIGNvbnZlcnRpbmcgIHg9YTsgaWYgKC4uLikgeD1iOyAgdG8KKwlzdG9yZSBmbGFnLCBpbnNlcnQgYWxsIHRoZSBuZXcgY29kZSBpbiBqdXN0IG9uZSBsaW5lLgorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogVXNlIHhtYWxsb2MgdG8gbWFrZSBsaW5rZXJfb3B0aW9ucyB0aGUgZmlyc3QgdGltZS4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IE1ha2UgRVhQQU5EX1NVTSBhbmQgRVhQQU5EX0lOSVRJQUxJWkVSCisJaW1wbHkgRVhQQU5EX0NPTlNUX0FERFJFU1MgaW4gYWxsIGNhc2VzLgorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogLVdhbGwgc2V0cyB3YXJuX3VuaW5pdGlhbGl6ZWQuCisJKiBmbGFncy5oICh3YXJuX3VuaW5pdGlhbGl6ZWQpOiBEZWNsYXJlZC4KKwkqIHRvcGxldi5jICh3YXJuX3VuaW5pdGlhbGl6ZWQpOiBObyBsb25nZXIgc3RhdGljLgorCisJKiBjY2NwLmMgKG1haW4pOiBNYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IGluY2x1ZGVfZGVmYXVsdHMKKwlpbiBjYWxjdWxhdGlvbiBvZiBtYXhfaW5jbHVkZV9sZW4uICBBZGQgZnVkZ2Ugc3BhY2UgaWYgVk1TLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IE5ldyBhcmcgSVNfU0VUX0RFU1QuCisJRG9uJ3QgcmVwbGFjZSByZWcgd2l0aCBjb25zdGFudCBpbiBkZXN0aW5hdGlvbiBvZiBhIFNFVC4KKwkoZmluZF9yZWxvYWRzKTogUGFzcyB0aGF0IGFyZy4gIEFsc28gZG9uJ3QgcmVwbGFjZSBoZXJlLgorCisJKiBjcGx1cy14cmVmLmM6IEZpbmlzaCBpbnN0YWxsaW5nIGNoYW5nZXMgZnJvbSBZb3VuZ2RhbGUuCisKK1NhdCBBdWcgMzEgMDk6MDI6MjUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBDYWxsIHZhcmFzbSByb3V0aW5lcyB0byBhc3NlbWJsZSBjdG9yCisJYW5kIGR0b3IgbGlzdHMuCisKKwkqIGNwbHVzLWRieG91dC5jIChkYnhvdXRfdHlwZV9tZXRob2RzKTogRml4IGVycm9yIGluIHByaW50aW5nIHN5bWJvbAorCWluZm8gZm9yIGNsYXNzZXMgdGhhdCBvbmx5IGRlZmluZSBhIGRlc3RydWN0b3IuCisKK1NhdCBBdWcgMzEgMDg6MzI6MTIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9lbmRfb2ZfYmFzaWNfYmxvY2spOiBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIG9mIGEgYmFzaWMKKwlibG9jayB3aGVyZSBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvdXQgb2YgdGhlIGJsb2NrIGJlY29tZXMgdW5jb25kaXRpb25hbAorCWFuZCBhIGNvbmRpdGlvbmFsIGJyYW5jaCB0byB0aGUgZW5kIG9mIHRoZSBibG9jayBiZWNvbWVzIGEgbm9vcC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IEluIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhIFBBUkFMTEVMCisJaW52b2x2aW5nIGEgbG9hZCBhbmQgc2lnbiBleHRlbmQsIHVzZSByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcAorCWluc3RlYWQgb2YgcmVnX21lbnRpb25lZF9wLgorCUlmIHdlIGhhdmUgYSBQQVJBTExFTCBvZiB0d28gaW5kZXBlbmRlbnQgU0VUcywgdHJ5IHRvIHNwbGl0IHRoZW0KKwl1cCBpbnRvIHNlcGFyYXRlIGluc25zLgorCisJKiBjb21iaW5lLmMgKG1vdmVfZGVhdGhzKTogSW5zdGVhZCBvZiBwbGFjaW5nIHRoZSBSRUdfREVBRCBub3RlcworCW9uIFRPX0lOU04sIGFkZCB0aGVtIHRvIGEgbGlzdCB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGFzIGFuCisJb3BlcmFuZC4KKwkoZGlzdHJpYnV0ZV9ub3Rlcyk6IEFsbG93IGZvciB0aGUgY2FzZSB3aGVuIHRoZSBkZWF0aCBvZiBhbiBvYmplY3QKKwlpcyBiZXR3ZWVuIEkyIGFuZCBJMy4KKwlTZXQgcmVnX2xhc3RfZGVhdGggdG8gY29ycnNwb25kIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgUkVHX0RFQUQKKwlub3RlIGJlaW5nIHBsYWNlZC4KKwkodHJ5X2NvbWJpbmUpOiBDYWxsIG1vdmVfZGVhdGhzIGluIG5ldyB3YXkgYW5kIHBhc3MgcmV0dXJuZWQgbGlzdAorCXRvIGRpc3RyaWJ1dGVfbm90ZXMgaWYgaXQgaXMgbm9uLWVtcHR5LgorCisJKiBsb2NhbC1hbGxvYy5jIChyZXF1aXJlc19pbm91dF9wKTogRG9uJ3QgaGF2ZSBjYXNlcyBmb3IgJ1tRLVVdJyB1bmxlc3MKKwlFWFRSQV9DT05TVFJBSU5UIGlzIGRlZmluZWQuLgorCisJKiBsb2NhbC1hbGxvYyAoYmxvY2tfYWxsb2MpOiBEb24ndCBhbGxvY2F0ZSBTQ1JBVENIIG9uIG1hY2hpbmVzIHdpdGgKKwlTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIGRlZmluZWQuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19jbGFzc19yZWNvcmQpOiBBZGQgbWlzc2luZyBjYXNlIGZvciAnVicuCisKK0ZyaSBBdWcgMzAgMDQ6NDI6MTkgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiB0bS1pMzg2LmggKE9VVFBVVF9KVU1QKTogVXNlIGNjX3ByZXZfc3RhdHVzLgorCitGcmkgQXVnIDMwIDE3OjA4OjUyIDE5OTEgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiB4bS12bXMuaCAoTE9DQVRFX1NUQVJUX09GX0ZJTEVfTkFNRSk6IFJlbW92ZS4KKwkoRklMRV9OQU1FX05PTkRJUkVDVE9SWSk6IEZpeCB0eXBvLgorCShYUkVGX0ZJTEVfTkFNRSk6IFVzZSBGSUxFX05BTUVfTk9ORElSRUNUT1JZIGluc3RlYWQgb2YKKwlMT0NBVEVfU1RBUlRfT0ZfRklMRV9OQU1FLCBhbmQgb21pdCB0aGUgbGVhZGluZyB1bmRlcnNjb3JlIGluIHRoZQorCWdlbmVyYXRlZCBmaWxlIG5hbWUuCisJKEZJTEVfTkFNRV9BQlNPTFVURV9QKTogRGVmaW5lIHRvIHVzZSBob29rIGluIGNwbHVzLXhyZWYuYy4KKwkoRklMRV9OQU1FX0pPSU5FUik6IERlZmluZSB0byB1c2UgaG9vayBpbiBjcGx1cy14cmVmLmMuCisKKwkqIGNwbHVzLXhyZWYuYzogRml4IGJ1ZyBpbiBkZWZhdWx0IGRlZmluaXRpb24gb2YgRklMRV9OQU1FX0FCU09MVVRFX1AuCisJKEdOVV94cmVmX29wZW4pOiBGaXggYnVnIC0gd3JvbmcgYXJndW1lbnQgdG8gWFJFRl9GSUxFX05BTUUuCisJKEZJTEVfTkFNRV9KT0lORVIpOiBOZXcgbWFjcm8uCisJKEdOVV94cmVmX2ZpbGUpOiBVc2UgaXQuCisKK0ZyaSBBdWcgMzAgMTc6MzA6MTUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcGx1cy14cmVmLmM6IFJlaW5zdGFsbCBBdWcgMjUgY2hhbmdlcyBkaXNjYXJkZWQgYnkgVGllbWFubi4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IE5ldyBtb2RpZmllciBvcHRpb24gRVhQQU5EX0lOSVRJQUxJWkVSLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IFVzZSB0aGF0LgorCSoganVtcC5jIChmb3JjZWRfbGFiZWxzKTogTmV3IHZhciByZWNvcmRzIGxhYmVscyBub3QgdG8gZGVsZXRlLgorCShqdW1wX29wdGltaXplKTogRG9uJ3QgZGVsZXRlIHRob3NlIGxhYmVscy4KKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBBbnkgY29tcHV0ZWQgZ290byBnb2VzIHRvIHRob3NlIGxhYmVscy4KKwkqIHZhcmFzbS5jIChkZWNvZGVfYWRkcl9jb25zdCk6IERlYWwgd2l0aCBMQUJFTF9ERUNMLgorCitGcmkgQXVnIDMwIDE1OjQxOjAzIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChjb3B5bGVmdCk6IFVzZSBzZXBhcmF0ZSBjb3B5cmlnaHQgeWVhcnMuCisJKG1vdiopOiBVc2Ugbm9uaW1tZWRpYXRlX29wZXJhbmQgaW5zdGVhZCBvZiBnZW5lcmFsX29wZXJhbmQuCisKKwkqIHRtLW1pcHMuaCAoY29weWxlZnQpOiBVc2Ugc2VwYXJhdGUgY29weXJpZ2h0IHllYXJzLgorCisJKiB4bS1taXBzLmggKGNvcHlsZWZ0KTogVXNlIHNlcGFyYXRlIGNvcHlyaWdodCB5ZWFycy4KKworCSogeG0tdW1pcHMuaCAoY29weWxlZnQpOiBVc2Ugc2VwYXJhdGUgY29weXJpZ2h0IHllYXJzLgorCitGcmkgQXVnIDMwIDA4OjQ3OjMwIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGVjay5jIChidWlsZF94XyopOiBUcnkgZmlyc3QgY2FsbGluZyBgYnVpbGRfb3BmbmNhbGwnCisJd2l0aCBGTEFHUz09MC4gIElmIHRoYXQgc3VjY2VlZHMsIGNoZWNrIHByb3RlY3Rpb24uCisJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBgZm9sZCcgZG9lcyBub3QgcHJlc2VydmUgdGhlIHR5cGUgb2YgaXQncworCWV4cHJlc3Npb25zLCB3aGljaCBpcyBhIHByb2JsZW0gZm9yIEMrKyB3aGVuIHRyeWluZyB0byBrZWVwIGludHMgYW5kCisJZW51bXMgZGlzdGluY3QuCisKKwkqIGNwbHVzLWRlY2wuYyAobG9va3VwX25hbWUpOiBXaGVuIHRoZXJlIGlzIGEgY2hvaWNlIGJldHdlZW4gc2VlaW5nCisJYSBuYW1lIGFzIGEgdHlwZSBhbmQgc2VlaW5nIGFzIGEgZGVjbCwgY2FsbCBgYXJiaXRyYXRlX2xvb2t1cCcgdG8KKwltYWtlIHRoZSBkZWNpc2lvbi4KKwkqIGNwbHVzLWxleC5jIChhcmJpdHJhdGVfbG9va3VwKTogTmV3IGZ1bmN0aW9uLiAgVXNlcyBtaW51dGUgYW1vdW50cworCW9mIHN5bnRhY3RpYyBjb250ZXh0IHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNlZSBhIG5hbWUgYXMgYSB0eXBlIG9yCisJc29tZXRoaW5nIGVsc2UuCisKK0ZyaSBBdWcgMzAgMDc6NDA6NDkgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGp1bXAuYyAoZGVsZXRlX2p1bXApOiBXaGVuIGNoZWNraW5nIFJFR19ERUFEIG5vdGVzLCBtYWtlIHN1cmUgdGhleQorCWhhdmUgYSBsZWdhbCB2YWx1ZS4KKworRnJpIEF1ZyAzMCAwMDo1NzowNSAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGFsbG9jX3F0eV9mb3Jfc2NyYXRjaCk6IFRyZWF0IFEgLSBVIGFzIHJlZyBjbGFzcyBpZgorCUVYVFJBX0NPTlNUUkFJTlQgaXMgbm90IGRlZmluZWQuCisJKiByZWdjbGFzcy5jIChyZWdfY2xhc3NfcmVjb3JkKTogTGlrZXdpc2UuCisKK1RodSBBdWcgMjkgMjE6Mzk6MDcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogRml4IGxhc3QgY2hhbmdlLgorCitUaHUgQXVnIDI5IDE5OjExOjA1IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlY29nLmMgKGdlbmVyYWxfb3BlcmFuZCwgY29uc3RfZG91YmxlX29wZXJhbmQpOiBTaW1pbGFyIHRvCisJaW1tZWRpYXRlX29wZXJhbmQsIGRvbid0IGFjY2VwdCBhIFZPSURtb2RlIG9wZXJhbmQgaWYgdGhlCisJY2FsbGVyIHdhbnRzIGZsb2F0aW5nLgorCSogb3V0LXB5ci5jIChub25pbmRleGVkX29wZXJhbmQpOiBMaWtld2lzZS4KKworVGh1IEF1ZyAyOSAwOTo1MzoyNyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHBvZ28uZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwbHVzLXRyZWUuaCAoe1NFVCxDTEVBUn1fQVNTT0NfKik6IE5ldyBtYWNyb3MgbmVlZGVkIGJlY2F1c2Ugbm90CisJYWxsIEMgY29tcGlsZXJzIHN1cHBvcnQgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgYXMgbHZhbHVlcy4KKwkobGFuZ190eXBlKTogQ2hhbmdlIHR5cGUgb2YgTUVNT0laRURfVEFCTEVfRU5UUlkgYW5kIFNFQVJDSF9TTE9UCisJZnJvbSBgdm9pZCAqJyB0byBgY2hhciAqJywgdG8gbWFrZSBicmFpbmRlYWQgY29tcGlsZXJzIGF0IGxlc3Mgb2YgYQorCWRpc2FkdmFudGFnZS4KKworVGh1IEF1ZyAyOSAwODowNzo0MCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBVcGRhdGUgbGF0ZW5jaWVzLgorCisJKiBvdXQtbTg4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBDb3JyZWN0IG9mZnNldHMgZm9yCisJcmVnaXN0ZXIgc2F2ZXMuCisJKiB0bS1tODhrc3ZyNC5oIChGVU5DVElPTl9QUk9GSUxFUik6IFVzZSB0aGUgbmFtZSBfbWNvdW50IGFuZCBkbworCXJlZ2lzdGVyIHNhdmVzLgorCisJKiB0bS1tODhrLmggKEFTTV9EV0FSRl9QT1BfU0VDVElPTik6IFNwZWNpZnkgInByZXZpb3VzIi4KKworCUNoYW5nZXMgZnJvbSBSb24gR3VpbG1ldHRlOgorCSogZHdhcmZvdXQuYyAobG9va3VwX2ZpbGVuYW1lKTogT25seSBpbmNyZW1lbnQgdmFsaWRfZnRfZW50cmllcworCW9uY2Ugd2hlbiBhZGRpbmcgYSBmaWxlbmFtZSB0byB0aGUgdGFibGUuCisJKG91dHB1dF9zeW1ib2wpOiBEbyBvdXRwdXQgRElFcyBmb3IgYSBnbG9iYWwgVkFSX0RFQ0wgZGVmaW5pdGlvbi4KKworVGh1IEF1ZyAyOSAwNjoxNTozMiAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcGx1cy10eXBlMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBJZiB3ZSBoYXZlIGEgdmFsaWQgdmFsdWUgaW4KKwlgZXhwcl9hc19jb252ZXJzaW9uJyByZXR1cm4gdGhhdCBiZWZvcmUgcmV0dXJuaW5nIGVycm9yX21hcmtfbm9kZS4KKworCSogY3BsdXMtaW5pdC5jIChleHBhbmRfcmVjdXJzaXZlX2luaXQpOiBGaXggdHlwbyBpcyB0ZXN0aW5nCisJVFlQRV9VU0VTX1ZJUlRVQUxfQkFTRUNMQVNTRVMuCisKK1dlZCBBdWcgMjggMjM6MTI6MzUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogRm9yIHNoaWZ0IGFuZCByb3RhdGUgb3BzLAorCWlmIHRyYWRpdGlvbmFsLCB1c2UgdGhlIGNvbW1vbiB0eXBlIG9mIHRoZSBvcGVyYW5kcy4KKworV2VkIEF1ZyAyOCAwNzozMTozMyAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZHdhcmZvdXQuYywgZHdhcmYuaCwgUkVBRE1FLkRXQVJGOiBSZXBsYWNlbWVudCBmaWxlcyBmcm9tIFJvbgorCUd1aWxtZXR0ZSB0aGF0IGJyaW5nIHRoZSBkd2FyZiBpbXBsZW1lbnRhdGlvbiB1cCB0byB0aGF0IGRlZmluZWQgYnkKKwlkcmFmdCA0IG9mIHRoZSBkd2FyZiBzcGVjaWZpY2F0aW9uIChkYXRlZCA3LzMxLzkxKS4KKworV2VkIEF1ZyAyOCAwNjoyNDozMCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbGwgKi5tZCBmaWxlcyBleGNlcHQgYTI5ay5tZCBhbmQgcm9tcC5tZDogRG9uJ3QgYWxsb3cgQ09OU1RfSU5UCisJYXMgb3BlcmFuZCBmb3IgUlRMIG9wZXJhdGlvbnMgdGhhdCBuZWVkIGEgbW9kZSB0byBiZSB3ZWxsLWRlZmluZWQsCisJZS5nLiwgU0lHTl9FWFRFTkQsIFpFUk9fRVhURU5ELCBUUlVOQ0FURSwgRkxPQVQuICBTaW1pbGFybHksIGRvbid0CisJYWxsb3cgQ09OU1RfSU5UIGFzIGZpcnN0IG9wZXJhbmQgb2YgYSBDT01QQVJFLgorCisJKiBtYWNobW9kZS5oIChNSU4sIE1BWCk6IFVuZGVmaW5lIHRoZXNlIGJlZm9yZSBvdXIgZGVmaW5pdGlvbi4KKworVHVlIEF1ZyAyNyAyMTozMzowNCAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHBvZ28uZ251LmFpLm1pdC5lZHUpCisKKwkqIHZlcnNpb24uYzogTm93IDEuOTUuCisKK1R1ZSBBdWcgMjcgMTg6MDU6MjUgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKHBvc3NpYmxlX2dyb3VwX3ApOiBVc2UgZWFybGllc3QgY2xhc3MgdGhhdCBuZWVkcyBhIGdyb3VwLgorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogSGFuZGxlICV4IGFuZCAlWC4KKwkobGlua19jb21tYW5kX3NwZWMpOiBVc2UgJVguICBJZiBnaXZlbiAtY29sbGVjdCwgcGFzcyAtYy4KKwkoZGVmYXVsdF9jb21waWxlcnMgYysrKTogVXNlICV4IHRvIHBhc3MgLWMgdG8gbGlua2VyLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2NvZGUpOiBEb24ndCBjYWxsIGZvbGRfcnR4LAorCWJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbnNuIHRvIHBhc3MgZm9yIGl0cyBzZWNvbmQgYXJndW1lbnQuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IERvbid0IGZvbGQgd2hhdCB3ZSBnZXQgZnJvbSBsb29rdXBfYXNfZnVuY3Rpb24uCisKK1R1ZSBBdWcgMjcgMTc6NDY6NTkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHJ0eF9jb3N0KTogQSBVU0UgaXMgZnJlZTsgaXQgaXMgbGlrZWx5IGJlaW5nIHVzZWQgYXMgYSBtYXJrZXIuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IElmIHdlIGRlY2lkZWQgbm90IHRvIG1ha2UgYSByZWctcmVnIGNvcHkgYmV0d2VlbiAKKwllcXVpdmFsZW50IHJlZ3MgaW50byBhIG5vLW9wLCBzZWUgaWYgdGhlcmUgaXMgYW4gZXF1aXZhbGVudCBjb25zdGFudAorCXRoYXQgaXMgY2hlYXBlciB0aGFuIHRoZSByZWdpc3RlciB3ZSBkZWNpZGVkIHRvIHVzZS4KKworCSogY3NlLmMgKGNzZV9pbnNuKTogRml4IGFyZyBpbiBpbnNlcnRfcmVncyBjYWxsIHdoZW4gbWFraW5nIGEKKwlzZWNvbmRhcnkgZXF1aXZhbGVuY2UgZHVlIHRvIGEgU1VCUkVHOyB3ZSBhcmUgbm90IG1vZGlmeWluZyB0aGUKKwlyZWdpc3Rlci4KKworCSogY3NlLmMgKGRlbGV0ZV9kZWFkX2Zyb21fY3NlKTogVHJlYXQgYSBTRVQgdGhhdCBjb3BpZXMgYSByZWdpc3RlcgorCXRvIGl0c2VsZiBhcyBpZiBpdCB3ZXJlIHNldHRpbmcgYSBkZWFkIHJlZ2lzdGVyLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBDYWxsIGZvbGRfcnR4IG9uIHRoZSBhcmdzIHRoYXQgd2UKKwlhcmUgYWJvdXQgdG8gcmV0dXJuLgorCShmb2xkX3J0eCwgY2FzZSBTVUJSRUcpOiBDb3B5IGNvZGUgZnJvbSBlcXVpdl9jb25zdGFudCB0aGF0IGxvb2tzIHVwCisJYSBTVUJSRUcgaW4gdGhlIGhhc2ggdGFibGUuCisJSWYgb3VyIG91ciBmb2xkZWQgb3BlcmFuZCBpcyBlcXVpdmFsZW50IHRvIGEgY29uc3RhbnQsIHVzZSB0aGF0IHdoZW4KKwlzZWVpbmcgaWYgd2UgY2FuIGdldCBhIHBhcnQgb2YgYSBjb25zdGFudC4KKwkoZm9sZF9ydHgpOiBEb24ndCBzaG9ydC1jaXJjdWl0IHJlY3Vyc2l2ZSBjYWxsIGZvciBhbiBvcGVyYW5kIHRoYXQKKwlpcyBhIFNVQlJFRzsgYWRkIGNvbW1lbnQgaW4gUkVHIGNhc2UgdGhhdCB3ZSBhcmUgZG9pbmcgZXF1aXZfY29uc3RhbnQuCisJV2hlbiBsb29raW5nIGZvciBhc3NvY2lhdGl2ZSBvcGVyYXRpb24sIGNhbGwgZm9sZF9ydHggb24gcG90ZW50aWFsCisJY29uc3RhbnQgYXMgd2VsbCBhcyBlcXVpdl9jb25zdGFudC4KKwkoZXF1aXZfY29uc3RhbnQpOiBKdXN0IGxvb2sgdXAgYSBjb25zdGFudCBxdWFudGl0eSBmb3IgYSByZWdpc3RlcjsKKwlmb2xkX3J0eCB3aWxsIGRvIHRoZSBTVUJSRUcgb3BlcmF0aW9ucy4KKworCSogZm9sZC1jb25zdC5jICh7bmVnLG11bCxsc2hpZnQscnNoaWZ0LGxyb3RhdGUscnJvdGF0ZX1fZG91YmxlKToKKwlObyBsb25nZXIgc3RhdGljLgorCSogY3NlLmMgKHNpbXBsaWZ5X3t1bmFyeSxiaW5hcnl9X29wZXJhdGlvbik6IEZvbGQgc29tZSBESW1vZGUKKwlvcGVyYXRpb25zLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgRVFfRVhQUiwgTkVfRVhQUiwgLi4uKTogQWRkIGNvZGUgdG8gaGFuZGxlCisJY2FzZXMgd2hlcmUgd2UgYXJlIGNvbXBhcmluZyB0aGUgcmVzdWx0IG9mIGEgY29tcGFyaXNvbi4KKworVHVlIEF1ZyAyNyAxNDozNTo1OSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBTZXQgcmVnc19ldmVyX2xpdmUgZm9yIGFsbCBoYXJkIHJlZ3MuCisJV2FybmluZzogdGhpcyBtaWdodCBicmVhayBGVU5DVElPTl9QUk9MT0dVRSBhbmQgRlVOQ1RJT05fRVBJTE9HVUUKKwlpbiBzb21lIHBvcnRzLiAgQnV0IEkndmUgY2hlY2tlZCBhbGwgdGhlIGluc3RhbGxlZCBvbmVzLgorCSogdG0tZ21pY3JvLmggKEZVTkNUSU9OX1BST0xPR1VFKToKKwlDbGVhciBiaXQgZm9yIGZwIHJlZyBpZiB1c2VkIGFzIHN1Y2guCisJKiB0bS1taXBzLmggKE1VU1RfU0FWRV9SRUdJU1RFUik6IE9ubHkgZnJhbWVfcG9pbnRlcl9uZWVkZWQgYWZmZWN0cyBmcC4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBObyBlcnJvciBpZiBhcmdsaXN0IGNvbnRhaW5zIHR5cGUgdGFnLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2ZpeCk6IFJlYWxseSBjYWxsIGVtaXRfY21wX2luc24gcmlnaHQuCisKKwkqIGZsb2F0bGliLmM6IE5ldyBmaWxlLgorCisJKiBnbnVsaWIyLmMgKF9fY2x6X3RhYik6IE1vdmVkIHRvIF91ZGl2ZGkzLgorCitUdWUgQXVnIDI3IDA2OjQ0OjEyIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgcnRsLmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBEb24ndCB1c2UgdGhlIGNsZWFudXAgZ2VuZXJhdGVkCisJYnkgYGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCcuCisKKwkqIGNwbHVzLWNsYXNzLmMgKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IEhhbmRsZSBXSVRIX0NMRUFOVVBfRVhQUi4KKworTW9uIEF1ZyAyNiAyMDo1NTo1OCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBDYXN0IHNob3J0c1tuXSB0byBsb25nIGJlZm9yZSBzaGlmdGluZy4KKwkqIGZvbGQtY29uc3QuYyAoZGVjb2RlKTogTGlrZXdpc2UuCisKKwkqIE1ha2VmaWxlLmluIChJTlNUQUxMX0RBVEEpOiBSZW5hbWVkIGZyb20gSU5TVEFMTF9GSUxFLgorCisJKiBjc2UuYyAoY2Fub25faGFzaCk6IERvbid0IGNyYXNoIGlmIHN1YmV4cHJlc3Npb24gaXMgMC4KKworCSogY3BsdXMtbGV4LmMgKGludGVyZmFjZV9zdHJjbXApOiBQdXQgYmFjayB2YXJpYWJsZSBzMS4KKworTW9uIEF1ZyAyNiAxODoxNDozMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IENvbXBsZXRlIHByZXZpb3VzIGNoYW5nZTsKKwloYWQgb21pdHRlZCBhcmcgb24gdHdvIHJldHVybnMuCisKK01vbiBBdWcgMjYgMTU6MTY6MzkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Zsb2F0LCBleHBhbmRfZml4KTogUGFzcyBuZXcgYXJnIHRvIGVtaXRfY21wX2luc24uCisKKwkqIG91dC1tNjhrLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogRml4IGxhc3QgY2hhbmdlLgorCitNb24gQXVnIDI2IDExOjIwOjUxIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kIChjbXBzaSBpbnNuKTogRG9uJ3QgcHJvdmlkZSBhbiBpbnNuIHRoYXQgY29tcGFyZXMgdHdvCisJY29uc3RhbnRzLgorCitNb24gQXVnIDI2IDA4OjM0OjQ4IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjb2xsZWN0LW9zZi5jICh0b3BsZXZlbCwgcmVhZF9maWxlLCBlbmRfZmlsZSk6IERvbid0IHVzZSBtbWFwLAorCXVubGVzcyBhbGwgZGVmaW5lcyBuZWVkZWQgYXJlIGRlZmluZWQuCisJKHZhcmlvdXMpOiBJZiAtZGVidWcgdHVybiBvbiBkZWJ1Z2dpbmcgY29kZS4gIENoYW5nZSBhbGwgb2NjdXJhbmNlcworCW9mICNpZmRlZiBERUJVRyBzZWN0aW9ucyB0byBpZiAoZGVidWcpLgorCShtYWluLCBhZGRfdG9fbGlzdCk6IENvcnJlY3RseSBjYXN0IHhjYWxsb2MgY2FsbHMuCisJKHNjYW5fcHJvZ19maWxlKTogQ29ycmVjdCB4Y2FsbG9jIHRvIGFsbG9jYXRlIGVub3VnaCBzcGFjZQorCShzY2FuX3Byb2dfZmlsZSk6IElmIC1kZWJ1ZywgZG9uJ3QgZHVtcCBlbnRpcmUgc3ltYm9sIHRhYmxlLCBqdXN0CisJZHVtcCB0aGUgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4KKworCSogbWFrZS1kZWNyb3NlIChDRkxBR1MpOiBVc2UgREVCX09QVCBmb3IgZGVmYXVsdCBkZWJ1ZyBhbmQgb3B0aW1pemUKKwlvcHRpb25zLCB1c2UgU0hMSUIgZm9yIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbnMuCisJKERFQl9PUFQpOiBEZWZpbmUgdG8gYmUgLWcgLU8yLgorCShTSExJQik6IERlZmluZSB0byBiZSAtTCR7QlVJTER9L3Vzci9jY3MvbGliLCB3aGljaCBmb3JjZXMgc3RhdGljCisJbGlicmFyaWVzIHdpdGggYm90aCBvbGQgYW5kIG5ldyAxLjM5IGNvbXBpbGVycy4KKwkoQ09GRl9DRkxBR1MpOiBEZWZpbmUgdG8gYmUgLU8yIC1nMC4KKwkoY29sbGVjdCk6IEFkZCBMSUJERVBTIGRlcGVuZGVuY3kuCisKK01vbiBBdWcgMjYgMDc6MjI6MjEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbWFjaG1vZGUuaCAoTUlOLCBNQVgpOiBEZWZpbmUgaGVyZS4KKwkqIGMtZGVjbC5jLCBjYWxscy5jLCBjcGx1cy1jbGFzcy5jLCBjcGx1cy1kZWNsLmMsIGNwbHVzLXRyZWUuYzoKKwlEb24ndCBkZWZpbmUgaGVyZS4KKwkqIGV4cHIuYywgZm9sZC1jb25zdC5jLCBmdW5jdGlvbi5jLCBpbnRlZ3JhdGUuYywgcmVjb2cuYzogTGlrZXdpc2UuCisJKiBydGwuYywgc2Rib3V0LmMsIHN0bXQuYywgc3Rvci1sYXlvdXQuYywgdmFyYXNtLmM6IExpa2V3aXNlLgorCSogYy10eXBlay5jLCBjb21iaW5lLmMsIGNzZS5jLCBlbWl0LXJ0bC5jLCBleHBtZWQuYywgZmluYWwuYzoKKwlEZWxldGUgZGVmaW5pdGlvbnMgb2YgIm1pbiIgYW5kICJtYXgiOyB1c2UgTUlOIGFuZCBNQVggbm93IGRlZmluZWQKKwlpbiBtYWNobW9kZS5oLgorCSogZ2VuZW1pdC5jLCByZWdjbGFzcy5jLCByZWxvYWQuYywgcmVsb2FkMS5jOiBMaWtld2lzZS4KKwkqIGNjY3AuYyAoTUlOLCBNQVgpOiBEZWZpbmUgaW5zdGVhZCBvZiBtaW4gYW5kIG1heCBmb3IgY29uc2lzdGVuY3kuCisKKwkqIHRtLXJzNjAwMC5oIChIQVJEX1JFR05PX01PREVfT0spOiBEb24ndCBwdXQgREltb2RlIGluIHJlZyAzMTsKKwlzaW1pbGFybHkgZm9yIFRJbW9kZS4KKworCSogY3NlLmMgKGNzZV9za2lwX3RvX25leHRfYmxvY2spOiBWYXJpYWJsZSBkZWxldGVkLgorCShjc2VfaW5zbik6IERvbid0IHNldCBpdCBhbnltb3JlLgorCShjc2VfYmFzaWNfYmxvY2spOiBEb24ndCB1c2UgY3NlX3NraXBfdG9fbmV4dF9ibG9jazsgaW5zdGVhZCwgbG9vaworCWZvciB1bmNvbmRpdGlvbmFsIGp1bXBzIGV4cGxpY2l0bHk7IGNvcnJlY3RseSBoYW5kbGUgdW5jb25kaXRpb25hbAorCWp1bXBzIHRvIHRoZSBlbmQgb2YgdGhlIGJhc2ljIGJsb2NrIGJ5IGV4dGVuZGluZyB0aGUgYmFzaWMgYmxvY2sgaW4KKwl0aGF0IGNhc2UuCisKKwkqIHJlbG9hZDEuYyAoYWx0ZXJfcmVnKTogRW5zdXJlIHRoYXQgc3RhY2sgc2xvdCBpcyBhbHdheXMgdGhlIGNvcnJlY3QKKwltb2RlLgorCitNb24gQXVnIDI2IDA2OjIwOjQzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGUyLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IFRyZWF0IGNvbnN0cnVjdG9yIGNhc3RzIGFzCisJaGF2aW5nIGNsZWFudXBzIGluIHRoaXMgZnVuY3Rpb24uCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogVXNlIGNsZWFudXBzIGNyZWF0ZWQgYnkgZnVuY3RpbmFsCisJY2FzdHMgdXNlZCBhcyBpbml0aWFsaXplcnMuCisKKwkqIGNwbHVzLWluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogQ2FsbCBlcnJvciB3aXRoCisJSURFTlRJRklFUl9QT0lOVEVSLCBub3QgREVDTF9OQU1FLCBvZiBOQU1FLgorCisJKiBjcGx1cy1tZXRob2QuYyAoZm5kZWNsX2FzX3N0cmluZyk6IERvbid0IHNraXAgYGluX2NoYXJnZScKKwlwYXJhbWV0ZXIgdHdpY2UuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfbmV3KTogRGVsZXRlIGNvZGUgd2hpY2ggc2hvcnQtY2lyY3VpdGVkCisJbXVsdGlwbGUgaW5kaXJlY3Rpb25zIGluIEFCU0RDTCBhbmQgbWFkZSBldmVyeXRoaW5nIGxvb2sgbGlrZSBqdXN0IGEKKwlzaW5nbGUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24uCisKKwkqIGNwbHVzLXR5cGVjay5jICh3YXJuX2Zvcl9hc3NpZ25tZW50KTogTm93IHRha2VzIGEgRlVOQ1RJT05fREVDTAorCWluc3RlYWQgb2YgYW4gSURFTlRJRklFUl9OT0RFIGFzIGFuIGFyZ3VtZW50LiAgQWxzbywgcHJpbnQKKwlyZWFzb25hYmxlIG1lc3NhZ2Ugd2hlbiBBUkdOVU0gPCAwLgorCisJKiBjcGx1cy10eXBlY2suYyAodHlwZV91bmtub3duX3ApOiBJZiBUUkVFX0NPREUgKEVYUCkgPT0gVFJFRV9MSVNULAorCWl0J3MgdHlwZSBpcyB1bmtub3duLgorCisJKiBjcGx1cy10eXBlY2suYyAoY29tbW9ucGFybXMpOiBEb24ndCBpbnNlcnQgZGVmYXVsdCBwYXJtZXRlciB2YWx1ZXMKKwlpbnRvIGV4aXN0aW5nIGFyZyBsaXN0cy4gIEluc3RlYWQsIHVuaWZ5IHRoZW0gaW50byBuZXcgb25lcyBvbmx5LgorCisJKiBjcGx1cy10eXBlY2suYyAoY29udmVydF9mb3Jfe2luaXRpYWxpemF0aW9uLGFzc2lnbm1lbnR9KTogUGFzcworCUZOREVDTCBpbnN0ZWFkIG9mIGZ1bmN0aW9uIG5hbWUuICBVc2UgYGxhbmdfcHJpbnRhYmxlX25hbWUnIHRvIHBhc3MKKwlwcmludGFibGUgbmFtZSB0byBgd2Fybl9mb3JfYXNzaWdubWVudCcuCisKKwkqIGNwbHVzLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERvbid0IGZvcmNpYmx5IGNvbnZlcnQgcHRycyB0bworCW90aGVyIHRoaW5ncyBpbnRvIHB0cnMgdG8gZnVuY3Rpb25zIGp1c3QgdG8gc2F0aXNmeSB0aGUgY29udmVyc2lvbgorCW9mIHZpcnR1YWwgZnVuY3Rpb25zLgorCitTdW4gQXVnIDI1IDIyOjQ0OjU3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXR5cGVjay5jIChjb21wcGFybXMpOiBEZWFsIHdpdGggU1RSSUNUID09IDMuCisJKiBjcGx1cy1zZWFyY2guYyAoZ2V0X2ZpcnN0X21hdGNoaW5nX3ZpcnR1YWwpOiBDYWxsIGBjb21wcGFybXMnIHdpdGgKKwlTVFJJQ1QgPT0gMy4KKworCSogY3BsdXMtbGV4LmMgKG9wZXJhdG9yX25hbWVfc3RyaW5nKTogRG9uJ3QgYWJvcnQgaWYgd2UgY2Fubm90IGZpbmQKKwlhIG9wZXJhdG9yIG5hbWUgZm9yIE5BTUUuICBJbnN0ZWFkLCByZXR1cm4gaWRlbnRpZmllciBmb3IKKwk8aW52YWxpZCBvcGVyYXRvcj4uCisKK1N1biBBdWcgMjUgMTU6NDI6NTkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcGx1cy14cmVmLmMgKEZJTEVfTkFNRV9BQlNPTFVURV9QKTogTmV3IG1hY3JvLgorCShHTlVfeHJlZl9maWxlKTogVXNlIGl0LgorCShvcGVuX3hyZWZfZmlsZSk6IFVzZSBuZXcgbWFjcm8gWFJFRl9GSUxFX05BTUUgaWYgZGVmaW5lZC4KKwkqIGNwbHVzLWxleC5jIChGSUxFX05BTUVfTk9ORElSRUNUT1JZKTogTmV3IG1hY3JvLgorCVVzZWQgZnJlcXVlbnRseSBpbnN0ZWFkIG9mIHN0cnJjaHIuCisJKiB4bS12bXMuaDogRGVmaW5lIHRob3NlIHRocmVlIG1hY3Jvcy4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IFVzZSB3b3JkIG1vZGUgZm9yIGZvcmNlX3JlZyBvbiBvcDEgb2Ygc2hpZnQuCisKKwkqIG91dC1tNjhrLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogVXNlIG1vdmVxIHdoZW4gYXBwcm9wcmlhdGUuCisKKwkqIGZpbmFsLmMgKHNwbGl0X2RvdWJsZSk6IEhhbmRsZSBhbGwgaW50ZWdlciBjb25zdGFudHMuCisJKiBvdXQtbTY4ay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2Ugc3BsaXRfZG91YmxlIGZvciBhbGwgY29uc3RhbnRzLgorCSogPz8/IE1vc3Qgb3V0LSouYyBuZWVkIGNoYW5naW5nLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBNYWtlIHNvbWUgbG9jYWwgdmFycyB1bnNpZ25lZC4KKwkqIGMtY29tbW9uLmMgKHR5cGVfZm9yX3NpemUpOgorCSogYy1jb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IAorCSogdG0taTg2MC5oIChBU01fT1VUUFVUX0FTQ0lJKTogCisJKiBjLXBhcnNlLnkgKHl5bGV4KToKKwkqIGV4cHIuYyAoZ2V0X3BvaW50ZXJfYWxpZ25tZW50KToKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF91bmlvbiwgbGF5b3V0X3JlY29yZCk6CisJKiB0cmVlLmMgKGdldF91bndpZGVuZWQsIGdldF9uYXJyb3dlcik6CisKKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBEb24ndCBkZWNsYXJlIHZhX2xpc3QgYXMgcmVnaXN0ZXIuCisJKiBmaW5hbC5jIChhc21fZnByaW50Zik6IExpa2V3aXNlLgorCSogdHJlZS5jIChidWlsZCwgYnVpbGRfbnQsIGJ1aWxkX3BhcnNlX25vZGUpOiBMaWtld2lzZS4KKworCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogRG9uJ3QgYXNzdW1lIHRoZSBjb21wYXJlIHN1cnZpdmVzCisJd2hlbiB0aGUgYnJhbmNoIGlzIGVtaXR0ZWQuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogRml4IHR5cG8gaW4gcHJldiBjaGFuZ2UuCisKKwkqIGVtaXQtcnRsLmMgKGZjb25zdDJfcnR4LCBkY29uc3QyX3J0eCk6IE5ldyB2YXJzLgorCShpbml0X2VtaXRfb25jZSk6IEluaXRpYWxpemUgdGhlbS4KKworCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkLCBzdG9yZV9iaXRfZmllbGQpOgorCUZvciBtdWx0aS13b3JkIGZpZWxkLCBkbyB3b3JkcyBmcm9tIGxlYXN0IHNpZ25pZmljYW50IGZpcnN0LgorCisJKGV4dHJhY3Rfc3BsaXRfYml0X2ZpZWxkKTogT1AwIGlzIG9ubHkgdGhlIGZpcnN0IHdvcmQgb2YgdGhlCisJc291cmNlLCBzbyBpZiB0aGlzIGlzIGEgU1VCUkVHLCBtdXN0IGNhbGwgb3BlcmFuZF9zdWJ3b3JkIG9uCisJU1VCUkVHX1JFRyAoT1AwKSBpbnN0ZWFkIG9mIE9QMC4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6IENvcnJlY3RseSBvdXRwdXQgY29uc3RhbnRzIGZvcgorCWJpdGZpZWxkcyB3aGljaCBhcmUgZ3JlYXRlciB0aGFuIEhPU1RfQklUU19QRVJfSU5ULiAgVXNlCisJVFJFRV9JTlRfQ1NUX0hJR0ggZm9yIHRoZSBoaWdoIGJpdHMuCisKKwkqIE1ha2VmaWxlLmluIChFTlFVSVJFX0NGTEFHUywgRU5RVUlSRV9MREZMQUdTKTogTmV3IHBhcmFtZXRlcnMuCisJKGVucXVpcmUsIGVucXVpcmUubyk6IFVzZSB0aGVtLgorCisJKiB0bS1zeXN2NC5oOiBOZXcgZmlsZSwgY3V0IG91dCBmcm9tIHRtLW04OGsuaC4KKwkqIHRtLW04OGsuaDogSW5jbHVkZSB0aGF0LgorCisJKiB2YXgubWQgKHNsdHUsIHNnZXUpOiBOZXcgcGF0dGVybnMuCisKK1NhdCBBdWcgMjQgMTE6MTk6NDMgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogUGFzcyBhIFRZUEVfREVDTCBub2RlLCBub3QgYQorCVJFQ09SRF9UWVBFIG5vZGUsIHRvIGBidWlsZF9jb21wb25lbnRfdHlwZV9leHByJy4KKworCSogY3BsdXMtY3Z0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IFdhcm4gYWJvdXQgY29udmVyc2lvbiBmcm9tCisJaW50ZWdyYWwgdHlwZSB0byBlbnVtZXJhbCB0eXBlIGlmIEZMQUdfSU5UX0VOVU1fRVFVSVZBTEVOQ0UgaXMgemVyby4KKwkoY29udmVydF9mb3JjZSk6IFNldCBGTEFHX0lOVF9FTlVNX0VRVUlWQUxFTkNFIG5vbi16ZXJvIHdoZW4gY2FsbGluZworCWBjb252ZXJ0Jy4KKworCSogY3BsdXMtdHlwZWNrLmMgKGJ1aWxkX3hfKl9vcCk6IERvbid0IHRyeSB1c2luZyBidWlsdC1pbiBvcGVyYXRvcnMKKwlpZiB1c2VyLWRlZmluZWQgb25lcyBhcmUgbm90IGFjY2Vzc2libGUuCisKKwkqIGNwbHVzLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogVXNlIGBleHBhbmRfZXhwcicgdG8gc2V0IHRoZQorCURFQ0xfUlRMIG9mIHRoZSBUQVJHRVRfRVhQUi4gIFRoaXMgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBjb2RlIHRoYXQKKwl1c2VkIHRvIHJlcXVpcmUgdGhhdCBFWFAgYmUgc29tZSBzb3J0IG9mIF9ERUNMLgorCisJKiBjcGx1cy1pbml0LmMgKGluaXRfaW5pdF9wcm9jZXNzaW5nKTogTGluayBnbG9iYWwgcnVudGltZSBmdW5jdGlvbnMKKwlfX2J1aWx0aW5fbmV3IGFuZCBfX2J1aWx0aW5fZGVsZXRlIHRvIHRoZWlyIGNhbm9uaWNhbCBvcGVyYXRvcgorCW5hbWVzIChpLmUuLCBvcCRudyBhbmQgb3AkZGwpLgorCisJKiBjcGx1cy1sZXguYyAoaW5pdF9sZXgpOiBEb24ndCBzZWUgYGR5bmFtaWMnIGFzIGEgcmVzZXJ2ZWQgd29yZCBpZgorCVNPUyBpcyBub3QgZGVmaW5lZC4KKwkqIGNwbHVzLWRlY2wyLmMgKGZsYWdfZHluYW1pYyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUuCisKKwkqIGNwbHVzLWRlY2wuYyAoZGVmaW5lX2Nhc2VfbGFiZWwpOiBHaXZlIGVycm9yIHdoZW4gY2FzZSBsYWJlbCBjdXRzCisJaW50byBhIGJpbmRpbmcgY29udG91ciB3aXRoIGNsZWFudXBzLgorCSogc3RtdC5jIChsYXN0X2NsZWFudXBfdGhpc19jb250b3VyKTogQ2hhbmdlZCBuYW1lIGZyb20KKwlgdGhpc19jb250b3VyX2hhc19jbGVhbnVwc19wJy4gIE5vdyByZXR1cm5zIGxhc3QgY2xlYW51cCwgaWYgdGhlcmUKKwl3YXMgb25lLgorCSogdHJlZS5oOiBEZWNsYXJlIGBsYXN0X2NsZWFudXBfdGhpc19jb250b3VyJy4KKworCSogY3BsdXMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGxldCBtZW1iZXIgZnVuY3Rpb25zIGhhdmUKKwlzdGF0aWMgbGlua2FnZS4KKworCSogY3BsdXMtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogQ29weSBub24tdmlydHVhbCBiYXNldHlwZXMgb2YKKwl2aXJ0dWFsIGJhc2V0eXBlcyBzbyB0aGF0IHNlYXJjaCByb3V0aW5lcyBjYW4gZmluZCBhbWJpZ3VpdGllcworCWFyaXNpbmcgaW4gbGF0dGljZXMgd2hlcmUgdGhlIHNhbWUgdHlwZSBhcHBlYXJzIGFzIGEgbm9uLXZpcnR1YWwKKwliYXNldHlwZSBvZiBkaWZmZXJlbnQgdHlwZXMgaW4gdGhlIGxhdHRpY2UuCisJKGNvcHlfbm9udmlydHVhbF9jaGlsZHJlbik6IEltcGxlbWVudCBhIHJlY3Vyc2l2ZSBkZWVwLWNvcHkgb2YKKwlub252aXJ0dWFsIHR5cGVzIGluIGFuIGluaGVyaXRhbmNlIGxhdHRpY2UuCisKKwkqIGNwbHVzLXNlYXJjaC5jIChsb29rdXBfZm5maWVsZHMpOiBDb3JyZWN0bHkgY2F0Y2ggY2FzZSB3aGVyZSB0aGVyZQorCWFyZSBtdWx0aXBsZSBmdW5jdGlvbnMgaW4gYW4gTUkgbGF0dGljZS4KKwkqIGNwbHVzLWNhbGwuYyAoaWRlYWxfY2FuZGlkYXRlKTogSWYgd2UgZmluZCBhIHJlcXVlc3RlZCBmdW5jdGlvbiBpcworCWFtYmlndW91cyBpbiBhbiBNSSBsYXR0aWNlLCBzZXQgQ1AtPkVWSUwgdG8gMS4KKwkoYnVpbGRfbWV0aG9kX2NhbGwpOiBJZiBDUC0+RVZJTCBpcyBzZXQgb24gcmV0dXJuIGZyb20KKwlgaWRlYWxfY2FuZGlkYXRlJywgcmV0dXJuIGVycm9yX21hcmtfbm9kZS4KKworCSogY3BsdXMtZGVjbC5jIChsb29rdXBfbmFtZSk6IFByZWZlciBmaW5kaW5nIHR5cGVuYW1lcyB0byBvdmVybG9hZGVkCisJZnVuY3Rpb25zIHdoZXJlIHRoZXJlJ3MgYSBjb2xsaXNpb24uCisJKHB1c2hkZWNsKTogRG9uJ3Qgb3ZlcnJpZGUgdGhlIGRlY2xhcmF0aW9uIG9mIGdsb2JhbCBmdW5jdGlvbnMgd2l0aAorCWEgVFlQRV9ERUNMIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUuICBgbG9va3VwX25hbWUnIG5vdyBrbm93cyBob3cgdG8KKwlmaW5kIGJvdGguCisJKGdsb2JhbGl6ZV9uZXN0ZWRfdHlwZSk6IENoYW5nZWQgdG8gbG9vayBpbiBJREVOVElGSUVSX1RZUEVfVkFMVUUKKwlzbG90IGZvciBnbG9iYWwgZGVmaW5pdGlvbnMgdGhhdCBhcmUgbm90IGluIElERU5USUZJRVJfR0xPQkFMX1ZBTC4KKwkqIGNwbHVzLXR5cGUyLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IERlYWwgd2l0aCBtb3JlIGFtYmlndWl0aWVzCisJYW5kIG1vcmUgY2FzZXMgd2hlcmUgdGhlIHN5bnRhY3RpYyBmb3JtIGBOQU1FICggUEFSTVMgKScgY2FuIGhhdmUKKwltZWFuaW5nLgorCitTYXQgQXVnIDI0IDAxOjMzOjAwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBNYWtlIGludGVnZXIgZXh0ZW5zaW9uIGdlbmVyYWwuCisKKwkqIG9wdGFicy5jIChpbml0X2V4dGVuZHMsIGdlbl9leHRlbmRfaW5zbik6IEZpbmlzaCBhbmQgdHVybiBvbi4KKworCSogcmVsb2FkMS5jIChwb3NzaWJsZV9ncm91cF9wKTogSW5zaXN0IG9uIHJlZ3MgaW4gbmVlZGVkIGNsYXNzLgorCisJKiBTWVNDQUxMUy5jIChhbGxvY2EpOiBEZWNsYXJlIGFyZyBhcyBzaXplX3QuCisKKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IpOiBIYW5kbGUgdW5pb24gY29uc3RydWN0b3IuCisKKwkqIGZpbmFsLmMgKHNwbGl0X2RvdWJsZSk6IGxvbmcgbG9uZyBDT05TVF9ET1VCTEUgbm93IGhhcyBWT0lEbW9kZS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEZpeCBjYXJyeSBwcm9wYWdhdGlvbiBidWdzLgorCUhhbmRsZSBjYXJyeSBwcm9wYWdhdGlvbiBmb3IgYmlnLWVuZGlhbiBjYXNlLgorCitGcmkgQXVnIDIzIDIxOjI5OjQ2IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBNb3JlIFBJQyBmaXhlcy4gIEFsc28sIGRvbid0IGFzc2lnbgorCWFueSBzdG9yYWdlIGZvciBzdGF0aWMgbWVtYmVyIHZhcmlhYmxlcyBleGNlcHQgd2hlbiB0aGV5IGFyZSBiZWluZworCWRlZmluZWQuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfdmlydHVhbF9pbml0KTogQ2hhbmdlIGludGVyZmFjZSB0byB0YWtlCisJTUFJTl9BU1NPQyBpbnN0ZWFkIG9mIEZPUl9UWVBFLgorCShleHBhbmRfYWdncl9pbml0XzEpOiBEaXR0by4KKwkoZXhwYW5kX3JlY3Vyc2l2ZV9pbml0XzEpOiBEaXR0by4KKwkoZXhwYW5kX2FnZ3JfdmJhc2VfaW5pdHtfMX0pOiBDaGFuZ2UgaW50ZXJmYWNlIHRvIHRha2UgYW4gYXNzb2MKKwlpbnN0ZWFkIG9mIGEgdHlwZS4KKwkoZXhwYW5kX3JlY3Vyc2l2ZV9pbml0KTogRGl0dG8uCisKKwkqIGNwbHVzLXB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgUEFSTV9ERUNMIG5vZGVzLgorCisJKiBjcGx1cy1zZWFyY2guYyAoZ2V0X2Jhc2VfYXNzb2MpOiBVc2UgQVNTT0NfTUFSS0VEIGluc3RlYWQgb2YKKwlBU1NPQ19CQVNFVFlQRV9NQVJLRUQgdG8gbWFyayB2aXNpdGVkIG5vZGVzLgorCShsb29rdXBfZmllbGQsIGxvb3B1cF9mbmZpZWxkcyk6IFVzZSBBU1NPQ19GSUVMRFNfTUFSS0VEIGluc3RlYWQgb2YKKwlBU1NPQ19WQkFTRV9NQVJLRUQgd2hlbiBzZWFyY2hpbmcuCisJKHtiZnNfLHVuLGJmc191bn1tYXJrZWQycCk6IERlbGV0ZWQsIHVudXNlZC4KKwkoZGZzX3t1bn1tYXJrMik6IERlbGV0ZWQsIHVudXNlZC4KKwkoZGZzX3VubWFyazEyKTogRGVsZXRlZCwgdW51c2VkLgorCShidWlsZF92YmFzZV92dGFibGVzX2luaXQpOiBDaGFuZ2UgaW50ZXJmYWNlIHRvIHRha2UgTUFJTl9BU1NPQworCWluc3RlYWQgb2YgRk9SX1RZUEUuCisKK0ZyaSBBdWcgMjMgMTg6MzE6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGRvX3N0b3JlX2ZsYWcpOiBHaXZlIHVwIGlmIGNhbid0IGRpcmVjdGx5IGNvbXBhcmUgYXJncy4KKworRnJpIEF1ZyAyMyAxODowMDo1OCAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IEFkZCBuZXcgYXJnIGFuZCBub3cgcmV0dXJucworCWludCBpbnN0ZWFkIG9mIHZvaWQuCisJQWxsIGNhbGxlcnMgY2hhbmdlZC4KKworCSogZXhwci5jIChjb21wYXJlX2NvbnN0YW50cyk6IERlbGV0ZWQuCisJKGNvbXBhcmVfZnJvbV9ydHgpOiBVc2Ugc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24gaW5zdGVhZCBvZgorCWNvbXBhcmVfY29uc3RhbnRzOyBhYm9ydCBpcyBub3QgbmVlZGVkIHNpbmNlCisJc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24gd2lsbCByZXR1cm4gMCBpZiBnaXZlbiBWT0lEbW9kZS4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogQ29ycmVjdGx5IGNvbXB1dGUgbW9kZSBvZiBvcGVyYW5kcyBiZWluZworCWNvbXBhcmVkLgorCitGcmkgQXVnIDIzIDE3OjE2OjI3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOgorCUF2b2lkIHNwZWNpYWwgY2FzZXMgZm9yIG1vZGVzIHdoZW4gd2lkZW5pbmcuCisJUmVhbGl6ZSBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSByZWR1Y2VzIHRvIGludCBjb25zdGFudC4KKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBOZXcgYXJnLCBNT0RFLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwlJZiBib3RoIGFyZ3MgYXJlIGNvbnN0X2ludCwgY29weSBvbmUgdG8gYSByZWcuCisKK0ZyaSBBdWcgMjMgMTU6NTQ6MjEgMTk5MSAgICAoRXJpYyBZb3VuZ2RhbGUgYXQgeW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIG1ha2UtY2MxLmNvbTogRml4IGJ1ZyB3aGVyZSBjcGx1cy1wYXJzZS55IHdhcyBhbHdheXMgYmVpbmcgcGFzc2VkCisJdGhyb3VnaCBiaXNvbiwgd2hldGhlciBpdCBuZWVkZWQgaXQgb3Igbm90LgorCitGcmkgQXVnIDIzIDE1OjIwOjQ2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBSZW1vdmUgQXVnIDEyIGNoYW5nZS4KKwlDb252ZXJ0IGluZGV4IHRvIG5vbWluYWxfdHlwZSBmb3Igc3VidHJhY3Rpb24uCisKK1RodSBBdWcgMjIgMTQ6MzQ6MjEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUsIGNvbmZpZy5nY2M6IFN3aXRjaCB0byBhbGwtZGFzaGVzIGNvbmZpZyBuYW1lcy4KKworCSogZ251bGliMi5jIFtVX3VkaXZkaTMsIExfbXVsZGkzXTogRGVmaW5lIF9fY2x6X3RhYiBmb3IgbG9uZ2xvbmcuaC4KKworVGh1IEF1ZyAyMiAwMDoyODoyOSAxOTkxICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgemV2cykKKworCSogbG9uZ2xvbmcuaDogUmVuYW1lIEJJVFNfUEVSX0xPTkcgdG8gTE9OR19UWVBFX1NJWkUuCisJKiBsb25nbG9uZy5oIChfX2libTAzMl9fKTogRGVmaW5lIGNvdW50X2xlYWRpbmdfemVyb3MgYW5kIHVtdWxfcHBtbS4KKwkqIGxvbmdsb25nLmg6IERlZmluZSBVTVVMX1RJTUUgYW5kIFVESVZfVElNRSBmb3Igc29tZSBDUFVzLgorCSogbG9uZ2xvbmcuaCAoX19zcGFyY19fIHVtdWxfcHBtbSk6IE1vdmUgdHdvIGluc24gZnJvbSBlbmQgdG8gdGhlCisJICBub3BzLiAgKFNhdmVzIHR3byBpbnNuLikKKwkqIGxvbmdsb25nLmggKF9fc3BhcmNfXyB1bXVsX3BwbW0pOiBSZXdyaXRlIGluIG9yZGVyIHRvIGF2b2lkCisJICBicmFuY2gsIGFuZCB0byBwZXJtaXQgaW5wdXQvb3V0cHV0IHJlZ2lzdGVyIG92ZXJsYXAuCisJKiBsb25nbG9uZy5oIChfXzI5a19fKTogUmVtb3ZlIGR1cGxpY2F0ZWQgdWRpdl9xcm5uZCBkZWZpbml0aW9uLgorCSogbG9uZ2xvbmcuaCAoX18yOWtfXyB1bXVsX3BwbW0pOiBTcGxpdCBhc20gaW5zdHJ1Y3Rpb25zIGludG8gdHdvCisJICBhc20gc3RhdGVtZW50cyAoZ2l2ZXMgYmV0dGVyIGNvZGUgaWYgZWl0aGVyIHRoZSB1cHBlciBvciBsb3dlcgorCSAgcGFydCBvZiB0aGUgcHJvZHVjdCBpcyB1bnVzZWQuCisJKiBsb25nbG9uZy5oOiBNZW50aW9uIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpbiBkZXNjcmlwdGlvbiBvZgorCSAgdWRpdl9xcm5uZC4KKwkqIGxvbmdsb25nLmggKElCTVIyKTogQWRkIHVkaXZfcXJubmQuCisJKiBsb25nbG9uZy5oIChhZGRfc3NhYWFhLCBzdWJfZGRtbXNzIFtDIGRlZmF1bHQgdmVyc2lvbnNdKTogTWFrZSBfX3gKKwkgIGB1bnNpZ25lZCBsb25nIGludCcuCisJKiBsb25nbG9uZy5oOiBBZGQgYGludCcgYWZ0ZXIgYHVuc2lnbmVkJyBhbmQgYGxvbmcnIGV2ZXJ5d2hlcmUuCisJKiBsb25nbG9uZy5oOiBBZGQgQVJNLCBpODYwIHN1cHBvcnQuCisJKiBsb25nbG9uZy5oIChzcGFyYyB1bXVsX3BwbW0pOiBVc2UgX19hc21fXywgbm90IGFzbS4KKwkqIGxvbmdsb25nLmggKElCTVIyIHVtdWxfcHBtbSk6IFJlZmVyIHRvIF9fbTAgYW5kIF9fbTEsIG5vdCB0byBtMAorCSAgYW5kIG0xIChvdmVybGFwIGJldHdlZW4gb3V0cHV0IGFuZCBpbnB1dCBvcGVyYW5kcyBkaWQgbm90IHdvcmspLgorCSogbG9uZ2xvbmcuaDogQWRkIFZBWCwgUk9NUCBhbmQgSFAtUEEgc3VwcG9ydC4KKwkqIGxvbmdsb25nLmg6IFNvcnQgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCisJICBvbiB0aGUgQ1BVIG5hbWUuCisJKiBsb25nbG9uZy5oOiBIYWNrIGNvbW1lbnRzLgorCSogbG9uZ2xvbmcuaDogRGVmaW5lIEJJVFNfUEVSX0xPTkcgdG8gMzIgaWYgaXQncyBub3QgYWxyZWFkeQorCSAgZGVmaW5lZC4KKwkqIERlZmluZSBfX0JJVFM0IHRvIEJJVFNfUEVSX0xPTkcgLyA0LgorCSogRG9uJ3QgYXNzdW1lIDMyIGJpdCB3b3JkIHNpemUgaW4gImNvdW50X2xlYWRpbmdfemVyb3MiIEMgbWFjcm8uCisJICBVc2UgX19CSVRTNCBhbmQgQklUU19QRVJfTE9ORyBpbnN0ZWFkLgorCSogbG9uZ2xvbmcuaCAoNjhrKTogRGVmaW5lIGFkZF9zc2FhYWEgc3ViX2RkbW1zcywgYW5kIHVtdWxfcHBtbQorCSAgZXZlbiBmb3IgcGxhaW4gbWM2ODAwMC4KKwkqIGxvbmdsb25nLmg6IENsZWFuIHVwIGNvbW1lbnRzLgorCSogbG9uZ2xvbmcuaDogRG9uJ3QgdXNlICNlbGlmLgorCSogbG9uZ2xvbmcuaDogVXNlIF9fYXNtX18gaW5zdGVhZCBvZiBhc20uCisJKiBsb25nbG9uZy5oIChzcGFyYyB1ZGl2X3Fybm5kKTogTWFrZSBpdCB0byBvbmUgc3RyaW5nIG92ZXIgc2V2ZXJhbAorCSAgbGluZXMuCisJKiBsb25nbG9uZy5oOiBQcmVlbmQgX19sbF8gdG8gQiwgaGlnaHBhcnQsIGFuZCBsb3dwYXJ0LgorCSogbG9uZ2xvbmcuaDogTW92ZSBhcnJheSB0IGluIGNvdW50X2xlYWRpbmdfemVyb3MgdG8gZ251bGliMi5jCisJICBSZW5hbWUgdGhlIGFycmF5IF9fY2x6X3RhYi4KKwkqIGxvbmdsb25nLmggKHVtdWxfcHBtbSBbQyB2YXJpYW50XSk6IE1ha2UgX191bC4uLl9fdmgKKwkgIGB1bnNpZ25lZCBpbnQnLCBhbmQgY2FzdCB0aGUgbXVsdGlwbGljYXRpb25zLiAgVGhpcyB3YXkKKwkgIGNvbXBpbGVycyBtb3JlIGVhc2lseSBjYW4gY2hvb3NlIGNoZWFwZXIgbXVsdGlwbGljYXRpb24KKwkgIGluc3RydWN0aW9ucy4KKworVGh1IEF1ZyAyMiAwNzozNjo0MCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogcnRsLmg6IERlY2xhcmUgc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24uCisKKwkqIG91dC1tODhrLmMgKG91dHB1dF9maWxlX3N0YXJ0KTogUHV0IHRoZSBgZ2NjMl9jb21waWxlZC4nIHN5bWJvbAorCWluIHRoZSBkYXRhIHNlY3Rpb24uICBFbGltaW5hdGVzIHN5bWJvbCB0cmFuc2xhdGlvbiBwcm9ibGVtcyB3aXRoCisJZGVidWdnZXJzLgorCisJQ2hhbmdlcyBmcm9tIFJvbiBHdWlsbWV0dGU6CisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogVXNlIGR3YXJmb3V0X2ZpbmlzaCB3aGVuIGRvbmUuCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBVc2UgZHdhcmZvdXRfbGluZS4KKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2ZpbmlzaCk6IFJlbmFtZSBmcm9tIGR3YXJmb3V0X2ZpbmFsaXplLgorCSogdG0tbTg4ay5oIChBU01fT1VUUFVUX0RXQVJGX0xJTkUsIEFTTV9GSUxFX0VORCk6IE5vIG5lZWQgZm9yCisJZHdhcmYgc3BlY2lmaWMgYWN0aW9ucy4KKworVGh1IEF1ZyAyMiAwNToyOTo1NyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBEb24ndCBjb21iaW5lIGlmIElOU04gaGFzIFJFR19SRVRWQUwgbm90ZS4KKwkodHJ5X2NvbWJpbmUpOiBTaW1pbGFybHksIGRvbid0IGNvbWJpbmUgaWYgSTMgaGFzIFJFR19MSUJDQUxMIG5vdGUuCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogRG9uJ3QgdXNlIHZhcmlhYmxlIFBSRVYgaW4KKwluZXN0ZWQgYmxvY2tzIHRoYXQgc2hhZG93cyBQUkVWIGF0IGZ1bmN0aW9uIGxldmVsLgorCUlmIHdlIGhhbmRsZSB0aGlzIGluc24gbm9ybWFsbHksIGFycmFuZ2UgdG8gc2NhbiBhbnkgaW5zbnMgdGhhdAorCXdlcmUgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgaXQgZm9yIG1ha2luZyBhdXRvLWluYyBhZGRyZXNzaW5nLgorCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBDbGVhciBDT05TVF9ET1VCTEUKKwltZW1vcnkgY2hhaW4uCisKKwkqIHRvcGxldi5jIChmYXRhbF9pbnNuX25vdF9mb3VuZCk6IE5vdyB0aGF0IGl0IGlzIGNhbGxlZCBpbiBmaW5hbC5jCisJd2hlbiBhbiBpbnNuIGRvZXNuJ3QgbWF0Y2ggY29uc3RyYWludHMsIHdyaXRlIGRpZmZlcmVudCBlcnJvcgorCW1lc3NhZ2UgaW4gdGhhdCBjYXNlLgorCSogZ2VuYXR0cnRhYi5jICh3cml0ZV9hdHRyX2Nhc2UpOiBDYWxsIGZhdGFsX2luc25fbm90X2ZvdW5kIGluc3RlYWQKKwlvZiBhYm9ydCB3aGVuIGNvbnN0cmFpbl9vcGVyYW5kcyBmYWlscy4KKworVGh1IEF1ZyAyMiAwNToyOTowOSAxOTkxICBNYXR0aGV3IFNlbGYgIChtc2VsZiBhdCBuZXh0LmNvbSkKKworCSogcnRsLmMgKGFkZF9kZXBlbmRlbmNlKTogVXNlcyBvZiBSVFhfVU5DSEFOR0lOR19QIHNob3VsZCBub3cgYmUKKwlTQ0hFRF9HUk9VUF9QLgorCitUaHUgQXVnIDIyIDAwOjM0OjIwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVjb2cuYyAob2Zmc2V0dGFibGVfYWRkcmVzc19wKTogQWx3YXlzIHBhc3MgUUltb2RlIHRvIGFkZHJlc3NwLgorCitXZWQgQXVnIDIxIDA5OjIwOjA5IDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiB0bS1kZWNyb3NlLmggKExJTktfU1BFQyk6IEFsbG93IC1waWMtbm9uZSwgLWdsdWUsIC1ub3NocmxpYgorCXN3aXRjaGVzLgorCShMSUJfU1BFQyk6IEFkZCAtTC91c3IvY2NzL2xpYiB0byBnZXQgbmV3IDEuMSBsaW5rZXIgdG8gdXNlIHN0YXRpYworCWxpYnJhcmllcyBpbnN0ZWFkIG9mIHNoYXJlZCBsaWJyYXJpZXMsIHNpbmNlIHRoZSBzaGFyZWQgbGlicmFyeQorCXN1cHBvcnQgaGFzIG5vdCB5ZXQgYmVlbiBhZGRlZC4KKworV2VkIEF1ZyAyMSAwNjoxODoxMiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvdXQtcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ1knLCAnWicpOiBGaXggdHlwbyBpbgorCWF1dG8taW5jIGNhc2UuCisJKiByczYwMDAubWQgKG1vdnRpKTogQWRkIG1pc3NpbmcgJVUgaW4gbWVtb3J5IGNhc2VzLgorCisJKiB0bS1yczYwMDAuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogSW5kZXhlZCBhZGRyZXNzZXMgYXJlIG5vdAorCXZhbGlkIGZvciBESW1vZGUgYW5kIFRJbW9kZS4KKwkqIG91dC1yczYwMDAuYyAoaW5kZXhlZF9tZW1fb3BlcmFuZCk6IERlbGV0ZWQuCisJKHByaW50X29wZXJhbmQsIGNhc2UgJ1gnKTogRG9uJ3QgdXNlIGluZGV4ZWRfbWVtX29wZXJhbmQ7IGNoZWNrCisJb3Vyc2VsdmVzIGluc3RlYWQuCisJKiByczYwMDAubWQgKG1vdmRpLCBtb3Z0aSk6IERvbid0IGNoZWNrIGZvciBpbmRleGVkIG1lbW9yeSBvcGVyYW5kcy4KKworVHVlIEF1ZyAyMCAxNjowMjo0MSAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9wYXJtcyk6IEhhbmRsZSBwYXJtIHBhc3NlZCBpbiByZWcgYW5kIGxpdmluZyBpbgorCXBzZXVkbyB0aGF0IHdhcyBvcHRpbWl6ZWQgYXdheS4KKworTW9uIEF1ZyAxOSAxOToxMDo0MiAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzaW9uLCBjYXNlIE5FRyk6IENhbiBvbmx5IGNvbnZlcnQKKwkoLWEpIDwgQyB0byBhID4gQyBpZiBDIGlzIHplcm8uCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQsIGV4dHJhY3RfYml0X2ZpZWxkKTogVXNlIFdPUkRfTU9ERSBmb3IKKwltb2RlIG9mIEJJVFNfUEVSX1dPUkQgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBvdGhlciB1c2Ugb2YgdmFyaWFibGUKKwluYW1lZCBNT0RFLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBEb24ndCBtYWtlIGEgUkVHX0VRVUFMIG5vdGUgd2hvc2UgY29udGVudHMKKwlhcmUgYSBSRUc7IHRoZSBSRUcgbWlnaHQgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFBhc3MgYW55IENMT0JCRVJzIG1hZGUgd2hlbiByZWxvYWRpbmcKKwlhbiBpbnNuIHRvIGBmb3JnZXRfb2xkX3JlbG9hZHNfMScuCisKK01vbiBBdWcgMTkgMTI6NDc6NDYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUgKG04OGstbHVuYSk6IFJlbmFtZSBhbHRlcm5hdGl2ZSBhcHByb3ByaWF0ZWx5LgorCisJKiBjc2UuYyAoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBTcGxpdCBvdXQgZnJvbSAuLi5fYmluYXJ5Xy4uLgorCShmb2xkX3J0eCk6IFVzZSB0aGF0IGZ1bmN0aW9uIGZvciByZWxhdGlvbnNhbHMuCisJKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBEb24ndCBhbGxvdyByZWxhdGlvbmFscy4KKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGdlbl9iaW5hcnkpOiBVc2Ugc2ltcGxpZnlfcmVsYXRpb25fb3BlcmF0aW9uLgorCSogaW50ZWdyYXRlLmMgKHN1YnN0X2NvbnN0YW50cyk6IExpa2V3aXNlLgorCSoganVtcC5jIChqdW1wX29wdGltaXplKTogTGlrZXdpc2UuCisKKwkqIGMtY29tbW9uLmMgKHNob3J0ZW5fY29tcGFyZSk6IFdhcm4gYWJvdXQgdW5zaWduZWQgPj0gMC4KKworU3VuIEF1ZyAxOCAxNzoyOToxNiAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogdG0tdm1zLmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBSZW1vdmUgY29kZSB0byByb3VuZCB0aGUgc3RvcmFnZQorCXNpemUgdXAgdG8gYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLgorCitTdW4gQXVnIDE4IDE1OjM1OjI3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9wYXJtcyk6CisJSGFuZGxlIHBhcm0gcGFzc2VkIGluIHJlZyBhbmQgbGl2aW5nIGluIHBzZXVkbyB0aGF0IHdhcyBvcHRpbWl6ZWQgYXdheS4KKworCSogZnVuY3Rpb24uYyAoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEdpdmUgZGVjbF9wcmludGFibGVfbmFtZSBib3RoIGFyZ3MuCisKKwkqIGV4cHIuYyAoY29tcGFyZV9mcm9tX3J0eCk6CisJRG9uJ3QgY2hhbmdlIHRvIHVuc2lnbmVkIGlmIHRvbyB3aWRlIGZvciBob3N0IGludC4KKwkqIGNzZS5jCShmb2xkX3J0eCk6IFVzZSBtb2RlX2FyZzAgdG8gc2ltcGxpZnkgY29tcGFyaXNvbiBvcHMuCisJVXBkYXRlIG1vZGVfYXJnMCB3aGVuIHdlIGxvb2sgYXQgdmFsdWUgb2YgY2MwLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBSZWFsbHkgZG9uJ3QgcmVjb3JkIGJpdGZpZWxkIGRlc3RpbmF0aW9ucworCXVubGVzcyBzb3VyY2UgaXMgY29uc3RhbnQgd2hpY2ggZml0cy4KKwlCdXQgcHJlLXRydW5jYXRlIG90aGVyIGNvbnN0YW50cy4KKworCSogY29uZmlnLnN1YnI6IEFsbG93ICRvcyB0byBiZSBlbXB0eS4KKworCSogZnVuY3Rpb24uYyAobG9va3VwX3N0YXRpY19jaGFpbik6IENoZWNrIGZvciAwIGJlZm9yZSBpbmxpbmUgZnVuY3Rpb24uCisKKwkqIGNvbmZpZy5zdWJyIChwYzUzMiwgbWluaXgpOiBOZXcgYWx0ZXJuYXRpdmVzLgorCisJKiBjb25maWd1cmUgKGVkaXRpbmcgTWFrZWZpbGUpOiBVc2UgY3Jvc3MtbWFrZS4KKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNyb3NzKTogQ2hhbmdlIGRlcCB0byBpbnN0YWxsLWdudWxpYi4KKworU2F0IEF1ZyAxNyAxNzoxODowNSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBBbGwgY3BsdXMtKiBmaWxlczogQ2hhbmdlIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQysrCisJaW5oZXJpdGFuY2UgbGF0dGljZSBmb3IgdHlwZXMuICBUaGVyZSBpcyBubyBsb25nZXIgc3VjaCBhIHRoaW5nIGFzIGEKKwljbGFzc3R5cGVfdmFyaWFudC4gIEluc3RlYWQsIHR5cGVzIGFsbCBoYXZlIHRoZWlyIG93biBsYXR0aWNlcworCWFjY2Vzc2VkIHZpYSB0aGVpciBDTEFTU1RZUEVfQVNTT0MgZmllbGQuCisKKwkqIGNwbHVzLXRyZWUuaCAobGFuZ190eXBlKTogRGVsZXRlIGZpZWxkcyBPRkZTRVQsCisJTUFJTl9DTEFTU19WQVJJQU5ULCBORVhUX0NMQVNTX1ZBUklBTlQsIFZJQV9QVUJfT1JfVklSVC4KKwlSZW5hbWUgZmllbGQgQVNfSURfTElTVCB0byBJRF9BU19MSVNULCBzaW5jZSBpdCdzIGEgbGlzdC4KKwkoQ0xBU1NUWVBFX0FTX0lEX0xJU1QpOiBSZW5hbWVkIHRvIENMQVNTVFlQRV9JRF9BU19MSVNULgorCUFkZCBmaWVsZCBBU1NPQ19BU19MSVNULCB3aGljaCBpcyBhIFRSRUVfTElTVCB3aG9zZSBUUkVFX1ZBTFVFIGlzCisJdGhlIGFzc29jIGZvciB0aGUgdHlwZS4KKwkoQ0xBU1NUWVBFX1ZJQV8qLCBTRVRfQ0xBU1NUWVBFX1ZJQVMpOiBEZWxldGVkLgorCShDTEFTU1RZUEVfT0ZGU0VUKik6IERlbGV0ZWQuCisJKENMQVNTVFlQRV9OX0JBU0VDTEFTU0VTKTogTm93IHVzZXMgdHlwZSdzIGFzc29jLiAgVFlQRV9CQVNFVFlQRVMKKwlmaWVsZCBpcyB1bnVzZWQuICBOZXh0IGNoYW5nZSB3aWxsIG1ha2UgVFlQRV9CQVNFVFlQRVMgaG9sZCB0aGUKKwlhc3NvYyBmaWVsZC4KKwkoQ0xBU1NUWVBFX1ZCQVNFX1NJWkUpOiBVc2Ugc2xvdCBpbiBUWVBFX0xBTkdfU1BFQ0lGSUMgaW5zdGVhZCBvZgorCXNuZWFraW5nIGl0IGludG8gdGhlIFRSRUVfVFlQRSBmaWVsZCBvZiB0aGUgYmFzZXR5cGVzLgorCisJKEFTU09DX1RZUEUpOiBEZWxldGVkLiAgTm93IHVzZSBBU1NPQ19WQUxVRSBldmVyeXdoZXJlLgorCShBU1NPQ197QkFTRVRZUEUsQkFTRVRZUEVTfSk6IE5ldyBtYWNyb3MuICBCb3RoIGFyZSBvcGVyYXRpb25zIG9uCisJYXNzb2NzIGFuZCByZXR1cm4gYXNzb2NzLgorCShDTEFTU19BU1NPQ19CQVNFVFlQRSk6IE5ldyBtYWNyby4gIFRoaXMgcGVyZm9ybXMgcm91Z2hseSB0aGUgc2FtZQorCWZ1bmN0aW9uIHRoYXQgQ0xBU1NUWVBFX0JBU0VDTEFTUyB1c2VkIHRvLCBidXQgaXQgcmV0YWlucyBubyBhc3NvYworCWluZm8gaW4gdGhlIHR5cGUgaXQgcmV0dXJucy4KKwkoQVNTT0NfTkVYVF9BU1NPQyk6IE5ldyBtYWNybyB1c2VkIGZvciB0cmF2ZXJzaW5nIGFzc29jIGNoYWlucyBidWlsdAorCXVwIGJ5IHNlYXJjaCByb3V0aW5lcy4KKwkoQVNTT0NfVklBX3tQVUJMSUMsVklSVFVBTH0pOiBOZXcgbWFjcm9zIGZvciBhY2Nlc3NpbmcgaW5oZXJpdGFuY2UKKwlpbmZvcm1hdGlvbi4gIENMQVNTVFlQRV9WSUFfe1BVQkxJQyxWSVJUVUFMfSBubyBsb25nZXIgdXNlZC4KKwkoQVNTT0NfQ0lEKTogTmV3IG1hY3JvLgorCisJKERFQ0xfQU5PTl9VTklPTl9FTEVNKTogRGVsZXRlZC4gIE5vdyBhbm9ueW1vdXMgdW5pb24gZGVjbHMgYXJlCisJZGlzdGluZ3Vpc2hlZCBhcyBGSUVMRF9ERUNMcyB3aXRoIE5VTEwgREVDTF9OQU1FcyBhbmQgVU5JT05fVFlQRQorCXR5cGVzLgorCisJKERFUklWRURfRlJPTV9QKTogTmV3IG1hY3JvLiAgQ2hhbmdlIGNhbGxzIHRoYXQgdGVzdGluZyBpbmhlcml0YW5jZQorCXJlbGF0aW9uc2hpcHMgKGdldF9iYXNlX3R5cGUgYW5kIGdldF9iYXNlX2Rpc3RhbmNlKSB0byB1c2UgdGhpcyBtYWNyby4KKworCSogY3BsdXMtdHlwZTIuYyAoYmFzZXR5cGVfb3JfZWxzZSk6IENoYW5nZSBpbnRlcmZhY2UgdG8gdXNlL3JldHVybiBhbgorCWFzc29jIGluc3RlYWQgb2YgYSB0eXBlLiAgQ2hhbmdlIG5hbWUgdG8gYmFzZV9hc3NvY19vcl9lbHNlLgorCisJKiBjcGx1cy10cmVlLmMgKGJ1aWxkX2NsYXNzdHlwZV92YXJpYW50KTogRGVsZXRlZC4KKwkoY29weV90eXBlX2xhbmdfc3BlY2lmaWMpOiBEZWxldGVkLgorCSogYWxsIGNwbHVzLSogZmlsZXM6IEV2ZXJ5dGhpbmcgdGhhdCB1c2VkIHRvIHVzZSBDTEFTU1RZUEVfT0ZGU0VUIG9uCisJdHlwZXMgbm93IHVzZXMgQVNTT0NfT0ZGU0VUIG9uIGFzc29jcy4KKworCSogY3BsdXMtY2xhc3MuYyAocHJvcGFnYXRlX2Jhc2V0eXBlX29mZnNldHMpOiBDaGFuZ2UgaW50ZXJmYWNlIHRvIHVzZQorCWFzc29jcyBpbnN0ZWFkIG9mIHR5cGVzLiAgQ2hhbmdlIG5hbWUgdG8gcHJvcGFnYXRlX2Fzc29jX29mZnNldHMuCisJKiBjcGx1cy1zZWFyY2guYyAoZ2V0X2Jhc2VfdHlwZSk6IERpdHRvOyBuYW1lIGNoYW5nZWQgdG8KKwlnZXRfYmFzZV9hc3NvYy4KKworCSogY3BsdXMtY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90byk6IENoYW5nZSBpbnRlcmZhY2UgdG8gdXNlIGFuIGFzc29jCisJaW5zdGVhZCBvZiBhIHR5cGUuCisJKGNvbnZlcnRfcG9pbnRlcl90b192YmFzZSk6IERpdHRvLgorCSogY3BsdXMtY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogRGl0dG8uCisJKiBjcGx1cy1jbGFzcy5jIChnZXRfdmZpZWxkX29mZnNldCk6IERpdHRvLgorCShidWlsZF9tZXRob2RfY2FsbCk6IERpdHRvLgorCShtYXliZV9maXh1cF92cHRycyk6IERpdHRvLgorCSogY3BsdXMtc2VhcmNoLmMgKGdldF9maXJzdF9tYXRjaGluZ192aXJ0dWFsKTogRGl0dG8uCisJKGdldF92aXJ0dWFsc19uYW1lZF90aGlzKTogRGl0dG8uCisJKHRyZWVfbmVlZHNfY29uc3RydWN0b3JfcCk6IERpdHRvLgorCShnZXRfdmlydHVhbF9kZXN0cnVjdG9yKTogRGl0dG8uCisJKHRyZWVfaGFzX2FueV9kZXN0cnVjdG9yX3ApOiBEaXR0by4KKwkoZ2V0X2Jhc2VsaW5rcyk6IERpdHRvLgorCShsb29rdXBfe2ZpZWxkLGZuZmllbGRzfSk6IERpdHRvLiAgQWxzbywgdXNlIEFTU09DX1ZCQVNFX01BUktFRAorCWluc3RlYWQgb2YgQ0xBU1NUWVBFX01BUktFRDIgdG8gbWFyayB2aXJ0dWFsIGJhc2V0eXBlcyB0aGF0IGhhdmUKKwliZWVuIHZpc2l0ZWQuCisJKGJ1aWxkX3ZiYXNlX3Z0YWJsZXNfaW5pdCk6IERpdHRvLgorCSh7YnVpbGQsZnJlZX1fbWlfbWF0cml4KTogRGl0dG8uCisJKiBjcGx1cy1pbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IERpdHRvLgorCShleHBhbmRfYWdncl92YmFzZV9pbml0XzEpOiBEaXR0by4KKwkoYnVpbGRfdmlydHVhbF9pbml0KTogRGl0dG8uCisJKiBjcGx1cy1jbGFzcy5jIChidWlsZF9jbGFzc19pbml0X2xpc3QpOiBSZXdyaXR0ZW4gdG8gYnVpbGQgbGlzdCB3aXRoCisJYXNzb2MgZW50cmllcyBpbnN0ZWFkIG9mIHR5cGVzLiAgQWxzbywgdXNlIG5ldyBtYWNybworCUFTU09DX0JBU0VJTklUX01BUktFRCBpbnN0ZWFkIG9mIENMQVNTVFlQRV9NQVJLRUQ2LgorCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBOZXcgYXJndW1lbnQgQVNTT0NTIGlzIHRoZSBsaXN0IG9mIGFzc29jcyB0aGF0CisJZGVzY3JpYmUgdGhlIGJhc2V0eXBlcyBvZiBULgorCisJKiBjcGx1cy10cmVlLmMgKG1ha2VfbGFuZ190eXBlKTogQWx3YXlzIGluaXRpYWxpemUKKwlDTEFTU1RZUEVfVkJBU0VfU0laRSB0byBpbnRlZ2VyX3plcm9fbm9kZS4gIFRvIHRlc3QgaWYgYSBjbGFzcyBoYXMKKwl2aXJ0dWFsIGJhc2VjbGFzc2VzLCB0ZXN0IENMQVNTVFlQRV9WQkFTRUNMQVNTRVMsIG5vdAorCUNMQVNTVFlQRV9WQkFTRV9TSVpFLgorCisJKiBjcGx1cy1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogUmV3cml0dGVuIHRvIHVzZSBhc3NvY3MgaW5zdGVhZCBvZgorCXR5cGVzIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBjcGx1cy1zZWFyY2guYyAoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBDaGFuZ2UgaW50ZXJmYWNlIHRvIHVzZSBhc3NvY3MKKwlvciB0eXBlcy4gIEFsc28sIFBBVEhfUFRSIGFyZ3VtZW50IGlzIG5vdyBhbiBhc3NvYyBjaGFpbiwgbm90IGEKKwlUUkVFX0xJU1QuICBBbGdvcml0aG0gdG8gZmluZCBsZWZ0bW9zdCBwYXRoIGlzIG5vdyBtb3JlIGVmZmljaWVudC4KKwkoY29tcHV0ZV92aXNpYmlsaXR5KTogVXNlcyBhc3NvYyBjaGFpbiBpbnN0ZWFkIG9mIFRSRUVfTElTVCBvZgorCXR5cGVzLgorCShyZWN1cnNpdmVfYm91bmRlZF9iYXNldHlwZV9wKTogTmV3IGZ1bmN0aW9uLgorCShkZnNfd2FsaywgZGZzXyogZnVuY3Rpb25zKTogQ2hhbmdlIHRvIGJlIGNhbGxlZCB3aXRoIGFzc29jcyBpbnN0ZWFkCisJb2YgdHlwZXMuCisJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoLCBhbGwgYmZzXyopOiBEaXR0by4KKwljcGx1cy10cmVlLmMgKHJldmVyc2VfcGF0aCk6IE5ldyBmdW5jdGlvbi4gIExpa2UgbnJldmVyc2UsIGJ1dCB3b3JrcworCW9uIGFzc29jIGNoYWlucy4KKworCSogY3BsdXMtY2xhc3MuYyAoYnVpbGRfdnRhYmxlLCBwcmVwYXJlX2ZyZXNoX3Z0YWJsZSwKKwltb2RpZnlfdnRhYmxlX3tlbnRyaWVzLGVudHJ5fSwpOiBDaGFuZ2UgaW50ZXJmYWNlcyB0byB1c2UgYXNzb2NzCisJaW5zdGVhZCBvZiB0eXBlcy4gIFVzZSBtYWNybyBBU1NPQ19WVEFCTEVfUEFUSF9NQVJLRUQgb24gdGhlIGFzc29jcworCWluc3RlYWQgb2YgQ0xBU1NUWVBFX01BUktFRDMuICBVc2UgbWFjcm8gQVNTT0NfTkVXX1ZUQUJMRV9NQVJLRUQgb24KKwl0aGUgYXNzb2NzIGluc3RlYWQgb2YgQ0xBU1NUWVBFX01BUktFRDQuCisKKwkqIGNwbHVzLWRieG91dC5jOiBOb3cgbmVlZHMgdG8ga25vdyBtb3JlIGFib3V0IGFzc29jcy4gIFdoZW4gYXNzb2NzCisJYXJlIHB1dCBpbiB0aGUgVFlQRV9CQVNFVFlQRXMgZmllbGQsIGl0IHNob3VsZCBub3QgbmVlZCB0byBrbm93CisJYWJvdXQgbGFuZ190eXBlLgorCisJKiBjcGx1cy1kZWNsLmMgKHhyZWZfdGFnKTogUmV3cml0dGVuIHRvIGJ1aWxkIHByb3BlciBhc3NvYyBsaXN0cy4gIE5vCisJbG9uZ2VyIGJ1aWxkcyBiYXNldHlwZSBsaXN0cy4KKwkoZmluaXNoX2Z1bmN0aW9uKTogTWFrZSBgZmxhZ19ub19pbmxpbmUnIHJlYWxseSB0YWtlIGVmZmVjdC4KKworCSogY3BsdXMtdHJlZS5jIChtYWtlX2Fzc29jKTogQ2hhbmdlZCBmb3IgbmV3IGFzc29jIHN0cnVjdHVyZS4gIFRoZQorCWZpZWxkcyBpbiBhc3NvY3MgYXJlIG5vdzogVkFMVUUgKHBvaW50ZXIgdG8gVFlQRSB0aGF0IHRoaXMgYXNzb2MgaXMKKwlmb3IpLCBPRkZTRVQgKHRoZSBieXRlIG9mZnNldCBvZiB0aGlzIGJhc2V0eXBlIGluIHRoZSB3aG9sZSBvYmplY3QpLAorCVZUQUJMRSAodGhlIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBpbml0aWFsaXplCisJb2JqZWN0cyBjb250cm9sbGVkIGJ5IHRoaXMgYXNzb2MpLCBWSVJUVUFMUyAodGhlIHZpcnR1YWwgZnVuY3Rpb25zCisJdG8gdXNlIGZvciBpbml0aWFsaXppbmcgVlRBQkxFKSwgQkFTRVRZUEVTIChhIFRSRUVfVkVDIG9mIGJhc2V0eXBlcworCXRoYXQgdGhpcyBhc3NvYyBoYXMsIG9yIE5VTExfVFJFRSBpZiBub25lKSwgTkVYVF9BU1NPQyAoYSB0ZW1wb3JhcnkKKwlzbG90IHVzZWQgdG8gcG9pbnQgdG8gdGhlIG5leHQgYXNzb2MgaW4gYW4gYXNzb2MgY2hhaW4pLAorCVZJQV97UFVCTElDLFZJUlRVQUx9IGJpdHMgc2F5aW5nIHdoZXRoZXIgdGhpcyBhc3NvYyBpcyBhIGJhc2V0eXBlIG9mCisJaXRzIHBhcmVudCB2aWEgcHVibGljIG9yIHZpcnR1YWwgaW5oZXJpdGFuY2UuCisKKwkqIGNwbHVzLXB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IE1vZGlmaWVkIGFzIG5lY2Vzc2FyeSB0byBjb3BlIHdpdGgKKwluZXcgaW5oZXJpdGFuY2Ugc3RydWN0dXJlLgorCisJKiBjcGx1cy1zZWFyY2guYyAoZ2V0X2Jhc2VfdHlwZV8xKTogVGhpcyBmdW5jdGlvbiB3YXMgdW51c2VkIGFuZAorCXdyb25nLiAgRGVsZXRlZC4KKworCSogY3BsdXMtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogVGFrZSBuZXcgYXJnIEFTU09DUy4gIExheW91dCB0aGUKKwliYXNldHlwZXMgbXkgbW9kaWZ5aW5nIHRoZSBhc3NvY3MsIG5vdCB0aGUgdHlwZXMuCisJKGxheW91dF92YmFzZXR5cGVzKTogRGl0dG8uCisKKwkqIGFsbCBjcGx1cy0qIGZpbGVzOiBSZW1vdmVkIGRlYWQgY29kZSwgdW51c2VkIHZhcmlhYmxlcywgYW5kIGNoYW5nZQorCWFzc2VydHMgd2hlcmUgYXBwcm9wcmlhdGUuCisKKwkqIGFsbCBjcGx1cy0qIGZpbGVzOiBERUNMX1ZJUlRVQUxfUCBpcyBubyBsb25nZXIgdXNlZCBhcyBhIHRydXRoIHRlc3QKKwlmb3Igd2hldGhlciBvciBub3QgYSBmdW5jdGlvbiBpcyB2aXJ0dWFsLiAgVXNlIGEgdGVzdCBmb3Igbm9uLU5VTEwKKwlERUNMX1ZJTkRFWCBpbnN0ZWFkLgorCitTYXQgQXVnIDE3IDE1OjE2OjQwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uaCAoaW5saW5lX2Z1bmN0aW9uX2RlY2wpOiBEZWNsYXJlIGl0LgorCSogaW50ZWdyYXRlLmM6IEluY2x1ZGUgZnVuY3Rpb24uaDsgZG9uJ3QgZGVjbGFyZSB2YXIgaGVyZS4KKworCSogcnRsLmggKHJlZ25vX3JlZ19ydHgpOiBEZWNsYXJlIGl0LgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6CisJV2hlbiBmaWxsaW5nIGxhYmVsdmVjIGZyb20gY2FzZSByYW5nZSwgYXZvaWQgb3ZlcmZsb3cgaW4gaS4KKworRnJpIEF1ZyAxNiAyMzowNjozNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOgorCVRha2Ugb3V0IHdhcm5pbmcgYWRkZWQgYnkgcmVjZW50IGNoYW5nZXMuCisKK0ZyaSBBdWcgMTYgMjI6MDA6MDkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoaW5saW5lX2Z1bmN0aW9uX2RlY2wpOiBOZXcgdmFyLgorCShsb29rdXBfc3RhdGljX2NoYWluKTogRGVjbCBpcyBsb2NhbCBpZiBjb250ZXh0IGlzIGZ1bmN0aW9uIGJlaW5nCisJaW5saW5lZC4KKwkqIGludGVncmF0ZS5jOiBSZW1vdmUgcGFydGlhbGx5LWNvbXBsZXRlZCBwcmV2aW91cyBjaGFuZ2UuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBTZXQgaW5saW5lX2Z1bmN0aW9uX2RlY2wuCisKK0ZyaSBBdWcgMTYgMjE6NDE6MTAgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBhMjlrLm1kIChpbnN2LGV4dHYpOiBDaGFuZ2VkIFBPUyAvIFNJWkUgdG8gUE9TIC8gOCwgc2luY2UgaGlnaAorCW9yZGVyIGJpdCBvZiBCUCBzZWxlY3RzIGhhbGYtd29yZCBwb3NpdGlvbiBmb3IgaGFsZi13b3JkIG9wcy4KKworRnJpIEF1ZyAxNiAxODo1MjozNSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9saW5rcyk6IE9ubHkgcHV0IGxpbmsgb24gbmV3IGluc24gaWYgdGhlCisJaW5zbiB1c2VzIHRoZSByZWdpc3Rlci4gIElmIGZpcnN0IGZpbmQgYW4gaW5zbiB0aGF0IHNldHMgdGhlCisJcmVnaXN0ZXIgYnV0IGRvZXMgbm90IG90aGVyd2lzZSB1c2UgaXQsIHRoZW4gZHJvcCB0aGUgbGluay4KKwkgICAKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9saW5rcyk6IFN0cmlwIG9mZiBTVUJSRUcsIFpFUk9fRVhUUkFDVCwKKwlldGMuIGZyb20gdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBzZXQgYmVmb3JlIHBhc3NpbmcgaXQgdG8KKwlyZWdfbWVudGlvbmVkX3AgYW5kIHJlZ19yZWZlcmVuY2VkX3AuCisJCSAgCitTYXQgQXVnIDE2IDE3OjAyOjUzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLXB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBSdW4gbG9vcCBvdmVyIF9FWFBSIG5vZGVzIGZyb20KKwlUUkVFX0NPREVfTEVOR1RILTEgdG8gMCwgbm90IGZyb20gVFJFRV9DT0RFX0xFTkdUSC4KKworCSogY3BsdXMtZGVjbC5jIChncm9rZm5kZWNsKTogQ2hhbmdlIGA9PScgdG8gYD0nIGluIGFzc2lnbm1lbnQgdG8KKwlgcmFpc2VzJworCShmaW5pc2hfZGVjbCk6IElmIEZMQUdfUElDIGlzIG5vbnplcm8sIGxlYXZlIGluaXRpYWxpemVkIGRhdGEgaW4KKwljb21tb24gc3BhY2UuCisKK0ZyaSBBdWcgMTYgMTM6MTM6MTEgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiByZWctc3RhY2suYyAoY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3JlYWwpOiBOZXcgdmFyaWFibGUuCisJKHJlZ190b19zdGFjayk6IFNldCBpdC4KKwkoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBVc2UgaXQuCisJKGVtaXRfcG9wX2luc24pOiBSZXR1cm4gdGhlIG5ldyBpbnNuLgorCShjb252ZXJ0X3JlZ3MpOiBQb3AgYW55IHN0YWNrIHJlZ3MgbGl2ZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGJhc2ljCisJYmxvY2suCisKK0ZyaSBBdWcgMTYgMTY6MTY6NDUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiB0bS1zcGFyYy5oIChTRUxFQ1RfU0VDVElPTik6IERvbid0IHB1dCByZWxvY2F0YWJsZSB2YWx1ZXMgaW50bworCXRleHQgc3BhY2UgaWYgZ2VuZXJhdGluZyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLgorCitGcmkgQXVnIDE2IDE2OjAwOjMwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcHJvdG9pemUuYyAoX19mbHNidWYpOiBEZWNsIGRlbGV0ZWQ7IG5vIG5lZWQuCisJW3VsdHJpeF06IEluY2x1ZGUgc3RyaW5nLmgsIG5vdCBzdHJpbmdzLmguCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogQnVnIGFkZGluZyBORVcgdG8gYWRkciBvZiBYLgorCitGcmkgQXVnIDE2IDA4OjUxOjI1IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQUJTX0VYUFIsIE1JTl9FWFBSLCBNQVhfRVhQUik6IERvbid0CisJYWxsb3cgVEFSR0VUIHRvIGJlIGEgaGFyZCByZWcgYmVjYXVzZSBldmFsdWF0aW5nIHRoZSBjb21wYXJpc29uCisJbWlnaHQgY2xvYmJlciBpdC4KKworVGh1IEF1ZyAxNSAyMzozODowNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRtLW02OGsuaCAoUFJJTlRfT1BFUkFORCk6IFVzZSBhc21fZnByaW50ZiB0byBwcmludCBpbW1lZCBwcmVmaXguCisKK1RodSBBdWcgMTUgMjM6MzY6MTIgMTk5MSAgTWljaGVhbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiBjcGx1cy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogUmVtb3ZlIGxhc3QgdHJhY2VzIG9mIFdvb2QncyBtaXN0YWtlbgorCWNoYW5nZXMgZm9yIHRhZyBoYW5kbGluZyBpbiBDKysuCisJKiBjcGx1cy1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogRGl0dG8uCisKK1R1ZSBBdWcgMTMgMDY6MTI6MTggMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChmaW5kX2Nyb3NzX2p1bXApOiBXaGVuIGF2b2lkaW5nIENBTExfSU5TTnMsIGRvbid0CisJcmV0dXJuIGEgQ09ERV9MQUJFTCBhcyBhIGNyb3NzLWp1bXAgcG9pbnQ7IHVzZSBuZXh0X3JlYWxfaW5zbiBpbnN0ZWFkCisJb2YgbmV4dF9ub25ub3RlX2luc24uCisKKwkqIGZvbGQtY29uc3QuYyAob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUsIG1lcmdlX2NvbXBvbmVudF9yZWZlcmVuY2UpOgorCVVzZSBtb2RlX2Zvcl9zaXplIHRvIGdldCBtb2RlIGZvciB3b3JkOyBkb24ndCB1c2UgU0ltb2RlLgorCSogdHJlZS5jIChidWlsZF9pbmRleF90eXBlLCBidWlsZF9pbmRleF8yX3R5cGUpOiBEb24ndCB1c2UgU0ltb2RlOworCWdldCBtb2RlIG9mIFNJWkVUWVBFIGluc3RlYWQuCisKKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogVXNlIHR5cGUgb2YgaW50IGluc3RlYWQgb2YgU0ltb2RlIGZvcgorCXJldHVybiBmcm9tIG1lbWNtcCBhbmQgYmNtcC4KKworTW9uIEF1ZyAxMiAxNzo1NDo1NSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN0bXQuYzogSW5jbHVkZSByZWNvZy5oLgorCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogRXhwZWN0IGFib3J0IHRvIHJldHVybiB2b2lkLgorCShleHBhbmRfZW5kX2Nhc2UpOiBHaXZlIHRhYmxlanVtcCB3aGF0ZXZlciBtb2RlIGl0IHdhbnRzLgorCisJKiBpbnRlZ3JhdGUuYyAoaW50ZWdyYXRlX3R5cGUpOiBOZXcgZnVuY3Rpb24uCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogUmV3cml0ZSBsYXN0IGNoYW5nZS4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBJbmRpcmVjdCB0aHJvdWdoIElOU1RBTExfVEFSR0VULgorCShpbnN0YWxsLW5hdGl2ZSk6IE5ldyBuYW1lIGZvciBvbGQgaW5zdGFsbCB0YXJnZXQuCisJKElOU1RBTExfVEFSR0VUKTogTmV3IHZhcmlhYmxlLgorCSogY3Jvc3MtbWFrZSAoSU5TVEFMTF9UQVJHRVQpOiBPdmVycmlkZSBpdC4KKworTW9uIEF1ZyAxMiAxNzoyNTo0OCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogb3V0LW1pcHMuYyAodG9wbGV2ZWwsIG92ZXJyaWRlX29wdGlvbnMsIHNpZ2luZm8pOiBJZiB0aGUgT1NGLzEKKwlTSUdJTkZPIHNpZ25hbCBpcyBwcm92aWRlZCwgaW52b2tlIHNpZ2luZm8gaGFuZGxlciwgd2hpY2ggcHJpbnRzCisJd2hpY2ggZmlsZSBpcyBiZWluZyBjb21waWxlZCwgYW5kIHJ1bnMgcHMgb24gdGhlIGNvbXBpbGVyIGFuZCBpdCdzCisJcGFyZW50LgorCisJKiBtYWtlLWRlY3Jvc2UgKENDLCBPTERDQyk6IERlZmluZSBDQyBhbmQgT0xEQ0MgdG8gYmUgdGhlIHNhbWUsIHNvCisJdGhhdCB0ZXN0cyB3aXRoaW4gTWFrZWZpbGUuaW4gd29yayBhcyBleHBlY3RlZC4KKwkoTElCMkZVTkNTX0VYVFJBKTogUHV0IG9zZi1tYWluIGluIHRoZSBnbnVsaWIyIHBvcnRpb24gb2YgdGhlCisJbGlicmFyeSwgaW5zdGVhZCBvZiB0aGUgZ251bGliMSBwb3J0aW9uLgorCitNb24gQXVnIDEyIDE2OjMxOjQ3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwbG93LmMgKGV4cHJfc2l6ZSk6IEZpeCB0eXBvLgorCitNb24gQXVnIDEyIDE0OjI3OjMxIDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05EX0VYUFIpOiBGaXggdHlwbyBpbiBjb21tZW50LgorCUluIHRoZSBzaW5nbGV0b24gY29kZSwgZG9uJ3QgYWNjZXB0IGEgaGFyZCByZWdpc3RlciBhcyBhIHRhcmdldCBpZgorCXdlIGFyZSBnb2luZyB0byBzdG9yZSBpbnRvIGl0IGJlZm9yZSB0ZXN0aW5nIHRoZSBjb25kaXRpb24gYmVjYXVzZQorCXRoYXQgZXZhbHVhdGlvbiBtYXkgaW52b2x2ZSBhIHN1YnJvdXRpbmUgY2FsbCB3aGljaCBtaWdodCBjbG9iYmVyIGl0LgorCisJKiBydGwuaCAoU0NIRURfR1JPVVBfUCk6IEZpeCB0eXBvIGluIGRlZmluaXRpb24uCisKK01vbiBBdWcgMTIgMDg6MDE6MDEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChmaW5kX2Nyb3NzX2p1bXApOiBMb29rIGF0IFJFR19FUVVJViBub3RlcyBpbiBhZGRpdGlvbiB0bworCVJFR19FUVVBTCBub3Rlcy4KKwkoZG9fY3Jvc3NfanVtcCk6IFJlbW92ZSBSRUdfRVFVQUwgb3IgUkVHX0VRVUlWIG5vdGVzIHByZXNlbnQgb24gb25seQorCW9uZSBicmFuY2ggb2YgdGhlIGNyb3NzLWp1bXAgc28gd2UgZG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IHRoZW0gaWYgd2UKKwljcm9zcy1qdW1wIGFnYWluLgorCitNb24gQXVnIDEyIDAxOjQ0OjI2IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogV2hlbiBuYWl2ZWx5IHVucm9sbGluZyBsb29wcywgaWYgdGhlIGxhc3QKKwlqdW1wIGluc24gaXMgYW4gdW5jb25kaXRpb25hbCBqdW1wLCBhbmQgaXQgZG9lcyBub3QganVtcCB0byB0aGUgbG9vcAorCXRvcCwgdGhlbiBpdCBtdXN0IGJlIGNvcGllZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBsb29wIGJvZHkuCisKKwkqIHJ0bC5oOiBDbGVhbiB1cCBkb2N1bWVudGF0aW9uIGZvciB1c2VzIG9mIHZvbGF0aWwgYW5kIGluX3N0cnVjdAorCWZpZWxkcyBvZiBhbiBydHguCisJKiBnY2MudGV4aW5mbzogRG9jdW1lbnQgbWFjcm9zIENPTlNUX0NBTExfUCwgTEFCRUxfUFJFU0VSVkVfUCwgYW5kCisJU0NIRURfR1JPVVBfUC4gQ2xlYW4gdXAgZG9jdW1lbnRhdGlvbiBmb3IgdXNlcyBvZiB1c2VkLCBpbl9zdHJ1Y3QsCisJYW5kIHVuY2hhbmdpbmcgZmllbGRzIG9mIGFuIHJ0eC4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogIEluIHRoZSBBU01fT1VUUFVUX0xPT1BfQUxJR04gY29kZSwKKwltdXN0IHZlcmlmeSB0aGF0IG5leHQgZXhpc3RzIGJlZm9yZSBjaGVja2luZyB3aGV0aGVyIGl0IGlzIGEgbGFiZWwuCisKK1N1biBBdWcgMTEgMTY6NDY6MTcgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChjbXBzdHJzaSk6IEVuYWJsZSBpdC4gIE5vdyB1c2VzIFJFRyBhcyBvdXRwdXQsIG5vdCBjYzAuCisJT2xkIGNjMC1vdXRwdXQgcGF0dGVybiByZW1haW5zIGZvciBjb21iaW5pbmcgY21wc3Ryc2kgJiB0ZXN0IHBhaXJzLgorCitTdW4gQXVnIDExIDE1OjUyOjMzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBIYW5kbGUgdmFyLWxlbmd0aCBhcnJheSB3aXRoIHJlZmVyZW5jZS4KKworCSogYy1kZWNsLmMgKHhyZWZfdGFnKTogQ29weSBkZWZhdWx0IG1vZGUgZnJvbSB1bnNpZ25lZF90eXBlX25vZGUuCisJKiBleHBsb3cuYyAoZXhwcl9zaXplKTogR2V0IGl0IGZyb20gc2l6ZV90eXBlLgorCSogcmVsb2FkMS5jIChhbGxvY2F0ZV9yZWxvYWRfcmVnKTogTm8gbmVlZCB0byB2YWxpZGF0ZSBtb2RlIG9mCisJcmVsb2FkX2luIGlmIHRoYXQgdmFsdWUgaXMgYSBjb25zdF9pbnQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBHZXQgdmFsdWUgbW9kZSBwcm9wZXJseSwgZm9yIG1lbWNtcC4KKworU3VuIEF1ZyAxMSAxNTo1MjozMyAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IERFQ0xfQVNTRU1CTEVSX05BTUUgaXMgYSB0cmVlLCBub3QgYQorCWNoYXJhY3RlciBzdHJpbmcsIHNvIGNhbGwgSURFTlRJRklFUl9QT0lOVEVSIGJlZm9yZSBwcmludGluZyBpdC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogV2hlbiBjb252ZXJ0aW5nIGZvbysrID09IENPTlNUIHRvICsrZm9vID09CisJQ09OU1QgKyBJTkNSLCB0aGUgcGx1cyBtdXN0IGhhdmUgdGhlIHNhbWUgVFJFRV9UWVBFIGFzIHRoZQorCXBvc3RpbmNyZW1lbnQsIG5vdCB0aGUgY29tcGFyaXNvbi4KKworU2F0IEF1ZyAxMCAyMjo1ODowMSAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogbWlwcy5tZCAoZXh0ZW5kcWloaTIgZGVmaW5lX3NwbGl0KTogVXNlIFNJbW9kZSBvbiBzaGlmdHMgcmF0aGVyCisJdGhhbiBISW1vZGUsIGFuZCB0dXJuIHJlc3VsdCByZWdpc3RlciBpbnRvIFNJbW9kZSBhcyB3ZWxsLgorCitTYXQgQXVnIDEwIDIxOjAwOjU5IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBOZXcgYXJndW1lbnQgaXNfY29uc3QuICBTZXQgQ09OU1RfQ0FMTF9QCisJdHJ1ZSBmb3IgdGhlIGNhbGxfaW5zbiBpZiBpc19jb25zdCBpcyB0cnVlLgorCShleHBhbmRfY2FsbCk6IFBhc3MgaXNfY29uc3QgdG8gZW1pdF9jYWxsXzEuCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogUGFzcyBub19xdWV1ZSB0byBlbWl0X2NhbGxfMS4KKwlEb2N1bWVudCB0aGF0IG5vX3F1ZXVlIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgY29uc3QuCisJKiBsb2NhbC1hbGxvYy5jICh2YWxpZGF0ZV9lcXVpdl9tZW0pOiAgRG9uJ3QgaW52YWxpZGF0ZSBtZW1vcnkgZm9yCisJY29uc3QgY2FsbHMuCisJKiBydGwuaDogVXBkYXRlIGNvbW1lbnRzIGRlc2NyaWJpbmcgdXNlcyBvZiBydGwgdW5jaGFuZ2luZyBhbmQKKwlpbl9zdHJ1Y3QgYml0cy4KKwkoQ09OU1RfQ0FMTF9QKTogTmV3IG1hY3JvLiAgVHJ1ZSBmb3IgYSBjYWxsX2luc24gaWYgaXQgaXMgY2FsbGluZworCWEgY29uc3QgZnVuY3Rpb24uICBVc2VzIHRoZSB1bmNoYW5naW5nIGJpdC4KKwkoU0NIRURfR1JPVVBfUCk6IE5ldyBtYWNyby4gIFRydWUgZm9yIGFuIGluc24gaWYgaXQgbXVzdCBiZQorCXNjaGVkdWxlZCB0b2dldGhlciB3aXRoIHRoZSBwcmV2aW91cyBpbnNuLiAgVXNlcyB0aGUgaW5fc3RydWN0IGJpdC4KKwkqIHNjaGVkLmM6IFJld3JpdGUgdG8gdXNlIG5ldyBTQ0hFRF9HUk9VUF9QIG1hY3JvIGluc2VhZCBvZgorCVJUWF9VTkNIQU5HSU5HX1AuCisJKHNjaGVkX2FuYWx5emUpOiBSZXdyaXRlIHRvIHVzZSBuZXcgQ09OU1RfQ0FMTF9QIG1hY3JvLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IERvbid0IHNjaGVkdWxlIGEgYmxvY2sgd2l0aCBhIHZvbGF0aWxlCisJb3IgdHJhZGl0aW9uYWwgYXNtIGluc24uICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gY29kZSB0byBjb3JyZWN0bHkKKwloYW5kbGUgZGVwZW5kZW5jaWVzIGZvciB0aGVtLgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbGlua3MpOiBGaXggdHlwbyBpbiBjb21tZW50LgorCitTYXQgQXVnIDEwIDE4OjQyOjIyIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IFJlcGxhY2UgZXhwbGljaXQgU0ltb2RlIHJlZmVyZW5jZXMKKwl3aXRoIG1vZGUgZm9yIEJJVFNfUEVSX1dPUkQgYml0cy4KKworU2F0IEF1ZyAxMCAxNDoxNzowOCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSGFuZGxlIEFSR1NfR1JPV19ET1dOV0FSRC4KKworCSogbnMzMmsubWQgKGNhbGxfdmFsdWUpOiBDb25zaXN0ZW50bHkgcmVhbGl6ZSBmdW5jdGlvbiBpcyBvcGVyYW5kIDEuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEdldCBjdXJyZW50IGRpciBmcm9tIG5vbWluYWxfZm5hbWUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBHaXZlIGNtcHN0ciogYSB0YXJnZXQgaW4gdGhlIG1vZGUgaXQgd2FudHMuCisJKiBvcHRhYnMuYyAoZXhwYW5kX2NtcF9pbnNuKTogTGlrZXdpc2UuCisKK0ZyaSBBdWcgIDkgMDk6NTk6MjcgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9zeW1ib2xzX2Zvcl9ibG9jayk6IEZpeCB0eXBvIGluIGl0ZXJhdGluZyBvdmVyCisJc3ViYmxvY2tzLgorCisJKiBtYWtlLW04OGt7LGRndXgsbHVuYX06IEVsaW1pbmF0ZSBtODhrLXRyYWNlLmFzbS4KKwkqIHRtLW04OGsuaCwgb3V0LW04OGsuYzogTWFrZSAtbWJpZy1waWMgYSBzeW5vbnltIGZvciAtZlBJQy4KKwlEZWxldGUgLW10cmFjZS1mdW5jdGlvbi4KKworCSogTWFrZWZpbGUuaW4gKENST1NTX1RPT0xTKTogTmV3IHZhcmlhYmxlLgorCShnbnVsaWIxLm51bGwsIGdudWxpYjIucmVhZHkpOiBEZXBlbmQgb24gQ1JPU1NfVE9PTFMuCisJKGdudWxpYjEubnVsbCk6IFVzZSAkKEFSKSAkKEFSX0ZMQUdTKS4KKwkqIGNyb3NzLW1ha2UgKENST1NTX1RPT0xTKTogRGVmaW5lIGFzIGluc3RhbGwtY3Jvc3MtdG9vbHMuCisKK0ZyaSBBdWcgIDkgMTU6MjE6MTYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbik6IEV4cGVjdCBjbXBzdHIqIHRvIGhhdmUgcmVzdWx0IG9wZXJhbmQuCisJVGVzdCB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0IHdlIGdldC4KKwlpMzg2Lm1kIG5lZWRzIHRvIGJlIGNoYW5nZWQuCisKK0ZyaSBBdWcgOSAxMTowOToyMiAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1jYzEuY29tOiBGaXggYnVnIHdoZXJlIHRoZSB3cm9uZyBwcm9ncmFtIHdhcyBiZWluZyBydW4gdG8KKwlnZW5lcmF0ZSBpbnNuLWF0dHJ0YWIuYywgYW5kLCBhZGQgREVCVUcgb3B0aW9uLCBzbyB0aGF0IGltYWdlcyBjYW4gYmUKKwlsaW5rZWQgdG8gcnVuIHVuZGVyIHRoZSBkZWJ1Z2dlci4KKworRnJpIEF1ZyAgOSAwNjo0MjoxNSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5lbWl0LmMgKGdlbl9zcGxpdCk6IEFkZCAiX2ZhaWw6IiBsYWJlbCBoZXJlIHRvby4KKworCSogdHJlZS5oIChTVFJJUF9OT1BTKTogRGVmaW5lIG1hY3JvIGhlcmU7IGFkZCBDT05WRVJUX0VYUFIgdG8gbGlzdAorCW9mIG9wZXJhdGlvbnMgdG8gcG9zc2libHkgaWdub3JlLgorCSogZm9sZC1jb25zdC5jIChTVFJJUF9OT1BTKTogTm90IGhlcmUuCisJKiBleHByLmMgKHN0cmlwX25vcHMpOiBEZWxldGUgZnVuY3Rpb24uCisJKHN0cmluZ19jb25zdGFudCk6IFVzZSBTVFJJUF9OT1BTIG1hY3JvIGluc3RlYWQgb2Ygc3RyaXBfbm9wcyBmdW5jdGlvbi4KKworCSogZ2xvYmFsLWFsbG9jLmMgKGV4cGFuZF9wcmVmZXJlbmNlcyk6IE5ldyBmdW5jdGlvbi4KKwkoZ2xvYmFsX2FsbG9jKTogQ2FsbCBpdC4KKworRnJpIEF1ZyAgOSAwMToxOToyNiAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogQ29ycmVjdCB0eXBvIGluIHNwYWNpbmcuCisKKwkqIHVucm9sbC5jOiBDb3JyZWN0IHR5cG8gaW4gY29tbWVudC4gIERvY3VtZW50IHRoYXQgdW5yb2xsaW5nIGEKKwlsb29wIGJ5IGEgbXVsdGlwbGUgb2YgdGhlIG51bWJlciBvZiBtZW1vcnkgYWNjZXNzZXMgaXMgYSB3aW4uCisJKHVucm9sbF9sb29wKTogTmV3IHZhcmlhYmxlIGxhc3RfbG9vcF9pbnNuLCBwb2ludHMgdG8gdGhlIGxhc3QKKwlyZWFsIGluc24gaW4gdGhlIGxvb3AsIHdoaWNoIHdpbGwgZWl0aGVyIGJlIGEganVtcCBvciBhIGJhcnJpZXIuCisJVXNlIGxhc3RfbG9vcF9pbnNuIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCBQUkVWX0lOU04gKGxvb3BfZW5kKQorCWlzIHRoYXQgbGFzdCByZWFsIGluc24gaW4gdGhlIGxvb3AuCisJU3RhbmRhcmRpemUgY29tbWVudHMgcHJpbnRlZCB0byBsb29wIGR1bXAgZmlsZSB3aGVuIHdlIGNhbid0CisJdW5yb2xsIGEgbG9vcCwgc28gdGhhdCB0aGV5IGFsbCBzdGFydCB3aXRoICJVbnJvbGxpbmcgZmFpbHVyZSIuCisJTm8gbG9uZ2VyIGFzc3VtZXMgdGhhdCB0aGUgaW5zbiBiZWZvcmUgdGhlIGJhY2t3YXJkIGp1bXAgaXMgYQorCWNvbXBhcmUgdW5sZXNzIEhBVkVfY2MwLiAgSWYgbm90IEhBVkVfY2MwLCB0aGVuIG11c3QgY29weSB0aGlzCisJaW5zbiwgYW5kIGZvciBsb29wX2l0ZXJhdGlvbnMgPT0gMSBjYXNlLCBjYW4gbm90IGRlbGV0ZSB0aGlzIGluc24uCisJSWYgbGFzdF9sb29wX2luc24gaXMgbm90IGEgSlVNUF9JTlNOIG9yIEJBUlJJRVIsIHRoZW4gZG8gbm90CisJdW5yb2xsIHRoZSBsb29wLgorCShwcmVjb25kaXRpb25fbG9vcF9wKTogRmFpbCBpZiBsb29wX2l0ZXJhdGlvbl92YXIgaXMgbm90IGxpdmUKKwliZWZvcmUgbG9vcF9zdGFydC4KKwkoY29weV9sb29wX2JvZHkpOiBSZXdyaXRlIG9ic29sZXRlIGFuZCBtaXNsZWFkaW5nIGNvbW1lbnQKKwljb25jZXJuaW5nIHRoZSBzcGxpdHRpbmcgb2YgYWRkcmVzcyBnaXZzLgorCShiYWNrX2JyYW5jaF9pbl9yYW5nZV9wKTogQ29ycmVjdCB0eXBvIGluIGNvbW1lbnQuICBObyBsb25nZXIKKwlhc3N1bWVzIHRoYXQgUFJFVl9JTlNOIChsb29wX2VuZCkgaXMgdGhlIGJhY2t3YXJkIGJyYW5jaCBhdCB0aGUKKwllbmQgb2YgdGhlIGxvb3AuCisJKGZvbGRfcnR4X211bHRfYWRkKTogIFJld3JpdGUgdG8gdXNlIHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24uCisJKGl0ZXJhdGlvbl9pbmZvKTogRmFpbCBpZiBpdGVyYXRpb24gdmFyaWFibGUgaXMgbGFyZ2VyIHRoYW4KKwlIT1NUX0JJVFNfUEVSX0xPTkcsIG9yIGlmIGl0IGRvZXMgbm90IGhhdmUgYW4gaW50ZWdlciBtb2RlLgorCShmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IElmIGFuIGFkZHJlc3MgZ2l2IHdhcyBjb21iaW5lZCB3aXRoCisJYW5vdGhlciBhZGRyZXNzIGdpdiwgdGhlbiB3ZSBjYW4gb25seSBzcGxpdCB0aGUgZmlyc3QgZ2l2IGlmIHRoZQorCXNlY29uZCB3YXMgYWN0dWFsbHkgcmVkdWNlZC4KKwkobG9vcF9pdGVyYXRpb25zKTogTmV3IHZhcmlhYmxlIGxhc3RfbG9vcF9pbnNuLCB1c2UgaW5zdGVhZCBvZgorCWFzc3VtaW5nIHRoYXQgdGhlIGxhc3QganVtcCBpbnNuIGlmIFBSRVZfSU5TTiAobG9vcF9lbmQpLgorCUNvcnJlY3QgdHlwbyBpbiBjb21tZW50LgorCitUaHUgQXVnICA4IDE3OjU3OjQxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGdudWxpYjEubnVsbCk6IFVzZSAqX0ZPUl9UQVJHRVQgdmFyaWFibGVzLgorCShUQVJHRVRfVE9PTFBSRUZJWCk6IE5ldyB2YXJpYWJsZS4KKwkoQVJfRk9SX1RBUkdFVCwgQVJfRk9SX1RBUkdFVF9GTEFHUyk6IE5ldyB2YXJpYWJsZXMuCisJKFJBTkxJQl9GT1JfVEFSR0VULCBSQU5MSUJfVEVTVF9GT1JfVEFSR0VUKTogTmV3IHZhcmlhYmxlcy4KKwkqIGNyb3NzLW1ha2U6IE5ldyBmaWxlLgorCSogY29uZmlndXJlOiBJbnNlcnQgY3Jvc3MtbWFrZSBpbnRvIE1ha2VmaWxlLgorCisJKiB0bS1tNjhrLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IENvcHkgYWRkcmVzcyBiZWZvcmUgY2hhbmdpbmcgaXQuCisJKENPUFlfT05DRSk6IE5ldyBtYWNybywgc3Vicm91dGluZSBmb3IgTEVHSVRJTUlaRV9BRERSRVNTLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEFjY2VwdCAtZyB3aXRoIHdhcm5pbmcgaWYgbm90IHN1cHBvcnRlZC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY3Jvc3MtdG9vbHMpOiBEbyBub3RoaW5nIHVubGVzcyBoYXZlIGdjYy1jcm9zcy4KKwkoZ251bGliMi5yZWFkeSk6IERlcGVuZCBvbiBpbnN0YWxsLWNyb3NzLXRvb2xzLgorCitUaHUgQXVnICA4IDE0OjM0OjUzIDE5OTEgIEtlbiBSYWVidXJuICAocmFlYnVybiBhdCB3YXRjaC5jb20pCisKKwkqIGV4cHIuYyAoY19zdHJsZW4pOiBOZXcgZnVuY3Rpb247IGRldGVybWluZXMgc3RybGVuIG9mIHN0cmluZyBjb25zdC4KKwkoZXhwYW5kX2J1aWx0aW4sIGNhc2VzIEJVSUxUX0lOX1NUUkNNUCwgQlVJTFRfSU5fU1RSQ1BZKTogQ2FsbCBpdAorCWluc3RlYWQgb2YgcmVseWluZyBvbiBUUkVFX1NUUklOR19MRU5HVEguICBGb3Igc3RyY21wLCBvcHRpbWl6ZQorCWNhc2VzIHdoZXJlIHR3byBsZW5ndGhzIGFyZSBhdmFpbGFibGUsIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGlzCisJY29uc3RhbnQuCisJKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX01FTUNNUCk6IElmIGFsaWdubWVudCB0ZXN0IGZhaWxzLCBhbmQKKwlmdW5jdGlvbiB3YXMgcmVhbGx5IEJVSUxUX0lOX1NUUkNNUCwgZGVsZXRlIGxlbmd0aCBwYXJhbWV0ZXIgYmVmb3JlCisJZXhwYW5kaW5nIGNhbGwuCisKKwkqIHRyZWUuaCAoZW51bSBidWlsdF9pbl9mdW5jdGlvbik6IEFkZGVkIEJVSUxUX0lOX1NUUkxFTi4KKwkqIGMtZGVjbC5jIChzaXpldF9mdHlwZV9zdHJpbmcpOiBOZXcgdmFyaWFibGUsIGZvciBzdHJsZW4gcHJvdG90eXBlLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBpdCwgYW5kIGRlY2xhcmUgc3RybGVuIGFuZAorCV9fYnVpbHRpbl9zdHJsZW4gYXMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgRGVsZXRlZCB2YXJpYWJsZSBgZGVjbCcKKwlzaW5jZSBpdCB3YXMgb25seSBhc3NpZ25lZCB0bywgbmV2ZXIgcmVhZC4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fU1RSTEVOKTogSW1wbGVtZW50IGl0LgorCisJKiBjcGx1cy1kZWNsLmMgKHNpemV0X2Z0eXBlX3N0cmluZywgaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDb3B5CisJY2hhbmdlcyBmcm9tIGMtZGVjbC5jLiAgQWxzbyBpbml0aWFsaXplIGNvbnN0X3N0cmluZ190eXBlX25vZGUuCisKK1RodSBBdWcgIDggMTQ6MzQ6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBKdXN0IHdhcm4gaWYgdHJhZC4gZXh0ZXJuIHR5cGUgaXMgdGVtcG9yYXJ5LgorCitXZWQgQXVnICA3IDE1OjE2OjU1IDE5OTEgIEppbSBXaWxzb24gICh3aWxzb24gYXQgc3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBXaGVuIGNvbnZlcnRpbmcgYSBTQ1JBVENIIHJ0eCB0byBhCisJUkVHIHJ0eCwgbXVzdCBjbGVhciB0aGUgYHVzZWQnIGJpdC4KKworVHVlIEF1ZyAgNiAxNDoxNzowOSAxOTkxICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfc3RhcnRfYmluZGluZ3MpOiBGaXggdHlwbyBpbiBjb21tZW50IG9yIHNwYWNpbmcuCisJKiBydGxhbmFsLmMgKHJlZ19yZWZlcmVuY2VkX2JldHdlZW5fcCk6IExpa2V3aXNlLgorCShyZWdfc2V0X2xhc3QpOiBMaWtld2lzZS4KKwkqIGxvb3AuYyAobWFrZV9sb29wX2p1bXApOiBMaWtld2lzZS4KKwkqIGxvbmdsb25nLmggKFVESVZfTkVFRFNfTk9STUFMSVpBVElPTik6IExpa2V3aXNlLgorCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KKwkqIGdsb2JhbC1hbGxvYy5jIChoYXJkX3JlZ19jb3B5X3ByZWZlcmVuY2VzKTogTGlrZXdpc2UuCisJKiBmaXhjcHA6IExpa2V3aXNlLgorCSogdG0tbTY4ay5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IExpa2V3aXNlLgorCSogY29tYmluZS5jIChyZWdfc2lnbmlmaWNhbnQpOiBMaWtld2lzZS4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCisJKiBjcGx1cy10cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IExpa2V3aXNlLgorCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IFdoZW4gZW1pdHRpbmcgYSBtb3ZlIGluc24sCisJZG9uJ3QgcHV0IGl0IGJldHdlZW4gYSBDQUxMX0lOU04gYW5kIGl0cyBVU0UgaW5zbnMgYXMgdGhpcyB3aWxsCisJYnJlYWsgc2NoZWQgYW5kIHJlb3JnLiAgSW5zdGVhZCwgcHV0IGl0IGJlZm9yZSB0aGUgVVNFIGluc25zLgorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogQ29udmVydCAoaW9yIChhc2hpZnQgQSBDWCkgKGxzaGlmdCBBIENZKSkgd2hlcmUKKwlDWCtDWSBlcXVhbHMgdGhlIG1vZGUgc2l6ZSB0byAocm90YXRlIEEgQ1gpLgorCisJKiBvdXQtc3BhcmMuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogRm9yIERJbW9kZSBjb25zdGFudHMsIGNhbiBub3QKKwljcmVhdGUgYSB0ZW1wb3JhcnkgcmVnaXN0ZXIgdG8gaG9sZCB0aGUgaGlnaCBwYXJ0LgorCShvdXRwdXRfc2NjX2luc24pOiBXaGVuIGluIGEgZGVsYXkgc2xvdCwgdmVyaWZ5IHRoYXQgTkVYVF9JTlNOIChpbnNuKQorCXJlYWxseSBpcyB0aGUgbmV4dCBpbnNuLgorCisJKiBzcGFyYy5tZDogRml4IHN1cHBvcnQgZm9yIERJbW9kZSBjb25zdGFudHMuICBUd28gbmV3IHBhdHRlcm5zCisJYWRkZWQsIG9uZSBmb3IgaGlnaDpESSBvcGVyYXRvcnMgYW5kIG9uZSBmb3IgbG9fc3VtOkRJIG9wZXJhdG9ycy4KKwkoKmV4dGVuZCopOiBSZXdvcmsgdGhlc2UgcGF0dGVybnMuICBEb24ndCBhY2NlcHQgbWVtb3J5IGlucHV0CisJb3BlcmFuZHMgaW4gdGhlIGRlZmluZV9leHBhbmRzLCBhcyB0aGlzIGdpdmVzIGJldHRlciBjb2RlLgorCURlbGV0ZSBwYXR0ZXJucyBmb3IgY29tYmluaW5nIHR3byBsb2FkcyBpbnRvIGEgbG9hZCBhbmQgbW92ZTsKKwl0aGVzZSBhcmUgb2Jzb2xldGVkIGJ5IGNvbWJpbmVyIGltcHJvdmVtZW50cy4KKwlEZWxldGUgZGVmaW5lX3NwbGl0cyBmb3Igc3BsaXR0aW5nIHRoZXNlIG9ic29sZXRlIHBhdHRlcm5zLgorCShvbmVfY21wbHNpMik6IENhbiBub3QgYWNjZXB0IGdlbmVyYWxfb3BlcmFuZCBkZXN0aW5hdGlvbnMsIG9ubHkKKwlyZWdpc3RlciBkZXN0aW5hdGlvbnMuCisKKwkqIHRtLXNwYXJjLmggKFNUQUNLX1BPSU5URVJfT0ZGU0VUKTogRXhwbGFpbiBob3cgdmFsdWUgaXMgZGVyaXZlZCwKKwlhbmQgY29tcHV0ZSBpbiB0ZXJtcyBvZiBhbm90aGVyIG1hY3JvLgorCShTVFJVQ1RfVkFMVUVfT0ZGU0VUKTogRXhwbGFpbiBob3cgdmFsdWUgaXMgZGVyaXZlZC4KKwkoRklSU1RfUEFSTV9PRkZTRVQpOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisJKiBleHByLmMgKE1PVkVfUkFUSU8pOiBDaGVjayBmb3IgSEFWRV9tb3ZzdHJkaS4KKwkoZW1pdF9ibG9ja19tb3ZlKTogQWRkIGNvZGUgdG8gdXNlIEhBVkVfbW92c3RyZGkgaWYgcHJlc2VudC4KKwkoZW1pdF9wdXNoX2luc24pOiBMaWtld2lzZS4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogV2hlbiBpbnNuIGZhaWxzIGNvbnN0cmFpbnQgY2hlY2ssCisJY2FsbCBmYXRhbF9pbnNuX25vdF9mb3VuZCBpbnN0ZWFkIG9mIGp1c3QgYWJvcnRpbmcgdG8gbWFrZQorCWRlYnVnZ2luZyBlYXNpZXIuCisKKwkqIHRyZWUuYyAoaW50ZWdlcl9hbGxfb25lc3ApOiBSZXdyaXRlIGNvZGUgdG8gYXZvaWQgc2hpZnQgYnkKKwlIT1NUX0JJVFNfUEVSX0lOVCB3aGljaCBpcyB1bmRlZmluZWQgYWNjb3JkaW5nIHRvIEFOU0kuICBBbHNvLAorCWFib3J0IGZvciBwcmVjaXNpb24gdmFsdWVzIG5vdCBoYW5kbGVkLCBpLmUuIHRob3NlIGdyZWF0ZXIgdGhhbgorCXR3aWNlIHRpbWVzIEhPU1RfQklUU19QRVJfSU5ULgorCitUdWUgQXVnICA2IDE0OjA1OjQyIDE5OTEgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5tZCAoc2VxLHNuZSk6IFVzZSBzZXRiL3NldG5iIG1uZW1vbmljcyBpbnN0ZWFkIG9mIHNldGMvc2V0bmM6CisJR0FTIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgbGF0dGVyIHlldC4KKworVHVlIEF1ZyAgNiAxMzowMTo1MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IFVzZSAtZCwgbm90IC1mLCBmb3IgdG9vbGRpci9iaW4uCisKK1R1ZSBBdWcgNiAxMDozNzowMiAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1jYzEuY29tOiBSZXBsYWNlbWVudCBmaWxlLiAgVGhpcyBuZXcgdmVyc2lvbiBjYW4gYnVpbGQgY2MxcGx1cworCWFuZCBjYzFvYmogaW4gYWRkaXRpb24gdG8gY2MxIChrbm93biBvbiBWTVMgc3lzdGVtcyBhcyBnY2MtY2MxcGx1cy5leGUsCisJZ2NjLWNjMW9iai5leGUgYW5kIGdjYy1jYzEuZXhlIHJlc3BlY3RpdmVseSkuCisKK1R1ZSBBdWcgIDYgMDY6MzA6MDkgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBJZiBhIFJFRyBpbiBhbiBvcGVyYW5kIGlzIGVxdWl2YWxlbnQgdG8gYQorCWNvbnN0YW50LCBoYXNoIGFzIGlmIHdlIGhhZCB0aGUgY29uc3RhbnQuCisJKGV4cF9lcXVpdl9wKTogU2VlIGlmIGEgUkVHIGFuZCBjb25zdGFudCBhcmUgZXF1aXZhbGVudC4KKworVHVlIEF1ZyAgNiAwMzo1OToxNiAxOTkxICBLZW4gUmFlYnVybiAgKHJhZWJ1cm4gYXQgd2F0Y2guY29tKQorCisJKiBjcGx1cy10cmVlLmMgKG1ha2VfZGVlcF9jb3B5KTogSGFuZGxlIFBBUk1fREVDTHMuCisKKwkqIGNwbHVzLWluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IFVzZSBERUNMX0NIQUlOLCBub3QgVFJFRV9DSEFJTgorCXdoZW4gdHJ5aW5nIHRvIGRldGVybWluZSBpZiBhIGZ1bmN0aW9uIGlzIHVuaXF1ZS4KKworCSogY3BsdXMtZGVjbC5jIChzdGFydF9kZWNsKTogV2hlbiBjb25zdHJ1Y3RpbmcgYSBkZWNsIHRyZWUgZm9yIGEKKwlmdW5jdGlvbiB0ZW1wbGF0ZSwgY29weSBsYXN0X2Z1bmN0aW9uX3Bhcm1zIHRvIHBlcm1hbmVudCBzdG9yYWdlLAorCWFuZCBzYXZlIGl0IGFzIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBsaXN0LiAgQ2FsbCBidWlsZF9sYW5nX2RlY2wKKwlpbnN0ZWFkIG9mIGJ1aWxkX2RlY2wsIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIGV4dHJhIHdvcmsgaXQgZG9lcy4KKwlTZXQgYG92ZXJsb2FkZWQnIGZsYWcgdG8gMS4gIENhbGwgZG9udF9mb3JnZXRfb3ZlcmxvYWQsIHNvIHRoZQorCXRlbXBsYXRlIGRlY2wgd29uJ3QgZ2V0IGRpc2NhcmRlZC4KKwlBbHNvIGRlbGV0ZWQgc29tZSBjb21tZW50ZWQtb3V0IGNvZGUuCisKKwkqIGNwbHVzLXB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMsIGNhc2VzIFZBUl9ERUNMLCBGVU5DVElPTl9ERUNMKToKKwlHaXZlIGEgd2FybmluZyBpZiB0ZW1wbGF0ZSBwYXJtcyBhcmUgb25seSB1c2VkIGluIHBsYWNlcyB3aGVyZSB0aGV5CisJY2FuJ3QgYmUgcmVzb2x2ZWQgKGUuZy4sIHJldHVybiB0eXBlcyBvciBnbG9iYWwgb3IgZml4ZWQtY2xhc3MKKwl2YXJpYWJsZSB0eXBlcykuCisJKHRzdWJzdCk6IFByZXNlcnZlIHN0b3JhZ2UgcXVhbGlmaWVycyBvbiB0eXBlIGZpZWxkLCBhbmQgcGFzcyBpdCB0bworCWxheW91dF90eXBlIGlmIGl0IGhhcyBjaGFuZ2VkLgorCSh0c3Vic3QsIGNhc2UgVEVNUExBVEVfVFlQRV9QQVJNKTogIFByZXNlcnZlIHN0b3JhZ2UgcXVhbGlmaWVycy4KKwkodHN1YnN0LCBjYXNlIElOVEVHRVJfVFlQRSk6IFByb2Nlc3MgbWluIGFuZCBtYXggZmllbGRzLCBpZiBuZWVkZWQuCisJKHRzdWJzdCwgY2FzZSBGVU5DVElPTl9ERUNMKTogUHJvY2VzcyBhcmd1bWVudHMgYW5kIHJlc3VsdCBmaWVsZHMuCisJKHRzdWJzdCwgY2FzZSBQQVJNX0RFQ0wpOiBOZXcgYnJhbmNoLiAgSGFuZGxlIHBhcm0gbGlzdCBmb3IKKwlGVU5DVElPTl9ERUNMIG5vZGVzLgorCSh0c3Vic3QsIGNhc2UgVFJFRV9MSVNUKTogQ29weSBUUkVFX1BBUk1MSVNUIGZsYWcgZnJvbSBzb3VyY2UuCisJRG9uJ3QgYm90aGVyIHByb2Nlc3NpbmcgVFJFRV9DSEFJTiBmaWVsZCBpZiBpdCBpcyB2b2lkX3R5cGVfbm9kZS4KKwkodHN1YnN0LCBjYXNlcyBQT0lOVEVSX1RZUEUsIFJFRkVSRU5DRV9UWVBFKTogUHJlc2VydmUgc3RvcmFnZQorCXF1YWxpZmllcnMuCisJKHRzdWJzdCwgY2FzZSBGVU5DVElPTl9UWVBFKTogRWxpbWluYXRlIHJlY3Vyc2lvbiBmb3Igc2ltcGxlIGNvbW1vbgorCWNhc2VzIGZvciB2YWx1ZXMgYW5kIGNvbnRleHQgZmllbGRzLiAgUHJlc2VydmUgc3RvcmFnZSBxdWFsaWZpZXJzLgorCSh0c3Vic3QsIGRlZmF1bHQgY2FzZSk6IFByaW50IG5vZGUgdHlwZSBvZiBjb3JyZWN0IHZhcmlhYmxlIGluIGVycm9yCisJbWVzc2FnZS4KKwkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBTZXQgZnVuY3Rpb25fbWF5YmVwZXJtYW5lbnRfb2JzdGFjayB0bworCXBlcm1hbmVudCwgYWxvbmcgd2l0aCB0aGUgb3RoZXJzLCBhbmQgcmVzdG9yZSBvbGQgdmFsdWUgYWZ0ZXIgdHN1YnN0CisJY2FsbC4gIFRoaXMgcGVybWl0cyB0aGUgUEFSTV9ERUNMIGNhc2UgdG8gd29yay4KKworTW9uIEF1ZyAgNSAyMjo0NDo1MSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBjcGx1cy10cmVlLmggKHN0cnVjdCBwZW5kaW5nX2lubGluZSk6IEFkZCBuZXcgZmllbGQgYGRlamFfdnUnIHRvCisJbWFyayBpZiB0aGlzIHBlbmRpbmdfaW5saW5lIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4KKwkqIGNwbHVzLWxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBTZXQgREVKQV9WVSB3aGVuIHNlZW4uCisJKiBjcGx1cy1sZXguYyAocmVpbml0X3BhcnNlX2Zvcl9tZXRob2QsIGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6CisJSW5pdGlhbGl6ZSBERUpBX1ZVIHRvIDAuCisJKiBjcGx1cy1kZWNsMi5jIChtYXJrX2lubGluZV9mb3Jfb3V0cHV0KTogRG9uJ3QgYWRkIERFQ0wgdG8KKwlQRU5ESU5HX0lOTElORVMgaWYgaXQncyBhbHJlYWR5IGJlZW4gc2Vlbi4KKwkqIGNwbHVzLXB0LmMgKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogSW5pdGlhbGl6ZSBERUpBX1ZVIHRvIDAuCisKKwkqIGNwbHVzLW1ldGhvZC5jIChkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IENoYW5nZSBzb21lIGFzc2lnbm1lbnRzCisJdG8gYXNzZXJ0cywgc2luY2UgdGhleSBzZWVtIHRvIGJlIGNvcHlpbmcgdmFsdWVzIHRoYXQgYXJlIGFscmVhZHkKKwl0aGVyZS4KKworTW9uIEF1ZyAgNSAyMjoyMzozNCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogZ2VuZW1pdC5jIChnZW5fZXhwYW5kLCBtYWluKTogQ2hhbmdlIEZBSUwgbWFjcm8gdG8gYmUgYSBzaW1wbGUKKwlnb3RvIF9mYWlsLCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmV0dXJuIHZhbHVlIHRvIDAgaW4gdGhlIHByb2xvZ3VlLgorCVRoaXMgYXZvaWRzIGEgdXNlbGVzcyB3YXJuaW5nIG1lc3NhZ2UgdGhhdCB0aGUgTUlQUyBDIGNvbXBpbGVyCisJZ2l2ZXMgaWYgYSByZXR1cm4gaXMgZW5jb3VudGVyZWQgaW5zaWRlIG9mIGEgZG8geyAuLi4gfSB3aGlsZSAoMCkuCisKK01vbiBBdWcgIDUgMjE6Mjg6MDYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcGx1cy14cmVmLmMgKEdOVV94cmVmX2ZpbGUpOiBUcmVhdCBWTVMgbGlrZSBVU0cuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBJbiBsaWJjYWxsLCB1c2UgYWN0dWFsIG1vZGUgb2Ygb3AxLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KToKKwlJbiBzaWduZWQgdmVyc3VzIHVuc2lnbmVkIGNvbXBhcmUgd2FybmluZywgbm90ZSBwcm9tb3Rpb25zIG9mIHVuc2lnbmVkLgorCisJKiBjLXBhcnNlLnkgKHNpbXBsZV9pZik6IEFsbG93IGVycm9yIGluc3RlYWQgb2YgbGluZW5vX2xhYmVsZWRfc3RtdC4KKwkoaWZfcHJlZml4KTogTmV3IHN1YnJvdXRpbmUgb2Ygc2ltcGxlX2lmLgorCisJKiBnbnVsaWIyLmMgKF9fYXNobGRpMywgX19hc2hyZGkzLCBfX2xzaGxkaTMsIF9fbHNocmRpMyk6CisJQWNjZXB0IHNlY29uZCBhcmcgYXMgaW50LCBub3QgbG9uZyBsb25nLgorCitTdW4gQXVnICA0IDIyOjMxOjUzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWV4Y2VwdC5jIChjcGx1c19leHBhbmRfc3RhcnRfZXhjZXB0KTogU2V0IHVwIHZhcmlhYmxlcworCWBjdXJyZW50X2V4Y2VwdGlvbl9uYW1lX2FzX3J0eCcgYW5kIGBjdXJyZW50X2V4Y2VwdGlvbl9wYXJtc19hc19ydHgnLgorCVRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBmYWN0b3Igb3V0IGNhbGxzIHRvIGBleHBhbmRfYXNzaWdubWVudCcKKwlhbmQgYWxsb3cgaW5zdGVhZCBjYWxscyB0byBgZW1pdF9tb3ZlX2luc24nLCB3aGljaCB0YWtlcyBhYm91dCAxLzJ4CisJdGhlIGNvbXBpbGF0aW9uIHRpbWUgd2hlbiBjYWxsZWQgZGlyZWN0bHkuCisJKHZhcmlvdXMgcGxhY2VzKTogVXNlIGBzdG9yZV9leHByJyBpbnN0ZWFkIG9mIGBleHBhbmRfYXNzaWdubWVudCcKKwl3aGVuIHJlYXNvbmFibGUuCisJKGNwbHVzX2V4cGFuZF9yZXJhaXNlKTogVGFrZSBhZHZhbnRhZ2Ugb2YgYWJvdmUgY2hhbmdlcy4KKwkoc2V0dXBfZXhjZXB0aW9uX3Rocm93X2RlY2wpOiBUaGlzIGlzIHdoZXJlICpfYXNfcnR4IHZhcmlhYmxlcyBhcmUKKwlpbml0aWFsaXplZC4KKworCSogY3BsdXMtaW5wdXQuYyAoZ2V0Y2gpOiBSZXdyaXR0ZW4gc2xpZ2h0bHkgdG8gaGVscCBHTlUgQyBvcHRpbWl6ZXIuCisJKiBjcGx1cy1sZXguYyAoeXlsZXgpOiBJbiBJREVOVElGSUVSIGNhc2UsIHByZS10ZXN0IGNvbmRpdGlvbiB0aGF0CisJYGdldGNoJyB0ZXN0cywgYW5kIGNhbGwgYGdldGMnIGRpcmVjdGx5IHdoZW4gcG9zc2libGUuICBUaGlzIGN1dHMKKwljYWxscyB0byBgZ2V0Y2gnIGJ5IGEgZmFjdG9yIG9mIDQgZm9yIHR5cGljYWwgQysrLgorCisJKiBjcGx1cy1jbGFzcy5jIChhZGRfdmlydHVhbF9mdW5jdGlvbik6IE1lbW9pemUgdGhlIGZpcnN0IDI1NgorCXZpcnR1YWwgZnVuY3Rpb24gdGFibGUgaW5kZXggbm9kZXMgKDB4ODAwMDAwMDEsIDB4ODAwMDAwMDIsIGV0Yy4pLgorCShmaW5pc2hfc3RydWN0KTogVXNlIGBzaXplX2ludCcgaW5zdGVhZCBvZiBgYnVpbGRfaW50XzInIHdoZW4gd2UKKwlrbm93IHRoZSBpbnQgd2lsbCBub3QgYmUgY2hhbmdlZCBpbiBwbGFjZSAoc3VjaCBhcyB0aGUgc2l6ZSB2YWx1ZSBvZgorCXZpcnR1YWwgZnVuY3Rpb24gdGFibGVzKS4KKwkqIGNwbHVzLWRlY2wyLmMgKGZpbmlzaF90YWJsZSk6IFNhbWUgY2hhbmdlIGFzIGZvciBgZmluaXNoX3N0cnVjdCcuCisJKiBjcGx1cy10cmVlLmMgKGxheW91dF9iYXNldHlwZXMpOiBTYW1lIGNoYW5nZS4KKwkqIGNwbHVzLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2UgYHNpemVfaW50JyB0byBpbml0aWFsaXplCisJYHNpemVfemVyb19ub2RlJyBhbmQgYHNpemVfb25lX25vZGUnLgorCisJKiBjcGx1cy10cmVlLmggKFRSRUVfT1ZFUkxPQURTX0FSUk9XKTogRGVmaW5lIHRoaXMuCisJKiBjcGx1cy1wYXJzZS55IChvcGVyYXRvcl9uYW1lKTogU2V0IFRSRUVfT1ZFUkxPQURTX0FSUk9XIHdoZXJlCisJYXBwcm9wcmlhdGUuCisJKiBjcGx1cy10eXBlMi5jIChidWlsZF94X2Fycm93KTogVXNlIFRSRUVfT1ZFUkxPQURTX0FSUk9XIGFuZAorCXJlb3JnYW5pemUgdGhlIGxvZ2ljIGZvciBiZXR0ZXIgc3BlZWQuCisJKiBjcGx1cy1wdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiBQcmludCB3aGVuIFRSRUVfT1ZFUkxPQURTX0FSUk9XLgorCitTdW4gQXVnICA0IDE2OjQ0OjU0IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJ0bGFuYWwuYyAocmVnX3JlZmVyZW5jZWRfcCk6IFByb3Blcmx5IGhhbmRsZSBBU01fT1BFUkFORFMuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFdoZW4gcmVjb3JkaW5nIHRoaXNfaW5zbl9jYzAsIGJ1aWxkIGEgQ09NUEFSRQorCXJ0bCBpZiBTUkMgaXMgYSBmbG9hdGluZy1wb2ludCB2YWx1ZS4KKworU3VuIEF1ZyAgNCAxNjoxNjoxMSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvbid0IGNvbXB1dGUgc2hpZnQgd2l0aCBuZWdhdGl2ZSBjb3VudC4KKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogTGlrZXdpc2UuCisKK1NhdCBBdWcgMyAxNTo1Nzo1NSAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogdG0tdm1zLmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBNb2RpZnkgdG8gYWx3YXlzIHdyaXRlIHRoZQorCWNvcnJlY3Qgc2l6ZSBvZiB0aGUgZGF0YSBvYmplY3QsIGlmIGl0IGlzIGtub3duLgorCShBU01fT1VUUFVUX0NPTU1PTik6IE1vZGlmeSB0byBzZWxlY3QgdGhlIGNvbnN0IG9yIHRoZSBkYXRhIHNlY3Rpb24KKwlhcyBhcHByb3ByaWF0ZS4gIFRoaXMgZGVmaW5pdGlvbiBzaGFkb3dzIGEgZGVmaW5pdGlvbiBpbiB0bS12YXguaAorCShjb25zdF9zZWN0aW9uKTogQ2hhbmdlIGRhdGEgdHlwZSB0byB2b2lkLgorCitTYXQgQXVnICAzIDE1OjAyOjQwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6IENsZWFyIGNvbnN0YW50IHBvb2wgYWZ0ZXIKKwlzYXZpbmcgY29uc3RhbnRzIGludG8gdGhlIGluc25zLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX01FTUNQWSk6IEVuc3VyZSBpdGVtcworCXBhc3NlZCB0byBlbWl0X2Jsb2NrX21vdmUgYXJlIHZhbGlkIE1FTXMuCisKKwkqIHJlY29nLmMgKG9mZnNldHRhYmxlX2FkZHJlc3NfcCk6IERvbid0IGNoYW5nZSBJTlRWQUwgb2YgYSBDT05TVF9JTlQKKwl3aXRoaW4gYW4gYWRkcmVzczsgdGhhdCBDT05TVF9JTlQgaXMgbGlrZWx5IHNoYXJlZCBhbmQgbWF5IGJlIHVzZWQKKwllbHNld2hlcmUgaW4gdGhlIGFkZHJlc3MuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9zdG10X2V4cHIpOiBEb24ndCB0cnkgdG8gY29weSByZXN1bHQgdG8KKwlSRUc7IGl0IG1pZ2h0IGJlIEJMS21vZGUuCisKKwkqIHJlbG9hZC5jIChNQVRDSEVTKTogRG9uJ3QgY29uc2lkZXIgdHdvIHRoaW5ncyBlcXVhbCBpZiB0aGV5IGhhdmUKKwlzaWRlIGVmZmVjdHMuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBXaGVuIHJlcGxhY2luZyBTRVRfREVTVCBpbnNpZGUgYSBQQVJBTExFTCwKKwlkb24ndCByZXBsYWNlIGl0IHdpdGggc29tZXRoaW5nIHRoYXQgaGFzIGEgc2lkZSBlZmZlY3QuCisKK1NhdCBBdWcgIDMgMTM6MTc6NTMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOgorCUlmIHRyYWRpdGlvbmFsLCBvbWl0IGJ1aWx0aW5zIHdpdGggbmFtZXMgdGhhdCBkb24ndCBzdGFydCB3aXRoIF8uCisJQWxzbyBvbWl0IGlmIG5vdCBvcHRpbWl6aW5nLgorCisJKiBNYWtlZmlsZS5pbiAoY29tYmluZS5vLCBlbWl0LXJ0bC5vLCBleHByLm8sIGZpbmFsLm8sIHRyZWUubyk6CisJRGVwZW5kIG9uIGd2YXJhcmdzLmguCisKK0ZyaSBBdWcgMiAxMTowMDoxMCAxOTkxICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCU1lcmdlIHNvbWUgVk1TIGNoYW5nZXMgZnJvbSAxLjM5IHRoYXQgZGlkIG5vdCBtYWtlIGl0IHRvIDIuMC4KKwlUaGVzZSBjaGFuZ2VzIHdpbGwgcHJvaGliaXQgR0NDIGZyb20gYWRkcmVzc2luZyBleHRlcm5hbCBzeW1ib2xzIHdpdGgKKwlpbmRpcmVjdCBhZGRyZXNzaW5nIG1vZGVzLCB0byBiZSBjb21wYXRpYmxlIHdpdGggc2hhcmFibGUKKwlpbWFnZSBsaWJyYXJpZXMgdW5kZXIgVk1TLgorCisJKiB0bS12bXMuaDogRGVmaW5lIE5PX0VYVEVSTkFMX0lORElSRUNUX0FERFJFU1MsIGRlZmluZQorCUVOQ09ERV9TRUdNRU5UX0lORk8gdG8gbWFrZSB1c2Ugb2YgaG9vayBpbiB2YXJhc20uYworCisJKiB0bS12YXguaDogUHJvdmlkZSBhbHRlcm5hdGl2ZSBkZWZpbml0aW9ucyBvZiBJTkRJUkVDVEFCTEVfQ09OU1RBTlRfUCwKKwlJTkRJUkVDVEFCTEVfQ09OU1RBTlRfQUREUkVTU19QLCBhbmQgSU5ESVJFQ1RBQkxFX0FERFJFU1NfUCwgd2hpY2gKKwlhcmUgdXNlZCB3aGVuIE5PX0VYVEVSTkFMX0lORElSRUNUX0FERFJFU1MgaXMgZGVmaW5lZC4gIEFsc28sIGRlZmluZQorCUlORElSRUNUQUJMRV9DT05TVEFOVF9BRERSRVNTX1AuICAgTW9kaWZ5IGRlZmluaXRpb25zIG9mCisJR09fSUZfTk9OSU5ERVhFRF9BRERSRVNTLCBhbmQgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTIHRvIHdvcmsgd2l0aAorCWVpdGhlciBhbHRlcm5hdGl2ZS4KKworRnJpIEF1ZyAgMiAyMTo1NDo1NSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEZpeCB0eXBvIGluIGFyZyB0byBzaW5nbGVfc2V0LgorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IFZlcmlmeSB0aGF0IGFsbCByZWdpc3RlcnMgaW4gYSAKKwlncm91cCBzdGlsbCBjb250YWluIHRoZSBkZXNpcmVkIHZhbHVlLgorCShlbWl0X3JlbG9hZF9pbnNucyk6IFNldCByZWdfcmVsb2FkZWRfY29udGVudHMgYW5kIHJlZ19yZWxvYWRlZF9pbnNuCisJZm9yIGFsbCByZWdpc3RlcnMgaW4gYSBncm91cC4KKworCSogY29tYmluZS5jIChzZXRfc2lnbmlmaWNhbnQpOiBIYW5kbGUgYSBjb21wbGV4IFNFVF9ERVNUIGNvcnJlY3RseS4KKworRnJpIEF1ZyAgMiAxNzoxMjoyNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAoYnVpbGRfYXJyYXlfdHlwZSk6IE1ha2UgcG9pbnRlciB0eXBlIGJlZm9yZSBhcnJheSB0eXBlLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBOZXZlciBpbnN0YWxsIGdjYyBpZiBnY2MtY3Jvc3MgZXhpc3RzLgorCitGcmkgQXVnICAyIDE0OjU4OjQyIDE5OTEgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtYWtlLW1pcHMgKENDLCBPTERDQyk6IENvbW1lbnQgd2h5IHdlIG5lZWQgdG8gZGVmaW5lIENDIGFuZCBPTERDQworCXRvIGdldCBhcm91bmQgZml4ZWQgc2l6ZSB0YWJsZSBjb21wbGFpbnRzIGluIHRoZSBNSVBTIGNvbXBpbGVyLgorCitGcmkgQXVnICAyIDE0OjA4OjAxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlICh3cml0aW5nIFZQQVRIIGRlZmluaXRpb24pOiAgQXZvaWQgdGVtcCBmaWxlLgorCisJKiB0bS1pODYwLmggKE1BWF9QQVJNX0JPVU5EQVJZKTogRGVmaW5lZC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWRkIHBhcmVucyBhcm91bmQgJiBvcGVyYXRvci4KKwkoQVNNX09VVFBVVF9SRUdfUFVTSCwgQVNNX09VVFBVVF9SRUdfUE9QKTogVXNlIHNwLCBub3QgcjMgKHRoYXQncyBmcCkuCisJKiBpODYwLm1kIChtb3ZzZik6IERvbid0IHJlbG9hZCBoaWdoIGFkZHJlc3MgcGFydCBpZiBhbHJlYWR5IGxvYWRlZC4KKwkoY21wbGVzZiwgY21wbGVkZiwgY21wZ2VzZiwgY21wZ2VkZik6IFNldCBDQ19ORUdBVEVEOyBzd2FwIG9wZXJhbmRzLgorCSogb3V0LWk4NjAuYyAoc3RyaWN0X3NpbmdsZV9pbnNuX29wX3ApOgorCUZpeCBjcml0ZXJpb24gZm9yIGxvYWRpbmcgaGlnaCBoYWxmLgorCShvdXRwdXRfbG9hZF9hZGRyZXNzKTogI2lmIDAgc2luY2Ugbm90IHVzZWQuCisKK0ZyaSBBdWcgIDIgMDE6NDY6MzkgMTk5MSAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChzd2FwZGYpOiBEb24ndCBjb25kaXRpb24gb24gVEFSR0VUXzM4Ny4KKwkoYml0IHNldC9jb21wbGVtZW50L2NsZWFyIGluc25zKTogRG9uJ3QgdXNlIGlmIC1tNDg2LgorCShiaXQgdGVzdCBpbnNucyk6IERvbid0IGFsbG93IGEgTUVNIG9wZXJhbmQuCisKK1RodSBBdWcgIDEgMTk6MDU6MzEgMTk5MSAgTWF0dGhldyBTZWxmICAobXNlbGYgYXQgbmV4dC5jb20pCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogIFJlY29yZCByZWdzX2xpdmVfYXQgZm9yIGxhc3QgaW5zbgorCWluIGJhc2ljIGJsb2NrIHRvby4gIE90aGVyd2lzZSBSRUdfVU5VU0VEIHJlZ3MgbWF5IG92ZXJsYXAgaGFyZAorCXJlZ3Mgc2V0IGluIHRoZSBsYXN0IGluc24gb2YgdGhlIGJhc2ljIGJsb2NrLgorCitUaHUgQXVnICAxIDE5OjAyOjU3IDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9ydHgpOiBEb24ndCByZXR1cm4gZnJhbWVfcG9pbnRlcl9ydHggKGUuZy4pIGlmCisJbW9kZSBpcyBub3QgUG1vZGUuCisKKwkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IERvbid0IHdyaXRlIGV4cGxpY2l0IGRpdmlkZSBieSAwOworCXNvbWUgKGJyb2tlbikgY29tcGlsZXJzIGdpdmUgZXJyb3JzIGZvciBpdC4KKworCSogbTY4ay5tZCAodWRpdmhpMyk6IE9uZSBwYXR0ZXJuIGhhZCBjb25zdHJhaW50IG9mICJkIiB3aXRoCisJY29uc3RfaW50X29wZXJhbmQuCisJKEZQQSBpbnNucyk6IE9wZXJhbmQgMSdzIGNvbnN0cmFpbnRzIGFsbG93IG1lbW9yeSBhbmQgY29uc3RhbnRzLCBidXQKKwl0aGUgcHJlZGljYXRlIGlzIHJlZ2lzdGVyX29wZXJhbmQ7IGNoYW5nZSB0byBnZW5lcmFsX29wZXJhbmQuCisKK1RodSBBdWcgIDEgMTM6NDE6NDcgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcywgcHJvY2Vzc19uZXh0X2lubGluZSk6IFplcm8gb3V0CisJdGhlIERFQ0xfUEVORElOR19JTkxJTkVfSU5GTyBmaWVsZCBhZnRlciBwcm9jZXNzaW5nIGl0LgorCShzdG9yZV9wZW5kaW5nX2lubGluZSk6IERvbid0IGRlbGF5IHByb2Nlc3NpbmcgYSB2aXJ0dWFsIGZ1bmN0aW9uLAorCXNpbmNlIGl0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiBjYXNlIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIGlzCisJbmVlZGVkLgorCisJKiBjcGx1cy1kZWNsMi5jIChtYXJrX2lubGluZV9mb3Jfb3V0cHV0KTogSWYgREVDTCBoYXMgcGVuZGluZyBpbmxpbmUKKwlpbmZvLCBjYXVzZSBpdCB0byBiZSBwcm9jZXNzZWQuCisKKwkqIGNwbHVzLXB0LmM6IFJlbW92ZWQgZXh0cmFuZW91cyBkZWNsYXJhdGlvbiBvZiBgcGVybWFuZW50X29ic3RhY2snLgorCUFsc28sIGFkZGVkIGNvbW1lbnQgZm9yIGByZWluaXRfcGFyc2VfZm9yX3RlbXBsYXRlJy4KKworCSogY3BsdXMtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBGb3IgRlVOQ1RJT05fREVDTCBjYXNlLCBhbHNvCisJdGVzdCBERUNMX1BFTkRJTkdfSU5MSU5FX0lORk8uCisKK1RodSBBdWcgIDEgMTM6MjY6MTIgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMtdGZpbGUuYyAobWFpbik6IElmIGlucHV0IGZpbGUgaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBzYW1lCisJZmlsZSBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0LiAgSWYgcmVuYW1pbmcgb3V0cHV0IGZpbGUgYW5kIHJlbmFtZQorCWZhaWxzLCBjb3B5IHRoZSBmaWxlLgorCShmcmVlX211bHRpcGxlX3BhZ2VzKTogTmV3IGZ1bmN0aW9uLgorCisJKiB0bS1kZWNyb3NlLmggKEFTTV9GSU5BTF9TUEVDKTogQWRkIHRoaXMgdG8gY2FsbCBtaXBzLXRmaWxlIGlmCisJdXNpbmcgdGhlIE1JUFMgYXNzZW1ibGVyLgorCisJKiB0bS1taXBzLmggKEFTTV9GSU5BTF9TUEVDKTogQWRkIHRoaXMgdG8gY2FsbCBtaXBzLXRmaWxlIHVubGVzcworCXVzaW5nIGdhcy4KKwkoVEFSR0VUX1ZFUlNJT04pOiBEbyBub3QgcHV0IF9fREFURV9fIGluIHRoZSBvdXRwdXQuCisKKwkqIG1ha2UtbWlwcyAoQklTT05GTEFHUyk6IEFkZCAtbCB0byBiaXNvbiBmbGFncyBiZWNhdXNlIHRoZSBNSVBTCisJYmFzZWQgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCAjbGluZS4KKwkoQ0MpOiBEZWZpbmUgaW4gdGVybXMgb2YgJChPTERDQykgc28gdGhlIFVTRV9IT1NUIG1hY3JvcyB3b3JrLgorCShFWFRSQV9QQVNTRVMpOiBCdWlsZCBtaXBzLXRmaWxlIGFuZCBtaXBzLXRkdW1wLgorCShNYWtlZmlsZSk6IEV4cGxpY2l0bHkgdXNlIHNoIHRvIGludm9rZSBjb25maWd1cmUuCisKKwkqIG1ha2UtZGVjcm9zZSAoRVhUUkFfUEFTU0VTKTogQnVpbGQgY29sbGVjdC4KKwkoTWFrZWZpbGUpOiBFeHBsaWNpdGx5IHVzZSBzaCB0byBpbnZva2UgY29uZmlndXJlLgorCitUaHUgQXVnICAxIDEyOjIyOjE3IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChkaXJlY3RpdmVfdGFibGUsIG5vZGVfdHlwZSk6IEFkZCAjaW5jbHVkZV9uZXh0LgorCShkb19pbmNsdWRlKTogU3VwcG9ydCAjaW5jbHVkZV9uZXh0LgorCShmaW5jbHVkZSk6IE5ldyBhcmcgRElSUFRSLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogIENoZWNrIGxpdmVfa25vd24gYmVmb3JlIGFjY2Vzc2luZworCWJhc2ljX2Jsb2NrX2hlYWQuCisKK1RodSBBdWcgIDEgMTE6NDc6MzcgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIGdjYy5jIChjb21waWxlcnMpOiBBZGQgbmV3IHNwZWMgJUEsIHdoaWNoIGV4cGFuZHMgQVNNX0ZJTkFMX1NQRUMuCisJVGhpcyBvcHRpb24gaXMgYWRkZWQgYWZ0ZXIgYWxsIG90aGVyIGFyZ3VtZW50cyB0byB0aGUgYXNzZW1ibGVyLiAgSXQKKwlpcyBmb3IgdGhlIE1JUFMgcG9ydCB0byBydW4gYSBjbGVhbnVwIHByb2dyYW0gYWZ0ZXIgdGhlIGFzc2VtYmxlcgorCWZpbmlzaGVzLCBieSBoYXZpbmcgQVNNX0ZJTkFMX1NQRUMgYmUgIlxuIG1pcHMtdGZpbGUgYXJncy4uLiIKKwkoc2V0X3NwZWMpOiBJZiBuYW1lIGlzICdhc21fZmluYWwnLCBzZXQgdGhlIGFzbV9maW5hbF9zcGVjLgorCShwcm9jZXNzX2NvbW1hbmQpOiBwcmludCBvdXQgYXNtX2ZpbmFsX3NwZWMgZm9yIC1kdW1wc3BlY3MuCisJKGRvX3NwZWNfMSk6IEV4cGFuZCAlQSB0byBiZSBBU01fRklOQUxfU1BFQy4KKwkodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogbG9vayBhdCBhbnkgc3dpdGNoZXMgaGFuZGxlZCBpbgorCUFTTV9GSU5BTF9TUEVDLgorCitUaHUgQXVnICAxIDA3OjQyOjM3IDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBkd2FyZm91dC5jIChlbGVtZW50X2xpc3RfYXR0cmlidXRlKTogQVRfZWxlbWVudF9saXN0IGlzIGEgQkxPQ0s0LgorCitXZWQgSnVsIDMxIDE3OjQyOjQwIDE5OTEgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluICJpZiAoLi4uKSB4ID0gMTsgZWxzZSB7Li4ufSBpZiAoeCkgLi4uIjoKKwlEb24ndCBhc3N1bWUgdGhhdCBTWU1CT0xfUkVGcyBhcmUgYWx3YXlzIG5vbi16ZXJvLgorCUhhbmRsZSBvcGVyYXRpb25zIG90aGVyIHRoYW4gRVEgYW5kIE5FLgorCUhhbmRsZSBjb25kaXRpb25hbCBSRVRVUk4gcHJvcGVybHkuCisKKwkqIG91dC1hMjlrLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ2UnKTogV2hlbiB3cml0aW5nIExYbiwgdXNlIG51bWJlcgorCW9mIGxhc3QgbGFiZWwgaW4gZnVuY3Rpb24uCisJKG91dHB1dF9wcm9sb2cpOiBGaXggbWlzc2luZyBhcmcgaW4gQUREICBpbiBhMjlrX2ZpcnN0X2VwaWxvZ3VlX2luc24uCisKK1dlZCBKdWwgMzEgMTM6NDE6MzcgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHNkYm91dC5jIChzZGJvdXRfcGFybXMpOiBEb24ndCBjcmFzaCBpZiBNRU0gYWRkcmVzcyBpcyBhIE1FTS4KKworV2VkIEp1bCAzMSAxMjozNjozNyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBOZXcgdmFyaWFibGUgSU5DTFVERVMgc3BlY2lmaWVzIGlucHV0IGRpci4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uKTogQWRkIGR1bW15IGVsdCB0byBFWFRSQV9QQVNTRVMuCisJRml4IHR5cG8gaW4gdGVzdC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY3Jvc3MtdG9vbHMpOiBVc2UgLy4gaW4gYXJncyB0byB0ZXN0IC1kLgorCShjY2NwLm8sIGRieG91dC5vLCBjLXBsdXMtKik6IEFkZGVkIG1pc3NpbmcgZGVwZW5kZW5jaWVzLgorCisJKiBjLWNvbW1vbi5jOiBEb24ndCBpbmNsdWRlIHJ0bC5oLS10aGF0IHdhcyB1bm1vZHVsYXIuCisKKwkqIG1ha2UtaTM4NnYgKElOU1RBTEwpOiBEZWZpbmUgdGhpcy4KKworV2VkIEp1bCAzMSAwNzozODoxMiAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKExJQjJGVU5DU19FWFRSQSk6IEV4dHJhIEMgYW5kIGFzc2VtYmxlciBmaWxlcyBmb3IKKwlnbnVsaWIyLgorICAgICAgICAqIG1ha2UtbTg4ayo6IFB1dCB0aGUgYXNzZW1ibGVyIGZpbGVzIGluIGdudWxpYjIgYW5kIGVsaW1pbmF0ZSB1c2UKKwlvZiBnbnVsaWIxLgorCitUdWUgSnVsIDMwIDIwOjIxOjQxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RkZGVmLmggKFdDSEFSX1QpOgorCVRlc3QgX1dDSEFSX1RfLCBfX1dDSEFSX1QsIF9UX1dDSEFSXyBhbmQgX19faW50X3djaGFyX3RfaC4KKworCSogdG0taTM4NmlzYy5oIChSRVRVUk5fUE9QU19BUkdTKTogQ2FsbGVyIHBvcHMgdGhlIHN0cnVjdCB2YWx1ZSBhZGRyLgorCisJKiBjY2NwLmMgKGRlZmF1bHRfaW5jbHVkZSk6IFNlYXJjaCBsb2NhbCBkaXIsIHN5c3RlbSwgdGhlbiBzdGFuZGFyZC4KKworCSogTWFrZWZpbGUuaW4gKFVTRV9IT1NUX01BTExPQywgVVNFX0hPU1RfT0JTVEFDSyk6CisJRG9uJ3QgZGVwZW5kIG9uIHdoaWNoIEMgY29tcGlsZXIgaXMgaW4gdXNlLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFVzZSBwc2V1ZG9yZWcgdG8gY29tcHV0ZSBzcGlsbF9pbmRpcmVjdF9sZXZlbHMuCisKKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IERvbid0IHRha2UgYXJnIHR5cGVzIGZyb20gYnVpbHRpbi4KKwkoZHVwbGljYXRlX2RlY2xzKTogQ2FuY2VsIGJ1aWx0aW4gZnVuY3Rpb24gaWYgbmV3IGFyZyB0eXBlcyBkaWZmZXIuCisJRG9uJ3QgdGFrZSBhcmcgdHlwZXMgZnJvbSBidWlpbHRpbi4KKworVHVlIEp1bCAzMCAxODo0NTozOSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZGVjb21wb3NlKTogRG9uJ3QgYmxvdyB1cCBmb3IgY29uc3RhbnRzOyB0aGV5IGFyZSBzYWZlLgorCitUdWUgSnVsIDMwIDE1OjQ5OjM0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9wYXJtcyk6IERvbid0IGNyYXNoIGlmIE1FTSBhZGRyZXNzIGlzIGEgTUVNLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBEb24ndCBsb3NlIGlmIEVYVFJBX1BBU1NFUyBpcyBlbXB0eS4KKwlEb24ndCBpbnN0YWxsIGdjYyBpZiBnY2MtY3Jvc3MgZXhpc3RzLgorCShpbnN0YWxsLWNyb3NzLXRvb2xzKTogRml4IHR5cG9zLgorCUF2b2lkIGRvaW5nIGNkIC0tIHVzZSBhYnNvbHV0ZSBmaWxlIG5hbWVzLgorCShnY2MtY3Jvc3Mubyk6IFJ1bGUgZGVsZXRlZC4KKwkoZ2NjLWNyb3NzKTogQnVpbGQgZ2NjLCB0aGVuIGNvcHkgaXQuCisKK1R1ZSBKdWwgMzAgMTU6Mzc6MjUgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogY3BsdXMtaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogVXNlIGBzaXplX2Jpbm9wJyB3aGVuIGJ1aWxkaW5nIHVwCisJdGhlIGFycmF5IGVuZCBib3VuZGFyeS4KKworVHVlIEp1bCAzMCAxMDowMzo1NCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogdG0tbWlwcy5oIChET0xMQVJTX0lOX0lERU5USUZJRVJTKTogRGVmaW5lIHRvIGJlIDEuCisKK01vbiBKdWwgMjkgMTg6NTY6MzMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKHJlZmVyc190b19yZWdub19mb3JfcmVsb2FkX3ApOiBOZXcgZnVuY3Rpb24uCisJKHB1c2hfcmVsb2FkLCBmaW5kX2R1bW15X3JlbG9hZCwgaW1tdW5lX3ApOiBVc2UKKwlyZWZlcnNfdG9fcmVnbm9fZm9yX3JlbG9hZF9wIGluc3RlYWQgb2YgcmVmZXJzX3RvX3JlZ25vX3AuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IERvbid0IG1ha2Ugc2hpZnRzIHdpZGVyIHRoYW4gb2JqZWN0LgorCitNb24gSnVsIDI5IDE3OjE3OjU1IDE5OTEgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbiBhdCBvc2Yub3JnKQorCisJKiBjb25maWd1cmU6IEFkZGVkIGVudHJ5IGZvciBtbWF4LW9zZnJvc2UgKE11bHRpbWF4IHdpdGggbnMzMmsKKwlydW5uaW5nIE9TRi8xKS4KKworTW9uIEp1bCAyOSAxNDo1MTozMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChTWU1MSU5LKTogTmV3IHZhcmlhYmxlLgorCShpbnN0YWxsLWNyb3NzLXRvb2xzKTogTWFrZSBzeW1saW5rcyBpZiBwb3NzaWJsZS4KKwlPdGhlcndpc2UsIGZvciBleGVjdXRhYmxlcywgaW5kaXJlY3QgdG8gdG9vbGRpciB3aXRoIGEgc2hlbGwgc2NyaXB0LgorCShpbnN0YWxsLW5hdGl2ZSk6IEluc3RhbGwgZ2NjLWNyb3NzIGFzIGJpbi9nY2MgdW5kZXIgdG9vbGRpci4KKworCSogTWFrZWZpbGUuaW4gKFVTRV9IT1NUX0FMTE9DQSk6CisJR2VuZXJhdGUgbm90aGluZyBpZiBkb24ndCBuZWVkIHNlcGFyYXRlIGFsbG9jYS4KKwkoVVNFX0hPU1RfT0JTVEFDSywgVVNFX0hPU1RfTUFMTE9DKTogTmV3IHZhcmlhYmxlcy4KKwkoSE9TVF9MSUJTKTogVXNlIHRoZW0uIAorCShIT1NUX1BSRUZJWF8xKTogTWFrZSBhIGR1bW15IGZpbGUgd2l0aCB0aGlzIG5hbWUsCisJZm9yIGNyb3NzLWNvbXBpbGluZyBmb3IgYSBtYWNoaW5lIHRoYXQgbmVlZHMgbm8gc2VwYXJhdGUgYWxsb2NhLCBldGMuCisKKwkqIGMtcGFyc2UueSAoc3RtdHMpOiBBY2NlcHQgZWl0aGVyIGxhYmVscyBvciB1bmxhYmVsZWQgc3RhdGVtZW50cy4KKwkobGluZW5vX2xhYmVsZWRfc3RtdCk6IE5ldyBub250ZXJtaW5hbHMuCisJKHN0bXRfb3JfbGFiZWwsIGxpbmVub19zdG10X29yX2xhYmVsKTogTmV3IG5vbnRlcm1pbmFscy4KKwkoc3RtdHMpOiBVc2UgbGluZW5vX3N0bXRfb3JfbGFiZWwuCisJKHN0bXQpOiBEb24ndCBhbGxvdyBsYWJlbHMgYXQgdGhpcyBsZXZlbC4KKwlVc2UgbGluZW5vX2xhYmVsZWRfc3RtdCBpbiBwbGFjZSBvZiBsaW5lbm9fc3RtdC4KKworCSogY2NjcC5jIChkZWZhdWx0X2luY2x1ZGUpOiBHZXQgcmlkIG9mIGV4dHJhICNlbmRpZi4KKwlVc2UgQ1JPU1NfQ09NUElMRSwgbm90IENST1NTLgorCisJKiBtYWtlLWkzODZtYWNoOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaTM4Ni1tYWNoKTogVXNlIHRoYXQgZmlsZS4KKworTW9uIEp1bCAyOSAwOToxMDoxMyAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogdG0tbTg4a2x1bmEuaCAoU1lTVEVNX0lOQ0xVREVfRElSKTogRGVmaW5lIChhbHNvIE1BQ0gpLgorCitTdW4gSnVsIDI4IDE2OjE1OjM5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChkZWZhdWx0X2luY2x1ZGUpOiBVc2UgU1lTVEVNX0lOQ0xVREVfRElSLgorCURlbGV0ZSBzcGVjaWFsIGNhc2VzIGZvciBNQUNILCBVTk9TLgorCSogdG0taTM4Nm1hY2guaCwgdG0tc3VuM21hY2guaCwgdG0tY3Jkcy5oIChTWVNURU1fSU5DTFVERV9ESVIpOiBEZWZpbmUuCisKKwkqIGNjY3AuYyAoZGVmYXVsdF9pbmNsdWRlKTogVXNlIENST1NTX0lOQ0xVREVfRElSIGlmIGNyb3NzLWNvbXBpbGVyLgorCSogTWFrZWZpbGUuaW4gKGNjY3Aubyk6IFBhc3MgYSBkZWZpbml0aW9uIGZvciBDUk9TU19JTkNMVURFX0RJUi4KKworCSogTWFrZWZpbGUuaW4gKGdudWxpYjEubnVsbCk6IE5ldyB0YXJnZXQuCisJKGluc3RhbGwtY29tbW9uLCBpbnN0YWxsLWNvbW1vbi1oZWFkZXJzLCBpbnN0YWxsLWNyb3NzLXRvb2xzKToKKwkoaW5zdGFsbC1jcm9zcy1yZXN0LCBpbnN0YWxsLWZsb2F0LWgtY3Jvc3MpOiBOZXcgdGFyZ2V0cy4KKwkoaW5zdGFsbC1mbG9hdC1oKTogTmV3IHRhcmdldC4KKwkoaW5zdGFsbC1jcm9zcywgaW5zdGFsbC1oZWFkZXJzKTogVXNlIHRoZW0uCisJKHRvb2xkaXIpOiBOZXcgdmFyaWFibGUuCisJKEVYVFJBX1BBU1NFUyk6IE5ldyB2YXJpYWJsZS4KKworCSogc2Rib3V0LmMgKHBsYWluX3R5cGVfMSk6IERvbid0IHJlY29yZCB0aGUgc2l6ZSBpbiBzZGJfdHlwZV9zaXplCisJdW5sZXNzIGEgdGFnIGlzIG91dHB1dC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY3Jvc3MpOiBJbnN0YWxsIHNwZWNzIGJ5IGNvcHlpbmcuCisJSW5zdGFsbCBlaXRoZXIgZ2NjIG9yIGdjYy1jcm9zcywgd2hpY2hldmVyIGV4aXN0cy4KKwkobmF0aXZlKTogUmVtb3ZlIGdjYyBmcm9tIGRlcHMuCisJKHN0YXJ0LmVuY2FwKTogQWRkIGdjYyB0byBkZXBzLgorCShhbGwuY3Jvc3MpOiBBZGQgZ2NjLWNyb3NzIHRvIGRlcHMuCisJKGdjYy1jcm9zcyk6IExpa2UgZ2NjIHJ1bGUgZXhjZXB0IGRpZmZlcmVudCBvdXRwdXQgZmlsZSBuYW1lLgorCShnY2MtY3Jvc3Mubyk6IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5pbiAoRVhUUkFfUEFTU0VTKTogTmV3IHZhcmlhYmxlLgorCVVzZWQgZm9yIG1hY2hpbmVzIHdoaWNoIGhhdmUgZXh0cmEgcGFzc2VzIHRvIHJ1bi4KKwkoaW5zdGFsbC1jcm9zcyk6IEluc3RhbGwgdGhvc2UgcHJvZ3JhbXMuCisJKG5hdGl2ZSk6IENvbXBpbGUgdGhlbS4KKworCSogYy1wYXJzZS55OiBTdXBwb3J0IGBmb286JyBiZWZvcmUgYSBjbG9zZSBicmFjZS4KKwkobGFiZWwpOiBOZXcgbm9udGVybWluYWwuCisJKHN0bXQpOiBVc2UgdGhhdC4gIFRyZWF0IGEgbGFiZWwgYXMgYSBzdGF0ZW1lbnQgaW4gaXRzZWxmLgorCisJKiBNYWtlZmlsZS5pbiAoZ251bGliKi5wb3J0YWJsZSk6IFJ1bGVzIGRlbGV0ZWQuCisJKEdOVUxJQjEsIEdOVUxJQjIpOiBQb2ludCBkaXJlY3RseSBhdCBnbnVsaWIxLCBnbnVsaWIyLgorCShnbnVsaWIpOiBVc2UgR05VTElCMSwgR05VTElCMiBkaXJlY3RseSBib3RoIGFzIGRlcHMKKwlhbmQgdG8gc3BlY2lmeSB0aGUgaW5wdXQgZmlsZXMuCisJKGdudWxpYjEuY29udik6IFJlbmFtZWQgZnJvbSBnbnVsaWIxLmNvbnZlcnQ7IG5vIGxvbmdlciBwaG9ueS4KKwkoZ251bGliKi50YXJnZXQpOiBSdWxlcyBkZWxldGVkLgorCW1ha2UtaHA5azMyMCAoR05VTElCMSk6IFVzZSBnbnVsaWIxLmNvbnYuCisJKExJQkNPTlZFUlQpOiBPdmVycmlkZS4KKworCSogbW92ZS1pZi1jaGFuZ2U6IFVzZSAtZiB3aXRoIHJtIGFuZCBtdi4KKworCSogTWFrZWZpbGUuaW4gKGdudWxpYjIucmVhZHkpOiBObyBsb25nZXIgcGhvbnkuCisKK1NhdCBKdWwgMjcgMTM6MDM6NTAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBEb24ndCB1c2UgTkVYVF9JTlNOLCBpbiBwcmV2aW91cyBjaGFuZ2UuCisKKwkqIE1ha2VmaWxlLmluIChjbGFzcy1jLCBvYmplY3RpdmUtYyk6IE5ldyB0YXJnZXRzLgorCisJKiB0bS1pMzg2LmggKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IERlZmluZSBpdC4KKwkoQVNNX09VVFBVVF9MT09QX0FMSUdOKTogVXNlIEFTTV9PVVRQVVRfQUxJR05fQ09ERS4KKwkqIHRtLWkzODZnYXMuaCwgdG0taTM4NnZnYXMuaCAoQVNNX09VVFBVVF9BTElHTl9DT0RFKTogT3ZlcnJpZGUgaXQuCisJKEFTTV9PVVRQVVRfTE9PUF9BTElHTik6IERlZmluaXRpb24gZGVsZXRlZC4KKworCSogZml4aW5jbHVkZXMgKG1lbXZhci5oKTogTWFrZSB0d28gZGVmcyBvZiBDQVQsIG9uZSBBTlNJIGFuZCBvbmUgdHJhZC4KKworCSogZXhwbWVkLmMgKGVtaXRfc3RvcmVfZmxhZyk6IFNldCBJQ09ERSBvbmx5IGFmdGVyIENPREUgaXMgcmlnaHQuCisKK1NhdCBKdWwgMjcgMDY6NDU6MzIgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IERvbid0IGNsb2JiZXIgTkVFREVEIHdoaWxlIGVuc3VyaW5nIHRoYXQgd2UKKwlkb24ndCBkZWxldGUgaW5zbnMgdGhhdCBzZXQgdGhlIGZyYW1lIG9yIGFyZyBwb2ludGVyLgorCisJKiBmbG93LmMgKGZsb3dfYW5hbHlzaXMsIGZpbmRfYmFzaWNfYmxvY2tzLCBwcm9wYWdhdGVfYmxvY2spOgorCVVzZSBHRVRfUlRYX0NMQVNTLgorCQorRnJpIEp1bCAyNiAwODoxODowOCAxOTkxICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogc2Rib3V0LmM6IFVzZSA8c3ltcy5oPiBmb3IgVVNHIGFuZCBwcm92aWRlIGEgZGVmaW5pdGlvbiBvZgorCVRfVk9JRCBpZiBub25lIGV4aXN0ZWQuICBVc2UgLi9nc3ltcy5oIGZvciBub24tVVNHIHN5c3RlbXMuCisJKiBnc3ltcy5oOiBSZW5hbWVkIGZyb20gc3ltcy5oLgorCitGcmkgSnVsIDI2IDIyOjQ3OjUzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWNyb2V4cGFuZCk6IEZpeCBlcnJvciBtZXNzYWdlIHN5bnRheC4KKworCSogTWFrZWZpbGUuaW4gKGdudWxpYjIudGFyZ2V0KTogQWRkIHNlbWljb2xvbi4KKworRnJpIEp1bCAyNiAxODoxNzozNiAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgcG9nby5nbnUuYWkubWl0LmVkdSkKKworCSogbWFrZS1taXBzIChDQyk6IEJ1bXAgLVdmLC1YTmcgb3B0aW9uIHRvIDE1MDAgdG8gYWxsb3cgdGhlIE1JUFMKKwljb21waWxlciB0byBjb21waWxlIGNjMXBsdXMuCisKK0ZyaSBKdWwgMjYgMTQ6NDI6MzUgMTk5MSAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGMtcGFyc2UueSAoeXlsZXgpOiBEb24ndCB1c2UgbWJ0b3djIHRvIHRyYW5zbGF0ZSBMJ1wwJy4KKworCSogdG0tbTg4a3N2cjQuaCAoQ1BQX1NQRUMpOiBTcGVjaWZ5IFNWUjQgcHJlLWFzc2VydGlvbnMuCisKK0ZyaSBKdWwgMjYgMDk6NTM6NTMgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IHBvZ28uZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChjcGx1c19leHByLm8pOiBBZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMsIHNvIGNjMXBsdXMKKwljYW4gYmUgYnVpbHQgd2l0aG91dCBmaXJzdCBidWlsZGluZyBjYzEuCisKK0ZyaSBKdWwgMjYgMDc6MzA6NTEgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogQ2FuJ3QgY29tYmluZSBpZiBERVNUIGlzIHVzZWQgaW4gYW4KKwlpbnNuIGluIHRoZSByYW5nZSAoc3VjYywgaTMpLgorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogRG9uJ3QgdXNlIGluc3YgaWYgdGhlIG1vZGUgb2YgaXRzCisJaW5wdXQgaXMgbmFycm93ZXIgdGhhbiB0aGUgd2lkdGggb2YgdGhlIGZpZWxkLgorCShzdG9yZV9maXhlZF9iaXRfZmllbGQpOiBIYW5kbGUgdmFsdWUgd2l0aCBNT0RFX0ZMT0FUIG1vZGUuCisJKGV4dHJhY3RfYml0X2ZpZWxkKTogRG9uJ3QgdXNlIGV4dHp2L2V4dHYgaWYgaXRzIG91dHB1dCBtb2RlIGlzCisJbmFycm93ZXIgdGhhdCB3aWR0aCBvZiBmaWVsZC4KKwkoZXh0cmFjdF9iaXRfZmllbGQpOiBIYW5kbGUgcmV0dXJuaW5nIE1PREVfRkxPQVQgbW9kZS4KKworCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3RhcmdldCk6IEFkZCBuZXcgYXJnIFBORVdfVEhSRUFELgorCUluc3RlYWQgb2YgcmVkaXJlY3RpbmcganVtcCwgcmV0dXJuIGl0cyB0YXJnZXQgaW4gKlBORVdfVEhSRUFELgorCShmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogUGFzcyAmTkVXX1RIUkVBRCB0bworCXN0ZWFsX2RlbGF5X2xpc3RfZnJvbV90YXJnZXQuCisKK1RodSBKdWwgMjUgMjE6NTc6NDIgMTk5MSAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzY2hlZC5jOiBDb3JyZWN0IHRpZW1hbm4ncyBlbWFpbCBhZGRyZXNzLgorCShzY2hlZHVsZV9ibG9jayk6IE5vdGUgdGhhdCB0aGUgdmFsdWVzIG9mIGxlZnRvdmVyIFJFR19ERUFEIG5vdGVzCisJYXJlIG1lYW5pbmdsZXNzLgorCShuZXdfaW5zbl9kZWFkX25vdGVzKTogSWYgZmluZCBhbiBpbnN0cnVjdGlvbiB0aGF0IGJvdGggdXNlcyBhbmQKKwlzZXRzIGRlc3QsIHRoZW4gbm8gbmV3IFJFR19ERUFEIG5vdGUgaXMgbmVlZGVkLgorCSh1cGRhdGVfbGlua3MpOiBXaGVuIGhhbmRsaW5nIGRlc3Qgb2YgbGFzdCBpbnNuLCBubyBuZXcgUkVHX0RFQUQKKwlub3RlIGlzIG5lZWRlZCBpZiB0aGUgbGFzdCBpbnNuIGFsc28gdXNlcyBpdHMgZGVzdC4KKworVGh1IEp1bCAyNSAxODoxNTozMyAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmbG93LmMgKHJlZ25vX2Nsb2JiZXJlZF9hdF9zZXRqbXApOiBEb24ndCBibG93IHVwIGlmIG5vIGJhc2ljIGJsb2Nrcy4KKworVGh1IEp1bCAyNSAxNjo1NTo1NyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChpbnZhbGlkYXRlLCBjc2VfaW5zbik6IERvbid0IHVzZSBIQVNIUkVHIGRpcmVjdGx5LgorCShIQVNIKTogU3Vic3RpdHV0ZSBIQVNIUkVHIGluLgorCShIQVNIUkVHKTogRGVsZXRlZC4KKworCSogdG0taTM4Nm1hY2guaDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGkzODYtbWFjaCk6IFVzZSB0aGF0LgorCisJKiB0bS1pMzg2aXNjLmg6IE5ldyBmaWxlLCBjb3BpZWQgZnJvbSAxLjQwLgorCisJKiBpMzg2Lm1kIChqdW1wLCBpbmRpcmVjdF9qdW1wLCB0YWJsZWp1bXAsIHJldHVybik6CisJVXNlIEFTTV9PVVRQVVRfQUxJR05fQ09ERS4KKwkqIHRtLWkzODZnYXMuaCwgdG0taTM4NnZnYXMuaCAoQVNNX09VVFBVVF9MT09QX0FMSUdOKToKKwlPdmVycmlkZSB0aGUgdXN1YWwgZGVmaW5pdGlvbi4KKworCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX1VTRVNfUElDX09GRlNFVF9UQUJMRSk6IEZpeCB0eXBvLgorCitUaHUgSnVsIDI1IDE2OjI1OjUyIDE5OTEgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBvdXQtbTg4ay5jIChsZWdpdGltaXplX2FkZHJlc3MpOiBOb3RlIHVzZSBvZiBhZGRyZXNzaW5nIGJhc2UuCisJKG04OGtfbGF5b3V0X2ZyYW1lKTogRXN0YWJsaXNoIFBJQyBhZGRyZXNzaW5nIGJhc2UgYXMgbmVlZGVkLgorCisJKiB0bS1tODhrZGd1eC5oIChHUExVU1BMVVNfSU5DTFVERV9ESVIpOiBTcGVjaWZ5LgorCitUaHUgSnVsIDI1IDA3OjU0OjM2IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIHJ0bC5oIChGVU5DVElPTl9GTEFHU19VU0VTX1BJQ19PRkZTRVRfVEFCTEUpOiBEZWZpbmVkLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFByb3BhZ2F0ZSB0aGUgdmFsdWUgb2YKKwlGVU5DVElPTl9GTEFHU19VU0VTX1BJQ19PRkZTRVRfVEFCTEUuCisKKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEFkZCBuZXcgZmllbGQgVVNFU19QSUNfT0ZGU0VUX1RBQkxFCisJdG8gc3RydWN0dXJlLiAgTGVhdmUgaXQgdG8gbWQgZmlsZXMgdG8gaW5pdGlhbGl6ZSB0aGlzIGZpZWxkLgorCSogZXhwci5oIChjdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZSk6IE5ldyBkZWNsYXJhdGlvbi4KKwkqIGZ1bmN0aW9uLmMgKHtzYXZlLHJlc3RvcmV9X3RyZWVfc3RhdHVzKTogU2F2ZSBhbmQgcmVzdG9yZQorCUNVUlJFTlRfRlVOQ1RJT05fVVNFU19QSUNfT0ZGU0VUX1RBQkxFIHRvL2Zyb20gdGhpcyBzbG90LgorCSogb3V0LXNwYXJjLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBTZXQKKwlDVVJSRU5UX0ZVTkNUSU9OX1VTRVNfUElDX09GRlNFVF9UQUJMRSB3aGVuIGFwcHJvcHJpYXRlLgorCShmaW5hbGl6ZV9waWMpOiBJZiB0aGUgY3VycmVudCBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlIFBJQyBvZmZzZXQKKwl0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGVtaXQgdGhlIFBJQyBwcm9sb2d1ZS4KKworV2VkIEp1bCAyNCAxMzo1NDo0MSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRtLW02OGsuaCAoTk9USUNFX1VQREFURV9DQyk6CisJQ2FsbHMgY2xlYXIgc3RhdHVzIGV2ZW4gaWYgdmFsdWUgaW4gYWRkcmVzcyByZWcuCisKKwkqIHRtLWkzODZnYXMuaCwgdG0taTM4NnZnYXMuaCAoQVNNX09VVFBVVF9BTElHTl9DT0RFKTogQWxpZ24gd2l0aCBOT1BzLgorCisJKiBpMzg2Lm1kIChhbmRzaTMpOiBEb24ndCB1c2UgbW92emJsIGlmIG9wMSBjYW4ndCBzdXBwb3J0IGl0LgorCitXZWQgSnVsIDI0IDA3OjQ3OjU5IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIGNwbHVzLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEb24ndCBidWlsZCBhIGNsZWFudXAgZm9yIGFuIHZhcmlhYmxlCisJdGhhdCBpcyBUUkVFX0VYVEVSTkFMLgorCitUdWUgSnVsIDIzIDIwOjQ4OjIzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbWFrZS1taXBzOiBEZWxldGUgcnVsZXMgZm9yIHNhYmVyIEMuCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRiwgZ251bGliMi5yZWFkeSk6IFVuZG8gbGFzdCBjaGFuZ2UuCisKKwkqIHRtLXZheC5oIChMSUJfU1BFQyk6IFN1cHBseSBtaXNzaW5nIGNsb3NlIGJyYWNlcy4KKworVHVlIEp1bCAyMyAxNDowMzoxMCAxOTkxICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogcHJvdG9pemUuYyAodG9wbGV2ZWwpOiBJZiBGVUxMX1BST1RPVFlQRVMgaXMgZGVmaW5lZCwgYXNzdW1lIHRoYXQKKwl0aGUgc3lzdGVtIHByb3ZpZGVzIGZ1bGwgcHJvdG90eXBlcywgYW5kIGluY2x1ZGUgc3RkbGliLmggYW5kCisJdW5pc3RkLmguCisJKHRvcGxldmVsKTogSWYgX1BPU0lYX1NPVVJDRSBpcyBkZWZpbmVkLCB3YWl0IHRha2VzIGEgcG9pbnRlciB0byBhbgorCWludCwgZXZlbiBpZiB0aGUgc3lzdGVtIGlzIG90aGVyd2lzZSBCU0QuCisJKHRvcGxldmVsKTogSWYgTk9fQ09OU1RfSU5fU1lTQ0FMTCBhbmQgX19TVERDX18gaXMgZGVmaW5lZCwgYXNzdW1lCisJdGhlIHN5c3RlbSB0YWtlcyBjaGFyIConcyBpbnN0ZWFkIG9mIGNvbnN0IGNoYXIgKidzLgorCShwcm9jZXNzX2F1eF9pbmZvX2ZpbGUsIGVkaXRfZmlsZSk6IEFsd2F5cyBwYXNzIDMgYXJndW1lbnRzIHRvIG9wZW4sCisJdG8gYWxsb3cgdGhlIE5PX0NPTlNUX0lOX1NZU0NBTEwgbWFjcm8gdG8gcHJvcGVybHkgY2FzdCB0aGUKKwlhcmd1bWVudHMuCisKKwkqIG1ha2UtZGVjcm9zZSAoQUxMKTogTWFrZSBzdXJlIE1ha2VmaWxlIGlzIHJlYnVpbHQgaWYgZWl0aGVyCisJTWFrZWZpbGUuaW4gb3IgbWFrZS1kZWNyb3NlIGNoYW5nZXMuCisJKEJVSUxELCBTWVNURU1fSU5DTFVERVMsIExERkxBR1MpOiBBZGQgQlVJTEQgdmFyaWFibGUgdG8gcmV0YXJnZXQKKwl3aGljaCBidWlsZCBpcyB1c2VkLgorCShDUFBfQUJPUlQpOiBEb24ndCBkZWZpbmUgYWJvcnQ9ZmFuY3lfYWJvcnQgaGVyZSwgZG8gaXQgaW4KKwl0bS1taXBzLmguCisJKElOU1RBTEwpOiBVc2UgaW5zdGFsbGJzZCBwcm9ncmFtLCBzaW5jZSBpbnN0YWxsIHVzZXMgU3lzdGVtIFYKKwlzZW1hbnRpY3Mgb24gT1NGLzEuCisJKExBTkdVQUdFUyk6IFJlbmFtZSBjb2xsZWN0LW9zZiB0byBjb2xsZWN0LgorCShDRkxBR1MsIFhDRkxBR1MpOiBNYWtlIENGTEFHUyB1c2Ugc3RhbmRhcmQgYXJncyBhbmQgdXNlIFhDRkxBR1MgdG8KKwlhZGQgYWRkaXRpb25hbCBhcmd1bWVudHMuCisJKGxpYmRpciwgYmluZGlyLCBtYW5kaXIpOiBEZWZpbmUgdG8gY3VycmVudCBpbnN0YWxsIHZhbHVlcy4KKwkoY3BsdXMtbGV4Lm8pOiBXb3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIDEuMzkgYm9vdHN0cmFwIGNvbXBpbGVyCisJcHJvZHVjaW5nIGJhZCBzdGFicyBmb3IgY2VydGFpbiBpbmxpbmVzLgorCShvc2YtbWFpbi5jKTogQWRkIGEgc2ltcGxlIEcrKyBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIHRvIGdudWxpYi4KKworCSogbWFrZS1taXBzIChBTEwpOiBNYWtlIE1ha2VmaWxlIGRlcGVuZCBvbiBNYWtlZmlsZS5pbiBhbmQKKwltYWtlLW1pcHMuCisJKENGTEFHUywgWENGTEFHUyk6IE1ha2UgQ0ZMQUdTIHVzZSBzdGFuZGFyZCBhcmdzIGFuZCB1c2UgWENGTEFHUyB0bworCWFkZCBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KKwkoQ0MpOiBBZGQgLVdmLC1YTmc1MDAgc3dpdGNoIHRvIGNvbXBpbGUgd2l0aCBkdWUgdG8gdGhlIE1JUFMKKwljb21waWxlciBoYXZpbmcgZml4ZWQgc2l6ZSB0YWJsZXMuCisJKFNBQkVSXyopOiBBZGQgcnVsZXMgdG8gcnVuIHNhYmVyLUMuCisKKwkqIG1pcHMubWQgKG1vdnNpX3Vsdyk6IEFsbG93IHVuYWxpZ25lZCByZWdpc3Rlci0+cmVnaXN0ZXIgbW92ZXMsCisJd2hpY2ggaXMgY2F1c2VkIGJ5IHRoZSBvcHRpbWl6ZXIsIGFuZCBnZW5lcmF0ZSB0aGUgbm9ybWFsIHJlZyBtb3ZlCisJY29kZS4gIEFsc28sIHR1cm4gbG9hZHMgZnJvbSB0aGUgc3RhY2sgaW50byBub3JtYWwgbW92ZXMuCisJKG1vdnNpX3Vzdyk6IFR1cm4gc3RvcmVzIGludG8gdGhlIHN0YWNrIGludG8gbm9ybWFsIG1vdmVzLgorCShjYWxsLCBjYWxsX3ZhbHVlKTogVHVybiBpbnRvIGEgZGVmaW5lX2V4cGFuZCB3aGljaCB0YWtlcyB0aHJlZQorCWFyZ3VtZW50cywgdG8gbWFrZSBTYWJlciBoYXBwaWVyLgorCisJKiB0bS1taXBzLmggKGFib3J0IG1hY3JvKTogRGVmaW5lIGFib3J0IHRvIGJlIHNhYmVyX3N0b3AgaWYgcnVubmluZworCXVuZGVyIFNhYmVyIEMuCisJKF9fUFRSX1RPX0lOVCwgX19JTlRfVE9fUFRSKTogRGVmaW5lIGFzIGNhc3RzIGlmIHJ1bm5pbmcgb24gYSBNSVBTCisJbWFjaGluZSBpbnN0ZWFkIG9mIHdpdGggc3VidHJhY3Rpb24sIGluIGFuIGF0dGVtcHQgdG8gcXVpZXQgU2FiZXIgQy4KKwkoQVNNX01PRElGWV9TUEVDKTogUnVuIG1pcHMtdGZpbGUgYWZ0ZXIgdGhlIGFzc2VtYmxlciwgbmVlZHMKKwljb3JyZXNwb25kaW5nIGdjYy5jIGNoYW5nZSB0byBlbmFibGUuCisKKwkqIHRtLWRlY3Jvc2UuaCAoQVNNX1NQRUMpOiBQYXNzIC12IHN3aXRjaCB0byBnYXMgYXMgd2VsbCBhcyBtaXBzCisJYXNzZW1ibGVyLgorCShBU01fTU9ESUZZX1NQRUMpOiBSdW4gbWlwcy10ZmlsZSBpZiAtbW1pcHMtYXMuCisJKExJTktfU1BFQyk6IFBhc3MgLXYgc3dpdGNoIHRvIGxpbmtlci4KKwkoTElCX1NQRUMpOiBSZWRlZmluZSBhcyBqdXN0IC1sYy4KKwkoTURfRVhFQ19QUkVGSVgsIE1EX1NUQVJURklMRV9QUkVGSVgpOiBVbmRlZmluZSwgdXNlIHN0YW5kYXJkCisJbGliZGlyLCBiaW5kaXIsIGFuZCBtYW5kaXIgaW4gTWFrZWZpbGUgbm93LgorCShGVUxMX1BST1RPVFlQRVMsIE5PX0NPTlNUX0lOX1NZU0NBTEwpOiBEZWZpbmUgdG8gZ2V0IHByb3RvaXplCisJdG8gY29tcGlsZSBjbGVhbmx5LgorCisJKiBvc2YtbWFpbi5jIChuZXcgZmlsZSk6IFByb3ZpZGUgc2ltcGxlIGNvbnN0cnVjdG9yLCBkZXN0cnVjdG9yCisJY2FwYWJpbGl0eSB0byBiZSBsaW5rZWQgaW50byBnbnVsaWIuCisKKwkqIGNvbGxlY3Qtb3NmLmMgKHZhcmlvdXMpOiBHZW5lcmFsIHJld3JpdGUgdG8gaW1wcm92ZSBzcGVlZCBhbmQKKwlwb3J0YWJpbGl0eS4KKworCSogTWFrZWZpbGUuaW4gKENQTFVTX09CSlMpOiBJZiBDUExVU19JTlBVVCBpcyBkZWZpbmVkIHRvIGJlCisJY3BsdXMtaW5wdXQubywgY29tcGlsZSBpdCBzZXBhcmF0ZWx5IHRvIHdvcmsgYXJvdW5kIHByb2JsZW1zIHdpdGgKKwlib290c3RyYXBpbmcgd2hlbiBpdCBpcyBpbmNsdWRlZCBpbiBjcGx1cy1sZXguYy4KKwkoU1RBR0VTVFVGRik6IFVzZSAkKExBTkdVQUdFUykgaW5zdGVhZCBvZiBoYXJkIGNvZGVkIGxpc3Qgb2YKKwlsYW5ndWFnZXMsIHNvIG1ha2UteHh4IGZpbGUgY2FuIG92ZXJyaWRlLCBhbmQgcHJvdmlkZSBvdGhlcnMuCisJKGdudWxpYjIucmVhZHkpOiBNYWtlIGdudWxpYjIgZGVwZW5kIG9uIGFsbCBMQU5HVUFHRVMgdGFyZ2V0cywgc28KKwl0aGF0IGlmIGEgdGFyZ2V0IG5lZWRzIHNvbWV0aGluZyBlbHNlIGJ1aWx0LCBzdWNoIGFzIG1pcHMtdGZpbGUsIGl0CisJd2lsbCBiZS4KKwkobW9zdGx5Y2xlYW4pOiBBZGQgbWlzc2luZyAtZiB0byBybS4KKwkoaW5zdGFsbC1kaXIpOiBVc2UgdGVzdCB0byBzZWUgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgYmVmb3JlIHRyeWluZworCXRvIGNyZWF0ZSBpdCwgYW5kIGZhaWwgaWYgdGhlIG1rZGlyIGZhaWxzLgorCShpbnN0YWxsLWhlYWRlcnMpOiBkaXR0by4KKwkoc3RhZ2U/LCByaXNreS1zdGFnZT8pOiBkaXR0by4KKwkoaW5zdGFsbC1jcm9zcyk6IEluc3RhbGwgY29sbGVjdCBhbmQgbWlwcy10ZmlsZSBpZiB0aGV5IGFyZSBwcmVzZW50LgorCisJKiBtaXBzLXRmaWxlLmMgKHRvcGxldmVsLCBtYWluKTogQWRkIC1JIGZpbGUgb3B0aW9uLCB3aGljaCByZW5hbWVzCisJdGhlIG9yaWdpbmFsIG91dHB1dCBmaWxlIHRvIHRoZSBnaXZlbiBmaWxlLgorCisJKiBjcGx1cy1sZXguYyAodG9wbGV2ZWwpOiBJbmNsdWRlIDxhc3NlcnQuaD4gaW5zdGVhZCBvZiAiYXNzZXJ0LmgiCisJaW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2hlbiBpbmNsdWRpbmcgY3BsdXMtaW5wdXQuYywgd2hpY2ggYWxzbworCXVzZXMgPGFzc2VydC5oPi4KKworCSogY3BsdXMtcHQuYyAodG9wbGV2ZWwpOiBNb3ZlIGluY2x1ZGUgb2YgY29uZmlnLmggYmVmb3JlIG9ic3RhY2suaAorCWluIGNhc2UgY29uZmlnLmggZGVmaW5lcyBzb21lIG1hY3JvcyBvYnN0YWNrLmggdXNlcyBzdWNoIGFzCisJX19QVFJfVE9fSU5ULgorCitUdWUgSnVsIDIzIDEzOjE1OjQzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeG0taTM4Ni5oLCB4bS1pODYwLmgsIHhtLXNwdXIuaCwgeG0tdGFob2UuaDogVXNlIF9fYnVpbHRpbl9hbGxvY2EuCisKK1R1ZSBKdWwgMjMgMTI6MjY6MDEgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKKworCSogZnVuY3Rpb24uYyAoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEpOiBDaGFuZ2UgZHViaW91cyBjb2RlIHRoYXQKKwl1c2VkIHRvIGFzc2lnbiBORVcgdG8gWEVYUCAoeCwgMSkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisJdmFsaWRhdGVfY2hhbmdlIGFjY2VwdGVkIGl0IHRvIGluc3RlYWQgc2V0IFhFWFAgKHgsIDApIGJhY2sgdG8gT0xELgorCUkuZS4sIGlmIHRoZSBydHggaXMgb3V0IG9mIHJhbmdlIGFuZCBPQkpFQ1QgaXMgTlVMTCwgZG9uJ3QgbWFrZSBhbnkKKwljaGFuZ2UgYXQgYWxsLgorCisJKiBvdXQtc3BhcmMuYyAoY29tcHV0ZV9mcmFtZV9zaXplKTogSWYgYSBmdW5jdGlvbiBoYXMgYW55CisJc3RhY2stbG9jYWwgb2JqZWN0cywgaXQncyBmcmFtZSBzaXplIGlzIG5vbi16ZXJvIGFuZCBzcGFjZSBtdXN0IGJlCisJcmVzZXJ2ZWQgZm9yIHRoZSByZWdpc3RlciB3aW5kb3cuCisKKwkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSk6IFVzZSBnZXRfbWF4X3VpZCB0byBjb21wdXRlIG1heF91aWRfZm9yX2xvb3AuCisKKwkqIGZvbGQtY29uc3QuYyAoc2l6ZV9pbnQpOiBFeHRlbmQgU0laRV9UQUJMRSdzIHJhbmdlIGZyb20KKwkwLi5IT1NUX0JJVFNfUEVSX0lOVC0xIHRvIDAuLjIqSE9TVF9CSVRTX1BFUl9JTlQuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWRkIG1pbm9yIGVmZmljaWVuY3kKKwloYWNrIHRvIG5vdCBmcmVlIGFsbCB0aGUgdGVtcCBzbG90cyBhcyBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQKKwlmcm9tICJjYWxsZXIiIHRvICJjYWxsZWUiLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IElmIHRoZSBpbmxpbmUgZnVuY3Rpb24KKwlyZXR1cm5zIGl0cyB2YWx1ZSB2aWEgYSBzdHJ1Y3R1cmVfdmFsdWVfYWRkciwgd2UgbXVzdCBwcmVwYXJlIGZvcgorCXRoaXMgdG8gdGFrZSBwbGFjZSwgZXZlbiBpZiB0aGUgdmFsdWUgaXMgaWdub3JlZCBieSB0aGUgY2FsbGVyLgorCisJKiB0bS1kZWNzdGF0bi5oIChTSVpFX1RZUEUpOiBEZWZpbmUgdGhpcyB0byBiZSAidW5zaWduZWQgaW50Ii4KKworCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogSWYgYHNwbGl0X2luc25zJyBhY3R1YWxseSByZXR1cm5zIGEgU0VRCisJd2hpY2ggaXMgaXNvbW9ycGhpYyB0byBQQVQsIHJldHVybiBUUklBTC4KKworCSogb3V0LXNwYXJjLmMgKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IEZQIHJlZ2lzdGVyIG1vdmVzIGFyZQorCW9ubHkgZWxpZ2libGUgZm9yIGxlYWYtZnVuY3Rpb24gZXBpbG9ndWUgZGVsYXkgc2xvdHMuCisKK1R1ZSBKdWwgMjMgMTE6NTI6NTAgMTk5MSAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IENvcnJlY3QgdHlwbyBpbiBnZXR0aW5nIHN0YXRpYyBtZW1iZXIKKwluYW1lcy4gIFRoZSBwcm9ibGVtIGlzIERFQ0xfQVNTRU1CTEVSX05BTUUgcmV0dXJucyBhIHRyZWUsIGFuZCBub3QgYQorCWNoYXIgKi4KKworVHVlIEp1bCAyMyAwNzoxMDo0MSAxOTkxICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXJhc20uYyAoaW1tZWRfZG91YmxlX2NvbnN0KTogVXNlIENPTlNUX0lOVCBpZiBNT0RFIGZpdHMgd2l0aGluCisJSE9TVF9CSVRTX1BFUl9JTlQsIG5vdCBCSVRTX1BFUl9XT1JELgorCitNb24gSnVsIDIyIDIxOjM3OjAzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogQWx3YXlzIHByZXNlcnZlIHR5cGUgYWZ0ZXIgdXNpbmcgY29uc3RfYmlub3AuCisKK01vbiBKdWwgMjIgMTg6MzQ6NTUgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBGaXggdHlwbyBpbiBjb25kaXRpb24gZm9yIHJlZ19lcXVpdl9hZGRyZXNzCisJYmVpbmcgc2V0IGZyb20gcmVnX2VxdWl2X21lbW9yeV9sb2M7IGhhZCBYIGluc3RlYWQgb2YgWEVYUCAoWCwgMCkuCisKK01vbiBKdWwgMjIgMTU6MjU6NDggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogLXhub25lIHR1cm5zIG9mZiBhbnkgLXggb3B0aW9uLgorCisJKiB0cmVlLmMgKGNvcHlfY2hhaW4pOiBEZWxldGVkLgorCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF90cmVlKTogVXNlIGNvcHlfbGlzdCBhbmQgY29weV9ub2RlLgorCitNb24gSnVsIDIyIDExOjM1OjQ3IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgcG9nby5nbnUuYWkubWl0LmVkdSkKKworCSogdHJlZS5jLCB0cmVlLmg6IEZpeCB0eXBvcyBpbiBKdWwgMjIgbWVyZ2UuCisKK01vbiBKdWwgMjIgMDg6NTE6NDcgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jICh0aHJlYWRfanVtcHMpOiBEb24ndCBzZXQgQ0hBTkdFRCBpZiB0aGUganVtcCdzIGxhYmVsIGlzbid0CisJY2hhbmdpbmcuCisKK01vbiBKdWwgMjIgMDI6Mzc6MjMgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBwb2dvLmdudS5haS5taXQuZWR1KQorCisJKiB2ZXJzaW9uLmM6IEJ1bXBlZCB0byAxLjk0IGJlY2F1c2Ugb2Ygc2lnbmlmaWNhbnQgY2hhbmdlcyB0bworCWNwbHVzLSogZmlsZXMuCisKK1N1biBKdWwgMjEgMTg6NDU6NTcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6CisJU2F2ZSBhbmQgcmVzdG9yZSBERUNMX0lOSVRJQUwgaWYgd2UgdXNlIHNhdmVfZm9yX2lubGluZV9jb3B5aW5nLgorCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogUmVhbGx5IGNvcHkgREVDTF9JTklUSUFMLgorCUNhbGxpbmcgaW50ZWdyYXRlX2RlY2xfdHJlZSBkb2Vzbid0IGRvIGl0OyBkZWxldGVkIHRoYXQgY2FsbC4KKwkoY29weV9kZWNsX3RyZWUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGludGVncmF0ZS5jIChpbnRlZ3JhdGVfZGVjbF90cmVlKTogUmVuYW1lZCBmcm9tIGNvcHlfZGVjbF90cmVlLgorCShpbnRlZ3JhdGVfcGFybV9kZWNscyk6IFJlbmFtZWQgZnJvbSBjb3B5X3Bhcm1fZGVjbHMuCisKKwkqIHRyZWUuYyAoY29weV9jaGFpbik6IE5ldyBmdW5jdGlvbi4KKworU3VuIEp1bCAyMSAwNjo0MzoyMyAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKHRzdHNpKTogQWRkIGNvbW1lbnQgbm90aW5nIHBvdGVudGlhbCAtbTQ4NiBlbmhhbmNlbWVudC4KKwkoU0ltb2RlIHB1c2gpOiBXaXRoIC1tNDg2LCBkb24ndCBwdXNoIGZyb20gTUVNLgorCShhZGRzaTMpOiBEb24ndCB1c2UgbGVhIGZvciB0aHJlZSBvcGVyYW5kIGFkZCBpZiAtbTQ4Ni4KKwkoYXNobHNpMyk6IERvbid0IHVzZSBsZWEgZm9yIHNoaWZ0IG9mIDEgaWYgLW00ODYuCisJKHplcm9fZXh0ZW5kaGlzaTIsemVyb19leHRlbmRxaWhpMix6ZXJvX2V4dGVuZHFpc2kyKTogSWYgZGVzdCBpcworCSVlYXgsIG9yIGlmIC1tNDg2LCBBTkQgaXMgZmFzdGVyIHRoYW4gTU9WWlguCisKK1N1biBKdWwgMjEgMDY6Mjc6MzMgMTk5MSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2ZpeGVkX2JpdF9maWVsZCk6IFBhc3MgYWN0dWFsIGJpdCBwb3NpdGlvbiAoaW5jbHVkaW5nCisJb2Zmc2V0KSB0byBnZXRfYmVzdF9tb2RlOyBhbHNvIGxpbWl0IG1vZGUgc2l6ZSB0byBCSVRTX1BFUl9XT1JELgorCVVzZSBmYWlsdXJlIG9mIGdldF9iZXN0X21vZGUgdG8gaW5kaWNhdGUgdGhhdCBmaWVsZCBzcGFucyB3b3JkIAorCWJvdW5kYXJ5LgorCVBhc3MgYWN0dWFsIGJpdCBwb3NpdGlvbiB0byBzdG9yZV9zcGxpdF9iaXRfZmllbGQuCisJKHN0b3JlX3NwbGl0X2JpdF9maWVsZCk6IEFjY2VwdCBhY3R1YWwgYml0IHBvc2l0aW9uLCBoZW5jZSBoYW5kaW5nCisJYml0cG9zID4gQklUU19QRVJfV09SRC4KKwlBYm9ydCBpZiBCSVRQT1MgYW5kIEJJVFNJWkUgZG9uJ3QgY3Jvc3MgZXhhY3RseSBvbmUgd29yZCBib3VuZGFyeS4KKwlQYXNzIG9mZnNldCB0byBzdG9yZV9maXhlZF9iaXRfZmllbGQ7IGlmIHJlZ2lzdGVyLCB1c2Ugb3BlcmFuZF9zdWJ3b3JkOworCWVsc2UgYWRqdXN0IG9mZnNldCBmb3Igc2Vjb25kIHdvcmQuCisJKGV4dHJhY3Rfe2ZpeGVkLHNwbGl0fV9iaXRfZmllbGQpOiBMaWtld2lzZS4KKworU3VuIEp1bCAyMSAwNjoxMTo1NSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z2ludC5jeWdudXMuY29tKQorCisJKiBBbGwgY3BsdXMtKiBmaWxlczogREVDTF9WSVJUVUFMX1AgaXMgbm8gbG9uZ2VyIGFwcGxpZWQgdG8KKwlGVU5DVElPTl9ERUNMcy4gIEluc3RlYWQsIHRvIHRlc3QgaWYgYSBmdW5jdGlvbiBpcyB2aXJ0dWFsIG9yIG5vdCwKKwlpdCBzdWZmaWNlcyB0byB0ZXN0IHdoZXRoZXIgaXRzIERFQ0xfVklOREVYIGlzIG5vbi1OVUxMLiAgV2UgdXNlCisJRVJST1JfTUFSS19OT0RFIGFzIHRoZSBwbGFjZWhvbGRlciBmb3IgYSBGVU5DVElPTl9ERUNMIHdlIGtub3cgd2lsbAorCWJlIHZpcnR1YWwsIGJ1dCBmb3Igd2hpY2ggd2UgZG9uJ3QgeWV0IGtub3cgdGhlIGFjdHVhbCBpbmRleC4KKworCSogY3BsdXMtZGVjbC5jIChkZWZpbmVfZnVuY3Rpb24pOiBEb24ndCBzZXQgdXAgREVDTF9BU1NFTUJMRVJfTkFNRQorCXVudGlsIGFmdGVyIGhhdmluZyB0aGUgY2hhbmNlIHRvIGNhbGwgdGhyb3VnaCBQRk4uICBTaW5jZSBgcHVzaGRlY2wnCisJbm93IGtleXMgb2ZmIG9mIERFQ0xfQVNTRU1CTEVSX05BTUUsIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCisJaW5hZHZlcnRlbnQgYWxpYXNlcyBiZXR3ZWVuIGJ1aWx0aW4gYW5kIGxpYnJhcnkgZnVuY3Rpb25zLgorCisJKiBjcGx1cy10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBXZSBkb24ndCBuZWVkIHRvIGJ1aWxkIGEKKwlTQVZFX0VYUFIgZm9yIGEgV0lUSF9DTEVBTlVQX0VYUFIuCisJKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogRm9yIGdvb2QgbWVhc3VyZSwga25vdyBob3cgdG8gZGVhbCB3aXRoIGEKKwlXSVRIX0NMRUFOVVBfRVhQUiBpbnNpZGUgYSBTQVZFX0VYUFIuCisKKwkqIGNwbHVzLXB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBBZGQgaGFuZGxlciBmb3IgQVJSQVlfVFlQRS4KKworCSogY3BsdXMtbWV0aG9kLmMgKGRvX2lubGluZV9mdW5jdGlvbl9oYWlyKTogVXNlIFRZUEVfTUVUSE9EUyBpbnN0ZWFkCisJb2YgQ0xBU1NUWVBFX01FVEhPRF9WRUMgZm9yIHRyYXZlcnNpbmcgYWxsIG1ldGhvZHMgd2hlbiBsb29raW5nIGZvcgorCWlubGluZSBmdW5jdGlvbnMuCisKKwkqIGNwbHVzLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IEZpeCBmZW5jZXBvc3QgZXJyb3IgaWYKKwl0aGVyZSB3ZXJlIG5vIG1lbWJlciBmdW5jdGlvbnMgZXhjZXB0IGZvciBjdG9ycy9kdG9ycy4KKworU3VuIEp1bCAyMSAwNjoxOTowMSAxOTkxICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHRyZWUuaCwgb3V0cHV0LmggKGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfbG9uZ2ptcCk6IE5ldyB2YXJpYWJsZS4KKwkqIGZ1bmN0aW9uLmMgKHRvcCBsZXZlbCk6IERlZmluZSBpdC4KKwkocHVzaF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBpdC4KKwkocG9wX2Z1bmN0aW9uX2NvbnRleHQpOiBSZXN0b3JlIGl0LgorCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogSW5pdGlhbGl6ZSBpdC4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9jYWxsc19sb25nam1wIGlmCisJdGhpcyBjYWxsIGlzIHRvIGBsb25nam1wJy4KKworCSogZmxvdy5jLCBnbG9iYWwtYWxsb2MuYzogSW5jbHVkZSBvdXRwdXQuaCBzbyB0aGF0CisJRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCBjYW4gdXNlIGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfKi4KKwkqIE1ha2VmaWxlLmluIChmbG93Lm8sZ2xvYmFsLWFsbG9jLm8pOiBJbmNsdWRlcyBvdXRwdXQuaC4KKworCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX0NBTExTX0xPTkdKTVApOiBOZXcgbWFjcm8uCisKKwkqIGludGVncmF0ZS5jIChpbml0aWFsaXplX2Zvcl9pbmxpbmUpOiBSZWNvcmQKKwljdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2xvbmptcCBpbiBgZnVuY3Rpb25fZmxhZ3MnLgorCShvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfbG9uZ2ptcCBpZgorCXRoZSBpbmxpbmUgY29kZSBjYWxscyBsb25nam1wLgorCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBOZXcgZmllbGQgYGNhbGxzX2xvbmdqbXAnLgorCisJKiBvdXQtaTM4Ni5jIChzaW1wbGVfMzg2X2VwaWxvZ3VlKTogIEFkZCBmdW5jdGlvbiBkZXNjcmlwdGlvbi4KKwlSZXR1cm4gMCBpZiBOT05fU0FWSU5HX1NFVEpNUCAmJiBgc2V0am1wJyBpcyBjYWxsZWQgaW4gZnVuY3Rpb24uCisKKwkqIHRtLWkzODZ2LmggKE5PTl9TQVZJTkdfU0VUSk1QKTogTmV3IG1hY3JvLgorCShGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKTogTmV3IG1hY3JvLgorCitTYXQgSnVsIDIwIDEyOjI1OjU2IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG0tbTg4ay5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERvbid0IGNoYW5nZSBmbGFnX3NpZ25lZF9iaXRmaWVsZHMuCisKKwkqIGNjY3AuYyAoaW5jbHVkZV9kZWZhdWx0cykgVXNlIExPQ0FMX0lOQ0xVREVfRElSIG1hY3JvIGluc3RlYWQKKwlvZiAiL3Vzci9sb2NhbC9pbmNsdWRlIi4gIFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgorCisJKiBjY2NwLmMgKGluY2x1ZGVfZGVmYXVsdHMpIEFkZGVkIElOQ0xVREVfREVGQVVMVFMgbWFjcm8gdG8KKwlwcm92aWRlIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3JpZXMuCisJRGVsZXRlIHRoZSBzcGVjaWFsIGNhc2UgZm9yIFZNUy4KKwkqIHhtLXZtcy5oIChJTkNMVURFX0RFRkFVTFRTKTogRGVmaW5lZC4KKworCSogcHJvdG8tbWFuOiBSZW5hbWVkIGZyb20gcHJvdG8tdW5wcm90by4xLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBEbyBBU01fT1VUUFVUX0xPT1BfQUxJR04gb25seSBmb3IgcmVhbCBsb29wLgorCitTYXQgSnVsIDIwIDA1OjM0OjEzIDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCisKKwkqIHRyZWUuaCAodHJlZV90eXBlKTogVXNlIHRoZSBNQVhWQUwgc2xvdCBmb3IgVFlQRV9NRVRIT0RTLgorCSogY3BsdXMtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IE1ldGhvZHMgYXJlIG5vdyBjaGFpbmVkIHdpdGgKKwlUUkVFX0NIQUlOIGFuZCBwbGFjZWQgaW4gdGhlIFRZUEVfTUVUSE9EUyBvZiB0aGVpciBfVFlQRSBub2RlLgorCSogY3BsdXMtZGJ4b3V0LmMgKGRieG91dF90eXBlX21ldGhvZHMpOiBVc2UgdGhpcyBmYWN0LCBpbnN0ZWFkIG9mCisJdXNpbmcgbW9yZSBDKystc3BlY2lmaWMga25vd2xlZGdlLgorCisJKiBjcGx1cy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVmFyaWFibGUKKwlgY29uc3RfcHRyX3R5cGVfbm9kZScgd2FzIG5vdCBiZWluZyBpbml0aWFsaXplZC4gIFNhbWUgd2l0aAorCWBjb25zdF9zdHJpbmdfdHlwZV9ub2RlJy4KKworCSogdHJlZS5oIChERUNMX1BSSU5UX05BTUUpOiBNYXJrZWQgZm9yIGRlYXRoLgorCShERUNMX0FTU0VNQkxFUl9OQU1FKTogQ2hhbmdlZCBmcm9tIGEgY2hhciogdG8gYSB0cmVlIG5vZGUuCisJQWxsIGZyb250LWVuZCBmaWxlcyBjaGFuZ2VkIGFzIG5lY2Vzc2FyeS4KKworCSogY3BsdXMtdHJlZS5oIChERUNMX09SSUdJTkFMX05BTUUpOiBEZWxldGVkLiAgTm93IHdlIHVzZQorCURFQ0xfTkFNRS4KKwkoREVDTF9OQU1FKTogTm8gbG9uZ2VyIG1lYW5zIHRoZSBtYW5nbGVkIG5hbWUuICBOb3cgd2UgdXNlCisJREVDTF9BU1NFTUJMRVJfTkFNRSBmb3IgdGhhdCBwdXJwb3NlLgorCUFsbCBjcGx1cy0qIGZpbGVzIGNoYW5nZWQgYXMgbmVjZXNzYXJ5LgorCisJKiBjcGx1cy10cmVlLmMgKGxhbmdfcHJpbnRhYmxlX25hbWUpOiBVc2UgYSByaW5nLWJ1ZmZlciB0byBob2xkCisJcHJpbnRhYmxlIG5hbWVzIGluc3RlYWQgb2YgREVDTF9QUklOVF9OQU1FIHNsb3Qgb2YgYSBfREVDTCBub2RlLgorCisJKiBjb2xsZWN0Mi5jOiAjZGVmaW5lIENPTExFQ1QsIGFuZCBsZXQgY29uZmlnLmggcHJvdmlkZSBkZWZpbml0aW9uCisJb2YgbWFjcm9zLgorCitTZWUgZmlsZSBDaGFuZ2VMb2cuMy4KZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuNSBiL2djYy9DaGFuZ2VMb2cuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjI0OGRiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL0NoYW5nZUxvZy41CkBAIC0wLDAgKzEsODk1NCBAQAorU3VuIEp1biAxNCAxNjozMDowNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi4yLjIgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlLmluIChnY2MueHRhci5aKTogRG9uJ3QgZ2l2ZSB1cCBpZiB0ZXhpbmZvIGZpbGVzIG5vdCB1cGRhdGVkLgorCUp1c3Qgc2xlZXAgdG8gZW1waGFzaXplIHRoZSBtZXNzYWdlLgorCisJKiBpODYwLmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBBdm9pZCBmIHJlZ3MgZm9yIEhJIGFuZCBRSSBpZiBwb3NzLgorCisJKiBwcm90b2l6ZS5jOiBEb24ndCBpbmNsdWRlIHdhaXQuaC4KKwkoZ2VuX2F1eF9pbmZvX2ZpbGUpOiBUZXN0IHdhaXRfc3RhdHVzIGFzIGluIGdjYy5jLgorCVJlcG9ydCBmYXRhbCBzaWduYWxzIGV4cGxpY2l0bHkuICBSZXBvcnQgZXhpdCBzdGF0dXMuCisJKiB4bS1uZXh0LmggKHdhaXQpOiBEZWZpbml0aW9uIGRlbGV0ZWQuCisKKwkqIHNwYXJjLmMgKHByaW50X29wZXJhbmQpOiBJbiBgcicgY2FzZSwgcmVjb2duaXplIGFueSBraW5kIG9mIHplcm8uCisKK1NhdCBKdW4gMTMgMDI6NTE6MTAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB2YS1zcGFyYy5oICh2YV9hcmcpOiBIYW5kbGUgYWxsIDgtYnl0ZSB0eXBlcywgbm90IGp1c3QgZG91YmxlLgorCitGcmkgSnVuIDEyIDIzOjQwOjQxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaTg2MHY0LmggKEFTTV9PVVRQVVRfRE9VQkxFLCBBU01fT1VUUFVUX0ZMT0FUKToKKwlVc2UgYGUnIGZvcm1hdCwgbm90IGBnJyBmb3JtYXQuCisKK0ZyaSBKdW4gMTIgMTI6NTI6NDggMTk5MiAgVGltIE1vb3JlICAobW9vcmUgYXQgZmFzdC5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKGFic2RmMik6IEZpeCBidWcgaW4gb3V0cHV0IHRlbXBsYXRlLgorCitGcmkgSnVuIDEyIDEwOjI1OjI1IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogdWx0cml4LmggKFdDSEFSXyopOiAgU2V0IHRvIGNvcnJlY3QgdmFsdWVzLgorCitGcmkgSnVuIDEyIDEwOjA3OjQzIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiB4LW1pcHMsIHgtbWlwc3YsIHgtZGVjc3RhdG4sIHgtaXJpcyAoT0xEQ0MpOiBBZGQgLU9saW1pdCAzMDAwIHRvCisJYnVtcCB0aGUgbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyB0aGF0IHRoZSBNSVBTIGNvbXBpbGVyIGhhbmRsZXMsIHNvCisJdGhhdCBpdCBkb2Vzbid0IGlzc3VlIHdhcm5pbmcgbWVzc2FnZXMgc2F5aW5nIHRvIGJ1bXAgdGhlIGxpbWl0LgorCU1vdmUgdGhlIC1PMSBvcHRpb24gaGVyZSBmcm9tIFhfQ0ZMQUdTLCBzbyB0aGF0IGl0IGRvZXNuJ3QKKwlnZXQgcGFzc2VkIHdoZW4gYm9vdHN0cmFwaW5nLgorCShYX0NGTEFHUyk6IERlbGV0ZS4KKworVGh1IEp1biAxMSAxNTowODowMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmggKFJFVFVSTl9JTl9NRU1PUlkpOiBEbyBub3RoaW5nIGZvciBzdHJ1Y3RzIGFuZCB1bmlvbnMuCisJKEVYVFJBX0NPTlNUUkFJTlQpOiBEdXJpbmcgcmVsb2FkLCBhY2NlcHQgcHNldWRvIHJlZyBmb3IgUS4KKworCSogdmEtc3BhcmMuaCAodmFfYXJnKTogSGFuZGxlIHVuYWxpZ25lZCBkb3VibGVzLgorCisJKiBmaXhpbmNsdWRlczogRml4IHJldHVybiB0eXBlIG9mIGBmcmVlJyBpbiBtYWxsb2MuaC4KKwlSZWNvZ25pemUgI2RlZmluZS5OVUxMIG9ubHkgYXQgc3RhcnQgb2YgbGluZS4KKwlJbiBzeXMvdHlwZXMuaCwgZmluZCBzaXplX3Qgb25seSBpbiBhIHR5cGVkZWYuCisJSW4gbmV0ZG5ldC9kbmV0ZGIuaCwgZG9uJ3QgYWRkIHNlbWljb2xvbiBpbiB3cm9uZyBwbGFjZS4KKworCSogY29uZmlndXJlOiBTZXQgdXNlX2NvbGxlY3QyIHRvIGVtcHR5IHJhdGhlciB0aGFuIHVuc2V0dGluZy4KKworCSogZ3N0ZGRlZi5oIChfX25lZWRfd2NoYXJfdCk6IEZpeCB0eXBvIGluICN1bmRlZi4KKworV2VkIEp1biAxMCAwNDozMDowMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBJbiBnY2NfZXhlY19wcmVmaXgsIG1hY2hpbmUgcHJlY2VkZXMgdmVycy4KKworCSogaTM4NnNjbzQuaCAoQ1BQX1NQRUMpOiBEb24ndCByZWRlZmluZSBfX1NURENfXy4KKwlmaXhpbmNsdWRlcyBrbm93cyBob3cgdG8gZml4IHRoZSBjb25kaXRpb25hbHMgaW4gc3lzdGVtIGhlYWRlcnMuCisKKwkqIGNvbGxlY3QyLmMgKHNjYW5fcHJvZ19maWxlKTogSW5pdGlhbGl6ZSBsZHB0ci4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBNYWtlIHRhZyBwcmVjZWRlIHR5cGVkZWYuCisKKwkqIGNvbmZpZ3VyZTogSW5pdGlhbGl6ZSBob3N0LCBob3N0X3htX2ZpbGUsIGhvc3RfeG1ha2VfZmlsZSwKKwlob3N0X2Jyb2tlbl9pbnN0YWxsLCBhbmQgYnJva2VuX2luc3RhbGwuCisKKwkqIE1ha2VmaWxlLmluIChlbnF1aXJlLm8pOiBBZGQgYC4vJyB3aGVuIHJlbW92aW5nIGVucXVpcmUuYy4KKworVHVlIEp1biAgOSAyMDo1MjowNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi4yLjEgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlLmluIChjbGVhbik6IERvbid0IGRlbGV0ZSB1bnByb3RvaXplLmMuCisKKwkqIGNvbmZpZ3VyZTogRml4IHR5cG8gaW4gbW9kaWZ5aW5nIElOU1RBTEwgdmFyaWFibGUgaW4gTWFrZWZpbGUuCisKK01vbiBKdW4gIDggMTU6MTQ6MDkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuMiByZWxlYXNlZC4KKworCSogTWFrZWZpbGUuaW4gKGV4dHJhY2xlYW4pOiBEZWxldGUgKi5yZWogYW5kICoub3JpZyB1bmRlciBjb25maWcuCisJRGVsZXRlICoueHRhci4KKwkoZGlzdCk6IFVwZGF0ZSBSRUFETUUgKmJlZm9yZSogbWFraW5nIHRhciBmaWxlLgorCUZpeCBxdW90aW5nIG9mIGVycm9yIG1lc3NhZ2UgYWJvdXQgZ2NjLnRleGk7IGV4aXQgaWYgdGhhdCB0ZXN0IGZhaWxzLgorCURvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGZyb20gbG4uCisKKwkqIGFzc2VydC5oIFtfX2NwbHVzcGx1c106IFVzZSBgZXh0ZXJuICJDIicgYXJvdW5kIF9fZXByaW50ZiBkZWNsLgorCisJKiBjb25maWd1cmUgKHJzNjAwMC0qLW1hY2gqLCBweXJhbWlkLSotKiwgbWlwcy1zZ2ktKik6CisJUGF0dGVybnMgbWFkZSBjYW5vbmljYWwuCisJKHJzNjAwMC0qLW1hY2gqKTogRml4IHR5cG8gaW4gYHhtYWtlX2ZpbGUnLgorCisJKiBjb25maWd1cmUgKGkzODYtKi1vc2Zyb3NlKik6IFJlbmFtZWQgZnJvbSBpMzg2LW9zZnJvc2UqLgorCisJKiBNYWtlZmlsZS5pbiAoLk5PRVhQT1JUKTogTW92ZWQgYWZ0ZXIgYGFsbCcuCisJQ29tbWVudHMgcHV0IG9uIHNlcGFyYXRlIGxpbmVzLgorCitNb24gSnVuICA4IDE4OjMzOjAxIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKG1pcHMtZGVjLW9zZiopOiBTZXQgeG1ha2VfZmlsZSB0byB4LW1pcHMuCisKK1N1biBKdW4gIDcgMTU6NTU6MzQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoc2V0X3NwZWMpOiBGaXggYnJhaW5vIGluICJhcHBlbmRpbmciIHNwZWMgdmFsdWVzLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEZpeCBkdW1iIGJ1ZyBpbiBsYXN0IGNoYW5nZS4KKworU3VuIEp1biAgNyAwNzoxNjoyNSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByb21wLm1kOiBEaXNhYmxlIHR3byBtb3JlIGRlZmluZV9zcGxpdHMgZHVyaW5nIHRoZSBmaXJzdCBzY2hlZAorCXBhc3MgdW50aWwgbG9uZy1zdGFuZGluZyBzY2hlZC5jIGJ1ZyBpcyBmaXhlZC4JCQorCitUaHUgSnVuICA0IDE2OjQ5OjU2IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogR2xvYmFsIHJlZ2lzdGVycyBhcmUgbmVlZGVkIGF0IGZ1bmN0aW9uIGVuZC4KKworU2F0IEp1biAgNiAxNzowNzoxNiAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2UgYXQgZGF2aWQudWx0cmEubnl1LmVkdSkKKworCSogcHlyLm1kIChzaGlmdCBwYXR0ZXJucyk6IERlY2xhcmUgb3V0cHV0X3NoaWZ0LgorCShtb3ZkaSwgbW92ZGYpOiBEZWNsYXJlIG91dHB1dF9tb3ZlX2RvdWJsZS4KKworU2F0IEp1biAgNiAxNTowNzoxMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChjLXBhcnNlLm8pOiBEZXBlbmQgb24gYy1wYXJzZS5oLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRml4IHR5cG8gaW4gZm9ybWF0IHN0cmluZy4KKworCSogbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogQlNEIDQuMyBkb2VzIGxpbmUgYnVmZmVyaW5nIGRpZmZlcmVudGx5LgorCisJKiBNYWtlZmlsZS5pbiAoU1lTQ0FMTFMuYy5YKTogUHV0IEdDQyBvdXRwdXQgaW4gZmlsZSwgbm90IC9kZXYvbnVsbC4KKwkobW9zdGx5Y2xlYW4pOiBEZWxldGUgdGVtcCBmaWxlLgorCisJKiBjb25maWd1cmUgKGhhbmRsaW5nIGJyb2tlbl9pbnN0YWxsKTogQWRkIC1jIG9wdGlvbi4KKworU2F0IEp1biAgNiAxMTozNDowMCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGdzdGRhcmcuaCAodmFfYXJnKTogRml4IHR5cG8gaW5jcmVtZW50aW5nIEFQLgorCitTYXQgSnVuICA2IDE2OjI3OjE4IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLW41LmgsIG1pcHMtc3lzdi5oOiBJbmNsdWRlIHN5cy9wYXJhbS5oLCBub3QgdHlwZXMuaC4KKworRnJpIEp1biAgNSAxOTowMDozNiAxOTkyICBIb3dhcmQgQ2h1ICAoaHljQGhhbmF1bWEuanBsLm5hc2EuZ292KQorCisJKiBmeDI4MDAuaCAoQVNNX09VVFBVVF9GVU5DVElPTl9QUkVGSVgpOiBPdXRwdXQgYSBub3AgYmVmb3JlCisJZXZlcnkgZnVuY3Rpb24sIHRvIGFjY29tb2RhdGUgdGRlc2NzLiAgQWxzbywgc2F2ZSBmdW5jdGlvbgorCW5hbWUgaW4gY3VycmVudF9mdW5jdGlvbl9vcmlnaW5hbF9uYW1lIGZvciB1c2UgaW4gaTg2MC5jLgorCUFsc28gZGVmaW5lIE9VVFBVVF9UREVTQyB0byBnZXQgQUJJLWNvbXBsaWFudCB0ZGVzYyBpbmZvCisJZ2VuZXJhdGVkIGZvciBlYWNoIGZ1bmN0aW9uLgorCisJKiBpODYwLmMgKGZ1bmN0aW9uX2VwaWxvZ3VlKTogQWRkIGNvZGUgdG8gb3V0cHV0IHRkZXNjIGluZm8KKwlhZnRlciBlYWNoIGZ1bmN0aW9uLiAgVGRlc2Mgc3RydWN0dXJlIHZlcnNpb25zIDEtNCBhcmUKKwlzdXBwb3J0ZWQuCisKKwkqIGk4NjB2NC5oIChBU01fRklMRV9FTkQpIFtPVVRQVVRfVERFU0NdOiBPdXRwdXQgYSBudWxsIHRkZXNjIGVudHJ5CisJYWZ0ZXIgdGhlIGxhc3QgZnVuY3Rpb24gaW4gYSBmaWxlLgorCitGcmkgSnVuICA1IDE5OjAzOjIyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29sbGVjdDIuYyAobWFpbiwgc2Nhbl9wcm9nX2ZpbGUpOiBVc2UgYmNvcHksIG5vdCBtZW1jcHkuCisKK0ZyaSBKdW4gIDUgMTY6Mjc6MTggMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCwgbWlwcy5jLCBtaXBzLm1kOiBVbmRvIEp1bmUgMyBjaGFuZ2VzLgorCisJKiBtaXBzLW41LmgsIG1pcHMtc3lzdi5oIChnZXRwYWdlc2l6ZSk6IElmIF9TQ19QQUdFX1NJWkUgaXMgdW5kZWZpbmVkLAorCXVzZSBOQlBDIGRlZmluZWQgaW4gc3lzL3R5cGVzLmguCisKK1RodSBKdW4gIDQgMTQ6MzY6NDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoZGVsZXRlX2RlYWRfZnJvbV9jc2UpOiBEb24ndCBkZWxldGUgYW55dGhpbmcgaW5zaWRlIGEgbGliY2FsbC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtbGliZ2NjKTogRGVwZW5kIG9uIGluc3RhbGwtZGlyLgorCisJKiBjLWxleC5jICh5eWxleCk6IFN1cHByZXNzIGludCBvdXQgb2YgcmFuZ2Ugd2FybmluZyBpZiAtdHJhZGl0aW9uYWwuCisKK1RodSBKdW4gIDQgMjM6MzQ6MDUgMTk5MiAgSG93YXJkIENodSAgKGh5Y0BoYW5hdW1hLmpwbC5uYXNhLmdvdikKKworCSogZngyODAwLmggKERCWF9PVVRQVVRfRU5VTSk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50LCBhZGQgYQorCW1pc3Npbmcgc2VtaS1jb2xvbi4KKwkoQVNNX09VVFBVVF9ET1VCTEUpOiB1bmRlZiBkZWZpbml0aW9uIGZyb20gaTg2MHY0LmgsIHJlcGxhY2UKKwl3aXRoIGRlZmluaXRpb24gdXNlZCBpbiBpODYwLmguCisJKEFTTV9PVVRQVVRfRkxPQVQpOiBzYW1lIGFzIGFib3ZlCisJQWxzbyB1bmRlZiBNRF9FWEVDX1BSRUZJWCB3aGljaCBpcyBkZWZpbmVkIGluIGk4NjB2NC5oLgorCUFsc28gZGVmaW5lIEk4NjBfU1RSSUNUX0FCSV9QUk9MT0dVRVMgZm9yIEFCSS1jb21wbGlhbnQgZnVuY3Rpb24KKwlwcm9sb2d1ZXMuCisKK1RodSBKdW4gIDQgMTM6MTU6MzAgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBlbnF1aXJlLmMgKGZha2VfZl9yZXApOiBVc2UgX19leHRlbnNpb25fXyB0byBhdm9pZCBwZWRhbnRpYyB3YXJuaW5ncy4KKworCSogY3NlLmMgKGNzZV9wcm9jZXNzX25vdGVzKTogRG9uJ3Qgc3RpY2sgVk9JRG1vZGUgaW50byAqX2V4dHJhY3QuCisKKwkqIGMtZGVjbC5jIChnZXRfcGFybV9pbmZvKTogRm9yIGZvcndhcmQgcGFybSBkZWNscywgY2hlY2sgZm9yCisJbm9uLXBhcm0gYmVmb3JlIGNoZWNraW5nIFRSRUVfQVNNX1dSSVRURU4uCisKK1RodSBKdW4gIDQgMTM6NTc6NDcgMTk5MiAgVGltIE1vb3JlICAobW9vcmUgYXQgZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKHJlZ19jbGFzcywgUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMpOiBEZWxldGUKKwlGUF9PUl9TTkFLRV9GUF9SRUdTICh1c2VsZXNzKSwgYWRkIEdFTkVSQUxfT1JfRlBfUkVHUywKKwlHRU5FUkFMX09SX1NOQUtFX0ZQX1JFR1MuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBIYW5kbGUgREltb2RlIGFyZ3VtZW50cyBjb3JyZWN0bHkuCisJKFBST0ZJTEVfQkVGT1JFX1BST0xPR1VFLCBGVU5DVElPTl9QUk9GSUxFUik6IERvIHRoZSBzYW1lIHRoaW5nCisJZm9yIEJTRCBhbmQgSFBVWC4KKwkKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IERvIHByb2ZpbGluZyByaWdodCAoY29tcGF0aWJsZQorCXdpdGggSFBVWCkuCisJKG91dHB1dF9hcmdfZGVzY3JpcHRvcik6IEhhbmRsZSBESW1vZGUgYXJndW1lbnQgcmVnaXN0ZXJzLgorCitUaHUgSnVuICA0IDEzOjQ4OjI0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKyAgICAgICAgKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvdW50IHJlbG9hZCByZWdpc3RlciB1c2VkIGJ5IGNhbGxlci1zYXZlCisgICAgICAgIGhhbmRsaW5nIGluIGFueSBiYXNpYyBibG9jayB0aGF0IGNvbnRhaW5zIGEgQ0FMTF9JTlNOLgorCitUaHUgSnVuICA0IDA5OjIzOjE5IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogaTg2MHY0LmggKEFTTV9PVVRQVVRfRE9VQkxFLCBBU01fT1VUUFVUX0ZMT0FUKTogIFJlbW92ZSBsZWFkaW5nIDByLgorCShBU01fT1VUUFVUX0ZMT0FUKTogIFVzZSAuZmxvYXQgKG5vdCAuc2luZ2xlKS4KKworRnJpIEp1biAgNSAxNDo1ODo0MyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBweXIuaCAoUkVHTk9fT0tfRk9SX3tJTkRFWCxCQVNFfSk6IENvcnJlY3RseSB0ZXN0IHJlZ19yZW51bWJlci4KKwkqIGNvbmZpZ3VyZSAocHlyYW1pZCk6IFR1cm4gaXQgYmFjayBvbi4KKworVGh1IEp1biAgNCAxMToyNjo1NSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcGEuYyAob3V0cHV0X21vdmVfZG91YmxlKTogSGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzIGJldHdlZW4KKwlyZWdpc3RlcnMuCisKK1dlZCBKdW4gIDMgMjI6MDg6MTggMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIE5PUF9FWFBSIGNhc2UpOiBEb24ndCBkcm9wIGludGVybWVkaWF0ZSBpbgorCSh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBzaG9ydCkgY2hhci12YXJpYWJsZS4KKworV2VkIEp1biAgMyAxMToxODo0MyAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIHN0ZGFyZy5oICh2YV9hcmcpOiAgVXNlIGNhc3RzIHRvIGF2b2lkIGRvaW5nIChwZWRhbnRpY2FsbHkgaW52YWxpZCkKKwlhcml0aG1ldGljIG9uIGB2b2lkIConIHZhbHVlcyB3aGVuIF9fc3ZyNF9fIGlzIGRlZmluZWQuCisKK1dlZCBKdW4gIDMgMTc6NTE6MjEgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHpldnMuc2ljcy5zZSkKKworCSogbG9uZ2xvbmcuaCAoc3BhcmMpOiBUZXN0IHN5bWJvbCBfX3NwYXJjdjhfXyBmb3Igc3BhcmMuaCBjb25mb3JtYW5jZS4KKworV2VkIEp1biAgMyAxNjoyMjozOCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmMgKHByaW50X29wZXJhbmQpOiBDb3JyZWN0IHR5cG8uCisJKHNwYXJjX3R5cGVfY29kZSk6IENvcnJlY3RseSBoYW5kbGUgQyBpbnQgYW5kIGZsb2F0IHR5cGVzLgorCisJKiBzcGFyYy5oIChDT05TVEFOVF9BTElHTk1FTlQpOiBBbGlnbiBzdHJpbmdzIHRvIDggYnl0ZSBib3VuZGFyeS4KKwkoREFUQV9BTElHTk1FTlQpOiBMaWtld2lzZSBmb3IgY2hhcmFjdGVyIGFycmF5cy4KKworCSogaTk2MC5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IEZpeGVkIGNhbGN1bGF0aW9uIG9mIG9mZnNldHMgZm9yCisJY29tcGlsZXIncyByZWdpc3RlciBzYXZlIGFyZWEuCisKKwkqIHNwYXJjLm1kIChtdWxzaTMsbXVsc2lkaTMsdW11bHNpZGkzLGRpdnNpMyx1ZGl2c2kzKTogUGF0dGVybnMKKwlhZGRlZCB0byBzdXBwb3J0IFY4IHNwYXJjIGFyY2hpdGVjdHVyZXMuCisJKiBzcGFyYy5oIChUQVJHRVRfREVGQVVMVFMpOiBBZGQgLW12OCBhbmQgLW1zcGFyY2xpdGUgb3B0aW9ucy4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBJZiBjYW4ndCBzYXRpc2Z5IHJlbG9hZCBmb3IgYSBncm91cCBvZiBtb3JlCisJdGhhbiB0d28gcmVnaXN0ZXJzLCB0aGVuIGFib3J0IHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AuCisJKGNvdW50X3Bvc3NpYmxlX2dyb3Vwcyk6IFNraXAgdG8gbGFzdCByZWcgb2YgZ3JvdXAsIG5vdCBmaXJzdCByZWcKKwlvZiBuZXh0IGdyb3VwLgorCitXZWQgSnVuICAzIDE0OjM1OjAwIDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBnZW4tcnR4KQorCisJKiBjLWxleC5jICh5eWxleCk6IExldCBza2lwX3doaXRlX3NwYWNlIGhhbmRsZSBcci4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgZnNxcnQgY2FzZSk6IFN0YWJpbGl6ZSB0aGUgYXJndW1lbnQgaW4KKwljYXNlIGEgbGlicmFyeSBjYWxsIGlzIGRvbmUuCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IEZ1bmN0aW9uIGJlZ2luLCBhbmQgYmxvY2sgYmVnaW4vZW5kCisJbm90ZXMgYXJlICJyZWFsIiBpbiB0aGF0IHRoZXkgZGVwZW5kIG9uIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorCitXZWQgSnVuICAzIDE0OjM0OjI4IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChhbmRzaTNfaW50ZXJuYWwyKTogRml4IHR5cG8gaW4gcHJldmlvdXMgY2hhbmdlLCB0bworCXVzZSAlMywgdGhlIGNsb2JiZXJlZCByZWdpc3RlciwgaW5zdGVhZCBvZiAlQCwgdGhlIGFzc2VtYmxlcgorCXRlbXBvcmFyeS4KKwkoaW9yc2kzX2ludGVybmFsMik6IERpdHRvLgorCSh4b3JzaTNfaW50ZXJuYWwyKTogRGl0dG8uCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBNZWlzc25lciB2ZXJzaW9uICMgdG8gMjAuCisJKGZpbmFsX3ByZXNjYW5faW5zbik6IEFkZCBkZWNsYXJhdGlvbi4KKwkobHVpX2ludCk6IEFkZCBkZWNsYXJhdGlvbi4KKwkoRklOQUxfUFJFU0NBTl9JTlNOKTogSnVzdCBjYWxsIGZpbmFsX3ByZXNjYW5faW5zbi4KKworCSogbWlwcy5jIChsdWlfaW50KTogTmV3IGZ1bmN0aW9uLCByZXR1cm4gdHJ1ZSBpZiB2YWx1ZSBmaXRzIGluIGEKKwlMVUkgaW5zdHJ1Y3Rpb24uCisJKGZpbmFsX3ByZXNjYW5faW5zbik6IE1vdmUgdGhlIGNoZWNraW5nIGZvciBmaWxsaW5nIHRoZSBkZWxheQorCXNsb3RzIGhlcmUgZnJvbSB0aGUgRklOQUxfUFJFU0NBTl9JTlNOIG1hY3JvLiAgSWYgdGhlIHNhZmUKKwlhdHRyaWJ1dGUgaXMgc2V0LCB3ZSBkbyBub3QgbmVlZCBhIE5PUCB0byBmaWxsIGEgbG9hZCBkZWxheSBzbG90LgorCisJKiBtaXBzLm1kIChzYWZlIGF0dHJpYnV0ZSk6IE5ldyBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKwljdXJyZW50IGluc24gaXMgc2FmZSB0byBmaWxsIGEgZGVsYXkgc2xvdCBldmVuIGlmIHRoZSByZWdpc3RlcgorCW9wZXJhbmQocykgYXJlIHNldCBpbiB0aGUgbG9hZCBpbnN0cnVjdGlvbiB3aGljaCBoYXMgdGhlIGRlbGF5CisJc2xvdC4gIFRoaXMgaXMgZm9yIGFuZC9pb3IveG9yIGV4cGFuc2lvbnMgdGhhdCBoYXZlIGEgbGFyZ2UKKwljb25zdGFudCBpbnRlZ2VyIGFzIG9wZXJhbmRbMl0uICBUaGUgbG9hZCBvZiB0aGUgY29uc3RhbnQgY2FuCisJb3ZlcmxhcCB0aGUgbG9hZC4KKwkoYW5kc2kzLCBpb3JzaTMsIHhvcnNpMyk6IFJlcGxhY2UgbG9naWNhbCBkZWZpbmVfaW5zbidzIHdpdGgKKwlkZWZpbmVfZXhwYW5kJ3MgdGhhdCBlaXRoZXIgbWFwIGRpcmVjdGx5IHRvIHRoZSBoYXJkd2FyZQorCWluc3RydWN0aW9uLCBvciBoYXZlIGEgY2xvYmJlcmVkIHJlZ2lzdGVyIHRvIGxvYWQgdGhlIGxhcmdlCisJY29uc3RhbnQgaW50by4gIFRoaXMgaXMgaW5zdGVhZCBvZiB1c2luZyAkMSB0byBob2xkIHRoZQorCWludGVybWVpZGF0ZSB2YWx1ZS4gIFNldCB0aGUgc2FmZSBhdHRyaWJ1dGUgdG8geWVzIGZvciB0aGUgY2FzZXMKKwl3aGVyZSB3ZSBuZWVkIHRvIGxvYWQgdGhlIGludGVnZXIuICBBZGQgZGVmaW5lX3NwbGl0J3MgdG8gYnJlYWsKKwl0aGUgbGFyZ2UgbG9naWNhbCBvcGVyYXRpb25zIGludG8gdGhlIHNlcGFyYXRlIHBpZWNlcy4KKworV2VkIEp1biAgMyAwMDowMDozNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoZG9fd2FybmluZyk6IERvIGp1c3QgYSB3YXJuaW5nLCBub3QgYW4gZXJyb3IuCisKK1R1ZSBKdW4gIDIgMTc6MzA6MDkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoY3NlX2Jhc2ljX2Jsb2NrKTogV2hlbiBhIGp1bXAgYmVjb21lcyB1bmNvbmRpdGlvbmFsLCAKKwljaGVjayB3aGV0aGVyIHRoaXMgY2F1c2VkIFRPIHRvIGJlIGRlbGV0ZWQuCisKK1R1ZSBKdW4gIDIgMTY6MTE6NDIgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworICAgICAgICAqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgSUZfVEhFTl9FTFNFKTogRG9uJ3QgdHJ5IHJldmVyc2luZworICAgICAgICBzb21ldGhpbmcgdGhhdCBpc24ndCBhIGNvbXBhcmlzb24uCisKK1R1ZSBKdW4gIDIgMTY6NTA6NDcgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjY2NwLmMgKGRvX3ByYWdtYSk6IERvbid0IHdhcm4gYWJvdXQgI3ByYWdtYSBvbmNlIGlmIHVzZWQgaW4gYQorCXN5c3RlbSBoZWFkZXIgZmlsZS4KKworVHVlIEp1biAgMiAxNToyMTowNyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIE1laXNzbmVyIHZlcnNpb24gIyB0byAxOS4KKwkoQVNNX09VVFBVVF9ET1VCTEUpOiBDYWxsIG1pcHNfb3V0cHV0X2RvdWJsZS4KKwkoQVNNX09VVFBVVF9GTE9BVCk6IENhbGwgbWlwc19vdXRwdXRfZmxvYXQuCisKKwkqIG1pcHMuYyAobWlwc19vdXRwdXRfZG91YmxlKTogSWYgUkVBTF9WQUxVRV9UT19UQVJHRVRfRE9VQkxFIGlzCisJZGVmaW5lZCwgdXNlIGl0IHRvIHNwbGl0IHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIDIgbG9uZworCWludGVnZXJzLCBhbmQgcHJpbnQgdGhlbSBvdXQgaW4gaGV4LiAgT3RoZXJ3aXNlIHVzZSAuZG91YmxlLgorCShtaXBzX291dHB1dF9mbG9hdCk6IElmIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0ZMT0FUIGlzIGRlZmluZWQsIHVzZQorCWl0IHRvIHNwbGl0IHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIGEgbG9uZyBpbnRlZ2VyLCBhbmQKKwlwcmludCBpbiBvdXQgaW4gaGV4LiAgT3RoZXJ3aXNlIHVzZSAuZmxvYXQuCisKKwkqIGRlYy1vc2YxLmggKG5ldyBmaWxlKTogQ29uZmlnIGZpbGUgZm9yIERFQydzIG9mZmljYWwgT1NGLzEKKwlwcm9kdWN0IChhcyBvcHBvc2VkIHRvIHRoZSBPU0YvMSByZWZlcmVuY2UgcG9ydCBmcm9tIE9TRikuCisKKwkqIGNvbmZpZ3VyZTogU3VwcG9ydCBtaXBzLWRlYy1vc2YxIHRhcmdldC4KKwkqIGNvbmZpZy5zdWI6IFN1cHBvcnQgbWlwcy1kZWMtb3NmMSB0YXJnZXQuCisKKwkqIGRlY3N0YXRuLmggKENQUF9QUkVERUZJTkVTKTogSWYgQ1BQX1BSRURFRklORVMgaXMgZGVmaW5lZCwgZG9uJ3QKKwlzdXBwbHkgYW5vdGhlciBkZWZpbml0aW9uLiAgQWxzbywgZGVmaW5lIF9TWVNUWVBFX0JTRC4KKworTW9uIEp1biAgMSAwMDowNDowMSAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGdzdGRhcmcuaCAodmFfbGlzdCkgW19fc3ZyNF9fXTogIFR5cGVkZWYgaXQgdG8gYHZvaWQgKicuCisJKiB2YS1zcGFyYy5oIChfX3ZhX19fbGlzdCkgW19fc3ZyNF9fXTogIFR5cGVkZWYgdGhpcyBhcyBgdm9pZCAqJy4KKworU3VuIE1heSAzMSAxNToyNjozMiAxOTkyICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBY2hhdGVzLm1pdC5lZHUpCisKKwkqIGNhbGxzLmMgKHN0YWNrX2FyZ191bmRlcl9jb25zdHJ1Y3Rpb24pOiBOZXcgdmFyaWFibGUuCisJKHN0b3JlX29uZV9hcmcpOiBTZXQgc3RhY2tfYXJnX3VuZGVyX2NvbnN0cnVjdGlvbiBiZWZvcmUgY2FsbGluZworCWV4cGFuZF9leHByIGlmIGV4cGFuZF9leHByIG1pZ2h0IGNhbGwgYSBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplCisJYSBzdGFjayBhcmd1bWVudC4KKwkoZXhwYW5kX2NhbGwpOiBQdXNoIHRoZSBzdGFjayBhcm91bmQgZnVuY3Rpb24gY2FsbHMgaWYKKwlzdGFja19hcmdfdW5kZXJfY29uc3RydWN0aW9uIGlzIG5vbnplcm8uCisJQWxzbyBjb3B5IHN0cnVjdHVyZV92YWx1ZV9hZGRyIGluIHRoYXQgY2FzZS4KKwlQdXNoIHRoZSBzdGFjayBhcm91bmQgYW4gaW5saW5lIGZ1bmN0aW9uIGlmIGl0IG1ha2VzIGNhbGxzCisJYW5kIHRoZXJlIGFyZSBvdXRnb2luZyBhcmd1bWVudHMgb24gdGhlIHN0YWNrIHdoaWNoIG11c3QgYmUgcHJlc2VydmVkLgorCU1vdmUgdGhlIGNhbGwgdG8gZXhwYW5kX2NsZWFudXBzX3RvIGJlZm9yZSB0aGF0LgorCURvIHRoaXMgc3RhY2sgYWRqdXN0bWVudCBiZWZvcmUgY29tcHV0aW5nIGFyZ3VtZW50IGxvY2F0aW9ucy4KKworU3VuIE1heSAzMSAwMTowMzo1MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogVGVzdCBERUNMX0lHTk9SRURfUCBvbmx5IGZvcgorCXZhcmlhYmxlcyBhbmQgdHlwZXMuCisJKiBkd2FyZm91dC5jIChvdXRwdXRfZGVjbCk6IE5ldmVyIGlnbm9yZSBhIEZVTkNUSU9OX0RFQ0wKKwlldmVuIGlmIERFQ0xfSUdOT1JFRF9QIGlzIHNldC4KKworU2F0IE1heSAzMCAwNzowNzo1NSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuaCwgcm9tcC5oIChGVU5DVElPTl9BUkcpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworCSogY29tYmluZS5jIChzdWJzdCwgc2lnbmlmaWNhbnRfYml0cywgc2ltcGxpZnlfY29tcGFyaXNvbik6CisJT25seSBsb29rIGF0IFNUT1JFX0ZMQUdfVkFMVUUgaWYgY29tcGFyaXNvbiByZXN1bHQgaXMgaW50ZWdlci4KKworRnJpIE1heSAyOSAxODowNDo0NSAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworICAgICAgICAqIGR3YXJmb3V0LmMgKG91dHB1dF9kZWNsKTogIE1vdmVkIHRlc3QgZm9yIEVSUk9SX01BUksgbm9kZSBvdXQgb2YKKwlzd2l0Y2ggc3RhdGVtZW50IGFuZCBhZGRlZCBhIHRlc3QgZm9yIERFQ0xfSUdOT1JFRF9QIGFmdGVyIHRoYXQuCisgICAgICAgIChkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wpOiAgQ2hlY2sgaW5wdXQgbm9kZSB0byBzZWUgaWYgaXQgaXMgYW4KKyAgICAgICAgRVJST1JfTUFSSyBiZWZvcmUgY2hlY2tpbmcgZm9yIERFQ0xfSUdOT1JFRF9QLiAgQWxzbyBtYWtlcyBzdXJlIHRoYXQKKyAgICAgICAgYW55IG5vZGUgbWFya2VkIGFzIERFQ0xfSUdOT1JFRF9QIGlzbid0IGFsc28gYSBmdW5jdGlvbiBkZWZpbml0aW9uLgorCitGcmkgTWF5IDI5IDE0OjQ2OjA2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOgorCURvbid0IGRpc2NhcmQgc2V0dGluZyByZXR1cm4gdmFsdWUgZnJvbSBhIHZvbGF0aWxlIHNvdXJjZS4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSWYgdHJhZGl0aW9uYWwsIHN0cmxlbiByZXR1cm5zIGludC4KKwkoc2l6ZXRfZnR5cGVfc3RyaW5nKTogRGVsZXRlZC4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgZnNxcnQgY2FzZSk6IFJldHVybiBwcm9wZXIgbW9kZSBpZiBhcmcgZXJyb3IuCisKK0ZyaSBNYXkgMjkgMTM6MzY6MzIgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuYyAobTg4a19idWlsdGluX3NhdmVyZWdzKTogRG9uJ3QgY29weSByZXN1bHQgdG8gYSByZWdpc3Rlci4KKworCSogbTg4ay5oIChGSVhFRF9SRUdJU1RFUlMpOiBBbGxvdyB1c2Ugb2YgcjEuCisJKFJFR19MRUFGX0FMTE9DX09SREVSKTogQ2hvb3NlIHIxIGxhc3QuCisJKFJFR19BTExPQ19PUkRFUik6IENob29zZSByMSBiZWZvcmUgYW55IHByZXNlcnZlIHJlZ2lzdGVyLgorCShPUkRFUl9SRUdTX0ZPUl9MT0NBTF9BTExPQyk6IFN3aXRjaCBiZXR3ZWVuIG9yZGVyaW5ncy4KKwkqIG04OGsuYyAobTg4a19sYXlvdXRfZnJhbWUpOiBTYXZlIHIzMCB3aGVuIHVzZWQgYXMgYW4gb3JkaW5hcnkKKwlyZWdpc3Rlci4KKworCSogbTg4ay5oIChDSEVDS19GTE9BVF9WQUxVRSk6IERlbGV0ZSwgbm90IG5lZWRlZC4KKwkqIG04OGsuYyAoY2hlY2tfZmxvYXRfdmFsdWUpOiBEZWxldGUsIG5vdCBuZWVkZWQuCisKKwkqIG04OGsuYyAobW9zdGx5X2ZhbHNlX2p1bXApOiBGaXggcmV0dXJuIGNoZWNrLgorCisJKiBtODhrLm1kIChtc3RvcmUgdHlwZSk6IERlbGV0ZS4KKwkocmV0dXJuLCBpbmRpcmVjdF9qdW1wKTogVGhlc2UgYXJlIGp1bXBzLCBub3QgYnJhbmNoZXMuCisJKiBtODhrLmMgKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IE5vIFRZUEVfTVNUT1JFIGluc25zLgorCitGcmkgTWF5IDI5IDEyOjMzOjIxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEFkZCBtaXNzaW5nIGFyZyB0byBnZW5faW5wdXRfcmVsb2FkLgorCitGcmkgTWF5IDI5IDA2OjQzOjE1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oLCByb21wLmggKEZVTkNUSU9OX0FSRyk6IERvbid0IHB1dCB2YXJpYWJsZS1zaXplZAorCW9wZXJhbmRzIGluIHJlZ2lzdGVycy4KKworCSogZXhwbG93LmMgKGVtaXRfc3RhY2tfe3NhdmUscmVzdG9yZX0pOiBEb24ndCBjYWxsIHZhbGlkaXplX21lbQorCW9uIGEgbnVsbCBydHguCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IGNhbGwgY2Fub25fcmVnIG9uIGVudHJ5IGZyb20KKwloYXNoIHRhYmxlOyBpbnN0ZWFkLCBjYWxsIGl0IGFmdGVyIHdlIGRpZCB0aGUgc3Vic3RpdHV0aW9uLgorCitUaHUgTWF5IDI4IDE4OjQ3OjAwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKG1hbGxvYy5oKTogQWxsb3cgc3BhY2Ugb3IgdGFiIGJ0d24gdHlwZWRlZiBhbmQgY2hhci4KKworVGh1IE1heSAyOCAxNzozNTozNyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBQcm9wZXJseSBkaXNhYmxlIG9wdGlvbmFsIHJlbG9hZAorCXRoYXQgd2UgY2FuJ3QgZG8uCisJRG9uJ3QgYWJvcnQgaWYgZGlzYWJsZWQgcmVsb2FkIHVzZXMgYSByZWdpc3RlciB3ZSBkb24ndCBoYXZlLgorCitUaHUgTWF5IDI4IDE0OjQzOjAxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbmV4dC5jIChnZXRfZGlyZWN0aXZlX2xpbmUpOiBEZWNsYXJlIGl0LgorCisJKiBkZWZhdWx0cy5oIChBU01fT1VUUFVUX0FTQ0lJKTogVXNlIHVuc2lnbmVkIGNoYXJzLgorCisJKiBpODYwdjQuaCwgaTM4NnY0LmgsIHNwYXJjdjQuaAkoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9ET1VCTEUpOgorCVVzZSB0aGUgb3ZlcnJpZGUgZGVmaW5pdGlvbnMgb25seSBpZiB3b3JkIG9yZGVyIG1hdGNoZXMgaG9zdC4KKworV2VkIE1heSAyNyAxNzozMjozNiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IFdoZW4gY29tcGxldGVseSB1bnJvbGxpbmcgbG9vcCwKKwlwcmVjb21wdXRlIGdpdiB2YWx1ZSBpbnRvIGEgcmVnIGJlZm9yZSBsb29wIGlmIGl0IGlzIGNvbXBsZXguCisKKwkqIHNwYXJjLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogSGFuZGxlIFNGbW9kZSBDT05TVF9ET1VCTEUuCisJKiBzcGFyYy5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogRG9uJ3QgYWxsb3cgcmVsb2FkcyBvZgorCWNvbnN0YW50cyB0byBGUCByZWdpc3RlcnMsIG5vciByZWxvYWRzIG9mIEZQIGNvbnN0YW50cyB0aGF0IHdvbid0CisJbWF0Y2ggdGhlICdFJyBjb25zdHJhaW50LgorCSogc3BhcmMubWQgKG1vdnNmLTEpOiBBZGQgcGF0dGVybiB0byBlZmZpY2llbnRseSBoYW5kbGUgU0Ztb2RlCisJY29uc3RhbnRzLgorCisJKiBzcGFyYy5tZCAobG9fc3VtOkRJIHBhdHRlcm4pOiBVc2UgY29uc3RyYWludCAiMCIgZm9yIG9wZXJhbmQgMS4KKworCSogaTk2MC5oIChPVkVSUklERV9PUFRJT05TKTogRGlzYWJsZSBmdW5jdGlvbiBpbmxpbmluZy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogV2hlbiBNQVlCRV9SRUdfUEFSTV9TVEFDS19TUEFDRSwKKwlkb24ndCBhc3N1bWUgdGhhdCByZWdpc3RlciBwYXJhbWV0ZXJzIGFscmVhZHkgaGF2ZSBhIHN0YWNrIHNsb3QuCisJKiBpOTYwICgqKTogQ2hhbmdlIGFsbCB0ZXN0cyBvZiBjdXJyZW50X2Z1bmN0aW9uc19hcmdzX3NpemUgZnJvbQorCTQ4IHRvIDAgZHVlIHRvIGFib3ZlIGNoYW5nZS4KKwkqIGk5NjAubWQgKCopOiBMaWtld2lzZS4KKworCSogc3BhcmMuaCAoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogQWRkIGlmZGVmZWQgb3V0IGRlZmluaXRpb24uCisJKEZJWEVEX1JFR0lTVEVSUyk6IGc0IGlzIG5vdCBhIGZpeGVkIHJlZ2lzdGVyLgorCShSRVRVUk5fSU5fTUVNT1JZKTogRGVmaW5lLgorCShGVU5DVElPTl9BUkdfUEFTU19CWV9SRUZFUkVOQ0UpOiBBbHNvIHBhc3MgVEZtb2RlIGJ5IHJlZmVyZW5jZS4KKworCSogZml4aW5jbHVkZXM6IEZpeCBzdGRpby5oIGFuZCBtYXRoLmggZm9yIFVsdHJpeCA0LjAuCisKK1R1ZSBNYXkgMjYgMTU6Mjk6MjEgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3Mud2lkZW5lci5lZHUpCisKKwkqIHgtd2UzMms6IG5ldyBmaWxlLCBuZWVkIGFsbG9jYS5vCisJKiB4bS13ZTMyay5oIFtOT19TWVNfU0lHTElTVF06IGRlZmluZSB0aGlzCisJKiB3ZTMyay5oIFtTVFJJQ1RfQUxJR05NRU5UXSBkZWZpbmUgYXMgYDEnCisJW05PX1dBSVRfSF06IGFsc28gZGVmaW5lIHRoaXMKKwkqIGNvbGxlY3QyLmMgW05PX1dBSVRfSF06IGRvbid0IGluY2x1ZGUgc3lzL3dhaXQuaCBpZiB0aGlzIGlzCisJZGVmaW5lZC4KKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogcm0gbGliZ2NjMS5udWxsLgorCitXZWQgTWF5IDI3IDE1OjM2OjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUpOiBUZXN0IEhPU1RfQklUU19QRVJfV09SRCByaWdodC4KKworCSogaTM4NnNjby5oIChTSVpFX1RZUEUpOiBOZXcgZGVmaW5pdGlvbi4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogV2hlbiBzaG9ydGVuaW5nLCBoYW5kbGUgY2FzZQorCXdoZXJlIG9wMCBhbmQgYXJnMCBhcmUgZGlmZmVyZW50IGJ1dCBoYXZlIHNhbWUgd2lkdGguICBvcDEvYXJnMSB0b28uCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYXN0IHhtYWxsb2Mgd2hlbiBhcmcgdG8gc2V0dmJ1Zi4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBDbGVhciBjYW5fY2xvYmJlcl9vcDAgaWYgZG9pbmcgbW9kLgorCisJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUuMSwgdW5wcm90b2l6ZS4xKTogRGVsZXRlIHRhcmdldCBiZWZvcmUgbXYnaW5nLgorCShtb3N0bHljbGVhbik6IERlbGV0ZSB0bXAtdW5wcm90by4xLgorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCwgc2Rib3V0X3RvcGxldmVsX2RhdGEpOiBUZXN0IERFQ0xfSUdOT1JFRF9QLgorCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsKTogTGlrZXdpc2UuCisKK1dlZCBNYXkgMjcgMTM6NDg6MzYgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChhc2hsZGkzLGFzaHJkaTMsbHNocmRpMyk6IEZpeCB0eXBvIGluIGNvbXBhcmlzb24uCisKK1dlZCBNYXkgMjcgMDI6MTE6MjIgMTk5MiBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogaTM4NnY0LmgsIGk4NjB2NC5oLCBzcGFyY3Y0Lmg6IEluY2x1ZGUgcmVhbC5oLgorCShBU01fT1VUUFVUX0ZMT0FULCBBU01fT1VUUFVUX0RPVUJMRSk6CisJTmV3IGRlZmluaXRpb25zLCBpZiBob3N0IGFuZCB0YXJnZXQgZm9ybWF0cyBtYXRjaC4KKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUsIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRSk6CisJRGVmaW5lZCwgYnV0IG9ubHkgaWYgaG9zdCBhbmQgdGFyZ2V0IGZvcm1hdHMgbWF0Y2guCisKK1dlZCBNYXkgMjcgMDY6MjA6MjYgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogRm9yIGFzbSBpbnNuLCBjaGVjayBhbGwgcmVsb2FkCisJaW5zbnMgZm9yIHZhbGlkaXR5LgorCShlbWl0X3JlbG9hZF9pbnNucywgZ2VuX2lucHV0X3JlbG9hZCk6IFJlbW92ZSBwcmV2aW91cyBjaGFuZ2UgdGhhdAorCWNoZWNrZWQgdGhlbSBoZXJlLgorCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdtJywgJ28nLCAnZycpOiBBY2NlcHQgcHNldWRvIGlmCisJcmVsb2FkIGlzIGluIHByb2dyZXNzLgorCitUdWUgTWF5IDI2IDE5OjI0OjIxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoY29tYmluYWJsZV9pM3BhdCk6IEFsbG93IGEgaGFyZCByZWdpc3RlciBhcyB0aGUKKwlkZXN0aW5hdGlvbiBldmVuIGlmIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMgaWYgc291cmNlIGlzIGEgQ0FMTC4KKworCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogRml4IGhhbmRsaW5nIG9mIGludC0+ZmxvYXQKKwl1bmlvbiBjb252ZXJzaW9ucy4KKworVHVlIE1heSAyNiAxOToyMzo0MyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGEyOWsuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRG9uJ3QgbGV0IGFueXRoaW5nIGxhcmdlciB0aGFuCisJVU5JVFNfUEVSX1dPUkQgYmUgYWxsb2NhdGVkIHRvIGFuIG9kZCBudW1iZXJlZCByZWdpc3Rlci4KKworVHVlIE1heSAyNiAxNToyMjoyNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWIgKGRlZmF1bHRpbmcgdGhlIE9TKTogU2VwYXJhdGUgc3VidmVyc2lvbnMgd2l0aCBwZXJpb2RzLgorCisJKiBsaW1pdHMuaDogRml4IGNvbmRpdGlvbiBmb3IgZGVmaW5pbmcgbG9uZy1sb25nIG1hY3JvcywgdG8gc3VpdCBsaWJjLgorCisJKiBNYWtlZmlsZS5pbiAoc3BlY3MpOiBOZXcgdGFyZ2V0LgorCShnY2MpOiBEb24ndCB3cml0ZSBgc3BlY3MnIGhlcmUuCisJKHN0YXJ0LmVuY2FwKTogRGVwZW5kIG9uIGBzcGVjcycuCisJKGFsbC5jcm9zcyk6IERlcGVuZCBvbiBFWFRSQV9QQVJUUy4KKwkocmVzdC5jcm9zcyk6IE5ldyB0YXJnZXQuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6CisJU2V0IFRSRUVfVVNFRCwgbm90IFRSRUVfTk9fVU5VU0VEX1dBUk5JTkcuCisKK1R1ZSBNYXkgMjYgMDQ6NTI6NTMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGxvb3AuYyAobG9vcF9oYXNfdm9sYXRpbGUpOiBOZXcgc3RhdGljIHZhcmlhYmxlIHRvIHJlY29yZAorCXdoZXRoZXIgdGhlIGxvb3AgaGFzIGFueSB2b2xhdGlsZSByZWZlcmVuY2VzIGluIGl0LgorCShwcmVzY2FuX2xvb3ApOiBTZXQgbG9vcF9oYXNfdm9sYXRpbGUuCisJKGNoZWNrX2RicmFfbG9vcCk6IERvbid0IHJldmVyc2UgbG9vcCBpZiB0aGVyZSBhcmUgYW55IHZvbGF0aWxlCisJcmVmZXJlbmNlcyBpbiBpdC4KKworTW9uIE1heSAyNSAxNjowNDowOCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODZnYXMuaCAoQVNNX09VVFBVVF9PUENPREUpOiBUcmFuc2xhdGUgInJlcG56IiB0byAicmVwbmUiLgorCSogc2VxMzg2Z2FzLmggKEFTTV9PVVRQVVRfT1BDT0RFKTogTGlrZXdpc2UuCisKK01vbiBNYXkgMjUgMTU6NTM6MzEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZW1pdF9pbmRpcmVjdF9qdW1wKTogRW1pdCBiYXJyaWVyIGhlcmUuCisJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogTm90IGhlcmUuCisKK01vbiBNYXkgMjUgMDY6MjI6NTkgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNhbm9uX3JlZyk6IE11c3QgY2FsbCB2YWxpZGF0ZV9jaGFuZ2UgaWYgaW5zbiBoYXMgYW55CQorCU1BVENIX0RVUHMgZXZlbiBpZiByZXBsYWNpbmcgYSBwc2V1ZG8gd2l0aCBhbm90aGVyIHBzZXVkby4KKworCSogZXhwbG93LmMgKGVtaXRfc3RhY2tfe3NhdmUscmVzdG9yZSl9OiBDYWxsIHZhbGlkaXplX21lbSBvbiBzYXZlIGFyZWEuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QsIGNhc2UgUExVUyk6IFNpbXBsaWZ5IGNhc2VzIHdoZXJlCisJdGhlIFBMVVMgaXMganVzdCB0dXJuaW5nIG9uIGJpdHMgdGhhdCB3aWxsIGJlIHNoaWZ0ZWQgb3V0LgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBBZGQgbmV3IGNhc2UgZm9yIHNpbmdsZS13b3JkCisJZmxvYXQtPmludGVnZXIgY29udmVyc2lvbjsgYWxsIG90aGVycyBhbHJlYWR5IHByZXNlbnQuCisJQ2hlY2sgZm9yIC1mcHJldGVuZC1mbG9hdCBpbiB0aGlzIGFuZCB0aGUgb3RoZXIgY2FzZXMuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2dvdG8pOiBGaXggdHlwbyBpbiBwcmV2aW91cyBjaGFuZ2UuCisKKwkqIHJlbG9hZDEuYyAoZ2VuX2lucHV0X3JlbG9hZCk6IFdoZW4gY2hlY2tpbmcgZm9yIHZhbGlkaXR5IG9mCisJcmVsb2FkcyBtYWRlIGZvciBhc21zLCBhbHNvIGNoZWNrIHRoZSBjb25zdHJhaW50cy4KKworCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBEb24ndCBhZGQgdG8gc2l6ZQorCWlmIHdlIGFyZW4ndCBnb2luZyB0byBuZWVkIHRvIGFsaWduIHRoZSBzaXplLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgKl9ESVZfRVhQUik6IEZvbGQgKGEgKiBDMSkgLyBDMiBmb3IKKwlzb21lIEMxIGFuZCBDMi4KKworU3VuIE1heSAyNCAxNDowNzo1MyAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogdG9wbGV2LmMgKG1haW4pOgorCUZpeCB0eXBvIHNldHRpbmcgdXNlX2dkYl9kYnhfZXh0ZW5zaW9ucyBpbiB4Y29mZiBjYXNlLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiAgQ2FsbCBgYnVpbGRfdHlwZV9jb3B5JyByYXRoZXIgdGhhbiBjYWxsaW5nCisJYGNfYnVpbGRfdHlwZV92YXJpYW50JyB0byBkdXBsaWNhdGUgYSB0eXBlLgorCitTdW4gTWF5IDI0IDE2OjU2OjA5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUmVmaW5lIHNldHRpbmcgb2YgYmFzaWNfYmxvY2tfbmVlZHMuCisKK1N1biBNYXkgMjQgMTU6NDM6MDggMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQWNoYXRlcy5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3Qgc3BsaXQgYW4gaW5zbiBpZiB0aGF0IHdvdWxkIG1vdmUKKwlhIHVzZSBvZiBhIHJlZ2lzdGVyIGFjcm9zcyBhIHNldCBvZiB0aGUgc2FtZSByZWdpc3Rlci4KKworU3VuIE1heSAyNCAxNDo1MDozOCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHJlZy1zdGFjay5jIChjb25zdHJhaW5fYXNtX29wZXJhbmRzKTogSWdub3JlIGNvbnN0cmFpbnQgbGV0dGVycworCWZvbGxvd2luZyAnIycgaW4gZWFjaCBhbHRlcm5hdGl2ZS4KKworU3VuIE1heSAyNCAwMjoyODo0NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChwZXhlY3V0ZSk6IE5ldyBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGZvciBPUzIuCisJVGFrZSBTRUFSQ0hfRkxBRyBhcyBhcmcgaW5zdGVhZCBvZiBGVU5DLgorCShleGVjdXRlKTogQ2hhbmdlIGNhbGwgdG8gcGV4ZWN1dGUuCisKKwkqIHRvcGxldi5jIChtYWluKTogRG9uJ3QgcnVuIHBzIGZvciAtZG0gaWYgb24gT1MyLgorCisJKiBjY2NwLmMgKG1haW4pOiBVc2UgUEFUSF9TRVBBUkFUT1IgY29tcHV0aW5nIG51bV9kaXJzLgorCShwYXRoX2luY2x1ZGUpOiBMaWtld2lzZSwgc2V0dGluZyBxLgorCisJKiBnY2MuYzogSW5jbHVkZSBzeXMvZmlsZS5oLgorCisJKiBNYWtlZmlsZS5pbiAoZXh0cmFjbGVhbik6IERlbGV0ZSBpbnN0YWxsMS50ZXhpLgorCitTYXQgTWF5IDIzIDE0OjE0OjA2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3J0c3R1ZmYuYyAoX19kb19nbG9iYWxfY3RvcnMpIFtub3QgSU5WT0tFX19tYWluXTogTWFrZSBib2R5IGVtcHR5LgorCisJKiBmb2xkLWNvbnN0LmMgKGZsb2F0X2Vycm9yKTogUmVuYW1lZCBmcm9tIGNvbnN0X2Jpbm9wX2Vycm9yLgorCShjb25zdF9iaW5vcCwgZm9sZF9jb252ZXJ0KToKKwlDYWxsIHNldF9mbG9hdF9oYW5kbGVyIGFyb3VuZCBSRUFMX1ZBTFVFX1RSVU5DQVRFLgorCisJKiBNYWtlZmlsZS5pbiAoJChzcmNkaXIpL0lOU1RBTEwpOiBOZXcgdGFyZ2V0LgorCShkb2MpOiBEZXBlbmQgb24gdGhhdC4KKwkoJChzcmNkaXIpL2djYy5pbmZvLCAkKHNyY2RpcikvY3BwLmluZm8pOiBEZWxldGUgJChzcmNkaXIpIGZyb20gZGVwcy4KKwkoJChzcmNkaXIpL2djYy5pbmZvKTogTGlzdCBhbGwgc3ViZmlsZXMgYXMgZGVwcy4KKworCSogbWF0aC02ODg4MS5oOiBVc2UgJSEgaW5zdGVhZCBvZiBmcGNyLgorCisJKiBpbnN0YWxsLnNoOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZTogQ2hhbmdlZCBpbnN0YWxsX3dpdGhfY3AgdG8gYnJva2VuX2luc3RhbGwuCisJVGVzdCB0aGF0IGZsYWcgZm9yIHRoZSBob3N0LCBub3QgZm9yIHRoZSB0YXJnZXQuCisJSWYgc2V0LCB1c2UgaW5zdGFsbC5zaC4KKworCSogTWFrZWZpbGUuaW4gKEVYVFJBX0hFQURFUlMpOiBOZXcgdmFyaWFibGUuCisJKFVTRVJfSCk6IFVzZSB0aGF0LgorCSogY29uZmlndXJlOiBMZXQgYWx0ZXJuYXRpdmVzIHNldCBFWFRSQV9IRUFERVJTIHZpYSB2YXIgaGVhZGVyX2ZpbGVzLgorCShtNjhrLS4uLik6IFNldCBoZWFkZXJfZmlsZXMgdG8gaW5zdGFsbCBtYXRoLTY4ODgxLmguCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRpcik6IENyZWF0ZSAobGlic3ViZGlyKS9pbmNsdWRlLgorCShpbnN0YWxsLWxpbWl0cy1oLCBpbnN0YWxsLWZsb2F0LWgpOiBEZXBlbmQgb24gaW5zdGFsbC1kaXIuCisKKwkqIE1ha2VmaWxlLmluIChnY2MueHRhcik6IFdhcm4gaWYgdmVyc2lvbiBpbiBnY2MudGV4aSBpcyBvbGQuCisKKwkqIGdlbmNvbmZpZy5jIChtYWluKTogQWRkIDEgd2hlbiBvdXRwdXR0aW5nIE1BWF9SRUNPR19PUEVSQU5EUy4KKwlJbml0aWFsaXplIHRvIGp1c3QgOS4KKworCSogZ2NjLmMgKE1EX1NUQVJURklMRV9QUkVGSVhfMSk6IE5ldyBjb25maWcgbWFjcm8uCisJKG1haW4pOiBVc2UgdGhhdCBsaWtlIE1EX1NUQVJURklMRV9QUkVGSVguCisKK1NhdCBNYXkgMjMgMDg6MTM6MzggMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQWNoYXRlcy5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvcHkgTUVNX0lOX1NUUlVDVF9QIGZsYWcgd2hlbiBjb252ZXJ0aW5nCisJcHNldWRvIHJlZ2lzdGVyIHRvIGVxdWl2YWxlbnQgbWVtb3J5IGxvY2F0aW9uLgorCitTYXQgTWF5IDIzIDA3OjEyOjE1IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiB4LWlyaXMgKE9MRENDKTogQWRkIC1jY2tyIHRvIHR1cm4gb2ZmIHN0cmljdCBBTlNJIGNoZWNraW5nLgorCisJKiBtaXBzLmMgKGN1cnJlbnRfZnVuY3Rpb25fbmFtZSk6IERlbGV0ZSBkZWZpbml0aW9uLCBmdW5jdGlvbi5jCisJZGVmaW5lcyB0aGlzIGFuZCBtaXBzLmggaGFzIGEgZGVjbGFyYXRpb24uCisKKwkqIGxvbmdsb25nLmggKG1pcHMgdW11bF9wcG1tKTogVXNlICJkIiBjb25zdHJhaW50IGluc3RlYWQgb2YgInIiLCBzbworCXRoYXQgd2Uga25vdyB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciByZWdpc3Rlci4KKworU2F0IE1heSAyMyAwMToxNDo0OSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZheC5oIChQUklOVF9PUEVSQU5EKTogVW5kbyBsYXN0IGNoYW5nZS4KKwlGaXggdGhlIGNvbW1lbnQgaW5zdGVhZC4KKworCSogeC1kcHgyMjAwLCB4LWRweDIzMDAgKEFMTE9DQV9GSU5JU0gsIEFTKTogTmV3IHZhcmlhYmxlcy4KKworRnJpIE1heSAyMiAwMTo1MjoyMiAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogc3ZyNC5oIChNRF9FWEVDX1BSRUZJWCk6ICBBZGRlZCBkZWZpbml0aW9uLgorCisJKiBwcm90b2l6ZS5jIFtQT1NJWF06IEluY2x1ZGUgZGlyZW50LmggcmF0aGVyIHRoYW4gc3lzL2Rpci5oLgorCShfUE9TSVhfU09VUkNFKTogVW5kZWYgYmVmb3JlIGRlZmluaW5nLgorCShnZXRwd2QpOiAgQ2hhbmdlIGRlY2xhcmF0aW9uIHRvIGFuIGBleHRlcm4nLgorCShvcGVuKTogIEFkZCBkZWNsYXJhdGlvbiBpbiB0aGUgI2lmIDAgc2VjdGlvbiBhbG9uZyB3aXRoIGZwcmludGYuCisJKGxpbmssIHVubGluaywgYWNjZXNzLCBleGVjdnApOiAgQWRkIGBleHRlcm4nIGRlY2xhcmF0aW9ucy4KKwkoc3RybGVuKTogIERvbid0IG1lbnRpb24gYXJnIHR5cGUgaW4gZGVjbGFyYXRpb24uCisJKG1haW4pOiAgRGVjbGFyZSBgcGFyYW1zJyBhcyBgY29uc3QgY2hhciAqJyB0byBhdm9pZCBib3RjaCB3aGVuIGRvaW5nCisJdGVzdC1wcm90b2l6ZS1zaW1wbGUuCisKK0ZyaSBNYXkgMjIgMTc6MTU6MzYgMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQWNoYXRlcy5taXQuZWR1KQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBhcmd1bWVudHMgcGFzc2VkCisJaW4gcmVnaXN0ZXJzIHdoZW4gT1VUR09JTkdfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgaXMgZGVmaW5lZCBhbmQKKwlzdGFjayBzcGFjZSBoYXMgbm90IGJlZW4gcHJlYWxsb2NhdGVkLgorCitGcmkgTWF5IDIyIDE3OjE2OjU1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbik6IFRyeSB0byByZWR1Y2Ugc2l6ZSBvZiBhCisJY29uc3RhbnQgYnkgY2hhbmdpbmcgY29tcGFyaXNvbiBjb2RlOyBkb24ndCBvbmx5IGRvIGZvciAxIGFuZCAtMS4KKworCSogcmVsb2FkLmggKHJlZ19lcXVpdl9tZW1vcnlfbG9jKTogRGVjbGFyZS4KKwkqIHJlbG9hZC5jIChyZWZlcnNfdG9fcmVnbm9fZm9yX3JlbG9hZF9wKTogVXNlIHJlZ19lcXVpdl9tZW1vcnlfbG9jCisJaW5zdGVhZCBvZiByZWdfZXF1aXZfbWVtIGFuZCByZWdfZXF1aXZfYWRkcmVzczsgbG9vayBmb3IgY29uc3RhbnQuCisJKHJlZ19vdmVybGFwX21lbnRpb25lZF9mb3JfcmVsb2FkX3ApOiBMSWtld2lzZS4KKwlVc2UgbmV3IGZ1bmN0aW9uIHRvIGNoZWNrIGZvciBNRU0uCisJKHJlZmVyc190b19tZW1fZm9yX3JlbG9hZF9wKTogTmV3IGZ1bmN0aW9uLgorCSogcmVsb2FkMS5jIChyZWdfZXF1aXZfbWVtb3J5X2xvYyk6IE5vIGxvbmdlciBzdGF0aWMuCisKK0ZyaSBNYXkgMjIgMTc6MTU6MTIgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBNYWtlZmlsZS5pbiAodGVzdC1wcm90b2l6ZS1zaW1wbGUpOiAgT25seSBkZWxldGUgZmlsZXMgbWFkZSBieSB0aGlzCisJdGFyZ2V0IChub3QgdGhlIG1hbiBwYWdlcyEpCisJKHRlc3QtcHJvdG9pemUtc2ltcGxlKTogIFVzZSAteCBvcHRpb24gdG8gYXZvaWQgbXVuZ2luZyBnZXRvcHQuaC4KKwkodGVzdC1wcm90b2l6ZS1zaW1wbGUpOiAgRml4ZWQgbnVtYmVyIG9mIGRpZmZlcmVuY2VzIG1lc3NhZ2UuCisJKG1vc3RseS1jbGVhbik6ICBQcm9wZXJseSByZW1vdmUgYWxsIHRlbXAgZmlsZXMgcmVsYXRpbmcgdG8gcHJvdG9pemUvCisJdW5wcm90b2l6ZS4KKwkoaW5zdGFsbC1jb21tb24pOiAgRm9yY2UgcmVtb3ZhbCBvZiBwcmV2aW91c2x5IGluc3RhbGxlZCBnKysgYW5kIGMrKworCWNvbW1hbmQgZmlsZXMgYmVmb3JlIHRyeWluZyB0byBpbnN0YWxsIG5ldyBvbmVzLgorCisJKiBzcGMtc29sMi5oOiAgTmV3IGZpbGUuCisKKwkqIGNvbmZpZ3VyZSAoc3BhcmMtKi1zb2xhcmlzMiopOiAgTmV3IGNvbmZpZ3VyYXRpb24gYWRkZWQuCisKKwkqIHgtc3BhcmN2NCAoWF9DRkxBR1MpOiAgUmVtb3ZlZCAtQnN0YXRpYyBhbmQgLWRuIG9wdGlvbnMuCisKK0ZyaSBNYXkgMjIgMTU6MzA6MDUgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBNb3ZlIGZyb20gYy1kZWNsLmMuCisJQ29uc3RydWN0IGZ1bmN0aW9uIG5hbWVzIGluc3RlYWQgb2YgZXhwZWN0aW5nIHRoZW0gYXMgcGFyYW1ldGVycy4KKwlTZXQgVFJFRV9SRUFET05MWSBhbmQgb3RoZXIgYXR0cmlidXRlcyBiZWZvcmUgY2FsbGluZyBwdXNoZGVjbC4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZywgc3RvcmVfcGFybV9kZWNscyk6IENhbGxzIGNoYW5nZWQuCisJKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IFJlbW92ZSB0byBjLWNvbW1vbi5jLgorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nLCBzdG9yZV9wYXJtX2RlY2xzKToKKwlDYWxsIGRlY2xhcmVfZnVuY3Rpb25fbmFtZS4KKworRnJpIE1heSAyMiAxMjoxNToxNiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjdjQuaCAoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogRGVmaW5lLgorCitGcmkgTWF5IDIyIDExOjQwOjAwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeC1kcHgyMjAwLCB4LWRweDIzMDAgKENGTEFHUyk6IERlZmluaXRpb24gZGVsZXRlZC4KKworCSogYy1kZWNsLmMsIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBObyBzaGFkb3cgd2FybmluZ3MgaWYgREVDTF9JR05PUkVEX1AuCisKKwkqIGMtZGVjbC5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOgorCUNoYW5nZSBuYW1lcyB0byBfX0ZVTkNUSU9OX18gYW5kIF9fUFJFVFRZX0ZVTkNUSU9OX18KKworCSogdmF4LmggKFBSSU5UX09QRVJBTkQpOiBJbiBNIGNhc2UsIGRvbid0IGNvbXBsZW1lbnQgYWZ0ZXIgc3VidHJhY3QgMS4KKworCSogYy1sZXguYyAoeXlsZXgpOiBVc2UgcGVkd2FybiBmb3Igb3ZlcmZsb3cgd2FybmluZ3MuCisJUGVkd2FybiBpZiBjb25zdGFudCBkb2Vzbid0IGZpdCBpdHMgdHlwZS4KKworRnJpIE1heSAyMiAxMzozMjozOSAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIHhjb2Zmb3V0LmggKERCWF9UWVBFX0RFQ0xfU1RBQlNfQ09ERSk6IFdhcyBEQlhfREVDTF9TVEFCU19DT0RFLgorCitGcmkgTWF5IDIyIDA4OjMxOjE2IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIGxvbmdsb25nLmggKGFsbCBtYWNoaW5lcyk6IERlZmluZSBVTVVMX1RJTUUgYW5kIFVESVZfVElNRS4KKwlBdXhpbGlhcnkgZm9ybWF0dGluZyBjaGFuZ2VzLgorCShoZWFkZXIpOiBEZWZpbmUgX19DTE9CQkVSX0NDIGFuZCBfX0FORF9DTE9CQkVSX0NDLgorCShfX3NwYXJjX18gbWFjcm9zKTogVXNlIHRoZW0uCisJKF9faHBwYV9fIGFkZF9zc2FhYWEsc3ViX2RkbW1zcyk6IEFjY2VwdCB6ZXJvIHVzaW5nIGBNJyBjb25zdHJhaW50LgorCShfX2hwcGFfXyB1bXVsX3BwbW0pOiBEZWZpbmUgaWYgX1BBX1JJU0MxXzEuCisJKF9fbWM4ODExMF9fIHVtdWxfcHBtbSx1ZGl2X3Fybm5kKTogTmV3LgorCShfX3B5cl9fIHVtdWxfcHBtbSk6IFJld3JpdGUuCisJKGRlZmF1bHQgY291bnRfbGVhZGluZ196ZXJvcyk6IE1ha2UgaXQgd29yayBmb3IgNjQgYml0IGxvbmdzLgorCitGcmkgTWF5IDIyIDA2OjI3OjMxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IEludmFsaWRhdGUgYSB2b2xhdGlsZSBkZXN0aW5hdGlvbi4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBDb3JyZWN0bHkgaGFuZGxlIHZvbGF0aWxlIG9wZXJhbmRzLgorCitGcmkgTWF5IDIyIDA2OjI2OjUwIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogcnM2MDAwLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiAgVXNlIG5ldyBmdW5jdGlvbgorCXhjb2Zmb3V0X2RlY2xhcmVfZnVuY3Rpb24uCisJKiByczYwMDAuYyAob3V0cHV0X2VwaWxvZyk6ICBTaG9ydGVuIGludGVybmFsIGxhYmVsLgorCShvdXRwdXRfdG9jLCBvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiAgTGlrZXdpc2UuCisJKiB4Y29mZm91dC5jICh4Y29mZm91dF9kZWNsYXJlX2Z1bmN0aW9uKTogIE5ldyBmdW5jdGlvbiwgY3JlYXRlZAorCXRvIGxvY2FsaXplIGtub3dsZWRnZSBvZiBlbmQtb2YtZnVuY3Rpb24gaW50ZXJuYWwgbGFiZWwuCisJKHhjb2Zmb3V0X2VuZF9lcGlsb2d1ZSk6IFNob3J0ZW4gaW50ZXJuYWwgbGFiZWwuCisKK1RodSBNYXkgMjEgMTU6MzE6NDIgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiByZW9yZy5jIChyZWxheF9kZWxheV9zbG90cyk6IENsZWFyIElOU05fRlJPTV9UQVJHRVRfUCB3aGVuCisJcmVtb3ZlIGluc25zIGZyb20gYSBkZWxheSBzbG90LgorCitUaHUgTWF5IDIxIDEzOjU0OjE1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6CisJRG9uJ3QgYWJvcnQgZm9yICUgaW4gbGFzdCBvcGVyYW5kIGluIGFzbV9vcGVyYW5kcy4KKworCSogYWxsb2NhLmM6IE1ha2Ugc3ltbGluayB0byBtYXN0ZXIgY29weS4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogQ291bnQgbmNsb2JiZXJzIHByb3Blcmx5LgorCisJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IENhbGwgbWFya19yZWdfcG9pbnRlci4KKworCSogYy1wYXJzZS55IChzdG10LCBXSElMRSBjYXNlKTogU3RhcnQgbG9vcCAqYWZ0ZXIqIHBhcnNpbmcgZW5kIHRlc3QuCisJKGRvX3N0bXRfc3RhcnQpOiBCcm9rZW4gb3V0IGZyb20gRE8gcnVsZS4KKwkoc3RtdCwgRE8gY2FzZSk6IFVzZSB0aGF0LgorCUFkZCBlcnJvci1oYW5kbGVyIHJ1bGUgZm9yIHBhcnNlIGVycm9yIGluIGVuZCB0ZXN0LgorCisJKiBzcGFyYy5oIChBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTKTogU3VwcG9ydCBgY2MnLgorCisJKiBjLWxleC5jICh5eWxleCk6IFBlZHdhcm4gaWYgYGYnIGNvbnN0YW50IGV4Y2VlZHMgcmFuZ2Ugb2YgYGZsb2F0Jy4KKwlKdXN0IG9uY2UgZXZlbiBpZiBgZicgYXBwZWFycyB0d2ljZS4KKwlUaGlzIGFuZCB0aGUgbGlrZSB3YXJuaW5nIGZvciBgZG91YmxlJyBhcmUgb25seSBpZiAtcGVkYW50aWMuCisKK1RodSBNYXkgMjEgMDg6NDY6MzAgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRik6IEFkZCBzdGFtcC1wcm90by4KKworVGh1IE1heSAyMSAwNDowNDozMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN2cjMuaCAoTE9DQUxfTEFCRUxfUFJFRklYKTogT3ZlcnJpZGUgYXMgYSBwZXJpb2QuCisJKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwsIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6CisJVXNlIExPQ0FMX0xBQkVMX1BSRUZJWC4KKwkqIGRweDIuaCAoTE9DQUxfTEFCRUxfUFJFRklYKTogRGVmaW5pdGlvbiBkZWxldGVkLgorCSogdG93ZXItYXMuaCAoTE9DQUxfTEFCRUxfUFJFRklYKTogT3ZlcnJpZGUgYXMgZW1wdHkuCisKK1dlZCBNYXkgMjAgMjM6Mjk6MTUgMTk5MiAgICAoRXJpYyBZb3VuZ2RhbGUgYXQgeW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIGNvbmZpZy1nY2MuY29tOiBUYWtlIGNhcmUgb2Ygc2l0dWF0aW9uIGlmIHNvdXJjZXMgYXJlIE5GUyBtb3VudGVkLgorCitXZWQgTWF5IDIwIDE0OjM1OjEwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEFkZCBhZGRpdGlvbmFsIHZhbGlkYXRpb24gY2hlY2sgdG8KKwljYXNlIHRoYXQgZGV0ZWN0cyAiaWYgKGZvbykgYmFyKys7Ii4KKworV2VkIE1heSAyMCAxMzoxODowOSAxOTkyICBUaW0gTW9vcmUgIChtb29yZUBkZWZtYWNyby5jcy51dGFoLmVkdSkKKworCSogcGEubWQgOiBDaGFuZ2VkICJ4eSIgY29uc3RyYWludHMgdG8gIngiIGNvbnN0cmFpbnRzLgorCShtb3ZzaSs2KTogTGV0ICJyIiByZWdpc3RlcnMgbWF0Y2ggdG9vLiBBZGQgZGVmaW5lX3NwbGl0IHRvIGNoYW5nZQorCWludG8gMiBpbnNucyBpZiBuZWVkZWQuCisJKGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBOZXcgcGF0dGVybi4KKwkqIHBhLmggKEZVTkNUSU9OX0FSR19QQVNTX0JZX1JFRkVSRU5DRSk6IEZpeCBmb3IgVFlQRSA9PSAwLgorCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBEbyBzdHVmZiBmb3IgU05BS0VfRlBfUkVHUy4KKwkoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogV3JpdGUgQ09OU1RfSU5UIGNhc2UuCisKK1dlZCBNYXkgMjAgMDA6MDQ6NTUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBuczMyay5oIChOUzMyS19ESVNQTEFDRU1FTlRfUCk6IEZpeCB0eXBvLgorCSogbnMzMmsubWQgKGV4dHp2LTEpOiBOZXcgcGF0dGVybiBmb3IgZXh0cmFjdGluZyBmcm9tIFNJbW9kZS4KKworCSogYysrOiAtTSBzdXBwcmVzc2VzIC1sZysrLgorCisJKiBzdnIzLmggKERPX0dMT0JBTF9DVE9SU19CT0RZKTogRmx1c2ggc3B1cmlvdXMgI2VuZGlmLgorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBOZXcgYXJnIElTX0FTTS4gIENhbiBub3cgcmV0dXJuIDAuCisJKGVtaXRfcmVsb2FkX2luc25zKTogUGFzcyBuZXcgYXJnLiAgRXJyb3IgaWYgaXQgcmV0dXJucyAwLgorCisJKiBjb25maWd1cmU6IFVzZSAkY3B1X3R5cGUgdG8gZGVmYXVsdCAkdG1fZmlsZS4KKworCSogY29uZmlndXJlLCBjb25maWcuc3ViOiBDb3JyZWN0IHdlMzIgdG8gd2UzMmsuCisJKiBjb25maWd1cmUgKGRlY3N0YXRpb24tZGVjKTogRGVsZXRlZC0tZG9lc24ndCBmaXQgYXMgbWFjaGluZSBhbGlhcy4KKwkod2UzMmspOiBBZGQgY29tcGFueSBkZWZhdWx0LgorCShmeDI4MDApOiBUaGlzIGlzIGEgbWFjaGluZSBhbGlhcywgbm90IGEgY29tcGFueSBkZWZhdWx0LgorCisJKiBjb25maWd1cmUgKGkzODYtKi1ic2QqLCB3ZTMyLWF0dC1zeXN2KiwgbTY4ay1jcmRzLXVub3MqKToKKwlNaXNzaW5nIConcyBhZGRlZCBhdCBlbmRzIG9mIGNvbmZpZyBuYW1lcy4KKworCSogYy10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBVc2Ugd2Fybl9mb3JfYXNzaWdubWVudCB0byBoYW5kbGUKKwktV2NvbnZlcnNpb24uICBGaXggdHlwbyBpbiB3aWR0aC1taXNtYXRjaCB0ZXN0LgorCisJKiBzdnIzLmggKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IFB1dCBhICogYXQgdGhlIGZyb250LgorCitUdWUgTWF5IDE5IDIxOjUzOjA1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogQWRkIC1mIGluIHJtICouZHZpLgorCisJKiB4LWRweDIyMDAsIHgtZHB4MjMwMCAoQ0ZMQUdTKTogTWFrZSB2YWx1ZSBjb25kaXRpb25hbCBvbiBDQy4KKworCSogZ2VuYXR0cnRhYi5jIChzaW1wbGlmeV90ZXN0X2V4cCwgZXZhbHVhdGVfZXFfYXR0cik6CisJRGVsZXRlIHRlc3RzIG9mIGN1cnJlbnRfYWx0ZXJuYXRpdmVfc3RyaW5nOyB0aGV5IGNhdXNlZCBidWdzLgorCisJKiBjcm9zcy10ZXN0LmM6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuaW4gKGNyb3NzLXRlc3QsIGNyb3NzLXRlc3Qubyk6IE5ldyB0YXJnZXRzLgorCShhbGwuY3Jvc3MpOiBEZXBlbmQgb24gY3Jvc3MtdGVzdC4KKworCSogYy1kZWNsLmMgKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IEZpeCBidWcgaW4gcHJldmlvdXMgY2hhbmdlLgorCitUdWUgTWF5IDE5IDE5OjU3OjM5IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogaTk2MC5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBSZXR1cm4gbW9kZSdzIGFsaWdubWVudCBpZiB0eXBlIDAuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU2V0IE1FTV9JTl9TVFJVQ1RfUCBmb3IgYWdncmVnYXRlIHJldHVybgorCXZhbHVlcyBpbiBtZW1vcnkuCisKKwkqIGZ1bmN0aW9uLmMgKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBVc2UgTUFZQkVfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UKKwlpZiBkZWZpbmVkLgorCSogaTk2MC5jIChpOTYwX2Z1bmN0aW9uX2FyZ19hZHZhbmNlKTogUHV0IE1VU1RfUEFTU19JTl9TVEFDSworCXBhcmFtZXRlcnMgb24gdGhlIHN0YWNrLgorCShpOTYwX2Z1bmN0aW9uX2FyZyk6IExpa2V3aXNlLgorCisJKiBtNjhrLm1kICh6ZXJvX2V4dGVuZHFpc2kyKzEpOiBBZGQgY29uZGl0aW9uIHRvIGV4Y2x1ZGUgTUVNL01FTQorCWNhc2Ugd2hpY2ggd291bGQgcmVxdWlyZSByZWxvYWRpbmcuCisKKwkqIHVucm9sbC5jOiBEZWxldGUgaW5jb3JyZWN0IEZlYiAyNiAxOTkyIGNoYW5nZS4gIAorCShjb3B5X2xvb3BfYm9keSk6IEZvciBjb21iaW5lZCBhZGRyZXNzIGdpdnMsIHNjYWxlIGdpdl9pbmMgYnkgdGhlCisJdHdvIGdpdidzIG11bHRpcGxpY2F0aXZlIGZhY3RvcnMgaWYgdGhleSBhcmUgZGlmZmVyZW50LgorCisJKiBpOTYwLm1kICh6ZXJvX2V4dGVuZHFpc2kyKTogQWRkIGNvbW1lbnQuCisKKwkqIGNvbWJpbmUuYyAoYXBwbHlfZGlzdHJpYnV0aXZlX2xhdyk6IERvbid0IGRpc3RyaWJ1dGUgc3VicmVncworCXdoaWNoIGNoYW5nZSB0aGUgbW9kZSBjbGFzcy4KKworCSogZml4aW5jbHVkZXM6IEZpeCBtZW1vcnkuaCBmb3IgU3VuT1MuCisKKwkqIHNwYXJjLmggKEVYVFJBX0NDX01PREVTLCBFWFRSQV9DQ19OQU1FUyk6IEFkZCBDQ0ZQRW1vZGUsIGZvcgorCWNvbXBhcmVzIHdoaWNoIHNob3VsZCBnZW5lcmF0ZSBleGNlcHRpb25zIGZvciBxTmFOcy4KKwkoU0VMRUNUX0NDX01PREUpOiBVc2UgQ0NGUEVtb2RlIGZvciBub24gRVEvTkUgRlAgY29tcGFyZXMuCisJKiBzcGFyYy5jIChub3JtYWxfY29tcF9vcGVyYXRvcik6IEhhbmRsZSBDQ0ZQRW1vZGUuCisJKENfTU9ERVMsIG91dHB1dF9jYnJhbmNoKTogTGlrZXdpc2UuCisJKiBzcGFyYy5tZCAoY21wZGYsIGNtcHNmKTogTW9kaWZ5IHBhdHRlcm5zIHRvIHVzZSBmY21wZSBmb3IgQ0NGUEUKKwltb2RlLCBhbmQgZmNtcCBmb3IgQ0NGUCBtb2RlLgorCisJRnJvbSByZmc6CisJKiBzcGFyYy5oOiBEZWNsYXJlIG91dHB1dF9tb3ZlX3F1YWQsIG91dHB1dF9mcF9tb3ZlX3F1YWQgYW5kCisJb3V0cHV0X2Zsb2F0c2l0ZjIuCisJKiBzcGFyYy5jIChtZW1fYWxpZ25lZF84KTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfbW92ZV9kb3VibGUpOiBDbGVhbiB1cCBhIGxpdHRsZS4gIENhbGwgbWVtX2FsaWduZWRfOC4KKwlMb2FkIG9wZXJhbmRzW10gaW50byByZWdpc3RlciB2YXJpYWJsZXMgZm9yIGVmZmljaWVuY3kuCisJKG91dHB1dF9tb3ZlX3F1YWQsIG91dHB1dF9mcF9tb3ZlX3F1YWQpOiBOZXcgZnVuY3Rpb25zLgorCShvdXRwdXRfZmxvYXRzaXRmMik6IE5ldyBmdW5jdGlvbi4KKwkocHJpbnRfb3BlcmFuZCk6IFN1cHBvcnQgJ1MnIGFuZCAnVCcuCisJKiBzcGFyYy5tZCAoY21wdGYsIG1vdnRmLCBleHRlbmRzZnRmMiwgZXh0ZW5kZGZ0ZjIsIHRydW5jdGZzZjIsCisJdHJ1bmN0ZmRmMiwgZmxvYXRzaXRmMiwgZml4X3RydW5jdGZzaTIsIGFkZHRmMywgc3VidGYzLCBtdWx0ZjMsCisJZGl2dGYzLCBuZWd0ZjIsCWFic3RmMiwgc3FydHRmMik6ICBOZXcgcGF0dGVybnMgYWRkZWQgZm9yIFRGbW9kZQorCXN1cHBvcnQuCisKK1R1ZSBNYXkgMTkgMTk6MzQ6MTAgMTk5MiAgICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGkzODZ2NC5oIChEQlhfUkVHSVNURVJfTlVNQkVSKTogIEZpeGVkIERXQVJGIG51bWJlcnMgZm9yCisJeDg2IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKworVHVlIE1heSAxOSAxNTozMDozMiAxOTkyICBNYXRzIExvZmt2aXN0ICAoZDg3LW1hbEBuYWRhLmt0aC5zZSkKKworCSogZml4aW5jbHVkZXM6IEZpeCByZXR1cm4gdHlwZSBvZiBtYWxsb2MgYW5kIGZyaWVuZHMuCisKK1R1ZSBNYXkgMTkgMTM6MzA6MTYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3ViIChpcmlzNGQpOiBJZiAkb3MgaXMgc29tZSBraW5kIG9mIElyaXgsIGRvbid0IGNsb2JiZXIgaXQuCisJTWFrZSB0aGUgZGVmYXVsdCAtaXJpeDQuCisKKwkqIGMtZGVjbC5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBOZXcgYXJnIHByaW50YWJsZV9uYW1lLgorCURlY2xhcmUgX19QUklOVEFCTEVfTkFNRV9fLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZywgc3RvcmVfcGFybV9kZWNscyk6IFBhc3MgdGhlIG5ldyBhcmcuCisKK1R1ZSBNYXkgMTkgMDk6NTA6MDEgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuYyAob3V0cHV0X29wdGlvbnMpOiBDaGVjayBwcm9maWxlX2Jsb2NrX2ZsYWcuCisJKG04OGtfbGF5b3V0X2ZyYW1lKTogRGl0dG8uCisJKG91dHB1dF9mdW5jdGlvbl9ibG9ja19wcm9maWxlcik6IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHBhcmFtZXRlcgorCXJlZ2lzdGVycyB3aGVuIGNhbGxpbmcgX19iYl9pbml0X2Z1bmMuCisJKG91dHB1dF9ibG9ja19wcm9maWxlcik6IFVzZSBATFBCWDIuCisJCisJKiBtODhrLmggKENBU0VfVkVDVE9SX0lOU05TKTogQ2hvb3NlIGEgdGFibGUgb2YgYnJhbmNoCisJaW5zdHJ1Y3Rpb25zIG9yIGFkZHJlc3Nlcy4gIFRoZSBsYXR0ZXIgaXMgYSB3aW4gZm9yIHRoZSBtODgxMTAuCisJKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBOb3RoaW5nIG5lZWRlZCBmb3IgdGFibGUgb2YgYWRkcmVzc2VzLgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCk6IFVzZSAiYnIiIG9yICJ3b3JkIi4KKwkqIG04OGsubWQgKGNhc2VzaSwgY2FzZXNpX2p1bXApOiBVcGRhdGVkLgorCisJKiBtODhrLm1kIChtODgxMTAgZnVuY3Rpb24gdW5pdHMpOiBDb3VudCBpbiBoYWxmIGN5Y2xlcy4KKworCSogbTg4ay5tZCAoY2FsbCBpbnNucyk6IENsb2JiZXIgcmF0aGVyIHRoYW4gdXNlIHIxLgorCisJKiBtODhrLmMgKG04OGtfbGF5b3V0X2ZyYW1lKTogRml4IG04OGtfZnBfb2Zmc2V0IGZvciB6ZXJvIGNhc2UuCisKK01vbiBNYXkgMTggMTA6Mzg6MjAgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGlyaXMuaCAoREVGQVVMVF9TSUdORURfQ0hBUik6IERlZmluZSBhcyAwIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKwlJUklTIGRlZmF1bHRzLiAgUGF0Y2ggZnJvbSBrZXZpbkB0YW1yaS5jb20gKEtldmluIERhbGxleSkuCisKKwkqIHhtLWlyaXg0LmggKEhBVkVfVlBSSU5URik6IERlZmluZS4KKworCSogeC1pcmlzIChDTElCKTogQWRkIC1sbWFsbG9jLgorCisJKiBtaXBzLm1kIChmcF9jb21wIGZ1bmN0aW9uYWwgdW5pdCk6IFVzZSBhZGRlciBmdW5jdGlvbmFsIHVuaXQKKwlpbnN0ZWFkIHRvIG1vcmUgY2xvc2VseSBtb2RlbCBNSVBTIGJlaGF2aW9yIGFuZCBtYWtlIGdlbmF0dHJ0YWIKKwlmYXN0ZXIuCisJKHRyYW5zZmVyIGZ1bmN0aW9uYWwgdW5pdCk6IFVzZSBtZW1vcnkgZnVuY3Rpb25hbCB1bml0IGluc3RlYWQuCisJKHNxcnQgZnVuY3Rpb25hbCB1bml0KTogVXNlIGRpdmlkZSBmdW5jdGlvbmFsIHVuaXQgaW5zdGVhZC4KKwkoYnJhbmNoX3plcm8pOiBJZiBDU0UgaGFzIGZvbGRlZCBhIHZhbHVlIHdoaWNoIGlzIGNvbnN0YW50LCBhbmQKKwl0aGUganVtcCB3b3VsZCBiZSBvbWl0dGVkLCBkbyBub3QgZWxpbWluYXRlIHB1dHRpbmcgYSBqdW1wIHRoZXJlLgorCVRoaXMgY2F1c2VzIGJhZCBjb2RlIHRvIGJlIGdlbmVyYXRlZCB3aGVuIHVzaW5nIGdhcywgc2luY2UgdGhlCisJcHJldmlvdXMgaW5zdHJ1Y3Rpb24gbWF5IGJlIGEgbG9hZCB3aGljaCBoYWQgaXQncyBkZWxheSBzbG90CisJZmlsbGVkIGJ5IHRoZSAnYnJhbmNoJywgYW5kIHRoZSBuZXh0IGluc3RydWN0aW9uIGRlcGVuZHMgb24gdGhlCisJdmFsdWUgbG9hZGVkLgorCisJKiBtaXBzLWF0LmMgKHdob2xlIGZpbGUpOiBEZWxldGUsIG5vIGxvbmdlciBuZWVkZWQuCisKKwkqIG1pcHMtYXQubWQgKHdob2xlIGZpbGUpOiBEZWxldGUsIG5vIGxvbmdlciBuZWVkZWQuCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1hdHRydGFiKTogUmVtb3ZlICQoc3JjZGlyKSBpbiBmcm9udCBvZgorCSQoUFJFTUFERV9BVFRSVEFCKSBzbyB0aGF0IE1JUFMgYnVpbGRzIGNhbiBiZSBkb25lIGluCisJc3ViZGlyZWN0b3JpZXMuCisKKwkqIHQtZGVjcm9zZSAoUFJFTUFERV9BVFRSVEFCKik6IERvbid0IGRlZmluZSwgZ2VuYXR0cnRhYiBpcyBub3cgZmFzdAorCWVub3VnaCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gc2F2ZSBhIHByZS1tYWRlIGdlbmF0dHJ0YWIuYy4KKwkoTElCR0NDMSk6IFVzZSBsaWJnY2MxLm51bGwgcnVsZSB0byB0dXJuIG9mZiBidWlsZGluZyBsaWJnY2MxLmEuCisKKwkqIHQtZGVjc3RhdG4gKFBSRU1BREVfQVRUUlRBQiopOiBEb24ndCBkZWZpbmUsIGdlbmF0dHJ0YWIgaXMgbm93IGZhc3QKKwllbm91Z2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHNhdmUgYSBwcmUtbWFkZSBnZW5hdHRydGFiLmMuCisJKExJQkdDQzEpOiBVc2UgbGliZ2NjMS5udWxsIHJ1bGUgdG8gdHVybiBvZmYgYnVpbGRpbmcgbGliZ2NjMS5hLgorCisJKiB0LW1pcHMgKFBSRU1BREVfQVRUUlRBQiopOiBEb24ndCBkZWZpbmUsIGdlbmF0dHJ0YWIgaXMgbm93IGZhc3QKKwllbm91Z2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHNhdmUgYSBwcmUtbWFkZSBnZW5hdHRydGFiLmMuCisJKExJQkdDQzEpOiBVc2UgbGliZ2NjMS5udWxsIHJ1bGUgdG8gdHVybiBvZmYgYnVpbGRpbmcgbGliZ2NjMS5hLgorCisJKiBtaXBzLmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsQVNNX09VVFBVVF9ERVNUUlVDVE9SKTogRGVmaW5lLgorCVBhdGNoIGZyb20gd2lsc29uQGN5Z251cy5jb20uCisJKERFRkFVTFRfU0lHTkVEX0NIQVIpOiBEb24ndCBkZWZpbmUgaWYgYWxyZWFkeSBkZWZpbmVkLgorCitNb24gTWF5IDE4IDAxOjM0OjM4IDE5OTIgIEtheXZhbiBTeWx2YW4gICAgKGtheXZhbkBzYXR5ci5TeWx2YW4uQ09NKQorCisJKiBzdnIzLmggKERPX0dMT0JBTF9DVE9SU19CT0RZKTogU3RhcnQgYXQgZW5kLCBpZiBTVEFDS19HUk9XU19ET1dOV0FSRC4KKworTW9uIE1heSAxOCAwMTozNDozOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOgorCURvIG5vdGhpbmcsIGJ1dCBkZXBlbmQgb24gc3RhbXAtcHJvdG8uCisJKHN0YW1wLXByb3RvKTogTmV3IHRhcmdldC4gIENvbXBpbGUgYm90aCBwcm90b2l6ZS5vIGFuZCB1bnByb3RvaXplLm8uCisKKwkqIGNvbmZpZ3VyZSAobnMzMmstbnMtZ2VuaXgpOiBDb21tZW50ZWQgb3V0LgorCisJKiBleHBtZWQuYyAoZXhwYW5kX211bHQpOiBVc2Ugc3ludGhfbXVsdCBldmVuIGlmIG5vdCAtTy4KKworU3VuIE1heSAxNyAwMjo1NDoyMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChwdXNoX3Bhcm1fZGVjbCk6IFBlZGFudGljIHdhcm5pbmcgaWYgc2hhZG93aW5nIHR5cGVkZWYuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnN0YW50X2V4cHJlc3Npb25fd2FybmluZyk6IE5ldyBmdW5jdGlvbi4KKwkoc3RvcmVfaW5pdF92YWx1ZSk6IENhbGwgdGhhdC4KKwkqIHRyZWUuaCAoVFJFRV9DT05TVEFOVF9PVkVSRkxPVyk6IE5ldyBmbGFnLgorCisJKiBjLWxleC5jICh5eWxleCk6ICJleGNlZWRzIHJhbmdlIiB3YXJuaW5nIGNoYW5nZWQgdG8gcGVkd2Fybi4KKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlIGZvciBkdXBsaWNhdGUga2V5d29yZHMuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogRm9yIGluY3JlbWVudCBvcGVyYXRvcnMsCisJdGVzdCBUUkVFX1JFQURPTkxZIGluIG9wZXJhbmQsIG5vdCB0aGUgZGF0YSB0eXBlLgorCisJKiB1bnByb3RvaXplLmM6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuaW4gKHVucHJvdG9pemUubyk6IFVzZSB0aGF0LgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYWtlIGdsb2JhbCBkZWNsIGZvciBfX05BTUVfXy4KKwkoc3RvcmVfcGFybV9kZWNscyk6IE1ha2UgbG9jYWwgZGVjbCBmb3IgX19OQU1FX18uCisJKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IFN1YnJvdXRpbmUgZm9yIHRoYXQuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKToKKwlJZ25vcmUgaW5pdGlhbGl6ZWQgc3RhdGljcyBpZiBERUNMX0lHTk9SRURfUCBpcyBzZXQuCisJKiBjLWxleC5jICh5eWxleCk6IENvbnZlcnQgaW52aXNpYmxlIGluaXRpYWxpemVkIGNoYXIgYXJyYXkgdmFycworCXRvIHN0cmluZyBjb25zdGFudHMuCisKKwkqIGMtZGVjbC5jIChnZXRfcGFybV9pbmZvKTogQ2hhbmdlIGVycm9yIG1lc3NhZ2UuCisKK1NhdCBNYXkgMTYgMjE6MjU6MjEgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IERvIG5vdCBmb2xkIFgtWCB0byAwIGlmIFggaXMgZmxvYXRpbmcgcG9pbnQuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiAtIC1YIHNpbXBsaWZpZXMgdG8gWCBldmVuCisJd2l0aCBJRUVFIGZsb2F0aW5nIHBvaW50LgorCitTYXQgTWF5IDE2IDE0OjE0OjUwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogRGVsZXRlICouZHZpLgorCShkaXN0Y2xlYW4pOiBOb3QgaGVyZS4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtbWFuKTogSWdub3JlIGVycm9ycyBpbiBhbGwgY29tbWFuZHMuCisKKwkqIGNvbWJpbmUuYyAoZXhwYW5kX2NvbXBvdW5kX29wZXJhdGlvbik6CisJRG9uJ3Qgc2ltcGxpZnkgZXh0ZW5kaW5nIGEgY29uc3RfaW50LgorCisJKiBuczMyay5oIChOUzMyS19ESVNQTEFDRU1FTlRfUCk6IE5ldyBtYWNyby4KKwkoSU5ESVJFQ1RBQkxFXzFfQUREUkVTU19QKTogVXNlIHRoYXQuCisJKiBuczMyay5tZCAoYWRkc2kzKTogTGlrZXdpc2UuCisKK1NhdCBNYXkgMTYgMDc6NDc6MTEgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuaDogT3ZlcnJpZGUgU0VUX0FTTV9PUCBpbiBzdnI0LmguIAorCitTYXQgTWF5IDE2IDAwOjEwOjA5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55IChwYXJtbGlzdF8xKTogQWRkIHBlZGFudGljIHdhcm5pbmcuCisKK0ZyaSBNYXkgMTUgMTM6MTA6MDcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUgKGkzODYtKi1zY28zLjJ2NCopOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy5zdWI6IEZvciBTQ08sIHByb2R1Y2UgLXNjbzMuMnYyLiAgRm9yIElTQywgbWFrZSBqdXN0IC1pc2MuCisKKwkqIGRieG91dC5jIChEQlhfVFlQRV9ERUNMX1NUQUJTX0NPREUpOiBXYXMgREJYX0RFQ0xfU1RBQlNfQ09ERS4KKwkoREJYX09VVFBVVF9FTlVNKTogUGFzcyB0eXBlIGFzIGFyZzsgbWFrZSBpdCBkbyB0aGUgd2hvbGUgam9iLgorCisJKiBzdnI0LmggKEFTTV9CWVRFX09QKTogRGVsZXRlIHRoZSB0YWIuCisJKFNFVF9BU01fT1ApOiBOZXcgZGVmaW5pdGlvbi4KKworCSogTWFrZWZpbGUuaW4gKGdjYy54dGFyKTogRGVwZW5kIG9uIGRvYy4KKwkoZ2NjLmluZm8sIGNwcC5pbmZvKTogRHVwbGljYXRlIHJ1bGVzIGRlbGV0ZWQuCisKKwkqIGkzODYuYyAoaGFuZGxlX3ByYWdtYSk6IFVzZSBTRVRfQVNNX09QLCBub3QgREVGX0FTTV9PUC4KKworRnJpIE1heSAxNSAxMjozODoxOCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERvbid0IHNldCBuZXdfYmxvY2sgd2hlbiB3aXRoaW4gYQorCXNlcXVlbmNlLiAgU2V0IGl0IGFmdGVyIHRoZSBsYXN0IGluc24gb2YgdGhlIHNlcXVlbmNlLgorCitGcmkgTWF5IDE1IDA3OjIzOjA5IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKG04OGtfaGFuZGxlX3ByYWdtYV90b2tlbiwgb3V0cHV0X3Nob3J0X2JyYW5jaF9kZWZzKToKKwlVc2UgU0VUX0FTTV9PUC4KKworRnJpIE1heSAxNSAxNDo1NDo1NCAxOTkyICBIb3dhcmQgQ2h1IChoeWNAaGFuYXVtYS5qcGwubmFzYS5nb3YpCisKKwkqIGZ4MjgwMC5oOiBSZXBsYWNlIFJvbiBHdWlsbWV0dGUncyB2ZXJzaW9uIHdpdGggd29ya2luZyB2ZXJzaW9uLgorCVRlc3RlZCBvbiBDb25jZW50cml4IDIuMSBhbmQgMi4yLgorCisJKiBpODYwLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogQ29tcGFyaXNvbiBvZiBjb25zdDBfcnR4IHdhcyBpbiB0aGUKKwl3cm9uZyBwbGFjZSBhbmQgd291bGQgbmV2ZXIgYmUgcmVhY2hlZC4gQWRkZWQgY2hlY2sgZm9yIG5lZ2F0aXZlCisJc2hvcnQgaW50IGNvbnN0YW50cy4KKwkob3V0cHV0X3NpemVfZm9yX2Jsb2NrX21vdmUpOiBjYWxsIHNpbmdsZW1vdmVfc3RyaW5nIGluc3RlYWQgb2YKKwlqdXN0IGVtaXR0aW5nIGEgbW92LgorCShzZm1vZGVfY29uc3RhbnRfdG9fdWxvbmcpOiBlbGltaW5hdGUgYm9ndXMgIiMgZXJyb3IiIGRpcmVjdGl2ZS4KKworCSogdC1meDI4MDAsIHgtZngyODAwLCB4bS1meDI4MDAuaDogTmV3IGZpbGVzLgorCSogY29uZmlndXJlOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisKKwkqIGRieG91dC5jIChEQlhfTUVNUEFSTV9TVEFCU19MRVRURVIpOiBOZXcgbWFjcm8uCisJKGRieG91dF90eXBlKTogQ2hlY2sgZm9yIERCWF9PVVRQVVRfRU5VTS4KKwkoZGJ4b3V0X3Bhcm1zKTogVXNlIERCWF9NRU1QQVJNX1NUQUJTX0xFVFRFUi4KKwkoZGJ4b3V0X2Jsb2NrKTogQ2hlY2sgZm9yIERCWF9PVVRQVVRfTEJSQUMsIERCWF9PVVRQVVRfUkJSQUMuCisKK1RodSBNYXkgMTQgMTg6MjY6MTMgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyY3Y0LmggKEFTTV9PVVRQVVRfQUxJR05fSlVNUF9UQUJMRSwgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCwKKwlBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiBEZWxldGUuCisKK1RodSBNYXkgMTQgMTM6NTE6MDEgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogIFVzZSBJT19CVUZGRVJfU0laRSBmb3IgZmlucHV0LgorCSogeG0taTM4NnNjby5oLCB4bS1yczYwMDAuaCAoSU9fQlVGRkVSX1NJWkUpOiBEZWZpbmVkLgorCitUaHUgTWF5IDE0IDE1OjIxOjI0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLnN1YjogUmVjb2duaXplICJub25lIiBhcyBhIHZhbGlkIG9zLgorCitUaHUgTWF5IDE0IDEzOjM3OjUyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogTWFrZSBuZXcgc3RhY2sgc2xvdCBpZiBlbnRyeSBzdGFjaworCXNsb3QgaXNuJ3QgYWxpZ25lZCBhcyBtdWNoIGFzIHRoZSBtb2RlIHdhbnRzLgorCUFuZCBkb24ndCBtYWtlIGFuIGVxdiBmb3IgZW50cnlfcGFybSBpbiB0aGF0IGNhc2UuCisJKiBzcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBBc3N1bWUgbWVtb3J5IGFsd2F5cyBvayBmb3IgbGRkLCBzdGQKKwlleGNlcHQgd2hlbiBleHBsaWNpdCBvZmZzZXQgZnJvbSBzdGFjay4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6CisJRG9uJ3Qgd2FybiBhYm91dCBxdWFsaWZpZXIgbWlzbWF0Y2ggZm9yIGEgZnVuY3Rpb24uCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEdpdmUgZXhwbGljaXQgbGlzdCBvZiB0eXBlcyB0byBwcm9tb3RlCisJdG8gaW50IChhbmQgc29tZXRpbWVzIHRvIHVuc2lnbmVkIGludCkgZm9yIHBhcm1zLgorCisJKiBNYWtlZmlsZS5pbiAoZ2NjLmluZm8sIGNwcC5pbmZvKTogTmV3IHRhcmdldHMuCisJKGdjYy54dGFyKTogRGVwZW5kIG9uIHRob3NlLgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBEb24ndCBmYWlsIHRvIGNvbXB1dGUKKwlhbGwgb2YgYSBESW1vZGUgdmFsdWUuCisKKwkqIGR3YXJmb3V0LmMgKFNFVF9BU01fT1ApOiBSZW5hbWVkIGZyb20gREVGX0FTTV9PUC4KKwkoQVNNX09VVFBVVF9ERUYpOiBVc2UgU0VUX0FTTV9PUC4KKwkqIG04OGsuaCAoU0VUX0FTTV9PUCk6IFJlbmFtZWQgZnJvbSBERUZfQVNNX09QLgorCSogc3BhcmN2NC5oIChERUZfQVNNX09QKTogTm8gbmVlZCBmb3IgI3VuZGVmLgorCisJKiBjY2NwLmMgKG1haW4pOiBIYW5kbGUgLWlwcmVmaXggb3B0aW9uIGluc3RlYWQgb2YgR0NDX0VYRUNfUFJFRklYLgorCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IFNldCBnY2NfZXhlY19wcmVmaXguCisJKGRvX3NwZWNfMSk6IEhhbmRsZSAlSS4KKwkoZGVmYXVsdF9jb21waWxlcnMpOiBVc2UgJUkgd2hlbiBydW5uaW5nIGNwcC4KKworCSogcHJvdG9pemUuYyAoc2F2ZXN0cmluZywgc2F2ZXN0cmluZzIpOiBDaGFuZ2UgcGFybSBkZWNscy4KKworCSogaTg2MC5oLCB3ZTMyay5oIChDT05TVF9DT1NUUyk6IEFkZCBtaXNzaW5nIHBhcm0gT1VURVJfQ09ERS4KKworCSogaTM4NnY0LmggKERFRl9BU01fT1AsIFdFQUtfQVNNX09QKTogRGVsZXRlZC4KKworV2VkIE1heSAxMyAxNzoyMzo0NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJ0bC5jIChpbml0X3J0bCk6IEZvciBieXRlX21vZGUgYW5kIHdvcmRfbW9kZSwgdXNlIGZpcnN0IGZpdC4KKworCSogcHJvdG9pemUuYyAobXVuZ2VfY29tcGlsZV9wYXJhbXMpOiBJbmNyZWFzZSBzaXplIG9mIHRlbXBfcGFyYW1zLgorCitXZWQgTWF5IDEzIDEzOjMwOjQwIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogaTM4NnNjbzQuaDogTmV3IGZpbGUuCisKK1R1ZSBNYXkgMTIgMjM6MjM6NTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9pbmNyZW1lbnQpOiBBIHN1YnJlZyBhcyBvcDAgaXMgbm90IG5lY2Vzc2FyaWx5IGEgY29weS4KKwlUcmVhdCBzdWJyZWdzIGxpa2UgcmVncy4KKworCSogYy10eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IERpZmZlcmVudCBtZXNzYWdlcyBmb3IgcmVnIHZhcgorCWlmIHJlYXNvbiBpcyBhIHVzZSBpbiBhIG5lc3RlZCBmdW5jdGlvbi4KKworVHVlIE1heSAxMiAxNDoyODoyMiAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZ2VuLXJ0eCkKKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IC1zYXZlLXRlbXBzIHVzZXMgYSBzd2l0Y2hlcyBlbnRyeS4KKworVHVlIE1heSAxMiAyMToyNDo0NiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbGxlY3QyLmMgKHZmb3JrKTogRGVjbGFyYXRpb24gZGVsZXRlZC4KKworVHVlIE1heSAxMiAwNjoxNjo0OSAxOTkyICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzQGFwcGxpLnNlKQorCisJKiB0b3dlci1hcy5oOiBBZGRlZCBzdXBwb3J0IGZvciBiYXNpYyBibG9jayBwcm9maWxpbmcuCisKK1R1ZSBNYXkgMTIgMDI6MzQ6NDUgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiB1bngzODYuaCAoQVMzX1NISUZUX0RPVUJMRSk6IE5ldyBtYWNybyB0byBwcmludCBzaGlmdC1kb3VibGUKKwlvcGNvZGVzLgorCisJKiBpMzg2Z2FzLmggKEFTM19TSElGVF9ET1VCTEUpOiBSZWRlZmluZSBmb3IgR0FTIHNoaWZ0LWRvdWJsZSBydWxlcy4KKwkoR0FTX01ORU1PTklDUyk6IE5ldyBtYWNybyB0byBmb3JjZSB1c2Ugb2Ygb3Bjb2RlcyBmb3IgR0FTLgorCSogc2VxMzg2Z2FzLmggKEFTM19TSElGVF9ET1VCTEUsR0FTX01ORU1PTklDUyk6IExpa2V3aXNlLgorCisJKiBpMzg2LmMgKHByaW50X29wZXJhbmQpOiBVc2UgR0FTX01ORU1PTklDUyB0byBjaG9vc2UgbG9uZy1sb25nCisJb3Bjb2RlIHN1ZmZpeC4KKworCSogaTM4Ni5tZCAoYXNobGRpMyxhc2hyZGkzLGxzaHJkaTMpOiBTcGxpdCBpbnRvIHNlcGFyYXRlCisJcmVjb2duaXplcnMgZm9yIGNvbnN0YW50IGFuZCB2YXJpYWJsZSBzaGlmdHMuCisJVXNlIEFTM19TSElGVF9ET1VCTEUgZm9yIHZhcmlhYmxlIHNoaWZ0cy4KKwkoYWxsIHNoaWZ0cyBhbmQgcm90YXRlcyk6IERvbid0IGFsbG93IG1lbW9yeSBvcGVyYW5kcyBmb3Igc2hpZnQKKwljb3VudC4KKwkoYml0IHNldC9jbGVhcik6IERvbid0IGFsbG93IG5vbi1DT05TVF9JTlQgY29uc3RhbnRzIGFzIFNFVF9TUkMuCisJKG1vdnN0cnNpLGNtcHN0cnNpLHN0cmxlbnNpKTogQWxsb3cgYW55IGFkZHJlc3Nfb3BlcmFuZCB3aXRoaW4KKwlhIE1FTTpCTEssIG5vdCBqdXN0IHJlZ2lzdGVyX29wZXJhbmQuCisJKG1vdnN0cnNpKTogUmV3cml0ZSB0byBhdm9pZCBtYXRjaF9kdXAgb24gdGhlIGFkZHJlc3Nfb3BlcmFuZAorCWFib3ZlLgorCitNb24gTWF5IDExIDIzOjMxOjQ3IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAYWxiZXJ0LmdudS5haS5taXQuZWR1KQorCisJU3VuIE1heSAxMCAxODo0NDo1OCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9tZXRob2RzKTogIE9ubHkgZW1pdCBmaW5hbCBzZW1pLWNvbG9uCisJb2YgbWV0aG9kIGxpc3Qgb2Ygd2UgaGF2ZSBlbWl0dGVkIGFueSBtZXRob2RzLiAgKFRoZSBjb252ZXJzZQorCW9mIG9ubHkgZW1pdHRpbmcgdGhlIG9wZXJhdGlvbiBuYW1lIGluaXRpYWxseSBpZiBuZWVkZWQuKQorCitNb24gTWF5IDExIDIyOjQ1OjE4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jLCByZWxvYWQxLmM6IFVzZSByZWdfb3ZlcmxhcF9tZW50aW9uZWRfZm9yX3JlbG9hZF9wIGFuZAorCXJlZmVyc190b19yZWdub19mb3JfcmVsb2FkX3AgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIHZlcnNpb25zLgorCSogcmVsb2FkLmMgKHJlZ19vdmVybGFwX21lbnRpb25lZF9mb3JfcmVsb2FkX3ApOiBOZXcgZnVuY3Rpb24uCisKK01vbiBNYXkgMTEgMjI6NDQ6NTAgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6ICBDb3B5IExBQkVMX05BTUVzIHRvIG5ldworCWNvcGllcyBvZiBDT0RFX0xBQkVMcy4KKwkqIHRyZWUuYyAoZGVjbF9mdW5jdGlvbl9jb250ZXh0LCBkZWNsX3R5cGVfY29udGV4dCk6ICBSZW5hbWVkIGBmbmRlY2wnCisJZm9ybWFsIHBhcmFtZXRlciB0byBgZGVjbCcgdGhyb3VnaG91dCB0aGVzZSBmdW5jdGlvbnMuCisKK01vbiBNYXkgMTEgMTg6NDM6NDUgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNjY3AuYzogKGRlcHNfZmlsZSk6IERlbGV0ZWQuCisJKG1haW4pOiBEbyBub3Qgb3BlbiBkZXBzX2ZpbGUgdW50aWwgbmVlZGVkLgorCUNoZWNrIGVycm9yIHN0YXR1cyBvZiBkZXBfc3RyZWFtIGFuZCBzdGRvdXQgbW9yZSBjYXJlZnVsbHkuCisJKHRpbWVzdGFtcCk6IE5ldyBmdW5jdGlvbjsgYXZvaWRzIGNhbGxpbmcgbG9jYWx0aW1lIHVubGVzcyBuZWVkZWQuCisJKHNwZWNpYWxfc3ltYm9sLCBpbml0aWFsaXplX2J1aWx0aW5zKTogVXNlIG5ldyB0aW1lc3RhbXAgZnVuY3Rpb24uCisKK01vbiBNYXkgMTEgMjA6NDg6MjYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnZW5peC5oOiBBZGRlZCAjZXJyb3IsIHNpbmNlIHRoaXMgaGFzbid0IGJlZW4gdXBkYXRlZC4KKworTW9uIE1heSAxMSAxNDozMzozMiAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoaXNfcHNldWRvX3JlZyk6ICBOZXcgZnVuY3Rpb24uCisJKGxvY2F0aW9uX2F0dHJpYnV0ZSk6ICBVc2UgYGlzX3BzZXVkb19yZWcnLgorCShsb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiAgVXNlIERFQ0xfSU5DT01JTkdfUlRMIGFzIHRoZQorCWJhc2lzIGZvciBmb3JtaW5nIHRoZSBsb2NhdGlvbiBkZWNzcmlwdG9yIGZvciBhbnkgcmVnaXN0ZXIgcGFyYW1ldGVyCisJd2hpY2ggd2FzIG9wdGltaXplZCBpbnRvIG5vbi1leGl0YW5jZS4KKworCSogZHdhcmZvdXQuYyAoRFdBUkZfVkVSU0lPTik6ICBOZXcgKGRlZmF1bHQpIGRlZmluaXRpb24uCisJKEFTTV9PVVRQVVRfRFdBUkZfU1RBQ0tfT1AsIEFTTV9PVVRQVVRfRFdBUkZfRk1UX0JZVEUsCisJQVNNX09VVFBVVF9EV0FSRl9UWVBFX01PRElGSUVSLCBBU01fT1VUUFVUX0RXQVJGX0RBVEExKTogIE91dHB1dCB0YWIKKwliZWZvcmUgQVNNX0JZVEVfT1AuCisJKEFTTV9PVVRQVVRfRFdBUkZfQUREUl9DT05TVCk6ICBFbmNhcHN1bGF0ZSBhbGwgc3RhdGVtZW50cyBpbiBhCisJYGRvIHsgLi4uIH0gd2hpbGUgKDApJworCShkYXRhX21lbWJlcl9sb2NhdGlvbl9hdHRyaWJ1dGUsIGJpdF9vZmZzZXRfYXR0cmlidXRlKTogIEJvdGggZml4ZWQKKwl0byB1c2UgYWxpZ25tZW50IG9mIGRlY2xhcmVkIHR5cGUgb2YgZmllbGQgYXMgdGhlICJjb250YWluaW5nIG9iamVjdCIKKwlzaXplLgorCShsb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiAgRml4ZWQgdG8gdXNlIERFQ0xfSU5DT01JTkdfUlRMCisJb25seSBmb3IgcGFybXMgcGFzc2VkIGluIG1lbW9yeS4KKwkob3V0cHV0X2RlY2wpOiAgRG9uJ3Qgb3V0cHV0IERJRXMgZm9yIGV4dGVybmFscyBpZiBEV0FSRl9WRVJTSU9OID09IDEuCisKK1N1biBNYXkgMTAgMTc6MTg6MzMgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogcGEuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgZm9yIEJTRCBoZXJlLgorCVJlbW92ZSBjb25kaXRpb25hbCAjaWZkZWYgaHB1eC4KKwkqIHBhLWhwdXguaCwgcGEtZ2hwdXguaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgZm9yIGhwdXggaGVyZS4KKwkqIHBhLmggKENQUF9TUEVDKTogRGVmaW5lLgorCitTdW4gTWF5IDEwIDEyOjEyOjA2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogRGVsZXRlIHVucHJvdG9pemUuYy4KKworCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IFNldCBNRU1fSU5fU1RSVUNUX1AgcmlnaHQgaW4gZHluYW1pYyBjYXNlLgorCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWYpOiBIYW5kbGUgQVJSQVlfUkVGIG9ubHkgaWYgY29uc3RhbnQgb2Zmc2V0LgorCUhhbmRsZSBub24tUExVU19FWFBSIHZhcmlhYmxlIG9mZnNldCBieSBhc3N1bWluZyBtdWx0aXBsZSBvZiBieXRlLgorCShleHBhbmRfYXNzaWdubWVudCwgZXhwYW5kX2V4cHIpOiBGaXggZ2VuX3J0eCBhZGRlZCBpbiBsYXN0IGNoYW5nZS4KKworU2F0IE1heSAgOSAwMjozOTo1OCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IE5ldyBvdXRwdXQgYXJnIHBvZmZzZXQuCisJKGV4cGFuZF9hc3NpZ25tZW50LCBleHBhbmRfZXhwcik6IFBhc3MgbmV3IGFyZy4gIEhhbmRsZSBub256ZXJvIG9mZnNldC4KKwkoZG9fanVtcCk6IFBhc3MgbmV3IGFyZyBidXQgaWdub3JlIHJlc3VsdC4KKwkqIGZvbGQtY29uc3QuYyAob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUsIGRlY29kZV9maWVsZF9yZWZlcmVuY2UpOgorCVBhc3MgdGhlIG5ldyBhcmcuICBKdXN0IHJldHVybiAwIGlmIG9mZnNldCBjb21lcyBiYWNrIG5vbnplcm8uCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IEFsd2F5cyB0ZXN0IHZhbHVlbm8gPj0gMC4KKworCSogYy1hdXgtaW5mby5jOiBEb24ndCBpbmNsdWRlIHBhcmFtLmggb3IgZXJybm8uaDsgZG9uJ3QgZGVjbGFyZSBlcnJuby4KKworCSogcnRsLmMgKHJlYWRfcnR4KTogRml4IGVycm9yIGluIHByZXYgY2hhbmdlLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogSGFuZGxlIC1wcmludC1saWJnY2MtZmlsZS1uYW1lLgorCShtYWluKTogSGFuZGxlIHByaW50X2xpYmdjY19maWxlX25hbWUgYnkgcHJpbnRpbmcgdGhlIG5hbWUuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogVXNlIFRZUEVfUFJFQ0lTSU9OIHRvIHNlZSB3aGV0aGVyIAorCWJpdGZpZWxkJ3MgdHlwZSBpcyBuYXJyb3dlciB0aGFuIGludCwgZm9yIHByb21vdGluZyB0byBpbnQuCisKKwkqIGNjY3AuYyAoc3RydWN0IGRlZmluaXRpb24sIHN0cnVjdCByZWZsaXN0KTogTmV3IGZpZWxkIGByZXN0X2FyZ3MnLgorCShzdHJ1Y3QgYXJnbGlzdCk6IExpa2V3aXNlLgorCShyZXN0X2V4dGVuc2lvbiwgUkVTVF9FWFRFTlNJT05fTEVOR1RIKTogTmV3IHZhciBhbmQgbWFjcm8uCisJKGNyZWF0ZV9kZWZuaXRpb24pOiBSZWNvZ25pemUgYC4uLicgYW5kIHNldCBmbGFnIGluIGFyZ2xpc3QuCisJKGNvbGxlY3RfZXhwYW5zaW9uKTogUHJvcGFnYXRlIGZsYWcgdG8gZGVmaW5pdGlvbi4KKwkobWFjcm9leHBhbmQpOiBDaGVjayBmbGFnIHdoZW4gcGFyc2luZyBhcmdsaXN0LgorCVNwZWNpYWwgaGFuZGxpbmcgZm9yICMjIG5leHQgdG8gYSByZXN0IGFyZy4KKwkobWFjYXJnLCBtYWNhcmcxKTogTmV3IGFyZyByZXN0X2FyZyBhZmZlY3RzIHBhcnNpbmcgaW4gbWFjYXJnMS4KKworCSogZ2VuYXR0cnRhYi5jOiBNaXNjIHNwZWVkdXBzIGFuZCBzaXplIHJlZHVjdGlvbnMuCisJKGNoZWNrX2F0dHJfdGVzdCk6IFNldCBSVFhfVU5DSEFOR0lOR19QIGZvciB0ZXN0cyBvZiBjb25zdCBhdHRyaWJ1dGVzLgorCUFsc28gZm9yIHN5bWJvbF9yZWYgYW5kIGNvbXBhcmlzb24gb3BzLgorCShtYWtlX2Nhbm9uaWNhbCk6IExpa2V3aXNlLiAgQWxzbyBjaGVjayBmb3IgZGVnZW5lcmF0ZSBjb25kIHZhbHVlcy4KKwkob3BlcmF0ZV9leHAsIHNpbXBsaWZ5X2NvbmQsIGluc2VydF9yaWdodF9zaWRlLCBldmFsdWF0ZV9lcV9hdHRyKToKKwlBdm9pZCBjb3B5aW5nIGluIHNvbWUgY2FzZXMuICBEZXRlY3Qgb3Bwb3J0dW5pdGllcyB0byBzaW1wbGlmeS4KKwkoY29tcHV0ZV9hbHRlcm5hdGl2ZV9tYXNrKTogQXZvaWQgYXRvaSBpbiBtb3N0IGNhc2VzLgorCShjb3B5X3J0eF91bmNoYW5naW5nKTogTmV3IGZ1bmN0aW9uLgorCShldmFsdWF0ZV9lcV9hdHRyLCBzaW1wbGlmeV90ZXN0X2V4cCk6IFVzZSB0aGF0LgorCisJKiBnZW5hdHRydGFiLmMgKG9wdGltaXplX2F0dHJzKTogV29yayBwYXR0ZXJuIGJ5IHBhdHRlcm4sCisJZG9pbmcgYWxsIHRoZSB3b3JrIGZvciBlYWNoIHBhdHRlcm4gYmVmb3JlIG1vdmluZyBvbi4KKwlVc2UgdGVtcF9vYnN0YWNrIGR1cmluZyBzaW1wbGlmaWNhdGlvbiwgdGhlbiBjb3B5IHRoZSBlbmQgcmVzdWx0LgorCSh0ZW1wX29ic3RhY2spOiBOZXcgb2JzdGFjay4KKwkoY2xlYXJfc3RydWN0X2ZsYWcpOiBOZXcgc3Vicm91dGluZS4KKwkoU0lNUExJRllfVEVTVF9FWFApOiBUZXN0IE1FTV9JTl9TVFJVQ1RfUC4KKwkoc2ltcGxpZnlfdGVzdF9leHApOiBBZGQgY29kZSBmb3IgZGVidWdnaW5nIHN0b3AuCisJQXZvaWQgY29uc2luZyB3aGVuIHBvc3NpYmxlOyBzb21ldGltZXMgZnJlZSBzdG9yYWdlLgorCUNoZWNrIE1FTV9JTl9TVFJVQ1RfUC4gIEFkZCBzaG9ydGN1dHMuCisKKwkqIGdlbmF0dHJ0YWIuYzogQWRkIHNpbXBsaWZpY2F0aW9uIHBlciBhbHRlcm5hdGl2ZSAobm90IGluIHVzZSBub3cpLgorCShpbnNuX25fYWx0ZXJuYXRpdmVzKTogTmV3IGFycmF5IGZpbGxlZCBpbiBieSBnZW5faW5zbi4KKwkoY3VycmVudF9hbHRlcm5hdGl2ZV9zdHJpbmcpOiBOb256ZXJvIG1lYW5zIHdlIGFyZSBzaW1wbGlmeWluZyAKKwlmb3IgYSBwYXJ0aWN1bGFyIGFsdGVybmF0aXZlLiAgVmFsdWUgaXMgc3RyaW5nIGZvciB0aGF0IG51bWVyYWwuCisJKFNJTVBMSUZZX0FMVEVSTkFUSVZFKTogTmV3IG1hY3JvIHNpbXBsaWZpZXMgZXFfYXR0ciBmb3IgYWx0ZXJuYXRpdmUuCisJKGV2YWx1YXRlX2VxX2F0dHIsIHNpbXBsaWZ5X3Rlc3RfZXhwKTogQ2FsbCBTSU1QTElGWV9BTFRFUk5BVElWRS4KKwkoc2ltcGxpZnlfYnlfYWx0ZXJuYXRpdmVzLCBjb3VudF9zdWJfcnR4cyk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGdlbmF0dHJ0YWIuYyAoYXR0cnMpOiBOb3cgYW4gYXJyYXkgaW5kZXhlZCBieSBmaXJzdCBjaGFyLgorCShNQVhfQVRUUlNfSU5ERVgpOiBMZW5ndGggb2YgYWJvdmUuCisJKGZpbmRfYXR0ciwgbWFpbik6IFVzZSB0aGF0IG5ldyBkYXRhIHN0cnVjdHVyZS4KKworCSogZ2VuYXR0cnRhYi5jOiBDbGFyaWZ5IHVzZSBvZiBoYXNoLWNvbnNpbmc6CisJKGhhc2hfb2JzdGFjayk6IE5ldyBvYnN0YWNrLgorCShhdHRyX2hhc2hfYWRkX3J0eCwgYXR0cl9oYXNoX2FkZF9zdHJpbmcpOiBVc2UgaGFzaF9vYnN0YWNrLgorCShhdHRyX3J0eCk6IFVzZSBoYXNoX29ic3RhY2sgaWYgb2JqZWN0IGlzIGhhc2hlZC4KKwlTZXQgUlRYX0lOVEVHUkFURURfUCBpZiBvYmplY3QgaXMgaGFzaGVkLgorCURvbid0IGhhc2ggb2JqZWN0IGlmIHN1YmV4cHJlc3Npb25zIGFyZW4ndCBoYXNoZWQuCisJSWYgbWFraW5nIHN5bWJvbF9yZWYsIGhhc2ggdGhlIHN5bWJvbCBuYW1lLgorCVVuaXF1aXplIGNvbnN0X2ludCB3aXRoIHZhbHVlIDAgb3IgMS4KKwkoYXR0cl9lcXVhbF9wKTogTmV3IGNvbXBhcmUgZnVuY3Rpb247IHVzZXMgUlRYX0lOVEVHUkFURURfUC4KKwkoc2ltcGxpZnlfYW5kX3RyZWUsIHNpbXBsaWZ5X29yX3RyZWUsIHNpbXBsaWZ5X3Rlc3RfZXhwKTogVXNlIHRoYXQuCisJKGF0dHJfY29weV9ydHgpOiBOZXc7IGNvcHkgYWxsIGJ1dCBoYXNoZWQgc3ViZXhwcmVzc2lvbnMuCisJKGF0dHJfZXEpOiBOZXcgZnVuY3Rpb24uCisJKGF0dHJfbnVtZXJhbCk6IE5ldyBmdW5jdGlvbi4KKwkoY2hlY2tfYXR0cl90ZXN0KTogVXNlIGF0dHJfZXEuICBIYXNoIHN5bWJvbF9yZWYgYW5kIGNvbXBhcmlzb24gb3BzLgorCShjaGVja19hdHRyX3ZhbHVlKTogUmV0dXJuIG1vZGlmaWVkIHZhbHVlLiAgQ2FsbGVycyBjaGFuZ2VkLgorCUhhc2ggc3ltYm9sX3JlZi4KKwkoY29udmVydF9zZXRfYXR0cl9hbHRlcm5hdGl2ZSk6IFVzZSBhdHRyX2VxIGFuZCBhdHRyX251bWVyYWwuCisJKGNvbnZlcnRfY29uc3Rfc3ltYm9sX3JlZik6IEhhc2ggc3ltYm9sX3JlZiBhbmQgZXEuCisJKG1ha2VfYWx0ZXJuYXRpdmVfY29tcGFyZSk6IFVzZSBhdHRyX251bWVyYWwuCisJKGFsdGVybmF0aXZlX25hbWUpOiBGaWxsIGluIHVzaW5nIGhhc2hlci4KKwkoY29weV9ib29sZWFuKTogSGFzaCBhIGJvb2xlYW4gZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS4KKworRnJpIE1heSAgOCAyMzoxMDoxOCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKGFzaGxkaTMsYXNocmRpMyxsc2hyZGkzKTogRml4IHR5cG8gaW4gb3V0cHV0IHRlbXBsYXRlLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBIYW5kbGUgU1VCUkVHcyBpbiBDTE9CQkVScy4KKworRnJpIE1heSAgOCAxNDo1NToxNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChQUkVNQURFX0FUVFJUQUIsIFBSRU1BREVfQVRUUlRBQl9NRCk6IE5ldyB2YXJzLgorCShzdGFtcC1hdHRydGFiKTogVXNlIHRoZW0sIHRvIHVzZSBwcmVzdXBwbGllZCBmaWxlIGlmIHN1aXRhYmxlLgorCSogdC1taXBzLCB0LWRlY3N0YXRuLCB0LWRlY3Jvc2UgKFBSRU1BREVfQVRUUlRBQiwgUFJFTUFERV9BVFRSVEFCX01EKToKKwlEZWZpbmVkLgorCSogbWlwcy1hdC5tZCwgbWlwcy1hdC5jOiBOZXcgZmlsZXMuCisKKwkqIGMtY29tbW9uLmMgKHNob3J0ZW5fY29tcGFyZSk6IEV4dGVuZCAiYWx3YXlzIDAiIHdhcm5pbmcKKwl0byBmZW5jZXBvc3QgY2FzZSB3aXRoIGxlIG9yIGdlLgorCisJKiBjY2NwLmMgKHBhc3NfdGhydV9kaXJlY3RpdmUpOiBEb24ndCBvdXRwdXQgYSBuZXdsaW5lLgorCShpbml0aWFsaXplX2J1aWx0aW5zKTogQWRkIGV4cGxpY2l0IG5ld2xpbmVzIGluIHNwcmludGZzLgorCitGcmkgTWF5ICA4IDE0OjQ5OjEyIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChhZGRkaTMpOiBGb3JjZSAtMzI3NjggaW50byBhIHJlZ2lzdGVyLCBzaW5jZSB0aGUKKwlkZWZpbmVfaW5zbidzIHdvbid0IGFjY2VwdCB0aGF0IG9uZSB2YWx1ZS4KKwkoYWxsIGF0dHJpYnV0ZXMpOiBXaGVyZSBhbiBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGluIGFsbAorCWFsdGVybmF0aXZlcywgZG9uJ3QgdXNlIHRoZSBhbHRlcm5hdGl2ZSBub3RhdGlvbiwgc2luY2UgaXQgd2lsbCBtYWtlCisJZ2VuYXR0cnRhYiBzb21ld2hhdCBmYXN0ZXIuCisKKwkqIHJ0bC5jIChyZWFkX3J0eCk6IFVzZSB0aGUgY3VycmVudCBvYnN0YWNrIHRvIHJlYWQgaW4gc3RyaW5ncywKKwlyYXRoZXIgdGhhbiByZXBlYXRlZCBtYWxsb2MvcmVhbGxvYydzLgorCitUaHUgTWF5ICA3IDE4OjQxOjAzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBOZXZlciBzZXQgbXVzdF9wcmVhbGxvY2F0ZSBpZiBubyBzdGFjayBhcmdzLgorCitUaHUgTWF5ICA3IDE2OjUyOjU2IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhMSo6IE5ldyBuYW1lcyBmb3IgcGExLjEqLgorCSogY29uZmlndXJlOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisKKwkqIG02OGsubWQgKHU/bXVsc2lkaTMpOiBEb24ndCBwZXJtaXQgaW1tZWRpYXRlcyBmb3Igb3BlcmFuZCAyLgorCSh1P211bHNpZGkzIHJlY29nbml6ZXJzKTogU3BsaXQgaW50byBpbW1lZGlhdGUvbm9uaW1tZWRpYXRlIGNhc2VzLgorCSogbTY4ay5tZCAoe3plcm8sc2lnbn1fZXh0ZW5kIHJlY29nbml6ZXJzKTogUmVtb3ZlIGBuJyBmcm9tIGNvbnN0cmFpbnQKKwlpZiBwcmVkaWNhdGUgZG9lc24ndCBwZXJtaXQgY29uc3RhbnRzLgorCitUaHUgTWF5ICA3IDE1OjQyOjMyIDE5OTIgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbiBhdCBvc2Yub3JnKQorCisJKiBpMzg2cm9zZS5oIChBU01fT1VUUFVUX0ZMT0FULCBBU01fT1VUUFVUX0RPVUJMRSk6IEZpeCB0aGVzZSB0bworCWF2b2lkIHByaW50aW5nIE5hTnMsIGFuZCBpbmZpbml0eS4KKwkoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIE9TRiBkZXBlbmRlbnQgc3dpdGNoZXMgZm9yIGhhbGYtcGljCisJc3VwcG9ydC4KKwkoTUFTS19IQUxGX1BJQywgVEFSR0VUX0hBTEZfUElDKTogTGlrZXdpc2UuCisJKENDMV9TUEVDKTogTWFwIHBpYy1ub25lLCBwaWMtbGliLCBwaWMtZXh0ZXJuIGFuZCBwaWMtY2FsbHMKKwl0byBhcHByb3ByaWF0ZSBoYWxmLXBpYyBjb21waWxlciBzd2l0Y2hlcy4KKwkoTElOS19TUEVDKTogSWYgbm90IC1ub3NocmxpYiBvciAtcGljLW5vbmUsIHBhc3MgLXdhcm5fbm9waWMuCisJQWxsb3cgdXNlciB0byBwYXNzIC1ub3NocmxpYiBkaXJlY3RseS4KKwkoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBDdXN0b21pemUgbGV2ZWxzIGZvciBPU0YuCisJKENPTlNUQU5UX0FERFJFU1NfUDogQWRkIGNoZWNrIHRvIGRldGVybWluZSBpZiB3ZSBoYXZlIGEKKwloYWxmLXBpYyBjb25zdGFudC4KKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgaGFsZi1waWMKKwlkZWNsYXJhdGlvbi4KKwkoQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUpOiBPdXRwdXQgdGhlIGxhYmVsIChkZWZpbml0aW9uKSBmb3IgYQorCW9iamVjdCBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGhhbGYtcGljLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogTGlrZXdpc2UgYnV0IGZvciBmdW5jdGlvbnMuCisKK1RodSBNYXkgIDcgMTU6NTY6NTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUmVtb3ZlciB1bnRlcm0gY29tbWVudCBmcm9tIHJlY2VudCBjaGFuZ2VzLgorCisJKiBnZW5hdHRydGFiLmMgKGNvbXB1dGVfYWx0ZXJuYXRpdmVfbWFzayk6IFVzdWFsbHkgYnlwYXNzIGF0b2kuCisKK1RodSBNYXkgIDcgMTU6NTY6NTEgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGdlbmF0dHJ0YWIuYyAoZmlsbF9hdHRyKTogRG8gbm90aGluZyBmb3IgY29uc3RhbnQgYXR0cmlidXRlLgorCShjaGVja19hdHRyX3Rlc3QpOiBTZXQgdW5jaGFuZ2luZyBmbGFnIGZvciBjb25zdGFudCBhdHRyaWJ1dGUuCisJKHdyaXRlX3Rlc3RfZXhwcik6IEV4cGFuZCBjb25zdGFudCBhdHRyaWJ1dGVzIGhlcmUuCisKK1RodSBNYXkgIDcgMDY6MDE6NDYgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGRlY3Jvc2UuaCAoQ1BQX1NQRUMpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworV2VkIE1heSAgNiAxNzozOTozMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbnZleC5oIChIQVZFX1NUUkVSUk9SLCB2ZnByaW50ZiwgV1RFUk1TSUcsIFdFWElUU1RBVFVTKTogRGVsZXRlZC4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogRG9uJ3QgcmVwZWF0IGEgY3Jvc3MtcmVmZXJlbmNlCisJbWVyZWx5IGJlY2F1c2UgZnVsbCBpcyBub256ZXJvLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6CisJQXZvaWQgcm91bmRpbmcgZXJyb3IgdGVzdGluZyBjb3B5X3RvX2V2YWx1YXRlX3NpemUuCisKKwkqIHhtLW1pcHNic2RuLmg6IFJlbmFtZWQgZnJvbSB4bS1taXBzYnNkbmV3cy5oLgorCSogeG0tc3VuMzg2Lmg6IFJlbmFtZWQgZnJvbSB4bS14bS1pMzg2c3VuLmguCisJKiBjb25maWd1cmU6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KKworV2VkIE1heSAgNiAyMzoxMTo1NSAxOTkyICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBY2hhdGVzLm1pdC5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogU3VwcG9ydCBNSU4gYW5kIE1BWCBmb3IKKwlTSW1vZGUgYW5kIG5hcnJvd2VyIGludGVnZXJzLgorCitXZWQgTWF5ICA2IDE3OjI1OjM3IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDE4LgorCShtaXBzX2NwdV9hdHRyKTogTmV3IGRlZmluZSwgd2hpY2ggaXMgdGhlIG1pcHNfY3B1IHZhcmlhYmxlIHJlY2FzdAorCXRvIHRoZSBhdHRyX2NwdSBlbnVtZXJhdGlvbiBmb3IgbWlwcy5tZC4KKwkoSEFMRl9QSUNfTlVNQkVSX1BUUlMsIEhBTEZfUElDX05VTUJFUl9SRUZTKTogQWRkIGR1bW15CisJZGVmaW5pdGlvbnMgaWYgaGFsZnBpYy5oIGlzIG5vdCBpbmNsdWRlZC4KKworCSogbWlwcy5jIChmdW5jdGlvbl9lcGlsb2d1ZSk6IFByaW50IGhhbGYtcGljIHN0YXRzIGlmIC1tc3RhdHMgYW5kCisJdGhlIHN0YXRzIGFyZSBub24temVyby4KKworCSogbWlwcy5tZCAoY3B1IGF0dHJpYnV0ZSk6IEp1c3QgdXNlIHN5bWJvbF9yZWYgIm1pcHNfY3B1X2F0dHIiCisJaW5zdGVhZCBvZiBhIGZvdXIgd2F5IGlmIHN0YXRlbWVudC4KKwkobW92c2lfaW50ZXJuYWwsIG1vdmhpLCBtb3ZxaSk6IFVzZSAneicgY29uc3RyYWludCBmb3IgZnBzdywgbm90ICdzJy4KKworCSogaGFsZnBpYy5oIChoYWxmX3BpY19udW1iZXJfcHRycyk6IEFkZCBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mCisJcG9pbnRlcnMgZ2VuZXJhdGVkLgorCShoYWxmX3BpY19udW1iZXJfcmVmcyk6IEFkZCBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMuCisKKwkqIGhhbGZwaWMuYyAoaGFsZl9waWNfbnVtYmVyX3B0cnMpOiBBZGQgY291bnRlciBmb3IgdGhlIG51bWJlciBvZgorCXBvaW50ZXJzIGdlbmVyYXRlZC4KKwkoaGFsZl9waWNfbnVtYmVyX3JlZnMpOiBBZGQgY291bnRlciBmb3IgdGhlIG51bWJlciBvZiByZWZlcmVuY2VzLgorCShoYWxmX3BpY19wdHJzKTogVXBkYXRlIG5ldyBjb3VudGVycy4KKworCSogZGVjc3RhdG4uaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19MQU5HVUFHRV94X18gYW5kIF9fTEFOR1VBR0VfeAorCXdoZXJlIHggaXMgQ19QTFVTX1BMVVMsIE9CSkVDVElWRV9DLCBDLCBvciBBU1NFTUJMWS4gIEZpeAorCXVuZGVmJ2luZyBMQU5HVUFHRV9DIGZvciAuUyBmaWxlcy4KKwkoSEFMRl9QSUNfUFJFRklYKTogRGVmaW5lIGFzICckTHAuJy4KKworCSogZGVjc3RhdG4uaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19MQU5HVUFHRV94X18gYW5kIF9fTEFOR1VBR0VfeAorCXdoZXJlIHggaXMgQ19QTFVTX1BMVVMsIE9CSkVDVElWRV9DLCBDLCBvciBBU1NFTUJMWS4KKworCSogbWlwcy10ZmlsZS5jICh0b3BsZXZlbCk6IERvbid0IGRlZmluZSBhbnl0aGluZyBpbiB0aGUgc3RhbmRhcmQKKwloZWFkZXJzLCBzdWNoIGFzIG9wZW4sIGV0Yy4KKwkoYWRkX3Byb2NlZHVyZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgb3JpZ19mZGIuCisKKwkqIG1pcHMtdGR1bXAuYyAodG9wbGV2ZWwpOiBEb24ndCBkZWZpbmUgYW55dGhpbmcgaW4gdGhlIHN0YW5kYXJkCisJaGVhZGVycywgc3VjaCBhcyBvcGVuLCBldGMuCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBEb24ndCBwYXNzIC1mPHh4eD4gc3dpdGNoZXMgdG8gR0NDIHdoZW4KKwlidWlsZGluZyB0aGUgY29uc3RydWN0b3IgdGFibGUuCisJKHdyaXRlX2NfZmlsZSk6IFB1dCBleHRlcm4gaW4gZnJvbnQgb2YgYWxsIGV4dGVybmFsIGRlY2xhcmF0aW9ucy4KKwkoc2Nhbl9wcm9nX2ZpbGUsIENPRkYgdmFyaWVudCk6IE9uIEVDT0ZGIHN5c3RlbXMsIGNoZWNrIHdoZXRoZXIKKwl0aGUgaGVhZGVyIHBvaW50ZXIgaXMgbm9uLU5VTEwgYmVmb3JlIHVzaW5nIGl0LgorCisJKiBjcC1sZXguYyAoc3RvcmVfcGVuZGluZ19pbmxpbmUpOiBDYXN0IG9ic3RhY2tfY29weSBhcmcgdG8gY2hhciAqLgorCShjb3B5X2xhbmdfZGVjbCk6IENhc3QgYmNvcHkgYXJncyB0byBjaGFyICouCisKK1dlZCBNYXkgIDYgMTM6Mjg6NTggMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBpOTYwLmgsIGk5NjAuYyAoaGFyZF9yZWdub19tb2RlX29rKTogVXNlIHVuc2lnbmVkIGludCBub3Qgc2hvcnQuCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgdmEtaTk2MC5oLgorCitXZWQgTWF5ICA2IDA3OjMxOjU0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cGxvdy5jIChlbWl0X3N0YWNrX3tzYXZlLHJlc3RvcmV9KTogTmV3IGZ1bmN0aW9ucy4KKwkqIGV4cHIuaDogRGVjbGFyZSB0aGVtIGFuZCBlbnVtIHNhdmVfbGV2ZWwuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENhbGwgZW1pdF9zdGFja19zYXZlLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9BTExPQ0EpOiBMaWtld2lzZS4KKwkqIGZ1bmN0aW9uLmMgKGRlbGV0ZV9oYW5kbGVycyk6IE1ha2UgdGVzdCBmb3IgaW5zbiB0aGF0IHNldHMKKwlhIHNsb3QgbW9yZSBnZW5lcmFsLgorCShleHBhbmRfZnVuY3Rpb25fZW5kKTogQ2FsbCBlbWl0X3N0YWNrX3tzYXZlLHJlc3RvcmV9LgorCSogc3RtdC5jIChkZWNsYXJlX25vbmxvY2FsX2xhYmVsKTogQ2FsbCBlbWl0X3N0YWNrX3NhdmUuCisJKGV4cGFuZF9nb3RvX2ludGVybmFsKTogTGlrZXdpc2UuCisJKGV4cGFuZF9nb3RvKTogTGlrZXdpc2UuCisJQ29weSBzbG90cyBzbyB0aGV5IGRvbid0IGdldCBpbnN0YW50aWF0ZWQgaW5jb3JyZWN0bHk7IGFsc28KKwl1cGRhdGUgdXNlIG9mIHZpcnR1YWwgcmVncyBhbmQgZnJhbWUgcG9pbnRlci4KKwkoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IENhbGwgZW1pdF9zdGFja19yZXN0b3JlLgorCShleHBhbmRfZGVjbCk6IENhbGwgZW1pdF9zdGFja19zYXZlLgorCVNldCBjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2FsbG9jYSB3aGVuIGFsbG9jYXRpbmcgdmFyaWFibGUtc2l6ZWQKKwlvYmplY3RzLgorCSogcnM2MDAwLm1kICh7c2F2ZSxyZXN0b3JlfV9zdGFja197YmxvY2ssZnVuY3Rpb24sbm9ubG9jYWx9KTogTmV3LgorCitUdWUgTWF5ICA1IDEzOjE3OjI5IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChhMjlrLSotKiwgaTk2MC0qLSopOiBOZXcgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4KKworCSogaTk2MC5jLCBpOTYwLmgsIGk5NjAubWQsIHhtLWk5NjAuaCwgdmEtaTk2MC5oOiBOZXcgZmlsZXMuCisKKwkqIGdzdGRhcmcuaCwgZ3ZhcmFyZ3MuaDogSW5jbHVkZSB2YS1pOTYwLmggZm9yIGk5NjAuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogQ2FsbCBSRUdfUEFSTV9TVEFDS19TUEFDRSBvbmNlIGFuZCBzYXZlCisJcmVzdWx0LiAgQWRkIGNvZGUgdG8gVXNlIG5ldyBtYWNyb3MgTUFZQkVfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgYW5kCisJRklOQUxfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UuCisJKHN0b3JlX29uZV9hcmcpOiBOZXcgcGFyYW1ldGVyIHJlZ19wYXJtX3N0YWNrX3NwYWNlLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogVXNlIE1BWUJFX1JFR19QQVJNX1NUQUNLX1NQQUNFLgorCisJKiBjc2UuYyAoTk9OWkVST19CQVNFX1BMVVNfUCk6IERvbid0IGNvbnNpZGVyIGFyZyBwb2ludGVyIGJ5IGl0c2VsZgorCXRvIGJlIG5vbi16ZXJvLCBiZWNhdXNlIGl0IGlzbid0IG9uIHRoZSBpOTYwLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IFVzZSBkZWNsX2Z1bmN0aW9uX2NvbnRleHQgbm90CisJVFJFRV9QRVJNQU5FTlQgdG8gaWRlbnRpZnkgZnVuY3Rpb24gbG9jYWwgc3RhdGljcy4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogQWxzbyByZW1hcCBTWU1CT0xfUkVGcworCXRoYXQgcG9pbnQgdG8gTEFCRUxfUkVGcyBpbiB0aGUgY29uc3RhbnQgcG9vbC4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgUExVUyBjYXNlKTogQ2Fub25pY2FsaXplIE1VTFQKKwl3aGVuIGFzc29jaWF0aW5nIGEgY29uc3RhbnQuCisKK1R1ZSBNYXkgIDUgMTI6NTY6MjkgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogTWFrZSBpdCBnbG9iYWwuCisJKiBwYS5tZDogQWRkIGhpZ2g6REkgYW5kIGxvX3N1bTpESSBwYXR0ZXJucy4KKworVHVlIE1heSAgNSAxMjowNDo1NiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IFJlcXVpcmUgaW50IGluZGV4ICphZnRlciogcHJvbW90aW9uLgorCisJKiBjb252ZXguaCAoUkVHX09LX0ZPUl97QkFTRSxJTkRFWH1fUCk6IFZpcnR1YWwgcmVncyB0aGF0IHdpbGwKKwl0dXJuIGludG8gc3RhY2tfcG9pbnRlcl9ydHggYXJlIG5vdCB2YWxpZCBmb3IgaW5kZXhpbmcuCisKKwkqIGNvbmZpZy5zdWI6IE5lWFQgaXMgQlNELCBub3QgU3lzVi4KKworCSogYXR0Mzg2LmggKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwsIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6CisJVW5kZWYgYmVmb3JlIGRlZmluaW5nLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogSGFuZGxlIGludmlzaWJsZSByZWZlcmVuY2UgcGFybXMuCisKK1R1ZSBNYXkgIDUgMjI6NDg6NTQgMTk5MiAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogTWFrZWZpbGUuaW4gKHRlc3QtcHJvdG9pemUtc2ltcGxlKToKKwlDaGFuZ2UgdG1wLXByb3RvaXplKiB0byB0bXAtcHJvdG8qLgorCShtb3N0bHljbGVhbik6IFJlbW92ZSB0aGF0IHRlbXBvcmFyeSBmaWxlLgorCitUdWUgTWF5ICA1IDA5OjM1OjMwIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogSGFuZGxlIFZPSURtb2RlIENPTlNUX0RPVUJMRSBjb3JyZWN0bHkuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBSZWNvbXB1dGUgYGNvZGUnIGJlZm9yZSBwcmVmZXJyZWRfY2xhc3MuCisKK01vbiBNYXkgIDQgMDA6MjM6MjkgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBzdnIzLmggKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwsIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6CisJQWRkZWQgZGVmaW5pdGlvbnMgYXBwcm9wcmlhdGUgZm9yIG1vc3Qgc3ZyMyBzeXN0ZW1zLgorCisJKiBwcm90b2l6ZS5jICh2b2xhdGlsZSk6ICBEZWZpbmUgdG8gbm90aGluZyBpZiAhZGVmaW5lZChfX1NURENfXykuCisJKHNldGptcCwgbG9uZ2ptcCk6ICBEZWNsYXJlZCBleHRlcm5hbCBpZiBub3QgZGVmaW5lZCBhcyBwcC1tYWNyby4KKwkoaW5jbHVkZV9kZWZhdWx0cyk6ICBGaXggdHlwZSBvZiBgZm5hbWUnIGZpZWxkLgorCShjb21waWxlcl9maWxlX25hbWUpOiAgRml4ZWQgdHlwZS4KKwkoc2F2ZXN0cmluZyk6ICBGaXhlZCB0eXBlIG9mIGBzaXplJyBwYXJhbWV0ZXIuCisJKHNhdmVzdHJpbmcyKTogIE5ldyBmdW5jdGlvbi4KKwkoc3RyaW5nX2xpc3RfY29ucyk6ICBSZW1vdmVkIHRyYWlsaW5nIGJsYW5rcyBmcm9tIHBhcm0gZGVjbGFyYXRpb24uCisJKGZpbmRfZmlsZSk6ICBNb3ZlZCBjb21tZW50cyBvdXQgb2YgZm9ybWFsIHBhcm0gZGVjbGFyYXRpb25zIGFyZWEuCisJKG11bmdlX2NvbXBpbGVfcGFyYW1zKTogIEZpeGVkIHR5cGUgb2YgYHRlbXBfcGFybXMnLgorCShnZW5fYXV4X2luZm9fZmlsZSk6ICBDb25zdHJ1Y3QgbmV3IGZpbGVuYW1lIHVzaW5nIGBzYXZlc3RyaW5nMicuCisJKGZpbmRfZXh0ZXJuX2RlZik6ICBTdXBwcmVzcyBhbm5veWluZyB3YXJuaW5ncyBhYm91dCBtaXNzaW5nCisJZGVmaW5pdGlvbnMgZm9yIGV4dGVybiBmdW5jdGlvbnMuCisJKGVkaXRfZm5fZGVjbGFyYXRpb24pOiAgRGVjbGFyZSBgY2xlYW5fdGV4dF9wJyBhcyBgdm9sYXRpbGUnIG5vdCBhcworCWBWT0xBVElMRScuCisJKHNjYW5fZm9yX21pc3NlZF9pdGVtcyk6ICBNYWtlIHRleHQgb2Ygd2FybmluZyBtb3JlIG9idmlvdXMuCisJKGVkaXRfZmlsZSk6ICBNYWtlIHRleHQgb2Ygd2FybmluZyBzaG9ydGVyLgorCisJKiBsaWJnY2MyLmMgKF9fYnVpbHRpbl9uZXcpOiAgQ2hhbmdlZCBhcmcgdHlwZSB0byBgc2l6ZV90Jy4gIE1vdmVkCisJbmVzdGVkIGRlY2xhcmF0aW9uIG9mIG1hbGxvYyBvdXQgdG8gZmlsZS1zY29wZS4KKwkoX19idWlsdGluX3ZlY19uZXcpOiAgUHJvdG90eXBlIHByZWNlZWRpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorCShfX2J1aWx0aW5fdmVjX25ldywgX19idWlsdGluX3ZlY19kZWxldGUpOiBDaGFuZ2VkIHR5cGVzIG9mIG5vbi1wb2ludGVyCisJYXJndW1lbnRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgdG8gYHNpemVfdCcuCisJKF9fY2xlYXJfY2FjaGUpOiAgVXNlIHR5cGUgYHZvaWQgKicgdmFyaWFibGVzIHRvIHN0b3JlIGFkZHJlc3Nlcy4KKwkoX19kb19nbG9iYWxfZHRvcnMpOiAgVXNlIHVuc2lnbmVkIHR5cGUgZm9yIGNvdW50ZXJzLgorCShfX21haW4pOiAgQWRkIGV4cGxpY2l0IHR5cGUgdG8gZGVjbGFyYXRpb24gb2YgYGluaXRpYWxpemVkJy4KKworTW9uIE1heSAgNCAxNjoxNjo1NiAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsKTogSWdub3JlIGEgZ2xvYmFsIHJlZ2lzdGVyCisJdmFyaWFibGUuCisKK01vbiBNYXkgIDQgMDg6Mjg6MTggMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLWdocHV4LmgsIHBhLWhwdXguaDogI2RlZmluZSBIQVZFX0FURVhJVC4KKworCSogZ2VuZXh0cmFjdC5jIChwcmludF9wYXRoLCBtYWluKTogTWFrZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdXNlCisJYHBhdCcsIG5vdCBgaW5zbicsIGV4Y2VwdCBmb3IgZmF0YWxfaW5zbl9ub3RfZm91bmQuICBSZW1vdmUKKwlpbnNuX2NvZGUgdmFyaWFibGUgZnJvbSBnZW5lcmF0ZWQgY29kZSwgYW5kIHN3aXRjaCBkaXJlY3RseSBvbgorCUlOU05fQ09ERSAoaW5zbikuCisKKwkqIGhwcGEqOiBSZW5hbWUgdG8gYmUgdW5pcXVlIGluIGZpcnN0IDggY2hhcmFjdGVycy4KKwkqIGNvbmZpZ3VyZTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCitNb24gTWF5ICA0IDAwOjIwOjM5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IENvbXB1dGUgcHJlZmVycmVkX2NsYXNzIGFmdGVyCisJY2FsbGluZyBmaW5kX3JlbG9hZHNfdG9wbGV2IG9yIGVxdWl2YWxlbnQuCisKKwkqIHZheC5oIChQUklOVF9PUEVSQU5EKTogQWRkIGNvZGVzIE0sIGgsIGIuCisKKwkqIG5zMzJrLmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBDaGFuZ2UgR0VOX0FORF9NRU1fUkVHUworCXRvIEdFTkVSQUxfUkVHUy4KKworCSogY29uZmlnLnN1YjogUmVjb2duaXplIHdlMzIgYW5kIDNiKi4KKworCSogdmFyYXNtLmMgKHJlYWRvbmx5X2RhdGFfc2VjdGlvbik6IE1vdmUgYWZ0ZXIgZGF0YV9zZWN0aW9uLgorCisJKiBNYWtlZmlsZS5pbiAocHJpbnQtcnRsLm8pOiBDb21waWxlIGFsc28gZm9yIGhvc3QgbWFjaGluZS4KKwkoZ2VuYXR0cnRhYik6IExpbmsgaW4gaG9zdCdzIHByaW50LXJ0bC5vLgorCisJKiBpMzg2djQuaCAoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogRGVsZXRlZC4gIERmbiBpbiBzdnI0LmggaXMgZ29vZC4KKworU3VuIE1heSAgMyAyMTozOToyMiAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYuaCAoUlRYX0NPU1RTKTogQWRkIG1pc3NpbmcgYnJlYWsuCisKK1N1biBNYXkgIDMgMTk6NDA6NTAgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJRnJvbSBsYXc6CisJKiBzcGFyYy5tZCAoZnAgdW5pdCBhdHRyaWJ1dGVzKTogQ2hhbmdlIHJlc3VsdCByZWFkeSBkZWxheXMgdG8KKwltYXRjaCBob3cgdGhlIEZQIHVuaXQgcmVhbGx5IHdvcmtzLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IERvbid0IG1vdmUgVVNFIGF0IHRoZSBlbmQgb2YgYW55IGJsb2NrLgorCisJRnJvbSByZmc6CisJKiBzcGFyYy5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogIEFkZGVkIG5ldyBmdW5jdGlvbiAoYmFzZWQgb24gb3JpZ2luYWwKKwlgaGFuZGxlX3ByYWdtYV90b2tlbicgaW4gaTM4Ni5jKS4KKwkqIHNwYXJjdjQuaCAoSU5JVF9TRUNUSU9OX1BSRUFNQkxFKTogIERlZmluaXRpb24gYWRkZWQuCisJKFBVU0hTRUNUSU9OX0ZPUk1BVCk6ICBBZGRlZCBsZWFkaW5nIHRhYi4KKwkoSEFORExFX1BSQUdNQSk6ICBBZGRlZCBkZWZpbml0aW9uIHRvIGhhbmRsZSAjcHJhZ21hIHdlYWsgKGJhc2VkIG9uCisJb3JpZ2luYWwgZGVmaW5pdGlvbiBpbiBpMzg2djQuaCkuCisKKwlGcm9tIGpmYzoKKwkqIHNjaGVkLmMgKGluc25fY29zdHMpOiBOZXcgdmFyaWFibGUuCisJKGluc25fY29zdCk6IFNhdmUgY29zdCBvZiBpbnNuIGluIGluc25fY29zdHMgdG8gYXZvaWQgcmVjb21wdXRhdGlvbi4KKwkoc2NoZWRfYW5hbHl6ZV8yKTogSGFuZGxlIFVOU1BFQ19WT0xBVElMRS4KKwkoc2NoZWR1bGVfaW5zbnMpOiBJbml0IGluc25fY29zdHMuCisKKwkqIHNwYXJjLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IENvcnJlY3RseSBjaGVjayBmb3IgY29uc3RhbnQKKwlERm1vZGUgYWRkcmVzc2VzLiAgQXNzdW1lIHRoYXQgREZtb2RlIGFkZHJlc3NlcyB3aXRoIE1FTV9JTl9TVFJVQ1RfUAorCXNldCBhcmUgYWx3YXlzIGFsaWduZWQuCisKK1N1biBNYXkgIDMgMTY6NTI6MDYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoUEFUSF9TRVBBUkFUT1IpOiBOZXcgbWFjcm8uICBGcm9tIEFsZXggWmF0c21hbi4KKwkocHJvY2Vzc19jb21tYW5kKTogVXNlIGl0IHdoZW4gc2Nhbm5pbmcgYSBwYXRoLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogQ2FzdCBpY29kZSB0byBpbnQgZm9yIGluZGV4aW5nLgorCisJKiB4bS1pMzg2ZG9zLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlLmJhdDogVXNlIHRoYXQgZmlsZS4KKwkqIGdjYy5jIChFWEVDVVRBQkxFX1NVRkZJWCk6IFJlbW92ZSBzcGVjaWFsIGRlZmF1bHQgZm9yIE1TRE9TLgorCShwdXRlbnYpOiBSZW1vdmUgY29uZGl0aW9uYWxzIGZvciBNU0RPUywgc2luY2UgSEFWRV9QVVRFTlYgbm93IGRlZmluZWQuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IFByb21vdGUgYWZ0ZXIgLVdjaGFyLXN1YnNjcmlwdHMgdGVzdC4KKworCSogYy1kZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24pOiBJZiB0cmFkaXRpb25hbCBhbmQgbmFtZSBpcyB1c2VyLXZpc2libGUsCisJc2V0IERFQ0xfQlVJTFRfSU5fTk9OQU5TSS4KKworCSogY2NjcC5jIChQQVRIX1NFUEFSQVRPUik6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24uCisJKG1haW4pOiBVc2UgdGhhdC4KKworU3VuIE1heSAgMyAwODoxNzowMiAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBweXIuaCAoRlJBTUVfUE9JTlRFUl9SRUdOVU0pOiBXb3JrIGFyb3VuZCBweXIgY3BwIGJ1Zy4KKworCSogeG0taHBwYS5oIChOT19TWVNfU0lHTElTVCk6IERlZmluZS4KKworU2F0IE1heSAgMiAxNTowMzowOCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGNhbGxjLmMgKGVtaXRfY2FsbF8xKTogUmVzdG9yZSBpbmhpYml0X2RlZmVyX3BvcCBhZnRlciBwb3BwaW5nIGFyZ3MuCisKK1RodSBBcHIgMzAgMjA6MDA6MDAgMTk5MiAgREogRGVsb3JpZSAoZGpAY3Ryb24uY29tKQorCisJKiBjb25maWd1cmUuYmF0OiBDb21wbGV0ZSByZXdyaXRlIHRvIHVzZSBNYWtlZmlsZS5pbi4KKwkqIE1ha2VmaWxlLmRvczogRmlsZSBkZWxldGVkLgorCitUaHUgQXByIDMwIDIzOjM4OjAwIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKKworCSogeGNvZmZvdXQuaCAoREJYX0ZJTklTSF9TWU1CT0wpOiAgVXNlIERFQ0xfQVNTRU1CTEVSX05BTUUKKwlpbnN0ZWFkIG9mIERFQ0xfTkFNRSB3aGVuIHdyaXRpbmcgb3V0IGEgZ2xvYmFsIHN5bWJvbC4KKwkoTWFrZXMgYSBiaWcgZGlmZmVyZW5jZSBmb3IgQysrIHN0YXRpYyBjbGFzcyBtZW1iZXJzLikKKworVGh1IEFwciAzMCAyMzoxMzowMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNvbXBhcmlzb25zKTogRG9uJ3QgY2FsbCBvbWl0X29uZV9vcGVyYW5kIGluCisJYSBjYXNlIHdoZXJlIHRoZSBvcGVyYW5kIGlzbid0IHJlYWxseSBiZWluZyBvbWl0dGVkLgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMsIGNhc2UgUkVHX0RFQUQpOiBEb24ndCB3cml0ZSBhIFVTRSBmb3IKKwlhIHBhcnRpYWxseS1kZWFkIHJlZ2lzdGVyIGlmIHdlIGFscmVhZHkgd3JvdGUgb25lLgorCitUaHUgQXByIDMwIDIxOjUxOjI5IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoZW5xdWlyZS5vLCBpbnN0YWxsLWNvbW1vbi1oZWFkZXJzKTogTWFrZSB0aGVzZSB3b3JrCisJd2hlbiAkKHNyY2RpcikgaXMgLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2Ugdm9pZF9mdHlwZV9hbnkgYXMgdGhlIHR5cGUKKwlmb3IgX2V4aXQsIGV4aXQgYW5kIGFib3J0LgorCitXZWQgQXByIDI5IDIxOjQyOjMwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmF0dHJ0YWIuYyAoaW5zbl9uYW1lX3B0cik6IERlZmluZSBzbyB3ZSBjb3VsZCBsaW5rIHdpdGgKKwlkZWJ1Z19ydHguCisKKwkqIGdlbmF0dHJ0YWIuYyAoY2hlY2tfYXR0cl90ZXN0LCBzaW1wbGlmeV90ZXN0X2V4cCk6IENvcHkgZXhwcmVzc2lvbgorCWJlZm9yZSBzZXR0aW5nIGFzIHVuY2hhbmdpbmcuCisJKG1ha2VfY2Fub25pY2FsKTogU2V0IHJlc3VsdCBhcyB1bmNoYW5naW5nIGFmdGVyIGNhbGxpbmcKKwljb252ZXJ0X2NvbnN0X3N5bWJvbF9yZWYuCisJKGV2YWx1YXRlX2VxX2F0dHIpOiBXaGVuIHJldHVybmluZyBvcmlnaW5hbCBleHByZXNzaW9uLCBzZXQgaXQKKwlhcyB1bmNoYW5naW5nLgorCitXZWQgQXByIDI5IDEzOjMwOjMzIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBoYWxmcGljLmMgKGhhbGZfcGljX3B0cik6IEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgTlVMTCBieXRlLgorCitXZWQgQXByIDI5IDA2OjI4OjM1IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoc3JjX2Nvb3Jkc19hdHRyaWJ1dGUpOiAgRG9uJ3QgI2lmZGVmIGNvZGUgYmFzZWQgb24KKwlEV0FSRl9ERUNMX0NPT1JESU5BVEVTLgorCShuYW1lX2FuZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMpOiAgRG8gI2lmZGVmIGNhbGxzIHRvIGBsb29rdXBfZmlsZW5hbWUnCisJYW5kIGBzcmNfY29vcmRzX2F0dHJpYnV0ZScgYmFzZWQgb24gRFdBUkZfREVDTF9DT09SRElOQVRFUy4gIEFsc28sCisJcG9wIG91dCBvZiAuZGVidWcgc2VjdGlvbiB0ZW1wb3JhcmlseSB3aGlsZSBjYWxsaW5nIGBsb29rdXBfZmlsZW5hbWUnLgorCitXZWQgQXByIDI5IDAyOjAxOjAzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAYWxiZXJ0LmdudS5haS5taXQuZWR1KQorCisJKiBDb21wbGV0ZSBhbm90aGVyIEN5Z251cyA8LS0+IEZTRiBtZXJnZS4KKworCVR1ZSBBcHIgMjggMTk6MjQ6NTIgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChkb19mcmllbmQpOiAgSGFuZGxlIG92ZXJsb2FkZWQgYW5kIGV4dGVybiAiQyIKKwlmcmllbmRzIGNvcnJlY3RseS4KKworCU1vbiBBcHIgMjcgMjE6MDQ6NDAgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGJ1aWxkX3ZiYXNlX3Z0YWJsZXNfaW5pdCk6ICBEb24ndCBzZXQKKwlmbGFnX3RoaXNfaXNfdmFyaWFibGUgdG8gLTIgd2hlbiBub3QgZG9pbmcgYSBjdG9yLgorCisJKiBjcC1jbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogRG9uJ3QgdW5jb25kaXRpb25hbGx5IHNldAorCWNvZGUgdG8gYmUgYSBQTFVTX0VYUFIuCisKKwlNb24gQXByIDI3IDE0OjE0OjA4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiAgQWxsb3cgY29udHJ1Y3RvcnMgdG8gYmUgZnJpZW5kcy4KKwlDYW5ub3QgZmluZCBhbnl0aGluZyBwcm9oaWJpdGluZyBpdC4KKworCU1vbiBBcHIgMjcgMTM6MjY6MjAgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChkb19mcmllbmQpOiAgYnVsbGV0IHByb29mIGhhbmRsaW5nIG9mIGZyaWVuZHMsCisJZml4ZXMgcHJvYmxlbSBpbnRyb2R1Y2VkIG9uIEFwciAyNiAxODoyNDozNS4KKworCVN1biBBcHIgMjYgMjM6MTg6MjQgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChpZGVhbF9jYW5kaWRhdGUpOiAgQWxsb3cgb25lIHRvIG92ZXJsb2FkIHN0YXRpYworCW1lbWJlciBmdW5jdGlvbnMgd2l0aG91dCBkdW1waW5nIGNvcmUuCisKKwlTdW4gQXByIDI2IDE4OjQ0OjU3IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChicmVha19vdXRfY2FsbHMpOiBDYWxsIGJ1aWxkMSBpbnN0ZWFkIG9mIGJ1aWxkIGZvcgorCXRyZWVzIHdpdGggb25seSBvbmUgb3BlcmFuZCB0byBhdm9pZCBhYm9ydCBpbiBidWlsZC4KKworCVN1biBBcHIgMjYgMTg6MjQ6MzUgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChkb19mcmllbmQpOiAgQWxsb3cgZXh0ZXJuICJDIiBmdW5jdGlvbnMgdG8gYmUKKwlmcmllbmRzLgorCisJU2F0IEFwciAyNSAwMjo1NzowNyAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC0qLltjaHldOiAgRml4IGFsbCBwZWRhbnRpYyB3YXJuaW5ncyB0byBiZSBwZWR3YXJuLgorCisJU2F0IEFwciAyNSAwMTo0Njo1MCAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10cmVlLmMgKGJyZWFrX291dF9jYWxscyk6ICBIYW5kbGUgTlVMTF9UUkVFIHByb3Blcmx5LgorCisJRnJpIEFwciAyNCAyMzo0OTozOSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogIFByb3ZpZGUgYW4gZXJyb3IgbWVzc2FnZQorCWFib3V0IGJhZCBzeW50YXggaW5zdGVhZCBvZiBjb3JlIGR1bXBpbmcuCisKKwlGcmkgQXByIDI0IDE2OjQ2OjAzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgcnRsLmN5Z251cy5jb20pCisKKwlGcmkgQXByIDI0IDE4OjU1OjQ1IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtcGFyc2UueSAoY29tcG9uZW50X2RlY2wpOiAgRml4IHNtYWxsIHByb2JsZW0gdG8gdGFrZSB1cworCWJhY2sgZG93biB0byAxNCByZWR1Y2UvcmVkdWNlIGVycm9ycy4KKworCVRodSBBcHIgMjMgMTk6NDg6NTQgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBydGwuY3lnbnVzLmNvbSkKKworCVdlZCBBcHIgMjIgMjI6NDc6MTUgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC10eXBlMi5jIChyZWFkb25seV93YXJuaW5nX29yX2Vycm9yKTogIEVsaW1pbmF0ZSBhcmJpdHJhcnkKKyAgICAgICAgbGltaXQgb2YgODAgY2hhcmFjdGVycyBwZXIgd2FybmluZyBtZXNzYWdlLgorCisJVGh1IEFwciAyMyAwNDoxNDo1OSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogIEhhbmRsZSBjb25zdCBhbmQgdm9sYXRpbGUKKwltZW1iZXIgZnVuY3Rpb25zIHByb3Blcmx5LgorCitUdWUgQXByIDI4IDIyOjA1OjA1IDE5OTIgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXNAYXBwbGkuc2UpCisKKwkqIHRvd2VyLWFzLmggKHN2cjMgc3VwcG9ydCk6IEdlbmVyaWMgc3ZyMy5oIGluY2x1ZGVkLgorCShTRUxFQ1RfUlRYX1NFQ1RJT04pOiBtNjhrLmgncyB2ZXJzaW9uICN1bmRlZidkIGluIGZhdm91ciBvZiBzdnIzLmgncy4KKwkoQ1BQX1BSRURFRklORVMpOiBPdmVycmlkaW5nIHN2cjMuaCB2ZXJzaW9uLgorCShTVEFSVEZJTEVfU1BFQyk6IEFkZGVkIGNydGJlZ2luLm8uCisJKEFTTV9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FKTogQWRkZWQgdWdseSBzZWN0aW9uIGRpcmVjdGl2ZXMgdG8gZ2V0CisJcmlkIG9mIE5DUiBhc3NlbWJsZXIgYnVnLgorCShBU01fT1VUUFVUX0lERU5UKTogI3VuZGVmJ2Qgc3ZyMy5oIHZlcnNpb24uCisJKE5PX3tET0xMQVIsRE9UfV9JTl9MQUJFTCk6IERlZmluZWQuCisJKEFTTV9MT05HKTogRGVmaW5lZC4KKwkoe0lOSVQsRklOSSxDT05TVH1fU0VDVElPTl9BU01fT1ApOiBPdmVycmlkZXMgc3ZyMy5oIHZlcnNpb25zLgorCShDVE9SX0xJU1Rfe0JFR0lOLEVORH0pOiBOZXcgbWFjcm9zLgorCShCU1NfU0VDVElPTl9BU01fT1ApOiBOZXcgbWFjcm8uCisJKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IpOiBOZXcgbWFjcm8uCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBSZWRlZmluZWQgc3ZyMy5oIHZlcnNpb24uCisKKwkqIHRvd2VyLmggKExJQl9TUEVDKTogQWRkZWQgLXNobGliIHN1cHBvcnQgcGx1cyBjcnRlbmQuby4KKworCSogY29uZmlndXJlIChtNjhrLW5jci1zeXN2KTogRGVmaW5lZCB4bWFrZV9maWxlIGFuZCB0bWFrZV9maWxlLgorCitUdWUgQXByIDI4IDIxOjI3OjEwIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChmbG9hdHNpZGYyLCBmbG9hdHNpc2YyKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK1R1ZSBBcHIgMjggMTg6MjE6MDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdGlvbnMuYzogSW5jbHVkZSBvYnN0YWNrLmgsIGV0Yy4KKwkodXRpbF9vYnN0YWNrLCB1dGlsX2ZpcnN0b2JqKTogTmV3IG9ic3RhY2ssIGFuZCAxc3Qgb2JqZWN0IGluIGl0LgorCShpbml0X29iamMpOiBJbml0IHRob3NlIHR3by4KKwkoZW5jb2RlXyopOiBSZXdyaXRlIHRvIHVzZSB1dGlsX29ic3RhY2ssICAgQ2FsbGVycyBjaGFuZ2VkLgorCShoYW5kbGVfY2xhc3NfcmVmLCBoYW5kbGVfaW1wZW50KTogTmV3IHN1YnJvdXRpbmVzLCBicm9rZW4gb3V0CisJZnJvbSBmaW5pc2hfb2JqYyBzbyBlYWNoIGNhbiB1c2UgYWxsb2NhIChpbnN0ZWFkIG9mIHV0bGJ1ZikuCisJKHV0bGJ1Zik6IFZhcmlhYmxlIGRlbGV0ZWQuCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFRyZWF0IGFib3J0IGFuZCBleGl0IGFzIEFOU0kuCisJLXRyYWRpdGlvbmFsIG5vIGxvbmdlciBhZmZlY3RzIEFOU0kgYnVpbHRpbnM7IHVzZSAtZm5vLWJ1aWx0aW4uCisKKwkqIGNvbmZpZ3VyZTogSW5zZXJ0IGFzc2lnbm1lbnQgb2YgSU5TVEFMTCB3aGVyZSBvbGQgb25lIHdhcy4KKworVHVlIEFwciAyOCAxNzoxNDo1NyAxOTkyICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBY2hhdGVzLm1pdC5lZHUpCisKKwkqIHZheC5tZCAoY21wZGYsIGNtcHNmKTogVXNlIHRzdGYvdHN0ZCBpZiBzZWNvbmQgYXJndW1lbnQgaXMgemVyby4KKwkobW92c2ksIG1vdmhpLCBtb3ZxaSk6IFBhdHRlcm5zIGNoYW5nZWQgdG8gcmVmbGVjdCBkaWZmZXJlbnQKKwlzcGFjZS90aW1lIHRyYWRlb2ZmcyBmb3IgbW9kZXJuIFZBWGVzLgorCShtb3ZzdHJpY3RoaSwgbW92c3RyaWN0cWkpOiBOZXcgcGF0dGVybnMuCisJKGV4dHYsIGV4dHp2KTogVXNlIHJvdGwvYmljbCBzZXF1ZW5jZSB3aGVuIHBvc3NpYmxlLgorCitUdWUgQXByIDI4IDEwOjAwOjI1IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLXRmaWxlLmMgKHJlYWRfbGluZSk6IE1ha2UgcmVhZF9saW5lIGFjdCBsaWtlIHRoZSBhc3NlbWJsZXIsCisJYW5kIHVzZSAnOycgdG8gc2VwYXJhdGUgbXVsdGlwbGUgbG9naWNhbCBsaW5lcy4KKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBTZXQgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDE3LgorCShNQVNLX0RFQlVHX0MpOiBTd2FwIG1lYW5pbmcgb2YgLW1kZWJ1Z2MuCisJKEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMpOiBVc2UgJ2NjJyBmb3IgdGhlIGZsb2F0aW5nIHBvaW50IHN0YXR1cworCXJlZ2lzdGVyLCBzbyB1c2VyIGFzbSdzIGNhbiBjbG9iYmVyIGl0LiAgQWxsb3cgJGZwIGZvciB0aGUgZnJhbWUKKwlwb2ludGVyIGluIGFkZGl0aW9uIHRvIGZwIGFuZCAkMzAsIGFuZCBhbHNvICRzcCBmb3IgdGhlIHN0YWNrCisJcG9pbnRlciBpbiBhZGRpdGlvbiB0byBzcCBhbmQgJDI5LgorCisJKiBtaXBzLmMgKGdlbl9pbnRfcmVsYXRpb25hbCk6IEVtaXQgZmFzdGVyIHNlcXVlbmNlIGZvciBORS4KKwkobWlwc19hc21fZmlsZV9zdGFydCk6IERvbid0IGNhbGwgZGF0YV9zZWN0aW9uIGZvciBnY2MyX2NvbXBpbGVkLgorCisJKiBtaXBzLm1kIChicmFuY2ggZGVmaW5lX2RlbGF5KTogU3BlY2lmeSBhbGwgb2YgdGhlIHByZWNvbmRpdGlvbnMKKwljb3JyZWN0bHkgZm9yIGJyYW5jaCBsaWtlbHkgKG1pcHMyKSBzdXBwb3J0LgorCShmbG9hdHNpZGYyKTogVXBkYXRlIGRzbG90c19sb2FkX3RvdGFsLiAgU3VwcG9ydCBnZXR0aW5nIHRoZQorCWludGVnZXIgdmFsdWUgZnJvbSBtZW1vcnkgYXMgd2VsbCBhcyBmcm9tIGFuIGludGVnZXIgcmVnaXN0ZXIuCisJRml4IHRoZSBsZW5ndGggYXR0cmlidXRlLgorCShmbG9hdHNpc2YyKTogRGl0dG8uCisJKEFsbCBzZXQgZnJvbSBjb25kaXRpb24gY29kZSBwYXR0ZXJucyk6IFN3YXAgbWVhbmluZyBvZiAtbWRlYnVnYywKKwlzbyB0aGF0IGlmIHVzZWQsIGl0IG1lYW5zIHN1cHBvcnQgYWxsIG9mIHRoZSBzZXQgY29uZGl0aW9uIGNvZGUKKwlwYXR0ZXJucyBhcyBpZiB0aGUgbWFjaGluZSBjYW4gZG8gdGhlbSBlcXVhbGx5IHdlbGwuICBJZiBub3QKKwktbWRlYnVnYywgY2FsbCBnZW5faW50X3JlbGF0aW9uYWwgdG8gZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgc2V0CisJb2YgSU5TTnMuCisKKwkqIGRlY3Jvc2UuaCAoQVNNX0lERU5USUZZX0dDQyk6IERlZmluZSBhcyBudWxsIG9uIE9TRi8xLgorCSogZW5jcm9zZS5oIChBU01fSURFTlRJRllfR0NDKTogRGVmaW5lIGFzIG51bGwgb24gT1NGLzEuCisJKiBpMzg2cm9zZS5oIChBU01fSURFTlRJRllfR0NDKTogRGVmaW5lIGFzIG51bGwgb24gT1NGLzEuCisKKwkqIGRlY3Jvc2UuaCAoQ1BQX1NQRUMpOiBJZiAuUyBmaWxlcywgYWRkIGFuIGV4cGxpY2l0CisJLVVMQU5HVUFHRV9DIHRvIG1pbWljIHRoZSBPU0YgR0NDIDEuMzkgYmVoYXZpb3IuCisKK01vbiBBcHIgMjcgMTY6NDQ6MzAgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGR3YXJmLmggKEFUXy4uLiB2YWx1ZXMpOiBDb3JyZWN0IHR5cG9zIHByZXNlbnQgaW4gdmVyc2lvbiAxLjAuMQorCW9mIHRoZSBEV0FSRiBzcGVjLiAgVGhlIHZhbHVlcyBzaG91bGQgYmUgdW5jaGFuZ2VkLgorCisJKiBkd2FyZm91dC5jIChkYXRhX21lbWJlcl9sb2NhdGlvbl9hdHRyaWJ1dGUpOiBVc2UgSU5URUdFUl9DU1QuCisKKwkqIGR3YXJmb3V0LmMgKGRhdGFfbWVtYmVyX2xvY2F0aW9uX2F0dHJpYnV0ZSk6IFVzZSBUWVBFX01PREUuCisJKGJpdF9vZmZzZXRfYXR0cmlidXRlKTogRGl0dG8uCisKKwkqIGR3YXJmb3V0LmMgKG5hbWVfYXR0cmlidXRlKTogQWRkIHRoZSB0ZXN0cyBiYWNrLgorCisJKiBtODhrLmggKFdFQUtfQVNNX09QKTogT3ZlcnJpZGUgc3ZyNC5oLgorCitNb24gQXByIDI3IDE1OjQ4OjM2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbGltaXRzLmg6IFVzZSBfTElNSVRTX0hfX18sIG5vdCBfTElNSVRTX0hfLCB0byBwcm90ZWN0IGNvbnRlbnRzLgorCitNb24gQXByIDI3IDE1OjE1OjI1IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IFNldCBNZWlzc25lciB2ZXJzaW9uICMgdG8gMTYuCisJKGRlbGF5X3R5cGUgZW51bSk6IEFkZCBERUxBWV9GQ01QIGZvciBzcGVjaWZpbmcgdGhlCisJYy57ZXEsbHQsbGV9LntkLHN9IGRlbGF5LgorCShmcHN3X3JlZ2lzdGVyX29wZXJhbmQpOiBOZXcgZGVjbGFyYXRpb24uCisJKGdlbl9pbnRfcmVsYXRpb25hbCk6IE5ldyBkZWNsYXJhdGlvbi4KKwkocGNfb3JfbGFiZWxfb3BlcmFuZCk6IE5ldyBkZWNsYXJhdGlvbi4KKwkoTUFTS19ERUJVR19DKTogVXNlIC1tZGVidWdjIGZvciBuZXcgcmVsYXRpb25hbCBjb2RlLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBVc2UgJ3onIGZvciBmcHN3IHJlZ2lzdGVyLCBub3QgJ3MnIHdoaWNoCisJaXMgYWxyZWFkeSB1c2VkLgorCShFWFRSQV9DQ19NT0RFUyk6IEFkZCBDQ19SRVZfRlBtb2RlIHRvIGhhbmRsZSBmcCBjb21wYXJpc29ucywKKwl3aGljaCBuZWVkIHRvIGJlIHJldmVyc2VkICghPSkuCisJKEVYVFJBX0NDX05BTUVTKTogQWRkIENDX1JFVl9GUC4KKwkoU0VMRUNUX0NDX01PREUpOiBVc2UgU0ltb2RlIGZvciBhbGwgaW50ZWdlciBjb21wYXJpc29ucywKKwlDQ19SRVZfRlAgZm9yIGZsb2F0aW5nIHBvaW50ICE9IGNvbXBhcmlzb25zLgorCisJKiBtaXBzLmMgKGludGVybmFsX3Rlc3QgZW51bSk6IE1vdmUgYW5kIHJlbmFtZSB0aGUgZW51bWVyYXRpb24KKwl1c2VkIGluIGdlbl9jb25kaXRpb25hbCB0byBtYWtlIHRoZSBjb21wYXJpc29uIFJUTCBjb2RlcyB0bworCXNvbWV0aGluZyB0aGF0IGNhbiBiZSBpbmRleGVkIG91dCB0byB0b3AgbGV2ZWwuCisJKGZwc3dfcmVnaXN0ZXJfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSBpZiB0aGUKKwlvcGVyYW5kIGlzIHRoZSBGUCBzdGF0dXMgcmVnaXN0ZXIuCisJKHBjX29yX2xhYmVsX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJuIHRydWUgaWYgdGhlIG9wZXJhbmQKKwlpcyBlaXRoZXIgYSBsYWJlbF9yZWYgb3IgdGhlIHBjIGZvciBpZl90aGVuX2Vsc2UgdGVzdHMuCisJKG1pcHNfZmlsbF9kZWxheV9zbG90KTogQWRkIHN1cHBvcnQgZm9yIERFTEFZX0ZDTVAsIHRoZSBkZWxheQorCWFmdGVyIGEgZmxvYXRpbmcgcG9pbnQgY29tcGFyaXNvbiBpcyBkb25lIGFuZCBpdCBjYW4gYmUgdGVzdGVkLgorCShtYXBfdGVzdF90b19pbnRlcm5hbF90ZXN0KTogTmV3IGZ1bmN0aW9uIHRvIHRha2UgYSBSVEwgY29kZSBvZiBhCisJY29tcGFyaXNvbiBvcGVyYXRvciwgYW5kIHJldHVybiB0aGUgaW50ZXJuYWxfdGVzdCBlbnVtZXJhdGlvbi4KKwkoZ2VuX2ludF9yZWxhdGlvbmFsKTogTmV3IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZQorCUlOU05TIGZvciBjb21wYXJpbmcgdHdvIGludGVnZXJzIGZvciBlaXRoZXIgYnJhbmNoZXMsIG9yIHRoZSBzZXQKKwlmcm9tIGNvbmRpdGlvbiBjb2RlIGluc25zLgorCShnZW5fY29uZGl0aW9uYWxfYnJhbmNoKTogUmV3cml0ZSB0byBub3QgdXNlIHRoZSBDSVNDIGNvbmRpdGlvbgorCWNvZGUgcmVnaXN0ZXIgQ0MwLCBidXQgaW5zdGVhZCBnZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgSU5TTnMgc28KKwl0aGF0IHRoZSB0ZXN0IGNhbiBiZSBzY2hlZHVsZWQgaW5kZXBlbmRlbHkgb2YgdGhlIGJyYW5jaC4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSAneicgZm9yIHRoZSBmcHN3IHJlZ2lzdGVyLCBub3QgJ3MnLiAgT25seQorCWFsbG93IHRoZSBmcCBjb21wYXJpc29uIGNvbmRpdGlvbiBjb2RlcyBpbiB0aGUgZnBzdyByZWdpc3Rlci4gIERvCisJbm90IGFsbG93IG5vbiBmbG9hdCBvciBpbnQgdGhpbmdzIGluIEZQIHJlZ2lzdGVycywgZXZlbiBpZgorCS1tZGVidWdoLiAgRG9uJ3QgYWxsb3cgaW50cyBpbiB0aGUgZnBzdy4KKworCSogbWlwcy5tZCAodmFyaW91cyk6IFJld3JpdGUgY29tcGFyaXNvbnMgYW5kIGJyYW5jaGVzIHNvIHRoYXQgd2UKKwlkbyBub3QgdXNlIENDMCwgYnV0IGluc3RlYWQgcHV0IHRoZSBjb21wYXJpc29uIGluIGEgcHNldWRvIGFuZAorCWdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBicmFuY2ggaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5LiAgVGhpcworCWVsaW1pbmF0ZXMgY2FsbHMgdG8gdGhlIHZhcmlvdXMgYjx4eD4gbWFjcm9zIHByb3ZpZGVkIGJ5IHRoZQorCWFzc2VtYmxlci4gIENoYW5nZSB0aGUgdHlwZSBvZiBpbnRlZ2VyIGNvbXBhcmlzb25zIGZyb20gdGhlCisJdmFyaW91cyBDQ3h4IG1vZGVzIHVzZWQgdG8gU0ltb2RlLiAgTWFrZSBmcCAhPSB1c2UgQ0NfUkVWX0ZQbW9kZS4KKwkobW9kZSBhdHRyaWJ1dGUpOiBBZGQgRlBTVyBtb2RlIGZvciBmbG9hdGluZyBjb21wYXJlLgorCShmcF9jb21wKTogTmV3IGZ1bmN0aW9uYWwgdW5pdCBmb3IgY29tcGFyaW5nIGZwIHZhbHVlcy4KKwkoZGl2bW9kc2k0KTogTm8gbG9uZ2VyIHVzZSAtbWRlYnVnYyB0byB0dXJuIG9mZiBkaXZtb2RzaTQuCisJKGRpdnNpMyk6IERpdHRvLgorCShtb2RzaTMpOiBEaXR0by4KKwkodWRpdm1vZHNpNCk6IE5vIGxvbmdlciB1c2UgLW1kZWJ1Z2MgdG8gdHVybiBvZmYgdWRpdm1vZHNpNC4KKwkodWRpdnNpMyk6IERpdHRvLgorCSh1bW9kc2kzKTogRGl0dG8uCisKKwkqIG1pcHMtZ241Lmg6IFJlbmFtZSBmcm9tIG1pcHMtZ25ld3M1LmggZm9yIE1TRE9TLgorCSogbWlwcy1uNS5oOiBSZW5hbWUgZnJvbSBtaXBzLW5ld3M1LmguCisJKiB4bS1taXBzYnNkbmV3cy5oOiBSZW5hbWUgZnJvbSB4bS1taXBzbmJzZC5oLgorCisJKiBjb25maWd1cmUgKG1pcHMtc29ueSopOiBIYW5kbGUgdGhlIGFib3ZlIGNoYW5nZXMuCisKKwkqIFJFQURNRS1taXBzICh3aG9sZSBmaWxlKTogUmVtb3ZlIGJvZ3VzIHBhdGNoZXMsIGFuZCB1cGRhdGUgd2l0aAorCXNvbWUgY29tbW9uIHdhcm5pbmdzIGFib3V0IHRoZSBNSVBTLgorCitNb24gQXByIDI3IDEyOjQxOjIxIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogdW5yb2xsLmMgKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogRG9uJ3Qgc3BsaXQgYSBnaXYgY29tYmluZWQgd2l0aAorCWEgZ2l2IHRoYXQgd2FzIG5vdCByZWR1Y2VkLgorCisJKiBjLXBhcnNlLnkgKHByaW1hcnkpOiBDbGVhciB0aGUgVFJFRV9VU0VEIGZsYWcgb2YgYSBibG9jayB0cmVlCisJcHV0IGluIGEgQklORF9FWFBSLgorCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgdGhlIGJsb2NrIG9wZXJhbmQgb2YgYSBCSU5EX0VYUFIuCisKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBBc3N1bWUgTUVNIHNvdXJjZSBpbiBqdW1wIGluc24gbWFrZXMKKwlpdCBhbiBpbmRpcmVjdCBqdW1wLgorCisJKiBjb2xsZWN0Mi5jIChzdHJpcF9mbGFnLCBzdHJpcF9maWxlX25hbWUpOiBOZXcgdmFyaWFibGVzLgorCShtYWluKTogRG9uJ3QgcGFzcyAtcyB0byB0aGUgZmlyc3QgbGQgY2FsbC4gIFBhc3MgaXQgdG8gdGhlIHNlY29uZAorCWxkIGNhbGwsIG9yIGVsc2UgcnVuIHN0cmlwLgorCisJKiBNYWtlZmlsZS5pbiAoYm9vdHN0cmFwKTogT25seSBidWlsZCBDIGNvbXBpbGVyIGZvciBzdGFnZTEuCisKKwkqIHNwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFJld3JpdGUgdG8gYWNjZXB0IFNVQlJFR3MuCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSk6IENvcnJlY3RseSBmb3JtIG1hc2sgZnJvbSBCSVRTLgorCisJKiBNYWtlZmlsZS5pbiAoYm9vdHN0cmFwKTogRml4IGEgdHlwbyAoXG4gYmV0d2VlbiBiIGFuZCBvb3RzdHJhcCkuCisKK1N1biBBcHIgMjYgMTQ6MTQ6MjMgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBnZXRhdHRyLmMsIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYywgZ2VuY29uZmlnLmMsIGdlbmVtaXQuYywKKwlnZW5leHRyYWN0LmMsIGdlbmZsYWdzLmMsIGdlbm91dHB1dC5jLCBnZW5wZWVwLmMsIGdlbnJlY29nLmMgKG1haW4pOgorCU1vdmUgbmVzdGVkIGV4dGVybiBkZWNsYXJhdGlvbiBvZiBgcmVhZF9ydHgnIG91dCB0byBmaWxlLXNjb3BlLgorCitTdW4gQXByIDI2IDIxOjQxOjMzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluICh2YXJhc20ubyk6IEluY2x1ZGVzIGRlZmF1bHRzLmguCisKK1N1biBBcHIgMjYgMjE6MTU6MzAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBlbnF1aXJlLmMgKGZfcmVwLCBmX2RlZmluZSk6IEhhbmRsZSBOT19MT05HX0RPVUJMRV9JTy4KKwkoZl9kZWZpbmUpOiBQcmludCBkZWZuIG9mIHVuaW9uIF9fY29udmVydF9sb25nX2RvdWJsZSwganVzdCBvbmNlLAorCXdpdGggI2lmbmRlZiB0byBwcm90ZWN0IGl0LgorCShmYWtlX2ZfZGVmaW5lKTogTmV3IGZ1bmN0aW9uLgorCitTYXQgQXByIDI1IDE1OjA0OjQ5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBUZXN0IERJIGluZGV4IGFnYWluc3QgcmFuZ2UgYmVmb3JlIGNhc2VzaS4KKwlEb24ndCB0cnVuY2F0ZSBiZWZvcmUgY2FsbGluZyBkb190YWJsZWp1bXAuCisJVXNlIGV4cGFuZF9leHByIHRvIHR1cm4gUkFOR0UgaW50byBydGwuCisJKiBleHByLmMgKGRvX3RhYmxlanVtcCk6IENvbnZlcnQgdG8gUG1vZGUgYWZ0ZXIgdGVzdGluZyB2cyByYW5nZS4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBEZWxldGUgdGVzdCBkZWZhdWx0X2xhYmVsICE9IDA7IGFsd2F5cyBpcy4KKworCSogY29uZmlndXJlIChpMzg2LWlibS1haXgpOiBTZXQgaW5zdGFsbF93aXRoX2NwLgorCitGcmkgQXByIDI0IDIxOjMyOjM4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeG0tc3BjdjQuaDogUmVuYW1yZCBmcm9tIHhtLXNwYXJjdjQuaC4KKwkqIGNvbmZpZ3VyZTogQ2hhbmdlZCBhY2NvcmRpbmdseS4KKworCSogTWFrZWZpbGUuaW4gKHVucHJvdG9pemUubyk6IExlYXZlIHVucHJvdG9pemUuYyBhcm91bmQuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IENoYW5nZSB3YXJuaW5ncyB0byBlcnJvcnMuCisKK0ZyaSBBcHIgMjQgMTE6MTc6NTMgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZi5oOiAgQWRkZWQgY29weWxlZnQuCisJUmV2aXNlZCB0byB1c2UgZW51bWVyYXRvcnMgaW5zdGVhZCBvZiAjZGVmaW5lcy4KKwlVcGRhdGVkIHRvIGNvbmZvcm0gdG8gdmVyc2lvbiAxLjAuMSBvZiB0aGUgRFdBUkYgc3BlYy4KKwlBZGRlZCBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGZ1bmRhbWVudGFsIHR5cGUgY29kZXMgZm9yIEdDQworCW1vZGUtc3BlY2lmaWMgdHlwZXMuCisKKwkqIGR3YXJmb3V0LmM6IEluY2x1ZGUgZGVmYXVsdHMuaC4KKwkoZ2V0cHdkKTogIERlY2xhcmUgYXMgYGV4dGVybicuCisJKEJJVEZJRUxEX09GRlNFVF9CSVRTLCBCSVRGSUVMRF9PRkZTRVRfVU5JVFMsCisJQklURklFTERfT0ZGU0VUX1dPUkRTX0lOX1VOSVRTKTogIFVubmVjZXNzYXJ5IGRlZmluaXRpb25zIGRlbGV0ZWQuCisJKEFTTV9CWVRFX09QLCBQVVNIU0VDVElPTl9BU01fT1AsIFBPUFNFQ1RJT05fQVNNX09QKTogIERlbGV0ZQorCWxlYWRpbmcgdGFicyBmcm9tIGRlZmluaXRpb25zLgorCShQVVNIU0VDVElPTl9GT1JNQVQpOiAgQWRkIGxlYWRpbmcgdGFiIHRvIGRlZmluaXRpb24uCisJKCpfTEFCRUwpOiAgQ2hhbmdlZCB0byBhbGwgc3RhcnQgd2l0aCBgLkwnIHRvIGludGVybmFsaXplIHRoZXNlCisJc3ltYm9scyBmb3IgKmFsbCogc3ZyNCBhc3NtZWJsZXJzIChpbmNsdWRpbmcgc3BhcmMpLgorCShBU01fT1VUUFVUX1BPUF9TRUNUSU9OKTogIEFkZCBsZWFkaW5nIHRhYi4KKwkoQVNNX09VVFBVVF9EV0FSRl9UQUcsIEFTTV9PVVRQVVRfRFdBUkZfQVRUUklCVVRFLAorCUFTTV9PVVRQVVRfRFdBUkZfU1RBQ0tfT1AsIEFTTV9PVVRQVVRfRFdBUkZfRlVORF9UWVBFLAorCUFTTV9PVVRQVVRfRFdBUkZfRk1UX0JZVEUsIEFTTV9PVVRQVVRfRFdBUkZfVFlQRV9NT0RJRklFUik6ICBQcmludAorCURXQVJGIGNvbW1lbnRzIG9ubHkgaWYgZmxhZ192ZXJib3NlX2FzbSBzZXQuCisJKEFTTV9PVVRQVVRfQVNDSUkpOiAgTW92ZWQgdG8gZGVmYXVsdHMuaAorCSh0YWdfbmFtZSk6ICBSZW5hbWVkIGBkd2FyZl90YWdfbmFtZScgdG8gYXZvaWQgcG9zc2libGUgY29uZmxpY3RzLgorCShkd2FyZl90YWdfbmFtZSk6ICBVcGRhdGVkIGZvciB2ZXJzaW9uIDEuMC4xIERXQVJGIHNwZWMuCisJKGF0dHJpYnV0ZV9uYW1lKTogIFJlbmFtZWQgYGR3YXJmX2F0dHJfbmFtZScgdG8gYXZlcnQgY29uZmxpY3RzLgorCShkd2FyZl9hdHRyX25hbWUpOiAgVXBkYXRlZCBmb3IgdmVyc2lvbiAxLjAuMSBEV0FSRiBzcGVjLgorCShzdGFja19vcF9uYW1lKTogUmVuYW1lZCBgZHdhcmZfc3RhY2tfb3BfbmFtZScgdG8gYXZlcnQgY29uZmxpY3RzLgorCShmb3JtYXRfYnl0ZV9uYW1lKTogUmVuYW1lZCBgZHdhcmZfZm10X2J5dGVfbmFtZScgdG8gYXZlcnQgY29uZmxpY3RzLgorCShmdW5kYW1lbnRhbF90eXBlX25hbWUpOiBSZW5hbWVkIGBkd2FyZl9mdW5kX3R5cGVfbmFtZScgdG8gYXZvaWQKKwlwb3NzaWJsZSBjb25mbGljdHMuCisJKGR3YXJmX2Z1bmRfdHlwZV9uYW1lKTogIEFkZGVkIHN1cHBvcnQgZm9yIGltcGxlbWVudGF0aW9uLWRlZmluZWQKKwlHQ0MgbW9kZSBzcGVjaWZpYyBmdW5kYW1lbnRhbCB0eXBlcyBjb2RlcyAodG8gc3VwcG9ydCBuZXcgYG1vZGUnCisJYXR0cmlidXRlKS4KKwkoZGF0YV9tZW1iZXJfbG9jYXRpb25fYXR0cmlidXRlKTogIFJld3JpdHRlbiB0byBhdm9pZCBtYWpvciBsb3NzYWdlCisJcHJpbWFyaWx5IGZvciBsaXR0bGUtZW5kaWFuIHRhcmdldHMuCisJKGxvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6ICBGaXhlZCBjb21tZW50cyBhbmQgcmVtb3ZlZAorCXNwdXJpb3VzIGNvZGUuCisJKG5hbWVfYXR0cmlidXRlKTogIFJlbW92ZWQgdGVzdCBmb3IgTlVMTCBuYW1lIChub3cgZG9uZSBpbgorCWBuYW1lX2FuZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMnKS4KKwkoYnl0ZV9zaXplX2F0dHJpYnV0ZSk6ICBGaXhlZCB0byBnZXQgc2l6ZSBmcm9tIERFQ0xfQklUX0ZJRUxEX1RZUEUKKwlmb3IgYml0LWZpZWxkcy4KKwkoYml0X29mZnNldF9hdHRyaWJ1dGUpOiAgUmV3cml0dGVuIHRvIGF2b2lkIG1ham9yIGxvc3NhZ2UgcHJpbWFyaWx5CisJZm9yIGxpdHRsZS1lbmRpYW4gdGFyZ2V0cy4KKwkoc3JjX2Nvb3Jkc19hdHRyaWJ1dGUpOiAgR05VLXNwZWNpZmljIGV4dGVuc2lvbiBhZGRlZC4KKwkobmFtZV9hbmRfc3JjX2Nvb3Jkc19hdHRyaWJ1dGVzKTogIE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2VudHJ5X3BvaW50X2RpZSwgb3V0cHV0X2Zvcm1hbF9wYXJhbWV0ZXJfZGllLAorCW91dHB1dF9nbG9iYWxfc3Vicm91dGluZV9kaWUsIG91dHB1dF9nbG9iYWxfdmFyaWFibGVfZGllLAorCW91dHB1dF9pbmxpbmVfc3Vicm91dGluZV9kaWUsIG91dHB1dF9sYWJlbF9kaWUsCisJb3V0cHV0X2xvY2FsX3ZhcmlhYmxlX2RpZSwgb3V0cHV0X21lbWJlcl9kaWUsCisJb3V0cHV0X2xvY2FsX3N1YnJvdXRpbmVfZGllLCBvdXRwdXRfdHlwZWRlZl9kaWUpOiAgQ2FsbAorCWBuYW1lX2FuZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMnIHJhdGhlciB0aGFuIGBuYW1lX2F0dHJpYnV0ZScgZm9yCisJYWxsIHBvdGVudGlhbGx5LW5hbWVkIGRlY2xhcmF0aW9ucy4KKwkob3V0cHV0X2dsb2JhbF9zdWJyb3V0aW5lX2RpZSwgb3V0cHV0X2lubGluZV9zdWJyb3V0aW5lX2RpZSwKKwlvdXRwdXRfbG9jYWxfc3Vicm91dGluZV9kaWUsIGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6ICBVc2UKKwlERUNMX0FTU0VNQkxFUl9OQU1FIHJhdGhlciB0aGFuIERFQ0xfTkFNRSB3aGVuIHJlZmVyZW5jaW5nCisJYXNzZW1ibHkgbGV2ZWwgbmFtZXMgKGUuZy4gaW4gQVRfbG93X3BjIGF0dHJpYnV0ZXMpLgorCShvdXRwdXRfdHlwZSk6ICBSZXZpc2VkIHRvIHByb2R1Y2UgRFdBUkYgaW5mbyBmb3IgQysrIG1lbWJlciBmdW5jdGlvbnMKKwlldmVuIGZvciBjbGFzc2VzIHdpdGggbm8gY29uc3RydWN0b3JzICYgZGVzdHJ1Y3RvcnMuCisKKwkqIGZsYWdzLmggKGZsYWdfdmVyYm9zZV9hc20pOiAgT3B0aW9uIGZsYWcgYWRkZWQuCisJKiB0b3BsZXYuYyAoZmxhZ192ZXJib3NlX2FzbSk6ICBPcHRpb24gZmxhZyBhZGRlZC4KKworCSogZGVmYXVsdHMuaDogTmV3IGZpbGUuCisJKiB2YXJhc20uYzogSW5jbHVkZSBkZWZhdWx0cy5oLgorCShBU01fT1VUUFVUX0FTQ0lJKTogRGVsZXRlZC4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogIENhbGwgYHR5cGVfZm9yX21vZGUnIHJhdGhlciB0aGFuCisJYHR5cGVfZm9yX3NpemUnLiAgQWxzbywgYGJyZWFrJyBhZnRlciBhIG1hdGNoaW5nIG1vZGUgaXMgZm91bmQuCisKKwkqIDNiMS5oIChBU01fT1VUUFVUX0FTQ0lJKTogIFRhYiBiZWZvcmUgQVNDSUlfREFUQV9BU01fT1AuCisJKiBhbWl4LmggKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiAgVGFiIGJlZm9yZSBTRVRfQVNNX09QLgorCShBU01fT1VUUFVUX0FTQ0lJKSAgVGFiIGJlZm9yZSBCWVRFX0FTTV9PUC4KKwkqIGk4NjBiLmggKEFTTV9PVVRQVVRfQVNDSUkpOiAgVGFiIGJlZm9yZSBBU0NJSV9EQVRBX0FTTV9PUC4KKwkqIGk4NjB2My5oIChBU01fT1VUUFVUX0FTQ0lJKTogIFRhYiBiZWZvcmUgQllURV9BU01fT1AuIAorCSogc3BhcmN2NC5oICgqX0FTTV9PUCk6IERlbGV0ZSB0aGUgaW5pdGlhbCB0YWJzLgorCisJKiBhc3NlcnQuaDogIE1vZGlmaWVkIHRvIHRyZWF0IHNvdXJjZSBsaW5lIG51bWJlcnMgYXMgYHVuc2lnbmVkJy4KKworCSogTWFrZWZpbGUuaW4gKHRlc3QtcHJvdG9pemUpOiBOZXcgdGFyZ2V0LgorCisJKiBzdnI0LmggKFdFQUtfQVNNX09QKTogIERlZmF1bHQgc3ZyNCBkZWZpbml0aW9uIGFkZGVkLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKTogIFVzZSBgYXNzZW1ibGVfbmFtZScgdG8gb3V0cHV0CisJZ2VuZXJhdGVkIGludGVybmFsIGxhYmVsLgorCitUaHUgQXByIDIzIDExOjMxOjU4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogb3B0YWJzLmMgKGVtaXRfbGliY2FsbF9ibG9jayk6IENvcnJlY3QgY29kZSB3aGljaCBkZXRlcm1pbmVzCisJd2hldGhlciBpdCBpcyBzYWZlIHRvIGVtaXQgYW4gaW5zbiBzZXR0aW5nIGEgcHNldWRvIGJlZm9yZSB0aGUgYmxvY2suCisKK1RodSBBcHIgMjMgMTg6MTM6MDggMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChzbGV1KTogRmluaXNoIEFwciAyMSBjaGFuZ2UuCisKK1RodSBBcHIgMjMgMTQ6MTU6MDUgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIE1ha2VmaWxlLmluIChlbnF1aXJlLm8pOiBEZWxldGUgZW5xdWlyZS5jIGZyb20gdGhlIGN1cnJlbnQKKwlkaXJlY3RvcnkgYmVmb3JlIG1vdmluZyBpdCBpbiBmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCB1bmxlc3MKKwl0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgdGhlIHNhbWUgYXMgdGhlIHNvdXJjZSBkaXJlY3RvcnkuICBUaGlzCisJb2NjdXJzIGlmIHRoZSB1c2VyIGtlZXBzIEdDQyB1bmRlciBzb3VyY2UgY29udHJvbCwgbGlrZSBSQ1MuCisJKGluc3RhbGwtY29tbW9uLWhlYWRlcnMpOiBEaXR0byBmb3IgYnl0ZW9yZGVyLmguCisKK1RodSBBcHIgMjMgMTI6Mzk6MzYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBhbWl4LmggKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBBZGQgbWlzc2luZyBcLgorCitUaHUgQXByIDIzIDA3OjE0OjM4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIE1JTlVTKTogRG9uJ3QgZG8gYW55CisJb2YgdGhlIHNpbXBsaWZpY2F0aW9ucyBmb3IgSUVFRSBmbG9hdGluZy1wb2ludC4KKworV2VkIEFwciAyMiAyMzoyMDo1OSAxOTkyICBNaWtlIFN0dW1wICAobXJzQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKKworCVR1ZSBBcHIgMjEgMDI6MjE6NDIgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSGFuZGxlIGZ1bmN0aW9uIG5hbWVzIGFzCisJY29uc3RhbnQgZXhwcmVzc2lvbnMgZm9yIHRlbXBsYXRlIGFyZ3VtZW50cy4gIEFsc28sIG1ha2UgZG91YmxlCisJdmFsdWVzIHdvcmsgYWdhaW4gYXMgdGVtcGxhdGUgYXJndW1lbnRzLgorCisJTW9uIEFwciAyMCAxNzowODoxNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGlkZWFsX2NhbmRpZGF0ZSk6ICByZW1vdmUgaW5jb3JyZWN0IGVycm9yIG1lc3NhZ2UgYWJvdXQKKwlgYGFtYmlndW91cyByZXF1ZXN0IGZvciBmdW5jdGlvbiBmcm9tIGRpc3RpbmN0IGJhc2UgY2xhc3NlcyBvZgorCXR5cGUnJyB3aGVuIGJhc2UgYW5kIHBhcmVudCBhcmUgc3dpdGNoZWQuCisKKwlNb24gQXByIDIwIDE0OjE0OjM1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluOiAgTm93IGV4cGVjdCAxNSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cywgaW5zdGVhZCBvZiAxNC4KKworCU1vbiBNYXIgMTYgMTQ6MDI6MDkgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcCBhdCB0Y3QuY29tKQorCisJKiBjcC1wYXJzZS55IChtYXliZV9hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVfbGlzdCk6ICBjbG9uZQorCWZyb20gYy1wYXJzZS55LgorCWNwLXBhcnNlLnk6ICBjYWxsIGRlY2xfYXR0cmlidXRlcyBiZXR3ZWVuIHN0YXJ0X2RlY2wgYW5kCisJZmluaXNoX2RlY2wsIGFuZCBhZnRlciBncm9rZmllbGQuCisKKwlNb24gQXByIDIwIDA5OjIxOjAwIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChicmVha19vdXRfY2FsbHMpOiBEZWNsYXJlLgorCisJTW9uIEFwciAyMCAwODoyOToxNiAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuYyAoYnJlYWtfb3V0X2NhbGxzKTogTmV3IGZ1bmN0aW9uLgorCShicmVha19vdXRfY2xlYW51cHMpOiBBZGRlZCBjb21tZW50LgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBDYWxsIGBicmVha19vdXRfY2FsbHMnIGluc3RlYWQgb2YKKwlgY29weV90b19wZXJtYW5lbnQnLgorCisJTW9uIEFwciAyMCAwNjoyOToxNiAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hYm9ydCk6ICBOZXcgZnVuY3Rpb24sIHBsZWFzZSBzZWUKKwlSYXRpb25hbCB0aGVyZS4KKworCSogY3AtKi5bY2h5XTogIENoYW5nZSBhbGwgY2FsbHMgZnJvbSBhYm9ydCB0byBteV9mcmllbmRseV9hYm9ydC4KKworCU1vbiBBcHIgMjAgMDU6NDU6MDggMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6ICBGaXggYSBsYXRlbnQgY29uc3QgcHJvYmxlbS4KKworCU1vbiBBcHIgMjAgMDM6MDg6MTIgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHBvcF9mcm9tX3RvcF9sZXZlbCk6IERlbGV0ZWQgZHVwbGljYXRlIGNvZGUgaW4gQ19DX0QKKwlyZXN0b3JhdGlvbi4KKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENhbGwgYGVycm9yX3dpdGhfYWdncl90eXBlJyB3aXRoCisJY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLgorCisJU3VuIEFwciAxOSAxODozOToyNSAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogT25seSBwcm92aWRlIGEgd2FybmluZyBhYm91dAorCW5vbi12aXJ0dWFsIGRlc3RydWN0b3JzIGlmIHRoZSB1c2VyIGFza3MgZm9yIC1XYWxsLgorCisJU3VuIEFwciAxOSAxNzozNjoxNiAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiAgTWFrZSBhIGRlZXAgY29weSBvZiBsaHMsIGFzCisJZXhwci5jIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBwcmVleHBhbmRfY2FsbHMgb24gdGhlIGNvbmRpdGlvbmFsCisJcGFydHMgd2l0aG91dCBpbnN1cmluZyB0aGF0IGl0IHdvdWxkIGV2ZW4gYmUgbGVnYWwgdG8gZG8gc28uCisKKwkqIGNwLXRyZWUuYyAobWFrZV9kZWVwX2NvcHkpOiAgRml4IGNvbW1lbnQuCisKKwlGcmkgQXByIDE3IDA0OjU1OjE4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG8pOiAgUHJvdmlkZSB0aGUgdXNlciB3aXRoIGEgbWVhbmluZ2Z1bAorCWVycm9yIG1lc3NhZ2UgaW5zdGVhZCBvZiBhIGNvcmUgZHVtcCB3aGVuIGRlYWxpbmcgd2l0aCBiYWQgc3ludGF4LgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogIE1ha2UgZXJyb3IgbWVzc2FnZSBvbiB1bmRlZmluZWQKKwlvcGVyYXRvciBjYWxsIG1vcmUgcmVhZGFibGUuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6ICBIYW5kbGUgVCYgPSBjb25zdCBUJgorCWVycm9yIG1lc3NhZ2VzLgorCisJVGh1IEFwciAxNiAxODo1OToxNSAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBEaXNhYmxlIGNvZGUgdGhhdCBhdXRvIGNvbnZlcnRlZAorCWZ1bmN0aW9ucyBhbmQgbWV0aG9kcyB0byBwb2ludGVycyBhbmQgbGVmdCB0aGVtIHRoYXQgd2F5IHdpdGhvdXQgZXJyb3IuCisKKwlUaHUgQXByIDE2IDE3OjM1OjEzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwlTYXQgQXByICA0IDIyOjI4OjIzIDE5OTIgIEdlcmFsZCBCYXVtZ2FydG5lciAgKGdiIGF0IGNzLnB1cmR1ZS5lZHUpCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBDYWxsIGBhYnN0cmFjdF92aXJ0dWFsc19lcnJvcicKKwl3aGVuIHRoZSByZXR1cm4gdHlwZSBvZiBhIG1ldGhvZCBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KKworCSogY3AtdHlwZTIuYyAoYWJzdHJhY3RfdmlydHVhbHNfZXJyb3IpOiBQcmludCBlcnJvciBtZXNzYWdlCisJZm9yIGFuIGludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uLgorCisJVGh1IEFwciAxNiAxNjoxODozNSAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgaW1wb3J0IGJ5IGlnbm9yaW5nIGl0LgorCitXZWQgQXByIDIyIDE5OjQ2OjQ0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3Rpb25zLmMgKHN5bnRoX2lkX3dpdGhfY2xhc3Nfc3VmZml4LCBmaW5pc2hfY2xhc3MpOgorCURvbid0IHVzZSB1dGxidWY7IGFsbG9jYSBhIGJ1ZmZlci4KKwkoZm9yd2FyZF9kZWNsYXJlX2NhdGVnb3JpZXMpOiBVc2UgYnVpbGRfZGVjbCBkaXJlY3RseSBzaW5jZQorCWNyZWF0ZV9idWlsdGluX2RlY2wgd2FudHMgYSBzdHJpbmcsIG5vdCBhbiBpZC4KKworCSogTWFrZWZpbGUuaW4gKFNUQUdFU1RVRkYpOiBBZGQgVVNFX0NPTExFQ1QyLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IENsZWFuIHVwIGxhc3QgY2hhbmdlLgorCitXZWQgQXByIDIyIDE3OjA2OjE2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChncGNfcmVnX29wZXJhbmQpOiBSZW5hbWVkIGZyb20gZ2VuX3JlZ19vcGVyYW5kLgorCSogcnM2MDAwLmggKFBSRURJQ0FURV9DT0RFUyk6IExpa2V3aXNlLgorCSogcnM2MDAwLm1kOiBMaWtld2lzZS4KKworCSogYTI5ay5jIChncGNfcmVnKl9vcGVyYW5kKTogUmVuYW1lZCBmcm9tIGdlbl9yZWcqX29wZXJhbmQuCisJKiBhMjlrLmggKFBSRURJQ0FURV9DT0RFUyk6IExpa2V3aXNlLgorCSogYTI5ay5tZDogTGlrZXdpc2UuCisKKwkqIHJvbXAuYyAob3V0cHV0X2Zwb3ApOiBFeHRlbmQgd29ya2Fyb3VuZCBmb3IgUlQgRlAgY29kZWdlbiBidWcuCisKK1dlZCBBcHIgMjIgMDY6MjA6MDkgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY29tcGFyaXNvbiBjYXNlcyk6IFVzZSBvbWl0X29uZV9vcGVyYW5kIHRvCisJeWllbGQgYSBzaW1wbGlmaWVkIHJlc3VsdCB0byBhdm9pZCBsb29zaW5nIGEgc2lkZS1lZmZlY3QuCisKK1R1ZSBBcHIgMjEgMTM6MTk6NDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IEZvciBUWVBFX0RFQ0wsIGFsd2F5cyBtYWtlIHJlcXVpc2l0ZSB0YWcKKwlvbmUgd2F5IG9yIGFub3RoZXIgZXZlbiBpZiAhaGF2ZV91c2VkX2V4dGVuc2lvbnMuCisKKwkqIGNvbmZpZ3VyZTogU3BlY2lmaWNhbGx5IGRldGVjdCB1bnJlY29nbml6ZWQgb3B0aW9ucy4KKworVHVlIEFwciAyMSAwODoxNjowNSAxOTkyICBUb20gV29vZCAgKHdvb2QgIGF0IGRnLXJ0cC5kZy5jb20pCisgCisJKiBjLWNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogRG9uJ3QgZGlzdHJpYnV0ZSBhIHRydW5jYXRpb24KKwlkb3duIHBhc3QgYW4gQUJTX0VYUFIuIAorIAorCSogbTg4ay5tZCAoYnh4IGluc24pOiBDaG9vc2UgYmIwIG92ZXIgYmIxIGlmIHRoZSBicmFuY2ggaXMgbGlrZWx5CisJdG8gZmFsbC10aHJvdWdoIChtODgxMTAgb3B0aW1pemF0aW9uKS4KKwkqIG04OGsuYyAobW9zdGx5X2ZhbHNlX2p1bXApOiBOZXcgZnVuY3Rpb24uCisKKwkqIG04OGsuaCAoSU5JVF9TRUNUSU9OX0FTTV9PUCk6IERlZmluZSBvbmx5IGZvciBzdnIzIGFuZCBzdnI0IHRhcmdldHMuCisKKwkqIG04OGsuYyAob3V0cHV0X2NhbGwpOiBVc2UgdGhlIGluc24gYWRkcmVzcyBvZiB0aGUgc2VxdWVuY2UuCisJKiBtODhrLmggKEFESlVTVF9JTlNOX0xFTkdUSCk6IEFjY291bnQgZm9yIHNwYWNlIGFkZGVkIGF0IGJhcnJpZXJzCisJZHVlIHRvIEFTTV9PVVRQVVRfQUxJR05fQ09ERS4KKworVHVlIEFwciAyMSAwNzozMDo0NiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKG1hcmtfanVtcF9sYWJlbCwgY2FzZSBNRU0pOiBOZXcgY2FzZSB0byBsb29rIGZvciBsYWJlbAorCWluIGEgY29uc3RhbnQtcG9vbCBlbnRyeS4KKworVHVlIEFwciAyMSAwMDo0MTozOSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHJlZy1zdGFjay5jIChjb21wYXJlX2Zvcl9zdGFja19yZWcpOiBsaW5rIGNjMCB1c2VyIGFuZCBzZXR0ZXIKKwliZWZvcmUgc2VwYXJhdGluZyB0aGVtLgorCisJKiByZW9yZy5jIChsaW5rX2NjMF9pbnNucyk6IE1vdmUgZnVuY3Rpb24gZnJvbSBoZXJlIC0KKwkqIGVtaXQtcnRsLmMgKGxpbmtfY2MwX2luc25zKTogdG8gaGVyZS4KKworCSogaTM4Ni5oIChUQVJHRVRfSUVFRV9GUCk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIHN3aXRjaGVzIGZvciBpZWVlIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQuCisJKEVYVFJBX0NDX01PREVTLEVYVFJBX0NDX05BTUVTKTogQWRkIENDRlBFUW1vZGUuCisJKFNFTEVDVF9DQ19NT0RFKTogU2VsZWN0IENDRlBFUW1vZGUgZm9yIEZQIGVxdWFsaXR5IGNvbXBhcmlzb25zLgorCShpMzg2X2NvbXBhcmVfZ2VuKixpMzg2X2NvbXBhcmVfb3AqKTogRGVjbGFyZSBuZXcgdmFyaWFibGVzIHRvCisJZ2VuZXJhdGUgY29tcGFyaXNvbnMgZnJvbSB3aXRoaW4gYnJhbmNoIGFuZCBzQ0MgaW5zbnMuCisJKFJUWF9DT1NUUyk6IEZpeCBhcmd1bWVudCBuYW1lIHR5cG8uCisKKwkqIGkzODYuYyAoaTM4Nl9jb21wYXJlX2dlbiosaTM4Nl9jb21wYXJlX29wKik6IERlZmluZSB2YXJpYWJsZXMgaGVyZS4KKwkobm90aWNlX3VwZGF0ZV9jYyk6IE5vdGljZSBpZiBhIGNvbXBhcmlzb24gaW52b2x2ZXMgRlAgdmFsdWVzLgorCShvdXRwdXRfZmxvYXRfY29tcGFyZSk6IEFkZCBzdXBwb3J0IGZvciAidW5vcmRlcmVkIiBjb21wYXJlLgorCVVzZSBvdXRwdXRfZnBfY2MwX3NldCB0byBzZXQgZmxhZ3MgYWZ0ZXIgYSBjb21wYXJlLgorCShvdXRwdXRfZnBfY2MwX3NldCk6IE5ldyBmdW5jdGlvbi4KKworCSogaTM4Ni5tZCAodHN0TSxjbXBNKTogTmV3IGV4cGFuZGVycy4gIERvbid0IGdlbmVyYXRlIFJUTDsganVzdAorCXNhdmUgZGF0YSBmb3Igd2hlbiBjYzAgdXNlciBpcyBnZW5lcmF0ZWQuCisJKGJDT05ELHNDT05EKTogTmV3IGV4cGFuZGVycy4gIEdlbmVyYXRlIHRoZSBjb21wYXJlL3Rlc3QgYXMgd2VsbAorCWFzIHRoZSBiQ09ORCBvciBzQ09ORC4KKworCSh0c3RzZix0c3RkZik6IERpc2FibGUgcGF0dGVybnMgaWYgZ2VuZXJhdGluZyBpZWVlIGNvbXBsaWFudCBjb2RlLgorCSh0c3RzZix0c3RkZixjbXBzZixjbXBkZik6IFVzZSBvdXRwdXRfZnBfY2MwX3NldCB0byBzZXQgZmxhZ3MKKwlhZnRlciB0ZXN0LgorCURvbid0IGNoYW5nZSBjY19zdGF0dXMgaGVyZTogdGhhdCB3b24ndCB3b3JrIHdpdGggUkVHX0NDX1NFVFRFUgorCWFuZCBSRUdfQ0NfVVNFUi4KKworCShhbGwgQ09NUEFSRXMpOiBVc2UgQ0Ntb2RlIGFzIG1vZGUgb2YgYSBDT01QQVJFLgorCitNb24gQXByIDIwIDExOjE3OjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbGltaXRzLmggKExPTkdfTE9OR19NSU4sIExPTkdfTE9OR19NQVgsIFVMT05HX0xPTkdfTUFYKTogTmV3IG1hY3Jvcy4KKworCSogY29uZmlndXJlOiBDbGVhciBvdXRfZmlsZSBiZWZvcmUgdGhlIGJpZyBjYXNlLCBsaWtlIHRtX2ZpbGUsIGV0Yy4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBMQUJFTF9ERUNMKTogSGFuZGxlIGxhYmVsIGZyb20gb3V0ZXIgZmNuLgorCitNb24gQXByIDIwIDEwOjE3OjQ5IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiB4LW04OGtsdW5hOiBEZWxldGUuCisJKiB4LW04OGt2MzogUmVuYW1lZCBmcm9tIHgtbTg4ay4KKwkqIGNvbmZpZ3VyZSAobTg4ay0qKTogUmVhcnJhbmdlLgorCitNb24gQXByIDIwIDIxOjI5OjAwIDE5OTIgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBjb25maWctZ2NjLmNvbTogR2VuZXJhdGUgbGliZ2NjMi5saXN0IGZyb20gTWFrZWZpbGUuaW4KKwkqIG1ha2UtbDIuY29tOiBVc2UgbGliZ2NjMi5saXN0OyBzdXBwbHkgZ2NjIHZlcnNpb24gbnVtYmVyIHRvIGdhcy4KKworCSogY29uZmlnLWdhY2MuY29tOiBHZW5lcmF0ZSBsaW5rZXIgb3B0aW9ucyBmaWxlcyBmcm9tIE1ha2VmaWxlLmluCisKKwkqIG1ha2UtY2MxLmNvbTogVXNlIHNhaWQgbGlua2VyIG9wdGlvbnMgZmlsZXMgaW5zdGVhZCBvZiBzdGF0aWMgCisJbGlzdCBvZiBmaWxlcy4KKwkqIG1ha2UtY2MxLmNvbTogSGFuZGxlIGVycm9ycyBiZXR0ZXIuCisKK01vbiBBcHIgMjAgMTA6MDU6MzQgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMubWQgKGRpdm1vZHNpNCwgdWRpdm1vZHNpNCk6IFJlbW92ZSB1bm5lZWRlZCBQQVJBTExFTC4gIFBhdGNoCisJZnJvbSBSaWNoYXJkIEtlbm5lci4KKworTW9uIEFwciAyMCAwODozODoyNiAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUik6IEZvciBzdGF0aWMgQ09OU1RSVUNUT1IsCisJcmVxdWlyZSBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIG9ubHkgaWYgbW9kaWZpZXIgZG9lcy4KKworU3VuIEFwciAxOSAxNTowOTowMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdlbmVtaXQuYyAoZ2VuX2luc24pOiBNb2RlIG9mIFNDUkFUQ0ggbXVzdCBtYXRjaCBpbiBjbG9iYmVyIGxpc3RzLgorCisJKiBzY2hlZC5jIChhZGRfZGVwZW5kZW5jZSwgcmVtb3ZlX2RlcGVuZGVuY2UpOiBNb3ZlZCBmcm9tIHJ0bC5jLgorCSogcnRsLmM6IEZ1bmN0aW9ucyBkZWxldGVkIGhlcmUuCisKKwkqIE1ha2UgaW5zdGFsbGF0aW9uIG9mIGNvbGxlY3QyIGF1dG9tYXRpYy4KKwkqIGNvbmZpZ3VyZTogRGVmaW5lIHVzZV9jb2xsZWN0MiBmb3IgYWxsIEJTRCBhbmQgTWFjaCBhbmQgSFAvVVgKKwljb25maWd1cmF0aW9ucywgcGx1cyB0aGUgb25lcyBiZWxvdywgYW5kIGEgZmV3IG90aGVycy4KKwkqIHQtZGVjcm9zZSwgdC1kZWNzdGF0biwgdC1lbmNyb3NlLCB0LWkzODZyb3NlLCB0LW1pcHMsIHQtbmV4dDoKKwkoRVhUUkFfUFJPR1JBTVMpOiBEZWxldGVkLgorCSogdC1hcG9sbG82OCwgdC1jb252ZXgsIHQtZHB4MiwgdC1yczYwMDA6IEZpbGVzIGRlbGV0ZWQuCisKKwkqIGxpYmdjYzEuYyAobm9uZ2NjX1NJX3R5cGUpOiBSZW5hbWVkIGZyb20gU0l0eXBlLgorCisJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBDaGVjayBvbmx5IGVhcmx5Y2xvYmJlcnMgdGhhdCBhcmUgUkVHcy4KKworCSogbTY4ay5oIChUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUpOiBEZWxldGUgY29tbWEgaW4gZ2xvYmFsaXplIGNtZC4KKworCSogbTY4ay5tZCAobW92aGkpOiBEb24ndCB1c2Ugc3dpdGNoX3RhYmxlX2RpZmZlcmVuY2VfbGFiZWxfZmxhZworCWV4Y2VwdCBpbiBwb3J0cyB0aGF0IG5lZWQgaXQuICAoQWdhaW4hKQorCitTdW4gQXByIDE5IDE0OjA2OjU5IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8yKTogQWRkIG1pc3NpbmcgY29tbWVudCBjbG9zZS4KKworCSogcnRsLmMgKGFkZF9kZXBlbmRlbmNlKTogTWFrZSBuZXh0IHBvaW50IHRvIGxhc3QgaW5zbiB3aXRoCisJU0NIRURfR1JPVVBfUCBzZXQsIG5vdCBhZnRlciB0aGUgbGFzdCBpbnNuIHdpdGggdGhlIGJpdCBzZXQuCisKK1N1biBBcHIgMTkgMDY6MDY6MDMgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2VuZXh0cmFjdC5jICh3YWxrX3J0eCk6IEZpeCB0eXBvIGluIHZlY3RvciBjYXNlLgorCisJKiBocHBhLmggKFJUWF9DT1NUUyk6IEFkZCBuZXcgYXJndW1lbnQgT1VURVJfQ09ERS4KKworCSogTWFrZWZpbGUuaW4gKGNvbXBhcmUsIGNvbXBhcmUzKTogQ2hhbmdlICRmaWxlIHRvICQkZmlsZS4KKworCSogcm9tcC5oIChDT05TVF9DT05TVFMpOiBDbGVhbiB1cCBmb3JtYXR0aW5nIG9mIGRlZmluaXRpb24uCisKKwkqIHJzNjAwMC5tZCAoZXh0enYpOiBDb3JyZWN0IHdoZW4gd2UgY2FuIHVzZSBhbmRpW2x1XS4KKworU2F0IEFwciAxOCAyMTo1NjoyMCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLm1kIChhc2hsZGkzKTogQ29tcGFjdCBvcGVyYW5kIG51bWJlcnMuCisKKwlGcm9tIEplZmZyZXkgTGF3OgorCSogc3BhcmMubWQgKGxkZCwgc3RkIHBlZXBob2xlcyk6IE5ldyBwZWVwaG9sZXMgdG8gcmVjb2duaXplIGNhc2VzCisJd2hlcmUgdHdvIGxkIChvciBzdCkgaW5zbnMgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgbGRkIG9yIHN0ZC4KKwkqIHNwYXJjLmMgKHJlZ2lzdGVyc19va19mb3JfbGRkKTogTmV3IGZ1bmN0aW9uLiAgUmV0dXJuIHRydWUgaWYgdGhlCisJZ2l2ZW4gcmVnaXN0ZXIgcGFpciBpcyBzdWl0YWJsZSBmb3IgYW4gbGRkIG9yIHN0ZCBpbnN0cnVjdGlvbi4KKwkobWVtb3J5X29rX2Zvcl9sZGQpOiBMaWtld2lzZSwgYnV0IGZvciBtZW1vcnkgbG9jYXRpb25zLgorCitTYXQgQXByIDE4IDE3OjIyOjMyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sZXguYyAoc2tpcF93aGl0ZV9zcGFjZSk6IFdhcm4gb25seSBmb3IgZmlyc3QgY2FycmlhZ2UgcmV0dXJuLgorCitTYXQgQXByIDE4IDEwOjA4OjQ1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmVtaXQuYyAoc3RydWN0IGNsb2JiZXJfZW50KTogTmV3IHN0cnVjdHVyZS4KKwkoZ2VuX2luc24pOiBTZWUgaWYgdGhlIGNsb2JiZXJzIHJlcXVpcmVkIHRvIGJlIGFkZGVkIHdlcmUgc2VlbgorCWZvciBhbm90aGVyIGluc24uCisJKG91dHB1dF9hZGRfY2xvYmJlcnMpOiBXcml0ZSBjYXNlIHN0YXRlbWVudHMgZm9yIGFsbCBpbnNuIGNvZGVzCisJdXNpbmcgYSBwYXJ0aWN1bGFyIGNsb2JiZXIgcGF0dGVybi4KKwkKKwkqIGNzZS5jIChtZW50aW9uX3JlZ3MpOiBBbHdheXMgcmV0dW4gYSB2YWx1ZS4KKworCSogcnM2MDAwLm1kIChjYWxsKTogQ29tcGFjdCBvcGVyYW5kIG51bWJlcnMuCisKKwkqIGdlbmV4dHJhY3QuYzogTm93IGluY2x1ZGVzIGluc24tY29uZmlnLmguCisJKHN0cnVjdCBleHRyYWN0aW9uLCBzdHJ1Y3QgY29kZV9wdHIpOiBOZXcgc3RydWN0dXJlcy4KKwkoZ2VuX2luc24pOiBSZWNvcmQgd2hhdCBleHRyYWN0aW9ucyBhcmUgbmVlZGVkIGFuZCBjb21wYXJlIHdpdGgKKwl0aG9zZSBmb3IgcHJldmlvdXMgaW5zbnMuCisJKG1hcmtfb3BlcmFuZF9zZWVuKTogRnVuY3Rpb24gZGVsZXRlZC4KKwkod2Fsa19ydHgpOiBVc2Ugc3RyaW5ncyBhcyBwYXRoIGFuZCBqdXN0IHJlY29yZDsgZG9uJ3Qgd3JpdGUuCisJKHByaW50X3BhdGgpOiBVc2Ugc3RyaW5ncyBmb3IgcGF0aHMuCisJKGNvcHlzdHIpOiBOZXcgZnVuY3Rpb24uCisJKG1haW4pOiBXcml0ZSBvdXQgYWxsIGV4dHJhY3Rpb25zIGhlcmUuCisJKiBNYWtlZmlsZS5pbiAoZ2VuZXh0cmFjdC5vKTogSW5jbHVkZXMgaW5zbi1jb25maWcuaC4KKworCSogaHBwYSouaDogQ2hhbmdlIHJlZmVyZW5jZXMgZnJvbSBocDgwMCogZmlsZXMgdG8gaHBwYSouCisKKwkqIHJzNjAwMC5tZCAobHNocmRpMywgYXNocmRpMyk6IEZpeCB0eXBvcy4KKworCSogcnM2MDAwLm1kIChleHR6dik6IENvcnJlY3RseSBpbnN0YWxsIGxhc3QgY2hhbmdlLgorCitTYXQgQXByIDE4IDEyOjM3OjU0IDE5OTIgIEpvaG4gRiBDYXJyICAoamZjIGF0IEFjaGF0ZXMubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IFN0b3JpbmcgaW50byBhIGJpdGZpZWxkIGluIG1lbW9yeQorCXdoaWNoIGlzIHRoZSBzaXplIG9mIGEgc3RhbmRhcmQgbWFjaGluZSBtb2RlIGNhbiBiZSBkb25lIHdpdGggYQorCXNpbXBsZSBtb3ZlIGluc3RydWN0aW9uLgorCisJKiBjLWxleC5jIChza2lwX3doaXRlX3NwYWNlKTogY2FycmlhZ2UgcmV0dXJuICheTSkgaXMgd2hpdGVzcGFjZSwKKwlidXQgd2FybiBhYm91dCBeTSBpZiBwZWRhbnRpYy4KKworCSogY3NlLmMgKHJ0eF9jb3N0KTogTmV3IGFyZ3VtZW50IE9VVEVSX0NPREUsIHRoZSBydHggY29kZSBvZiB0aGUKKwlleHByZXNzaW9uIGluIHdoaWNoIHRoZSBydHggYXJndW1lbnQgaXMgY29udGFpbmVkLgorCSogZXhwbWVkLmMgKGluaXRfZXhwbWVkKTogUGFzcyBzZWNvbmQgYXJndW1lbnQgdG8gcnR4X2Nvc3QuCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdHdvdmFsX2Jpbm9wLCBlbWl0X2NtcF9pbnNuKTogTGlrZXdpc2UuCisJKiBsb29wLmMgKGluaXRfbG9vcCwgZ2VuZXJhbF9pbmR1Y3Rpb25fdmFyKTogTGlrZXdpc2UuCisJKiB2YXguYyAodmF4X3J0eF9jb3N0LCB2YXhfYWRkcmVzc19jb3N0KTogTmV3IGZ1bmN0aW9ucy4KKwkqIHZheC5oIChDT05TVF9DT1NUUywgUlRYX0NPU1RTLCBBRERSRVNTX0NPU1QpOiBDYWxsIHRoZXNlCisJZnVuY3Rpb25zLgorCSogcm9tcC5oIChDT05TVF9DT1NUUyk6IEdpdmUgY29uc3RhbnRzIGRpZmZlcmVudCBjb3N0cyBkZXBlbmRpbmcKKwlvbiB3aGV0aGVyIHRoZXkgY2FuIGZpdCBpbnRvIGEgMiBieXRlIGluc3RydWN0aW9uLCBhIDQgYnl0ZQorCWluc3RydWN0aW9uLCBvciB3b3VsZCByZXF1aXJlIGluc24gc3BsaXR0aW5nIHRvIHVzZS4KKwkqIGkzODYuaCAoQ09OU1RfQ09TVFMsIFJUWF9DT1NUUyk6IE1vdmUgUExVUyBjYXNlIHRvIFJUWF9DT1NUUy4KKwkqIG02OGsuaCAoQ09OU1RfQ09TVFMpOiBDb25zdGFudCBpbiByYW5nZSAtMjU0Li4tMTM2IGlzIG9ubHkgY2hlYXAKKwlpbiBhIG1vdmUgaW5zbiwgbm90IGFzIGFuIG9wZXJhbmQgdG8gc29tZSBvdGhlciBpbnN0cnVjdGlvbi4KKwkqIGNvbmZpZy8qLmg6IFVwZGF0ZSBtYWNoaW5lIGRlc2NyaXB0aW9ucyB0byBkZWZpbmUgQ09OU1RfQ09TVFMKKwlhbmQgUlRYX0NPU1RTIG1hY3JvcyB3aXRoIDMgYXJndW1lbnRzLgorCitGcmkgQXByIDE3IDExOjE0OjAyIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChzYWZlX2Zyb21fZWFybHljbG9iYmVyKTogTmV3IGZ1bmN0aW9uLgorCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogVmVyaWZ5IHRoYXQgZWFybHljbG9iYmVyCisJb3BlcmFuZHMgZG9uJ3QgY29uZmxpY3Qgd2l0aCBpbnB1dHMuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgU1VCUkVHKTogRG9uJ3QgZm9sZCBwYXJhZG94aWNhbCBTVUJSRUdzCisJb2YgY29uc3RhbnRzLgorCisJKiBjc2UuYyAoZm9sZF9ydHgsIGNhc2UgU1VCUkVHKTogRXh0ZW5kIHByZXZpb3VzIGNoYW5nZSBzbyBpdAorCWZvbGRzIHdpZGVuZWQgb3BlcmF0aW9ucyB3aXRoIG9uZSBvcGVyYW5kIGEgY29uc3RhbnQuCisKKwkqIGV4cHIuYyAoc2FmZV9mcm9tX3AsIGNhc2UgQklORF9FWFBSKTogT25seSBsb29rIGF0IG9wZXJhbmQgMS4KKworCSogY3NlLmMgKGZvbGRfcnR4LCBjYXNlIFNVQlJFRyk6IERvbid0IGZvbGQgcGFyYWRveGljYWwgU1VCUkVHcy4KKwlJbnN0ZWFkLCB3aGVuIHdlIGhhdmUgYSBuYXJyb3dpbmcgU1VCUkVHLCBzZWUgaWYgaXQgaXMgbmFycm93aW5nCisJdGhlIHJlc3VsdCBvZiBhIHdpZGVuZWQgYXJpdGhtZXRpYyBvcGVyYXRpb24uCisKK0ZyaSBBcHIgMTcgMDk6MTY6NTYgMTk5MiAgQ2hhcmxlcyBIYW5udW0gIChteWNyb2Z0QGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGlyKTogRG9uJ3QgdXNlICctJyBwcmVmaXggb24gY29udGludWF0aW9uIGxpbmUuCisKK0ZyaSBBcHIgMTcgMDY6NTI6MDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6CisJSWYgLVdyZXR1cm4tdHlwZSwgZG9uJ3Qgc3RvcCBiZWZvcmUganVtcC5jLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IERlbGV0ZSB1bnVzZWQgYXJnIE1PRElGSUVSLgorCSogZXhwci5jOiBBcmcgZGVsZXRlZCBmcm9tIGNhbGxzICh0aG9zZSB3aGljaCBoYWQgaXQpLgorCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBIYW5kbGUgVVRFS19BU00uCisJKHByaW50X29wZXJhbmQpOiBIYW5kbGUgTk9fSU1NRURJQVRFX1BSRUZJWF9JRl9TWU1CT0xJQy4KKwlBYm9ydCBpZiBtdXN0IGdldCBmcCBudW1iZXIgYXMgYml0cyBidXQgY2Fubm90IGRvIHNvLgorCSogbnMzMmsuaCAoVFJBTVBPTElORV9URU1QTEFURSk6IFVzZSBQVVRfQUJTT0xVVEVfUFJFRklYLgorCSogbnMzMmsubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBIYW5kbGUgRU5DT1JFX0FTTS4KKwkqIGVuY29yZS5oIChQUklOVF9PUEVSQU5EKTogSnVzdCBjYWxsIHByaW50X29wZXJhbmQuCisJKENBTExfTUVNUkVGX0lNUExJQ0lUKTogRGVmaW5lZC4KKworCSogY29uZmlnLnN1YjogZW5jb3JlIGltcGxpZXMgYnNkLCBub3Qgc3lzdi4KKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogSGFuZGxlIHJlZmVyZW5jZSBvZiB2b2xhdGlsZSBCTEttb2RlLgorCisJKiB2YXgubWQgKGluZGlyZWN0X2p1bXApOiBEZWxldGUgdGhlIGV4dHJhIGNvbmRpdGlvbi4KKworCSogY29uZmlndXJlICguLi4taHB1eCk6IFNldCBpbnN0YWxsX3dpdGhfY3AuCisKKwkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBBZnRlciBhIGxhYmVsLCBnbyBwYXN0IG90aGVyIGRlbGV0ZWQgbGFiZWxzLgorCisJKiBtNjhrLm1kIChtb3ZoaSk6IERvbid0IHVzZSBzd2l0Y2hfdGFibGVfZGlmZmVyZW5jZV9sYWJlbF9mbGFnCisJZXhjZXB0IGluIHBvcnRzIHRoYXQgbmVlZCBpdC4KKworCSogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IERvbid0IHdhcm4gZm9yIGNvbnN0YW50IGFmdGVyIGNvbW1hLgorCURvbid0IHdhcm4gZm9yIHZvbGF0aWxlIGRlY2wgb3IgcmVmLgorCisJKiBjLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6ICsrIG9uIHZvaWQgKiB3YXJucyBpZiAtV3BvaW50ZXItYXJpdGguCisKK1RodSBBcHIgMTYgMjI6NTY6MjAgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoZW51bSBibG9ja19tb3ZlX3R5cGUpOiBOZXcgZW51bWVyYXRpb24gZm9yIGNsYXNzaW5nIHdoYXQKKwl0eXBlIG9mIGJsb2NrIG1vdmUgaXMgdXNlZCB3aGVuIHNwbGl0dGluZyB0aGUgbGFzdCBzdG9yZSBvZmYuCisJKFJUWF9DT1NUUyk6IERvbid0IHVzZSAtbWRlYnVnZCB0byBzZXQgbXVsdGlwbHkgY29zdHMgdG8gMi4KKworCSogbWlwcy5jIChvdXRwdXRfbW92c3Ryc2kpOiBUYWtlIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gZGV0ZXJtaW5lCisJd2hldGhlciB0aGlzIGJsb2NrIG1vdmUgaXMgYSBub3JtYWwgYmxvY2sgbW92ZSwgb3Igb25lIHRoYXQgaGFzIGJlZW4KKwlzcGxpdC4gIEZvciB0aGUgc3BsaXQgYmxvY2sgbW92ZXMsIHRoZXJlIGFyZSB0d28gcGFydHMgLS0gdGhlIGZpcnN0CisJcGFydCBpcyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBzdG9yZSwgYW5kIHRoZSBzZWNvbmQgcGFydCBpcyB0aGUKKwlsYXN0IHN0b3JlLCBzdWl0YWJsZSB0byBmaWxsIGEgZGVsYXkgc2xvdC4KKworCSogbWlwcy5tZCAoYWxsIGRlZmluZV9zcGxpdHMpOiBEb24ndCBkbyBhbnkgZGVmaW5lX3NwbGl0IGlmCisJLW1kZWJ1Z2QuCisJKG1vdnN0cnNpX2ludGVybmFsKik6IEFkZCBzdXBwb3J0IHRvIHNwbGl0IGJsb2NrIG1vdmVzIGludG8gdHdvCisJcGllY2VzLCBvbmUgdGhhdCBpcyBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgc3RvcmUsIGFuZCB0aGUKKwlzZWNvbmQgcGllY2UsIHdoaWNoIGlzIHRoZSBsYXN0IHN0b3JlIHRoYXQgY2FuIGZpbGwgYSBkZWxheSBzbG90LgorCitUaHUgQXByIDE2IDIxOjUyOjU5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHgtcnM2ay1tYWNoOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAocnM2MDAwLSotbWFjaCk6IFVzZSBpdC4KKworVGh1IEFwciAxNiAyMTo1MjoxNyAxOTkyICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBY2hhdGVzLm1pdC5lZHUpCisKKwkqIGNzZS5jIChjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogRml4IHRlc3QgZm9yIGluZmluaXRlIGxvb3AuCisKK1RodSBBcHIgMTYgMjE6NTA6MzggMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiByczYwMDAuaCAoYnNzX3NlY3Rpb24pOiBEZWxldGUuICBObyBsb25nZXIgbmVlZGVkLgorCisJKiBhMjlrLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0YnKTogQWx3YXlzIGVtaXQgaW5zbiB0byBmaWxsIGVtcHR5CisJZGVsYXkgc2xvdC4KKworVGh1IEFwciAxNiAxODo0NTo0MSAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3Rlcm5hcnlfb3BlcmF0aW9uKTogQ29ycmVjdGx5IHNpZ24tZXh0ZW5kIHJlc3VsdC4KKworVGh1IEFwciAxNiAxODo0Mzo1NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0aW9ucy5jOiBSZW5hbWUgT0JKQ19OT05VTklRVUVfU0VMRUNUT1JTIHRvCisJT0JKQ19TRUxFQ1RPUlNfV0lUSE9VVF9MQUJFTFMuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBBbGxvdyBleHRlcm4gdnMgZXh0ZXJuIGlubGluZS4KKworCSogYy1wYXJzZS55IChwYXJtbGlzdF9vcl9pZGVudGlmaWVyc18xKTogVXNlIHBhcm1saXN0XzEuCisJKiBjLWRlY2wuYyAoZ2V0X3Bhcm1faW5mbyk6IFRyZWF0IGZvcndhcmQgcGFybSBkZWNscyBsaWtlIG5vbnBhcm0KKwlkZWNscy4KKworCSogbTY4ay5tZCAobW92aGkgYmVmb3JlIGRpc3BhdGNoIHRhYmxlKToKKwlTZXQgc3dpdGNoX3RhYmxlX2RpZmZlcmVuY2VfbGFiZWxfZmxhZy4KKwkqIDNiMS5oLCBhbWl4LmgsIG02OGtzZ3MuaCAoQVNNX09VVFBVVF9DQVNFX0VORCk6IFRlc3QgdGhhdCBmbGFnLgorCURlY2xhcmUgdGhlIGZsYWcuCisKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLCBwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBBZGQKKwlIUFVYX0FTTSBjb25kcy4KKworCSogbWlwcy5jIChvdXRwdXRfYmxvY2tfbW92ZSk6IElmIHdlIGdldCBhIGNhc2Ugd2UgY2FuJ3QgaGFuZGxlLAorCWRvbid0IHByaW50IGFueXRoaW5nLS1qdXN0IGFib3J0LCBiZWNhdXNlIHRoYXQgaW1wbGllcyBhIGJ1Zy4KKworCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IC1hbnNpIHNldHMgZmxhZ19ub19ub25hbnNpX2J1aWx0aW4sCisJbm90IGZsYWdfbm9fYnVpbHRpbi4KKwkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDaGVjayBmbGFnX25vX25vbmFuc2lfYnVpbHRpbiBmb3IgYWxsb2NhLCBldGMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogTWFrZSBwb2ludGVyLCBub3QgcmVmZXJlbmNlLAorCXdoZW4gdmFyaWFibGUncyBhZGRyZXNzIGlzIGluIGEgcmVnaXN0ZXIuCisKKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiBJZ25vcmUgLVdpbXBvcnQsIC1Xbm8taW1wb3J0LgorCitUaHUgQXByIDE2IDE2OjE3OjEzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbWVyZ2UgaW4gQ3lnbnVzIGNoYW5nZXMuLi4KKworCVRodSBBcHIgMTYgMTI6MjM6MDYgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IHByb3BhZ2F0ZSBjb25zdCBhcm91bmQgdG8gYXZvaWQgYW4KKwlpbmNvcnJlY3QgZXJyb3IgbWVzc2FnZS4gIFRoaXMgdHlwZSBvZiBmaXggbWF5IG5vdyBiZSBuZWNlc3NhcnkgaW4KKwlvdGhlciBwYXJ0cyBvZiB0aGUgY29tcGlsZXIuICBUaGlzIHNvbHZlcyBhbGwgYnV0IG9uZSBrbm93biBjb25zdAorCXByb2JsZW1zLgorCisJV2VkIEFwciAxNSAxNDoxODoyNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChyZWFkb25seV93YXJuaW5nX29yX2Vycm9yKTogIGJlY2F1c2UgdGhlIGNvbXBpbGVyCisJaXMgbm93IHdhcm5pbmcgYWJvdXQgY29uc3QgYWxvdCBtb3JlLCBmb3IgYSByZWxlYXNlIG9yIHR3bywKKwlsZXRzIGp1c3Qgd2FybiBhYm91dCBjb25zdCBwcm9ibGVtcywganVzdCBpbiBjYXNlIGl0IGlzIGEgY29tcGlsZXIKKwlwcm9ibGVtIGFuZCBub3QgYSB1c2VyIHByb2JsZW0uCisJCisJKiBjcC1jdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogTGV0cyBnZXQgdG91Z2hlciBvbiBjb25zdCBwcm9ibGVtcworCW9uIENPTVBPTkVOVF9SRUZzLgorCisJV2VkIEFwciAxNSAxMTo1OTo0MiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQ2hlY2sgZm9yIGFueSBkZWJ1ZyBpbmZvIGVuYWJsZWQsCisJbm90IGp1c3QgREJYX0RFQlVHLgorCisJV2VkIEFwciAxNSAxMDowMzozNiAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogUHJvcGFnYXRlIGNvbnN0IGFuZCB2b2xhdGlsZQorCWRvd24gaW50byB0aGUgdHlwZSBzbyBlcnJvciBjaGVja2luZyB3b3JrcyBiZXR0ZXIuCisKKwlUdWUgQXByIDE0IDExOjQ0OjMyIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCk6ICBTaG91bGRuJ3QgdXNlIGZsYWdfdGhpc19pc192YXJpYWJsZQorCXRvIG1ha2Ugd2hhdCB0aGlzIHBvaW50cyB0byBjb25zdCwgYnV0IEkgZG9uJ3QgaGF2ZSB0aGUgaGVhcnQKKwl0byBkbyBpdCByaWdodCBub3cuCisJCisJKiBjcC1kZWNsMi5jIChncm9rY2xhc3Nmbik6ICBEb24ndCB1c2UgZmxhZ190aGlzX2lzX3ZhcmlhYmxlCisJdG8gbWFrZSB3aGF0IHRoaXMgcG9pbnRzIHRvIGNvbnN0LgorCisJKiBjcC10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiAgTGV0IGJ1aWxkX3VwX3JlZmVyZW5jZSBoYW5kbGUKKwljb25zdCBlcnJvcnMgY29ycmVjdGx5LiAgUmVtb3ZlcyBBcHJpbCAxMCBjaGFuZ2UuCisJCisJKiBjcC1jdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogIERvbid0IGxldCBwZW9wbGUgc3VidmVydCBjb25zdAorCXdoZW4gcGFzc2luZyBjb25zdCBhcmdlbWVudHMgdG8gbm9uLWNvbnN0IGZ1bmN0aW9ucy4KKworCSogY3AtdHJlZS5jIChidWlsZF9jcGx1c19tZXRob2RfdHlwZSk6IERvbid0IHVzZQorCWZsYWdfdGhpc19pc192YXJpYWJsZSB0byBtYWtlIHdoYXQgdGhpcyBwb2ludHMgdG8gY29uc3QuCisKKwlGcm9tIFdlZCBBcHIgIDEgMTI6MDA6NTkgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcCBhdCB0Y3QuY29tKQorCisgICAgICAgICogY3AtY2xhc3MuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBOZXcgZnVuY3Rpb24gdG8gc2V0CisgICAgICAgICAgVFJFRV9QVUJMSUMgYW5kL29yIFRSRUVfRVhURVJOQUwgb24gdnRhYmxlcy4KKyAgICAgICAgICAoYnVpbGRfdnRhYmxlKTogVXNlIGl0LgorICAgICAgICAgIChwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IFVzZSBpdC4KKworICAgICAgICAqIGNwLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEb24ndCBhc3N1bWUgdGhhdCBUUkVFX1BVQkxJQyBtZWFucworICAgICAgICAgICJleHBvcnRlZCI7IGl0IGNhbiBtZWFuICJpbXBvcnRlZCIuICBEZWNpZGUgd2l0aCBUUkVFX0VYVEVSTkFMLgorICAgICAgICAgIChmaW5pc2hfZnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBjcC1kZWNsMi5jICh3cml0ZV92dGFibGVfZW50cmllcyk6IERpdHRvLgorICAgICAgICAgIChmaW5pc2hfdnRhYmxlX3R5cGVkZWNsKTogRGl0dG8uCisgICAgICAgICAgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IERpdHRvLgorICAgICAgICAgIChmaW5pc2hfZmlsZSk6IERpdHRvLgorCisgICAgICAgICogY3AtbGV4LmMgKHNldF92YXJkZWNsX2ludGVyZmFjZV9pbmZvKTogUHVibGljIG9iamVjdHMgYWx3YXlzCisgICAgICAgICAgaGF2ZSBUUkVFX1BVQkxJQywgd2hldGhlciBleHBvcnRlZCBvciBpbXBvcnRlZC4KKyAgICAgICAgKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9tZW1iZXJfdGVtcGxhdGVzKTogRGl0dG8uCisKKworCUZyaSBBcHIgMTAgMjE6NDQ6MTUgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uYW1lKTogTWFuZ2xlICdzaWduZWQgY2hhcicKKwlhcyAnU2MnIChpLmUuIGRpZmZlcmVudGx5IGZyb20gJ2NoYXInISkuCisKKwlGcmkgQXByIDEwIDE3OjM4OjA0IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogZG9uJ3QgYWxsb3cgcGVvcGxlIHRvIHdpcGUgY29uc3QuCisKKwlUaHUgQXByICA5IDE4OjI4OjM2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuaDogIEFkZCBlbnRyeSBmb3IgJHZiIGFuZCAkdmYgc28gdGhhdCBOT19ET0xMQVJfSU5fTEFCRUwKKwl3b3Jrcy4KKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiAgVXNlIHRoZSBuZXcgbWFjcm9zIGZyb20gY3AtdHJlZS5oLgorCSogY3AtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogIFVzZSB0aGUgbmV3IG1hY3JvcyBmcm9tIGNwLXRyZWUuaC4KKworCVRodSBBcHIgIDkgMDI6MTE6MDEgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IE1lcmdlIGluIGEgY2hhbmdlIG1hZGUgdG8KKwl0aGUgQyBmcm9udCBlbmQgaW50byB0aGUgQysrIGZyb250IGVuZCB0byBoYW5kbGUgdm9sYXRpbGUgZnVuY3Rpb25zLgorCisJVGh1IEFwciAgOSAwMzo0NTowMyAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogc2FuaXR5IGNoZWNrIGJlZm9yZSBjYWxsaW5nIHBvcGNsYXNzLgorCUlmIHdlJ3JlIGFscmVhZHkgaG9zZWQgZHVlIHRvIHByZXZpb3VzIHBhcnNlIGVycm9ycyAoc3BlY2lmaWNhbGx5LAorCXdlJ3JlIG5vdCBpbnNpZGUgYSBjbGFzcyBhbnltb3JlKSBqdXN0IHJlcG9ydCBhbiBlcnJvciByYXRoZXIgdGhhbgorCWNyYXNoaW5nIGluIHBvcGNsYXNzIChpZiB0aGVyZSB3YXNuJ3QgYSBwcmV2aW91cyBwYXJzZSBlcnJvciwgYXMgdGhlCisJbWVzc2FnZSBzdWdnZXN0cywgd2Ugc2hvdWxkIGdldCByZXBvcnRzOyB0aGlzIGNsb3NlcyBnY2MvcDAwMDA1MjUuKQorCisJV2VkIEFwciAgOCAwODo1Njo0OSAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRml4IGFuIGVpY2hpbiBidWcgaW50cm9kdWNlZCBzZWNvbmRzCisJYWdvLiAgU2hhbWUsIGhlIGRpZG4ndCBwdXQ6CisKKwlXb3JrYXJvdW5kIGZvciBwODY5OgorICAgICAgICAxKSBncm9rZGVjbGFyYXRvciAoYXJvdW5kIGNwLWRlY2wuYzo3NDYyKSBpcyB1c2luZyBwb3BjbGFzcygxKQorICAgICAgICB1c2VzIHBvcGNsYXNzKDEpIHRvIGNsb3NlIHRoZSBwdXNoY2xhc3MoMykgZG9uZSBieQorICAgICAgICBidWlsZF9wdXNoX3Njb3BlOyBob3dldmVyLCBpdCdzIGNvbWluZyBhcm91bmQgYW5vdGhlciB0aW1lIGFuZAorICAgICAgICBwb3BwaW5nIGFsbCB0aGUgd2F5IG91dCwgd2hpY2ggbGVhZHMgdG8gdGhlIGNvcmUgZHVtcCB3aGVuCisgICAgICAgIGRvX2ZyaWVuZCBpcyBjYWxsZWQgZnJvbSBnbG9iYWwgc2NvcGUgKGRvX2ZyaWVuZCB1c2VzCisgICAgICAgIGN1cnJlbnRfY2xhc3NfbmFtZSB0byBmaWd1cmUgb3V0IHdob3NlIGZyaWVuZHNoaXAgaXQgaXMKKyAgICAgICAgYmVzdG93aW5nLikgQ3VycmVudCB3b3JrYXJvdW5kOiBpZiAoZnJpZW5kcCkgZG9uJ3QgYWxsb3cKKyAgICAgICAgcG9wcGluZyBhbGwgdGhlIHdheSBvdXQuIFdlIHN0aWxsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8KKyAgICAgICAgbWFrZSBzdXJlIGl0IG9ubHkgZ2V0cyBjYWxsZWQgdGhlICpyaWdodCogdGltZTsgd2UgYWxzbyBuZWVkCisgICAgICAgIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGNvcnJlY3Qgc2NvcGUgaXMgYmVpbmcgdXNlZCwgYnV0IHRoYXQncyBhCisgICAgICAgIG1hdHRlciBvZiByZWdyZXNzaW9uIHRlc3RpbmcuCisKKwlpbnRvIGEgQ2hhbmdlTG9nIGVudHJ5LgorCisJV2VkIEFwciAgOCAwMToxMDo0NCAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmM6IENsZWFudXAgYmluZGluZ19sZXZlbHNfc2FuZSByZWxhdGVkIGNvZGUuICBEZWxldGVkCisJYXJndW1lbnQsIGFuZCBjaGFuZ2VkIHRvIHZvaWQgdHlwZS4gIFJlbW92ZWQgZXh0cmFuZW91cyBhc3NlcnRzLgorCisJKiBjcC1wYXJzZS55OiBBZGQgZm91cnRoIHBhcmFtZXRlciB0byBhbGwgZmluaXNoX2RlY2wgY2FsbHMuCisJRGVmYXVsdGVkIHRoZSBndWVzcyB0byAwLgorCSogY3AtZGVjbC5jOiBjb25zaXN0ZW50bHkgdXNlICNpZiBvbiBhbGwgUEFSQU5PSURzLgorCitXZWQgQXByIDE1IDE0OjAwOjE0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChtb3ZzdHJzaV9pbnRlcm5hbCk6IEFkZCAnJicgY29uc3RyYWludCBvbiBjbG9iYmVycy4KKworCSogbWlwcy5jIChvdXRwdXRfbW92c3Ryc2kpOiBJZiBvbmUgb2Ygb3VyIHRlbXBvcmFyeSByZWdpc3RlcnMgaXMKKwl1c2VkIGFzIGFuIGFkZHJlc3MgcmVnaXN0ZXIsIGRvbid0IHVzZSBpdCBhbmQgZW1pdCBhIHdhcm5pbmcuICBUaGlzCisJaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZS4KKworV2VkIEFwciAxNSAwOTowNDoyMiAxOTkyICBSaWNoYXJkIE0uIFN0YWxsbWFuICAocm1zIGF0IGx5c3NlbmtvKQorCisJKiB4bS1uczMyay5oIChtZW1jcHksIG1lbWNtcCwgbWVtc2V0KTogTmV3IG1hY3JvIGRlZmluaXRpb25zLgorCSogcnRsLmMgKGdjY19tZW1zZXQpOiBOZXcgZnVuY3Rpb24uCisKK1dlZCBBcHIgMTUgMDk6MDM6MjggMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKHVtdWxzaWRpMyk6IERlZmluZSBmb3IgbTg4MTEwLgorCSh1bml0IGF0dHJpYnV0ZSk6IERlZmluZS4KKworCSogeC1tODhrZGd1eCAoSU5TVEFMTF9IRUFERVJTKTogRGVmaW5lIGFzIGVtcHR5LgorCitUdWUgQXByIDE0IDEzOjI4OjExIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sZXguYyAoeXlsZXgpOiBXaGVuIHdhcm5fdHJhZGl0aW9uYWwsIGRvbid0IGFib3J0IGZvciBoYXJtbGVzcworCXR5cGUgZGlmZmVyZW5jZXMuICBJbnN0ZWFkIHdhcm4gb2YgcG9zc2libGUgcHJvYmxlbXMgb24gb3RoZXIgc3lzdGVtcy4KKworCSogcnRsLmMgKGFkZF9kZXBlbmRlbmNlKTogU2tpcCBub3RlcyB3aGVuIEhBVkVfY2MwLgorCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8yKTogTGlrZXdpc2UuCisKKwkqIHNwYXJjLm1kIChtb3ZkZi0xKTogRGVsZXRlIHNwZWNpYWwgY2FzZSBmb3IgbW92aW5nIDAuMCB0byBpbnRlZ2VyCisJcmVnaXN0ZXJzOyBpdCByZXN1bHRlZCBpbiBwb29yIGNvZGUuCisJKGZpeF90cnVuY2Rmc2kyKzEpOiBBZGQgcGF0dGVybnMgdG8gb3B0aW1pemUgZmxvYXQtPmZpeCBhbmQKKwlmbG9hdC0+Zml4LT5mbG9hdCBjb252ZXJzaW9ucy4KKwkqIHNwYXJjLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IENsZWFuIHVwIGxkZC9zdGQgY29kZS4gIERvbid0IGVtaXQKKwlsZGQvc3RkIGZvciBvYnZpb3VzbHkgdW5hbGlnbmVkIGFkZHJlc3MgZXZlbiB3aGVuIFRBUkdFVF9IT1BFX0FMSUdOLgorCShvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBDYWxsIG91dHB1dF9tb3ZlX2RvdWJsZSBmb3IgTUVNIGNhc2VzLgorCUl0IGlzIG5vdCBzYWZlIHRvIGFzc3VtZSBkb3VibGUgcmVnIGFkZHJlc3NlcyBhcmUgYWx3YXlzIGFsaWduZWQuCisKK1R1ZSBBcHIgMTQgMDc6NTU6NDcgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogKmhwODAwKiwgKmhwNzAwKjogUmVuYW1lIHRvICpocHBhKiBhbmQgKmhwcGExLjEqLCByZXNwZWN0aXZlbHkuCisJKiBjb25maWcuc3ViOiBSZWNvZ25pemUgUEEgbW9kZWwgbnVtYmVycyBmb3IgUEEgMS4wIGFuZCAxLjEuCisJRGlzYWJsZSAiaHBwYSIgd2l0aCBubyBtb2RlbCBudW1iZXIuCisJKiBjb25maWd1cmU6IFVwZGF0ZSBmb3IgbmV3IFBBIGZpbGUgbmFtZXMgYW5kIGJhc2ljX21hY2hpbmUgbmFtZXMuCisJKiBSRUFETUUtUEEtSFBVWDogTmV3IG5hbWUgZm9yIFJFQURNRS1QQS1SSVNDLCB3aXRoIHNvbWUgY29ycmVjdGlvbnMuCisKK1R1ZSBBcHIgMTQgMDU6NDY6MzcgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIE1ha2VmaWxlLmluICgiaWYiIGFuZCAiWyIpOiBSb21wLCA0LjMgQlNELCBhbmQgVWx0aXJ4IHN5c3RlbXMKKwlmYWlsIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBmYWxzZS4gIENoYW5nZSB0cm91Ymxlc29tZSBpbnN0YW5jZXMgdG8KKwllaXRoZXIgdXNlICJjYXNlIiBvciB1c2UgJy0nIGFzIGEgcHJlZml4IHRvIHRoZSBjb21waWxhdGlvbiBydWxlLgorCitNb24gQXByIDEzIDE4OjIwOjU2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogZHdhcmZvdXQuYzogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVNNX09VVFBVVF9BU0NJSQorCWFzIHRoYXQgaXMgd2hhdCB2YXJhc20uYyBkb2VzIG5vdy4gIFRoaXMgcmVhbGx5IG1heWJlIHNob3VsZCBnbworCWludG8gYSBmaWxlIGxpa2UgdHJlZS5oIG9yIHNvbWUgbWFjaGluZSBpbmRlcGVuZGFudCBmaWxlLCBmb3IKKwltYWludGFpbmFiaWxpdHkuCisKK01vbiBBcHIgMTMgMTg6MTY6MzIgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzdW4zLmgsIHNwYXJjLmggKExJTktfU1BFQyk6IENoYW5nZSBub3N0ZGxpYiB0byAhbm9zdGRsaWIuCisKK01vbiBBcHIgMTMgMDc6MTc6MzYgMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQWNoYXRlcy5taXQuZWR1KQorCisJKiByczYwMDAubWQgKGV4dHp2KTogR2VuZXJhdGUgYW5kaVt1bF0gd2hlbiBwcmFjdGljYWwuCisKK01vbiBBcHIgMTMgMDc6MTc6MzYgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHJ0eF9jb3N0LCBjYXNlIFNVQlJFRyk6IElmIG1vZGVzIGNhbid0IGJlIHRpZWQsIG1ha2UKKwlleHBlbnNpdmUuCisJKGNzZV9pbnNuKTogTWFrZSBleHRyYSBlbnRyaWVzIHdoZW4gREVTVCBpcyBhIG11bHRpLXdvcmQgU1VCUkVHCisJYXMgbG9uZyBhcyBpdCBpcyB0aGUgc2FtZSBudW1iZXIgb2Ygd29yZHMgYXMgaXRzIGlubmVyIFJFRy4KKworCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogSGFuZGxlIGNhc3RpbmcgaW50ZWdlciB0bworCWZsb2F0IGFuZCB2aWNlIHZlcnNhLgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBSZXdvcmsgY29kZSB0byB0cnVuY2F0ZSBhCisJY29uc3RhbnQgc28gd2UgZG9uJ3QgY29udmVydCBuZWdhdGl2ZSB2YWx1ZXMgaW50byBwb3NpdGl2ZSB2YWx1ZXM7CisJdXNlIHNhbWUgY29kZSBhcyBpbiBzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uIGluIGNzZS4KKworTW9uIEFwciAxMyAwNzoxNjo1NiAxOTkyICBSaWNoYXJkIE0uIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IFdoZW4gZmluZCBxdW90ZSBkdXJpbmcgY29weWluZywKKwlnaXZlIGJwIGFzIGxpbWl0IGFyZyBpbiBza2lwX3F1b3RlZF9zdHJpbmcuCisJV2hlbiBmaW5kIFwgd2hpbGUgY29weWluZywgY29weSBuZXh0IGNoYXIgd2l0aG91dCBzcGVjaWFsIGhhbmRsaW5nLgorCitNb24gQXByIDEzIDA2OjU3OjE4IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrdjMuaCAoQ1RPUl9MSVNUX0JFR0lOKTogQXZvaWQgY29tcGxleCAjaWYuCisKKwkqIHRyZWUuaCAoc2F2ZWRfaW5zbnMpOiBNYWtlIHRoaXMgYSB1bmlvbiBob2xkaW5nIGFuIHJ0eCBvciBhbiBpbnQuCisJKERFQ0xfRklFTERfU0laRSk6IE5ldyBtYWNybyBmb3Igb3ZlcmxvYWRlZCB1c2VzIG9mIERFQ0xfRlJBTUVfU0laRS4KKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogVXNlIERFQ0xfRklFTERfU0laRSBmb3IgYml0ZmllbGRzLgorCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IERpdHRvLgorCSogb2JqYy1hY3Rpb25zLmMgKG9iamNfY29weV9saXN0LCBlbmNvZGVfZmllbGRfZGVjbCk6IERpdHRvLgorCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X2RlY2wpOiBEaXR0by4KKworU3VuIEFwciAxMiAxNzo0NjozMCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgU1FSVCk6IERvbid0IGRlZmVyIHBvcHBpbmcgYXJncyBvbgorCWZ1bmN0aW9uIGNhbGxzLCBhcyB0aGUgY2FsbCBtaWdodCBiZSBkZWxldGVkLgorCisJKiBpMzg2LmMgKHByaW50X29wZXJhbmQpOiBEZWxldGUgcmVmZXJlbmNlcyB0byB1bnVzZWQgY29kZXMuCisJQWJvcnQgaWYgYW4gdW5yZWNvZ25pemVkIGNvZGUgaXMgc2Vlbi4KKworCSogaTM4Ni5tZCAoYml0IG9wY29kZSByZWNvZ25pemVycyk6IEFjY2VwdCBzdGFydGluZyBiaXQgbnVtYmVycworCXRoYXQgYXJlIGNvbnN0YW50cyBidXQgbm90IENPTlNUX0lOVC4KKwkoUUkvSEkgcmVnaXN0ZXIgYml0IHRlc3QpOiBEZWxldGUuCisJKFNJbW9kZSBiaXQgdGVzdCk6IERvbid0IGFjY2VwdCBDT05TVF9JTlQgc3RhcnRpbmcgYml0IG51bWJlci4KKworU3VuIEFwciAxMiAxNzowNToyNSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuaCAoQURESVRJT05BTF9SRUdJU1RFUl9OQU1FUyk6IEFkZCAiY2MiIGFzIGFsaWFzIGZvciBjcjAuCisKKwkqIGNzZS5jIChlcXVpdl9jb25zdGFudCk6IFNlZSBpZiBhIE1FTSBpcyBmb2xkYWJsZSBvciBoYXMgYSAKKwljb25zdGFudCBlcXVpdmFsZW50LgorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogSWYgYnVpbGRpbmcgYSBzdGF0aWMgY29uc3RydWN0b3IKKwlpbnRvIGEgcmVnaXN0ZXIsIHN0YXJ0IG91dCBieSB6ZXJvaW5nIHRoZSByZWdpc3RlciBzbyB3ZSBjYW4KKwljb25zdGFudC1mb2xkIHRoZSBjb25zdHJ1Y3RvciB0byBhIHNpbmdsZSBjb25zdGFudC4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQ09OU1RSVUNUT1IpOiBEb24ndCB3cml0ZSBjb25zdGFudCBvYmplY3RzCisJaW50byBtZW1vcnkgaWYgdGhlIHRhcmdldCBpcyBhIHJlZ2lzdGVyLgorCShleHBhbmRfZXhwciwgY2FzZSAqX1JFRik6IFNpbXBsaWZ5IGdldHRpbmcgZmllbGQgb3IgYXJyYXkKKwllbnRyeSBmcm9tIGEgQ09OU1RSVUNUT1IuCisJRG9uJ3QgdXNlIHZhbHVlIG9mIGNvbnN0IGFycmF5IHVubGVzcyAtTy4KKworU3VuIEFwciAxMiAxNDoxNTozMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChjb21wYXJlLCBjb21wYXJlMyk6IE5ldyB0YXJnZXRzLgorCShtb3N0bHljbGVhbik6IERlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgbWFkZSBieSB0aG9zZSB0YXJnZXRzLgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBJZ25vcmUgYGNjJyBhcyBjbG9iYmVyZWQgcmVnIGlmIG5hbWUKKwlub3Qga25vd24uCisJKiB2YXJhc20uYyAoZGVjb2RlX3JlZ19uYW1lKTogUmV0IC0zIGlmIGBjYycgbm90IHJlY29nbml6ZWQuCisJKG1ha2VfZGVjbF9ydGwpOiBVbmRlcnN0YW5kIC0zIGFzIHZhbHVlLgorCisJKiBjb25maWd1cmUgKGkzODYtc2VxdWVudC1ic2QqKTogVXNlIGNvbGxlY3QyLgorCitTdW4gQXByIDEyIDEzOjI4OjAwIDE5OTIgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXNAYXBwbGkuc2UpCisKKwkqIGNvbmZpZ3VyZTogQ29ycmVjdGx5IGludGVycHJldCB1c2VfY29sbGVjdDIuCisKK1N1biBBcHIgMTIgMTA6MzQ6NTggMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogVXNlIElOSVQgdG8gcGFzcyB0byBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50CisJZm9yIGEgcmF3IGNvbnN0cnVjdG9yLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgQ09ORF9FWFBSKTogR2V0IHRoZSB0eXBlIHJpZ2h0IHdoZW4KKwl0aGUgdGVzdCBpcyBmb2xkZWQgYXdheS4KKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBDb3JyZWN0IG9mZi1ieS1vbmUgZXJyb3IgaW4gSU5TTl9MVUlECisJc2FmZXR5IGNoZWNrLgorCisJKiBzdG9yLWxheW91dCAobGF5b3V0X3JlY29yZCwgbGF5b3V0X3VuaW9uKTogV2hlbiBsaW1pdGluZyB0aGUKKwllZmZlY3Qgb2YgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyB0byBiaXRmaWVsZHMsIHVzZQorCURFQ0xfQklUX0ZJRUxEX1RZUEUgdG8gZGV0ZXJtaW5lIGlmIGl0IHdhcyBhIGJpdGZpZWxkLgorCitTYXQgQXByIDExIDE5OjU0OjAwIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6ICBEb24ndCAic3RhbmRhcmRpemUiIGFuIG9zIG9mIG5ld3NvcyogdG8gYnNkCisJKGl0IGJyZWFrcyBnZGIvcmVhZGxpbmUvY29uZmlndXJlLmluLCB3aGljaCBjaGVja3MgZm9yIG5ld3NvcyopLgorCitTYXQgQXByIDExIDE2OjMyOjIxIDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluOiBSZW1vdmUgc3BhY2VzIGFmdGVyIHJlZy1zdGFjay5vIGRlcHMuCisKK1NhdCBBcHIgMTEgMTY6MzI6MTUgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1ha2UgLWZuby1idWlsdGluIHN1cHJlc3MgYWxsCisJYnVpbHRpbiBmdW5jdGlvbnMgaW4gdGhlIHVzZXIncyBuYW1lIHNwYWNlIGxpa2UgbWVtY3B5LCBzdHJsZW4sCisJZXRjLgorCitTYXQgQXByIDExIDE0OjAwOjUzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oIChMRUdJVElNSVpFX0FERFJFU1MpOiBBZGQgbWlzc2luZyBmb3JjZV9yZWcgY2FsbC4KKwlKdW1wIHRvIFdJTiB3aGVuIHdlIGRvIHNvbWV0aGluZy4KKworCSogcnM2MDAwLmMgKG5vbl97c2hvcnQsYWRkLGxvZ2ljYWwsYW5kfV9jaW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgorCSogcnM2MDAwLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCB0aGVzZSBwcmVkaWNhdGVzLgorCSogcnM2MDAwLm1kIChhZGRzaTMsIGFuZHNpMywgaW9yc2kzLCB4b3JzaTMsIGNtcHNpMyk6IFJlbW92ZQorCWRlZmluZV9leHBhbmRzOyBpbnN0ZWFkLCBhZGQgZGVmaW5lX3NwbGl0IGZvciBsb25nIGNvbnN0YW50cy4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFRyeSB0byBzcGxpdCB0aGUgcGF0dGVybiB1c2luZworCXNwbGl0X2luc25zIGJlZm9yZSB0cnlpbmcgZmluZF9zcGxpdF9wb2ludC4KKwkoZmluZF9zcGxpdF9wb2ludCwgY2FzZSBNRU0pOiBUcnkgdG8gc3BsaXQgYW4gaW52YWxpZCBhZGRyZXNzIHRoYXQKKwlpcyBhIFBMVVMgd2l0aCBhIENPTlNUX0lOVC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IENvcnJlY3RseSBjaGVjayBpZiBhbiBhdXRvLWluYworCXNpZGUtZWZmZWN0IGhhcyBiZWVuIGR1cGxpY2F0ZWQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgUEFSTV9ERUNMKTogUmV0dXJuIHplcm8gb2YgcHJvcGVyIG1vZGUKKwlpZiBubyBERUNMX1JUTC4KKwkKKwkqIHRyZWUuYyAoc2F2ZV9leHByKTogTXVzdCBkbyBzb21ldGhpbmcgd2l0aCByZWFkLW9ubHkgdHJlZSB0aGF0IAorCWhhcyBzaWRlLWVmZmVjdHMuCisJKHN0YWJpbGl6ZV9yZWZlcmVuY2VfMSk6IERvbid0IGlnbm9yZSByZWFkLW9ubHkgdHJlZXMuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlcGxhY2VtZW50KTogTmV3IGZ1bmN0aW9uLgorCSogcmVsb2FkLmggKGZpbmRfcmVwbGFjZW1lbnQpOiBEZWNsYXJlIGl0LgorCSogcmVsb2FkMS5jIChnZW5faW5wdXRfcmVsb2FkKTogVXNlIGl0IHRvIGVuc3VyZSBzdWJzdGl0dXRpb25zCisJZ2V0IGRvbmUgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSBhIFBMVVMuCisKK1NhdCBBcHIgMTEgMTQ6MDA6MDIgMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQWNoYXRlcy5taXQuZWR1KQorCisJKiBjc2UuYyAoY3NlX2VuZF9vZl9iYXNpY19ibG9jayk6IERvbid0IHN0b3Agc2Nhbm5pbmcgaW5zbnMgaWYgYQorCWp1bXAgaXMgZm91bmQgdGhhdCBjYW4ndCBiZSBmb2xsb3dlZC4KKworCSogZ2VuZXh0cmFjdC5jOiBNYWtlIGluc25fZXh0cmFjdCBjb3B5IHRoZSBhZGRyZXNzIG9mCisJcmVjb2dfb3BlcmFuZCBhbmQgcmVjb2dfb3BlcmFuZF9sb2MgaW50byByZWdpc3RlciB2YXJpYWJsZXMuCisKK1NhdCBBcHIgMTEgMTM6NTk6MTcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLnkgKHN0bXQpOiBQYXJzZSBlbnRpcmUgcGFyZW5zIG9mIGBmb3InCisJYmVmb3JlIGFjdHVhbGx5IHN0YXJ0aW5nIHRoZSBsb29wLgorCitTYXQgQXByIDExIDEwOjM1OjA2IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmMgKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogRG8gbm90IGNhbGwgWEVYUCBvbgorCXJlZ19lcXVpdl9hZGRyZXNzIHNpbmNlIHJlZ19lcXVpdl9hZGRyZXNzIGlzIGFscmVhZHkgYW4gYWRkcmVzcy4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBTUVJUKTogTm90ZSB0aGUgZGFuZ2VycyBpbnZvbHZlZCBpbgorCWNoYW5naW5nIHRoZSBhcmd1bWVudCB0ZXN0IGNvbmRpdGlvbi4KKworCSogbTY4ay5tZCAoc3FydGRmMik6IE5ldyBwYXR0ZXJuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSA2ODg4MQorCXNxcnQgZnVuY3Rpb24uCisKK0ZyaSBBcHIgMTAgMTg6Mzc6MDggMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogaHA4MDAuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogT3V0cHV0IGNvZGUgdG8gcmVzdG9yZSBncjIgaW4KKwlub24tZnJhbWUtcG9pbnRlciBjYXNlIGNvcnJlY3RseS4KKworRnJpIEFwciAxMCAxNToyNDo1NyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZGVjcm9zZS5oIChUQVJHRVRfTUVNX0ZVTkNUSU9OUyk6IERlZmluZSwgbWVtY3B5L21lbXNldCBhcmUKKwlwcm92aWRlZC4KKworCSogaTM4NnJvc2UuaCAoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmUsIG1lbWNweS9tZW1zZXQgYXJlCisJcHJvdmlkZWQuCisKKwkqIGVuY3Jvc2UuaCAoVEFSR0VUX01FTV9GVU5DVElPTik6IERlZmluZSwgbWVtY3B5L21lbXNldCBhcmUKKwlwcm92aWRlZC4KKworCSogbWlwcy10ZmlsZS5jIChjb3B5X29iamVjdCk6IE9taXQgdGhlIHRlc3QgZm9yIHplcm8gZmxhZ3MsIHNpbmNlCisJTUlQUyB2ZW5kb3JzIGFyZSBub3cgcHV0dGluZyBiaXRzIGluIHRoZXJlLgorCisJKiBtaXBzLXN2cjQuaCAoSEFWRV9BVEVYSVQpOiBEZWZpbmUsIGF0ZXhpdCBpcyBwcm92aWRlZC4KKwkoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmUsIG1lbWNweS9tZW1zZXQgYXJlIHByb3ZpZGVkLgorCisJKiBtaXBzLXN5c3YuaCAoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmUsIG1lbWNweS9tZW1zZXQgYXJlCisJcHJvdmlkZWQuCisKKwkqIG1pcHMtbmV3czUuaCAoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmUsIG1lbWNweS9tZW1zZXQgYXJlCisJcHJvdmlkZWQuCisJKGdldHBhZ2VzaXplKTogRGVmaW5lIGEgZ2V0cGFnZXNpemUgdGhhdCB1c2VzIHN5c2NvbmYsIGp1c3QgbGlrZSB0aGUKKwlNSVBTIFYuNCBwb3J0LgorCisJKiBtaXBzLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogRG9uJ3QgZW1pdCB1bHcvdXN3IGlmIEdBUyBpcyB0aGUKKwlhc3NlbWJsZXIsIHVzZSB0aGUgbHdsL2x3ci9zd2wvc3dyIGJ1aWxkaW5nIGJsb2NrcyBpbnN0ZWFkLCBzaW5jZQorCUdBUyBkb2Vzbid0IHlldCBzdXBwb3J0IHRoZSB1bHcvdXN3IG1hY3JvIGluc3RydWN0aW9ucy4KKworCSogY29uZmlndXJlIChtaXBzLXNnaS1pcml4NCk6IFVzZSBjb25maWcvaXJpczQuaCBpbnN0ZWFkIG9mCisJY29uZmlnL2lyaXMuaC4KKworCSogaXJpczQuaCAobmV3IGZpbGUpOiBKdXN0IGxpa2UgaXJpcy5oLCBhdGV4aXQgaXMgcHJvdmlkZWQgKHVubGlrZQorCUlSSVggcmV2aXNpb24gMykuCisKKwkqIGlyaXMuaCAoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmUsIG1lbWNweS9tZW1zZXQgYXJlIHByb3ZpZGVkLgorCitGcmkgQXByIDEwIDExOjU5OjAyIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5tZCAoY21wc3RyIHBhdHRlcm5zKTogQ29ycmVjdGx5IGhhbmRsZSB6ZXJvIGxlbmd0aAorCWNvbXBhcmVzLiAgUmV3cml0ZSB0byBhdm9pZCBuZWVkaW5nIHNjcmF0Y2ggcmVnaXN0ZXIuCisKK1RodSBBcHIgIDkgMTQ6MDU6MDQgMTk5MiAgTWljaGFlbCBDb2xsaXNvbiAgKGNvbGxpc29uIGF0IG9zZi5vcmcpCisKKwkqIGkzODZyb3NlLmggKEFTTV9PVVRQVVRfRkxPQVQsIEFTTV9PVVRQVVRfRE9VQkxFKTogRml4IHRoZXNlIHRvCisJYXZvaWQgcHJpbnRpbmcgTmFOcywgYW5kIGluZmluaXR5LgorCitUaHUgQXByICA5IDExOjM0OjMxIDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrbHVuYS5oIChERUZBVUxUX0dEQl9FWFRFTlNJT05TKTogRGVmaW5lIGFzIDAuCisKK1dlZCBBcHIgIDggMjA6MjE6NTkgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGhhbGZwaWMuYyAoYWxsIGZ1bmN0aW9ucyk6IEFkZCBhIGhhc2ggdGFibGUgZm9yIHRoZSBsb29rdXAgaW5zdGVhZAorCW9mIGxpbmVhciBzZWFyY2guICBEb24ndCB1c2UgYml0cyBpbiB0aGUgSURFTlRJRklFUiBub2RlLCBzdG9yZSB0aGUKKwlpbmZvcm1hdGlvbiBpbiB0aGUgaGFzaCB0YWJsZS4gIEFsd2F5cyByZWJ1aWxkIHRoZSBTWU1CT0xfUkVGCisJcmV0dXJuZWQgYnkgaGFsZl9waWNfcHRyLCBpbnN0ZWFkIG9mIHN0b3JpbmcgaXQgYXdheSwgc2luY2UgdGhlIFJUTAorCWdldHMgcmV1c2VkIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgorCShoYWxmX3BpY19kZWNsYXJlKTogTmV3IGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBhIGxhYmVsIGlzIGxhaWQgZG93bgorCXRvIHNheSB0aGF0IGl0IGlzIG5vIGxvbmdlciBoYWxmLXBpYy4KKworCSogaGFsZnBpYy5oIChoYWxmX3BpY19kZWNsYXJlLCBIQUxGX1BJQ19ERUNMQVJFKTogQWRkIGZ1bmN0aW9uCisJZGVmaW50aW9uLCBhbmQgYWNjZXNzb3IgbWFjcm8uCisKKwkqIG1pcHMuaCAoSEFMRl9QSUNfREVDTEFSRSk6IEFkZCBkdW1teSBtYWNybyBpZiBub3QgT1NGL3Jvc2UuCisJKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FKTogSW52b2tlIEhBTEZfUElDX0RFQ0xBUkUgb24gbmFtZS4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IERpdHRvLgorCSgqX1NFQ1RJT05fQVNNX09QKTogUHV0IHRoZSBsZWFkaW5nIHRhYiBiYWNrIGluLgorCisJKiBtaXBzLm1kIChkc2xvdCBhdHRyaWJ1dGUpOiAncGljJyB0eXBlIHJlcXVpcmVzIGEgZGVsYXkgc2xvdCwgc2luY2UKKwlpdCBpcyByZWFsbHkgYSBsb2FkLgorCShtb3ZzaSk6IE1ha2UgbW92c2kgYSBkZWZpbmVfZXhwYW5kLCBhbmQgaWYgaXQncyBtb3ZpbmcgdGhlIGFkZHJlc3MKKwlvZiBhIGhhbGYtcGljIGl0ZW0gaW50byBhIHJlZ2lzdGVyLCBjb252ZXJ0IGl0IGludG8gYSBsb2FkLgorCShtb3ZzaV9pbnRlcm5hbCk6IFRoZSBvbGQgbW92c2kgZGVmaW5lX2luc24gcmVuYW1lZC4KKwkobW92c3Ryc2lfaW50ZXJuYWwpOiBBZGQgJz0nIGNvbnN0cmFpbnQgb24gYWxsIHN0b3JlcyBhbmQgY2xvYmJlcnMuCisKKwkqIGRlY3Jvc2UuaCAoTElOS19TUEVDKTogSWYgbm90IC1ub3NocmxpYiBvciAtcGljLW5vbmUsIHBhc3MKKwktd2Fybl9ub3BpYy4gIEFsbG93IHVzZXIgdG8gcGFzcyAtbm9zaHJsaWIgZGlyZWN0bHkuCisKK1dlZCBBcHIgIDggMDA6MTE6NTYgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5oIChNT1ZFX01BWCk6IFNldCB0byA4IGluc3RlYWQgb2YgNC4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8yKTogRG9uJ3QgYWJvcnQgaWYgZmluZCBub3RlIGJlZm9yZSBhIENDMAorCXVzaW5nIGluc24uCisKKwkqIHNwYXJjLmggKEFERElUSU9OQUxfUkVHSVNURVJTX05BTUVTKTogQWRkLiAgRGVmaW5lIGZha2UgcmVnIG5hbWUKKwljY3IsIGZvciB1c2UgaW4gYXNtIGNsb2JiZXJzLgorCisJKiBzcGFyYy5oIChUQVJHRVRfRk9SQ0VfQUxJR04pOiBBZGQgY29tbWVudCBleHBsYWluaW5nIHRoYXQgaXQKKwlpcyBmb3IgZXhwZXJpbWVudGFsIHB1cnBvc2VzIG9ubHkuCisJKEZJUlNUX1BBUk1fT0ZGU0VUKTogQWRkIDQgd2hlbiBUQVJHRVRfRk9SQ0VfQUxJR04gdG8gZW5zdXJlIHRoYXQKKwlzdGFjayBpcyBkb3VibGUtd29yZCBhbGlnbmVkLgorCShGSVJTVF9QQVJNX0NBTExFUl9PRkZTRVQpOiBEZWxldGUgb2Jzb2xldGUgbWFjcm8uCisKKwlGcm9tIFRvbSBXb29kOgorCSogdW5yb2xsLmMgKGZpbmFsX2dpdl92YWx1ZSk6IFB1dCB0aGUgc3VidHJhY3RzIGluIHRoZSByaWdodCBwbGFjZS4KKworCSogc3BhcmMuYyAoY29tcHV0ZV9sYXN0X2FyZ19vZmZzZXQpOiBEZWxldGUsIG5vIGxvbmdlciBuZWVkZWQuCisJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBEbyBub3QgZGVwZW5kIG9uIGZyYW1lIHNpemUuCisKK1R1ZSBBcHIgIDcgMjI6MzY6MzMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGhhbGZwaWMuYyAod2hvbGUgZmlsZSk6IEZsZXNoIG91dCBpbml0aWFsIGhhbGYtcGljIGltcGxlbWVudGF0aW9uCisJZm9yIHRoZSBPU0YvMSByZWZlcmVuY2UgcG9ydHMuICBUaGlzIGlzIHN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworCSogaGFsZnBpYy5oICh0b3BsZXZlbCk6IEFkZCBkZWNsYXJhdGlvbnMgZm9yIGhhbGZfcGljX2ZpbmlzaCBhbmQKKwloYWxmX3BpY19wdHIuICBBZGQgbWFjcm9zIEhBTEZfUElDX0ZJTklTSCwgSEFMRl9QSUNfUFRSLCBhbmQKKwlIQUxGX1BJQ19QUkVGSVguCisKKwkqIG1pcHMuaCAoY2FsbF9tZW1vcnlfb3BlcmFuZCk6IERlbGV0ZSBjYWxsX21lbW9yeV9vcGVyYW5kCisJZnVuY3Rpb24gZGVjbGFyYXRpb24uCisJKFBSRURJQ0FURV9DT0RFUyk6IERpdHRvLgorCShDT05TVEFOVF9BRERSRVNTX1ApOiBDb3JyZWN0bHkgcmVqZWN0IGhhbGYtcGljIGFkZHJlc3Nlcy4KKworCSogbWlwcy5jIChjYWxsX21lbW9yeV9vcGVyYW5kKTogRGVsZXRlIGZ1bmN0aW9uLgorCisJKiBtaXBzLm1kIChjYWxsKiBwYXR0ZXJucyk6IFVzZSBtZW1vcnlfb3BlcmFuZCBpbnN0ZWFkIG9mCisJY2FsbF9tZW1vcnlfb3BlcmFuZCBmb3IgcHJlZGljYXRlcy4gIFVzZSB0aGUgdGVzdCBub3QgcmVnaXN0ZXIgYW5kCisJbm90IENPTlNUQU5UX0FERFJFU1NfUCBpbnN0ZWFkIG9mIGNhbGxfbWVtb3J5X29wZXJhbmQgaW4gdGhlCisJZGVmaW5lX2V4cGFuZCBib2R5IHRvIHRlc3Qgd2hldGhlciB0aGUgZnVuY3Rpb24gYWRkcmVzcyBuZWVkcyB0byBiZQorCWZvcmNlZCB0byBhIHJlZ2lzdGVyLgorCisJKiBkZWNyb3NlLmggKEhBTEZfUElDX0RFQlVHKTogRGVmaW5lIGFzIHRydWUgaWYgLW1kZWJ1Z2IsIHRvIGRlYnVnCisJdGhlIGhhbGYtcGljIGNvZGUsIGp1c3QgbGlrZSBkZWJ1Z2dpbmcgbm9ybWFsIGFkZHJlc3NpbmcuCisJKENQUF9TUEVDKTogVXNlIHRoZSBfXzxuYW1lPl9fIGZvcm0gb2YgdGhlIGxhbmd1YWdlIG1hY3JvcyBpbnN0ZWFkCisJb2YgX188bmFtZT4uCisJKExJTktfU1BFQyk6IElmIC1waWMtbGliIGFuZCBub3QgLW5vc2hybGliLCBwYXNzIC13YXJuX25vcGljLgorCShMSUJfU1BFQyk6IERvbid0IHBhc3MgLUwvdXNyL2Njcy9saWIuCisKKwkqIHgtZGVjcm9zZSAoQ0NMSUJGTEFHUyk6IFBhc3MgLXBpYy1leHRlcm4gd2hlbiBidWlsZGluZyBsaWJnY2MxLmEuCisJKExJQkdDQzJfQ0ZMQUdTKTogUGFzcyAtcGljLWV4dGVybiB3aGVuIGJ1aWxkaW5nIGxpYmdjYzIuYS4KKworVHVlIEFwciAgNyAxOTowMDo1NiAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogeG0tbTg4ay5oIChOT19TWVNfU0lHTElTVCk6IE5vdCBwcm92aWRlZCBieSB0aGUgODhvcGVuIHN0YW5kYXJkcy4KKworCSogbTg4ay5jIChvdXRwdXRfYXNjaWkpOiBHZW5lcmFsaXplIHRvIHN1cHBvcnQgaWRlbnQKKwkqIG04OGsuaCAoQVNNX09VVFBVVF9JREVOVCwgQVNNX09VVFBVVF9BU0NJSSk6IFVzZSBvdXRwdXRfYXNjaWkuCisKKwkqIG04OGsuYywgbTg4ay5tZCwgbTg4ay5oOiBJbnRlZ3JhdGUgYWxsIGNoYW5nZXMgdG8gc3VwcG9ydCB0aGUgbTg4MTEwLgorCitNb24gQXByICA2IDIyOjUxOjAyIDE5OTIgIEpvaG4gV3JvY2xhd3NraSAgKGp0d0BsY3MubWl0LmVkdSkKKworCSogbWlwcy10ZmlsZS5jIChyZWFkX3NlZWspOiBGaXggYXJndW1lbnQgb3JkZXIgaW4gY2FsbHMgdG8KKwlmYXRhbC4KKworTW9uIEFwciAgNiAyMToxNzozOCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKKworCSogbWVyZ2VkIGluIEN5Z251cyBzb3VyY2VzLgorCisJTW9uIEFwciAgNiAxNToyNjowOSAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXNwZXcuYyAoaGFja19tb3JlX2lkcyk6IFJlaW1wbGVtZW50LiAgQ2hhbmdlIGZyb20gTmlrbGFzCisJSGFsbHF2aXN0LgorCisJVGh1IEFwciAgMiAwMjozNjozNiAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC0qOiAgU2ltcGxpZnkgREVDTF9OQU1FIChUWVBFX05BTUUgaW50byBUWVBFX0lERU5USUZJRVIuCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiAgRml4IGFuIGVycm9yIG1lc3NhZ2UuCisKKwkqIGNwLXBhcnNlLnkgKExDKTogIFJlbmFtZWQgdG8gbGVmdF9jdXJseS4KKwkoVFlQRU5BTUVfU0NPUEUpOiAgUmVuYW1lZCB0byB0eXBlbmFtZV9zY29wZS4KKworTW9uIEFwciAgNiAxNDowNDo0OSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmggKFRBUkdFVF9IT1BFX0FMSUdOKTogRml4IHR5cG8sIGAtZmFzdCcgLT4gYC1kYWxpZ24nLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBJTkRJUkVDVF9SRUYgY2FzZSk6IFNldCBNRU1fSU5fU1RSVUNUX1AgaWYKKwl0aGlzIGlzIGFuIGluZGlyZWN0IG9mIHRoZSBhZGRyZXNzIG9mIGFuIGFycmF5LCBzdHJ1Y3QsIG9yIHVuaW9uLgorCisJKiBqdW1wLmM6IERlbGV0ZSBkZWNsYXJhdGlvbiBvZiBzcXVlZXplX25vdGVzLgorCShqdW1wX29wdGltaXplKTogVXNlIG5ldyByZXR1cm4gdmFsdWUgZnJvbSBzcXVlZXplX25vdGVzLgorCShzcXVlZXplX25vdGVzKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIFNUQVJUIG1heSBiZSBhIG5vdGUgdGhhdAorCW11c3QgYmUgbW92ZWQgb3V0c2lkZSB0aGUgcmFuZ2UuICBOb3cgcmV0dXJucyB0aGUgbmV3IHN0YXJ0IHZhbHVlLgorCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBVc2Ugc3F1ZWV6ZV9ub3RlcyByZXR1cm4gdmFsdWUuCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IENhbGwgc3F1ZWV6ZV9ub3RlcyBiZWZvcmUgcmVvcmRlcl9pbnNucy4KKwkqIHJ0bC5oOiBEZWNsYXJlIHNxdWVlemVfbm90ZXMuCisKKwkqIHJzNjAwMC5oIChQVFJESUZGX1RZUEUpOiBEZWZpbmUgdG8gaW50LgorCisJTW9zdGx5IGZyb20gdGVnZUBzaWNzLnNlOgorCSogc3BhcmMuYyAoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5KTogQ2xhcmlmeSBjb21tZW50LiAgRGVsZXRlCisJdW5yZWFjaGFibGUgdGVzdCBvZiBsZWFmX2Z1bmN0aW9uLgorCShzaW5nbGVtb3ZlX3N0cmluZyk6IENvcnJlY3QgdGVzdCBmb3Igd2hlbiBjYW4gdXNlIHNldGhpIGFsb25lLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBEZWNsYXJlIGxlYWZfZnVuY3Rpb24uICBNb3JlCisJZWZmaWNpZW50bHkgZnJhbWUgc2l6ZXMgZ3JlYXRlciB0aGFuIDQwOTUuIENvcnJlY3RseSBoYW5kbGUgbGVhZgorCWZ1bmN0aW9ucyB3aXRoIGZyYW1lIGdyZWF0ZXIgdGhhbiA0MDk1LgorCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBMaWtld2lzZS4KKwkob3V0cHV0X3JldHVybik6IExpa2V3aXNlLgorCitNb24gQXByICA2IDEwOjExOjA4IDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlQGRlZm1hY3JvLmNzLnV0YWguZWR1KQorCisJKiBjb25maWcuc3ViIDogQWRkIGhwNzAwIGNwdSB0eXBlLgorCSogY29uZmlndXJlIDogTWFrZSBocDcwMC1ic2QgYW5kIGhwNzAwLWhwdXggY2FzZXMsIHdpdGggdXNlIG9mIGdhcworCWFuIG9wdGlvbi4KKwkqIGhwNzAwaHB1eGcuaCwgaHA4MDBocHV4Zy5oIDogTmV3IGZpbGVzIGZvciB1c2luZyBnYXMgdW5kZXIgaHB1eC4KKwkqIGhwODAwLmggKFJFR0lTVEVSX05BTUVTKTogQ2hhbmdlIHRvIHVzZSAlciBzdHlsZSByZWdpc3RlciBuYW1lczsKKwlyZXF1aXJlZCB0byBuYW1lIFBBLVJJU0MgMS4xIGZwIHJlZ2lzdGVycy4KKwkqIHgtaHA4MDBocHV4IDogRG9uJ3QgaW52b2tlIHRoZSBhc3NlbWJsZXIgdG8gY29tcGlsZSBhbGxvY2EuYy4KKwkqIFJFQURNRS1QQS1SSVNDOiBOZXcgZmlsZS4KKworTW9uIEFwciAgNiAwODowMDowNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jIChyZWxheF9kZWxheV9zbG90cyk6IERvbid0IGdldCBjb25mdXNlZCB3aGVuIGEgbGFiZWwKKwliZWNvbWVzIHplcm8gKG1lYW5pbmcgZW5kIG9mIGZ1bmN0aW9uKS4KKworU3VuIEFwciAgNSAxMzo0NTozNyAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogaTg2MC5tZCAoZmxvYXRzaWRmMyk6ICBGaXhlZCB0byBleHBhbmQgdG8gYSBjb3JyZWN0IGluc24gc2VxdWVuY2UuCisKK1N1biBBcHIgIDUgMTI6MzM6MDIgMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQWNoYXRlcy5taXQuZWR1KQorCisJKiByczYwMDAuaCAoRVhUUkFfQ0NfTU9ERVMsIEVYVFJBX0NDX05BTUVTKTogQWRkIENDRVFtb2RlLgorCShTRUxFQ1RfQ0NfTU9ERSk6IFNlbGVjdCBpdCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbiBvZiBjb21wYXJpc29uLgorCSogcnM2MDAwLmMgKHNjY19jb21wYXJpc29uX29wZXJhdG9yKTogUmVqZWN0IGltcHJvcGVyIHVzZSBvZgorCUNDRVFtb2RlLgorCShjY3JfYml0KTogSGFuZGxlIENDRVFtb2RlLCB3aGVyZSBiaXQgaXMgYWx3YXlzIHRoaXJkIGluIGZpZWxkLgorCShwcmludF9vcGVyYW5kLCBjYXNlICdFJyk6IE5ldyBjYXNlLgorCSogcnM2MDAwLm1kOiBOZXcgcGF0dGVybiB0byBjb21wYXJlIHR3byBjb21wYXJpc29ucyB3aXRoCisJY3JlcXYvY3J4b3IuCisJQWRkIHBlZXBob2xlIGZvciB0d28gY29uc2VjdXRpdmUgc2NjIGluc25zLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIEZGUyk6IChmZnMgKCpfZXh0ZW5kIFgpKSAtPiAoZmZzIFgpCisJKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogSGFuZGxlIChhbmQgKHJvdGF0ZSBYIEMpIE0pLgorCisJKiBmbGFncy5oIChmbGFnX2NzZV9za2lwX2Jsb2Nrcyk6IE5ldyB2YXJpYWJsZS4KKwkqIHRvcGxldi5jIChmbGFnX2NzZV9za2lwX2Jsb2Nrcyk6IERlZmluZSBpdCBoZXJlLgorCShmX29wdGlvbnMpOiBBZGQgaXQgdG8gdGFibGUuCisJKG1haW4pOiAtTzIgdHVybnMgaXQgb24uCisJKiBjc2UuYyAoaW52YWxpZGF0ZWRfc2tpcHBlZF97c2V0LGJsb2NrfSk6IE5ldyBmdW5jdGlvbnMuCisJKGVudW0gdGFrZW4pOiBOZXcgdmFsdWUsIEFST1VORC4KKwkoY3NlX2VuZF9vZl9iYXNpY19ibG9jayk6IE5ldyBhcmd1bWVudCBTS0lQX0JMT0NLUy4gIElmIGl0IGlzCisJbm9uemVybywgZm9sbG93IGEgYnJhbmNoIGFyb3VuZCBhIGJsb2NrIG9mIGNvZGUgd2hpY2ggY29udGFpbnMKKwlubyBsYWJlbHMgYW5kIHNldCBzdGF0dXMgPSBBUk9VTkQgZm9yIHRoZSBqdW1wLgorCShjc2VfbWFpbik6IFBhc3MgRkxBR19DU0VfU0tJUF9CTE9DS1MgYXJndW1lbnQgdG8KKwljc2VfZW5kX29mX2Jhc2ljX2Jsb2NrLgorCShjc2VfYmFzaWNfYmxvY2spOiBJZiBqdW1wIHN0YXR1cyBpcyBBUk9VTkQsIGNhbGwgc2Nhbl9za2lwcGVkX2Jsb2NrCisJYmVmb3JlIGZvbGxvd2luZyBqdW1wLgorCitTdW4gQXByICA1IDA0OjE2OjQ2IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBBZGQgbWlzc2luZyBwYXJhbWV0ZXIgdHlwZSBkZWNsYXJhdGlvbi4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBTUVJUKTogRml4IHR5cG8gZW1pdHRpbmcgaW5zbnMuCisJUmVmb3JtYXQgdG8gbG9vayBsaWtlIHRoZSByZXN0IG9mIGdjYy4gIFVzZSBhY2Nlc3NvciBtYWNyb3MgdG8KKwlhY2Nlc3MgZmllbGRzIG9mIGFuIFJUWC4gIE1ha2UgY29tbWVudHMgbWF0Y2ggY29kZS4KKworCSogaTM4Ni5tZCAoY21wc3RyIHBhdHRlcm5zKTogSGFuZGxlIHplcm8gbGVuZ3RoIGNvbXBhcmVzLgorCitTYXQgQXByICA0IDA0OjQwOjU4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IEF2b2lkIHBhc3NpbmcgemVybyB0byB0cnVlX3JlZ251bS4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogSGFuZGxlIGNhc2Ugd2hlcmUgd2UKKwlhcmUgZXh0cmFjdGluZyBhIGZpZWxkIG9mIGEgY29uc3RhbnQuCisKKwkqIGEyOWsuaCAoe1RFWFQsUkVBRE9OTFlfREFUQSxEQVRBfV9TRUNUSU9OX0FTTV9PUCk6IFB1dCB0YWIgYmFjay4KKworCSogcnM2MDAwLmMgKG91dHB1dF9lcGlsb2cpOiBSZWR1Y2UgbnVtYmVyIG9mIGxpbmVzIGdlbmVyYXRlZCB0bworCXdyaXRlIHRyYWNlYmFjayB0YWJsZS4KKworCSogY29tYmluZS5jIChtb3ZlX2RlYXRocyk6IEEgZGVzdGluYXRpb24gaXMgdXNlZCBpbiB0aGlzIGluc24KKwl1bmxlc3MgaXMgaXQgY29tcGxldGVseSBvdmVyd3JpdHRlbi4KKworU2F0IEFwciAgNCAwNDozOToxNiAxOTkyICBKb2huIENhcnIgKGpmYyBhdCBBVEhFTkEuTUlULkVEVSkKKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCwgZXh0cmFjdF9iaXRfZmllbGQpOiBSZW1vdmUgcmVkdW5kYW50CisJdGVzdHMgZm9yIE1FTS4KKworCSogYy1jb21tb24uYyAoYmluYXJ5X29wX2Vycm9yKTogSGFuZGxlIEZMT09SX0RJVl9FWFBSLCBGTE9PUl9NT0RfRVhQUiwKKwkqUk9UQVRFX0VYUFIuCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBIYW5kbGUgRkxPT1JfTU9EX0VYUFIuCisKK1NhdCBBcHIgIDQgMDA6Mjk6NDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogYC0nIHdhcyBtaXNzaW5nIGluIC1Xbm8tcmVkdW5kYW50LWRlY3MuCisKKwkqIE1ha2VmaWxlLmluIChVU0VfQ09MTEVDVDIsIE1BWUJFX1VTRV9DT0xMRUNUMik6IE5ldyB2YXJpYWJsZXMuCisJKEdDQ19QQVJUUywgbmF0aXZlLCBpbnN0YWxsLWNvbW1vbik6IFVzZSBVU0VfQ09MTEVDVDIuCisJKHRvcGxldi5vKTogVXNlIE1BWUJFX1VTRV9DT0xMRUNUMi4KKwkqIGNvbmZpZ3VyZTogTGV0IHBhcnRpY3VsYXIgY2FzZXMgc2V0IHVzZV9jb2xsZWN0MgorCWFuZCBoYXZlIHRoYXQgY29udHJvbCB1c2Ugb2YgY29sbGVjdDIgdGhyb3VnaCBlZGl0aW5nIE1ha2VmaWxlLgorCUhhbmRsZSAtLXdpdGgtZ251LWFzIGFuZCAtLXdpdGgtZ251LWxkIG9wdGlvbnMuICBJZ25vcmUgLS13aXRoLSouCisJLS13aXRoLWdudS1sZCB0dXJucyBvZmYgdXNlX2NvbGxlY3QyLgorCSogaTM4NnJvc2UuaCAoQ0MxUExVU19TUEVDKTogRGVsZXRlZC4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEluIGNhc2UgJ0QnLCBzdHJpcCBmaW5hbCAvIGZyb20gcHJlZml4ZXMuCisKKwkqIGMtZGVjbC5jIChwdXNoX2NfZnVuY3Rpb25fY29udGV4dCk6IEFkZCBwZWRhbnRpYyB3YXJuaW5nLgorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogRmlndXJlIFNUQU5EQVJEX0VYRUNfUFJFRklYIGludG8gY2xlbi4KKworCSogYy10eXBlY2suYyAoZ2V0X3NwZWxsaW5nKTogTW92ZSBhbGxvY2Egb3V0c2lkZSBmbiBjYWxsLgorCitGcmkgQXByICAzIDE2OjM2OjU0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9kZWYpOiBTZXQgTUVNX0lOX1NUUlVDVF9QIGlmIG5lYy4KKworRnJpIEFwciAgMyAwNTozMjozOSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtODhrLm1kIChjYWxsX2Jsb2NrX21vdmV7LF9sb29wfSk6IERvbid0IHdyaXRlIFVTRSBmb3IgcmVncworCXdlIGRvbid0IHNldDsgcmVtb3ZlIHVubmVlZGVkIENMT0JCRVJzIGZvciBjYWxsLXVzZWQgcmVnaXN0ZXJzLgorCisJKiBjYWxsZXItc2F2ZS5jIChpbnNlcnRfc2F2ZV9yZXN0b3JlKTogQWJvcnQgcmF0aGVyIHRoYW4gd3JpdGluZworCW91dCBhbiBpbnNuIGhhdmluZyBhIG51bGwgc291cmNlIG9yIGRlc3RpbmF0aW9uLgorCisJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IERvbid0IHJlZmVyZW5jZQorCVNUQUNLX0JPVU5EQVJZIGlmIGl0IGlzbid0IGRlZmluZWQuCisKKwkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogRG9uJ3QgdXNlIFRBUkdFVCBpZiBpdAorCWlzbid0IGEgcHNldWRvIHJlZy4KKworRnJpIEFwciAgMyAwMTo1MDo1NyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluYy5zdnI0OiBEb24ndCByZWNvbnZlcnQgX19pMzg2IGlmIGhhdmUgXyBhZnRlci4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIHNpemVfYmlub3AgdG8gZ2V0IGFycmF5IGhib3VuZCAtIDEuCisKKwkqIGVucXVpcmUuYzogSW5jbHVkZSBzeXMvdHlwZXMuaC4KKworCSogYy10eXBlY2suYyAoY2hlY2tfZm9ybWF0KTogRG9uJ3QgdXNlIHR5cGUgbmFtZSBmb3IgaW50ZWdlciB0eXBlcworCW9yIHBvaW50ZXJzIHRvIHRoZW0uCisKKwkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogTmV3IGFyZyBLTk9XTl9BTElHTi4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCitUaHUgQXByICAyIDE1OjI0OjM4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogT3V0cHV0IGp1c3QgeHJlZiBmb3IgdmFyLXNpemUgc3RydWN0L3VuaW9uLgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBJbiBwcmV2aW91cyBjaGFuZ2UsIHZlcmlmeSB2YWx0cnkgIT0gMC4KKworVGh1IEFwciAgMiAwODozNDozOCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaXJpcy5oIChTSVpFX1RZUEUpOiBNYWtlIHR5cGUgdW5zaWduZWQgaW50LCBub3QgdW5zaWduZWQgbG9uZy4KKwkoUFRSRElGRl9UWVBFKTogRGVmaW5lIHRvIGJlICdpbnQnLCBub3QgJ2xvbmcgaW50Jy4KKwkoV0NIQVJfVFlQRSk6IERlZmluZSB0byBiZSAndW5zaWduZWQgY2hhcicsIG5vdCAnaW50Jy4KKwkoV0NIQVJfVFlQRV9TSVpFKTogRGVmaW5lIHRvIGJlIDgsIG5vdCAzMi4KKworVGh1IEFwciAgMiAwNjowMTowNyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgQ09ORF9FWFBSKTogQWRkIG1pc3NpbmcgdGVzdCBmb3IgemVyby4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBUlJBWV9SRUYpOiBIYW5kbGUgY2FzZSBvZiBjb25zdGFudAorCWFycmF5IHdob3NlIGluaXRpYWxpemVyIGlzIGEgc3RyaW5nLgorCisJKiBvcHRhYnMuYyAoZW1pdF9saWJjYWxsX2Jsb2NrKTogRG9uJ3QgbW92ZSB1cCBpbnNucyB0aGF0IHNldAorCXBzZXVkb3Mgd2hvc2Ugb2xkIHZhbHVlcyBhcmUgdXNlZCBpbiBwcmV2aW91cyBpbnNucy4KKworCSogZ2VuYXR0cnRhYi5jIChhdHRyX3J0eCk6IEFkZCBzb21lIGNhc3RzIHRvIGludCBmcm9tIGVudW0gcnR4X2NvZGUuCisKK1RodSBBcHIgIDIgMDQ6MjA6MzAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB4bS1taXBzbmJzZC5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAobWlwcy1zb255LWJzZCopOiBVc2UgdGhhdC4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBNb3ZlIHRoZSBjb252ZXJ0X3RvX21vZGUgYWZ0ZXIgZW1pdF9xdWV1ZS4KKworVGh1IEFwciAgMiAwMDo0OToxOCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogRml4IHR5cG8uCisKK1dlZCBBcHIgIDEgMTk6MDE6MDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKHNpemVfaW50KTogQWx3YXlzIHN3aXRjaCB0byBwZXJtYW5lbnRfb2JzdGFjaworCXRvIG1ha2UgYSBub2RlIHRoYXQgd2lsbCBiZSBzYXZlZAorCitXZWQgQXByICAxIDE1OjM2OjE5IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiB4bS1pcml4NC5oIChhbGxvY2EuaCk6IERvbid0IGluY2x1ZGUgPGFsbG9jYS5oPiBpZiBub3QgdXNpbmcgdGhlCisJR05VIGNvbXBpbGVyLCBzaW5jZSB0aGUgU2lsaWNvbiBHcmFwaGljcyBjb21waWxlcidzIGFsbG9jYSBjb21wbGFpbnMKKwlpZiB0aGUgcmVzdWx0IG9mIGFsbG9jYSBpcyBzdG9yZWQgaW4gc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgc2ltcGxlCisJdmFyaWFibGUuICBKdXN0IHVzZSB0aGUgQyB2ZXJzaW9uIG9mIGFsbG9jYS5jLgorCitXZWQgQXByICAxIDE0OjQyOjI0IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBweXIubWQgKEhJbW9kZSBjb21wYXJlIHJlY29nbml6ZXJzKTogRG9uJ3QgbWF0Y2ggaWYgc3Vic2VxdWVudAorCWJyYW5jaCBoYXMgdW5zaWduZWQgcHJlZGljYXRlLgorCitXZWQgQXByICAxIDE0OjIwOjEzIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogRHJvcCB1bnVzZWQgdHJ1ZV9lcGlsb2d1ZQorCXBhcmFtZXRlci4gIERlbGV0ZSBvYnNvbGV0ZSB0YWlsLWNhbGwgc3VwcG9ydCBjb2RlLCB3aGljaCB3b3JrZWQKKwlieSBwYXNzaW5nIC0xIGZvciBsZWFmX2Z1bmN0aW9uLgorCSh0YWlsX2NhbGxfdmFsaWRfcCk6IERlbGV0ZSBvYnNvbGV0ZSBmdW5jdGlvbi4KKwkob3V0cHV0X3RhaWxfY2FsbCk6IExpa2V3aXNlLgorCSogc3BhcmMuaCAoVEFSR0VUX1RBSUxfQ0FMTCk6IERlbGV0ZSBvYnNvbGV0ZSBvcHRpb24uCisJKEZVTkNUSU9OX0VQSUxPR1VFKTogRml4IGNhbGwgdG8gb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlLgorCSogc3BhcmMubWQgKHRhaWxfY2FsbCk6IERlbGV0ZSBvYnNvbGV0ZSBwYXR0ZXJuLgorCisJKiByczYwMDAuYyAob3V0cHV0X2VwaWxvZ3VlKTogT3V0cHV0IGEgdHJhY2ViYWNrIHRhYmxlLgorCitXZWQgQXByICAxIDA2OjQyOjU0IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmg6IE92ZXJyaWRlIEFTTV9PUHMgYWRkZWQgdG8gc3ZyNC5oLgorCitXZWQgQXByICAxIDAzOjEyOjQ0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogU3dhcCB3b3JkcyBmcm9tIGNvbnN0X2RvdWJsZSBpZiBuZWMKKworCSogbnMzMmsuaCAoR09fSUZfSU5ERVhJTkcpOiBOZXcgYXJnIE1PREU7IGNhbGxlciBjaGFuZ2VkLgorCVBhc3MgdG8gSU5ERVhfVEVSTV9QLgorCitUdWUgTWFyIDMxIDE4OjEwOjEwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmF0dHJ0YWIuYyAoY2hlY2tfYXR0cl92YWx1ZSk6IEZpeCBzb21lIGJhY2t3YXJkcyB0ZXN0cy4KKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlc3ssX25pbnNuc30pOiBPbmx5IGxvb2sgYXQgTU9ERV9JTlQgbW9kZXMuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBDT05EX0VYUFIpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IEFkZCBtaXNzaW5nIGNhbGwgdG8gc2l6ZV9pbnQuCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IEhhbmRsZSBjYXNlIHdoZXJlIEVYUCBpcyBhIFRSVVRIX05PVF9FWFBSLgorCitUdWUgTWFyIDMxIDE3OjE4OjIwIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEVuYWJsZSBgc3FydCcuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIFNRUlQpOiBCeSBkZWZhdWx0IGNoZWNrIHRoYXQgdGhlCisJYXJndW1lbnQgdG8gc3FydCBpcyBpbiBzcXJ0J3MgZG9tYWluLiAgSWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBpbiB0aGUKKwlkb21haW4sIHRoZW4gY2FsbCB0aGUgbGlicmFyeSBmdW5jdGlvbi4gIFNraXAgYXJndW1lbnQgY2hlY2tpbmcgaWYKKwktZmZhc3QtbWF0aCBpcyBpbiB1c2UuCisKKwkqIGZsYWdzLmggKGZsYWdfZmFzdF9tYXRoKTogRGVjbGFyZSBuZXcgdmFyaWFibGUuCisJKiB0b3BsZXYuYyAoZl9vcHRpb25zKTogQWRkIGZsYWdfZmFzdF9tYXRoIHRvIHRhYmxlLgorCitUdWUgTWFyIDMxIDE3OjExOjA5IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYzogIEFkZCBuZXcgZmxhZyAtbm9zdGRpbmMrKyB0byBkaXNhYmxlIHNlYXJjaGluZworCXN0YW5kYXJkIEMrKy1zcGVjaWZpYyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBUaGlzIGlzIHVzZWZ1bAorCWZvciBidWlsZGluZyBsaWJnKysuCisJKiBnY2MuYzogIFBhc3MgLW5vc3RkaW5jKiB0byBjcHAsIG5vdCBqdXN0IC1ub3N0ZGluYy4KKwkqIGNwcC50ZXhpOiAgRG9jdW1lbnQgLW5vc3RkaW5jKysuCisKK1R1ZSBNYXIgMzEgMTU6MzI6MzQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBVc2UgJWwgYmVmb3JlICVYLgorCisJKiBzdnI0LmggKE1VTFRJQllURV9DSEFSUyk6IFR1cm5lZCBvZmYuCisKKwkqIHN1bjMuaCwgc3BhcmMuaCAoTElOS19TUEVDKTogSW5oaWJpdCAtZSBpZiAtbm9zdGRsaWIuCisKKwkqIGNvbGxlY3QyLmMgKG15X3N0cmVycm9yKTogUmVuYW1lZCBmcm9tIHN0cmVycm9yLgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBGaW5kIGNvbnN0YW50cyBpbiBSRUdfRVFVSVYgbm90ZXMuCisKKwkqIG02OGsuaCAoUFJJTlRfT1BFUkFORF9QUklOVF9GTE9BVCk6IEZpeCB0eXBvIGluICNpZmRlZi4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGlyKTogQ3JlYXRlIGluY2x1ZGUgc3ViZGlyLgorCitUdWUgTWFyIDMxIDE4OjAzOjIxIDE5OTIgIFRob3JzdGVuIE9obCAgKG9obEBhcG9sbG8uZGVzeS5kZSkKKworCSogeC1hcG9sbG82OCAoQ0ZMQUdTLCBMSUJHQ0MyX0NGTEFHUyk6IERlZmluZWQuCisJKiB0LWFwb2xsbzY4OiBuZXcgZmlsZSwgdXNlIGNvbGxlY3QyLgorCSogY29uZmlndXJlOiB1c2UgYHQtYXBvbGxvNjgnLgorCisJKiBhcG9sbG82OC5oIChBU01fU1BFQyk6IERlbGV0ZSAtQy4KKwkoU1RSVUNUX1ZBTFVFX0lOQ09NSU5HKTogTm93IDAuCisJKEhBVkVfQVRFWElUKTogRGVmaW5lZC4KKwkoUFJPTU9URV9QUk9UT1RZUEVTKTogRGVsZXRlICN1bmRlZi4KKwkoVVNFUl9MQUJFTF9QUkVGSVgpOiBVbmRlZi4KKwkoTE9DQUxfTEFCRUxfUFJFRklYLCBSRUdJU1RFUl9QUkVGSVgsIFJFR0lTVEVSX1BSRUZJWF9NRCk6IE92ZXJyaWRlLgorCShBU01fUkVUVVJOX0NBU0VfSlVNUCk6IERlZmluZWQuCisJKFJFR0lTVEVSX05BTUVTKTogT3ZlcnJpZGUuCisKK1R1ZSBNYXIgMzEgMTQ6NTk6NTMgMTk5MiAgVGltIE1vb3JlICAobW9vcmVAZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIGhwODAwLm1kIChtb3ZzaSs0LCBjYWxsX3ZhbHVlKzEpOiBBZGQgeCx5IGNvbnN0cmFpbnRzIGZvciBTbmFrZQorCWZwIHJlZ2lzdGVycy4KKwkqIGhwODAwLmggKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBGaXggZm9yIFNuYWtlIHN0YWNrCisJYWxpZ25tZW50LiAKKwkoUkVHTk9fT0tfRk9SX0lOREVYX1AsIFJFR05PX09LX0ZPUl9CQVNFX1ApOiBGaXggZm9yIFNuYWtlIGZwCisJcmVnaXN0ZXJzLgorCSogaHA4MDAuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogQWxpZ24gc3RhY2sgZm9yIFNuYWtlcy4KKwkob3V0cHV0X2FyZ19kZXNjcmlwdG9yKTogRml4IFNuYWtlIHR5cG9zLgorCQorCSogaHA3MDAuaCwgaHA3MDBocHV4LmggOiBOZXcgZmlsZXMKKwkoVEFSR0VUX0RFRkFVTFQpOiBFbWl0IFNuYWtlIGNvZGUgYnkgZGVmYXVsdC4KKwkqIGhwNzAwaHB1eC5oIChIUF9GUF9BUkdfREVTQ1JJUFRPUl9SRVZFUlNFRCk6IERlZmluZSB0byB3b3JrCisJYXJvdW5kIGFzc2VtYmxlciBzeW50YXggZGlmZmVyZW5jZSBiZXR3ZWVuIDcwMCBhbmQgODAwIHNlcmllcyBIUFVYLgorCSogaHA4MDAuaCAoQVNNX0RPVUJMRV9BUkdfREVTQ1JJUFRPUlMpOiBDb25kaXRpb25hbGl6ZSBvbiB0aGUKKwlhYm92ZSBzeW1ib2wuCisKK1R1ZSBNYXIgMzEgMDk6NTg6NTIgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMtc3lzdi5oIChnZXRwYWdlc2l6ZSk6IFdoZW4gY29tcGlsaW5nIHRoZSB0cmFtcG9saW5lIGNvZGUsCisJZGVmaW5lIGEgbWFjcm8gZ2V0cGFnZXNpemUgd2hpY2ggdXNlcyB0aGUgUE9TSVggc3lzY29uZiBmdW5jdGlvbi4KKworCSogbWlwcy1zdnI0LmggKGdldHBhZ2VzaXplKTogV2hlbiBjb21waWxpbmcgdGhlIHRyYW1wb2xpbmUgY29kZSwKKwlkZWZpbmUgYSBtYWNybyBnZXRwYWdlc2l6ZSB3aGljaCB1c2VzIHRoZSBQT1NJWCBzeXNjb25mIGZ1bmN0aW9uLgorCitNb24gTWFyIDMwIDE5OjI1OjQ4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBJbiByZWNlbnQgbWF5YmVfbXVsdGlwbGUgY29kZSwgb25seQorCWFwcGx5IElOU05fTFVJRCB0byBpbnNuIHdoZW4gc2FmZS4KKworTW9uIE1hciAzMCAxNzoyNDozMyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5jIChvdXRwdXRfYmxvY2tfbW92ZSk6IEZpeCB0eXBvcyB0aGF0IHdvdWxkIGdlbmVyYXRlCisJaW5jb3JyZWN0IGNvZGUgaWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gaXMgYSBnbG9iYWwgb3IKKwlzdGF0aWMgbWVtb3J5IGFkZHJlc3MuICBJbmNyZW1lbnQgYXBwcm9wcmlhdGUgLW1zdGF0cyBjb3VudGVycy4KKworCSogeC1pcmlzIChJTlNUQUxMKTogVXNlIGNwIHRvIGluc3RhbGwgc3R1ZmYsIG5vdCBpbnN0YWxsIC1jLgorCitNb24gTWFyIDMwIDE2OjM5OjI4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbTY4ay5tZDogVXNlIGBcOycsIG5vdCBgOycsIHRvIHNlcGFyYXRlIGluc25zLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEFkZCBjYXN0IHdoZW4gc2V0dGluZyBkZWJ1Z19pbmZvX2xldmVsLgorCisJKiBtNjhrLmggKEdMT0JBTF9BU01fT1ApOiBOZXcgbWFjcm8uCisJKEFTTV9HTE9CQUxJWkVfTEFCRUwpOiBVc2UgdGhhdC4KKwkqIGhwMzIwLmgsIG02OGtzZ3MuaCwgbW90MzMwMC5oIChHTE9CQUxfQVNNX09QKTogT3ZlcnJpZGUgdGhpcy4KKwkoQVNNX0dMT0JBTElaRV9MQUJFTCk6IE5vdCB0aGlzLgorCisJKiBsaWJnY2MyLmMgKF9fYnVpbHRpbl9zYXZlcmVncykgW3NwYXJjXTogRGVmaW5lIGJvdGggYXNzZW1ibGVyIGxhYmVscworCV9fYnVpbHRpbl9zYXZlcmVncyBhbmQgX19fYnVpbHRpbl9zYXZlcmVncywgdG8gaGFuZGxlIGFsbCBzeXN0ZW1zLgorCisJKiBtNjhrLmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IEFkZCBhIGdsb2JhbGl6ZSBjb21tYW5kLgorCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogTWFrZSB0aGUgSlNScyByZWFsbHkgSlNScy4KKwlBbHdheXMgdXNlIHByZWNpc2VseSBfX190cmFtcG9saW5lLgorCitNb24gTWFyIDMwIDA3OjE3OjUwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoaW5jX2Zvcl9yZWxvYWQpOiBEZWNsYXJlIENPREUgY29uc2lzdGVudGx5LgorCShjb25zdHJhaW50X2FjY2VwdHNfcmVnX3ApOiBBZGQgbWlzc2luZyBjYXN0LgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgVFJVVEhfQU5ESUZfRVhQUik6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitNb24gTWFyIDMwIDAxOjA3OjMzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcnRsLmg6IERvbid0IGNvbnRpbnVlICNpZiBsaW5lcy4KKworTW9uIE1hciAzMCAwMzozMDo1NCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIE1lcmdlIGluIEN5Z251cyBjcC0qIHNvdXJjZXMsIGJlbG93IGFyZSB0aGUgQ2hhbmdlTG9nIGVudHJpZXMgZnJvbQorCXRoZSBDeWdudXMgQ2hhbmdlTG9nIGZpbGUuICBOb3RlLCBJIGFtIGV4cGVyaW1lbnRpbmcgd2l0aCBhIHNsaWdodGx5CisJZGlmZmVyZW50IGZvcm1hdCwgYXMgVGllbWFubiB3b3VsZCBsaWtlIHRoZSBkYXRlcyB0byByZW1haW4gaW50YWN0LAorCWJ1dCBTdGFsbG1hbiBkb2VzIG5vdCB3YW50IHRoZSBkYXRlcyBvdXQgb2Ygb3JkZXIgYW5kIHdvdWxkIHJhdGhlcgorCWhhdmUgdGhlIGVudHJpZXMgYWx0b2dldGhlciBhbnl3YXkuCisKKwlTdW4gTWFyIDI5IDE2OjU3OjMxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgdHlwZWRlZiBiZWZvcmUgb3RoZXIKKwlzcGVjaWZpZXJzLCBhcyB0eXBlZGVmIGlzIG5vdyBtb3JlIGNvbXBsZXggaW4gYysrIHRoYW4gaW4gYy4KKworCVN1biBNYXIgMjkgMTI6MDA6MDMgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogQWx3YXlzIHNldCBUUkVFX1BVQkxJQyBpZiBERUNMMSBpcworCXBhcnQgb2YgYW55IGludGVyZmFjZS4KKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogRG9uJ3QgdHlwZSB0byBjb252ZXJ0IGEgdHlwZSB0bworCWl0c2VsZi4KKwkoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogRG9uJ3QgbG9vayBmb3IgYWx0ZXJuYXRpdmVzIHRvIGRlZmF1bHQKKwl0eXBlIGNvbnZlcnNpb24gZXhjZXB0IHRvIGludGVncmFsIGFuZCByZWFsIHR5cGVzLiAgRml4ZXMgYnVnCisJZXhwb3NlZCBpbiAxOSBNYXJjaCBjaGFuZ2UuCisKKwlUdWUgTWFyIDI0IDA3OjUzOjQ2IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChsdmFsdWVfcCk6IFBPU1R7SU5DLERFQ31SRU1FTlRfRVhQUiBpcyBub3QgYW4gbHZhbHVlLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogRGl0dG8uCQorCisJKiBjcC1pbml0LmMgKGVtaXRfYmFzZV9pbml0KTogSWYgZGVidWdnaW5nLCBmb3JjZSBvdXQgYSBsaW5lIG5vdGUgc28KKwl3ZSBjYW4gc3RlcCBpbnRvIGN0b3JzIGZvciBiYXNlIGluaXRpYWxpemVycy4KKwkoYnVpbGRfdmlydHVhbF9pbml0KTogTm90ZSB0aGF0IHdlIG5lZWQgdG8gZG8gc29tZSBtb3JlIHdvcmsgdG8KKwloYW5kbGUgcmVwbGljYXRlZCBiYXNlIGNsYXNzZXMgaW4gbXVsdGlwbGUgaW5oZXJpdGFuY2UgbGF0dGljZXMuCisKKwlNb24gTWFyIDIzIDAwOjMzOjM1IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBGaW5pc2ggTWFyIDE1IGNoYW5nZSBjb25jZXJuaW5nCisJSU5ESVJFQ1RfUkVGcyB0aGF0IGhhdmUgVFJFRV9IQVNfQ09OU1RSVUNUT1Igc2V0LgorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IEVuc3VyZSBGSU5BTF9DUC0+RVZJTCBpcyBzZXQKKwl3aGVuIEZJTkFMX0NQIGlzIG5vbi1OVUxMIGFuZCB3ZSBlbmNvdW50ZXIgYW4gRVJST1JfTUFSS19OT0RFIGluIHRoZQorCW9wZXJhbmRzIHdlIGFyZSBwcm9jZXNzaW5nLgorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBQcm9wYWdhdGUgRVJST1JfTUFSS19OT0RFIGZyb20KKwlmYWlsZWQgdHlwZSBjb252ZXJzaW9ucy4KKworCVN1biBNYXIgMjIgMjA6MDE6NTEgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBjcC1pbml0LmMgKGlzX2FnZ3JfdHlwZWRlZik6IERvbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpZiBOQU1FCisJaXMgRVJST1JfTUFSS19OT0RFLgorCitTdW4gTWFyIDI5IDA5OjI5OjEwIDE5OTIgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBtYWtlLWdjYy5jb206IFJlbW92ZSBwYXRjaCBmcm9tIE1hcmNoIDcuCisKKwkqIG1ha2UtbDIuY29tOiBVc2UgY29tcGlsZXIgdGhhdCB3YXMganVzdCBidWlsdCwgaWYgYXZhaWxhYmxlLAorCSAgb3RoZXJ3aXNlIHVzZSBzeXN0ZW0gY29tcGlsZXIgaWYgaXQgaXMgdmVyc2lvbiAyLgorCitTdW4gTWFyIDI5IDE5OjUzOjMzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoe2ludmVydCxzd2FwfV90cmVlX2NvbXBhcmlzb24pOiBOZXcgZnVuY3Rpb25zLgorCShjb21wYXJpc29uX2VxdWl2X3ApOiBEZWxldGVkLgorCShvcGVyYW5kX2VxdWFsX2Zvcl9jb21wYXJpc29uX3ApOiBOZXcgZnVuY3Rpb24uCisJKGludmVydF90cnV0aHZhbHVlKTogVXNlIGludmVydF90cmVlX2NvbXBhcmlzb24uCisJKGZvbGQpOiBVc2UgdmFyaWFibGVzIFQxIGFuZCBURU0gY29uc2lzdGVudGx5LgorCURvbid0IG1peCBhcmdbMDFdIGFuZCBUUkVFX09QRVJBTkQgKHQsIFswMV0pOyB0aGV5IGFyZW4ndAorCWlkZW50aWNhbC4KKwkoZm9sZCwgY29tcGFyaXNvbiBjYXNlcyk6IFVzZSBuZXcgZnVuY3Rpb25zIHRvIGFkanVzdCBjb21wYXJpc29uCisJY29kZXM7IGFkZCB2YXIgSU5WRVJULgorCUNvbnZlcnQgZiA+PSBmIHRvIGYgPT0gZiBmb3IgRlAgYW5kIHNpbWlsYXIuCisJQ29ycmVjdGx5IGNvbXB1dGUgRlAgPD0gYW5kID49IHdoZW4gb25lIGFyZyBpcyBhIE5hTi4KKwlDbGVhbiB1cCBoYW5kbGluZyBvZiBjb25zdGFudCByZXN1bHRzLgorCShmb2xkLCBjYXNlIENPTkRfRVhQUik6IFJld29yayBjb25zaWRlcmFibHkgdG8gY2F0Y2ggbW9yZSBmb3JtcworCW9mIGFicywgbWluLCBtYXgsIGFuZCAtYWJzIGFuZCBhbHNvIGNsZWFuIHVwOyB1c2UgbmV3IGZ1bmN0aW9uCisJb3BlcmFuZF9lcXVhbF9mb3JfY29tcGFyaXNvbl9wLgorCitTdW4gTWFyIDI5IDAwOjAwOjM1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uKTogQXJnIHB0ciByZWcgbWF5IGJlIDAuCisKKwkqIGdjYy5jOiBBbHdheXMgZGVmaW5lIFJfT0ssIGV0Yy4gaWYgc3lzdGVtIGhlYWRlcnMgZG9uJ3QuCisKKwkqIGMtcGFyc2UueSAobWF5YmVfYXR0cmlidXRlKTogQWNjZXB0IGBtb2RlIChtKScgYXR0cmlidXRlLgorCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogSGFuZGxlIHRoYXQgYXR0cmlidXRlLgorCisJKiB0b3dlci5oIChSRUdJU1RFUl9OQU1FUyk6IERpc2NhcmQgdGhlIGZwYSByZWdzLgorCSogdG93ZXItYXMuaCAoRlVOQ1RJT05fUFJPTE9HVUUsIEZVTkNUSU9OX0VQSUxPR1VFKToKKwlEb24ndCBoYW5kbGUgZnBhIHJlZ3MuCisJKFBVVF9TREJfU1RBUlRfRElNLCBQVVRfU0RCX05FWFRfRElNLCBQVVRfU0RCX0xBU1RfRElNKToKKwlOZXcgbWFjcm9zLgorCShQVVRfU0RCX0RJTSk6IERlbGV0ZWQuCisKKwkqIG02OGsuaCAoUlRYX0NPU1RTKTogU21hbGxlciBtdWx0aXBseSBjb3N0cyBvbiA2ODA0MC4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBSZWR1Y2UgYW1vdW50IG9mIHNwZWNpZmljIG1vZGVzCisJdXNlZCBpbiBoYW5kbGluZyBjYXNlc2kuCisKKwkqIGNvbGxlY3QyLmMgKHNhdmVzdHJpbmcpOiBDb3B5IG9ubHkgU0laRSBieXRlcyBvZiBzdHJpbmcuCisKKwkqIGdzdGRkZWYuaDogSGFuZGxlIF9fbmVlZF9zaXplX3QsIF9fbmVlZF93Y2hhcl90LCBfX25lZWRfcHRyZGlmZl90LAorCWFuZCBfbmVlZF9udWxsLgorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IFNhdmUgSU5JVCB3aXRoIG5vcHMgbm90IHN0cmlwcGVkCisJdG8gcGFzcyB0byBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50LgorCitTdW4gTWFyIDI5IDEyOjI3OjAxIDE5OTIgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiB2bXMuaCAoRlVOQ1RJT05fUFJPTE9HVUUpOiAgUmVkZWZpbmUgdG8gYWRkIDQgYnl0ZXMgdG8gbG9jYWwKKwlzdG9yYWdlIG9uIHRoZSBzdGFjay4KKwkoU1RBUlRJTkdfRlJBTUVfT0ZGU0VUKTogUmVkZWZpbmUgYXMgLTQuCisKK1N1biBNYXIgMjkgMTk6NTg6NTcgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogRnVuY3Rpb24gcHJvdG90eXBlcyBub3cgb3ZlcnJpZGUKKwlvbGQtc3R5bGUgZGVmaW5pdGlvbnMgaWYgYXJndW1lbnQgdHlwZXMgZGlzYWdyZWUgb25seSBiZWNhdXNlIG9mCisJcHJvbW90aW9ucy4KKworU3VuIE1hciAyOSAxNzo0MDo1NiAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgZmlzaHBvbmQpCisKKwkqIGZpeGluY2x1ZGVzIChzdGRsaWIuaCk6IEZpeCBmcmVlL2NhbGxvYy9tYWxsb2MvcmVhbGxvYyByZXR1cm4gdHlwZXMuCisKK1N1biBNYXIgMjkgMTU6MTI6MzkgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBzcGFyYy5jIChzcGFyY190eXBlX2NvZGUpOiAgQWRkZWQgdGhpcyBuZXcgcm91dGluZS4KKwkodHJlZS5oKTogIEluY2x1ZGVkIHRvIHN1cHBvcnQgYHNwYXJjX3R5cGVfY29kZScuCisJKG91dHB1dF9ibG9ja19tb3ZlKTogIENsZWFuZWQgdXAgY29kZSB0byBoYW5kbGUgYXNzZW1ibGVyLXNwZWNpZmljCisJYXNwZWN0cyBvZiBpbnRlcm5hbCBsYWJlbHMuCisKKwkqIHNwYXJjLmg6IChSRUdfQUxMT0NfT1JERVIsIFJFR19MRUFGX0FMTE9DX09SREVSLCBMRUFGX1JFR0lTVEVSUyk6CisJRGVsZXRlZCBzcHVyaW91cyBzZW1pY29sb25zLgorCShBU01fREVDTEFSRV9SRVNVTFQpOiAgTmV3IG1hY3JvIHRvIGdlbmVyYXRlIHRoZSAucHJvYyBkaXJlY3RpdmUuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiAgQ2hhbmdlZCB0byB1c2UgQVNNX0RFQ0xBUkVfUkVTVUxULgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCwgQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogIENoYW5nZWQgdG8gdXNlCisJQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMIHdoZW4gZ2VuZXJhdGluZyBqdW1wIHRhYmxlIGVsZW1lbnRzLgorCisJKiBzdnI0LmggKFNWUjQpOiAgRG9uJ3QgZGVmaW5lIHRoaXMgc3ltYm9sIGhlcmUuICAoSXQgd2FzIG5ldmVyCisJbmVlZGVkLCBhbmQgaXQgd2lsbCBiZSB1c2VkIHRvIGluZGljYXRlIGFuIFNWUjQgKmhvc3QqIGZyb20gbm93IG9uLikKKwkoU0tJUF9BU01fT1ApOiAgRGVmaW5lIHRoaXMgbmV3IG1hY3JvLgorCShBU01fT1VUUFVUX1NLSVApOiAgVXNlIFNLSVBfQVNNX09QLgorCShBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMLCBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiAgQWRkZWQKKwluZXcgZGVmaW5pdGlvbnMgYXBwcm9wcmlhdGUgZm9yIG1vc3QgU1ZSNCBhc3NlbWJsZXJzLgorCShDT01NT05fQVNNX09QLCBMT0NBTF9BU01fT1ApOiAgRGVmaW5lIHRoZXNlIG5ldyBtYWNyb3MuCisJKEFTTV9PVVRQVVRfQUxJR05FRF9DT01NT04sIEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6ICBVc2UgdGhlbS4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogIEFsbG9jYXRlIHRoaW5ncyBpbiBjb21tb24gcmF0aGVyIHRoYW4KKwl0cnlpbmcgZm9yIHRoZSAuYnNzIHNlY3Rpb24gKHdoaWNoIG1heSBub3Qgd29yaykuCisJKEFTTV9ERUNMQVJFX1JFU1VMVCk6ICBEZWZpbmUgdGhpcyB0byBkbyBub3RoaW5nIChpZiBub3QgYWxyZWFkeQorCWRlZmFpbmVkIGZvciB0YXJnZXQgbWFjaGluZSkuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiAgQWRkIGludm9jYXRpb24gb2YgQVNNX0RFQ0xBUkVfUkVTVUxULgorCisJKiBkd2FyZm91dC5jIChBU01fRFdBUkZfUE9QX1NFQ1RJT04pOiAgUmVuYW1lZCBBU01fT1VUUFVUX1BPUF9TRUNUSU9OLgorCShQVVNIU0VDVElPTl9BU01fT1AsIFBPUFNFQ1RJT05fQVNNX09QKTogIE5ldyBtYWNybyBkZWZpbml0aW9ucy4KKwkoU0VDVElPTl9BU01fT1ApOiAgRGVsZXRlZC4gIFJlcGxhY2VkIGJ5IFBVU0hTRUNUSU9OX0FTTV9PUC4KKwkoQVNNX09VVFBVVF9QVVNIX1NFQ1RJT04sIFBVU0hTRUNUSU9OX0ZPUk1BVCk6ICBOZXcgbWFjcm8gZGVmaW5pdGlvbnMuCisJKCpfU0VDVElPTik6ICBOZXcgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIGltcG9ydGFudCBzZWN0aW9uIG5hbWUgc3RyaW5ncy4KKwkoQVNNX0RXQVJGXypfU0VDVElPTik6ICBEZWxldGVkIGFsbCBtYWNyb3MgdG8gY2hhbmdlIHRvIHNwZWNpZmljCisJc2VjdGlvbnMgYW5kIHJlcGxhY2VkIHRoZW0gZ2xvYmFsbHkgd2l0aCBjYWxscyB0byB0aGUgbmV3IHBhcmFtZXRlcml6ZWQKKwlBU01fT1VUUFVUX1BVU0hfU0VDVElPTiBtYWNyby4KKworU2F0IE1hciAyOCAxNzoyODoxNyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIE1laXNzbmVyIHZlcnNpb24gIyB0byAxNS4KKwkob3V0cHV0X2Jsb2NrX21vdmUpOiBBZGQgZnVuY3Rpb24gZGVmaW50aW9uLgorCShIQUxGX1BJQ19QVFIsIEhBTEZfUElDX0ZJTklTSCk6IFByb3ZpZGUgZHVtbXkgZGVmaW5pdGlvbnMuCisJKE9QVElNSVpBVElPTl9PUFRJT05TKTogU2V0IGZsYWdfZ251X2xpbmtlciB0byBGQUxTRSwgYW5kCisJZmxhZ19ub19jc2VfZnVuY3Rpb24gdG8gVFJVRS4KKwkoQ0MxUExVU19TUEVDKTogRGVsZXRlIC0tIGl0IGp1c3QgcGFzc2VkIC1mbm8tZ251LWJpbnV0aWxzIHRvCisJY2MxcGx1cy4KKworCSogbWlwcy5jIChibG9ja19tb3ZlIGZ1bmN0aW9uKTogVXNlIG1vdnN0cmlfaW50ZXJuYWwsIGluc3RlYWQgb2YKKwllbWl0dGluZyB0aGUgbW92ZXMgZGlyZWN0bHkuCisJKG91dHB1dF9ibG9ja19tb3ZlKTogTmV3IGZ1bmN0aW9uIHRvIGVtaXQgdGhlIGNvcnJlY3QgY29kZSBmb3IgYmxvY2sKKwltb3ZpbmcgYSBjb25zdGFudCBhbW91bnQgb2YgZGF0YS4KKwkoc2lnaW5mbyk6IENoYW5nZSBvcHRpb25zIHRvIHBzLgorCisJKiBtaXBzLm1kIChtb3ZzdHJzaV9pbnRlcm5hbCk6IE5ldyBibG9jayBtb3ZlIHBhdHRlcm4uCisJKG1vdnNpX3Vsdyk6IEFkZCBhbiBhcHByb3ByaWF0ZSBSRUdfRVFVSVYgcmVnbm90ZS4KKwkobW92c2lfdXN3KTogVHlwZSBhdHRyaWJ1dGUgaXMgc3RvcmUsIG5vdCBsb2FkLgorCisJKiBtaXBzLWdic2QuaCAodG9wbGV2ZWwpOiBJbmNsdWRlIG1pcHMtYnNkLmgsIG5vdCBtaXBzLWdic2QuaC4KKworCSogbWlwcy1ic2QuaCAoTURfU1RBUlRGSUxFX1BSRUZJWCwgTURfRVhFQ19QUkVGSVgpOiBVc2UgZXhwbGljaXQKKwlCU0Q0MyBwcmVmaXhlcy4KKworCSogbWlwcy1zeXN2LmggKE1EX1NUQVJURklMRV9QUkVGSVgsIE1EX0VYRUNfUFJFRklYKTogVXNlIGV4cGxpY2l0CisJU3lzdGVtIFYgcHJlZml4ZXMuCisKKwkqIG1pcHMtc3ZyNC5oIChNRF9TVEFSVEZJTEVfUFJFRklYLCBNRF9FWEVDX1BSRUZJWCk6IFVzZSBleHBsaWNpdAorCVN5c3RlbSBWLjQgcHJlZml4ZXMuCisKKwkqIGRlY3N0YXRuLmggKFRBUkdFVF9NRU1fRlVOQ1RJT05TKTogRGVmaW5lLgorCitTYXQgTWFyIDI4IDE1OjEyOjM5IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogbGliZ2NjMi5jIChlcHJpbnRmKTogTWFrZSBhcmd1bWVudCB0eXBlcyBjb21zaXN0YW50IHdpdGggYXNzZXJ0LmguCisJKF9fYnVpbHRpbl9uZXcsIF9fYnVpbHRpbl92ZWNfbmV3KTogRGVjbGFyZSBhbGwgZXh0ZXJuYWwgZnVuY3Rpb25zLgorCShkZWZhdWx0X25ld19oYW5kbGVyKTogIFVzZSBhIG1hY3JvIGZvciB0aGUgIm1lbW9yeSBleGF1c3RlZCIgbWVzc2FnZS4KKworCSogc3BhcmN2NC5oOiAgRmlsZSBjb21wbGV0ZWx5IHJlcGxhY2VkICh3aXRoIG9uZSB0aGF0IHdvcmtzKS4KKworU2F0IE1hciAyOCAxNTowOTo0NiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChmbGFnX2dudV9saW5rZXIpOiBEZWZhdWx0IHRvIDAgaWYgVVNFX0NPTExFQ1QyLgorCisJKiBpMzg2LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBzdnIzLXNobGliLgorCShUQVJHRVRfU1ZSM19TSExJQik6IE5ldyBtYWNyby4KKwkqIGkzODZ2LmggKEFTTV9PVVRQVVRfTE9DQUwpOiBPdmVycmlkZSBkZWZpbml0aW9uIGhlcmUuCisKKwkqIE1ha2VmaWxlLmluIChnY2MueHRhcik6IFVwZGF0ZSB2ZXJzaW9uIGluIFJFQURNRS4KKworCSogbGliZ2NjMi5jIFtzcGFyY10gKF9fYnVpbHRpbl9zYXZlcmVncyk6IEFkZCBvcHRpb25hbCAucHJvYywKKwkudHlwZSBhbmQgLnNpemUgYXNzZW1ibGVyIGNvbW1hbmRzLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBOZXcgYXJnIFNIT1dfQVJHX1RZUEVTLiAgQWxsIGNhbGxzIGNoYW5nZWQuCisJKGRieG91dF90eXBlX21ldGhvZHMpOiBNb3N0bHkgcmV3cml0dGVuLCB3aXRoIFRpZW1hbm4ncyBoZWxwLgorCisJKiBFbGltaW5hdGUgbGltaXQgb24gYWxpZ25tZW50IHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgZmllbGQuCisJKiB0cmVlLmggKERFQ0xfQUxJR04pOiBVc2UgZnJhbWVfc2l6ZSBzbG90LgorCShzdHJ1Y3QgdHJlZV9kZWNsKTogYGFsaWduJyBzbG90IGRlbGV0ZWQuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBQcmludCBgYWxpZ24nIG9yIGBmcmFtZV9zaXplJywgbm90IGJvdGguIAorCSogZXhwci5jIChnZXRfcG9pbnRlcl9hbGlnbm1lbnQpOiBEb24ndCB1c2UgREVDTF9BTElHTiBvZiBmdW5jdGlvbi4KKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMsIGZpbmlzaF9lbnVtKTogTGlrZXdpc2UuCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSk6IExpa2V3aXNlLgorCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRWxpbWluYXRlIGxpbWl0IG9mIDI1NSBvbiBhbGlnbm1lbnQuCisKKwkqIGNvbGxlY3QyLmM6IERvbid0IGluY2x1ZGUgZ3N0ZGFyZy5oIG9yIGd2YXJhcmdzLmguCisJTWFrZSBlcnJvciBtZXNzYWdlcyBmb2xsb3cgc3RhbmRhcmRzLgorCShlcnJvciwgZmF0YWwsIGZhdGFsX3BlcnJvcik6IERvbid0IHVzZSB2YXJhcmdzLgorCUFjY2VwdCBhcyBtYW55IGFyZ3MgYXMgYW55b25lIHRyaWVzIHRvIHVzZS4KKworCSogY3AtZGVjbDIuYzogR2V0IHJpZCBvZiAtZmdudS1iaW51dGlscy4KKworCSogbnMzMmsuaCAoSU5ESVJFQ1RBQkxFX0FERFJFU1NfUCk6IERlbGV0ZWQuCisJKEdPX0lGX05PTklOREVYRURfQUREUkVTUyk6IERlbGV0ZSBkdXBsbGljYXRlIHRlc3QgZm9yIHJlZytvZmZzZXQuCisJKE1FTV9SRUcpOiBEb24ndCBhY2NlcHQgY29uc3RhbnQgaGVyZS4KKwkoSU5ESVJFQ1RBQkxFXzJfQUREUkVTU19QKTogQWRhcHQgdXNhZ2Ugb2YgTUVNX1JFRy4KKwkoR09fSUZfSU5ERVhJTkcsIEdPX0lGX0lOREVYQUJMRV9BRERSRVNTKTogTmV3IG1hY3Jvcy4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogVXNlIHRoZW0uCisKK1NhdCBNYXIgMjggMjA6NDg6MjAgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcCBhdCB0Y3QuY29tKQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkLCBsYXlvdXRfdW5pb24pOgorCUxpbWl0IGVmZmVjdCBvZiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTIHRvIGFjdHVhbCBiaXRmaWVsZHMuCisJKGxheW91dF9kZWNsKTogRG8gbm90IG92ZXJyaWRlIGEgcGFja2VkIGRlY2wncyBhbGlnbm1lbnQuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IERvbid0IGV4cGVjdCBhIHNpbXBsZQorCWF0dHJpYnV0ZSBsaWtlICJwYWNrZWQiIHRvIGJlIGluIGEgTElTVF9OT0RFLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX3N0cnVjdCk6IElmIGEgZmllbGQgaGFzIHRoZSAicGFja2VkIgorCWF0dHJpYnV0ZSwgZG9uJ3Qgb3ZlcnJpZGUgaXQgd2l0aCB0eXBlJ3Mgbm9ybWFsIGFsaWdubWVudC4KKworU2F0IE1hciAyOCAwNjo1MToxMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoaW5pdGlhbGl6ZV9mb3JfaW5saW5lKTogUmVwbGFjZSBERUNMX0lOQ09NSU5HX1JUTAorCWlmIGl0IGhhcyBhbiBhZGRyZXNzIHNoYXJlZCB3aXRoIERFQ0xfUlRMLCBub3QganVzdCB3aGVuIHRoZSBlbnRpcmUKKwl2YWx1ZSBpcyBzaGFyZWQuCisKKwkqIHJzNjAwMC5jIChpbnB1dF9vcGVyYW5kKTogQ2xlYW4gdXAgYW5kIG1ha2UgY29tbWVudHMgYWdyZWUgd2l0aAorCWNvZGU7IG5vIGNoYW5nZXMgdG8gd2hhdCBpcyBtYXRjaGVkLgorCisJKiBsb29wLmMgKGFkZF9sYWJlbF9ub3Rlcyk6IEhhbmRsZSBvcGVyYW5kcyBvZiB0eXBlICdFJy4KKworCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0EnKTogRml4IHR5cG8uCisKK1NhdCBNYXIgMjggMDE6Mjk6MDYgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl91c2VzX2NvbnN0X3Bvb2wpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIGkzODYuYyAoZnVuY3Rpb25fe3Byb2xvZ3VlLGVwaWxvZ3VlfSwgc2ltcGxlXzM4Nl9lcGlsb2d1ZSk6CisJSWYgdGhlIGNvbnN0YW50IHBvb2wgaXMgdXNlZCwgdGhlIFBJQyByZWcgd2lsbCBiZSB1c2VkLgkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEFkZCBzdXBwb3J0IGZvciBuYW1lZCBwYXR0ZXJuIHN0cmxlbk0uCisJKiBleHByLmggKHN0cmxlbl9vcHRhYik6IE5ldyBkZWNsYXJhdGlvbi4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IEluaXRpYWxpemUgc3RybGVuX29wdGFicy4KKwkqIGkzODYubWQgKHN0cmxlbnNpKTogTmV3IHBhdHRlcm4uCisKK0ZyaSBNYXIgMjcgMTI6MTE6MDMgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGZpc2hwb25kKQorCisJKiBmaXhpbmMuc3ZyNCAoZGJtLmgpOiAgRml4IHVuY29uZGl0aW9uYWwgcmVkZWZpbml0aW9uIG9mIE5VTEwKKworCSogY29uZmlnLnN1YjogIEFkZCBpNDg2IGFzIGEgZGlzdGluY3QgQ1BVIHR5cGUuICBSZWNvZ25pemUgaTQ4NnY0CisJYXMgZGlzdGluY3QgZnJvbSBpMzg2djQuICBDaGFuZ2UgbmNyMzAwMCB0byBpNDg2LgorCSogY29uZmlndXJlOiAgQWRkIGk0ODYtbmNyLXN5c3Y0LgorCSogY29uZmlnL3gtbmNyMzAwMDogIE5ldyBmaWxlLgorCitGcmkgTWFyIDI3IDE4OjQ0OjQ1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAodHdvdmFsX2NvbXBhcmlzb25fcCwgZXZhbF9zdWJzdCk6IE5ldyBmdW5jdGlvbnMuCisJKGZvbGQpOiBJZiBhbiBvcGVyYW5kIG9mIGEgY29tcGFyaXNvbiBpcyBhIENPTVBPVU5EX0VYUFIsIG1vdmUKKwlpdCBvdXRzaWRlIHRoZSBjb21wYXJpc29uLgorCShjYXNlIEdUX0VYUFIsIC4uLik6IFJlcGxhY2Ugb2xkIGNvZGUgdG8gZm9sZCBjb21wYXJpc29ucworCW9mIGNvbXBhcmlzb25zIHdpdGggbmV3IGNvZGUgdXNpbmcgbmV3IGZ1bmN0aW9ucyBhYm92ZS4KKwlXaGVuIGNoYW5naW5nIGNvZGUgb2YgdW5zaWduZWQgY29tcGFyaXNvbnMsIHNldCB2YXJpYWJsZSBDT0RFLgorCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBSZXR1cm4gQkxLbW9kZSBhbmQgLTEgc2l6ZSBmb3IgYQorCXZhcmlhYmxlLXNpemVkIG9iamVjdCBpbnN0ZWFkIG9mIGFib3J0aW5nLgorCShkb19qdW1wLCBjYXNlIENPTVBPTkVOVF9SRUYpOiBJZiBnZXRfaW5uZXJfcmVmZXJlbmNlIHJldHVybnMgYQorCXNpemUgb2YgLTEsIGRvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwuCisJKiBmb2xkLWNvbnN0LmMgKG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlLCBkZWNvZGVfZmllbGRfcmVmZXJlbmNlKToKKwlMaWtld2lzZS4KKworCSogY29tYmluZS5jIChyZWdfYml0ZmllbGRfdGFyZ2V0X3ApOiBSZXBsYWNlIHRlc3Qgd2l0aCBvbmUgdGhhdAorCWNvbXBhcmVzIHRoZSByZWdpc3RlciBudW1iZXIgb2YgWCB3aXRoIHRoYXQgb2YgYSByZWdpc3RlciB3aGljaAorCWlzIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2lnbm1lbnQuCisKKwkqIGxvb3AuaCAoc3RydWN0X2luZHVjdGlvbik6IE5ldyBmaWVsZCBtYXliZV9tdWx0aXBsZS4KKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogVHJhY2sgd2hlbiBjb2RlIG1heSBiZSBleGVjdXRlZCBtb3JlCisJdGhhbiBvbmNlIHBlciBpdGVyYXRpb247IHBhc3MgdG8gcmVjb3JkX2Jpdi4KKwlDYWxsIHVwZGF0ZV9naXZfZGVyaXZlIG9uIGV2ZXJ5IEpVTVBfSU5TTi4KKwkocmVjb3JkX2Jpdik6IENvcHkgbmV3IG1heWJlX211bHRpcGxlIGFyZyB0byBzdHJ1Y3QgaW5kdWN0aW9uLgorCShyZWNvcmRfZ2l2KTogQ2xlYXIgbWF5YmVfbXVsdGlwbGUuCisJKHVwZGF0ZV9naXZfZGVyaXZlKTogSWYgcGFzc2luZyBKVU1QX0lOU04sIGxvb2sgYXQgbWF5YmVfbXVsdGlwbGUKKwlpbiBiaXYgdXBkYXRlLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIE1PRElGWV9FWFBSKTogQWRkIG1pc3NpbmcgY2FsbCB0bworCWRvX3BlbmRpbmdfc3RhY2tfYWRqdXN0LgorCisJKiByczYwMDAuaCAoT0JKRUNUX0ZPUk1BVF9DT0ZGKTogQWRkIGRlZmluaXRpb24uCisKK0ZyaSBNYXIgMjcgMTU6NTg6NDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChjaGVja19mb3JtYXQpOiBJZiBhcmcgd2FudHMgdm9pZCAqLCBhY2NlcHQgYW55IHB0ci4KKworCSogbnMzMmsubWQgKENBTExfTUVNUkVGX0lNUExJQ0lULCBNT1ZEX0ZMT0FUX09LKToKKwlOZXcgcGFyYW1ldGVycyByZXBsYWNlIEdBU19TWU5UQVguCisJKiBwYzUzMi5oIChDQUxMX01FTVJFRl9JTVBMSUNJVCwgTU9WRF9GTE9BVF9PSyk6IERlZmluZSBib3RoLgorCSogc2VxdWVudC5oIChDQUxMX01FTVJFRl9JTVBMSUNJVCk6IERlZmluZWQuCisKKwkqIHNlcXVlbnQuaCAoSU5ERVhfUkFUSEVSX1RIQU5fQkFTRSk6IERlZmluZWQuCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBDaGVjayBpdCBoZXJlLgorCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBUcmVhdCBhbGwgbm9uLWludHMgYXMgc3ltYm9saWMuCisJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZS4gIEFsc28gZml4IHR5cG8sIHVzZSBQVVRfQUJTT0xVVEVfUFJFRklYLAorCWFuZCB0ZXN0IE5PX0FCU09MVVRFX1BSRUZJWF9JRl9TWU1CT0xJQy4KKworCSogc3ZyNC5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOgorCU91dHB1dCBuZXdsaW5lIGFmdGVyIHNlY3Rpb24gb3AuCisJKiBpODYwdjMuaCAoRFRPUlNfU0VDVElPTl9BU01fT1AsIENUT1JTX1NFQ1RJT05fQVNNX09QKToKKwlEZWxldGUgbmV3bGluZXMuCisKKwkqIE1ha2VmaWxlLmluIChjbGVhbik6IERvbid0IGRlbGV0ZSBzdGFnZSouCisJKGRpc3RjbGVhbik6IERvIGl0IGhlcmUuCisJKGV4dHJhY2xlYW4pOiBEZWxldGUgY29uZmlnL3BhdGNoKi4KKworCSogTWFrZWZpbGUuaW4gKFNZU0NBTExTLmMpOiBUYXJnZXQgZGVsZXRlZC4KKwkoU1lTQ0FMTFMuYy5YKTogQ3JlYXRlIFNZU0NBTExTLmMgYW5kIHVzZSBpdCBpbiBvbmUgcnVsZS4gIERlbGV0ZSBhbHNvLgorCisJKiBNYWtlZmlsZS5pbiAobGQpOiBOZXcgdGFyZ2V0LgorCSogdC0qIChsZCwgY29sbGVjdDIqKTogVGFyZ2V0cyBkZWxldGVkLgorCShFWFRSQV9QUk9HUkFNUyk6IE1vdmVkIGxkIGhlcmUgaWYgaXQgd2FzIGluIEVYVFJBX1BBU1NFUy4KKwkoRVhUUkFfUEFTU0VTKTogRGVsZXRlIGxkLgorCisJKiBnY2MuYywgY2NjcC5jOiBEb24ndCBpbmNsdWRlIHN5cy9maWxlLmguCisKKwkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogRmxvYXRzIG11c3QgbWF0Y2ggYml0IGZvciBiaXQuCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IFB1dCBiYWNrIC11Ki4KKworRnJpIE1hciAyNyAxMTozMzo0NiAxOTkyICBTaW1vbiBKLiBHZXJyYXR5ICAoc2pnQG1lbGIuYnVsbC5vei5hdSkKKworCSogY29uZmlndXJlIChtNjhrLWJ1bGwtc3lzdiopOiBBZGRlZCBjb25maWcgZm9yIEJ1bGwgRFBYLzIKKwkqIGRweDIuaCwgZHB4MmcuaDogTmV3IGZpbGVzLgorCSogeC1kcHgyMjAwLCB4LWRweDIzMDAsIHQtZHB4MjogTmV3IGZpbGVzLgorCSogZ3N0ZGRlZi5oOiBBZGRlZCBfU0laRVRfIHRvIHRoZSBsaXN0IG9mIHByb3RlY3Rpb24gZm9yIHNpemVfdAorCitGcmkgTWFyIDI3IDE0OjQ3OjQ3IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IC1XY29udmVyc2lvbiB3cm9uZ2x5IHdhcm5lZCB3aGVuCisJcGFzc2luZyBlbnVtcywgYW5kIGRpZG4ndCB3YXJuIGFib3V0IGludCBwcmVjaXNpb24gbWlzbWF0Y2hlcy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogSWYgSUVFRSwgMC14IGlzIG5vdCB4LgorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogZmFicygtMC4wKSBpcyAwLjAsIG5vdCAtMC4wLgorCSogZm9sZC1jb25zdC5jOiBSZXBsYWNlIHRhcmdldF9taW51c196ZXJvIHdpdGggdGFyZ2V0X25lZ2F0aXZlLgorCShmb2xkX2NvbnZlcnQpOiBXYXJuIHdoZW4gY29udmVydGluZyBOYU4gY29uc3RhbnRzIHRvIGludGVnZXIuCisJKGZvbGQpOiBmYWJzKC0wLjApIGlzIDAuMCwgbm90IC0wLjAuICAwLXggbWF5IG5vdCBlcXVhbCAteC4KKwlEbyBub3Qgb3B0aW1pemUgWCsrID09IEMgdG8gKytYID09IEMrMSBpZiBDIGlzIGZsb2F0aW5nIHBvaW50LAorCWJlY2F1c2UgaXQgcnVucyBhZm91bCBvZiByb3VuZGluZyBlcnJvci4KKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9ORUdBVElWRSk6IEFkZC4KKworRnJpIE1hciAyNyAwOToxOToxMSAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBDaGVjayB0aGUgc2l6ZSByZXF1aXJlZCBmb3IgYSB6ZXJvCisJY29uc3RhbnQuCisKKwkqIHZhcmFzbS5jIChjb25zdF9oYXNoLCBjb21wYXJlX2NvbnN0YW50XzEsIHJlY29yZF9jb25zdGFudF8xKToKKwlGb3IgY29uc3RydWN0b3Igb2YgYW4gYXJyYXksIGluY2x1ZGUgdGhlIHNpemUgb2YgdGhlIGFycmF5IGluIGJ5dGVzLgorCitGcmkgTWFyIDI3IDA5OjA5OjUzIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiB0LWRlY3N0YXRuIChBTEwpOiBSZW1vdmUgdmFyaWFibGUuCisJKiB0LWRlY3Jvc2UgKEFMTCk6IERpdHRvLgorCSogdC1pMzg2cm9zZSAoQUxMKTogRGl0dG8uCisJKiB0LWVuY3Jvc2UgKEFMTCk6IERpdHRvLgorCitGcmkgTWFyIDI3IDE3OjUxOjMyIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogcnM2MDAwLmMgKGZpcnN0X3JlZ190b19zYXZlKTogV2hlbiBwcm9maWxpbmcsIHNhdmUgc3BhY2UgZm9yIHRoZQorCWFyZ3VtZW50IHJlZ2lzdGVycywgd2hpY2ggbmVlZCB0byBiZSBzYXZlZCBhcm91bmQgdGhlIG1jb3VudCBjYWxsLgorCShvdXRwdXRfcHJvbG9nKTogTWFyayB0aGUgbGluayByZWdpc3RlciBhcyBsaXZlIHdoZW4gcHJvZmlsaW5nLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBOZXcgZnVuY3Rpb24uICBPdXRwdXQgY29kZSB0byBjYWxsCisJbWNvdW50LgorCSogcnM2MDAwLmggKExJQl9TUEVDKTogUmVwbGFjZSBpbmNvcnJlY3QgZGVmaW5pdGlvbi4gIEFkZAorCS1ML2xpYi9wcm9maWxlZCBhbmQgLUwvdXNyL2xpYi9wcm9maWxlZCB3aGVuIHByb2ZpbGluZywgLWxnIHdoZW4KKwlkZWJ1Z2dpbmcsIGFuZCAtbGMgYWx3YXlzLgorCShPVkVSUklERV9PUFRJT05TKTogTm8gbG9uZ2VyIHplcm8gcHJvZmlsZV9mbGFnLgorCShGVU5DVElPTl9QUk9GSUxFUik6IENhbGwgb3V0cHV0X2Z1bmN0aW9uX3Byb2ZpbGVyLgorCisJKiAuZ2RiaW5pdCAoY29tcGxhaW50cyk6IFNldCB0byAyMC4KKwkocGJzKTogTmV3IGNvbW1hbmQgdG8gY2FsbCB0aGUgY2MxcGx1cyBwcmludF9iaW5kaW5nX3N0YWNrIGZ1bmN0aW9uLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IERlbGV0ZSBvYnNvbGV0ZSByZWZlcmVuY2VzIHRvIGlzX2J1aWx0aW5fbmV3LgorCisJKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBBZGQgZGVwZW5kZW5jZSBvbiB2ZXJzaW9uLmMuCisKK1RodSBNYXIgMjYgMTk6MjE6MDAgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChmaXh1bnNfdHJ1bmNNTjIsZml4X3RydW5jTWRmMik6IE1ha2UgYSBjb3B5IG9mIHRoZSBpbnB1dAorCW9wZXJhbmQgYW5kIGNsb2JiZXIgdGhhdCwgcmF0aGVyIHRoYW4gY2xvYmJlcmluZyB0aGUgb3BlcmFuZCBpdHNlbGYuCisKK1RodSBNYXIgMjYgMTg6MDY6MzIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwcm90b2l6ZS5jIChzaG9ydHBhdGgpOiBBZGQgZWFybHkgY2hlY2sgb2Ygc2l6ZSBvZiBzaG9ydG5hbWUuCisKKwkqIGV4cHIuYyAoZG9fanVtcCk6IEFkanVzdCBzdGFjayBhZnRlciBhbnkgY29kZSB0aGF0IG1pZ2h0IGJlIHNraXBwZWQuCisKK1RodSBNYXIgMjYgMDY6Mzc6MzUgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuYyAodG9wbGV2ZWwpOiBJZiBOT19TVEFCX0ggaXMgZGVmaW5lZCwgaW5jbHVkZSBnc3RhYi5oCisJaW5zdGVhZCBvZiBzdGFiLmguCisKK1RodSBNYXIgMjYgMDI6MjE6NTAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRik6IEFkZCBFWFRSQV9QUk9HUkFNUy4KKworCSogY29uZmlndXJlOiBSZW9yZGVyIG1pcHMgYWx0ZXJuYXRpdmVzOyBwdXQgbWlwcy1taXBzLSogYXQgZW5kLgorCisJKiBzcGFyYy5oIChGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKTogMCBpZiBmcmFtZSBpcyB0b28gYmlnLgorCSogc3BhcmMuYyAoY29tcHV0ZV9sYXN0X2ZyYW1lX29mZnNldCk6IE5ldyBmdW5jdGlvbi4KKworV2VkIE1hciAyNSAyMToxNzozNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5hdHRydGFiLmMgKGNoZWNrX2F0dHJfdGVzdCk6IFVzZSBYU1RSIGluc3RlYWQgb2YgWEVYUCBpbiBvbmUKKwlwbGFjZS4KKworCSogZ2VuZXh0cmFjdC5jIChtYXJrX29wZXJhbmRfc2Vlbik6IENhbGwgeHJlYWxsb2MgcHJvcGVybHkuCisKK1dlZCBNYXIgMjUgMTc6MDU6NTYgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IHpldnMuc2ljcy5zZSkKKworCSogaHA4MDAuYyAoc3Jjc2lfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGhwODAwLm1kIChtdWxzaSwgZGl2c2ksIHVkaXZzaSwgbW9kc2ksIHVtb2RzaSk6IFVzZSBzcmNzaV9vcGVyYW5kCisJZm9yIGlucHV0cy4KKwkobXVsc2kpOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGZvciBvdXRwdXQuCisJKG9uZV9jbXBsc2kyKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQgZm9yIG91dHB1dC4KKworV2VkIE1hciAyNSAxNTo1MDoxMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsubWQgKGZzZ2xkaXYgcGF0dGVybik6IElmIEZTR0xESVZfVVNFX1MsIG9wY29kZSBoYXMgLnMsIG5vdCAueC4KKwkqIGFtaXguaCAoRlNHTERJVl9VU0VfUyk6IERlZmluZWQuCisKKwkqIHhtLXJzNjAwMC5oIChSRUFMX05NX0ZJTEVfTkFNRSk6IERlZmluZWQuCisKKwkqIHgtaTM4NnNjbyAoQ0NMSUJGTEFHUyk6IERlZmluZSBhcyBlbXB0eS4KKworV2VkIE1hciAyNSAxNjo1Mjo1MyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogY29sbGVjdDIuYyAoT1NGL3Jvc2Ugc2Nhbl9wcm9nX2ZpbGUpOiBJZiB3ZSBhcmUgYnVpbGRpbmcgYQorCXByb2dyYW0gaW5zdGVhZCBvZiBhIHNoYXJlZCBsaWJyYXJ5LCBkb24ndCBjcmVhdGUgYW4gaW5pdGlhbGl6ZXIKKwlmdW5jdGlvbiBlbnRyeS4KKworVHVlIE1hciAyNCAwNDowMDowMCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi4xIHJlbGVhc2VkLgorCisJKiB4Y29mZm91dC5oOiBSZW5hbWVkIGZyb20geGNvZmYuaC4KKwkqIGRieG91dC5jLCBmaW5hbC5jLCB0b3BsZXYuYywgdmFyYXNtLmMsIHhjb2Zmb3V0LmM6IFVzZSBuZXcgbmFtZS4KKwkqIE1ha2VmaWxlLmluOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IERvbid0IGNoZWNrIERFQ0xfSUdOT1JFRF9QLgorCisJKiB0LXJzNjAwMDogQ29tcGxldGUgcmVwbGFjZW1lbnQsIHRvIGJ1aWxkIGNvbGxlY3QyIHByb3Blcmx5LgorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBEZWxldGUgc29ydGVkIGluZGljZXMgdGhhdCBhcmVuJ3QgdXNlZC4KKwkoZXh0cmFjbGVhbik6IERlbGV0ZSBwYXRjaCBvdXRwdXRzLCAqLmQsICouWiwgKi50YXIuCisKKwkqIE1ha2VmaWxlLmRvcyAoZ2V0cHdkLm8pOiBOZXcgdGFyZ2V0LgorCShPQkpTLCBwcm90b2l6ZSwgdW5wcm90b2l6ZSk6IEFkZCBnZXRwd2Quby4KKwkoU1lTQ0FMTFMuYywgU1lTQ0FMTFMuYy5YKTogQ29weSBmcm9tIE1ha2VmaWxlLmluLgorCitUdWUgTWFyIDI0IDA2OjI2OjI2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKyAgICAgICAgKiBjc2UuYyAoY3NlX2luc24pOiBXaGVuIGRlbGV0aW5nIGRlYWQgY29kZSBhZnRlcgorICAgICAgICBtYWtpbmcgdW5jb25kaXRpb25hbCBicmFuY2gsIGNoZWNrIGZvciBlbmQgb2YgY2hhaW4uCisKKwkqIHNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBBZGQgY29kZSBmb3IgUkVHX0xBQkVMIGNhc2UuCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogRG9uJ3QgbW9kaWZ5IGEgTUVNCisJd2l0aG91dCBjb3B5aW5nIGl0IHVubGVzcyB0aGUgbW9kaWZpZWQgTUVNIGlzIHZhbGlkLgorCisJKiBjc2UuYyAocnR4X2Nvc3QpOiBBc3NpZ24gQVNNX09QRVJBTkRTIGEgaGlnaCBjb3N0LgorCitUdWUgTWFyIDI0IDA1OjQ4OjI1IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLSo6IERpc2FibGVkIDIyIE1hcmNoIGNoYW5nZXMgcmVsYXRpbmcgdG8gZGJ4b3V0LmM7IHRoZSBwcm9ibGVtCisJd2lsbCBiZSBmaXhlZCBwcm9wZXJseSwgd2l0aCBtb3JlIGV4dGVuc2l2ZSByZXdvcmtpbmcgb2YgdGhlIEMrKworCWZyb250IGVuZCwgbGF0ZXIuICBUaGlzIGZpeCB3YXMgYnVnZ3kuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGVfbWV0aG9kcyk6IFJldmVydGVkIDIyIE1hcmNoIGNoYW5nZXM7IGlmIGEKKwl0ZW1wbGF0ZSBjbGFzcyBpcyBwYXNzZWQsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGFuZCBlbWl0IG5vIGluZm8KKwlhYm91dCBtZXRob2RzLgorCitNb24gTWFyIDIzIDE0OjE4OjMwIDE5OTIgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBtYWtlLWNjMS5jb206IEFkZCBnZXRwd2QuYy4KKworTW9uIE1hciAyMyAxMjo1MzowMiAxOTkyICBKeXJraSBLdW9wcGFsYSAgKGprcEBiYXRtYW4uY3MuaHV0LmZpKQorCisJKiBwYzUzMi1taW4uaCAoSEFWRV9BVEVYSVQpOiBEZWZpbmVkLgorCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kKSBbUENfUkVMQVRJVkVdOgorCUFsd2F5cyB1c2Ugb3V0cHV0X2FkZHJlc3MgZm9yIE1FTS4KKworCSogcGM1MzIuaCAoQkFTRV9SRUdfTkVFREVEKTogRGVmaW5lZC4KKworTW9uIE1hciAyMyAwNzoyODoxNCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQ29ycmVjdCBlcnJvciBpbiBsYXN0IGNoYW5nZTsgZG9uJ3QKKwlwYXNzIFNUUklDVF9MT1dfUEFSVCBvciBaRVJPX0VYVFJBQ1QgdG8gcmVnX292ZXJsYXBfbWVudGlvbmVkX3AuCisKKwkqIHN1bjMuaCAoQ1BQX1NQRUMpOiBEZWxldGUgZXh0cmEgYnJhY2UuCisKK01vbiBNYXIgMjMgMDI6NDM6NTYgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1kZWNsLmMgKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFRha2UgY2FyZSBvZiBDX0NfRC4KKworU3VuIE1hciAyMiAxNzoyNDowOSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBweXIuaDogUmVtb3ZlIFRBUkdFVF9JTkRFWC4gIFVwZGF0ZSBvdGhlciBUQVJHRVQgc3dpdGNoZXMuCisJRml4IHNldmVyYWwgY29tbWVudHMuCisJKFJFR05PX09LX0ZPUl9CQVNFX1ApOiBBbGxvdyByZWcgMC4KKwkoUkVHTk9fT0tfRk9SX0lOREVYX1ApOiBSZWZvcm11bGF0ZS4KKwkoUkVHX09LX0ZPUl9JTkRFWF9QKTogRGlzYWxsb3cgcmVnIDAuCisKK1N1biBNYXIgMjIgMTU6MTA6NDkgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMtdGZpbGUuYyAobWFya19zdGFicyk6IE1ha2UgZnVuY3Rpb24gZGVmaW50aW9uIGFncmVlIHdpdGgKKwlwcm90b3R5cGUuCisKKwkqIG1pcHMubWQgKGNwdSwgYnJhbmNoX2xpa2VseSBhdHRyaWJ1dGVzKTogTWFrZSB0aGVzZSBhdHRyaWJ1dGVzCisJY29uc3QuCisJKGFsbCBmdW5jdGlvbmFsIHVuaXRzKTogUmVzdG9yZSBmdW5jdGlvbmFsIHVuaXRzIHRoYXQgbG9vayBhdCB0aGUKKwktbWNwdT0gc3dpdGNoIGZvciBzY2hlZHVsaW5nIG5vdyB0aGF0IGdlbmF0dHJ0YWIgdXNlcyBsZXNzIG1lbW9yeS4KKworU3VuIE1hciAyMiAxMzo1Nzo1MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOgorCU9ubHkgZXhwbGljaXQgMCBjb252ZXJ0cyB0byBwb2ludGVyLgorCisJKiBNYWtlZmlsZS5pbiAoZG9jKTogRG9uJ3QgZGVwZW5kIG9uIGdwbHVzLmluZm8uCisJKGdwbHVzLmluZm8pOiBUYXJnZXQgZGVsZXRlZC4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBDYWxsIGJ1aWxkX3R5cGVfY29weSB3aXRoIGp1c3Qgb25lIGFyZy4KKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogVXNlIGVudGlyZSBmaWxlbmFtZSB3aGVuIGNoZWNraW5nIGZvciByZXBlYXQuCisJVXNlIGxvb2t1cF9pbmNsdWRlLgorCShsb29rdXBfaW5jbHVkZSk6IE5ldyBmdW5jdGlvbi4KKworCSogcHJvdG9pemUuYyAoZmluZF9leHRlcm5fZGVmKTogU3RvcmUgPz8/IG9uZSBjaGFyIGF0IGEgdGltZS4KKworCSogc3BhcmMuaCAoQVNNX09VVFBVVF9GTE9BVCk6IEZpeCB0eXBvLgorCisJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IFJlamVjdCBOYU5zIGFuZCBpbmZpbml0aWVzLgorCisJKiB2YXJhc20uYyAoaW1tZWRfcmVhbF9jb25zdCk6IERpc3Rpbmd1aXNoIG1pbnVzIHplcm8gZnJvbSB6ZXJvLgorCisJKiBzcGFyYy5oIChBU01fT1VUUFVUX0RPVUJMRSwgQVNNX09VVFBVVF9GTE9BVCk6CisJVXNlIGBpbmYnIGZvciBpbmZpbml0aWVzLiAgVXNlIGhleCBmb3IgbWludXMtemVyby4KKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX3NlbGVjdG9yX3RyYW5zbGF0aW9uX3RhYmxlKToKKwlEb24ndCBtYWtlIGEgZHVwbGljYXRlIGRlY2wgaGVyZSBmb3IgX09CSkNfU0VMRUNUT1JfUkVGRVJFTkNFUy4KKwlKdXN0IGNhbGwgZmluaXNoX2RlY2wgdG8gc3RvcmUgdGhlIGluaXRpYWwgdmFsdWUuCisJQ2FsbCBwdXNoX29ic3RhY2tfbm9jaGFuZ2UgdG8gYmFsYW5jZSB3aXRoIGZpbmlzaF9kZWNsLgorCVVzZSBzZWxlY3Rvcl90eXBlIGZvciBkZWNsYXJpbmcgaW5kaXZpZHVhbCBzZWxlY3RvciBuYW1lcy4KKworU3VuIE1hciAyMiAxMzoxMTozMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHVwZGF0ZV9naXZfZGVyaXZlKTogQ29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSB3aGVyZQorCW1vcmUgdGhhbiBvbmUgYml2IHVwZGF0ZSBvY2N1cnMgYWZ0ZXIgYSBnaXYgaXMgZGVmaW5lZC4KKworCSogY3NlLmMgKHJlaGFzaF91c2luZ19yZWcpOiBBZGQgbWlzc2luZyBhcmcgdG8gY2FsbCB0byBleHBfZXF1aXZfcC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0X2FkZCk6IEFkZCBtaXNzaW5nIGFyZyB0byBjYWxsIHRvIHR5cGVfZm9yX21vZGUuCisKKwkqIHJlb3JnLmMgKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBJbiB0aGUgY2FzZSB3aGVyZSBoYXZlIGEgcmVnLXJlZworCWNvcHkgYW5kIHdpbGwgc3Vic3RpdHV0ZSBvdXIgZGVzdGluYXRpb24gZm9yIG91ciBzb3VyY2UgaW4gdGhlCisJZm9sbG93aW5nIGluc24sIGNvcnJlY3RseSBjaGVjayBmb3IgaXQgbW9kaWZ5aW5nIG91ciBkZXN0aW5hdGlvbi4KKwkKK1N1biBNYXIgMjIgMDk6MjA6MTYgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiBEb24ndCBjb21wbGFpbiBhYm91dCB0YWtpbmcKKwl0aGUgYGBhZGRyZXNzJycgb2YgYSBib3VuZCBzdGF0aWMgbWV0aG9kIG9yIG1lbWJlci4KKworCSogY3AtaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBGaXggYnVnIGluIGhhbmRsaW5nIG9mIHN0YXRpYworCW1lbWJlcnMgYW5kIG1lbWJlciBmdW5jdGlvbnMuCisKKwkqIGNwLWRlY2wyLmMgKGZpbmlzaF9maWxlKTogSWYgQ1VSUkVOVF9DTEFTU19UWVBFIGlzIG5vbi1OVUxMIG9uCisJZW50cnkgdG8gdGhpcyBmdW5jdGlvbiwgcHVudC4KKworCSogY3AtcGFyc2UueSAodGVtcGxhdGVfcGFybSk6IFVzZSBDTEFTU19UWVBFX05PREUgaW5zdGVhZCBvZgorCUNMQVNTX1RZUEUgdmFsdWUuCisKKwkqIGNwLWN2dC5jIChidWlsZF90eXBlX2NvbnZlcnNpb24pOiBBZGQgYW5vdGhlciBhZGQtaG9jIHJ1bGUgdG8gZmluZAorCXVuc2lnbmVkLT5pbnQgY29udmVyc2lvbiAoaWYgY29udmVyc2lvbiB0byBsb25nIGRvZXMgbm90IGV4aXN0KS4KKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBEb24ndCBjYWxsIGBhcnJheV90eXBlX25lbHRzJworCWlmIHRoZSBUWVBFX0RPTUFJTiBvZiBhbiBhcnJheSB0eXBlIGlzIE5VTExfVFJFRS4KKworCSogY3AtaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogU2V0IHVwIGFuZCB1c2UgREVDTCBldmVuIGluIGNhc2UKKwl3aGVyZSBOQU1FIHJlc29sdmVzIHRvIGEgbWV0aG9kLgorCisJKiBjcC1jYWxsLmMgKGlkZWFsX2NhbmRpZGF0ZSk6IEhhbGYgb2YgSmFuIDI4IGNoYW5nZSB3YXMgbWlzc2luZy4KKwlOb3cgUEFSTVMgYXJlIG5vdCBjb252ZXJ0ZWQgaW4gcGxhY2UgaWYgQkFTRVRZUEUgaXMgTlVMTC4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBEb24ndCByZXR1cm4gYSBUWVBFX0RFQ0wuCisKKwkqIGNwLXR5cGUyLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IElmIENVUlJFTlRfRlVOQ1RJT05fREVDTCBpcworCU5VTEwsIGRvbid0IHdyYXAgRVhQUl9BU19DVE9SIGluIGEgTkVXX0VYUFIuICBUaGlzIG1ha2UgaXQgcG9zc2libGUKKwl0byBwYXJzZSBkZWZhdWx0IGluaXRpYWxpemVycyB0aGF0IGludm9sdmUgY29uc3RydWN0b3IgY2FsbHMuCisJKiBjcC10eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBIYW5kbGUgdGhpcyBjaGFuZ2UuCisJKiBjcC1tZXRob2QuYyAoZHVtcF9pbml0KTogR3JvayBJTkRJUkVDVF9SRUZzIHRoYXQgaGF2ZQorCVRSRUVfSEFTX0NPTlNUUlVDVE9SIHNldC4KKworCSogY3AtZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IERvbid0IHVzZSB0aGUKKwlERUNMX0FTU0VNQkxFUl9OQU1FIGZvciBHTE9CIGFzIHRoZSBUUkVFX1BVUlBPU0Ugb2YgdGhlIG5ldyBHTE9CLgorCVVzZSBPUklHX05BTUUgaW5zdGVhZC4KKworCSogY3AtZGVjbC5jIChncm9rdmFyZGVjbCk6IElmIEZJRUxEIGhhcyBpbmNvbXBsZXRlIHR5cGUsIGNvbXBsZXRlIGl0CisJd2l0aCBUWVBFLgorCisJKiBjcC1kZWNsMi5jIChmbGFnX3RoaXNfaXNfdmFyaWFibGUpOiBEZWZpbmUgdGhlIHZhbHVlIC0yIHRvIG1lYW4gYW4KKwlvYmplY3Qgb2Yga25vd24gdHlwZSBpcyBiZWluZyBjb25zdHJ1Y3RlZC4KKwkqIGNwLWRlY2wuYyAocmVzb2x2ZXNfdG9fZml4ZWRfdHlwZV9wKTogVGVzdCBGTEFHX1RISVNfSVNfVkFSSUFCTEUKKwlmb3IgdGhlIHZhbHVlIC0yIGluc3RlYWQgb2YgdGVzdGluZyBERUNMX0NPTlNUUlVDVE9SX1AgaW4gY2FzZSB3ZQorCWFyZSBsb29raW5nIGF0IGBjdXJyZW50X2NsYXNzX2RlY2wnLgorCSogY3Atc2VhcmNoLmMgKGluaXRfdmJhc2VfcG9pbnRlcnMpOiBTZXQgRkxBR19USElTX0lTX1ZBUklBQkxFIHRvIC0yCisJaW5zdGVhZCBvZiAwLgorCShidWlsZF92YmFzZV92dGFibGVzX2luaXQpOiBEaXR0by4KKwkqIGNwLSouYzogQWxsIHRlc3RzIG9mIEZMQUdfVEhJU19JU19WQVJJQUJMRSBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhlCisJbmV3IHNlbWFudGljcy4KKworCSogY3AtdHlwZWNrLmMgKGNvbXB0eXBlcyk6IERvbid0IHVzZSBJU19BR0dSX1RZUEVfMjsgdGVzdCBleHBsaWNpdGx5CisJdGhhdCBib3RoIGFyZSBSRUNPUkRfVFlQRS4KKwkoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IERpdHRvLgorCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogRGl0dG8uCisJKiBjcC1jdnQuYyAoY29udmVydF90b19wb2ludGVyKTogRGl0dG8uCisJKGNvbnZlcnRfdG9fcG9pbnRlcl9mb3JjZSk6IERpdHRvLgorCSogY3AtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IERpdHRvLgorCisJKiBjcC1zZWFyY2guYyAoZ2V0X2ZpcnN0X21hdGNoaW5nX3ZpcnR1YWwpOiBGaXggdHlwby4KKworCSogY3AtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogV2hlbiB3YXJuaW5nIGFib3V0IGNlcnRhaW4KKwlpbmhlcml0YW5jZSByZWxhdGlvbnNoaXBzLCBvbmx5IHByaW50ICJ2aXJ0dWFsIiB3aGVuIHRoZQorCWluaGVyaXRhbmNlIGlzIHZpcnR1YWwuCisKK1N1biBNYXIgMjIgMDE6Mjg6NDEgMTk5MiAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCisKKwlGaXggZGJ4IGluZm8gZm9yIG1ldGhvZHMgb2YgdGVtcGxhdGUgY2xhc3NlczoKKwkqIGNwLWRlY2wuYyAobWFrZV90eXBlX2RlY2wpOiBOZXcgZnVuY3Rpb24uICBDcmVhdGVzIGEgVFlQRV9ERUNMCisJbm9kZSBhbmQgYXNzaWducyBhcyBpdHMgREVDTF9BU1NFTUJMRVJfTkFNRSB0aGUgZW5jb2RlZCBmb3JtIG9mIHRoZQorCXR5cGUgbmFtZSBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gYXNzZW1ibGVyIG91dHB1dC4gIEFsbCBjYWxscyB0bworCWJ1aWxkX2RlY2woVFlQRV9ERUNMLC4uLikgY2hhbmdlZCB0byBjYWxsIHRoaXMuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGVfbWV0aG9kcyk6IEluc3RlYWQgb2Ygc2tpcHBpbmcgZGlnaXRzIGFuZAorCWFzc3VtaW5nIHRoZSBodW1hbi1yZWFkYWJsZSB0eXBlIG5hbWUgZm9sbG93cyBpbiB0aGUgYXNzZW1ibGVyIG5hbWVzCisJZm9yIG1ldGhvZHMsIHVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIG9mIHRoZSB0eXBlLgorCUhhbmRsZSB0aGUgc3BlY2lhbCBERUNMX05BTUUgdGhhdCBpcyBtYWRlIGZvciB0ZW1wbGF0ZXMuCisJKiBjcC1sZXguYyAoYnVpbGRfbGFuZ19maWVsZF9kZWNsKTogU2V0IERFQ0xfQVNTRU1CTEVSX05BTUUKKwljb3JyZWN0bHkgaWYgbmV3IGRlY2wgaXMgYSBUWVBFX0RFQ0wuCisJKGJ1aWxkX2xhbmdfZGVjbCk6IERpdHRvLgorCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIG9ubHkgZm9yCisJRlVOQ1RJT05fREVDTCBhbmQgVkFSX0RFQ0wgbm9kZXM7IGFsbCBvdGhlcnMgdXNlIERFQ0xfTkFNRS4KKwkqIGNwLXRyZWUuaCAobWFrZV90eXBlX2RlY2wpOiBEZWNsYXJlIGl0LgorCisJKiBjcC1wdC5jIChvdmVybG9hZF90ZW1wbGF0ZV9uYW1lLCB1bmRvX3RlbXBsYXRlX25hbWVfb3ZlcmxvYWQpOgorCVJldmVydCA0IE1hcmNoIGNoYW5nZS4KKworCSogY3AtZGVjbDIuYzogTm8gbG9uZ2VyIGRlZmluZSBORVdfT1ZFUkxPQURfU0NIRU1FLgorCShncm9rZmllbGQpOiBVc2UgbmV3IGVuY29kaW5nIHNjaGVtZSBhbHdheXMuCisKKwkqIGNwLXB0LmMgKG92ZXJsb2FkX3RlbXBsYXRlX25hbWUpOiBEZWxldGVkIGV4dHJhIGFzc2lnbm1lbnQgdG8KKwlJREVOVElGSUVSX0xPQ0FMX1ZBTFVFIHNsb3QuCisKKwkqIGNwLW1ldGhvZC5jIChkdW1wX2FnZ3JfdHlwZSk6IFVzZSBERUNMX0NPTlRFWFQgcmF0aGVyIHRoYW4KKwlERUNMX0NMQVNTX0NPTlRFWFQuCisKKwkqIGNwLXB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTW92ZSBzb21lIGNvbW1vbiBjb2RlIGZyb20KKwl0d28gYnJhbmNoZXMgdG8gYmVmb3JlIGJyYW5jaCBwb2ludC4KKworCSogY3AtbWV0aG9kLmMgKGR1bXBfYWdncl90eXBlKTogRG9uJ3QgZGlzY2FyZCBsYXN0IGNoYXJhY3RlciBvZgorCWNvbnRleHQgc3RyaW5nOyBpdCdzIG5vdCB3aGl0ZXNwYWNlLgorCitTdW4gTWFyIDIyIDE1OjU4OjQ4IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oOiBBZGQgbW9yZSBlbnVtLT5pbnQgY2FzdHMgbmVlZGVkIGJ5IHNvbWUgY29tcGlsZXJzLgorCitTdW4gTWFyIDIyIDIwOjQwOjI1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogSGFuZGxlIHByZWluY3JlbWVudCBhbmQKKwlwcmVkZWNyZW1lbnQgYXMgdmFsaWQgbHZhbHMuCisKKwkqIGdwbHVzLmdwZXJmOiBGaW5pc2ggb2ZmIGNoYW5naW5nIEFTTSB0byBBU01fS0VZV09SRC4KKwkqIGNwLWhhc2guaDogUmVidWlsdC4KKworU2F0IE1hciAyMSAxNTo0MzowNCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IERvbid0IHdhcm4gaWYgY29udmVydCBleHBsaWNpdCAwIHRvIHB0ci4KKworCSogbG9jYWwtYWxsb2MuYyAod2lwZV9kZWFkX3JlZyk6IElmIGluc24gaGFzIG11bHRpcGxlIHNldHMgYW5kCisJdGhlIHJlZyBhcHBlYXJzIGluIGEgZGVzdGluYXRpb24sIGV4dGVuZCBsaWZlIHRvIGVuZCBvZiBpbnNuLgorCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9jb25mbGljdHMpOiBBbmFsb2dvdXMgY2hhbmdlLgorCShtYXJrX3JlZ19jb25mbGljdHMpOiBOZXcgZnVuY3Rpb24uCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogSWYgSTIgaGFzIG11bHRpcGxlIGRlc3RzLCBtYWtlIHN1cmUKKwl3ZSBkb24ndCBjaGFuZ2Ugb25lIG9mIHRoZW0gdG8gb3ZlcmxhcCBhbnl0aGluZyB1c2VkIHdpdGhpbiBhbm90aGVyLgorCisJKiBjb25maWd1cmUgKHB5cmFtaWQpOiBDb21tZW50ZWQgb3V0LgorCisJKiB0b3BsZXYuYyAobWFpbik6IEhhbmRsZSAtZ2VuLWF1eC1pbmZvLCB3aXRoIGFyZ3VtZW50LgorCShjb21waWxlX2ZpbGUpOiBBc3N1bWUgYXV4X2luZm9fZmlsZV9uYW1lIGFscmVhZHkgY29tcHV0ZWQuCisJRG9uJ3QgbWFrZSBpdCBsb2NhbCBoZXJlLgorCSogcHJvdG9pemUuYyAobXVuZ2VfY29tcGlsZV9wYXJhbXMpOiBQcm9kdWNlIC1hdXgtaW5mby4KKwlTZXQgYXV4X2luZm9fZmlsZV9uYW1lX2luZGV4LgorCShnZW5fYXV4X2luZm9fZmlsZSk6IFByb2R1Y2UgYW5kIHN0b3JlIHRoZSBhdXgtaW5mbyBmaWxlIG5hbWUuCisJKGlucHV0X2ZpbGVfbmFtZV9pbmRleCk6IFJlbmFtZWQgZnJvbSBmaWxlbmFtZV9pbmRleC4KKwkoYXV4X2luZm9fZmlsZV9uYW1lX2luZGV4KTogTmV3IHZhci4KKwkqIE1ha2VmaWxlLmluIChTWVNDQUxMUy5jLlgpOiBVc2UgLWF1eC1pbmZvLgorCSogZ2NjLmMsIGhwODAwLmgsIG5leHQuaCwgc3BhcmMuaCwgc3VuMi5oLCBzdW4zLmgsIHN2cjQuaDoKKwkoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogSGFuZGxlIC1hdXgtaW5mby4KKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLWF1eC1pbmZvIHRvIGNjMSouCisKKwkqIGNvbmZpZ3VyZSAobWlwcy0qLXN5c3YqKTogUmVuYW1lZCBmcm9tIG1pcHMtKi1zeXN2IGFuZCBtb3ZlZCBkb3duLgorCisJKiBnY2MuYyAoZXhlY3V0ZSk6IFVuZG8gTWFyIDEyIGNoYW5nZS4KKworCSogY29uZmlndXJlIChpMzg2LSotYnNkKik6IE5ldyBhbHRlcm5hdGl2ZS4KKwkqIGkzODZic2QuaDogTmV3IGZpbGUuCisKK1NhdCBNYXIgMjEgMTU6MTQ6MDggMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBzcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiAgQ2hlY2sgZm9yIFhFWFAgKG9wMiwgMCkgYmVpbmcgYQorCUxPV19TVU0sIHJhdGhlciB0aGFuIGNoZWNraW5nIG9wMi4gIEhhbmRsZSBib3RoIGxkZCBhbmQgc3RkIHRoZXJlLgorCitTYXQgIE1hciAyMSAxNDoxNDoxMCAxOTkyICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogdm1zLmggKENQUF9QUkVERUZJTkVTKTogRG8gbm90IGRlZmluZSBfX0dOVV9fLgorCitTYXQgTWFyIDIxIDIxOjM1OjM3IDE5OTIgIEp5cmtpIEt1b3BwYWxhICAoamtwQGJhdG1hbi5jcy5odXQuZmkpCisKKwkqIG5zMzJrLm1kIChjYWxsX3ZhbHVlKTogQWRkZWQgYSBtaXNzaW5nICJ7Ii4KKworCSogbnMzMmsuYyAocHJpbnRfb3BlcmFuZCk6IEZpeGVkIHR5cG8gWCAtPiB4LCBGSUxFIC0+IGZpbGUuCisKK1NhdCBNYXIgMjEgMTE6MTE6MDQgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBNZWlzc25lciB2ZXJzaW9uICMgdG8gMTQuCisJKENQUF9QUkVERUZJTkVTKTogQWx3YXlzIGRlZmluZSBTWVNUWVBFX0JTRDQzLgorCShDUFBfU1BFQyk6IERvbid0IGRlZmluZSBpdCBoZXJlLgorCShBU01fU1BFQyk6IFBhc3MgLWNwcC8tbm9jcHAvLW1pcHMxLy1taXBzMi8tbWlwczMgdG8gTUlQUyBhc3NlbWJsZXIsCisJYW5kIG9ubHkgcGFzcyAtbm9jcHAgYnkgZGVmYXVsdCB1bmxlc3MgLnMgZmlsZXMgYXJlIGFzc2VtYmxlZCBmb3IKKwlNSVBTIGNvbXBhdGliaWxpdHkuCisJKExJTktfU1BFQyk6IFBhc3MgLW1pcHMxLy1taXBzMi8tbWlwczMgdG8gTUlQUyBsaW5rZXIuCisJKE1EX1NUQVJURklMRV9QUkVGSVgpOiBEZWZpbmUgdG8gYmUgL3Vzci9saWIvY21wbHJzL2NjLyBpZiBub3QKKwlhbHJlYWR5IGRlZmluZWQuCisJKE5NX0ZMQUdTKTogRGVmaW5lIGFzIGFwcHJvcHJpYXRlIGZvciBtb3N0IE1JUFMgc3lzdGVtcy4KKwkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogSWYgLWdnZGIgcHJlZmVyIHN0YWJzIG92ZXIgdGhlIG5vcm1hbAorCUVDT0ZGIGRlYnVnIGZvcm1hdCwgYnV0IC1nIHNlbGVjdHMgRUNPRkYuCisJKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMpOiBEZWZpbmUgYXMgMS4KKwkoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCisKKwkqIG1pcHMuYyAobWlwc19vdXRwdXRfZmlsZW5hbWUpOiBJZiBlbWl0dGluZyBlbmNhcHN1bGF0ZWQgc3RhYnMsCisJZW1pdCAjQHN0YWJzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaXJzdCAuZmlsZSwgc28gdGhhdCB0aGUgQHN0YWJzCisJaXMgdGhlIHNlY29uZCBzeW1ib2wuICBHREIgNC40IG9ubHkgY2hlY2tzIHN5bWJvbCAjMiB0byBzZWUgd2hldGhlcgorCWl0IGlzIGVuY2Fwc3VsYXRlZCBzdGFicywgb3IgRUNPRkYuCisKKwkqIG1pcHMubWQgKHN1YmRpIGRlZmluZV9zcGxpdHMpOiBVc2UgbHR1IGluc3RlYWQgb2YgbHQuCisJKGJyYW5jaF96ZXJvX3RydWUpOiBHZW5lcmF0ZSBjb3JyZWN0IGNvZGUgd2hlbiBub3Qgb3B0aW1pemluZywgYW5kCisJYW4gYWx3YXlzIHRydWUvZmFsc2UgYnJhbmNoIGlzIGdlbmVyYXRlZC4KKwkoYnJhbmNoX3plcm9fZmFsc2UpOiBEaXR0by4KKworCSogbWlwcy1ic2QuaCAoQ1BQX1BSRURFRklORVMpOiBBbHdheXMgZGVmaW5lIFNZU1RZUEVfQlNENDMuCisJKENQUF9TUEVDKTogRG9uJ3QgZGVmaW5lIGl0IGhlcmUuICBSZW1vdmUgLVp7QlNENDMsU1lTVn0gc3VwcG9ydC4KKwlEb24ndCBwYXNzIC1JIGluIGhlcmUuCisJKFNZU1RFTV9JTkNMVURFX0RJUik6IERlZmluZSB0byBiZSAvYnNkNDMvdXNyL2luY2x1ZGUuCisJKExJTktfU1BFQyk6IFBhc3MgLW1pcHMxLy1taXBzMi8tbWlwczMgdG8gdGhlIGxpbmtlci4gIFJlbW92ZQorCS1ae0JTRDQzLFNZU1Z9IHN1cHBvcnQuICBBbHdheXMgcGFzcyAtc3lzdHlwZSAvYnNkNDMvIHRvIHRoZSBsaW5rZXIuCisKKwkqIG1pcHMtc3lzdi5oIChDUFBfUFJFREVGSU5FUyk6IEFsd2F5cyBkZWZpbmUgU1lTVFlQRV9TWVNWLgorCShDUFBfU1BFQyk6IERvbid0IGRlZmluZSBpdCBoZXJlLiAgUmVtb3ZlIC1ae0JTRDQzLFNZU1Z9IHN1cHBvcnQuCisJRG9uJ3QgcGFzcyAtSSBpbiBoZXJlLgorCShTWVNURU1fSU5DTFVERV9ESVIpOiBEZWZpbmUgdG8gYmUgL3N5c3YvdXNyL2luY2x1ZGUuCisJKExJTktfU1BFQyk6IFBhc3MgLW1pcHMxLy1taXBzMi8tbWlwczMgdG8gdGhlIGxpbmtlci4gIFJlbW92ZQorCS1ae0JTRDQzLFNZU1Z9IHN1cHBvcnQuICBBbHdheXMgcGFzcyAtc3lzdHlwZSAvc3lzdi8gdG8gdGhlIGxpbmtlci4KKwkoTURfU1RBUlRGSUxFX1BSRUZJWCk6IFJlbW92ZSwgdGhpcyBpcyBub3cgZGVmaW5lZCBpbiBtaXBzLmguCisKKwkqIG1pcHMtbmV3cy5oIChDUFBfU1BFQyk6IERvbid0IHBhc3MgLUkgaW4gaGVyZS4KKwkoU1lTVEVNX0lOQ0xVREVfRElSKTogRGVmaW5lIHRvIGJlIC91c3IvaW5jbHVkZTIuMC4KKwkoQVNNX1NQRUMpOiBQYXNzIC1jcHAvLW5vY3BwLy1taXBzMS8tbWlwczIvLW1pcHMzIHRvIE1JUFMgYXNzZW1ibGVyLAorCWFuZCBvbmx5IHBhc3MgLW5vY3BwIGJ5IGRlZmF1bHQgdW5sZXNzIC5zIGZpbGVzIGFyZSBhc3NlbWJsZWQgZm9yCisJTUlQUyBjb21wYXRpYmlsaXR5LgorCShMSU5LX1NQRUMpOiBQYXNzIC1taXBzMS8tbWlwczIvLW1pcHMzIHRvIHRoZSBsaW5rZXIuCisKKwkqIG1pcHMtbmV3czUuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgU1lTVFlQRV9TWVNWLgorCShDUFBfU1BFQyk6IERvbid0IGRlZmluZSBpdCBoZXJlLiAgUmVtb3ZlIC1ae0JTRDQzLFNZU1Z9IHN1cHBvcnQuCisJRG9uJ3QgcGFzcyAtSSBoZXJlLgorCShMSU5LX1NQRUMpOiBQYXNzIC1taXBzMS8tbWlwczIvLW1pcHMzIHRvIHRoZSBsaW5rZXIuCisKKwkqIGlyaXMuaCAoQVNNX1NQRUMpOiBQYXNzIC1jcHAvLW5vY3BwLy1taXBzMS8tbWlwczIvLW1pcHMzIHRvIE1JUFMKKwlhc3NlbWJsZXIsIGFuZCBvbmx5IHBhc3MgLW5vY3BwIGJ5IGRlZmF1bHQgdW5sZXNzIC5zIGZpbGVzIGFyZQorCWFzc2VtYmxlZCBmb3IgTUlQUyBjb21wYXRpYmlsaXR5LgorCShMSU5LX1NQRUMpOiBQYXNzIC1taXBzMS8tbWlwczIvLW1pcHMzIHRvIHRoZSBsaW5rZXIuCisKKwkqIGlyaXMuaCAoRE9MTEFSU19JTl9JREVOVElGSUVSUyk6IERlZmluZSBhcyAwLCBmb3IgaXJpcyBhc3NlbWJsZXIuCisJKE5PX0RPTExBUl9JTl9MQUJFTCk6IERlZmluZSwgdG8gZm9yY2Ugc3RhdGljIGNvbnN0cnVjdG9ycyB0byB1c2UgYQorCXBlcmlvZCBpbnN0ZWFkIG9mIGEgZG9sbGFyIHNpZ24uCisKKwkqIGRlY3N0YXRuLmggKEFTTV9TUEVDKTogUGFzcyAtY3BwLy1ub2NwcC8tbWlwczEvLW1pcHMyLy1taXBzMyB0bworCU1JUFMgYXNzZW1ibGVyLCBhbmQgb25seSBwYXNzIC1ub2NwcCBieSBkZWZhdWx0IHVubGVzcyAucyBmaWxlcyBhcmUKKwlhc3NlbWJsZWQgZm9yIE1JUFMgY29tcGF0aWJpbGl0eS4KKwkoTElOS19TUEVDKTogUGFzcyAtbWlwczEvLW1pcHMyLy1taXBzMyB0byB0aGUgTUlQUyBsaW5rZXIuCisKKwkqIGRlY3Nyb3NlLmggKEFTTV9TUEVDKTogUGFzcyAtY3BwLy1ub2NwcC8tbWlwczEvLW1pcHMyLy1taXBzMyB0bworCU1JUFMgYXNzZW1ibGVyLCBhbmQgb25seSBwYXNzIC1ub2NwcCBieSBkZWZhdWx0IHVubGVzcyAucyBmaWxlcyBhcmUKKwlhc3NlbWJsZWQgZm9yIE1JUFMgY29tcGF0aWJpbGl0eS4KKwkoTElOS19TUEVDKTogUGFzcyAtbWlwczEvLW1pcHMyLy1taXBzMyB0byB0aGUgTUlQUyBsaW5rZXIuCisKKwkqIE1ha2VmaWxlLmluIChjb2xsZWN0Mi5vKTogRGVmaW5lIG1hY3JvcyB3aGVyZSB0aGUgc3RhbmRhcmQgcGxhY2VzCisJYmluYXJpZXMgYXJlIGluc3RhbGxlZCwgc28gdGhhdCBpZiBpdCBpcyBpbnZva2VkIG91dHNpZGUgb2YgZ2NjLCBpdAorCWhhcyBhIGJldHRlciBjaGFuY2Ugb2YgZmluZGluZyB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZSB0b29scyB0bworCWludm9rZS4KKworCSogbWlwcy10ZHVtcC5jICh0b3BsZXZlbCk6IERlY2xhcmUgdGhpbmdzIHZvaWQgKiBvbiBTaWxpY29uIEdyYXBoaWNzLgorCisJKiBtaXBzLXRmaWxlLmMgKHRvcGxldmVsKTogRGVjbGFyZSB0aGluZ3Mgdm9pZCAqIG9uIFNpbGljb24KKwlHcmFwaGljcy4KKwkoc3RhYnNfc2Vlbik6IE1vdmUgc3RhdGljIHZhcmlhYmxlIHRvIGZpbGUgc2NvcGUuCisJKG1hcmtfc3RhYnMpOiBOZXcgZnVuY3Rpb24gdG8gcHV0IG91dCB0aGUgQHN0YWJzIHN5bWJvbCBmb3IgR0RCIHRvCisJc3dpdGNoIHRvIGVuY2Fwc3VsYXRlZCBzdGFicy4KKwkocHNldWRvX29wcyk6IENhbGwgbWFya19zdGFicyBpZiAjQHN0YWJzIGZvdW5kLgorCShwYXJzZV9zdGFic19jb21tb24pOiBDYWxsIG1hcmtfc3RhYnMgaWYgbmVlZGVkIHRvIGFkZCBAc3RhYnMuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfZGVxdWV1ZV9hbm9ueW1vdXNfdHlwZXMpOiBEb24ndCBjb3JlIGR1bXAgaWYKKwlUUkVFX1ZBTFVFIGlzIG51bGwuCisKKwkqIGRlY3N0YWJzLmggKG5ldyBmaWxlKTogREVDc3RhdGlvbiB3L2VuY2Fwc3VsYXRlZCBzdGFicy4KKwkqIGlyaXNnZGIuaCAobmV3IGZpbGUpOiBTR0kgaXJpcyB3L2VuY2Fwc3VsYXRlZCBzdGFicy4KKwkqIG1pcHMtZ2JzZC5oIChuZXcgZmlsZSk6IE1pcHMgQlNENDMgdy9lbmNhcHN1bGF0ZWQgc3RhYnMuCisJKiBtaXBzLWdkYi5oIChuZXcgZmlsZSk6IE1pcHMgdy9lbmNhcHN1bGF0ZWQgc3RhYnMuCisJKiBtaXBzLWduZXdzLmggKG5ldyBmaWxlKTogU29ueSBORVdTIHcvZW5jYXBzdWxhdGVkIHN0YWJzLgorCSogbWlwcy1nbmV3czUuaCAobmV3IGZpbGUpOiBTb255IE5FV1MgNS4wIHcvZW5jYXBzdWxhdGVkIHN0YWJzLgorCSogbWlwcy1nc3ZyNC5oIChuZXcgZmlsZSk6IE1pcHMgU1YuNCB3L2VuY2Fwc3VsYXRlZCBzdGFicy4KKwkqIG1pcHMtZ3N5c3YuaCAobmV3IGZpbGUpOiBNaXBzIFNWLjMgdy9lbmNhcHN1bGF0ZWQgc3RhYnMuCisJKiBtaXBzLXN2cjQuaCAobmV3IGZpbGUpOiBNaXBzIFN5c3RlbSBWLjQuCisJKiB4LWlyaXMgKG5ldyBmaWxlKTogU3BlY2lmeSB0aGF0IGlyaXMgbmVlZHMgYWxsb2NhLm8gc2luY2UgaXQncworCWFsbG9jYSBpcyBidWdneS4KKworCSogZGJ4b3V0LmMgKHRvcGxldmVsKTogSWYgTk9fU1RBQl9IIGlzIGRlZmluZWQsIGluY2x1ZGUgZ3N0YWIuaCBqdXN0CisJbGlrZSBpZiBVU0cgaXMgZGVmaW5lZC4KKwkqIGZpbmFsLmMgKHRvcGxldmVsKTogRGl0dG8uCisJKiBtaXBzLXRmaWxlLmMgKHRvcGxldmVsKTogRGl0dG8uCisJKiB4Y29mZm91dC5jICh0b3BsZXZlbCk6IERpdHRvLgorCisJKiB4bS1taXBzLmggKE5PX1NUQUJfSCk6IERlZmluZSwgZXhjZXB0IG9uIE9TRi8xLgorCitGcmkgTWFyIDIwIDIzOjUxOjU0IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKHN1YnN0X2FzbV9zdGFja19yZWdzKTogQSBSRUdfVU5VU0VEIG5vdGUgbmV2ZXIKKwlhcHBsaWVzIHRvIGFuIGlucHV0IHJlZywgZXZlbiBpZiB0aGF0IHJlZyBpcyB0aWVkIHRvIGFuIG91dHB1dC4KKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9hc21fcmVnX2xpZmUpOiBVc2UgWFZFQ0xFTiBvbmx5IG9uIGEgUEFSQUxMRUwuCisJKHN1YnN0X2FzbV9zdGFja19yZWdzKTogTGlrZXdpc2UuCisKK0ZyaSBNYXIgMjAgMTg6NTc6NDMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBNZWlzc25lciB2ZXJzaW9uICMgdG8gMTMuCisJKG1pcHNfZGVjbGFyZV9vYmplY3QpOiBEZWNsYXJlIG5ldyBmdW5jdGlvbi4KKwkoQVNNX09VVFBVVF9MQUJFTCk6IFJlbW92ZSBjcnVmdCBmcm9tIHdoZW4gY29sbGVjdCBzcGl0IG91dCBhc3NlbWJseQorCWxhbmd1YWdlIGluc3RlYWQgb2YgQyBjb2RlLgorCShBU01fR0xPQkFMSVpFX0xBQkVMKTogRGl0dG8uCisJKEFTTV9PVVRQVVRfSU5UKTogRGl0dG8uCisJKEFTTV9PVVRQVVRfSU5UX0NPTlNUKTogUmVtb3ZlLCBubyBsb25nZXIgdXNlZC4KKwkoQVNNX09VVFBVVF9QVFJfSU5UX1NVTSk6IERpdHRvLgorCShBU01fT1VUUFVUX0xBQkVMKTogRG9uJ3Qgc2V0IHRoYXQgd2UndmUgc2VlbiBhbiBpZGVudGlmaWVyIGhlcmUuCisJKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FKTogTmV3IG1hY3JvLCBjYWxsIG1pcHNfZGVjbGFyZV9vYmplY3QgdG8KKwllbWl0IHRoZSBsYWJlbCwgYW5kIG1hcmsgdGhhdCBubyAuZXh0ZXJuIGlzIG5lZWRlZCBmb3IgdGhlIG5hbWUuCisJKEFTTV9PVVRQVVRfQ09NTU9OLCBBU01fT1VUUFVUX0xPQ0FMKTogQ2FsbCBtaXBzX2RlY2xhcmVfb2JqZWN0LgorCisJKiBtaXBzLmMgKG1pcHNfZGVjbGFyZV9vYmplY3QpOiBOZXcgZnVuY3Rpb24gdG8gb3V0cHV0IHRoZSBzdHVmZgorCW5lZWRlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcywgYnNzIHZhcmlhYmxlcywgYW5kIHN0YXRpYyBic3MKKwl2YXJpYWJsZXMuCisKK0ZyaSBNYXIgMjAgMTQ6MTM6MzIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC14cmVmLmMgKEdOVV94cmVmX2ZpbGUpOiBHZXQgcmlkIG9mIGFyYml0cmFyeSBsaW1pdC0tbWFsbG9jIG5tYnVmLgorCisJKiBjcC1wYXJzZS55IChzY29wZWRfaWQpOiBFcnJvciBpZiBzcGVjJ2QgdHlwZSBpcyB1bmRlZmluZWQuCisKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogT3V0cHV0IGF0IGxlYXN0IGEgbm9wLgorCisJKiB4bS1ocDMyMC5oIChVU0cpOiBEZWZpbmVkLgorCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKToKKwlDaGFuZ2UgJUkgdG8gJTBJLgorCShwcmludF9vcGVyYW5kKTogTGlrZXdpc2UuCisKKwkqIHZhcmFzbS5jIChkYXRhX3NlY3Rpb24pOiBBZGQgZm9yd2FyZCBkZWNsLgorCisJKiBtNjhrLmMgKHByaW50X29wZXJhbmQpOiBNYWtlICUhIHByaW50IGZwY3IuCisJKiBjcmRzLmgsIGhwMzIwLmgsIG1vdDMzMDAuaCwgbmV3cy5oLCB0b3dlci1hcy5oIChQUklOVF9PUEVSQU5EKToKKwlMaWtld2lzZS4KKwkqIG02OGsubWQgKGZpeF90cnVuYyopOiBVc2UgJSEuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBPcHRpb25hbGx5IGNhbGwgc2V0dmJ1ZiBmb3Igb3V0cHV0IGZpbGUuCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IEZpeCB0eXBvLgorCitGcmkgTWFyIDIwIDE3OjQyOjEyIDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBNYWtlZmlsZS5pbiAoU1lTQ0FMTFMuYyk6IFVzZSBgY2F0JyB0byBjcmVhdGUgdGhpcyBmaWxlLCBpbnN0ZWFkCisJb2YgaGF2aW5nIGl0IGNvbnNpc3Qgb2YgYCNpbmNsdWRlJyBkaXJlY3RpdmVzLgorCShtb3N0bHljbGVhbik6IERlbGV0ZSBTWVNDQUxMUy5jLgorCSogU1lTQ0FMTFMuYzogRmlsZSBkZWxldGVkLgorCisJKiBnZXRwd2QuYyAobmV3IGZpbGUpOiBHZXQgYW5kIGNhY2hlIHdvcmtpbmcgZGlyZWN0b3J5LCB1c2luZyBQV0QKKwlpZiBpdCB3b3JrcyBhbmQgZ2V0Y3dkIG90aGVyd2lzZS4KKwkqIE1ha2VmaWxlLmluIChPQkpTLCBwcm90b2l6ZSk6IGFkZCBnZXRwd2QubworCSogY3AteHJlZi5jIChHTlVfeHJlZl9maWxlKTogTGlrZXdpc2UuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X2luaXQpOiBMaWtld2lzZS4KKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9jb21waWxlX3VuaXRfZGllKTogTGlrZXdpc2UuCisJKiBwcm90b2l6ZS5jIChtYWluKTogTGlrZXdpc2UuCisKK0ZyaSBNYXIgMjAgMTI6NTg6NTcgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChsb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiAgRml4ZWQgdG8gdXNlCisJREVDTF9JTkNPTUlOR19SVEwgYXMgdGhlICJsb2NhdGlvbiIgZm9yIGZvcm1hbCBwYXJhbWV0ZXIgdmFyaWFibGVzLgorCitGcmkgTWFyIDIwIDEzOjI2OjE2IDE5OTIgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbkBvc2Yub3JnKQorCisJKiBpMzg2cm9zZS5oIChJTklUX1NFQ1RJT05fQVNNX09QKTogT1NGIGRvZXNuJ3Qgc3VwcG9ydCBhIHRydWUKKwlpbml0aWFsaXphdGlvbiBzZWN0aW9uLgorCitGcmkgTWFyIDIwIDA3OjIzOjE1IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kIChzZXQgemVyb19leHRyYWN0IHBhdHRlcm5zKTogVXNlIHRoZSArIGNvbnN0cmFpbnQuCisKKwkqIGNydHN0dWZmLmMgKF9fZG9fZ2xvYmFsX2N0b3JzX2F1eCk6IERlY2xhcmUgaXQuCisKKwkqIG04OGsuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBNYXJrIHRoZSBQSUMgcmVnaXN0ZXIgZml4ZWQsCisJYnV0IG5vdCBjYWxsIHVzZWQuCisgICAgCisJKiBtODhrLmMgKG04OGtfYnVpbHRpbl9zYXZlcmVncyk6IEdldCBhIHByb3Blcmx5IGFsaWduZWQgYmxvY2suCisKKwkqIG04OGsubWQgKGNwdSBhdHRyaWJ1dGUpOiBVc2UgY29uc3QgZm9ybS4KKworCSogbTg4ay5oLCBtODhrLmMsIG04OGtkZ3V4LmggKHVzZXMgb2YgKl9BU01fT1ApOiBBZGQgdGFicy4KKworRnJpIE1hciAyMCAwNTo0NjoyNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBtZWQuYyAoZW1pdF9zdG9yZV9mbGFnKTogTmVlZCB0byBwcmV2ZW50IFNVQlRBUkdFVCBmcm9tIGJlaW5nCisJT1AwIGluIG9uZSBtb3JlIGNhc2UuCisKKwkqIGxvb3AuYyAoYWRkX2xhYmVsX25vdGVzKTogTmV3IGZ1bmN0aW9uLgorCShtb3ZlX21vdmFibGVzKTogVXNlIGl0IHdoZW4gaG9pc3RpbmcgYSBgbW92ZV9pbnNuJyBtb3ZhYmxlCisJdG8gZW5zdXJlIHdlIGNyZWF0ZSBhbnkgcmVxdWlyZWQgUkVHX0xBQkVMIG5vdGVzLgorCisJKiBocDgwMC5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IE1ha2UgcmVnIDI3IGEgZ2xvYmFsX3JlZworCWZvciBub3cuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9maWVsZF9hc3NpZ25tZW50KTogVXNlIGNvcnJlY3QgbW9kZSB3aGVuIHNoaWZ0aW5nCisJdGhlIHNvdXJjZSBvZiB0aGUgYXNzaWdubWVudC4KKworCSogZm9sZC1jb25zdC5jIChpbnZlcnRfdHJ1dGh2YWx1ZSk6IENvcnJlY3QgZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK1RodSBNYXIgMTkgMTg6NTk6MjQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IENvbnZlcnQgZG9fdGFibGVqdW1wIGFyZyB0byBQbW9kZS4KKworVGh1IE1hciAxOSAxNjo1NDoxNSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY29sbGVjdDIuYyAobWFpbik6IE9ubHkgcGFzcyAtZnh4eCBhbmQgLW14eHggb3B0aW9ucyB0byBnY2Mgd2hlbgorCWJ1aWxkaW5nIGNvbnN0cnVjdG9ycy4KKworVGh1IE1hciAxOSAxNjo0NDoyMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGludmVydF90cnV0aHZhbHVlKTogQ29ycmVjdGx5IGNoZWNrIGZvciBmbG9hdGluZworCWNvbXBhcmlzb24uCisKK1RodSBNYXIgMTkgMTQ6NDI6NDkgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9tYWluX2Z1bmN0aW9uKTogRG8gc28gaWYgSU5WT0tFX19tYWluIGlzIGRlZmluZWQuCisJKiBsaWJnY2MyLmMgKF9fbWFpbik6IFByb3ZpZGUgaWYgSU5WT0tFX19tYWluIGlzIGRlZmluZWQuCisJKiBjcnRzdHVmZi5jIChfX2RvX2dsb2JhbF9jdG9yc19hdXgpOiBSZW5hbWVkIGZyb20gX19kb19nbG9iYWxfY3RvcnMuCisJKF9fZG9fZ2xvYmFsX2N0b3JzKTogU2ltcGxlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBpbnZva2VzCisJX19kb19nbG9iYWxfY3RvcnNfYXV4LgorCisJKiBjcnRzdHVmZi5jICh7Q1RPUixEVE9SfV9MSVNUX3tCRUdJTixFTkR9KTogQWxsb3cgYWx0ZXJuYXRlIHdheQorCXRvIHJlcHJlc2VudCBhbmQgZGVmaW5lIF9fe0NUT1IsRFRPUn1fTElTVF9fLgorCSogaTM4NnYuaCwgYWl4Mzg2LmggKENUT1JfTElTVF97QkVHSU4sRU5EfSk6IFVzZSB0aGVzZSB0byBwdXNoCisJaW5zdGVhZCBvZiB0aGUgZnVubnkgZGVmaW5pdGlvbiBvZiBDVE9SU19TRUNUSU9OX0FTTV9PUC4KKwkqIHN2cjMuaCAoQ1RPUlNfU0VDVElPTl9BU01fT1ApOiBVc2UgdGhlIC5pbml0IHNlY3Rpb24uCisKKwkqIG04OGt2My5oIChDVE9SX0xJU1RfQkVHSU4pOiBFbWl0IGNvZGUgdG8gLmluaXQgdG8gcHVzaCBhIHplcm8uCisJKENUT1JfTElTVF9FTkQpOiBEbyBub3RoaW5nLgorCShBU01fT1VUUFVUX0NPTlNUUlVDVE9SKTogRW1pdCBjb2RlIHRvIC5pbml0IHRvIHB1c2ggdGhlIGFkZHJlc3MuCisJKERUT1JfTElTVF97QkVHSU4sRU5EfSk6IE91dHB1dCBhIGJsb2NrIG9mIGZvdXIgd29yZHMuCisJKEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IE91dHB1dCB0aGUgYWRkcmVzcyBhbmQgdGhyZWUgd29yZHMgb2YgLTEuCisJKERPX0dMT0JBTF9EVE9SU19CT0RZKTogSWdub3JlIGFsbCB2YWx1ZXMgb2YgLTEuCisKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9JU05BTik6IERlZmluZS4KKwkqIGZvbGQtY29uc3QuYyAodGFyZ2V0X2lzbmFuKTogTmV3IGZ1bmN0aW9uLgorCSogc3VuMy5oLCBzcGFyYy5oIChBU01fT1VUUFVUX3tGTE9BVCxET1VCTEV9KTogVXNlIFJFQUxfVkFMVUVfSVNOQU4uCisKKwkqIHN1bjMuaDogRGVsZXRlIGV4dHJhICNlbmRpZi4KKworVGh1IE1hciAxOSAxNDoyNTo1MCAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBocDgwMC5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBEb24ndCBjaGVjayBmb3IgQ09OU1RfRE9VQkxFCisJd2hlbiBjbGFzc2lmeWluZyBvcGVyYW5kIHR5cGVzLCBDT05TVEFOVF9QIG5vdyBpbmNsdWRlcyBpdC4KKwlVc2Ugc3BsaXRfZG91YmxlIHRvIGFzc2lnbiBvcGVyYW5kIHZlY3RvcnMgZm9yIENOU1RPUC4KKworVGh1IE1hciAxOSAxMzo1OToxNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGhwMzIwLmggKFNQQUNFX0FGVEVSX0xfT1BUSU9OKTogRGVmaW5lZC4KKwkoTElCX1NQRUMpOiBEZWZpbmVkLiAKKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IE91dHB1dCBhdXhfaW5mb19maWxlIGluIHNvdXJjZSBmaWxlJ3MgZGlyLgorCitXZWQgTWFyIDE4IDE3OjQyOjEyIDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLWF1eC1pbmZvLmMgKGdlbl9hdXhfaW5mb19yZWNvcmQpOiBEb24ndCBwdXQgdGhlIGFic29sdXRlIHBhdGgKKwluYW1lIGludG8gdGhlIG91dHB1dCBmaWxlOiBpdCdzIHVzZWxlc3MsIGV4cGVuc2l2ZSwgYW5kIG9mdGVuIHdyb25nLgorCVVzZSAiLiIgaW5zdGVhZC4KKwkqIHByb3RvaXplLmMgKGlzX3N5c2NhbGxzX2ZpbGUpOiBMb29rIGZvciBTWVNDQUxMUy5jIG9ubHkgYXQgdGhlCisJZW5kIG9mIHRoZSBmaWxlIG5hbWUuCisJKGFic3BhdGgpOiBSZW1vdmUgdXNlbGVzcyB0ZXN0IG9mICdcMCcgdmVyc3VzICcvJy4gIEFkZCBhcG9sbG8gZml4LgorCShzaG9ydHBhdGgpOiBTdG9wIHdoZW4gcmVwbGFjZW1lbnQgZmlsZW5hbWUgaXMgbG9uZ2VyIHRoYW4gdGhlCisJb3JpZ2luYWw7IHRoaXMgYXZvaWRzIGJ1ZmZlciBvdmVycnVuLiAgRG8gbm90IHByZXRlbmQgdGhhdAorCWBhL2IvYycgaXMgYSBwYXRoIHByZWZpeCBvZiBgYS9iL2NkJy4KKwkoZ2VuX2F1eF9pbmZvX2ZpbGUpOiBSZXBvcnQgZXJyb3JzIHdoZW4gY29tcGlsYXRpb24gZmFpbHMuCisJRG8gbm90IHVzZSBzdGRpbyBpbiBjaGlsZCBwcm9jZXNzLgorCURvbid0IHNheSBgZXhpdChlcnJubyknOyBlcnJubyBtaWdodCBiZSB0b28gbGFyZ2UuCisJKHByb2Nlc3NfYXV4X2luZm9fZmlsZSk6IEluY3JlbWVudCBlcnJvciBjb3VudCBpZiBhdXggaW5mbyBmaWxlIGNhbm5vdAorCWJlIGdlbmVyYXRlZC4gIEFsbG93IHRoZSBpbnZvY2F0aW9uIGZpbGVuYW1lIHRvIGJlIHJlbGF0aXZlOworCWZvciBub3csIGl0IHdpbGwgYWx3YXlzIGJlICIuIi4KKwkoZG9fcHJvY2Vzc2luZyk6IFJlcGxhY2Ugc3RybGVuICh4KSB3aXRoIHNpemVvZiAoeCkgLSAxLgorCitUaHUgTWFyIDE5IDEzOjMxOjI0IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIFBMVVMgYW5kIE1JTlVTIGNhc2VzKTogVXNlCisJYXJnMHMgYW5kIGFyZzFzIGluc3RlYWQgb2YgYXJnMCBhbmQgYXJnMSwgc28gdGhhdCByZXN1bHRpbmcgdmFsdWVzCisJd2lsbCBiZSBzaWduIGV4dGVuZGVkLgorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBEb24ndCBjYWxsIHNjaGVkX2FuYWx5emVfMiBhdCB0aGUgZW5kLgorCVRoaXMgY29kZSB3YXMgbmV2ZXIgZXhlY3V0ZWQsIGFuZCBpcyB3cm9uZy4KKwkoc2NoZWRfYW5hbHl6ZV8yKTogQ29udmVydCBmcm9tIGlmIHN0YXRlbWVudHMgdG8gYSBzd2l0Y2guCisJQWRkIHN1cHBvcnQgZm9yIFBSRV9ERUMvUFJFX0lOQy9QT1NUX0RFQy9QT1NUX0lOQzsgcGFzcyB0aGVtIHRvCisJc2NoZWRfYW5hbHl6ZV8xIGJlY2F1c2UgdGhleSBhcmUgd3JpdGVzLgorCShzY2hlZF9hbmFseXplX2luc24pOiBEZWxldGUgc3BlY2lhbCBjYXNlIGNvZGUgdG8gaGFuZGxlIFJFR19JTkMKKwlub3Rlcywgb2Jzb2xldGVkIGJ5IGNoYW5nZSBhYm92ZS4KKworCSogc3BhcmMuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBSZXdyaXRlIHRvIG1vcmUgZWZmaWNpZW50bHkgaGFuZGxlCisJY29uc3RhbnQgbGVuZ3RoIHN0cmluZ3Mgd2hvc2UgbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZWlyCisJYWxpZ25tZW50LiAgQWxzbywgdGhlIGxlbmd0aCBvZiBzdHJpbmdzIGhhbmRsZWQgd2l0aG91dCBhIGxvb3Agbm93CisJaXMgYSBtdWx0aXBsZSBvZiB0aGVpciBhbGlnbm1lbnQsIGluc3RlYWQgb2YgZml4ZWQgc2l6ZS4KKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX3NlbGVjdG9yX3RyYW5zbGF0aW9uX3RhYmxlKTogQWRkIGNhc3QgZm9yCisJYXJyYXkgaW5kZXggZnJvbSBlbnVtIHRvIGludCB0byBzYXRpc2Z5IG9sZCBjb21waWxlci4KKworCSogYy1wYXJzZS5ncGVyZjogQ2hhbmdlIEFTTSB0byBBU01fS0VZV09SRC4KKwkqIGdwbHVzLmdwZXJmOiBMaWtld2lzZS4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtbWFuKTogRGVsZXRlIGR1cGxpY2F0ZSBsaW5lcy4KKworVGh1IE1hciAxOSAwMjozMjowNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERpc2FibGUgYHNxcnQnLgorCitUaHUgTWFyIDE5IDAxOjA5OjE2IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBQcm9wZXJseSBjaGVjayBmb3Igc2lnbmVkbmVzcyBpbiBhCisJY29uc3RfZG91YmxlLgorCitXZWQgTWFyIDE4IDE4OjUxOjM3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGxpbmtfY29tbWFuZF9zcGVjKSBbbm90IExJTktfTElCR0NDX1NQRUNJQUxdOiBQdXQgYmFjayAtcy4KKworCSogY29uZmlnLnN1YiAoaTQ4Nik6IEFjY2VwdCBhcyBDUFUgdHlwZS4KKworCSogY29sbGVjdDIuYyAoZG9fd2FpdCk6IEhhbmRsZSBOT19TWVNfU0lHTElTVC4KKwkqIHhtLWhwMzIwLmggKE5PX1NZU19TSUdMSVNUKTogRGVmaW5lZC4KKworV2VkIE1hciAxOCAxNTo1ODozMSAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogY3J0c3R1ZmYuYywgZHdhcmZvdXQuYywgc3ZyMy5oLCBzdnI0LmggKCpfQVNNX09QKTogUmVtb3ZlIHRhYnMKKwlhbmQgbmV3bGluZXMuCisJKiBkd2FyZm91dC5jLCBzdnIzLmgsIHN2cjQuaAorCShBU01fT1VUUFVUXyosIEFTTV9ERUNMQVJFXyosIEFTTV9EV0FSRl8qKTogUHV0IHRhYnMgaGVyZSB3aGVuIG5lZWRlZC4KKworV2VkIE1hciAxOCAxNzoyNjo0NCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIHN2cjQuaCAoTVVMVElCWVRFX0NIQVJTKTogIEFkZGVkIGRlZmluaXRpb24uCisKK1dlZCBNYXIgMTggMTc6MzY6MzAgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGdjYy5jIChjb2xsZWN0X29ic3RhY2spOiBOZXcgc3RhdGljIG9ic3RhY2sgdG8gYnVpbGQgdGhlCisJZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gY29sbGVjdCwgc28gdGhhdCBpdCBjYW4gcmVsaWFibHkKKwlmaW5kIHRoZSBjb21waWxlciBwYXNzZXMuCisJKHB1dGVudik6IE5ldyBmdW5jdGlvbiB0byBhZGQgYSB2YXJpYWJsZSB0byB0aGUgZW52aXJvbm1lbnQuCisJU3R1YmJlZCBvdXQgZm9yIE1TRE9TIGFuZCBWTVMgYXQgcHJlc2VudCwgb3IgaWYgSEFWRV9QVVRFTlYgaXMKKwlkZWZpbmVkLgorCShwdXRlbnZfZnJvbV9wYXRocyk6IE5ldyBmdW5jdGlvbiB0byB0YWtlIGEgcGF0aCBsaXN0LCBhbmQgYnVpbGQKKwl0aGUgY29ycmVzcG9uZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgaXQuCisJKG1haW4pOiBQYXNzIGFyZ3ZbMF0gdG8gY29sbGVjdCB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCUNPTExFQ1RfR0NDLiAgUmVidWlsZCB0aGUgQ09NUElMRVJfUEFUSCBhbmQgTElCUkFSWV9QQVRICisJZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGluY2x1ZGUgYWxsIHByZWZpeGVzIHNwZWNpZmllZCB3aXRoIC1CLAorCS1iLCBhbmQgLVYuICBDb25zdHJ1Y3QgQ09MTEVDVF9HQ0NfT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bworCWNvbnNpc3Qgb2YgYWxsIG9mIHRoZSBvcHRpb25zIHBhc3NlZCB0byBnY2MsIGV4Y2VwdCBmb3IgdGhlIC1CLAorCS1iLCBhbmQgLVYgb3B0aW9ucy4KKworCSogY29sbGVjdDIuYyAobWFpbik6IENvcnJlY3RseSBzaXplIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZAorCXRvIHRoZSBjb21waWxlciB3aGVuIGJ1aWxkaW5nIHRoZSBjb25zdHJ1Y3RvciBsaXN0cyB0byBhY2NvdW50IGZvcgorCWFueSBvcHRpb25zIHBhc3NlZCB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCUNPTExFQ1RfR0NDX09QVElPTlMuICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ09MTEVDVF9HQ0MKKwlzcGVjaWZpZXMgYSBmdWxsIHBhdGhuYW1lLCB1c2UgdGhhdCBmb3IgdGhlIHBhdGhuYW1lIHRvIGludm9rZSBnY2MKKwl3aXRoLiAgUHJpbnQgdGhlIG5hbWUgImNvbGxlY3QyIiBpbiBsb3dlcmNhc2UgaWYgLXYuCisKKwkqIHhtLW1pcHMuaCAoSEFWRV9QVVRFTlYpOiBEZWZpbmUgaWYgT1NGLzEuCisKK1dlZCBNYXIgMTggMDc6Mjc6NTAgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaHA4MDAuYyAoYWN0dWFsX2ZzaXplKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbi4KKwkocHJvZmlsZV9mbGFnKTogUmVtb3ZlIGRlZmluaXRpb247IGRlZmluZWQgaW4gZmxhZ3MuaC4KKwkoaHBfcHJvZmlsZV9sYWJlbG5vLCBsb2NhbF9mc2l6ZSwgc2F2ZV9mcmVncyk6IE1vdmUgZGVjbGFyYXRpb25zIHRvCisJdG9wIG9mIGZpbGUuCisKKwkqIGhwODAwLmggKE9QVElNSVpBVElPTl9PUFRJT05TKTogRG8gc2FtZSB0aGluZyBhcyBTcGFyYy4KKworCSogY29tYmluZS5jIChyZWdfYml0ZmllbGRfdGFyZ2V0X3ApOiBVc2UgcnR4X2VxdWFsX3AgaW5zdGVhZCBvZgorCWFzc3VtaW5nIHRoZSBhY3R1YWwgcnR4IGlzIHVzZWQuCisKK1dlZCBNYXIgMTggMDA6MjA6MzggMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkZGVmLmg6IEhhbmRsZSBfR0NDX1BUUkRJRkZfVCwgX0dDQ19TSVpFX1QsIF9HQ0NfV0NIQVJfVC4KKwkqIGZpeGluY2x1ZGVzOiBVc2UgdGhvc2UgbWFjcm9zIGluIGluc2VydGVkIGNvbmRpdGlvbmFscy4KKworCSogZ3N0ZGRlZi5oOiBIYW5kbGUgX1RfU0laRV8gYW5kIF9UX1BUUkRJRkZfLCBsaWtlIF9UX1dDSEFSXy4KKworCSogc3VuMy5oIChDUFBfU1BFQyk6IERlbGV0ZSB0aGUgYWx0ZXJuYXRpdmUgZm9yIGZwYSBhcyBkZWZhdWx0LgorCURlZmluZSBzeW1ib2xzIHdpdGggX18gYXMgd2VsbCBhcyB3aXRob3V0LgorCisJKiBocDMyMC5oIChMSU5LX0xJQkdDQ19TUEVDSUFMLCBSRUxBVElWRV9QUkVGSVhfTk9UX0xJTktESVIpOgorCURlZmluZSB1bmxlc3MgVVNFX0dBUy4KKworVHVlIE1hciAxNyAxNzoxOTowNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChtYWtpbmcgZGlyZWN0b3JpZXMpOiBBbHdheXMgdXNlIGZpbmQuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IERvbid0IHdhcm4gaWYgZGVmaW5lIG5vbmFuc2kgYnVpbHRpbiBhcyBzdGF0aWMsCisJb3IgaWYgZGVmaW5lIEFOU0kgYnVpbHRpbiBhcyBpbmxpbmUgc3RhdGljLgorCisJKiBocDgwMGhwdXguaCAoTElOS19MSUJHQ0NfU1BFQ0lBTCwgUkVMQVRJVkVfUFJFRklYX05PVF9MSU5LRElSKTogTmV3LgorCisJKiBmaXhpbmMuc3ZyNDogU3BlY2lhbCBjaGFuZ2VzIGZvciBTb255IE1JUFMtTkVXUy4KKworVHVlIE1hciAxNyAxNToxMjo1NyAxOTkyICBUaW0gTW9vcmUgIChtb29yZUBkZWZtYWNyby5jcy51dGFoLmVkdSkKKworCSogaHA4MDAuaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IEdldCBzaWduIHJpZ2h0LCBpbmNsdWRlCisJZml4ZWQgYXJlYS4KKworVHVlIE1hciAxNyAxNDowNjowMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChhbGwuaW5kaXJlY3QpOiBSZW5hbWVkIGZyb20gYWxsLWludGVybmFsLgorCisJKiB0LW1pcHMgKEFMTCk6IERlbGV0ZWQuCisKK1R1ZSBNYXIgMTcgMTA6MzU6MTggMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGhhbGZwaWMuYyAoaGFsZl9waWNfYWRkcmVzc19wKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIHgtZGVjcm9zZSAoQ0xJQik6IEFkZCAtbGJzZCwgc2luY2UgdmZvcmsgbW92ZWQgdG8gbGliYnNkLmEuCisJKiB4LWVuY3Jvc2UgKENMSUIpOiBEaXR0by4KKwkqIHgtaTM4NnJvc2UgKENMSUIpOiBEaXR0by4KKworVHVlIE1hciAxNyAwNzowMjoyOSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtaXBzLm1kIChtb3ZkaSk6IEZQX1JFR1MgZG9uJ3QgYWxsb3cgREltb2RlLCBzbyByZW1vdmUgdGhlbQorCWZyb20gdGhlIGNvbnN0cmFpbnRzLgorCisJKiBtaXBzLm1kICh1bmFsaWduZWQgbW92ZXMpOiBVc2UgVU5TUEVDIHRvIGRpc3Rpbmd1aXNoIFNFVHMgdGhhdCBhcmUKKwl1bmFsaWduZWQgZnJvbSB0aG9zZSB0aGF0IGFyZW4ndC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFVwZGF0ZSBMT0dfTElOS1MgY29ycmVjdGx5IHdoZW4gd2Ugc3BsaXQgYQorCVBBUkFMTEVMIHRoYXQgbG9hZHMgZnJvbSBtZW1vcnkgYm90aCBhcyBhIGZ1bGwtd29yZCBhbmQgc2lnbi1leHRlbmRlZC4KKworVHVlIE1hciAxNyAyMToyMzoxMCAxOTkyICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogdmF4LmMgKHNwbGl0X3F1YWR3b3JkX29wZXJhbmRzKTogRml4IHR5cG8uCisKKwkqIG1ha2UtY2MxLmNvbTogQWRkIHhjb2Zmb3V0LmMuCisKK01vbiBNYXIgMTYgMTc6MTI6MjYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUgKG1pcHMtZGVjLXVsdHJpeCopOiBVc2UgeC1kZWNzdGF0bi4KKwkqIHgtZGVjc3RhdG4gKENMSUIpOiBEZWxldGUuCisKKwkqIGV4cHIuYyAobW92ZV9ieV9waWVjZXNfMSk6IEFkZCBuZWdhdGl2ZSBpbnRzLS1kb24ndCBzdWJ0cmFjdCBpbnRzLgorCisJKiBuZXh0LmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsIEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IFR1cm5lZCBvZmYuCisJKiB0LW5leHQgKEVYVFJBX1BST0dSQU1TLCBsZCk6IFVzZSBjb2xsZWN0Mi4KKwkqIGNvbmZpZ3VyZSAobTY4ay1uZXh0LSopOiBVc2UgdC1uZXh0LgorCisJKiBtaXBzLWJzZC5oIChUQVJHRVRfTUVNX0ZVTkNUSU9OUyk6IERlZmluZWQuCisKK01vbiBNYXIgMTYgMTQ6MDQ6MDggMTk5MiAgVGltIE1vb3JlICAobW9vcmVAZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIGhwODAwLm1kIChtb3ZzaSArIDEwLCBtb3ZzaSArIDExKTogQWRkICcqJyB0byBjb25zdHJhaW50cy4KKwkoZml4X3RydW5jc2ZzaTIsIGZpeF90cnVuY2Rmc2kyKTogQWRkIGFuIGFsdGVybmF0aXZlIHRvIHB1dCByZXN1bHQKKwlkaXJlY3RseSBpbiBhIGdlbmVyYWwgcmVnaXN0ZXIuCisJKiBocDgwMC5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogSWYgZnVuY3Rpb24gaXMgbm90CisJVFJFRV9QVUJMSUMsIGRvbid0IGRvIHRoZSBhcmd1bWVudCBkZXNjcmlwdG9yIG1hZ2ljLgorCShFWFBBTkRfQlVJTFRJTl9TQVZFUkVHUyk6IGNhbGwgaHBwYV9idWlsdGluX3NhdmVyZWdzLgorCShMRUdJVElNSVpFX0FERFJFU1MpOiBEb24ndCBsZWdpdGltaXplIENPTlNUIGFkZHJlc3Nlcy4KKwkoVEVYVF9TRUNUSU9OX0FTTV9PUCwgREFUQV9TRUNUSU9OX0FTTV9PUCk6IFB1dCB0YWJzIGJhY2sgaW4uCisJKiB4bS1ocDgwMC5oIChTX0lTRElSKTogRGVmaW5lIGZvciBCU0QuCisKKwkqIGhwODAwLmMgKGhwcGFfYnVpbHRpbl9zYXZlcmVncyk6IE5ldyBmdW5jdGlvbi4KKwkqIHZhLWhwODAwLmggOiBSZXdyaXRlLgorCisKK1N1biBNYXIgMTUgMjM6Mzg6MzkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdGlvbnMuYyAocmVhbGx5X3N0YXJ0X21ldGhvZCk6IER5bmFtaWNhbGx5IGFsbG9jYXRlIGBidWYnLgorCisJKiBzcGFyYy5oIChUQVJHRVRfSE9QRV9BTElHTik6IFJlbmFtZWQgZnJvbSBUQVJHRVRfQUxJR04uCisJKiBzcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUsIG91dHB1dF9mcF9tb3ZlX2RvdWJsZSk6IFVzZSBuZXcgbmFtZS4KKwkqIHNwYXJjLmggKFRBUkdFVF9GT1JDRV9BTElHTik6IE5ldyBmbGFnLgorCShGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBEZWZpbmVkLgorCShGVU5DVElPTl9BUkcsIEZVTkNUSU9OX0lOQ09NSU5HX0FSRywgRlVOQ1RJT05fQVJHX0FEVkFOQ0UpOgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUyk6IEhhbmRsZSBUQVJHRVRfRk9SQ0VfQUxJR04uCisJKFJPVU5EX1JFRyk6IE5ldyBzdWJyb3V0aW5lIG1hY3JvLgorCisJKiBzcGFyYy5oIChDQzFfU1BFQyk6IERvbid0IHRyeSB0byByZWNvZ25pemUgLWRhbGlnbi4KKworCSogaHAzMjAuaCAoQVNNX09VVFBVVF9BU0NJSSk6IFB1dCB0YWIgaGVyZS4KKwkoQVNDSUlfREFUQV9BU01fT1ApOiBOb3QgaGVyZS4KKwkqIG1vdDMzMDAuaDogTGlrZXdpc2UuCisKKwkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IERvbid0IGRlbGV0ZSAucyBvciAuaSBmaWxlcy4KKwkoZXh0cmFjbGVhbik6IERvIHRoYXQgaGVyZS4KKworCSogYTI5ay5oLCBmeDgwLmgsIGdtaWNyby5oLCBpODYwdjMuaCwgaTg2MHY0LmggKCpfQVNNX09QKTogUmVtb3ZlIHRhYnMuCisJKiBtODhrdjQuaCwgbTg4a2RndXguaCwgbWlwcy5oLCByb21wLmgsIHJzNjAwMC5oOiBMaWtld2lzZS4KKwkqIHN1bjM4Ni5oLCB0b3dlci1hczogTGlrZXdpc2UuCisJKiBhcm0uaCwgaHA4MDAuaCAoKl9BU01fT1ApOiBSZW1vdmUgZXh0cmEgdGFicyBhbmQgbmV3bGluZXMuCisJKiBtNjhrc2dzLmggKCpfQVNNX09QKTogUmVtb3ZlIHRhYnMuCisJKEFTTV9PVVRQVVRfKik6IFB1dCB0aGUgdGFicyBoZXJlIHdoZW4gYXBwcm9wcmlhdGUuCisJKiBtNjhrdjQuaCwgbTg4ay5oLCBuZXh0Lmg6IExpa2V3aXNlLgorCitTdW4gTWFyIDE1IDE4OjM3OjQ5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoaW5jX2Zvcl9yZWxvYWQpOiBSZXdvcmsgdG8gdHJ5IHRvIGRvIGFkZGl0aW9uIGluCisJSU5DTE9DIHJhdGhlciB0aGFuIGFzc3VtaW5nIHdoZW4gaXQgY2FuIGJlIGRvbmU7IHRoaXMgZml4ZXMgYSBidWcKKwlvbiBocDgwMCBhbmQgZ2VuZXJhdGVzIGJldHRlciBjb2RlIG9uIHNvbWUgQ0lTQyBtYWNoaW5lcy4KKworU3VuIE1hciAxNSAxNToxMjozOSAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGNydHN0dWZmLmM6ICBJZiBkZWZpbmVkLCBpbnZva2UgSU5JVF9TRUNUSU9OX1BSRUFNQkxFLgorCisJKiB4bS1zcGFyY3Y0LmgsIHgtc3BhcmN2NDogIE5ldyBmaWxlcy4KKwkqIGNvbmZpZ3VyZSAoc3BhcmMtKi1zeXN2NCopOiAgVXNlIHRoZW0uCisKK1N1biBNYXIgMTUgMTY6NDE6MzMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAoc3ViZGkzKTogRml4IHVudGVybWluYXRlZCBjb21tZW50LgorCitTdW4gTWFyIDE1IDA0OjA4OjU5IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZSBhdCB6ZXZzLnNpY3Muc2UpCisKKwkqIGhwODAwLmMgKG91dHB1dF9ibG9ja19tb3ZlKTogTWFqb3IgcmV3cml0ZS4KKwkqIGhwODAwLm1kIChtb3ZzdHJzaSk6IFJld3JpdGUgdG8gbWF0Y2ggbmV3IG91dHB1dF9ibG9ja19tb3ZlLiAgRkFJTAorCWlmIHRoZSBhY3R1YWwgb3BlcmFuZHMgYXJlIGJldHRlciBoYW5kbGVkIGJ5IGEgbGlicmFyeSBjYWxsLgorCShtb3ZzdHJzaSByZWNvZ25pemVyKTogUmV3cml0ZS4KKworCSogc3BhcmMubWQgKG1vdnN0cnNpKTogRkFJTCBmb3IgYWxsIGJsb2NrcyB3aXRoIHVua25vd24gc2l6ZS4KKworU2F0IE1hciAxNCAxOTowNjowMiAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGMtZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uKTogRG9uJ3QgZGVjbGFyZSBzdGF0aWMuCisKK1NhdCBNYXIgMTQgMTU6NTc6NTMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGdldF9wb2ludGVyX2FsaWdubWVudCk6IENvbnZlcnQgYnl0ZXMgdG8gYml0cworCXdoZW4gaGFuZGxpbmcgUExVU19FWFBSLgorCisJKiBjcC1zZWFyY2guYyAocHVzaF9zdGFja19sZXZlbCk6IERlY2xhcmUgdHAgYXMgY2hhciAqLgorCisJKiBtaXBzLmMgKG1pcHNfYXNtX2ZpbGVfZW5kKTogVXNlIFRSRUVfQVNNX1dSSVRURU4gdG8gYXZvaWQKKwlkdXBsaWNhdGUgLmV4dGVybiBjb21tYW5kcy4KKworCSogbWlwcy10ZHVtcC5jOiBJbmNsdWRlIGZjbnRsLmguCisJKiBtaXBzLXRmaWxlLmMgKG9wZW4sIGZzdGF0KTogRGVjbGFyYXRpb25zIGRlbGV0ZWQuCisKKwkqIHhtLW1pcHNuZXdzLmg6IE5ldyBmaWxlLgorCSogbWlwcy1uZXdzNS5oOiBOZXcgZmlsZS4gIE5lZWRzIHBhcGVycyBmcm9tIFJvbiBDb2xlLgorCSogY29uZmlndXJlIChtaXBzLXNvbnktc3lzdiopOiBOZXcgYWx0ZXJuYXRpdmUuCisKK1NhdCBNYXIgMTQgMDc6MTE6MTQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKGluaXRpYWxpemVfZm9yX2lubGluZSk6IElmIERFQ0xfSU5DT01JTkdfUlRMIGlzCisJdGhlIHNhbWUgb2JqZWN0IGFzIERFQ0xfUlRMLCBzdG9yZSBjb3B5IGluIGJvdGggcGxhY2VzLgorCitTYXQgTWFyIDE0IDEwOjEyOjM5IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AY3lnbnVzLmNvbSkKKworCSogY3Atc3Bldy5jICh5eWxleCk6IEZpeCBzb21lIGZlbmNlcG9zdCBlcnJvcnMgZm91bmQgYnkgQ2hpcAorCVNhbHplbmJlcmcuCisKKwkqIGNwLWluaXQuYyAoaXNfYWdncl90eXBlZGVmKTogTm93IGNhbGxzIGBlcnJvcicgaW5zdGVhZCBvZiBgZmF0YWwnCisJaWYgTkFNRSBpcyBub24tQUdHUiB0eXBlLgorCisJKiBjcC1jbGFzcy5jIChkdXBsaWNhdGVfdGFnX2Vycm9yKTogU2V0IENMQVNTVFlQRV9WQkFTRV9TSVpFLgorCitTYXQgTWFyIDE0IDAwOjI4OjU3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IERvbid0IGNvcHkgY2xvc2luZyBkZWxpbSBpbiAlKC4uLikgb3IgJVsuLi5dLgorCShyZWFkX3NwZWNzKTogRG9uJ3QgaWdub3JlIG5ld2xpbmUgdGhhdCBlbmRzIGEgY29tbWVudC4KKwkoaGFuZGxlX2JyYWNlcyk6IFByb3Blcmx5IHRlcm1pbmF0ZSBzY2FuIGZvciAlKi4KKwkodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogU2NhbiBhbnkgZXh0cmEgc3BlY3MgZnJvbSBzcGVjcyBmaWxlLgorCisJKiB4LWlyaXM6IEZpbGUgZGVsZXRlZC4KKworCSogY2NjcC5jIChvdXRwdXRfbGluZV9jb21tYW5kKTogQXZvaWQgb3V0cHV0dGluZyBsaW5lIG51bWJlciAwLgorCisJKiBmaW5hbC5jIChhc21fZnByaW50Zik6IEhhbmRsZSAlTy4KKwkqIG02OGsuYzogSW5zZXJ0ICVPIGJlZm9yZSBgbW92ZScgaW4gTU9UT1JPTEEgY2FsbHMgdG8gYXNtX2ZwcmludGYuCisKK0ZyaSBNYXIgMTMgMjA6MTc6NDAgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYywgY3AtdHlwZTIuYywgY3AtdHJlZS5jLCBjcC1zcGV3LmMsIGNwLXNlYXJjaC5jLAorCWNwLXBhcnNlLnksIGNwLWluaXQuYywgY3AtZGVjbC5jLCBjcC1jdnQuYywgY3AtY2xhc3MuYywgY3AtY2FsbC5jOgorCU1lcmdlZCBpbiB1cGRhdGVkIGNwLSogZmlsZXMgZm9yIGdjYy0yLjEuCisKKwlUaHUgTWFyIDEyIDAyOjI5OjI2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZTIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogcmVtb3ZlIGluY29ycmVjdCBlcnJvciBtZXNzYWdlLgorCitGcmkgTWFyIDEzIDE0OjU0OjIzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3Rpb25zLmMgKGdldF9hcmdfdHlwZV9saXN0KSBbbm90IE5FWFRfT0JKQ19SVU5USU1FXToKKwkxc3QgYXJnIGFsd2F5cyBhbiBvYmplY3QuCisJKHN5bnRoX21vZHVsZV9wcm9sb2d1ZSk6IERvbid0IHVzZSBwYXJzZXIgaW50ZXJmYWNlLCBqdXN0IGJ1aWxkIG5vZGVzLgorCVVzZSBgdm9pZCAqJyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIFRBR19TVVBFUiB2cyBfVEFHX1NVUEVSLgorCShUQUdfU1VQRVIsIF9tc2dfaWQsIF9tc2dTdXBlcl9pZCk6IERlbGV0ZWQuCisJKG9iamNfZ2V0Q2xhc3NfaWQsIG9iamNfZ2V0TWV0YUNsYXNzX2lkKTogRGVsZXRlZC4KKwkoc2VsZWN0b3JfdHlwZSk6IFJlbmFtZWQgZnJvbSBfc2VsZWN0b3JfdHlwZS4KKwkoZm9yd2FyZF9kZWNsYXJlX2NhdGVnb3JpZXMsIGJ1aWxkX29iamNfc3ltdGFiX3RlbXBsYXRlKToKKwlEb24ndCB1c2UgcGFyc2VyIGludGVyZmFjZSwganVzdCBidWlsZCBub2Rlcy4KKwkoY3JlYXRlX2J1aWx0aW5fZGVjbCk6IE5ldyBmdW5jdGlvbi4KKworCSogaHA4MDBocHV4LmggKExJQl9TUEVDKTogTmV3IGRlZmluaXRpb24uCisKKwkqIGFybS5oIChUQVJHRVRfV0hFTl9ERUJVR0dJTkcpOiBOYW1lIGNvcnJlY3RlZC4KKworCSogcHJvdG9pemUuYyAoYWJzcGF0aCk6IE1ha2UgYWJzX2J1ZmZlciBhIGxpdHRsZSBsb25nZXIuCisKKwkqIGVuY29yZS5oIChOT19BQlNPTFVURV9QUkVGSVhfSUZfU1lNQk9MSUMpOiBEZWZpbmVkLgorCShFWFRFUk5BTF9QUkVGSVgsIElNTUVESUFURV9QUkVGSVgpOiBEZWZpbmVkLgorCShUQVJHRVRfREVGQVVMVCk6IENoYW5nZWQgdG8gOS4KKwkoRU5DT1JFX0FTTSk6IERlZmluZWQuCisKKwkqIHNlcXVlbnQuaCAoUFJJTlRfT1BFUkFORCwgUFJJTlRfT1BFUkFORF9BRERSRVNTKTogRGVsZXRlZC4KKwkoSU1NRURJQVRFX1BSRUZJWCk6IERlZmluZSBhcyAwLgorCShTRVFVRU5UX0FTTSk6IERlZmluZWQuCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kKTogT3V0cHV0IGYucC4gYXMgaW50cyBpZiBTRVFVRU5UX0FTTS4KKwlPdXRwdXQgZG91YmxlcyB1c2luZyAwZiwgbm90IDBkLCBpZiBFTkNPUkVfQVNNLgorCisJKiBjb25maWd1cmU6IElmIG5vIGNvbmZpZ3VyYXRpb24gbWF0Y2hlcywgcHJpbnQgZXJyb3IgYW5kIGV4aXQuCisJKG02OGstc3VuLXN1bm9zKik6IFJlbmFtZWQgZnJvbSBtNjhrLXN1bi1zdW5vczQqLgorCisJKiBjb25maWd1cmUgKGNvcHkpOiBOZXcgdmFyaWFibGUuCisJSWYgaGFyZCBsaW5rIGZhaWxzLCBtYWtlIGEgY29weS4KKworCSogbWlwcy5jIChtaXBzX2FzbV9maWxlX2VuZCk6IERvbid0IHNldCBmbGFncyBpbiBpZGVudGlmaWVycy4KKwlKdXN0IG91dHB1dCBldmVyeSBpZGVudGlmaWVyIGZvdW5kIGluIGV4dGVybl9oZWFkLgorCisJKiBjb25maWd1cmUgKHNwYXJjLXR0aS0qKTogUmVuYW1lZCBmcm9tIHNwYXJjLXVuaWNvbS0qLgorCShtNjhrLXR0aS0qKTogUmVwbGFjZWQuCisJKG02OGstdHRpMi0qKTogRGVsZXRlZAorCisJKiBjb25maWcuc3ViIChwYmQpOiBBbGlhcyBmb3Igc3BhcmMtdHRpLCBub3Qgc3BhcmMtdW5pY29tLgorCShwYmIpOiBOZXcgbWFjaGluZSBhbGlhcy4KKwkoKi10dGkpOiBJbXBsaWVzIG9zPS1zeXN2My4KKwkoLW9zcyopOiBBbGlhcyBmb3IgLXN5c3YzLgorCitGcmkgTWFyIDEzIDE3OjIwOjUyIDE5OTIgIGRhdmlkIGQgW3pvb10genVobiAgKHpvbyBhdCBseW54LnNwYS51bW4uZWR1KQorCisJKiB4LW1pcHM6IGFkZCAtbWxkLgorCitGcmkgTWFyIDEzIDE0OjQ4OjA1IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIGhwODAwLmggKFJFR0lTVEVSX05BTUVTKTogTmFtZSByZWdpc3RlciAxMTIsIHRoZSBzaGlmdCBhbW91bnQKKwlyZWdpc3RlciwgYXMgIlNBUiIuICBJdCB3YXMgbGVmdCBvdXQuCisKK0ZyaSBNYXIgMTMgMDQ6MDg6NTMgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2aXNjLmggKFNUQVJURklMRV9TUEVDKTogVXNlIGNydDEsIG5vdCBjcnQwLgorCisJKiB4LWkzODZzY28gKENDLE9MRENDKTogRG9uJ3QgZGVmaW5lIGBpMzg2JyBoZXJlLgorCShSQ0NGTEFHUyk6IERlZmluZSBpdCBoZXJlLCBhbG9uZyB3aXRoIG90aGVyIFNDTyBzeW1ib2xzLgorCShYQ0ZMQUdTKTogVXNlIHRoYXQuICBOZXcgdmFyaWFibGUuCisJKENMSUIpOiBVc2UgLWxQVyB0byBnZXQgYWxsb2NhLgorCitGcmkgTWFyIDEzIDE0OjExOjQxIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogQ2hhbmdlcyB0byBlbmFibGUgdXNlIG9mIHNxcnQgYnVpbHRpbiBmdW5jdGlvbnMuCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBFbmFibGUgQlVJTFRfSU5fRlNRUlQgZm9yIAorCV9fYnVpbHRpbl9zcXJ0LiAgQWxzbyBlbmFibGUgZm9yIHNxcnQgaWYgbm90IHRyYWRpdGlvbmFsLgorCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEVuYWJsZSBCVUlMVF9JTl9GU1FSVCBmb3IKKwlfX2J1aWx0aW5fc3FydC4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fRlNRUlQpOiBOZXcgY2FzZS4gIENhbGwKKwlleHBhbmRfdW5vcCB0byBleHBhbmQgdGhlIG9wZXJhdGlvbi4gIElmIHRoYXQgZmFpbHMgYnJlYWsgYW5kCisJZW1pdCBhIGNhbGwgdG8gdGhlIGxpYnJhcnkgc3FydCBmdW5jdGlvbi4KKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IEluaXRpYWxpemUgbmV3IG9wdGFicyBmb3Igc3FydCBmdW5jdGlvbnMuCisJKiBleHByLmggKHNxcnRfb3B0YWIpOiBEZWNsYXJlIGhlcmUgc28gdGhhdCBleHByLmMgY2FuIHNlZSBpdC4KKworRnJpIE1hciAxMyAwODo1Njo1MCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoZGVsZXRlX2RlYWRfZnJvbV9jc2UpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGEyOWsuaCAoUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6IERlZmluZSBhcyAxLgorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogQWRkIG1pc3NpbmcgYXJnIGluIGNhbGwgdG8KKwl0cnlfc3BsaXQgY2FsbCB0aGF0IHdhcyByZWNlbnRseSBhZGRlZC4KKworCSogZm9sZC1jb25zdC5jIChpbnZlcnRfdHJ1dGh2YWx1ZSwgY2FzZSBDT01QT1VORF9FWFBSKTogTmV3IGNhc2UuCisKK0ZyaSBNYXIgMTMgMDE6MDI6NTYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChvcmRpbmFyeSBzY2FuX3Byb2dfZmlsZSk6IERvbid0IGNvdW50IHwgaW4gc3ltIG5hbWUuCisKKwkqIG5zMzJrLm1kIChtb3ZzZik6IFJlbW92ZSAjaWYgMCBhcm91bmQgI2lmbmRlZiBHQVNfU1lOVEFYLgorCisJKiBwYzUzMi5oIChHQVNfU1lOVEFYKTogRGVmaW5lZC4KKworVGh1IE1hciAxMiAwMDoxMDoyMyAxOTkyICBTdGVmYW4gUGV0cmkgIChwZXRyaUBqdXBpdGVyLmlici5jcy50dS1icy5kZSkKKworCSogY29uZmlndXJlIChweXJhbWlkKTogUmUtZW5hYmxlLgorCisJKiBweXIuaCAoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBSZXN0b3JlIGRlZmluaXRpb24gZnJvbSBnY2MtMS40MC4KKwkoUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6IERlZmluZSBhcyAxIGluc3RlYWQgb2YgZW1wdHkuCisKKwkqIHB5ci5oIChTVEFUSUNfQ0hBSU5fSU5DT01JTkdfUkVHTlVNKTogQWRkZWQuCisKKwkqIHB5ci5oIChUUkFNUE9MSU5FX1RFTVBMQVRFLCBUUkFNUE9MSU5FX1NJWkUsIFRSQU1QT0xJTkVfQUxJR05NRU5ULAorCUlOSVRJQUxJWkVfVFJBTVBPTElORSk6IEFkZGVkLCBpbnNwaXJlZCBieSBjb252ZXguaAorCisJKiBweXIuaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IE5ldyBkZWZpbml0aW9uLgorCisJKiBweXIubWQgKGluZGlyZWN0X2p1bXApOiBOZXcgcGF0dGVybi4KKworCSogbGliZ2NjMi5jIFtMX3RyYW1wb2xpbmVdOiBEb24ndCBpbmNsdWRlIGdzdGRkZWYuaCBpbiB0aGlzIGNhc2UuCisJKF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2spOiBDbG9uZWQgZGVmaW5pdGlvbiBmb3IgcHlyYW1pZAorCWZyb20gdGhhdCBmb3IgY29udmV4LgorCitUaHUgTWFyIDEyIDEzOjIzOjA1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29sbGVjdDIuYyAoRlJFQUQsIEZXUklURSk6ICN1bmRlZiBpZiBVU0cuCisKKwkqIHgtbWlwc3Y6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtaXBzLSotc3lzdik6IFVzZSBpdC4KKworCSogY2NjcC5jIChza2lwX3RvX2VuZF9vZl9jb21tZW50KTogTmV3IGFyZyBOT1dBUk4uICBDYWxsZXJzIGNoYW5nZWQuCisJKGRvX3hpZmRlZiwgZG9fZW5kaWYpOiBQYXNzIDEgZm9yIE5PV0FSTi4KKworCSogaTM4Ni5oLCBocDgwMC5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogSGFuZGxlIENPTlNUUlVDVE9SIG5vZGUuCisJKiBpMzg2LmggKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBPbmx5IGRlY2xzIGNhbiBiZSBnbG9iYWwuCisKKwkqIGNjY3AuYyAod2Fybl9pbXBvcnQpOiBOZXcgdmFyaWFibGUuCisJKGRvX2luY2x1ZGUpOiBUZXN0IHRoYXQuCisJKG1haW4pOiBIYW5kbGUgLVdpbXBvcnQuCisKKwkqIGhwODAwaHB1eC5oIChEQlhfREVCVUdHSU5HX0lORk8pOiAjdW5kZWYgaXQuCisJKiB4LWhwODAwaHB1eDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGhwODAwLWhwLWhwdXgqKTogVXNlIGl0LgorCisJKiBjb25maWcuc3ViOiBNYWtlIHRyaXRvbiBhbGlhcyBmb3Igc3lzdjMuCisKKwkqIGNvbGxlY3QyLmM6IElmIENST1NTX0NPTVBJTEUsICN1bmRlZiB0aGUgc3BlY2lhbCBPQkpFQ1RfRk9STUFUXyouCisKK1RodSBNYXIgMTIgMTA6MzU6NTAgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiAgVXNlIC5pIHN1ZmZpeCAoaW5zdGVhZCBvZiAuY3BwKSBmb3IgYWxsCisJcHJlcHJvY2Vzc29yIG91dHB1dCBmaWxlcy4KKwkoZXhlY3V0ZSk6ICBQcmludCBjb21tYW5kcyB1c2VkIHRvIGludm9rZSBwYXNzZXMgaWYgLXNhdmUtdGVtcHMuCisKKwkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IERlbGV0ZSAqLmksIG5vdCAqLmNwcC4KKwlEb24ndCBkZWxldGUgKi5jby4KKworVGh1IE1hciAxMiAwNzoxMzozMyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB4Y29mZi5oIChEQlhfRklOSVNIX1NZTUJPTCk6IFdoZW4gd3JpdGluZyBmdW5jdGlvbiBuYW1lLCBzdHJpcCBvZmYKKwlhbnkgc3RvcmFnZSBjbGFzcyBhdCB0aGUgZW5kLgorCitUaHUgTWFyIDEyIDA1OjE2OjQ5IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWcuc3ViICgtdHJpdG9uKik6IERlbGV0ZSB0aGlzIE9TIChpdCdzIHN5c3YzKS4KKwkqIGNvbmZpZ3VyZSAobTg4ay1kb2xwaGluLXN5c3YzKTogUmVuYW1lIGFsdGVybmF0aXZlLgorCSogeG0tbTg4a2RvbHBoLmg6IERlbGV0ZS4gIFVzZSB4bS1tODhrdjMuaCBpbnN0ZWFkLgorCSogeC1tODhrZG9scGg6IE5ldyBmaWxlLgorCQorVGh1IE1hciAxMiAwMDoxOToxNCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKG1vdnN0cnNpIHJlY29nbml6ZXJzKTogRml4IHJldmVyc2VkIG9wZXJhbmRzLgorCitUaHUgTWFyIDEyIDAwOjAxOjExIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKG1haW4pOgorCURvbid0IHJlcXVpcmUgbWFjaGluZV9zdWZmaXggZm9yIG1kX3N0YXJ0ZmlsZV9wcmVmaXggb3IgbWRfZXhlY19wcmVmaXguCisKKwkqIHRvcGxldi5jIChtYWluKTogRm9yY2UgZmxhZ19ub19pbmxpbmUgaWYgbm90IG9wdGltaXppbmcuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IElnbm9yZWQgbmFtZXMgZG9uJ3QgY291bnQgaW4gY2FzZSBVTklPTl9UWVBFLgorCisJKiBjcC1kZWNsLmMgKHB1c2h0YWcpOiBQdXNoIG9uIC0+dGFncyBhbmQgbWFrZSBUWVBFX1NUVUJfREVDTAorCWV2ZW4gaWYgdHlwZSBoYXMgbm8gdGFnIG5hbWUuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQWx3YXlzIGNhbGwgcmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogRm9yIFNRUlQsIGRvIG5vdGhpbmcuCisKKwkqIGJ5dGVvcmRlci5oOiBUZXN0IF9faTg2MF9iaWdfZW5kaWFuX18uCisKKwkqIG5zMzJrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFRlc3QgTk9fQUJTT0xVVEVfUFJFRklYX0lGX1NZTUJPTElDLgorCVRlc3QgQkFTRV9SRUdfTkVFREVEIGluc2lkZSBpbmRpcmVjdCBhZGRyZXNzIHRvby4KKwkqIHNlcXVlbnQuaCAoTk9fQUJTT0xVVEVfUFJFRklYX0lGX1NZTUJPTElDKTogRGVmaW5lZC4KKwkoU0VRVUVOVF9BRERSRVNTX0JVRywgU0VRVUVOVF9CQVNFX1JFR1MpOiAjaWYgMC4KKworV2VkIE1hciAxMSAyMjo1NTozOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChwdXNoX3Bhcm1fZGVjbCk6IENsZWFyIGltbWVkaWF0ZV9zaXplX2V4cGFuZCB0ZW1wb3JhcmlseS4KKwkqIHN0b3ItbGF5b3V0LmMgKGdldF9wZW5kaW5nX3NpemVzKTogRml4IHVwIFNBVkVfRVhQUl9DT05URVhULgorCSh2YXJpYWJsZV9zaXplKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENhbGwgdmFyaWFibGVfc2l6ZSwgbm90IHNhdmVfZXhwci4KKwlSZW5hbWUgbG9jYWwgYHZhcmlhYmxlX3NpemUnIHRvIGBzaXplX3ZhcmllcycuCisKK1dlZCBNYXIgMTEgMTg6NTM6MjMgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjb2xsZWN0Mi5jIChPQkpFQ1RfRk9STUFUX0NPRkYsIE9CSkVDVF9GT1JNQVRfUk9TRSk6CisJKE9CSkVDVF9GT1JNQVRfTk9ORSk6IFRocmVlIGFsdGVybmF0aXZlIHN0cmF0ZWdpZXMgZm9yIGZpbmRpbmcgaW5pdHMuCisJT0JKRUNUX0ZPUk1BVF9DT0ZGIGlzIGNvbXBsZXRlbHkgbmV3LgorCShpc19jdG9yX2R0b3IpOiBOZXcgZnVuY3Rpb24uCisJW09CSkVDVF9GT1JNQVRfTk9ORSwgT0JKRUNUX0ZPUk1BVF9ST1NFXSAoc2Nhbl9wcm9nX2ZpbGUpOgorCVVzZSBpc19jdG9yX2R0b3IuCisKKwkqIHgtcnM2MDAwIChDTElCKTogQWRkIC1sbGQuCisJKiB0LXJzNjAwMDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKHJzNjAwMC4uLik6IFVzZSB0aGF0IGZpbGUuCisKK1dlZCBNYXIgMTEgMTc6MzE6MTMgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChpbmNfZm9yX3JlbG9hZCk6IENhbGwgZ2VuX2FkZDJfaW5zbiB3aXRoIG5lZ2F0ZWQKKwljb25zdGFudCBpbnN0ZWFkIG9mIGdlbl9zdWIyX2luc24uCisKK1dlZCBNYXIgMTEgMTc6MzA6MzUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBGb3Igc2hpZnRzLCBhbHdheXMgdXNlIG9wMCB0eXBlLgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfYmluZGluZ3MpOgorCUxvYWQgdmlydHVhbF9pbmNvbWluZ19hcmdzX3J0eCB2aWEgYSBwc2V1ZG8gcmVnLgorCisJKiBtYXRoLTY4ODgxIChwb3cpOiBBZGQgbWlzc2luZyBwYXJlbnM7IHR5cG8gaW4gZnAgY29uc3RhbnQuCisKKwkqIGkzODZpc2MuaCAoTElCX1NQRUMpOiBBZGQgLWxnLgorCisJKiBsaWJnY2MyLmMgKF9fQ1RPUl9MSVNUX18sIF9fRFRPUl9MSVNUX18pOgorCURvbid0IGRlZmluZSBpZiBDVE9SX0xJU1RTX0RFRklORURfRVhURVJOQUxMWS4KKwkoX19idWlsdGluX3NhdmVyZWdzKTogSGFuZGxlIE5PX1VOREVSU0NPUkVTIGZvciBzcGFyYy4KKworCSogcGJiLmgsIHBiZC5oOiBOZXcgZmlsZXMgZnJvbSBNaWtlIEJsb29tLgorCSogY29uZmlndXJlIChtNjhrLXR0aTItKik6IFR1cm5lZCBiYWNrIG9uLgorCisJKiBjKys6IEFkZCBhIGNvbG9uIGNvbW1hbmQgaW4gY2FzZSBzeXN0ZW0gZG9lc24ndCBoYW5kbGUgIyEvYmluL3NoLgorCitNb24gTWFyIDExIDE5OjU0OjQzIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5tZCAoaW50ZWdlciB0cnVuY01OMik6IERlbGV0ZSBwYXR0ZXJucy4gIE5vdCBuZWVkZWQgb24gaTM4Ni4KKworV2VkIE1hciAxMSAxNjo1ODo1NiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4a3YzLmggKFNUQVJURklMRV9TUEVDLCBMSUJfU1BFQyk6IFNlYXJjaCBmb3IgY3J0e2JlZ2luLGVuZH0ubworCShET19HTE9CQUxfQ1RPUlNfQk9EWSwgQ1RPUlNfU0VDVElPTl9BU01fT1AsIEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsCisJRFRPUlNfU0VDVElPTl9BU01fT1ApOiBJbXBsZW1lbnQgbmV3IHN2cjMgc2NoZW1lLgorCitXZWQgTWFyIDExIDE2OjI0OjAzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogV2hlbiBjb3JyZWN0aW5nIGNvbnN0YW50IHJlc3VsdCBvZiBHRSwgTEUsIE5FLAorCW1ha2Ugc3VyZSB3ZSByZWFsbHkgaGF2ZSBhIGNvbnN0YW50IHJlc3VsdC4KKworCSogbnMzMmsubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBTdXBwb3J0IEdBU19TWU5UQVggYW5kIEdOWF9WMyBsaWtlIDEuNDAuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IFByb3Blcmx5IHVzZSBwcmV2IGltcGxpY2l0IGRlY2wgaW4gd2FybmluZy4KKworV2VkIE1hciAxMSAxNjowNToyMCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIHhjb2Zmb3V0Lm8uCisJKGRieG91dC5vLCBmaW5hbC5vLCB0b3BsZXYubywgdmFyYXNtLm8pOiBBZGQgeGNvZmYuaCBkZXBlbmRlbmN5LgorCSh4Y29mZm91dC5vKTogQWRkIHJ1bGUgdG8gYnVpbGQuCisKKwkqIHhjb2Zmb3V0LmM6IENoYW5nZSBuYW1lcyBvZiByczYwMDBfKl9zZWN0aW9uX25hbWUgdmFyaWFibGVzIHRvCisJeGNvZmZfKl9zZWN0aW9uX25hbWUsIGFuZCBtb3ZlIGRlZmluaXRpb25zIG9mIHRoZW0gaGVyZSBmcm9tCisJcnM2MDAwLmMuCisJKiB4Y29mZi5oOiBMaWtld2lzZSwgbW92ZSBkZWNsYXJhdGlvbnMgaGVyZSBmcm9tIHJzNjAwMC5oLgorCSogcnM2MDAwLmM6IERlbGV0ZSBkZWZpbml0aW9ucyBvZiByczYwMDBfKl9zZWN0aW9uX25hbWUgdmFyaWFibGVzLgorCSogcnM2MDAwLmg6IERlbGV0ZSBkZWNsYXJhdGlvbnMgb2YgcnM2MDAwXypfc2VjdGlvbl9uYW1lIHZhcmlhYmxlcy4KKworCSogcnM2MDAwLmMgKG91dHB1dF9lcGlsb2cpOiBBZGQgY29tbWVudCB0byBub3RlIGxhY2sgb2YgdHJhY2ViYWNrCisJdGFibGUgc3VwcG9ydC4KKwkqIHJzNjAwMC5oOiBSZWZpbmUgY29tbWVudCBleHBsYWluaW5nIEFTTV9TUEVDIGRlZmluaXRpb24uCisJKFhDT0ZGX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgorCShEQlhfQ09OVElOX0xFTkdUSCwgREJYX05PX1hSRUZTKTogTW92ZSB0byB4Y29mZi5oLgorCShBU01fRklMRV9TVEFSVCk6IFdoZW4gLWcsIGVtaXQgcHJpdmF0ZV9kYXRhX3NlY3Rpb24uCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBXaGVuIC1nLCBvdXRwdXQgLmxnbG9ibCBmb3Igc3RhdGljCisJZnVuY3Rpb25zLiAgQWxzbywgb3V0cHV0IC5mdW5jdGlvbiBkZWJ1ZyBpbmZvLgorCShBU01fT1VUUFVUX0NPTU1PTiwgQVNNX09VVFBVVF9MT0NBTCk6IEFkZCBic3Nfc2VjdGlvbiBjYWxsLgorCQorCSogZGJ4b3V0LmM6IEluY2x1ZGUgeGNvZmYuaCB3aGVuIFhDT0ZGX0RFQlVHR0lOR19JTkZPIGlzIGRlZmluZWQuCisJRGVmaW5lIGRlZmF1bHQgdmFsdWVzIGZvciBEQlhfREVDTF9TVEFCU19DT0RFLAorCURCWF9TVEFUSUNfQ09OU1RfVkFSX0NPREUsIERCWF9SRUdQQVJNX1NUQUJTX0NPREUsIGFuZAorCURCWF9SRUdQQVJNX1NUQUJTX0xFVFRFUi4gIFRoZXNlIGV4aXN0IHRvIGJlIG92ZXJyaWRlbiBmb3IgeGNvZmYuCisJSW5jbHVkZSBlbnRpcmUgZmlsZSBpZiBlaXRoZXIgREJYX0RFQlVHR0lOR19JTkZPIG9yCisJWENPRkZfREVCVUdHSU5HX0lORk8gaXMgZGVmaW5lZC4KKwkoZGJ4b3V0X3R5cGUpOiBBZGQgZWFybHkgZXhpdCBpZiBEQlhfVFlQRV9ERUZJTkVELCB1c2VkIGZvciB4Y29mZi4KKwkoZGJ4b3V0X3N5bWJvbCk6IFVzZSBEQlhfREVDTF9TVEFCU19DT0RFIGluc3RlYWQgb2YgTl9MU1lNIGZvcgorCXRhZ3MgYW5kIHR5cGVkZWZzLiAgVXNlIERCWF9TVEFUSUNfQ09OU1RfVkFSX0NPREUgaW5zdGVhZCBvZiBOX0ZVTgorCWZvciBzdGF0aWMgY29uc3QgdmFyaWFibGVzLiAgQWRkIERCWF9TVEFUSUNfQkxPQ0tfU1RBUlQgYW5kCisJREJYX1NUQVRJQ19CTE9DS19FTkQgYXJvdW5kIG91dHB1dCBvZiBzdGFiIGluZm8sIGZvciB4Y29mZiB1c2UuCisJKGRieG91dF9maW5pc2hfc3ltYm9sKTogVXNlIERCWF9GSU5JU0hfU1lNQk9MIGluc3RlYWQgaWYgZGVmaW5lZC4KKwkoZGJ4b3V0X3N5bXMsIGRieG91dF9wYXJtcyk6IE5vIGxvbmdlciBzdGF0aWMsIHJlZmVyZW5jZWQgZnJvbQorCXhjb2Zmb3V0LmMuCisJKGRieG91dF9wYXJtcyk6IFVzZSBEQlhfUkVHUEFSTV9TVEFCU19DT0RFIGluc3RlYWQgb2YgTl9SU1lNLiAgVXNlCisJREJYX1JFR1BBUk1fU1RBQlNfTEVUVEVSIGluc3RlYWQgb2YgJ1AnLgorCShkYnhvdXRfcmVnX3Bhcm1zKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIGZpbmFsLmM6IEFsc28gaW5jbHVkZSBnc3RhYi5oIGlmIFhDT0ZGX0RFQlVHR0lOR19JTkZPIGRlZmluZWQuCisJSW5jbHVkZSB4Y29mZi5oIGlmIFhDT0ZGX0RFQlVHR0lOR19JTkZPIGRlZmluZWQuCisJKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogQ2FsbCB4Y29mZm91dF9vdXRwdXRfZmlyc3Rfc291cmNlX2xpbmUKKwl3aGVuIFhDT0ZGX0RFQlVHLiAgU2V0IG5leHRfYmxvY2tfaW5kZXggaWYgWENPRkZfREVCVUcuCisJKGZpbmFsX2VuZF9mdW5jdGlvbik6IENhbGwgeGNvZmZvdXRfZW5kX2Z1bmN0aW9uIGlmIFhDT0ZGX0RFQlVHLgorCUNhbGwgeGNvZmZfZW5kX2VwaWxvZ3VlIGlmIFhDT0ZGX0RFQlVHLgorCShmaW5hbF9zY2FuX2luc24pOiBDYWxsIHhjb2Zmb3V0X2JlZ2luX2Z1bmN0aW9uLAorCXhjb2Zmb3V0X2JlZ2luX2Jsb2NrLCBhbmQgeGNvZmZvdXRfZW5kX2Jsb2NrIGlmIFhDT0ZGX0RFQlVHLgorCShvdXRwdXRfc291cmNlX2xpbmUpOiBBbHNvIGNhbGwgZGJ4b3V0X3NvdXJjZV9maWxlIGlmIFhDT0ZGX0RFQlVHLgorCSogZmxhZ3MuaDogRGVmaW5lIFhDT0ZGX0RFQlVHLiAgQWxzbyBkZWNsYXJlCisJdXNlX2dkYl9kYnhfZXh0ZW5zaW9ucyBpZiBYQ09GRl9ERUJVR0dJTkdfSU5GTy4KKwkqIHRvcGxldi5jOiBBbHNvIGRlY2xhcmUgdXNlX2dkYl9kYnhfZXh0ZW5zaW9ucyBpZgorCVhDT0ZGX0RFQlVHR0lOR19JTkZPLiAgSW5jbHVkZSB4Y29mZi5oIGluIFhDT0ZGX0RFQlVHR0lOR19JTkZPLgorCShjb21waWxlX2ZpbGUpOiBBbHNvIGNhbGwgZGJ4b3V0X2luaXQsIGFuZCBkYnhvdXRfZmluaXNoIGlmCisJWENPRkZfREVCVUcuCisJKHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbik6IEFsc28gY2FsbCBkYnhvdXRfc3ltYm9sIGlmCisJWENPRkZfREVCVUcuCisJKHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbik6IEFsc28gY2FsbCBkYnhvdXRfc3ltYm9sIGlmCisJWENPRkZfREVCVUcuCisJKG1haW4pOiBBZGQgc3VwcG9ydCBmb3IgcmVjb2duaXppbmcgLWcgd2hlbiBYQ09GRl9ERUJVR0dJTkdfSU5GTy4KKwkqIHZhcmFzbS5jOiBJbmNsdWRlIHhjb2ZmLmggaWYgWENPRkZfREVCVUdHSU5HX0lORk8uCisJKGFzc2VtYmxlX3ZhcmlhYmxlKTogQWxzbyBjYWxsIGRieG91dF9zeW1ib2wgd2hlbiBYQ09GRl9ERUJVRy4KKwlDaGFuZ2UgYWxsIHJldHVybnMgdG8gZ290byBmaW5pc2guICBBdCBmaW5pc2ggbGFiZWwsCisJY2FsbCBkYnhvdXRfc3ltYm9sIGlmIFhDT0ZGX0RFQlVHLgorCisJKiBkYnhzdGNsYXNzLmg6IE5ldyBmaWxlLiAgRGVmaW5lIFhDT0ZGIHNwZWNpZmljIHN0b3JhZ2UgY2xhc3Nlcy4KKwkqIHhjb2ZmLmg6IE5ldyBmaWxlLCBmb3IgWENPRkYgc3VwcG9ydC4gIEluY2x1ZGVkIGJ5IHhjb2Zmb3V0LmMsCisJZGJ4b3V0LmMsIGZpbmFsLmMsIHRvcGxldi5jLCBhbmQgdmFyYXNtLmMuCisJKiB4Y29mZm91dC5jOiBOZXcgZmlsZSBmb3IgWENPRkYgc3VwcG9ydC4gIE1vc3Qgb2YgdGhlIHN1cHBvcnQgaXMKKwlpbXBsZW1lbnRlZCBieSBkYnhvdXQuYywgdGhpcyBqdXN0IGluY2x1ZGVzIHN0dWZmIHRoYXQgY2FuIG5vdCBiZQorCWVhc2lseSBwZXJmb3JtZWQgd2l0aGluIGRieG91dC5jLgorCisJKiB0b3BsZXYuYyAoc3RydWN0IFdfb3B0aW9ucyk6IEFkZCBlbnRyeSBmb3Igd2Fybl9pbmxpbmUsIHNvIHVzZXIKKwljYW4gdHVybiB0aGlzIHdhcm5pbmcgb24uCisKK1dlZCBNYXIgMTEgMTU6MTE6NDIgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogRml4IHR5cG8gKEltb2RlIGluc3RlYWQgb2YgVEltb2RlKSBpbgorCUhBVkVfc3VidGkzIGNhc2UuCisKK1dlZCBNYXIgMTEgMTM6MTA6MjAgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5oIChSRUdfQUxMT0NfT1JERVIpOiBNYWtlICVnMyBtb3JlIGRlc2lyYWJsZS4KKworV2VkIE1hciAxMSAxMjozNToxMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChlZ3JlcCBjbWQpOiBEZWxldGUgbWlzcGxhY2VkIGAjZVtubF0nLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBUcnkgdG8gZml4IGxhc3QgY2hhbmdlLgorCisJKiBleHBtZWQuYyAoaW5pdF9leHBtZWQpOiBVc2UgYmlnLCB1Z2x5IGZhY3RvciBpbiBtdWx0X2lzX3ZlcnlfY2hlYXAuCisKK1dlZCBNYXIgMTEgMDg6MDA6MTggMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogVXNlIHNkYm91dF90eXBlcyB0byBjbGVhciB0aGUKKwlhbm9ueW1vdXMgdHlwZXMgcXVldWUgaWYgYW55LgorCSogc2Rib3V0LmM6IENvcnJlY3Qgc3BlbGxpbmcgb2Ygc2Rib3V0X2RlcXVldWVfYW5vbnltb3VzX3R5cGVzLgorCisJKiBnZW5hdHRydGFiLmMgKGF0dHJfc3RyaW5nKTogRG9uJ3QgYXNzdW1lIGEgdGVybWluYXRpbmcgbnVsbC4KKworV2VkIE1hciAxMSAwNzowNTozOCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBEZWxldGUgZXJyb25lb3VzIHRlc3Qgb2YKKwliYXNpY19ibG9ja19uZWVkcy4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBLbm93IHRoYXQgd2Ugd2lsbCBvYnRhaW4gYSBjb25zdGFudAorCWlmIHdlIHdlcmUgcGFzc2VkIGEgQ09NUE9VTkRfRVhQUiB3aG9zZSBzZWNvbmQgb3BlcmFuZCBpcyBjb25zdGFudC4KKwlGb2xkIHRoZSBNSU5VU19FWFBSIHdlIG1ha2UgZm9yIGNhc2VzaS4KKworCSogcmVvcmcuYyAodXBkYXRlX2Jsb2NrX2Zyb21fc3RvcmUpOiBEZWxldGVkLgorCSh1cGRhdGVfYmxvY2spOiBBbHdheXMgbGVhdmUgVVNFOyBkb24ndCB0cnkgdG8gdXBkYXRlIGxpdmUgcmVncy4KKworCSogZXhwbG93LmMgKGNvcHlfdG9fc3VnZ2VzdGVkX3JlZyk6IEFkZCBuZXcgYXJnIGZvciBtb2RlIHRvIHVzZS4KKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogUGFzcyBuZXcgYXJnIHRvIGNvcHlfdG9fc3VnZ2VzdGVkX3JlZy4KKworCSogcmVsb2FkMS5jIChzZXRfbGFiZWxfb2Zmc2V0cywgcmVsb2FkX2FzX25lZWRlZCk6IENvbnNpc3RlbnRseQorCWlnbm9yZSBub24tZWxpbWluYWJsZXMgd2hlbiBjb21wdXRpbmcgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldC4KKworCSogcnM2MDAwLm1kIChzdWJzaTMpOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2FsbCB0byBmb3JjZV9yZWcuCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9nKTogU2VwYXJhdGUgc2V0dGluZyBMUiBmcm9tIGxvYWRpbmcKKwlpdCBmcm9tIG1lbW9yeSBpbiBzb21lIGNhc2VzLgorCUJyYW5jaCB0byBGUCByZXN0b3JlIHJvdXRpbmUgaW5zdGVhZCBvZiBjYWxsaW5nIGl0LgorCisJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IENDMCBpcyBub3QgbGl2ZSB3aGVuIHdlIGRlbGV0ZSBhIGRlYWQKKwlpbnNuLgorCSogY3NlLmMgKGRlbGV0ZV9kZWFkX2Zyb21fY3NlKTogQW4gaW5zbiBzZXR0aW5nIENDMCBpcyBub3QgbGl2ZQorCWlmIHRoZSBuZXh0IGluc24gZG9lc24ndCByZWZlcmVuY2UgQ0MwLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBJZiB3ZSBzZWUgYSBuYXJyb3cgQU5EIHdpdGggYSBjb25zdGFudCwgY2hlY2sgaWYKKwl3ZSBoYXZlIHNlZW4gYSB3aWRlciBBTkQuCisKKwkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IEFsbG93IFNVQlJFRyBvZiBub24tdGlhYmxlIHJlZ3MgaWYgd2UKKwlhcmUgZ29pbmcgdG8gZG8gaXMgY29weSBpdCB0byBDQzAuCisKKwkqIHJlbG9hZC5jIChmaW5kX3NlY29uZGFyeV9yZWxvYWQpOiBJZiBYIGlzIGEgcHNldWRvIHdpdGggYW4KKwllcXVpdmFsZW50IE1FTSwgdXNlIHRoZSBNRU0gdG8gc2VlIGlmIGEgc2Vjb25kYXJ5IHJlbG9hZCBpcyBuZWVkZWQuCisJRG9uJ3QgY2FsbCBSRUdfQ0xBU1NfRlJPTV9MRVRURVIgZm9yICdyJy4KKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBIYW5kbGUgcmVsb2FkaW5nIHBzZXVkb3MKKwl3aXRoIGVxdWl2YWxlbnQgTUVNIHdoZW4gd2UgaGF2ZSBzZWNvbmRhcnkgcmVsb2FkczsgdXNlIHRoZSBNRU0KKwl3aGVuIHJlcXVpcmVkLgorCisJKiByb21wLm1kIChyZWxvYWRfb3V0c2kpOiBQYXR0ZXJuIHNob3VsZCBiZSBhIHNpbmdsZSBQQVJBTExFTAorCXdob3NlIHNlY29uZCBjb21wb25lbnQgaXMgYSBDTE9CQkVSLgorCitXZWQgTWFyIDExIDAzOjExOjI2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGZpbmRfYV9maWxlLCBkb19zcGVjXzEpOiBBbHdheXMgb2JleSByZXF1aXJlX21hY2hpbmVfc3VmZml4LgorCShtYWNoaW5lX2V4cGxpY2l0KTogVmFyIGRlbGV0ZWQuCisKK1R1ZSBNYXIgMTAgMjM6MTI6MjQgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kICg2ODAwMCBzcGVjaWFsIHNoaWZ0cyk6IE5vIGxvbmdlciBhY2NlcHQgYSBzaGlmdCBjb3VudCAKKwlvZiAxNi4gIERlbGV0ZSBzdXBwb3J0IGZvciBzaGlmdHMgYnkgMTYgcGxhY2VzLgorCShzaGlmdCBieSAxNiBiaXRzKTogTmV3IHBhdHRlcm5zIHdoaWNoIGFwcGx5IHRvIGFsbCA2OGsgbW9kZWxzLgorCSogbTY4ay5oIChSVFhfQ09TVFMpOiBTaGlmdHMgYnkgMTYgYXJlIGNoZWFwLgorCitUdWUgTWFyIDEwIDIwOjM3OjMxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZHdhcmZvdXQuYyAobG9jYXRpb25fb3JfY29uc3RfdmFsdWVfYXR0cmlidXRlKToKKwlSZWVuYWJsZSBjaGFuZ2VzIGRpc2FibGVkIG9uIEZlYiAyMS4KKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzKTogTGlrZXdpc2UuCisKKwkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogSGFuZGxlIChtZW0gKGNvbnN0Li4uKSkuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IExpa2V3aXNlLgorCisJKiB4bS1pMzg2aXNjLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpMzg2LSotaXNjKik6IFVzZSBpdC4KKworCSogaHAzMjAuaCAoTURfU1RBUlRGSUxFX1BSRUZJWCk6IERlbGV0ZWQuCisKKwkqIG02OGsuaCAoUlRYX0NPU1RTKTogSWYgTVVMVCBpcyBhIHNoaWZ0LCBqdW1wIHRvIHNoaWZ0IGNhc2UuCisKKwkqIHN1bjMuaCAoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmVkLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgc2Rib3V0X2RlcXVldWVfYW5vbnltb3VzX3R5cGVzCisJZXZlbiBpZiB3ZSBkb24ndCBvdXRwdXQgYXNzZW1ibGVyIGNvZGUuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluIGBpZiAoZm9vKSBiYXI7IGVsc2UgYnJlYWs7JyBvcHRpbWl6YXRpb24sCisJaW5jbHVkZSBpbiByYW5nZTEgYW5kIHJhbmdlMiBhbnkgbGluZSBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcuCisKKwkqIGMtdHlwZWNrLmMgKHNwZWxsaW5nX2xlbmd0aCk6IEluaXRpYWxpemUgYHNpemUnLgorCShQVVNIX1NQRUxMSU5HKTogYHNwZWxsaW5nX3NpemUnIGlzIG1lYXN1cmVkIGluIGVsZW1lbnRzLgorCShnZXRfc3BlbGxpbmcpOiBVc2UgeG1hbGxvYyBpZiB0aGVyZSBpcyBubyBidWZmZXIgeWV0LgorCitUdWUgTWFyIDEwIDIwOjI1OjU2IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKToKKwlTZXQgdXAgTEFCRUxfTkFNRSBvZiBsYWJlbCBjb3BpZXMuCisKKwkqIHNwYXJjLm1kOiBDbGVhbiB1cCBhdHRyaWJ1dGUgc2V0dGluZ3MuICBBZGQgZGVmYXVsdCBsZW5ndGggb2YgMgorCWZvciBpbnNucyBvZiB0eXBlIG11bHRpLiAgTWFrZSBzdXJlIGFsbCBpbnNucyBoYXZlIGNvcnJlY3QgdHlwZSBhbmQKKwlsZW5ndGggYXR0cmlidXRlIHZhbHVlcy4KKworVHVlIE1hciAxMCAxOToxMzoxOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jICh3YXJuX3BhcmVudGhlc2VzKTogRGVmYXVsdCBpcyAwLgorCShjX2RlY29kZV9vcHRpb24pOiAtV2FsbCBpbXBsaWVzIC1XcGFyZW50aGVzZXMuCisKK1R1ZSBNYXIgMTAgMTc6NDk6NTEgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGhwODAwLm1kIChzaE5hZGQgcmVjb2duaXplcnMpOiBQdXQgdGhlIE1VTFQgZmlyc3QsIHRvIG9iZXkgaW5zbgorCWNhbm9uaWNhbGl6YXRpb24gcnVsZXMuCisKKwkqIGhwODAwLm1kIChzdWJzaTMpOiBEb24ndCBoYW5kbGUgY29uc3RhbnRzIGZvciBvcGVyYW5kIDIsIGJ1dAorCWRvIGhhbmRsZSB0aGVtIGZvciBvcGVyYW5kIDEsIGZvciB0aGUgc3ViaSBpbnNuLgorCisJKiBocDgwMC5tZCAoY29tcGFyZSBpbnRvIG9yZGluYXJ5IHJlZyk6IFVzZSAiYXJpdGgxMV9vcGVyYW5kIiwgbm90CisJImFyaXRoX29wZXJhbmQiIGZvciBvcGVyYW5kIDIuICBVc2UgYEknLCBub3QgYEonIGFzIGNvbnN0cmFpbnQuCisJRG9uJ3QgY2hhbmdlIHRoZSBjb25zdGFudCBpbiB0aGUgb3V0cHV0IGNvZGUgKGkuZS4gdW5kbyBNYXIgMTAKKwljaGFuZ2UpLgorCSogaHA4MDAuYyAoYXJpdGgxMV9vcGVyYW5kKTogTmV3IHByZWRpY2F0ZSBmdW5jdGlvbi4gIEZpeCBjb21tZW50LgorCisJaHA4MDAubWQgKG11bHNpMyk6IERvbid0IGhhbmRsZSBDT05TVF9JTlQgc3BlY2lmaWNhbGx5LCByZWx5IG9uCisJbWFjaGluZSBpbmRlcGVuZGVudCBjb2RlLgorCSogaHA4MDAuaCAoUlRYX0NPU1QpOiBEZWZpbmUuCisJKiBocDgwMC5jIChBQlMsIG11bF9vcGVyYW5kcywgZW1pdF9tdWxfYnlfY29uc3RhbnQpIFJlbW92ZS4KKwkobXVsX2J5X2NvbnN0YW50X2F1eCwgdGVzdF9mYWN0b3JfYW5kX291dHB1dCk6IFJlbW92ZS4KKworCSogaHA4MDAubWQgKGFkZHNpMyk6IFVzZSAicmVnaXN0ZXJfb3BlcmFuZCIgZm9yIG9wZXJhbmQgMSwgbm90CisJImFyaXRoX29wZXJhbmQiLgorCisJKiBocDgwMC5tZDogQ2xlYW4gdXAgc3BhY2luZyBhbmQgY29tbWVudHMgaW4gYSBmZXcgcGxhY2VzLgorCisJKiBocDgwMC5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBIYW5kbGUgYXV0byBpbmNyZW1lbnQgYW5kIGF1dG8KKwlkZWNyZW1lbnQuICBSZW1vdmUgdW51c2VkIGVudW1zLiAgVGVzdCBmb3IgZWl0aGVyIG9wZXJhbmQgYmVpbmcgYQorCVJFR09QIGluc3RlYWQgaWYgUk5ET1AsIHNpbmNlIHdlIHJlcXVpcmUgYXQgbGVhc3Qgb25lIG9wZXJhbmQgdG8KKwliZSBhIHJlZ2lzdGVyLiAgUGFzcyB0aGUgTUVNIGFkZHJlc3MgdG8gZmluZF9hZGRyX3JlZywgbm90IHRoZQorCWVudGlyZSBNRU0gcnR4IChpbiB0d28gcGxhY2VzKS4KKworCSogaHA4MDAuaCAoV09SRFNfQklHX0VORElBTik6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisJKFJUWF9DT1NUKTogUmV0dXJuIGNvc3Qgb2YgYSBQTFVTLCB0byBpbmRpcmVjdGx5IGdpdmUgdGhlIHJpZ2h0CisJY29zdCBmb3IgdGhlIHNoTmFkZCBpbnNucy4gIEFkanVzdCB0aGUgY29zdCBmb3IgZGl2aXNpb24uCisKK1R1ZSBNYXIgMTAgMTU6NTc6MjQgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZDogQWRkIHBhdHRlcm4gZm9yIG9wdGltaXppbmcgYml0ZmllbGQgY29tcGFyZXMuICBUaGlzCisJcGF0dGVybiB3YXMgYWNjaWRlbnRseSBsb3N0IHdoZW4gb3RoZXIgKG5vdy1vYnNvbGV0ZSkgYml0ZmllbGQKKwlwYXR0ZXJucyB3ZXJlIHJlbW92ZWQuCisKKwkqIHNwYXJjLmMgKGFyaXRoMzJfb3BlcmFuZCk6IERlbGV0ZWQuCisJKiBzcGFyYy5tZCAobW92c3Ryc2kpOiBOb3cgdXNlcyBub25tZW1vcnlfb3BlcmFuZCBmb3IgbGVuZ3RoLgorCisJKiBzcGFyYy5jIChvdXRwdXRfYXJjX3Byb2ZpbGVyKTogRW1pdCBpbnNucyBmcm9tIGZpcnN0IHRvIGxhc3QKKwlpbnN0ZWFkIG9mIGxhc3QgdG8gZmlyc3QsIHNpbmNlIGl0IGlzIG11Y2ggY2xlYXJlci4gIEVsaW1pbmF0ZQorCXByb2ZpbGVyX3RhcmdldCwgc2luY2UgaXQgcmVzdWx0ZWQgaW4gaWxsZWdhbCBydHggc2hhcmluZy4KKworCSogc3BhcmMuYyAobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IE1ha2UgLWZQSUMgd29yayBhZ2FpbiwgcmUgdGhlCisJRmViIDI3IGNzZS5jIExPX1NVTSBmaXguICBQdXQgYWRkcmVzc2VzIGluc2lkZSBVTlNQRUMgd2hlbiBsb2FkaW5nCisJdGhlbSB0byBlbnN1cmUgdGhhdCBjc2Ugd29uJ3QgbWlzdGFrZW5seSBvcHRpbWl6ZSB0aGVtLgorCSogc3BhcmMubWQ6IFR3byBuZXcgcGF0dGVybnMsIHRvIG1hdGNoIChISUdIIChVTlNQRUMgKC4uKSkpIGFuZAorCShMT19TVU0gKHJlZykgKFVOU1BFQyAoLi4pKSkgYXMgZ2VuZXJhdGVkIGFib3ZlLgorCitUdWUgTWFyIDEwIDE0OjU4OjE5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbWlwcy1uZXdzLmggKEFTTV9TUEVDKTogTW92ZSAle0cqfSBvdXRzaWRlIG9mIC1tZ2FzIGNvbmRpdGlvbmFsLgorCSogbndzMzI1MHY0LmgsIHhtLW53czMyNTB2NC5oLCB4LW53czMyNTB2NDogTmV3IGZpbGVzLiAgRnJvbSBjcGguCisKKwkqIGk4NjAuYyAoc2Ztb2RlX2NvbnN0YW50X3RvX3Vsb25nKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IEluaXRpYWxpemUgYGxhYmVsJy4KKworCSogM2IxLmggKEhBVkVfQVRFWElUKTogI3VuZGVmIHRoaXMuCisKKwkqIGhwODAwLm1kIChjb21wYXJlIGludG8gb3JkaW5hcnkgcmVnKTogTWFrZSBsYXJnZSBpbnRzICJuZWdhdGl2ZSIuCisKKwkqIGhwODAwaHB1eC5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaHA4MDAtKi1ic2QqKTogUmVuYW1lZCBmcm9tIGhwODAwLSotKi4KKwkoaHA4MDAtKi1ocHV4Kik6IE5ldyBjb25maWd1cmF0aW9uLgorCitUdWUgTWFyIDEwIDExOjAzOjQ3IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChpbml0X2V4cG1lZCk6IE1ha2UgdGhlIGxlYSBwYXR0ZXJuIGluIHRoZSBjYW5vbmljYWwgd2F5LgorCitUdWUgTWFyIDEwIDEwOjMyOjMwIDE5OTIgIFRvbSBXb29kICAod29vZEBoYWwpCisKKwkqIG04OGsuaCAoQVNNX09VVFBVVF97Q09NTU9OLExPQ0FMfSk6IENvbXB1dGUgc2l6ZSBjb25zaXN0ZW50bHkuCisKK1R1ZSBNYXIgMTAgMDc6NDE6MDkgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzLCBjYXNlICdFJyk6IEZpeCB0eXBvLgorCisJKiBmdW5jdGlvbi5jIChzZXRqbXBfcHJvdGVjdCk6IERvbid0IHB1dCB2YXJzIGZyb20gaW5saW5lIGZ1bmN0aW9ucworCW9uIHRoZSBzdGFjay4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRG9uJ3QgdXNlIGhvc3QgaW50ZWdlcnMgZm9yCisJYm91bmRzIGFuZCBpbmRleCBjb21wdXRhdGlvbjsgdXNlIHRyZWVzIGluc3RlYWQuCisJSWYgc3BlY2lmeWluZyBpbmRleCBpbiBhcnJheSB3aXRoIHVuc2V0IGJvdW5kcywgYXNzdW1lIGxvd2VyIGJvdW5kCisJb2YgemVybyBhbmQgY2hlY2sgc3BlY2lmaWVkIGluZGV4IGFnYWluc3QgemVyby4KKworCSogdHJlZS5oIChtb2RlX2Zvcl9zaXplKTogRG9uJ3QgZGVjbGFyZSBoZXJlLgorCSogbWFjaG1vZGUuaCAobW9kZV9mb3Jfc2l6ZSk6IERlY2xhcmUgaGVyZSBpbnN0ZWFkLgorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogVHJ5IHRvIHNwbGl0IFRIUkVBRCBpbW1lZGlhdGVseQorCXNvIHdlIGRvbid0IGdldCBjb25mdXNlZCBpZiBpdCBnZXRzIHNwbGl0IGxhdGVyLgorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogRG9uJ3QgdGFrZSBhZGQgZnJvbSBsb29wCisJaGVhZCBpZiB0aGUgaW5jcmVtZW50IGFtb3VudCBkZXBlbmRzIG9uIHRoZSB0YXJnZXQgcmVnaXN0ZXIsIHNpbmNlCisJd2UgY2FuJ3QgdW5kbyB0aGUgb3BlcmF0aW9uLgorCitNb24gTWFyICA5IDEyOjE4OjA0IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogdW5yb2xsLmMgKGZpbmFsX2Jpdl92YWx1ZSk6IEZhaWwgaWYgdGhlIGJpdiBpcyBub3QgTU9ERV9JTlQuCisKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3RlcywgY2FzZSBSRUdfREVBRCk6IENhbGwgcnR4X2VxdWFsX3AKKwl0byB2ZXJpZnkgdGhhdCBpdCB3YXMgdGhlIHNldCB0aGF0IG1vZGlmaWVkIHRoZSByZWdpc3RlciwgYW5kCisJbm90IGEgY2xvYmJlci4KKworU3VuIE1hciAgOCAyMjoyMDoyNCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGMtcGFyc2UueSxjLWxleC5jLGNwLWhhc2guaCxjcC1wYXJzZS55LGNwLXNwZXcuYyxvYmpjLXBhcnNlLnk6CisJUmVuYW1lIGBBU00nIHRvIGBBU01fS0VZV09SRCcgdG8gYXZvaWQgdHJvdWJsZSB3aXRoIFNDTworCTxzeXMvc2lnbmFsLmg+LgorCitTdW4gTWFyICA4IDIzOjE2OjM3IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlcywgbW92ZV9ieV9waWVjZXNfbmluc25zKTogUmVtb3ZlIE1hcmNoIDQgYW5kCisJTWFyY2ggNSBjaGFuZ2VzLiAgU2V0IG1heF9zaXplIHRvIE1PVkVfTUFYICsgMSBpbnN0ZWFkLgorCitTdW4gTWFyICA4IDE3OjA4OjU3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChkb190YWJsZWp1bXApOiBOZXcgYXJnIE1PREUuCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IFBhc3MgdGhhdCBhcmcuCisKKwkqIGMtZGVjbC5jIChwdXNodGFnKTogUHVzaCBldmVuIGFub255bW91cyB0eXBlcyBvbiB0YWdzIGxpc3QuCisJKHBhcm1saXN0X3RhZ3Nfd2FybmluZyk6IEhhbmRsZSBhbm9ueW1vdXMgdHlwZXMgaW4gdGhlIGxpc3QuCisKK1N1biBNYXIgIDggMTU6MDg6NTggMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2bWFjaC5oIChwZXJmb3JtX2ZpeGRmc2kpOiBSZW5hbWUgZnJvbSAqX2ZpeF90cnVuZGZzaTIuCisJUmVzdG9yZSBmbG9hdCBjb250cm9sIHdvcmQgY29ycmVjdGx5LgorCSogaTM4NnJvc2UuaCAocGVyZm9ybV9maXhkZnNpKTogTGlrZXdpc2UuCisKKwkqIGkzODYuaCAoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IEFsbG93IGZsb2F0IGNvbnN0YW50cywKKwlldmVuIGlmIC1tc29mdC1mbG9hdCBpcyB1c2VkOiByZWctc3RhY2suYyBtYXkgZW1pdCBhbiBpbnNuIHRvIGxvYWQKKwl0aGUgZnVuY3Rpb24gdmFsdWUgcmVnaXN0ZXIgd2l0aCAwLjAuCisKKwkqIGkzODYubWQgKGJpdCB0ZXN0IGluc25zKTogRG9uJ3QgYWxsb3cgbWVtb3J5IG9wZXJhbmRzIGFzIHRoZQorCWZpcnN0IGFyZ3VtZW50IG9mIHRoZSB6ZXJvX2V4dHJhY3QuCisKKwkqIGkzODZpc2MuaCAoUkVUVVJOX1BPUFNfQVJHUyk6IENvbW1lbnQgdGhpcyBvdXQ6IElTQyB1c2VzIHRoZQorCXN0YW5kYXJkIGRlZmluaXRpb24uCisKKwkqIGkzODZzY28uaCAoU1RBUlRGSUxFX1NQRUMpOiBVc2UgY3J0YmVnaW4uby4KKwkoRU5ERklMRV9TUEVDKTogVXNlIGNydGVuZC5vLgorCShDUFBfU1BFQyk6ICN1bmRlZiBiZWZvcmUgZGVmaW5pbmcuCisJKFJFVFVSTl9QT1BTX0FSR1MpOiBDYWxsZXIgcG9wcyBhcmdzIG9uIFNDTy4KKworU3VuIE1hciAgOCAxNDoyNToxNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogRmF0YWwgZXJyb3IgaWYgc3JjZGlyIGhhcyBhbHJlYWR5IGJlZW4gY29uZmlndXJlZC4KKwlSZW1vdmUgcGVyaW9kcyBmcm9tIGVycm9yIG1lc3NhZ2VzLgorCisJKiAzYjEuaCwgbW90MzMwMC5oIChBU01fT1VUUFVUX09QQ09ERSk6IENoYW5nZSBzd2FwIHRvIHN3YXAudy4KKwkoU0dTX1NXQVBfVyk6IERlbGV0ZWQuCisJKiBtNjhrc2dzLmggKEFTTV9PVVRQVVRfT1BDT0RFKTogSWYgU0dTX1NXQVBfVywgY2hhbmdlIHN3YXAgdG8gc3dhcC53LgorCSogbTY4ay5tZDogRGVsZXRlIGFsbCBTR1NfU1dBUF9XIGNvbmRpdGlvbmFscy4KKworCSogbTY4ay5tZCAoc2hpZnQgdXNpbmcgc3dhcCwgZGJyYSBwYXR0ZXJucyk6IENoYW5nZSBjbHJ3IHRvIGNsciUudy4KKworCSogaHA4MDAuaCAob3V0cHV0X2dsb2JhbF9hZGRyZXNzKTogVXNlIGAtJyBmb3IgUExVUyBvZiBuZWcgaW50ZWdlci4KKwlDbGVhbiB1cCBzcGFjaW5nIGFuZCBicmFjZXMgaW4gc2V2ZXJhbCBwbGFjZXMgaW4gZmlsZS4KKworCSogYnl0ZW9yZGVyLmggKGh0b25zKTogVXNlIHVuc2lnbmVkIGludCBmb3IgYXJnIHR5cGUuCisKK1N1biBNYXIgIDggMDc6MzY6NDQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0EnKTogTmV3IGNhc2UuCisJKiByczYwMDAubWQgKHNyaSk6IE5ldyAlQSB0byB1c2UgInNsaSIgZm9yIGNvdW50IG9mIHplcm8gdG8gd29yaworCWFyb3VuZCBidWcgaW4gUlMvNjAwMCBhc3NlbWJsZXIuCisKKwkqIGNvbmZpZy5zdWIgKG9zKTogQWRkICJhb3MiIHRvIGJhc2ljIGxpc3QsIG5vIGxvbmdlciB0aGUgc2FtZQorCWFzICJic2QiOyAgImFjaXMiIGlzIGFuIGFsdGVybmF0ZSBmb3IgImFvcyIuCisJKHJvbXApOiBObyBsb25nZXIgaGFzIGEgZGVmYXVsdCBzeXN0ZW0uCisJKiBjb25maWd1cmUgKHJvbXAtKi1hb3MqKTogUmVuYW1lZCBmcm9tIHJvbXAtKi1ic2QqOyBCU0QgbWVhbnMgCisJcmVhbCBCU0QgKDQuMyBUYWhvZSspLCBBT1MgbWVhbnMgSUJNIHN5c3RlbS4KKworCSogTWFrZWZpbGUuaW4gKGNydGJlZ2luLm8sIGNydGVuZC5vKTogVXNlIC1vIGZvciBvdXRwdXQgaW5zdGVhZCBvZgorCXB1dHRpbmcgaW4gY3J0c3R1ZmYubyBhbmQgcmVuYW1pbmcgdG8gZGVzaXJlZCBuYW1lLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFJlLWNoZWNrIGVsaW1pbmFiaWxpdHkgb2YgcmVnaXN0ZXJzIG9uIGVhY2gKKwlyZWxvYWQgcGFzcy4KKworCSoganVtcC5jIChtYXJrX2p1bXBfbGFiZWwpOiBNYWtlIG11bHRpcGxlIFJFR19MQUJFTCBub3RlcyBpZgorCW1vcmUgdGhhbiBvbmUgbGFiZWwgaXMgbWVudGlvbmVkIGluIGFuIGluc24uCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFByb3Blcmx5IGluaXRpYWxpemUKKwljb25zdF9lcXVpdl9tYXAgZm9yIHRoZSBlcXVpdmFsZW50cyBvZiBBUCBhbmQgRlAuCisKKwkqIHJzNjAwMC5oIChUQVJHRVRfTUVNX0ZVTkNUSU9OKTogRGVmaW5lLgorCitTdW4gTWFyICA4IDAwOjA1OjQ3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBDb3B5IGZ1bmN0aW9uIHR5cGUgYmVmb3JlIGNoYW5naW5nIGl0LgorCSogdHJlZS5jIChidWlsZF90eXBlX2NvcHkpOiBOZXcgc3Vicm91dGluZS4KKworCSogdC1uZXh0IChMSUJHQ0MxKTogQXNzaWduZWQsIGluc3RlYWQgb2YgTElCR0NDLgorCisJKiBtNjhrLmggKFNISUZUX0NPVU5UX1RSVU5DQVRFRCk6IERlbGV0ZWQuCisKK1NhdCBNYXIgIDcgMjM6NDc6NTcgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kICh4b3JzaTMseG9yaGkzKTogRG9uJ3QgZW1pdCBhIGJ5dGUgb3Bjb2RlIHdpdGggYW4gU0ltb2RlCisJb3BlcmFuZC4KKworU2F0IE1hciAgNyAyMjo0OToyMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogLVdjb252ZXJzaW9uIHdhcm5pbmcKKwlpZiBhcmd1bWVudCBpcyBwYXNzZWQgYXMgZmxvYXQuCisJRm9yIGZpeGVkIGFyZ3VtZW50cywgd2FybiBpZiB0eXBlIHBhc3NlZCBkb2Vzbid0IG1hdGNoCisJd2hhdCBkZWZhdWx0X2NvbnZlcnNpb24gcHJvZHVjZXMuCisKKwkqIGdjYy5jIChjcm9zc19jb21waWxlKTogTmV3IHZhcmlhYmxlLCAxIGlmIGNyb3NzLWNvbXBpbGluZy4KKwkocmVhZF9zcGVjcyk6IFJlYWQgaXQgZnJvbSBzcGVjcy4KKwkocHJvY2Vzc19jb21tYW5kKTogRHVtcCBpdCB0byBzcGVjcy4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IERvbid0IHVzZSBNRCBwcmVmaXhlcyBhbmQKKwlzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4KiBoZXJlLgorCShtYWluKTogVXNlIHRoZW0gaGVyZSwgaWYgbm90IGNyb3NzLWNvbXBpbGluZy4KKworU2F0IE1hciAgNyAxODoxMzo0NSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBFbGltaW5hdGUgcmVncyBpbiAodXNlIChtZW0gLi4pKQorCWFuZCAoY2xvYmJlciAobWVtIC4uLikpIGluc25zLgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBGaXggbWlub3IgYnVnIGluIGhhbmRsaW5nIG9mCisJbXVsdGktcmVnaXN0ZXIgdmFsdWVzIHdoZW4gb25seSBvbmUgcGFydCBpcyB1c2VkLgorCisJKiBvcHRhYnMuYywgZXhwci5jOiBBbHdheXMgY2FsbCBlbWl0X2xpYnJhcnlfY2FsbCB3aXRoIG5vX3F1ZXVlID09IDEuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeF9sZXhpY2FsX2FkZHIpOiBDb3JyZWN0bHkgc2V0IEJBU0UgaW4gbm9uLXNlcGFyYXRlCisJQVAgY2FzZS4KKworU2F0IE1hciAgNyAxNTozOTo1NyAxOTkyICBKeXJraSBLdW9wcGFsYSAgKGprcEBiYXRtYW4uY3MuaHV0LmZpKQorCisJKiBuczMyay5oIChUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUpOiBjaGFuZ2VkICJyZXQiIHRvICJyZXQgMCIKKworU2F0IE1hciAgNyAxNTo0MTo0NiAxOTkyICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam1AbnV0cmltYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBEb24ndCBkbyBzcGVjaWFsIGZpeGVzIG9uIHNpZ25hbC5oLCB3aGljaCB3ZXJlIG9ubHkKKwluZWVkZWQgYmVjYXVzZSBvZiAjZW5kaWYgY29tbWVudCBmaXhlcy4KKworU2F0IE1hciAgNyAxNToxMTo1MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsuaCAoQVNNX09VVFBVVF9BTElHTik6IERvbid0IGNyYXNoIGlmIExPRyBpcyBtb3JlIHRoYW4gMS4KKworCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSk6IE1ha2UgdmFyaW91cyBwcmVmaXhlcyBvcHRpb25hbAorCXdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGluIFJFR0lTVEVSX05BTUVTLgorCShzdHJpcF9yZWdfbmFtZSk6IE5ldyBzdWJyb3V0aW5lLgorCisJKiBpMzg2LmM6IEZhdGFsIGVycm9yIGlmIEVYVFJBX0NPTlNUUkFJTlQgaXMgZGVmaW5lZC4KKworCSogY29sbGVjdDIuYyBbVVNHXSAoUl9PSywgV19PSywgWF9PSyk6IERlZmluZSB0aGVtIGlmIG1pc3NpbmcuCisKKwkqIHgtaHAzMjBnIChSQU5MSUIsIFJBTkxJQl9URVNUKTogRGVmaW5lZC4KKworCSogTWFrZWZpbGUuaW4gKEVYVFJBX1BST0dSQU1TKTogTmV3IHZhcmlhYmxlIGlzIGxpc3Qgb2YgcHJvZ3JhbXMuCisJKG5hdGl2ZSk6IEJ1aWxkIHRoZW0uICBEb24ndCBidWlsZCBFWFRSQV9QQVJUUy4KKwkocmVzdC5lbmNhcCk6IEJ1aWxkIEVYVFJBX1BBUlRTLgorCShHQ0NfUEFSVFMpOiBJbmNsdWRlIEVYVFJBX1BST0dSQU1TLgorCShpbnN0YWxsLWNvbW1vbik6IEJ1aWxkIEVYVFJBX1BST0dSQU1TLgorCSogdC1jb252ZXggKEVYVFJBX1BST0dSQU1TKTogRGVmaW5lIGluc3RlYWQgb2YgRVhUUkFfUEFSVFMuCisKKwkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEb24ndCBkZWxldGUgYmFja3VwcywgZXRjLgorCShleHRyYWNsZWFuKTogTmV3IHRhcmdldC0tZGVsZXRlIHRob3NlIHRoaW5ncyBoZXJlLgorCShnY2MueHRhcik6IFVzZSBleHRyYWNsZWFuLgorCShjbGVhbmNvbmZpZyk6IERlbGV0ZWQuCisJKHJlYWxjbGVhbik6IERlcGVuZCBvbiBkaXN0Y2xlYW4uCisKK1NhdCBNYXIgIDcgMTQ6NTQ6MjkgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGdlbmF0dHJ0YWIgKGF0dHJfcHJpbnRmKTogUHJvdmlkZSBhbHRlcm5hdGUgYmFzZWQgb24gSEFWRV9WUFJJTlRGLgorCitTYXQgTWFyICA3IDE0OjI1OjU4IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIGhwODAwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBDaGFuZ2UgYD0nIHRvIGA9PScgaW4gYGlmJy4KKworU2F0IE1hciAgNyAxMzoyNToxNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoZG9fbGluZSk6IEZpeCB0eXBvLgorCisJKiBjb25maWd1cmUgKGRlY29kaW5nIGFyZ3MpOiBEZWxldGUgZXhjZXNzIGZpLgorCitTYXQgTWFyICA3IDA5OjI5OjQxIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKENPTlNUX0NPU1RTKTogQ29tcGxldGUgbGFzdCBjaGFuZ2UuCisKKwkqIG1pcHMubWQgKG1vdnNpX3VsdywgbW92c2lfdXN3KTogQ29tcGxldGUgbGFzdCBjaGFuZ2UuCisKK1NhdCBNYXIgIDcgMDc6Mjg6MDMgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIGNvbmZpZy5zdWIgKCotZG9scGhpbiwgLXRyaXRvbiopOiBOZXcgdmVuZG9yL09TLgorCSogY29uZmlndXJlIChtODhrLWRvbHBoaW4tdHJpdGlvbik6IE5ldyBhbHRlcm5hdGl2ZS4KKwkqIG04OGtkb2xwaC5oOiBOZXcgZmlsZS4KKwkqIHhtLW04OGtkb2xwaC5oOiBOZXcgZmlsZS4KKworU2F0IE1hciAgNyAxMDowNzo0NCAxOTkyICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1sMi5jb206IERvIG5vdCBhbGxvdyB0aGUgdXNlciB0byBydW4gdGhpcyB3aXRoIGdjYyAxLm5uLgorCisJKiBtYWtlLWdjYy5jb206IFVzZSB0aGUgbmV3IGNvbXBpbGVyIHRvIGJ1aWxkIGxpYmdjYzIuYyAodGhyb3VnaCAKKwkgIG1ha2UtbDIuY29tKS4KKworU2F0IE1hciAgNyAwNTozNjoxNiAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHBpeGxleUBudXRyaW1hdC5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW46IGFkZGVkIHRoZSBleGVjX3ByZWZpeCB2YXJpYWJsZSBmb3IgaW5zdGFsbGluZyBob3N0CisJICBkZXBlbmRlbnQgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4KKworU2F0IE1hciAgNyAwMDowOTo1MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdlbmV4dHJhY3QuYyAobXliemVybyk6IE5ldyBmbi4gIFVzZWQgaW5zdGVhZCBvZiBiemVyby4KKworCSogTWFrZWZpbGUuaW4gKGFsbCk6IEluZGlyZWN0IHRvIGFsbC1pbnRlcm5hbC4KKwkoYWxsLWludGVybmFsKTogTmV3IHJ1bGUsIGZvbGxvd2luZyB3aGVyZSBjcm9zcy1tYWtlIGdldHMgaW5zZXJ0ZWQuCisKKwkqIHZtcy5oIChTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSwgV0NIQVJfVFlQRSk6IERlZmluZWQuCisKKwkqIHByb3RvaXplLmM6IERvbid0IGRlY2xhcmUgZm9yayBvciB2Zm9yay4KKworCSogaTg2MC5jIChzZm1vZGVfY29uc3RhbnRfdG9fdWxvbmcpOiBVc2UgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRS4KKworCSogZ2NjLmMgKGhhbmRsZV9icmFjZXMpOiBWZXJpZnkgYWN0dWFsIHN1ZmZpeCBsZW5ndGggbWF0Y2hlcworCWRlc2lyZWQuCisKKwkqIGhwODAwLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEFkZCBwYXJlbnMgZm9yIGNsYXJpdHkuCisKKwkqIGMtdHlwZWNrLmMgKHBvaW50ZXJfaW50X3N1bSk6IEhhbmRsZSBpbnRvcCB3aGljaCBpcyBzdW0gb3IgZGlmZgorCW9mIGFyZ3VtZW50cyB3aXRoIGRpZmZlcmVudCB0eXBlcy4KKworCSogYy10eXBlY2suYyAoUFVTSF9TUEVMTElORyk6IElmIG5vIGJ1ZmZlciB5ZXQsIHVzZSB4bWFsbG9jLgorCisJKiBtNjhrLmMgKG91dHB1dF9kYmNjX2FuZF9icmFuY2gpOiBVc2UgXG5cdCBiZXR3ZWVuIHBhaXIgb2YgaW5zbnMuCisKKwkqIHNwYXJjLmggKFRBUkdFVF9NRU1fRlVOQ1RJT05TKTogRGVmaW5lZC4KKworRnJpIE1hciAgNiAxODo0ODowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdibC1jdG9ycy5oIChET19HTE9CQUxfQ1RPUlNfQk9EWSk6IERvbid0IGNhbGwgT05fRVhJVCBoZXJlLgorCSogY3J0c3R1ZmYuYywgbGliZ2NjMi5jIChfX2RvX2dsb2JhbF9jdG9ycyk6IENhbGwgaXQgaGVyZS4KKworCSogaTM4NnNjby5oIChIQVZFX0FURVhJVCk6IERlZmluZWQuCisKKwkqIGNvbGxlY3QyLmMgKG15X2V4aXQsIG1haW4pOiBBdm9pZCBkZXJlZmVyZW5jaW5nIDAuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2xfaW5pdCk6IERvbid0IGFsdGVyIFRSRUVfVVNFRCBvZiB0aGUgdmFyaWFibGUuCisKK0ZyaSBNYXIgIDYgMTg6MjQ6MzkgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbW90MzMwMC5oIChTSVpFX1RZUEUpOiBEZWZpbmUgYXMgInVuc2lnbmVkIGludCIuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogU1RSSUNUX0FMSUdOTUVOVCBpcyBub3cgbm9uLXplcm8gaWYKKwl0cnVlLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gd2hldGhlciBpdCBpcyBkZWZpbmVkIG9yIG5vdC4KKwkqIGMtdHlwZWNrLmMsIGNwLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBMaWtld2lzZS4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKSBMaWtld2lzZS4KKwkqIGV4cHIuaCAoTVVTVF9QQVNTX0lOU1RBQ0tfQkFEX0FMSUdOKTogTGlrZXdpc2UuCisJKiBleHByLmM6IFNldCBkZWZhdWx0IHZhbHVlIG9mIFNMT1dfVU5BTElHTkVEX0FDQ0VTUyB0byB6ZXJvLgorCShtb3ZlX2J5X3BpZWNlcywgbW92ZV9ieV9waWVjZXNfbmluc25zLCBlbWl0X3B1c2hfaW5zbik6CisJU0xPV19VTkFMSUdORURfQUNDRVNTIGFuZCBTVFJJQ1RfQUxJR05NRU5UIG5vdyB0cnVlIGlmIG5vbi16ZXJvLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsLCBhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOgorCVJlbW92ZSB0dXJuZWQtb2ZmIGNvZGUgdXNpbmcgU1RSSUNUX0FMSUdOTUVOVC4KKwkqIGNvbmZpZy8qLmg6IENoYW5nZSByZXByZXNlbnRhdGlvbiBvZiBTVFJJQ1RfQUxJR05NRU5UIGFuZAorCVNMT1dfVU5BTElHTkVEX0FDQ0VTUy4KKwkqIGdtaWNyby5oIChTTE9XX1VOQUxJR05FRF9BQ0NFU1MpOiBTZXQgdG8gMS4KKworCSogTWFrZWZpbGUuaW4gKGNsZWFuY29uZmlnKTogUmVtb3ZlIG9ic29sZXRlIHJlZmVyZW5jZSB0bworCWZpbGUgYXV4LW91dHB1dDIuYy4KKworCSogYy1sZXguYyAoeXlsZXgpOiBEb24ndCBtYWtlIG91dC1vZi1yYW5nZSBzaGlmdCBmb3IgdmVyeSB3aWRlIGNoYXJzLgorCitGcmkgTWFyICA2IDE4OjA3OjAwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IE5vIC1XdW51c2VkIHdhcm5pbmdzIGZvciBzdGF0aWMgdmFycy4KKworCSogY29sbGVjdDIuYyAobWFpbik6IERvbid0IGhhbmRsZSAtQiwgLWIsIC1WLCAtbSBvciAtZi4KKwljb2xsZWN0MiBnZXRzIG9ubHkgdGhlIG9wdGlvbnMgdGhhdCBsZCB3b3VsZCBnZXQuCisJUHJvY2VzcyBDT0xMRUNUX0dDQ19PUFRJT05TIGVudnZhci4KKwkoc2F2ZXN0cmluZyk6IE5ldyBmdW5jdGlvbi4KKworCSogZ2VuYXR0cnRhYi5jOiBSZXZlcnQgdG8gcHJldmlvdXMgdmVyc2lvbgorCWJlY2F1c2UgdGhlIG5ldyBvbmUgdXNlcyB2c3ByaW50ZiBhbmQgaXQgaXNuJ3QgdHJpdmlhbAorCXRvIGF2b2lkIGl0LgorCitGcmkgTWFyICA2IDE3OjI2OjA5IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kICg8TzU+IGV4cHJlc3Npb25zKTogRG9uJ3QgcmVseSBvbiB0aGUgYXNzZW1ibGVyIGJlaW5nIGFibGUKKwl0byBoYW5kbGUgY29uc3RhbnQgZXhwcmVzc2lvbnMgKERvbHBoaW4gVHJpdG9uODggY2FuJ3QpLgorCisJKiBnZW5hdHRydGFiLmM6IEFkZCBhIGhhc2ggdGFibGUgbWVjaGFuaXNtIHRvIHNoYXJlIFJUTCBhbmQgc3RyaW5ncy4KKwkoYXR0cl9oYXNoX2FkZF9ydHgsIGF0dHJfaGFzaF9hZGRfc3RyaW5nKTogTmV3IGZ1bmN0aW9ucy4KKwkoYXR0cl9ydHgpOiBOZXcgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBzaGFyZWQgUlRMLgorCShhdHRyX3ByaW50ZiwgYXR0cl9wcmludGYpOiBOZXcgZnVuY3Rpb25zIHRvIGdlbmVyYXRlIGEgc2hhcmVkIHN0cmluZy4KKwkKKwkqIGdlbmF0dHJ0YWIuYzogRXh0ZW5kIHRoZSB0cmVhdG1lbnQgb2YgREVGSU5FX0FUVFIgdG8gYWxsb3cgYSBDT05TVAorCWV4cHJlc3Npb24gYXMgdGhlIGRlZmF1bHQgdmFsdWUsIGluZGljYXRpbmcgYSBjb25zdGFudCBhdHRyaWJ1dGUuCisJKHN0cnVjdCBhdHRyX2Rlc2MpOiBBZGQgYGlzX2NvbnN0JyBmaWVsZC4KKwkoY2hlY2tfYXR0cl90ZXN0KTogQWRkIGBpc19jb25zdCcgcGFyYW1ldGVyLiAgRGlzYWxsb3cgdXNlIG9mIGluc24KKwlhdHRyaWJ1dGVzIGFuZCBNQVRDSF9PUEVSQU5EIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbjsgYWxsb3cKKwlTWU1CT0xfUkVGIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4gIEFsbCBjYWxsZXJzIHVwZGF0ZWQuCisJKGNoZWNoX2F0dHJfdmFsdWUpOiBBbGxvdyBhIFNZTUJPTF9SRUYgYXMgYSBjb25zdGFudCBleHByZXNzaW9uLgorCShjb252ZXJ0X2NvbnN0X3N5bWJvbF9yZWYpOiBOZXcgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBhIGNvbnN0YW50CisJU1lNQk9MX1JFRiB0byBhIENPTkQgdGhhdCBleHBsaWN0bHkgdGVzdHMgZWFjaCB2YWx1ZS4KKwkobWFrZV9jYW5vbmljYWwpOiBVc2UgYGNvbnZlcnRfY29uc3Rfc3ltYm9sX3JlZicgZm9yIGNvbnN0YW50CisJU1lNQk9MX1JFRiBleHByZXNzaW9ucy4KKwkobWFrZV9sZW5ndGhfYXR0cnMsIGZpbmRfYXR0ciwgbWFrZV9pbnRlcm5hbF9hdHRyKTogTWFyayBgaXNfY29uc3QnCisJYXMgZmFsc2UuCisJKGdlbl9hdHRyKTogR2V0IHJpZCBvZiBhIHRvcC1sZXZlbCBDT05TVCBub2RlIGFuZCBtYXJrIGBpc19jb25zdCcgdHJ1ZS4KKwkod2Fsa19hdHRyX3ZhbHVlKTogVXNlIG9mIGEgY29uc3RhbnQgU1lNQk9MX1JFRiBkb2VzIG5vdCBzZXQKKwlgbXVzdF9leHRyYWN0JyBvciBgbXVzdF9jb25zdHJhaW4nLgorCSh3cml0ZV9hdHRyX2dldCk6IERlYWwgd2l0aCBjb25zdGFudCBhdHRyaWJ1dGVzLgorCitGcmkgTWFyICA2IDE2OjE0OjI3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluLCBwYXRoX2luY2x1ZGUpIFtfX01TRE9TX19dOiBIYW5kbGUgTVNET1Mgc3ludGF4IGluIHBhdGguCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IEZpeCBidWdzIGluIGxhc3QgY2hhbmdlLgorCisJKiBvYmpjLWFjdGlvbnMuYyAocmVjZWl2ZXJfaXNfY2xhc3Nfb2JqZWN0KTogRml4IHR5cG9zLgorCisJKiBlY29mZi1jbXA6IEZpbGUgZGVsZXRlZC4KKworCSogY29uZmlnLnN1YiAoM2IxKTogQ29udmVydCB0byBtNjgwMDAsIG5vdCBtNjhrLgorCisJKiBjY2NwLmMgKGRvX2xpbmUpOiBIYW5kbGUgInN5ZXRlbSBoZWFkZXIiIGluZGljYXRvciBmbGFnIGAzJy4KKworCSogdC1pMzg2aXNjOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaTM4Ni0qLWlzYyopOiBVc2UgdGhlIG5ldyBmaWxlLgorCSogaTM4NmlzYy5oIChMSUJfU1BFQywgRU5ERklMRV9TUEVDKTogVXNlIGNydGJlZ2luLm8vY3J0ZW5kLm8uCisKK0ZyaSBNYXIgIDYgMTQ6Mzc6MjUgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kZWMpOiBGaXggY29tbWVudC4KKworRnJpIE1hciAgNiAwOTo0OTo1NCAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBDaGVjayByZWxvYWRfaW5fcHJvZ3Jlc3MgaW4KKwlhZGRpdGlvbiB0byByZWxvYWRfY29tcGxldGVkLgorCisJKiBtODhrLm1kIChjcHUgYXR0cmlidXRlKTogRml4LgorCitGcmkgTWFyICA2IDA2OjI0OjA4IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKENPTlNUX0NPU1RTKTogRml4IGVsaW1pbmF0ZV9jb25zdGFudF90ZXJtIGNhbGxpbmcKKwlzZXF1ZW5jZS4KKworCSogbWlwcy5jIChzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBNb3ZlIG9mZnNldCB2YXJpYWJsZSBmb3IgY2FsbGluZworCWVsaW1pbmF0ZV9jb25zdGFudF90ZXJtIGludG8gYSBsb2NhbCBibG9jayBieSB0aGUgY2FsbC4KKwkobWlwc19hZGRyZXNzX2Nvc3QpOiBEaXR0by4KKworCSogbWlwcy5tZCAobW92c2lfdWx3LCBtb3ZzaV91c3cpOiBGaXggZWxpbWluYXRlX2NvbnN0YW50X3Rlcm0KKwljYWxsaW5nIHNlcXVlbmNlLgorCitGcmkgTWFyICA2IDAwOjMwOjEwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IERvbid0IGZpeCBjb21tZW50cyBvbiAjZW5kaWYsICNlbHNlLgorCUl0IG1hZGUgdGhlIGVncmVwIHN0cmluZyB0b28gbG9uZy4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogSGFuZGxlIHNpemUgbWlzbWF0Y2ggY29weWluZyBmcm9tIHN0cmluZyBjc3QuCisKK1RodSBNYXIgIDUgMjI6MTE6MDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdGlvbnMuYyAocmVjZWl2ZXJfaXNfY2xhc3Nfb2JqZWN0KTogQ2xlYW4gdXAgc3ludGF4LgorCisJKiBzdW4zODYuaCAoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMKTogU3RhcnQgd2l0aCBhIHN0YXIuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2hhbmdlIGA9JyB0byBgPT0nIGluIGBpZicKKwlpbnNpZGUgUkVHSVNURVJfQ09OU1RSQUlOVFMgY29uZGl0aW9uYWwuCisKK1RodSBNYXIgIDUgMjE6Mjk6MzMgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1wYXJzZS55ICh5eXByaW50KTogTWFrZSBkZWNsYXJhdGlvbnMgZGVjbGFyZSBfX2lubGluZQorCWNvbnNpc3RlbnRseS4KKworVGh1IE1hciAgNSAxODozNDozMiAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kIChkYnJhIHBhdHRlcm5zKTogRml4IE5PX0FERFNVQl9RIGlmZGVmIGNvbmRpdGlvbmFscy4KKwlGaXggbG9jYXRpb24gb2YgY29tbWVudCByZWdhcmRpbmcgdXNlIG9mIFJFR19OT1RFUyBpbiBkYnJhIGluc25zLgorCitUaHUgTWFyICA1IDE4OjMwOjU1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYy5hKTogSWYgJChMSUJHQ0MxKSBpcyBlbXB0eSwgaWdub3JlIGl0LgorCSogY3Jvc3MtbWFrZSAoTElCR0NDMSk6IE1ha2UgZGVmaW5pdGlvbiBlbXB0eS4KKworVGh1IE1hciAgNSAxNzo0ODozOCAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQ29ycmVjdGx5IGRldGVjdCBkaWZmZXJlbnQgb3BlcmFuZAorCWNvbnN0cmFpbnQgYWx0ZXJuYXRpdmVzIChieSBjaGFuZ2luZyBzdWJzY3JpcHRpb24gZnJvbSAwIHRvIGxvb3AKKwl2YXJpYWJsZSBpKS4KKworVGh1IE1hciAgNSAxNjo1ODozOCAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGxpYnN1YmRpcik6IFJlbmFtZSAkKGxpYmRpcikvZ2NjIGdjYy1saWIuCisJKiBnY2MuYyAoU1RBTkRBUkRfRVhFQ19QUkVGSVgpOiBEaXR0by4KKworCSogYy10eXBlY2suYzogSW1wbGVtZW50IGEgc3BlbGxpbmcgc3RhY2sgdG8gc3RvcmUgYW5kIHByaW50CisJY29tcG9tZW50IG5hbWVzIGZvciBlcnJvciBtZXNzYWdlcy4KKworCShwdXNoX3tzdHJpbmcsbWVtYmVyX25hbWUsYXJyYXlfYm91bmRzfSk6IE5ldyBmdW5jdGlvbnMuCisJKFNQRUxMSU5HX0RFUFRILCBSRVNUT1JFX1NQRUxMSU5HX0RFUFRILCBTQVZFX1NQRUxMSU5HX0RFUFRIKTogTmV3CisJbWFjcm9zIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIHNwZWxsaW5nIHN0YWNrLgorCShkaWdlc3RfaW5pdCwgcHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogVXNlIHRoZXNlLgorCisJKHNwZWxsaW5nX2xlbmd0aCwgcHJpbnRfc3BlbGxpbmcpOiBOZXcgZnVuY3Rpb25zLgorCShlcnJvcl9pbml0LCBwZWR3YXJuX2luaXQpOiBVc2UgdGhlbS4KKworCShnZXRfc3BlbGxpbmcpOiBOZXcgZnVuY3Rpb24uCisJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBVc2UgYGdldF9zcGVsbGluZycgdG8gaW50ZXJwcmV0IG1lc3NhZ2VzCisJdGhhdCBhcmUgYmFzZWQgb24gdGhlIHNwZWxsaW5nIHN0YWNrLgorCShwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBQYXNzIGAmaW5pdGlhbGl6YXRpb25fbWVzc2FnZScuCisKK1RodSBNYXIgIDUgMTU6MjI6MjIgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGluaXRfZXhwcik6IEluaXRpYWxpemUgZm9yY2VkX2xhYmVscyB0byB6ZXJvLgorCShzYXZlX2V4cHJfc3RhdHVzKTogU2F2ZWQgZm9yY2VkX2xhYmVscyBhd2F5IGFuZCBpbml0aWxpemUgdG8KKwl6ZXJvLgorCShyZXN0b3JlX2V4cHJfc3RhdHVzKTogUmVzdG9yZSB2YWx1ZSBvZiBmb3JjZWRfbGFiZWxzLgorCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIGZvcmNlZF9sYWJlbHMgZmllbGQuCisJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogUmVqZWN0IGZ1bmN0aW9uIHdpdGgKKwlub256ZXJvIGZvcmNlZF9sYWJlbHMuCisKK1RodSBNYXIgIDUgMTU6MDg6NDcgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHJlZ2NsYXNzLmMgKGZpeF9yZWdpc3Rlcik6IFVzZSBkZWNvZGVfcmVnX25hbWUuCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBEaXR0by4KKwkqIHZhcmFzbS5jIChkZWNvZGVfcmVnX25hbWUpOiBJZ25vcmUgYSBsZWFkaW5nICcjJy4KKworCUZvciBSTVM6CisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRGVsZXRlIG5vdyByZWR1bmRhbnQgdGVzdHMgb2YKKwlUUkVFX0VYVEVSTkFMIGJlZm9yZSBjYWxscyB0byBhc3NlbWJsZV9leHRlcm5hbC4KKwkqIGNwLWluaXQuYyAoYnVpbGRfdmlydHVhbF9pbml0LCBidWlsZF9idWlsdGluX2NhbGwpOiBEaXR0by4KKwkqIGNwLW1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBEaXR0by4KKwkqIGNwLXR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmLCBidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBEaXR0by4KKwkqIGMtcGFyc2UueSAocHJpbWFyeSk6IERpdHRvLgorCitUaHUgTWFyICA1IDEzOjQ5OjI5IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlc19uaW5zbnMpOiBGaW5pc2ggTWFyLiA0IGNoYW5nZS4gIERvIG5vdAorCWNob29zZSBhIG1vZGUgd2hpY2ggaGFzIGEgc2l6ZSBncmVhdGVyIHRoYW4gTU9WRV9NQVguCisKKwkqIG02OGsuYzogQ2hhbmdlIGFsbCBvY2N1cmFuY2VzIG9mICJtb3YuIiB0byAibW92ZSUubCIgc28gdGhhdAorCUFTTV9PVVRQVVRfT1BDT0RFIGNhbiBjaG9vc2UgdGhlIHJpZ2h0IHN5bnRheC4KKwkqIG02OGsubWQ6IENoYW5nZSAibW92LiIgdG8gIm1vdmUuIiBpbiBjb21tZW50cyBmb3IgY29uc2lzdGVuY3kuCisKK1RodSBNYXIgIDUgMTA6MDQ6NTIgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBIYW5kbGUgTk9OX0xWQUxVRV9FWFBSLgorCisJKiBsaW1pdHMuaCAoX0xJTUlUU19IXyk6IENvcnJlY3QgbWlzc3BlbGxpbmdzLgorCisJKiBNYWtlZmlsZS5pbiAoImlmIiBhbmQgIlsiKTogUm9tcCwgNC4zIEJTRCwgYW5kIFVsdGlyeCBzeXN0ZW1zCisJZmFpbCB3aGVuIHRoZSBjb25kaXRpb24gaXMgZmFsc2UuICBDaGFuZ2UgdHJvdWJsZXNvbWUgaW5zdGFuY2VzIHRvCisJZWl0aGVyIHVzZSAiY2FzZSIgb3IgdXNlICctJyBhcyBhIHByZWZpeCB0byB0aGUgY29tcGlsYXRpb24gcnVsZS4KKworVGh1IE1hciAgNSAwOTowODoxMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQgKGxzaHJkaTMpOiBBZGQgZWFybHljbG9iYmVyIHRvIGZpcnN0IGFsdGVybmF0aXZlLgorCisJKiBleHBsb3cuYyAoc3RhYmlsaXplKTogQ29weSBSVFhfVU5DSEFOR0lOR19QIGFuZCBNRU1fVk9MQVRJTEVfUC4KKworVGh1IE1hciAgNSAwNjowNTozMSAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKC5wdXNobGV2ZWwpOiBTdGFjayBhbmQgdW5zdGFjayBTVE1UX0RFQ0xfTVNHLgorCisJKiBjcC1wYXJzZS55ICh1bmFyeV9leHByKTogQWRkIEVYVEVOU0lPTiBzdXBwb3J0LgorCSh7bWF5YmVfbGFiZWwsbGFiZWx9X2RlY2xzLCBsYWJlbF9kZWNsKTogRGVmaW5lIHRoZXNlIHJ1bGVzIGFzIGZyb20KKwljLXBhcnNlLnkuCisJKiBjcC1kZWNsLmMgKHtsb29rdXAsc2hhZG93LGRlZmluZX1fbGFiZWwpOiBVcGRhdGUgZnJvbSBjLWRlY2wuYy4KKwkqIGdwbHVzLmdwZXJmOiBBZGQgRVhURU5TSU9OIGFuZCBMQUJFTC4KKwkqIGNwLWhhc2guaDogUmVtYWRlIHVzaW5nIGdwZXJmLgorCitXZWQgTWFyICA0IDIxOjM4OjQxIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlcyk6IERvIG5vdCBjaG9vc2UgYSBtb2RlIHdoaWNoIGhhcyBhIHNpemUKKwlncmVhdGVyIHRoYW4gTU9WRV9NQVguCisKK1dlZCBNYXIgIDQgMjM6MjQ6MjUgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMsIGNwLWRlY2wuYywgY3AtZGVjbDIuYywgY3AtaW5pdC5jLCBjcC1sZXguYywKKwljcC1tZXRob2QuYywgY3AtdHlwZWNrLmM6ICBDYXN0cyBmcm9tIGVudW0gdG8gaW50IHRoYXQKKwlhcmUgbmVjZXNzYXJ5IChub3QgYWxhcyBub3QgcXVpdGUgc3VmZmljaWVudCkgdG8gZ2V0CisJY2MxcGx1cyB0byBjb21waWxlIHVzaW5nIHN5c3RlbSBjYyBvbiBTb255IE5ld3NPUyAzLjIKKwkocHJlc3VtYWJseSBQb3J0YWJsZSBDIENvbXBpbGVyKS4KKworV2VkIE1hciAgNCAyMjowNTozOSAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGUyLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IEZpeCB0eXBvIGluIGNvZGUgc2VhcmNoaW5nCisJZG93biB0eXBlIGxhdHRpY2UgbG9va2luZyBmb3IgY29uc3RydWN0b3IuCisKK1dlZCBNYXIgIDQgMTY6NTI6MjEgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBnc3RkYXJnLmg6IEluY2x1ZGUgdmEtc3BhcmMuaCBvbiBzcGFyYyBzeXN0ZW1zLiAgRGVsZXRlIG5vdworCW9ic29sZXRlIGAjaWZuZGVmIF9fc3BhcmNfXycuCisJKiB2YS1zcGFyYy5oICh2YV9zdGFydCk6IFByb3ZpZGUgYWx0ZXJuYXRlIGRlZmluaXRpb24gd2hlbgorCWluY2x1ZGVkIHZpYSBzdGRhcmcuaC4gIERlbGV0ZSBvYnNvbGV0ZSBjb21tZW50LgorCSh2YV9hcmcpOiBBZGQgbWlzc2luZyBzZXQgb2YgcGFyZW50aGVzZXMuCisKK1dlZCBNYXIgIDQgMTU6MjE6MjAgMTk5MiAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBNYWtlIGVncmVwIHBhdHRlcm4gbW9yZSBnZW5lcmFsLiAgQ2hlY2sgZm9yCisJYWRkaXRpb25hbCBzcGVjaWFsIGNhc2UgcHJvYmxlbXMgaW4gVWx0cml4LCBOZXdzLU9TLCBhbmQgSVJJWC4KKworV2VkIE1hciAgNCAxNToxNTo0NSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYuYyAoZnVuY3Rpb25fZXBpbG9ndWUpOiBEb24ndCBtYWtlIGEgc3BlY2lhbCBjYXNlIGZvcgorCWN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19zdHJ1Y3Q6IHRoaXMgaXMgZG9uZSB2aWEKKwljdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJncy4KKworCSogc3VuMzg2LmggKERBVEFfU0VDVElPTl9BU1NNX09QKTogRml4IHR5cG8gaW4gdW5kZWYuCisKK1dlZCBNYXIgIDQgMTQ6MjE6MzcgMTk5MiAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzLCBmaXhpbmMuc3ZyNDogT25seSBjaGFuZ2UgI2Vsc2UgYW5kICNlbmRpZiBhdCB0aGUKKwliZWdpbm5pbmdzIG9mIGxpbmVzLCBhc2lkZSBmcm9tIHdoaXRlc3BhY2UsIHNvIGl0IGRvZXNuJ3QgY2hhbmdlCisJdGhlbSB3aXRoaW4gY29tbWVudHMuIAorCitXZWQgTWFyICA0IDA5OjQ4OjIxIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWQpOiBCcmFpbm8gaW4gaGFuZGxpbmcgb2YgREVMRVRFCisJKE5FVyB3YXMgaGFuZGxlZCBjb3JyZWN0bHkpLgorCitXZWQgTWFyICA0IDA5OjE0OjU3IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtbWFuKTogSW5zdGFsbCB0aGUgZysrIG1hbnVhbCBwYWdlLgorCisJKiBtNjhrLm1kIChkYkNDIHBlZXBob2xlcyk6IFR3byBuZXcgcGVlcGhvbGVzIHRvIHJlY29nbml6ZSBjYXNlcworCXdoZXJlIGEgY29tcGFyZS9icmFuY2ggY2FuIGJlIGRvbmUgKGZvciBmcmVlKSBhcyBwYXJ0IG9mIGEgZGJDQworCWluc24uICBUaGlzIHR1cm5zIGpDQztkYmYgaW50byBkYkNDO2pDQyAodGhlIGpDQyBpcyBub3cgb3V0c2lkZSB0aGUKKwlpbm5lciBwYXJ0IG9mIHRoZSBsb29wKS4KKworCSogbTY4ay5jICh2YWxpZF9kYmNjX2NvbXBhcmlzb25fcCk6IE5ldyBmdW5jdGlvbiB3aGljaCByZXR1cm5zIFRSVUUKKwlpZiB0aGUgZ2l2ZW4gY29tcGFyaXNvbiBpcyBhIHZhbGlkIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIHRoZSBkYkNDCisJaW5zdHJ1Y3Rpb24uCisJKG91dHB1dF9kYmNjX2FuZF9icmFuY2gpOiBOZXcgZnVuY3Rpb24gdG8gb3V0cHV0IGEgZGJDQztqQ0MKKwlpbnN0cnVjdGlvbiBzZXF1ZW5jZSAoaW5jbHVkaW5nIHBvc3NpYmxlIGNvdW50ZXIgYWRqdXN0bWVudHMgaW4KKwlTSW1vZGUpCisKK1dlZCBNYXIgIDQgMDQ6MzI6MTEgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBjcC1kZW0uYyAob3B0YWJsZSk6IEFkZCBlbnRyeSBmb3IgYG9wZXJhdG9yPScuCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRW1pdCBhIGp1bXAgdG8gUkVUVVJOX0xBQkVMIGlmCisJQ0xFQU5VUF9MQUJFTCBpcyBub24temVyby4gIChTdWdnZXN0ZWQgYnkgbmlrbGFzQGFwcGxpLnNlKQorCitXZWQgTWFyICA0IDA0OjI4OjEwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbGliZ2NjMS5jIChwZXJmb3JtX2xlc2YyKTogQ29uZGl0aW9uIHRlc3RlZCB3YXMgYmFja3dhcmRzLgorCitXZWQgTWFyICA0IDAzOjExOjQ4IDE5OTIgIEtlbiBSYWVidXJuICAoUmFlYnVybkBDeWdudXMuQ09NKQorCisJKiBjcC1wdC5jIChvdmVybG9hZF90ZW1wbGF0ZV9uYW1lKTogRXh0cmEgcHVzaGxldmVsIGlzbid0IG5lZWRlZDsKKwlvbWl0IGl0LgorCSh1bmRvX3RlbXBsYXRlX25hbWVfb3ZlcmxvYWQpOiBEb24ndCBwb3AgdGhlIGxldmVsIHRoYXQgaXNuJ3QgcHVzaGVkCisJYW55IG1vcmUuCisKKwkqIGNwLWNsYXNzLmMgKHB1c2hjbGFzcyk6IERvbid0IGJvdGhlciBwcm9jZXNzaW5nIHVubmFtZWQgdGFncy4KKwkocG9wY2xhc3MpOiBMaWtld2lzZS4KKworCSogY3AtaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogSWYgcG9pbnRlciBpcyBudWxsLCBkb24ndCBkbworCWFueXRoaW5nLgorCisJKiBjcC1wYXJzZS55IChtZW1iZXJfaW5pdCk6IEFjY2VwdCBiYXNlIGNsYXNzIG5hbWVzIHRoYXQgYXJlCisJdGVtcGxhdGUgdHlwZSBuYW1lcy4KKworCSogY3AtZGVjbC5jIChzdGFydF9kZWNsKTogRG9uJ3QgcHJlcGVuZCBkZWNsIG9mIGB0aGlzJyB0byBhcmcgbGlzdHMKKwlvZiBtZXRob2RzIG9mIHVuaW5zdGFudGlhdGVkIHR5cGVzLgorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IElmIG5vIHRleHQgaGFzIGJlZW4gc2F2ZWQgYXdheSwKKwlkb24ndCB0cnkgdG8gcGFyc2UgaXQ7IGFuIGV4dGVybmFsIHJlZmVyZW5jZSB3aWxsIHJlc3VsdC4KKworCSogY3AtcGFyc2UueSAoeXlwcmludCk6IERlY2xhcmUgdGhpcyBhdCBoZWFkIG9mIGZpbGUuCisKKwkqIGNwLXB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogSWYgdGhlIHRlbXBsYXRlIHNwZWNpZmllZAorCWhhc24ndCBiZWVuIGRlZmluZWQsIGRvbid0IHJlamVjdCB0aGUgaW5zdGFudGlhdGlvbjsgbWFrZSBpdCBhCisJbm9ybWFsIHVuZGVmaW5lZCB0eXBlLgorCisJKiBjcC1wYXJzZS55ICh0ZW1wbGF0ZV9kZWYpOiBUcnkgdG8gcmVjb3ZlciBmcm9tIGVycm9ycyBtb3JlCisJZ3JhY2VmdWxseS4KKworVHVlIE1hciAgMyAxNTozNzozNSAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogcHJvdG9pemUuYyAobXVuZ2VfY29tcGlsZV9wYXJhbXMpOiBDb21wdXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZgorCXBhcmFtcyAoYHRlbXBfcGFybXMnIGxlbmd0aCkgc2FmZWx5LgorCisJKiBkd2FyZm91dC5jIChjb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiBQdW50IHF1YXNpLWNvbnN0YW50IHZhbHVlcy4KKwkobG9jYXRpb25fb3JfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogRGl0dG8uCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgdGhlIGNyb3NzIGNvbXBpbGF0aW9uCisJZHJpdmVyIHByb2dyYW0gZXZlbiB3aGVuICQodG9vbGRpcikvYmluIGRvZXNuJ3QgZXhpc3QuCisKK1R1ZSBNYXIgIDMgMTQ6Mzk6NTUgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2LmggKGVudW0gcmVnX2NsYXNzKTogVW5kbyBKYW4gMTcgY2hhbmdlIHRoYXQgZGVsZXRlZCBjbGFzcyBCUkVHLgorCShSRUdfQ0xBU1NfTkFNRVMsUkVHX0NMQVNTX0NPTlRFTlRTLFJFR05PX1JFR19DTEFTUyk6IExpa2V3aXNlLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBMaWtld2lzZS4KKwkqIGkzODYuYyAocmVnY2xhc3NfbWFwKTogTGlrZXdpc2UuCisKKwkqIHN2cjQuaCAoTElOS19TUEVDKTogRG9uJ3QgZG8gLXogb3IgLXQgaGVyZTogaXQncyBhbHJlYWR5IGluCisJbGlua19jb21tYW5kX3NwZWMuICBCdXQgZG8gaGFuZGxlIC1HLgorCisJKiBpMzg2Lm1kIChjYXNlc2kpOiBSZXdyaXRlIHBhdHRlcm4gdG8gcmVmbGVjdCB0aGUgd2F5IHRvIGVtaXR0ZWQKKwljb2RlIGFjdHVhbGx5IHdvcmtzLgorCitUdWUgTWFyICAzIDA5OjU5OjE1IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHN1cGVyLnN1cGVyLm9yZykKKworCSogbTY4ay5tZCAoZGJyYSBwYXR0ZXJuIGluIEhJbW9kZSk6IE5ldyBwYXR0ZXJuIHRvIG1hdGNoCisJZGVjcmVtZW50X2FuZF9icmFuY2ggaW5zbnMgd2hlbiB0aGUgbG9vcCBjb3VudGVyIGlzIGRlY3JlbWVudGVkIGluCisJSEltb2RlLgorCitUdWUgTWFyICAzIDA3OjU3OjE4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZG96IHBhdHRlcm5zKTogQWRkIG1pc3NpbmcgYEknIGNvbnN0cmFpbnQuCisKKwkqIHJlb3JnLmMgKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IEEgQ0FMTF9JTlNOIGxpdmVucyBhbGwgZ2xvYmFsIHJlZ3MuCisKKwkqIHZheC5oIChFWFRSQV9DT05TVFJBSU5UKTogTmV3IG1hY3JvIHRvIHNlbGVjdCBub24tbW9kZS1kZXBlbmRlbnQKKwlNRU0gb3BlcmFuZHMuCisJKiB2YXgubWQgKGpsYmMvamxicyk6IFVzZSBqYmMvamJzIGlmIG1vZGUtZGVwZW5kZW50IG1lbW9yeS4KKwkqIHZheC5jIChyZWdfb3JfbnhtZW1fb3BlcmFuZCk6IEZ1bmN0aW9uIGRlbGV0ZWQuCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IFN3YXAgY29tcGFyaXNvbiBjb2RlIHdoZW4gcHV0dGluZworCWNvbnN0YW50IGFyZyBzZWNvbmQuCisKKwkqIG02OGsubWQgKGFkZGhpMyk6IENvbnZlcnQsIGUuZy4sIDY1NTM1IHRvIC0xIGJlZm9yZSBzZWVpbmcgaWYKKwl3ZSBjYW4gdXNlIHN1YnF3LgorCShhZGRxaTMpOiBTaW1pbGFybHkgZm9yIFFJbW9kZSBjb25zdGFudHMKKworCSogbG9jYWwtYWxsb2MgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBSZW5hbWVkIGZyb20gb3B0aW1pemVfcmVnX2NvcHkuCisJKG9wdGltaXplX3JlZ19jb3B5XzIpOiBOZXcgZnVuY3Rpb24uCisJKHVwZGF0ZV9lcXVpdl9yZWdzKTogQ2FsbCBvcHRpbWl6ZV9yZWdfY29weV9bMTJdLgorCisJKiBjb21iaW5lLmMgKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uLCBjYXNlIEFORCk6IFR1cm4gU1VCUkVHIGNhc2UKKwliYWNrIG9uIG5vdyB0aGF0IGJ1ZyBpbiBpMzg2Lm1kIGhhcyBiZWVuIGZpeGVkLgorCShzaW1wbGlmeV9jb21wYXJpc29uLCBjYXNlIEFTSElGVCk6IElmIHNoaWZ0aW5nIGxvdy1vcmRlciBiaXQgdG8KKwlzaWduIGJpdCBhbmQgZG9pbmcgZXF1YWxpdHkgY29tcGFyaXNvbiwgY29udmVydCB0byBBTkQgd2l0aCBsb3ctb3JkZXIKKwliaXQgKGluZXF1YWxpdHkgY2FzZSB3YXMgYWxyZWFkeSBoYW5kbGVkKS4KKwlBbHNvIHJlbW92ZSByZWR1bmRhbnQgdGVzdCBvZiBDT05TVF9PUCBpbiBhbiBlYXJsaWVyIGNhc2UuCisKKwkqIHN1bjJvNC5oIChMSU5LX1NQRUMpOiBObyBsb25nZXIgbmVlZCAtQnN0YXRpYyB3aXRoIC1nLgorCisJKiBtNjhrLmMsIG02OGsuaDogQXZvaWQgJVglIGZvciBtb3N0IHVwcGVyLWNhc2UgWCBzaW5jZSBpdCBtZWFucworCXNvbWV0aGluZyBzcGVjaWFsIHRvIFNDQ1MuCisKKwkqIHJzNjAwMC5tZCAodHlwZSk6IEFkZCBuZXcgdHlwZSwgbXRsci4KKwkoZnVuY3Rpb25fdW5pdCBicmFuY2gpOiBBZGQgZGVsYXkgZnJvbSBtdGxyIHRvIGJyLgorCShtb3ZzaSk6IFdoZW4gbW92aW5nIHRvIGxyLCB0eXBlIGlzICJtdGxyIi4KKworCSogdW5yb2xsLmMgKHJlZ19kZWFkX2FmdGVyX2xvb3ApOiBDaGVjayBmb3IgaW5maW5pdGUgbG9vcCBieQorCWNvdW50aW5nIEpVTVBfSU5TTnMgd2UgZm9sbG93LgorCVVzZSBHRVRfUlRYX0NMQVNTLCByZWdfcmVmZXJlbmNlZF9wLCBhbmQgc2luZ2xlX3NldC4KKworCSogZXhwci5jIChleHBhbmRfaW5jcmVtZW50KTogU2V0IG9wMF9pc19jb3B5IHdoZW4gd2UgYXJlIHJlZmVyZW5jaW5nCisJdGhlIGxvdy1vcmRlciBwYXJ0IG9mIHNvbWUgdmFsdWUgaW4gYSByZWdpc3Rlci4KKworCSogY29tYmluZS5jIChmb3JjZV90b19tb2RlKTogTmV3IGFyZyBSRUc7IHBhc3MgaW4gcmVjdXJzaXZlIGNhbGwuCisJSWYgWCBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgUkVHLCB1c2UgUkVHLgorCShtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQpOiBIYW5kbGUgY2FzZSB3aGVuIERFU1QgYW5kIHBhcnQgb2Ygc291cmNlCisJYXJlbid0IHRoZSBzYW1lLCBidXQgYXJlIGVxdWFsOyBwYXNzIGRlc3RpbmF0aW9uIHRvIGZvcmNlX3RvX21vZGUuCisKKwkqIG02OGsubWQgKGFkZGhpMyk6IEdlbmVyYXRlIGFkZHF3LCBzdWJxdywgb3IgYWRkdyBmb3IKKwlTVFJJQ1RfTE9XX1BBUlQgdmVyc2lvbnMgdGhlIHNhbWUgd2F5IHdlIGhhbmRsZSB0aGUgbm9ybWFsIGNhc2UuCisJKGFkZHFpMyk6IFNpbWlsYXJseSBmb3IgYWRkcWIsIHN1YnFiLCBhbmQgYWRkYi4KKworCSogZ2VuYXR0cnRhYi5jICh3cml0ZV90ZXN0X2V4cHIsIGNhc2UgTU9EKTogRG91YmxlIGAlJyBpbiBwcmludGYgY2FsbC4KKwkod3JpdGVfZWxpZ2libGVfZGVsYXkpOiBJbnRlcm5hbCBhdHRyaWJ1dGUgIipkZWxheV90eXBlIiBpcyBhbHdheXMKKwl1c2VkIGxpdGVyYWxseTsgaXQgaGFzIG5vIHN1ZmZpeCBvciBwcmVmaXguCisJCisJKiBtNjhrLm1kLCB2YXgubWQgKHNvYik6IFJld3JpdGUgaW5lcXVhbGl0eSB2ZXJzaW9ucyBzbyB0aGF0IHRoZXkKKwloYXZlIGEgUExVUyBpbnNpZGUgdGhlIGNvbXBhcmlzb247IGNvbWJpbmUgY2Fubm90IHJlbW92ZSB0aGUgUExVUworCWR1ZSB0byBvdmVyZmxvdyBjb25zaWRlcmF0aW9ucy4KKworVHVlIE1hciAgMyAwNzo1NjozMCAxOTkyICBFcmljIFlvdW5nZGFsZSAoeW91bmdkYWxlIGF0IHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIHZtcy5oIChMX19tYWluKTogUmVtb3ZlICNpbmNsdWRlIDxzdGRpby5oPgorCisJKiBtYWtlLWdjYy5jb206IENhbGwgbWFrZS1sMi5jb20uCisKK1R1ZSBNYXIgIDMgMDU6Mzc6MDggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IEhhbmRsZSBPRkZTRVRfVFlQRS4KKwkqIGNwLXRyZWUuYyAoYnVpbGRfbWVtYmVyX3R5cGUpOiBEZWxldGVkLgorCSogY3AtdHlwZWNrLmMsIGNwLWRlY2wuYywgY3AtaW5pdC5jOiBBbGwgY2FsbGVycyBvZgorCWBidWlsZF9tZW1iZXJfdHlwZScgbm93IGNhbGwgYGJ1aWxkX29mZnNldF90eXBlJy4KKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IEFuIGFyZ3VtZW50IHRoYXQncyBhbiBPRkZTRVRfUkVGCisJbXVzdCBiZSByZXNvbHZlZCBieSBgcmVzb2x2ZV9vZmZzZXRfcmVmJy4gIFRoZSBPRkZTRVRfUkVGIGNhc2UgaW4KKwlleHBhbmRfZXhwciBkb2VzIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIEcrKyB5ZXQuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBUYWtlIENPTlNUUCBhbmQgVk9MQVRJTEVQIGludG8gYWNjb3VudAorCXdoZW4gYnVpbGRpbmcgTUVUSE9EX1RZUEVzLgorCShzdGFydF9mdW5jdGlvbik6IERpdHRvLgorCisJKiBjcC1tZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZCk6IENoYW5nZSBpbnRlcmZhY2UgdG8gdGFrZSBETkFNRQorCWluc3RlYWQgb2YgTkFNRS4gIEFsc28sIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiB0aGUgZGVmYXVsdAorCW9wZXJhdG9yIG5ldyBhbmQgb3BlcmF0b3IgZGVsZXRlIGZvciB0aGUgc3RkLiBzaWduYXR1cmVzLgorCSogY3AtKi5jOiBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiBjcC1jbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBSZXdyaXRlIGJ1aWx0LWluIGxpbWl0IGNoZWNrIHRvCisJd29yayBvbiBwbGF0Zm9ybXMgd2hlcmUgU0laRVRZUEUgaXMgdW5zaWduZWQuCisKK01vbiBNYXIgIDIgMDg6NDk6MTYgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuYyAobTg4a19kZWJ1Z2dlcl9vZmZzZXQpOiBEZWxldGUgd2FybmluZy4KKworCSogbTg4ay5oIChPVkVSUklERV9PUFRJT05TKTogU2V0IGBtODhrX2NwdScgYmFzZWQgb24gYHRhcmdldF9mbGFncycuCisKKwkqIG04OGsubWQgKGNtcHNpIGluc24pOiBEZWxldGUgYWx0ZXJuYXRpdmUgdGhhdCBjb21wbGVtZW50cyB0aGUKKwljb21wYXJlIHN0cmluZyBmb3IgYSBzd2FwcGVkIGNvbXBhcmUgKGl0J3Mgd3JvbmcgYW5kIHVubmVjZXNzYXJ5KS4KKwkoY3B1IGF0dHJpYnV0ZSk6IERlZmluZS4KKworCUZyb20gSnlya2kgS3VvcHBhbGE6CisJKiBwYzUzMi5oLCBwYzUzMi1tYWNoLmgsIHBjNTMyLW1pbi5oLCB4bS1wczUzMi1taW4uaDogTmV3IGZpbGVzLgorCSogY29uZmlndXJlIChuczMyay1wYzUzMi1tYWNoKiwgbnMzMmstcGM1MzItbWluaXgqKTogTmV3IGFsdGVybmF0aXZlcy4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogRG9uJ3QgaW52b2tlIGRieG91dF90eXBlX21ldGhvZHMgaWYKKwl0aGVyZSBhcmUgbm9uZS4KKworCSogdmF4LmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IEFsbG93IFJFRytURVJNLgorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBSZXVzZSBzcGFjZSBmb3IgZXJyb3IKKwltZXNzYWdlIHN0cmluZ3MuCisKK01vbiBNYXIgIDIgMDI6NTQ6NDggMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBzZXEzODZnYXMuaDogTmV3IGZpbGUsIGZvciBTZXF1ZW50IHVzaW5nIDM4NiAmIEdBUy4KKworCSogeG0taTM4NnNjby5oOiBOZXcgZmlsZS4KKworCSogb3B0YWJzLmMgKGxkZXhwKTogTmV3IGZ1bmN0aW9uLiAgVXNlZCBpZiBob3N0IGxkZXhwIGlzIGJyb2tlbi4KKworCSogY29uZmlndXJlIChpMzg2LXNlcXVlbnQtYnNkKik6IFVzZSBzZXEzODZnYXMuaCBpZiAtLWdhcy4KKwkoaTM4Ni0qLXNjbyopOiBUaGUgaG9zdCBmaWxlIGlzIG5vdyB4bS1pMzg2c2NvLmguCisKKwkqIGkzODYubWQgKFNJbW9kZSBhbmQgSEltb2RlIGxvZ2ljYWwgY29tcGFyZSk6IElmIHdlIGFyZSBvbmx5CisJdGVzdGluZyBvbmUgYnl0ZSBvZiBhIG1lbSwgdXNlIGEgYnl0ZSB0ZXN0IG9wY29kZS4KKwkoYml0IHRlc3QgcGF0dGVybnMpOiBMaWtld2lzZSB3aGVuIGVtaXR0aW5nIHRlc3Qgb3Bjb2Rlcy4KKworU3VuIE1hciAgMSAxNDo0NzozMSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBsb25nbG9uZy5oIChfSUJNUjIgdWRpdl9xcm5uZCk6IFN3aXRjaCBvZmYgZHVlIHRvIG92ZXJmbG93IHByb2JsZW1zLgorCitTdW4gTWFyICAxIDExOjE5OjU1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSk6IE5ldyBmdW5jdGlvbi4KKwkobWFrZV9maWVsZF9hc3NpZ25tZW50KTogUmV3b3JrIGNvZGUgdGhhdCBoYW5kbGVzIGZpeGVkLXBvc2l0aW9uCisJZmllbGRzIHRvIG1ha2UgaXQgYm90aCBtdWNoIG1vcmUgZ2VuZXJhbCBhbmQgbXVjaCBzaW1wbGVyLgorCisJKiBtNjhrLm1kOiBBZGQgbWlzc2luZyBpbnNucyBmb3IgdXNpbmcgYnl0ZSBvcGVyYXRpb25zIHdpdGgKKwlTVFJJQ1RfTE9XX1BBUlQ7IGFkZCB3YXMgbWlzc2luZyBjb21tdXRhdGl2ZSBlcXVpdmFsZW50IGFuZAorCW1vc3Qgb3BlcmF0aW9ucyBvdGhlciB0aGFuIGFkZCBhbmQgc3VidHJhY3Qgd2VyZSBtaXNzaW5nLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBBZGQgbWlzc2luZyBhcmcgdG8gY2FsbCB0bworCWRieG91dF9iZWdpbl9mdW5jdGlvbi4KKworCSogZm9sZC1jb25zdC5jIChjb25zdF9iaW5vcCk6IE1ha2UgbWlub3Igc291cmNlIGNoYW5nZSB0byB3b3JrCisJYXJvdW5kIGJ1ZyBpbiBJQk0gUlQgUEMgY29tcGlsZXIuCisKK1N1biBNYXIgIDEgMDU6MDE6MzQgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogV2hlbiB3cmFwcGluZyBORVdSSFMgaW4gYQorCVNBVkVfRVhQUiwgY2FsbCBgYnJlYWtfb3V0X2NsZWFudXBzJyBmaXJzdC4KKworU2F0IEZlYiAyOSAyMzoxOToyMCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBSZXNldCBwcmVmZXJyZWRfY2xhc3MgdG8gTk9fUkVHUyBhZnRlcgorCXN1YnN0aXR1dGluZyBhIHJlZ19lcXVpdl9hZGRyZXNzIGZvciBhIHBzZXVkbyByZWcuCisKKwkqIHVucm9sbC5jIChwcmVjb25kaXRpb25fbG9vcF9wKTogRml4IG1pc3BsYWNlZCBwYXJlbiB3aGVuIGNoZWNraW5nCisJZm9yIE1PREVfRkxPQVQgcnR4LgorCitTYXQgRmViIDI5IDEzOjU5OjU0IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogVG8gY29tcGxldGUgMjQgRmViIGNoYW5nZSwKKwlDT05EX0VYUFJzIG11c3QgZXZhbHVhdGUgTEhTIGluIGNvbmRpdGlvbmFsIHNsb3QgaWYgTEhTIGhhcyBzaWRlCisJZWZmZWN0cy4gIE90aGVyd2lzZSB0aGUgU0FWRV9FWFBScyBpbiBsaHMgd2lsbCBvbmx5IGJlIGV2YWx1YXRlZAorCW9uY2UsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHJlZmVyZW5jZWQgb24gYm90aCBicmFuY2hlcyBvZiB0aGUKKwljb25kaXRpb25hbC4KKworU2F0IEZlYiAyOSAxMzozMjozNSAxOTkyICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam1AbnV0cmltYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIFJFQURNRS5YMTE6IEFkZCB3YXJuaW5nIHRvIG5vdCB1c2UgZ2FzIHdoZW4gY29tcGlsaW5nIFBJQyBjb2RlLgorCisJKiBmaXhpbmNsdWRlczogQWxsb3cgVEFCIGFzIHdlbGwgYXMgU1BDIGJlZm9yZSBzeW1ib2xzIHRvIGNoYW5nZS4KKwlEb24ndCBjaGFuZ2UgInN1biIgaWYgaXQncyBwYXJ0IG9mIGEgbXVsdGl3b3JkIG5hbWUgdGhhdCBjb250YWlucworCXVuZGVyc2NvcmVzLgorCU1ha2UgaW50ZXJtZWRpYXRlIGRpciwgaWYgbmVlZGVkLCB3aGVuIGRvaW5nIHNwZWNpYWwtY2FzZSBmaXhlcy4KKwlVc2UgcHJldmlvdXNseSBmaXhlZCBmaWxlLCBpZiBpdCBleGlzdHMsIGFzIHNvdXJjZSBmb3IgYWxsIHNwZWNpYWwKKwlmaXhlcy4gIERvIGxlc3MgY29weWluZyB3aGVuIG1ha2luZyBzcGVjaWFsIGZpeGVzLgorCUlnbm9yZSBlcnJvcnMgd2hlbiBjaG1vZCdpbmcgYSBmaWxlIHRoYXQgbWlnaHQgbm90IGV4aXN0LgorCSogZml4aW5jLnN2cjQ6IFByZXNlcnZlIHdoaXRlc3BhY2UgYXJvdW5kICIjIiB3aGVuIGZpeGluZyAjZWxzZSBhbmQKKwkjZW5kaWYuCisJQWxsb3cgVEFCIGFzIHdlbGwgYXMgU1BDIGJlZm9yZSBzeW1ib2xzIHRvIGNoYW5nZS4KKwlDb21iaW5lICJzdW4iIGNhc2VzIGFzIGluIGZpeGluY2x1ZGVzLgorCitTYXQgRmViIDI5IDExOjEwOjU1IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5tZCAobW92c3Ryc2kpOiBQcmludCBvcGNvZGUgYXMgIm1vdnNsIiBzbyB0aGF0IHNlcTM4Ni5oIGNhbgorCWNoYW5nZSBpdCBpbnRvIHNtb3ZsLgorCitTYXQgRmViIDI5IDA5OjE1OjUxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBBbGxvY2F0ZSBydGwgdGhhdCBwb2ludHMgdG8KKwl0cmFtcG9saW5lIHBlcm1hbmVudGx5LgorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBJZiBvbmUgb3BlcmFuZCBvZiBhIFBMVVMgaXMgYSBNRU0sCisJbW92ZSBpdCBpbnRvIGEgcmVnIGFuZCBhZGQgdGhlIG90aGVyIChtYWtlcyBjb2RlIGFncmVlIHdpdGggY29tbWVudHMpLgorCisJKiBleHBsb3cuYyAoZWxpbWluYXRlX2NvbnN0YW50X3Rlcm0pOiBSZXdvcmsgc28gaXQgZG9lcyBub3QgZGlyZWN0bHkKKwlhZGQgaW50ZWdlciB2YWx1ZXM7IGNhbGwgc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiBpbnN0ZWFkLgorCVNlY29uZCBhcmcgaXMgbm93IHBvaW50ZXIgdG8gcnR4LCBub3QgaW50LgorCUFzc3VtZSBjb25zdGFudCBpcyBhbHdheXMgc2Vjb25kIG9wZXJhbmQgb2YgUExVUy4KKwkobWVtb3J5X2FkZHJlc3MpOiBQYXNzIHJ0eCBwb2ludGVyIHRvIGVsaW1pbmF0ZV9jb25zdGFudF90ZXJtLgorCSogaGFsZnBpYy5jIChoYWxmX3BpY19hZGRyZXNzX3ApOiBMaWtld2lzZS4KKwkqIG1pcHMuYyAoc2ltcGxlX21lbW9yeV9vcGVyYW5kLCBtaXBzX2FkZHJlc3NfY29zdCk6IExpa2V3aXNlLgorCShtaXBzX2RlYnVnZ2VyX29mZnNldCk6IExpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBQTFVTX0VYUFIpOiBMaWtld2lzZS4KKwlEb24ndCBhZGQgSU5UVkFMczsgdXNlIHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24gaW5zdGVhZC4KKwlSZW1vdmUgb2Jzb2xldGUgT0xEX0lOREVYSU5HIGNvZGUuCisJUHV0IGEgTVVMVCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBvZiB0aGUgUExVUy4KKworCSogY29tYmluZS5jIChjb21iaW5hYmxlX2kzcGF0KTogRG9uJ3QgY29tYmluZSBpZiBJM0RFU1QgaXMgYSBoYXJkCisJcmVnIGluIGEgbm9uLXZhbGlkIG1vZGUuCisKK1NhdCBGZWIgMjkgMDk6MTQ6MTkgMTk5MiAgRXJpYyBZb3VuZ2RhbGUgKHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiB2bXMuaCAoQVNNX09VVFBVVF9DT01NT04pOiBVc2UgU0laRSBpbnN0ZWFkIG9mIFJPVU5ERUQgYnl0ZXMuCisJKERPX0dMT0JBTF9DVE9SU19CT0RZKTogRG8gbm90IGNhbGwgZmZsdXNoKHN0ZG91dCkuCisKKwkqIGdjYy50ZXhpOiBVcGRhdGUgR0xPQkFMW0RFRixSRUYsVkFMVUVdIGRvY3VtZW50YXRpb24uCisKKwkqIG1ha2UtbDIuY29tOiBSZW1vdmUgY2FsbCB0byB0ZXN0X2djYzIuCisKK1NhdCBGZWIgMjkgMDI6NTI6NTkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBSZW5hbWUgZW52dmFycyB0byBDUExVU19JTkNMVURFX1BBVEggYW5kCisJT0JKQ1BMVVNfSU5DTFVERV9QQVRILgorCisJKiBtNjhrLmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IFVzZSBgbW92ZScsIG5vdCBgbW92Jy4KKworRnJpIEZlYiAyOCAxOTozOTowOSAxOTkyICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam1Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IERvbid0IGNoYW5nZSBzeW1ib2xzIHRoYXQgYWxyZWFkeSBzdGFydCB3aXRoIGBfJworCWludG8gYF9fc3ltYm9sX18nLiAgTWVyZ2UgYWxsIG9mIHRoZSBzdW4qIHN1YnN0aXR1dGlvbnMgc28gdGhleQorCWRvbid0IGZpZ2h0IGVhY2ggb3RoZXIuCisJQ29tbWVudCBvdXQganVuayBhZnRlciAjZWxzZXMgYW5kICNlbmRpZnMsIHRvIHByZXZlbnQgd2FybmluZ3MKKwl3aGVuIC1wZWRhbnRpYyBpcyBnaXZlbi4KKworRnJpIEZlYiAyOCAxMzo0MjowNSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2luc25zKTogRG9uJ3QgdXBkYXRlIHZhbHVlIG9mIHJlZ19saXZlX2xlbmd0aAorCXdoZW4gaXQgaXMgbmVnYXRpdmUsIGJlY2F1c2UgbmVnYXRpdmUgdmFsdWVzIGFyZSBzcGVjaWFsLiAgRWFybGllcgorCWZpeCBEZWMgMTcgZGlzYWJsZWQgdGhlIGZwcmludGYgY2FsbCwgYnV0IG5vdCB0aGUgYXNzaWdubWVudC4KKworCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogQWZ0ZXIgaW5jcmVtZW50aW5nIHRoZSBiYXNlIHJlZyBmb3IgYQorCXNwbGl0IERFU1RfQUREUiBnaXYsIG11c3Qgc3VidHJhY3QgdGhlIGNvbnN0X2FkanVzdCBmcm9tIHRoZSBiYXNlCisJcmVnIHRvIGdldCBpdHMgdHJ1ZSBjdXJyZW50IHZhbHVlLgorCisJKiBsb29wLmMgKG1heWJlX2VsaW1pbmF0ZV9iaXZfMSk6IFdoZW4gaGFuZGxpbmcgQ09NUEFSRSwgdmVyaWZ5CisJdGhhdCBtdWx0X3ZhbCBpcyBwb3NpdGl2ZSwgd2hpY2ggbWFrZXMgdGhlIGNvZGUgbWF0Y2ggdGhlIGNvbW1lbnQsCisJYW5kIHN1cnJvdW5kaW5nIGNvZGUuCisKKwkqIHNwYXJjLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBBbHdheXMgdGVzdCByZWxvYWRfY29tcGxldGVkCisJaW4gYWRkaXRpb24gdG8gcmVsb2FkX2luX3Byb2dyZXNzLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IERvbid0IHJlb3JkZXIgYW55IFVTRSBpbnNucyBhdCB0aGUgZW5kCisJb2YgYSBmdW5jdGlvbi4gIEV4Y2x1ZGUgdGhlbSBhbGwgZnJvbSBzY2hlZHVsaW5nLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9hcnJheV9yZWYpOiBDaGVjayBmb3Igd2hlbiBgYXInIGlzIGFuCisJZXJyb3JfbWFya19ub2RlIGFuZCBkb24ndCBlbWl0IGEgc2Vjb25kIGVycm9yIG1lc3NhZ2UgZm9yIHRoYXQgbm9kZS4KKworCSogTWFrZWZpbGUuaW46IENvcnJlY3QgbWlzYyB0eXBvcyBpbiBjb21tZW50cyBvciBzcGFjaW5nLgorCShtb3N0bHljbGVhbik6IFVwZGF0ZSBuYW1lcyBvZiBmaWxlcyB0byBkZWxldGUuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLW1hbik6IEFsc28gaW5zdGFsbCBjY2NwIG1hbiBwYWdlLgorCSh1bmluc3RhbGwpOiBBbHNvIGRlbGV0ZSBjY2NwIG1hbiBwYWdlLiAgRG9uJ3QgZGVsZXRlIHByb3RvaXplIGFuZAorCXVucHJvdG9pemUgbWFuIHBhZ2VzIHR3aWNlLgorCisJKiBNYWtlZmlsZS5pbiAobGliZ2NjMi5hKTogRGVsZXRlIHVubmVjZXNzYXJ5IC1mc3RyZW5ndGgtcmVkdWNlIC1PCisJZmxhZ3Mgb24gZ2NjIGNvbW1hbmQgbGluZXMsIHN1cGVyc2VkZWQgYnkgTElCR0NDMl9DRkxBR1MuCisKKwkqIE1ha2VmaWxlLmluIChjb25maWcuc3RhdHVzKTogVmVyaWZ5IHRoYXQgZmlsZSBkb2VzIG5vdCBleGlzdAorCWJlZm9yZSBwcmludGluZyBhbiBlcnJvciBhbmQgZmFpbGluZy4gIFByZXZlbnRzIHByb2JsZW0gd2l0aCBTdW4ncworCUtFRVBfU1RBVEUgZmVhdHVyZS4KKworRnJpIEZlYiAyOCAwNToxNTo1OCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogQ2FsbCBlbWl0X3F1ZXVlLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBEb24ndCBnZW5lcmF0ZSBjb252ZXJ0IHdob3NlIG9wZXJhbmQKKwlpcyByZWdpc3RlciB0aGF0IGlzIG5vdCB2YWxpZCBpbiBpdHMgbW9kZS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBEb24ndCBkbyBhbnl0aGluZyB3aXRoIHBhcmFkb3hpY2FsCisJU1VCUkVHcyBpZiBCWVRFX0xPQURTX1pFUk9fRVhURU5ELgorCitUaHUgRmViIDI3IDA5OjU5OjA5IDE5OTIgIEplZmZyZXkgQSBMYXcgIChsYXcgYXQgYjExNS5zdXBlci5vcmcpCisKKwkqIHRvcGxldi5jIChtYWluKTogRW5hYmxlIGNhbGxlci1zYXZlcyBmb3IgYWxsIG1hY2hpbmVzIGF0CisJb3B0aW1pemF0aW9uIGxldmVscyBvZiAtTzIgb3IgaGlnaGVyLgorCSogbWlwcy5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IHRvcGxldi5jIHdpbGwgdHVybiBvbgorCWNhbGxlci1zYXZlcyBhdCAtTzIgbm93LiAgRG8gbm90IGRvIGl0IGhlcmUuCisJKiBzcGFyYy5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IExpa2V3aXNlCisKK1RodSBGZWIgMjcgMDY6NDc6MzEgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3AtY2FsbC5jOiBNb3ZlIHNvbWUgZXh0ZXJuIGRlY2xhcmF0aW9ucyB0byBmaWxlIGxldmVsLgorCisJKiBlbWl0LXJ0bC5jIChpbml0X2VtaXRfb25jZSk6IENhc3QgVk9JRG1vZGUgdG8gaW50IGluIGFycmF5IGluZGV4LgorCisJKiByZW9yZy5jIChtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBEb24ndCBtYWtlIHJlY3Vyc2l2ZSBjYWxsIGlmCisJZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgaGFzIGluZmluaXRlIGxvb3AuCisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSAnbycpOiBOZXcgY2FzZSB0byBzdXBwb3J0IGZvbGRpbmcgTE9fU1VNLgorCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2FsbG9jKTogV2hlbiBjYWxsaW5nIHJlbG9hZCwgcGFzcyB0aGUKKwlyZXN1bHQgb2YgZ2V0X2luc25zIGluc3RlYWQgb2YgYmFzaWNfYmxvY2tfaGVhZFswXS4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRG9uJ3QgY2hlY2sgYXJyYXkgaW5kZXgKKwlhZ2FpbnN0IGxpbWl0cyBpZiBhcnJheSBib3VuZHMgd2VyZW4ndCBzcGVjaWZpZWQuCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IFB1dCBiYWNrIC1zLgorCisJKiBnY2MuYyAoZmluZF9hX2ZpbGUpOiBBZGQgbWlzc2luZyBwYXJlbiBpbiBpbml0IG9mIGZpbGVfc3VmZml4LgorCisJKiBpMzg2c3VuLmggKExJQl9TUEVDKTogSW5zZXJ0IG1pc3NpbmcgYmxhbmsuCisKKwkqIHN1bjM4Ni5oIChURVhUX1NFQ1RJT05fQVNNX09QLCBEQVRBX1NFQ1RJT05fQVNNX09QKTogQWRkICN1bmRlZi4KKworCSogc3BhcmMuaCAoTElOS19TUEVDKTogQ29ycmVjdCBjb21tZW50LgorCisJKiBzdW4zLmgsIGkzODZzdW4uaCAoTElOS19TUEVDKTogRG9uJ3QgZm9yY2UgLUJzdGF0aWMgaWYgLWcuCisKKwkqIG1pcHMtbmV3cy5oIChBU01fU1BFQyk6IEFkZCBtaXNzaW5nICJ9Ii4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtbmF0aXZlKTogRG9uJ3QgaW5jbHVkZSBpbnN0YWxsLXByb3RvLgorCSgueS5jKTogU3VwcHJlc3MgZGVmYXVsdCBydWxlIGZvciB1c2luZyBZYWNjLgorCisJKiBjb21iaW5lLmMgKGFwcGx5X2Rpc3RyaWJ1dGl2ZV9sYXcsIGNhc2UgU1VCUkVHKTogQ2hlY2sgdGhhdCB3b3JkCisJbnVtYmVycyBhcmUgdGhlIHNhbWUuCisJRG9uJ3QgY2hhbmdlIGEgc2luZ2xlLXdvcmQgb3BlcmF0aW9uIGludG8gYSBtdWx0aS13b3JkIG9wZXJhdGlvbi4KKwlQdXQgYWxsIGNoZWNrcyBvbiBTVUJSRUdzIGluIG9uZSBwbGFjZS4KKwkoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBVc2UgY29ycmVjdCB3b3JkIG51bWJlciB3aGVuIG1ha2luZworCWV4cGxpY2l0IFNVQlJFRy4KKworCSogUkVBRE1FLlNDTzogT2Jzb2xldGUgZmlsZSBkZWxldGVkLgorCitXZWQgRmViIDI2IDIxOjIzOjAyIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogc3BhcmMubWQgKERJbW9kZSBzZXRoaSk6IENvcnJlY3RseSBoYW5kbGUgQ09OU1RfRE9VQkxFLCB3YXMKKwl3cm9uZyBlbmRpYW4uCisJKERJbW9kZSBsb19zdW0pOiBEb24ndCBvdXRwdXQgQ09OU1RfRE9VQkxFUyBhcyA2NCBiaXQgY29uc3RhbnRzLAorCWp1c3Qgb3V0cHV0IHRoZSBsb3cgMzIgYml0cy4KKworCSogdW5yb2xsLmMgKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogRm9yIGNvbWJpbmVkIGFkZHJlc3MgZ2l2cywgc2F2ZQorCXRoZSBpbmNyZW1lbnQgYW1vdW50IGluIGFkZF92YWwuCisJKGNvcHlfbG9vcF9ib2R5KTogRm9yIGNvbWJpbmVkIGFkZHJlc3MgZ2l2cywgaW5jcmVtZW50IGJ5IHRoZQorCWFtb3VudCBjYWxjdWxhdGVkIGJ5IGZpbmRfc3BsaXR0YWJsZV9naXZzLCBub3QgYnkgdGhlIGFtb3VudCB0aGF0CisJdGhlIGdpdiBpdCB3YXMgY29tYmluZWQgd2l0aCBnZXRzIGluY3JlbWVudGVkIGJ5LgorCisJKiBleHByLmMgKGNsZWFyX3BlbmRpbmdfc3RhY2tfYWRqdXN0KTogQ2hlY2sgZmxhZ19ub19pbmxpbmUsIG5vdAorCW9wdGltaXplLCB0byBkZXRlcm1pbmUgd2hldGhlciBmdW5jdGlvbnMgZGVjbGFyZWQgaW5saW5lIHdpbGwgYmUKKwlpbmxpbmVkLgorCisJKiBkYnhvdXQuYzogRGVsZXRlIGFsbCAjaWZuZGVmIERCWF9ERUJVR0dJTkdfSU5GTyBzdHVicy4gIE5vbmUgb2YKKwl0aGVtIGFyZSBuZWVkZWQuCisKKwkqIGhwODAwLmMsIGhwODAwLmg6IEZpeCB0eXBvcyBpbiBjb21tZW50cy4KKworV2VkIEZlYiAyNiAwMjozOTo1MiAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogSWYgY29udmVyc2lvbiBvZiBJTlNUQU5DRV9QVFIKKwl5aWVsZHMgZXJyb3JfbWFya19ub2RlLCByZXR1cm4gZXJyb3JfbWFya19ub2RlIGltbWVkaWF0ZWx5LgorCitUdWUgRmViIDI1IDIzOjQwOjAxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogdHJlZS5jIChhcnJheV90eXBlX25lbHRzKTogRml4IGRvY3VtZW50YXRpb24sIHJlYWxseSBuZWx0cy0xCisJKiBjcC10cmVlLmMgY3AtdHJlZS5oIGNwLWluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRml4ZWQKKwltdWx0aS1kaW1lbnNpb25hbCBhcnJheSBpbml0cy4KKworTW9uIEZlYiAyNCAwMDowMzoyMyAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuYyAoYnVpbGRfY3BsdXNfbmV3KTogU2V0IFRSRUVfU0lERV9FRkZFQ1RTIGJpdCBvbgorCU5FV19FWFBSLgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBIYW5kbGUgV0lUSF9DTEVBTlVQX0VYUFJzCisJc3BlY2lhbGx5IHdoZW4gdGhleSBhcHBlYXIgaW4gZXhwcmVzc2lvbnMgKG5vdCBpbml0aWFsaXphdGlvbnMpLgorCUFsc28gaGFuZGxlIENPTkRfRVhQUnMgb24gdGhlIHJpZ2h0LWhhbmQtc2lkZSBzcGVjaWFsbHkgKGluIGNhc2Ugb25lCisJb2YgdGhlIENPTkRfRVhQUidzIGJyYW5jaGVzIGlzIGEgV0lUSF9DTEVBTlVQX0VYUFIpLgorCitTdW4gRmViIDIzIDE1OjExOjI3IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZmluaXNoX2Fub25fdW5pb24pOiBNYWtlIFJUTCBmb3IgQU5PTl9VTklPTl9ERUNMIGJhc2VkCisJb24gTUFJTl9ERUNMLgorCisJKiBjcC1kZWNsLmMgKGxvb2t1cF90YWcpOiBEZWFsIHdpdGggdGhlIGZhY3QgdGhhdCBgY2xlYXJfYW5vbl90YWdzJworCW1heSBoYXZlIGJlZW4gcnVuLgorCisJKiBjcC1kZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBHaXZlIGxpbmUgbnVtYmVyIGZvciB1c2FnZQorCXdoY2loIGluY3VycyB3YXJuaW5nIG1lc3NhZ2UuCisKK1NhdCBGZWIgMjIgMjA6NDk6NDUgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nLGF1dG9fZnVuY3Rpb24pOiBOZXcgYXBwcm9hY2ggdG8KKwlkZWZpbmluZyB0aGUgZGVmYXVsdCBmdW5jdGlvbnMgYG9wZXJhdG9yIG5ldycgYW5kIGBvcGVyYXRvciBkZWxldGUnLgorCSogY3AtaW5pdC5jIChpbml0X2luaXRfcHJvY2Vzc2luZyk6IFJlc3Qgb2YgY2hhbmdlcyBoZXJlLgorCSogbGliZ2NjMi5jIChfYnVpbHRpbl97bmV3LGRlbGV0ZSxOZXd9KTogR29uZS4KKwkqIGxpYmdjYzIuYyAoX25ld19oYW5kbGVyKTogTmV3IG5hbWUgZm9yIHNlY3Rpb24gdGhhdCBkZWZpbmVzIHRoZQorCWRlZmF1bHQgbmV3IGhhbmRsZXIuCisKK1NhdCBGZWIgMjIgMDI6MDk6NTUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuMCByZWxlYXNlZC4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEhhbmRsZSBTUEFDRV9BRlRFUl9MX09QVElPTi4KKwkqIGhwMzIwLmggKFNQQUNFX0FGVEVSX0xfT1BUSU9OKTogRGVmaW5lZC4KKwlOb3RlOiBmb3IgMi4xLCB0cnkgbWFraW5nIGEgc3BhY2UgdGhlcmUgb24gYWxsIHN5c3RlbXMuCisKKwkqIGkzODZtYWNoLmggKHBlcmZvcm1fKik6IE5ldyBtYWNyb3MsIGNvcGllZCBmcm9tIGkzODZyb3NlLmguCisKKwkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBOZXcgdGFyZ2V0LgorCShyZWFsY2xlYW4pOiBBdm9pZCBkdXBsaWNhdGlvbiB3aXRoIHNlbGYgb3Igd2l0aCBkaXN0Y2xlYW4uCisJKGdjYy54dGFyLlopOiBEZXBlbmQgb24gZ2NjLnh0YXIuCisJKGdjYy54dGFyKTogRml4ZXMgaW4gY29weWluZyBmaWxlcy4KKworCSogZXhwci5jIChkb19zdG9yZV9mbGFnKTogRG9uJ3QgY29ycmVjdCBDT0RFIGJlZm9yZSB3aGVyZSBpdCBpcyBzZXQuCisKKwkqIGNwLXBhcnNlLnkgKHN0bXQpOiBQYXNzIHB1c2hjYXNlX3JhbmdlIGFsbCB0aGUgYXJncyBpdCB3YW50cy4KKworRnJpIEZlYiAyMSAxODoxNDo1MiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIG9mIGEKKwlSRUdfREVBRCBub3RlIGZvciBhIG11bHRpLXdvcmQgaGFyZCByZWdpc3RlciB3aGVuIG5vdCBhbGwgb2YKKwl0aGUgd29yZHMgYXJlIHVzZWQuCisKK0ZyaSBGZWIgMjEgMTY6NDc6MzIgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQ2hhbmdlIE1laXNzbmVyIHZlcnNpb24gIyB0byAxMi4KKwkoaGFsZl9waWMgc3VwcG9ydCk6IE1vdmUgdGhlIGhhbGZwaWMgc3VwcG9ydCB0byBoYWxmcGljLmggd2hpY2ggaXMKKwlpbmNsdWRlZCBpbiB0aGUgZGVjcm9zZSBjYXNlLCBhbmQgbm9wIHRoZSBzdXBwb3J0IGluIG90aGVyIE1JUFMKKwlwbGF0Zm9ybXMuCisJKE9QVElNSVpBVElPTl9PUFRJT05TKTogTW92ZSBzZXR0aW5nIGNhbGxlci1zYXZlcyB0byAtTzIuCisJKE9CSkVDVF9GT1JNQVRfQ09GRiwgRVhURU5ERURfQ09GRik6IERlZmluZSB1bmxlc3MgT1NGL3Jvc2UuCisJKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBBbHdheXMgcmVjYWxjdWxhdGUgdGhlIGZyYW1lIHNpemUsCisJZG9uJ3QgcmVseSBvbiBjYWNoZWQgdmFsdWVzLgorCisJKiBtaXBzLmMgKGhhbGZfcGljIHN1cHBvcnQpOiBNb3ZlIHRoZSBoYWxmcGljIHN1cHBvcnQgdG8gaGFsZnBpYy5jLAorCXdoaWNoIGlzIG9ubHkgY29tcGlsZWQgZm9yIE9TRi9yb3NlLgorCShleHBhbmRfYmxvY2tfbW92ZSk6IFVzZSBjb3B5X2FkZHJfdG9fcmVnIGluc3RlYWQgb2YgY29weV90b19yZWcgaW4KKwljYXNlIGVpdGhlciB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIGlzIGFuIGludGVnZXIgY29uc3RhbnQKKwljb252ZXJ0ZWQgdG8gYW4gYXBwcm9wcmlhdGUgcG9pbnRlciB0eXBlLgorCShtaXBzX2RlYnVnZ2VyX29mZnNldCk6IFVzZSBhIGxvY2FsIHZhcmlhYmxlIHRvIGhvbGQgZnVuY3Rpb24KKwlyZXN1bHQuCisKKwkqIGRlY3Jvc2UuaCAodG9wbGV2ZWwpOiBJbmNsdWRlIGhhbGZwaWMuaCBmb3IgaGFsZnBpYyBzdXBwb3J0LgorCShQVFJESUZGX1RZUEUpOiBDaGFuZ2UgdG8gJ2ludCcgdG8gbWF0Y2ggY3VycmVudCBpbmNsdWRlIGZpbGVzLgorCShXQ0hBUl9UWVBFKTogQ2hhbmdlIHRvICd1bnNpZ25lZCBpbnQnIHRvIG1hdGNoIGluY2x1ZGUgZmlsZXMuCisJKElOSVRfU0VDVElPTl9BU01fT1ApOiBEZWxldGUsIHNpbmNlIHRoZSBPU0Yvcm9zZSBhc3NlbWJsZXIgZG9lc24ndAorCXN1cHBvcnQgYSB0cnVlIGluaXRpYWxpemF0aW9uIHNlY3Rpb24uCisKKwkqIGVuY3Jvc2UuaCAoUFRSRElGRl9UWVBFKTogQ2hhbmdlIHRvICdpbnQnIHRvIG1hdGNoIGN1cnJlbnQgaW5jbHVkZQorCWZpbGVzLgorCShXQ0hBUl9UWVBFKTogQ2hhbmdlIHRvICd1bnNpZ25lZCBpbnQnIHRvIG1hdGNoIGluY2x1ZGUgZmlsZXMuCisKKwkqIHQtZGVjcm9zZSAoRVhUUkFfT0JKUyk6IERlZmluZSBhcyBoYWxmcGljLm8gdG8gcHJvdmlkZSBoYWxmcGljCisJc3VwcG9ydC4KKwkoQ09ORklHMl9IKTogVHJlYXQgaGFsZnBpYy5oIGFzIGFub3RoZXIgY29uZmlnIGZpbGUuCisJKGhhbGZwaWMubyk6IEFkZCBkZXBlbmRlbmNpZXMuCisKKwkqIGhhbGZwaWMuaCAobmV3IGZpbGUpOiBDb21tb24gaW5jbHVkZSBmaWxlIGZvciBzeXN0ZW1zIG5lZWRpbmcgdGhlCisJT1NGL3Jvc2UgaGFsZi1waWMgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KKworCSogaGFsZnBpYy5jIChuZXcgZmlsZSk6IENvbW1vbiBzdXBwb3J0IGZpbGUgZm9yIHN5c3RlbXMgbmVlZGluZyB0aGUKKwlPU0Yvcm9zZSBoYWxmLXBpYyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiAgQ3VycmVudGx5IHRoZXNlIGFyZSBzdHViCisJZnVuY3Rpb25zLgorCitGcmkgRmViIDIxIDE2OjA3OjAyIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoZ2V0X2N1cnJlbnRfZGVjbHNwZWNzKTogTmV3IGZ1bmN0aW9uCisJKG5lZWRlZCBmb3IgbmFtaW5nIHNlY3Rpb25zKS4KKworRnJpIEZlYiAyMSAwMTozNDowOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGR3YXJmb3V0LmMgKGxvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6IFVzZSBERUNMX1JUTCBhZ2Fpbi4KKwlTZWVtcyB0byBiZSBzYWZlciBmb3IgdGhlIG1vbWVudC4KKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzKTogRG9uJ3QgaW5zdGFudGlhdGUgREVDTF9JTkNPTUlOR19SVEwuCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9tZW1fbG9jX2Rlc2NyaXB0b3IpOiBIYW5kbGUgQ09OU1QgbGlrZSBTWU1CT0xfUkVGLgorCisJKiBjb2xsZWN0Mi5jIChlcnJubyk6IERlY2xhcmUgaWYgbm90IG1hY3JvLgorCisJKiBkYnhvdXQuYyBbTUlQU106IEluY2x1ZGUgZ3N0YWIuaCwgbm90IHN0YWIuaC4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBObyBsb25nZXIgZmx1c2ggbGVhZGluZyBfIGZvciBDKysgc3ltcy4KKworCSogY3AtcGFyc2UueSAoLmh1c2hfd2FybmluZyk6IFNldCAkJC4KKworCSogZ3N0ZGFyZy5oOiBIYW5kbGUgX0hJRERFTl9WQV9MSVNUIGFzIGluIGd2YXJhcmdzLmguCisKK1RodSBGZWIgMjAgMDc6NDE6MjkgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmF4LmMgKHJlZ19vcl9ueG1lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShzcGxpdF9xdWFkd29yZF9vcGVyYW5kcyk6IEFkZCBtaXNzaW5nIHJldHVybiB0eXBlICh2b2lkKS4KKwkqIHZheC5tZCAoamxiYy9qYmMvamxicy9qYnMpOiBIYW5kbGUgUUltb2RlIG9wZXJhbmRzIHByb3Blcmx5LgorCisJKiBjYWxsZXItc2F2ZS5jIChzZXRfcmVnX2xpdmUpOiBVc2UgbW9kZSBvZiBTVUJSRUcgdG8gc2VlIGhvdyBtYW55CisJaGFyZCByZWdzIGFyZSB3cml0dGVuLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0LCBjYXNlIElPUiwgQU5ELCBYT1IpOiBQZXJmb3JtCisJbG9naWMgY29tcHV0YXRpb24gaW4gUkVTVUxUX01PREUsIG5vdCBtb2RlIG9mIFZBUk9QLgorCitXZWQgRmViIDE5IDE4OjMyOjA1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGhwMzIwLmggKFBSSU5UX09QRVJBTkQpOiBTdXBwb3J0IGNvZGVzICckJyBhbmQgJyYnLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEFkZCBjYXN0IG9mIGVudW0gaW4gaW5kZXguCisKKwkqIHZtcy5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfX0dOVUNfXyBhcyAyLgorCitXZWQgRmViIDE5IDIxOjQzOjM2IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAob3V0cHV0X21lbV9sb2NfZGVzY3JpcHRvcik6ICBEZWxldGVkIHVzZWxlc3MgYmxhbmsgbGluZS4KKwkob3V0cHV0X21lbV9sb2NfZGVzY3JpcHRvcikgQWRkZWQgY29kZSB0byBoYW5kbGUgQ09OU1RzIGluIERFQ0xfUlRMCisJZXhwcmVzc2lvbnMuCisJKGR3YXJmb3V0X2ZpbmlzaCk6ICBBZGRlZCBjb2RlIHRvIHB1dCBhIG51bGwgc3RyaW5nIGF0IHRoZSBlbmQgb2YKKwl0aGUgdGVybWluYXRpbmcgLmRlYnVnX21hY2luZm8gc2VjdGlvbi4KKworVHVlIEZlYiAxOCAxODozNDoxMyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IEZpeCB0eXBvIGluIGNvbW1lbnQgb3Igc3BhY2luZy4KKwkqIGRieG91dC5jIChkYnhvdXRfYmxvY2spOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc24pOiBMaWtld2lzZS4KKwkqIHJ0bC5oIChSRUdfTk9URVMpOiBMaWtld2lzZS4KKwkqIHN1bjRvMy5oOiBMaWtld2lzZS4KKwkqIHVsdHJpeC5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgorCSogdG9wbGV2LmMgKGZsYWdfbm9fY29tbW9uKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKGxheW91dF90eXBlKTogTGlrZXdpc2UuCisJKiBnY2MuYyAoaXNfbGlua2VyX2RpciwgbG9va3VwX2NvbXBpbGVyKTogTGlrZXdpc2UuCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogQ29tbWVudCBjb2RlIGhhbmRsaW5nIFVTRSBpbnNucyBhcworCW9ic29sZXRlLgorCitUdWUgRmViIDE4IDE0OjQ0OjQ5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYysrOiBSdW4gZ2NjIGluIHNhbWUgZGlyIGFzIGMrKyB3YXMgaW4sIGlmIGV4aXN0cyB0aGVyZS4KKwlVc2UgYGV4ZWMnIHRvIHJ1biBpdC4KKwlOZXcgdmFyIGBoYXZlZmlsZXMnOyBzcGVjaWFsIG1lc3NhZ2UgaWYgbm8gaW5wdXQgZmlsZXMgc3BlY2lmaWVkLgorCVBhc3MgdGhyb3VnaCBhbnkgdW5yZWNvZ25pemVkIG9wdGlvbnMuCisKKwkqIGcrKzogTm93IGEgbGluayB0byBjKysuCisKK1R1ZSBGZWIgMTggMDQ6NTQ6NTIgMTk5MiAgZGF2aWQgZCBbem9vXSB6dWhuICAoem9vIGF0IGx5bnguc3BhLnVtbi5lZHUpCisKKwkqIHByb3RvaXplLmMgKG1haW4pOiBhZGRlZCBzdXBwb3J0IGZvciAtcCBmbGFnLCB0byBzcGVjaWZ5IHdoaWNoCisJZ2NjIGlzIHRoZSBvbmUgdG8gY2FsbCBmb3IgLWZnZW4tYXV4LWluZm8gc3VwcG9ydC4KKworVHVlIEZlYiAxOCAwNzoyOToyMyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgY2xvYmJlciBPVEhFUl9JTlNOJ3MgUEFUVEVSTiBpZgorCXdlIGFyZW4ndCBhYmxlIHRvIGNoYW5nZSB0aGUgaW5zbi4KKworCSogcm9tcC5tZCAoYml0X2luc3YpOiBBZGQgbWlzc2luZyBDTE9CQkVSIHdoZW4gbWFraW5nIHBhdHRlcm4gdG8KKwltYXRjaCBtZnRiOyBsaWtld2lzZSBmb3IgdGhlIERFRklORV9JTlNOLgorCitUdWUgRmViIDE4IDAxOjAzOjQxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcnM2MDAwLmggKGJzc19zZWN0aW9uKTogU2V0IGBpbl9zZWN0aW9uJyBjb3JyZWN0bHkuCisKKwkqIGV4cG1lZC5jIChzeW50aF9tdWx0KTogQ291bnQgc2Vjb25kIHNoaWZ0IGZvciBhbGdfY29tcG91bmQuCisJQ291bnQgZXh0cmEgc2hpZnQgZm9yIGxlYSBjYXNlLgorCSogbTY4ay5oIChSVFhfQ09TVFMpOiBSZWR1Y2UgY29zdCBvZiBtdWx0aXBseS4KKworCSogZnVuY3Rpb24uYyAoaW5zdGFudGlhdGVfZGVjbHMpOiBJbnN0YW50aWF0ZSBERUNMX0lOQ09NSU5HX1JUTC4KKworTW9uIEZlYiAxNyAxOToxNzo1MCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLm1kIChkaXZtb2RzaTQsIHVkaXZtb2RzaTQpOiBEb24ndCB1c2UgcmVnIDE4MCBleHBsaWNpdGx5LgorCUluc3RlYWQgdXNlICdxJyBjb25zdHJhaW50IGxldHRlci4KKworTW9uIEZlYiAxNyAxNjoxNTowMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdsb2JhbC1hbGxvYy5jIChnbG9iYWxfYWxsb2MpOiBBbHdheXMgY2FsbCBgcmVsb2FkJy4KKworTW9uIEZlYiAxNyAxMDozODozOCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGEyOWsubWQgKG1vdmRpIGRlZmluZV9zcGxpdCk6IFVzZSBESW1vZGUgaW4gb3BlcmFuZF9zdWJ3b3JkCisJY2FsbHMsIG5vdCBERm1vZGUuCisKK01vbiBGZWIgMTcgMDg6MjA6MzMgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfZXh0ZXJuYWwpOiBDaGVjayB0aGF0IERFQ0wgaXMgc29tZSBzb3J0IG9mCisJX0RFQ0wgYmVmb3JlIHJlZmVyZW5jaW5nIGl0cyBERUNMX1JUTC4KKworU3VuIEZlYiAxNiAxMzowNTozNiAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBBZGQgY2FsbCB0byBgYXNzZW1ibGVfZXh0ZXJuYWwnIGluCisJY2FzZSB0aGlzIGlzIHRoZSBmaXJzdCB1c2Ugb2YgRlVOQ1RJT04uCisJKiBjcC1jbGFzcy5jIChidWlsZF92Zm5fcmVmKTogRGl0dG8gZm9yIFZUQkwuCisJKiBjcC1kZWNsMi5jICh3cml0ZV92dGFibGVfZW50cmllcyk6IERpdHRvIGZvciBGTi4KKwkqIGNwLWluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IERpdHRvIGZvciBULgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IERpdHRvIGZvciBGVU5DVElPTi4KKwkqIGNwLW1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBEaXR0byBmb3IgVkFMVUUuICBBbHNvIHJlbW92ZQorCWFjdGlvbiB0aGF0IG1hZGUgY2FsbCB0byBgYXNzZW1ibGVfZXh0ZXJuYWwnIHdoZW4gIVRSRUVfVVNFRCAoVkFMVUUpLgorCisJKiBjcC1sZXguYyAoZG9faWRlbnRpZmllcik6IFJlbW92ZSBjYWxsIHRvIGBhc3NlbWJsZV9leHRlcm5hbCcgd2hlbgorCWltcGxpY2l0bHkgZGVjbGFyaW5nIElELgorCisJKiBjcC1wYXJzZS55IChwcmltYXJ5KTogU2ltcGxpZnkgdGhlIHJ1bGVzIGZvciBjYWxsaW5nCisJYGFzc2VtYmxlX2V4dGVybmFsJy4KKworCSogY3AtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBGb3IgZGVzdHJ1Y3RvcnMsIGRvbid0IGNhbGwKKwlleHBhbmRfZXhwcl9zdG10IGlmIEVYUFJTVE1UIGlzIFZPSURfWkVST19OT0RFLgorCisJKiBjcC10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogUGFyYWxsZWwgSmFuIDIxIGNoYW5nZSBpbgorCWMtdHlwZWNrLmMuCisKK1N1biBEZWMgMTYgMjM6MzE6NTQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChmdW5kYW1lbnRhbF90eXBlX2NvZGUpOiAgRGVsZXRlZCBndW5rIGZvciBoYW5kbGluZworCU9GRlNFVF9UWVBFcy4gKFRoZXkgYXJlICpub3QqIGZ1bmRhbWVudGFsIHR5cGVzKS4KKwkoZnVuZGFtZW50YWxfdHlwZV9jb2RlKTogIEZpeGVkIHR5cG8uCisJKGxvY2F0aW9uX2F0dHJpYnV0ZSwgY29uc3RfdmFsdWVfYXR0cmlidXRlKTogIENoYW5nZWQgdG8gdGFrZSBvbmUKKwlydHggcGFyYW1ldGVyIHJhdGhlciB0aGFuIG9uZSB0cmVlIHBhcmFtZXRlci4KKwkobG9jYXRpb25fb3JfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogIENoYW5nZWQgdG8gdXNlIERFQ0xfSU5DT01JTkdfUlRMCisJcmF0aGVyIHRoYW4gREVDTF9SVEwgZm9yIGZvcm1hbCBwYXJhbWV0ZXJzLiAgQWxzbyBjaGFuZ2VkIGNhbGxzIHRvCisJbG9jYXRpb25fYXR0cmlidXRlIGFuZCBjb25zdF92YWx1ZV9hdHRyaWJ1dGUgdG8gcHJvdmlkZSB0aGUgcnRsCisJcGFyYW1ldGVyLgorCShmdW5kX3R5cGVfYXR0cmlidXRlKTogIENoYW5nZWQgdG8gYWNjZXB0IGFuIGFjdHVhbCBmdW5kYW1lbnRhbCB0eXBlCisJY29kZSBhcyBhIHBhcmFtZXRlciBkaXJlY3RseS4gIEFsc28gY2hhbmdlZCBhbGwgY2FsbHMgY29ycmVzcG9uZGluZ2x5LgorCSh0eXBlX2F0dHJpYnV0ZSk6ICBTZXBhcmF0ZWQgdGVzdHMgZm9yIEVSUk9SX01BUksgYW5kIGZvciBWT0lEX1RZUEUKKwlhbmQgYWRkZWQgY29tbWVudHMuCisJKG91dHB1dF91bnNwZWNpZmllZF9wYXJhbWV0ZXJzX2RpZSk6ICBDaGFuZ2VkIHRvIHRha2Ugb25lIHRyZWUgcGFyYW0KKwlhbmQgdG8gZ2VuZXJhdGUgKmJvdGgqIGFuIEFUX25hbWUgYW5kIGFuIEFUX3R5cGUgYXR0cmlidXRlIHdoZW4gdGhlCisJaW5wdXQgcGFyYW1ldGVyIHJlcHJlc2VudHMgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIEFsc28gYWRqdXN0ZWQKKwlhbGwgY2FsbHMgY29ycmVzcG9uZGluZ2x5LgorCitTdW4gRmViIDE2IDAwOjU0OjEwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IEFkZCAjaWZuZGVmIGFyb3VuZCBzaXplX3QgZGVjbGFyYXRpb24gaW4gdHlwZXMuaC4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX2V4dGVybmFsKTogRG8gbm90aGluZyBpZiBhcmcgaXNuJ3QgYSBkZWNsLgorCisJKiBNYWtlZmlsZS5pbiAoY3AtcGFyc2UuYyk6IFVwZGF0ZSAiZXhwZWN0IiBtc2cuCisKKwkqIG5leHQuaCAoQ1BQX1NQRUMpOiBSZW5hbWUgLWJzZCB0byAtc3RyaWN0LWJzZC4KKworCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogQWRkIGxkLCBtaXBzLXRmaWxlLCBtaXBzLXRkdW1wLgorCisJKiBwcm90b2l6ZS5jIChkaXJlY3Rvcnlfc3BlY2lmaWVkX3ApOiBEb24ndCBtYXRjaCBmaWxlcyBpbiBzdWJkaXJzLgorCisJKiB4bS1yczZrLW0uaDogUmVuYW1lZCBmcm9tIHhtLXJzNjAwMC1tYWNoLmguCisJKiBjb25maWd1cmUgKHJzNjAwMC0qLW1hY2gqKTogQ2hhbmdlZCBhY2NvcmRpbmdseS4KKworCSogY29sbGVjdDIuYyAoaGFuZGxlcik6IE5vIGVycm9yIG1zZyBoZXJlLiAgSnVzdCByZXNlbmQgc2lnbmFsLgorCSh3cml0ZV9jX2ZpbGUpOiBBcmcgdG8gd3JpdGVfbGlzdC4uLiBpcyBwb2ludGVyLgorCShkb193YWl0KTogRml4IHR5cG8uCisJKHNjYW5fcHJvZ19maWxlIGZvciBub24tT1NGKTogUHJlc2VydmUgYWxsIHVuZGVyc2NvcmVzLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb2xsZWN0Mik6IEluc3RhbGwgZ2NjIGluIGxpYnN1YmRpci4KKworU2F0IEZlYiAxNSAxNToyNjowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChkZWNvZGVfcmVnX25hbWUpOiBFbXB0eSBzdHJpbmcgaXMgbm90IGEgcmVnIG51bWJlci4KKworCSogZm9sZC1jb25zdC5jIChtZXJnZV9jb21wb25lbnRfcmVmZXJlbmNlcyk6IE5FIHRlc3RzIGFnYWluc3QKKwltaXNtYXRjaGVkIGNvbnN0YW50cyBmb3JjZXMgMSwgbm90IDAsIGFzIHZhbHVlLgorCisJKiBpMzg2Z2FzLmggKEFTTV9PVVRQVVRfT1BDT0RFKTogQ29udmVydCByZXB6IHRvIHJlcGUuCisKKwkqIGNvbGxlY3QyLmM6IEdldCByaWQgb2YgUFJPVE8gbWFjcm87IHVzZSBub24tcHJvdG90eXBlIGRlY2xzLgorCURvbid0IGluY2x1ZGUgZ3N0ZGRlZi5oIChoYWQgY29uZmxpY3RzKS4gIFVzZSBnc3RkYXJnLmgsIG5vdCBzdGRhcmcuaC4KKwkoeGNhbGxvYywgeG1hbGxvYyk6IEFkZCBjYXN0cy4KKwkoZG9fd2FpdCk6IEF2b2lkIG1hY3JvcyBXVEVSTVNJRywgV0VYSVRTVEFUVVMgbWlzc2luZyBvbiBzb21lIG1hY2hpbmVzLgorCisJKiBjcC10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogRG9uJ3QgdXNlIGluaXRpYWwgdmFsdWUgaWYgQkxLbW9kZS4KKworCSogb2JqYy1hY3Rpb25zLmMgKGZpbmlzaF9vYmpjKTogRml4IHR5cG9zIGluIGxhc3QgY2hhbmdlLgorCisJKiBjLWF1eC1pbmZvLmMsIGRieG91dC5jLCBjY2NwLmMgKGVycm5vKTogRGVjbGFyZSwgaWYgbm90IGEgbWFjcm8uCisKKwkqIGkzODYubWQgKFFJIGJpdCB0ZXN0IHJlY29nbml6ZXIpOiBTcGxpdCBpbnRvIHNlcGFyYXRlIHBhdHRlcm5zCisJZm9yIG1lbW9yeSBhbmQgcmVnaXN0ZXIgYXJncy4gIE1ha2UgYSBzY3JhdGNoIHJlZyBmb3IgbWVtb3J5LgorCitGcmkgRmViIDE0IDIzOjM5OjU4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChnZXRfaWRlbnRpZmllcik6IEltcHJvdmUgLVdpZC1jbGFzaCBtZXNzYWdlLgorCitGcmkgRmViIDE0IDE2OjIyOjQ4IDE5OTIgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbiBhdCBvc2Yub3JnKQorCisJKiBpMzg2cm9zZS5oIChDUFBfU1BFQyk6IERlZmluZSB0aGUgbWFjcm9zIExBTkdVQUdFX09CSkVDVElWRV9DIGFuZAorCUxBTkdVQUdFX0NfUExVU19QTFVTIGlmIHdlIGFyZSBjb21waWxpbmcgT2JqZWN0aXZlIEMgb3IgQysrLgorCShJTklUX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lIGFzIC5pbml0LgorCShDQzFQTFVTX1NQRUMpOiBEZWZpbmUgaXQuCisJKExJTktfTElCR0NDX1NQRUNJQUwpOiBEZWZpbmUgdGhpcyB0byB3b3JrIGFyb3VuZCBsaW5rZXIgYnVnLgorCitGcmkgRmViIDE0IDAwOjM4OjE1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKHByb3RvaXplLm8sIHVucHJvdG9pemUubyk6IGcrKy1pbmNsdWRlIGlzIHVuZGVyIGxpYmRpci4KKworCSogTWFrZWZpbGUuaW4gKGVucXVpcmUubyk6IE1ha2UgdGhlIGNvbW1hbmQgb25lIGxvbmcgbGluZS4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IE9taXQgcmVsYXRpdmUgcHJlZml4ZXMgZnJvbSAtTCdpbmcKKwlvbmx5IGlmIFJFTEFUSVZFX1BSRUZJWF9OT1RfTElOS0RJUiBpcyBkZWZpbmVkLgorCSogcnM2MDAwLmggKFJFTEFUSVZFX1BSRUZJWF9OT1RfTElOS0RJUik6IERlZmluZWQuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9leHRlcm5hbCk6IFRlc3QgVFJFRV9FWFRFUk5BTC4KKworCSoganVtcC5jIChmb2xsb3dfanVtcHMpOiBJZiBjYW4ndCBmaW5kIGNoYWluIGVuZCwgcmV0dXJuIG9yaWcgbGFiZWwKKworCSogbW90MzMwMC5oIChQUklOVF9PUEVSQU5EKTogQWx3YXlzIHByaW50IDE2IGhleCBkaWdpdHMgZm9yIGEgZG91YmxlLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpIFtORVhUX09CSkNfUlVOVElNRV06IFJldCAwLgorCShmaW5pc2hfb2JqYyk6IFZhbHVlIDAgZnJvbSBidWlsZF9tb2R1bGVfZGVzY3JpcHRvciBtZWFucyBubyBjdG9yLgorCVdoZW4gcmVmZXJlbmNpbmcgYSBjbGFzc19uYW1lIHN5bWJvbCwgZG9uJ3Qgb3V0cHV0IGEgLmdsb2JsIGZvciBpdC4KKwkoZmluaXNoX29iamMpOiBQdXQgYXJ0aWZpY2lhbCByZWZzIGluIHRleHQgc2VjdGlvbi4KKworCSogY2NjcC5jIChwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IEhhbmRsZSAtdywgLVcuCisKK0ZyaSBGZWIgMTQgMDc6NDQ6MDggMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2LmMgKG5vdGljZV91cGRhdGVfY2MpOiBzQ09ORCBvcGNvZGVzIGRvbid0IGNoYW5nZSB0aGUgZmxhZ3MuCisJRG9uJ3QgcmVjb3JkIHRlc3Qgb3IgY29tcGFyZXMgaW52b2x2aW5nIHN0YWNrLWxpa2UgcmVncywgc2luY2UKKwlmaW5hbCBjYW4ndCBvbWl0cyB0ZXN0cyBvciBjb21wYXJlcyBpbnZvbHZpbmcgc3VjaCByZWdzIGNvcnJlY3RseS4KKworCSogaTM4Ni5jIChzZXEsc25lLGJlcSxibmUpOiBUaGVzZSBvcGNvZGVzIHVzZSB0aGUgc3RhdGUgb2YKKwljY19zdGF0dXMgZnJvbSBiZWZvcmUgdGhlIGN1cnJlbiBpbnNuLgorCisJKiByZWctc3RhY2suYyAoc3RhY2tfcmVnX21lbnRpb25lZF9wKTogRG9uJ3QgbWFrZSBzdGF0aWMuCisKK0ZyaSBGZWIgMTQgMDY6Mjc6NDggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRGlzYWJsZSAiaWYgKC4uLikgey4uLiB4ID0gQzt9IGlmICh4KSAuLi4iCisJb3B0aW1pemF0aW9uOyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB3YXkgdG8gZml4IGl0LgorCitUaHUgRmViIDEzIDE4OjA2OjA2IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogc2VxMzg2LmggKEFTTV9PVVRQVVRfT1BDT0RFKTogTmV3IG1hY3JvLiBDaGFuZ2UgIm1vdnMiIGludG8KKwkic21vdiIgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyaW5nIG1vdmUgbW5lbW9uaWMgLSBTZXF1ZW50IGFzKDEpCisJZG9lc24ndCBoYW5kbGUgdGhlIGZvcm1lci4KKworVGh1IEZlYiAxMyAxNzoyMToyNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogVXNlIHBlZHdhcm4gZm9yIHBlZGFudGljIHdhcm5pbmcuCisJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCisJKiBjLXBhcnNlLnkgKGNvbXBvbmVudF9kZWNsX2xpc3QyKTogTGlrZXdpc2UuCisKK1RodSBGZWIgMTMgMjI6MTE6MzYgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChtYWtlX2V4dHJhY3Rpb24pOiBEZWZhdWx0IG1vZGVzIHRvIGJ5dGUgYW5kIHJlZ2lzdGVyCisJc2l6ZSwgYXMgYXBwb3ByaWF0ZSwgd2hlbiB0aGUgYml0ZmllbGQgaW5zbiBkb2Vzbid0IGV4aXN0LgorCisJKiBhMjlrdW5peC5oIChMSU5LX1NQRUMpOiBQYXNzIGRlZmF1bHQgb3B0aW9uIGZpbGUgdG8gZ2xkLgorCShMSU5LX0xJQkdDQ19TUEVDSUFMKTogRGVmaW5lIHRvIHdvcmsgYXJvdW5kIGdsZCBidWcuCisKKwkqIGV4cGxvdy5jIChjb3B5X3RvX3N1Z2dlc3RlZF9yZWcpOiBUcnkgZ2V0dGluZyBtb2RlIGZyb20gVEFSR0VULgorCisJKiByczYwMDAuaCAoQVNNX0ZJTEVfRU5EKTogTmV3IG1hY3JvLgorCShFWFRSQV9TRUNUSU9OUyk6IE5ldyBzZWN0aW9uIHJlYWRfb25seV9wcml2YXRlX2RhdGEuCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogTmV3IGZ1bmN0aW9uIHJlYWRfb25seV9wcml2YXRlX2RhdGFfc2VjdGlvbi4KKwkoU0VMRUNUX1JUWF9TRUNUSU9OKTogQWx3YXlzIG1ha2Ugbm9uLXRvYyBkYXRhIHByaXZhdGUsIHJlYWQtb25seS4KKwkoU0VMRUNUX1NFQ1RJT04pOiBQdXQgcmVhZC1vbmx5IGRhdGEgaW4gYXBwcm9wcmlhdGUgc2VjdGlvbnMuCisKKwkqICBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBQbGFjZSBicmFuY2ggaW4gY29ycmVjdCBwbGFjZSB3aGVuCisJb3B0aW1pemluZyAiaWYgKC4uLikgey4uLiB4ID0gQzt9IGlmICh4KSAuLi4iLgorCShyZWRpcmVjdF9qdW1wKTogRW5zdXJlIGp1bXAncyBVSUQgaXMgd2l0aGluIHJhbmdlIG9mIGp1bXAgY2hhaW4uCisKKwkqIGEyOWsuYyAob3V0cHV0X3Byb2xvZ3VlKTogQ29ycmVjdGx5IHNldCBMUjEgd2hlbiBtb3JlIHRoYW4gNjQKKwlyZWdpc3RlcnMgYXJlIG5lZWRlZC4KKworV2VkIEZlYiAxMiAyMjoyMjo0NiAxOTkyICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1jY2NwLmNvbTogRGVmaW5lIGxpbmsgYXMgYSBsb2NhbCBzeW1ib2wgdG8gYXZvaWQgCisJcG9zc2libGUgY29uZmxpY3Qgd2l0aCBhIHVzZXIgZGVmaW5lZCBnbG9iYWwgc3ltYm9sLgorCisJKiBtYWtlLWNjMS5jb206IExpa2V3aXNlLgorCitUaHUgRmViIDEzIDExOjA1OjA3IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmMgKG1ha2VfdGVtcF9maWxlKTogU3RvcmUgY3JlYXRlZCBmaWxlbmFtZSBpbnRvIGEgc3RhdGljCisJZmlsZS1zY29wZSB2YXJpYWJsZSwgbm90IGFuIGF1dG8uCisJKG1pcHNfYXNtX2ZpbGVfZW5kKTogVXNlIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBpbiBwcmludGluZworCWVycm9ycy4KKworVGh1IEZlYiAxMyAwMToxNTowMCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoc2tpcF9pZl9ncm91cCk6IFNraXAgY29tbWVudHMgYWZ0ZXIgdGhlICMuCisKKwkqIGNjY3AuYyAobWFjYXJnKTogRG9uJ3QgYXNzdW1lIHN0cmluZ2lmeSB3aWxsIGNvbXByZXNzIHNwYWNlcy4KKwkobWFjcm9leHBhbmQpOiBJbiBzdHJpbmdpZnksIGNvbXByZXNzIHNwYWNlIG9ubHkgb3V0c2lkZSB0b2tlbnMuCisKKwkqIGNleHAueSAoZXhwMSk6IFVzZSBwZWR3YXJuIGZvciBjb21tYSBpbiAjaWYuCisKKwkqIGNwLWRlY2wuYyAocHVzaF9iaW5kaW5nX2xldmVsLCBwb3BfYmluZGluZ19sZXZlbCk6CisJQ2hhbmdlIGBpbmxpbmUnIHRvIGBfX2lubGluZScuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9jb21wb3VuZF9vcGVyYXRpb24pOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KKworV2VkIEZlYiAxMiAxODo0Nzo0NyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSwgY2FzZSBJRl9USEVOX0VMU0UpOgorCURvbid0IHNwZWNpYWwgY2FzZTsgYWxsb3cgYWxsIG9wZXJhbmRzIHRvIGJlIHByb2Nlc3NlZC4gIFRoZSBsYXN0CisJdHdvIG9wZXJhbmRzIGFyZSBub250cml2aWFsIG9uIHRoZSBWYXguCisKK1dlZCBGZWIgMTIgMTg6NTg6NDggMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogT25seSBhYnNvbHV0ZSBwcmVmaXhlcyB0dXJuIGludG8gLUwncy4KKwkobGlua19jb21tYW5kX3NwZWMpOiBIYW5kbGUgTElOS19MSUJHQ0NfU1BFQ0lBTC4KKworV2VkIEZlYiAxMiAxODozODoyOSAxOTkyICBDaHJpcyBTbWl0aCAgKGNzbWl0aCBhdCBjb252ZXguY29tKQorCisJKiBjb252ZXguaCAoREVGQVVMVF9DQUxMRVJfU0FWRVMpOiBkZWZpbmUgYWdhaW4sIGJ1ZyBpcyBmaXhlZC4KKwkqIGNvbnZleC5oIChCUkFOQ0hfQ09TVCk6IERlZmluZSBhcyAwLCBzbyB3ZSB3b24ndCB1c2UgY29tcGxleAorCWFsdGVybmF0aXZlcyB0byBicmFuY2hlcyAod2hvc2UgZXhwYW5zaW9ucyBjb250YWluIGJyYW5jaGVzCisJb24gY29udmV4KS4KKworV2VkIEZlYiAxMiAxNzoyMzo1NyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IEFjY2VwdCBqdXN0IGBocHBhJyBmb3IgbWFjaGluZS4KKworCSogTWFrZWZpbGUuaW4gKEluc3RhbGwtY29sbGVjdDIpOiBOZXcgdGFyZ2V0LgorCitXZWQgRmViIDEyIDEzOjU1OjI0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogRG9uJ3QgY29udmVydCBqdW1wIHRvIHJldHVybiBoZXJlLgorCisJKiBjb25maWd1cmUgKGEyOWstdWx0cmEtKik6IERlbGV0ZWQuCisJKGEyOWstKi1ic2QqKTogTWVyZ2VkIHdpdGggYTI5ay11bHRyYS0qLgorCShyb21wLSotbWFjaCopOiBGaXhlZCB0eXBvIGluIHhtYWtlX2ZpbGUgbmFtZS4KKwkqIHhtLWEyOWt1bml4Lmg6IFJlbmFtZWQgZnJvbSB4bS1hMjlrLXVsdC5oLgorCSogeC1hMjlrdW5peDogTmV3IGZpbGUuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEb24ndCB1c2UgY2xhc3MgZnJvbSBwcmVmZXJlbmNlIGlmIGl0CisJaXMgYSBzaW5nbGUtcmVnaXN0ZXIgY2xhc3MuCisKK1dlZCBGZWIgMTIgMTM6MDM6MTYgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuaCAoRlVOQ1RJT05fQk9VTkRBUlksIEFTTV9PVVRQVVRfQUxJR04pOiBQYWNrIGNvZGUgdGlnaHRseQorCXdoZW4gY29tcGlsaW5nIGNydHN0dWZmLmMgKGZsYWdfaW5oaWJpdF9zaXplX2RpcmVjdGl2ZSkuCisKK1dlZCBGZWIgMTIgMTA6MzQ6MDkgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIGRlY3Jvc2UuaCAoKl9TUEVDKTogQ29tcHJlc3Mgc29tZSB3aGl0ZXNwYWNlIGluIHRoZSBzcGVjcy4gIEFsc28sCisJc2ltcGlmeSB3aGljaCBMQU5HVUFHRV94eHggbmFtZXMgYXJlIGRlZmluZWQsIHRvIGJlIHRoZSBvbmVzIHVzZXMgYnkKKwl0aGUgc3lzdGVtKHMpLgorCSogZGVjc3RhdG4uaCAoKl9TUEVDKTogTGlrZXdpc2UuCisJKiBpcmlzLmggKCpfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy5oICgqX1NQRUMpOiBMaWtld2lzZS4KKwkqIG1pcHMtYnNkLmggKCpfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy1uZXdzLmggKCpfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy1zeXN2LmggKCpfU1BFQyk6IExpa2V3aXNlLgorCitXZWQgRmViIDEyIDEwOjM0OjA5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmMgKGluc2VydF9zYXZlX3Jlc3RvcmUpOiBQcm9wZXJseSBjaGVjayBmb3IgaW5zbnMgdGhhdAorCXJlZmVyZW5jZSBDQzAuCisKK1dlZCBGZWIgMTIgMDM6MTc6MDAgMTk5MiAgQ2hyaXMgU21pdGggIChjc21pdGggYXQgY29udmV4LmNvbSkKKworCSogY29udmV4LmggKERFRkFVTFRfQ0FMTEVSX1NBVkVTKTogZG9uJ3QgZGVmaW5lLCB0byBzaWRlc3RlcCBhIGJ1Zy4KKwkqIGNvbnZleC5tZCAoZmZzc2kyKTogQ29tbWVudCBvdXQuCisKK1dlZCBGZWIgMTIgMDA6MDg6NDIgMTk5MiAgICAoRXJpYyBZb3VuZ2RhbGUgYXQgeW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIG1ha2UtbGliZ2NjMi5jb206IERvIG5vdCBzYXZlIC5zIGZpbGUuCisKKwkqIHZtcy5oOiBXcmFwICNpbmNsdWRlIDxzdGRpby5oPiBpbiAjaWZkZWYgTF9fbWFpbi9lbmRpZgorCitUdWUgRmViIDExIDIxOjU4OjQyIDE5OTIgICAgKEVyaWMgWW91bmdkYWxlIGF0IHlvdW5nZGFsZUB2NjU1MGMubnJsLm5hdnkubWlsKQorCisJKiBsaWJnY2MyLmMgKERPX0dMT0JBTF9EVE9SU19CT0RZKTogTmV3IG1hY3JvLgorCisJKiBtYWtlLWwyLmNvbTogTmV3IGZpbGUgdG8gYnVpbGQgbGliZ2NjMiBvbiBWTVMuCisKKwkqIHZtcy5oIChET19HTE9CQUxfQ1RPUlNfQk9EWSk6IFJlcGxhY2VtZW50IGRlZmluaXRpb24uCisKKwkqIHZtcy5oIChET19HTE9CQUxfRFRPUlNfQk9EWSk6IExpa2V3aXNlLgorCisJKiBtYWtlLWNjY3AuY29tOiBEZWZpbmUgYmlzb24gYW5kIHJlbmFtZSBhcyBsb2NhbCBzeW1ib2xzIHRvIGF2b2lkIAorCXBvc3NpYmxlIGNvbmZsaWN0IHdpdGggdXNlciBkZWZpbmVkIGdsb2JhbCBzeW1ib2xzLgorCitUdWUgRmViIDExIDIyOjE3OjMyIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNjaGVkLmMgKGF0dGFjaF9kZWF0aHMpOiBEb24ndCB0cmVhdCBQSUMgb2Zmc2V0IHRhYmxlIHJlZ2lzdGVyCisJc3BlY2lhbGx5OyBmbG93LmMgZG9lc24ndC4KKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgY2FzZSBBTkQpOiBXZSBjYW4gaGF2ZQorCWEgKGFuZCAoc3VicmVnIChsc2hpZnRydCAuLikgLi4pIC4uKTsgaGFuZGxlIHNhbWUgYXMgd2l0aG91dCBTVUJSRUcuCisgCisJKiBNYWtlZmlsZS5pbiAoSE9TVF9DTElCLCBIT1NUX0FMTE9DQSwgSE9TVF9NQUxMT0MsIEhPU1RfT0JTVEFDSyk6IE5ldworCXZhcmlhYmxlcyB0byBvdmVycmlkZS4KKwkoVVNFX0hPU1RfKiwgSE9TVF9MSUJERVBTKTogVXNlIEhPU1RfUFJFRklYIGFuZCBuZXcgdmFyaWFibGVzLgorCShIT1NUX0xJQlMpOiBVc2UgSE9TVF9DTElCLgorCitUdWUgRmViIDExIDIxOjMyOjA3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uLWhlYWRlcnMpOiBDb3B5IGJ5dGVvcmRlci5oIHRvCisJY29tcGlsYXRpb24gZGlyLgorCisJKiBjb25maWcuc3ViOiBBbGxvdyB1bmljb3MgYXMgb3BlcmF0aW5nIHN5c3RlbS4KKworCSogbTg4a3Y0LmggKElOSVRfU0VDVElPTl9BU01fT1ApOiBBZGQgI3Byb2diaXRzLgorCisJKiB2YXguaCAoRFlOQU1JQ19DSEFJTl9BRERSRVNTKTogTmV3IG1hY3JvLgorCisJKiBjKys6IFByb3BhZ2F0ZSBxdW90ZWQgYXJncyBwcm9wZXJseS4KKworVHVlIEZlYiAxMSAxNjozNTowMSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBEZWZpbmUgVEVSTSB0byBgdW5rbm93bicsIHRvIGVuc3VyZSB0aGF0IGl0IGlzCisJdmFsaWQuICBPdGhlcndpc2UsIGV4IG1heSBmYWlsLgorCSogZml4aW5jLnN2cjQ6IExpa2V3aXNlLgorCitUdWUgRmViIDExIDE4OjA0OjMyIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBkZWNyb3NlLmggKENQUF9TUEVDKTogRGVmaW5lIHRoZSBtYWNyb3MgTEFOR1VBR0VfT0JKRUNUSVZFX0MgYW5kCisJTEFOR1VBR0VfQ19QTFVTX1BMVVMgaWYgd2UgYXJlIGNvbXBpbGluZyBPYmplY3RpdmUgQyBvciBDKysuCisJU2lsaWNvbiBHcmFwaGljcyBpbiBwYXJ0aWN1bGFyIHVzZXMgTEFOR1VBR0VfQ19QTFVTX1BMVVMuCisJKiBkZWNzdGF0bi5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogaXJpcy5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy1ic2QuaCAoQ1BQX1NQRUMpOiBMaWtld2lzZS4KKwkqIG1pcHMtbmV3cy5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy1zeXN2LmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisKKwkqIGRlY3N0YXRuLmggKENQUF9QUkVERUZJTkVTKTogRWxpbWluYXRlIF9fPG5hbWU+IHZlcnNpb25zLCBzaW5jZQorCWdjYyB3aWxsIGRvIHRoZXNlIGF1dG9tYXRpY2FsbHkuICBFbGltaW5hdGUgTEFOR1VBR0VfQywgc2luY2UgaXQgaXMKKwloYW5kbGVkIGluIENQUF9TUEVDLgorCitUdWUgRmViIDExIDE1OjM4OjI3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IERvbid0IGRlbGV0ZSBsYWJlbHMgdXNlZCBpbiBub24tanVtcHMuCisKKwkqIHZtcy5oIChET19HTE9CQUxfQ1RPUlNfQk9EWSk6IE1vZGlmeSB0aGUgcmV0dXJuIGFkZHJlc3MKKwlvbmx5IHRoZSBmaXJzdCB0aW1lIF9fbWFpbiBpcyBjYWxsZWQuCisKKwkqIGZpeGluYy5zdnI0OiBDaGFuZ2UgaGVhZGVycyB0byB0ZXN0IF9fU1RSSUNUX0FOU0lfXyBpbnN0ZWFkIG9mCisJdGVzdGluZyBfX1NURENfXyAhPSAwLgorCisJKiBmaXhpbmMuc3ZyNCAobW1hbi5oKTogRml4IGJhY2t3YXJkIF9fU1REQ19fIGNvbmRpdGlvbmFsLgorCURvbid0IGFkZCBkZWNsYXJhdGlvbnMgb2YgbXVubWFwIGFuZCBtcHJvdGVjdC4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IEFsbG93IGVtcHR5IGNvbnN0cnVjdG9yIGZvciBhbnkgdHlwZS4KKworCSogZHdhcmZvdXQuYyAoQVNNX09VVFBVVF9EV0FSRl9EQVRBOCk6IEp1c3Qgb25lIGRlZmluaXRpb247CisJdGVzdCBXT1JEU19CSUdfRU5ESUFOICJhdCBydW4gdGltZSIuCisKK1R1ZSBGZWIgMTEgMDk6MDA6MDEgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvbid0IHN1YnN0aXR1dGUgaW4gTUFUQ0hfRFVQcyBpZiB3ZQorCWFyZSBub3QgZ2VuZXJhdGluZyByZXBsYWNlbWVudHMuCisKK1R1ZSBGZWIgMTEgMDg6NDU6MTQgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGt2NC5oICh7Q1RPUlMsRFRPUlN9X1NFQ1RJT05fQVNNX09QKTogRml4IHR5cG8uCisKK01vbiBGZWIgMTAgMjI6MzQ6NDcgMTk5MiAgQ2hyaXMgU21pdGggIChjc21pdGggYXQgY29udmV4LmNvbSkKKworCSogY29udmV4LmgoSEFSRF9SRUdOT19OUkVHUyk6IGRlZmluZSBjb3JyZWN0bHkgZm9yIDY0LWJpdCByZWdzCisKK01vbiBGZWIgMTAgMjE6NTA6MjMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQ2hhbmdlIE1laXNzbmVyIHZlcnNpb24gIyB0byAxMS4KKwkoQ1BQX1NQRUMpOiBEZWZpbmUgdGhlIG1hY3JvcyBMQU5HVUFHRV9PQkpFQ1RJVkVfQyBhbmQKKwlMQU5HVUFHRV9DX1BMVVNfUExVUyBpZiB3ZSBhcmUgY29tcGlsaW5nIE9iamVjdGl2ZSBDIG9yIEMrKy4KKwlTaWxpY29uIEdyYXBoaWNzIGluIHBhcnRpY3VsYXIgdXNlcyBMQU5HVUFHRV9DX1BMVVNfUExVUy4KKwkoRlBfREJYX0ZJUlNUKTogQ2hhbmdlIHRoZSB0ZXN0IHNvIHRoYXQgc3RhYnMgaW4gRUNPRkYgdXNlcyB0aGUKKwl2YWx1ZSAzOCwgaW4gYWRkaXRpb24gdG8gc3RhYnMgaW4gR0FTLgorCisJKiBtaXBzLm1kIChhbGwgZnVuY3Rpb24gdW5pdHMpOiBNYWtlIHRoZSBmdW5jdGlvbiB1bml0cyBzaW1wbGVyLCBhbmQKKwlub3QgZGVwZW5kIG9uIHRoZSBjcHUgdHlwZSwgdG8gd29yayBhcm91bmQgYSBtZW1vcnkgaHVuZ3J5CisJZ2VuYXR0cnRhYiwgd2hpY2ggYXR0ZW1wdHMgdG8gZ3JvdyB0aGUgZGF0YSBzZWdtZW50IHRvIHRoYW4gMzIKKwltZWdhYnl0ZXMuCisKK01vbiBGZWIgMTAgMTY6MzQ6MTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb252ZXguaCAoUkVBTF9WQUxVRV9UUlVOQ0FURSk6IE9ic29sZXRlIGRlZmluaXRpb24gZGVsZXRlZC4KKworCSogY29uZmlnLnN1YiAoY29udmV4LSopOiBUaGVzZSBhcmUgQlNELCBub3Qgc3lzdi4KKworCSogZGJ4b3V0LmMgKGhhdmVfdXNlZF9leHRlbnNpb25zKTogTmV3IHZhci4KKwkoZGJ4b3V0X3R5cGUsIGRieG91dF90eXBlX2ZpZWxkcywgZGJ4b3V0X3N5bWJvbCk6CisJU2V0IGhhdmVfdXNlZF9leHRlbnNpb25zIHdoZW4gdXNlIGFuIGV4dGVuc2lvbi4KKwkoZGJ4b3V0X3N5bWJvbCk6IERvbid0IHVzZSBgVHQnIGV4dGVuc2lvbiB1bmxlc3MgZXh0ZW5zaW9ucworCWhhdmUgYmVlbiB1c2VkLgorCitNb24gRmViIDEwIDEyOjI4OjU5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHhtLWEyOWstdWx0Lmg6IEZpeCB0eXBvIGluIHBsYWNlbWVudCBvZiBjb3B5cmlnaHQgbm90aWNlLgorCitNb24gRmViIDEwIDA1OjM2OjQ1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogRG9uJ3QgdXNlIEdEQiBleHRlbnNpb25zIGlmIHRoZXkgYXJlIGVtcHR5LgorCitNb24gRmViIDEwIDAwOjEwOjIwIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFVzZSBERUNMX0NIQUlOLCBub3QgVFJFRV9DSEFJTiB0byB3YWxrCisJdGhyb3VnaCB0aGUgbGlzdCBvZiBtZXRob2RzIGlkZW50aWZpZWQgYnkgYSB2aXNpYmlsaXR5IGRlY2xhcmF0aW9uLgorCisJKiBjcC1jdnQuYyAoY29udmVydF9wb2ludGVyX3RvKTogTm8gbG9uZ2VyIG5lZWQgdG8gYWJvcnQgaWYgQklORk8gaXMKKwlub3QgYSBUUkVFX1ZFQyBvciBBR0dSX1RZUEUgbm9kZS4KKworCSogY3AtcGFyc2UueSAoc3RtdCk6IEltcHJvdmUgZXJyb3IgaGFuZGxpbmcgZm9yIHRyeS9leGNlcHQuCisKKwkqIGNwLWNsYXNzLmMgKGFkZF9tZXRob2QpOiBJZiB3ZSBjcmVhdGUgUlRMIGZvciBhIGNvcHkgb2YgTUVUSE9ELAorCWNvcHkgdGhlIFJUTCB0byBNRVRIT0QncyBERUNMX1JUTCBzbG90LgorCisJKiBjcC1tZXRob2QuYyAoZHVtcF90eXBlKTogUHJpbnQgYGNvbnN0JyBhbmQvb3IgYHZvbGF0aWxlJyBmb3IKKwlWT0lEX1RZUEUgYW5kIFJFQUxfVFlQRXMsIHRvby4KKworU3VuIEZlYiAgOSAyMTowNzo0NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9pbnRlZ2VyKTogUGFzcyB0aGlyZCBhcmcgaW4gcmVjdXJzaXZlIGNhbGxzLgorCUFjdCBhcHByb3ByaWF0ZWx5IGlmIHdvcmQtYnktd29yZCBsb29wIGRvZXNuJ3QgZmluaXNoLgorCisJKiBNYWtlZmlsZS5pbiAoYm9vdHN0cmFwKik6IERvbid0IG92ZXJyaWRlIHZhbHVlIG9mIEFMTE9DQS4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wsIGRieG91dF9wYXJtcyk6IERvIGxlYWYgZnVuY3Rpb24gcmVtYXAKKwlvbmx5IGlmIExFQUZfUkVHX1JFTUFQIGFuZCBvbmx5IGluIGxlYWYgZnVuY3Rpb25zLgorCitTdW4gRmViICA5IDE2OjQ2OjI3IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChtYXliZV9hZGp1c3RfYWRkcl9mb3JfZGVsZXRlKTogQnVpbGQgZmluYWwgQ09ORF9FWFBSCisJd2l0aCBUUkVFX1RZUEUgKGFkZHIpLgorCitTdW4gRmViICA5IDE0OjIwOjQ5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oIChyczYwMDBfe2Jzcyxwcml2YXRlX2RhdGEscmVhZF9vbmx5fV9zZWN0aW9uX25hbWUpOgorCUFkZCBkZWNsYXJhdGlvbnMuCisJKHJzNjAwMF90ZXh0X3NlY3Rpb25fYXNtX29wKTogRGVsZXRlZC4KKwkoQVNNX0ZJTEVfU1RBUlQpOiBJbml0aWFsaXplIHNlY3Rpb24gbmFtZXMgYW5kIGVudGVyIGJzcyBzZWN0aW9uIG9uY2UuCisJKEVYVFJBX1NFQ1RJT05TKTogQWRkIGBwcml2YXRlX2RhdGEnIGFuZCBgYnNzJzsKKwlkZWxldGUgYGdsb2JhbF92YXJpYWJsZScuLgorCShyZWFkX29ubHlfZGF0YV9zZWN0aW9uKTogRG9uJ3QgZm9ybSBuYW1lIGhlcmUuCisJKGdsb2JhbF92YXJpYWJsZV9zZWN0aW9uKTogRGVsZXRlZC4KKwkocHJpdmF0ZV9kYXRhX3NlY3Rpb24sIGJzc19zZWN0aW9uKTogTmV3IGZ1bmN0aW9ucy4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IERvbid0IHdyaXRlIGZ1bmN0aW9uIG5hbWUgd2l0aCBbUFJdLgorCShBU01fT1VUUFVUX1BPTExfUFJPTE9HVUUpOiBObyBsb25nZXIgbmVlZGVkLgorCShTRUxFQ1Rfe1JUWF8sfVNFQ1RJT04pOiBKdXN0IGNhbGxzIGRhdGFfc2VjdGlvbiBvcgorCXByaXZhdGVfZGF0YV9zZWN0aW9uLgorCShBU01fT1VUUFVUX0xPQ0FMKTogUHV0IGluIGJzcyBzZWN0aW9uLgorCShURVhUX1NFQ1RJT05fQVNNX09QLCBEQVRBX1NFQ1RJT05fQVNNX09QKTogTm93IGEgY29uc3RhbnQuCisJKiByczYwMDAuYyAocnM2MDAwX3RleHRfc2VjdGlvbl9hc21fb3ApOiBEZWxldGVkLgorCShyczYwMDBfe2Jzcyxwcml2YXRlX2RhdGEscmVhZF9vbmx5fV9zZWN0aW9uX25hbWUpOiBBZGQgZGVmaW5pdGlvbnMuCisJKHJzNjAwMF9nZW5fc2VjdGlvbl9uYW1lKTogTmV3IGZ1bmN0aW9uLgorCitTdW4gRmViICA5IDA4OjI5OjIxIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5oIChSRUdOT19SRUdfQ0xBU1MpOiBVc2UgYSBsb29rdXAgdGFibGU6IEFJWCBjYW4ndCBoYW5kbGUKKwljb21wbGV4IHRlcnRpYXJ5IGV4cHJlc3Npb25zLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBTaW1wbGlmeSBzbGlnaHRseSBmb3IgdGhlIEFJWAorCWNvbXBpbGVyLgorCisJKiBpMzg2LmMgKHJlZ2NsYXNzX21hcCk6IE5ldyB2YXJpYWJsZS4gIExvb2t1cCBhcnJheSBmb3IKKwlSRUdOT19SRUdfQ0xBU1MuCisKK1NhdCBGZWIgIDggMDE6MjA6MzMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1wYXJzZS55ICh5eXByaW50KTogVGVzdCBfX0dOVUNfXywgbm90IF9fR05VX18uCisJVXNlIF9faW5saW5lLCBsaWtlIGV2ZXJ5d2hlcmUgZWxzZS4KKworCSogYTI5ay5oLCByb21wLmggKE9WRVJSSURFX09QVElPTlMpOiBEZWxldGVkLgorCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERlZmluZWQsIGluc3RlYWQuCisJKiByczYwMDAuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBOZXcgbWFjcm8uCisJKE9WRVJSSURFX09QVElPTlMpOiBEb24ndCBjaGFuZ2Ugb3B0aW1pemF0aW9uLgorCisJKiBmaW5hbC5jIChsZWFmX3JlbnVtYmVyX3JlZ3NfaW5zbik6IE5vIGxvbmdlciBzdGF0aWMuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCwgZGJ4b3V0X3Bhcm1zKTogQ2FsbCB0aGF0LgorCisJKiBjLWRlY2wuYyAobG9va3VwX25hbWUpOiBEbyBub3RoaW5nIHNwZWNpYWwgaWYgdHlwZSBpcyBlcnJvciBtYXJrLgorCShncm9rZGVjbGFyYXRvcik6IElnbm9yZSBwdXRhdGl2ZSB0eXBlIG5hbWUgd2hvc2UgdHlwZSBpcyBlcnJvciBtYXJrLgorCSogYy1wYXJzZS55IChwcmltYXJ5KTogSWYgdmFyIHR5cGUgaXMgZXJyb3IgbWFyaywgcmV0dXJuIGVycm9yIG1hcmsuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IFJldHVybiBlYXJseSBpZiBhcmcgaXMgZXJyb3IgbWFyay4KKworCSogTWFrZWZpbGUuaW4gKHRlc3QtcHJvdG9pemUpOiBSdWxlIGRlbGV0ZWQuCisKKwkqIHN0bXQuYyAoZW1pdF9jYXNlX25vZGVzKTogSGFuZGxlIGp1c3QtbGVmdC1zdWJ0cmVlIGNhc2UKKwlsaWtlIGp1c3QtcmlnaHQtc3VidHJlZS0tZGVsZXRlIG15c3RlcmlvdXMgY29kZSB0aGF0IHRlc3RzIGNvc3RfdGFibGUuCisKKwkqIHZhcmFzbS5jIChkZWNvZGVfcmVnX25hbWUpOiBBY2NlcHQgZGVjaW1hbCBudW1iZXIgYXMgcmVnIG5hbWUuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IElmIHBvcF9vYnN0YWNrcyBnb2VzIHRvIHBlcm0gb2JzdGFjaywKKwljYWxsIHBlcm1hbmVudF9hbGxvY2F0aW9uLgorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBVc2UgLWxnY2MsIG5vdCBsaWJnY2MuYS4KKworRnJpIEZlYiAgNyAxNjo1NjoxNyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHJzNjAwMC5oIChET0xMQVJTX0lOX0lERU5USUZJRVJTKTogRGVmaW5lIHRvIHplcm8sIGJlY2F1c2UgdGhlCisJYXNzZW1ibGVyIGRvZXMgbm90IGFjY2VwdCBkb2xsYXIgc2lnbnMuCisKK0ZyaSBGZWIgIDcgMTU6MzY6NDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBGaXggbmFtZSBvZiB0bXAtcHJvdG8uMS4KKworCSogY29uZmlndXJlOiBEZWxldGUgZXhjZXNzIHNwYWNlIGluIGFzc2lnbm1lbnQgdG8gc3JjZGlyLgorCisJKiBjcC1kZWNsMi5jIChET0xMQVJTX0lOX0lERU5USUZJRVJTKTogRGVmYXVsdCBub3cgMSwgYXMgaW4gQy4KKworCSogaTM4Nmdhcy5oIChBU01fT1VUUFVUX0xPT1BfQUxJR04pOiBOZXcgbWFjcm8uCisJKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IFVzZSAxNi1ieXRlIGJvdW5kYXJ5IG9uIDQ4Ni4KKworCSogbTY4ay5oIChUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUpOiBVc2Ugb3BlcmFuZHMgZm9yIHRoZSBtZW1yZWZzCisJdG8gYXZvaWQgZGVwZW5kZW5jZSBvbiBhc3NlbWJsZXIgc3ludGF4LgorCitGcmkgRmViICA3IDEwOjI2OjMyIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBNYWtlZmlsZS5pbiAoRVhUUkFfT0JKUyk6IE5ldyB2YXJpYWJsZSBmb3IgZXh0cmEgb2JqZWN0IGZpbGVzCisJbmVlZGVkIHdoZW4gbGlua2luZyBjYzEsIGNjMXBsdXMsIGFuZCBjYzFvYmpjLgorCitGcmkgRmViICA3IDA3OjM0OjAzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoc2V0X2xhYmVsX29mZnNldHMsIHJlbG9hZF9hc19uZWVkZWQpOiBSZWNvbXB1dGUKKwludW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0IHdoZW4gd2UgcGljayB1cCBvZmZzZXRzIGZyb20gb2Zmc2V0c19hdC4KKworCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogQ29weSBpbml0aWFsIGFuZCBmaW5hbCB2YWx1ZXMgdG8gYXZvaWQKKwlzaGFyaW5nLgorCQorCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uKTogQ29tcGxldGUgbGFzdCBjaGFuZ2UgYnkKKwljb3JyZWN0bHkgaGFuZGxpbmcgPD0gYW5kID49LgorCitUaHUgRmViICA2IDIzOjU3OjAyIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEludmVydCBzZW5zZSBvZiB3YXJuaW5nIGFib3V0CisJaW5pdGlhbGl6ZWQgZXh0ZXJuIHZhcnMsIHNpbmNlIGluIEMrKywgY29uc3QgaGFzIGZ1bm55IHNlbWFudGljcy4KKworVGh1IEZlYiAgNiAxNToxMjowMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbik6IFRlc3QgcHJvcGVybHkgZm9yIGZsb2F0aW5nCisJZXF1YWxpdHk7IGRvbid0IGRlZHVjZSB0aGlzIGZyb20gPCBhbmQgPi4KKworCSogeG0tbWlwcy5oIChhbGxvY2EpOiBEb24ndCBkZWZpbmUgb3IgZGVjbGFyZSBpZiBNSVBTX09WRVJSSURFX0FMTE9DQS4KKwkqIHhtLWlyaXg0LmggKE1JUFNfT1ZFUlJJREVfQUxMT0NBKTogRGVmaW5lZC4KKworCSogbTY4ay5oIChUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUpOiBVc2UgZXhwbGljaXQgcmVnIHZhcgorCXRvIGF2b2lkIGRlcGVuZGVuY2Ugb24gcmVnaXN0ZXIgbmFtZSBzeW50YXguCisKKwkqIG1vdDMzMDAuaCAoUFVUX1NEQl9TVEFSVF9ESU0sIFBVVF9TREJfTkVYVF9ESU0sIFBVVF9TREJfTEFTVF9ESU0pOgorCU5ldyBtYWNyb3MuCisJKFBVVF9TREJfRElNKTogRGVsZXRlZC4KKwkoUFJJTlRfT1BFUkFORCk6IEhhbmRsZSAlJCBhbmQgJSYuCisJKEFTTV9PVVRQVVRfT1BDT0RFKTogSGFuZGxlIGYlJG1vdmUgYW5kIGYlJm1vdmUuCisKKwkqIGdzdGRhcmcuaDogSWYgbm90IF9fR05VQ19fLCB1c2Ugc3lzdGVtJ3Mgc3RkYXJnLmguCisKK1RodSBGZWIgIDYgMjI6MzY6MzYgMTk5MiAgICAoRXJpYyBZb3VuZ2RhbGUgYXQgeW91bmdkYWxlQHY2NTUwYy5ucmwubmF2eS5taWwpCisKKwkqIHZtcy5oIChERUZBVUxUX0dEQl9FWFRFTlNJT05TKTogRGVmaW5lIGFzIDAuCisKK1RodSBGZWIgIDYgMTM6MzI6MzcgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogU2V0IE1laXNzbmVyIHZlcnNpb24gIyB0byAxMC4KKwkoZmxhZ19oYWxmX3BpYywgbWlwc19icmFuY2hfbGlrZWx5KTogTmV3IGdsb2JhbCB2YXJpYWJsZXMuCisJKGNhbGxfbWVtb3J5X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisJKGhhbGZfcGljX2VuY29kZV9zZWN0aW9uX2luZm8pOiBMaWtld2lzZS4KKwkobWlwc19jb25zdGFudF9hZGRyZXNzX3ApOiBMaWtld2lzZS4KKwkobWlwc19kZWJ1Z2dlcl9vZmZzZXQpOiBMaWtld2lzZS4KKwkoQ0MxX1NQRUMpOiBNYWtlIE9TRi8xIC1waWMteHh4IHN3aXRjaGVzIHRvIC1taGFsZi1waWMsIHdoaWNoIGlzCisJY3VycmVudGx5IHVuZGVyZ29pbmcgZGV2ZWxvcG1lbnQuCisJKERFQlVHR0VSX0FVVE9fT0ZGU0VUKTogRW1pdCBjb3JyZWN0IGluZm9ybWF0aW9uIGlmIGZyYW1lIHBvaW50ZXIgaXMKKwlvbWl0dGVkLgorCShERUJVR0dFUl9BUkdfT0ZGU0VUKTogTGlrZXdpc2UuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWFiaWNhbGxzIGFuZCAtbWhhbGYtcGljIHN3aXRjaGVzLgorCShQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSk6IERlZmluZSBhcyB0aGUgR1AgcmVnaXN0ZXIgKCQyOCkuCisJKEVYVFJBX0NPTlNUUkFJTlQpOiBBZGQgJ1MnIGNvbnN0cmFpbnQgZm9yIGhhbGYtcGljIHJlZmVyZW5jZXMuCisJKENPTlNUQU5UX0FERFJFU1NfUCk6IENhbGwgbWlwc19jb25zdGFudF9hZGRyZXNzX3AuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBSZW9yZGVyIHRlc3QgdG8gdGVzdCBvcHRpbWl6ZSBmaXJzdCwgYW5kIHRvCisJY2FsbCBoYWxmX3BpY19lbmNvZGVfc2VjdGlvbl9pbmZvIGlmIGhhbGYgcGljLgorCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgY2FsbF9tZW1vcnlfb3BlcmFuZC4KKworCSogbWlwcy5jIChmbGFnX2hhbGZfcGljKTogTmV3IGdsb2JhbCB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0byBwcm9kdWNlCisJaGFsZi1waWMgb3V0cHV0IGZvciBPU0Yvcm9zZS4KKwkobWlwc19icmFuY2hfbGlrZWx5KTogTmV3IGdsb2JhbCB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0aGUgYnJhbmNoCisJc2hvdWxkIHVzZSB0aGUgYnJhbmNoIGxpa2VseSBmb3JtIG9mIHRoZSBpbnN0cnVjdGlvbi4KKwkobWlwc19zd19yZWdfbmFtZXMpOiBVc2UgJGZwIGluc3RlYWQgb2YgZnAsIHNpbmNlIHJlZ2RlZi5oIG5vIGxvbmdlcgorCWRlZmluZXMgZnAuCisJKGNhbGxfbWVtb3J5X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJuIFRSVUUgaWYgdGhlIGFyZ3VtZW50CisJaXMgYSB2YWxpZCBNRU0gZm9yIGEgY2FsbCBpbnN0cnVjdGlvbi4KKwkobWlwc19tb3ZlXzF3b3JkKTogRW1pdCBjb21tZW50IGluIGxhIG9mIGhhbGYtcGljIGFkZHJlc3NlcyBhcyBhCisJdGVtcG9yYXJ5IGZsYWcgdG8gcHV0IHRoZSByaWdodCBjb2RlIGRvd24uCisJKG1pcHNfY29uc3RhbnRfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIGlzIGEKKwljb25zdGFudCBhZGRyZXNzIG9yIG5vdC4gIEFkZCBzdHViIGNvZGUgZm9yIC1taGFsZi1waWMuCisJKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgZmxhZ19oYWxmX3BpYyBpZiAtbWhhbGYtcGljLgorCShvdmVycmlkZV9vcHRpb25zKTogTWFyayAlPyBhcyB2YWxpZCBmb3IgcHJpbnRfb3BlcmFuZC4KKwkobWlwc19kZWJ1Z2dlcl9vZmZzZXQpOiBOZXcgZnVuY3Rpb24gdG8gY29ycmVjdCB0aGUgb2Zmc2V0IGZvcgorCXZhcmlhYmxlcyBhbmQgYXJndW1lbnRzIGlmIHRoZSBmcmFtZSBwb2ludGVyIGhhcyBiZWVuIG9taXR0ZWQuCisJKHByaW50X29wZXJhbmQpOiAlPyBub3cgZW1pdHMgYSAnbCcgaWYgbWlwc19icmFuY2hfbGlrZWxleSBpcyBzZXQuCisJKG1pcHNfYXNtX2ZpbGVfc3RhcnQsIGZ1bmN0aW9uX3Byb2xvZ3VlKTogSWYgLW1hYmljYWxscywgZW1pdCB0aGUKKwlwc2V1ZG8gb3BzIHRoYXQgdGhlIFB5cmFtaWQgU3lzdGVtIFYuNCBwb3J0IHNlZW1zIHRvIHdhbnQuCisJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IFJlc2VydmUgc3BhY2UgZm9yIHNhdmluZyBHUCBpZiAtbWFiaWNhbGxzLgorCShoYWxmX3BpY19lbmNvZGVfc2VjdGlvbl9pbmZvKTogU3R1YiBmdW5jdGlvbiBmb3IgZW5jb2Rpbmcgd2hldGhlcgorCW9yIG5vdCB0byBnZW5lcmF0ZSBhIGhhbGYgcGljIHJlZmVyZW5jZS4KKworCSogbWlwcy5tZCAodHlwZSBhdHRyaWJ1dGUpOiBBZGQgcGljIGF0dHJpYnV0ZS4KKwkoY3B1IGF0dHJpYnV0ZSk6IE5ldyBhdHRyaWJ1dGUgdG8gZ2V0IHRoZSBDUFUgdHlwZS4KKwkoYnJhbmNoX2xpa2VseSBhdHRyaWJ1dGUpOiBOZXcgYXR0cmlidXRlIHRvIHNheSB3aGV0aGVyIG9yIG5vdCB3ZQorCWNhbiB1c2UgYnJhbmNoIGxpa2VseSBpbnN0cnVjdGlvbnMuCisJKGRlZmluZV9kZWxheSk6IE5vdGUgdGhhdCB3ZSBjYW4gYW5udWxsIGZhbHNlIGJyYW5jaGVzIGlmIC1taXBzMi4KKwkobWVtb3J5IGZ1bmN0aW9uIHVuaXQpOiBBZGQgcGljIGluIGFkZGl0aW9uIHRvIGxvYWQuCisJKHZhcmlvdXMgZnVuY3Rpb24gdW5pdHMpOiBVc2UgdGhlIGNwdSBhdHRyaWJ1dGUuCisJKGJyYW5jaCBwYXR0ZXJucyk6IFN1cHBvcnQgYnJhbmNoIGxpa2VseSBpbnN0cnVjdGlvbnMgaWYgLW1pcHMyLgorCShjYWxsLCBjYWxsX2ludGVybmFsKTogVXNlIGNhbGxfbWVtb3J5X29wZXJhbmQgaW5zdGVhZCBvZgorCW1lbW9yeV9vcGVyYW5kLiAgSWYgLW1oYWxmLXBpYyBwdXQgZnVuY3Rpb24gYWRkcmVzcyBpbiBhIHJlZ2lzdGVyLgorCShjYWxsX3ZhbHVlLCBjYWxsX3ZhbHVlX2ludGVybmFsKTogTGlrZXdpc2UuCisKKwkqIGRlY3Jvc2UuaCAoSU5JVF9TRUNUSU9OX0FTTV9PUCk6IERlZmluZSBhcyAuaW5pdC4KKworVGh1IEZlYiAgNiAxMDowNzoxNyAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5jIChwcmVzZXJ2ZV9yZWdpc3RlcnMpOiBDaGFuZ2UgdG8gd2FsayB0aGUgZXBpbG9ndWUgZGVsYXkKKwlpbnNucyBpbiB0aGUgZm9yd2FyZCByYXRoZXIgdGhhbiByZXZlcnNlIG9yZGVyIChmb3IgcmVvcmcuYyBjaGFuZ2UpLgorCitUaHUgRmViICA2IDAyOjU0OjI4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgUExVUyk6IERvbid0IG1ha2UKKwlhIChjb25zdCAocGx1cyBYIFkpKSB3aXRoIFggYSBDT05TVF9JTlQuCisKKwkqIGZpeGluY2x1ZGVzOiBTaW1wbGlmeSBlZ3JlcCBjb21tYW5kLgorCitUaHUgRmViICA2IDAxOjExOjI4IDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChwcm9jZXNzX25leHRfaW5saW5lKTogaWYgd2UgZ2V0IGEgInBhcnNlIGVycm9yIGF0IGVuZCBvZgorCXNhdmVkIGZ1bmN0aW9uIHRleHQiLCBzZXQgeXljaGFyIHRvIHNvbWV0aGluZyB0aGF0CisJcmVzdG9yZV9wZW5kaW5nX2lucHV0IHdpbGwgZGlnZXN0IChpZiBpdCB0aGlua3MgaW5wdXQgaXMgc3RpbGwKKwlwZW5kaW5nLCBpdCB3aWxsIGFib3J0LCBidXQgd2UndmUgYWxyZWFkeSByZXBvcnRlZCB0aGUgcHJvYmxlbSB0bworCXRoZSB1c2VyLikKKworV2VkIEZlYiAgNSAxODo0Mjo1NiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jIChmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IFdoZW4gZmlsbGluZyBkZWxheSBzbG90cyBieQorCXNlYXJjaGluZyBiYWNrd2FyZCwgcHV0IGVhY2ggbmV3IGluc24gd2UgZmluZCBhdCB0aGUgaGVhZCBvZiB0aGUKKwlkZWxheSBsaXN0IGluc3RlYWQgb2YgYXQgdGhlIHRhaWwuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IFdoZW4gYXNzb2NpYXRpbmcgb3BlcmF0aW9ucywgYXZvaWQgaW5maW5pdGUKKwlyZWN1cnNpb24gaWYgdGhlIG5ldyBleHByZXNzaW9uIGNvbnRhaW5zIG91ciBvcGVyYW5kLgorCitXZWQgRmViICA1IDIxOjE4OjA2IDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ2xvYmFsaXplX25lc3RlZF90eXBlKTogSWYgdGhlIHR5cGUgaXNuJ3QgZm91bmQgYXQgYWxsLAorCXRoaXMgaXMgYW4gYW5vbnltb3VzIGZvcndhcmQgcmVmZXJlbmNlLCBzbyBwZXJtaXQgaXQuCisJQWJvcnQgaWYgdHlwZSBpcyBhbHJlYWR5IGdsb2JhbGx5IGRlZmluZWQuCisKK1dlZCBGZWIgIDUgMTg6MDE6MTIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYywgaHA4MDAuaCwgaTM4Ni5oLCBtODhrLmgsIG1pcHMuaCwgcm9tcC5oLCB2bXMuaDoKKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IFJlbmFtZWQgZnJvbSBFTkNPREVfU0VHTUVOVF9JTkZPLgorCisJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IENvcHkgc3RhdGljIGNoYWluIGludG8KKwl2aXJ0dWFsX3N0YWNrX3ZhcnNfcnR4LCBub3QgZnJhbWUgcG9pbnRlciBpdHNlbGYuCisJKG5vbmxvY2FsIGdvdG8gcmV0dXJuIHJlY29nbml6ZXIpOiBKdW1wIHRvICVvMCswLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEZpeCB0ZXN0IGZvciAtV2lkLWNsYXNoLgorCitXZWQgRmViICA1IDE2OjU4OjE1IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfaW5pdCk6ICBBZGQgdHdvIHdvcmRzIGNvbnRhaW5pbmcgdGhlIHN0YXJ0aW5nCisJYW5kIGVuZGluZyBhZGRyZXNzIG9mIHRoZSAudGV4dCBzZWN0aW9uIGZvciB0aGlzIGNvbXBpbGF0aW9uIHVuaXQgdG8KKwl0aGUgc3BlY2lhbCBpbml0aWFsIGVudHJ5IGluIHRoZSAuZGVidWdfc3JjaW5mbyBzZWN0aW9uLgorCitUdWUgRmViICA0IDE0OjUxOjE2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBIYW5kbGUgREJYX09VVFBVVF9DT05TVEFOVF9TWU1CT0wuCisJKGRieG91dF9ibG9jayk6IEhhbmRsZSBEQlhfT1VUUFVUX0NBVENILgorCisJKiBjY2NwLmMgKGxvb2t1cF9pbXBvcnQsIGFkZF9pbXBvcnQsIGRvX2luY2x1ZGUpOgorCVVzZSBiY21wIGFuZCBiY29weSB0byBhY2Nlc3Mgc3RfaW5vIGFuZCAtPmlub2RlIGZpZWxkcy4KKworCSogZGJ4b3V0LmMgKGRieG91dF9pbml0KTogUGFzcyBzeW1zIHRvIERCWF9PVVRQVVRfU1RBTkRBUkRfVFlQRVMuCisKKwkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogQ2hlY2sgdGhhdCBtb2RlcyBtYXRjaC4KKwkoY29tcGFyaXNvbl9lcXVpdl9wKTogTmV3IGZ1bmN0aW9uLgorCShmb2xkKTogVXNlIHRoYXQgd2hlbiBjb252ZXJ0aW5nID86IHRvIG1pbl9leHByIG9yIG1heF9leHByLgorCisJKiBjLWNvbW1vbi5jIChjX2V4cGFuZF9leHByX3N0bXQpOiBUZXN0IGZvciBFUlJPUl9NQVJLIGFzIHR5cGUuCisKK1R1ZSBGZWIgIDQgMTI6MDM6MjYgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IERvbid0IGNyYXNoIGlmIGZ1bmN0aW9uIGNhbGxlZAorCWlzIG5vdCBhbiBBRERSX0VYUFIuCisKK1R1ZSBGZWIgIDQgMTQ6MTc6MjIgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5oICh7ZmxvYXRbc2RdaVtzZF1mLGZpeFtzZF1mW3NkXWksZml4dW5zW3NkXWZbc2RdaX1fbGliZnVuYyk6CisJTmV3IGRlY2xhcmF0aW9ucy4KKwkqIG9wdGFicy5jOiBEZWZpbmUgdGhlbS4KKwkoZXhwYW5kX2Zsb2F0LCBleHBhbmRfZml4KTogVXNlIHRoZW0gaW5zdGVhZCBvZiBtYWtpbmcgYSBuZXcKKwlTWU1CT0xfUkVGIGVhY2ggY2FsbC4KKwkoaW5pdF9vcHRhYnMpOiBJbml0aWFsaXplIHRoZW0uCisKK1R1ZSBGZWIgIDQgMDA6Mjc6MzUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUuMSwgdW5wcm90b2l6ZS4xKTogUmVuYW1lIHRlbXAgZmlsZXMgPCAxNCBjaHJzLgorCisJKiBjY2NwLmMgKHNraXBfaWZfZ3JvdXApOiBNYWtlIHVua25vd24gY21kIG5hbWUgYSBwZWRhbnRpYyB3YXJuaW5nLgorCitNb24gRmViICAzIDE4OjEwOjQxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJvbXAuaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QLCBFTkNPREVfU0VHTUVOVF9JTkZPKTogVXNlCisJU1lNQk9MX1JFRl9GTEFHLgorCisJKiB4LXJvbXAtbWFjaDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKHJvbXAtKi1tYWNoKik6IE5ldyBhbHRlcm5hdGl2ZS4KKworTW9uIEZlYiAgMyAxNjo0Mzo1NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLXR5cGVjay5jICh3YXJuX2Zvcl9hc3NpZ25tZW50KTogUHJpbnQgYXJnIG51bSBpbiBvcmlnaW4gMS4KKworCSogc3BhcmMubWQgKG5vbmxvY2FsX2dvdG8gdHJhcCByZWNvZ25pemVyKTogRml4IG9wY29kZSBzcGVsbGluZy4KKworCSogZnVuY3Rpb24uYyAoZml4X2xleGljYWxfYWRkcik6IFByb3Blcmx5IHNlYXJjaCBmb3IgY29ycmVjdCBkaXNwbGF5LgorCisJKiByb21wLmggKE9WRVJSSURFX09QVElPTlMpOiBEb24ndCBzZXQgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXIuCisKK01vbiBGZWIgIDMgMTE6MTE6NTggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBnY2MuYyAoQGMrKy1jcHAtb3V0cHV0KTogRGVsZXRlIGV4dHJhbmVvdXMgIn19fSIgYXQgdGhlIGVuZCBvZiB0aGUKKwlydWxlLgorCitNb24gRmViICAzIDExOjM4OjE5IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfaW5pdCk6ICBHZW5lcmF0ZSBhbiBpbml0aWFsIDItd29yZCBlbnRyeSBpbiB0aGUKKwkuZGVidWdfc3JjaW5mbyBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3NlcyBvZiB0aGUgc3RhcnRzIG9mIHRoZQorCS5saW5lIGFuZCAuZGVidWdfc2ZuYW1lcyBzZWN0aW9ucy4gIEdlbmVyYXRlIGl0IGFmdGVyIHRoZSBpbml0aWFsIGVudHJ5CisJZm9yIHRoZSAubGluZSBzZWN0aW9uLgorCisJKiBkd2FyZm91dC5jIFtEV0FSRl9USU1FU1RBTVBTXTogRW5zdXJlIHRpbWVfdCBhbmQgdGltZSBkZWNsYXJlZC4KKwkoZHdhcmZvdXRfaW5pdCk6ICBNYWtlIHRoaXJkIHdvcmQgb2YgaW5pdGlhbCAuZGVidWdfc3JjaW5mbyBlbnRyeSBiZQorCXRoZSBjb21waWxhdGlvbiBkYXRlL3RpbWUgaWYgRFdBUkZfVElNRVNUQU1QUyBpcyBkZWZpbmVkLCBvciBlbHNlIC0xLgorCisJKiBkd2FyZm91dC5jIChkd2FyZm91dF9pbml0KTogIE91dHB1dCBjb21waWxhdGlvbiBkaXJlY3RvcnkgbmFtZSBhcworCXRoZSBmaXJzdCB0aGluZyBpbiB0aGUgLmRlYnVnX3NmbmFtZXMgc2VjdGlvbi4KKworTW9uIEZlYiAgMyAwNDoxMjo1MSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRpcik6IGBwYXJlbnQnIGlzIGEgc2hlbGwgdmFyaWFibGUuCisKK01vbiBGZWIgIDMgMDk6NDM6NTEgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuaCAoRVhUUkFfU0VDVElPTlMpOiBVc2UgaW5pdCBhbmQgZmluaSBzZWN0aW9ucyBmcm9tIHN2cjMuaCwKKwlidXQgb25seSB3aGVuIHVzaW5nIHN2cjMuaC4KKworU3VuIEZlYiAgMiAxOTo1MDoyOSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYuaCAoQUREUkVTU19DT1NUKTogTmV3IG1hY3JvLgorCitTdW4gRmViICAyIDE3OjA4OjQ3IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmMgKHNpbXBsZV9tZW1vcnlfb3BlcmFuZCk6IERvbid0IHJlY29nbml6ZSByZWZlcmVuY2VzIHRvCisJdmFyaWFibGVzIGluIC5zZGF0YSBvciAuc2Jzcywgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2Ygbm90IHB1dHRpbmcKKwlzdG9yZXMgaW50byBkZWxheSBzbG90cy4gIFRoaXMgZml4ZXMgYSBidWcgYW5kIGFsc28gZG9lc24ndCB0ZW1wIHRoZQorCU1JUFMgbGlua2VyIGZyb20gdHJ5aW5nIHRvIHB1dCA0IGluc3RydWN0aW9ucyBpbnRvIHRoZSBkZWxheSBzbG90CisJd2hlbiBpdCByZXdyaXRlcyB0aGUgZnVuY3Rpb24gYXMgYSBQSUMgZnVuY3Rpb24uCisKK1N1biBGZWIgIDIgMTY6NTg6MTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnYmwtY3RvcnMuaCAoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBEbyBPTl9FWElUIGxhc3QuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRpcik6ICBDcmVhdGUgdGhlIHBhcmVudCBvZiBtYW5kaXIgaWYgbmVjLgorCisJKiByZWFsLmggKFJFQUxfVkFMVUVfVFJVTkNBVEUpOiBzaXplb2Ygc2F5cyB3aGF0IGNhc3QgdG8gZmxvYXQgZG9lcy4KKworCSogZGJ4b3V0LmMgKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRElSRUNUT1JZKTogTmV3IHBhcmFtZXRlciBtYWNyby4KKwkoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFTkFNRSwgREJYX09VVFBVVF9TT1VSQ0VfRklMRU5BTUUpOgorCShEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogTGlrZXdpc2UuCisJVGhlc2UgYXJlIHVzZWQgaW4gcGxhY2Ugb2YgQVNNXy4uLgorCSogbmV3cGJiLmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUpOiBNYWNybyByZW5hbWVkLgorCShEQlhfT1VUUFVUX1NPVVJDRV9GSUxFTkFNRSk6IExpa2V3aXNlLgorCSogbmV4dC5oIChEQlhfT1VUUFVUX01BSU5fU09VUkNFX0RJUkVDVE9SWSk6IE1hY3JvIHJlbmFtZWQuCisJKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBMaWtld2lzZS4KKworU3VuIEZlYiAgMiAxMjo1MTo1NCAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmXzEpOiBDYWxsIGBjb21wdXRlX3Zpc2liaWxpdHknCisJd2l0aCBhIEJBU0VUWVBFX1BBVEgsIG5vdCBhIFRSRUVfTElTVC4KKworCSogY3AtY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5KTogQXBvbG9naXplIGlmIHdlIGNhbm5vdCBidWlsZCBhCisJcHJvcGVyIHZ0YWJsZSBiZWNhdXNlIG9mIGJ1aWx0aW4gbGltaW5hdGlvbnMuCisKK1N1biBGZWIgIDIgMDc6MzA6MDggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGNvbWJpbmVfcmVsb2Fkcyk6IERvbid0IGNvbWJpbmUgdHdvIHJlbG9hZHMgd2l0aCBkaWZmZXJlbnQKKwlzZWNvbmRhcnkgcmVsb2FkczsgY29weSBzZWNvbmRhcnkgcmVsb2FkIHRvIGNvbWJpbmVkIHJlbG9hZC4KKworCSogY3NlLmMgKGNzZV9tYWluKTogUElDX09GRlNFVF9UQUJMRV9SRUdOVU0gaXMgbm90IGNsb2JiZXJlZCBieSBjYWxscworCWlmIC1mcGljIG9yIC1mUElDLgorCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogTGlrZXdpc2UuCisJKiBzY2hlZC5jIChhdHRhY2hfZGVhdGhzKTogTGlrZXdpc2UuCisKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBEb24ndCBzZXBhcmF0ZSBhIENBTExfSU5TTiBmcm9tCisJZm9sbG93aW5nIENMT0JCRVIgaW5zbnMuCisKKwkqIGZ1bmN0aW9uLmMgKHVzZV92YXJpYWJsZSwgdXNlX3ZhcmlhYmxlX2FmdGVyKTogRG9uJ3QgaW50ZXJwcmV0CisJcmVmZXJlbmNlIHRvIGludGVybmFsIGFyZyBwb2ludGVyIGFzIHZhcmlhYmxlLXNpemVkIG9iamVjdC4KKwkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0LCBleHBhbmRfZnVuY3Rpb25fZW5kKTogQWRkIFVTRSBmb3IgdmlydHVhbAorCWFyZyBwb2ludGVyIGlmIHN0dXBpZCBhbGxvYyBhbmQgaXQgaXMgbm90IHRoZSByZWFsIGFyZyBwb2ludGVyLgorCisJKiBmbG93LmMgKGluc25fZGVhZF9wLCBtYXJrX3NldF8xLCBtYXJrX3VzZWRfcmVncyk6IERvbid0IHRyZWF0CisJQVJHX1BPSU5URVJfUkVHTlVNIHNwZWNpYWxseSBpZiBpdCBpc24ndCBmaXhlZC4KKwkqIHNjaGVkLmMgKGF0dGFjaF9kZWF0aHMpOiBMaWtld2lzZS4KKwkqIHJlb3JnLmMgKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IExpa2V3aXNlOyBhbHNvIG1ha2Ugc2V0IG9mIHJlZ3MKKwljbG9iYmVyZWQgb24gY2FsbCBhZ3JlZSB3aXRoIGNzZSBhbmQgZmxvdy4KKworCSogZnVuY3Rpb24uYyAoZml4X2xleGljYWxfYWRkcik6IFJld29yayB0byBsb29rIGZvciBBUCByZWZlcmVuY2VzCisJdXNpbmcgaW50ZXJuYWxfYXJnX3BvaW50ZXI7IG1ha2Ugc29tZSByZWxhdGVkIGNsZWFudXBzLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBWQVJfREVDTCwgU0FWRV9FWFBSKTogVHJlYXQKKwlpbmxpbmVfZnVuY3Rpb25fZGVjbCBqdXN0IGxpa2UgY3VycmVudF9mdW5jdGlvbl9kZWNsLgorCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogV2hlbiByZXN0b3JpbmcgYXJnIHBvaW50ZXIsIHJlc3RvcmUKKwlpbnRvIHRoZSB2aXJ0dWFsIGZvcm0gc28gd2Ugd2lsbCBzdWJ0cmFjdCB0aGUgcHJvcGVyIG9mZnNldCwgc2luY2UKKwl0aGUgc2F2ZWQgdmFsdWUgaW5jbHVkZXMgdGhlIG9mZnNldC4KKworU2F0IEZlYiAgMSAxNDo0MTozNCAxOTkyICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKKworCSogY3AtcHQuYyAoZW5kX3RlbXBsYXRlX2RlY2wpOiBGb3IgbWV0aG9kIHRlbXBsYXRlLCBubyBsb25nZXIgY2FsbAorCXBvcGNsYXNzOyBpdCBpc24ndCBuZWVkZWQgYW55IG1vcmUuICBJZiBhZnRlciBwcm9jZXNzaW5nIHRlbXBsYXRlCisJd2UncmUgbm90IGF0IHRoZSBnbG9iYWwgYmluZGluZyBsZXZlbCwgdGhyb3cgYXdheSBhbnkgb3RoZXIgYmluZGluZworCWxldmVscywgcmF0aGVyIHRoYW4gYWJvcnRpbmcuICBBbHNvIGRlbGV0ZWQgc29tZSBvdGhlciB1bnVzZWQgY29kZS4KKworU2F0IEZlYiAgMSAwOToxMzo0NyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB4bS1yczYwMDAtbWFjaC5oLCByczYwMDAtbWFjaC5oOiBOZXcgZmlsZXMuCisJKiBjb25maWd1cmUgKHJzNjAwMC0qLW1hY2gpOiBOZXcgb3B0aW9uLgorCitTYXQgRmViICAxIDAwOjU3OjI0IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5jOiBJbmNsdWRlIHRyZWUuaAorCShzeW1ib2xpY19vcGVyYW5kKTogTmV3IHByZWRpY2F0ZSBmdW5jdGlvbi4KKwkoc3ltYm9saWNfcmVmZXJlbmNlX21lbnRpb25lZF9wKTogTmV3IGZ1bmN0aW9uLgorCShsZWdpdGltaXplX3BpY19hZGRyZXNzLGVtaXRfcGljX21vdmUpOiBOZXcgZnVuY3Rpb25zLgorCShmdW5jdGlvbl9wcm9sb2d1ZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgbnJlZ3MuCisJSWYgdGhlIFBJQyByZWcgaXMgdXNlZCwgc2F2ZSB0aGUgb2xkIGNvbnRlbnRzIGFuZCBpbml0aWFsaXplIHdpdGgKKwlhIHBvaW50ZXIgdG8gdGhlIEdPVC4KKwkoc2ltcGxlXzM4Nl9lcGlsb2d1ZSk6IENvdW50IHRoZSBQSUMgcmVnIGlmIGl0IGlzIHVzZWQuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSAiaW5zbiIuICBSZXN0b3JlIHRoZQorCW9yaWdpbmFsIGNvbnRlbnRzIG9mIHRoZSBQSUMgcmVnIGlmIGl0IHdhcyB1c2VkLgorCisJKG91dHB1dF9waWNfYWRkcl9jb25zdCk6IE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgUElDIHN5bWJvbAorCXJlZmVyZW5jZSBzdWZmaXhlcy4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogVXNlIHRoYXQgaWYgZmxhZ19waWMgaXMgdHJ1ZS4KKwkocHJpbnRfb3BlcmFuZCk6IExpa2V3aXNlLiAgRG9uJ3QgcHJpbnQgYSBwcmVmaXggaW4gZnJvbnQgb2YgYW55CisJY29uc3RhbnQgaWYgdGhlICdQJyBjb2RlIGlzIHVzZWQuCisKKwkob3V0cHV0XzM4N19iaW5hcnlfb3ApOiBhYm9ydCBpZiB0aGUgb3AgaXMgbm90IG9uZSB3ZSBoYW5kbGUuCisKKwkobWF4aW11bV9maWVsZF9hbGlnbm1lbnQpOiBOZXcgdmFyaWFibGUuCisJKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBOZXcgZnVuY3Rpb24uICBIYW5kbGUgYHdlYWsnIGFuZCBgcGFjaycuCisKKwkqIGkzODYuaCAoQ09ORElUSU9OX1JFR0lTVEVSX1VTQUdFKTogTmV3IG1hY3JvLiAgTWFyayBQSUMgcmVnIGFzCisJZml4ZWQgYW5kIGNhbGwgdXNlZCBpZiBmbGFnX3BpYyBpcyB0cnVlLgorCShQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSk6IE5ldyBtYWNyby4KKwkoRlVOQ1RJT05fUFJPRklMRVIpOiBPdXRwdXQgUElDIGNvbXBhdGlibGUgY29kZSBpZiBmbGFnX3BpYy4KKwkoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBDb3VudCB0aGUgUElDIHJlZyBpZiBpdCBpcyB1c2VkLgorCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IElmIGZsYWdfcGljIGlzIHRydWUsIHJlamVjdCBiYXJlCisJbGFiZWwgb3Igc3ltYm9sIHJlZmVyZW5jZXMsIGJ1dCBhbGxvdyBjb25zdGFudCBwb29sIHJlZmVyZW5jZXMuCisJSW4gYWxsIGNhc2VzLCBkb24ndCBib3RoZXIgdG8gY2hlY2sgZm9yIGEgY29uc3RhbnQgYXMgdGhlIGZpcnN0CisJb3BlcmFuZCBvZiBhIFBMVVMuCisJKExFR0lUSU1JWkVfQUREUkVTUyk6IENhbGwgbGVnaXRpbWl6ZV9waWNfYWRkcmVzcyBmb3Igc3ltYm9saWMKKwlyZWZlcmVuY2VzIGlmIGZsYWdfcGljIGlzIHRydWUuICBJbiBhbGwgY2FzZXMsIEhJbW9kZSByZWdzIGFyZSBub3QKKwl2YWxpZCBtZW1vcnkgcG9pbnRlcnMuCisJKExFR0lUSU1BVEVfUElDX09QRVJBTkQpOiBOZXcgbWFjcm8uCisJKFNZTUJPTElDX0NPTlNUKTogTmV3IG1hY3JvLgorCShFTkNPREVfU0VHTUVOVF9JTkZPKTogTmV3IG1hY3JvIHRvIG5vdGljZSBzdGF0aWMgdmFyaWFibGVzLgorCShDT05TVF9DT1NUUyk6IFN5bWJvbGljIGNvbnN0YW50cyBjb3N0IG1vcmUgaWYgZmxhZ19waWMgaXMgdHJ1ZS4KKworCSogaTM4Ni5tZCAobW92c2kpOiBVc2UgZGVmaW5lX2V4cGFuZC4gIENhbGwgZW1pdF9waWNfbW92ZSBmb3IKKwlzeW1ib2xpYyBjb25zdGFudHMgaWYgZmxhZ19waWMgaXMgdHJ1ZS4KKwkoZGl2bW9kTTQsdWRpdm1vZE00KTogQ2hhbmdlIHByZWRpY2F0ZXMgc28gdGhhdCBvbmx5IHJlZ3MgYXJlCisJYWxsb3dlZCBpbiBvcGVyYW5kcyB0aGF0IGNhbid0IGJlIGEgbWVtLiAgQXZvaWRzIHJlbG9hZAorCWNvbmdlc3Rpb24uCisJKGluZGlyZWN0X2p1bXApOiBBbGxvdyBhbnkgcmVnIG9yIG1lbSBhcyBvcGVyYW5kLCBub3QganVzdCByZWcgMC4KKwkoY2FzZXNpKTogTmV3IGluc24sIG9ubHkgdXNlZCBpZiBmbGFnX3BpYyBpcyB0cnVlLgorCShjYWxsLGNhbGxfcG9wLGNhbGxfdmFsdWUsY2FsbF92YWx1ZV9wb3ApOiBVc2UgZGVmaW5lX2V4cGFuZCB0bworCXJlY29yZCBpZiB0aGlzIGZ1bmN0aW9uIGV2ZXIgZW1pdHMgYSBjYWxsLCB3aGljaCB3aWxsIGltcGxpY2l0bHkKKwl1c2UgdGhlIFBJQyBhZGRyZXNzIHJlZ2lzdGVyLgorCisJKiBzdnI0LmggKFNFTEVDVF9TRUNUSU9OKTogQW55IGl0ZW0gd2hvc2UgaW5pdGlhbCB2YWx1ZSBpbnZvbHZlcworCWxpbmtlciByZWxvY2F0aW9uIG11c3QgZ28gaW4gdGhlIGRhdGEgc2VjdGlvbiBpZiBmbGFnX3BpYyBpcyB0cnVlLgorCisJKiBpMzg2djQuaCAoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogT3V0cHV0IGluIFBJQyBzdHlsZS4gIElmCisJZmxhZ19waWMgaXMgZmFsc2UsIEFERFJfRElGRl9WRUNzIGFyZSBub3Qgb3V0cHV0IGFuZCB0aGlzIGlzIG5vdAorCXVzZWQuCisJKEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTik6IE5ldyBtYWNyby4KKworCShXRUFLX0FTTV9PUCxERUZfQVNNX09QKTogTmV3IG1hY3Jvcy4KKwkobWF4aW11bV9maWVsZF9hbGlnbm1lbnQpOiBOZXcgdmFyaWFibGUuICBEZWNsYXJlIGhlcmUuCisJKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBOZXcgbWFjcm8uICBWYWx1ZSBkZXBlbmRzIG9uCisJbWF4aW11bV9maWVsZF9hbGlnbm1lbnQuCisJKEJJR0dFU1RfRklFTERfQUxJR05NRU5UKTogTmV3IG1hY3JvLiAgTGlrZXdpc2UuCisJKEhBTkRMRV9QUkFHTUEpOiBOZXcgbWFjcm8uCisJKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IE5ldyBtYWNyby4KKworU2F0IEZlYiAgMSAwMDoxNTo0MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZsb3cuYyAoZmxvd19hbmFseXNpcywgZmluZF9iYXNpY19ibG9ja3MpOgorCUlmIGhhdmUgbm9ubG9jYWwgbGFiZWxzLCBjYWxscyBlbmQgYmFzaWMgYmxvY2tzLgorCUVhY2ggY2FsbCBjYW4ganVtcCB0byBlYWNoIG5vbmxvY2FsIGxhYmVsLgorCVBhc3MgZXh0cmEgYXJnIHRvIGZpbmRfYmFzaWNfYmxvY2tzLgorCSogZnVuY3Rpb24uYyAobm9ubG9jYWxfbGFiZWxfcnR4X2xpc3QpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGRieG91dC5jIChkYnhvdXRfaW5pdCk6IFZhcnMgd2QgYW5kIHdkX2dvdHRlbiBtb3ZlZCB0byB0b3AgbGV2ZWwKKwlhbmQgcmVuYW1lZCB0byBjd2QgYW5kIGN3ZF9nb3R0ZW4uCisKKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IC1XbWlzc2luZy1wcm90b3R5cGVzIHdhcm5zIGlmIHN0YXRpYworCWZ1bmN0aW9uIHdhcyBwcmV2aW91c2x5IHVzZWQgd2l0aG91dCBhIHByb3RvdHlwZS4KKworCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcCk6IEluaXRpYWxpemUgdWlkX2xvb3BfbnVtWzBdLgorCShsb29wX29wdGltaXplKTogR2l2ZSB1cCBmYXN0IGlmIG5vIGxvb3BzLgorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBEb24ndCBhZGp1c3QgZnAgaW4gbm9ubG9jYWwgZ290byBobmRscgorCWlmIHRoZXJlIGlzIGEgbm9ubG9jYWxfZ290byBpbnNuLgorCisJKiBNYWtlZmlsZS5pbiAoY2NjcC5vKTogVXNlIGp1c3QgbGliZGlyIGluIEdQTFVTUExVU19JTkNMVURFX0RJUi4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IFN1cHBseSBtaXNzaW5nIGFyZyBpbiBzb21lIHJlY3Vyc2l2ZSBjYWxscy4KKworRnJpIEphbiAzMSAyMTo1MDowMyAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhdyBhdCB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsuaCAoT1ZFUlJJREVfT1BUSU9OUyk6IC1mUElDIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRoZSA2ODAyMAorCWFuZCBsYXRlciBjcHVzLiAgR2l2ZSBhbiBlcnJvciBpZiAtZlBJQyBpcyB0cmllZCBvbiBhIDY4MDAwLgorCitGcmkgSmFuIDMxIDIxOjM5OjMzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IElmIGVtaXR0aW5nIGEgbW92ZSBpbnNuIGluIGZyb250IG9mIHRoZQorCWZpcnN0IGluc24gaW4gYSBibG9jaywgdXBkYXRlIGJhc2ljX2Jsb2NrX2hlYWQuCisKKwkqIGNhbGxlci1zYXZlLmMgKGluaXRfY2FsbGVyX3NhdmUpOiBDb3JyZWN0bHkgY2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlCisJc2F2ZSBvciByZXN0b3JlIGluc25zIGFyZW4ndCByZWNvZ25pemVkLgorCitGcmkgSmFuIDMxIDIxOjAyOjM1IDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocHVzaHRhZyk6IHdoZW4gY2FsbGluZyBwdXNoZGVjbCwgaWYgd2UncmUgaW4gYQorCSAgY2xhc3NfYmluZGluZ19sZXZlbCBqdXN0IGRvIGEgcHVzaGRlY2xfY2xhc3NfbGV2ZWwuIE90aGVyd2lzZQorCSAgcHVzaGRlY2wgZ2V0cyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gY2xhc3MtbmVzdGVkIGVudW1zLCB3aGljaAorCSAgc2hvcnQgY2lyY3VpdHMgdGhlIG5hbWUgbGlzdCBpbiB0aGUgZ2xvYmFsX2JpbmRpbmdfbGV2ZWwuCisKK0ZyaSBKYW4gMzEgMDA6MTQ6MjAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9nb3RvKTogVXNlIG5vbmxvY2FsX2dvdG8gcGF0dGVybiBpZiBpdCBleGlzdHMuCisJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IE5ldyBwYXR0ZXJuLgorCUFsc28gbmFtZWxlc3MgcGF0dGVybiBmb3IgdGhlIHNwZWNpYWwgdHJhcCBpbnNuLgorCisJKiBnY2MuYyAoU19JU0RJUik6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24uCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOgorCVNldCB1cCBhcmdfcG9pbnRlcl9zYXZlX2FyZWEgYXQgc3RhcnQgb2YgZnVuY3Rpb24uCisKKwkqIGMrKzogQWNjZXB0IC1ub3N0ZGxpYiwgbm90IC1ub3N0aW5jLgorCisJKiB2YS1zcGFyYy5oOiBJZiBHQ0MgdjEsIGRlZmluZSBfX2V4dGVuc2lvbl9fIGFzIG5vdGhpbmcuCisJKiB2YS1pODYwLmgsIHZhLXB5ci5oLCB2YS1zcHVyLmg6IExpa2V3aXNlLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogRmlsbCBpbiBERUNMX0FMSUdOIG9mIHZ0YWJsZSBmaWVsZC4KKworCSogcmVnY2xhc3MuYyAocmVnX2NsYXNzX3JlY29yZCk6CisJRG9uJ3QgZm9sbG93IGluZGlyZWN0IGxvb3BzIGluIGNvbnN0cmFpbnRzLgorCisJKiBmdW5jdGlvbi5jLCBleHByLmggKGN1cnJlbnRfZnVuY3Rpb25faW50ZXJuYWxfYXJnX3BvaW50ZXIpOiBOZXcgdmFyLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2V0IGl0LgorCShwdXNoX2Z1bmN0aW9uX2NvbnRleHQsIHBvcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBhbmQgcmVzdG9yZSBpdC4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBVc2UgaXQuCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBOZXcgc2xvdCB0byBzYXZlIGl0IGluLgorCisJKiBjc2UuYyAoY3NlX21haW4pOiBDYWxscyBkbyBjbG9iYmVyIGFyZyBwb2ludGVyIGlmIG5vdCBmaXhlZC4KKworCSogaHAzMjAuaCAoSEFWRV9BVEVYSVQpOiBOZXcgZGVmaW5pdGlvbi4KKworCSogTWFrZWZpbGUuaW4gKEFMTF9DUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4KKwlVc2UgaW4gYWxsIGNvbXBpbGUgc3RlcHMgaW5zdGVhZCBvZiBDUFBGTEFHUy4KKwkoWF9DUFBGTEFHUywgVF9DUFBGTEFHUyk6IE5ldyB2YXJzLCB1c2VkIGluIEFMTF9DUFBGTEFHUy4KKwkqIHgtdmF4IChYX0NQUEZMQUdTKTogVXNlIHRoaXMgaW5zdGVhZCBvZiBYX0NGTEFHUy4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogRml4IHR5cG8uCisKK0ZyaSBKYW4gMzEgMTI6MTU6MDkgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBheSBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChMSU5FX0xBU1RfRU5UUllfTEFCRUwpOiBEZWZpbml0aW9uIGFkZGVkLgorCShkd2FyZm91dF9maW5pc2gpOiAgUHV0IGEgbGFiZWwgb24gdGhlIGxhc3QgLmxpbmUgc2VjdGlvbiBlbnRyeS4KKwkoZHdhcmZvdXRfZmluaXNoKTogIE1ha2UgZmlyc3Qgd29yZCBvZiBmaW5hbCAuZGVidWdfc3JjaW5mbyByZWNvcmQKKwljb250YWluIHRoZSBvZmZzZXQgb2YgdGhlIGZpbmFsIC5saW5lIHNlY3Rpb24gZW50cnkuCisKK0ZyaSBKYW4gMzEgMTA6MzE6NDQgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjcC10cmVlLmMgKF9fZXByaW50Zik6IE1ha2UgZGVmaW5pdGlvbiBtYXRjaCBhc3NlcnQuaAorCWRlY2xhcmF0aW9uLgorCitUaHUgSmFuIDMwIDIzOjE3OjExIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQorCisJKiBjKys6ICBUaGUgZmxhZ3MgLWMsIC1TLCBvciAtRSBzdXBwcmVzcyBwYXNzaW5nIC1sZysrCisJdG8gZ2NjLiAgKE90aGVyd2lzZSwgZ2NjIHByaW50cyBhIHdhcm5pbmcuKQorCitUaHUgSmFuIDMwIDIxOjEwOjAyIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfaW5pdCk6ICBGaXggZ2VuZXJhdGlvbiBvZiBpbml0aWFsIC5kZWJ1Z19hcmFuZ2VzCisJZW50cnkgdG8gYmUgRHdhcmYgVmVyc2lvbiAxIGNvbXBsaWFudC4KKworVGh1IEphbiAzMCAxNTo1MToyNyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGkzODZzdW4uaCAoTElOS19TUEVDKTogRGVsZXRlIHVzZWxlc3MgJXstQnN0YXRpY30gdGVybS4KKwkqIHN1bjJvNC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHN1bjMuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCisJKiBzcGFyYy5oIChMSU5LX1NQRUMpOiBEZWxldGUgdXNlbGVzcyAle0JzdGF0aWN9IHRlcm0uCisKKwkqIGNjY3AuYyAoZGVmYXVsdF9pbmNsdWRlKTogRGVsZXRlIHVzZSBvZiBvYnNvbGV0ZQorCU5PX1NUQU5EQVJEX0lOQ0xVREVfRElSIG1hY3JvLgorCSogcHJvdG9pemUuYyAoZGVmYXVsdF9pbmNsdWRlKTogTGlrZXdpc2UuCisKKwkqIE1ha2VmaWxlLmluIChsaWJnY2MxLm51bGwpOiBEZWxldGUgZHVtbXkubyBhbmQgZHVtbXkuYy4KKworVGh1IEphbiAzMCAxNTozNDowNiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXIgYXQgb3NmLm9yZykKKworCSogZ3N0ZGFyZy5oOiBJbmNsdWRlIHZhLW1pcHMuaCBvbiBNSVBTIHN5c3RlbXMuCisKKwkqIHZhLW1pcHMuaCAodmFfc3RhcnQpOiBQcm92aWRlIGFsdGVybmF0ZSBkZWZpbml0aW9uIHdoZW4gaW5jbHVkZWQKKwl2aWEgc3RkYXJnLmguCisJKHZhX2FyZyk6IFVzZSBfX2FsaWdub2YoLi4uKSBpbnN0ZWFkIG9mIHNpemVvZiguLi4pIHRvIGRldGVybWluZQorCXdoZXRoZXIgb3Igbm90IHRvIGR3b3JkIGFsaWduIHRoZSBhcmd1bWVudCBwb2ludGVyLgorCitUaHUgSmFuIDMwIDEzOjA2OjM2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uKTogR2V0IGMrKyBhbmQgZysrIGZyb20gc3JjZGlyLgorCisJKiBpODYwLmggKEZJWEVEX1JFR0lTVEVSUyk6IEFyZyBwb2ludGVyIGlzIG5vIGxvbmdlciBmaXhlZC4KKworCSogYXNzZXJ0LmggKF9fZXByaW50Zik6IEFkZCBjb25zdCB0byBzdHJpbmcgYXJncyBpbiBHQ0MgQU5TSSBjYXNlLgorCisJKiBNYWtlZmlsZS5pbiAoY2NjcC5vLCBwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOgorCURlZmluZSBMT0NBTF9JTkNMVURFX0RJUiBiYXNlZCBvbiAkKHByZWZpeCkuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IEFyZyBwb2ludGVyIG5lZWRzIG5vIHNwZWNpYWwKKwl0cmVhdG1lbnQgaWYgbm90IGZpeGVkLgorCisJKiBjcC1wYXJzZS55LCBjLWxleC5jICh5eWVycm9yKToKKwlBdm9pZCBzaWduLWV4dGVuc2lvbiBvZiBjaGFyYWN0ZXJzIGluIGVycm9yIG1lc3NhZ2VzLgorCitUaHUgSmFuIDMwIDExOjM5OjU2IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfZmluaXNoKTogIEZpeCBnZW5lcmF0aW9uIG9mIC5kZWJ1Z19wdWJuYW1lcworCXRlcm1pbmF0aW5nIGVudHJ5IHRvIGJlIDQtYnl0ZXMgb2YgemVybyBmb2xsb3dlZCBieSBhIG51bGwgc3RyaW5nLgorCitUaHUgSmFuIDMwIDA5OjMwOjE5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChjY3JfYml0KTogRml4IHR5cG8gY2F1c2luZyByZWZlcmVuY2UgdG8gcG9zc2libHkKKwl1bmRlZmluZWQgb3BlcmFuZC4KKworCSogcnM2MDAwLmggKEFTTV9TUEVDKTogUmVtb3ZlIHVudGlsIG5ldyBBSVggYXNzZW1ibGVyIGlzIGF2YWlsYWJsZS4KKwkoQVNNX09VVFBVVF9QT09MX1BST0xPR1VFKTogQWRkIG1pc3NpbmcgIi4iIGluIGNzZWN0IG5hbWUuCisJKEVOQ09ERV9TRUdNRU5UX0lORk8pOiBEZWxldGVkLgorCShBU01fT1VUUFVUX0VYVEVSTkFMKTogTW92ZSBjb2RlIGZyb20gRU5DT0RFX1NFR01FTlRfSU5GTyBoZXJlLAorCXVzaW5nIHBlcm1hbGxvYyBpbnN0ZWFkIG9mIHB1dHRpbmcgbmFtZSBpbnRvIHNhdmVhYmxlX29ic3RhY2suCQorCVJlLWVuYWJsZSBtYWNyby4KKwkoQVNNX09VVFBVVF9FWFRFUk5BTF9MSUJDQUxMKTogUmUtZW5hYmxlLgorCitXZWQgSmFuIDI5IDIxOjUwOjI2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oIChBU01fU1BFQyk6IEFkZCAtdSwgbm93IHJlcXVpcmUgbmV3IC9iaW4vYXMgZm9yIEFJWC4KKwkoQVNNX09VVFBVVF9FWFRFUk5BTCwgQVNNX09VVFBVVF9FWFRFUk5BTF9MSUJDQUxMKTogTm8gbG9uZ2VyIG5lZWRlZC4KKworCSogcnM2MDAwLmggKEVOQ09ERV9TRUdNRU5UX0lORk8pOiBOZXcgbWFjcm87IGFkZCBbUlddIG9yIFtEU10gdG8gbmFtZS4KKwkoUlM2MDAwX09VVFBVVF9CQVNFTkFNRSk6IE5ldyBtYWNyby4KKwkoQVNNX09VVFBVVF8qKTogVXNlIGl0IGluc3RlYWQgb2YgYXNzZW1ibGVfbmFtZSB3aGVuIHJlcXVpcmVkLgorCShBU01fT1VUUFVUX1BPT0xfUFJPTE9HVUUpOiBSZW1vdmUgdHJhaWxpbmcgW1JXXSBvciBbRFNdLgorCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ3onKTogTmV3IGNhc2UsIGZvciBuYW1lIGluIENBTExfSU5TTi4KKwkob3V0cHV0X3RvYyk6IFVzZSBSUzYwMDBfT1VUUFVUX0JBU0VOQU1FIGluc3RlYWQgb2YgYXNzZW1ibGVfbmFtZQorCWZvciB0b2MgZW50cnkgbmFtZS4KKwkqIHJzNjAwMDAubWQgKGNhbGwpOiBVc2UgJXouCisKK1dlZCBKYW4gMjkgMTc6MTc6NDIgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1pbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogRml4IGJ1ZyBpbnZvbHZpbmcgc3RhdGljIG1lbWJlcnMKKwl0aGF0IGFyZSBmdW5jdGlvbiBwb2ludGVycy4KKworV2VkIEphbiAyOSAxMzoyNToxOCAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEZvciAlRCwgb25seSBhZGQgLUwgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4KKwkoaXNfbGlua2VyX2Rpcik6IERldGVybWluZSBpZiBhIC1MIG9wdGlvbiBpcyByZWxldmFudC4KKworV2VkIEphbiAyOSAwMDo1Nzo1NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogVHVybiBuczMyayBhbHRlcm5hdGl2ZXMgYmFjayBvbi4KKworCSogTWFrZWZpbGUuaW4gKGdldG9wdC5vLCBnZXRvcHQxLmMpOiBKb2luIHR3byBsaW5lcyBpbnRvIG9uZS4KKworCSogeC1pMzg2djQsIHgtaTg2MHY0IChHQ0NfQ0ZMQUdTKTogQWRkIG1pc3NpbmcgYC1CLi8nLgorCisJKiByZWxvYWQuYyAoZmluZF9kdW1teV9yZWxvYWQsIHB1c2hfcmVsb2FkKTogRG9uJ3QgcmV1c2UgZHlpbmcgaW5wdXQKKwlyZWcgYXMgYSByZWxvYWQgaWYgaXQgaXMgYSBmaXhlZCByZWcuCisKKwkqIGMtdHJlZS5oIChDX01JU1NJTkdfUFJPVE9UWVBFX1dBUk5FRCk6IERlbGV0ZWQgc2luY2UgdW51c2VkLgorCitXZWQgSmFuIDI5IDAwOjQyOjM0IDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlIGF0IGZhc3QuY3MudXRhaC5lZHUpCisKKwkqIGhwODAwLmMgKHByaW50X29wZXJhbmQpOiBIYW5kbGUgSU5TTl9BTk5VTExFRF9CUkFOQ0hfUCBpbiAnKicKKwlvcGVyYW5kIHR5cGUuCisJKiBocDgwMC5oIChERUZBVUxUX0dEQl9FWFRFTlNJT05TKTogRGVmaW5lIGFzIDAuCisJKiBocDgwMC5tZCAoY21wc2kpOiBDaGFuZ2UgYXJpdGhfb3BlcmFuZCB0byBhcml0aDVfb3BlcmFuZC4KKwkoYkNDIHBhdHRlcm5zKTogRGVsZXRlIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEgY29tcGFyZSB3aXRoIGEKKwljb25zdGFudCBmaXJzdCBvcGVyYW5kLiBDaGFuZ2UgYXJpdGhfb3BlcmFuZCB0byBhcml0aDVfb3BlcmFuZC4KKwkoZnAgYnJhbmNoZXMpOiBDaGFuZ2UgdHlwZSB0byBjYnJhbmNoLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9hcmdfb2Zmc2V0X3J0eAorCWNvcnJlY3RseSBmb3IgQVJHU19HUk9XX0RPV05XQVJELgorCSogZ3N0ZGFyZy5oOiBJbmNsdWRlIHZhLWhwODAwLmguCisJKiB2YS1ocDgwMC5oOiBDb21wbGV0ZSByZXdyaXRlLgorCitUdWUgSmFuIDI4IDE3OjA0OjM4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb24gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwpOiBEZWxldGUgdW51c2VkIHZhciBgaScuCisKKwkqIGMtY29udmVydC5jIChjb252ZXJ0X3RvX3BvaW50ZXIpOgorCUFib3J0IGlmIG5vIGludGVnZXIgdHlwZSBpcyBhcyB3aWRlIGFzIGEgcG9pbnRlci4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzLCAuaSBjYXNlKTogQWRkIGVycm9yIG1lc3NhZ2UgZm9yIC1wZworCWFuZCAtZm9taXQtZnJhbWUtcG9pbnRlciBpbmNvbXBhdGliaWxpdHkuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgYysrIGFuZCBnKysgc2hlbGwgc2NyaXB0cyBpbgorCWJpbmRpci4KKworVHVlIEphbiAyOCAxNTo0NDoxMCAxOTkyICBNaWNoYWVsIENvbGxpc29uICAoY29sbGlzb24gYXQgb3NmLm9yZykKKworCSogeC1lbmNyb3NlIChPTERDQyk6IGNoYW5nZWQgdG8gJChHTlVfUk9TRV9CSU4pL2djYworCisJKiBuczMyay5oOiBBZGRlZCB0cmFtcG9saW5lIGNvZGUuCisKK1R1ZSBKYW4gMjggMTQ6MTk6NTIgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnRsLmRlZiAoVU5TUEVDLCBVTlNQRUNfVk9MQVRJTEUpOiBOZXcgUlRMIGNvZGVzLgorCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBVTlNQRUNfVk9MQVRJTEUgb3BlcmF0aW9ucyBhcmUgdm9sYXRpbGUuCisJKiBsb29wLmMgKGludmFyaWFudF9wKTogTGlrZXdpc2UuCisJKiByZW9yZy5jIChtYXJrX3JlZmVyZW5jZWRfcmVzb3VyY2VzKTogTGlrZXdpc2UuCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplXzIpOiBMaWtld2lzZS4KKwkqIHJ0bGFuYWwuYyAodm9sYXRpbGVfcmVmc19wLCBzaWRlX2VmZmVjdHNfcCwgbWF5X3RyYXBfcCk6IExpa2V3aXNlLgorCShyZWdfcmVmZXJlbmNlZF9wKTogU3VwcG9ydCBVTlBFQyBhbmQgVU5TUEVDX1ZPTEFUSUxFLgorCitUdWUgSmFuIDI4IDExOjUwOjM1IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmMgKHRvcGxldmVsKTogQWRkIGluY2x1ZGUgb2YgPGN0eXBlLmg+LCBzaW5jZSBpc2RpZ2l0IGlzCisJdXNlZC4KKworVHVlIEphbiAyOCAwNTo0NzowOCAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoeHJlZl90YWcpOiBBZGRpdGlvbiB0byBlaWNoaW4ncyBKYW4gMjUgY2hhbmdlLiAgSWYgUkVGCisJaXMgZXh0YW50LCBhbmQgaXQncyBzZWVuIGluIHRoZSBnbG9iYWwgc2NvcGUgb3V0c2lkZSBvZgorCUNMQVNTX0JJTkRJTkdfTEVWRUwsIHNldCBpdHMgSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgaWYgTlVMTC4KKworCSogY3AtY2xhc3MuYyAocHVzaGNsYXNzKTogRm9yY2libHkgcmVtb3ZlIGFueSByZW1uYW50cyBvZiBpbmNvbXBsZXRlCisJdHlwZSB0aGF0IHdhcyBwcmV2aW91c2x5IHB1c2hlZC4KKworCSogY3AtZGVjbC5jICh2YXJpb3VzIHBsYWNlcyk6IFJlbW92ZSBhbGwgZXJyb3IgbWVzc2FnZXMgYWJvdXQgQysrCisJY29uc3RydWN0cyBiZWluZyBpbnZhbGlkIGluIEMgbGFuZ3VhZ2UgY29udGV4dDsgZXh0ZXJuICJDIiBpcyBhCisJbGlua2FnZSBzcGVjaWZpZXItLW5vIG1vcmUuCisKKwkqIGNwLW1ldGhvZC5jIChkdW1wX3R5cGVfcHJlZml4LGR1bXBfdHlwZSk6IE5ldmVyIG5lZWQgdG8gb3V0cHV0CisJYHVuc2lnbmVkJyBzaW5jZSBpdHMgYWx3YXlzIHBhcnQgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG5hbWUuCisJKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBDaGFuZ2UgdGVzdCBmb3IgdW5zaWduZWQgdG8gdXNlCisJYHVuc2lnbmVkX3R5cGUnIGluc3RlYWQgb2YgZXhhbWluaW5nIFRSRUVfVU5TSUdORUQuCisKKwkqIGNwLWNhbGwuYyAoaWRlYWxfY2FuZGlkYXRlKTogRG9uJ3QgY29udmVydCBQQVJNUyBpbiBwbGFjZSBpZgorCUJBU0VUWVBFIGlzIE5VTExfVFJFRS4KKworVHVlIEphbiAyOCAwMjoyMTozMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBgYXV0bycgZm9yIG5lc3RlZCBmbiBmd2QgZGVjbHMuCisKKwkqIGcrKzogTmV3IGZpbGUuCisKKwkqIGZpeGluY2x1ZGVzOgorCUNvbnZlcnQgbWFjaGluZSBuYW1lcyBpbiAjaWYncyB0byBoYXZlIHVuZGVyc2NvcmVzLgorCUZpeCBzcGVjaWZpYyBmaWxlcyBzdGRsaWIuaCwgbG9jYWxlLmgsIGhzZnMvLi4uIGZvciBTdW5vcyA0LjEuCisJKiBmaXhpbmMuc3ZyNDogQ29udmVydCBtYWNoaW5lIG5hbWVzIGluICNpZidzIHRvIGhhdmUgdW5kZXJzY29yZXMuCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBGb3IgJUQsIGFsc28gbWFrZSAtTCdzIGZvciBzdGFydGZpbGVfcHJlZml4LgorCUFsc28gYXBwZW5kIHRoZSBtYWNoaW5lCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZF9jb252ZXJ0KTogUHJvcGVybHkgaGFuZGxlIHJlYWwtdG8tcmVhbCBjYXNlLgorCisJKiBjb25maWd1cmUgKGk0ODYtKi1zeXN2NCopOiBOZXcgYWx0ZXJuYXRpdmUuCisKK1R1ZSBKYW4gMjggMDA6Mzc6MjQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChsb2NhdGlvbl9hdHRyaWJ1dGUpOiAgRml4IGhhbmRsaW5nIG9mIG9iamVjdHMgd2hpY2gKKwl3ZXJlIG9wdGltaXplZCBvdXQgb2YgZXhpc3RhbmNlIGZvciBEd2FyZiBWZXJzaW9uIDAgY29tcGxpYW5jZS4KKworVHVlIEphbiAyOCAwMDo0Mjo1NyAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IERlbGV0ZSBzdGFjayBkdW1wIGZpbGVzIHRvby4KKworTW9uIEphbiAyNyAxODoyNjoyNyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuaCAoSEFWRV9BVEVYSVQsIE5PX0RPTExBUl9JTl9MQUJFTCk6IE5vdyBkZWZpbmVkLgorCitNb24gSmFuIDI3IDEzOjMyOjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbGliZ2NjMi5hIChMX2V4aXQpOiBEZWNsYXJlIF9fQ1RPUl9MSVNUX18gYW5kIF9fRFRPUl9MSVNUX18KKwl3aXRoIGxlbmd0aCAyOyBnZXQgcmlkIG9mIF9fQ1RPUl9FTkRfXyBhbmQgX19EVE9SX0VORF9fLgorCShMX2N0b3JfbGlzdCwgTF9kdG9yX2xpc3QpOiBOZXcgbGlicmFyeSBtZW1iZXJzLgorCisJKiBjY2NwLmMgKG1haW4pOiBBZGQgdGVybWluYXRpbmcgbnVsbCwgdGhlbiBjYWxsIHRyaWdyYXBoX3BjcC4KKworCSogZml4aW5jbHVkZXMsIGZpeGluYy5zdnI0OiBGYWlsIHVubGVzcyBhbiBhcmcgd2FzIGdpdmVuLgorCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZml4aW5jbHVkZXMpOiBQYXNzIG91dHB1dCBkaXIgYXMgYXJndW1lbnQuCisKKwkqIE1ha2VmaWxlLmluOiBSZW5hbWVkIGxpYmdjY1sxMl0gdG8gbGliZ2NjWzEyXS5hLgorCUxpa2V3aXNlIGZvciB0bXBsaWJnY2NbMTJdLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogVHJlYXQgYWxsIGZjbnMgYXMgaWYgZXh0ZXJuYWwuCisKKwkqIE1ha2VmaWxlLmluIChUQUdTKTogRG8gdGhlIHdvcmsgaW4gc3JjZGlyLgorCUluY2x1ZGUgYy1wYXJzZS5oIGluIGZpbGVzIHRvIG1vdmUuCisKK01vbiBKYW4gMjcgMTA6NTQ6MjQgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjY2NwLmMgKGdldF9maWxlbmFtZSk6IERvbid0IHBhc3MgLTEgZmlsZSBkZXNjcmlwdG9yIHRvIGNsb3NlLgorCitNb24gSmFuIDI3IDAwOjI2OjMzIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFByZXNlcnZlIFRSRUVfVFlQRSBvZiBSRVNVTFRfREVDTCwgaW4KKwljYXNlIHdlIGhhdmUgYSBuYW1lZCByZXR1cm4gdmFsdWUuCisJKGZpbmlzaF9mdW5jdGlvbik6IFJlc3RyaWN0IHRoZSBjYXNlcyB1bmRlciB3aGljaCB3ZSBidWlsZAorCWBub19yZXR1cm5fbGFiZWwnLiAgVXNlIENVUlJFTlRfRlVOQ1RJT05fUkVUVVJOX1ZBTFVFIHRvIGVsaW1pbmF0ZQorCXRoZSBnZW5lcmF0aW9uIG9mIG5lZWRsZXNzIGNsZWFudXBzIHdoZW4gZnVuY3Rpb25zIGVuZCB3aXRoIGEgcmV0dXJuCisJc3RtdC4gIE5vIGxvbmdlciB6ZXJvcyBvdXQgQ0xFQU5VUF9MQUJFTC4gIEFsc28sIGNhbGwgYGVtaXRfanVtcCcKKwlpbnN0ZWFkIG9mIGBleHBhbmRfbnVsbF9yZXR1cm4nIGluIGNhc2UgTk9fUkVUVVJOX0xBQkVMIGlzCisJbm9uLU5VTEwuCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tmaWVsZCk6IERvbid0IHNwZWNpYWxseSBoYWNrIHN0YXRpYyBtZW1iZXIKKwlmdW5jdGlvbiBuYW1lcy4KKworCSogY3AtZXhjZXB0LmMgKGNwbHVzX2V4cGFuZF9yYWlzZSk6IFRlc3QgY29ycmVjdCBwcmVkaWNhdGUgdGhhdCB3ZQorCWhhdmUgYSBub24tbnVsbCB2YWx1ZSByZXR1cm4uCisJKGNwbHVzX2V4cGFuZF97dGhyb3cscmVyYWlzZX0pOiBEaXR0by4KKworCSogY3AtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IEhhbmRsZSBjYXNlIHdoZXJlIG5hbWVkIHJldHVybgorCXZhbHVlIGhhcyBpbmNvbXBsZXRlIHR5cGUuCisKK1N1biBKYW4gMjYgMjA6NTA6NTUgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChMQyk6IEZpeCBydWxlIHRvIHVzZSBgcHVzaF9vYnN0YWNrc19ub2NoYW5nZScuCisJKHN0cnVjdHNwKTogVXNlIGBwb3Bfb2JzdGFja3MnLgorCitTdW4gSmFuIDI2IDE3OjM5OjE1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55IChMQyk6IFVzZSBwdXNoX29ic3RhY2tzX25vY2hhbmdlIGFuZCBhbHdheXMgY2FsbAorCWVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi4KKwkoc3RydWN0c3AsIHRlbXBsYXRlX2luc3RhbnRpYXRlX29uY2UpOiBBZnRlciBMQywgdXNlIHBvcF9vYnN0YWNrcy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKToKKwlTdGF0aWMgZnVuY3Rpb24gZGVjbCB3aXRoaW4gYSBmdW5jdGlvbiBpcyBub3QgZXh0ZXJuYWwuCisKK1N1biBKYW4gMjYgMDg6MTQ6NTMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyIGF0IG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBtZWlzc25lciB2ZXJzaW9uICMgdG8gOS4KKwkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IERlbGV0ZSBQUk9DRVNTT1JfUjIwMDAsIHNpbmNlIGEgcjIwMDAKKwlzY2hlZHVsZXMganVzdCBsaWtlIGEgcjMwMDAuCisJKG1pcHNfaXNhLCBtaXBzX2lzYV9zdHJpbmcsIG1pcHNfY3B1X3N0cmluZyk6IE5ldyBnbG9iYWwgdmFyaWFibGVzLgorCShNRF9FWEVDX1BSRUZJWCk6IElmIG5vdCBkZWZpbmVkLCBkZWZpbmUgYXMgIi91c3IvbGliL2NtcGxycy9jYy8iLgorCShUQVJHRVRfU1dUSUNIRVMgbWFjcm9zKTogTW92ZSBzZXR0aW5nIHRoZSBwcm9jZXNzb3IgZnJvbQorCVRBUkdFVF9TV0lUQ0hFUyB0byBUQVJHRVRfT1BUSU9OUy4gIEFsc28sIGRlbGV0ZSB0aGUgLW1maXhlZC1vdnJmbAorCXN3aXRjaCwgYW5kIG1vdmUgLW13YzgvLW13YzE2IHRvIG5vdCB1c2UgYW55IGJpdHMsIHNpbmNlIHdlIGNhbid0CisJc3VwcG9ydCB0aGVzZSBpbiBHQ0MgMi4wMC4gIFJlYWRqdXN0IHRoZSBwb3NpdGlvbnMgdGhlIGJpdHMgYXJlIGluLgorCShUQVJHRVRfT1BUSU9OUyk6IERlZmluZSB0byBhZGQgc3dpdGNoZXMgLW1jcHU9eCB0byBzZXQgd2hpY2gKKwlwcm9jZXNzb3IgdHlwZSB0byBzY2hlZHVsZSBmb3IsIGFuZCAtbWlwc3ggdG8gc3BlY2lmeSB0aGUKKwlpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlIGxldmVsLgorCShCUkFOQ0hfTElLRUxZX1ApOiBOZXcgbWFjcm8sIHRydWUgaWYgTUlQUyBJU0EgPj0gMi4KKwkoSEFWRV82NEJJVF9QKTogTmV3IG1hY3JvLCB0cnVlIGlmIE1JUFNfSVNBID49IDMuCisJKEhBVkVfU1FSVF9QKTogTmV3IG1hY3JvLCB0cnVlIGlmIE1JUFNfSVNBID49IDIuCisJKEJSQU5DSF9DT1NUKTogRGVmaW5lIGFzIDIgaWYgcjQwMDAvcjYwMDAsIDEgb3RoZXJ3aXNlLgorCShBU01fT1VUUFVUX1NLSVApOiBFbGltaW5hdGUgT1NGLzEgZ2FzIHdvcmsgYXJvdW5kLgorCisJKiBtaXBzLmMgKG1pcHNfaXNhLCBtaXBzX2lzYV9zdHJpbmcsIG1pcHNfY3B1X3N0cmluZyk6IE5ldyBnbG9iYWwKKwl2YXJpYWJsZXMuCisJKHByaW50X29wdGlvbnMpOiBQcmludCBDUFUgYW5kIElTQSBsZXZlbC4KKwkob3ZlcnJpZGVfb3RwaW9ucyk6IEhhbmRsZSBUQVJHRVRfT1BUSU9OUyBzZXR0aW5nIGNwdSBhbmQgSVNBLgorCShvdmVycmlkZV9vcHRpb25zLCBwcmludF9vcGVyYW5kKTogJTogaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgc2luY2UKKwktbWZpeGVkLW92ZmwgaXMgZWxpbWluYXRlZC4KKworCSogbWlwcy5tZCAodHlwZSBhdHRyaWJ1dGUpOiBBZGQgZnNxcnQuCisJKGFsbCBkZWZpbmVfZnVuY3Rpb25fdW5pdHMpOiBSZWRvLCB0byBhZGQgZnVsbCByNjAwMCBhbmQgcjQwMDAKKwlzdXBwb3J0LCBhbmQgdG8gdXNlIHRoZSBkZWZhdWx0IGNhc2UgaW4gY2FzZSBhbm90aGVyIHByb2Nlc3NvciB0eXBlCisJaXMgYWRkZWQuICBBbHNvLCB0ZXN0cyBhZ2FpbnN0IFBST0NFU1NPUl9SMjAwMCBlbGltaW5hdGVkLgorCShhZGQsIHN1YnRyYWN0IHBhdHRlcm5zKTogRGVsZXRlIHVzZSBvZiAlOi4KKwkoc3FydGRmMiwgc3FydHNmMik6IERlZmluZSBpZiB0aGUgTUlQUyBJU0EgPj0gMi4KKworCSogZGVjcm9zZS5oIChNRF9FWEVDX1BSRUZJWCwgTURfU1RBUlRGSUxFX1BSRUZJWCk6IERlZmluZSB0aGVzZSB0bworCXVzZSB0aGUgZGVmYXVsdHMgb24gdGhlIE9TRi8xIHJlZmVyZW5jZSBwbGF0Zm9ybS4KKwkoaTM4NnJvc2UuaCk6IExpa2V3aXNlLgorCitTdW4gSmFuIDI2IDA3OjU4OjAwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IGNhbGwgaW5zZXJ0X3JlZ3Mgb24gYSBTVUJSRUcuCisJV2hlbiBzY2FubmluZyB0YWJsZSBmb3IgU1VCUkVHIGFzc2lnbm1lbnQsIGlnbm9yZSBpbnZhbGlkIGVudHJpZXMuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFdoZW4gbG9va2luZyBmb3IgZmlyc3Qgbm9uLWRlbGV0ZWQgZW50cnkgaW4KKwl0YWJsZSwgc3RhcnQgYnkgc2Nhbm5pbmcgYmFja3dhcmRzIGZyb20gdGhlIGRlbGV0ZWQgZW50cnkuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybl9ydHgKKwl1bmNvbmRpdGlvbmFsbHkuCisJKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IERvbid0IHNldCBpdCBoZXJlLgorCitTYXQgSmFuIDI1IDA2OjQ0OjE2IDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUpOiBOZXcgZnVuY3Rpb24uIENsb25lIG9mCisJc2V0X2lkZW50aWZpZXJfdHlwZV92YWx1ZSwgYnV0IHVzZXMgbGV2ZWwtPnNoYWRvd2VkIGluc3RlYWQuIE9ubHkKKwl1c2VkIGluIHB1c2hkZWNsLCB3aGVyZSB0aGUgbm9uLWdsb2JhbCBpbnN0YWxsIHdhcyBwcmV2aW91c2x5CisJc2V0dGluZyB0aGUgbG9jYWwgdmFsdWUgZGlyZWN0bHkgd2hpY2ggInN0dWNrIiBhbmQgZGlkbid0IGdldAorCWNsZWFyZWQgdGhlIG5leHQgdGltZSB0aHJvdWdoLgorCShwdXNoZGVjbCk6IHVzZSBzZXRfaWRlbnRpZmllcl90eXBlX3ZhbHVlIHNvIHRoYXQgdGhlIGxvY2FsIHZhbHVlCisJYWN0dWFsbHkgZ2V0cyBlcmFzZWQgd2hlbiB3ZSBsZWF2ZSB0aGlzIGxldmVsLiBDaGFuZ2VkIGNvZGUgdGhhdAorCWNoZWNrcyBmb3IgZ2xvYmFsX2JpbmRpbmdfbGV2ZWwgdG8gcmVjb2duaXplIHRoYXQgaWYKKwljbGFzc19iaW5kaW5nX2xldmVsIGlzIHNldCwgd2UncmUgbm90IGluIHRoZSBnbG9iYWwgb25lLgorCShwb3BsZXZlbF9jbGFzcyk6IHJlc3RvcmUgc2hhZG93ZWQgbGlzdCB0b28sIGxpa2UgcG9wbGV2ZWwgZG9lcy4KKwkocHJpbnRfYmluZGluZ19sZXZlbCk6IGFkZGVkIG5vX3ByaW50X2Z1bmN0aW9ucyBhbmQKKwlub19wcmludF9idWlsdGlucyB2YXJpYWJsZXMgdG8gZWxpbWluYXRlIGNsdXR0ZXIgd2hpbGUgdHJ5aW5nIHRvCisJZGVidWcgYmluZGluZyBsZXZlbCBwcm9ibGVtcy4KKworRnJpIEphbiAyNCAxODowMzozNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKHBvcF9tb21lbnRhcnkpOiBEb24ndCByZWZlcmVuY2UgZnJlZWQgc3RhY2sgZW50cnkuCisKK0ZyaSBKYW4gMjQgMTQ6MjA6MDUgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChzdG10KTogQ2FsbCBgZGVmaW5lX2Nhc2VfbGFiZWwnIGZvciBkZWZhdWx0IGxhYmVsLgorCSogY3AtZGVjbC5jIChjdXJyZW50X2Z1bmN0aW9uX3JldHVybl92YWx1ZSk6IE5ldyB2YXJpYWJsZS4KKwkoZGVmaW5lX3tjYXNlX31sYWJlbCk6IENsZWFyIENVUlJFTlRfRlVOQ1RJT05fUkVUVVJOX1ZBTFVFLgorCSogY3AtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IFNldCBDVVJSRU5UX0ZVTkNUSU9OX1JFVFVSTl9WQUxVRS4KKworCSogY3AtdHJlZS5jIChsYW5nX3ByaW50YWJsZV9uYW1lKTogVXNlIERFQ0xfUklORywgYW5kIGRvbid0IGZyZWUKKwl0aGUgcHJpbnRhYmxlIG5hbWUgZm9yIENVUlJFTlRfRlVOQ1RJT05fREVDTC4KKworRnJpIEphbiAyNCAxNDoxNzozMCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGd2YXJhcmdzLmg6IElmIF9BTlNJX0gsIHVuZGVmIF9WQV9MSVNUXy4KKworCSogYy10eXBlY2suYyAocG9pbnRlcl9pbnRfc3VtKTogRG9uJ3QgZGlzdHJpYnV0ZSAqIGludG8gcG9pbnRlciBkaWZmLgorCisJKiBocDMyMC5oIChNRF9TVEFSVEZJTEVfUFJFRklYKTogRGVmaW5lZC4KKwkoU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWCk6IERlbGV0ZWQuCisKK0ZyaSBKYW4gMjQgMDk6MzA6NDEgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGZpc2hwb25kKQorCisJKiBhc3NlcnQuaCAoX19lcHJpbnRmKTogIERlY2xhcmUgYXMgcHJvdG90eXBlIGZvciBfX1NURENfXworCitGcmkgSmFuIDI0IDA1OjI4OjUzIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5tZCAoanVtcCxpbmRpcmVjdF9qdW1wLHRhYmxlanVtcCk6IERvbid0IG91dHB1dCBhbiBhbGlnbgorCWRpcmVjdGl2ZSBoZXJlOiBsZXQgdGhlIGZvbGxvd2luZyBCQVJSSUVSIGRvIGl0LgorCitUaHUgSmFuIDIzIDExOjU0OjExIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogaTQ4NnY0Lmg6ICBOZXcgZmlsZS4KKworVGh1IEphbiAyMyAyMDozNDoyMiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluYy5zdnI0OiBTdXJyb3VuZCB1c2VzIG9mICR7SU5QVVR9IHdpdGggIiIgaW5zdGVhZCBvZiAnJworCXNvIHRoYXQgaXQgd2lsbCBnZXQgZXhwYW5kZWQuCisKK1RodSBKYW4gMjMgMTc6NTA6MTMgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHF0eV9tb2RlKTogTmV3IHZhcmlhYmxlLgorCShyZWdfcnR4KTogRGVsZXRlZC4KKwkoaGFyZF9yZWdzX2luX3RhYmxlLCByZWdzX2ludmFsaWRhdGVfYnlfY2FsbCk6IE5ldyB2YXJpYWJsZXMuCisJKG5ld19iYXNpY19ibG9jayk6IENsZWFyIGhhcmRfcmVnc19pbl90YWJsZS4KKwkoZGVsZXRlX3JlZ19lcXVpdik6IE5ldyBuYW1lIGZvciByZWdfaW52YWxpZGF0ZTsgZG9uJ3QgdXBkYXRlIHJlZ190aWNrLgorCShtZW50aW9uX3JlZ3MpOiBEb24ndCBzZXQgcmVnX3J0eC4KKwlVcGRhdGUgcmVnX3RpY2sgZm9yIGFsbCByZWdpc3RlcnMgaW4gYSBtdWx0aS1yZWdpc3RlciBoYXJkIHJlZ2lzdGVyCisJcmVmZXJlbmNlLgorCShpbnNlcnRfcmVncyk6IERvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwgd2l0aCBTVUJSRUcuCisJT25seSBpbnNlcnQgcmVnaXN0ZXIgaW4gYSBjbGFzcyBpZiBpdCBpcyB0aGUgc2FtZSBtb2RlLgorCURvbid0IHNldCByZWdfcnR4OyBzZXQgcXR5X21vZGUgaW5zdGVhZC4KKwkoaW5zZXJ0KTogVXBkYXRlIGhhcmRfcmVnc19pbl90YWJsZS4KKwlHZXQgY29uc3RhbnQgZXF1aXZhbGVuY2UgaW4gcHJvcGVyIG1vZGUuCisJKG1lcmdlX2VxdWl2X2NsYXNzZXMpOiBDYWxsIGRlbGV0ZV9yZWdfZXF1aXYuCisJKGludmFsaWRhdGUpOiBDYWxsIGRlbGV0ZV9yZWdfZXF1aXYgYW5kIHVwZGF0ZSByZWdfdGljay4KKwlJbnZhbGlkYXRlIGFsbCBwYXJ0cyBvZiBtdWx0aS13b3JkIGhhcmQgcmVncyBhbmQgaW52YWxpZGF0ZQorCWFueSBtdWx0aS13b3JkIGhhcmQgcmVnIG92ZXJsYXBwaW5nIHdoYXQgd2UgYXJlIHRvIGludmFsaWRhdGUuCisJT25seSBsb29rIGF0IGNvbnN0YW50IGluIHByb3BlciBtb2RlLgorCShyZW1vdmVfaW52YWxpZF9yZWZzKTogVXNlIHJlZmVyc190b19yZWdub19wLgorCShpbnZhbGlkYXRlX2Zvcl9jYWxsKTogTmV3IGZ1bmN0aW9uLgorCShjYW5vbl9oYXNoLCByZWZlcnNfdG9fbWVtX3AsIGZvbGRfcnR4LCBlcXVpdl9jb25zdGFudCk6IExvb2sgYXQKKwljb25zdGFudCBpbiBwcm9wZXIgbW9kZS4KKwkoY3NlX3J0eF9hZGRyX3Zhcmllc19wLCBjc2VfcHJvY2Vzc19ub3Rlcyk6IExpa2V3aXNlLgorCShleHBfZXF1aXZfcCk6IExpa2V3aXNlLgorCUNoZWNrIHJlZ190aWNrIGZvciBhbGwgcGFydHMgb2YgbXVsdGktd29yZCBoYXJkIHJlZ2lzdGVyLgorCShjYW5vbl9yZWcpOiBEb24ndCB1c2UgcmVnX3J0eDsgZ2V0IHJlZ2lzdGVyIGZyb20gcmVnbm9fcmVnX3J0eCBvcgorCWJ1aWxkIGhhcmQgcmVnIGluIHByb3BlciBtb2RlLgorCShyZWNvcmRfanVtcF9lcXVpdik6IFNwbGl0IGludG8gdHdvIHBpZWNlcy4KKwkocmVjb3JkX2p1bXBfY29uZCk6IFNlY29uZCBwYXJ0IG9mIHJlY29yZF9qdW1wX2VxdWl2OyBtYWtlIHJlY3Vyc2l2ZQorCWNhbGwgdG8gc29tZSBlcXVpdmFsZW5jZXMgaWYgYXJncyBhcmUgU1VCUkVHcy4KKwkoY3NlX2luc24pOiBPbmx5IHJlcGxhY2UgcmVnaXN0ZXIgd2l0aCBlcXVpdmFsZW50IGlmIHByb3BlciBtb2RlOworCWRvbid0IHVzZSByZWdfcnR4LgorCUNhbGwgaW52YWxpZGF0ZV9mb3JfY2FsbC4KKwlEb24ndCBhdm9pZCBjYWxsIHRvIGdlbl9sb3dwYXJ0IGZvciBoYXJkIHJlZ2lzdGVyLgorCU1ha2UgYSBTVUJSRUcgaWYgZ2VuX2xvd3BhcnRfaWZfcG9zc2libGUgZmFpbHMgZm9yIFNVQlJFRworCWFzc2lnbm1lbnQuCisJKGludmFsaWRhdGVfZnJvbV9jbG9iYmVycyk6IFVwZGF0ZSByZWdfdGljayBvZiBTUDsgaW52YWxpZGF0ZQorCVJFRyBlbnRyeSBpbiB0YWJsZSwgaWYgcHJlc2VudDsgdXNlIHN0YWNrX3BvaW50ZXJfcnR4LgorCShjc2VfbWFpbik6IERvbid0IGFsbG9jYXRlIHJlZ19ydHguCisJSW5pdGlhbGl6ZSByZWdzX2ludmFsaWRhdGVkX2J5X2NhbGxzLgorCShjc2VfYmFzaWNfYmxvY2spOiBBbGxvY2F0ZSBxdHlfbW9kZS4KKworCSogcnM2MDAwLmggKEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMpOiBBZGQgc28gd2UgY2FuIGRpc2FtYmlndWF0ZQorCWZpeGVkIGFuZCBmbG9hdGluZyByZWdpc3RlcnMuCisKKwkqIHJzNjAwMC5tZCAoYXNocmRpMyk6IFJlamVjdCBhbGwgYnV0IGNvbnN0YW50IHNoaWZ0IGNvdW50cy4KKworCSoganVtcC5jIChzaW1wbGVqdW1wX3ApOiBEb24ndCBhY2Nlc3MgUEFUVEVSTiB1bmxlc3Mgd2Uga25vdyBpdCBpcworCWEgSlVNUF9JTlNOLgorCisJKiBjb21iaW5lLmMgKGdldF9sYXN0X3ZhbHVlKTogRG9uJ3QgZG8gYSByZWN1cnNpdmUgY2FsbCBmb3IgYSAKKwlwYXJhZG94aWNhbCBTVUJSRUcuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluICJpZiAoLi4uKSB4ID0gYTsgZWxzZSB4ID0gYjsiLCAKKwlkb24ndCBtb3ZlICJ4ID0gYjsiIGlmIGl0IGhhcyBub24tdHJpdmlhbCBSRUdfTk9URVMuICBBbHNvLCBhbGxvdworCUIgdG8gYmUgYW55IGNvbnN0YW50LCBub3QganVzdCBhIENPTlRfSU5ULgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IEhhbmRsZSBhbGlnbm1lbnQgZm9yIGFycmF5cyB0aGUgc2FtZQorCWFzIHdlIGRvIGZvciByZWNvcmRzIGFuZCB1bmlvbnMuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSWdub3JlIGBjb25zdCcgb24gdm9pZCBmdW5jdGlvbnMuCisKKwkqIGk4NjAuYzogSW5jbHVkZSByZWNvZy5jLgorCVJlbW92ZSBtYW55IGV4cGxpY2l0IGRlY2xhcmF0aW9uIG9mIHZhcnMgZnJvbSBpbmNsdWRlIGZpbGVzLgorCShpODYwX2NvbXBhcmVfb3BbMDFdKTogRGVmaW5lIHRoZXNlIGhlcmUuCisJKiBpODYwLmggKGk4NjBfY29tcGFyZV9vcFswMV0pOiBBZGQgZGVjbGFyYXRpb25zLgorCSogaTg2MC5tZCAoY29tcGFyZSwgYnJhbmNoKTogUmV3b3JrIHRvIHVzZSBkZWZpbmVfZXhwYW5kIGZvciBjbXB4eC4KKwlDb21wYXJlIGp1c3Qgc2F2ZXMgb3BlcmFuZHMgaW4gaTg2MF9jb21wYXJlX29wWzAxXS4gIEJyYW5jaCBlbWl0cworCWJvdGggaW5zbnMgdXNpbmcgdGhlIHNhdmVkIG9wZXJhbmRzLgorCisJKiBpODYwLmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBIYW5kbGUgRlAgcmVnaXN0ZXJzIGFuZCBjb25zdGFudHMuCisJKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBXZSBuZWVkIGEgc2NyYXRjaCByZWdpc3RlciB0byBjb3B5CisJYW4gaW50ZWdlciBjb25zdGFudCB0byBhIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyLgorCSogaTg2MC5tZCAoYWRkc2kzLCBzdWJzaTMpOiBBbGxvdyB1c2Ugb2YgZmxvYXRpbmcgcmVnaXN0ZXJzLgorCitUaHUgSmFuIDIzIDEzOjMzOjQwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaTM4NnY0LmggKENQUF9QUkVERUZJTkVTKTogRG9uJ3QgZGVmaW5lIFg4Ni4KKworCSogYy1sZXguYyAocmVhZGVzY2FwZSk6IFdhcm4gZm9yIFxhIGFuZCBceCBpZiB3YXJuX3RyYWRpdGlvbmFsLgorCUhhbmRsZSBcdiBhcyB2ZXJ0aWNhbCB0YWIgcmVnYXJkbGVzcyBvZiAtdHJhZGl0aW9uYWwuCisKKwkqIGZpeGluY2x1ZGVzLCBmaXhpbmMuc3ZyNDogTWFrZSBMSUIgYWJzb2x1dGUsIG5lYXIgdGhlIGJlZ2lubmluZy4KKworCSogZml4aW5jbHVkZXM6IFNpbXBsaWZ5IGVncmVwIGNvbW1hbmQgd2hpbGUgbWF0Y2hpbmcgdGhlIHNhbWUgbGluZXMKKwkocGx1cyBvY2Nhc2lvbmFsIGFkZGl0aW9uYWwgbGluZXMpLgorCisJKiBmdW5jdGlvbi5jIChmaXh1cF9tZW1vcnlfc3VicmVnKTogTmV3IGFyZyBVTkNSSVRJQ0FMLiAgQ2FsbHMgY2hhbmdlZC4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IEhhbmRsZSBMUEFUSCBsaWtlIExJQlJBUllfUEFUSC4KKworCSogc3ZyMy5oIChBU01fTE9ORyk6IERlbGV0ZWQuCisKKwkqIGd2YXJhcmdzLmg6IElnbm9yZSBfVkFfTElTVF8gaWYgX0FOU0lfSF87CisJZG9uJ3QgZGVmaW5lIF9WQV9MSVNUXyBpZiBhbHJlYWR5IGRlZmluZWQuCisKK1RodSBKYW4gMjMgMDk6MTA6NTIgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGtsdW5hLmggKGluY2x1ZGVzKTogSW5jbHVkZSBhb3V0b3MuaC4KKworVGh1IEphbiAyMyAwOToxMDo1MiAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIHZhLWk4NjAuaCAoX19zYXZlcmVnKTogRml4IHR5cG8uCisKKwkqIGk4NjAuaCAoUFJFRElDQVRFX0NPREVTKTogIEFkZGVkIGRlZmluaXRpb24uCisKKwkqIGkzODZ2NC5oIChBU01fRklMRV9TVEFSVCk6ICBEZWZpbml0aW9uIGFkZGVkIHdoaWNoIGdlbmVyYXRlcworCS52ZXJzaW9uIGRpcmVjdGl2ZS4KKworV2VkIEphbiAyMiAyMzoxNTo0NSAxOTkyICAgIChFcmljIFlvdW5nZGFsZSBhdCB5b3VuZ2RhbGVAdjY1NTBjLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1jYzEuY29tOiBQcmVkZWZpbmUgc3ltYm9scyBmb3IgInJlbmFtZSIgYW5kICJiaXNvbiI7IGFsd2F5cworCWdlbmVyYXRlIGMtcGFyc2UuaCB3aGVuIGdlbmVyYXRpbmcgYy1wYXJzZS5jLgorCitXZWQgSmFuIDIyIDIwOjAxOjExIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3JlY29yZF90eXBlX25hbWUpOiAgVXNlIHR5cGVkZWYgbmFtZXMKKwlmb3IgQysrLiAgKEEga2x1ZGdlLikKKwkqIHNkYm91dC5jIChzZGJvdXRfb25lX3R5cGUpOiAgRW1pdCBiYXNlIGNsYXNzZXMgYXMKKwlkdW1teSBmaWVsZHMsIGp1c3QgbGlrZSBkYnhvdXQuYyB3aGVuIG5vdCB1c2luZyBnZGIgZXh0ZW5zaW9ucy4KKworV2VkIEphbiAyMiAyMDowMToxMSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBTdXJyb3VuZCB1c2VzIG9mICR7SU5QVVR9IHdpdGggIiIgaW5zdGVhZCBvZiAnJworCXNvIHRoYXQgaXQgd2lsbCBnZXQgZXhwYW5kZWQuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEZvciBjKyssIGRlZmluZSBfX0dOVUdfXyB0byAyLCBhbmQKKwlwYXNzIC10cmlncmFwaHMuCisKKwkqIGNjY3AuMSwgY3BwLjEsIGdjYy4xLCBnKysuMTogRGVsZXRlIG1vcmUgUkNTIHZhcmlhYmxlcy4KKworV2VkIEphbiAyMiAxOTowMjowNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0LCBjYXNlIEFTSElGVCk6IElmIHdlIHdpbGwKKwliZSBzdXBwcmVzc2luZyBhIHNpZ24gZXh0ZW5zaW9uIGJlY2F1c2UgdGhlIHVwcGVyIGJpdHMgYXJlCisJYWxyZWFkeSB0aGUgc2FtZSwgdmVyaWZ5IHRoYXQgdGhlIG9wZXJhbmQgaXMgaW4gdGhlIHNhbWUKKwltb2RlIGFzIHdlIHdpbGwgYmUgZG9pbmcgdGhlIHNoaWZ0OyBkb24ndCBpZ25vcmUgYSBTVUJSRUcKKwlpbnNpZGUgdGhlIGlubmVyIFNISUZULgorCitXZWQgSmFuIDIyIDA5OjI1OjA3IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBjLXR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IE1ha2UgZGVjbCBzdGF0aWMuCisJRG9uJ3QgZm9yZ2V0IHRvIHJldHVybiB0aGUgdmFsdWUuCisJKGZ1bmN0aW9uX3R5cGVzX2NvbXBhdGlibGVfcCwgY29tcHR5cGVzKTogSW5pdGlhbGl6ZSBgdmFsJy4KKworVHVlIEphbiAyMSAxMzoyOTo1MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNyb3NzLW1ha2UgKEFMTCk6IE92ZXJyaWRlIHdpdGggZGVmaW5pdGlvbiBpdCBoZXJlLgorCSogY29uZmlndXJlOiBEb24ndCBlZGl0IGl0cyB2YWx1ZSBleHBsaWNpdGx5IGhlcmUuCisKKwkqIGNydHN0dWZmLmMgKF9fZG9fZ2xvYmFsX2N0b3JzKTogSW5jbHVkZSBET19HTE9CQUxfQ1RPUlNfQk9EWQorCWluIGNydGVuZC5vLCBub3QgaW4gY3J0YmVnaW4uby4KKworCSogc3ZyMy5oOiBQcmVwYXJlIHRvIHVzZSB3aXRoIGkzODYuCisJKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBEZWZpbml0aW9uIGRlbGV0ZWQuCisJVGhpcyBwZXJ0YWlucyB0byB0aGUgaW5kaXZpZHVhbCBjcHUgdHlwZXMuCisJKEFTTV9TSE9SVCwgQVNNX0xPTkcsIEFTTV9ET1VCTEUpOiBMaWtld2lzZS4KKwkoREJYX0RFQlVHR0lOR19JTkZPKTogVW5kZWYgdGhpcy4KKwkoREJYX1JFR0lTVEVSX05VTUJFUik6IERlbGV0ZWQgdGhlICN1bmRlZi4KKwkoU1RBUlRGSUxFX1NQRUMsIExJTktfU1BFQywgTElCX1NQRUMpOiBEZWxldGVkLgorCSogaTg2MHYzLmggKFNUQVJURklMRV9TUEVDLCBMSU5LX1NQRUMsIExJQl9TUEVDKTogTmV3IGRlZmluaXRpb25zLgorCisJKiBhdHQzODYuaDogQ29leGlzdCB3aXRoIHN2cjMuaC4KKwkoQVNNX0ZJTEVfU1RBUlQpOiBEZWxldGVkLgorCShBU01fT1VUUFVUX0NPTU1PTiwgQVNNX09VVFBVVF9MT0NBTCk6IExpa2V3aXNlLgorCShBU01fQllURV9PUCwgTk9fRE9MTEFSX0lOX0xBQkVMKTogTGlrZXdpc2UuCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVbmRlZiBiZWZvcmUgZGVmaW5pbmcuCisJKEFTTV9GSUxFX1NUQVJUXzEpOiBVbmRlZiBiZWZvcmUgZGVmaW5pbmcuCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogRGVsZXRlZC4KKwkoQlNTX1NFQ1RJT05fRlVOQ1RJT04pOiBOZXcgbWFjcm87IGRlZmluZXMgYnNzX3NlY3Rpb24uCisKKwkqIGkzODZ2LmgsIGFpeDM4Ni5oOiBJbmNsdWRlIHN2cjMuaC4KKwkoU0NDU19ESVJFQ1RJVkUsIEFTTV9PVVRQVVRfSURFTlQpOiBEZWxldGVkLgorCShUQVJHRVRfTUVNX0ZVTkNUSU9OUyk6IERlbGV0ZWQuCisJKFNEQl9ERUJVR0dJTkdfSU5GTywgREJYX0RFQlVHR0lOR19JTkZPKTogRGVsZXRlZC4KKworCSogU3VwcG9ydCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIG9uIHN2cjMuICBGcm9tIGphbWVzQGJpZ3RleC4KKwkqIGkzODZ2LmgsIGFpeDM4Ni5oIChTVEFSVEZJTEVfU1BFQyk6IFVzZSBjcnRiZWdpbi5vIGFmdGVyIGNydDEuby4KKwkoTElCX1NQRUMpOiBVc2UgY3J0ZW5kLm8gYmVmb3JlIGNydG4uby4KKwkoQ1RPUlNfU0VDVElPTl9BU01fT1AsIEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IpOiBOZXcgbWFjcm9zLgorCShJTklUX1NFQ1RJT05fQVNNX09QKTogTGlrZXdpc2UuCisJKiBzdnIzLmggKERUT1JTX1NFQ1RJT05fQVNNX09QKTogTmV3IG1hY3Jvcy4KKwkoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBOZXcgbWFjcm8uCisJKEVYVFJBX1NFQ1RJT05TLEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogVXNlIC5pbml0IGFuZCAuZmluaQorCXNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIC5ic3MuCisJKHtJTklULEZJTkl9X1NFQ1RJT05fRlVOQ1RJT04pOiBOZXcgbWFjcm9zIGZvciAqX3NlY3Rpb24gZnVuY3Rpb25zLgorCSh7Q1RPUlMsRFRPUlN9X1NFQ1RJT05fRlVOQ1RJT04pOiBNYWNyb3MgZGVsZXRlZC4KKwkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUik6IERlbGV0ZWQuCisJKEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IFVzZSBBU01fTE9ORy4KKwkoSU5UX0FTTV9PUCk6IERlbGV0ZWQuCisKKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IERvbid0IHVzZSBpbml0aWFsIHZhbHVlIGlmIEJMS21vZGUuCisJSWYgZG8gdXNlIHRoZSBpbml0aWFsIHZhbHVlLCB1cGRhdGUgYHR5cGUnLgorCisJKiBhcm0uaCAoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBOZXcgZGVmaW5pdGlvbi4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBJZ25vcmUgTUFYX0ZJWEVEX01PREVfU0laRSBmb3IgaW50ZWdlcnMuCisKKwkqIHVsdHJpeC5oIChTSVpFX1RZUEUpOiBVc2UgYHVuc2lnbmVkIGludCcuCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBBZGQgbWlzc2luZyAtZiBpbiBybS4KKwkoaW5zdGFsbC1maXhpbmNsdWRlcyk6IEluc3RhbGwgdGhlIFJFQURNRSBmaWxlLgorCisJKiBmaXhpbmNsdWRlczogRG9uJ3QgbWF0Y2ggb24gc2l6ZV90LCBldGMuLCBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseQorCWNoYW5nZSB0aGVtLgorCitNb24gSmFuIDIwIDIzOjIyOjQ1IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChpZGVhbF9jYW5kaWRhdGUpOiBEb24ndCBzZWUgdHdvIGZ1bmN0aW9ucyBhcyBhbWJpZ3VvdXMKKwlpZiBvbmUgaXMgYXJndW1lbnQtYnktYXJndW1lbnQgZXF1aXZhbGVudCBvciBiZXR0ZXIgdGhhbiBhbm90aGVyLgorCitNb24gSmFuIDIwIDE0OjA4OjA2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRvcGxldi5jIChzdHJpcF9vZmZfZW5kaW5nKTogQWRkICIuYWRhIi4KKworTW9uIEphbiAyMCAxMzo1MzoxNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHByb3RvaXplLmMgKHhmcmVlKTogTm8gbG9uZ2VyIHN0YXRpYy4KKworCSogZ2JsLWN0b3JzLmggKERPX0dMT0JBTF9DVE9SU19CT0RZKTogQWxsb3cgdG0uaCB0byBvdmVycmlkZS4KKworCSogZmluYWwuYyAobGVhZl9yZW51bWJlcl9yZWdzX2luc24pOiBEbyBqdXN0IHRoZSBwYXR0ZXJuIG9mIGFuIGluc24uCisKKwkqIHB5ci5oIChQQ0NfQklURklFTERfVFlQRV9NQVRURVJTKTogRGVmaW5lZC4KKwkoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBEZWxldGVkLgorCisJKiBtaXBzLmM6IENsZWFuIHVwIHNwYWNpbmcgYXJvdW5kIHNxdWFyZSBicmFja2V0cy4KKworCSogYy10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOgorCUdldCByaWQgb2YgZmVhdHVyZSB0byBjb252ZXJ0IHRvIGEgdGFnbGVzcyB1bmlvbiB0eXBlLgorCShjb21tb25fdHlwZSk6IEFkZCBwZWRhbnRpYyB3YXJuaW5nLgorCShjb21wdHlwZXMsIGZ1bmN0aW9uX3R5cGVzX2NvbXBhdGlibGVfcCk6IFJldHVybiAyIG1lYW5pbmcgd2Fybi4KKwkoY29tcF90YXJnZXRfdHlwZXMpOiBEbyB0aGUgd2FybmluZyBoZXJlLgorCSh0eXBlX2xpc3RzX2NvbXBhdGlibGVfcCk6IE5ldyBmdW5jdGlvbi4KKworU3VuIEphbiAxOSAxNzozMjoxOSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRml4IHR5cG9zIHdoZW4gY2hlY2tpbmcgZm9yIHNlY29uZGFyeQorCWljb2RlLgorCitTdW4gSmFuIDE5IDE1OjI4OjUzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9hbGxvYyk6IElmIExFQUZfUkVHSVNURVJTLCB0aG9zZSBhcmUgdGhlCisJcmVncyB0aGF0IGNvc3Qgbm90aGluZyB0byBzYXZlLCBmb3Igc2V0dGluZyByZWdzX2FscmVhZHlfdXNlZC4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IFByZXNlcnZlIGZ1bmN0aW9uIHZhbHVlIHJlZworCWFyb3VuZCB0aGUgY2FsbCB0byBfX2J1aWx0aW5fc2F2ZXJlZ3MuCisKKwkqIGNvbmZpZ3VyZSAobWlwcy1zZ2ktaXJpeDQqLCBtaXBzLXNnaS1pcml4Kik6IFNldCBpbnN0YWxsX3dpdGhfY3AuCisKKwkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6CisJQ2hlY2sgcHJvcGVybHkgZm9yIGBzdGF0aWMnIGZ1bmN0aW9uIGluIGhhbmRsaW5nIC1XbWlzc2luZy1wcm90b3R5cGVzLgorCisJKiBsaWJnY2MyLmMgKF9fbWFpbik6IE9taXQgdGhpcyBmbiBpZiBJTklUX1NFQ1RJT05fQVNNX09QLgorCitTdW4gSmFuIDE5IDEzOjIzOjEzIDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBzdW5maXNoKQorCisJKiBhbWl4LmggKEFTTV9PVVRQVVRfQVNDSUkpOiAgT3ZlcnJpZGUgdmVyc2lvbiBpbiBzdnI0LmguCisKK1N1biBKYW4gMTkgMTM6MTY6NTYgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAobG9va3VwX2ZpZWxkKTogQWNjZXB0IElTX0FHR1JfVFlQRV9DT0RFLCBub3QKKwlqdXN0ID09IFJFQ09SRF9UWVBFLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQ2xlYXIgYSB0ZW50YXRpdmUgc2V0dGluZyBvZgorCURFQ0xfQklUX0ZJRUxELgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBEb24ndCBjYWxsIGBwdXNoY2xhc3MnIGZvciBpbmNvbXBsZXRlCisJQ09OVEVYVC4KKworCSogY3AtdHlwZWNrLmMgKGNvbXBfdGFyZ2V0X3R5cGVzKTogQ2FsbCBgY29tcF90YXJnZXRfcGFybXMnIHdpdGgKKwlTVFJJQ1QgPT0gMCwgbm90IC0xLgorCShidWlsZF9jb25kaXRpb25hbF9leHByKTogQ2hlY2sgdGhhdCB0aGUgdGFyZ2V0IHR5cGVzIG9mIFRZUEUxIGFuZAorCVRZUEUyIGFyZSBhZ2dyIHR5cGUgYmVmb3JlIGNhbGxpbmcgYGNvbW1vbl9iYXNlX3R5cGUnLgorCitTdW4gSmFuIDE5IDA0OjEwOjE2IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogY29uZmlndXJlOiBGaXggdHlwbyBpbnNlcnRpbmcgSU5TVEFMTD1jcCBpbnRvIG1ha2VmaWxlLgorCitTYXQgSmFuIDE4IDEyOjA2OjU4IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKGJ1aWxkX3dpdGhfY2xlYW51cCk6IERlbGV0ZSBvYnNvbGV0ZSBmdW5jdGlvbi4KKwkqIGNwLXRyZWUuYyAoYnJlYWtfb3V0X2NsZWFudXBzKTogTmV3IGZ1bmN0aW9uLgorCSogY3AtZGVjbC5jIChjcGx1c19leHBhbmRfZXhwcik6IENhbGwgYGJyZWFrX291dF9jbGVhbnVwcycuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfY29tcG91bmRfZXhwcik6IERpdHRvLgorCisJKiBjcC1jYWxsLmMgKGNvbnZlcnRfaGFyc2huZXNzKTogTWFrZSBhbnkgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwCisJcHJlZmVyYWJsZSB0byBhIHZvaWQqIGNvbnZlcnNpb24uCisJKiBjcC10cmVlLmggKENMQVNTVFlQRV9NQVhfREVQVEgpOiBOZXcgbWFjcm8uCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBTZXQgQ0xBU1NUWVBFX01BWF9ERVBUSC4KKworCSogY3AtY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IERvbid0IHJldHVybiBpbiBBUlJBWV9SRUYgY2FzZSwKKwlzaW5jZSB3ZSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlIHJldHVybiB2YWx1ZSBmb3IgY29tcGxleAorCWluaGVyaXRhbmNlLgorCisJKiBjcC1kZWNsMi5jIChsYW5nX2Zfb3B0aW9ucyk6IEFkZCByZWNvZ25pemVycyBmb3IgLWZ7bm8tfWJ1aWx0aW4sCisJLWZ7bm8tfWlkZW50LCBhbmQgLWFuc2kuICBBbHNvLCByZW1vdmUgdW5uZWNlc3NhcnkgIm5vLSoiIGZvcm1zLgorCisJKiBjcC1pbml0LmMgKGVtaXRfYmFzZV9pbml0KTogSWYgUEVEQU5USUMsIGRvbid0IGxldCBiYXNlCisJaW5pdGlhbGl6ZXJzIGxlYWsgdXAgdGhlIGhpZXJhcmNoeS4KKworCSogY3AtcGFyc2UueSAoc3RydWN0c3ApOiBEaXNhYmxlIGdyYXR1aXRvdXMgZXJyb3IgbWVzc2FnZS4KKworCSogY3AtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IERvbid0IG92ZXJsb29rIFBFTkFMVFkgd2hlbgorCXNpZ25lZC91bnNpZ25lZCBkaWZmZXJlbmNlcyBhcmUgbm90ZWQgKGluIGJvdGggUE9JTlRFUl9UWVBFIGFuZAorCVJFRkVSRU5DRV9UWVBFIGNhc2VzKS4KKworCSogdG9wbGV2LmMgKHN0cmlwX29mZl9lbmRpbmcpOiBHcm9rICIuaWkiIGVuZGluZ3MgKEMrKyBwcmVwcm9jZXNzZWQKKwlmaWxlcykuCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogQWRkIHNwZWNpYWwgaGFuZGxlciB3aGVuCisJQ09NUE9ORU5UIGlzIHRoZSBDTEFTU1RZUEVfVkZJRUxEIG5hbWUgZm9yIEJBU0VUWVBFLgorCitTYXQgSmFuIDE4IDA4OjI5OjU4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IG1ha2UgY29uc3RhbnQgcG9vbCBlbnRyaWVzIGluIE1PREVfQ0MgbW9kZXMuCisKK1NhdCBKYW4gMTggMDA6Mjg6NDggMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBGaXggdHlwbyBpbnN0YWxsaW5nIGdjYy4KKwkKKwkqIGNyZHMuaCwgaXNpLmgsIG5ld3BiYi5oLCB0dGk2OGsuaDogQWRkICNlcnJvciBiZWNhdXNlIC1tNjgwMDAKKwl3aWxsIGNhdXNlIGEgY3Jhc2ggKEkgdGhpbmspLCB0byBhc2sgcGVvcGxlIHdoYXQgdG8gZG8uCisKKwkqIGdtaWNyby5oIChBU01fRklMRV9TVEFSVCk6IERvbid0IGRvIGFueXRoaW5nLgorCShUQVJHRVRfREVGQVVMVCk6IFR1cm4gb24gdGhlIGJpdGZpZWxkIGZsYWcuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEdldCByaWQgb2YgdGhlIGJpdGZpZWxkIG9wdGlvbnMuCisKKwkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBObyB3YXJuaW5nIGZvciBcPy4KKworCSogcHJvdG9pemUuYyAobXVuZ2VfY29tcGlsZV9wYXJhbXMpOiBGaXggY2FzdCB0aGF0IHNldHMgY29tcGlsZV9wYXJhbXMuCisJKHhtYWxsb2MsIHhyZWFsbG9jKTogTm8gbG9uZ2VyIHN0YXRpYy4KKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZSwgdW5wcm90b2l6ZSk6IEFkZCBMSUJERVBTIGFzIGRlcHMuCisKKwkqIHZhLWk4NjAuaCAodmFfYXJnKTogVXNlIF9fZXh0ZW5zaW9uX18gdG8gc3VwcHJlc3MgcGVkYW50aWMgd2FybmluZy4KKwkqIHZhLXNwYXJjLmgsIHZhLXNwdXIuaCwgdmEtcHlyLmg6IExpa2V3aXNlLgorCisJKiB4LWlyaXg0Lmg6IE5ldyBmaWxlLgorCSogY29uZmlnLnN1YjogRG9uJ3QgY29udmVydCBpcml4IHRvIHN5c3YuCisJKiBjb25maWd1cmUgKG1pcHMtc2dpLWlyaXg0Kik6IE5ldyBjb25maWd1cmF0aW9uLgorCShtaXBzLXNnaS1pcml4Kik6IFJlbmFtZWQgZnJvbSBtaXBzLXNnaS1zeXN2Ki4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6CisJSGFuZGxlIHRoZSBzdGFuZGFyZF9leGVjX3ByZWZpeCogYmVmb3JlIHRoZSBtZF8qX3ByZWZpeC4KKworCSogaTM4Ni5oLCBuczMyay5oIChQQ0NfQklURklFTERfVFlQRV9NQVRURVJTKTogRGVmaW5lZC4KKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYzEubnVsbCk6IERlcGVuZCBvbiBHQ0NfUEFTU0VTLgorCisJKiBjY2NwLmMgKGxvb2t1cF9pbXBvcnQsIGFkZF9pbXBvcnQpOiBWTVMga2x1ZGdlcyBzbyB0aGV5IGNvbXBpbGUuCisJKGhhY2tfdm1zX2luY2x1ZGVfc3BlY2lmaWNhdGlvbik6IEFkZCBmb3J3YXJkIGRlY2xhcmF0aW9uLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogSGFuZGxlIEJJVEZJRUxEX05CWVRFU19MSU1JVEVECisJanVzdCBsaWtlIG9uZSBvZiB0aGUgdGhpbmdzIGRvbmUgZm9yIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMuCisKKwkqIHgtbmV4dCwgeC1pMzg2bWFjaDogRGVsZXRlZC4KKwkqIHQtbGliYy1vazogTmV3IGZpbGUuICBEZWZpbmUganVzdCBMSUJHQ0MxLgorCSogY29uZmlndXJlIChpMzg2LSotbWFjaCwgbTY4ay1uZXh0LSopOiBVc2UgdC1saWJjLW9rLgorCisJKiB0LXN2cjQgKEZJWElOQ0xVREVTKTogRGVmaW5lZC4KKwkqIHQtbTg4a3Y0IChGSVhJTkNMVURFUyk6IERlZmluZWQuCisJKiB0LXN2cjMgKEVYVFJBX1BBUlRTKTogRGVmaW5lZC4KKwkqIHQtaTM4NnNjbyAoRVhUUkFfUEFSVFMpOiBEZWZpbmVkLgorCisJKiBjb25maWd1cmUgKHNwYXJjLSotc3lzdjQqKTogTmV3IGFsdGVybmF0aXZlLgorCisJKiBjb25maWd1cmUgKGluc3RhbGxfd2l0aF9jcCk6IE5ldyBmbGFnIGFuIGFsdGVybmF0aXZlIGNhbiBzZXQuCisJSWYgaG9zdCBzZXRzIGl0LCBhZGQgSU5TVEFMTD1jcCB0byBNYWtlZmlsZS4KKwlTZXQgdGhpcyBmb3IgYW55IHN5c3RlbSBWLCBhbmQgZm9yIG02OGstY3Jkcy11bm9zLgorCitTYXQgSmFuIDE4IDIzOjE1OjA4IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogdmEtaTg2MC5oICh2YV9saXN0KTogTWFkZSBfX3JlZ19iYXNlIGZpZWxkIHR5cGUgbG9uZyogdG8gYXZvaWQKKwljb21waWxhdGlvbiBlcnJvcnMuCisJKF9fc2F2ZXJlZyk6IEFkZCBleHBsaWNpdCBjYXN0IHRvIChfX3ZhX3NhdmVkX3JlZ3MgKikuCisKK0ZyaSBKYW4gMTcgMTU6MDk6MzQgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2LmggKEZVTkNUSU9OX0JPVU5EQVJZKTogRG8gbGFyZ2VyIGFsaWdubWVudHMgZm9yIGk0ODYuCisJKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IFNhbWUgaGVyZS4KKwkoQVNNX09VVFBVVF9MT09QX0FMSUdOKTogQnV0IG5vdCBoZXJlIC0gZG8gd29yZCBhbGlnbnMgYXMgYmVmb3JlLgorCisJKGVudW0gcmVnX2NsYXNzKTogRGVsZXRlIGNsYXNzZXMgQURSRUcgYW5kIEJSRUcgLSBuZWl0aGVyIHVzZWQgbm9yCisJdXNlZnVsLiAgQWRkIGNsYXNzZXMgRlBfVE9QX1JFRyBhbmQgRlBfU0VDT05EX1JFRy4KKwkoUkVHX0NMQVNTX05BTUVTKTogTGlrZXdpc2UuCisJKFJFR19DTEFTU19DT05URU5UUyk6IExpa2V3aXNlLgorCShSRUdOT19SRUdfQ0xBU1MpOiBSZWZsZWN0IHRoYXQgY2hhbmdlLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBMaWtld2lzZS4gIEFkZCAidCIgYW5kICJ1IiBjb25zdHJhaW50cy4KKwkoQ0xBU1NfTUFYX05SRUdTKTogTmV3IGNsYXNzZXMgdXNlIG9ubHkgMSBoYXJkIHJlZyBmb3IgYW55IG1vZGUuCisKKwkoQ09OU1RfT0tfTEVUVEVSX1ApOiBEb2N1bWVudCB1c2VzIG9mIGxldHRlcnMuCisKKwkqIHJlZy1zdGFjay5jOiBBZGQgY29tbWVudHMgZGVzY3JpYmluZyBydWxlcyBmb3IgYXNtIHN0YXRlbWVudHMKKwlpbnZvbHZpbmcgc3RhY2stbGlrZSByZWdzLgorCShhc21fcmVncyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUuCisJKGZhdGFsX2Zvcl9hc20pOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9uLgorCisJKGdldF9hc21fb3BlcmFuZF9sZW5ndGhzKTogTmV3IGZ1bmN0aW9uLgorCShjb25zdHJhaW5fYXNtX29wZXJhbmRzKTogTmV3IGZ1bmN0aW9uLiAgTGlrZSBjb25zdHJhaW5fb3BlcmFuZHMsCisJYnV0IHJlY29yZHMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2hlZCBhbHRlcm5hdGl2ZS4KKworCShyZWNvcmRfYXNtX3JlZ19saWZlKTogTmV3IGZ1bmN0aW9uLgorCShyZWNvcmRfcmVnX2xpZmUpOiBJZiBJTlNOIGlzIGFuIGFzbSBzdGF0ZW1lbnQsIGRlY29kZSBvcGVyYW5kcworCWFuZCBwYXNzIHRvIHJlY29yZF9hc21fcmVnX2xpZmUuCisJKHJlY29yZF9yZWdfbGlmZV9wYXQpOiBBYm9ydCBpZiBhbnkgYXNtIGlzIHNlZW4gaGVyZS4KKworCShzdWJzdF9hc21fc3RhY2tfcmVncyk6IE5ldyBmdW5jdGlvbi4KKwkoc3Vic3Rfc3RhY2tfcmVncyk6IElmIElOU04gaXMgYW4gYXNtIHN0YXRlbWVudCwgZGVjb2RlIG9wZXJhbmRzCisJYW5kIHBhc3MgdG8gc3Vic3RfYXNtX3N0YWNrX3JlZ3MuICBXaGVuIGhhbmRsaW5nIFJFR19VTlVTRUQgbm90ZXMsCisJZW1pdCB0aGUgcG9wcyBpbiB0aGUgcmlnaHQgb3JkZXIuCisKKwkoY2hhbmdlX3N0YWNrKTogTmV3IGFyZ3VtZW50IHRvIGluc2VydCBhbnkgbmV3IGluc25zIGJlZm9yZSBJTlNOCisJaW5zdGVhZCBvZiBhZnRlci4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisKKwkoZW1pdF9zd2FwX2luc24pOiBBYm9ydCBpZiB0aGUgcmVnIGlzIG5vdCBmb3VuZCBpbiBSRUdTVEFDSy4KKworCSogTWFrZWZpbGUuaW4gKHJlZy1zdGFjay5vKTogRGVwZW5kcyBvbiBpbnNuLWNvbmZpZy5oLgorCitGcmkgSmFuIDE3IDE2OjM4OjMyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMsIGZsYWdzLmggKGluX3N5c3RlbV9oZWFkZXIpOiBEZWNsYXJlIGhlcmUuCisJKiBjLWxleC5jLCBjcC1sZXguYyAoaW5fc3lzdGVtX2hlYWRlcik6IE5vdCBoZXJlLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEb24ndCB3YXJuIG9mIHVudXNlZCBzdGF0aWMgZnVuY3Rpb24KKwlpZiBkZWZpbml0aW9uIGlzIGluIGEgc3lzdGVtIGhlYWRlci4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEFkZCBtaXNzaW5nIGFyZyBpbiByZWN1cnNpdmUgY2FsbC4KKwkobGlua19jb21tYW5kX3NwZWMpOiBEb24ndCBwYXNzIC1zLCAtUywgLXUqLCAtWCwgLVkqLgorCitGcmkgSmFuIDE3IDEyOjUxOjI4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb24gYXQgY3lnbnVzLmNvbSkKKworCUZyb20gVGllbWFubjoKKwkqIHJ0bGFuYWwuYyAocmVnX3NldF9iZXR3ZWVuX3ApOiBDYWxsIGByZWdfc2V0X3AnIHdpdGggSU5TTiwgbm90IHRoZQorCWJvZHkgb2YgSU5TTiBzbyB0aGF0IENBTExfSU5TTnMgYXJlIHByb3Blcmx5IGhhbmRsZWQuCisJKiBleHBsb3cuYyAoZmluZF9uZXh0X3JlZik6IERpdHRvLgorCisJKiBocDgwMC5oLCBocDgwMC5tZDogRGVsZXRlIFJDUyBIZWFkZXIgdmFyaWFibGVzLgorCisJKiByZWctc3RhY2suYyAocmVwbGFjZV9yZWcpOiBDaGFuZ2UgYGFib3J0JyB0byBgYWJvcnQgKCknLgorCitGcmkgSmFuIDE3IDE0OjMwOjE0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjYWxsZXItc2F2ZS5jIChpbnNlcnRfc2F2ZV9yZXN0b3JlKTogRG9uJ3QgcGFzcyBhIENPREVfTEFCRUwgdG8KKwlyZWdfbWVudGlvbmVkX3Agd2hlbiB0aGUgbWFjaGluZSBoYXMgYSBjb25kaXRpb24gY29kZSwgc2luY2UKKwlDT0RFX0xBQkVMJ3MgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgYXMgbm9ybWFsIElOU04ncyBkby4KKworRnJpIEphbiAxNyAxMzoyNDozMyAxOTkyICBUb20gV29vZCAgKHdvb2QgYXQgZGctcnRwLmRnLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKHVucHJvdG9pemUubyk6IFVzZSB0aGUgcm0gLWYgb3B0aW9uLgorCisJKiBjcC1sZXguYyAoY2hlY2tfbmV3bGluZSk6IERlZmluZSBgdXNlZF91cCcgYXMgaW4gYy1sZXguYy4KKwkoaW5fc3lzdGVtX2hlYWRlcik6IERlZmluZSBhcyBpbiBjLWxleC5jLgorCitGcmkgSmFuIDE3IDA4OjE0OjA0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKGRlbGV0ZV9mcm9tX2RlbGF5X3Nsb3QpOiBQYXNzIGNvcnJlY3QgbGVuZ3RoIHRvCisJZW1pdF9kZWxheV9zZXF1ZW5jZS4KKworCSogZ2VuYXR0cnRhYi5jIChzdWJzdGl0dXRlX2FkZHJlc3MpOiBIYW5kbGUgSUZfVEhFTl9FTFNFIGluIGFkZGl0aW9uCisJdG8gQ09ORC4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9TVFJMRU4pOiBDb3JyZWN0IGFyZ3MgaW4KKwlleHBhbmRfZXhwciBjYWxsLgorCitGcmkgSmFuIDE3IDE3OjMzOjQwIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0ByYWlkKQorCisJKiB4LWkzODZ2NCAoQ0NMSUJGTEFHUyk6IERlbGV0ZSBtYWNyby4KKwkoR0NDLUNGTEFHUyk6IERlbGV0ZSBtYWNyby4gIFByZXZlbnRlZCBNYWtlZmlsZS5pbiBmcm9tIHdvcmtpbmcuCisKK1RodSBKYW4gMTYgMTc6MDM6MjcgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoY2xlYW5jb25maWcpOiBBbHNvIGRlbGV0ZSB0Y29uZmlnLmguCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9leHRlcm5hbCk6IE9ubHkgY2FsbCBBU01fT1VUUFVUX0VYVEVSTkFMIG9uY2UKKwlmb3IgZWFjaCBzeW1ib2wuCisJKGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwpOiBGaXggbWlub3IgdHlwbyBpbiBzcGFjaW5nLgorCisJKiB0b3BsZXYuYyAobWFpbik6IEZvcmNlIGVycm9yIGlmIGludmFsaWQgLVcgb3B0aW9uIGlzIHVzZWQuCisKK1RodSBKYW4gMTYgMTM6MzU6MTMgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGtkZ3V4LmggKENQUF9QUkVERUZJTkVTKTogQWRkZWQgX19DTEFTU0lGWV9UWVBFX18gYmFjayBhbmQKKwlub3RlZCB3aGVuIGl0IHdvdWxkIGJlIHVzZWZ1bC4KKworCSogbTg4ay5oIChBU01fRklMRV9FTkQsIEFTTV9PVVRQVVRfQVNDSUkpOiBPdmVycmlkZSBzdnI0LmguCisKK1RodSBKYW4gMTYgMTI6Mzc6MTYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzdnI0LmggKFNWUjQpOiBBZGQgdGhpcyBiYWNrLgorCisJKiBjY2NwLmMgKGxvb2t1cF9pbXBvcnQpOiBVc2UgYmNtcCB0byBjb21wYXJlIGlub2Rlcy4KKworCSogY2NjcC5jIChtYWluKTogSGFuZGxlIC1pZGlyYWZ0ZXIgb3B0aW9uLgorCisJKiBtNjhrdjQuaCwgbTg4a3Y0LmgsIGkzODZ2NC5oLCBzcGFyY3Y0LmgsIGk4NjB2NC5oIChDUFBfUFJFREVGSU5FUyk6IAorCUFkZCBfX3N2cjRfXyBpbiBjYXNlIHVzZXIgcHJvZ3JhbXMgd2FudCB0byBkaXN0aW5ndWlzaC4KKworCSogY3AtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBDaGFuZ2VzIGxpa2UgSmFuIDEyIGNoYW5nZXMgaW4gYy1sZXguYy4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZml4aW5jbHVkZXMpOiBSZW5hbWVkIGZyb20gYGluY2x1ZGVzJy4KKwlNb3ZlIGNvbW1lbnRzIHNvIHNvbWUgc2hlbGxzIGFyZSBoYXBwaWVyLiAgRGVwLiBvbiBpbnN0YWxsLWhlYWRlcnMuCisKKwkqIG04OGtkZ3V4LmggKENQUF9QUkVERUZJTkVTKTogQWRkIF9fc3ZyNF9fLiAgUmVtb3ZlIF9fQ0xBU1NJRllfVFlQRV9fLgorCUFkZCBzb21lIGFzc2VydGlvbnMuCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IGdpdmUgYXJnIHR5cGUgZm9yIGFib3J0LCBldGMuCisJQWx3YXlzIGRlY2xhcmUgc3RybGVuLCBldGMuLCBzbyAtTyBkb2Vzbid0IGFsdGVyIHRoZSB3YXJuaW5ncy4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBPcGVuLWNvZGUgc3RyKiBvciBtZW0qIG9yIGZmcyBpZiAtTy4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRml4IGJhY2t3YXJkcyB0ZXN0IGZvciAtVyogb3B0aW9ucy4KKworCSogcHJvdG9pemUuYyAoR1VFU1NQQVRITEVOKTogVHJlYXQgUE9TSVggbGlrZSBVU0ctLWFuZCB1c2UganVzdCAyMDAuCisKKwkqIGNjY3AuYyAoZGVwc19vdXRwdXQpOiBCcmVhayBsaW5lIGlmZiBzdHJpbmcgaXMgZW1wdHkuCisJKGRvX2luY2x1ZGUpOiBGaXggdXAgdGhlIGRlcHNfb3V0cHV0IGNhbGxzLgorCisJKiB2YXguYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIGZvcm0gaW5kZXggKyAocmVnK29mZnNldCkuCisKKwkqIG04OGsuaCAoVEFSR0VUX1ZFUlNJT04pOiBEb24ndCB1c2UgX19EQVRFX18uCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFR5cG9zIGluIGMrKy1jcHAtb3V0cHV0IGNhc2UuCisKK1RodSBKYW4gMTYgMTI6MjU6NTEgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBJbiBIQVZFX2NjMCBjb2RlLCBnZW5lcmF0ZSBhIHplcm8gd2l0aAorCUNPTlNUMF9SVFggaW5zdGVhZCBvZiBqdXN0IHVzaW5nIGNvbnN0MF9ydHguCisKKwkqIGNzZS5jIChjc2VfaXNuc24pOiBBIENBTExfSU5TTiBjbG9iYmVycyBhbGwgZml4ZWQgcmVncyBleGNlcHQKKwlmb3IgYXAsIGZwLCBhbmQgc3AuCisKK1RodSBKYW4gMTYgMDg6MDM6NDAgMTk5MiAgVG9tIFdvb2QgICh3b29kIGF0IGRnLXJ0cC5kZy5jb20pCisJCisJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBDb21wdXRlIHRoZSBwcmVjaXNpb24gcHJvcGVybHkgaWYgdGhlCisJbWF4aW11bSB2YWx1ZSBpcyBuZWdhdGl2ZS4KKworVGh1IEphbiAxNiAwNzo0MDoyOSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMsIGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBIYXZlCisJdXBkYXRlX2Jsb2NrIHB1dCB0aGUgcGhhbnRvbSBpbnNuIGJlZm9yZSBUSFJFQUQuCisJKHVwZGF0ZV9ibG9jayk6IFVwZGF0ZSBibG9jayBzdGF0dXMgaWYgV0hFUkUsIG5vdCBJTlNOLCBpcyBibG9jayBoZWFkLgorCitUaHUgSmFuIDE2IDAwOjI4OjE0IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXkgbmNkLmNvbSkKKworCSogaTg2MC5jIChvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiAgRml4ZWQgdHlwby4KKworCSogcHJvdG9pemUuYyAoR1VFU1NQQVRITEVOLCBwb2ludGVyX3R5cGUsIGNvbnN0X3BvaW50ZXJfdHlwZSk6CisJbW92ZWQgZGVmaW5pdGlvbnMgZGVjbGFyYXRpb25zIG91dCBvZiBjb25kaXRpb25hbCByZWdpb24uCisJKHN0cmluZ19saXN0X2NvbnMsIHNob3J0cGF0aCwgbXVuZ2VfY29tcGlsZV9wYXJhbXMpOiAgQWRkZWQgY2FzdHMuCisJKGZpbmRfZXh0ZXJuX2RlZik6ICBGaXhlZCBzdHJpbmcgbGl0ZXJhbCB0byBhdm9pZCB0cmlncmFwaC4KKwkoZmluZF9yaWdodG1vc3RfZm9ybWFsc19saXN0KTogIEZpeGVkIHRvIGF2b2lkIHVucmVhY2hlZCBjb2RlIHdhcm5pbmdzLgorCisJKiBzdnI0LmggKEFTTV9PVVRQVVRfQVNDSUkpOiAgRml4ZWQgdHlwby4KKworV2VkIEphbiAxNSAyMTo1ODowMSAxOTkyICBKZWZmcmV5IEEgTGF3ICAobGF3IGF0IGIxMTdiLnN1cGVyLm9yZykKKworCSogc3BhcmMuaCAoU0VMRUNUX1JUWF9TRUNUSU9OKTogV2hlbiBnZW5lcmF0aW5nIFBJQywgcGxhY2Ugc3ltYm9saWMKKwlvcGVyYW5kcyBpbiB0aGUgZGF0YSBzZWN0aW9uLgorCitXZWQgSmFuIDE1IDIxOjQ1OjA5IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogUGFzcyBhbnkgLWI8eHg+LCAtQjx4eD4sIC1tPHh4PiwgLWY8eHg+LCBhbmQKKwktVjx4eD4gb3B0aW9ucyB0byBnY2MgaW5zdGVhZCBvZiB0aGUgbGlua2VyLCBpbiBvcmRlciB0byBhbGxvdworCXRhcmdldCBzd2l0Y2hlcyB0aGF0IGFmZmVjdCB0aGUgc2l6ZSBvZiBwb2ludGVycyBhbmQgc2VhcmNoIHBhdGhzIHRvCisJYmUgcGFzc2VkIHRocm91Z2guCisJKG1haW4sIGNob29zZV90ZW1wX2Jhc2UpOiBVc2UgVE1QRElSIGVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgdGhlCisJUF90bXBkaXIgbWFjcm8gaWYgZGVmaW5lZCB0byBsb2NhdGUgZGlyZWN0b3J5IHRvIHB1dCB0ZW1wIGZpbGVzLgorCSh3aG9sZSBmaWxlKTogUmVvcmdhbml6ZSBzbyB0aGF0IGFsbCBvZiB0aGUgT1NGL3Jvc2Ugc3R1ZmYgZ29lcyBhdAorCXRoZSBlbmQgb2YgdGhlIGZpbGUsIHJhdGhlciB0aGFuIGJlaW5nIHNjYXR0ZXJlZCB0aHJvdWdob3V0LgorCShtYWluLCBzY2FuX3Byb2dfZmlsZSk6IEludm9rZSBzY2FuX3Byb2dfZmlsZSB0d2ljZSwgb25jZSBvbiBlYWNoCisJb3V0cHV0IG9mIGxkLgorCShzY2FuX3Byb2dfZmlsZSwgcmVhZF9maWxlLCB3cml0ZV9maWxlKTogIE9uIHRoZSBzZWNvbmQgaW52b2NhdGlvbiwKKwlyZXdyaXRlIHRoZSBvYmplY3QgZmlsZSBpbiBwbGFjZSwgYWRkaW5nIGEgbG9hZCBjb21tYW5kIHRvIHB1dAorCV9fbWFpbiBpbiB0aGUgbGlzdCBvZiBpbml0aWFsaXplciBmdW5jdGlvbnMuICBUaGlzIGFsbG93cyB1c2VycworCXRvIHB1dCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGludG8gc2hhcmVkIGxpYnJhcmllcy4KKwkoc2Nhbl9wcm9nX2ZpbGUpOiBNb3ZlIGRlYnVnIHN0dWZmIGFuZCBlcnJvciByb3V0aW5lcyB0byBzZXBhcmF0ZQorCWZ1bmN0aW9ucy4KKworV2VkIEphbiAxNSAxNzo1OTowMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBEb24ndCBjb21iaW5lIGlmIERFU1QgaXMgc3RpbGwgYSBmaWVsZAorCWFzc2lnbm1lbnQgYWZ0ZXIgd2UndmUgdHJpZWQgdG8gZXhwYW5kIGl0LgorCitXZWQgSmFuIDE1IDE2OjAxOjEzIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnY2xhc3MuYyAoZml4X3JlZ2lzdGVyKTogRG9uJ3QgbWF0Y2ggYSBudWxsIHJlZ2lzdGVyIG5hbWUuCisJKiB2YXJhc20uYyAoZGVjb2RlX3JlZ19uYW1lKTogTGlrZXdpc2UuCisKKwkqIGkzODYuaCAoSElfUkVHSVNURVJfTkFNRVMpOiBHaXZlIHRoZSBlbGltaW5hYmxlIGFyZyBwb2ludGVyIGEKKwludWxsIG5hbWUuCisKK1dlZCBKYW4gMTUgMTM6NDA6NTAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBQYXNzIC1sYW5nLWFzbSwgbm90IC1sYW5nLWFzbWMsIHRvIGNwcC4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IERvbid0IGR1bXAgbWRfZXhlY19wcmVmaXggaW4gc3BlY3MuCisJVXNlIHRoZSBtZF8uLi4gcHJlZml4ZXMgb25seSBpZiBubyAtYi4KKworV2VkIEphbiAxNSAxMzozNTowOSAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGkzODZ2NC5oIChSRVRVUk5fSU5fTUVNT1JZKTogIERlZmluaXRpb24gYWRkZWQuCisJKENQUF9QUkVERUZJTkVTKTogIEFkZGVkIC1EWDg2IChuZWVkZWQgZm9yIHNvbWUgc3lzdGVtIGhlYWRlcnMpLgorCShBU01fT1VUUFVUX0RXQVJGX1NUUklORyk6ICBEZWxldGVkLgorCShBU01fT1VUUFVUX0FTQ0lJKTogIEFkZGVkIHNwZWNpYWxpemVkIGRlZmluaXRpb24gZm9yIGkzODYvc3ZyNC4KKworCSogc3ZyNC5oIChTVlI0KTogIERlbGV0ZWQgdXNlbGVzcyBkZWZpbmUuCisJKEFTTV9GSUxFX0VORCk6ICBBZGRlZCBkZWZpbml0aW9uLgorCShFU0NBUEVTLCBTVFJJTkdfTElNSVQsIFNUUklOR19BU01fT1AsIEFTTV9PVVRQVVRfTElNSVRFRF9TVFJJTkcpOgorCShBU01fT1VUUFVUX0FTQ0lJKTogIEdlbmVyaWMgc3ZyNCBkZWZpbml0aW9ucyBhZGRlZC4KKworCSogbTY4a3Y0LmggKENQUF9QUkVERUZJTkVTKTogIERvbid0IGRlZmluZSBTVlI0LgorCSogc3BhcmN2NC5oIChDUFBfUFJFREVGSU5FUyk6ICBEb24ndCBkZWZpbmUgU1ZSNC4KKwkoQVNNX09VVFBVVF9BU0NJSSk6IERlbGV0ZWQgb2Jzb2xldGUgZGVmaW5pdGlvbi4KKworCSogeG0tc3ZyNC5oIChTVlI0KTogIFJlbW92ZWQgdXNlbGVzcyBkZWZpbml0aW9uLgorCShQT1NJWCk6ICBBZGRlZCBkZWZpbml0aW9uIGZvciBwcm90b2l6ZS5jLgorCisJKiBpODYwYi5oIChBU0NJSV9EQVRBX0FTTV9PUCwgQVNNX09VVFBVVF9BU0NJSSk6IE1vdmVkIGZyb20gaTg2MC5oLgorCSogaTg2MHYzLmggKEFTQ0lJX0RBVEFfQVNNX09QKTogIEFkZGVkIE9TLXNwZWNpZmljIGRlZmluaXRpb24uCisJKiBpODYwdjQuaCAoQVNDSUlfREFUQV9BU01fT1AsIEFTTV9PVVRQVVRfQVNDSUkpOgorCURlbGV0ZWQgKG5vdyBpbiBzdnI0LmgpLgorCisJKiBmaXhpbmMuc3ZyNDogIFJlcGxhY2VkIGFsbCBvY2N1cmFuY2VzIG9mIHsxLFx9IGluIHNlZCBjb21tYW5kCisJc3RyaW5nIHdpdGggZnVuY3Rpb25hbCBlcXVpdmFsZW50cyAodG8gYXZvaWQgYm9ndXMgcmVzdWx0cykuCisKKwkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBQYXNzIHRocnUgZXNjYXBlZCB4LCBhLCBhbmQgdiBpZiAtdHJhZGl0aW9uYWwuCisJKHJlYWRlc2NhcGUpOiBQZWRhbnRpYyB3YXJuaW5nIGZvciBcPywgXCgsIFx7LCBhbmQgXFsuCisKKwkqIGR3YXJmb3V0LmM6IFVwZGF0ZWQgY29weXJpZ2h0LgorCShmdW5kYW1lbnRhbF90eXBlX2NvZGUpOiAgQWJvcnQgZm9yIGFsbCBub24tZnVuZGFtZW50YWwgdHlwZXMuCisJKHR5cGVfaXNfZnVuZGFtZW50YWwpOiAgUmV0dXJuIDAgZm9yIGFsbCBub24tZnVuZGFtZW50YWwgdHlwZXMuCisJKGNvbnRhaW5pbmdfdHlwZV9hdHRyaWJ1dGUsIG91dHB1dF9wdHJfdG9fbWJyX3R5cGVfZGllKTogTmV3IGZ1bmN0aW9ucy4KKwkob3V0cHV0X3BvaW50ZXJfdHlwZV9kaWUsIG91dHB1dF9yZWZlcmVuY2VfdHlwZV9kaWUpOiAgQWRkZWQgY2FsbHMgdG8KKwllcXVhdGVfdHlwZV9udW1iZXJfdG9fZGllX251bWJlci4KKwkob3V0cHV0X3R5cGUpOiAgSGFuZGxlIE9GRlNFVF9UWVBFIGNvcnJlY3RseS4KKwkob3V0cHV0X3R5cGUpOiAgSWdub3JlIExBTkdfVFlQRSAoZm9yIG5vdykuCisKK1dlZCBKYW4gMTUgMDk6MzA6MDggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBBbGwgY3AtKiBmaWxlczogUmVtb3ZlIGNhbGxzIHRvIGBjbGVhbnVwX2FmdGVyX2NhbGwnLgorCisJKiBjcC1tZXRob2QuYyAoZm5kZWNsX2FzX3N0cmluZyk6IEFkZCBhIG1pc3Npbmcgc3BhY2Ugd2hlbiBwcmludGluZworCXRoZSByZXR1cm4gdHlwZS4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogVHJlYXQgYXJyYXlzIHNwZWNpYWxseSBpbiBib3RoCisJSU5JVF9FWFBSIGFuZCBOT1BfRVhQUiBjYXNlcy4gIEFsc28sIGlmIHdlIHRha2UgdGhlIGFkZHJlc3MgTkVXUkhTCisJd2hlbiBpdCdzIG5vdCBhIFNBVkVfRVhQUiwgYnVpbGQgYSBuZXcgTkVXUkhTIHVzaW5nIHRoYXQgYWRkcmVzcy4gCisJKiBjcC10cmVlLmMgKGx2YWx1ZV9wKTogSGFuZGxlIFdJVEhfQ0xFQU5VUF9FWFBSIGNhc2UuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBEb24ndCBnZXQgdHJpcHBlZCB1cCBieSBzdGF0aWMgY2xhc3MKKwltZW1iZXJzIG9mIGluY29tcGxldGUgdHlwZS4KKworV2VkIEphbiAxNSAwOToxMjo1MSAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhdyBhdCB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIG02OGsuYyAobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IFJlLWVuYWJsZSBjb2RlIHdoaWNoIHdhcworCW1pc3Rha2VubHkgI2lmZGVmJ2Qgb3V0LgorCitXZWQgSmFuIDE1IDA4OjEyOjE4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBDaGVjayBmb3IgaW5zbiBub3QgcmVjb2duaXplZC4KKworCSogY2FsbGVyLXNhdmUuYyAocmVnX3tzYXZlLHJlc3RvcmV9X2NvZGUpOiBOZXcgdmFyaWFibGVzLgorCShpbml0X2NhbGxlcl9zYXZlKTogU2V0IHRoZW0uCisJKGluc2VydF9zYXZlX3Jlc3RvcmUpOiBKdXN0IG1ha2UgU0VUIGZvciBwYXR0ZXJuIG9mIGluc24gYW5kIHNldAorCWNvZGUgZnJvbSByZWdfe3NhdmUscmVzdG9yZX1fY29kZS4KKwkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogUHV0IHJlc3RvcmUgaW5zbnMgYmVmb3JlIEpVTVBfSU5TTiB0aGF0CisJZW5kcyBiYXNpYyBibG9jaywgYnV0IGFmdGVyIGFueSBvdGhlciBpbnNuIHRoYXQgZW5kcyB0aGUgYmxvY2suCisKKwkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogVHJlYXQgKG1lbSAocmVnIFNQKSkgdGhlIHNhbWUKKwlhcyAobWVtIChyZWcgRlApKS4KKworCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcyk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCShlbWl0X2RlbGF5X3NlcXVlbmNlcyk6IFVwZGF0ZSBjaGFpbiBjb3JyZWN0bHkgd2hlbiBwcmV2aW91cyBvcgorCW5leHQgaW5zbiBpcyBhbHNvIGEgU0VRVUVOQ0UuCisKK1dlZCBKYW4gMTUgMDg6MTA6MjkgMTk5MiAgQ2hyaXMgU21pdGggIChja3MgYXQgYmFjaC5jb252ZXguY29tKQorCisJKiB0LWNvbnZleDogVXNlIGNvbGxlY3QyIHRvIGxpbmsuCisJKiBjb252ZXguaDogcmVtb3ZlIGFzc2VtYmx5IG91dHB1dCBkZWZpbmVzIGZvciBvbGQgY29sbGVjdDIuCisJKiBjb252ZXguaDogZGVmaW5lIHZwcmludGYgYW5kIHdhaXQgbWFjcm9zIGZvciBwY2MgbW9kZSBib290IG9mCisJY29sbGVjdDIuCisKKwkqIGNvbnZleC5oIChBU01fT1VUUFVUX0RPVUJMRV9JTlQpOiBkZWZpbmUuCisKKwkqIGNvbnZleC5oIChERUZBVUxUX0dEQl9FWFRFTlNJT05TKTogZGVmaW5lIGFzIDAgdW50aWwgR0RCIHZlcnNpb24gNAorCXBvcnQgaXMgYXZhaWxhYmxlLgorCisJKiBjb252ZXguYyAoYXBfcmVsb2FkX25lZWRlZCk6IEZpeCBjb21tZW50LgorCitXZWQgSmFuIDE1IDA3OjA4OjI1IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmggKENPTlNUX1NFQ1RJT05fRlVOQ1RJT04pOiBUcml2aWFsIGRlZmluaXRpb24gZm9yIHRhcmdldHMKKwlub3QgYmFzZWQgb24gc3ZyWzM0XS5oIChtODhrLWx1bmEpLgorCisJKiBtODhrLmggKFBSRURJQ0FURV9DT0RFUyk6IFVzZSBpdC4KKworCSogbTg4ay5tZCAoY2FzZXNpX2VudGVyKTogRG9uJ3QgdXNlIGJzci5uIHdpdGggLWZuby1kZWxheWVkLWJyYW5jaC4KKwkqIG04OGsuaCAoQVNNX09VVFBVVF9DQVNFX0VORCk6IFRoZSBsZGEgZ29lcyBoZXJlIHdoZW4gYnNyIGlzIHVzZWQuCisKKwkqIG04OGsuYyAobGVnaXRpbWl6ZV9hZGRyZXNzKTogV2hlbiBjb252ZXJ0aW5nIGEgc3ltYm9sX3JlZiBmb3IKKwlQSUMsIGFkZCBhIFJFR19FUVVBTCBub3RlLgorCitXZWQgSmFuIDE1IDA2OjIyOjM0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lciBhdCBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDguCisJKGZjbXBfb3ApOiBBZGQgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisJKFRBUkdFVF9GTE9BVDY0KTogU3VwcG9ydCBmb3IgLW1mcDY0IHN3aXRjaCB0byBzdXBwb3J0IHRoZSBSNDAwMCBGUgorCXBzdyBiaXQsIHdoaWNoIGRvdWJsZXMgdGhlIG51bWJlciBvZiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IExpa2V3aXNlLgorCShIQVJEX1JFR05PX05SRUdTKTogTGlrZXdpc2UuCisJKENMQVNTX0ZDTVBfT1ApOiBOZXcgYml0IGZvciBjbGFzc2lmaW5nIGZsb2F0aW5nIHBvaW50IGNvbXBhcmVzLgorCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgY21wMl9vcCBhbmQgZmNtcF9vcCBzdXBwb3J0LgorCisJKiBtaXBzLmMgKHZhcmlvdXMpOiBNb3ZlIGV4dGVybiBkZWNsYXJhdGlvbnMgZnJvbSBpbnNpZGUgb2YKKwlmdW5jdGlvbnMgdG8gb3V0c2lkZSBhbGwgZnVuY3Rpb25zLgorCShmY21wX29wKTogTWF0Y2ggY29tcGFyaXNvbiBvcGVyYXRvcnMgZm9yIGZsb2F0aW5nIHBvaW50LgorCShtaXBzX21vdmVfMndvcmRzKTogQWRkIC1tZnA2NCBzdXBwb3J0LgorCShvdmVycmlkZV9vcHRpb25zKTogTGlrZXdpc2UuCisJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IExpa2V3aXNlLgorCShvdmVycmlkZV9vcHRpb25zKTogU2V0IHVwIGZvciBmY21wX29wLgorCShnZW5fY29uZGl0aW9uYWxfYnJhbmNoKTogUmVkbyBmbG9hdGluZyBwb2ludCBjb21wYXJlcy9icmFuY2hlcywgc28KKwl0aGF0IGl0IGlzIGxpa2UgdGhlIHJlc3Qgb2YgdGhlIGNvbXBpbGVyIGV4cGVjdHMgLS0gc2V0IGNjMCB0byBhCisJY29tcGFyZSBvcGVyYXRvciwgaW5zdGVhZCBvZiB0aGUgZXhhY3QgdGVzdCByZXF1aXJlZCwgYW5kIHB1dCB0aGUKKwlzbWFydHMgaW4gdGhlIGJyYW5jaCBvcGVyYXRvcnMgdG8gZ2VuZXJhdGUgYm90aCB0aGUgdGVzdCBhbmQgdGhlCisJYnJhbmNoLgorCisJKiBtaXBzLm1kIChjbXBkZl9lcSwgY21wZGZfbHQsIGNtcGRmX2xlKTogRGVsZXRlLgorCShjbXBzZl9lcSwgY21wc2ZfbHQsIGNtcHNmX2xlKTogRGVsZXRlLgorCShjbXBkZl9pbnRlcm5hbCk6IE5ldyBkZWZpbmUgaW5zbiB0byBtYXRjaCBGUCBjb21wYXJlcy4KKwkoY21wc2ZfaW50ZXJuYWwpOiBMaWtld2lzZS4KKwkoYnJhbmNoX2ZwX3RydWUxLCBicmFuY2hfZnBfdHJ1ZTIpOiBMaWtld2lzZS4KKwkoYnJhbmNoX2ZwX2ZhbHNlMSwgYnJhbmNoX2ZwX2ZhbHNlMik6IExpa2V3aXNlLgorCShicmFuY2hfZnBfdHJ1ZSwgYnJhbmNoX2ZwX2ZhbHNlKTogTmV3IGRlZmluZV9pbnNucyB0byBtYXRjaCB0aGUKKwlicmFuY2ggcGFydCBvZiBGUCBjb21wYXJlcy4KKworV2VkIEphbiAxNSAwMTo0MjozOSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IE5ldyBwYXJhbWV0ZXIgY29weV9ub3Rlc19mcm9tLCB0bworCWNvcnJlY3QgcHJvYmxlbSB3aXRoIGJhZCBkZWJ1ZyBpbmZvIGdlbmVyYXRlZCBmb3IgcHJlY29uZGl0aW9uZWQKKwlsb29wcy4KKwkodW5yb2xsX2xvb3BzKTogRml4IGNhbGxzIG9mIGNvcHlfbG9vcF9ib2R5IHRvIHBhc3MgbmV3IHBhcmFtZXRlci4KKworV2VkIEphbiAxNSAwMTowMTozOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChtYWluKTogRG9uJ3QgdXNlIFRBUkdFVF9WRVJTSU9OLgorCShlbmRmaWxlX3NwZWMsIHN3aXRjaGVzX25lZWRfc3BhY2VzKTogTmV3IHZhcnMsIGluaXR0ZWQgZnJvbSBtYWNyb3MuCisJKHNldF9zcGVjLCBwcm9jZXNzX2NvbW1hbmQpOiBSZWFkIGFuZCB3cml0ZSB0aG9zZSB2YXJzLgorCShkb19zcGVjXzEsIHByb2Nlc3NfY29tbWFuZCk6IFVzZSB0aGUgbmV3IHZhcnMsIG5vdCB0aGUgbWFjcm9zLgorCShTV0lUQ0hFU19ORUVEX1NQQUNFUyk6IE5ldyBkZWZhdWx0IG1hY3JvIGRlZmluaXRpb24uCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgZHJpdmVyIGFzIGdjYy0kKHRhcmdldCkuCisKKwkqIGdzdGRkZWYuaCAod2NoYXJfdCk6IENoZWNrIGZvciBfVF9XQ0hBUi4KKworCSogc3RtdC5jIChwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBSZXR1cm4gNSBpZiBqdW1wIGludG8gc3RhY2sgbGV2ZWwuCisJKiBjLXBhcnNlLnksIG9iamMtcGFyc2UueSAoc3RtdCk6IFByaW50IGVycm9yIG1zZyBmb3IgdGhhdC4KKwkqIGNwLXBhcnNlLnk6IExpa2V3aXNlLgorCitUdWUgSmFuIDE0IDIzOjI1OjM3IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYzogSW5jbHVkZSA8c3RyaW5nLmg+IGlmIFVTRyAqb3IqIFBPU0lYLgorCShUUkVFX1VJRCk6IERlbGV0ZWQuCisJKGN1cnJlbnRfZnVuY2RlZl9udW1iZXIpOiBSZXBsYWNlbWVudCBmb3IgVFJFRV9VSUQuCisJKGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6ICBJbmNyZW1lbnQKKwljdXJyZW50X2Z1bmNkZWZfbnVtYmVyIGFmdGVyIGVhY2ggZnVubmN0aW9uIGRlZmluaXRpb24gaXMgcHJvY2Vzc2VkLgorCShwZW5kaW5nX3NpYmxpbmdfc3RhY2tfZGVwdGgpOiBSZW5hbWVkIGdsb2JhbGx5IHRvIHBlbmRpbmdfc2libGluZ3MuCisJKHBlbmRpbmdfc2libGluZ19zdGFja19zaXplKTogUmVuYW1lZCB0byBwZW5kaW5nX3NpYmxpbmdzX2FsbG9jYXRlZC4KKwkoUEVORElOR19TSUJMSU5HX1NUQUNLX0lOQ1JFTUVOVCk6IFJlbmFtZWQgUEVORElOR19TSUJMSU5HU19JTkNSRU1FTlQuCisJKHBlbmRpbmdfdHlwZXNfbGlzdCwgcGVuZGluZ190eXBlc19hbGxvY2F0ZWQsIHBlbmRpbmdfdHlwZXMsCisJUEVORElOR19UWVBFU19JTkNSRU1FTlQsIGZha2VfY29udGFpbmluZ19zY29wZSk6IE5ldyB2YXJzL21hY3Jvcy4KKworCSogZHdhcmZvdXQuYyAodG90YWxfZnRfZW50cmllcyk6IFJlbmFtZWQgdG8gZnRfZW50cmllc19hbGxvY2F0ZWQuCisJKHZhbGlkX2Z0X2VudHJpZXMpOiBSZW5hbWVkIHRvIGZ0X2VudHJpZXMuCisJKEZUX0VOVFJJRVNfSU5DUkVNRU5UKTogIERlZmluaXRpb24gYWRkZWQuCisJKGxvb2t1cF9maWxlbmFtZSk6ICBFeHBhbmQgZmlsZW5hbWUgdGFibGUgKHdoZW4gbmVlZGVkKQorCWJ5IGFkZGluZyBGVF9FTlRSSUVTX0lOQ1JFTUVOVCBtb3JlIHRhYmxlIGVsZW1lbnRzIHJhdGhlciB0aGFuCisJZG91YmxpbmcgY3VycmVudCBzaXplLgorCShkd2FyZm91dF9pbml0KTogIEFsbG9jYXRlIGluaXRpYWwgZmlsZW5hbWUgdGFibGUuCisKKwkqIGR3YXJmb3V0LmMgKElOU05fTEFCRUxfRk1ULCBGVU5DX0VORF9MQUJFTF9GTVQpOiBVc2UgZGVjaW1hbCBmb3JtYXQuCisKKwkqIGR3YXJmb3V0LmMgKG1lbWJlcl9hdHRyaWJ1dGUpOiAgUmV3cml0dGVuIGZvciBwcm9wZXIgQysrIHN1cHBvcnQuCisJKG91dHB1dF9hcnJheV90eXBlX2RpZSwgb3V0cHV0X3NldF90eXBlX2RpZSwgb3V0cHV0X2VudHJ5X3BvaW50X2RpZSwKKwlvdXRwdXRfZW51bWVyYXRpb25fdHlwZV9kaWUsIG91dHB1dF9nbG9iYWxfc3Vicm91dGluZV9kaWUsCisJb3V0cHV0X2dsb2JhbF92YXJpYWJsZV9kaWUsIG91dHB1dF9pbmxpbmVfc3Vicm91dGluZV9kaWUsCisJb3V0cHV0X2xvY2FsX3ZhcmlhYmxlX2RpZSwgb3V0cHV0X21lbWJlcl9kaWUsIG91dHB1dF9wb2ludGVyX3R5cGVfZGllLAorCW91dHB1dF9yZWZlcmVuY2VfdHlwZV9kaWUsIG91dHB1dF9zdHJpbmdfdHlwZV9kaWUsCisJb3V0cHV0X3N0cnVjdHVyZV90eXBlX2RpZSwgb3V0cHV0X2xvY2FsX3N1YnJvdXRpbmVfZGllLAorCW91dHB1dF9zdWJyb3V0aW5lX3R5cGVfZGllLCBvdXRwdXRfdHlwZWRlZl9kaWUsIG91dHB1dF91bmlvbl90eXBlX2RpZSk6CisJQWRkZWQgY2FsbHMgdG8gbWVtYmVyX2F0dHJpYnV0ZSAoZm9yIEMrKykuCisKKwkqIGR3YXJmb3V0LmMgKGlubGluZV9hdHRyaWJ1dGUpOiAgVGVzdCBmb3IgVFJFRV9JTkxJTkUgaW4gaGVyZS4KKwkob3V0cHV0X2dsb2JhbF9zdWJyb3V0aW5lX2RpZSwgb3V0cHV0X2xvY2FsX3N1YnJvdXRpbmVfZGllKToKKwlEb24ndCB0ZXN0IGZvciBUUkVFX0lOTElORSBoZXJlLgorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfZm9ybWFsX3R5cGVzKTogIEZpeGVkIHRvIGhhbmRsZSBNRVRIT0RfVFlQRQorCW5vZGVzIGFuZCB0byBvdXRwdXQgYWxsIHJlbGF0ZWQgdHlwZSBESUVzIGxhc3QgKGZvciBTREIpLgorCSh0eXBlX29rX2Zvcl9zY29wZSwgb3V0cHV0X3BlbmRpbmdfdHlwZXNfZm9yX3Njb3BlLCBwZW5kX3R5cGUpOgorCUZ1bmN0aW9ucyBhZGRlZCB0byBzdXBwb3J0IEMrKy4KKwkob3V0cHV0X3R5cGUsIG91dHB1dF9kZWNsKTogIEFkZGVkIGBjb250YWluaW5nX3Njb3BlJworCXBhcmFtZXRlciB0byBoYW5kbGUgQysrIG5lc3RlZCB0eXBlcy4KKwkob3V0cHV0X3R5cGUpOiAgRG9uJ3Qgb3V0cHV0IHRoZSB0eXBlIHVubGVzcyBpdCdzIE9LCisJZm9yIHRoZSBjdXJyZW50IERJRSBjaGFpbiAoaS5lLiB1bmxlc3MgaXQncyBPSyBmb3IgdGhlIGN1cnJlbnQgc2NvcGUpLgorCShvdXRwdXRfdHlwZSk6ICBPdXRwdXQgY29tcGxldGVkIG5vbi1nbG9iYWwgdGFnZ2VkIHR5cGVzCisJcmlnaHQgYXdheSBldmVuIGlmIG5vdCBmaW5hbGl6aW5nLgorCShvdXRwdXRfdHlwZSk6ICBVc2UgY29ycmVjdCBtZXRob2QgdG8gZ2V0IGhlYWQgb2YgY2hhaW4KKwlvZiBDKysgZnVuY3Rpb24gbWVtYmVycy4KKwkob3V0cHV0X2RlY2wpOiAgU2tpcCBmaXJzdCBpdGVtIG9uIGNoYWluIG9mIERFQ0xfQVJHVU1FTlRTCisJZm9yIGEgRlVOQ1RJT05fREVDTCB3aG9zZSB0eXBlIGlzIGEgTUVUSE9EX1RZUEUuCisJU3VwcHJlc3Mgb3V0cHV0IG9mIHR5cGUgRElFcyBmb3IgZm9ybWFsIHBhcm1zIG9mIGEgRlVOQ1RJT05fREVDTAorCXVudGlsIGFmdGVyIGFsbCBUQUdfcGFyYW1ldGVyIERJRXMgaGF2ZSBiZWVuIG91dHB1dCAoZm9yIFNEQgorCWNvbXBhdGFiaWxpdHkpLgorCU91dHB1dCBESUVzIGZvciBhbnkgTEFCRUxfREVDTCBub2RlcyBhdHRhY2hlZCB0byBvdXRlcm1vc3QgQkxPQ0sgb2YKKwlhIEZVTkNUSU9OX0RFQ0wuCisJSGFuZGxlIExBQkVMX0RFQ0wgbm9kZXMuCisKKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6ICBVbi1wZW5kIGFsbCBwZW5kaW5nIGZpbGUtCisJc2NvcGUgdHlwZXMgYWZ0ZXIgZWFjaCBmaWxlLXNjb3BlIGRlY2xhcmF0aW9uIGlzIG91dHB1dC4KKwkob3V0cHV0X2RlY2xzX2Zvcl9zY29wZSk6ICBVbi1wZW5kIGFsbCBwZW5kaW5nIGxvY2FsIHR5cGVzCisJYXQgZW5kIG9mIGVhY2ggbG9jYWwgc2NvcGUuCisKK1R1ZSBKYW4gMTQgMTY6NDA6MzkgMTk5MiAgVGltIE1vb3JlICAobW9vcmUgYXQgZmFzdC5jcy51dGFoLmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJZiBBUkdTX0dST1dfRE9XTldBUkQsIG1ha2Ugc2xvdF9vZmZzZXQKKwluZWdhdGl2ZSBhbmQgc2V0IGhpZ2hlc3Rfb3V0Z29pbmdfYXJnX2luX3VzZSB0byBuZWVkZWQgKyAxLgorCShzdG9yZV9vbmVfYXJnKTogSWYgQVJHU19HUk9XX0RPV05XQVJEIGRlYWwgd2l0aCBuZWdhdGl2ZSBzbG90X29mZnNldC4KKworVHVlIEphbiAxNCAyMDowMTo1OSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmggKFRBUkdFVF9TVU5fQVNNLCBUQVJHRVRfR05VKTogRGVsZXRlIHN1cHBvcnQgZm9yCisJb2Jzb2xldGUgYW5kIHVuZG9jdW1lbnRlZCBmbGFncyAtbXN1bi1hc20gYW5kIC1tZ251LgorCSogc3BhcmMubWQ6IExpa2V3aXNlLgorCitUdWUgSmFuIDE0IDE5OjM2OjIxIDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlIGF0IGZhc3QuY3MudXRhaC5lZHUpCisKKwkqIHhtLWhwODAwLmggKGhwdXg4KTogZGVmaW5lLgorCSogaHA4MDAuaCAoTElOS19TUEVDKTogQ29uZGl0aW9uYWxpemUgb24gaHB1eDguCisJKFNUQUNLX0JPVU5EQVJZKTogRGVmaW5lIGZvciBzbmFrZS4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IFNoaWZ0IHJlZ2lzdGVyIGlzIHNwZWNpYWwuCisJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IERvbid0IGFsbG93IG1vZGVzIHNtYWxsZXIgdGhhdCBTSW1vZGUgaW4gZnAKKwlyZWdpc3RlcnMuCisJKHJlZ19jbGFzcywgUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMpOiBFbGltaW5hdGUKKwlHRU5FUkFMX09SX0ZQX1JFR1MsIEdFTkVSQUxfT1JfU05BS0VfRlBfUkVHUyBjbGFzc2VzLgorCShGVU5DVElPTl9BUkcpOiBIYW5kbGUgc25ha2UgZnAgYXJndW1lbnRzLgorCShBU01fRE9VQkxFX0FSR19ERVNDUklQVE9SUyk6IGRlZmluZS4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IFVzZSBhYm92ZSBtYWNybyB0byBnZXQgYXJvdW5kIGhwdXgKKwk4LjAgY2hhbmdlLgorCSogaHA4MDAubWQgKG1vdnNpLCBtb3ZkaSk6IEFkZCAhIGFuZCAqIHRvIGNvbnN0cmFpbnRzIG9mIGFub255bW91cworCWRlZmluZS1pbnNucyB0byBkaXNjb3VyYWdlIFNJbW9kZSB2YWx1ZXMgaW4gZnAgcmVnaXN0ZXJzLiBEb24ndAorCW1vZGlmeSB0aGUgc3RhY2sgcG9pbnRlciB3aGVuIG1vdmluZyBiZXR3ZWVuIGdlbmVyYWwgYW5kIGZwIHJlZ2lzdGVycy4KKwkobXVsc2kpOiBUYWtlIG91dCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhIGRlZ2VuZXJhdGUgbXVsdGlwbGljYXRpb24KKwlieSAxOyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgbmVlZGVkIGFuZCBjYXVzZXMgcHJvYmxlbXMuCisJKHNhcl9zdWIpOiBDaGFuZ2Ugc28gdGhhdCBjb25zdF9pbnQgaXNuJ3QgdGhlIGZpcnN0IGFyZ3VtZW50IG9mCisJdGhlIGNvbXBhcmlzb24uCisJKiBocDgwMC5jIChvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBBcyBhYm92ZSwgZG9uJ3QgbW9kaWZ5IHRoZQorCXN0YWNrIHBvaW50ZXIgd2hlbiBtb3ZpbmcgYmV0d2VlbiBnZW5lcmFsIGFuZCBmcCByZWdpc3RlcnMuIAorCShvdXRwdXRfYmxvY2tfbW92ZSk6IERvbid0IG1ha2Ugb25lIENPTlNUX0lOVCBydHggYW5kIHN0b3JlCisJZGlmZmVyZW50IGludGVnZXIgdmFsdWVzIGluIGl0OyBjb25zIHVwIGEgIm5ldyIgb25lIGZvciBlYWNoIHZhbHVlLgorCShvdXRwdXRfZmxvYXRzaXNmMiwgb3V0cHV0X2Zsb2F0c2lkZjIpOiBGaXggdHlwb3MuCisJKG91dHB1dF9hcmdfZGVzY3JpcHRvcik6IENvbmRpdGlvbmFsaXplIGZvciBIUFVYIDguMC4KKworVHVlIEphbiAxNCAxNDozODowOSAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IENhbGwgcmVhZG9ubHlfd2FybmluZ19vcl9lcnJvciBpZgorCUFSRyBpcyBUUkVFX1JFQURPTkxZIChpbiBhZGRpdGlvbiB0byB0aGUgdHlwZSBiZWluZyBUWVBFX1JFQURPTkxZKS4KKworCSogY3AtaW5pdC5jIChtYXliZV9hZGp1c3RfYWRkcl9mb3JfZGVsZXRlKTogSWYgdGhlIGFkanVzdG1lbnQgbmVlZHMKKwl0byBiZSBkb25lLCB6ZXJvIG91dCB0aGUgc3RvcmFnZSB0aGF0IGhlbGQgcGFydCBvZiB0aGUgY29va2llLgorCitUdWUgSmFuIDE0IDEzOjEyOjQ4IDE5OTEgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogYy1kZWNsLmMgKHBvcGxldmVsKTogIFNldCBUWVBFX0NPTlRFWFQgZm9yIGVhY2ggdGFnZ2VkIHR5cGUKKwlleGNlcHQgaW5zaWRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHBhcm0gbGlzdC4KKwkoZ3Jva2RlY2xhcmF0b3IpOiAgU2V0IFRZUEVfQ09OVEVYVCBmb3IgdGFnZ2VkIHR5cGUgaW4gZGVjbCBwYXJtIGxpc3QuCisJKHB1c2h0YWcpOiAgRG9uJ3Qgc2V0IFRZUEVfQ09OVEVYVCBmb3IgdGFnZ2VkIHR5cGVzIGhlcmUuCisKK1R1ZSBKYW4gMTQgMDY6NDY6MzcgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2xvYmFsLWFsbG9jLmMgKGdsb2JhbF9hbGxvYyk6IENvdW50IG11bHRpLXdvcmQgcHNldWRvcyBjb3JyZWN0bHkKKwlpbiBsb2NhbF9yZWdfbl9yZWZzLgorCShmaW5kX3JlZyk6IEV2aWN0IHBzZXVkb3MgdGhhdCBvdmVybGFwIHRoZSByZWdpc3RlciB3ZSB0YWtlLCBub3QganVzdAorCXRoYXQgc3RhcnQgd2l0aCB0aGF0IHJlZ2lzdGVyLgorCisJKiBhMjlrLmMgKGEyOWtfZGVidWdfcmVnX21hcCk6IE5ldyB2YXJpYWJsZS4KKwkob3V0cHV0X3Byb2xvZ3VlKTogSW5pdGlhbGl6ZSBpdC4KKwkqIGEyOWsuaCAoREJYX1JFR0lTVEVSX05VTUJFUik6IFVzZSB0aGF0IG1hcC4KKworCSogdWx0cml4LmggKFdDSEFSX1RZUEUpOiBNYWtlIGRlZmluaXRpb24gYmUgYSBrbm93biB0eXBlLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBDYWxsIERCUl9PVVRQVVRfU0VRRU5EIGJlZm9yZSB3ZQorCWNsZWFyIGBmaW5hbF9zZXF1ZW5jZScsIHNvIGl0IGNhbiBjYWxsIGRicl9zZXF1ZW5jZV9sZW5ndGguCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2xlYXIgaW5zbl9uZWVkcyBvbmNlIHdlIGtub3cgd2UgaGF2ZQorCXJlbG9hZHMsIGluc3RlYWQgb2YgYWx3YXlzLgorCURvbid0IHNraXAgcHJvY2Vzc2luZyBvZiByZWxvYWRzIGZvciBDQUxMX0lOU05zIHdoZW4gY2FsbGVyLXNhdmUKKwluZWVkcyBhIHNwaWxsIHJlZ2lzdGVyLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzLCBjYXNlIFJFVFVSTik6IEluc2VydCBtaXNzaW5nIHRlc3QgZm9yIGdsb2JhbAorCXJlZ2lzdGVycy4KKworCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcyk6IE1hcmsgYXNtJ3MgYXMgdm9sYXRpbGUKKwl3aGVuIGFwcHJvcHJpYXRlLgorCisJKiBpbnRlZ3JhdGUuaCAoc3RydWN0IGlubGluZV9yZW1hcCk6IE5ldyBmaWVsZCBjb25zdF9lcXVpdl9tYXBfc2l6ZS4KKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IGl0OyBtYWtlIGxhcmdlciBtYXAuCisJKHN1YnN0X2NvbnN0YW50cyk6IERvbid0IHJlZmVyZW5jZSBvdXQtb2YtcmFuZ2UgZW50cnkgaW4gZXF1aXYgbWFwLgorCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogU2V0IGNvbnN0X2VxdWl2X21hcF9zaXplLgorCitTZWUgQ2hhbmdlTG9nLjQgZm9yIGVhcmxpZXIgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuNiBiL2djYy9DaGFuZ2VMb2cuNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQ5ZGUwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL0NoYW5nZUxvZy42CkBAIC0wLDAgKzEsODE3MyBAQAorCitTYXQgT2N0IDMxIDE1OjE5OjU0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAyLjMgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWxpYm9iamMpOiBOZXcgdGFyZ2V0LgorCSgkKHNyY2RpcikvZ2NjLmR2aSwgJChzcmNkaXIpL2NwcC5kdmkpOiBOZXcgdGFyZ2V0cy4KKwkoZXh0cmFjbGVhbik6IHJtICpkaWZmLCAqbG9zZSwgY29uZmlnLypsb3NlLgorCShtb3N0bHljbGVhbik6IHJtIGNvbmZpZy9jb3JlLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoT0JKQ19TRUxFQ1RPUlNfV0lUSE9VVF9MQUJFTFMpOiBEZWZpbmUgYnkgZGVmYXVsdC4KKworRnJpIE9jdCAzMCAyMDoxMTo1MiAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYuYyAob3V0cHV0X21vdmVfZG91YmxlKTogVW5kbyAxMC8yNSBjaGFuZ2UuICBIYW5kbGUgY2FzZQorCXdoZXJlIHBhcnQgb2YgYSBkZXN0IHJlZyBpcyB1c2VkIGluIGEgc3JjIG1lbSBydHgsIHdpdGhvdXQgdXNpbmcKKwlzdGFjay4KKworRnJpIE9jdCAzMCAxODo1Mjo1NyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIG1laXNzbmVyIHZlcnNpb24gbnVtYmVyIHRvIDI4LgorCisJKiBtaXBzLm1kIChhZGRzaTMsIHN1YnNpMyk6IERvbid0IGFsbG93IC0zMjc2OCBhcyB0aGUgc2Vjb25kCisJb3BlcmFuZCwgdGhlIGFzc2VtYmxlciBjb21wbGFpbnMgaWYgdGhlIGluc3RydWN0aW9uIGZpbGxzIGEgZGVsYXkKKwlzbG90LgorCitGcmkgT2N0IDMwIDE2OjExOjM3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9zaGlmdF9jb25zdCk6CisJRm9yIGEgc3VicmVnLCByZXF1aXJlIHN1YnJlZ19sb3dwYXJ0X3AgYW5kIG5vdCBwYXJhZG94aWNhbC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZml4aW5jbHVkZXMpOiBJZ25vcmUgZGlycyB0aGF0IGRvbid0IGV4aXN0LgorCitUaHUgT2N0IDI5IDIwOjE1OjQ0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3ZhcmFyZ3MuaCwgZ3N0ZGFyZy5oIFs0LjMgbmV0IDJdOiBJZiBfVkFfTElTVF8sIGlzIHVuZGVmaW5lZAorCXRoZW4gdmFfbGlzdCBpcyBhbHJlYWR5IGRlY2xhcmVkLgorCisJKiBpMzg2Z2FzLmggKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCwgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCk6IAorCU92ZXJyaWRlLCBpZiBOT19VTkRFUlNDT1JFUy4KKworVGh1IE9jdCAyOSAxNzozMDo1MiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXMpOiBNYXJrIEZQIGxpdmUgYXQgZW5kIG9mIGZ1bmN0aW9uLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBJZiBGUCB3YXMgZWxpbWluYXRlZCwgcmVtb3ZlIGl0IGZyb20KKwliZWluZyBsaXZlIGluIGFueSBiYXNpYyBibG9jay4KKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9wb29sKTogTGFiZWxzIGNhbiBiZSBkZWxldGVkIGJ5IGJlaW5nCisJdHVybmVkIGludG8gTk9URXMsIG5vdCBqdXN0IGhhdmUgSU5TTl9ERUxFVEVEX1AuCisKK1RodSBPY3QgMjkgMTY6MTU6NDcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkYXJnLmg6IFVzZSBfQU5TSV9TVERBUkdfSF8sIG5vdCBfQU5TSV9TVERBUkdfSC4KKworCSogZ3N0ZGRlZi5oIFs0LjMgbmV0IDJdOiBJZiBfU0laRV9UXywgZXRjLiBhcmUgdW5kZWZpbmVkCisJdGhlbiB0eXBlIGlzIGFscmVhZHkgZGVjbGFyZWQuCisKKwkqIG02OGsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKSBbTU9UT1JPTEEgIVNHU106CisJRG9uJ3Qgc3VidHJhY3QgMiBpbiB0aGUgYWRkcmVzcyBkaXNwbGFjZW1lbnQuCisKK1RodSBPY3QgMjkgMTQ6MzY6MjMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGxpYmdjYzIuYyAoX19idWlsdGluX3ZlY19uZXcpOiAjdW5kZWYgTlVMTCBiZWZvcmUgaW5jbHVkaW5nCisJc3RkaW8uaCB0byBwcmV2ZW50IHJlZGVjbGFyYXRpb24gbWVzc2FnZS4KKwkocHlyYW1pZCBfX2VuYWJsZV9leGVjdXRlX3N0YWNrKTogRGl0dG8uCisKKwkqIGkzODZyb3NlLmggKFlFU19VTkRFUlNDT1JFUyk6IERlZmluZS4KKwkoQVNNX09VVFBVVF9MQUJFTFJFRik6IERvbid0IHJlZGVmaW5lLgorCisJKiBtaXBzLmggKEFTTV9GSU5BTF9TUEVDKTogSWYgY3Jvc3MgY29tcGlsaW5nLCBkb24ndCBpbnZva2UKKwltaXBzLXRmaWxlIGJ5IGRlZmF1bHQuCisKKwkqIGRlY3Jvc2UuaCAoQVNNX0ZJTkFMX1NQRUMpOiBJZiBjcm9zcyBjb21waWxpbmcsIGRvbid0IGludm9rZQorCW1pcHMtdGZpbGUgYnkgZGVmYXVsdC4KKworCSogbWlwcy10ZHVtcC5jLCBtaXBzLXRmaWxlLmM6ICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgQ1JPU1NfQ09NUElMRQorCWlzIGRlZmluZWQgbW9yZSBncmFjZWZ1bGx5LgorCitUaHUgT2N0IDI5IDEyOjEwOjE2IDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlIGF0IGRlZm1hY3JvLmNzLnV0YWguZWR1KQorCisJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IEZpeCBwYXJlbiBlcnJvciBpbiBpZiBmb3IgSU5ORVIgaXMgcmVnLgorCitUaHUgT2N0IDI5IDEzOjQ5OjAzIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogeG0tbWlwc2JzZC5oOiBSZWFsbHkgZGVsZXRlIGZpbGUuCisKK1RodSBPY3QgMjkgMDI6NDg6MjggMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGR3YXJmb3V0LmMsIGFybS5jLCBtODhrLmM6IEluY2x1ZGUgImFzc2VydC5oIiBpbnN0ZWFkIG9mIDxhc3NlcnQuaD4uCisKK1RodSBPY3QgMjkgMDA6NDM6MDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkZGVmLmggWzQuMyBuZXQgMl06IEZvcmNlIGluY2x1c2lvbiBvZiBhbnNpLmguCisJVW5kZWYgX1NJWkVfVF8sIF9QVFJESUZGX1RfLCBfV0NIQVJfVF8gYXQgZW5kLgorCisJKiBNYWtlZmlsZS5pbiAobGliZ2NjMi5hLCBsaWJnY2MxLmEpOiBVc2UgfHwgdG8gZXhpdCBpZiBjcCBmYWlscy4KKwkoaW5zdGFsbC1mbG9hdC1oLWNyb3NzKTogVXNlIGZpLCBub3QgZG9uZS4KKwlXcml0ZSBmbG9hdC5oIGluICQodG1wZGlyKSwgbm90IGluIGAuJy4KKwkodG1wZGlyKTogTmV3IHZhcmlhYmxlLgorCisJKiBpMzg2Z2FzLmggKE5PX1VOREVSU0NPUkVTKTogVGVzdCB3YXMgYmFja3dhcmRzLgorCShTREJfREVCVUdHSU5HX09VVFBVVCk6IERlZmluZWQuCisKK1dlZCBPY3QgMjggMTY6MzM6MzQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkYXJnLmgsIGd2YXJhcmdzLmg6CisJT24gTmV0IDIgc3lzdGVtLCBkb24ndCB0ZXN0LCBkZWZpbmUgb3IgdW5kZWYgX1ZBX0xJU1RfLgorCVVzZSBfQU5TSV9IXywgX19CU0RfTkVUMl9fIGFuZCBfX19fMzg2QlNEX19fXyB0byB0ZXN0IGZvciB0aGlzLgorCisJKiBpMzg2YnNkLmggKENQUF9QUkVERUZJTkVTKTogQWRkIF9fX18zODZCU0RfX19fLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBBbGxvdyByZWRlY2xhcmluZyBidWlsdGluIGFzIGFueSBzb3J0IG9mIHN0YXRpYy4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY3Jvc3MtdG9vbHMpOiBGaXggdHlwby4KKwkoYWxsLmJ1aWxkKTogRGVwIG9uIHhnY2MgaW5zdGVhZCBvZiAkKEdDQ19QQVNTRVMpLgorCitXZWQgT2N0IDI4IDE1OjI1OjQyIDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKHByaW50X29wZXJhbmQpOiBXaGVuIEFTX0JVR19GTERDUiBpcyBkZWZpbmVkLCB1c2UgYWx0ZXJuYXRlCisJZmxkY3IgZm9ybS4KKwkqIG04OGtkZ3V4LmggKEFTX0JVR19GTERDUik6IERlZmluZSB0byBhY2NvbW9kYXRlIDQuMzAgYXNzZW1ibGVyIGJ1Zy4KKworCSogbTg4a3YzLmggKENQUF9QUkVERUZJTkVTKTogQWRkIC1EdW5peC4KKworCSogbTg4a2RvbHBoLmggKFNEQl9BTExPV19GT1JXQVJEX1JFRkVSRU5DRVMpOiBEb24ndCBvdmVycmlkZS4KKworV2VkIE9jdCAyOCAwNTozNDoxMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBJbiBQTFVTLCBpZiBPUDAgYW5kIE9QMSBhcmUgdGhlCisJc2FtZSwgdXNlIFJFTE9BRFJFRyB3aGVuIGdlbmVyYXRpbmcgdGhlIGFkZGl0aW9uLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBXaGVuIGNvcHlpbmcgbWVtcmVmIGFmdGVyIHdlJ3ZlCisJbWFkZSByZWN1cnNpdmUgY2FsbHMgb24gaXQsIGNvcHkgYW55IHJlcGxhY2VtZW50cyB3ZSBtYWRlLgorCisJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBEb24ndCBzdWJzdGl0dXRlIGFuIGV4cHJlc3Npb24KKwljb250YWluaW5nIGEgcmVnaXN0ZXIgdGhhdCB3aWxsIGJlIGNsb2JiZXJlZCBpbiBJMy4KKworCSogb2JqYy9jb3JlLmMsIG9iamMvaGFzaC5jOiBJbmNsdWRlIHRjb25maWcuaCwgbm90IGNvbmZpZy5oLgorCUluY2x1ZGUgZ3N0ZGFyZy5oLgorCSogb2JqYy9vYmplY3QubTogSW5jbHVkZSB0Y29uZmlnLmgsIG5vdCBjb25maWcuaC4KKwlJbmNsdWRlIGdzdGRhcmcuaCBiZWZvcmUgc3RkaW8uaC4KKwkqIG9iamMvb2JqYy5oOiBEb24ndCBpbmNsdWRlIGdzdGRhcmcuaCBoZXJlLgorCSogb2JqYy9vYmpjLXByb3RvLmggKENMQVNTX0xPQ0FUSU9OX1NISUZUKTogVXNlIEhPU1RfQklUU19QRVJfTE9ORywKKwlub3QgQklUU19QRVJfV09SRC4KKwkoc2V0Q2xhc3NOdW1iZXIsIGdldENsYXNzTnVtYmVyKTogYGluZm8nIGZpZWxkIGlzIGxvbmcsIG5vdCBpbnQuCisKK1dlZCBPY3QgMjggMTA6NTQ6NTAgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGxpYmdjYzIuYyAoTF9jYXBzX25ldyk6IFByb3Blcmx5IGNsb3NlIGNvbW1lbnQuCisKK1dlZCBPY3QgMjggMDU6NTA6MTAgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogcGEubWQgKG11bHNpKTogSW5wdXQgcHJlZGljYXRlcyBiYWNrIHRvIHNyY3NpX29wZXJhbmRzLgorCURvbid0IGhhbmRsZSBjb25zdGFudHMgc3BlY2lmaWNhbGx5IGZvciBUQVJHRVRfU05BS0UsIGJ1dCBjYWxsCisJZm9yY2VfcmVnIHRvIHB1dCB0aGVtIGluIHJlZ2lzdGVycy4KKwkoaW5kZXhlZCBhZGRyZXNzaW5nIG1vZGUgcGF0dGVybnMpOiBSZW1vdmUgdGhlIHBhdHRlcm5zIHdpdGgKKwl1bnNjYWxlZCBpbmRleC4gIFN3aXRjaCBvZmYgcGF0dGVybnMgdGhhdCBuZXZlciBtYXRjaC4KKworCSogbG9uZ2xvbmcuaCAoZmlsZSBoZWFkZXIpOiBBZGQgY29tbWVudCBkZXNjcmliaW5nIHNkaXZfcXJubmQuCisJKF9faHBwYSBzdWJfZGRtbXNzKTogU3dhcCBpbnB1dCBvcGVyYW5kcy4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IENoZWNrIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYXJndW1lbnRzLgorCitXZWQgT2N0IDI4IDAwOjQwOjE4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChpWzM0XTg2LSotc3lzdiopOiBUYWtlIG5vdGUgb2YgJHN0YWJzLgorCSogaTM4Nmdhcy5oIChTREJfREVCVUdHSU5HX0lORk8pOiAjdW5kZWYgZGVsZXRlZC4KKwkoREJYX0RFQlVHR0lOR19JTkZPKTogRGVmaW5pdGlvbiBkZWxldGVkLgorCSogaTM4NmdzdGFicy5oOiBOZXcgZmlsZS4KKworCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogRG9uJ3QgZGVsZXRlIHRtcC1saW1pdHMuaC4KKworCSogaTM4NnZnYXMuaDogRmlsZSBkZWxldGVkLgorCitUdWUgT2N0IDI3IDE1OjM1OjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbGliZ2NjMi5jOiBJbmNsdWRlIHN0ZGlvLmguCisJW19fR05VX0xJQlJBUllfX10gKHdyaXRlKTogRGVmaW5lZC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY3Jvc3MtdG9vbHMpOiBXaGVuIGhhbmRsaW5nICQodG9vbGRpcikvaW5jbHVkZSwKKwlkbyBhbGwgY2QncyBzdGFydGluZyBmcm9tIGJ1aWxkIGRpcmVjdG9yeS4KKworCSogaTM4Nmdhcy5oIChOT19VTkRFUlNDT1JFUyk6IERvbid0IGRlZmluZSwgaWYgWUVTX1VOREVSU0NPUkVTLgorCSogaTM4NmxpbnV4LmggKFlFU19VTkRFUlNDT1JFUyk6IERlZmluZWQuCisKK1R1ZSBPY3QgMjcgMTQ6MTc6NDMgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKGlbMzRdODYtKi1saW51eCk6IFNldCBicm9rZW5faW5zdGFsbC4KKwkqIHgtbGludXggKElOU1RBTEwpOiBEZWxldGUuCisJKiB4LWlyaXMgKElOU1RBTEwpOiBEZWxldGUuCisKK1R1ZSBPY3QgMjcgMTM6Mzk6MjIgMTk5MiAgVGltIE1vb3JlICAobW9vcmVAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5oIChBU01fR0xPQkFMSVpFX0xBQkVMKTogR2l2ZSBmdW5jdGlvbiBzeW1ib2xzIENPREUgdHlwZSwKKwlvdGhlcnMgREFUQSB0eXBlLgorCitNb24gT2N0IDI2IDE2OjQwOjQzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRG9uJ3Qgd2FybiBhYm91dCBzaXplIGNoYW5nZSBiZXR3ZWVuCisJcG9pbnRlciBhbmQgaW50ZWdlciBpZiB0aGUgdmFsdWUgaXMgY29uc3RhbnQuCisKKwkqIE1ha2VmaWxlLmluIChsaWJvYmpjLmEpOiBJZiBsbiBmYWlscywgY29weSBsaWJvYmpjLmEuCisKK01vbiBPY3QgMjYgMTY6MjE6MTEgMTk5MiAgVGltIE1vb3JlICAobW9vcmVAZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEVYUE9SVF9QQVJNUywgQVNNX0RFQ0xBUkVfRlVOQ1RJT04pOiBCbG93IGF3YXkgdXNhZ2Ugb2YKKwlFWFBPUlRfUEFSTVMuICBCVUdHWV9HQVMgaXNuJ3QgYSBwcm9ibGVtIGFueSBtb3JlLgorCShURVhUX1NQQUNFX1AsIEZVTkNUSU9OX05BTUVfUCk6IE5ldyBtYWNyb3MuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBVc2UgVEVYVF9TUEFDRV9QLgorCShTVFJJUF9OQU1FX0VOQ09ESU5HKTogU3RyaXAgYSAnKicgd2hpY2ggbWlnaHQgcHJlY2VlZCBhICdAJy4KKwkoQVNNX09VVFBVVF9FWFRFUk5BTCk6IEdpdmUgb25seSBmdW5jdGlvbiBsYWJlbHMgYSBDT0RFIHR5cGUuCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgRlVOQ1RJT05fTkFNRV9QLgorCSogcGEuYyAoaHBwYV9lbmNvZGVfbGFiZWwpOiBDaGFuZ2UgZnVuY3Rpb24gbmFtZSBlbmNvZGluZyB0bworCXByZXNlcnZlIGxlYWRpbmcgJyonIGlmIHRoZXJlIGlzIG9uZS4KKwkoZnVuY3Rpb25fbGFiZWxfb3BlcmFuZCk6IFVzZSBGVU5DVElPTl9OQU1FX1AgbWFjcm8uCisKK01vbiBPY3QgMjYgMTQ6Mzk6NDYgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCUZyb20gVGltIE1vb3JlOgorCSogZnVuY3Rpb24uYyAobG9jYXRlX2FuZF9wYWRfcGFybSk6IEluIEFSR1NfR1JPV19ET1dOV0FSRCBjYXNlLAorCWRvbid0IHBhZCB0byBhcmd1bWVudCBhbGlnbm1lbnQgaWYgd2hlcmVfcGFkIGlzIGRvd253YXJkLgorCitNb24gT2N0IDI2IDExOjIxOjM2IDE5OTIgIENocmlzIFNtaXRoICAoY3NtaXRoQGNvbnZleC5jb20pCisKKwkqIGNvbnZleC5oIChTSElGVF9DT1VOVF9UUlVOQ0FURUQpOiBVbmRlZmluZS4KKworTW9uIE9jdCAyNiAwNzo0ODozNSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jIChwcmludF9vcGVyYW5kLCBuZXcgJ0wnKTogTmV3IGNhc2UuCisJKiBhbHBoYS5tZCAobW92aGkvbW92cWkgcGF0dGVybnMpOiBGb3IgbG9uZyBjb25zdGFudHMsIHVzZSAnaScKKwljb25zdHJhaW50IGluc3RlYWQgb2YgJ0snOyB1c2UgIiVMMSIgaW4gdGVtcGxhdGUuCisKKwkqIGNvbmZpZ3VyZSAoYWxwaGEpOiBTZXQgdXNlX2NvbGxlY3QyLgorCitNb24gT2N0IDI2IDA0OjE5OjI0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeG0tYWxwaGEuaDogRGVjbGFyZSBjYWxsb2MuCisKK1N1biBPY3QgMjUgMTc6MTk6NTIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IERvbid0IGNhbGwgZGVsZXRlX2luc24gaWYgbm90IC1PLgorCU1ha2UgYSBOT1RFX0lOU05fREVMRVRFRCBpbnN0ZWFkLgorCitTdW4gT2N0IDI1IDExOjU3OjA0IDE5OTIgIENocmlzIFNtaXRoICAoY3NtaXRoQGNvbnZleC5jb20pCisKKwkqIGNvbnZleC5oICh0YXJnZXRfZmxhZ3MpOiBwcmV2ZW50IC1tbm9jMiBmcm9tIGNsZWFyaW5nCisJVEFSR0VUX0lORElSRUNUUy4KKwkoVEFSR0VUX0lORElSRUNUUyk6IEFsd2F5cyBvbi4KKworU3VuIE9jdCAyNSAxNjo1NjoxOCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IERvbid0IGNhbGwgY29udmVydF90b19tb2RlIGlmIHdlIG9idGFpbmVkCisJVkFMVUUgaW4gdGhlIHByb3BlciBtb2RlOyBWQUxVRSBtaWdodCBiZSBhIENPTlNUX0lOVC4KKworU3VuIE9jdCAyNSAwMzoxODowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZ2VuX3B1c2hfb3BlcmFuZCk6IE5vIGxvbmdlciBzdGF0aWMuCisKKwkqIGkzODYuYyAob3V0cHV0X21vdmVfZG91YmxlKTogRGl2ZXJ0IGZpcnN0IHdvcmQgdmlhIHRoZSBzdGFjaworCWlmIGl0J3MgYSByZWdpc3RlciB1c2VkIGluIHRoZSBpbnB1dCBvcGVyYW5kLgorCSogaTM4Ni5tZCAobW92ZGkpOiBEZWxldGUgdGhlIGAmJyBmcm9tIGNvbnN0cmFpbnQuCisKK1NhdCBPY3QgMjQgMjE6NDE6MDAgMTk5MiAgQ2hyaXMgU21pdGggIChjc21pdGhAY29udmV4LmNvbSkKKworCSogY29udmV4Lm1kIChtb3ZzdHJpY3RzaSk6IENvcnJlY3Qgb3V0cHV0IGNvbnN0cmFpbnQgaXMgKyBub3QgPS4KKworU2F0IE9jdCAyNCAxNDoxMDo0MyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG5ld3MuaCAoRlVOQ1RJT05fRVBJTE9HVUUpOiBGaXggdHlwb3MuCisKKwkqIGNjY3AuYyAoZ2V0X2xpbnRjbWQpOiBMZW5ndGggb2YgYExJTlRMSUJSQVJZJyBpcyAxMS4KKworU2F0IE9jdCAyNCAxMzoyMjowOSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBhcm0ubWQgKERJbW9kZSBwYXR0ZXJucyk6IEFkZCBgJicgdG8gdGFyZ2V0IG9wZXJhbmQgY29uc3RyYWludHMuCisKKwkqIE1ha2VmaWxlLmluIChzZXR0aW5nIHZlcnNpb24gdmFyaWFibGUpOiBQcmVwZW5kICQoc3JjZGlyKSB0bworCXZlcnNpb24uYy4KKworCUZyb20gV2lsc29uOgorCSogbG9uZ2xvbmcuaCAoc3BhcmNsaXRlKTogVXNlIG1hY2hpbmUgaW5kZXBlbmRlbnQgVVNJdHlwZSBpbnN0ZWFkCisJb2YgZXhwbGljaXQgdHlwZXMuCisKK1NhdCBPY3QgMjQgMTA6MzU6MTggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLm1kIChtb3ZkaSk6IFRlc3RzIHdlcmUgaW4gd3Jvbmcgb3JkZXIuCisKKwkqIHJzNjAwMC5oIChMRUdJVElNSVpFX0FERFJFU1MpOiBJbmRleGVkIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkCisJZm9yIERJbW9kZSBhbmQgVEltb2RlOyBHT19JRl9MRUdJVElNQVRFX0FERFJFU1Mga25vd3MgdGhpcy4KKworCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogQWRkIG1pc3Npbmcgc2VtaWNvbG9uLgorCisJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzLCBhMjlrX3NldF9tZW1mbGFnc18xKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGEyOWsubWQgKG1vdnFpLCBtb3ZoaSwgcmVsb2FkX3tpbixvdXR9e3FpLGhpfSk6IFVzZSB0aGVtLgorCisJKiBhbHBoYS5jIChnZXRfYWxpZ25lZF9tZW0pOiBDb3B5IG1lbW9yeSBmbGFncyB0byBuZXcgTUVNLgorCShhbHBoYV9zZXRfbWVtZmxhZ3MsIGFscGhhX3NldF9tZW1mbGFnc18xKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGFscGhhLm1kIChtb3ZxaSwgbW92aGksIHJlbG9hZF97aW4sb3V0fXtxaSxoaX0pOiBVc2UgbmV3CisJZnVuY3Rpb25zLgorCisJKiBhbHBoYS5oIChBU01fRklMRV9TVEFSVCk6IFN0b3AgYXQgYmxhbmsgaW4gdmVyc2lvbiBzdHJpbmcuCisKK1NhdCBPY3QgMjQgMDQ6MzU6MTYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogSWYgbm90IC1PLCBEb24ndCB0cnkgZmluZF9lcXVpdl9yZWcuCisJKGNob29zZV9yZWxvYWRfcmVncyk6IElmIG5vdCAtTywgZG9uJ3QgaW5oZXJpdCByZWxvYWRzLgorCitGcmkgT2N0IDIzIDE4OjA3OjEwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbmV3cy5oIChGVU5DVElPTl9FUElMT0dVRSk6CisJSWYgbm8gZnJhbWUgcHRyLCBpbmNyZW1lbnQgc3RhY2sgcHRyIHRvIGZyZWUgdXAgdGhlIGxvY2FsIHNwYWNlLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogRGlzY2FyZCBhZnRlciBmaXJzdCBzcGFjZSBpbiBzcGVjX3ZlcnNpb24uCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IEFsd2F5cyBvdXRwdXQgYD4nIHRvIG1hdGNoIGA8Jy4KKworCSogTWFrZWZpbGUuaW4gKHZlcnNpb24pOiBVc2Ugc2VkIHRvIGV4dHJhY3QuCisJSWdub3JlIGV4Y2VzcyBhZnRlciBzcGFjZS4KKwkoaW5zdGFsbC1maXhpbmNsdWRlcyk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCisJKiBjb25maWd1cmUgKGkzODYtaWJtLWFpeCopOiBVc2UgYWl4Mzg2bmcuaCBpZiBub3QgLS13aXRoLWdhcy4KKwkqIGFpeDM4Nm5nLmg6IE5ldyBmaWxlLgorCitGcmkgT2N0IDIzIDE1OjE0OjQ5IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBSZXR1cm4gaWYgYSBzeW1ib2wncyBERUNMX05BTUUgaXMKKwllbXB0eSwgc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBtYWtlIGEgc3ltdGFiIG9mIGl0LgorCisJKiBjb252ZXguaCAoUF90bXBkaXIpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIHhtLWNvbnZleC5oOiBQdXQgaXQgaGVyZS4KKworRnJpIE9jdCAyMyAxMDoyNzozNCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4NnJvc2UuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IERlZmluZSBzbyB0aGF0IGV4dGVybmFsCisJaWRlbnRpZmllcnMgaGF2ZSBsZWFkaW5nIHVuZGVyc2NvcmVzIGluIGZyb250IG9mIHRoZW0uCisKKwkqIG1pcHMtdGZpbGUuYyAocGFyc2Vfc3RhYnNfY29tbW9uKTogQWxsb3cgc3RhYnMgd2l0aCBsaW5lIG51bWJlcnMKKwlvZiAwLiAgVGhlc2UgY29tZSBmcm9tIGcrKyBmb3IgY29tcGlsZXIgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0aGF0CisJdGFrZSBhcmd1bWVudHMuCisKK0ZyaSBPY3QgMjMgMDc6NDk6MTIgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworIAkqIHJvbXAuYyAob3V0cHV0X2Zwb3BzKTogQWRkIFNZTUJPTF9SRUYgYW5kIExBQkVMX1JFRiBjYXNlcyB0bworCWNvbnN0YW50cyBoYW5kbGVkLgorCitGcmkgT2N0IDIzIDAxOjU4OjEyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENoZWNrIGZvciBMQUJFTF9SRUZfTk9OTE9DQUxfUAorCWluIGxhYmVsX3ZhbHVlX2xpc3QuCisJKiBqdW1wLmMgKG1hcmtfanVtcF9sYWJlbCk6IENvcHkgTEFCRUxfUkVGX05PTkxPQ0FMX1AgZnJvbQorCUxBQkVMX1JFRiBpbnRvIFJFR19MQUJFTCBub3RlLgorCisJKiB0b3BsZXYuYyAocHVzaF9mbG9hdF9oYW5kbGVyKTogRGVjbGFyZSBhcmcgb2xkX2hhbmRsZXIuCisKKwkqIHQtbmV4dCAoT1RIRVJfRklYSU5DTFVERVNfRElSUyk6IERlZmluZWQuCisKKwkqIE1ha2VmaWxlLmluIChPVEhFUl9GSVhJTkNMVURFU19ESVJTKTogTmV3IHZhcmlhYmxlLCBub3JtYWxseSBlbXB0eS4KKwkoaW5zdGFsbC1maXhpbmNsdWRlcyk6IFJ1biBmaXhpbmNsdWRlcyBvbiB0aG9zZSBkaXJzLgorCSogZml4aW5jbHVkZXM6IENvbnZlcnQgLy8tc3R5bGUgY29tbWVudHMgdG8gLyouLi4qLyBzdHlsZS4KKworCSogbG9vcC5jIChyZWNvcmRfYml2KTogQ2xlYXIgdG90YWxfYmVuZWZpdCBmaWVsZCBvZiBuZXcgaXZfY2xhc3MuCisJKGdldF9jb25kaXRpb24pOgorCVZlcmlmeSBvcCAyIG9mIHNvdXJjZSBpcyBsYWJlbF9yZWYgYmVmb3JlIGxvb2tpbmcgd2l0aGluLgorCitUaHUgT2N0IDIyIDIxOjE3OjUzIDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlIGF0IGRlZm1hY3JvLmNzLnV0YWguZWR1KQorCisJKiB2YXJhc20uYyAoU1RSSVBfTkFNRV9FTkNPRElORyk6IE5ldyBtYWNybyB0byBkZWNvZGUgYSBzeW1ib2wgbmFtZQorCW11bmdlZCBieSBFTkNPREVfU0VDVElPTl9JTkZPLiAKKwkoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24sIGFzc2VtYmxlX3ZhcmlhYmxlKTogVXNlIFNUUklQX05BTUVfRU5DT0RJTkcuCisJKiBwYS5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogTmV3IGRlZmluaXRpb24uCisKK1RodSBPY3QgMjIgMTc6NTM6MzcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBDbGVhbiBvYmpjIHN1YmRpciBvbmx5IGlmIGl0IGV4aXN0cy4KKworCSogbmV3cy5oIChGVU5DVElPTl9QUk9MT0dVRSk6IERvIGFsbG9jYXRlIGxvY2FsIHN0YWNrIHNwYWNlCisJd2hlbiBubyBmcmFtZSBwb2ludGVyLgorCitUaHUgT2N0IDIyIDE1OjIxOjI3IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogaTk2MC5oIChGVU5DVElPTl9WQUxVRSk6IFNpbXBsaWZ5LCBqdXN0IHJldHVybiByZWcgMC4KKwkqIGk5NjAuYyAoaTk2MF9mdW5jdGlvbl92YWx1ZSk6IERlbGV0ZS4KKworVGh1IE9jdCAyMiAwOTo0Mjo1MCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jIChwYXJzZV9zdGFic19jb21tb24pOiBJZ25vcmUgc3RhYiBsaW5lIG51bWJlcnMKKwlvZiAwLCBzaW5jZSB0aGUgRysrIGZyb250IGVuZCBnZW5lcmF0ZXMgdGhlbS4gIENoZWNrIHdoZXRoZXIKKwlsaW5lIG51bWJlcnMgY2FuIGZpdCB3aXRoaW4gdGhlIGluZGV4IGZpZWxkLCBhbmQgaWYgbm90IHJlcG9ydAorCWFuIGVycm9yLgorCisJKiBtaXBzLmMgKGZ1bmN0aW9uX2FyZyk6IEFsaWduIHBhc3NlZCBzdHJ1Y3R1cmVzIHRvIGRvdWJsZSB3b3JkCisJYm91bmRhcnkgaWYgc3RydWN0dXJlIGhhcyBkb3VibGUgd29yZCBhbGlnbm1lbnQuCisKKwkqIG1pcHMuaCAoU1RBQ0tfRFlOQU1JQ19PRkZTRVQpOiBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaW4gb3JkZXIKKwl0byB3b3JrIGFyb3VuZCBhIGJ1Zy4KKworVGh1IE9jdCAyMiAwODowMDo0MyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdzdGRhcmcuaCwgZ3ZhcmFyZ3MuaDogVHJlYXQgX0FJWCBhbmQgX01fVU5JWCBsaWtlIF9fc3ZyNF9fLgorCisJKiBpMzg2Z2FzLmggKE5PX1VOREVSU0NPUkVTKTogRGVmaW5lZC4KKworCSogbmV4dC5oIChJTkNMVURFX0RFRkFVTFRTKTogUHV0IGluIEdQTFVTUExVU19JTkNMVURFX0RJUiwKKwlHQ0NfSU5DTFVERV9ESVIsIExPQ0FMX0lOQ0xVREVfRElSLCBTVEFOREFSRF9JTkNMVURFX0RJUi4KKwlEb24ndCBkZWZpbmUgYXQgYWxsIGlmIGNyb3NzLWNvbXBpbGluZy4KKworCSogdHJlZS5jIChjb3B5X25vZGUpOiBDb3B5IHRoZSBleGNlc3MgYnl0ZXMtLWRvbid0IGNsZWFyIHRoZW0uCisKK1RodSBPY3QgMjIgMDY6NDA6NTUgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgbWlzc2luZyBjb21wbGVtZW50YXJ5IHN3aXRjaGVzOgorCS1tbm8tc3RhY2stY2hlY2sgYW5kIC1tc3RvcmVtLWJ1Zy4KKworCSogYTI5ay5tZCAobG9uZyBjb25zdGFudCBzcGxpdCk6IFVzZSBnZW5fbG93cGFydCBpbnN0ZWFkIG9mIG1ha2luZworCWEgU1VCUkVHIGRpcmVjdGx5LgorCisJKiBhcm0uaCAoU1RPUkVfRkxBR19WQUxVRSk6IFJlbW92ZSBib2d1cyBkZWZpbml0aW9uLgorCitUaHUgT2N0IDIyIDAzOjA0OjI4IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKHByb2xvZ3VlX21hcmtlZCk6IE5ldyB2YXJpYWJsZS4KKwkobTg4a19lbmRfcHJvbG9ndWUpOiBPdXRwdXQgdGhlIGVwaWxvZ3VlIG1hcmsgaGVyZSBpZiB0aGUgc3RhcnQgb2YKKwl0aGUgZXBpbG9ndWUgcGFzc2VkIHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlLgorCShtODhrX2JlZ2luX2VwaWxvZ3VlKTogRG9uJ3Qgb3V0cHV0IHRoZSBlcGlsb2d1ZSBtYXJrIGlmIHRoZSBlbmQKKwlvZiB0aGUgcHJvbG9ndWUgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC4KKworVGh1IE9jdCAyMiAwMzoyMDo0MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IFdoZW4gd2Ugb3BlcmF0ZSBvbiBhIHBzZXVkbworCXRoYXQgaG9sZHMgdGhlIGFkZHJlc3MsIHVzZSBwcm9wZXIgbW9kZXMuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogVXNlIGlzX21vZGUsIG5vdCBpbm5lcl9tb2RlLAorCWZvciBCWVRFU19CSUdfRU5ESUFOIGFkanVzdG1lbnQgdG8gb2Zmc2V0IGZvciBub24tYml0ZmllbGQgY2FzZS4KKwlVcGRhdGUgaXNfbW9kZSB3aGVuIHN0cmlwcGluZyBzdWJyZWcgZnJvbSBhcm91bmQgYSBtZW0uCisKKwkqIG02OGsuaCAoR09fSUZfSU5ERVhBQkxFX0JBU0UpOiBBbGxvdyBMQUJFTF9SRUYgb25seSBpZiBqdW1wIHRhYmxlLgorCitXZWQgT2N0IDIxIDE4OjU1OjI0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3N0ZGFyZy5oOiBDaGVjayBhbmQgZGVmaW5lIF9BTlNJX1NUREFSR19IIGFsb25nIHdpdGggX1NUREFSR19ILgorCitXZWQgT2N0IDIxIDExOjQxOjM5IDE5OTIgIFRvbSBXb29kICAod29vZCBhdCBnZW4tcnR4KQorCisJKiB0b3BsZXYuYyAocHVzaF9mbG9hdF9oYW5kbGVyLCBwb3BfZmxvYXRfaGFuZGxlcik6IE5ldyBmdW5jdGlvbnMuCisJKiBmb2xkLWNvbnN0LmMgKHJlYWxfdmFsdWVfdHJ1bmNhdGUpOgorCVVzZSB0aGVtLCBpbiBjYXNlIGFub3RoZXIgaGFuZGxlciBpcyBhbHJlYWR5IGluIGVmZmVjdC4KKworV2VkIE9jdCAyMSAyMjowODozMSAxOTkyICBILkouIEx1ICAoaGx1QHlhcmRiaXJkLmVlY3Mud3N1LmVkdSkKKworCSogTWFrZWZpbGUgKGFsbC5idWlsZCk6IEFkZCB0YXJnZXQgJChHQ0NfUEFTU0VTKSBmb3IgeGdjYy4gCisJKiBidWlsZC1tYWtlIChDQyk6IERlZmluZWQuCisJKENST1NTX0dDQ19GTEFHUyk6IERlbGV0ZWQuCisJKEhPU1RfQ0MpOiBEZWxldGUgLVYgb3B0aW9uOyBDQyBzdXBwbGllcyB0aGF0LgorCitXZWQgT2N0IDIxIDEyOjM0OjM5IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwlGcm9tIFdpbHNvbjoKKwkqIGxvbmdsb25nLmggKHNwYXJjbGl0ZSB1ZGl2X3Fybm5kKTogUmVtb3ZlIGNvbW1hIGJlZm9yZQorCV9fQU5EX0NMT0JCRVJfQ0MuCisKK1dlZCBPY3QgMjEgMTI6MjQ6MjQgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGRlY3Jvc2UuaCAoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogQWRkIC1waWMtbmFtZXMuCisJKENDMV9TUEVDKTogSWYgLXBpYy1uYW1lcywgcGFzcyAtbWhhbGYtcGljIHRvIGNjMS4KKworCSogaTM4NnJvc2UuaCAoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogQWRkIC1waWMtbmFtZXMuCisJKENDMV9TUEVDKTogSWYgLXBpYy1uYW1lcywgcGFzcyAtbWhhbGYtcGljIHRvIGNjMS4KKworV2VkIE9jdCAyMSAwNzozNDoxNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUgKGFscGhhKTogT25seSBhY2NlcHQgT1NGLzEuCisKKwkqIGFscGhhLmggKEFTTV9GSUxFX1NUQVJUKTogQ2hhbmdlIC52ZXJzdGFtcCBpZGVudCBmb3IgQkw5LgorCSogYWxwaGEubWQgKGRpdi9tb2QpOiBDaGFuZ2UgY2FsbGluZyBzZXF1ZW5jZSB0byBhZ3JlZSB3aXRoIEJMOS4KKworCSogZXhwci5jIChkb19zdG9yZV9mbGFnKTogRW5zdXJlIHdlIGRvbid0IGdldCBjb25mdXNlZCB3aGVuCisJZW1pdF9zdG9yZV9mbGFnIGZhaWxzIGFuZCBhbiBvcGVyYW5kIGhhcyBhIFFVRVVFRC4KKworV2VkIE9jdCAyMSAwMjo1Mzo1OCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNleHAueSAoaW50ZWdlcl9vdmVyZmxvdyk6IERvIG5vdGhpbmcgdW5sZXNzIHBlZGFudGljLgorCitUdWUgT2N0IDIwIDE3OjAyOjE1IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogUkVBRE1FLCBzcGFyYy5oLCBmbG93LmMsIHJlZ3MuaDogQ2hhbmdlIGdsb2JhbC1hbGxvYy5jIHRvIGdsb2JhbC5jLgorCisJKiBpOTYwLm1kIChjYWxsLCBjYWxsX3ZhbHVlKTogVXNlICdkJyBub3QgJ3InIGNvbnN0cmFpbnQgZm9yIHNjcmF0Y2guCisKKwkqIGdjYy5jIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBIYW5kbGUgLVR0ZXh0IGFuZCAtVGJzcyBpbgorCWFkZGl0aW9uIHRvIC1UZGF0YS4KKwkqIGk5NjAuaCAoV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogRGVsZXRlLCBub3cgdW5uZWNlc3NhcnkuCisJKiBuZXh0LmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IEFkZCAtVGJzcy4KKwkqIHNwYXJjLmgsIHN1bjIuaCwgc3VuMy5oIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBBZGQgLVR0ZXh0IGFuZAorCS1UYnNzLgorCitUdWUgT2N0IDIwIDE2OjQ5OjU3IDE5OTIgIFJvbiBHdWlsbWV0dGUgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiBkd2FyZm91dC5jIChkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wpOiBHZW5lcmF0ZSBESUVzIGZvcgorCWJ1aWx0LWluIG5vbi1mdW5kYW1lbnRhbCB0eXBlcy4KKworVHVlIE9jdCAyMCAxNDo1ODoxOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0aW9ucy5jIChoYW5kbGVfaW1wZW50LCBoYW5kbGVfY2xhc3NfcmVmKTogVXNlIF9fCisJdG8gc3RhcnQgdGhlIGdlbmVyYXRlZCBuYW1lcywgbm90IHBlcmlvZC4KKworVHVlIE9jdCAyMCAxNDozODozMCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1tZXRob2QuYyAoZm5kZWNsX2FzX3N0cmluZyk6IFVuZG8gY2hhbmdlIG9mIFNlcCAxNHRoIGZvcgorCWVtaXR0aW5nIGEgc3BhY2UgYWZ0ZXIgdGhlIHJldHVybiB0eXBlIG9mIGEgZm4uCisKKwlXZWQgT2N0ICA3IDE2OjAxOjU1IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtbGV4LmMgKHJlYWRlc2NhcGUpOiBObyB3YXJuaW5nIGlmIGRpZ2l0cyBpbiBceCBhcmUgYWxsIDAncy4KKworVHVlIE9jdCAyMCAwNjo1MDoyOCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGZvcmNlX29wZXJhbmQpOiBDbGFyaWZ5IGNvbW1lbnQgdG8gc2F5IHdoYXQgaXQgY2FuIHJldHVybi4KKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IERvbid0IGFzc3VtZSBmb3JjZV9vcGVyYW5kCisJb24gYW4gYWRkcmVzcyByZXR1cm5zIGEgUkVHOyBpdCBtaWdodCBiZSBhIFNVQlJFRy4gIFVzZSBmb3JjZV9yZWcuCisKK1R1ZSBPY3QgMjAgMDQ6NTQ6MDEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSwgY29weV9ub2RlKToKKwlEb24ndCBhc3N1bWUgbm9kZSBsZW5ndGggaXMgbXVsdGlwbGUgb2YgaW50LgorCitNb24gT2N0IDE5IDE4OjE0OjU2IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogZ2VucmVjb2cuYyAod3JpdGVfdHJlZSk6IEZvciB0eXBlIFNQTElULCBjaGVjayBzdWJyb3V0aW5lIHJldHVybgorCXZhbHVlcyBmb3Igbm9uLXplcm8gdmFsdWUgbm90IHBvc2l0aXZlIHZhbHVlLgorCitNb24gT2N0IDE5IDE2OjExOjA0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjLXR5cGVjay5jIChwcmludF90YWJsZSwgc2Nhbl90YWJsZSk6IEFkZCBzdXBwb3J0IGZvciBYUEc0J3MgJVMKKwlhbmQgJUMgZm9ybWF0cyBmb3IgcHJpbnRpbmcvcmVhZGluZyB3aWRlIGNoYXJhY3RlcnMuICAlbGMgYW5kICVscyB0b28uCisKK01vbiBPY3QgMTkgMTc6NTg6MTggMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogYXJtLmMgKG91dHB1dF9lcGlsb2d1ZSk6IFJlc3RvcmUgc3AncyB2YWx1ZSBpZiBubyBmcmFtZSBwb2ludGVyLgorCisJRnJvbSBXaWxzb246CisJKiBwYS5oIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBEZWxldGUgc3BhcmMgcmVsYXRlZCBjcnVmdC4KKworTW9uIE9jdCAxOSAxNDo0OTowMyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAocHJpbWFyeSk6IERvbid0IHRyeSBidWlsZGluZyBhIENBTExfRVhQUiBvcgorCWNvbnZlcnRpbmcgdHlwZXMgaWYgJCQgaXMgYW4gZXJyb3JfbWFyay4KKworTW9uIE9jdCAxOSAxNDowMTowMiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5oIChTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogUmVxdWlyZSBhIHRlbXBvcmFyeSBmb3IgYQorCXBpYyBhZGRyZXNzIHdpdGggYSBsYXJnZSBjb25zdGFudCB0ZXJtLgorCSogbTg4ay5tZCAocmVsb2FkX2luc2kpOiBOZXcgcGF0dGVybi4KKwkoYWRkc2kzIHBhdHRlcm4gZm9yIGxhcmdlIGNvbnN0YW50cyk6IERlbGV0ZS4gIENhdXNlcyByZWxvYWQgdHJvdWJsZS4KKwkqIG04OGsuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogQWRkIHNjcmF0Y2ggcmVnaXN0ZXIuICBBbGwgY2FsbGVycworCWNoYW5nZWQuCisJKGxlZ2l0aW1pemVfYWRkcmVzcyk6IEFkZCBzY3JhdGNoIHJlZ2lzdGVyLiAgQWxsIGNhbGxlcnMgY2hhbmdlZAorCXRvIHBhc3MgemVybyBpbnN0ZWFkIG9mIGdlbl9yZWdfcnR4IHJlc3VsdC4gIEFsbG9jYXRlIGFub3RoZXIgdGVtcAorCXJlZ2lzdGVyIGZvciAtZlBJQyBjYXNlLiAgVXNlIHNjcmF0Y2ggcmVnaXN0ZXIgZm9yIHBpYyBjYXNlcyB3aXRoCisJYSBsYXJnZSBjb25zdGFudCB0ZXJtLgorCisJKiBtODhrLmggKEZVTkNUSU9OX1BST0ZJTEVSX0xFTkdUSCwgRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVJfTEVOR1RILAorCUJMT0NLX1BST0ZJTEVSX0xFTkdUSCwgUkVHX1BVU0hfTEVOR1RILCBSRUdfUE9QX0xFTkdUSCk6IEFkZGVkLgorCShBREpVU1RfSU5TTl9MRU5HVEgpOiBBY2NvdW50IGZvciBwcm9maWxpbmcgY29kZS4KKworTW9uIE9jdCAxOSAxNjo0Njo1MiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChsaWJvYmpjLmEpOiBEb24ndCBta2RpciBvYmpjIGlmIGRpciBleGlzdHMuCisKKwkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBJZiB0cnlpbmcgdG8gc2lnbi1leHRlbmQgYSBjb25zdGFudCwKKwl1c2UgdmFsdWVfbW9kZSBhcyB0aGUgbW9kZS4KKworTW9uIE9jdCAxOSAxMDo1OToyMCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogeG0tdW1pcHMuaCAoaW5kZXgpOiBEZWZpbmUgdG8gYmUgc3RyY2hyLgorCShyaW5kZXgpOiBEZWZpbmUgdG8gYmUgc3RycmNoci4KKworCSogbWlwcy10ZHVtcC5jIChpbmRleCwgcmluZGV4KTogVW5kZWZpbmUgdGhlc2UsIHNpbmNlIHRoZSBNSVBTCisJaW5jbHVkZSBmaWxlcyBoYXZlIGEgZmllbGQgc3BlbGxlZCBpbmRleC4KKworTW9uIE9jdCAxOSAwMzozNDowNCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IERlbGV0ZSBsaWJvYmpjLmEuCisJKGxpYm9iamMuYSk6IENyZWF0ZSB0aGUgb2JqYyBzdWJkaXIuCisKK1N1biBPY3QgMTggMTc6NTI6MDUgMTk5MiAgQXJuZSBILiBKdXVsCShhcm5lakBsaXNlLnVuaXQubm8pCisKKwkqIG9iamMvTWFrZWZpbGU6IEFkZCAuU1VGRklYRVMgLm0gYW5kIC5tLm8gcnVsZSB0byBrZWVwIG5vbi1HTlUKKwltYWtlIGhhcHB5LgorCisJKiBNYWtlZmlsZS5pbiAobGlib2JqYy5hKTogUmVtb3ZlIGxpYm9iamMuYSBpbiBjdXJyZW50IGRpcmVjdG9yeQorCWJlZm9yZSBhdHRlbXB0aW5nIHRvIGhhcmRsaW5rIGl0IG9yIG1ha2Ugd2lsbCBmYWlsIGluIGxhdGVyIHN0YWdlcy4KKwkoc3VibGlib2Jjai5hKTogRG9uJ3QgdXNlICQoTUFLRUZMQUdTKSBmb3Igb2JqYyBzdWJkaXIgc3R1ZmYuCisKK1N1biBPY3QgMTggMDY6MDA6MjcgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNhbm9uX3JlZyk6IERvbid0IGNhbGwgdmFsaWRhdGVfY2hhbmdlIGlmIElOU04gaXMgemVyby4KKworU3VuIE9jdCAxOCAwMTowOTowMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGk4NjAuaCAoUFJJTlRfT1BFUkFORCk6IEZvciBgaCcsIGFsd2F5cyB1c2UgT1BFUkFORF9ISUdIX0FESl9QQVJUCisJZXZlbiBmb3IgaW50ZWdlciBjb25zdGFudCBhZGRyZXNzZXMuCisKKwkqIGZpbmFsLmMgKG91dHB1dF9hZGRyX2NvbnN0KTogQWx3YXlzIHVzZSBGSUxFLCBub3QgYXNtX291dF9maWxlLgorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogRG9uJ3QgYWRkIHdoaXRlc3BhY2UgYXQgZW5kCisJaWYgaW5zaWRlIGEgc3RyaW5nIGFuZCBub3QgdHJhZGl0aW9uYWwuCisJKHJlc2Nhbik6IEF0IGVuZCBvZiBzdHJpbmcsIGlmIGluc2lkZSBtYWNybywgYWx3YXlzIGtlZXAgc2Nhbm5pbmcuCisKKwkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBJZiBzaWduZWQgYml0ZmllbGQgYW5kIHdhbnQgdmFsdWUsIHNpZ24gZXh0ZW5kLgorCitTYXQgT2N0IDE3IDIxOjExOjA5IDE5OTIgIEguSi4gTHUgIChobHVAeWFyZGJpcmQuZWVjcy53c3UuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoYWxsLmJ1aWxkKTogTmV3IHJ1bGUgZm9yIG1ha2luZyBnY2Mgd2l0aCBhCisJY3Jvc3MtY29tcGlsZXIuCisJKGluc3RhbGwuYnVpbGQpOiBOZXcgdGFyZ2V0LgorCShsaW5lIDI3MSk6IEFkZCBgIyMjI2J1aWxkIG92ZXJyaWRlcycuCisJKGdlbioubyk6IERlcGVuZCBvbiBoY29uZmlnLmgsIG5vdCBjb25maWcuaC4KKwkoJChIT1NUX1BSRUZJWF8xKXJ0bC5vLCAkKEhPU1RfUFJFRklYXzEpcHJpbnQtcnRsLm8sCisJICQoSE9TVF9QUkVGSVhfMSlydGxhbmFsLm8sICQoSE9TVF9QUkVGSVhfMSlvYnN0YWNrLm8sCisJICQoSE9TVF9QUkVGSVhfMSltYWxsb2Mubyk6IEFkZCBmaW5hbCBgaCcgdG8gdGhlIHJlZ2V4cCB0byByZXBsYWNlLgorCisJKiBjb25maWd1cmU6IElmICRob3N0ID09ICR0YWdldCwgYnV0ICRob3N0ICE9ICRidWlsZCwgbWVyZ2UKKwlgYnVpbGQtbWFrZScgYW5kIGVtaXQgYGJ1aWxkID0gJGJ1aWxkJy4KKwkqIGJ1aWxkLW1ha2U6IE5ldyBmaWxlIGZvciBtYWtpbmcgZ2NjIHdpdGggYSBjcm9zcy1jb21waWxlci4KKworU2F0IE9jdCAxNyAxOToyNDozMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFdoZW4gaW5pdGlhbGl6aW5nIGEgdW5pb24sCisJaGFuZGxlIHRoZSBjYXNlIG9mIGFuIGVtcHR5IGluaXQgbGlzdC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogUmVkbyBsYXN0IGNoYW5nZTogY29weSB0aGUgbWVtCisJaW4gdGhlIHNhbWUgd2F5IGl0J3MgdXN1YWxseSBkb25lLgorCisJKiBNYWtlZmlsZS5pbiAoZ2NjLnh0YXIpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKwkobW9zdGx5Y2xlYW4pOiBEb24ndCB1c2UgJChNQUtFRkxBR1MpIGZvciBvYmpjIHN1YmRpciBzdHVmZi4KKworU2F0IE9jdCAxNyAxOToxNToxNiAxOTkyICBKb2huIFdyb2NsYXdza2kgIChqdHdAcG13cy5sY3MubWl0LmVkdSkKKworCSogZGVjc3RhdG4uaCAoU0laRV9UWVBFKTogRml4IHR5cG8uCisKK1NhdCBPY3QgMTcgMTc6NDY6MDggMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3AtbWV0aG9kLmM6IERvbid0IHRyeSB0byBpbmNsdWRlIHN0cmluZy5oIG9yIHN0cmluZ3MuaC4KKwkqIGNwLWRlY2wuYzogRGl0dG8uCisKK1NhdCBPY3QgMTcgMTM6NTA6NDkgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGZpc2hwb25kLmN5Z251cy5jb20pCisKKwkqIGZpeGluYy5zdnI0IChzdHJpbmcuaCk6CisJUmVtb3ZlICNkZWZpbmVzIGZvciBvdGhlciBjb21waWxlcidzIGJ1aWx0aW4gZnVuY3Rpb25zLgorCitTYXQgT2N0IDE3IDAwOjM5OjMwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcHJvdG9pemUuYzogQWRkICN1bmRlZiBnZXRvcHQgYWZ0ZXIgZ2V0b3B0LmguCisKKwkqIGdzdGRhcmcuaCwgZ3ZhcmFyZ3MuaCAodmFfbGlzdCkgW19fU1ZSNF8yX19dOgorCURvbid0IHNldCBvciB0ZXN0IF9WQV9MSVNULgorCisJKiBnc3RkZGVmLmg6IERvIG5vdGhpbmcgaWYgX0FOU0lfU1REREVGX0ggYWxyZWFkeSBkZWZpbmVkLgorCitGcmkgT2N0IDE2IDExOjM5OjA2IDE5OTIgIEguSi4gTHUgIChobHVAeWFyZGJpcmQuZWVjcy53c3UuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworRnJpIE9jdCAxNiAyMjozNToxNSAxOTkyICBFcmljIFlvdW5nZGFsZSAoeW91bmdkYWxlQHY2NTUwZC5ucmwubmF2eS5taWwpCisKKwkqIG1ha2UtY2MxLmNvbTogQ29ycmVjdCBwcmV2aW91cyBwYXRjaC4KKworRnJpIE9jdCAxNiAyMDowNzoxMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0aW9ucy5jIChzdGFydF9jbGFzcyk6CisJRm9yIGFuIElOVEVSRkFDRV9UWVBFLCBwdXNoIHRvIHBlcm1hbmVudCBvYnN0YWNrLgorCShidWlsZF9tZXNzYWdlX2V4cHIpOiBVc2UgVFlQRV9NQUlOX1ZBUklBTlQgd2hlbiBjb21wYXJpbmcgdHlwZXMuCisKKwkqIE1ha2VmaWxlLmluIChsaWJvYmpjLmEpOiBEb24ndCB1c2UgJChNQUtFRkxBR1MpLgorCUFkZCBicmFjZXMgYXJvdW5kIHNoZWxsIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisJKGNvbGxlY3QyKTogRGVsZXRlIGZpbGUgYmVmb3JlIGxpbmtpbmcgaXQuCisJKiBvYmpjL01ha2VmaWxlIChhbGwpOiBEb24ndCB1c2UgJChNQUtFRkxBR1MpLgorCShWUEFUSCk6IEdldCByaWQgb2YgLi4vIHNpbmNlIHNyY2RpciBub3cgYWJzb2x1dGUuCisKK0ZyaSBPY3QgMTYgMTQ6MjM6MjUgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGRlY3N0YXRuLmggKGFsbCBkZWZpbmVzKTogUHJvdGVjdCBhbGwgZGVmaW5lcyB3aXRoIGFuICNpZm5kZWYsCisJdG8gYWxsb3cgZGVjLW9zZjEuaCB0byBzZWxlY3RpdmVseSBvdmVycmlkZSBtYWNyb3MuCisKK0ZyaSBPY3QgMTYgMTA6NDQ6NDcgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChsaWJvYmpjLmEpOiAgQ29tcHV0ZSBzcmNkaXIxIHdpdGhvdXQgY2hhbmdpbmcKKwlkaXJlY3Rvcmllcy4gIFVzZSBzcmNkaXIxIHRvIGxvY2F0ZSBvYmpjL01ha2VmaWxlLiAgUHV0IHF1b3RlcworCWFyb3VuZCBhbGwgcG90ZW50aWFsIG11bHRpLXdvcmQgdmFsdWVzLiAgUmVjb21wdXRlIEdDQ19GT1JfVEFSR0VULgorCShzdWJsaWJvYmpjLmEpOiBVc2Ugc2FtZSB0ZXh0IGFzIGxpYm9iamMuYS4KKwkobW9zdGx5Y2xlYW4pOiBVc2UgJChNQUtFKSBhbmQgc3JjZGlyMSBmb3Igb2JqYyBhY3Rpb24uCisJKiBvYmpjL01ha2VmaWxlIChTVUJESVJfSU5DTFVERVMpOiBEb24ndCB1c2UgLi4vJChzcmNkaXIpLgorCShhbGwpOiBVc2UgJChNQUtFKS4KKworRnJpIE9jdCAxNiAwNDoxNjozNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGZpbmRfZml4dXBfcmVwbGFjZW1lbnQpOiBSZW5hbWVkIGZyb20gZmluZF9yZXBsYWNlbWVudC4KKworCSogdmFyYXNtLmMgKG91dHB1dF9hZGRyZXNzZWRfY29uc3RhbnRzKTogSGFuZGxlIE5PTl9MVkFMVUVfRVhQUi4KKworRnJpIE9jdCAxNiAwMjoyNToxNyAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChjYWxsIGRlZmluZV9leHBhbmRzKTogSWYgVEFSR0VUX0xPTkdfQ0FMTFMsIHRoZW4gZm9yY2UKKwl0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIHJlZ2lzdGVyLgorCSogcGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogTmV3IHN3aXRjaCAiLW1sb25nLWNhbGxzIi4KKwkqIHBhLmMgKGNhbGxfb3BlcmFuZF9hZGRyZXNzKTogT25seSBhbGxvdyByZWdpc3RlcnMgaWYKKwlUQVJHRVRfTE9OR19DQUxMUy4KKworRnJpIE9jdCAxNiAwMDoyMTo1NyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChsaWJvYmpjLmEpOiBHZXQgZGlyZWN0b3JpZXMgcmlnaHQsIHVzaW5nIHNoZWxsIHZhcnMKKwl0aGlzZGlyMSwgc3JjZGlyMS4gIFB1dCBxdW90ZXMgYXJvdW5kICQoR0NDX0NGTEFHUykuICBVc2UgJChNQUtFKS4KKworVGh1IE9jdCAxNSAxNzowNzoxOCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlLCBjb25maWcuc3ViLCBjb25maWcvZWx4c2kue2MsaCxtZH0sIGNvbmZpZy94bS1lbHhzaS5oLAorCWNvbmZpZy94LWVseHNpOiBBZGQgc3VwcG9ydCBmb3IgbmV3IDY0IGJpdCBDUFUsIGNhbGxlZCBFbHhzaS4KKworVGh1IE9jdCAxNSAxNjo1NToyMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jIChhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogRml4IGJ1ZyBpbiBsYXN0IGNoYW5nZS4KKworCSogZm9sZC1jb25zdC5jIChkaXN0cmlidXRlX2JpdF9leHByKTogVGVzdCBmb3IgQklUX3tBTkQsSU9SfV9FWFBSLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBBZGQgbWlzc2luZyBjYWxsIHRvIGFwcGx5X2NoYW5nZV9ncm91cC4KKworVGh1IE9jdCAxNSAxNTowOTo0NSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogdC1taXBzIChDQ0xJQkZMQUdTLCBMSUJHQ0MyX0NGTEFHUyk6IERlbGV0ZSwgc28gdGhhdCBsaWJnY2MuYSBpcworCWJ1aWx0IHdpdGggdGhlIC1HIDggb3B0aW9uLCBpbnN0ZWFkIG9mIC1HIDAsIHNvIHRoYXQgdGhlIGxpbmtlcgorCWRvZXNuJ3QgY29tcGxhaW4gd2hlbiBsaW5raW5nIGluIGxpYmcrKy5hLgorCSogdC1kZWNzdGF0biAoQ0NMSUJGTEFHUywgTElCR0NDMl9DRkxBR1MpOiBEaXR0by4KKworVGh1IE9jdCAxNSAxNDozMDoyNSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIG1pcHMtdGZpbGUuYyAocGFyc2VfZGVmKTogQWxsb3cgc3BhY2VzIGluIGFyZ3VtZW50cyBmb3IgQysrLgorCUNvcnJlY3QgdGVzdCBmb3IgbnVsbCB3aGVuIHNlYXJjaGluZyBmb3IgZW5kIG9mIG5hbWUuCisKK1RodSBPY3QgMTUgMTE6NTU6NTEgMTk5MiAgVGltIE1vb3JlICAobW9vcmVAZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IFRha2UgYW4gZnJlZ3NfbGl2ZSBwYXJhbWV0ZXIgaW5zdGVhZAorCW9mIHNldHRpbmcgdGhlIHN0YXRpYyB2YXJpYWJsZSBzYXZlX2ZyZWdzLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBJbml0aWFsaXplIHNhdmVfZnJlZ3MgdG8gMCBhbmQgcGFzcyB0bworCWNvbXB1dGVfZnJhbWVfc2l6ZS4KKwkqIHBhLmggKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBQYXNzIGV4dHJhIG51bGwgcGFyYW1ldGVyCisJdG8gY29tcHV0ZV9mcmFtZV9zaXplLgorCitUaHUgT2N0IDE1IDA4OjQwOjA3IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmggKFRBUkdFVF9GUFJFR1MpOiBOZXcgZmxhZy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogUmVtb3ZlIHRlbXBvcmFyeSAtbWZwIGFuZCBhZGQgLW1zb2Z0LWZsb2F0IGFuZAorCS1tZnAtcmVncy4KKwkoVEFSR0VUX0RFRkFVTFQpOiBTZXQgdG8gLW1mcC1yZWdzIC1tbm8tc29mdC1mbG9hdC4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBVc2UgVEFSR0VUX0ZQUkVHUy4KKwkoRlVOQ1RJT05fVkFMVUUsIEZVTkNUSU9OX0FSRywgTElCQ0FMTF9WQUxVRSk6IFVzZSBpbnRlZ2VyIHJlZ2lzdGVycworCWZvciBGUCBpdGVtcyBpZiAtbW5vLWZwLXJlZ3MuCisJKiBhbHBoYS5jIChhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogU3RvcmUgaW50ZWdlciByZWdzIHR3aWNlIGluc3RlYWQKKwlvZiBzdG9yaW5nIHRoZSBGUCByZWdzIGlmIC1tbm8tZnAtcmVncy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogQWRkIG1pc3NpbmcgdGVzdCBpbiBjYXNlIHdoZW4gd2UKKwlkaXN0cmlidXRlIGEgTk9QX0VYUFIgaW50byBhIENPTkRfRVhQUiBhbmQgdHJ5IHRvIHB1bGwgaXQgYmFjaworCW91dCBhZ2Fpbi4KKworVGh1IE9jdCAxNSAwODoxMTowMCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChzaW1wbGVfb3BlcmFuZF9wKTogRG9uJ3QgcmVnYXJkIGdsb2JhbCBvciBzdGF0aWMKKwl2YXJpYWJsZXMgYXMgc2ltcGxlLgorCShmb2xkX3RydXRob3ApOiBPbmx5IHJlcXVpcmUgdGhlIFJIUyB0byBiZSBzaW1wbGUuCisKKwkqIG04OGsuaCAoQ1BQX1NQRUMpOiBBZGQgLURfX204ODExMF9fIHdoZW4gLW04ODExMCBpcyBpbiBlZmZlY3QsCisJc2ltaWxhcmx5IGZvciAtbTg4MTAwLgorCSogbTg4a2RndXguaCAoQ1BQX1NQRUMpOiBEaXR0by4KKwkqIG04OGtsdW5hLmggKENQUF9QUkVERUZJTkVTKTogRHJvcCAtRG1jODgxMDAuCisJKENQUF9TUEVDKTogUmVwcm9kdWNlIHRoZSBwcmVkZWZpbmUgLURtYzg4MTAwIHdoZW4gLW04ODEwMCBpcyBpbgorCWVmZmVjdC4gIE90aGVyd2lzZSwgc3VwcGx5IC1EX19tYzg4MXgwX18gd2hlbiAtbTg4MXgwIGlzIGluIGVmZmVjdC4KKworVGh1IE9jdCAxNSAwMjowOTo0OSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZ2V0X2lubmVyX3JlZmVyZW5jZSk6CisJSWYgZmxhZ192b2xhdGlsZSwgdHJlYXQgZXZlcnkgSU5ESVJFQ1RfUkVGIGFzIHZvbGF0aWxlLgorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogSWYgQ09MTEVDVF9HQ0MgaXMgYSByZWxhdGl2ZSBuYW1lLCB1c2UgaXQgYW55d2F5LgorCisJKiB4LW5leHQ6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtNjhrLW5leHQtKik6IFVzZSB0aGF0LgorCisJKiBDaGFuZ2VzIGZyb20gTmVYVDoKKworCSogbGliZ2NjMi5jIFtMX2N0b3JzXSAoX19DVE9SX0xJU1RfXywgX19EVE9SX0xJU1RfXyk6CisJSW5pdGlhbGl6ZSB0aGVzZSBkZWZhdWx0IGRlZmluaXRpb25zIGlmIF9fTmVYVF9fLgorCisJKiBndmFyYXJncy5oIFtfX05lWFRfX106IERlZmluZSBfVkFfTElTVF8gaWYgX0FOU0lfU1REQVJHX0hfIHdhcworCWRlZmluZWQ7IHRoZW4gZGVmaW5lIF9BTlNJX1NUREFSR19IXy4KKworCSogZ3N0ZGRlZi5oIChfQU5TSV9TVERERUZfSCk6IERlZmluZSwgYWxvbmcgd2l0aCBfU1REREVGX0guCisKKwkqIG5leHQuaCAoSU5DTFVERV9ERUZBVUxUUyk6IE5ldyBtYWNyby4KKworCSogY3AtbWV0aG9kLmMgKGluZGV4LCByaW5kZXgpOiBEZWxldGUgZGVjbGFyYXRpb25zLgorCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IENhc3QgcmVzdWx0IG9mIGluZGV4LgorCisJKiBjY2NwLmMgKGNwbHVzcGx1c19jb21tZW50cyk6IE5ldyB2YXIuCisJKG1haW4pOiBTZXQgaXQgYWNjb3JkaW5nIHRvIG9wdGlvbnMuCisJKHJlc2NhbiwgaGFuZGxlX2RpcmVjdGl2ZSwgc2tpcF9pZl9ncm91cCwgdmFsaWRhdGVfZWxzZSk6CisJKHNraXBfdG9fZW5kX29mX2NvbW1lbnQsIG1hY2FyZzEsIGRpc2NhcmRfY29tbWVudHMpOiAKKwlVc2UgY3BsdXNwbHVzX2NvbW1lbnRzIHRvIGVuYWJsZSBDKysgY29tbWVudCBzeW50YXguCisKK1dlZCBPY3QgMTQgMTE6MzQ6NTggMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBsaWJnY2MyLmMgKF9fZ2NjX2JjbXApOiBEb24ndCBkZXBlbmQgb24gc2lnbmVkbmVzcyBvZiBgY2hhcicuCisKK1dlZCBPY3QgMTQgMTg6NTI6MjggMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzY2hlZC5jIChzY2hlZF9ub3RlX3NldCk6IFNldCBzdWJyZWdfcCBmb3IgYW55dGhpbmcgZXhjZXB0IGEKKwlwYXJhZG94aWNhbCBzdWJyZWcuCisKKwkqIGNvbmZpZ3VyZSAoc3BhcmMtKi1zb2xhcmlzMik6IFVzZSB4bS1zcGMtc29sMi5oIG5vdCB4bS1zcGN2NC5oLgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRG9uJ3QgbGV0IGFuIG9wZXJhbmQgaGF2ZSBhIG51bWJlcmVkCisJY29uc3RyYWludCB0aGF0IG1ha2VzIGl0IG1hdGNoIGl0c2VsZi4KKworV2VkIE9jdCAxNCAxMDozODozMSAxOTkyICBUaW0gTW9vcmUgIChtb29yZUBkZWZtYWNyby5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKHNDQyBwYXR0ZXJucyk6IENvbXBhcmlzb24gb3BlcmF0b3Igc2hvdWxkIGhhdmUgU0ltb2RlLAorCW5vdCBDQ21vZGUuCisJKGluZGV4ZWQgYWRkcmVzc2luZyBtb2RlIHBhdHRlcm5zKTogTmV3IHBhdHRlcm5zIHRvIHVzZSBpbmRleGVkCisJYWRkcmVzc2luZyBpZiBwb3NzaWJsZS4KKwkqIHBhLmMgCShvdXRwdXRfYW5kKTogRG8gaGFuZGxlIChjb25zdF9pbnQgMCkgYXMgYW4gb3BlcmFuZDsgaXQKKwlzZWVtcyB0byBvY2N1ciBpbiB1bm9wdGltaXplZCBjb21waWxhdGlvbi4KKwkqIHBhLmggCShSRUdOT19PS19GT1JfRlBfUCk6IExvZ2ljIGJ1Zy4KKwkqIHZhLXBhLmggOiBXaGVuIF9fR05VQ19fID09IDEsIGRvbid0IGluY2x1ZGUgdGhlIGdjYyAxIHZhcmFyZ3MKKwlmaWxlICh2YS1ocDlrOC5oKS4gIEluc3RlYWQsIHRoZSBkZWZpbml0aW9ucyBhcmUgZXhwbGljaXRseSBkZWZpbmVkCisJaGVyZS4gIFRoaXMgYXZvaWRzIG11bHRpcGxlIHR5cGVkZWZzIG9mIHZhX2xpc3QuCisJKiB4bS1wYS5oIChIQVZFX1ZQUklOVEYpIERlZmluZSBpbiBIUFVYIDguMC4KKworCSogcGEubWQJKG11bHNpKTogVXNlIHRoZSBoYXJkd2FyZSBtdWx0aXBseSBpbnN0cnVjdGlvbiwgeG1weXUsIGlmCisJVEFSR0VUX1NOQUtFLiAKKwkodW11bHNpZGkzKTogTmV3IHBhdHRlcm4uCisJKHJlbG9hZF9pbnNpLCByZWxvYWRfb3V0c2ksIHJlbG9hZF9pbmRpLCByZWxvYWRfb3V0ZGkpOiBOZXcKKwlwYXR0ZXJucy4gIFRoZXNlIGFyZSBuZWVkZWQgYmVjYXVzZSBTSW1vZGUgYW5kIERJbW9kZSBwc2V1ZG9yZWdzCisJbWF5IGJlIGFsbG9jYXRlZCAob3IgcmVsb2FkZWQpIGluIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBmb3IKKwltdWx0aXBsaWNhdGlvbi4gVGhhdCBtZWFucyB0aGF0IHRoZWlyIGFkZHJlc3Nlcywgd2hpY2ggd2VyZQorCWxlZ2l0aW1hdGUgZm9yIFNJbW9kZSBhbmQgREltb2RlLCBhcmVuJ3QgdmFsaWQgYW55IG1vcmUuCisJKG1vdnNpLCBtb3ZoaSwgbW92cWksIG1vdmRmLCBtb3ZkaSwgbW92c2YpOiBQYXNzIG51bGwgc2NyYXRjaAorCW9wZXJhbmQgdG8gZW1pdF9tb3ZlX3NlcXVlbmNlLiAKKwkoZnAgU0ltb2RlIGxvYWQgYW5kIHN0b3JlIHBhdHRlcm5zKTogTW92ZSBiZWZvcmUgbWFpbiBtb3ZzaQorCXBhdHRlcm4uIAorCShmcCBESW1vZGUgbG9hZCBhbmQgc3RvcmUgcGF0dGVybnMpIE5ldyBwYXR0ZXJucy4KKwkobW92aGksIG1vdnFpIHBhdHRlcm5zKTogU3VwcG9ydCBtb3ZlcyB0by9mcm9tIGZwIHJlZ2lzdGVycy4KKwkobW92ZGYgcGF0dGVybik6IEVuc3VyZSBhdCBsZWFzdCBvbmUgb3BlcmFuZCBpcyBhIHJlZ2lzdGVyLgorCSogcGEuYyAJKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IFRha2UgcmVsb2FkIHNjcmF0Y2ggcmVnaXN0ZXIKKwlhcmd1bWVudCwgZGVhbCB3aXRoIHJlbG9hZHMgb2YgU0ltb2RlIGFuZCBESW1vZGUgbWVtcyBpbnRvCisJZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLCBoYW5kbGUgZnVuY3Rpb25fbGFiZWxfb3BlcmFuZCBtb3Zlcy4KKwkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IEEgc2NyYXRjaCByZWdpc3RlciBpcyBuZWVkZWQgaWYKKwlyZWxvYWRpbmcgYSBmdW5jdGlvbl9sYWJlbF9vcGVyYW5kIGFkZHJlc3MgKHByb2JhYmx5IGRvZXNuJ3QKKwloYXBwZW4pIG9yIGFuIFNJbW9kZSBvciBESW1vZGUgdmFsdWUgaW50by9vdXQgb2YgYSBmbG9hdGluZworCXBvaW50IHJlZ2lzdGVyLgorCSogcGEuaCAJKHJlZ19jbGFzcywgUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMsCisJUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogRGVmaW5lIGEgbmV3IHJlZ2lzdGVyIGNsYXNzCisJRlBfT1JfU05BS0VfRlBfUkVHUywgdXNlZCBvbmx5IGJlIHJlbG9hZF97aW4sb3V0fXtzaSxkaX0uIAorCShIQVJEX1JFR05PX01PREVfT0spOiBBbGxvdyBhbGwgaW50ZWdlciBtb2RlcyBpbiBTbmFrZSBmbG9hdGluZworCXBvaW50IHJlZ2lzdGVycy4gIFFJbW9kZSBhbmQgSEltb2RlIHBzZXVkb3JlZ3MgbWF5IGVuZCB1cCB0aGVyZQorCXdoZW4gdXNpbmcgeG1weXUuCisKKwkqIHBhLm1kCShwaWMgc3ltYm9saWMgYWRkcmVzcyBwYXR0ZXJuKTogTmV3IHBhdHRlcm4uCisJKG1vdnNpLCBtb3ZkaSBwYXR0ZXJucyk6IFJlbW92ZSBzb21lICogY29uc3RyYWludHMgZnJvbSBmcCByZWdpc3RlcnMuCisJKHBpYyBsYWJlbCBhZGRyZXNzIHBhdHRlcm4pOiBGaXggdHlwby4KKwkoZnVuY3Rpb25fbGFiZWxfb3BlcmFuZCBwYXR0ZXJucyk6IE5ldyBwYXR0ZXJucyBmb3IgbG9hZGluZyBhCisJbGFiZWwgYWRkcmVzcyBpbiBIUFVYIDguMC4KKwkqIHBhLmMgKGZpbmFsaXplX3BpYyk6IE5vIHJlYWwgaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5IGZvciBwaWMuCisJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFNhdmUgcjE5LCB0aGUgcGljIG9mZnNldCB0YWJsZQorCXJlZ2lzdGVyLiAgSWYgcHJvZmlsaW5nLCBzYXZlIGFuZCByZXN0b3JlIHRoZSBzdHJ1Y3R1cmUgdmFsdWUKKwlyZXR1cm4gcmVnaXN0ZXIgKHIyOCkgYXJvdW5kIHRoZSBjYWxsIHRvIG1jb3VudC4KKwkoaHBwYV9lbmNvZGVfbGFiZWwsIGZ1bmN0aW9uX2xhYmVsX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgorCVJlY29yZCBpZiBhIGxhYmVsIGlzIGEgY29kZSBsYWJlbCBzbyBpdCBjYW4gYmUgdHJlYXRlZCBzcGVjaWFsbHkKKwlpbiBIUFVYIDguMC4KKwkqIHBhLmggKFRBUkdFVF9TSEFSRURfTElCUyk6IE5ldyBmbGFnLiAgR2VuZXJhdGUgY29kZSB0aGF0IGNhbiBiZQorCWxpbmtlZCB3aXRoIEhQVVggOC4wIHNoYXJlZCBsaWJyYXJpZXMuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IE5ldyBmbGFnczogLW1zaGFyZWQtbGlicyBhbmQgLW1uby1zaGFyZWQtbGlicy4KKwkoUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pOiBUaGlzIGlzIHJlYWxseSByMTkuICBUaGUgcHJlbGltaW5hcnkKKwlkb2NzIGZyb20gSFAgd2VyZSB3cm9uZy4JCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBTcGVjaWZ5ICJFTlRSWSIgcGFyYW0gaW4gLkVYUE9SVAorCWRpcmVjdGl2ZS4KKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IEVuY29kZSBmdW5jdGlvbiBsYWJlbHMuCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBEZWFsIHdpdGggZnVuY3Rpb24gbGFiZWxzLgorCShBU01fT1VUUFVUX1JFR19QVVNILCBBU01fT1VUUFVUX1JFR19QT1ApOiBEb24ndCBkbyBhbnl0aGluZyBmb3IKKwlub3c7IHRoZWlyIG9ubHkgdXNlIChzYXZpbmcgc3R1ZmYgZHVyaW5nIHByb2ZpbGluZykgaW50ZXJhY3RzIGluIGEKKwl3aWVyZCB3YXkgd2l0aCByZXF1aXJlZCBhc3NlbWJsZXIgZGlyZWN0aXZlcyBhdCB0aGUgc3RhcnQgb2YgYQorCWZ1bmN0aW9uLiAgSW5zdGVhZCwgZG8gdGhlIHNhdmUgYW5kIHJlc3RvcmUgaW4gdGhlIGZ1bmN0aW9uCisJcHJvbG9ndWUuCisJKGhwcGFfZW5jb2RlX2xhYmVsKTogRGVjbGFyZS4KKwkqIHBhLWhwdXguaCwgcGEtZ2hwdXguaCAoVEFSR0VUX0RFRkFVTFQpOiBMaW5rIGFnYWluc3Qgc2hhcmVkCisJbGlicmFyaWVzLgorCShMSU5LX1NQRUMpOiBEb24ndCBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcyBpZiBkZWJ1Z2dpbmcgb3IKKwlwcm9maWxpbmcuIAorCSogcGExLWhwdXguaCwgcGExLWdocHV4LGggKFRBUkdFVF9ERUZBVUxUKTogTGluayBhZ2FpbnN0IHNoYXJlZAorCWxpYnJhcmllcy4gCisKK1dlZCBPY3QgMTQgMTA6MTc6NDkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZ2NjLnh0YXIpOiBDb3B5IHRoZSBvYmpjIHN1YmRpci4KKwkobW9zdGx5Y2xlYW4pOiBSdW4gdGhlIG1vc3RseWNsZWFuIHRhcmdldCBpbiB0aGUgb2JqYyBzdWJkaXIuCisJKG9iamMtcnVudGltZSwgbGlib2JqYy5hLCBzdWJsaWJvYmpjLmEpOiBOZXcgdGFyZ2V0cy4KKwkob2JqYywgb2JqZWN0aXZlLWMpOiBEZXAgb24gb2JqYy1ydW50aW1lLgorCisJKiBvYmpjLyo6IE5ldyBmaWxlcy4KKworV2VkIE9jdCAxNCAwNzoxNzoxOSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5tZCAoc21heCwgc21pbik6IEZpeCB0eXBvIGluIG91dHB1dCBzdHJpbmdzLgorCisJKiBhMjlrLmMgKGNvbnN0XzE2X29wZXJhbmQsIGNvbnN0XzI0X29wZXJhbmQpOiBGaXggdHlwbyBpbiBkZWNsYXJhdGlvbgorCW9mIE1PREUuCisJKGdwY19yZWdfb3JfaW1tZWRpYXRlX29wZXJhbmQsIGFuZF9vcGVyYW5kLCBhZGRfb3BlcmFuZCk6IExpa3dpc2UuCisKK1dlZCBPY3QgMTQgMDA6MTI6MTYgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChSVFhfQ09TVCk6IEZpeCBzcGFjaW5nIHR5cG8uCisKK1R1ZSBPY3QgMTMgMjE6NTE6MDUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBhMjlrLm1kIChjYWxsLCBjYWxsX3ZhbHVlKTogRG9uJ3QgdXNlIGNhbGxfb3BlcmFuZCwgc2luY2UKKwljaGVja2luZyBmb3IgcmVjdXJzaXZlIGNhbGxzIGF0IHRoaXMgcG9pbnQgaXMgbm90IHNhZmUuCisKK1R1ZSBPY3QgMTMgMTg6NTI6MTcgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGUyLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogVGVsbCB0aGVtIHRvIHdyaXRlIHRvIGJ1Zy1nKysuCisKK1R1ZSBPY3QgMTMgMTg6MTY6MTIgMTk5MiAgQ2hyaXMgU21pdGggIChjc21pdGhAY29udmV4LmNvbSkKKworCSogY29udmV4LmggKFBfdG1wZGlyKTogZGVmaW5lIHRvIHVzZSAvdG1wLgorCShSRVRVUk5fUE9QU19BUkdTKTogY29ycmVjdCBkZWZpbml0aW9uIHRvIHJldHVybiBzaXplLgorCShBU01fSURFTlRJRllfR0NDKTogb3V0cHV0IHNvbWV0aGluZyBiZXR3ZWVuIGdjYzJfY29tcGlsZWQgYW5kCisJZmlyc3QgZnVuY3Rpb24gdG8ga2VlcCBnY2MyX2NvbXBpbGVkIG91dCBvZiBhc3NlbWJsZXIgc3RhYnMuCisKKwkqIGNvbnZleC5tZCAoYWRkZGkzLCBvcmRpMywgeG9yZGkzKTogY2hlY2sgc2lnbiBvZiBDT05TVF9JTlQKKwlvcGVyYW5kcyBiZWZvcmUgdXNpbmcgYXMgaW1tZWRpYXRlczsgdGhlc2UgaW5zbnMgYXJlIHdvcmQgb25seS4KKwkoYXNocmRpMyk6IGRvbid0IHVzZSBuZWdhdGl2ZSBzaGlmdCBjb3VudHMuCisKKwkqIGNvbnZleCouaCAoQ1BQX1NQRUMpOiBkZWZpbmUgX19OT19JTkxJTkVfU1RETElCCisKKwkqIHhtLWNvbnZleC5oOiByZW1vdmUgdGVtcG9yYXJ5IHdvcmthcm91bmQgZnJvbSBPUyA4LjAuCisKK1R1ZSBPY3QgMTMgMTQ6MTA6MTUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoY2hlY2tfbmV3bGluZSk6IFZlcmlmeSB0aGF0IG1haW5faW5wdXRfZmlsZW5hbWUgaXMKKwl2YWxpZCBiZWZvcmUgdXNpbmcgaXQuCisKK1R1ZSBPY3QgMTMgMTk6MDg6NTQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5jOiBOb3cgaW5jbHVkZXMgcmVsb2FkLmguCisJKHNwZWNfcmVnX29wZXJhbmQpOiBWYWxpZGF0ZSBtb2RlIGFuZCBrbm93IHRoYXQgc29tZSByZWdzIHN1cHBvcnQKKwlNT0RFX1BBUlRJQUxfSU5UIGFuZCBzb21lIE1PREVfSU5ULgorCShjYWxsX29wZXJhbmQsIHJlbG9hZF9tZW1vcnlfb3BlcmFuZCwgYTI5a19nZXRfcmVsb2FkZWRfYWRkcmVzcykKKwkgTmV3IGZ1bmN0aW9ucy4KKwkoaW5fb3BlcmFuZCk6IEFsbG93IGNvbnN0YW50cyB3aXRoIE1PREVfUEFSVElBTF9JTlQuCisJKG91dF9vcGVyYW5kKTogQWxsb3cgc3BlY2lhbCByZWdpc3RlcnMgd2l0aCBhbnkgbW9kZS4KKwlBbnkgTUVNIGEgd29yZCBvciB3aWRlciBpcyB2YWxpZC4KKwkoZXh0ZW5kX29wZXJhdG9yKTogRGVsZXRlZC4KKwkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IEEgcHNldWRvIGlzIHRoZSBzYW1lIGFzIG1lbW9yeTsgd2UgbmVlZAorCUJQX1JFR1MgZm9yIG11bHRpLXdvcmQgbWVtb3J5IG9yIGZvciBieXRlcyBhbmQgaGFsZndvcmQgaWYgLW1uZHcuCisJKHByaW50X29wZXJhbmQpOiBEZWxldGUgJVg7IGFkZCAlbS4KKwkocHJpbnRfb3BlcmFuZCwgY2FzZSAnRicpOiBDaGVjayBmb3IgU1lNQk9MX1JFRi4KKwkqIGEyOWsuaCAoUFJPTU9URV9NT0RFLCBBREpVU1RfQ09TVCk6IE5ldyBtYWNyb3MuCisJKENBTExfVVNFRF9SRUdJU1RFUlMpOiBMUjAgaXMgY2FsbC11c2VkLgorCShIQVJEX1JFR05PX01PREVfT0spOiBIYW5kbGUgTU9ERV9QQVJUSUFMX0lOVCBhbmQgdGhlIHNwZWNpYWwKKwlyZWdpc3RlcnMgdGhhdCBjYW4gb25seSBob2xkIHRob3NlIG1vZGVzLgorCShNT0RFU19USUVBQkxFX1ApOiBDbGVhbiB1cCBhbmQgaGFuZGxlIE1PREVfUEFSVElBTF9JTlQgbW9kZXMuCisJKGVudW0gcmVnX2NsYXNzLCBSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUyk6IEFkZCBuZXcKKwljbGFzc2VzIExSMF9SRUdTLCBGQ19SRUdTLCBhbmQgQ1JfUkVHUy4KKwkoUkVHTk9fUkVHX0NMQVNTLCBSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBMaWtld2lzZS4KKwkoUFJFRElDQVRFX0NPREVTKTogVXBkYXRlIGZvciBuZXcgYW5kIGRlbGV0ZWQgcHJlZGljYXRlcy4KKwkqIGEyOWsubWQ6IFVzZSBHRU5fSU5UIHdoZW4gYXBwcm9wcmlhdGUuCisJKGRlZmluZV9hdHRyIHR5cGUpOiBOZXcgdHlwZXMgZm9yIFNRUlQuCisJKGNhbGwgcGF0dGVybnMpOiBVc2UgU0NSQVRDSCBmb3IgTFIwLgorCVVzZSBuZXcgcHJlZGljYXRlIGNhbGxfb3BlcmFuZCBzbyB0aGF0IHNvbWUgaW50ZWdlcnMgY2FuIGJlCisJdXNlZCBhcyBhZGRyZXNzZXM7IGZpeCBDQUxMSSBzbyBpdCBkb2Vzbid0IGFjY2VwdCBjb25zdGFudC4KKwkoRVhCWVRFLCBFWFRIVywgSU5CWVRFLCBJTkhXKTogVXNlIFpFUk9fRVhURU5EIGluc3RlYWQgb2YgQU5ECisJd2hlbiBjb21iaW5lIHdpbGwgbWFrZSBpdC4KKwlVc2UgUFNJbW9kZSBmb3IgQlAgdmFsdWUgYW5kIGRvbid0IHJlZmVyZW5jZSBCUCBleHBsaWNpdGx5LgorCUNsZWFuIHVwIGRlZmluZV9leHBhbmRzIGZvciB0aGVzZSBvcGVyYXRpb25zLgorCShyb3Rsc2kzKTogVXNlIFBTSW1vZGUgcHNldWRvIGZvciBGQy4KKwkoc2lnbl9leHRlbmQpOiBTaWduIGV4dGVuc2lvbiBpbnNucyBjbG9iYmVyIEJQLgorCSh7bG9hZCxzdG9yZX1fbXVsdGlwbGUpOiBVc2UgUFNJbW9kZSBwc2V1ZG8gZm9yIENSLgorCShNVFNSKTogQWRkIHBhdHRlcm4gZm9yIFRSVU5DQVRFIGZyb20gU0ltb2RlIHRvIFBTSW1vZGUuCisJKHNxcnRzZjIsIHNxcnRkZjIsIG1vdnBzaSk6IE5ldyBwYXR0ZXJucy4KKwkobG9hZC9zdG9yZSBieXRlcy9oYWxmd29yZCk6IENsZWFuIHVwIHRvIGFjY2VwdCB0ZW1wb3JhcmllcyBhcworCWlucHV0IGFuZCB1c2UgUFNJbW9kZSB3aGVuIHJlcXVpcmVkLgorCShtb3ZoaSwgbW92cWkpOiBBbGxvY2F0ZSB0ZW1wb3JhcmllcyBoZXJlLgorCShyZWxvYWRfaW5xaSwgcmVsb2FkX291dHFpLCByZWxvYWRfaW5oaSwgcmVsb2FkX291dGhpKTogTmV3CisJcGF0dGVybnMuCisJKG1vdmRmLCBtb3ZkaSwgbW92dGkpOiBVc2UgU0NSQVRDSCBmb3IgQlAgcmVnaXN0ZXIuCisJKHJlbG9hZF97aW4sb3V0fXtkZixkaSx0aX0pOiBOZXcgcGF0dGVybnMuCisKK1R1ZSBPY3QgMTMgMTY6NTI6MzMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmMuc3ZyNCAoc3lzL3N0cmVhbS5oLCBzeXMvc3Ryc3Vici5oKTogRGVsZXRlIHNwdXJpb3VzIGBleHRlcm4nCisJaW4gdmFyaW91cyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCisKKwkqIHJ0bGFuYWwuYyAoc2luZ2xlX3NldCk6IEZpeCB0eXBvIGluIFJFR19VTlVTRUQgY2hlY2suCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogSW5zdXJlIHRoYXQgZm9sZGVkID4+IGV4dGVuZHMKKwl0aGUgc2lnbiBldmVuIGlmIHRoZSBob3N0IGJvb3RzdHJhcCBjb21waWxlciBkb2Vzbid0LgorCisJKiBmaW5hbC5jIChvdXRwdXRfYXNtX2luc24pOiBBZHZhbmNlIG92ZXIgdGhlID0gd2hlbiBwcm9jZXNzaW5nICU9LgorCisJKiBmaXhpbmNsdWRlcyAoc3RkaW8uaCk6IEZpeCB2YV9saXN0IHdoZW4gcHJlY2VlZGVkIGJ5IGEgKi4KKworVHVlIE9jdCAxMyAxNDo1Mjo1NyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzcGMtc29sMi5oIChTVEFSVEZJTEVfU1BFQyk6IEFkZCBjcnRiZWdpbi5vLgorCShMSUJfU1BFQyk6IEFkZCBjcnRlbmQubyBmb3IgcnVubmluZyBjdG9ycy9kdG9ycy4KKwkqIHQtc29sMiAoRVhUUkFfUEFSVFMpOiBBZGQgY3J0YmVnaW4ubyBhbmQgY3J0ZW5kLm8gZm9yIEMrKy4KKwkoRklYSU5DTFVERVMpOiBEZWxldGVkLgorCSogY29uZmlndXJlIChzcGFyYy0qLXNvbGFyaXMyKik6IFNldCBmaXhpbmNsdWRlcyBoZXJlLgorCitUdWUgT2N0IDEzIDIwOjE1OjQ1IDE5OTIgIEVyaWMgWW91bmdkYWxlICh5b3VuZ2RhbGVAdjY1NTBkLm5ybC5uYXZ5Lm1pbCkKKworCSogbWFrZS1jYzEuY29tOiBTaW1wbGlmeSBleHRyYWN0aW9uIG9mIFlZRU1QVFkgZnJvbSBjcC1wYXJzZS5jLgorCUdlbmVyYXRlIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55IGZyb20gYy1wYXJzZS5pbiBpZiByZXF1aXJlZC4KKwlQYXQgUmFua2luIGRpZCBzb21lIG9mIHRoaXMuCisKK1R1ZSBPY3QgMTMgMTQ6MDY6NDUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAoaW5fYnJhbmNoX2RlbGF5KTogQWxsb3cgZnBsb2FkIGFuZCBmcHN0b3JlLgorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogT25seSBpbnN0YWxsIGEgc2lnbmFsIGhhbmRsZXIgZm9yIHNpZ25hbHMKKwl0aGF0IGFscmVhZHkgaGF2ZSBoYW5kbGVycy4KKwkoZm9ya19leGVjdXRlKTogRG9uJ3QgaWdub3JlIHNpZ25hbHMgYmVmb3JlIGNhbGxpbmcgZG9fd2FpdC4KKworCSogaTk2MC5tZDogQ2hhbmdlICdmJyBjb25zdHJhaW50IGZvciBkZXN0IHRvICcqZicgaWYgaXQgaXMgbm90IHRoZQorCW9ubHkgYWx0ZXJuYXRpdmUuICBBZGQgJypmJyBkZXN0IGNvbnN0cmFpbnRzIHRvIGFsbCBwYXR0ZXJucyB3aGVyZQorCWl0IGlzIHZhbGlkIGJ1dCB3YXMgcHJldmlvdXNseSBtaXNzaW5nLgorCisJKiBpOTYwLmggKE9WRVJSSURFX09QVElPTlMpOiBFbmFibGUgZnVuY3Rpb24gaW5saW5pbmcuCisJKiBpOTYwLmMgKGcxNF9zYXZlX3JlZyk6IERlbGV0ZSB2YXJpYWJsZS4KKwkoaTk2MF9vdXRwdXRfY2FsbF9pbnNuKTogQWRkIHR3byBuZXcgcGFyYW1ldGVycyBhcmdfcG9pbnRlciBhbmQKKwlzY3JhdGNoX3JlZy4gIFNhdmUvc2V0L3Jlc3RvcmUgZzE0IGlmIG5lY2Vzc2FyeS4KKwkoaTk2MF9leHBhbmRfY2FsbCk6IERlbGV0ZSBmdW5jdGlvbi4KKwkqIGk5NjAubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBObyBsb25nZXIgY2FsbCBpOTYwX2V4cGFuZF9jYWxsLAorCWluc3RlYWQgY2FsbCBjYWxsX2ludGVybmFsL2NhbGxfdmFsdWVfaW50ZXJuYWwgcGF0dGVybi4KKwkoY2FsbF9pbnRlcm5hbCwgY2FsbF92YWx1ZV9pbnRlcm5hbCk6IFJld3JpdGUgcGF0dGVybnMgdG8gcGFzcyBuZXcKKwlhcmdzIHRvIGk5NjBfb3V0cHV0X2NhbGxfaW5zbi4KKworCSogc3BhcmMubWQgKG1vdnN0cnNpKzEpOiBBZGQgYCsnIHRvIGNvbnN0cmFpbnRzIGZvciBjbG9iYmVyZWQgaW5wdXRzLgorCisJKiBpOTYwLmMgKGk5NjBfb3V0cHV0X2NhbGxfaW5zbik6ICBFbWl0IGJ4IGluc3RlYWQgb2YgYiwgY2FsbHgKKwlpbnN0ZWFkIG9mIGNhbGxqLgorCisJKiBzcGFyYy5jIChzcGFyY19mcndfb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogRnJhbWUgcG9pbnRlciBiYXNlCisJbXVzdCBiZSBzYW1lIGFzIGZvciByZWd1bGFyIHNwYXJjIGNvZGUuCisKK1R1ZSBPY3QgMTMgMDY6MDI6MDMgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSk6IFZlcmlmeSB0aGF0IG1heF91aWRfZm9yX2xvb3AgaXMgc3RpbGwKKwlsYXJnZXIgdGhhbiB0aGUgdWlkIG9mIGFueSBpbnNuLiAgSW5jcmVhc2UgdGhlIG51bWJlciBvZiBleGl0CisJYmxvY2tzIGZyb20gNCB0byAzMiBwZXIgbG9vcC4KKwkoZmluZF9hbmRfdmVyaWZ5X2xvb3BzKTogU3RvcCB0cnlpbmcgdG8gcmVsb2NhdGUgZXhpdCBibG9ja3Mgd2hlbgorCWFsbG9jYXRpbmcgYSBuZXcgbGFiZWwgd291bGQgZXhjZWVkIG1heF91aWRfZm9yX2xvb3AuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBEb24ndCBjaGFuZ2UgYSBjb25kaXRpb25hbCBicmFuY2ggaW50byBhCisJY29uZGl0aW9uYWwgbW92ZS4KKworCSogbTg4ay5tZCAoZXh0IHNoaWZ0IHBhdHRlcm5zKTogTm8gbG9uZ2VyIG5lZWRlZC4KKworCSogbTg4ay5jIChtb3N0bHlfZmFsc2VfanVtcCk6IFJlY29nbml6ZSBhIHNlcXVlbmNlIHByb3Blcmx5LgorIAorTW9uIE9jdCAxMiAyMjozMTozNyAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IEZpeCB0eXBvLgorCitUdWUgT2N0IDEzIDAwOjE0OjA5IDE5OTIgIEggTHUgIChobHVAZWVjcy53c3UuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBQdXQgLSBvbiBjbWQgdGhhdCBoYW5kbGVzIHByb3RvaXplLgorCShnY2MubywgY2NjcC5vKTogRGVmaW5lIFRPT0xESVIgZm9yIHRoZSBjb21waWxhdGlvbi4KKwkoYWxsIEhPU1RfUFJFRklYXzEgdGFyZ2V0cyk6IEZpeCB0eXBvcy4KKworCSogeC1saW51eCAoY3BwLmEsIGxpbnV4LmEsIGNjMS5hLCBjYzFwbHVzLmEsIGdjYy5hKTogVGFyZ2V0cyBkZWxldGVkLgorCShMRCwgQUxJQlMsIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVgsIEdQTFVTUExVU19JTkNMVURFX0RJUik6CisJVmFycyBkZWxldGVkLgorCisJKiBpMzg2bGludXguaDogRGVsZXRlIE5PX0pVTVBUQUJMRSBjb25kaXRpb25hbCBhbmQgY29udGVudHMuCisJKEdQTFVTUExVU19JTkNMVURFX0RJUik6IERlZmluZWQuCisJKFNUQVJURklMRV9TUEVDKTogQ2hhbmdlZC4KKworCSogZ2VuKi5jOiBJbmNsdWRlIGhjb25maWcuaCwgbm90IGNvbmZpZy5oLgorCitNb24gT2N0IDEyIDE2OjI1OjIyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlLmJhdCwgdm1zY29uZmlnLmNvbTogTWFrZSBoY29uZmlnLmguCisKKwkqIHZheC5oIChQUklOVF9PUEVSQU5EKTogRGV0ZWN0IGBkb3VibGUnIGNvbnN0YW50cyBieSBERm1vZGUsCisJc2luY2UgVk9JRG1vZGUgbWVhbnMgYW4gaW50ZWdlci4KKworCSogbWlwcy5oIChERUJVR19SRUdJU1RFUl9OQU1FUyk6IE5ldyBtYWNybyBkZWZpbml0aW9uLgorCSogcHJpbnQtcnRsLmMgKHJlZ19uYW1lcyk6CisJTWFrZSBpdCBzdGF0aWMuICBVc2UgREVCVUdfUkVHSVNURVJfTkFNRVMgaWYgdGhhdCdzIGRlZmluZWQuCisJKiByZWdjbGFzcy5jIChyZWdfbmFtZXMpOiBSZWluc3RhdGUgdGhlIGRlZmluaXRpb24gaGVyZS4KKworCSogZml4aW5jLnN2cjQ6IERlbGV0ZSBleGNlc3MgZmkgaW4gZml4aW5nIHN0YXQuaC4KKworTW9uIE9jdCAxMiAwODoxMDozNyAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoanJ2QGdvbGRtYW4uZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWZpeGluY2x1ZGVzKTogT25seSBkZWxldGUgYW4gZXhpc3RpbmcKKwlzeXNsaW1pdHMuaCBpZiB3ZSBpbnN0YWxsIGxpbWl0cy5oIG92ZXIgaXQuCisKKwkqIGkzODYuaCAoUFJJTlRfUkVHKTogVW5kbyBPY3QgMTEgY2hhbmdlLgorCShERUJVR19QUklOVF9SRUcpOiBOZXcgbWFjcm8sIHVzZWQgZnJvbSBwcmludC1ydGwuYy4KKworCSogY29uZGl0aW9ucy5oIChDQ19OT1RfU0lHTkVEKTogTmV3IG1hY3JvLgorCSogZmluYWwuYyAoYWx0ZXJfY29uZCk6IElmIENDX05PVF9TSUdORUQsIGNvbnZlcnQgc2lnbmVkCisJY29uZGl0aW9ucyB0byB1bnNpZ25lZC4KKworCSogaTM4Ni5tZCAoY21wc3RyTSBwYXR0ZXJucyk6IENvbXBhcmUgc3RyaW5ncyBvZiB1bnNpZ25lZCBjaGFycywKKwlub3Qgc3RyaW5ncyBvZiBzaWduZWQgY2hhcnMuCisKK01vbiBPY3QgMTIgMDY6MzE6MTMgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFNhdmUgREVTVCBvZiBOSTJQQVQgYmVmb3JlIGNhbGxpbmcKKwlyZWNvZ19mb3JfY29tYmluZSwgd2hpY2ggbWlnaHQgbWFrZSBpdCBhIFBBUkFMTEVMLgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBBbGxvdyBNT0RFX1BBUlRJQUxfSU5UIHdoZXJlCisJTU9ERV9JTlQgaXMgYWxsb3dlZC4KKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IFByb3Blcmx5IGNhbGwgc2luZ2xlX3NldCB3aGVuIHZhbGlkYXRpbmcKKwl0aGUgcmVzdWx0IG9mIGEgZGVmaW5lX3NwbGl0LgorCitNb24gT2N0IDEyIDAwOjI0OjI5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAoY2FsbHNfYWxsb2NhKTogRG9uJ3QgbG9vayB3aXRoaW4gREVDTF9JTklUSUFMIGlmIGl0J3MgMC4KKworCSogdmFyYXNtLmMgKHNpbXBsaWZ5X3N1YnRyYWN0aW9uKTogTmV3IGZ1bmN0aW9uLgorCSogcnRsLmggKHNpbXBsaWZ5X3N1YnRyYWN0aW9uKTogRGVjbGFyZWQuCisJKiBmaW5hbC5jIChvdXRwdXRfYWRkcl9jb25zdCk6IENhbGwgaXQuCisKKwkqIHByaW50LXJ0bC5jIChERUJVR19QUklOVF9SRUcpOiBSZW5hbWVkIGZyb20gUFJJTlRfUkVHLgorCShwcmludF9ydHgpOiBVc2UgREVCVUdfUFJJTlRfUkVHLgorCitTdW4gT2N0IDExIDE2OjI3OjUzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUuZWR1KQorCisJKiBnZW5yZWNvZy5jIChtZXJnZV90cmVlcyk6IFdoZW4gc3BsaXR0aW5nLCByZW1lbWJlciB0byBjbGVhciBEVVBOTworCWluIGFkZGl0aW9uIHRvIHRoZSBvdGhlciB0aGluZ3Mgd2UgY2FuIHRlc3QuCisKKwkqIHJlY29nLmMgKGdlbmVyYWxfb3BlcmFuZCwgaW1tZWRpYXRlX29wZXJhbmQsIGNvbnN0X2RvdWJsZV9vcGVyYW5kKToKKwlBbGxvdyBDT05TVF9JTlQgd2l0aCBNT0RFX1BBUlRJQUxfSU5ULgorCShub25tZW1vcnlfb3BlcmFuZCk6IExpa2V3aXNlLgorCitTdW4gT2N0IDExIDA3OjUzOjM5IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogeG0taTM4djQuaCx4bS1haXgzODYuaCAoVVNFX0NfQUxMT0NBKTogTmV3IG1hY3JvLiAgRGVmaW5lIGlmIG5vdAorCXVzaW5nIEdOVSBDJ3MgYnVpbHRpbiBhbGxvY2EuCisKKwkqIGkzODYuYyAobm90aWNlX3VwZGF0ZV9jYyk6IE9ubHkgc2V0IENDX0lOXzgwMzg3IGZvciBmbG9hdCBjb21wYXJlcy4KKworCSogaTM4Ni5oIChQUklOVF9SRUcpOiBNYWtlIHJlZ2lzdGVyIG5hbWUgYXJyYXlzIHN0YXRpYyB3aXRoaW4gdGhpcworCW1hY3JvLgorCitTdW4gT2N0IDExIDAxOjQxOjA2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRG9uJ3Qgb3B0aW1pemUganVtcHMgdG8gc3RvcmUtZmxhZyBpbnNucworCXdoZW4gQkxLbW9kZSB2YWx1ZXMgYXJlIGJlaW5nIGNvbXBhcmVkLgorCitTYXQgT2N0IDEwIDE2OjUxOjA4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IFByaW50IGhhcmQgcmVnIG5hbWUgYXMgd2VsbCBhcyBudW1iZXIuCisJKFBSSU5UX1JFRyk6IE5ldyBtYWNybyB3aXRoIGRlZmF1bHQgZGVmaW5pdGlvbi4KKwkocmVnX25hbWUpOiBNb3ZlZCBoZXJlLgorCSogcmVnY2xhc3MuYyAocmVnX25hbWUpOiBEZWxldGVkLgorCitTYXQgT2N0IDEwIDAyOjI3OjE0IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4NnNjby5oIChUQVJHRVRfREVGQVVMVCk6IE5ldyBtYWNybyAtIGRvbid0IG1ha2UgVEFSR0VUX0lFRUVfRlAKKwlkZWZhdWx0IGZvciBTQ08uCisKK1NhdCBPY3QgMTAgMDQ6NTI6MDYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBOZXcgZmllbGRzIGNvbnN0X3J0eF9oYXNoX3RhYmxlLAorCWNvbnN0X3J0eF9zeW1faGFzaF90YWJsZSwgZmlyc3RfcG9vbCwgbGFzdF9wb29sLCBwb29sX29mZnNldC4KKwkqIGZ1bmN0aW9uLmMgKHBvcF9mdW5jdGlvbl9jb250ZXh0LCBwdXNoX2Z1bmN0aW9uX2NvbnRleHQpOgorCUNhbGwge3NhdmUscmVzdG9yZX1fdmFyYXNtX3N0YXR1cy4KKwkqIHZhcmFzbS5jOiBJbmNsdWRlIGZ1bmN0aW9uLmguCisJKHJlc3RvcmVfdmFyYXNtX3N0YXR1cywgc2F2ZV92YXJhc21fc3RhdHVzKTogTmV3IGZucy4KKwkoaW5pdF9jb25zdF9ydHhfaGFzaF90YWJsZSk6IEFsbG9jYXRlIHRoZSBoYXNoIHRhYmxlcyBpbiBvYnN0YWNrLgorCShmb3JjZV9jb25zdF9tZW0pOiBEb24ndCB1c2UgQ09OU1RfRE9VQkxFX01FTSBmb3IgbmVzdGVkIGZucy4KKwkoY2xlYXJfY29uc3RfZG91YmxlX21lbSk6IERvIG5vdGhpbmcgZm9yIG5lc3RlZCBmbnMuCisJKiBNYWtlZmlsZS5pbiAodmFyYXNtLm8pOiBEZXAgb24gZnVuY3Rpb24uaC4KKworRnJpIE9jdCAgOSAxODoxNjoxOCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE9ubHkgZmluZCBvdXQgaWYgb2xkZGVjbCBpcyBhCisJZnJpZW5kIGFmdGVyIHdlIGtub3cgaXQncyBub3QgYSBUUkVFX0xJU1QuCisKK0ZyaSBPY3QgIDkgMTg6MTA6MTkgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBnZWVjaC5nbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMuYyAoc3BhcmNfdHlwZV9jb2RlKTogUmV0dXJuIHJlYXNvbmFibGUgcmVzdWx0IGZvciBDT01QTEVYX1RZUEUuCisKK0ZyaSBPY3QgIDkgMTQ6MzM6MjYgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIHJlb3JnLmMgKHN0YXJ0X29mX2VwaWxvZ3VlX25lZWRzKTogTmV3IHZhcmlhYmxlLgorCShtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBBZGQgaW4gc3RhcnRfb2ZfZXBpbG9ndWVfbmVlZHMgd2hlbgorCU5PVEVfSU5TTl9FUElMT0dVRV9CRUcgaXMgc2Nhbm5lZC4KKwkoZGJyX3NjaGVkdWxlKTogQ29tcHV0ZSBzdGFydF9vZl9lcGlsb2d1ZV9uZWVkcyBhbmQgdXBkYXRlCisJZW5kX29mX2Z1bmN0aW9uX25lZWRzIHRvIGluY2x1ZGUgc2V0cyBieSBhbGwgaW5zdHJ1Y3Rpb25zCisJZm9sbG93aW5nIE5PVEVfSU5TTl9FUElMT0dVRV9CRUcuCisKKwkqIG04OGsubWQgKHJldHVybik6IEFsd2F5cyBhdmFpbGFibGUgb25jZSByZWxvYWQgaGFzIGNvbXBsZXRlZC4KKwkoZXBpbG9ndWUpOiBVc2UgYSByZXR1cm4gaW5zbiByYXRoZXIgdGhhbiBhbiBpbmRpcmVjdCBqdW1wLgorCitGcmkgT2N0ICA5IDEyOjM2OjU0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3BjLXNvbDIuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lZC4KKworCSogZnVuY3Rpb24uYyAoYWdncmVnYXRlX3ZhbHVlX3ApOiBSZXR1cm4gMSBpZiByZWdzIHdlIHdvdWxkIHVzZQorCWFyZSBub3QgYWxsIGNhbGwtY2xvYmJlcmVkLgorCisJKiBzdG10LmMgKFBPUFNUQUNLKTogUG9wIGRpc2NhcmRlZCBlbHRzIG9mZiBhbGwgdGhlIHN0YWNrcyBhcyB3ZSBnby4KKworRnJpIE9jdCAgOSAwNzozMDoxNCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jIChtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBGaXggYnVnIGluIGxhc3QgY2hhbmdlLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIFNVQlJFRyk6IERvbid0IG1ha2UgYSBuZXcgUkVHIGZvcgorCXN0YWNrLCBmcmFtZSwgb3IgYXJnIHBvaW50ZXIuCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24sIGdlbl9oaWdocGFydCwgb3BlcmFuZF9zdWJ3b3JkKToKKwlMaWtld2lzZS4KKworCSogbG9jYWwtYWxsb2MuYyAob3B0aW1pemVfcmVnX2NvcHlfMSk6IFRpZ2h0ZW4gdXAgY29kZSB0byBwcm9wZXJseQorCWhhbmRsZSB0aGUgY2FzZSB3aGVuIFNSQyBvciBERVNUIGlzIGEgbXVsdGktd29yZCBoYXJkIHJlZ2lzdGVyCisJYW5kIG9ubHkgc29tZSBwYXJ0cyBvZiB0aGUgcmVnaXN0ZXIgYXJlIHNldCBvciB1c2VkLiAgQWxzbywgYXZvaWQKKwl1cGRhdGluZyByZWdpc3RlciBzdGF0dXMgZm9yIERFU1QgaWYgd2UgY2FuJ3QgZG8gdGhlIG9wdGltaXphdGlvbi4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogT25seSB1c2UgYSBSRUcgYXMgYSB0YXJnZXQuCisKKwkqIGFscGhhLmMgKGFscGhhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBEb24ndCB1c2UgdmFsdWUgb2YgTlJFR1MgZ3JlYXRlcgorCXRoYW4gNiB3aGVuIGNvbXB1dGluZyBBUkdTSVpFLgorCisJKiB2YS1hbHBoYS5oICh2YV9hcmcpOiBQdXQgcGFyZW5zIGFyb3VuZCBhbGwgdXNlcyBvZiBfX1ZBIGFyZy4KKworVGh1IE9jdCAgOCAxODo0NTowMCAxOTkyICBBcm5lIEguIEp1dWwgIChhcm5lakBsaXNlLnVuaXQubm8pCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbi1oZWFkZXJzKTogYWRkZWQgbWlzc2luZyAndGhlbicKKworVGh1IE9jdCAgOCAxNTo1MjoyMiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChTRUxFQ1RfUlRYX1NFQ1RJT04pOiBSZW5hbWUgbWFjcm8gZnJvbSBvYnNvbGV0ZSBuYW1lCisJU0VMRUNUX1NFQ1RJT05fTU9ERS4KKworCSogaTM4NnJvc2UuaCAod2hvbGUgZmlsZSk6IFJlbW92ZSAjaWZkZWYgYmVmb3JlICN1bmRlZiBvZiBtYWNyb3MuCisJKExFR0lUSU1BVEVfQ09OU1RBTlRfUCk6IERlZmluZSwgc28gdGhhdCB3aGVuIGhhbGYtcGljIGlzIG9uLAorCWhhbGYtcGljIGFkZHJlc3NlcyBhcmUgbm90IGNvbnNpZGVyZWQgbGVnaXRpbWF0ZS4KKwkoU0VMRUNUX1JUWF9TRUNUSU9OKTogSWYgcHV0dGluZyBhIGhhbGYtcGljIHBvaW50ZXIgdGhhdCBpcworCWxvYWRlZCwgcHV0IHRoZSBwb2ludGVyIGludG8gdGhlIGRhdGEgc2VjdGlvbiwgcmF0aGVyIHRoYW4gdGhlCisJcmVhZG9ubHlfZGF0YV9zZWN0aW9uLgorCShTRUxFQ1RfU0VDVElPTik6IERlZmluZS4KKwkoQVNNX09VVFBVVF9ET1VCTEUpOiBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBlbWl0IGRvdWJsZSBhcyB0d28KKwlsb25ncywgb3RoZXJ3aXNlIGVtaXQgLmRvdWJsZSBkaXJlY3RpdmUuCisJKEFTTV9PVVRQVVRfRkxPQVQpOiBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBlbWl0IGZsb2F0IGFzIGxvbmcsCisJb3RoZXJ3aXNlIGVtaXQgLmZsb2F0IGRpcmVjdGl2ZS4KKwkocGVyZm9ybV9maXhkZnNpKTogQ29weSBhcmcgdG8gbWVtb3J5IHZhcmlhYmxlLgorCShTSVpFX1RZUEUpOiBEZWZpbmUgdG8gYmUgbG9uZyB1bnNpZ25lZCBpbnQuCisJKFBUUkRJRkZfVFlQRSk6IERlZmluZSB0byBiZSBpbnQuCisJKFdDSEFSX1RZUEUpTDogRGVmaW5lIHRvIGJlIHVuc2lnbmVkIGludC4KKworCSogaTM4Ni5tZCAobW92c2kpOiBSZW1vdmUgb2Jzb2xldGUgaGFsZi1waWMgY29kZS4KKwkoY2FsbCBpbnNucyk6IEZvciBoYWxmLXBpYyBpbnNucywgZm9yY2UgYWRkcmVzcyBpbnRvIHJlZ2lzdGVyLgorCitUaHUgT2N0ICA4IDE0OjIyOjA1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uLWhlYWRlcnMpOiBGaXggZGlyIGluIGNobW9kcyBmb3IgYXNzZXJ0LmguCisKKwkqIHZhLWk4NjAuaCAoX19zYXZlcmVnLCB2YV9hcmcpOiBQdXQgdXNlcyBvZiBfX3ZhIGluIHBhcmVucy4KKworCSogdmF4LmggKFBSSU5UX09QRVJBTkQpOiBEZWZpbmUgbmV3IGNvZGUsIEQuCisJKiB2YXgubWQgKG1vdmRpKTogVXNlIEQgY29kZSBmb3Igb3BlcmFuZCAxLgorCitUaHUgT2N0ICA4IDEzOjIzOjI1IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLm1kIChmcF9hbHUgZnVuY3Rpb24gdW5pdCwgY2FzZSBmcGNjKTogRnBjYyBpbnN0cnVjdGlvbnMgdXNlCisJdGhlIGZwYWx1IHVuaXQuICBJbiB0aGUgbW9zdCBjb21tb24gY2FzZSB0aGVpciByZXN1bHQgd2lsbCBiZSB1c2VkCisJaW4gYSBmdGVzdCBpbnN0cnVjdGlvbi4gIE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZmNtcCBhbmQgCisJZnRlc3QgaW5zdHJ1Y3Rpb24gaXMgNC4KKworVGh1IE9jdCAgOCAwNjo0MToxNSAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogUHJvdmlkZSBhIHNhZmUgdmFsdWUgZm9yCisJREVDTF9JTkNPTUlOR19SVEwgaW4gY2FzZSBvZiBzeW50YXggZXJyb3JzLgorCisJKiBkd2FyZm91dC5jIChkd2FyZm91dF9pbml0LCBkd2FyZm91dF9maW5pc2gpOiBEb24ndCBvdXRwdXQgbGFiZWxzCisJb3IgLmRlYnVnX2FyYW5nZXMgZW50cmllcyBmb3IgLmRhdGExIGFuZCAucm9kYXRhMSBhcyB0aGVzZQorCXNlY3Rpb25zIGFyZW4ndCBjdXJyZW50bHkgdXNlZC4KKworVGh1IE9jdCAgOCAwNDo0NDoxNyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jIChtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBMb29rIGF0IFVTRSBpbnNucyBtYWRlIGJ5CisJdXBkYXRlX2Jsb2NrIHdoZW4gc2Nhbm5pbmcgZm9yd2FyZCBwYXN0IHRhcmdldC4KKwkobWFya190YXJnZXRfbGl2ZV9yZWdzLCBkYnJfc2NoZWR1bGUpOiBVc2UgR0VUX1JUWF9DTEFTUy4KKworCSogY3NlLmMgKFBBVEhMRU5HSCk6IENoYW5nZSBmcm9tIDIwIHRvIDEwIHRvIHNwZWVkIHVwIGNvbXBpbGF0aW9ucy4KKworVGh1IE9jdCAgOCAwMzowNzozMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoaW52ZXJ0X3RydXRodmFsdWUpOiBOZXZlciBhbHRlciBBUkcuCisKKwkqIE1ha2VmaWxlLmluIChUQUdTKTogRXhjbHVkZSA9Ki5bY2h5XSBmcm9tIHRhZ3MgdGFibGUuCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogRm9yIGZsb2F0cywgdXNlIFJFQUxfVkFMVUVTX0xFU1MgdG8gZGlzdGluZ3Vpc2gKKwl1bmRlcmZsb3cgZnJvbSBvdmVyZmxvdy4gIERlbGV0ZSBzcGVjaWFsIGNhc2UgZm9yIDAuMC4KKworV2VkIE9jdCAgNyAxNjoyNToxOSAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfe2JlZ2luLGVuZH1fZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb25zLgorCShib2R5X3tiZWdpbixlbmR9X2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbnMuCisJKGR3YXJmX2F0dHJfbmFtZSk6IFByaW50IEFUX2JvZHlfYmVnaW4gYW5kIEFUX2JvZHlfZW5kLgorCShvdXRwdXRfe2xvY2FsLGdsb2JhbH1fc3Vicm91dGluZV9kaWUpOiBPdXRwdXQgdGhlIG5ldyBhdHRyaWJ1dGVzLgorCSogZHdhcmYuaCAoZW51bSBkd2FyZl9hdHRyaWJ1dGUpOiBBZGQgQXRfYm9keV9iZWdpbiBhbmQgQVRfYm9keV9lbmQuCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBDYWxsIGR3YXJmb3V0X2JlZ2luX2Z1bmN0aW9uLgorCShmaW5hbF9lbmRfZnVuY3Rpb24pOiBDYWxsIGR3YXJmb3V0X2VuZF9mdW5jdGlvbi4KKworCSogbTg4ay5oIChGQVNURVNUX0FMSUdOTUVOVCk6IERlZmluZSBhcyA4IGZvciAtbTg4MTEwIG90aGVyd2lzZSA0LgorCShDT05TVEFOVF9BTElHTk1FTlQsIERBVEFfQUxJR05NRU5UKTogQmFzZSBvbiBGQVNURVNUX0FMSUdOTUVOVC4KKwkqIG04OGsubWQgKG1vdnN0cnNpKTogTm8gcHJlZGljYXRlIGlzIG5lZWRlZCBmb3IgdGhlIHNvdXJjZSBvcgorCWRlc3RpbmF0aW9uLgorCSogbTg4ay5jIChiZXN0X2Zyb21fYWxpZ24pOiBBZGQgYSB0YXJnZXQgcHJvY2Vzc29yIGRpbWVuc2lvbiBmb3IKKwktbTg4MDAwLCAtbTg4MTEwLCBhbmQgLW04ODEwMC4KKwkoZXhwYW5kX2Jsb2NrX21vdmUpOiBDaG9vc2UgbWV0aG9kIGFuZCBsaW1pdHMgYmFzZWQgb24gLW04OHh4eCBvcHRpb24uCisJKGJsb2NrX21vdmVfbm9fbG9vcCk6IEV4dGVuZCB0byBhbGxvdyBESW1vZGUuCisJKiBtODhrLW1vdmUuc2g6IEFkZCB0aGUgbW9kdWxlcyBtb3ZlREk5NnggYW5kIG1vdmVESTQxeCB0aHJvdWdoCisJbW92ZURJNDd4LgorCSogdC1tODhrLCB0LW04OGtsdW5hLCB0LW04OGtzdnI0OiBOZXcgbW9kdWxlcyBhZGRlZCB0byBNT1ZFX0FTTS4KKworCSogbTg4ay5jIChvdXRwdXRfY2FsbCk6IFVzZSBkaWZmZXJlbnQgc3ludGF4IGZvciBHQVMuCisKKwkqIG04OGsuaCAoUkVBRE9OTFlfREFUQV9TRUNUSU9OKTogRG9uJ3Qgb3ZlcnJpZGUgc3ZyNC5oCisJKEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCk6IEZvciBzdnI0LCB1c2UgLnJvZGF0YS4KKworV2VkIE9jdCAgNyAxNTo0NzoxOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaTQ4Ni1uY3Itc3lzdjQpOiBVc2UgaTM4NnY0LmguCisJKGkzODYtKi1zeXN2NCwgaTM4Ni0qLWxpbnV4LCBpMzg2LSotc3lzdik6IEhhbmRsZSA0ODYgdG9vLgorCShpNDg2LSotc3lzdjQsIGk0ODYtKi1saW51eCk6IERlbGV0ZWQuCisJKiBpNDg2djQuaCwgaTQ4NmxpbnV4Lmg6IEZpbGVzIGRlbGV0ZWQuCisKK1dlZCBPY3QgIDcgMTI6NDA6MDAgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiBwb3B1bGF0ZSAocHJvZ25hbWUpOiAgSnVzdCB0aGUgYmFzZW5hbWUgb2YgJDAgcGxlYXNlLgorCSh0YXJnZXRfZGlyKTogIFVzZSBhYnNfdGFyZ2V0X2RpciBhbmQgcmVsX3RhcmdldF9kaXIgZm9yIGNsYXJpdHkuCisJKHNvdXJjZV9kaXIpOiAgVXNlIGFic19zb3VyY2VfZGlyIGFuZCByZWxfc291cmNlX2RpciBmb3IgY2xhcml0eS4KKwkoKik6ICBMaXN0IGlucHV0IGFuZCBvdXRwdXQgZGlycyBvbiBzdGFydHVwLgorCSgqKTogIERvbid0IGJlIHNvIHZlcmJvc2U7IERvbid0IGVjaG8gbmFtZXMgb2Ygb3V0cHV0IGRpcnMvZmlsZXMgYXMKKwl0aGV5IGFyZSBjcmVhdGVkLgorCisJKiBmaXhpbmMuc3ZyNCAoPHN5cy9zaWduYWwuaD4pOiAgRml4IHR5cGVzIG9mIFNJR19ERkwsIFNJR19FUlIsCisJU0lHX0lHTiwgYW5kIFNJR19IT0xELgorCSg8c3lzL3N0YXQuaD4pOiBUdXJuIGRlZmluaXRpb25zIG9mIHN0YXQsIGxzdGF0LCBmc3RhdCwgYW5kIG1rbm9kCisJaW50byBBTlNJIHN5bnRheCBhbmQgYWRkIF9fIHRvIHZhcmlhYmxlcyB1c2VkLgorCisJKiBjLXBhcnNlLmluIChjb21wb25lbnRfZGVjbF9saXN0KTogIERvIHBlZHdhcm4gZm9yIG1pc3Npbmcgc2VtaWNvbG9uCisJYWZ0ZXIgbGFzdCBmaWVsZCBkZWNsLgorCitXZWQgT2N0ICA3IDA5OjQ5OjM0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBkZWNzdGF0bi5oIChMSU5LX1NQRUMpOiBEb24ndCBkZWZpbmUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkLAorCWllIGRlYy1vc2YxLmggaGFzIGluY2x1ZGVkIGRlY3N0YXRuLmguCisKKwkqIGRlYy1vc2YxLmggKE1BQ0hJTkVfVFlQRSk6IFJlZGVmaW5lIHRvIHNheSBERUMgT1NGLzEgaW5zdGVhZCBvZgorCXVsdHJpeC4KKworV2VkIE9jdCAgNyAwMzo1MDoxMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAodGFyZ2V0X2NwdV9kZWZhdWx0KTogVmFyIHJlbmFtZWQgZnJvbSB0YXJnZXRfZGVmYXVsdC4KKwlTZXQgaXQgdG8gMiwgZm9yIGEgNDg2LiAgRGVmaW5lIFRBUkdFVF9DUFVfREVGQVVMVCBtYWNyby4KKworCSogaTM4Ni5oIChUQVJHRVRfQ1BVX0RFRkFVTFQpOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9uLgorCShUQVJHRVRfU1dJVENIRVMpOiBJbmNsdWRlIHRoYXQgaW4gdGhlIGRlZmF1bHQuCisKKwkqIHRvcGxldi5jIChtYWluKTogUmVjb3ZlciBjb3JyZWN0bHkgZnJvbSBpbnZhbGlkIC1XaWQtY2xhc2ggb3B0aW9uLgorCisJKiBjY2NwLmMgKGZpbmNsdWRlKTogU2V0IGZwLT5idWYgZWFybGllciwgc28gaXQncyBmcmVlZCBvbiBlcnJvci4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uLWhlYWRlcnMpOiBBdm9pZCAhIG9wZXJhdG9yLCBmb3IgYXNzZXJ0LmguCisKK1R1ZSBPY3QgIDYgMjA6MjE6MjEgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBnZWVjaC5nbnUuYWkubWl0LmVkdSkKKworCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5LCBKVU1QX0lOU04gY2FzZSk6IERlbGV0ZSBhYm9ydCBpbiB0aGUKKwljb2RlIGZvciBzZXR0aW5nIHRoZSBKVU1QX0xBQkVMIGZpZWxkLgorCitUdWUgT2N0ICA2IDE5OjI5OjE5IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogSWYgYGZ1bmN0aW9ucycgaXMgYW4KKwlBRERSX0VYUFIgKGFzIHdpdGggb3BlcmF0b3IgbmV3IGFuZCBkZWxldGUpLCBnaXZlIHRoZSBuYW1lIG9mIGl0cworCWFyZ3VtZW50IGFzIHRoZSBlcnJvciBmbi4KKworVHVlIE9jdCAgNiAxNDoxNToxNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogQ29ycmVjdCBjb25kaXRpb25hbCBpbiBzZXR0aW5nIGJ1aWxkX3htX2ZpbGUuCisKKwkqIGZ1bmN0aW9uLmMgKGdldF9maXJzdF9ibG9ja19iZWcpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNyb3NzLW1ha2UgKGFzc2VydGRpcik6IE92ZXJyaWRlIHVzdWFsIGRlZmluaXRpb24uCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24taGVhZGVycyk6IGNobW9kIGFzc2VydC5oIGluIHByb3BlciBkaXIuCisJVXNlICQoYXNzZXJ0ZGlyKS4KKwkoYXNzZXJ0ZGlyKTogTmV3IHZhcmlhYmxlLgorCShpbnN0YWxsLWRpcik6IENyZWF0ZSBkaXIgJChpbmNsdWRlZGlyKS4KKwkoaW5jbHVkZWRpcik6IE1ha2UgdGhpcyAvdXNyL2xvY2FsL2luY2x1ZGUuCisKK1R1ZSBPY3QgIDYgMTI6MDU6MzUgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcGEubWQgKG1lbW9yeSBmdW5jdGlvbiB1bml0LCBsb2FkIGNhc2UpOiBMb2FkcyB0YWtlIHR3byBjeWNsZXMsCisJbm90IG9uZS4KKworVHVlIE9jdCAgNiAwNzo1NjowNSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAoYWRkZGkzKTogRml4IHR5cG8uCisKK1R1ZSBPY3QgIDYgMDQ6MDM6NDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLmMgKGZsb2F0aW5nX2V4YWN0X2xvZzIsIHN0YW5kYXJkXzY4ODgxX2NvbnN0YW50X3ApOiAKKwkoc3RhbmRhcmRfc3VuX2ZwYV9jb25zdGFudF9wKTogVXNlIFJFQUxfVkFMVUVfRlJPTV9DT05TVF9ET1VCTEUuCisJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZS4KKworTW9uIE9jdCAgNSAxODozOToyOSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKFRSRUVfVklBX1BST1RFQ1RFRCk6IFNldCBwcm90ZWN0ZWRfZmxhZywgbm90IHN0YXRpY19mbGFnLgorCitNb24gT2N0ICA1IDE4OjI3OjA4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKCQoc3JjZGlyKS9JTlNUQUxMKTogQWRkIC1EIElOU1RBTExPTkxZLgorCitNb24gT2N0ICA1IDE0OjQ2OjA4IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBVc2UgdGhlIGBuZXcnIHJ1bGUgd2hlbiBsb29raW5nIGZvcgorCXNvbWV0aGluZyBsaWtlIGBuZXcoZm9vKSBjaGFyWzEwXScuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3Bhcm1zKTogRG9uJ3QgY2FsbCBkaWdlc3RfaW5pdCBvbiBkZWZhdWx0IGFyZ3MuCisKK01vbiBPY3QgIDUgMDI6MjE6MDYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBBbHdheXMgY2hlY2sgZm9yIGFzbQorCW9uIGZhaWx1cmUgaW5zdGVhZCBvZiBzaW1wbHkgYWJvcnRpbmcuCisKKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IFVzZSBjYWJzIGFzIHRoZSBvbmx5IGxpYmNhbGwgZm9yIGFicy4KKworTW9uIE9jdCAgNSAwMzoxMDoxNCAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCB0d2VlZGxlZHVtYmVyLmN5Z251cy5jb20pCisKKwkqIGMrKyAobnVtYXJncyk6ICQjIHdhcyB1c2VkIGFmdGVyIHNldCB3YXMgY2FsbGVkOyBpbnN0ZWFkLCBzYXZlCisJJCMgaW4gJG51bWFyZ3MgYW5kIHVzZSB0aGF0IHZhbHVlIGluc3RlYWQuCisKK1N1biBPY3QgIDQgMTI6MzQ6MDAgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogZHdhcmZvdXQuYyAoaGFyZC1yZWctc2V0LmgpOiAgSW5jbHVkZWQgdG8gZ2V0IGRlY2wgb2YgYHJlZ19uYW1lcycuCisJKFBSSU5UX1JFRyk6ICBEZWZhdWx0IGRlZmluaXRpb24gYWRkZWQuCisJKGR3YXJmX2xhc3RfZGVjbCk6ICBWYXJpYWJsZSBkZWNsYXJhdGlvbiBhZGRlZC4KKwkob3V0cHV0X3JlZ19udW1iZXIpOiAgTmV3IGZ1bmN0aW9uOyBoYW5kbGUgLWZ2ZXJib3NlLWFzbSByZWcgcHJpbnRpbmcuCisJKG91dHB1dF9tZW1fbG9jX2Rlc2NyaXB0b3IsIG91dHB1dF9sb2NfZGVzY3JpcHRvcik6ICBDYWxsIGl0LgorCShvdXRwdXRfZGVjbCk6ICBTZXQgYGR3YXJmX2xhc3RfZGVjbCcgZWFjaCB0aW1lIHRoaXMgZm4gaXMgY2FsbGVkLgorCSogaTM4Ni5oIChoaV9yZWdfbmFtZSwgcWlfcmVnX25hbWUsIHFpX2hpZ2hfcmVnX25hbWUpOiBEZWNsYXJlZC4KKwkoUFJJTlRfUkVHKTogIERlZmluaXRpb24gbW92ZWQgZnJvbSBpMzg2LmMuCisJKiBpMzg2LmMgKGhpX3JlZ19uYW1lLCBxaV9yZWdfbmFtZSwgcWlfaGlnaF9yZWdfbmFtZSk6IE5vdCBzdGF0aWMuCisJKFBSSU5UX1JFRyk6ICBEZWZpbml0aW9uIG1vdmVkIHRvIGkzODYuaC4KKworU3VuIE9jdCAgNCAwMDo1MzozNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChzaGFkb3dfdGFnX3dhcm5lZCk6IFVzZSBwZWR3YXJuIGZvciB1c2VsZXNzIGtleXdvcmQuCisKKwkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBObyB3YXJuaW5nIGlmIGRpZ2l0cyBpbiBceCBhcmUgYWxsIDAncy4KKworU2F0IE9jdCAgMyAxNDozNzozOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfY29tcGxleF9hYnMpOiBOZXcgZnVuY3Rpb24uCisJKiBleHByLmggKGV4cGFuZF9jb21wbGV4X2Ficyk6IEFkZCBkZWNsYXJhdGlvbi4KKworU2F0IE9jdCAgMyAwNzoyOTowOSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY29uZmlndXJlIChtaXBzLWRlYy1vc2YxKTogVXNlIHgtZGVjLW9zZjEgaW5zdGVhZCBvZiB4LWRlY3N0YXRuLgorCisJKiB4LWRlYy1vc2YxIChuZXcgZmlsZSk6IExpa2UgeC1kZWNzdGF0biwgZXhjZXB0IHRoYXQgSU5TVEFMTCBpcworCWluc3RhbGxic2QgLWMuCisKK1NhdCBPY3QgIDMgMDU6MDQ6NDMgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiBEb24ndCBjYWxsCisJZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsIGFzIHRoaXMgY2F1c2VzIGR1cGxpY2F0ZXMuCisKK1NhdCBPY3QgIDMgMDE6MzU6MjMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSkgW01VU1RfQUxJR05dOgorCUFsd2F5cyBhZGQgdG8gc2l6ZSwgYWx3YXlzIHJvdW5kIHVwIHRvIFNUQUNLX0JPVU5EQVJZLAorCWFsd2F5cyByb3VuZCB0aGUgYWRkcmVzcy4KKworCSogcnRsLmggKGdlbl9yZWFscGFydCwgZ2VuX2ltYWdwYXJ0KTogRGVjbGFyZWQuCisKK0ZyaSBPY3QgIDIgMjA6MDM6NTMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChnZW5fcmVhbHBhcnQsIGdlbl9pbWFncGFydCk6IE5ldyBmdW5jdGlvbnMuCisJKiBvcHRhYnMuYyAoZXhwYW5kX3Vub3AsIGV4cGFuZF9iaW5vcCk6IFVzZSB0aGVtLgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IFVzZSB0aGVtLgorCisJKiBjY2NwLmMgKG1haW4pOiBIYW5kbGUgLVUgYmVmb3JlIC1EIChhbmQgLUEpLgorCisJKiBhc3NlcnQuaDogQWRkIG1hZ2ljIGNvbW1lbnQgYXQgYmVnaW5uaW5nLgorCSogTWFrZWZpbGUuaW4gKGluY2x1ZGVkaXIpOiBOZXcgdmFyaWFibGUuCisJKFVTRVJfSCk6IGFzc2VydC5oIHJlbW92ZWQgZnJvbSB2YWx1ZS4KKwkoaW5zdGFsbC1jb21tb24taGVhZGVycyk6IEluc3RhbGwgYXNzZXJ0Lmggc2VwYXJhdGVseSwgaW4gaW5jbHVkZWRpciwKKwlidXQgbm90IGlmIGZpbGUgZXhpc3RzIGFuZCBsYWNrcyB0aGUgbWFnaWMgY29tbWVudC4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBNb3ZlIHRlc3QgZm9yIGZhaWx1cmUgdG8gZmluZCBhbnkgZ3JvdXAKKwl0byBhZnRlciB0aGUgbG9vcCBvdmVyIGkuICBBbHNvIGNoZWNrIHRoYXQgYWxsIHRoZSByZWdub3MgZml0CisJYmVsb3cgRklSU1RfUFNFVURPX1JFR0lTVEVSLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKToKKwlGb3IgQUJTX0VYUFIsIGdpdmUgZXhwYW5kX3Vub3AgdGhlIG9wZXJhbmQncyBtb2RlLgorCitGcmkgT2N0ICAyIDE0OjU4OjA2IFBEVCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIGkzODZ2NC5oIChEQlhfUkVHSVNURVJfTlVNQkVSKTogIERvbid0IGFib3J0IGhlcmUgb24gcHNldWRvLXJlZ3MuCisJKiBkd2FyZm91dC5jIChvdXRwdXRfbWVtX2xvY19kZXNjcmlwdG9yLCBvdXRwdXRfbG9jX2Rlc2NyaXB0b3IpOgorCUNhdGNoIGNhc2VzIG9mIGJvZ3VzIERFQ0xfUlRMIHZhbHVlcyBpbnZvbHZpbmcgcHNldWRvLXJlZ3MgKGZvciBhbGwKKwl0YXJnZXQgc3lzdGVtcykgYW5kIHByaW50IGFuIGFubm95aW5nIG1lc3NhZ2UgaWYgd2UgZXZlciBzZWUgc3VjaCBhCisJY2FzZS4KKworVGh1IE9jdCAgMSAxNzoyMzowOCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy10ZmlsZS5jICh2YXJpb3VzKTogUmVuYW1lIHNvbWUgb2YgdGhlIGluZGV4IHZhcmlhYmxlcyBhbmQKKwlmaWVsZHMgdG8gaW5keCwgc28gdGhhdCBpdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggdGhlIEJTRAorCWluZGV4IGZ1bmN0aW9uLCB3aGljaCBtYXkgYmUgI2RlZmluZSdkIHRvIHN0cmNoci4gIEhvd2V2ZXIsIHRoZQorCU1JUFMgc3ltYm9sIHRhYmxlIGhhcyBhIGZpZWxkIGNhbGxlZCBpbmRleCwgc28gI3VuZGVmIGluZGV4IGFuZAorCXJpbmRleCwgYW5kIHdyaXRlIG91ciBvd24gZnVuY3Rpb25zIGxvY2FsX2luZGV4IGFuZCBsb2NhbF9yaW5kZXguCisKKwkqIG1pcHMtYnNkLmggKENQUF9QUkVERUZJTkVTKTogQWRkIHNpbmdsZSB1bmRlcnNjb3JlIGluIGZyb250IG9mCisJZWFjaCBvZiB0aGUgZGVmaW5lcywgZm9yIFJJU0MtT1MgNS4wIGNvbXBhdGliaWxpdHkuCisKKwkqIG1pcHMtc3lzdi5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBzaW5nbGUgdW5kZXJzY29yZSBpbiBmcm9udCBvZgorCWVhY2ggb2YgdGhlIGRlZmluZXMsIGZvciBSSVNDLU9TIDUuMCBjb21wYXRpYmlsaXR5LgorCisJKiBtaXBzLXN2cjQuaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgc2luZ2xlIHVuZGVyc2NvcmUgaW4gZnJvbnQgb2YKKwllYWNoIG9mIHRoZSBkZWZpbmVzLCBmb3IgUklTQy1PUyA1LjAgY29tcGF0aWJpbGl0eS4KKworCSogbWlwcy5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBzaW5nbGUgdW5kZXJzY29yZSBpbiBmcm9udCBvZiBlYWNoCisJb2YgdGhlIGRlZmluZXMsIGZvciBSSVNDLU9TIDUuMCBjb21wYXRpYmlsaXR5LgorCisJKiBtaXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBPbmx5IGNhbGwgc2V0dmJ1ZiB0byBtYWtlIHN0ZGVyciBsaW5lCisJYnVmZmVyZWQgZm9yIC1tc3RhdHMgb24gVWx0cml4LCBhbmQgT1NGLzEuCisKK1RodSBPY3QgIDEgMTU6MTg6NTUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQWRkIGEgY2FzZSB0byBoYW5kbGUKKwlTRUNPTkRBUllfTUVNT1JZX05FRURFRCBpbiB0aGUgU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MgY29kZS4KKwkqIHNwYXJjLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBBbHNvIG5lZWQgYSB0ZW1wIHJlZworCXdoZW4gbG9hZGluZyBISW1vZGUgYW5kIFFJbW9kZSB2YWx1ZXMgZnJvbSBtZW1vcnkgdG8gRlBfUkVHUy4KKwkoU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBOZXcgbWFjcm8uICBEZWZpbmUgdGhpcyB0byBoYW5kbGUKKwlISW1vZGUgYW5kIFFJbW9kZSBzdG9yZXMgZnJvbSBGUF9SRUdTIHRvIG1lbW9yeSBzaW1pbGFyIHRvIGFib3ZlLgorCitUaHUgT2N0ICAxIDEzOjM2OjUyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChyZXNjYW4pOiBJZiB0cmFkaXRpb25hbCwgcmVjb2duaXplICMgb25seSBhdCBib2wuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBKdXN0IHJldHVybiB0aGUgbG93cGFydCBvciBoaWdocGFydC4KKworCSogY29uZmlndXJlIChpMzg2LSotbGludXgsIGk0ODYtKi1saW51eCk6IE5ldyBhbHRlcm5hdGl2ZXMuCisJKiBpMzg2bGludXguaCwgaTQ4NmxpbnV4LmgsIHhtLWxpbnV4Lmg6IE5ldyBmaWxlcy4KKworCSogb3B0YWJzLmMgKGV4cGFuZF91bm9wKTogSGFuZGxlIGNvbXBsZXggbmVnYXRlIGFuZCBhYnMgdmFsLgorCShpbml0X29wdGFicyk6IFNldCB1cCBsaWJjYWxscyBmb3IgY29tcGxleCBhYnMuCisJKGluaXRfY29tcGxleF9saWJjYWxscyk6IE5ldyBmdW5jdGlvbi4KKworVGh1IE9jdCAgMSAyMjo1ODo0NSAxOTkyICBFcmljIFlvdW5nZGFsZSAoeW91bmdkYWxlQHY2NTUwZC5ucmwubmF2eS5taWwpCisKKwkqIG1ha2UtY2MxLmNvbTogRXh0cmFjdCBsaW5lIGNvbnRhaW5pbmcgIiNkZWZpbmUgWVlFTVBUWSIgZnJvbQorCWNwLXBhcnNlLmMsIGFuZCBhcHBlbmQgdG8gY3AtcGFyc2UuaCAoYSBsYSBNYWtlZmlsZS5pbikuCisKKwkqIGNjY3AuYyAobWFpbikgW1ZNU106IFVzZSAub2JqLCBub3QgLm8sIGluIGRlcGVuZGVuY2llcyBvdXRwdXQuCisKK1RodSBPY3QgIDEgMTc6MTU6NDkgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBfX0ZVTkNfXyB2YXJpYWJsZXMKKwlhcmUgY29tcGlsZXItY3JlYXRlZCwgc28gc2V0IERFQ0xfU09VUkNFX0xJTkUgdG8gemVyby4KKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IEludGVybmFsbHkgZ2VuZXJhdGVkIHZhcnMgY2FuIGJlCisJZGV0ZWN0ZWQgd2l0aCBERUNMX1NPVVJDRV9MSU5FIG9mIHplcm8sIG5vdCBERUNMX0lHTk9SRURfUC4KKworVGh1IE9jdCAgMSAxMzowNzoyMSAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IFdoZW4gbWFraW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhCisJc3BhY2UgYmVmb3JlIHJlbG9hZCwgZW1pdCBhbiBpbnNuIHNlcXVlbmNlIHdoaWNoIGlzIG11Y2ggbW9yZSAKKwlsaWtlbHkgdG8gY3JlYXRlICJhZGRpbCIgaW5zdHJ1Y3Rpb25zIHJhdGhlciB0aGFuICJsZGlsOyBhZGQiIAorCXNlcXVlbmNlcy4gIERvaW5nIHNvIGdyZWF0bHkgcmVkdWNlcyB0aGUgY2hhbmNlIG9mIHJ1bm5pbmcgaW50byBhCisJSFBVWCBsaW5rZXIgYnVnIHdoZW4gY29tcGlsaW5nIGtlcm5lbHMuCisKKwkqIHBhLmggKFRBUkdFVF9LRVJORUwpOiBOZXcgc3dpdGNoICItbWtlcm5lbCIgd2hpY2ggZm9yY2VzIGdjYyB0bworCWF2b2lkICJsZGlsOyBhZGQiIHNlcXVlbmNlcyB3aGVuICVyMjkgYW5kIGluc3RlYWQgZ2VuZXJhdGUgImFkZGlsIgorCXNlcXVlbmNlcy4gIFRoaXMgYXZvaWRzIGEgSFBVWCBsaW5rZXIgYnVnIHdoZW4gY29tcGlsaW5nIGtlcm5lbHMuCisJKiBwYS5tZCAoYWRkIGhpZ2ggcGFydCBhbmQgZHAgcmVnaXN0ZXIpOiBTcGxpdCBpbnRvIHR3byBwYXR0ZXJucywKKwlvbmUgZm9yIG5vcm1hbCBjb2RlLCBvbmUgZm9yIGtlcm5lbHMuICBLZXJuZWwgdmVyc2lvbiBvbmx5IGFsbG93cworCSJyMSIgYXMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgorCisJKiBwYS5oIChMRUdJVElNSVpFX0FERFJFU1MsIFNZTUJPTF9SRUYgY2FzZSk6IEVtaXQgYSBzZXF1ZW5jZQorCXdoaWNoIHdpbGwgY2F1c2UgImFkZGlsIiBpbnN0cnVjdGlvbnMgdG8gYmUgZW1pdHRlZCBpbnN0ZWFkIG9mIAorCSJsZGlsOyBhZGQiIHNlcXVlbmNlcy4KKworVGh1IE9jdCAgMSAwMTowOTowNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UuaW4sIGNvbmQuYXdrOiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5pbiAoYy1wYXJzZS55LCBvYmpjLXBhcnNlLnkpOiBDb25zdHJ1Y3QgZnJvbSBjLXBhcnNlLmluLgorCShnY2MueHRhcik6IERlcGVuZCBvbiBjLXBhcnNlLnksIG9iamMtcGFyc2UueS4KKwkocmVhbGNsZWFuKTogRGVsZXRlIGMtcGFyc2UueSwgb2JqYy1wYXJzZS55LgorCisJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IElmIFNUQUNLX0RZTkFNSUNfT0ZGU0VUCisJb3IgU1RBQ0tfUE9JTlRFUl9PRkZTRVQsIGFsd2F5cyByb3VuZCBhZGRyZXNzIHVwIHRvIEJJR0dFU1RfQUxJR05NRU5ULgorCisJKiBnc3RkZGVmLmg6IElmIF9BTlNJX0hfLCB1bmRlZiBfUFRSRElGRl9UXywgX1NJWkVfVF8sIF9XQ0hBUl9ULgorCisJKiBndmFyYXJncy5oOiBJbiB0aGUgZmlyc3QgcGFydCAoaW5zdGVhZCBvZiB2YS0qLmgpLCBkZWZpbmUKKwlfX2dudWNfdmFfbGlzdCwgYXMgaW4gZ3N0ZGFyZy5oLiAgQWx3YXlzIHVzZSBfX2d1bmNfdmFfbGlzdAorCWFzIGJhc2lzIGZvciBkZWZpbmluZyB2YV9saXN0LgorCU1vdmUgaW50ZXJhY3Rpb24gd2l0aCBCU0QtTkVUMiBkb3duIHRvIHdoZXJlIHZhX2xpc3QgaXRzZWxmIGlzIGRlZmluZWQuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IERlbGV0ZSB1bnJlYWNoYWJsZSBnb3RvIGFmdGVyICciJyBjYXNlLgorCitUaHUgT2N0ICAxIDE2OjU3OjIyIDE5OTIgIFBldGVyIFNjaGF1ZXIgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQorCisJKiBkcHgyZy5oIChOT19ET0xMQVJfSU5fTEFCRUwpOiBVbmRlZiBiZWNhdXNlIGdhcyB1bmRlcnN0YW5kcyBkb2xsYXJzCisJaW4gbGFiZWxzIGFuZCBnZGIgZXhwZWN0cyB0aGVtIGlmIGNvbmZpZ3VyZWQgZm9yIGdhcy4KKwkoU1RBUlRGSUxFX1NQRUMpOiBJbmNsdWRlIGh1Z2UubyB0byBiZSBjb21wYXRpYmxlIHdpdGggbmF0aXZlIGNjLgorCShBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOgorCShDVE9SX0xJU1RTX0RFRklORURfRVhURVJOQUxMWSwgRE9fR0xPQkFMX0RUT1JTX0JPRFkpOgorCShTVEFSVEZJTEVfU1BFQyk6IENvbmRpdGlvbmFsbHkgcmVkZWZpbmUgZm9yIGEgY29sbGVjdGxlc3MgdmVyc2lvbgorCW9mIGdjYyBpZiBVU0VfQ09MTEVDVDIgaXMgbm90IGRlZmluZWQuCisKKwkqIGRweDIuaWZpbGU6IE5ldyBsZCBjb21tYW5kIGZpbGUgdG8gc3VwcG9ydCBub3QgdXNpbmcgY29sbGVjdDIuCisKK1dlZCBTZXAgMzAgMTc6MDg6MzIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBsaWJnY2MyLmMgKF9fZXByaW50Zik6IERvIG5vdGhpbmcgaWYgaW5oaWJpdF9lcHJpbnRmIGlzIGRlZmluZWQuCisKKwkqIHBiZC5oLCBzcGMtc29sMi5oLCB0b3dlci5oIChOT19VTkRFUlNDT1JFUyk6IERlbGV0ZWQuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWZpeGluY2x1ZGVzKTogcm0gc3lzbGltaXRzLmggYmVmb3JlIGluc3RhbGxpbmcuCisJSW5zdGFsbCBpdCB3aXRoIGNwLiAgQWRkIGFuIGVsc2UtcGFydCB0byB0aGUgaWYgdGhhdCBpbnN0YWxscyBpdC4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2VudW0pOiBQdXNoIG9ic3RhY2tzLCBzd2l0Y2ggdG8gcGVybWFuZW50IGlmIGdsb2JhbC4KKwkoZmluaXNoX2VudW0pOiBQb3Agb2JzdGFja3MuCisJKHN0b3JlX3Bhcm1fZGVjbHMpOiBXaGVuIGNsZWFyaW5nIC0+bmFtZXMsIGNsZWFyIG91dCB0aGUgdmFsdWVzCisJZnJvbSB0aGUgaWRlbnRpZmllcnMsIHJlc3RvcmUgc2hhZG93ZWQgdmFsdWVzLCBhbmQgY2xlYXIgLT5zaGFkb3dlZC4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgd2FybiBvZiBjb25zdCBvciB2b2xhdGlsZSBmdW5jdGlvbgorCWluIGEgc3lzdGVtIGhlYWRlciBmaWxlLgorCisJKiBzZGJvdXQuYzogRG9uJ3QgdXNlIHN5c3RlbSBzeW1zLmggb24gaHB1eC4KKworCSogY2NjcC5jIChkb194aWZkZWYpOiBTa2lwIGFsbCBraW5kcyBvZiB3aGl0ZXNwYWNlLCBpbiBib2YgdGVzdC4KKworV2VkIFNlcCAzMCAxNTowOToxMCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLm1kIChvcmNjIHBlZXBob2xlKTogRG9uJ3QgYWNjZXB0IEZQIHJlZyBmb3Igb3BlcmFuZCAwLgorCitXZWQgU2VwIDMwIDAwOjQ3OjQ4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3N0ZGFyZy5oLCBndmFyYXJncy5oOiBVc2UgPC4uLj4gdG8gaW5jbHVkZSB2YS0qLmguCisKKwkqIGMtZGVjbC5jIChzdGFydF9zdHJ1Y3QpOiBQdXNoIHRoZSBvYnN0YWNrcy4KKwlTd2l0Y2ggdG8gcGVybWFuZW50IGlmIGF0IHRvcCBsZXZlbC4KKwkoZmluaXNoX3N0cnVjdCk6IFBvcCB0aGVtLgorCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IElmIHdlIGhhdmUgKGVycm9uZW91c2x5KSBhIHByb3RvdHlwZQorCWFuZCBvbGQtc3R5bGUgcGFybSBkZWNscywgdGhyb3cgYXdheSB0aGUgb2xkLXN0eWxlIHBhcm0gZGVjbHMuCisKKwkqIGNvbmZpZ3VyZTogRGVmYXVsdCAkYnVpbGQgYWZ0ZXIgJGhvc3QuICBDYW5vbmljYWxpemUgYWxsIHRocmVlCisJY29uZmlnIG5hbWVzIGJlZm9yZSB0aGUgbWFpbiBkaXNwYXRjaCBhbmQgc2F2ZSBpbiAkY2Fub25faG9zdCwgZXRjLgorCVdyaXRlIHRoZXNlIGludG8gY29uZmlnLnN0YXR1cyBhbmQgb24gdGVybWluYWwgYXQgdGhlIGVuZC4KKworVHVlIFNlcCAyOSAxODo0MTo1NCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IHJlY29nX21lbW9pemVkIGZhaWx1cmUgcmV0dXJuCisJaXMgLTEgbm90IDAuCisKK1R1ZSBTZXAgMjkgMjI6MTk6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWIgKG9zIGhhbmRsaW5nKTogUmVjb2duaXplIGBsaW51eCcgYXMgYSB2YWxpZCBvcy4KKworVHVlIFNlcCAyOSAxNjowNTo0NyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGxpbWl0eC5oOiBVc2UgPC4uLj4gaW4gI2luY2x1ZGUuCisKKwkqIE1ha2VmaWxlLmluIChFTlFVSVJFX0NGTEFHUyk6IFJlbW92ZSAtRE5PX1NDLgorCitUdWUgU2VwIDI5IDEwOjE0OjI3IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQC52bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogQ29udmVydCBYIC0gQyB0byBYICsgKC1DKS4KKworTW9uIFNlcCAyOCAyMjo0NDoxNyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IElmIHRlbSAhPSBhZCwgdGhlbiBjcmVhdGUgYSBuZXcKKwltZW0gdG8gaG9sZCBpdCBhbmQgc3RvcmUgaXQgYmFjayBpbnRvIG1lbXJlZmxvYy4KKworTW9uIFNlcCAyOCAxMDo0NDo1NSAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIHJlZ2NsYXNzLmM6IEZpeCBjb21tZW50IHN5bnRheCBhZnRlciAjZW5kaWYuCisKK01vbiBTZXAgMjggMTc6MTU6MjIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkYXJnLmggKHZhX2FyZywgdmFfc3RhcnQpOiBFeHBsaWNpdGx5IGNhc3QgdG8gX19nbnVjX3ZhX2FsaXN0LgorCitNb24gU2VwIDI4IDE3OjEyOjA0IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5LCBKVU1QX0lOU04gY2FzZSk6IFdoZW4gaW52ZXJ0IGp1bXAKKwlpbnNuLCBtdXN0IGZpcnN0IGNvbnN0cnVjdCBuZXcgaW5zbiBiZWZvcmUgdHJ5aW5nIHRvIGludmVydCBpdCwKKwlzbyB0aGF0IHZhbGlkYXRlX2NoYW5nZSB3aWxsIHdvcmsgcHJvcGVybHkuCisKKwkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IFBhc3MgbWVtX21vZGUgbm90IG1vZGUgdG8KKwltZW1vcnlfYWRkcmVzc19wLgorCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHksIEpVTVBfSU5TTiBjYXNlKTogV2hlbiBzZXR0aW5nCisJSlVNUF9MQUJFTCBmaWVsZCwgdmVyaWZ5IHRoYXQgd2hhdCB3ZSB0aGluayBpcyBhIGxhYmVsIGFjdHVhbGx5CisJaXMuICBJZiBpdCBpc24ndCB0aGVuIG1hcCB0aGUgb2xkIEpVTVBfTEFCRUwgdG8gZmluZCB0aGUgbmV3IG9uZS4KKworCSogc3BhcmMubWQgKG9yY2MgcGVlcGhvbGUpOiBEb24ndCBhbGxvdyBGUCByZWdzIHRvIG1hdGNoIHBhdHRlcm4uCisKKwkqIGk5NjAubWQgKGluZGlyZWN0X2p1bXApOiAgVXNlIGJ4IGluc3RlYWQgb2YgYiosIGFuZCBhY2NlcHQgYW55CisJYWRkcmVzc19vcGVyYW5kIGluc3RlYWQgb2YganVzdCBhIHJlZ2lzdGVyIG9wZXJhbmQuCisKKwkqIGk5NjAuYyAoaTk2MF9yb3VuZF90cmVlKTogQ29ycmVjdCBjb252ZXJzaW9uIG9mIGJpdHMgdG8gYnl0ZXMgdG8KKwlyb3VuZCB1cCB0byBuZWFyZXN0IGJ5dGUuCisJKGk5NjBfcm91bmRfYWxpZ24pOiBMaWtld2lzZS4KKworTW9uIFNlcCAyOCAxNTo1NDoxOCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZGVjLW9zZjEuaCAoTElOS19TUEVDKTogRml4IHR5cG8uCisKK01vbiBTZXAgMjggMDg6MTU6MDIgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLm1kIChzdWJzaTMpOiBSZW1vdmUgbGFzdCBjaGFuZ2UuCisJKGFsbG9jYXRlX3N0YWNrKTogR28gYmFjayB0byBjYWxsaW5nIHN1YnNpMy4KKworTW9uIFNlcCAyOCAwMjo0MTozMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBVc2UgZ2V0X2luc25zLCBub3QgZ2VuX3NlcXVlbmNlLgorCisJKiBjLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IEFkZHJlc3Mgb2YgbmVzdGVkIGZjbiBpc24ndCBjb25zdGFudC4KKworCSogbGliZ2NjMi5jIChfX2J1aWx0aW5fbmV3KTogQXZvaWQgcGFzc2luZyAwIHRvIG1hbGxvYy4KKworCSogbTY4ay5tZCAoaW5kaXJlY3RfanVtcCk6IFVzZSBhZGRyZXNzX29wZXJhbmQgYXMgcHJlZGljYXRlLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEbyB0aGUgcG9wX29ic3RhY2tzIHNvb25lciwgd2hlbiBpdCdzCisJdGltZSB0byBzdGFydCBhbGxvY2F0aW5nIGluIHRoZSBhbWJpZW50IGNvbnRleHQncyBvYnN0YWNrLgorCURvbid0IGNhbGwgcGVybWFuZW50X2FsbG9jYXRpb24gdW5sZXNzIGdvdCBiYWNrIHRvIHBlcm1hbmVudCBvYnN0YWNrLgorCitTdW4gU2VwIDI3IDEzOjA2OjE5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IElmIFBST01PVEVfRlVOQ1RJT05fQVJHUyBpcyBkZWZpbmVkLCAKKwlzZWUgaWYgdGhlIGluY29taW5nIHJlZ2lzdGVyIHNob3VsZCBiZSB1c2VkIGluIGEgd2lkZXIgbW9kZS4KKwkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogTGlrZXdpc2UgZm9yIHJldHVybiB2YWx1ZSBpZgorCVBST01PVEVfRlVOQ1RJT05fUkVUVVJOIGlzIGRlZmluZWQuCisJKiBjYWxscy5jIChzdHJ1Y3QgYXJnX2RhdGEpOiBOZXcgZmllbGQgdW5zaWduZWRwLgorCShleHBhbmRfY2FsbCk6IEhhbmRsZSBQUk9NT1RFX0ZVTkNUSU9OX0FSR1MgYW5kCisJUFJPTU9URV9GVU5DVElPTl9SRVRVUk4uCisKKwkqIGFscGhhLmggKEZVTkNUSU9OX1ZBTFVFKTogUHJvbW90ZSBtb2RlIGZvciByZXR1cm4gdmFsdWUuCisKKwkqIGFscGhhLmggKEJZVEVfTE9BRFNfU0lHTl9FWFRFTkQpOiBEZWZpbmUuCisKKwkqIHJzNjAwMC5tZCAoc3Vic2kzKTogRG9uJ3QgYm90aGVyIGNhbGxpbmcgbmVnYXRlX3J0eCBmb3IgY29uc3RhbnQ7CisJd2Ugc2hvdWxkbid0IGJlIGNhbGxlZCB3aXRoIGEgY29uc3RhbnQuCisJKG1hc2tpciBwYXR0ZXJucyk6IERvbid0IG1lbnRpb24gYW4gb3BlcmFuZCBiZWZvcmUgaXQgaXMgdXNlZDsKKwl1c2Ugb3BlcmFuZCBudW1iZXIgMSBmb3Igb3BlcmFuZCB3aXRoICcwJyBjb25zdHJhaW50LgorCShhbGxvY2F0ZV9zdGFjayk6IFVzZSByZWdfb3Jfc2hvcnRfb3BlcmFuZCBmb3IgcHJlZGljYXRlIG9mCisJYWxsb2NhdGlvbiBhbW91bnQ7IHVzZSBuZWdhdGVfcnR4IGFuZCBhbHdheXMgbWFrZSBhIFBMVVMuCisKKwkqIHJvbXAuaCAoRVhUUkFfQ09OU1RSQUlOVCwgY2FzZSAnUScpOiBDaGVjayBmb3IgTUVNIGluc3RlYWQgb2YKKwljYWxsaW5nIG1lbW9yeV9vcGVyYW5kLgorCShTSElGVF9DT1VOVF9UUlVOQ0FURUQpOiBObyBsb25nZXIgZGVmaW5lIHRoaXMuCisKK1NhdCBTZXAgMjYgMTg6MTQ6MTUgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGNvbmZpZy5zdWIgKG9zIGhhbmRsaW5nKTogUmVjb2duaXplIHJpc2NvcyBhcyBhbiBvcGVyYXRpbmcKKwlzeXN0ZW0uCisKKwkqIGNvbmZpZ3VyZSAoZGVjLW9zZjEpOiBVc2UgeC1kZWNzdGF0biBmb3IgeG1ha2VfZmlsZS4KKwkobWlwcyBjb21wdXRlcnMpOiBIYW5kbGUgUklTQy1PUyA1IHZzLiBSSVNDLU9TIDQgY29uZmlndXJhdGlvbgorCWNoYW5nZXMgLS0gUklTQy1PUyA1LiBwYXNzZXMgLW5vbl9zaGFyZWQgYnkgZGVmYXVsdC4KKworCSogbWlwcy01LmggKG5ldyBmaWxlKTogUklTQy1PUyByZXYgNSBjb25maWcgZmlsZS4KKwkqIG1pcHMtNWJzZC5oIChuZXcgZmlsZSk6IFJJU0MtT1MgcmV2IDUsIGJzZCA0LjMgY29uZmlnIGZpbGUuCisJKiBtaXBzLTVnNC5oIChuZXcgZmlsZSk6IFJJU0MtT1MgcmV2IDUsIHN2cjQgKyBzdGFicyBjb25maWcgZmlsZS4KKwkqIG1pcHMtNWdic2QuaCAobmV3IGZpbGUpOiBSSVNDLU9TIHJldiA1LCBic2QgNC4zICsgc3RhYnMgY29uZmlnIGZpbGUuCisJKiBtaXBzLTVnZGIuaCAobmV3IGZpbGUpOiBSSVNDLU9TIHJldiA1ICsgc3RhYnMgY29uZmlnIGZpbGUuCisJKiBtaXBzLTVnc3lzdi5oIChuZXcgZmlsZSk6IFJJU0MtT1MgcmV2IDUgc3ZyMyArIHN0YWJzIGNvbmZpZyBmaWxlLgorCSogbWlwcy01c3ZyNC5oIChuZXcgZmlsZSk6IFJJU0MtT1MgcmV2IDUgc3ZyNCArIHN0YWJzIGNvbmZpZyBmaWxlLgorCSogbWlwcy01c3lzdi5oIChuZXcgZmlsZSk6IFJJU0MtT1MgcmV2IDUgc3ZyMyBjb25maWcgZmlsZS4KKworCSogZGVjLW9zZjEuaCAoTElOS19TUEVDKTogUGFzcyAtbm9uX3NoYXJlZCB0byBsaW5rZXIgdW5sZXNzCisJLXNoYXJlZCB3YXMgcGFzc2VkLgorCShTSVpFX1RZUEUpOiBEZWZpbmUgYXMgbG9uZyB1bnNpZ25lZCBpbnQuCisJKFBUUkRJRkZfVFlQRSk6IERlZmluZSBhcyBpbnQuCisJKFdDSEFSX1RZUEVfU0laRSk6IERlZmluZSBhcyBTSE9SVF9UWVBFX1NJWkUuCisKKwkqIGRlY3Jvc2UuaCAoTUFDSElORV9UWVBFKTogU2hvcnRlbiB2ZXJiYWdlLgorCisJKiBpMzg2cm9zZS5oIChUQVJHRVRfVkVSU0lPTik6IFByaW50IGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uLgorCisJKiB4bS1taXBzLmggKEhBVkVfVkZQUklOVEYsIEhBVkVfUFVURU5WKTogRGVmaW5lIG9uIERFQyBPU0YvMS4KKworCSogbWlwcy5jIChzaWdpbmZvKTogUHJpbnQganVzdCBjdXJyZW50IGZpbGVuYW1lLCBhbmQgZnVuY3Rpb24KKwliZWluZyBjb21waWxlZC4KKworCSogbWlwcy10ZmlsZS5jIChTaXplX3QpOiBVc2UgbG9uZyB1bnNpZ25lZCBvbiBPU0YvMS4KKwkodG9wbGV2ZWwpOiBEb24ndCBkZWZpbmUgcmluZGV4IGFuZCBpbmRleCBvbiBPU0YvMS4KKworU2F0IFNlcCAyNiAxNzo0Njo1NyAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBhcm0ubWQgKGNvbW1lbnQgYmVmb3JlIGV4dGVuZGhpc2kyKTogUmVtb3ZlIHRoZSBsaWUuCisJKHplcm9fZXh0ZW5kaGlzaTIpOiBSZXdyaXRlIHRvIHdvcmsgaWYgb3AwID09IG9wMS4gIFVzZQorCWdlbl9sb3dwYXJ0IGluIHByZXBhcmF0aW9uIGNvZGUuCisJKGV4dGVuZHFpc2kyLCBleHRlbmRoaXNpMik6IExpa2V3aXNlLgorCShleHRlbmRxaWhpMik6IEV4cGFuZC4KKworCSogYXJtLm1kIChyZXN0b3JlaGkpOiBSZXdyaXRlIGZvciBjb3JyZWN0bmVzcywgZWZmaWNpZW5jeSwgYW5kCisJY2xhcml0eS4gQXZvaWQgZ2VuZXJhdGluZyBpbnNucyBpbnZvbHZpbmcgdHJ1bmNhdGUuICBHZW5lcmF0ZQorCW5lZWRlZCBwc2V1ZG9zIGluIHByZXBhcmF0aW9uIHN0YXRlbWVudHMuCisJKHN0b3JlaGkpOiBMaWtld2lzZS4KKwkoc3RvcmVpbnRoaSk6IExpa2V3aXNlLgorCShtb3ZoaSk6IENhbGwgZ2VuX3N0b3JlaGksIGdlbl9yZXN0b3JlaGksIGdlbl9zdG9yZWludGhpIGFjY29yZGluZworCXRoZWlyIG5ldyBkZWZpbml0aW9ucy4gIFVzZSBmb3JjZV9yZWcgdG8gcHV0IGFkZHJlc3MgaW4gcmVnaXN0ZXIuCisKKwkqIG02OGsubWQgKGluZGlyZWN0X2p1bXApOiBVc2UgJWEwIGZvciBvdXRwdXQsIGFuZCBwIGZvciBjb25zdHJhaW50LgorCitTYXQgU2VwIDI2IDAyOjQyOjQyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogUmVyZWNvZ25pemUgaWYgbW92ZSBpbnNuCisJYmVjb21lcyBhIG5vbi1tb3ZlLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1maXhpbmNsdWRlcyk6CisJVXNlIC0gd2hlbiBtYWtpbmcgc3lzbGltaXRzLmg7IGZpeCBpZi1zdGF0ZW1lbnQgc3ludGF4LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIGhhbmRsaW5nIGRpc3BhdGNoIHRhYmxlIHRoYXQgYWx3YXlzCisJZ29lcyB0byB0aGUgc2FtZSBwbGFjZSwgdmVyaWZ5IHByZXZpb3VzIGluc24gZXhpc3RzLgorCisJKiBjLXR5cGVjay5jIChjb21tb25fdHlwZSk6IFJlbmFibGUgY29kZSB0byBtZXJnZSBxdWFsaWZpZXJzCisJZ2l2ZW4gdHdvIHBvaW50ZXJzIHRvIGNvbXBhdGlibGUgdHlwZXMuCisKK1NhdCBTZXAgMjYgMTI6MDI6MzggUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0b2NtLmNvbSkKKworCSogZHdhcmZvdXQuYyAobG9jYXRpb25fYXR0cmlidXRlKTogSWYgREVDTF9SVEwgbG9va3MgbGlrZSAoTUVNIHBzZXVkbyksCisJdHJlYXQgdGhhdCB2YXJpYWJsZSBhcyBvcHRpbWl6ZWQgYXdheS4KKworRnJpIFNlcCAyNSAxOTo0ODo0NiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChleHBsaWNpdF9mbGFnX3NpZ25lZF9iaXRmaWVsZHMpOiBOZXcgdmFyaWFibGUuCisJKGNfZGVjb2RlX29wdGlvbik6IFNldCB0aGF0IGZvciAtZlt1bl1zaWduZWQtYml0ZmllbGRzLgorCShncm9rZGVjbGFyYXRvcik6IElmIHRoYXQncyBzZXQsIGFuZCAtZnNpZ25lZC1iaXRmaWVsZHMsCisJZGlzcmVnYXJkIC10cmFkaXRpb25hbCB3aGVuIGhhbmRsaW5nIGJpdGZpZWxkIHNpZ25lZG5lc3MuCisKKwkqIGNvbmZpZ3VyZTogSGFuZGxlIC0tYnVpbGQgb3B0aW9uLiAgTWFrZSBsaW5rIGhjb25maWcuaC4KKwkqIE1ha2VmaWxlLmluOiBJbiB0aGUgdGFyZ2V0cyBzdWNoIGFzICQoSE9TVF9QUkVGSVhfMSlydGwubywKKwl1c2Ugc2VkIHRvIG1ha2UgdGhlbSBpbmNsdWRlIGhjb25maWcuaCBpbnN0ZWFkIG9mIGNvbmZpZy5oLgorCShkaXN0Y2xlYW4pOiBBZGQgY29tbWFuZCB0byBkZWxldGUgaGNvbmZpZy5oLgorCitGcmkgU2VwIDI1IDE5OjU2OjM1IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLXNlYXJjaC5jIChjb21wdXRlX3Zpc2liaWxpdHkpOiBEb24ndCBtZXNzIHdpdGggdGhlIGNvbnRleHQuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZXR1cm4gdmFsdWUgZnJvbSBkb19mcmllbmQKKwlwcm9wZXJseTsgdGhpcyBzaG91bGRuJ3QgaGF2ZSBnb25lIGluIHlldC4KKworRnJpIFNlcCAyNSAwMjoyMzo1MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBSZWFsbHkgdXNlIGVuZHR5cGUuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6ICJDb25jYXRlbmF0ZSIgbXVsdGlwbGUgInN0cmluZ3MiIGluICNpbmNsdWRlLgorCisJKiB2bXNjb25maWcuY29tOiBSZW5hbWVkIGZyb20gY29uZmlndXJlLmNvbS4KKworCSogbmV4dC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfX0FSQ0hJVEVDVFVSRV9fLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IEZvciBhbm9ueW1vdXMgZW51bSwgb3V0cHV0IHR5cGUgYW55d2F5LgorCitGcmkgU2VwIDI1IDAxOjMzOjM2IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIGVwaWxvZ3VlX2RlbGF5X2xpc3QgZmllbGQuCisJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHQpOiBTYXZlIGVwaWxvZ3VlX2RlbGF5X2xpc3QuCisJKHBvcF9mdW5jdGlvbl9jb250ZXh0KTogUmVzdG9yZSBlcGlsb2d1ZV9kZWxheV9saXN0LgorCisJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IEZvcmNlIG9wZXJhbmRzWzBdIHRvIGJlIGEgcmVnaXN0ZXIuCisKKwkqIHZhLXNwYXJjLmggKHZhX2FyZyk6IEFkZCAzIG1vcmUgKHZvaWQgKikgY2FzdHMgdG8gYXZvaWQgd2FybmluZ3MKKwl3aXRoIC1XY2FzdC1hbGlnbi4KKworCSogc3BhcmMuYyAoU0ZfTU9ERVMpOiBBY2NlcHQgYWxsIHNpbmdsZSB3b3JkIG9yIHNtYWxsZXIgaW50ZWdlcgorCW1vZGVzIG5vdCBqdXN0IFNJbW9kZS4gIFRoZXNlIGFyZSBuZWVkZWQgZm9yIGZpeC9mbG9hdCBjb252ZXJzaW9ucy4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8yLCBQUkVfREVDIGNhc2UpOiBDYWxsIHNjaGVkX2FuYWx5emVfMiBpbgorCWFkZGl0aW9uIHRvIHNjaGVkX2FuYWx5emVfMS4KKworCSogdmEtaTk2MC5oICh2YV9zdGFydCk6ICBNdXN0IGFjY2VzcyBhbm9ueW1vdXMgYXJnIGFzIG9mZnNldCBmcm9tCisJc3RhcnQgb2YgYXJndW1lbnQgYmxvY2suCisKKwkqIGk5NjAubWQgKG1vdmRpLCBtb3Z0aSwgbW92ZGYsIG1vdnRmKTogTWFrZSBzdG9yZSB6ZXJvIHRvIG1lbW9yeQorCWEgc2VwYXJhdGUgY2FzZSwgb25seSBhY2NlcHQgb2Zmc2V0dGFibGUgbWVtb3J5IGFkZHJlc3NlcywgYW5kIGNhbGwKKwlhZGpfb2Zmc2V0dGFibGVfb3BlcmFuZCB0byBjYWxjdWxhdGUgc3Vid29yZCBhZGRyZXNzZXMuCisKKwkqIGk5NjAuYyAoaTk2MF9vdXRwdXRfbGRjb25zdCk6IFBhc3MgbWlzc2luZyB4b3BlcmFuZHMgYXJndW1lbnQgdG8KKwlvdXRwdXRfYXNtX2luc24gY2FsbC4KKworCSogYTI5ay5tZCAobW92dGkpOiAgU3BsaXQgQ09OU1RfSU5UcyBpbnRvIDQgbW92ZXMsIGFuZCBmb3JjZSBhbGwKKwlvdGhlciBjb25zdGFudHMgdG8gbWVtb3J5LgorCitUaHUgU2VwIDI0IDIxOjUxOjQ2IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwlDb21wbGV0ZSBDeWdudXM8LS0+RlNGIG1lcmdlLgorCisJVGh1IFNlcCAyNCAxNzowNToyNyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IFVzZSBhIGZyaWVuZGx5IGFib3J0IHJhdGhlciB0aGFuIGFuIGFzc2VydC4KKwkoZ3Jva3Bhcm1zKTogUGFzcyB3aGV0aGVyIGluaXQgaXMgc2V0IG9yIG5vdCBmb3IgdGhlIGluaXRpYWxpemVkCisJcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgorCisJV2VkIFNlcCAyMyAyMjowOTo0NCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpLCBjcC1kZWNsMi5jICh3YXJuX25vbnZkdG9yKSwKKwljcC10cmVlLmMgKGxheW91dF9iYXNldHlwZXMpLCBjcC10cmVlLmggKHdhcm5fbm9udmR0b3IpOiAgUmUtZW5hYmxlCisJd2FybmluZ3MgZm9yIG5vbi12aXJ0dWFsIGRlc3RydWN0b3JzIGluIHNvbWUgc2l0dWF0aW9ucy4KKworCVdlZCBTZXAgMjMgMTU6NDI6MzMgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJV2VkIFNlcCAyMyAxNjozMToyNyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBDYXN0IGJjb3B5IGFyZ3VtZW50cyB0byBjaGFyICogdG8KKwlhdm9pZCB3YXJuaW5nIG9uIE9TRi8xLgorCisJV2VkIFNlcCAyMyAxMTozNjo0NCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdGFydF9tZXRob2QpOiBHaXZlIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpZiBhIG1ldGhvZCdzCisJYmVpbmcgZGVmaW5lZCBhZ2FpbiwgcmF0aGVyIHRoYW4gc2F5ICJhZ2dyZWdhdGUgc2NvcGUiLiAKKwkqIGNwLWRlY2wyLmMgKGdyb2tmaWVsZCwgZ3Jva2JpdGZpZWxkLCBncm9rdHlwZWZpZWxkKTogRGl0dG8uCisKKwlUdWUgU2VwICAxIDIyOjU1OjU5IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogUHJlZmVyIHVuc2lnbmVkCisJYXJpdGhtZXRpYyBpZiB0aGUgb3V0cHV0IHR5cGUgaXMgdW5zaWduZWQgYW5kIGlzIG5vIG1vcmUgcHJlY2lzZSB0aGFuCisJdGhlIGNvbXB1dGF0aW9uIHR5cGUuICBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBzaWduIGV4dGVuc2lvbi4KKworCVR1ZSBTZXAgMTUgMjA6MjY6MTggMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQXRoZW5hLk1JVC5FRFUpCisKKwkqIGNwLXB0LmMgKHRzdWJzdCk6IERvbid0IGNhbGwgbGF5b3V0X3R5cGUgbmVhciBzdGFydCBvZiBmdW5jdGlvbgorCXdpdGggVC4gIGNvbnN0IGFuZCB2b2xhdGlsZSBhdHRyaWJ1dGVzIGRvbid0IGFmZmVjdCB0aGUgbWVtb3J5CisJc3RydWN0dXJlIG9mIHRoZSB0eXBlLCBhbmQgVCBtYXkgbm90IHlldCBiZSBhIHZhbGlkIGFyZ3VtZW50IGZvcgorCWxheW91dF90eXBlIChmb3IgZXhhbXBsZSwgaWYgaXQgaXMgYW4gdW5pbnN0YW50aWF0ZWQgdGVtcGxhdGUpLgorCUluZGl2aWR1YWwgc3dpdGNoIGNhc2VzIHdpbGwgY2FsbCBsYXlvdXRfdHlwZSBpZiBuZWNlc3NhcnkuCisKKwlNb24gU2VwIDIxIDE1OjU5OjIyIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHB1c2hkZWNsKTogQ2hlY2sgaWYgREVDTF9TT1VSQ0VfTElORSBpcyBub24temVybywgbm90CisJaWYgREVDTF9JR05PUkVEX1AgaXMgc2V0LCB3aGVuIGNoZWNraW5nIGZvciBzaGFkb3dpbmcuICBXZSBubyBsb25nZXIKKwluZWVkIERFQ0xfSUdOT1JFRF9QIG9uIGJ1aWx0aW4gdHlwZXMuCisJKHJlY29yZF9idWlsdGluX3R5cGUpOiBEb24ndCBzZXQgREVDTF9JR05PUkVEX1AgZm9yIGEgYnVpbHRpbiB0eXBlLgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBXaGVuIHdvcmtpbmcgd2l0aCB2aXJ0dWFsIGZ1bmN0aW9ucywKKwlhbHdheXMgdXNlIHRoZSBub2RlJ3MgREVDTF9DTEFTU19DT05URVhULgorCSogY3AtbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IERpdHRvLgorCSogY3Atc2VhcmNoLmMgKGNvbXB1dGVfdmlzaWJpbGl0eSk6IERpdHRvLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgYWxsb3cgYSBtZW1iZXIgdG8gYmUgZGVjbGFyZWQKKwlleHRlcm4uCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZXR1cm4gYSB2b2lkX3R5cGVfbm9kZSBpZiB3ZSdyZQorCWxvb2tpbmcgYXQgYSBmcmllbmQgKGV2ZW4gYWZ0ZXIgY2FsbGluZyBkb19mcmllbmQpLgorCShwdXNoZGVjbCk6IERpc2FibGUgc29tZSBjb2RlIHRoYXQncyB1bnRlc3RlZCBhbmQKKwlkb2Vzbid0IG5lY2Vzc2FyaWx5IGhlbHAgRFdBUkYgcmlnaHQgbm93LgorCShmaW5pc2hfZnVuY3Rpb24pOiBBbHdheXMgZW1pdCBkZWJ1Z2dpbmcgaW5mbyBmb3IgdGhlCisJcmV0dXJuIHR5cGUgb2YgYSBmdW5jdGlvbi4KKwkocHVzaGRlY2wpOiBEb24ndCBjaGFuZ2UgdGhlIERFQ0xfQ09OVEVYVCBvZiB2aXJ0dWFsCisJbWV0aG9kcy4KKwkoZmluaXNoX2VudW0pOiBBbHdheXMgb3V0cHV0IGRlYnVnZ2luZyBpbmZvIGZvciBlbnVtcy4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBJdCdzIGFuIGVycm9yIGlmIHdlJ3JlIGRvaW5nIGFuIGluaXQgb2YgYW4gZXh0ZXJuCisJYXQgdGhlIHRvcCBsZXZlbC4gIElmIHdlIGFyZSBhdCB0aGUgdG9wIGxldmVsLCBqdXN0IHdhcm4uCisKKwkqIGNwLXR5cGVjay5jIChjb21wX3RhcmdldF9wYXJtcyk6IENoZWNrIGlmIHN0cmljdCBpcyBub24temVybywgbm90CisJanVzdCA+IDAuCisJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IERvbid0IHJldHVybiBhbiBlcnJvci1tYXJrIG5vZGUgd2hlbgorCXRoZXkgY2FsbCAibWFpbiIgZnJvbSB3aXRoaW4gdGhlIGZuLCBpdCdzIG9ubHkgYSBwZWRhbnRpYyB3YXJuaW5nLgorCShwb2ludGVyX2ludF9zdW0pOiBSZXdvcmQgd2FybmluZyB3aGVuIHVzaW5nIGEgcHRyLXRvLW1lbSBpbiBhcml0aC4KKworCSogY3AtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogTWFrZSByZWNvcmRfYWxpZ24gYW5kIGNvbnN0X3NpemUKKwl1bnNpZ25lZC4KKworCU1vbiBTZXAgMjEgMTQ6NTM6NDMgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuaCAoZmxhZ19ub19pZGVudCk6IEFkZCBleHRlcm4gZGVjbCBmb3IgY3AtbGV4LmMuCisKKwkqIGNwLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogU2F2ZSB0aGUgREVDTF9VSUQgYW5kIERFQ0xfRlJJRU5EX1AKKwlpbmZvIGZyb20gb2xkZGVjbC4gIE90aGVyd2lzZSwgdGhleSdkIGdldCBjbG9iYmVyZWQgd2hlbiBuZXdkZWNsJ3MKKwljb250ZW50cyBnZXQgY29waWVkIGludG8gb2xkZGVjbC4KKworCSogY3AtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBEZWxldGUgcGVkYW50aWMgZXJyb3IgYWJvdXQgdXNpbmcgI2lkZW50LAorCXNpbmNlIGNjY3AuYyBhbHJlYWR5IGdpdmVzIGEgd2FybmluZy4gIEluIHRoZSBjYXNlIHRoYXQKKwlBU01fT1VUUFVUX0lERU5UIGlzIGRlZmluZWQsIG9ubHkgYWN0dWFsbHkgc3BpdCBpdCBvdXQgaWYgZmxhZ19ub19pZGVudAorCWlzIG5vdCBzZXQuCisKKwlTYXQgU2VwIDE5IDE0OjUzOjMxIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJU2F0IFNlcCAxOSAxMTozNzoxMSAxOTkyICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBdGhlbmEuTUlULkVEVSkKKworCSogY3AtZGVjbC5jIChmaW5pc2hfZGVjbCk6ICBEb24ndCBjYWxsCisJQ0xBU1NUWVBFX0RFQ0xBUkVEX0VYQ0VQVElPTiBpZiBUWVBFIGlzIGVycm9yX21hcmtfbm9kZSwgdG8gYXZvaWQKKwlyZWZlcmVuY2luZyBhIG5vbmV4aXN0ZW50IGZpZWxkLgorCisJRnJpIFNlcCAxOCAxNDowNjowNiAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoY29tcG9uZW50X2RlY2wpOiBSZW1vdmUgc29ycnkgYWJvdXQgbm90IGltcGxlbWVudGluZworCW1ldGhvZHMgaW4gYW5vbnltb3VzIHVuaW9ucy0tLXRoZXkncmUgaWxsZWdhbCwgYW5kIHdlIGdlbmVyYXRlIGFuCisJZXJyb3IgZWxzZXdoZXJlIHRvIHRoYXQgZWZmZWN0LgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X21ldGhvZCk6IE1ha2UgdGhlIGVycm9yIG1lc3NhZ2UgYWJvdXQgYQorCWR1cGxpY2F0ZWQgbWVtYmVyIGEgbGl0dGxlIG1vcmUgaW5mb3JtYXRpdmUuCisKKwlGcmkgU2VwIDE4IDEyOjI4OjEzIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55OiBEZWZpbmUgWVlERUJVRyBpZiBTUEVXX0RFQlVHIGlzIGRlZmluZWQuCisJKGRlYnVnX3l5dHJhbnNsYXRlKTogWVlERUJVRyB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkLCBubyBuZWVkIHRvIHRlc3QuIAorCisJRnJpIFNlcCAxOCAxMDo0NjoxOSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAodW5hcnlfZXhwcik6IFdoZW4gcGFyc2luZyBkZWxldGUsIGZpcnN0IGNvbXBsYWluIGlmCisJaXQncyBhIG5vbi1wb2ludGVyLCB0aGVuIGNoZWNrIGlmIGl0J3MgYSBwb2ludGVyIHdpdGggdGhlIHZhbHVlIHplcm8uCisJQWxzbyBiZSBzdXJlIG5vdCB0byBjYWxsIGJ1aWxkX2RlbGV0ZSBpZiB0aGF0J3MgdGhlIGNhc2UuCisKK1RodSBTZXAgMjQgMTg6MDM6MDcgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogU2V0IE1laXNzbmVyIHZlcnNpb24gIyB0byAyNy4KKwkoU1RSVUNUX1ZBTFVFX1JFR05VTSk6IERlbGV0ZSBtYWNyby4KKwkoU1RSVUNUX1ZBTFVFKTogRGVmaW5lIGFzIDAsIHNvIHRoYXQgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzZXMKKwlhcmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRoaXMgZml4ZXMgdmFyaW91cyBjb2RlZ2VuCisJcHJvYmxlbXMgd2l0aCBmdW5jdGlvbnMgcmV0dXJuaW5nIHN0cnVjdHVyZXMuCisKKwkqIG1pcHMuYyAoaW5pdF9jdW11bGF0aXZlX2FyZ3MpOiBEb24ndCBhZHZhbmNlIGFyZyBwb2ludGVyIGlmCisJZnVuY3Rpb24gcmV0dXJucyBhIHN0cnVjdHVyZS4KKworVGh1IFNlcCAyNCAxMjozODozMSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBwYS5oIChSRUdJU1RFUl9NT1ZFX0NPU1QpOiBGaXggdHlwby4gIFVzZSBgfHwnIGluc3RlYWQgb2YgYHwnLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBEb24ndCBoYW5kbGUgJ3InIGNvbnN0cmFpbnRzIGhlcmUuCisJKiBwYS5jIChjbG9iYmVyZWRfcmVnaXN0ZXIpOiBEZWxldGUuCisJKHNyY3NpX29wZXJhbmQpOiBSZXR1cm4gMSBhbHNvIGZvciB0aGluZ3MgbWF0Y2hpbmcKKwlkZXBpX2NpbnRfb3BlcmFuZC4KKwkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IFJlcGxhY2UuCisJKiBwYS5tZCAobGRvL2xkaWwgU0ltb2RlIGFuZCBISW1vZGUgcmVjb2duaXplcnMpOiBVc2UKKwkiY29uc3RfaW50X29wZXJhbmQiIGZvciBvcGVyYW5kIDEgYW5kIHNpbXBsaWZ5IGZpbmFsIGNvbmRpdGlvbi4gCisJUmVtb3ZlIGBuJyBjb25zdHJhaW50LgorCShkZXBpIFNJbW9kZSBhbmQgSEltb2RlIHJlY29nbml6ZXJzKTogUmVtb3ZlIGBuJyBjb25zdHJhaW50LgorCShwbHVzOlNJIC4uLiBoaWdoIC4uLiBzcGxpdHRlcik6IERvbid0IG92ZXJ3cml0ZSBpbnB1dCwgZ28gdmlhCisJY2xvYmJlciBvcGVyYW5kIGluc3RlYWQuCisJKG1hbnkgcGF0dGVybnMpOiBSZXBsYWNlIGBpbicgY29uc3RyYWludCB3aXRoIGp1c3QgYGknLgorCShtb3ZzdHJzaSk6IERvbid0IGRvIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoKSksIHVzZSBleHBsaWNpdAorCXBzZXVkb3MgaW5zdGVhZCwgZ2VuZXJhdGVkIGluIHByZXBhcmF0aW9uIEMgY29kZS4gIERvbid0IGNhbGwKKwlmb3JjZV9ub3RfbWVtIGZvciBvcGVyYW5kIDIuCisJKG1vdnN0cnNpIHJlY29nbml6ZXIpOiBBZGQgYCYnIHRvIG9wZXJhbmQgMy4KKwkoYW5kc2kzKTogRml4IHR5cG8uCisJKGlvcnNpMyk6IEZpeCB0eXBvLgorCShsb2FkLXNoaWZ0LTE2KTogTmV3IG9wdGltaXplci4KKwkobG9hZC1zaGlmdCBvcHRpbWl6ZXJzKTogU2V0ICJ0eXBlIiBhdHRyLgorCitUaHUgU2VwIDI0IDE1OjE3OjM4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCBPYmpjIG9wdGlvbnMuCisKKwkqIGNvbmZpZ3VyZS5iYXQ6IFVzZSB4Z2NjLCBub3QgZ2NjLgorCitUaHUgU2VwIDI0IDA2OjMwOjQ3IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtbGV4LmMgKHl5bGV4LCBjYXNlICciJyk6IEluaXRpYWxpemUgYXJnIHBhc2VkIHRvIHJlYWRlc2NhcGUuCisKKwkqIGdlbmF0dHJ0YWIuYyAobGVuZ3RoX3VzZWQpOiBOZXcgdmFyaWFibGUuCisJKHdhbGtfYXR0cl92YWx1ZSk6IFNldCBpdCB3aGVuIHdlIGhhdmUgKGVxX2F0dHIgImxlbmd0aCIgLi4uKS4KKwkod3JpdGVfY29uc3RfbnVtX2RlbGF5X3Nsb3RzKTogVmFsdWUgaXMgMSB1bmxlc3MgTEVOR1RIX1VTRUQgaXMgc2V0LgorCisJKiByZW9yZy5jIChtYXJrX3NldF9yZXNvdXJjZXMsIGNhc2UgQ0MwKTogU2V0IFJFUy0+Q0MgaWYgSU5fU0VTVC4KKworCSogcmVnY2xhc3MuYyAoZm9yYmlkZGVuX2luY19kZWNfY2xhc3MsIGluX2luY19kZWMpOiBOZXcgdmFyaWFibGVzLgorCShyZWdjbGFzcyk6IERvbid0IGFsbG9jYSB0aGUgY29zdHMgdHdpY2UuCisJSW5pdGlhbGl6ZSBmb3JiaWRkZW5faW5jX2RlY19jbGFzcy4KKwlGb3IgcmVncyB0aGF0IGhhdmUgaW5jLWRlYywgaWdub3JlIGZvcmJpZGRlbiBjbGFzc2VzLgorCShyZWNvcmRfYWRkcmVzc19yZWdzKTogVXBkYXRlIGluX2luY19kZWMuCisKK1RodSBTZXAgMjQgMDI6MzY6MDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzeXNsaW1pdHMuaDogTmV3IGZpbGUsIGluY2x1ZGVzIHN5c3RlbSdzIGxpbWl0cy5oLgorCSogbGltaXR4Lmg6IEluY2x1ZGUgc3lzbGltaXRzLmggaW5zdGVhZCBvZiBzeXN0ZW0ncyBsaW1pdHMuaC4KKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgc3lzbGltaXRzLmguCisJKGluc3RhbGwtZml4aW5jbHVkZXMpOiBJZiB3ZSBmaXggc3lzdGVtJ3MgbGltaXRzLmgsIGluc3RhbGwgdGhhdAorCWFzIHN5c2xpbWl0cy5oCisKKwkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBOZXcgYXJnIGlnbm9yZV9wdHIuCisJKHl5bGV4KTogUGFzcyBuZXcgYXJnLCBoYW5kbGUgcmVzdWx0IHRoYXQgY29tZXMgYmFjay4KKworV2VkIFNlcCAyMyAxOToyNjo0MiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBQcm9wZXJseSBjaGVjayBmb3IgY29uc3RhbnQgYWRkcmVzcy4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiwgY2FzZSBTSUdOX0VYVEVORCk6IFVzZQorCUhPU1RfQklUU19QRVJfV0lERV9JTlQsIG5vdCBIT1NUX0JJVFNfUEVSX0lOVC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkX2NvbnZlcnQpOiBBZGQgbWlzc2luZyBjYXN0IHRvIEhPU1RfV0lERV9JTlQuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFRpZ2h0ZW4gdXAgdGVzdCBmb3Igd2hlbiB3ZSBjYW4ndAorCWRlbGV0ZSBhIHNldCBvZiBDQzAuCisJRG9uJ3QgaW5zZXJ0IGluc25zIGJldHdlZW4gc2V0IGFuZCB1c2Ugb2YgQ0MwLgorCisJKiBmaW5hbC5jIChzaG9ydGVuX2JyYW5jaGVzKTogQ29ycmVjdGx5IGFjY2VzcyBpbnNuIG5lZWRpbmcgZGVsYXkgc2xvdC4KKworCSogY29tYmluZS5jIChzaWduaWZpY2FudF9iaXRzLCBudW1fc2lnbl9iaXRfY29waWVzKTogSGFuZGxlIFNVQlJFR3MKKwltYWRlIGZvciBwcm9tb3RlZCB2YXJpYWJsZXMuCisKKwkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogRG9uJ3QgbWFrZSBjb3B5IG9mIGluc24gdGhhdAorCXJlZmVyZW5jZXMgQ0MwLgorCisJKiByb21wLm1kIChkZWZpbmVfYXR0ciAidHlwZSIpOiBOZXcgdHlwZSAiaWJyYW5jaCIuCisJKGRlZmluZV9hdHRyICJsZW5ndGgiKTogU2V0IGxlbmd0aCBmb3IgImlicmFuY2giIHR5cGUuCisJKGRlZmluZV9hdHRyICJpbl9kZWxheV9zbG90Iik6IEFkZCBuZXcgdHlwZSAiaWJyYW5jaCI7CisJZm9yICJicmFuY2giLCBvbmx5IGhhcyBkZWxheSBzbG90IGlmIGxlbmd0aCBpcyA0LgorCShkZWZpbmVfYXR0ciAiY2NfdHlwZSIpOiBBZGQgbmV3IHR5cGUgImlicmFuY2giLgorCShpbmRpcmVjdCBicmFuY2hlcyk6IE5vdyB0eXBlICJpYnJhbmNoIi4KKworCSogYWxwaGEuYyAoYWxwaGFfZ3BfZGVhZF9hZnRlcik6IFJldHVybiAwIGlmIG5vdCBvcHRpbWl6aW5nLgorCitXZWQgU2VwIDIzIDAwOjExOjM1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3ZhcmFyZ3MuaDogRmluaXNoIGNoYW5naW5nIF9BTlNJX0ggdG8gX0FOU0lfSF8uCisKK1R1ZSBTZXAgMjIgMjM6Mzk6MDYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBpMzg2bWFjaC5oIChwZXJmb3JtX2ZpeGRmc2kpOiBDb3B5IGFyZyB0byBtZW1vcnkgdmFyaWFibGUuCisKK1R1ZSBTZXAgMjIgMTQ6NTQ6MzggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9vcC5jIChiYXNpY19pbmR1Y3Rpb25fdmFyKTogSW5zaWRlIFBMVVMsIHdoZW4gbG9va2luZyBmb3IgcHJvbW90ZWQKKwl2YXIsIG1ha2Ugc3VyZSBpdCdzIGEgUkVHLgorCitUdWUgU2VwIDIyIDEyOjIxOjExIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDI2LgorCShSRUdfUEFSTV9TVEFDS19TUEFDRSk6IFVzZSBVTklUU19QRVJfV09SRCBpbnN0ZWFkIG9mIDQsIGFuZAorCXN1YnN0cmFjdCBGSVJTVF9QQVJNX09GRlNFVC4KKwkoRklSU1RfUEFSTV9DQUxMRVJfT0ZGU0VUKTogRGVsZXRlIHVudXNlZCBtYWNyby4KKworCSogbWlwcy5jIChpbml0X2N1bXVsYXRpdmVfYXJncyk6IFByaW50IHR5cGVzIG9mIGZudHlwZSBhbmQgdGhlCisJcmV0dXJuIHR5cGUgaWYgLW1kZWJ1Z2UuCisKKwkqIGRlY3Jvc2UuaCAoQ1BQX1NQRUMpOiBFbGltaW5hdGUgZGVmaW5pbmcgdmFyaW91cyBidWlsdGluCisJZnVuY3Rpb25zIHdpdGggLUQ8bmFtZT49X19idWlsdGluXzxuYW1lPiwgaWYgbmVpdGhlciAtZmJ1aWx0aW4gbm9yCisJLWZuby1idWlsdGluIHdlcmUgcGFzc2VkLgorCShDQzFfU1BFQyk6IEVsaW1pbmF0ZSBwYXNzaW5nIC1mbm8tYnVpbHRpbiB0byB0aGUgY29tcGlsZXIgaWYKKwluZWl0aGVyIC1mYnVpbHRpbiBub3IgLWZuby1idWlsdGluIHdlcmUgcGFzc2VkLiAgRWxpbWluYXRlCisJJXtzYXZlLXRlbXBzOiB9IHNpbmNlIGdjYyBubyBsb25nZXIgZ2l2ZXMgYW4gdW5rbm93biBzd2l0Y2gKKwltZXNzYWdlIGlmIGl0IGlzIHVzZWQuCisKKwkqIGkzODZyb3NlLmggKENQUF9TUEVDKTogRWxpbWluYXRlIGRlZmluaW5nIHZhcmlvdXMgYnVpbHRpbgorCWZ1bmN0aW9ucyB3aXRoIC1EPG5hbWU+PV9fYnVpbHRpbl88bmFtZT4sIGlmIG5laXRoZXIgLWZidWlsdGluIG5vcgorCS1mbm8tYnVpbHRpbiB3ZXJlIHBhc3NlZC4KKwkoQ0MxX1NQRUMpOiBFbGltaW5hdGUgcGFzc2luZyAtZm5vLWJ1aWx0aW4gdG8gdGhlIGNvbXBpbGVyIGlmCisJbmVpdGhlciAtZmJ1aWx0aW4gbm9yIC1mbm8tYnVpbHRpbiB3ZXJlIHBhc3NlZC4gIEVsaW1pbmF0ZQorCSV7c2F2ZS10ZW1wczogfSBzaW5jZSBnY2Mgbm8gbG9uZ2VyIGdpdmVzIGFuIHVua25vd24gc3dpdGNoCisJbWVzc2FnZSBpZiBpdCBpcyB1c2VkLgorCShNQVNLX0hBTEZfUElDKTogTW92ZSBiaXQgbWFzayB0byAweDQwMDAwMDAwLCB0byBhbGxvdyBmb3IgaTM4Ni5oCisJdG8gZGVmaW5lIG1vcmUgc3dpdGNoZXMgd2l0aG91dCBvdmVybGFwcGluZyBvdXIgcHJpdmF0ZSBzd2l0Y2guCisJKFRBUkdFVCBzd2l0Y2hlcyk6IEFkZCAtbWRlYnVnYiB0byBkZWJ1ZyBoYWxmLXBpYyBjb2RlLgorCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IE9ubHkgc2V0IGZsYWdfZ251X2xpbmtlciBGQUxTRSBhbHdheXMsIGFuZAorCWZsYWdfaW5saW5lX2Z1bmN0aW9ucyBpZiAtTzMuICBJbiBwYXJ0aWN1bGFyIG5ldmVyIHNldAorCS1mb21pdC1mcmFtZS1wb2ludGVyIHdoaWNoIGN1cnJlbnRseSBtZXNzZXMgdXAgZGVidWdnaW5nLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBEZWZpbmUgaTM4Ni1vc2Zyb3NlIHZlcnNpb24gdGhhdCBkZWFscworCXdpdGggaGFsZi1waWMuCisJKE9WRVJSSURFX09QVElPTlMpOiBEZWZpbmUgdG8gaW5pdGlhbGl6ZSBoYWxmLXBpYy4KKwkoQVNNX0ZJTEVfRU5EKTogRGVmaW5lIHRvIGR1bXAgb3V0IGhhbGYtcGljIHZhcmlhYmxlcyBpZiBuZWVkZWQuCisKKwkqIHQtaTM4NnJvc2UgKEVYVFJBX09CSlMpOiBEZWZpbmUgYXMgaGFsZnBpYy5vLgorCShDT05GSUcyX0gpOiBBZGQgJChzcmNkaXIpL2hhbGZwaWMuaC4KKwkoaGFsZnBpYy5vKTogQWRkIGRlcGVuZGVuY2llcy4KKworVHVlIFNlcCAyMiAwMzoxMjowMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogV2hlbiBzZXR0aW5nIHJlZ19oYXNfb3V0cHV0X3JlbG9hZCwKKwlsb29wIG92ZXIgbXVsdGlwbGUgcmVncyBvbmx5IGZvciBoYXJkIHJlZy4gIFNldCByZWdfaXNfb3V0cHV0X3JlbG9hZAorCWluIHNlcGFyYXRlIGxvb3AuCisKK01vbiBTZXAgMjEgMTI6MjI6MjQgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVvcmcuYyAobWFya19zZXRfcmVzb3VyY2VzLCBjYXNlIFJFRyk6IEEgcmVnaXN0ZXIgaXMgc2V0IGlmZgorCSJpbl9kZXN0IiBpcyBub256ZXJvLgorCitNb24gU2VwIDIxIDE0OjE2OjEwIDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBqdXBpdGVyLnNpY3Muc2UpCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogTWFrZSB0ZXN0IHdoZXRoZXIgdG8gdXNlIEFORCBvcgorCXtTSUdOLFpFUk99X0VYVFJBQ1QgZGVwZW5kIG9uIFVOU0lHTkVEUC4KKworTW9uIFNlcCAyMSAwODoyNjo1NSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IElmIHdlIGNhbid0IGdldCBhIHJlZ2lzdGVyIHRoYXQgd2Uga25vdyB3b24ndAorCWludGVyZmVyZSB3aXRoIGdyb3VwcywgZ2V0IG9uZSB0aGF0IG1pZ2h0IGluc3RlYWQgb2YgZ2l2aW5nIHVwLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFByaW50IHRoZSBuZWVkcyB0byB0aGUgZHVtcCBmaWxlLgorCitNb24gU2VwIDIxIDAyOjQ1OjE5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAocHV0X3Zhcl9pbnRvX3N0YWNrKTogQ2hlY2sgUkVHICE9IDAgYmVmb3JlIGRlcmVmZXJlbmNlLgorCitTdW4gU2VwIDIwIDE2OjU4OjA1IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBmaXNocG9uZC5jeWdudXMuY29tKQorCisJKiB4LXN2cjQ6ICBOZXcgZ2VuZXJpYyBTVlI0IGhvc3QgbWFrZWZpbGUgZnJhZ21lbnQuCisJKiB4LWkzODZ2NDogIEZpbGUgZGVsZXRlZC4KKwkqIHgtbmNyMzAwMDogIEdldCBhbGxvY2EgdXNpbmcgQUxMT0NBLCBub3QgbGlidWNiLmEuCisJKiBjb25maWd1cmUgKGkzODYtKi1zeXN2NCopOiAgVXNlIHgtc3ZyNCwgbm90IHgtaTM4NnY0LgorCSogY29uZmlndXJlIChpNDg2LSotc3lzdjQqKTogIFVzZSB4LXN2cjQuCisKK1N1biBTZXAgMjAgMjE6MTg6MTUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0KTogU2V0IGFuZCBjb21wYXJlIGV4dGVuZF9vcCB3aXRoIDAsIG5vdCBOVUxMLgorCisJKiBjc2UuYyAoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBOZXcgYXJncyBQTU9ERTEsIFBNT0RFMi4KKwkoZm9sZF9ydHgsIHJlY29yZF9qdW1wX2VxdWl2KTogVXNlIHRoZW0gdG8gZ2V0IG1vZGVzIG9mIGNvbXBhcmlzb24uCisJKGZvbGRfcnR4KTogQXNzb2NpYXRlIE1JTlVTIHdpdGggbmVzdGVkIFBMVVMuCisKKwkqIHNlcTM4Ni5oIChMUFJFRklYKTogT3ZlcnJpZGRlbiBhcyBgLkwnLgorCShBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwsIEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwpOiBMaWtld2lzZS4KKworU3VuIFNlcCAyMCAwNTo1MzoyMCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQWx3YXlzIGNhbGwgc2V0X3NpZ25pZmljYW50IG9uIG5ldworCXBhdHRlcm5zLCBzbyBkb24ndCBjYWxsIGp1c3QgaW4gc3BsaXQgY2FzZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IE1vdmUgc2lnbiBleHRlbnNpb24gaW5zaWRlIGFyaXRobWV0aWMKKwl3aGVuIHdlIGhhdmUgYSBjb25zdGFudCBjb21wdXRhdGlvbiBpbnNpZGUgYW5vdGhlciBjb21wdXRhdGlvbi4KKworCSogZW1pdC1ydGwuYyAoZW1pdF9pbnNuX2FmdGVyX3dpdGhfbGluZV9ub3Rlcyk6IE5ldyBmdW5jdGlvbi4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERlbGV0ZSBpbnNucyB0aGF0IHNldCByZWdpc3RlcnMgdGhhdAorCWFyZSBub3QgdXNlZCBlbHNld2hlcmUuCisJRml4IHNvbWUgYnVncyBpbiAiaWYgKC4uLikgeCA9IGE7IGVsc2UgeCA9IGI7IiBjb2RlLgorCVJlbW92ZSB1c2VzIG9mIHJlb3JkZXJfaW5zbnMuCisJQWRkIGNvZGUgdG8gbWFrZSBzY2MgaW5zbnMgZm9yICJpZiAoLi4uKSB4ID0gZXhwOyIgaWYgRVhQIGlzIHNpbXBsZQorCWVub3VnaC4KKwlPcHRpbWl6ZSAiaWYgKC4uLikgeCA9IGI7IiBpZiBqdW1wcyB2ZXJ5IGV4cGVuc2l2ZTsgZG9uJ3QgdXNlIGEgUkVHCisJYXMgdGhlIG9sZGVyIHZhbHVlIG9mIFggc2luY2UgaXQgZG9lc24ndCBoZWxwIGFuZCBjYW4gaHVydC4KKwlDb3JyZWN0bHkgcGxhY2UgZ2VuZXJhdGVkIGluc25zIGluIGFib3ZlIGNhc2UuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMsIGZpbmRfcmVsb2Fkc190b3BsZXYpOiBUcmVhdAorCUJZVEVfTE9BRFNfU0lHTl9FWFRFTkQganVzdCBsaWtlIEJZVEVfTE9BRFNfWkVST19FWFRFTkQuCisJKiBjb21iaW5lLmMgKHN1YnN0LCBzaW1wbGlmeV9hbmRfY29uc3RfaW50LCBzaWduaWZpY2FudF9iaXRzKToKKwlMaWtld2lzZS4KKwkobnVtX3NpZ25fYml0X2NvcGllcywgY2FzZSBNRU0pOiBOZXcgY2FzZSBmb3IgQllURV9MT0FEU19TSUdOX0VYVEVORC4KKwkobnVtX3NpZ25fYml0X2NvcGllcywgY2FzZSBTVUJSRUcpOiBIYW5kbGUganVzdCBsaWtlIHNpZ25pZmljYW50X2JpdHMuCisKK1NhdCBTZXAgMTkgMTU6NTU6MzEgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IENsZWFyIHNpZ25pZmljYW50X3ZhbGlkIAorCWF0IGVuZCBvZiBjb21iaW5lIHBhc3MgZm9yIGEgZnVuY3Rpb24uCisJKGZpbmRfc3BsaXRfcG9pbnQsIGNhc2UgTUVNKTogU2VlIGlmIGZpcnN0IG9wZXJhbmQgb2YgdGhlIFBMVVMKKwl0aGF0IG1ha2VzIHVwIGFuIGFkZHJlc3MgaXMgY29tcGxleC4KKwkoc3Vic3QpOiBBZGQgbWlzc2luZyBhcmcgdG8gcmVjdXJzaXZlIGNhbGxzIHdoZW4gSUZfVEhFTl9FTFNFCisJaXMgYW4gYXJnIG9mIGFuIG9wZXJhdG9yLgorCShzdWJzdCwgY2FzZSBJRl9USEVOX0VMU0UpOiBHZW5lcmFsaXplIGNvZGUgdG8gcHJvcGFnYXRlIGNvbXBhcmlzb24KKwlyZXN1bHQgaW50byBhcm1zIGJ5IHVzaW5nIGtub3duX2NvbmQuCisJSWYgYW4gYXJtIGlzIHRoZSBmaXJzdCBvcGVyYW5kIG9mIHRoZSBjb21wYXJpc29uLCBtYWtlIGl0IHRoZQorCXRydWUgYXJtLgorCVJlbW92ZSB1bm5lZWRlZCBjb21wYXJpc29uIHdoZW4gYXJtcyBhcmUgaWRlbnRpY2FsLgorCVRyeSB0byBjb252ZXJ0IElGX1RIRU5fRUxTRSB0byBBQlMsIChuZWcgKGFicyBYKSksIFtVU11NSU4sIFtVU11NQVguCisJQ29udmVydCAoaWZfdGhlbl9lbHNlIChuZSBBIDApIChPUCBYIEMpIFgpIHRvIChPUCBYIChtdWx0IEEgQykpLgorCShzdWJzdCwgY2FzZSBTRVQpOiBJZiB3ZSBkb24ndCBoYXZlIGNvbmRpdGlvbmFsIG1vdmVzLAorCWNvbnZlcnQgSUZfVEhFTl9FTFNFIGludG8gbG9naWNhbCBvcGVyYXRpb25zLgorCShzdWJzdCwgY2FzZSBBTkQpOiBBbHdheXMgbWFrZSBjb25kaXRpb25hbCBtb3ZlcywgZXZlbiBpZiB3ZQorCWRvbid0IHN1cHBvcnQgdGhlbSBvbiB0aGUgbWFjaGluZS4KKwkoa25vd25fY29uZCwgZXh0ZW5kZWRfY291bnQpOiBOZXcgZnVuY3Rpb25zLgorCShnZW5fYmluYXJ5KTogRm9yIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMsIHB1dCBjb25zdGFudCBsYXN0LgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogVGhlIGluc25zIG1hZGUgYnkgYSBERUZJTkVfU1BMSVQgbWlnaHQKKwljb250YWluIGEgUEFSQUxMRUwgYW5kIHRoZSBjYWxsIHRvIHJlY29nX2Zvcl9jb21iaW5lIG1pZ2h0IGFkZCBpdC4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uLCBjYXNlIEFTSElGVCk6IEZpeCB0eXBvLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogV2hlbiByZW1vdmluZyBSRUdfVU5VU0VEIG5vdGUsCisJdXBkYXRlIHJlZ19uX2RlYXRocy4KKwlMaWtld2lzZSwgd2hlbiBtYWtpbmcgbmV3IFJFR19ERUFEIG5vdGVzIGZvciBkaXN0cmlidXRlX25vdGVzLgorCShyZW1vdmVfZGVhdGgsIG1vdmVfZGVhdGhzKTogVXBkYXRlIHJlZ19uX2RlYXRocy4KKwkoZGlzdHJpYnV0ZV9ub3Rlcyk6IFdoZW4gcGxhY2luZyBzZWNvbmQgUkVHX0RFQUQgb3IgUkVHX1VOVVNFRCBub3RlIG9yCisJaWdub3Jpbmcgc3VjaCBhIG5vdGUsIHVwZGF0ZSByZWdfbl9kZWF0aHMuCisKKwkqIHJ0bC5oIChTVUJSRUdfUFJPTU9URURfe1ZBUixVTlNJR05FRH1fUCk6IE5ldyBtYWNyb3MuCisJKiB0cmVlLmggKERFQ0xfTU9ERSwgREVDTF9SVEwpOiBVcGRhdGUgY29tbWVudHMuCisJKiBleHByLmggKFBST01PVEVfTU9ERSk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgorCSogZXhwci5jIChjb252ZXJ0X21vdmUsIGNvbnZlcnRfdG9fbW9kZSk6IFN0cmlwIG9mZiBhIFNVQlJFRyBtYWRlCisJZm9yIHZhcmlhYmxlcyB3aXRoIHByb21vdGVkIG1vZGVzLgorCShzdG9yZV9leHByKTogU3RvcmUgaW50byB2YXJpYWJsZXMgd2l0aCBwcm9tb3RlZCBtb2RlcyBieQorCWRvaW5nIHRoZSBhcHByb3ByaWF0ZSBleHRlbnNpb24gb3BlcmF0aW9uLgorCShleHBhbmRfZXhwciwgY2FzZSBWQVJfREVDTCk6IEdlbmVyYXRlIFNVQlJFR3MgZm9yIHByb21vdGVkIG9iamVjdHMuCisJKGV4cGFuZF9leHByLCBjYXNlIFNBVkVfRVhQUik6IExpa2V3aXNlIGZvciBTQVZFX0VYUFJzLgorCShleHBhbmRfaW5jcmVtZW50KTogSGFuZGxlIGluY3JlbWVudCBvZiBwcm9tb3RlZCBvYmplY3RzLgorCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnN7LF9pbnNuc30pOiBBZGQgbmV3IHBhcm1zIGZvciBwcm9tb3RlZAorCW1vZGUgYW5kIHNpZ25lZG5lc3M7IGFsbCBjYWxsZXJzIGNoYW5nZWQuCisJSW5zZXJ0IG1vZGUgY29udmVyc2lvbnMgd2hlbiByZXF1aXJlZC4KKwkoZml4dXBfdmFyX3JlZnNfMSk6IEFkZCBuZXcgcGFybXMgZm9yIG1vZGUgYW5kIHNpZ25lZG5lc3M7CisJaGFuZGxlIFNVQlJFR3MgZm9yIHByb21vdGVkIHZhbHVlcy4KKwkoYXNzaWduX3Bhcm1zKTogUHJvbW90ZSB0aGUgbW9kZSBvZiBwYXJhbWV0ZXJzIHdoZW4gdXNlZnVsIGZvcgorCXRoZSB0YXJnZXQgbWFjaGluZS4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCB2YXJfcmVmc19xdWV1ZSk6IFJlbW92ZSB1bnVzZWQgZmllbGQgT1JJR0lOQUwuCisJQWRkIG5ldyBmaWVsZHMgUFJPTU9URURfTU9ERSBhbmQgVU5TSUdORURQLgorCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDb252ZXJ0IGFjdHVhbCB0byBmb3JtYWwncworCW1vZGUgKGluIGNhc2UgZm9ybWFsIHdhcyBwcm9tb3RlZCkuCisJKiBsb29wLmMgKGJhc2ljX2luZHVjdGlvbl92YXIpOiBBZGQgbmV3IHBhcmFtZXRlciBQLgorCUNoZWNrIGZvciBiaXZzIHRoYXQgYXJlIHNldCBvdmVyIG11bHRpcGxlIGluc25zIGFuZCBhbHNvCisJYWxsb3cgYSBTSUdOX0VYVEVORCB0byBiZSB1c2VkOyByZW1vdmUgY2hlY2sgZm9yIE1JTlVTIHNpbmNlCisJd2UgZG9uJ3QgbWFrZSBNSU5VUyB3aXRoIGEgY29uc3RhbnQgMm5kIG9wZXJhbmQgYW55IG1vcmUuCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdW5vcCk6IERvbid0IG1ha2UgU1VCUkVHIGZvciBwcm9tb3RlZAorCXZhcmlhYmxlcyBhcyBvcGVyYW5kcy4KKwkqIHN0bXQuYyAodGFpbF9yZWN1cnNpb25fYXJncyk6IFVzZSBtb2RlIG9mIERFQ0xfUlRMLCBub3QKKwlERUNMX01PREUuCisJKGV4cGFuZF9kZWNsKTogUHJvbW90ZSBtb2RlcyBvZiBzY2FsYXIgdmFyaWFibGVzIHdoZW4gdXNlZnVsIG9uCisJdGFyZ2V0LgorCSogdW5yb2xsLmMgKGZpbmRfc3BsaXR0YWJsZV9yZWdzKTogSWYgYW55IEJJViB1cGRhdGUgaXNuJ3QKKwlzaW1wbGUsIGRvbid0IHNwbGl0IGl0LgorCShmaW5hbF9naXZfdmFsdWUpOiBMb29rIGZvciBiaXYgdXBkYXRlcyBieSBtYXRjaGluZyBpbnNuczsgZG9uJ3QKKwl0cnkgdG8gcmVwYXJzZSB0aGUgaW5zbi4KKwkqIHJzNjAwMC5oIChQUk9NT1RFX01PREUpOiBOZXcgbWFjcm8uCisKKwkqIHJ0bGFuYWwuYyAocmVnX3NldF9sYXN0KTogQWxsb3cgb2xkIHZhbHVlIHRvIGJlIGEgU1VCUkVHLgorCisJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCwgY2FzZSAnaCcsICdIJywgJ3cnKTogTWlub3IgY2xlYW51cHMuCisJKiByczYwMDAuaCAoQlJBTkNIX0NPU1QpOiBJbmNyZWFzZSBmcm9tIDIgdG8gMy4KKwkqIHJzNjAwMC5tZCAoc21heCwgc21pbiwgdW1heCwgdW1pbik6IEFkZCBkZWZpbmVfc3BsaXRzLgorCisJKiBhbHBoYS5oIChQUk9NT1RFX01PREUpOiBOZXcgbWFjcm8uCisJKFJFR19BTExPQ19PUkRFUik6IFB1dCAkMCBpbiBmcm9udCBvZiAkMjEtJDE2LgorCShDT05TVF9PS19GT1JfTEVUVEVSKTogQ2hhbmdlIG1lYW5pbmdzIG9mIE4sIE8sIGFuZCBQLgorCShCUkFOQ0hfQ09TVCk6IEluY3JlYXNlIGZyb20gMyB0byA0LgorCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgbmV3IHByZWRpY2F0ZXMgcmVnX29yX2NpbnRfb3BlcmFuZCBhbmQKKwlzZXh0X2FkZF9vcGVyYW5kLgorCSogYWxwaGEubWQgKGFkZHNpMyk6IHN1YmwgY2FuIGJlIHVzZWQgdG8gc2lnbi1leHRlbmQgYWRkaXRpb24gb2YKKwlzbWFsbCBuZWdhdGl2ZSBjb25zdGFudHMuCisJKG5lZ3NpMik6IEFkZCBwYXR0ZXJuIGZvciAoc2lnbl9leHRlbmQgKG5lZyAuLikpLgorCShhbmQgcGF0dGVybik6IEZpeCB0eXBvIGluIGNvbnN0cmFpbnQuCisJKGFzaGxkaTMpOiBVc2UgbmV3IGRlZmluaXRpb24gb2YgY29uc3RhbnQgbGV0dGVycy4KKwkoc21heCwgc21pbiwgdW1heCwgdW1pbik6IEFkZCBkZWZpbmVfc3BsaXRzLgorCShjb21wYXJlcyk6IENhbiBjb21wYXJlIGNvbnN0YW50IHdpdGggemVybyBieSBhZGRpbmcgbmVnYXRpdmUgb2YKKwljb25zdGFudC4KKwkoc3RvcmUgaW5zbnMpOiBDYW4gc3RvcmUgMCBpbnRvIG1lbW9yeSBpbiBib3RoIGludGVnZXIgYW5kIEZQLgorCSogYWxwaGEuYyAoc2V4dF9hZGRfb3BlcmFuZCwgcmVnX29yX2NpbnRfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi5zCisJKHByaW50X29wZXJhbmQsIGNhc2UgJ3InLCBjYXNlICdSJyk6IENsZWFuIHVwIGNvZGU7IHVzZSBDT05TVDBfUlRYLgorCisJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBGaXggdHlwbzogaGFkIE5PVF9JTlNOX0RFTEVURURfTEFCRUwuCisKKwkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBEb24ndCBjaGFuZ2UgbGFiZWxzIHRvIE5PVEVzIGlmIHdlIHdvdWxkCisJbm90IHJlYWxseSBoYXZlIGRlbGV0ZWQgdGhlbS4KKworCSogZ2VuY29uZmlnLmMgKHdhbGtfaW5zbl9wYXJ0LCBjYXNlIElGX1RIRU5fRUxTRSk6IFJlZmluZSB3aGVuCisJSEFWRV9DTU9WRV9GTEFHIGdldHMgc2V0LgorCitTYXQgU2VwIDE5IDE0OjUyOjA1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFsd2F5cyB1c2UgPj0gd2l0aCBGSVJTVF9QU0VVRE9fUkVHSVNURVIuCisKKwkqIGkzODZtYWNoLmggKFNJWkVfVFlQRSk6IERlZmluZWQuCisKK1NhdCBTZXAgMTkgMDQ6NTc6MDYgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2Lm1kIChzQ09ORCBwYXR0ZXJucyk6IERvbid0IGFsbG93IGEgTUVNIGluIHRoZSBTRVRfREVTVCwKKwliZWNhdXNlIHRoZXNlIGluc25zIGNhbid0IGhhdmUgaW5wdXQgcmVsb2FkcywgYW5kIGEgTUVNIG1pZ2h0IG5lZWQKKwlhbiBpbnB1dCBhZGRyZXNzIHJlbG9hZC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkX2NvbnZlcnQpOiBBdm9pZCB1c2luZyBjb252ZXJzaW9uIG9mIHVuc2lnbmVkCisJdG8gZmxvYXRpbmc7IG9mZnNldCB2YWx1ZSBieSBoYW5kIHRvIGZpdCBpbiBzaWduZWQgdHlwZS4KKworU2F0IFNlcCAxOSAwMDo1MDozMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBEbyBzdWJzdGl0dXRlIGluIGFkZHJlc3Mgb2YgTUVNIGRlc3QuCisKKwkqIHJlbG9hZDEuYyAoaW5pdF9yZWxvYWQpOiBGaXggdHlwby4KKworRnJpIFNlcCAxOCAyMTowOToxNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGxpYmdjYzIuYzogRGVjbGFyZSBfZXhpdCBhcyB2b2xhdGlsZS4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2V0IE1FTV9JTl9TVFJVQ1RfUCByaWdodCBpbiBzdGFjayBzbG90cy4KKworRnJpIFNlcCAxOCAxNTo1ODoxNSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGZpeGluY2x1ZGVzOiBEb24ndCBsb29rIGZvciAqLmggc3ltbGlua3MgaWYgdGhlIGhvc3QgZG9lc24ndAorCWhhdmUgc3ltbGlua3MuCisKK0ZyaSBTZXAgMTggMTc6MzQ6MjcgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMubWQgKGNhbGxfaW50ZXJuYWwpOiBJZiB0aGUgbWVtb3J5IGFkZHJlc3MgdG8gY2FsbCBpcyByZWFsbHkKKwlhIGNvbnN0YW50IGludGVnZXIsIGxvYWQgaXQgdXAgaW50byAkYXQgYW5kIGRvIHRoZSBjYWxsIGZyb20KKwl0aGVyZS4KKwkoY2FsbF92YWx1ZV9pbnRlcm5hbCk6IERpdHRvLgorCitGcmkgU2VwIDE4IDAzOjQ4OjE3IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKG04OGtfdm9sYXRpbGVfY29kZSk6IE5ldyB2YXJpYWJsZS4KKwkocHJpbnRfb3BlcmFuZCk6IFRyYWNrIHZvbGF0aWxlIG1lbW9yeSByZWZlcmVuY2VzIGFuZCBvdXRwdXQgYQorCXNlcmlhbGl6aW5nIGluc3RydWN0aW9uIGJlZm9yZSBhIGxvYWQgd2hlbiBuZWNlc3NhcnkuCisJKiBtODhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbXtubyx9c2VyaWFsaXplLXZvbGF0aWxlLgorCShPVkVSUklERV9PUFRJT05TKTogLW04ODExMCBhbmQgLW04ODAwMCBpbXBseSAtbXNlcmlsaXplLXZvbGF0aWxlLgorCShBREpVU1RfSU5TTl9MRU5HVEgpOiBWb2xhdGlsZSBtZW1vcnkgb3BlcmFudGlvbnMgbWF5IGJlIGxvbmdlci4KKwkoQ0NfU1RBVFVTX0lOSVQpOiBSZXNldCBtODhrX3ZvbGF0aWxlX2NvZGUgdG8gdGhlIHVua25vd24gc3RhdGUuCisJKiBtODhrLm1kIChsb2FkIHN0b3JlIHBhdHRlcm5zKTogUHJlcGVuZCBsb2FkcyBhbmQgc3RvcmVzIHdpdGggJVYKKwlhbmQgJXYgdG8gdHJhY2sgdGhlIHR5cGUgYW5kIGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcy4KKworCSogbTg4ay5jIChtODhrX3ZlcnNpb24sIG04OGtfdmVyc2lvbl8wMzAwKTogTmV3IHZhcmlhYmxlcy4KKwkqIG04OGsuaCAoVEFSR0VUX09QVElPTlMpOiBHZW5lcmFsaXplIHRvIC1tdmVyc2lvbi1TVFJJTkcuCisJKE9WRVJSSURFX09QVElPTlMpOiBDb21wdXRlIG04OGtfdmVyc2lvbl8wMzAwLgorCSogbTg4ay5tZCAoY2FsbF9tb3ZzdHJzaV9sb29wKTogUmVuYW1lZCBmcm9tIGNhbGxfYmxvY2tfbW92ZV9sb29wLgorCVVzZSBjYWxsLXZhbHVlIGZvciB0aGUgYmxvY2sgbW92ZSBwYXR0ZXJucy4KKworCSogbTg4a2RndXguaCAoUEVSRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogQ29tcHV0ZSBiYXNlZCBvbgorCW04OGtfdmVyc2lvbi4KKwkoQ1BVX0RFRkFVTFQpOiBNYWtlIGl0IC1tODgwMDAuCisKKwkqIG04OGsuaDogRG9uJ3QgdXNlICNlbGlmCisKK0ZyaSBTZXAgMTggMDE6MDg6NTUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24taGVhZGVycyk6IERvbid0IGNvcHkgYnl0ZW9yZGVyLmguCisKK1RodSBTZXAgMTcgMjA6MDY6MjIgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCUNvbXBsZXRlIDEzdGggQ3lnbnVzPC0tPkZTRiBtZXJnZS4KKworCVRodSBTZXAgMTcgMTM6MTU6MTUgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwlEbyBzb21lIG11Y2gtbmVlZGVkIGhvdXNlY2xlYW5pbmcgb2YgdGhlIEMrKyBmcm9udC1lbmQuCisJKiBjcC1jYWxsLmMgKGlkZWFsX2NhbmRpZGF0ZSk6IE1vdmUgYHAyJyBkb3duIGluc2lkZSAjaWYgMCdkIChvbmx5KQorCXNlY3Rpb24gdGhhdCBhY3R1YWxseSB1c2VzIGl0LiAgRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBgYnVmJy4KKwkoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBkdG9yX3NwZWNkJy4KKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBiYXNldHlwZScuCisJKiBjcC1jdnQuYyAoY29udmVydF90b19hZ2dyKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgZGVjbCBmb3IgYHByb3RlY3QnLgorCShjb252ZXJ0X3BvaW50ZXJfdG8pOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBmb3JtJy4KKwkqIGNwLWRlY2wuYzogSW5jbHVkZSBzdHJpbmcuaC9zdHJpbmdzLmggZm9yIHN0cm5jcHkoKSBkZWNsLgorCUFkZCBkZWNscyBmb3IgaW5pdF8qIGZucy4gIERlbGV0ZSB1bnVzZWQgZGVjbCBgcHVzaF9vdmVybG9hZF9kZWNsXzEnLgorCURvbid0IHVzZSBgY19mdW5jdGlvbl92YXJhcmdzJywgQysrIGRvZXNuJ3QgbmVlZCBpdC4KKwkocHVzaF9iaW5kaW5nX2xldmVsKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgZGVjbHMgZm9yCisJYHRhZ190cmFuc3BhcmVudCcgYW5kIGBrZWVwJy4KKwkobG9va3VwX3RhZyk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IGRlY2wgZm9yIGB0YWdzX3RyYW5zcGFyZW50Jy4KKwkobG9va3VwX25hbWUpOiBBZGQgbWlzc2luZyBhcmd1bWVudCBkZWNsIGZvciBgcHJlZmVyX3R5cGUnLgorCShzdGFydF9kZWNsKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZXMgYGNsYXNzbmFtZScgYW5kIGB0bXBsJy4KKwkoZ3Jva3ZhcmRlY2wpOiBBZGQgbWlzc2luZyBhcmd1bWVudCBkZWNsIGZvciBgaW5pdGlhbGl6ZWQnLgorCShncm9rZGVjbGFyYXRvcik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHQnLgorCSogY3AtZGVjbDIuYyAoZ2V0X3RlbXBfbmFtZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHRlbXAnLgorCShmaW5pc2hfdGFibGUpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBwdWJsaWNwJy4KKwkoZmluaXNoX2J1aWx0aW5fdHlwZSk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IGRlY2wgZm9yIGBsZW4nLgorCShmaW5pc2hfZmlsZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGVzIGBhc21fb3V0X2ZpbGUnIGFuZAorCWBpbml0X2Z1bmN0aW9uX25hbWUnLgorCSogY3AtZXhjZXB0LmMgKGFuc2lfZXhjZXB0aW9uX29iamVjdF9sb29rdXApOiBBZGQgbWlzc2luZworCWFyZ3VtZW50IGRlY2wgZm9yIGB0eXBlJy4KKwkoY3BsdXNfZXhwYW5kX3Rocm93KTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZXMgYGNuYW1lJywgYG5hbWUnLAorCWFuZCBgcmFpc2VfaWQnLgorCSogY3AtaW5pdC5jOiBEZWxldGUgdW5uZWVkZWQgZm9yd2FyZCBkZWNsIG9mIGBpbml0X2luaXRfcHJvY2Vzc2luZycuCisJKGJ1aWxkX25ldyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYGFsaWdubWVudCcuCisJKGV4cGFuZF92ZWNfaW5pdCk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IGRlY2wgZm9yIGBmcm9tX2FycmF5Jy4KKwkoYnVpbGRfdmVjX2RlbGV0ZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHJ2YWwnLgorCSogY3AtaW5wdXQuYyAoZmVlZF9pbnB1dCk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IGRlY2wgZm9yIGBsZW4nLgorCSogY3AtbGV4LmM6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYG5leHRsYXN0aWRkZWNsJy4KKwkoY2hlY2tfbmV3bGluZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHRtcCcuICBQbGFjZSBgYXNtX291dF9maWxlJworCWluc2lkZSBhIGNvbmRpdGlvbmFsIGZvciBBU01fT1VUUFVUX0lERU5ULgorCShyZWFsX3l5bGV4KTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBgdHlwZW5hbWVfc2NvcGVfaW5fcHJvZ3Jlc3MnCisJYW5kIHVudXNlZCBsYWJlbHMgYHJlbGV4JyBhbmQgYHJlc3dpdGNoJy4KKwkqIGNwLW1ldGhvZC5jOiBJbmNsdWRlIHN0cmluZy5oL3N0cmluZ3MuaCBmb3Igc3RybmNweSgpIGRlY2wuCisJKG5ld190ZXh0X2xlbik6IERlbGV0ZWQuCisJKGR1bXBfdHlwZV9wcmVmaXgpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlcyBgcHJpbnRfc3RydWN0JyBhbmQgYG5hbWUnLgorCShkdW1wX3R5dXBlKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBgcHJpbnRfc3RydWN0Jy4KKwkodHlwZV9hc19zdHJpbmcpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBzcGFjZXMnLgorCShkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYGNuYW1lJy4KKwkoZmx1c2hfcmVwZWF0cyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHJ2YWwnLgorCShidWlsZF90X2Rlc2Nfb3ZlcmxvYWQpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBpJy4KKwkoYnVpbGRfb3BmbmNhbGwpOiBBZGQgbWlzc2luZyBhcmd1bWVudCBkZWNsIGZvciBgZmxhZ3MnLgorCShoYWNrX2lkZW50aWZpZXIpOiBBZGQgbWlzc2luZyBhcmd1bWVudCBkZWNsIGZvciBgeXljaGFyJy4KKwkqIGNwLXBhcnNlLnkgKHRlbXBsYXRlX2luc3RhbnRpYXRlX29uY2UpOiBEZWxldGUgdW51c2VkCisJdmFyaWFibGVzIGBpZCcgYW5kIGBtZW1iZXJzJy4KKwkqIGNwLXNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBBZGQgbWlzc2luZyBhcmd1bWVudCBkZWNsIGZvciBgd2FudF90eXBlJy4KKwkodHJlZV9uZWVkc19jb25zdHJ1Y3Rvcl9wKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgZGVjbCBmb3IgYGknLgorCShkZnNfZGVidWdfbWFyayk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHBlbmRpbmdfdnRhYmxlcycuCisJKGRmc19nZXRfdmJhc2VfdHlwZXMpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBiYXNldHlwZScuCisJKiBjcC1zcGV3LmMgKGluaXRfc3Bldyk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGVzIGBwYycgYW5kCisJYGNoYXJzX2ZvbGxvd2luZ190eXBlbmFtZScuCisJKHl5bGV4KTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZXMgYGRrJyBhbmQgYHRtcCcuICBNb3ZlIGRlY2wgb2YgYHQyJyBkb3duCisJdG8gdGhlIGJsb2NrIHRoYXQgYWN0dWFsbHkgdXNlcyBpdC4KKwkqIGNwLXRyZWUuYyAoYnVpbGRfY3BsdXNfc3RhdGljZm5fdHlwZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYHB0eXBlJy4KKwkocHJvcGFnYXRlX2JpbmZvX29mZnNldHMpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlcyBgdCcgYW5kIGBiYXNldHlwZScuCisJKGxheW91dF9iYXNldHlwZXMpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBiaW5mbycuCisJKGFycmF5X3R5cGVfbmVsdHNfdG90YWwpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGBpbmRleF90eXBlJy4KKwkqIGNwLXRyZWUuaDogQWRkIG1hbnkgZGVjbHMuCisJKiBjcC10eXBlY2suYyAoY29tcF9hcnJheV90eXBlcyk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IGRlY2wKKwlmb3IgYHN0cmljdCcuCisJKGJ1aWxkX2NvbXBvdW5kX2V4cHIpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGB0bXAnLgorCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IERlbGV0ZSB1bnVzZWQgbGFiZWwgYGNvbnZlcnRlZCcuCisgCisJV2VkIFNlcCAxNiAxMjo1MToxMCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEVuYWJsZSBjb2RlIHRvIGFkZCBzaW4gYW5kIGNvcworCWFzIGJ1aWx0LWluIGZ1bmN0aW9ucy4KKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBFbmFibGUgY29kZSB0byBwcmVzZXJ2ZSB0aGUgREVDTF9VSUQKKwlvZiBvbGRkZWNsLgorCisJKiBjcC1zZWFyY2guYyAobG9va3VwX25lc3RlZF9maWVsZHMpOiBNYWtlIHN1cmUgd2UncmUgY2xpbWJpbmcgYWxvbmcKKwlhIGNoYWluIG9mIG5lc3RlZCB0eXBlcywgYW5kIG5vdGhpbmcgZWxzZS4KKworCVR1ZSBTZXAgMTUgMTc6Mzg6MzQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChsb29rdXBfbmVzdGVkX2ZpZWxkcyk6IE5ldyBmdW5jdGlvbi4KKwkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KKwkqIGNwLWRlY2wuYyAobG9va3VwX25hbWUpOiBDYWxsIGl0IGlmIHRoZXJlJ3Mgbm8gY2xhc3MtbG9jYWwKKwlkZWZpbml0aW9uLiAgKEl0IGNvdWxkIGJlIG5lc3RlZC4pCisJKiBjcC1sZXguYyAoZG9faWRlbnRpZmllcik6IENhbGwgbG9va3VwX25lc3RlZF9maWVsZCgpIGlmIG5lY2Vzc2FyeS4KKworCVR1ZSBTZXAgMTUgMTI6Mzc6MTYgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwlNb24gQXVnIDI0IDE0OjU4OjAyIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXAgYXQgYW5pbWFsKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERldGVybWluZSBjb25zdG5lc3MKKwlhbmQgdm9sYXRpbGl0eSB3aXRoIFRSRUVfLi4uIHRlc3RzIGluc3RlYWQgb2YgVFlQRV8uLi4gdGVzdHMuCisKKwlNb24gU2VwIDE0IDE4OjAwOjM1IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFJlbW92ZSByZWR1bmRhbnQgKGFuZCBicm9rZW4pCisJdGVzdCBmb3IgbXVsdGlwbGUgZGVzdHJ1Y3RvcnMgaW4gYSBjbGFzcy4KKworCUZyaSBKdWwgMzEgMTk6MDk6MTAgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogUHVzaCB0cnVuY2F0aW9uIGluc2lkZSBDT05EX0VYUFIuCisKKyAJTW9uIFNlcCAxNCAxNzo1Mjo0NSAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBBbHdheXMgd3JpdGUgYWxsIHN0cnVjdHVyZSB0eXBlcywKKwlldmVuIGlmIHRoZXkncmUgZGVmaW5lZCBpbiBhICIjcHJhZ21hIGludGVyZmFjZSIgaGVhZGVyIGZpbGUuCisJT3RoZXJ3aXNlLCBYQ09GRiBkZWJ1Z2dpbmcgaW5mbyBpcyBtZXNzZWQgdXAuCisKKwlNb24gU2VwIDE0IDE3OjM5OjMyIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6ICBgYEFjdHVhbGx5LCBJIGRvbid0IHVuZGVyc3RhbmQKKwl0aGlzIGNvZGUuICBXaGF0IGlzIGl0IHN1cHBvc2VkIHRvIGRvPycnICAtLU5pa2xhcyBIYWxscXZpc3QKKworCU1vbiBTZXAgMTQgMTc6Mjc6MjMgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsKTogIERvbid0IGR1bXAgY29yZSBpZiBhIGRlY2wgaXMgYW5vbnltb3VzLgorCUEgZGVjbCBpcyBhdCB0aGUgZ2xvYmFsIGJpbmRpbmcgbGV2ZWwgaWYgREVDTF9DT05URVhUIGlzIG51bGwuCisJKGdyb2tkZWNsYXJhdG9yKTogIERvbid0IGdsb2JhbGl6ZSBhIHR5cGUgaWYgaXRzIGZpcnN0IG1lbnRpb24KKwlpcyBpbiBhIHBhcmFtZXRlci4gIEl0J3Mgb2theSB0byBpbml0aWFsaXplIGEgZnVuY3Rpb24gaW4gYQorCW5vbi1nbG9iYWwgc2NvcGUuCisKKwlUdWUgU2VwIDE1IDEyOjE1OjI2IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRW1pdCBhIHdhcm5pbmcgd2hlbiB0aGV5IHRyeSB0bworCXJldHVybiB0aGUgYWRkcmVzcyBvZiBhIGxvY2FsIHZhcmlhYmxlLgorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9tZXRob2QpOiBNYWtlIHN1cmUgaXQncyBpbmRlZWQgbmVzdGVkIGJlZm9yZQorCWNoZWNraW5nIGZvciB0aGUgcXVhbGlmaWVkIG5hbWUuCisKKwlNb24gU2VwIDE0IDE4OjU5OjI1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVdlZCBTZXAgIDIgMTE6MDQ6MjQgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIHNpbiBhbmQgY29zIGFzIGJ1aWx0LWluCisJZnVuY3Rpb25zLiAgRml4IHR5cGUgb2YgX19idWlsdGluX2NvbnN0YW50X3AuCisKKwkqIGNwLWxleC5jIChyZWFkZXNjYXBlKTogRm9yIFx4LCBkb24ndCBpbmNsdWRlIGxlYWRpbmcgMCdzIGluIGNvdW50LgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBGb3IgQUREUl9FWFBSLCBqdXN0IHNldAorCVRSRUVfQ09OU1RBTlQgaWYgc3RhdGljcCwgYnV0IGRvbid0IGNsZWFyIFRSRUVfQ09OU1RBTlQuCisKKwlNb24gU2VwIDE0IDE4OjU0OjQxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAocGVybWFuZW50X29ic3RhY2spOiAgTW92ZSB0byB0b3Agb2YgZmlsZS4KKworCU1vbiBTZXAgMTQgMTg6NTA6MTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJTW9uIFNlcCAxNCAxNjozOToxMCAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwlbIENoYW5nZXMgcHJvcGFnYXRlZCBmcm9tIGRpZmZzIHRvIGMtKiBpbiA5MjA5MTEgc25hcHNob3QuIF0KKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBTZXQgREVDTF9JTkxJTkUgaW4gbmV3ZGVjbCBzbyBpdAorCWlzIGNvcGllZCBpbnRvIG9sZGRlY2wuICBEb24ndCBzZXQgREVDTF9FWFRFUk5BTCBpbiBvbGRkZWNsLgorCVByZXNlcnZlIERFQ0xfVUlEIGFuZCBERUNMX0ZSSUVORF9QIG9mIG9sZGRlY2wuCisKKyAJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IERvbid0IGFzc3VtZSB0aGF0IGEKKwl0YXJnZXQgaW50ZWdlciBmaXRzIGluIGEgSE9TVF9XSURFX0lOVCB3aGVuIGNoZWNraW5nIHNoaWZ0IHdpZHRocy4KKworCU1vbiBTZXAgMTQgMTg6MTU6NDIgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJTW9uIEF1ZyAyNCAxNDozMjowMyAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHJlc2VydmVkX2RlY2xzcGVjcyk6IFdhcm4gaWYgc3RvcmFnZSBjbGFzcyBvY2N1cnMgaGVyZS4KKwkoZGVjbG1vZHMpOiBXYXJuIGlmIHN0b3JhZ2UgY2xhc3MgaXMgbm90IGZpcnN0LgorCisJTW9uIFNlcCAxNCAxNjo1OTo1MyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtbWV0aG9kLmMgKGZuZGVjbF9hc19zdHJpbmcpOiBEb24ndCBvdXRwdXQgYW4gZXh0cmEgc3BhY2Ugd2hlbgorCXByaW50aW5nIHRoZSByZXR1cm4gdHlwZSBvZiBhIGZ1bmN0aW9uLgorCisJTW9uIFNlcCAxNCAxNjowMTo1MyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlGcmkgSnVuIDEyIDE4OjA3OjAwIDE5OTIgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXNAYXBwbGkuc2UpCisKKwkqIGNwLXBhcnNlLnkgKHN0cnVjdHNwLCBuYW1lZF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGUpOiAgQ2FsbAorCW92ZXJsb2FkX3RlbXBsYXRlX25hbWUgaW4gdGhlIGNhc2Ugb2YgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHNvCisJdGhhdCBzb21ldGhpbmcgbGlrZToKKworCXRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBDIHsgQygpOyB9OworCXN0cnVjdCBDPGludD4geyBDKCk7IH07CisKKwl3b3Jrcy4KKworCU1vbiBTZXAgMTQgMTU6NTE6MjIgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJRnJpIEFwciAxMCAxMzoyMDo1NiAxOTkyICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzQGFwcGxpLnNlKQorCisJKiBjcC1zcGV3LmMgKHNwZXdfZGVidWcpOiBleHBvcnRlZCB0aGlzIGZsYWcgZm9yIHVzZSBpbiBjcC1kZWNsLmMKKwkodGVtcGxhdGVfdHlwZV9zZWVuX2JlZm9yZV9zY29wZSk6IG5ldyBnbG9iYWwgY29udGFpbmluZyBjb250ZXh0dWFsCisJaW5mb3JtYXRpb24gZm9yIHRoZSBwYXJzZXIsIG1ha2luZyB0aGUgY29tcGlsZXIgZ3JvayBuZXN0ZWQgdHlwZXMgaW4KKwl0ZW1wbGF0ZSBjbGFzc2VzLgorCShzaGlmdF90b2tlbnMpOiBHdWFyZCBiY29weSBjYWxscyBhZ2FpbnN0IG1vdmVzIG9mIHplcm8gc2l6ZS4KKwkoeXlsZXgpOiBIYW5kbGUgbmVzdGVkIHR5cGVzIGluIHRlbXBsYXRlIGNsYXNzZXMuCisKKwkqIGNwLXBhcnNlLnkgKHNjb3BlZF90eXBlbmFtZSk6IEhhbmRsZSBuZXN0ZWQgdHlwZXMgaW4gdGVtcGxhdGUKKwljbGFzc2VzLgorCSh0ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuCisJKGJhc2VfY2xhc3MuMSk6IExpa2V3aXNlLgorCShtZW1iZXJfaW5pdCk6IExpa2V3aXNlLgorCShzY29wZWRfYmFzZWNsYXNzKTogTmV3IHJ1bGUgZm9yIGhhbmRsaW5nIG9mIG5lc3RlZCB0eXBlcyBpbgorCXRlbXBsYXRlIGNsYXNzZXMuCisKKwkqIGNwLWRlY2wuYyAoeHJlZl9kZWZuX3RhZyk6IENvbmRpdGlvbmFsaXplZCBkZWJ1ZyBwcmludG91dCBvbgorCXNwZXdfZGVidWcgKGRlZmluZWQgaW4gY3Atc3Bldy5jKS4KKwkoYmluZGluZ19sZXZlbHNfc2FuZSk6IHZvaWQgZnVuY3Rpb24gcmV0dXJuZWQgdmFsdWUuCisKKwlNb24gU2VwIDE0IDE1OjQxOjI4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCU1vbiBTZXAgMTQgMTc6MjY6MTggMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1wYXJzZS55ICh1bmFyeV9leHByKSwgY3AtY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOgorCU5FVkVSIHVzZSBgbWF5YmVfYWRqdXN0JyBmZWF0dXJlIGluIGRlc3RydWN0b3JzLiAgSXQncyB1bnNhZmUuCisKKwlNb24gU2VwIDE0IDE1OjEyOjM0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9tZXRob2QpOiBDb21wbGFpbiB3aGVuIGEgcXVhbGlmaWVyIGlzIHVzZWQgYXMKKwlwYXJ0IG9mIGEgbWVtYmVyIGRlY2xhcmF0aW9uLgorCisJTW9uIFNlcCAxNCAxMTo0NzozMCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGdyb2t0eXBlZmllbGQpOiAgUmV2ZXJ0IFdlZCBBdWcgMTkgMTQ6NDc6MDggMTk5MgorCWNoYW5nZSBhcyBpdCBicmVha3MgdGVtcGxhdGUgY29uc3RydWN0b3IgZGVjbGFyYXRpb25zLiAgR2V6LCB0aGlzCisJY29kZSBpcyBob3JyaWJseSBjb21wbGV4LCBhbmQgdGhlIGNvbW1lbnRzIGFyZSB3cm9uZy4gIE5vdGUsCisJdGVtcGxhdGUgY29uc3RydWN0b3IgZGVmaW5pdGlvbnMgYXJlIGJyb2tlbiBpbiB0aGUgc2FtZSB3YXksIGFzCisJZGVjbGFyYXRpb25zIHdlcmUgd2l0aCB0aGlzIHBhdGNoIGluLgorCisJRnJpIFNlcCAxMSAxNDowOTowMSAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlGcmkgU2VwIDExIDEwOjM0OjQ1IFBEVCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIGNwLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogIEZvciBmaWxlLXNjb3BlIHJlZGVmaW5pdGlvbnMsIG5vdGUKKwl0aGF0IHRoZSB2YXJpYWJsZSB3YXMgcHJldmlvdXNseSAqZGVmaW5lZCogYXQgc29tZSBzcGVjaWZpYyAoZWFybGllcikKKwlwb2ludC4KKworCUZyaSBTZXAgMTEgMTM6NDk6NTUgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJVHVlIFNlcCAgOCAyMTozOTozNSBQRFQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfZmlsZSk6ICBEb24ndCBwYXNzIGAxJ3MgYXMgdGhlIGBmdW5jdGlvbmJvZHknCisJZmxhZyB0byBgcG9wbGV2ZWwnIHdoZW4gZ2V0dGluZyByZWFkeSB0byBmaW5pc2hpbmcgdXAgdGhlIHBlci0KKwljb21waWxhdGlvbi11bml0IGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuCisKKwlGcmkgU2VwIDExIDEzOjI4OjAyIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6ICBVcGdyYWRlIGxvY2FsIGV4dGVybnMgd2l0aAorCWluaXRpYWxpemF0aW9ucyB0byBiZSBlcnJvcnMsIGluc3RlYWQgb2Ygd2FybmluZ3MuCisKKwlGcmkgU2VwIDExIDEzOjAzOjUyIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVRodSBTZXAgMTAgMDk6NDA6NTYgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6ICBHaXZlbiBhbiBlcnJvciBpZiAqZWl0aGVyKiBhIGBzdGF0aWMnCisJb3IgYW4gYGV4dGVybicgc3BlY2lmaWVyIGlzIGF0dGFjaGVkIHRvIGEgZGVmaW5pbmcgZGVjbGFyYXRpb24gb2YgYQorCXN0YXRpYyBkYXRhIG1lbWJlci4KKworCVdlZCBTZXAgIDkgMTk6NDY6NDMgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjKys6IE1ha2VzIHN1cmUgZWNobyAtbm9zdGRpbmMgZG9lcyBub3QgZWF0IHRoZSAtbm9zdGRpbmMuCisKKwlUdWUgU2VwICA4IDEzOjQyOjM1IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoY29tbW9uX3R5cGUsIGNhc2UgRlVOQ1RJT05fVFlQRSk6IEFuIGVtcHR5IGFyZ3VtZW50CisJbGlzdCBpcyByZXByZXNlbnRlZCBhcyBhIHZvaWRfdHlwZV9ub2RlOyBtYWtlIHN1cmUgd2UgY2hlY2sgZm9yCisJdGhhdCwgYW5kIG5vdCBqdXN0IGFuIGVtcHR5IFRZUEVfQVJHX1RZUEVTIGxpc3Qgb24gZWl0aGVyIHNpZGUuCisKKwlUdWUgU2VwICA4IDAyOjMxOjA1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzLCBtYWtlX2JpbmZvKTogIEFkZGVkIHN1cHBvcnQgZm9yCisJZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHZpcnR1YWwgYmFzZSBjbGFzcyBwb2ludGVycy4KKworCU1vbiBTZXAgIDcgMTU6MzQ6NTggMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKHRlbXBfbmFtZV9wKTogRGVsZXRlZCBmdW5jdGlvbiwgbmV2ZXIgdXNlZCBhbnl3aGVyZS4KKworCVN1biBTZXAgIDYgMjM6MDk6MjkgMTk5MiAgSm9obiBGIENhcnIgIChqZmMgYXQgQXRoZW5hLk1JVC5FRFUpCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IElnbm9yZSBhcmd1bWVudHMgd2hpY2ggYXJlCisJRVJST1JfTUFSS19OT0RFIHRvIGF2b2lkIGNyYXNoZXMgdHJ5aW5nIHRvIHJlZmVyZW5jZSBmaWVsZHMgd2hpY2gKKwlhcmUgbm90IHByZXNlbnQuCisKKwlNb24gU2VwICA3IDEyOjM0OjA5IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGNsZWFyX2Fub25fdGFncyk6IERvIGFzc2lnbm1lbnQgb2YgQiBhZnRlciB3ZSd2ZSBzZWVuCisJaWYgd2UncmUgdG8gd29yayBvbiBhbiBhbm9ueW1vdXMgYWdncmVnYXRlLiAgTm8gbmVlZCB0byBtYWtlIHRoZQorCWFzc2lnbm1lbnQgZm9yIG5lYXJseSBldmVyeSBhZ2dyIHdlIGV2ZXIgZGVjbGFyZS4gCisKKwlTdW4gU2VwICA2IDE3OjUxOjQ3IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVN1biBTZXAgIDYgMTM6MTI6MTYgMTk5MiAgSm9obiBDYXJyIChqZmNAQXRoZW5hLk1JVC5FRFUpCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wsIGZpbmlzaF9kZWNsLCBzdG9yZV9yZXR1cm5faW5pdCwKKwlmaW5pc2hfZnVuY3Rpb24pLCBjcC1kZWNsMi5jIChjb25zdHJ1Y3Rvcl9uYW1lLCBmaW5pc2hfZmlsZSksCisJY3AtZXhjZXB0LmMgKGNwbHVzX2V4cGFuZF9yZXJhaXNlKSwgY3AtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCwKKwlleHBhbmRfYWdncl9pbml0XzEpLCBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIsCisJY19leHBhbmRfYXNtX29wZXJhbmRzLCBjX2V4cGFuZF9yZXR1cm4pOiBJbmNsdWRlIHJ0bC5oIGFuZCBlbGltaW5hdGUKKwl1bm5lZWRlZCBjYXN0cy4KKworCSogY3AtZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogVXNlIE5VTExfVFJFRSBpbnN0ZWFkIG9mIE5VTEwuCisKKwkqIGNwLWRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgdHJ5IGFuZCBub3QgdXNlIHN0ZGlvLmguCisKKwkqIGNwLWV4Y2VwdC5jIChjcGx1c19leHBhbmRfcmVyYWlzZSk6IGVtaXRfbW92ZV9pbnNuIHRha2VzIDIKKwlhcmd1bWVudHMsIG5vdCB0aHJlZS4KKworCVNhdCBTZXAgIDUgMTI6MDQ6MDYgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogVW5kbyBjaGFuZ2Ugb2YgTW9uIEF1ZyAxNyAxNjoyODo0OAorCTE5OTI7IGl0IHJlc3VsdGVkIGluIGxvdHMgb2YgdW5uZWNlc3NhcnkgYW5kIGluY29ycmVjdCB3YXJuaW5ncy4KKworCSogY3AtbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBGb3IgbmVzdGVkIGNsYXNzZXMsIGNoZWNrIGlmIGEgdmFyaWFibGUKKwliZWluZyBzb3VnaHQgaXMgYWN0dWFsbHkgaW4gdGhlIHNjb3BlIG9mIGFuIGVuY2xvc2luZyBjbGFzcy4gIElmIGl0CisJaXMsIGFuZCB0aGUgdmFyaWFibGUncyBub24tc3RhdGljLCBiYWlsLgorCisJKiBjcC1kZWNsLmMgKGdyb2tfZW51bV9kZWNscyk6ICBUaWdodGVuIHVwIHNvbWUgY29kZSB0aGF0IHdhcyBwcmV0dHkKKwl0d2lzdHkuCisKKwkqIGNwLWNsYXNzLmMgKHN0YXJ0X3N0cnVjdCk6IERlbGV0ZTsgaXQgd2FzICNpZiAwJ2Qgb3V0IGFueXdheSAoQysrCisJZG9lc24ndCBuZWVkIGl0KSwgYW5kIGlzIGFuIG9sZCBob2xkLW92ZXIgZnJvbSBjLWRlY2wuYy4KKworCSogY3AtY2xhc3MuYyAobWludXNfb25lX25vZGUpOiBEZWxldGUsIGl0J3Mgbm90IHVzZWQuCisJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IERlbGV0ZSBpbml0IG9mIG1pbnVzX29uZV9ub2RlLgorCisJKiBjcC1zcGV3LmMgKHl5bGV4KTogQ2hlY2sgcmV0dXJuIG9mIHJlc29sdmVfc2NvcGVfdG9fbmFtZSB0bworCWJlIE5VTExfVFJFRS4KKwkoZnJvYl9pZGVudGlmaWVyKTogTGlrZXdpc2UuCisJKGhhY2tfbW9yZV9pZHMpOiBMaWtld2lzZS4KKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfdG9fcmVhbCk6IFVzZSBSRUFMX1ZBTFVFX0FUT0YgdG8gbWFrZSAwLgorCisJRnJpIFNlcCAgNCAxOToyMzoxNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva19jdG9yX3Byb3BlcnRpZXMpOiAgV2hlbiBsb29raW5nIGZvciBjb3B5CisJY29uc3RydWN0b3JzLCBpZ25vcmUgdGhlIGZpcnN0IGFyZ3VtZW50IHNpbmNlIGl0IGlzIHRoZSBpbiRjaHJnCisJcGFyYW1ldGVyIGZvciB0aGUgb2JqZWN0IHRvIGNvcHkgZnJvbS4KKworCUZyaSBTZXAgIDQgMTQ6MzU6MzEgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogIFByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gZHVtcGluZworCWNvcmUgb24gc2VtYW50aWMgZXJyb3JzLgorCitUaHUgU2VwIDE3IDE3OjI4OjEzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IFdhcm4gYWJvdXQgYWRkcmVzcworCWFyaXRobWV0aWMgZGVzdGluZWQgZm9yIGEgdHlwZSB0aGF0J3MgdG9vIG5hcnJvdy4KKwlOZXcgYXJndW1lbnQgRU5EVFlQRS4KKworCSogbGltaXR4Lmg6IERvbid0IGluY2x1ZGUtbmV4dCBpZiBfTElCQ19MSU1JVFNfSF8gZGVmaW5lZC4KKworVGh1IFNlcCAxNyAyMDo0NToxNiAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogY2V4cC55IChwYXJzZV9lc2NhcGUpOiBEaWFnbm9zZSAnXHgnIHdpdGggbm8gZGlnaXRzLgorCURpYWdub3NlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBwYXJzaW5nIFx4IGVzY2FwZXMuCisKK1RodSBTZXAgMTcgMTE6NTI6NTMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGdjYy5jIChTSUdORURfQ0hBUl9TUEVDKTogVXNlICNpZiByYXRoZXIgdGhhbiA/OiBpbiBkZWZhdWx0IGRlZm4uCisKK1RodSBTZXAgMTcgMTQ6NTM6NTEgMTk5MiAgVGltIE1vb3JlICAobW9vcmVAZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEZVTkNUSU9OX0FSR19BRFZBTkNFLCBGVU5DVElPTl9BUkcpOiBGaXggZG91YmxlIGludGVnZXIKKwlhcmd1bWVudCBhbGlnbm1lbnQuCisJKFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFLCBXQ0hBUl9UWVBFLCBXQ0hBUl9TSVpFKTogRGVmaW5lLgorCSogcGEtaHB1eC5oLCBwYS1naHB1eC5oIChTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSwgV0NIQVJfVFlQRSwKKwlXQ0hBUl9TSVpFKTogRGVmaW5lIGZvciBocHV4LgorCSogeC1wYSwgdC1wYSA6IE5ldyBmaWxlcy4KKwkqIGNvbmZpZ3VyZSAoaHBwYSBjYXNlcyk6IGFkZCBkZWZpbml0aW9ucyBmb3IgeG1ha2VfZmlsZSBhbmQKKwl0bWFrZV9maWxlLgorCitXZWQgU2VwIDE2IDIyOjIyOjE1IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogRG9uJ3QgYWJvcnQgaWYgZXJyb3I6IG1pZ2h0IGhhdmUgYmVlbiBhCisJdXNlciBhc20uCisKKwkqIGkzODYubWQgKGFkZHNpMyxhc2hsc2kzKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBzdGFjaworCXBvaW50ZXIgYXBwZWFycyBhcyBhbiBpbmRleCByZWcuCisKK1dlZCBTZXAgMTYgMjE6MjI6MjMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoZm9sZF9ydHgpOiBGb3IgU1VCUkVHLCBhY3R1YWxseSB0ZXN0IHN1YnJlZ19sb3dwYXJ0X3AgaW4gdGhlCisJY29kZSB0byBoYW5kbGUgbmFycm93aW5nIHN1YnJlZ3MuICBBbmQgZXhjbHVkZSBiaW5hcnkgb3BzIGxpa2UgRElWCisJd2hlcmUgdHJ1bmNhdGluZyB0aGUgYXJncyBpcyBub3QgdmFsaWQuCisKKwkqIGxpYmdjYzIuYyAoX19DVE9SX0xJU1RfXywgX19EVE9SX0xJU1RfXyk6IE1vdmVkIHRvIHNlcGFyYXRlIG1lbWJlci4KKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBBZGRlZCBfY3RvcnMuCisKK1dlZCBTZXAgMTYgMjM6Mjg6NDEgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNleHAueSAocGFyc2VfbnVtYmVyKTogV2FybiBhYm91dCAnOScgaW4gb2N0YWwgY29uc3RhbnRzLgorCUNvbW1vbml6ZSBvdmVyZmxvdyBkZXRlY3Rpb24gZm9yIHZhcmlvdXMgcmFkaWNlcy4KKworV2VkIFNlcCAxNiAxOTozMzozNyAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcGEubWQgKGNhc2VzaSk6IFVzZSBlbWl0X2p1bXBfaW5zbiB0byBlbWl0IGNhc2VzaTAgcGF0dGVybi4KKwkoeG9yc2kzKTogUmVtb3ZlIGByJyBmcm9tIG91dHB1dCB0ZW1wbGF0ZS4KKwkobW92c3Ryc2kgcmVjb2duaXplcik6IEFkZCBgKycgdG8gb3BlcmFuZCAwICYgMSBjb25zdHJhaW50cy4KKworV2VkIFNlcCAxNiAxNDo1Mzo1MSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBTZXQgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDI1LgorCisJKiBtaXBzLmMgKGdlbl9pbnRfcmVsYXRpb25hbCk6IEVsaW1pbmF0ZSBhbGwgdmVzdGlhZ2VzIG9mCisJZmlndXJpbmcgb3V0IHdoZXRoZXIgdGhlIGNvbXBhcmlzb24gd2lsbCBhbHdheXMgYmUgdHJ1ZSBvciBmYWxzZS4KKwlMZXQgdGhlIG9wdGltaXplciBmaWd1cmUgaXQgb3V0LgorCShnZW5fY29uZGl0aW9uYWxfYnJhbmNoKTogRGl0dG8uCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogUHJpbnQgY29ycmVjdCBudW1iZXIgb2YgaGFsZi1waWMgcG9pbnRlcnMKKwlhbmQgcmVmZXJlbmNlcy4KKwkocHJldl9oYWxmX3BpY19yZWZzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKwkocHJldl9oYWxmX3BpY19wdHJzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKworVHVlIFNlcCAxNSAxNjoxMDo0NyBQRFQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogIENhbGwgYGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCcKKwlpbW1lZGlhdGVseSBmb3IgYWN0dWFsICpkZWZpbml0aW9ucyogb2YgZmlsZS1zY29wZSB2YXJpYWJsZXMgKGFuZAorCWZpbGUtc2NvcGUgdHlwZWRlZnMgdG9vKS4KKworVHVlIFNlcCAxNSAyMDo1NjozMSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChFWElOSVQpOiBDbGVhciBpdCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGJhZCB2YWx1ZXMuCisJKiBmaXhpbmMuc3ZyNCAoRVhJTklUKTogTGlrZXdpc2UuCQorCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBEb24ndCBwcmludCBibGFuayBsaW5lIGZvciBudWxsCisJZmllbGRzIGluIGEgVFJFRV9WRUMuCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBEb24ndCBvdXRwdXQgYW5vdGhlciBlcnJvciBtZXNzYWdlIGlmIGhhdmUKKwlhbHJlYWR5IG91dHB1dCBlcnJvciBtZXNzYWdlIHJldHVybmVkIGZyb20gbWFjYXJnLgorCisJKiBjLWRlY2wuYyAoZ3Jva3Bhcm1zKTogQ29weSBwYXJtIGxpc3QgaWYgaXQgaXNuJ3QgcGVybWFuZW50LAorCWluc3RlYWQgb2YgY29weWluZyBpdCBpZiB0ZW1wb3JhcnkgYWxsb2NhdGlvbiBoYXMgYmVlbiB0dXJuZWQgb2ZmLgorCisJKiBmaW5hbC5jIChvbmx5X2xlYWZfcmVnc191c2VkKTogQ2hlY2sgZm9yIGdsb2JhbF9yZWdzLgorCisJKiBjLXBhcnNlLnkgKHR5cGVzcGVjKTogRG9uJ3Qgd2FybiBpZiBwZWRhbnRpYyB3aGVuIHR5cGVvZiB1c2VkLgorCisJKiBjLXRyZWUuaCAobGFuZ19pZGVudGlmaWVyKTogQWRkIGxpbWJvX3ZhbHVlIGZpZWxkIGZvciBvdXQgb2YKKwlzY29wZSBibG9jayBsZXZlbCBleHRlcm4gZGVjbGFyYXRpb25zLgorCShJREVOVElGSUVSX0xJTUJPX1ZBTFVFKTogTmV3IGRlZmluZSwgdG8gYWNjZXNzIHRoYXQgZmllbGQuCQorCSogYy1kZWNsLmMgKHByaW50X2xhbmdfaWRlbnRpZmllcik6IFByaW50IHZhbHVlIG9mIGxpbWJvIGZpZWxkLgorCShwdXNoZGVjbCk6IENoZWNrIGFuIGV4dGVybiBkZWNsIGFnYWluc3QgYm90aCBwcmV2aW91cyBnbG9iYWwgYW5kCisJcHJldmlvdXMgbGltYm8gZGVjbGFyYXRpb25zLiAgRm9yIGdsb2JhbCBkZWNsYXJhdGlvbnMsIGNsZWFyIGxpbWJvCisJdmFsdWUgZmllbGQuICBGb3IgYmxvY2sgbGV2ZWwgZXh0ZXJuIGRlY2xhcmF0aW9ucywgc2V0IGxpbWJvIGZpZWxkCisJaWYgemVyby4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBJZiB0aGlzIGlzIGEgYmxvY2sgbGV2ZWwgZXh0ZXJuLCB0aGVuIGFsbG9jYXRlCisJaXQgb24gdGhlIHBlcm1hbmVudCBvYnN0YWNrLCBub3QgdGhlIHRlbXBvcmFyeSBvYnN0YWNrLgorCitUdWUgU2VwIDE1IDE1OjQyOjI0IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiB0cmVlLmMgKGludF9maXRzX3R5cGVfcCk6IE5lZ2F0aXZlIGludHMgbmV2ZXIgZml0IHVuc2lnbmVkCisJdHlwZXMsIGFuZCB1bnNpZ25lZCBpbnRzIHdpdGggdG9wLWJpdC1zZXQgbmV2ZXIgZml0IHNpZ25lZCB0eXBlcy4KKwkqIGMtbGV4LmMgKHl5bGV4KTogSW50ZWdlciBjb25zdGFudCBpcyB1bnNpZ25lZCBmb3IgcHVycG9zZXMgb2YKKwlpbnRfZml0c190eXBlX3Agc28gdGhhdCBpdCBjb21wYXJlcyBodWdlIGNvbnN0YW50cyBwcm9wZXJseS4KKworVHVlIFNlcCAxNSAxNDo0NDo1MSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni5tZCAoc3RyaW5nIG1vdmUsIHN0cmluZyBjb21wYXJlKTogQWx3YXlzIGlzc3VlIGNsZAorCWluc3RydWN0aW9uIGJlZm9yZSBkb2luZyBhIHJlcCBzdHJpbmcgbW92ZSwgc28gdGhhdCB3ZSBhcmUKKwlndWFyYW50ZWVkIHRoYXQgdGhlIGJ5dGVzIGFyZSBtb3ZlZC9jb21wYXJlZCBjb3JyZWN0bHkuCisKK1R1ZSBTZXAgMTUgMDA6MDk6MDYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkYXJnLmg6ICh2YV9hcmcpOiBDYXN0IHB0ciB0byB2b2lkICosIHRoZW4gdG8gVFlQRSAqLgorCSogdmEtaTk2MC5oLCB2YS1tODhrLmgsIHZhLW1pcHMuaCwgdmEtcGEuaCwgdmEtcHlyLmgsIHZhLXNwYXJjLmg6CisJTGlrZXdpc2UuCisKKwkqIHJ0bC5jIChmdGVsbCk6IERlY2xhcmF0aW9uIGRlbGV0ZWQuCisKK01vbiBTZXAgMTQgMTU6MTc6MDkgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGNvbmZpZ3VyZSAoYXJnIHByb2Nlc3NpbmcpOiBBZGQgLS13aXRoLXN0YWJzIHN3aXRjaC4KKwkoYWxsIG1pcHMgY29uZmlndXJhdGlvbnMsIGV4Y2VwdCBkZWNyb3NlKTogSWYgLS13aXRoLXN0YWJzLCB1c2UKKwl0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgZW1pdHMgc3RhYnMgYXMgdGhlIGRlYnVnIGRlYnVnCisJY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gdGhlIG5hdGl2ZSBNSVBTIEVDT0ZGIGZvcm1hdC4KKworTW9uIFNlcCAxNCAxMzoyODoyOSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBjb25maWd1cmUgKG9wdGlvbiBjYXNlIHN0YXRlbWVudCk6IEluZGV4IHdpdGggYCRuZXh0X2FyZycgaW5zdGVhZAorCW9mIGBuZXh0X2FyZycuICBDbGVhbiB1cCBvcmRlciBhbmQgaW5kZW50YXRpb24gZm9yIHN3aXRjaGVzLgorCShzZXZlcmFsIHBsYWNlcyk6IFJlbW92ZSBzcGFjZSBhcm91bmQgYXNzaWdubWVudCBgPScuCisJKHVzYWdlIHByaW50aW5nKTogRG9uJ3QgdXNlIGAtbicgZm9yIGVjaG8gKFN5c1YgbG9zc2FnZSkuCisJUHJpbnQgY29uZmlnLnN0YXR1cyB3aXRoIGB0YWlsICsyJy4KKworTW9uIFNlcCAxNCAyMzo0NjoxOSAxOTkyIFBhdWwgRWdnZXJ0IChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogV2FybiBhYm91dCBpbnRlZ2VycyBzbyBsYXJnZSB0aGF0IHRoZXkgYXJlIHVuc2lnbmVkLgorCisJKiBjZXhwLnkgKHBhcnNlX251bWJlcik6IERpYWdub3NlIGludGVnZXIgY29uc3RhbnRzIHRoYXQgYXJlIHRvbyBsYXJnZS4KKwlEaWFnbm9zZSBkdXBsaWNhdGUgYGwnIGFuZCBgdScgc3VmZml4ZXMuICBEaWFnbm9zZSBgIDB4ICcgYW5kIGAgMGEgJy4KKwlXYXJuIGFib3V0IGludGVnZXIgY29uc3RhbnRzIHRoYXQgYXJlIHNvIGxhcmdlIHRoYXQgdGhleSBhcmUgdW5zaWduZWQuCisKK01vbiBTZXAgMTQgMTA6MjY6MzQgMTk5MiAgQ2hhcmxlcyBIYW5udW0gIChteWNyb2Z0QGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChpbml0X3JlbG9hZCk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitNb24gU2VwIDE0IDAxOjE3OjU4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChpbml0X3JlbG9hZCk6IEZvciByZWcrcmVnK2NvbnN0LCB0cnkgdmFyaW91cyByZWdzLgorCitTdW4gU2VwIDEzIDAxOjA4OjA2IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjZXhwLnkgKGV4cCk6IERldGVjdCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdy4KKwlSZXBsYWNlIGAodW5zaWduZWQpJyB3aXRoIGAodW5zaWduZWQgbG9uZyknLiAgV2hlbgorCWV2YWx1YXRpbmcgPDwgYW5kID4+LCBjb21wdXRlIHRoZSBjb3JyZWN0IGFuc3dlciB3aXRob3V0IHNoaWZ0aW5nCisJYnkgbW9yZSB0aGFuIEhPU1RfQklUU19QRVJfTE9ORywgb3IgYnkgYSBuZWdhdGl2ZSBxdWFudGl0eS4KKwkoaW50ZWdlcl9vdmVyZmxvdywgbGVmdF9zaGlmdCwgcmlnaHRfc2hpZnQpOiBOZXcgZnVuY3Rpb25zLgorCitTdW4gU2VwIDEzIDAyOjAwOjUyIDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBqdXBpdGVyLnNpY3Muc2UpCisKKwkqIGFybS5tZDogQ2xlYW4gdXAgaW5kZW50YXRpb24uCisKKwkqIHBhLmMgKG91dHB1dF9sb2FkX2FkZHJlc3MpOiBSZW1vdmVkLiAgTm90aGluZyB1c2VzIGl0LgorCSogcGEubWQgKGhpZ2g6REkgcmVjb2duaXplcik6IEFkZCByZXR1cm4gXCJcIi4KKwkqIHBhLm1kIChzQ0MsIGJDQyBleHBhbmRlcnMpOiBSZW1vdmUgY29uc3RyYWludHMuCisJKiBwYS5tZCAoYW5kLXdpdGgtaW1tZWRpYXRlIG9wdGltaXplcik6IE5ldyBwYXR0ZXJuLgorCSogcGEubWQgKGlvci13aXRoLWltbWVkaWF0ZSBvcHRpbWl6ZXIpOiBOZXcgcGF0dGVybi4KKwkqIHBhLmMgKGNvbnNlY196ZXJvc19wLCBhbmRfb3BlcmFuZCwgaW9yX21hc2tfcCwgaW9yX29wZXJhbmQsCisJb3V0cHV0X2FuZCwgb3V0cHV0X2lvcik6IE5ldyBmdW5jdGlvbnMuCisJKiBwYS5oIChvdXRwdXRfYW5kLCBvdXRwdXRfaW9yKTogRGVjbGFyZS4KKwkqIHBhLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IEFkZCAnTycgYW5kICdQJy4KKwkqIHBhLmMgKGNvbXB1dGVfeGRlcGlfb3BlcmFuZHNfZnJvbV9pbnRlZ2VyKTogTmV3IGZ1bmN0aW9uLgorCVNvbWUgY29kZSBjb21lIGZyb20gb3V0cHV0X3pkZXBpLgorCShvdXRwdXRfemRlcGkpOiBSZW1vdmVkLgorCShkZXBpX2NpbnRfb3BlcmFuZCk6IE5ldyBuYW1lIGZvciB6ZGVwaV9vcGVyYW5kLgorCSogcGEubWQgKGFkZGRpMyk6IEV4dGVuZCB0byBoYW5kbGUgQ09OU1RfSU5ULgorCSogcGEubWQgKG1vdnN0cnNpKTogQ2hhbmdlIGAhPSA0JyA9PiBgPCA0JyBpbiB0ZXN0IGZvciBhbGlnbm1lbnQuCisJKiBwYS5tZCAobmVnc2kyKTogRG9uJ3QgdXNlIEAgZm9yIGp1c3Qgb25lIG91dHB1dCB0ZW1wbGF0ZS4KKwkqIHBhLm1kIChhbmQtbm90IHBhdHRlcm5zKTogTWFrZSB0aGVtIGNhbm9uaWNhbC4gIFB1dCBvcGVyYW5kcyBpbgorCXRoZSByaWdodCBvcmRlci4KKwkqIHBhLm1kIChjYXNlc2kpOiBSZXdyaXRlLiAgVXNlZCB0byBiZSBidWdneSBhbmQgc2xvdy4KKwkqIHBhLm1kIChzZXZlcmFsIHBhdHRlcm5zKTogTWFrZSBzdXJlICMgb2YgYXR0cmlidXRlIGFsdGVybmF0aXZlcworCW1hdGNoICMgb2YgY29uc3RyYWludCBhbHRlcm5hdGl2ZXMuCisJUmV0dXJuIGFzc2VtYmxlciBvdXRwdXQgdGVtcGxhdGUgaW5zdGVhZCBvZiBjYWxsaW5nIG91dHB1dF9hc21faW5zbi4KKwlEb24ndCB3cml0ZSB0byBvcGVyYW5kc1tuXSBmb3IgbiA+PSBtYXggb3BlcmFuZCBudW1iZXIgaW4gdGhlCisJcGF0dGVybiwgdXNlIHhvcGVyYW5kcyBpbnN0ZWFkLgorCitTYXQgU2VwIDEyIDE1OjA2OjU3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzKToKKwlJZ25vcmUgbGVhZGluZyAlIHdoZW4gZXhhbWluaW5nIGNvbnN0cmFpbnQuCisJRG9uJ3QgYnlwYXNzIHVzdWFsIGNvc3QgY29tcHV0YXRpb24gd2hlbiBhIHBzZXVkbyAibWF0Y2hlcyIKKwlhIG5vbi1wc2V1ZG8gaW4gbWF0Y2hpbmcgb3BlcmFuZHMuCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogSWYgaW50ZWdlciB2YWx1ZSBvdmVyZmxvd3Mgc28gaGlnaHdvcmQgaXMgbmVnYXRpdmUsIAorCWl0IG5lZWRzIHVuc2lnbmVkIGxvbmcgbG9uZy4KKworRnJpIFNlcCAxMSAyMTowOTo1MyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN5cy10eXBlcy5oICh2YV9hbGlzdCk6IFN1cHBseSBgaW50JyBhcyB0aGUgdHlwZSB0byBkZWZpbmUgaXQgYXMuCisKK0ZyaSBTZXAgMTEgMTI6Mzk6MzkgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZAkobm9uLVtjZl1icmFuY2ggZGVmaW5lX2RlbGF5KTogVXNlIGEgc2luZ2xlIGRlbGF5IGRlc2NyaXB0aW9uCisJZm9yIHRoZSBkZWxheSBzbG90cyBpbiAiYnJhbmNoIiwgImNhbGwiLCBhbmQgIm1pbGxpIiBpbnNucy4KKwkoZmJyYW5jaCBkZWZpbmVfZGVsYXkpOiBmYnJhbmNoZXMgaGF2ZSBhIHNpbmdsZSBkZWxheSBzbG90IHdoaWNoCisJbWF5IGJlIG51bGxpZmllZCB3aGVuIHRoZSBicmFuY2ggaXMgdGFrZW4gKHJlZ2FyZGxlc3Mgb2YgZGlyZWN0aW9uCisJb3IgZGlzdGFuY2UgdG8gdGhlIHRhcmdldC4pCisJKGluX2JyYW5jaF9kZWxheSBhdHRyaWJ1dGUpOiBEaXNhbGxvdyBmYnJhbmNoIGluc25zIGV4cGxpY2l0bHkuIAorCShmbG9hdGluZyBwb2ludCBicmFuY2hlcyk6IFVzZSAiZmJyYW5jaCIgYXR0cmlidXRlIGZvciB0aGVzZSBpbnNucy4KKwlVcGRhdGUgb3V0cHV0IHRlbXBsYXRlIHRvIHByb3Blcmx5IGhhbmRsZSBudWxsaWZpY2F0aW9uLgorCitGcmkgU2VwIDExIDEwOjM0OjQ1IFBEVCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiAgRm9yIGZpbGUtc2NvcGUgcmVkZWZpbml0aW9ucywKKwllcnJvciBtZXNzYWdlIGRpc3Rpbmd1aXNoZXMgcHJldmlvdXMgZGVmaW5pdGlvbnMgZnJvbSBtZXJlIGRlY2xzLgorCitGcmkgU2VwIDExIDAxOjA3OjExIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1jb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IERvbid0IHBhc3MgdHJ1bmNhdGlvbiB0aHJ1IGxzaGlmdAorCWlmIHNoaWZ0IGNvdW50ID49IHdpZHRoIG9mIG5hcnJvd2VyIHR5cGUuICBJbnN0ZWFkLCBqdXN0IHVzZSAwLgorCisJKiB3ZTMyay5oIChTSVpFX1RZUEUpOiBEZWZpbmVkLgorCitGcmkgU2VwIDExIDAwOjAzOjQ1IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLWRlY2wuYyAoZmluaXNoX3N0cnVjdCk6IERvbid0IGFzc3VtZSB0aGF0IGEgdGFyZ2V0IGludGVnZXIKKwlmaXRzIGluIGEgSE9TVF9XSURFX0lOVCB3aGVuIGNoZWNraW5nIGJpdC1maWVsZCB3aWR0aHMuCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBMaWtld2lzZSwgd2hlbiBjaGVja2luZyBzaGlmdCB3aWR0aHMuCisKK1RodSBTZXAgMTAgMjI6MjM6MTAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKToKKwlDb252ZXJ0IG9wMSBvZiBzaGlmdCBsaWJjYWxsIHRvIHdvcmRfbW9kZS4KKworVGh1IFNlcCAxMCAxODoxNDozNiAxOTkyICBUaW0gTW9vcmUgIChtb29yZUBkZWZtYWNyby5jcy51dGFoLmVkdSkKKworCSogZmluYWwuYyAoc2hvcnRlbl9icmFuY2hlcyk6IERvIHNob3J0ZW4gYnJhbmNoZXMgd2l0aCBkZWxheSBzbG90cworCWlmIHRoZSBudW1iZXIgb2YgZGVsYXkgc2xvdHMgaXMgY29uc3RhbnQuCisJKiBnZW5hdHRydGFiLmMgKHdyaXRlX2NvbnN0X251bV9kZWxheV9zbG90cyk6IE5ldyBmdW5jdGlvbjsKKwljcmVhdGVzIGNvbnN0X251bV9kZWxheV9zbG90cyAoKS4KKwkobWFpbik6IENhbGwgaXQuCisJKiBnZW5hdHRyLmMgKG1haW4pOiBXcml0ZSBkZWNsYXJhdGlvbiBmb3IgY29uc3RfbnVtX2RlbGF5X3Nsb3RzICgpLgorCitUaHUgU2VwIDEwIDE3OjMzOjQyIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLm1kIChhbGwgbW92ZSBwYXR0ZXJucyk6IERvIG5vdCBhbGxvdyBtZW1vcnkgdG8gbWVtb3J5IG9yCisJbm9uLXplcm8gY29uc3RhbnQgdG8gbWVtb3J5IG1vdmVzIHRvIGJlIGdlbmVyYXRlZCwgd2hpY2ggY2F1c2VzCisJcmVsb2FkIHRvIGdlbmVyYXRlIHRoZSBsb2FkL3N0b3JlIHVzaW5nIHNwaWxsZWQgcmVnaXN0ZXJzLCBhbmQKKwlkb2VzIG5vdCBhbGxvdyBmb3IgZWZmaWNpZW50IENTRSBvciBzY2hlZHVsaW5nIHRvIGJlIGRvbmUuCisKKwkqIGRlYy1nb3NmMS5oLCBpcmlzNGcuaDogTmV3IGZpbGVzLgorCitUaHUgU2VwIDEwIDEyOjQ2OjE3IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBqdXBpdGVyLnNpY3Muc2UpCisKKwkqIHBhLm1kIChjYXNlc2kpOiBBZGQgYCYnIHRvIGNvbnN0cmFpbnQgZm9yIGNsb2JiZXIgb3BlcmFuZC4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEZpeCB0eXBvLCBgbW9kZScgPT4gYG1ldGhvZHMnLgorCitUaHUgU2VwIDEwIDAwOjIxOjA1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IERlbGV0ZSAjaWZkZWYgR1BDOyBjb21wbGV4IGNvZGUgbm93IHVuY29uZC4KKworCSogb3B0YWJzLmMgKGluaXRfZml4dGFiKTogRml4IHR5cG8gZm9yIGZpeF90cnVuY2RmcWkyLgorCitXZWQgU2VwICA5IDEzOjI1OjUzIFBEVCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIGMtY29tbW9uLmMgKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6ICBBbGxvdyBmb3IgYW5vbnltb3VzIGZ1bmN0aW9uLgorCitXZWQgU2VwICA5IDE1OjU2OjA5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogRGVsZXRlIHhsaW1pdHMuaC4KKworCSogZmluYWwuYyAob3V0cHV0X2FkZHJfY29uc3QpOgorCUlmIDJuZCBhcmcgb2YgTUlOVVMgaXMgbmVnYXRpdmUgaW50ZWdlciwgcHV0IGl0IGluIHBhcmVucy4KKworV2VkIFNlcCAgOSAxMDoxMDozMCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogdmEtbWlwcy5oICh2YV9hcmcpOiBIYW5kbGUgc3RydWN0dXJlcyBsYXJnZXIgdGhhbiA4IGJ5dGVzLgorCShhbGwgbWFjcm9zKTogUHV0IF9fIGluIGZyb250IG9mIGFsbCBtYWNybyBhcmd1bWVudHMuCisKK1dlZCBTZXAgIDkgMDA6NDU6MDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzb2wyLWNydDEuYXNtICgubm9wZSk6IFJlYWxseSBzdG9yZSBpbnRvIGVudmlyb24uCisKKwkqIGxpYmdjYzIuYyAoX19nY2NfYmNtcCk6IE5ldyBmdW5jdGlvbiwgaW4gY29uZCBvbiBMX19nY2NfYmNtcC4KKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBBZGQgTF9fZ2NjX2JjbXAuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBTdXBwb3J0IElOX0VYUFIuCisKK1R1ZSBTZXAgIDggMjA6MDQ6NDMgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBXaGVuIG9wdGltaXppbmcgTFNISUZUX0VYUFIJYW5kCisJUlNISUZUX0VYUFIsIGRvIGNvbXBhcmVzIGF0IHRyZWUgbGV2ZWwuCisKKwkqIHRyZWUuYyAoYnVpbGRfaW5kZXhfdHlwZSwgYnVpbGRfaW5kZXhfMl90eXBlKTogRG9uJ3QgcGFzcworCUhPU1RfV0lERV9JTlQgdG8gcm91dGluZSBleHBlY3RpbmcgYW4gaW50LiAgRG9uJ3QgcGFzcyBuZWdhdGl2ZQorCXZhbHVlIGV2ZW4gaWYgaGFzaCBjb2RlIGlzIElOVF9NSU4uCisKK1R1ZSBTZXAgIDggMTc6MzU6NTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGVfZmllbGRzKTogSGFuZGxlIG5hbWVsZXNzIHN1YnJlY29yZHMgZm9yIFBhc2NhbC4KKwkoZGJ4b3V0X3R5cGUpOiBIYW5kbGUgQ0hBUl9UWVBFLCBCT09MRUFOX1RZUEUuIEZJTEVfVFlQRSwgU0VUX1RZUEUuCisKKwkqIG5ld3MuaCAoQVNNX09VVFBVVF9PUENPREUpOiBEZWxldGVkLgorCisJKiBjLXBhcnNlLnkgKHN0bXQpOiBJbiBmb3Igc3RtdCwgcHV0IHByb3BlciBsaW5lbm8gYmVmb3JlIGluY3JlbWVudC4KKwlEb24ndCBjYWxsIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlLgorCitUdWUgU2VwICA4IDA2OjMxOjE3IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjcC10eXBlY2suYyAoY29uc3RhbnRfcHJpbnRfd2FybmluZyk6IERlbGV0ZWQuCisKK1R1ZSBTZXAgIDggMDU6MjY6MTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BoYWwpCisKKwlUdWUgQXVnIDE4IDIzOjU2OjE2IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogdHJlZS5oIChCSU5GT19WUFRSX0ZJRUxEKTogIEFkZGVkIHRvIHN1cHBvcnQgZGVidWdnaW5nCisJaW5mb3JtYXRpb24gYWJvdXQgdmlydHVhbCBiYXNlIGNsYXNzIHBvaW50ZXJzLgorCitNb24gU2VwICA3IDE5OjM5OjQ1IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGNvbnN0YW50X3ByaW50X3dhcm5pbmcpOiBEZWxldGVkLgorCSogYy1jb21tb24uYzogTW92ZWQgaGVyZS4KKworTW9uIFNlcCAgNyAxNzowMzowNyAxOTkyICBQYXVsIEVnZ2VydCAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBDaGVjayBhYnMgZm9yIGNvbnN0YW50IGludGVnZXIgb3ZlcmZsb3cuCisKK01vbiBTZXAgIDcgMDE6MzE6NDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWNvbW1vbi5jIChjaGVja19jYXNlX3ZhbHVlKTogQ2FsbCBjb25zdGFudF9leHByZXNzaW9uX3dhcm5pbmcuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogRm9yIERJViBieSAwLCBkbyBub3RoaW5nLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogU2V0IERFQ0xfSU5MSU5FIGluIG5ld2RlY2wKKwlzbyBpdCBpcyBjb3BpZWQgaW50byBvbGRkZWNsLgorCitTdW4gU2VwICA2IDA4OjUzOjQ2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBmaXNocG9uZCkKKworCSogbTY4ay5tZCAoZnNnbG11bCBwYXR0ZXJuKTogSWYgRlNHTE1VTF9VU0VfUywgb3Bjb2RlIGhhcyAucywgbm90IC54LgorCSogYW1peC5oIChGU0dMTVVMX1VTRV9TKTogRGVmaW5lZC4KKworU3VuIFNlcCAgNiAxNzo0MjozMyAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChpbmRpcmVjdF9qdW1wKTogQW5udWwgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaWYgdGhlIGRlbGF5CisJc2xvdCBjb3VsZCBub3QgYmUgZmlsbGVkIGluc3RlYWQgb2YgZW1pdHRpbmcgYSBub3AuCisKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFVuZG8gQXVnLiAxMyBjaGFuZ2UuCisJSWYgcHJvZmlsaW5nLCB0aGVuIHRoaXMgZnVuY3Rpb24gbWFrZXMgY2FsbHMuICBSZWZsZWN0IHRoaXMgaW4KKwlDQUxMSU5GTy4KKwkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogSWYgcHJvZmlsaW5nLCB0aGVuIGJlIHJlc3RvcmUgInJwIiBoZXJlLgorCisJKiBwYS5tZCAodXNlX21pbGxpX3JlZ3MgYXR0cmlidXRlKTogRGVsZXRlZCwgbm90IG5lY2Vzc2FyeSBhbnltb3JlLgorCUFsbCByZWZlcmVuY2VzIGRlbGV0ZWQuCisJKiBwYS5jICh1c2VfbWlsbGlfcmVncyk6IERlbGV0ZWQuCisKK1N1biBTZXAgIDYgMTc6MTE6MDAgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGp1cGl0ZXIuc2ljcy5zZSkKKworCSogYXJtLmggKE1PVkVfTUFYKTogRGVmaW5lIGFzIDQuCisKKwkqIG5zMzJrLmMgKGhhcmRfcmVnbm9fbW9kZV9vayk6IERvbid0IGFib3J0IGlmIHVua25vd24gbW9kZSwKKwlyZXR1cm4gMCBpbnN0ZWFkLiAgRGVjbGFyZSBhcmd1bWVudCBNT0RFIGFzIGBlbnVtIG1hY2hpbmVfbW9kZScuCisKKwkqIGk4NjAuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogQWxsb3cgQkxLbW9kZS4KKworU3VuIFNlcCAgNiAxNjo1NzoxMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoaW5pdF9leHByX29uY2UpOiBEb24ndCB0cnkgSEFSRF9SRUdOT19NT0RFX09LIG9uIFZPSURtb2RlCisJb3IgQkxLbW9kZS4KKworU3VuIFNlcCAgNiAxNDoyNzo1NyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY3AtdHlwZWNrLmMgKGNvbnN0YW50X2V4cHJlc3Npb25fd2FybmluZyk6IE5ldyBmbiBmcm9tIGMtdHlwZWNrLmMuCisKK1N1biBTZXAgIDYgMDk6MTE6NDYgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IHNldCBERUNMX0VYVEVSTkFMIGluIG9sZGRlY2wuCisJUHJlc2VydmUgREVDTF9VSUQgb2Ygb2xkZGVjbC4KKworU3VuIFNlcCAgNiAwMzozNzoyMSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKGNtcHN0cnNpKTogUmV3cml0ZSBleHBhbmRlciB0byBoYW5kbGUgb3BlcmFuZHMgY29ycmVjdGx5LgorCitTYXQgU2VwICA1IDIyOjU1OjUzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBNYWtlIGNoYW5nZSBtaXNzaW5nIGZyb20gbGFzdCBtb2RpZmljYXRpb24KKwl0byBzcGxpdHRpbmcgY29kZS4KKworU2F0IFNlcCAgNSAxOToyMTowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogQ2FsbGVyIG11c3QgZ2l2ZSBzaXplIG9mIEZJTEVfVFlQRS4KKworU2F0IFNlcCAgNSAxNjozNDo1MCAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBhcm0uYyAoYmVmb3JlIGZ1bmN0aW9ucyk6IFJlbW92ZSB4bWFsbG9jIGRlY2wuCisJKGFybV9hc21fb3V0cHV0X2xhYmVsKTogQ2FzdCB2YWx1ZSBmcm9tIHhtYWxsb2MuCisKKwkqIGFybS5tZCAoc3RvcmVoaSk6IFVzZSBtYXRjaF9vcGVyYW5kIGZvciBvcGVyYW5kIDAuCisJVXNlIGdlbl9sb3dwYXJ0IHRvIGNoYW5nZSBtb2RlIG9mIG9wZXJhbmQgMC4KKwkoc3RvcmVpbnRoaSk6IFVzZSBtYXRjaF9vcGVyYW5kIGZvciBvcGVyYW5kIDAuCisJQ2hhbmdlIG91dHB1dCBjb2RlIHRvIHJlYXNzaWduIG9wZXJhbmQgMC4KKwkodHJ1bmNzaWhpMiwgdHJ1bmNzaXFpMiwgdHJ1bmNoaXFpMik6IFJlbW92ZSB0aGVzZSBwYXR0ZXJucy4KKworU2F0IFNlcCAgNSAwMjozOTozNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG5ld3MuaCAoQVNNX09VVFBVVF9PUENPREUpOiBEZWZpbmVkLgorCitTYXQgU2VwICA1IDE4OjUyOjIxIDE5OTIgIEp1a2thIFZpcnRhbmVuICAoanR2QGthbXBpLmh1dC5maSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBIYW5kbGUgQk9PTEVBTl9UWVBFLCBDSEFSX1RZUEUsCisJYW5kIEZJTEVfVFlQRSBmb3IgUGFzY2FsLiAKKwkoZml4dXBfc2lnbmVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IFVzZSBfX2djY19iY21wLCBub3QgcmVhbCBiY21wLgorCShleHBhbmRfdW5vcCk6IEhhbmRsZSBORUcgZm9yIGNvbXBsZXggbW9kZXMuCisJKGV4cGFuZF9iaW5vcCk6IExpa2V3aXNlLgorCShleHBhbmRfY29tcGxleF9iaW5vcCk6IE5ldyBmdW5jdGlvbi4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IFdoZW4gbW92aW5nIHdvcmQgYnkgd29yZCwKKwltYXJrIHRoZSB3aG9sZSB0aGluZyBhcyBhIGxpYmNhbGwgYmxvY2suCisJKGdyb3VwX2luc25zKTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfZXhwcik6CisJSW1wbGVtZW50IENPTVBMRVhfRVhQUiwgUkVBTFBBUlRfRVhQUiwgSU1BR1BBUlRfRVhQUiwgQ09OSl9FWFBSLgorCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBIYW5kbGUgQk9PTEVBTl9UWVBFIGFuZCBDSEFSX1RZUEUuCisJKiBlbWl0LXJ0bC5jIChnZW5faGlnaHBhcnQpOiBOZXcgZnVuY3Rpb24uCisKK0ZyaSBTZXAgIDQgMjM6MjA6NTkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBpODYwLm1kIChtdWxzaTNfYmlnKTogVXNlIGxvdyBoYWxmIG9mIHJlc3VsdC4KKwlVc2Ugb2Zmc2V0IDEgaW4gc3VicmVncyBpbiBhY3R1YWwgZm1sb3cgaW5zbi4KKwkoZm1sb3cgcGF0dGVybik6IFNwbGl0IHRoaXMgaW50byBhbHRlcm5hdGl2ZXMgZm9yIGJpZyBhbmQgbGl0dGxlIGVuZC4KKworCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzcyk6IEZvciBtYXRjaGluZyBvcGVyYW5kcywgaGFuZGxlCisJY2FzZSB3aGVyZSB0aGUgZWFybGllciBvbmUgaXMgbm90IGEgcHNldWRvIGxpa2UgdGhlIGNhc2UKKwl3aGVyZSB0aGUgbGF0ZXIgb25lIGlzIG5vdCBhIHBzZXVkby4KKworRnJpIFNlcCAgNCAxNzoyNDoxMSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBwYS5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2UgJVIgdG8gc3RvcmUgYXQgYXV0by1pbmNyL2RlY3IKKwlhZGRyLiAgU3BsaXQgaW5jciBhbmQgZGVjciBjYXNlcyBmb3Igc3RvcmUuCisKK0ZyaSBTZXAgIDQgMDM6NDk6MDUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAobWFpbik6IE5vIHByb2dyYW0gc2hvdWxkIHJldHVybiB0aGUgZXJyb3JfY291bnQhCisJUmV0dXJuIDIgaWYgZmFpbHVyZSBkdWUgdG8gc2lnbmFsLCAxIGlmIGp1c3QgZXJyb3JzLgorCShleGVjdXRlKTogSW5jcmVtZW50IHNpZ25hbF9jb3VudC4KKworCSogbW92ZS1pZi1jaGFuZ2U6IFVuZG8gcHJldmlvdXMgY2hhbmdlLgorCisJKiBjLWRlY2wuYyAoZ3Jva3Bhcm1zKTogQ29weSBhcmcgdHlwZSBsaXN0IHRvIHNhdmFibGUgb2JzdGFjayBpZiBuZWMuCisKK0ZyaSBTZXAgIDQgMTk6NDA6MzIgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGNvbnN0YW50X2V4cHJlc3Npb25fd2FybmluZyk6IE5vdyB3b3JrczsKKwlpdCByZXBvcnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGluIGNvbnN0YW50IGV4cHJlc3Npb25zLAorCisJKiBmb2xkLWNvbnN0LmMgKGxlZnRfc2hpZnRfb3ZlcmZsb3dzLCBzYW1lX3NpZ24sIG92ZXJmbG93X3N1bV9zaWduKToKKwlOZXcgbWFjcm9zLgorCShhZGRfZG91YmxlLCBkaXZfYW5kX3JvdW5kX2RvdWJsZSwgbHNoaWZ0X2RvdWJsZSwgbXVsX2RvdWJsZSwKKwluZWdfZG91YmxlLCBjb25zdF9iaW5vcCwgZm9sZCk6IENoZWNrIGZvciBzaWduZWQgaW50ZWdlciBvdmVyZmxvdy4KKwlQcm9wYWdhdGUgb3ZlcmZsb3cgZmxhZ3MgZnJvbSBvcGVyYW5kcyB0byByZXN1bHQuCisJKGNvbnN0X2Jpbm9wLCBmb2xkX2NvbnZlcnQpOiBVc2UgcGVkd2FybiBmb3Igb3ZlcmZsb3cgd2FybmluZ3MuCisJU2F5IGBjb25zdGFudCBleHByZXNzaW9uJywgbm90IGBjb25zdGFudCBmb2xkaW5nJywgZm9yIHVzZXIncyBzYWtlLgorCitUaHUgU2VwICAzIDIyOjI4OjQxIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwlDb21wbGV0ZSAxMnRoIEN5Z251czwtLT5GU0YgbWVyZ2UuCisKKwlUaHUgU2VwICAzIDEyOjI5OjI0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwlUaGVzZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkIGZyb20gY2hhbmdlcyB0byBjLSouYy4KKworCU1vbiBBdWcgMTcgMTY6Mjg6NDggMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFRlc3Qgb25seSBjYW5fcmVhY2hfZW5kIGZvciB0aGUKKwl3YXJuaW5nIGFib3V0IHJlYWNoaW5nIHRoZSBlbmQgb2YgYSBub24tdm9pZCBmdW5jdGlvbi4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBXaGVuIHByb21vdGluZyBhbiBhcmd1bWVudCwgcmV0YWluIHVuc2lnbmVkbmVzcworCWlmIHRyYWRpdGlvbmFsIG9yIGlmIHByb21vdGVkIHR5cGUgaXMgbm90IHJlYWxseSBnZXR0aW5nIHdpZGVyLgorCisJKiBjcC1wYXJzZS55IChkYXRhZGVmKTogRm9yIGVtcHR5IGRlY2xhcmF0aW9uLCB1c2UgcGVkd2Fybi4KKworCU1vbiBBdWcgMTcgMTc6MDg6MTEgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydCk6IFdoZW4gY29udmVydGluZyB0byB2YXJpYW50IG9mIHNhbWUgdHlwZSwgZm9sZC4KKworCVdlZCBBdWcgMTkgMTY6NTg6NDEgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogQ29udmVydCBlbnVtZXJhbCB0eXBlcyB0bworCWFwcHJvcHJpYXRlIF9zaWduZWRfIHR5cGUgdW5sZXNzIC10cmFkaXRpb25hbC4KKworCVR1ZSBBdWcgIDQgMTM6MTE6MzYgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydCk6IElmIG1haW4gdmFyaWFudHMgbWF0Y2gsIAorCWJ1dCB0aGUgdHlwZSBpcyBub3QgaWRlbnRpY2FsLCBtYWtlIGEgTk9QX0VYUFIuCisKKwkqIGNwLWRlY2wuYyAod2Fybl9yZWR1bmRhbnRfZGVjbHMpOiBEZWNsYXJlZC4KKwkoZHVwbGljYXRlX2RlY2xzKTogT3B0aW9uYWxseSB3YXJuIGFib3V0IHJlZHVuZGFudCBkZWNsYXRpb25zLgorCShwdXNoZGVjbCk6IE5ldmVyIHJldXNlIGdsb2JhbCBmY24gZGVjbCBpbiBwbGFjZSBvZiBsb2NhbCBleHRlcm47CisJanVzdCBjb3B5IHNvbWUgaW5mbyBmcm9tIGl0LgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IF9fYnVpbHRpbl9zYXZlcmVncyByZXR1cm5zIHZvaWQgKi4KKwkoc3RvcmVfcGFybV9kZWNscywgZmluaXNoX2Z1bmN0aW9uLCBzdGFydF9tZXRob2QsIGZpbmlzaF9tZXRob2QpOgorCUNvbXBhcmUgVFlQRV9NQUlOX1ZBUklBTlQgYWdhaW5zdCB2b2lkX3R5cGVfbm9kZS4KKworCSogY3AtZGVjbDIuYyAod2Fybl9yZWR1bmRhbnRfZGVjbHMpOiBEZWZpbmVkLgorCShsYW5nX2RlY29kZV9vcHRpb24pOiBEZWNvZGUgLVdyZWR1bmRhbnQtZGVjbHMuCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogRG9uJ3QgdXNlIHR5cGUxIGFzCisJdGVtcG9yYXJ5IHZhcmlhYmxlOyBzZXQgcmVzdWx0X3R5cGUgZGlyZWN0bHkuCisKKwlUdWUgQXVnICA0IDEyOjA0OjE3IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtdHJlZS5oIChDX1BST01PVElOR19JTlRFR0VSX1RZUEVfUCk6ICBEZWZpbmVkLgorCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6ICBVc2UgaXQuCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscywgZ3Jva2RlY2xhcmF0b3IpOiAgRGl0dG8uCisJKGdyb2twYXJtcywgc3RhcnRfZnVuY3Rpb24pOiAgRGl0dG8uCisJKiBjcC10eXBlY2suYyAoc2VsZl9wcm9tb3RpbmdfYXJnc19wLCBkZWZhdWx0X2NvbnZlcnNpb24pOiAgRGl0dG8uCisJKiBjcC1wYXJzZS55IChwcmltYXJ5KTogU2V0IFRSRUVfQ09OU1RBTlQgaW4gdGhlIE5PUF9FWFBSIGZvciBhbiBlbnVtLgorCisJVHVlIEF1ZyAgNCAwOToxNzozMiAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIGNwLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzLCBncm9rZGVjbGFyYXRvciwgZ3Jva3Bhcm1zKTogCisJVXNlIFRZUEVfTUFJTl9WQVJJQU5UIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgc3BlY2lmaWMgdHlwZXMuCisJKGJ1aWxkX2VudW1lcmF0b3IpOiBVc2UgU1RSSVBfVFlQRV9OT1BTLgorCShzdGFydF9mdW5jdGlvbik6IEZvcmNlIG1haW4oKSB0byByZXR1cm4gImludCIsIG5vdCBqdXN0IGFueQorCWludGVncmFsIHR5cGUuCisKKwkqIGNwLXR5cGVjay5jIChzZWxmX3Byb21vdGluZ19hcmdzX3AsIGRlZmF1bHRfY29udmVyc2lvbik6IAorCVVzZSBUWVBFX01BSU5fVkFSSUFOVCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IHNwZWNpZmljIHR5cGVzLgorCSh1bnNpZ25lZF90eXBlLCBzaWduZWRfdHlwZSk6IElmIHR5cGUgaXMgbm90IGtub3duLCByZXR1cm4gaXQKKwl1bmNoYW5nZWQgaW5zdGVhZCBvZiByZXR1cm5pbmcgaXRzIFRZUEVfTUFJTl9WQVJJQU5ULgorCShidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogVXNlIFRZUEVfTUFJTl9WQVJJQU5UIHdoZW4KKwljb21wYXJpbmcgYWdhaW5zdCBzcGVjaWZpYyB0eXBlcy4gIEFsc28gdXNlIFNUUklQX1RZUEVfTk9QUy4KKwlBbHNvIGNvcHkgZXJyb3IgbWVzc2FnZXMgZnJvbSBlcXVpdmFsZW50IGNvZGUgaW4gYy10eXBlY2suYy4KKworCSogY3AtcGFyc2UueSAocHJpbWFyeSk6IFdyYXAgYSBOT1BfRVhQUiBhcm91bmQgYW4gZW51bSB2YWx1ZS4KKworCVdlZCBTZXAgIDIgMTg6MDY6NDcgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJV2VkIFNlcCAgMiAxNzozMzo1OSAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiAgRGVmYXVsdCBmcmllbmRzIHRvIGJlaW5nIFBVQkxJQy4KKworCVR1ZSBTZXAgIDEgMTI6MzM6MDEgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogY3AtaW5pdC5jIChkb19mcmllbmRzKTogIEFsd2F5cyByZXR1cm4gYHZvaWRfdHlwZV9ub2RlJy4KKworCSogY3AtZGVjbC5jIChncm9rcGFybXMpOiBDYWxsIGRpZ2VzdF9pbml0IG9uIGRlZmF1bHQgYXJndW1lbnRzIGZvcgorCWZvcm1hbCBwYXJhbWV0ZXJzLgorCisJKiBjcC1kZWNsLmMgKHhyZWZfdGFnKTogVGhlIEJJTkZPIHJlY29yZHMgZGVzY3JpYmluZyBpbmRpdmlkdWFsCisJaW5oZXJpdGFuY2VzIGFyZW4ndCBzaGFyZWQgaW4gdGhlIGxhdHRpY2UuCisKKwlUdWUgU2VwICAxIDEyOjI3OjE3IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcywgY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogIFRoZQorCVJFQURPTkxZIGZsYWcgZm9yIGEgY29uc3Qgb2JqZWN0IGNvdWxkIGJlIGRvd24gaW4gdGhlIHR5cGUgb2YgdGhlCisJcmVmZXJlbmNlLgorCisJKiBjcC1jYWxsLmMgKGNvbXB1dGVfY29udmVyc2lvbl9jb3N0cyk6ICBEb24ndCBpZ25vcmUgdGhlIGNvc3Qgb2YKKwljb252ZXJ0aW5nIHRoZSBmaXJzdCBhcmd1bWVudCwgaWYgaXQgaXMgbm90IGEgbWV0aG9kLiAgRml4ZXMgTW9uIEF1ZworCTMxIDIyOjMyOjM0IGNoYW5nZS4KKworCVR1ZSBTZXAgIDEgMTE6NTg6NTIgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKFRISVNfTkFNRSk6ICBVc2UgdGhlIG5hbWUgYGB0aGlzJycgaW5zdGVhZCBvZiB0aGUgbW9yZQorCWNyeXB0aWMgbmFtZSBgYCR0JycuCisKKwlNb24gQXVnIDMxIDIyOjMyOjM0IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiAgV2hlbiBmb3JtaW5nIG1ldGhvZCBjYWxscyB0aGF0IHVzZQorCWEgcXVhbGlmaWVkIG5hbWUsIGNvbnZlcnQgdGhlIGluc3RhbmNlIHBvaW50ZXIgdG8gdGhlIHR5cGUgaW1wbGllZAorCWJ5IHRoZSBxdWFsaWZpY2F0aW9uLiAgQmFzZTo6bWVtYmVyX2Z1bmMoKTsgY29udmVydHMgdGhpcyB0byBiZSBhCisJKEJhc2UgKikuCisKKwkqIGNwLWNhbGwuYyAoY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogIERvbid0IHBlbmFsaXplIGNvbnZlcnNpb24KKwlvZiB0aGUgaW5zdGFuY2UgcG9pbnRlciBvbiBtZXRob2QgY2FsbHMsIGFzIHRoZXkgY291bGQgYmUgcG9pbnRlcnMKKwl0byBiYXNlIGNsYXNzZXMuCisKKwlNb24gQXVnIDMxIDE4OjM0OjMzIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogV2hlbiBhIGZyaWVuZCBmdW5jdGlvbiBpcyBiZWluZworCWRlZmluZWQsIHB1dCBpdCBpbiAobGV4aWNhbCkgc2NvcGUgb2YgdGhlIGNsYXNzIGluIHdoaWNoIGl0IGFwcGVhcnMuCisKKwlNb24gQXVnIDMxIDA5OjU3OjI3IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBGb3IgYXNzaWdubWVudHMgdG8gbWVtYmVyCisJdmFyaWFibGVzIGxpa2UgIlg6OmkiLCBjYWxsIHJlc29sdmVfb2Zmc2V0X3JlZiB0byBnZXQgdGhlIGxoczsgYWxsCisJdGhlIGNvZGUgYW5kIGNoZWNraW5nIHdhcyBpbiB0aGVyZSwgaXQganVzdCB3YXNuJ3QgYmVpbmcgdXNlZC4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogR2l2ZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKKwlpbiBxdWVzdGlvbiB3aGVuIHJlcG9ydGluZyB0aGF0IGFsbCBpdHMgbWVtYmVyIGZ1bmN0aW9ucyBhcmUKKwlwcml2YXRlLgorCisJU3VuIEF1ZyAzMCAwODozNDowMyAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChzZXR1cF92dGJsX3B0cik6IERpc2FibGUgdGhlIGNvZGUsIHVudGlsIHByb2JsZW1zIGNhbgorCWJlIHdvcmtlZCBhcm91bmQuCisKKwlTYXQgQXVnIDI5IDEwOjM0OjEwIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBVbmRvIFNhdCBKYW4gMTggMTI6MDY6NTggY2hhbmdlIGJ5CisJdGllbWFubiB0aGF0IGluY29ycmVjdGx5IG1ha2VzIC1wZWRhbnRpYyBpbml0aWFsaXphdGlvbiBvZiB2aXJ0dWFsCisJYmFzZSBjbGFzc2VzIDEgb3IgbW9yZSBsZXZlbHMgZGVlcCBpbXBvc3NpYmxlLgorCisJU2F0IEF1ZyAyOSAxMDowMzowNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQWxsb3cgZXh0ZXJuICJDIiBmdW5jdGlvbnMgdG8gYmUKKwlmcmllbmRzLgorCisJU2F0IEF1ZyAyOSAwNDo0MzoyMiAxOTkyICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55ICh1c2VkX2V4dGVybl9zcGVjKSwgY3AtZGVjbC5jIChzdGFydF9kZWNsLAorCXN0YXJ0X2Z1bmN0aW9uKTogTWFrZSBzdXJlIGV4dGVybiBpbiBleHRlcm4gIkMiIChmbmRlZiB8IGRhdGFkZWYpCisJYXBwbGllcyB0byBvbmx5IG9uZSBkZWNsLiBGaXhlcyBwcm9ibGVtIGludHJvZHVjZWQgb24gVGh1IEF1ZyAyMAorCTE2OjExOjU4LgorCisJVGh1IEF1ZyAyNyAwOTozMzoxMyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTmFtZSBvcGVyYXRvcnMgcHJvcGVybHkgd2hlbgorCWNvbXBsYWluaW5nIGFib3V0IHRyeWluZyB0byBkZWNsYXJlIGl0IGFzIGEgbWV0aG9kIHdoZW4gbm90IGluIGEKKwljbGFzcy4KKworCSogY3AtZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogRm9yYmlkIHZvbGF0aWxlLT5jb25zdCByZWZzLAorCWFuZCB2aWNlLXZlcnNhLiAgQWxzbyBtYWtlIHRoZSB0ZXN0cyBhcHBseSB0byBhbGwgdHlwZXMsIG5vdCBqdXN0CisJYWdncmVnYXRlcy4gIChOb3cgZnVsbHkgY29tcGxpYW50IHdpdGggQU5TSSBDKysgSnVuZSA1IDE5OTYgV1AKKwlzZWN0aW9uIDguNC4zLjUuKQorCisJKiBjcC1kZWNsLmMgKHNoYWRvd190YWcpOiBEb24ndCBhbGxvdyBhIGZ1bmN0aW9uIHRvIGJlIGEgbWVtYmVyIG9mCisJYW4gYW5vbnltb3VzIHVuaW9uLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogRm9yIGEgdHlwZSB0aGF0J3MgbmVzdGVkIHdpdGhpbiBhCisJY2xhc3MsIHVzZSB0aGUgY2xhc3MgdmFsdWUgaXRzZWxmIHdoZW4gY2hlY2tpbmcgYSB0eXBlZGVmIHRoYXQgdXNlcworCXRoYXQgbmV3IG5lc3RlZCB0eXBlLgorCisJV2VkIEF1ZyAyNiAyMDoyNDowNyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGRlY2xzX21hdGNoKTogV2hlbiBjb252ZXJ0aW5nIGZyb20gYQorCXBzZXVkby1NRVRIT0RfVFlQRSBmb3IgYSBzdGF0aWMgbWVtYmVyIGZuLCBoYW5kbGUgdGhlIHN0YXRpYworCWZ1bmN0aW9uIGJlaW5nIGJvdGggaW4gdGhlIG5ldyBhbmQgb2xkIGRlY2xhcmF0aW9ucy4KKwkocmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4pOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBQdXQgb3V0IHByb3BlciBsaW5lIG51bWJlciBmb3IKKwllcnJvciB3aXRoIHRoZSB1c2Ugb2YgYSBwcml2YXRlIGNvbnN0cnVjdG9yLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSWYgYSBzdG9yYWdlIGNsYXNzIGlzIGVycm9uZW91c2x5CisJc3BlY2lmaWVkIGZvciBhbiBvcGVyYXRvciwgcHJpbnQgdGhlIG9wZXJhdG9yJ3MgbmFtZSBvdXQgcHJvcGVybHkgaW4KKwl0aGUgZXJyb3IgbWVzc2FnZSAoZS5nLiwgcHJpbnQgYCsnIGluc3RlYWQgb2YgYF9fcGwnKS4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFsbG93IG5laXRoZXIgY29uc3RydWN0b3JzIG5vcgorCWRlc3RydWN0b3JzIHRvIGJlIGRlY2xhcmVkIGNvbnN0IG9yIHZvbGF0aWxlLgorCisJKiBjcC1kZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6IE5ldyBhcmd1bWVudCBWSVJUVUFMUC4KKwlVc2UgaXQgdG8gZGlzYWxsb3cgZGVjbGFyaW5nIG5ldyBvciBkZWxldGUgYXMgdmlydHVhbC4gIEFsc28KKwl1c2UgY29lcmNlX25ld190eXBlKCkgYW5kIGNvZXJjZV9kZWxldGVfdHlwZSgpIHRvCisJc2FuaXR5LWNoZWNrIG92ZXJsb2FkaW5nIG9mIG5ldyBhbmQgZGVsZXRlLgorCShncm9rZm5kZWNsKTogR2l2ZSBncm9rX29wX3Byb3BlcnRpZXMgaWYgdGhlIGRlY2wgaXMgdmlydHVhbC4KKwkoc3RhcnRfbWV0aG9kKTogTGlrZXdpc2UuCisKKwkqIGNwLXRyZWUuYyAobHZhbHVlX3AsIEFERFJfRVhQUiBjYXNlKTogQ2FzdHMgdG8gcmVmZXJlbmNlcyBhcmUKKwlsdmFsdWVzLgorCitUaHUgU2VwICAzIDAyOjQ2OjQ0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2FsbGVyLXNhdmUuYyAoc2V0dXBfc2F2ZV9hcmVhcyk6IERvbid0IGxvb2sgYXQgV09SRFNfQklHX0VORElBTi4KKworCSogZml4aW5jbHVkZXM6IElmIHdlIGZpbmQgYSBsaW5rIHBvaW50aW5nIHRvIC4sIG1ha2UgYSBzaW1pbGFyCisJbGluayB0byAuLCBub3QgYSBsaW5rIHRvIGFuIGFic29sdXRlIG5hbWUuCisJKHN0ZGlvLmgpOiBDaGFuZ2Ugc3RkaW8uaCB0byB1c2Ugc3RkYXJnLmggdG8gZ2V0IHZhX2xpc3QuCisKKwkqIGNleHAueTogQ29tbWVudCBzeW50YXggZml4LgorCitUaHUgU2VwICAzIDAxOjQ4OjE2IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBqdXBpdGVyLnNpY3Muc2UpCisKKwkqIHdlMzJrLm1kIChjYXNlc2kpOiBVc2UgbWF0Y2hfZHVwIGZvciBzZWNvbmQgbWVudGlvbiBvZiBvcGVyYW5kIDQuCisKK1dlZCBTZXAgIDIgMDY6NTg6MzIgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEFkZCBtaXNzaW5nIGNvbW1hIGJldHdlZW4gc3RyaW5ncywgc28KKwl0aGF0IHRyYWRpdGlvbmFsIGNvbXBpbGVycyBjYW4gY29tcGlsZSBnY2MuYy4KKwkobWFpbik6IERvbid0IHBhc3Mgc3RyY3B5IG9yIHN0cmxlbiBhIE5VTEwgcG9pbnRlciBpZiBzb21lIG9mIHRoZQorCXNwZWMgc3RyaW5ncyBpbiBkZWZhdWx0X2NvbXBpbGVycyBhcmUgTlVMTC4KKwkodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogRG9uJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgc29tZSBvZgorCXRoZSBzcGVjIHN0cmluZ3MgaW4gZGVmYWx1dF9jb21waWxlcnMgYXJlIE5VTEwuCisKKwkqIGdjYy5jIChtYWluKTogVXNlIG5ldyBsb29wIHZhciBKIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggSS4KKworV2VkIFNlcCAgMiAxOTowOTowMiAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmMgKGluaXRfY2FsbGVyX3NhdmUpOiBJZiB3ZSB3ZXJlIHVuYWJsZSB0bworCWZpbmQgYSBzaW1wbGUgaW5zbiB3aGljaCBtZWV0cyBhbGwgaXRzIGNvbnN0cmFpbnRzIHRvIHNhdmUKKwlhbmQgcmVzdG9yZSB3aXRoIGEgc2luZ2xlIGluc24gaW4gYSBtb2RlLCB0aGVuIHNldCAKKwlyZWdub19zYXZlX21vZGUgdG8gVk9JRG1vZGUgdG8gaW5zdXJlIHRoYXQgdGhpcyBtb2RlIGlzIG5ldmVyCisJdXNlZCB0byBjYWxsZXItc2F2ZSB0aGUJY3VycmVudCByZWdpc3Rlci4KKworV2VkIFNlcCAgMiAxMjozNDozOSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmMgKGluc2VydF9zYXZlX3Jlc3RvcmUpOiBDb3JyZWN0IHRlc3QgZm9yCisJZGV0ZXJtaW5pbmcgd2hldGhlciBtdWx0aXBsZSByZWdpc3RlcnMgY2FuIGJlIHNhdmVkLgorCisJKiBzcGFyYy5tZCAoU0ltb2RlIGxkZCBwZWVwaG9sZXMpOiBBZGQgYGYnIHRvIGNvbnN0cmFpbnRzLgorCisJKiBzcGFyY3Y0LmggKEhBTkRMRV9QUkFHTUEpOiBEZWxldGUuCisJKiBzcGFyYy5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogRGVsZXRlLgorCisJKiBjb25maWcvc3BjLXNvbDIuaDogQ2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgU3VuIGJ1bmRsZWQgQyAKKwljb21waWxlciBpbiBNRF9TVEFSVEZJTEVfUFJFRklYIChmb3IgYmFja3VwIGRlZmF1bHRzKS4KKworV2VkIFNlcCAgMiAwOToxMToxNiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5oIChNT1ZFX01BWCk6IEV4cHJlc3MgaW4gYnl0ZXMgbm90IGJpdHMuCisKKwkqIG04OGsuYyAob3V0cHV0X2FzY2lpKTogT3V0cHV0IGtub3duIGVzY2FwZSBjaGFyYWN0ZXJzIGFuZCBkb24ndAorCXRlcm1pbmF0ZSB0aGUgY29uc3RhbnQgaWYgYW4gb2N0YWwgZXNjYXBlIGlzIHVzZWQuCisKK1dlZCBTZXAgIDIgMDY6Mzg6MzcgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgY2FzZSBBU0hJRlRSVCk6IEFkZCBuZXcKKwljb2RlIHRvIGhhbmRsZSAoYXNoaWZ0cnQgKG5lZyAoYXNoaWZ0IEZPTyBDMSkgQzIpKSBqdXN0IGxpa2Ugd2UKKwljdXJyZW50bHkgaGFuZGxlIChhc2hpZnRydCAoT1AgKGFzaGlmdHJ0IEZPTyBDMSkgQzIpIEMyKS4KKworV2VkIFNlcCAgMiAwMDoxNTo0MiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogQWRkIHNlbWljb2xvbiB0byBtYWtlIGFuIGVtcHR5IGNvbW1hbmQuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBJZiBoYXZlIGFueSBlYXJseWNsb2JiZXJzLCBkb24ndCBsZXQgYW55CisJcmVsb2FkcyBvdmVybGFwIHdpdGggdGhlbS4gIE1ha2UgZXZlcnl0aGluZyBSRUxPQURfT1RIRVIuCisKKwkqIG1vdmUtaWYtY2hhbmdlOiBHaXZlIHN0YXR1cyAxIGlmIGZpbGUgaXMgdW5jaGFuZ2VkLgorCisJKiBNYWtlZmlsZS5pbiAoU1lTVEVNX0hFQURFUl9ESVIpOiBOZXcgdmFyaWFibGUuCisJKHhsaW1pdHMuaCk6IE5ldyB0YXJnZXQsIGJyb2tlbiBvdXQgZnJvbSBpbnN0YWxsLWxpbWl0cy1oLgorCUxvb2sgaW4gU1lTVEVNX0hFQURFUl9ESVIgZm9yIHN5c3RlbSdzIGxpbWl0cy5oLgorCShzdGFydC5lbmNhcCk6IERlcCBvbiB4bGltaXRzLmguCisJKGluc3RhbGwtbGltaXRzLWgpOiBJbnN0YWxsIHhsaW1pdHMuaCBhbHJlYWR5IG1hZGUuCisJKiBjcm9zcy1tYWtlIChTWVNURU1fSEVBREVSX0RJUik6IE92ZXJyaWRkZW4uCisKKwkqIHgtaTM4NnNjbyAoWF9DRkxBR1MpOiBEZWxldGVkLgorCSogeC1pMzg2c2NvNDogTmV3IGZpbGUsIGxpa2Ugb2xkIHgtaTM4NnNjby4KKwkqIGNvbmZpZ3VyZSAoaTM4Ni0qLXNjbzMuMnY0Kik6IFVzZSB4LWkzODZzY280LgorCisJKiB0LXNvbDIgKGdtb24ubyk6IEZpbmQgZ21vbi1zb2wyLmMgaW4gY29uZmlnLgorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBGaXggYnVncyBpbiBwcmV2aW91cyBjaGFuZ2UuCisKK1R1ZSBTZXAgIDEgMjM6NTE6MTkgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycywgIi5DIiBhbmQgIi5paSIpOiBQYXNzIGArZSonIGludG8gY2MxcGx1cy4KKwkocHJvY2Vzc19jb21tYW5kKTogQWxsb3cgK2VbMDEyXSB0byBiZSBwYXNzZWQgZG93biBpbnRvIGNjMXBsdXMuCisJKiBjcC1kZWNsLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFRoZSBvcHRpb25zIGArZTAnIHRocnUgYCtlMicgd2lsbAorCWJlIGNvbWluZyBpbiBwcmVmaXhlZCBhcyBgLStlJy4KKworVHVlIFNlcCAgMSAyMDowOToyOSAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogQXZvaWQgMSA8PCAoSE9TVF9CSVRTX1BFUl9JTlQgLSAxKSwKKwl3aGljaCBvdmVyZmxvd3MuICBVc2UgdW5zaWduZWQgJSB0byBjb21wdXRlIEhBU0guCisKK1R1ZSBTZXAgIDEgMTc6MjM6MjggMTk5MiAgVGltIE1vb3JlICAobW9vcmVAaGFsKQorCisJKiBwYS5oIChDUFBfU1BFQywgVEFSR0VUX1NXSVRDSEVTKTogbmV3IGZsYWdzOiAtbW5vc25ha2UsCisJLW1wYS1yaXNjLTEtMCwgLW1wYS1yaXNjLTEtMS4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IEVtaXQgYXJndW1lbnQgZGVzY3JpcHRvcnMgZm9yIGFsbAorCWdlbmVyYWwgcmVnaXN0ZXJzIGlmIGN1cnJlbnRfZnVuY3Rpb25fdmFyYXJncy4KKworVHVlIFNlcCAgMSAxMToyNzowOCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogc3BhcmMuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IE9ubHkgdXNlIGlmIEhBTkRMRV9TWVNWX1BSQUdNQQorCWlzbid0IGRlZmluZWQuICAoV2UnbGwgYmUgZ2V0dGluZyB0aGUgZm4gZnJvbSBjLXByYWdtYS5jLCB0aGVuLikKKworU2F0IEF1ZyAyOSAxMzo0NDoyMSBQRFQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiB0cmVlLmggKGN1cnJlbnRfYmxvY2spOiAgRGVjbCBkZWxldGVkLgorCShzZXRfYmxvY2spOiAgRGVjbGFyZWQuCisJKiBzdG10LmMgKGV4cGFuZF9maXh1cCk6ICBDcmVhdGUgYSBCTE9DSyBub2RlICh2aWEgcHVzaGxldmVsL3BvcGxldmVsKQorCXRvIHJlcHJlc2VudCBhbiBhcnRpZmljaWFsIHNjb3BlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBmaXh1cCBjb2RlLgorCUFsc28gZW1pdCBOT1RFX0lOU05fQkxPQ0tfQkVHL05PVEVfSU5TTl9CTE9DS19FTkQgZm9yIHRoYXQgYmxvY2suCisJKGZpeHVwX2dvdG9zKTogIERlY2xhcmF0aW9uIG9mIE5FV0JMT0NLIGRlbGV0ZWQuCisJQ2FsbCBgc2V0X2Jsb2NrJyB0byB1c2UgdGhlIEJMT0NLIG1hZGUgaW4gZXhwYW5kX2ZpeHVwLgorCURlbGV0ZWQgY29kZSB0byBpbnNlcnQgTkVXQkxPQ0sgaW50byBibG9jayBoaWVyYXJjaHkuCisJKiBjLWRlY2wuYywgY3AtZGVjbC5jIChjdXJyZW50X2Jsb2NrKTogIEZ1bmN0aW9uIGRlbGV0ZWQuCisJKHNldF9ibG9jayk6ICBOZXcgZnVuY3Rpb24uCisJKHBvcGxldmVsKTogSWYgdXNpbmcgYSBwcmV2aW91c2x5IGNyZWF0ZWQgYmxvY2ssCisJZG9uJ3QgaW5zZXJ0IGl0IGludG8gdGhlIHBhcmVudCBsZXZlbC4KKwkqIGVtaXQtcnRsLmMgKGVtaXRfaW5zbnNfYWZ0ZXIpOiBVcGRhdGUgbGFzdF9pbnNuIGlmIG5lYy4KKworVHVlIFNlcCAgMSAxMDo1Mzo1OCAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBwYS5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2UgYGxkbycgZm9yIGltbWVkaWF0ZSBhZGRzIChpbnN0ZWFkCisJb2YgYGFkZGknIHdpdGggYmFkIHN5bnRheCkuCisJKG91dHB1dF9sb2FkX2FkZHJlc3MpOiBMaWtld2lzZS4KKworVHVlIFNlcCAgMSAwMjo0MToxMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfdHlwZSk6IE1ha2UgYGFsaWduJyBmaWVsZCBhbiBpbnQuCisKKwkqIGMtdHJlZS5oIChJREVOVElGSUVSX0xJTUJPX1ZBTFVFKTogTmV3IG1hY3JvLgorCShzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyKTogTmV3IGZpZWxkIGxpbWJvX3ZhbHVlLgorCitNb24gQXVnIDMxIDEyOjU5OjIyIFBEVCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIHRyZWUuYyAobWFrZV9ub2RlKTogRml4IHR5cG8gaW4gSnVseSA2IGNoYW5nZToKKwlhc3NpZ25tZW50IG9mIERFQ0xfSU5fU1lTVEVNX0hFQURFUiB3YXMgaW5zZXJ0ZWQgaW4gYmFkIHBsYWNlLgorCitNb24gQXVnIDMxIDIxOjI4OjA4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8yKTogUmVtb3ZlIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2UgYmV0d2VlbgorCWFuIGluc24gdGhhdCB1c2VzIENDMCBhbmQgdGhlIGltbWVkaWF0ZWx5IHByZXZpb3VzIGluc24KKwkoU0NIRURfR1JPVVBfUCByZXByZXNlbnRzIHRoZSBkZXBlbmRlbmNlKS4KKwkoc2NoZWR1bGVfYmxvY2spOiBPbmx5IGNoZWNrIHNldHNfY2MwX3Agb24gYW4gaW5zbi4KKworTW9uIEF1ZyAzMSAxNTozMjoxMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChzdHJ1Y3QgY29tcGlsZXIpOiBzcGVjIGZpZWxkIGlzIG5vdyBhcnJheSBvZiA0IGVsZW1lbnRzLgorCShyZWFkX3NwZWNzKTogQ2xlYXIgdGhlIGVudGlyZSBuZXcgZWxlbWVudCBvZiBjb21waWxlcnMuCisJKGxvb2t1cF9jb21waWxlcik6IENvcHkgYWxsIG9mIHNwZWMgYXJyYXkuICBDaGVjayBlbGVtZW50IDAgZm9yIEAuCisJKG1haW4pOiBDb25jYXRlbmF0ZSBhbGwgZWxlbWVudHMgb2YgY29tcGlsZXIgc3BlYy4KKwkodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogVmFsaWRhdGUgZnJvbSBhbGwgZWxlbWVudHMgb2YgY29tcGlsZXIgc3BlYy4KKwkoZGVmYXVsdF9jb21waWxlcnMpOiBTcGxpdCBDUFAgY29tbWFuZHMgaW50byBzZXBhcmF0ZSBzdHJpbmdzLgorCitNb24gQXVnIDMxIDEwOjA2OjE2IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogY2FsbGVyLXNhdmUuYyAocmVzdG9yZV9yZWZlcmVuY2VkX3JlZ3MpOiBXaGVuIHJlc3RvcmluZyBhCisJcmVmZXJlbmNlZCBoYXJkIHJlZ2lzdGVyLCB1c2UgQ0VJTCBpbnN0ZWFkIG9mIGEgdHJ1bmNhdGluZyBkaXZpZGUKKwl0byBkZXRlcm1pbmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlZ2lzdGVycyB0byByZXN0b3JlLgorCShpbnNlcnRfc2F2ZV9yZXN0b3JlKTogRG9jdW1lbnQgbWF4cmVzdG9yZSBwYXJhbWV0ZXIuCisJKENFSUwpOiBEZWZpbmUuCisKK01vbiBBdWcgMzEgMDQ6MDI6MjEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGNvbnN0X2Jpbm9wKTogRGVsZXRlIHNwZWNpYWwgY2FzZSBmb3IgbXVsdCBieSAzLgorCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIHRlcm1pbmF0aW5nIHplcm8uCisKKwkqIGNvbmZpZ3VyZS5iYXQ6IFJlbW92ZSB2ZXJzaW9uIG51bWJlciBmcm9tIGluaXRpYWwgbWVzc2FnZS4KKworU3VuIEF1ZyAzMCAxNzoyMjoxMSAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGNjY3AuYyAoZG9fcHJhZ21hKTogSW4gcHJldi4gY2hhbmdlLCByZWFsbHkgdXNlIFVfQ0hBUiAqLCBub3QgY2hhciAqLgorCisJKiBhaXgzODYuaCwgaTM4Nmdhcy5oLCBpMzg2c3VuLmgsIGkzODZ2LmgsIGkzODZ2NC5oLCBpMzg2dmdhcy5oLAorCXNlcTM4Ni5oICAoVEFSR0VUX0RFRkFVTFQsVkFMVUVfUkVHTk8sRlVOQ1RJT05fVkFMVUVfUkVHTk8pOgorCU1vdmUgZnJvbSBoZXJlLAorCSogdW54Mzg2LmggKFRBUkdFVF9ERUZBVUxULFZBTFVFX1JFR05PLEZVTkNUSU9OX1ZBTFVFX1JFR05PKToKKwlUbyBoZXJlLgorCShUQVJHRVRfREVGQVVMVCk6IE1ha2UgVEFSR0VUX0lFRUVfRlAgZGVmYXVsdCBvbi4KKwkoVkFMVUVfUkVHTk8pOiBUZXN0IGZvciBNT0RFX0ZMT0FUIGluc3RlYWQgb2Ygc3BlY2lmaWMgbW9kZXMuCisJKFZBTFVFX1JFR05PLEZVTkNUSU9OX1ZBTFVFX1JFR05PKTogTU9ERV9GTE9BVCByZXR1cm4gcmVnIGRlcGVuZHMgb24KKwlUQVJHRVRfRkxPQVRfUkVUVVJOU19JTl84MDM4Ny4KKworCSogaTM4Ni5oIChUQVJHRVRfRkxPQVRfUkVUVVJOU19JTl84MDM4Nyk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkICJuby04MDM4NyIsICJuby1zb2Z0LWZsb2F0IiwKKwkiZnAtcmV0LWluLTM4NyIsIGFuZCAibm8tZnAtcmV0LWluLTM4NyIuCisJQ2hhbmdlIG5vKiBzd2l0Y2hlcyB0byBuby0qLgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IE1ha2UgMzg3IHJlZ3MgZml4ZWQgaWYgdGhlIDM4NyBpcyBub3QKKwl1c2VkIGF0IGFsbC4KKwkoUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogQ29uc3RyYWludCBsZXR0ZXJzICdmJywgJ3QnIGFuZCAndScgYXJlCisJTk9fUkVHUyBpZiB0aGUgMzg3IGlzIG5vdCB1c2VkLgorCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogVXNlIEdFTl9JTlQgdG8gZ2VuZXJhdGUgY29uc3RfaW50IHJ0eC4KKworCSogeC1pMzg2djQ6IE5ldyBmaWxlLgorCShDTElCKTogR2V0IGFsbG9jYSBmcm9tIGxpYnVjYi5hLgorCSogY29uZmlndXJlIChpMzg2LSotc3lzdjQqKTogVXNlIHgtaTM4NnY0LgorCitTdW4gQXVnIDMwIDE1OjMyOjU0IDE5OTIgIERlbm5pcyBHbGF0dGluZyAgKGRnbGF0dGluIGF0IHRyaXJleC5jb20pCisKKwkqIG9iamMtYWN0aW9ucy5jIChjcmVhdGVfYnVpbHRpbl9kZWNsKTogU2V0IFRSRUVfU1RBVElDLgorCURvbid0IHNldCBERUNMX0VYVEVSTkFMIG9yIFRSRUVfUFVCTElDLgorCitTdW4gQXVnIDMwIDAzOjA4OjQ4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS55IChpbml0bGlzdCk6IEhhbmRsZSByYW5nZXMgb2YgYXJyYXkgZWxlbWVudHMuCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBIYW5kbGUgcmFuZ2VzLgorCisJKiBmaXhpbmNsdWRlczogV2hlbiBsaW5rIHBvaW50cyB0byBhIGRpciAkZGlybmFtZSBvdXRzaWRlICRJTlBVVCwKKwljb3B5IHRoYXQgZGlyIGludG8gJExJQi9yb290JGRpcm5hbWUuICBUcmFuc2xhdGUgdGhlIGxpbmsgaXRzZWxmCisJaW50byBhIGxpbmsgdG8gdGhhdCBuZXcgZGlyLiAgTWFrZSBhIGZpbGUgRE9ORSBpbiBlYWNoIHRyZWV0b3AgZGlyCisJc28gbm8gdHJlZXRvcCBpcyBzY2FubmVkIHR3aWNlLiAgSW1wcm92ZSBwcm9ncmVzcyBtZXNzYWdlcy4KKworU2F0IEF1ZyAyOSAyMjo0MTo0OSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5oIChBU01fRklMRV9TVEFSVCk6IE9iamVjdCBmaWxlIHZlcnNpb24gbnVtYmVyIG5vdyA4LjAuCisKKwkqIGFscGhhLmggKEFESlVTVF9DT1NUKTogTmV3IG1hY3JvLgorCSogYWxwaGEuYyAoYWxwaGFfYWRqdXN0X2Nvc3QpOiBOZXcgZnVuY3Rpb24uCisJKiBhbHBoYS5tZDogQWRqdXN0IGZ1bmN0aW9uIHVuaXQgZGVsYXlzIGFuZCBtb3JlIHByZWNpc2VseQorCWRlc2NyaWJlIGZ1bmN0aW9uIHVuaXRzLgorCQorCSogYWxwaGEuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQWRkIG5ldyBsZXR0ZXJzIGBPJyBhbmQgYFAnLgorCSogYWxwaGEuYyAocHJpbnRfb3BlcmFuZCwgY2FzZSAnUCcpOiBOZXcgY2FzZS4KKwkqIGFscGhhLm1kIChhc2hsZGkzKTogU3BlY2lhbC1jYXNlIHNoaWZ0cyBieSAxLCAyLCBhbmQgMyBiaXRzIHRvCisJdXNlIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zLgorCUFkZCBwYXR0ZXJuIGZvciBzaWduLWV4dGVuZGluZyBzaGlmdHMgYnkgMSwgMiwgYW5kIDMgYml0cy4KKworCSogYWxwaGEuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogVXNlIFBtb2RlIHdoZW4gYXBwcm9wcmlhdGUuCisJKEZVTkNUSU9OX01PREUpOiBVc2UgUG1vZGUuCisKKwkqIGFscGhhLm1kIChkaXYvbW9kKTogSW5kaWNhdGUgdGhhdCByZWcgMjcgaXMgY2xvYmJlcmVkIHRvby4KKworCSogYWxwaGEubWQgKGNtb3YpOiBBZGQgZGVmaW5lX3NwbGl0IGZvciBpZl90aGVuX2Vsc2UvcGx1cyBjYXNlLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogUGFzcyBjb3JyZWN0IG51bWJlciBvZiBhcmdzIHRvCisJY29udmVydF90b19tb2RlLgorCisJKiBleHByLmMgKGVtaXRfYmxvY2tfbW92ZSk6IEVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSB0ZXN0IGFnYWluc3QKKwlIT1NUX0JJVFNfUEVSX1dJREVfSU5ULgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX3tiaW5vcCx1bm9wfSk6IERvbid0IG1ha2UgaW52YWxpZAorCXBhcmFkb3hpY2FsIFNVQlJFR3MuCisKKwkqIGdlbmF0dHJ0YWIuYyAoUlRMX0hBU0gsIGF0dHJfcnR4KTogQXZvaWQgd2FybmluZ3MgYnkgY2FzdGluZworCXBvaW50ZXJzIHRvIEhPU1RfV0lERV9JTlQgaW5zdGVhZCBvZiBpbnQuCisKKworU2F0IEF1ZyAyOSAxNTozNTo1OCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBOZXcgdGFibGUuCisJKG1haW4pOiBSZWNvZ25pemUgYWxsIGxhbmd1YWdlLWRlcGVuZGVudCBvcHRpb25zIG9mIGFueSBsYW5ndWFnZQorCWFuZCBhbHdheXMgdHJlYXQgdGhlbSBhcyBsYW5ndWFnZS1zcGVjaWZpYyBhbmQgdmFsaWQuCisKKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiAtZm5vdHJhZGl0aW9uYWwgcmVhbGx5IHVuZG9lcworCS1mdHJhZGl0aW9uYWwuICBIYW5kbGUgLWZuby10cmFkaXRpb25hbCBhbHNvLgorCitTYXQgQXVnIDI5IDAwOjM0OjAxIDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9yZWdfbGlmZSk6IE1hcmsgYW4gdW51c2VkIHJlZyBhcyBzdWNoLCBldmVuCisJaWYgaXQgYXBwZWFycyBpbiBTRVRfU1JDLgorCitGcmkgQXVnIDI4IDE3OjQwOjQ5IDE5OTIgIEpvaG4gRiBDYXJyICAoamZjIGF0IEF0aGVuYS5NSVQuRURVKQorCisJKiB0cmVlLmMgKGNoYWlub24pOiBDaGVjayBmb3Igb3AyIGJlaW5nIHRoZSBsYXN0IGVsdCBvZiB0aGUgY2hhaW4uCisKK0ZyaSBBdWcgMjggMTM6MjY6NTYgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogY2NjcC5jIChkb19wcmFnbWEpOiBVc2UgcmluZGV4LCBub3Qgc3RycmNoci4KKworCSogdHJlZS5oIChCTE9DS19FTkRfTk9URSk6ICBNYWNybyBkZWZpbml0aW9uIGFkZGVkLgorCShzdHJ1Y3QgdHJlZV9ibG9jayk6ICBgZW5kX25vdGUnIGZpZWxkIGFkZGVkLgorCSogc3RtdC5jIChsYXN0X2Jsb2NrX2VuZF9ub3RlKTogIE5ldyB2YXJpYWJsZS4KKwkocmVtZW1iZXJfZW5kX25vdGUpOiAgTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfZW5kX2JpbmRpbmdzKTogU2F2ZSBOT1RFX0lOU05fQkxPQ0tfRU5EIGluIGxhc3RfYmxvY2tfZW5kX25vdGUuCisJKiBjLWRlY2wuYywgY3AtZGVjbC5jIChwb3BsZXZlbCk6ICBDYWxsIGByZW1lbWJlcl9lbmRfbm90ZScgZm9yIGVhY2gKKwluZXdseSBjcmVhdGVkIEJMT0NLIG5vZGUuCisJKiBpbnRlZ3JhdGUuYyAoYWRqdXN0X2NvcGllZF9kZWNsX3RyZWUpOiAgTmV3IGZ1bmN0aW9uLgorCShzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6ICBXaGVuIG1ha2luZyBjb3BpZXMgb2YgTk9URV9JTlNOX0JMT0NLX0VORAorCW5vdGVzLCBzdGFzaCBhICJmb3J3YXJkaW5nIiBwb2ludGVyIGluIHRoZSBvcmlnaW5hbCB0byBwb2ludCB0byB0aGUKKwljb3B5LiAgQWxzbywgd2hlbiBhbGwgQkxPQ0tzICYgaW5zbnMgZm9yIGEgZnVuY3Rpb24gaGF2ZSBiZWVuIGNvcGllZCwKKwljYWxsIGBhZGp1c3RfY29waWVkX2RlY2xfdHJlZScgdG8gZml4dXAgdGhlIGVuZF9ub3RlIHBvaW50ZXJzIGluIHRoZQorCWNvcGllZCBCTE9DS3MuCisKK0ZyaSBBdWcgMjggMTM6MjU6NTkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGRvX3ByYWdtYSk6IEluIHByZXYuIGNoYW5nZSwgdXNlIFVfQ0hBUiAqLCBub3QgY2hhciAqLgorCitGcmkgQXVnIDI4IDA5OjExOjU2IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmggKEFESlVTVF9DT1NUKTogQWRkIGRlZmluaXRpb24uCisKK1RodSBBdWcgMjcgMTg6Mjc6MDIgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgc2luIGFuZCBjb3MgYXMgYnVpbHQtaW4KKwlmdW5jdGlvbnMuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogTGlrZXdpc2UuCisKKwkqIGV4cHIuaCAoc2luX29wdGFiLGNvc19vcHRhYik6IERlY2xhcmUgb3B0YWJzIGZvciBzaW4gYW5kIGNvcy4KKwkqIG9wdGFicy5jIChzaW5fb3B0YWIsY29zX29wdGFiKTogRGVmaW5lIHRoZW0uCisJKGluaXRfb3B0YWJzKTogSW5pdGlhbGl6ZSB0aGVtLgorCisJKiB0cmVlLmggKEJVSUxUX0lOX1NJTixCVUlMVF9JTl9DT1MpOiBOZXcgYnVpbHRpbiBjb2Rlcy4KKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9ub3RlX2lmX2RlYWQpOiBEZWxldGUgZnVuY3Rpb24uCisJKHJlY29yZF9yZWdfbGlmZV9wYXQpOiBSZXdyaXRlIHRvIGhhbmRsZSBhbnkgc29ydCBvZiBwYXR0ZXJuLgorCShyZWNvcmRfcmVnX2xpZmUpOiBDaGFuZ2UgaW50ZXJmYWNlIHRvIHJlY29yZF9yZWdfbGlmZV9wYXQuCisKKwkoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBEb24ndCBhc3N1bWUgdGhhdCBNT0RFX0ZMT0FUIHZhbHVlcyBhcmUKKwlhbHdheXMgcmV0dXJuZWQgaW4gYSBmbG9hdCByZWcuCisKKwkoc3Vic3Rfc3RhY2tfcmVnc19wYXQpOiBBZGQgc3VwcG9ydCBmb3Igc2luIGFuZCBjb3MgaW5zbnMuCisKKwkqIGkzODYuYyAoYWxsIGdlbl9ydHggKENPTlNUX0lOVCkgcmVmZXJlbmNlcyk6IFVzZSBHRU5fSU5UIHRvCisJZ2VuZXJhdGUgY29uc3RfaW50IHJ0eC4KKwkobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IFBhc3MgTlVMTF9SVFggaW5zdGVhZCBvZiAiMCIgYXMgcG9pbnRlci4KKworCSogaTM4Ni5tZCAoYWxsIHBhdHRlcm5zKTogVXNlIEdFTl9JTlQgaW5zdGVhZCBvZiBnZW5fcnR4IHRvIGdldAorCWNvbnN0X2ludHMuCisJQXZvaWQgZG91YmxlLW5lZ2F0aXZlICIhIE5PTl8qIiBjb25zdHJ1Y3RzIGZvciBjbGFyaXR5LgorCVBhc3MgTlVMTF9QVFIgYXMgbnVsbCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiAwLgorCisJKHNxcnRNMik6IFBhdHRlcm5zIGFyZSBvbmx5IHZhbGlkIGlmIElFRUUgRlAgb3IgLWZmYXN0LW1hdGguCisJKHNpbk0yLGNvc00yKTogTmV3IHBhdHRlcm5zLgorCSh6ZXJvX2V4dHJhY3QgdGVzdCk6IE5ldyBwYXR0ZXJuLgorCShtb3ZzdHJzaSk6IFJld3JpdGUgZXhwYW5kZXIgdG8gaGFuZGxlIG9wZXJhbmRzIGNvcnJlY3RseS4KKworVGh1IEF1ZyAyNyAxNjo1ODowOSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZ2VuYXR0cnRhYi5jIChNQVhfRElHSVRTKTogTmV3IG1hY3JvIHRvIGdhdWdlIGhvdyBtdWNoIHNwYWNlIHdlCisJbmVlZCB0byByZXNlcnZlIHdoZW4gcHJpbnRpbmcgaW50ZWdlcnMuCisJKGV4cGFuZF9kZWxheXMpOiBVc2Ugc2l6ZW9mIGFuZCBNQVhfRElHSVRTIHRvIHByb3Blcmx5IHNpemUgdGhlCisJc3RyaW5ncyB3aGVuIGNhbGxpbmcgYXR0cl9wcmludGYuCisJKGV4cGFuZF91bml0cyk6IERpdHRvLgorCShlbmNvZGVfdW5pdHNfbWFzayk6IERpdHRvLgorCShtYWtlX251bWVyaWNfdmFsdWUpOiBEaXR0by4KKwkob2JhbGxvYyk6IE5ldyBtYWNybywgdG8gYWxsb2NhdGUgZnJvbSB0aGUgaGFzaF9vYnN0YWNrLgorCShjb252ZXJ0X2NvbnN0X3N5bWJvbF9yZWYpOiBDYWxsIG9iYWxsb2MgaW5zdGVhZCBvZiB4bWFsbG9jLgorCShnZXRfYXR0cl92YWx1ZSk6IERpdHRvLgorCShmaWxsX2F0dHIpOiBEaXR0by4KKwkobWFrZV9sZW5ndGhfYXR0cnMpOiBEaXR0by4KKwkoZ2VuX2F0dHIpOiBEaXR0by4KKwkoZ2VuX2luc24pOiBEaXR0by4KKwkoZ2VuX2RlbGF5KTogRGl0dG8uCisJKGdlbl91bml0KTogRGl0dG8uCisJKGZpbmRfYXR0cik6IERpdHRvLgorCShtYWluKTogRGl0dG8uCisKK1RodSBBdWcgMjcgMTQ6NDc6MTYgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1kZWNsLmMgKGN1cmVudF9ibG9jaywgc3RydWN0IGJpbmRpbmdfbGV2ZWwsIHBvcGxldmVsKTogQ29weQorCVR1ZSBBdWcgMjUgMTY6Mjk6NDcgYW5kIFdlZCBBdWcgMjYgMDE6NTY6MzAgY2hhbmdlcyBpbiBjLWRlY2wuYyBieQorCXJtcy4KKworVGh1IEF1ZyAyNyAwMTozMjoxMSAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogYy1sZXguYywgY3AtbGV4LmMgKHJlYWRlc2NhcGUpOiBERUwgaXNuJ3QgcHJpbnRhYmxlLgorCSogYy10eXBlY2suYyAoY2hlY2tfZm9ybWF0KTogTGlrZXdpc2UuCisKK1dlZCBBdWcgMjYgMjA6NDI6MzYgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWxleC5jIChyZWFkZXNjYXBlKTogRm9yIFx4LCBkb24ndCBpbmNsdWRlIGxlYWRpbmcgMCdzIGluIGNvdW50LgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBGaXggdHlwZSBvZiBfX2J1aWx0aW5fY29uc3RhbnRfcC4KKworCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBXaGVuIHRyeWluZyBtb3ZzdHJNTSwgY3Z0IHNpemUgdG8gbW9kZSBNTS4KKworCSogYy1wYXJzZS55IChzdG10KTogRm9yIGNvbXB1dGVkIGdvdG8sIGNvbnZlcnQgYXJnIHRvIHZvaWQgKi4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogRG8gQSBvcCBDMSA/IEEgOiBDMiBvcHQgb25seSBmb3IgSU5URUdFUl9UWVBFcy4KKworV2VkIEF1ZyAyNiAyMDoxOTo1NiAxOTkyICBNaWtlIFN0dW1wICAobXJzQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogY3AtZGVjbC5jIChpbnNlcnRfYmxvY2ssIGRlbGV0ZV9ibG9jayk6IE5ldyBmdW5jdGlvbnMuCisJKiBjcC1wYXJzZS55IChwcmltYXJ5LCB1c2luZyBjb21wc3RtdCk6IENhbGwgZGVsZXRlX2Jsb2NrIGluc3RlYWQKKwlvZiBjbGVhcmluZyBUUkVFX1VTRUQuCisKKwkxMXRoIEN5Z251czwtLT5GU0YgbWVyZ2UuCisKKwlXZWQgQXVnIDI2IDEyOjAyOjQxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogIERvbid0IGNvcmUgZHVtcCB3aGVuIGEgY29udmVyc2lvbiBpcworCWFtYmlndW91cy4KKworCVR1ZSBBdWcgMjUgMTY6MzI6NDIgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChidWlsZF9uZXcpLCBjcC10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogSGFuZGxlIGBgbmV3CisJdHlwZSAoIC4uLiApJycgYmV0dGVyLiAgRGVmYXVsdCBjb25zdHJ1Y3RvcnMgYW5kIGJldHRlciBlcnJvcgorCWNoZWNraW5nLgorCisJVHVlIEF1ZyAyNSAwMToyMTo0OCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGZpbmlzaF9maWxlKTogIE1hcmsgIiBAJSQjQCEiIGFzIGJlaW5nIGludGVybmFsLgorCisJTW9uIEF1ZyAyNCAxNjo0MDoxNSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoY2hlY2tfbmV3bGluZSk6IEZvciBgI3ByYWdtYSBpbXBsZW1lbnRhdGlvbicsIHVzZQorCXN0cmNtcCB0byBjaGVjayBpZiBpdCB3YXMgZG9uZSBhdCB0aGUgdG9wIGxldmVsLCByYXRoZXIgdGhhbiByZWx5aW5nCisJb24gdGhlIHBvaW50ZXJzIGJlaW5nIHRoZSBzYW1lLgorCisJTW9uIEF1ZyAyNCAyMDo0ODoxNiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlGcmkgQXVnIDIxIDE0OjE5OjI3IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBNYXJrIHRoZSBhcnRpZmljaWFsIGB0aGlzJyBwYXJhbWV0ZXIgYXMKKwkiYXJ0aWZpY2lhbCIuCisKKwlUaHUgQXVnIDIwIDIyOjU5OjE2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3Atc3Bldy5jIChhcmJpdHJhdGVfbG9va3VwKTogTWFrZSBzdXJlIHRoZSB0eXBlIG5hbWUgaW4gYW4KKwlhcmd1bWVudCBsaXN0IGZvbGxvd2VkIGJ5ICYsIG9yICYpIGlzIHNlZW4gYXMgYSB0eXBlIG5hbWUsIGV2ZW4gd2hlbgorCXRoZXJlIGlzIGFuIGVudW1lcmF0aW9uIGNvbnN0YW50IHdpdGggdGhlIGV4YWN0IHNhbWUgbmFtZS4KKworCVRodSBBdWcgMjAgMjE6NTg6MzAgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoZ2V0X2ZpcnN0X21hdGNoaW5nX3ZpcnR1YWwpOiBEb24ndCBjb3JlIGR1bXAgd2hlbiBhCisJZGVjbGFyYXRpb24gb2YgYSBzdGF0aWMgbWVtYmVyIGlzIHNlZW4gd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgYmFzZQorCWNsYXNzIHZpcnR1YWwgZnVuY3Rpb24uCisKKwlUaHUgQXVnIDIwIDIxOjIwOjMxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBEb24ndCBjb3JlIGR1bXAgb24gcGFyc2UgZXJyb3JzLgorCisJVGh1IEF1ZyAyMCAyMDo1Mjo0MyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9jb21wb25lbnRfdHlwZV9leHByKTogRG9uJ3QgY29yZSBkdW1wIG9uIHBhcnNlCisJZXJyb3JzLgorCisJVGh1IEF1ZyAyMCAxODozMTo1OCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlNb24gQXVnIDE3IDE3OjA4OjExIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCUNvcHkgc29tZSBjaGFuZ2VzIGZyb20gdGhlIEMgZnJvbnQtZW5kOgorCisJKiBjcC10eXBlMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBXYXJuIGFib3V0IHBhcnRseSBicmFja2V0ZWQKKwlpbml0aWFsaXplcnMuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IERvbid0IHdhcm4gZm9yIGNvbXBvdW5kIGFuZAorCWNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHdoZW4gcGVkYW50aWMuICBUaGVzZSBhcmUgdmFsaWQgaW4gQU5TSSBDLgorCisJVGh1IEF1ZyAyMCAxNjoxMTo1OCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCksIGNwLXBhcnNlLnkgKGhhdmVfZXh0ZXJuX3NwZWMpOiBleHRlcm4gIkMiCisJaW50IGk7IGlzIG9ubHkgYSBkZWNsYXJhdGlvbiwgYnV0IGEgZGVmaW5pdGlvbiwgbWFrZSBpdCBzby4KKworCVRodSBBdWcgMjAgMTQ6NDY6MzkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJVGh1IEF1ZyAyMCAwMjozNjozOSAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5jZC5jb20pCisKKwkqIGNwLWxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBVc2UgREVDTF9TT1VSQ0VfTElORSA9IDAgZm9yCisJY29tcGlsZXIgZ2VuZXJhdGVkIHRoaW5ncywgbm90IERFQ0xfSUdOT1JFRF9QLgorCisJVGh1IEF1ZyAyMCAxMzoxMzo0NSAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlXZWQgQXVnIDE5IDEzOjA5OjQ1IDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFByb3BhZ2F0ZSBzb21lIGNoYW5nZXMgZnJvbSB0aGUgQworCWZyb250LWVuZCB0byBkZWFsIHdpdGggdmFyaWFibGUgc2l6ZWQgYXJyYXlzLgorCisJV2VkIEF1ZyAxOSAxNjo1NTo0MyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IEltcHJvdmUgd29yZGluZyBvbiBlcnJvciBtZXNzYWdlLgorCSogY3AtbWV0aG9kLmMgKHR5cGVfYXNfc3RyaW5nKSwgY3AtcHQuYworCShtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpLCBjcC14cmVmLmMgKEdOVV94cmVmX2RlY2wpOiBEZWxldGUKKwlmaXJzdCBhcmd1bWVudCB0byB0eXBlX2FzX3N0cmluZyBhcyBpdCBpcyBub3QgbmVlZGVkIGFueW1vcmUuCisKKwlXZWQgQXVnIDE5IDE1OjI5OjAyIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVdlZCBBdWcgMTkgMTM6MDk6NDUgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjcC1kZWNsLmMgKGtlcHRfbGV2ZWxfcCk6IFVwZGF0ZSBmcm9tIEMgZnJvbnRlbmQuCisKKwlXZWQgQXVnIDE5IDE0OjQ3OjA4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva3R5cGVmaWVsZCk6IE9sZCBzdHlsZSBjb252ZXJzaW9uIG9wZXJhdG9ycworCWFyZSBiZWluZyBkZXN1cHBvcnRlZC4gIENvbnZlcnNpb24gb3BlcmF0b3JzIG11Y2ggaGF2ZSBhbgorCWBvcGVyYXRvcicgaW4gZnJvbnQgb2YgdGhlbS4KKworCVdlZCBBdWcgMTkgMDE6NTc6MDQgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGlkZWFsX2NhbmRpZGF0ZSk6IEZpeCBidWcgaW50cm9kdWNlZCBvbiBKYW4gMjEKKwk3OjI0OjIxLiAgV2FybiBhYm91dCBhbWJpZ3VvdXMgZnVuY3Rpb24gY2FsbHMgd2l0aCBtdWx0aXBsZQorCXNhbWUgY29zdCBjb252ZXJzaW9ucy4KKworCVdlZCBBdWcgMTkgMDA6MDg6MTggMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tfZW51bV9kZWNscyk6ICBSZW1vdmUgaW52YWxpZCBlcnJvciBtZXNzYWdlLgorCisJTW9uIEF1ZyAxNyAxODo1OToxOCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSwgY29udmVydCwKKwlidWlsZF90eXBlX2NvbnZlcnNpb25fMSwgYnVpbGRfdHlwZV9jb252ZXJzaW9uKSwgY3AtaW5pdC5jCisJKGJ1aWxkX2R5bmFtaWNfbmV3KSwgY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByXzEsCisJY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBBbHdheXMgdXNlIGNvbnN0cnVjdG9yX25hbWUsIGFuZAorCW5ldmVyIFRZUEVfSURFTlRJRklFUiAodHlwZSkgYW5kIHNpbWlsYXIgdGhpbmdzLgorCSogY3AtaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBUcnkgVFlQRV9IQVNfQ09OU1RSVUNUT1IKKwliZWZvcmUgd2FzdGluZyB0aW1lIHRyeWluZyBidWlsZF9tZXRob2RfY2FsbC4KKwkqIGNwLXhyZWYuYzogRG9uJ3QgaW5jbHVkZSBtZW1vcnkuaC4KKworCU1vbiBBdWcgMTcgMTU6MTA6MjEgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1pbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IENoZWNrIGZvciBhbWJpZ3VvdXMKKwljb252ZXJzaW9uLiAgT25lIHRocm91Z2ggY29uc3RydWN0b3IgYW5kIHRoZSBvdGhlciB0aHJvdWdoIGEKKwl1c2VyIGRlZmluZWQgY29udmVyc2lvbiBvcGVyYXRvci4KKworCU1vbiBBdWcgMTcgMTE6NTE6MjcgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGNvbnZlcnRfaGFyc2huZXNzKTogV2hlbiBhbiBhcmd1bWVudCBpcyBULCBhIFQmCisJc2hvdWxkIGJlIGNob29zZW4gb3ZlciBhIGNvbnN0IFQmIHdoZW4gc2VsZWN0aW5nIG92ZXJsb2FkZWQKKwlmdW5jdGlvbnMuCisKKwlNb24gQXVnIDE3IDAxOjM3OjA2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFRoZSBzZWNvbmQgYXJndW1lbnQgdG8KKwlvcGVyYXRvciBkZWxldGUgaXMgc29tZXRpbWVzIG1hZ2ljYWxseSBkZWxldGVkLgorCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZywgZ3Jva2ZuZGVjbCk6IEdsb2JhbAorCW9wZXJhdG9yIGRlbGV0ZSBuZXZlciBoYXMgdHdvIGFyZ3VtZW50cy4KKworCVdlZCBBdWcgIDUgMTg6NTQ6MTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KSwgY3AtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKToKKwlNYWtlIHN1cmUgVkZJRUxEX0JBU0VzIGFyZSBhbGlnbmVkLiAgVGhpcyBmaXhlcyBhIHJlYWxseQorCWFubm95aW5nIHByb2JsZW0gdGhhdCBjYXVzZXMgY29kZSB0aGF0IHVzZXMgY29tcGxleAorCWluaGVyaXRhbmNlIGhpZXJhcmNoaWVzIHRoYXQgaGF2ZSB2aXJ0dWFsIGJhc2VzIHRvIGdldCBhCisJc2VnbWVudGF0aW9uIGZhdWx0LgorCisJV2VkIEF1ZyAgNSAxMjozNTowNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlXZWQgQXVnICA1IDA4OjEwOjM0IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBjcC10cmVlLmMgKF9fZXByaW50Zik6IGBsaW5lJyBpcyB1bnNpZ25lZC4KKwkqIGNwLWxleC5jOiBJbmNsdWRlIHN0ZGxpYi5oIGFuZCBsb2NhbGUuaCBpZiBuZWVkZWQuCisJKiBjcC10eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IFVzZSBERUNMX0VYVEVSTkFMIG5vdAorCVRSRUVfRVhURVJOQUwuCisKKwlXZWQgQXVnICA1IDAzOjIwOjA3IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogQ2hlY2sgdG8gbWFrZSBzdXJlCisJb3BlcmF0b3IgZGVsZXRlIGlzIG5vdCBvdmVybG9hZGVkLgorCSogY3AtZGVjbC5jIChncm9rZm5kZWNsKTogQ2hlY2sgdG8gbWFrZSBzdXJlIG9wZXJhdG9yIGRlbGV0ZQorCWlzIGRlY2xhcmVkIHByb3Blcmx5LgorCisJVHVlIEF1ZyAgNCAxNjo1MjoyOCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlNb24gQXVnICAzIDIyOjU1OjA0IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTWFrZSBzdXJlIGNvbnN0IGFuZCB2b2xhdGlsZSBnZXQKKwlwdXQgb24gdGhlIHR5cGUgYnVpbHQgd2hlbiBidWlsZGluZyByZWZlcmVuY2UgdHlwZXMuCisJKiBjcC1wYXJzZS55IChhdHRyaWIpOiAgdHJlZV9jb25zIHRha2VzIHRocmVlIGFyZ3VtZW50cywgbm90CisJdHdvLgorCSogY3AtdHJlZS5oOiAgQWRkIGhhc2hfY2hhaW5vbiwgYnVpbGRfdmlydHVhbF9pbml0LAorCWJ1aWxkX3ZiYXNlX2RlbGV0ZSwgYnVpbGRfdmJhc2VfdnRhYmxlc19pbml0LgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByXzEuIGJ1aWxkX21vZGlmeV9leHByKToKKwlidWlsZF91bmFyeV9vcCB0YWtlcyB0aHJlZSBhcmd1bWVudHMsIG5vdCB0d28uCisJCisJVHVlIEF1ZyAgNCAxNjowNzo1NyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlTYXQgQXVnICAxIDE2OjUyOjIwIDE5OTIgIEpvaG4gQ2FyciAgKGpmY0BBdGhlbmEuTUlULkVEVSkKKworCSogY3AtZGVjbC5jICgpOiAgTWFrZSBzdXJlIHRoZSBiYXNlIHR5cGUgb2YgYW4gQVJSQVlfVFlQRSBpcworCWxheWVkb3V0IGJlZm9yZSB1c2luZyBpdC4KKworV2VkIEF1ZyAyNiAxNzowNDo0NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuaCAoY3VycmVudF9ibG9jayk6IERlY2xhcmVkLgorCitXZWQgQXVnIDI2IDE1OjQyOjExIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCU1ham9yIHJld29yayB0byBoYXZlIGNhbGxlci1zYXZlcyBlbWl0IGxvYWQvc3RvcmUgZG91YmxlIGluc25zIHdoZW4KKwlwb3NzaWJsZSBhbmQgdG8gYXZvaWQgdXNlbGVzcyByZXNhdmluZyBvZiByZWdpc3RlcnMgcmVzdG9yZWQgZm9yCisJc291cmNlIGFjY2Vzc2VzIG9ubHkuCisJKiBjYWxsZXItc2F2ZS5jICh0b3BsZXZlbCk6IEFsbCBhcnJheXMgYXJlIG11bHRpLWRpbWVuc2lvbmFsIHRvCisJaG9sZCBpbmZvcm1hdGlvbiBmb3IgbXVsdGlwbGUgc2F2ZS9yZXN0b3JlIGluc25zLiAgTmV3IHZhcmlhYmxlCisJaGFyZF9yZWdzX25lZWRfcmVzdG9yZS4KKwkoY2hvb3NlX2hhcmRfcmVnX21vZGUpOiBOZXcgYXJndW1lbnQgYG5yZWdzJyBpbmRpY2F0aW5nIGhvdyBtYW55CisJaGFyZCByZWdpc3RlcnMgYXJlIGRlc2lyZWQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCShpbml0X2NhbGxlcl9zYXZlKTogQ2hhbmdlIGluaXRpYWxpemF0aW9uIHRvIGhhbmRsZSBtdWx0aXBsZQorCXJlZ2lzdGVyIHNhdmVzLiAgQSBjYWxsLXVzZWQgcmVnaXN0ZXIgY2FuIG5vdCBiZSBsaXZlIGFjcm9zcworCWlmIHdlIGNhbiBub3QgZmluZCBhIHNpbmdsZSByZWdpc3RlciBtb2RlIHRvIHNhdmUgaXQgaW4uCisJKG11bHRpcGxlIHJlZ2lzdGVyIHNhdmVzIGFyZSBvcHRpb25hbCkKKwkoaW5pdF9zYXZlX2FyZWFzKTogQ2hhbmdlIGluaXRpYWxpemF0aW9uIG9mIHJlZ25vX3NhdmVfbWVtIHRvCisJaGFuZGxlIG11bHRpcGxlIHJlZ2lzdGVyIHNhdmVzLgorCShzZXR1cF9zYXZlX2FyZWFzKTogQWxsb2NhdGUgc3BhY2UgZm9yIGNvbnNlY3V0aXZlIGhhcmQgcmVnaXN0ZXJzCisJaW4gYWxpZ25lZCBjb25zZWN1dGl2ZSBtZW1vcnkgbG9jYXRpb25zLiAgIFdoZW4gYWxsb2NhdGluZyBzcGFjZQorCWZvciBjb25zZWN1dGl2ZSBoYXJkIHJlZ2lzdGVycywgYWxzbyBpbml0aWFsaXplIHJlZ25vX3NhdmVfbWVtCisJZm9yIGVhY2ggaGFyZCByZWdpc3RlciBzdG9yZWQgYXMgYSBzaW5nbGUgd29yZC4KKwkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogSW5pdGlhbGl6ZSBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlLgorCVNldCBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlIHRvIGhhcmRfcmVnc19zYXZlZCBhZnRlciBjcm9zc2luZworCWEgY2FsbC4gIEFsc28gcmVjb21wdXRlIG5fcmVnc19zYXZlZC4gIEF0IHRoZSBlbmQgb2YgYSBiYXNpYyBibG9jaworCXdlIG5lZWQgb25seSByZXN0b3JlIHJlZ2lzdGVycyBpbiBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlLgorCShzZXRfcmVnX2xpdmUsIGNsZWFyX3JlZ19saXZlKTogRG8gdGhlIHJpZ2h0IHRoaW5nIGZvciAKKwloYXJkX3JlZ3NfbmVlZF9yZXN0b3JlIGFuZCBoYXJkX3JlZ3Nfc2F2ZWQuCisJKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogSnVzdCByZXR1cm4gaWYgWCBpcyBhIGNsb2JiZXIuCisJVGVzdCBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlIHRvIGRldGVybWluZSB3aGVuIHRvIHJlc3RvcmUgYSBoYXJkCisJcmVnaXN0ZXIgZnJvbSB0aGUgc2F2ZSBhcmVhLgorCShpbnNlcnRfc2F2ZV9yZXN0b3JlKTogTm93IHJldHVybnMgdGhlIG51bWJlciBvZiBleHRyYSByZWdpc3RlcnMKKwlzYXZlZC9yZXN0b3JlZC4gIE5ldyBhcmd1bWVudCBgbWF4cmVzdG9yZScgd2hpY2ggY29uc3RyYWlucyBob3cKKwltYW55IGhhcmQgcmVnaXN0ZXJzIHNob3VsZCBiZSByZXN0b3JlZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJRG8gc3RvcmVzIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyB3aXRoIGRvdWJsZSBzdG9yZSBpbnNucyBpZgorCXBvc3NpYmxlLiAgRWxzZSBkbyB0aGVtIHdpdGggc2luZ2xlIHdvcmQgaW5zbnMuIExpa2V3aXNlIGZvcgorCWxvYWRzLCBleGNlcHQgY29uc3RyYWluZWQgYnkgbWF4cmVzdG9yZS4gIFNldCBoYXJkX3JlZ3Nfc2F2ZWQKKwlhbmQgaGFyZF9yZWdzX25lZWRfcmVzdG9yZSBhcHByb3ByaWF0ZWx5IHRvIG1pbmltaXplIHVzZWxlc3MKKwlzYXZlcyBpbnRvIHRoZSBzYXZlIGFyZWEuICBUZXN0IGFnYWluc3QJaGFyZF9yZWdzX25lZWRfcmVzdG9yZQorCXdoZW4gdHJ5aW5nIHRvIHJlc3RvcmUgbXVsdGlwbGUgcmVncyBhbmQgc2ltaWxhcmx5IHRlc3QgYWdhaW5zdAorCWhhcmRfcmVnc19zYXZlZCB3aGVuIHN0b3JpbmcgbXVsdGlwbGUgcmVncy4gCisKKworV2VkIEF1ZyAyNiAxNDoyNDoyOCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChMSU5LX1NQRUMpOiBQYXNzIC1zaGFyZWQsIC1ub25fc2hhcmVkIG9uIHRvIGxpbmtlci4KKwkqIG1pcHMtYnNkLmggKExJTktfU1BFQyk6IERpdHRvLgorCSogbWlwcy1uNS5oIChMSU5LX1NQRUMpOiBEaXR0by4KKwkqIG1pcHMtc3ZyNC5oIChMSU5LX1NQRUMpOiBEaXR0by4KKwkqIG1pcHMtc3lzdi5oIChMSU5LX1NQRUMpOiBEaXR0by4KKwkqIGlyaXMuaCAoTElOS19TUEVDKTogRGl0dG8uCisJKiBkZWMtb3NmMS5oIChMSU5LX1NQRUMpOiBEaXR0by4KKworCSogZGVjLW9zZjEuaCAoREVDU1RBVElPTik6IERvbid0IGRlZmluZSwgc2luY2UgZGVjc3RhdG4uaCB3aGljaCBpcworCWluY2x1ZGVkIGRlZmluZXMgaXQuCisJKE9CSkVDVF9GSUxFX0NPRkYpOiBVbmRlZmluZSwgc2luY2UgdGhlIERFQyBPU0YvMSBsZGZjbiBkb2Vzbid0CisJbG9vayBsaWtlIHRoZSBjb2ZmIHZlcnNpb24uCisKKwkqIGRlY3N0YXRuLmggKExJTktfU1BFQyk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCisKK1dlZCBBdWcgMjYgMTM6NTY6MDggMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIHJlb3JnLmM6ICBFbmhhbmNlIHRvIGZpbGwgdGhlIGxhc3QgZGVsYXkgc2xvdCBvZiBhIGNhbGwgd2l0aCBhbgorCXVuY29uZGl0aW9uYWwganVtcC4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBMb29rIGZvciB0aGUgY2FzZSBvZiBhIGNhbGwvYnJhbmNoCisJZmlyc3QuICBJZiB0aGlzIGFwcGxpZXMsIHJlY29yZCB0aGUganVtcCBhcyBgbGFzdF9kZWxheV9pbnNuJy4KKwlMYXRlciwgZG9uJ3QgbG9vayBmb3IgYWRkaXRpb25hbCBkZWxheSBpbnNucyBpZiB0aGUgbGFzdCBvbmUgaGFzCisJYWxyZWF5IGJlZW4gZmlsbGVkLiAKKwkobWFya190YXJnZXRfbGl2ZV9yZWdzKTogQSBzZXF1ZW5jZSBtYXkgZW5kIGluIGFuIHVuY29uZGl0aW9uYWwKKwlicmFuY2guCisKKwkqIG04OGsubWQgKGRlZmluZV9mdW5jdGlvbl91bml0KTogQ29ycmVjdCBhbmQgc2ltcGxpZnkgbWVtb3J5IHVuaXQKKwlzcGVjaWZpY2F0aW9uLiAKKworV2VkIEF1ZyAyNiAwMTo1NjozMCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChwb3BsZXZlbCk6IFN0b3JlIGludG8gQkxPQ0sgaWZmIGl0IGlzIG5vbi1udWxsLgorCitUdWUgQXVnIDI1IDIzOjI0OjQ1IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc2NoZWQuYzogQWRkICNpZmRlZiBJTlNOX1NDSEVEVUxJTkcgYXJvdW5kIHZhcmlhYmxlcyBvbmx5IHVzZWQKKwlieSBzY2hlZHVsZV9pbnNucy4KKwkoSU5TTl9RVUVVRV9TSVpFKTogRGVsZXRlIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworCSogb3B0YWJzLmMsIGV4cHIuYzogUGFydGlhbGx5IHVuZG8gTWFyIDcgY2hhbmdlLiAgT25seSBjYWxsCisJZW1pdF9saWJyYXJ5X2NhbGwgd2l0aCBub19xdWV1ZSA9PSAxIGZvciBjb25zdCBmdW5jdGlvbnMuCisKKwkqIHNwYXJjLmMgKFNGX01PREVTKTogQWxsb3cgU0ltb2RlIGluIGZwIHJlZ2lzdGVycy4KKwkob3V0cHV0X2Zsb2F0c2lzZjIsIG91dHB1dF9mbG9hdHNpZGYyLCBvdXRwdXRfZmxvYXRzaXRmMik6IERlbGV0ZS4KKwkqIHNwYXJjLmg6IERlbGV0ZSBkZWNsYXJhdGlvbnMgb2YgdGhlIGFib3ZlIDMgZnVuY3Rpb25zLgorCSogc3BhcmMubWQgKGZsb2F0KiwgZml4Kik6IFJld3JpdGUgdG8gbWF0Y2ggaGFyZHdhcmU7IHRha2UvcHV0CisJaW50ZWdlciBpbnB1dC9vdXRwdXQgZnJvbS90byBmcCByZWdpc3RlciBpbnN0ZWFkIG9mIG1lbW9yeSBvcgorCWdlbmVyYWwgcmVnaXN0ZXIuICBEZWxldGUgNiBub3cgb2Jzb2xldGUgY29tYmluZXIgcGF0dGVybnMuCisKK1R1ZSBBdWcgMjUgMTY6NDA6MTUgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChkb19wcmFnbWEpOiBXYXJuIGlmIGAjcHJhZ21hIGltcGxlbWVudGF0aW9uICJmb28uaCInIGlzCisJaW52b2tlZAlhZnRlciAiZm9vLmgiIGhhcyBiZWVuIGluY2x1ZGVkLgorCitUdWUgQXVnIDI1IDE2OjI5OjQ3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChzdHJ1Y3QgZ290b19maXh1cCk6IE5ldyBmaWVsZCBjb250ZXh0LgorCShmaXh1cF9jbGVhbnVwcyk6IEZ1bmN0aW9uIGRlbGV0ZWQuCisJKGZpeHVwX2dvdG9zKTogUHV0IHRoZSBmaXh1cCBpbiBhIGJsb2NrLCBhbmQgcHV0IHRoYXQgYmxvY2sKKwlpbnRvIGl0cyBwcm9wZXIgcGxhY2UuICBVc2Ugc2VxdWVuY2VzLCBub3QgcmVvcmRlcl9pbnNucy4KKworCSogYy1kZWNsLmMgKGN1cnJlbnRfYmxvY2spOiBOZXcgZnVuY3Rpb24uCisJKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogTmV3IGZpZWxkIHRoaXNfYmxvY2suCisJKHBvcGxldmVsKTogVXNlIHRoaXNfYmxvY2sgaWYgbm9uemVybywgcmF0aGVyIHRoYW4gbWFraW5nIG5ldyBCTE9DSy4KKworCSogc2NoZWQuYyAoSU5TTl9RVUVVRV9TSVpFKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworVHVlIEF1ZyAyNSAxNToxOToyNiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBBZGQgYSB2aXJ0dWFsIGN5Y2xlIGNvdW50ZXIgQ0xPQ0suCisJUGFzcyBDTE9DSyB0byBzY2hlZHVsZV9pbnNuLgkgICAgCisJQ29tcHV0ZSB0aGUgdGFpbCBpbiB0aGUgc2NoZWR1bGluZyBsb29wLCBub3QgYmVmb3JlIGl0LgorCUVuYWJsZSB0aGUgc3RhbGwgY29kZSB0aGF0IGFkdmFuY2VzIHRoZSBpbnNuIHF1ZXVlLiAgCisJU2VsZWN0IHRoZSBpbnNuIHRvIHNjaGVkdWxlIGFuZCBibG9jayBvdGhlcnMgd2l0aCBzY2hlZHVsZV9zZWxlY3QuCisJKGFkanVzdF9wcmlvcml0eSk6IFJlbmFtZWQgZnJvbSBsYXVuY2hfbGluay4KKwkoc2NoZWR1bGVfaW5zbik6IFJlbmFtZWQgZnJvbSBsYXVuY2hfbGlua3MuCisKKwkqIGdlbmF0dHJ0YWIuYyAoc3RydWN0IGF0dHJfZGVzYyk6IEFkZCB1bnNpZ25lZF9wIGZpZWxkLgorCShzdHJ1Y3QgZnVuY3Rpb25fdW5pdF9vcCk6IEFkZCBpc3N1ZV9kZWxheSwgY29uZmxpY3RfZXhwLCBhbmQKKwlpc3N1ZV9leHAgZmllbGRzLiAgRHJvcCBidXN5ZXhwIGZpZWxkLgorCShzdHJ1Y3QgZnVuY3Rpb25fdW5pdCk6IEFkZCBuZWVkc19ibG9ja2FnZV9mdW5jdGlvbiwKKwluZWVkc19yYW5nZV9mdW5jdGlvbiwgaXNzdWVfZGVsYXksIGFuZCBtYXhfYmxvY2thZ2UgZmllbGRzLiAgRHJvcAorCWNvc3RleHAsIGFuZCBidXN5IGRlbGF5IGZpZWxkcy4KKwkoZW51bSBvcGVyYXRvcik6IEFkZCBQT1NfTUlOVVNfT1AsIEVRX09QLCBNSU5fT1AsIFJBTkdFX09QLgorCShvcGVyYXRlX2V4cCk6IEltcGxlbWVudCBuZXcgb3BzLgorCShtYWtlX2ludGVybmFsX2F0dHIpOiBTZXQgdW5zaWduZWRfcCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgU1BFQ0lBTC4KKwkod3JpdGVfYXR0cl9nZXQpOiBGdW5jdGlvbiBpcyB1bnNpZ25lZCB3aGVuIHVuc2lnbmVkX3AgaXMgdHJ1ZS4KKwkod3JpdGVfYXR0cl92YWx1ZXEpOiBXcml0ZSBoZXggdmFsdWUgb2YgbGFyZ2UgY29uc3RhbnRzIGluIGEgY29tbWVudC4KKwkoc2ltcGxpZnlfYnlfZXhwbG9kaW5nKTogQ2hlY2sgZm9yIEVYUCBoYXZpbmcgbm8gRVFfQVRUUiBleHByZXNzaW9ucworCWFuZCBmb3IgYWxsIHZhbHVlcyBhcyB0aGUgZGVmYXVsdC4KKwkoZmluZF9hbmRfbWFya191c2VkX2F0dHJpYnV0ZXMpOiBBZGQgVEVSTVMgYW5kIE5URVJNUyBwYXJhbWV0ZXJzLgorCShtYXhfYXR0cl92YWx1ZSk6IEFsbG93IElGX1RIRU5fRUxTRS4KKwkoc2ltcGxpZnlfa25vd2luZywgd3JpdGVfY29tcGxleF9mdW5jdGlvbiwgZXh0ZW5kX3JhbmdlKTogTmV3CisJZnVuY3Rpb25zLgorCShnZW5fdW5pdCk6IFVzZSBsb2NhbCB2YXJpYWJsZXMgdG8gbmFtZSB0aGUgZmllbGRzLiAgQ2hhbmdlIHRoZQorCW1lYW5pbmcgb2YgYnVzeS1kZWxheSB0byBpc3N1ZS1kZWxheS4KKwkoZXhwYW5kX3VuaXRzKTogQ29tcHV0ZSBpc3N1ZV9leHAuICBXcml0ZSBhdHRyaWJ1dGVzIGZvciBjb21wdXRpbmcKKwlgPG5hbWU+X3VuaXRfYmxvY2thZ2UnIGFuZCBgPG5hbWU+X3VuaXRfYmxvY2thZ2VfcmFuZ2UnIGZ1bmN0aW9ucy4KKwlDb21wdXRlIG1heF9ibG9ja2FnZSwgYW5kIHRoZSBuZWVkc18qX2Z1bmN0aW9uIHZhbHVlcy4KKwkod3JpdGVfZnVuY3Rpb25fdW5pdF9pbmZvKTogV3JpdGUgYmxvY2thZ2UgZnVuY3Rpb24gYW5kIGNvbmZsaWN0IGNvc3QKKwlmdW5jdGlvbnMgdXNpbmcgd3JpdGVfY29tcGxleF9mdW5jdGlvbi4gIFdyaXRlIG5ldyBmdW5jdGlvbl91bml0X2Rlc2MKKwlmaWVsZHMuCisJKiBnZW5hdHRyLmMgKGV4dGVuZF9yYW5nZSwgaW5pdF9yYW5nZSk6IE5ldyBmdW5jdGlvbnMuCisJKHdyaXRlX3VuaXRzKTogQWRkIGJsb2NrYWdlX2Z1bmN0aW9uLCBibG9ja2FnZV9yYW5nZV9mdW5jdGlvbiwKKwltYXhfYmxvY2thZ2UgYW5kIG1heF9pc3N1ZV9kZWxheSBmaWVsZHMgdG8gc3RydWN0IGZ1bmN0aW9uX3VuaXRfZGVzYy4KKwlEcm9wIG1heF9idXN5X2Nvc3QgZmllbGQuICBXcml0ZSAjZGVmaW5lcyBmb3IgbWluL21heCBibG9ja2FnZSwKKwlpc3N1ZSBkZWxheSwgbXVsdGlwbGljaXR5LCBhbmQgc2ltdWx0YW5laXR5IGFuZCBmb3IgQkxPQ0tBR0VfQklUUworCWFuZCBJTlNOX1FVRVVFX1NJWkUuCisJKG1haW4pOiBDb21wdXRlIHRoZSBuZXcgdmFsdWVzLgorCSogc2NoZWQuYyAoaW5zbl9xdWV1ZSk6IFVzZSBJTlNOX1FVRVVFX1NJWkUuCisJKiBydGwuZGVmIChkZWZpbmVfZnVuY3Rpb25fdW5pdCk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgorCisJKiBzY2hlZC5jIChpbnNuX3VuaXRzLCBpbnNuX2Jsb2NrYWdlLCBpbnNuX3RpY2ssIHVuaXRfbGFzdF9pbnNuLAorCXVuaXRfdGljaywgdW5pdF9uX2luc25zKTogTmV3IHZhcmlhYmxlcy4KKwkoc2NoZWR1bGVfaW5zbnMpOiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBpbnNuX3RpY2ssIGluc25fdW5pdHMsIGFuZAorCWluc25fYmxvY2thZ2UuCisJKGluc25fdW5pdCwgYmxvY2thZ2VfcmFuZ2UsIGNsZWFyX3VuaXRzLCBwcmVwYXJlX3VuaXQsIHNjaGVkdWxlX3VuaXQsCisJYWN0dWFsX2hhemFyZF90aGlzX2luc3RhbmNlLCBhY3R1YWxfaGF6YXJkLCBwb3RlbnRpYWxfaGF6YXJkLAorCXNjaGVkdWxlX3NlbGVjdCk6IE5ldyBmdW5jdGlvbnMuCisJKHNjaGVkdWxlX2Jsb2NrKTogQWRkIGRlcGVuZGVuY2llcyB0byBmb3JjZSBpbnNucyB0byByZW1haW4gaW4gb3JkZXIKKwlhdCB0aGUgZW5kIG9mIGEgYmxvY2sgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBoYXZpbmcgdGhlIHNjaGVkdWxlcgorCWlzc3VlIHRoZW0gaW4gcHJpb3JpdHkgb3JkZXIuIAorCisJKiBzY2hlZC5jIChpbnNuX2Nvc3QpOiBBZGQgTElOSyBhbmQgVVNFRCBwYXJhbWV0ZXJzLiAgQWxsIGNhbGxlcnMKKwljaGFuZ2VkLiAgU3VwcGx5IGFuIEFESlVTVF9DT1NUIGludGVyZmFjZS4KKwkoaW5zbl9jb3N0KTogTWFrZSBhIGRlcGVuZGVuY2UgZnJvbSBhIFVTRSBpbnNuIGZyZWUuCisJKHByaW9yaXR5KTogQ2xlYXIgdGhlIGxpbmsgY29zdCBhZGp1c3RtZW50IGJpdHMuCisJKiBydGwuaCAoTElOS19DT1NUX1pFUk8sIExJTktfQ09TVF9GUkVFKTogTmV3IG1hY3Jvcy4KKworCSogZ2VuYXR0cnRhYi5jIChleHBhbmRfdW5pdHMpOiBVc2UgdGhlIG5vcm1hbGl6ZWQgdmFsdWVzIG9mIHRoZQorCXVuaXQncyBDT05ERVhQIGFuZCBCVVNZRVhQLgorCisJKiBhMjlrLm1kIChkZWZpbmVfZnVuY3Rpb25fdW5pdCk6IENoYW5nZSBtZWFuaW5nIHRvIElTU1VFLURFTEFZLgorCSogaTk2MC5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBDaGFuZ2UgbWVhbmluZyB0byBJU1NVRS1ERUxBWS4KKwkqIG04OGsubWQgKHR5cGUgYXR0cmlidXRlLCBtb3ZkaSBtb3ZkZiBpbnNucyk6IEFkZCBsb2FkZC4KKwkodW5pdCBhdHRyaWJ1dGUpOiBEZWxldGUuCisJKGZ1bmN0aW9uIHVuaXRzKTogQ29ycmVjdCBzaW11bHRhbmVpdHkgdmFsdWVzLiAgQnJlYWsgb3V0CisJaW5kZXBlbmRlbnQgdW5pdHMuICBBZGQgY29uZmxpY3QgbWF0cml4IGZvciB0aGUgODgxMDAgbG9hZCBkb3VibGUuCisJKiBtaXBzLm1kIChkZWZpbmVfZnVuY3Rpb25fdW5pdCk6IENoYW5nZSBtZWFuaW5nIHRvIElTU1VFLURFTEFZLgorCSogcGEubWQgKGRlZmluZV9mdW5jdGlvbl91bml0KTogQ2hhbmdlIG1lYW5pbmcgdG8gSVNTVUUtREVMQVkuCisJKiBzcGFyYy5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBDaGFuZ2UgbWVhbmluZyB0byBJU1NVRS1ERUxBWS4KKwlNZXJnZSBGUF9NVUwsIEZQX0RJViwgYW5kIEZQX1NRUlQgaW50byBvbmUgZnVuY3Rpb24gdW5pdC4KKworCSoganVtcC5jIChkZWxldGVfY29tcHV0YXRpb24pOiBEZXJpdmVkIGZyb20gZGVsZXRlX2p1bXAuCisJKGRlbGV0ZV9qdW1wKTogVXNlIGRlbGV0ZV9jb21wdXRhdGlvbi4KKworVHVlIEF1ZyAyNSAxMzo0MjoxOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IElmIDIgY29uc2VjIGxpbmUgbm90ZXMgaGF2ZSBzYW1lIGxpbmUgbnVtLAorCWNhbiBvbWl0IG9uZS4KKworVHVlIEF1ZyAyNSAxMzozODoxOSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBTZXQgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDI0LgorCShBU01fRklOQUxfU1BFQyk6IFVzZSAlVSB0byBnZXQgdGhlIGxhc3QgZmlsZSBuYW1lIGNyZWF0ZWQgd2l0aAorCSV1LCByYXRoZXIgdGhhbiAldS4KKwkoQVJHX1BPSU5URVJfUkVHTlVNKTogVXNlIHRoZSBoYXJkd2lyZWQgcmVnaXN0ZXIgJDAgYXMgdGhlCisJYXJndW1lbnQgcG9pbnRlciwgaW5zdGVhZCBvZiB0aGUgZnJhbWUgcG9pbnRlciwgdG8gYWxsb3cgdGhlIGZyYW1lCisJcG9pbnRlciB0byBiZSB0aGUgc2FtZSBhcyB0aGUgc3RhY2sgcG9pbnRlciBhZnRlciB0aGUgaW5pdGlhbAorCXN0YWNrIGFsbG9jYXRpb25zLiAgVGhpcyBpcyB0byBhbGxvdyBHQ0MgZ2VuZXJhdGVkIGNvZGUgdG8gYmUKKwlsaW5rZWQgYWdhaW5zdCBNSVBTIHNoYXJlZCBsaWJyYXJpZXMuICBUaGUgbGlua2VyIHJlYXJyYW5nZXMgdGhlCisJY29kZSwgYW5kIG5lZWRzIHRvIGhhdmUgYSBmcmFtZSBwb2ludGVyLCBpZiB1c2VkLCB0byBiZSB0aGUgc2FtZQorCWFzIHRoZSBzdGFjay4gIFRoZSBhcmd1bWVudCBwb2ludGVyIGlzIGFsd2F5cyBlbGltaW5hdGVkIGluIGZhdm9yCisJb2YgdGhlIHN0YWNrIHBvaW50ZXIgb3IgZnJhbWUgcG9pbnRlci4KKwkoRlJBTUVfR1JPV1NfRE9XTldBUkQpOiBEb24ndCBkZWZpbmUgdGhpcyBhbnkgbW9yZS4KKwkoU1RBUlRJTkdfRlJBTUVfT0ZGU0VUKTogTG9jYWxzIHN0YXJ0IGFmdGVyIHRoZSBzdGFjayBhcmVhIHRvIHBhc3MKKwlhcmd1bWVudHMgdG8gY2FsbGVkIGZ1bmN0aW9ucy4KKwkoU1RBQ0tfRFlOQU1JQ19PRkZTRVQpOiBJZiBmdW5jdGlvbiBpcyBhIGxlYWYgZnVuY3Rpb24sIGJ1dCBjYWxscworCV9fYnVpbHRpbl9hbGxvY2EsIGFzc3VtZSBhIGRlZmF1bHQgYXJndW1lbnQgYXJlYSwgc28gdGhlIE1JUFMKKwlsaW5rZXIgZG9lc24ndCB0aGluayBhIHNlY29uZCBmcmFtZSBwb2ludGVyIGlzIGNyZWF0ZWQuCisJKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBEb24ndCBkZWZpbmUsIHNpbmNlIHdlIHVzZQorCWVsaW1pbmF0aW9uIGluc3RlYWQuCisJKEVMSU1JTkFCTEVfUkVHUyk6IERlZmluZSB0byBlbGltaW5hdGUgYm90aCB0aGUgc3RhY2sgcG9pbnRlciBhbmQKKwlmcmFtZSBwb2ludGVyLCBzaW5jZSB0aGV5IGFyZSBub3cgc2VwYXJhdGUuCisJKENBTl9FTElNSU5BVEUpOiBEaXR0by4KKwkoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBEaXR0by4KKwkoRUxJR0lCTEVfRk9SX0VQSUxPR1VFX0RFTEFZKTogRG9uJ3QgYWxsb3cgdmFyaWFibGVzIGJhc2VkIG9mZiBvZgorCXRoZSBhcmd1bWVudCBwb2ludGVyLCBpbiBhZGRpdGlvbiB0byBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlcnMuCisJKE1VU1RfU0FWRV9SRUdJU1RFUik6IEFkZCBpbiBHUF9SRUdfRklSU1QgdG8gMzEsIGluIGNhc2Ugd2UgZXZlcgorCWNoYW5nZSB0aGUgYmFzZSBvZiB0aGUgZ3AgcmVnaXN0ZXJzLgorCShNSVBTX1NUQUNLX0FMSUdOKTogVXNlIH43LCBpbnN0ZWFkIG9mIDB4ZmZmZmZmZjguCisKKwkqIG1pcHMuYyAobnVtYmVyX2Z1bmN0aW9uc19wcm9jZXNzZWQpOiBEZWxldGUgdmFyaWFibGUsIG5vYm9keQorCXVzZXMgaXQgYW55bW9yZS4KKwkobWlwc19kZWJ1Z2dlcl9vZmZzZXQpOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGZyYW1lIHBvaW50ZXIgYmVpbmcKKwl0aGUgc2FtZSBhcyB0aGUgc3RhY2sgcG9pbnRlciwgaW5zdGVhZCBvZiBiZWluZyB0aGUgc2FtZSBhcyB0aGUKKwlhcmd1bWVudCBwb2ludGVyLiAgQWJvcnQgaWYgdGhlIGFkZHJlc3MgaXMgbm90IGJhc2VkIG9uIGFueSBvZiB0aGUKKwlzdGFjaywgZnJhbWUsIG9yIGFyZ3VtZW50IHBvaW50ZXJzLgorCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBBZGQgY2hlY2tzIGZvciB0aGUgYXJnIHBvaW50ZXIgbm90IGJlaW5nCisJZWxpbWluYXRlZC4KKwkoZnVuY3Rpb25fcHJvbG9ndWUpOiBEaXR0by4KKwkobWlwc19leHBhbmRfcHJvbG9ndWUpOiBEaXR0by4KKwkoZnVuY3Rpb25fZXBpbG9ndWUpOiBEaXR0by4KKwkobWlwc19leHBhbmRfZXBpbG9ndWUpOiBEaXR0by4KKwkoZnVuY3Rpb25fZXBpbG9ndWUpOiBTdHJpcCBsZWFkaW5nICcqJyBpZiBpdCBleGlzdHMgZnJvbQorCWN1cnJlbnRfZnVuY3Rpb25fbmFtZSB3aGVuIHByaW50aW5nIHN0YXRpc3RpY3MuICBEZWxldGUgaW5jcmVtZW50CisJb2YgbnVtYmVyX2Z1bmN0aW9uc19wcm9jZXNzZWQuCisJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IERvbid0IGJhc2UgZXh0cmFfc2l6ZSBvbiB0aGUgbWFjcm8KKwlTVEFSVElOR19GUkFNRV9PRkZTRVQuICBJZiBmdW5jdGlvbiBpcyBhIGxlYWYgZnVuY3Rpb24sIGJ1dCBjYWxscworCV9fYnVpbHRpbl9hbGxvY2EsIGFsbG9jYXRlIGFuIGFyZyBhcmVhLCBzbyB0aGF0IHRoZSBNSVBTIGxpbmtlcgorCXdpbGwgbm90IGNvbXBsYWluIGFib3V0IGNyZWF0aW5nIGEgc2Vjb25kIGZyYW1lIHBvaW50ZXIuICBNb3ZlIHRoZQorCWFyZ3VtZW50IHNhdmUgYXJlYSBiZW5lYXRoIGxvY2FsIHZhcmlhYmxlcy4KKworCSogZGVjcm9zZS5oIChBU01fRklOQUxfU1BFQyk6IFVzZSAlVSB0byBnZXQgdGhlIGxhc3QgZmlsZSBuYW1lCisJY3JlYXRlZCB3aXRoICV1LCByYXRoZXIgdGhhbiAldS4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEFkZCAlVSB0byByZXR1cm4gdGhlIGxhc3QgbmFtZSBnZW5lcmF0ZWQgd2l0aAorCSV1LiAgVGhpcyBpcyBmb3IgdXNlIHdpdGggbWlwcy10ZmlsZSwgdG8gZmluZCB0aGUgZ2VuZXJhdGVkIG9iamVjdAorCWZpbGUuCisKKworTW9uIEF1ZyAyNCAxODowOTozNCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogRm9yIEFERFJfRVhQUiwganVzdCBzZXQgVFJFRV9DT05TVEFOVAorCWlmIHN0YXRpY3AsIGJ1dCBkb24ndCBjbGVhciBUUkVFX0NPTlNUQU5ULgorCitNb24gQXVnIDI0IDEzOjUyOjEzIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBEb24ndCBzZXQgdmVyYm9zZV9mbGFnIGlmIHRoZXkgbWFrZSBhCisJdHlwbyAoZS5nLiwgYC12LUUnKTsgb25seSB3aGVuIGl0J3MgZXhhY3RseSAiLXYiLgorCitNb24gQXVnIDI0IDA2OjQ5OjE2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBXaGVuIG1vdmluZyBvcGVyYXRpb24gaW5zaWRlIElGX1RIRU5fRUxTRSwKKwltYWtlIGEgbmV3IHJ0eCBpbnN0ZWFkIG9mIHVzaW5nIFNVQlNUIGR1ZSB0byBzaGFyaW5nLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBDb3JyZWN0IHRlc3QgZm9yIHNpZ24gZXh0ZW5zaW9uCisJd2hlbiB0cnlpbmcgdG8gd2lkZW4gY29tcGFyaXNvbi4KKworU3VuIEF1ZyAyMyAxODo1ODozMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEF2b2lkIHRoZSBub3JtYWwgU1RSSVBfTk9QUyBvbiBhcmcgb2YgTk9QX0VYUFIuCisKK1N1biBBdWcgMjMgMTU6MzI6MDMgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogIEdlbmVyYXRpb24gb2YgTk9URV9JTlNOX0JMT0NLX0VORAorCW1vdmVkIGRvd24gc28gdGhhdCBpdCBvY2N1cnMgYWZ0ZXIgY2FsbCB0byBgZXhwYW5kX2NsZWFudXBzJy4KKworU3VuIEF1ZyAyMyAxNjoyNDozMiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZGVjcm9zZS5oIChDUFBfU1BFQyk6IERvbid0IGRlZmluZSBzdHJjbXAgYXMgX19idWlsdGluX3N0cmNtcCBpbgorCXRoZSBjYXNlIG5laXRoZXIgLWZidWlsdGluIG5vciAtZm5vLWJ1aWx0aW4gd2VyZSBkZWZpbmVkLgorCSogaTM4NnJvc2UuaCAoQ1BQX1NQRUMpOiBEaXR0by4KKworU3VuIEF1ZyAyMyAwMjowMzo0MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGxpYmdjYzIuYyAoX19idWlsdGluX25ldyk6IENhc3QgdGhlIHJlc3VsdCBvZiBtYWxsb2MuCisKKwkqIHRvcGxldi5jOiBGaXggdHlwbyBpbiBwcmV2IGNoYW5nZS4KKworCSogYy1kZWNsLmMgKGluc2VydF9ibG9jaywgZGVsZXRlX2Jsb2NrKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGMtcGFyc2UueSAocHJpbWFyeSwgdXNpbmcgY29tcHN0bXQpOiBDYWxsIGRlbGV0ZV9ibG9jaworCWluc3RlYWQgb2YgY2xlYXJpbmcgVFJFRV9VU0VELgorCSogZXhwci5jIChleHBhbmRfZXhwcik6IEZvciBCSU5EX0VYUFIsIGNhbGwgaW5zZXJ0X2Jsb2NrIG9uIHRoZSBibG9jay4KKwkKK1NhdCBBdWcgMjIgMTQ6MTI6MDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmU6IFVzZSBhYnNvbHV0ZSBwYXRobmFtZSBpbiB2YWx1ZSBvZiBJTlNUQUxMLgorCitTYXQgQXVnIDIyIDA2OjQyOjM5IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBlbWl0LXJ0bC5jIChpbnNuX2VtaXRfb25jZSk6IFByb3ZpZGUgYSB6ZXJvIGNvbnN0YW50IGZvciBDQyBtb2Rlcy4KKworRnJpIEF1ZyAyMSAxODozMzozMCAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogQWx3YXlzIHRyeSB0byBmaWxsIGVtcHR5CisJZGVsYXkgc2xvdHMgd2l0aCBpbnNucyBmcm9tIGJleW9uZCB0aGUgZGVsYXkgaW5zbiwgZXZlbiBpZgorCW9wdGltaXplX3NraXAgd2FzIGF0dGVtcHRlZC4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBXaGVuIGZpbGxpbmcgd2l0aCBpbnNucyBmcm9tIGFmdGVyIHRoZQorCWRlbGF5IGluc24sIG1ha2Ugc3VyZSB0byBhbHdheXMgYWNjb3VudCBmb3IgdGhlIHNldHMgYW5kCisJcmVmZXJlbmNlcyBpbiB0aGUgZGVsYXkgaW5zbi4KKworRnJpIEF1ZyAyMSAxNjo0NzowNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmMgKHByaW50X29wZXJhbmQpOiBVc2Ugb3V0cHV0X29wZXJhbmRfZXJyb3IgZm9yIHVua25vd24gY29kZS4KKworCSogYy10eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IFVzZSBUUkVFX1JFQURPTkxZIGFuZAorCVRSRUVfVEhJU19WT0xBVElMRSwgbm90IFRZUEVfLi4uCisKK0ZyaSBBdWcgMjEgMTQ6MDI6MjAgMTk5MiAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiByZWxvYWQuYyAoZmluZF9kdW1teV9yZWxvYWQpOiBSZXN0b3JlIG9yaWdpbmFsIFJUWCBpbnN0ZWFkIG9mCisJcGFzc2VkIElOIHJ0eC4KKworRnJpIEF1ZyAyMSAwNzo1MzoxMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogSWYsIGUuZy4sIG11bHFpMyBkb2Vzbid0IGV4aXN0LCB0cnkKKwltdWxxaWhpMy4KKworCSogcnM2MDAwLmggKEZVTkNUSU9OX0FSRyk6IERvbid0IG1ha2UgYW4gRVhQUl9MSVNUIGlmIG1ha2luZyBhIGxpYmNhbGwuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBNb3ZlIHVwIHRlc3QgZm9yIHRvbyBtYW55IHJlc3RhcnRzLgorCUlmIHdlIHJlc3RhcnQsIGNsZWFyIE9QMF9NT0RFIHNpbmNlIHdlIGRvbid0IGtub3cgaXQuCisKK0ZyaSBBdWcgMjEgMDI6MTE6NDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChlbWl0X2luc25zX2FmdGVyKTogTmV3IGZ1bmN0aW9uLgorCitGcmkgQXVnIDIxIDAxOjUzOjA0IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKGNhbGxfdmFsdWUrMSk6IEZvciBub24tZHluYW1pYyBjYWxscywgdXNlIHRoZSAiY2FsbCIKKwlhdHRyaWJ1dGUsIHNldCBsZW5ndGggdG8gMSwgYW5kIGZpeCBvdXRwdXQgdGVtcGxhdGUgdG8gd29yaworCXByb3Blcmx5IHdpdGggZGVsYXkgc2xvdHMuCisKKwkqIHBhLm1kIChhZGRyZXNzIGFuZCB1c2VfY2FsbF9jbG9iYmVyZWQgYXR0cmlidXRlcyk6IERlbGV0ZWQsCisJdGhlc2UgYXR0cmlidXRlcyBhcmUgdXNlbGVzcy4gIEFsbCByZWZlcmVuY2VzIGRlbGV0ZWQuCisJKGNhbGwgZGVmaW5lIGRlbGF5KTogVXNlICJpbl9icmFuY2hfZGVsYXkiIGFzIHRoZSBjb25kaXRpb24gc2luY2UKKwkiY2FsbCIgZGVsYXkgc2xvdHMgYW5kIHVuY29uZGl0aW9uYWwgImJyYW5jaCIgZGVsYXkgc2xvdHMgYWxsb3cgdGhlCisJc2FtZSB0eXBlIG9mIGluc25zLiAKKwkoaW5fY2FsbF9kZWxheSBjb25kaXRpb25hbCk6IERlbGV0ZWQuCisJKGJyYW5jaCBkZWZpbmUgZGVsYXkpOiBEbyBub3QgZGVmaW5lIGFuIGFubnVsLWlmLXRydWUgZGVsYXkgc2xvdC4KKwlJdCBpcyB1c2VsZXNzIGZvciBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaC4KKwkoYWxsIGRlbGF5IGJyYW5jaCBjb25kaXRpb25hbHMpOiBNYWtlIHN1cmUgImNhbGwiLCAiZHluY2FsbCIsICJtdWx0aSIsCisJYW5kICJtaWxsaSIgaW5zbnMgYXJlIGV4cGxpY2l0bHkgZGlzYWxsb3dlZCBpbiBkZWxheSBzbG90cy4KKworCSogcGEuYyAob3V0cHV0X211bF9pbnNuKTogRGVsZXRlIG5vcCBhZnRlciBicmFuY2ggaW4gdGVtcGxhdGUsCisJY29uZGl0aW9uYWxseSBlbWl0IGEgbm9wIGlmIHRoZSBkZWxheSBzbG90IHdhcyBub3QgZmlsbGVkLiAodmlhICUjKQorCisJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBIYW5kbGUgcHJvZmlsaW5nIGluIGEgZnVuY3Rpb24KKwl3aXRob3V0IGEgZnJhbWUgcG9pbnRlci4KKworVGh1IEF1ZyAyMCAxNjoxNjo0MCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogdmEtbTg4ay5oIChfX0lOVF9WQVJBUkdTX0gpOiBEZWZpbmUgdGhpcyB0byBhdm9pZCB0cm91YmxlIG9uIERHL1VYLgorCitUaHUgQXVnIDIwIDExOjA3OjI2IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBmaW5hbC5jOiBNb3ZlIGluY2x1ZGUgb2Ygc3RkaW8uaCBiZWZvcmUgb3V0cHV0LmguCisKK1RodSBBdWcgMjAgMDE6MDg6NTUgMTk5MiAgUGF0IFJhbmtpbiAgKHJhbmtpbiBhdCBlcWwuY2FsdGVjaC5lZHUpCisKKwlTdXBwb3J0IGZvciBib290c3RyYXBwaW5nIGNwcCAmIGNjMSB3aXRoIFZBWCBDIHVuZGVyIFZNUy4KKworCSogeG0tdmF4LXZtcy5oIChVU0VfQ19BTExPQ0EsTk9fU1RBQl9IKTogRGVmaW5lIGZvciBWQVhDLgorCShiY29weSxiemVybyxiY21wLGluZGV4LHJpbmRleCk6IERlZmluZSBhcyBBTlNJL1NZU1YgY291bnRlcnBhcnRzLgorCShRU09SVF9XT1JLQVJPVU5ELCBxc29ydCk6IE5ldyBtYWNyb3MsIGZvciBhdm9pZGluZyBidWdneQorCXFzb3J0IGluIFZBWENSVEwgbGlicmFyeS4KKwkoY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcsLi4uKTogVXNlIG1hY3JvcyB0byBzaG9ydGVuCisJc2V2ZXJhbCBleHRlcm5hbCBuYW1lcyB3aGljaCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycyB0bworCWF2b2lkIHdhcm5pbmdzIGFib3V0IHRydW5jYXRpb24uCisJKHVubGluayk6IFJlbW92ZSByZWR1bmRhbnQgZGVmaW5pdGlvbi4KKwkqIHZheC5jIChub3RfcXNvcnQpOiBOZXcgZnVuY3Rpb24uCisJKiBjY2NwLmMgKHRvcGxldmVsOiBjcmVhdGVfZGVmaW5pdGlvbik6IE1vdmUgZm9yd2FyZCBkZWNsYXJhdGlvbgorCXBhc3QgdGhlIGRlZmluaXRpb24gb2Ygc3RydWN0IG1hY3JvZGVmLgorCShzdHJuY2F0KTogTmV3IGZ1bmN0aW9uLgorCShiY29weSwgYnplcm8sIGJjbXApOiBSZW1vdmUgI2lmIFZNUyBjb2RlLS1hbHdheXMgdXNlIGlubGluZSBDIGxvb3BzLgorCSogZ2VucmVjb2cuYywgcmVsb2FkMS5jOiBDb21wYXJlIGVudW1zIChwcmVkcy4gY29kZXMsIG1lbV9tb2RlKQorCWV4cGxpY2l0bHkgdG8gMCBpbiBjb25kaXRpb25hbHMgdG8gd29yay1hcm91bmQgYSBWQVhDIGJ1ZyB0aGF0CisJZGlzYWxsb3dzIGVudW0gYXMgYXJndW1lbnRzIHRvICYmIGFuZCB8fCBvcGVyYXRvcnMuCisJKiBnZXRwd2QuYyAoZ2V0cHdkKTogQWRkIGFsdGVybmF0aXZlIGRlZm4gZm9yIFZNUy4KKwkqIHRvcGxldi5jIChlbnZpcm9uKTogTWFrZSBkZWNsYXJhdGlvbiBjb25kaXRpb25hbC4KKwkobWFpbjogLWcgZGVidWdnaW5nIHNldHVwKTogR2V0IHJpZCBvZiBcIGluICNpZiBjb25kaXRpb24uCisJKiBtYWtlLWNjY3AuY29tLG1ha2UtY2MxLmNvbSAoQ0MsQ0ZMQUdTLExJQlMpOiBBZGQgY29tbWVudGVkIGNvbW1hbmQKKwl2YXJpYW50cyBmb3IgYm9vdHN0cmFwcGluZyBnY2MtY3BwIGFuZCBnY2MtY2MxIHdpdGggVkFYQy4KKwkqIG1ha2UtY2NjcC5jb20gKGFsbG9jYSk6IEJ1aWxkIGFsbG9jYS5vYmogZnJvbSBhbGxvY2EuYyBpZiBMSUJTIG5lZWRzIGl0LgorCisJTm90IHlldCBpbnN0YWxsZWQ6CisKKwkqIG1hY2htb2RlLmggKEZJTEVfVFlQRSk6IEZvciBWTVMsIG1ha2Ugc3VyZSBGSUxFX1RZUEUgaXMgbm90CisJZGVmaW5lZCBhcyBhIG1hY3JvLCBzbyB0aGF0IFZBWEMncyA8c3RkaW8uaD4gd29uJ3QgYnJlYWsgdHJlZS5oLgorCSogZ2VuZW1pdC5jIChnZW5fZXhwKTogI2lmIFZBWEMsIG91dHB1dCBhIG5ld2xpbmUgaW4gZnJvbnQgb2YKKwlnZW5fcnR4IGNhbGxzLCB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgbGluZXMgaW4gaW5zbi1lbWl0LmMuCisKK1RodSBBdWcgMjAgMTE6MzI6MTggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC10cmVlLmg6IEZpeCBpbmNvcnJlY3QgY29tbWVudCBhYm91dCAiJHRoaXMiIG5lZWRpbmcgdG8KKwliZSBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4gYW55IG90aGVyIGlkZW50aWZpZXIuCisKK1RodSBBdWcgMjAgMDU6Mzc6MDAgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5tZCAobG9hZF9tdWx0aXBsZSk6IE9wZXJhbmQgMiBzaG91bGQgYmUgYSBNQVRDSF9PUEVSQU5ELgorCShzdG9yZV9tdWx0aXBsZV97LG5vX31idWcpOiBMaWtld2lzZS4KKworIAkqIHJlb3JnLmMgKG1hcmtfc2V0X3Jlc291cmNlcyk6IEZpeCB0d28gYnVncyBpbiBsYXN0IGNoYW5nZS4KKworCSogZXhwci5jIChpbml0X2V4cHJfb25jZSk6IFNldCBkaXJlY3RfbG9hZCBhbmQgZGlyZWN0X3N0b3JlIGlmIFNPTUUKKwloYXJkIHJlZ2lzdGVyIGNhbiBiZSBsb2FkZWQgb3Igc3RvcmVkOyBub3QganVzdCBpZiB0aGUgZmlyc3Qgb25lCisJd2UgcGljayBjYW4gYmUuCisKK1RodSBBdWcgMjAgMDE6NDA6NDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMsIGVtaXQtcnRsLmMsIGZpbmFsLmMsIGdjYy5jLCBnZW5hdHRydGFiLmMsIG1pcHMtdGZpbGUuYzoKKwlQdXQgaW5jbHVkZSBvZiBzdGRpby5oIGFmdGVyIEdDQyBoZWFkZXIgZmlsZXMKKwkoZm9yIGk4NjAtc3RhcmRlbnQtc3lzdjQpLgorCSogdHJlZS5jOiBMaWtld2lzZS4KKworCSogZml4aW5jbHVkZXMgKHN0ZGlvLmgpOiBSZW5hbWUgdmFfbGlzdCB0byBfX3ZhX2xpc3RfXyB0byBjb2V4aXN0CisJd2l0aCBndmFyYXJncy5oLgorCitXZWQgQXVnIDE5IDIxOjA2OjQ5IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChmaW5jbHVkZSk6IEluY3JlbWVudCBpbmRlcHRoIGJlZm9yZSBjYWxsaW5nCisJdHJpZ3JhcGhfcGNwLCBzbyB0aGF0IHdhcm5pbmcgdXNlcyB0aGUgY29ycmVjdCBmaWxlIG5hbWUuCisKK1dlZCBBdWcgMTkgMDc6MDc6NDEgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChmb3JjZV90b19tb2RlKTogQWRkIG1pc3NpbmcgdGVzdCBvZiBhbmRfb3B0YWIuCisKKwkqIGdlbmNvbmZpZy5jIChoYXZlX2Ntb3ZlX2ZsYWcpOiBOZXcgdmFyaWFibGUuCisJKHdhbGtfaW5zbl9wYXJ0KTogQWRkIG5ldyBwYXJtIE5PTl9QQ19TRVRfU1JDOyBhbGwgY2FsbGVycyBjaGFuZ2UuCisJTG9vayBmb3IgSUZfVEhFTl9FTFNFIGluIGEgU0VUX1NSQyB0aGF0IGlzbid0IHNldHRpbmcgUEMgYW5kCisJc2V0IGhhdmVfY21vdmVfZmxhZyBpZiBzby4KKwkobWFpbik6IERlZmluZSBIQVZFX2NvbmRpdGlvbmFsX21vdmUgaWYgaGF2ZV9jbW92ZV9mbGFnIGlzIG5vbi16ZXJvLgorCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBBTkQpOiBPbmx5IG1ha2UgSUZfVEhFTl9FTFNFIGlmIGNvbmRpdGlvbmFsCisJbW92ZXMgZXhpc3QuCisKKwkqIGNzZS5jIChmaW5kX2NvbXBhcmlzb25fYXJncyk6IExvb2sgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucworCWlmIHRoZSBzZWNvbmQgYXJnIGlzIDAgaW4gYW55IG1vZGUuCisJKHJlY29yZF9qdW1wX2NvbmQpOiBEb24ndCBtYWtlIGNsYXNzZXMgZXF1aXZhbGVudCBmb3IgZmxvYXRpbmctcG9pbnQKKwllcXVhbGl0eSBjb21wYXJpc29uLgorCisJKiBsb2NhbC1hbGxvYy5jIChhbGxvY19xdHlfZm9yX3NjcmF0Y2gsIGJsb2NrX2FsbG9jKTogUHJvdmlkZQorCWFsdGVybmF0ZSBjb2RlIGluIHNvbWUgY2FzZXMgd2hlbiBSRUdJU1RFUl9DT05TVFJBSU5UUyBpcyBub3QKKwlkZWZpbmVkLgorCShyZXF1aXJlc19pbm91dF9wKTogT25seSB1c2VkIHdoZW4gUkVHSVNURVJfQ09OU1RSQUlOVFMgaXMgZGVmaW5lZC4KKworCSogcmVvcmcuYyAobWFya19zZXRfcmVzb3VyY2VzKTogQWRkIG5ldyBwYXJtIElOX0RFU1Q7IGFkZCBjYWxsZXJzCisJY2hhbmdlZC4KKwlSZXdvcmsgdG8gc2NhbiBhbiBlbnRpcmUgaW5zbiB0byBsb29rIGZvciBhdXRvLWluYyBvcGVyYXRpb25zLgorCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbiBvZiBFWElUX0xBQkVMCisJcGFyYW1ldGVyLgorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgorCShpbnN0YW50aWF0ZV9kZWNsc3ssXzF9KTogQ2FsbCBpdC4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogQWRkIGEgZmV3IG1vcmUgY2FzZXMgd2hlcmUgd2UgY2FuCisJZG8gdGhlIGNvbXBhcmlzb24gaW4gYSB3aWRlciBtb2RlLgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMsIFJFR19FUVVBTCk6IERvbid0IHB1dCBiYWNrIGEgbm90ZQorCXdpdGggYSBub24tY29uc3RhbnQgZXhwcmVzc2lvbiBzaW5jZSBpdCBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorCitUdWUgQXVnIDE4IDIzOjA3OjMzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFRoZSBmaXJzdCBleHBhbnNpb24gb2YgYSBUQVJHRVRfRVhQUgorCWlzIG1hcmtlZCBieSBERUNMX1JUTCAoc2xvdCkgYmVpbmcgZmlsbGVkIGluIEFORCBUUkVFX09QRVJBTkQKKwkoZXhwLCAxKSBiZWluZyB3aXBlZC1vdXQgd2l0aCBhIE5VTExfVFJFRSwgbm90IGp1c3QgdGhlCisJREVDTF9SVEwgKHNsb3QpIGJlaW5nIGZpbGxlZCBpbi4KKworVHVlIEF1ZyAxOCAwMDowNzoyMyAxOTkyICBEZW5uaXMgUC4gR2xhdHRpbmcgIChkZ2xhdHRpbkB0cmlyZXguY29tKQorCisJKiBvYmpjLWFjdGlvbnMuYworCShidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSk6IE5VTEwtdGVybWluYXRlIHRoZQorCXNlbGVjdG9yIGxpc3QuICBNYXJrIF9PQkpDX1NFTEVDVE9SX1JFRkVSRU5DRVNfZGVjbCBhcyBzdGF0aWMsCisJbm90IGV4dGVybi4KKworVHVlIEF1ZyAxOCAyMTozODo0NiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGhhbCkKKworCSogeGNvZmZvdXQuYyAoYXNzaWduX3R5cGVfbnVtYmVyKTogIFNraXAgZGVjbHMgd2l0aCBubyBuYW1lLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogV2hlbiBleHBhbmRpbmcgVEFSR0VUX0VYUFJzLCBtYWtlIHN1cmUKKwl0aGF0IHRoZXkgYXJlIG9ubHkgZXhwYW5kZWQgb25jZSwgYWZ0ZXIgdGhlIGZpcnN0IGV4cGFuc2lvbiwKKwl0aGUgcnRsIGNhbiBiZSB1c2VkIHdpdGhvdXQgZnVydGhlciBleHBhbnNpb25zLgorCitUdWUgQXVnIDE4IDEyOjU4OjMzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeC1pMzg2c2NvIChYX0NGTEFHUyk6IERlZmluZWQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IENhbGwgZW1pdF9xdWV1ZSBpbiBpZ25vcmUtdGhlLXZhbHVlIGNhc2UuCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBDaGVjayBERUNMX0lOX1NZU1RFTV9IRUFERVIgZm9yIHVudXNlZCB3YXJuaW5ncy4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKToKKwlSZWFycmFuZ2UgY29uZGl0aW9uYWwgaW4gU1VCUkVHIGNhc2UuCisKK1R1ZSBBdWcgMTggMDY6NDk6NDMgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGNjY3AuYyAoSE9TVF9XSURFX0lOVCk6IENvcHkgZGVmaW5pdGlvbiBmcm9tIG1hY2htb2RlLmguCisgICAgCisJKiBjLXR5cGVjay5jIChwYXJzZXJfYnVpbGRfYmluYXJ5X29wKTogUmVwbGFjZSB0aGUgYXNzaWdubWVudCBvZiBDTEFTUy4KKworCSogY29uZmlndXJlIChNYWtlZmlsZSBlZGl0cyk6IE1ha2UgdGhlIGVkaXRzIGluZGVwZW5kZW50LgorCSogTWFrZWZpbGUuaW4gKHNlZCBtYXJrZXIpOiBVc2UgdGhlIG9yZGVyIHt0YXJnZXQsIGhvc3QsIGNyb3NzLW1ha2V9LgorCitUdWUgQXVnIDE4IDAwOjE1OjEyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAocGFyc2VyX2J1aWxkX2JpbmFyeV9vcCk6CisJRm9yIFo8WTxaIHdhcm5pbmcsIHRlc3QgY2xhc3Mgb2YgQ09ERTsgZG9uJ3QgdXNlIFRSRUVfQ09ERSAocmVzdWx0KS4KKworCSogY2NjcC5jIChwY2ZpbmNsdWRlKTogVXNlIEhPU1RfV0lERV9JTlQgZm9yIHJvdW5kaW5nIGEgcG9pbnRlci4KKworTW9uIEF1ZyAxNyAxNDo1NzoxOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogVGVzdCBUUkVFX1RZUEUgKGluc2lkZV9pbml0KSBpcworCW5vbnplcm8gYmVmb3JlIHRlc3RpbmcgYW55dGhpbmcgZWxzZSBhYm91dCBpdC4KKworCSogaTg2MC5tZCAobXVsc2kzKTogVXNlIGVtaXRfaW5zbiBvbiByZXN1bHRzIG9mIGdlbiBmY25zLgorCVJldHVybiB3aXRoIERPTkUuCisKK01vbiBBdWcgMTcgMTE6NTA6MjMgMTk5MiAgTWFyayBFaWNoaW4gIChlaWNoaW5AY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogSWYgc2VhcmNoX3N0YXJ0IGlzIE5VTEwsIGNvbXBsYWluIHRoYXQKKwl3ZSBoYWQgbm93aGVyZSB0byBsb29rLgorCitNb24gQXVnIDE3IDE0OjUzOjQ2IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogIFdoZW4gY29weSBhcmcgcGFzc2VkIGJ5IGludmlzaWJsZQorCXJlZmVyZW5jZSB0byBwc2V1ZG8gcmVnLCBkb24ndCB1c2Ugbm9taW5hbF9tb2RlLgorCisJKiBpOTYwLmMgKGk5NjBfYWRkcmVzc19jb3N0KTogRG9uJ3QgYWJvcnQgZm9yIGludmFsaWQgYWRkcmVzc2VzLgorCitNb24gQXVnIDE3IDE0OjI5OjMzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOgorCVVzZSBUWVBFX01BSU5fVkFSSUFOVCBjb21wYXJpbmcgdHlwZSBvZiBpbnNpZGVfaW5pdC4KKworTW9uIEF1ZyAxNyAxMDozMjowOCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZ2VuYXR0cnRhYi5jIChzaW1wbGZ5X3dpdGhfY3VycmVudF92YWx1ZSk6IFJldHVybiAnZXhwJyB0bworCWNhbGxlciBpbnN0ZWFkIG9mIHJhbmRvbSB2YWx1ZS4KKwkoY29udmVydF9zZXRfYXR0cl9hbHRlcm5hdGl2ZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgbmV3ZXhwLgorCShzaW1wbGlmeV9jb25kKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBzcGFjZXIuCisJKG1ha2VfYWx0ZXJuYXRpdmVfY29tcGFyZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYWx0ZXJuYXRpdmUuCisJKG9wdGltaXplX2F0dHIpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIG5leHRpZS4KKwkobWFpbik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYXYuCisJKHNpbXBsaWZ5X2J5X2FsdGVybmF0aXZlcyk6ICNpZiAwLCBzaW5jZSB0aGUgb25seSBjYWxsZXIgaXMgYWxzbworCSNpZmRlZidlZCBhd2F5LgorCShjb3B5X3J0eF91bmNoYW5naW5nKTogI2lmIDAgdmFyaWFibGVzIHRoYXQgYXJlIG9ubHkgdXNlZCBpbnNpZGUKKwlvZiBvdGhlciBjb2RlIHVuZGVyICNpZiAwLgorCitNb24gQXVnIDE3IDA3OjM3OjQxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGEyOWt1bml4LmggKExJTktfU1BFQyk6IEFkZCAlcyBmb3IgZGVmYXVsdC5sZC4KKwkoTElOS19MSUJHQ0NfU1BFQ0lBTCk6IE5vIGxvbmdlciBuZWVkZWQuCisJKEFTTV9GSUxFX1NUQVJZKTogQWRkIHNoYXJlZCBkYXRhIHNlY3Rpb24uCisJKFNIQVJFRF9TRUNUSU9OX0FTTV9PUCk6IE5ldyBtYWNyby4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IElmIC1mc2hhcmVkLWRhdGEsIGFkZCAtZm5vLWNvbW1vbi4KKworCSogYWxwaGEuYyAoYWxwaGFfZnVuY3Rpb25fbmVlZHNfZ3ApOiBOZXcgdmFyaWFibGUuCisJKG91dHB1dF9wcm9sb2cpOiBTZXQgaXQuCisJV3JpdGUgbGFiZWwgYWZ0ZXIgTERHUCBpZiBmdW5jdGlvbiBoYXMgcmVjdXJzaXZlIGNhbGwgYW5kIG5lZWRzIEdQLgorCShjdXJyZW50X2Z1bmN0aW9uX29wZXJhbmQsIGRpdm1vZF9vcGVyYXRvciwgYWxwaGFfZ3BfZGVhZF9hZnRlcik6CisJTmV3IGZ1bmN0aW9ucy4KKwkocHJpbnRfb3BlcmFuZCwgY2FzZSAnRScsICdGJyk6IE5ldyBjYXNlcy4KKwkoYWxwaGFfbmVlZF9ncCk6IEp1c3QgdGVzdCBmb3IgdHlwZSBvZiBMRFNZTSwgbm90IENBTExfSU5TTi4KKwkqIGFscGhhLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEFsbG93IGEgU1lNQk9MX1JFRiBmb3IKKwl0aGUgY3VycmVudCBmdW5jdGlvbiBhcyBhIHZhbGlkIGFkZHJlc3MuCisJKiBhbHBoYS5tZCAoZGl2WGkzLCB1ZGl2WGkzLCBtb2RYaTMsIHVtb2RYaTMpOiBOZXcgcGF0dGVybnMuCisJKGNtb3YpOiBBZGQgcGF0dGVybiBmb3IgYWRkcS9jbW92IGZvciBzaWduZWQgZGl2aWRlIGJ5IHBvd2VyIG9mIDIuCisJKGNhbGwpOiBPbWl0IEdQIHJlc3RvcmUgaWYgaXQgaXMgZGVhZC4KKwlBZGQgcGF0dGVybnMgZm9yIHJlY3Vyc2l2ZSBjYWxscy4KKwkoYnJhbmNoKTogQ2hhbmdlIHR5cGUgb2YgZXZlcnl0aGluZyBidXQgY2FsbHMgdG8gSUJSLgorCSh1bmFsaWduZWRfc3RvcmVoaSk6IEZpeCBudW1iZXJpbmcgb2Ygb3BlcmFuZHMuCisJKiB4bS1hbHBoYS5oIChtYWxsb2MsIHJlYWxsb2MsIHNicmspOiBEZWNsYXJlIGFzIHZvaWQgKiBpZiBfX1NURENfXy4KKworCSogbGliZ2NjMi5jIChidWlsdGluX25ldyk6IFJlbW92ZSBkZWNsYXJhdGlvbiBvZiBtYWxsb2MuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCk6IEJvdW5kIHNlY29uZCBzeW50aF9tdWx0IGNvc3QgYnkgY29zdCBvZgorCWFsZ29yaXRobSBmcm9tIGZpcnN0IGNhbGwuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogV2hlbiBkb2luZyBsb2dpY2FsIG9wZXJhdGlvbnMsIHRoZSBzaXplCisJb2YgQ09NUFVURV9NT0RFIHNob3VsZCBiZSB1c2VkLCBub3QgTU9ERS4KKworCSogY29tYmluZS5jIChzdHJ1Y3QgdW5kbywgc3RydWN0IHVuZG9faW50KTogUmVwbGFjZSBub24tcG9ydGFibGUKKwl1c2FnZSB3aXRoIHNvbWUgdW5pb25zLgorCShTVUJTVCwgU1VCU1RfSU5ULCB1bmRvX2FsbCwgZ2VuX3J0eF9jb21iaW5lKTogTWFrZSBjb25zaXN0ZW50CisJd2l0aCBuZXcgZGVmaW5pdGlvbnMuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IE1vdmUgY29udmVyc2lvbiBiYWNrIG91dHNpZGUgb2YgQ09ORF9FWFBSCisJaWYgbW92aW5nIGl0IGluc2lkZSBkaWRuJ3QgaGVscCBhbnl0aGluZy4KKworCSogZm9sZC1jb25zdC5jIChkaXZfYW5kX3JvdW5kX2RvdWJsZSk6IENoYW5nZSBzb21lIG1vcmUgaW50cworCXRvIEhPU1RfV0lERV9JTlRzLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBBbGxvdyBTVUJSRUcgaW4gbWFueSBwbGFjZXMgd2hlcmUgUkVHCisJaXMgYWxsb3dlZC4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogRG9uJ3QgYWN0dWFsbHkgZG8KKwlleHRyYWN0aW9uIGZyb20gbWVtb3J5IGlmIHdlIHdhbnQgYWRkcmVzcy4KKworCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBGaXggcHJvYmxlbXMgaW4gbGFzdCBjaGFuZ2UuCisKK01vbiBBdWcgMTcgMDM6Mzc6MTAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChpc19jdG9yX2R0b3IpOiBEb24ndCBjb2xsZWN0IGNmcm9udCBpbml0IGZjbnMuCisKKwkqIE1ha2VmaWxlLmluIChHQ0NfRk9SX1RBUkdFVCk6IFB1dCAtQi4vIGhlcmUuCisJKEdDQ19DRkxBR1MpOiBOb3QgaGVyZS4KKworU3VuIEF1ZyAxNiAxMDozODoxMCAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBuczMyay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBGaXggdHlwby4KKworU2F0IEF1ZyAxNSAyMDoyMzozOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoUFRSX0lOVF9UWVBFKTogRG9uJ3QgZGVmaW5lIHRoaXMuCisJKHBjZmluY2x1ZGUpOiBVc2UgaW50LCBub3QgUFRSX0lOVF9UWVBFLgorCitTYXQgQXVnIDE1IDExOjEwOjA3IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKEFTTV9GSU5BTF9TUEVDKTogRm9yIG91dHB1dCBvZiBhcyB3aGVuIC1jIGlzIG5vdCB1c2VkLCB1c2UKKwkldSByYXRoZXIgdGhhbiAlZyBzbyBlYWNoIG9iamVjdCBmaWxlbmFtZSB3aWxsIGJlIHVuaXF1ZS4KKwkqIGRlY3Jvc2UuaCAoQVNNX0ZJTkFMX1NQRUMpOiBEaXR0by4KKworCSogeC1kZWNyb3NlIChDTElCLCBYX0NGTEFHUyk6IERvbid0IGxpbmsgaW4gbGliYnNkLmEsIGluc3RlYWQgdXNlCisJLUR2Zm9yaz1mb3JrIG9uIHRoZSBjb21tYW5kIGxpbmUuCisJKiB4LWVuY3Jvc2UgKENMSUIsIFhfQ0ZMQUdTKTogRGl0dG8uCisJKiB4LWkzODZyb3NlIChDTElCLCBYX0NGTEFHUyk6IERpdHRvLgorCitTYXQgQXVnIDE1IDA2OjM2OjE1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNjY3AuYzogUmVtb3ZlIGRlY2xhcmF0aW9uIG9mIG1hbGxvYyBhbmQgcmVhbGxvYy4KKworCSogY29tYmluZS5jIChnZXRfbGFzdF92YWx1ZSk6IERvbid0IGdvIHBhc3QgYSBDT0RFX0xBQkVMIHdoZW4KKwlzZWFyY2hpbmcgZm9yIGEgdmFsdWUuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogQ29weSBTVUJSRUcgdG8gUkVHIGluIG9uZSBtb3JlIGNhc2UuCisKKwkqIGV4cHIuYyAoZG9fanVtcCopOiBBbHdheXMgZG8gY29tcGFyaXNvbiBpbiBvYmplY3QncyBzaWduZWRuZXNzCisJbm93IHRoYXQgY29tYmluZSBjYW4gcmVtb3ZlIGV4dHJhbmVvdXMgc2lnbiBleHRlbmRzLgorCitTYXQgQXVnIDE1IDAwOjUyOjA4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKGFuc2lfY29tcGF0LmgpOiBSZXBsYWNlIHRoaXMgd2l0aCBhbiBlbXB0eSBmaWxlLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogSW4gc2Vjb25kIGxvb3Agb3ZlciBhbGwgc3dpdGNoZXMsCisJZG9uJ3QgaW5jcmVtZW50IEkgZm9yIHN3aXRjaGVzIHRoYXQgZG9uJ3QgaGF2ZSBzZXBhcmF0ZSBhcmd1bWVudHMuCisKKwkqIGNjY3AuYzogRG9uJ3QgZXZlciBpbmNsdWRlIHN0ZGRlZi5oLgorCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IEF2b2lkIHVzaW5nIHNpemVfdC4KKwkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IE91dHB1dCBkZWZuIG9mIF9fV0NIQVJfVFlQRV9fIGp1c3Qgb25jZS4KKworCSogbnMzMmsubWQgKG1vdnN0cnNpMSk6IFJlbmFtZWQgZnJvbSBtb3ZzdHJzaS4KKwkobW92c3Ryc2kpOiBOZXcgZGVmaW5lX2V4cGFuZC4KKworRnJpIEF1ZyAxNCAxODo1MTo1NyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKGF0dGFjaF9kZWF0aHNfaW5zbik6IERvbid0IGNhbGwgYXR0YWNoX2RlYXRocyBmb3IgQ0xPQkJFUnMuCisKK0ZyaSBBdWcgMTQgMTg6NDc6MjIgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGdlbmF0dHIuYyAod3JpdGVfdW5pdHMpOiBXcml0ZSAjZGVmaW5lcyBmb3IgdGhlIG51bWJlciBvZgorCWZ1bmN0aW9uIHVuaXRzLCB0aGUgbWluL21heCByZWFkeSBjb3N0IGFuZCBtaW4vbWF4IGJ1c3kgZGVsYXkuCisJQWRkIG1heF9idXN5X2Nvc3QgZmllbGQgdG8gc3RydWN0IGZ1bmN0aW9uX3VuaXRfZGVzYy4KKworCSogZ2VuYXR0cnRhYi5jIChzaW1wbGlmeV9ieV9leHBsb2RpbmcsIGZpbmRfYW5kX21hcmtfdXNlZF9hdHRyaWJ1dGVzLAorCXVubWFya191c2VkX2F0dHJpYnV0ZXMsIGFkZF92YWx1ZXNfdG9fY292ZXIsIGluY3JlbWVudF9jdXJyZW50X3ZhbHVlLCAKKwl0ZXN0X2Zvcl9jdXJyZW50X3ZhbHVlLCBzaW1wbGlmeV93aXRoX2N1cnJlbnRfdmFsdWUsCisJc2ltcGxpZnlfd2l0aF9jdXJyZW50X3ZhbHVlX2F1eCk6IE5ldyBmdW5jdGlvbnMuCisJKHN0cnVjdCBmdW5jdGlvbl91bml0KTogQWRkIG1heF9idXN5X2Nvc3QsIHttaW4sbWF4fV9idXN5X2RlbGF5LgorCShleHBhbmRfdW5pdHMpOiBVc2Ugc2ltcGxpZnlfYnlfZXhwbG9kaW5nIHRvIHNpbXBsaWZ5IHRoZQorCWZ1bmN0aW9uX3VuaXRzX3VzZWQgYXR0cmlidXRlLiAgQ29tcHV0ZSB0aGUgcmVhZHkgY29zdCBhdHRyaWJ1dGVzCisJYXMgYSBDT05EIGluIG51bWVyaWMgb3JkZXIuCisJKGdlbl91bml0KTogQ29tcHV0ZSB7bWluLG1heH1fcmVhZHlfY29zdCBhbmQge21pbixtYXh9X2J1c3lfZGVsYXkuCisJKHdyaXRlX2Z1bmN0aW9uX3VuaXRfaW5mbyk6IERldGVybWluZSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBidXN5CisJZGVsYXkgdmFsdWUgYnkgY29tcGFyaW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJ1c3kgZGVsYXkuCisJV3JpdGUgdGhlIGluaXRpYWxpemVyIGZvciBmdW5jdGlvbl91bml0cyBpbiBudW1lcmljIG9yZGVyLgorCVdyaXRlIG91dCB0aGUgbWF4aW11bSBidXN5IGRlbGF5IGZpZWxkLgorCisJKiBnZW5hdHRydGFiLmMgKGF0dHJfZGVzYyk6IEFkZCBuZWdhdGl2ZV9vayBmaWVsZC4KKwkoZmluZF9hdHRyLCBtYWtlX2ludGVybmFsX2F0dHIpOiBJbml0aWFsaXplIG5lZ2F0aXZlX29rLgorCShjaGVja19hdHRyX3ZhbHVlKTogQWxsb3cgbmVnYXRpdmUgdmFsdWVzIGZvciBDT05TVF9TVFJJTkcgZm9yCisJbnVtZXJpYyBhdHRyaWJ1dGVzIHdpdGggbmVnYXRpdmVfb2suCisJKGVuY29kZV91bml0c19tYXNrKTogQ2hhbmdlIHRoZSBlbmNvZGluZyBvZiB0aGUgZnVuY3Rpb25fdW5pdHNfdXNlZAorCXJlc3VsdC4KKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEFkZCAldS4KKwkoZGVmYXVsdF9jb21waWxlcnMpOiBGb3Igb3V0cHV0IG9mIGFzIHdoZW4gLWMgaXMgbm90IHVzZWQsIHVzZSAldQorCXJhdGhlciB0aGFuICVnIHNvIGVhY2ggb2JqZWN0IGZpbGVuYW1lIHdpbGwgYmUgdW5pcXVlLgorCisJKiBjZXhwLnksIGNjY3AuYywgZ2NjLmMgKE5VTExfUFRSKTogVXNlIHRoZSBzYW1lIGRlZmluaXRpb24gYXMKKwlydGwuaCBhbmQgdHJlZS5oLgorCitGcmkgQXVnIDE0IDIwOjUzOjAwIDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgZHVwbGljYXRlIGRpYWdub3N0aWMgZm9yCisJaW5pdGlhbGl6ZWQgcGFyYW1ldGVyczsgc3RhcnRfZGVjbCBhbHJlYWR5IGRvZXMgdGhpcy4KKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogT3B0aW9uYWxseSB3YXJuIGlmIGFuCisJdW5wYXJlbnRoZXNpemVkIGFzc2lnbm1lbnQgaXMgdXNlZCBhcyBhIHRydXRoIHZhbHVlLgorCSogYy1wYXJzZS55LCBvYmpjLXBhcnNlLnkgKGV4cHJfbm9fY29tbWFzKToKKwlNYXJrIGFzc2lnbm1lbnRzIGZvciB3YXJuaW5nLgorCitGcmkgQXVnIDE0IDE0OjQ1OjM5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmF4Lm1kIChjYXNlc2kxKTogUmVuYW1lZCBmcm9tIGNhc2VzaS4KKwkoY2FzZXNpKTogTmV3IHRyaXZpYWwgZGVmaW5lX2V4cGFuZCBpbnZva2VzIGNhc2VzaTEuCisJKG1vdnN0cmhpLCBtb3ZzdHJoaTEpOiBBbmFsb2dvdXMgY2hhbmdlLgorCitGcmkgQXVnIDE0IDE0OjM2OjUyIDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWdub3JlIGAlJyBpbiB0aGUgbGFzdCBvcGVyYW5kIGFmdGVyCisJd2FybmluZy4KKworRnJpIEF1ZyAxNCAwNzo0MTozNCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5mbGFncy5jIChudW1fb3BlcmFuZHMpOiBNQVRDSF9QQVJBTExFTCBhbHNvIHJlcHJlc2VudHMgYW4gb3BlcmFuZC4KKworCSoganVtcC5jIChpbnZlcnRfZXhwLCByZWRpcmVjdF9leHApOiBObyBsb25nZXIgc3RhdGljLgorCUNsZWFuIHVwIG9yZGVyIG9mIGRlY2xhcmF0aW9ucyBhdCBzdGFydCBvZiBmaWxlIGFuZCByZW1vdmUKKwlleHRyYW5lb3VzIGRlY2xzLgorCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgYXNzdW1lIChwYykgY2FuIGJlIG9uIGVpdGhlcgorCWxlZyBvZiBqdW1wOyB1c2UgaW52ZXJ0X2V4cCBhbmQgcmVkaXJlY3RfZXhwIGluc3RlYWQuCisKKwkqIGFscGhhLmMsIGFscGhhLmgsIGFscGhhLm1kLCB4bS1hbHBoYS5oLCB4LWFscGhhLCB2YS1hbHBoYS5oOgorCU5ldyBmaWxlcy4KKwkqIGNvbmZpZy5zdWI6IEFkZCAiYWxwaGEiLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgdmEtYWxwaGEuaCBhbmQgc29ydCBuYW1lcy4KKwkqIGdzdGRhcmcuaCwgZ3ZhcmFyZ3MuaDogQ2FsbCB2YS1hbHBoYS5oIGZvciBBbHBoYS4KKworCSogcnRsLmRlZiAoTUFUQ0hfUEFSX0RVUCk6IE5ldyBSVEwgY29kZS4KKwkqIGdlbmNvbmZpZy5jICh3YWxrX2luc25fcGFydCk6IFRyZWF0IGl0IGp1c3QgbGlrZSBNQVRDSF9PUF9EVVAuCisJKiBnZW5lbWl0LmMgKG1heF9vcGVyYW5kXzEpOiBMaWtld2lzZS4KKwkoZ2VuX2V4cCk6IFRyZWF0IGl0IGxpa2UgTUFUQ0hfUEFSQUxMRUwgaGVyZS4KKwkqIGdlbmV4dHJhY3QuYyAod2Fsa19ydHgpOiBUcmVhdCBpdCBsaWtlIE1BVENIX0RVUC4KKwkqIGdlbm91dHB1dCAoc2Nhbl9vcGVyYW5kcyk6IExpa2V3aXNlLgorCSogZ2VucGVlcC5jIChtYXRjaF9ydHgpOiBMaWtld2lzZS4KKwkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IExpa2V3aXNlLgorCSogYTI5ay5tZCwgcnM2MDAwLm1kICh7bG9hZCxzdG9yZX1fbXVsdGlwbGUpOiBVc2UgTUFUQ0hfUEFSX0RVUC4KKworCSogY3NlLmMgKGZvbGRfcnR4KTogRml4IHR5cG8gaW4gdHdvIEZMT0FUX1NUT1JFX0ZMQUdfVkFMVUUgdGVzdHMuCisKKwkqIGZsb3cuYyAobGlmZV9hbmFseXNpcywgcHJvcGFnYXRlX2Jsb2NrLCBkdW1wX2Zsb3dfaW5mbyk6IEFkZCBtb3JlCisJbWlzc2luZyBjYXN0cyB0byBSRUdTRVRfRUxUX1RZUEUuCisKKwkqIGV4cHIuYyAobW92c3RyX29wdGFiKTogTmV3IHZhcmlhYmxlLgorCShpbml0X2V4cHJfb25jZSk6IEluaXRpYWxpemUgaXQuCisJKGVtaXRfYmxvY2tfbW92ZSk6IFJld29yayBjb2RlIHRoYXQgZ2VuZXJhdGVzIG1vdnN0cnh4IGluc25zIHRvCisJY2hlY2sgcHJlZGljYXRlcyBhbmQgdXNlIGFuIG9wdGFiLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uKTogUmVtb3ZlICJlbHNlIi4KKworRnJpIEF1ZyAxNCAwNzo0MTowNSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBjLWRlY2wuYywgY3NlLmMsIGZvbGQtY29uc3QuYywgaW50ZWdyYXRlLmMsIG9ic3RhY2suaCwgcHJvdG9pemUuYywKKwlyZWxvYWQxLmMsIHN0bXQuYywgdHJlZS5jLCB0cmVlLmg6IFBoaWNrcyBzcGVsaW5nIGVyb3Vycy4KKworRnJpIEF1ZyAxNCAwMzoyMToxNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtY29udmVydC5jIChjb252ZXJ0KTogV2hlbiBjb252ZXJ0aW5nIHRvIHZhcmlhbnQgb2Ygc2FtZSB0eXBlLCBmb2xkLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBDaGFuZ2UgZXJyb3IgbWVzc2FnZSBmb3IgdW5rbm93biBzaXplLgorCisJKiBjLXBhcnNlLnkgKGRlY2xtb2RzKTogRG9uJ3Qgd2FybiBmb3IgbXVsdGlwbGUgc3RvcmFnZSBjbGFzc2VzCisJYWxsIGF0IHRoZSBiZWdpbm5pbmcuICBUaGlzIGlzIGVpdGhlciBnb29kIHByYWN0aWNlIG9yIGFuIGVycm9yLgorCitUaHUgQXVnIDEzIDE5OjQzOjEzIDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBBdm9pZCBjYXNjYWRpbmcgbWVzc2FnZXMgZm9yIHRlbnRhdGl2ZQorCWRlZmluaXRpb25zIHdpdGggaW5jb21wbGV0ZSB0eXBlcy4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogV2FybiBhYm91dCBwYXJ0bHkKKwlicmFja2V0ZWQgaW5pdGlhbGl6ZXJzLgorCitUaHUgQXVnIDEzIDE3OjE4OjQ5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlKTogT3V0cHV0IG1hY3JvIG5hbWUgaWYgZHVtcF9uYW1lcy4KKworCSogbTY4ay5oOiBEZWxldGUganVuayBsaW5lIGluc2VydGVkIGJ5IG1pc3Rha2UgaW4gbGFzdCBwYXRjaC4KKworVGh1IEF1ZyAxMyAxNjo0Njo1OCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBEb24ndCBzY2FuIHRoZSBjb25zdHJhaW50cyBpZiB0aGVyZSBhcmVuJ3QKKwlhbnkgb3BlcmFuZHMuICBEb24ndCBsb29rIGZvciBhIGNvbW11dGF0aXZlIGNvbnN0cmFpbnQgaW4gdGhlIGxhc3QKKwlvcGVyYW5kLgorCisJKiBmdW5jdGlvbi5jIChjb250YWlucyk6IFJldHVybiB0aGUgbnVtYmVyIG9mIGluc25zLgorCShyZXBvc2l0aW9uX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9ub3Rlcyk6IENvdW50IGFsbCB0aGUgcHJvbG9ndWUgYW5kCisJZXBpbG9ndWUgaW5zbnMuCisKK1RodSBBdWcgMTMgMTU6MjA6MjQgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IE1ha2UgLW02ODA0MCBzZXQgMDEwMDcgbm90IDAxMDAwLgorCisJKiBzcGFyYy5oIChDUFBfU1BFQyk6IEZvciAtbXY4LCBkZWZpbmUgX19zcGFyY192OF9fIG5vdCBfX3NwYXJjdjhfXy4KKwkqIGxvbmdsb25nLmggKF9fc3BhcmNsaXRlX18pOiBEZWZpbmUgdW11bF9wcG1tLCB1ZGl2X3Fybm5kLCBhbmQKKwljb3VudF9sZWFkaW5nX3plcm9zIGZvciB0aGlzIHNwYXJjIGFyY2hpdGVjdHVyZSB2YXJpYW50LgorCShfX3NwYXJjX3Y4X18pOiBDaGFuZ2VkIGZyb20gX19zcGFyYzhfXy4KKworCSogYy10eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IERvbid0IHdhcm4gZm9yIGNvbXBvdW5kIGFuZAorCWNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHdoZW4gcGVkYW50aWMuICBUaGVzZSBhcmUgdmFsaWQgaW4gQU5TSSBDLgorCitUaHUgQXVnIDEzIDExOjM3OjU3IDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFJlc3RvcmUgInJwIiBhZnRlciB0aGUgY2FsbCB0bworCW1jb3VudC4KKworVGh1IEF1ZyAxMyAwNjo1NDo1MCAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAanVwaXRlci5zaWNzLnNlKQorCisJKiBwYS5tZCAobW92c2YgcmVjb2duaXplcik6IE91dHB1dCBgZmNweSxzZ2wnLCBub3QgYGZjcHknLgorCUZyb20gSmVmZiBMYXc6CisJKiBwYS5tZCAoemRlcGkgaW4gSEltb2RlKTogTW92ZSB0aGlzIHBhdHRlcm4gYWZ0ZXIgdGhlIHN0YW5kYXJkCisJbW92aGkgcGF0dGVybnMuCisKK1dlZCBBdWcgMTIgMTE6NDU6MTUgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoQVNNX0ZJTkFMX1NQRUMpOiBGb3Igb3V0cHV0IG9mIGFzIHdoZW4gLWMgaXMgbm90IHVzZWQsCisJdXNlICVnLCByYXRoZXIgdGhhbiAlYiwgYmVjYXVzZSB0aGUgZmlsZSBpcyBnb2luZyB0byBiZSBkZWxldGVkCisJYW55d2F5IChzeW5jIHVwIHdpdGggZ2NjLmMgQXVnIDQgY2hhbmdlcykuICBQYXRjaCBmcm9tIEppbSBNZXllcmluZy4KKworCSogZGVjcm9zZS5oIChBU01fRklOQUxfU1BFQyk6IERpdHRvLgorCitXZWQgQXVnIDEyIDAzOjIzOjMwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKGZpbmRpbmcgYWxsIC5oIGZpbGVzKTogTG9vayBmb3IgbGlua3MgYXMgd2VsbCBhcworCW9yZGluYXJ5IGZpbGVzLgorCisJKiBtNjhrLmggKFRBUkdFVF82ODA0MCk6IFRlc3QgZm9yIDAxMDAwIG9yIDA0MDAuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IFJlbmFtZSAtbTY4MDQwIHRvIC1tNjgwMjAtNDAuCisJUmVuYW1lIC1tNjgwNDAtb25seSB0byAtbTY4MDQwLgorCisJKiBocDJic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBNYWtlIHZhbHVlIDAuCisKK1R1ZSBBdWcgMTEgMDQ6MjM6MzUgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogTWFrZSBpdCBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24KKwl0ZXN0cyBmb3IgaW5kaXN0aW5ndWlzaGFibGUgdmFsdWVzLCBub3QgZm9yIGVxdWFsaXR5IGFzIGNvbXB1dGVkIGJ5CisJYD09JzsgdGhlIGRpc3RpbmN0aW9uIGlzIGltcG9ydGFudCBmb3IgSUVFRSBOYU5zIGFuZCAtMC4wLgorCitUdWUgQXVnIDExIDEzOjEwOjQ3IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBmaXNocG9uZCkKKworCSogY29uZmlnLnN1YiAoYW1pZ2F1bml4L2FtaXgpOiAgVXNlIHN5c3Y0IGFzIG9zLgorCSogY29uZmlndXJlIChtNjhrLSotYW1peCopOiAgQ2hhbmdlIHRvIG02OGstY2JtLXN5c3Y0KiBhbmQKKwllbGltaW5hdGUgZml4aW5jbHVkZXMgYW5kIGJyb2tlbl9pbnN0YWxsLgorCitUdWUgQXVnIDExIDE1OjQyOjU4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAoaWRlbnRpZnlfYmxvY2tzKTogSGFuZGxlIGNhc2Ugd2hlcmUgbm8gYmxvY2sgbm9kZXMKKwlleGlzdC4gIFVzZSB4bWFsbG9jIG5vdCBhbGxvY2EgZm9yIGJsb2NrX3ZlY3Rvci4KKwkocmVvcmRlcl9ibG9ja3MpOiBOZXcgYXJndW1lbnQgdG9wX2Jsb2NrLiAgSGFuZGxlIGNhc2Ugd2hlcmUgbm8KKwlibG9jayBub2RlcyBleGlzdC4gIEFsd2F5cyBjbGVhciBCTE9DS19TVUJCTE9DS1MgKGJsb2NrKSB3aGVuCisJYWRkaW5nIGl0IHRvIHRoZSBibG9jayB0cmVlLgorCShhbGxfYmxvY2tzKTogSGFuZGxlIGNhc2Ugd2hlcmUgdmVjdG9yIGlzIHplcm8uIFN0b3JlIGN1cnJlbnQKKwlibG9jayBhdCBvZmZzZXQgMCBpbiB2ZWN0b3IsIG5vdCBuX2Jsb2Nrcy4gIERvbid0IGNvdW50IGN1cnJlbnQKKwlibG9jayB0d2ljZSBpbiBuX2Jsb2Nrcy4KKwkqIGZ1bmN0aW9uLmggKGlkZW50aWZ5X2Jsb2Nrcyk6IERlY2xhcmUuCisJKHJ0eCwgdHJlZSk6IE1vdmUgdW5kZWZzIHRvIHRoZSB2ZXJ5IGVuZC4KKwkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSk6IERlbGV0ZSB1c2VzIG9mIGxvb3BfbnVtYmVyX2ZpcnN0X2Jsb2NrLAorCWxvb3BfbnVtYmVyX2xhc3RfYmxvY2ssIGxvb3BfbnVtYmVyX2Jsb2NrX2xldmVsLiAgQ29ycmVjdCBjYWxsIG9mCisJZmluZF9sb29wX3RyZWVfYmxvY2tzLiAgQWRkIGNhbGwgdG8gdW5yb2xsX2Jsb2NrX3RyZWVzLgorCSogbG9vcC5oIChsb29wX251bWJlcl9maXJzdF9ibG9jaywgbG9vcF9udW1iZXJfbGFzdF9ibG9jaywKKwlsb29wX251bWJlcl9ibG9ja19sZXZlbCk6IERlbGV0ZSBkZWNsYXJhdGlvbnMuCisJKiBzdG10LmM6IExpa2V3aXNlLgorCShmaW5kX2xvb3BfdHJlZV9ibG9ja3MpOiBDb21wbGV0ZWx5IHJld3JpdHRlbiB0byB1c2UKKwlpZGVudGlmeV9ibG9ja3MuCisJKHVucm9sbF9ibG9ja190cmVlcyk6IENvbXBsZXRlbHkgcmV3cml0dGVuIHRvIHVzZSByZW9yZGVyIGJsb2Nrcy4KKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IERlbGV0ZSBjYWxsIHRvIHVucm9sbF9ibG9ja190cmVlcy4KKworCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogT25seSBjb3B5IFZUT1Agbm90ZSBpZiBpdCB3aWxsIGVuZCB1cAorCWJlZm9yZSBhIGxvb3AgZXhpdCB0ZXN0LgorCitUdWUgQXVnIDExIDA5OjIxOjQ3IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgbWVpc3NuZXIgdmVyc2lvbiAjIHRvIDIzLgorCShDT05TVF9DT0RFUyk6IFJlbW92ZSBkZWNsYXJhdGlvbiBmb3IgZWxpbWluYXRlX2NvbnN0YW50X3Rlcm0KKwlmcm9tIGluc2lkZSBvZiBsb2NhbCB7fSdzLgorCShTRUxFQ1RfU0VDVElPTl9NT0RFKTogUmVtb3ZlIGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlCisJbWlwc19zZWN0aW9uX3RocmVzaG9sZCAgZnJvbSBpbnNpZGUgb2YgbG9jYWwge30ncy4KKwkoU0VMRUNUX1NFQ1RJT04pOiBEaXR0by4KKworCSogbWlwcy5jICh0b3BsZXZlbCk6IFJlbW92ZSBkZWNsYXJhdGlvbnMgZm9yIGFsbCBvZiB0aGUgZ2VuX3h4eAorCWZ1bmN0aW9ucyB1c2VkLCBzaW5jZSBpbnNuLWZsYWdzLmggY29udGFpbnMgdGhlbS4KKworCSogbWlwLm1kIChmaXh1bnNfdHJ1bmNkZnNpMik6IFJlbW92ZSBleHRlcm4gZGVjbGFyYXRpb25zLgorCShmaXh1bnNfdHJ1bmNzZnNpMik6IERpdHRvLgorCShtb3ZzaV91bmFsaWduZWQsIG1vdnNpX3VsdywgbW92c2lfdXN3KTogRGl0dG8uCisJKHNlcSwgc25lLCBzZ3QsIHNsZSwgc2d0dSwgc2xldSk6IERpdHRvLgorCitUdWUgQXVnIDExIDAyOjUxOjI1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKG1lbW9yeS5oKTogRml4IHZlcnNpb25zIDEuMiBhbmQgMS4zIGFzIHdlbGwgYXMgMS40LgorCisJKiBjb25maWd1cmU6IEltcHJvdmUgZXJyIG1zZyBmb3IgdW5rbm93biBjb25maWcuCisKK1R1ZSBBdWcgMTEgMDQ6MDI6NTEgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6ICBEb24ndCBmb2xkIChBIG9wIEIgPyBBIDogQykgaWYgQSBpcyBJRUVFCisJZmxvYXRpbmcgcG9pbnQsIGJlY2F1c2UgQSBtaWdodCBiZSAtMC4wIG9yIE5hTi4KKworCSogYy10eXBlY2suYyAocGFyc2VyX2J1aWxkX2JpbmFyeV9vcCk6IFdhcm4gYWJvdXQgZXhwcmVzc2lvbnMgbGlrZQorCWAxPD1pPD1OJy4KKworTW9uIEF1ZyAxMCAyMjoxMTo1MCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFVzZSBnZW5fcnR4IHRvIGNyZWF0ZSBhIHNlY29uZGFyeQorCXJlbG9hZCBpbnNuLCBub3QgZ2VuX3JlZ19ydHguCisKK01vbiBBdWcgMTAgMDY6MjM6MjMgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGp1cGl0ZXIuc2ljcy5zZSkKKworCSogcGEubWQgKFJlY29nbml6ZXIgZm9yIHpkZXBpX29wZXJhbmQgaW4gSEltb2RlKTogTmV3IHBhdHRlcm4uCisJKFJlY29nbml6ZXIgZm9yIHpkZXBpX29wZXJhbmQgaW4gU0ltb2RlKTogQ2FsbCBvdXRwdXRfemRlcGkgZm9yCisJb3V0cHV0LgorCShzaGlmdCBwYXR0ZXJucyBhbmQgcmVjb2duaXplcnMpOiBIYW5kbGUgMzIgYml0IGludHMgYW5kIHRydW5jYXRlCisJdGhlbSBmb3Igb3V0cHV0LgorCSogcGEuYyAob3V0cHV0X3pkZXBpKTogTmV3IGZ1bmN0aW9uIChjb250ZW50cyBmcm9tIHBhLm1kKS4KKwkqIHBhLmggKG91dHB1dF96ZGVwaSk6IERlY2xhcmUuCisKK1N1biBBdWcgIDkgMTc6MTA6MjQgMTk5MiAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGNvbmZpZ3VyZS5jb206IFJlbmFtZSB2bXMgdG8gdmF4LXZtczsgc3BsaXQgbG9uZyBsaW5lcy4KKwkqIG1ha2UtbDIuY29tOiBBc3NlbWJsZSBsaWJnY2MyIHJvdXRpbmVzIHR3aWNlLCBwcmVzZXJ2aW5nCisJbG93ZXJjYXNlIGZ1bmN0aW9uIG5hbWVzIHRoZSBzZWNvbmQgdGltZS4KKworU3VuIEF1ZyAgOSAwMDo1MDo0NiBQRFQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiAgQ2FsbCBkd2FyZm91dF9iZWdpbl9ibG9jayBhbmQKKwlkd2FyZm91dF9lbmRfYmxvY2sgZXZlbiBmb3IgLWcxLgorCitTdW4gQXVnICA5IDE4OjEwOjMzIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBnZW5mbGFncy5jIChnZW5faW5zbik6IFRyZWF0ICdjYWxsX3BvcCcgYW5kICdjYWxsX3ZhbHVlX3BvcCcgbGlrZQorCSdjYWxsJyBhbmQgJ2NhbGxfaW5zbicuCisKKwkqIGkzODYuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRW1pdF9tb3ZlX2luc24gb25seSB0YWtlcyB0d28KKwlhcmd1bWVudHMsIG5vdCB0aHJlZS4KKworU2F0IEF1ZyAgOCAxMDoyNjowMiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY3AtdHJlZS5oIChoYXNoX2NoYWlub24pOiBQcm92aWRlIGRlY2xhcmF0aW9uLgorCShidWlsZF92aXJ0dWFsX2luaXQpOiBEaXR0by4KKwkoYnVpbGRfdmJhc2VfZGVsZXRlKTogRGl0dG8uCisJKGJ1aWxkX3ZiYXNlX3Z0YWJsZXNfaW5pdCk6IERpdHRvLgorCisJKiBnZW5mbGFncy5jIChpbnNuX25hbWVfcHRyKTogRGVmaW5lLCBzbyB0aGF0IHdlIGNhbiBsaW5rIGluCisJcHJpbnQtcnRsLmMgZm9yIGRlYnVnZ2luZy4KKwkoY2FsbF9vYnN0YWNrLCBub3JtYWxfb2JzdGFjayk6IE5ldyBvYnN0YWNrcyB0byByZW1lbWJlciBjYWxsCisJaW5zbnMsIGFuZCBub3JtYWwgaW5zbnMsIHNvIHRoYXQgd2UgY2FuIGVtaXQgdGhlIHByb3RvdHlwZXMgbGF0ZXIuCisJKG1heF9pZF9sZW4pOiBOZXcgdmFyaWFibGUgdG8gcmVjb3JkIHRoZSBtYXhpbXVtIGlkZW50aWZpZXIKKwlsZW5ndGguCisJKG51bV9vcGVyYW5kcyk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdGhlIG51bWJlciBNQVRDSF9PUEVSQU5EJ3MKKwlhbmQgTUFUQ0hfT1BFUkFUT1IncyBpbiBhbiBpbnNuIHRyZWUuCisJKGdlbl9wcm90byk6IE5ldyBmdW5jdGlvbiB0byBwcmludCBvdXQgYSBwcm90b3R5cGUgZm9yIGFuIGluc24uCisJKGdlbl9ub25wcm90byk6IE5ldyBmdW5jdGlvbiB0byBwcmludCBvdXQgYSBkZWNsYXJhdGlvbiB3aXRob3V0IGEKKwlwcm90b3R5cGUuCisJKGdlbl9pbnNuKTogRG9uJ3QgZW1pdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaGVyZSwganVzdCBzYXZlIHRoZQorCWluc24gb24gZWl0aGVyIHRoZSBjYWxsX29ic3RhY2sgaWYgaXQgaXMgY2FsbCBvciBjYWxsX3ZhbHVlLCBvcgorCW5vcm1hbF9vYnN0YWNrIG90aGVyd2lzZS4KKwkobWFpbik6IEluaXRpYWxpemUgY2FsbF9vYnN0YWNrLCBub3JtYWxfb2JzdGFjay4gIEFmdGVyIGFsbCBpbnNucworCWFyZSBwcm9jZXNzZWQsIGVtaXQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdpdGggYW5kIHdpdGhvdXQKKwlwcm90b3R5cGVzLCBkZXBlbmRpbmcgb24gd2hldGhlciBOT19NRF9QUk9UT1RZUEVTLCBhbmQKKwlDQUxMX01EX1BST1RPVFlQRVMgYXJlIGRlZmluZWQuCisKKwkqIHJ0bC5oIChQUk9UTyk6IElmIG5vdCBkZWZpbmVkLCBkZWZpbmUgdG8gZWl0aGVyIGV4cGFuZAorCXByb3RvdHlwZXMgb3IganVzdCBleHBhbmQgdG8gKCksIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCwgdGhlCisJaG9zdCBjb21waWxlciBzdXBwb3J0cyBBTlNJIEMuCisJKE5VTExfUFRSKTogRGVmaW5lIGFzIHZvaWQgKiBpZiB3ZSBoYXZlIHByb3RvdHlwZXMuCisJKGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMpOiBBZGQgcHJvdG90eXBlcyBmb3IgYWxsIGZ1bmN0aW9ucworCXdoZXJlIGl0IGlzIGZlYXNpYmxlIHRvIGRvIHNvLCB1c2luZyB0aGUgUFJPVE8gbWFjcm8uCisJKGZvcmNlX3JlZyk6IEFkZCBkZWNsYXJhdGlvbi4KKwkoZWxpbWluYXRlX2NvbnN0YW50X3Rlcm0pOiBEaXR0by4KKwkob3V0cHV0X2NvbnN0YW50X2RlZik6IElmIHRyZWUuaCBoYXMgYmVlbiBpbmNsdWRlZCwgYWRkIHByb3RvdHlwZS4KKwkoaW1tZWRfcmVhbF9jb25zdCk6IERpdHRvLgorCShpbW1lZF9yZWFsX2NvbnN0XzEpOiBEaXR0by4KKwkobWFrZV90cmVlKTogRGl0dG8uCisKKwkqIHRyZWUuaCAoUFJPVE8pOiBJZiBub3QgZGVmaW5lZCwgZGVmaW5lIHRvIGVpdGhlciBleHBhbmQKKwlwcm90b3R5cGVzIG9yIGp1c3QgZXhwYW5kIHRvICgpLCBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QsIHRoZQorCWhvc3QgY29tcGlsZXIgc3VwcG9ydHMgQU5TSSBDLgorCShOVUxMX1BUUik6IERlZmluZSBhcyB2b2lkICogaWYgd2UgaGF2ZSBwcm90b3R5cGVzLgorCShhbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zKTogQWRkIHByb3RvdHlwZXMgZm9yIGFsbCBmdW5jdGlvbnMKKwl3aGVyZSBpdCBpcyBmZWFzaWJsZSB0byBkbyBzbywgdXNpbmcgdGhlIFBST1RPIG1hY3JvLiAgRG8gbm90CisJZGVmaW5lIHByb3RvdHlwZXMgZm9yIGJ1aWxkX2JpbmFyeV9vcCwgb3IgYnVpbGRfaW5kaXJlY3RfcmVmLAorCXNpbmNlIEdOVSBDIGFuZCBHTlUgRysrIGhhdmUgZGlmZmVyZW50IG51bWJlcnMgb2YgYXJndW1lbnRzLiAgRG8KKwlub3QgZGVmaW5lIHByb3RvdHlwZXMgZm9yIG1ha2VfdHJlZSwgc2luY2UgaXQgdGFrZXMgYSBydHggYXMgdGhlCisJYXJndW1lbnQsIGFuZCBydGwuaCBpcyBpbmNsdWRlZCBhZnRlciB0cmVlLmguCisKK1NhdCBBdWcgIDggMDc6MzY6MTkgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGNwLWxleC5jOiBJbmNsdWRlIHN0ZGxpYi5oIGFuZCBsb2NhbGUuaCBpZiBuZWVkZWQuCisJKGVycm5vKTogRGVjbGFyZSBvbmx5IGlmIGl0IGlzbid0IGEgbWFjcm8uCisJKiBjcC10cmVlLmMgKF9fZXByaW50Zik6IGBsaW5lJyBpcyB1bnNpZ25lZC4KKwkqIGNwLXR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogVXNlIERFQ0xfRVhURVJOQUwgbm90IFRSRUVfRVhURVJOQUwuCisKK0ZyaSBBdWcgIDcgMDA6MTY6MjggMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAocmVhZF9zcGVjcyk6IENhc3QgYXJncyBvZiB4bWFsbG9jIGFuZCByZWFkIHRvIHVuc2lnbmVkLgorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBVc2UgQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUCisJYW5kIEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUIG9ubHkgaWYgZGVmaW5lZC4KKworVGh1IEF1ZyAgNiAyMjowMDoxMyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKHRydWVfZGVwZW5kZW5jZSk6IEFuIHVuY2hhbmdpbmcgcmVhZCBpcyBndWFyYW50ZWVkCisJaW5kZXBlbmRlbnQgb2YgYSBzdG9yZSBvbmx5IGlmIHRoZSBzdG9yZSBpcyBub3QgdW5jaGFuZ2luZy4KKwkoYW50aV9kZXBlbmRlbmNlKTogQWRkZWQgY29tbWVudCBhYm91dCB1bmNoYW5naW5nIHJlYWRzLgorCShzY2hlZF9hbmFseXplXzIpOiBEb24ndCBpZ25vcmUgdW5jaGFuZ2luZyByZWFkcywgdGhleSBtYXkgYmUKKwlkZXBlbmRlbnQgb24gdW5jaGFuZ2luZyB3cml0ZXMuCisKKyAJKiBzcGFyYy5tZDogQ29ycmVjdCBERUZJTkVfU1BMSVRzIGFkZGVkIEp1bCAyNy4gIFRoZXkgd291bGQKKwlvdmVyd3JpdGUgdGhlIGlucHV0IHJlZ2lzdGVyIGlmIGl0IHdhcyB0aGUgc2FtZSBhcyB0aGUgcmVzdWx0IHJlZy4KKworVGh1IEF1ZyAgNiAxNjoyNTo0OCAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9GSUxFX1NUQVJUKTogSWYgcHJvZmlsaW5nIElNUE9SVCAiX21jb3VudCIgaW5zdGVhZCBvZiAKKwkiX19nY2NfbWNvdW50Ii4KKworCSogVGhlc2UgY2hhbmdlcyBhbGxvdyB0aGUgUEEgdG8gbWFrZSB1c2Ugb2YgdGhlIEJTUyBzdWJzcGFjZS4gIFRoZXkKKwlyZXF1aXJlIHlvdSB0byB1c2UgdGhlIEhQVVggYXNzZW1ibGVyIG9yIGEgZml4ZWQgdmVyc2lvbiBvZiBwYS1nYXMKKwkoYXZhaWxhYmxlIHNvb24gb24gamFndWFyLmNzLnV0YWguZWR1KS4KKwkqIHBhLmggKFRBUkdFVF9TV0lUQ0hFUyk6IE5ldyBzd2l0Y2ggIm5vLWJzcyIgd2hpY2ggZm9yY2VzIGdjYyBub3QKKwl0byBtYWtlIHVzZSBvZiB0aGUgYnNzIHN1YnNwYWNlLiAgKEZvciBjb21wYXRhYmlsaXR5IHdpdGggb2xkIGJ1Z2d5CisJdmVyc2lvbnMgb2YgcGEtZ2FzLikKKwkoQVNNX0ZJTEVfU1RBUlQpOiBBZGQgJEJTUyQgc3Vic3BhY2UuCisJKEJTU19TRUNUSU9OX0FTTV9PUCk6IE5ldyBtYWNybyB3aGljaCB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIHN3aXRjaAorCXRvIHRoZSBic3Mgc3Vic3BhY2UuCisJKEVYVFJBX1NFQ1RJT05TKTogRGVmaW5lIGluX2JzcyBhcyBhbiBleHRyYSBzZWN0aW9uLgorCShFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IERlZmluZSAiYnNzX3NlY3Rpb24iIGZ1bmN0aW9uIHRvIHN3aXRjaAorCWludG8gdGhlIGJzcyBzdWJzcGFjZS4KKwkoQVNNX09VVFBVVF9DT01NT04pOiBJZiAhVEFSR0VUX05PX0JTUywgdGhlbiBwbGFjZSBjb21tb25zIGludG8gdGhlCisJYnNzIHN1YnNwYWNlLgorCShBU01fT1VUUFVUX0xPQ0FMKTogTGlrZXdpc2UuCisKK1RodSBBdWcgIDYgMTM6MDQ6MTYgMTk5MiAgVGltIE1vb3JlICAobW9vcmVAZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIGd2YXJhcmdzLmggOiBDaGVjayBocDgwMCBzeW1ib2wgdG9vIGZvciB0aGUgaHBwYSBjYXNlLgorCSogdmEtcGEuaCA6IFJld3JpdGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGhwdXguCisJKiBwYS5jIChocHBhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBSZXdyaXRlLgorCShzZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogQnVnIGZpeC4KKwkoYXJpdGgzMl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCitXZWQgQXVnICA1IDExOjIzOjA1IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmggKEVYVFJBX1NFQ1RJT05TLCBzdnIzKTogRGVsZXRlIGVtcHR5IGRlZmluaXRpb25zIGZvcgorCUNUT1JTX1NFQ1RJT05fRlVOQ1RJT04gYW5kIERUT1JTX1NFQ1RJT05fRlVOQ1RJT04uICBBZGQgaW5fY3RvcnMKKwlhbmQgaW5fZHRvcnMuCisKK1R1ZSBBdWcgIDQgMjM6NTQ6MTUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBGb3Igb3V0cHV0IG9mIGFzIHdoZW4gLWMgaXMgbm90IHVzZWQsCisJdXNlICVnLCByYXRoZXIgdGhhbiAlYiwgYmVjYXVzZSB0aGUgZmlsZSBpcyBnb2luZyB0byBiZSBkZWxldGVkCisJYW55d2F5LgorCitUdWUgQXVnICA0IDIwOjMwOjEyIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2FsbCBidWlsZF90eXBlX3ZhcmlhbnQgdG8gc2V0IGNvbnN0CisJYW5kIHZvbGF0aWxlIGZsYWdzLCBzaW5jZSBidWlsZF9yZWZlcmVuY2VfdHlwZSBkb2VzIG5vdCB0YWtlIHRob3NlCisJYXJndW1lbnRzLgorCisJKiBjcC1wYXJzZS55ICAoYXR0cmlidXRlIHByb2Nlc3NpbmcpOiBDb3JyZWN0bHkgY2FsbCB0cmVlX2NvbnMgd2l0aAorCXRocmVlIGFyZ3VtZW50cywgcGFzc2luZyBOVUxMX1RSRUUgZm9yIHRoZSBjaGFpbiBhcmd1bWVudC4KKworCSogY3AtdHJlZS5oIChoYXNoX2NoYWlub24pOiBBZGQgZGVjbGFyYXRpb24gZm9yIHRoaXMgZnVuY3Rpb24uCisJKGJ1aWxkX3ZpcnR1YWxfaW5pdCk6IERpdHRvLgorCShidWlsZF92YmFzZV9kZWxldGUpOiBEaXR0by4KKwkoYnVpbGRfdmJhc2VfdnRhYmxlc19pbml0KTogRGl0dG8uCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcl8xKTogUGFzcyAwIGFzIHRoaXJkIGFyZ3VtZW50IHRvCisJYnVpbGRfdW5hcnlfb3AuCisJKGJ1aWxkX21vZGlmeV9leHByKTogRGl0dG8uCisKK1R1ZSBBdWcgIDQgMTg6MTA6NDYgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0B3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLXRyZWUuaCwgdHJlZS5oOiAgTW92ZWQgZGVmaW5pdGlvbnMgb2YgVFJFRV9WSUFfKiBpbnRvIHRyZWUuaCBmb3IKKwljb25zaXN0ZW5jeS4KKworVHVlIEF1ZyAgNCAxNzozNTozMiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKKworCUNvbXBsZXRlIDEwdGggRlNGIDwtLS0+IEN5Z251cyBtZXJnZS4KKworCVR1ZSBBdWcgIDQgMTI6NTg6NTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHB1c2h0YWcpOiBEb24ndCBzZXQgREVDTF9JR05PUkVEX1AgZm9yIGJpbmRpbmcKKwlsYXllciBtYXJrZXJzLCB1c2Ugb25seSBERUNMX1NPVVJDRV9MSU5FID09IDAsIGFzIG90aGVyd2lzZSwKKwlpdCBtZXNzZXMgdXAgZGJ4b3V0LmMuCisKKwlUdWUgQXVnICA0IDExOjU5OjM2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVR1ZSBBdWcgIDQgMTM6NDM6NTUgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxsIG9mCisJYXNzZW1ibGVfZXh0ZXJuYWwuCisKKwlUdWUgQXVnICA0IDEwOjIzOjAyIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IEFueSBraW5kIG9mIERFQ0wgc2hvdWxkIGJlIGdvb2QgZW5vdWdoCisJYXQgZ2xvYmFsIHNjb3BlLCBub3QganVzdCBhIFRFTVBMQVRFX0RFQ0wuCisKKwlTdW4gQXVnICAyIDIxOjEyOjU1IDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jOiBjaGFuZ2UgZGVmaW5pdGlvbiBvZiBfX2VwcmludGYgdG8gbWF0Y2ggbGliZ2NjMi5jIGFuZAorCWFzc2VydC5oCisKKwlGcmkgSnVsIDMxIDE2OjUzOjI2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZSAoYnJlYWtfb3V0X2NhbGxzKTogT25seSBtYWtlIG9ueSBjb3B5IG9mIGEgbm9kZSBvbgorCSdzJyBhbmQgJ2UnIG5vZGVzLiAgSGFuZGxlICdyJyBqdXN0IGxpa2UgJ3MnIGFuZCAnZScgYmVjYXVzZQorCW5vZGVzIG9mIHR5cGUgJ3InIGNhbiBiZSBvZiBkaWZmZXJlbnQgc2l6ZXMgKHRoZSBvbGQgY29kZQorCXdvdWxkIGRvIHRoZSB3cm9uZyB0aGluZyBmb3IgYSBDT01QT05FTlRfUkVGKS4KKworCVRodSBKdWwgMzAgMTE6NDY6MTQgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IFNldCB0cmFuc3BhcmVudCBiYXNldHlwZXMgKHRob3NlIHcvbworCWN0b3JzKSBhcyBtYXJrZWQgaWYgd2UgbmVlZCB0byB3YWxrIHVwIHRoZSB0cmVlIHRvIGZpbmQgYSBjdG9yLgorCisJV2VkIEp1bCAyOSAwMzoyNTo1MSAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSW4gU0NPUEVfUkVGIGNhc2UsIHNvcnQgb3V0IHZpc2liaWxpdHkKKwlkZWNsYXJhdGlvbnMgZnJvbSBvdGhlciBkZWNsYXJhdGlvbnMsIHNpbmNlIHRoZSBjb21waWxlciB3aWxsCisJdWx0aW1hdGVseSBoYW5kbGUgdGhlbSBkaWZmZXJlbnRseS4gIFRoaXMgaXMgYSBwYXJ0IG9mIHRoZSBzb2x1dGlvbgorCXRvIHA1MjUuCisJKGZpbmlzaF9tZXRob2QpOiBUZW50YXRpdmUgKGFuZCBwcm9iYWJseSB3cm9uZykgZml4IGZvciBjYXJyeWluZworCWFsb25nIGlubGluZSBtZXRob2RzIGRlbGNhcmVkIHdpdGhpbiBhIGNsYXNzIHRoYXQgcmVhbGx5IGJlbG9uZyB0bworCW5lc3RlZCBjbGFzc2VzIG9mIHRoZSBjbGFzcy4gIFRoaXMgbWF5IGJlIG1vcmUgb2YgdGhlIHNvbHV0aW9uIHRvCisJcDUyNS4KKworCSogY3AtaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogVXNlIElERU5USUZJRVJfVFlQRV9WQUxVRSBvZiBDTkFNRQorCXdoZW4gQ1VSUkVOVF9DTEFTU19ERUNMIGlzIDAuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBnaXZlIGVycm9ycyBmb3IgVFlQRV9ERUNMcyBpbiBhCisJc3RydWN0IHRoYXQgYXJlIHJlYWxseSBvbmx5IG1lYW50IGZvciBGSUVMRF9ERUNMcy4KKworCVR1ZSBKdWwgMjggMjM6MzY6NTggMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6ICBEbyBub3QgY29yZSBkdW1wIG9uIHBhcnNlIGVycm9ycy4KKworCVR1ZSBKdWwgMjggMjI6NDM6MTIgMTk5MiAgTWFyayBFaWNoaW4gIChlaWNoaW5AY3lnbnVzLmNvbSkKKworCSogY3AtcHQuYyAoZW5kX3RlbXBsYXRlX2luc3RhbnRpYXRpb24pIFlZREVCVUcgaXMgbm93IGRlZmluZWQgaW4KKwljcC1wYXJzZS5oIC0tIHNvIGRvbid0IGFzc3VtZSB0aGF0IGl0J3MgLTIgKHNpbmNlIHVuZGVyIGJ5YWNjIGl0IGlzCisJLTEgYW55d2F5LikgaW9tYW5pcC5DIGNvbXBpbGVzIGFnYWluLgorCisJVHVlIEp1bCAyOCAyMjozMzo0NiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiAgQWxsb3cgY2FzdCB0byBhcnJheSB0eXBlIGluCisJc29tZSBzaXR1YXRpb25zIHRvIGJlIG1vcmUgY29tcGF0aWJsZSB3aXRoIENmcm9udC4KKworCVR1ZSBKdWwgMjggMjI6MDU6MTQgMTk5MiAgTWFyayBFaWNoaW4gIChlaWNoaW5AY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAocHJpbnRfcGFyc2Vfc3RhdGlzdGljcyk6IGRvbid0IHJlZmVyZW5jZSBUT0tFTl9MRU5HVEgKKwlvciBSRURVQ0VfTEVOR1RIIHVubGVzcyBHQVRIRVJfU1RBVElTVElDUyBpcyBzZXQuIChZWURFQlVHIGFsb25lIGlzCisJbm90IGEgc3VmZmljaWVudCBjb25kaXRpb24uKQorCisJVHVlIEp1bCAyOCAxOToxODozMCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuYyAoYnJlYWtfb3V0X2NhbGxzKTogRG9uJ3QgZG8gYW55dGhpbmcgc3BlY2lhbCB0bworCVNBVkVfRVhQUnMsIGFzIHRoZXkgY2Fubm90IGNvbnRhaW4gY2FsbHMgdGhhdCB3b3VsZCBuZWVkCisJYnJlYWtpbmcgb3V0LiAgVGhpcyBmaXhlcyBhIHByb2JsZW0gaW50cm9kdWNlZCBvbiBKdWwgMTUsIGJ5CisJUm9uIEd1aWxtZXR0ZS4KKworCU1vbiBKdWwgMjcgMTY6NTU6NTIgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjKys6ICBGaXggZXJyb3JzIGludHJvZHVjZWQgYnkgcm1zLiAgQnVsbGV0LXByb29mIGhhbmRsaW5nCisJb2YgYXJndW1lbnRzIHdpdGggZnVubnkgdGhpbmdzIGluIHRoZW0gc3VjaCBhcyBuZXdsaW5lcywKKwlzcGFjZXMsIHRhYnMsIHNpbmdsZSBxdW90ZXMsIGRvdWJsZSBxdW90ZXMsIGV0Yy4uLgorCisJTW9uIEp1bCAyNyAxNTowMzoyMyAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogRXh0cmFjdCBzaXplIG9mIHR5cGUgZXZlbiBmb3IKKwlkZXN0cnVjdG9ybGVzcyB0eXBlcywgc28gdmFsdWUgY2FuIGJlIGNvbXB1dGVkIHRvIHBhc3MgdG8gZGVsZXRlCisJb3BlcmF0b3IuCisKKwkqIEJsdWRnZW9uIGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiBjb2RlIGludG8gbGVhdmluZyB0ZW1wbGF0ZXMKKwlhbG9uZSwgdW50aWwgd2UndmUgZmlndXJlZCBvdXQgaG93IHRvIGhhbmRsZSB0aGVpciBpbnRlcmFjdGlvbgorCXByb3Blcmx5OgorCSogY3AtcGFyc2UueSAodGVtcGxhdGVfaW5zdGFudGlhdGVfb25jZSk6IFRlbXBvcmFyaWx5IHNldCBpbnRlcmZhY2UKKwlmbGFncyB0byBgdW5rbm93bicgd2hpbGUgcHJvY2Vzc2luZyBtZW1iZXIgdGVtcGxhdGVzLgorCSogY3AtZGVjbC5jIChncm9rZm5kZWNsKTogRXZlbiBpZiBjbGFzcyB2dGFibGUgaXMgZ2V0dGluZyB3cml0dGVuCisJb3V0LCByZWdhcmRsZXNzIG9mIGludGVyZmFjZSBzZXR0aW5nIG9mIGNsYXNzIGFuZCB3cml0ZV92aXJ0dWFscworCWZsYWcsIGRvbid0IGZvcmNlIHZpcnR1YWwgZGVzdHJ1Y3RvciBvZiB0ZW1wbGF0ZSBjbGFzcyB0byBiZSBwdWJsaWMuCisJKiBjcC10cmVlLmggKHN0cnVjdCBwZW5kaW5nX2lubGluZSk6IE5ldyBmaWVsZCBgaW50ZXJmYWNlJy4KKwkqIGNwLWxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBSZXN0b3JlIGludGVyZmFjZSBmbGFncyBmcm9tIHN0b3JlZAorCXZhbHVlcywgcmF0aGVyIHRoYW4gY2FsbGluZyBleHRyYWN0X2ludGVyZmFjZV9pbmZvLgorCShwcm9jZXNzX25leHRfaW5saW5lKTogTGlrZXdpc2UsIGlmIG1vcmUgcGVuZGluZyBpbmxpbmVzIGV4aXN0OyBlbHNlCisJZG8gY2FsbCBleHRyYWN0X2ludGVyZmFjZV9pbmZvLgorCShyZWluaXRfcGFyc2VfZm9yX21ldGhvZCk6IFNhdmUgYXdheSBpbnRlcmZhY2UgZmxhZ3MuCisJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IERpdHRvLgorCSogY3AtcHQuYyAoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBTZXQgc2F2ZWQgaW50ZXJmYWNlIGZsYWcgdG8KKwlgdW5rbm93bicuCisJKGVuZF90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogU2V0IENMQVNTVFlQRV9JTlRFUkZBQ0VfVU5LTk9XTi4KKworCSogY3AtcHQuYyAoaW5zdGFudGlhdGVfbWVtYmVyX3RlbXBsYXRlcyk6IERlbGV0ZWQgc29tZSB1bnVzZWQgY29kZS4KKworCSogY3AtZGVjbC5jIChncm9rZm5kZWNsKTogTWFrZSBjbGFzcyBtZXRob2RzIHB1YmxpYyBpZgorCWBpbXBsZW1lbnRhdGlvbicgcHJhZ21hIGlzIHNldC4KKworCSogY3AtcHQuYyAocGVuZGluZ190ZW1wbGF0ZXMpOiBObyBsb25nZXIgZXhwb3J0ZWQuCisJKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogRGl0dG8uCisJKiBjcC1wYXJzZS55IChwcmltYXJ5KTogRG9uJ3QgY2hlY2sgaXQ7IGFsd2F5cyBjYWxsCisJZG9fcGVuZGluZ190ZW1wbGF0ZXMuCisKKwlGcmkgSnVsIDI0IDE0OjIyOjM5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZywgZmluaXNoX2Z1bmN0aW9uKSwKKwljcC1tZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZCwgYnVpbGRfb3BmbmNhbGwpLCBjcC1pbml0LmMKKwkoYnVpbGRfeF9kZWxldGUsIGJ1aWxkX2RlbGV0ZSwgYnVpbGRfdmVjX2RlbGV0ZSk6ICBBZGQgc3VwcG9ydAorCWZvciB0d28gYXJndW1lbnQgZGVsZXRlIHRvIHN1cHBvcnQgQVJNIDEyLjUuICBJbiBzb21lIGNhc2VzLAorCXRoZSBhcmd1bWVudCBpcyBzbWFsbGVyIHRoYW4gaXQgc2hvdWxkIGJlLgorCisJVGh1IEp1bCAyMyAwODoxMjoxNiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jOiAgVXBkYXRlIHdpZGUgY2hhcmFjdGVyIGhhbmRsaW5nIGZyb20gYy1sZXguYyBhbmQgbWFrZQorCXRoZSB0eXBlIG9mIG11bHRpY2hhcmFjdGVyIGNvbnN0YW50cyBiZSBpbnQgcGVyIEFOU0kgQysrIFdQLgorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nLCBncm9rZGVjbGFyYXRvciksIGNwLWxleC5oLAorCWdwbHVzLmdwZXJmLCBjcC1sZXguYyAoaW5pdF9sZXgpLCBjcC1kZWNsMi5jIChncm9rdHlwZWZpZWxkKSwKKwljcC1tZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IEFkZCBzdXBwb3J0IGZvciB3Y2hhcl90IGFzIGEKKwlkaXN0aW5jdCB0eXBlIHRvIGNvbmZvcm0gdG8geDNqMTYgd29ya2luZyBwYXBlci4KKwkqIGNwLWhhc2guaDogUmVnZW5lcmF0ZWQuCisKKwlXZWQgSnVsIDIyIDE3OjQxOjA4IDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluQGN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHN0cnVjdHNwKTogbm90ZV9nb3Rfc2VtaWNvbG9uIHdhcyBjYWxsZWQgYmVmb3JlCisJZmluaXNoX3N0cnVjdCAod2hpY2ggYWx3YXlzIGNsZWFycyB0aGUgZ290X3NlbWljb2xvbiBiaXQuKSBIb3dldmVyLAorCW5vdGVfZ290X3NlbWljb2xvbiB3YXMgb25seSBjYWxsZWQgaWYgeXljaGFyPT0nOycsIHdpdGhvdXQgY2hlY2tpbmcKKwlmb3IgWVlFTVBUWS4KKworCVR1ZSBKdWwgMjEgMjI6NTk6MzIgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBJZiB3ZSBoYXZlIGEgcmVjdXJzaXZlIGNhbGwgdG8gYW4KKwlvdGhlcndpc2UgaW5saW5lIGZ1bmN0aW9uLCBjbGVhciBUUkVFX0VYVEVSTkFMIHNvIHRoZSB3aG9sZSBmdW5jdGlvbgorCWlzIHdyaXR0ZW4gdG8gdGhlIGFzbSBmaWxlLgorCisJVHVlIEp1bCAyMSAwNTozMToxMCAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChzdGFydF90eXBlX21ldGhvZCk6IERlbGV0ZWQgdW51c2VkIGRlY2xhcmF0aW9uLgorCisJKiBjcC1wdC5jICh0c3Vic3QpOiBGaXggcHJvcGFnYXRpb24gb2YgcXVhbGlmaWVycyBpbiBzZXZlcmFsIGNhc2VzLgorCisJKiBjcC1wdC5jICh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IExvb2sgZm9yIG1hdGNoZXMgdGhhdCBkaWZmZXIKKwlvbmx5IGluIHJldHVybiB0eXBlLgorCisJKiBjcC1wdC5jICh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IFJld3JpdGUgbmFtZSBvZgorCXR5cGUtY29udmVyc2lvbiBvcGVyYXRvcnMsIGluIGNhc2UgdGhlIHRhcmdldCB0eXBlIGludm9sdmVzIGEKKwl0ZW1wbGF0ZSBwYXJhbWV0ZXIuCisKKwlNb24gSnVsIDIwIDAzOjM1OjQ0IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGFkZF92aXJ0dWFsX2Z1bmN0aW9uKTogRG9uJ3QgY3Jhc2ggaWYKKwlDVVJSRU5UX0NMQVNTX1RZUEUgaXMgTlVMTF9UUkVFLgorCSogY3AtZGVjbDIuYyAoZ3Jva2ZpZWxkKTogRGl0dG8uCisKK1R1ZSBBdWcgIDQgMTU6MzY6MDcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEb24ndCBkbyBleHBhbmRfZGVjbF9pbml0IGZvciBGVU5DVElPTl9ERUNMLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogTWVyZ2VkIGNvbnN0IGFuZCB2b2xhdGlsZSBmbGFncworCW9mIGluY29taW5nIHR5cGVzLgorCitUdWUgQXVnICA0IDExOjE1OjQ3IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiAgSWYgYml0IGZpZWxkIGlzIG9mIGFuIHVuc2lnbmVkCisJdHlwZSB0aGF0IHByb21vdGVzIHRvIGludCwgcHJvbW90ZSBpdCB1bnNpZ25lZCBpZiB0cmFkaXRpb25hbAorCW9yIGlmIGl0IGlzIHRoZSBzYW1lIHNpemUgYXMgaW50LgorCShzdGFydF9mdW5jdGlvbik6ICBEaXR0byBmb3IgZnVuY3Rpb24gcmV0dXJuIHZhbHVlLgorCSogYy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogIERpdHRvIC0tIGZpeCBidWcgdGhhdAorCXByb21vdGVzIHNob3J0IHRvIHVuc2lnbmVkIGlmIHNpemVvZihzaG9ydCkgPT0gc2l6ZW9mKGludCkuCisKK1R1ZSBBdWcgIDQgMTU6MTI6NTEgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIHN2cjMuaCAoVVNJTkdfU1ZSM19IKTogRGVmaW5lLgorCSogc3ZyNC5oIChVU0lOR19TVlI0X0gpOiBEZWZpbmUuCisJKiBhb3V0b3MuaCAoVVNJTkdfQU9VVE9TX0gpOiBEZWZpbmUuCisJKiBtODhrLmggKEVYVFJBX1NFQ1RJT05TKTogQmFzZSBvbiB0aGUgYWJvdmUgZGVmaW5lcy4KKworVHVlIEF1ZyAgNCAxNDoyMjo0NCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGRieG91dC5jOiBJbmNsdWRlIG91dHB1dC5oLgorCitUdWUgQXVnICA0IDAwOjIxOjA2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtY29tbW9uKTogSW5zdGFsbCBwcm90b2l6ZSBhbmQgcmVsYXRlZCBmaWxlcworCWlmIHRoZXkgd2VyZSBjb21waWxlZC4KKwkoaW5zdGFsbC1wcm90byk6IFRhcmdldCBkZWxldGVkLgorCShkYnhvdXQubyk6IERlcGVuZCBvbiBvdXRwdXQuaC4KKworTW9uIEF1ZyAgMyAwMjowNDowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBUZXN0IG9ubHkgY2FuX3JlYWNoX2VuZCBmb3IgdGhlIHdhcm5pbmcKKwlhYm91dCByZWFjaGluZyB0aGUgZW5kIG9mIGEgbm9uLXZvaWQgZnVuY3Rpb24uCisJKHBvcGxldmVsKTogSWYgYXBwYXJlbnRseSBuZXN0ZWQgaW5saW5lIGZ1bmN0aW9uIGhhcworCURFQ0xfQUJTVFJBQ1RfT1JJR0lOLCBkb24ndCBvdXRwdXQgaXQ7IHByb3BhZ2F0ZSBUUkVFX0FERFJFU1NBQkxFLgorCShwdXNoZGVjbCk6IFdoZW4gY29weWluZyBpbmxpbmUgZGV0YWlscyBpbnRvIGFuIGV4dGVybiBkZWNsLAorCWNvcHkgREVDTF9SRVNVTFQsIFRSRUVfQVNNX1dSSVRURU4uICBTZXQgREVDTF9BQlNUUkFDVF9PUklHSU4uCisKKwkqIGMtcGFyc2UueSAoZGF0YWRlZik6IEZvciBlbXB0eSBkZWNsYXJhdGlvbiwgdXNlIHBlZHdhcm4uCisJKiBvYmpjLXBhcnNlLnkgKGRhdGFkZWYsIG15ZGVjbCk6IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jcm9zcy10b29scyk6IEluc3RhbGwgbm0gZnJvbSB0b29sZGlyLgorCisJKiB2YXJhc20uYzogSW5jbHVkZSByZWFsLmguCisJKiBzcGFyY3Y0Lmg6IERvbid0IGluY2x1ZGUgcmVhbC5oLgorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogRG8gcmVjdXJzZSBpbiBzZXR0aW5nIG9mIGdsb2JhbCBoYXJkIHJlZy4KKwlEbyBzZXQgcmVnX25leHRfdXNlIGZvciBnbG9iYWwgaGFyZCByZWcuCisKKwkqIG9iamMtcGFyc2UueSAocmVzZXJ2ZWRfZGVjbHNwZWNzLCBkZWNsbW9kcyk6IENoYW5nZSBhcyBpbiBjLXBhcnNlLnkuCisKK01vbiBBdWcgIDMgMDM6MjQ6MTcgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtcGFyc2UueSAocmVzZXJ2ZWRfZGVjbHNwZWNzKTogV2FybiBpZiBzdG9yYWdlIGNsYXNzIG9jY3VycyBoZXJlLgorCShkZWNsbW9kcyk6IFdhcm4gaWYgc3RvcmFnZSBjbGFzcyBpcyBub3QgZmlyc3QuCisKK1N1biBBdWcgIDIgMjE6NDQ6MzQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZW1pdC1ydGwuYyAoZ2VuX3J0eCwgY2FzZSBSRUcpOiBEb24ndCB1c2UgZnJhbWVfcG9pbnRlcl9ydHggb3IKKwlhcmdfcG9pbnRlcl9ydHggaWYgcmVsb2FkIGlzIGluIHByb2dyZXNzLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIHJlcGxhY2luZyBqdW1wcyB3aXRoIGxvZ2ljYWwKKwlleHByZXNzaW9ucywgdXNlIHByZXNlcnZlX3N1YmV4cHJlc3Npb25zX3AuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVXNlIEhPU1RfV0lERV9JTlQgaW5zdGVhZCBvZiBpbnQgd2hlbgorCWNvbXBhcmluZyBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBjb25zdGFudC4KKwkqIGZsb3cuYyAoZmluZF91c2VfYXNfYWRkcmVzcyk6IExpa2V3aXNlOyBhbHNvIHdoZW4gcmV0dXJuaW5nIGludC4KKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQ2FzdCAtMSB0byAoSE9TVF9XSURFX0lOVCkKKwlmaXJzdC4KKworCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBVc2UgSE9TVF9XSURFX0lOVCBpbnN0ZWFkIG9mIGludCB3aGVuIGNhc3RpbmcKKwlwb2ludGVycyB0byBpbnRlZ2Vycy4KKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IExpa2V3aXNlLgorCSogdHJlZS5jIChUWVBFX0hBU0gpOiBMaWtld2lzZS4KKwkqIHZhcmFzbS5jIChjb25zdF9oYXNoLCBTWU1IQVNIKTogTGlrZXdpc2UuCisKKwkqIHRvcGxldi5jOiAobWFpbik6IERvbid0IGNhc3QgcG9pbnRlcnMgdG8gaW50IHVubmVjZXNzYXJpbHkuCisKKwkqIHRyZWUuYzogSW5jbHVkZSBmdW5jdGlvbi5oIGFmdGVyIHRyZWUuaC4KKworCSogcnRsLmggKE5PVEVfQkxPQ0tfTlVNQkVSKTogQ2hhbmdlIGRlZmluaXRpb24gdG8gc2ltcGxlciBmb3JtLgorCShTRVRfTk9URV9CTE9DS19OVU1CRVIpOiBEZWxldGVkLgorCSh4cmVhbGxvYywgb2JhbGxvYywgcGVybWFsbG9jKTogRGVjbGFyZSBoZXJlIGFzIHdlbGwgYXMgaW4gdHJlZS5oLgorCSogZnVuY3Rpb24uYyAoaWRlbnRpZnlfYmxvY2tzLCByZW9yZGVyX2Jsb2Nrcyk6IERvbid0IHVzZQorCVNFVF9OT1RFX0JMT0NLX05VTUJFUi4KKworCSogdmFyYXNtLmMgKHN0cnVjdCBhZGRyX2NvbnN0KTogVXNlIEhPU1RfV0lERV9JTlQgZm9yIE9GRlNFVC4KKworCSogY29tYmluZS5jIChyZWdfc2lnbl9iaXRfY29waWVzKTogTmV3IHZhcmlhYmxlLgorCShjb21iaW5lX2luc3RydWN0aW9ucyk6IEluaXRpYWxpemUgaXQuCisJKHNldF9zaWduaWZpY2FudCk6IFNldCBpdC4KKwkodHJ5X2NvbWJpbmUpOiBTZXQgc3Vic3RfbG93X2N1aWQgaW1tZWRpYXRlbHkgYmVmb3JlIGNhbGxpbmcgYHN1YnN0JworCXRvIHRoZSBJTlNOX0NVSUQgb2YgdGhlIGxvd2VzdCBpbnNuIGludm9sdmVkIGluIHRoZSBjYWxsLgorCUNoYW5nZSBYT1Igd2l0aCBvdXQtb2YtcmFuZ2UgY29uc3RhbnQgdG8gKG5vdCAoeG9yIC4uLikpLgorCUNhbGwgYm90aCBzcGxpdF9pbnNucyBhbmQgZmluZF9zcGxpdF9wb2ludDsgcGFzcyBleHRyYSBwYXJtIHRvCisJZmluZF9zcGxpdF9wb2ludC4KKwlSZWNvcmQgSTJERVNUJ3MgdmFsdWUgaWYgSTIgbm93IHNldHMgaXQ7IHNpbWlsYXJseSBmb3IgSTFERVNULgorCShmaW5kX3NwbGl0X3BvaW50KTogQWRkIG5ldyBhcmcgSU5TTi4KKwlJZiBBTkQnaW5nIHdpdGggYSBsYXJnZSBzaW5nbGUtYml0IGNvbnN0YW50IGFuZCB3ZSBvbmx5IGNhcmUgYWJvdXQKKwllcXVhbGl0eSB3aXRoIHplcm8sIHJlcGxhY2Ugd2l0aCBiaXQgZXh0cmFjdGlvbi4KKwlNYWtlIHR3byBzaGlmdHMgZm9yIFpFUk9fRVhUUkFDVHMgdW5sZXNzIHZlcnkgbmFycm93LgorCShzdWJzdCk6IE1vdmUgUkVTVEFSVCBsYWJlbCBlYXJsaWVyLgorCUlmIHdlIGhhdmUgYSBzaW1wbGUgb3BlcmF0aW9uIGFwcGxpZWQgdG8gSUZfVEhFTl9FTFNFLCBtb3ZlCisJdGhlIG9wZXJhdGlvbiBpbnNpZGUgdGhlIHR3byBhcm1zLgorCShzdWJzdCwgY2FzZSBTVUJSRUcpOiBVc2UgZm9yY2VfdG9fbW9kZS4KKwkoc3Vic3QsIGNhc2UgTk9UKTogQ2hhbmdlIChub3QgKHhvciBYIEMpKSB0byAoeG9yIFggfkMpLgorCShzdWJzdCwgY2FzZSBORUcpOiBSZW1vdmUgb3B0aW1pemF0aW9uIG9mIChuZWcgKGFicyBYKSk7IHJlZHVuZGFudC4KKwlDb252ZXJ0IChuZWcgKHhvciBBIDEpKSB0byAocGx1cyBBIC0xKSBpZiBBIGlzIGtub3duIHRvIGJlIDAgb3IgMS4KKwkoc3Vic3QsIGNhc2UgSUZfVEhFTl9FTFNFKTogU2ltcGxpZnkgaWYgYW4gYXJtIGNvbnRhaW5zIGEgcmVnaXN0ZXIKKwliZWluZyB0ZXN0ZWQgYnkgc3Vic3RpdGluZyB0aGUga25vd24gdmFsdWUuCisJUHV0IGNvbnN0YW50IGludGVnZXIgaW4gbGFzdCBhcm0gaXMgY2FuIHJldmVyc2UgY29tcGFyaXNvbi4KKwkoc3Vic3QsIGNhc2UgU0VUKTogVXNlIGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lLgorCShzdWJzdCwgY2FzZSBBTkQpOiBNYWtlIElGX1RIRU5fRUxTRSB3aGVuIGFwcHJvcHJpYXRlLgorCShzdWJzdCwgY2FzZSBJT1IpOiAoaW9yIEEgQykgY2FuIHNvbWV0aW1lcyBiZSBqdXN0IEMuCisJKHN1YnN0LCBjYXNlIFhPUik6IEdvIGJhY2sgYW5kIHJlc3RhcnQgd2hlbiBjYW5vbmljYWxpemluZy4KKwkoc3Vic3QsIGNhc2UgQUJTKTogVXNlIG51bV9zaWduX2JpdF9jb3BpZXMuCisJKG1ha2VfZXh0cmFjdGlvbik6IENhbGwgZm9yY2VfdG9fbW9kZS4KKwkobWFrZV9jb21wb3VuZF9vcGVyYXRpb24pOiBMb29rIGF0IG9wdGFicyByYXRoZXIgdGhhdCBleHBsaWNpdGx5CisJY2hlY2tpbmcgZm9yIG9wZXJhdGlvbnMgYW5kIGFzc3VtaW5nIHdlIGhhdmUgU0ltb2RlLgorCUhhbmRsZSAoYXNoaWZ0cnQgKE9QIChhc2hpZnQgZm9vIEMxKSBDMykgQzIpLgorCShmb3JjZV90b19tb2RlKTogT25seSBjaGFuZ2UgbW9kZSBvZiBhcml0aG1ldGljIGlmIG9wdGFiIHNheXMgd2UKKwloYXZlIG9wZXJhdGlvbiBpbiB0aGF0IG1vZGUuCisJUmVtb3ZlIHVubmVlZGVkIEFTSElGVFJUOyBhZGQgaGFuZGxpbmcgZm9yIElGX1RIRU5fRUxTRS4KKwkoc2lnbmlmaWNhbnRfYml0cywgY2FzZSBORUcpOiBDYWxsIG51bV9zaWduX2JpdF9jb3BpZXMuCisJKHNpZ25pZmljYW50X2JpdHMsIGNhc2UgQUJTLCBjYXNlIFtVU117TUlOLE1BWH0sIElGX1RIRU5fRUxTRSk6IE5ldy4KKwkobnVtX3NpZ25fYml0X2NvcGllcyk6IE5ldyBmdW5jdGlvbi4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBSZW1vdmUgQVNISUZUUlQgaWYgdmFsdWUgaXMga25vd24gLTEgb3IgMC4KKwlVc2UgbnVtX3NpZ25fYml0X2NvcGllcyB0byBzaW1wbGlmeSAoYXNoaWZ0cnQgKGFzaGlmdCAuLi4pIC4uLikKKwlhbmQgKGFzaGlmdHJ0IChuZWcgLi4uKSAuLi4pLgorCVJlbW92ZSBub3cgcmVkdW5kYW50IGNhc2Ugd2hlbiBWQVJPUCBpcyBhIFBMVVMuCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBJZiBBIGlzIGtub3duIHRvIGJlIC0xIG9yIDAsIEEgIT0gLTEgaXMgQSA9PSAwLgorCVNpbXBsaWZ5IHVuc2lnbmVkIHRlc3RzIHRoYXQgcmVhbGx5IGNoZWNrIHRoZSBzaWduIGJpdC4KKwkoc2ltcGxpZnlfY29tcGFyaXNvbiwgY2FzZSBBU0hJRlRSVCk6IENvbnZlcnQgdG8gTFNISUZUUlQgaWYgCisJZXF1YWxpdHkgY29tcGFyaXNvbiB3aXRoIHplcm8uCisJKGdldF9sYXN0X3ZhbHVlKTogQ2hlY2sgaWYgdGhlIGRlc2lyZWQgcmVnaXN0ZXIgaXMgc2V0IGluIHRoZQorCWluc24gYmVmb3JlIHRoZSBvbmUgd2hvc2UgSU5TTl9DVUlEIGlzIHN1YnN0X2xvd19jdWlkLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0NPTlNUQU5UX1ApOiBBZGQgbWlzc2luZworCWNhbGwgdG8gVFJFRV9DT0RFLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNldCByZWxvYWRfaW5fcHJvZ3Jlc3MgZWFybGllci4KKworCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSk6IENvcnJlY3QgYm9ndXMgdXNlIG9mCisJdHlwZXMgaW4gZXhwcmVzc2lvbnM7IGFsd2F5cyBkbyBjb21wdXRhdGlvbiBpbiBhIHR5cGUgd2lkZSBlbm91Z2gKKwlmb3IgdGhlIHJlc3VsdC4KKworU3VuIEF1ZyAgMiAwMTozMDoyMiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtcGFyc2UueSAoYXR0cmliKTogQ29waWVkIGZyb20gYy1wYXJzZS55LgorCitTYXQgQXVnICAxIDEzOjM0OjQ5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wcmFnbWEuYyAoSEFORExFX1BSQUdNQV9XRUFLKTogRGVmaW5lIG9ubHkgaWYgU0VUX0FTTV9PUCBkZWZpbmVkLgorCisJKiB2YXgtdm1zLmg6IFJlbmFtZWQgZnJvbSB2bXMuaC4KKwkqIHhtLXZheC12bXMuaDogUmVuYW1lZCBmcm9tIHhtLXZtcy5oLgorCSogY29uZmlndXJlICh2YXgtKi12bXMpOiBDaGFuZ2UgZmlsZSBuYW1lcy4KKworU2F0IEF1ZyAgMSAxNjoxMzowOSAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbkBjeWdudXMuY29tKQorCisJKiBjb25maWcvc3BjLXNvbDIuaCAoQVNNX09VVFBVVF9EV0FSRl9TVFJJTkcpOiByZWRlZmluaXRpb24gd2FzCisJaW5jb3JyZWN0LCBhbmQgdW5lZWRlZDsgd2hpbGUgU29sYXJpcyBhcyBkb2Vzbid0IHN1cHBvcnQgLnN0cmluZywgaXQKKwlkb2VzIHN1cHBvcnQgLmFzY2l6LCBhbmQgc3BhcmN2NC5oIHRha2VzIGNhcmUgb2YgaW5jbHVkaW5nIHRoYXQKKwlkZWZpbml0aW9uLgorCitGcmkgSnVsIDMxIDA4OjE5OjQxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IENvcnJlY3RseSBoYW5kbGUgaW1wbGljaXQgZGVhdGhzIG9mCisJSTJERVNUIGFuZCBJMURFU1QuCisKKwkqIGNleHAueTogQWRkIGRlY2xhcmF0aW9uIGZvciB4bWFsbG9jLgorCisJKiBjY2NwLmM6IEFkZCBkZWNsYXJhdGlvbnMgZm9yIG1hbGxvYyBhbmQgcmVhbGxvYy4KKwlJbmNsdWRlIHN0ZGRlZi5oIHdoZW4gX19TVERDX18gaXMgZGVmaW5lZC4KKwkoUFRSX0lOVF9UWVBFKTogTmV3IG1hY3JvLgorCShwY2ZpbmNsdWRlKTogVXNlIGl0LgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MsCisJX19idWlsdGluX2ZyYW1lX2FkZHJlc3MsIGFuZCBfX2J1aWx0aW5fc2F2ZXJlZ3MgYWxsIHJldHVybiB2b2lkICouCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogQ29udmVydCBhbm90aGVyIHB1c2hfcmVsb2FkCisJY2FsbCBpbnRvIGEgY2FsbCB0byBmaW5kX3JlbG9hZHNfYWRkcmVzc19wYXJ0LgorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBDb3JyZWN0IG9yZGVyIG9mIGluc25zIGVtaXR0ZWQKKwl3aGVuIHVzaW5nIHNlY29uZGFyeSBtZW1vcnkuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IEFkZCBtaXNzaW5nIHNlbWljb2xvbiBhZnRlciBtYWNyby4KKworCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzLCBjYXNlIFJFR19ERUFEKTogSWYgYSByZWdpc3RlciB1c2VkCisJZXhhY3RseSB0d2ljZSBpcyByZWZlcmVuY2VkIGluIGJvdGggSTIgYW5kIEkzLCBzaG93IGl0IGlzIHVzZWQgMyB0aW1lcy4KKworCSogZmluYWwuYyAob3V0cHV0X29wZXJhbmQpOiBBYm9ydCBpZiBYIGlzIGEgcHNldWRvLgorCisJKiBjc2UuYyAoZXhwX2VxdWl2X3AsIGNhc2UgQ09OU1RfSU5UKTogVXNlIElOVFZBTCBpbnN0ZWFkIG9mIFhJTlQuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogUHV0IEZST00gaW50byBhIHJlZ2lzdGVyIGlmIGl0IGlzIGEgU1VCUkVHLgorCShGb3IgZXh0ZW5zaW9uIGNhc2UuKQorCitGcmkgSnVsIDMxIDA4OjE5OjA1IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBmdW5jdGlvbi5jIChyZXBvc2l0aW9uX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9ub3Rlcyk6IFNlYXJjaCBmb3IKKwl0aGUgbm90ZXMgd2l0aG91dCB1c2luZyBiYXNpY19ibG9ja19lbmRbMF0gb3IgYmFzaWNfYmxvY2tfaGVhZFtOLTFdLgorCitGcmkgSnVsIDMxIDA4OjE4OjE4IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiByZW9yZy5jIChnZXRfYnJhbmNoX2NvbmRpdGlvbik6IFJldHVybiAwIGlmIGFsbCB0ZXN0cyBmYWxsIHRocm91Z2guCisKK0ZyaSBKdWwgMzEgMDI6Mjg6MDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnbGltaXRzLmg6IFJlbmFtZWQgZnJvbSBsaW1pdHMuaC4KKwkqIE1ha2VmaWxlLmluIChMSU1JVFNfSCk6IERlbGV0ZWQuCisJKGluc3RhbGwtbGltaXRzLWgpOiBVc2UgZ2xpbWl0cy5oLCBub3QgbGltaXRzLmguCisJKiBsaWJnY2MyLmM6IEluY2x1ZGUgZ2xpbWl0cy5oLgorCitUaHUgSnVsIDMwIDA5OjU0OjA3IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmggKEZVTkNUSU9OX0JPVU5EQVJZLCBBU01fT1VUUFVUX0FMSUdOX0NPREUpOiBQYWNrIGNvZGUKKwltb3JlIHRpZ2h0bHkgZm9yIHRoZSBtODgxMTAuCisKKwkqIG04OGsubWQgKGNwdSBhdHRyaWJ1dGUpOiBMaXN0IG04ODEwMCBmaXJzdCBmb3IgbW9yZSBlZmZpY2llbnQKKwljb2RlIGluIGluc24tYXR0cnRhYi5jLgorCisJKiBtODhrLm1kIChyb3RhdGUvYW5kIHNwbGl0IHBhdHRlcm4pOiBGaXggdHlwby4KKworVGh1IEp1bCAzMCAwMDowMjo0NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGk4NjBtYWNoLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChpODYwLSotbWFjaCopOiBOZXcgYWx0ZXJuYXRpdmUuCisKKwkqIHN2cjMuaCAoQlNTX1NFQ1RJT05fRlVOQ1RJT04pOiBOZXcgbWFjcm8uCisJKENUT1JTX1NFQ1RJT05fRlVOQ1RJT04sIERUT1JTX1NFQ1RJT05fRlVOQ1RJT04pOiBFbmFibGUgdGhlc2UuCisJKiB0b3dlci1hcy5oIChCU1NfU0VDVElPTl9GVU5DVElPTik6IERlbGV0ZWQuCisJKiBkcHgyLmggKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogRGVsZXRlZC4KKwkqIGF0dDM4Ni5oIChCU1NfU0VDVElPTl9GVU5DVElPTik6ICN1bmRlZiBiZWZvcmUgZGVmaW5pbmcuCisKKwkqIGk4NjB2My5oIChVU0VfQ09OU1RfU0VDVElPTik6ICN1bmRlZiBiZWZvcmUgZGVmaW5pbmcuCisKK1dlZCBKdWwgMjkgMjA6MDQ6NTUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAoY21wc2kpOiBEZWxldGUgJ0onIGNvbnN0cmFpbnQuCisKK1dlZCBKdWwgMjkgMDA6Mzg6NDUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWxleC5jICh5eWxleCk6IFdoZW4gdHJhZGl0aW9uYWwsIGNvbnZlcnQgMHg4MDAwMDAwMCB0byAtMHg4MDAwMDAwMC4KKworCSogZ2NjLmMgKGxpbmtfY29tbWFuZF9zcGVjKTogQWNjZXB0IC1zdGF0aWMgYnV0IGRvIG5vdGhpbmcgd2l0aCBpdC4KKworCSogbG9vcC5jIChtb3ZlX21vdmFibGVzKTogV2hlbiB0ZXN0aW5nIHdoZXRoZXIgYSByZWcgY29udGFpbnMKKwl0aGUgZnVuY3Rpb24gYWRkcmVzcyBvZiBhIGNhbGxfaW5zbiBpbiBhIGxpYmNhbGwgYmxvY2ssCisJdXNlIHJlZ19yZWZlcmVuY2VkX3AsIHRvIGlnbm9yZSBkZXN0aW5hdGlvbnMuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBUYWtlIGFjY291bnQgb2YKKwltYXhpbXVtX2ZpZWxkX2FsaWdubWVudCB3aGVuIHVzaW5nIHRoZSBmaWVsZCdzIGFsaWdubWVudC4KKworCSogYy1wYXJzZS55IChhdHRyaWIpOiBGaXggcHJldmlvdXMgY2hhbmdlLS10aGUgbWlzc2luZyBhcmcKKwl3YXMgdGhlIGxhc3QgYXJnLgorCisJKiBmaXhpbmNsdWRlczogRG9uJ3QgcmVwZWF0IHRoZSBkaXJlY3RvcnktbGluay1jaGFzaW5nIGxvb3AKKwltb3JlIHRoYW4gdHdpY2UuICBDb21iaW5lICRwcmV2ZGlycyB3aXRoICRkaXJzLS10aGV5IGhhZCBzYW1lIHZhbHVlLgorCVByb3Blcmx5IGRpc2NhcmQgJGQgaXRzZWxmIGZyb20gdGhlIG91dHB1dCBvZiBmaW5kLgorCUZpbmQgdGhlIGxpbmtzIHRvIGRpcmVjdG9yaWVzIGJ5IGZpbmRpbmcgZWFjaCBsaW5rCisJYW5kIHRlc3RpbmcgaXQgd2l0aCB0ZXN0LiAgQWRkICRuZXdkaXJzIGludG8gJGZpbGVzLgorCitUdWUgSnVsIDI4IDEyOjQ2OjMxIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBDYWxsIGxheW91dF9kZWNsIHdpdGggdHdvIGFyZ3VtZW50cy4KKworCSogYy1wYXJzZS55IChhdHRyaWJ1dGUgcHJvY2Vzc2luZyk6IENvcnJlY3RseSBjYWxsIHRyZWVfY29ucyB3aXRoCisJdGhyZWUgYXJndW1lbnRzLCBwYXNzaW5nIE5VTExfVFJFRSBmb3IgdGhlIHB1cnBvc2UgYXJndW1lbnQuCisKKwkqIGVtaXQtcnRsLmMgKG1ha2VfaW5zbl9yYXcpOiBFbGltaW5hdGUgdW51c2VkIGFyZ3VtZW50IHBhdF9mb3JtYWxzLAorCWFuZCBtb2RpZnkgYWxsIGNhbGxlcnMuCisJKG1ha2VfanVtcF9pbnNuX3Jhdyk6IERpdHRvLgorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogRnVuY3Rpb24gZm9sbG93X2p1bXBzIG9ubHkgdGFrZXMKKwlvbmUgYXJndW1lbnQuCisJKHJlbGF4X2RlbGF5X3Nsb3RzKTogRGl0dG8uCisKK1R1ZSBKdWwgMjggMTY6MDQ6NDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkcHgyZy5oIChBU01fT1VUUFVUX0lERU5UKTogI3VuZGVmIGl0LgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogSGFuZGxlIHdhcm5fcmVkdW5kYW50X2RlY2xzIGhlcmUuCisJQnV0IGRvbid0IHdhcm4gaWYgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb2xsb3dzIGEgZGVjbGFyYXRpb24uCisJKHB1c2hkZWNsKTogRG9uJ3QgaGFuZGxlIGl0IGhlcmUuCisJKGdyb2twYXJtcyk6IERvbid0IHdhcm4gYWJvdXQgbm9uLXByb3RvdHlwZSBkZWNsIGluIHN5c3RlbSBoZWFkZXIuCisKKwkqIGMtY29udmVydC5jIChjb252ZXJ0KTogSWYgbWFpbiB2YXJpYW50cyBtYXRjaCwgCisJYnV0IHRoZSB0eXBlIGlzIG5vdCBpZGVudGljYWwsIG1ha2UgYSBOT1BfRVhQUi4KKworVHVlIEp1bCAyOCAxMDowNjoxOCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIG1pcHMubWQ6IENvcnJlY3QgdXNlIG9mIGAqJyBpbiBjb25zdHJhaW50cy4gIFB1dCBpdCBiZWZvcmUgZWFjaAorCWxldHRlciB0byBpZ25vcmUsIG5vdCBlYWNoIGdyb3VwIHRvIGlnbm9yZS4KKworVHVlIEp1bCAyOCAwMToyMzozNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGRieG91dC5jIChkYnhvdXRfcGFybXMpOiBEbyBzb21ldGhpbmcgZm9yIHN0cnVjdHVyZXMKKwlwYXNzZWQgYnkgaW52aXNpYmxlIHJlZmVyZW5jZSwgYW5kIGxpdmluZyBpbiBtZW1vcnkuCisKKwkqIGdzdGRkZWYuaCAod2NoYXJfdCk6IEFsdGVybmF0ZSB0eXBlZGVmIGZvciBDKysuCisKKwkqIE1ha2VmaWxlLmluIChleHRyYWNsZWFuKTogRGVsZXRlIGNvbmZpZy9DaGFuZ2VMb2cuCisKKwkqIG02OGsubWQgKHByb2JlKTogVXNlICVhMCB0byBvdXRwdXQgdGhlIGFkZHJlc3MuCisKK01vbiBKdWwgMjcgMjA6MDg6MjEgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BoYWwpCisKKwkqIGMrKzogIEZpeCBlcnJvcnMgaW50cm9kdWNlZCBieSBybXMuICBCdWxsZXQtcHJvb2YgaGFuZGxpbmcgb2YKKwlhcmd1bWVudHMgd2l0aCBmdW5ueSB0aGluZ3MgaW4gdGhlbSBzdWNoIGFzIG5ld2xpbmVzLCBzcGFjZXMsIHRhYnMsCisJc2luZ2xlIHF1b3RlcywgZG91YmxlIHF1b3RlcywgZXRjLi4uCisKK01vbiBKdWwgMjcgMTc6Mzg6NTIgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZDogQWRkIERFRklORV9TUExJVHMgdG8gb3B0aW1pemUgbG9naWMgb3BlcmF0aW9uIHdpdGgKKwljZXJ0YWluIGltbWVkaWF0ZSB2YWx1ZXMuCisKKwkqIHNwYXJjLm1kOiBDb3JyZWN0IGluY29uc2lzdGVudCBvcGVyYW5kIGNvbnN0cmFpbnRzIGluIHBlZXBob2xlcy4KKworCSogc3BhcmMuaCAoQVNNX0xPTkcsIEFTTV9TSE9SVCwgQVNNX0JZVEVfT1ApOiAgRGVmaW5pdGlvbnMgYWRkZWQuCisJKEFTTV9PVVRQVVRfRE9VQkxFKTogIFVzZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUgdG8gY29udmVydC4KKwkoQVNNX09VVFBVVF9GTE9BVCk6ICBVc2UgUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFIHRvIGNvbnZlcnQuCisJKEFTTV9PVVRQVVRfSU5UKTogIFVzZSBBU01fTE9ORyBwc2V1ZG8tb3AuCisJKEFTTV9PVVRQVVRfU0hPUlQpOiAgVXNlIEFTTV9TSE9SVCBwc2V1ZG8tb3AuCisJKEFTTV9PVVRQVVRfQ0hBUik6ICBVc2UgQVNNX0JZVEVfT1AgcHNldWRvLW9wLgorCShBU01fT1VUUFVUX0JZVEUpOiAgVXNlIEFTTV9CWVRFX09QIHBzZXVkby1vcC4KKworTW9uIEp1bCAyNyAxNzoxMDoxOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdzdGRhcmcuaCAodmFfYXJnKTogRG9uJ3QgdXNlICs9OyBubyBuZWVkIHRvIHNldCBBUCB0d2ljZS4KKworU3VuIEp1bCAyNiAxNDoyMToxMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IEFsaWduIGp1bXAgdGFibGUgb25seSBpZgorCVJFQURPTkxZX0RBVEFfU0VDVElPTi4gIE90aGVyd2lzZSwgdGhlIHRhYmxlIGlzIGluIHRoZSB0ZXh0IHNlY3Rpb24uCisKKwkqIGNvbGxlY3QyLmMgKGR1cDIpOiBEZWZpbmVkLCBpZiBOT19EVVAyLgorCisJKiBwbGV4dXMuaDogTmV3IGZpbGUuCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IE1ha2UgYSBwcm9iZSBpbnN0cnVjdGlvbgorCWlmIE5FRURfUFJPQkUgaWYgbm9uemVyby4KKwkqIGNvbmZpZ3VyZSAobTY4ay1wbGV4dXMtc3lzdiopOiBOZXcgYWx0ZXJuYXRpdmUuCisKKwkqIGMtY29udmVydC5jIChjb252ZXJ0KTogU3VjY2VlZCBpZiBUWVBFIGlzIHRoZSBtYWluIHZhcmlhbnQKKwlvZiB0aGUgZ2l2ZW4gdHlwZS4KKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBDb21wYXJlIHVzaW5nIFRZUEVfTUFJTl9WQVJJQU5ULgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ29weSBvbGQgUlRMICpiZWZvcmUqIG1ha2VfdmFyX3ZvbGF0aWxlLgorCitTYXQgSnVsIDI1IDIxOjQ1OjQ0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogTmV2ZXIgcmV1c2UgZ2xvYmFsIGZjbiBkZWNsIGluIHBsYWNlIG9mCisJbG9jYWwgZXh0ZXJuOyBqdXN0IGNvcHkgc29tZSBpbmZvIGZyb20gaXQuCisKK1NhdCBKdWwgMjUgMDY6MTQ6NTggMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogRWxpbWluYXRlIHRoZSBnZW5lcmF0aW9uIG9mIGJyYW5jaGVzCisJd2hlbiBwb3NzaWJsZS4KKworU2F0IEp1bCAyNSAwNDozNDowOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChYMTEvWG11L1htdS5oKTogRml4IHRoaXMgb3IgWDExL1htdS5oLAorCXdoaWNoZXZlciBleGlzdHMuCisKK1NhdCBKdWwgMjUgMDA6NDE6MTIgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtcGFyc2UueSAoZGF0YWRlY2wpOiBEaWFnbm9zZSBlbXB0eSBkZWNsYXJhdGlvbnMgaW4gb2xkLXN0eWxlCisJZnVuY3Rpb24gaGVhZGVycy4KKwkqIGMtZGVjbC5jIChzaGFkb3dfdGFnX3dhcm5lZCk6IE5ldyBmdW5jdGlvbi4KKworCSogYy1sZXguYyAoeXlsZXgpOiBEaWFnbm9zZSBgMS4wZmwnLiAgSXNzdWUganVzdCBvbmUKKwlkaWFnbm9zdGljIGZvciBgMWUxMDAwMDAwZicuCisKK0ZyaSBKdWwgMjQgMTk6MjU6NTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IERpc3Rpbmd1aXNoIGltcGxpY2l0IEMrKyB0eXBlZGVmcworCWZyb20gZXhwbGljaXQgQyB0eXBlZGVmcyBmb3Igc3RydWN0cywgdXNpbmcgREVDTF9TT1VSQ0VfTElORS4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCBldmVuIGZvciBjb21wYXJlcworCXdpdGggdm9pZF90eXBlX25vZGUuCisJKGdyb2tkZWNsYXJhdG9yLCBnZXRfcGFybV9pbmZvLCBzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCisKK0ZyaSBKdWwgMjQgMTA6MDc6MTMgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChpc190YWdnZWRfdHlwZSk6ICBOZXcgZnVuY3Rpb24gYWRkZWQuCisJKG1lbWJlcl9hdHRyaWJ1dGUpOiAgVXNlIGl0LgorCSh0eXBlX29rX2Zvcl9zY29wZSk6ICBSZXdyaXR0ZW4gdG8gZWxpbWluYXRlIHNlcmlvdXMgYnVncy4KKwkob3V0cHV0X3R5cGUpOiAgQ2FsbCBgb3V0cHV0X3BlbmRpbmdfdHlwZXNfZm9yX3Njb3BlJyBhdCB0aGUgZW5kIG9mCisJc3RydWN0L3VuaW9uIHR5cGVzICh3aGljaCBhcmUgdGhlbXNlbHZlcyBzY29wZXMgaW4gQysrKS4KKworRnJpIEp1bCAyNCAxMzozNjo0NiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZGJ4b3V0LmMgKHRvcGxldmVsKTogSW5jbHVkZSBkZWZhdWx0cy5oIHRvIGdldCB0aGUgZGVmaW5pdGlvbiBvZgorCUFTTV9TVEFCRF9PUC4KKworCSogTWFrZWZpbGUuaW4gKGRieG91dC5vKTogQWRkIGRlZmF1bHRzLmggZGVwZW5kZW50LgorCisJKiBpMzg2cm9zZS5oIChDQzFfU1BFQyk6IFJlbW92ZSBNSVBTIHN3aXRjaGVzIGFjY2lkZW50bHkgbGVmdCBpbi4KKworVGh1IEp1bCAyMyAwOTo0OTo0MyBQRFQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBkd2FyZm91dC5jIChpc19ib2R5X2Jsb2NrKTogIFJld3JpdHRlbiBmb3IgZ3JlYXRlciBzYWZ0ZXkuCisJKG91dHB1dF9ibG9jayk6ICBGaXhlZCB0byBkZWFsIGNvcnJlY3RseSB3aXRoIG5vbi1pbmxpbmVkIGJsb2Nrcy4KKworVGh1IEp1bCAyMyAxNTozNzoyMyAxOTkyICBKZWZmcmV5IEEgTGF3ICAobGF3IGF0IHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBDaGFuZ2UgInN0cnVjdCBmb28iIHRvICJzdHJ1Y3Qgc29tZXRpbWVzIi4KKworVGh1IEp1bCAyMyAxNToxMDo1MSAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5oIChBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiBDaGFuZ2UgdG8gcmVhZG9ubHkgc2VjdGlvbiBpZiB0aGUKKwl0YWJsZSBjb250YWlucyBhZGRyZXNzZXMuCisJKEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTik6IFRydWUgYnkgZGVmYXVsdC4KKworVGh1IEp1bCAyMyAxMzo1NDoyNyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5jIChsYXJnZV9pbnQpOiBVc2UgSE9TVF9XSURFX0lOVCB0eXBlIHRvIGhvbGQgSU5UVkFMLgorCShnZW5faW50X3JlbGF0aW9uYWwpOiBEaXR0by4KKwkoZ2VuX2NvbmRpdG9uYWxfYnJhbmNoKTogRG9uJ3QgZW1pdCBhbnkgaW5zbnMgaWYgdGhlIHJlc3VsdCBpcworCWFsd2F5cyBmYWxzZSwgYW5kIGVtaXQgYSBub3JtYWwganVtcCBpZiB0aGUgcmVzdWx0IGlzIGFsd2F5cyB0cnVlLgorCisJKiBtaXBzLmMgKG1pcHNfbW92ZV8xd29yZCk6IENvdW50IExBQkVMX1JFRidzIGFzIGEgbWVtb3J5CisJcmVmZXJlbmNlLiAgUmV3b3JrIGhhbGYtcGljIGxvYWQgb2Ygc3ltYm9scywgdG8gbm90IGV4cGVjdCBtb3ZzaQorCXRvIGhhdmUgY29udmVydGVkIHRoZSBsb2FkIGFkZHJlc3MgaW50byBhIGxvYWQsIGFuZCBmb3IgQ09OU1QncywKKwlkbyB0aGUgYWRkaXRpb24gYWZ0ZXIgdGhlIHBvaW50ZXIgaXMgbG9hZGVkLgorCisJKiBtaXBzLm1kICh0eXBlIGF0dHJpYnV0ZSwgbW92c2kzKTogRWxpbWluYXRlICdwaWMnIGF0dHJpYnV0ZSwKKwlqdXN0IHVzZSAnbG9hZCcgaW5zdGVhZC4KKwkoZml4X3RydW5jZGZzaTIpOiBNYWtlIHRoaXMgYSBkZWZpbmVfaW5zbiwgaW5zdGVhZCBvZiBhCisJZGVmaW5lX2V4YXBuZCBhbmQgYW4gaW5zbiwgYW5kIHVzZSBtYXRjaF9zY3JhdGNoIHRvIGFsbG9jYXRlIHRoZQorCXR3byBzY3JhdGNoIHJlZ2lzdGVycy4gIEFkanVzdCBsZW5ndGggY29zdHMsIHNvIHRoYXQgdGhleSBtYXRjaAorCXRoZSBjdXJyZW50IGNvZGUgdGhlIGFzc2VtYmxlciBwcm9kdWNlcy4KKwkoZml4X3RydW5jc2ZzaTIpOiBEaXR0by4KKwkobW92c2kpOiBEb24ndCBjb252ZXJ0IGxvYWQgb2YgaGFsZi1waWMgYWRkcmVzc2VzIGFuZCBDT05TVCdzIGludG8KKwl0aGUgcmVhbCBsb2FkLiAgSXQgY2F1c2VzIG1vcmUgcHJvYmxlbXMgdGhhbiBpdCBzb2x2ZXMuICBBZGp1c3QKKwljb3N0IG9mIGhhbGYtcGljIGFkZHJlc3NlcyB0byBiZSAyLCBub3QgNC4KKworCSogbWlwcy10ZmlsZS5jIChwYXJzZV9kZWYpOiBBbGxvdyBzcGFjZXMgaW4gbmFtZXMsIHNpbmNlIEMrKworCXRlbXBsYXRlcyBwcm9kdWNlIHRoaW5ncyBsaWtlOiAjLmRlZiBTTUFOSVA8bG9uZyB1bnNpZ25lZCBpbnQ+OyAuLi4KKwkocGFyc2Vfc3RhYnNfY29tbW9uKTogQ29kZSBmcm9tIExpc2EgUmVwa2EsIHRvIGhhbmRsZSBzeW1ib2wgKy8tCisJb2Zmc2V0LCBhbmQgdG8gbG9vayB1cCB0aGluZ3MgaW4gdGhlIGV4dGVybmFsIHN0cmluZyB0YWJsZSwgaWYgdGhlCisJbmFtZSBpcyBub3QgZm91bmQgaW4gdGhlIGxvY2FsIHN0cmluZyB0YWJsZS4KKworV2VkIEp1bCAyMiAxMzowODozMyAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHNwYXJjLm1kIChtb3ZkZisxKTogVXNlIG5ldyAnVCcgYW5kICdVJyBjb25zdHJhaW50cyB0byAKKwlkZXRlcm1pbmUgd2hlbiBhbiBsZGQgb3Igc3RkIHdpbGwgaGF2ZSBhIGxlbmd0aCBvZiAxLCBhbmQKKwl0aGVyZWZvcmUgaXMgZWxpZ2libGUgZm9yIHVzZSBpbiBzb21lIGRlbGF5IHNsb3RzLgorCSh1bmNvbmRfYnJhbmNoKTogTmV3IGF0dHJpYnV0ZSB1c2VkIGZvciB1bmNvbmRpdGlvbmFsIGJyYW5jaGVzLgorCUFsbCB1bmNvbmRpdGlvbmFsIGJyYW5jaCBwYXR0ZXJucyBjaGFuZ2VkLgorCShkZWZpbmVfZGVsYXlzIGFuZCBkZWxheSBzbG90IGF0dHJpYnV0ZXMpOiBEbyBub3QgYWxsb3cKKwl1bmNvbmRfYnJhbmNoIGluc3RydWN0aW9ucyBpbiBkZWxheSBzbG90cy4gIERvIG5vdCBhbGxvdyBmcGxvYWQgb3IKKwlmcHN0b3JlIG9wZXJhdGlvbnMgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggZGVsYXkgc2xvdC4gIEFsbG93IAorCWZwbG9hZCBhbmQgZnBzdG9yZSBpbiBjYWxsLCB1bmNvbmRpdGlvbmFsIGJyYW5jaCwgYW5kIGFubnVsZWQKKwljb25kaXRpb25hbCBicmFuY2ggZGVsYXkgc2xvdHMuCisJCisJKiBzcGFyYy5jIChyZWdpc3RlcnNfb2tfZm9yX2xkZF9wZWVwLCBhZGRyc19va19mb3JfbGRkX3BlZXApOgorCUZ1bmN0aW9ucyByZW5hbWVkIGZyb20gcmVnaXN0ZXJzX29rX2Zvcl9sZGQgYW5kCisJbWVtb3J5X29rX2Zvcl9sZGQgcmVzcGVjdGl2ZWx5LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkocmVnaXN0ZXJfb2tfZm9yX2xkZCk6IE5ldyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSByZWdpc3RlciBpcworCWEgcHNldWRvIG9yIHRoZSBmaXJzdCByZWdpc3RlciBpbiBhIGhhcmQgcmVnaXN0ZXIgcGFpci4KKwkobWVtX2FsaWduZWRfOCk6IE5vIGxvbmdlciBzdGF0aWMuICBSZXR1cm4gMCBpbnN0ZWFkIG9mIGFib3J0aW5nCisJd2hlbiBwcmVzZW50ZWQgYW4gcnR4IHdoaWNoIGlzIG5vdCBhIE1FTS4KKwkoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5KTogVXNlIGluX3VuY29uZF9icmFuY2hfZGVsYXkgc2luY2UKKwl0aGlzIGluIGFuIHVuY29uZGl0aW9uYWwgYnJhbmNoLgorCQorCSogc3BhcmMuaCAoRVhUUkFfQ09OU1RSQUlOVCkgQWRkIG5ldyAnVCcgYW5kICdVJyBjb25zdHJhaW50cworCXdoaWNoIGNoZWNrIGZvciBhbGlnbmVkIGFjY2Vzc2VzIHRvIG1lbW9yeSBhbmQgcmVnaXN0ZXIgcGFpcnMuCisKK1dlZCBKdWwgMjIgMTE6MjI6MzcgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBtZWlzc25lciB2ZXJzaW9uIG51bWJlciB0byAyMi4KKwkoZXh0ZXJuIGRlY2xhcmF0aW9ucyk6IEFkZCBkZWNsYXJhdGlvbnMgZm9yIGFzbV9maWxlX25hbWUsCisJY2FsbF91c2VkX3JlZ3MsIGxhbmdndWFnZV9zdHJpbmcsIHNhdmVfYXJndiwgdmVyc2lvbl9zdHJpbmcsCisJbWlwc197YmVnaW4sZW5kLGV4cGFuZH1fe3BybyxlcGl9bG9ndWUsIHNpbXBsZV9lcGlsb2d1ZV9wLAorCXthZGRyZXNzLGNvbnN0X3tkb3VibGUsaW50fSxnZW5lcmFsLHssbm9ufWltbWVkaWF0ZX1fb3BlcmFuZCwKKwltZW1vcnlfYWRkcmVzc19wLCB7eyxub259bWVtb3J5LHJlZ2lzdGVyLHNjcmF0Y2h9X29wZXJhbmQsCisJYWJvcnRfd2l0aF9pbnNuLCBkZWJ1Z19ydHgsIGZhdGFsX2lvX2Vycm9yLCBnZXRfZnJhbWVfc2l6ZSwKKwlvZmZzZXR0YWJsZV9hZGRyZXNzX3AsIG91dHB1dF9hZGRyZXNzLCBwZXJtYWxsb2MsCisJcmVnX21lbnRpb25lZF9wLCBhYm9ydCwgYXRvaSwgZ2V0ZW52LCBta3RlbXAsIGFuZAorCW1pcHNfZXhwYW5kX3tlcGkscHJvfWxvZ3VlLgorCSgqX1JFR05VTSk6IEFkZCBpbiBHUF9SRUdfRklSU1QgaW4gY2FzZSByZWdpc3RlcnMgYXJlIGV2ZXIKKwlyZW51bWJlcmVkLgorCShzdHJ1Y3QgbWlwc19mcmFtZV9pbmZvKTogQWRkIG51bV9ncCwgbnVtX2ZwIGZpZWxkcy4KKwkoU0VDT05EQVJZX01FTU9SWV9ORUVERUQpOiBEZWZpbmUsIHJldHVybiAxIHVubGVzcyAtbWRlYnVnaCBpZgorCW1vdmluZyBiZXR3ZWVuIEZQIDwtPiBHUCByZWdpc3RlcnMuCisKKwkqIG1pcHMuYyAoZXh0ZXJuIGRlY2xhcmF0aW9ucyk6IE1vdmUgbW9zdCBvZiB0aGUgZGVjbGFyYXRpb25zIHRvCisJbWlwcy5oLCBleGNlcHQgZm9yIHRob3NlIG9mIHR5cGUgJ3J0eCcgb3IgJ3RyZWUnLCBzaW5jZSBub3QgYWxsCisJZmlsZXMgaW5jbHVkZSBydGwuaCBhbmQgdHJlZS5oLiAgQWRkIG1vcmUgZGVjbGFyYXRpb25zIGZvciBnZW5feHh4CisJZnVuY3Rpb25zIHRoYXQgYXJlIG5vdyB1c2VkLgorCShyZWdfb3JfMF9vcGVyYW5kKTogQWRkIGRlZmF1bHQgY2FzZSBmb3Igc3dpdGNoIG9uIGVudW1lcmF0aW9uLCB0bworCWFsbG93IGNvbXBpbGluZyB3aXRoIC1XYWxsLgorCShzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBEaXR0by4KKwkobWlwc19jb3VudF9tZW1vcnlfcmVmcyk6IERpdHRvLgorCShtaXBzX21vdmVfMXdvcmQpOiBEaXR0by4KKwkobWlwc19tb3ZlXzJ3b3Jkcyk6IERpdHRvLgorCShtaXBzX2FkZHJlc3NfY29zdCk6IERpdHRvLgorCShtYXBfdGVzdF90b19pbnRlcm5hbF90ZXN0KTogRGl0dG8uCisJKG1pcHNfbW92ZV8xd29yZCk6IEFsaWduIGFzbSBjb21tZW50cyBpbiBsb2FkaW5nIG5lZ2F0aXZlIGludHMuCisJKG1pcHNfbW92ZV8xd29yZCk6IFVzZSBHRU5fSU5UIG1hY3JvIHRvIGdlbmVyYXRlIENPTlNUX0lOVCdzLgorCShtaXBzX21vdmVfMndvcmRzKTogRGl0dG8uCisJKGdlbl9pbnRfcmVsYXRpb25hbCk6IERpdHRvLgorCShibG9ja19tb3ZlX2xvYWRfc3RvcmUpOiBEaXR0by4KKwkoYmxvY2tfbW92ZV9sb29wKTogRGl0dG8uCisJKGV4cGFuZF9ibG9ja19tb3ZlKTogRGl0dG8uCisJKGJsb2NrX21vdmVfbG9hZF9zdG9yZSk6ICNpZiAwLCBub3QgY3VycmVudGx5IHVzZWQuCisJKGJsb2NrX21vdmVfc2VxdWVuY2UpOiBEaXR0by4KKwkoY29tcHV0ZV9mcmFtZV9zaXplKTogRmlsbCBpbiBudW1fZ3AgYW5kIG51bV9mcCBmaWVsZHMuCisJKHNpbXBsZV9wcm9sb2d1ZV9wKTogUmVuYW1lIGZyb20gbnVsbF9wcm9sb2d1ZS4KKwkoc2F2ZV9yZXN0b3JlX2luc25zKTogTmV3IGZ1bmN0aW9uIHRvIGVtaXQgYXBwcm9wcmlhdGUgc2F2ZSBhbmQKKwlyZXN0b3JlIG9wZXJhdGlvbnMgZm9yIHByb2xvZ3VlL2VwaWxvZ3VlIC0tIG9ubHkgcHJvbG9ndWUgdXNlZCBhdAorCXByZXNlbnQuCisJKGZ1bmN0aW9uX3Byb2xvZ3VlKTogTW92ZSBnZW5lcmF0aW9uIG9mIGluc3RydWN0aW9ucyB0bworCW1pcHNfZXhwYW5kX3Byb2xvZ3VlLgorCShtaXBzX2V4cGFuZF9wcm9sb2d1ZSk6IEdlbmVyYXRlIGFwcHJvcHJpYXRlIGluc25zIGZvciB0aGUKKwlwcm9sb2d1ZSBvZiB0aGUgZnVuY3Rpb24uCisJKG1pcHNfZXhwYW5kX2VwaWxvZ3VlKTogR2VuZXJhdGUgYXBwcm9wcmlhdGUgaW5zbnMgZm9yIHRoZQorCWVwaWxvZ3VlIG9mIHRoZSBmdW5jdGlvbiAtLSBub3QgY2FsbGVkIGF0IHByZXNlbnQuCisKKwkqIG1pcHMubWQgKGFzaGxkaTNfaW50ZXJuYWwpOiBBZGQgYCYnIGNvbnN0cmFpbnQgdG8gb3BlcmFuZCAwLgorCShhc2hyZGkzX2ludGVybmFsKTogQWRkIGAmJyBjb25zdHJhaW50IHRvIG9wZXJhbmQgMC4KKwkocmV0dXJuKTogVHVybiB0aGlzIGludG8gYSBkZWZpbmUgZXhwYW5kIHRoYXQgd3JhcHMgYSByZXR1cm4gYW5kIGEKKwlVU0UgcmVnOjMxIGluc2lkZSBvZiBhIHBhcmFsbGVsLgorCShyZXR1cm5faW50ZXJuYWwpOiBJbnNuIGZvcm0gb2YgcmV0dXJuIGluc3RydWN0aW9uLgorCShwcm9sb2d1ZSk6IE5ldyBkZWZpbmUgZXhwYW5kIHRvIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKKwlpbnN0cnVjdGlvbnMgZm9yIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4KKwkobW92e3NpLGhpLHFpfSk6IFNwbGl0IHRoZSBpbnRlZ2VyIG1vdmUgSU5TTnMgaW50byB0d28gZ3JvdXBzLAorCXRob3NlIHRoYXQgc3VwcG9ydCAtbWRlYnVnaCBhbmQgYWxsb3cgaW50cyB0byBiZSBpbiBmbG9hdGluZworCXBvaW50IHJlZ2lzdGVycywgYW5kIHRob3NlIHRoYXQgZG9uJ3QgYWxsb3cgaXQuCisKK1R1ZSBKdWwgMjEgMjE6Mjc6NDMgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BhbGJlcnQuZ251LmFpLm1pdC5lZHUpCisKKwkqIENvbXBsZXRlIDl0aCBDeWdudXMgPC0tLT4gRlNGIG1lcmdlLgorCisJVHVlIEp1bCAyMSAwMzoxNzowNSAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbkBjeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAocHJvY2Vzc19uZXh0X2lubGluZSk6IHdoZW4gYmFpbGluZyBvdXQgb24gYSBwYXJzZSBlcnJvciwKKwl0aHJvdyBhd2F5IG5leHRjaGFyIGFzIHdlbGwgaW4gY2FzZSBpdCBnb3Qgc2V0LiAKKworCVR1ZSBKdWwgMjEgMDU6MzE6MTAgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKHRzdWJzdCwgY2FzZSBGVU5DVElPTl9ERUNMKTogSWYgdGhlIGNvbnRleHQgY2xhc3MgaGFzIGEKKwludWxsIG1ldGhvZCB2ZWN0b3IsIGRvbid0IGxvb2sgaW5zaWRlIGl0IGZvciBpdHMgc2l6ZS4KKworCVRodSBKdWwgMTYgMTY6MDI6NTUgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6ICBJZiBhc3NpZ25pbmcgKHZvaWQqKQorCXRvIGEgbm9ybWFsIHBvaW50ZXIsIGVtaXQgYSB3YXJuaW5nLCBub3QgYW4gZXJyb3IuICBUaGVyZSBpcworCWEgbG90IG9mIGV4aXN0aW5nIGNvZGUgKGluY2x1ZGluZyBsaWJnKysgYW5kIGNvbnZlcnRlZCBDCisJY29kZSkgdGhhdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gYXNzaWduIGZyb20gKHZvaWQqKS4KKworCVR1ZSBKdWwgMTQgMDY6NTk6MzggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBDYWxsIGRlc3RydWN0b3JzIGNvcnJlY3RseSB3aGVuCisJYmFzZWNsYXNzZXMgYXJlIHJlcGxpY2F0ZWQgaW4gdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKworCU1vbiBKdWwgMTMgMDU6MTY6MTAgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogSWYgd2Ugc3BsaXQgYSBDT05EX0VYUFIgaW4gb3JkZXIKKwl0byBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGluIGVhY2ggYXJtLCBjb252ZXJ0IHRoZSByaHMgb2YgZWFjaAorCWJyYW5jaCBhY2NvcmRpbmcgdG8gUkVTVUxUX1RZUEUuCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogVHJlYXQgbnVsbF9wb2ludGVyX25vZGUKKwlzcGVjaWFsbHkgd2hlbiBjb252ZXJ0aW5nIHRvIG5vbi12b2lkIHBvaW50ZXJzLgorCisJKiBjcC1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJpZXMpOiBJbiB0aGUgbG9vcCB0aGF0IG1vZGlmaWVzCisJdnRhYmxlIGVudHJpZXMgZm9yIGVhY2ggbm9uLXZpcnR1YWwgYmFzZWNsYXNzLCBjb3JyZWN0bHkgaGFuZGxlCisJY2FzZXMgd2hlcmUgQkFTRSBpcyBhbiBhbWJpZ3VvdXMgYmFzZWNsYXNzIGZvciBCQVNFX0NPTlRFWFQuCisKKwlTdW4gSnVsIDEyIDAxOjMyOjMxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVdlZCBNYXkgMjcgMDE6MzM6MjQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjcC10eXBlMi5jIChzdG9yZV9pbml0X3ZhbHVlKSwgY3AtdHlwZWNrLmMKKwkoYnVpbGRfbW9kaWZ5X2V4cHIsIGNvbnZlcnRfYXJndW1lbnRzLAorCWJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQsIGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpLCBjcC1wYXJzZS55CisJKG1lbWJlcl9pbml0LCB0ZW1wbGF0ZV9kZWYsIGRhdGFkZWYsIHN0bXQpOiBjaGFuZ2VkIHNvbWUKKwlwZWRhbnRpY3MgaW50byAhdHJhZGl0aW9uYWxzIGFuZCByZXdvcmRlZCBlcnJvciBtZXNzYWdlcy4KKworCVN1biBKdWwgMTIgMDE6MTE6NTMgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJSnVsIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogY3AtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBTZXQgQkxPQ0tfU1VQRVJDT05URVhUIGZvciB0aGUKKwlvdXRlcm1vc3Qgc2NvcGVzIG9mIGZ1bmN0aW9ucyB0byBwb2ludCB0byB0aGUgYXNzb2NpYXRlZAorCUZVTkNUSU9OX0RFQ0wgbm9kZXMuCisKKwlGcmkgSnVsIDEwIDE3OjUyOjM2IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogTmV3IGZpZWxkIHBzZXVkb19nbG9iYWwKKwlpbmRpY2F0ZXMgdGhhdCB0aGlzIGJpbmRpbmcgbGV2ZWwgc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSB0aGUgZ2xvYmFsCisJYmluZGluZyBsZXZlbCBpbiBzb21lIHJlc3BlY3RzLgorCShkZWNsYXJlX3BzZXVkb19nbG9iYWxfbGV2ZWwsIHBzZXVkb19nbG9iYWxfbGV2ZWxfcCk6IFNldCBhbmQgdGVzdAorCXJvdXRpbmVzLgorCShwdXNoX292ZXJsb2FkZWRfZGVjbCk6IERvbid0IGZvcmdldCBvdmVybG9hZHMgaW4gcHNldWRvLWdsb2JhbAorCWJpbmRpbmcgbGV2ZWxzLgorCSogY3AtcHQuYyAodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBTZWFyY2ggZm9yIGFuIGV4aXN0aW5nIGRlY2wKKwliZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLgorCShvdmVybG9hZF90ZW1wbGF0ZV9uYW1lKTogTWFrZSBuZXcgbGV2ZWwgcHNldWRvLWdsb2JhbC4KKwkodHlwZV91bmlmaWNhdGlvbik6IEluZGljYXRlIGZhaWx1cmUgZm9yIHVua25vd25fdHlwZV9ub2RlLgorCSh1bmlmeSk6IExpa2V3aXNlLgorCisJV2VkIEp1bCAgOCAwMTo1OTowMyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAobG9va3VwX25hbWUsIGdyb2t2YXJkZWNsLCBncm9rZGVjbGFyYXRvciksCisJY3AtY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKSwgY3Atc2VhY2guYyAobG9va3VwX2ZpZWxkKSwKKwljcC10eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZiksIGNwLWxleC5jIChkb19pZGVudGlmaWVyKSwKKwljcC1pbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCwgYnVpbGRfbWVtYmVyX2NhbGwsCisJYnVpbGRfb2Zmc2V0X3JlZik6ICBsb29rdXBfZmllbGQgbm93IGhhcyA0IGFyZ3VtZW50cy4KKworCVdlZCBKdWwgIDggMDE6MTQ6NDMgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChwcmltYXJ5KTogQ2FsbCB0byBsb29rdXBfbmFtZSBuZWVkcyAyIGFyZ3VtZW50cy4KKworCVR1ZSBKdWwgIDcgMjE6MTQ6MDUgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1tZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IEhhbmRsZSBJTlRFR0VSX1RZUEVzCisJY2xlYW5seSBhbmQgdW5pZm9ybWx5LgkKKworCVR1ZSBKdWwgIDcgMDk6MTk6NTIgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IElmIGBjb252ZXJ0X3RvX3BvaW50ZXInIHJldHVybnMKKwllcnJvcl9tYXJrX25vZGUsIHJldHVybiB0aGF0IHdpdGhvdXQgZG9pbmcgYW55IG1vcmUgd29yay4KKworCVRodSBKdWwgIDIgMTU6NDI6MjggMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJVGh1IEp1bCAgMiAxODowODo0MiAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwIGF0IHRjdC5jb20pCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERvbid0IGFzc3VtZSB0aGF0IGVycm9yCisJbWVzc2FnZSB3aWxsIGJlIHNob3J0IGVub3VnaCBmb3IgZml4ZWQtbGVuZ3RoIGJ1ZmZlci4KKworCVdlZCBKdWwgIDEgMTk6NTI6NTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJV2VkIEp1biAgMyAxMjo1Nzo1NyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjcy53aWRlbmVyLmVkdSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogT25seSBkbyB3aWR0aCBjaGVja2luZyBvbiBwcm9wZXJseQorCXBhcnNlZCBiaXRmaWVsZHMuCisKKwlXZWQgSnVsICAxIDE4OjU4OjE3IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVdlZCBNYXkgMjcgMDE6MzM6MjQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjcC1sZXguYyAocmVhZGVzY2FwZSksIGNwLXBhcnNlLnkgKHVuYXJ5X2V4cHIsIG1heWJlY29tbWFfd2FybiwKKwljb21wb25lbnRfZGVjbF9saXN0LCBzdG10KSwgY3AtdHlwZTIuYyAoZGlnZXN0X2luaXQpLCBjcC10eXBlY2suYworCShjX3NpemVvZiwgYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsLCBjb252ZXJ0X2FyZ3VtZW50cywKKwlidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0LCBwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZiwKKwlidWlsZF91bmFyeV9vcCwgY19leHBhbmRfcmV0dXJuKTogY2hhbmdlIHNvbWUgd2FybmluZ3MgdG8KKwlwZWR3YXJucy4gIFB1dCBpbiBuZXcgcGVkd2FybnMsIGNoYW5nZSB3b3JkaW5nIG9mIG1lc3NhZ2VzIHNvIHRoYXQKKwl0aGV5IGFyZSBtb3JlIHJlYWRhYmxlLiAgRG9uJ3QgaXNzdWUgc29tZSB3YXJuaW5ncyB3aGVuCisJdHJhZGl0aW9uYWwgaXMgZ2l2ZW4uCisKKwlXZWQgSnVsICAxIDEzOjU2OjMwIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVdlZCBBcHIgMjkgMjM6Mzc6MDAgMTk5MiAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhcyBhdCBhcHBsaS5zZSkKKworCSogY3AtZGVjbC5jIChmaW5pc2hfZGVjbCk6IG1ha2Ugc3VyZSBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkIGZvcgorCW9iamVjdHMgaW4gYSBmaWxlLgorCisJV2VkIEp1bCAgMSAxMToxMjowNSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jOiBleHRyYWN0IFlZRU1QVFkgb3V0IG9mIHRoZSBwYXJzZXIgZ2VuZXJhdGVkIC5jCisJZmlsZSBhbmQgcHV0IGluIHRoZSBwYXJzZXIgLmggc28gdGhhdCBjcC1sZXguYyBkb2VzIG5vdCBoYXZlCisJdG8gZGVmaW5lIGl0LgorCisJTW9uIEp1biAyOSAxMjo1ODo1OSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwlNb24gSnVuIDI5IDE1OjIwOjQ4IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXAgYXQgdGN0LmNvbSkKKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IERvbid0IGFkZCBhIE5PUF9FWFBSIGluIGNhc2VzCisJd2hlcmUgd2UgY2FuIHNpbXBseSBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGVudGlyZSB0cmVlLgorCisJTW9uIEp1biAyOSAxMDo1Njo1NiAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGMrKzogTWFrZXMgc3VyZSAtbGcrKyBjb21lcyBiZWZvcmUgLWxtIHNpbmNlIGxpYmcrKyB1c2VzCisJdGhpbmdzIGZyb20gbGlibS4KKworCU1vbiBKdW4gMjIgMTM6NDc6NDIgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJU3VuIEp1biAyMSAxNDowNjo0MSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbiBhdCBjcy53aWRlbmVyLmVkdSkKKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogT25seSB0cnkgdG8gY29udmVydCBhCisJcmhzIHRoYXQgd2FzIHBhcnNlZCBwcm9wZXJseS4KKworCU1vbiBKdW4gMjIgMTM6MzE6NDAgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbiBhdCBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChwcmltYXJ5KTogQ2xlYXIgdGhlIFRSRUVfVVNFRCBmbGFnIG9mIGEgYmxvY2sgdHJlZQorCXB1dCBpbiBhIEJJTkRfRVhQUi4KKworCVN1biBKdW4gMjEgMDk6NTk6NTggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZTIuYyAoYnVpbGRfc2NvcGVkX3JlZik6IFVzZSBTQ1JBVENIIGZvciBoZWFkIG9mIHR5cGVsaXN0LAorCXJhdGhlciB0aGFuIGNhbGxpbmcgYWxsb2NhLgorCisJRnJpIEp1biAxOSAxNjoyMzowMiAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKHVuaWZ5KTogVHlwZSB1bmlmaWNhdGlvbiBvZiB0aGluZ3MgdGhhdCBkbyBub3QgaGF2ZSBhCisJdmFsaWQgSURFTlRJRklFUl9URU1QTEFURSBmYWlsIGluc3RlYWQgb2YgY29yZSBkdW1waW5nLgkKKworCVdlZCBKdW4gMTcgMTM6MzY6MDQgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtcHQuYyAodHN1YnN0KTogRG9uJ3QgdHJ5IHRvIHN1YnN0aXR1dGUgaW50byBlcnJvcl9tYXJrX25vZGUuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3Bhcm1zKTogQ29udmVydCBpbml0aWFsaXplcnMgdGhhdCBoYXZlCisJVFJFRV9SRUFET05MWV9ERUNMX1Agc2V0IGludG8gdGhlaXIgY29uc3RhbnQgZXF1aXZhbGVudHMuCisKKwlUdWUgSnVuIDE2IDE5OjA5OjIzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVdlZCBKdW4gIDMgMTI6NTc6NTcgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW4gYXQgY3Mud2lkZW5lci5lZHUpCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEaXNhbGxvdyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiB1bmlvbnMuCisKKwlUdWUgSnVuIDE2IDE4OjExOjQ1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVdlZCBKdW4gIDMgMTI6NTc6NTcgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW4gYXQgY3Mud2lkZW5lci5lZHUpCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBGb3JiaWQgbG9jYWwgY2xhc3NlcyB0byBoYXZlIHN0YXRpYworCW1lbWJlcnMuCisKKwlNb24gSnVuIDE1IDIxOjQ0OjA4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVR1ZSBKdW4gIDIgMDk6MjY6MzQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW4gYXQgY3Mud2lkZW5lci5lZHUpCisKKwkqIGNwLWluaXQuYyAoYnVpbGRfbmV3KTogRG9uJ3QgYWxsb3cgdGhlIHVzZSBvZiBuZXcgb24gYSByZWZlcmVuY2UuCisKKwlNb24gSnVuIDE1IDIwOjUyOjA4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVR1ZSBKdW4gIDIgMDk6MjY6MzQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW4gYXQgY3Mud2lkZW5lci5lZHUpCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3Bhcm1zKTogRG9uJ3QgYWxsb3cgYSBsb2NhbCB2YXJpYWJsZSB0byBiZSB1c2VkCisJaW4gYSBkZWZhdWx0IGFyZ3VtZW50IGV4cHJlc3Npb24uCisKKwlNb24gSnVuIDE1IDE4OjU0OjI4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChmaW5pc2hfZGVjbCk6IEFkZCBhbiBlcnJvciBtZXNzYWdlIGZvciB1bmluaXRpYWxpemVkCisJY29uc3Qgb2JqZWN0cyBsaWtlIGNvbnN0IGludCBhOy4KKworCU1vbiBKdW4gMTUgMTY6MDU6MjIgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJTm90IHN1cmUgaWYgaXQgaXMgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGUgQysrIGZyb250IGVuZCwgYnV0Li4uCisKKwlTdW4gTWF5IDMxIDE1OjMxOjQ2IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuIGF0IGNzLndpZGVuZXIuZWR1KQorCisJKiBjcC10eXBlY2suYyAoc2VsZl9wcm9tb3RpbmdfYXJnc19wKTogQWxsb3cgdGhlIGFyZyB0eXBlIHRvIGJlCisJbnVsbCAoY29waWVkIGZyb20gT2N0IDE2LCAxOTkxIGNoYW5nZSBieSBXb29kKS4KKworCUZyaSBKdW4gMTIgMTY6NDI6MDUgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENvbmRpdGlvbmFsaXplIGNvZGUgdGhhdCAKKwlkZWFscyB3aXRoIHRoZSBjb21wYXJpc29uIG9mIG5vbi1kaXN0aW5jdCBvYmplY3QgdHlwZXMsIHRodXMgYXZvaWRpbmcKKwlhIGNvcmUgZHVtcC4KKworCUZyaSBKdW4gMTIgMTA6MjM6MTcgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJV2VkIEp1biAxMCAxOToyMDoyOSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbiBhdCBjcy53aWRlbmVyLmVkdSkKKworCSogY3AtdHJlZS5jIChicmVha19vdXRfY2FsbHMpOiBCZWdpbiBhdCAxIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mCisJdGhlIGxlbmd0aCBvZiB0aGUgdHJlZSBjb2RlLCBub3QgdGhlIGxlbmd0aCBpdHNlbGYsIGZvciBnZW5lcmljCisJZXhwcmVzc2lvbnMgYW5kIHRob3NlIHdpdGggc2lkZS1lZmZlY3RzLgorCisJVGh1IEp1biAxMSAxNzo0Mzo1NSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZXhwYW5kX2RlZmF1bHRfaW5pdCk6IE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlCisJZGV0YWlscyBvZiBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3JzIGFuZCBvdGhlciBtYWdpYyBpbiBvbmUgcGxhY2UuCisKKwkqIGNwLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogSW1wbGVtZW50IGRlZmF1bHQgY29uc3RydWN0b3JzCisJbW9yZSBmdWxseS4KKworCVRodSBKdW4gMTEgMTc6MTY6NTQgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRG9uJ3QgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGlmCisJd2UgYXJlIGxvb2tpbmcgdXAgdGhpbmdzIHNwZWN1bGF0aXZlbHkuCisKKwlUaHUgSnVuIDExIDEwOjU4OjQ3IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IFBlbmFsaXplIGNvbnN0IGFyZ3VtZW50cyBwYXNzZWQKKwlpbnRvIG5vbi1jb25zdCBwYXJhbWV0ZXJzLgorCisJVGh1IEp1biAxMSAxMDowMjo1MiAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBJbXBsZW1lbnQgbW9yZSByZWZlcmVuY2UgY2FzdHMgc28KKwl0aGF0IG9uZSBjYW4gY2FzdCBhIGJhc2UgcmVmZXJlbmNlIHRvIGEgZGVyaXZlZCByZWZlcmVuY2UuCisKK1R1ZSBKdWwgMjEgMTU6Mjg6MzYgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5oIChTRUNPTkRBUllfTUVNT1JZX05FRURFRCk6IERlZmluZSB0byBmb3JjZSByZWxvYWQgdG8gCisJaGFuZGxlIGFueSBjb3B5IGJldHdlZW4gR0VORVJBTF9SRUdTIGFuZCBGUF9SRUdTLiAgCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogR2l2ZSBzb21lIGluc25zIGhpZ2ggcHJpb3JpdGllcywKKwlpbnN0ZWFkIG9mIGV4Y2x1ZGluZyB0aGVtIGZyb20gc2NoZWR1bGluZywgdG8gZW5zdXJlIHRoYXQgdGhleSBlbmQKKwl1cCBhdCB0aGUgZW5kIG9mIHRoZSBibG9jayBhZnRlciBzY2hlZHVsaW5nLgorCisJKiBpOTYwLmMgKGk5NjBfb3V0cHV0X2xkY29uc3QpOiBVc2UgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRQorCWluc3RlYWQgb2YgcG9pbnRlciBpbmRpcmVjdGlvbiB0byBleHRyYWN0IGRvdWJsZSBmcm9tIENPTlNUX0RPVUJMRS4KKworVHVlIEp1bCAyMSAxNDowNTozNCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN2cjQuaCAoSEFORExFX1NZU1ZfUFJBR01BKTogRGVmaW5lZC4KKworCSogc29sLWNydCouYXNtOiBSZW5hbWVkIGZyb20gc29sLWNydCoucywgYW5kIHB1dCBpbiBjb25maWcuCisJKiB0LXNvbDIgKGNydCoubyk6IENoYW5nZWQgYWNjb3JkaW5nbHkuICBBbHNvIHVzZSAkKEFTKS4KKworCSogZ2JsLWN0b3JzLmggKE9OX0VYSVQpOiBUZXN0IEhBVkVfQVRFWElUIGJlZm9yZSBzdW4uCisKK01vbiBKdWwgMjAgMTg6NTY6MDIgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGZpc2hwb25kKQorCisJKiBzdnI0LmggKEFTTV9PVVRQVVRfQkVGT1JFX0NBU0VfTEFCRUwpOiBOZXcgbWFjcm8tLWRlZmF1bHQgZGVmaW5pdGlvbi4KKwkoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogVXNlIHRoYXQuCisJKiBtNjhrc2dzLmggKEFTTV9PVVRQVVRfQkVGT1JFX0NBU0VfTEFCRUwpOiBEbyB0aGUgc3diZWcgaGVyZS4KKwkoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogVXNlIHRoYXQuCisKKwkqIGNvbmZpZ3VyZSAobTY4ay0qLWFtaXgqKTogIFVzZSBmaXhpbmMuc3ZyNCBhbmQgaW5zdGFsbC5zaC4KKworCSogeC1hbWl4IChFTlFVSVJFX0NGTEFHUyk6ICBSZW1vdmU7IG9ic29sZXRlLgorCisJKiBhbWl4LmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6ICBSZW1vdmUgI3VuZGVmLgorCitNb24gSnVsIDIwIDE3OjQ1OjQ2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9zb3VyY2VfbGluZSk6IE5ldyBmdW5jdGlvbi4KKwkqIGZpbmFsLmMgKG91dHB1dF9zb3VyY2VfbGluZSk6IFVzZSB0aGF0LgorCisJKiBjb25maWd1cmUgKHNwYXJjLSotc3Vub3M1Kik6IE5ldyBhbGlhcy4KKwkoc3BhcmMtKi1zb2xhcmlzMiopOiBVc2UgdC1zb2wyLgorCisJKiBpODYwLm1kIChtdWxzaTNfbGl0dGxlLCBtdWxzaTNfYmlnKTogTmV3IGRlZmluZV9leHBhbmQgcGF0dGVybnMuCisJKG11bHNpMyk6IEp1c3QgdXNlIG9uZSBvZiB0aGVtLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1maXhpbmNsdWRlcyk6IFBhc3Mgc2Vjb25kIGFuZCB0aGlyZCBhcmdzLgorCitNb24gSnVsIDIwIDE2OjA3OjEyIDE5OTIgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiB2bXMuaCAoTUFZQkVfVk1TX0ZVTkNUSU9OX1BST0xPR1VFKTogY2hhbmdlIF9jJG1haW5fYXJncyB0bworCXVwcGVyY2FzZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZ2FzIHRvIG1ha2UgdGhlIGNhc2UgdHJhbnNsYXRpb24KKworU3VuIEp1bCAxOSAwMDowNDoxNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHJlZS5oIChDX1BST01PVElOR19JTlRFR0VSX1RZUEVfUCk6IE5ldyBtYWNyby4KKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMsIGdyb2tkZWNsYXJhdG9yLCBmaW5pc2hfc3RydWN0KTogCisJVXNlIENfUFJPTU9USU5HX0lOVEVHRVJfVFlQRV9QIHRvIGRlY2lkZSB3aGV0aGVyIGEgdHlwZSBwcm9tb3Rlcy4KKwkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IFVzZSBDX1BST01PVElOR19JTlRFR0VSX1RZUEVfUAorCXRvIGRlY2lkZSB3aGV0aGVyIGEgdHlwZSBzaG91bGQgcHJvbW90ZS4KKwkoc2VsZl9wcm9tb3RpbmdfYXJnc19wLCBzZWxmX3Byb21vdGluZ190eXBlX3ApOiBMaWtld2lzZS4KKworCSogYy1hdXgtaW5mby5jIChnZW5fdHlwZSk6IEZvciBhcnJheSB0eXBlLCBzdGF0ZSB0aGUgc2l6ZS4KKworCSogZmluYWwuYyAob3V0cHV0X2FkZHJfY29uc3QpOiBIYW5kbGUgWkVST19FWFRFTkQgYW5kIFNJR05fRVhURU5ELgorCSogZXhwci5jIChleHBhbmRfZXhwciwgTk9QX0VYUFIgY2FzZSk6IElmIEVYUEFORF9JTklUSUFMSVpFUiwKKwlnZW5lcmF0ZSBaRVJPX0VYVEVORCBvciBTSUdOX0VYVEVORDsgZG9uJ3QgZW1pdCBpbnNucy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogVXNlIGNvbnN0MF9ydHggYXMgREVDTF9SVEwgYW5kIGFzCisJREVDTF9JTkNPTUlOR19SVEwgaWYgdG1vZGUgb2YgcGFybSBpcyB2b2lkLgorCisJKiBqdW1wLmMgKG1hcmtfanVtcF9sYWJlbCk6IERvbid0IG1ha2UgUkVHX0xBQkVMIGZvciBub25sb2NhbCBsYWJlbC4KKwkqIGxvb3AuYyAoYWRkX2xhYmVsX25vdGVzKTogRG9uJ3QgbWFrZSBSRUdfTEFCRUwgZm9yIG5vbmxvY2FsIGxhYmVsLgorCShydHhfcmVudW1iZXJlZF9lcXVhbF9wKTogVXNlID09IHRvIGNvbXBhcmUgbm9ubG9jYWwgbGFiZWxzLgorCisJKiBydGwuaCAoTEFCRUxfUkVGX05PTkxPQ0FMX1ApOiBOZXcgbWFjcm8uCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogU2V0IExBQkVMX1JFRl9OT05MT0NBTF9QIGZvciBub25sb2NhbCBsYWJlbHMuCisJKiByZWxvYWQxLmMgKHNldF9sYWJlbF9vZmZzZXRzKTogSWdub3JlIG5vbmxvY2FsIGxhYmVscy4KKworCSogYy1wYXJzZS55IChwcmltYXJ5KTogU2V0IFRSRUVfQ09OU1RBTlQgaW4gdGhlIE5PUF9FWFBSIGZvciBhbiBlbnVtLgorCisJKiBTb2xhcmlzIGNoYW5nZXMgZnJvbSBDeWdudXM6CisKKwkqIGZpeGluYy5zdnI0OiB0YWtlIGEgdGhpcmQgYXJndW1lbnQgaW5kaWNhdGluZyB3aGVyZSBmaWxlcyB0byBiZQorCWNvcGllZCBpbiBzaG91bGQgY29tZSBmcm9tICh1c2VmdWwgd2hlbiBub3QgYnVpbGRpbmcgaW4gc291cmNlCisJZGlyZWN0b3J5KS4gIAorCVNldCBURVJNIHRvIGR1bWIgc28gZXggd29uJ3QgaGFuZyAoYnkgem9vKS4KKwkqIGZpeGluY2x1ZGVzOiBUYWtlIHRoZSBzYW1lIG5ldyBhcmd1bWVudC4KKworCSogZ21vbi1zb2wyLmM6IE5ldyBmaWxlLgorCSogdC1zb2wyOiBOZXcgZmlsZS4KKwkqIHNvbDItY3J0MS5zLCBzb2wyLWNydGkucywgc29sMi1jcnRuLnM6IE5ldyBmaWxlcy4KKworCSogeG0tc3BjdjQuaCAoT05MWV9JTlRfRklFTERTKTogRGVmaW5lLCBpZiBfX0dOVUNfXy4KKworCSogc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiAgVXNlIEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUxSRUYuCisJKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogIE1hcmsgd2l0aCBGSVhNRSB0aGF0IGl0IG5lZWRzIHdvcmsuCisJKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUxSRUYpOiAgRGVmaW5lLgorCSogc3BjLXNvbDIuaDogRW50aXJlIGZpbGUgaXMgbmV3IGV4Y2VwdCBmb3IKKwlkZWZpbmluZyBNRF9TVEFSVEZJTEVfUFJFRklYLgorCSogZGJ4b3V0LmMgKGRieG91dF9ibG9jayk6IG9iZXkgREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRQorCShkYnhvdXRfaW5pdCk6ICBVc2UgQVNNX0lERU5USUZZX0dDQ19BRlRFUl9TT1VSQ0UgaWYgZGVmaW5lZC4KKworCSogc3BhcmMuaCAoQ09OU1RBTlRfQUxJR05NRU5UKTogQWRkIHBhcmVucyBmb3IgU3VuIGNvbXBpbGVyLgorCitTdW4gSnVsIDE5IDExOjAzOjU2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBmaXNocG9uZCkKKworCSogaTM4NnY0LmggKHJlYWwuaCk6IFJlbW92ZSBhcHBhcmVudGx5IHVubmVjZXNzYXJ5IGluY2x1c2lvbi4KKwkqIGkzODZ2NC5oIChIQU5ETEVfU1lTVl9QUkFHTUEpOiAgUmVwbGFjZXMgSEFORExFX1BSQUdNQS4KKworU2F0IEp1bCAxOCAyMDozNzozNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IERvbid0IHNldCBzaG9ydGVuIGZvciBzaWduZWQgZGl2aXNpb24uCisKKwkqIGZpbmFsLmMgKGVuZF9maW5hbCk6IEFsaWduIHRoZSB0YWJsZSBvZiBhZGRyZXNzZXMuCisKK0ZyaSBKdWwgMTcgMjM6NDk6MjggMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjZXhwLnk6IEluY2x1ZGUgc3RkaW8uaC4KKworRnJpIEp1bCAxNyAwNjoxNzozNCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogY3AtdHJlZS5oIChERUNMX1RISVNfRVhURVJOKTogUmVuYW1lZCBmcm9tIERFQ0xfRVhURVJOQUwuCisJKiBjcC1wdC5jLCBjcC1kZWNsLmM6IFJlbmFtZSBERUNMX0VYVEVSTkFMIC0+IERFQ0xfVEhJU19FWFRFUk4gYW5kCisJdGhlbiByZW5hbWUgVFJFRV9FWFRFUk5BTCAtPiBERUNMX0VYVEVSTkFMLgorCitGcmkgSnVsIDE3IDA1OjU5OjI2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzeyxfMX0pOiBEb24ndCBkbyBpbnN0YW50aWF0aW9uCisJaGVyZSBpZiB0aGUgYWRkcmVzcyBpcyBtb2RlLWRlcGVuZGVudC4KKworCSogbGliZ2NjMi5jOiBJbmNsdWRlIHRjb25maWcuaCBpbnN0ZWFkIG9mIHRtLmguCisJSW5jbHVkZSBtYWNobW9kZS5oLgorCShfX2RvX2dsb2JhbF9kdG9ycyk6IENhc3QgdG8gd2lkZXN0IGludGVnZXIgdHlwZSwgdGhlbiBuYXJyb3csIHRvCisJYXZvaWQgd2FybmluZyBpZiBpbnQgaXMgbmFycm93ZXIgdGhhbiBwb2ludGVyLgorCSogTWFrZWZpbGUuaW4gKGxpYmdjYzIuYSk6IEluY2x1ZGVzIG1hY2htb2RlLmguCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IEFsbG93IHBhcmFkb3hpY2FsIFNVQlJFR3MgaW4gdGhlIHRhYmxlLgorCisJKiByZWxvYWQuYyAoc2Vjb25kYXJ5X21lbWxvY3N7LF9lbGltfSk6IE5ldyB2YXJpYWJsZXMuCisJKGdldF9zZWNvbmRhcnlfbWVtLCBjbGVhcl9zZWNvbmRhcnlfbWVtKTogTmV3IGZ1bmN0aW9uLgorCShwdXNoX3JlbG9hZCk6IAlDb252ZXJ0IFNVQlJFRyBvZiBoYXJkIHJlZyB0byBuZXcgaGFyZCByZWcuCisJQ2FsbCBnZXRfc2Vjb25kYXJ5X21lbSB3aGVuIG5lZWRlZC4KKwkoZmluZF9yZWxvYWRzKTogQ2xlYXIgc2Vjb25kYXJ5X21lbWxvY19lbGltIGZvciBlYWNoIGluc24uCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IElmIFNFQ09OREFSWV9NRU1PUllfTkVFREVELCBjaGVjayBmb3IgZnJhbWUKKwlzaXplIGNoYW5nZWQuCisJQ2FsbCBjbGVhcl9zZWNvbmRhcnlfbWVtLgorCShlbWl0X3JlbG9hZF9pbnNucywgZ2VuX2lucHV0X3JlbG9hZCk6IFVzZSBtZW1vcnkgd2hlbiByZXF1aXJlZCB0bworCWRvIHJlbG9hZC4KKwkqIHJlbG9hZC5oIChnZXRfc2Vjb25kYXJ5X21lbSk6IERlY2xhcmUuCisKKwkqIGNjY3AuYyAoTlVMTF9QVFIpOiBEZWZpbmUgYXMgdm9pZCAqIGlmIFNUREMuCisKKwkqIHJzNjAwMC5tZCAobmVnZGkyKTogQ29ycmVjdGVkIG5hbWU7IHVzZWQgdG8gYmUgbmVnZGkzLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIFNFVCk6IFB1dCBjb2RlIHRvIG1vdmUgU1VCUkVHIGFmdGVyCisJY29kZSB0aGF0IGNhbGxzIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uLgorCShtYWtlX2V4dHJhY3Rpb24pOiBEb24ndCBjaGVjayBmb3IgSU5ORVIgYSBSRUcgZXhjZXB0IGZvciBpbiBkZXN0LgorCUZpeCB0eXBvIGNoZWNraW5nIGZvciBSRUcuCisJKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogR2V0IHRoZSByZXN1bHQgaW4gdGhlIHNhbWUgbW9kZSBpdAorCXVzZWQgdG8gYmUuCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IElmIGEgU1VCUkVHIHJlcXVpcmVzIGEgc2Vjb25kYXJ5IHJlbG9hZAorCWJ1dCB0aGUgaW5uZXIgZXhwcmVzc2lvbiBkb2Vzbid0LCByZWxvYWQgdGhlIGlubmVyIGV4cHJlc3Npb24KKwlpbnN0ZWFkLgorCitGcmkgSnVsIDE3IDAyOjIwOjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IEhhbmRsZSBgLVdsLCcgYW5kIGAtV2EsJy4KKwkoZG9fc3BlY18xKTogSGFuZGxlICVZLgorCShkZWZhdWx0X2NvbXBpbGVycyk6IFVzZSAlWSBpbiBhc3NlbWJsZXIgY29tbWFuZHMuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEluIGxhc3QgY2hhbmdlLCB0ZXN0IG1vZGUgaW4gcGFybSB0eXBlLgorCitUaHUgSnVsIDE2IDE1OjAzOjI1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBJZ25vcmUganVtcHMgdG8gbWlzc2luZyBsYWJlbHMsCisJd2hlbiB1c2luZyBQLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBJbXByb3ZlIHNoaWZ0IHdhcm5pbmcgbWVzc2FnZXMuCisKKwkqIHgtZHB4MiAoQVMpOiBVc2UgJChHQVMpLgorCShHQVMpOiBOZXcgdmFyaWFibGUuCisKKwkqIG1vdDMzMDAuaCAoQVNNX09VVFBVVF9DQVNFX0VORCk6IERlbGV0ZWQuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IElmIGFyZyB3YXMgcGFzc2VkIGJ5IGludmlzaWJsZQorCXJlZmVyZW5jZSwgY29weSBpdCB0byBhIHBzZXVkbyBpZiBhcHByb3ByaWF0ZS4KKworCSogZHdhcmZvdXQuYyAocHVyZV9vcl92aXJ0dWFsX2F0dHJpYnV0ZSk6CisJQWRkICNpZiAwIGFyb3VuZCB1c2Ugb2YgREVDTF9BQlNUUkFDVF9WSVJUVUFMX1AuCisKK1dlZCBKdWwgMTUgMTY6Mjk6MDUgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogZHdhcmZvdXQuYyAoQkxPQ0tfSU5MSU5FX0ZVTkNUSU9OKTogIE9ic29sZXRlIGRlZmluaXRpb24gZGVsZXRlZC4KKwkoYmxvY2tfdWx0aW1hdGVfb3JpZ2luKTogIE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2Jsb2NrKToKKwlMb2NhbCB2YXIgYGhhdmVfc2lnbmlmaWNhbnRfbG9jYWxzJyByZW5hbWVkIHRvIGBtdXN0X291dHB1dF9kaWUnLgorCShvdXRwdXRfYmxvY2spOiAgUmV3cml0dGVuIHRvIGhhbmRsZSBhYnN0cmFjdCAmIGNvbmNyZXRlIGluc3RhbmNlcyBvZgorCWJsb2NrcyBvZiBpbmxpbmUgZnVuY3Rpb25zLgorCShvdXRwdXRfZGVjbHNfZm9yX3Njb3BlKToKKwlEb24ndCBidW1wIGBuZXh0X2Jsb2NrX251bWJlcicgZm9yIGFic3RyYWN0IGJsb2Nrcy4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGBkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wnIGZvcgorCWJvdGggdHlwZXMgb2YgImFic3RyYWN0IiBpbnN0YW5jZXMgb2YgaW5saW5lIGZ1bmN0aW9ucy4KKworCSogdHJlZS5kZWYgKEJMT0NLKTogIFVzZSBuZXcgdHJlZSBjb2RlIGNhdGVnb3J5IGxldHRlciAnYicgZm9yIEJMT0NLcy4KKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfYmxvY2spOiAgTmV3IHN0cnVjdCB0eXBlIGRlZmluaXRpb24gYWRkZWQuCisJKEJMT0NLX1ZBUlMsIEJMT0NLX1RZUEVfVEFHUywgQkxPQ0tfU1VCQkxPQ0tTLCBCTE9DS19IQU5ETEVSX0JMT0NLKToKKwlDaGFuZ2VkIHRvIHJlZmVyZW5jZSBmaWVsZHMgb2YgdGhlIG5ldyBgc3RydWN0IHRyZWVfYmxvY2snIHR5cGUuCisJKEJMT0NLX0FCU1RSQUNUX09SSUdJTiwgQkxPQ0tfQUJTVFJBQ1QpOiAgRGVmaW5pdGlvbnMgYWRkZWQuCisJKHVuaW9uIHRyZWVfbm9kZSk6ICBBZGRlZCBgc3RydWN0IHRyZWVfYmxvY2snIGFzIGEgbmV3IHZhcmlhbnQuCisJKiB0cmVlLmMgKHR5cGVkZWYgdHJlZV9ub2RlX2tpbmQpOiAgQWRkZWQgbmV3IGtpbmQsIGkuZS4gYGJfa2luZCcuCisJKHRyZWVfbm9kZV9raW5kX25hbWVzKTogIEFkZGVkIHN0cmluZyBuYW1lIGZvciBuZXcga2luZCBgYl9raW5kJy4KKwkobWFrZV9ub2RlLCBjb3B5X25vZGUsIHN0YWJpbGl6ZV9yZWZlcmVuY2VfMSk6CisJSGFuZGxlIGNhc2UgJ2InIChmb3IgQkxPQ0sgbm9kZXMpLgorCShtYWtlX25vZGUpOiAgRG9uJ3QgdHJ5IHRvIGRlYWwgd2l0aCBCTE9DS3Mgd2hlbiBkb2luZyBhIHR5cGUgJ2UnIG5vZGUuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOgorCUhhbmRsZSB0eXBlICdiJzsgZGVsZXRlIGNvZGUgZm9yIEJMT0NLIGZyb20gJ2UnIGNhc2UuCisJSGFuZGxlIGZpZWxkcyBCTE9DS19BQlNUUkFDVF9PUklHSU4gYW5kIEJMT0NLX0FCU1RSQUNULgorCSogY2FsbHMuYyAoY2FsbHNfYWxsb2NhKTogIERvbid0IHJldHVybiAwIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGV4cHIKKwlnaXZlbiBpcyBoZWFkZWQgYnkgYSB0eXBlICdiJyBub2RlLgorCSogY3AtdHJlZS5jIChicmVha19vdXRfY2FsbHMpOiAgQWRkIGNhc2UgZm9yIGRlY2wgbm9kZXMuCisJQWRkZWQgY2FzZSB0byBjYXRjaCBCTE9DSyBub2RlcyAoYW5kIHRvIGFib3J0KS4KKwkqIGludGVncmF0ZS5jIChjb3B5X2RlY2xfdHJlZSk6ICBTZXQgQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOIGluIG5ldworCWluc3RhbmNlIGJsb2NrIGlmIG5vdCBhbHJlYWR5IHNldC4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFNldCBCTE9DS19BQlNUUkFDVF9PUklHSU4gZm9yIG91dGVybW9zdAorCXNjb3BlIHRvIHBvaW50IHRvIHByb2dlbml0b3IgKGFic3RyYWN0IGlubGluZSkgRlVOQ1RJT05fREVDTCBub2RlLgorCShpbnRlZ3JhdGVfZGVjbF90cmVlKTogIFNldCBCTE9DS19BQlNUUkFDVF9PUklHSU4gZm9yIGlubGluZWQgaW5zdGFuY2UKKwlCTE9DS3MuCisJKHNldF9ibG9ja19vcmlnaW5fc2VsZiwgc2V0X2RlY2xfb3JpZ2luX3NlbGYsIHNldF9ibG9ja19hYnN0cmFjdF9mbGFncywKKwlzZXRfZGVjbF9hYnN0cmFjdF9mbGFncyk6ICBOZXcgZnVuY3Rpb25zLgorCShvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogIENhbGwgYHNldF9kZWNsX29yaWdpbl9zZWxmJyBmb3IgZWFjaCBmbmRlY2wKKwl3aGljaCBpcyBhYm91dCB0byBoYXZlIGFuIG91dC1vZi1saW5lIGluc3RhbmNlIGdlbmVyYXRlZCBmb3IgaXQuCisKK1dlZCBKdWwgMTUgMTU6MDg6MDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogUHVzaCB0cnVuY2F0aW9uIGluc2lkZSBDT05EX0VYUFIuCisKKwkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogQWx3YXlzIGRvIHByb3RlY3RfZnJvbV9xdWV1ZSBvbiB4LCB5LCBzaXplLgorCShleHBhbmRfZmxvYXQsIGV4cGFuZF9maXgpOiBMaWtld2lzZS4KKwkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQsIGV4cGFuZF9zZXRfZmxhZyk6CisJQ2FsbCBwcm90ZWN0X2Zyb21fcXVldWUgYmVmb3JlIGNvbnZlcnRfdG9fbW9kZS4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogRG9uJ3QgY2FsbCBwcm90ZWN0X2Zyb21fcXVldWUuCisJKGVtaXRfYmxvY2tfbW92ZSk6IFByb3RlY3QgU0laRS4KKworCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpIFtTRVRKTVBfVklBX1NBVkVfQVJFQV06CisJQWx3YXlzIGNhbGwgcm91bmRfcHVzaDsgd2UgY2FuJ3QgcmVseSBvbiBhbGlnbm1lbnQgb2Ygc2l6ZS4KKworV2VkIEp1bCAxNSAwNjo0NzoxMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBWZXJpZnkgdGhhdCBJMkRFU1QgaXMgYSByZWdpc3RlciBiZWZvcmUKKwl0cnlpbmcgdG8gY2hhbmdlIGl0cyBtb2RlLgorCitUdWUgSnVsIDE0IDE1OjEzOjI4IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBIYW5kbGUgbmVzdGVkIHN0cnVjdCByZWRlZmluaXRpb25zLgorCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IEhhbmRsZSBOVUxMIGRzaXplLgorCitUdWUgSnVsIDE0IDIxOjMxOjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscywgcHVzaGRlY2wsIGdyb2tkZWNsYXJhdG9yKTogCisJKHN0b3JlX3Bhcm1fZGVjbHMsIGNvbWJpbmVfcGFybV9kZWNscywgZmluaXNoX2Z1bmN0aW9uKToKKwlVc2UgVFlQRV9NQUlOX1ZBUklBTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBzcGVjaWZpYyBub24tdm9pZCB0eXBlcy4KKwkqIGMtdHlwZWNrLmMgKHNlbGZfcHJvbW90aW5nX2FyZ3NfcCwgc2VsZl9wcm9tb3RpbmdfdHlwZV9wKToKKwkoc2lnbmVkX3R5cGUsIHVuc2lnbmVkX3R5cGUsIGRlZmF1bHRfY29udmVyc2lvbiwgY2hlY2tfZm9ybWF0KToKKwkoYnVpbGRfYmluYXJ5X29wLCBjX2V4cGFuZF9zdGFydF9jYXNlKTogTGlrZXdpc2UuCisKK01vbiBKdWwgMTMgMTQ6NTc6MzQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRml4IGJyYWlubyB2YWxpZGF0aW5nIHJldCB0eXBlIG9mIG1haW4uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBSZWZlciB0byBlcnJubyBhdCBydGwgbGV2ZWwgb25seS4KKwkqIHNwYXJjLmggKFRBUkdFVF9FRE9NLCBHRU5fRVJSTk9fUlRYKTogTmV3IG1hY3Jvcy4KKworTW9uIEp1bCAxMyAwNjozNTo1MyAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6CisJRm9yIGZzcXJ0LCBhbHdheXMgdXNlIHRoZSBzcGVjaWFsIGluc24sIHRoZW4gdGVzdCBmb3IgbmFuLgorCitNb24gSnVsIDEzIDA4OjQ1OjM0IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kOiBDb25zdHJhaW50IGZpeGVzIGZyb20gVG9yYmpvcm4uCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluIGB4ID0gYTsgaWYgKC4uLikgeCA9IGI7JyBhbGxvdyBib3RoIGEKKwlhbmQgYiB0byBiZSBub24temVybyBpZiBqdW1wcyBhcmUgdmVyeSBleHBlbnNpdmUuICBBbHNvIGFsbG93IGEKKwlhbmQgYiB0byBiZSBjb25zdGFudHMgd2hlcmUgYWxsIHRoZSBzZXQgYml0cyBpbiBhIGFyZSBhbHNvIHNldCBpbgorCWIgd2hlbiBqdW1wcyBhcmUgbWVyZWx5IGV4cGVuc2l2ZS4KKworU3VuIEp1bCAxMiAxNzo0MzowMyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5wZWVwLmMgKG1hdGNoX3J0eCk6IFNvbWV0aW1lcyB1c2UgJWxkIHdoZW4gcHJpbnRpbmcgYW4gWFdJTlQuCisKKwkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IElmIE9QIGlzIGEgUkVHLCB1c2UgaXQncyBtb2RlCisJaW4gY2FzZSB0aGUgbW9kZSBpbiBNQVRDSF9PUEVSQU5EIGlzIFZPSURtb2RlLgorCitTdW4gSnVsIDEyIDEzOjAzOjU0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IFJlcGxhY2UgdGhlIGNvZGUgdGhhdCBmaW5kcyBhbGwgZGlyZWN0b3JpZXMKKwlzbyB0aGF0IGl0IGxvb2tzIGZvciBzdWJkaXJzIG9mIGRpciByZWFjaGVkIHZpYSBzeW1saW5rcy4KKworCSogY3AtdHJlZS5oIChJREVOVElGSUVSX1ZJUlRVQUxfUCk6IE1hY3JvIG1vdmVkIGhlcmUuCisJKiB0cmVlLmggKElERU5USUZJRVJfVklSVFVBTF9QKTogRGVsZXRlZCBmcm9tIGhlcmUuCisKKwkqIHJ0bC5oIChOT1RFX0JMT0NLX05VTUJFUiwgU0VUX05PVEVfQkxPQ0tfTlVNQkVSKTogTmV3IG1hY3Jvcy4KKwkoTk9URV9ERUNMX05BTUUsIE5PVEVfREVDTF9DT0RFLCAuLi4pOiAjaWYgMCdkLgorCSogZnVuY3Rpb24uYyAoaWRlbnRpZnlfYmxvY2tzLCByZW9yZGVyX2Jsb2Nrcyk6IE5ldyBmdW5jdGlvbnMuCisJKGFsbF9ibG9ja3MsIGJsb2Nrc19ucmV2ZXJzZSk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGlzaS5oOiBEZWxldGVkIHRoZSAjZXJyb3I7IGZpbGUgc2hvdWxkIHdvcmsgbm93LgorCShMSUJfU1BFQyk6IFVzZSAtbGcgb25seSBvbmNlLgorCShTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSk6IERlZmluZWQuCisKKwkqIHByb3RvaXplLmMgKHByb2Nlc3NfYXV4X2luZm9fZmlsZSk6IFNldCBtdXN0X2NyZWF0ZSBiZWZvcmUganVtcGluZyB0bworCXN0YXJ0X292ZXIuICBEb24ndCBjbGVhciBtdXN0X2NyZWF0ZSBhdCBzdGFydF9vdmVyLiAgRG9uJ3QgdGVzdAorCXNvdXJjZSBmaWxlIG1vZCB0aW1lIGZvciBTWVNDQUxMUy4KKworCSogbWFjaG1vZGUuaCAoR0VUX01PREVfTlVOSVRTKTogQXZvaWQgZGl2aXNpb24gYnkgemVyby4KKworU2F0IEp1bCAxMSAyMjoyMTo0NyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtcGFyc2UueSAocHJpbWFyeSk6IERvbid0IHRlc3QgVFJFRV9FWFRFUk5BTDsKKwljYWxsIGFzc2VtYmxlX2V4dGVybmFsIHJlZ2FyZGxlc3MuCisKKwkqIHRyZWUuaCAoREVDTF9JTkxJTkUsIERFQ0xfTk9OTE9DQUwsIERFQ0xfUkVHSVNURVIsIERFQ0xfRVhURVJOQUwpOgorCVJlbmFtZWQgZnJvbSBUUkVFX0lOTElORSwgVFJFRV9OT05MT0NBTCwgVFJFRV9SRUdERUNMLCBUUkVFX0VYVEVSTkFMLgorCUFsbCB1c2VzIGNoYW5nZWQuCisKKwkqIHhtLWhwMzIwLmggKFVTRyk6IERlZmluZSBpdC4KKworU2F0IEp1bCAxMSAyMTo0Mzo1NiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIG1laXNzbmVyIHZlcnNpb24gbnVtYmVyIHRvIDIxLgorCisJKiBtaXBzLm1kIChhbmRzaTMsIGlvcnNpMywgeG9yc2kzKTogTWFrZSBwcmVkaWNhdGVzIG1hdGNoIHRoZQorCWFjdHVhbCBtYWNoaW5lLCBzaW5jZSBjb21iaW5lIGNhbiBub3cgcmVjcmVhdGUgdGhlIGJpdGZpZWxkcywgYW5kCisJZG9lc24ndCBkbyBtdWx0aXBsZSBsb2dpY2FsIG9wZXJhdGlvbnMgd2hlbiBzZXR0aW5nIG1vcmUgdGhhbiBvbmUKKwliaXRmaWVsZCBpbiBhIHdvcmQuCisKKwkqIG9iamMtYWN0aW9ucy5jICh4bWFsbG9jLCBmcmVlKTogRG9uJ3QgcHJvdmlkZSBleHRlcm4gZGVjbHMgZm9yCisJdGhlc2UsIHNpbmNlIHRyZWUuaCBhbmQgcnRsLmggYm90aCBub3cgcHJvdmlkZSB0aGVtLgorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IERlY2xhcmUgYSB2YXJpYWJsZSBpLCBzaW5jZSBhIGZvciBsb29wCisJdXNlcyBpdCBhcyBhbiBpbmRleC4gIFJlbW92ZSBhbiBleHRyYSAnKCcgZnJvbSBhIGJ1aWxkX2ludF8yIGNhbGwuCisKK1NhdCBKdWwgMTEgMTM6MTM6MDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYzogR2V0IHJpZCBvZiBkZWZhdWx0IGRlZmluaXRpb25zIG9mIEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IKKwlhbmQgQVNNX09VVFBVVF9ERVNUUlVDVE9SLgorCisJKiBjLWF1eC1pbmZvIChhZmZpeF9kYXRhX3R5cGUpOiBEb24ndCBiZSBmb29sZWQgYnkgbmFtZXMgc3RhcnRpbmcKKwl3aXRoIGBjb25zdCcgb3IgYHZvbGF0aWxlJy4JCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogRGVhbCB3aXRoIG5lc3RlZCB7Li4ufSBmb3Igc2NhbGFyLgorCisJKiBsb29wLmMsIHJlbG9hZDEuYzogSW5jbHVkZSBzdGRpby5oIGJlZm9yZSBjb25maWcuaC4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTYXZlIGFuZCByZXN0b3JlIERFQ0xfQVJHVU1FTlRTLgorCitGcmkgSnVsIDEwIDIyOjQyOjM0IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiB0cmVlLmMgKGJ1aWxkX3JlYWxfZnJvbV9pbnRfY3N0KTogVHJ1bmNhdGUgd2hlbiBmb2xkaW5nIHRvIGZsb2F0LgorCShyZWFsX3ZhbHVlX2Zyb21faW50X2NzdCk6IERvIG5vdCB0cmVhdCB0aGUgdG9wbW9zdCBiaXQKKwlvZiBhbiB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgYXMgYSBzaWduIGJpdC4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBEb24ndCBvcHRpbWl6ZSAwLjAveCB0byAwLjAKKwlpZiBJRUVFIGZsb2F0aW5nIHBvaW50IGlzIHVzZWQsIGJlY2F1c2UgeCBtaWdodCBiZSBuZWdhdGl2ZSBvciBOYU4uCisKK0ZyaSBKdWwgMTAgMTU6Mzc6NDIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisgICAgCSogZ2VucGVlcC5jIChtYXRjaF9ydHgpOiBIYW5kbGUgYHcnIGVsdHMgb2YgcnR4LgorCisJKiBNYWtlZmlsZS5pbiAoSU5URVJOQUxfQ0ZMQUdTKTogQWRkIC1ESU5fR0NDLgorCitGcmkgSnVsIDEwIDE4OjU2OjIyIDE5OTIgIEVyaWMgWW91bmdkYWxlICh5b3VuZ2RhbGVAdjY1NTBkLm5ybC5uYXZ5Lm1pbCkKKworCSogY2NjcC5jIChmaW5jbHVkZSk6IENsZWFuIGVycm9yIG1zZiBpZiBmaWxlX3NpemVfYW5kX21vZGUgZmFpbHMuCisKK0ZyaSBKdWwgMTAgMTM6NDQ6NDYgMTk5MiAgSG93YXJkIENodSAgKGh5Y0BoYW5hdW1hLmpwbC5uYXNhLmdvdikKKworCSogZngyODAwLmggKExJTktfTElCR0NDX1NQRUNJQUwpOiBEZWZpbmVkLgorCShEQlhfT1VUUFVUX1NUQU5EQVJEX1RZUEVTKTogQ2hlY2sgdGhhdCBERUNMX05BTUUoZGVjbCkgZXhpc3RzCisJYmVmb3JlIHRyeWluZyB0byBnZXQgaXRzIElERU5USUZJRVJfUE9JTlRFUi4KKworVGh1IEp1bCAgOSAyMDo1NjowMSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZV9tZXRob2RzKTogIEZpeCBtaW5pbWFsX2RlYnVnIHNvCisJdGhhdCBpdCBza2lwcyBhIHJlZHVuZGFudCBjbGFzcyBuYW1lIHByZWZpeCwgYXMgaW50ZW5kZWQuCisJSXQgbm93IGV4cGVjdHMgdGhlIGxlbmd0aCBkaWdpdHMgdGhhdCBwcmVjZWRlIHRoZSBjbGFzcyBuYW1lLgorCitUaHUgSnVsICA5IDE4OjIzOjEyIDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluLCBsaWJnY2MyLmMsIGxvbmdsb25nLmg6IFJlbmFtZSB1ZGl2X3VzaW5nX3NkaXYgdG8KKwl1ZGl2X3dfc2Rpdi4KKworVGh1IEp1bCAgOSAxODoxMDo0MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuaCAoU1RSSVBfVFlQRV9OT1BTKTogTmV3IG1hY3JvLgorCSogYy1kZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBVc2UgU1RSSVBfVFlQRV9OT1BTLgorCSogYy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogVXNlIFNUUklQX1RZUEVfTk9QUy4KKwkoYnVpbGRfYmluYXJ5X29wLCBidWlsZF9mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCisJKiBjLWNvbW1vbi5jIChjaGVja19jYXNlX3ZhbHVlKTogVXNlIFNUUklQX1RZUEVfTk9QUy4KKworCSogbW90MzMwMC5oIChBU01fT1VUUFVUX0NBU0VfRU5EKTogTmV3IG1hY3JvLgorCSogbTY4ay5jIChzd2l0Y2hfdGFibGVfZGlmZmVyZW5jZV9sYWJlbF9mbGFnKTogTmV3IHZhcmlhYmxlLgorCisJKiBpODYwLm1kIChRSSBhbmQgSEkgYnRlL2J0bmUgcGF0dGVybnMpOiBEZWxldGVkLgorCitUaHUgSnVsICA5IDA2OjA5OjIwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IERvbid0IHVzZSBTVFJJUF9OT1BTLgorCisJKiBwcmludC1ydGwuYzogTWlzc2luZyBtZXJnZSBmcm9tIDY0LWJpdCBjaGFuZ2VzLgorCShwcmludF9ydHgpOiBBZGQgbmV3IGNhc2UgJ3cnLgorCitXZWQgSnVsICA4IDE0OjM1OjM5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMsIGZpeGluYy5zdnI0OiBFcnJvciBpZiBubyBhcmd1bWVudC4KKworCSogdHJlZS5jIChpbnRlZ2VyX3plcm9wLCBpbnRlZ2VyX29uZXAsIGludGVnZXJfYWxsX29uZXNwKToKKwkoaW50ZWdlcl9wb3cycCwgcmVhbF96ZXJvcCwgcmVhbF9vbmVwLCByZWFsX3R3b3ApOiBVc2UgU1RSSVBfTk9QUy4KKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IExpa2V3aXNlLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgorCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QsIGJ1aWxkX2VudW1lcmF0b3IpOiBMaWtld2lzZS4KKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbiwgYnVpbGRfYmluYXJ5X29wKTogTGlrZXdpc2UuCisJKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KKworCSogaW50ZWdyYXRlLmMgKGludGVncmF0ZV9kZWNsX3RyZWUpOiBHZXQgcmlkIG9mIGFyZyBmdW5jdGlvbmJvZHk7CisJaXQgd2FzIGFsd2F5cyAwLgorCisJKiBtb3QzMzAwLmg6IEZpeCB0eXBvLgorCisJKiBmaW5hbC5jIChsZWFmX3JlbnVtYmVyX3JlZ3NfaW5zbik6IEhhbmRsZSBuZXcgJ3cnIGZvcm1hdC4KKworV2VkIEp1bCAgOCAxNToxODozMyBQRFQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiB0cmVlLmggKERFQ0xfQUJTVFJBQ1RfT1JJR0lOLCBERUNMX0FCU1RSQUNUKTogIERlZmluaXRpb25zIGFkZGVkLgorCShzdHJ1Y3QgdHJlZV9kZWNsKTogIE5ldyBmaWVsZHMgYGFic3RyYWN0X29yaWdpbicgJiBgYWJzdHJhY3RfZmxhZycuCisJKHN0cnVjdCB0cmVlX2RlY2wpOiAgRmllbGQgYGZyb21faW5saW5lX2ZsYWcnIGRlbGV0ZWQuCisJKERFQ0xfRlJPTV9JTkxJTkUpOiAgRGVmaW5pdGlvbiByZXZpc2VkIHRvIGNoZWNrIERFQ0xfQUJTVFJBQ1RfT1JJR0lOLgorCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF9saXN0KTogIE5ldyBmdW5jdGlvbiBhZGRlZC4KKwkoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBDYWxsIGBjb3B5X2RlY2xfbGlzdCcgZm9yIGZvcm1hbCBwYXJhbWV0ZXJzLgorCVNldCBERUNMX0FCU1RSQUNUX09SSUdJTiBmb3IgZm5kZWNsIHRvIHBvaW50IHRvIGl0c2VsZi4KKwkoY29weV9kZWNsX3RyZWUpOiAgVXNlIGBjb3B5X2RlY2xfbGlzdCcgcmF0aGVyIHRoYW4ganVzdCBgY29weV9saXN0Jy4KKwkoaW50ZWdyYXRlX3Bhcm1fZGVjbHMsIGludGVncmF0ZV9kZWNsX3RyZWUpOiAgU2V0IERFQ0xfQUJTVFJBQ1RfT1JJR0lOCisJdG8gcG9pbnQgdG8gdGhlIHByb2dlbml0b3IuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiAgUHJpbnQgdGhlIHZhbHVlIG9mIERFQ0xfQUJTVFJBQ1RfT1JJR0lOCisJcmF0aGVyIHRoYW4gdGhlIHZhbHVlIG9mIERFQ0xfRlJPTV9JTkxJTkUuCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9pbmxpbmVkX2VudW1lcmF0aW9uX3R5cGVfZGllKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfaW5saW5lZF9zdHJ1Y3R1cmVfdHlwZV9kaWUsIG91dHB1dF9pbmxpbmVkX3VuaW9uX3R5cGVfZGllKToKKwlOZXcgZnVuY3Rpb25zIGFkZGVkLgorCShvdXRwdXRfZW50cnlfcG9pbnRfZGllLCBvdXRwdXRfZm9ybWFsX3BhcmFtZXRlcl9kaWUsCisJb3V0cHV0X2dsb2JhbF9zdWJyb3V0aW5lX2RpZSwgb3V0cHV0X2dsb2JhbF92YXJpYWJsZV9kaWUsCisJb3V0cHV0X2xhYmVsX2RpZSwgb3V0cHV0X2xleGljYWxfYmxvY2tfZGllLAorCW91dHB1dF9pbmxpbmVkX3N1YnJvdXRpbmVfZGllLCBvdXRwdXRfbG9jYWxfdmFyaWFibGVfZGllLAorCW91dHB1dF9sb2NhbF9zdWJyb3V0aW5lX2RpZSk6CisJRml4ZWQgdG8gaGFuZGxlIGlubGluZSBhYnN0cmFjdCAmIGNvbmNyZXRlIChpLmUuIGlubGluZWQpIGluc3RhbmNlcy4KKwkob3V0cHV0X2lubGluZWRfc3Vicm91dGluZV9kaWUpOiBEZWxldGVkLgorCShvdXRwdXRfbGFiZWxfZGllKTogIERvbid0IHBlcm1pdCB0aGUgcnR4IGFzc29jaWF0ZWQgd2l0aCBhIG5hbWVkCisJdXNlci1kZWNsYXJlZCBsYWJlbCB0byBiZSBtYXJrZWQgYXMgSU5TTl9ERUxFVEVEX1AuCisJKG91dHB1dF90YWdnZWRfdHlwZV9pbnN0YW50aWF0aW9uKTogIE5ldyBmdW5jdGlvbiBhZGRlZC4KKwkob3V0cHV0X2RlY2wpOiAgQ2FsbCBgb3V0cHV0X3RhZ2dlZF90eXBlX2luc3RhbnRpYXRpb24nLgorCURvbid0IGdlbmVyYXRlIGEgcHVibmFtZXMgbGFiZWwgZm9yIGFueXRoaW5nIG1hcmtlZCBhcyBERUNMX0FCU1RSQUNULgorCShvdXRwdXRfZGllKTogIEdlbmVyYXRlIHRoZSBwcm9wZXIga2luZCBmbyBESUUgZm9yIGVhY2ggb2YgdGhlIGZvdXIKKwlwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiB7bm9ybWFsLCBpbmxpbmVkfSB7dmFyaWFibGUsIHBhcmFtZXRlcn0uCisJKGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6ICBEb24ndCBnZW5lcmF0ZSBwdWJuYW1lcyBlbnRyaWVzIGlmCisJc3RyaWN0bHkgYWJzdHJhY3QuCisKKwkqIGR3YXJmb3V0LmMgKG9yZGVyaW5nX2F0dHJpYnV0ZSk6ICBPbmx5IGRlZiBpZiBVU0VfT1JERVJJTkdfQVRUUklCVVRFCisJaXMgZGVmaW5lZC4KKwkob3V0cHV0X2FycmF5X3R5cGVfZGllKTogT25seSBjYWxsIG9yZGVyaW5nX2F0dHJpYnV0ZSBpZiBpdCBpcyBkZWZpbmVkLgorCShuYW1lX2FuZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMpOiAgRG9uJ3QgbWFrZSBpdCBpbmxpbmUuCisJRG8gbWFrZSBpdCBzdGF0aWMgbGlua2FnZS4KKwkoY29uc3RfdmFsdWVfYXR0cmlidXRlKTogIENhdGNoIGludmFsaWQga2luZHMgb2YgcnR4IG5vZGVzCisJYnkgYWJvcnRpbmcgZm9yIHRoZSBkZWZhdWx0IGNhc2UgaW4gc3dpdGNoLgorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfcHRyX3RvX21icl90eXBlX2RpZSk6ICBNYWtlIGl0IHN0YXRpYyBsaW5rYWdlLgorCShvdXRwdXRfZm9ybWFsX3R5cGVzKTogIE1ha2Ugc3VyZSB0aGF0IGBmb3JtYWxfdHlwZScgaXMgaW5pdGlhbGl6ZWQuCisJKG91dHB1dF90eXBlKTogIEFkZCBhIGRlZmF1bHQgY2FzZSBmb3Igc3dpdGNoLgorCShvdXRwdXRfZGVjbCk6ICBEb24ndCBzdXBwcmVzcyBESUVzIGZvciB0aGUgaW5pdGlhbCAoYXJ0aWZpY2lhbCkKKwlhcmd1bWVudHMgZm9yIEMrKyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4KKworCSogZHdhcmZvdXQuYyAoY2VpbGluZywgZmllbGRfdHlwZSwgc2ltcGxlX3R5cGVfYWxpZ25faW5fYml0cywKKwlzaW1wbGVfdHlwZV9zaXplX2luX2JpdHMsIGZpZWxkX2J5dGVfb2Zmc2V0KTogIE5ldyBmdW5jdGlvbnMgYWRkZWQuCisJKGRhdGFfbWVtYmVyX2xvY2F0aW9uX2F0dHJpYnV0ZSk6ICBVc2UgbmV3IHJvdXRpbmUgYGZpZWxkX2J5dGVfb2Zmc2V0JworCXRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHZhbHVlIGZvciB0aGUgQVRfbG9jYXRpb24gYXR0cmlidXRlLgorCShieXRlX3NpemVfYXR0cmlidXRlKTogIFVzZSBuZXcgcm91dGluZSBgZmllbGRfdHlwZScgdG8gZ2V0IHRoZQorCWFjdHVhbCB0eXBlIGZvciBhbnkgRklFTERfREVDTC4gIEFsc28sIHVzZSBgc2ltcGxlX3R5cGVfc2l6ZV9pbl9iaXRzJworCXRvIGF2b2lkIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIEVSUk9SX01BUktzIHdoZW4gY29tcHV0aW5nIHRoZSBzaXplCisJb2YgYSBGSUVMRF9ERUNMLgorCShiaXRfb2Zmc2V0X2F0dHJpYnV0ZSk6ICBSZXdyaXR0ZW4gdG8gdXNlIGBmaWVsZF9ieXRlX29mZnNldCcgd2hlbgorCWRldGVybWluaW5nIHRoZSBzdGFydCBvZiB0aGUgImNvbnRhaW5pbmcgb2JqZWN0Ii4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiAgSW50ZWdyYXRlIHBhcmFtZXRlcnMgYmVmb3JlCisJbG9jYWxzIHRvIGdldCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIHByb3BlciBvcmRlci4KKwkoaW50ZWdyYXRlX2RlY2xfdHJlZSk6ICBEb24ndCBkbyBhIHJlZHVuZGFudCBwdXNobGV2ZWwvcG9wbGV2ZWwgZm9yCisJdGhlIG91dGVybW9zdCBzY29wZSAoaS5lLiB3aGVuIGxldmVsPT0wKS4uLiBqdXN0IHVzZSB0aGUgb25lIGNyZWF0ZWQKKwlieSBgZXhwYW5kX2lubGluZV9mdW5jdGlvbicuCisKKwkqIGNhbGxzLmMgKGNhbGxzX2FsbG9jYSk6IEZvciBCTE9DSywgd2FsayBzdWJibG9ja3MgYW5kIHZhcnMgYnkgaGFuZC4KKworV2VkIEp1bCAgOCAxMzozMToxOSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY3AtZGVjbC5jIChwcmludF9iaW5kaW5nX2xldmVsKTogRml4IHR5cG8sIHdoZXJlICdsYmwnIHdhcyB1c2VkCisJaW5zdGVhZCBvZiAnbHZsJy4KKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX3NoYXJlZF9zdHJ1Y3R1cmVfaW5pdGlhbGl6ZXIpOiBDb3JyZWN0IGNhbGwKKwl0byBidWlsZF9pbnRfMiB3aGljaCBoYWQgb25seSBvbmUgYXJndW1lbnQsIGluc3RlYWQgb2YgdHdvLgorCitXZWQgSnVsICA4IDA2OjM3OjQwIDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBzaWNzLnNlKQorCisJKiBnc3RkYXJnLmgsIGd2YXJhcmdzLmg6IFRlc3QgYF9faHBwYV9fJyBpbnN0ZWFkIG9mIGBfX2hwOTAwMHM4MDBfXycuCisKKwkqIHJvbXAubWQgKHplcm9fZXh0ZW5kaGlzaTIpOiBSZW1vdmUgdW5uZWVkZWQgY29uc3RyYWludC4KKworCSogcnM2MDAwLm1kICh6ZXJvX2V4dGVuZGhpc2kyKTogUmVtb3ZlIHVubmVlZGVkIGNvbnN0cmFpbnQuCisJKGx1L3N0dSk6IFVzZSAlMCBpbnN0ZWFkIG9mICUxIGluIGFzc2VtYmxlciBpbnNucy4KKwkoY2FsbF92YWx1ZSk6IEFkZCBtaXNzaW5nICI9IiBpbiBjb25zdHJhaW50LgorCitXZWQgSnVsICA4IDA2OjMwOjIwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZmxvYXRzaWRmKTogQ29ycmVjdGx5IGhhbmRsZSBjYXNlIHdoZW4gU0ltb2RlIG9wZXJhbmQKKwlvdmVybGFwcyB0aGUgZmlyc3QgREZtb2RlIHJlZ2lzdGVyLgorCisJKiBmb2xkLWNvbnN0LmMgKGRpc3RyaWJ1dGVfYml0X2V4cHIsIHJhbmdlX3Rlc3QsIGZvbGRfdHJ1dGhvcCk6CisJVXNlIFRSVVRIX0FORF9FWFBSIGluc3RlYWQgb2YgQklUX0FORF9FWFBSIHNvIGludmVydF90cnV0aHZhbHVlIHdvcmtzLgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBTdHJpcCBhbGwgTk9QX0VYUFJzIGZyb20gU0laRS4KKworCSogaW50ZWdyYXRlLmM6IERvIDY0LWJpdCBjaGFuZ2VzICh0aGlzIGZpbGUgb21pdHRlZCB0aGUgbGFzdCB0aW1lKS4KKwlSZXBsYWNlIHVzZSBvZiBOVUxMIGFuZCAwIGluIGZ1bmN0aW9ucyBhcmdzIHdpdGggTlVMTF9SVFguCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCBzdWJzdF9jb25zdGFudHMpOiBIYW5kbGUgInciIHJ0bAorCW9wZXJhbmQgY2xhc3MuCisKKwkqIHJzNjAwMC5oIChMSU5LX1NQRUMpOiBTdXBwb3J0IC1zdGF0aWMuCisKKwkqIHRyZWUuYyAobWFrZV9ub2RlLCBjb3B5X25vZGUsIG1ha2VfdHJlZV92ZWMsIHRyZWVfY29ucywgYnVpbGQxKToKKwlDbGVhciBvciBjb3B5IHRyZWUgbm9kZXMgaW4gYSBjb25zaXN0ZW50IG1hbm5lciwgcmVmZXJlbmNpbmcKKwlldmVyeSBieXRlIG9mIHRoZSBub2RlLgorCisJKiByZWdjbGFzcy5jOiBJbml0aWFsaXplIFJFR19DTEFTU19DT05URU5UUyBpbnRvIGFuIGFycmF5IG9mCisJaW50cywgdGhlbiBjb3B5IGludG8gYSBIQVJEX1JFR19TRVQgdG8gYXZvaWQgY29uZGl0aW9uYWxpemF0aW9uCisJb2YgUkVHX0NMQVNTX0NPTlRFTlRTIG9uIDY0LWJpdCBtYWNoaW5lcy4KKworCSogYy1jb21tb24uYyAoY2hlY2tfY2FzZV92YWx1ZSk6IFN0cmlwIHRoZSBOT1BfRVhQUiBhZGRlZCBieQorCXRoZSBncmFtbWFyLgorCSogc3RtdC5jIChwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBEb24ndCBkbyBpdCBoZXJlLgorCisJKiBjLWxleC5jICh5eWxleCk6IEVuc3VyZSBUT1RBTF9QQVJUUyBpcyB3aWRlIGVub3VnaCB0byBzdG9yZSBhCisJY29uc3RhbnQgYXMgd2lkZSBhcyB3ZSBjYW4gc3RvcmUgaW4gYW4gSU5URUdFUl9DU1QuCisJKExPTkdfTE9OR19UWVBFX1NJWkUpOiBEZWxldGVkOyBubyBsb25nZXIgbmVlZGVkLgorCitUdWUgSnVsICA3IDE1OjUwOjM4IDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogeC1pMzg2c2NvIChYQ0ZMQUdTKTogT21pdCBmbGFncyBzcGVjaWZpYyB0byAicmNjIi4KKwkoQ0MsIE9MRENDKTogUHV0IHRoZW0gaGVyZSBpbnN0ZWFkLgorCitUdWUgSnVsICA3IDE4OjU3OjEwIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJVGhlIGJlbG93IGVudHJpZXMgc2hvdWxkIG1ha2UgRFdBUkYgZGVidWdnaW5nIGEgbGl0dGxlIGJpdCBlYXNpZXIuCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBJREVOVElGSUVSX0dMT0JBTF9WQUxVRSBzaG91bGQgbm90IGJlIF9ERUNMCisJbm9kZXMgYnV0IHJhdGhlciBUWVBFX0RFQ0xzLgorCisJKiBjcC1kZWNsLmMgKHB1c2h0YWcpOiBNYXJrIGJpbmRpbmcgbGF5ZXIgbWFya2VycyBhcyBpbnRlcm5hbC4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFByb3BhZ2F0ZSBpbnRlcm5hbCBtYXJrIG9uIGJpbmRpbmcKKwlsYXllciBtYXJrZXJzLgorCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfZmlsZSk6IERvbid0IG5hbWUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBiZQorCW5hbWVkLgorCisJKiBjcC1tZXRob2QuYyAoZGVjbF9hc19zdHJpbmcpOiBOZXcgYmFjay1lbmQgcm91dGluZSBmb3IKKwlzdWJzdGl0dXRlX25pY2VfbmFtZS4KKworCSogY3AtZGVjbDIuYyAoc3Vic3RpdHV0ZV9uaWNlX25hbWUpOiBOZXcgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUKKwlyZWFzb25hYmxlIERFQ0xfTkFNRXMgZnJvbSBjeXJwdGljIG9uZXMuCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tjbGFzc2ZuKTogVXNlIHN1YnN0aXR1dGVfbmljZV9uYW1lLgorCitUdWUgSnVsICA3IDE0OjA0OjAxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IERvbid0IHRyeSBzdWJ3b3JkcyBmb3IgYSBzaW5nbGUgd29yZC4KKworCSogZ2NjLmMgKGZpbmRfYV9maWxlLCBwdXRlbnZfZnJvbV9wcmVmaXgpOgorCUhhbmRsZSB2YWx1ZSBvZiAyIGluIHJlcXVpcmVfbWFjaGluZV9zdWZmaXguCisJKHByb2Nlc3NfY29tbWFuZCk6IFN1cHBseSAyIGZvciBzdGFuZGFyZF9leGVjX3ByZWZpeHssXzF9LgorCisJKiBnc3RkYXJnLmg6IFVuZGVmaW5lIF9CU0RfVkFfTElTVCBpZiB3ZSBkZWZpbmUgdmFfbGlzdC4KKworCSogY2NjcC5jIChhcHBlbmRfaW5jbHVkZV9jaGFpbik6IEZpeCBzZXR0aW5nIG9mIGZpcnN0X2JyYWNrZXRfaW5jbHVkZS4KKworCSogbG9vcC5jIChpbml0X2xvb3ApOiBVc2Ugd29yZF9tb2RlLCBub3QgU0ltb2RlLgorCisJKiB4LWRweDI6IE5ldyBmaWxlLgorCSogeC1kcHgyMjAwLCB4LWRweDIzMDA6IEZpbGVzIGRlbGV0ZWQuCisJKiBjb25maWd1cmUgKG02OGstYnVsbC1zeXN2Kik6IEZhdGFsIGVycm9yIHVubGVzcyAtLXdpdGgtZ2FzLgorCUFsd2F5cyB1c2UgeC1kcHgyLgorCisJKiBsaWJnY2MyLmMgKFhGdHlwZSk6IFR1cm4gb2ZmIGRlZmluaXRpb247IG5vdCB1c2VkLgorCShURnR5cGUpOiBEZWZpbmUgb25seSBpZiBuZWVkZWQuCisKK1R1ZSBKdWwgIDcgMTE6NTc6NDQgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogdGFob2UubWQgKGNhbGxfdmFsdWUpOiBBZGQgYD0nIHRvIG91dHB1dCBvcGVyYW5kIGNvbnN0cmFpbnQuCisJKiBhcm0ubWQgKGNhbGxfdmFsdWUpOiBMaWtld2lzZS4KKwkqIGdtaWNyby5tZCAobmVnc2YyLCBuZWdkZjIsIGFic3NmMiwgYWJzZGYyKTogTGlrZXdpc2UuCisJKHBlZXBob2xlIGZvciBtb3ZpbmcgcmV0dXJuZWQgdmFsdWUgdG8gZnAgcmVnKTogTGlrZXdpc2UuCisKKwkqIGxvbmdsb25nLmggKFNJX1RZUEVfU0laRSk6ICBSZW5hbWVkIGZyb20gTE9OR19UWVBFX1NJWkUuCisKKwkqIGxvbmdsb25nLmggKG1hY2hpbmUgaW5kZXBlbmRlbnQgY29kZSk6ICNkZWZpbmUgdWRpdl9xcm5uZCB0byBjYWxsCisJX191ZGl2X3VzaW5nX3NkaXYgaWYgd2UgaGF2ZSBzZGl2X3Fybm5kIGJ1dCBub3QgdWRpdl9xcm5uZC4KKwkqIGxpYmdjYzIuYyAoX191ZGl2X3VzaW5nX3NkaXYpOiBOZXcgZnVuY3Rpb24uCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTKTogQWRkIF9fdWRpdl91c2luZ19zZGl2LgorCitNb24gSnVsICA2IDIzOjI4OjI5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBjcC1kZW0uYywgY3AtbGV4LmMsIGNwLW1ldGhvZC5jLCBjcC14cmVmLmM6ICBEbyBub3QgaW5jbHVkZQorCXN0cmluZy5oIG9yIHN0cmluZ3MuaC4KKworTW9uIEp1bCAgNiAxODozMjozMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBBdm9pZCBjb25kaXRpb25hbHMgaW4gbWFjcm8gYXJnLgorCisJKiBDaGFuZ2VzIHRvIHN1cHBvcnQgZXhlY3V0aW9uIG9uIDY0LWJpdCBtYWNoaW5lcy4KKwkqIG1hY2htb2RlLmggKEhPU1RfQklUU19QRVJfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQsIEhPU1RfUFRSX1BSSU5URik6CisJUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb25zLgorCShNQVhfU0hPUlQpOiBOZXcgbWFjcm8uCisJKEdFVF9NT0RFX0JJVFNJWkUpOiBDYXN0IHJlc3VsdCBhbmQgc2hpZnQgY29uc3RhbnQgdG8gSE9TVF9XSURFX0lOVC4KKwkqIHJ0bC5oICh1bmlvbiBydHVuaW9uX2RlZik6IEFkZCBmaWVsZCBydHdpbnQuCisJKFhXSU5UKTogTmV3IGFjY2Vzc29yIG1hY3JvLgorCShJTlRWQUwpOiBVc2UgWFdJTlQsIG5vdCBYSU5ULgorCShleGFjdF9sb2cyLCBmbG9vcl9sb2cyLCBwbHVzX2NvbnN0YW50LCBwbHVzX2NvbnN0YW50X2Zvcl9vdXRwdXQpOgorCU5vdyBtYWNyb3MgdGhhdCBjYXN0IGFyZyB0byBIT1NUX1dJREVfSU5ULgorCShOVUxMLCBOVUxMX1BUUik6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9ucy4KKwkoR0VOX0lOVCk6IE5ldyBtYWNyby4KKwkoZ2V0X2ludGVnZXJfdGVybSk6IE5vdyByZXR1cm5zIEhPU1RfV0lERV9JTlQuCisJKiB0cmVlLmggKE5VTEwsIE5VTExfUFRSKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb25zLgorCShJTlRfQ1NUX0xULCBJTlRfQ1NUX0xUX1VOU0lHTkVEKTogQ2FzdCB0byBIT1NUX1dJREVfSU5ULgorCShzdHJ1Y3QgdHJlZV9pbnRfY3N0KTogUGllY2VzIG9mIGNvbnN0YW50IGFyZSBIT1NUX1dJREVfSU5ULCBub3QKKwlsb25nLgorCShleGFjdF9sb2cyLCBmbG9vcl9sb2cyLCBidWlsZF9pbnRfMik6IE5vdyBtYWNyb3MsIGxpa2UgcnRsLmguCisJKiByZWFsLmggKFJFQUxfVkFMVUVfVFlQRSwgdW5pb24gcmVhbF9leHRyYWN0KTogVXNlIEhPU1RfV0lERV9JTlQsCisJbm90IGxvbmcuCisJKENPTlNUX0RPVUJMRV9MT1csIENPTlNUX0RPVUJMRV9ISUdIKTogVXNlIFhXSU5UIGluc3RlYWQgb2YgWElOVC4KKwkqIHJ0bC5kZWYgKENPTlNUX0lOVCk6IE9wZXJhbmQgdHlwZSBub3cgInciLgorCShDT05TVF9ET1VCTEUpOiBDaGFuZ2Ugb3BlcmFuZHMgZnJvbSB0eXBlICJpIiB0byAidyIuCisJKiBiYXNpYy1ibG9jay5oIChSRUdTRVRfRUxUX0JJVFMpOiBBbHdheXMgdXNlIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCisJKFJFR1NFVF9FTFRfVFlQRSk6IE5ldyBtYWNybzsgc2FtZSBhcyBIT1NUX1dJREVfSU5ULgorCSogZXhwci5oIChBUkdTX1NJWkVfUlRYKTogVXNlIE5VTExfUlRYIGluIGV4cGFuZF9leHByIGNhbGwuCisJKHBsdXNfY29uc3RhbnQpOiBSZW1vdmUgZHVwbGljYXRlIGRlY2xhcmF0aW9uLgorCSogaGFyZC1yZWctc2V0LmggKEhBUkRfUkVHX1NFVCk6IE9ubHkgc2NhbGFyIHR5cGUgd2UgdXNlCisJaXMgSE9TVF9XSURFX0lOVDsgYXJyYXkgaXMgYXJyYXkgb2YgSE9TVF9XSURFX0lOVC4KKwkqIGxvb3AuaCAoc3RydWN0IGluZHVjdGlvbik6IEZpZWxkIENPTlNUX0FESlVTVCBpcyBub3cgSE9TVF9XSURFX0lOVC4KKwkobG9vcF9uX2l0ZXJhdGlvbnMpOiBOb3cgdW5zaWduZWQgSE9TVF9XSURFX0lOVC4KKwkobG9vcF9pdGVyYXRpb25zKTogUmV0dXJucyBIT1NUX1dJREVfSU5ULgorCSogYy1wYXJzZS55LCBjZXhwLnksIGMtZGVjbC5jLCBjLWxleC5jLCBjLXR5cGVjay5jLCBjYWxsZXItc2F2ZS5jOgorCUNoYW5nZSAwIG9yIE5VTEwgd2hlbiBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdGhhdCBzaG91bGQgYmUgYSBwb2ludGVyCisJdG8gTlVMTF9UUkVFLCBOVUxMX1JUWCwgb3IgTlVMTF9QVFIsIGFzIGFwcHJvcHJpYXRlLgorCSogY2FsbHMuYywgY2NjcC5jLCBjb21iaW5lLmMsIGNwLWxleC5jLCBjc2UuYywgZGJ4b3V0LmM6IExpa2V3aXNlLgorCSogZHdhcmZvdXQuYywgZW1pdC1ydGwuYywgZXhwbG93LmMsIGV4cG1lZC5jLCBleHByLmM6IExpa2V3aXNlLgorCSogZmluYWwuYywgZmxvdy5jLCBmb2xkLWNvbnN0LmMsIGZ1bmN0aW9uLmMsIGdjYy5jOiBMaWtld2lzZS4KKwkqIGdlbmF0dHJ0YWIuYywgZ2VucGVlcC5jLCBnZW5yZWNvZy5jLCBnbG9iYWwtYWxsb2MuYzogTGlrZXdpc2UuCisJKiBqdW1wLmMsIGxvY2FsLWFsbG9jLmMsIG9wdGFicy5jLCByZWNvZy5jLCByZWctc3RhY2suYzogTGlrZXdpc2UuCisJKiByZWdjbGFzcy5jLCByZWxvYWQuYywgcmVsb2FkMS5jLCByZW9yZy5jLCBydGwuYzogTGlrZXdpc2UuCisJKiBydGxhbmFsLmMsIHNjaGVkLmMsIHNkYm91dC5jLCBzdG10LmMsIHN0b3ItbGF5b3V0LmM6IExpa2V3aXNlLgorCSogdG9wbGV2LmMsIHVucm9sbC5jLCB2YXJhc20uYywgbG9vcC5jLCB4Y29mZm91dC5jOiBMaWtld2lzZS4KKwkqIGNhbGxlci1zYXZlLmMsIGNvbWJpbmUuYywgY3AtY2xhc3MuYywgY3AtZGVjbC5jLCBjcC1tZXRob2QuYzoKKwlDYXN0IGFuZCBkZWNsYXJlIG9iamVjdHMgdXNlZCB0byByZWZlciB0byB3aWRlIHZhbHVlcyBhcyBIT1NUX1dJREVfSU5ULgorCVVzZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGluc3RlYWQgb2YgSE9TVF9CSVRTX1BFUl9JTlQuCisJKiBjcC1wdC5jLCBjcC10eXBlMi5jLCBjcC10eXBlY2suYywgY3NlLmMsIGRieG91dC5jOiBMaWtld2lzZS4KKwkqIGR3YXJmb3V0LmMsIGVtaXQtcnRsLmMsIGV4cGxvdy5jLCBleHBtZWQuYywgZXhwci5jOiBMaWtld2lzZS4KKwkqIGZpbmFsLmMsIGZvbGQtY29uc3QuYywgZ2VuYXR0cnRhYi5jLCByZWNvZy5jLCByZWctc3RhY2suYzogTGlrZXdpc2UuCisJKiByZWdjbGFzcy5jLCByZWxvYWQuYywgc2NoZWQuYywgc3RtdC5jLCBzdG9yLWxheW91dC5jOiBMaWtld2lzZS4KKwkqIGxvb3AuYywgdG9wbGV2LmMsIHVucm9sbC5jLCB2YXJhc20uYzogTGlrZXdpc2UuCisJKiBjYWxsZXItc2F2ZS5jLCBjb21iaW5lLmMsIGZsb3cuYywgZ2xvYmFsLWFsbG9jLmMsIHJlb3JnLmMsIHNjaGVkLmM6CisJV2hlbiByZWZlcmluZyB0byByZWdzZXRzLCB1c2UgdHlwZSBSRUdTRVRfRUxUX1RZUEUuCisJKiBjYWxscy5jLCBjb21iaW5lLmMsIGVtaXQtcnRsLmMsIGV4cGxvdy5jLCBleHBtZWQuYywgZXhwci5jLCBmaW5hbC5jOgorCVVzZSBHRU5fSU5UIG1hY3JvIHdoZW4gbWFraW5nIENPTlNUX0lOVHMuCisJKiBmdW5jdGlvbi5jLCBqdW1wLmMsIGxvb3AuYywgb3B0YWJzLmMsIHJlY29nLmMsIHJlbG9hZDEuYzogTGlrZXdpc2UuCisJKiB1bnJvbGwuYzogTGlrZXdpc2UuCisJKiBjcC1kZWNsLmMsIGNwLXB0cmVlLmMsIHByaW50LXRyZWUuYzogVXNlIEhPU1RfUFRSX1BSSU5URiB3aGVuCisJcHJpbnRpbmcgcG9pbnRlciB2YWx1ZXMuCisJKiBjY2NwLmMsIGNleHAueSwgZ2NjLmMgKE5VTEwsIE5VTExfUFRSKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCisJKiBjLWNvbW1vbi5jIChOVUxMKTogUmVtb3ZlIGRlZmluaXRpb24gZnJvbSBoZXJlLgorCSogYy1kZWNsLmMgKE5VTEwpOiBMaWtld2lzZS4KKwkoZmluaXNoX3N0cnVjdCk6IEVuc3VyZSBoaWdoLW9yZGVyIHBhcnQgb2Ygd2lkdGggaXMgemVyby4KKwkqIGNwLWRlY2wuYyAoZmluaXNoX2VudW0pOiBMaWtld2lzZS4KKwkqIGMtbGV4LmMgKHl5bGV4KTogQ2FsbCBidWlsZF9pbnRfMiBpbiBtb3JlIHBvcnRhYmxlIHdheS4KKwkoeXlwcmludCk6IFByaW50IGNvbnN0YW50IGRpZmZlcmVudCB3YXlzLCBkZXBlbmRpbmcgb24gaG9zdCBwYXJhbWV0ZXJzLgorCSogZmluYWwuYyAob3V0cHV0X2FzbV9pbnNuLCBvdXRwdXRfYWRkcl9jb250KTogTGlrZXdpc2UuCisJKiBnZW5hdHRydGFiLmMgKHdyaXRlX3Rlc3RfZXhwcik6IExpa2V3aXNlLgorCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlX2JyaWVmLCBwcmludF9ub2RlKTogTGlrZXdpc2UuCisJKiBjcC1kZWNsLmMgKHhyZWZfdGFnKTogUmVtb3ZlIGV4cGxpY2l0IHJlZmVyZW5jZSB0byBtb2Rlcy4KKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IExpa2V3aXNlLgorCSogY3AtbGV4LmMgKHJlYWxfeXlsZXgpOiBNYWtlIGFjY3VtdWxhdGluZyBiaXRzIGZvciBjb25zdGFudCAKKwltb3JlIHBvcnRhYmxlLgorCSogY3NlLmMgKHVpZF9jdWlkKTogTm93IHBvaW50ZXIgdG8gaW50IGluc3RlYWQgb2YgdG8gc2hvcnQuCisJKGV4cF9lcXVpdl9wKTogQ2hhbmdlIGlmcyBvbiBHRVRfUlRYX0ZPUk1BVCB0byBhIHN3aXRjaC4KKwlBZGQgZm9ybWF0IGNvZGUgb2YgInciLgorCSogZW1pdC1ydGwuYyAoZ2VuX3J0eCk6IEFkZCBmb3JtYXQgY29kZSBvZiAidyIuCisJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3AsIHJ0eF9lcXVhbF9mb3JfdGhyZWFkX3ApOiBMaWtld2lzZS4KKwkqIGxvb3AuYyAocnR4X2VxdWFsX2Zvcl9sb29wX3ApOiBMaWtld2lzZS4KKwkqIHJlbG9hZC5jIChvcGVyYW5kc19tYXRjaF9wKTogTGlrZXdpc2UuCisJKiBydGwuYyAoY29weV9ydHgsIGNvcHlfbW9zdF9ydHgpOiBMaWtld2lzZS4KKwkqIHJ0bGFuYWwuYyAocnR4X2VxdWFsX3ApOiBMaWtld2lzZS4KKwkqIHNjaGVkLmMgKHJ0eF9lcXVhbF9mb3JfbWVtcmVmX3ApOiBMaWtld2lzZS4KKwkqIGV4cGxvdy5jIChwbHVzX2NvbnN0YW50X3dpZGUpOiBGb3JtZXJseSBwbHVzX2NvbnN0YW50OyBhcmd1bWVudAorCWlzIEhPU1RfV0lERV9JTlQuCisJKHBsdXNfY29uc3RhbnRfZm9yX291dHB1dF93aWRlKTogU2ltaWxhcmx5LgorCSogZm9sZC1jb25zdC5jOiBVc2UgTUFYX1NIT1JUUyBmb3IgZGltZW5zaW9uIG9mIGFycmF5IG9mIHNob3J0cy4KKwkqIGdlbmF0dHJ0YWIuYyAoTlVMTF9BVFRSKTogTmV3IG1hY3JvLgorCShhdHRyX3J0eCk6IFVzZSBYV0lOVCwgbm90IFhJTlQsIGZvciBDT05TVF9JTlQuCisJQWRkIGNhc2UgInciLgorCShjaGVja19hdHRyX3Rlc3QsIHdyaXRlX3Rlc3RfZXhwciwgbWFpbik6IFVzZSBYV0lOVCwgbm90IFhJTlQsCisJZm9yIENPTlNUX0lOVC4KKwkqIGdlbmVtaXQuYyAoZ2VuX2V4cCk6IFVzZSAiTlVMTF9SVFgiIGluc3RlYWQgb2YgIjAiIHdoZW4KKwllbWl0dGluZyBudWxsLgorCVVzZSBHRU5fSU5UIGFuZCBwcm9wZXIgd2lkdGggd2hlbiBlbWl0dGluZyBhIENPTlNUX0lOVC4KKwlBYm9ydCBpZiB0cnlpbmcgdG8gd3JpdGUgYSBDT05TVF9ET1VCTEUuCisJKiBnZW5yZWNvZy5jIChzdHJ1Y3QgZGVjaXNpb24pOiBBZGQgbmV3IGZpZWxkcyBURVNUX0VMVF9aRVJPX1dJREUKKwlhbmQgRUxUX1pFUk9fV0lERS4KKwkoYWRkX3RvX3NlcXVlbmNlLCBub3RfYm90aF90cnVlLCBtZXJnZV90cmVlcywgd3JpdGVfdHJlZV8xKToKKwlVc2UgbmV3IGZpZWxkcy4KKwkqIGdsb2JhbC1hbGxvYy5jIChJTlRfQklUUywgSU5UX1RZUEUpOiBVc2UgSE9TVF9XSURFX0lOVCBmb3IgdHlwZQorCW9mIGNvbmZsaWN0IG1hdHJpeC4KKwkqIGxvb3AuIChsb29wX25faXRlcmF0aW9ucyk6IE5vdyBIT1NUX1dJREVfSU5ULgorCSogcmVjb2cuYzogUmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbnMgb2YgcGx1c19jb25zdGFudF9mb3Jfb3V0cHV0CisJYW5kIGNvcHlfcnR4LgorCSogcnRsLmM6IERlY2xhcmUgYXRvbCBpZiBuZWVkZWQuCisJKHJ0eF9mb3JtYXQpOiBBZGQgY29kZSBmb3IgInciLgorCShyZWFkX3J0eCk6IFJlYWQgY29kZSAidyIgZmllbGQgd2l0aCBhdG9sIGlmIHJlcXVpcmVkLgorCShpbml0X3J0bCk6IEZpZWxkcyBvZiBDT05TVF9ET1VCTEUgYXJlIG5vdyB0eXBlICJ3Ii4KKwkqIHJ0bGFuYWwuYyAoZ2V0X2ludGVnZXJfdGVybSk6IFJldHVybnMgSE9TVF9XSURFX0lOVC4KKwkqIGNjY3AuYywgdG9wbGV2LmM6IEVycm9yIGZ1bmN0aW9uIGFyZ3MgYXJlIEhPU1RfV0lERV9JTlQgKGtsdWRnZSkuCisJKiB0b3BsZXYuYyAoZXhhY3RfbG9nMl93aWRlKTogUmVuYW1lZCBmcm9tIGV4YWN0X2xvZzIgYW5kIG5vdyBoYXMKKwlhcmcgb2YgdHlwZSBIT1NUX1dJREVfSU5ULgorCShmbG9vcl9sb2cyX3dpZGUpOiBTaW1pbGFybHkuCisJKiB0cmVlLmMgKHBlcm1hbGxvYyk6IFR5cGUgb2YgU0laRSBhcmcgaXMgaW50LCBub3QgbG9uZy4KKwkoYnVpbGRfaW50XzJfd2lkZSk6IFJlbmFtZWQgZnJvbSBidWlsZF9pbnRfMiBhbmQgaGFzIGFyZ3Mgb2YKKwl0eXBlIEhPU1RfV0lERV9JTlQuCisJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25zKTogTm93IHJldHVybnMgSE9TVF9XSURFX0lOVC4KKwkqIHZhcmFzbS5jIChpbW1lZF9kb3VibGVfY29uc3QpOiBBcmd1bWVudHMgYXJlIG5vdyBIT1NUX1dJREVfSU5ULgorCitNb24gSnVsICA2IDE0OjU2OjI2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRG9uJ3Qgc2V0IERFQ0xfUEFDS0VEIG9uIFZBUl9ERUNMLgorCisJKiBNYWtlZmlsZS5pbiAoR0NDX0NGTEFHUyk6CisJVXNlIENST1NTX0dDQ19DRkxBR1MgaW5zdGVhZCBvZiAtQiBmb3IgdG9vbGRpci4KKwkqIGNyb3NzLW1ha2UgKENST1NTX0dDQ19DRkxBR1MpOiBEZWZpbmUgYXMgLUIgZm9yIHRvb2xkaXIuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBJZiByZXR1cm4gdHlwZSBvZiBgbWFpbicgaXMgbm90IGBpbnQnLAorCXdhcm4gaW5zdGVhZCBvZiBkb2luZyBERUZBVUxUX01BSU5fUkVUVVJOLgorCisJKiBjb2xsZWN0Mi5jLCBkd2FyZm91dC5jLCBoYWxmcGljLmM6IERvbid0IGluY3VkZSBzdHJpbmcuaC4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IExldCBjaGFyICpmb28gKCkgbWF0Y2ggdm9pZCAqZm9vICgpCisJb25seSBpZiBvbmUgb2YgdGhlbSBjYW1lIGZyb20gYSBzeXN0ZW0gaGVhZGVyIGZpbGUuCisKKwkqIHN0bXQuYyAocHVzaGNhc2UpOiBGaXggdHlwby4KKworCSogTWFrZWZpbGUuaW4gKEFMTE9DQV9GSU5JU0gpOiBNYWtlIGRlZmF1bHQgYHRydWUnLgorCisJKiBjY2NwLmMgKG1haW4pOiBDbGVhciBmaXJzdF9icmFja2V0X2luY2x1ZGUgZm9yIC1JLS4KKwlTZXQgZmlyc3Rfc3lzdGVtX2luY2x1ZGUgZm9yIGZpcnN0IHN5c3RlbSBoZWFkZXIgZGlyZWN0b3J5LgorCShpc19zeXN0ZW1faW5jbHVkZSk6IFN0YXJ0IHNlYXJjaCBhdCBmaXJzdF9zeXN0ZW1faW5jbHVkZS4KKworTW9uIEp1bCAgNiAxMjo1ODoyNyAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIGNjY3AuYyAoSU5DTFVERV9MRU5fRlVER0UpOiBEZWZpbmVkLgorCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IE5ldyBmdW5jdGlvbi4gIEFkZHMgZGlyZWN0b3J5KGllcykKKwl0byBpbmNsdWRlIGNoYWluIGFuZCB1cGRhdGVzIHZhbHVlIG9mIG1heF9pbmNsdWRlX2xlbi4KKwkobWFpbiwgcGF0aF9pbmNsdWRlKTogVXNlIGFwcGVuZF9pbmNsdWRlX2NoYWluLgorCShkb19pbmNsdWRlKTogVXNlIElOQ0xVREVfTEVOX0ZVREdFLgorCisJKiB0cmVlLmggKERFQ0xfSU5fU1lTVEVNX0hFQURFUik6IERlZmluZWQuCisJKHN0cnVjdCB0cmVlX2RlY2wpOiBBZGQgaW5fc3lzdGVtX2hlYWRlcl9mbGFnLgorCSogYy1jb21tb24uYyAoZGVjbGFyZV9mdW5jdGlvbl9uYW1lKTogRm9yIF9fRlVOQ1RJT05fXworCWFuZCBfX1BSRVRUWV9GVU5DVElPTl9fLCBzZXQgREVDTF9JTl9TWVNURU1fSEVBREVSIGluc3RlYWQKKwlvZiBUUkVFX1VTRUQgdG8gc3VwcmVzcyBgdW51c2VkJyB3YXJuaW5ncy4KKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBNZXJnZSBERUNMX0lOX1NZU1RFTV9IRUFERVIgZmxhZy4KKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IERpc3BsYXkgVFJFRV9SQUlTRVMgYW5kCisJREVDTF9JTl9TWVNURU1fSEVBREVSIGZsYWdzLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERvIG5vdCB3YXJuIGlmIGFuIHVudXNlZCBERUNMCisJaGFzIERFQ0xfSU5fU1lTVEVNX0hFQURFUiBzZXQuCisJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEbyBub3Qgc2V0IFRSRUVfVVNFRCBvbiBzdGF0aWMKKwlmdW5jdGlvbnMgZGVmaW5lZCBpbiBzeXN0ZW0gaGVhZGVyczsgdGhpcyB3aWxsIGJlIHRha2VuCisJY2FyZSBvZiB3aXRoIERFQ0xfSU5fU1lTVEVNX0hFQURFUi4KKwkqIHRyZWUuYyAobWFrZV9ub2RlKTogU2V0IERFQ0xfSU5fU1lTVEVNX0hFQURFUiBvbiBwZXJtYW5lbnQKKwlkZWNscyBkZWZpbmVkIGluIHN5c3RlbSBoZWFkZXJzLgorCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yLGFkZF9vYmpjX2RlY2xzKToKKwlTZXQgREVDTF9JTl9TWVNURU1fSEVBREVSIGluc3RlYWQgb2YgVFJFRV9VU0VEIG9uIGNvbXBpbGVyLQorCWNyZWF0ZWQgZGVjbHMuCisKK01vbiBKdWwgIDYgMTA6MTc6MzAgMTk5MiAgTWljaGFlbCBDb2xsaXNvbiAgKGNvbGxpc29uIGF0IG9zZi5vcmcpCisKKwkqIGkzODYuaCAgKFNVQlRBUkdFVF9TV0lUQ0hFUyk6CisJSW5jb3BvcmF0ZSBTVUJUQVJHRVRfU1dJVENIRVMgaW50byBUQVJHRVRfU1dJVENIRVMuCisJKEhBTEZfUElDX1AsIEhBTEZfUElDX05VTUJFUl9QVFJTLCBIQUxGX1BJQ19OVU1CRVJfUkVGUywKKwlIQUxGX1BJQ19FTkNPREUsIEhBTEZfUElDX0RFQ0xBUkUsIEhBTEZfUElDX0lOSVQsCisJSEFMRl9QSUNfQUREUkVTU19QLCBIQUxGX1BJQ19QVFIsIEhBTEZfUElDX0ZJTklTSCk6CisJRGVmaW5lIHRoZXNlIGFzIHN0dWJzIGlmIG5vdCBPU0YvMSBwbGF0Zm9ybS4KKwkqIGkzODYubWQgKG1vdnNpKTogUmVjb2duaXplIGhhbGYtcGljIG1vdmVzLgorCitNb24gSnVsICA2IDExOjE2OjQ3IDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlQGRlZm1hY3JvLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRml4IHR5cG8KKworTW9uIEp1bCAgNiAwODo0ODo1MSAxOTkyICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBtNjhrLm1kIChzd2Fwc2kpOiBBZGQgYCsnIG9wZXJhbmQgY29uc3RyYWludHMuCisJKGluc2VydCB0byBtZW1vcnkgcmVjb2duaXplcik6IEFkZCBgKycuCisJKHBlZXBob2xlIGZvciBtb3ZpbmcgcmV0dXJuZWQgdmFsdWUgdG8gZnAgcmVnKTogQWRkIGA9Jy4KKworU3VuIEp1bCAgNSAxNjozNDoyNCAxOTkyICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBY2hhdGVzLm1pdC5lZHUpCisKKwkqIHZheC5tZCAoYWRkc2kzKTogQ29kZSBnZW5lcmF0aW9uIGltcHJvdmVtZW50cyAod2hldGhlciB0byB1c2UgbW92YWIpLgorCisJKiB2YXgubWQgKGFuZHNpMywgYW5kaGkzLCBhbmRxaTMpOiBJZiBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcworCWlzIGEgY29uc3RhbnQsIGNvbXBsZW1lbnQgdGhhdCBvcGVyYW5kIGluc3RlYWQgb2YgYSByZWdpc3RlciBvcgorCW1lbW9yeSBvcGVyYW5kLgorCitTdW4gSnVsICA1IDEzOjE2OjE1IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBXaGVuIHNwbGl0dGluZyB1c2luZyBhIERFRklORV9TUExJVCwKKwl1cGRhdGUgdGhlIG51bWJlciBvZiBzZXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpZiBpdCBpcyBiZWluZyBzZXQKKwl0d2ljZS4gIEFsc28gdXBkYXRlIHJlZ19zaWduaWZpY2FudC4KKworU3VuIEp1bCAgNSAxMzoxNDo1MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMrKzogRml4IHR5cG8gdGVzdGluZyAkcXVvdGUgZm9yIG51bGxuZXNzLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6IERvbid0IHB1dCBzdW0gb2YgdHdvIHN5bWJvbGljCisJYWRkcmVzc2VzIGludG8gYSBDT05TVC4KKworCSogbTY4a3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9DT01NT04pOiAjdW5kZWYgdGhpcy4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogI3VuZGVmIHRoaXMuCisJKEFTTV9PVVRQVVRfQVNDSUkpOiBOZXcgb3ZlcnJpZGluZyBkZWZpbml0aW9uLgorCShBU01fT1VUUFVUX0NBU0VfRU5EKTogTmV3IG92ZXJyaWRpbmcgZGVmaW5pdGlvbi4KKworCSogYy10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBObyAtV2NvbnZlcnNpb24gd2FybmluZworCWlmIHRoZSBmdW5jdGlvbiB3YW50cyBhbiBlbnVtZXJhbCB0eXBlLgorCisJKiB0ZWs2MDAwLmgsIHRlazYxMDAuaCwgdGVrNjIwMC5oOiBOZXcgZmlsZXMuCisJKiBjb25maWd1cmUgKG5zMzJrLXRlazYxMDAtYnNkLCBuczMyay10ZWs2MjAwLWJzZCk6IE5ldyBhbHRlcm5hdGl2ZXMuCisJKiBjb25maWcuc3ViOiB1dGVrIGlzIHN5bm9ueW0gZm9yIGJzZC4KKworCSogTWFrZWZpbGUuaW4gKGFsbG9jYS5vKTogQWRkIC1jLgorCisJKiBNYWtlZmlsZS5pbiAoc3RhcnQuZW5jYXApOiBVc2UgTElCR0NDMSwgbm90IExJQkdDQzFfVEFSR0VULgorCShHQ0NfQ0ZMQUdTKTogRmluZCBleGVjdXRhYmxlcyBpbiAkKHRvb2xkaXIpL2Jpbiwgbm90ICQodG9vbGRpcikuCisJKGxpYmdjYzEuY3Jvc3MpOiBOZXcgdGFyZ2V0LgorCShhbGwuY3Jvc3MsIGNyb3NzLXRlc3QpOiBEZXBlbmQgb24gbGliZ2NjLmEuCisJKiBjcm9zcy1tYWtlIChMSUJHQ0MxKTogVXNlIGxpYmdjYzEuY3Jvc3MuCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiB2YS1ocDgwMC5oIGNoYW5nZWQgdG8gdmEtcGEuaC4KKwkoaW5zdGFsbC1jb21tb24pOiBGaXggdHlwby4KKworCSogc3RtdC5jIChwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBVc2UgU1RSSVBfTk9QUyBvbiB0aGUgdmFsdWVzLgorCisJKiB4LWFtaXgsIHgtaTg2MHY0LCB4LW5jcjMwMDAsIHgtc3BhcmN2NDogVW5kbyBsYXN0IGNoYW5nZS4KKwkqIHgtaTM4NnY0LCB4LW02OGt2NDogRmlsZXMgZGVsZXRlZC4KKwkqIGNvbmZpZ3VyZSAoaTM4Ni0qLXN5c3Y0LCBpNDg2LSotc3lzdjQsIG02OGstKi1zeXN2NCk6CisJQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgd2FybiBhYm91dCBkaXNhZ3JlZW1lbnQgaW4gYGlubGluZScKKwlleGNlcHQgd2hlbiBub24taW5saW5lIGZuIGlzIG1hZGUgaW5saW5lIGFmdGVyIGEgY2FsbCBvciBkZWZpbml0aW9uLgorCitTdW4gSnVsICA1IDEwOjI1OjIyIFBEVCAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogIE1ha2UgYGxvbmcgbG9uZyBsb25nJyBhbiBlcnJvciwgbm90IGEKKwl3YXJuaW5nLiAgTWFrZSBkdXBsaWNhdGUgcXVhbGlmaWVycyBkbyBwZWR3YXJuLCBub3Qgd2FybmluZy4KKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogIEFsd2F5cyBjcmVhdGUgYSBuZXcgKHZhcmlhbnQpIC4uLl9UWVBFIG5vZGUKKwlmb3IgZWFjaCBuZXcgVFlQRV9ERUNMIG5vZGUgY3JlYXRlZC4KKworCSogbGliZ2NjMi5jIChVUUl0eXBlLCBTSXR5cGUsIFVTSXR5cGUsIERJdHlwZSwgVURJdHlwZSwgU0Z0eXBlLCBERnR5cGUsCisJWEZ0eXBlLCBURnR5cGUpOiAgVHlwZWRlZnMgYWRkZWQuCisJKFNJX1RZUEVfU0laRSk6ICBSZW5hbWVkIGdsb2JhbGx5IGZyb20gTE9OR19UWVBFX1NJWkUuCisJRGVmaW5lIG5hbWVzIGZvciBBTlNJIEMgdHlwZXMgdG8gYGJvZ3VzX3R5cGUnIG92ZXIgdGhlIHJhbmdlIG9mIGxpbmVzCisJd2hlcmUgd2UgbXVzdCBhbHdheXMgdXNlIHRoZSBuZXcgbW9kZS1yZWxhdGVkIHR5cGVzLiAgVW5kZWYgdGhlbSBhZ2FpbgorCWF0IHRoZSBlbmQgb2YgdGhhdCByYW5nZSAoc28gd2UgY2FuIHVzZWQgdGhlIEFOU0kgdHlwZXMgYWdhaW4pLCBhbmQKKwl0aGVuIGRlZmluZSB0aGUgbW9kZS1yZWxhdGVkIHR5cGUgbmFtZXMgdG8gYGJvZ3VzX3R5cGUnIHRvIGluc3VyZQorCXRob3NlIGFyZSBub3QgdXNlZCBmcm9tIHRoZW4gb24uCisKKwkqIGxpYmdjYzIuYywgbG9uZ2xvbmcuaCAoRElzdHJ1Y3QpOiAgUmVuYW1lZCBnbG9iYWxseSBmcm9tICBgbG9uZ2xvbmcnLgorCShESXVuaW9uKTogUmVuYW1lZCBnbG9iYWxseSBmcm9tICBgbG9uZ19sb25nJy4KKwlVbml2ZXJzYWxseSB1c2UgdGhlIG5ldyBtb2RlLXJlbGF0ZWQgdHlwZSBuYW1lcyBmb3IgYWxsIGZ1bmN0aW9ucworCWFuZCBtYWNyb3Mgd2hpY2ggZXhwZWN0LCB5aWVsZCwgb3Igb3RoZXJ3aXNlIHJlbHkgb24gb3BlcmFuZHMgdG8gYmUKKwlvZiBjZXJ0YWluIEdDQy1kZWZpbmVkIG1hY2hpbmUgbW9kZXMuCisKK1N1biBKdWwgIDUgMTE6MTE6MDAgMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogcGEuaDogKFRBUkdFVF9WRVJTSU9OKTogUHJpbnQgIiAoaHBwYSkiLgorCSogcGEubWQgKHpkZXBpIHJlY29nbml6ZXIpOiBBZGQgYXR0cmlidXRlLgorCShyZWNvZ25pemVycyBmb3IgU0ltb2RlIGxvYWQgYW5kIHN0b3JlIHdpdGggZnByZWdzKTogQWRkIGA9JyB0bworCW9wZXJhbmQgMC4KKworU2F0IEp1bCAgNCAxNTowMjoxOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAobWlwcy0qLXN5c3Y0KTogRG9uJ3Qgc2V0IHVzZV9jb2xsZWN0Mi4KKworCSogYy1wYXJzZS55IChwcmltYXJ5KTogV3JhcCBhIE5PUF9FWFBSIGFyb3VuZCBhbiBlbnVtIHZhbHVlLgorCisJKiBsaWJnY2MyLmMgKF9fYnVpbHRpbl9zYXZlcmVncyBmb3IgaTg2MCk6IFRlc3QgX19zdnI0X18sIG5vdCBTVlI0LgorCSogdmEtaTg2MC5oOiBUZXN0IF9fc3ZyNF9fLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogU2V0IEJMT0NLX1NVUEVSQ09OVEVYVCBvZiBvdXRlciBibG9jay4KKworCSogeC1tODhrdjM6IEZpbGUgZGVsZXRlZC4KKworCSogeC1zcGFyY3Y0IChYX0NGTEFHUyk6IEFkZCAtZG4uCisKKwkqIHJlb3JnLmM6IE1vdmUgdGhlICNpZmRlZiBERUxBWV9TTE9UUyBhZnRlciB0aGUgI2luY2x1ZGVzLgorCitTYXQgSnVsICA0IDE0OjE2OjMzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoU1VCU1QpOiBFbnN1cmUgd2UgZG9uJ3QgY2FsbCBzb21ldGhpbmcgdGhhdCBjYW4gbWFrZQorCWEgbmV3IHVuZG8gZW50cnkgaW4gdGhlIG1pZGRsZSBvZiBvdXIgbWFraW5nIG9uZS4KKworU2F0IEp1bCAgNCAxMjoxNzo1NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChjcC1wYXJzZS5jKTogQXBwZW5kIFlZRU1QVFkgdG8gY3AtcGFyc2UuaCwgbm90IC4uLnkuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBBZGQgYWJvcnRzIGluIHplcm9fZXh0ZW5kCisJYW5kIHNpZ25fZXh0ZW5kIGNhc2VzLCBleHBsYWluaW5nIGhvdyB0aGV5IG1pZ2h0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKworCSogaTk2MC5oIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBGaXggdHlwby4KKworCSogeC1hbWl4LCB4LXNwYXJjdjQsIHgtaTg2MHY0LCB4LWkzODZ2NCwgeC1uY3IzMDAwOgorCUFkZCAtc3RhdGljIHRvIFhfQ0ZMQUdTLgorCSogeC1tNjhrdjQ6IE5ldyBmaWxlLgorCSogaXNjLmggKEhBTkRMRV9TWVNWX1BSQUdNQSk6IERlZmluZWQuCisKK1NhdCBKdWwgIDQgMTU6MTg6MzMgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogeG0tc3BjLXNvbDIuaDogTmV3IGZpbGUuCisKKwkqIHRyZWUuaCAoREVDTF9VSUQpOiAgRGVmaW5pdGlvbiBhZGRlZC4KKwkoc3RydWN0IHRyZWVfZGVjbCk6ICBgdWlkJyBmaWVsZCBhZGRlZC4KKwkqIHRyZWUuYyAoREVDTF9VSUQpOiAgSW5pdGlhbGl6ZSB0aGlzIHVuaXF1ZWx5IGZvciBlYWNoIG5ldyAuLi5fREVDTC4KKworCSogcnRsLmggKE5PVEVfSU5TTl9ERUxFVEVEX0xBQkVMKTogIERlZmluaXRpb24gYWRkZWQuCisJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgZW50cnkgZm9yIE5PVEVfSU5TTl9ERUxFVEVEX0xBQkVMLgorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogIENhbGwgYGR3YXJmb3V0X2xhYmVsJyBmb3IgZWFjaAorCWBOT1RFX0lOU05fREVMRVRFRF9MQUJFTCcuCisJKiBqdW1wLmMgKGRlbGV0ZV9pbnNuKTogIERvbid0IHJlYWxseSBkZWxldGUgQ09ERV9MQUJFTHMgY29ycmVzcG9uZGluZworCXRvIHVzZXItZGVjbGFyZWQgbGFibGVzLi4uIFR1cm4gdGhlbSBpbnRvIE5PVEVfSU5TTl9ERUxFVEVEX0xBQkVMcworCWluc3RlYWQuCisKKwkqIGR3YXJmLmggKEFUX2Fic3RyYWN0X29yaWdpbik6ICBSZW5hbWVkIGZyb20gQVRfc3BlY2lmaWNhdGlvbi4KKwkqIGR3YXJmb3V0LmMgKGR3YXJmX2F0dHJfbmFtZSk6ICBMaWtld2lzZS4KKwkoZHdhcmZfdGFnX25hbWUsIGR3YXJmX2F0dHJfbmFtZSwgZHdhcmZfc3RhY2tfb3BfbmFtZSwKKwlkd2FyZl90eXBlbW9kX25hbWUsIGR3YXJmX2ZtdF9ieXRlX25hbWUpOiAgVXNlIG5vcm1hbCBEV0FSRiBwcmVmaXhlcworCWZvciBzdHJpbmcgbmFtZXMgb2YgdW5yZWNvZ25pemVkIHZhbHVlcy4KKwkoaXNfYmxvY2tfYm9keSk6ICBOZXcgZnVuY3Rpb24gYWRkZWQuCisJKERFQ0xfTkFNRV9GTVQpOiAgRGVmaW5pdGlvbiBhZGRlZC4KKwkoZXF1YXRlX2RlY2xfbnVtYmVyX3RvX2RpZV9udW1iZXIsIGFic3RyYWN0X29yaWdpbl9hdHRyaWJ1dGUsCisJcHVyZV9vcl92aXJ0dWFsX2F0dHJpYnV0ZSk6ICBOZXcgZnVuY3Rpb25zIGFkZGVkLgorCShzcmNfY29vcmRzX2F0dHJpYnV0ZSk6ICBPbmx5IGRlZmluZSB0aGlzIGlzIERXQVJGX0RFQ0xfQ09PUkRJTkFURVMKKwlpcyBkZWZpbmVkLgorCisJKiBwb3B1bGF0ZTogTmV3IGZpbGUuCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX2RlY2xzKTogRGVsZXRlICNpZiAxLgorCisJKiBmbGFncy5oLCB0b3BsZXYuYywgZGJ4b3V0LmMgKHVzZV9nbnVfZGVidWdfaW5mb19leHRlbnNpb25zKToKKwlSZW5hbWVkIGZyb20gYHVzZV9nZGJfZGJ4X2V4dGVuc2lvbnMnLgorCisJKiB0b3BsZXYuYyAobWFpbik6ICBBZGRlZCBzdXBwb3J0IGZvciAtZ2R3YXJmKyBhbmQgZm9yIC1neGNvZmYrLgorCitTYXQgSnVsICA0IDA4OjM5OjQ3IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKG04OGtfZW5kX3Byb2xvZ3VlKTogUmVzZXQgZnJhbWVfbGFpZF9vdXQgaGVyZS4KKwkobTg4a19leHBhbmRfcHJvbG9ndWUpOiBOb3QgaGVyZS4KKworCSogbTg4ay5oIChJREVOVF9BU01fT1BULCBBTElHTl9BU01fT1BULCBBU01fT1VUUFVUX0NBU0VfTEFCRUwpOgorCU92ZXJyaWRlIHN2cjQuaC4KKworRnJpIEp1bCAgMyAxMjo0MDoyNyAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkX2NvbnZlcnQpOiBXaGVuIGNvbnZlcnRpbmcgYSBmbG9hdGluZyBwb2ludAorCWNvbnN0YW50IHRvIGludGVnZXIsIHdhcm4gYWJvdXQgb3V0LW9mLXJhbmdlIHZhbHVlcyBhZnRlciB0cnVuY2F0aW5nCisJdG8gaW50ZWdlciwgbm90IGJlZm9yZS4KKworRnJpIEp1bCAgMyAxOTozNDowNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGhhbCkKKworCSogTWFrZWZpbGUuaW4gKCQoc3JjZGlyKS9jcC1wYXJzZS5jKTogZXh0cmFjdCBZWUVNUFRZIG91dCBvZiB0aGUKKwlwYXJzZXIgZ2VuZXJhdGVkIC5jIGZpbGUgYW5kIHB1dCBpbiB0aGUgcGFyc2VyIC5oIHNvIHRoYXQgY3AtbGV4LmMKKwlkb2VzIG5vdCBoYXZlIHRvIGRlZmluZSBpdC4KKworCSogY3AtdHJlZS5jIChfX2VwcmludGYpOiBUaGlyZCBhcmd1bWVudCBsaW5lIGlzIG5vdyB1bnNpZ25lZCwKKwljb21wbGV0ZXMgUm9uJ3MgSnVsIDIgY2hhbmdlLgorCitGcmkgSnVsICAzIDE1OjAzOjMwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlOiBTZXQgRklYSU5DTFVERVMgaW4gTWFrZWZpbGUgYmFzZWQgb24gc3lzdjQgb3Igbm90LgorCSogeC1hbWl4IChFTlFVSVJFX0NGTEFHUywgRklYSU5DTFVERVMpOiBEZWxldGVkLgorCisJKiBjb25maWcuc3ViOiBSZWNvZ25pemUgaTQ4NiBsaWtlIGkzODYuCisKKwkqIGRlZmF1bHRzLmggKEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FLCBBU01fT1VUUFVUX0FERFJfVkVDX0VMVCk6CisJKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCwgQVNNX1NUQUJEX09QKTogTmV3IGRlZmF1bHQgZGVmaW5pdGlvbnMuCisJKiBmaW5hbC5jOiBJbmNsdWRlIGRlZmF1bHRzLmguCisJKEFTTV9TVEFCRF9PUCk6IERlbGV0ZWQuCisJKiBNYWtlZmlsZS5pbiAoZmluYWwubykgRGVwZW5kIG9uIGRlZmF1bHRzLmguCisKKwkqIE1ha2VmaWxlLmluICh0b3BsZXYubyk6IFVzZSBNQVlCRV9UQVJHRVRfREVGQVVMVC4KKwkqIGNvbmZpZ3VyZTogU2V0IE1BWUJFX1RBUkdFVF9ERUZBVUxUIGZvciBzb21lIHRhcmdldHMuCisJVXNlIDMsIGlmIHRhcmdldCBpcyBpNDg2Li4uCisJUmVjb2duaXplIGk0ODYgYXMgd2VsbCBhcyBpMzg2IGZvciBtb3N0IHRhcmdldHMuCisKKwkqIHgtaHAzMjBnIChMSUJHQ0MxLCBBUiwgUkFOTElCLCBSQU5MSUJfVEVTVCwgTElCQ09OVkVSVCk6IERlbGV0ZWQuCisJKiB0LWhwMzIwZyAoTElCR0NDMSwgQVIsIFJBTkxJQiwgUkFOTElCX1RFU1QsIExJQkNPTlZFUlQpOiBEZWZpbmVkLgorCSogdC1zdnI0IChGSVhJTkNMVURFUyk6IERlbGV0ZWQuCisKKwkqIE1ha2VmaWxlLmluIChFTlFVSVJFX0NGTEFHUyk6IEFkZCAtRE5PX0xPTkdfRE9VQkxFX0lPLgorCisJKiBmb2xkLWNvbnN0LmMgKEJSQU5DSF9DT1NUKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworCSogY3AtdHJlZS5oOiBEZWNsYXJlIGludFFJX3R5cGVfbm9kZSwgZXRjLgorCSogY3AtZGVjbC5jOiBEZWNsYXJlIGludFFJX3R5cGVfbm9kZSwgZXRjLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgdGhvc2Ugbm9kZXMuCisKK1RodSBKdWwgIDIgMTU6MTg6MzMgUERUIDE5OTIgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmNkLmNvbSkKKworCSogYW1peC5oIChBU01fT1VUUFVUX0NBU0VfRU5ELCBBU01fT1VUUFVUX0FMSUdORURfTE9DQUwpOiAgT3V0cHV0CisJdGFicyBiZWZvcmUgU0VUX0FTTV9PUC4KKworCSogTWFrZWZpbGUuaW4gKGR3YXJmb3V0Lm8pOiAgRGVwZW5kZW5jeSBvbiBkZWZhdWx0cy5oIGFkZGVkLgorCisJKiBzcGFyY3Y0Lmg6IEluY2x1ZGUgcmVhbC5oLgorCShTRVRfQVNNX09QKTogVW5kZWYgaXQuCisKKwkqIHN2cjQuaCAoSURFTlRfQVNNX09QKTogIEFkZGVkIGdlbmVyaWMgc3ZyNCBkZWZpbml0aW9uLgorCShBU01fRklMRV9FTkQsIEFTTV9PVVRQVVRfSURFTlQpOiAgVXNlIElERU5UX0FTTV9PUC4KKwkoQUxJR05fQVNNX09QKTogIEFkZGVkIGdlbmVyaWMgc3ZyNCBkZWZpbml0aW9uLgorCShBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiAgQWRkZWQgZ2VuZXJpYyBzdnI0IGRlZmluaXRpb24uCisKKwkqIGk4NjAuYyAoc3RyaWN0X3NpbmdsZV9pbnNuX29wX3AsIHJlbG9wKTogRGVsZXRlZC4KKwkqIGk4NjAuaCAoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogIEZpeGVkIGRlZmluaXRpb24gdG8gdXNlCisJQVNNX09VVFBVVF9BTElHTiBhbmQgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTC4KKwkqIGk4NjBiLmgsIGk4NjB2My5oIChUQVJHRVRfVkVSU0lPTik6ICBEZWZpbml0aW9ucyBhZGRlZC4KKwkqIGk4NjB2My5oIChDUFBfUFJFREVGSU5FUyk6ICBQcmVkZWZpbmUgX19zdnIzX18gcmF0aGVyIHRoYW4gU1ZSMy4KKworCSogYy1kZWNsLmMgKG5hbWVkX2xhYmVscyk6ICBDaGFuZ2UgbGlua2FnZSB0byBzdGF0aWMuCisKKwkqIGFzc2VydC5oIChfX2VwcmludGYpOiBEZWNsYXJlIDNyZCBhcmcgYXMgdW5zaWduZWQuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IERvbid0IGRvIGZwcmludGYncyBpZiBpbmhpYml0X3dhcm5pbmdzLgorCVJlbmFtZWQgc3lzdGVtX2hlYWRlcl9wIHRvIGFuZ2xlX2JyYWNrZXRzLiAgVXNlIGlzX3N5c3RlbV9pbmNsdWRlLgorCShpc19zeXN0ZW1faW5jbHVkZSk6IE5ldyBmdW5jdGlvbi4KKwkocmVkdW5kYW50X2luY2x1ZGVfcCkgOiBSZW5hbWVkIGZyb20gbG9va3VwX2luY2x1ZGUuCisKKwkqIGMtY29tbW9uLmMgKHR5cGVfZm9yX3NpemUpOiAgSWYgbm8gQU5TSSB0eXBlIG1hdGNoZXMsIGNoZWNrIGZvcgorCW1hdGNoZXMgd2l0aCBidWlsdC1pbiBtb2RlLXJlbGVhdGVkIHR5cGVzLgorCSh0eXBlX2Zvcl9tb2RlKTogIExpa2V3aXNlLgorCSogYy1kZWNsLmM6ICBBZGRlZCBkZWNsYXJhdGlvbnMgZm9yIG1vZGUtcmVsYXRlZCBpbnRlcm5hbCB0eXBlIG5vZGVzLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBJbml0aWFsaXplIHRoZSBuZXcgdHlwZSBub2Rlcy4KKwkqIGMtdHJlZS5oOiAgQWRkZWQgZGVjbGFyYXRpb25zIGZvciBtb2RlLXJlbGF0ZWQgaW50ZXJuYWwgdHlwZSBub2Rlcy4KKwlpbnRRSV90eXBlX25vZGUsIGV0Yy4KKworCSogYy1sZXguYyAoeXlsZXgpOiBGb3IgaW50ZWdlcnMsIHJlbmFtZSBzaG9ydHMgdG8gcGFydHMuCisJTGV0IHRoZSBudW1iZXIgb2YgdGhlbSBiZSB2YXJpYWJsZS4gIFNpbXBsaWZ5IG92ZXJmbG93IHRlc3RpbmcuCisJRG9uJ3QgdXNlIGxvbmcgbG9uZyB0eXBlcyB1bmxlc3MgbGwgd2FzIHNwZWNpZmllZC4KKwlEb24ndCB3YXJuIHR3aWNlLgorCitUaHUgSnVsICAyIDIwOjMwOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdzdGRhcmcuaDogI2lmZGVmIF9TVERBUkdfSCwgbm90IF9fU1REQVJHX0guCisKK1RodSBKdWwgIDIgMTg6MTg6MDcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnbG9iYWwuYzogUmVuYW1lZCBmcm9tIGdsb2JhbC1hbGxvYy5jLgorCitUaHUgSnVsICAyIDE1OjM2OjI1IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKHpkZXBpX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IFVzZSBpdC4KKwkqIHBhLm1kOiBOZXcgcGF0dGVybiB0byByZWNvZ25pemUgY2FzZXMgd2hlcmUgemRlcGkgY2FuIGJlIHVzZWQgdG8KKwlsb2FkIGltbWVkaWF0ZSBjb25zdGFudC4KKwkoaW5zdik6IEFsbG93IG9idmlvdXMgaW1tZWRpYXRlIHZhbHVlcy4KKwkoaW5zdiArIDEpOiBOZXcgcmVjb2duaXplciBmb3Igbm9uLW9idmlvdXMgaW1tZWRpYXRlIHZhbHVlcy4KKworVGh1IEp1bCAgMiAxNToxMzoxNSAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaGFsZnBpYy5jIChoYWxmX3BpY19lbmNvZGUpOiBDb25zaWRlciB2YXJpYWJsZXMgd2hpY2ggYXJlICdjb21tb24nCisJdmFyaWFibGVzIHRvIG5lZWQgcGljIGZpeHVwLiAgTW92ZSB0aGUgZGVidWcgY29kZSwgc28gdGhhdCBpdCBwcmludHMKKwlmb3IgYWxsIGNhbGxzLCBhbmQgY2FsbHMgZGVidWdfdHJlZSBhbHNvLgorCShoYWxmX3BpY19hZGRyZXNzKTogV2hlbiBkb2luZyBlbGltaW5hdGVfY29uc3RhbnRfdGVybSBvbiBhIENPTlNULAorCWRvIGEgWEVYUCAoYWRkciwgMCkgdG8gZ2V0IHRvIHRoZSByZWFsIGFkZHJlc3MuCisKKwkqIGRlY3Jvc2UuaCAoQ1BQX1NQRUMsIENDMV9TUEVDKTogSWYgbmVpdGhlciAtZmJ1aWx0aW4gbm9yCisJLWZuby1idWlsdGluIGFyZSBwYXNzZWQsIHBhc3MgLWZuby1idWlsdGluLCBhbmQgcmVuYWJsZSB0aGUgc3RyaW5nCisJYW5kIG1lbW9yeSBidWlsdGlucyB2aWEgbWFjcm9zLiAgVGhpcyBpcyB0byBzdXBwb3J0IGNvbXBpbGluZyB0aGUKKwlPU0YvMSBrZXJuZWwgd2hpY2ggaGFzIGEgcHJvdG90eXBlZCBleGl0IGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRocmVlCisJYXJndW1lbnRzLiAgV2l0aCBubyAtcGljIHN3aXRjaGVzLCBkZWZhdWx0IHRvIHVzaW5nIHNoYXJlZCBsaWJzLgorCisJKiBpMzg2cm9zZS5oIChDUFBfU1BFQywgQ0MxX1NQRUMpOiBJZiBuZWl0aGVyIC1mYnVpbHRpbiBub3IKKwktZm5vLWJ1aWx0aW4gYXJlIHBhc3NlZCwgcGFzcyAtZm5vLWJ1aWx0aW4sIGFuZCByZW5hYmxlIHRoZSBzdHJpbmcKKwlhbmQgbWVtb3J5IGJ1aWx0aW5zIHZpYSBtYWNyb3MuICBUaGlzIGlzIHRvIHN1cHBvcnQgY29tcGlsaW5nIHRoZQorCU9TRi8xIGtlcm5lbCB3aGljaCBoYXMgYSBwcm90b3R5cGVkIGV4aXQgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhyZWUKKwlhcmd1bWVudHMuICBUdXJuIG9mZiBwaWMgc3VwcG9ydCB1bnRpbCB0aGUgMzg2IGJhY2tlbmQgc3VwcG9ydHMgaXQuCisKKwkqIHgtaTM4NnJvc2UgKFNITElCKTogVXNlIC1waWMtbm9uZSBpbnN0ZWFkIG9mIC1MJHtCVUlMRH0vdXNyL2Njcy9saWIuCisKKwkqIHgtZGVjcm9zZSAoU0hMSUIpOiBVc2UgLXBpYy1ub25lIGluc3RlYWQgb2YgLUwke0JVSUxEfS91c3IvY2NzL2xpYi4KKworCSogbWlwcy5tZCAobW92c2kpOiBSZXdyaXRlIGhhbmRsaW5nIG9mIGhhbGYtcGljIGNvZGUgc28gdGhhdCBsb2FkCisJYWRkcmVzcyBvZiBzeW1ib2wgKyB2YWx1ZSBpcyBoYW5kbGVkLgorCShicmFuY2hfemVybyk6IERvbid0IGFsbG93IGJyYW5jaCBjb21wYXJpbmcgY29uc3RhbnQgdG8gMC4KKworVGh1IEp1bCAgMiAwNjoyNjozOCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5tZCAoYmxvY2thZ2UgaW5zbik6IFJlbmFtZWQgZnJvbSBwcm9maWxlci4KKwkoZXBpbG9ndWUgaW5zbik6IERvbid0IHByb3ZpZGUgdGhpcyBpZiBhIHJldHVybiBpbnNuIHdpbGwgc3VmZmljZS4KKwkobTg4a19lbmRfZXBpbG9ndWUpOiBJZiB0aGUgbGFzdCBpbnNuIGlzbid0IGEgYmFycmllciwgcHJpbnQgYSByZXR1cm4uCisJKiBtODhrLmMgKG51bGxfcHJvbG9ndWUpOiBSZW5hbWVkIGZyb20gbnVsbF9lcGlsb2d1ZS4KKworCSogbTg4ay5jIChjb25kaXRpb25fdmFsdWUpOiBOZXcgZnVuY3Rpb24uCisJKiBtODhrLm1kIChjb21wYXJlIHdvcmQgaW5zbnMpOiBOZXcgaW5zbnMgYW5kIGRlZmluZV9zcGxpdAorCXBhdHRlcm5zIHRvIHRha2UgYWR2YW50YWdlIG9mIHJlY2VudCBmb2xkX3RydXRob3AgY2hhbmdlLgorCisJKiBtODhrLmggKEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMpOiBSZXByZXNlbnQgdGhlIGNvbmRpdGlvbiBjb2RlCisJcmVnaXN0ZXIgYXMgKHJlZzpDQyAwKS4gIEdpdmUgaXQgdGhlIG5hbWVzICJjYyIgYW5kICJwc3IiLgorCSogbTg4ay5tZCAoc3VwZXJvcHRpbWl6ZXIgc2VxdWVuY2VzKTogTmV3IGRlZmluZV9zcGxpdCBwYXR0ZXJucy4KKwkoYWRkL3N1YiB3aXRoIGNhcnJ5KTogTmV3IGluc25zLgorCShhZGQvc3ViIERJbW9kZSwgZmZzc2kyKTogQ2xvYmJlciB0aGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuCisKK1dlZCBKdWwgIDEgMTM6Mzc6MzcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkZGVmLmggRG9uJ3QgZGVmaW5lIG1hY3JvcyBhc3NvY2lhdGVkIHdpdGggc2l6ZV90IHVubGVzcyB3ZQorCWFjdHVhbGx5IHdhbnQgdG8gZGVjbGFyZSBzaXplX3QuICBMaWtld2lzZSBmb3IgcHRyZGlmZl90IGFuZCB3Y2hhcl90LgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBEZXBlbmQgb24geGdjYywgZysrLCBjKyssIEVYVFJBX1BBUlRTLgorCURvbid0IGRlbGV0ZSBzcGVjcyBmcm9tIGxpYnN1YmRpciB1bmxlc3MgaXQgZXhpc3RzIGluIGJ1aWxkIGRpci4KKworCSogdmEtcGEuaDogUmVuYW1lZCBmcm9tIHZhLWhwODAwLmguCisJKiBnc3RkYXJnLmgsIGd2YXJhcmdzLmg6IFVzZSBuZXcgbmFtZS4KKworCSogbmV3czMuaCwgbmV3czNnYXMuaDogTmV3IGZpbGVzLgorCSogY29uZmlndXJlIChtNjhrLXNvbnktbmV3c29zMyopOiBOZXcgYWx0ZXJuYXRpdmUuCisKKwkqIHJvbXAuaCAoU0laRV9UWVBFKTogRGVmaW5lZC4KKworCSogY29uZmlndXJlOiBTdXBwb3J0IC0tZXhlYy1wcmVmaXguICBTaW1wbGlmeSBoYW5kbGluZworCWRldGFjaGVkIGFyZ3VtZW50cyBvZiBvcHRpb25zLgorCisJKiBpc2MuaCwgYW5kIG90aGVyIHJlbGF0ZWQgZmlsZXM6CisJd2FpdGluZyBmb3IgZW50cmllcyBmcm9tIGthcmxAY3MudW1iLmVkdS4KKworV2VkIEp1bCAgMSAxMjowNDo1MyAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmNkLmNvbSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogIERvbid0IG1hcmsgZmlsZS1zY29wZSByZWdpc3RlciB2YXJpYWJsZXMKKwlhcyBUUkVFX1BVQkxJQy4KKworV2VkIEp1bCAgMSAxMjowNDo1MyAxOTkyICBLYXJsIEJlcnJ5IChrYXJsQGNzLnVtYi5lZHUpCisKKyAgICAgICAgKiBpMzg2aXNjZ2FzLmggKFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFKTogRGVmaW5lIHRoZXNlLCBzaW5jZSB3ZQorICAgICAgICBuZWVkIHRvIG92ZXJyaWRlIEdDQydzIGRlZmF1bHRzLgorCisgICAgICAgICogY29uZmlndXJlIChpMzg2LSotaXNjKTogVXNlIGRpZmZlcmVudCBmaWxlcyBpZiB3ZSBoYXZlIGdhcy4KKyAgICAgICAgKiB0LWkzODZpc2NnYXMsIGkzODZpc2NnYXMuaCwgaXNjLmg6IE5ldyBmaWxlcworICAgICAgICAqIGkzODZpc2MuaDogSW5jbHVkZSBpc2MuaC4gIE1vc3Qgb2YgY29udGVudHMgbW92ZWQgdG8gaXNjLmguCisgICAgICAgICogYnNkMzg2LmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpIFtOT19VTkRFUlNDT1JFU106IGRvIG5vdCBwcmVwZW5kIGFuCisgICAgICAgIHVuZGVyc2NvcmUgaW4gdGhpcyBjYXNlLgorICAgICAgICAqIGkzODZnYXMuaCAoQ1BQX1NQRUMpOiBpZiAtcG9zaXgsIGRvIC1EX1BPU0lYX1NPVVJDRS4KKworV2VkIEp1bCAgMSAwOToxMzo0NCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBSZW5hbWVkIGZyb20gbWVyZ2VfY29tcG9uZW50X3JlZmVyZW5jZXMuCisJKHNpbXBsZV9vcGVyYW5kX3ApOiBOZXcgZnVuY3Rpb24uCisJKHJhbmdlX3Rlc3QpOiBDaGFuZ2UgSkNPREUgcGFyYW1ldGVyIHRvIHRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdGlvbi4KKwkoZm9sZF90cnV0aG9wKTogIFdoZW4gYnJhbmNoZXMgYXJlIGV4cGVuc2l2ZSwgdHJ5IHRvIGV2YWx1YXRlIHRoZQorCVJIUyB1bmNvbmRpdGlvbmFsbHkuICBDb21wdXRlIGxvY2FsIHZhcmlhYmxlcyBhcyBsYXRlIGFzIHBvc3NpYmxlLgorCisJKiBtODhrLmggKEhBTkRMRV9TWVNWX1BSQUdNQSk6IFJlcGxhY2VzIEhBTkRMRV9QUkFHTUEuCisJKiBtODhrLmMgKG04OGtfaGFuZGxlX3ByYWdtYV90b2tlbik6IERlbGV0ZWQuCisKK1R1ZSBKdW4gMzAgMTU6MzI6NTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogSWYgbmV3ZGVjbCBmb3IgYnVpbHRpbiBmdW5jdGlvbgorCWhhcyBzYW1lIHJldHVybiBtb2RlIGFzIHRoZSBidWlsdGluLCBrZWVwIHRoZSBidWlsdGluCisJYnV0IHVzZSBuZXdkZWNsJ3MgcmV0dXJuIHR5cGUuCisKKwkqIGkzODYubWQgKGxzaHJkaTNfY29uc3RfaW50KTogRml4IHR5cG8gaW4gc2hyIGluc24uCisKKwkqIE1ha2VmaWxlLmluIChHQ0NfQ0ZMQUdTKTogQWRkIGAtQiQodG9vbGRpcikvJy4KKworCSogaTM4NnN1bi5oLCByczYwMDAtbWFjaC5oLCBzcGFyYy5oLCBzdW4ybzQuaCwgc3VuMy5oIChMSU5LX1NQRUMpOgorCUluaGliaXQgdGhlIGRlZmF1bHQgLWUgaWYgLXIgb3IgLW5vc3RkbGliLgorCisJKiBjLWRlY2wuYyAobG9va3VwX2xhYmVsKTogQ2FsbCBsYWJlbF9ydHguCisKKwkqIGMtcGFyc2UueSAocHJpbWFyeSk6IFJlYXJyYW5nZSBhbmQgY2xlYW4gdXAuICBJbiBDX0RFQ0xfQU5USUNJUEFURUQKKwljYXNlLCBhbHdheXMgY2FsbCBhc3NlbWJsZV9leHRlcm5hbCBhbmQgc2V0IFRSRUVfVVNFRC4KKworTW9uIEp1biAyOSAyMjoyNzo0OSAxOTkyICBNaWtlIFN0dW1wICAobXJzQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jLCBjcC1kZW0uYywgZGJ4b3V0LmMsIGNwLWxleC5jLCBjcC14cmVmLmMsIGNwLW1ldGhvZC5jLAorCWR3YXJmb3V0LmMsIGMtdHlwZWNrLmMsIG1pcHMtdGZpbGUuYywgcHJvdG9pemUuYywgY29sbGVjdDIuYzogTWFrZQorCXRoZSBjb21waWxlciBtb3JlIGNvbnNpc3RlbnQgYnkgdXNpbmcgaW5kZXggYW5kIHJpbmRleCBldmVyeXdoZXJlCisJaW5zdGVhZCBvZiBzb21ldGltZXMgdXNpbmcgc3RyY2hyIGFuZCBzdHJyY2hyLgorCitNb24gSnVuIDI5IDIyOjIwOjEzIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogUmVzdG9yZSBzb21lIGFjY2lkZW50YWxseS1kZWxldGVkIGNvZGUuCisKK01vbiBKdW4gMjkgMTI6NDg6MDUgMTk5MiAgTm9idXl1a2kgSGlraWNoaSAgKGhpa2ljaGlAc3JhLmNvLmpwKQorCisJKiBjb2xsZWN0Mi5jIChNWV9JU0NPRkYpOiBOZXcgbWFjcm8uCisJKHNjYW5fcHJvZ19maWxlKTogVXNlIHRoYXQgaW5zdGVhZCBvZiBJU0NPRkYuCisKKwkqIG1pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucykgW01JUFNfTkVXU106IENhbGwgc2V0bGluZWJ1Zi4KKworTW9uIEp1biAyOSAxMjo0ODowNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBGb3IgJUksIHBhc3MgLWlwcmVmaXgsIG5vdCAtaW1hY3Jvcy4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRm9yIGBwYWNrZWQnIG9uIFZBUl9ERUNMLAorCXNldCBERUNMX1BBQ0tFRCBhbmQgREVDTF9BTElHTi4KKworCSogY29uZmlndXJlOiBVcGRhdGUgdXNhZ2UgbWVzc2FnZS4KKwkobTY4ay1zb255LW5ld3NvcyosIG1pcHMtc29ueS1uZXdzb3MqKTogTmV3IHN5bm9ueW1zLgorCisJKiBmb2xkLWNvbnN0LmMgKG1lcmdlX2NvbXBvbmVudF9yZWZlcmVuY2VzKToKKwlNYWtlIHN1cmUgdGhlIGZvdXIgZmllbGRzIGNvcnJlc3BvbmQgaW4gdGhlIHByb3BlciBvcmRlci4KKworCSogYy1sZXguYyAoY2hlY2tfbmV3bGluZSk6IFN1cHBvcnQgSEFORExFX1NZU1ZfUFJBR01BLgorCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBOZXcgZnVuY3Rpb24uCisJKiBjLXByYWdtYS5jOiBOZXcgZmlsZS4KKwkqIHN0b3ItbGF5b3V0LmMgKG1heGltdW1fZmllbGRfYWxpZ25tZW50KTogTmV3IHZhcmlhYmxlLgorCShsYXlvdXRfZGVjbCk6IFVzZSBpdC4KKwkqIE1ha2VmaWxlLmluIChDX09CSlMsIE9CSkNfT0JKUyk6IEFkZCBjLXByYWdtYS5vCisJKGMtcHJhZ21hLm8pOiBOZXcgcnVsZS4KKworCSogaTM4Ni5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogRnVuY3Rpb24gZGVsZXRlZC4KKwkqIGkzODZ2NC5oIChIQU5ETEVfUFJBR01BKTogRGVsZXRlZC4KKworCSogZysrOiBSZWVzdGFibGlzaCBzeW1saW5rIHRvIGMrKy4KKwlEZWxldGUgdGhlIHRlc3Rpbmcgb2YgJFRSQUNFLS10aGlzIGNvdWxkIGNvbmZ1c2UgcGVvcGxlLgorCURlbGV0ZSBzcHVyaW91cyBhc3NpZ25tZW50IG9mICR2ZXJzaW9uLgorCisJKiB0cmVlLmggKERFQ0xfUEFDS0VEKTogU3RvcmUgdGhpcyBpbiByZWdkZWNsX2ZsYWcuCisKKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBDaGFuZ2UgX2J1aWx0aW5fTmV3IHRvIF9jYXBzX05ldy4KKwkqIGxpYmdjYzIuYzogQ2hhbmdlIExfYnVpbHRpbl9OZXcgdG8gTF9jYXBzX05ldy4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBQYXNzIDMgYXJncyB0byBlbGltaW5hdGVfcmVncy4KKwlDYWxsIGFsdGVyX3N1YnJlZyBmb3Igc3VicmVncy4gIERlbGV0ZSBzdWJyZWcgY2FzZSBsYXRlciBvbi4KKwlEb24ndCBib3RoZXIgd2l0aCByZWdfcmVudW1iZXItLWFueSBwc2V1ZG8gcmVnIGlzIGNsZWFybHkKKwlhIHZhcmlhYmxlIHRoYXQgd2FzIG5vdCBhbGxvY2F0ZWQuCisJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCk6IENhbGwgYWx0ZXJfc3VicmVnIGZvciBzdWJyZWdzLgorCURvbid0IGJvdGhlciB3aXRoIHJlZ19yZW51bWJlci0tYW55IHBzZXVkbyByZWcgaXMgY2xlYXJseQorCWEgdmFyaWFibGUgdGhhdCB3YXMgbm90IGFsbG9jYXRlZC4KKworCSogc2VxdWVudC5oIChTSVpFX1RZUEUpOiBEZWZpbmVkLgorCShMSU5LX0xJQkdDQ19TUEVDSUFMKTogRml4IHR5cG8uCisKK01vbiBKdW4gMjkgMTI6MDQ6NTcgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogVGhyZWFkIHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUKKwljb2RlIGltbWVkaWF0ZWx5IGFmdGVyIHJlbG9hZGluZyBpcyBkb25lLgorCSogc2NoZWQuYyAoc2NoZWR1bGVfaW5zbnMpOiBSZXBvc2l0aW9uIHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUKKwlub3RlcyBhcyBuZWVkZWQuCisJKiByZW9yZy5jIChkYnJfc2NoZWR1bGUpOiBEaXR0by4KKwkqIHJ0bC5oIChOT1RFX0lOU05fUFJPTE9HVUVfRU5ELCBOT1RFX0lOU05fRVBJTE9HRV9CRUdJTik6IE5ldyBub3Rlcy4KKwkqIHJ0bC5jIChub3RlX2luc25fbmFtZSk6IFJlY29yZCB0aGVtLgorCSogZnVuY3Rpb24uYyAocmVjb3JkX2luc25zLCBjb250YWlucywgdGhlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zLAorCXJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGZpbmFsLmM6IEluY2x1ZGUgaW5zbi1mbGFncy5oLgorCShwcm9maWxlX2FmdGVyX3Byb2xvZ3VlKTogTmV3IGZ1bmN0aW9uLgorCShmaW5hbF9zdGFydF9mdW5jdGlvbik6IFVzZSBwcm9maWxlX2FmdGVyX3Byb2xvZ3VlIGhlcmUgd2hlbiB3ZQorCWRvbid0IEhBVkVfcHJvbG9ndWUuCisJKGZpbmFsX3NjYW5faW5zbik6IFVzZSBwcm9maWxlX2FmdGVyX3Byb2xvZ3VlIHdoZW4gd2Ugc2NhbgorCU5PVEVfSU5TTl9QUk9MT0dVRV9FTkQuICAoVGhpcyBoYXBwZW5zIHdoZW4gd2UgZG8gSEFWRV9wcm9sb2d1ZS4pCisJUGVyZm9ybSBtYWNoaW5lIHNwZWNpZmljIGFjdGlvbnMgd2hlbiB0aGUgcHJvbG9ndWUtZW5kIGFuZAorCWVwaWxvZ3VlLWJlZ2luIG5vdGVzIGFyZSBzY2FubmVkLgorCShmaW5hbF9zY2FuX2luc24sIEJBUlJJRVIpOiBBbGlnbiBvbmx5IHdoZW4gc29tZXRoaW5nIGZvbGxvd3MuCisJKiBNYWtlZmlsZS5pbiAoZmluYWwubyk6IERlcGVuZHMgb24gaW5zbi1mbGFncy5oLgorCisJKiBtODhrLmggKEZVTkNUSU9OX0VORF9QUk9MT0dVRSwgRlVOQ1RJT05fQkVHSU5fRVBJTE9HVUUpOiBEZWZpbmUuCisJKERFTEFZX1NMT1RTX0ZPUl9FUElMT0dVRSwgRUxJR0lCTEVfRk9SX0VQSUxPR1VFX0RFTEFZKTogRGVsZXRlLgorCSogbTg4ay5tZCAocHJvbG9ndWUsIGVwaWxvZ3VlLCBwcm9maWxlciwgbG9jYXRlMSwgbG9jYXRlMik6IE5ldworCXBhdHRlcm5zIGZvciByZXByZXNlbnRpbmcgcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMuCisJKiBtODhrLmMgKGRlbGF5X3Nsb3RzX2Zvcl9lcGlsb2d1ZSwgZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5LAorCW9rX2Zvcl9lcGlsb2d1ZV9wKTogRGVsZXRlIGVwaWxvZ3VlIGRlbGF5IHNsb3QgZnVuY3Rpb25zLgorCShtODhrX2JlZ2luX3Byb2xvZ3VlIG04OGtfZW5kX3Byb2xvZ3VlIG04OGtfZXhwYW5kX3Byb2xvZ3VlKTogTmV3CisJZnVuY3Rpb25zIHJlcGxhY2luZyBtODhrX291dHB1dF9wcm9sb2d1ZS4KKwkobTg4a19iZWdpbl9lcGlsb2d1ZSBtODhrX2VuZF9lcGlsb2d1ZSBtODhrX2V4cGFuZF9lcGlsb2d1ZSk6IERpdHRvLgorCShwcmVzZXJ2ZV9yZWdpc3RlcnMpOiBEZWxldGUgZXBpbG9ndWUgZGVsYXkgc2xvdCBtZWNoYW5pc20gYW5kCisJY2hhbmdlIHRvIG91dHB1dCBpbnNucy4KKwkoZW1pdF9hZGQsIGVtaXRfbGRzdCk6IE5ldyBmdW5jdGlvbnMuCisKK1N1biBKdW4gMjggMjM6MDY6MDQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3Mud2lkZW5lci5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChib290c3RyYXAsIGJvb3RzdHJhcDIsIGJvb3RzdHJhcDMpOiBJbiBlYWNoCisJcGFzc2FnZSBvZiBDQywgdXNlIHhnY2MsIG5vdCBnY2MuCisJKiBkb3N0YWdlMiwgZG9zdGFnZTM6IExpa2V3aXNlLgorCitTdW4gSnVuIDI4IDA5OjQ4OjE4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IElmIGhhdmUgY2hhciAqZm9vICgpIGFuZAorCXZvaWQgKmZvbyAoLi4uKSwgbWFrZSBqdXN0IGEgcGVkd2Fybi4gIEFkZCBsb2NhbHMgb2xkdHlwZSwgbmV3dHlwZS4KKwkqIGMtdHlwZWNrLmMgKHNlbGZfcHJvbW90aW5nX2FyZ3NfcCk6IE5vIGxvbmdlciBzdGF0aWMuCisKKwkqIGZsb3cuYyAocmVnbm9fdW5pbml0aWFsaXplZCk6IFJldHVybiAwIGZvciBnbG9iYWwgcmVnIHZhci4KKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6CisJQWxsb3cgQ09OVkVSVF9FWFBSIGlmIGl0cyBvcGVyYW5kIGlzIGFsbG93YWJsZS4gCisJKGJ1aWxkX2NfY2FzdCk6IEZvciBjYXN0IHRvIHVuaW9uLCBtYWtlIGEgQ09OU1RSVUNUT1IuCisKKwkqIHNwYXJjLmMgKFNQQVJDX1NUQUNLX0FMSUdOKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworCSogYysrOiBVc2UgYHNldCAiJEAiJyB0byBtb2RpZnkgYXJndW1lbnRzLgorCVVzZSBhIGNhc2UgdG8gZGVjaWRlIGhvdyB0byBzZXQgJGdjYy4KKwkkcXVvdGUgaXMgbm93IGVtcHR5IGZvciBmYWxzZSBhbmQgdGhlIG9wdGlvbiBuYW1lIGZvciB0cnVlLgorCUVycm9yIGF0IGVuZCBpZiAkcXVvdGUgaXMgbm9uZW1wdHkuCisJJHNwZWNsYW5nIGlzIG5vdyB0aGUgLXggb3B0aW9uIGl0c2VsZi4KKwlNb3ZlIHRoZSAtdiBjYXNlIGFib3ZlIHRoZSAtKiBjYXNlLgorCisJKiBsaW1pdHguaDogQWRkICNpZm5kZWYuCisJKiBsaW1pdHkuaDogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1saW1pdHMtaCk6IEFwcGVuZCBsaW1pdHkuaCB0byB0aGUgZW5kLgorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IERvbid0IHB1c2ggc3BlbGxpbmdzIGhlcmUgKGZvciB1bmlvbiBjYXNlKS4KKwkocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRml4IGVycm9ycyBmb3IgZmllbGQgbm90IGZvdW5kLgorCShidWlsZF9jX2Nhc3QpOiBGb2xkIGNhc3RzIHRvIHVuaW9uIHR5cGUuCisKKwkqIHhtLXZtcy5oIChYUkVGX0ZJTEVfTkFNRSk6IEZpeCB0eXBvLgorCisJKiBpMzg2c3VuLmggKFNJWkVfVFlQRSk6IERlZmluZWQuCisKKwkqIE1ha2VmaWxlLmluIChhbGxvY2Eubyk6IERlbGV0ZSB0aGUgcm0gY29tbWFuZC4KKwlVc2UgLURlbWFjcyBleHBsaWNpdGx5IGluIGNvbXBpbGF0aW9uIGNvbW1hbmQuCisJKEFMTE9DQV9GTEFHUywgQUxMT0NBX0ZJTklTSCk6IEVtcHR5IGJ5IGRlZmF1bHQuCisJKiB4LXBhLWhwdXgsIHgtcnM2MDAwLCB4LXJzNmstbWFjaCwgeC1kcHgyMjAwLCB4LWRweDIzMDA6CisJKEFMTE9DQV9GTEFHUywgQUxMT0NBX0ZJTklTSCk6IERlbGV0ZWQuCisJKiB4LWRweDIyMDAsIHgtZHB4MjMwMCAoQVMpOiBEZWxldGVkLgorCisJKiBjb25maWd1cmU6IFNldCBicm9rZW5faW5zdGFsbCBmb3IgVi40LgorCShpMzg2LSotYWl4LCBuczMyay0qLWdlbml4LCBpMzg2LSotaXNjLCBpMzg2LSotc2NvKTogCisJKGkzODYtKi1zY28zLjJ2NCwgbTg4ay1kZy1kZ3V4KTogU2V0IGJyb2tlbl9pbnN0YWxsLgorCShtODhrLSotc3lzdik6IERvbid0IHVzZSB4LW04OGt2My4KKwkqIHgtbTg4a3YzOiBGaWxlIGRlbGV0ZWQuCisJKiB4LWFpeDM4NiwgeC1kcHgyMjAwLCB4LWRweDIzMDAsIHgtZ2VuaXgsIHgtaTM4NmlzYywgeC1pMzg2c2NvOgorCSogeC1pMzg2diwgeC1pMzg2djQsIHgtaTg2MHYzLCB4LWk4NjB2NCwgeC1tODhrZGd1eCwgeC1tODhrZG9scGg6CisJKiB4LW04OGt2NCwgeC1uY3IzMDAwLCB4LXNwYXJjdjQsIHgteGVuaXggKElOU1RBTEwpOiBEZWxldGVkLgorCitTdW4gSnVuIDI4IDA4OjQ0OjMyIDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiByZWdjbGFzcy5jIChyZWNvcmRfYWRkcmVzc19yZWdzKTogTWFrZSB0aGUgZnVuY3Rpb24gc3RhdGljIHRvCisJYWdyZWUgd2l0aCB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbi4KKworCSogbWlwcy5oIChMSU5LX0xJQkdDQ19TUEVDSUFMKTogRGVmaW5lLgorCitTdW4gSnVuIDI4IDA2OjE0OjU2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZGlyZWN0X2xvYWQsIGRpcmVjdF9zdG9yZSk6IE5ldyB2YXJpYWJsZXMuCisJKGluaXRfZXhwcl9vbmNlKTogTmV3IGZ1bmN0aW9uLgorCShjb252ZXJ0X21vdmUsIGNvbnZlcnRfdG9fbW9kZSk6IERvbid0IGxldCBnZW5fbG93cGFydCBtYWtlIGEgTUVNIGluCisJYSBtb2RlIHRoYXQgY2FuJ3QgYmUgZGlyZWN0bHkgY29waWVkIHRvIG9yIGZyb20gbWVtb3J5LgorCShzdG9yZV9maWVsZCk6IERvbid0IGRpcmVjdGx5IHN0b3JlIGludG8gbWVtb3J5IGluIGEgbW9kZSB0aGF0CisJY2FuJ3QgYmUgdXNlZCBpbiBhIHNpbmdsZSBpbnNuLgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogTGlrZXdpc2UsIGZvciBsb2FkLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgaW5pdF9leHByX29uY2UuCisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBTVUJSRUcpOiBJZiB3ZSBjYW4gZmluZCBuZXN0ZWQgU1VCUkVHcworCXdpdGggYW4gaW5uZXIgcmVnaXN0ZXIgaW4gdGhlIG1vZGUgd2Ugd2FudCwgZ2V0IHJpZCBvZiBhbGwgdGhlCisJU1VCUkVHcyBwcm92aWRlZCB0aGV5IGFyZSBhbGwgd2l0aGluIGEgd29yZC4KKworCSogY3AtY2FsbC5jLCBjcC1jbGFzcy5jLCBjcC1kZWNsLmMsIGNwLWVkc2VsLmMsIGNwLWxleC5jOiBEb24ndAorCWRlY2xhcmUgeG1hbGxvYyBhbmQgZnJlZSBoZXJlLgorCSogY3AtbWV0aG9kcy5jLCBjcC1wdC5jLCBjcC1zZWFyY2guYywgZmxvdy5jLCBpbnRlZ3JhdGUuYzogTGlrZXdpc2UuCisJKiBsb29wLmMsIG9wamMtYWN0aW9ucy5jLCByZWxvYWQxLmMsIHJlb3JnLmMsIHJ0bC5jOiBMaWtld2lzZS4KKwkqIHN0bXQuYywgdHJlZS5jLCB2YXJhc20uYzogTGlrZXdpc2UuCisJKiB0b3BsZXYuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBEZWNsYXJlIHJldHVybiB0eXBlcyBjb3JyZWN0bHkuCisJKiBydGwuaCwgdHJlZS5oOiBEZWNsYXJlIHhtYWxsb2MgYW5kIGZyZWUgaGVyZS4KKwkKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBLZWVwIHRoZSBsYXN0IHRhcmdldCBhcm91bmQgaWYgd2UKKwlzaG91bGQgcHJlc2VydmUgc3ViZXhwcmVzc2lvbnMuCisKK1NhdCBKdW4gMjcgMDc6MTE6MjggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogU2VlIGlmIHdlIGhhdmUgYSBDT05TVF9JTlQgdGhhdCBpcyBhbHJlYWR5IGluCisJYSByZWdpc3RlciBpbiBhIHdpZGVyIG1vZGUuCisKKwkqIHJlZ2NsYXNzLmM6IE1ham9yIHJld29yayBvZiByZWdjbGFzcyBwYXNzIHRvIGRvIGEgYmV0dGVyIGpvYiBvZgorCXNldHRpbmcgdXAgcmVnaXN0ZXIgcHJlZmVyZW5jZXMgYW5kIHJlcGxhY2UgdGhlICJwcmVmZXJyZWQgb3IKKwlub3RoaW5nIiBtZXRob2Qgd2l0aCBhIGNsYXNzIHRoYXQgc2hvdWxkIGJlIHVzZWQgaWYgdGhlIHByZWZlcnJlZCAKKwljbGFzcyBjYW5ub3QgYmUgYWxsb2NhdGVkLgorCShNRU1PUllfTU9WRV9DT1NUKTogRGVmYXVsdCB2YWx1ZSBpcyA0LCBub3QgMi4KKwkobW92ZV9jb3N0LCBtYXlfbW92ZV9jb3N0KTogTmV3IGFycmF5cy4KKwkoaW5pdF9yZWdfc2V0cyk6IEluaXRpYWxpemUgdGhlbS4KKwkoc3RydWN0IGNvc3RzKTogUmVwbGFjZXMgc3RydWN0IHNhdmluZ3MuCisJKGNvc3RzKTogUmVwbGFjZXMgc2F2aW5ncy4KKwkob3BfY29zdHMpOiBOZXcgYXJyYXkuCisJKGFsdGNsYXNzKTogUmVwbGFjZXMgcHJlZmVycmVkX29yX25vdGhpbmcuCisJKHJlZ19hbHRlcm5hdGVfY2xhc3MpOiBOZXcgZnVuY3Rpb247IHJlcGxhY2VkIHJlZ19wcmVmZXJyZWRfb3Jfbm90aGluZy4KKwkocmVnY2xhc3MpOiBNYWpvciByZXdvcmsuICBVc2UgbmV3IHJlY29yZGluZyBtZXRob2RzOyBtYWtlIHR3bworCXBhc3NlcyBpZiAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zOyBhbmQgcmVmaW5lIFJFR05PX1BPSU5URVJfRkxBRworCWFuZCBsb29wX2RlcHRoIHNldHRpbmcuCisJKHJlY29yZF9yZWdfY2xhc3MpOiBOZXcgZnVuY3Rpb247IHJlcGxhY2VzIHJlZ19jbGFzc19yZWNvcmQuCisJKGNvcHlfY29zdCk6IE5ldyBmdW5jdGlvbi4KKwkocmVjb3JkX2FkZHJlc3NfcmVncyk6IE1ham9yIGNoYW5nZXMuICBOZXcgcGFyYW1ldGVycyBhbmQgc2ltcGxpZmllZAorCWFuZCBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gZm9yIGNob3NpbmcgYmFzZSB2cy4gaW5kZXggcmVncy4KKwkqIHJ0bC5oIChyZWdfYWx0ZXJuYXRlX2NsYXNzKTogRGVjbGFyZSBpdC4KKwkqIE1ha2VmaWxlLmluIChyZWdjbGFzcy5vKTogTm93IGluY2x1ZGVzIHJlbG9hZC5oIGFuZCByZWFsLmguCisJKiBmbG93LmMgKGR1bXBfZmxvd19pbmZvKTogQ2FsbCByZWdfYWx0ZXJuYXRlX2NsYXNzIGluc3RlYWQgb2YKKwlyZWdfcHJlZmVycmVkX29yX25vdGhpbmcuCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTGlrZXdpc2UuCisJKG5fb2NjdXJyZW5jZXMpOiBObyBsb25nZXIgc3RhdGljLgorCSogbG9jYWwtYWxsb2MuYzogVXNlIHJlZ2lzdGVyIGFsdGVybmF0ZSBjbGFzcyBpbnN0ZWFkIG9mIAorCXByZWZlcnJlZF9vcl9ub3RoaW5nIHVuaWZvcm1seTsgY2hhbmdlIHF0eV9wcmVmZXJyZWRfb3Jfbm90aGluZworCXRvIHF0eV9hbHRlcm5hdGVfY2xhc3MuCisJKiBnbG9iYWwtYWxsb2MuYyAoZ2xvYmFsX2FsbG9jLCByZXRyeV9nbG9iYWxfYWxsb2MpOiBDYWxsCisJcmVnX2FsdGVybmF0ZV9jbGFzcyBpbnN0ZWFkIG9mIHJlZ19wcmVmZXJyZWRfb3Jfbm90aGluZy4KKwkoZmluZF9yZWcpOiBDaGFuZ2UgQUxMX1JFR1NfUCBhcmd1bWVudCB0byBBTFRfUkVHU19QLgorCVVzZSBhbHRlcm5hdGUgcmVnaXN0ZXIgY2xhc3MgaW5zdGVhZCBvZiBBTExfUkVHUyBpZiBjYW4ndCBhbGxvY2F0ZQorCWluIHByZWZlcnJlZCBjbGFzcy4KKworCSogY2NjcC5jIChpbnN0YWxsKTogQWNjZXB0IHNlcGFyYXRlIGFyZ3VtZW50cyBmb3IgaW50ZWdlciBhbmQKKwlwb2ludGVyIGhhc2ggdmFsdWVzOyBkb24ndCBhc3N1bWUgdGhlIHNpemVzIGFyZSB0aGUgc2FtZS4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCisJKiBydGwuYyAoY29weV9ydHgsIGNvcHlfbW9zdF9ydHgpOiBBZGQgbmV3IGNhc2UgZm9yICd1Jy4KKworCSogdHJlZS5jIChtYWtlX25vZGUpOiBDbGVhciBhbGwgb2YgY29tbW9uIGFyZWEsIGluIHBhcnRpY3VsYXIsIGZsYWdzLgorCisJKiBjLXRyZWUuaCwgY3AtdHJlZS5oOiBBZGQgZGVjbGFyYXRpb24gb2YgdHJ1dGh2YWx1ZV9jb252ZXJzaW9uLgorCitTYXQgSnVuIDI3IDA2OjIxOjE4IDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kICh0eXBlIGF0dHJpYnV0ZXMpOiBEZWxldGUgdW51c2VkIG1iaXQgYW5kIG1mcCB0eXBlcy4KKwkoZmZzaTIgaW5zbik6IERlZmluZS4KKwkobmVnZGYyIGFuZCBhYnNkZjIgaW5zbnMpOiBJbXByb3ZlLgorCisJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX3Rlc3QpOiBGaXggdGhlIG1pc29yZGVyZWQgdGVzdC4gIEZhaWwgaWYgVkFSCisJaXNuJ3QgYW4gaW50ZWdlci4KKworU2F0IEp1biAyNyAwMDo1NDo0NCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IE5vICVEIGlmIExJTktfTElCR0NDX1NQRUNJQUwuCisJKiBzZXF1ZW50LmggKExJTktfTElCR0NDX1NQRUNJQUwpOiBEZWZpbmVkLgorCisJKiB2YXguaCAoUFJJTlRfT1BFUkFORCk6IEZvciBTRm1vZGUsIHVzZSAwZiwgbm90IDBkIG9yIDBnLgorCisJKiBuczMyay5oIChOUzMyS19ESVNQTEFDRU1FTlRfUCk6IENvcnJlY3QgdGhlIHJhbmdlIGxpbWl0cy4KKwkqIG5zMzJrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFJFR19PS19GT1JfSU5ERVhfUCB3YW50cyBhbiBydHguCisKK0ZyaSBKdW4gMjYgMDg6NTU6MDMgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAocmFuZ2VfdGVzdCk6IE5ldyBmdW5jdGlvbi4KKwkobWVyZ2VfY29tcG9uZW50X3JlZmVyZW5jZXMpOiBMb29rIGZvciByYW5nZSB0ZXN0cyBhcyB3ZWxsLgorCisJKiB2YS1tODhrLmg6IFNhbWUgY2hhbmdlcyBhcyBvdGhlciB2YS0qLmggZmlsZXMgYmVsb3cuICBNYWtlIHRoaXMKKwl3b3JrIHdoZW4gPHN0ZGlvLmg+IGFuZCBvdGhlcnMgYXJlIGluY2x1ZGVkIG9uIERHL1VYLgorCitGcmkgSnVuIDI2IDA4OjE3OjMzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChzYWZlX2Zyb21fcCk6IEhhbmRsZSAwIGluIFRSRUVfVkFMVUUgb2YgYSBUUkVFX0xJU1QuCisJKHN0b3JlX2NvbnN0cnVjdG9yOiBJZ25vcmUgZW1wdHkgbGlua3MgaW4gZWxlbWVudCBjaGFpbi4KKworRnJpIEp1biAyNiAwNzowNjoxOSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogRG9uJ3QgYWRkIGEgTk9QX0VYUFIgaW4gY2FzZXMKKwl3aGVyZSB3ZSBjYW4gc2ltcGx5IGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZW50aXJlIHRyZWUuCisKKwkqIGNzZS5jIChmaW5kX2Jlc3RfYWRkcik6IExvb2sgZm9yIGVxdWl2YWxlbnRzIG9mIGEgUkVHIHRoYXQgaXMKKwl0aGUgZmlyc3Qgb3BlcmFuZCBvZiBhbiBhZGRyZXNzIHRoYXQgaXMgYSBiaW5hcnkgb3BlcmF0b3Igd2hvc2UKKwlzZWNvbmQgb3BlcmFuZCBpcyBhIENPTlNUX0lOVC4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogRG9uJ3Qgc2F2ZSBhcmd1bWVudCBwb2ludGVyIGlmIGl0CisJd2lsbCBiZSBlbGltaW5hdGVkIGluIGZhdm9yIG9mIHRoZSBmcmFtZSBwb2ludGVyLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogV2hlbiB1c2luZyBkZWZpbmVfc3BsaXQgdG8gc3BsaXQgYW4KKwlpbnNuLCBmaXJzdCB0cnkgdG8gcHV0IHRoZSBwc2V1ZG8tcmVnaXN0ZXIgaW50byB0aGUgbW9kZSBvZgorCXRoZSBkZXN0aW5hdGlvbiBzaW5jZSBpdCBpcyB0aGUgbW9zdCBsaWtlbHkgdG8gYmUgdGhlIGNvcnJlY3QgbW9kZS4KKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbik6IFRyZWF0IFBMVVMgYW5kIE1JTlVTCisJdGhlIHNhbWUgd2hlbiBwYXNzaW5nIGRvd24gdGhlIGNvZGUgdG8gdGhlIG5leHQgbGV2ZWw7IGZvcgorCWNvbnNpc3RlbmN5LCBhbiBBU0hJRlQgaW5zaWRlIGVpdGhlciBnZXRzIHR1cm5lZCBpbnRvIGEgTVVMVC4KKworCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSk6IERlbGV0ZSBkZWFkCisJYXNzaWdubWVudCB3aGljaCBjYW4gc29tZXRpbWVzIHJlZmVyZW5jZSBhbiB1bmRlZmluZWQgdmFyaWFibGUuCisKKwkqIGdlbm91dHB1dC5jIChnZW5fc3BsaXQpOiBJbml0aWFsaXplIG5fYWx0ZXJuYXRpdmVzLgorCisJKiByb21wLm1kIChtb3ZkZik6IEZpeCB0eXBvIGluIG9wZXJhbmRfc3Vid29yZCBjYWxsIGluIGRlZmluZV9zcGxpdC4KKworRnJpIEp1biAyNiAwNDozODozNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2Ugc3RkYXJnIG1lY2hhbmlzbSB3b3JrIHdpdGggbGliYy4KKwkqIHZhLWhwODAwLmgsIHZhLWk4NjAuaCwgdmEtaTk2MC5oLCB2YS1taXBzLmgsIHZhLXB5ci5oLCB2YS1zcGFyYy5oKToKKwlEb24ndCBkZWZpbmUgb3IgZGVjbGFyZSB2YV9saXN0OyBkZWNsYXJlIF9fZ251Y192YV9saXN0LgorCUJ1dCBvbmx5IGRlY2xhcmUgaXQgb25jZS4KKwlEZWZpbmUgb3RoZXIgdGhpbmdzIG9ubHkgaWYgX1NUREFSR19IIG9yIF9WQVJBUkdTX0guCisJRGVjbGFyZSB2YV9lbmQgYXMgd2VsbCBhcyBkZWZpbmluZyBpdC4KKwkqIGdzdGRhcmcuaDogTGlrZXdpc2UuCisJSWYgX19uZWVkX19fdmFfbGlzdCB3YXMgZGVmaW5lZCwgdGhlbiB1bmRlZiBpdAorCWFuZCBkb24ndCBkZWZpbmUgX1NUREFSR19ILgorCUZvciBhbGwgbWFjaGluZXMsIGRlY2xhcmUgdmFfbGlzdCBmcm9tIF9fZ251Y192YV9saXN0CisJYnV0IG9ubHkgaWYgX1NUREFSR19IIGlzIGRlZmluZWQuCisKKwkqIGd2YXJhcmdzLmg6IFRlc3QgX0FOU0lfSF8sIG5vdCBfQU5TSV9ILgorCitUaHUgSnVuIDI1IDIzOjI0OjAyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbnMzMmsuYyAocHJpbnRfb3BlcmFuZCk6CisJQ2hhbmdlIE5PX0lNTUVESUFURV9QUkVGSVhfSUZfU1lNQk9MSUMgY29uZGl0aW9uYWwgdG8gI2lmZGVmLgorCisJKiBnZW5vdXRwdXQuYyAoZ2VuX3NwbGl0KTogU2V0IGQtPm5fYWx0ZXJuYXRpdmVzLgorCisJKiBNYWtlZmlsZS5pbiAodGVzdC1wcm90b2l6ZS1zaW1wbGUpOiBFeHBlY3QganVzdCA0MDAgbGluZXMuCisJKGluc3RhbGwtY29tbW9uLWhlYWRlcnMpOiBXaGVuIGNvbXBhcmluZyBzcmNkaXIgd2l0aCAuLCB1c2UgcHdkLgorCitUdWUgSnVuIDE2IDIyOjExOjEyIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGVucXVpcmUubyk6IERvbid0IGRlbGV0ZS9jb3B5IGVucXVpcmUuYywganVzdCB1c2UKKwl0aGUgY29weSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworVHVlIEp1biAyNSAyMzo1MjoyNyAxOTkyICBIb3dhcmQgQ2h1ICAoaHljQGhhbmF1bWEuanBsLm5hc2EuZ292KQorCisJKiBsaWJnY2MyLmMgKF9fYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBTVlI0IGNvZGUgb24gQWxsaWFudCBGWDI4MDAsCisJYnV0IHdpdGggQlNEIGZ1bmN0aW9uLW5hbWluZyBjb252ZW50aW9uLgorCisJKiB2YS1pODYwLmg6IFVzZSBTVlI0IGRlZmluaXRpb25zIG9mIF9fdmFfc2F2ZWRfcmVncyBhbmQgdmFfbGlzdAorCW9uIEFsbGlhbnQgRlgyODAwLgorCisJKiBmeDI4MDAuaCAoSTg2MF9SRUdfUFJFRklYLCBBU01fQ09NTUVOVF9TVEFSVCk6IERlbGV0ZWQuCisJKERCWF9OT19FWFRSQV9UQUdTLCBCU1NfQVNNX09QKTogRGVsZXRlZC4KKwkoQVNNX09VVFBVVF9ET1VCTEUsIEFTTV9PVVRQVVRfRkxPQVQpOiBEZWxldGVkLgorCShBU01fRklMRV9TVEFSVCk6IEp1c3QgY2FsbCBvdXRwdXRfZmlsZV9kaXJlY3RpdmUuCisKK1RodSBKdW4gMjUgMDY6NDk6MTUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBTdHJpcCBOT05fTFZBTFVFX0VYUFIKKwlmcm9tIHNwZWNpZmllZCBhcnJheSBpbmRleC4KKworCSogY29uZmlndXJlIChpMzg2LSotYnNkKiwgaTM4Ni0qLW1hY2gqKTogRG9uJ3Qgc2V0IHRtYWtlX2ZpbGUuCisJVGhleSB1c2VkIHRvIHVzZSB0LWxpYmMtb2suCisKKwkqIGlucHV0LmggKHN0cnVjdCBmaWxlX3N0YWNrKTogUmV2ZXJ0IHByZXYuIGNoYW5nZS4KKworVGh1IEp1biAyNSAwNjozMzo1MiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBBZGQgQ0FTRV9WQUxVRVNfVEhSRVNIT0xELgorCSogbTg4ay5oIChDQVNFX1ZBTFVFU19USFJFU0hPTEQpOiBEZWZpbmUuCisKK1RodSBKdW4gMjUgMDY6MTM6MzkgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbG93LmMgKHBsdXNfY29uc3RhbnQsIGNhc2UgUExVUyk6IFJlbW92ZSBvYnNvbGV0ZSBjb2RlOworCXVzZSByZWN1cnNpdmUgY2FsbCBpbiBjYXNlIHJlbWFpbmluZyBvcGVyYW5kIGlzIG9uZSB3ZSBoYW5kbGUuCisKK1dlZCBKdW4gMjQgMTk6MTU6MTQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBQTFVTKTogSWYgYWRkaW5nIHR3byB0aGluZ3Mgd2l0aCBubyBiaXRzCisJaW4gY29tbW9uLCBjb252ZXJ0IHRvIElPUi4KKworCSogZXhwci5jIChkb19qdW1wLCBjYXNlIEJJVF9BTkRfRVhQUiwgQ09NUE9ORU5UX1JFRik6IERvbid0IG5hcnJvdworCWNvbXBhcmlzb24gdW5sZXNzIGJ5dGUgYWNjZXNzZXMgYXJlIG5vdCBzbG93IGFuZCB3ZSBoYXZlIGEKKwljb21wYXJpc29uIGluIHRoZSBuZXcgbW9kZS4KKworV2VkIEp1biAyNCAxNDoyOTowOSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UueSAocHJpbWFyeSk6IElmIGJ1aWx0LWluIGRlY2wgaGFzIG5vdCBoYWQKKwlhbiBvZmZpY2lhbCBkZWNsYXJhdGlvbiwgcHJpbnQgd2FybmluZy4KKwkqIGMtZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uKTogU2V0IENfREVDTF9BTlRJQ0lQQVRFRCBmb3IKKwl1c2VyLXZpc2libGUgbmFtZXMuCisJKiBjLXRyZWUuaCAoQ19ERUNMX0FOVElDSVBBVEVEKTogTmV3IG1hY3JvLgorCisJKiBmaXhpbmNsdWRlczogTWFrZSBzb21lIHN5bWxpbmtzIGluIHRoZSBgbXVsdGltZWRpYScgc3ViZGlyLgorCisJKiBpMzg2LmM6IENoYW5nZSAjZXJyb3IgdG8ganVzdCBlcnJvci4KKworCSogcHJvdG9pemUuYzogTm9ybWFsaXplIGVycm9yIG1lc3NhZ2Ugc3ludGF4LgorCShwcm9jZXNzX2F1eF9pbmZvX2ZpbGUpOiBEb24ndCBkZWxldGUgLlggZmlsZSBpZiBpdCBleGlzdGVkIGJlZm9yZS4KKwkoZXhwbGljaXR5IGNvbXBhcmUgbW9kdGltZSB3aXRoIC5jIGZpbGUuCisKK1dlZCBKdW4gMjQgMTQ6MTA6MzUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5jIChzcGFyY19mcndfY29tcHV0ZV9mcmFtZV9zaXplKTogTmV3IGZ1bmN0aW9uLCBmb3IgZmxhdAorCXJlZ2lzdGVyIHdpbmRvdyBtb2RlbCBzdXBwb3J0LgorCShzcGFyY19mcndfc2F2ZV9yZXN0b3JlKTogTGlrZXdpc2UuCisJKHNwYXJjX2Zyd19vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBMaWtld2lzZS4KKwkoc3BhcmNfZnJ3X291dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgorCShzcGFyY19mcndfZXBpbG9ndWVfZGVsYXlfc2xvdHMpOiBMaWtld2lzZS4KKwkoc3BhcmNfZnJ3X2VsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IExpa2V3aXNlLgorCitUdWUgSnVuIDIzIDIyOjM2OjEyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChyZXNjYW4pOiBSZWNvZ25pemUgIyBvbmx5IHdoZW4gcmVhZGluZyBkaXJlY3RseSBmcm9tIGEgZmlsZS4KKworCSogaW5wdXQuaCAoc3RydWN0IGZpbGVfc3RhY2spOiBBZGQgbWVtYmVyIGBmZCcuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ25vX2ZpcnN0X3VpZCwgcmVnbm9fbGFzdF91aWQpOiBNYWtlIGVsZW1lbnRzIGludHMuCisJKHJlZ19zY2FuKTogQWxsb2NhdGUgYW5kIGNsZWFyIHRoZW0gYXMgaW50cy4KKwkqIHJlZ3MuaDogRml4IHRoZSBkZWNsYXJhdGlvbnMuCisKKwkqIENyZWF0ZSBkcml2ZXIgZXhlY3V0YWJsZSB3aXRoIG5hbWUgeGdjYzsgcmVuYW1lIHRvIGdjYyBpbiBpbnN0YWxsaW5nLgorCSh4Z2NjKTogVGFyZ2V0IHJlbmFtZWQuCisJKEdDQ19GT1JfVEFSR0VULCBHQ0NfUEFTU0VTLCBzdGFydC5lbmNhcCwgc3BlY3MsIGdjYy1jcm9zcyk6CisJKGluc3RhbGwtY29tbW9uLCBpbnN0YWxsLWNvbGxlY3QyKTogUmVuYW1lIGluIGRlcHMsIGNvbW1hbmRzIG9yIHZhbHVlLgorCShpbnN0YWxsLWNvbGxlY3QyKTogQWx3YXlzIGdldCBkcml2ZXIgZnJvbSB4Z2NjIHdoZXRoZXIgY3Jvc3Mgb3Igbm90LgorCitUdWUgSnVuIDIzIDAwOjAwOjM1IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGNzLndpZGVuZXIuZWR1KQorCisJKiB0b3BsZXYuYyAoc3RyaXBfb2ZmX2VuZGluZyk6IEFsc28gc3RyaXAgb2ZmIC5DIGFuZCAuY3h4LgorCitUdWUgSnVuIDIzIDE4OjU4OjQzIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogRG9uJ3QgaWdub3JlIG1vZGUgb2YgZmlyc3Qgb3BlcmFuZAorCW9mIGEgTUFUQ0hfT1BFUkFORCBvciBNQVRDSF9EVVBfT1AgcnRsLgorCSogc3BhcmMubWQgKHNjYyk6IFVzZSBub292X2NvbXBhcmVfb3AgaW5zdGVhZCBvZiBub3JtYWxfY29tcGFyZV9vcC4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogV2hlbiBub3Qgb3B0aW1pemluZywgZG9uJ3QKKwlwdXQgc3RhdGljIGNoYWluIHBvaW50ZXIgaW4gYSBwc2V1ZG8gcmVnaXN0ZXIuCisKKwkqIHNwYXJjLmMgKHByaW50X29wZXJhbmQpOiBGb3IgJyonLCBvbmx5IGFubnVsIGJyYW5jaCBpZgorCW9wdGltaXppbmcsIHRvIGF2b2lkIGRieCBidWcuICBBZGQgJygnIHRvIGhhbmRsZSB1bm9wdGltaXplZCBjYXNlLgorCSogc3BhcmMuaCAoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogQWRkICcoJy4KKwkqIHNwYXJjLm1kIChqdW1wKTogQWRkICclKCcgdG8gcGF0dGVybi4KKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBDaGFuZ2UgdHlwZSBvZiB2b2lkIHBhcmFtZXRlciB0bworCWVycm9yX21hcmtfbm9kZS4KKworCSogY29uZmlndXJlIChtNjhrLSotc3lzdjQqKTogVXNlIHhtLW02OGt2Lmggbm90IHhtLW02OGt2NC5oLgorCisJKiBjb25maWd1cmU6IEFkZCAtcHJlZml4IG9wdGlvbi4KKworCSogdmF4LmMgKHNwbGl0X3F1YWR3b3JkX29wZXJhbmRzKTogRGVjbGFyZSBwYXJhbWF0ZXIgbi4KKworCSogaTk2MC5oIChXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBBZGQgLWF1eC1pbmZvLgorCisJKiB4Y29mZm91dC5jICh4Y29mZm91dF9kZWNsYXJlX2Z1bmN0aW9uKTogQ2FzdCBhbGxvY2EgcmVzdWx0IHRvIGNoYXIgKi4KKworCSogYy1jb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IERvbid0IHBhc3MgdHJ1bmNhdGlvbiBwYXN0CisJc2hpZnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBiZWluZyB0cnVuY2F0ZWQgdG8uCisKK1R1ZSBKdW4gMjMgMDY6MTU6NDcgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBUcnkgd2lkZW5pbmcgYmVmb3JlIHRyeWluZworCXRvIG1ha2UgYSBsaWJyYXJ5IGNhbGwuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IEFkZCBtaXNzaW5nIGVtaXRfcXVldWUgY2FsbCBpbiB0YWlsCisJcmVjdXJzaW9uIGNhc2UuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBBZGQgU0lHTl9FWFRFTkQgYW5kCisJWkVST19FWFRFTkQgdG8gdGhlIG9wZXJhdGlvbnMgd2UgaGFuZGxlIGZvciB3aWRlIHJlc3VsdHMuCisKKwkqIGV4cHIuYyAoZW1pdF9ibG9ja19tb3ZlKTogQ29udmVydCBzaXplIG9wZXJhbmQgdG8gbW9kZSB0aGF0IHdpbGwKKwliZSBwYXNzZWQgdG8gZW1pdF9saWJyYXJ5X2NhbGwuCisKK1R1ZSBKdW4gMjMgMDA6NDE6MDMgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAc2hhZG93KQorCisJKiBvYmpjLXBhcnNlLnkgKHN0bXQpOiBGaXggbWlzcGVsbGluZyBmb3IgImxhYmVsIiBpbiBtZXNzYWdlLgorCisJKiBjY2NwLmM6IChkZXBzX2ZpbGUsIHBpcGVfY2xvc2VkKTogRGVsZXRlZC4KKwkobWFpbik6IERvIG5vdCBvcGVuIGRlcHNfZmlsZSB1bnRpbCBuZWVkZWQuCisJQ2hlY2sgZXJyb3Igc3RhdHVzIG9mIGRlcF9zdHJlYW0gYW5kIHN0ZG91dCBtb3JlIGNhcmVmdWxseS4KKworVHVlIEp1biAyMyAwMDoyMTowNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChwcm90b2l6ZS4xLCB1bnByb3RvaXplLjEpOiBSdWxlcyBkZWxldGVkLgorCShpbnN0YWxsLW1hbiwgcHJvdG8sIHJlYWxjbGVhbik6IERvbid0IG9wZXJhdGUgb24gdGhlbS4KKwkqIHByb3RvLW1hbjogRmlsZSBkZWxldGVkLgorCisJKiBwcm90b2l6ZS5jIChtYWluKTogU3VwcG9ydCAtdiBhcyBhbGlhcyBmb3IgLVYuCisKK01vbiBKdW4gMjIgMjE6NTA6MDEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoY29tcGFyZSwgY29tcGFyZTMpOiBEaXNjYXJkIGVycm9yIG91dHB1dCBmcm9tIHNlY29uZAorCXRhaWwuICBJZiBpdCBmYWlscywgZG9uJ3QgY29tcGFyZSB0aGF0IGZpbGUuCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1wcm90byk6IE1vdmUgdGhlIHRvdWNoIGNvbW1hbmQgbGFzdC4KKworCSogY2NjcC5jIChmaW5jbHVkZSk6IFVzZSB4bWFsbG9jLCBub3QgYWxsb2NhLCBmb3IgZmlsZSBjb250ZW50cy4KKworCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IEZvciBhIGNhc2UgcmFuZ2UsCisJY29uc2lkZXIgYWxsIHZhbHVlcyBpbiB0aGUgcmFuZ2UgYXMgaGFuZGxlZC4gIEFsc28sIGNoZWNrIGJvdGggZW5kcworCWZvciBiZWluZyBpbiB0aGUgZW51bWVyYXRpb24uCisKKwkqIG5zMzJrLmggKE5TMzJLX0RJU1BMQUNFTUVOVF9QKTogV2lkZSBkaXNwbGFjZW1lbnQgcmFuZ2UgYXBwbGllcyB0bworCWFsbCBtb2RlbHMuCisKK01vbiBKdW4gMjIgMjA6Mjk6NDcgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBleHByLmggKCpfbGliZnVuYyk6ICBBZGRlZCBtaXNzaW5nIGV4dGVybiBkZWNsYXJhdGlvbnMgb2YgbGliZnVuY3MKKwl0byBoYW5kbGUgb3BlcmF0aW9ucyBvbi9mb3IgVEZtb2RlIGFuZCBYRm1vZGUgb3BlcmFuZHMuCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6ICBBZGRlZCBtaXNzaW5nIGNvZGUgdG8gaGFuZGxlIG1vdmVzICh3aXRoCisJY29udmVyc2lvbikgZnJvbS90byBURm1vZGUgYW5kIFhGbW9kZSBvcGVyYW5kcy4KKwkqIG9wdGFicy5jICgqX2xpYmZ1bmNzKTogIEFkZGVkIG1pc3NpbmcgZGVmaW5pdGlvbnMgb2YgbGliZnVuY3MKKyAgICAgICAgdG8gaGFuZGxlIG9wZXJhdGlvbnMgb24vZm9yIFRGbW9kZSBhbmQgWEZtb2RlIG9wZXJhbmRzLgorCShlbWl0X2Zsb2F0X2xpYl9jbXApOiAgQWRkZWQgbWlzc2luZyBjb2RlIHRvIGhhbmRsZSBYRm1vZGUgYW5kIFRGbW9kZQorCWNvbXBhcmlzb25zLgorCShpbml0X2ZpeHRhYik6ICBBZGRlZCBtaXNzaW5nIGNvZGUgdG8gaGFuZGxlIGZpeGluZyAoYW5kIHRydW5jJ2luZykKKwlvZiBYRm1vZGUgYW5kIFRGbW9kZSBvcGVyYW5kcyB0byB2YXJpb3VzIHNpemVzIG9mIGludHMuCisJKGluaXRfZmxvYXR0YWIpOiAgTGlrZXdpc2UsIGJ1dCBmb3IgImZsb2F0IiBvcGVyYXRpb25zIGZyb20gaW50cyB0bworCWVpdGhlciBYRm1vZGUgb3IgVEZtb2RlLgorCShleHBhbmRfZmxvYXQpOiAgTGlrZXdpc2UuCisJKGV4cGFuZF9maXgpOiAgTGlrZXdpc2UuCisJKGluaXRfbGliZnVuY3MsIGluaXRfaW50ZWdyYWxfbGliZnVuY3MsIGluaXRfZmxvYXRpbmdfbGliZnVuY3MpOiBOZXcKKwlmdW5jdGlvbnMgYWRkZWQgdG8gaW5pdGlhbGl6ZSB3aG9sZSBodW5rcyBvZiB2YXJpb3VzIG9wdGFicyB3aXRoCisJYXBwcm9wcmlhdGUgYGxpYmZ1bmMnIGZpZWxkIHZhbHVlcy4KKwkoaW5pdF9vcHRhYnMpOiAgVXNlIGBpbml0X2ludGVncmFsX2xpYmZ1bmNzJyBvciBgaW5pdF9mbG9hdGluZ19saWJmdW5jcycKKwl3aGVyZXZlciBhIGdyb3VwIG9mIGNvbnNlY3V0aXZlIG9wdGFiIGVudHJpZXMgbmVlZCB0byBhbGwgaGF2ZSB0aGVpcgorCWBsaWJmdW5jJyBmaWVsZHMgaW5pdGlhbGl6ZWQuCisJKGluaXRfb3B0YWJzKTogIGFkZGVkIG1pc3NpbmcgY29kZSB0byBoYW5kbGUgYWxsIG9wZXJhdGlvbnMgb24vb2YKKwlYRm1vZGUgYW5kIFRGbW9kZSBvcGVyYW5kcy4KKworTW9uIEp1biAyMiAwNjo0MDozMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuaCAoTUVNT1JZX01PVkVfQ09TVCk6IEluY3JlYXNlIHRvIDYsIGZyb20gNC4KKwkoZW51bSByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTKTogQWRkIG5ldyByZWcKKwljbGFzc2VzIFNQRUNfT1JfR0VOX1JFR1MgYW5kIE5PTl9GTE9BVF9SRUdTLgorCisJKiByczYwMDAuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IERvbid0IHVzZSBpbmRpcmVjdF9vcGVyYW5kOyBpbnN0ZWFkCisJY2hlY2sgZXhwbGljaXRseS4KKworCSogcnM2MDAwLm1kIChkaXZtb2QpOiBVc2UgIjIiIGNvbnN0cmFpbnQgaW5zdGVhZCBvZiB1c2luZyAicSIKKwl0d2ljZS4KKwkodGFibGVqdW1wKTogQ29uc3RyYWludCBvZiAiciIgc2hvdWxkIGJlICJsIi4KKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0KTogU2hvdyB0aGF0IGFsbCBwb2ludGVycyBpbnRvIHRoZSBmcmFtZSBhcmUKKwlwb2ludGVyIHJlZ2lzdGVycy4KKworTW9uIEp1biAyMiAwNDoyMDoyNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZhLXNwYXJjLmggKHZhX2FyZyk6IFJlbmFtZSBsb2NhbCBpZGVudGlmaWVycyB0byBzdGFydCB3aXRoIF9fLgorCitTdW4gSnVuIDIxIDE0OjUxOjQyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChyZWFsX3ZhbHVlX3RydW5jYXRlKTogTmV3IGZ1bmN0aW9uLgorCUFsbCBjYWxscyB0byBSRUFMX1ZBTFVFX1RSVU5DQVRFIGNoYW5nZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogUmVjb3JkIHdoaWNoIGluc24gYXR0YWlucyBlYWNoIG1heGltdW0gbmVlZC4KKwlJZiBjYW4ndCBmaW5kIGEgc3BpbGwsIGNhbGwgc3BpbGxfZmFpbHVyZSBhbmQgcmV0dXJuIDEuCisJKHNwaWxsX2ZhaWx1cmUpOiBOZXcgc3Vicm91dGluZS4KKwkqIGdsb2JhbC1hbGxvYy5jIChnbG9iYWxfYWxsb2MpOiBSZXR1cm4gMSBpZiByZWxvYWQgcmV0dXJuZWQgMS4KKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogSWYgdGhleSByZXR1cm4gbm9uemVybywgZ2l2ZSB1cAorCWNvbXBpbGluZyB0aGlzIGZ1bmN0aW9uLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTmV2ZXIgd2FybiBpZiByZWRlY2xhcmluZworCWEgcHJlZGVjbGFyZWQgZnVuY3Rpb24uICBVc2UgdGhlIG5ldyBkZWNsYXJhdGlvbidzIHR5cGVzCisJYnV0IGtlZXAgYW55IHByZWRlY2xhcmVkIHZvbGF0aWxlIGZsYWcuCisJSWYgcmVkZWNsYXJpbmcgYnVpbHRpbiBmdW5jdGlvbiwgdXNlIG5ldyBkZWNsYXJhdGlvbidzIHR5cGUuCisJSWYgYW4gb2xkIGRlY2wgYmVjb21lcyB2b2xhdGlsZSwgZml4IHRoZSBERUNMX1JUTC4KKwkqIHZhcmFzbS5jIChtYWtlX3Zhcl92b2xhdGlsZSk6IE5ldyBmdW5jdGlvbi4KKworCSogY29uZmlndXJlIChtaXBzLXNvbnktYnNkKTogVXNlIHhtLW1pcHMuaC4KKwkqIHhtLW1pcHNic2RuLmg6IEZpbGUgZGVsZXRlZC4KKworCSogcHJvdG9pemUuYyAocHJvY2Vzc19hdXhfaW5mb19maWxlKTogU2ltcGxpZnkgbG9naWMgZm9yIGNhbGxpbmcKKwlnZW5fYXV4X2luZm9fZmlsZS4gIEdldCByaWQgb2YgdGhlIGxhYmVsIGByZXRyeScuCisKKwkqIG02OGtzZ3MuaCAoQVNNX09VVFBVVF9SRUdfUFVTSCwgQVNNX09VVFBVVF9SRUdfUE9QKToKKwlPdmVycmlkZSBmb3Igc2dzIHN5bnRheC4KKworU3VuIEp1biAyMSAxNDowNjo0MSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjcy53aWRlbmVyLmVkdSkKKworCSogdmEtc3BhcmMuaCAodmFfYXJnKTogVXNlIGEgY2hhcmFjdGVyIGFycmF5IG9mIHNpemUgVFlQRSBmb3IKKwlgZCcgaW4gdGhlIHVuaW9uLCBhbmQgcmV0dXJuIGl0cyBkZXJlZmVyZW5jZSBhcyBUWVBFLgorCitTdW4gSnVuIDIxIDE0OjA0OjM2IDE5OTIgIFdpbHNvbiBUaWVuICAod3RpZW4gYXQgdXJiYW5hLm1jZC5tb3QuY29tKQorCisJKiBtNjhrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcykgW01PVE9ST0xBXTogVXNlIC53IGFuZCAubCwgbm90IDp3LCA6bC4KKworU2F0IEp1biAyMCAwNjozMjoxMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChnZXRfYmVzdF9tb2RlKTogSWYgU0xPV19CWVRFX0FDQ0VTUyBpcyB0cnVlLCByZXR1cm4KKwl3aWRlc3QgbW9kZSAoYnV0IG5vIHdpZGVyIHRoYW4gVU5JVFNfUEVSX1dPUkQpIHRoYXQgbWVldHMgYWxsCisJdGhlIGNvbmRpdGlvbnMuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogQWx3YXlzIGVuc3VyZSB3ZSBoYXZlIGEgU1VCUkVHIHdoZW4KKwl3ZSBtYWtlIGEgU1RSSUNUX0xPV19QQVJULgorCisJKiB2YXJhc20uYyAoY29uc3RfaGFzaCwgY29tcGFyZV9jb25zdGFudF8xLCByZWNvcmRfY29uc3RhbnRfMSk6CisJSGFuZGxlIGNhc2Ugd2hlbiBUUkVFX1ZBTFVFIG9mIGEgY29uc3RydWN0b3IgaXMgemVyby4KKwkob3V0cHV0X2NvbnN0YW50KTogVXNlIENPTlNUUlVDVE9SX0VMVFMuCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IE1lbW9yeSBpcyBub3QgaW52YWxpZGF0ZWQgYnkgYSBjb25zdGFudAorCXN1YnJvdXRpbmUgY2FsbC4KKwkoZGVsZXRlX2RlYWRfZnJvbV9jc2UpOiBDb3JyZWN0bHkgY2hlY2sgZm9yIGJlaW5nIHdpdGhpbiBhCisJbGliY2FsbCBibG9jay4KKworCSogY3NlLmMgKGNhbm9uX3JlZyk6IENhbGwgdmFsaWRhdGVfY2hhbmdlIHdpdGggSU5fR1JPVVAgZXF1YWwgdG8gMS4KKwkoY3NlX2luc24pOiBDYWxsIGFwcGx5X2NoYW5nZV9ncm91cCBhZnRlciBjYW5vbl9yZWcuCisJV2hlbiBjYW5vbmljYWxpemluZywgY2FsbCB2YWxpZGF0ZV9jaGFuZ2Ugd2l0aCBJTl9HUk9VUCBlcXVhbCB0bworCW9uZSBhbmQgYWxzbyBjYWxsIHdoZW4gY2Fub25fcmVnIHdvdWxkLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBzaGlmdCBjYXNlcyk6IFVzZSBmb3JjZV90b19tb2RlIGluCisJU0hJRlRfQ09VTlRfVFJVTkNBVEVEIGNhc2UuCisKKwkqIHJzNjAwMC5tZDogQWRkIG5ldyBwYXR0ZXJuIHRvIHNwbGl0IG1vdmUgb2YgbGFyZ2UgY29uc3RhbnQuCisKKwkqIGNzZS5jIChkZWxldGVfZGVhZF9mcm9tX2NzZSk6IFJlYWxseSBkZWxldGUgaW5zbiBpbnN0ZWFkIG9mIAorCXR1cm5pbmcgaXQgaW50byBhIE5PVEUuCisKKwkqIHJvbXAubWQgKHNoaWZ0IHBhdHRlcm5zKTogVXNlIFFJbW9kZSBmb3IgY291bnQgb3BlcmFuZC4KKworU2F0IEp1biAyMCAwNjozMToyMSAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogYTI5ay5tZCAoc3RvcmVoaW5od3cpOiBVc2UgaW5odyBub3QgaW5ieXRlLgorCitUaHUgSnVuIDE4IDE2OjAxOjU2IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHByb3RvaXplLmMgKFdJRkVYSVRFRCwgV0VYSVRTVEFUVVMpOiBEZWxldGUgdW51c2VkIG1hY3Jvcy4KKworCSogY29tYmluZS5jIChzdWJzdCk6IElmIGNvbXBhcmlzb24gb3BlcmF0b3IgaGFzIGZsb2F0aW5nLXBvaW50CisJcmVzdWx0LCBhZGp1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uCisJYWNjb3JkaW5nbHkuCisJKiBpbnRlZ3JhdGUuYyAoc3Vic3RfY29uc3RhbnRzKTogTGlrZXdpc2UuCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBMaWtld2lzZS4KKwkqIGNzZS5jIChmb2xkX3J0eCk6IExpa2V3aXNlLgorCVdoZW4gcmV0dXJuaW5nIFRSVUUgb3IgRkFMU0UsIGhhbmRsZSBjb21wYXJpc29ucyByZXR1cm5pbmcKKwlmbG9hdGluZy1wb2ludC4KKwkoZmluZF9jb21wYXJpc29uX2FyZ3MpOiBIYW5kbGUgY29tcGFyaXNvbnMgcmV0dXJuaW5nIEZQIHZhbHVlczsKKwlvbmx5IGxvb2sgYXQgU1RPUkVfRkxBR19WQUxVRSBmb3IgY29tcGFyaXNvbnMgcmV0dXJuaW5nIGludGVnZXJzLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lLCBzdWJzdCk6IFBhc3MgYm90aCBjb21wYXJpc29uIGFyZ3VtZW50cworCXRvIFNFTEVDVF9DQ19NT0RFLgorCSogaTM4Ni5oLCBpOTYwLmgsIGk5NjAuYywgbWlwcy5oLCBwYS5oLCBwYS5jLCByczYwMDAuaDoKKwlBZGQgc2Vjb25kIGFyZ3VtZW50IHRvIFNFTEVDVF9DQ19NT0RFLgorCSogc3BhcmMuaCwgc3BhcmMuYzogTGlrZXdpc2UuCisKKwkqIGNzZS5jIChpbnNlcnRfcmVncyk6IE1ha2UgYSBxdWFudGl0eSBmb3IgdGhlIHJlZ2lzdGVyIGluIGEgCisJU1VCUkVHIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUuCisJKGZvbGRfcnR4LCBjYXNlIFNVQlJFRyk6IEFsd2F5cyB0cnkgdG8gZmluZCBhIGNvbnN0YW50IGVxdWl2YWxlbnQKKwlmb3IgYSBTVUJSRUc7IHRyeSBmb3IgQ09OU1RfRE9VQkxFIGFzIHdlbGwuCisJKGNzZV9pbnNuKTogQ2FsbCBpbnNlcnRfcmVncyBvbiBERVNUIGlmIGl0IGlzIGEgU1VCUkVHLgorCitUaHUgSnVuIDE4IDE1OjAxOjI5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAYWxiZXJ0LmdudS5haS5taXQuZWR1KQorCisJKiBjKys6IEFsbG93IGZvciBiZXR0ZXIgcXVvdGluZyBhbmQgLXYgaGFuZGxpbmcuCisKK1RodSBKdW4gMTggMTQ6NDk6MjAgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKyAgICBGb3IgUk1TOgorCSogdmFyYXNtLmM6IERlY2xhcmUgdGV4dF9zZWN0aW9uIGFuZCByZWFkb25seV9kYXRhX3NlY3Rpb24uCisKKwkqIGRweDIuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19IQVZFXzY4ODgxX18gdW5sZXNzIC1tc29mdC1mbG9hdC4KKwlEUFgvMiBtYWNoaW5lcyBhbGwgaGF2ZSBhIDY4ODgyLgorCisJKiB4LWkzODZzY28gKFJDQ0ZMQUdTKTogVXNlIC1ETlVMTD0wIHRvIGF2b2lkIHN1dXJpb3VzIHdhcm5pbmdzCisJZnJvbSByY2MuCisKKwkqIHNlcTM4Ni5oIChTSVpFX1RZUEUpOiBUaGUgU2VxdWVudCBydW5uaW5nIER5bml4IHVzZXMgaW50IGZvciBzaXplX3QuCisKK1RodSBKdW4gMTggMTQ6MzY6NDEgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BhbGJlcnQuZ251LmFpLm1pdC5lZHUpCisKKwlNZXJnZSBpbiBDeWdudXMgc291cmNlcy4uLgorCisJRnJpIEp1biAgNSAxNTowMDo1NSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBXaGVuIGNhc3RpbmcsIHByb3BhZ2F0ZSBjb25zdCduZXNzCisJZnJvbSBjYXN0IHR5cGUuICBXaGVuIGNhc3RpbmcgdG8gYSByZWZlcmVuY2UgdG8gVCwgcmVhbGx5IGp1c3QKKwljYXN0IHRvIFQuCisKKwkqIGNwLWN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBNYWtlIGEgY29weSBvZiBhIG5vZGUgYmVmb3JlCisJY2hhbmdpbmcgaXQuICBPbmx5IHByb3BhZ2F0ZSB0aGUgY29uc3QgYml0IGlmIHdlIGFyZSBub3QKKwlzdWJ2ZXJ0aW5nIGl0LgorCisJRnJpIEp1biAgNSAxNDozNjoxOSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBXaGVuIGNhc3RpbmcgYXdheSBjb25zdCBvbgorCXJlZmVyZW5jZXMsIGRvIG5vdCByZXBvcnQgYW4gZXJyb3IuCisKKwlGcmkgSnVuICA1IDEzOjI2OjExIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChidWlsZF9uZXcpOiBIYW5kbGUgbmV3IHBsYWNlbWVudCB3aXRoIGFycmF5cy4KKworCVRodSBKdW4gIDQgMDg6MjY6NDQgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoY29tcHV0ZV92aXNpYmlsaXR5KTogREVSSVZFRF9GUk9NX1AgaGFkIGl0cworCWFyZ3VtZW50cyByZXZlcnNlZCwgc3dpdGNoZWQgdGhlbSB0byBiZSBpbiB0aGUgcmlnaHQgb3JkZXIuCisJRml4ZXMgdmlzaWJpbGl0eSBvbiBwcm90ZWN0ZWQgbWVtYmVycy4KKworCVdlZCBKdW4gIDMgMTQ6NDU6NDAgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55ICh1bmFyeV9leHByKTogTWFrZSBpdCBpbGxlZ2FsIHRvIHVzZSBkZWxldGUgb24KKwlhIHBvaW50ZXIgdG8gYSBjb25zdCBvYmplY3QuICBXaXRoIGhlbHAgZnJvbSBCcmVuZGFuIEtlaG9lLgorCisJV2VkIEp1biAgMyAxMzoyNToyNiAxOTkyICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKKworCSogY3AtcGFyc2UueSAodGVtcGxhdGVfaW5zdGFudGlhdGVfb25jZSk6IFNldAorCUNMQVNTVFlQRV9HT1RfU0VNSUNPTE9OIHRvIGVsaW1pbmF0ZSBtZXNzYWdlcyBhYm91dCBtaXNzaW5nCisJc2VtaWNvbG9ucy4KKworCSogY3AtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IERvbid0IGVtaXQgZXJyb3IgbWVzc2FnZSBmb3IgbWlzc2luZworCXNlbWljb2xvbiBhZnRlciBjbGFzcyBkZWNsOyB0aGF0IHN5bnRheCAoZGVjbGFyaW5nIGJvdGggY2xhc3MgYW5kCisJZnVuY3Rpb24gcmV0dXJuaW5nIHRoYXQgdHlwZSkgc2hvdWxkIGJlIGxlZ2FsLiAgRG8gZW1pdCBhIHdhcm5pbmcgaWYKKwlpdCdzIG5vdCBhbiBhbm9ueW1vdXMgbmFtZS4KKworCU1vbiBKdW4gIDEgMTg6MDg6MDkgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJU2F0IE1heSAzMCAxNTozODo1NCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjcy53aWRlbmVyLmVkdSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGFsbG93IG1haW4gdG8gYmUgc3RhdGljLgorCisJTW9uIEp1biAgMSAxNzo1MjoyNCAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwlTYXQgTWF5IDMwIDE1OjM4OjU0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGNzLndpZGVuZXIuZWR1KQorCisJKiBjcC1kZWNsLmMgKHBvcGxldmVsKTogVXNlIERFQ0xfSU5JVElBTCB0byBkZXRlY3QgdW5kZWYgbGFiZWwKKwlpbnN0ZWFkIG9mIERFQ0xfU09VUkNFX0xJTkUuCisKKwlNb24gSnVuICAxIDE3OjIyOjU0IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAodW5hcnlfZXhwcik6IERvbid0IGFsbG93IG9sZCBwbGFjZW1lbnQgc3ludGF4KHdpdGgge30pCisJbm9yIGR5bmFtaWMgd2l0aCBuZXcgKHdpdGggKCkpIG5ldyBwbGFjZW1lbnQgc3ludGF4LiAgQ29tcGxldGVzIE1heSAyNworCWZpeC4KKworCU1vbiBKdW4gIDEgMTM6NTc6MjggMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChkaWdlc3RfaW5pdCk6IFRyYWlsaW5nICdcMCcgaXMgbmV2ZXIgaWdub3JlZCBpbgorCWluaXRpYWxpemF0aW9ucyB1c2luZyBzdHJpbmdzIGluIEFOU0kgZHJhZnQgQysrIHVubGlrZSBBTlNJIEMuCisKKwlNb24gSnVuICAxIDA3OjE4OjEzIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBSZS1maXggTWF5IDEyIGNoYW5nZSByZWdhcmRpbmcgREVDTF9DT05URVhULgorCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEdvIGJhY2sgdG8gdXNpbmcgREVDTF9DT05URVhUCisJaW5zdGVhZCBvZiBERUNMX0NMQVNTX0NPTlRFWFQuICBERUNMX0NPTlRFWFQgc2F5cyB3aGVuIGEgZnVuY3Rpb24KKwl3YXMgZmlyc3QgZGVjbGFyZWQgdmlydHVhbCBpbiBhIGNsYXNzLCB3aGljaCBpcyBuZWVkZWQgaW5mb3JtYXRpb24KKwlpbiBjYXNlIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGNvbWVzIGZyb20gYSB2aXJ0dWFsIGJhc2VjbGFzcyAoYmVjYXVzZQorCXRoZSBkZXJpdmVkIGNsYXNzIHdvbid0IGhhdmUgYSB2dGFibGUgZW50cnkgZm9yIHRoYXQgZnVuY3Rpb24gKGlmIGl0CisJaGFzIGEgdnRhYmxlIGF0IGFsbCEpKS4KKworCVdlZCBNYXkgMjcgMTc6MDU6NTAgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55ICh1bmFyeV9leHByKTogSGFuZGxlIG5ldyBwbGFjZW1lbnQgc3ludGF4LCBkZXN1cHBvcnQKKwl0aGUgb2xkIHBsYWNlbWVudCBzeW50YXggd2l0aCBhIHBlZHdhcm4uCisKKwlUdWUgTWF5IDI2IDE3OjMwOjI4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCVRodSBNYXkgMjEgMTc6MTM6MzggMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tfZW51bV9kZWNscyk6IEFsbG93IHJlZmVyZW5jZSB0byBuZXN0ZWQgZW51bXMgZnJvbQorCW90aGVyIGNsYXNzZXMgZm9yIE5JQ0hMLgorCisJVHVlIE1heSAyNiAxNTozMTozMCAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLSouW2NoeV06IEFsd2F5cyBpbmNsdWRlICJhc3NlcnQuaCIgYW5kIG5vdCA8YXNzZXJ0Lmg+IHRvCisJYmUgY29uc2lzdGVudC4KKworCVR1ZSBNYXkgMjYgMTA6MDc6MDIgMTk5MiAgTWlrZSBTdHVtcCAgKG1ycyBhdCBjeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChyZXR1cm5faW5pdCk6IEZpeCBzaW1wbGUgdHlwbyB0aGF0IGNhdXNlZCAnPScKKwlpbml0aWFsaXplZCBuYW1lZCByZXR1cm4gdmFsdWVzIHRvIGZhaWwuCisKKwlNb24gTWF5IDI1IDExOjQyOjE4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoY29tcG9uZW50X2RlY2wpOiBIYW5kbGUgYW5vbnltb3VzIHVuaW9ucyBhcyBiZWZvcmUsCisJZXhjZXB0IGNoZWNrIHRvIG1ha2Ugc3VyZSBpdCBpcyByZWFsbHkgYW4gYW5vbnltb3VzIHVuaW9uLgorCisJU2F0IE1heSAyMyAyMzozNzozOCAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IERvbid0IGNvcmUgZHVtcCBvbiBlcnJvbmVvdXMgaW5wdXQuCisKKwlTYXQgTWF5IDIzIDIyOjA0OjMxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNfZXhwYW5kX3N0YXJ0X2Nhc2UpOiBidWlsZF90eXBlX2NvbnZlcnNpb24gY2FuCisJcmV0dXJuIGEgTlVMTF9UUkVFLCBzbyBkb24ndCB0cnkgYW5kIGZpbmQgYSBjb2RlIG9yIHR5cGUgb2YgaXQuCisKKwlXZWQgTWF5IDIwIDA5OjA5OjA4IDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgREVDTF9DTEFTU19DT05URVhULCBub3QKKwlERUNMX0NPTlRFWFQgdG8gZmluZCB0aGUgY2xhc3MgaW4gd2hpY2ggRlVOQ1RJT04gd2FzIGRlY2xhcmVkIChmb3IKKwlub24tdmlydHVhbCBjYWxscykuCisKKwlUdWUgTWF5IDE5IDAyOjA4OjM5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoY29tcG9uZW50X2RlY2wpOiBSZW1vdmUgc29tZSBib2d1cyBjb2RlIHRoYXQKKwlwcmV2ZW50cyBlbXB0eSBuZXN0ZWQgdW5pb24gZGVmaW5pdGlvbnMgZnJvbSBjb21waWxpbmcuCisKKwlUdWUgTWF5IDE5IDAxOjA4OjIzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZm5kZWNsKTogUHJvcGFnYXRlIHZvbGF0aWxlIGZyb20gdHlwZSBvZgorCWZ1bmN0aW9uIG91dCB0byB0aGUgZGVjbCBmb3IgdGhlIGZ1bmN0aW9uLgorCisJTW9uIE1heSAxOCAxNzoxOTozOSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoZ2V0X2JpbmZvKTogU2luY2UgdW5pb25zIGNhbm5vdCBwYXJ0aWNpcGF0ZSBpbgorCWluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcHMsIHJldHVybiAwIGluc3RlYWQgb2YgYWJvcnRpbmcuCisKKwlGcmkgTWF5IDE1IDEzOjM3OjQwIDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAodGVtcGxhdGVfdHlwZV9uYW1lKTogSGFuZGxlCisJdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgdGFzayB7IGZyaWVuZCB0YXNrPFQ+KiBwcmVlbXB0KHRhc2s8VD4qKTsgfTsKKwlzeW50YXguCisKKwkqIGNwLXB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERpdHRvLgorCisJVGh1IE1heSAxNCAyMjo1NDoxNyAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IERvbid0IHdhcm4gYWJvdXQgbm9uLXZpcnR1YWwKKwlkZXN0cnVjdG9ycyB1bmxlc3MgdGhlIHVzZXIgYXNrcyB3aXRoIC1XYWxsLgorCisJVGh1IE1heSAxNCAyMjozODo1NCAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGUyLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IGV4cCBtYXkgYmUgYW4gZXJyb3JfbWFya19ub2RlLAorCWRvbid0IGNyYXNoIHdoZW4gaXQgaXMuCisKKwlUaHUgTWF5IDE0IDE4OjU2OjI2IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChoYWNrX2luY29tcGxldGVfc3RydWN0dXJlcyk6IFRlc3QgZm9yIHVuZGVyZmxvdworCWJlZm9yZSBkZWNyZWFtZW50aW5nIG5faW5jb21wbGV0ZSBpbiBjdXJyZW50X2JpbmRpbmdfbGV2ZWwsIHNpbmNlCisJaXQgaXMgdW5zaWduZWQuCQorCisJVHVlIE1heSAxMiAxNTo1Mjo0OSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwlNb24gTWF5IDExIDE0OjEwOjUwIDE5OTIgIFJvbiBHdWlsbWV0dGUgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjcC1kZWNsLmMgKHBvcGxldmVsKTogUmVjb25jaWxlZCB3aXRoIHJlY2VudCBjaGFuZ2VzIG1hZGUgdG8gdGhlCisJYHBvcGxldmVsJyByb3V0aW5lIGluIGMtZGVjbC5jLiAgVGhlIGNoYW5nZXMgaGVyZSBjYXVzZSBMQUJFTF9ERUNMCisJbm9kZXMgdG8gYmUgYXR0YWNoZWQgKGFzIHRoZSBCTE9DS19WQVJTIGNoYWluKSB0byB0aGUgQkxPQ0sgbm9kZQorCXdoaWNoIHJlcHJlc2VudCB0aGUgb3V0ZXJtb3N0IHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KKworCU1vbiBNYXkgMTEgMTI6MzU6NDQgMTk5MiAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuY2QuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQ2hlY2sgREVDTF9DT05URVhUIHRvIHNlZSBpZiBpdCBpcworCWFueSBzb3J0IG9mIGEgdHlwZSAoZS5nLiBzdHJ1Y3QgKm9yKiB1bmlvbikgcmF0aGVyIHRoYW4ganVzdAorCWNoZWNraW5nIGl0IHRvIHNlZSBpZiBpdCdzIGEgUkVDT1JEX1RZUEUuCisJKiBjcC1kZWNsLmMgKHB1c2hkZWNsKTogU2V0IERFQ0xfQ09OVEVYVCBvZiBwdXNoZWQgLi4uX0RFQ0wgbm9kZSwKKwlqdXN0IGFzIGlzIGRvbmUgaW4gYy1kZWNsLmMuCisJKHB1c2hkZWNsKTogRGVsZXRlIHVzZWxlc3MgdmFyaWFibGUgYGNudHh0Jy4KKwkoZmluaXNoX2RlY2wpOiBTZXQgVFJFRV9VU0VEIHJhdGhlciB0aGFuIERFQ0xfRlJPTV9JTkxJTkUgaW4gb3JkZXIKKwl0byBwcmV2ZW50ICJ1bnVzZWQiIHdhcm5pbmdzLgorCShmaW5pc2hfZnVuY3Rpb24pOiBDaGVjayBERUNMX0NPTlRFWFQgdG8gc2VlIGlmIGl0IGlzIGEgdHlwZS4KKwkoZmluaXNoX2Z1bmN0aW9uKTogRml4ZWQgaW5kZW50YXRpb24gcHJvYmxlbS4KKwkqIGNwLWdjLmMgKGJ1aWxkX21fZGVzYyk6IENoZWNrIERFQ0xfQ09OVEVYVCB0byBzZWUgaWYgaXQgaXMgYSB0eXBlLgorCSogY3AtaW5pdC5jIChidWlsZF92aXJ0dWFsX2luaXQpOiBGaXggaW5kZW50YXRpb24uCisJKiBjcC1sZXguYyAoc3RvcmVfcGVuZGluZ19pbmxpbmUpOiBDaGVjayBERUNMX0NPTlRFWFQgdG8gc2VlIGlmIGl0CisJaXMgYSB0eXBlLgorCSogY3AtcHQuYyAodHN1YnN0LCBkb19wZW5kaW5nX2V4cGFuc2lvbnMpOiBDaGVjayBERUNMX0NPTlRFWFQgdG8gc2VlCisJaWYgaXQgaXMgYSB0eXBlLgorCSogY3AtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBDaGVjayBERUNMX0NPTlRFWFQgdG8gc2VlIGlmIGl0IGlzCisJYW55IHNvcnQgb2YgYSB0eXBlIChlLmcuIHN0cnVjdCAqb3IqIHVuaW9uKSByYXRoZXIgdGhhbiBqdXN0CisJY2hlY2tpbmcgaXQgdG8gc2VlIGlmIGl0J3MgYSBSRUNPUkRfVFlQRS4KKworCVR1ZSBNYXkgMTIgMDg6NTI6MDYgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBDYWxsIGBicmVha19vdXRfY2xlYW51cHMnLgorCUFsc28gY2xlYW4gdXAgaW5kZW50aWF0aW9uLgorCisJTW9uIE1heSAxMSAyMzoxNDowNCAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocHVzaHRhZyk6IEhhbmRsZSBzdHJ1Y3R1cmUgdGFncyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlCisJQyBmcm9udC1lbmQuICBUaGlzIGNvbXBsZXRlcyBhIGNoYW5nZSB0aGF0IHJtcyBwdXQgaW4gb24gMy8xMi85MiBhbmQKKwlJIHB1dCBpbiB0aGUgQ3lnbnVzIHRyZWUgb24gMy8xMy85MiBhbmQgTWFyayBFaWNoaW4gdG9vayBiYWNrIG91dCBvbgorCTMvMTgvOTIuCisKKwlTdW4gTWF5ICAzIDAwOjI5OjU5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnMgYXQgY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKGNvcHlfbGFuZ19kZWNsLCBzdG9yZV9wZW5kaW5nX2lubGluZSk6IENhc3QKKwlhcmd1bWVudHMgdG8gYmNvcHkgdG8gYmUgY2hhciAqLgorCisJRnJpIE1heSAgMSAxMjoyMjozMSAxOTkyICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdCwgZXhwYW5kX3ZlY19pbml0KTogV2hlbiBjb21wYXJpbmcKKwlhcnJheSB0eXBlcywgdXNlIGBjb21wdHlwZXMnIGluc3RlYWQgb2YgPT0sIHNpbmNlIHR3byBhcnJheSB0eXBlcworCW1heSBiZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsIGJ1dCBub3QgPT0gaWYgb25lIHdhcyBkZWZhdWx0ZWQgZnJvbQorCWFuIGluaXRpYWxpemVyLgorCisJV2VkIEFwciAyOSAwMToyNToyNSAxOTkyICBNaWtlIFN0dW1wICAobXJzIGF0IGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZG9fZnJpZW5kKTogQ2hlY2sgdGhhdCBQUkVWSU9VU19ERUNMIGlzIG5vbi1OVUxMLgorCitUaHUgSnVuIDE4IDE0OjE1OjA3IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLm1kIChpbnN2KTogVXNlIGArJyBmb3Igb3BlcmFuZCAwIGNvbnN0cmFpbnQuCisKK1RodSBKdW4gMTggMTM6Mzk6MjIgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogQnVtcCBNZWlzc25lciB2ZXJzaW9uICMgdG8gMjAuCisJKGZpbmFsX3ByZXNjYW5faW5zbik6IEFkZCBkZWNsYXJhdGlvbi4KKwkoRklOQUxfUFJFU0NBTl9JTlNOKTogSnVzdCBjYWxsIGZpbmFsX3ByZXNjYW5faW5zbi4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogUmV3cml0ZSBzb21lIHRlc3RzLCBzbyB0aGF0IHRoZXkgd2lsbAorCXdvcmsgb24gaG9zdCBzeXN0ZW1zIHdpdGggNjQgYml0IGludGVnZXJzLgorCisJKiBtaXBzLmMgKGxhcmdlX2ludCk6IFJld29yaywgc28gdGhhdCB3ZSBkb24ndCBnZXQgZnVubnkgYm91bmRhcnkKKwljb25kaXRpb25zIG9uIHN5c3RlbXMgd2l0aCA2NCBiaXQgaW50ZWdlcnMuCisJKG1pcHNfbW92ZV8xd29yZCk6IEp1c3QgdXNlIGxpIHRvIGxvYWQgY29uc3RhbnRzIHRoYXQgY2FuIGJlIGRvbmUKKwl3aXRoIGx1aSwgaW5zdGVhZCBvZiBpc3N1aW5nIHRoZSBsdWksIHNpbmNlIHRoZSBHQVMgYnVnIHRoYXQKKwlnZW5lcmF0ZWQgdHdvIGluc3RydWN0aW9ucyBoYXMgYmVlbiBmaXhlZC4KKwkoZmluYWxfcHJlc2Nhbl9pbnNuKTogTW92ZSB0aGUgY2hlY2tpbmcgZm9yIGZpbGxpbmcgdGhlIGRlbGF5CisJc2xvdHMgaGVyZSBmcm9tIHRoZSBGSU5BTF9QUkVTQ0FOX0lOU04gbWFjcm8uCisKKwkqIG1pcHMubWQgKGFuZHNpMywgaW9yc2kzLCB4b3JzaTMpOiBNYWtlIHRoZSBjb25zdHJhaW50cyBtYXRjaAorCXRoZSByZWFsIG1hY2hpbmUgKHRoZSBwcmVkaWNhdGUgc3RpbGwgaXMgbW9yZSBnZW5lcmFsIGluIG9yZGVyCisJdG8gb3B0aW1pemUgYml0ZmllbGRzIGF0IHRoZSBleHBlbnNlIG9mIG5vdCBDU0UnaW5nIGxhcmdlCisJY29uc3RhbnRzIHVzZWQgaW4gbG9naWNhbCBvcHMsIGFuZCBtYWtpbmcgcmVsb2FkIGxvYWQgaXQgaW50bworCWEgc2NyYXRjaCByZWdpc3RlcikuICBEb24ndCB1c2UgJDEgYXMgYSB0ZW1wb3JhcnkgcmVnaXN0ZXIgYW55CisJbW9yZS4KKworCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSk6IElmIGBtZW1vcnknIHJldHVybiAtNC4KKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogSWYgYG1lbW9yeScgaXMgdXNlZCBhcyBhIGNsb2JiZXJlZAorCXJlZ2lzdGVyLCBlbWl0IGEgKGNsb2JiZXIgKGNvbnN0X2ludCAwKSkgdG8gZm9yY2UgdGhlIGNvbXBpbGVyIG5vdAorCXRvIGNhY2hlIG1lbW9yeSB2YWx1ZXMgaW4gcmVnaXN0ZXJzIGFjcm9zcyB0aGUgYXNzZW1ibHkKKwlpbnN0cnVjdGlvbihzKS4KKworCSogbWlwcy10ZmlsZS5jIChyZWFkX2xpbmUpOiBTZW1pY29sb25zIHdpdGhpbiBzdHJpbmdzIGFyZSBub3QKKwljb3VudGVkIGFzIHN0YXRlbWVudCBzZXBhcmF0b3JzLgorCisJKiBjb2xsZWN0Mi5jIChzY2FuX3Byb2dfZmlsZSwgT1NGL3Jvc2UgY2FzZSk6IENhc3QgcG9pbnRlciBhcmd1bWVudHMKKwl0byBiY29weSB0byBnZW5lcmljICogdG8gYXZvaWQgd2FybmluZ3MuCisKK1RodSBKdW4gMTggMTI6MDQ6NTMgMTk5MiAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMrKzogSWYgZ2l2ZW4gLXYgd2l0aCBubyBmaWxlIGFyZ3MsIGRvbid0IHBhc3MgdGhlIGxpYnJhcmllcyB0bworCWdjYy4KKworVGh1IEp1biAxOCAxMDozNDoyMiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgQlVJTFRfSU5fRlNRUlQpOiBFbWl0IHF1ZXVlIG9mIGluY3JlbWVudAorCWluc3RydWN0aW9ucyBiZWZvcmUgc3RhcnRpbmcgYSBzZXF1ZW5jZSB0aGF0IG1heSBnZXQgdGhyb3duIGF3YXkuCisKK1NlZSBDaGFuZ2VMb2cuNSBmb3IgZWFybGllciBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvZ2NjL0NoYW5nZUxvZy43IGIvZ2NjL0NoYW5nZUxvZy43Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGZlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvQ2hhbmdlTG9nLjcKQEAgLTAsMCArMSwxMDM3NiBAQAorU3VuIEp1biAyMCAxMzozNzowMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi40LjUgcmVsZWFzZWQuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IElmIGZpcnN0X2FyZ19udW0gaXMgMCwgbm8gZXJyb3IgZm9yIGl0LgorCisJKiBNYWtlZmlsZS5pbiAoZXh0cmFjbGVhbik6IERlbGV0ZSAqLmd6LCBhbmQgb3RoZXIgZGlmZiBhbmQgdGFyIGZpbGVzLgorCitTdW4gSnVuIDIwIDE4OjA5OjUwIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSW4gbGFzdCBjaGFuZ2UsIHByZXNlcnZlIHRoZSB0ZW1wIHNsb3QuCisKK1NhdCBKdW4gMTkgMTk6NTU6NDMgUERUIDE5OTMgIFJvbiBHdWlsbWV0dGUgIChyZmdAbmV0Y29tLmNvbSkKKworCSogZHdhcmZvdXQuYyAodHlwZV9tYWluX3ZhcmlhbnQpOiBOZXcgZnVuY3Rpb24uCisJVXNlIGl0IGluIHBsYWNlIG9mIFRZUEVfTUFJTl9WQVJJQU5UIGV2ZXJ5d2hlcmUgaW4gZHdhcmZvdXQuYy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogIEF2b2lkIHRoZSB1c2Ugb2YgbWFjcm9zIGZvciAuLi5fVFlQRQorCW5vZGVzIGluIGNhc2VzIHdoZXJlIGEgcGFyYW1ldGVyJ3MgdHlwZSBpcyBlcnJvcl9tYXJrX25vZGUuCisKK1NhdCBKdW4gMTkgMDM6NTc6NTcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuNC40IHJlbGVhc2VkLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogRm9yIHN0YXRpYyBkZWNsIG5ldmVyIGRlZmluZWQsCisJdXNlIGp1c3Qgd2FybmluZywgbm90IHBlZHdhcm4uCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFJlaW5zdGFsbCAjaWYgMCBhcm91bmQgY29kZSBmb3IKKwlvdXRwdXR0aW5nIHN0cnVjdHVyZSB0eXBlcywgdGhhdCBjb25mdXNlZCBHREIuCisKK0ZyaSBKdW4gMTggMjA6MDY6MzUgMTk5MyAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIHZtcy5oIChNQVlCRV9WTVNfRlVOQ1RJT05fUFJPTE9HVUUpOiBhZGp1c3Qgc3RhY2sgcG9pbnRlciBieSA0IHByaW9yCisJdG8gY2FsbGluZyBDJE1BSU5fQVJHUywgb3RoZXJ3aXNlIFBPU0lYIGVkaXRpb24gb2YgdGhhdCByb3V0aW5lIGRpZXMuCisKK0ZyaSBKdW4gMTggMTQ6MjE6MTQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBEZWxldGUgb2JqYy1oZWFkZXJzIHN1YmRpci4KKworCSogY29uZmlnL202OGsvbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBGb3IgLW02ODAyMCwgLW02ODAwMCBhbmQKKwktbXNvZnQtZmxvYXQsIHR1cm4gb2ZmIDAxNDAwIGJpdHMuCisKKwkqIE1ha2VmaWxlLmluIChnY2MueHRhci5neik6IFJlbmFtZWQgZnJvbSBnY2MudGFyLnouCisJKGRpc3QpOiBDaGFuZ2UgdGhlIGRlcGVuZGVuY3kuCisJKG1vc3RseWNsZWFuKTogRGVsZXRlIHRtcC1nY2MueHRhci5nei4KKworCSogYy1pdGVyYXRlLmMgKHNhdmVfZXhwcnMpOiBOZXcgdmFyaWFibGUuCisJKGNvbGxlY3RfaXRlcmF0b3JzKTogRG9uJ3QgcHJvY2VzcyBhIFNBVkVfRVhQUiB0d2ljZS4KKwkoaXRlcmF0b3JfZXhwYW5kKTogQ2xlYXIgc2F2ZV9leHBycy4KKworCSogTWFrZWZpbGUuaW4gKGdjYy5pbmZvLCBjcHAuaW5mbyk6IEFjdHVhbGx5IGNkIHRvIHNyY2Rpci4KKworCSogY29uZmlndXJlIChjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCopOiBVc2UgaW5zdGFsbC1oZWFkZXJzLWNwaW8uCisKK0ZyaSBKdW4gMTggMTM6Mzc6MTYgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuYyAob3V0cHV0X2Jsb2NrX21vdmUpOiBEb24ndCBhYm9ydCBpZiBvbmUgb2YgdGhlIGlucHV0CisJcmVnaXN0ZXJzIGlzIGFsbG9jYXRlZCBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIsIGp1c3QgdXNlIGZld2VyCisJc2NyYXRjaCByZWdpc3RlcnMuCisKK0ZyaSBKdW4gMTggMDA6MjU6MTYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni9pMzg2LmMgKGNhbGxfaW5zbl9vcGVyYW5kKTogUmVxdWlyZSBjb25zdGFudCBhZGRyZXNzCisJYmUgYSBnZW5lcmFsX29wZXJhbmQuCisJKGV4cGFuZGVyX2NhbGxfaW5zbl9vcGVyYW5kKTogTmV3IGZuICh3aGF0IGNhbGxfaW5zbl9vcGVyYW5kIHdhcykuCisJKiBjb25maWcvaTM4Ni9pMzg2Lm1kIChjYWxsX3BvcCwgY2FsbCwgY2FsbF92YWx1ZV9wb3AsIGNhbGxfdmFsdWUpCisJKHVudHlwZWRfY2FsbCk6IFVzZSBleHBhbmRlcl9jYWxsX2luc25fb3BlcmFuZC4KKworVGh1IEp1biAxNyAxNzo1ODoxMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9wYS9wYS5tZCAoZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyk6CisJUGF0dGVybiBkaXNhYmxlZC4KKworVGh1IEp1biAxNyAxMzozNDoyMCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHVucm9sbC5jIChjYWxjdWxhdGVfZ2l2X2luYyk6IEFkZCBuZXcgdmFyaWFibGVzIGluY3JlbWVudF90b3RhbAorCWFuZCB0cmllcywgYW5kIG5ldyBsYWJlbCByZXRyeSwgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgaW5jcmVtZW50IGlzCisJdHdvIGFkZCBpbnN0cnVjdGlvbnMuCisKK1RodSBKdW4gMTcgMTI6MTM6NTMgMTk5MyAgTWluaCBUcmFuLUxlICAobXRyYW5sZUBwYXJpcykKKworCSogY29uZmlnL2kzODYvYWl4Mzg2bmcuaDogQ2hhbmdlcyBmb3Igbm9uLUdBUyBnY2MuCisJKEFTTV9GSUxFX1NUQVJUXzEpOiBBbHdheXMgb3V0cHV0IC5ub29wdCBiZWNhdXNlIC9iaW4vYXMgaXMgYnVnZ3kuCisJQWRkZWQgI3VuZGVmIHRvIHtJTklULEZJTkksQ1RPUlMsRFRPUlN9X1NFQ1RJT05fQVNNX09QLCAuLi4gd2hlbgorCW5vdCB1c2luZyBHQVMuCisJKENPTlNUX1NFQ1RJT05fRlVOQ1RJT04pOiBPdmVycmlkZSBzdnIzIGRlZmF1bHQuCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogT3ZlcnJpZGUgc3ZyMyBkZWZhdWx0LgorCShPQkpFQ1RfRk9STUFUX0NPRkYpOiBBZGRlZCBkZWZpbmUgZm9yIGNvbGxlY3QyLgorCShNWV9JU0NPRkYpOiBGb3IgY29sbGVjdDIgdG8gaGFuZGxlIGFpeCBhbmQgc3ZyMyBvYmplY3QgZmlsZS4KKwkKKwkqIGNvbmZpZy9pMzg2L2FpeDM4Ni5oIChVU0VfR0FTKTogTmV3IGRlZmluZS4KKworVGh1IEp1biAxNyAwMDoyNjozOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlZy1zdGFjay5jIChzdGFja19yZXN1bHRfcCk6IE5ldyBmdW5jdGlvbi4KKwkoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBVc2UgdGhhdC4KKworCSogZmluYWwuYyAob3V0cHV0X2FkZHJfY29uc3QpOiBEb24ndCBpbnNlcnQgYSBsZWFkaW5nIHNwYWNlCisJaW4gdGhlIENPTlNUX0RPVUJMRV9ISUdIICE9IDAgY2FzZS4KKworVGh1IEp1biAxNyAwMDowOToxOSAxOTkzICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUmVqZWN0IGZ1bmN0aW9uIGFkZHJlc3NlcyBmb3Igbm93LgorCitXZWQgSnVuIDE2IDIwOjE0OjEwIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTWFrZSBzdXJlIGl0J3MgdGhlIGdsb2JhbCBmbiBgbWFpbicKKwliZWZvcmUgY29tcGxhaW5pbmcgYWJvdXQgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGl0LgorCitXZWQgSnVuIDE2IDE2OjI0OjMxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2kzODYveG0tc3lzdjQuaCAoU01BTExfQVJHX01BWCk6IERlZmluZWQuCisKKwkqIGMtdHlwZWNrLmMgKGNoZWNrX2Zvcm1hdCk6IERvbid0IGNyYXNoIGlmIGN1cl90eXBlIGlzIGFuIGVycm9yX21hcmsuCisJSGFuZGxlIGlkZW50aWZpZXJfbm9kZSBhcyB0aGUgVFlQRV9OQU1FLgorCitNb24gSnVuIDE0IDE2OjA5OjI0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogSWYgUENDX1NUQVRJQ19TVFJVQ1RfUkVUVVJOIGFuZCBUQVJHRVQKKwlpcyB6ZXJvLCBjb3B5IHJlc3VsdCBmcm9tIHN0YXRpYyBsb2NhdGlvbi4KKworICAgICAgICAqIGNzZS5jIChpbnZhbGlkYXRlX3NraXBwZWRfc2V0KTogUHJvbW90ZSAibm9uc2NhbGFyIiB0byAiYWxsIi4KKworTW9uIEp1biAxNCAxNjowMTozNCAxOTkzICBLYXJsIEJlcnJ5ICAoa2FybEBjcy51bWIuZWR1KQorCisJKiBmaXhpbmNsdWRlcyAoc3RkaW8uaCBtYXRoLmggY3R5cGUuaCBzeXMve2xpbWl0cy5oLGZjbnRsLmgsZGlyZW50Lmh9KToKKwlGaXggU1REQy9QT1NJWCBhbmQgb3RoZXIgdGhpbmdzIGZvciBJbnRlcmFjdGl2ZQlVbml4IDIuMiBvciBsYXRlci4KKworTW9uIEp1biAxNCAwNDo0MTozOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChtYWtlX21lbWxvYyk6IERvbid0IHJldXNlIGEgbWVtbG9jLgorCitTdW4gSnVuIDEzIDE2OjAxOjM3IDE5OTMgIEplZmYgTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoaW9yc2kzKTogRXhwbGljaXRseSBzZXQgbGVuZ3RoIHRvIDEuCisJKGFuZHNpMywgbHNocnNpMywgcm90cnNpMywgcm90bHNpMyk6IExpa2V3aXNlLgorCShhc2hpZnQgYW5kIGFzaGlmdHJ0IGJ5IGNvbnN0X2ludF9vcGVyYW5kKTogTGlrZXdpc2UuCisJKChhbmQgKGFzaGlmdCkpIG9wdGltaXplcik6IExpa2V3aXNlLgorCitTdW4gSnVuIDEzIDIwOjIzOjA0IDE5OTMgIFN0ZXBoZW4gTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChsdG9lLCB1bHRvZSwgZWlmcmFjLCBldWlmcmFjKTogSGFuZGxlIDY0LWJpdCBsb25ncy4KKwkoU0ZNT0RFX05BTiwgREZNT0RFX05BTiwgWEZNT0RFX05BTiwgVEZNT0RFX05BTik6IE5ldyBtYWNyb3MKKwlwZXJtaXQgZGVmaW5pdGlvbnMgb2YgTmFOIHBhdHRlcm5zIHRvIGJlIG92ZXJyaWRkZW4gaW4gdG0uaC4KKworU3VuIEp1biAxMyAxMjo1NToyMiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBBdm9pZCBhIG51bGwtcmVmZXJlbmNlIG9uIENUWVBFLgorCitTdW4gSnVuIDEzIDA4OjIyOjMwIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09ORF9FWFBSKTogRml4IHR5cG87IGNvbnN0MV9ydHggc2hvdWxkCisJYmUgY29uc3QwX3J0eCB3aGVuIGlnbm9yaW5nIGV4cHJlc3Npb24uCisKK1N1biBKdW4gMTMgMDA6MTU6MDAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnZW5vcGluaXQuYyAob3B0YWJzKTogRm9yIHN0cmxlbl9vcHRhYiwgZG9uJ3QgbG9vayBmb3IgYDInIGluIG5hbWUuCisKK1NhdCBKdW4gMTIgMjA6MjM6MDQgMTk5MyAgU3RlcGhlbiBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiByZWFsLmMgKGVyZWFsX2Zyb21fZmxvYXQsIGVyZWFsX2Zyb21fZG91YmxlKTogTmV3IGZ1bmN0aW9ucy4KKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9GUk9NX1RBUkdFVF9TSU5HTEUpOiBOZXcgbWFjcm8uCisJKFJFQUxfVkFMVUVfRlJPTV9UQVJHRVRfRE9VQkxFKTogTGlrZXdpc2UuCisJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBVc2UgdGhvc2UgbWFjcm9zIGlmIFJFQUxfQVJJVEhNRVRJQy4KKworU2F0IEp1biAxMiAxMzo0NDowMCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKGFkZF9kZXBlbmRlbmNlKTogUmVqZWN0IENPREVfTEFCRUxzIHdoZW4gc2VhcmNoaW5nIGZvcgorCWxhc3QgaW5zbiBvZiBhIHNjaGVkIGdyb3VwLgorCitTYXQgSnVuIDEyIDA4OjA2OjI1IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG02OGsubWQgKG1vdnFpKTogSGFuZGxlIGNvcHlpbmcgYW4gYWRkcmVzcyByZWdpc3RlciB0byBvcgorCWZyb20gbWVtb3J5IHdoZW4gdGhlIGFkZHJlc3MgdXNlcyB0aGUgYWRkcmVzcyByZWdpc3Rlci4KKworU2F0IEp1biAxMiAwMDoxNzowNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChyZWNvcmRfanVtcF9jb25kKTogTG9vayB1cCBvcDEgYWdhaW4gYWZ0ZXIgaW5zZXJ0aW5nIG9wMC4KKworRnJpIEp1biAxMSAyMTo1MDoxNiAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogcnM2MDAwLm1kIChtb3ZzZiwgbW92ZGYpOiBIYW5kbGUgYSBtb3ZlIGZyb20gYW4gaW50ZWdlciByZWdpc3RlcgorCWJlZm9yZSByZWxvYWQuICBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHVzZXIgdXNlcyBhc20gdG8gcHV0IGEgZmxvYXRpbmcKKwlwb2ludCB2YXJpYWJsZSBpbiBhbiBpbnRlZ2VyIHJlZ2lzdGVyLgorCitGcmkgSnVuIDExIDIwOjA0OjQzIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChyczYwMDBfZ2VuX3NlY3Rpb25fbmFtZSk6IE9ubHkgcmVwbGFjZSBsYXN0IHBlcmlvZAorCWluIGZpbGVuYW1lIHdpdGggc2VjdGlvbiBuYW1lIGFuZCBjb3JyZWN0IGNhbGN1bGF0aW9uIG9mCisJc3RyaW5nIGxlbmd0aC4KKworCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogQ29ycmVjdGx5IGlnbm9yZSBNQVRDSF9PUEVSQVRPUgorCW9wZXJhbmRzLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBEb24ndCB1c2UgYSBsYXRlciBlbGltaW5hdGlvbgorCXRoYW4gZWxpbWluYXRlX3JlZ3Mgd291bGQgdXNlLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEb24ndCBtb2RpZnkgREVDTF9JTklUSUFMIG9mIGEgUEFSTV9ERUNMLgorCitUaHUgSnVuIDEwIDIzOjQ4OjAxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2VuZXh0cmFjdC5jIChtYWluKTogVXNlIF9fdm9sYXRpbGVfXywgbm90IHZvbGF0aWxlLgorCitUaHUgSnVuIDEwIDE2OjIxOjA4IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1teyxuby19aWRlbnQuCisJKEFTTV9TUEVDKTogUGFzcyAtdiB0byBhc3NlbWJsZXIgaWYgdXNlZC4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IERvbid0IGFsbG93IC1mcGljIGlmIHVzaW5nIHRoZSBPU0Yvcm9zZSBvYmplY3QKKwlmb3JtYXQuCisJKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FLCBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogSWYgdXNpbmcgRUxGLAorCSBlbWl0IGEgLnR5cGUgcHNldWRvIG9wIHRoYXQgc2F5cyB0aGUgbGFiZWwgaXMgZWl0aGVyIGFuIG9iamVjdCBvcgorCSBhIGZ1bmN0aW9uLgorCSAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSk6IENvcHkgZnJvbSBzdnI0LmguCisJIChTQ0NTX0RJUkVDVElWRSk6IERlZmluZS4KKwkgKEFTTV9GSUxFX0VORCk6IFVubGVzcyAtbW5vLWlkZW50LCBlbWl0IGEgLmlkZW50IGRpcmVjdGl2ZSB0aGF0CisJIGlkZW50aWZpZXMgR0NDIGFuZCB3aGV0aGVyIHNldmVyYWwgc3dpdGNoZXMgYXJlIHVzZWQuCisKKwkgKiBpMzg2L29zZmVsZi5oIChBU01fU1BFQyk6IFBhc3MgLXYgdG8gYXNzZW1ibGVyIGlmIHVzZWQuCisJIChPQkpFQ1RfRk9STUFUX1JPU0UpOiBVbmRlZmluZS4KKworVGh1IEp1biAxMCAxNjoyMDoyNCAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoTUFYX0JJVFNfUEVSX1dPUkQpOiBEZWZpbmUgZWFybGllci4KKwkoc2hpZnRfY29zdCwgc2hpZnRhZGRfY29zdCwgc2hpZnRzdWJfY29zdCk6IFVzZSBNQVhfQklUU19QRVJfV09SRC4KKworVGh1IEp1biAxMCAxMjo1NjoxOCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKHNjaGVkX2FuYWx5emVfMik6IERvbid0IGlnbm9yZSBVU0UgaW5zbnMgd2hlbiBjcmVhdGluZworCWRlcGVuZGVuY2llcy4KKwkoc2NoZWRfYW5hbHl6ZSk6IExpa2V3aXNlLgorCitXZWQgSnVuICA5IDEyOjU4OjUxIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKGkzODYtKi1vc2ZlbGYpOiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIE9TRi8xIHVzaW5nCisJdGhlIEVMRiBvYmplY3QgZmlsZSBmb3JtYXQuCisKKwkqIGkzODYvb3NmZWxmLmggKG5ldyBmaWxlKTogTmV3IGNvbmZpZyBmaWxlIGZvciBPU0YvMSB3aXRoIEVMRi4KKwlJbmNsdWRlIG9zZnJvc2UuaCBhbmQgcmVkZWZpbmUgdGhpbmdzIGFzIG5lZWRlZC4KKworCSogaTM4Ni9vc2Zyb3NlLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWVsZiwgLW1yb3NlLCBhbmQKKwktbW5vLXJvc2Ugc3dpdGNoZXMuCisJKEhBTkRMRV9TWVNWX1BSQUdNQSk6IERlZmluZS4KKwkoSURFTlRJRklFUl9QUkVGSVgsIElERU5USUZJRVJfU1VGRklYKTogUmVtb3ZlIHVudXNlZCBtYWNyb3MuCisJKENQUF9QUkVERUZJTkVTKTogQWRkIC1BY3B1KGkzODYpIC1BbWFjaGluZShpMzg2KSAtQXN5c3RlbSh1bml4KS4KKwkoQ1BQX1NQRUMpOiBEZWZpbmUgX19ST1NFX18gaWYgY29tcGlsaW5nIGZvciBPU0Yvcm9zZSBhbmQgX19FTEZfXworCWlmIGNvbXBpbGluZyBmb3IgdGhlIEVMRiBvYmplY3QgZm9ybWF0LgorCShDQzFfU1BFQyk6IFBhc3MgLW1yb3NlIGlmIG5vIG9iamVjdCBmb3JtYXQgc3dpdGNoLgorCShEV0FSRl9EQlhfUkVHSVNURVJfTlVNQkVSKTogTWFwIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gdGhlCisJZGVidWdnaW5nIGZvcm1hdC4KKworV2VkIEp1biAgOSAxMzoyMTowMyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlNb24gSnVuICA3IDE4OjAxOjMxIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGlzX3N1Ym9iamVjdF9vZl9wLCBsb29rdXBfZmllbGQsIGxvb2t1cF9mbmZpZWxkcyk6CisJQmVjYXVzZSB2aXJ0dWFsIGJhc2VzIGRvbid0IG5lY2Vzc2FyaWx5IHNoYXJlIHRoZSBzYW1lIGJpbmZvLCB1c2UKKwl0aGUgYmluZm8gaGllcmFyY2h5IG9mIFRZUEVfQklORk8gb2YgYW55IHZpcnR1YWwgYmFzZXMsIHdoZW4KKwlwZXJmb3JtaW5nIGhpZGluZyBjaGVja3MuICBGaXhlcyBwcm9ibGVtIGludHJvZHVjZWQgb24gVGh1IE1hciAyNQorCTIzOjA5OjI3IDE5OTMuICBUaGUgc3ltcHRvbSBpcyB0aGUgY29tcGlsZXIgcmVwb3J0cyBub24gYW1iaWd1b3VzCisJbWVtYmVycyBhcyBiZWluZyBhbWJpZ3VvdXMuCisKKwlXZWQgSnVuICAyIDExOjUzOjI0IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGxvb2t1cF9mbmZpZWxkc19oZXJlKTogVXNlIFRZUEVfTUFJTl9WQVJJQU5UIG9uCisJY29udGV4dCB0eXBlcyBiZWZvcmUgY29tcGFyaW5nLiAgRml4ZXMgY29uc3QgbWVtYmVyIGZ1bmN0aW9ucyBub3QKKwliZWluZyBmb3VuZCBpbiB0ZW1wbGF0ZXMuCisKK1R1ZSBKdW4gIDggMTk6NDQ6MjMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IE1vdmUgc2V0dGluZyBvZiB0aGUgREVDTF9SRVNVTFQncworCWNvbnRleHQgYW5kIGNhbGxpbmcgc2V0am1wX3Byb3RlY3QgYWZ0ZXIgcG9wbGV2ZWwsIHNvIHdlIGhhdmUgYQorCXZhbGlkIERFQ0xfSU5JVElBTCBmb3IgdGhlIGZuZGVjbCAobm90IGFuIGVycm9yX21hcmtfbm9kZSkuCisKK1R1ZSBKdW4gIDggMTM6MTQ6MjcgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogY29uZmlndXJlOiBBZGRlZCBnYXMgc3VwcG9ydCBmb3IgbTg4ay0qIHRhcmdldHMuCisKKwkqIHQtbHVuYS1nYXMgdC1kZ3V4LWdhcyB0LW04OGstZ2FzOiBOZXcgZmlsZXMgaW4gY29uZmlnL204OGsuCisKK1R1ZSBKdW4gIDggMTQ6NTE6NDQgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBEZWxldGUgUkVHX0VRVUFMIG5vdGVzIHRoYXQgZGVzY3JpYmUgYQorCW5vbiBsb29wIGludmFyaWFudCB2YWx1ZS4KKworCSogc3BhcmMuYyAoY2FsbF9vcGVyYW5kLCBjYWxsX29wZXJhbmRfYWRkcmVzcyk6IEFjY2VwdCBhbnkgYWRkcmVzcworCW5vdCBqdXN0IFJFRyBydHguCisKK1R1ZSBKdW4gIDggMTg6NDc6MzkgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQG5hZGEua3RoLnNlKQorCisJKiBzcGFyYy5oOiAoUlRYX0NPU1RTKTogTWFrZSBjb3N0IG9mIE1VTFQgZGVwZW5kIG9uIFRBUkdFVF9WOC4KKworCSogcGEuaCAoQ1BQX1NQRUMpOiBGaXggdHlwbzogZGVmaW5lIF9faHA5MDAwczcwMC4KKworVHVlIEp1biAgOCAwNjoxNjozMCAxOTkzICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmggKEhBUkRfUkVHTk9fUkVHUywgSEFSRF9SRU5PX01PREVfT0ssIE1PREVTX1RJRUFCTEVfUCk6CisJUmVzdHJpY3QgdXNlIG9mIDg4MTEwIGV4dGVuZGVkIHJlZ2lzdGVycyB0byBmbG9hdGluZyBwb2ludC4KKworTW9uIEp1biAgNyAxNTo0MjoxMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG1hdGgtNjg4ODEuaCAoYXRhbjIpOiBGb3IgeCA8PSAwLCBsdW1wIHkgPT0gMCB3aXRoIHkgPiAwCisJdG8gZ2V0IHRoZSByaWdodCByZXN1bHQgaW4gMCwgLTEgY2FzZS4KKworTW9uIEp1biAgNyAxNzo1MDoyNSAxOTkzICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoUlRYX0NPU1RTKTogQ29zdCBvZiBNVUxUIGFsc28gZGVwZW5kcyBvbiAKKwlUQVJHRVRfRElTQUJMRV9GUFJFR1MuCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfSU5UKTogQWx3YXlzIGVtaXQgc3BlY2lhbCAicGxhYmVsIiByZWxvY2F0aW9uIGZvcgorCWZ1bmN0aW9uIGxhYmVscy4KKworU3VuIEp1biAgNiAxNjozMTo1OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jICh0cmFuc2xhdGVfb3B0aW9ucyk6IERvbid0IGFzc3VtZSBvcHRpb25fbWFwW2pdLmFyZ19pbmZvICE9IDAuCisKKwkqIGNvbmZpZy92YXgvdmF4LmggKFBSSU5UX09QRVJBTkQpOiBQcmVmaXggY29uc3RhbnQgYnkgYCQnLgorCitTdW4gSnVuICA2IDAwOjQ0OjQ4IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBuYWRhLmt0aC5zZSkKKworCSogbTg4ay5tZCAoZml4X3RydW5jZGZzaTIpOiBEZXN0aW5hdGlvbiBpcyBnZW5lcmFsIHJlZ2lzdGVyLCBzb3VyY2UKKwlnZW5lcmFsIG9yIGV4dGVuZGVkIHJlZ2lzdGVyLgorCShmaXhfdHJ1bmNzZnNpMik6IExpa2V3aXNlLgorCitTdW4gSnVuICA2IDAwOjIwOjI1IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisJKiBvYmpjLWFjdC5jIChlbmNvZGVfdHlwZSk6IEFkZCBjYXNlcyBmb3IgREltb2RlLCBlbmNvZGVkCisJYXMgJ3EnIGFuZCAnUScgcmVzcGVjdGl2ZWx5LgorCitTYXQgSnVuICA1IDE0OjAyOjM2IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0BiaWd0ZXguY2FjdHVzLm9yZykKKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogQ29weSBERUNMX0ZSQU1FX1NJWkUgZm9yIGlubGluZSBmdW5jdGlvbiBkZWNscy4KKworCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IERvbid0IGNyZWF0ZSBhCisJZGVmYXVsdCBsYWJlbCBpZiBhbGwgZW51bWVyYXRpb24gbGl0ZXJhbHMgYXJlIGNvdmVyZWQgYnkgY2FzZXMuCisKK1NhdCBKdW4gIDUgMDQ6NDk6MTkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jICh1bmluaXRpYWxpemVkX3ZhcnNfd2FybmluZyk6IENoYW5nZSB3YXJuaW5nIHRleHQuCisJKHNldGptcF9hcmdzX3dhcm5pbmcpOiBMaWtld2lzZS4KKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEFsbG93IGNvbnZlcnNpb24gdG8gdW5pb24gdHlwZQorCWZvciBwb2ludGVyIGlmIHRoZSBwb2ludGVyIGNvdWxkIGNvbnZlcnQgdG8gdGhlIHVuaW9uIG1lbWJlci4KKworRnJpIEp1biAgNCAxODowOTo0NyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWx3YXlzIGNvcHkgYSBTVUJSRUcgYXMgYW4KKwlhcmd1bWVudCBpbnRvIGEgUkVHLgorCitGcmkgSnVuICA0IDA1OjUyOjI4IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBuYWRhLmt0aC5zZSkKKworCSogcGEuaCAoUlRYX0NPU1RTKTogTWFrZSBjb3N0IG9mIE1VTFQgZGVwZW5kIG9uIFRBUkdFVF9TTkFLRS4KKworCSogZXhwbWVkLmMgKHN5bnRoX211bHQpOiBNb3ZlIGNvZGUgdG8gYWRkIG9yIHN1YnRyYWN0IGF0CisJbGVmdG1vc3QgMS1iaXQgdG8gYmVmb3JlIGZhY3RvcmluZyBjb2RlIHRvIGRlY3JlYXNlIHRoZSBhbGxvd2VkIGNvc3QKKwlxdWlja2x5LiAgUmVzdHJpY3QgaXQgdG8gaGFuZGxlIG9ubHkgb2RkIG51bWJlcnMuCisJKGluaXRfZXhwbWVkKTogTGltaXQgbXVsdF9jb3N0IHRvIG1ha2Ugc3ludGhfbXVsdCBydW4gZmFzdGVyLgorCitGcmkgSnVuICA0IDIzOjE4OjM1IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisJKiBvYmpjL3NlbmRtc2cuYyAob2JqY19tc2dfc2VuZHYpOiBQYXNzIGEgZHVtbXkgdmFfbGlzdCwgbm90IDAsCisJdG8gb2JqY19lcnJvci4KKworRnJpIEp1biAgNCAxNjoxMjo0MyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGJ5dGVvcmRlci5oOiBVc2UgbmV3LXN0eWxlIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBzbyB0aGF0IHRoaXMKKwlmaWxlIGlzIGJvdGggdmFsaWQgQyBhbmQgQysrLgorCitGcmkgSnVuICA0IDAwOjU5OjMxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL21pcHMvc3ZyNC01LmggKENQUF9QUkVERUZJTkVTKTogCisJQWRkIF9NSVBTX1NaSU5UIF9NSVBTX1NaTE9ORyBfTUlQU19TWlBUUi4KKworVGh1IEp1biAgMyAyMzo0ODozOSAxOTkzICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogSWYgdGhlIGxhc3QgaW5zbiBpbiB0aGUKKwljdXJyZW50IGZ1bmN0aW9uIGlzIGEgKHZvbGF0aWxlKSBjYWxsLCB0aGVuIGVtaXQgYW4gZXh0cmEKKwlub3AgYWZ0ZXIgdGhlIGNhbGwgc28gdGhhdCBSUCB3aWxsIHBvaW50IHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uCisKK1RodSBKdW4gIDMgMTg6NTI6MjQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbmV4dHN0ZXAuaCAoSU5DTFVERV9ERUZBVUxUUyk6IFVzZSBzYW1lIG9yZGVyIGFzIGNjY3AuYy4KKwlBZGQgQ0NDX0lOQ0xVREVfRElSIHdpdGggL2Fuc2kgYW5kIC9ic2QgY29uY2F0ZW5hdGVkLgorCisJKiB2YXJhc20uYyAoaW1tZWRfcmVhbF9jb25zdF8xKTogQ2hlY2sgZXhwbGljaXRseSBmb3IgTmFOcy4KKworVGh1IEp1biAgMyAxNDozNzoyNSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IEF0IGVuZCwgcmV0dXJuIDEgaXMgbm9uemVybyBoYXMKKwl0aGUgaGlnaCBiaXQgc2V0LgorCitXZWQgSnVuICAyIDE3OjI3OjMxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChyZWNvcmRfaW5pdGlhbCk6IFJlamVjdCBpbnNucyB0aGF0IHN0b3JlIGludG8gc3VicmVncy4KKworVHVlIEp1biAgMSAxMjo0Njo0OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi40LjMgcmVsZWFzZWQuCisKKwkqIGp1c3QtZml4aW5jOiBOZXcgZmlsZS4KKworCSogY29uZmlnL2NvbnZleC9jb252ZXguaCBbX0lFRUVfRkxPQVRfXSAoTElOS19TUEVDKToKKwlVc2UgX19fZ2NjX2NsZWFudXAsIG5vdCBfX2djY19jbGVhbnVwLgorCitUdWUgSnVuICAxIDA3OjQxOjI2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZmZzKTogRGVsZXRlIHBhdHRlcm4gY29udGFpbmluZyBub25leGlzdGFudCBpbnN0cnVjdGlvbi4KKworCSogYWxwaGEubWQgKGV4dGVuZHNpZGkyKTogQ29ycmVjdGx5IGRvIG9wZXJhdGlvbiB3aGVuIGluIEZQCisJcmVnaXN0ZXJzIGFuZCwgc2luY2UgZXhwZW5zaXZlLCBkb24ndCBoYXZlIEZQIHJlZ3MgYXMgYSBwcmVmZXJlbmNlLgorCitUdWUgSnVuICAxIDAwOjA5OjQ2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKHNpZ25hbC5oKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGNvbmZpZ3VyZTogQWRkIG1pc3NpbmcgZGFzaCBpbiBwYXR0ZXJucyBmb3IgbWlwcy0qLXJpc2Nvcy4uLgorCUluIHJpc2NvcyA1IHBhdHRlcm5zLCB1c2UgZml4aW5jLm1pcHMuCisKKwkqIGZpeGluYy5taXBzOiBOZXcgZmlsZS4KKworCSogY29uZmlnLnN1YjogSGFuZGxlIDM4NmJzZC4KKworTW9uIE1heSAzMSAyMzo0NzowMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy92YXgvdmF4Lm1kICh1bnR5cGVkX2NhbGwsIGJsb2NrYWdlKTogTmV3IHBhdHRlcm5zLAorCWJhc2ljYWxseSBjb3BpZWQgZnJvbSBtNjhrLm1kLgorCitNb24gTWF5IDMxIDIxOjQ2OjA4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJvbXAuYyAob3V0cHV0X2VwaWxvZyk6IERvbid0IGNyYXNoIGlmIFRZUEVfU0laRSBvZiBhbiBhcmcgaXMKKwlub3Qgc2V0LgorCitNb24gTWF5IDMxIDAwOjE1OjIwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL21pcHMveC1zb255IChPTERDQyk6IEZpeCB0eXBvLgorCisJKiBjb25maWcvbWlwcy9ic2QtNC5oLCBic2QtNS5oLCBzdnIzLTQuaCwgc3ZyMy01LmgsIHN2cjQtNC5oLCBzdnI0LTUuaDoKKwkoU1RBTkRBUkRfSU5DTFVERV9ESVIpOiBSZW5hbWVkIGZyb20gU1lTVEVNX0lOQ0xVREVfRElSLgorCSogY29uZmlnL21pcHMvYnNkLTUuaCwgc3ZyMy01LmgsIHN2cjQtNS5oIChMSU5LX1NQRUMpOgorCURlbGV0ZSBleGNlc3MgY2xvc2UgYnJhY2UuCisKKwkqIHBhLm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvKToKKwlSZXZlcnNlIGFsbCBjb25kaXRpb25zIGluIHJlbG9hZCBjYXNlcy4KKworCSogVmVyc2lvbiAyLjQuMiByZWxlYXNlZC4KKworU3VuIE1heSAzMCAyMToxNDo0MiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogSW5jcmVtZW50IG1hcC0+Y29uc3RfYWdlCisJYmVmb3JlIGNvcHlpbmcgUkVHX05PVEVTLgorCisJKiBzcGFyYy5jIChzcGFyY19idWlsdGluX3NhdmVyZWdzKTogRG9uJ3Qgc2V0IGZpcnN0X3JlZyB0byB6ZXJvCisJZm9yIHZhcmFyZ3MuCisKK1N1biBNYXkgMzAgMjM6NTg6NTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjL01ha2VmaWxlIChjb3B5LWhlYWRlcnMpOiBjaG1vZCB0aGUgaGVhZGVycywgbm90IHRoZSBkaXIuCisKKwkqIE1ha2VmaWxlLmluIChvYmpjLWhlYWRlcnMpOiBEb24ndCBkZXAgb24gZm9yY2UuCisJVG91Y2ggb2JqYy1oZWFkZXJzIHNvIGNvcHkgaXMgbm90IHJlcGVhdGVkIGF0IGluc3RhbGwgdGltZS4KKworCSogZmluYWwuYyAoc2hvcnRlbl9icmFuY2hlcyk6IENvbmRpdGlvbmFsaXplIGxhc3QgY2hhbmdlCisJb24gU0hPUlRFTl9XSVRIX0FESlVTVF9JTlNOX0xFTkdUSC4KKworCSogcGEuaCAoU0hPUlRFTl9XSVRIX0FESlVTVF9JTlNOX0xFTkdUSCk6IERlZmluZWQuCisKK1N1biBNYXkgMzAgMTM6NTM6MzAgMTk5MyAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBDYWxsIEFESlVTVF9JTlNOX0xFTkdUSCBkdXJpbmcgdGhlCisJc2hvcnRlbmluZyBwaGFzZS4KKworCSogcGEuYyAob3V0cHV0X2NicmFuY2gpOiBJbiBmb3J3YXJkL2xvbmcgYnJhbmNoIGNhc2UsIG9ubHkKKwludWxsaWZ5IGlmIHRoZSBkZWxheSBzbG90IHdhcyBlbXB0eSBvciBpZiB0aGUgZGVsYXkgc2xvdAorCXdhcyBleHBsaWNpdGx5IG51bGxpZmllZC4KKwkob3V0cHV0X2JiKTogTGlrZXdpc2UuCisJCisJKiBwYS5oIChBREpVU1RfSU5TTl9MRU5HVEgpOiBDYWxsIHBhX2luc25fYWRqdXN0X2xlbmd0aC4KKworCSogcGEuaCAoSU5TTl9TRVRTX0FSRV9ERUxBWUVEKTogRG8gbm90IGNhbGwgZ2V0X2F0dHJfdHlwZSB3aXRoIGEgCisJQ0xPQkJFUiBpbnNuLgorCShJTlNOX1JFRkVSRU5DRVNfQVJFX0RFTEFZRUQpOiBMaWtld2lzZS4KKworCSogcGEubWQgKGNhbGwgaW5zbnMgYW5kIGV4cGFuZGVycyk6IERvIG5vdCBleHBsaWNpdGx5IGNsb2JiZXIgJXIzMS4KKworCSogcGEuYyAocGFfaW5zbl9hZGp1c3RfbGVuZ3RoKTogUmV3b3JrLiAgQWRkIGNvZGUgdG8gaGFuZGxlCisJbWlsbGljb2RlIGNhbGxzIHdpdGggdW5maWxsZWQgZGVsYXkgc2xvdHMgYW5kIGlubGluZSBibG9jayBtb3Zlcy4KKwkoY29tcHV0ZV9tb3ZzdHJzaV9sZW5ndGgpOiBOZXcgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgbGVuZ3RoIG9mCisJYSBtb3ZzdHJzaSBwYXR0ZXJuLgorCShvdXRwdXRfY2JyYW5jaCk6IExvbmcgYnJhbmNoZXMgd2l0aCB1bmZpbGxlZCBkZWxheSBzbG90cyBjYW4KKwlhbHdheXMgbnVsbGlmeSB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlmIHRoZWlyIGRlbGF5IHNsb3QKKwl3YXMgbm90IGZpbGxlZC4KKworU3VuIE1heSAzMCAxODo1ODoyMiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIG1pcHMuYyAoZnVuY3Rpb25fYXJnX3BhcnRpYWxfbnJlZ3MpOiBGb3IgQkxLbW9kZSB2YWx1ZXMsIGZpdHMgaW4KKwlyZW1haW5pbmcgcmVnaXN0ZXIgaWYgdG90YWwgc2l6ZSA8PSBNQVhfQVJHU19JTl9SRUdJU1RFUlMsIG5vdCA8LgorCitTdW4gTWF5IDMwIDE3OjQ1OjA2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogU2hpZnQgYnkgKEhPU1RfQklUU19QRVJfV0lERV9JTlQgLyAyKSwKKwlub3QgYnkgMzIuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgb25seSBub24tZ3JvdXAgbmVlZCBpcyB1bmZpbGxlZCwgc2VlIGlmCisJcmVncyBzcGlsbGVkIGZvciBlYXJsaWVyIGNsYXNzZXMgY2FuIHNhdGlzZnkgaXQuCisKKwkqIGNvbmZpZy9taXBzL2lyaXM0bG9zZXIuaCAoQVNNX1NQRUMpOiBBZGQgdW5jb25kaXRpb25hbCAtTzAuCisKK1NhdCBNYXkgMjkgMTU6MTk6NTcgMTk5MyAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChtb3ZkZiBmb3IgY29uc3RfZG91YmxlKTogSGFuZGxlIGxvYWRpbmcKKwlhIENPTlNUX0RPVUJMRSBpbnRvIGdlbmVyYWwgcmVnaXN0ZXJzLgorCShtb3ZzZiBmb3IgY29uc3RfZG91YmxlKTogTGlrZXdpc2UuCisKKwkqIHBhLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogSGFuZGxlIFNGbW9kZSBDT05TVF9ET1VCTEUgCisJYXMgYSBzb3VyY2Ugb3BlcmFuZC4KKworU2F0IE1heSAyOSAxNDoxNDozMCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBDb3JyZWN0bHkgaGFuZGxlIGNhc2Ugd2hlbgorCVJFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRSBpcyB1c2VkIG9uIGEgNjQtYml0IG1hY2hpbmUuCisKK1NhdCBNYXkgMjkgMTI6MTU6NDMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlcyAoc2lnbmFsLmgpOiBEb24ndCBtdW5nICNlbmRpZiBpZiBub253aGl0ZSBzdHVmZiBwcmVjZWRlcy4KKworCSogcnRsLmg6IFVuZGVmIFBDLgorCitGcmkgTWF5IDI4IDE5OjAxOjM5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChpWzM0XTg2LSotaXNjKik6IElmIGdhcyBhbmQgbm90IHN0YWJzLCB1c2UgaXNjY29mZi5oLgorCisJKiBmaW5hbC5jIChzaG9ydGVuX2JyYW5jaGVzKTogRG8gbm90IGNhbGwgaW5zbl9jdXJyZW50X2xlbmd0aAorCXdpdGggYW4gaW5zbiB3aGljaCBoYXMgYSBub24tdmFyeWluZyBsZW5ndGguICBVc2UgaW5zbl9sZW5ndGhzCisJaW5zdGVhZC4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogTmV2ZXIgc2V0IGN1cnJlbnRfaW5kZXgKKwlpdHNlbGYtLWFsd2F5cyBzdG9yZSBpbnRvIGN1cnJlbnRfaW5kZXhfbm9kZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogQWRkIG1pc3NpbmcgYDsnIGZvciBhcnJheSB3aXRoIG5vIGRvbWFpbi4KKworRnJpIE1heSAyOCAxNjo0Nzo1NCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisgICAgICAgICogY3NlLmMgKGZvbGRfcnR4KTogQ29ycmVjdCBjaGVjayBmb3IgYXNzb2NpYXRpbmcgc2hpZnRzIGFuZAorICAgICAgICBlbmRpbmcgdXAgd2l0aCBhIHNoaWZ0IGNvdW50IHRvbyBsYXJnZTsgY29udmVydCB0byB0aGUKKyAgICAgICAgbGFyZ2VzdCB2YWxpZCBmb3IgQVNISUZUUlQgYW5kIGRvbid0IGZvbGQgYWxsIG90aGVycy4KKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgY2FzZSBBU0hJRlRSVCk6IEZpeCB0eXBvLgorCVdhcyB1c2luZyBDMSB3aGVyZSBDMiBpcyBuZWVkZWQuCisKK0ZyaSBNYXkgMjggMTc6NTA6MzggMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFdoZW4gY29weSBSRUdfTk9URVMsIG11c3QKKwlhbHNvIGNhbGwgc3Vic3RfY29uc3RhbnRzLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogV2hlbiBHQ0NfRVhFQ19QUkVGSVggaXMgZGVmaW5lZCBhbmQKKwl0b29sZGlyIGlzIHJlbGF0aXZlLCBhZGQgaXQgdG8gc2VhcmNoIHBhdGggaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQKKwlkaXJlY3RvcnkgcmF0aGVyIHRoYW4gaW5zdGVhZCBvZi4KKworRnJpIE1heSAyOCAwMDo1MDo1MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9hcm0vYXJtLmggKEdPX0lGX0xFR0lUSU1BVEVfSU5ERVgpOiBDaGVjayBleHBsaWNpdGx5IGZvcgorCXVwcGVyIGFuZCBsb3dlciBib3VuZHMgb2YgdmFsaWQgSU5ERVguCisKKwkqIGdlbm9waW5pdC5jIChpbnNuX25hbWVfcHRyKTogRGVjbGFyZSBhcyB2YXJpYWJsZS4KKwkob3B0YWJzKTogRml4IHR5cG8gaW4gZmxvYXR1bnMgY2FzZS4KKworVGh1IE1heSAyNyAxMjoxMzo1NSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQsIGNhc2UgSU9SLCBYT1IsIE5PVCk6IERvbid0CisJY3JlYXRlIGNvbnN0YW50IHdpZGVyIHRoYW4gbW9kZSBvZiBWQVJPUC4KKworVGh1IE1heSAyNyAyMDo0MToxOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni1pYm0tYWl4Kik6IFNldCBmaXhpbmNsdWRlcy4KKwkoaVszNF04Ni0qLXNjbyopOiBEb24ndCB0ZXN0IC0td2l0aC1nYXMsIGp1c3QgLS13aXRoLXN0YWJzLgorCitXZWQgTWF5IDI2IDE2OjA1OjA1IDE5OTMgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbkBvc2Yub3JnKQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJbnNlcnQgbWlzc2luZyBHRVRfTU9ERSBjYWxsLgorCitXZWQgTWF5IDI2IDE4OjQwOjA5IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogaTk2MC5tZCAoYXNobHNpMyk6IFVzZSBzaGxvIGluc3RlYWQgb2Ygc2hsaS4KKworV2VkIE1heSAyNiAwMDozNDozMyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9uZXh0c3RlcC5oIChJTkNMVURFX0RFRkFVTFRTKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisKKwkqIE1ha2VmaWxlLmluIChnY2MueHRhci56KTogUmVuYW1lZCBmcm9tIGdjYy54dGFyLlouICBVc2UgZ3ppcC4KKwkoZGlzdCk6IERlcGVuZCBvbiBnY2MueHRhci56LgorCShtb3N0bHljbGVhbik6IERlbGV0ZSB0ZW1wLWdjYy54dGFyLnouCisKKwkqIFZlcnNpb24gMi40LjEgcmVsZWFzZWQuCisKKwkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBEb24ndCBjb21wbGFpbiBmb3IgXCUgdW5sZXNzIHBlZGFudGljLgorCisJKiBjb25maWcvbWlwcy9taXBzLmggKEFTTV9TUEVDKTogSWYgLW5vYXNtb3B0LCBwYXNzIC1PMC4KKwkqIGNvbmZpZy9taXBzL2lyaXMzLmg6IExpa2V3aXNlLgorCisJKiBjb25maWcvbWlwcy9pcmlzNGxvc2VyLmg6IE5ldyBmaWxlLgorCSogY29uZmlnL21pcHMvaXJpczRnbC5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAobWlwcy1zZ2ktaXJpczRsb3Nlcik6IE5ldyBhbHRlcm5hdGl2ZS4KKworVHVlIE1heSAyNSAxODowNTo1MCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfYmxvY2spIFtEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFXToKKwlHZXQgZnVuY3Rpb24gbmFtZSBmcm9tIERFQ0xfUlRMIG5vdCBmcm9tIERFQ0xfQVNTRU1CTEVSX05BTUUuCisJKiBjb25maWcvc3BhcmMvc29sMi5oIChBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogTGlrZXdpc2UuCisKKwkqIG02OGsvc3VuMy5oIChGVU5DVElPTl9WQUxVRSwgRlVOQ1RJT05fVkFMVUVYKTogSWZkZWYgb3V0LgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogV2hlbiBhbGxvd2luZyBtaXhpbmcgb2YKKwlzaWduZWQgYW5kIHVuc2lnbmVkIHBvaW50ZXJzLCBjb21wYXJlIHVuc2lnbmVkIHR5cGVzIG5vdCB0eXBlIHNpemVzLgorCitUdWUgTWF5IDI1IDAwOjA4OjQyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbmV4dHN0ZXAuaCAoSU5DTFVERV9ERUZBVUxUUyk6IERlbGV0ZSAvTmV4dERldmVsb3Blci9IZWFkZXJzL2Fuc2kKKwlhbmQgL05leHREZXZlbG9wZXIvSGVhZGVycy9ic2QuCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogRml4IHBhcmVuIGVycm9yLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBJZiB0eXBlIGlzIGxhaWQgb3V0LCBidXQgZGVjbCBpcyBub3QsCisJY2FsbCBsYXlvdXRfZGVjbC4KKworCSogcHJvdG9pemUuYyAoaW5jbHVkZV9kZWZhdWx0cyk6IFVwZGF0ZSB0byBtYXRjaCBjY2NwLmMuCisJKiBNYWtlZmlsZS5pbiAoc3RhbXAtcHJvdG8pOgorCVBhc3MgTE9DQUxfSU5DTFVERV9ESVIgYmFzZWQgb24gbG9jYWxfcHJlZml4LgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBEZXRlY3QgY29uc3RhbnRzIGFzIG91dHB1dHMuCisKK01vbiBNYXkgMjQgMTg6MjU6MjMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogVXNlIFRBUkdFVC1nY2MsIG5vdCBnY2MtVEFSR0VULgorCisJKiByZWxvYWQxLmMgKGRlbGV0ZV9vdXRwdXRfcmVsb2FkKTogRG9uJ3QgZGVsZXRlIG91dHB1dCByZWxvYWQKKwlpZiBjYW5ub3Rfb21pdF9zdG9yZXMgaXMgc2V0IGZvciB0aGF0IHBzZXVkby4KKwkocmVsb2FkKTogSW5pdCBhbmQgY2xlYXIgY2Fubm90X29taXRfc3RvcmVzLgorCShlbGltaW5hdGVfcmVncyk6IFNldCBjYW5ub3Rfb21pdF9zdG9yZXMuCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni0qLXNjbzMuMnY0Kik6IFRlc3QgLS13aXRoLXN0YWJzLCBub3QgLS13aXRoLWdhcy4KKworTW9uIE1heSAyNCAxNDoxMDo1OSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IE1FTV9JTl9TVFJVQ1RfUCBmb3IKKwlyZXR1cm4gdmFsdWUgaWYgbmVlZGVkLgorCitNb24gTWF5IDI0IDEzOjEwOjA3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IERvbid0IGRlcmVmZXJlbmNlIGEgbnVsbCBwYXJtLgorCisJKiBjcC1tZXRob2QuYyAoZHVtcF9pbml0KTogRG9uJ3QgdHJ5IHRvIHByaW50IG91dCB0aGUgZmlyc3Qgb3BlcmFuZAorCW9mIGEgVEFSR0VUX0VYUFIgaWYgaXQncyBub3QgdGhlcmUuCisKK01vbiBNYXkgMjQgMTA6MTM6MjYgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0Bwb3NlaWRvbi5jeWdudXMuY29tKQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogRmluaXNoIFR1ZSBBdWcgMTggMjM6MDc6MzMgMTk5MiBjaGFuZ2UuICBJdAorCWRpZG4ndCBoYW5kbGUgdGhlIHRhcmdldCAhPSAwIGNhc2UsIG5vdyBpdCBkb2VzLgorCitNb24gTWF5IDI0IDAwOjMwOjUwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgVEFSR0VUX0VYUFIgY2FzZSk6CisJSGFuZGxlIGNhc2Ugd2hlcmUgREVDTF9SVEwgaXMgbm9uemVyby4KKworCSogY29uZmlndXJlIChpWzM0XTg2LSotaXNjKik6IFVzZSBpbnN0YWxsLWhlYWRlcnMtY3Bpby4KKworCSogZ2Vub3Bpbml0LmMgKG9wdGFicyk6IEFkZCBiYWNrc2xhc2hlcyB0byBwcmV2ZW50IFNDQ1MgY29uZnVzaW9uLgorCSogY29uZmlnL202OGsvdG93ZXItYXMuaCAoQ09OU1RSVUNUT1JfTkFNRV9GT1JNQVQpOiBMaWtld2lzZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEZvciBzdWJyZWctb2YtY29uc3RhbnQsIGRvbid0IGdlbl9sb3dwYXJ0CisJaWYgaXQncyBhIGJpZy1lbmRpYW4gbWFjaGluZSBhbmQgY29uc3RhbnQgaXMgbXVsdGktd29yZC4KKworCSogZ3N0ZGRlZi5oIChzaXplX3QpIFtfX0dOVUdfX106IERvbid0IHR5cGVkZWYgaXQgaWYgaXQncworCWFscmVhZHkgZGVmaW5lZCBhcyBhIG1hY3JvLgorCisJKiBjb25maWcvaTM4Ni94LWFpeCAoQ0xJQik6IERlZmluZWQuCisJKiBjb25maWcvaTM4Ni9haXgzODYuaCAoU1RBUlRGSUxFX1NQRUMsIExJTktfU1BFQyk6IE5ldyBvdmVycmlkZXMuCisJKiBjb25maWcvaTM4Ni94bS1haXguaDogVW5kZWYgVFJVRSBhbmQgRkFMU0UgYmVmb3JlICNpbmNsdWRlLgorCSogY29uZmlnL2kzODYvYWl4Mzg2bmcuaCAoU1RBUlRGSUxFX1NQRUMsIExJTktfU1BFQyk6IERvbid0IHVzZQorCWNydGJlZ2luLm8sIGNydGVuZC5vLCBjcnRuLm8sIGxpYnAuYS4gIFVzZSBnY3J0MC4wLCBub3QgZ2NydDEuby4KKwkoRU5ERklMRV9TUEVDKTogVXNlIGNydG4uby4KKwkoQ1BQX1BSRURFRklORVMpOiBEZWxldGUgX0FJWCwgQUlYLCBhbmQgX0kzODYuICBBZGQgcHMyLCB1bml4LgorCShDUFBfU1BFQyk6IEFkZCBfQUlYLCBfSTM4NiwgX01CQ1MuICBIYW5kbGUgLXBvc2l4LgorCShBU01fU1BFQyk6IFR1cm5lZCBvZmYuCisJKiBjb25maWcvaTM4Ni90LWFpeDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGlbMzRdODYtaWJtLWFpeCopOiBVc2UgdC1haXggaWYgdXNpbmcgZ2FzLgorCisJKiBjb25maWcvaTM4Ni9zY280LmggKEFTTV9PVVRQVVRfRkxPQVQsIEFTTV9PVVRQVVRfRE9VQkxFKToKKwlOZXcgb3ZlcnJpZGUgZGVmaW5pdGlvbnMuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBVbmRvIHByZXZpb3VzIGNoYW5nZXMgKHRoYXQgd2VyZSB0byBjYWxsCisJYXNzZW1ibGVfemVyb3Mgd2hlbmV2ZXIgREJYX0RFQlVHR0lOR19JTkZPIGlzIGRlZmluZWQpLgorCitTdW4gTWF5IDIzIDE2OjMxOjM4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL25leHRzdGVwLmggKElOQ0xVREVfREVGQVVMVFMpOiBGaXggbWlzc2luZyBjb21tYS4KKworCSogY29uZmlnL2kzODYveC1haXggKEZJWElOQ0xVREVTKTogRGVmaW5lZC4KKwkqIGZpeGluYy5wczI6IE5ldyBmaWxlLgorCitTdW4gTWF5IDIzIDE0OjUxOjA2IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisJKiBvYmpjL29iamMuaCAob2JqY19wcm90b2NvbCk6IE5ldyBmaWVsZCBgY2xhc3NfcG9pbnRlcicuCisKKwkqIG9iamMvaW5pdC5jIChfX29iamNfaW5pdF9wcm90b2NvbHMpOiBDYWxsIHJlY3Vyc2l2ZWx5CisJb24gc3VwZXIgcHJvdG9jb2xzLiAgTWFrZSBsb2NhbCB2YXIgYHByb3RvX2NsYXNzJyBzdGF0aWMuCisKK1N1biBNYXkgMjMgMDA6NDk6MTcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoQklTT05GTEFHUyk6IFJlbW92ZSAtdiBzaW5jZSBvdXRwdXQgZmlsZSBuYW1lcyBhcmUgbG9uZy4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBJZiBpbmhlcml0aW5nIGEgc3BpbGwgcmVnLAorCWFuZCByZWxvYWRfb3V0IGhhcyBhIHdpZGVyIG1vZGUsIGp1c3QgY29weSBmcm9tIHRoYXQgc3BpbGwgcmVnLAorCWRvbid0IHVzZSBpdCBmb3IgdGhlIHJlbG9hZC4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogRml4IE5VTEwgYXJnIGluIGxhc3QgY2hhbmdlLgorCisJKiBjb25maWcvbTg4ay94LXRla1hEODggKEFSX0ZMQUdTKTogRGVmaW5lZC4KKworU2F0IE1heSAyMiAxNDo0OTo1OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9taXBzL21pcHMuaCAoQVNNX1NQRUMpOiBJZiAtbm9hc21vcHQsIGRvbid0IHBhc3MgLU8yLgorCSogY29uZmlnL21pcHMvaXJpczMuaDogTGlrZXdpc2UuCisKKwkqIGNvbmZpZy9uZXh0c3RlcC5oIChJTkNMVURFX0RFRkFVTFRTKTogUHV0IC91c3IvaW5jbHVkZS9ic2QgbGFzdC4KKworCSogY29uZmlnL2FscGhhL2FscGhhLmggKEFTTV9PVVRQVVRfRE9VQkxFLCBBU01fT1VUUFVUX0ZMT0FUKTogCisJVXNlIGhleCBpZiBpbmZpbml0ZSwgbmFuLCBvciBtaW51cyB6ZXJvLgorCisJKiByZWFsLmMgKHRhcmdldF9pc25hbik6IFVzZSBHRVRfUkVBTCBtYWNybyB0byBnZXQgYXJndW1lbnQuCisJKGVyZWFsX3RvX2ludCk6IEZpeCBwb3RlbnRpYWxseSB3cm9uZy1lbmRpYW4gYXJndW1lbnQgcGFzc2VkIHRvIGVpc25hbi4KKworRnJpIE1heSAyMSAxNDoyNDowMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9uZXh0c3RlcC5oIChJTkNMVURFX0RFRkFVTFRTKTogQWRkIC91c3IvaW5jbHVkZS9ic2QuCisKKwkqIGNjY3AuYyAoZGVmYXVsdF9pbmNsdWRlKTogUHV0IFRPT0xfSU5DTFVERV9ESVIgYWZ0ZXIKKwlMT0NBTF9JTkNMVURFX0RJUiBpbiBub24tY3Jvc3MgY2FzZS4KKworCSogcmVhbC5jIChlbWRub3JtKTogRml4IHR5cG8gYWZmZWN0aW5nIHJvdW5kb2ZmIGJlaGF2aW9yIGluIFhGbW9kZS4KKworCSogY29uZmlnL202OGsvYW1peC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3ZyNF9fLgorCShBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwsIEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwpOgorCU5ldyBvdmVycmlkZSBkZWZpbml0aW9ucy4KKworCSogY29sbGVjdDIuYyAobWFpbikgW0NST1NTX0NPTVBJTEVdOiBVc2UgVEFSR0VULVRPT0wgZm9yIGZ1bGxfLi4uCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBGb3IgLWRlYnVnLCBpZiAuLi5fZmlsZV9uYW1lIGlzIGEgbnVsbCBwb2ludGVyLAorCXNheSBzbyBpbnN0ZWFkIG9mIGNyYXNoaW5nLgorCisJKiBtNjhrLm1kIChjbXB4ZjIgcmVjb2duaXplcik6IFRlc3QgU0dTX0NNUF9PUkRFUiwgbm90IEhQVVhfQVNNLgorCisJKiBjLWNvbW1vbi5jIChjb25zdGFudF9leHByZXNzaW9uX3dhcm5pbmcpCisJKG92ZXJmbG93X3dhcm5pbmcsIGNvbnZlcnRfYW5kX2NoZWNrKTogQ2hhbmdlIHBlZHdhcm4gdG8gd2FybmluZy4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogV2hlbiBJTiBpcyBhIHN1YnJlZyBvZiBhIG11bHRpd29yZCByZWcKKwl0aGF0IHVzZXMgYSBmdW5ueSBudW1iZXIgb2YgcmVnaXN0ZXJzLCBhbmQgU1VCUkVHX1dPUkQgaXMgbm9uemVybywKKwlhbmQgSU4gbXVzdCBtYXRjaCBhbiBvdXRwdXQsIHJlbG9hZCBib3RoIHRoZSByZWcgYW5kIHRoZSBzdWJyZWcuCisKKwkqIHByb3RvaXplLmMgKGFkZF9zeW1ib2wsIHVuZXhwYW5kX2lmX25lZWRlZCwgYWJzcGF0aCk6IAorCVN1cHBseSBtaXNzaW5nIGFyZyB0byBzYXZlc3RyaW5nLgorCisJKiBNYWtlZmlsZS5pbiAoaW5mbywgZHZpKTogTmV3IHRhcmdldHMuCisKK0ZyaSBNYXkgMjEgMTA6Mjg6NDEgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jIChzdWJzdCk6IERvbid0IHVzZSBhIG1ldGhvZCdzIGFyZ3VtZW50cyB1bmxlc3MgaXQgaGFzIHNvbWUuCisKK0ZyaSBNYXkgMjEgMTE6NTE6MjAgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAaWVzZC5hdWMuZGspCisKKwkqIG9iamMvc2FycmF5LmggKHNhcnJheV9nZXQpOiBBZGQgI2lmZGVmIGNhc2UgZm9yCisJIWRlZmluZWQoUFJFQ09NUFVURV9TRUxFQ1RPUlMpIGFuZCBPQkpDX1NQQVJTRTIuCisJKiBvYmpjL3NhcnJheS5jIChzYXJyYXlfYXRfcHV0KTogTGlrZXdpc2UuCisJCitGcmkgTWF5IDIxIDAwOjUxOjEwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChtaXBzLSotdWx0cml4Kik6IFJlbmFtZWQgZnJvbSBtaXBzLWRlYy11bHRyaXgqLgorCitUaHUgTWF5IDIwIDIzOjE2OjQzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBIYW5kbGUgZWFybHljbG9iYmVycworCXdoZW4gaW5oZXJpdGluZyBmcm9tIHJlZ19sYXN0X3JlbG9hZF9yZWcuCisKK1RodSBNYXkgMjAgMTM6NTk6MTYgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGlyKTogRml4IHN5bnRheCwgbWFrZSB0b29sZGlyIGJlZm9yZSBhc3NlcnRkaXIuCisKK1RodSBNYXkgMjAgMDg6NTI6MzAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkZGVmLmggW19BTlNJX0hfXTogSGFuZGxlIF9fbmVlZF9zaXplX3QgYW5kIF9fbmVlZF93Y2hhcl90LgorCisJKiBmaXhpbmNsdWRlcyAoRml4aW5nIENUUkwpOiBSZWplY3QgQ1RSTCBvciBfQ1RSTCBmb2xsb3dpbmcgZGlnaXQuCisKKwkqIGVucXVpcmUuYyAoRl9jaGVjayk6IENoZWNrIE5PX0xPTkdfRE9VQkxFX0lPLgorCitXZWQgTWF5IDE5IDIzOjE4OjU1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2kzODYveC1pc2MzIChYX0NGTEFHUyk6IERlbGV0ZSAtRFBPU0lYX0pDLgorCisJKiByZWFsLmMgKGUyNHRvZSwgZTUzdG9lLCBlNjR0b2UpOiBGaXggc2lnbiBpbiBjb252ZXJzaW9ucworCW9mIC1pbmZpbml0eS4gIERvIGVjbGVhciBiZWZvcmUgZWluZmluLgorCitXZWQgTWF5IDE5IDE1OjM3OjIwIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogdmEtc3BhcmMuaCAodmFfZGNsKTogUmVzdG9yZSBhY2NpZGVudGFsbHkgZGVsZXRlZCBfX2J1aWx0aW5fdmFfYWxpc3QKKwlkZWNsYXJhdGlvbi4KKworCSogb2JqYy1hY3QuYyAoaGFuZGxlX2NsYXNzX3JlZik6IENhbGwgYXNzZW1ibGVfY29uc3RhbnRfYWxpZ24KKwliZWZvcmUgb3V0cHV0X2NvbnN0YW50LgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX2NvbnN0YW50X2FsaWduKTogTmV3IGZ1bmN0aW9uLgorCitXZWQgTWF5IDE5IDEzOjQwOjAxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2k4NjAveC1zeXN2NCAoWF9DRkxBR1MpOiBEZWxldGVkLgorCisJKiBjb25maWd1cmUgKGlbMzRdODYtKi1pc2MqKTogSWYgdmVyc2lvbiBpcyAzLCB1c2UgeC1pc2MzLgorCSogY29uZmlnL2kzODYveC1pc2MzOiBOZXcgZmlsZS4KKworTW9uIE1heSAxOSAyMTo0Nzo0OSAxOTkzICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogRml4IGNhbGxpbmcgY29udmVudGlvbiBmb3IgaW5kaXJlY3QgY2FsbHMgb24gdGhlIFBBLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEZWNsYXJlIGFuZCBzZXQgY3VycmVudF9jYWxsX2lzX2luZGlyZWN0LgorCShlbWl0X2xpYnJhcnlfY2FsbCwgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IExpa2V3aXNlLgorCSogcGEuaCAoVEFSR0VUX1NIQVJFRF9MSUJTKTogRGVmaW5lIGFzIDEuCisJKEZVTkNUSU9OX0FSRyk6IElmIHRoaXMgaXMgYSBjYWxsIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyLCB0aGVuCisJdGhlIGNhbGxlciBwYXNzZXMgYWxsIGFyZ3VtZW50cyBpbiBnZW5lcmFsIHJlZ2lzdGVycy4KKworCSogcGEuaCAoRlVOQ1RJT05fQVJHX1JFR05PX1ApOiBBY2NvdW50IGZvciByZWdpc3RlcnMgd2hpY2ggbWF5CisJYmUgdW5hdmFpbGFibGUgb24gcGFydGljdWxhciBjcHUgbW9kZWxzLiAgRml4IGluZGVudGF0aW9uLgorCitXZWQgTWF5IDE5IDEzOjEzOjQyIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKyAgICAgICAgKiBsb29wLmMgKHNjYW5fbG9vcCk6IFRyZWF0IHBzZXVkbyBkdXBsaWNhdGVkIGZvciBleGl0IHRlc3RzIGp1c3QKKyAgICAgICAgbGlrZSB3ZSB0cmVhdCB1c2VyIHZhcnMgaW4gc2VlaW5nIGlmIHdlIGNhbiBtb3ZlIGEgU0VULgorCisJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzLCBub256ZXJvX2JpdHMpOgorCUlmIHdlIGhhdmUgYSBwb3NpdGl2ZSBjb25zdGFudCB0aGF0IGlzIG5lZ2F0aXZlIGluIHRoZSBtb2RlCisJaXQgaXMgYmVpbmcgdXNlZCBpbiwgdHJlYXQgaXQgYXMgbmVnYXRpdmUuCisJKiByczYwMDAuaCwgYWxwaGEuaCAoU0hPUlRfSU1NRURJQVRFU19TSUdOX0VYVEVORCk6IERlZmluZS4KKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogUmVqZWN0IGNhc2VzIHdoZW4gQklUU19QRVJfV09SRAorCWlzIGdyZWF0ZXIgdGhhbiBIT1NUX0JJVFNfUEVSX0lOVCB1bmxlc3MgT1AgaXMgY29uc3QwX3J0eC4KKworVHVlIE1heSAxOCAxNjozMTowNiAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAbmFkYS5rdGguc2UpCisKKwkqIHBhLmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IE1ha2UgMjpuZCBmbHVzaCwgZW5kX2FkZHIsCisJYXQgdGhlIGxhc3QgcmVhbCBpbnNuIGluIHRoZSB0cmFtcG9saW5lLgorCitUdWUgTWF5IDE4IDEzOjM1OjQzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGFzc2VydGRpcik6IHVzZSAkKHRvb2xkaXIpL2luY2x1ZGUgZm9yIHRoaXMuCisJKGluc3RhbGwtZGlyKTogQWx3YXlzIGNyZWF0ZSBhc3NlcnRkaXIgYW5kIHRvb2xkaXIuCisKKwkqIGNvbmZpZy9hcm0vYXJtLm1kIChhZGQvYXNsIHJlY29nbml6ZXIpOiBVc2Ugc3BhY2UsIG5vdCAjLCBhZnRlciBhc2wuCisJU2h1ZmZsZSBvcGVyYW5kcyBkaWZmZXJlbnRseS4KKworCSogb2JqYy1hY3QuYyAoc3ludGhfbW9kdWxlX3Byb2xvZ3VlKTogU2V0IFRSRUVfUFVCTElDIGluIHVtc2dfZGVjbC4KKworCSogTWFrZWZpbGUuaW4gKGluZm9kaXIpOiBOZXcgdmFyaWFibGUuCisJKGluc3RhbGwtZGlyKTogQ3JlYXRlIHRoYXQgZGlyLgorCShpbnN0YWxsLWluZm8pOiBOZXcgcnVsZS4KKwkoaW5zdGFsbC1ub3JtYWwpOiBEZXBlbmQgb24gaW5zdGFsbC1pbmZvLgorCisJKiBmaXhpbmNsdWRlczogVXNlICRmaWxlLiByYXRoZXIgdGhhbiAkZmlsZS5zZWQgCisJd2hlbiAkZmlsZSBpcyBvciBtaWdodCBiZSBtb3JlIHRoYW4gMTAgY2hhcmFjdGVycyBsb25nLgorCisJKiBjb25maWcvaTM4Ni9pc2MuaCAoTElCX1NQRUMpOiBIYW5kbGUgLXBvc2l4IGJlZm9yZSAtc2hsaWIuCisKKwkqIGNvbmZpZy9taXBzL3gtc29ueTogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKG1pcHMtc29ueS1ic2QqKTogVXNlIHgtc29ueS4KKworCSogTWFrZWZpbGUuaW4gKGxvY2FsX3ByZWZpeCk6IERvIG5vdCBkZWZhdWx0IGZyb20gJChwcmVmaXgpLgorCitUdWUgTWF5IDE4IDA5OjI4OjAyIDE5OTMgIENocmlzIFNtaXRoIChjc21pdGhAY29udmV4LmNvbSkKKworCSogY29udmV4LmMgKHJlcGxhY2VfcHVzaGVzLCBlbWl0X2FwX29wdGltaXphdGlvbnMpOiBEZWxldGUuCisKK01vbiBNYXkgMTcgMTg6MDc6NTMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmMuc3ZyNCAoaWVlZWZwLmgpOiBEZWxldGUgZGVmaW5pdGlvbnMgb2YgX19taXBzIGFuZCBfX202OGsuCisKK01vbiBNYXkgMTcgMTc6MDA6MDAgMTk5MyAgREogRGVsb3JpZSAoZGpAY3Ryb24uY29tKQorCisJKiBjb25maWd1cmUuYmF0OiBGaXggc2VkIGZvciB2ZXJzaW9uLmMgdG8gaGFuZGxlIGJvdGggd2l0aAorCWFuZCB3aXRob3V0IHNwYWNlcyBjb3JyZWN0bHkgKE1TLURPUykuCisKK01vbiBNYXkgMTcgMTI6MjY6NTUgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBydGwuYyAoaW5pdF9ydGwpOiBDb3JyZWN0IG51bWJlciBvZiAndydzIGluIENPTlNUX0RPVUJMRSBmb3JtYXQuCisKK01vbiBNYXkgMTcgMDA6MDc6NTAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuNC4wIHJlbGVhc2VkLgorCisJKiBNYWtlZmlsZS5pbiAoZXh0cmFjbGVhbik6IFJlbW92ZSBqdW5rIGZyb20gb2JqYyBzdWJkaXIuCisKKwkqIGZpeGluYy5zdnI0IChpZWVlZnAuaCk6IERlbGV0ZSBkZWZpbml0aW9ucyBvZiBfX2k4NjAgYW5kIF9fbTg4ay4KKworCSogbWlwcy9pcmlzNC5oIChBU01fT1VUUFVUX0FTQ0lJKTogTmV3IG92ZXJyaWRpbmcgZGVmaW5pdGlvbi4KKworCSogcGEuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogUGFzcyBib3RoIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nCisJYWRkcmVzc2VzIG9mIHRoZSB0cmFtcG9saW5lIHRvIHRoZSBjYWNoZWZsdXNoIHBhdHRlcm4uCisJKiBwYS5tZCAoY2FjaGVmbHVzaCk6IEZsdXNoIHRoZSBjYWNoZSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAorCWJvdGggdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgYWRkcmVzc2VzIG9mIHRoZSB0cmFtcG9saW5lLgorCisJKiBndmFyYXJncy5oLCBnc3RkYXJnLmggW19fc3ZyNF9fIF9faTg2MF9fXToKKwlEZWZpbmUgX1ZBX0xJU1Qgb25seSBpZiBub3QgZGVmaW5lZCBhbHJlYWR5LgorCitNb24gTWF5IDE3IDAwOjQwOjM2IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni9zeXN2NC5oIChCSUdHRVNUX0ZJRUxEX0FMSUdOTUVOVCwgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6CisJRGVsZXRlZC4gIE5vdyBoYW5kbGVkIGJ5IEhBTkRMRV9TWVNWX1BSQUdNQS4KKwkoSEFORExFX1NZU1ZfUFJBR01BKTogRGVsZXRlZDogYWxyZWFkeSBkZWZpbmVkIGJ5IHN2cjQuaC4KKworU3VuIE1heSAxNiAxOToyNTozOCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHVucm9sbC5jIChpbml0aWFsX3JlZ19ub3RlX2NvcHksIGZpbmFsX3JlZ19ub3RlX2NvcHkpOiBOZXcgZnVuY3Rpb25zLgorCShjb3B5X2xvb3BfYm9keSk6IFVzZSBuZXcgZnVuY3Rpb24gdG8gY29weSBSRUdfTk9URVMuCisKK1N1biBNYXkgMTYgMTM6MDM6NTggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZXh0cmFjbGVhbik6IERlbGV0ZSBqdW5rIGluIHN1YmRpcnMgb2YgY29uZmlnLgorCShkaXN0Y2xlYW4pOiBEZWxldGUge2MsY3BsdXMsb2JqY30tcGFyc2Uub3V0cHV0LgorCisJKiByZW9yZy5jIChmaW5kX2VuZF9sYWJlbCk6IFVwZGF0ZSBpbnNuIGFmdGVyIGNhbGxpbmcgZW1pdF9qdW1wX2luc24uCisKKwkqIGZpeGluYy5zdnI0IChpZWVlZnAuaCk6IERlbGV0ZSBgI2RlZmluZSBfX3NwYXJjJyBhbHNvLgorCitTdW4gTWF5IDE1IDAxOjM3OjE5IFBEVCAxOTkzICBSb24gR3VpbG1ldHRlICAocmZnQG5ldGNvbS5jb20pCisKKwkqIGZpeGluYy5zdnI0IChpZWVlZnAuaCk6IERlbGV0ZSBgI2RlZmluZSBfX2kzODYnIGxpbmUuCisKK1NhdCBNYXkgMTUgMTA6MTE6MDEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBtYXRoLTY4ODgxLmg6IEFkZCBjb25kaXRpb25hbCBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbi4KKworCSogZ3ZhcmFyZ3MuaCBbX19zdnI0X18gX19pODYwX19dIChfVkFfTElTVCk6IERvIGRlZmluZS4KKwkqIGdzdGRhcmcuaDogTGlrZXdpc2UuCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBJZiBzdXBwb3J0IGRieCBvdXRwdXQsCisJYWx3YXlzIG91dHB1dCAwIGF0IHN0YXJ0IG9mIHRleHQgc2VjdGlvbi4KKworCSogY3AtdHJlZS5oIChlcnJvcl9ub3RfYmFzZV90eXBlKTogRml4IHR5cG8gaW4gZGVjbC4KKworU2F0IE1heSAxNSAwOTowODoyMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogRml4IGVycm9yIGluIGxhc3QgY2hhbmdlLgorCisJKiByczYwMDAubWQgKG1vdnFpLCBtb3ZoaSwgbW92c2kpOiBNYWtlIHN1cmUgdGhhdCBhZGRyZXNzIHJldHVybmVkCisJZnJvbSBmb3JjZV9jb25zdF9tZW0gaXMgdmFsaWQuCisKKwkqIGk4NjAuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRG9uJ3QgbWFrZSBpbXByb3BlciBTVUJSRUdzCisJYW5kIGVuc3VyZSB0aGF0IENYVCBhbmQgRk5BRERSIGFyZSBpbiByZWdpc3RlcnMuCisKKwkqIGNvbnZleC5jIChpbnNlcnRfYXBfbG9hZHMpOiBJbml0aWFsaXplIEFQX0lTX0xJVkUgdG8gMCBhdAorCXN0YXJ0IG9mIGJvdGggbG9vcHMsIG5vdCBqdXN0IGZpcnN0IG9uZS4KKworCSogY29udmV4LmggKFJFR05PX1JFR19DTEFTUyk6IERvbid0IGNhbGwgYWJvcnQ7IGl0IHdpbGwgY2F1c2UKKwlhIGNvbXBpbGF0aW9uIGVycm9yIGFzIHdyaXR0ZW4gYW5kIGlzbid0IGRvbmUgZWxzZXdoZXJlLgorCisJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogRG9uJ3QgcmVjb3JkCisJZGF0YSBmb3IgYSBhIHBzZXVkbyB0aGF0IGlzIHVuZGVmaW5lZCBvbiBlbnRyeSB0byBhIGZ1bmN0aW9uLgorCVdoZW4gYSBwc2V1ZG8gaXMgY2xvYmJlcmVkLCBzaG93IHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgaXQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBBbHdheXMgcmV0dXJuIGEgcmVzdWx0IHRoYXQgaGFzCisJdGhlIG1vZGUgb2YgVE8uCisKKwkqIHJzNjAwMC5jIChyczYwMDBfbWFrZXNfY2FsbHMpOiBJZiBwcm9maWxpbmcsIHNheSB3ZSBtYWtlIGNhbGxzLgorCitTYXQgTWF5IDE1IDAwOjM4OjIyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmEtbWlwcy5oICh2YV9hcmcpIFtfX01JUFNFQl9fXToKKwlBZnRlciBpbmNyZW1lbnRpbmcsIHN1YnRyYWN0IHRoZSByb3VuZGVkIHNpemUsIG5vdCB0aGUgc2l6ZSBwcm9wZXIuCisKKwkqIGNvbmZpZy9pODYwL3gtc3lzdjQgKFhfQ0ZMQUdTKTogRGVmaW5lZC4KKwkoR0NDX0NGTEFHUyk6IERlZmluaXRpb24gZGVsZXRlZC4KKworCSogZmluYWwuYyAob3V0cHV0X2FkZHJfY29uc3QpOiBEb24ndCBwcmludGluZyBsZWFkaW5nIHplcm9zLgorCitTYXQgTWF5IDE1IDA2OjE4OjQzIDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEb24ndCBzdGFydCAyLWdyb3VwIHVubGVzcyBpdCBjb3VsZCBiZSBmaW5pc2hlZC4KKworU2F0IE1heSAxNSAxMjoyMzo1OCAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAbmFkYS5rdGguc2UpCisKKwkqIGFscGhhLmMgKG91dHB1dF9wcm9sb2cpOiBDaGFuZ2UgKHNwKSB0byAoJDMwKS4KKworCSogcGEuaCAoVFJBTVBPTElORV9URU1QTEFURSk6IENoYW5nZSAubG9uZyB0byAud29yZDsgc3BsaXQgaW50bworCXR3byBsaW5lcy4KKworRnJpIE1heSAxNCAxODowOTozMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChvcHRpb25fbWFwKTogUmVuYW1lZCAtLXZlcnNpb24gdG8gLS11c2UtdmVyc2lvbi4KKworRnJpIE1heSAxNCAxNzoyMDoyMSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHhjb2Zmb3V0LmMgKE5fRFNMSU5FLCBOX0JTTElORSk6IERlbGV0ZSBkZWZpbml0aW9ucy4KKwkoc3RhYl90b19zY2xhc3MpOiBVc2UgaWZkZWZzIHRvIHRlc3QgZm9yIHByZXNlbmNlIG9mIE5fTUFJTiwKKwlOX0JTTElORSwgTl9EU0xJTkUsIE5fQklOQ0wsIE5fRUlOQ0wsIE5fRVhDTCwgTl9NMkMsIE5fU0NPUEUuCisKKwkqIHNjaGVkLmMgKHNwbGl0X2hhcmRfcmVnX25vdGVzKTogSGFuZGxlIDB0aCBzdWIgcmVnaXN0ZXIsIGFuZAorCW11bHRpcGxlIHJlZ2lzdGVyIGtpbGxzLgorCSh1cGRhdGVfZmxvd19pbmZvKTogRm9yIG11bHRpLXdvcmQgaGFyZCByZWdzLCB1c2UKKwlzcGxpdF9oYXJkX3JlZ19ub3RlcyB0byBhZGQgYWxsIFJFR19ERUFEIG5vdGVzLCBpbnN0ZWFkIG9mIGp1c3QKKwl0aGUgYWRkaXRpb25hbCBvbmVzIGR1ZSB0byBzcGxpdHRpbmcuCisKK0ZyaSBNYXkgMTQgMTY6MTI6MjggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlIChocHBhMS4xLSotaHB1eCopOiBVc2UgQ1BJTyBmb3IgaGVhZGVycywganVzdCBsaWtlCisJb3RoZXIgSFBVWCBjb25maWdzLgorCShocHBhMS4xLSotaHB1eDguMDIqKTogTGlrZXdpc2UuCisKK0ZyaSBNYXkgMTQgMTY6MzU6MjIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogSWYgdHJ5X3NwbGl0IHNwbGl0IG5ld190aHJlYWQsCisJdXBkYXRlIGl0IHRvIHRoZSBuZXcgdmFsdWUuCisKK0ZyaSBNYXkgMTQgMTM6NDI6MzkgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaHA3MDAtaHB1eDguMDIpOiBOZXcgdGFyZ2V0LgorCSogcGExLW9sZGFzLmg6IE5ldyB0YXJnZXQgZm9yIDEuMSBtYWNoaW5lcyBydW5uaW5nIEhQVVggOC4wMi4KKworRnJpIE1heSAxNCAxMzoyMzo1MSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IG1hcC0+aW50ZWdyYXRpbmcuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCBjYXNlIE1FTSk6IERvbid0IGNvcHkgUlRYX1VOQ0hBTkdJTkdfUAorCXdoZW4gZG9pbmcgZnVuY3Rpb24gaW5saW5pbmcuCisJKiBpbnRlZ3JhdGUuaCAoc3RydWN0IGlubGluZV9yZW1hcCk6IEFkZCBpbnRlZ3JhdGluZyBmaWVsZC4KKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IENsZWFyIG1hcC0+aW50ZWdyYXRpbmcuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogRG9uJ3Qgc2V0IFJUWF9VTkNIQU5HSU5HX1AuCisKK0ZyaSBNYXkgMTQgMTI6Mjg6NTEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkZWZhdWx0X2NvbnZlcnNpb24pOgorCURvbid0IHJlcGxhY2UgaXRlcmF0b3Igd2l0aCBpdHMgaW5pdGlhbCB2YWx1ZS4KKworCSogY29uZmlnL2kzODYvc3ZyM2dhcy5oOiBBZGRlZCB0d28gcGFnZXMgYXQgZW5kLCB3aXRoIG1hY3JvcworCWNvcGllZCBmcm9tIGNvbmZpZy9zdnIzLmggYW5kIGkzODYvc3lzdjMuaC4KKworCSogY29uZmlnL202OGsvdG93ZXItYXMuaCAoUFJJTlRfT1BFUkFORCk6IEhhbmRsZSBDT0RFID09ICcvJy4KKwkqIGhwMzIwLmgsIG1vdDMzMDAuaCwgbmV3cy5oLCBjcmRzLmg6IExpa2V3aXNlLgorCitGcmkgTWF5IDE0IDE1OjQ0OjQ1IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQHhpdi5pZXNkLmF1Yy5kaykKKworICAgICAgICAqIG9iamMvaW5pdC5jIChfX29iamNfaW5pdF9wcm90b2NvbHMpOiBEb24ndCBjb21wbGFpbiBpZiBhCisJcHJvdG9jb2wgb2JqZWN0IGlzIGF0dGVtcHRlZCByZXNvbHZlZCB0d2ljZS4gIAorCitGcmkgTWF5IDE0IDAwOjUxOjM4IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChDUFBfU1BFQyk6IENvcnJlY3Qgc3BlY3Mgc28gdGhhdCBfUEFfUklTQzFfMSBpcyBvbmx5CisJZGVmaW5lZCB3aGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgMS4xIG1hY2hpbmVzIHJlZ2FyZGxlc3Mgb2YgdGhlCisJZGVmYXVsdCB0YXJnZXQuCisKK1RodSBNYXkgMTMgMjE6NDc6NTUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLm1kIChmaXhfdHJ1bmNkZnNpMiwgZml4dW5zX3RydW5jZGZzaTIsIHRydW5jX2NhbGwpOiBGaXgKKwl0eXBvIGluIG1vZGUgb2YgRklYIGFuZCBVTlNJR05FRF9GSVggcnRsLgorCisJKiByZW9yZy5jIChyZW9yZ19yZWRpcmVjdF9qdW1wKTogTmV3IGZ1bmN0aW9uLgorCUNhbGwgaXQgaW4gbW9zdCBwbGFjZXMgaW5zdGVhZCBvZiByZWRpcmVjdF9qdW1wLgorCitUaHUgTWF5IDEzIDE3OjAxOjA1IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogY2FsbGVyLXNhdmUuYyAocmVzdG9yZV9yZWZlcmVuY2VkX3JlZ3MpOiBOZXcgdmFyaWFibGUgc2F2ZXJlZ3MKKwl3aGljaCBpcyBudW1iZXIgb2YgcmVncyB0byBzYXZlIGF0IGEgdGltZSwgaW5zdGVhZCBvZiBudW1yZWdzLAorCXdoaWNoIGlzIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcnMgdG8gc2F2ZS4KKworVGh1IE1heSAxMyAwODoyODoyMiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChPQkpDLCBPQkpFQ1RJVkUtQyk6IERvbid0IGRlcGVuZCBvbiBvYmpjLXJ1bnRpbWUuCisKKwkqIGRieG91dC5jIChkYnhvdXRfcGFybXMpOiBEb24ndCBvdXRwdXQgYSBwYXJtIGlmIGl0J3MgYSBtZW0KKwl0aGF0IGhhcyBhIGNvbnN0YW50IGFkZHJlc3MuCisKKwkqIGNvbmZpZy9wYS94LXBhIChUQVJPVVRPUFRTKTogT3ZlcnJpZGRlbi4KKwkqIGNvbmZpZy9tNjhrL3gtaHAzMjAseC1ocDMyMGcgKFRBUk9VVE9QVFMpOiBPdmVycmlkZGVuLgorCisJKiBNYWtlZmlsZS5pbiAoVEFST1VUT1BUUyk6IE5ldyB2YXJpYWJsZS4KKwkoaW5zdGFsbC1oZWFkZXJzLXRhcik6IFVzZSBUQVJPVVRPUFRTLgorCisJKiAzYjEuaCwgM2IxZy5oLCBhbHRvczMwNjguaCwgY3Jkcy5oLCBocDJic2QuaCwgaHAzMTAuaDoKKwkqIGlzaS1uZnAuaCwgcGJiLmgsIHBsZXh1cy5oLCBzdW4yLmgsIHN1bjNuLmgsIHRvd2VyLmg6CisJKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IFJlZGVmaW5lIGFzIDY0LgorCisJKiBvYmpjL3J1bnRpbWUuaDogSW5jbHVkZSBnc3RkYXJnLmggYmVmb3JlIHN0ZGlvLmguCisKKwkqIE1ha2VmaWxlLmluIChsaWJvYmpjLmEpOiBEZXBlbmQgb24gRVhUUkFfUEFSVFMuCisKK1dlZCBNYXkgMTMgMTg6MzM6MjYgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQG5hZGEua3RoLnNlKQorCisJKiBhcm0uaDogRGVjbGFyZSBvdXRwdXRfYXJpdGhtZXRpY193aXRoX2ltbWVkaWF0ZV9tdWx0aXBseS4KKworICAgICAgICAqIGFybS5tZCAoY29tYmluZWQgbXVsdC9hcml0aG1ldGljIHJlY29nbml6ZXJzKTogU3dpdGNoIG9uLgorCUFkZCBzcGVjaWFsIHBhdHRlcm4gZm9yIHJlbG9hZC4KKworCSogYXJtLm1kIChyZXN0b3JlaGkpOiBVc2UgU0ltb2RlIGZvciBhZGRyZXNzLgorCShzdG9yZWhpKTogVXNlIFNJbW9kZSBmb3IgYWRkcmVzcyBhbmQgYWRkcmVzcyBjb21wdXRhdGlvbi4KKwkoc3RvcmVpbnRoaSk6IExpa2V3aXNlLgorCitXZWQgTWF5IDEyIDIyOjQ3OjM1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL202OGsvc3VuMy5oLCBzdW4yb3M0LmggKEFTTV9PVVRQVVRfRkxPQVRfT1BFUkFORCk6CisJT3V0cHV0IGFzIGhleCwgdW5sZXNzIENPREUgaXMgJ2YnLgorCSogYWx0b3MzMDY4LmgsIG5leHQuaCAoQVNNX09VVFBVVF9GTE9BVF9PUEVSQU5EKTogTGlrZXdpc2UuCisKK1dlZCBNYXkgMTIgMTQ6MTg6MzYgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5oIChSRUdfT0tfRk9SX0JBU0VfUCBSRUdfT0tfRk9SX0lOREVYX1ApOiBEb24ndAorCXVzZSBleHRlbmRlZCByZWdpc3RlcnMgZm9yIGJhc2Ugb3IgaW5kZXguCisKK1dlZCBNYXkgMTIgMTQ6NDg6MDAgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBEZWxldGUgTWF5IDEwIGNoYW5nZS4KKworVHVlIE1heSAxMSAyMDoyMDo0MSAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHRyZWUuYyAocmVhbF92YWx1ZV9mcm9tX2ludF9jc3QpOiBVc2UgdGVtcG9yYXJ5IHZhcmlhYmxlIGBlJyB0bworCXdvcmsgYXJvdW5kIGJ1Z3MgaW4gMzg2IFBDQy4KKworVHVlIE1heSAxMSAxNjo1MDo1NCAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy9pcmlzMy5oLCBtaXBzL21pcHMuaCwgbWlwcy9uZXdzNC5oLCBtaXBzL253czMyNTB2NC5oLAorCW1pcHMvdWx0cml4LmggKEFTTV9TUEVDKTogUGFzcyBhcHByb3ByaWF0ZSAtZzxuPiBzd2l0Y2ggdG8gdGhlCisJYXNzZW1ibGVyIGZvciAtZ3N0YWJzPG4+LCAtZ3N0YWJzKzxuPiwgLWdnZGI8bj4sIGFuZCAtZ2NvZmY8bj4KKwlzd2l0Y2hlcy4KKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBEb24ndCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlci4KKworVHVlIE1heSAxMSAxMjowOTozNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAoYnVpbGRfYXJyYXlfdHlwZSk6IERlbGV0ZSB0aGUgY29kZSB0byBzZXQgVFlQRV9NQUlOX1ZBUklBTlQuCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IExpa2V3aXNlLgorCitUdWUgTWF5IDExIDExOjQwOjE0IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBIYW5kbGUgc2Vjb25kYXJ5IHJlbG9hZHMgZm9yIGxvYWRzIG9mCisJRlAgcmVnaXN0ZXJzIGZyb20gY29uc3RhbnQgZXhwcmVzc2lvbnMuCisKKwkqIHBhLmggKENPTlNUQU5UX0FERFJFU1NfUCk6IEFjY2VwdCBzeW1ib2xpYyBhZGRyZXNzZXMgZHVyaW5nCisJYW5kIGFmdGVyIHJlbG9hZC4KKworVHVlIE1heSAxMSAwNzoyNjowNiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZW9yZy5jIChtb3N0bHlfdHJ1ZV9qdW1wKTogSnVtcCBpcyBmb3J3YXJkIGlmIFRBUkdFVF9MQUJFTCBpcworCXplcm87IGRvbid0IHRyeSB0byBnZXQgSU5TTl9DT0RFIG9mIHplcm8uCisKK1R1ZSBNYXkgMTEgMDA6NDQ6MDkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmMgKGJ1aWxkX2FycmF5X3R5cGUpOgorCURvbid0IGNoYW5nZSBUWVBFX01BSU5fVkFSSUFOVCBpZiBpbmNvbXBsZXRlIChkb21haW4gbm90IGtub3duKS4KKworCSogcmVhbC5jIChlbmFuKTogQWRkIGZvcndhcmQgZGVjbC4KKworTW9uIE1heSAxMCAyMDozMjoxMiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IENvcHkgUkVHX05PVEVTIGR1cmluZyBtYWluIGxvb3AKKwlpbnN0ZWFkIG9mIGFmdGVyd2FyZHMuCisKK01vbiBNYXkgMTAgMTc6MzY6MzEgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmx4aXNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jIChvdXRwdXRfZXBpbG9nKTogRml4IG1pbm9yIGVycm9yIGluIGluc3RydWN0aW9ucyB1c2VkCisJdG8gcmVzdG9yZSBzdGFjayBwb2ludGVyLgorCitNb24gTWF5IDEwIDE1OjU5OjQxIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLXRmaWxlLmMgKHBhcnNlX2RlZik6IERvIG5vdCBleGVjdXRlIGEgZGl2aXNpb24gYnkgMCB3aGVuCisJcHJvY2Vzc2luZyBhIGRvdWJseSBkaW1lbnNpb25lZCBhcnJheSB3aG9zZSBvdXRlciBib3VuZCB3YXMgMCBvcgorCW5vdCBzcGVjaWZpZWQuCisKK01vbiBNYXkgMTAgMTI6MTQ6MDcgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5oIChUUkFNUE9MSU5FX1RFTVBMQVRFKTogRml4ZWQgaW52YWxpZCBic3IgaW5zbi4KKworTW9uIE1heSAxMCAxMTo1NToxOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHByb3RvaXplLmM6IERvbid0IGluY2x1ZGUgc3RyaW5nLmguCisJKHN0cmNhdCwgc3RyY3B5LCBzdHJjbXAsIHN0cm5jcHksIHN0cm5jbXApOiBEZWNscyBkZWxldGVkLgorCShkdXBuc3RyKTogRG9uJ3QgdXNlIHJldHVybiB2YWx1ZSBvZiBzdHJuY3B5LgorCShkdXBzdHIpOiBGdW5jdGlvbiBkZWxldGVkOyBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlIHNhdmVzdHJpbmcuCisKKwkqIHRyZWUuYyAoY2hhbmdlX21haW5fdmFyaWFudCk6IE5ldyBmdW5jdGlvbi4KKwkoYnVpbGRfYXJyYXlfdHlwZSk6IFVzZSB0aGF0IHRvIHNldCB0aGUgVFlQRV9NQUlOX1ZBUklBTlQuCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IENhbGwgY2hhbmdlX21haW5fdmFyaWFudC4KKworTW9uIE1heSAxMCAxMTo1MzowMiAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzaC5tZCAobW92c3Ryc2kpOiBUYWtlIGFsaWdubWVudCBpbnRvIGFjY291bnQuCisJKiBzaC5jIChzaGlmdF92YWx1ZV9vayk6IENhbid0IHNoaWZ0IGJ5IG5lZ2F0aXZlIHZhbHVlcy4KKworTW9uIE1heSAxMCAxMTo0OTo0OCAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogdmEtbWlwcy5oICh2YV9hcmcpOiBVc2UgX19hbGlnbm9mX18gaW5zdGVhZCBvZiBfX2FsaWdub2YuCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoIGZ1bmN0aW9uKTogQWRkIG1pc3NpbmcgJzsnLgorCitNb24gTWF5IDEwIDAwOjU0OjE2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy9ydW50aW1lLmg6IEluY2x1ZGUgZ3N0ZGFyZy5oLCBub3Qgc3RkYXJnLmguCisKKwkqIGxpYmdjYzIuYyAoX19mbG9hdGRpc2YpOiBVc2UgREZ0eXBlIGZvciBpbnRlcm1lZGlhdGUgdmFsdWVzLgorCisJKiB0cmVlLmMgKHJlYWxfdmFsdWVfZnJvbV9pbnRfY3N0KToKKwlJZiBJIGlzIHVuc2lnbmVkLCB1c2UgUkVBTF9WQUxVRV9GUk9NX1VOU0lHTkVEX0lOVC4KKworCSogY29uZmlnL202OGsvbTY4ay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2Ugb3BlcmFuZCAwIHRvIGdldCBTSVpFLgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBTZXQgZ29hbF9tZW1fYWRkcl92YXJpZXMKKwlmb3IgYWxsIGJ1dCB0cnVlIGNvbnN0YW50IGFkZHJlc3Nlcy4KKworU3VuIE1heSAgOSAxNzo1Mzo1MiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChTSVpFX1RZUEUpOiBEZWxldGVkLgorCisJKiBmaXhpbmNsdWRlczogV2hlbiBmaW5kaW5nIFNJWkVfVFlQRSwgY2QgdG8gJHtMSUJ9IHRvIHJ1biBjYy4KKwkobWVtb3J5LmgpOiBEb24ndCB0cnkgdG8gcmVhZCBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorCisJKiByZWFsLmMgKE5BTik6IERlZmluZSBmb3Igc3VwcG9ydCBvZiBOb3QtYS1OdW1iZXIgYml0IHBhdHRlcm5zLgorCShtYWtlX25hbik6IE5ldyBmdW5jdGlvbiBvdXRwdXRzIGEgTmFOIGluIHJlcXVlc3RlZCBtYWNoaW5lIG1vZGUuCisJKGVpc25hbiwgZWlpc25hbiwgZW5hbiwgZWluYW4sIGVpaXNpbmYsIGVpaW5maW4pOiBOZXcgZnVuY3Rpb25zLgorCShlYXJpdGgsIGV0cnVuY2ksIGV0cnVuY3VpLCBlcmVhbF9uZWdhdGUsIGVyZWFsX2xkZXhwLAorCXJlYWxfdmFsdWVfdHJ1bmNhdGUsIGVzdWIsIGVhZGQsIGVtdWwsIGVkaXYsIGVyZW1haW4pOgorCVJldHVybiBOYU4gYXJnIGJhY2sgdG8gY2FsbGVyLgorCShlcm91bmRpLCBlcm91bmR1aSwgZXJlYWxfdG9faW50KTogTmFOIHRvIGludGVnZXIgcmV0dXJucyAtMQorCWFuZCBhIHdhcm5pbmcuCisJKHRhcmdldF9pc25hbik6IENoZWNrIGZvciBOYU4uCisJKGVuZWcpOiBOby1vcCBpZiBOYU4uCisJKGVpc25lZywgZWlzaW5mKTogRmFsc2UgaWYgTmFOLgorCShlbW92aSwgZW1vdm8pOiBIYW5kbGUgTmFOIGNvbnZlcnNpb25zLgorCShlc3ViLCBlYWRkKTogSW5maW5pdHkgbWludXMgaW5maW5pdHkgPSBOYU4gYW5kIElOVkFMSUQgd2FybmluZy4KKwkoZWRpdik6IDAvMCwgaW5mL2luZiA9IE5hTiBhbmQgSU5WQUxJRCB3YXJuaW5nLgorCShlbXVsKTogMCAqIGluZiA9IE5hTiBhbmQgSU5WQUxJRCB3YXJuaW5nLgorCShlMjR0b2UsIGU1M3RvZSwgZTY0dG9lKTogR2VuZXJhdGUgZS10eXBlIE5hTiBmb3IgTmFOIGlucHV0LgorCShldG9lMjQsIGV0b2U1MywgZXRvZTY0KTogT3V0cHV0IE5hTiBpbiBhcHByb3ByaWF0ZSBtYWNoaW5lIG1vZGUuCisJKGVjbXApOiBVbm9yZGVyZWQgY29tcGFyZSByZXR1cm5zIC0yLgorCShldG9hc2MpOiBOYU4gcHJvZHVjZXMgQVNDSUkgc3RyaW5nICJOYU4iLgorCShhc2N0b2UpOiBVbnJlY29nbml6YWJsZSBpbnB1dCBwcm9kdWNlcyBlLXR5cGUgTmFOLgorCShlcmVtYWluKTogeCBSRU0geSA9IE5hTiBpZiB5ID0gMCBvciB4ID0gaW5maW5pdHkuCisKKwkqIHJlYWwuYyAobXRoZXJyKTogRG9uJ3QgcHV0IG5ld2xpbmVzIGluIGVycm9yIG1lc3NhZ2Ugc3RyaW5nLgorCisJKiByZWFsLmggKFJFQUxfVkFMVUVTX0xFU1MpOiBUcnVlIGlmIHJldHVybiB2YWx1ZSBvZiBlcmVhbF9jbXAgaXMgLTEuCisKK1N1biBNYXkgIDkgMTc6MzQ6MDYgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmVuJ3QgZ290IGEKKwljdXJyZW50X2Z1bmN0aW9uX2RlY2wuCisKKwkqIGNwLXB0LmMgKHRzdWJzdCk6IERvbid0IGFzc2VydCBpZiBJTl9ERUNMIGlzIG51bGwuCisJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgorCisJKiBjcC10eXBlMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBGaXggYXJndW1lbnQgcGFzc2luZyB0bworCWluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3AuCisKK1N1biBNYXkgIDkgMTA6NDc6MDUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6CisJTWFrZSBtYXhpbmRleCAtMSBmb3IgZW1wdHkgY29uc3RydWN0b3IuCisKKwkqIGk4NjAuYyAoY2FsbF9pbnNuX29wZXJhbmQpOiBOZXcgZnVuY2lvbi4KKwkqIGk4NjAubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBDb3B5IGZuIGFkZHJlc3MgdG8gc2FmZSByZWcgaWYgbmVjZXNzYXJ5LgorCShjYWxsLCBjYWxsX3ZhbHVlIG1hdGNoZXJzKTogVXNlIGNhbGxfaW5zbl9vcGVyYW5kIGFzIHByZWRpY2F0ZS4KKworCSogY29uZmlnL21pcHMvbWlwcy5jIChjYWxsX2luc25fb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGNvbmZpZy9taXBzL21pcHMubWQgKGNhbGxfaW50ZXJuYWwxLCBjYWxsX3ZhbHVlX2ludGVybmFsMSk6CisJVXNlIGNhbGxfaW5zbl9vcGVyYW5kIGFzIHByZWRpY2F0ZS4KKwkoY2FsbCwgY2FsbF92YWx1ZSk6IENvcHkgZm4gYWRkcmVzcyB0byBzYWZlIHJlZyBpZiBuZWNlc3NhcnkuCisKKwkqIGNvbmZpZy9tNjhrL202OGsubWQgKG11bGhpc2kzLCB1bXVsaGlzaTMgbWF0Y2hlcnMpOgorCVJlc3RyaWN0IHJhbmdlIG9mIGNvbnN0YW50cyBhbGxvd2VkLgorCitTdW4gTWF5ICA5IDEzOjMxOjM1IDE5OTMgQ0VUICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKworICAgICAgICAqIG9iamMvaGFzaC5oLCBvYmpjL29iamMuaCwgb2JqYy9zYXJyYXkuaCAoZ3N0ZGRlZi5oKTogCisgICAgICAgIENvbmRpdGlvbmFsbHkgaW5jbHVkZSBnc3RkZGVmLmggb3Igc3RkZGVmLmggYnkgSU5fR0NDLgorCitTdW4gTWF5ICA5IDAwOjUxOjMzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmg6IEZpeCB1bnRlcm1pbmF0ZWQgY29tbWVudC4KKworCSogb2JqYy1hY3QuYyAoc3RyaW5nX3NlY3Rpb24pOiBEZWxldGUgY29tbWEgYmVmb3JlIGNsb3NlLWJyYWNlLgorCitTYXQgTWF5ICA4IDIzOjQ5OjUwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2kzODYvaTM4Ni5jIChjYWxsX2luc25fb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGkzODYubWQgKGNhbGwgbWF0Y2hlcnMpOiBVc2UgY2FsbF9pbnNuX29wZXJhbmQuCisJKGNhbGwgZXhwYW5kZXJzKTogSWYgYWRkcmVzcyB1c2VzIGEgdmlydHVhbCByZWcgb3IgYXJnIHBvaW50ZXIgcmVnLAorCWNvcHkgaXQuCisKK1NhdCBNYXkgIDggMjM6MTk6MTEgMTk5MyAgS2F2ZWggUi4gR2hhemkgIChnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1KQorCisJKiBjb25maWd1cmUgKG04OGstdGVrdHJvbml4LXN5c3YzKTogTmV3IHRhcmdldC4KKwkqIGNvbmZpZy9tODhrL3Rla1hEODguaDogTmV3IGZpbGUuCisJKiBjb25maWcvbTg4ay90ZWtYRDg4LmxkOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy9tODhrL3gtdGVrWEQ4ODogTmV3IGZpbGUuCisKK1NhdCBNYXkgIDggMTA6NDA6NTQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni9pMzg2Lm1kIChjYWxsIGluc24gbWF0Y2hlcnMpOgorCVVzZSAlYSB0byBwcmludCBhIG1lbSdzIG5vbi1jb25zdGFudCBhZGRyZXNzOworCWRvbid0IHRyeSB0byBwcmludCB0aGUgYWRkcmVzcyBieSBpdHNlbGYuCisKKwkqIGNvbmZpZy9pMzg2L25leHQuaCAoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMKQorCShBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKTogRG9uJ3QgaW5jbHVkZSBhIGAuJyBpbiB0aGUgbGFiZWwgbmFtZS4KKwkoTFBSRUZJWCk6IExpa2V3aXNlLgorCisJKiBtNjhrLmMgKHByaW50X29wZXJhbmQpOiBGb3IgQ09OU1RfRE9VQkxFLCB0cmVhdCBWT0lEbW9kZSBsaWtlIERJbW9kZS4KKworCSogZXhwbWVkLmMgKGluaXRfZXhwbWVkKTogU3VwcGx5IG1pc3NpbmcgYXJnIHRvIHJ0eF9jb3N0LgorCisJKiBjb25maWcvY29udmV4L2NvbnZleC5oIChMSU5LX0xJQkdDQ19TUEVDSUFMXzEpOgorCURlZmluZSB0aGlzIGluc3RlYWQgb2YgTElOS19MSUJHQ0NfU1BFQ0lBTC4KKworU2F0IE1heSAgOCAxNDo0MzoyNyAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAbmFkYS5rdGguc2UpCisKKwkqIG02OGsubWQgKHVtdWxzaWRpMyBleHBhbmQgKyB0d28gbWF0Y2hlcnMpOiBSZXdyaXRlLgorCU9sZCBwYXR0ZXJucyBtaXN1c2VkIHN1YnJlZyBhbmQgbWF0Y2hlZCB3cm9uZyBpbW1lZGlhdGUgdmFsdWVzLgorCVVzZSBjb25zdF9pbnRfb3BlcmFuZCBhbmQgY29uc3RyYWludCBgbicgZm9yIHRoZSBpbW1lZGlhdGUgYXJnLgorCShtdWxzaWRpMyBwYXR0ZXJucyk6IExpa2V3aXNlLgorCitTYXQgTWF5ICA4IDA3OjA2OjE0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKyAgICAgICAgKiBpMzg2L3Njby5oIChWQUxVRV9SRUdOTywgSEFSRF9SRUdOT19NT0RFX09LKTogQWRkIG1pc3NpbmcgI3VuZGVmLgorICAgICAgICAqIGkzODYvc2NvLmgsIGkzODYvc2VxdWVudC5oIChIQVJEX1JFR05PX01PREVfT0spOiBQcm9wZXJseSBjaGVjaworICAgICAgICBmb3IgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgUmVnaXN0ZXIgMTYgaXMgQVAgYW5kIG5vdCBmbG9hdGluZy4KKworRnJpIE1heSAgNyAxOTo0Mzo0OSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChkZWZhdWx0X2NvbnZlcnNpb24pOiBEaXNhYmxlIGNoYW5nZSBvZiBBcHIgMTN0aCBmb3IKKwlub3csIHNpbmNlIGl0IHNlZW1zIHRvIGJlaGF2ZSBpbmNvcnJlY3RseSBpbiBzb21lIGNhc2VzLgorCitGcmkgTWF5ICA3IDE3OjM4OjIyIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKGFsbCBNSVBTIG9wdGlvbnMpOiBJZiAtLXdpdGgtZ251LWFzIGlzIHVzZWQsIGRvbid0CisJYnVpbGQgbWlwcy10ZmlsZSBvciBtaXBzLXRkdW1wLiAgSWYgLS13aXRoLWdudS1sZCBpcyB1c2VkLCBkb24ndAorCXNheSB3ZSBuZWVkIGNvbGxlY3QyLgorCShjb25maWcuc3ViIHJ1bik6IEV4cGxpY2l0bHkgaW52b2tlIC9iaW4vc2ggdG8gcnVuIHNjcmlwdCwgaW4gY2FzZQorCWNvbmZpZy5zdWIgaGFkIGl0J3MgZXhlY3V0ZSBiaXRzIHR1cm5lZCBvZmYuCisKKwkqIG1pcHMvdC1taXBzLWdhczogTmV3IHRhcmdldCBmaWxlLCB1c2VkIHdoZW4gdGhlIEdOVSBhc3NlbWJsZXIgaXMKKwl1c2VkIGluc3RlYWQgb2YgdGhlIE1JUFMgYXNzZW1ibGVyLgorCitGcmkgTWF5ICA3IDE3OjQxOjAwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGZsb2F0LmgtbmF0KTogVXNlIHRtcC1mbG9hdC5oIGFzIGludGVybWVkaWF0ZSBmaWxlLgorCitGcmkgTWF5ICA3IDEzOjQyOjA2IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAcG9zZWlkb24uY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKG1pX3ZlbnRyeSk6IENoYW5nZSBpbnRvIGEgc3RydWN0IHRvIG1ha2UgY29kZSBtb3JlCisJcmVhZGFibGUgYW5kIHRvIHNodXQgdXAgY29tcGlsZXJzIGFib3V0IHZhbGlkIEFOU0kgQyBjb2RlLgorCitGcmkgTWF5ICA3IDEzOjE1OjQwIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChyZWdfY2xhc3MpOiBBZGQgbmV3IE5PTl9TSElGVF9SRUdTIGNsYXNzLgorCShSRUdfQ0xBU1NfTkFNRVMpOiBOYW1lIG5ldyBjbGFzcyAiTk9OX1NISUZUX1JFR1MiLgorCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBJbml0aWFsaXplIE5PTl9TSElGVF9SRUdTLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEhhbmRsZSBjYXNlIHdoZXJlIGxvb3BfZW5kIGlzIHRoZQorCWVuZCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4KKworRnJpIE1heSAgNyAwNTo1MDozOSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBEb24ndCB1c2UgSU4gYXMgdGhlIHJlbG9hZCByZWcgaW4gaW4tb3V0CisJcmVsb2FkIGlmIGl0IGlzIHNldCBlbHNld2hlcmUgaW4gdGhlIGluc24uCisKK0ZyaSBNYXkgIDcgMDQ6NDg6MjUgMTk5MyAgQ2hyaXMgU21pdGggIChjc21pdGhAY29udmV4LmNvbSkKKworCSogeC1jb252ZXggKENDTElCRkxBR1MpOiBCdWlsZCBsaWJnY2MxIHdpdGggLXRtIGMxIHNvIGl0IGNhbid0CisJY2F1c2UgZXhlY3V0YWJsZXMgdG8gYmVjb21lIGMyLW9ubHkuCisKKwkqIHhtLWNvbnZleC5oOiBSZW1vdmUgd29ya2Fyb3VuZHMgZm9yIE9TIDguMCBubyBsb25nZXIgbmVlZGVkLgorCShiY29weSwgYnplcm8pOiBEZWZpbmUgdG8gdXNlIG1lbWNweSBhbmQgbWVtc2V0LCB0byBnZXQgdGhlbSBpbmxpbmVkLgorCisJKiBjb252ZXhbMTIzKl0uaCAoQ0MxX1NQRUMsIENQUF9TUEVDLCBMSUJfU1BFQyk6IE1vdmUgdG8gY29udmV4LmguCisKKwkqIGNvbnZleC5oIChUQVJHRVRfRkxBR1MpOiBBZGQgLW12b2xhdGlsZS1bbm9dY2FjaGUuCisJKFRBUkdFVF9GTEFHUywgTE9OR19UWVBFX1NJWkUpOiBhZGQgLW1sb25nezMyLDY0fS4KKwkodGFyZ2V0X2NwdSk6IERlZmluZSwgZW51bWVyYXRpb24gZm9yIHRhcmdldHMgdG8gdXNlIGluc3RlYWQgb2YgZmxhZ3MuCisJKFRBUkdFVF9DMzQsIFRBUkdFVF9DMzgpOiBBZGQuICBUaGVzZSBkb24ndCBzY2hlZHVsZSB0aGUgc2FtZSBhcyBDMi4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IENhbGwgaW5pdCByb3V0aW5lIGluIGNvbnZleC5jLgorCShDUFBfU1BFQywgQVNNX1NQRUMsIExJTktfU1BFQyk6IElmIG9yaWdpbmFsbHkgYm9vdHN0cmFwcGVkIHdpdGggCisJYW4gaWVlZSBjb21waWxlciwgcHJvZHVjZSBhbiBpZWVlIGdjYy4KKwkoTElOS19MSUJHQ0NfU1BFQ0lBTCk6IERlZmluZSwgdG8gYXZvaWQgc2VhcmNoaW5nIG9sZCBsaWJnY2MuYQorCXZlcnNpb25zIGR1cmluZyBib290c3RyYXAuCisJKFNUQUNLX0JPVU5EQVJZKTogQ2hhbmdlIGZyb20gMzIgdG8gNjQgLS0gb2RkLXdvcmQgYWxpZ25lZAorCWxvbmd3b3JkcyBhcmUgc2xvdyBvbiBjMzQuCisJKEZVTkNUSU9OX1BST0xPR1VFKTogTWFrZSBmcmFtZSBzaXplIGEgbXVsdGlwbGUgb2YgOCwgbm90IDQuCisJKEZVTkNUSU9OX0VQSUxPR1VFKTogT3V0cHV0IGEgMCB0byB0ZXJtaW5hdGUgYzM0IGljYWNoZSBwcmVmZXRjaC4KKwkoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IE1ha2UgYSBtdWx0aXBsZSBvZiA4LgorCShSRUdfQUxMT0NfT1JERVIpOiBEZWZpbmUuICBQdXQgUzAgKHRoZSByZXR1cm4gcmVnaXN0ZXIpIGxhc3QuCisJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IFJld3JpdGUgdG8gbWFrZSBjbGVhcmVyLgorCShNT0RFU19USUVBQkxFX1ApOiBSZXdyaXRlIHRvIG1ha2UgY2xlYXJlci4KKwkoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFJld3JpdGUgdG8gbWFrZSBjbGVhcmVyLgorCShTMF9SRUdOVU0sIEEwX1JFR05VTSk6IERlZmluZS4KKwkoKl9SRUdOVU0pOiBXcml0ZSBpbiB0ZXJtcyBvZiBbQVNdMF9SRUdOVU0gaW5zdGVhZCBvZiBhYnNvbHV0ZSBudW1iZXJzLgorCShlbnVtIHJlZ19jbGFzcywgZXRjKTogQWRkIFNJX1JFR1MgPT0gU19SRUdTICsgSU5ERVhfUkVHUy4KKwkoUkVHTk9fUkVHX0NMQVNTLCBSRUdfQ0xBU1NfRlJPTV9MRVRURVIsIFJFR05PX09LX0ZPUl8qX1ApOiBVc2UgdGFibGVzLgorCShDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBDaGFuZ2UuICBOZXcgZGVmIHBhc3NlcyBhbnkgY29uc3RfaW50LAorCXJlamVjdHMgYW55IGNvbnN0X2RvdWJsZS4KKwkoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IENoYW5nZS4gIE5ldyBkZWZzIGFyZSAnRycgPT0gbG93CisJd29yZCBhbGwgemVyb3MsICdIJyA9PSBoaWdoIHdvcmQgYWxsIHNpZ25zLgorCShFWFRSQV9DT05TVFJBSU5UKTogTmV3LiAnUScgPT0gdm9sYXRpbGUgbWVtcmVmLiAgVXNlZCB0byBnZW5lcmF0ZQorCWNhY2hlLWJ5cGFzcyBpbnN0cnVjdGlvbnMgd2hlbiAtbXZvbGF0aWxlLW5vY2FjaGUgaXMgc2V0LgorCShSRVRVUk5fUE9QU19BUkdTKTogQ2hhbmdlLCBhbHdheXMgdHJ1ZS4KKwkoRlVOQ1RJT05fQVJHX0FEVkFOQ0UpOiBDb3VudCBhcmdzLCBub3QgIyB3b3JkcyBvZiBhcmdzLgorCShGVU5DVElPTl9BUkcpOiBSZXR1cm4gYXJnIGNvdW50IHRvIHRoZSBmaW5hbCBWT0lEbW9kZSBGVU5DVElPTl9BUkcKKwloYWNrIHRoYXQgc3VwcGxpZXMgIm5leHQgYXJnIHJlZ2lzdGVyIiB0byBiZSBzdG9yZWQgaW4gY2FsbCBpbnNuLgorCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogVXNlIGluc3RydWN0aW9uIG5vdGF0aW9uIHJhdGhlciB0aGFuIGNvbnN0YW50cy4KKwkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogVXNlIGdlbl9jYWxsX3BvcC4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUmV3cml0ZSB0byBtYWtlIGNsZWFyZXIuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERvIG5vdCB1c2UgaW5kaXJlY3QgYWRkcmVzc2luZyAtLSB3aXRoCisJaW5zbiBzY2hlZHVsaW5nLCB0d28gbG9hZHMgY2FuIGJlIGZhc3RlciBhbmQgY2FuJ3QgYmUgc2xvd2VyLgorCShTTE9XX0JZVEVfQUNDRVNTKTogRGVmaW5lIHVubGVzcyBDMi4gIE1lbW9yeSBhY2Nlc3MgdG8gYnl0ZXMgaXMKKwlub3QgYWN0dWFsbHkgc2xvdywgYnV0IGZhc3RlciBwcm9jZXNzb3JzIGRvbid0IGZvcndhcmQgcGFydGlhbAorCXdvcmQgd3JpdGVzIHRvIHdvcmQgcmVhZHMsIGFuZCBzZXR0aW5nIFNMT1dfQllURV9BQ0NFU1MKKwltYWtlcyB0aGUgY29kZSBjb25zaXN0ZW50bHkgdXNlIHdvcmQgb3BzIHdoZXJlIHBvc3NpYmxlLgorCShDT05TVF9DT1NUUyk6IENvbnN0X0RPVUJMRSBjb3N0IGlzIHplcm8gLS0gaWYgaXQgYXBwZWFycywgaXQgaXMKKwlpbW1lZGlhdGUgYW5kIHRoZXJlZm9yZSBmcmVlLgorCShSVFhfQ09TVFMpOiBhcmVnK2NvbnN0IGlzIGZyZWUgKHZpYSBpbmRleGluZykuCisJKFJUWF9DT1NUUyk6IFByb3ZpZGUgdGFyZ2V0LWRlcGVuZGVudCB2YWx1ZXMgZm9yICosPDwsPj4KKwkoQUREUkVTU19DT1NUKTogWmVyby4gIEluZGlyZWN0IGFkZHJlc3NlcyBhcmUgbm8gbG9uZ2VyIHVzZWQuCisJKEFESlVTVF9DT1NUKTogRGVmaW5lLgorCShUQVJHRVRfRkxPQVRfRk9STUFUKTogRGVmaW5lIGFzIFZBWF9GTE9BVF9GT1JNQVQuICBBbHNvCisJYWNjdXJhdGVseSBkZXNjcmliZXMgdGhlIHNlbWFudGljcyAobm90IHRoZSBiaXQgcGF0dGVybikKKwlvZiBjb252ZXggaWVlZSBtb2RlLgorCShSRUFMX1ZBTFVFX0FUT0YpOiBEZWZpbmUsIHRvIHByZXZlbnQgcmVhbC5jIGZyb20gY29uc3RydWN0aW5nCisJdmF4IGRmbG9hdHMuICBBcHBhcmVudGx5IGl0IGRvZXNuJ3QgZG8gZ2Zsb2F0LgorCShDSEVDS19GTE9BVF9WQUxVRSk6IENhbGwgY29udmV4LmMuCisJKEFTTV9GSUxFX1NUQVJUKTogT3V0cHV0IGFwcHJvcHJpYXRlIC5mcG1vZGUgcHNldWRvIG9wLgorCShBU01fSURFTlRJRllfR0NDKTogT3VwdXQgYSB6ZXJvIGFmdGVyIGdjYzJfY29tcGlsZWQgdG8ga2VlcCBpdAorCWZyb20gaGlkaW5nIHRoZSByZWFsIG5hbWUgZnJvbSBwcm9maWxlcnMgYW5kIGFkYi4KKwkoQVNNX09VVFBVVF9ET1VCTEUsIF9GTE9BVCk6IFVzZSBoZXggdG8gYXZvaWQgL2Jpbi9hcyBjb252ZXJzaW9uIAorCWVycm9ycy4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IERlZmluZTsgY2FsbCBjb252ZXguYy4KKwkoUFJJTlRfT1BFUkFORCwgX0FERFJFU1MpOiBDYWxsIGNvbnZleC5jLgorCShFWElUX0JPRFkpOiBEZWZpbmUgZm9yIGxpYmdjYzIuICBDYWxsIGF0ZXhpdCBoYW5kbGVyIGlmIHByZXNlbnQuCisJCisJY29udmV4Lm1kOiBBZGQgc2NoZWR1bGluZyBpbmZvLgorCShtb3Z4eCk6IE9uZSBvZiB0aGUgb3BlcmFuZHMgbXVzdCBiZSBhIHJlZ2lzdGVyLgorCShtb3ZkZiwgbW92ZGkpOglBZGQgYW5vbnltb3VzIHBhdHRlcm5zIHRoYXQgY2FuIGxvYWQgYW4gYXJiaXRyYXJ5IAorCWNvbnN0X2RvdWJsZSBieSBkb2luZyB0d28gaW1tZWRpYXRlIGxvYWRzLiAgVGhpcyBpcyBub3Qgc3VwZXJpb3IKKwl0byBsb2FkaW5nIGl0IGZyb20gbWVtb3J5LCBhbmQgY2FuIGJlIHdvcnNlLCBzbyBMRUdJVElNQVRFX0NPTlNUQU5UX1AKKwlzdGlsbCByZWplY3RzIHRoZXNlIGNvbnN0YW50cywgYnV0IHRoZSBwYXR0ZXJucyBhcmUgc3RpbGwgdXNlZnVsCisJc28gcnR4IGZvbGRpbmcgY2FuIHByb2R1Y2UgYXJiaXRyYXJ5IHJlc3VsdHMuCisJKGZsb2F0dW5zZGlkZiwgZmxvYXR1bnNkaXNmKTogQWRkIHBhdHRlcm5zIHRoYXQgYXZvaWQgZG91YmxlIHJvdW5kaW5nLgorCShmbG9hdHVuc3NpZGYsIGZsb2F0dW5zc2lzZik6IEFkZCBwYXR0ZXJucyB0aGF0IG1pbWljIGdjYydzIGRlZmF1bHQKKwltZXRob2QsIHRvIGtlZXAgU0kgY3Z0cyBmcm9tIHByb21vdGluZyB0byB0aGUgYWJvdmUgREkgY3Z0cy4KKwkoZml4X3RydW5jZGZzaTIpOiBVc2UgY3Z0ZC5sIGV2ZW4gaWYgY3Z0ZC53IGlzIGF2YWlsYWJsZSAtLSBvbiBjMzQKKwljdnRkLncgaXMgbWljcm9jb2RlZCBhbmQgc2xvd2VyLgorCShhZGRxaTMsIHN1YnFpMywgbXVscWkzKTogY2FuIGRvIGltbWVkaWF0ZSB3aXRoIHdvcmQgaW5zbi4KKwkoc3Vic2kzKTogdXNlIHN1Yi9uZWcgdG8gZ2V0IHJldmVyc2Ugc3VidHJhY3QgKHJlZHVjZXMgcmVnIHNodWZmbGluZykuCisJKHVkaXZzaTMpOiBnaXZlIHVwIG9uIGhhdmluZyBzaWduX2V4cGFuZF9iaW5vcCBkbyB0aGlzOyBwZW9wbGUga2VlcAorCWJyZWFraW5nIGl0LiAgTWFudWFsbHkgZXh0ZW5kIHVuc2lnbmVkIFNJIHRvIHNpZ25lZCBESSwgdGhlbiBkaXZpZGUuCisJKHhzaGZ4eDMpOiBUaGUgb3B0aW9ucyByYW5rIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBtYWNoaW5lcywgc28gCisJc3BlbGwgdGhlbSBhbGwgb3V0IGFuZCBlbmFibGUgdGhlIGFwcHJvcHJpYXRlIG9uZXMgdW5kZXIgVEFSR0VUX0N4eC4KKwkoc3FydHh4Mik6IFB1dCB1bmRlciBmbGFnX2Zhc3RfbWF0aC4KKwkoc2lueHgyLCBjb3N4eDIpOiBJIGRvbid0IGtub3cgd2h5IHRoZXNlIGV4aXN0LCBidXQgdGhleSBkbywgc28gc3VwcGx5CisJdGhlbS4gIFRoZSBvdGhlciBtaWNyb2NvZGVkIGludHJpbnNpY3MgYXJlIGluIGNvbnZleCBtYXRoLmguCisJKHR4dHh4KTogUmVtb3ZlLCBubyBsb25nZXIgbmVjZXNzYXJ5LgorCShjbXBkaSk6IEFkZCBhbHRlcm5hdGl2ZSB0byBmYWtlICJlcS5sICMwLHNrIiB3aXRoICJuZWcubCBzayxzY3JhdGNoIi4KKwkoY21wcWkpOiBPbWl0LCBzZWVtcyB0byBwcm9kdWNlIG1hcmdpbmFsbHkgYmV0dGVyIGNzZSB0aGFuIHRoZSBvbGQgd2F5LgorCShjbXBzZik6IEF2b2lkIGNvbXBhcmUgYWdhaW5zdCAwLjAgaW4gaWVlZSBtb2RlLCBzaW5jZSAtMC4wIGlzIAorCXBvc3NpYmxlIGFuZCB3b3VsZCBjb25mdXNlIG9sZCB1Y29kZS4KKwkobW92c3Ryc2kpOiBBZGQuCisJKGFub24pOiBBZGQgcGF0dGVybnMgdG8gcGljayB1cCBvbiBkYnJhIG9wdGltaXphdGlvbnMgYW5kIGltcGxlbWVudCB0aGUKKwlzdWIvdGVzdCBwYXJ0LiAgKFRoaXMgb3B0aW1pemVzIG91dCB0aGUgY29tcGFyZSBhZ2FpbnN0IDAuKQorCShjYWxsLCBjYWxsX3ZhbHVlKTogVXNlIF9wb3AgZm9ybSBpbnN0ZWFkLCBhbmQgbGV0IGNvbnZleC5jIHJlcGxhY2UKKwl0aGUgcHVzaGVzIHdpdGggZnAgc3RvcmVzLgorCShlbmQpOiBQdXQgbG9jYWwgdmFyaWFibGUgbGlzdCBiYWNrLgorCisJY29udmV4LmMgKGluaXRfY29udmV4KTogTmV3LiBGaWxsIGluIHRhYmxlcyB1c2VkIGJ5IGNvbnZleC5oLgorCShwc3dfZGlzYWJsZV9mbG9hdCk6IE5ldy4gIFR1cm4gb2ZmIGZsb2F0IGV4Y2VwdGlvbiBlbmFibGVzIHRvCisJbWFrZSB0aGUgZW52aXJvbm1lbnQgbW9yZSBpZWVlLWxpa2UuCisJKHNldF9jbXApOiBDaGFuZ2UgbmFtZSB0byBvdXRwdXRfY21wLgorCShnZW5fY21wKTogQ2hhbmdlIG5hbWUgdG8gb3V0cHV0X2NvbmRqbXAuICBBZGQgaGFuZGxpbmcgZm9yCisJYG5lZy54JyBhcyBhIGZha2UgYGVxLnggIzAnIGFuZCBmb3Igb3B0aW1pemVkLW91dCBjb21wYXJlcworCXRoYXQgcmVhZCB0aGUgY2Fycnkgb2YgYSBwcmVjZWRpbmcgZGVjcmVtZW50LgorCShzaW1wbGlmeV9mb3JfY29udmV4KTogTmV3LiAgUmVwbGFjZSBhZGRyLSgtY29uc3QpIHdpdGgKKwlhZGRyK2NvbnN0IHNvIC9iaW4vYXMgd2lsbCBsaWtlIHRoZSBub3RhdGlvbi4KKwkoZXhwYW5kX21vdnN0cik6IE5ldy4gIEdlbmVyYXRlIHBpcGVsaW5lZCBsb2FkL3N0b3JlIHNlcXVlbmNlLgorCShhc21fZGVjbGFyZV9mdW5jdGlvbl9uYW1lKTogTmV3LiBPdXRwdXQgYXJnIGNvdW50IGZvciBkZWJ1Z2dlcnMuCisJKHByaW50X29wZXJhbmQpOiBNb3ZlZCBmcm9tIGNvbnZleC5oLiAgQWRkICV1IGFuZCAldiB0byBmZXRjaAorCXN1YndvcmRzIG9mIGEgQ09OU1RfRE9VQkxFLCAleiB0byB1c2UgaW4gcmVwbGFjaW5nIHNoaWZ0IGJ5IG11bC4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogTW92ZWQgZnJvbSBjb252ZXguaC4KKwkob3V0ZmxvYXQpOiBOZXcsIGNhbGwgUkVBTF9WQUxVRV9UT19ERUNJTUFMLgorCShyZXBsYWNlX2FyZ19wdXNoZXMpOiBOZXcuICBSZXBsYWNlIHNwIGJ5IGZwIGlmIHBvc3NpYmxlOyB0aGlzIGRvZXMKKwlub3QgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiBzcCBidXQgc3RvcmVzIGFyZSBmYXN0ZXIgdGhhbiBwdXNoZXMgb24KKwluZXcgbWFjaGluZXMuCisJKGVtaXRfYXBfb3B0aW1pemF0aW9ucyk6IE5ldy4gIERvIHNpbXBsZSBsaXZlIGFuYWx5c2lzIG9mIGFyZyBwb2ludGVyCisJcmVnaXN0ZXIgYW5kIGVsaW1pbmF0ZSBkZWFkIHJlbG9hZHMuCisJCisJbWF0aC1jb252ZXguaDogcmVtb3ZlZC4KKwlmaXhpbmMuY29udmV4OiBuZXcgZmlsZS4KKworVGh1IE1heSAgNiAyMjo1NDo0MyAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvd2UzMmsvd2UzMmsuaCAoQVNNX09VVFBVVF9BU0NJSSk6IAorCUNhc3QgUFRSIHRvIHVuc2lnbmVkIGNoYXIgKi4KKwkqIGNvbmZpZy9jbGlwcGVyL2NsaXguaCAoQVNNX09VVFBVVF9BU0NJSSk6IExpa2V3aXNlLgorCitUaHUgTWF5ICA2IDIwOjIwOjQxIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogU3RyaXAgYW55IG5vLW9wIGNhc3RzIG9mZiB0aGUKKwl2YWx1ZSBiZWZvcmUgd2UgdHJ5IHRvIGRvIGFueXRoaW5nIHdpdGggaXQuCisKKwkqIGNwLWNhbGwuYyAoY29udmVydF9oYXJzaG5lc3MpOiBUYWtlIHZvbGF0aWxpdHksIGluIGFkZGl0aW9uIHRvCisJY29uc3RuZXNzLCBpbnRvIGFjY291bnQgd2hlbiBmaWd1cmluZyBvdXQgdGhlIHBlbmFsdHkgZm9yIHRoZQorCXR5cGUgdW5kZXIgcXVlc3Rpb24uCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVbmRvIHVubmVlZGVkIGNoYW5nZSBvZiBBcHIgNiB3aGVuIHdlCisJcmV0dXJuZWQgdGhlIHR5cGUgb2YgdGhlIGxvY2FsIHR5cGVkZWYsIGluc3RlYWQgb2YgdGhlIHR5cGVkZWYgaXRzZWxmLgorCitUaHUgTWF5ICA2IDE5OjIxOjM0IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MsIGNhc2Uge1BSRSxQT1NUfV97SU5DLERFQ30pOiBBY2NvdW50CisJZm9yIFBVU0hfUk9VTkRJTkcuCisKK1RodSBNYXkgIDYgMTg6MTc6MTkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni9zZXF1ZW50LmggKERCWF9PVVRQVVRfTEJSQUMsIERCWF9PVVRQVVRfUkJSQUMpOgorCU92ZXJyaWRlIHRoZSB1c3VhbCBkZWZpbml0aW9ucy4KKworCSogb2JqYy9oYXNoLmgsIG9iamMvb2JqYy5oLCBvYmpjL3J1bnRpbWUuaCwgb2JqYy9zYXJyYXkuaDoKKwlVc2UgZ3N0ZGRlZi5oLCB3aXRoIGRvdWJsZXF1b3Rlcy4KKworVGh1IE1heSAgNiAxNTo1ODoxOCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBNb3JlIGZpeGVzIGZvciBJUklYIDQuMC4xLiAgUmF0aGVyIHRoYW4gcmVwbGFjaW5nCisJW15BLVpdQ1RSTCwgcmVwbGFjZSBbXkEtWl9dQ1RSTCBhbmQgW15BLVpdX0NUUkwuICBBbHNvIHBhdGNoCisJIi8vIiBpbiBlbGZfYWJpLmggd2hpY2ggdGhlIHNlZCBzY3JpcHQgYnJlYWtzLgorCitUaHUgTWF5ICA2IDEzOjU4OjM5IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY2xpeC5oOiBJbmNsdWRlICJjbGlwcGVyL2NsaXBwZXIuaCIgaW5zdGVhZCBvZiAiY2xpcHBlci5oIi4KKwkqIGNvbmZpZy5zdWIgKG9zKTogQWRkIC1jbGl4Ki4KKwkqIGNvbmZpZ3VyZSAoY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgpOiBBZGQgY2xpcHBlci8gZmlsZW5hbWUgcHJlZml4ZXMuCisKKwkqIGMtdHlwZWNrLmMgKHBvaW50ZXJfZGlmZik6IEVycm9yIGlmIG9wMSBpcyBwb2ludGVyIHRvIGluY29tcGxldGUKKwl0eXBlLgorCisJKiBmaXhpbmMuc3ZyNCAoc3lzL3ZhcmFyZ3MuaCk6IFJlcGxhY2UuCisKK1RodSBNYXkgIDYgMTE6NTg6MjggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQxLmMgKGZvcmdldF9vbGRfcmVsb2Fkc18xKTogQWNjZXB0IGFuZCBpZ25vcmUgMm5kIGFyZy4KKwkocmVsb2FkX2FzX25lZWRlZCk6IFBhc3MgdGhhdCBzZWNvbmQgYXJnLgorCisJKiBjLXBhcnNlLmluOiBGb3IgT2JqYywgZXhwZWN0IGp1c3QgMjAgY29uZmxpY3RzLgorCisJKiBvYmpjLWFjdC5jIChPQkpDX0dFTl9NRVRIT0RfTEFCRUwpOiBEbyB1c2UgQ0FUX05BTUUuCisKKwkqIGNvbmZpZy9pMzg2L2kzODYubWQgKGV4dGVuZHNpZGkyKTogVXNlIGNkcSBvciBjbHRkLCBub3QgY3d0bC4KKworICAgICAgICAqIGNvbmZpZ3VyZSAoaVszNF04Ni0qLWJzZCk6IERvbid0IHVzZSBjb2xsZWN0Mi4KKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IERvbid0IHVzZSBjb252ZXJ0X2FuZF9jaGVjaworCXdoZW4gaGFuZGxpbmcgYXJpdGhtZXRpYyB0eXBlcyBoZXJlLgorCisJKiBjLWNvbW1vbi5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBUdXJuIG9mZiBBcHIgMjkgY2hhbmdlLgorCitUaHUgTWF5ICA2IDA1OjQ0OjIzIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IERvbid0IGxvb2sgaW5zaWRlIGEgQ09OU1RfRE9VQkxFOworCXVzZSBvcGVyYW5kX3N1YndvcmQgaW5zdGVhZC4KKworCSogdmFyYXNtLmMgKHJlY29yZF9jb25zdGFudCk6IFByb3Blcmx5IG1ha2UgdGhlIGhlYWRlciBvZgorCWEgc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3IuCisKKwkqIGZ1bmN0aW9uLmMgKHdhbGtfZml4dXBfbWVtb3J5X3N1YnJlZyk6IEFkZCBuZXcgYXJnIFVOQ1JJVElDQUwuCisJKGZpeHVwX3Zhcl9yZWZzX2luc24pOiBDYWxsIHdpdGggVU5DUklUSUNBTCBvZiAxIHdoZW4gcHJvY2Vzc2luZworCVJFR19OT1RFUy4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBjYWxsIGNvbnZlcnRfdG9fbW9kZQorCXVubGVzcyB3ZSBuZWVkIHRvOyBzb21lIGNvbnZlcnN0aW9ucyBvZiBWT0lEbW9kZSBvYmplY3RzIGNhbgorCW1lc3MgdGhlbSB1cC4KKworCSogZXhwbWVkLmMgKHN0b3JlX3NwbGl0X2JpdF9maWVsZCk6IFByb3Blcmx5IGhhbmRsZSBWQUxVRSB3aGVuCisJaXQgaXMgYSBDT05TVF9ET1VCTEUuCisKKwkqIGZvbGQtY29uc3QuYyAoZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSk6IERvbid0IGRvIGFueXRoaW5nIGZvcgorCW5vbi1pbnRlZ3JhbCBmaWVsZHMuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbik6CisJQ2hlY2sgZm9yIE1PREVfQ0MgbW9kZXMsIG5vdCBqdXN0IENDbW9kZS4KKworVGh1IE1heSAgNiAwMDo1NDo0MCAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKworICAgICAgICAqIG9iamMvY2xhc3MuYywgb2JqYy9oYXNoLmM6IENoYW5nZSBjYWxsb2MgdG8gX19vYmpjX3hjYWxsb2MuCisgICAgICAgICogb2JqYy9vYmplY3RzLmMgKGNsYXNzX2NyZWF0ZV9pbnN0YW5jZSk6IGJ6ZXJvIG5ldyBpbnN0YW5jZXMKKworCSogb2JqYy9zZW5kbXNnLmMgKF9fb2JqY19zZW5kX2luaXRpYWxpemUsIGNsYXNzX2FkZF9tZXRob2RfbGlzdCk6CisJQWxsb3cgbXVsdGlwbGUgK2luaXRpYWxpemUgbWV0aG9kcyBwZXIgY2xhc3MuCisKK1dlZCBNYXkgIDUgMjE6NDA6MDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni9zZXF1ZW50LmggKExJTktfTElCR0NDX1NQRUNJQUwpOiAjaWYgMC4KKworCSogdG9wbGV2LmMgKG1haW4pOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgaW4gcHJldmlvdXMgY2hhbmdlLgorCitXZWQgTWF5ICA1IDE5OjM2OjE1IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBjb21iaW5lLmMgKGNvbWJpbmFibGVfaTNwYXQpOiBEbyBub3QgbWFrZSBSRUdfREVBRCBub3RlcyBmb3IKKwl0aGUgc3RhY2sgcG9pbnRlciwgZnJhbWUgcG9pbnRlciwgb3IgYXJnIHBvaW50ZXIuCisKK1dlZCBNYXkgIDUgMTc6NTc6MzAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni9zZXF1ZW50LmggKExJTktfTElCR0NDX1NQRUNJQUwpOiBEZWZpbmVkLgorCitXZWQgTWF5ICA1IDAwOjAxOjU3IFBEVCAxOTkzICBSb24gR3VpbG1ldHRlICAoc2VnZmF1bHQhcmZnQG5ldGNvbS5jb20pCisKKwkqIGV4cHIuaDogRml4IGNvbW1lbnQgdHlwb3MuICBlbWl0X2Jsb2NrX21vdmUgZGVjbCB3YXMgaGlkZGVuLgorCisJKiB0b3BsZXYuYyAobWFpbik6IElmIEMrKyBmb3IgRHdhcmYgcmVxdWVzdGVkLCB3YXJuIGFuZCB0dXJuIGl0IG9mZi4KKworV2VkIE1heSAgNSAyMTo0ODoyNCAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKworCSogb2JqYy1hY3QuYyAoY2hlY2tfbWV0aG9kc19hY2Nlc3NpYmxlKTogSGFuZGxlIGludGVyZmFjZSB0eXBlcy4gCisKK1dlZCBNYXkgIDUgMTQ6Mzc6NDIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jOiAob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUpOiBBZGQgbWlzc2luZyBhcmcKKwl0byBjb25zdF9iaW5vcC4KKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9hc21fcmVnX2xpZmUpOiBEb24ndCBhYm9ydCBmb3IgYXNtIHRoYXQKKwlkb2Vzbid0IG1hdGNoIGl0cyBjb25zdHJhaW50cy4KKworCSogY29tYmluZS5jIChudW1fc2lnbl9iaXRfY29waWVzLCBjYXNlIFNVQlJFRyk6IFByb3Blcmx5IGNvbXB1dGUKKwl0aGUgbnVtYmVyIG9mIHNpZ24gYml0IGNvcGllcyBvZiBTVUJSRUdzIG9mIHByb21vdGVkIG9iamVjdHMuCisKKwkqIG9wdGFicy5jIChhZGRfZXF1YWxfbm90ZSwgZXhwYW5kX2Jpbm9wLCBleHBhbmRfdW5vcCk6IE1ha2UKKwljb3B5IG9mIG9wZXJhbmRzIGZvciBSRUdfRVFVQUwgbm90ZSB0byBhdm9pZCBzaGFyaW5nIFJUTCBpZgorCWNhbGxlZCBsYXRlciB0aGFuIFJUTCBnZW5lcmF0aW9uLgorCShlbWl0X2xpYmNhbGxfYmxvY2ssIGV4cGFuZF9maXgpOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogTGlrZXdpc2UsIHRob3VnaCBwcm9iYWJseSBub3QKKwljYWxsZWQgYWZ0ZXIgUlRMIGdlbmVyYXRpb24uCisKK1dlZCBNYXkgIDUgMTQ6MTE6MTIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogT25seSBxdW90ZSBhcmd1bWVudCB0byBfSU9bQS1aXSosIG5vdCBmaXJzdCBpdGVtIGluCisJcGFyZW50aGVzZXMuICBBZGRlZCBwYXRjaGVzIGZvciBJUklYIDQuMC4xIGhlYWRlciBmaWxlcyB0byB1bmRvCisJc29tZSBpbmFwcHJvcHJpYXRlIGNoYW5nZXMuCisKK1dlZCBNYXkgIDUgMTE6MzQ6NTkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAoZmxhZ19kZWZlcl9wb3ApOiBJbml0aWFsaXplIHRvIDAuCisJKG1haW4pOiBTZXQgaXQgdG8gMSBpZiBvcHRpbWl6aW5nLgorCitXZWQgTWF5ICA1IDA2OjM4OjQ3IDE5OTMgIFRvbSBXb29kICAod29vZEBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni1uZXh0LSosIG02OGstbmV4dC0qKTogY29sbGVjdDIgaXNuJ3QgbmVlZGVkLgorCitUdWUgTWF5ICA0IDE0OjIxOjExIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQHhpdi5pZXNkLmF1Yy5kaykKKworICAgICAgICAqIG9iamMvb2JqYy5oLCBvYmpjL3J1bnRpbWUuaDogUmVtb3ZlIGluY2x1c2lvbiBvZiBtZW1vcnkuaAorICAgICAgICAqIG9iamMvb2JqYy5oLCBvYmpjL2hhc2guaCwgb2JqYy9ydW50aW1lLmg6IFJlbW92ZSBpbmNsdXNpb24gb2YKKyAgICAgICAgZ3N0ZGRlZi5oIAorCisgICAgICAgICogb2JqYy9NYWtlZmlsZSAoT0JKQ19IKTogQWRkIHR5cGVkc3RyZWFtLmggCisKKyAgICAgICAgKiBvYmpjL09iamVjdC5oOiBBZGQgaW5jbHVkZXMgb2JqYy9vYmpjLmggYW5kIG9iamMvdHlwZWRzdHJlYW1zLmggCisgICAgICAgIG9iamMvT2JqZWN0Lmg6IFJlbW92ZWQgYG1pbmltYWwnIGRlZmluaXRpb25zLiAgSW5jbHVkZXMgb2JqYy5oCisgICAgICAgIGluc3RlYWQuICAKKyAgICAgICAgKiBvYmpjL2FyY2hpdmUuYzogQWRkIGluY2x1ZGUgInR5cGVkc3RyZWFtLmgiCisKKyAgICAgICAgKiBvYmpjL3R5cGVkc3RyZWFtLmg6IE5ldyBmaWxlLiAgQ29udGVudHMgbW92ZWQgZnJvbQorICAgICAgICBvYmpjL29iamMtYXBpLmguCisKKyAgICAgICAgKiBvYmpjL29iamMuaCAoSXZhckxpc3QsIEl2YXIsIFN5bVRhYiwgTW9kdWxlLCBNZXRob2QsCisgICAgICAgIENhdGVnb3J5LCBTdXBlciwgb2JqY19tZXRob2RfZGVzY3JpcHRpb24sIG9iamNfcHJvdG9jb2xfbGlzdCk6CisgICAgICAgIERhdGEgZGVmaW5pdGlvbnMgbW92ZWQgdG8gb2JqYy9vYmpjLWFwaS5oCisKKyAgICAgICAgKiBvYmpjL2FyY2hpdmUuYzogQ2hhbmdlIG1hbGxvYyBpbnRvIF9fb2JqY194bWFsbG9jCisKKyAgICAgICAgKiBvYmpjL29iamMuaCwgb2JqYy9zZW5kbXNnLmM6IFJlbW92ZSBhbnkgY29kZSBmb3IgaGFzaCBsb29rdXAKKyAgICAgICAgKiBvYmpjL2NhY2hlLmg6IEZpbGUgcmVtb3ZlZAorCisgICAgICAgICogb2JqYy9vYmpjLWFwaS5oIChjbGFzc19jcmVhdGVfaW5zdGFuY2UsIG9iamVjdF9jb3B5LAorICAgICAgICBvYmplY3RfZGlzcG9zZSk6IERlZmluaXRpb25zIG1vdmVkIHRvIG9iamMvb2JqZWN0cy5jIAorCisgICAgICAgICogb2JqYy9vYmpjLmg6IFJlbW92ZSBkZWNsYXJhdGlvbnMgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorICAgICAgICAqIG9iamMvT2JqZWN0Lm0gKC1jb25mb3Jtc1RvOik6IEJ1Z2ZpeDogQWxzbyBhc2sgc3VwZXJjbGFzc2VzLgorCitUdWUgTWF5ICA0IDIzOjQ2OjM3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdGFydF9kZWNsKTogR2l2ZSBhbiBlcnJvciwgbm90IGEgc29ycnksIHdoZW4gdGhleSB0cnkKKwl0byBkZWNsYXJlIGEgdGVtcGxhdGUgb24gYSBWQVJfREVDTCBvciBhIFRZUEVfREVDTC4KKworCSogY3AtdHlwZTIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogSWYgd2UgaGF2ZSBhIFZBUl9ERUNMCisJdGhhdCdzIHN0YXRpYyBpbiB0aGUgY2xhc3MsIGRvbid0IHRyeSB0byB1c2UgaXQgd2hlbiB3ZSdyZSB3b3JraW5nCisJb24gYW4gaW5pdGlhbGl6ZXItbGlzdDsgaXQgaGFzIG5vIGJ1c2luZXNzIGJlaW5nIHRoZXJlLgorCisJKiBjcC1jdnQuYyAoY29udmVydF9wb2ludGVyX3RvKTogT25seSBjYWxsIGdldF9iYXNlX2Rpc3RhbmNlIGV0IGFsLgorCW9uIFJFQ09SRF9UWVBFcywgbm90IG9uIFVOSU9OX1RZUEVzLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgdHJ5IHRvIGRpdmluZSB0aGUgbmFtZSBvZiB0aGUKKwlpbmNvbXBsZXRlIHR5cGUgZm9yIGEgZmllbGQgZGVjbC4KKworVHVlIE1heSAgNCAxOTo1NToyOSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3RlcywgUkVHX0RFQUQgY2FzZSk6IEhhbmRsZSBoYXJkCisJcmVnaXN0ZXJzIHdoaWNoIHBhcnRpYWxseSBvdmVybGFwIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaW5zbi4KKworVHVlIE1heSAgNCAxNzo1OToxMCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKGNhc2VzaTApOiBSZW1vdmUgaW5jb3JyZWN0IGZpeCBmcm9tIEFwcmlsIDIzLgorCSogcGEuaCAoQ0FTRV9EUk9QU19USFJPVUdIKTogRGVmaW5lLgorCitUdWUgTWF5ICA0IDEzOjIyOjIxIDE5OTMgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QGRnLXJ0cC5kZy5jb20pCisKKwkqIHQtZGd1eDogRml4ZWQgbmFtZSBvZiBsaW5rIHNjcmlwdC4KKworVHVlIE1heSAgNCAxMToxNTo0MCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzaC5tZCAoYXJpdGggcGF0dGVybnMpOiBSZXdvcmsgY29uc3RyYWludHMuCisJKiBzaC5oIChBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiBFbnN1cmUganVtcCB0YWJsZSBpcyBhbGlnbmVkLgorCSogc2guYyAoYXJpdGhfcmVnX29wZXJhbmQpOiBOZXcgY29uc3RyYWludC4gKGR1bXBfY29uc3RhbnRzKToKKwlGb3JjZSBvdXQgYSBjb25zdGFudCB0YWJsZSBpZiBuZWNlc3NhcnkuCisKK01vbiBNYXkgIDMgMjA6NDE6MDAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmMgKGJ1aWxkX2FycmF5X3R5cGUpOiBUaGUgbWFpbiB2YXJpYW50IG9mIGFuIGFycmF5IHR5cGUKKwlzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5IHdob3NlIGVsZW1lbnQgdHlwZSBpcyB0aGUgbWFpbiB2YXJpYW50LgorCitNb24gTWF5ICAzIDE5OjI3OjA0IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogbGl0ZS5oIChDUFBfUFJFREVGSU5FUyk6IERlbGV0ZSAtRHN1biBhbmQgLUR1bml4LgorCisJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IE1vdmUgQllURVNfQklHX0VORElBTiAhPQorCUJJVFNfQklHX0VORElBTiBvZmZzZXQgY29ycmVjdGlvbiBhZnRlciB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLgorCSogZWx4c2kuaCwgbWlwcy5oIChCSVRTX0JJR19FTkRJQU4pOiBEZWZpbmUgdG8gemVyby4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yLCBBUlJBWV9SRUYgY2FzZSk6IEJ1aWxkIGFycmF5IHR5cGUsIGFuZAorCXRoZW4gYnVpbGQgdGhlIHZhcmlhbnQgYXJyYXkgdHlwZS4KKworCSogc3BhcmMubWQgKGZsb2F0c2l0ZjIpOiBPdXRwdXQgZml0b3Egbm90IGZpdG94LgorCisJKiBpOTYwLm1kIChzY2MgcGF0dHRlcm5zKTogQWRkIG1pc3NpbmcgbW9kZSB0byBjb25kaXRpb25hbCBvcGVyYXRvcnMuCisJKiBpOTYwLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IEFkZCBtaXNzaW5nIG5ld2xpbmVzIGluIHN0cmluZ3MuCisKKwkqIGMtY29tbW9uLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6IERvbid0IG9wdGltaXplIHN1YnRyYWN0IG9mCisJcmVhbHMgd2hlbiB0YXJnZXQgdXNlcyBJRUVFIGFyaXRobWV0aWMuCisKKwkqIGMtcGFyc2UuaW46IERlbGV0ZSBjb25kLmF3ayByZWZlcmVuY2UuCisJKiBjb25kLmF3azogRGVsZXRlIGZpbGUuCisKK01vbiBNYXkgIDMgMTY6NTg6NTUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IENoZWNrIHNpemUgcHJvcGVybHkgZm9yIHdpZGUtc3RyaW5nLgorCisJKiBNYWtlZmlsZS5pbiAoVEVYSTJEVkkpOiBOZXcgdmFyaWFibGUuCisJKGNwcC5kdmksIGdjYy5kdmkpOiBVc2UgaXQuCisKK01vbiBNYXkgIDMgMTY6Mjk6MzggMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAobG9va3VwX25lc3RlZF9maWVsZCk6IFBhc3MgY29tcGxhaW4gZG93biBhcyB0aGUgdmFsdWUKKwlmb3IgbG9va3VwX2ZpZWxkJ3MgYHByb3RlY3QnIGFyZ3VtZW50LiAgVGhpcyB3aWxsIGhlbHAgYXZvaWQKKwlpbmNvcnJlY3QgdmlzaWJpbGl0eSBlcnJvcnMgd2hlbiB3ZSdyZSBwYXJzaW5nIHRoaW5ncy4KKworTW9uIE1heSAgMyAyMTowMjoyMiAxOTkzICBILkouIEx1ICAoaGx1QHlhcmRiaXJkLmVlY3Mud3N1LmVkdSkKKworCSogY29uZmlnL2kzODYvbGludXguaCAoRlVOQ1RJT05fUFJPRklMRVIsIEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6CisJUmVtb3ZlIFBJQyBzdHVmZi4gIFdlIHdhaXQgZm9yIHRoZSBFTEYgc3VwcG9ydCBpbiBnYXMgYW5kIGJpbnV0aWxzLgorCShMSU5LX1NQRUMpOiBEZWZpbmVkIGZvciAtdi4KKworTW9uIE1heSAgMyAwNjo0MTo1NiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMvTWFrZWZpbGUgKGNvcHktaGVhZGVycyk6IFB1dCBgLScgb24gbWtkaXIgY29tbWFuZC4KKworU3VuIE1heSAgMiAwOToyODo0MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBUcmVhdCBgZm9vICggKScgYXMgMCBhcmdzIGlmIGZvbyB3YW50cyAwIGFyZ3MuCisKK1N1biBNYXkgIDIgMDc6Mzc6NDUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncywgY2FzZSBTVUJSRUcpOiBMZWF2ZSB0aGUgU1VCUkVHIHdoZW4KKwl0aGUgaW5uZXIgb2JqZWN0IGlzIGEgcHNldWRvIG9uIG1hY2hpbmVzIHRoYXQgZXh0ZW5kIGJ5dGUKKwlsb2FkcyAodG8gYmUgY29uc2lzdGVudCB3aXRoIHJlbG9hZC5jKS4KKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IEFsbG93IG5vbi1wYXJhZG94aWNhbCBTVUJSRUdzIG9mIE1FTQorCW9uIG1hY2hpbmVzIHRoYXQgZXh0ZW5kIGJ5dGUgbG9hZHMuCQorCitTdW4gTWF5ICAyIDA4OjU3OjMzIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiByZWFsLmMgKEVET00sIEVSQU5HRSk6IERvIG5vdCBkZWZpbmUgc2luY2UgZXJybm8uaCB3YXMKKwlwcmV2aW91c2x5IGluY2x1ZGVkLgorCitTdW4gTWF5ICAyIDA4OjI4OjE1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKHJlY29yZF9qdW1wX2NvbmQpOiBVc2UgbW9kZSBvZiBvcDAgb3Igb3AxLCBub3QgTU9ERSwKKwl3aGVuIHRlc3RpbmcgZm9yIG5hcnJvd2luZyBvciB3aWRlbmluZyBzdWJyZWdzLgorCitTYXQgTWF5ICAxIDEwOjEwOjQ0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL25leHRzdGVwLmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IEZpeCB0eXBvLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6IFJlamVjdCBDQ21vZGUgaW4gIEEgJiAofkEpIC0+IDAuCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBJZiBqdXN0IHdoaXRlc3BhY2UgYmV0d2VlbiBwYXJlbnMsCisJdHJlYXQgaXQgYXMgb25lIGFyZ3VtZW50LgorCitTYXQgTWF5ICAxIDExOjAyOjIyIDE5OTMgIEguSi4gTHUgIChobHVAeWFyZGJpcmQuZWVjcy53c3UuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAobGlib2JqYy5hKTogRGVwZW5kIG9uICQoVVNFX0NPTExFQ1QyKQorCisJKiBvYmpjL01ha2VmaWxlICh4Zm9yd2FyZCk6IEFkZCBgZWxzZSB0cnVlOycgZm9yIFVsdHJpeCA0LjIgbWFrZS4KKworU2F0IE1heSAgMSAwNjo0OTo1MSAxOTkzICBUb20gV29vZCAgKHdvb2RAbmV4dC5jb20pCisKKwkqIG9iamMtYWN0LmMgKGJ1aWxkX2l2YXJfcmVmZXJlbmNlKTogV2FybiB3aGVuIGEgY2xhc3MgbWV0aG9kCisJcmVmZXJzIHRvIGFuIGluc3RhbmNlIHZhcmlhYmxlLgorCitGcmkgQXByIDMwIDIyOjM3OjU2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sZXguYyAoeXlsZXgpOiBBdm9pZCBpbnZhbGlkIHNoaWZ0IGZvciBlcnJvbmVvdXMgZW1wdHkgY2hhciBjb25zdC4KKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBDT01QQVJFKTogVXNlIFNFTEVDVF9DQ19NT0RFIGV2ZW4gaWYgSEFWRV9DQzAuCisKK0ZyaSBBcHIgMzAgMTI6NDA6MjMgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogY29uZmlndXJlLCBpbnN0YWxsLnRleGk6IFVwZGF0ZWQgLWxvY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorCitGcmkgQXByIDMwIDE1OjIwOjEwIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMuaCAoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogSWZkZWYgb3V0LgorCitGcmkgQXByIDMwIDE0OjUzOjQzIDE5OTMgIERvdWcgRXZhbnMgIChkamVAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLnN1YjogRml4IHN5bnRheCBlcnJvci4KKworRnJpIEFwciAzMCAxMjowMDoyNCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBGaXggI2VuZGlmIGNvbW1lbnRzIGZvciBVbHRyaXggNC4yLgorCitGcmkgQXByIDMwIDEwOjQ1OjUzIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNoLmMsIHNoLmgsIHNoLm1kLCB0LXNoLCB4bS1zaC5oOiBOZXcgZmlsZXMgZm9yIEhpdGFjaGkgU0guCisJKiBjb25maWd1cmUgKHNoLWhpdGFjaGktaG1zKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBjb25maWcuc3ViOiBBY2NlcHQgc2gsIGhtcy4KKworVGh1IEFwciAyOSAyMjoyMDoyMCAxOTkzICBKZWZmIExhdyAgKGxhd0BrYWhsdWEuY3MudXRhaC5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFJlc2V0IHRoZSBJTlNOX0NPREUgZm9yIGNvbmRpdGlvbmFsCisJb3IgY29tcHV0ZWQganVtcHMgd2hpY2ggaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIHNpbXBsZWp1bXBzLgorCitUaHUgQXByIDI5IDE0OjMwOjI1IFBEVCAxOTkzICBSb24gR3VpbG1ldHRlICAocmZnQG5ldGNvbS5jb20pCisKKwkqIGMtY29tbW9uLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6ICBTcGVjaWZpYyBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisJInRydXRodmFsdWUiIG9mIGEgc3RydWN0LCB1bmlvbiwgb3IgYXJyYXkgdHlwZSBvcGVyYW5kIGlzIG5lZWRlZC4KKworVGh1IEFwciAyOSAyMTo0MjoyNiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlUaHUgQXByIDI5IDEyOjI3OjU5IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdoZW4gY29tcGxhaW5pbmcgYWJvdXQgYSBmaWVsZCBoYXZpbmcKKwlhbiBpbmNvbXBsZXRlIHR5cGUsIHRlbGwgdGhlbSB3aGF0IHR5cGUgaXQgd2FzLCBhbmQgd2hhdCB0ZW1wbGF0ZQorCWluc3RhbnRpYXRpb24gd2FzIGludm9sdmVkLCBpZiB3ZSBjYW4uCisKKwlXZWQgQXByIDI4IDExOjUwOjI4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZm5kZWNsKTogTmV3IGFyZ3VtZW50IGBwdWJsaWNwJywgdG8gc2F5IGlmIHdlCisJc2hvdWxkIHNldCBUUkVFX1BVQkxJQyBvbiB0aGUgbm9kZSBmb3IgdGhlIGNhbGxlci4KKwkoZ3Jva2ZuZGVjbCk6IFBhc3MgdGhlIG5ldyBhcmcgZG93biBhcHByb3ByaWF0ZWx5LgorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IElmIGl0J3MgYSBzdGF0aWMgbWVtYmVyIGZuLCByZXZlcnQKKwlpdCBpbnRvIGEgRlVOQ1RJT05fVFlQRSBhbmQgY2hvcCBvZmYgdGhlIHRoaXMgcG9pbnRlci4KKwkqIGNwLWRlY2wuYyAocmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4pOiBNYWtlIG5vbi1zdGF0aWMuCisJKiBjcC10cmVlLmggKHJldmVydF9zdGF0aWNfbWVtYmVyX2ZuKTogQWRkIHByb3RvdHlwZS4KKworCSogY3AtbGV4LmMgKHJlaW5pdF9wYXJzZV9mb3JfYmxvY2spOiBCdW1wIHRoZSBzaXplIG9mIEJVRiBmb3IgdGhlCisJcHJlLXBhcnNlZCBsaW5lIGRpcmVjdGl2ZSB0byAxNiwgc28gd2UgY2FuIGhvbGQgdGhlIG1heCAjIG9mIGRpZ2l0cworCWluIGEgc2lnbmVkIGludCAoMTApLgorCitUaHUgQXByIDI5IDE5OjI2OjIxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL21pcHMvbWlwcy5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOgorCURlZmluaXRpb25zIHB1dCBpbnRvICNpZiAwLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogRG8gZGVmYXVsdF9jb252ZXJzaW9uCisJYmVmb3JlIHRlc3RpbmcgZm9yIEVSUk9SX01BUksuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogRG9uJ3QgcmV0dXJuIGNvbnN0MF9ydHgKKwlvciBjb25zdG0xX3J0eCBmb3IgSU9SLCBBTkQsIFhPUiBpbiBDQ21vZGUuCisJKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uKTogRG9uJ3QgZG8gYW55dGhpbmcgaWYgb3AwIGhhcyBDQ21vZGUuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLW5vcm1hbCk6IE1vdmUgaW5zdGFsbC1saWJnY2MKKwlhZnRlciAkKElOU1RBTExfSEVBREVSUykuCisKK1RodSBBcHIgMjkgMTc6MDk6NTkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBnY2MuYyAoaXNfZGlyZWN0b3J5KTogUmVuYW1lZCBmcm9tIGlzX2xpbmtlcl9kaXIgYW5kIGFkZGVkCisJbGlua2VyIGFyZ3VtZW50LiAgSWYgbm90IGNoZWNraW5nIGxpbmtlciBkaXJlY3RvcnksIGNoZWNrIHdoZXRoZXIKKwlkaXJlY3RvcnkgZXhpc3RzIG9ubHkgaWYgU01BTExfQVJHX01BWCBub3QgZGVmaW5lZC4KKwkocHV0ZW52X2Zyb21fcHJlZml4ZXMpOiBEb24ndCBhZGQgZGlyZWN0b3JpZXMgZm9yIHdoaWNoCisJaXNfZGlyZWN0b3J5IHJldHVybnMgMC4KKwkqIGNvbmZpZy9pMzg2L3htLXNjby5oIChTTUFMTF9BUkdfTUFYKTogRGVmaW5lLgorCitUaHUgQXByIDI5IDE1OjMwOjA5IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoc2hhZGQgZm9yIHJlbG9hZCk6IEZpeCBjb25zdHJhaW50IHRvIG1hdGNoIHRoZSBvdXRwdXQKKwlwYXR0ZXJuLgorCitUaHUgQXByIDI5IDE1OjA1OjA1IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHdlMzJrLm1kIChmbG9hdF9leHRlbmQ6REYgcmVjb2duaXplcik6IEFkZCBtaXNzaW5nIGFyZyB0bworCW91dHB1dF9hc21faW5zbi4KKyAgICAgICAgKGZsb2F0X3RydW5jYXRlOlNGIHJlY29nbml6ZXIpOiBMaWtld2lzZS4KKworVGh1IEFwciAyOSAxMDoxODozNiAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMveGZvcndhcmQuYzogRmlsZSByZW5hbWVkIGZyb20gb2JqYy9fZm9yd2FyZC5jLgorCSogb2JqYy9NYWtlZmlsZTogVXBkYXRlZCBhY2NvcmRpbmdseS4KKworVGh1IEFwciAyOSAxMjoxMDo0OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlYWwuYzogRGVsZXRlZCBjYXN0cyB0byB2b2lkLgorCisJKiByZWFsLmMgKGVtZG5vcm0sIGVpZnJhYywgZXVpZnJhYywgbXRoZXJyKTogUmVwbGFjZQorCXVuY29uZGl0aW9uYWwgYHBlZHdhcm4nIGJ5IGB3YXJuaW5nJyBjb25kaXRpb25hbCBvbiBgZXh0cmFfd2FybmluZ3MnLgorCSh0b2UyNCwgdG9kZWMpOiBVc2UgRVJBTkdFIHRvIGZsYWcgb3ZlcmZsb3cgb24gKG5vbi1JRUVFKQorCW1hY2hpbmVzIHRoYXQgZG8gbm90IGhhdmUgaW5maW5pdHkuCisJKGV0b2FzYyk6IENoZWNrIGV4cGxpY2l0bHkgZm9yIG92ZXJmbG93IG9mIGxlYWRpbmcgZGVjaW1hbCBkaWdpdC4KKwkoYXNjdG9lZyk6IFRlc3QgZm9yLCBhbmQgaW1tZWRpYXRlbHkgcmVqZWN0LCBvdXQtb2YtYm91bmRzCisJZGVjaW1hbCBleHBvbmVudCBpbnB1dHMuCisJKGF0IHRvcCBsZXZlbCk6IEluY2x1ZGUgZXJybm8uaDsgcmVmZXJlbmNlIGVycm5vLAorCXdhcm5pbmcsIGV4dHJhX3dhcm5pbmdzLgorCisJKiBNYWtlZmlsZS5pbiAodG9vbGRpcik6IFVzZSBleGVjX3ByZWZpeCwgbm90IHByZWZpeC4KKwkoZ2NjLm8pOiBMaWtld2lzZSBmb3IgVE9PTERJUl9CQVNFX1BSRUZJWC4KKworCSogY29uZmlnL2NvbnZleC9jb252ZXguYyAob3V0cHV0X2NhbGwpOgorCUFkZCBtaXNzaW5nIGFyZyB0byBvdXRwdXRfYXNtX2luc24uCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEluaGliaXQgLURfX09QVElNSVpFX18gaWYgLU8wLgorCisJKiBjb25maWcvbTY4ay9tNjhrLm1kIChtb3Z4Zik6IEFkZCBwYXR0ZXJuIGZvciBzb2Z0LWZsb2F0IG1vdmVzLgorCisJKiBjb25maWcvbTY4ay9tNjhrLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IFN1cHBvcnQgWEZtb2RlIG1vdmVzLgorCitUaHUgQXByIDI5IDAwOjA5OjM0IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy9pbml0LmMgKF9fb2JqY19leGVjX2NsYXNzKTogQWRkZWQgY2hlY2sgZm9yIHNlbGVjdG9ycyA9IDAKKworCVVuZGlkIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKworCSogb2JqYy9fZm9yd2FyZC5jOiBGaWxlIHJlbW92ZWQKKwkqIG9iamMvYXJnZnJhbWUuaCwgb2JqYy9hZi1zcGFyYy5oOiBOZXcgZmlsZXMKKwkqIG9iamMvTWFrZWZpbGUgKEFSR0ZSQU1FX0gpOiBOZXcgbWFjcm8KKwkqIG9iamMvTWFrZWZpbGUgKF9mb3J3YXJkLCBmZmxhZ3MpOiBUYXJnZXRzIHJlbW92ZWQKKwkqIG9iamMvbXNnc2VuZC5jIChvYmpjX21zZ19zZW5kdik6IENoYW5nZWQgdG8gdXNlIGFyZ2ZyYW1lIG1hY3JvcworCSogb2JqYy9PYmplY3QuW2htXSwgb2JqYy9ydW50aW1lLmgsIG9iamMvb2JqYy1hcGkuaCwKKwlvYmpjL21zZ3NlbmQuYzogQ2hhbmdlZCB0eXBlIG5hbWUgYXJnbGlzdF90IHRvIGFmX2ZyYW1lLgorCitUaHUgQXByIDI5IDAwOjA0OjExIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6ICVyMTkgaXMgZml4ZWQKKwlpZiBmbGFnX3BpYyBpcyB0cnVlLgorCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogQWZ0ZXIgbGVnaXRpbWl6aW5nIGEgUElDCisJYWRkcmVzcyBtYWtlIHN1cmUgdG8gY29weSBpdCBmcm9tIHRoZSB0ZW1wb3JhcnkgcmVnaXN0ZXIKKwlpbnRvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbi4KKworV2VkIEFwciAyOCAxODoxNTo1NyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogQWxsb3cgMS4wIEZQIHJlZ2lzdGVycyB0byBob2xkIG1vZGVzCisJd2hpY2ggYXJlIHNtYWxsZXIgdGhhbiA0IGJ5dGVzLgorCitXZWQgQXByIDI4IDE2OjQwOjM4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChkaXN0ZGlyKTogQ29weSBzdWJkaXJlY3RvcmllcyBvZiBjb25maWcvIHRvbywgZXhjZXB0IFJDUworCitXZWQgQXByIDI4IDE2OjE5OjE4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChleHRyYWNsZWFuKTogRGVsZXRlICoueiBhcyB3ZWxsLgorCitXZWQgQXByIDI4IDE1OjEwOjMzIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzL21pcHMuaCAoTUlQU19WRVJTSU9OKTogU2V0IE1laXNzbmVyIHZlcnNpb24gIyB0byA0MC4KKwkoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBTZXQgLW1ncG9wdCBpZiAtTyBvdGhlciB0aGFuIC1PMC4KKwkoQ0MxX1NQRUMpOiBEb24ndCBwYXNzIC1tZ3BvcHQgaGVyZS4KKworCSogbWlwcy9vc2Zyb3NlLmggKENDMV9TUEVDKTogRG9uJ3QgcGFzcyAtbWdwb3B0IGhlcmUuCisKKwkqIG1pcHMvb3Nmcm9zZS5oLCBpMzg2L29zZnJvc2UuaCAoQVNNX0lERU5USUZZX0xBTkdVQUdFKTogSWYgdGhlCisJbGFuZ3VhZ2UgaXMgQywgZG8gbm90IHB1dCBhbnl0aGluZyBvdXQsIHRvIG5vdCBjb25mdXNlIGtlcm5lbAorCWRlYnVnZ2VycyBhbmQgdGhlIGxpa2UuCisKK1dlZCBBcHIgMjggMDc6MzE6MjAgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjL2FyZ2ZyYW1lLmggKF9fQUZfQVJHX0FERFIpOiBSZW1vdmVkIC5jdXJyX29mZiBmcm9tCisJZGVmaW5pdGlvbi4gKF9fQUZfQVJHX0FEVkFOQ0UpOiBSZW1vdmVkIF9fQUZfQ1VNX09GRiBhcm91bmQgQ1VNLiAKKworCSogb2JqYy9ydW50aW1lLmggKF9vYmpjX2Vycm9yKTogRGVjbGFyYXRpb24gYWRkZWQuCisKK1dlZCBBcHIgMjggMDY6MTc6MDIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1sZXguYywgY3AtbGV4LmMgKHl5bGV4KTogRG9uJ3QgdXNlIHVuc2lnbmVkIGNvbXBhcmlzb24KKwl0byBhbHNvIGNoZWNrIGZvciA8IDA7IGRvIGl0IGV4cGxpY2l0bHkuCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBDYXN0IHRvCisJdW5zaWdlZCBIT1NUX1dJREVfSU5UIGluc3RlYWQgb2YgdW5zaWduZWQgaW50LgorCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgU01BWCk6IExpa2V3aXNlLgorCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBMaWtld2lzZS4KKworCSogY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBXaGVuIHdlIHdhbnQgdG8gcmV0dXJuIHplcm8sIAorCWJlIHN1cmUgd2UgaG9ub3IgYW55IHNpZGUtZWZmZWN0cyBpbiBvdXIgb3BlcmFuZC4KKworVHVlIEFwciAyNyAyMjoyNToyOSAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkB4aXYuaWVzZC5hdWMuZGspCisKKwkqIG9iamMvX2ZvcndhcmQuYzogRmlsZSByZW1vdmVkCisJKiBvYmpjL2FyZ2ZyYW1lLmgsIG9iamMvYWYtc3BhcmMuaDogTmV3IGZpbGVzCisJKiBvYmpjL01ha2VmaWxlIChBUkdGUkFNRV9IKTogTmV3IG1hY3JvCisJKiBvYmpjL01ha2VmaWxlIChfZm9yd2FyZCwgZmZsYWdzKTogVGFyZ2V0cyByZW1vdmVkCisJKiBvYmpjL21zZ3NlbmQuYyAob2JqY19tc2dfc2VuZHYpOiBDaGFuZ2VkIHRvIHVzZSBhcmdmcmFtZSBtYWNyb3MKKwkqIG9iamMvT2JqZWN0LltobV0sIG9iamMvcnVudGltZS5oLCBvYmpjL29iamMtYXBpLmgsCisJKiBvYmpjL21zZ3NlbmQuYzogQ2hhbmdlZCB0eXBlIG5hbWUgYXJnbGlzdF90IHRvIGFmX2ZyYW1lLgorCitUdWUgQXByIDI3IDE2OjI5OjQ1IDE5OTMgIFRvbSBXb29kICAod29vZEBuZXh0LmNvbSkKKworCSogbmV4dHN0ZXAuaCAoTmVYVF9PQkpDLCBTVEFOREFSRF9FWEVDX1BSRUZJWCk6IERlbGV0ZS4KKwkqIGkzODYvbmV4dC5oOiBVc2UgZ2FzLmggaW5zdGVhZCBvZiBic2QuaC4KKwkoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMKTogRGVmaW5lLgorCitUdWUgQXByIDI3IDEyOjIwOjA4IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogRG8gbm90IHJ1biB0aGUgZGVsYXkgc2xvdCBzY2hlZHVsaW5nCisJcGFzcyBpZiB0aGUgY3VycmVudCBmdW5jdGlvbiBoYXMgbm8gaW5zbnMgb3RoZXIgdGhhbiB0aGUgcHJvbG9ndWUKKwlhbmQgZXBpbG9ndWUuCisgIAorCSogcGEuYyAoaHBwYV9leHBhbmRfZXBpbG9ndWUpOiBFbWl0IGEgImJsb2NrYWdlIiBpbnNuCisJdG8ga2VlcCB0aGUgc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXIgYWRqdXN0bWVudHMgYXQgdGhlCisJZW5kIG9mIHRoZSBlcGlsb2d1ZS4KKwkqIHBhLm1kIChibG9ja2FnZSk6IE5ldyBwYXR0ZXJuLgorCitUdWUgQXByIDI3IDEwOjU5OjMzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZ2NjLmMgKERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogTmV3IG1hY3JvLiAgTGlrZSBvbGQKKwlXT1JEX1NXSVRDSF9UQUtFU19BUkcsIGJ1dCBhZGRlZCBpZGlyYWZ0ZXIsIGlwcmVmaXgsIGl3aXRocHJlZml4LgorCShXT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBVc2UgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcuCisJKiBjb25maWcvaTM4Ni9vc2Zyb3NlLmgsIGNvbmZpZy9tNjhrL3N1bjIuaCwgY29uZmlnL202OGsvc3VuMy5oLAorCWNvbmZpZy9taXBzL29zZnJvc2UuaCwgY29uZmlnL3NwYXJjL3NwYXJjLmgsIGNvbmZpZy9zdnI0LmgsCisJY29uZmlnL25leHRzdGVwLmggKFdPUkRfU1dJVENIX1RBS0VTX0FSRyk6IFJld3JvdGUgdG8gdXNlCisJREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcuCisKK1R1ZSBBcHIgMjcgMDc6Mzg6NDcgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdQorCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1pbnQtaGRycyk6IE5vIGxvbmdlciBkZXBlbmRzIG9uIGdzeXNsaW1pdHMuaC4KKwlEb24ndCBtYWtlIGluY2x1ZGUvc3lzbGltaXRzLmggaGVyZSBzaW5jZSB3ZSB3YW50IHRvIHRlc3QgdGhlCisJbGltaXRzLmggbWFkZSBieSBmaXhpbmNsdWRlcywgbm90IGJ5IHRoZSBsYXRlciBwYXJ0IG9mIHRoaXMgcnVsZS4KKwkoc3RtcC1maXhpbmMpOiBEZXBlbmRzIG9uIGdzeXNsaW1pdHMuaC4KKwlNYWtlIGluY2x1ZGUvc3lzbGltaXRzLmggaGVyZS4KKworCSogYWxwaGEuYyAoYWxwaGFfZW1pdF9zZXRfY29uc3QsIG91dHB1dF97cHJvLGVwaX1sb2cpOiBHZW5lcmF0ZQorCWluc25zIHRvIGxvYWQgY29uc3RhbnRzIGludG8gYSByZWdpc3RlciB1c2luZyBhIG1ldGhvZCB0aGF0IHdvcmtzCisJb24gYSAzMi1iaXQgbWFjaGluZSBhcyB3ZWxsLgorCitUdWUgQXByIDI3IDA5OjI2OjA0IDE5OTMgQ0VUICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkB4aXYuaWVzZC5hdWMuZGspCisKKwkqIG9iamMvTWFrZWZpbGUgKGZmbGFncyk6IC14IHRlc3QgY2hhbmdlZCB0byAtcyB0ZXN0IAorCisgICAgICAgICogb2JqYy9NYWtlZmlsZTogQ0ZMQUdTIGNoYW5nZWQgdG8gR0NDX0NGTEFHUworCisgICAgICAgICogb2JqYy9PYmplY3QuaDogTm8gbG9uZ2VyIGluY2x1ZGVzIG9iamMuaCAgSW5zdGVhZCwgYSBtaW5pbWFsIHNldAorICAgICAgICBvZiBkZWZpbml0aW9ucyBpcyBwcm92aWRlZCBoZXJlLgorCisgICAgICAgICogb2JqYy9PYmplY3QuaCwgT2JqZWN0Lm0sIGNhY2hlLmgsIGNsYXNzLmMsIGluaXQuYywgbWlzYy5jLAorICAgICAgICBvYmpjLWFwaS5oLCBvYmpjLmgsIG9iamVjdHMuYywgc2VuZG1hc2cuYzogVXNhZ2Ugb2YgQ2xhc3NfdCBhbmQKKyAgICAgICAgTWV0YUNsYXNzX3QgZWxpbWluYXRlZC4gTm93IHVzaW5nIENsYXNzKiBhbmQgTWV0YUNsYXNzKiBvbmx5LgorCisgICAgICAgICogb2JqYy9vYmpjLmg6IERvZXMgbm8gbG9uZ2VyIGluY2x1ZGUgc3RkaW8uaCBhbmQgc3RkYXJnLmguICAgTWluaW1hbAorICAgICAgICBzZXQgb2YgZGVmaW5pdGlvbiwgd2hpY2ggaXMgcHJvdmlkZWQgYnkgT2JqZWN0LmggaXMgcGxhY2VkIGluCisgICAgICAgIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgX19vYmplY3RfSU5DTFVERV9HTlUuICBEZWZpbml0aW9ucyBvZgorICAgICAgICBNZXRhQ2xhc3NfdCBhbmQgQ2xhc3NfdCByZW1vdmVkLiAgQ2xhc3MgYW5kIE1ldGFDbGFzcyBhcmUgbm8KKyAgICAgICAgbG9uZ2VyIGRlZmluZXMsIGJ1dCB0eXBlZGVmcy4KKworVHVlIEFwciAyNyAwMTo0MDo1MCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlNb24gQXByIDI2IDIwOjQ1OjA3IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAcG9zZWlkb24uY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChleHBhbmRfcmVjdXJzaXZlX2luaXRfMSk6IE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIGJpbmZvJ3MKKwl2ZXJzaW9uIG9mIGEgYmluZm8sIHJhdGhlciB0aGFuIHNvbWVvbmUgZWxzZXMsIGFzIHRoZSBzZWNvbmQKKwlwYXJhbWV0ZXIgdG8gYnVpbGRfdmlydHVhbF9pbml0IG11c3QgYmUgdGhlIGV4YWN0IGJpbmZvIHdlIHdhbnQgc28KKwl0aGF0IGl0IG1heSBnZXQgdGhlIHJpZ2h0IHZ0YWJsZS4KKworCU1vbiBBcHIgMjYgMTI6NTg6MjMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hYm9ydCk6IFJlcGhyYXNlIHRvIHRyeSB0byBoZWxwIGVuY291cmFnZQorCXBlb3BsZSB0byBzZW5kIGJ1ZyByZXBvcnRzIGluLCBhbmQgbm90IGp1c3Qgc2F5LCAiSGV5LCB0aGUgY29tcGlsZXIKKwl0b2xkIG1lIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvci4gQnllISIuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGb3JiaWQgZGVjbGFyaW5nIGFuIGFycmF5IG9mIHJlZmVyZW5jZXMuCisKKwkqIGNwLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBGb3JiaWQgZG9pbmcgc2l6ZW9mIG9uIGEgZnVuY3Rpb24uCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IFBlZHdhcm4gaWYgdGhleSB0cnkgdG8gZG8gcHJlL3Bvc3QKKwlpbmNyZW1lbnQvZGVjcmVtZW50IG9uIGFuIGVudW0uCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFJlb3JnYW5pemUgdGhpbmdzIHRvIHByb3Blcmx5IGxvb2sKKwlmb3IgYSBwb3N0Zml4IG9wZXJhdG9yICsrLy0tLCB3aXRob3V0IHRha2luZyB0aGUgZmFzdGVzdCB3YXkgb3V0IG9mCisJdGhlIHNlYXJjaCwgd2hpY2ggY291bGQgbG9zZS4KKworCSogY3Atc2VhcmNoLmMgKGNvbXB1dGVfdmlzaWJpbGl0eSk6IENoZWNrIGZvciBhIG1lbWJlciBmbgorCW1hbmlwdWxhdGluZyBpdHMgb3duIG1lbWJlcnMgYmVmb3JlIGNoZWNraW5nIHRoZSBiYXNldHlwZV9wYXRoLgorCisJKiBjcC1wdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBJbnN0ZWFkIG9mIGR5aW5nIGluIHRoZSBjYXNlCisJd2hlcmUgRDEgaGFzIGEgbG9jYWwgdmFsdWUgYnV0IG5vIGdsb2JhbCBvciBjbGFzcyB2YWx1ZSwgcmV0dXJuIGFuCisJZXJyb3JfbWFya19ub2RlLgorCisJKiBjcC1wdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEb24ndCBhc3NlcnQgaWYgSU5fREVDTCBpcyBudWxsLAorCXNpbmNlIHdlIHBhc3MgaXQgZG93biB0aGF0IHdheSBmcm9tIHRoZSBwYXJzZXIuCisJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgorCSogY3AtcGFyc2UueSAodGVtcGxhdGVfdHlwZSk6IExldCB0ZW1wbGF0ZV90eXBlX3NlZW5fYmVmb3JlX3Njb3BlIGJlCisJYW4gZXJyb3JfbWFyayBpZiBuZWNlc3NhcnksIHNvIHdlIGNhbiBpbnRlbGxpZ2VudGx5IGhhbmRsZSB0aGluZ3MKKwlsYXRlciByYXRoZXIgdGhhbiBnaXZlIHVzZWxlc3Mgc3ludGF4IGVycm9ycy4KKworCVNhdCBBcHIgMjQgMTc6MTI6MTcgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0Bwb3NlaWRvbi5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jICh0c3Vic3QpOiBXaGVuIHdlIGdvIGJhY2sgZm9yIGEgc2Vjb25kIHBhc3MsIG1ha2Ugc3VyZSB3ZQorCXN0YXJ0IG92ZXIgd2l0aCB0aGUgbGlzdCBvZiBtZXRob2RzLiAgRml4ZXMgcHJvYmxlbSBpbnRyb2R1Y2Ugb24KKwlTYXQgTWFyIDIwIDEyOjI5OjM3IDE5OTMuCisKK01vbiBBcHIgMjYgMTg6NDg6MTggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogU2lnbmVkbmVzcyBtYXR0ZXJzIGZvciBjb21wYXJpc29ucyBhbmQKKwlyaWdodCBzaGlmdHMuCisKKwkqIHhtLWFscGhhLmggKE9OTFlfSU5UX0ZJRUxEKTogRGVmaW5lIGFnYWluOyB0aGlzIHRpbWUgc2F5IHdoeS4KKworCSogdHJlZS5oIChJTlRFR1JBTF9UWVBFX1AsIEZMT0FUX1RZUEVfUCk6IE5ldyBtYWNyb3MuCisJKiBmb2xkLWNvbnN0LmM6IFVzZSBJTlRFR1JBTF9UWVBFX1AgYW5kIEZMT0FUX1RZUEVfUC4KKworCSogcHJvdG9pemUuYyAob3RoZXJfdmFyaWFibGVfc3R5bGVfZnVuY3Rpb24pOiBQcm9wZXJseSB0ZXN0IGZvcgorCXRoZSBwcmVzZW5jZSBvZiB0aGUgc3RyaW5nICIuLi4iLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBtYWtlIGEgY29weSBvZiB0eXBlIG9mIGVycm9yX21hcmtfbm9kZS4KKworTW9uIEFwciAyNiAxODoxNTowMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLWhwdXguaCAoTElOS19MSUJHQ0NfU1BFQ0lBTCk6IERlbGV0ZS4KKwkoUkVMQVRJVkVfUFJFRklYX05PVF9MSU5LRElSKTogRGVsZXRlLgorCSogcGEtZ2hwdXguaCwgcGEtaHB1eDcuaCwgcGEtZ3V4Ny5oOiBMaWtld2lzZS4KKworTW9uIEFwciAyNiAxNjo1NzowMyAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy10ZHVtcC5jIChDT0RFX01BU0spOiBEZWZpbmUgaWYgcnVubmluZyBvbiBhbiBhbHBoYSBpbnN0ZWFkCisJb2YgYSBNSVBTLgorCShNSVBTX0lTX1NUQUIpOiBEaXR0by4KKwkoTUlQU19NQVJLX1NUQUIpOiBEaXR0by4KKwkoTUlQU19VTk1BUktfU1RBQik6IERpdHRvLgorCSh0ZmlsZSk6IE5ldyBnbG9iYWwsIGhvbGRzIHJlc3VsdCBvZiAtdCBvcHRpb24sIHRvIHNraXAgZ2xvYmFsCisJaGVhZGVyLgorCShtYWxsb2MsIGNhbGxvYywgcmVhbGxvYywgZnJlZSk6IERvbid0IGRlY2xhcmUgb24gYWxwaGEuCisJKHByaW50X3N5bV9oZHIpOiBNYWtlIHN1cmUgYWxsIGFyZ3VtZW50cyBhcmUgcHJvcGVybHkgY2FzdCB0byBpbnQKKwlvciBsb25nLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9ybWF0IGlzICVsZCBvciAlZC4KKwkocmVhZF90ZmlsZSk6IERvbid0IGxvb2sgYXQgbWFnaWMgbnVtYmVyLCBpbnN0ZWFkIHVzZSAtdCBvcHRpb24gdG8KKwlkZXRlcm1pbmUgd2hldGhlciB0byBza2lwIHRoZSBnbG9iYWwgaGVhZGVyIG9yIG5vdC4KKwkobWFpbik6IFByb2Nlc3MgLXQgb3B0aW9uLgorCitNb24gQXByIDI2IDE3OjQ3OjEwIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisgICAgICAgICogT2JqZWN0aXZlIEMgcG9ydGFiaWxpdHkgY2xlYW51cCAKKwkqIG9iamMvT2JqZWN0LmMgKC1oYXNoLCAtZXJyb3IpOiBDYXN0IGNoYW5nZWQgdG8gc2l6ZV90CisJKiBvYmpjL2FyY2hpdmUuYywgb2JqYy9taXNjLmMsIG9iamMvc2VuZG1zZzogQXJndW1lbnQgdG8gc3RybGVuCisJY2FzdGVkIHRvIGNoYXIqIGV2ZXJ5d2hlcmUuIAorCSogb2JqYy9jbGFzcy5jIChfX29iamNfcmVzb2x2ZV9jbGFzc19saW5rcyk6IFVudXNlZCB2YXJpYWJsZQorCWNsYXNzMSByZW1vdmVkLiAKKwkqIG9iamMvY2xhc3MuYyAoY2xhc3NfcG9zZV9hcyk6IFVudXNlZCB2YXJpYWJsZSBub2RlIHJlbW92ZWQuCisJKiBvYmpjL2hhc2guYywgb2JqYy9pbml0LmM6IGV4dHJhIHBhcmVudGhlc2lzIGFyb3VuZCBhc3NpZ25tZW50CisJY29uZGl0aW9uYWxzLiAKKwkqIG9iamMvTWFrZWZpbGUsIG9iamMvaGFzaC5oLCBvYmpjL3J1bnRpbWUsIG9iamMvc2FycmF5Lmg6IElOX09CSkMKKwljaGFuZ2VkIHRvIElOX0dDQy4KKwkqIG9iamMvaW5pdC5jOiBVbnVzZWQgbG9jYWwgdmFyaWFibGUgb2JqZWN0X2NsYXNzIHJlbW92ZWQuIENhc3Qgb2YKKwlwb2ludGVyIHRvIGludCBjaGFuZ2VkIHRvIHNpemVfdC4KKwkqIG9iamMvbGlzdC5oIChsaXN0X2ZyZWUpOiBObyBsb25nZXIgZGVjbGFyZWQgaW5saW5lLgorCSogb2JqYy9vYmpjLWFwaS5oLCBvYmpjLXJ1bnRpbWUuaDogTm93IGluY2x1ZGVzIG1lbW9yeS5oLgorCSogb2JqYy9vYmpjLmg6IEFkZGVkIGRlY2xhcmF0aW9ucyBmb3IgbWFsbG9jIGFuZCBmcmllbmRzLCBJTl9PQkpDCisJY2hhbmdlZCB0byBJTl9HQ0MuICBUeXBlIG9mIGluZm8gbWVtYmVyIG9mIG9iamNfY2xhc3MgY2hhbmdlZCB0bworCXVuc2lnbmVkIGxvbmcuIAorCSogb2JqYy9vYmplY3RzLmMsIG9iamMvYXBpLmgsIG9iamMvc2FycmF5Lmg6IENoYW5nZWQgdXNhZ2Ugb2YKKwliY29weSB0byBtZW1jcHkuCisJKiBvYmpjL3NlbmRtc2cgKF9fb2JqY19wcmludF9kdGFibGVfc3RhdHMpOiBSZXR1cm50eXBlIGNoYW5nZWQgdG8KKwl2b2lkLiAKKworTW9uIEFwciAyNiAwNzo1NTowMyAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBzcGFyYy5oIChBU01fT1VUUFVUX0xPTkdfRE9VQkxFKTogTmV3IG1hY3JvLgorCSogc3lzdjQuaCAoQVNNX09VVFBVVF9MT05HX0RPVUJMRSk6IExpa2V3aXNlLgorCitNb24gQXByIDI2IDA4OjQ1OjE4IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiIGF0IHhpdi5pZXNkLmF1Yy5kaykKKworICAgICAgICAqIG9iamMvaGFzaC5oLCBvYmpjL2luaXQuYywgb2JqYy9vYmpjLmgsIG9iamMvc2FycmF5LmMsCisgICAgICAgIG9iamMvc2FycmF5LmgsIG9iamMvc2VsZWN0b3IuYywgb2JqYy9zZW5kbXNnLmM6IENoYW5nZSB1bnNpZ25lZAorICAgICAgICBpbnQgdG8gc2l6ZV90IHdoZW4gY2FzdGluZyBwb2ludGVyIHR5cGUgdG8gaW50ZWdlci4KKyAgICAgICAgKiBvYmpjL3NhcnJheS5oIChzdHJ1Y3Qgc29mZnNldCk6IENoYW5nZWQgdG8gYWRkIHVwIHRvIHNpemVvZiAKKyAgICAgICAgKHNpemVfdCkgaW4gc3RlYWQgb2Ygc2l6ZW9mICh1bnNpZ25lZCBpbnQpLgorICAgICAgICAqIG9iamMvaGFzaC5oOiBJbmNsdWRlIHN0ZGRlZi5oCisgICAgICAgICogb2JqYy9fZm9yd2FyZC5oOiBpbnQgY2hhbmdlZCB0byBzaXplX3QuCisKKyAgICAgICAgKiBvYmpjL09iamVjdC5tLCBvYmpjL2FyY2hpdmUuYywgb2JqYy1hcGkuaDogVGFrZSBvdXQgYXJjaGl2aW5nCisgICAgICAgIHN1cHBvcnQgZm9yIGFscGhhLiAgCisKKyAgICAgICAgKiBvYmpjL01ha2VmaWxlOiAoSU5fT0JKQyk6IG5ldyAjZGVmaW5lIHVzZWQgdG8gY29udHJvbCBpbmNsdXNpb24KKyAgICAgICAgb2YgZ3N0ZGFyZyBvciBzdGRhcmcgZm9yIHRoZSBydW50aW1lLiAgIG9iamMvb2JqYy5oLAorICAgICAgICBvYmpjL3J1bnRpbWUuaCwgb2JqYy9zYXJyYXkuaDogVXBkYXRlZCB0byB1c2UgdGhlIGFib3ZlLiAKKworU3VuIEFwciAyNSAyMTo1MDoxNiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jICh5eWxleCk6IFJlLWluY29ycG9yYXRlIGNoYW5nZXMgdG8gcmVkbyBjb252ZXJ0aW5nCisJZmxvYXQgdmFsdWVzIHRvIGRlc2lyZWQgdHlwZS4KKworU3VuIEFwciAyNSAxODoxMToyNCAxOTkzICBSb24gR3VpbG1ldHRlICAocmZnQG5ldGNvbS5jb20pCisKKwkqIHJ0bC5oIChOT1RFX0lOU05fRlVOQ1RJT05fQkVHKTogTWFrZSBub24temVyby4KKwkqIHJ0bC5jIChub3RlX2luc25fbmFtZSk6IFJlLW9yZGVyIGZvciBhYm92ZS4KKworCSogZHdhcmZvdXQuYyAob3V0cHV0X2RlY2wpOiAgQ2hlY2sgZm9yIERFQ0xfSU5JVElBTCA9PSBOVUxMX1RSRUUKKwlyYXRoZXIgdGhhbiBERUNMX0VYVEVSTkFMICE9IDAgd2hlbiB0cnlpbmcgdG8gc2VlIGlmIHdlIGhhdmUgYQorCW1lcmUgZnVuY3Rpb24gZGVjbGFyYXRpb24gcmF0aGVyIHRoYW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uLgorCShkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wpOiAgTGlrZXdpc2UuICBBbHNvLCBkb24ndCBib3RoZXIgY2hlY2tpbmcKKwlUUkVFX1VTRUQgZm9yIGZpbGUtc2NvcGUgZnVuY3Rpb25zLCBzaW5jZSBpdCBpc24ndCAxMDAlIGFjY3VyYXRlCisJdW50aWwgdGhlIGVuZCBvZiBjb21waWxhdGlvbiBhbnl3YXkuCisKK1N1biBBcHIgMjUgMTc6MDc6NDQgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5jIChtZW1fYWxpZ25lZF84KTogRGVsZXRlIGlmZGVmZWQgb3V0IGNvZGUuICBBZGQgc3VwcG9ydAorCWZvciBUQVJHRVRfVU5BTElHTkVEX0RPVUJMRVMuCisJKiBzcGFyYy5oIChUQVJHRVRfSE9QRV9BTElHTiwgVEFSR0VUX0ZPUkNFX0FMSUdOKTogRGVsZXRlLgorCShUQVJHRVRfVU5BTElHTkVEX0RPVUJMRVMpOiBEZWZpbmUuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSBob3BlLWFsaWduLCBmb3JjZS1hbGlnbi4gIEFkZAorCXVuYWxpZ25lZC1kb3VibGVzIGFuZCBuby11bmFsaWduZWQtZG91Ymxlcy4KKwkoUk9VTkRfUkVHKTogRGVsZXRlLgorCShGSVJTVF9QQVJNX09GRlNFVCwgRlVOQ1RJT05fQVJHX0FEVkFOQ0UsIEZVTkNUSU9OX0FSRywKKwlGVU5DVElPTl9JTkNPTUlOR19BUkcsIEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTLAorCUZVTkNUSU9OX0FSR19CT1VOREFSWSk6IERlbGV0ZSBmb3JjZS1hbGlnbiBzdXBwb3J0LgorCShMT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEZWZpbmUgdG8gMTI4LgorCisJKiBzY2hlZC5jIChjcmVhdGVfcmVnX2RlYWRfbm90ZSk6IFJld3JpdGUgc28gYXMgdG8gY29uc2VydmUKKwlyZWdpc3RlcnMga2lsbGVkIG5vdCBudW1iZXIgb2YgUkVHX0RFQUQgbm90ZXMuCisJKHNjaGVkdWxlX2Jsb2NrKTogQ2hhbmdlIGNvbW1lbnRzIGFib3V0IGRlYWRfbm90ZXMgdmFyaWFibGUuCisKKwkqIHNwYXJjLmggKFJFR19BTExPQ19PUkRFUiwgUkVHX0xFQUZfQUxMT0NfT1JERVIpOiBNYWtlICVmMC8lZjEKKwl0aGUgbGFzdCBmbG9hdCByZWdpc3RlcnMgYWxsb2NhdGVkLgorCisJKiBzcGFyYy5jIChvdXRwdXRfbG9hZF9hZGRyZXNzLCBvdXRwdXRfc2l6ZV9mb3JfYmxvY2tfbW92ZSwKKwlvdXRwdXRfYmxvY2tfbW92ZSk6IElmZGVmIG91dC4KKwkqIHNwYXJjLm1kIChtb3ZzdHJzaSk6IENvbW1lbnQgb3V0LgorCisJKiBzcGFyYy5jIChvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBFbWl0ICdub3AnIGluc3RlYWQgb2YKKwknc3ViICVzcCwtMCwlc3AnIHdoZW4gdGhlIGZyYW1lIGlzIGVtcHR5LgorCSogc3BhcmMubWQgKG1vdmRmKTogQWRkIGEgZGVmaW5lIHNwbGl0LgorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9maXhlZF9iaXRfZmllbGQpOiBBZGp1c3QgQklUUE9TIHNvIHRoYXQgaXQKKwlmaXRzIGluc2lkZSBNT0RFIGJlZm9yZSBhZGp1c3RpbmcgT0ZGU0VUIHRvIGdldCBhbiBhbGlnbmVkIGFkZHJlc3MuCisKK1N1biBBcHIgMjUgMDY6Mjg6NTYgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwpOiBJZiBhIHZhcmlhYmxlIGhhcyBhbiBhc20gb3BlcmFuZCB0aGF0CisJcmVmZXJzIHRvLCBlLmcuLCBmcCwgbWFrZSBhIGRpc3RpbmN0IFJUTCBmb3IgaXQuCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IExhc3QgYXJnIHRvIF9fYnVpbHRpbl9hcHBseQorCWlzIHNpemVfdCwgbm90IGludC4KKworCSogYy1sZXguYyAoeXlsZXgpOiBEb24ndCB3YXJuIGFib3V0IGZsb2F0aW5nIHBvaW50IG91dCBvZiAKKwlyYW5nZSBpZiB0YXJnZXQgZmxvYXRpbmctcG9pbnQgZm9ybWF0IGlzIElFRUUuCisKKwkqIHJvbXAuaCAoU0laRV9UWVBFKTogRGVsZXRlZC4KKworU2F0IEFwciAyNCAxNjo0Njo0MSAxOTkzICBTdGVwaGVuIEwuIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIGMtbGV4LmMgKGZvcmdldF9wcm90b2NvbF9xdWFsaWZpZXJzKTogQ2FzdCBlbnVtcyB0byBpbnRzIGJlZm9yZQorCWNvbXBhcmluZy4KKworU2F0IEFwciAyNCAxMzowODo1NiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IFBhc3MgYSByZWdpc3RlciBvcGVyYW5kLCBub3QKKwlhIG1lbW9yeSBvcGVyYW5kIHRvICJjYWNoZWZsdXNoIi4KKwkqIHBhLm1kIChjYWNoZWZsdXNoKTogUmV3b3JrIHBhdHRlcm4gYW5kIG91dHB1dCB0ZW1wbGF0ZSB0byBhdm9pZAorCXVzaW5nIFJFRytEIGFkZHJlc3NpbmcuCisKK1NhdCBBcHIgMjQgMTE6MTU6MDIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IFVzZSBwcm9wZXIgdHlwZSBmb3Ige2FsbCxzb21lfV9uZWVkZWQuCisJKiBjc2UuYyAoaW52YWxpZGF0ZSk6IExpa2V3aXNlIGZvciBpbl90YWJsZS4KKworCSogdHJlZS5oIChidWlsZF9iaW5hcnlfb3AsIGJ1aWxkX2luZGlyZWN0X3JlZiwgYnVpbGRfdW5hcnlfb3ApOgorCURlbGV0ZSBkZWNsYXJhdGlvbnM7IHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBmcm9udCBlbmRzLgorCisJKiBvYmpjLWFjdC5jIChIQVNIRlVOQ1RJT04pOiBDYXN0IHBvaW50ZXJzIHRvIHdpZGVzdCBpbnQgdHlwZS4KKworU2F0IEFwciAyNCAwMjo0ODozNyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlDeWdudXM8LT5GU0YgbWVyZ2UuCisKKwlGcmkgQXByIDIzIDExOjA4OjI1IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jLCBjcC1jbGFzcy5jLCBjcC1kZWNsLmMsIGNwLWV4Y2VwdC5jLCBjcC1pbml0LmMsCisJY3AtcGFyc2UueSwgY3AtcHQuYywgY3Atc2VhcmNoLmMsIGNwLXR5cGUyLmMsIGNwLXR5cGVjay5jLAorCWNwLXhyZWYuYzogRml4IG1hbnkgYnVncyBpbiB0eXBlcyBvZiBmbiBhcmdzICYgc3VjaC4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdoZW4gZGVhbGluZyB3aXRoIGEgY2xhc3MtbG9jYWwKKwl0eXBlZGVmLCBvbmx5IGNhbGwgcG9wbGV2ZWwgd2hlbiB0aGUgY3VycmVudF9iaW5kaW5nX2xldmVsIGlzbid0CisJd2hhdCB3ZSBtYXJrZWQgYXMgYmVpbmcgdGhlIGxvY2FsX2JpbmRpbmdfbGV2ZWwuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDYWxsIHB1c2hkZWNsX2NsYXNzX2xldmVsLCBub3QKKwlwdXNodGFnLCB0byBwdXQgYSBjbGFzcy1sb2NhbCB0eXBlZGVmIGludG8gaXRzIHByb3BlciBzY29wZS4KKwlBbHNvIGRpc2FibGUgdGhlIHdhcm5pbmcgYWJvdXQgYSB0eXBlZGVmIGhpZGluZyB0aGUgcHJldmlvdXMKKwlvbmUsIHNpbmNlIHRoZSBjcC1jbGFzcy5jIGNoYW5nZSBub3cgZGlhZ25vc2VzIHRoYXQgcHJvYmxlbS4KKwkqIGNwLWNsYXNzLmMgKGRlbGV0ZV9kdXBsaWNhdGVfZmllbGRzXzEpOiBBbHNvIGNoZWNrIGZvciBkdXBsaWNhdGVkCisJdHlwZSBuYW1lcy4KKworCSogY3AtbGV4LmMgKHl5ZXJyb3IpOiBEZWxldGUgZXh0ZXJuIGRlY2wgb2YgaW5wdXRfcmVkaXJlY3RlZC4KKworCSogY3AtcGFyc2UueSAocHJpbWFyeSk6IElmIHRoZSBnbG9iYWwgdmFsdWUgZm9yIGEgc2NvcGVkIGlkZW50aWZpZXIKKwllbmRzIHVwIGJlaW5nIGFuIEFERFJfRVhQUiwgY2FsbCBhc3NlbWJsZV9leHRlcm4gb24gaXRzIGFyZ3VtZW50LAorCW5vdCBvbiB0aGUgQUREUl9FWFBSIGl0c2VsZi4gIEZpeGVzIHRoZSBJTVBPUlQgcHJvYmxlbSBvbiB0aGUgUEEuCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcl8xKTogUHV0IGluIG1pc3NpbmcgYGVsc2UnLgorCisJV2VkIE9jdCAgNyAxNjowMDoyOSAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwlDaGFuZ2UgcHJvcGFnYXRlZCBmcm9tIHRoZSBDIGZyb250LWVuZC4KKwkqIGNwLWRlY2wuYyAoc2hhZG93X3RhZyk6IFVzZSBwZWR3YXJuIGZvciB1c2VsZXNzIGtleXdvcmQuCisKKwlXZWQgT2N0ICA3IDE3OjUxOjM2IFBEVCAxOTkyICBSb24gR3VpbG1ldHRlIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogY3AtdHlwZTIuYyAoZGlnZXN0X2luaXQpOiAgSGFuZGxlIHVuaW9uIGluaXRpYWxpemVycyB3aGljaCBhcmUKKwkicmF3IiBjb25zdHJ1Y3RvcnMuCisJKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6ICBSZW5hbWVkIGBlcnJlZCcgdG8gYGVycm9uZW91cycgKGFzIGluCisJdGhlIEMgZnJvbnQgZW5kKS4KKwkocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogIEFkZGVkIGNvZGUgdG8gaGFuZGxlIHVuaW9uIGluaXRpYWxpemVycy4KKworCUZyaSBPY3QgMjMgMTY6Mjk6NDUgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJQ2hhbmdlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgQyBmcm9udC1lbmQuCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBXaGVuIGluaXRpYWxpemluZyBhIHVuaW9uLAorCWhhbmRsZSB0aGUgY2FzZSBvZiBhbiBlbXB0eSBpbml0IGxpc3QuCisKKwlUdWUgRGVjICAxIDIxOjM1OjM2IDE5OTIgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLWNhbGwuYyAoY29udmVydF9oYXJzaG5lc3MpOiBBZGQgc3VwcG9ydCBmb3IgZWxsaXBzaXMgbWF0Y2hpbmcKKwl3aGVuIGRlYWxpbmcgd2l0aCBmdW5jdGlvbiBwb2ludGVycyAob3IgcmVmZXJlbmNlcykgaW4gYXJndW1lbnQKKwlsaXN0cy4KKwkocmFua19mb3Jfb3ZlcmxvYWQpOiBEaXR0by4KKwkoY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogRGl0dG8uCisJKCpfSEFSU0hORVNTKTogRGl0dG8KKwkqIGNwLWNsYXNzLmggKHN0cnVjdCBjYW5kaWRhdGUpOiBEaXR0by4KKworCU1vbiBKYW4gIDQgMTE6NDY6MTkgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJQ2hhbmdlcyBwcm9wYWdhdGVkIGZyb20gdGhlIEMgZnJvbnQtZW5kLgorCSogY3AtdHlwZWNrLmMgKGNfc2l6ZW9mLCBjX3NpemVvZl9ub3dhcm4sIGNfc2l6ZV9pbl9ieXRlcyk6CisJQ2FsbCBmb3JjZV9maXRfdHlwZSB3aXRoIGVuZCByZXN1bHQuCisKKwlTYXQgSmFuIDMwIDAxOjIzOjIyIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKyAgICAgICAgKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2VlIHRvIHRoYXQgc3RhdGljIG1lbWJlcnMgd2hvc2UKKwl0eXBlIGlzIHRoZSBjbGFzcyB0aGV5J3JlIGRlY2xhcmVkIGluIGdldHMgYSBjb3JyZWN0IG1vZGUuICBUaGlzCisJaXMgYSBjb21wbGV0aW9uIG9mIHRoZSBKYW4gMjNyZCBjaGFuZ2UuCisKKwlNb24gRmViICAxIDA5OjQwOjExIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLXNlYXJjaC5jIChjb21wdXRlX3Zpc2liaWxpdHkpOiBBZGQgc3VwcG9ydCBmb3IgIGFub255bW91cworCXVuaW9ucyBuZXN0ZWQgaW4gY2xhc3Nlcy4KKworCVR1ZSBGZWIgIDIgMTY6MDY6MTAgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJRWxpbWluYXRlIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGluIHNwZWNiaXRzOgorCSogY3AtbGV4LmggKFJJRF9CSVRfVFlQRSk6IE5ldyB0eXBlZGVmIGZvciBSSURfLi4uIGJpdHMuCisJKFJJREJJVCk6IE5ldyBjb252ZW5pZW5jZSBtYWNybyBmb3IgUklEXy4uLiBiaXRzLgorCSogY3AtZGVjbC5jIChncm9rdmFyZGVjbCwgZ3Jva2RlY2xhcmF0b3IpOiBEZWNsYXJlIHNwZWNiaXRzCisJdG8gYmUgUklEX0JJVF9UWVBFLiAgVXNlIFJJREJJVCBpbnN0ZWFkIG9mICIxPDxSSURfLi4uIi4KKworCU1vbiBGZWIgMTUgMTA6NDU6MTIgMTk5MyAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BkZWxsYS5hcHBsaS5zZSkKKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX3R5cGVuYW1lX292ZXJsb2FkKTogSWRlbnRpZmllcnMgYnVpbHQgYnkgdGhpcworCWZ1bmN0aW9uIG5lZWRzIHRoZSBJREVOVElGSUVSX09QTkFNRV9QIHNsb3Qgc2V0LgorCisJV2VkIEFwciAyMSAxMToyNToxNSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAobG9va3VwX25lc3RlZF90eXBlKTogV2hlbiBkZWFsaW5nIHdpdGggdHlwZXMgdGhhdCBhcmUKKwlsb2NhbCB0byBhIG5lc3RlZCBjbGFzcydzIG1lbWJlciBmbiwgbWFrZSBzdXJlIHRvIGhhbmQgYmFjayBhIFRZUEVfREVDTAorCWluc3RlYWQgb2YgYSBSRUNPUkRfVFlQRS4KKworCVR1ZSBBcHIgMjAgMjA6MTc6NDIgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0Bwb3NlaWRvbi5jeWdudXMuY29tKQorCisJKiBjcC1zcGV3LmMgKHl5bGV4KTogQWRkIGB0eXBlc3BlYyAoSUQ6OipJRClbJyBhbmQgYHR5cGVzcGVjCisJKElEOjoqSUQpKCcgdG8gbGlzdCBvZiB0aGluZ3MgdGhhdCBwYXJzZSBhcyBkZWNsYXJhdG9ycy4KKworCU1vbiBBcHIgMTkgMTU6MDU6MjEgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAocmVwb3J0X2FtYmlndW91c19taV92aXJ0dWFscyk6IElmIGlzIG5ldmVyIGFuIGVycm9yCisJdG8gaGF2ZSBzYW1lIG5hbWVkIGNsYXNzIG1lbWJlcnMgYXQgZGVjbGFyYXRpb24gdGltZSwgYW1iaWd1aXRpZXMKKwlhcmUgbm93IGNhdWdodCBhdCB1c2Ugc2lnaHRzLgorCisJRnJpIEFwciAxNiAxMzo1OToyOCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IElmIHRoZXkgZGlkbid0IGRlY2xhcmUgYSBwb3N0Zml4CisJb3BlcmF0b3IgKysgb3IgLS0sIHRoZW4gZmFsbCBiYWNrIGFuZCB1c2UgdGhlIHByZWZpeCBvbmUuCisJKiBjcC1kZWNsLmMgKGdyb2tmbmRlY2wpOiBGb3JiaWQgYW4gb3BlcmF0b3IgKysvLS0gd2l0aCBpdHMgc2Vjb25kCisJYXJndW1lbnQgYXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiBpbnQuCisKKwkqIGNwLWxleC5jIChzZXRfeXlkZWJ1Zyk6IEFkZCBleHRlcm4gZGVjbCBvZiB5eWRlYnVnLgorCisJRml4IGVudW1zIGluIG5lc3RlZCBjbGFzc2VzLgorCSogY3Atc2VhcmNoLmMgKGxvb2t1cF9uZXN0ZWRfZmllbGQpOiBOZXcgYXJndW1lbnQgYGNvbXBsYWluJywgdG8KKwljb250cm9sIGlmIHdlIHNob3VsZCBlbWl0IGFuIGVycm9yIGFib3V0IGFzc2lnbm1lbnQgdG8gYSBtZW1iZXIgb2YKKwlhbiBlbmNsb3NpbmcgY2xhc3Mgb3Igbm90LiAgQWxzbywgaWYgSUQgZW5kcyB1cCBiZWluZyBhbiBlcnJvcl9tYXJrLAorCXNldCBpdCB0byBhIE5VTEwgc28gd2UgZG9uJ3QgdHJ5IHRvIGRvIG5hc3R5IHRoaW5ncyBsYXRlci0tLWJldHRlcgorCXRvIGFzc3VtZSB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhdCBhbGwuCisJKiBjcC10cmVlLmggKGxvb2t1cF9uZXN0ZWRfZmllbGQpOiBBZGQgbmV3IGFyZyB0byBwcm90b3R5cGUuCisJKiBjcC1kZWNsLmMgKGxvb2t1cF9uYW1lKTogUGFzcyBpZiBwcmVmZXJfdHlwZSBpcyAtMiBpbnRvCisJbG9va3VwX25lc3RlZF9maWVsZCwgc2luY2UgdGhlcmUgYXJlIGNhc2VzIChlLmcuLCBuZXN0ZWQgZW51bXMpIHdoZW4KKwl3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaGVyZS4KKwkqIGNwLWxleC5jIChkb19pZGVudGlmaWVyKTogUGFzcyBjb21wbGFpbiBhcmcgYXMgMSBpbnRvCisJbG9va3VwX25lc3RlZF9maWVsZC4KKworCVRodSBBcHIgMTUgMTE6MjM6MTggMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0Bwb3NlaWRvbi5jeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAocmVwb3J0X2FtYmlndW91c19taV92aXJ0dWFscyk6IFBhc3MgcG9pbnRlcnMgdG8KKwlhcnJheXMsIG5vdCBwb2ludGVycyB0byBmaXJzdCBlbGVtZW50cyBpbiB0aGUgYXJyYXkgaW4gY2FsbCB0bworCXJhbmtfbWlfdmlydHVhbHMuCisKKwkqIGNwLWxleC5jIChkb19pZGVudGlmaWVyKSwgY3AtcGFyc2UueTogbW92ZQorCXVuZGVjbGFyZWRfdmFyaWFibGVfbm90aWNlIHRvIHdoZXJlIGl0IGlzIHJlYWxseSB1c2VkLgorCisJKiBjcC1sZXguYyAoZG9faWRlbnRpZmllcik6IEltcHJvdmUgZXJyb3IgbWVzc2FnZS4KKworCVR1ZSBBcHIgMTMgMTc6MDQ6MTIgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogT0ZGU0VUX1JFRnMgbWF5IG5vdCBhbHdheXMgaGF2ZQorCWEgVFJFRV9DT0RFIChUUkVFX1RZUEUgKHgpKSBvZiBPRkZTRVRfVFlQRSwgYnV0IHRoZXkgYWx3YXlzIHdpbGwKKwloYXZlIGEgVFJFRV9DT0RFICh4KSBvZiBPRkZTRVRfUkVGLgorCisJRnJpIEFwciAgOSAyMDoyNjozMiAxOTkzICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IFVzZSBNQVBfQ0hBUkFDVEVSIHRyYW5zbGF0ZSBpbmNvbWluZworCWNoYXJhY3RlciBzZXQuICBTZWUgYy1sZXguYyBDaGFuZ2VMb2cgZW50cnkgZm9yIG1vcmUgZGV0YWlscy4KKworCVRodSBBcHIgIDggMTU6MzA6NTggMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IFdoZW4gbG9va2luZyBzb21ldGhpbmcgdXAsIGlmCisJd2FudF90eXBlIGlzIHNldCwgYW5kIHdoYXQgd2UgZmluZCBpcyBhbWJpZ3VvdXMgbWFrZSBzdXJlIHdlIHNldAorCWVycnN0ciB0byAwLCBldmVuIHdoZW4gcnZhbCBpcyBhbHJlYWR5IE5VTExfVFJFRS4KKworCVRodSBBcHIgIDggMTE6NDA6MTYgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwpOiBBZGQgcHJvdG90eXBlLgorCisJVHVlIEFwciAgNiAxMzozNjowMCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBXaGVuIHdlIHNlZSBgdHlwZWRlZiBlbnVtIC4uLicgaW5zaWRlCisJYSBjbGFzcywgcHJvcGVybHkgZ3JvayB0aGUgdGFnIGluc3RlYWQgb2YgZ2l2aW5nIHR3byBib2d1cyBlcnJvcnMuCisJKGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwpOiBEb24ndCBtYWtlIGl0IHN0YXRpYywgYW5kIGRlbGV0ZSBpdHMKKwlwcm90b3R5cGUuCisKKwkqIGNwLWxleC5oIChlbnVtIHJpZCk6IE1vdmUgUklEX1VOVVNFRDEgdG8gdGhlIGVuZCwgc28gdGhhdCBSSURfQVVUTworCXdpbGwgYmUgMzAsIG5vdCAzMS4gIFdlJ3JlIGF0IHRoZSBsaW1pdCwgdGhlIG5leHQgdGltZSBhIG5ldyByaWQgaXMKKwlhZGRlZCB0byB0aGlzLCB3ZSBoYXZlIHRvIHJlLWltcGxlbWVudCBpdCB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93cy4KKworCVNhdCBBcHIgIDMgMTI6MTY6MjMgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1pbml0LmMgKGVtaXRfYmFzZV9pbml0KTogaW5pdCBjYW4gYmUgTlVMTF9UUkVFIHdoZW4gZGVhbGluZworCXdpdGggYXJyYXlzLCBndWFyZCBhZ2FpbnN0IGl0LgorCitGcmkgQXByIDIzIDE5OjMzOjU4IDE5OTMgIFRvciBFZ2dlICAodGVnZ2VAcHZ2LnVuaXQubm8pCisgCisgCSogcmVvcmcuYyAocmVsYXhfZGVsYXlfc2xvdHMpOiBNYWtlIHN1cmUgdGFyZ2V0X2xhYmVsIGlzIHNldC4KKyAKK0ZyaSBBcHIgMjMgMTk6MTk6MDYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc2hhZG93X3RhZ193YXJuZWQpOiBMZXQgd2FybmVkIGhhdmUgdGhyZWUgdmFsdWVzLCBzbyB0aGF0CisJYSBtZXJlIHdhcm5pbmcgZG9lc24ndCBwcmV2ZW50IGEgcGVkd2Fybi4gIERvbid0IHNraXAgdGhlIGVycm9yIGNhbGwKKwlhdCB0aGUgZW5kIG9uIGFjY291bnRlZCBvZiB3YXJuZWQuCisKKwkqIGMtZGVjbC5jIChwdXNoX3Bhcm1fZGVjbCk6IFR1cm4gb2ZmIHdhcm5pbmcgd2hlbiBwYXJhbWV0ZXIKKwlzaGFkb3dzIHR5cGVkZWYuCisKK0ZyaSBBcHIgMjMgMTY6NDE6NTQgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoY2FzZXNpMCk6IEluZGljYXRlIHRoYXQgdGhlIFBDIGlzIHNldCB0byB0aGUgCisJb3V0LW9mLXJhbmdlIGxhYmVsIGlmIHRoZSBpbmRleCBpcyBub3QgdmFsaWQuCisKK0ZyaSBBcHIgMjMgMTQ6MDA6NDggMTk5MyAgUGV0ZXIgU2NoYXVlciAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCisKKwkqIGkzODYvc3ZyM2RieC5oLCBpMzg2L3N2cjNnYXMuaDogUmVmbGVjdCBuZXcgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKwkqIGkzODYvdC1zdnIzZGJ4OiBOZXcgZmlsZSB0byBpbnN0YWxsIHRoZSByZXF1aXJlZCBsZCBpZmlsZXMKKwlhdXRvbWF0aWNhbGx5LgorCSogY29uZmlndXJlIChpWzM0XTg2LS4uLik6IFVzZSB0LXN2cjNkYnggaWYgY29uZmlndXJlZCAtLXdpdGgtc3RhYnMuCisKK0ZyaSBBcHIgMjMgMTM6NTM6MzEgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQWR2YW5jZSBmb2xsb3dpbmdfaW5zbiBpZiBpdCBpcyBhCisJY2xvYmJlciwgbm90IGlmIHRoZSBuZXh0IGluc24gaXMgYSBjbG9iYmVyLgorCitGcmkgQXByIDIzIDEzOjQ0OjEyIDE5OTMgIEpvZXkgUHJ1ZXR0ICAoam9leUB0ZXNzaS5jb20pCisKKwkqIHByb3RvaXplLmMgKHNjYW5fZm9yX21pc3NlZF9pdGVtcyk6IEFkZCBrZXl3b3JkczogZWxzZSwgZG8sIGNhc2UuCisKK0ZyaSBBcHIgMjMgMDY6NTI6MjUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIFJFQUxQQVJUX0VYUFIsIElNQUdQQVJUX0VYUFIpOiBBdm9pZCB1c2luZworCWJ1aWxkX3t1bmFyeSxiaW5hcnl9X29wIHNpbmNlIHRoZSBjYWxsaW5nIHNlcXVlbmNlcyBkZXBlbmQgb24KKwl0aGUgZnJvbnQtZW5kLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBPRkZTRVRfUkVGKTogTGlrZXdpc2UuCisJKiBjb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlciwgY29udmVydF90b19jb21wbGV4KTogTGlrZXdpc2UuCisKKwkqIGMtdHlwZWNrLmMgKHJlYWRvbmx5X3dhcm5pbmcpOiBDb3JyZWN0bHkgY2hlY2sgZm9yIGFzc2lnbm1lbnRzCisJdG8gaXRlcmF0b3JzLgorCitUaHUgQXByIDIyIDA3OjQ0OjQwIDE5OTMgIFRvbSBXb29kICAod29vZEBuZXh0LmNvbSkKKworCSogYy1sYW5nLmMsIG9iamMtYWN0LmMgKG1heWJlX29iamNfY29tcHR5cGVzKTogVW5kbyB0aGUgcHJldmlvdXMKKwljaGFuZ2UgYW5kIG1ha2UgdGhlIHVuZGVjaWRlZCByZXR1cm4gdmFsdWUgZnJvbSAyIHRvIC0xIHRvIGF2b2lkCisJY29uZnVzaW9uIHdpdGggdGhlIHZhbHVlcyB1c2VkIGJ5IGNvbXB0eXBlcy4KKwkob2JqY19jb21wdHlwZXMpOiBEaXR0by4gIFdoZW4gdHdvIHJlY29yZCB0eXBlcyBhcmUgYmVpbmcKKwljb21wYXJlZCwgYW5kIG5vbmUgb2YgdGhlIHR5cGVkIG9iamVjdCBjYXNlcyBhcHBsaWVzLCByZXR1cm4gLTEgdG8KKwlpbmRpY2F0ZSBubyBkZWNpc2lvbi4KKwkqIGMtdHlwZWNrLmMgKGNvbXB0eXBlcyk6IE9ubHkgcGFzcyBhbG9uZyBhIGtub3duIHJldHVybiB2YWx1ZQorCWZyb20gbWF5YmVfb2JqY19jb21wdHlwZS4KKwkoY29tcF90YXJnZXRfdHlwZXMpOiBJZiBtYXliZV9vYmpjX2NvbXB0eXBlcyBjb21wdXRlZCBhIGtub3duCisJYW5zd2VyLCByZXR1cm4gaXQuICBEb24ndCByZWN1cnNlIGZvciBPYmplY3RpdmUtQy4KKworCSogbmV4dHN0ZXAuaCAoQVNNX0ZJTEVfU1RBUlQpOiBEb24ndCBvdXRwdXQgYSAuZmlsZSBkaXJlY3RpdmUuCisJVGhhdCdzIHVzZWQgYnkgdGhlIGFzc2VtYmxlciBmb3IgZXJyb3IgcmVwb3J0aW5nLgorCitXZWQgQXByIDIxIDE3OjQ1OjUwIDE5OTMgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogZHdhcmZvdXQuYyAobG9jYXRpb25fb3JfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogIEZpeGVkIHRvIHVzZQorCURFQ0xfSU5DT01JTkdfUlRMIGZvciBQQVJNX0RFQ0xzIG9ubHkgd2hlbiBERUNMX1JUTCBpc24ndCB1c2FibGUsCisJYW5kIGV2ZW4gdGhlbiwgb25seSB3aGVuIGl0IGFjdHVhbGx5IHBvaW50cyB0byB0aGUgcmlnaHQgcGxhY2UuCisKKwkqIGludGVncmF0ZS5jIChpbnRlZ3JhdGVfcGFybV9kZWNscyk6ICBDb3B5IHRoZSBERUNMX0FSR19UWVBFIHZhbHVlCisJZnJvbSB0aGUgUEFSTV9ERUNMIGJlaW5nIGNsb25lZCBpbnRvIHRoZSBERUNMX0FSR19UWVBFIGZpZWxkIG9mIHRoZQorCWNsb25lLgorCisJKiBkd2FyZi5oIChBVF9sb191c2VyLCBBVF9oaV91c2VyKTogIEZpeCBkZWZpbmVkIHZhbHVlcyB0byBiZSBjb3JyZWN0CisJYWNjb3JkaW5nIHRvIGZpbmFsIERXQVJGIFYxIHNwZWMuCisKK1R1ZSBBcHIgMjAgMjA6MzI6NTcgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogVXNlIG1vZGUgb2YgdHlwZSwgbm90IEJMS21vZGUuCisKK1R1ZSBBcHIgMjAgMTg6Mzc6MTIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXIgYXQgdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlIChyczYwMDAtaWJtLWFpeCopOiBQdXQgY2FzZXMgaW4gcHJvcGVyIG9yZGVyLgorCitNb24gQXByIDE5IDE1OjI3OjE2IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTmV3IEZVTkNUSU9OX0FSR19DQUxMRUVfQ09QSUVTIG1hY3JvLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRGl0dG8uCisKK1NhdCBBcHIgMTcgMTc6NDQ6NTkgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5oIChGVU5DVElPTl9BUkdfUEFERElORyk6IEFkZCBwYXJlbnMgdG8gbWFrZSBjbGVhcmVyLgorCShNVVNUX1BBU1NfSU5fU1RBQ0spOiBEb24ndCBhbGxvdyBtYWNoaW5lIHRvIG92ZXJyaWRlIChub25lCisJY3VycmVudGx5IGRvKS4KKwlEb24ndCBmb3JjZSBpbiBzdGFjayBpZiB3cm9uZyBwYWRkaW5nIHdoZW4gcGFkZGluZyBpc24ndCBuZWVkZWQuCisKKwkqIGJhc2ljLWJsb2NrLmggKHJlZ19iYXNpY19ibG9jayk6IE5vdyBpbnQgKiwgbm90IHNob3J0ICouCisJKiBmbG93LmMgKHVpZF9ibG9ja19udW1iZXIpOiBMaWtld2lzZS4KKwkoZmxvd19hbmFseXNpcyk6IEFsbG9jYXRlIHVpZF9ibG9ja19udW1iZXIgYW5kIHJlZ19iYXNpY19ibG9jaworCWFzIGFycmF5IG9mIGludHMuCisJKiBjb21iaW5lLmMgKHJlZ19sYXN0X3NldF9sYWJlbCwgcmVnX2xhc3Rfc2V0X3RhYmxlX3RpY2ssIGxhYmVsX3RpY2spOgorCVVzZSBpbnQsIG5vdCBzaG9ydCwgZm9yIGNvdW50aW5nIGxhYmVscy4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBBbGxvY2F0ZSB0aGVzZSB2YXJzIGFzIGFycmF5cyBvZiBpbnRzLgorCSoganVtcC5jIChzYW1lX3JlZ3MpOiBOb3cgYXJyYXlzIG9mIGludHMuCisJKHRocmVhZF9qdW1wcyk6IGFsbF9yZXNldCBhbHNvIGFycmF5IG9mIGludHMsIGFuZCBhbGxvY2F0ZSBhcyBpbnRzLgorCSogcmVnLXN0YWNrLmMgKGJsb2NrX251bWJlciwgQkxPQ0tfTlVNLCByZWdfdG9fc3RhY2spOiBVc2UgaW50cywKKwlub3Qgc2hvcnRzIHRvIGNvdW50IGJsb2Nrcy4KKworU2F0IEFwciAxNyAwMzoyNzo0OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKHVuYXJ5X2V4cHIpOiBEZWxldGUgdGhlIGFsdGVybmF0ZSBSRUFMUEFSVCBhbmQgSU1BR1BBUlQKKwlydWxlcyB3aXRoIGV4cGxpY2l0IHBhcmVucy4gIE1ha2UgdGhlIHNpbXBsZSBSRUFMUEFSVCBhbmQgSU1BR1BBUlQKKwlydWxlcyBjb250YWluIGNhc3RfZXhwci4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBQcm9tb3RlIHVuc2lnbmVkIGJpdGZpZWxkIHRvIHNpZ25lZCBpbnQKKwlpZiB0aGUgZmllbGQgaXNuJ3QgYXMgd2lkZSBhcyBhbiBpbnQuCisKK0ZyaSBBcHIgMTYgMjE6NDI6NDkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENoZWNrIHdhcm5faW5saW5lIGJlZm9yZSBjb21wbGFpbmluZyBhYm91dAorCW5vdCBiZWluZyBhYmxlIHRvIGlubGluZSBhIGZuIGRlY2xhcmVkIGlubGluZS4KKwkqIGZsYWdzLmggKHdhcm5faW5saW5lKTogQWRkIGV4dGVybiBkZWNsLgorCitGcmkgQXByIDE2IDIwOjI3OjU3IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLm1kIChibG9ja2FnZSk6IFVzZSB1bnNwZWNfdm9sYXRpbGUgIzE7ICMwIGlzIElNQi4KKworCSogbG9jYWwtYWxsb2MuYyAocXR5X25fcmVmcyk6IE1ha2UgaW50LCBsaWtlIHJlZ19uX3JlZnMuCisJKHF0eV9maXJzdF9yZWcsIHJlZ19uZXh0X2luX3F0eSk6IE1ha2UgaW50LCBub3Qgc2hvcnQuCisJKGxvY2FsX2FsbG9jKTogQWxsb2NhdGUgdGhlc2UgYXMgYXJyYXlzIG9mIGludHMuCisJKGJsb2NrX2FsbG9jLCBxdHlfY29tcGFyZV8xKTogcXR5X29yZGVyIGlzIG5vdyBhcnJheSBvZiBpbnRzLgorCitGcmkgQXByIDE2IDIwOjI3OjE2IDE5OTMgIFRvbSBXb29kICAod29vZEBuZXh0LmNvbSkKKworCSogYTI5ay5oIChGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogVHJ1ZSBvbmx5IGZvciB0aGUgZmlyc3QgcmVnaXN0ZXIKKwlpbiB0aGUgZ3JvdXAuCisKKwkqIGFscGhhLm1kLCByb21wLm1kLCByczYwMDAubWQgKHVudHlwZWRfY2FsbCwgYmxvY2thZ2UpOiBOZXcgcGF0dGVybnMuCisKK0ZyaSBBcHIgMTYgMTc6NTM6MjEgMTk5MyAgUm9uIEd1aWxtZXR0ZSAgKHJmZyBhdCBuZXRjb20uY29tKQorCisJKiByZWxvYWQxLmMgKGxhc3Rfc3BpbGxfcmVnKTogQWRkIG1pc3NpbmcgImludCIuCisKK0ZyaSBBcHIgMTYgMTY6NTU6MTYgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAob2JqYy1oZWFkZXJzKTogRW5zdXJlIG9iamMgZGlyIGV4aXN0cy4KKworRnJpIEFwciAxNiAxNjo0MDo0OSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy9taXBzLmggKE1JUFNfVkVSU0lPTik6IFNldCBNZWlzc25lciByZXZpc2lvbiBudW1iZXIgdG8gMzkuCisJKFNFTEVDVF9TRUNUSU9OKTogRG8gbm90IHB1dCBpdGVtcyB3aXRoIHJlbG9jYXRpb24gaW50byAucmRhdGEuCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSwgVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKTogQWxsb3cgdGhlc2UKKwltYWNyb3MgdG8gYmUgb3ZlcmlkZGVuLgorCisJKiBtaXBzL2lyaXMzLmggKElOSVRJQUxJWkVfVFJBTVBPTElORSwgVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKToKKwlQcm92aWRlIHZlcnNpb25zIG9mIHRoZXNlIHRoYXQgZG9lcyBub3QgcmVseSBvbiB1c2luZyBtcHJvdGVjdC4KKworCSogbWlwcy90LW1pcHMsIG1pcHMvdC1vc2Zyb3NlLCBtaXBzL3QtdWx0cml4LCBpMzg2L3Qtb3Nmcm9zZToKKwlEZWxldGUgZXh0cmEgZGVwZW5kZW5jaWVzLgorCisJKiBpMzg2L29zZnJvc2UuaCAoU0VMRUNUX1NFQ1RJT04pOiBEbyBub3QgcHV0IGl0ZW1zIHdpdGgKKwlyZWxvY2F0aW9uIGludG8gLnRleHQgaWYgLXBpYy1saWIuCisKK0ZyaSBBcHIgMTYgMDE6MDk6NTMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni94bS1pc2MuaCAoUkVBTF9WQUxVRV9BVE9GKTogRGVmaW5lIG9ubHkgaWYKKwlub3QgUkVBTF9BUklUSE1FVElDLgorCitUaHUgQXByIDE1IDA3OjI1OjAwIDE5OTMgIFRvbSBXb29kICAod29vZEBuZXh0LmNvbSkKKworCSogb2JqYy1hY3QuYyAoSVNfSUQsIElTX1BST1RPQ09MX1FVQUxJRklFRF9JRCwgSVNfU1VQRVIpOiBOZXcgdHlwZQorCWNoZWNraW5nIG1hY3Jvcy4KKwkob2JqY19jb21wdHlwZXMsIGJ1aWxkX21lc3NhZ2VfZXhwciwgZ2VuX2RlY2xzcGVjcyk6IFVzZSB0aGVtLgorCisJKiBvYmpjLWFjdC5jIChnZW5fZGVjbGFyYXRvcik6IERvbid0IHVzZSBzdHJjcHkncyByZXR1cm4gdmFsdWUuCisKKwkqIG9iamMtYWN0LmMgKGJ1aWxkX21lc3NhZ2VfZXhwcik6IEFsbG93IGFueSB0eXBlIHRoYXQgbWF0Y2hlcworCW9iamNfY2xhc3NfdHlwZS4KKworCSogb2JqYy1hY3QuYyAoZ2V0X2NsYXNzX3JlZmVyZW5jZSk6IFdlIGFscmVhZHkgaGF2ZSBhIG5hbWUuCisKKwkqIG9iamMtYWN0LmMgKHJlY2VpdmVyX2lzX2NsYXNzX29iamVjdCk6IFVzZSBTVFJJUF9OT1BTLiAgU2VhcmNoCisJY2xzX3JlZl9jaGFpbi4KKworVGh1IEFwciAxNSAwNzoyNTowMCAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogb2JqYy1hY3QuYyAoYnVpbGRfb2JqY19zdHJpbmcpOiBVc2UgVFJFRV9TRVRfQ09ERSBpbnN0ZWFkIG9mCisJYXNzaWduaW5nIHRvIFRSRUVfQ09ERS4KKwkoYnVpbGRfb2JqY19zdHJpbmdfb2JqZWN0KTogRGl0dG8uCisKK1dlZCBBcHIgMTQgMTc6NTE6NTAgMTk5MyAgSG9sZ2VyIFRldXRzY2ggIChob2xnZXJAaG90YnNvLnJoZWluLW1haW4uZGUpCisKKwkqIGNsaXBwZXIuaCAoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCwgRlJBTUVfUE9JTlRFUl9PRkZTRVQpOgorCUZyYW1lIHBvaW50ZXIgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGZvciBsZWFmIGZ1bmN0aW9ucy4KKwkoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBEZWZpbmUuCisKKwkqIGNsaXBwZXIuYyAoY2xpcHBlcl9mcmFtZV9zaXplKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvL2VwaWxvZ3VlKTogU3VwcG9ydCBvbWl0dGluZyBmcmFtZSBwb2ludGVyLgorCisJKiBjbGlwcGVyLm1kIChjbXBzaSk6IFVzZSBgY21wcScgZm9yIHNtYWxsIGltbWVkaWF0ZSB2YWx1ZXMuCisJKGFkZHNpMyk6IFVzZSBgbG9hZGEnIGZvciBgcmVnMSA9IHJlZzIgICsgaW1tZWQnLgorCitXZWQgQXByIDE0IDE1OjIzOjI0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IFVzZSAoc3RydWN0IHJ0eF9kZWYgKiksIG5vdCAocnR4KS4KKworV2VkIEFwciAxNCAxMzo0NjozNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9pODYwL2k4NjAubWQgKGZsb2F0c2lkZjIpOiBBZGQgbWlzc2luZyBhcmcgdG8gUkVBTF9WQUxVRV9BVE9GLgorCisJKiBjLXBhcnNlLmluOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIHN5bSB1bmRlY2xhcmVkIGF0IHRvcCBsZXZlbC4KKworV2VkIEFwciAxNCAxMjowNjowOCAxOTkzICBUb20gV29vZCAgKHdvb2RAbmV4dC5jb20pCisKKwkqIGMtbGFuZy5jLCBvYmpjLWFjdC5jIChtYXliZV9vYmpjX2NvbXB0eXBlcyk6IFJldHVybiAwCisJKGluY29tcGF0aWJsZSkgcmF0aGVyIHRoYW4gMiAoc2ltaWxhciBlbm91Z2gpIGFzIHRoZSBkZWZhdWx0LgorCVRoaXMgd2FzIGFuIGluYWR2ZXJ0ZW50IGNoYW5nZSBpbiB0aGUgT2JqZWN0aXZlLUMgbWVyZ2UuCisKKwkqIG9iamMtYWN0LmMgKGdldF9jbGFzc19yZWZlcmVuY2UpOiBDYWxsIGFkZF9jbGFzc19yZWZlcmVuY2UgZm9yCisJdGhlIEdOVSBydW50aW1lcy4KKworV2VkIEFwciAxNCAwMzo0OToyMSBDRFQgMTk5MyAgUGF1bCBCdXJjaGFyZCAgKGJ1cmNoYXJkQGdlb20udW1uLmVkdSkKKworICAgICAgICAqIG9iamMvT2JqZWN0LmgsIG9iamMvT2JqZWN0Lm0sICgtYXdha2UpOworICAgICAgICBvYmpjL2FyY2hpdmUuYyAoX19vYmpjX2ZpbmlzaF9yZWFkX3Jvb3Rfb2JqZWN0KToKKyAgICAgICAgQ29ycmVjdGVkIG5hbWUgb2YgbWV0aG9kIC1hd2FrZTogdG8gLWF3YWtlIGZvciBjb21wYXRpYmlsaXR5LgorCitXZWQgQXByIDE0IDEwOjU4OjI5IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQHhpdikKKworICAgICAgICAqIG9iamMvT2JqZWN0Lm0sIG9iamMvT2JqZWN0LmggKCtzdHJlYW1WZXJzaW9uOik6IE5ldyBtZXRob2QuCisgICAgICAgICogb2JqYy9hcmNoaXZlLmMgKG9iamNfZ2V0X3N0cmVhbV9jbGFzc192ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgorCitUdWUgQXByIDEzIDE3OjIzOjIyIDE5OTMgIFJvbiBHdWlsbWV0dGUgIChyZmcgYXQgbmV0Y29tLmNvbSkKKworCSogYy1kZWNsLmMgKHBvcF9sYWJlbF9sZXZlbCwgY29tYmluZV9wYXJtX2RlY2xzKTogQ29ycmVjdCBhcmdzCisJaW4gZXJyb3IgY2FsbHMuCisJKiBjLXR5cGVjay5jIChlcnJvcl9pbml0LCBwZWR3YXJuX2luaXQpOiBDYXN0IGFsbG9jYSByZXN1bHQgdG8gY2hhciAqLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBMYXN0IGFyZyBvZiBlbWl0X3N0YWNrX3NhdmUgaXMgTlVMTF9SVFguCisJKHN0b3JlX29uZV9hcmcpOiBGb3VydGggYXJnIHRvIGVtaXRfcHVzaF9pbnNuIGlzIE5VTExfUlRYLgorCSogY29sbGVjdDIuYyAobWFpbiwgc2Nhbl9wcm9nX2ZpbGUpOiBEb24ndCBjYWxsIHNpZ25hbCBvbiBzaWduYWwKKwluYW1lcyB0aGF0IGFyZW4ndCBkZWZpbmVkLgorCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBMYXN0IGFyZyB0byBlbGltaW5hdGVfcmVncyBpcyBOVUxMX1JUWC4KKwkqIGZvbGQtY29uc3QuYyAoc2l6ZV9pbnQpOiBOVU1CRVIgaXMgdW5zaWduZWQgc28gZG9uJ3QgdGVzdAorCWZvciBuZWdhdGl2ZS4KKwkob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUsIGFsbF9vbmVzX21hc2tfcCk6IEFkZCBtaXNzaW5nCisJbGFzdCBhcmcgdG8gZm9yY2VfZml0X3R5cGUgY2FsbC4KKwkqIGdjYy5jIChwdXRlbnYpOiBNYWtlIHJlc3VsdCB0eXBlIHZvaWQuCisJKG1haW4pOiBEb24ndCBjYWxsIHNpZ25hbCBmb3IgdW5kZWZpbmVkIHNpZ25hbCBuYW1lcy4KKwkqIGdlbmV4dHJhY3QuYyAobWFpbik6IFJlbW92ZSBleHRyYSBhcmcgdG8gcHJpbnRmIGNhbGwuCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGVfYnJpZWYsIHByaW50X25vZGUpOiBQcm9wZXJseSBjYXN0CisJYXJnIHdoZW4gcHJpbnRpbmcgaW50cyBvciBydHguCisJKiBydGwuaCwgdHJlZS5oICh4bWFsbG9jKTogRG9uJ3QgdXNlIHByb3RvdHlwZSBmb3Igbm93LgorCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8xKTogRXh0cmEgYXJnIGluIGFudGlfZGVwZW5kZW5jZSBjYWxsLgorCSogdG9wbGV2LmMgKG1haW4pOiBEb24ndCBjYWxsIHNpZ25hbCBmb3IgdW5kZWZpbmVkIHNpZ25hbCBuYW1lcy4KKwkqIHZhcmFzbS5jIChtYWtlX3Zhcl92b2xhdGlsZSk6IFJldHVybiB0eXBlIGlzIHZvaWQuCisJKGFzc2VtYmxlX3N0cmluZyk6IEZpcnN0IGFyZyBpcyBub3QgcG9pbnRlciB0byB1bnNpZ25lZC4KKwkqIHNwYXJjLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IExhc3QgYXJnIHRvIGZvcmNlX29wZXJhbmQgaXMgTlVMTF9SVFguCisJKiBzcGFyYy5tZCAobW92WFgpOiBUaGlyZCBhcmcgdG8gZW1pdF9tb3ZlX3NlcXVlbmNlIGlzIE5VTExfUlRYLgorCShtb3ZzaSk6IEFkZCBtaXNzaW5nIHJldHVybiBhZnRlciBhYm9ydC4KKworVHVlIEFwciAxMyAxNDowOTowMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogRG9uJ3QgY2FsbCBkZWZhdWx0X2NvbnZlcnNpb24gYmVmb3JlCisJY29udmVydF9mb3JfYXNzaWdubWVudC4KKwkocGFyc2VyX2J1aWxkX2JpbmFyeV9vcCk6IE1ha2UgTk9QX0VYUFIsIG5vdCBOT05fTFZBTFVFX0VYUFIuCisKKyAgICAgICAgKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBSZS1lbmFibGUgZGVidWdnaW5nIG91dHB1dCBmb3IgYW5vbnltb3VzCisgICAgICAgIHN0cnVjdHVyZXMgaW4gQysrLgorCitUdWUgQXByIDEzIDA4OjQ0OjU1IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisgICAgICAgKiBvYmpjLWFjdC5jLCB0b3BsZXYuYyAoLVdwcm90b2NvbCk6IGFkZGVkCisgICAgICAgKiBvYmpjLWFjdC5jIChmbGFnX3dhcm5fcHJvdG9jb2wpOiBOZXcgdmFyaWFibGUKKyAgICAgICAoY2hlY2tfbWV0aG9kc19hY2Nlc3NpYmxlKTogTmV3IGZ1bmN0aW9uCisgICAgICAgKGNoZWNrX3Byb3RvY29sKTogVXNlIGNoZWNrX21ldGhvZHMgb3IgY2hlY2tfbWV0aG9kc19hY2Nlc3NpYmxlCisgICAgICAgZGVwZW5kaW5nIG9uIGZsYWdfd2Fybl9wcm90b2NvbCB0byBjaGVjayBwcm90b2NvbCBjb25mb3JtYW5jZS4KKworICAgICAgICogb2JqYy1hY3QuYyAoc3RhcnRfY2xhc3MpOiBGb3IgY2xhc3MgaW1wbGVtZW50YXRpb25zIEFzc2lnbgorICAgICAgIFNVUEVSX0NMQVNTX05BTUUgZnJvbSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBpZiBub3QgcHJlc2VudC4KKworVHVlIEFwciAxMyAwNjo0ODoyMCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5tZCAoc21pbnNmLCBzbWluZGYsIHNtYXhzZiwgc21heGRmKTogU2hvdWxkIGJlIG1pbnNmLCBldGMuCisKKwkqIGdlbmF0dHJ0YWIuYyAoY2xlYXJfc3RydWN0X2ZsYWcpOiBBZGQgdm9pZCByZXR1cm4gdHlwZSBkZWZuLgorCShjb3VudF9zdWJzX3J0eCk6IEFkZCBpbnQgcmV0dXJuIHR5cGUgYW5kIGFkZCBkZWZpbml0aW9uLgorCShzaW1wbGlmeV90ZXN0X2V4cCk6IERlbGV0ZSBkZWJ1Z2dpbmcganVuay4KKwkoZG9fbm90aGluZyk6IERlbGV0ZS4KKworCSogdHJlZS5kZWYgKFFVQUxfVU5JT05fVFlQRSk6IE5ldyB0cmVlIGNvZGUuCisJKiB0cmVlLmggKERFQ0xfUVVBTElGSUVSKTogTmV3IGFjY2VzcyBtYWNybyBmb3IgZGVjbC5pbml0aWFsLgorCSogY2FsbHMuYywgZGJ4b3V0LmMsIGR3YXJmb3V0LmMsIGV4cHIuYywgZnVuY3Rpb24uYywgcHJpbnQtdHJlZS5jOgorCVRyZWF0IFFVQUxfVU5JT05fVFlQRSBsaWtlIFVOSU9OX1RZUEUgd2hlbiBzZWVpbmcgaWYgYWdncmVnYXRlLiAKKwkqIHNkYm91dC5jLCBzdG10LmMsIHZhcmFzbS5jOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IERvbid0IGJsb3cgdXAgaWYgYSBGSUVMRF9ERUNMCisJaGFzbid0IGJlZW4gZmlsbGVkIGluLgorCShleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogTGlrZXdpc2UuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdW5pb24pOiBIYW5kbGUgUVVBTF9VTklPTl9UWVBFLgorCShsYXlvdXRfdHlwZSk6IENhbGwgbGF5b3V0X3VuaW9uIGZvciBRVUFMX1VOSU9OX1RZUEUgYW5kCisJdHJlYXQgaXQgbGlrZSBVTklPTl9UWVBFIGVsc2V3aGVyZS4KKworVHVlIEFwciAxMyAwNjowODoxNiAxOTkzICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChkaXZfYW5kX3JvdW5kX2RvdWJsZSk6IERvbid0IG1peCBIT1NUX1dJREVfSU5UICogYW5kCisJdW5zaWduZWQgSE9TVF9XSURFX0lOVCAqIHBhcmFtZXRlcnM7IHNvbWUgY29tcGlsZXJzIGNvbXBsYWluLgorCitNb24gQXByIDEyIDIyOjE0OjAzIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisJKiBvYmpjL2xpc3QuaCwgb2JqYy9ydW50aW1lLmg6IFJlbW92ZWQgZGVjbGFyYXRpb25zIG9mIGxpYnJhcnkKKwlmdW5jdGlvbnMuICBvYmpjL2xpc3QuaCwgb2JqYy9vYmpjLmgsIG9iamMvb2JqYy1hcGkuaCwKKwlvYmpjL3J1bnRpbWUuaCwgT2JqZWN0Lm0sIFByb3RvY29sLm06ICBDaGFuZ2VkIHRvIGRvdWJsZSBxdW90ZQorCWluY2x1ZGVzLiAgUmVtb3ZlZCBpbmNsdWRlcyBvZiBzdGRkZWYuaCwgb2JqYy1hcmNoaXZlLmggYW5kCisJc3RkbGliLmguICAKKworCSogb2JqYy9vYmpjLWFyY2hpdmUuaDogRmlsZSBkZWxldGVkLiAgQ29udGVudHMgZW1iZWRkZWQgaW4gb2JqYy1hcGkuaAorCSogb2JqYy9vYmpjLWFyY2hpdmUuYzogRmlsZSByZW5hbWVkIHRvIGFyY2hpdmUuYworCSogb2JqYy9vYmpjLWNsYXNzLmM6IEZpbGUgcmVuYW1lZCB0byBjbGFzcy5jCisJKiBvYmpjL29iamMtaW5pdC5jOiBGaWxlIHJlbmFtZWQgdG8gaW5pdC5jCisJKiBvYmpjL29iamMtbWlzYy5jOiBGaWxlIHJlbmFtZWQgdG8gbWlzYy5jCisJKiBvYmpjL29iamMtbXNnLmM6IEZpbGUgcmVuYW1lZCB0byBzZW5kbXNnLmMKKwkqIG9iamMvb2JqYy1vYmplY3QuYzogRmlsZSByZW5hbWVkIHRvIG9iamVjdHMuYworCSogb2JqYy9vYmpjLXNlbC5jOiBGaWxlIHJlbmFtZWQgdG8gc2VsZWN0b3IuYworCSogb2JqYy9NYWtlZmlsZSAoT0JKQ19ILCBPQkpDX08pOiBVcGRhdGVkIGFjY29yZGluZ2x5CisKK01vbiBBcHIgMTIgMjI6MDU6NTggMTk5MyAgVG9tIFdvb2QgICh3b29kQG5leHQuY29tKQorCisJKiBNYWtlZmlsZS5pbiAob2JqYy1hY3Qubyk6IEFkZCBkZXBlbmRlbmNpZXMuCisKK01vbiBBcHIgMTIgMjA6NTI6MDAgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAc3BpZmYuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0LmMgKF9PQkpDX1NFTEVDVE9SX1JFRkVSRU5DRVNfZGVjbCk6IFZhcmlhYmxlIHJlbmFtZWQgdG8KKwlfT0JKQ19TRUxFQ1RPUl9UQUJMRV9kZWNsLiAgTmFtZSBvZiBzZWxlY3RvciB0YWJsZSByZW5hbWVkIGZyb20KKwkiX09CSkNfU0VMRUNUT1JfUkVGRVJFTkNFUyIgdG8gIl9PQkpDX1NFTEVDVE9SX1RBQkxFIiB0byBhdm9pZAorCWNvbmZsaWN0IHdpdGggTmVYVFNURVAgbGlua2VyLgorCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1pbnQtaGRycyk6IEFkZGVkIGRlcGVuZGVuY3kgb2JqYy1oZWFkZXJzLgorCShvYmpjLWhlYWRlcnMpOiBOZXcgdGFyZ2V0LgorCisJKiBvYmpjL01ha2VmaWxlIChfZm9yd2FyZCwgZmZsYWdzKTogTWFkZSB0YXJnZXRzIGVycm9yIHByb25lLgorCShvYmpjLW1zZy5vLCBfZm9yd2FyZCk6IFVzZSBleHBsaWNpdCBwYXRoIGluc3RlYWQgb2YgJDwuCisKK01vbiBBcHIgMTIgMTk6NDk6NTUgMTk5MyAgVG9tIFdvb2QgICh3b29kQG5leHQuY29tKQorCisJKiBvYmpjLWFjdC5oIChDTEFTU19QUk9UT0NPTF9MSVNULCBQUk9UT0NPTF9MSVNULAorCVBST1RPQ09MX0ZPUldBUkRfREVDTCwgVFlQRV9QUk9UT0NPTF9MSVNUKTogUmVhcnJhbmdlIHVzZSBvZiB0eXBlCisJbWVtYmVycyB0byBhdm9pZCB1c2Ugb2Ygbm9uY29waWVkX3BhcnRzLgorCSogb2JqYy1hY3QuYyAoZ2V0X3N0YXRpY19yZWZlcmVuY2UsIGdldF9vYmpjZWN0X3JlZmVyZW5jZSwKKwlzdGFydF9wcm90b2NvbCk6IE1ha2UgYSB0cmVlIHZlY3RvciBmb3IgbmV3IHByb3RvY29sIHR5cGVzLgorCShzdGFydF9jbGFzcyk6IFRoZSB0cmVlIHZlY3RvciBmb3IgY2xhc3MgdHlwZXMgaXMgbG9uZ2VyLgorCisJKiBtNjhrL25leHQuaCAoQVNNX09VVFBVVF9GTE9BVF9PUEVSQU5EKTogVXNlIENPREUuCisKKworTW9uIEFwciAxMiAxNTo0NjoyMSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IERlbGV0ZSAkKGJpbmRpcikvJCh0YXJnZXQpLWdjYworCWJlZm9yZSB0cnlpbmcgdG8gaW5zdGFsbCBpdC4KKworCSogaTk2MC5oIChDT05TVEFOVF9BTElHTk1FTlQpOiBPbmx5IGluY3JlYXNlIGFsaWdubWVudCBvZiBzdHJpbmcKKwljb25zdGFudHMuCisKKwkqIGdjYy5jIChsaWJyYXJ5X3ByZWZpeCk6IERlbGV0ZSB2YXJpYWJsZS4KKwkocHJvY2Vzc19jb21tYW5kKTogRGVsZXRlIHVzZXMgb2YgbGlicmFyeV9wcmVmaXguCisJKGRvX3NwZWNfMSwgRCBjYXNlKTogRGVsZXRlIHVzZSBvZiBsaWJyYXJ5X3ByZWZpeC4KKworCSogZXhwbG93LmMgKGVtaXRfc3RhY2tfc2F2ZSk6IEF0IGVuZCwgY2FsbCB2YWxpZGl6ZV9tZW0gd2hlbgorCWluc2lkZSBzZXF1ZW5jZS4KKworCSogYy10eXBlY2suYyAoaW50ZXJuYWxfYnVpbGRfY29tcG91bmRfZXhwcik6IFdoZW4gcGVkYW50aWMsIGRvbid0CisJc2ltcGxpZnkgYSBDT01QT1VORF9FWFBSLCBzbyB0aGF0IGl0IHdvbid0IGJlIG1pc3Rha2VuIGZvciBhbgorCWx2YWx1ZSBvciBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIENPTVBPVU5EX0VYUFIgY2FzZSk6IExpa2V3aXNlLgorCitNb24gQXByIDEyIDE1OjI0OjA1IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChwcmludF9vcGVyYW5kKTogU29ydCBhbGwgY2FzZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCShwcmludF9vcGVyYW5kLCBjYXNlICdHJyk6IE5ldyBjYXNlLgorCShvdXRwdXRfZXBpbG9nKTogS25vdyB0aGF0ICJHTlUgT2JqLUMiIGlzIHRoZSBsYW5ndWFnZSBzdHJpbmcKKwlmb3IgT2JqZWN0aXZlLUMuCisJKiByczYwMDAubWQgKGFkZGRpMy9zdWJkaTMpOiBBbGxvdyBpbW1lZGlhdGUgY29uc3RhbnRzLgorCisJKiBjb25maWd1cmUgKHJzNjAwMC1pYm0tYWl4Kik6IE1ha2UgQUlYIDMuMiB0aGUgZGVmYXVsdC4KKworCSogUkVBRE1FLlJTNjAwMDogUmVwbGFjZWQgZmlsZSB0byBkaXNjdXNzIGFzc2VtYmxlciBmb3IgQUlYIDMuMiBhbmQKKwlwcm9ibGVtcyB3aXRoIE5MUyBzdXBwb3J0LgorCisJKiBjb21iaW5lLmMgKHJlY29yZF92YWx1ZV9mb3JfcmVnKTogUHJvcGVybHkgc2V0IFNVQlNUX0xPV19DVUlECisJZm9yIGxhc3QgY2hhbmdlOyBvdGhlcndpc2Ugd29uJ3QgZ2V0IGJlc3QgdmFsdWUuCisKK01vbiBBcHIgMTIgMTM6MjM6NTkgMTk5MyAgSmVmZnJleSBBLiBMYXcgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSwgY2xhdXNlIGZvciBgeD1hOyBpZiAoLi4uKSB4PWI7Jyk6CisJRG8gdGhpcyByZWdhcmRsZXNzIG9mIEJSQU5DSF9DT1NUIGlmIEhBVkVfY29uZGl0aW9uYWxfbW92ZQorCWRlZmluZWQuCisKK01vbiBBcHIgMTIgMTc6MTU6NDMgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWIgYXQgeGl2KQorCisgICAgICAgICogb2JqYy9oYXNoLmg6IERlbGV0ZWQgI2luY2x1ZGUgIm11dGV4dC5oIgorICAgICAgICAqIG9iamMvT2JqZWN0Lm0sIG9iamMvT2JqZWN0LmggKC1yZWFkOiwgLXdyaXRlOik6IGFkZGVkLgorICAgICAgICAqIG9iamMvT2JqZWN0Lm0sIG9iamMtYXBpLmg6IFN0cmlwcGVkIGFueXRoaW5nIGFkZGVkIGJ5CisgICAgICAgIGthbmVAY2MucHVyZHVlLmVkdSB3aGljaCBpcyBub3QgY29uc2lkZXJlZCAibWlub3IgY2hhbmdlcyIuCisgICAgICAgICogb2JqYy9vYmpjLmg6IG5vdyAiI2luY2x1ZGUicyBvYmpjLWFyY2hpdmUuaAorICAgICAgICAqIG9iamMvb2JqYy1tc2cuYyAoX19vYmpjX2luaXRfaW5zdGFsbF9kdGFibGUsCisgICAgICAgIF9fb2JqY19pbnN0YWxsX2R0YWJsZV9mb3JfY2xhc3MpOiBDYWxsIHRvCisgICAgICAgIF9fb2JqY19yZXNvbHZlX2NsYXNzX2xpbmtzIG1vdmVkIHRvIHRoZSBsYXR0ZXIuCisgICAgICAgICogb2JqYy9vYmpjLW1zZy5jIChfX29iamNfcmVzcG9uZHNfdG8pOiBGdW5jdGlvbiBhZGRlZAorICAgICAgICAqIG9iamMvb2JqYy1hcmNoaXZlLmMgKG9iamNfd3JpdGVfcmVmZXJlbmNlKTogYWRkZWQKKworU2F0IEFwciAxMCAxODowNzo0NiAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKworICAgICAgICAqIG9iamMvTWFrZWZpbGU6IENsZWFuZWQgdXAgZm9yIGluY2x1c2lvbiBpbiBnY2MgZGlzdHJpYnV0aW9uLgorICAgICAgICBUYXJnZXQgY29weS1oZWFkZXJzIGFkZGVkLgorCitTdW4gQXByIDExIDA2OjQwOjE2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRvcGxldi5jIChzdHJpcF9vZmZfZW5kaW5nKTogQWRkIC5hdHIgZm9yIEFkYS4KKworCSogcmVvcmcuYyAoYWRkX3RvX2RlbGF5X2xpc3QpOiBDbGVhciBhbnkgY2FjaGVkIGJsb2NrIGluZm9ybWF0aW9uCisJZm9yIElOU04uCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBBZnRlciBjb3B5aW5nIHRoZSBvZmZzZXRzIG9mIGEKKwlmaWVsZCB0aGF0IGlzIGFuIGFub255bW91cyB1bmlvbiB0byB0aGUgb2Zmc2V0cyBvZiB0aGUgZmllbGRzCisJb2YgdGhhdCB1bmlvbiwgemVybyB0aGUgb2Zmc2V0IG9mIHRoZSBhbm9ueW1vdXMgZmllbGQgaW4gY2FzZQorCWl0IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBpbm5lciBmaWVsZHMuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9jb21wb3VuZF9vcGVyYXRpb24sIGNhc2UgeFNISUZUUlQpOgorCUNsZWFuIHVwIGNvZGUgc28gbW9yZSByZWFkYWJsZSBhbmQgZG9uJ3QgcmVzdHJpY3QgdG8gY2FzZQorCXdoZXJlIEMyID49IEMxLgorCVBhc3MgY29ycmVjdCAoaW5uZXIpIGNvZGUgdG8gcmVjdXJzaXZlIGNhbGwuCisJKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uLCBjYXNlIFNVQlJFRyk6IFBhc3MgdGhlIGNvZGUgb2Ygb3VyCisJb3BlcmFuZCB0byByZWN1cnNpdmUgY2FsbCwgbm90IFNVQlJFRywgYW5kIG1ha2UgYW5vdGhlciByZWN1cnNpdmUKKwljYWxsIGFmdGVyIGNhbGxpbmcgZm9yY2VfdG9fbW9kZS4KKworU3VuIEFwciAxMSAxMToxNjo0OCAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogIERvbid0IG1vdmUgYW4gVU5TUEVDX1ZPTEFUSUxFLgorCitTdW4gQXByIDExIDAxOjMyOjM5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBXaGVuIGFkanVzdGluZyBvcDAgZm9yIHRydW5jX2RpdiBvcgorCXRydW5jX21vZCwgdXNpbmcgc2hpZnRzIChub3QgYnJhbmNoZXMpLCBtYWtlIGEgbmV3IHBzZXVkbyBmb3IgdGhlCisJcmVzdWx0LiAgRG9uJ3QgdXNlIHRhcmdldCBmb3IgYWRqdXN0ZWRfb3AwLgorCitTYXQgQXByIDEwIDEwOjU3OjA5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHhtLWFscGhhLmggKE9OTFlfSU5UX0ZJRUxEUyk6IE5vIGxvbmdlciBuZWVkZWQuCisKKwkqIGFscGhhLmMgKGFscGhhX3NhX3NpemUpOiBOZWVkIHRvIHNhdmUgJDI2IGlmIGl0IGlzIHVzZWQgb3IKKwlpZiBhbnkgb3RoZXIgcmVnaXN0ZXIgaXMgc2F2ZWQsIGJ1dCBub3QganVzdCBiZWNhdXNlIGEgc3RhY2sKKwlzcGFjZSBpcyBuZWVkZWQuCisJKG91dHB1dF9wcm9sb2cpOiBBZGQgY29kZSB0byBwcm9iZSB0aGUgc3RhY2sgaWYgd2UgYWxsb2NhdGUgbW9yZQorCXRoYW4gNDA5NiBieXRlczsgcmVxdWlyZWQgYnkgY2hhcHRlciA3IChmb3IgdGhyZWFkcykuCisJS25vdyB3aGVuIHRvIHNhdmUgJDI2LgorCShvdXRwdXRfZXBpbG9nKTogS25vdyB3aGVuIHRvIHJlc3RvcmUgJDI2LgorCSogYWxwaGEubWQgKGFkZC9zdWIpOiBDb3JyZWN0IHByZWRpY2F0ZXMgYW5kIGNvbnN0cmFpbnRzIGZvcgorCXNOYWRkWCBhbmQgYWRkWCBpbnNuczsgd2UgY2FuIHVzZSBzTnN1YlggYW5kIHN1YlggdG8gYWRkIHNtYWxsCisJbmVnYXRpdmUgY29uc3RhbnRzLgorCURvbid0IHNwbGl0IGFkZGl0aW9uIHRvIFNQIHNpbmNlIHdlIHdhbnQgdG8gdXBkYXRlIGl0IGp1c3Qgb25jZS4KKwkoYmVxLCBibmUpOiBVc2Ugc3VidHJhY3QsIG5vdCBjb21wYXJlIGZvciBpbnRzOyBpdCdzIG1vcmUgZWZmaWNpZW50LgorCShkZWZpbmVfc3BsaXQgZm9yIGNvbXBhcmlzb25zKTogQWx3YXlzIHByZWZlciBhZGQvc3ViIGlmIGl0IHdpbGwgd29yay4KKwkocHJvYmVfc3RhY2ssIGFsbG9jYXRlX3N0YWNrKTogTmV3IHBhdHRlcm5zLgorCitGcmkgQXByICA5IDIwOjAzOjM4IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoZnJlZV90cmVlX2xpc3QpOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9pbml0KTogU2V0IGZyZWVfdHJlZV9saXN0LgorCShwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBVc2UgYWRkX2RvdWJsZSB0byBkbyBhcml0aG1ldGljIHdpdGgKKwlkb3VibGUgaW50ZWdlcnMgaW5zdGVhZCBvZiB1c2luZyBmb2xkL2J1aWxkIHRvIHRvIGFyaXRobWV0aWMgaW4KKwl0eXBlIG9mIGFycmF5IGluZGV4LiAgVXNlIGZyZWVfdHJlZV9saXN0IHdoZW4gYXZhaWxhYmxlIGluc3RlYWQgb2YKKwlnZW5lcmF0aW5nIGEgbmV3IHRyZWVfbGlzdC4KKworRnJpIEFwciAgOSAxOTowNTozMSAxOTkzICBUb20gV29vZCAgKHdvb2RAbmV4dC5jb20pCisKKwkqIGMtbGV4LmggKFJJRF9JTiwgUklEX09VVCwgUklEX0lOT1VULCBSSURfQllDT1BZLCBSSURfT05FV0FZLAorCVJJRF9JRCk6IE5ldyBPYmplY3RpdmUtQyBrZXl3b3Jkcy4KKwkqIGMtcGFyc2UuZ3BlcmY6IEluY29ycG9yYXRlIHRoZSBPYmplY3RpdmUtQyBrZXl3b3JkcyBmcm9tCisJb2JqYy1wYXJzZS5ncGVyZiBhbmQgYWRkIHRoZSBuZXcga2V5d29yZHMuCisJKiBvYmpjLmdwZXJmOiBEZWxldGVkLgorCSogYy1sZXguYzogVXNlIC1OIHdoZW4gcnVubmluZyBncGVyZiBzbyB0aGUga2V5d29yZCB0YWJsZSBjYW4gYmUKKwlhY2Nlc3NlZC4gIFJhbiBncGVyZiBhbmQgcmVwbGFjZWQgdGhhdCBzZWN0aW9uLgorCShmb3JnZXRfcHJvdG9jb2xfcXVhbGlmaWVycywgcmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyk6IE5ldworCWZ1bmN0aW9ucyB0byBtb2RpZnkgdGhlIGtleXdvcmQgdGFibGUgc28gdGhhdCBgaW4nLCBgb3V0JywgYGlub3V0JywKKwlgYnljb3B5JywgYW5kIGBvbmV3YXknIGFyZSBrZXl3b3JkcyBvbmx5IGluIHByb3RvY29sIGRlY2xhcmF0aW9ucy4KKwkoaW5pdF9sZXgpOiBJbml0aWFsaXplIHRoZSBuZXcga2V5d29yZHMuICBGb3JnZXQgdGhlIHByb3RvY29sCisJcXVhbGlmaWVycywgYW5kIG9ubHkgbWFrZSBgaWQnIGEga2V5d29yZCB3aGVuIGNvbXBpbGluZyBhbgorCU9iamVjdGl2ZS1DIG1vZHVsZS4KKwkoeXlsZXgpOiBUcmVhdCBAIGFzIHRoZSBzdGFydCBvZiBhbiBpZGVudGlmaWVyIChrZXl3b3JkKSwgYnV0CisJcmVjb2duaXplIE9iamVjdGl2ZS1DIHN0cmluZyBjb25zdGFudHMgKEAiLi4uIikuCisJKiBjLXBhcnNlLmluOiBBZGQgc3VwcG9ydCBmb3IgT2JqZWN0aXZlLUMgcHJvdG9jb2xzLCBjbGFzc2VzLCBhbmQKKwlzdHJpbmdzLgorCShpbml0bGlzdCk6IERvbid0IGluY2x1ZGUgbGFiZWxlZCBhcnJheSBlbGVtZW50cyBpbiB0aGUKKwlPYmplY3RpdmUtQyBncmFtbWVyLiAgVGhlc2UgbG9vayBsaWtlIG1lc3NhZ2VzIGFuZCBwcmVjbHVkZSB0aGUKKwl1c2Ugb2YgbWVzc2FnZXMgaW4gaW5pdGlhbGl6ZXJzLgorCShyZWNvZ25pemVfb2JqY19rZXl3b3JkKTogRGVsZXRlZC4gIFRoZSBrZXl3b3JkcyBhcmUgbm93IGluCisJYy1wYXJzZS5ncGVyZi4KKwkqIGMtdHJlZS5oOiBBZGQgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgaW4gb2JqYy1hY3QuYy4KKwkoZG9pbmdfb2JqY190aGFuZyk6IERlY2xhcmUgaGVyZS4KKwkqIGMtZGVjbC5jIChncm9rZmllbGQpOiBDaGVjayBmb3Igc3RhdGljYWxseSBhbGxvY2F0ZWQgb2JqZWN0cy4KKwkqIGMtbGFuZy5jIChpc19jbGFzc19uYW1lLCBtYXliZV9vYmpjX21ldGhvZF9uYW1lLAorCWJ1aWxkX29iamNfc3RyaW5nKTogTmV3IGZ1bmN0aW9ucy4KKwkobWF5YmVfb2JqY19jb21wdHlwZXMpOiBBZGQgUkVGTEVYSVZFIHBhcmFtZXRlci4KKwkqIGMtdHlwZWNrLmMgKGNvbXB0eXBlcywgY29udmVydF9mb3JfYXNzaWdubWVudCk6IENoZWNrIGZvcgorCU9iamVjdGl2ZS1DIHByb3RvY29scyAobm9uLXJlZmxleGl2ZSB1c2Ugb2YgbWF5YmVfb2JqY19jb21wdHlwZXMpLgorCShjb21wX3RhcmdldF90eXBlcyk6IFJld3JpdGUgc28gdGhhdCBtYXliZV9vYmpjX2NvbXB0eXBlcyBjaGVja3MKKwlwcm90b2NvbHMgd2hlbiBwcm9jZXNzaW5nIGFuIE9iamVjdGl2ZS1DIG1vZHVsZS4gIEZvciBDIG1vZHVsZXMsCisJdGhlIGNvZGUgcGF0aCBpcyB1bmNoYW5nZWQuCisJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBJbXByb3ZlIHRoZSBlcnJvciBtZXNzYWdlIGZvcgorCWluY29tcGF0aWJsZSBtZXNzYWdlIGFyZ3VtZW50cy4KKwkqIG9iamMtYWN0LmgsIG9iamMtYWN0LmM6IEFkZCBzdXBwb3J0IGZvciBwcm90b2NvbHMsIGNsYXNzZXMsIGFuZAorCXN0cmluZ3MuICBVcGRhdGUgdGhlIHJ1bnRpbWUgdGFyZ2V0cyBmb3IgdGhlIG5ldyBHTlUgcnVudGltZXMgYXMKKwl3ZWxsIGFzIGV4aXN0aW5nIE5lWFQgcnVudGltZXMuCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1mZ251LXJ1bnRpbWUgYW5kIC1mbmV4dC1ydW50aW1lLgorCisJKiBjb25maWd1cmUgKGlbMzRdODYtbmV4dC0qKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBjb25maWcuc3ViOiBEZWZhdWx0IHRvIGJzZCBpZiB2ZW5kb3IgaXMgbmV4dC4KKwkqIGkzODYvbmV4dC5oLCBpMzg2L25leHQuYywgaTM4Ni94LW5leHQsIGkzODYvdC1uZXh0LAorCWkzODYveG0tbmV4dDogTmV3IGZpbGVzLgorCSogbTY4ay9uZXh0LmgsIG02OGsvbmV4dC5jOiBNb3ZlIG1hY2hpbmUgaW5kZXBlbmRlbnQgcG9ydGlvbnMgdG8KKwluZXh0c3RlcC5oIGFuZCBuZXh0c3RlcC5jLiAgVXBkYXRlIHRvIE5lWFRTVEVQIDMuMCBhbmQgMy4xLgorCSogbmV4dHN0ZXAuaCwgbmV4dHN0ZXAuYzogTmV3IGZpbGVzLgorCisJRHVtcGVkIEtyZXN0ZW4ncyBsYXRlc3Qgb2JqYy1ydW50aW1lIGludG8gdGhlIG9iamMgZGlyZWN0b3J5LgorCVRoaXMgbmVlZHMgd29yay4KKworCSogb2JqYy9jb3JlLmMsIG9iamMvb2JqYy1wcm90by5oLCBvYmpjL29iamVjdC5oLCBvYmpjL29iamVjdC5tLAorCW9iamMvcmVjb3JkLmg6IERlbGV0ZWQuCisKKwlUaHUgQXByICAxIDExOjAyOjQ5IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiIGF0IHhpdikKKworCSogb2JqYy9saXN0LmggKGxpc3RfcmVtb3ZlX2hlYWQpOiBhZGRlZCBjYXNlIGZvciBvbmUgZWxlbWVudCBsaXN0LiAKKwkqIG9iamMtaW5pdC5jIChfX29iamNfZXhlY19jbGFzcyk6IGNoYW5nZWQgb2JqY19nZXRfY2xhc3MgdG8KKwlvYmpjX2xvb2t1cF9jbGFzcy4gICh0aGFua3MgdG8gbWNjYWxsdW1AY3Mucm9jaGVzdGVyLmVkdSkKKworCVRodSBNYXIgMzAgMTE6MDQ6MTEgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWIgYXQgeGl2KQorCisJKiBQcm90b2NvbC5tLCBvYmpjL1Byb3RvY29sLmg6IGFkZGVkCisJKiBvYmpjLmggKHN0cnVjdCBvYmpjX3Byb3RvY29sKTogYWRkZWQKKwkqIG9iamMtaW5pdC5jIChfX29iamNfaW5pdF9wcm90b2NvbHMpOiBhZGRlZAorCShfX29iamNfZXhlY19jbGFzcyk6IGFkZGVkIGNvZGUgZm9yIGluaXRpYWxpemluZyBwcm90b2NvbHMKKwkqIG9iamMtY2xhc3MuYyAoX19vYmpjX2NsYXNzX2FkZF9wcm90b2NvbHMpOiBhZGRlZAorCisJVGh1IE1hciAyNSAxNzowOTo0MCAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYiBhdCB4aXYpCisKKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IGFkZGVkCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IGFkZGVkCisKKwlXZWQgTWFyIDI0IDE0OjMyOjE0IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiIGF0IHhpdikKKworCSogb2JqYy9vYmpjLmg6IERlZmluZSBvYmpjX21zZ19sb29rdXAgaW5saW5lIGlmIG9wdGltaXphdGlvbiBpcworCXR1cm5lZCBvbi4gIG9iamMtYWN0aW9ucy5jIGNoYW5nZWQgYWNjb3JkaW5nbHkuCisKKwlUdWUgTWFyIDIzIDE4OjAyOjA0IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiIGF0IGVvcykKKworCSogc2FycmF5LmMsIG9iamMvc2FycmF5Lmg6IFN0cnVjdHVyZSBvZiBgc2FycmF5JyBjaGFuZ2VkCisJZWxpbWluYXRpbmcgb25lIGluZGlyZWN0aW9uLiAgVGhpcyBhZmZlY3RzIG1vc3QgZnVuY3Rpb25zLgorCisJTW9uIE1hciAyOSAxOTkzICBDaHJpc3RvcGhlciBKLiBLYW5lICAoa2FuZUByb2NrLW9wZXJhKQorCisJKiBvYmpjLW9iamVjdC5jIChfb2JqY19vYmplY3RfYWxsb2MsIF9vYmpjX29iamVjdF9kaXNwb3NlLAorCV9vYmpjX29iamVjdF9jb3B5KTogbW92ZWQgdG8gb2JqYy1taXNjLmMsIGluaXQgdG8gMC4KKwk6IGRlbGV0ZWQgZmlsZS4KKworCSogT2JqZWN0Lm0gKC1wZXJmb3JtOiwgLXBlcmZvcm06d2l0aDosIC1wZXJmb3JtOndpdGg6d2l0aDopOiBjaGVjaworCXJldHVybiB2YWx1ZSBvZiBvYmpjX21zZ19sb291cCBiZWZvcmUgdXNpbmcgaXQuCisJKC1uYW1lLCAtZG9lc05vdFJlY29nbml6ZTosIC1lcnJvcjopOiBjaGFuZ2VkIGNsYXNzX2dldF9jbGFzc19uYW1lCisJdG8gb2JqZWN0X2dldF9jbGFzc19uYW1lLgorCSgrcmVhZEZyb206KTogYWRkZWQgY2hlY2sgZm9yIGNsYXNzIG5hbWUgbGVuZ3RoLgorCisJKiBvYmpjLWFwaS5tIChjbGFzc19jcmVhdGVfaW5zdGFuY2UsIG9iamVjdF9jb3B5LCBvYmplY3RfZGlzcG9zZSk6CisJbW92ZWQgZnJvbSBvYmpjLW9iamVjdC5jLCBpbmxpbmUnZAorCisJU3VuIE1hciAyOCAxOTkzICBDaHJpc3RvcGhlciBKLiBLYW5lICAoa2FuZUBwcmVsdWRlKQorCisJKiBvYmpjLWFwaS5oIChzZXZlcmFsIGlubGluZSBmdW5jdGlvbnMpOiByZXdyaXR0ZW4gdG8KKwl1c2UgbmV3IENMU19JU0NMQVNTIGFuZCBDTFNfSVNNRVRBIG1hY3Jvcy4KKwkob2JqZWN0X2lzX21ldGFjbGFzcyk6IGFkZGVkLgorCisJKiBvYmpjLmggKF9vYmpjX2FsbG9jLCBfb2JqY19kZWFsbG9jLCBfb2JqY19yZWFsbG9jLAorCV9vYmpjX2NvcHksIG9iamNfdHJhY2UpOiByZW1vdmVkIChub3QgdXNlZCkuCisJKGNsYXNzX2dldF9jbGFzc19udW1iZXIsIGNsYXNzX3NldF9jbGFzc19udW1iZXIpOiByZW1vdmVkLgorCShDTFNfSVNDTEFTUywgQ0xTX0lTTUVUQSk6IGNoZWNrIGZvciBuaWwgcGFyYW1ldGVyLgorCisJU2F0IE1hciAyNyAxOTkzICBDaHJpc3RvcGhlciBKLiBLYW5lICAoa2FuZUB0b2NjYXRhKQorCisJKiBPYmplY3QubTogbWV0aG9kIGNvbW1lbnRzIGFkZGVkLgorCSgtdHJhbnNtdXRlQ2xhc3NUbzopOiByZW1vdmVkIGVycm9yIG1lc3NhZ2UuCisJKCtlcnJvcjopOiByZW1vdmVkLgorCSgtZXJyb3I6KTogYWRkZWQgK2Vycm9yOiBmdW5jdGlvbmFsaXR5LgorCSgrcmVhZEZyb206KTogY2hhbmdlZCBvYmpjX2dldF9jbGFzcyB0byBvYmpjX2xvb2t1cF9jbGFzcy4KKwkoK3JlYWRGcm9tOik6IGFkZGVkIGNsYXNzX3NldF92ZXJzaW9uLgorCisJKiBvYmpjLWFwaS5oIChvYmplY3RfZ2V0X2NsYXNzLCBvYmplY3RfZ2V0X3N1cGVyX2NsYXNzLAorCW9iamVjdF9nZXRfbWV0YV9jbGFzcywgb2JqZWN0X2lzX2NsYXNzLAorCW9iamVjdF9pc19pbnN0YW5jZSwgX29iamNfZXJyb3IpOiBhZGRlZC4KKworCSogb2JqYy5oIChfb2JqY19lcnJvcik6IG1vdmVkIHRvIG9iamMtYXBpLmguCisKKwlGcmkgTWFyIDI2IDE5OTMgIENocmlzdG9waGVyIEouIEthbmUgIChrYW5lQHRvY2NhdGEpCisKKwkqIG9iamMtYXBpLmg6IGZ1bmN0aW9uIGNvbW1lbnRzIGFkZGVkLgorCShjbGFzc19zZXRfY2xhc3NfbnVtYmVyLCBjbGFzc19nZXRfY2xhc3NfbnVtYmVyLCBNRVRIT0RfTlVMTCwKKwljbGFzc19hZGRfbWV0aG9kX2xpc3QsIG9iamNfbXNnX2xvb2t1cF9zdXBlcik6IG1vdmVkIHRvCisJb2JqYy5oLgorCShvYmpjX21zZ19zZW5kdik6IHJlbW92ZWQuCisJCisJKiBPYmplY3QuaCwgT2JqZWN0Lm0gKC1pc01ldGFDbGFzcyk6IGFkZGVkLgorCSgrZnJlZSwgK25hbWUsICtyZXNwb25kc1RvOiwgK3Jlc3BvbmRzVG86KTogcmVtb3ZlZC4KKwkoK2NsYXNzLCArc3VwZXJDbGFzcywgK21ldGFDbGFzcyk6IHJlbW92ZWQuCisKKwkqIE9iamVjdC5tICgtc3RvcmVPbjopOiBhZGRlZCB2YXJpYWJsZSBjbGFzc19lbmNvZGluZy4KKwkoK3JlYWRGcm9tOik6IHJlcGxhY2VkIGNvbnN0YW50ICcjJyB3aXRoIF9DX0NMQVNTLgorCSgtZGVzY3JpcHRpb25Gb3JNZXRob2QpOiBjaGFuZ2VkIGRlc2NyaXB0aW9uRm9ySW5zdGFuY2VNZXRob2Q6IG1lc3NhZ2UKKwl0byBjbGFzc19nZXRfaW5zdGFuY2VfbWV0aG9kLgorCSgtY2xhc3MpOiBub3cgY2FsbHMgb2JqZWN0X2dldF9jbGFzcy4KKwkoLXN1cGVyQ2xhc3MpOiBub3cgY2FsbHMgb2JqZWN0X2dldF9zdXBlcl9jbGFzcy4KKwkoLW1ldGFDbGFzcyk6IG5vdyBjYWxscyBvYmplY3RfZ2V0X21ldGFfY2xhc3MuCisKKwlXZWQgTWFyIDI0IDE5OTMgIENocmlzdG9waGVyIEouIEthbmUgIChrYW5lQHJvY2stb3BlcmEpCisKKwkqIG9iamMtYXBpLmggKE1FVEhPRF9OVUxMKTogbmV3IGRlZmluZS4KKwkobWV0aG9kX2dldF9hcmdzaXplLCBtZXRob2RfZ2V0X2ltcCwgY2xhc3NfZ2V0X3N1cGVyX2NsYXNzLAorCWNsYXNzX2dldF9tZXRhX2NsYXNzLCBjbGFzc19nZXRfaW5zdGFuY2Vfc2l6ZSk6IG5ldworCWZ1bmN0aW9ucy4KKworCSogT2JqZWN0Lm0gKC1pc1N0cnVjdHVyZWRMaWtlOiwgQ0xBU1MsIElNUDIpOiByZW1vdmVkLgorCSgjaW5jbHVkZSA8b2JqYy9vYmpjLmg+KTogcmVtb3ZlZC4KKwkoaW5jbHVkZXMgPHN0ZGlvLmg+LCA8c3RkYXJnLmg+LCA8ZXJybm8uaD4pOiByZXBsYWNlZCB3LyBleHRlcm4gZGVjbHMuCisJKCtwb3NlQXM6KTogaW1wbGVtZW50ZWQuCisJKC10cmFuc211dGVDbGFzc1RvOik6IG5vdyByZXR1cm5zIHByZXZpb3VzIGNsYXNzLgorCSgtcGVyZm9ybXY6Oik6IGNoYW5nZWQgY29uc3RhbnQgOTYgdG8gbWV0aG9kX2dldF9hcmdzaXplLgorCSgtcGVyZm9ybTosIC1wZXJmb3JtOndpdGg6LCAtcGVyZm9ybTp3aXRoOndpdGg6KTogcmVtb3ZlZCBjYXN0cy4KKwkoLXN0b3JlT246LCArcmVhZEZyb206KTogcmVwbGFjZWQgInN0cmxlbigiIyIpIiB3aXRoICIxIi4KKwkoLWlzS2luZE9mQ2xhc3NOYW1lZDosIC1pc01lbWJlck9mQ2xhc3NOYW1lZDosIC1lcnJvcjosCisJK2Vycm9yOik6IGNoZWNrIGZvciBOVUxMLgorCShtYW55IG1ldGhvZHMpOiBjaGFuZ2VkIHBvaW50ZXIgaW5kaXJlY3Rpb25zIHRvIGZ1bmN0aW9uIGNhbGxzLgorCSgraW5zdGFuY2VzUmVzcG9uZFRvOiwgLXJlc3BvbmRzVG86LCAtbWV0aG9kRm9yOgorCStpbnN0YW5jZU1ldGhvZEZvcjopOiBzaW1wbGlmaWVkLgorCisJKiBPYmplY3QuaCwgT2JqZWN0Lm0gKC1jaGFuZ2VDbGFzczopOiByZW5hbWVkIHRvIC10cmFuc211dGVDbGFzc1RvOi4KKwkoK2luaXRpYWxpemUsIC1pc0NsYXNzLCAtaXNJbnN0YW5jZSk6IGFkZGVkLgorCisJKiBPYmplY3QuaDogcmVkdW5kYW50ICNkZWZpbmVzLCB0eXBlZGVmcyByZW1vdmVkOyBjb21tZW50cyBtb2RpZmllZC4KKwkoK3JlYWRGcm9tOiwgLXJlYWRGcm9tOiwgLXN0b3JlT246KSBhZGRlZC4KKwkoLXBlcmZvcm06d2l0aDopOiBkdXBsaWNhdGUgZGVjbGFyYXRpb24gcmVtb3ZlZC4KKworRnJpIEFwciAgOSAxNzo0MjoxMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IEFjY2VwdCBpMzcwLCBtdnMuCisJRm9yIGkzNzAtaWJtKiwgYXNzdW1lIG12cyBieSBkZWZhdWx0LgorCUxhdGVyLCBsaWtld2lzZSwgZm9yIGkzNzAtKi4KKwlGb3IgLW12cyosIGFzc3VtZSBpYm0gYXMgZGVmYXVsdCB2ZW5kb3IuCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogVXNlIE1BUF9DSEFSQUNURVIgaWYgaXQncyBkZWZpbmVkLgorCisJKiBjY2NwLmMgKG5vX3ByZWNvbXApOiBNYWtlIGl0IDEgYnkgZGVmYXVsdC4KKworRnJpIEFwciAgOSAxNzoxNTowMCAgREogRGVsb3JpZSAoZGpAY3Ryb24uY29tKQorCisJKiBjb25maWd1cmUuYmF0OiBVcGRhdGVkIHRvIGhhbmRsZSBjdXJyZW50IE1ha2VmaWxlCisJYW5kIG5ldyBjb25maWcvaTM4Ni9nbzMyLmguCisKKwkqIGNvbmZpZy9pMzg2L2dvMzIuaDogTmV3IGZpbGUuCisKKwkqIGNvbmZpZy9pMzg2L3htLWRvcy5oOiBEZWZpbmUgTUtURU1QX0VBQ0hfRklMRSBhbmQKKwlOT19QUkVDT01QSUxFUy4KKworRnJpIEFwciAgOSAxNToxMToyNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluOiBJbnN0YWxsIGFzICQodGFyZ2V0KS1nY2MsIG5vdCBnY2MtJCh0YXJnZXQpLgorCisJKiBmaXhpbmNsdWRlczogQXZvaWQgaW5zZXJ0aW5nICNpZm5kZWZzIGluIGxpbWl0cy5oIGlmIHRoZXkgYXJlCisJYWxyZWFkeSB0aGVyZSAoc29sdmVzIEhQL1VYIHByb2JsZW0pLgorCitUaHUgQXByICA4IDIxOjM2OjExIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYzogSW5jbHVkZSBoYXJkLXJlZy1zZXQuaC4KKwkocmVnX25vbnplcm9fYml0cyk6IFNob3VsZCBiZSB1bnNpZ25lZC4KKwkocmVnX2xhc3Rfc2V0X3ttb2RlLG5vbnplcm9fYml0cyxzaWduX2JpdF9jb3BpZXN9KTogTmV3IHZhcmlhYmxlcy4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZWQgdGhlbS4KKwkobm9uemVyb19iaXRzLCBudW1fc2lnbl9iaXRfY29waWVzLCBjYXNlIFJFRyk6IFVzZSBuZXcgdmFyaWFibGVzCisJdG8gZ2V0IGluZm9ybWF0aW9uIG9uIHJlZ3Mgd2UndmUgc2VlbiBiZWZvcmUuCisJKHJlY29yZF92YWx1ZV9mb3JfcmVnKTogU2V0IG5ldyB2YXJpYWJsZXMgZm9yIHJlZ2lzdGVyIGJlaW5nIG1vZGlmaWVkLgorCShyZWNvcmRfZGVhZF9hbmRfc2V0X3JlZ3MpOiBJbnZhbGlkYXRlIHJlZ3MgY2xvYmJlcmVkIGJ5IENBTExfSU5TTi4KKwkqIE1ha2VmaWxlLmluIChjb21iaW5lLm8pOiBJbmNsdWRlcyBoYXJkLXJlZy1zZXQuaC4KKworCSogZXhwci5jIChkb19zdG9yZV9mbGFnLCBjYXNlIEdUX0VYUFIsIExFX0VYUFIpOiBEb24ndAorCWNvbmZ1c2UgaGlnaGVzdCB1bnNpZ25lZCB2YWx1ZSB3aXRoIC0xLgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgeFNISUZUKTogRG9uJ3QgbmFycm93IHRoZQorCW1vZGUgdW5sZXNzIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhlIHNoaWZ0IGNvdW50IGlzIHNtYWxsZXIKKwl0aGFuIHRoZSBzaXplIG9mIHRoZSBtb2RlLgorCisJKiBuczMyay5oIChlbnVtIHJlZ19jbGFzcywgUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMpOgorCUFkZCBuZXcgcmVnaXN0ZXIgY2xhc3MgR0VOX0FORF9GTE9BVF9SRUdTLgorCitUaHUgQXByICA4IDE4OjQyOjI3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGMtcGFyc2UueSwgb2JqYy1wYXJzZS55KTogVXNlIHNlZCwgbm90IGF3ay4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogU3RvcmUgbGF5b3V0IHJlc3VsdHMgaW50byB2YXJpYW50IHR5cGVzLgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBDbGVhciByZWdfbmV4dF91c2UgYXQgdGhlIHByb3BlciBwbGFjZS4KKworVGh1IEFwciAgOCAxMDo1MDowMCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChMSUJHQ0MyX0lOQ0xVREVTLCBMSUJHQ0MyX0RFUFMpOiBOZXcgdmFyaWFibGVzLAorCXdpdGggZW1wdHkgdmFsdWVzLCB0byBiZSBvdmVycmlkZW4gYnkgdC0qIGZpbGVzLgorCShMSUJHQ0MyX0NGTEFHUyk6IFVzZSBMSUJHQ0MyX0lOQ0xVREVTLgorCShsaWJnY2MyLnJlYWR5KTogRGVwZW5kIG9uIExJQkdDQzJfREVQUy4KKwkoc3RtcC1pbnQtaGRycyk6IE5ldyB0YXJnZXQsIGFsbCBvZiBvbGQgc3RtcC1oZWFkZXJzIGV4Y2VwdAorCWZsb2F0LmguCisJKHN0bXAtaGVhZGVycyk6IERlcGVuZCBvbiBzdG1wLWludC1oZHJzLCBhbmQganVzdCBpbnN0YWxsIGZsb2F0LmguCisKK1RodSBBcHIgIDggMDY6NTg6MjcgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGMtdHJlZS5oIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUsIGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwpOiBBZGQKKwlwcm90b3R5cGVzLgorCisJKiB0cmVlLmggKHJlcXVpcmVfY29tcGxldGVfdHlwZSwgbG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IFJlbW92ZQorCXByb3RvdHlwZXMsIHRoZXNlIGFyZSBkZWZpbmVkIGluIGMtdHlwZWNrLmMgYW5kIGMtZGVjbC5jLCBhbmQKKwlsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsIGlzIGRlY2xhcmVkIHN0YXRpYyBpbiBjcC1kZWNsLmMuCisKK1dlZCBBcHIgIDcgMTQ6Mzc6NDEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBDbGVhciByZWdfbmV4dF91c2UgZm9yIGFsbCBraW5kcyBvZiByZWdzLgorCitXZWQgQXByICA3IDA5OjE4OjIwIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWxsb3cgLWZwaWMgYWdhaW4gdG8KKwltZWFuIFN5c3RlbSBWLjQgc2VtYW50aWNzLgorCShDQzFfU1BFQyk6IC1mcGljIGFuZCAtZlBJQyB0dXJuIG9mZiBPU0Yvcm9zZSBzaGFyZWQgbGlicmFyeQorCXN1cHBvcnQuCisKK1R1ZSBBcHIgIDYgMTg6MDc6MjAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOgorCUluaGliaXQgbWlzc2luZyBwcm90b3R5cGUgd2FybmluZyBmb3IgYG1haW4nLgorCitUdWUgQXByICA2IDE3OjIzOjM0IDE5OTMgIEJpbGwgQ294ICAoYmlsbEBjeWdudXMuY29tKQorCisJKiB0cmVlLmggKHJlcXVpcmVfY29tcGxldGVfdHlwZSwgbG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IEFkZAorCXByb3RvdHlwZXMuCisKK1R1ZSBBcHIgIDYgMTU6MDk6NDIgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiB2YS1zcGFyYy5oICh2YV9hcmcpOiBDYXN0IGFyZ3VtZW50IHBvaW50ZXIgdG8gKGNoYXIgKikuCisKKwkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBXaGVuIGNvbXB1dGluZyBjb21wYXJpc29uX3ZhbHVlLCB1c2UKKwlyZWdfc2V0X3AgdG8gaWRlbnRpZnkgaW5zdHJ1Y3Rpb25zIHRoYXQgbW9kaWZ5IGl0LgorCisJKiBzcGFyYy5tZCAobHNobGRpMywgbHNocmRpMyk6IERlZmluZS4KKworCSogTWFrZWZpbGUuaW4gKFNUQUdFU1RVRkYpOiBBZGQgaW5zbi1vcGluaXQuYywgc3RhbXAtb3Bpbml0LCBhbmQKKwlnZW5vcGluaXQuCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEZvciBtaXNzaW5nIGhlYWRlciBmaWxlLCBpZiAtTSwgZG9uJ3QKKwlvdXRwdXQgZGVwZW5kZW5jaWVzLCBhbmQgd2FybmluZyBub3QgZXJyb3IgaWYgbm8gZGVwZW5kZW5jeSBpcworCW5lZWRlZC4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzLCBmb3JtYXQgY2FzZSk6IEVycm9yIGlmIG51bV9hcmcgZG9lcworCW5vdCBwb2ludCB0byBhIHN0cmluZyB0eXBlIGFyZ3VtZW50LCBvciBpZiBmaXJzdF9hcmdfbnVtIG5vdCB0aGUKKwlhbm9ueW1vdXMgYXJndW1lbnQuCisKKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBBbHdheXMgc2V0CisJY3VycmVudF9mdW50aW9uX3JldHVybnNfcGNjX3N0cnVjdCBpZiBQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4gZGVmaW5lZC4KKworCSogc3BhcmMubWQgKG1vdmRpKTogRW5kIGJ5IHJldHVybmluZyB0aGUgbGFzdCB0ZW1wbGF0ZTsgb3RoZXJ3aXNlCisJd2UgcmV0dXJuIGp1bmsgZm9yIGEgdGVtcGxhdGUuCisKKwkqIFJFQURNRS5BTFRPUzogQ29tbWVudCBhcyBwb3NzaWJseSBvYnNvbGV0ZS4KKwkqIFJFQURNRS5FTkNBUDogRGVsZXRlLgorCSogaW5zdGFsbC50ZXhpOiBEZWxldGUgcmVmZXJlbmNlcyB0byBDT0ZGIGVuY2Fwc3VsYXRpb24uCisKKwkqIHRyZWUuaDogQWRkIG1vcmUgcHJvdG90eXBlcy4KKworVHVlIEFwciAgNiAxMjowMToxNyAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIE1laXNzbmVyIHZlcnNpb24gbnVtYmVyIHRvIDM4LgorCShQVVRfU0RCXyopOiBJZiAtbWdhcywgZG9uJ3QgcHV0ICMgaW4gZnJvbnQgb2YgZGlyZWN0aXZlcy4KKwkoTUlQU19ERUZBVUxUX0dWQUxVRSk6IElmIG5vdCBkZWZpbmUsIGRlZmluZSBhcyA4LCB3aGljaCBpcyB0aGUKKwlkZWZhdWx0IC1HIHh4IHZhbHVlIHRvIHVzZS4KKworCSogbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogU2V0IG1pcHNfc2VjdGlvbl90aHJlc2hvbGQgdG8KKwlNSVBTX0RFRkFVTFRfR1ZMQVVFIGlmIC1HIHh4IG5vdCB1c2VkLgorCisJKiBtaXBzL29zZnJvc2UuaCAoRFdBUkZfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCisJKE1JUFNfREVGQVVMVF9HVkFMVUUpOiBJZiBtaXBzIGFzc2VtYmxlciwgdGhlIHZhbHVlIGlzIDgsCisJb3RoZXJ3aXNlIGl0IGlzIDAuCisKKwkqIGkzODYvb3Nmcm9zZS5oIChEV0FSRl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KKwkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lIGFzIERCWF9ERUJVRy4KKworTW9uIEFwciAgNSAyMDo0Nzo0NCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIFJlcHJlc2VudCBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgYXMgUlRMIG9uIHRoZSBQQQorCSogcGEubWQgKHByb2xvZ3VlLCBlcGlsb2d1ZSk6IE5ldyBkZWZpbmVfZXhwYW5kcy4KKwkocmV0dXJuX2ludGVybmFsLCBjYWxsX3Byb2ZpbGVyKTogTmV3IGRlZmluZV9pbnNucy4KKwkqIHBhLmggIChGSVhFRF9SRUdJU1RFUlMpOiAlcjQgaXMgbm8gbG9uZ2VyIGZpeGVkLgorCShDQUxMX1VTRURfUkVHSVNURVJTKTogJXI0IGlzIG5vIGxvbmdlciBDQUxMX1VTRUQgZWl0aGVyLgorCShSRUdfQUxMT0NfT1JERVIpOiBNb3ZlICVyNCB1cCBpbiB0aGUgYWxsb2NhdGlvbiBvcmRlci4KKwkoREVMQVlfU0xPVFNfRk9SX0VQSUxPR1VFKTogRGVsZXRlLgorCShFTElHSUJMRV9GT1JfRVBJTE9HVUVfREVMQVkpOiBEZWxldGUuCisJKiBwYS5jIChwcmludF9zdHcsIHByaW50X2xkdyk6IERlbGV0ZS4KKwkoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5KTogRGVsZXRlLgorCShocHBhX2VwaWxvZ3VlX2RlbGF5X3Nsb3RzKTogRGVsZXRlLgorCShzdG9yZV9yZWcsIGxvYWRfcmVnLCBzZXRfcmVnX3BsdXNfZCk6IE5ldyBoZWxwZXIgZnVuY3Rpb25zLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBPbmx5IGVtaXQgYXNzZW1ibGVyIHBzZXVkby1vcHMKKwl0byBkZW5vdGUgdGhlIHN0YXJ0IG9mIGEgZnVuY3Rpb24uICBQbGFjZSB0aGUgY29ycmVjdAorCXZhbHVlIGludG8gaHBfcHJvZmlsZV9sYWJlbF9uYW1lIGlmIHByb2ZpbGluZy4KKwkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogT25seSBlbWl0IGFzc2VtYmxlciBwc2V1ZG8tb3BzCisJdG8gZGVvbnRlIHRoZSBlbmQgb2YgYSBmdW5jdGlvbi4KKwkoaHBwYV9leHBhbmRfcHJvbG9ndWUpOiBOZXcgZnVuY3Rpb24gdG8gZW1pdCBhbGwgcHJvbG9ndWUKKwljb2RlIGFzIFJUTC4KKwkoaHBwYV9leHBhbmRfZXBpbG9ndWUpOiBMaWtld2lzZSBmb3IgdGhlIGVwaWxvZ3VlLgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBVcGRhdGUgdG8gYWNjb3VudCBmb3IgdXNpbmcgJXI0IGFzIGFuCisJYWxsb2NhdGFibGUgcmVnaXN0ZXIgaWYgdGhlIGZyYW1lIHBvaW50ZXIgd2FzIGVsaW1pbmF0ZWQuCisKK01vbiBBcHIgIDUgMDY6NTc6MzUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBTQVZFX0VYUFIpOiBQYXNzIHByb21vdGVkIHR5cGUgdG8KKwlzdG9yZV9leHByLgorCitNb24gQXByICA1IDAzOjI2OjA2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IENhc3QgZW51bSBhcnJheSBpbmRleCB0byBpbnQuCisKKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IpOiBQcm9wZXJseSBjb21wdXRlIHNpemUgb2YgYXJyYXkKKwl3aGVuIGNsZWFyaW5nIHRoZSB3aG9sZSBhcnJheS4KKworTW9uIEFwciAgNSAwMjo1NDo1NCAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAobG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6ICBNYWtlIG5vbi1zdGF0aWMuCisKK1N1biBBcHIgIDQgMjA6MDk6MTkgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChIQVJEX1JFR05PX01PREVfT0spOiBEbyBub3QgYWNjZXB0IGludGVnZXIgbW9kZXMKKwlncmVhdGVyIHRoYW4gMzIgYml0cyBpbiAxLjAgRlAgcmVnaXN0ZXJzLgorCSogcGEubWQgKG1vdmRpIHBhdHRlcm5zKTogRG8gbm90IGFjY2VwdCAxLjAgRlAgcmVnaXN0ZXJzLgorCShmbG9hdHVuc2Rpc2YsIGZsb2F0dW5zZGlkZiBleHBhbmRlcnMpOiBEaXNhYmxlIHVubGVzcyBUQVJHRVRfU05BS0UuCisJKGZsb2F0ZGlzZjIsIGZsb2F0ZGlkZjIgcGF0dGVybnMpOiBMaWtld2lzZS4KKwkoZml4X3RydW5jZGlzZjIsIGZpeF90cnVuY2RpZGYyKTogTGlrZXdpc2UuCisKKwkqIHBhLm1kIChkYnJhIHBhdHRlcm4pOiBFeHRlbmQgdG8gYWxsb3cgYW55IDUgYml0IGluY3JlbWVudCwKKwlhbnkgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgdGhlIGNvbXBhcmUgYWdhaW5zdCB6ZXJvLCBhbmQKKwlubyBsb25nZXIgcmVxdWlyZSB0aGUgUkVHX05PTk5FRyBub3RlLgorCisJKiBwYS5oIChFWFRSQV9DT05TVFJBSU5UKTogUmVmaW5lICdUJyBjb25zdHJhaW50IHRvIG5vdCBhY2NlcHQKKwlwc2V1ZG9zIHdoaWNoIGRpZCBub3QgZ2V0IGhhcmQgcmVnaXN0ZXJzIGFuZCB0byBub3QgdXNlIAorCXNob3J0X21lbW9yeV9vcGVyYW5kLgorCSogcGEuYyAoc2hvcnRfbWVtb3J5X29wZXJhbmQpOiBEZWxldGUuCisJKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IERvIG5vdCB1c2Ugc2hvcnRfbWVtb3J5X29wZXJhbmQgd2hlbiB0ZXN0aW5nIAorCWZvciBzZWNvbmRhcnkgcmVsb2FkcyBmb3IgRlAgbG9hZHMvc3RvcmVzLgorCSogcGEubWQgKG1vdnNpIGZvciBGUCByZWdzKTogRGVsZXRlIHNwZWNpYWwgY2FzZSBwYXR0ZXJucy4KKwkobW92ZGkgZm9yIEZQIHJlZ3MpOiBMaWtld2lzZS4KKwkobW92c2kgbWFpbiByZWNvZ25pemVyKTogQWxsb3cgZnA8LT5tZW1vcnkgY29waWVzLgorCShtb3ZkaSBtYWluIHJlY29nbml6ZXIpOiBMaWtld2lzZS4KKworU3VuIEFwciAgNCAxODo1NjoyNSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5oIChGVU5DVElPTl9PVVRHT0lOR19WQUxVRSk6IFJlbW92ZS4KKwkoRlVOQ1RJT05fVkFMVUVfUkVHTk9fUCk6IFJldHVybiByZWdzIGRlcGVuZCBvbiBUQVJHRVRfU05BS0UuCisKK1N1biBBcHIgIDQgMTc6NDc6NDMgMTk5MyAgSm9obiBGIENhcnIgIChqZmNAQXRoZW5hLm1pdC5lZHUpCisKKwkqIHJlb3JnLmMgKGdldF9qdW1wX2ZsYWdzKTogIENoZWNrIGZvciBMQUJFTCA9PSAwIGJlZm9yZSB1c2luZworCUxBQkVMLgorCitTdW4gQXByICA0IDE2OjM4OjA0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbWlwcy10ZmlsZS5jOiBDaGFuZ2UgImlsbGVnYWwiIHRvICJpbnZhbGlkIiBpbiBlcnJvciBtZXNzYWdlcy4KKwkocGFyc2Vfc3RhYnNfY29tbW9uKTogQWxsb3cgbm9uemVybyBpZ25vcmVkIGZpZWxkcyBpbiAuc3RhYnMvLnN0YWJuLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCkgW1BDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTl06CisJQWx3YXlzIHNldCBwY2Nfc3RydWN0X3ZhbHVlIGlmIGFnZ3JlZ2F0ZV92YWx1ZV9wIHJldHVybnMgMS4KKworCSogTWFrZWZpbGUuaW4gKGFsbG9jYS5vKTogRGVsZXRlIC1EZW1hY3MgZnJvbSBjb21tYW5kLgorCitTdW4gQXByICA0IDExOjE5OjA3IFBEVCAxOTkzICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIGR3YXJmb3V0LmMgKHR5cGVfYXR0cmlidXRlKTogVXNlIHRoZSBUWVBFX01BSU5fVkFSSUFOVCBvZiB0aGUKKwlnaXZlbiB0eXBlIHdoZW4gY2FsbGluZyBgdXNlcl9kZWZfdHlwZV9hdHRyaWJ1dGUnLgorCitTdW4gQXByICA0IDA3OjU3OjE4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jOiBJbmNsdWRlIHJlbG9hZC5oLgorCSogTWFrZWZpbGUuaW4gKG9wdGFicy5vKTogU2hvdyBpbmNsdWRlcyByZWxvYWQuaC4KKworCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IE5lZWQgTERHUCBldmVuIGZvciBzdGF0aWMgcHJvY2VkdXJlLgorCisJKiBhbHBoYS5jIChhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogQWRqdXN0IGZvciBmYWN0IHRoYXQKKwl2aXJ0dWFsX2luY29taW5nX2FyZ3NfcnR4IGluY2x1ZGVzIHByZXRlbmQgc2l6ZS4KKwkqIGFscGhhLmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBMaWtld2lzZS4KKworCSogYWxwaGEuaCAoTElOS19TUEVDKTogRG9uJ3QgcGFzcyAtTzIgdG8gbGQ7IGl0IHNlZW1zIHRvIGJlIGJyb2tlbi4KKworCSogcmVvcmcuYyAocmFyZV9kZXN0aW5hdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkobW9zdGx5X3RydWVfanVtcCk6IFJlZmluZSB0byB1c2UgbW9yZSBpbmZvIGFib3V0IGRlc3RpbmF0aW9uCisJYW5kIGZhbGx0aHJvdWdoOyBub3cgcmV0dXJucyAtMSBmb3IgdmVyeSB1bmxpa2VseSBicmFuY2hlcy4KKwkoZmlsbF9lYWdlcl9kZWxheV9zbG90cywgcmVsYXhfZGVsYXlfc2xvdHMpOiBBbGxvdyAtMSByZXR1cm4KKwlmcm9tIG1vc3RseV90cnVlX2p1bXAuCisKK1N1biBBcHIgIDQgMDM6MDk6MjMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0BjaHVyY2h5LmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkYXJnLmggW19fc3ZyNF9fXTogVGVzdCBvbmx5IF9WQV9MSVNUXyB0byBhdm9pZCBkdXAgdHlwZWRlZi4KKwkoVGhpcyB1c2VkIHRvIGJlIGlmIF9fU1ZSNF8yX18uKQorCisJKiBjb25maWcvbTY4ay9tNjhrLmMgKGZsb2F0aW5nX2V4YWN0X2xvZzIpOiBJbml0aWFsaXplIHIxLgorCitTYXQgQXByICAzIDIwOjAxOjA1IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuYyAoaHBwYV9sZWdpdGltaXplX2FkZHJlc3MpOiBVc2UgUG1vZGUgY29uc2lzdGVudGx5LgorCitTYXQgQXByICAzIDE3OjM1OjExIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBEb24ndCB1cGRhdGUgdGhlIHN0YXR1cyBvZiBhCisJcmVnaXN0ZXIgZnJvbSBhbiBpbnB1dCByZWxvYWQgaWYgaXQgYWxzbyBoYXMgYW4gb3V0cHV0IHJlbG9hZC4KKworCSogZXhwci5jIChzdG9yZV9leHByKTogQ2FsbCBzaXplX2Jpbm9wIGluc3RlYWQgb2YgZG9pbmcgdGhlCisJc2FtZSB0aGluZyB3aXRoIGZvbGQgYW5kIGJ1aWxkLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24sIGNhc2UgUExVUyk6IEdlbmVyYWxpemUKKwlzaW1wbGlmaWNhdGlvbiBvZiAoZXEgKHBsdXMgQSBCKSBDKS4KKwkoc2ltcGxpZnlfY29tcGFyaXNvbiwgY2FzZSBNSU5VUyk6IEFkZCBjb3JyZXNwb25kaW5nIGNhc2VzLgorCitGcmkgQXByICAyIDE5OjExOjQ2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKGV4cHJfbm9fY29tbWFzLCBmcm9tIEFTU0lHTiBvcCk6CisJU3RvcmUgRVJST1JfTUFSSyBhcyB0aGUgb3JpZ2luYWwgY29kZS4KKworRnJpIEFwciAgMiAwNzo0OTowMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfdXNlZF9mb3JfaW5oZXJpdCk6IE5ldyB2YXJpYWJsZS4KKwkoY2xlYXJfcmVsb2FkX3JlZ19pbl91c2UpOiBOZXcgZnVuY3Rpb24uCisJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBEb24ndCBjb25zaWRlciBhbiBpbmhlcml0ZWQgcmVnaXN0ZXIgYXMKKwlvbmUgdGhhdCB3ZSBzaG91bGQgc2hhcmUgaW4gdGhlIGZpcnN0IHBhc3MuCisJRG9uJ3QgbWFyayBhIHJlZ2lzdGVyIGluIHVzZSB1bnRpbCB3ZSBhcmUgc3VyZSBpdCB3aWxsIGZpdC4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogTWFyayBzcGlsbCByZWdzIHVzZWQgZm9yIGluaGVyaXRpbmcuCisJV2hlbiB3ZSBkZWNpZGUgd2UgY2FuIG5vIGxvbmdlciB1c2UgYSByZWdpc3Rlciwgc2hvdyBpdCBpc24ndAorCWJlaW5nIHVzZWQuCisKKwkqIGdlbm9waW5pdCAob3B0YWJzKTogRml4IHR5cG8gaW4gbmFtZSBmb3IgImZpeCIgcGF0dGVybi4KKworVGh1IEFwciAgMSAyMToyNDowNCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlDeWdudXM8LT5GU0YgbWVyZ2UuCisKKwlUaHUgQXByICAxIDE3OjIwOjA1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAc3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdGFydF9tZXRob2QpOiBOZXZlciBhbGxvdyBjaXJjdWxhcml0aWVzIGluCisJVFJFRV9DSEFJTnMsIGFzIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgd2lsbCBjb3JlIGR1bXAuICBUaGlzIGhhcHBlbnMKKwl3aGVuIGEgbWV0aG9kIGlzIHJlZGVjbGFyZWQgaW1wcm9wZXJseSBhdCBsZWF0LgorCisJVGh1IEFwciAgMSAxMjowNjowMyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQ2hlY2sgaWYgYHJocycgaXMgYW4KKwllcnJvcl9tYXJrX25vZGUgYmVmb3JlIGxvb2tpbmcgdG8gc2VlIGlmIGl0J3Mgb2YgT0ZGU0VUX1RZUEUuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBEb24ndCB1c2UgZGVjbGFyYXRvciB1bmxlc3MgaXQncyBub24tbnVsbAorCXdoZW4gbG9va2luZyBmb3IgYSByZWRlZmluaXRpb24uCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IENoZWNrIGlmIGByaHMnIGlzIGEKKwlUUkVFX0xJU1QgYmVmb3JlIGxvb2tpbmcgZm9yIGl0cyB2YWx1ZS4KKworCSogY3AtaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogRG9uJ3QgY2xlYXIgREVDTF9SRUdJU1RFUi4KKworCVdlZCBNYXIgMzEgMTc6NTc6NTAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1zcGV3LmMgKHl5bGV4LCBjYXNlIElERU5USUZJRVIpOiBJZiBpZGVudGlmaWVyX3R5cGVkZWNsX3ZhbHVlCisJcmV0dXJucyBhIE5VTExfVFJFRSwgdGhlbiBzZXQgYGxhc3RpZGRlY2wnIHRvIGJlIGB0cnJyJy4KKwkqIGNwLWxleC5jIChpZGVudGlmaWVyX3R5cGVkZWNsX3ZhbHVlKTogSW5zdGVhZCBvZiBpbnRlcm5hbCBlcnJvciA2MgorCXdoZW4gd2UgZG9uJ3QgaGF2ZSBhIG1hdGNoIGZvciBgdHlwZScsIHJldHVybiBhIE5VTExfVFJFRSBzaW5jZSBvdXIKKwljYWxsZXJzIHdpbGwga25vdyB3aGF0IHRvIGRvIGluIHRoYXQgY2FzZS4KKworCSogY3AtdHJlZS5oIChJREVOVElGSUVSX1RZUEVERUNMX1ZBTFVFKTogRGVsZXRlZC4KKwkoaWRlbnRpZmllcl90eXBlZGVjbF92YWx1ZSk6IERlbGV0ZWQgZmlyc3QgcHJvdG90eXBlLCBrZXB0IHNlY29uZC4KKwkqIGNwLXRyZWUuYyAobGlzdF9oYXNoX2xvb2t1cF9vcl9jb25zKTogQ2FsbCB0aGUgZnVuY3Rpb24gZm9yCisJaWRlbnRpZmllcl90eXBlZGVjbF92YWx1ZSwgZG9uJ3QgdXNlIHRoZSBtYWNyby4KKwkqIGNwLXNwZXcuYyAoeXlsZXgpOiBMaWtld2lzZS4KKworCVdlZCBNYXIgMzEgMTQ6NDM6NTAgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydF9mcm9tX3JlZmVyZW5jZSk6IE1ha2Ugc3VyZSB3ZSBzZXQKKwlUUkVFX1NJREVfRUZGRUNUUyBpZiB3ZSBuZWVkIHRvLiAgQ3VyZXMgZHVwbGljYXRlIGV2YWx1YXRpb25zIGluCisJdGhpbmdzIGxpa2U6IGZvby5tZW0oZysrKSA9IGNsYXNzX2M7IHdoZXJlIGZvby5tZW0gcmV0dXJucyBhCisJcmVmZXJlbmNlIHRvIGEgY2xhc3Mgb2JqZWN0LgorCisJV2VkIE1hciAzMSAxMzozMjozOCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChyZXBvcnRfdHlwZV9taXNtYXRjaCk6IEFyZ3VtZW50cyBhcmUgbnVtYmVyZWQKKwlzdGFydGluZyBmcm9tIDEgbm93LgorCisJVHVlIE1hciAzMCAxNzoyMToxOCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2ZuZGVjbCk6IFdoZW4gcmUtdXNpbmcgYW4gb2xkIGRlY2wgaW4gcGxhY2Ugb2YgYQorCW5ldyBkZWNsLCBtYWtlIHN1cmUgdG8gd2lwZSBvdXQgdGhlIERFQ0xfQ0hBSU4gc2xvdCwgYXMgb3RoZXJ3aXNlCisJdGhpcyBjcmVhdGVzIGEgY2lyY3VsYXJpdHksIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgY29tcGlsZXIKKwlsYXRlci4KKworCVR1ZSBNYXIgMzAgMTQ6MTQ6NTMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChjaGVja19jbGFzc2ZuKTogU2F5IHdoaWNoIGNsYXNzIHdoZW4gZ2l2aW5nIGFuIGVycm9yCisJYWJvdXQgYXJnbGlzdCBtaXNtYXRjaGVzIG9yIG1pc3NpbmcgbWVtYmVycy4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZvciBjbGFzcy1sb2NhbCB0eXBlZGVmcywgY2FsbCBwdXNodGFnCisJdG8gbWFrZSBzdXJlIHRoZSBpZGVudGlmaWVyIGlzIGluIHNjb3BlIHByb3Blcmx5LgorCisJTW9uIE1hciAyOSAxODowNToyMiAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlsb29rdXBfZm5maWVsZHMgaGFja2luZy4uLiAgQ29ycmVjdHMgc29tZSBwcm9ibGVtcyBmb3VuZCB3aXRoIFRodQorCU1hciAyNSAyMzowOToyNyAxOTkzIHZ0YWJsZSBmaXhlcy4KKworCSogY3AtaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogV2hlbiBsb29raW5nIGZvciB0aGUgY29tcG9uZW50LAorCWhhdmUgbG9va3VwX2ZuZmllbGRzIGRvIHRoZSBhbWJpZ3VpdHkgY2hlY2tpbmcsIGFzIHdlIGtub3cgaXQgd29ya3MKKwltdWNoIGJldHRlciB0aGFuIGFueXRoaW5nIGhlcmUuCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogSWYgYSBuYW1lIGlzIGFtYmlndW91cywgZ28gYWhlYWQKKwlhbmQgcmVwb3J0IHRoZSBlcnJvci4KKwkqIGNwLXNlYXJjaC5jIChsb29rdXBfZm5maWVsZHMpOiBSZWZpbmUgc2VtYW50aWNzIGFuZCBkb2N1bWVudAorCXNlbWFudGljcyB3aXRoIHJlc3BlY3QgdG8gYW1iaWd1aXRpZXMgYW5kIHJldHVybmluZyBlcnJvcl9tYXJrX25vZGUuCisJQWxzbywgZXh0ZW5kIHRvIGJlIGFibGUgdG8gZmluZCBhbGwgdmlydHVhbCBmdW5jdGlvbnMuCisJKiBjcC1zZWFyY2guYyAoZ2V0X3ZpcnR1YWxzX25hbWVkX3RoaXMpOiBSZW1vdmUgdW51c2VkIHNlY29uZAorCWFyZ3VtZW50LiAgQXJyYW5nZSBmb3IgY2FsbCB0byBsb29rdXBfZm5maWVsZHMgdG8gZmluZCBhbGwgdmlydHVhbAorCWZ1bmN0aW9ucywgZXZlbiBpZiB0aGV5IGFyZSBoaWRkZW4uCisJKiBjcC1zZWFyY2guYyAoZ2V0X2ZpcnN0X21hdGNoaW5nX3ZpcnR1YWwpOiBSZW1vdmVkIHVudXNlZCBzZWNvbmQKKwlhcmd1bWVudCB0byBnZXRfdmlydHVhbHNfbmFtZWRfdGhpcy4KKworCU1vbiBNYXIgMjkgMTY6NDI6NTggMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1tZXRob2QuYyAoZHVtcF9pbml0KTogSWYgdGhlIGluaXQgdmFsdWUgaXMgYW4gZW51bSwgdGhlbiB1c2UKKwlpdHMgdGFnIGluIHRoZSBlcnJvciBtZXNzYWdlLCBpbnN0ZWFkIG9mIGl0cyB2YWx1ZS4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBEZWxldGUgc3B1cmlvdXMgd2FybmluZworCWFib3V0IGNvbXBhcmlzaW9uIGJldHdlZW4gc2lnbmVkL3Vuc2lnbmVkIChtYXRjaGVzIEMgZnJvbnQtZW5kKS4KKworCUZyaSBNYXIgMjYgMTY6MzA6NTcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChHQ0NfQVNNX0tFWVdPUkQpOiBOZXcgdG9rZW4uCisJKGFzbV9rZXl3b3JkKTogTmV3IHJ1bGUuCisJKGV4dGRlZiwgbWF5YmVhc20sIHNpbXBsZV9zdG10KTogVXNlIHRoZSBydWxlIGluc3RlYWQgb2YgQVNNX0tFWVdPUkQuCisJKG1heWJlX3R5cGVfcXVhbCk6IERvbid0IHdhcm4gYWJvdXQgdXNlIG9mIGFzbS4KKwkqIGdwbHVzLmdwZXJmIChfX2FzbSwgX19hc21fXyk6IFRva2VuIGlzIEdDQ19BU01fS0VZV09SRC4KKwkqIGNwLXNwZXcuYyAoaW5pdF9zcGV3KTogQWRkIEdDQ19BU01fS0VZV09SRC4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogRml4IGEgYnVnIHNvIGVycm9ycyBhYm91dCArKy8tLSBvbgorCWludmFsaWQgcG9pbnRlciB0eXBlcyBhY3R1YWxseSBnZXQgZW1pdHRlZC4gIERvbid0IHJlc3RyaWN0IGl0IHRvCisJd2hlbiBQRURBTlRJQyBpcyBzZXQsIGFuZCB1c2UgdHlwZV9hc19zdHJpbmcgdG8gc2F5IHdoYXQgdHlwZSBpcworCWJlaW5nIG9wZXJhdGVkIG9uLgorCisJRnJpIE1hciAyNiAwMToyMTo0MyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBzZXQgVFJFRV9QVUJMSUMgZm9yIGZyaWVuZHMuCisKKwlGcmkgTWFyIDI2IDAxOjA5OjM0IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IEdpdmUgYSBwZWR3YXJuLCBub3QgYSByZWd1bGFyIHdhcm5pbmcsIHdoZW4KKwl3ZSBzaGFkb3cgYSBmb3JtYWwgcGFyYW1ldGVyLgorCisJKiBjcC1pbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBHZXQgcmlkIG9mIHNwdXJpb3VzIGFib3J0IGNhbGwuCisKKwlUaHUgTWFyIDI1IDIzOjA5OjI3IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCU1ham9yIHZ0YWJsZSByZS12YW1wLgorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogUmV3b3JkIGFuZCBpbXByb3ZlIGVycm9yIG1lc3NhZ2VzLgorCSogY3AtY2xhc3MuYyAobW9kaWZ5X3Z0YWJsZV9lbnRyaWVzKSwgY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCksCisJY3AtaW5pdC5jIChpbml0X3ZmaWVsZHMpLCBjcC10cmVlLmMgKHZpcnR1YWxfbWVtYmVyLCB2aXJ0dWFsX29mZnNldCksCisJY3AtdHJlZS5oOiBSZW1vdmUgdGhpcmQgYXJndW1lbnQgdG8gYmluZm9fdmFsdWUsIGFzIGl0IGlzIHVubmVlZGVkLgorCSogY3AtY2xhc3MuYyAoZmluaXNoX2Jhc2Vfc3RydWN0KTogVW5zaGFyZSBiYXNlIGNsYXNzIGJpbmZvcy4KKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRml4dXAgc2Vjb25kIGFyZ3VtZW50IHRvCisJYnVpbGRfdmlydHVhbF9pbml0LCBzbyBhcyB0byBtYWtlIGl0IHVuYW1iaWd1b3VzLgorCSogY3AtaW5pdC5jIChidWlsZF92aXJ0dWFsX2luaXQpOiBVc2Ugc2Vjb25kIGFyZ3VtZW50IHRvIGdldCB0aGUKKwl2dGFibGUsIG5vdCB0aGUgZmlyc3QsIGFzIHRoZSBzZWNvbmQgaXMgbW9yZSBzcGVjaWZpYy4KKwkqIGNwLXNlYXJjaC5jIChpc19zdWJvYmplY3Rfb2ZfcCwgaGlkZXMsIGxvb2t1cF9mbmZpZWxkc19oZXJlKTogTmV3CisJcm91dGluZXMuCisJKiBjcC1zZWFjaC5jIChsb29rdXBfZmllbGQsIGxvb2t1cF9mbmZpZWxkc18xKTogUmUtaW1wbGVtZW50LiAgVGhlCisJbmV3IGltcGxlbWVudGF0aW9uIGFsbG93cyBmb3IgYmV0dGVyIGFtYmlndWl0eSBjaGVja2luZyAoMTAuMS4xKSwKKwlhbmQgaW1wbGVtZW50cyBtb3N0IGhpZGluZyAoMTBwNCkuCisJKiBjcC10cmVlLmMgKGJpbmZvX3ZhbHVlKTogUmUtaW1wbGVtZW50LgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBQcm9wYWdhdGUgZXJyb3JfbWFya19ub2RlcyB1cC4KKworVGh1IEFwciAgMSAxOTozODo1MyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKHJlZHVuZGFudF9pbnNuX3ApOiBTdG9wIHNlYXJjaGluZyBmb3IgYSByZWR1bmRhbnQKKwlpbnNuIGlmIGFuIElOU04gb3IgSlVNUF9JTlNOIHdpdGggZGVsYXllZCBlZmZlY3RzIGlzIAorCWVuY291bnRlcmVkLgorCitUaHUgQXByICAxIDEyOjAwOjAxIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiByZWFsLmMgKHRvcGxldmVsKTogQWRkICdleHRlcm4nIGtleXdvcmQgaW4gZm9yd2FyZCBkZWNsYXJhdGlvbgorCW9mIGFycmF5cyB3aXRob3V0IGJvdW5kcyB0byBzaWxlbmNlIHdhcm5pbmdzIGZyb20gdGhlIE1JUFMKKwljb21waWxlci4KKworCSogaTM4Ni9vc2Zyb3NlLmggKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IFVuZGVmIHRoaXMgdG8gcHJvdGVjdAorCWFnYWluc3QgbG9uZyBkb3VibGUgZ29pbmcgdG8gODAgYml0cyB1bnRpbCB0aGUgT1NGIGxpYnJhcmllcyBhcmUKKwlyZWFkeSB0byBoYW5kbGUgaXQuCisKKwkqIG1pcHMvbWlwcy5tZCAodW50eXBlZF9jYWxsKTogUmV3cml0ZSBjb2RlIHNvIHRoYXQgdGhlIE1JUFMKKwljb21waWxlciB3aWxsIG5vdCBpc3N1ZSBzdGF0ZW1lbnQgbm90IHJlYWNoZWQgd2FybmluZyBtZXNzYWdlcy4KKworVGh1IEFwciAgMSAwNzoyODoxMSAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXNAYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24sIGV4cGFuZF9hc3NpZ25tZW50KTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK1RodSBBcHIgIDEgMDI6MzE6MTYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0KTogIENsZWFyIHNlcXVlbmNlX3N0YWNrLiAgT3RoZXJ3aXNlLAorCWlmIHdlJ3JlIGluIGEgc2VxdWVuY2Ugd2hlbiBzdGFydGluZyBhIG5lc3RlZCBmdW5jdGlvbgorCWV4cGFuZF9mdW5jdGlvbl9lbmQgKCkgd2lsbCBlbmQgYWxsIHRoZSBzZXF1ZW5jZXMuCisKK1RodSBBcHIgIDEgMDI6MTE6MTAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTKTogQWRkIF9maXh1bnN4ZmRpLCBfZml4eGZkaSwgX2Zsb2F0ZGl4ZiwKKwlfZml4dW5zeGZzaS4KKworCSogbGliZ2NjMi5jIChYRnR5cGUpOiBEbyBkZWZpbmUgaXQsIGlmIExPTkdfRE9VQkxFX1RZUEVfU0laRSA9PSA5Ni4KKwkoX19maXh1bnN4ZmRpKTogTmV3IGZ1bmN0aW9uLCBpZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUgPT0gOTYuCisJKF9fZml4eGZkaSwgX19mbG9hdGRpeGYsIF9fZml4dW5zeGZzaSk6IExpa2V3aXNlLgorCitXZWQgTWFyIDMxIDIwOjA1OjE5IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKENMQVNTX1VOSVRTKTogRml4IHR5cG8gaW4gcHJldmlvdXMgY2hhbmdlLCBwYXRjaCBmcm9tCisJaWFuQGN5Z251cy5jb20uCisKK1dlZCBNYXIgMzEgMTc6MTg6MjcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2FsbCBpbmNvbXBsZXRlX2RlY2xfZmluYWxpemVfaG9vaworCW9ubHkgaWYgbm9uemVyby4KKworV2VkIE1hciAzMSAwMDo1OTo1MCAxOTkzICBHZXJhbGQgQmF1bWdhcm50ZXIgIChnYkBjcy5wdXJkdWUuZWR1KQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogT25seSBjYWxsIGAqaW5jb21wbGV0ZV9kZWNsX2ZpbmFsaXplX2hvb2snCisJaWYgdGhlIGBkZWNsJyBpbiBxdWVzdGlvbiBpcyBhIFZBUl9ERUNMLgorCitXZWQgTWFyIDMxIDE1OjI3OjQxIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoQ09OU1RBTlRfQUREUkVTU19QKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK1dlZCBNYXIgMzEgMTU6MTE6MTIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjbGlwcGVyL2NsaXBwZXIuaCwgY29udmV4L2NvbnZleC5oLCBlbHhzaS9lbHhzaS5oLCBmeDgwL2Z4ODAuaCwKKwlnbWljcm8vZ21pY3JvLmgsIGg4MzAwL2g4MzAwLmgsIGkzODYvaTM4Ni5oLCBpMzg2L29zZnJvc2UuaCwKKwlpODYwL2k4NjAuaCwgaTk2MC9pOTYwLmgsIG02OGsvbTY4ay5oLCBtODhrL204OGsuaCwgbWlwcy9taXBzLmgsCisJcGEvcGEuaCwgcHlyL3B5ci5oLCByb21wL3JvbXAuaCwgcnM2MDAwL3JzNjAwMC5oLCBzcGFyYy9zcGFyYy5oLAorCXNwdXIvc3B1ci5oLCB0YWhvZS90YWhvZS5oLCB2YXgvdmF4LmgsIHdlMzJrL3dlMzJrLmgKKyAgICAgICAgKENPTlNUQU5UX0FERFJFU1NfUCk6IERlZmluZSB3aXRoIGJvZHkgb2YgYENPTlNUQU5UX1AnLCBidXQgbGVhdmUKKwlvdXQgQ09OU1RfRE9VQkxFLgorCitXZWQgTWFyIDMxIDExOjI4OjIxIDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0BiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKGVtaXRfc3dhcF9pbnNuKTogRG9uJ3QgbGluayBjYzAgaW5zbnM6IGVtaXQgc3dhcAorCWFmdGVyIGNjMCB1c2VyLgorCitXZWQgTWFyIDMxIDA3OjAwOjQ1IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQGFwcGxlLWd1bmtpZXMuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQUREUl9FWFBSKTogQWxsb3cgdGFraW5nIHRoZQorCWFkZHJlc3Mgb2YgYW55IG9iamVjdDsgdXNlZCBpbiBjYWxsLWJ5LXJlZmVyZW5jZSBzaXR1YXRpb25zLgorCisJKiB0cmVlLmMgKG5leHRfdHlwZV91aWQpOiBNb3ZlIGRlZmluaXRpb24gdG8gcmVhc29uYWJsZSBwbGFjZS4KKwkoY29weV9ub2RlKTogTWFrZSBuZXcgREVDTF9VSUQgYW5kIFRZUEVfVUlEIGFzIGNvbW1lbnRzIHNheS4KKworCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUsIGVtaXRfcHVzaF9pbnNuLCBleHBhbmRfYXNzaWdubWVudCk6CisJU2l6ZSBwYXNzZWQgdG8gbWVtY3B5L2Jjb3B5IGlzIFNJWkVUWVBFLCBub3QgUG1vZGUuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIE1VTFQpOiBXaGVuIHRlc3RpbmcgZm9yCisJZmxvYXRpbmctcG9pbnQgZXF1YWxpdHksIG1ha2Ugc3VyZSB3ZSBkbyBzbyBpbnNpZGUgYSByZWdpb24KKwlwcm90ZWN0ZWQgZnJvbSB0cmFwcy4KKwkqIGkzODYuYyAoc3RhbmRhcmRfODAzODdfY29uc3RhbnRfcCk6IExpa2V3aXNlLgorCisJKiBhbHBoYS5oIChJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IFN1YnRyYWN0CisJY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZSBmcm9tIE9GRlNFVCBmb3IgQVAuCisKKwkqIGFscGhhLmggKExJTktfU1BFQyk6IE5ldyBkZWZpbml0aW9uLgorCisJKiBjc2UuYyAoaW5zZXJ0X3JlZ3MpOiBJZiBhIFJFRyBhbHJlYWR5IGlzIGluIGEgY2xhc3MgYnV0IG5vdAorCWluIHRoZSBtb2RlIHdlIHdhbnQsIGRvbid0IGRvIGFueXRoaW5nIHRvIHRoZSBjbGFzc2VzLgorCitXZWQgTWFyIDMxIDAyOjAyOjI5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3ZhcmFyZ3MuaCBbX19zdnI0X19dOiBUZXN0IG9ubHkgX1ZBX0xJU1RfIHRvIGF2b2lkIGR1cCB0eXBlZGVmLgorCShUaGlzIHVzZWQgdG8gYmUgaWYgX19TVlI0XzJfXy4pCisKKwkqIGxvY2FsLWFsbG9jLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBEb24ndCBpbmNyZW1lbnQgbl9jYWxscworCXNwZWNpYWxseSBpZiBQIGlzIGEgY2FsbF9pbnNuLgorCisJKiBjb252ZXJ0LmMgKGNvbnZlcnRfdG9fcmVhbCk6IFBhc3MgbW9kZSBhcmcgdG8gUkVBTF9WQUxVRV9BVE9GLgorCitUdWUgTWFyIDMwIDE3OjA3OjMzIDE5OTMgIFN0ZXBoZW4gTC4gTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKyAKKwkqIHJlYWwuYzogVGhpcyBpcyBhIG5ldyBDIGZpbGUgdG8gaW1wbGVtZW50IGZsb2F0aW5nIHBvaW50CisJUkVBTF9BUklUSE1FVElDLCB0YXJnZXQgbWFjaGluZSBiaXQgcGF0dGVybnMgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLAorCWFuZCBSRUFMX1ZBTFVFX0FUT0YgZm9yIGRlY2ltYWwgaW5wdXQgY29uc3RhbnRzIGluIGxvbmcgZG91YmxlCisJWEZtb2RlIGFzIHdlbGwgYXMgbG93ZXIgcHJlY2lzaW9ucy4KKyAKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9UT19UQVJHRVRfTE9OR19ET1VCTEUsIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRSkKKwkoUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFKTogTmV3IG1hY3Jvcy4KKworCSogcmVhbC5oOiBJZiBSRUFMX0FSSVRITUVUSUMgaXMgZGVmaW5lZCBvciBpZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUKKwlpcyA5NiwgdGhlbiBkZWZpbmUgUkVBTF9WQUxVRV8gbWFjcm9zIHRvIGludm9rZSBmdW5jdGlvbnMgaW4gcmVhbC5jLgorCisJKiByZWFsLmggKFJFQUxfVkFMVUVfUk5EWklOVCwgUkVBTF9WQUxVRV9VTlNJR05FRF9STkRaSU5UKToKKwlOZXcgbWFjcm9zIHRydW5jYXRlIHRvd2FyZCB6ZXJvIHRvIGludGVnZXIgdmFsdWUgYnV0CisJcmV0dXJuIFJFQUxfVkFMVUVfVFlQRS4KKworCSogcmVhbC5oIChSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwpOiBOZXcgbWFjcm8gZGVmYXVsdHMgdG8KKwlmcHJpbnRmIGlmIG5vIFJFQUxfQVJJVEhNRVRJQywgb3RoZXJ3aXNlIHVzZXMgcmVhbC5jIGZvcgorCWJpbmFyeSB0byBkZWNpbWFsIGNvbnZlcnNpb24uICBVc2UgaW4gQVNNX09VVFBVVF8gbWFjcm9zLgorIAorCSogTWFrZWZpbGUuaW4gKHJlYWwubyk6IE5ldyB0YXJnZXQuCisJKE9CSlMpOiBBZGQgcmVhbC5vLgorIAorCSogYy1sZXguYyAoeXlsZXgpOiBDb252ZXJ0IHJlYWwgZGVjaW1hbCBjb25zdGFudHMgZGlyZWN0bHkKKwl0byB0aGUgcHJlY2lzaW9uIHNwZWNpZmllZCBieSB0aGUgbGV0dGVyIGF0IHRoZSBlbmQgb2YgdGhlIG51bWJlci4KKwlQYXNzIG1vZGUgYXJnIHRvIFJFQUxfVkFMVUVfQVRPRiB0byBzcGVjaWZ5IHByZWNpc2lvbi4KKwlNb3ZlIHRoZSAib3V0IG9mIHJhbmdlIG9mIGRvdWJsZSIgZXJyb3IgY2hlY2suCisKKwkqIGNwLWxleC5jICh5eWxleCk6IFJlZG8gY29udmVydGluZyBmbG9hdCB2YWx1ZXMgdG8gZGVzaXJlZCB0eXBlLgorCisJKiBmaW5hbC5jIChzcGxpdF9kb3VibGUpIDogIFVzZSBSRUFMX1ZBTFVFIG1hY3JvcyB0byBleHRyYWN0IGludHMKKwlmcm9tIGZsb2F0IG1vZGUgQ09OU1RfRE9VQkxFcy4KKyAKKwkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IFVzZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUKKwl0byBjb252ZXJ0IHRvIHRhcmdldCBmbG9hdC4KKwlJZiBSRUFMX0FSSVRITUVUSUMgaXMgZGVmaW5lZCwgbGV0IHJlYWwuYyBoYW5kbGUgaW5jb21wYXRpYmxlIGhvc3QKKwlhbmQgdGFyZ2V0IGZsb2F0aW5nIHBvaW50IGJpdCBwYXR0ZXJucy4KKwkoaW5pdF9lbWl0X29uY2UpOiBBZGQgbWFjaGluZV9tb2RlIGFyZ3VtZW50IHRvIFJFQUxfVkFMVUVfQVRPRi4KKyAKKwkqIGZvbGQtY29uc3QuYyAocmVhbF92YWx1ZV90cnVuY2F0ZSk6IElmIFJFQUxfQVJJVEhNRVRJQywgcmVwbGFjZQorCWJ5IHJvdXRpbmUgb2Ygc2FtZSBuYW1lIGluIHJlYWwuYy4KKwl0YXJnZXRfaXNpbmYsIHRhcmdldF9pc25hbiwgdGFyZ2V0X25lZ2F0aXZlKTogTGlrZXdpc2UuCisJKGNvbnN0X2Jpbm9wKTogRGVsZXRlIGByZWdpc3RlcicgZnJvbSBkZWNscyB1c2luZyBSRUFMX1ZBTFVFX1RZUEUuCisJKGZvbGRfY29udmVydCk6IFVzZSBSRUFMX1ZBTFVFX1RPX0lOVC4KKyAKKwkqIHJ0bC5jOiBJbmNsdWRlIHJlYWwuaCB0byBnZXQgdGhlIGRlZmluaXRpb24gb2YgUkVBTF9WQUxVRV9UWVBFLgorIAorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3JlYWwpOiBDYXNlIFRGbW9kZSBhbmQgWEZtb2RlIGludm9rZQorCUFTTV9PVVRQVVRfTE9OR19ET1VCTEUuCisgCisJKiBvcHRhYnMuYyAoZXhwYW5kX2ZpeCk6IEluaXRpYWxpemVkIFJFQUxfVkFMVUVfVFlQRQorCWNvbmZ1c2VzIHNvbWUgY29tcGlsZXJzLgorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbik6IHJlYWxfdmFsdWVfdHJ1bmNhdGUKKwlyZXR1cm5zIFJFQUxfVkFMVUVfVFlQRS4KKwlDb252ZXJ0IHJ0eF9jb2RlIGludG8gdHJlZV9jb2RlIGZvciBhcmd1bWVudCB0byBSRUFMX0FSSVRITUVUSUMuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBVc2UgbmV3IC4uLl9STkRaSU5UIG1hY3JvcworCWluc3RlYWQgb2YgY2FzdGluZyB2YWx1ZSBvZiBSRUFMX1ZBTFVFX0ZJWF9UUlVOQ0FURQorCWFuZCBSRUFMX1ZBTFVFX1VOU0lHTkVEX0ZJWF9UUlVOQ0FURS4KKworCSogZXhwbG93LmMgKHJ0eF90b190cmVlX2NvZGUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHJ0bC5oIChydHhfdG9fdHJlZV9jb2RlKTogRGVjbGFyZS4KKworCSogbTY4ay9tNjhrLmMgKHN0YW5kYXJkXzY4ODgxX2NvbnN0YW50X3ApOiBJbml0aWFsaXplIFJFQUxfVkFMVUVfVFlQRQorCWJpbmFyeSBjb25zdGFudHMgZnJvbSBkZWNpbWFsIHZhbHVlcy4gIFVzZSBSRUFMX1ZBTFVFXy4uLiBtYWNyb3MuCisJKHN0YW5kYXJkX3N1bl9mcGFfY29uc3RhbnRfcCk6IExpa2V3aXNlLgorCShwcmludF9vcGVyYW5kLCBmbG9hdGluZ19leGFjdF9sb2cyKTogVXNlIFJFQUxfVkFMVUVfLi4uIG1hY3Jvcy4KKwkoaW5pdF82ODg4MV90YWJsZSk6IE5ldyBmdW5jdGlvbi4KKworCSogbTY4ay9tNjhrLmggKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IFNldCB0byA5NiwgZm9yIFhGbW9kZSBzdXBwb3J0LgorCShBU01fT1VUUFVUX0xPTkdfRE9VQkxFX09QRVJBTkQpIE5ldyBtYWNyby4KKwkoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9ET1VCTEUpOiBVc2UgUkVBTF9WQUxVRV8uLi4gbWFjcm9zLgorCShBU01fT1VUUFVUX0RPVUJMRV9PUEVSQU5EKTogTGlrZXdpc2UuCisJKEFTTV9PVVRQVVRfRkxPQVRfT1BFUkFORCk6IExpa2V3aXNlLiAgQWxzbywgbmV3IGFyZ3VtZW50IENPREUuCisJKEFTTV9PVVRQVVRfRkxPQVQpOiBEZWxldGUgc3BlY2lhbCBkZWYgZm9yIENST1NTX0NPTVBJTEUuCisJKEFTTV9PVVRQVVRfTE9OR19ET1VCTEUpOiBOZXcgbWFjcm8uCisJKFBSSU5UX09QRVJBTkRfRVhUUkFDVF9GTE9BVCk6IERlZmluaXRpb25zIGRlbGV0ZWQuCisJKFBSSU5UX09QRVJBTkRfUFJJTlRfRkxPQVQpOiBEZWZpbml0aW9ucyBkZWxldGVkLgorCisJKiBtNjhrL202OGsubWQgKG1vdnhmLCB0c3R4ZiwgZXh0ZW5kc2Z4ZjIsIGV4dGVuZGRmeGYyKTogTmV3IHBhdHRlcm5zLgorCSh0cnVuY3hmZGYyLCB0cnVuY3hmc2YyLCBmbG9hdHNpeGYyLCBmbG9hdGhpeGYyLCBmbG9hdHFpeGYyKTogTGlrZXdpc2UuCisJKGZ0cnVuY3hmMiwgZml4eGZxaTIsIGZpeHhmaGkyLCBmaXh4ZnNpMik6IExpa2V3aXNlLgorCShhZGR4ZjMsIHN1YnhmMywgbXVseGYzLCBkaXZ4ZjMsIG5lZ3hmMiwgYWJzeGYyLCBzcXJ0eGYyKTogTGlrZXdpc2UuCisKKwkqIG02OGsvc3VuMy5oIChGVU5DVElPTl9WQUxVRSk6IFVzZSBGVU5DVElPTl9WQUxVRVguCisJKEZVTkNUSU9OX1ZBTFVFWCk6IE5ldyBtYWNyby4KKwkqIG02OGsvbW90MzMwMC5oLCBtNjhrL25ld3MuaCAoTElCQ0FMTF9WQUxVRSk6IEhhbmRsZSBYRm1vZGUuCisgCisJKiBtNjhrL21vdDMzMDAuaCwgbTY4ay90b3dlci1hcy5oOgorCShBU01fT1VUUFVUX0ZMT0FULCBBU01fT1VUUFVUX0RPVUJMRSk6IFVzZSBSRUFMX1ZBTFVFLi4uIG1hY3Jvcy4KKwkoUFJJTlRfT1BFUkFORCk6IExpa2V3aXNlLgorCShBU01fT1VUUFVUX0xPTkdfRE9VQkxFKTogTmV3IGRlZmluaXRpb24uCisJKiBtNjhrL25ld3MuaCAoUFJJTlRfT1BFUkFORCwgQVNNX09VVFBVVF9ET1VCTEUpOgorCVVzZSBSRUFMX1ZBTFVFLi4uIG1hY3Jvcy4KKwkqIG02OGsvbmV4dC5oLCBtNjhrL3N1bjJvNC5oLCBtNjhrL3N1bjMuaCwgbTY4ay9hbHRvczMwNjguaDoKKwkoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9ET1VCTEUpCisJKEFTTV9PVVRQVVRfRkxPQVRfT1BFUkFORCwgQVNNX09VVFBVVF9ET1VCTEVfT1BFUkFORCk6CisJVXNlIFJFQUxfVkFMVUUuLi4gbWFjcm9zLgorCSogbTY4ay9zZ3MuaCAoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9ET1VCTEUpCisJKEFTTV9PVVRQVVRfRE9VQkxFX09QRVJBTkQpOiBVc2UgUkVBTF9WQUxVRS4uLiBtYWNyb3MuCisJKEFTTV9PVVRQVVRfTE9OR19ET1VCTEUpOiBOZXcgZGVmaW5pdGlvbi4KKwkoQVNNX09VVFBVVF9GTE9BVF9PUEVSQU5EKTogTmV3IG1hY3JvLgorCShQUklOVF9PUEVSQU5EX1BSSU5UX0ZMT0FUKTogRGVsZXRlZC4KKworCSogbTY4ay8zYjEuaCAoQVNNX09VVFBVVF9ET1VCTEUsIEFTTV9PVVRQVVRfRkxPQVQpOgorCVVzZSBuZXcgUkVBTF9WQUxVRS4uLiBtYWNyb3MuCisJKEFTTV9PVVRQVVRfTE9OR19ET1VCTEUpOiBOZXcgZGVmaW5pdGlvbi4KKworCSogbTY4ay9ocDMyMC5oIChBU01fT1VUUFVUX0RPVUJMRSwgQVNNX09VVFBVVF9GTE9BVCkKKwkoUFJJTlRfT1BFUkFORF9GTE9BVCwgUFJJTlRfT1BFUkFORCk6IFVzZSBuZXcgUkVBTF9WQUxVRS4uLiBtYWNyb3MuCisJKEFTTV9PVVRQVVRfTE9OR19ET1VCTEUpOiBOZXcgbWFjcm8uCisKKwkqIG02OGsvY3Jkcy5oIChBU01fT1VUUFVUX0RPVUJMRSwgUFJJTlRfT1BFUkFORCk6CisJVXNlIG5ldyBSRUFMX1ZBTFVFLi4uIG1hY3Jvcy4KKworCSogdmF4LmggKFBSSU5UX09QRVJBTkQsIEFTTV9PVVRQVVRfRkxPQVQsIEFTTV9PVVRQVVRfRE9VQkxFKToKKwlVc2UgbmV3IFJFQUxfVkFMVUUuLi4gbWFjcm9zLgorCShDSEVDS19GTE9BVF9WQUxVRSk6IENhbGwgY2hlY2tfZmxvYXRfdmFsdWUuCisJKiB2YXguYyAoY2hlY2tfZmxvYXRfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHZheHYuaCAoQVNNX09VVFBVVF9ET1VCTEUpOiBVc2UgbmV3IFJFQUxfVkFMVUUuLi4gbWFjcm9zLiAKKworCSogYWxwaGEuaCAoQVNNX09VVFBVVF9GTE9BVCwgQVNNX09VVFBVVF9ET1VCTEUpOgorCVVzZSBuZXcgUkVBTF9WQUxVRS4uLiBtYWNyb3MuCisJKFJFQUxfQVJJVEhNRVRJQyk6IERlZmluZWQuCisKK1R1ZSBNYXIgMzAgMTc6MDc6MzMgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJRm9yIFRlZ2U6ICAgIAorCSogcGEubWQgKHNtaW5zaTMsIHNtYXhzaTMpOiBGaXggYnVncyBpbiBsYXN0IGFkZGl0aW9uLgorCitUdWUgTWFyIDMwIDE2OjUyOjE1IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgTWVpc3NuZXIgdmVyc2lvbiB0byAzNy4KKwkoQ0xBU1NfTUFYX05SRUdTKTogTWFrZSBmbG9hdHMgaW4gZ3AgcmVnaXN0ZXJzIG9ubHkgdXNlIG9uZQorCXJlZ2lzdGVyLCBhbmQgb25seSBhbGxvY2F0ZSBvbmUgZmxvYXQgcmVnaXN0ZXIgaW5zdGVhZCBvZiBhCisJcmVnaXN0ZXIgcGFpciBpZiAtbWZsb2F0NjQgaXMgdXNlZC4KKworVHVlIE1hciAzMCAwNTo0MDoyNiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVncyk6IFJlY29yZCBkZWF0aCBvZiBhbGwKKwloYXJkIHJlZ3Mgd2hlbiBhIG11bHRpLXJlZyBvYmplY3QgaW4gaGFyZCByZWdzIGRpZXMuCisJKG1vdmVfZGVhdGhzKTogSGFuZGxlIHRoZSBjYXNlIHdoZW4gd2Ugb25seSBoYXZlIHRvIG1vdmUKKwlwYXJ0IG9mIGEgbXVsdGktcmVnaXN0ZXIgZGVhdGggbm90ZS4KKwkqIHJ0bGFuYWwuYyAoZmluZF9yZWdub19ub3RlKTogRmluZCBub3RlIHRoYXQgb3ZlcmxhcHMgUkVHTk8sCisJbm90IGp1c3Qgb25lIHRoYXQgbWVudGlvbnMgUkVHTk8gZXhwbGljaXRseS4KKworCSogcmVsb2FkLmMgKGZvcm1fc3VtKTogVXNlIG1vZGUgb2YgaW5wdXRzIHdoZW4gbWFraW5nIG5ldyBQTFVTLgorCisJKiBnZW5vcGluaXQuYzogTmV3IGZpbGUuCisJKiBleHByLmggKGV4dGVuZHRhYiwgZml4dGFiLCBmaXh0cnVuY3RhYiwgZmxvYXR0YWIsIG1vdnN0cl9vcHRhYik6CisJTmV3IGRlZmluaXRpb25zLgorCSogZXhwci5jIChtb3ZzdHJfb3B0YWIpOiBObyBsb25nZXIgc3RhdGljLgorCShpbml0X2V4cHJfb25jZSk6IERvbid0IGluaXRpYWxpemUgbW92c3RyX29wdGFiLgorCSogb3B0YWJzLmMgKGV4dGVuZHRhYiwgZml4dGFiLCBmaXh0cnVuY3RhYiwgZmxvYXR0YWIpOiBOb3Qgc3RhdGljLgorCShpbml0X2V4dGVuZHMsIGluaXRfZml4dGFiLCBpbml0X2Zsb2F0dGFiKTogRGVsZXRlZC4KKwkoaW5pdF9vcHRhYnMpOiBNb3ZlIGFjdGl2ZSBzdHVmZiBmcm9tIGFib3ZlIGZ1bmN0aW9ucyBpbi4KKwlEZWxldGUgZmlsbGluZyBvZiBvcHRhYnMuCisJQ2FsbCBpbml0X2FsbF9vcHRhYnMuCisJKiByZWxvYWQxLmMgKGluaXRfcmVsb2FkKTogRG9uJ3QgaW5pdGlhbGl6ZSBvcHRhYnMgaGVyZS4KKwkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGluc24tb3Bpbml0Lm8uCisJKGluc24tb3Bpbml0Lm8sIGluc24tb3Bpbml0LmMsIHN0YW1wLW9waW5pdCk6IE5ldyBydWxlcy4KKwkoZ2Vub3Bpbml0LCBnZW5vcGluaXQubyk6IExpa2V3aXNlLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogUHJvcGVybHkgdHJhY2sgd2hhdCB3YXMgcmVsb2FkZWQKKwlpbnRvIHdoYXQgcmVnaXN0ZXIgd2hlbiB3aGF0IHdlIHJlbG9hZGVkIHdhcyBhIGhhcmQgcmVnaXN0ZXIgZ3JvdXAuCisKK01vbiBNYXIgMjkgMTc6MzU6MDQgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAobW92c2krMik6IEFkZCBmL2YgY29uc3RyYWludCBjYXNlLgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IFJlc2V0IG5fcmVhZHkgaWYgc2NoZWR1bGVfc2VsZWN0CisJcmVtb3ZlcyBhbGwgaW5zbnMgZnJvbSByZWFkeSBsaXN0LgorCisJKiBpOTYwLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogQ2FsbCBvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIuCisJKENBTExfVVNFRF9SRUdJU1RFUlMpOiBBZGQgbW9yZSBjb21tZW50cyBhYm91dCByZWdpc3RlciB1c2FnZS4KKwkqIGk5NjAuYyAoaTk2MF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFdoZW4gcHJvZmlsaW5nLCBkb24ndCB1c2UgdGhvc2UKKwlyZWdpc3RlcnMgY2xvYmJlcmVkIGFyb3VuZCBhbiBtY291bnQgY2FsbC4KKwkob3V0cHV0X2Z1bmN0aW9uX3Byb2ZpbGVyKTogTmV3IGZ1bmN0aW9uLgorCitNb24gTWFyIDI5IDEzOjU3OjI4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1pdGVyYXRlLmMgKGNvbGxlY3RfaXRlcmF0b3JzKTogQ2FzdCB0cmVlIGNvZGUgdG8gaW50IGZvciBpbmRleGluZy4KKworTW9uIE1hciAyOSAwNjoyODo1NyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKG51bV9zaWduX2JpdF9jb3BpZXMsIGNhc2UgUExVUywgY2FzZSBNVUxUKToKKwlSZXBsYWNlIG9jY3VycmVuY2VzIG9mIEhPU1RfQklUU19QRVJfSU5UIHdpdGggSE9TVF9CSVRTX1BFUl9XSURFX0lOVC4KKworCSogcmVsb2FkLmMgKHNlY29uZGFyeV9tZW1sb2NzX2VsaW0pOiBOb3cgb25lIHBlciBtb2RlIHBlciBvcGVyYW5kLgorCShnZXRfc2Vjb25kYXJ5X21lbSwgY29tYmluZV9yZWxvYWRzKTogUmVmbGVjdCBjaGFuZ2VkIHZhciBhYm92ZS4KKwkoY2xlYXJfc2Vjb25kYXJ5X21lbSk6IFVzZSBiemVyby4KKworCSogZ2VucmVjb2cuYzogQWRkIHByb3RvdHlwZXMgZm9yIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBmaWxlLgorCUNoYW5nZSBhIGZldyBvY2N1cnJlbmNlcyBvZiBSVFhfQ09ERSB0byBlbnVtIHJ0eF9jb2RlIGZvciBjb25zaXN0ZW5jeS4KKwkobWVyZ2VfdHJlZXMpOiBBZGQgY2FzdHMgb2YgYXJncyB0byBteWJjb3B5LgorCSh3cml0ZV90cmVlXzEpOiBOb3cgc3RhdGljLgorCShmYXRhbCk6IEFsd2F5cyBjYWxsZWQgd2l0aCBvbmUgYXJnLCBzbyBkZWZpbmUgdGhhdCB3YXkuCisKKwkqIHJlbG9hZC5oOiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbnMgZm9yIGV4dGVybmFsIGZ1bmN0aW9ucworCWluIHJlbG9hZC5jLCByZWxvYWQxLmMsIGFuZCBjYWxsZXItc2F2ZS5jLgorCShyZWxvYWRfc3RyaWN0X2xvdywgcmVsb2FkX25lZWRlZF9mb3JfbXVsdGlwbGUsIHJlbG9hZF9uZWVkZWRfZm9yKToKKwlEZWxldGVkLgorCShyZWxvYWRfb3BudW0pOiBOZXcgYXJyYXkuCisJKGVudW0gcmVsb2FkX3R5cGUpOiBSZW5hbWVkIGZyb20gcmVsb2FkX3doZW5fbmVlZGVkIGFuZCBleHBhbmRlZAorCXRvIGluY2x1ZGUgbW9yZSByZWxvYWQgdHlwZXMuCisJKHJlbG9hZF9uX29wZXJhbmRzKTogTmV3IHZhcmlhYmxlLgorCSogcmVsb2FkLmM6IEFkZCBwcm90b3R5cGVzIGZvciBhbGwgc3RhdGljIGZ1bmN0aW9ucyBhbmQgY2xlYW4gdXAKKwlzb21lIGRlZmluaXRpb25zLgorCShzdHJ1Y3QgZGVjb21wb3NlKTogTW92ZSB0byBiZWZvcmUgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorCShzZWNvbmRhcnlfbWVtbG9jc19lbGltKTogT25lIHBlciBvcGVyYW5kLCBub3QgcGVyIG1vZGUuCisJKGdldF9zZWNvbmRhcnlfbWVtKTogQWNjZXB0IGFuZCB1c2UgcmVsb2FkIGRlc2NyaXB0aW9uIChvcG51bQorCWFuZCB0eXBlKS4KKwkocHVzaF9yZWxvYWQpOiBBY2NlcHQgYW5kIHVzZSBuZXcgcmVsb2FkIGRlc2NyaXB0aW9uIGluc3RlYWQgb2YKKwlvbGQgTkVFREVEX0ZPUi4KKwlEZWZpbmUgdHdvIG5ldyBtYWNyb3M6IE1FUkdFQUJMRV9SRUxPQURTIGFuZCBNRVJHRV9UT19PVEhFUi4KKwlVc2UgdGhlc2UgbWFjcm9zIHRvIHNlZSBpZiByZWxvYWRzIGNhbiBiZSBtZXJnZWQgYW5kIGhvdyB0byBkbyBpdC4KKwkodHJhbnNmZXJfcmVwbGFjZW1lbnRzKTogTmV3IGZ1bmN0aW9uLgorCShjb21iaW5lX3JlbG9hZHMpOiBSZWZpbmUgd2hlbiB3ZSBjYW4gY29tYmluZSByZWxvYWRzLgorCShmaW5kX3JlbG9hZHMpOiBVc2UgbmV3IG1ldGhvZCBvZiB0cmFja2luZyB3aGF0IGEgcmVsb2FkIGlzIGZvci4KKwlXaGVuIHdlIG1ha2UgYSBDTE9CQkVSIGluc24sIGRvIHNvIHdpdGggREltb2RlLgorCU1lcmdlIGNhc2VzIG9mIG1ha2luZyBvcHRpb25hbCByZWxvYWRzLCBhdm9pZCBtYWtpbmcgb3V0cHV0LW9ubHkKKwlvcHRpb25hbCByZWxvYWRzLCByZWZpbmUgd2hlbiB3ZSBtYXkgbm90IG1ha2UgaW4tb3V0IG9wdGlvbmFsIHJlbG9hZHMsCisJYW5kIG1ha2UgYW4gb3B0aW9uYWwgcmVsb2FkIGZvciBhIHBhaXIgb2YgbWF0Y2hpbmcgb3BlcmFuZHMuCisJKGZpbmRfcmVsb2Fkc190b3BsZXYsIGZpbmRfcmVsb2Fkc19hZGRyZXNzeyxfMSwgcGFydH0pOiBBY2NlcHQgYW5kCisJdXNlIHJlbG9hZCBkZXNjcmlwdGlvbi4KKwkoZm9yZ2V0X3ZvbGF0aWxpdHkpOiBEZWxldGUgbG9uZy1vYnNvbGV0ZSBmdW5jdGlvbi4KKwkqIHJlbG9hZDEuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKFJFR0lTVEVSX01PVkVfQ09TVCwgTUVNT1JZX01PVkVfQ09TVCk6IEluY2x1ZGUgZGVmYXVsdCBkZWZpbml0aW9ucy4KKwkocmVsb2FkKTogQ291bnQgbnVtYmVyIG9mIHJlZ2lzdGVycyBuZWVkZWQgZm9yIGluc24gdXNpbmcgbmV3CisJcmVsb2FkIHR5cGUgaW5mb3JtYXRpb24uCisJSWYgbW9kZSBvZiBpbnNuIGlzIERJbW9kZSwgZG9uJ3QgY2hhbmdlIGl0LgorCVJlZmluZSB0aGUgd2F5IHdlIGhhbmRsZSBjb25mbGljdCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgcmVnaXN0ZXIuCisJRG9uJ3QgdHJ5IHRvIGFjY291bnQgZm9yIG5lZWRzIGFscmVhZHkgY292ZXJlZCBieSBwcmV2aW91c2x5CisJc3BpbGxlZCByZWdpc3RlcnM7IGluc3RlYWQsIHB1dCB0aGVtIGJhY2sgaW4gdGhlIGZyb250IG9mCisJcG90ZW50aWFsX3JlbG9hZF9yZWdzIGFuZCBsZXQgdGhlbSBiZSBhbGxvY2F0ZWQgYWdhaW4uCisJKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IERvbid0IHJlc3RyaWN0IHJlZ3MgZXhwbGljaXRseSB1c2VkIGlmCisJd2UgaGF2ZSBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIGRlZmluZWQuCisJKHJlbG9hZF9hc19uZWVkZWQpOiBEb24ndCBuZWVkIHRvIGRlYWN0aXZhdGUgb3B0aW9uYWwgcmVsb2FkcworCWV2ZXI7IGlmIHRoZXkgaW5oZXJpdCwgaXQgbXVzdCBoYXZlIGJlZW4gc2FmZS4KKwlDYWxsIG1lcmdlX2Fzc2lnbmVkX3JlbG9hZHMgaWYgU01BTExfUkVHSVNURVJfQ0xBU1NFUy4KKwkocmVsb2FkX3JlZ191c2VkXyopOiBSZWZpbmUgb3VyIHRyYWNraW5nIG9mIHJlbG9hZCByZWcgdXNhZ2UKKwlieSBkZWZpbmluZyBtb3JlIG9mIHRoZXNlIEhBUkRfUkVHX1NFVHMuCisJKG1hcmtfcmVsb2FkX3JlZ19pbl91c2UsIHJlbG9hZF9yZWdfZnJlZV9wKTogUmV3b3JrIHRvIHVzZSBuZXcKKwltZXRob2Qgb2YgZGVzY3JpYmluZyB3aGVyZSBhIHJlbG9hZCByZWdpc3RlciBpcyB1c2VkLgorCShyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3AsIHJlbG9hZF9yZWdfcmVhY2hlc19lbmRfcCk6IExpa2V3aXNlLgorCShhbGxvY2F0ZV9yZWxvYWRfcmVnKTogUGFzcyBuZXcgcmVsb2FkIGRlc2NyaXB0aW9ucy4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogTGlrZXdpc2UuCisJU2F2ZSBhbmQgcmVzdG9yZSB0aGUgbmV3IEhBUkRfUkVHX1NFVHMuCisJUmVtb3ZlIG5vdy1yZWR1bmRhbnQgY29kZSB0byBwcmV2ZW50IGNvbmZsaWN0cy4KKwkobWVyZ2VfYXNzaWduZWRfcmVsb2Fkcyk6IE5ldyBmdW5jdGlvbi4KKwkoZW1pdF9yZWxvYWRfaW5zbnMpOiBPdXRwdXQgZWFjaCByZWxvYWQgdHlwZSBpbnRvIGl0cyBvd24gCisJc2VxdWVuY2UsIHRoZW4gb3V0cHV0IHRoZSBzZXF1ZW5jZXMgaW4gdGhlIHByb3BlciBvcmRlci4KKwlQdXQgb3VyIG91dHB1dCByZWxvYWRzIGFmdGVyIGEgQ0xPQkJFUiBtYWRlIGJ5IGZpbmRfcmVsb2Fkcy4KKwlQYXNzIEFMTF9SRUdTIHRvIGZpbmRfZXF1aXZfcmVnczsgbm90aGluZyBzcGVjaWFsIGFib3V0CisJR0VORVJBTF9SRUdTLgorCURvbid0IHVzZSBhbiBvbGQgZXF1aXZhbGVuY2UgaWYgZG9pbmcgc28gd291bGQgYmUgbW9yZSBleHBlbnNpdmUuCisJQ2xlYW4gdXAgdHJhY2tpbmcgb2YgdmFsdWVzIHN0aWxsIGluIHJlbG9hZCByZWdzIHVzaW5nIHJlbG9hZAorCWRlc2NyaXB0aW9uIGluZm8gdG8gc2VlIGlmIHRoZSByZWxvYWQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBpbnNuLgorCShnZW5faW5wdXRfcmVsb2FkKTogUGFzcyByZWxvYWQgZGVzY3JpcHRpb24gYW5kIGVtaXQgaW5zbnMgdG8gZW5kIG9mCisJY3VycmVudCBzZXF1ZW5jZS4KKwkoaW5jX2Zvcl9yZWxvYWQpOiBSZXR1cm4gdm9pZDsgbm8gbG9uZ2VyIG5lZWQgSU5TTiBhcyBvcGVyYW5kLgorCUVtaXQgaW5zbnMgdG8gZW5kIG9mIGN1cnJlbnQgc2VxdWVuY2UuCisKK01vbiBNYXIgMjkgMDI6NTk6MjcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIE1BWF9FWFBSL01JTl9FWFBSKTogSWYgbW9kZSBpcworCW11bHRpd29yZCBpbnQsIHVzZSBkb19qdW1wX2J5X3BhcnRzX2dyZWF0ZXJfcnR4IHRvIGNvbXBhcmUgZWZmaWNpZW50bHkuCisJKGRvX2p1bXBfYnlfcGFydHNfZ3JlYXRlcl9ydHgpOiBOZXcgZnVuY3Rpb24uCisKK1N1biBNYXIgMjggMjA6MjY6MTEgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBBbHdheXMgYWxsb2NhdGUgVEFSR0VUIGluIG1vZGUgb2YKKwlyZXN1bHQgZXhwcmVzc2lvbjsgVkFMUkVHIG1pZ2h0IGhhdmUgYmVlbiBwcm9tb3RlZC4KKwlFbnN1cmUgVEFSR0VUIGlzIGEgUkVHIHdoZW4gY2hlY2tpbmcgZm9yIHByb21vdGlvbiBhbmQgdmVyaWZ5CisJdGhhdCB3ZSBnZXQgYmFjayB0aGUgbW9kZSB3ZSBleHBlY3QuCisKK1N1biBNYXIgMjggMTg6NDk6MTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IFVzZSBwZWR3YXJuIGZvciAicHJvbW90ZWQgYXJnIGRvZXNuJ3QKKwltYXRjaCBwcm90b3R5cGUiIHdhcm5pbmcuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBGb3IgQ09NUE9ORU5UX1JFRiwgZG9uJ3QgZm9yY2VfcmVnIG9wMAorCWlmIGl0IGlzIEJMS21vZGUuCisKK1N1biBNYXIgMjggMTY6MjU6NTkgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoc21pbiwgdW1pbiwgc21heCwgdW1heCk6IE5ldyBwYXR0ZXJucy4KKworCSogU3VwcG9ydCBudWxsaWZpY2F0aW9uIG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBkZWxheSBzbG90cyBvbgorCXRoZSBQQS4KKworCSogcGEubWQgKGNicmFuY2ggZGVmaW5lX2RlbGF5KTogRW5hYmxlIG51bGxpZmljYXRpb24gb2YKKwljb25kaXRpb25hbCBicmFuY2ggZGVsYXkgc2xvdHMgKGJhc2VkIHVwb24gYnJhbmNoIGRpcmVjdGlvbikuCisJKGNvbmRpdGlvbmFsIGJyYW5jaCBwYXR0ZXJucyk6IENhbGwgb3V0cHV0X2NicmFuY2ggdG8gZ2V0IHRoZQorCWNvcnJlY3Qgb3V0cHV0IHRlbXBsYXRlLiAgTG9uZyBjb25kaXRpb25hbCBicmFuY2hlcyB3aXRoIGFuCisJYW5udWxsZWQgZGVsYXkgc2xvdCBoYXZlIGEgbGVuZ3RoIG9mIDMuCisJKGJyYW5jaCBvbiBiaXQgcGF0dGVybnMpOiBDYWxsIG91dHB1dF9iYiB0byBnZXQgdGhlIGNvcnJlY3QKKwlvdXRwdXQgdGVtcGxhdGUuICBMb25nIGJyYW5jaGVzIHdpdGggYW4gYW5udWxsZWQgZGVsYXkgc2xvdCBoYXZlCisJYSBsZW5ndGggb2YgMy4KKwkoZGVjcmVtZW50IGFuZCBicmFuY2ggcGF0dGVybik6IEhhbmRsZSBudWxsaWZpY2F0aW9uIG9mIGxvbmcKKwliYWNrd2FyZCBicmFuY2hlcy4gIFN1Y2ggYnJhbmNoZXMgaGF2ZSBsZW5ndGhzIG9mIGVpdGhlciAzIG9yIDYuCisKKwkqIHBhLmMgKG91dHB1dF9jYnJhbmNoKTogTmV3IGZ1bmN0aW9uLiAgR2l2ZW4gdGhlIG9wZXJhbmRzIG9mIHRoZQorCWJyYW5jaCwgcG9zc2libGUgbnVsbGlmaWNhdGlvbiwgbGVuZ3RoIG9mIHRoZSBicmFuY2gsIHBvc3NpYmxlIGJyYW5jaCAKKwluZWdhdGlvbiwgYW5kIHRoZSBicmFuY2ggaW5zbiBpdHNlbGYsIHJldHVybiB0aGUgb3V0cHV0IHRlbXBsYXRlIGZvciAKKwl0aGUgZGVzaXJlZCBjb25kaXRpb25hbCBicmFuY2guCisJKG91dHB1dF9iYik6IExpa2V3aXNlLCBidXQgZm9yIGJyYW5jaCBvbiBiaXQuCisKKwkqIHBhLmggKHRvcGxldmVsKTogRGVjbGFyZSBvdXRwdXRfYmIuCisKKwkqIGdlbmF0dHIuYyAobWFpbik6IE91dHB1dCBBVFRSX0ZMQUcgbWFza3MuCisKKwkqIHJ0bC5kZWYgKEFUVFJfRkxBRyk6IE5ldyBSVEwgY29kZS4KKworCSogZ2VuYXR0cnRhYi5jICh3cml0ZV9lbGlnaWJsZV9kZWxheSk6IEFkZCBuZXcgdmFyaWFibGUKKwkiZmxhZ3MiIHRvIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkoY2hlY2tfYXR0cl90ZXN0KTogSGFuZGxlIEFUVFJfRkxBRy4KKwkoY2xlYXJfc3RydWN0X2ZsYWcpOiBMaWtld2lzZS4KKwkoY291bnRfc3ViX3J0eHMpOiBMaWtld2lzZS4KKwkod3JpdGVfdGVzdF9leHByKTogTGlrZXdpc2UuCisJCisJKiByZW9yZy5jIChBTk5VTF9JRlRSVUVfU0xPVFMsIEFOTlVMX0lGRkFMU0VfU0xPVFMpOiBBZGQgbmV3CisJZmxhZ3MgdmFyaWFibGUgdG8gdGhlc2UgZHVtbXkgbWFjcm9zLgorCShnZXRfanVtcF9mbGFncyk6IE5ldyBmdW5jdGlvbi4KKwkob3B0aW1pemVfc2tpcCk6IEdldCBqdW1wIGZsYWdzIGluZm9ybWF0aW9uIGZyb20gdGhlIGRlbGF5IGluc24uCisJKHN0ZWFsX2RlbGF5X2xpc3RfZnJvbV90YXJnZXQpOiBHZXQganVtcCBmbGFncyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorCWRlbGF5IGluc24gYW5kIHRoZSBsYWJlbCBvZiB0aGUgdHJpYWwganVtcC4KKwkoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX2ZhbGx0aHJvdWdoKTogR2V0IGp1bXAgZmxhZ3MgaW5mb3JtYXRpb24KKwlmcm9tIHRoZSBkZWxheSBpbnNuLgorCSh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBMaWtld2lzZS4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBMaWtld2lzZS4KKwkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgorCShtYWtlX3JldHVybl9pbnNuKTogTGlrZXdpc2UuCisKK1N1biBNYXIgMjggMDA6MzY6MDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogTW92ZSBjb21tZW50cyBhYm91dCBiaWcgc2VkIGNvbW1hbmQgb3V0c2lkZSB0aGUKKwljb21tYW5kIGl0c2VsZi4KKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCAtV3tuby0sfW1pc3NpbmctYnJhY2VzLgorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IsIGRpZ2VzdF9pbml0KToKKwlDaGVjayBhbmQgc2V0IG5ldyBzdGF0aWMgdmFyIHBhcnRpYWxfYnJhY2tldF9tZW50aW9uZWQuCisKKwkqIGMtbGV4LmM6IFVwZGF0ZWQgZm9yIHJlY2VudCBjaGFuZ2UgaW4gYy1wYXJzZS5ncGVyZi4KKworU2F0IE1hciAyNyAxMzo0MzoyNyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIFRyYW1wb2xpbmUgc3VwcG9ydCBmcm9tIEp1a2thIFZpcnRhbmVuLgorCSogcGEubWQgKGNhY2hlZmx1c2gpOiBOZXcgcGF0dGVybi4gIAorCSogcGEuaCAoVFJBTVBPTElORV9URU1QTEFURSk6IERlZmluZSBmb3IgdGhlIFBBLgorCShUUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIHRoZSBQQS4KKwkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRGVmaW5lIGZvciB0aGUgUEEuCisKK1NhdCBNYXIgMjcgMDg6MjI6MjUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogV2hlbiBldmFsdWF0aW5nIHNpemVzIG9mCisJdmFyaWFibGUgdHlwZXMsIGRvIHNvIGp1c3QgZm9yIHNpZGUtZWZmZWN0cyAodGhlIFNBVkVfRVhQUnMpLgorCSogc3Rvci1sYXlvdXQuYyAodmFyaWFibGVfc2l6ZSk6IExpa2V3aXNlLgorCisJKiB2YS1hbHBoYS5oOiBNYWpvciByZXdvcmsgdG8gYWdyZWUgd2l0aCBuZXcgY2FsbGluZyBzZXF1ZW5jZS4KKwlTaG91bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCB3aXRoIEZlYiAxMHRoIGNoYW5nZXMuCisKKwkqIHJzNjAwMC5tZCAobW92W3Foc11pKTogQWxsb3cgbW92aW5nIGEgc3BlY2lhbCByZWcgdG8gaXRzZWxmLgorCitTYXQgTWFyIDI3IDAzOjEzOjQ2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKFNfTU9ERVMsIERfTU9ERVMsIFRfTU9ERVMpOgorCUFjY2VwdCBvbmx5IHRob3NlIGNvbXBsZXggbW9kZXMgdGhhdCBhcmUgc21hbGwgZW5vdWdoLgorCVJld3JpdGUgdG8gbWFrZSB0aGUgZXhwcmVzc2lvbnMgc2ltcGxlci4KKworRnJpIE1hciAyNiAxNzowNzozMSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXRyZWUuaCwgb3V0cHV0Lmg6IFVzZSBTVERJT19QUk9UTyBmb3IgcHJvdG90eXBlcyB3aXRoIEZJTEUuCisKKwkqIGlucHV0Lmg6IEFkZCBzdGFuZGFyZCBjb3B5cmlnaHQgbm90aWNlLgorCisJKiBjYWxsZXItc2F2ZS5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkoY2hvb3NlX2hhcmRfcmVnX21vZGUpOiBBZGQgbWlzc2luZyBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uLgorCisJKiBhMjlrLm1kIChtdWx0aXBseS9tdWx0aXBsdS9tdWxtL211bG11IGluc25zKTogVGhlc2UgY2xvYmJlciBRLgorCitGcmkgTWFyIDI2IDA2OjIzOjMxIDE5OTMgIFRvbSBXb29kICAod29vZEBuZXh0LmNvbSkKKworCSogaTk2MC5oIChGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogQ2hhbmdlIHRvIGFncmVlIHdpdGgKKwlGVU5DVElPTl9WQUxVRS4KKwkqIHB5ci5oLCBzcHVyLmggKElOQ09NSU5HX1JFR05PLCBPVVRHT0lOR19SRUdOTyk6IERlZmluZS4KKwkqIGFybS5tZCAodW50eXBlZF9jYWxsLCBibG9ja2FnZSk6IE5ldyBwYXR0ZXJucy4KKworRnJpIE1hciAyNiAwMjowOTowMiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoc3BhcmMtdHRpLSosIG02OGstdHRpLSopOiBEb24ndCBzZXQgdXNlX2NvbGxlY3QyLgorCitGcmkgTWFyIDI2IDAxOjA1OjQzIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCUN5Z251czwtPkZTRiBtZXJnZS4KKworCVRodSBNYXIgMjUgMTg6MTk6MTkgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpLCBjcC1pbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6CisJRG9uJ3QgdHJ5IHRvIGRvIG1vcmUgdGhhbiBvbmUgbGV2ZWwgb2YgdXNlciBkZWZpbmVkIGNvbnZlcnNpb25zLAorCWF2b2lkcyBhbiBpbmZpbml0ZSBsb29wLiAgVXNlcyBMT09LVVBfTk9fQ09OVkVSU0lPTi4KKworCVdlZCBNYXIgMjQgMTY6Mjg6MTcgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogIEZpeCBoYW5kbGluZyBvZiBmb28tPn5DbGFzcygpLgorCisJU2F0IE1hciAyMCAxMjoyOTozNyAxOTkzICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jICh0c3Vic3QpOiBEb24ndCBnZXQgZmFrZWQgb3V0IGJ5IHRoZSBmYWN0IHRoYXQgY3RvcnMgYW5kCisJZHRvcnMgaGF2ZSB0aGUgc2FtZSBtZXRob2QgbmFtZSBhbmQgY2FuIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlLgorCisJRnJpIE1hciAxOSAxNTo1ODozNCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKHRzdWJzdCk6IENhbGwgYnVpbGRfZGVjbF9vdmVybG9hZCBmb3IgdGhlIG5ldworICAgICAgICBpbnN0YW50aWF0aW9uLgorCisJVGh1IE1hciAxOCAxOTowOTozOSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZmxhZ19pbXBsZW1lbnRfaW5saW5lcyk6IE5ldyB2YXJpYWJsZS4KKwkobGFuZ19mX29wdGlvbnMpOiBSZWNvZ25pemUgImltcGxlbWVudC1pbmxpbmVzIi4KKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBSZWNvZ25pemUgLWZbbm8tXWltcGxlbWVudC1pbmxpbmVzLgorCSogY3AtZGVjbC5jIChmbGFnX2ltcGxlbWVudF9pbmxpbmVzKTogRGVjbGFyZSBpdC4KKwkoc3RhcnRfZnVuY3Rpb24pOiBJZiBpdCdzIGNsZWFyLCBmdW5jdGlvbnMgZGVjbGFyZWQgaW5saW5lIGFyZQorCWV4dGVybmFsIHVuZGVyIGAjcHJhZ21hIGltcGxlbWVudGF0aW9uJy4KKworCVR1ZSBNYXIgIDIgMTY6MjQ6MzkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogSWYgb3BlcmFuZCAwIGlzIGEgVFJFRV9MSVNULCB0aGVuCisJbWFrZSBzdXJlIHRvIHVzZSBpdHMgdmFsdWUuCisKKwlNb24gTWFyICAxIDE0OjIyOjEyIDE5OTMgIEJpbGwgQ294ICAoYmlsbEBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChwdXNoX2xldmVsX2RlY2wpOiBBZGQgY2FzdCB0byBjb3JyZWN0IHB1c2hfc3RhY2tfbGV2ZWwKKyAgICAgICAgICBwYXJhbWV0ZXIuCisKKwlNb24gTWFyICAxIDEwOjE5OjM4IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBJbXByb3ZlIHdvcmRpbmcgb24gZXJyb3IgbWVzc2FnZS4KKworCVdlZCBGZWIgMjQgMTk6NTQ6NDYgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNvbW1vbnBhcm1zLCBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogTnVtYmVyCisJYXJndW1lbnRzIHN0YXJ0aW5nIGF0IDEgaW4gZXJyb3IgbWVzc2FnZXMgdG8gbWF0Y2ggdGhlIEMgZnJvbnQtZW5kLgorCisJV2VkIEZlYiAyNCAxNDo1NTo1NCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChzYXdfZmlyc3RfdmJhc2UpOiBEZWxldGVkLgorCWNwLXNlYXJjaC5jIChkZnNfd2Fsayk6IFdoZW4gd2Fsa2luZyB0aGUgY2xhc3MgbGF0dGljZSwgdXNlIHRoZSBsYXN0CisJdmlydHVhbCBiYXNlIGNsYXNzIHNlZW4sIG5vdCB0aGUgZmlyc3QuICBGaXhlcyBtYWpvciBwcm9ibGVtCisJaW50cm9kdWNlZCBvbiBUdWUgT2N0IDYgMTc6NTQ6MDkgMTk5MiB0aGF0IHByZXZlbnRzIG11bHRpLWxldmVsCisJdmlydHVhbCBiYXNlIGNsYXNzZXMgZnJvbSB3b3JraW5nLgorCisJTW9uIEZlYiAyMiAxODowNzoyMyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBXaGVuIHNlYXJjaGluZywgaWYgdGhlCisJb2JqZWN0IHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYXMgYmVmb3JlLCBidXQganVzdCBmb3VuZCBhbG9uZyBhCisJZGlmZmVyZW50IHBhdGgsIHRoZSBvYmplY3QgaXMgbm90IGFtYmlndW91cy4gIEZpeGVzIHByb2JsZW0KKwlpbnRyb2R1Y2VkIG9uIEZlYiAxNiAyMjo0NzoyOSAxOTkzLgorCisJV2VkIEZlYiAxNyAxNToxMjoxMiAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tfZnVuY3Rpb25faW5pdCk6IFB1cmUgdmlydHVhbCBkZXNjcnVjdG9yIG11c3QgYmUKKwlkZWZpbmVkLCBhbmQgY2FsbHMgdG8gdGhlbSBnZW5lcmF0ZWQuICBOb3cgY29uZm9ybXMgd2l0aCBBTlNJIEMrKworCXdvcmtpbmcgcGFwZXIgZGF0ZWQgU2VwdGVtYmVyIDE3LCAxOTkyIDEyLjQuNS4KKworCVR1ZSBGZWIgMTYgMjI6NDc6MjkgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJSW1wbGVtZW50IGEgbmV3IHNlYXJjaGluZyBzY2hlbWUgZm9yIGJhc2UgY2xhc3NlcyBhbmQgdXNlIGl0IHRvCisJZW5zdXJlIG9ubHkgcmVsYXRlZCB2aXJ0dWFsIGZ1bmN0aW9uIHNsb3RzIGFyZSBmaWxsZWQgaW4gYnkKKwltb2RpZnlfdnRhYmxlX2VudHJpZXMuICBBZmZlY3RzIGdldF9iYXNlX2Rpc3RhbmNlIGFuZCBnZXRfYmluZm8KKwlhbnN3ZXJzLiAgQ3VyZXMgSW50ZXJWaWV3cyBkb2MgcHJvYmxlbS4gIFNvbHZlcyB0aGUgcHJvYmxlbSBvZgorCWNhbGxpbmcgdGhlIHdyb25nIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIHByZXNlbmNlIG9mIG11bHRpcGxlCisJaW5oZXJpdGFuY2UuCisKKwkqIGNwLXNlYXJjaC5jIChnZXRfYmluZm9fcmVjdXJzaXZlLCBnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOgorCU5ldyByb3V0aW5lcyB0aGF0IHVzZSBhIGRlcHRoIGZpcnN0IHNlYXJjaCBzdHJhdGVneSBpbnN0ZWFkIG9mCisJYnJlYWR0aCBmaXJzdC4KKwkqIGNwLXNlYXJjaC5jIChnZXRfYmluZm8pOiBSZS1pbXBsZW1lbnQsIGFuZCB1c2UKKwlnZXRfYmluZm9fcmVjdXJzaXZlLgorCSogY3Atc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlKTogUmUtaW1wbGVtZW50LCBhbmQgdXNlCisJZ2V0X2Jhc2VfZGlzdGFuY2VfcmVjdXJzaXZlLgorCisJKiBjcC1jbGFzcy5jIChyZWxhdGVkX3ZzbG90KTogTmV3IHJvdXRpbmUgdG8gZW5zdXJlIHRoYXQgb25seQorCXZmaWVsZHMgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gYmFzZV9mbmRlY2wgYXJlIG1vZGlmaWVkLgorCVJlbGllcyB1cG9uIG5ldyBzZWFyY2hpbmcgc2NoZW1lIGZvciBiYXNlIGNsYXNzZXMuCisJKiBjcC1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJpZXMpOiBVc2UgcmVsYXRlZF92c2xvdCB0byBlbnN1cmUKKwl0aGF0IG9ubHkgc2xvdHMgcmVsYXRlZCB0byB0aGUgYmFzZSB2aXJ0dWFsIGZ1bmN0aW9uIGFyZSBmaWxsZWQgaW4uCisKKwkqIGNwLWNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSwgcHJlcGFyZV9mcmVzaF92dGFibGUsIGZpbmlzaF9zdHJ1Y3QpLAorCWNwLXRyZWUuaDogUmVtb3ZlIERFQ0xfVlBBUkVOVC4KKworCSogY3AtY2xhc3MuYyAoZ2V0X3Z0YWJsZV9lbnRyeSk6IFVzZSB1bnNpZ25lZCB3aGVuIGRlYWxpbmcgd2l0aAorCURFQ0xfVklOREVYZXMuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogVXNlIGdldF92dGFibGVfZW50cnkgaW5zdGVhZCBvZiBvcGVuCisJY29kaW5nIHRoYXQgcm91dGluZSBoZXJlLgorCisJRnJpIEZlYiAxMiAxMDoyNDo1MiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHNpZ3NlZ3YpOiBDaGVjayBpZiBTSUdJT1QgaXMgZGVmaW5lZCBmaXJzdC4gIEFsc28gY2hlY2sKKwlmb3IgU0lHSUxMIGFuZCBTSUdBQlJULgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IExpa2V3aXNlOyBzZXQgdXAgaGFuZGxlcnMgZm9yIFNJR0lMTCBhbmQKKwlTSUdBQlJULgorCisJVGh1IEZlYiAxMSAxMDozMDo1OSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGUyLmMgKHJlYWRvbmx5X2Vycm9yKTogTmV3IGFyZyBgU09GVCcsIHRvIHBlZHdhcm4gaW5zdGVhZCBvZgorCWVycm9yLgorCSogY3AtdHlwZWNrLmMsIGNwLWN2dC5jLCBjcC10cmVlLmg6IE1vZGlmeSBjYWxsZXJzIGFwcHJvcHJpYXRlbHkuCisKKwlUdWUgRmViICA5IDEwOjAyOjU4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKHJlYWxfeXlsZXgpOiBXaGVuIHBhcnNpbmcgYW4gZXhwb25lbnQsIGNoZWNrIGZvciAnZScgYW5kCisJJ0UnIGV4cGxpY2l0bHkuCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IERpc2FsbG93IHRha2luZyB0aGUgYWRkcmVzcyBvZgorCXRoZSBgbWFpbicgZm4uCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2hlY2sgZm9yIHRoZSBsZW5ndGggb2YgT1JJR0lOQUxfTkFNRQorCWJlaW5nIDQsIGFuZCB0aGF0IGl0IHN0YXJ0cyB3aXRoICdtJywgYmVmb3JlIGNhbGxpbmcgc3RyY21wLgorCisJKiBjcC10eXBlMi5jIChyZWFkb25seV93YXJuaW5nX29yX2Vycm9yKTogUmVuYW1lIHRvIHJlYWRvbmx5X2Vycm9yLAorCW1ha2UgaXQgbm93IEFSTSBjb21wbGlhbnQgYnkgZW1pdHRpbmcgYSBoYXJkIGVycm9yLCBpbnN0ZWFkIG9mIGEKKwlwZWR3YXJuLgorCSogY3AtY3Z0LmMsIGNwLXR5cGVjay5jOiBDaGFuZ2UgYWxsIGNhbGxlcnMuCisJKiBjcC10cmVlLmggKHJlYWRvbmx5X2Vycm9yKTogUmVuYW1lIHByb3RvdHlwZS4KKworCVN1biBKYW4gMzEgMDk6NTg6MTYgMTk5MyAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhcyBhdCBkZWxsYS5hcHBsaS5zZSkKKyAKKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IEFjY2VwdCB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYQorCXRlbXBvcmFyeSBnZW5lcmF0ZWQgYnkgYW4gZXhwbGljaXQgY29uc3RydWN0b3IgY2FsbCwgYnV0IGdlbmVyYXRlCisJYSB3YXJuaW5nLgorCisJTW9uIEZlYiAgOCAxMDo0NTo1NiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEZW1hbmdsZSBERUNMQVJBVE9SIGlmIGl0J3MgYW4gb3BlcmF0b3IuCisKK1RodSBNYXIgMjUgMTE6Mzg6MDIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOgorCUZvciAiLi4uIiBjYXNlLCBsZWF2ZSBmZW5kIHBvaW50aW5nIGF0IHRlcm1pbmF0aW5nIDAuCisJRGlzdGluY3QgZXJyb3IgbXNncyBmb3IgZW1wdHkgZmlsZSBuYW1lIGFuZCBmb3IgYmFkIHN5bnRheC4KKworCSogTWFrZWZpbGUuaW4gKFVTRVJfSCk6IEFkZCB2YS1jbGlwcGVyLmguCisKK1RodSBNYXIgMjUgMDc6MDE6MTQgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IEZpeCB0eXBvIGluIHByZXZpb3VzIGNoYW5nZS4KKworVGh1IE1hciAyNSAwMzozNzo1MSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sYW5nLmMgKGxhbmdfaWRlbnRpZnkpLCBjcC1sZXguYyAobGFuZ19pZGVudGlmeSksIG9iamMtYWN0LmMKKwkobGFuZ19pZGVudGlmeSksIHRyZWUuaCAobGFuZ19pZGVudGlmeSk6IE5ldyByb3V0aW5lLgorCSogZGVmYXVsdHMuaCAoQVNNX0lERU5USUZZX0xBTkdVQUdFKSBOZXcgbWFjcm8gdXNlZCB0byBpZGVudGlmeQorCXdoaWNoIGZyb250LWVuZCBwcm9kdWNlZCB0aGUgb2JqZWN0IGZpbGUuICBQb3J0cyB0aGF0IGRvIG5vdAorCWRlZmluZSBBU01fSURFTlRJRllfR0NDIHdpbGwgYXV0b21hdGljYWxseSBnZXQgYSByZWFzb25hYmxlCisJZGVmaW5pdGlvbiBmb3IgQVNNX0lERU5USUZZX0xBTkdVQUdFLCBwb3J0cyB0aGF0IGRvIGRlZmluZQorCUFTTV9JREVOVElGWV9HQ0MgZm9yIGFueSByZWFzb24gbWF5IHdhbnQgdG8gZGVmaW5lCisJQVNNX0lERU5USUZZX0xBTkdVQUdFIGFzIGRvbmUgaGVyZS4KKwkqIHRvcGxldi5jIChvdXRwdXRfbGFuZ19pZGVudGlmeSk6IE5ldyByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoCisJZnJvbnQtZW5kIHByb2R1Y2VkIHRoZSBvYmplY3QgZmlsZS4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBVc2UgQVNNX0lERU5USUZZX0xBTkdVQUdFIGlmIGl0IGV4aXN0cy4KKworV2VkIE1hciAyNCAxNzo1MzoxMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UuZ3BlcmY6IENoYW5nZSBfX2NpbWFnX18gdG8gX19pbWFnX18sIF9fY3JlYWxfXyB0byBfX3JlYWxfXywKKwl0byB2b2lkIHJlamVjdGlvbiBieSBncGVyZi4KKworVHVlIE1hciAyMyAxODo0MzoxNCAxOTkzICBIb2xnZXIgVGV1dHNjaCAgKGhvbGdlckBob3Ric28ucmhlaW4tbWFpbi5kZSkKKworCSogY2xpcHBlci5tZDogQXNzaWduICJmcCIgYXR0cmlidXRlIHRvIGZwIGluc25zLiBBZGQgREltb2RlCisJaW5zbnMgZm9yIHdpZGVuaW5nIG11bCwgc2hpZnQgYW5kIHJvdGF0ZS4gUmVtb3ZlICdkZWNyZW1lbnQsIHRlc3QKKwlhbmQgYnJhbmNoJyBjb21iaW5hdGlvbiBwYXR0ZXJucy4gVGhleSBhcmUgbm90IHJlbG9hZGFibGUuCisKKwkqIGNsaXBwZXIuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogREltb2RlIHJlZ3MgbXVzdCBzdGFydCBvbiBldmVuCisJcmVnaXN0ZXJzLgorCisJKiBnc3RkYXJnLmgsIGd2YXJhcmdzLmg6IFVzZSB2YS1jbGlwcGVyLmguCisKKwkqIGNvbmZpZy5zdWI6IERlZmF1bHQgdG8gY2xpcHBlci1pbnRlcmdyYXBoIGlmIHN5c3RlbSBpcyBjbGl4LgorCSogY29uZmlndXJlIChjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCopOiBOZXcgY29uZmlndXJhdGlvbi4KKwkqIGNsaXBwZXIuaCwgY2xpcHBlci5jLCBjbGlwcGVyLm1kOiBOZXcgZmlsZXMuCisJKiB4LWNsaXgsIHQtY2xpeCwgeG0tY2xpeC5oLCBjbGl4Lmg6IE5ldyBmaWxlcy4KKworV2VkIE1hciAyNCAxOTkzIDE4OjU0OjUxICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogZml4aW5jbHVkZXMgKG1lbW9yeS5oKToKKwlVc2UgcHJvcGVyIEFOU0kgc3ludGF4IGluIGAjZW5kaWYgX19tZW1vcnlfaF9fJy4KKworV2VkIE1hciAyNCAxMjo1Mjo0MCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChzaFsxMjNdYWRkKTogQ29sbGFwc2UgaW50byBhIHNpbmdsZSBwYXR0ZXJuLgorCShzaFsxMjNdYWRkIGZvciByZWxvYWQpOiBMaWtld2lzZS4KKwkqIHBhLmMgKHNoYWRkX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKHByaW50X29wZXJhbmQpOiBIYW5kbGUgJyVPJyBmb3Igc2hhZGQgcGF0dGVybnMuCisKK1dlZCBNYXIgMjQgMDg6MDM6MzEgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmggKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TLCBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKToKKwlEb24ndCBvdXRwdXQgdGFiIGJlZm9yZSAuY3NlY3QgcHNldWRvLW9wLgorCitXZWQgTWFyIDI0IDAyOjAxOjE0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL3B5ci9weXIuaCAoTk9fRE9UX0lOX0xBQkVMKTogRGVmaW5lZC4KKworCSogdHJlZS5jIChzdGFiaWxpemVfcmVmZXJlbmNlXzEpOiBGb3IgZGl2aXNpb24gYW5kIHJlbWFpbmRlciwKKwltYWtlIGEgc2F2ZV9leHByLgorCitUdWUgTWFyIDIzIDE0OjUxOjA3IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGFscGhhLmgsIGkzODYvc3lzdjQuaCwgbWlwcy5oLCByczYwMDAuaCAoUkVUVVJOX0lOX01FTU9SWSk6CisJRGVsZXRlIHN0cnVjdCBhbmQgdW5pb24gcmVmZXJlbmNlcy4KKwkqIHNwYXJjLmggKFJFVFVSTl9JTl9NRU1PUlkpOiBVcGRhdGUgY29tbWVudC4KKwkqIGg4MzAwLmgsIDM4NmJzZC5oLCBsaW51eC5oLCBpMzg2L21hY2guaCwgaTM4Ni9vc2Zyb3NlLmgsCisJaTg2MC9tYWNoLmgsIGk5NjAuaCwgaHAyYnNkLmgsIGhwM2JzZC5oLCBocDNic2Q0NC5oLCBuZXh0LmgsCisJc3VuM21hY2guaCwgbTg4ay5oLCBuczMyay9wYzUzMi1tYWNoLmgsIHBhLXV0YWhtYWNoLmgsCXBhMS11dGFobWFjaC5oLAorCXJzNjAwMC9tYWNoLmggKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBEZWZpbmUgdG8gMC4KKwkqIHRvcGxldi5jIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiAxLgorCShmbGFnX3BjY19zdHJ1Y3RfcmV0dXJuKTogRGVmYXVsdCB0byBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOLgorCShmX29wdGlvbnMpOiBBZGQgLWZyZWctc3RydWN0LXJldHVybiBmbGFnLgorCitUdWUgTWFyIDIzIDA3OjQzOjE4IDE5OTMgIFRvbSBXb29kICAod29vZEBuZXh0LmNvbSkKKworCSogZW1pdC1ydGwuYyAocHVzaF90b3Btb3N0X3NlcXVlbmNlLCBwb3BfdG9wbW9zdF9zZXF1ZW5jZSk6IE5ldworCWZ1bmN0aW9ucy4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIEJVSUxUX0lOX1NBVkVSRUdTKTogVXNlIHRoZXNlIHRvIHB1dCB0aGUKKwljb2RlIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24sIGV2ZW4gd2hlbiBpbnNpZGUgYSBzZXF1ZW5jZS4KKworCSogdHJlZS5oIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTogQWRkIEJVSUxUX0lOX0FQUExZX0FSR1MsCisJQlVJTFRfSU5fQVBQTFksIGFuZCBCVUlMVF9JTl9SRVRVUk4uCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWNsYXJlIF9fYnVpbHRpbl9hcHBseV9hcmdzLAorCV9fYnVpbHRpbl9hcHBseSwgYW5kIF9fYnVpbHRpbl9yZXR1cm4uCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgYXBwbHlfYXJnc192YWx1ZSBmaWVsZC4KKwkqIGV4cHIuYyAoYXBwbHlfYXJnc192YWx1ZSk6IE5ldyB2YXJpYWJsZS4KKwkoaW5pdF9leHByLCBzYXZlX2V4cHJfc3RhdHVzLCByZXN0b3JlX2V4cHJfc3RhdHVzKTogSW5pdGlhbGl6ZSwKKwlzYXZlLCBhbmQgcmVzdG9yZSBhcHBseV9hcmdzX3ZhbHVlLgorCShleHBhbmRfYnVpbHRpbik6IEltcGxlbWVudCBuZXcgYnVpbHQtaW4gZnVuY3Rpb25zLgorCShhcHBseV9hcmdzX21vZGUsIGFwcGx5X3Jlc3VsdF9tb2RlKTogTmV3IHZhcmlhYmxlcy4KKwkoYXBwbHlfYXJnc19zaXplLCBhcHBseV9yZXN1bHRfc2l6ZSwgcmVzdWx0X3ZlY3RvciwKKwlleHBhbmRfYnVpbHRpbl9hcHBseV9hcmdzLCBleHBhbmRfYnVpbHRpbl9hcHBseSwKKwlleHBhbmRfYnVpbHRpbl9yZXR1cm4pOiBOZXcgZnVuY3Rpb25zLgorCShJTkNPTUlOR19SRUdOTywgT1VUR09JTkdfUkVHTk8pOiBTdXBwbHkgZGVmYXVsdCBkZWZpbml0aW9ucy4KKwkqIHNwYXJjLmggKElOQ09NSU5HX1JFR05PLCBPVVRHT0lOR19SRUdOTyk6IERlZmluZS4KKwkqIHNwYXJjLm1kICh1bnR5cGVkX2NhbGwsIHVudHlwZWRfcmV0dXJuKTogTmV3IHBhdHRlcm5zLgorCSogaTM4Ni5oIChBUFBMWV9SRVNVTFRfU0laRSk6IERlZmluZS4KKwkqIGkzODYubWQgKHVudHlwZWRfY2FsbCwgdW50eXBlZF9yZXR1cm4pOiBOZXcgcGF0dGVybnMuCisJKiBtNjhrL2lzaS5oLCBtNjhrL202OGsuaCwgbTY4ay9tNjhrdjQuaCwgbTY4ay9tb3QzMzAwLmgKKwkoTkVFRFNfVU5UWVBFRF9DQUxMKTogRGVmaW5lLgorCSogbTY4ay5tZCwgZng4MC5tZCwgZ21pY3JvLm1kLCBpODYwLG1kLCBuczMyay5tZAorCSh1bnR5cGVkX2NhbGwsIGJsb2NrYWdlKTogTmV3IHBhdHRlcm5zLiAKKwkqIG1pcHMubWQgKHVudHlwZWRfY2FsbCk6IE5ldyBwYXR0ZXJuLgorCitUdWUgTWFyIDIzIDA2OjM4OjM2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBVc2UgaW50X3NpemVfaW5fYnl0ZXMgYW5kCisJZXhwcl9zaXplIHdoZW4gYXBwcm9wcmlhdGUgaW5zdGVhZCBvZiBzaXplX2luX2J5dGVzLgorCisJKiByZWdjbGFzcy5jIChyZWNvcmRfcmVnX2NsYXNzZXMpOiBXaGVuIGFuIGFsdGVybmF0aXZlIHJlcXVpcmVzCisJYSBtYXRjaCwgYnV0IHdlIGRvIGl0IHdpdGggYSBjb3B5IGludG8gYSByZWdpc3RlciwgdGhhdCBhbHRlcm5hdGl2ZQorCXdpbnMuCisKKwkqIGNzZS5jIChDSEVBUF9SRUcpOiBBZGQgbWlzc2luZyBwYXJlbnMuCisKKwkqIGV4cHIuaDogRG9uJ3QgZGVjbGFyZSBmbnMgdGhhdCB1c2UgInRyZWUiIGlmIHRyZWUuaCBub3QgaW5jbHVkZWQuCisJKGVtaXRfY2FsbF8xKTogUmVtb3ZlIGRlY2wuCisJKHByb21vdGVkX2lucHV0X2FyZyk6IEFkZCBwcm90b3R5cGUuCisJKGZpeF9sZXhpY2FsX2FkZHIpOiBSZW1vdmUgZHVwbGljYXRlIGRlY2wuCisJKGNvcHlfZnVuY3Rpb25fdmFsdWUsIGV4cGFuZF9zdG10X2V4cHIpOiBEZWxldGU7IG5vIHN1Y2ggZnVuY3Rpb25zLgorCSogY2FsbHMuYzogSW5jbHVkZSBndmFyYXJncy5oLgorCUFkZCBwcm90b3R5cGVzIHRvIGZvcndhcmQgZGVjbGFyYXRpb25zIGFuZCBkZWNsYXJlIHN0YXRpYyBmdW5jdGlvbnMuCisJKGVtaXRfY2FsbF8xKTogTm93IHN0YXRpYy4KKwkoZW1pdF9saWJyYXJ5X2NhbGwsIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTW92ZSB0byBoZXJlLgorCSogZXhwci5jOiBEb24ndCBpbmNsdWRlIGd2YXJhcmdzLmguCisJKGVtaXRfbGlicmFyeV9jYWxsLCBlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6IERlbGV0ZSBmcm9tIGhlcmUuCisJKiBNYWtlZmlsZS5pbiAoZXhwci5vKTogRG9lc24ndCBpbmNsdWRlIGd2YXJhcmdzLmguCisJKGNhbGxzLm8pOiBOb3cgaW5jbHVkZXMgZ3ZhcmFyZ3MuaC4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogVXNlIGludF9zaXplX2luX2J5dGVzIGluc3RlYWQgb2YKKwlzaXplX2luX2J5dGVzIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIGNvZGUuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVXNlIGV4cHJfc2l6ZSBpbnN0ZWFkIG9mIGRvaW5nIGl0IG91cnNlbGYuCisKK01vbiBNYXIgMjIgMTk6MTU6MTcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IERvbid0IGRlbGV0ZSBhbiBpbnNuIGNvcHlpbmcKKwl2YXIgdG8gaXRzZWxmLCBpZiBpdCdzIHRoZSBlbmQgb2YgYSBsaWJjYWxsIGdyb3VwLgorCitNb24gTWFyIDIyIDE1OjI4OjQ4IDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBmaXhpbmNsdWRlczogVXNlIGBzZXQgeCAkeTsgc2hpZnQnLCBub3QgYHNldCAtICR5JywgdG8gYXZvaWQKKwlhbHRlcmluZyBzaCBvcHRpb25zLiAgRml4IGAjZW5kaWYgZm9vJyBjb25zdHJ1Y3Rpb25zLiAgQ2xlYW4gdXAKKwlhbGwgRE9ORSBmaWxlcy4KKworTW9uIE1hciAyMiAxNzowMjo1OCAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBleHByLmggKE1VU1RfUEFTU19JTl9TVEFDSyk6IE1ha2UgbWFjaGluZSBwYXJhbWV0ZXIuCisKK01vbiBNYXIgMjIgMDE6Mzg6NDEgMTk5MyAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRWxpbWluYXRlIHJlZ3Mgd2l0aGluIGEgQ0xPQkJFUi4KKworCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0KTogVXNlIElOSVRfRVhQQU5ERVJTLgorCisJKiBpMzg2LmMgKG91dHB1dF9maXhfdHJ1bmMpOiBVc2UgTUVNcyBpbiBpbnNuIGFzIHN0YWNrIHRlbXBzLgorCU5vIG5lZWQgdG8gYWxsb2NhdGUgJiBkZWFsbG9jYXRlIHN0YWNrIHNwYWNlIG9uIHRoZSBmbHkuCisJCisJKGNsZWFyXzM4Nl9zdGFja19sb2NhbHMpOiBOZXcgZnVuY3Rpb24uCisJKGFzc2lnbl8zODZfc3RhY2tfbG9jYWwpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IE9ubHkgbmFycm93IE1PREVfRkxPQVQgcmVsb2FkcworCWZyb20gQUxMX1JFR1MgdG8gR0VORVJBTF9SRUdTLgorCShQUkVGRVJSRURfT1VUUFVUX1JFTE9BRF9DTEFTUyk6IERlbGV0ZWQuCisKKwkoSU5JVF9FWFBBTkRFUlMpOiBOZXcgbWFjcm8uCisKKwkqIGkzODYubWQgKG1vdnNmLG1vdmRmKTogVXNlIGFuIGlucHV0IHJlbG9hZCBmb3IgTUVNLU1FTSBtb3Zlcy4KKwkoZXh0ZW5kc2ZkZjIpOiBEb24ndCBhbGxvdyBHRU5FUkFMX1JFR1MgaW4gYW55IG9wZXJhbmQuCisKKwkodHJ1bmNkZnNmMik6IEFsbG9jYXRlIGEgc3RhY2sgdGVtcCBpbiBleHBhbmRlci4KKwlVc2UgdGhhdCBpbiB0aGUgb3V0cHV0IGZ1bmN0aW9uLgorCShmaXhfdHJ1bmNNTjIsZml4dW5zX3RydW5jTU4yKTogTGlrZXdpc2UuCisJQWxsb2NhdGUgc2NyYXRjaCByZWcgZnJvbSBRX1JFR1MuCisKK1N1biBNYXIgMjEgMTc6MjQ6MDkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogSWYgd2FybmluZyBhYm91dCBhIGZ1bmN0aW9uCisJZGVjbGFyZWQgc3RhdGljIGJ1dCBub3QgZGVmaW5lZCwgbWFrZSB0aGUgZnVuY3Rpb24gZXh0ZXJuLgorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogRG9uJ3QgbWFrZSAjIHNwZWNpYWwgaW4gYXJnbGVzcyBtYWNyby4KKworCSogdG9wbGV2LmMgKGluY29tcGxldGVfZGVjbF9maW5hbGl6ZV9ob29rKTogTmV3IHZhcmlhYmxlLgorCShjb21waWxlX2ZpbGUpOiBDYWxsIGluY29tcGxldGVfZGVjbF9maW5hbGl6ZV9ob29rLgorCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHRoYXQgdmFyLgorCShmaW5pc2hfaW5jb21wbGV0ZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgorCShjb21wbGV0ZV9hcnJheV90eXBlKTogVXNlIDAgYXMgZGVmYXVsdCBtYXhpbmRleC4KKwkqIHRyZWUuaCAoaW5jb21wbGV0ZV9kZWNsX2ZpbmFsaXplX2hvb2spOiBEZWNsYXJlZC4KKworU3VuIE1hciAyMSAxNjozMDoyMiAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogdC1vc2Zyb3NlIChDT05GSUcyX0gpOiBDaGFuZ2UgaW5jbHVkZSBmaWxlIG5hbWUgdG8gb3Nmcm9zZS5oLgorCisJKiBoYWxmcGljLmggKHByb3RvdHlwZSBzdXBwb3J0KTogRml4IHJlY2VudCBjaGFuZ2VzIGZvcgorCXByb3RvdHlwZXMsIHNvIGl0IGNvbXBpbGVzIGFnYWluLgorCisJKiBjb25maWd1cmUgKG5zMzJrLWVuY29yZS1vc2YpOiBEZWxldGUsIGxhc3QgbnMzMmsgT1NGL3Jvc2UKKwltYWNoaW5lIHR1cm5lZCBvZmYuCisKKwkqIGVuY3Jvc2UuaCwgeC1lbmNyb3NlLCB0LWVuY3Jvc2U6IERlbGV0ZSwgbm8gbG9uZ2VyIHVzZWQuCisKK1N1biBNYXIgMjEgMTY6MjA6MDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUsIGNhc2UgVVNFKToKKwlEb24ndCByZW1vdmUgYSBzdWJyZWcgaWYgT1JJRyBoYWQgb25lLgorCitTdW4gTWFyIDIxIDAxOjUwOjA3IDE5OTMgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBjLWNvbW1vbi5jOiAjaW5jbHVkZSAib2JzdGFjay5oIi4KKwkqIGNvbmZpZy92YXgveG0tdm1zLmggW1ZBWENdOiBXb3JrIGFyb3VuZCBzdGRpby5oJ3MgRklMRV9UWVBFLgorCSogdm1zY29uZmlnLmNvbTogV2hlbiBtYWtpbmcgdG0uaCBmcm9tIGNvbmZpZy92YXgvdm1zLmgsIGNoYW5nZQorCWFueSAjaW5jbHVkZSAidmF4LyouaCIgZGlyZWN0aXZlcyB0byB1c2UgbmF0aXZlIFZNUyBmaWxlIHN5bnRheC4KKworU2F0IE1hciAyMCAyMjo0NjozMSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKElOU05fU0VUU19BUkVfREVMQVlFRCk6IERlZmluZSBmb3IgdGhlIFBBLiAgU2V0cyBhbmQKKwljbG9iYmVycyB0aGF0IG9jY3VyIGluIG1pbGxpY29kZSBpbnNucyBhcmUgZGVsYXllZCBlZmZlY3RzLgorCShJTlNOX1JFRkVSRU5DRVNfQVJFX0RFTEFZRUQpOiBMaWtld2lzZSwgYnV0IGZvciBvcGVyYW5kIHJlZmVyZW5jZXMgCisJb2NjdXJpbmcgaW4gbWlsbGljb2RlIGluc25zLgorCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcyk6IFBhcmFtZXRlcgorCWluY2x1ZGVfY2FsbGVkX3JvdXRpbmUgY2hhbmdlZCB0byBpbmNsdWRlX2RlbGF5ZWRfZWZmZWN0cy4gIEFsbAorCXJlZmVyZW5jZXMgY2hhbmdlZC4gCisJKG1hcmtfc2V0X3Jlc291cmNlcyk6IExpa2V3aXNlLgorCShpbnNuX3JlZmVyZW5jZXNfcmVzb3VyY2VfcCk6IExpa2V3aXNlLgorCShpbnNuX3NldHNfcmVzb3VyY2VfcCk6IExpa2V3aXNlLgorCShtYXJrX3JlZmVyZW5jZWRfcmVzb3VyY2VzLCBjYXNlIElOU04pOiBEbyBub3QgbWFyayBhbnkgcmVzb3VyY2VzCisJYXMgcmVmZXJlbmNlZCBpZiB3ZSBhcmUgbm90IGluY2x1ZGluZyBkZWxheWVkIGVmZmVjdHMsIGFuZCB0aGUgCisJZ2l2ZW4gaW5zbiBoYXMgZGVsYXllZCBlZmZlY3RzLgorCShtYXJrX3NldF9yZXNvdXJjZXMpOiBMaWtld2lzZSBmb3IgcmVzb3VyY2VzIHdoaWNoIGFyZSBzZXQvY2xvYmJlcmVkLgorCShmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IEluY2x1ZGUgZGVsYXllZCBlZmZlY3RzIGZvciB0aGUgZGVsYXkgaW5zbgorCWlmIHdlIGFyZSBzZWFyY2hpbmcgYWZ0ZXIgdGhlIGRlbGF5IGluc24gZm9yIGNhbmRpYXRlcy4KKwkoZGJyX3NjaGVkdWxlKTogV2hlbiBpbml0aWFsaXppbmcgYGVuZF9vZl9mdW5jdGlvbl9uZWVkcycgaW5jbHVkZQorCWRlbGF5ZWQgZWZmZWN0cy4KKworU2F0IE1hciAyMCAxODo1NDo0NiAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChUQVJHRVRfU1dJVENIRVMpOiBPciBpbiBUQVJHRVRfQ1BVX0RFRkFVTFQgZm9yIGRlZmF1bHQKKwljYXNlLgorCShUQVJHRVRfQ1BVX0RFRkFVTFQpOiBEZWZhdWx0IHRvIDAuCisKK1NhdCBNYXIgMjAgMTQ6NTI6MjYgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChzaW5nbGVtb3ZlX3N0cmluZyk6IERlY2xhcmUuCisKKwkqIGNvbmZpZ3VyZTogQWRkIHN1cHBvcnQgZm9yIDQuNEJTRCBvbiBocDMwMHMuCisJKiBocDNic2Q0NC5oLCB4LWhwM2JzZDQ0Lmg6IE5ldyBmaWxlcyBmb3IgNC40QlNEIG9uIGhwMzAwcworCisJKiBwYS5tZCAoY29uZGl0aW9uYWwgYnJhbmNoIHBhdHRlcm5zKTogQ2xlYW4gdXAgY29uc3RyYWludHMuCisKKwkqIHBhLm1kIChzaGFkZCByZWxvYWQgcGF0dGVybnMpOiBDbGVhbiB1cCBvdXRwdXQgdGVtcGxhdGVzLgorCitTYXQgTWFyIDIwIDExOjIzOjE1IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBnbnUuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKGluaXRfZXhwbWVkKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK1NhdCBNYXIgMjAgMDc6MTE6NTQgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAYXBwbGUtZ3Vua2llcy5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogU2ltcGxpZnkgY29kZSBieSBpbml0aWFsaXppbmcgT0ZGU0VUCisJdG8gaW50ZWdlcl96ZXJvX25vZGUuCisJRG8gZ2VuZXJhbCBpbmRleCBjb21wdXRhdGlvbiBmb3IgQVJSQVlfUkVGIGFuZCBpbmNsdWRlIGxvd2VyIGJvdW5kCisJb2YgZG9tYWluIGluIGNhbGN1bGF0aW9uLgorCShleHBhbmRfZXhwciwgY2FzZSBBUlJBWV9SRUYpOiBJbmNsdWRlIGxvd2VyLWJvdW5kIGluIGluZGV4CisJY29tcHV0YXRpb24uCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBQTFVTX0VYUFIpOiBEb24ndCBhc3NvY2lhdGUgYXBhcnQKKwlhIGNvbnN0YW50IG9wZXJhbmQuCisKKwkqIGNvbWJpbmUuYyAobWFrZV9jb21wb3VuZF9vcGVyYXRpb24pOiBDYWxsIHJlY3Vyc2l2ZWx5IGluIHRoZQorCWNhc2VzIHdoZXJlIHdlIGZpbmQgYSBzaW1wbGlmaWNhdGlvbi4KKwkobWFrZV9jb21wb3VuZF9vcGVyYXRpb24sIGNhc2UgU1VCUkVHKTogSWYgdGhlIHJlY3Vyc2l2ZSBjYWxsCisJY2hhbmdlcyB0aGUgcnR4IGNvZGUgYW5kIHRoaXMgaXMgYW4gYXBwcm9wcmlhdGUgU1VCUkVHLCB1c2UKKwlmb3JjZV90b19tb2RlLgorCitTYXQgTWFyIDIwIDAzOjE2OjUyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgdGhlIGNoYWluIG9mIGEgU1RSSU5HX0NTVC4KKworCSogYy1sZXguYyAoeXlsZXgpOiBDb3B5IHRoZSBzdHJpbmcgdmFsdWUgd2UgZ2V0IGZyb20gX19GVU5DVElPTl9fLgorCitGcmkgTWFyIDE5IDIxOjA2OjQxIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5oOiBDb3JyZWN0IHBhcnRseSBuZXN0ZWQgY29tbWVudC4KKworCUZyb20gQmlsbCBDb3ggKGJpbGxAY3lnbnVzLmNvbSk6CisJKiBjcC1kZWNsLmMgKHB1c2hfbGV2ZWxfZGVjbCk6IEFkZCBjYXN0IHRvIGNvcnJlY3QgcHVzaF9zdGFja19sZXZlbAorCXBhcmFtZXRlci4KKwkqIGNzZS5jIChjc2VfcHJvY2Vzc19ub3Rlcyk6IFJlcGxhY2UgTlVMTF9SVFggd2l0aCBqdXN0IHplcm8uCisJKiBmdW5jdGlvbi5oLCBoYWxmcGljLmgsIGludGVncmF0ZS5oLCBsb29wLmgsIG1hY2htb2RlLmgsIG91dHB1dC5oLAorCXJlY29nLmgsIHJlbG9hZC5oLCBzdGFjay5oOiBBZGQgcHJvdG90eXBlcy4KKwkqIGdlbmF0dHIuYyAoZ2VuX2F0dHIpOiBHZW5lcmF0ZSBwcm90b3R5cGVzIGluIGhlYWRlciBmaWxlLgorCisJKiB4Y29mZm91dC5oIChERUJVR19TWU1TX1RFWFQpOiBEZWZpbmUuCisJKiB4Y29mZm91dC5jICh4Y29mZm91dF9kZWNsYXJlX2Z1bmN0aW9uKTogQ2FsbCBkYnhvdXRfc291cmNlX2ZpbGUKKwliZWZvcmUgZW1pdHRpbmcgLmZ1bmN0aW9uIHBzdWVkby1vcC4KKworRnJpIE1hciAxOSAxNzo0NToxMyAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIE1laXNzbmVyIHZlcnNpb24gdG8gMzYuCisJKFRBUkdFVCBtYWNyb3MpOiBNb3ZlIHRoaXMgc2VjdGlvbiB0byBiZSBlYXJsaWVyIHRoYW4KKwlBU01fRklOQUxfU1BFQy4KKwkoQVNNX0ZJTkFMX1NQRUMpOiBJZiBjb25maWd1cmVkIHdpdGggLS13aXRoLWdudS1hcyBvciBhcyBhIGNyb3NzCisJY29tcGlsZXIsIGRvIG5vdCBydW4gbWlwcy10ZmlsZSB1bmxlc3MgLW1taXBzLWFzIGlzIHVzZWQuCisKKwkqIGNvbmZpZ3VyZSAodGFyZ2V0X2NwdV9kZWZhdWx0KTogU2V0IHRvIDE2IHdoZW4gY29uZmlndXJpbmcgYQorCU1JUFMgdXNpbmcgdGhlIEdOVSBhc3NlbWJsZXIuCisKK0ZyaSBNYXIgMTkgMDY6Mjc6MzQgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKHN5bnRoX211bHQpOiBEb24ndCB0cnkgdG8gbWFrZSByZWN1cnNpdmUgY2FsbCBpZgorCXdlIHdvdWxkIGJlIHNoaWZ0aW5nIGJ5IGEgbmVnYXRpdmUgbnVtYmVyLgorCShleHBhbmRfbXVsdCk6IERvbid0IG5lZ2F0ZSBWQUwgaWYgaXQgaXMgbmVnYXRpdmUuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9wbHVzX21pbnVzKTogQ291bnQgQ09OU1RzIGNvbWluZyBpbiBhbmQgZ29pbmcKKwlvdXQ7IHdlIGhhdmUgc2ltcGxpZmllZCB0aGluZ3MgaWYgd2UgaGF2ZSBtb3JlIENPTlNUcyBnb2luZyBvdXQKKwlldmVuIGlmIHdlIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRvdGFsIHRlcm1zLgorCisJKiBleHBtZWQuYyAoemVyb19jb3N0KTogTmV3IHZhcmlhYmxlLgorCShpbml0X2V4cG1lZCk6IEFsd2F5cyBwYXNzIHNvbWUgaW5zbiB0byByZWNvZy4KKwlTZXQgc2hpZnRfY29zdFswXSwgc2hpZnRhZGRfY29zdFswXSBhbmQgc2hpZnRzdWJfY29zdFswXSB0bworCXNvbWV0aGluZyByZWFzb25hYmxlLgorCUNvbXB1dGUgemVyb19jb3N0LgorCShlbnVtIGFsZ19jb2RlKTogUmVtb3ZlIGFsZ19ub25lOyBhZGQgYWxnX3plcm8gYW5kIGFsZ19tLgorCShzdHJ1Y3QgYWxnb3JpdGhtKTogUmVuYW1lIGZpZWxkIENPRUZGIHRvIExPRy4KKwkoc3ludGhfbXVsdCk6IFVzZSBuZXcgb3BzIGFsZ196ZXJvIGFuZCBhbGdfbSBmb3IgbXVsdGlwbGljYXRpb24gYnkKKwl6ZXJvIGFuZCBvbmUsIHJlc3BlY3RpdmVseS4KKwlVc2UgTUlOIHdoZW4gaGVscGZ1bC4KKwlCZSBjb25zaXN0ZW50IGFuZCBkb24ndCB0ZXN0IGNvc3QgYmVmb3JlIHJlY3Vyc2l2ZSBjYWxsLgorCURvbid0IHNwZWNpYWwtY2FzZSBzaGlmdCBjb3VudHMgb2YgemVybzsgYWxyZWFkeSBoYW5kbGVkIGVsc2V3aGVyZS4KKwkoZXhwYW5kX211bHQpOiBGaXJzdCBvcGVyYXRpb24gaXMgYWx3YXlzIGFsZ196ZXJvIG9yIGFsZ19tOworCXJlbWFpbmluZyBvcGVyYXRpb25zIGNhbid0IGJlIG9uZSBvZiB0aG9zZS4KKwlVc2UgcHJvcGVyIHN1YnRhcmdldHMgZm9yIGNvbXB1dGF0aW9ucy4KKwlSZW1vdmUgc3BlY2lhbC1jYXNlcyBmb3Igc2hpZnQgY291bnRzIG9mIHplcm8uCisJVHJhY2sgdmFsdWUgY29tcHV0ZWQgc28gZmFyIGFuZCBtYWtlIFJFR19FUVVBTCBub3Rlcy4KKworRnJpIE1hciAxOSAwMTozNzo1NCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogVHlwbyBpbiBsYXN0IGNoYW5nZS4KKwkoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEhhbmRsZSBDT01QTEVYX0NTVC4KKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IFBhc3MgdG9fcnR4J3MgbW9kZSB0byBleHBhbmRfZXhwcgorCXdoZW4gYXNzaWduaW5nIGEgcmVzdWx0X2RlY2wuCisJKGV4cGFuZF9leHByKTogRm9yIEVSUk9SX01BUkssIGdpdmUgYmFjayAwIGluIFRNT0RFIGlmIHBvc3NpYmxlLgorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IERvbid0IGRlZmVyIHBvcHMgaW4gY29uc3QgY2FsbC4KKworVGh1IE1hciAxOCAxNzowMjoyNCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChjdXJyZW50X2Z1bmN0aW9uX3Byb3RvdHlwZV9maWxlLAorCWN1cnJlbnRfZnVuY3Rpb25fcHJvdG90eXBlX2xpbmUpOiBOZXcgdmFyaWFibGVzLgorCShzdGFydF9mdW5jdGlvbik6IFNldCB0aGVtLgorCShzdG9yZV9wYXJtX2RlY2xzKTogVXNlIHRoZW0gZm9yIGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLgorCitUaHUgTWFyIDE4IDIxOjI4OjQzIDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Zsb2F0KTogV2hlbiBjb252ZXJ0aW5nIGFuIHVuc2lnbmVkIHR5cGUgVQorCXRvIGEgc21hbGxlciBvciBlcXVhbC1zaXplZCBmbG9hdGluZyB0eXBlIEYgd2hlcmUgdGhlcmUncyBubworCWhhcmR3YXJlIHN1cHBvcnQgZm9yIHVuc2lnbmVkLXRvLWZsb2F0IGNvbnZlcnNpb24sIHVzZSBhIHRlbXBvcmFyeQorCWZsb2F0aW5nIHR5cGUgbGFyZ2VyIHRoYW4gRiBpZiBwb3NzaWJsZSwgc2luY2UgdGhpcyBhdm9pZHMKKwlyb3VuZGluZyBwcm9ibGVtcyB0aGF0IGFyZSB3b3JzdCB3aGVuIFUgaXMganVzdCBncmVhdGVyIHRoYW4KKwl0aGUgbWF4aW11bSBzaWduZWQgaW50ZWdlciBvZiB0aGUgc2FtZSBzaXplLgorCitUaHUgTWFyIDE4IDE2OjE2OjIxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBIYW5kbGUgQ09NUExFWF9UWVBFIGxpa2Ugb3RoZXIgc2NhbGFycy4KKworCSogYy1wYXJzZS5pbiAoUkVBTFBBUlQsIElNQUdQQVJUKTogTmV3IHRva2VuIHR5cGVzLgorCSh1bmFyeV9leHByKTogSGFuZGxlIFJFQUxQQVJULCBJTUFHUEFSVC4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IERvbid0IGVuc3VyZSByZWYgdG8gYSB2b2xhdGlsZSB2YWx1ZQorCWlmIGl0IGlzIGEgZnVuY3Rpb24uCisKKwkqIGMtcGFyc2UuZ3BlcmY6IEFkZCBfX2NpbWFnLCBfX2NpbWFnX18sIF9fY3JlYWwsIF9fY3JlYWxfXy4KKworCSogY29sbGVjdDIuYyAgKG91dHB1dF9maWxlKTogTmV3IHN0YXRpYyB2YXIuCisJKG1haW4pOiBTZXQgb3V0cHV0X2ZpbGUuCisJKG15X2V4aXQpOiBEZWxldGUgb3V0cHV0X2ZpbGUgb24gZmFpbHVyZS4KKworVGh1IE1hciAxOCAxMjozOTowNiAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBNaW5vciBjbGVhbnVwLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBGaXggYnVnIChkb24ndCBjbG9iYmVyIGJpdHBvcykuCisKK1RodSBNYXIgMTggMDA6MDg6NDAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvdmF4L3Ztcy5oIChQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4pOiBBZGQgI3VuZGVmLgorCitXZWQgTWFyIDE3IDE3OjI4OjE3IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKHByZV9sZHdtLCBwcmVfc3R3bSk6IE5hbWUgdGhlc2UgcGF0dGVybnMgdG8gbWFrZQorCWdlbmVyYXRpbmcgdGhlbSBlYXNpZXIuCisJKHBvc3RfbGR3bSwgcG9zdF9zdHdtKTogTmV3IHBhdHRlcm5zLgorCShhZGRfaGlnaF9jb25zdCk6IE5ldyBwYXR0ZXJuLgorCShyZXR1cm4pOiBOZXcgcGF0dGVybi4KKwkqIHBhLmMgKHBvc3RfY2ludF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShocHBhX2Nhbl91c2VfcmV0dXJuX2luc25fcCk6IE5ldyBmdW5jdGlvbi4KKworV2VkIE1hciAxNyAxNzoyNDoyOSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIE1laXNzbmVyIHZlcnNpb24gdG8gMzUuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxvbmctY2FsbHMsIGRlbGV0ZSAtbXdjKiBzd2l0Y2hlcy4KKworCSogbWlwcy5tZCAoY2FsbCBpbnNucyAmIGV4cGFuZGVycyk6IElmIC1tbG9uZy1jYWxscywgcmVxdWlyZQorCWZ1bmN0aW9uIGFkZHJlc3MgdG8gYmUgaW4gYSByZWdpc3Rlci4KKworCSogeC1pcmlzIChPTERDQyk6IElyaXMgbm93IG5lZWRzIC1XZiwtWE5oMTUwMCBhcyB3ZWxsLgorCitXZWQgTWFyIDE3IDE2OjAwOjI5IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoSVNfUkVMT0FESU5HX1BTRVVET19QKTogTmV3IHN1YnJvdXRpbmUgZm9yCisJRVhUUkFfQ09OU1RSQUlOVC4KKwkoRVhUUkFfQ09OU1RSQUlOVCk6IFVzZSBJU19SRUxPQURJTkdfUFNFVURPX1AuICBBY2NlcHQgYW55IE1FTSBmb3IKKwlgUScgY29uc3RyYWludCBkdXJpbmcgdGhlIHJlbG9hZCBwYXNzLgorCisJKiBwYS5oIChTRUNPTkRBUllfTUVNT1JZX05FRURFRCk6IERlZmluZS4gIAorCShTRUNPTkRBUllfTUVNT1JZX05FRURFRF9SVFgpOiBEZWZpbmUuCisJKiBwYS5jIChvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBSZW1vdmUgY29kZSB0byBzdXBwb3J0IEdSPC0+RlAKKwljb3BpZXMuCisJKiBwYS5tZCAobW92cWksIG1vdmhpLCBtb3ZzaSwgbW92ZGksIG1vdnNmLCBtb3ZkZik6IFJlbW92ZSBzdXBwb3J0CisJZm9yIEdSPC0+RlAgY29waWVzLgorCShmaXhfdHJ1bmNzZnNpMiwgZml4X3RydW5jZGZzaTIpOiBMaWtld2lzZS4KKworV2VkIE1hciAxNyAxNDo1ODo0OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy92YXgvdm1zLmggKFNUUlVDVF9WQUxVRSk6IERlZmluZWQuCisJKFNUUlVDVF9WQUxVRV9SRUdOVU0pOiBBZGQgI3VuZGVmLgorCitXZWQgTWFyIDE3IDE0OjIzOjI1IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBnbnUuYWkubWl0LmVkdSkKKworCSogcGEubWQgKGJyYW5jaC1vbi1iaXQpOiBOZXcgcGF0dGVybnMuCisJKiBwYS5jIChwY19vcl9sYWJlbF9vcGVyYW5kKTogTmV3IHByZWRpY2F0ZS4KKworV2VkIE1hciAxNyAwMjo0Njo1OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrL202OGsubWQgKG1vdnFpKTogSW4gYWRkcmVzcyByZWcgY2FzZSwgaWYgZDAKKwlhcHBlYXJzIGluIHRoZSBhZGRyZXNzLCB1c2UgZDEgaW5zdGVhZCBhcyBpbnRlcm1lZGlhdGUgcmVnLgorCitUdWUgTWFyIDE2IDE3OjQyOjE0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChGSVhFRF9SRUdOT19QKTogUmVtb3ZlIHByZXZpb3VzIGNoYW5nZTsgYWxsIGNhbGxlcnMgYnV0CisJb25lIGFscmVhZHkgY2hlY2suCisJKENIRUFQX1JFRyk6IE9ubHkgY2FsbCBGSVhFRF9SRUdOT19QIGZvciBoYXJkIHJlZ3MuCisJKGZvbGRfcnR4KTogQ2xhcmlmeSBjb21tZW50cy4KKworVHVlIE1hciAxNiAxNDo1NTo0MCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHgtYXBvbGxvNjggKENGTEFHUywgTElCR0NDMl9DRkxBR1MpOiBEZWxldGUgb3ZlcnJpZGVzIGFuZAorCWNvbW1lbnQgd2h5IHRoZXkgd2VyZSB3cm9uZy4KKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yLCBBUlJBUllfUkVGKTogSWYgZXhlcm4sIHRoZW4gZW5kCisJdGVtcG9yYXJ5IGFsbG9jYXRpb24gYmVmb3JlIGJ1aWxkaW5nIHR5cGUuCisKKwkqIHNwYXJjLmggKFNFQ09OREFSWV9NRU1PUllfTkVFREVEX1JUWCk6IERlZmluZS4KKwkqIHJlbG9hZC5jIChnZXRfc2Vjb25kYXJ5X21lbSk6IFVzZSBtYWNybyBTRUNPTkRBUllfTUVNT1JZX05FRURFRF9SVFguCisKK1R1ZSBNYXIgMTYgMDM6NDk6MTMgMTk5MyAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjc2UuYyAoRklYRURfUkVHTk9fUCk6IFBzZXVkb3MgY2FuJ3QgYmUgZml4ZWQgcmVncy4KKworVHVlIE1hciAxNiAwNDozMzo0MSAxOTkzICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKyAKKwkqIGNjY3AuYyAobWFpbik6IFJlcG9ydCBlcnJvcnMgaW4gb3V0cHV0IHRvIHBjcF9vdXRmaWxlLgorCitNb24gTWFyIDE1IDIxOjMwOjMyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jICh3cml0ZV9vdXRwdXQpOiBUZXN0IHZhbHVlIG9mIGB3cml0ZSc7IHJlcG9ydCBlcnJvcnMuCisJKHdyaXRlX291dHB1dCk6IFVzZSBwZmF0YWxfd2l0aF9uYW1lIGZvciBlcnJvcnMuCisJKG91dF9mbmFtZSk6IFZhciBub3cgZmlsZS1zY29wZS4KKworTW9uIE1hciAxNSAyMDo1MjoxNyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEVYVFJBX0NPTlNUUkFJTlQsIGNhc2UgJ1MnKTogRG8gbm90IGFjY2VwdCBDT05TVEFOVF9QIGlmCisJVEFSR0VUX0xPTkdfQ0FMTFMuCisKKwkqIHBhLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBNZXJnZSBzdHJpY3QgYW5kIG5vbi1zdHJpY3QgdmFyaWFudHMuCisJRGVsZXRlICdSJyBjb25zdHJhaW50LgorCitNb24gTWFyIDE1IDE4OjM4OjIyIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBzaWNzLnNlKQorCisJKiBleHBtZWQuYyAobGVhX21heF9tdWwpOiBEZWxldGUuCisJKGluaXRfZXhwbWVkKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBJLgorCShlbnVtIGFsZ19jb2RlKTogTmV3IHRhZyBhbGdfc2hpZnQuICBEb2N1bWVudCBpdC4KKwkoc3ludGhfbXVsdCk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgTi4gIEhhbmRsZSBuZXcgdHJpdmlhbCBjYXNlCisJZmlyc3QsIGZvciBUIDw9IDEuICBHZW5lcmFsaXplIHNoaWZ0aW5nIGNvZGUgdG8gc2hpZnQgd2hlbmV2ZXIgYQorCW51bWJlciBpcyBldmVuOyB1c2UgYWxnX3NoaWZ0IGZvciB0aGlzLiAgU2V0IGJlc3RfYWxnLT5vcHMgb25seSBpbgorCXRyaXZpYWwgY2FzZS4gIENsZWFuIHVwIGNvc3QgY2FsY3VsYXRpb24gY29kZSBmb3IgdGhlIGBzaW1wbGUKKwljYXNlJyBhdCB0aGUgZW5kOyB1c2Ugc2hpZnRhZGRfY29zdCB3aGVuIGFwcHJvcHJpYXRlLiAgQ29tYmluZQorCWRlY2xhcmF0aW9ucyBvZiBRIGFuZCBtb3ZlIHRvIHRvcCBvZiBmdW5jdGlvbi4gIEVsaW1pbmF0ZSB1c2Ugb2YgUQorCWluIGZhY3RvcmluZyBjYXNlcy4gIElmIHdlIGFyZSBnZXR0aW5nIHRvbyBsb25nIGEgc2VxdWVuY2UgZm9yCisJYHN0cnVjdCBhbGdvcml0aG0nIHRvIHJlY29yZCwgZmFpbC4KKwkoZXhwYW5kX211bHQpOiBIYW5kbGUgYWxnX3NoaWZ0IGluc3RlYWQgb2YgYWxnX2FkZF90X20yIGFzIGZpcnN0CisJb3BlcmF0aW9uLiAgSW4gUkxUIGVtaXQgbG9vcCwgaGFuZGxlIGFsZ19zaGlmdDsgc3BlY2lhbCBjYXNlCisJTE9HID09IDAgZm9yIGFsZ19hZGRfdF9tMiBhbmQgYWxnX3N1Yl90X20yLgorCitNb24gTWFyIDE1IDE2OjQ0OjA4IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSAjaWZkZWYuCisKK01vbiBNYXIgMTUgMTQ6MzM6NTIgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzY2hlZC5jIChyZWdfa25vd25fZXF1aXZfcCk6IE5ldyB2YXJpYWJsZS4KKwkoaW5pdF9hbGlhc19hbmFseXNpcyk6IEFsbG9jYXRlIGFuZCBjb21wdXRlIHJlZ19rbm93bl9lcXVpdl9wLgorCShzY2hlZF9hbmFseXplXzEpOiBSZWVuYWJsZSBjb2RlIGZvciBSRUdfRVFVSVYgbm90ZXMsIHVzaW5nCisJcmVnX2tub3duX2VxdWl2X3Agc28gdGhhdCBpdCBpcyBvbmx5IHVzZWQgb24gUkVHX0VRVUlWIG5vdGVzLgorCShzY2hlZF9hbmFseXplXzIpOiBMaWtld2lzZS4gIE9ubHkgcGFzcyBtZW1vcnkgYWRkcmVzc2VzIHRvIHRoZQorCXNjaGVkX2FuYWx5emVfMiBjYWxsLgorCisJKiB4bS1zb2wyLmggKE5PX1NZU19TSUdMSVNUKTogRGVmaW5lLgorCisJKiBpOTYwLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IEZvciBNVUxULCBzZXQgaXJlZyBub3QgYnJlZy4KKworCSogc3BhcmMubWQgKHplcm9fZXh0ZW5kcWlzaTIrNCwrNSk6IEFkZCBuZXcgcGF0dGVybnMgZm9yIGNvbWJpbmluZworCWEgU0ktPlFJIG1vZGUgdHJ1bmNhdGUgd2l0aCBhbiBpbnNuIHRoYXQgc2V0cyB0aGUgY29uZGl0aW9uIGNvZGVzLgorCisJKiBjb25maWcuc3ViIChzcGFyY2xpdGUsIHNwYXJjbGl0ZS0qKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBjb25maWd1cmUgKHNwYXJjbGl0ZS0qLSopOiBMaWtld2lzZS4KKwkqIHNwYXJjL2xpdGUuaDogTmV3IGZpbGUuCisKKwkqIHNjaGVkLmMgKGFkanVzdF9wcmlvcml0eSk6IENvbW1lbnQgdW5yZWFjaGFibGUgY29kZS4KKwkobWVtcmVmc19jb25mbGljdF9wKTogQWRkIGNvbW1lbnQgYWJvdXQgRm9ydHJhbiBhbGlhc2luZy4KKworTW9uIE1hciAxNSAxMzo1NDowNiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfcGx1c19taW51cyk6IFJlbW92ZSBsYXN0IGNoYW5nZS4gIEluc3RlYWQsCisJY291bnQgaW5pdGlhbCBvcGVyYW5kcyBhbmQgdGVzdCBhZ2FpbnN0IHRoYXQgY291bnQgdG8gc2VlIGlmIHdlCisJZGlkIGFueXRoaW5nLgorCisJKiBhbHBoYS5oIChBU01fT1VUUFVUX3tJTlQsU0hPUlQsQ0hBUixCWVRFfSk6IFRydW5jYXRlIGNvbnN0YW50CisJdG8gbWF4aW11bSByYW5nZSBwZXJtaXR0ZWQgaW4gb3JkZXIgdG8gYXZvaWQgYXNzZW1ibGVyIGVycm9yLgorCitNb24gTWFyIDE1IDEzOjM3OjM1IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKHNoWzEyM11hZGQgcGF0dGVybnMpOiBVc2UgcmVnaXN0ZXJfb3BlcmFuZCwgbm90IAorCXNoYWRkX29wZXJhbmQuCSAgICAKKwkoc2hbMTIzXWFkZCBwYXR0ZXJucyBmb3IgcmVsb2FkKTogU3BlY2lhbCBwYXR0ZXJucyB0byBhdm9pZAorCWxvc3NhZ2UgZHVlIHRvIHJlbG9hZCBwcm9ibGVtcy4KKwkqIHBhLmMgKHNoYWRkX29wZXJhbmQpOiBEZWxldGUuCisgCitNb24gTWFyIDE1IDAwOjMxOjIwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChyczYwMDAtaWJtLWFpeDMuMik6IFJlbmFtZWQgZnJvbSByczYwMDAtaWJtLWFpeDMyLgorCitTdW4gTWFyIDE0IDIyOjU0OjEwIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcmVvcmcuYyAoZmluZF9lbmRfbGFiZWwpOiBVcGRhdGUgdW5maWxsZWRfc2xvdHMgaWYgdGhlIHJldHVybgorCWluc24gd2UgbWFrZSBoYXMgYSBkZWxheSBzbG90LgorCitTdW4gTWFyIDE0IDIxOjI3OjQ4IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBzaWNzLnNlKQorCisJKiBleHBtZWQuYyAoc2hpZnRfY29zdCk6IE5vdyBhIHZlY3Rvci4KKwkoc2hpZnRhZGRfY29zdCk6IE5ldyB2ZWN0b3IgZm9yIGNvc3Qgb2YgKE4gKiBhICsgYikgaW5zdHJ1Y3Rpb25zLgorCShzaGlmdHN1Yl9jb3N0KTogTmV3IHZlY3RvciBmb3IgY29zdCBvZiAoTiAqIGEgLSBiKSBpbnN0cnVjdGlvbnMuCisJKGxlYV9jb3N0KTogUmVtb3ZlZC4KKwkoaW5pdF9leHBtZWQpOiBJbml0aWFsaXplIG5ldyB2ZWN0b3JzLiAgVXNlIEFTSElGVCwgbm90IExTSElGVC4KKwlSZW1vdmUgY29kZSBpbml0aWFsaXppbmcgbGVhX2Nvc3QuCisJKGVudW0gYWxnX2NvZGUpOiBOZXcgZGVmaW5pdGlvbi4KKwkoc3ludGhfbXVsdCk6IFJld3JpdGUgZm9yIGJldHRlciBhbGdvcml0aG1zIGFuZCBmYXN0ZXIgb3BlcmF0aW9uLgorCShleHBhbmRfbXVsdCk6IFJld3JpdGUgY29kZSBmb3IgY29uc3RhbnQgbXVsdGlwbGljYXRpb24uCisKK1N1biBNYXIgMTQgMDY6MzQ6MjggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb2JqYy1hY3QuYyAoYnVpbGRfb2JqY19zeW10YWJfdGVtcGxhdGUpOiBDb3JyZWN0bHkgYnVpbGQgaW5kZXgKKwl0eXBlIGZvciAwLWxlbmd0aCBhcnJheS4KKwkoYnVpbGRfb2JqY19tZXRob2RfY2FsbCwgZ2V0X2NsYXNzX3JlZmVyZW5jZSwgZ2V0X3N1cGVyX3JlY2VpdmVyKToKKwlDYWxsIGFzc2VtYmxlX2V4dGVybmFsIG9uIGFueXRoaW5nIHdlIGFyZSBhYm91dCB0byBnZW5lcmF0ZSBhIGNhbGwgdG8uCisJKGhhbmRsZV9jbGFzc19yZWYpOiBQdXQgY29uc3RhbnQgaW4gcmVhZG9ubHktZGF0YSBzZWN0aW9uLCBub3QgdGV4dC4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3BsdXNfbWludXMpOiBSZWplY3QgInNpbXBsaWZpY2F0aW9ucyIgdGhhdCBhcmUKKwl0b28gY29tcGxleCBpbiBmb3JtLgorCUNvcnJlY3Qgc2lnbiBlcnJvciBpbiBleHBhbmRpbmcgTk9ULgorCitTdW4gTWFyIDE0IDAwOjAyOjEyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBWZXJpZnkgcmVsb2FkX291dFtqXSAhPSAwCisJYmVmb3JlIGNvbXBhcmluZyB3aXRoIHJlbG9hZF9lYXJseWNsb2JiZXIgZWxlbWVudHMuCisKK1NhdCBNYXIgMTMgMjE6MDU6MTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IFJlc3RvcmUgaW5oaWJpdF9kZWZlcl9wb3AgYmVmb3JlIHBvcHBpbmcgYXJncworCXNvIHRoYXQgcG9wcyByZWFsbHkgZG8gZ2V0IGRlZmVycmVkIGlmIGFwcHJvcHJpYXRlLgorCitTYXQgTWFyIDEzIDE4OjEzOjMwIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9wbHVzX21pbnVzKTogV2hlbiBzZWVpbmcgaWYgd2UgaGF2ZSByZWR1Y2VkIHRoZQorCW51bWJlciBvZiBvcGVyYW5kcywgZW5zdXJlIHdlIGNvdW50IGEgQ09OU1QgcmVzdWx0IGFzIHR3byBvcGVyYW5kcy4KKworCSogY2FsbHMuYywgZXhwci5jOiBDb3JyZWN0bHkgZGVmaW5lIFBVU0hfQVJHU19SRVZFUlNFRC4KKworU2F0IE1hciAxMyAxNjo0OToxMCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IEluc25zIHdoaWNoIGFjY2VzcyAlcjIgY2FuCisJbm90IGJlIHVzZWQgdG8gZmlsbCB0aGUgZXBpbG9ndWUncyBkZWxheSBzbG90LgorCitTYXQgTWFyIDEzIDE1OjMxOjAyIDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKGVtaXRfc3dhcF9pbnNuKTogSWYgZW1pdHRpbmcgYWZ0ZXIgYSBjYzAgc2V0dGVyLAorCWxpbmsgdGhlIGNjMCBpbnNucy4KKworRnJpIE1hciAxMiAxNzo0NTozNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrL3htLW1vdDMzMDAuaCAoVVNFX0NfQUxMT0NBKTogRGVmaW5lIGlmIG5vdCBfX0dOVUNfXy4KKwkqIGNvbmZpZy9tNjhrL3gtYWxsb2NhLWM6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtNjhrLW1vdG9yb2xhLXN5c3YqKTogVXNlIGl0LgorCisJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogSGFuZGxlIGZhaWx1cmUgb2YgZ2VuX21vdnN0ci4uLgorCisJKiBzdG9yLWxheW91dC5jICh2YXJpYWJsZV9zaXplKTogQmV0dGVyIGVycm9yIGZvciBkaXYgYnkgMCBpbiBzaXplLgorCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRXJyb3IgZm9yIGRpdiBieSAwIGluIGFycmF5IHNpemUuCisKK0ZyaSBNYXIgMTIgMTc6MjU6MzUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkoc3RydWN0IG1vdmVfYnlfcGllY2VzKTogTW92ZSBkZWZpbml0aW9uIGJlZm9yZSBmdW5jdGlvbgorCWZvcndhcmQgZGVjbHMuCisKKwkqIHJzNjAwMC5oLCBhMjlrLmggKFBST01PVEVfTU9ERSk6IEZpeCB0eXBvLgorCisJKiBjc2UuYyAocmVmZXJzX3RvX21lbV9wKTogVXNlIHJ0eF9lcXVhbF9wIHRvIHNlZSBpZiBiYXNlcworCWFyZSBlcXVhbC4KKworCSogY3NlLmMgKHNldF9ub252YXJ5aW5nX2FkZHJlc3NfY29tcG9uZW50cyk6IEZpeCB0eXBlIG1pc21hdGNoIHdpdGgKKwljYWxsZXIuCisJKHJlZmVyc190b19tZW1fcCk6IENhbGwgcHJvcGVybHkgaW4gc2Vjb25kIGNhbGwuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEZpeCBidWcgaW4gbGFzdCBjaGFuZ2UuCisKK0ZyaSBNYXIgMTIgMDc6MjU6NDMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogRm9yIGRvdWJsZXdvcmQgaW50IGFkZGl0aW9uLAorCWNsb2JiZXIgdGhlIHdob2xlIHJlZ2lzdGVyIGF0IHRoZSBzdGFydC4KKworRnJpIE1hciAxMiAwMzoxOToyNiAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHJlZy1zdGFjay5jIChnZXRfdHJ1ZV9yZWcpOiBEb24ndCBpZ25vcmUgRkxPQVRfVFJVTkNBVEUuCisJKHN1YnN0X3N0YWNrX3JlZ3NfcGF0KTogU3Vic3RpdHV0ZSBpbiBGTE9BVF9UUlVOQ0FURSBpbnNucy4KKworCShjb21wYXJlX2Zvcl9zdGFja19yZWcpOiBSZXNldCBpbnNuIGNvZGUgYWZ0ZXIgc3dhcHBpbmcgb3BlcmFuZHMuCisKKwkqIGkzODYuaCAoRkxPQVRfQ0xBU1NfUCk6IE5ldyBtYWNyby4KKwkoUkVHSVNURVJfTU9WRV9DT1NUKTogVXNlIGl0IGluc3RlYWQgb2YgY29tcGFyaW5nIHRvIEZMT0FUX1JFR1MuCisJKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBMaWtld2lzZS4KKwkoU0VDT05EQVJZX01FTU9SWV9ORUVERUQpOiBMaWtld2lzZS4KKwkoQ0xBU1NfTUFYX05SRUdTKTogTGlrZXdpc2UuCisKKwkoU0VMRUNUX0NDX01PREUpOiBVc2UgVk9JRG1vZGUgZm9yIG5vbi1GUC1lcXVhbGl0eSBjb21wYXJpc29ucy4KKworCSogaTM4Ni5tZCAodHJ1bmNkZnNmMik6IFJld3JpdGUgdG8gYWxsb3cgRkxPQVRfUkVHUyBpbiBjb25zdHJhaW50cworCWZvciBiZXR0ZXIgcmVnaXN0ZXIgcHJlZmVyZW5jZXMuCisKKwkobW92TSk6IElmIFJFR19XQVNfMCwgbWFrZSBzdXJlIHRoZSByZWcgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlbi4KKworCShjbXBNIGV4cGFuZGVycyk6IERvbid0IGFsbG93IGJvdGggb3BlcmFuZHMgdG8gYmUgTUVNLgorCVVzZSBWT0lEbW9kZSBmb3IgdGhlIENPTVBBUkUgcnR4IGluc3RlYWQgb2YgQ0Ntb2RlLgorCShjbXBNIHJlY29nbml6ZXJzKTogTGlrZXdpc2UuCisJUmVtb3ZlIGNvbnN0cmFpbnRzIGZvciBjb25zdGFudHMgZnJvbSBvcGVyYW5kIDAuCisKKwkoY21wZGYsY21wc2YgcmVjb2duaXplcnMpOiBXaGVuIHVzaW5nIFZPSURtb2RlIGFzIG1vZGUgb2YgdGhlCisJQ09NUEFSRSBydHgsIHJlcXVpcmUgdGhhdCB0aGUgbW9kZSBiZSBleGFjdGx5IFZPSURtb2RlLgorCisJKiBpMzg2LmMgKFZPSURtb2RlX2NvbXBhcmVfb3ApOiBOZXcgb3BlcmFuZCBwcmVkaWNhdGUgZnVuY3Rpb24uCisKKwkqIHZheC5tZCAobW92TSk6IElmIFJFR19XQVNfMCwgbWFrZSBzdXJlIHRoZSByZWcgaGFzbid0IGNoYW5nZWQKKwlzaW5jZSB0aGVuLgorCSogdGFob2UubWQgKG1vdk0pOiBMaWtld2lzZS4KKworVGh1IE1hciAxMSAxOToyMzo1MSAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBmdW5jdGlvbi5jIChhZ2dyZWdhdGVfdmFsdWVfcCk6IFJFVFVSTl9JTl9NRU1PUlkgbm93IGhhbmRsZXMKKwlCTEttb2RlIHZhbHVlcy4KKwkqIGV4cHIuaCAoUkVUVVJOX0lOX01FTU9SWSk6IEhhbmRsZSBCTEttb2RlIHZhbHVlcy4KKwkqIGkzODYvc3lzdjQuaCAoUkVUVVJOX0lOX01FTU9SWSk6IERpdHRvLgorCSogbTg4ay9tODhrLmggKFJFVFVSTl9JTl9NRU1PUlkpOiBEaXR0by4KKwkqIGk5NjAvaTk2MC5oIChSRVRVUk5fSU5fTUVNT1JZKTogRGl0dG8uCisJKiBtNjhrL2Fwb2xsbzY4LmggKFJFVFVSTl9JTl9NRU1PUlkpOiBEaXR0by4KKwkqIG1pcHMvbWlwcy5oIChSRVRVUk5fSU5fTUVNT1JZKTogRGl0dG8uCisJKiBzcGFyYy9zcGFyYy5oIChSRVRVUk5fSU5fTUVNT1JZKTogRGl0dG8uCisJKiBhbHBoYS9hbHBoYS5oIChSRVRVUk5fSU5fTUVNT1JZKTogRGl0dG8uCisJKiByb21wL3JvbXAuaCAoUkVUVVJOX0lOX01FTU9SWSk6IERpdHRvLgorCSogcnM2MDAwL3JzNjAwMC5oIChSRVRVUk5fSU5fTUVNT1JZKTogRGl0dG8uCisJKiBoODMwMC9oODMwMC5oIChSRVRVUk5fSU5fTUVNT1JZKTogRGl0dG8uCisKK1RodSBNYXIgMTEgMTk6MDI6NTUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuaCAoUlRYX0NPU1QsIGNhc2UgTVVMVCk6IEhhbmRsZSBzOGFkZHggYW5kIHM0YWRkeC4KKwkoUlRYX0NPU1QsIGNhc2UgTVVMVCk6IENvcnJlY3RseSBhc3NpZ24gY29zdCB0byBtdWx0aXBsaWVzIGJ5IGEKKwlwb3dlciBvZiB0d28uCisJKFJUWF9DT1NULCBjYXNlIEFTSElGVCwgQVNISUZUUlQsIExTSElGVFJULCBJRl9USEVOX0VMU0UpOiBOZXcgY2FzZXMuCisKKwkqIGNzZS5jIChDSEVBUF9SRUcpOiBOZXcgbWFjcm87IG1ha2VzIHZpcnR1YWwgcmVncyBjaGVhcCB0b28uCisJKENPU1QpOiBVc2UgQ0hFQVBfUkVHLgorCShydHhfY29zdCwgY2FzZSBSRUcpOiBVc2UgQ0hFQVBfUkVHIHRvIHJldHVybiB6ZXJvIGZvciBzb21lIFJFR3MuCisKK1RodSBNYXIgMTEgMDc6NDc6MDkgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoRlAgc0NDIGluc24pOiBEZWxldGUuCisJKHNDQyBkZWZpbmVfZXhwYW5kcyk6IEZBSUwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIEZQIHNDQyBpbnNucy4KKwkqIHBhLmMgKGdlbl9zY29uZF9mcCk6IERlbGV0ZS4KKwkqIHBhLmggKHRvcGxldmVsKTogRGVsZXRlIGRlY2xhcmF0aW9uIG9mIGdlbl9zY29uZF9mcC4KKworCSogY3NlLmMgKHNldF9ub252YXJ5aW5nX2FkZHJlc3NfY29tcG9uZW50cyk6IE5ldyBmdW5jdGlvbi4KKwkoaW52YWxpZGF0ZSk6IFVzZSBzZXRfbm9udmFyeWluZ19hZGRyZXNzX2NvbXBvbmVudHMgaW5zdGVhZCBvZiAKKwljb21wdXRpbmcgdGhlbS4KKwkocmVmZXJzX3RvX21lbV9wKTogTGlrZXdpc2UuICBTaW1wbGlmeSBjaGVja3MgZm9yIGNvbmZsaWN0aW5nCisJbWVtb3J5IGFjY2Vzc2VzLiAgTWFrZSBzdGF0aWMuCisJKiBsb29wLmMgKGFkZHJfb3ZlcmxhcF9wKTogRGVsZXRlLgorCitXZWQgTWFyIDEwIDIzOjUyOjQwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IERlbGV0ZSAke0xJQn0vRE9ORSBqdXN0IGJlZm9yZSBleGl0LgorCitXZWQgTWFyIDEwIDEyOjI3OjUxIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuYyAocmVnX29yX2NpbnRfbW92ZV9vcGVyYW5kKTogVXNlIGNpbnRfb2tfZm9yX21vdmUuCisKKwkqIHBhLm1kIChhZGQgcmVnIGFuZCBsYXJnZSBpbnQpOiBOZXcgZGVmaW5lIHNwbGl0cyBmb3IgdGhlIGNvbWJpbmVyLgorCSogcGEuYyAoY2ludF9va19mb3JfbW92ZSk6IE5ldyBmdW5jdGlvbi4gIFJldHVybnMgMSBpZmYgdGhlIGdpdmVuCisJQ09OU1RfSU5UIGNhbiBiZSBsb2FkZWQgaW50byBhIHJlZ2lzdGVyIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgorCShtb3ZlX29wZXJhbmQpOiBVc2UgY2ludF9va19mb3JfbW92ZS4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplLCBjbGF1c2UgZm9yIGBpZiAoZm9vKSBiKysnKToKKwlEbyB0aGlzIHJlZ2FyZGxlc3Mgb2YgQlJBTkNIX0NPU1QgaWYgSEFWRV9pbmNzY2Mgb3IgCisJSEFWRV9kZWNzY2MgaXMgZGVmaW5lZC4KKworV2VkIE1hciAxMCAxMTo1MDowNiAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAoY29uZGl0aW9uYWwgbW92ZSk6IFVzZSAlQiBmb3Igb3V0cHV0IHdoZW4gYXBwcm9wcmlhdGUuCisgICAgICAgIChjb25kaXRpb25hbCBtb3ZlIHdpdGggc2Vjb25kIG9wZXJhbmQgPT0gMCk6IE5ldyBwYXR0ZXJuLgorCSogcGEuYyAocmVnX29yX2NpbnRfbW92ZV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShtb3ZlX29wZXJhbmQpOiBBZGQgaGVhZGVyIGNvbW1lbnQuCisKK1dlZCBNYXIgMTAgMDE6NDM6NDMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdC5jIChPQkpDX0dFTl9NRVRIT0RfTEFCRUwpOiBDb252ZXJ0IGNvbG9ucyB0byBfJ3MuCisJRG9uJ3QgdXNlIHRoZSBjYXRlZ29yeSBuYW1lIG9yIHRoZSBudW1iZXIuCisKKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IE5ldyBvcHRpb24gLW5vc3RhcnRmaWxlcy4KKworVHVlIE1hciAgOSAxODo1NTo0MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbnZlcnQuYyAoY29udmVydF90b19jb21wbGV4KTogQXZvaWQgdXNpbmcgY29tcHR5cGVzLgorCitUdWUgTWFyICA5IDExOjMzOjMyIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBvYmpjLWFjdC5jICgjaWZkZWYgTkVYVF9PQkpDX1JVTlRJTUUpOiBDbG9zZSAjaWZkZWYgcHJvcGVybHkuCisKK1R1ZSBNYXIgIDkgMDA6MDM6MDMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmbGFncy5oIChmbGFnX3ZvbGF0aWxlX2dsb2JhbCk6IERlY2xhcmVkLgorCisJKiBjLWRlY2wuYyAoZGVmaW5lX2xhYmVsKTogVXNlIGN1cnJlbnQgbGluZSBudW1iZXIgaW4gZXJyb3IgbXNnLgorCitNb24gTWFyICA4IDE2OjExOjE4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2kzODYvaTM4Ni5oIChIQVJEX1JFR05PX01PREVfT0spOiBBZGQgc29tZSBjYXN0cy4KKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9hc21fcmVnX2xpZmUpOiBDYXN0IGNsYXNzIHRvIGludCBmb3IgaW5kZXhpbmcuCisKKwkqIHNkYm91dC5jIChQVVNIX0RFUklWRURfTEVWRUwpOiBDYXN0IGVudW1tIGNvbnN0YW50cyB0byBpbnQuCisKKwkqIHRvcGxldi5jIChmbGFnX3ZvbGF0aWxlX2dsb2JhbCk6IE5ldyB2YXJpYWJsZS4KKwkoZl9vcHRpb25zKTogQWRkIG9wdGlvbiBmb3IgaXQuCisJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IEhhbmRsZSB0aGF0IG9wdGlvbi4KKworCSogb2JqYy1hY3QuYyAocmVhbGx5X3N0YXJ0X21ldGhvZCk6IEFsd2F5cyB1c2UgT0JKQ19HRU5fTUVUSE9EX0xBQkVMLgorCVBhc3MgbWV0aG9kX3Nsb3QgYXMgYWRkaXRpb25hbCBhcmcuCisJKE9CSkNfR0VOX01FVEhPRF9MQUJFTCk6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24uCisJKiBjb25maWcvbTY4ay9uZXh0LmggKE9CSkNfR0VOX01FVEhPRF9MQUJFTCk6IEFjY2VwdCBhZGRpdGlvbmFsIGFyZy4KKworTW9uIE1hciAgOCAxMjowMTo0OSAxOTkzICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChjb25zdF9iaW5vcCk6IFdoZW4gZXZhbHVhdGluZyBhIHNoaWZ0LCBpZ25vcmUKKwlvdmVyZmxvd3MgZ2VuZXJhdGVkIGJ5IGZvcmNlX2ZpdF90eXBlLgorCitNb24gTWFyICA4IDA3OjI0OjMwIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChjc2VfZ2VuX2JpbmFyeSwgc2ltcGxpZnlfcGx1c19taW51cyk6IE5ldyBmdW5jdGlvbnMuCisJKGZpbmRfYmVzdF9hZGRyKTogVXNlIGNzZV9nZW5fYmluYXJ5LgorCShzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBmb2xkX3J0eCk6IExpa2V3aXNlLgorCVJlbW92ZSBtb3N0IHNwZWNpYWwtY2FzZXMgZm9yIFBMVVMgYW5kIE1JTlVTIGFuZCBjYWxsCisJc2ltcGxpZnlfcGx1c19taW51cyBpbnN0ZWFkLgorCUNsZWFuIHVwIHNvbWUgdGVzdHMgZm9yIEZQLgorCisJKiBjc2UuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKHN0cnVjdCBjc2VfYmFzaWNfYmxvY2tfZGF0YSk6IE1vdmUgdG8gZnJvbnQgb2YgZmlsZSBzaW5jZSBpdAorCWNvbnN0YWlucyBzdHJ1Y3QgdXNlZCBpbiBhIHByb3RvdHlwZS4KKwkocmVmZXJzX3RvX3AsIGZpbmRfYmVzdF9hZGRyKTogTm93IHN0YXRpYy4KKworCSogZXhwci5oOiBDbGVhbiB1cCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gZXhwci5jIGFuZAorCW9wdGFicy5jIGFuZCBhZGQgc29tZSBtaXNzaW5nIG9uZXMuCisKKwkqIG9wdGFicy5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkoaW5pdF9saWJmdW5jcyk6IFB1dCBhcmdzIGluIHByb3BlciBvcmRlci4KKworU3VuIE1hciAgNyAwNzo1OTozNCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbiBvZiBhcmcuCisKK1NhdCBNYXIgIDYgMTU6MDg6NTkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYzogSGFuZGxlIGxvbmcgb3B0aW9ucyBieSB0cmFuc2xhdGlvbiB0byBvbGQtc3R5bGUgb25lcy4KKwkodHJhbnNsYXRlX29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCisJKG9wdGlvbl9tYXApOiBOZXcgdGFibGUuCisKKwkqIGNvbmZpZy9pMzg2L3QtaXNjc2NvZGJ4OiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni0qLWlzYyosIGlbMzRdODYtKi1zY28uLi4pOiBVc2UgdGhhdCBpZiBzdGFicy4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBIYW5kbGUgU1VCUkVHIGluIHJlbG9hZF9lYXJseWNsb2JiZXIKKwl3aGVuIG1hdGNoaW5nIG91dHB1dCByZWxvYWRzIGZvciBzZXR0aW5nIHJlbG9hZF93aGVuX25lZWRlZC4KKworU2F0IE1hciAgNiAwODo0MzowOSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnZW5hdHRydGFiLmMgKHdyaXRlX3Rlc3RfZXhwcik6IFVzZSBJTlNOX0NPREUgPT0gLTIsIG5vdCAwLCBmb3IKKwljb25zdGFudCBhdHRyaWJ1dGVzLgorCisJKiBnZW5hdHRydGFiLmM6IEFkZCBwcm90b3R5cGVzIGluIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCUFkZCBzb21lIG1pc3NpbmcgcGFyYW1ldGVycyB0byBhIGZldyBjYWxscy4KKworU2F0IE1hciAgNiAwNzo0MTozNiAxOTkzICBEb3VnIEV2YW5zIChkamVAY3lnbnVzLmNvbSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBGaXggdHlwbyBpbiB1bmFsaWduZWQgY29kZS4KKworRnJpIE1hciA1IDIwOjMyOjI4IDE5OTMgIFBldGVyIFNjaGF1ZXIgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQorCisJKiBpMzg2L3N2cjNnYXMuaCwgaTM4Ni9zdnIzZGJ4LmgsIGkzODYvaXNjZGJ4LmgsIGkzODYvc2NvZGJ4LmgsCisJaTM4Ni9zY280ZGJ4LmgsIHN2cjMuaWZpbGUsIHN2cjN6LmlmaWxlOiBOZXcgZmlsZXMuCisJKiBjb25maWd1cmUgKGlbMzRdODYtLi4uKTogVXNlIHRoZW0gaWYgY29uZmlndXJlZCAtLXdpdGgtc3RhYnMuCisJKiBpMzg2L2lzY2NvZmYuaDogUmVuYW1lZCBmcm9tIGkzODYvaTM4NmlzYy5oLgorCSogaTM4Ni9pc2NnYXMuaDogUmVuYW1lZCBmcm9tIGkzODYvaTM4NmlzY2dhcy5oLgorCitGcmkgTWFyICA1IDE5OjQxOjUwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IFNwZWNpYWwgaGFuZGxpbmcgZm9yIHN0b3JpbmcgaW4KKwlSRVNVTFRfREVDTC4KKworRnJpIE1hciAgNSAxNzo0ODo0MSAxOTkzICBDaHJpcyBTbWl0aCAgKGNzbWl0aEBtb3phcnQuY29udmV4LmNvbSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBNb3ZlIGludGVnZXIgQ09OU1RfRE9VQkxFCisJZm9sZGluZyBvdXQgb2YgUkVBTF9JU19OT1RfRE9VQkxFIGNvbmRpdGlvbmFsLgorCShzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbik6IFB1dCBmbG9hdCBDT05TVF9ET1VCTEUgZm9sZGluZworCXVuZGVyIGEgUkVBTF9JU19OT1RfRE9VQkxFIGNvbmRpdGlvbmFsLgorCUFkZCBmb2xkaW5nIGZvciBpbnRlZ2VyIENPTlNUX0RPVUJMRSBjb21wYXJpc29ucy4KKworRnJpIE1hciAgNSAxNzozNzoyMCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5tZDogQWRkIG5ldyBkZWZpbmVfc3BsaXQgZm9yIGRvaW5nIHNpZ24tZXh0ZW5kZWQgYWRkcworCW9mIHNvbWUgbGFyZ2UgY29uc3RhbnRzIHVzaW5nIHNOYWRkbC4KKworCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfaW5zbnMpOiBJZiBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTLAorCWVuc3VyZSB3ZSBkb24ndCBwdXQgYW55IGluc25zIGJldHdlZW4gdGhlIHNldHRpbmcgb2YgdGhlIGZ1bmN0aW9uCisJcmV0dXJuIHJlZ2lzdGVyIGFuZCBpdCdzIHVzZS4KKworRnJpIE1hciAgNSAxNToxMTo0MSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEZJWEVEX1JFR0lTVEVSUyk6ICVyMiBpcyBubyBsb25nZXIgZml4ZWQuCisJKFJFR19BTExPQ19PUkRFUik6IFRyZWF0ICVyMiBhcyBhIGNhbGxlci1zYXZlZCBhbGxvY2F0YWJsZSAKKwlyZWdpc3Rlci4gICVyMzAgaXMgZml4ZWQgYW5kIHRoZXJlZm9yZSBhICJzcGVjaWFsIiByZWdpc3Rlci4KKwklZnIyMi0lZnIzMSBhcmUgY2FsbGVyLXNhdmVkLCBzbyBhbGxvY2F0ZSB0aGVtIGJlZm9yZSB0aGUgCisJY2FsbGVlLXNhdmVkIDEuMSBmcCByZWdpc3RlcnMuICBBbGxvY2F0ZSBmcCByZWdpc3RlcnMgYmVmb3JlCisJZ2VuZXJhbCByZWdpc3RlcnMuICBGaXggdHlwbyBmb3IgcmVnaXN0ZXIgNzkuCisKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFBlcmZvcm0gYW4gZWFybHkgJXIyIHJlc3RvcmUgCisJZXZlbiBpZiBhY3R1YWxfZnNpemUgaXMgemVyby4gIFRoaXMgY2FuIGhhcHBlbiBpZiAlcjIgaXMgdXNlZAorCWFzIGEgdGVtcG9yYXJ5IGluIGEgbGVhZiBmdW5jdGlvbi4KKworCSogcGEuaCAoRklSU1RfUFNFVURPX1JFR0lTVEVSKTogVXBkYXRlIHRvIHRha2UgaW50byBhY2NvdW50CisJcmVnaXN0ZXJzIHdoaWNoIGFyZSBubyBsb25nZXIga25vd24gdG8gdGhlIGNvbXBpbGVyLgorCShGSVhFRF9SRUdJU1RFUlMpOiBMaWtld2lzZS4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IExpa2V3aXNlLgorCShIQVJEX1JFR05PX05SRUdTKTogTGlrZXdpc2UuCisJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IExpa2V3aXNlLgorCShSRUdOT19SRUdfQ0xBU1MpOiBMaWtld2lzZS4KKwkoRlVOQ1RJT05fVkFMVUUpOiBMaWtld2lzZS4KKwkoTElCQ0FMTF9WQUxVRSk6IExpa2V3aXNlLgorCShGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogTGlrZXdpc2UuCisJKEZVTkNUSU9OX0FSR19SRUdOT19QKTogTGlrZXdpc2UuCisJKEZVTkNUSU9OX0FSRyk6IExpa2V3aXNlLgorCShSRUdOT19PS19GT1JfRlBfUCk6IExpa2V3aXNlLgorCShSRUdJU1RFUl9OQU1FUyk6IExpa2V3aXNlLgorCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBMaWtld2lzZS4gIEFkZCAlcjEgdG8gR0VORVJBTF9PUl9GUF9SRUdTCisJYW5kIEdFTkVSQUxfT1JfU05BS0VfRlBfUkVHUy4KKwkoUkVHX0FMTE9DX09SREVSKTogTGlrZXdpc2UuICBEb2N1bWVudCBhbmQgbWFrZSBhbGxvY2F0aW9uIG9yZGVyCisJInJlZ3VsYXIiIGFjcm9zcyAxLjAgYW5kIDEuMSBjcHVzLgorCisJKiBwYS5jIChjb21wdXRlX2ZyYW1lX3NpemUpOiBVcGRhdGUgdG8gdGFrZSBpbnRvIGFjY291bnQKKwlyZWdpc3RlciB3aGljaCBhcmUgbm8gbG9uZ2VyIGtub3duIHRvIHRoZSBjb21waWxlci4KKwkob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgorCShvdXRwdXRfYXJnX2Rlc2NyaXB0b3IpOiBMaWtld2lzZS4KKworCitGcmkgTWFyICA1IDEyOjQ1OjUxIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKToKKwlBZGQgY29tbWVudHMgZm9yIGZyYW1lX2Jhc2VfbmFtZSB1c2FnZSBpbiBsZWFmX2Z1bmN0aW9ucy4KKworCSogZ2NjLmMgKG1haW4pOiBQdXQgYXJndlswXSBpbiBjb2xsZWN0X29ic3RhY2sgaW5zdGVhZCBvZiBwcm9ncmFtbmFtZS4KKworCSogY3NlLmMgKG5vdGVfbWVtX3dyaXR0ZW4pOiBRSW1vZGUgdmFyeWluZyBzdHJ1Y3R1cmUgbWVtb3J5CisJYWNjZXNzZXMgY2FuIGFsaWFzIHNjYWxhcnMuCisKK1RodSBNYXIgIDQgMTA6MDU6NTIgMTk5MyAgSnVlcmdlbiBLZWlsICAoamtAbGVvLnRvb2xzLmRlKQorCisJKiBjLWRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyxjb21iaW5lX3Bhcm1fZGVjbHMpOiBDYWxsIGxheW91dF9kZWNsCisJZm9yIGEgcGFybSBkZWNsYXJlZCBmbG9hdCB3aGVuIGl0IGlzIGNoYW5nZWQgdG8gZG91YmxlIHVuZGVyIGEKKwl0cmFkaXRpb25hbCBjb21waWxhdGlvbi4KKworVGh1IE1hciAgNCAxNzo1Mjo1MiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfSU5UKTogSWYgVEFSR0VUX1NIQVJFRF9MSUJTLCB0aGVuIHJlZmVyZW5jZXMgdG8KKwlmdW5jdGlvbnMgd2hpY2ggZG8gbm90IG9jY3VyIGluIHRoZSB0ZXh0IHNwYWNlIG11c3QgaGF2ZSBhIFBMQUJFTAorCSgiUCUiKSBwcmVmaXggdG8gbWFrZSB0aGUgYXNzZW1ibGVyIGFuZCBsaW5rZXIgaGFwcHkuCisKK1RodSBNYXIgIDQgMTc6MTg6NTcgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogSW5pdGlhbGl6ZSBjb25zdF90aW55X3J0eCBmb3IKKyAgICAgICAgcGFydGlhbCBpbnRzIHRvby4KKworCSogY29udmVydC5jIChjb252ZXJ0X3RvX3BvaW50ZXIpOiBGaXggdHlwbyBjb21wYXJpbmcgc2l6ZSBvZgorCWludGVnZXIgYW5kIHBvaW50ZXJzLgorCSogdmFyYXNtLmMgKGltbWVkX2RvdWJsZV9jb25zdCk6IENvcGUgd2l0aCBNT0RFX1BBUlRJQUxfSU5ULgorCShvdXRwdXRfY29uc3RhbnRfcG9vbCk6IExpa2V3aXNlLgorCitUaHUgTWFyICA0IDE1OjE4OjE1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogRml4IGhhbmRsaW5nIG9mIENPTVBMRVhfRVhQUi4KKwlIYW5kbGUgYWxsIGNvbXBsZXggdmFsdWVzIHNwZWNpYWxseS4KKworVGh1IE1hciAgNCAxMzo0ODozOCAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAocmVjb2duaXplciBmb3IgZ2VuZXJhbCB1YWRkY20pOiBOZXcgcGF0dGVybi4KKworCSogcGEubWQgKGlvcnNpMyk6IE5ldyBERUZJTkVfRVhQQU5ELgorCShpb3JzaTMgcmVjb2duaXplciBmb3IgW3JlZyByZWddKTogTm93IHVubmFtZWQuCisJUHV0IG91dHB1dCB0ZW1wbGF0ZSBoZXJlLCBkb24ndCBjYWxsIG91dHB1dF9pb3IuCisJKiBwYS5jIChvdXRwdXRfaW9yKTogRG9uJ3QgaGFuZGxlIHJlZyBvcGVyYW5kcy4KKworVGh1IE1hciAgNCAxMzoxNDoxMyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEhhbmRsZSBjb21wbGV4IGNvbnN0YW50cyBhcyAid2lubmluZyIuCisJSGFuZGxlIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIuCisKK1RodSBNYXIgIDQgMTM6MDg6NTMgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWIgKGg4MzAwaGRzKTogQ2hhbmdlIGhkcyB0byBobXMuCisJKiBjb25maWd1cmUgKGg4MzAwLSotKik6IEFkZGVkLgorCSogaDgzMDAuYywgaDgzMDAuaCwgaDgzMDAubWQsIHQtaDgzMDAsIHhtLWg4MzAwLmg6IE5ldyBmaWxlcy4KKworVGh1IE1hciAgNCAxMDozMToxNyAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZ2NjLmMgKGxpbmtfY29tbWFuZF9zcGVjKTogQWRkIG1pc3NpbmcgXCBiZWZvcmUgbmV3bGluZSBpbnNpZGUKKwljaGFyYWN0ZXIgc3RyaW5nLgorCisJKiBjLXBhcnNlLmluIChhbGxfaXRlcl9zdG10X3NpbXBsZSk6IEFkZCBtaXNzaW5nIGNvbW1hIHNvIHRoYXQKKwlPYmplY3RpdmUgQyBjb21waWxlcy4KKworVGh1IE1hciAgNCAwMjo0Mzo0MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChlbWl0X25vX2NvbmZsaWN0X2Jsb2NrKTogRG9uJ3QgbW92ZSB0YXJnZXQgdG8gaXRzZWxmCisJaWYgdGhhdCB0YWtlcyBtdWx0aXBsZSBpbnNucy4KKwkoZXhwYW5kX2Jpbm9wKTogRm9yIGNvbXBsZXggbXVsdCBhbmQgZGl2LCBhdm9pZCBmZXRjaGluZyBvcGVyYW5kCisJY29tcG9uZW50cyBtb3JlIHRoYW4gb25jZSBmcm9tIG1lbW9yeS4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogSGFuZGxlIGNvbXBsZXggaW50ZWdlciB0eXBlcy4KKworV2VkIE1hciAgMyAxNjowMToxMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogSGFuZGxlIGNvbXBsZXggdHlwZXMuCisKKwkqIG1hY2htb2RlLmRlZjogQWRkIGNvbXBsZXggaW50ZWdlciBtb2Rlcy4KKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogSGFuZGxlIENPTVBMRVhfRVhQUi4KKworCSogYy10eXBlY2suYyAobHZhbHVlX3ApOiBIYW5kbGUgUkVBTFBBUlRfRVhQUiwgSU1BR1BBUlRfRVhQUi4KKwkoYnVpbGRfYmluYXJ5X29wLCBidWlsZF91bmFyeV9vcCk6IEhhbmRsZSBjb21wbGV4IHR5cGVzLgorCisJKiBjLXBhcnNlLmdwZXJmOiBBZGQgYF9fY29tcGxleCcsIGBfX2NvbXBsZXhfXycuCisJQWRkIGBfX2l0ZXJhdG9yJy4gIERlbGV0ZSBgaXRlcmF0b3InLgorCisJKiB0cmVlLmMgKGJ1aWxkX2NvbXBsZXgpOiBTZXQgdGhlIFRSRUVfVFlQRSBiYXNlZCBvbiByZWFsIHBhcnQuCisKKwkqIGMtbGV4LmggKFJJRF9DT01QTEVYKTogTmV3IGNvbnN0YW50LgorCSogYy1sZXguYyAoaW5pdF9sZXgpOiBJbml0aWFsaXplIHJpZCBwb2ludGVycyBmb3IgY29tcGxleC4KKwkoeXlsZXgpOiBIYW5kbGUgaSBvciBqIGluIG51bWVyaWMgY29uc3RhbnQuCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENyZWF0ZSBjb21wbGV4IHR5cGVzLgorCShncm9rZGVjbGFyYXRvcik6IEhhbmRsZSBjb21wbGV4IGtleXdvcmQuCisJRGlzdGluZ3Vpc2ggaW50LWJ5LWRlZmF1bHQgZnJvbSBpbnQga2V5d29yZC4KKwkqIGMtdHJlZS5oOiBEZWNsYXJlIHZhcnMgdG8gaG9sZCBjb21wbGV4IHR5cGVzLgorCisJKiBjLWNvbnZlcnQuYyAoY29udmVydCk6IEhhbmRsZSBjb252ZXJzaW9uIHRvIGNvbXBsZXggdHlwZS4KKwkqIGNvbnZlcnQuYyAoY29udmVydF90b19yZWFsKTogQ29udmVydCBjb21wbGV4IHRvIHJlYWwuCisJKGNvbnZlcnRfdG9faW50ZWdlcik6IExpa2V3aXNlLgorCShjb252ZXJ0X3RvX2NvbXBsZXgpOiBOZXcgZnVuY3Rpb24uCisJKiBjb252ZXJ0LmggKGNvbnZlcnRfdG9fY29tcGxleCk6IERlY2xhcmVkLgorCitXZWQgTWFyICAzIDE1OjM0OjM2IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAoYnVpbGRfcmFuZ2VfdHlwZSk6ICBOZXcgZnVuY3Rpb24uCisJKiB0cmVlLmMgKGJ1aWxkX2luZGV4XzJfdHlwZSk6IFJlLWltcGxlbWVudCB1c2luZyBidWlsZF9yYW5nZV90eXBlLgorCitXZWQgTWFyICAzIDA4OjM0OjQzIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKGxoc19sc2hpZnRfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkobGhzX2xzaGlmdF9jaW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKiBwYS5tZCAoYXNobHNpMyk6IFVzZSBsaHNfbHNoaWZ0X29wZXJhbmQgZm9yIG9wZXJhbmQgMS4KKwlDYWxsIGdlbl96dmRlcF9pbW0gd2hlbiBvcGVyYW5kIDEgaXMgYSBDT05TVF9JTlQuCisJKHp2ZGVwX2ltbSk6IE5ldyBwYXR0ZXJuLgorCisJKiBwYS5jIChwcmludF9vcGVyYW5kKTogSGFuZGxlIEwgYW5kIFAgZm9yIGJpdCBmaWVsZCBpbnN0cnVjdGlvbnMuCisJKiBwYS5tZCAoYXNoaWZ0IHJlY29nbml6ZXIgZm9yIFtyZWcgY29uc3RfaW50XSk6IFVzZSAlUCBhbmQgJUwKKwlvdXRwdXQgbW9kaWZpZXJzLgorCShhc2hpZnRydCByZWNvZ25pemVyIGZvciBbcmVnIGNvbnN0X2ludF0pOiBMaWtld2lzZS4KKwkobHNocnNpMyk6IExpa2V3aXNlLgorCShyb3Ryc2kzKTogUmVkdWNlIGludGVnZXIgYXJndW1lbnQgdG8gNSBiaXRzLgorCisJKiBwYS5tZDogUmVtb3ZlIHNvbWUgZW1wdHkgbGluZXMuCisKKwkqIHBhLmMgKHBhX2FkanVzdF9jb3N0KTogUmVwbGFjZSwgdGhlIGZ1bmN0aW9uIG9mIE1hciAyIHdhcyBhbiBvbGQKKwl2ZXJzaW9uLgorCShvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBVc2UgJXIgc3ludGF4IGZvciByZWdpc3RlcnMuCisKK1dlZCBNYXIgIDMgMDE6NDI6NDIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogdHJlZS5kZWYgKElOVEVHRVJfVFlQRSk6ICBDbGFyaWZ5IGNvbW1lbnQgdG8gbWFrZSBjbGVhciB0aGF0CisJSU5URUdFUl9UWVBFcyBhcmUgdXNlZCBmb3IgYXJiaXRyYXJ5IHJhbmdlIHR5cGVzIChpLmUuCisJc3ViLXJhbmdlcyBvZiBlbnVtcykgaW4gbGFuZ3VhZ2VzIHRoYXQgbmVlZCB0aGVtLgorCSogZGJ4b3V0LmMgKGRieG91dF90eXBlX3JhbmdlKTogIE5ldyBmdW5jdGlvbjogIENvbW1vbiBjb2RlCisJbmVlZGVkIGZvciBib3RoIHJhbmdlIHR5cGVzIGFuZCBhcnJheSBpbmRleCB0eXBlcy4KKwlGaXhlcyBzb21lIHByb2JsZW1zIGNvbW1vbiBpbiBib3RoIHBsYWNlczogIE5vdyBoYW5kbGVzCisJbm9uLXplcm8gbG93ZXIgYm91bmQsIHZhcmlhYmxlIGJvdW5kcyAoc29ydCBvZiksIGFuZCByYW5nZXMKKwlvZiBub24taW50ZWdlciAoZS5nLiBlbnVtKSB0eXBlcy4KKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFVzZSBkYnhvdXRfdHlwZV9yYW5nZS4KKworVHVlIE1hciAgMiAyMzozNDo0NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBVc2Ugc3RybGVuLCBub3Qgc2l6ZW9mLCBmb3Igb3VyX2ZpbGVfbmFtZS4KKworCSogYy1jb21tb24uYyAoY29udmVydF9hbmRfY2hlY2spOiBObyB3YXJuaW5nIGZvciBjb252ZXJ0aW5nCisJc2lnbmVkIGludGVnZXIgdG8gdW5zaWduZWQgb2Ygc2FtZSB3aWR0aC4KKworVHVlIE1hciAgMiAxODo1OTozOSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1LmVkdSkKKworCSogYy1pdGVyYXRlLmMgKGNvbGxlY3RfaXRlcmF0b3JzKTogSGFuZGxlIHNpbXBsZSBleHByZXNzaW9ucyBxdWlja2x5LgorCURvbid0IHRyeSB0byBpbnRlcnByZXQgb3BlcmFuZHMgdGhhdCBhcmUgUlRMIGFzIGlmIHRoZXkgd2VyZSB0cmVlcy4KKworCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBEb24ndCBzZXQgUkVHTk9fUE9JTlRFUl9GTEFHIGhlcmUuCisJKHJlZ19zY2FuX21hcmtfcmVmcyk6IFNldCBpdCBoZXJlLgorCUFjY2VwdCBJTlNOLCBub3QgVUlEIGFzIGFyZy4KKwkocmVnX3NjYW4pOiBDYWxsIHJlZ19zY2FuX21hcmtfcmVmcyB3aXRoIElOU04sIG5vdCBVSUQuCisKK1R1ZSBNYXIgIDIgMTg6MDM6MjUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjLWFjdC5jIChoYW5kbGVfY2xhc3NfcmVmKTogQ2FsbCBhc3NlbWJsZV9leHRlcm5hbC4KKworVHVlIE1hciAgMiAxNTo1NjoxNyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGdlbmF0dHJ0YWIuYyAod3JpdGVfY29uc3RfbnVtX2RlbGF5X3Nsb3RzKTogT3V0cHV0ICdydHggaW5zbicgbm90CisJJ3J0eCAqaW5zbicgZm9yIGNvbnN0X251bV9kZWxheV9zbG90IGFyZ3VtZW50LgorCisJKiBnY2MuYyAobWFpbik6IFRydW5jYXRlIHByb2dyYW1uYW1lIHRvIHdoYXQgaXMgYWZ0ZXIgbGFzdCBzbGFzaC4KKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogV2FybiBpZiBmaW5kIHVucmVhZGFibGUgaGVhZGVyIGZpbGUuCisJKGVycm5vLmgpOiBNb3ZlIG91dHNpZGUgVk1TIHNwZWNpZmljIHNlY3Rpb24uCisKKwkqIHNwYXJjLmMgKHByaW50X29wZXJhbmQpOiBVc2Ugb3V0cHV0X29wZXJhbmRfbG9zc2FnZSwgbm90IGFib3J0LgorCisJKiBzcGFyYy5oIChTRVRVUF9GUkFNRV9BRERSRVNTLCBEWU5BTUlDX0NIQUlOX0FERFJFU1MsCisJUkVUVVJOX0FERFJfSU5fUFJFVklPVVNfRlJBTUUsIFJFVFVSTl9BRERSX1JUWCk6IERlZmluZS4KKwkqIHNwYXJjLm1kIChmbHVzaF9yZWdpc3Rlcl93aW5kb3dzLCBnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUpOgorCUdpdmUgbmFtZXMgdG8gdGhlc2UgcGF0dGVybnMgc28gdGhleSBhcmUgZWFzaWVyIHRvIHVzZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIEJVSUxUX0lOX0ZSQU1FX0FERFJFU1MgY2FzZSk6IFVzZSBuZXcKKwltYWNyb3MgU0VUVVBfRlJBTUVfQUREUkVTU0VTIGFuZCBSRVRVUk5fQUREUl9JTl9QUkVWSU9VU19GUkFNRS4KKworCSogcmVvcmcuYyAocmVsYXhfZGVsYXlfc2xvdHMpOiBEZWxldGUganVtcCBhcm91bmQgaW5zbiBpZGVudGljYWwKKwl0byB0aGUgaW5zbiBpbiBpdHMgZGVsYXkgc2xvdC4KKworCSogaTk2MC5jIChpOTYwX291dHB1dF9jYWxsX2luc24pOiBEZWxldGUgc2NyYXRjaF9yZWcgYXJnLiAgVXNlIHIzCisJaW5zdGVhZC4KKwkqIGk5NjAubWQgKGNhbGxfaW50ZXJuYWwqKTogVXNlIGhhcmQgcmVnaXN0ZXIgMTkgKHIzKSBpbiBjbG9iYmVyCisJaW5zdGVhZCBvZiBtYXRjaF9zY3JhdGNoLgorCisJKiBpOTYwLm1kIChtb3YqKTogT25seSBhY2NlcHQgc3RvcmUgemVybyB0byBtZW1vcnkgaW5zbiBpZgorCXJ0eF9lcXVhbF9mdW5jdGlvbl92YWx1ZV9tYXR0ZXJzIGlzIHplcm8uCisJKiBpOTYwLmggKHJ0eF9lcXVhbF9mdW5jdGlvbl92YWx1ZV9tYXR0ZXJzKTogRGVjbGFyZS4KKworCSogZW1pdC1ydGwuYyAoZ2VuX3NlcXVlbmNlKTogQWRkIHB1c2hfb2JzdGFja3Nfbm9jaGFuZ2UgYW5kCisJcG9wX29ic3RhY2tzIGNhbGxzIGFyb3VuZCBydGxfaW5fc2F2ZWFibGVfb2JzdGFjayBjYWxsLgorCSogdmFyYXNtLmMgKGltbWVkX2RvdWJsZV9jb25zdCwgaW1tZWRfcmVhbF9jb25zdF8xKTogTGlrZXdpc2UuCisJKiB0cmVlLmMgKHJ0bF9pbl9zYXZlYWJsZV9vYnN0YWNrKTogQWx3YXlzIHN3aXRjaCB0byBzYXZlYWJsZV9vYnN0YWNrLgorCVJldHVybiB0eXBlIG5vdyB2b2lkIGluc3RlYWQgb2YgaW50LgorCitUdWUgTWFyICAyIDE0OjU3OjA2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGxpbmtfY29tbWFuZF9zcGVjKTogRG8gbm90aGluZyBpZiAtZnN5bnRheC1vbmx5LgorCitUdWUgTWFyICAyIDE0OjE3OjQ3IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmggKEFESlVTVF9DT1NUKTogQWRkIG5ldyBkZWZpbml0aW9uLgorCSogcGEuYyAocGFfYWRqdXN0X2Nvc3QpOiBOZXcgcHJvY3VkdXJlLgorCitUdWUgTWFyICAyIDAyOjEyOjEzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGdlbl9tb3ZlX2luc24pOiBCaWcgYGlmJyBhcHBsaWVzIG9ubHkgZm9yIE1PREVfQ0MgY2xhc3MuCisKKwkqIGNvbmZpZy9tNjhrL25leHQuYyAoaGFuZGxlX3ByYWdtYSk6IE5ldyBhcmcgZ2V0X2xpbmVfZnVuY3Rpb24uCisJKiBjb25maWcvbTY4ay9uZXh0LmggKEhBTkRMRV9QUkFHTUEpOiBQYXNzIHN1aXRhYmxlIGFyZy4KKwkqIGMtbGV4LmggKGdldF9kaXJlY3RpdmVfbGluZSk6IERlY2xhcmVkLgorCitUdWUgTWFyICAyIDEwOjQ4OjQ2IDE5OTMgIFdpbHNvbiBUaWVuICAod3RpZW4gYXQgdXJiYW5hLm1jZC5tb3QuY29tKQorCisJKiBtNjhrLm1kICh0cnVuY2Rmc2YyKzIpOiBVc2UgZiUkbW92ZSBpbnN0ZWFkIG9mIGZzbW92ZS4KKworCSogbTY4ay5tZCAoZml4X3RydW5jZGZzaTIsIGZpeF90cnVuY2RmaGkyLCBmaXhfdHJ1bmNkZnFpMik6CisJVXNlICUjIGluc3RlYWQgb2YgIy4KKworCSogbTY4ay5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IFNldCBTWU1CT0xfUkVGX0ZMQUcgZm9yIHRoZSBjYWxsZWQKKwlmdW5jdGlvbiBzeW1ib2xfcmVmIHJ0eC4gIEluIFBJQyBtb2RlLCBvdXRwdXQgYGJzciBGVU5DQFBMVFBDJworCXdoZW4gdGhlIG9wZXJhbmQgaXMgc3ltYm9sX3JlZi4KKworCSogbTY4a3Y0LmggKEFTTV9PVVRQVVRfQ09NTU9OLCBBU01fT1VUUFVUX0xPQ0FMKTogVXNlIFNJWkUgaW5zdGVhZAorCW9mIFJPVU5ERUQuCisKKwkqIG02OGt2NC5oIChBU01fT1VUUFVUX0NBU0VfTEFCRUwpOiBBbHdheXMgdXNlIGBzd2JlZycgc3ludGF4IHRvCisJb3V0cHV0IHN3aXRjaCB0YWJsZSAobTY4ay5tZCBkZXBlbmRzIG9uIHRoaXMgdG8gaGFwcGVuKS4KKworCSogbTY4a3Y0LmggKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCk6IFRyZWF0IGEgc3ltYm9sX3JlZiBydHggd2l0aAorCVNZTUJPTF9SRUZfRkxBRyBzZXQgYSB2YWxpZCBQSUMgb3BlcmFuZC4KKworCSogbTY4a3Y0LmggKE9WRVJSSURFX09QVElPTlMpOiBUdXJuIG9mZiBmdW5jdGlvbiBjc2Ugd2hlbiBkb2luZyBwaWMuCisKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogVXNlIG02OGsgc3ZyNCBQSUMgZm9ybWF0IHRvIAorCWxvYWQgdGhlIGFkZHJlc3Mgb2YgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGludG8gUElDX09GRlNFVF9UQUJMRV9SRUcKKwlpbiBmdW5jdGlvbiBwcm9sb2d1ZSB3aGVuIGRvaW5nIFBJQy4KKworCSogbTY4ay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBBbHdheXMgYWRkICJAR09UIiBzdWZmaXggZm9yIHRoZQorCWdsb2JhbCBvYmplY3Qgb3BlcmFuZCB3aGVuIGRvaW5nIFBJQy4gCisKK01vbiBNYXIgIDEgMTk6MDA6MzggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWxleC5oIChSSURfSVRFUkFUT1IpOiBOZXcgYWx0ZXJuYXRpdmUuCisJKiBjLXRyZWUuaCAoSVRFUkFUT1JfUCwgSVRFUkFUT1JfQk9VTkRfUCk6IE5ldyBtYWNyb3MuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogV2FybiBpZiBpbmNyZW1lbnQgYHN0cnVjdCB1bmtub3duIConLgorCisJKiBjLWxleC5jIChpbml0X2xleCk6IFNldCB1cCByaWRwb2ludGVycyBmb3IgYGl0ZXJhdG9yJy4KKwlCdXQgbWF5YmUgdHVybiBpdCBvZmYgYWdhaW4uCisJCisJKiBjLXBhcnNlLmdwZXJmOiBBZGQgYGl0ZXJhdG9yJyBhbmQgYF9faXRlcmF0b3JfXycuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEhhbmRsZSBpdGVyYXRvciBzdG9yYWdlIGNsYXNzLgorCShmaW5pc2hfZGVjbCk6IEZvciBpdGVyYXRvciwgcmVxdWlyZSBpbml0aWFsIHZhbHVlLCBtYWtlIGEgc2F2ZV9leHByLgorCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgaW5pdF9pdGVyYXRvcnMuCisKKwkqIGMtcGFyc2UuaW4gKHN0bXQpOiBBbGxvdyBhbGxfaXRlcl9zdG10LgorCShwcmltYXJ5IC0+IHN0YXRlbWVudCBleHByZXNzaW9uKTogUHVzaCBhbmQgcG9wIGl0ZXJhdG9yIHN0YWNrLgorCShzdG10IC0+IGV4cHIpOiBVc2UgaXRlcmF0b3JfZXhwYW5kLgorCShhbGxfaXRlcl9zdG10KTogTmV3IHJ1bGUuCisKKwkqIGMtdHlwZWNrLmMgKHJlYWRvbmx5X3dhcm5pbmcpOiBXYXJuIGFib3V0IGFzc2lnbm1lbnQgdG8gaXRlcmF0b3IuCisKKwkqIGMtaXRlcmF0ZS5jOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmluIChjLWl0ZXJhdGUubyk6IE5ldyB0YXJnZXQuCisJKENfT0JKUywgT0JKQ19PQkpTKTogQWRkIGMtaXRlcmF0ZS5vLgorCisJKiBNYWtlZmlsZS5pbiAoZ2NjLm8pOiBEZWxldGUgZGVwIG9ic3RhY2suaC4KKworTW9uIE1hciAgMSAwNzoyOTo1MSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoc3Vic3RfY29uc3RhbnRzKTogVXNlIHByb3BlciBtb2RlIHdoZW4gZ2V0dGluZworCWVxdWl2YWxlbnQgY29uc3RhbnQgZm9yIHBhcmFkb3hpY2FsIFNVQlJFRyBpbiBTRVRfREVTVC4KKwkobWFya19zdG9yZXMpOiBDbGVhbiB1cCBhbmQgdGlnaHRlbiB0byBwcm9wZXJseSBoYW5kbGUgaGFyZCByZWdzLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIE5PVCk6IElmIFNUT1JFX0ZMQUdfVkFMVUU9PS0xLCB0cmVhdAorCWFuIEFTSElGVFJUIG9mIGp1c3QgdGhlIHNpZ24gYml0IGFzIGlmIGl0IHdlcmUgYW4gTFQuCisJKHN1YnN0LCBjYXNlIFhPUik6IExpa2V3aXNlIGZvciBTVE9SRV9GTEFHX1ZBTFVFPT0xIGFuZCBhbiBMU0hJRlRSVC4KKwkoc2ltcGxpZnlfYW5kX2NvbnN0X2ludCwgY2FzZSBMU0hJRlRSVCk6IElmIHNoaWZ0aW5nIGEgc2lnbiBiaXQKKwljb3B5LCBzdGFydCBzaGlmdCBhdCB0aGUgc2lnbiBiaXQuCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogTGlrZXdpc2UgZm9yIEFTSElGVFJULgorCisJKiBjb21iaW5lLmMgKEJZVEVfTE9BRFNfRVhURU5EKTogRml4IHR5cG8gd2hlbiBkZWZpbmluZy4KKwkoc2V0dXBfaW5jb21pbmdfcHJvbW90aW9ucyk6IFNldCBtb2RlcyBwcm9wZXJseS4KKworCSogYWxwaGEubWQ6IEFkZCB0aHJlZSBzcGVjaWFsLWNhc2VzIG9mIENNUCBpbnNucyBhZ2FpbnN0IHplcm8uCisKK01vbiBNYXIgIDEgMDY6MTc6MDIgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChDT05TVEFOVF9BRERSRVNTX1ApOiBEbyBub3QgYWNjZXB0IHN5bWJvbGljCisJYWRkcmVzc2VzLgorCShMRUdJVElNSVpFX0FERFJFU1MpOiBKdXN0IGEgc3R1YiBub3cuICBDYWxsCisJaHBwYV9sZWdpdGltaXplX2FkZHJlc3MgdG8gZG8gdGhlIHJlYWwgd29yay4KKworCSogcGEuYyAoc3ltYm9saWNfZXhwcmVzc2lvbl9wKTogTmV3IGZ1bmN0aW9uLgorCShocHBhX2xlZ2l0aW1pemVfYWRkcmVzcyk6IE9sZCBMRUdJVElNSVpFX0FERFJFU1MgbW92ZWQKKwloZXJlLiAgSGFuZGxlIHN5bWJvbF9yZWYgKyBkaXNwbGFjZW1lbnQgYWRkcmVzc2VzLiAKKwlVc2Ugcm91bmRpbmcgaW5zdGVhZCBvZiBtYXNraW5nIG9mZiBsb3dlciBiaXRzLgorCUF2b2lkIGNyZWF0aW5nIHVzZWxlc3MgcHNldWRvcyBhbmQgc3RyaXAgb2ZmIENPTlNUIGluCisJKGNvbnN0ICguLi4pKSBleHByZXNzaW9ucyB0byBtYWtlIHByb2Nlc3NpbmcgZWFzaWVyLgorCisJKiBwYS5tZCAoZGVmaW5lX3NwbGl0IGZvciBzeW1ib2xfcmVmK2ludCk6IE5ldyBkZWZpbmVfc3BsaXQgZm9yCisJdGhlIGNvbWJpbmVyLgorCitTYXQgRmViIDI3IDAxOjU3OjM0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IE5ldyBhcmcgRlVOREVDTC4gIENhbGxzIGNoYW5nZWQuCisJKGNvbnZlcnRfYXJndW1lbnRzKTogTmV3IGFyZyBGVU5ERUNMLgorCShidWlsZF9mdW5jdGlvbl9jYWxsKTogUGFzcyBmdW5jdGlvbiB0byBjb252ZXJ0X2FyZ3VtZW50cywgaWYgYSBkZWNsLgorCisJKiBjb25maWcuc3ViOiBFcnJvciBpZiBjb21wYW55IG5hbWUgaXMgbW9yZSB0aGFuIG9uZSB3b3JkLgorCUlmICRvcyBpcyBgc3Vub3MuLi4nLCBkb24ndCBjaGFuZ2UgaXQgdG8gbWFudWZhY3R1cmVyJ3MgbmFtZS4KKworCSogZW5xdWlyZS5jIChmYWtlX2ZfcmVwKTogQ2xlYXIgYWxsIG9mIHUsIGluaXRpYWxseS4KKwlNYWtlIHRoZSBpbnRzIGluIHUgdW5zaWduZWQuCisJKGZfZGVmaW5lKTogVXNlIG9yZGluYXJ5IGNvbnN0YW50cyBmb3IgbG9uZyBkb3VibGUKKwlpZiBpdCdzIHNhbWUgd2lkdGggYXMgZG91YmxlLgorCU1ha2UgX19jb252ZXJ0X2xvbmdfZG91YmxlX2kgdW5zaWduZWQuCisKKwkqIHZhLWk4NjAuaCAoc3RydWN0IF9fZ251Y192YV9saXN0KTogVGVzdCBfX3N2cjRfXyBsaWtlIF9fU1ZSNF9fLgorCisJKiBjb25maWcvbnMzMmsvbnMzMmsuaCAoVEFSR0VUX1NXSVRDSEVTKTogUmV2ZXJzZSBkZWZuIG9mIDMyMzMyLgorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFRydW5jYXRlIHZpYSB3b3JkX21vZGUKKwlvbmx5IGlmIHRvX21vZGUgZml0cyBpbiBvbmUgd29yZC4KKwlUcnVuY2F0ZSBieSByZWZlcnJpbmcgaW4gVE9fTU9ERSBmb3IgYW55IEZST00sCisJYnV0IGZvcmNlX3JlZyBpZiBuZWMuCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IE5lc3RlZCBmbiBkZWNsIGdldHMgREVDTF9DT05URVhUIGlmZiBub3QgZXh0ZXJuLgorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogI2xpbmUgdXBkYXRlcyBpbnB1dF9maWxlX3N0YWNrLT5uYW1lLgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQXV0b21hdGljYWxseSBjb252ZXJ0CisJdG8gYSB1bmlvbiBmcm9tIGl0cyBtZW1iZXJzJyB0eXBlcy4KKworCSogY29uZmlnL25zMzJrL25zMzJrLmggKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6CisJUGFkIHdpdGggbm8tb3AgaW5zbnMuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IE1ha2UgYGxvbmcgbG9uZycgd29yayBldmVuIHdpdGgKKwktcGVkYW50aWMsIGRlc3BpdGUgdGhlIHdhcm5pbmcuCisKK0ZyaSBGZWIgMjYgMjI6MDE6MzIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjY2NwLmMgKFVTRVJfTEFCRUxfUFJFRklYLCBSRUdJU1RFUl9QUkVGSVgpOiBJZiBub3QgZGVmaW5lZCBieQorCXRtLmgsIHNldCB0byBlbXB0eSBzdHJpbmdzLgorCShlbnVtIG5vZGVfdHlwZSwgc3BlY2lhbF9zeW1ib2wpOiBBZGRlZCBUX1VTRVJfTEFCRUxfUFJFRklYX1RZUEUKKwlhbmQgVF9SRUdJU1RFUl9QUkVGSVhfVFlQRSwgd2hpY2ggZXhwYW5kIHRvIFVTRVJfTEFCRUxfUFJFRklYIGFuZAorCVJFR0lTVEVSX1BSRUZJWC4KKwkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IE5ldyBidWlsdGluIGRlZmluaXRpb25zCisJX19VU0VSX0xBQkVMX1BSRUZJWF9fIGFuZCBfX1JFR0lTVEVSX1BSRUZJWF9fLgorCitGcmkgRmViIDI2IDE4OjA4OjU4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGRpc3RkaXIpOiBEZXBlbmQgb24gY3AtcGFyc2UueSwKKwlhbmQgdGhlIC5jIGZpbGVzIGZvciB0aGUgLnkgZmlsZXMuCisKKwkqIGMtZGVjbC5jIChkZWNsYXJlX3Bhcm1fbGV2ZWwpOiBVbmNvbmRpdGlvbmFsbHkgc3RvcmUgMS4KKwkocHVzaGRlY2wpOiBDcml0ZXJpb24gZm9yIG5vIHdhcm5pbmcgaXMsIG5leHQgbGV2ZWwgdXAKKwlpcyBhIHBhcm0gbGV2ZWwuCisKKwkqIE1ha2VmaWxlLmluIChhbGwuY3Jvc3MpOiBEZXBlbmQgb24gZW5xdWlyZS4KKworCSogbGliZ2NjMi5jIChpbmhpYml0X2xpYmMpOiBSZW5hbWVkIGZyb20gaW5oaWJpdF9lcHJpbnRmLgorCShMX25ld19oYW5kbGVyKTogRG9uJ3QgaW5jbHVkZSBzdGRpby5oIGlmIGluaGliaXRfbGliYy4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRXJyb3IgbXNnIGNoYW5nZS4KKworCSogZ3N0ZGFyZy5oIChfVkFfTElTVF9UX0gpOiBUZXN0IGFuZCBkZWZpbmUgdGhpcy4KKwkqIGd2YXJhcmdzLmggKF9WQV9MSVNUX1RfSCk6IFRlc3QgYW5kIGRlZmluZSB0aGlzLgorCisJKiBnc3RkZGVmLmggKF9TWVNfU0laRV9UX0gpOiBUZXN0IHRoaXMgYW5kIGRlZmluZSB0aGlzLgorCisJKiB4bS1wYmQuaCAoVVNFX0NfQUxMT0NBKTogRGVmaW5lIGhlcmUuCisJKiBwYmQuaCAoVVNFX0NfQUxMT0NBKTogTm90IGhlcmUuCisKKwkqIHRyZWUuYyAoc2ltcGxlX2NzdF9lcXVhbCk6IE5ldyBkZWZhdWx0IGNhc2UgaGFuZGxlcyBtb3N0CisJdHJlZSBjb2RlcyBiYXNlZCBvbiBUUkVFX0NPREVfQ0xBU1MuICBEZWxldGUgbmV3bHkgcmVkdW5kYW50IGNhc2VzCisJZm9yIHNwZWNpZmljIHRyZWUgY29kZXMuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IEVuYWJsZSBvdXRwdXQgb2Ygc3VicmFuZ2UgdHlwZXMKKwlpZiB1c2VfZ251X2RlYnVnX2luZm9fZXh0ZW5zaW9ucy4KKwkoZGJ4b3V0X2ZpbmlzaF9zeW1ib2wpOiBFbmFibGUgb3V0cHV0IG9mIHN5bWJvbHMgbGluZSBudW1iZXIuCisKKwkqIGMtdHlwZWNrLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOgorCUFsbG93IGNhc3Qgb2YgcHRyIHRvIHdpZGVyIGludGVnZXIuCisKK0ZyaSBGZWIgMjYgMTk6MDQ6MzYgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKKworCSogb3B0YWJzLmMgKGluaXRfbGliZnVuY3MpOiBVc2UgaW50IGluc3RlYWQgb2YgZW51bSBmb3IKKwlmaXJzdF9tb2RlLCBsYXN0X21vZGUsIGFuZCBtb2RlLgorCitGcmkgRmViIDI2IDE0OjI5OjIyIFBTVCAxOTkyICBSb24gR3VpbG1ldHRlIChyZmdAbmV0Y29tLmNvbSkKKworCSogYy1wYXJzZS5pbiAoaXZhcl9kZWNscyk6ICBHaXZlIGEgcGVkd2FybiAoaW5zdGVhZCBvZiBhIHdhcm5pbmcpIGZvcgorCWV4Y2VzcyBzZW1pY29sb25zLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBDb3JyZWN0bHkgcmVwb3J0IHRoZSBkaXJlY3RpdmUgbmFtZQorCXdoZW4gYW55IGtpbmQgb2YgaW5jbHVkZSBkaXJlY3RpdmUgaGFzIG5vIGFyZ3VtZW50IG9yIG51bGwgYXJndW1lbnQuCisKK0ZyaSBGZWIgMjYgMTE6Mjc6MzUgMTk5MiAgVG9tIFdvb2QgICh3b29kQE5lWFQuY29tKQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogVXNlIHBlZHdhcm5fd2l0aF9kZWNsIHRvIHdhcm4gYWJvdXQKKwlmdW5jdGlvbnMgZGVjbGFyZWQgc3RhdGljIGJ1dCBub3QgZGVmaW5lZC4KKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogVXNlIHBlZHdhcm4uCisKK0ZyaSBGZWIgMjYgMTA6MzQ6MzMgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogQWxzbyByZW1vdmUgdGhlIGcrKyBtYW51YWwgcGFnZS4KKworRnJpIEZlYiAyNiAwMToyOTo1MyAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogY2V4cC55IChwYXJzZV9lc2NhcGUpOiBEb24ndCB0cmVhdCBeIGFzIHNwZWNpYWwgYWZ0ZXIgXC4KKworRnJpIEZlYiAyNiAyMTozNzoyOSAxOTkzICBKb2huIEYgQ2FyciAgKGpmYyBhdCBBdGhlbmEuTUlULkVEVSkKKworCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwpOiBQcmludCBhbiBlcnJvciBmb3IgZXhwbGljaXQgcmVnaXN0ZXIKKwl2YXJpYWJsZSB3aG9zZSB0eXBlIGNhbm5vdCBiZSBzdG9yZWQgaW4gdGhhdCByZWdpc3Rlci4KKworRnJpIEZlYiAyNiAxNzowNzoyNSAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBtYWNobW9kZS5kZWY6IEFkZGVkIDMyLWJ5dGUgaW50IE9JbW9kZS4KKworRnJpIEZlYiAyNiAxMzo1OToyMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIGV4cGxvdy5jIChtZW1vcnlfYWRkcmVzcyk6IFVzZSBDT05TVEFOVF9BRERSRVNTX1AgaW5zdGVhZCBvZgorCUxFR0lUSU1BVEVfQ09OU1RBTlRfUC4KKwkoYnJlYWtfb3V0X21lbXJlZnMpOiBMaWtld2lzZS4KKworRnJpIEZlYiAyNiAwNjoxODo0MCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIElOX0VYUFIpOiBGaXggbnVtZXJvdXMgc21hbGwgYnVncyBhbmQKKwltYWtlIHNvbWUgY2xlYW51cHMuCisKKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcywgY2FzZSAncicpOiBJZiBTVFJJQ1QsIGEgUkVHIGlzbid0CisJdmFsaWQgaWYgaXQgaXMgYSBwc2V1ZG8gZXZlbiBpZiBHRU5FUkFMX1JFR1MgPT0gQUxMX1JFR1MuCisKKwkqIGFscGhhLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IEFkZCBtaXNzaW5nIGFyZ3MgdG8gY2FsbHMgdG8KKwlleHBhbmRfYmlub3AuCisKK1RodSBGZWIgMjUgMTc6MjQ6NDUgMTk5MyAgQmlsbCBDb3ggIChiaWxsQHJ0bC5jeWdudXMuY29tKQorCisJKiBleHByLmg6IEFkZCBwcm90b3R5cGVzIGZvciBtb3N0IGV4cHItcmVsYXRlZCBmdW5jdGlvbnMuCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBBZGQgbWlzc2luZyBwYXJhbWV0ZXIgaW4gZXhwYW5kX2Jpbm9wCWNhbGwuCisKK1RodSBGZWIgMjUgMTc6NTA6NTUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdG9wbGV2LmM6IE5vIG5lZWQgdG8gI3VuZGVmIEFCUzsgZG9uZSBpbiBydGwuaC4KKworCSogcmVvcmcuYyAocmVkdW5kYW50X2luc25fcCk6IEZpeCB0eXBvIGluIHRlc3RpbmcgZm9yIHR5cGVzIG9mCisJaW5zbnMgYnkgdXNpbmcgR0VUX1JUWF9DTEFTUy4KKworCSogZXhwbWVkLmMgKGVtaXRfc3RvcmVfZmxhZyk6IEZpeCB0eXBvIGluIHRlc3RpbmcgQlJBTkNIX0NPU1QuCisKK1RodSBGZWIgMjUgMTQ6MzI6MzEgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogRml4IHR5cG8gaW4KKwlwYXJhZG94aWNhbCBzZXQgZGVzdCBoYW5kbGluZy4KKworCSogY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBEZWxldGUgRmViIDE5IGNoYW5nZS4KKworCSogZm9sZC1jb25zdC5jIChkZWNvZGVfZmllbGRfcmVmZXJlbmNlKTogRml4IGZvcmNlX2ZpdF90eXBlIGNhbGwuCisKK1RodSBGZWIgMjUgMDc6Mzg6MzYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmMuc2NvOiBVc2UgcHdkIGlmIFBXRENNRCBpcyBub3QgZGVmaW5lZC4KKworV2VkIEZlYiAyNCAxODoyODowNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy92YXgvdm1zLmggKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBVc2Ugdm1zX2NoZWNrX2V4dGVybmFsLgorCShBU01fR0xPQkFMSVpFX0xBQkVMKTogTmV3IGRlZmluaXRpb247IHVzZSB2bXNfY2hlY2tfZXh0ZXJuYWwuCisJKiBjb25maWcvdmF4L3ZheC5jICh2bXNfY2hlY2tfZXh0ZXJuYWwpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNvbmZpZy9tNjhrL3htLW1vdDMzMDAuaCAoTk9fU1lTX1NJR0xJU1QpOiBEZWZpbmVkLgorCitXZWQgRmViIDI0IDE2OjAxOjQyIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChjb25zZWNfc2V0c19pbnZhcmlhbnRfcCk6IENvcnJlY3QgUkVHX0VRVUFMIG5vdGUgY2hlY2tzCisJdG8gZGlzdGluZ3Vpc2ggbGliY2FsbCBjYXNlIGZyb20gb3JkaW5hcnkgaW5zbiBjYXNlLgorCisJKiBsb29wLmMgKGFkZF9sYWJlbF9ub3Rlcyk6IERvbid0IGFkZCBub3RlcyBmb3IgcmVmZXJlbmNlcyB0bworCWRpc3BhdGNoIHRhYmxlcyBiZWNhdXNlIGp1bXAgZG9lc24ndC4KKwkoZmluZF9hbmRfdmVyaWZ5X2xvb3BzKTogSW52YWxpZGF0ZSBsb29wcyB0aGF0IGNvbnRhaW4gbGFiZWxzCisJd2hvc2UgYWRkcmVzcyBoYXMgYmVlbiB0YWtlbi4KKworCSogZml4aW5jLnN2cjQgKHN0cmluZy5oKTogRGVsZXRlICdnJyBmcm9tIHNlZCBjb21tYW5kLgorCisJKiBzcGFyYy5tZCAoemVyb19leHRlbmRxaSppMik6IERlbGV0ZSBuZXZlciBtYXRjaGVkIGNvbnN0cmFpbnRzLgorCisJKiBpOTYwLmMgKHVtdWxzaWRpMysxKTogRGVsZXRlIGV4dHJhIHBhcmVudGhlc2lzLgorCitUdWUgRmViIDIzIDE1OjA5OjUwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtaGVhZGVycyk6IENyZWF0ZSByZWxhdGl2ZSBwYXRocyBmb3IKKwlzeW1ib2xpYyBsaW5rcyB3aXRoaW4gaW5zdGFsbGVkIGluY2x1ZGUgZGlyZWN0b3J5LgorCitUdWUgRmViIDIzIDE0OjQzOjQ2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IEhhbmRsZSBuYW1lbGVzcyB0eXBlLgorCisJKiB0cmVlLmggKENPTlNUUlVDVE9SX05BTUVfRk9STUFUKTogSGFuZGxlIE5PX0RPVF9JTl9MQUJFTC4KKworCSogY29uZmlnL202OGsvbW90MzMwMC5oIChOT19ET0xMQVJfSU5fTEFCRUwsIE5PX0RPVF9JTl9MQUJFTCk6IERlZmluZWQuCisKKwkqIGNvbGxlY3QyLmMgKGlzX2N0b3JfZHRvcik6IEhhbmRsZSBOT19ET1RfSU5fTEFCRUwuCisKK01vbiBGZWIgMjIgMTg6MDY6MDYgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5jIChvdXRwdXRfY2FsbCk6IERvbid0IHVzZSB0aGUgZGVsYXkgc2xvdCBvZiBhIGJzci5uIAorCXRvIG1vZGlmeSB0aGUgcmV0dXJuIGFkZHJlc3MsIHVubGVzcyAtTzIgc3BlY2lmaWVkLgorCitNb24gRmViIDIyIDE3OjM2OjUyIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiIGF0IHhpdikKKworCSogb2JqYy9jb3JlLmMgKGluaXRpYWxpemVfY2xhc3MpOiBUYWtlIENsYXNzX3QgaW5zdGVhZCBvZgorCWNoYXIqIGFzIGFyZ3VtZW50LiAgQ2FsbGVycyBjaGFuZ2VkIHRvIHBhc3MgdGhlIGNsYXNzLgorCisJKiBvYmpjL2NvcmUuYyAoaW5pdGlhbGl6ZV9jbGFzcyk6IE1hcmsgdGhlIGNsYXNzCisJaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGFjdHVhbCBjYWxsIG9mICIraW5pdGlhbGl6ZSIuICBUaGlzIGlzCisJbmVlZGVkIGluIGNhc2Ugb2YgY2VydGFpbiBjaXJjdWxhciBkZXBlbmRhbmNlcyBiZXR3ZWVuIGNsYXNzZXMuCisKKwkqIG9iamMvb2JqZWN0Lm0JKGRvZXNOb3RSZWNvZ25pemUpOiBDYWxsIHNlbF9nZXROYW1lIHRvIGdldAorCXRoZSBuYW1lIG9mIHRoZSBzZWxlY3RvciwgYW5kIHByaW50IHRoYXQuCisJKHN1YmNsYXNzUmVzcG9uc2liaWxpdHksIG5vdEltcGxlbWVudGVkKTogTGlrZXdpc2UuCisKK01vbiBGZWIgMjIgMDA6MjM6NDcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogRml4IGJ1ZyBpbiBwcmV2IGNoYW5nZS4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtaW5jbHVkZS1kaXIpOiBEZXBlbmQgb24gaW5zdGFsbC1kaXIuCisKKwkqIGNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogI2lmIDAgdGhlIHRydW5jYXRlZCBpbnRlZ2VyIHdhcm5pbmcuCisKK01vbiBGZWIgMjIgMTU6MTU6NDAgMTk5MyAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzQGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBmb2xkLWNvbnN0LmMgKGFsbF9vbmVzX21hc2tfcCk6IFJlYWxseSB1c2UgdG1hc2suCisKK01vbiBGZWIgMjIgMTE6NTk6MDkgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGZvbGQtY29uc3QuYyAoYWxsX29uZXNfbWFza19wKTogRGVjbGFyZSB0bWFzayB0byBiZSBgdHJlZScuCisJKG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlKSBBZGQgbWlzc2luZyBzZW1pY29sb24uCisKK1N1biBGZWIgMjEgMjA6MjA6MTMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogUmVhbGx5IHBhc3MgbWVtIHZhbHVlIGFkZHJlc3MKKwl0byB0aGUgbGlicmFyeSBmdW5jdGlvbi4KKworU3VuIEZlYiAyMSAxNToxNTo0MCAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXNAYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGZvbGQtY29uc3QuYyAoZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSk6IFVzZSBmb3JjZV9maXRfdHlwZQorCWluc3RlYWQgb2YgY29udmVydCB0byBhdm9pZCB0cnVuY2F0ZWQgaW50ZWdlciB3YXJuaW5nLgorCShhbGxfb25lc19tYXNrX3ApOiBMaWtld2lzZS4KKworU3VuIEZlYiAyMSAxMzowNjowMCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChsb2FkIGhpZ2ggcGF0dGVybik6IFJld29yayBjb25zdHJhaW50cyB0byByZWR1Y2UgJXIxCisJc3BpbGxhZ2UuCisKKwkqIHBhLm1kIChjb25zdF9kb3VibGUgLT4gRlAgcGF0dGVybik6IFJlbW92ZSBjYXNlcyB3aGljaCBjYW4gbmV2ZXIKKwloYXBwZW4gYW55bW9yZS4KKworCSogcGEuYyAocHJpbnRfb3BlcmFuZCwgY2FzZSAnWScpOiBPdXRwdXQgY29tcGFyaXNvbiBvcGVyYXRvcnMKKwl3aGljaCB3aWxsIGdpdmUgdGhlIHJpZ2h0IHJlc3VsdHMgd2hlbiBvbmUgb3IgbW9yZSBvcGVyYW5kcyBpcyBhIE5hTi4KKworU3VuIEZlYiAyMSAwMTozODoxOSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc25fMSk6IE5ldyBzdWJyb3V0aW5lIGN1dCBmcm9tIGVtaXRfbW92ZV9pbnNuLgorCShlbWl0X21vdmVfaW5zbik6IFVzZSB0aGF0LgorCSogb3B0YWJzLmMgKGdlbl9tb3ZlX2luc24pOiBVc2UgZW1pdF9tb3ZlX2luc25fMS4KKwkqIGV4cHIuaCAoZW1pdF9tb3ZlX2luc25fMSk6IERlY2xhcmVkLgorCitTYXQgRmViIDIwIDIwOjMzOjUxIDE5OTMgIERvdWcgRXZhbnMgIChkamVAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jOiBBZGQgZGVjbGFyYXRpb24gZm9yIHBlZHdhcm5fd2l0aF9saW5lLgorCitTYXQgRmViIDIwIDE0OjQ2OjI1IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0BiaWd0ZXguY2FjdHVzLm9yZykKKworCSogZml4aW5jbHVkZXMgKFNSQ0RJUik6IE1ha2UgYWJzb2x1dGUgZnJvbSBPUklHRElSLgorCShzeXMvdHlwZXMuaCk6IFF1b3RlIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGV4cGFuZCB3aXRoIHNwYWNlcy4KKwlTdHJpcCBxdW90ZXMgZnJvbSBleHBhbnNpb24gb2YgU0laRV9UWVBFLgorCShzdGRpby5oKTogRml4IHR5cG8gZGVsZXRpbmcgbGluZS4KKworU2F0IEZlYiAyMCAxODo0MTowNSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAod2FybmluZ193aXRoX2xpbmUsIHBlZHdhcm5fd2l0aF9saW5lKTogTmV3IGZ1bmN0aW9ucy4KKwkocmVzY2FuKTogRm9yIHBlZGFudGljLCBubyBlcnJvciBpZiBzdHJpbmcgY29uc3RhbnQgaGFzIG5ld2xpbmUsCisJanVzdCBhIHBlZHdhcm4uICBBbmQgZG9uJ3QgZW5kIHRoZSBzdHJpbmcgY29uc3RhbnQgdGhlcmUuCisKK1NhdCBGZWIgMjAgMTc6MjU6MTYgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGRlY29kZV9maWVsZF9yZWZlcmVuY2UpOiBVc2UgZm9yY2VfZml0X3R5cGUKKwlpbnN0ZWFkIG9mIGNvbnZlcnQgdG8gYXZvaWQgdHJ1bmNhdGVkIGludGVnZXIgd2FybmluZy4KKworU2F0IEZlYiAyMCAwNzozMTozMiAxOTkzICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiBmaXhpbmNsdWRlczogQ2hhbmdlICJ2YV9saXN0KSIgdG8gIl9fZ251Y192YV9saXN0KSIuCisKK1NhdCBGZWIgMjAgMDM6MTk6NDQgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogU2F2ZSB0ZW1wIGZpbGUgaW4gJHtMSUJ9LgorCVVzZSAtSSR7T1JJR0RJUn0gd2hlbiBjb21waWxpbmcgdHlwZXMuYy4KKworRnJpIEZlYiAxOSAwMDo0NTo0MSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogV2FybiBpZiBpbnRlZ2VyIGlzIHRydW5jYXRlZAorCWFuZCB0aGF0IGNoYW5nZXMgdGhlIHZhbHVlLgorCitUaHUgRmViIDE4IDIwOjE1OjIwIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogYWl4Mzg2Lmg6IEluY2x1ZGUgYWl4Mzg2bmcuaCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LgorCSogM2IxLmggKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBBZGQgbWlzc2luZyBzZW1pY29sb24uCisKKwkqIHNwYXJjLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IERvbid0IHNhdmUgJWYzMSB0byBzdGFjay4KKwkqIHNwYXJjLmggKFNUQVJUSU5HX0ZSQU1FX09GRlNFVCk6IFNldCB0byAtOC4KKworCSogcGJkLmgsIHNvbDIuaCwgc3BhcmMuaCwgc3lzdjQuaCAoQ1BQX1BSRURFRklORVMpOiBBZGQKKwktRF9fR0NDX05FV19WQVJBUkdTX18uCisJKiB2YS1zcGFyYy5oICh2YV9zdGFydCk6IElmIF9fR0NDX05FV19WQVJBUkdTX18gbm90IGRlZmluZWQsIHVzZQorCW9sZCBkZWZpbml0aW9uLgorCisJKiBmaW5hbC5jIChlbmRfZmluYWwpOiBEb24ndCBjYWxsIGFzc2VtYmxlX3plcm9zIHdpdGggYW4gc2l6ZQorCWFyZ3VtZW50IG9mIHplcm8uCisKKwkqIG1vdmUtaWYtY2hhbmdlOiBVc2UgY21wIC1zIGluc3RlYWQgb2YgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvCisJL2Rldi9udWxsLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFdoZW4gTUFZQkVfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgZGVmaW5lZCwKKwlpZiByZWdfcGFybV9zdGFja19zcGFjZSBpcyB6ZXJvLCBzZXQgYXJnc19zaXplLmNvbnN0YW50IHRvIHplcm8uCisKK1RodSBGZWIgMTggMTc6NDM6MzAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjL2NvcmUuYyAoX19vYmpjX2V4ZWNDbGFzcyk6CisJRG9uJ3QgYXNzaWduIHN1cGVyY2xhc3MgcG9pbnRlciBtb3JlIHRoYW4gb25jZS4KKworCSogb2JqYy9yZWNvcmQuaCAocmVjb3JkX3N0b3JlX2F0LCByZWNvcmRfZ2V0KToKKwlUZXN0IHJlY29yZF9jYXBhY2l0eSwgbm90IHJlY29yZF9lbnRyaWVzLCBpbiBhc3NlcnRpb24uCisKKwkqIGZsb3cuYyAocmVnbm9fdW5pbml0aWFsaXplZCk6IFRlc3QgZ2xvYmFsX3JlZ3Mgb25seSBmb3IgaGFyZCByZWdzLgorCisJKiBjLWxleC5jICh5eWxleCk6IFVuZG8gRmViIDcgY2hhbmdlLgorCSogYy1wYXJzZS5pbiAocHJvZ3JhbSk6IEFmdGVyIGV4dGRlZnMsIHBvcCBhbnkgdW5wb3BwZWQgYmluZGluZyBsdmxzLgorCisJKiBNYWtlZmlsZS5pbiAoQklTT05GTEFHUyk6IEFkZCAtdi4KKworV2VkIEZlYiAxNyAxODo1MTo1MSAxOTkzICBLYXJsIEJlcnJ5ICAoa2FybEBvd2wuaHEuaWxlYWYuY29tKQorCisJKiB0b3BsZXYuYyAoQUJTKTogI3VuZGVmIGFmdGVyIGluY2x1ZGluZyBzeXMvcmVzb3VyY2UuaC4KKworV2VkIEZlYiAxNyAyMjowMjowOSAxOTkzICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKGVtaXRfbGRzdCk6IEZvciBsYXJnZSBvZmZzZXRzIHVzZSByZWdpc3RlciBpbmRleAorCWluc3RlYWQgb2YgaW1tZWRpYXRlLiAgCisKK1dlZCBGZWIgMTcgMTg6MDI6MjYgRVNUIDE5OTMgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKKworCSogd2UzMmsuaCAoQ09OU1RfQ09TVFMpOiBVcGRhdGVkIHRvIGJldHRlciByZWZsZWN0CisJdGhlIGFjdHVhbCBjb25zdGFudCBjb3N0cyBvbiBhIHdlMzJrLgorCisJKiB3ZTMyay5tZCAodHJ1bmNkZnNmMiwgZXh0ZW5kc2ZkZjIpOiBDaGFuZ2VkIGZyb20KKwlkZWZpbmVfaW5zbiB0byBleHBhbmRfaW5zbiBzbyB0aGUgb3B0aW1pemVyIGNhbiBkbworCWEgYmV0dGVyIGpvYi4KKworCSogd2UzMmsuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWRkZWQgc3VwcG9ydCBmb3IKKwlkZWZlcnJlZCBhZGRyZXNzaW5nLgorCisJKiB3ZTMyay5tZDogRWxpbWluYXRlZCBhIGptcCBwYXR0ZXJuIGFuZCB0aGUgcGVlcGhvbGUKKwlwYXR0ZXJucyB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBub3cgdGhhdCBkZWZlcnJlZAorCWFkZHJlc3NpbmcgaXMgc3VwcG9ydGVkLgorCitXZWQgRmViIDE3IDE3OjU1OjM0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKHN5cy90eXBlcy5oKTogUmVwbGFjZSBkZWZpbml0aW9uIG9mIHNpemVfdAorCWJhc2VkIG9uIFNJWkVfVFlQRS4KKworV2VkIEZlYiAxNyAwNjo1NDo0MiAxOTkzICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWcvbTg4ay9tODhrLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IEFkZGVkICdLJy4gIAorCSogY29uZmlnL204OGsvbTg4ay5tZDogVXNlICdLJyBjb25zdHJhaW50IHdpdGggYXJpdGg1X29wZXJhbmQKKwlwcmVkaWNhdGUuICAKKworV2VkIEZlYiAxNyAwMzowNDo0OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWZpeGluYyk6IFJlbmFtZWQgZnJvbSBzdG1wLWZpeGluY2x1ZGVzLgorCitUdWUgRmViIDE2IDE0OjM0OjE5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEFTTV9PVVRQVVRfSURFTlQsIElERU5UX0FTTV9PUCk6IERlZmluZWQuCisKK1R1ZSBGZWIgMTYgMDI6NDg6NTggRVNUIDE5OTIgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogVXNlIHN0cmljdF9tZW1vcnlfYWRkcmVzc19wCisJdG8gY2hlY2sgZm9yIHZhbGlkIGluZGlyZWN0IGFkZHJlc3MuCisKKwkqIHhtLXdlMzJrLmg6IEluY2x1ZGUgeG0tc3ZyMy5oLiAgTW92ZSB0bS5oIGluY2x1ZGUgZWFybGllci4KKwkoSE9TVF9CSVRTX1BFUl9MT05HTE9ORywgSE9TVF9XT1JEU19CSUdfRU5ESUFOKTogRGVmaW5lZC4KKwkoVVNHLCBiY29weSwgYnplcm8sIGJjbXApOiBEZWxldGVkLgorCShhbGxvY2EpOiBEZWZpbml0aW9uIG1vdmVkIGJlZm9yZSB0bS5oLgorCitUdWUgRmViIDE2IDAxOjI4OjUyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfaW5kaXJlY3RfcmVmKTogQXZvaWQgKiYgc2hvcnQtY3V0IGlmIC1mdm9sYXRpbGUuCisKK01vbiBGZWIgMTUgMjI6MjI6MDggMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMvb3Nmcm9zZS5oIChDUFBfU1BFQyk6IFdoZW4gcHJlcHJvY2Vzc2luZyAuUyBmaWxlcywgcGFzcworCS10cmFkaXRpb25hbCBpZiBuZWl0aGVyIC1hbnNpIG5vciAtdHJhZGl0aW9uYWwgd2FzIHBhc3NlZCwgdG8KKwlhbGxvdyB0aGUgbWFjcm9zIHdoaWNoIGZvcm0gbGFiZWxzIHRvIG5vdCBnaXZlIGdhcyBoZWFydGJ1cm4uCisKKwkqIGkzODYvb3Nmcm9zZSAoQ1BQX1NQRUMpOiBEaXR0by4KKworTW9uIEZlYiAxNSAwMjoxNzo0NyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0LmMgKEhBU0hGVU5DVElPTik6IGluc3VyZSBub25uZWdhdGl2ZSBoYXNoIGV2ZW4gaWYKKwlhZGRyZXNzZXMgYXJlIG5lZ2F0aXZlLgorCitTYXQgRmViIDEzIDA0OjE2OjI5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtV21pc3NpbmctYnJhY2VzLgorCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogVGVzdCB3YXJuX21pc3NpbmdfYnJhY2VzLgorCSogYy10cmVlLmggKHdhcm5fbWlzc2luZ19icmFjZXMpOiBEZWNsYXJlZC4KKworRnJpIEZlYiAxMiAxOTo0MDozOCAxOTkzICBEb3VnIEV2YW5zICAoZGplQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2V0dXBfaW5jb21pbmdfcHJvbW90aW9ucyk6IE1ha2Ugc3RhdGljLgorCitGcmkgRmViIDEyIDE2OjAyOjUyIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuZGVmOiAgRml4IHR5cG8gaW4gY29tbWVudCAoVFJFRV9WQUxVRVMgLT4gVFlQRV9WQUxVRVMpLgorCitGcmkgRmViIDEyIDExOjI2OjI4IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLm1kIChyb3Rsc2kzKTogRml4IHR5cG8sIHJvdGF0ZSB3YXMgcm90YXRlcnQgaW4gcnRsIHRlbXBsYXRlLgorCitGcmkgRmViIDEyIDA3OjQ3OjExIDE5OTMgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QGRnLXJ0cC5kZy5jb20pCisKKwkqIGZ1bmN0aW9uLmMgKHJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogQWxsb3cKKwlmb3IgemVybyBsZW5ndGggcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGxpc3QuCisKK1RodSBGZWIgMTEgMDU6NTU6MzMgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29sbGVjdDIuYyAoZmluZF9hX2ZpbGUpOiBBbHdheXMgcmVqZWN0ICIuL2xkIi4KKwkobWFpbik6IFBhc3Mgc2hvcnQgbmFtZSBvZiBwcm9ncmFtIGFzIGZpcnN0IGFyZyB0byBmb3JrX2V4ZWN1dGU7CisJZW5zdXJlIGFyZ3ZbMF0gYWx3YXlzIGdldHMgZmlsZW5hbWUuCisJKGZvcmtfZXhlY3V0ZSk6IFByaW50IG5hbWUgZm9yIGRpYWdub3N0aWMgZnJvbSBQUk9HOyBmaWxlbmFtZQorCWNvbWVzIGZyb20gYXJndlswXS4KKworCSogZml4aW5jbHVkZXM6IERvbid0IGFzc3VtZSB0aGF0IG1hY3JvcyBkZWZpbmluZyBJTyBhbmQgQ1RSTAorCWlvY3RsIGNvZGVzIGFsd2F5cyB1c2UgYHgnOyBzb21lIHVzZSBgYycgb3IgYGcnLgorCisJKiBjb2xsZWN0Mi5jIChwdXRlbnYpOiBOZXcgZnVuY3Rpb24sIGNvcGllZCBmcm9tIGdjYy5jLgorCShsYXN0X2ZpbGVfbmFtZSk6IE5ldyB2YXJpYWJsZS4KKwkoZmluZF9hX2ZpbGUpOiBJZ25vcmUgbmFtZSBpbiBsYXN0X2ZpbGVfbmFtZSB0b28uCisJKG1haW4pOiBMb29rIGF0IG5hbWUgaW4gQ09MTEVDVF9OQU1FIGFuZCBzZXQgaXQgdG8gdGhlIG5hbWUgd2Ugd2VyZQorCWNhbGxlZCB3aXRoLgorCVBhc3MgZmlsZW5hbWUgdXNlZCBmb3IgbGQgdG8gbGQgYXMgYXJndlswXS4KKworVGh1IEZlYiAxMSAwMzo1NTozOSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBNb3ZlIG1lbW9yeV9hZGRyZXNzIGNhbGxzCisJb3V0IG9mIGFyZ2xpc3Qgb2YgZW1pdF9ibG9ja19tb3ZlLgorCitXZWQgRmViIDEwIDE2OjE0OjA5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIFVwZGF0ZSBBbHBoYSBzdXBwb3J0IHRvIGxhdGVzdCBjYWxsaW5nIHNlcXVlbmNlLgorCSogYWxwaGEuYyAodmVyc2lvbl9zdHJpbmcpOiBEZWNsYXJlLgorCShjdXJyZW50X2ZpbGVfZnVuY3Rpb25fb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiwgcmVwbGFjZXMKKwljdXJyZW50X2Z1bmN0aW9uX29wZXJhbmQuCisJKHByaW50X29wZXJhbmQsIGNhc2UgJ0YnKTogQ2FzZSBkZWxldGVkLgorCShhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogUmV3b3JrZWQgdG8gdXNlIGhvbWVkIGFyZ2xpc3RzLCBhcworCXJlY29tbWVuZGVkIGluIHRoZSBjYWxsaW5nIHN0YW5kYXJkLgorCShhbHBoYV9uZWVkX2dwKTogRGVsZXRlZCwgY29kZSBtb3ZlZCBpbnRvIG91dHB1dF9wcm9sb2cuCisJKGFscGhhX2dwX2RlYWRfYWZ0ZXIpOiBEZWxldGVkOyBvcHRpbWl6YXRpb24gaXMgbm90IHNhZmUuCisJKGFscGhhX3dyaXRlX3ZlcnN0YW1wKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfcHJvbG9nLCBvdXRwdXRfZXBpbG9nKTogTWFqb3IgcmV3b3JrIHRvIHVwZGF0ZSB0bworCWN1cnJlbnQgY2FsbGluZyBzdGFuZGFyZC4KKwkqIGFscGhhLmggKEFTTV9PVVRQVVRfTE9PUF9BTElHTik6IEVuYWJsZSwgbm93IHRoYXQgYXNzZW1ibGVyIGZpeGVkLgorCShTTE9XX1VOQUxJR05FRF9BQ0NFU1MpOiBEZWZpbmUgYXMgMS4KKwkoQVJHX1BPSU5URVJfUkVHTlVNKTogVXNlIHJlZ2lzdGVyIG51bWJlciAzMSBhcyBhbiBhcmcgcG9pbnRlci4KKwkoRlJBTUVfR1JPV1NfRE9XTldBUkQpOiBEbyBub3QgZGVmaW5lLgorCShTVEFSVElOR19GUkFNRV9PRkZTRVQpOiBOb3cgaXMgb3V0Z29pbmcgYXJncyBzaXplLgorCShGSVJTVF9QQVJNX09GRlNFVCk6IE5vdyAwLgorCShFTElNSU5BQkxFX1JFR1MsIGV0Yy4pOiBDYW5ub3QgZWxpbWluYXRlIGdwLCBidXQgZG8KKwllbGltaW5hdGUgQVAgaW4gZmF2b3Igb2YgZWl0aGVyIFNQIG9yIEZQLgorCShSRVRVUk5fSU5fTUVNT1JZKTogQWxsIHN0cnVjdHMgb3IgaW50ZWdlcnMgbGFyZ2VyIHRoYW4gNjQKKwliaXRzIGdldCByZXR1cm5lZCB2aWEgbWVtb3J5LgorCShTRVRVUF9JTkNPTUlOR19WQVJBUkdTKTogVXNlIGhvbWVkIGFyZ2xpc3QgbWVjaGFuaXNtLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogVXNlIHByb3BlciBzZWNvbmQgYXJnIHRvIC5lbnQuCisJKEFTTV9GSUxFX1NUQVJUKTogQ2FsbCBhbHBoYV93cml0ZV92ZXJzdGFtcC4KKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IFJlY29yZCB3aGVuIGEgZGVjbCBpcyBmb3IgYSBmdW5jdGlvbgorCWluIHRoZSBjdXJyZW50IGZpbGUuCisJKiBhbHBoYS5tZCAoY2FsbCBpbnNucyk6IEFsd2F5cyByZWxvYWQgZ3AgYWZ0ZXIgYSBmdWxsIGNhbGwuCisJVXNlIGN1cnJlbnRfZmlsZV9mdW5jdGlvbl9vcGVyYW5kIHRvIHNlZSB3aGVuIHdlIGNhbiB1c2UgQlNSLgorCitXZWQgRmViIDEwIDA5OjUzOjAwIDE5OTMgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLnN1YjogcmVtb3ZlZCBtODhrYmNzLCBjaGFuZ2VkIGRlbHRhODggYW5kIGhhcnJpcyB0bworCXVzZSBzeXN2My4gIAorCitXZWQgRmViIDEwIDAzOjI5OjExIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFNpbGVudGx5IGFjY2VwdCBoYXJtbGVzcyBtaXNtYXRjaAorCWluIHR5cGUgb2YgMXN0IGFyZyBvZiBidWlsdGluIGZ1bmN0aW9uLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBJZiBhcmcgaXMgdm9pZCAqLCBqdXN0IHdhcm4uCisKK1R1ZSBGZWIgIDkgMjI6MTU6MDggMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBhbHBoYS5tZCAoZml4X3RydW5jZGZkaTIsIGZpeF90cnVuY3NmZGkyKTogVXNlIGBjdnR0cWMnLCBub3QKKwlgY3Z0dHEnLCB0byBhdm9pZCByb3VuZGluZyB1cC4KKworVHVlIEZlYiAgOSAxODo0NTo1NyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChwcm9tb3RlZF9pbnB1dF9hcmcpOiBOZXcgZnVuY3Rpb24uCisJKiBleHByLmg6IERlY2xhcmUgaXQuCisJKiBjb21iaW5lLmMgKHNldHVwX2luY29taW5nX3Byb21vdGlvbnMpOiBOZXcgZnVuY3Rpb24uCisJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogQWRkIGNhbGxzIHRvIHNldHVwX2luY29taW5nX3Byb21vdGlvbnMuCisKK1R1ZSBGZWIgIDkgMTQ6MDQ6MjIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogRml4IGxvZ2ljIGFib3V0IHdoZW4gdG8gZHVwbGljYXRlIGVudHJpZXMgdW5kZXIgdGhlCisJYEZJTEUnIGxpbmsuCisKK1R1ZSBGZWIgIDkgMTM6MjI6MjggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBGaXggbGluZW5vIG9mICJkb2VzIG5vdCBlbmQgaW4gbmV3bGluZSIgbWVzc2FnZS4KKwkoZmluY2x1ZGUpOiBMaWtld2lzZS4KKworVHVlIEZlYiAgOSAxMjowMzozNyAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy9taXBzLmMgKGZ1bmN0aW9uX2VwaWxvZ3VlKTogQXZvaWQgaW50ZWdlciBvdmVyZmxvd3MgaW4KKwljaGVja2luZyB3aGV0aGVyICQzMSBpcyB0aGUgb25seSByZWdpc3RlciBzYXZlZC4KKwkobWlwc19lcGlsb2d1ZV9kZWxheV9zbG90cyk6IERpdHRvLgorCitUdWUgRmViICA5IDA1OjQ2OjE3IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJ0bC5oOiBVbmRlZmluZSBBQlM7IHNvbWUgUE9TSVggc3lzdGVtcyBkZWZpbmUgaXQgYXMgMS4KKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IFdoZW4gY2FsbGluZworCXNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzLCBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgd2UKKwljYW4gY2FsbCBnZXRfbGFzdCB2YWx1ZTsgY2FsbCByZWNvcmRfZGVhZF9hbmRfc2V0X3JlZ3MgaW4gbG9vcC4KKwkoc2V0X25vbnplcm9fYml0c19hbmRfc2lnbl9jb3BpZXMpOiBIYW5kbGUgcGFyYWRveGljYWwgU0VULgorCitUdWUgRmViICA5IDAxOjEzOjE4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sZXguYyAoeXlsZXgpOiBGb3Igd2lkZSBjaGFyIGNvbnN0YW50LCB1c2Ugd2NoYXJfdHlwZV9ub2RlLgorCVN3YWxsb3cgYW55IHByZXByb2Nlc3NpbmcgbnVtYmVyIGFzIGEgKHBvc3NpYmx5IGVycm9uZW91cykgbnVtYmVyLgorCisJKiB0cmVlLmMgKHNpemVfaW5fYnl0ZXMpOiBBZGQgMm5kIGFyZyB0byBmb3JjZV9maXRfdHlwZS4KKworTW9uIEZlYiAgOCAwNzo1MjoyMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZSAoKi0qLWhwdXgqKTogVXNlIGluc3RhbGwtaGVhZGVycy1jcGlvLgorCitNb24gRmViICA4IDA3OjEzOjQ5IDE5OTMgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QGRnLXJ0cC5kZy5jb20pCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBEb24ndCBmbGFnIGdsb2JhbCByZWdpc3RlciB2YXJpYWJsZXMKKwlhcyB1bnVzZWQuICAKKworTW9uIEZlYiAgOCAwNjowNjo1OCAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKGV4dGVuZHNpZGkyKTogVXNlIGNvcnJlY3QgbW5lbW9uaWMgZm9yIGN3dGwgb3Bjb2RlLgorCitNb24gRmViICA4IDA1OjUyOjA4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBJZiBSRUcgaXMgemVybywgZG9uJ3Qgc2V0IHJlZ3MgaGVyZS4KKwkqIGV4cHIuaCAoTVVTVF9QQVNTX0lOX1NUQUNLX0JBRF9BTElHTik6IERlbGV0ZWQuCisJKE1VU1RfUEFTU19JTl9TVEFDSyk6IE5vIHByb2JsZW0gYW55bW9yZSB3aXRoIG5vbmFsaWduZWQgc3RydWN0cy4KKwkqIGNhbGxzLmM6IEFsbG93IHBhc3Npbmcgbm9uYWxpZ25lZCBCTEttb2RlIHN0cnVjdHMgaW4gcmVncy4KKwkoc3RydWN0IGFyZ19kYXRhKTogTmV3IGZpZWxkcyBhbGlnbmVkX3JlZ3MgYW5kIG5fYWxpZ25lZF9yZWdzLgorCShleHBhbmRfY2FsbCk6IFNldCBhbmQgdXNlIHRoZXNlIGZpZWxkcyB3aGVuIHJlcXVpcmVkLgorCShzdG9yZV9vbmVfYXJnKTogRG9uJ3QgcGFzcyByZWcgdG8gZW1pdF9wdXNoX2luc24gaWYgd2UgaGF2ZQorCXByZXZpb3VzbHkgZm9ybWVkIGFsaWduZWQgcmVnaXN0ZXJzLgorCitTdW4gRmViICA3IDIzOjM0OjE2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwbWVkLmMgKGVtaXRfc3RvcmVfZmxhZyk6IEFkZCBtaXNzaW5nIGFyZyB0byBjb252ZXJ0X21vdmUuCisKK1N1biBGZWIgIDcgMTY6MTM6MDUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdS5lZHUpCisKKwkqIGNhbGxzLmMgKHN0cnVjdCBhcmdfZGF0YSk6IE5ldyBmaWVsZCBNT0RFLgorCShleHBhbmRfY2FsbCwgc3RvcmVfb25lX2FyZyk6IFVzZSBpdCB0byBlbnN1cmUgdGhhdCBhbGwgYXJncyBnZXQKKwlwcm9tb3RlZCBpZiByZXF1ZXN0ZWQsIG5vdCBqdXN0IHRob3NlIHBhc3NlZCBpbiByZWdpc3RlcnMuCisKK1N1biBGZWIgIDcgMTM6MTI6MjMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWxleC5jICh5eWxleCk6IEF0IGVvZiwgaWYgYmluZGluZyBsZXZlbHMgbm90IHBvcHBlZCwKKwlpbWFnaW5lIHNvbWUgY2xvc2UtYnJhY2VzIHRvIHBvcCB0aGVtLgorCitTdW4gRmViICA3IDEwOjU0OjQyIDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogQ2FsbCBmb3JjZV9maXRfdHlwZSB3aXRoIHR3byBwYXJhbWV0ZXJzLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvcmNlX2ZpdF90eXBlKTogRG9uJ3QgZXhhbWluZSB0aGUgdHJlZSB1bnRpbAorCWl0IGlzIGtub3duIHRvIGFuIElOVEVHRVJfQ1NULiAgSWYgaXQgaXNuJ3QsIGp1c3QgcmV0dXJuLgorCitTYXQgRmViICA2IDIwOjI2OjA5IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogYnl0ZW9yZGVyLmggKDM4NiBodG9ubCxodG9ucyk6IEF2b2lkIGhhcmQtY29kZWQgcmVnaXN0ZXIgdXNhZ2UuCisKK1NhdCBGZWIgIDYgMjA6MjM6MDIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbTY4ay9tNjhrLm1kIChtb3ZxaSk6IEZvciBzcGVjaWFsIGNhc2Ugb2YgbW92aW5nIGJ5dGUKKwl0byBzdGFjaywgcHVzaCBpbnRvIGxvdyBieXRlIGFuZCB0aGVuIGNvcHkgdG8gaGlnaCBieXRlLgorCUZvciBjYXNlIG9mIG1vdmluZyB0by9mcm9tIGFkZHJlc3MgcmVnLCBleGNoYW5nZSBpdCB3aXRoIGQwLgorCitGcmkgRmViICA1IDE5OjU4OjI2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogQnlwYXNzIGZldGNoaW5nIGEgdm9sYXRpbGUgdmFsdWUKKwlpZiBpdCBpcyBWT0lEbW9kZS4KKworRnJpIEZlYiAgNSAxODoyNzoyNyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGdlZWNoLmdudS5haS5taXQuZWR1KQorCisJRnJvbSBGcmVkIEZpc2ggKGZuZkBmaXNocG9uZC5jeWdudXMuY29tKQorCSogY29uZmlnLnN1YiAoaVszNF04NnNvbDIpOiAgTmV3IGFiYnJldiBmb3IgaVszNF04Ni11bmtub3duLXNvbGFyaXMyLgorCSogY29uZmlndXJlIChpWzM0XTg2LSotc29sYXJpczIpOiAgTmV3IGNvbmZpZyBmb3IgU29sYXJpcyAyLCB4ODYuCisJKiBjcnRzdHVmZi5jIChfX2RvX2dsb2JhbF9jdG9yc19hdXgpOiAgVXNlIEZPUkNFX0lOSVRfU0VDVElPTl9BTElHTgorCXRvIGF2b2lkIFNvbGFyaXMgMiwgeDg2IGxpbmtlciBidWcuCisJKiBjb25maWcvaTM4Ni97c29sMi1jMS5hc20sIHNvbDItY2kuYXNtLCBzb2wyLWNuLmFzbX06ICBOZXcgcnVudGltZQorCXN1cHBvcnQgZmlsZXMgZm9yIFNvbGFyaXMgMiwgeDg2LgorCSogY29uZmlnL2kzODYve3NvbDIuaCwgdC1zb2wyfTogIE5ldyBjb25maWcgZmlsZXMgZm9yIFNvbGFyaXMgMiwgeDg2LgorCisJKiBzcGFyYy5oIChFWFRSQV9DT05TVEFJTlRTKTogRGVsZXRlICdSJyBzdXBwb3J0LgorCShDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBDb3JyZWN0ICdLJyBjb21tZW50LgorCisJKiBjYWxsZXItc2F2ZS5jIChDRUlMKTogRGVsZXRlLgorCShyZXN0b3JlX3JlZmVyZW5jZWRfcmVncyk6IE5ldyB2YXIgTlVNUkVHUy4gIFBhc3MgTlVNUkVHUyB0bworCWluc2VydF9zYXZlX3Jlc3RvcmUgaW5zdGVhZCBvZiB1c2luZyB1c2luZyBDRUlMLgorCisJKiBzY2hlZC5jICh0cnVlX2RlcGVuZGVuY2UsIGFudGlfZGVwZW5kZW5jZSwgb3V0cHV0X2RlcGVuZGVuY2UpOgorCUFzc3VtZSB0aGF0IE1FTV9JTl9TVFJVQ1RfUCBRSW1vZGUgdmFyeWluZyBhZGRyZXNzZXMgY2FuIG92ZXJsYXAgYQorCW5vbi1NRU1fSU5fU1RSVUNUX1AgZml4ZWQgYWRkcmVzcy4KKworCSogaTk2MC5jIChsZWdpdGltYXRlX2FkZHJlc3NfcCk6IEFjY2VwdCBlaXRoZXIgUkVHIG9yIFNVQlJFRyB3aGVyZQorCWEgcmVnaXN0ZXIgaXMgdmFsaWQgaW4gYW4gYWRkcmVzcy4KKworCSogY29uZmlndXJlICgqLSotc2NvKik6IFNldCBpbnN0YWxsX2hlYWRlcnNfZGlyIHRvIGNwaW8gaW5zdGVhZCBvZiB0YXIuCisKKwkqIGNjY3AuYyAoZmluY2x1ZGUpOiBFcnJvciBpZiB0cnkgdG8gaW5jbHVkZSBhIGRpcmVjdG9yeS4KKwkoU19JU0RJUik6IEFkZCBhIGRlZmF1bHQgZGVmaW5pdGlvbi4KKworRnJpIEZlYiAgNSAxMDoyNDozNSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBSZW1vdmUgYC1mU09TJyBhbmQgYC1mbm8tU09TJy4KKworCVdlZCBGZWIgIDMgMTY6MzQ6NTggMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIF9fYnVpbHRpbl9hcmdzX2luZm8uCisKKwlXZWQgRmViICAzIDEyOjQ3OjAyIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogQXZvaWQgY3JlYXRpbmcgYSBjaXJjdWxhcml0eQorCXdoZW4gcHV0dGluZyBjdG9ycyBhbmQgZHRvcnMgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0LgorCisJKiBjcC1pbml0LmMgKGJ1aWxkX25ldyk6IENhbGwgY19zaXplb2Zfbm93YXJuLCBub3QgY19zaXplb2YuCisJKGJ1aWxkX2RlbGV0ZSk6IExpa2V3aXNlLgorCisJVHVlIEZlYiAgMiAwOTo1NzoyOSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jICh5eXByaW50KTogTWFrZSBub24tc3RhdGljLgorCisJTW9uIEZlYiAgMSAxNzowOToxOSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogVXNlIHBlZHdhcm4gZm9yIGV4Y2VlZGluZyB0aGUgcmFuZ2Ugb2YgYQorCWRvdWJsZS4KKworCVNhdCBKYW4gMzAgMTM6MDk6MzUgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogQWxzbyBjaGVjayBmb3IgVkFMVUUgYmVpbmcgYQorCVJFU1VMVF9ERUNMIGJlZm9yZSBsb29raW5nIGZvciB0aGUgREVDTF9SRUZFUkVOQ0VfU0xPVC4KKworCSogY3AtZGVjbDIuYyAoYmFkX3NwZWNpZmllcnMpOiBQYXNzIE9CSkVDVCBpbnRvIGVycm9yLgorCisJRnJpIEphbiAyOSAxMTo0Njo0NiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGFsdGVyX3Zpc2liaWxpdHkpOiBGb3JiaWQgcmVkdWNpbmcgdGhlIHZpc2liaWxpdHkgb2YgYQorCXB1YmxpYyBtZW1iZXIgb2YgdGhlIGRlcml2ZWQgY2xhc3MuCisKKwkqIGNwLXR5cGVjay5jIChjb21wX3RhcmdldF9wYXJtcyk6IEdpdmUgYSBjb250cmF2YXJpYW5jZSB3YXJuaW5nCisJd2l0aCBQMiwgbm90IFAxLCBzaW5jZSBQMSBpcyB0aGUgZXN0YWJsaXNoZWQgdmFsdWUsIG5vdCB0aGUgYXJndW1lbnQKKwl0aGF0J3MgY29taW5nIGluIGZvciBhIG1hdGNoLgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X21ldGhvZCk6IFdoZW4gcHJpbnRpbmcgb3V0IHRoZSBjbGFzcyBuYW1lIGZvciBhCisJZHVwbGljYXRlIGRlZmluaXRpb24sIGJlIHN1cmUgdG8gYXZvaWQgYSBudWxsIGNvbnRleHQgd2l0aCB0aGUKKwlzZWNvbmQgZGVmaW5pdGlvbi4KKworCVR1ZSBKYW4gMjYgMTU6Mzk6NTQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBUcnkgdG8gdXNlIHRoZSBjbGFzcyB2YWx1ZSBpZgorCXRoZXJlJ3Mgbm8gZ2xvYmFsIHZhbHVlLgorCisJTW9uIEphbiAyNSAxNTo1OToyMSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBSZW1vdmUgVFlQRV9ORUVEU19XUkFQUEVSIGNydWZ0LgorCisJU2F0IEphbiAyMyAxMjoxMzoyNCAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzIGF0IGRlbGxhLmFwcGxpLnNlKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2VlIHRvIHRoYXQgc3RhdGljIG1lbWJlcnMgd2hvc2UgdHlwZQorCWlzIHRoZSBjbGFzcyB0aGV5J3JlIGRlY2xhcmVkIGluIGdldHMgYSBjb3JyZWN0IG1vZGUuCisKKwlNb24gSmFuIDI1IDExOjA0OjIzIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLWRlY2wuYyAoZGVmaW5lX2xhYmVsKTogRG9uJ3QgcmVwb3J0IGNyb3NzaW5ncyBvZiBhbnkgaW50ZXJuYWwKKwllbnRpdHkgaW5pdGlhbGl6YXRpb25zLiAgRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTC4KKworCVdlZCBNYXkgMTMgMjE6NDQ6MDUgMTk5MiAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogY3AtZGVjbDIuYzogU3VwcG9ydCBmb3IgTk9fRE9UX0lOX0xBQkVMLgorCSogY3AtdHJlZS5oOiBMaWtld2lzZS4KKwkqIGNwLW1ldGhvZC5jOiBMaWtld2lzZS4KKworCSogY3AtZXhjZXB0LmM6IFN1cHBvcnQgZm9yIG5vIEpPSU5FUiBzZXR1cHMgKGkuZS4gTk9fRE9UX0lOX0xBQkVMKQorCSogY3AtbGV4LmM6IExpa2V3aXNlLgorCSogY3Atc2VhcmNoLmM6IExpa2V3aXNlLgorCisJRnJpIEphbiAyMiAwODo1Mjo1OCAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzIGF0IGRlbGxhLmFwcGxpLnNlKQorCisJKiBjcC1jYWxsLmMgKHJlc29sdmVfc2NvcGVfdG9fbmFtZSk6IFRyeSB0byBmaW5kIG5lc3RlZCB0eXBlcyBub3QKKwlqdXN0IGluIHRoZSBjdXJyZW50IGNsYXNzIGFuZCBhdCBnbG9iYWwgc2NvcGUgYnV0IGF0IGFsbAorCWludGVybWVkaWF0ZSBjbGFzc2VzIGFzIHdlbGwuCisKKwlNb24gSmFuIDI1IDExOjA0OjIzIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLWRlY2wuYyAoeHJlZl90YWcpOiBFbmFibGUgdGVzdCBvZiBpbmNvbXBsZXRlIGJhc2V0eXBlcy4KKwkqIGNwLXRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IERpc2FibGVkIGl0IGhlcmUuCisKKwlNb24gSmFuIDI1IDExOjA0OjIzIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLWluaXQuYyAoYnVpbGRfbmV3KTogTW92ZSBlcnJvciBjaGVjayBvZiBhcnJheSBzaXplIGJlZm9yZSB1c2UuCisKKwlTdW4gSmFuIDI0IDIxOjQxOjA5IDE5OTMgIEpvaG4gQ2FyciAgKGpmY0BBdGhlbmEuTUlULkVEVSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBBZGQgc3VwcG9ydCBmb3IKKwlGTE9PUl9NT0RfRVhQUiwgbWVyZ2VkIGluIGZyb20gdGhlIGMgZnJvbnQtZW5kLgorCitXZWQgRmViICAzIDE4OjIzOjA3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3QuYyAoaW5pdF9vYmpjKTogVXNlIHhyZWFsbG9jLCBub3QgcmVhbGxvYy4KKworCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCwgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOgorCUhhbmRsZSBTVEFDS19CT1VOREFSWSB3aGVuIHVzaW5nIHB1c2ggaW5zbnMuCisKK1R1ZSBGZWIgIDIgMTY6Mzc6NDkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfemVyb3MpOiBPdXRwdXQgbm90aGluZyByYXRoZXIgdGhhbiBlbXB0eSBza2lwLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogQWx3YXlzIGNvbnZlcnQgYW5kIGNoZWNrCisJYm90aCByZXN1bHQgb3BlcmFuZHMgZXZlbiBpZiBjb25kaXRpb24gaXMgY29uc3RhbnQuCisJKGJ1aWxkX2NfY2FzdCk6IEJ5cGFzcyBkZWZhdWx0X2NvbnZlcnNpb24gd2hlbiBjYXN0aW5nIHRvIHZvaWQuCisKKwkqIGMtZGVjbC5jOiBBZGQgc29tZSBicmFjZXMgZm9yIGNsYXJpdHkuCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni0qLWxpbnV4Kik6IFNldCBmaXhpbmNsdWRlcyB0byBNYWtlZmlsZS5pbgorCURvbid0IHNldCB0bWFrZV9maWxlLgorCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4aW5jbHVkZXMpOiBEb24ndCBydW4gRklYSU5DTFVERVMKKwlpZiBpdCBpcyBNYWtlZmlsZS5pbi4KKwkqIHQtbGludXg6IEZpbGUgZGVsZXRlZC4KKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtaGVhZGVycy1jcGlvKTogRGVsZXRlIHNwdXJpb3VzIHBhcmVucworCWZyb20gYXJvdW5kIHRoZSB3aG9sZSBjb21tYW5kLgorCShpbnN0YWxsLWhlYWRlcnMtdGFyKTogRGVsZXRlIHBhcmVucyBhcm91bmQgdGhlICJzb3VyY2UiIHRhciBjbWQuCisKK1R1ZSBGZWIgIDIgMTU6MjA6NTIgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBERUNMX0VYVEVSTkFMIGltcGxpZXMgVFJFRV9QVUJMSUMsCisJc28gZG9uJ3QgYm90aGVyIHRvIGNoZWNrIGZvciBib3RoLgorCisJKiByZWdjbGFzcy5jIChpbnRfcmVnX2NsYXNzX2NvbnRlbnRzKTogTWFrZSB1bnNpZ25lZCB0byBhdm9pZAorCXNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93LgorCShpbml0X3JlZ19zZXRzKTogQXZvaWQgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cuCisKKwkqIGNleHAueSAocGFyc2VfZXNjYXBlKTogIFN1cHBvcnQgXEUgYW5kIFxlIGxpa2UgY2MxOgorCXRoZXkgbWVhbiBcMDMzLCBhbmQgdGhleSBnZW5lcmF0ZSBhIHdhcm5pbmcgaWYgcGVkYW50aWMuCisKK1R1ZSBGZWIgIDIgMTU6MTc6MzggMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiB0LXNvbDIgKElOU1RBTExfVEFSR0VUKTogRGVsZXRlLgorCitUdWUgRmViICAyIDE0OjE4OjU5IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChnY2Mubyk6IERlcGVuZCB1cG9uIGNvbmZpZy5zdGF0dXMsIHNvIGFueSBjaGFuZ2VzCisJaW4gcHJlZml4IHdpbGwgYmUgY29tbXVuaWNhdGVkIHRvIHRoZSBidWlsZCBwcm9jZXNzLgorCShjY2NwLm8pOiBMaWtld2lzZS4KKworVHVlIEZlYiAgMiAwNzowOTozNiAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAoY21vdik6IFVzZSBAIGZvciBvdXRwdXQuCisKK01vbiBGZWIgIDEgMDE6NTA6NTQgMTk5MyAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCwgZ3Jva2RlY2xhcmF0b3IsIGZpbmlzaF9zdHJ1Y3QpOiBSZXBvcnQKKwlvdmVyZmxvd3MgaW4gc3RvcmFnZSBzaXplcy4KKwkoYnVpbGRfZW51bWVyYXRvcik6IFJlcG9ydCBvdmVyZmxvd3MgaW4gZW51bWVyYXRvcnMuCisJKiBmb2xkLWNvbnN0LmMgKHNhbWVfc2lnbik6IFJlbW92ZS4KKwkobHNoaWZ0X2RvdWJsZSk6IERvbid0IHJlcG9ydCBhcml0aG1ldGljIG92ZXJmbG93LCBzaW5jZSB0aGUKKwlDIHN0YW5kYXJkIGRvZXNuJ3Qgc2VlbSB0byByZXF1aXJlIGl0IGhlcmUuCisJKGZvcmNlX2ZpdF90eXBlKTogQWNjZXB0IG5ldyBwYXJhbWV0ZXIgc3BlY2lmeWluZyB3aGV0aGVyIGEgc2lnbmVkCisJb3ZlcmZsb3cgaGFzIGFscmVhZHkgb2NjdXJyZWQuICBZaWVsZCBvdmVyZmxvdyBpbmRpY2F0aW9uLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKG5lZ19kb3VibGUpOiBEb24ndCByZXBvcnQgb3ZlcmZsb3cgd2hlbiAtMCB5aWVsZHMgMC4KKwkoY29uc3RfYmlub3ApOiBQcm9wYWdhdGUgb3BlcmFuZCBvdmVyZmxvdyBmb3Igd2FybmluZ3MuCisJRG9uJ3QgcmVwb3J0IG92ZXJmbG93IHdoZW4gLTEgKyAxIHlpZWxkcyAwLgorCisJKiBjLXBhcnNlLmluICh1bmFyeV9leHByKTogV2FybiBhYm91dCBvdmVyZmxvd3MgaW4gcGFyc2VyLWJ1aWx0CisJdW5hcnkgZXhwcmVzc2lvbnMuCisJKiBjLXR5cGVjay5jIChwYXJzZXJfYnVpbGRfYmluYXJ5X29wKTogV2FybiBhYm91dCBvdmVyZmxvd3MgYW5kCisJY29udmVyc2lvbnMgb2Ygb3V0LW9mLXJhbmdlIGNvbnN0YW50cyBpbiBwYXJzZXItYnVpbHQgYmluYXJ5CisJZXhwcmVzc2lvbnMuCisJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBDaGVjayBjb252ZXJzaW9ucyBpbiBpZi10aGVuLWVsc2UKKwlleHByZXNzaW9ucy4KKwkoYnVpbGRfY19jYXN0KTogSWdub3JlIGFueSBpbnRlZ2VyIG92ZXJmbG93IGNhdXNlZCBieSBhIGNhc3QuCisJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBXYXJuIGlmIHNvdXJjZSBoYWQgb3ZlcmZsb3cgaW4gZm9sZGluZy4KKwkocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogUmVwb3J0IG92ZXJmbG93cyBpbiBhcnJheSBpbml0aWFsaXplcgorCWluZGV4ZXMuCisJKiBjLWNvbW1vbi5jIChjb25zdGFudF9leHByZXNzaW9uX3dhcm5pbmcpOiBTdXBwcmVzcyBkdXBsaWNhdGUKKwl3YXJuaW5ncy4KKwkoY29udmVydF9hbmRfY2hlY2ssIG92ZXJmbG93X3dhcm5pbmcsIHVuc2lnbmVkX2NvbnZlcnNpb25fd2FybmluZyk6CisJTmV3IGZ1bmN0aW9ucy4gIFByb3RvdHlwZXMgYWRkZWQgdG8gYy10cmVlLmguCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBSZXBvcnQgb3ZlcmZsb3cgaWYgX19idWlsdGluX2FyZ3NfaW5mbworCWFyZyBleGNlZWRzIG9uZSB3b3JkLgorCUZpeCBwdW5jdHVhdGlvbiBvZiBlcnJvciBtZXNzYWdlcy4KKworU3VuIEphbiAzMSAxNzo0NToxMSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBOZXZlciBjb25zaWRlciBiaXRzIG91dHNpZGUKKwlvZiBNT0RFLgorCitTdW4gSmFuIDMxIDE1OjI0OjQ2IDE5OTMgIERvdWcgRXZhbnMgIChkamVAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3QuYyAoYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiBGaXggY2FsbCB0byBzdGFydF9mdW5jdGlvbi4KKworU3VuIEphbiAzMSAxMzowODowNSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAoenZkZXAzMik6IEhhbmRsZSA1IGJpdCBpbW1lZGlhdGVzIGZvciBvcGVyYW5kIDEuCisJKGFzaGxzaTMpOiBMaWtld2lzZS4KKwkoYW5kICsgYXNoaWZ0KTogTmV3IGNvbWJpbmUgcGF0dGVybi4KKworU3VuIEphbiAzMSAxMjo0MDowMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHByb3RvaXplLmM6IEluY2x1ZGUgZ3ZhcmFyZ3MuaCBiZWZvcmUgc3lzdGVtIGhlYWRlcnMuCisKK1NhdCBKYW4gMzAgMTg6NTE6NDYgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb21wb3VuZF9leHByKTogaW5zZXJ0IG1pc3NpbmcgcmV0dXJuCisKK1NhdCBKYW4gMzAgMTY6MTA6NTYgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5jIChyZWdfb3JfMF9vcGVyYW5kKTogVXNlIENPTlNUMF9SVFggaW5zdGVhZCBvZiAKKwljb25zdDBfcnR4LgorCShyZWdfb3JfMF9vcl9ub25zeW1iX21lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShlbWl0X21vdmVfc2VxdWVuY2UpOiBDb3B5aW5nIENPTlNUMF9SVFggaW50byBhbnkKKwlyZWdpc3RlciBjYW4gYmUgZG9uZSBkaXJlY3RseS4gIFVzZSBDT05TVDBfUlRYIGluc3RlYWQKKwlvZiBjb25zdDBfcnR4LgorCShvdXRwdXRfZnBfbW92ZV9kb3VibGUpOiBIYW5kbGUgY29weWluZyBhIENPTlNUMF9SVFgKKwlpbnRvIEZQIG9yIGludGVnZXIgcmVnaXN0ZXJzLgorCShwcmludF9vcGVyYW5kKTogSGFuZGxlICIlcjAiIGZvciBERm1vZGUgYW5kIFNGbW9kZQorCXZhbHVlcyB0b28uCisKKwkqIHBhLmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBHZW5lcmFsaXplLgorCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBBbGxvdyAwLjAuCisJKENPTlNUX0NPU1RTLCBjYXNlIENPTlNUX0RPVUJMRSk6IGZwMC4wIGlzIGZyZWUgd2hlbgorCW5vdCB1c2VkIGluIGEgU0VUIGV4cHJlc3Npb24uICAKKworCSogcGEubWQgKGNtcFhmIGV4cGFuZHMpOiBBbGxvdyAwLjAgZm9yIGVpdGhlciBvcGVyYW5kCisJb2YgdGhlIGNvbXBhcmlzb24uCisJKGNtcFhmIGluc25zKTogQWxsb3cgMC4wIGZvciBlaXRoZXIgb3BlcmFuZCBvZiB0aGUKKwljb21wYXJpc29uLiAgVXBkYXRlIG91dHB1dCB0ZW1wbGF0ZSB0byBoYW5kbGUgMC4wIGFzIG9uZQorCW9mIHRoZSBvcGVyYW5kcy4KKwkobW92c2kgaW5zbiwgZnAtPmZwIGNhc2UpOiBVcGRhdGUgY29uc3RyYWludHMgYW5kIHRlbXBsYXRlIHRvCisJYWxsb3cgc3RvcmUgb2YgemVybyBpbnRvIGFuIEZQIHJlZ2lzdGVyLgorCShtb3ZoaSBpbnNuLCBmcC0+ZnAgY2FzZSk6IExpa2V3aXNlLgorCShtb3ZxaSBpbnNuLCBmcC0+ZnAgY2FzZSk6IExpa2V3aXNlLgorCShtb3ZkaSBpbnNuLCBmcC0+ZnAgY2FzZSk6IExpa2V3aXNlLgorCShtb3ZERiBjb25zdF9kb3VibGUgcGF0dGVybik6IERvIG5vdCBhcHBseSB0aGlzIHBhdHRlcm4KKwlpZiB0aGUgY29uc3RfZG91YmxlIGlzIHplcm8uCisJKG1vdmRmIGluc24sIGZwLT5mcCBhbmQgZ3ItPmdyIGNhc2VzKTogVXBkYXRlIGNvbnN0cmFpbnRzCisJYW5kIG91dHB1dCB0ZW1wbGF0ZSB0byBhbGxvdyBzdG9yZSBvZiB6ZXJvIGludG8gYSBGUCBvciBHUi4KKwlVcGRhdGUgY29uZGl0aW9uIHN0cmluZyB0byBhbGxvdyB6ZXJvIGFzIG9wZXJhbmQgMS4KKwkobW92c2YgaW5zbiwgZnAtPmZwIGFuZCBnci0+Z3IgY2FzZXMpOiBMaWtld2lzZS4gIEFsc28gYWxsb3cKKwlzdG9yZSBvZiB6ZXJvIGludG8gYSBtZW1vcnkgbG9jYXRpb24uCisKK1NhdCBKYW4gMzAgMTQ6NTc6NDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXRyZWUuaDogQWRkIG1hbnkgcHJvdG90eXBlcyBmcm9tIGJpbGxAY3lnbnVzLmNvbQorCitTYXQgSmFuIDMwIDAxOjA2OjUyIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXNAc3BpZmYuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtY29tbW9uLmMgKGNfYnVpbGRfdHlwZV92YXJpYW50KTogTW92ZWQgaGVyZSBmcm9tIGMtZGVjbC5jLgorCVJlZGlyZWN0ZWQgdGhlIFRZUEVfTUFJTl9WQVJJQU5UIHRvIHRoZSAicmVhbCIgbWFpbiB2YXJpYW50LgorCUJ1aWxkIHRoZSBwb3NzaWJseSBuZXcgYXJyYXkgdHlwZSBvbiB0aGUgcGVybWFuZW50IG9ic3RhY2sgaWYKKwl0aGUgb3JpZ2luYWwgdHlwZSB3YXMgcGVybWFuZW50LgorCShwZXJtYW5lbnRfb2JzdGFjayk6IEFkZGVkIGV4dGVybiBkZWNsYXJhdGlvbi4KKwkqIGMtZGVjbC5jIChjX2J1aWxkX3R5cGVfdmFyaWFudCk6IE1vdmVkIHRvIGMtY29tbW9uLmMuCisKK0ZyaSBKYW4gMjkgMTg6MTY6NDcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbTY4ay9tNjhrLm1kIChpb3JzaTMpOiBBZGQgQ0NfU1RBVFVTX0lOSVQgaWYgdXNlIGJzZXQuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9yY2VfZml0X3R5cGUpOiBBYm9ydCBpZiBUIG5vdCBJTlRFR0VSX0NTVC4KKwkqIHRyZWUuYyAoc2l6ZV9pbl9ieXRlcyk6IE9ubHkgY2FsbCBmb3JjZV9maXRfdHlwZSBmb3IgYW4gSU5URUdFUl9DU1QuCisKKwkqIGNvbmZpZy9pMzg2L3QtbGludXggKEZJWElOQ0xVREVTKTogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGlbMzRdODYtKi1saW51eCopOiBVc2UgdC1saW51eC4KKworRnJpIEphbiAyOSAxMjowODowNCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogIFdoZW4gaGFuZGxpbmcgYSAoc3VicmVnIChyZWcpKQorCXdoZXJlIChyZWcpIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBtZW1vcnkgcmVmZXJlbmNlLCBpZiB0aGUgbWVtb3J5CisJYWRkcmVzcyBpcyBpbnZhbGlkIGZvciB0aGUgbW9kZSBvZiB0aGUgc3VicmVnLCB0aGVuIHNlYXJjaCB0aGUgCisJbWVtb3J5IGFkZHJlc3MgZm9yIHJlbG9hZHMuCisKKwkqIHBhLmggKEZJWEVEX1JFR0lTVEVSUyk6ICVyMzEgaXMgbm90IGZpeGVkLgorCitUaHUgSmFuIDI4IDIzOjQ5OjI1IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogcmVnLXN0YWNrLmMgKGNvbXBhcmVfZm9yX3N0YWNrX3JlZyk6IFByb3Blcmx5IHN3YXAgb3BlcmFuZHMgb2YgYQorCUNPTVBBUkUuCisKK1RodSBKYW4gMjggMTM6NDc6NTMgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoaW9yc2kzKTogU3BsaXQgaW50byB0d28gcGF0dGVybnMsIGEgbmFtZWQgImlvcnNpMyIgd2hpY2gKKwlvbmx5IGFjY2VwdHMgcmVnaXN0ZXJzLCBhbmQgYSBjb21iaW5lciBwYXR0ZXJuIHdoaWNoIGFjY2VwdHMgYQorCXJlc3RyaWN0ZWQgc2V0IG9mIGNvbnN0YW50IGludGVnZXJzIGZvciBvbmUgdGVybS4KKwkqIHBhLmMgKGlvcl9vcGVyYW5kKTogRG8gbm90IGFjY2VwdCByZWdpc3RlcnMuCisKKwkqIHBhLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IERlbGV0ZSBjYXNlcyB3aGljaCBjYW4gbmV2ZXIgaGFwcGVuLgorCisJKiBwYS5oIChDUFBfU1BFQyBmb3IgT0xEX0NDKTogRGVsZXRlLgorCShDQzFfU1BFQyBmb3IgT0xEX0NDKTogTGlrZXdpc2UuCisJKE1PREVTX1RJRUFCTEVfUCk6IFNpbXBsaWZ5LgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCk6IEZpeCBjb21tZW50LgorCShsZWFmX2Z1bmN0aW9uKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZS4KKwkoSEFSRF9SRUdOT19NT0RFX09LKTogRGVsZXRlIG9sZCB1c2VsZXNzIHZlcnNpb24uCisJKEZJUlNUX1BBUk1fT0ZGU0VUKTogTGlrZXdpc2UuCisJKEZJUlNUX1BBUk1fQ0FMTEVSX09GRlNFVCk6IExpa2V3aXNlLgorCShFWFBBTkRfQlVJTFRJTl9TQVZFUkVHUyk6IExpa2V3aXNlLgorCShBU01fT1VUUFVUX1JFR19QVVNIKTogTGlrZXdpc2UuCisJKEFTTV9PVVRQVVRfUkVHX1BPUCk6IExpa2V3aXNlCisKK1RodSBKYW4gMjggMDc6NTE6NDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjb25maWcvbTY4ay9tNjhrLmggKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IEFjY2VwdCAnLycuCisJKiBjb25maWcvbTY4ay9tNjhrLmMgKHByaW50X29wZXJhbmQpOiBQcmludCAlLyBhcyBSRUdJU1RFUl9QUkVGSVguCisJKiBsb25nbG9uZy5oICh1bXVsX3BwbW0gZm9yIDY4MDAwKTogVXNlICUvIGJlZm9yZSBhbGwgcmVnaXN0ZXIKKwluYW1lcy4KKworCSogY29uZmlndXJlIChpbnN0YWxsX2hlYWRlcnNfZGlyKTogTmV3IHZhcmlhYmxlIGZvciBlYWNoCisJY29uZmlndXJhdGlvbiwgdXNlZCB0byBzZXQgSU5TVEFMTF9IRUFERVJTX0RJUiBpbiBNYWtlZmlsZS4KKwkoKi0qLXN5c3Y0KiwgKi0qLXN5c3YqKTogU2V0IGluc3RhbGxfaGVhZGVyc19kaXIgdG8KKwlpbnN0YWxsLWhlYWRlcnMtY3Bpby4KKworVGh1IEphbiAyOCAwNzozMDoyNSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLm1kOiBSZW1vdmUgMjkwNTAtc3BlY2lmaWMgdmFyaWFudHMgb2YgcGF0dGVybnMgZ2VuZXJhdGluZworCWxvYWRtIHRoYXQgaGF2ZSBlYXJseWNsb2JiZXIuICBUaGlzIHdhcyBwdXQgaW4gZm9yIHNvbWUgdmVyeSBvbGQKKwl2ZXJzaW9uIG9mIHRoZSAnMDUwLCB3aGljaCBpc24ndCB1c2VkIGFueW1vcmUsIHRoYXQgaGFkIGEgYnVnLgorCitUaHUgSmFuIDI4IDA2OjU2OjA0IDE5OTMgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiB2bXNjb25maWcuY29tOiBjaGFuZ2UgaW5zdGFuY2VzIG9mIFsuY29uZmlnXSB0byBbLmNvbmZpZy52YXhdLgorCSogbWFrZS1jYzEuY29tLCBtYWtlLWNjY3AuY29tLCBtYWtlLWwyLmNvbTogY2hhbmdlIC9pbmNsdWRlIGFuZCAtSQorCXZhbHVlcyBmcm9tIFsuY29uZmlnXSB0byBbLmNvbmZpZy5dICh0aGlzIHRyYWlsaW5nIHBlcmlvZCB3b3JrcyB3aXRoCisJR05VIEMncyBwcmVwcm9jZXNzb3IgYnV0IG5vdCB3aXRoIFZBWCBDJ3MpLgorCitUaHUgSmFuIDI4IDA2OjQ4OjU3IDE5OTMgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbkBvc2Yub3JnKQorCisJKiBvcHRhYnMuYyAoaW5pdF9maXh0YWIsIGluaXRfb3B0YWJzKTogRml4IHR5cG9zIGluIFFGbW9kZSBhbmQgSEZtb2RlCisJaW5pdGlhbGl6YXRpb24uCisKK1dlZCBKYW4gMjcgMTM6MTE6MjYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5jbHVkZWRpcik6IFVzZSBsb2NhbF9wcmVmaXguCisKK1dlZCBKYW4gMjcgMTI6MDg6MDUgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5jIChjaGVja19mcF9tb3YpOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9uCisJKHJlZ2lzdGVyX29yX3Nob3J0X29wZXJhbmQpOiBMaWtld2lzZS4KKwkoZXFfb3JfbmVxKTogTGlrZXdpc2UuCisJKGdlbl9jb21wYXJlX3JlZyk6IExpa2V3aXNlLgorCShyZXZlcnNlX3JlbG9wKTogTGlrZXdpc2UuCisJKGZyYW1lX2Jhc2UpbmFtZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUuCisKKwkqIHBhLWdocHV4LmggKEhBVkVfQVRFWElUKTogRGVsZXRlLiAgVGhpcyBpcyBkZWZpbmVkIGluIHBhLmgKKwkqIHBhLWd1eDcuaCAoSEFWRV9BVEVYSVQpOiBMaWtld2lzZS4KKwkqIHBhLWhwdXguaCAoSEFWRV9BVEVYSVQpOiBMaWtld2lzZS4KKwkqIHBhLWhwdXg3LmggKEhBVkVfQVRFWElUKTogTGlrZXdpc2UuCisKK1dlZCBKYW4gMjcgMDY6NDY6NTAgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uX29wZXJhdGlvbik6IFdlIGNhbiBjb21wdXRlIHRoZSByZXN1bHQKKwlvZiBhIGNvbXBhcmlzb24gb2YgQ09OU1RfSU5UcyBubyBtYXR0ZXIgd2hhdCBtb2RlIHRoZSBjb21wdXRhdGlvbgorCWlzIHRvIGJlIGRvbmUgaW4uCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBTd2FwIG9wZXJhbmRzIGlmIGZpcnN0IGlzIGEKKwljb25zdGFudCBhbmQgc2Vjb25kIGlzIG5vdC4KKwlBYm9ydCBpZiBjb21wYXJlX2Zyb21fcnR4IGRpZG4ndCByZXR1cm4gYW4gcnR4IHdpdGggdGhlIGNvZGUgd2UKKwlleHBlY3QuCisJKiBleHByLmMgKGNvbXBhcmVfZnJvbV9ydHgpOiBPbmx5IHN3YXAgb3BlcmFuZCBpZiBmaXJzdCBpcyBhCisJY29uc3RhbnQgYW5kIHNlY29uZCBpcyBub3QuCisKKwkqIGMtY29tbW9uIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBJZiBjaGFyX2FycmF5X3R5cGVfbm9kZSBpc24ndAorCWxhcmdlIGVub3VnaCBmb3IgdGhlIG5hbWUsIG1ha2UgYSBsYXJnZXIgdHlwZS4KKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1ha2UgdGhlIGFycmF5cyAyMDAgbG9uZyBpbnN0ZWFkCisJb2YgMTAgdG8gbGVhdmUgbW9yZSByb29tIGZvciBtb3N0IG5hbWVzLgorCisJKiBmdW5jdGlvbi5jIChwdXRfdmFyX2ludG9fc3RhY2ssIGZpeHVwX3Zhcl9yZWZzX2luc25zKTogTWlub3IKKwljbGVhbnVwcy4KKwkoZml4dXBfdmFyX3JlZnNfMSwgY2FzZSBTRVQpOiBDb3JyZWN0bHkgY2hlY2sgZm9yIHNpbXBsZSBpbnNucworCXRoYXQgZG9uJ3QgbmVlZCBmaXh1cHMuCisKKwkqIGNvbGxlY3QyLmM6IERlbGV0ZSBJU0NPRkYgbWFjcm8gd2hpY2ggd2FzIGluICNpZmRlZiBfQUlYLgorCSogcnM2MDAwLmgsIGEyOWsvdW5peC5oIChNWV9JU0NPRkYpOiBOZXcgbWFjcm8uCisKK1R1ZSBKYW4gMjYgMTk6MzE6MzEgMTk5MyAgVG9tIFdvb2QgIChUb21fV29vZEBOZVhULmNvbSkKKworCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IEluaXRpYWxpemUgdW5kb2J1ZiBpbiB0aGUKKwlldmVudCBgZ2VuX3J0eF9jb21iaW5lJyBpcyBjYWxsZWQgYmVmb3JlIGB0cnlfY29tYmluZScuCisKK1R1ZSBKYW4gMjYgMTg6MjA6MDQgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBpOTYwLm1kICh1bXVsc2lkaTMrMSk6IEFkZCB2YXJpYW50IHdoaWNoIGFjY2VwdHMgY29uc3RhbnRzLgorCisJKiBmaXhpbmMuc3ZyNDogQ2hhbmdlIGFsbCB1c2VzIG9mIEVYIHRvIFNFRC4KKwkqIGZpeGluY2x1ZGVzIChzeXMvdHlwZXMuaCk6IERvbid0IG1hdGNoIG9uIHNzaXplX3QuCisJKHN0ZGlvLmgpOiBDaGFuZ2UgX1ZBX0xJU1RfIHRvIF9fZ251Y192YV9saXN0IGZvciAzODZCU0QuCisKK1R1ZSBKYW4gMjYgMTM6NDY6MDQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiB4bS1hbHBoYS5oIChPTkxZX0lOVF9GSUVMRFMpOiBEZWZpbmUgaWYgbm90IF9fR05VQ19fLgorCisJKiBjb2xsZWN0Mi5jICh3cml0ZV9saXN0X3dpdGhfYXNtKTogVXNlIGBfX2FzbV9fJyBpbnN0ZWFkIG9mCisJYGFzbScsIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggYC1mbm8tYXNtJy4KKworCSogTWFrZWZpbGUuaW4gKGluc24tKi5bY2hdLCBwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8sIGluc3RhbGwpOiBXaGVuCisJdXNpbmcgYSB0cmFpbGluZyBzZW1pY29sb24gdG8gZm9yY2UgYSBydWxlIHRvIG5vdCBkbyBhbnl0aGluZywKKwlleHBsaWNpdGx5IHJ1biB0aGUgY29tbWFuZCBgdHJ1ZScsIHRvIGF2b2lkIHdhcm5pbmdzIG9yIG90aGVyCisJcHJvYmxlbXMgd2l0aCB2ZXJzaW9ucyBvZiBtYWtlIHdoaWNoIGRvbid0IGxpa2UgbnVsbCBjb21tYW5kcy4KKworVHVlIEphbiAyNiAwNzoxNDoyOSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgY2FzZSBTTUFYKTogQ29ycmVjdGx5CisJY29tcHV0ZSBsYXJnZXN0IHBvc3NpYmxlIHNpZ25lZCBpbnRlZ2VyLgorCisJKiBNYWtlZmlsZS5pbjogKHJlc3QuY3Jvc3MsIGdmbG9hdC5oLCBzdG1wLWhlYWRlcnMsIG1vc3RseWNsZWFuKToKKwlCdWlsZCBhbmQgaW5zdGFsbCBnZmxvYXQuaCBpbnN0ZWFkIG9mIGZsb2F0LmguCisKKwkqIGEyOWsveC11bml4IChDTElCKTogQWRkIC1sbGQuCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgY2FzZSBSRUcpOiBDYWxsCisJZ2VuX2xvd3BhcnQgaW5zdGVhZCBvZiBtYWtpbmcgYW4gZXhwbGljaXQgU1VCUkVHLgorCQorCSogc3RtdC5jIChleHBhbmRfdmFsdWVfcmV0dXJuKTogQ2FsbCBjb252ZXJ0X21vdmUgaW5zdGVhZCBvZiB0aGUKKwllcnJvbmVvdXMgY29udmVydF90b19tb2RlLgorCitUdWUgSmFuIDI2IDAwOjU4OjUzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29sbGVjdDIuYyAoZmluZF9hX2ZpbGUpOiBGaXJzdCBgYWNjZXNzJyB0ZXN0IHdhcyBiYWNrd2FyZHMuCisJKG1haW4pOiBTZXQgZnVsbF9yZWFsX2xkX3N1ZmZpeCByaWdodC4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIDEwIGFzIHNpemUKKwlvZiAuLi5fYXJyYXlfdHlwZV9ub2RlLgorCisJKiBjY2NwLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBJbml0IGFscmVhZHlfb3V0cHV0CisJYWZ0ZXIgb2xkX2xpbmVudW0gbGFiZWwuCisJKGZpbmNsdWRlKTogUmVtb3ZlIGZpbmFsIGJhY2tzbGFzaC1uZXdsaW5lICpiZWZvcmUqIHRyaWdyYXBoX3BjcC4KKwkod3JpdGVfb3V0cHV0KTogRnJlZSBsaW5lX2NvbW1hbmQgYXQgZW5kLgorCitNb24gSmFuIDI1IDE5OjMxOjMyIDE5OTMgIERvdWcgRXZhbnMgIChkamVAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogcHJpbnQtcnRsLmMgKGRlYnVnX3J0eF9saXN0LCBkZWJ1Z19ydHhfZmluZCk6IE5ldyBmdW5jdGlvbnMuCisJKiAuZ2RiaW5pdCAocHJsKTogTmV3IGNvbW1hbmQuCisKK01vbiBKYW4gMjUgMTQ6NDk6NDUgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5jIChpbml0X2FyZ19wcm9maWxlciwgb3V0cHV0X2FyY19wcm9maWxlcik6IERlbGV0ZSB1bnVzZWQKKwlmdW5jdGlvbnMuCisJKiBzcGFyYy5oIChBUkNfUFJPRklMRVIpOiBEZWxldGUgdW51c2VkIG1hY3JvLgorCisJKiBzcGFyYy5jIChzcGFyY19idWlsdGluX3NhdmVyZWdzKTogTmV3IGZ1bmN0aW9uLgorCSogc3BhcmMuaCAoQ1BQX1NQRUMpOiBEZWxldGUgX19zcGFyY19mcndfXyBkZWZpbmUuCisJKFRBUkdFVF9GUldfQ09NUEFUKTogTmV3IG1hY3JvLgorCShUQVJHRVRfREVGQVVMVFMpOiBDb21tZW50IG91dCAtbWZydyBvcHRpb24uICBBZGQgbmV3IGNvbW1lbnRlZAorCW91dCBvcHRpb24gLW1mcnctY29tcGF0LgorCShFWFBBTkRfQlVJTFRJTl9TQVZFUkVHUyk6IENhbGwgc3BhcmNfYnVpbHRpbl9zYXZlcmVncyB0byBlbWl0IHJ0bAorCWlubGluZSBpbnN0ZWFkIG9mIGNhbGxpbmcgYnVpbHRpbl9zYXZlcmVncyBpbiBsaWJnY2MuYS4KKwkqIHZhLXNwYXJjLmggKHZhX3N0YXJ0KTogUmV3cml0ZSB0byBhY2NvdW50IGZvciBhYm92ZSBjaGFuZ2VzLgorCisJKiBzcGFyYy5oIChQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1ApOiBEZWxldGUgJ0AnIGNhc2UuCisJKiBzcGFyYy5jIChwcmludF9vcGVyYW5kKTogTGlrZXdpc2UuCisJKG91dHB1dF9mcF9tb3ZlX2RvdWJsZSk6IERlbGV0ZSBGUF9SRUcgdG8gR0VORVJBTF9SRUcgYW5kIHZpY2UKKwl2ZXJzYSBjb3B5IHN1cHBvcnQuCisJKG91dHB1dF9mcF9tb3ZlX3F1YWQpOiBMaWtld2lzZS4KKwkqIHNwYXJjLm1kIChtb3ZzaSwgbW92dGYsIG1vdmRmLCBtb3ZkaSwgbW92c2YpOiBEZWxldGUgZi9yIGFuZCByL2YKKwljb25zdHJhaW50IHBhaXJzLgorCisJKiBpOTYwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBDb3JyZWN0IHRlc3QgYWdhaW5zdAorCUZJUlNUX1BTRVVET19SRUdJU1RFUi4KKworCSogc3BhcmMuYyAocmVnaXN0ZXJzX29rX2Zvcl9sZGRfcGVlcCk6IERlbGV0ZSB0ZXN0IGZvciBwc2V1ZG9zLgorCisJKiBvcHRhYnMuYyAoZW1pdF9pbmRpcmVjdF9qdW1wKTogVXNlIFBtb2RlIGluc3RlYWQgb2YgVk9JRG1vZGUgYW5kCisJaW5zbl9vcGVyYW5kX21vZGUuCisKKwkqIGNhbGxzLmMgKGNhbGxzX2FsbG9jYSk6IENoYW5nZSBuYW1lIHRvIGNhbGxzX2Z1bmN0aW9uLiAgQWRkIG5ldworCXBhcmFtZXRlciBXSElDSCB0byBjb250cm9sIG9sZCBvciBuZXcgYmVoYXZpb3VyLgorCShleHBhbmRfY2FsbCk6IFdoZW4gc3RhY2sgc3BhY2UgaXMgcHJlYWxsb2NhdGVkIGFuZCBwYXJhbWV0ZXJzCisJbXVzdCBiZSBwYXNzZWQgb24gdGhlIHN0YWNrLCBwcmVjb21wdXRlIHBhcmFtZXRlcnMgdGhhdCBpbnZvbHZlCisJZnVuY3Rpb24gY2FsbHMuCisKKwkqIGMtZGVjbC5jIChsYW5ndWFnZV9zdHJpbmcpOiBEZWxldGUgZnJvbSBoZXJlLgorCSogYy1wYXJzZS5pbiAobGFuZ3VhZ2Vfc3RyaW5nKTogRGVmaW5lIGhlcmUgZm9yIEMgYW5kIE9iai1DLgorCitNb24gSmFuIDI1IDEzOjU0OjE2IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEaXNhYmxlICJzdHJ1Y3R1cmUvdW5pb24gZGVmaW5lZAorCWluc2lkZSBwYXJtcyIgaWYgY29tcGlsaW5nIHdpdGggLXRyYWRpdGlvbmFsLgorCitNb24gSmFuIDI1IDA1OjI0OjEyIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGkzODYubWQgKGV4dGVuZHNpZGkyKTogRml4IHR5cG8gaW4gcmVnbm8uCisKK01vbiBKYW4gMjUgMDA6MDc6MTggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAobG9va3VwX2xhYmVsKTogUmV0dXJuIDAgaWYgbm90IHdpdGhpbiBhIGZ1bmN0aW9uLgorCisJKiBjLXBhcnNlLmluICh1bmFyeV9leHByID0+IEFOREFORCBpZGVudGlmaWVyKToKKwlIYW5kbGUgbG9va3VwX2xhYmVsIHJldHVybmluZyAwLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1mbG9hdC1oLWNyb3NzKToKKwlEb24ndCBpZ25vcmUgZXJyb3Igd2hlbiBydW5uaW5nIGVucXVpcmUuCisKK1N1biBKYW4gMjQgMjI6NDE6MDAgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvdW5kX2V4cHIpOiBNb3ZlIHRoZSBjb2RlIGludG8KKwlpbnRlcm5hbF9idWlsZF9jb21wb3VuZF9leHByLCBhbmQgcGFzcyBzZWNvbmQgYXJndW1lbnQgVFJVRQorCWluZGljYXRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLiAgRm9yIHJlY3Vyc2l2ZSBjYWxscywgcGFzcworCUZBTFNFLiAgRG8gbm90IG1ha2UgMCBhIG5vbl9sdmFsdWUgY29uc3RhbnQgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKwljYWxsLCB0byBhbGxvdyByZXR1cm4gMDsgZnJvbSBhIHBvaW50ZXIgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG5vdAorCWdldCBhIHdhcm5pbmcuCisKK1N1biBKYW4gMjQgMTg6NDA6NDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvdmF4L3ZheC5tZCAobW92ZS9wdXNoIGFkZHJlc3MgcGF0dGVybnMpOgorCURvbid0IHVzZSBhbHRlcm5hdGl2ZSBudW1iZXIgdG8gZGlzdGluZ3Vpc2ggcHVzaGVzIGZyb20gbW92ZXMuCisJVXNlIGp1c3Qgb25lIGFsdGVybmF0aXZlIGBnJyBpbiBvdXRwdXQgY29uc3RyYWludC4KKworU3VuIEphbiAyNCAwNzoxOTowMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBDYWxsIGFsdGVyX3N1YnJlZyBvbiBkdXBsaWNhdGUKKwlvcGVyYW5kcyAoaW4gY2FzZSB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBpbnNuKS4KKworCSogbG9jYWwtYWxsb2MuYyAoQ0xBU1NfTElLRUxZX1NQSUxMRURfUCk6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24uCisJKGFsbG9jX3F0eV9mb3Jfc2NyYXRjaCwgbG9jYWxfYWxsb2MpOiBVc2UgQ0xBU1NfTElLRUxZX1NQSUxMRURfUC4KKworU2F0IEphbiAyMyAxOTo0MToyMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoYXBwbHlfZGlzdHJpYnV0aXZlX2xhdyk6IERvbid0IG1lc3Mgd2l0aCBmbG9hdCBhcml0aC4KKworCSogYy1wYXJzZS5pbjogVXNlIG5ldyBuYW1lIG9iamMtYWN0LmguCisKK1NhdCBKYW4gMjEgMTM6MTI6NDkgMTk5MyAgU2VyZ2UgQWRkYSAgKGFkZGFAc29mdDAxKQorCisJKiBleHBtZWQuYyAoZW1pdF9zdG9yZV9mbGFnKTogUmVzZXQgSUNPREUgdXNpbmcgcmV0dXJuZWQgQ09NUEFSSVNPTi4KKworU2F0IEphbiAyMyAxODoyNzozNSAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzQHNwaWZmLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbTY4ay90b3dlci5oIChMSUJfU1BFQyk6IFVzZSAlcyBpbnN0ZWFkIG9mIGFic29sdXRlIHBhdGguCisJKFNUQVJURklMRV9TUEVDKTogTW92ZWQgaGVyZSBmcm9tIHRvd2VyLWFzLmguICBVc2UgJXMgaW5zdGVhZCBvZgorCWFic29sdXRlIHBhdGguCisJKiBjb25maWcvbTY4ay90b3dlci1hcy5oIChTVEFSVEZJTEVfU1BFQyk6IE1vdmVkIHRvIHRvd2VyLmguCisKK1NhdCBKYW4gMjMgMTY6Mjg6NDggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKGNoYW5nZV9uZXdsaW5lcyk6IFJlbmFtZWQgZnJvbSBkZWxldGVfbmV3bGluZXMuCisJSW5zZXJ0IGEgc3BhY2UgaW4gcGxhY2Ugb2YgYSBuZXdsaW5lLiAgQ2FsbGVyIGNoYW5nZWQuCisKKwkqIGNvbmZpZy9tNjhrL2hwMzIwLmggKEFTTV9PVVRQVVRfRE9VQkxFX09QRVJBTkQpOiBEZWxldGUgc3BhY2UKKwliZWZvcmUgYXJnbGlzdC4KKworU2F0IEphbiAyMyAwOToyMDo0MSAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzIGF0IGRlbGxhLmFwcGxpLnNlKQorCisJKiBNYWtlZmlsZS5pbiAoY3Jvc3MtdGVzdCk6IERlcGVuZCBvbiBHQ0NfUEFSVFMuCisKK1NhdCBKYW4gMjMgMDc6MTU6MTAgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBBZnRlciBjYWxsaW5nIGNvdW50X3Bvc3NpYmxlX2dyb3Vwcywgc2VlCisJaWYgd2UgaGF2ZSB0byBwcm9jZWVkIHdpdGggYWxsb2NhdGluZyBhIGdyb3VwLgorCShjb3VudF9wb3NzaWJsZV9ncm91cHMpOiBVc2UgSEFSRF9SRUdfU0VULCBub3QgYSBjaGFyIGFycmF5LCBmb3IKKwljb25zaXN0ZW5jeS4KKworCSogcnM2MDAwLmggKEFESlVTVF9DT1NUKTogQWRkIG5ldyBkZWZpbml0aW9uLgorCitGcmkgSmFuIDIyIDE4OjU1OjAwIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGZpeGluYy5zdnI0OiBVc2UgcHdkIGlmIFBXRENNRCBpcyB1bmRlZmluZWQuICBBZGQgbWlzc2luZyBlY2hvCisJY29tbWFuZC4KKworRnJpIEphbiAyMiAxODowODo0NyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlDeWdudXM8LS0+RlNGIG1lcmdlLgorCisJVGh1IEphbiAyMSAxNToyNjo1OSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChjb252ZXJ0Lm8pOiBBZGQgZGVwZW5kZW5jaWVzLgorCisJKiBjcC1nYy5jIChOVUxMKTogVW5kZWYgYmVmb3JlIGRlZmluaW5nLgorCSogY3AtaW5pdC5jIChOVUxMKTogTGlrZXdpc2UuCisJKiBjcC1leHByLmMgKE5VTEwpOiBMaWtld2lzZS4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFJlbGVnYXRlIGVycm9yIGFib3V0IG9wZXJhdG9yPSB0byBhCisJd2FybmluZyBmb3Igbm93LCBhbiBlcnJvciBsYXRlci4KKworCVR1ZSBKYW4gMTkgMTY6NDA6MTkgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hc3NlcnQpOiAgRG9uJ3Qgc2V0IGVycm9yY291bnQgb3IKKwlzb3JyeWNvdW50IHRvIHplcm8sIGFzIHdlIG5vIGxvbmdlciBzYXkgInBsZWFzZSBmaXggYWJvdmUgZXJyb3JzIi4KKworCU1vbiBKYW4gMTggMTk6NDQ6NTMgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hYm9ydCk6IEV4aXQgcXVpZXRseSBpbiBjYXNlcyBvZiByYW5kb20KKwlzZWcgZmF1bHRzIGluIHRoZSBmcm9udC1lbmQgaW4gdGhlIHByZXNlbmNlcyBvZiBvdGhlciBlcnJvcnMuICBUaGlzCisJbWFrZXMgdGhlIGhhbmRsaW5nIG9mIHRoZXNlIHRoaW5ncyBtb3JlIHVuaWZvcm0uCisKKwlNb24gSmFuIDE4IDE2OjIzOjExIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvcgorCXtwcmUscG9zdH0te2luY3JlbWVudCxkZWNyZW1lbnR9LgorCisJTW9uIEphbiAxOCAxMzo1ODoxNCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UuCisKKwlGcmkgSmFuIDE1IDE3OjUzOjMzIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCUZyaSBKYW4gMTUgMDA6MzU6MjIgMTk5MyAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhcyBhdCBkZWxsYS5hcHBsaS5zZSkKKworCSogY3AtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFJlbW92ZWQgdGhlIGNvbXBfdGFyZ2V0X3Bhcm1zIHRlc3QKKwl3aGVuIGNoZWNraW5nIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgIkMiIGxpbmthZ2UgZnVuY3Rpb25zLCBhbGxvd3MKKwlmb3IgbW9yZSBvdmVybG9hZGluZyBvZiBleHRlcm4gIkMiIGZ1bmN0aW9ucy4KKworCUZyaSBKYW4gMTUgMTc6MzI6NTYgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJRnJpIEphbiAxNSAwMDozNToyMiAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzIGF0IGRlbGxhLmFwcGxpLnNlKQorCisJKiBjcC1kZWNsLmMgKGdyb2t2YXJkZWNsKTogSW1wbGVtZW50IHRoZSAib25lIGRlZmluaXRpb24gcnVsZSIuCisKKwlGcmkgSmFuIDE1IDE3OjE3OjA1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlKTogQ29tcHV0ZSByZXN1bHRzIGZyb20gY2FsbHMgdG8KKwlyZWN1cnNpdmVfYm91bmRlZF9iYXNldHlwZV9wIGludG8gYSB0ZW1wIHZhcmlhYmxlLCBhcyBvdGhlcndpc2Ugd2UKKwljYW4gY2xvYmJlciBydmFsIHdpdGggYSB6ZXJvLgorCisJRnJpIEphbiAxNSAxNzoxMDo1OSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlUaHUgSmFuIDE0IDE2OjAyOjI3IDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCB0cnkgdG8gbWF0Y2ggc3RhdGljIG1lbWJlcgorCWZ1bmN0aW9ucyB3aXRoICJDIi1saW5rYWdlIGRlY2xhcmVkIGdsb2JhbCBmdW5jdGlvbnMuCisKKwlUaHUgSmFuIDE0IDE3OjU4OjE1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtbWV0aG9kLmMsIGNwLXR5cGUyLmMsIGNwLXR5cGVjay5jOiAgTWFrZSBzdXJlIHRoZSBmb3VydGgKKwlhcmd1bWVudCB0byBidWlsZF9vdmVybG9hZF9jYWxsIGlzIChzdHJ1Y3QgY2FuZGlkYXRlICopMCBub3QganVzdAorCWEgcGxhaW4gMC4KKworCVRodSBKYW4gMTQgMTc6MTU6NDAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgd2FybiBvbiBhbiBpbml0aWFsaXplZCB2YXIKKwl0aGF0J3MgZXh0ZXJuIGlmIGl0J3MgYSBjb25zdC4KKworCVRodSBKYW4gMTQgMTc6MDM6NDAgMTk5MyAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWRkIG5ldyBwYXJhbWV0ZXIgSU5fREVDTC4KKwlVcGRhdGUgZXJyb3IgbWVzc2FnZXMgdG8gZ2l2ZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgX0RFQ0wKKwl3aGVuIGFuIGluc3RhbnRpYXRpb24gZmFpbHMuCisJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERpdHRvLgorCSh0c3Vic3QpOiBEaXR0by4KKwlBbGwgY2FsbGVycyBjaGFuZ2VkLgorCSogY3AtdHJlZS5oIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBVcGRhdGUgcHJvdG90eXBlLgorCSogY3AtcGFyc2UueSAodGVtcGxhdGVfdHlwZV9uYW1lKTogVXBkYXRlIGNhbGxzIHRvCisJbG9va3VwX3RlbXBsYXRlX2NsYXNzLgorCisJVGh1IEphbiAxNCAwMjowOToxNyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tmaWVsZCk6IEFycmFuZ2UgZm9yIHRoZSB0eXBlIHRvIGJlIHNldCBvbiBjbGFzcworCXR5cGVkZWZzLCBjdXJlcyBvbmUgdHlwZSBvZiBpbnRlcm5hbCBjb21waWxlciBlcnJvciA2Mi4gIE5vdyBjYWxscworCXNldF9pZGVudGlmaWVyX3R5cGVfdmFsdWUganVzdCBiZWZvcmUgcHVzaGRlY2xfY2xhc3NfbGV2ZWwuIAorCisJV2VkIEphbiAxMyAyMjo0Mzo1OCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZSk6ICBBbGxvdyBjaGVja2luZyBvZiBVTklPTl9UWVBFcywKKwlhcyBzb21lIG9mIHRoZSBpbml0IGNvZGUgY2FsbHMgdXMuCisKKwlXZWQgSmFuIDEzIDIxOjEyOjIyIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCU1vbiBKYW4gMTEgMjA6MTE6MTcgMTk5MyAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhcyBhdCBkZWxsYS5hcHBsaS5zZSkKKworCSogY3AtcGFyc2UueSAoaW1wbGljaXRseV9zY29wZWRfc3RtdCwgc2ltcGxlX3N0bXQpOiBOZXcgcnVsZXMgdG8KKwloYW5kbGUgdGhlIGNoYW5nZWQgc2VtYW50aWNzIG9mIHNlbGVjdGlvbiAmIGl0ZXJhdGlvbiBzdGF0ZW1lbnRzCisJaW4gQU5TSSBDKysgKGNoZWNrIG91dCA2LjQtNSBpbiB0aGUgZHJhZnQgYXMgb3Bwb3NlZCB0byB0aGUgQVJNKS4KKwkoc2ltcGxlX2lmLCBzdG10LCBjb21wc3RtdCk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgcnVsZXMuCisJKHN0bXRfZGVjbF9tc2cpOiBSZW1vdmVkIHRoaXMgc3RhdGljICh0b2dldGhlciB3aXRoIGFsbCBpdHMgdXNlcykKKwliZWNhdXNlIGl0J3Mgbm93IHVubmVjZXNzYXJ5LgorCShjb25kX3N0bXRfa2V5d29yZCk6IE5ldyBzdGF0aWMgc3RyaW5nIHRvIHVzZSBpbiB0aGUgZXJyb3IgbWVzc2FnZQorCW9mIHBhcmVuX2V4cHJfb3JfbnVsbC4KKwkocGFyZW5fZXhwcl9vcl9udWxsKTogVXNlIGNvbmRfc3RtdF9rZXl3b3JkIGluc3RlYWQgb2Ygc3RtdF9kZWNsX21zZy4KKworCVR1ZSBKYW4gMTIgMTg6NTM6NDQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGxvb2t1cF9uYW1lKTogSWYgUFJFRkVSX1RZUEUgaXMgLTIsIGRvbid0IGNhbGwKKwlsb29rdXBfbmVzdGVkX2ZpZWxkLgorCSogY3Atc3Bldy5jICh5eWxleCkgW0lERU5USUZJRVIgY2FzZV06IENhbGwgbG9va3VwX25hbWUgd2l0aCAtMgorCWluc3RlYWQgb2YgLTEuCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tjbGFzc2ZuKTogSWYgdGhlcmUncyBubyBJREVOVElGSUVSX1RZUEVfVkFMVUUgKGl0CisJY291bGQgaGF2ZSBnb3R0ZW4gYmxvd24gYXdheSBieSBwb3BsZXZlbF9jbGFzcyksIHVzZSBjdHlwZSB0byBidWlsZAorCXRoZSBvdmVybG9hZCBuYW1lLgorCisJKiBjcC1jYWxsLmMgKGNvbnZlcnRfaGFyc2huZXNzKTogQXZvaWQgZGVyZWZlcmVuY2luZyBhIG51bGwgUEFSTSwKKwl3aGljaCBjYW4gYmUgcGFzc2VkIGluIGJ5IGNvbnZlcnRfaGFyc2huZXNzIGl0c2VsZi4KKworCU1vbiBKYW4gMTEgMTI6MjU6NTEgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChWVEFCTEVfTkFNRV9QLCBWQkFTRV9OQU1FX1ApOiBSZXZlcnNlIG9yZGVyLCBzbyB0aGV5J2xsCisJZ28gZm9yIFsxLi4zXSwgdG8gYXZvaWQgcmVmZXJlbmNpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgYSBuYW1lLgorCisJKiBjcC14cmVmLmMgKGZjdG5hbWUpOiBEZWxldGUgZXh0ZXJuIGRlY2wgb2YgYGRlY2xuYW1lJy4KKworCSogY3AtdHlwZTIuYyAoYnVpbGRfc2NvcGVkX3JlZik6IFBhc3MgdGhlIG5vZGVzIHRoZW1zZWx2ZXMgZG93biBpbnRvCisJZXJyb3Jfbm90X2Jhc2VfdHlwZSwgbm90IHRoZSBzdHJpbmdzLCBzaW5jZSBpdCdsbCBwZWVsIG9mZiB0aGUgZGVjbAorCW5hbWUgYW5kIHR5cGUgbmFtZSBvZiB0aGVtIGl0c2VsZi4KKworCSogY3AtY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IGZsYWdfYXNzdW1lX25vbm51bGxfb2JqZWN0cyBpcyBhbgorCWludCwgbm90IGEgdHJlZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlX21ldGhvZHMpOiBPbmx5IGVtaXQgd2FybmluZyBhYm91dCBkYnggaW5mbworCWZvciB0ZW1wbGF0ZXMgd2hlbiBXQVJOX1RFTVBMQVRFX0RFQlVHR0lORyBpcyBzZXQuICBPbmx5IHJlZmVyZW5jZQorCXRoZSB2YXIgV0FSTl9URU1QTEFURV9ERUJVR0dJTkcgaWYgd2UndmUgZ290IEhBVkVfVEVNUExBVEVTIGRlZmluZWQuCisJKiBjcC10cmVlLmggKEhBVkVfVEVNUExBVEVTKTogRGVmaW5lLgorCSogY3AtZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0IFdBUk5fVEVNUExBVEVfREVCVUdHSU5HIHdoZW4KKwlnaXZlbiAtV2FsbC4KKwkqIGZsYWdzLmggKHdhcm5fdGVtcGxhdGVfZGVidWdnaW5nKTogQWRkIGV4dGVybiBkZWNsLgorCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCAtV3RlbXBsYXRlLWRlYnVnZ2luZy4KKworCSogY3AtZGVjbC5jIChtYWtlX3RlbXBvcmFyeV9mb3JfcmVmZXJlbmNlKTogQ2FsbCBtYWtlX2RlY2xfcnRsIHdpdGgKKwlhIE5VTExfUFRSLCBub3QgMC4KKwkoZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KKwkoZ3Jva2ZuZGVjbCk6IFdpdGggYSBOVUxMX1BUUiwgbm90IGEgTlVMTF9UUkVFLgorCisJRnJpIEphbiAgOCAxOTo0Mzo1MiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChnZXRfYmluZm8pOiBVc2Ugb2JzdGFja19wdHJfZ3JvdyBpbnN0ZWFkIG9mCisJb2JzdGFja19pbnRfZ3JvdywgY2FzdGluZyB0aGUgaW50IHRvIGEgdm9pZCouICBXaGVuIHJldHJpZXZpbmcgaXQsCisJY2FzdCB0aGUgcmVzdWx0IG9mIGRlcmVmZXJlbmNpbmcgU0VBUkNIX1NUQUNLLT5GSVJTVCBhcyBhbiBpbnQuCisJKGdldF9iYXNlX2Rpc3RhbmNlKTogTGlrZXdpc2UuCisJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogTGlrZXdpc2UuCisKK0ZyaSBKYW4gMjIgMTU6MDk6NDIgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogcHlyLmggKFNJWkVfVFlQRSk6IERlZmluZS4KKwkoTk9fRE9MTEFSX0lOX0xBQkVMKTogRGVmaW5lLgorCitGcmkgSmFuIDIyIDEyOjE5OjQ3IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IFNpbXBsaWZ5LgorCitGcmkgSmFuIDIyIDA3OjU3OjU3IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dSkKKworCSogY29sbGVjdDIuYyAob3VyX2ZpbGVfbmFtZSk6IE5ldyB2YXJpYWJsZS4KKwkoZmluZF9hX2ZpbGUpOiBJZ25vcmUgZmlsZW5hbWUgZXF1YWwgdG8gdGhhdCBpbiBvdXJfZmlsZV9uYW1lLgorCShtYWluKTogSW5pdGlhbGl6ZSBvdXJfZmlsZV9uYW1lLgorCisJKiBleHByLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogQ29ycmVjdCBtaXMtYXBwbGllZCBwYXRjaC4KKworVGh1IEphbiAyMSAxMTozNjowNCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKFJFR19DTEFTU0VTKTogRGVsZXRlIEdFTkVSQUxfT1JfRlBfT1JfU05BS0VfRlAgcmVnaXN0ZXIKKwljbGFzcywgaXQncyBub3QgbmVlZGVkIGFueW1vcmUuICBEZWxldGUgYWxsIHJlZmVyZW5jZXMuICAnWicKKwlyZWdpc3RlciBjbGFzcyBpcyBub3cgIkFMTF9SRUdTIi4KKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEhhbmRsZSBzZWNvbmRhcnkgcmVsb2FkcyBmb3IgU0FSLgorCitUdWUgSmFuIDE5IDIwOjA4OjAxIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCUZyb20gVG9yYmpvcm4gR3Jhbmx1bmQgKHRlZ2VAc2ljcy5zZSk6CisJKiBpOTYwLmMgKGNtcGxwb3dlcjJfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGk5NjAubWQgKGFkZHNpMyk6IENsZWFuIHVwIGNvbmRpdGlvbiBmb3Igd2hlbiB0byB1c2Ugc3Viby4KKwkodW11bHNpZGkzKTogTmV3IHBhdHRlcm4uCisJKG5vbi1jYW5vbmljYWwgbmFuZCwgbm9yKTogUmVtb3ZlIHBhdGVybnMuCisJKGNscmJpdCwgbm90Yml0IHN0YXRpYyBiaXQpOiBOZXcgcGF0dGVybnMuCisJKHNldGJpdCwgY2xyYml0LCBub3RiaXQgZHluYW1pYyBiaXQpOiBOZXcgcGF0dGVybnMuCisJKHNldGJpdCBzdGF0aWMgYml0IG5vbi1jYW5vbmljYWwpOiBSZW1vdmUgcGF0dGVybi4KKwkobXVsZGYzLCBtdWxzZjMsIG11bHRmMyk6IEFkZCAlIHRvIG9wZXJhbmQxLgorCSh0ZXN0IHJlY29nbml6ZXJzKTogVXNlIFRBQiBlZnRlciBtbmVtb25pYy4KKworCSogcmVvcmcuYyAodXBkYXRlX3JlZ19kZWFkX25vdGVzKTogTmV3IGZ1bmN0aW9uLgorCShmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IENhbGwgbmV3IGZ1bmN0aW9uIHdoZW4gbW92aW5nCisJaW5zdHJ1Y3Rpb24gZm9yd2FyZCBpbnRvIGEgZGVsYXkgc2xvdC4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8xLCBzY2hlZF9hbmFseXplXzIpOiBJZmRlZiBvdXQgY29kZSBhZGRlZAorCWZvciBoYW5kbGluZyBwc3VlZG8gcmVnaXN0ZXIgZXF1aXZhbGVudHMgdGhhdCB3YXMgYWRkZWQgRGVjIDMxIDE5OTIuCisKKwlGcm9tIFN0ZXZlIENoYW1iZXJsYWluIChzYWNAY3lnbnVzLmNvbSk6CisJKiBsaWJnY2MxLmMgKF9fZXFkZjIsIF9fbmVkZjIsIF9fZ3RkZjIsIF9fZ2VkZjIsIF9fbHRkZjIsIF9fbGVkZjIsCisJX19lcXNmMiwgX19uZXNmMiwgX19ndHNmMiwgX19nZXNmMiwgX19sdHNmMiwgX19sZXNmMik6ICBjb21wYXJpc29uCisJcmVzdWx0IHR5cGUgaXMgbm93IHdvcmRfbW9kZS4KKwkqIGxpYmdjYzIuYyAoY21wZGkyLCB1Y21wZGkyKTogY29tcGFyaXNvbiByZXN1bHQgdHlwZSBpcyBub3cKKwl3b3JkX21vZGUuCisJKiBvcHRhYnMuYyAoZW1pdF9jbXBfaW5zbiwgZW1pdF9mbG9hdF9saWJfY21wKTogbGliY2FsbCBjb21wYXJpc29ucworCXJldHVybiB3b3JkX21vZGUuCisKK1R1ZSBKYW4gMTkgMTU6Mjg6NTkgMTk5MyAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xKTogU2V0IElOU05fQ09ERSB0byAtMSBiZWZvcmUgc2VlaW5nCisJaWYgbmV3IGluc24gZm9ybSBpcyByZWNvZ25pemVkLgorCisJKiByZWctc3RhY2suYyAoYWxsIGZ1bmN0aW9ucyk6IFVzZSBOVUxMX1JUWCBpbnN0ZWFkIG9mIDAgZm9yIHJ0eAorCWNvbXBhcmlzb25zLgorCisJKGVtaXRfcG9wX2luc24pOiBFbWl0IGluc24gd2l0aCBtb2RlIFFJbW9kZTogaW5zbiBjb250YWlucworCXN0YWNrLXJlZ3MuCisKKwkoZW1pdF9oYXJkX3N3YXBfaW5zbik6IERlbGV0ZS4KKwkoZW1pdF9zd2FwX2luc24pOiBNZXJnZSB3aXRoIGVtaXRfaGFyZF9zd2FwX2luc24uCisJRGVsZXRlIFdIRU4gYXJnIGFuZCBjaGFuZ2UgYWxsIGNhbGxlcnMuCisJSWYgcHJldmlvdXMgaW5zbiB3YXMgYSBwdXNoIGZyb20gUkVHLCBvbWl0IHN3YXAuCisJSWYgcHJldmlvdXMgaW5zbiB3cm90ZSByZWctc3RhY2sgdG9wIHRvIFJFRywgb21pdCBzd2FwLgorCUVtaXQgc3dhcCBpbnNuIHdpdGggbW9kZSBRSW1vZGU6IGluc24gY29udGFpbnMgc3RhY2stcmVncy4KKwlFbWl0IHN3YXAgaW5zbiBhZnRlciBwcmV2aW91cyBmbG9hdCBpbnNuLCBpbnN0ZWFkIG9mIGJlZm9yZSB0aGlzCisJb25lLgorCisJKHN3YXBfcnR4X2NvbmRpdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkoY29tcGFyZV9mb3Jfc3RhY2tfcmVnKTogSWYgb3AgMCBvZiBDT01QQVJFIGlzIG5vdCBhIHN0YWNrIHJlZywKKwlleGNoYW5nZSBvcHMgMCBhbmQgMSBhbmQgc3dhcCBjYzAgdXNlciBjb25kaXRpb24uCisKKwkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IE5hcnJvdyBBTExfUkVHUyB0bworCUdFTkVSQUxfUkVHUy4KKwkoUFJFRkVSUkVEX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBOZXcgbWFjcm8uICBOYXJyb3cgQUxMX1JFR1MgdG8KKwlHRU5FUkFMX1JFR1MuCisJKFNFQ09OREFSWV9NRU1PUllfTkVFREVEKTogTmV3IG1hY3JvLgorCisJKiBpMzg2Lm1kIChjbXBkZl9jYyxjbXBzZl9jYyk6IEFsbG93IGZpcnN0IG9wZXJhbmQgdG8gYmUgYSBNRU0uCisJRG9uJ3QgYWxsb3cgYm90aCBvcGVyYW5kcyB0byBiZSBNRU0uCisJKGZsb2F0IGFkZE0zLHN1Yk0zLGRpdk0zLG11bE0zIHJlY29nbml6ZXJzKTogRG9uJ3QgYWxsb3cgZWl0aGVyCisJb3BlcmFuZCB0byBiZSBhIGNvbnN0YW50LgorCisJKGFsbCBmbG9hdCBwYXR0ZXJucywgRkxPQVRfRVhURU5EIG9wZXJhbmRzKTogRG9uJ3QgYWxsb3cKKwlHRU5FUkFMX1JFR1MgZm9yIGZsb2F0X2V4dGVuZGVkIG9wZXJhbmQuCisJKGFsbCBmbG9hdCBwYXR0ZXJucywgRkxPQVQgb3BlcmFuZHMpOiBDaGFuZ2UgY29uc3RyYWludHMgdG8gZ2V0CisJYmV0dGVyIHJlZ2lzdGVyIGNsYXNzaWZpY2F0aW9uLgorCShmaXhfdHJ1bmNNTjIgcGF0dGVybnMpOiBMaWtld2lzZS4KKwkoZmxvYXRNTjIgcGF0dGVybnMpOiBMaWtld2lzZS4KKworVHVlIEphbiAxOSAxNTo1MToxNiAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAaGFsLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQgZm9yIG1lbW9yeSk6IE1lbW9yeSBpcyBwaXBlbGluZWQuCisKKwkqIHBhLm1kIChzQ0MgcGF0dGVybnMpOiBVc2UgJWNoYXIgbm90YXRpb24gaW5zdGVhZCBvZiBuZXN0ZWQKKwlpZiBzdG10cy4KKwkoYnJhbmNoIG1hdGNoZXJzKTogTGlrZXdpc2UuCisJKGluY3NjYywgbmVnc2NjKTogTGlrZXdpc2UuICBBZGQgPyBjb25zdHJhaW50IGZvciAzLWluc24KKwlhbHRlcm5hdGl2ZS4KKwkoaW5jc2NjKTogU3BsaXQgaW50byBgaW5jc2NjJyBhbmQgYGRlY3NjYycgdG8gbWFrZSB0aGlzIHJlYWxseQorCW1hdGNoLgorCShpbmNzY2MvZGVjc2NjIHNwZWNpYWwgY2FzZXMpOiBOZXcgcGF0dGVybnMgdXNpbmcgY2FycnkgYml0LgorCSogcGEuYyAocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSAnUycgYW5kICdCJyBmb3IgY29uZGl0aW9ucy4KKwlIYW5kbGUgJ0knIGZvciBwcmludGluZyAnaScgd2hlbiBDT05TVF9JTlQuCisJSGFuZGxlICdrJyBmb3Igb25lcy1jb21wbGVtZW50IG9mIENPTlNUX0lOVC4KKwkoaW5jc2NjX29wZXJhdG9yKTogUmVtb3ZlLgorCisJKiBwYS5tZCAobWFueSBwYXR0ZXJucyk6IFVzZSBjYW5vbmljYWwgYWRkcmVzcyBmb3JtYXQuICBVc2UgJXIKKwlyZWdpc3RlciBub3RhdGlvbi4gIFVzZSBHRU5fSU5ULgorCisJKiBwYS5tZCAobWFpbiBtb3ZlIFNGIHJlY29nbml6ZXIpOiBBbGxvdyAwIGZvciBjb3B5aW5nIHRvCisJZ2VuZXJhbCByZWdpc3Rlci4KKworCSogcGEubWQgKHplcm9fZXh0ZW5kaGlzaTIpOiBSZW1vdmUgREVGSU5FX0VYUEFORC4KKwkoemVyb19leHRlbmRxaWhpMik6IExpa2V3aXNlLgorCSh6ZXJvX2V4dGVuZHFpc2kyKTogTGlrZXdpc2UuCisJKGNvbW1lbnQgYmVmb3JlIHNpZ24gZXh0ZW5zaW9uKTogUmVtb3ZlIHRoZSBsaWUuCisKKwkqIHBhLmggKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IFJlbW92ZSBwYXJ0bHkgaW5jb3JyZWN0IFBBCisJZG9jdW1lbnRhdGlvbi4KKworVHVlIEphbiAxOSAwOToyMjowNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAobm9uX2x2YWx1ZSk6IFJlc3VsdCBtdXN0IG5vdCBiZSBudWxsIHB0ciBjb25zdGFudC4KKwkob21pdF9vbmVfb3BlcmFuZCk6IFVzZSBub25fbHZhbHVlLgorCShmb2xkLCBjYXNlIENPTVBPVU5EX0VYUFIpOiBVc2Ugbm9uX2x2YWx1ZSBpZiB2YWx1ZSBpcyAwLgorCSogYy10eXBlY2suYyAoYnVpbGRfY29tcG91bmRfZXhwcik6IFVzZSBub25fbHZhbHVlIGlmIHZhbHVlIGlzIDAuCisKK1R1ZSBKYW4gMTkgMDg6Mjk6MTYgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ2snKTogTmV3IGNhc2UuCisJKiByczYwMDAubWQgKHBsdXMgb2YgZ3R1IHBhdHRlcm5zKTogQWRkIGNhc2UgdG8gaGFuZGxlIGltbWVkaWF0ZXMuCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9nKTogT25seSByZXN0b3JlIHRoZSBjcidzIHRoYXQgd2UgYWN0dWFsbHkKKwl1c2VkOyBwcmV2aW91c2x5LCB3ZSBzYXZlZCBhbmQgcmVzdG9yZWQgYWxsIG9mIHRoZW0uCisKKwkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBDbGVhciByZWdfbGFzdF9zZXRfbGFiZWwuCisKK1R1ZSBKYW4gMTkgMDE6MTY6NDUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRG9uJ3QgbWFyayBsYWJlbHMgaW4gbm9ubG9jYWxfbGFiZWxfbGlzdAorCXRoYXQgd2VyZSBkZWxldGVkIGR1ZSB0byBoYXZpbmcgbm8gcmVmZXJlbmNlcy4KKworTW9uIEphbiAxOCAyMTowMjoyMiAxOTkzICBILkouIEx1ICAoaGx1QHlhcmRiaXJkLmVlY3Mud3N1LmVkdSkKKworCSogY29uZmlndXJlICgtLWxvY2FsLXByZWZpeD1ESVIpOiBuZXcgZmxhZyBzZXRzICRsb2NhbF9wcmVmaXguCisJVGhlIGRlZmF1bHQgaXMgL3Vzci9sb2NhbC4gIFB1dCBpdCBpbnRvIE1ha2VmaWxlLgorCisJKiBNYWtlZmlsZS5pbiAobG9jYWxfcHJlZml4KTogbmV3IHByZWZpeCwgdGhlIGRlZmF1bHQgaXMgL3Vzci9sb2NhbC4KKwkoY2NjcC5vKTogY2hhbmdlIExPQ0FMX0lOQ0xVREVfRElSIHRvICQobG9jYWxfcHJlZml4KS9pbmNsdWRlLgorCitNb24gSmFuIDE4IDE1OjI5OjQ2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3QuYywgb2JqYy1hY3QuaDogUmVuYW1lZCBmcm9tIG9iamMtYWN0aW9ucy4qLgorCSogb2JqYy1hY3QuYzogSW5jbHVkZSBvYmpjLWFjdC5oLgorCSogTWFrZWZpbGUuaW46IFRhcmdldHMgYW5kIGRlcHMgY2hhbmdlZC4KKworCSogb2JqYy1hY3Rpb25zLmMgKGVuY29kZV9tZXRob2RfZGVmKTogTnVsbC10ZXJtaW5hdGUgZW5jb2RpbmcuCisJKGJ1aWxkX2l2YXJfbGlzdF9pbml0aWFsaXplcik6IE51bGwtdGVybWluYXRlIHR5cGUgZW5jb2RpbmcuCisKKwkqIGNjY3AuYyAoaW5jbHVkZV9kZWZhdWx0cyk6IERvIHVzZSBHQ0NfSU5DTFVERV9ESVIgZm9yIGNyb3NzIGNvbXBpbGVyLgorCU1vdmUgVE9PTF9JTkNMVURFX0RJUiBsYXRlciBpZiBjcm9zcy4KKworTW9uIEphbiAxOCAxMzozOTozMiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBIYW5kbGUgT1VUR09JTkdfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UuCisJVXNlIE5VTExfVFJFRSBpbnN0ZWFkIG9mICh0cmVlKSAwLgorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuLCBleHBhbmRfZXhwcik6IEZpeCB0eXBvcyBpbiBjb21tZW50cy4KKworCSogY2NjcC5jIChpbml0aWFsaXplX2J1aWx0aW5zKTogQWRkIHVzZXMgb2YgbmV3IG1hY3JvcworCU5PX0JVSUxUSU5fU0laRV9UWVBFIGFuZCBOT19CVUlMVElOX1BUUkRJRkZfVFlQRS4KKworCSogaTk2MC5oIChST1VORCk6IENoYW5nZSBtYWNybyBuYW1lIHRvIFJPVU5EX1BBUk0uCisJKiBpOTYwLmMgKGk5NjBfZnVuY3Rpb25fYXJnX2FkdmFuY2UsIGk5NjBfZnVuY3Rpb25fYXJnKTogTGlrZXdpc2UuCisKKwkqIHN0b3ItbGF5b3V0LmMgKG1ha2Vfc2lnbmVkX3R5cGUpOiBDb25zaXN0ZW50bHkgdXNlCisJSE9TVF9CSVRTX1BFUl9XSURFX0lOVC4gIENvcnJlY3QgbWlub3IgZm9ybWF0dGluZyBwcm9ibGVtcy4KKwkoZml4dXBfc2lnbmVkX3R5cGUpOiBVc2UgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBhbmQgSE9TVF9XSURFX0lOVAorCWxpa2UgbWFrZV9zaWduZWRfdHlwZSBkb2VzLgorCShmaXh1cF91bnNpZ25lZF90eXBlKTogQ29ycmVjdCBtaW5vciBmb3JtYXR0aW5nIHByb2JsZW0uCisKKwkqIHgtbGludXMgKExBTkdVQUdFUyk6IERlbGV0ZS4KKworTW9uIEphbiAxOCAwODoxMzozNCAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWhlYWRlcnMpOiBEZWxldGUgdGFyZ2V0IGZpbGVzIGJlZm9yZSBjb3B5aW5nCisJdG8gdGhlbS4KKworTW9uIEphbiAxOCAwNjoyMzozNSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChjaG9vc2VfdGVtcF9iYXNlLCBtYWluKTogRml4ICJvZmYgYnkgb25lIiBlcnJvcnMgaW4KKwlzaXplcyBvZiBhbGxvY2F0ZWQgc3RyaW5ncy4KKworTW9uIEphbiAxOCAwMDozMjoyMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworU3VuIEphbiAxNyAxMzowOTowMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEZQX1JFR19DTEFTU19QKTogTmV3IG1hY3JvLgorCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBVc2UgRlBfUkVHX0NMQVNTX1AgdG8gc2ltcGxpZnkuICBNYWtlIG1vdmVzCisJZnJvbSBTQVIgdG8gZXhwZW5zaXZlIHRoYXQgdGhleSBzaG91bGQgbmV2ZXIgaGFwcGVuLgorCitTdW4gSmFuIDE3IDEwOjM4OjM4IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEZpeCBzcGFjaW5nLgorCShjb21wdXRlX3pkZXBpX29wZXJhbmRzKTogRml4IGhlYWRlciBjb21tZW50LgorCShtYW55IGZ1bmN0aW9ucyk6IFVzZSAlJXIgcmVnaXN0ZXIgc3ludGF4LiAgVXNlIGNhbm9uaWNhbCAoMCwlck4pCisJYWRkcmVzcyBmb3JtYXQuCisJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IE5vIG5lZWQgdG8gdGVzdCBmcmFtZV9wb2ludGVyX25lZWRlZAorCWluIGVsc2UgY2xhdXNlIG9mIGBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQpJy4KKwkob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogVGVzdCBib29sZWFuIG1lcmdlX3NwX2FkanVzdF93aXRoX3N0b3JlCisJZm9yIHplcm9uZXNzLCBub3QgZm9yIGVxdWFsaXR5IHdpdGggMS4KKwkoZm1weWFkZG9wZXJhbmRzKTogVXNlIG5ldyB2YXJpYWJsZSBtb2RlIGZvciBtb2RlIG9mIG9wZXJhbmRzWzBdLgorCShmbXB5c3Vib3BlcmFuZHMpOiBMaWtld2lzZS4KKworRnJpIEphbiAxNSAxNjo0MjozMCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IEhhbmRsZSAocGx1cyAobXVsdCAoWCkgKFkpKSAoWikpCisJd2hlbiBZIGlzIDIsIDQsIG9yIDggc3BlY2lhbGx5LgorCSogcGEuYyAoc2hhZGRfY29uc3RhbnRfcCk6IE5ldyBmdW5jdGlvbi4KKworCSogaW50ZWdyYXRlLmMgKEZJWEVEX0JBU0VfUExVU19QKTogRml4IHR5cG8uCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IENsZWFyIElOU05fQ09ERSBmb3IgZWFjaCBpbnNuIGFzCisJd2UgcGVyZm9ybSByZWdpc3RlciByZXBsYWNlbWVudHMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IExpa2V3aXNlLgorCitGcmkgSmFuIDE1IDE2OjAyOjA3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpbmFsLmMgKGFsdGVyX2NvbmQpOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KKworVGh1IEphbiAxNCAyMjowOTo0MCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWhlYWRlcnMpOiBBdm9pZCBwcm9ibGVtcyB3aXRoIHJlbGF0aXZlCisJJChzcmNkaXIpIHdoZW4gaW5zdGFsbGluZyBzeXNsaW1pdHMuaC4KKworVGh1IEphbiAxNCAxOToyMDowMSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGMtZGVjbC5jIChjX2RlY29kZV9vcHRpb24pOiBTZXQgV0FSTl9VTklOSVRJQUxJWkVEIHRvIDIgd2l0aAorCS1XYWxsLCBiZWluZyBjYXJlZnVsIHRvIHByZXNlcnZlIGl0IGlmIGl0J3MgYWxyZWFkeSBzZXQuCisJKiBjcC1kZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBMaWtld2lzZS4KKwkqIHRvcGxldi5jIChtYWluKTogV2FybiBhYm91dCB1c2luZyAtV3VuaW5pdGlhbGl6ZWQgd2l0aG91dCAtTy4KKworCSogY2NjcC5jIChtYWluKTogVHJpbSBkb3duIHRvIHRoZSBiYXNlbmFtZSBvZiB3aGF0J3MgdG8gZ28gaW4KKwlQUk9HTkFNRS4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IE9ubHkgYWNjZXB0IGlucHV0IGZpbGVzIHdoaWNoIGV4aXN0IGFuZAorCWNhbiBiZSByZWFkOyBwcmV2ZW50IGxpbmsgcGhhc2UgaWYgYW4gaW5wdXQgZmlsZSB3YXMgcmVqZWN0ZWQuICBCZQorCWNhcmVmdWwgbm90IHRvIGNoZWNrIGZvciBgLWwnIGRpcmVjdGl2ZXMuCisJKGVycm9yX2NvdW50KTogTWFrZSBpbnRvIGEgc3RhdGljIGdsb2JhbCB2YXJpYWJsZS4KKworVGh1IEphbiAxNCAxODoxOTozNSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0LW1pcHMsIHQtdWx0cml4LCB0LW9zZnJvc2U6IENoYW5nZSBgY29uZmlnLycgdG8gYGNvbmZpZy9taXBzLycuCisKK1RodSBKYW4gMTQgMTY6NTU6MTEgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERvIG5vdCBtYWtlICVyMjcgYSBnbG9iYWxfcmVnLgorCisJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBDb21iaW5lIHN0YWNrIGFkanVzdG1lbnQgYW5kCisJZmlyc3QgR1Igc2F2ZSB3aGVuIHJlYXNvbmFibGUgdG8gZG8gc28uCisJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IENvbWJpbmUgc3RhY2sgYWRqdXN0bWVudCBhbmQgZmlyc3QKKwlHUiByZXN0b3JlIHdoZW4gcmVhc29uYWJsZSB0byBkbyBzby4gIEF2b2lkIGxvYWQvdXNlIHN0YWxsIGZvciAKKwlSUCByZXN0b3JlIGluIGNvbW1vbiBjYXNlcy4KKworCSogcGEuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogUmV3b3JrIHRvIGNyZWF0ZSBSRUcgYW5kIFJFRytEIAorCWFkZHJlc3NlcyBpbnN0ZWFkIG9mIFJFRytSRUcgYWRkcmVzc2VzLgorCitUaHUgSmFuIDE0IDE1OjQ1OjUwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy9jb3JlLmMgKGluaXRpYWxpemVfZGlzcGF0Y2hfdGFibGVzKTogQ3JlYXRlIGFuIGVudHJ5IGluIFJFQ09SRAorCWZvciBlYWNoIGNsYXNzIHVzZWQgaW4gYSBnaXZlbiBmaWxlLCBub3QganVzdCBvbmUuCisKK1RodSBKYW4gMTQgMTI6MDA6MzUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoSU5TVEFMTF9IRUFERVJTX0RJUiwgRkxPQVRfSCwgQ1JPU1NfRkxPQVRfSCk6IE5ldworCXZhcmlhYmxlcy4KKwkoSU5TVEFMTEVEX0gpOiBSZW1vdmVkLgorCShmbG9hdC5oKTogQ29weSBmcm9tICQoRkxPQVRfSCkuCisJKGZsb2F0LmgtbmF0LCBmbG9hdC5oLWNyb3NzKTogTmV3IHRhcmdldHMuCisJKHN0bXAtaGVhZGVycywgc3RtcC1maXhpbmNsdWRlcyk6IE5ldyB0YXJnZXRzIHRvIGJ1aWxkIGZpeGVkCisJaW5jbHVkZSBmaWxlcyBpbiBidWlsZCBkaXJlY3RvcnkuCisJKGFsbC5jcm9zcywgcmVzdC5lbmNhcCk6IERlcGVuZCBvbiBzdG1wLWhlYWRlcnMuCisJKGNsZWFuKTogUmVtb3ZlIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSBhbmQgc3RtcC0qLgorCShpbnN0YWxsLW5vcm1hbCk6IFJlbmFtZWQgZnJvbSBpbnN0YWxsLW5hdGl2ZS4KKwkoaW5zdGFsbC1jcm9zcyk6IFJlbW92ZWQuCisJKElOU1RBTExfVEFSR0VUKTogQ2hhbmdlZCB0byBpbnN0YWxsLW5vcm1hbCBmcm9tIGluc3RhbGwtbmF0aXZlLgorCShpbnN0YWxsLWhlYWRlcnMpOiBJbnN0YWxsIGZyb20gYnVpbGQgZGlyZWN0b3J5LgorCShpbnN0YWxsLWluY2x1ZGUtZGlyLCBpbnN0YWxsLWhlYWRlcnMtdGFyLGluc3RhbGwtaGVhZGVycy1jcGlvLAorCWluc3RhbGwtYXNzZXJ0LWgpOiBOZXcgdGFyZ2V0cy4KKwkoaW5zdGFsbC1mbG9hdC1oLCBpbnN0YWxsLWxpbWl0cy1oLCBpbnN0YWxsLWNvbW1vbi1oZWFkZXJzLAorCWluc3RhbGwtZml4aW5jbHVkZXMpOiBSZW1vdmVkLgorCSogY3Jvc3MtbWFrZSAoSU5TVEFMTF9UQVJHRVQpOiBEb24ndCBvdmVycmlkZS4KKwkoRkxPQVRfSCk6IE5ldyBvdmVycmlkZSwgc2V0IHRvICQoQ1JPU1NfRkxPQVRfSCkuCisKK1RodSBKYW4gMTQgMTQ6MTc6MDUgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBsaWJnY2MyLmM6IENvcnJlY3QgdHlwbyBpbiBjb21tZW50LgorCisJKiBmaXhpbmMuc2NvLCBmaXhpbmMuc3ZyNCAoZWdyZXAgYW5kIHNlZCBsb29wKTogRG9uJ3QgcHJpbnQKKwltZXNzYWdlcyBhYm91dCBmaWxlcyB0aGF0IG5lZWQgbm8gY2hhbmdlLgorCisJKiBzcGFyYy5tZCAobXVsZGYrMSwgbXVsZGYrMik6ICBBZGQgcGF0dGVybnMgZm9yIGZzbXVsZCBhbmQgZmRtdWxxLgorCisJKiBzcGFyYy5jOiBDbGFyaWZ5IG51bWVyb3VzICpfb3BlcmFuZCBjb21tZW50cy4KKwkoU1BBUkNfU1RBQ0tfQUxJR04pOiBEZWxldGUuCisJKHNwYXJjX2Zyd19vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlCisJbG9hZF9vbmx5X3IxNS4KKwkoc3BhcmNfZnJ3X2VwaWxvZ3VlX2RlbGF5X3Nsb3RzKTogRGVsZXRlIHIxNS9mbWFzayB0ZXN0LgkKKwkqIHNwYXJjLm1kOiBEb2N1bWVudCBzcGFyY2xpdGUgaW50ZWdlciBtdWx0aXBseSBjeWNsZSB0aW1lcy4KKwkobW92ZGYsICFUQVJHRVRfRlBVKTogUmVtb3ZlIHRlc3RzIGZvciBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisJKGRpdnNpMywgdWRpdnNpMyk6IENvcnJlY3QgbGVuZ3RoIGF0dHJpYnV0ZS4KKwkoZmZzc2kyKTogRGVmaW5lIGZvciBzcGFyY2xpdGUuCisJKiBzcGFyYy5oIChDUFBfU1BFQyk6IEFkZCAtbWZydyBzdXBwb3J0LgorCShPVkVSUklERV9PUFRJT05TKTogRGVmaW5lLiAgQ2FuJ3Qgb21pdCBmcmFtZSBwb2ludGVyIG9yIGRvIHBpYworCXdoZW4gcHJvZmlsaW5nLgorCShSRUdfVVNFRF9TT19GQVIpOiBEZWxldGUuCisJKENPTlNUX0NPU1RTKTogR2l2ZSBTTUFMTF9JTlQgY29uc3RhbnRzIGNvc3Qgb2YgMC4gIE1ha2UgVURJViwKKwlESVYsIE1PRCwgVU1PRCBtb3JlIGV4cGVuc2l2ZS4gIE1ha2UgRklYIHNhbWUgY29zdCBhcyBGTE9BVC4KKwkoVEFSR0VUX0ZSVyk6IERlZmluZS4KKwkoVEFSR0VUX0RFRkFVTFRTKTogQWRkIC1tZnJ3IGZsYWcuCisJKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBBZGQgLW1mcncgc3VwcG9ydC4KKwkoQkFTRV9PVVRHT0lOR19WQUxVRV9SRUcsIEJBU0VfSU5DT01JTkdfQVJHX1JFRyk6IExpa2V3aXNlLgorCShGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUpOiBMaWtld2lzZS4KKwkoREVMQVlfU0xPVFNfRk9SX0VQSUxPR1VFLCBFTElHSUJMRV9GT1JfRVBJTE9HVUVfREVMQVkpOiBMaWtld2lzZS4KKwkoRVhQQU5EX0JVSUxUSU5fU0FWRVJFR1MpOiBMaWtld2lzZS4KKworCSogZXhwci5jIChkb190YWJsZWp1bXApOiBQYXNzIDEgZm9yIHVuc2lnbmVkIGZsYWcgdG8gZW1pdF9jbXBfaW5zbi4KKworVGh1IEphbiAxNCAxNDo0MzoxNSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAc2ljcy5zZSkKKworCSogcGEuYyAobW92ZV9vcGVyYW5kKTogQWxsb3cgYWxsIENPTlNUX0lOVHMgdGhhdCBjYW4gYmUgbW92ZWQgdG8KKwlnZW5lcmFsIHJlZ2lzdGVycyB3aXRoIG9uZSBpbnNuLgorCSogcGEuYyAocHJlX2NpbnRfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUgZm9yIHByZWRlY3JlbWVudGluZworCWxkd20vc3R3bSBpbnNucy4KKwkqIHBhLmMgKHpkZXBpX2NpbnRfcCk6IE5ldyBmdW5jdGlvbi4KKwkqIHBhLmMgKGRlcGlfY2ludF9vcGVyYW5kKTogUmVtb3ZlLgorCSogcGEuYyAoYW5kX21hc2tfcCk6IE5ldyBuYW1lIGZvciBjb25zZWNfemVyb3NfcC4gIEFsbCBjYWxsZXJzCisJY2hhbmdlZC4KKwkqIHBhLmMgKHNyY3NpX29wZXJhbmQpOiBSZW1vdmVkLgorCSogcGEuYzogVXNlIElOVF8xNF9CSVRTIGluc3RlYWQgb2Ygc3lub255bSBTTUFMTF9JTlQuCisJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBDbGVhbiB1cCBDT05TVF9JTlQgY2FzZS4KKwkqIHBhLmMgKGNvbXB1dGVfemRlcGlfb3BlcmFuZHMpOiBOZXcgbmFtZSBmb3IKKwljb21wdXRlX3hkZXBpX29wZXJhbmRzX2Zyb21faW50ZWdlci4gIENoYW5nZSBzZWNvbmQgcGFybSB0byByZXR1cm4KKwlwbGFpbiBpbnRlZ2Vycywgd2FzIFJUWGVzLgorCSogcGEuYyAocHJpbnRfb3BlcmFuZCk6IEhhbmRsZSAnWicgZm9yICd6ZGVwaScgc291cmNlIHVzZWQgdG8gbW92ZQorCUNPTlNUX0lOVC4KKworCSogcGEuaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQ2hhbmdlIG1lYW5pbmcgb2YgJ0snLiAgQWRkIG5ldworCWFsdGVybmF0aXZlICdOJy4gIFVzZSBWQUxfKl9CSVRTX1AgbWFjcm9zIHdoZW4gcG9zc2libGUuCisJKiBwYS5oIChMRUdJVElNQVRFX0NPTlNUQU5UX1ApIEZpeCBjb21tZW50LgorCSogcGEuaCAoRklUU18xNF9CSVRTKTogUmVtb3ZlLgorCSogcGEuaCAoU01BTExfSU5UKTogUmVtb3ZlLgorCisJKiBwYS5tZCAobW92ZSBwYXR0ZXJucyk6IFJlb3JnYW5pemUgcGF0dGVybiBvcmRlci4gIENsZWFudXAuICBNZXJnZQorCUNPTlNUX0lOVCBwYXR0ZXJucyBpbnRvIG1haW4gcGF0dGVybnMgZm9yIFNJbW9kZSwgSEltb2RlLCBRSW1vZGUuCisJQWRkIHBhdHRlcm5zIHRvIHJlY29nbml6ZSBwcmVkZWNyZW1lbnQgY2FzZXMgaW4gU0ltb2RlLCBISW1vZGUsIAorCVFJbW9kZS4gIFJlbW92ZSAneScgY29uc3RyYWludCBmcm9tIFNJbW9kZSByZWNvZ25pemVyLgorCShtYWluIEhJbW9kZSwgUUltb2RlIHJlY29nbml6ZXJzKTogSGFuZGxlIFNBUiBtb3ZlIGZyb20gZ3JlZy4KKwlDaGFuZ2UgY29uc3RyYWludHMgdG8gbWF0Y2ggdGhlIFNJbW9kZSBwYXR0ZXJuLgorCSogcGEubWQgKGNtb3YpOiBNb3ZlIG5lYXIgb3RoZXIgY29uZGl0aW9uYWwgcGF0dGVybnMuCisJKiBwYS5tZDogUmVwbGFjZSBhbGwgb2NjdXJlbmNlcyBvZiBzcmNzaV9vcGVyYW5kIHdpdGggbW92ZV9vcGVyYW5kLgorCVJlcGxhY2UgYGxkbyBYKDApLGQnIHdpdGggYGxkaSBYLGQnLgorCSogcGEubWQgKHJvdGxzaTMpOiBSZW1vdmUgU0VUX0FUVFJzLgorCSogcGEubWQgKHJvdHJzaTMpOiBMaWtld2lzZS4KKworVGh1IEphbiAxNCAxMzozMzo1NSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHJ0bC5jIChjb3B5X3J0eCk6IEEgTUVNIHdpdGggY29uc3RhbnQgYWRkcmVzcyBpcyBub3Qgc2hhcmFibGUuCisJVW5kbyBEZWMgMjcgY2hhbmdlLgorCitUaHUgSmFuIDE0IDA2OjQ1OjUxIDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqcnZAZ29sZG1hbi5nbnUuYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAoY21wc3RyIHBhdHRlcm5zKTogRml4IG1vZGUgbWlzbWF0Y2ggaW4gU0VULgorCitXZWQgSmFuIDEzIDE2OjA1OjA3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogY29uZmlndXJlOiBQcmVjb21wdXRlIHZlcnNpb24gaW4gZ2VuZXJhdGVkIE1ha2VmaWxlLgorCisJKiBNYWtlZmlsZS5pbjogKENST1NTX0dDQ19DRkxBR1MsIENST1NTX1RPT0xTLCBSRUFMX0xEX05BTUUsCisJaW5zdGFsbC1jcm9zcy10b29scyk6IFJlbW92ZWQuCisJKiBjcm9zcy1tYWtlIChDUk9TU19HQ0NfQ0ZMQUdTLCBDUk9TU19UT09MUyk6IFJlbW92ZWQuCisJKFNZU1RFTV9IRUFERVJfRElSKTogU2V0IHRvICQodG9vbGRpcikvaW5jbHVkZS4KKwkqIGdjYy5jOiBVc2UgVE9PTERJUl9CQVNFX1BSRUZJWCwgbm90IFRPT0xESVJfUFJFRklYLgorCitXZWQgSmFuIDEzIDEyOjA0OjIxIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBsaWJnY2MyLmMgKF9mZnNkaTIpOiBVc2UgdGhlIGNvcnJlY3QgbmFtZXMgZm9yIHN0cnVjdHVyZQorCWVsZW1lbnRzIG9mIHR5cGUgREl1bmlvbi4gIFJldHVybiB0aGUgY29ycmVjdGx5IHR5cGVkIHZhbHVlLgorCisJKiBtaXBzLXRkdW1wLmMgKHByaW50X2ZpbGVfZGVzYyk6IENvcnJlY3RseSBzY2FsZSB0aGUgcmZkIHBvaW50ZXIuCisJUGF0Y2ggZnJvbSBpYW5AY3lnbnVzLmNvbS4KKworV2VkIEphbiAxMyAxMDowNDoyNiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwpOiBGaXggdHlwby4KKworV2VkIEphbiAxMyAwMzowNTowOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluYy5zdnI0IChycGMvdHlwZXMuaCk6IENoYW5nZSBjb25zdCBleHRlcm4gdG8gZXh0ZXJuIGNvbnN0LgorCisJKiBleHByLmMgKGV4cGFuZF9pbmNyZW1lbnQpOiBIYW5kbGUgYWxsIHByZWluY3JlbWVudHMgYnkgYnVpbGRpbmcKKwlhcml0aG1ldGljIGFuZCBjYWxsaW5nIGV4cGFuZF9hc3NpZ25tZW50LgorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBGb3IgY2xvYmJlcmluZyBtZW1vcnksCisJZ2VuZXJhdGUgKE1FTSAoU0NSQVRDSCkpIGluc2lkZSB0aGUgQ0xPQkJFUi4KKworCSogY2NjcC5jIChpbmNsdWRlX2RlZmF1bHRzKToKKwlQdXQgR0NDX0lOQ0xVREVfRElSIGp1c3QgYmVmb3JlIHRoZSBzeXN0ZW0gZGlycyB3aG9zZSBmaWxlcyBhcmUgZml4ZWQuCisKKwkqIE1ha2VmaWxlLmluIChyaXNreS1zdGFnZTEsIGV0Yyk6IFVzZSAkKEdDQ19QQVJUUykgYXMgd2hhdCB0byBtdi4KKworVHVlIEphbiAxMiAyMzoyNDozMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKHZhcmlhYmxlX3NpemUpOiBDaGFuZ2UgYmFjayB0byBOVUxMX1BUUi4KKworVHVlIEphbiAxMiAxODo1OTowMSAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2xlYXIgcmVsb2FkX2luX3Byb2dyZXNzIGV2ZW4gaWYgcmVsb2FkaW5nCisJZmFpbHMuCisKK1R1ZSBKYW4gMTIgMTg6MzI6MDEgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IFBhc3MgYSBOVUxMX1JUWCBpbnRvIGVtaXRfY2FsbF9pbnNuIGZvcgorCW1pc3NpbmcgbGFzdCBhcmcuCisKKwkqIHN0b3ItbGF5b3V0LmMgKHZhcmlhYmxlX3NpemUpOiBDYWxsIGV4cGFuZF9leHByIHdpdGggYSBOVUxMX1JUWCwKKwlub3QgYSBOVUxMX1BUUi4KKworCSogaW50ZWdyYXRlLmMgKGNvbnN0X2VxdWl2KTogRGVsZXRlIGRlY2wsIHNpbmNlIGl0J3MgbmV2ZXIgZGVmaW5lZC4KKwkoZm9sZF9vdXRfY29uc3RfY2MwKTogTGlrZXdpc2UuCisJKiBsb29wLmMgKGRlbGV0ZV9pbnNuX2ZvcmNlcyk6IExpa2V3aXNlLgorCSogZmluYWwuYyAoYWx0ZXJfY29uZCk6IERlbGV0ZSBkZWNsLCBzaW5jZSBpdCdzIG5ldmVyIGRlZmluZWQuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IE9ubHkgY2FsbCBmb3JjZV9maXRfdHlwZSB3aXRoIG9uZSBhcmcuCisKKwkqIGV4cHIuYyAoZ3JvdXBfaW5zbnMpOiBNYWtlIHZvaWQsIHNpbmNlIGl0IG5ldmVyIHJldHVybnMgYW4gcnR4LgorCisJKiBlbWl0LXJ0bC5jIChlbWl0X2p1bXBfaW5zbl9iZWZvcmUpOiBDYWxsIG1ha2VfanVtcF9pbnNuX3JhdyB3aXRoCisJb25seSBvbmUgYXJndW1lbnQuCisJKGVtaXRfanVtcF9pbnNuX2FmdGVyKTogTGlrZXdpc2UuCisJKGVtaXRfanVtcF9pbnNuKTogTGlrZXdpc2UuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSkgW2Nhc2UgRklMRV9UWVBFLCBTRVRfVFlQRV06IENhbGwgd2l0aAorCW1pc3NpbmcgdGhpcmQgYXJnIGFzIDAuCisKKwkqIGNzZS5jIChmb2xkX3J0eCk6IENhbGwgaXRzZWxmIHdpdGggbWlzc2luZyBhcmcgSU5TTiBhcyBOVUxMX1JUWC4KKworVHVlIEphbiAxMiAxNzo1MzoxMyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwlGcm9tIEZyZWQgRmlzaDoKKwkqIGZpeGluYy5zdnI0IChzdGF0LmgpOiAgRG9uJ3QgZGVwZW5kIHVwb24gc3BlY2lmaWMgZm9ybWFsCisJcGFyYW1ldGVyIG5hbWVzIHdoZW4gbG9jYXRpbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBjb252ZXJ0CisJdG8gcHJvdG90eXBlIGZvcm0uICBBbHNvIGJlIG1vcmUgc2VsZWN0aXZlIGFib3V0IHdoYXQKKwlzdHJpbmdzIHRvIHByZXBlbmQgdW5kZXJiYXJzIHRvIGR1cmluZyByZW5hbWluZyBvZiBmb3JtYWwKKwlwYXJhbWV0ZXJzIGFuZCBsb2NhbCB2YXJpYWJsZXMgaW4gc3RhdGljIGZ1bmN0aW9ucy4KKworCSogY2NjcC5jIChtYWluKTogU2V0IHNpZ25hbCBoYW5kbGVyIGZvciBTSUdQSVBFLgorCShwaXBlX2Nsb3NlZCk6IE5ldyBmdW5jdGlvbiwgdG8gaGFuZGxlIFNJR1BJUEUuCisKK1R1ZSBKYW4gMTIgMTc6NDg6MTMgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChjb21wYXJlX2Zyb21fcnR4KTogQWxsb3cgc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24gdG8KKwlmYWlsLgorCitUdWUgSmFuIDEyIDAyOjUyOjUwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogVXNlIHBsYWluIGBmZnMnIGZvciBTSW1vZGUgZmZzX29wdGFiIGxpYmNhbGwuCisKKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBBZGQgX2Zmc2RpMi4KKwkqIGxpYmdjYzIuYyAoX19mZnNkaTIpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlY2xhcmUgZmZzIGFzIGJ1aWx0aW4uCisKKwkqIGZpeGluY2x1ZGVzIChlZ3JlcCBhbmQgc2VkIGxvb3ApOiBEb24ndCBwcmludCBtZXNzYWdlcyBhYm91dAorCWZpbGVzIHRoYXQgbmVlZCBubyBjaGFuZ2UuCisKK01vbiBKYW4gMTEgMTc6MjI6MTYgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5jIChlbGlnaWJsZV9mb3JfZXBpbG9ndWVfZGVsYXkpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlCisJYHRoaXNfZnVuY3Rpb25fbmFtZScuCisJKG91dHB1dF9mcF9tb3ZlX2RvdWJsZSk6IERlbGV0ZSB1bnVzZWQgdmFyIGBhZGRyJy4KKwkob3V0cHV0X2ZwX21vdmVfcXVhZCk6IExpa2V3aXNlLgorCShmcmVnc19ldmVyX2xpdmUpOiBEZWxldGUgdW51c2VkIHN0YXRpYyB2YXIuCisJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IERlbGV0ZSBgbl9mcmVncycgYW5kIGBpJy4KKwkoc3BhcmNfZnJ3X291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IERlbGV0ZSBgcmVnbm8nLgorCShzcGFyY19mcndfb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogRGVsZXRlIGBsb2FkX25vcCcuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBpbmNfZ3JvdXBzLgorCisJKiBzcGFyYy5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgbm8tZnB1IGFuZCBoYXJkLWZsb2F0LgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERlZmluZSBmb3IgISBUQVJHRVRfRlBVLgorCShCQVNFX1JFVFVSTl9WQUxVRV9SRUcpOiBVc2UgcmVnIDggd2hlbiAhIFRBUkdFVF9GUFUuCisJKEJBU0VfT1VUR09JTkdfVkFMVUVfUkVHKTogVXNlIHJlZyAyNCB3aGVuICEgVEFSR0VUX0ZQVS4KKwkqIHNwYXJjLm1kICgqKTogTWFrZSBhbGwgZnAgcGF0dGVybnMgY29uZGl0aW9uYWwgb24gVEFSR0VUX0ZQVS4KKwkobW92dGYsIG1vdmRmLCBtb3ZzZik6IEFkZCAhVEFSR0VUX0ZQVSB2ZXJzaW9ucy4KKwkoc2Ztb2RlIHJldHVybik6IEFkZCBwYXR0ZXJuIGZvciB3aGVuICFUQVJHRVRfRlBVLgorCShtb3ZzaSsyLCBtb3ZzZisxKTogVXNlICVAIGluc3RlYWQgb2YgJSVmcC4KKwkobXVsc2lkaTMsIHVtdWxzaWRpMyk6IFJld3JpdGUsIHRvIGF2b2lkIGV4dGVuZGluZyBjb25zdGFudHMuCisKKwkqIGZpeGluY2x1ZGVzOiBEbyBub3QgY29uc2lkZXIgLy8qIHRvIGJlIGEgQysrIGNvbW1lbnQgd2hpY2ggbmVlZHMKKwl0byBiZSBmaXhlZC4KKworTW9uIEphbiAxMSAxNTowMzo0MSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKFJFR19PS19GT1JfQkFTRV9QLCBSRUdfT0tfRk9SX0lOREVYX1ApOiBGaXggdHlwb3MuCisKK01vbiBKYW4gMTEgMTI6NDE6MDYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcveG0tc3ZyNC5oIChzeXNfc2lnbGlzdCk6IE5ldyBtYWNyby4KKworU3VuIEphbiAxMCAxODoxNjo0OSAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKGV4dGVuZHNpZGkyLHplcm9fZXh0ZW5kc2lkaTIpOiBOZXcgcGF0dGVybnMuCisJKGFkZGRpMyxzdWJkaTMpOiBEb24ndCBlbWl0IGNvZGUgZm9yIGxvdyBwYXJ0IGlmIGtub3duIHRvIGJlIHplcm8uCisKKwkqIGkzODYveG0tc3lzdjQuaCAoYWxsb2NhKTogRGVsZXRlIC0gYWxyZWFkeSBkZWZpbmVkIGluIHhtLWkzODYuaC4KKworCSogaTM4Ni94bS1haXguaCxpMzg2L3htLXN1bi5oOiBJbmNsdWRlIGkzODYveG0taTM4Ni5oLgorCVJlbW92ZSByZWR1bmRhbnQgZGVmaW5lcy4KKworU3VuIEphbiAxMCAxODowMDoxNyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEdFTkVSQUxfT1JfRlBfT1JfU05BS0VfRlBfUkVHUyk6IE5ldyByZWdpc3RlciBjbGFzcy4KKwkoTEVHSVRJTUlaRV9BRERSRVNTKTogTm8gbG9uZ2VyIHNob3cgRFAgcmVsb2NhdGlvbi4gIFNpbXBsaWZ5LgorCSogcGEubWQgKHJlbG9hZF9pbnNpLCByZWxvYWRfb3V0c2kpOiBVc2UgbmV3ICJaIiBjb25zdHJhaW50IGluc3RlYWQKKwlvZiAieiIgY29uc3RyYWludC4KKwkobG9hZCBISUdIIHBhdHRlcm5zKTogUmV3cml0ZSB0byBub3Qgc2hvdyBEUCByZWxvY2F0aW9uLiAgCisJKiBwYS5jIChvdXRwdXRfZ2xvYmFsX2FkZHJlc3MpOiBIYW5kbGUgKGhpZ2ggKGNvbnN0IChwbHVzIC4uLikpKS4KKwkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IElmIFRBUkdFVF9LRVJORUwsIHRoZW4gbG9hZGluZyBhIAorCXN5bWJvbGljIGFkZHJlc3MsIG9yIHRoZSBoaWdoIHBhcnQgb2YgYSBzeW1ib2xpYyBhZGRyZXNzIHJlcXVpcmVzCisJJXIxIGFzIGEgc2Vjb25kYXJ5IHJlbG9hZCByZWdpc3Rlci4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlLCBTWU1CT0xfUkVGIGNhc2UpOiBJZiBUQVJHRVRfS0VSTkVMLCB0aGVuIGhhbmRsZSAKKwlzZWNvbmRhcnkgcmVsb2FkIGNyZWF0ZWQgZm9yIGEgc3ltYm9saWMgKGhpZ2ggKGNvbnN0IChwbHVzIC4uLikpKS4gIAorCU5vIGxvbmdlciBzaG93IERQIHJlbG9jYXRpb247IHJlYWRfb25seSBhbmQgbm9ybWFsIG9wZXJhbmRzIGVtaXQgdGhlCisJc2FtZSBSVEwgbm93LiAgCisJRW1pdCB0aGUgc2FtZSBSVEwgYmVmb3JlIGFuZCBhZnRlciByZWxvYWQsIG9ubHkgY2hhbmdlIGhvdyB0aGUgCisJc2NyYXRjaC90ZW1wb3JhcnkgcmVnaXN0ZXIgaXMgY2hvc2VuLgorCitTdW4gSmFuIDEwIDExOjQyOjEyIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogRG9uJ3QgdXNlIFBPUyA8IDAgYXMgYSBmbGFnCisJdGhhdCBQT1NfUlRYIGlzIHRvIGJlIHVzZWQ7IGluc3RlYWQgdXNlIFBPU19SVFggdW5sZXNzIGl0IGlzCisJbm9uemVyby4gIElmIFBPU19SVFggaXMgYSBjb25zdGFudCwgc2V0IFBPUyBhbmQgY2xlYXIgUE9TX1JUWC4KKwkobWFrZV9jb21wb3VuZF9vcGVyYXRpb24sIG1ha2VfZmllbGRfYXNzaWdubWVudCk6IFBhc3MgMCBmb3IgUE9TCisJaW5zdGVhZCBvZiAtMSB3aGVuIFBPU19SVFggaXMgbm9uemVyby4KKworU2F0IEphbiAgOSAwMTozNDoyNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFRlc3QgZm9yIHdoZXRoZXIgdG8gY2FsbAorCWZvcmdldF9vbGRfcmVsb2Fkc18xIGZvciBhIFJFR19JTkMgbm90ZSB3YXMgYmFja3dhcmRzLgorCisJKiBjb25maWcvaTM4Ni94bS1pMzg2LmggKGFsbG9jYSk6IFVuZGVmIGJlZm9yZSBkZWZpbmluZy4KKworCSogY29uZmlnL2k4NjAvc3lzdjMuaCAoQVNNX09VVFBVVF9MT0NBTCk6IE5ldyBvdmVycmlkZS4KKworCSogZ2NjLmMgKGxvb2t1cF9jb21waWxlcik6IEZpeCBzcGVjaWFsIGNvZGUgZm9yIGAtJyBzdWZmaXguCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogQ2hhbmdlIHdhcm5pbmcgbXNnIHdoZW4gZGVjaW1hbCBjb25zdCBpcyB1bnNpZ25lZC4KKworCSogTWFrZWZpbGUuaW4gKGJvb3RzdHJhcCopOiBQYXNzIEJPT1RfTERGTEFHUyBkb3duIGFzIExERkxBR1MuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRpcik6IERvbid0IGNyZWF0ZSBnY2MtbGliL2luY2x1ZGUuCisKKwkqIG9iamMtYWN0aW9ucy5jIChpbml0X21vZHVsZV9kZXNjcmlwdG9yKToKKwlVc2Ugc2l6ZV9pbl9ieXRlcyB0byBnZXQgc2l6ZSBvZiBgc3RydWN0IG9iamNfbW9kdWxlJy4KKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIHVuc2lnbmVkX2ludFFJX3R5cGVfbm9kZSwKKwlub3QgdW5zaWduZWRfY2hhcl8uLi4sIGFzIGluZGV4IHR5cGUgZm9yIC4uLl9hcnJheV90eXBlX25vZGUuCisKKwkqIHRvcGxldi5jIChyZWFsbHlfc29ycnkpOiBVc2UgcHJvZ25hbWUgaW4gZXJyb3IgbWVzc2FnZSwgbm90IGMrKy4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEZvciBjb21wbGV4IG11bHQsIGNvbXB1dGUgcmVzCisJaW4gZWFjaCBhbHRlcm5hdGl2ZSwgbm90IGJlZm9yZS4KKworCSogTWFrZWZpbGUuaW4gKGJvb3RzdHJhcCk6IFBhc3MgYWxvbmcgQ0MgYW5kIGxpYmRpciBpbiBmaXJzdCBjb21waWxlLgorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBBdm9pZCBtdWx0aXBsZSBleHRlcm4gZGVjbCBtaXNtYXRjaCB3YXJuaW5ncworCXdoZW4gcHJldmlvdXMgZGVjbCBpcyBidWlsdC1pbi4KKworCSogY2NjcC5jIChtYWNyb2V4cGFuZCk6IEJlZm9yZSBjb25jYXRlbmF0ZWQgZW1wdHkgcmVzdCBhcmcsCisJZG8gY29weSBjb25zdGFudCBjaGFycywgYnV0IGRlbGV0ZSBsYXN0IHJ1biBvZiBub253aGl0ZXNwYWNlIGNoYXJzLgorCShyZXNjYW4pOiBIYW5kbGUgTmV3bGluZS1IeXBoZW4gaW4gZXhwYW5kX3RvX3RlbXBfYnVmZmVyCisJYXMgd2VsbCBhcyB3aGVuIHNjYW5uaW5nIGEgbWFjcm8gYm9keS4KKworU2F0IEphbiAgOSAwOToxMToyNSAxOTkzICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQHJ0bC5jeWdudXMuY29tKQorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50KTogSGFuZGxlIENIQVJfVFlQRSBhbmQgQk9PTEVBTl9UWVBFIGxpa2UKKwlJTlRFR0VSX1RZUEUuCisKK1NhdCBKYW4gIDkgMDg6MDY6NDIgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGNjY3AuYyAobWFpbik6IElmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBkZXBlbmRlbmN5IGZpbGUgd2l0aCAtTUQKKwlvciAtTU1ELCB1c2UgInciIGZvcGVuIG1vZGUgaW5zdGVhZCBvZiAiYSIuCisKK0ZyaSBKYW4gIDggMjA6NTg6MTIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCUN5Z251czwtPkZTRiBtZXJnZS4KKwlUaHUgSmFuICA3IDE4OjE2OjA1IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAodGVtcGxhdGVfdHlwZSk6IEF2b2lkIGRlcmVmZXJlbmNpbmcgYW4gZXJyb3JfbWFyay4KKworCVdlZCBKYW4gIDYgMTc6NDM6MjMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTWFrZSBmbGFnX25vX2J1aWx0aW4gYXZvaWQKKwlkZWZpbml0aW9ucyBvZiBidWlsdGluIGZucyBtZW1jcHksIG1lbWNtcCwgc3RyY21wLCBzdHJjcHksIHN0cmxlbiwKKwlzaW4sIGFuZCBjb3MuICAoQWRkIHNpbiBhbmQgY29zLikKKwkoZmxhZ19ub19idWlsdGluKTogQWRkIGV4dGVybiBkZWNsLgorCisJKiBjcC1kZWNsLmMgKGN1cnJlbnRfbG9jYWxfZW51bSk6IE5ldyB2YXJpYWJsZS4KKwkoc3RhcnRfZW51bSk6IFNldCBUUkVFX0FERFJFU1NBQkxFIG9uIHRoZSB0YWcgaGVyZSwgYW5kIGNsZWFyCisJY3VycmVudF9sb2NhbF9lbnVtLgorCShidWlsZF9lbnVtZXJhdG9yKTogQnVpbGQgdGhlIGZpZWxkIGRlY2wgaGVyZSwgcmF0aGVyIHRoYW4gaW4KKwlncm9rX2VudW1fZGVjbHM7IHNldCBpdHMgVFJFRV9DSEFJTiB0byB0aGUgY3VycmVudF9sb2NhbF9lbnVtLgorCShncm9rX2VudW1fZGVjbHMpOiBDaGFpbiBkb3duLCBzZXR0aW5nIHRoZSB0eXBlLgorCisJVHVlIEphbiAgNSAyMjowOToxOCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKHRzdWJzdCk6IFByb3Blcmx5IGRlbWFuZ2xlIGEgbWV0aG9kJ3MgbmFtZSBpZiBpdCdzIGZvciBhbgorCW9wZXJhdG9yLgorCisJVHVlIEphbiAgNSAxNToyOTo0MCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IE1ha2UgcG9zdGZpeC9wcmVmaXggKysvLS0gd29yayBieQorCXNldHRpbmcgdGhlIHNlY29uZCBhcmcgdG8gMCB3aGVuIHVzaW5nIHBvc3RmaXggKysvLS0uCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGb3JiaWQgZGVjbGFyaW5nIG9wZXJhdG9yPSBmcm9tIGJlaW5nCisJZGVjbGFyZWQgYXMgYSBub24tbWVtYmVyIChvciBmcmllbmQpIGZ1bmN0aW9uLgorCisJVHVlIEphbiAgNSAxNDoyNjozOCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlKYW4gIDUgMTQ6MDk6MDggMTk5MyAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNwLWxleC5jICgpOiAgUHJvcGFnYXRlIGEgY2hhbmdlIGZyb20gYy1sZXguYy4KKworCVR1ZSBKYW4gIDUgMTM6Mjc6MDUgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJU2VwIDE0IDE3OjQ4OjI3IDE5OTIgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IEZvciBmbG9hdHMsIHVzZSBSRUFMX1ZBTFVFU19MRVNTIHRvCisJZGlzdGluZ3Vpc2ggdW5kZXJmbG93IGZyb20gb3ZlcmZsb3cuICBEZWxldGUgc3BlY2lhbCBjYXNlIGZvciAwLjAuCisKKwlNb24gSmFuICA0IDE1OjI2OjQ3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IENvbnZlcnQgdGhlIGluZGV4IGZyb20gYSByZWZlcmVuY2UKKwliZWZvcmUgZG9pbmcgYW55IGFwcHJvcHJpYXRlIHR5cGUgY29udmVyc2lvbnMuCisJIAorCVdlZCBEZWMgMzAgMTU6MzY6MTggMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIGNvbnZlcnQuYzogIE5ldyBmaWxlLiAgQ29udGFpbnMgdGhlIGNvbW1vbiB1dGlsaXR5IHJvdXRpbmVzCisJZnJvbSBjLWNvbnZlcnQuYyBhbmQgY3AtY3Z0LmMgKHN1Y2ggYXMgY29udmVydF90b19pbnRlZ2VyKS4KKwkqIGNvbnZlcnQuaDogIE5ldyBmaWxlOiBkZWNsYXJhdGlvbnMgZXhwb3J0ZWQgZnJvbSBjb252ZXJ0LmMuCisJKiBjLWNvbnZlcnQuYywgY3AtY3Z0LmM6ICBDb3JyZXNwb25kaW5nbHkgcmVkdWNlZC4KKwkqIGNwLWN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiAgTmV3IGZ1bmN0aW9uLCB3aXRoIHRoZQorCWV4dHJhIGhhaXIgYmV5b25kIHRoYXQgcHJvdmlkZWQgYnkgdGhlIEMgY29udmVydF90b19wb2ludGVyLgorCSogTWFrZWZpbGUuaW4gKE9CSlMpOiAgQWRkIGNvbnZlcnQuby4KKwkqIGNwLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApLCBjcC10cmVlLmg6ICBBZGQgZXh0cmEgY29udmVydF9wCisJcGFyYW1ldGVyLCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgQyB2ZXJzaW9uIChzbyB3ZSBjYW4gbWFrZQorCWNvbnZlcnRfdG9faW50ZWdlciBpbmRlcGVuZGVudCBvZiBDIG9yIEMrKykuCisJKiBjcC1jdnQuYywgY3AtZGVjbC5jLCBjcC1kZWNsMi5jLCBjcC1leGNlcHQuYywgY3AtaW5pdC5jLAorCWNwLXR5cGVjay5jLCBjcC1wYXJzZS55OiAgRml4IGNhbGxzIHRvIGJ1aWxkX2JpbmFyeV9vcCB0byBwYXNzCisJdGhlIG5ldyBjb252ZXJ0X3AgcGFyYW1ldGVyIChpLmUuIDEpLgorCisJRnJpIERlYyAxOCAxOToxOToyOCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFVzZSBERUNMX05BTUUgaW5zdGVhZCBvZgorCURFQ0xfQVNTRU1CTEVSX05BTUUsIHNpbmNlIHB1c2h0YWcgbm93IG1hbmdsZXMgdG9nZXRoZXIKKwlERUNMX0FTU0VNQkxFUl9OQU1FLiAgVGhpcyB3aWxsIG1ha2UgdXMgZW1pdCBgUTIxRDFCJywgbm90IGBRMjIxRDFCJy4KKworCSogY3AtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBUcnkgdXNpbmcgdGhlIGxvY2FsIHZhbHVlIGZvciBhIG5lc3RlZAorCXR5cGUgaWYgdGhlIElERU5USUZJRVJfVFlQRV9WQUxVRSBpc24ndCB0aGVyZS4KKworCVdlZCBEZWMgMTYgMTg6MTg6NDMgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisgICAgICAgICogY3AtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogU2V0IFRSRUVfQ09OU1RBTlQgb24gdGhlIGFkZHJlc3Mgb2YKKyAgICAgICAgYSBmdW5jdGlvbiBpZiBpdCdzIHN0YXRpYyBvciBleHRlcm5hbCAoaS5lLiwgc3RhdGljcCBsaWtlcyBpdCkuCisJIAorCVdlZCBEZWMgMTYgMTY6MDk6MzcgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHNpZ3NlZ3YsIGluaXRfZGVjbF9wcm9jZXNzaW5nKTogR2l2ZSB1c2VycyB0aGUgbGluZQorCW51bWJlciBhbmQgc291cmNlIGZpbGVuYW1lIG9uIGNvZGUgdGhhdCBtYWtlcyB0aGUgYmFjay1lbmQgY2FsbAorCWFib3J0LgorCisJVHVlIERlYyAxNSAxNjo1MDo0NSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuaCAoQ0xBU1NUWVBFX05BTUVTKTogRGVsZXRlZC4KKworCSogY3AtaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogV2hlbiBnZXR0aW5nIHJlYWR5IHRvIGdpdmUgYW4gZXJyb3IKKwlhYm91dCBzb21ldGhpbmcgbm90IGJlaW5nIGEgbWVtYmVyIG9yIG9wZXJhdG9yLCBvbmx5IGNhbGwKKwlvcGVyYXRvcl9uYW1lX3N0cmluZyB3aGVuIGl0IGlzIGluZGVlZCBhbiBvcGVyYXRvci4KKworCSogY3AtZGVjbDIuYyAoYmFkX3NwZWNpZmllcnMpOiBOZXcgZnVuY3Rpb24uCisJKiBjcC10cmVlLmggKGJhZF9zcGVjaWZpZXJzKTogQWRkIHByb3RvdHlwZS4KKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgaXQgaW4gcGxhY2VzIHdoZXJlIHdlIGhhZAorCXJlcGxpY2F0ZWQgY29kZS4KKworCVR1ZSBEZWMgMTUgMDQ6MDU6NTQgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoVU5TRVRfUkVTRVJWRURfV09SRCk6IFVwZGF0ZSBmcm9tIGMtbGV4LmMuCisKKwlUdWUgRGVjIDE1IDAxOjIxOjQ0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKHJlYWxfeXlsZXgpOiBDb252ZXJ0IGludmlzaWJsZSBpbml0aWFsaXplZCBjaGFyIGFycmF5CisJdmFycyB0byBzdHJpbmcgY29uc3RhbnRzLgorCisJTW9uIERlYyAxNCAxMTozODoxMCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluOiBGaXggYSBsb3Qgb2YgZGVwZW5kZW5jaWVzIG9uIGNwLWxleC5oIGFuZCBvdGhlcgorCWhlYWRlcnMgZm9yIGNwLSoubyB0YXJnZXRzLgorCisJKiBjcC1zZWFyY2guYyAoZ2V0X2ZpcnN0X21hdGNoaW5nX3ZpcnR1YWwpOiBVc2Ugd2FybmluZ193aXRoX2RlY2wsCisJbm90IGVycm9yX3dpdGhfZGVjbCwgaW5zaWRlIGNvZGUgdGhhdCdzIG9ubHkgZXZlciByZWFjaGVkIHdpdGgKKwktV292ZXJsb2FkZWQtdmlydHVhbC4KKworCSogY3AtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IFdoZW4gYnVpbGRpbmcgdGhlIElOSVRfRVhQUiwgY2xlYXIKKwlvdXQgdGhlIGNvbnRleHQgaWYgaXQncyBhbiBFUlJPUl9NQVJLIHNvIHRoZSBiYWNrLWVuZCB3b24ndCBkaWUgbGF0ZXIuCisKKwkqIGNwLXR5cGUyLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogRG9uJ3Qgc2F5IGFueXRoaW5nIGxpa2UgInBsZWFzZQorCWZpeCBhYm92ZSBlcnJvcnMiLCBqdXN0IGV4aXQgcXVpZXRseS4KKworCSogY3AtbGV4LmggKGVudW0gcmlkKTogUmVvcmRlcmVkIGZvciBpbXByb3ZlZCBzcGVlZCBpbiBncm9rZGVjbGFyYXRvcgorCXdoZW4gaXQgZG9lcyBpdHMgbGluZWFyIHNlYXJjaC4gIFJJRF9XQ0hBUiBpcyBubyBsb25nZXIgaW4gdGhlCisJc2VhcmNoIHBhdGgsIHNpbmNlIGl0J3MgZm91bmQgYnkgaGFuZCAoYXMgYXJlIFJJRF9JTlQgYW5kIFJJRF9DSEFSKS4KKwkoUklEX0ZJUlNUX01PRElGSUVSKTogU3RhcnQgYXQgUklEX0VYVEVSTiBub3cuCisKKwkqIGNwLXBhcnNlLnkgKG92ZXJsb2FkZGVmKTogV2FybiB0aGF0IHVzaW5nIGBvdmVybG9hZCcgaXMgYW4KKwlhbmFjaHJvbmlzbS4KKworCVdlZCBEZWMgIDkgMDg6Mjc6MTMgMTk5MiAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhcyBhdCBkZWxsYS5hcHBsaS5zZSkKKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1ha2Ugc3VyZSB0aGUgInVua25vd24gdHlwZSIKKwl0eXBlZGVjbCBnZXRzIGlnbm9yZWQgYnkgdGhlIGRlYnVnaW5mbyBnZW5lcmF0b3JzLgorCisJU3VuIERlYyAxMyAwMjozODo0MyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAobG9va3VwX25lc3RlZF9maWVsZCk6IENoZWNrIGZvciBhc3NpZ25tZW50IHRvIG1lbWJlcnMKKwlvZiBhbiBlbmNsb3NpbmcgY2xhc3Mgb25seSB3aGVuIGxvb2tpbmcgYXQgYSBtZW1iZXIsIG5vdCBhdCBvdGhlcgorCXRoaW5ncyAobGlrZSBuZXN0ZWQgdHlwZXMpLgorCisJKiBjcC1wdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogT25seSBjaGVjayB0aGF0IEFSR1MgaXMgYSBUUkVFX0xJU1QgaWYKKwlpdCdzIG5vbi1udWxsLiAKKworCVRoZXNlIGZvdXIgYXJlIGZyb20gTmlrbGFzIEhhbGxxdmlzdDoKKworCSogY3Atc2VhcmNoLmMgKGNvbXB1dGVfdmlzaWJpbGl0eSk6IFVzZSB0aGUgbWFpbiB2YXJpYW50IHdoZW4KKwl0ZXN0aW5nIGlmIGEgbWVtYmVyIGZ1bmN0aW9uIGJlbG9uZ3MgaW4gdGhlIGN1cnJlbnQgY2xhc3MuCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEb24ndCBsb29rIGZvciBjb25zdHJ1Y3RvcnMKKwljYWxsZWQgYnkgaW5pdGlhbGl6YXRpb24gaW5zaWRlIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGNsYXNzZXMnCisJYmFzZXMgKGFzIG9wcG9zZWQgdG8gaW5oZXJpdGVkIG1ldGhvZHMpLgorCisJKiBjcC10eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBJbiB0aGUgY2FzZSBvZgorCXRlbXBsYXRlcywgbWFrZSBzdXJlIGJ1aWxkX21ldGhvZF9jYWxsIGtub3dzIHdoaWNoIGluc3RhbnRpYXRpb24KKwlvZiB0aGUgY2xhc3MgdGVtcGxhdGUgd2UncmUgaW5pdGlhbGl6aW5nIGFuIG9iamVjdCBvZi4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEluc3RlYWQgb2YgYW4gYXNzZXJ0LCByZXR1cm4gYQorCU5VTExfVFJFRSBpZiB0aGUgcmV0dXJuX3R5cGUncyBub3QgcmV0dXJuX2N0b3IuCisKKwlTYXQgRGVjIDEyIDIzOjUyOjI1IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlKTogUmVjb2duaXplICdTJyBmb3Igc2lnbmVkIGNoYXIuCisJKGRvX2N1dl9wcmVmaXgpOiBQcmludCBvdXQgInNpZ25lZCIgZm9yIGl0LgorCisJRnJpIERlYyAxMSAxOTozNjozNiAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IEZpeCBhIHR5cG8gYWJvdXQgd2hlbiB0byByZXR1cm4KKwl0aGUgcmVzdWx0IG9mIGEgdHlwZSBjb252ZXJzaW9uLgorCisJVHVlIERlYyAgOCAyMDowNToyNSAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IElmIGEgY29udmVyc2lvbiBjYW4gYmUgZm91bmQgdmlhCisJYSBjb25zdHJ1Y3RvciwgdGhlbiB1c2UgaXQuCisKKwlGcmkgRGVjICA0IDEzOjUzOjAxIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKGluaXRfbGV4KTogRGVsZXRlIGluaXRzIGZvciBDQVJEX0VYUFIgYW5kIFNFVF9MRV9FWFBSLAorCXNpbmNlIHdlIG5ldmVyIGFjdHVhbGx5IHVzZSB0aGVtLgorCisJVGh1IERlYyAgMyAxOToyMDoxNCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYzogSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3Igc3lzdGVtcyB0aGF0IG5lZWQgdGhpbmdzIGZvcgorCXNpZ25hbC5oLgorCisJV2VkIERlYyAgMiAxNTo1MTozNCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEb24ndCBjYWxsIGFib3J0IGZvciBwdXJlIHZpcnR1YWwKKwltZXRob2RzLCBpbnN0ZWFkLCBjYWxsIHRoZSB1c2VyLWRlZmluZWQgbWV0aG9kLiAgQWRkcmVzc2VzIG9mIHB1cmUKKwl2aXJ0dWFsIG1ldGhvZHMgYXJlIHByb2JhYmx5IHN0aWxsIHdyb25nLgorCisJV2VkIERlYyAgMiAxNDo0NDo0MSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoY29udmVydF9oYXJzaG5lc3MpOiBJZiBwYXJtJ3MgbnVsbCBmb3IgYSByZWZlcmVuY2UgKGFzCisJY2FuIGJlIHBhc3NlZCBpbiksIHJldHVybiAwLgorCisJVHVlIERlYyAgMSAxODowNToyMCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBNYWtlIG1lbWJlciBpbml0aWFsaXphdGlvbiBiZSBhCisJd2FybmluZywgbm90IGFuIGVycm9yLiAgT25seSBpc3N1ZSBpdCBpZiBub3QgLXBlZGFudGljLCBzaW5jZQorCWdyb2tmaWVsZCB3aWxsIGlzc3VlIGFuIGVycm9yIHdoZW4gcGVkYW50aWMuICBPbmx5IHdhcm4gYWJvdXQKKwljb25zdGFudCBtZW1iZXJzIGJlaW5nIGluaXRpYWxpemVkIGlmIGAtYW5zaScgaXMgYmVpbmcgdXNlZC4KKwkoZmluaXNoX2RlY2wpOiBPbmx5IGNvbXBsYWluIGFib3V0IHVuaW5pdGlhbGl6ZWQgY29uc3QncyB0aGF0IGFyZW4ndAorCW1lbWJlcnMgd2hlbiBhY3RpbmcgLXBlZGFudGljLCBzaW5jZSB3ZSdsbCBoYXZlIGFscmVhZHkgaXNzdWVkIHRoZQorCWVycm9yIGFib3V0IGluaXRpYWxpemluZyBhIGZpZWxkLgorCisJKiBjcC10eXBlMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBSZXZlcnQgY2hhbmdlIG9mIE5vdiAyLAorCWNvbmNlcm5pbmcgY2xlYXJpbmcgdGhlIFRSRUVfVkFMVUUgb2YgYSBkZWZhdWx0IHBhcmFtZXRlci4KKworCVR1ZSBEZWMgIDEgMTE6MDk6NTAgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogV2hlbiBsb29raW5nIGZvciBhIGRlZmF1bHQgYXJnCisJaW5pdGlhbGl6ZWQgYnkgYSBjdG9yLCBiZSBjYXJlZnVsIG9mIGEgbnVsbCByZWYgdy8gb3BlcmFuZCAxLgorCisJKiBjcC1tZXRob2QuYyAoaWNhdCk6IEhhbmRsZSBhbiBhcmd1bWVudCBvZiBgMScgZmlyc3QsIHNpbmNlIGl0J3MKKwl0aGUgbW9zdCBjb21tb24gY2FzZS4gCisKKwlUdWUgRGVjICAxIDAyOjM2OjI4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGdldF9maXJzdF9tYXRjaGluZ192aXJ0dWFsKTogT25seSBzZXQgdGhlCisJREVDTF9DT05URVhUIGlmIHRoZSBuZXcgY29udGV4dCBpcyBhIGFuIHVuYW1iaWd1b3VzIHBhcmVudCBvZiB0aGUKKwlwcmV2aW91cyBjb250ZXh0LgorCisJVHVlIERlYyAgMSAwMjoyMDozMiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlXZWQgTm92IDI1IDE4OjI1OjA2IDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IENsZWFyIERFQ0xfQ09OVEVYVCBmb3IgbG9jYWwgZGVjbGFyYXRpb25zLgorCisJTW9uIE5vdiAzMCAxNTozNjo0MyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBPbmx5IGNvbXBsYWluIGFib3V0IHVuaW5pdGlhbGl6ZWQgY29uc3RzCisJaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZW4ndCBzZWVuIGEgcHJldmlvdXMgZGVjbC9pbml0IG9mIGl0LgorCisJVGh1IE5vdiAyNiAxMToyMjoxMiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGMrKzogUHV0IGEgbmV3bGluZSBhZnRlciBmb3IgYXJnIGFuZCBiZWZvcmUgZG8sIGFzIGBgZm9yIGFyZyBkbycnCisJaXMgbm90IGFjY2VwdGVkIGJ5IGFsbCBzaGVsbHMuCisKKwlNb24gTm92IDIzIDEzOjIxOjQzIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIGMrKyAoLWxtKTogQWxzbyByZWNvZ25pemUgLWxtYXRoIGFzIGEgbWF0aCBsaWJyYXJ5LgorCisJKiBjKysgKGZpcnN0KTogT25seSBzaGlmdCBpZiAkZmlyc3QgaXMgbm8sIG9uIHRoZSBjaGFuY2Ugd2UgZ290IG5vCisJYXJndW1lbnRzIGF0IGFsbC4gIElmIHdlIGRpZG4ndCBnZXQgYW55dGhpbmcsIHNheSBzbyAoc2luY2UgLWxnKysKKwl3aWxsIGZha2Ugb3V0IHRoZSBnY2MgZHJpdmVyIGludG8gdGhpbmtpbmcgd2Ugd2FudCB0byBkbyBzb21ldGhpbmcpLgorCisJKiBjcC1wYXJzZS55IChwYXJlbl9leHByX29yX251bGwpOiBOZXcgcnVsZSB0byBlbWl0IGFuIGVycm9yIHdoZW4gYW4KKwllbXB0eSBjb25kaXRpb24gaXMgdXNlZCB3aGVuIGl0IHNob3VsZG4ndC4KKwkoc2ltcGxlX2lmLCBzdG10KTogVXNlIGl0IGZvciBgaWYnLCBgd2hpbGUnLCBhbmQgYGRvJy4KKworCSogY3AtZGVjbC5jIChzdGFydF9kZWNsKTogSWYgZ3Jva2RlY2xhcmF0b3IgcmV0dXJucyBhCisJdm9pZF90eXBlX25vZGUsIHJldHVybiBhIE5VTExfVFJFRS4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByXzEpOiBXaGVuIGNhbGxpbmcgYnVpbGRfb3BmbmNhbGwgZm9yCisJYG9wZXJhdG9yPScsIHVzZSBtYWtlX25vZGUgdG8gY3JlYXRlIGEgcGxhaW4gTk9QX0VYUFIgZm9yIGl0IHRvIHVzZSwKKwlyYXRoZXIgdGhhbiB0cnlpbmcgdG8gcGFzcyBOT1BfRVhQUiBkb3duIGhvcGluZyBpdCBnZXRzIHRoZXJlIGludGFjdC4KKwkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBEaXR0by4KKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFVzZSBUUkVFX0NPREUgb24gQVJHMyBmb3IgYQorCU1PRElGWV9FWFBSLCBzaW5jZSBpdCdsbCBiZSBjb21pbmcgaW4gcHJvcGVybHkgYXMgYSB0cmVlIG5vdy4KKworCVNhdCBOb3YgMjEgMDI6MzM6MjggMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogQ2xlYXIgREVDTF9SRUdJU1RFUiBpZiB3ZSdyZQorCWdvaW5nIHRvIGNhbGwgYSBjdG9yLCBvdGhlcndpc2Ugd2UgbWF5IGVuZCB1cCBnZW5lcmF0aW5nIGJvZ3VzIGFuZAorCWNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyBhYm91dCB0YWtpbmcgdGhlIGFkZHIgb2Ygc29tZXRoaW5nIGRlY2xhcmVkCisJdG8gYmUgYHJlZ2lzdGVyJy4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFJlY29nbml6ZSBhIHB0ci10by1tZXRob2QKKwl0aGF0IGlzIGJlaW5nIHBhc3NlZCBpbiBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IG9yIGFzIHBhcnQgb2YKKwlhIENPTVBPTkVOVF9SRUYuCisJKGJ1aWxkX2luZGlyZWN0X3JlZik6IElmIEVSUk9SU1RSSU5HIGlzIE5VTEwgKGl0J3MgcGFzc2VkIGluIHRoYXQKKwl3YXkgaW4gbWFueSBwbGFjZXMpLCB0aGVuIGRvbid0IHRyeSB0byB1c2UgaXQuCisKKwlTYXQgTm92IDIxIDAxOjQ5OjM0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwlXb3JrIHRvd2FyZHMgNjQtYml0IHN1cHBvcnQsIGFuZCBzdGlsbCBtb3JlIGhvdXNlY2xlYW5pbmcuCisKKwkqIGNwLSouW2N5XTogRm9yIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcywgcGFzcy9pbml0aWFsaXplL2NvbXBhcmUKKwlOVUxMX1RSRUUsIG5vdCAwLCB3aGVyZSBhcHByb3ByaWF0ZS4gIENhc3QgY29tcGFyaXNvbnMgYWdhaW5zdCAwCisJd2l0aCB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZXMsIHdoZXJlIGFwcHJvcHJpYXRlLiAgRml4IGFsbCBwYXNzaW5nCisJb2YgTlVMTHMgd2hlcmUgdGhlcmUgc2hvdWxkIGJlIE5VTExfVFJFRXMuICBEb24ndCBpbmNsdWRlCisJY3AtY2xhc3MuaCBhbnl3aGVyZS4gIEluIG1hbnkgcGxhY2VzLCBwYXNzIHRoZSBtaXNzaW5nIGZpZnRoIGFyZworCXRvIGJ1aWxkX29wZm5jYWxsIGFzIE5VTExfVFJFRS4KKwkqIGNwLXRyZWUuaDogQWRkIGRlY2xzIHdpdGggcHJvdG90eXBlcyBmb3IgcHJldHR5bXVjaCBldmVyeSBmdW5jdGlvbgorCWluIHRoZSBDKysgZnJvbnQtZW5kLiAgSW5jbHVkZSBjcC1jbGFzcy5oIGhlcmUuCisJKiBjcC1jYWxsLmM6IChidWlsZF9mdW5jdGlvbl9jYWxsX21heWJlLCB1bmFyeV9jb21wbGV4X2x2YWx1ZSwKKwljb252ZXJ0X2hhcnNobmVzcyk6IERvbid0IGRlY2xhcmUuCisJKGV4cGxhaW5lZCk6IEluaXRpYWxpemUgdG8gMC4KKwkoYnVpbGRfZmllbGRfY2FsbCk6IEdpdmUgYnVpbGRfb3BmbmNhbGwgaXRzIGZpZnRoIGFyZyAoTlVMTF9UUkVFKS4KKwkoYnVpbGRfbWV0aG9kX2NhbGwsIGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IERvbid0IGRlY2xhcmUKKwlyYW5rX2Zvcl9vdmVybG9hZC4KKwkqIGNwLWNsYXNzLmMgKGxvb2t1cF90YWdfY3VycmVudF9iaW5kaW5nX2xldmVsLAorCWRvX2lubGluZV9mdW5jdGlvbl9oYWlyKTogRG9uJ3QgZGVjbGFyZS4KKwkoZ2V0X3ZmaWVsZF9uYW1lKTogQWRkIHByb3RvdHlwZSBmb3Igc3RhdGljIGZuLgorCShsZWZ0bW9zdF9iYXNlY2xhc3Nlcyk6IERpc2FibGUsIG5ldmVyIHVzZWQuCisJKGNvbnN0cnVjdG9yX25hbWUpOiBEb24ndCBkZWNsYXJlLgorCShmaW5pc2hfc3RydWN0KTogRGVsZXRlIGFyZyBFTVBUWSwgbmV2ZXIgdXNlZC4gIENoYW5nZSBhbGwgY2FsbGVycy4KKwlEaXNhYmxlIHNldCBvZiBsZWZ0bW9zdF9iYXNlY2xhc3Nlcywgc2luY2UgaXQncyBuZXZlciB1c2VkIGFueXdoZXJlLgorCShwdXNoY2xhc3MpOiBEb24ndCBkZWNsYXJlIGRlY2xhcmVfdW5pbnN0YW50aWF0ZWRfdHlwZV9sZXZlbC4KKwkqIGNwLWN2dC5jIChOVUxMKTogVW5kZWYgZmlyc3QuCisJKGJ1aWxkX3VwX3JlZmVyZW5jZXMpOiBDYXN0IHJldHVybiBvZiBlcnJvcl9ub3RfYmFzZV90eXBlIHRvIGB0cmVlJy4KKwkoY29udmVydF90b19yZWZlcmVuY2UpOiBEZWxldGUgdXNlbGVzcyB2YXJpYWJsZSBydmFsMS4KKwkoY29udmVydF90b19pbnRlZ2VyKTogRG9uJ3QgZGVjbGFyZSBidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0IG9yCisJYnVpbGRfdW5hcnlfb3AuCisJKGJ1aWxkX3R5cGVfY29udmVyc2lvbik6IERvbid0IGRlY2xhcmUgZGVmYXVsdF9jb252ZXJzaW9uLgorCSogY3AtZGVjbC5jIChtYW55IGV4dGVybiBmdW5zKTogRG9uJ3QgZGVjbGFyZS4KKwkoZ3Jva3Bhcm1zLCBsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsLCBsb29rdXBfbmVzdGVkX3R5cGUsCisJcmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlLCBwYXJtbGlzdF9pc19yYW5kb20sCisJZ3Jva19vcF9wcm9wZXJ0aWVzLCBleHBhbmRfc3RhdGljX2ludCwgZGVhY3RpdmF0ZV9leGNlcHRpb25fY2xlYW51cHMsCisJcmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4pOiBEZWNsYXJlIHN0YXRpYyBmbnMgdy8gcHJvdG90eXBlcy4KKwkocHVzaGxldmVsKTogQ2FzdCBwYXNzaW5nIG9mIE5FV0xFVkVMIHRvIGFuIGludC4KKwkocG9wbGV2ZWwsIHBvcGxldmVsX2NsYXNzLCBmaW5pc2hfbWV0aG9kKTogQ2FzdCBmaXJzdCB0d28gYXJncyBvZgorCUdOVV94cmVmX2VuZF9zY29wZSB0byBIT1NUX1dJREVfSU5ULgorCShkdXBsaWNhdGVfZGVjbHMpOiBQYXNzIHRoaXJkIGFyZyB0byBjb21wZXhjZXB0dHlwZXMgKDApLgorCShncm9rdmFyZGVjbCk6IERlbGV0ZSBhcmcgQ1RZUEUsIG5ldmVyIHVzZWQuICBDaGFuZ2UgYWxsIGNhbGxlcnMuCisJRGVsZXRlIHVudXNlZCBsb2NhbCB2YXIgYmxvY2tfcHJldmlvdXNseV9jcmVhdGVkLgorCSogY3AtZGVjbDIuYyAoc3Vic3RpdHV0ZV9uaWNlX25hbWUpOiBEb24ndCBkZWNsYXJlIGRlY2xfYXNfc3RyaW5nLgorCShncm9rY2xhc3Nmbik6IERlbGV0ZSB1bnVzZWQgbG9jYWwgdmFyIG5hbWUuCisJKGNoZWNrX2NsYXNzZm4pOiBEZWxldGUgdW51c2VkIGFyZyBGTEFHUy4gIENoYW5nZSBhbGwgY2FsbGVycy4KKwkoZ3Jva2ZpZWxkKTogUGFzcyBkaWdlc3RfaW5pdCBvbmx5IDMgYXJncywgbm90IDYgKHRoYXQncyBpbiB0aGUgQworCWZyb250IGVuZCwgZGFtbWl0KS4KKwkoY29lcmNlX25ld190eXBlLCBjb2VyY2VfZGVsZXRlX3R5cGUpOiBEZWxldGUgZmlyc3QgYXJnIENUWVBFLCBpdCdzCisJbmV2ZXIgdXNlZC4gIENoYW5nZSBhbGwgY2FsbGVycy4KKwkqIGNwLWRlbS5jIChjcGx1c19kZW1hbmdsZSk6IERlbGV0ZSB1bnVzZWQgdmFyIG5vbl9lbXB0eS4KKwkoTlVMTCk6IFVuZGVmIGZpcnN0LgorCSogY3AtZXhjZXB0LmM6IChjYWxsX3RvX3VuaGFuZGxlZF9leGNlcHRpb24pOiBBZGQgZGVjbCBvZgorCWNvbWJpbmVfc3RyaW5ncy4KKwkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IEFkZCBkZWNscyBvZiBidWlsZF9mdW5jdGlvbl90eXBlIGFuZAorCWRlZmluZV9mdW5jdGlvbi4KKwkqIGNwLWdjLmMgKGRlZmluZV9mdW5jdGlvbik6IEFkZCBleHRlcm4gZGVjbC4KKwkqIGNwLWluaXQuYyAoaXNfYWdncl90eXBlZGVmKTogRGVsZXRlIGV4dGVybiBkZWNsLiAgQWRkIHR5cGUgZm9yCisJYXJndW1lbnQgT1JfRUxTRS4KKwkoYnVpbGRfbmV3KTogRG9uJ3QgZGVjbGFyZSByZXF1aXJlX2NvbXBsZXRlX3R5cGUuCisJKGJ1aWxkX3ZlY19kZWxldGUpOiBPbmx5IHBhc3MgNiBhcmdzLCBub3QgNy4KKwkqIGNwLWxleC5jIChpbml0X2xleCk6IERvbid0IGRlY2xhcmUgaW5pdF9wYXJzZSBvcgorCWxhbmdfcHJpbnRhYmxlX25hbWUuCisJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IERvbid0IGRlY2xhcmUgY29uc3RydWN0b3JfbmFtZS4KKwkoY29tcGlsZXJfZXJyb3IpOiBEZWNsYXJlIGFyZ3MgViBhbmQgVjIgdG8gYmUgSE9TVF9XSURFX0lOVC4KKwkqIGNwLW1ldGhvZC5jIChpbmRleCwgcmluZGV4KTogRG9uJ3QgZGVjbGFyZS4KKwkqIGNwLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBDYXN0IGZpcnN0IGFyZyB0byBidWlsZF94X3VuYXJ5X29wIHRvCisJYmUgb2YgZW51bSB0cmVlX2NvZGUgdHlwZS4gIEZvciBldmVyeSBjYWxsIHRvIGJ1aWxkX25ldywgcGFzcyBpdHMKKwlmb3VydGggYXJnIGFzIGEgY29tcGFyaXNvbiBvZiAkJCBhZ2FpbnN0IE5VTExfVFJFRSwgaW5zdGVhZCBvZgorCWp1c3QgcGFzc2luZyBpdCBpbi4KKwkoY29tYmluZV9zdHJpbmdzLCB0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBBZGQgZXh0ZXJuIGRlY2xzLgorCShzdHJ1Y3RzcCk6IFBhc3MgbG9va3VwX25hbWUgaXRzIG1pc3Npbmcgc2Vjb25kIGFyZyAoMCkuCisJKGNvbXBvbmVudF9kZWNsKTogUGFzcyA1LCBub3QgNiwgYXJncyB0byBncm9rZmllbGQuCisJKGFuc2lfZXhjZXB0X3N0bXRzKTogRGVsZXRlIGRlY2xzIG9mIGFuc2lfZXhwYW5kX3N0YXJ0X21hdGNoIGFuZAorCWNwbHVzX2V4Y2VwdGlvbl9uYW1lLgorCSogY3AtcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogRGVsZXRlIGRlY2wgb2YKKwl0eXBlX2FzX3N0cmluZy4KKwkqIGNwLXNlYXJjaC5jIChnZXRfYmluZm8pOiBEZWNsYXJlIHRoaXJkIGFyZyBQUk9URUNUIGFzIGludC4KKwkoZ2V0X2JpbmZvMiwgZ2V0X2JpbmZvMl9yZWN1cnNpdmUpOiBNYWtlIHN0YXRpYy4KKwkoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBDYXN0IERFUFRIIGFuZCBJU19QUklWQVRFIHRvIGludHMsIG5vdAorCUhPU1RfV0lERV9JTlRzLgorCShnZXRfYmFzZWxpbmtzKTogRGVsZXRlIGRlY2wgb2YgaGFzaF90cmVlX2NvbnMuCisJKiBjcC1zcGV3LmMgKHByb2JlX29ic3RhY2spOiBNYWtlIHN0YXRpYy4gIENvbXBhcmUgTkxFVkVMUyAhPSAwLAorCW5vdCA+IDAsIHNpbmNlIGl0J3MgdW5zaWduZWQuCisJKiBjcC10cmVlLmMgKGxpc3RfaGFzaF9sb29rdXBfb3JfY29ucyk6IERvbid0IGRlY2xhcmUgY29uc3RydWN0b3JfbmFtZS4KKwkqIGNwLXR5cGUyLmMgKGRpZ2VzdF9pbml0LCBpbmNvbXBsZXRlX3R5cGVfZXJyb3IsCisJcmVhZG9ubHlfd2FybmluZ19vcl9lcnJvciwgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBEb24ndCBkZWxldGUuCisJKGVycm9yX3dpdGhfYWdncl90eXBlKTogRGVjbGFyZSB0aGlyZCBhcmcgQVJHIHRvIGJlIEhPU1RfV0lERV9JTlQuCisJKGJ1aWxkX3Njb3BlZF9yZWYpOiBEZWxldGUgdW51c2VkIHZhciBvcmlnX3JlZi4KKwkoYnVpbGRfeF9hcnJvdyk6IEV2ZW4gd29yc2UsIGdpdmUgYnVpbGRfb3BmbmNhbGwgaXRzIG1pc3NpbmcgbGFzdAorCXR3byBhcmd1bWVudHMgKGFzIE5VTExfVFJFRXMpLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBDYWxsIGJ1aWxkX2luZGlyZWN0X3JlZiB3aXRoCisJaXRzIG1pc3Npbmcgc2Vjb25kIGFyZyAoYXMgYSBOVUxMKS4KKwkoYnVpbGRfeF9pbmRpcmVjdF9yZWYpOiBBZ2FpbiwgYnVpbGRfb3BmbmNhbGwgd2l0aCBpdHMgbWlzc2luZworCWxhc3QgdHdvIGFyZ3MuCisJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IERlbGV0ZSBkZWNsIG9mIGJ1aWxkX292ZXJsb2FkX2NhbGxfbWF5YmUuCisJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBDYXN0IHJldHVybiBvZiBlcnJvcl9ub3RfYmFzZV90eXBlIHRvIHRyZWUuCisJKiBjcC14cmVmLmMgKGdldHB3ZCk6IERlY2xhcmUgYXMgZXh0ZXJuLgorCShJbnRlZ2VyLCBTdHJpbmcpOiBEZWxldGUgdHlwZWRlZnMsIHJlbmFtZSBhbGwgdXNlcyB0byB0aGVpciByZWFsCisJbWVhbmluZ3MgKGBpbnQnIGFuZCBgY2hhciAqJykuCisKKwlUaHUgTm92IDE5IDAxOjQxOjU4IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVtLmMgKGRvX2J1aWx0aW5fdHlwZSk6IFJlY29nbml6ZSBgdycsIGEgd2lkZSBjaGFyYWN0ZXIsIHNpbmNlCisJaXQncyBub3cgYSB0eXBlIGFjY29yZGluZyB0byB0aGUgQU5TSSBYM0oxNiB3b3JraW5nIHBhcGVyOyBvdXRwdXQKKwkid2NoYXJfdCIgZm9yIGl0LgorCShjcGx1c19kZW1hbmdsZSk6IEFjY2VwdCBgdycgYXMgYW4gaW50ZWdyYWwgdHlwZS4KKworCSogY3AtbGV4LmMgKGluaXRfbGV4KTogRGVsZXRlIGR1cGxpY2F0ZSBzZXR0aW5nIG9mIGBfX3BsJy4KKworCVdlZCBOb3YgMTggMjE6Mjk6MTQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworIAkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZS1lbmFibGUgY29kZSB0byBjdXQgZG93biBvbiB0aGUgc2l6ZQorCW9mIHN5bWJvbCBvdXRwdXQsIHRoZSBwb3NpdGl2ZXMgb3V0d2VpZ2ggdGhlIG5lZ2F0aXZlcy4KKworCVdlZCBOb3YgMTggMTk6NTE6NTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoZGZzX3dhbGspOiBNb3ZlIHNldHRpbmcgb2YKKwl2YmFzZV9kZWNsX3B0cl9pbnRlcm1lZGlhdGUgb3V0IG9mICNpZmRlZiBjb2RlLgorCisJV2VkIE5vdiAxOCAxODo0OToxMyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBNYWtlIHdvcmRpbmcgb24gZXJyb3IgbWVzc2FnZQorCXN0cm9uZ2VyLgorCisJVHVlIE5vdiAxNyAxNzo0NjoxMSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoQ0hFQ0tfY29udmVydF9wb2ludGVyX3RvX3NpbmdsZV9sZXZlbCk6IERvbid0IGRlZmluZS4KKworCU1vbiBPY3QgIDUgMDM6MTA6MTQgMTk5MiAgTWFyayBFaWNoaW4gIChlaWNoaW4gYXQgdHdlZWRsZWR1bWJlci5jeWdudXMuY29tKQorCisJKiBjKysgKG51bWFyZ3MpOiAkIyB3YXMgdXNlZCBhZnRlciBzZXQgd2FzIGNhbGxlZDsgaW5zdGVhZCwgc2F2ZQorCSQjIGluICRudW1hcmdzIGFuZCB1c2UgdGhhdCB2YWx1ZSBpbnN0ZWFkLgorCitGcmkgSmFuICA4IDE4OjExOjU1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChyZXNjYW4pOiBQcmV2ZW50IHRva2VuIHBhc3RpbmcgYmVmb3JlIG1hY3JvIGNhbGwuCisJKG1hY3JvZXhwYW5kKTogUHJldmVudCB0b2tlbiBwYXN0aW5nIGFyb3VuZCBhbiBhcmcgdW5sZXNzIGl0J3MgcmF3LgorCisJKiBjLWxleC5jICh5eWxleCk6IERvbid0IGFsbG93IEAgaW4gaWRlbnRpZmllciBvdXRzaWRlIG9mIE9iamVjdGl2ZSBDLgorCitGcmkgSmFuICA4IDE1OjAzOjUyIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKHBsdXNfeG9yX2lvcl9vcGVyYXRvcik6IE5ldyBwcmVkaWNhdGUuCisKK0ZyaSBKYW4gIDggMTM6MDk6NDcgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChCWVRFX0xPQURTX0VYVEVORCwgTE9BRF9FWFRFTkQpOiBOZXcgbWFjcm9zLgorCShzdWJzdCwgc2ltcGxpZnlfYW5kX2NvbnN0X2ludCwgbm9uemVyb19iaXRzLCBudW1fc2lnbl9iaXRfY29waWVzKToKKwlVc2UgdGhlbS4KKwkoc3Vic3QsIGNhc2UgU0VUKTogTWFrZSBhIFNJR05fRVhURU5EIGluc3RlYWQgb2YgcGFyYWRveGljYWwgU1VCUkVHCisJaWYgQllURV9MT0FEU19TSUdOX0VYVEVORDsgcHJldmlvdXNseSBvbmx5IG1hZGUgWkVST19FWFRFTkQuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtKTogRml4IHR5cG8gaW50cm9kdWNlZCBieSBwcmV2aW91cyBjaGFuZ2UuCisKKyAJKiBjb25maWd1cmUgKDQ4NiB0YXJnZXRzKTogU2V0IGNwdV90eXBlIHRvIGkzODYuCisKK0ZyaSBKYW4gIDggMDM6NDg6MjcgMTk5MyAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBpMzg2L3BlcmZvcm0uaDogTmV3IGZpbGUuICBwZXJmb3JtXyogbWFjcm9zIGZvciBpMzg2LgorCSogaTM4Ni8zODZic2QuaCxpMzg2L29zZnJvc2UuaCxpMzg2L21hY2guaCAocGVyZm9ybV8qKTogTW92ZQorCXBlcmZvcm1fKiBtYWNyb3MgdG8gbmV3IGZpbGUuCisKK1RodSBKYW4gIDcgMTk6MDM6NTYgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oICh0YXJnZXRfc3dpdGNoZXMpOiBBZGQgIi1tdHJhaWxpbmctY29sb24iCisJKEFTTV9PVVRQVVRfTEFCRUwpOiBJZiBUQVJHRVRfVFJBSUxJTkdfQ09MT04gdGhlbiBlbWl0CisJYSBjb2xvbiBhZnRlciB0aGUgbGFiZWwuCisJKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwpOiBMaWtld2lzZS4KKwkoQVNNX09VVFBVVF9DT01NT04pOiBMaWtld2lzZS4KKwkoQVNNX09VVFBVVF9MT0NBTCk6IExpa2V3aXNlLgorCitUaHUgSmFuICA3IDE4OjIxOjUyIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZTogTm93IHRoYXQgYWxsIGZpbGVzIG1vdmVkLCBhbHdheXMgaW5jbHVkZSBDUFVfVFlQRSBpbgorCWRlZmF1bHQgZmlsZSBuYW1lczsgZG8gbm90IGNoZWNrIGJvdGggY29uZmlnIGFuZCBjb25maWcvJGNwdV90eXBlLgorCUZpeCBhIGZldyBtaXNzaW5nIGRpcmVjdG9yeSBuYW1lcyBhbmQgcmVtb3ZlIGEgZmV3IHJlZHVuZGFudCBzcGVjcy4KKworCSogY29uZmlnL3ZheCwgY29uZmlnL2NvbnZleDogTmV3IGRpcmVjdG9yaWVzOyBhbGwgZmlsZXMgbW92ZWQuCisJKiBjb25maWd1cmUgKHZheC0qLCBjb252ZXgtKik6IEZpbGVzIG5vdyBpbiBzdWJkaXJlY3Rvcmllcy4KKworVGh1IEphbiAgNyAxNzozMTozNiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChzcGVjcyk6IFVzZSBHQ0NfRk9SX1RBUkdFVC4KKworICAgICAgICAqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgYysrIGFuZCBnKysgb25seSBpZiBjYzFwbHVzCisJYnVpbHQuCisKKwkqIGZpeGluY2x1ZGVzOiBmaXggdGhlIHJlbmFtZSBwcm90b3R5cGUgb24gdGhlIHJzNjAwMCA8c3RkaW8uaD4sCisJd2hpY2ggY29uZmxpY3RlZCB3aXRoIGMrKyB1c2Ugb2YgbmV3CisKKwkqIGMtZGVjbC5jIChzdGFydF9kZWNsKTogQ29ycmVjdCBvcmRlciBvZiBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLgorCitUaHUgSmFuICA3IDE2OjUyOjAxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL3JvbXAveC1yb21wIChDQyk6IEFkZCAtVV9fU1REQ19fLgorCitUaHUgSmFuICA3IDA1OjMwOjEwIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBzaWNzLnNlKQorCisJKiBsaWJnY2MyLmMgKF9fdWRpdl93X3NkaXYpOiBSZXBsYWNlIGhhcmQtY29kZWQgY29uc3RhbnRzIDMxIHdpdGgKKwkoU0lfVFlQRV9TSVpFIC0gMSkuCisKKwkqIHBhLm1kOiBBZGQgZmxvYXRpbmcgcG9pbnQgbGQvc3QgaW5kZXhlZCBwYXR0ZXJucy4KKworCSogcGEubWQgKHJlZyAxMTI6U0kgcmVjb2duaXplcnMpOiBSZW1vdmUuCisJKG1haW4gbW92ZTpTSSByZWNvZ25pemVyKTogQWRkIGFsdGVybmF0aXZlIGZvciBncmVnIC0+IHJlZyAxMTIuCisKKwkqIHBhLm1kIChmbG9hdHNpc2YyIHBhdHRlcm5zKTogUHV0IG91dHB1dCB0ZW1wbGF0ZSBoZXJlLCBkb24ndAorCWNhbGwgb3V0cHV0X2Zsb2F0c2lYZjIuCisJKGZsb2F0c2lkZjIgcGF0dGVybnMpOiBMaWtld2lzZS4KKwkqIHBhLmMgKG91dHB1dF9mbG9hdHNpc2YyLCBvdXRwdXRfZmxvYXRzaWRmMik6IFJlbW92ZS4KKworCSogcGEubWQgKGZsb2F0dW5zc2lkZjIsIGZsb2F0dW5zc2lzZjIpOiBOZXcgcGF0dGVybnMuCisJKGZsb2F0ZGlzZjIsIGZsb2F0ZGlkZjIpOiBOZXcgcGF0dGVybnMuCisJKGZpeF90cnVuY3NmZGkyLCBmaXhfdHJ1bmNkZmRpMik6IE5ldyBwYXR0ZXJucy4KKwkocm90cnNpMywgcm90bHNpMyk6IE5ldyBwYXR0ZXJucy4KKwkoc2hkIG9wdGltaXplcnMpOiAyIG5ldyBwYXR0ZXJucy4KKworCSogcGEubWQgKGFzaGxzaTMsIGFzaHJzaTMsIGxzaHJzaTMpOiBSZXdyaXRlIG5vdCB0byBtZW50aW9uIFNBUi4KKwkoenZkZXAzMiwgdmV4dHJzMzIpOiBOZXcgbmFtZWQgcmVjb2duaXplcnMuCisJKiBwYS5oIChGSVhFRF9SRUdJU1RFUlMpOiBNYWtlIHJlZ2lzdGVyIDExMiAoU0FSKSBub3QgZml4ZWQuCisKK1RodSBKYW4gIDcgMDA6Mzg6MDIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjL29iamVjdC5tICgrIGVycm9yOiwgLSBlcnJvcjopOiBVc2UgX29iamNfZXJyb3IuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKSBbU01BTExfUkVHSVNURVJfQ0xBU1NFU106IFdoZW4gYWRkaW5nIGFuIGV4dHJhCisJbmVlZCBpZiB0aGUgaW5zbiB1c2VzIHRoZSBmdW5jdGlvbiB2YWx1ZSByZXR1cm4gcmVnaXN0ZXIsCisJbGlrZXdpc2UgYWRkIGFuIGV4dHJhIHNpbmdsZS1yZWcgbmVlZCBmb3IgZWFjaCBjbGFzcyBpbiB3aGljaAorCXRoZSBpbnNuIG5lZWRzIGEgZ3JvdXAuCisKK1dlZCBKYW4gIDYgMjA6Mzg6MjAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworCSogYWxwaGEuaCAoQVNNX0ZJTEVfU1RBUlQpOiBDaGFuZ2UgLnZlcnN0YW1wIGlkZW50IGZvciBCTDEwLgorCSogYWxwaGEubWQgKGRpdi9tb2QpOiBDaGFuZ2UgY2FsbGluZyBzZXF1ZW5jZSB0byBhZ3JlZSB3aXRoIEJMMTAuCisKK1dlZCBKYW4gIDYgMTk6NTQ6MDUgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGhhbC5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2FybTogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAoYXJtLSotKik6IFVwZGF0ZSBsb2NhdGlvbiBvZiB0bV9maWxlLgorCSogY29uZmlnL3B5cjogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAocHlyYW1pZC0qLSopOiBTZXQgeG1ha2VfZmlsZS4KKwlVcGRhdGUgbG9jYXRpb24gb2YgdG1fZmlsZS4KKworV2VkIEphbiAgNiAxOTowMzoxOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKENQUF9TUEVDLCBMSUJfU1BFQywgTElOS19TUEVDKToKKwlBZGQgLWNvbXBhdC1ic2QgY29uZGl0aW9uYWxzLgorCisJKiBjY2NwLmMgKG1haW4pOiBJbXBsZW1lbnQgLWl3aXRocHJlZml4LgorCitXZWQgSmFuICA2IDE4OjEzOjEzIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuYyAocHJpbnRfb3BlcmFuZCk6IEFsd2F5cyB1c2UgIjw+IiBpbnN0ZWFkIG9mICIhPSIuCisKKwkqIHBhLmggKHRhcmdldF9zd2l0Y2hlcyk6IEFkZCAiLW1kaXNhYmxlLWZwcmVncyIgYW5kIAorCSItbWRpc2FibGUtaW5kZXhpbmcuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgVEFSR0VUX0RJU0FCTEVfRlBSRUdTLCB0aGVuIG1hcmsKKwlhbGwgRlAgcmVnaXN0ZXJzIGFzIGZpeGVkLgorCSogcGEubWQgKGluZGV4ZWQgbG9hZHMpOiBEaXNhYmxlIGlmIFRBUkdFVF9ESVNBQkxFX0lOREVYSU5HLgorCShtdWxzaTMsIHhtcHl1KTogRGlzYWJsZSB4bXB5dSBpZiBUQVJHRVRfRElTQUJMRV9GUFJFR1MuCisJKiBjb25maWd1cmU6IEFkZCBocHBhMS5YLWhwLXV0YWhtYWNoIHRhcmdldC4KKwkqIHBhLXV0YWhtYWNoLmgsIHBhMS11dGFobWFjaC5oOiBOZXcgZmlsZXMuIAorCitXZWQgSmFuICA2IDExOjIwOjU5IDE5OTMgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbiBhdCBvc2Yub3JnKQorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFN1cHBvcnQgbmV3IG1vZGVzIFFGbW9kZSBhbmQgSEZtb2RlLgorCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBBZGQgb3B0YWIgZW50cmllcyBmb3IgUUZtb2RlIGFuZCBIRm1vZGUuCisKKwkqIHJlbG9hZDEuYyAoaW5pdF9yZWxvYWQpOiBBZGQgZW50cmllcyBpbiAncmVsb2FkX2luX29wdGFiJworCWZvciBRRm1vZGUgYW5kIEhGbW9kZS4KKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3JlYWwpOiBVc2UgYEFTTV9PVVRQVVRfQllURV9GTE9BVCcgYW5kCisJYEFTTV9PVVRQVVRfU0hPUlRfRkxPQVQnIGZvciBRRm1vZGUgYW5kIEhGbW9kZSByZXNwZWN0aXZlbHkuCisKKwkqIG1hY2htb2RlLmRlZjogQWRkZWQgbmV3IG1vZGVzIFFGbW9kZSBhbmQgSEZtb2RlLgorCitXZWQgSmFuICA2IDExOjI5OjQ2IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEuYyAoZm1weWFkZG9wZXJhbmRzLCBmbXB5c3Vib3BlcmFuZHMpOiBDbGVhbnVwcyBzdWdnZXN0ZWQgYnkKKwlUZWdlLgorCSogcGEubWQgKGZtcHlhZGQgcGVlcGhvbGVzKTogQ2xlYW51cHMgc3VnZ2VzdGVkIGJ5IFRlZ2UuCisKKwkqIHBhLm1kIChtb3ZxaSwgbW92aGksIG1vdnNpLCBtb3ZkaSwgbW92c2YsIG1vdmRmKTogRGlzY291cmFnZQorCXJlZ2NsYXNzIGZyb20gcHJlZmVycmluZyBhbnl0aGluZyB3aGljaCBpbnZvbHZlcyBhIEZQPC0+R1IgY29weS4KKworCSogcGEubWQgKG1pbGxpY29kZSBleHBhbmRzKTogQ2hhbmdlIG9wZXJhbmQgMyBpbiB0aGUgZXhwYW5kCisJcGF0dGVybiBmcm9tIGEgY2xvYmJlciBvZiBhIG1hdGNoX3NjcmF0Y2ggdG8gYSBjbG9iYmVyIG9mIGEKKwltYXRjaF9vcGVyYW5kIHdpdGggYSByZWdpc3RlciBwcmVkaWNhdGUuICBNYWtlIGFwcHJvcHJpYXRlCisJY2hhbmdlIGluIHRoZSBnZW5lcmF0ZWQgUlRMLgorCShtaWxsaWNvZGUgaW5zbnMpOiBDbG9iYmVyIGEgbWF0Y2hfb3BlcmFuZCB3aXRoIGEgcmVnaXN0ZXIKKwlwcmVkaWNhdGUgaW5zdGVhZCBvZiBhIG1hdGNoX3NjcmF0Y2ggZXhwcmVzc2lvbi4gIAorCSogcGEuYyAoZW1pdF9ocGRpdl9jb25zdCk6IExpa2V3aXNlLgorCisJKiBwYS5tZCAobW92c2ksIG1vdmhpLCBtb3ZxaSwgbW92ZGkpOiBVc2UgcmVnX29yXzBfb3BlcmFuZAorCWNvbnNpc3RlbnRseS4KKworV2VkIEphbiAgNiAwMjoyMzo0OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNleHAueSAoeXlsZXgpOiBNYWtlIHRva3N0YXJ0IGFuIHVuc2lnbmVkIGNoYXIgKi4KKworV2VkIEphbiAgNiAxMDo0NjoxOSAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCisKKwkqIGZpeGluY2x1ZGVzIChsaW1pdHMuaCk6ICBBZGQgI2lmbmRlZi8jZW5kaWYgYXJvdW5kIG1hY3JvcyB0aGF0CisJYXJlIHN1cHBvc2VkIHRvIGJlIGRlZmluZWQgaW4gZmxvYXQuaC4KKworCSogZml4aW5jbHVkZXMsIGZpeGluYy5zdnI0LCBmaXhpbmMuc2NvOiBEb24ndCAibWFrZSBMSUIgYWJzb2x1dGUiCisJaWYgYWxyZWFkeSBhYnNvbHV0ZSwgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgYXV0b21vdW50ZXIuCisKK1dlZCBKYW4gIDYgMDI6MzU6MjMgMTk5MyAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNjY3AuYyAoY2hlY2tfcHJlY29uZGl0aW9ucywgZG9fZXJyb3IsIGRvX3dhcm5pbmcsIGRvX3hpZmRlZik6CisJRG9uJ3QgdXNlIHNpZ25lZCBjaGFycyB0byBpbmRleCBpbnRvIGFycmF5czsgdGhleSBtaWdodCBiZSBuZWdhdGl2ZS4KKworVHVlIEphbiAgNSAyMToyMDoyOSAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYvMzg2LmggKERFQlVHX1BSSU5UX1JFRyk6IFByaW50IHJlZ25vIGFsb25nIHdpdGggcHJpbnRhYmxlCisJbmFtZS4KKwkoQ09OU1RfQ09TVFMpOiBIYW5kbGUgaW50ZWdlciBDT05TVF9ET1VCTEUgY29ycmVjdGx5LgorCShQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogQWxsb3cgaW50ZWdlciBDT05TVF9ET1VCTEUgaW50byBpbnQKKwlyZWdzLgorCisJKiBjb25maWcvZng4MDogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAoZng4MCk6IGZ4ODAgY29uZmlndXJhdGlvbiBmaWxlcyBtb3ZlZCB0aGVyZS4KKworCSogY29uZmlnL2k5NjA6IE5ldyBkaXJlY3RvcnkuCisJKiBjb25maWd1cmUgKGk5NjApOiBpOTYwIGNvbmZpZ3VyYXRpb24gZmlsZXMgbW92ZWQgdGhlcmUuCisKKwkqIGNvbmZpZy9zcGFyYzogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAoc3BhcmMpOiBzcGFyYyBjb25maWd1cmF0aW9uIGZpbGVzIG1vdmVkIHRoZXJlLgorCSogc3BhcmMvc29sMi5oOiBSZW5hbWVkIGZyb20gc3BjLXNvbDIuaC4KKwkqIHNwYXJjL3htLXNvbDIuaDogUmVuYW1lZCBmcm9tIHhtLXNwYy1zb2wyLmguCisJKiBzcGFyYy94bS1zeXN2NC5oOiBSZW5hbWVkIGZyb20geG0tc3BjdjQuaC4KKwkqIHNwYXJjL3N5c3Y0Lmg6IFJlbmFtZWQgZnJvbSBzcGFyY3Y0LmguCisJKiBzcGFyYy94LXN5c3Y0OiBSZW5hbWVkIGZyb20geC1zcGFyY3Y0LgorCSogc3BhcmMvKi5oOiBVc2UgbmV3IGZpbGUgbmFtZXMgZm9yIGluY2x1ZGVkIHNwYXJjIGZpbGVzLgorCisJKiBjb25maWcvaTg2MDogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAoaTg2MCk6IGk4NjAgY29uZmlndXJhdGlvbiBmaWxlcyBtb3ZlZCB0aGVyZS4KKwkqIGk4NjAvYnNkLmg6IFJlbmFtZWQgZnJvbSBpODYwYi5oLgorCSogaTg2MC9ic2QtZ2FzLmg6IFJlbmFtZWQgZnJvbSBpODYwYmcuaC4KKwkqIGk4NjAvbWFjaC5oOiBSZW5hbWVkIGZyb20gaTg2MG1hY2guaC4KKwkqIGk4NjAvc3lzdjMuaDogUmVuYW1lZCBmcm9tIGk4NjB2My5oLgorCSogaTg2MC9zeXN2NC5oOiBSZW5hbWVkIGZyb20gaTg2MHY0LmguCisJKiBpODYwL3htLXN5c3YzLmg6IFJlbmFtZWQgZnJvbSB4bS1pODZ2My5oLgorCSogaTg2MC94bS1zeXN2NC5oOiBSZW5hbWVkIGZyb20geG0taTg2djQuaC4KKwkqIGk4NjAveC1zeXN2MzogUmVuYW1lZCBmcm9tIHgtaTg2MHYzLgorCSogaTg2MC94LXN5c3Y0OiBSZW5hbWVkIGZyb20geC1pODYwdjQuCisJKiBpODYwLyouaDogVXNlIG5ldyBmaWxlIG5hbWVzIGZvciBpbmNsdWRlZCBpODYwIGZpbGVzLgorCisJKiBtNjhrL3R0aTY4ay5oOiBEZWxldGVkLgorCSogaTM4Ni94LXhlbml4OiBEZWxldGVkLgorCSogaTg2MC9pODYwZzMuaDogRGVsZXRlZC4KKworVHVlIEphbiAgNSAyMzo1NDozNiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIGNvbmZpZy9wYTogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZy9wYS8qLmg6IEhhbmRsZSBQQSBjb25maWd1cmF0aW9uIGZpbGVzIGluIG5ldworCXN1YmRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAocGEpOiBMaWtld2lzZS4KKworVHVlIEphbiAgNSAyMzozMTozNCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGVseHNpLCBnbWljcm8sIHRhaG9lLCB3ZTMyaywgc3B1cjogTmV3IHN1YmRpcnM7IGZpbGVzIG1vdmVkLgorCisJKiBjb25maWcvaGFycmlzLmg6IEluY2x1ZGUgdGFob2UuaCBmcm9tIHRhaG9lLyBzdWJkaXIuCisKK1R1ZSBKYW4gIDUgMjE6NDU6NTYgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlcyAoWG11LmgpOiBBZGQgbWlzc2luZyAke0xJQn0vLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFBhc3MgTlVMTF9SVFggdG8gSU5JVF9DVU1VTEFUSVZFX0FSR1MuCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBQYXNzIE5VTExfUlRYIHRvIElOSVRfQ1VNVUxBVElWRV8qLgorCSogZXhwci5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IFBhc3MgTlVMTF9UUkVFIHRvIElOSVRfQ1VNVUxBVElWRV9BUkdTLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kaXIpOiBPbmx5IG1ha2UgaW5jbHVkZWRpciBvbmNlLgorCisJKiBjY2NwLmMgKGRvX2xpbmUpOiBBZGQgcGVkYW50aWMgd2FybmluZ3MgZm9yIG91dCBvZiByYW5nZSBsaW5lCisJbnVtYmVycywgYW5kIG5vbi1zcGFjZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaWxlbmFtZS4KKworVHVlIEphbiAgNSAxNTowOToyOSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy9ic2QtNC1nZGIuaDogUmVuYW1lZCBmcm9tIG1pcHMtZ2JzZC5oLgorCSogbWlwcy9ic2QtNC5oOiBSZW5hbWVkIGZyb20gbWlwcy1ic2QuaC4KKwkqIG1pcHMvYnNkLTUtZ2RiLmg6IFJlbmFtZWQgZnJvbSBtaXBzLTVnYnNkLmguCisJKiBtaXBzL2JzZC01Lmg6IFJlbmFtZWQgZnJvbSBtaXBzLTVic2QuaC4KKwkqIG1pcHMvZGVjLWdvc2YxLmg6IFJlbmFtZWQgZnJvbSBkZWMtZ29zZjEuaC4KKwkqIG1pcHMvZGVjLW9zZjEuaDogUmVuYW1lZCBmcm9tIGRlYy1vc2YxLmguCisJKiBtaXBzL2lyaXMzLWdkYi5oOiBSZW5hbWVkIGZyb20gaXJpc2dkYi5oLgorCSogbWlwcy9pcmlzMy5oOiBSZW5hbWVkIGZyb20gaXJpcy5oLgorCSogbWlwcy9pcmlzNC1nZGIuaDogUmVuYW1lZCBmcm9tIGlyaXM0Zy5oLgorCSogbWlwcy9pcmlzNC5oOiBSZW5hbWVkIGZyb20gaXJpczQuaC4KKwkqIG1pcHMvbWlwcy00LWdkYi5oOiBSZW5hbWVkIGZyb20gbWlwcy1nZGIuaC4KKwkqIG1pcHMvbWlwcy01LWdkYi5oOiBSZW5hbWVkIGZyb20gbWlwcy01Z2RiLmguCisJKiBtaXBzL21pcHMtNS1nZGIuaDogUmVuYW1lZCBmcm9tIG1pcHMtZzUuaC4KKwkqIG1pcHMvbWlwcy01Lmg6IFJlbmFtZWQgZnJvbSBtaXBzLTUuaC4KKwkqIG1pcHMvbWlwcy5jOiBSZW5hbWVkIGZyb20gbWlwcy5jLgorCSogbWlwcy9taXBzLmg6IFJlbmFtZWQgZnJvbSBtaXBzLmguCisJKiBtaXBzL21pcHMubWQ6IFJlbmFtZWQgZnJvbSBtaXBzLm1kLgorCSogbWlwcy9uZXdzNC1nZGIuaDogUmVuYW1lZCBmcm9tIG1pcHMtZ25ld3MuaC4KKwkqIG1pcHMvbmV3czQuaDogUmVuYW1lZCBmcm9tIG1pcHMtbmV3cy5oLgorCSogbWlwcy9uZXdzNS1nZGIuaDogUmVuYW1lZCBmcm9tIG1pcHMtZ241LmguCisJKiBtaXBzL25ld3M1Lmg6IFJlbmFtZWQgZnJvbSBtaXBzLW41LmguCisJKiBtaXBzL253czMyNTB2NC5oOiBSZW5hbWVkIGZyb20gbndzMzI1MHY0LmguCisJKiBtaXBzL29zZnJvc2UuaDogUmVuYW1lZCBmcm9tIGRlY3Jvc2UuaC4KKwkqIG1pcHMvc3ZyMy00LWdkYi5oOiBSZW5hbWVkIGZyb20gbWlwcy1nc3lzdi5oLgorCSogbWlwcy9zdnIzLTQuaDogUmVuYW1lZCBmcm9tIG1pcHMtc3lzdi5oLgorCSogbWlwcy9zdnIzLTUtZ2RiLmg6IFJlbmFtZWQgZnJvbSBtaXBzLTVnc3lzdi5oLgorCSogbWlwcy9zdnIzLTUuaDogUmVuYW1lZCBmcm9tIG1pcHMtNXN5c3YuaC4KKwkqIG1pcHMvc3ZyNC00LWdkYi5oOiBSZW5hbWVkIGZyb20gbWlwcy1nc3ZyNC5oLgorCSogbWlwcy9zdnI0LTQuaDogUmVuYW1lZCBmcm9tIG1pcHMtc3ZyNC5oLgorCSogbWlwcy9zdnI0LTUtZ2RiLmg6IFJlbmFtZWQgZnJvbSBtaXBzLTVnNC5oLgorCSogbWlwcy9zdnI0LTUuaDogUmVuYW1lZCBmcm9tIG1pcHMtNXN2cjQuaC4KKwkqIG1pcHMvdC1taXBzOiBSZW5hbWVkIGZyb20gdC1taXBzLgorCSogbWlwcy90LW9zZnJvc2U6IFJlbmFtZWQgZnJvbSB0LWRlY3Jvc2UuCisJKiBtaXBzL3QtdWx0cml4OiBSZW5hbWVkIGZyb20gdC1kZWNzdGF0bi4KKwkqIG1pcHMvdWx0cml4LWdkYi5oOiBSZW5hbWVkIGZyb20gZGVjc3RhYnMuaC4KKwkqIG1pcHMvdWx0cml4Lmg6IFJlbmFtZWQgZnJvbSBkZWNzdGF0bi5oLgorCSogbWlwcy94LWRlYy1vc2YxOiBSZW5hbWVkIGZyb20geC1kZWMtb3NmMS4KKwkqIG1pcHMveC1taXBzOiBSZW5hbWVkIGZyb20geC1taXBzLgorCSogbWlwcy94LW53czMyNTB2NDogUmVuYW1lZCBmcm9tIHgtbndzMzI1MHY0LgorCSogbWlwcy94LW9zZnJvc2U6IFJlbmFtZWQgZnJvbSB4LWRlY3Jvc2UuCisJKiBtaXBzL3gtc3lzdjogUmVuYW1lZCBmcm9tIHgtbWlwc3YuCisJKiBtaXBzL3gtdWx0cml4OiBSZW5hbWVkIGZyb20geC1kZWNzdGF0bi4KKwkqIG1pcHMveG0taXJpczMuaDogUmVuYW1lZCBmcm9tIHhtLWlyaXMuaC4KKwkqIG1pcHMveG0taXJpczQuaDogUmVuYW1lZCBmcm9tIHhtLWlyaXg0LmguCisJKiBtaXBzL3htLW1pcHMuaDogUmVuYW1lZCBmcm9tIHhtLW1pcHMuaC4KKwkqIG1pcHMveG0tbmV3cy5oOiBSZW5hbWVkIGZyb20geG0tbWlwc25ld3MuaC4KKwkqIG1pcHMveG0tc3lzdi5oOiBSZW5hbWVkIGZyb20geG0tdW1pcHMuaC4KKworCSogbWlwcy8qIE1vZGlmeSBpbmNsdWRlIGZpbGVzIGFzIG5lZWRlZCBmb3IgdGhlIE1JUFMgZmlsZXMgYmVpbmcKKwlpbiB0aGUgY29uZmlnL21pcHMgc3ViZGlyZWN0b3J5LgorCisJKiBoYWxmcGljLmgsIGhhbGZwaWMuYzogRWxpbWluYXRlIHVua25vd24gc3ltYm9sIGVycm9ycyB3aGVuCisJbGlua2luZyB0aGUgZ2VuKiBwcm9ncmFtcyBmb3Ige2kzODYsZGVjfSBPU0Yvcm9zZSwgYnkgdXNpbmcgQlNTCisJdmFyaWFibGVzIGluc3RlYWQgb2YgZXh0ZXJuLgorCitUdWUgSmFuICA1IDAwOjI5OjQ1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY19zaXplb2YpOiBDYWxsIGZvcmNlX2ZpdF90eXBlIG9ubHkgZm9yIElOVEVHRVJfQ1NULgorCisJKiBvYmpjL2NvcmUuYyAoX29iamNfYWxsb2MpOiBSZW5hbWVkIGZyb20gX2FsbG9jLgorCShfb2JqY19kZWFsbG9jLCBfb2JqY19yZWFsbG9jLCBfb2JqY19jb3B5LCBfb2JqY19lcnJvcik6IExpa2V3aXNlLgorCSogb2JqYy9vYmpjLmg6IERlY2xzIHJlbmFtZWQgYWxzby4KKwkqIG9iamMvb2JqYy1wcm90by5oOiBVc2VzIHJlbmFtZWQgYWxzby4KKworCSogY29uZmlnLnN1YiAoJG9zIGFsdGVybmF0aXZlcyBmb3Igc2NvIGFuZCBpc2MpOiAKKwlQcmVzZXJ2ZSB0aGUgc3BlY2lmaWVkIG9zIHZlcnNpb24gaWYgYW55LgorCUVhY2ggYWx0ZXJuYXRpdmUgaGFuZGxlcyBib3RoIDM4NiBhbmQgNDg2LCBwcmVzZXJ2aW5nIGRpc3RpbmN0aW9uLgorCSgkYmFzaWNfbWFjaGluZSBhbHRlcm5hdGl2ZXMgZm9yIHNjbyBhbmQgaXNjKTogRGVsZXRlZC4KKwkoaVszNF04NnYzMiwgaVszNF04NnYsIGlbMzRdODZ2NCk6CisJSGFuZGxlIGJvdGggY3B1cyB0b2dldGhlciwgcHJlc2VydmluZyBkaXN0aW5jdGlvbi4KKworTW9uIEphbiAgNCAyMDo1OTozNyAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGNvbmZpZy9uczMyazogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAobnMzMmspOiBuczMyayBjb25maWd1cmF0aW9uIGZpbGVzIG1vdmVkIHRoZXJlLgorCisJKiBuczMyay8qLmg6IFVzZSBuZXcgZmlsZSBuYW1lcyBmb3IgaW5jbHVkZWQgbnMzMmsgZmlsZXMuCisKKwkqIGNvbmZpZy9tNjhrOiBOZXcgZGlyZWN0b3J5LgorCSogY29uZmlndXJlIChtNjhrKTogbTY4ayBjb25maWd1cmF0aW9uIGZpbGVzIG1vdmVkIHRoZXJlLgorCisJKiBtNjhrL3Nncy5oOiBSZW5hbWVkIGZyb20gbTY4a3Nncy5oLgorCisJKiBtNjhrLyouaDogVXNlIG5ldyBmaWxlIG5hbWVzIGZvciBpbmNsdWRlZCBtNjhrIGZpbGVzLgorCitNb24gSmFuICA0IDE4OjA2OjMxIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKGkzODYtb3Nmcm9zZSk6IFJlbmFtZSBpMzg2IE9TRi9yb3NlIGZpbGVzIHRvCisJb3Nmcm9zZS5oLCB0LW9zZnJvc2UuaCwgYW5kIHgtb3Nmcm9zZS5oLgorCisJKiBpMzg2L29zZnJvc2UuaDogUmVuYW1lZCBmcm9tIGkzODYvcm9zZS5oLgorCSogaTM4Ni90LW9zZnJvc2U6IFJlbmFtZWQgZnJvbSBpMzg2L3Qtcm9zZS4KKwkqIGkzODYveC1vc2Zyb3NlOiBSZW5hbWVkIGZyb20gaTM4Ni94LXJvc2UuCisKK01vbiBKYW4gIDQgMTE6MDM6MTEgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24taGVhZGVycyk6IFBpcGUgZ3JlcCBvdXRwdXQgdG8gL2Rldi9udWxsLgorCitNb24gSmFuICA0IDAxOjEyOjQ4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaTM4Ni9ic2QuaCAoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMLCBBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKToKKwlBbHRlcm5hdGUgZGVmaW5pdGlvbnMgaWYgTk9fVU5ERVJTQ09SRVMuCisKKwkqIGMtcGFyc2UuaW4gKGNvbXBvbmVudF9kZWNsYXJhdG9yKToKKwlBbGxvdyBhdHRyaWJ1dGUgYWZ0ZXIgbmFtZWxlc3MgZmllbGQuCisKKwkqIGZpeGluY2x1ZGVzIChtYWtpbmcgZGlycyBhbmQgbGlua3MpOiBJZiB3ZSBhbHJlYWR5IG1hZGUgc3ViZGlycworCWZvciBhIGRpciBmb28gYW5kIGZvbyB0dXJucyBvdXQgdG8gYmUgYSBzeW1saW5rIG91dHNpZGUgL3Vzci9pbmNsdWRlLAorCWFmdGVyIHdlIGhhdmUgbWFkZSBhIGRpciBmb3IgaXQgaW4gLi9yb290LywgbWFrZSBzaW1pbGFyIHN1YmRpcnMgdGhlcmUuCisKK1N1biBKYW4gIDMgMDc6Mjg6MzIgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAcmVkLmNzLnVtYi5lZHUpCisKKwkqIHgtcm9tcCAoQ0MpOiBBZGQgLXcuCisKK1N1biBKYW4gIDMgMjE6MTk6NTAgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04pOiBEZWZpbmUuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSwgY2xhdXNlIGZvciBgaWYgKGZvbykgYisrJyk6CisJRG8gdGhpcyByZWdhcmRsZXNzIG9mIEJSQU5DSF9DT1NUIGlmIEhBVkVfaW5jc2NjIGlzIGRlZmluZWQuCisJKiBwYS5tZCAoc2NjIGluc24pOiBOYW1lIHRoaXMgcGF0dGVybiAic2NjIi4KKwkobmVnc2NjLCBpbmNzY2MsIGNtb3YpOiBOZXcgcGF0dGVybnMuCisJKiBwYS5jIChpbmNzY2Nfb3BlcmF0b3IpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHBhLmggKGFjdHVhbF9mc2l6ZSwgYXBwYXJlbnRfZnNpemUpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlcy4KKworU3VuIEphbiAgMyAyMDozNzo1NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFpbik6IFJlY29nbml6ZSBhbmQgcmVtb3ZlIC5jeHggYXMgZmlsZW5hbWUgc3VmZml4LgorCitTdW4gSmFuICAzIDE5OjM5OjE4IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IEJ1bXAgTWVpc3NuZXIgdmVyc2lvbiBudW1iZXIgdG8gMzQuCisKKwkqIG1pcHMuYyAoc2F2ZV9yZXN0b3JlX2luc25zKTogRG9uJ3QgZ2l2ZSBhbiBlcnJvciBpZiBzYXZpbmcgYW4gRlAKKwlyZWdpc3RlciBhdCBzdGFjayBvZmZzZXQgMCwgd2hpY2ggb2NjdXJzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGEKKwlsZWFmIGZ1bmN0aW9uIHRoYXQgdXNlcyBsb3RzIG9mIEZQIHJlZ2lzdGVycywgYW5kIHNhdmVzIG5vIEdQCisJcmVnaXN0ZXJzLgorCitTdW4gSmFuICAzIDE5OjAwOjI5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogR2VuZXJhbGl6ZSB0eWluZyBzbyB3ZSBjYW4gdGllCisJYW55IG9wZXJhbmQgd2l0aCB0aGUgb3V0cHV0IHVubGVzcyBzb21lIG9wZXJhbmQgbXVzdCBiZSBpbiB0aGUKKwlzYW1lIHJlZ2lzdGVyIGFzIHRoZSBvdXRwdXQsIGluIHdoaWNoIGNhc2Ugb25seSB0cnkgdHlpbmcgdGhhdAorCW9wZXJhbmQuCisKKwkqIHJ0bC5jIChydHhfYWxsb2MpOiBDbGVhciBjb21tb24gYXJlYSBvZiBydHggaW4gYSBwb3J0YWJsZSBtYW5uZXIuCisKK1N1biBKYW4gIDMgMTM6NTc6MzMgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChDT05TVF9DT1NUUyk6IE1ha2UgQ09OU1RfRE9VQkxFUyB2ZXJ5IGV4cGVuc2l2ZS4KKwlHaXZlIEhJR0ggZXhwcmVzc2lvbnMgYSBzbWFsbCBjb3N0IHdpdGggQ09OU1QsIFNZTUJPTF9SRUYsCisJYW5kIExBQkVMX1JFRiBiZWluZyB0d2ljZSBhcyBleHBlbnNpdmUgYXMgSElHSC4KKworCSogcGEubWQgKGZtcHlhZGQgcGVlcGhvbGVzKTogTmV3IHBlZXBob2xlcyB0byBpc3N1ZSBpbmRlcGVuZGVudAorCWZsb2F0aW5nIHBvaW50IG11bHRpcGx5IGFuZCBhZGQgaW5zdHJ1Y3Rpb25zIGF0IHRoZSBzYW1lIHRpbWUuCisJKGZtcHlzdWIgcGVlcGhvbGVzKTogTGlrZXdpc2UgZm9yIG11bHRpcGx5IGFuZCBzdWJ0cmFjdCBpbnN0cnVjdGlvbnMuCisJKiBwYS5jIChmbXB5YWRkb3BlcmFuZHMpOiBWZXJpZnlzIGdpdmVuIHJlZ2lzdGVycyBhcmUgc3VpdGFibGUgZm9yCisJdXNlIGluIGZtcHlhZGQgaW5zdHJ1Y3Rpb25zLgorCShmbXB5c3Vib3BlcmFuZHMpOiBMaWtld2lzZSwgYnV0IGZvciBmbXB5c3ViIGluc3RydWN0aW9ucy4KKworCVdlZCBPY3QgMjggMTI6MDc6NTQgMTk5MiAgVGltIE1vb3JlICAobW9vcmUgYXQgZGVmbWFjcm8uY3MudXRhaC5lZHUpCisJKiBwYS5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IElmIGZsYWdfcGljLCBlbWl0IHJlc3RvcmUgb2YgUElDIHRhYmxlCisJcmVnaXN0ZXIuCisJKGNhbGxfaW50ZXJhbCwgY2FsbF92YWx1ZV9pbnRlcm5hbCk6IE5hbWUgbWF0Y2hpbmcgaW5zbnMuCisJKG1vdnNpLCBtb3ZoaSwgbW92cWksIG1vdmRpLCBtb3ZzZiwgbW92ZGYgcGF0dGVybnMpOiBEb24ndAorCW1hdGNoIG1lbW9yeSB0byBtZW1vcnkgbW92ZXMuCisKKwkqIHBhLmggKEZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IHIzIGlzbid0IGZpeGVkIQorCShSRUdfQUxMT0NfT1JERVIpOiBNb3ZlIHIzIHVwIGluIHRoZSBhbGxvY2F0aW9uIG9yZGVyLgorCShIQVZFX0FURVhJVCk6IERlZmluZS4KKwkoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IGNvbXB1dGVfZnJhbWVfc2l6ZSAoKQorCW5vdyBkb2VzIHRoZSB3aG9sZSBjYWxjdWxhdGlvbiwgaW5jbHVkaW5nIHJvdW5kaW5nLgorCShGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUpOiBEb24ndCBwYXNzIGxlYWZfZnVuY3Rpb24KKwl0byBvdXRwdXRfZnVuY3Rpb25fe3Byb2xvZ3VlLGVwaWxvZ3VlfS4KKwkoREVMQVlfU0xPVFNfRk9SX0VQSUxPR1VFKTogQ2FsbCBocHBhX2VwaWxvZ3VlX2RlbGF5X3Nsb3RzICgpLgorCisJKiBwYS5jIChocHBhX3NhdmVfcGljX3RhYmxlX3J0eCk6IE5ldyB2YXJpYWJsZS4KKwkoZmluYWxpemVfcGljKTogU2V0dXAgaHBwYV9zYXZlX3BpY190YWJsZV9ydHguLgorCShhcHBhcmVudF9mc2l6ZSk6IERlbGV0ZSB2YXJpYWJsZS4KKwkoY29tcHV0ZV9mcmFtZV9zaXplKTogTWFueSBjaGFuZ2VzLiBSZXR1cm4gdGhlIHRvdGFsIGZyYW1lIHNpemUsCisJaW5jbHVkaW5nIHNwYWNlIGZvciAibWFnaWMiIHN0dWZmIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFuZCBhbnkKKwlyb3VuZGluZyBmb3IgdGhlIFNuYWtlLgorCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBEb24ndCB0YWtlIGEgbGVhZl9mdW5jdGlvbiBhcmd1bWVudDsKKwlEZWNpZGUgdGhhdCBiYXNlZCBvbiBmcmFtZSBzaXplIGFuZCBmcmFtZV9wb2ludGVyX25lZWRlZC4KKwlEb24ndCBlbWl0IGFueSBmcmFtZSBkaWRkbGluZyBjb2RlIGlmIGFjdHVhbF9mc2l6ZSBpcyAwLgorCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBEb24ndCB0YWtlIGxlYWZfZnVuY3Rpb24gYXJndW1lbnQuCisJRG9uJ3QgZG8gYW55dGhpbmcgaWYgbm8gZnJhbWUuCisJS2VlcCBzdGFjayBwb2ludGVyIGFsaWduZWQgdG8gNjQgYnl0ZXMgYmVmb3JlIGxvYWRpbmcgZnJvbSBvbGQKKwlmcmFtZSBwb2ludGVyLgorCShocHBhX2VwaWxvZ3VlX2RlbGF5X3Nsb3RzKTogT25seSBpZiB0aGVyZSBpcyBubyBmcmFtZSB3aWxsIHdlCisJaGF2ZSBhbiBlbXB0eSBkZWxheSBzbG90IHRvIGZpbGwuCisJKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IERvbid0IGNoZWNrICJsZWFmX2Z1bmN0aW9uIiBhbnltb3JlLgorCitTdW4gSmFuICAzIDA3OjI4OjI5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy5jIChwdXRlbnZfZnJvbV9wcmVmaXhlcyk6IFVzZSBQQVRIX1NFUEFSQVRPUi4KKwlQcm9wZXJseSB1c2UgSlVTVF9NQUNISU5FX1NVRkZJWCB3aGVuIGRlc2lyZWQ7IGFsd2F5cyBtYWtlIHBhdGgKKwl0aGUgc2FtZSBhcyBmaW5kX2FfZmlsZSB3aWxsIHVzZS4KKworU2F0IEphbiAgMiAxNjozNTo1NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IFRyYW5zbGF0ZSBzdW5vczUgdG8gc29sYXJpczIsIGFuZCBzb2xhcmlzMSB0byBzdW5vczQuCisKKwkqIHRyZWUuYywgdHJlZS5oIChpbnRfc2l6ZV9pbl9ieXRlcyk6IENoYW5nZSByZXQgdHlwZSBiYWNrIHRvIGludC4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEb24ndCB1c2UgaW50X3NpemVfaW5fYnl0ZXMKKwlmb3IgYSB2YXJpYWJsZS1zaXplIG9iamVjdC4KKworU2F0IEphbiAgMiAxNToxNjoyNCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKGxhYmVsKTogVXNlIGV4cHJfbm9fY29tbWFzIGluc3RlYWQgb2YgZXhwciBmb3IgY2FzZQorCWxhYmVscy4KKworU2F0IEphbiAgMiAwMzozMDoxMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChnY2Mubyk6IERlZmluZSBUT09MRElSX0JBU0VfUFJFRklYLgorCisJKiBnY2MuYyAoVE9PTERJUl9QUkVGSVgpOiBEZWZpbmUgaWYgbm90IGRlZmluZWQuCisJKHRvb2xkaXJfcHJlZml4LCB0b29sZGlyX2Jhc2VfcHJlZml4KTogTmV3IHZhcmlhYmxlcy4KKwkobWFpbik6IFNldCB0b29sZGlyX3ByZWZpeC4KKwlBZGQgaXQgKHBsdXMgYGJpbicgb3IgYGxpYicpIHRvIHNlYXJjaCBwYXRocy4KKworCSogY2NjcC5jIChkZWZhdWx0X2luY2x1ZGUpOiBMb29rIGRpcmVjdGx5IGluIFRPT0xfSU5DTFVERV9ESVIuCisJKiBwcm90b2l6ZS5jIChkZWZhdWx0X2luY2x1ZGUpOiBMaWtld2lzZS4KKworCSogY29sbGVjdDIuYyAobWFpbik6IExvb2sgZm9yIGByZWFsLWxkJyBhZnRlciBgZ2xkJywgYmVmb3JlIGBsZCcuCisJSW4gZGVidWcgcHJpbnRvdXQsIGZpeCB0eXBvIGluIHByZXYgY2hhbmdlLgorCitGcmkgSmFuIDEgMTM6MzI6MzYgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoY2NjcC5vLCBwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOgorCURlZmluZSBUT09MX0lOQ0xVREVfRElSIGFzICQodG9vbGRpcikvaW5jbHVkZS4KKwkodGVzdC1wcm90b2l6ZS1zaW1wbGUpOiBEZWZpbmUgVE9PTF9JTkNMVURFX0RJUiBhcyAwLgorCisJKiBjb25maWcvaTM4Ni9saW51eC5oIChTVEFSVEZJTEVfU1BFQyk6IFJlbW92ZWQgLUwiVE9PTERJUiIvbGliLgorCitGcmkgSmFuICAxIDA2OjI2OjExIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbGxlY3QyLmM6IExvb2sgZm9yIHRvb2xzIHVzaW5nIHBhdGhzIHJhdGhlciB0aGFuIGEgc2luZ2xlIHByZWZpeC4KKwkoc3RydWN0IHByZWZpeF9saXN0LCBzdHJ1Y3QgcGF0aF9wcmVmaXgpOiBOZXcgc3RydWN0dXJlcy4KKwkoY3BhdGgsIHBhdGgpOiBOZXcgdmFyaWFibGVzLgorCShmaW5kX2FfZmlsZSwgYWRkX3ByZWZpeCk6IE5ldyBmdW5jdGlvbnM7IHNpbXBsaWZpZWQgdmVyc2lvbnMgb2YKKwlmdW5jdGlvbnMgZnJvbSBnY2MuYy4KKwkocHJlZml4X2Zyb21fZW52KTogTmV3IGZ1bmN0aW9uLgorCShtYWluKTogR2V0IHBhdGggdG8gc2VhcmNoIGZvciBiaW5hcmllcyBmcm9tIENPTVBJTEVSX1BBVEgKKwllbnZpcm9ubWVudCB2YXJpYWJsZSBhbHdheXMgc2V0IGJ5IGdjYy5jIGFuZCBmcm9tIFBBVEguCisJUXVhbGlmeSBuYW1lcyB3aXRoIHRhcmdldCBtYWNoaW5lIGluIGNyb3NzLWVudmlyb25tZW50IHVubGVzcworCXVzaW5nIGNvbXBpbGVyIGRpcmVjdG9yaWVzLgorCVVzZSBmaW5kX2FfZmlsZSB0byBmaW5kIG91ciBiaW5hcmllcy4KKwlSZW1vdmUgdXNlIG9mIHNpbmdsZSBwcmVmaXguCisJSWYgLWRlYnVnLCBwcmludCBzdHJpcF9maWxlX25hbWUuCisJKGZvcmtfZXhlY3V0ZSk6IFByaW50IHByb2dyYW0gd2UgYXJlIHRyeWluZyB0byBleGVjdXRlIGlmIC1kZWJ1ZyBhbmQKKwl3ZSBjYW4ndCBmaW5kIHRoZSBmaWxlLgorCShzY2FuX3Byb2dfZmlsZSk6IENvbXBsYWluIGlmIGNhbid0IGZpbmQgTk0uCisJKiBNYWtlZmlsZS5pbiAoUkVBTF9MRF9OQU1FKTogTmV3IHZhcmlhYmxlLgorCShjb2xsZWN0Mi5vKTogRG9uJ3QgbmVlZCBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYLCBldGMuCisJKGluc3RhbGwtY3Jvc3MtdG9vbHMpOiBVc2UgUkVBTF9MRF9OQU1FIGluc3RlYWQgb2YgYGxkJyB3aGVuIGxpbmtpbmcKKwlmaWxlcyBmcm9tIHRvb2xkaXIgdG8gbGlic3ViZGlyLgorCitGcmkgSmFuICAxIDE3OjUxOjA1IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wsIFRZUEVfREVDTCBjYXNlKTogRG9uJ3Qgb3V0cHV0IHRhZyB3aGljaAorCXJlZmVyZW5jZXMgaW5jb21wbGV0ZSB0eXBlLgorCisJKiBmaXhpbmNsdWRlcyAoc3Vud2luZG93L3t3aW5fY3Vyc29yLmgsd2luX2xvY2suaH0pOiBDaGFuZ2UgaW52YWxpZAorCSNpZmRlZiBpZGVudGlmaWVyIGBlY2QuY3Vyc29yJyB0byBgZWNkX2N1cnNvcicuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IEFkZCAncmlnaHQnIGFuZCAnbGVmdCcgdG8gc2hpZnQKKwljb3VudCB3YXJuaW5ncyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gZWFjaCBvdGhlci4KKworCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfaW5zbik6ICBVcGRhdGUgbGFzdF9wYXJtX2luc24gd2hlbgorCWluc25zIGFyZSBvdXRwdXQgYWZ0ZXIgaXQgdG8gZml4IGl0IHVwLgorCisJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogRGlzdGluZ3Vpc2ggc29tZSBDIGludGVnZXIgdHlwZXMgYnkgbmFtZS4KKworCSogTWFrZWZpbGUuaW4gKE1BS0VJTkZPKTogTmV3IHZhcmlhYmxlLCBkZWZpbmVkIHRvIGBtYWtlaW5mbycuCisKKwkqIHJzNjAwMC5oIChBU01fRklMRV9TVEFSVCk6IFN3aXRjaCB0byB0ZXh0IHNlY3Rpb24gYXQgZW5kLgorCU91dHB1dCBkZWNsYXJhdGlvbiBmb3IgLm1jb3VudCB3aGVuIHByb2ZpbGluZy4KKworRnJpIEphbiAgMSAxMjoxNTo0MiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChtb3ZxaSwgbW92aGksIG1vdnNpLCBtb3ZkaSwgbW92c2YsIG1vdmRmKTogRml4IGF0dHJpYnV0ZXMKKwl3aGljaCBpbnZvbHZlIGZwPC0+Z3IgY29waWVzIHRvIG1hdGNoIGN1cnJlbnQgcmVhbGl0eS4KKwkoaW5kZXhlZCBsb2Fkcyk6IFRoZXNlIHNob3VsZCBoYXZlICJsb2FkIiBhdHRyaWJ1dGVzLCBub3QgIm1vdmUiLgorCisJKiBwYS5jIChvdXRwdXRfZmxvYXRzaXNmLCBvdXRwdXRfZmxvYXRzaWRmKTogQWJvcnQgaWYgcHJlc2VudGVkCisJd2l0aCBhIGdlbmVyYWwgcmVnaXN0ZXIuCisJKiBwYS5tZCAobW92ZGYgY29uc3RfY291YmxlKTogRml4IGxlbmd0aHMuCisJKGZsb2F0c2lzZiBwYXR0ZXJucyk6IExpa2V3aXNlLgorCShmbG9hdHNpZGYgcGF0dGVybnMpOiBMaWtld2lzZS4KKworCSogcGEuaCAoUkVHSVNURVJfTU9WRV9DT1NUKTogTWFrZSBtb3ZpbmcgYmV0d2VlbiBGUCBhbmQgbm9uLUZQIAorCXJlZ2lzdGVycyBtb3JlIGV4cGVuc2l2ZS4KKworCSogcGEuaCAoVEFSR0VUX05PX0JTUyk6IERlbGV0ZSB0YXJnZXQgc3dpdGNoLiAgRGVsZXRlIGFsbCByZWZlcmVuY2VzLgorCitGcmkgSmFuICAxIDA3OjQwOjU4IDE5OTMgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWcvbTg4azogTmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAobTg4ayopOiBGaWxlcyBhcmUgbm93IGluIGNvbmZpZy9tODhrLgorCSogbTg4ay9kZ3V4LmgsIG04OGsvZG9scGguaCwgbTg4ay9sdW5hLmgsIG04OGsvc3lzdjMuaCwKKwltODhrL3N5c3Y0LmgsIG04OGsveG0tc3lzdjMuaDogSW5jbHVkZSBmaWxlcyBpbiBtODhrLgorCSogbTg4ay90LWRndXgsIG04OGsvdC1tODhrLCBtODhrL3QtbTg4aywgbTg4ay90LXN5c3Y0OiBVc2UKKwltODhrL204OGstbW92ZS5zaC4KKworVGh1IERlYyAzMSAxNzozODo0MyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBQcm9wYWdhdGUgZmFpbHVyZSBmcm9tIHJlY3Vyc2l2ZSBjYWxscy4KKworCSogaTM4Ni8zODZic2QuaCAocGVyZm9ybV8qKTogUmVuYW1lIG1hY3JvIGFyZ3MgdG8gYXJnMCwgYXJnMS4KKworVGh1IERlYyAzMSAxNTo0MjozNSAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKHNjaGVkX2FuYWx5emVfMSwgc2NoZWRfYW5hbHl6ZV8yKTogSWYgYmVmb3JlIHJlbG9hZGluZywKKwlyZWNvcmQgZGVwZW5kZW5jZXMgdGhhdCBtYXkgYmUgaW50cm9kdWNlZCBieSByZWxvYWQgc3Vic3RpdHV0aW5nCisJZXF1aXZhbGVudHMgZm9yIHBzZXVkbyByZWdpc3RlcnMuCisKKwkqIHNjaGVkLmMgKHNjaGVkX2FuYWx5emVfMik6IFVzZSBSRUdfTk9URV9LSU5EIG5vdCBHRVRfTU9ERSBpbgorCWFkZF9kZXBlbmRlbmNlIGNhbGwuCisJKHNjaGVkX2FuYWx5emVfaW5zbik6IExpa2V3aXNlLgorCisJKiBzcGFyYy5oIChMSUJfU1BFQyk6IFdoZW4gLWEsIGluY2x1ZGUgYmJfbGluay5vLgorCisJKiB0LXNvbDIgKGdtb24ubywgY3J0Ki5vKTogQ2hhbmdlIGNvbmZpZyB0byAkKHNyY2RpcikvY29uZmlnLgorCisJKiByZWxvYWQuYyAob3BlcmFuZHNfbWF0Y2hfcCk6IEZvciBXT1JEU19CSUdfRU5ESUFOIG1hY2hpbmVzLAorCW1ha2UgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmFuZHMgZXF1aXZhbGVudCBpZiB0aGUgbGFzdCByZWdpc3RlciBvZgorCXRoZSBncm91cHMgYXJlIHRoZSBzYW1lLgorCShzdWJzdF9yZWxvYWRzKTogVXNlIGdlbl9sb3dwYXJ0X2NvbW1vbiB0byBjaGFuZ2UgbW9kZSBvZgorCXJlbG9hZHJlZy4KKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBMaWtld2lzZS4KKworCSogcmVsb2FkMS5jIChnZW5faW5wdXRfcmVsb2FkKTogIEFsc28gaGFuZGxlIFBMVVMgb2YgYSBNRU0gYW5kCisJQ09OU1RBTlQgc3BlY2lhbGx5LgorCisJKiBpOTYwLmggKENQUF9TUEVDLCBDQzFfU1BFQywgQVNNX1NQRUMsIExJTktfU1BFQywKKwlUQVJHRVRfU1dJVENIRVMpOiBEZWxldGUgc3VwcG9ydCBmb3Igbm9uLWV4aXN0ZW50IENQVSB2YXJpYXRpb25zLgorCShBU01fU1BFQywgTElOS19TUEVDLCBUQVJHRVRfU1dJVENIRVMpOiBBZGQgc3VwcG9ydCBmb3IgLW1saW5rLXJlbGF4LgorCShTRUxFQ1RfQ0NfTU9ERSk6IENvcnJlY3QgdHlwby4KKworCSogc3BhcmMuYyAocHJpbnRfb3BlcmFuZCk6IEZvciBpbnZhbGlkIG9wZXJhbmRzLCBjYWxsCisJb3V0cHV0X29wZXJhbmRfbG9zc2FnZSBpbnN0ZWFkIG9mIGFib3J0aW5nLgorCisJKiBpOTYwLm1kIChjYWxsX2ludGVybmFsLCBjYWxsX3ZhbHVlX2ludGVybmFsKTogVXNlICdsJyBmb3IKKwltYXRjaF9zY3JhdGNoIGNvbnN0cmFpbnQgbm90ICdkJy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRW1pdCBjb252ZXJzaW9ucyBpbnRvIGEgc2VxdWVuY2UsIGFuZAorCXRoZW4gb3V0cHV0IHRoZSBzZXF1ZW5jZSBhZnRlciBhbGwgcGFyYW1ldGVycyBoYXZlIGJlZW4gbW92ZWQuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBDb3JyZWN0IGluZGVudGF0aW9uIG9mIGRvdWJsZXdvcmQKKwltdWx0aXBseSBwaWN0dXJlLgorCisJKiBzcGFyYy5oIChUQVJHRVRfU1dJVENIRVMpOiBIYXZlIC1tc3BhcmNsaXRlIGFsc28gY2xlYXIgVEFSR0VUX0ZQVS4KKworCSogdmEtaTk2MC5oOiBEZWZpbmUgYXdheSBfX2V4dGVuc2lvbl9fIGlmIGNvbXBpbGVkIGJ5IEdDQyB2MS4KKworCSogbGliZ2NjMi5jIChMX2J1aWx0aW5fbmV3KTogQ2hhbmdlIHRvIExfb3BfbmV3LiAgVXNlIG5ldyBzdHlsZQorCWRlZmluaXRpb24gZm9yIF9fYnVpbHRpbl9uZXcuCisJKExfY2Fwc19OZXcpOiBDaGFuZ2UgdG8gTF9uZXdfaGFuZGxlci4gIERlbGV0ZSB1bnVzZWQgZnVuY3Rpb24KKwlidWlsdGluX3ZlY19uZXcuCisJKExfYnVpbHRpbl9kZWwpOiBDaGFuZ2UgdG8gTF9vcF9kZWxldGUuICBEZWxldGUgdmZwIGRlY2xhcmF0aW9uLgorCVVzZSBuZXcgc3R5bGUgZGVmaW5pdGlvbiBmb3IgX19idWlsdGluX2RlbGV0ZS4gIERlbGV0ZSB1bnVzZWQKKwlmdW5jdGlvbiBfX2J1aWx0aW5fdmVjX2RlbGV0ZS4KKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBDaGFuZ2UgX2J1aWx0aW5fbmV3IHRvIF9vcF9uZXcuICBDaGFuZ2UKKwlfY2Fwc19OZXcgdG8gX25ld19oYW5kbGVyLiAgQ2hhbmdlIF9idWlsZGluX2RlbCB0byBfb3BfZGVsZXRlLgorCisJKiBtNjhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IC1tNjgwMzAgZG9lcyBub3QgaW1wbHkgLW02ODg4MS4KKworCSogZ2NjLmMgKGlucHV0X2Zyb21fcGlwZSk6IE5ldyB2YXJpYWJsZS4KKwkoZG9fc3BlYyk6IFNldC9jbGVhciBpbnB1dF9mcm9tX3BpcGUgYXMgYXBwcm9wcmlhdGUuICBUcmFuc2xhdGUgJXwKKwl0byAiLSIgaWYgaW5wdXRfZnJvbV9waXBlIGlzIHRydWUuCisJKiBzcGFyYy5oIChBU01fU1BFQyk6IFVzZSAlfC4KKworCSogbTY4ay5jIChzdHJpY3RfbG93X3BhcnRfcGVlcGhvbGVfb2spOiBOZXcgZnVuY3Rpb24uCisJKiBtNjhrLm1kOiBBZGQgcGVlcGhvbGUgdG8gZWxpbWluYXRlIHVuZWNlc3NhcnkgY2xlYXIgaW5zdHJ1Y3Rpb25zCisJaW4gc3RyaWN0X2xvd19wYXJ0IGluc24gc2VxdWVuY2VzLgorCisJKiBjb25maWd1cmUgKGVseHNpKTogTW92ZSBpdCBvdXQgb2YgdGhlIG1pZGRsZSBvZiB0aGUgc3BhcmMgc2VjdGlvbi4KKworCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5LCBKVU1QX0lOU04gY2FzZSk6IERvIG1hcCB0aGUgYm9keSBvZgorCXRoZSBsb29wIGJyYW5jaCBiYWNrLCB0aGVuIHJld3JpdGUgaXQgdG8ganVtcCBwYXN0IHRoZSBlbmQgb2YgdGhlCisJdW5yb2xsZWQgbG9vcC4KKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogQ2hlY2sgVFJFRV9QVUJMSUMgaW4gYWRkaXRpb24gdG8KKwlERUNMX0VYVEVSTkFMIGRlY2xzIHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlIGV4dGVybmFsIGRlY2xhcmF0aW9ucy4KKworCSogY2NjcC5jIChtdWx0aWxpbmVfc3RyaW5nX2xpbmUpOiBOZXcgZmlsZSBzY29wZSBzdGF0aWMgdmFyaWFibGUuCisJKHJlc2Nhbik6IERlbGV0ZSBtdWx0aWxpbmVfc3RyaW5nX2xpbmUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKwkoc2tpcF9xdW90ZWRfc3RyaW5nKTogUHJpbnQgc3RhcnQgbGluZSBudW1iZXIgb2YgdW50ZXJtaW5hdGVkCisJc3RyaW5nIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgV2hlbiBzZWUgYSBuZXdsaW5lOiB3YXJuIGlmCisJcGVkYW50aWM7IGRlbGV0ZSB1bnJlYWNoYWJsZSBkdXBsaWNhdGUgY29kZSBmb3IgdHJhZGl0aW9uYWwgY2FzZTsKKwlzZXQgbXVsdGlsaW5lX3N0cmluZ19saW5lLgorCitUaHUgRGVjIDMxIDExOjExOjMwIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEtaHB1eC5oIChMSUJfU1BFQyk6IEZpeCBzbyB0aGF0IG9uZSBjYW4gbGluayBpbiBwcm9maWxlZCAKKwlsaWJyYXJpZXMgdW5kZXIgSFBVWC4KKwkqIHBhLWdocHV4LmgsIHBhLWhwdXg3LmgsIHBhLWd1eDcuaCAoTElCX1NQRUMpOiBMaWtld2lzZS4KKworVGh1IERlYyAzMSAwODo1MDo0MiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLmggKE9CSkVDVF9GT1JNQVRfQ09GRik6IEFkZCBkZWZpbml0aW9uLgorCisJKiByczYwMDAveG0tcnM2MDAwLmggKFJFQUxfTk1fRklMRV9OQU1FKTogRGVsZXRlIGZyb20gaGVyZS4KKwkqIHJzNjAwMC9yczYwMDAuaCAoUkVBTF9OTV9GSUxFX05BTUUpOiBQdXQgaXQgaGVyZS4KKworVGh1IERlYyAzMSAwMTo1MzoxMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRyZWUuYyAoYnVpbGRfaW5kZXhfdHlwZSk6IExlYXZlIFRZUEVfTUFYX1ZBTFVFIGFzIC0xIGlmIGl0IHdhczsKKwlkb24ndCB0cnVuY2F0ZSB0aGUgaGlnaCBiaXRzLgorCisJKiBNYWtlZmlsZS5pbiAoZGlzdGRpcik6IE5ldyB0YXJnZXQgYnJva2VuIG91dCBmcm9tIGdjYy54dGFyLgorCURlcGVuZCBvbiAkKHNyY2RpcikvSU5TVEFMTC4KKwkoZ2NjLnh0YXIpOiBEZXBlbmQgb24gZGlzdGRpci4KKwkoZG9jKTogRGVsZXRlIGRlcCAkKHNyY2RpcikvSU5TVEFMTC4KKworV2VkIERlYyAzMCAxMjo1NDo1MyAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYvaTM4Ni5jIChvdXRwdXRfZnBfY2MwX3NldCk6IEFib3J0IGlmIGNjMCB1c2VyIG5vdCBmb3VuZC4KKworCSogaTM4Ni9pMzg2Lm1kIChtb3ZzZixtb3ZkZik6IENoYW5nZSBjb25zdHJhaW50cyB0byB1c2UgaW50ZWdlciByZWdzCisJZm9yIG1lbS1tZW0gY29waWVzLgorCisJKiBpMzg2L2kzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IERvbid0IHJlbG9hZCBDT05TVF9ET1VCTEUgaW50bworCWludGVnZXIgcmVncy4KKworCSoganVtcC5jIChkZWxldGVfY29tcHV0YXRpb24pOiByZWdfcmVmZXJlbmNlZF9wIHdhbnRzIGJvZHksIG5vdCBpbnNuLgorCitXZWQgRGVjIDMwIDA3OjAzOjQ5IDE5OTIgIEpvaG4gRiBDYXJyICAoamZjIGF0IEF0aGVuYS5NSVQuRURVKQorCisJKiBjYWxsZXItc2F2ZS5jIChzZXR1cF9zYXZlX2FyZWFzKTogRG9uJ3QgYXNzaWduIHNhdmUgYXJlYSBmb3IgYQorCWdyb3VwIGlmIHNvbWUgcmVnaXN0ZXIgaW4gdGhlIGdyb3VwIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQgYW4KKwlhcmVhLgorCitXZWQgRGVjIDMwIDA2OjA1OjA3IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuZGVmIChUUlVUSF9YT1JfRVhQUik6IE5ldyB0cmVlIGNvZGUuCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFRSVVRIX1hPUl9FWFBSKTogTmV3IGNhc2UuCisJKiBmb2xkLWNvbnN0LmMgKGludmVydF90cnV0aHZhbHVlLCBjYXNlIFRSVVRIX1hPUl9FWFBSKTogTmV3IGNhc2UuCisJKGZvbGQsIGNhc2UgVFJVVEhfWE9SX0VYUFIpOiBOZXcgY2FzZS4KKwkoZm9sZCwgY2FzZSBUUlVUSF9PUl9FWFBSLCBUUlVUSF9BTkRfRVhQUik6IENoZWNrIGZvciBzZWNvbmQKKwlvcGVyYW5kIG9mIGFwcHJvcHJpYXRlIHZhbHVlIHRvIGRldGVybWluZSByZXN1bHQgd2hldGhlciBvcgorCW5vdCBmaXJzdCBvcGVyYW5kIGlzIGEgY29uc3RhbnQuIAorCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogSGFuZGxlIFRSVVRIX1hPUl9FWFBSLgorCSogYy1jb252ZXJ0LmMsIGNwLWN2dC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBMaWtld2lzZS4KKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IExpa2V3aXNlLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBMaWtld2lzZS4KKwkqIGNwLWNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4KKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgorCitXZWQgRGVjIDMwIDAxOjQ4OjM4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IENobW9kIGVhY2ggY29waWVkIGZpbGUgYStyLgorCSogZml4aW5jLnN2cjQsIGZpeGluYy5zY286IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5pbiAoZXh0cmFjbGVhbik6IFF1b3RlIHRoZSBzaGFycHMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBJbiBOT1BfRVhQUiBjYXNlLCB0cnVuY2F0ZSBhbmQKKwlyZWV4dGVuZCBpbnRlZ2VyIGNvbnN0YW50cy4KKworVHVlIERlYyAyOSAxODoyMTowNiAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYvaTM4Ni5tZCAoYml0IGNvbXBsZW1lbnQpOiBDb25zdHJhaW4gaW5wdXRzIGFuZCBvdXRwdXRzIHRvCisJbWF0Y2gsIGluc3RlYWQgb2YgdXNpbmcgbWF0Y2hfZHVwLgorCSh6ZXJvX2V4dHJhY3QgdGVzdCk6IFJlZW5hYmxlIHdpdGggc2VwYXJhdGUgcGF0dGVybnMgdG8gbWF0Y2gKKwlRSW1vZGUgYW5kIFNJbW9kZSB6ZXJvX2V4dHJhY3QuCisKKwkqIGkzODYvc3lzdjMuaDogUmVuYW1lZCBmcm9tIGkzODYvc3ZyMy5oLgorCSogaTM4Ni9zeXN2NC5oOiBSZW5hbWVkIGZyb20gaTM4Ni9zdnI0LmguCisJKiBpMzg2L3gtc3lzdjM6IFJlbmFtZWQgZnJvbSBpMzg2L3gtc3ZyMy4KKwkqIGkzODYveG0tc3lzdjMuaDogUmVuYW1lZCBmcm9tIGkzODYveG0tc3ZyMy5oLgorCSogaTM4Ni94bS1zeXN2NC5oOiBSZW5hbWVkIGZyb20gaTM4Ni94bS1zdnI0LmguCisKKwkqIGNvbmZpZ3VyZSAoaTM4Nik6IFVzZSBuZXcgZmlsZSBuYW1lcyBmb3IgMzg2IGZpbGVzLgorCSogaTM4Ni8qLmg6IExpa2V3aXNlIGZvciBpbmNsdWRlZCBmaWxlcy4KKworVHVlIERlYyAyOSAxODowNDoxMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIEF2b2lkIHRydW5jYXRpb24gb2Ygb2JqZWN0IHNpemVzIHdoZW4gYml0IHNpemUgd29uJ3QgZml0IGluIGEgd29yZC4KKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBOZXcgYXJnIE5PVFJVTkMuICBBbGwgY2FsbHMgY2hhbmdlZC4KKwkoc2l6ZV9iaW5vcCk6IFBhc3MgMSBmb3IgTk9UUlVOQy4KKwkoZm9yY2VfZml0X3R5cGUpOiBObyBsb25nZXIgc3RhdGljLgorCSogdHJlZS5jIChzaXplX2luX2J5dGVzKTogQ2FsbCBmb3JjZV9maXRfdHlwZSB3aXRoIGVuZCByZXN1bHQuCisJKGludF9zaXplX2luX2J5dGVzKTogQXZvaWQgb3ZlcmZsb3cgYXMgbG9uZyBhcyByZXN1bHQgZml0cy4KKwlSZXR1cm4gdHlwZSBpcyBub3cgdW5zaWduZWQgaW50LgorCSogYy10eXBlY2suYyAoY19zaXplb2YsIGNfc2l6ZW9mX25vd2FybiwgY19zaXplX2luX2J5dGVzKToKKwlDYWxsIGZvcmNlX2ZpdF90eXBlIHdpdGggZW5kIHJlc3VsdC4KKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3JlY29yZCk6IEF2b2lkIG92ZXJmbG93IGluIGNvbnN0X3NpemUKKwlieSBhZGRpbmcgaW50byB2YXJfc2l6ZSBpbnN0ZWFkLgorCitUdWUgRGVjIDI5IDA5OjAxOjMzIDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWd1cmUgKG04OGstZGd1eCk6IFVzZSB0LW04OGtkZ3V4LgorCitUdWUgRGVjIDI5IDA2OjU2OjQxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbmVtaXQuYyAoZ2VuX3NwbGl0KTogSW5pdGlhbGl6ZSBfdmFsIGluIGdlbmVyYXRlZCBmdW5jdGlvbi4KKworVHVlIERlYyAyOSAwMjoyNzo1MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFrZV9kZWZpbml0aW9uKTogUGFzcyBOVUxMIGFzIDNyZCBhcmcgdG8gZG9fZGVmaW5lLgorCitNb24gRGVjIDI4IDE0OjU2OjU1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS5pbiAoc3RtdCwgRk9SIGNhc2UpOiBEbyBjYWxsIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlCisJYWZ0ZXIgcmVjb3JkaW5nIHRoZSBjdXJyZW50IGxpbmVubyBmb3IgdGhlIGluY3JlbWVudC4KKworCSogY29uZmlnLnN1YjogRGVmYXVsdCB0byBic2QgZm9yICotc2VxdWVudC4KKworTW9uIERlYyAyOCAwNjowNToxMiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmM6IEFkZCBhIGZldyBtaXNzaW5nIEhPU1RfV0lERV9JTlQgY2FzdHMuCisJUmVuYW1lIHJlZmVyZW5jZXMgdG8gYHNpZ25pZmljYW50JyBiaXRzIHRvIGJlIGBub256ZXJvJyBiaXRzOyAKKwlzcGVjaWZpY2FsbHkgdGhlIGZvbGxvd2luZywgYnV0IGFsc28gbG9jYWwgdmFycyBhbmQgY29tbWVudHM6CisJKHJlZ19ub256ZXJvX2JpdHMpOiBSZW5hbWVkIGZyb20gcmVnX3NpZ25pZmljYW50LgorCShub256ZXJvX2JpdHMpOiBSZW5hbWVkIGZyb20gc2lnbmlmaWNhbnRfYml0cy4KKwkobm9uemVyb19zaWduX3ZhbGlkKTogUmVuYW1lZCBmcm9tIHNpZ25pZmljYW50X3ZhbGlkLgorCShzZXRfbm9uemVyb19iaXRzX2FuZF9zaWduX2NvcGllcyk6IFJlbmFtZWQgZnJvbSBzZXRfc2lnbmlmaWNhbnQuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBCSVRfSU9SX0VYUFIpOiBDb252ZXJ0IHRoZSBJT1Igb2YgYSBwYWlyCisJb2Ygc2hpZnRzIGludG8gYSByb3RhdGUgd2hlbiBpdCBpcyBlcXVpdmFsZW50LgorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogSWYgcm90YXRpbmcgYnkgYSBjb25zdGFudCwgdHJ5IGJvdGgKKwlkaXJlY3Rpb25zIG9mIHJvdGF0ZS4KKwlJZiBjYW4ndCBvcGVuLWNvZGUgYSByb3RhdGUsIGRvIGl0IGFzIGEgcGFpciBvZiBzaGlmdHMgZm9sbG93ZWQgYnkKKwlhbiBJT1IuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbiwgY2FzZSBORUcpOiBSZXBsYWNlIGxhcmdlIGJsb2NrIG9mCisJY29kZSB3aXRoIGVxdWl2YWxlbnQgY2FsbCB0byBudW1fc2lnbl9iaXRfY29waWVzLgorCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBEb24ndCBsb29rIGF0IGZsYWdfdm9sYXRpbGUuCisJKGV4cGFuZF9leHByLCBjYXNlIElORElSRUNUX1JFRiwgT0ZGU0VUX1JFRik6IExpa2V3aXNlLgorCSogYy10eXBlY2suYywgY3AtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IFNldCB2b2xhdGlsaXR5IGZyb20KKwlmbGFnX3ZvbGF0aWxlLgorCisJKiBpMzg2L3Jvc2UuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBEZWxldGU7IHdlIGRvbid0IHdhbnQgdG8gc2V0CisJLWZpbmxpbmUtZnVuY3Rpb25zIGZvciAtTzMgYW5kIHRoaXMgZG9lcyBub3RoaW5nIGVsc2UgdXNlZnVsLgorCSogbWlwcy5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IExpa2V3aXNlLgorCSogaTk2MC5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERvbid0IHNldCAtZmlubGluZS1mdW5jdGlvbnMgZm9yIC1PMy4KKworU3VuIERlYyAyNyAxODozMzozOCAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGNvbmZpZy9pMzg2OiBOZXcgZGlyZWN0b3J5LgorCSogY29uZmlndXJlLmJhdDogMzg2IGNvbmZpZ3VyYXRpb24gZmlsZXMgbW92ZWQgdG8gbmV3IGRpcmVjdG9yeS4KKwkqIGNvbmZpZ3VyZSAoaTM4Nik6IExpa2V3aXNlLgorCURlbGV0ZSBsaW5lcyB0aGF0IGR1cGxpY2F0ZSBkZWZhdWx0IGFjdGlvbnMgb2YgY29uZmlndXJlLgorCisJKiBpMzg2LzM4NmJzZC5oOiBSZW5hbWVkIGZyb20gaTM4NmJzZC5oLgorCSogaTM4Ni9hdHQuaDogUmVuYW1lZCBmcm9tIGF0dDM4Ni5oLgorCSogaTM4Ni9ic2QuaDogUmVuYW1lZCBmcm9tIGJzZDM4Ni5oLgorCSogaTM4Ni9nYXMuaDogUmVuYW1lZCBmcm9tIGkzODZnYXMuaC4KKwkqIGkzODYvZ3N0YWJzLmg6IFJlbmFtZWQgZnJvbSBpMzg2Z3N0YWJzLmguCisJKiBpMzg2L2xpbnV4Lmg6IFJlbmFtZWQgZnJvbSBpMzg2bGludXguaC4KKwkqIGkzODYvbWFjaC5oOiBSZW5hbWVkIGZyb20gaTM4Nm1hY2guaC4KKwkqIGkzODYvcm9zZS5oOiBSZW5hbWVkIGZyb20gaTM4NnJvc2UuaC4KKwkqIGkzODYvc2NvLmg6IFJlbmFtZWQgZnJvbSBpMzg2c2NvLmguCisJKiBpMzg2L3NjbzQuaDogUmVuYW1lZCBmcm9tIGkzODZzY280LmguCisJKiBpMzg2L3NlcS1nYXMuaDogUmVuYW1lZCBmcm9tIHNlcTM4Nmdhcy5oLgorCSogaTM4Ni9zZXF1ZW50Lmg6IFJlbmFtZWQgZnJvbSBzZXEzODYuaC4KKwkqIGkzODYvc3VuLmg6IFJlbmFtZWQgZnJvbSBpMzg2c3VuLmguCisJKiBpMzg2L3N2cjMuaDogUmVuYW1lZCBmcm9tIGkzODZ2LmguCisJKiBpMzg2L3N2cjQuaDogUmVuYW1lZCBmcm9tIGkzODZ2NC5oLgorCSogaTM4Ni90LWlzYzogUmVuYW1lZCBmcm9tIHQtaTM4NmlzYy4KKwkqIGkzODYvdC1yb3NlOiBSZW5hbWVkIGZyb20gdC1pMzg2cm9zZS4KKwkqIGkzODYvdC1zY286IFJlbmFtZWQgZnJvbSB0LWkzODZzY28uCisJKiBpMzg2L3VuaXguaDogUmVuYW1lZCBmcm9tIHVueDM4Ni5oLgorCSogaTM4Ni94LWFpeDogUmVuYW1lZCBmcm9tIHgtYWl4Mzg2LgorCSogaTM4Ni94LWlzYzogUmVuYW1lZCBmcm9tIHgtaTM4NmlzYy4KKwkqIGkzODYveC1yb3NlOiBSZW5hbWVkIGZyb20geC1pMzg2cm9zZS4KKwkqIGkzODYveC1zY286IFJlbmFtZWQgZnJvbSB4LWkzODZzY28uCisJKiBpMzg2L3gtc2NvNDogUmVuYW1lZCBmcm9tIHgtaTM4NnM0LgorCSogaTM4Ni94LXN2cjM6IFJlbmFtZWQgZnJvbSB4LWkzODZ2LgorCSogaTM4Ni94bS1haXguaDogUmVuYW1lZCBmcm9tIHhtLWFpeDM4Ni5oLgorCSogaTM4Ni94bS1kb3MuaDogUmVuYW1lZCBmcm9tIHhtLWkzODZkb3MuaC4KKwkqIGkzODYveG0taXNjLmg6IFJlbmFtZWQgZnJvbSB4bS1pMzg2aXNjLmguCisJKiBpMzg2L3htLXNjby5oOiBSZW5hbWVkIGZyb20geG0taTM4NnNjby5oLgorCSogaTM4Ni94bS1zdW4uaDogUmVuYW1lZCBmcm9tIHhtLWkzODZzdW4uaC4KKwkqIGkzODYveG0tc3ZyMy5oOiBSZW5hbWVkIGZyb20geG0taTM4NnYuaC4KKwkqIGkzODYveG0tc3ZyNC5oOiBSZW5hbWVkIGZyb20geG0taTM4djQuaC4KKworCSogaTM4Ni8qLmg6IFVzZSBuZXcgZmlsZSBuYW1lcyBmb3IgaW5jbHVkZWQgMzg2IGZpbGVzLgorCitTdW4gRGVjIDI3IDIyOjAyOjA5IDE5OTIgIEguSi4gTHUgIChobHVAeWFyZGJpcmQuZWVjcy53c3UuZWR1KQorCisJKiBpMzg2bGludXguaCAoQ1BQX1NQRUMpOiBEZWZpbmUgLURfX2k0ODZfXyBpZiBjb21waWxlIGZvciBpNDg2LgorCShBU01fT1VUUFVUX0FERFJfRElGRl9FTFQsIEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTik6CisJQ29weSBkZWZpbml0aW9ucyBmcm9tIGkzODZ2NC5oIHRvIGdldCBQSUMgY29kZSBjb3JyZWN0LgorCShGVU5DVElPTl9QUk9GSUxFUik6IENvcHkgZGVmaW5pdGlvbiBmcm9tIGkzODZic2QuaC4KKwkoQ09NTUVOVF9CRUdJTiwgQVNNX0FQUF9PTiwgQVNNX0FQUF9PRkYpOiBDb3B5IGZyb20gaTM4NmJzZC5oCisJdG8gcHJlcGFyZSBmb3IgbmV3IEdBUy4KKworCSogTWFrZWZpbGUuaW46IChnY2Mubyk6IEFkZCAkKE1BWUJFX1RBUkdFVF9ERUZBVUxUKS4KKworU3VuIERlYyAyNyAxNjozMzoxMyAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5jIChibG9ja19tb3ZlX2xvb3AsIGJsb2NrX21vdmVfbm9fbG9vcCwgYmxvY2tfbW92ZV9zZXF1ZW5jZSk6IAorCUFsd2F5cyBzZXQgTUVNX0lOX1NUUlVDVF9QLiAgSWYgaXQgd2Fzbid0IHByZXZpb3VzbHkgc2V0LCB1c2UgQkxLbW9kZS4gCisJKiBtODhrLm1kIChCTEttb2RlIGxvYWQvc3RvcmUgcGF0dGVybnMpOiBOZXcuCisJKGNhbGxfYmxvY2tfbW92ZSwgY2FsbF9tb3ZzdHJzaV9sb29wKTogQWxsb3cgYW55IG1vZGUgZm9yIHRoZSBwcmVsb2FkLgorCisJKiBtODhrLmMgKG91dHB1dF9maWxlX3N0YXJ0KTogRW1pdCBgcmVxdWlyZXNfODgxMTAnIHdoZW4gLW04ODExMAorCWlzIHVzZWQgd2l0aCAtbXZlcnNpb24tMDQuMDAuCisJKiBtODhrLmggKE9WRVJSSURFX09QVElPTlMpOiBBbGxvdyB2ZXJzaW9uIDA0LjAwIGRlZmF1bHQuCisJKFZFUlNJT05fMDQwMF9TWU5UQVgsIFJFUVVJUkVTXzg4MTEwX0FTTV9PUCk6IE5ldyBkZWZpbml0aW9ucy4KKwkqIG04OGtkZ3V4LmggKEFTTV9GSVJTVF9MSU5FKTogUHJpbnQgdGhlIHZlcnNpb24gc3RyaW5nLgorCisJKiBtODhrLm1kIChsZW5ndGggYXR0cmlidXRlKTogQnJhbmNoZXMgbWF5IGJlIGV4cGFuZGVkIHRvIHR3bworCWluc3RydWN0aW9ucyBieSB0aGUgYXNzZW1ibGVyLgorCShERm1vZGUgYmNuZCBwYXR0ZXJuKTogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGRlbGF5IHNsb3QuCisJKENDbW9kZSBiYnggcGF0dGVybnMpOiBSZXZlcnNlIHRoZSAxLzAsIG5vdCB0aGUgY29uZGl0aW9uLgorCisJKiBtODhrZGd1eC5oIChBU01fU1BFQyk6IFBhc3MgLUtWc3RyaW5nIGdpdmVuIC1tdmVyc2lvbi1zdHJpbmcuCisKKwkqIG04OGtkZ3V4LmxkLCB0LW04OGtkZ3V4OiBOZXcgZmlsZS4KKwkqIG04OGtkZ3V4LmggKExJQl9TUEVDKTogQWRkIGNydGVuZC5vLgorCShTVEFSVEZJTEVfU1BFQyk6IEFkZCBjcnRiZWdpbi5vLCBhbmQgbTg4a2RndXgubGQgZm9yIENPRkYuCisJKENUT1JfTElTVF9FTkQsIERUT1JfTElTVF9FTkQpOiBEZWZpbmUgYXMgLTEuCisJKERPX0dMT0JBTF97QyxEfU9SU19CT0RZKTogSWdub3JlIG51bGwgZW50cmllcyBhbmQgbG9vayBmb3IgLTEKKwlib3VuZHMuCisKK1N1biBEZWMgMjcgMTY6MDg6MDQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBocDMyMC5oIChBU01fT1VUUFVUX0RPVUJMRV9PUEVSQU5EKTogRGVsZXRlIHNwdXJpb3VzIHNwYWNlIGFmdGVyIFwuCisKKwkqIGdzdGRkZWYuaCBbX19zZXF1ZW50X19dOiAjdW5kZWYgX1BUUkRJRkZfVF8gYXQgYmVnaW5uaW5nLCBpZiBkZWZpbmVkLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRXJyb3IgaW5zdGVhZCBvZiBhYm9ydAorCWlmIGFuIGFzbSBoYXMgYSBWT0lEbW9kZSBvdXRwdXQgb3BlcmFuZC4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogTW92ZSB0aGUgTk9fUkVHUyBhYm9ydCBhZnRlciB0aGUKKwllcnJvciBjaGVjayBmb3IgYXNtcywgdG8gYXZvaWQgY3Jhc2hpbmcgZm9yIGFzbXMuCisJRml4IGlubW9kZSBhbmQgb3V0bW9kZSB0b28sIGlmIHRoZXkgYXJlIFZPSUQgZm9yIGFuIGFzbS4KKworU3VuIERlYyAyNyAxMDo0ODoxMCAxOTkyICBKZWZmcmV5IEEgTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcmVvcmcuYyAobW9zdGx5X3RydWVfanVtcCk6IFdoZW4gdHJ5aW5nIHRvIGRldGVybWluZQorCWlmIHRoZSBjdXJyZW50IGluc24gaXMgZXNzZW50aWFsbHkgYSBjb25kaXRpb25hbCByZXR1cm4sCisJbG9vayBpbnNpZGUgb2YgU0VRVUVOQ0UgaW5zbnMgZm9yIGp1bXBzLgorCVByZWRpY3QganVtcHMgdG8gdGhlIGV4aXQgdGVzdCBmb3IgbG9vcHMgYXMgbGlrZWx5IHRvIGJlIHRha2VuLgorCitTdW4gRGVjIDI3IDA2OjUzOjM5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogT25seSBsb29rIGF0IEpVTVBfTEFCRUwgZm9yIGEKKwljb25kanVtcF9wLgorCisJKiBqdW1wLmMgKGRlbGV0ZV9qdW1wKTogVXNlIHNpbmdsZV9zZXQgdG8gc2VlIGlmIElOU04ganVzdCBzZXRzIFBDLgorCVJlbW92ZSBjb2RlIHRvIGRlbGV0ZSBwcmV2aW91cyBjYzAtc2V0dGluZyBpbnNuLgorCShkZWxldGVfY29tcHV0aW9uKTogTm8gbG9uZ2VyIGNvbmRpdGlvbmFsIG9uICNpZm5kZWYgSEFWRV9jYzAuCisJSWYgaW5zbiB1c2VzIENDMCwgZGVsZXRlIHByZXZpb3VzIGluc24gdGhhdCBqdXN0IHNldHMgQ0MwIGZvciB1czsKKwlkbyBkZWxldGlvbiB2aWEgcmVjdXJzaXZlIGNhbGwuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgU0VUKTogQ2FsbCByZWNvZ19mb3JfY29tYmluZSB3aXRoIE9USEVSX0lOU04sCisJbm90IFVORE9CVUYuT1RIRVJfSU5TTi4KKworCSogZ2Vub3V0cHV0LmMgKGhhdmVfZXJyb3IpOiBOZXcgdmFyaWFibGUuCisJKGVycm9yKTogU2V0IGl0LgorCShtYWluKTogVGVzdCBpdCBhbmQgcmV0dXJuIEZBVEFMX0VYSVRfQ09ERSBpZiBpdCBpcyBzZXQuCisKKwkqIGVtaXQtcnRsLmMgKGNvcHlfcnR4X2lmX3NoYXJlZCk6IEEgQ09OU1QgY2FuIGJlIHNoYXJlZCBpZiBpdAorCWNvbnRhaW5zIGEgU1lNQk9MX1JFRi4KKwkqIHJ0bC5jIChjb3B5X3J0eCk6IExpa2V3aXNlLgorCUEgU0NSQVRDSCBtdXN0IGJlIHNoYXJlZC4KKwlBIE1FTSBtYXkgYmUgc2hhcmVkIGlmIGl0IGlzIGF0IGEgY29uc3RhbnQgYWRkcmVzcy4KKworU3VuIERlYyAyNyAwMjo0ODoyNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBFeHBhbmQgZWFjaCBtYWNyb2FyZyBmaXJzdCB0aW1lIHdlIGZpbmQgYSBuZWVkCisJdG8gc3Vic3RpdHV0ZSBpdHMgZXhwYW5zaW9uLgorCShtYWNhcmcpOiBEb24ndCBleHBhbmQgdGhlbSBoZXJlLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjb25zdHJ1Y3RvciBjYXNlKTogSWYgd2UgbWFkZSBhIHN0YWNrIHNsb3QsCisJc2V0IE1FTV9JTl9TVFJVQ1RfUCBpZiB0aGUgdHlwZSB3YXJyYW50cyBpdC4KKworCSogY29uZmlndXJlOiBXaGVuIHRlc3RpbmcgZXhpc3RlbmNlIG9mIGEgY29uZmlnIGZpbGUsIHNwZWNpZnkgJHNyY2Rpci4KKworU2F0IERlYyAyNiAxODoxMjowOCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSwgY2FzZSAnYycpOiBGb3IgSU5URUdFUl9DU1QsIHVzZSBzaXplIG9mCisJc3RydWN0IGNvbnRhaW5pbmcgY29uc3RhbnQsIGp1c3QgbGlrZSBmb3IgcmVhbHMuICBBbHNvLCBjbGVhbgorCXVwIGNvZGUgdG8gYXZvaWQgY29uZnVzaW5nIGZhbGx0aHJvdWdoLgorCisJKiBhMjlrL3VuaXguaCwgcnM2MDAwL2FpeDMyLmgsIHJzNjAwMC9tYWNoLmgsIHJzNjAwMC94bS1tYWNoLmg6CisJSW5jbHVkZSBtYWluIGZpbGUgZnJvbSBzdWJkaXJlY3RvcnkuCisKKwkqIGNvbmZpZy9hMjlrLCBjb25maWcvYWxwaGEsIGNvbmZpZy9yb21wLCBjb25maWcvcnM2MDAwOiBOZXcKKwlkaXJlY3Rvcmllcy4KKwkqIGNvbmZpZ3VyZTogSWYgYSBmaWxlIGlzbid0IGluIGNvbmZpZywgdHJ5IGluIGNvbmZpZy8kY3B1X3R5cGUuCisJKGEyOWssIGFscGhhLCByb21wLCByczYwMDApOiBGaWxlcyBtb3ZlZCB0byBuZXcgbWFjaGluZSBzdWJkaXJlY3Rvcmllcy4KKwlEZWxldGUgbGluZXMgdGhhdCBkdXBsaWNhdGUgZGVmYXVsdCBhY3Rpb25zIG9mIGNvbmZpZ3VyZS4KKworCSogY29tYmluZS5jIChnZW5fbG93cGFydF9mb3JfY29tYmluZSk6IEFsbG93IE1PREUgdG8gYmUgd2lkZXIKKwl0aGFuIGEgd29yZCBpbiByZXN0cmljdGVkIGNpcmN1bXN0YW5jZXMuCisKKwkqIGMtdHlwZWNrLmMgKGNoZWNrX2Zvcm1hdCk6IFVzaW5nIGJvdGggYSBwcmVjaXNpb24gYW5kIHRoZSBgMCcgZmxhZworCWlzIG9ubHkgYSBwcm9ibGVtIG9uIGBkJywgYGknLCBgbycsIGB1JywgYHgnLCBhbmQgYFgnIGNvbnZlcnNpb25zLgorCitTYXQgRGVjIDI2IDE3OjA1OjI0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqZWN0Lmg6IERvbid0IGluY2x1ZGUgb2JqYy5oIG9yIHN0ZGlvLmguCisJQ2hhbmdlIENsYXNzX3QgdG8gQ2xhc3MgZXZlcnl3aGVyZS4KKwkoaWQsIG5pbCwgTmlsLCBDbGFzcywgU1RSLCBTRUwsIElNUCwgQk9PTCwgWUVTLCBOTyk6IERlZmluZSwKKwlidXQgbm90IGlmIG9iamMuaCB3YXMgYWxyZWFkeSBpbmNsdWRlZC4KKwlbX19vYmpjX0lOQ0xVREVfR05VXSAoQ2xhc3MpOiBBbGlhcyB0aGlzIHRvIENsYXNzX3QuCisKKwkqIG9iamVjdC5tOiBJbmNsdWRlIG9iamMuaCBhbmQgc3RkaW8uaCBiZWZvcmUgb2JqZWN0LmguCisKK1NhdCBEZWMgMjYgMDU6MTI6MDUgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuMy4zIHJlbGVhc2VkLgorCitGcmkgRGVjIDI1IDA2OjUzOjQ5IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBJZiBWQUxVRSBuZWVkcyB0byBiZSBuYXJyb3dlZCwgZG8KKwlpdCB3aXRoIGdlbl9sb3dwYXJ0LCBub3QgYW4gZXhwbGljaXQgU1VCUkVHLgorCisJKiBhMjlrLm1kIChkaXZzZjMpOiBGaXggdHlwbyBpbiBtb2RlIG9mIERJVi4KKworRnJpIERlYyAyNSAwMDowMzoyNiAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXMgYXQgYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRpcik6IEFkZCBtaXNzaW5nIHNlbWljb2xvbi4KKworCSogaTM4NnNjbzQuaCAoX0tSLCBfU1ZJRCwgX05PX1BST1RPVFlQRSk6IERlZmluZSBpZiAtdHJhZGl0aW9uYWwuCisKK1RodSBEZWMgMjQgMTU6MDI6MjkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmMuc3ZyNDogRG9uJ3QgY2hhbmdlIGJpdGZpZWxkIHR5cGVzIHRvIGludC4KKworCSogc2VxMzg2LmggKFRBUkdFVF9ERUZBVUxUKTogT3ZlcnJpZGUuCisKK1dlZCBEZWMgMjMgMjA6MTk6MTcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBpMzg2c2NvNC5oIChDUFBfU1BFQyk6IEF2b2lkIHJlcGVhdGVkIGRlZiBvZiBfTV9TWVNWLgorCitUdWUgRGVjIDIyIDE1OjQwOjA4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBVc2UgVFlQRV9NQUlOX1ZBUklBTlQgdG8gY29tcGFyZSB0eXBlcworCXdoZW4gbWVyZ2luZyBpbmZvIGZyb20gcHJldmlvdXMgcHJvdG90eXBlLgorCisJKiBmaXhpbmMuc3ZyNDogQWRkIHNwZWNpYWwgZml4ZXMgZm9yIG5ldGluZXQvaW4uaCBhbmQgc3lzL2VuZGlhbi5oLgorCitNb24gRGVjIDIxIDAyOjU4OjI3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbTY4a3Y0LmggKEFTTV9PVVRQVVRfQ0FTRV9FTkQpOgorCVVzZSBzd2l0Y2hfdGFibGVfZGlmZmVyZW5jZV9sYWJlbF9mbGFnLgorCisJKiBjb25maWd1cmUgKG02OGstbW90b3JvbGEtc3lzdiopOiBTZXQgdXNlX2NvbGxlY3QyLgorCitTYXQgRGVjIDE5IDIwOjE5OjQ0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGEyOWsuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IFJldHVybiBDUl9SRUdTIGZvciBsYXJnZXIgdGhhbgorCXdvcmQgbWVtb3J5LCBhbmQgQlBfUkVHUyBmb3IgcGFydC13b3JkIG1lbSB3aXRoIG5vIERXLgorCisJKiBhMjlrLm1kOiBDb25zaXN0ZW50bHkgdXNlIGAmJyBpbiBjb25zdHJhaW50IG9mIE1BVENIX1NDUkFUQ0guCisJQWx3YXlzIHVzZSBhIHJlZyBhcyA0dGggYXJnIG9mIGRtYWMvZm1hYyBldmVuIGlmIGlnbm9yZWQgYnkgaW5zbi4KKwlVc2VzIG9mIGBiJyBhcyBhIGNvbnN0cmFpbnQgaW4gbXVsdGktd29yZCByZWxvYWQgcGF0dGVybnMgc2hvdWxkCisJYmUgYGMnLgorCitTYXQgRGVjIDE5IDAxOjMyOjEzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGFsbC5jcm9zcyk6IEFkZCBgc3BlY3MnIGFzIGRlcC4KKworCSogYnVpbGQtbWFrZSAoQ0MpOiBEZWxldGUgdGhlIC1WIG9wdGlvbi4KKworCSogZ2V0cHdkLmMgKGdldHB3ZCk6IERvbid0IGdldCB1cHNldCBpZiBFUkFOR0UgaXMgbm90IGRlZmluZWQuCisKK0ZyaSBEZWMgMTggMjA6NTY6NTkgMTk5MiAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX2VuY29kZV9leHByKToKKwlUZXJtaW5hdGUgdGhlIGVuY29kZSBzdHJpbmcgd2l0aCBhIG51bGwuCisJKGVuY29kZV9hZ2dyZWdhdGUpOiBEaXN0aW5ndWlzaCBwb2ludGVyIHRvIHJlY29yZCBmcm9tIGEKKwlyZWNvcmQuICBPdXRwdXQgZmllbGRzIGZvciByZWNvcmQuICBGaXggdW5pb25zLgorCitGcmkgRGVjIDE4IDE3OjE3OjM5IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmggKE1JUFNfVkVSU0lPTik6IFNldCBNZWlzc25lciB2ZXJzaW9uICMgdG8gMzMuCisJKHN0cnVjdCBtaXBzX2FyZ3MpOiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBRSS9ISSBtb2RlIHN0cnVjdHVyZXMKKwl0aGUgd2F5IHRoZSBNSVBTIGNvbXBpbGVyIHBhc3NlcyB0aGVtLgorCShTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSk6IERlZmluZSBhcyB1bnNpZ25lZCBpbnQsIGFuZCBpbnQgaWYgbm90CisJZGVmaW5lZCBhbHJlYWR5LgorCisJKiBtaXBzLmMgKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogVXNlIGEgc3RhdGljIHN0cnVjdHVyZSB0bworCWluaXRpYWxpemUgdGhlIENVTVVMQVRJVkVfQVJHUyBzdHJ1Y3R1cmUuCisJKGZ1bmN0aW9uX2FyZ19hZHZhbmNlKTogQWRkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIGRlYnVnIG91dHB1dC4KKwkoZnVuY3Rpb25fYXJnKTogSWYgYSBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGFzIGEgUUltb2RlIG9yIEhJbW9kZQorCXZhbHVlIGluIGEgcmVnaXN0ZXIsIHJlY29yZCB0aGUgZmFjdCBmb3IgdGhlIGNhbGwgZGVmaW5lX2V4cGFuZHMKKwlhbmQgcHJvbG9ndWUgZXhwYW5kZXIgdG8gbW92ZSB0aGUgc3RydWN0dXJlIGludG8gdGhlIGhpZ2ggcGFydCBvZgorCXRoZSByZWdpc3RlciwgYW5kIGJhY2sgYWdhaW4uICBJZiBkZWJ1Z2dpbmcsIHByaW50IGlmIHRoZSBhcmd1bWVudAorCWlzIGEgc3RydWN0dXJlLgorCShtaXBzX2V4cGFuZF9wcm9sb2d1ZSk6IFNoaWZ0IGFueSBRSS9ISSBzdHJ1Y3R1cmVzIHBhc3NlZCBiYWNrLCBzbworCXRoZXkgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIFFJL0hJIHZhbHVlcy4KKworCSogbWlwcy5tZCAoY2FsbCk6IElmIHRoZXJlIHdlcmUgYW55IHRpbnkgc3RydWN0dXJlcyBwYXNzZXMgYXMKKwlRSS9ISSBtb2RlcyBpbiByZWdpc3RlcnMsIHNoaWZ0IHRoZSByZWdpc3Rlciwgc28gdGhhdCB0aGUKKwlzdHJ1Y3R1cmUgdmFsdWUgaXMgaW4gdGhlIGhpZ2ggcGFydCBvZiB0aGUgcmVnaXN0ZXIuCisJKGNhbGxfdmFsdWUpOiBEaXR0by4KKwkoY2FsbF9pbnRlcm5hbCk6IERlbGV0ZSBjcmVhdGluZyAkMzEgcnR4LCBzaW5jZSB3ZSBjYW4gZ2V0IGl0IGZyb20KKwl0aGUgbm9ybWFsIGluc24gcGF0dGVybnMuCisJKGNhbGxfdmFsdWVfaW50ZXJuYWwpOiBEaXR0by4KKworRnJpIERlYyAxOCAwNToxNDoxNCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlNYWtlIGFic3RyYWN0IHZpcnR1YWwgZnVuY3Rpb25zIHdvcmsuCisJKiBjcC1jYWxsLmMgKGNvbXB1dGVfY29udmVyc2lvbl9jb3N0cyk6IFVuZG8gY2hhbmdlIG9mIFNlcHQgMSBhYm91dAorCXNldHRpbmcgSEFSU0hORVNTIHRvIDAgcmU6IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBmaXJzdCBhcmd1bWVudC4KKwkoYnVpbGRfbWV0aG9kX2NhbGwpOiAgRGVsZXRlIHRoZSBjb2RlIHRoYXQgcmVkaWQgdGhlIFJUTCBmb3IgY2FsbGluZworCXRoZSByaWdodCBmbiwgc2luY2Ugd2Ugd2lsbCBub3cgYmVoYXZlIGNvcnJlY3RseS4gIChFdmVuIHdpdGggdGhpcywKKwl3ZSBlbmRlZCB1cCBjYWxsaW5nIHRoZSB3cm9uZyBmbi0tLXRoZSBiYXNlIGNsYXNzLCByYXRoZXIgdGhhbiB0aGUKKwlkZXJpdmVkIG9uZS4pCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tjbGFzc2ZuKTogVHJ5IHVzaW5nIHRoZSBsb2NhbCB2YWx1ZSBmb3IgYSBuZXN0ZWQKKwl0eXBlIGlmIHRoZSBJREVOVElGSUVSX1RZUEVfVkFMVUUgaXNuJ3QgdGhlcmUuCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFVzZSBERUNMX05BTUUgaW5zdGVhZCBvZgorCURFQ0xfQVNTRU1CTEVSX05BTUUsIHNpbmNlIHB1c2h0YWcgbm93IG1hbmdsZXMgdG9nZXRoZXIKKwlERUNMX0FTU0VNQkxFUl9OQU1FLiAgVGhpcyB3aWxsIG1ha2UgdXMgZW1pdCBgUTIxRDFCJywgbm90IGBRMjIxRDFCJy4KKworVGh1IERlYyAxNyAxNzo1MToxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kaXIpOiBBZGRlZCBtaXNzaW5nIHRoZW4gYW5kIHNlbWljb2xvbi4KKworVGh1IERlYyAxNyAxNToxOTozNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHgtaTM4NnM0IChDQyk6IE5ldyBhc3NpZ25tZW50LgorCitXZWQgRGVjIDE2IDE1OjQ5OjExIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogb2JqYy1hY3Rpb25zLmMgKGZpbmlzaF9vYmpjKSBbT0JKQ19TRUxFQ1RPUlNfV0lUSE9VVF9MQUJFTFNdOgorCUFsd2F5cyBjYWxsIGJ1aWxkX3NlbGVjdG9yX3RyYW5zbGF0aW9uX3RhYmxlLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kaXIpOgorCUlmIGNyb3NzLWNvbXBpbGVyLCBjcmVhdGUgJCh0b29sZGlyKSBhbmQgJChhc3NlcnRkaXIpLiAKKworV2VkIERlYyAxNiAxNDoxOTowOCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUpCisKKwkqIHJzNjAwMC5oIChJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBHZXQgZnVuY3Rpb24gYWRkcmVzcyBhbmQgdG9jCisJcG9pbnRlciBmcm9tIGNvcnJlY3QgcGxhY2UgcmVsYXRpdmUgdG8gRk5BRERSLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdHJhbXBvbGluZV90ZW1wbGF0ZSk6IElmIFRSQU1QT0xJTkVfU0VDVElPTgorCWlzIGRlZmluZWQsIHB1dCB0aGUgdHJhbXBvbGluZSB0ZW1wbGF0ZSBpbnRvIHRoYXQgc2VjdGlvbi4KKworCSogYWxwaGEuaCAoVFJBTVBPTElORV9TRUNUSU9OKTogTmV3IG1hY3JvLgorCitXZWQgRGVjIDE2IDE0OjE5OjQxIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGdldF9zZWNvbmRhcnlfbWVtKTogRG9uJ3Qgc2F2ZSBhZGRyZXNzIGlmIGl0IGlzbid0IHZhbGlkLgorCitXZWQgRGVjIDE2IDEzOjU5OjE3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdmFyYXNtLmMgKGFzc2VtYmxlX3RyYW1wb2xpbmVfdGVtcGxhdGUpOgorCVVzZSByZWFkb25seV9kYXRhX3NlY3Rpb24sIG5vdCB0ZXh0X3NlY3Rpb24uCisKK1dlZCBEZWMgMTYgMTE6MzI6MTEgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMuaCAoTUlQU19WRVJTSU9OKTogU2V0IE1laXNzbmVyIHZlcnNpb24gIyB0byAzMi4KKwkoY29tcHV0ZV9mcmFtZV9zaXplKTogQ2hhbmdlIGZ1bmN0aW9uIHJldHVybiB0eXBlIHRvIGxvbmcuCisJKGVwaWxvZ3VlX3JlZ19tZW50aW9uZWRfcCk6IE5ldyBmdW5jdGlvbiBkZWNsLgorCShtaXBzX2ZyYW1lX2luZm8pOiBDaGFuZ2UgdW5zaWduZWQgbG9uZ3MgdG8gbG9uZ3MuCisJKEVMSUdJQkxFX0ZPUl9FUElMT0dVRV9ERUxBWSk6IENhbGwgZXBpbG9ndWVfcmVnX21lbnRpb25lZF9wLgorCisJKiBtaXBzLmMgKGVwaWxvZ3VlX3JlZ19tZW50aW9uZWRfcCk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZQorCWlmIGFueSByZWdpc3RlciB1c2VkIGluIHRoZSBlcGlsb2d1ZSBzZXF1ZW5jZSBpcyByZWZlcmVuY2VkLiAgSWYKKwl0aGUgc3RhY2sgc2l6ZSBpcyBncmVhdGVyIHRoYW4gMzJrIGJ5dGVzLCByZXR1cm4gdHJ1ZSBmb3IKKwlyZWdpc3RlcnMgJDggYW5kICQ5LCBzaW5jZSB0aGV5IGFyZSB1c2VkIHRvIGhvbGQgdGVtcHMuCisJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IENoYW5nZSByZXR1cm4gdHlwZSAmIHZhcmlhYmxlcyB0byBsb25nLgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBVc2UgMUwgaW4gc2hpZnRzIHRvIGNyZWF0ZSBHUCBzYXZlIG1hc2suCisJKHNhdmVfcmVzdG9yZSk6IE1lcmdlIGZ1bmN0aW9uIGludG8gc2F2ZV9yZXN0b3JlX2luc25zLgorCShzYXZlX3Jlc3RvcmVfaW5zbnMpOiBBZGQgRklMRSAqIGFyZ3VtZW50LCB0byB3cml0ZSB0byB0aGUgLnMKKwlmaWxlIGlmIG5vbi1OVUxMIC0tIG90aGVyd2lzZSBwcm9kdWNlIGluc25zLiAgQWRkIGFyZ3VtZW50cyB0bworCXBhc3MgaW4gdGhhdCB0aGUgcHJvbG9ndWUvZXBpbG9ndWUgaGFzIGxvYWRlZCB0aGUgc3RhY2sgc2l6ZSBpbnRvCisJJDggaWYgbGFyZ2Ugc3RhY2sgZnJhbWUuICBDb21wbGV0ZWx5IHJld3JpdGUgbGFyZ2Ugc3RhY2sgZnJhbWUKKwlzdXBwb3J0LCBzbyB0aGF0IGl0IGRvZXNuJ3QgYWJvcnQgaWYgbGFyZ2Ugc3RhY2sgZnJhbWUsIHNhdmVkIEdQCisJcmVnaXN0ZXJzLCBhbmQgbm8gc2F2ZWQgRlAgcmVnaXN0ZXJzLiAgSWYgbGFyZ2Ugc3RhY2sgZnJhbWUsIHVzZQorCXN0YWNrIHNpemUgc3RvcmVkIGluICQ4IGlmIHdlIGNhbi4KKwkoZnVuY3Rpb25fcHJvbG9ndWUpOiBNYWtlIHRzaXplIGxvbmcuCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogRGl0dG8uCisJKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogRGl0dG8uCisJKG1pcHNfZXhwYW5kX2VwaWxvZ3VlKTogRGl0dG8uCisJKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogQ2hhbmdlIGNhbGwgdG8gc2F2ZV9yZXN0b3JlX2luc25zLgorCShtaXBzX2V4cGFuZF9lcGlsb2d1ZSk6IERpdHRvLgorCShmdW5jdGlvbl9lcGlsb2d1ZSk6IENhbGwgc2F2ZV9yZXN0b3JlX2luc25zIGluc3RlYWQgb2YKKwlzYXZlX3Jlc3RvcmUuCisKK1dlZCBEZWMgMTYgMDc6MzM6MDggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZ290byk6IFNldCBMQUJFTF9SRUZfTk9OTE9DQUxfUCBpbiB0aGUgTEFCRUxfUkVGCisJd2UgbWFrZSBpbiB0aGUgbm9uLWxvY2FsIGNhc2UuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV90cmFtcG9saW5lX3RlbXBsYXRlKTogQWx3YXlzIHB1dCB0ZW1wbGF0ZSBpbgorCXRleHQgc2VjdGlvbi4KKworV2VkIERlYyAxNiAwNTowNDowNiAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IEFsbG93IGZvciB0aGUgY2FzZSB3aGVyZSBJMyBiZWNvbWVzIGFuCisJdW5jb25kaXRpb25hbCBqdW1wIHdoZW4gaXQgaXMgdGhlIGxhc3Qgbm9ubm90ZSBpbnNuLgorCitUdWUgRGVjIDE1IDIwOjMwOjA2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChkb19wcmFnbWEpOiBVc2UgaW5kZXgsIG5vdCBzdHJjaHIuCisKKwkqIHNlcTM4Ni5oIChGVU5DVElPTl9QUk9GSUxFUik6IEFkZCBtaXNzaW5nIC4gdG8gbGFiZWwgbmFtZS4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogVGVzdCBvbGRfYm9keSwgbm90IG5ld19ib2R5LAorCXNpbmNlIHBlb3BsZSBoYXZlIHRlc3RlZCBpdCB0aGF0IHdheS4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogRG9uJ3QgcmVjb3B5IG5ld19ib2R5CisJaWYgaXQgaXMgYW4gYXNtX29wZXJhbmRzIGluc24uCisKK1R1ZSBEZWMgMTUgMTk6NDI6NTggMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5tZCAocmV0dXJuIHBlZXBob2xlcyk6IEFkZCBRSW1vZGUgYW5kIEhJbW9kZSBtb3ZlL3JldHVybgorCXBhdHRlcm5zLgorCitUdWUgRGVjIDE1IDE3OjQyOjA3IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmggKEFTTV9TUEVDKTogTmV3IG1hY3JvLgorCisJKiBhbHBoYS5oIChUUkFNUE9MSU5FX3tURU1QTEFURSxTSVpFfSwgSU5JVElBTElaRV9UUkFNUE9MSU5FKToKKwlNYWtlIG1ham9yIGNoYW5nZXMgdG8gZml4IG51bWVyb3VzIGJ1Z3MuCisJKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IE5ldyBtYWNyby4KKwkqIGFscGhhLm1kOiBBZGQgbmV3IFVOU1BFQ19WT0xBVElMRSAwIHRvIGZsdXNoIGluc3RydWN0aW9uIGNhY2hlLgorCitNb24gRGVjIDE0IDEzOjE2OjE0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9nKTogU3VwcG9ydCBMQU5HVUFHRV9TVFJJTkcgdmFsdWVzIGZvciBGNzcsCisJQWRhLCBhbmQgUGFzY2FsLgorCitTdW4gRGVjIDEzIDE2OjQyOjI2IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jLnNjbzogQ29tcGxldGUgcmV3cml0ZSBieSBpYW5AY3lnbnVzLmNvbS4KKworU2F0IERlYyAxMiAxNzo1MTo0MyAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YS1hbHBoYS5oOiBDb3JyZWN0bHkgZm9ybSBtdWx0aS13b3JkIG9iamVjdC4KKworCSogYWxwaGEuYyAoYWxwaGFfYnVpbHRpbl9zYXZyZWdzKTogQ29ycmVjdGx5IGNvbXB1dGUgQVJHU0laRSBhbmQgTlJFR1MuCisKKwkqIGFscGhhLmggKEZVTkNUSU9OX0FSR19QQVNTX0JZX1JFRkVSRU5DRSk6IERlbGV0ZWQuCisKK1NhdCBEZWMgMTIgMDg6NDI6NDMgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS1ocHV4LmggKFRBUkdFVF9ERUZBVUxUKTogRG8gbm90IGVuYWJsZSBUQVJHRVRfU0hBUkVEX0xJQlMKKwlieSBkZWZhdWx0IGluIDIuMy4zIHNpbmNlIGl0IGRvZXNuJ3QgcmVhbGx5IHdvcmsuCisJKiBwYS1naHB1eC5oLCBwYTEtaHB1eC5oLCBwYTEtZ2hwdXguaDogTGlrZXdpc2UuCisKKwkqIHBhLm1kIChmbG9hdHNpc2YsIGZsb2F0c2lkZik6IERvIG5vdCBhY2NlcHQgZ2VuZXJhbCByZWdpc3RlcnMuCisKK0ZyaSBEZWMgMTEgMDA6MTM6NTIgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKGlbMzRdODYtKi1zY28zLjJ2NCopOiBVc2UgZml4aW5jLnNjby4KKwkqIGZpeGluYy5zY286IE5ldyBmaWxlLgorCUxpa2UgZml4aW5jLnN2cjQgYnV0IHR1cm4gIV9fU1REQ19fIGludG8gIV9fU1RSSUNUX0FOU0lfXy4gIERvbid0CisJcmVxdWlyZSBzcGFjZSBhZnRlciBnZXRjd2QgYXJndW1lbnQgaW4gc3RkbGliLmguCisJKiB4LWkzODZzNDogRG9uJ3QgdXNlIHJjYzoKKwkoQ0MsIE9MRENDLCBSQ0NGTEFHUywgQ0NMSUJGTEFHUyk6IFZhcnMgZGVsZXRlZC4KKwkqIHhtLWkzODZzY28uaCAoT05MWV9JTlRfRklFTERTKTogRGVmaW5lIGlmIG5vdCBfX0dOVUNfXy4KKwkoQ09ERV9GSUVMRF9CVUcpOiBMaWtld2lzZS4KKwkqIHJ0bC5oIChzdHJ1Y3QgcnR4X2RlZikgW09OTFlfSU5UX0ZJRUxEU106IEhhbmRsZSBDT0RFX0ZJRUxEX0JVRy4KKworRnJpIERlYyAxMSAxNzo1Njo1MyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1zZWFyY2guYyAobG9va3VwX25lc3RlZF9maWVsZCk6IENoZWNrIGZvciBhc3NpZ25tZW50IHRvIG1lbWJlcnMKKwlvZiBhbiBlbmNsb3NpbmcgY2xhc3Mgb25seSB3aGVuIGxvb2tpbmcgYXQgYSBtZW1iZXIsIG5vdCBhdCBvdGhlcgorCXRoaW5ncyAobGlrZSBuZXN0ZWQgdHlwZXMpLgorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBJZiBhIGNvbnZlcnNpb24gY2FuIGJlIGZvdW5kIHZpYQorCWEgY29uc3RydWN0b3IsIHRoZW4gdXNlIGl0LiAgQWxzbyBmaXggYSB0eXBvIGFib3V0IHdoZW4gdG8KKwlyZXR1cm4gdGhlIHJlc3VsdCBvZiBhIHR5cGUgY29udmVyc2lvbi4KKworRnJpIERlYyAxMSAwODoxNTo1MyAxOTkyICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXNAYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRG9uJ3QgaW5oZXJpdCBhIHJlbG9hZCBpZiB0aGUKKwlwcmV2aW91cyByZWxvYWQgd2Fzbid0IGF0IGxlYXN0IGFzIHdpZGUgYXMgdGhlIGN1cnJlbnQgcmVsb2FkLgorCitGcmkgRGVjIDExIDA3OjE5OjExIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKG91dHB1dF9lcGlsb2cpOiBSZW1vdmUgZ2FyYmFnZSBmcm9tIG9uZSBkZWNsIG9mIEVYVFJBLgorCVN1YnRyYWN0LCBub3QgYWRkLCBzaXplIGZyb20gZnJhbWUgcG9pbnRlci4KKworCSogYTI5a3VuaXguaCAoTElOS19TUEVDKTogVXNlIC1ULCBub3QgLWMsIGZvciBuZXcgZ2xkIGFuZCBjaGFuZ2UgZmlsZQorCW5hbWUgdG8gZGVmYXVsdC5nbGQgZnJvbSBkZWZhdWx0LmxkLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOiBBbGlnbiBwcm9wZXIgZnJhbWUgb2Zmc2V0LgorCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBDaGVjayBmb3Igb3ZlcmZsb3cgd2hlbiBjYW5vbmljYWxpemluZworCWNvbXBhcmlzb24uCisKK1RodSBEZWMgMTAgMTU6NTM6NDEgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBlbnF1aXJlLmMgKGlfZGVmaW5lLCB1X2RlZmluZSwgZl9kZWZpbmUpOiBBZGQgI3VuZGVmIGJlZm9yZSAjZGVmaW5lLgorCSogZml4aW5jLnN2cjQgKGxpbWl0cy5oKTogIEFkZCAjaWZuZGVmLyNlbmRpZiBhcm91bmQgbWFjcm9zIHRoYXQKKwlhcmUgc3VwcG9zZWQgdG8gYmUgZGVmaW5lZCBpbiBmbG9hdC5oLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogT25seSB1c2UgSTJERVNUIGFzIGEgc2NyYXRjaCByZWcgZm9yCisJYSBzcGxpdCBpZiBpdCBkb2VzIG5vdCBvdmVybGFwIGFueSBpbnB1dHMgb2YgTkVXUEFULgorCitUaHUgRGVjIDEwIDEwOjIzOjI4IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoZ2V0X2xhc3RfdmFsdWUpOiBOZXZlciB1c2UgdmFsdWUgZnJvbSBsYXRlciBpbnNuLCBldmVuCisJaWYgcmVnIGlzIG9ubHkgc2V0IG9uY2UuCisKKwkqIGMtdHJlZS5oIChJREVOVElGSUVSX0xJTUJPX1ZBTFVFKTogRGVsZXRlIGR1cGxpY2F0ZSBkZWZpbml0aW9uLgorCitUaHUgRGVjIDEwIDA4OjU0OjAzIDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKQorCisJKiBpMzg2c2NvNC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBpMzg2IGFuZCB1bml4IGhlcmUuCisJKENQUF9TUEVDKTogTm90IGhlcmUuCisKK1dlZCBEZWMgIDkgMTk6MDM6NTUgMTk5MiAgSmVmZnJleSBBLiBMYXcgIChsYXdAc2NoaXJmLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogQ29ycmVjdGx5IGdldCB0aGUgcmV0dXJuIHR5cGUKKwlvZiBERUNMLgorCisJKiB4LXBhIChDQyk6IFNldCB0byAiL3Vzci9sb2NhbC9iaW4vZ2NjIiBpbnN0ZWFkIG9mCisJIi91c3IvbG9jYWwvZ2NjIi4KKworVHVlIERlYyAgOCAxNzo1MDoyNiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBCdW1wIE1laXNzbmVyIHZlcnNpb24gbnVtYmVyIHRvIDMxLgorCShMRUdJVElNSVpFX0FERERSRVNTKTogU3BsaXQgbGFyZ2Ugb2Zmc2V0cywgZXZlbiB3aGVuIG5vdAorCW9wdGltaXppbmcuICBPdGhlcndpc2UsIGlsbGVnYWwgc3RhY2sgb2Zmc2V0cyBjYW4gYmUgZ2VuZXJhdGVkLgorCitUdWUgRGVjICA4IDExOjU1OjUyIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKHNoWzEyM11hZGQpOiBVc2UgInNoYWRkX29wZXJhbmQiIGFzIHRoZSBwcmVkaWNhdGUgZm9yCisJb3BlcmFuZCBvbmUuCisJKiBwYS5jIChzaGFkZF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCitUdWUgRGVjICA4IDA4OjMwOjEzIDE5OTIgIFRvbSBXb29kICAod29vZEBkZy1ydHAuZGcuY29tKSAKKworCSogaHAzMjAuaCAoQVNfQlVHX0ZMT0FUSU5HX0NPTlNUQU5ULCBBU19CVUdfVFJBSUxJTkdfTEFCRUwpOiBOZXcuCisJKFRFWFRfU0VDVElPTl9BU01fT1AsIERBVEFfU0VDVElPTl9BU01fT1ApOiBPdXRwdXQgYWxpZ24gMSB0bworCWFjY29tb2RhdGUgdGhlICJ0cmFpbGluZyBsYWJlbCIgYnVnLgorCShBU01fT1VUUFVUX0RPVUJMRV9PUEVSQU5ELCBBU01fT1VUUFVUX0ZMT0FUX09QRVJBTkQpOiBEZWZpbmUgdG8KKwlvdXRwdXQgdmFsdWVzIGluIGhleCB0byBhY2NvbW9kYXRlIHRoZSAiZmxvYXRpbmcgY29uc3RhbnQiIGJ1Zy4KKwkoUFJJTlRfT1BFUkFORF9GTE9BVCwgUFJJTlRfT1BFUkFORCk6IERpdHRvLgorCisJKiBnY2MuYyAodGVtcF9uYW1lcyk6IE5ldyB2YXJpYWJsZS4KKwkoZG9fc3BlY18xKTogUmV3cml0ZSBNS1RFTVBfRUFDSF9GSUxFIGZvciAlZy8ldS8lVS4KKwkoY2hvb3NlX3RlbXBfYmFzZSk6IEFib3J0IGlmIG1rdGVtcCB5aWVsZHMgYSBudWxsIHN0cmluZy4KKworVHVlIERlYyAgOCAwODozMDoxMyAxOTkyICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzQGRlbGxhLmFwcGxpLnNlKQorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IERvbid0IG91dHB1dCBsaW5lIG5vdGVzCisJZm9yIGltcGxpY2l0IGZvcm1hbHMuCisKK1R1ZSBEZWMgIDggMDY6MjE6NDQgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKG1heF91aWQpOiBOZXcgdmFyaWFibGUuCisJKGNzZV9lbmRfb2ZfYmFzaWNfYmxvY2spOiBVc2UgaXQgdG8gaWdub3JlIGluc25zIG1hZGUgYnkgQ1NFLgorCShjc2VfbWFpbik6IFNldCBpdC4KKworTW9uIERlYyAgNyAyMToyMjoyOSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjcC1pbml0LmMgKGRvX2ZyaWVuZCk6IFJldmVydCBjaGFuZ2Ugb2YgU2VwdCAxOyBpdCBzZWVtcyB0byBoYXZlCisJYnJva2VuIHByb3Blcmx5IGVtaXR0aW5nIGZyaWVuZHMuCisKK01vbiBEZWMgIDcgMTk6MDk6MjUgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogTWFrZSBhbm90aGVyIGNvcHkgb2YgYWxsIHRoZQorCVJUTCBpZiB3ZSBjaGFuZ2VkIHNvbWV0aGluZyBhbmQgd2UgYXJlbid0IHBlcm1hbmVudGx5IHJlcGxhY2luZy4KKworCSogcm9tcC5tZCAocmVsb2FkX291dHtxLGh9aSk6IFdyaXRlIGFzIHByb3BlciBQQVJBTExFTC4KKworU3VuIERlYyAgNiAxNjoyNzoxNCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5tZCAoYWRkLW11bHQpOiBBZGQgbWlzc2luZyBgJicgaW4gY29uc3RyYWludHMgb2Yga2x1ZGdlCisJcGx1cy9wbHVzL211bHQgcGF0dGVybi4KKworU3VuIERlYyAgNiAxNjoyNjo0MiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBDb3JyZWN0IHNpZ24gb2YgY29tcGxleCBxdW90aWVudCBpbWFncGFydC4KKworU3VuIERlYyAgNiAwNzo1OToxNiAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBTZXQgTWVpc3NuZXIgdmVyc2lvbiAjIHRvIDMwLgorCShMRUdJVElNSVpFX0FERFJFU1MpOiBGb3IgPHJlZz4rPGxhcmdlIGludD4gYWRkcmVzc2VzLCByZXdyaXRlIHNvCisJdGhhdCA8cmVnPiArICg8bGFyZ2UgaW50PiAmIH4weDdmZmYpIGlzIHB1dCBpbnRvIGEgcHNldWRvIHJlZy4KKwlUaGlzIGlzIHRvIGFsbG93IENTRSB0byBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBmb3IgcmVwZWF0ZWQKKwlyZWZlcmVuY2VzIGluIHRoZSBzYW1lIGdlbmVyYWwgdmljaW5pdHksIHN1Y2ggYXMgd2hlbiBsYXJnZSBzdGFjaworCWZyYW1lcyBhcmUgdXNlZC4KKworCSogY29uZmlnL2RlYy1vc2YxLmggKExJTktfU1BFQyk6IFBhc3MgLWNhbGxfc2hhcmVkLCAtbm9fYXJjaGl2ZSwKKwlhbmQgLWV4YWN0X3ZlcnNpb24gdG8gdGhlIGxpbmtlci4gIElmIC1jYWxsX3NoYXJlZCwgZG8gbm90IHBhc3MKKwktbm9uX3NoYXJlZCB0byB0aGUgbGlua2VyLgorCSogbWlwcy01LmggKExJTktfU1BFQyk6IERpdHRvLgorCSogbWlwcy01YnNkLmggKExJTktfU1BFQyk6IERpdHRvLgorCSogbWlwcy1zdnI0LmggKExJTktfU1BFQyk6IERpdHRvLgorCSogbWlwcy1zeXN2LmggKExJTktfU1BFQyk6IERpdHRvLgorCitGcmkgRGVjICA0IDE5OjUwOjI5IDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IGZpeCBfY3BsdXNwbHVzIHR5cG8gaW4gU0NPJ3MgdGluZm8uaAorCitGcmkgRGVjICA0IDE5OjIyOjM1IDE5OTIgIFJhbmR5IFMuIFdlbGNoICAocmFuZHlAa2Npbi5hbHBoYWNkYy5jb20pCisKKwkqIHhtLXBsZXh1cy5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAobTY4ay1wbGV4dXMtc3lzdiopOiBVc2UgaXQuCisKK0ZyaSBEZWMgIDQgMTk6MjE6NDQgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBVc2UgVFlQRV9NQUlOX1ZBUklBTlQgd2hlbiBjb21wYXJpbmcKKwlyZXR1cm4gdHlwZSB3aXRoIHByZXZpb3VzIHByb3RvdHlwZSBkZWNsYXJhdGlvbi4gCisKKwkqIGNjY3AuYyAob3V0cHV0X2xpbmVfY29tbWFuZCk6IFVzZSBhbGxvY2EgZm9yIGxpbmVfY21kX2J1Zi4KKworRnJpIERlYyAgNCAxOToyMDozNCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBBbHdheXMgcGFzcyByZXN1bHQgb2YgY2Fub25fcmVnIHRocm91Z2gKKwl2YWxpZGF0ZV9jaGFuZ2UgYmVmb3JlIHVzaW5nIGl0IGluIGluc24uCisKKwkqIGMtZGVjbC5jLCBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgdXNlIGhhcmR3aXJlZAorCXNpemVzIGZvciB0aGUgbW9kZXMgd2hlbiBtYWtpbmcgaW50e1EsSCxTLER9SV90eXBlX21vZGUgYW5kIHRoZQorCXVuc2lnbmVkIHZlcnNpb25zIG9mIHRoZW07IHRoZSBhY3R1YWwgc2l6ZSBkZXBlbmRzIG9uIEJJVFNfUEVSX1VOSVQuCisKK0ZyaSBEZWMgIDQgMTk6MTM6MzUgMTk5MiAgSm9uYXMgT2xzc29uICAobGpvQHBvLmN3cnUuZWR1KQorCisJKiBpMzg2YnNkLmggKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCwgSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OKToKKwlDb3B5IGRlZmluaXRpb25zIGZyb20gaTM4NnY0LmggdG8gZ2V0IFBJQyBjb2RlIGNvcnJlY3QuCisKK1RodSBEZWMgIDMgMTk6MjA6MTQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmM6IEluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIHN5c3RlbXMgdGhhdCBuZWVkIHRoaW5ncyBmb3IKKwlzaWduYWwuaC4KKworVGh1IERlYyAgMyAwMTo0MDo0MiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmMgKGZpbmFsaXplX3BpYyk6ICBSZW1vdmUgIipfIiBmcm9tIEdMT0JBTF9PRkZTRVRfVEFCTEUgbmFtZS4KKwkqIHNwYy1zb2wyLmggKEFTTV9TUEVDKTogUGFzcyAiLUsgUElDIiB0byBhc3NlbWJsZXIgd2hlbiBwaWMuCisJKEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTik6IERlZmluZS4KKwkoU0VMRUNUX1JUWF9TRUNUSU9OKTogRGVmaW5lLgorCisJKiBmaXhpbmNsdWRlcyAoc3lzL3R5cGVzLmgpOiBDaGVjayBmb3IgWyBcdF1zaXplX3Qgbm90IHNpemVfdC4KKworV2VkIERlYyAgMiAxNTo0MDozNiAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUgKHJzNjAwMC1pYm0tYWl4MzIpOiBOZXcgdGFyZ2V0LgorCSogcnM2MDAwLWFpeDMyLmg6IE5ldyBmaWxlLgorCitUdWUgRGVjICAxIDE4OjA1OjIwIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZTIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogUmV2ZXJ0IGNoYW5nZSBvZiBOb3YgMiwKKwljb25jZXJuaW5nIGNsZWFyaW5nIHRoZSBUUkVFX1ZBTFVFIG9mIGEgZGVmYXVsdCBwYXJhbWV0ZXIuCisKK1R1ZSBEZWMgIDEgMTM6MzM6MjUgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChvcHRpbWl6ZV9yZWdfY29weV8yKTogQ29ycmVjdCByZWdfbl9yZWZzIHVwZGF0ZXMuCisKKwkqIE1ha2VmaWxlLmluIChJTlNUQUxMRURfSCk6IEFkZCBzeXNsaW1pdHMuaC4KKworVHVlIERlYyAgMSAxMTowOTo1MCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBXaGVuIGxvb2tpbmcgZm9yIGEgZGVmYXVsdCBhcmcKKwlpbml0aWFsaXplZCBieSBhIGN0b3IsIGJlIGNhcmVmdWwgb2YgYSBudWxsIHJlZiB3LyBvcGVyYW5kIDEuCisKK1R1ZSBEZWMgIDEgMTA6NDM6MTMgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChudW1fc2lnbl9iaXRfY29waWVzKTogUmV0dXJuIDEgb24gZmFpbHVyZSwgbm90IDAuCisJRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2U7IHJldHVybiAxIG9uIGZhaWx1cmUsIG5vdCBCSVRXSURUSC4KKworVHVlIERlYyAgMSAwOTozOTo0NyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IERvIG5vdCBlbWl0IGEgLmxvYyBiZWZvcmUgdGhlCisJZnVuY3Rpb24gaWYgZGVidWcgbGV2ZWwgaXMgMS4gIFRoaXMgY29uZnVzZXMgZ2RiLgorCitUdWUgRGVjICAxIDAyOjQ4OjI5IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaXNjLmggKFRBUkdFVF9ERUZBVUxUKTogTmV3IG1hY3JvIC0gZG9uJ3QgbWFrZSBUQVJHRVRfSUVFRV9GUAorCWRlZmF1bHQgZm9yIElTQy4KKworRnJpIE5vdiAyNyAwMTozMDo0MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi4zLjIgcmVsZWFzZWQuCisKKwkqIG9iamMvY29yZS5jIChzZWFyY2hGb3JNZXRob2RJbkhpZXJhcmNoeSk6CisJSWYgU0VMIG9yIE5BTUUgaXMgMCwgcmV0dXJuIDAuCisKKwkqIGdjYy5jIChMSU5LX0xJQkdDQ19TUEVDSUFMXzEpOiBOZXcgcGFyYW1ldGVyLgorCSogcnM2MDAwLmggKExJTktfTElCR0NDX1NQRUNJQUxfMSk6IERlZmluZWQuCisKKwkqIHQtaHAzMjBnIChSQU5MSUIsIFJBTkxJQl9URVNULCBBUiwgQVJfRkxBR1MpOgorCUp1c3QgY29weSB2YWx1ZSBvZiAuLi5fRk9SX1RBUkdFVC4KKwkoTElCQ09OVkVSVCk6IFVzZSBUQVJHRVRfVE9PTFBSRUZJWC4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2FkcykgW1NNQUxMX1JFR0lTVEVSX0NMQVNTRVNdOgorCURvbid0IHVzZSBwcmVmZXJyZWRfY2xhc3MgZm9yIGEgbXVsdGl3b3JkIHJlZ2lzdGVyLgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBJbml0aWFsaXplIHNlYXJjaHB0ciB0byAwLgorCitGcmkgTm92IDI3IDA3OjQwOjU0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIG1ha2VfZmllbGRfYXNzaWdubWVudCwgbnVtX3NpZ25fYml0X2NvcGllcyk6CisJUHJvdGVjdCBjYWxscyB0byBzaWduaWZpY2FudF9iaXRzOyB1bmxlc3Mgd2Ugb25seSBjYXJlIGlmIHRoZQorCXJlc3VsdCBpcyBhIHBvd2VyIG9mIHR3bywgZG9uJ3QgY2FsbCBpZiBtb2RlIHNpemUgaXMgd2lkZXIKKwl0aGFuIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCisJKGV4dGVuZGVkX2NvdW50LCBzaW1wbGlmeV9zaGlmdF9jb25zdCwgc2ltcGxpZnlfY29tcGFyaXNvbik6IExpa2V3aXNlLgorCitUaHUgTm92IDI2IDEwOjMxOjQ4IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3N0ZGFyZy5oICh2YV9lbmQpOiAjdW5kZWYgYmVmb3JlIHRoZSBkZWNsYXJhdGlvbi4KKworCSogZ3N0ZGFyZy5oICh2YV9hcmcpOiBBbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGZvciBiaWctZW5kaWFuIG1hY2hpbmVzLgorCSogZ3ZhcmFyZ3MuaCAodmFfYXJnKTogQ29weSBib3RoIGRlZmluaXRpb25zIGZyb20gZ3N0ZGFyZy5oLgorCisJKiBsaW1pdHguaCwgbGltaXQueTogVGVzdCBhbmQgZGVmaW5lIF9HQ0NfTElNSVRTX0hfLCBub3QgX0xJTUlUU19IXy4KKworCSogbWlwcy5jIChtaXBzX2RlYnVnZ2VyX29mZnNldCk6IERvbid0IGNyYXNoIGZvciB1bmtub3duIGNhc2VzLgorCisJKiBjLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IENhbGwgcGVkYW50aWNfbHZhbHVlX3dhcm5pbmcKKwlmb3IgKmFsbCogY2FzZXMgb2YgaW5jcmVtZW50aW5nIGEgY2FzdC4KKworCSogbGliZ2NjMi5jIChfX3VkaXZfd19zZGl2KTogQ2FzdCAxIGJlZm9yZSBzaGlmdGluZyBieSAzMS4KKworCSogZml4aW5jbHVkZXMgKFBXRENNRCk6IE5ldyB2YXJpYWJsZSwgc2V0IHNwZWNpYWxseSBmb3IgQXBvbGxvcy4KKwlVc2UgaXQgdG8gZ2V0IHRoZSB3b3JraW5nIGRpci4KKworCSogY29tYmluZS5jIChudW1fc2lnbl9iaXRfY29waWVzKTogRml4IDEtb2ZmIGVycm9yIGluIFBMVVMgY2FzZS4KKworCSogYysrOiBQdXQgbmV3bGluZSBpbnRvIGBmb3IgYXJnIGRvJy4KKworVGh1IE5vdiAyNiAwODozMjoyMCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBtZWQuYyAoc3RydWN0IGFsZ29yaXRobSk6IE1ha2UgY29lZmYgYSBIT1NUX1dJREVfSU5ULgorCisJKiByb21wLmMgKG91dHB1dF9lcGlsb2cpOiBBbHdheXMgY2FsbCBvdXRwdXRfZnBvcHMuCisKK1dlZCBOb3YgMjUgMTY6MjQ6NDMgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1maXhpbmNsdWRlcyk6IFVzZSBTWVNURU1fSEVBREVSX0RJUi4KKworCSogbTY4a3Nncy5oIChBU01fT1VUUFVUX0RPVUJMRV9PUEVSQU5EKTogUmVhbGx5IHVzZSB0aGUgb3BlcmFuZCBWQUxVRS4KKworCSogdHJlZS5oIChDT05TVFJVQ1RPUl9OQU1FX0ZPUk1BVCk6IExldCBjb25maWcuaCBvdmVycmlkZSB0aGlzLgorCSogdG93ZXItYXMuaCAoQ09OU1RSVUNUT1JfTkFNRV9GT1JNQVQpOiBEZWZpbmVkLgorCisJKiBjKys6IFJlcGxhY2UgYGZvciBhcmcgZG8nIHdoaWNoIGFzaCBjYW4ndCBoYW5kbGUuCisKKwkqIHQtbmV4dCAoT1RIRVJfRklYSU5DTFVERVNfRElSUyk6IERlbGV0ZSAvTmV4dERldmVsb3Blci9IZWFkZXJzLgorCisJKiBhcG9sbG82OC5oIChIQVZFX0FURVhJVCk6IENvbW1lbnRlZCBvdXQuCisKKwkqIHJlZ2NsYXNzLmM6IEZpeCB0eXBvIGluIHVzZSBvZiBTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTLgorCShjb3B5X2Nvc3QpOiBGaXggdHlwbyBpbiB1c2Ugb2YgU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MuCisKK1dlZCBOb3YgMjUgMTQ6MTU6NTAgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBmaXhpbmMuc3ZyNCAocmVnZXhwLmgpOiBEb24ndCBhZGQgYSBnZXRybmdlIGRlY2xhcmF0aW9uIGlmIGEKKwljb25mbGljdGluZyBkZWNsYXJhdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuCisKK1dlZCBOb3YgMjUgMDY6NDc6MTggMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmggKExJTktfTElCR0NDX1NQRUNJQUwpOiBObyBsb25nZXIgZGVmaW5lLgorCisJKiBzdG10LmMgKGV4cGFuZF92YWx1ZV9yZXR1cm4pOiBEb24ndCBlbWl0IG1vdmUgYmV0d2VlbiBkaWZmZXJpbmcKKwltb2RlcyB3aGVuIFBST01PVEVfRlVOQ1RJT05fUkVUVVJOIGlzIGRlZmluZWQ7IGNvbnZlcnQgaW5zdGVhZC4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBFbnN1cmUgYSBSRUcgdXNlZCBhcworCUNPUFkgaGFzIFJFR19VU0VSVkFSX1Agc2V0IGlmIExPQyBkb2VzLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBleHBhbmRfdHdvdmFsX2Jpbm9wKTogSWYgd2UgYXJlIGdvaW5nCisJdG8gZmFpbCwgcmVtb3ZlIGFueSBsb2FkIGZyb20gTUVNIHdlIGRpZCBkdWUgdG8gLWZmb3JjZS1tZW07CisJaWYgdGhlIE1FTSB3YXMgdm9sYXRpbGUsIHRoaXMgd2lsbCBjYXVzZSBhbiBleHRyYSBsb2FkLgorCShleHBhbmRfY29tcGxleF9hYnMpOiBMaWtld2lzZS4KKwlDb3JyZWN0IHVzZSBvZiB2YXJpYWJsZSBMQVNUIHNvIGl0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgbG9hZAorCWZyb20gTUVNICh0byBmaXggdW5yZWxhdGVkIGJ1ZykuCisKK1R1ZSBOb3YgMjQgMDA6MjM6MzkgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBpMzg2YnNkLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogVXNlIG1jb3VudCwgbm90IF9tY291bnQuCisKKwkqIHQtbmV4dCAoT1RIRVJfRklYSU5DTFVERVNfRElSUyk6IExlYXZlIGp1c3QgL0xvY2FsRGV2ZWxvcGVyL0hlYWRlcnMKKwlhbmQgL05leHREZXZlbG9wZXIvSGVhZGVycy4KKworTW9uIE5vdiAyMyAyMjowNjozMSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG5zMzJrLm1kIChtb3ZzaSk6IFNwbGl0IGFsdCAxIHRvIGRlcHJlY2F0ZSB4eSBjbGFzc2VzIGluIG9wZXJhbmQgMS4KKworCSogY29tYmluZS5jIChtYWtlX2V4dHJhY3Rpb24pOiBXaGVuIG1ha2luZyBhIGxvdyBwYXJ0IHN1YnJlZyBvZiBhIHJlZywKKwl1c2UgaW5uZXJfbW9kZSwgbm90IGlzX21vZGUuCisKK01vbiBOb3YgMjMgMjE6MTE6MTMgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcm9tcC5oIChBU01fRklMRV9TVEFSVCk6IFN0b3AgYXQgZmlyc3QgYmxhbmsgaW4gVkVSU0lPTl9TVFJJTkcuCisKK01vbiBOb3YgMjMgMjE6MDk6MjAgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAocmFuZ2VfdGVzdCk6IENvbnZlcnQgdGhlIGNvbnN0YW50cyB0byB0aGUgdW5zaWduZWQKKwl0eXBlIGJlZm9yZSBleHBhbmRpbmcgdGhlIHJhbmdlIHRlc3QuCisKK01vbiBOb3YgMjMgMjA6NTQ6NDUgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJTW9uIE5vdiAyMyAxMzoyMTo0MyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjKysgKGZpcnN0KTogT25seSBzaGlmdCBpZiAkZmlyc3QgaXMgbm8sIG9uIHRoZSBjaGFuY2Ugd2UgZ290IG5vCisJYXJndW1lbnRzIGF0IGFsbC4gIElmIHdlIGRpZG4ndCBnZXQgYW55dGhpbmcsIHNheSBzbyAoc2luY2UgLWxnKysKKwl3aWxsIGZha2Ugb3V0IHRoZSBnY2MgZHJpdmVyIGludG8gdGhpbmtpbmcgd2Ugd2FudCB0byBkbyBzb21ldGhpbmcpLgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2RlY2wpOiBJZiBncm9rZGVjbGFyYXRvciByZXR1cm5zIGEKKwl2b2lkX3R5cGVfbm9kZSwgcmV0dXJuIGEgTlVMTF9UUkVFLgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHJfMSk6IFdoZW4gY2FsbGluZyBidWlsZF9vcGZuY2FsbCBmb3IKKwlgb3BlcmF0b3I9JywgdXNlIG1ha2Vfbm9kZSB0byBjcmVhdGUgYSBwbGFpbiBOT1BfRVhQUiBmb3IgaXQgdG8gdXNlLAorCXJhdGhlciB0aGFuIHRyeWluZyB0byBwYXNzIE5PUF9FWFBSIGRvd24gaG9waW5nIGl0IGdldHMgdGhlcmUgaW50YWN0LgorCShidWlsZF9tb2RpZnlfZXhwcik6IERpdHRvLgorCSogY3AtcGFyc2UueSAoZXhwcl9ub19jb21tYXMpOiBEaXR0by4KKwkqIGNwLW1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFVzZSBUUkVFX0NPREUgb24gQVJHMyBmb3IgYQorCU1PRElGWV9FWFBSLCBzaW5jZSBpdCdsbCBiZSBjb21pbmcgaW4gcHJvcGVybHkgYXMgYSB0cmVlIG5vdy4KKworCVNhdCBOb3YgMjEgMDI6MzM6MjggMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogQ2xlYXIgREVDTF9SRUdJU1RFUiBpZiB3ZSdyZQorCWdvaW5nIHRvIGNhbGwgYSBjdG9yLCBvdGhlcndpc2Ugd2UgbWF5IGVuZCB1cCBnZW5lcmF0aW5nIGJvZ3VzIGFuZAorCWNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyBhYm91dCB0YWtpbmcgdGhlIGFkZHIgb2Ygc29tZXRoaW5nIGRlY2xhcmVkCisJdG8gYmUgYHJlZ2lzdGVyJy4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFJlY29nbml6ZSBhIHB0ci10by1tZXRob2QKKwl0aGF0IGlzIGJlaW5nIHBhc3NlZCBpbiBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IG9yIGFzIHBhcnQgb2YKKwlhIENPTVBPTkVOVF9SRUYuCisJKGJ1aWxkX2luZGlyZWN0X3JlZik6IElmIEVSUk9SU1RSSU5HIGlzIE5VTEwgKGl0J3MgcGFzc2VkIGluIHRoYXQKKwl3YXkgaW4gbWFueSBwbGFjZXMpLCB0aGVuIGRvbid0IHRyeSB0byB1c2UgaXQuCisKKwlUaHUgTm92IDE5IDAxOjQxOjU4IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVtLmMgKGRvX2J1aWx0aW5fdHlwZSk6IFJlY29nbml6ZSBgdycsIGEgd2lkZSBjaGFyYWN0ZXIsIHNpbmNlCisJaXQncyBub3cgYSB0eXBlIGFjY29yZGluZyB0byB0aGUgQU5TSSBYM0oxNiB3b3JraW5nIHBhcGVyOyBvdXRwdXQKKwkid2NoYXJfdCIgZm9yIGl0LgorCShjcGx1c19kZW1hbmdsZSk6IEFjY2VwdCBgdycgYXMgYW4gaW50ZWdyYWwgdHlwZS4KKworCVdlZCBOb3YgMTggMjE6Mjk6MTQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworIAkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZS1lbmFibGUgY29kZSB0byBjdXQgZG93biBvbiB0aGUgc2l6ZQorCW9mIHN5bWJvbCBvdXRwdXQsIHRoZSBwb3NpdGl2ZXMgb3V0d2VpZ2ggdGhlIG5lZ2F0aXZlcy4KKworCVdlZCBOb3YgMTggMTk6NTE6NTkgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoZGZzX3dhbGspOiBNb3ZlIHNldHRpbmcgb2YKKwl2YmFzZV9kZWNsX3B0cl9pbnRlcm1lZGlhdGUgb3V0IG9mICNpZmRlZiBjb2RlLgorCisJV2VkIE5vdiAxOCAxODo0OToxMyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBNYWtlIHdvcmRpbmcgb24gZXJyb3IgbWVzc2FnZQorCXN0cm9uZ2VyLgorCisJVHVlIE5vdiAxNyAxNzo0NjoxMSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoQ0hFQ0tfY29udmVydF9wb2ludGVyX3RvX3NpbmdsZV9sZXZlbCk6IERvbid0IGRlZmluZS4KKworTW9uIE5vdiAyMyAxOTo0NDozOCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG1vdDMzMDAuaCAoc3dpdGNoX3RhYmxlX2RpZmZlcmVuY2VfbGFiZWxfZmxhZyk6IERlZmluZSBpdC4KKworCSogbnMzMmsubWQgKGFkZHNpMyk6IEFkZCAmIGZvciBhbHRlcm5hdGl2ZSAxIGluIG9wZXJhbmQgMC4KKworTW9uIE5vdiAyMyAxODoyOToyNyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGdlbmF0dHJ0YWIuYyAob2JzdGFjay5oKTogSW5jbHVkZSBhZnRlciBzeXMvdGltZS5oLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRm9yIGJ1aWx0aW5zLCBjcmVhdGUgbmV3IGZ1bmN0aW9uCisJdHlwZSBpbnN0ZWFkIG9mIHRyeWluZyB0byBtb2RpZnkgb2xkIG9uZS4KKworTW9uIE5vdiAyMyAxNjoyODozNiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGkzODZic2QuaCAoQ09NTUVOVF9CRUdJTik6IFJlZGVmaW5lIGFzICMuCisJKEFTTV9BUFBfT04sIEFTTV9BUFBfT0ZGKTogUmVkZWZpbmUgdG8gdXNlICMuCisKKwkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IEluaGliaXQgeC0xIHNwZWNpYWwgY2FzZQorCXdoZW4geCBpcyBhIHBhcmFkb3hpY2FsIHN1YnJlZy4KKworCSogeG0tbGludXguaCAobWFsbG9jLCBjYWxsb2MpOiBEZWZpbml0aW9ucyBkZWxldGVkLgorCitNb24gTm92IDIzIDExOjUyOjQxIDE5OTIgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNjaGlyZi5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKHNoWzEyM11hZGQpOiBVc2UgIm5vbm1lbW9yeV9vcGVyYW5kIiBpbnN0ZWFkIG9mIAorCSJyZWdpc3Rlcl9vcGVyYW5kIiBhcyB0aGUgcHJlZGljYXRlIGZvciB0aGUgZmlyc3Qgb3BlcmFuZC4KKworTW9uIE5vdiAyMyAwMDoyOToyNyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLWkqIGFmdGVyIC1VKi4KKworU3VuIE5vdiAyMiAxNzowMzo0OCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGhwMzIwLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogQ29tcGxldGUgcmVwbGFjZW1lbnQuCisKKwkqIHhtLWhwMzIwLmggKGluZGV4LCByaW5kZXgpOiBEZWZpbmVkLgorCisJKiBnc3RkZGVmLmg6IEZpeCBwcmV2IGNoYW5nZTsgdGVzdCBvZiBfU1REREVGX0ggd2FzIGJhY2t3YXJkcy4KKworU3VuIE5vdiAyMiAxNjoxMjozOCAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogdG9wbGV2LmMgKFdfb3B0aW9ucyk6IERlbGV0ZSAtV3JldHVybi10eXBlLCBhcyBpdCBpcyBpbiBsYW5nX29wdGlvbnMuCisJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogRGVjb2RlIC1XcmV0dXJuLXR5cGUuCisKKwkqIGMtZGVjbC5jLCBjcC1kZWNsLmMgKHB1c2hkZWNsKTogRG9uJ3QgaW5oZXJpdCBERUNMX0lOSVRJQUwgd2hlbgorCXJlZGVjbGFyaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgorCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFVzZSB0aGUgb3JpZ2luYWwKKwlkZWNsYXJhdGlvbiBvZiB0aGUgaW5saW5lZCBmdW5jdGlvbiByYXRoZXIgdGhhbiBhIHJlZGVjbGFyYXRpb24gYXMKKwl0aGUgQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOIG9mIHRoZSBib2R5LgorCitTYXQgTm92IDIxIDE5OjU0OjU3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluKTogRG8gLUQncyBhbmQgLUEncyBhbmQgLVUncyBpbiBvcmRlciBzcGVjaWZpZWQuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFdoZW4gcnVubmluZyBjcHAsCisJbW92ZSAle0QqfSBhbmQgJXtVKn0gKGluIHRoYXQgb3JkZXIpIGp1c3QgYmVmb3JlICVpLgorCitTYXQgTm92IDIxIDE4OjI0OjU1IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBoYWwuZ251LmFpLm1pdC5lZHUpCisKKwkqIHhtLXBhLmg6IFJlbW92ZSAjaWZkZWYgaHB1eCBzdHVmZi4KKwkoU19JU0RJUik6IFJlbW92ZS4KKwkqIHhtLXBhaHB1eC5oOiBOZXcgZmlsZSwgZGV2ZWxvcGVkIGZyb20gb2xkIHhtLXBhLmguICBEZWZpbmUKKwlyaW5kZXgvaW5kZXguCisJKiBwYS1ocHV4Ny5oLCBwYS1ndXg3Lmg6IE5ldyBmaWxlcy4KKworCSogY29uZmlndXJlIChocHBhMS4wLSotaHB1eCosIGhwcGExLjAtKi1ocHV4Kik6IFVzZSB4bS1wYWhwdXguaC4KKwkoaHBwYTEuMC0qLWhwdXg3Kik6IE5ldyBhbHRlcm5hdGl2ZS4KKworU2F0IE5vdiAyMSAxNDoxMDo1NyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYy1zb2wyLmggKFNXSVRDSF9UQUtFU19BUkcsIExJTktfU1BFQyk6IE5ldyBvdmVycmlkZSBkZWZpbml0aW9ucy4KKworCSogeG0tbW90MzMwMC5oIChpbmRleCwgcmluZGV4KTogRGVmaW5lZC4KKworU2F0IE5vdiAyMSAwNzo1NDo1MyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5oIChNSVBTX1ZFUlNJT04pOiBTZXQgTWVpc3NuZXIgdmVyc2lvbiBudW1iZXIgdG8gMjkuCisKKwkqIG1pcHMuYyAobWlwc19leHBhbmRfcHJvbG9ndWUpOiBJZiBwcm9maWxpbmcsIGVtaXQgYW4gaW5zbiB0bworCWJsb2NrIG90aGVyIGluc25zIGZyb20gYmVpbmcgc2NoZWR1bGVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZQorCXByb2xvZ3VlLgorCisJKiBtaXBzLm1kIChibG9ja2FnZSk6IE5ldyB1bnNwZWNfdm9sYXRpbGUgaW5zbiB0byBwcmV2ZW50IG90aGVyCisJaW5zbnMgZnJvbSBiZWluZyBzY2hlZHVsZWQgYmVmb3JlIGl0LgorCitTYXQgTm92IDIxIDA2OjAzOjM4IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIHNkYm91dC5jICh0ZW1wbGF0ZV9uYW1lX3ApOiBOZXcgZnVuY3Rpb24uCisJKHNkYm91dF9yZWNvcmRfdHlwZV9uYW1lKTogVXNlIGl0IHRvIHBvc3NpYmx5IHVzZSB0aGUKKwlERUNMX0FTU0VNQkxFUl9OQU1FIGluc3RlYWQgb2YgREVDTF9OQU1FIGlmIGxvb2tpbmcgYXQgYSB0ZW1wbGF0ZS4KKwkoc2Rib3V0X3N5bWJvbCk6IERpdHRvLgorCitGcmkgTm92IDIwIDE1OjMxOjA1IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogSGFuZGxlIG5lZWQgZm9yIG5hbWUgb2YgYSBSRUNPUkRfVFlQRQorCXdoZW4gaXQgaGFzIG5vbmUuCisKKwkqIGNvbmZpZ3VyZSAoc3BhcmMtKi1zb2xhcmlzMik6IFNldCBicm9rZW5faW5zdGFsbC4KKworCSogaW50ZWdyYXRlLmMgKHN1YnN0X2NvbnN0YW50cyk6IEluaGliaXQgc3BlY2lhbCB0cmVhdG1lbnQgb2Ygc3VicmVnCisJd2hlbiB0aGUgc3R1ZmYgaW5zaWRlIGlzIG5vdCBhIHJlZy4KKworCSogY29uZmlnL3BsZXh1cy5oIChTSVpFX1RZUEUpOiBGaXggc3ludGF4LgorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogSGFuZGxlIE1LVEVNUF9FQUNIX0ZJTEUuCisKK0ZyaSBOb3YgMjAgMTU6MTA6MjAgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlcyAobWF0aC5oKTogR2V0IHJpZCBvZiBpbmNvbnNpc3RlbnQgaW5saW5lIGRlZmluaXRpb25zCisJZm9yIGFicyB0aGF0IGFyZSBwcmVzZW50IGluIEhQLVVYIDguMC4KKworRnJpIE5vdiAyMCAxMDowNzo0OCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY29sbGVjdDIuYyAoRlJFQUQsIEZXUklURSk6IFVuZGVmIHRoZXNlIG1hY3JvcyBpZiB0aGV5IHdlcmUKKwlkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgbGRmY24uaC4KKworRnJpIE5vdiAyMCAxNTozODo0NyAxOTkyICBUb20gV29vZCAgKHdvb2RAZGctcnRwLmRnLmNvbSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBNYXJrIGFsbCBub3RlcyBhcyBpbnRlZ3JhdGVkLgorCisJKiBmaW5hbC5jIChmaW5hbCk6IFdoZW4gcHJvZHVjaW5nIFNEQiBkZWJ1Z2dpbmcgaW5mbywgZGVsZXRlIGxpbmUKKwludW1iZXIgbm90ZXMgZnJvbSBpbmxpbmVkIGZ1bmN0aW9ucyBpbiBvdGhlciBmaWxlcyBhcyB3ZWxsIGFzCisJZHVwbGljYXRlIGxpbmUgbnVtYmVyIG5vdGVzLgorCitGcmkgTm92IDIwIDA1OjI0OjE2IDE5OTIgIEppbSBCbGFuZHkgIChqaW1iQHRvdG9yby5jcy5vYmVybGluLmVkdSkKKworCSogY29uZmlnLnN1YjogQWRkZWQgbWFjaGluZXMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zIGZvciBFbWFjcworCXBvcnRzLCBzaW5jZSBFbWFjcyBub3cgdXNlcyBjb25maWcuc3ViIGZvciBpdHMgY29uZmlndXJhdGlvbi4KKwlOZXcgbWFudWZhY3R1cmVycyByZWNvZ25pemVkIG5vdCB0byBiZSBvcGVyYXRpbmcgc3lzdGVtczogSGlnaAorCUxldmVsIEhhcmR3YXJlIChoaWdobGV2ZWwsIGRlZmF1bHRzIHRvIHVzaW5nIEJTRCksIEdvdWxkCisJKGdvdWxkLCBkZWZhdWx0cyB0byBTeXN0ZW0gViksIENvbW1vZG9yZSAoY2JtLCBkZWZhdWx0cyB0bworCWFtaWdhZG9zKSwgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAobnMsIGRlZmF1bHRzIHRvIEdlbml4KSwgYW5kCisJTWFzc2NvbXAgKG1hc3Njb21wLCBkZWZhdWx0cyB0byBSVFUpLgorCVJlY29nbml6ZSB0aGUgTlMxNjAwIChuczE2aykgYW5kIHRoZSBDbGlwcGVyIChjbGlwcGVyKSBhcworCXByb2Nlc3NvcnMuCisJUmVjb2duaXplIHRoZXNlIHByb2Nlc3NvcnMgd2l0aCBkZWZhdWx0IG1hbnVmYWN0dXJlcnM6IHRoZQorCUN5ZHJhIChjeWRyYSkgZnJvbSBDeWRyb21lIChjeWRyb21lKSwgdGhlIFhQUzEwMCAoeHBzMTAwKSBmcm9tCisJSG9uZXl3ZWxsIChob25leXdlbGwpLCBhbmQgdGhlIE9yaW9uIChvcmlvbikgYW5kIE9yaW9uIDEvMDUKKwkob3Jpb24xMDUpIGZyb20gSGlnaCBMZXZlbCBIYXJkd2FyZSAoaGlnaGxldmVsKS4KKwlJZiB0aGUgSVNDIG9wZXJhdGluZyBzeXN0ZW0gaXMgZ2l2ZW4gd2l0aCBhIHZlcnNpb24gbnVtYmVyLAorCWRvbid0IGtpbGwgaXQgYW5kIHNldCBpdCB0byAyLjI7IGp1c3QgaGF2ZSBpdCBkZWZhdWx0IHRvIDIuMgorCWlmIG9taXR0ZWQuCisJTWFrZSBJcml4IFNHSSdzIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbSwgbm90IFNZU1YuCisJTWFrZSBCU0QgRW5jb3JlJ3MgZGVmYXVsdCwgc28gaXQgYXBwbGllcyBmb3IgYWxsIEVuY29yZQorCW1hY2hpbmVzLCBub3QganVzdCB0aGUgdW1heCBhbmQgbW1heCBhYmJyZXZpYXRpb25zLgorCUFsbCBvZiBFbmNvcmUncyBtYWNoaW5lcyB1c2UgQlNELCBub3QganVzdCB0aGUgbnMzMmstYmFzZWQKKwlvbmVzLiAgTWFrZSBpdCB0aGUgbWFudWZhY3R1cmVyJ3MgZGVmYXVsdC4KKwlNYWtlIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4gb3BlcmF0aW5nIHN5c3RlbSBmb3IgYSBHb3VsZAorCW1hY2hpbmUuICBNYWtlIHN5c3YgdGhlIG1hbnVmYWN0dXJlcidzIGRlZmF1bHQsIHNvIGl0IGFwcGxpZXMKKwl3aGVuIHdlIHNwZWNpZnkgdGhlIG1hbnVmYWN0dXJlciBhcyB3ZWxsIGFzIHdoZW4gd2Ugb21pdCBpdC4KKwlBZGQgVW5pcGx1cyAodW5pcGx1cyksIElyaXMgKGlyaXMpLCBYZW5peCAoeGVuaXgpLCBhbmQgUlRVCisJKHJ0dSkgYXMgcmVjb2duaXplZCBvcGVyYXRpbmcgc3lzdGVtIG5hbWVzLgorCitXZWQgTm92IDE4IDE3OjU4OjE4IDE5OTIgIEthcmwgQmVycnkgIChrYXJsQGNzLnVtYi5lZHUpCisKKwkqIGkzODZpc2NnYXMuaCAoU0RCX0RFQlVHR0lOR19JTkZPKTogI3VuZGVmLgorCShEQlhfREVCVUdHSU5HX0lORk8pOiAjZGVmaW5lLgorCShEQlhfT1VUUFVUX01BSU5fU09VUkNFX3tESVJFQ1RPUlksRklMRU5BTUV9KTogT3ZlcnJpZGUgZGJ4b3V0LmMuCisKKwkqIGJzZDM4Ni5oIChMUFJFRklYKSBbTk9fVU5ERVJTQ09SRVNdOiBEZWZpbmUgYXMgYC5MJy4KKworV2VkIE5vdiAxOCAxMzo1MDo0MyAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogbWlwcy5jIChjb21wdXRlX2ZyYW1lX3NpemUpOiBNYWtlIHN1cmUgdGhlIHtncCxmcH0rb2Zmc2V0IGZpZWxkcworCWFyZSBhbHdheXMgaW5pdGlhbGl6ZWQsIGV2ZW4gaWYgdGhlcmUgd2VyZSBubyBncC9mcCByZWdpc3RlcnMKKwlzYXZlZC4KKworV2VkIE5vdiAxOCAwOTo1ODo1MCAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLm1kIChpbnN2KTogUmVtb3ZlIGNvbnN0cmFpbnRzIGZyb20gb3BlcmFuZCBtYXRjaGluZworCWNvbnN0XzBfb3BlcmFuZC4KKworIAkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogQWRkIG1pc3NpbmcgY2FzdCBmcm9tIGVudW0gdG8gaW50LgorCitXZWQgTm92IDE4IDA5OjQwOjAxIDE5OTIgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QGRnLXJ0cC5kZy5jb20pCisKKwkqIGNvcmUuYyAoaW5pdGlhbGl6ZV9jbGFzcyk6IFRoZSBjbGFzcyBtYXkgbm90IGhhdmUgYW4gaW5pdGlhbGl6ZQorCW1ldGhvZC4KKworV2VkIE5vdiAxOCAwOTo0MDowMSAxOTkyICBXaWxzb24gVGllbiAgKHd0aWVuQHVyYmFuYS5tY2QubW90LmNvbSkKKworCSogeG0tbTY4a3YuaCAocmluZGV4LCBpbmRleCk6IHVzZSBzdHJyY2hyIGFuZCBzdHJjaHIgaW5zdGVhZC4KKworV2VkIE5vdiAxOCAwMToyNzozNyAxOTkyICBKaW0gQmxhbmR5ICAoamltYkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3ViOiBBZGRlZCBYZW5peCBvcGVyYXRpbmcgc3lzdGVtLgorCitUdWUgTm92IDE3IDE4OjMyOjAxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChjb21iaW5lX3JlbG9hZHMpOiBEb24ndCBjb21iaW5lIHdpdGggYSByZWxvYWQgbmVlZGVkCisJZm9yIG11bHRpcGxlIHRoaW5ncy4KKworTW9uIE5vdiAxNiAwODo1Mjo1MiAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBIYW5kbGUgaW5kaXJlY3Qgc3RvcmVzIHRvIG1lbW9yeQorCXZpYSBhbiBhdXRvLWluY3JlbWVudGVkL2F1dG8tZGVjcmVtZW50ZWQgcmVnaXN0ZXIgaW4gdGhlIHNhbWUKKwltYW5uZXIgaW4gd2hpY2ggbG9hZHMgYXJlIGhhbmRsZWQuIAorCitUaHUgTm92IDEyIDIxOjAyOjU5IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwlDeWdudXM8LS0+RlNGIG1lcmdlLgorCisJVGh1IE5vdiAxMiAxNTowMjo1MyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJKiB0cmVlLmggKHZhbHVlX21lbWJlciwgcHVycG9zZV9tZW1iZXIsIGJpbmZvX21lbWJlciwKKwl0cmVlX2ludF9jc3RfZXF1YWwsIHRyZWVfaW50X2NzdF9sdCwgaW5kZXhfdHlwZV9lcXVhbCwKKwlleHBhbmRfZGVjbF9pbml0KTogQWRkIGRlY2xzIHdpdGggcHJvdG90eXBlcy4KKworCSogY3AtZGVjbC5jIChmaW5pc2hfZGVjbCk6IERvbid0IHRyeSB0byB1c2UgVFlQRSBpZiBpdCdzIGFuCisJZXJyb3JfbWFya19ub2RlLgorCisJKiBjcC1kZWNsLmMgKHNpZ3NlZ3YpOiBTZXQgdG8gdGhlIGRlZmF1bHQgaGFuZGxlciBiZWZvcmUgY2FsbGluZworCWFueXRoaW5nLCBzbyB3ZSBjYW4gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgbG9vcHMuICBDYWxsCisJbXlfZnJpZW5kbHlfYWJvcnQgaW5zdGVhZCBvZiBqdXN0IGVycm9yKCkuCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hYm9ydCk6IElmIEkgaXMgMCwgaXQncyBjb21pbmcgZnJvbSBzaWdzZWd2LgorCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hc3NlcnQpOiBOZXcgZnVuY3Rpb24uCisJKiBjcC1jYWxsLmMsIGNwLWNsYXNzLmMsIGNwLWNsYXNzLmgsIGNwLWN2dC5jLCBjcC1kZWNsLmMsIGNwLWRlY2wuaCwKKwljcC1kZWNsMi5jLCBjcC1kZW0uYywgY3AtZWRzZWwuYywgY3AtZXhjZXB0LmMsIGNwLWV4cHIuYywgY3AtZ2MuYywKKwljcC1oYXNoLmgsIGNwLWluaXQuYywgY3AtaW5wdXQuYywgY3AtbGV4LmMsIGNwLWxleC5oLCBjcC1tZXRob2QuYywKKwljcC1wdC5jLCBjcC1zZWFyY2guYywgY3Atc3Bldy5jLCBjcC10cmVlLmMsIGNwLXRyZWUuaCwgY3AtdHlwZTIuYywKKwljcC10eXBlY2suYywgY3AteHJlZi5jLCBjcC1wYXJzZS55OiBEb24ndCBpbmNsdWRlIGFzc2VydC5oLCBhbmQgdXNlCisJdGhlIG5ldyBmdW5jdGlvbiBgbXlfZnJpZW5kbHlfYXNzZXJ0JyBpbnN0ZWFkIG9mIHRoZSBgYXNzZXJ0JyBtYWNyby4KKworCVdlZCBOb3YgMTEgMjI6MTQ6NTEgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiB0cmVlLmggKHBlcm1fY2FsbG9jKTogQWRkIGRlY2wuCisJKiBjcC1wYXJzZS55IChleGNlcHRfc3RtdHMpOiBEZWNsYXJlIHJldHVybiB0eXBlIG9mIGdldF9pbnNucywKKwlzaW5jZSB3ZSBkb24ndCAoY2FuJ3QpIGluY2x1ZGUgcnRsLmguCisJKiBjcC10cmVlLmMgKFRZUEVfSEFTSCk6IFVzZSBIT1NUX1dJREVfSU5UIGluc3RlYWQgb2YgaW50IHdoZW4KKwljYXN0aW5nIHBvaW50ZXJzIHRvIGludGVnZXJzLgorCShsZF9jbXApOiBMaWtld2lzZS4KKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IExpa2V3aXNlLgorCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogQWRkIGRlY2wgb2YgaW5kZXguCisJKGJ1aWxkX29wZm5jYWxsKTogQ2FzdCB0byBIT1NUX1dJREVfSU5ULCBub3QgaW50LgorCSogY3Atc2VhcmNoLmMgKGdldF9iaW5mbyk6IExpa2V3aXNlLgorCShnZXRfYmFzZV9kaXN0YW5jZSk6IExpa2V3aXNlLgorCShicmVhZHRoX2ZpcnN0X3NlYXJjaCk6IExpa2V3aXNlLiAgQWxzbyBkZWNsYXJlIHRvIHJldHVybgorCUhPU1RfV0lERV9JTlQsIG5vdCBpbnQuCisKKwlXZWQgTm92IDExIDE0OjM0OjI1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwlUaHUgTm92ICA1IDE1OjU4OjM4IDE5OTIgIFRpbSBNb29yZSAgKG1vb3JlIGF0IGRlZm1hY3JvLmNzLnV0YWguZWR1KQorCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFJvdW5kIHRvIG9ic3RhY2sgYWxpZ25tZW50IHdoZW4KKwl0ZXN0aW5nIGlmIG5ld2RlY2wgaXMgYXQgdGhlIHRvcCBvZiB0aGUgcGVybWFuZW50IG9ic3RhY2suCisKKwlXZWQgTm92IDExIDEzOjU2OjE4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChidWlsZF92YmFzZV92dGFibGVzX2luaXQpOiBNYWtlIHN1cmUgZXh0ZXJuYWwgdmlydHVhbAorCXRhYmxlcyBhcmUgZGVjbGFyZWQgb24gbWFjaGluZXMgdGhhdCBuZWVkIHRoZSBkZWNsYXJhdGlvbiBieSBjYWxsaW5nCisJYXNzZW1ibGVfZXh0ZXJuYWwuCisKKwlXZWQgTm92IDExIDEyOjUxOjQ0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva2ZpZWxkKTogSWYgdGhlIGluaXQgZmllbGQgaXMgcmVhbGx5IGEgbGlzdCB3aXRoCisJanVzdCBhbiBlcnJvcl9tYXJrX25vZGUsIHRoZW4gaXQgd2Fzbid0IGEgcmVhbCBpbml0aWFsaXphdGlvbiwgc28KKwlkb24ndCB0cmVhdCBpdCBsaWtlIG9uZS4KKworCVR1ZSBOb3YgMTAgMTY6MjE6MjAgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorIAorCSogY3AtaW5pdC5jIChidWlsZF9uZXcpOiBJZiBhcmcgMSBvZiBhbiBhcnJheSByZWZlcmVuY2UgaXMgYW4KKwllcnJvcl9tYXJrLCB0aGVuIGp1c3QgcHJldGVuZCB0aGF0IHRoZXJlIHdlcmUgMCBlbGVtZW50cy4KKworCVR1ZSBOb3YgMTAgMTM6MjM6MzAgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSWYgdGhlIHR5cGUgb2YgRlVOQ1RJT04gaXMgYW4KKwllcnJvcl9tYXJrLCBkb24ndCBib3RoZXIgY2hlY2tpbmcgaXRzIGxhbmctc3BlY2lmaWMgaW5mby4KKworCVR1ZSBOb3YgMTAgMTI6Mzg6MzYgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChkZWNsc19tYXRjaCk6IEF2b2lkIGNvcmUgZHVtcGluZyB3aGVuIFRSRUVfVFlQRSBpcworCU5VTExfVFJFRSwgYXMgaXMgdGhlIGNhc2Ugd2hlbiBvbGRkZWNsIGlzIGEgVEVNUExBVEVfREVDTC4KKworCVR1ZSBOb3YgMTAgMTE6MDM6MzYgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorIAorCSogY3AtZGVjbC5jIChwdXNoZGVjbF90b3BfbGV2ZWwpOiBEaXNhYmxlIGFzc2VydCBmb3Igbm93OyBpdCdzCisJYWx3YXlzIGFjdGVkIGNvcnJlY3RseS4KKyAKKwlNb24gTm92ICA5IDEyOjA0OjI3IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAodHJ5X2Zvcl90eXBlbmFtZSk6IERlbGV0ZWQgcnVsZS4KKwkoc2NvcGVkX2lkKTogRG9uJ3QgdXNlIGl0LgorCisJRnJpIE5vdiAgNiAxODowNzozNyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdCk6IElmIElOSVQgaXMgMCwgZG9uJ3QgYm90aGVyIHRyeWluZyB0bworCXBsYXkgd2l0aCBpdHMgdHlwZS4KKworCVRodSBOb3YgIDUgMTY6NTI6MzcgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsKTogU2V0IFRSRUVfU1RBVElDLCBUUkVFX1BVQkxJQyBhbmQKKwlERUNMX0VYVEVSTkFMIGNvcnJlY3RseSBmb3IgdXNlIHdpdGggI3ByYWdtYSBpbnRlcmZhY2UuCisKKwlGcmkgTm92ICA2IDEwOjA3OjAxIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IERvbid0IHRyeSB0byB3b3JrIHdpdGggYSBmaWVsZCB0aGF0CisJZ290IGEgYm9ndXMgdHlwZS4KKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogRG9uJ3QgY2FsbCBkZWJ1Z190cmVlIQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogSWYgcHJvY2Vzc2luZyBhIGRlZmF1bHQgYXJndW1lbnQKKwl0aGF0IGNhbGxzIGEgY3RvciBmb3IgaXRzIGRlZmF1bHQgdmFsdWUsIHVzZSBJTlNUQU5DRV9QVFIgZm9yIHRoZQorCXBhcm0gbGlzdCwgZGlzY2FyZGluZyB3aGF0IHdlIGtuZXcgYmVmb3JlLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSWYgaW5pdGlhbGl6aW5nIGEgY29uc3QgbWVtYmVyIGFuZAorCWFjdGluZyBwZWRhbnRpYywgdGhlbiBkbyBtYWtlIGl0IGFuIGVycm9yLiAKKworCSogY3AtZGVjbDIuYyAod2Fybl90cmFkaXRpb25hbCk6IE5ldyB2YXJpYWJsZS4KKwkobGFuZ19kZWNvZGVfb3B0aW9uKTogVXNlIGl0IGZvciAtV3RyYWRpdGlvbmFsIGFuZCAtV25vLXRyYWRpdGlvbmFsLgorCSogY3AtdHJlZS5oICh3YXJuX3RyYWRpdGlvbmFsKTogQWRkIGRlY2wuCisJKiBjcC1sZXguYyAocmVhZGVzY2FwZSk6IEZvciB4LCBhdm9pZCBvdmVyZmxvdyB3aGVuIHNoaWZ0aW5nIGluIGlmLgorCVdhcm4gZm9yIFxhIGFuZCBceCBpZiB3YXJuX3RyYWRpdGlvbmFsOyBwYXNzIHRocm91Z2gKKwl0aGUgZXNjYXBlZCB4IGFuZCBhIGlmIC10cmFkaXRpb25hbC4gIFN1cHBvcnQgXGUgbGlrZSBcRTsgZm9yIGJvdGgsCisJcGVkd2FybiBhYm91dCBBTlNJIEMuCisKKwkqIGNwLWNhbGwuYyAoZmluZF9zY29wZWRfdHlwZSk6IERlbGV0ZSBhcmcgVEFHUzsgaW5zdGVhZCwgY29tcHV0ZSBpdAorCWluc2lkZSBmcm9tIFRZUEUuICBJZiBUQUdTIGlzIG51bGwsIGRvbid0IHJldHVybiBpbW1lZGlhdGVseSwgc2luY2UKKwl3ZSBuZWVkIHRvIGxvb2sgZm9yIFRZUEVfREVDTHMuCisJKHJlc29sdmVfc2NvcGVfdG9fbmFtZSk6IENhbGwgZmluZF9zY29wZWRfdHlwZSB3aXRob3V0IHJlcGxpY2F0aW5nCisJdGhlIHRhZ3MuCisKKwlUaHUgTm92ICA1IDE3OjUzOjMyIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDb25zdGFudCBjbGFzcyBtZW1iZXJzIGNhbiBiZQorCWluaXRpYWxpemVkLgorCisJVGh1IE5vdiAgNSAxNzoxMTozMCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlUaHUgTm92IDUgMTk6NDg6MTcgMTk5MiAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogY3AtcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBUeXBlcyBhcmUgdXNlZCBpbiBsYXRlcgorCXByb2Nlc3NpbmcsIHNvIHRoZXkgbXVzdCBnbyBpbnRvIHRoZSBwZXJtYW5lbnQgb2JzdGFjay4KKworCVRodSBOb3YgIDUgMTM6MDI6NTYgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgYWxsb3cgbWVtYmVycyB0byBiZSBpbml0aWFsaXplZAorCWluIHRoZSBjbGFzcyBkZWNsYXJhdGlvbi4KKworCSogY3AtZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBTZXQgdGhlIERFQ0xfQ0xBU1NfQ09OVEVYVCBvbiBhIGZ1bmN0aW9uCisJdGhhdCdzIGEgZmlsZS1zY29wZSBzZXQgb2YgY3RvcnMvZHRvcnMgZm9yIGdsb2JhbCB2YXJpYWJsZXMsIHNvCisJaXNfZnJpZW5kIHdpbGwgc2VlIHRoaW5ncyB0aGUgd2F5IHRoZXkgc2hvdWxkIGJlIHNlZW4uCisKKwkqIGNwLWNhbGwuYyAoZmluZF9zY29wZWRfdHlwZSk6IE5ldyBmdW5jdGlvbi4KKwkocmVzb2x2ZV9zY29wZV90b19uYW1lKTogVXNlIGl0IHRvIGNoZWNrIGZvciBuYW1lcyB0aGF0IG1pZ2h0IGJlIGluCisJYmFzZSBjbGFzc2VzLgorCisJV2VkIE5vdiAgNCAwMDo0MzoxNSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKGRiX3l5ZXJyb3IpOiBEZWxldGVkIGZuLgorCSh5eXByaW50LCB5eWVycm9yLCBpbml0X3BhcnNlLCB5eWhvb2ssIHJlZHVjZV9jbXAsIHRva2VuX2NtcCwKKwlwcmludF9wYXJzZV9zdGF0aXN0aWNzLHNldF95eWRlYnVnLCBkZWJ1Z195eXRyYW5zbGF0ZSk6IE1vdmVkIHRvCisJY3AtbGV4LmMuCisJKHJlZHVjZV9jb3VudCwgdG9rZW5fY291bnQpOiBEaXR0by4KKwkoY3VycmVudF9kZWNsc3BlY3MpOiBNYWRlIHN0YXRpYy4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IFdhcm4gaWYgY2FzdGluZyBiZXR3ZWVuIGEgcG9pbnRlciBhbmQKKwlhbiBpbnRlZ2VyIHdob3NlIHNpemVzIGRpZmZlci4KKworCSogY3AtcGFyc2UueSAodW5hcnlfZXhwcik6IEZpbmlzaCBtYWtpbmcgbmV3IHdpdGggcGxhY2VtZW50IHdvcms7CisJdXNlIHRoZSBydWxlIGBuZXcnIGluc3RlYWQgb2YgdGhlIHRva2VuIGBORVcnIHdoZW4gcGFyc2luZyBpdC4KKworCVR1ZSBOb3YgIDMgMDI6MTY6NDcgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQXZvaWQgcmVmZXJlbmNpbmcgREVDTF9OQU1FIGlmIGl0J3MKKwludWxsIHdoZW4gY2hlY2tpbmcgZm9yIGEgcmVmIHRvIG9yIHRoZSBhZGRyIG9mIGEgbG9jYWwgdmFyaWFibGUuCisKKwkqIGNwLXNlYXJjaC5jIChkZnNfcHVzaGRlY2xzKTogRG9uJ3QgdHJ5IHRvIHVzZSB0aGUgY29udGV4dCBvZiBhCisJZmllbGQgd2hpY2ggaGFzIG5vbmUgYXQgdGhlIHRpbWUuCisKKwkqIGNwLWRlY2wuYyAocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQKKwlyZWRlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvZiBhbiBhYnN0cmFjdAorCXZpcnR1YWwgZnVuY3Rpb24uCisJKGR1cGxpY2F0ZV9kZWNscyk6IEZvciBhbiBhYnN0cmFjdCB2aXJ0dWFsLCBkb24ndCB1c2UgdGhlIG9sZCBSVEwKKwlmcm9tIGFib3J0IHdoZW4gY3JlYXRpbmcgdGhlIFJUTCBmb3IgdGhlIG5ld2RlY2wuCisKKwlUdWUgTm92ICAzIDAwOjE1OjQ0IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGb3IgYGlubGluZScsIGB1bnNpZ25lZCcsIGFuZCBgc2lnbmVkJywKKwlzZWUgdGhlbSBhcyB0eXBlcywgbm90IGFzIHN0b3JhZ2UgY2xhc3Mgc3BlY3MsIHdoZW4gbG9va2luZyBmb3IgbW9yZQorCXRoYW4gb25lIHN0b3JhZ2UgY2xhc3MuCisKKwkqIGNwLWxleC5jIChyZWFkZXNjYXBlKTogTmV3IGFyZyBpZ25vcmVfcHRyLgorCShyZWFsX3l5bGV4KTogUGFzcyBuZXcgYXJnLCBoYW5kbGUgcmVzdWx0IHRoYXQgY29tZXMgYmFjay4KKworCSogY3AtZGVjbC5jIChXQ0hBUl9UWVBFX1NJWkUpOiBEZWxldGVkOyBuZXZlciB1c2VkLgorCisJTW9uIE5vdiAgMiAxMDoyMzo1MiAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogTGV0IHNraXBfd2hpdGVfc3BhY2UgaGFuZGxlIFxyLgorCisJKiBjcC1wYXJzZS55IChwYXJtbGlzdCk6IFdhcm4gb24gYSBkZWNsIGBmb28gKC4uLiknLCB3aXRob3V0IGEgZmlyc3QKKwlhcmd1bWVudC4KKworCSogY3AtdHlwZTIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogSWYgZXhwcl9hc19jdG9yJ3MgYXJndW1lbnQgaXMKKwlhIFNBVkVfRVhQUiwgZG9uJ3Qgd2lwZSBvdXQgdGhlIGFyZ3VtZW50LgorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogT25seSBjb21wbGFpbiBhYm91dCBub3QgaGF2aW5nIGFuCisJb2JqZWN0IGZvciBhIGNhbGxlZCBtZXRob2QgaWYgdGhlIG1ldGhvZCBpcyBub24tc3RhdGljLgorCisJU3VuIE5vdiAgMSAxNjo1MDoxNCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKHdhcm5fY2hhcl9zdWJzY3JpcHRzKTogRGVjbGFyZS4KKwkobGFuZ19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1XY2hhci1zdWJzY3JpcHRzLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IElmIHRoZSB0eXBlIG9mIGVpdGhlciB0aGUgYXJyYXkgb3IKKwlpdHMgaW5kZXggaXMgYW4gZXJyb3JfbWFya19ub2RlLCB0aGVuIHJldHVybiBvbmUuICBBZGQgY29kZSB0byBzZWUKKwlpZiB0aGUgaW5kZXggaXMgYSBjaGFyYWN0ZXIgKGFkZCB3YXJuaW5nKSwgdGhlbiBkbyB0aGUgZGVmYXVsdAorCXByb21vdGlvbnMuICBEb24ndCB3YXJuIGlmIGl0J3MgYSByZWdpc3RlciBhcnJheS4gTWFrZSBhIHJlZgorCXZvbGF0aWxlIGlmIHRoZSBhcnJheSBpcyB2b2xhdGlsZS4KKwkqIGNwLXRyZWUuaCAod2Fybl9jaGFyX3N1YnNjcmlwdHMpOiBBZGQgZGVjbC4KKworCSogY3AtdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogSWYgZWl0aGVyIHR5cGUgaXMgbm9uc2Vuc2UgKGFuCisJZXJyb3JfbWFyayksIHVzZSB0aGUgb3RoZXIgdHlwZS4KKworCVRodSBPY3QgMjkgMTg6Mzk6NTAgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRml4IHByb2JsZW0gaW50cm9kdWNlIGJ5IG1lIG9uIE9jdCAyMgorCTE3OjQxOjEzLiAgUHV0IGJhY2sgY2FsbCB0byBidWlsZF9vZmZzZXRfdHlwZSB0aGF0IEkgdG9vayBvdXQsIGFzIGl0CisJaXMgbm90IHdyb25nLCBhcyB0aGUgY29tbWVudCBmb3IgYnVpbGRfb2Zmc2V0X3R5cGUgaGFkIGxlZCBtZSB0bworCWJlbGlldmUuCisKKwlUaHUgT2N0IDI5IDE3OjMwOjEyIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmM6IERlbGV0ZSBibG9jay1sZXZlbCBleHRlcm4gZGVjbHM7IGluY2x1ZGUgZmxhZ3MuaCBpbnN0ZWFkLgorCSogY3AtdHJlZS5oIChmbGFnX2ludF9lbnVtX2VxdWl2YWxlbmNlKTogRGVjbGFyZSBoZXJlLgorCSogY3AtY2FsbC5jOiBOb3QgaGVyZS4KKworCSogTWFrZWZpbGUuaW4gKHN0YW1wLWNwLXBhcnNlKTogVGhlcmUgYXJlIG5vdyBvbmx5IDI5IHNoaWZ0L3JlZHVjZQorCWNvbmZsaWN0cywgYmVjYXVzZSBvZiB0aGUgcmVtb3ZlZCB3cmFwcGVyIHN0dWZmLgorCisJKiBjcC1sZXguYyAobGFzdGlkZGVjbCwgcmlkcG9pbnRlcnMpOiBEZWZpbmUgaGVyZS4KKwkoTk9SSUQpOiBEb24ndCBkZWZpbmUgaGVyZS4KKwkqIGNwLWxleC5oIChOT1JJRCk6IERlZmluZSBoZXJlIGluc3RlYWQuCisJKHJpZHBvaW50ZXJzLCBsYXN0aWRkZWNsLCB0b2tlbl9idWZmZXIsIGxvb2tpbmdfZm9yX3R5cGVuYW1lKTogRGl0dG8uCisJKG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yLCBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yLAorCXJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24sIHJlaW5pdF9wYXJzZV9mb3JfbWV0aG9kLCB5eWxleCk6IExpa2V3aXNlLgorCSogY3AtcGFyc2UueTogRG9uJ3QgZGVmaW5lIGFueSBvZiB0aGVtIGluIGhlcmUuCisKKwkqIGNwLXR5cGVjay5jIChjb21tb25wYXJtcyk6IENhbGwgdHJlZV9jb25zIHdpdGggTlVMTF9UUkVFcywgbm90IDBzLgorCShjb252ZXJ0X2FyZ3VtZW50cyk6IExpa2V3aXNlLgorCVRocm91Z2hvdXQgdGhlIGZpbGUsIHNheSBgQU5TSSBDKysgZm9yYmlkcycsIG5vdCBgQU5TSSBDIGZvcmJpZHMnLgorCSogY3AtbGV4LmMsIGNwLXR5cGUyLmM6IExpa2V3aXNlLgorCisJUmVtb3ZlIHdyYXBwZXIgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBjb21waWxlci4KKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGUgd3JhcCBhbmQgd3JhcF90eXBlLgorCURlbGV0ZSBjb2RlIHRoYXQgdXNlZCB0aGVtLiBEb24ndCBzZXQgZXJyX25hbWUgdG8gIndyYXBwZXIiLCBzaW5jZQorCXdyYXBwZXJfbmFtZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBEb24ndCB3b3JyeSBhYm91dCBUWVBFX1dSQVBfVFlQRS4KKwkqIGNwLWRlY2wuYyAoZ3Jva2ZuZGVjbCk6IERlbGV0ZSBjb2RlIGZvciBXUkFQUEVSX0VYUFIgYW5kCisJQU5USV9XUkFQUEVSX0VYUFIuCisJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuICBEb24ndCBzZXQgVFJFRV9IQVNfV1JBUFBFUl9QUkVELgorCSogY3AtZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBMaWtld2lzZS4KKwkoY2hlY2tfY2xhc3Nmbik6IExpa2V3aXNlLgorCSogY3AtaW5pdC5jIChnZXRfbWVtYmVyX2Z1bmN0aW9uKTogRG9uJ3QgY2hlY2sgVFlQRV9ORUVEU19XUkFQUEVSLgorCSogY3AtbGV4LmMgKHJlYWxfeXlsZXgpOiBEb24ndCBjaGVjayBXUkFQUEVSX09SX0FOVElfV1JBUFBFUl9OQU1FX1AuCisJKiBjcC1tZXRob2QuYyAod3JhcHBlcl9uYW1lLCB3cmFwcGVyX3ByZWRfbmFtZSwgYW50aV93cmFwcGVyX25hbWUpOgorCURlbGV0ZWQgdmFyaWFibGVzLgorCShpbml0X21ldGhvZCk6IERvbid0IGRvIGFueSBzZXR1cCBmb3IgKldSQVBQRVJfKi4KKwkoaGFja193cmFwcGVyKTogRGVsZXRlZCBmdW5jdGlvbi4KKwkqIGNwLXBhcnNlLnkgKHdyYXBwZXIpOiBEZWxldGVkIHJ1bGUuCisJKGlkZW50aWZpZXJfb3Jfb3BuYW1lKTogRGVsZXRlZCBhbGwgd3JhcHBlciBwcmVkaWNhdGVzLgorCShub3R5cGVfZGVjbGFyYXRvcik6IERlbGV0ZWQgcHJlZGljYXRlcyBMRUZUX1JJR0hUIGZvciB3cmFwcGVycy4KKwkqIGNwLXB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IERlbGV0ZWQgbWVzc2FnZSBmb3IgcHJpbnRpbmcgIndyYXBwZXIiLgorCSogY3Atc2VhcmNoLmMgKGdldF93cmFwcGVyKTogRGVsZXRlZCBmbi4KKwkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfdHlwZSk6IERlbGV0ZWQgaGFzX3dyYXBwZXJfcHJlZCBhbmQKKwl3cmFwX3R5cGUgbWVtYmVycy4KKwkoYnVpbGRfd3JhcHBlciwgaGFja193cmFwcGVyLCBnZXRfd3JhcHBlcik6IERlbGV0ZWQgZGVjbHMuCisJKHdyYXBwZXJfbmFtZSwgd3JhcHBlcl9wcmVkX25hbWUsIGFudGlfd3JhcHBlcl9uYW1lKTogRGVsZXRlZCBkZWNscy4KKwkoVFlQRV9XUkFQX1RZUEUsIFRZUEVfSEFTX1dSQVBQRVIsIFRZUEVfTkVFRFNfV1JBUFBFUiwKKwlUWVBFX0hBU19XUkFQUEVSX1BSRUQsIFdSQVBQRVJfREVDTF9GT1JNQVQsIFdSQVBQRVJfUFJFRF9ERUNMX0ZPUk1BVCwKKwlBTlRJX1dSQVBQRVJfREVDTF9GT1JNQVQsIFdSQVBQRVJfTkFNRV9GT1JNQVQsCisJV1JBUFBFUl9QUkVEX05BTUVfRk9STUFULCBBTlRJX1dSQVBQRVJfTkFNRV9GT1JNQVQsCisJV1JBUFBFUl9OQU1FX1AsIFdSQVBQRVJfUFJFRF9OQU1FX1AsIEFOVElfV1JBUFBFUl9OQU1FX1AsCisJV1JBUFBFUl9PUl9BTlRJX1dSQVBQRVJfTkFNRV9QKTogRGVsZXRlZC4KKwkoZW51bSBvdmVybG9hZF9mbGFncyk6IERlbGV0ZWQgV1JBUFBFUl9GTEFHLCBXUkFQUEVSX1BSRURfRkxBRywKKwlhbmQgQU5USV9XUkFQUEVSX0ZMQUcgdGFncy4KKwkqIGNwLXR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBEZWxldGUgd3JhcHBlciBjb2RlLgorCSh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IERvbid0IGNoZWNrIFRZUEVfTkVFRFNfV1JBUFBFUi4KKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBEb24ndCBjaGVjayAqV1JBUFBFUl9FWFBSLgorCSogdHJlZS5kZWYgKFdSQVBQRVJfRVhQUiwgQU5USV9XUkFQUEVSX0VYUFIpOiBEZWxldGVkLgorCisJV2VkIE9jdCAyOCAxNTozODo0NCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IE5ldyBhcmd1bWVudHMgRk5ERUNMLCBQQVJNTlVNLAorCWFuZCBFUlJUWVBFLiAgVXNlIHRoZW0gdG8gZ2l2ZSB3YXJuaW5ncyBhYm91dCBjb25zdCBhbmQgdm9sYXRpbGUKKwlyZWZlcmVuY2VzIGJlaW5nIHVzZWQgaW5jb3JyZWN0bHkuICBDYWxsIGl0c2VsZiB3aXRoIGR1bW15IGFyZ3VtZW50cworCXdoZXJlIGFwcHJvcHJpYXRlLgorCShjb252ZXJ0KTogQ2FsbCBjb252ZXJ0X3RvX3JlZmVyZW5jZSB3aXRoIGR1bW15IGFyZ3MuCisJKGNvbnZlcnRfZm9yY2UpOiBMaWtld2lzZS4KKwkqIGNwLXR5cGVjay5jICh3YXJuX2Zvcl9hc3NpZ25tZW50KTogUmVtb3ZlIHN0YXRpYyBkZWNsYXJhdGlvbiwKKwljcC1jdnQuYyBuZWVkcyB0byBzZWUgaXQgbm93LgorCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IENhbGwgY29udmVydF90b19yZWZlcmVuY2Ugd2l0aCBmbmRlY2wsCisJcGFybW51bSwgYW5kIGVycnR5cGUuCisKKwlUdWUgT2N0IDI3IDE3OjM4OjE4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZpeCBwcm9ibGVtIGludHJvZHVjZSBieSBtZSBvbiBPY3QgMjIKKwkxNzo0MToxMy4gIE9ubHkgb3V0cHV0IGVycm9yIG9yIHdhcm5pbmcgbWVzc2FnZQlhYm91dCBleHRyYQorCXF1YWxpZmllcnMgd2hlbiB3ZSBhcmUgaW5zaWRlIGEgY2xhc3MgZGVjbGFyYXRpb24uCisKKwlUdWUgT2N0IDI3IDE2OjIxOjQxIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChUSElTX05BTUVfUCk6IEZpeCB0byByZWZsZWN0IFNlcHRlbWJlciAxIGNoYW5nZSBpbgorCVRISVNfTkFNRS4KKworCVR1ZSBPY3QgMjcgMTI6MzU6NTkgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChvcGVyYXRvcl9uYW1lKTogUmVtb3ZlIGNoZWNrIGZvciB0b3AtbGV2ZWwgb3BlcmF0b3IKKwk8dHlwZW5hbWU+IGRlY2wuCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ29tcGxhaW4gaGVyZSBhYm91dCB0eXBlIGNvbnZlcnNpb24KKwlvcGVyYXRvcnMgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgbWVtYmVycyBvZiBjbGFzc2VzLiAKKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IE9ubHkgY2FsbCBkb19mcmllbmQgb24gYSBmcmllbmQgaWYKKwlkZWNsJ3Mgbm9uLXplcm8uCisKKwlUdWUgT2N0IDI3IDA5OjMxOjA4IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBBZGQgbWlzc2luZyBmb3VydGggYXJndW1lbnQgdG8KKwlsb29rdXBfZmllbGQuCisKKwlNb24gT2N0IDI2IDE1OjE1OjM5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogQ2hlY2sgZm9yIGFtYmlndWl0aWVzCisJYmV0d2VlbiBjb25zdHJ1Y3RvciBhbmQgY29udmVyc2lvbiBvcGVyYXRvcnMgYSBiaXQgaGFyZGVyLgorCisJU2F0IE9jdCAyNCAxOTozNDozOSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQorCisJTW9uIFNlcCAxNCAxNDozNjo1MyAxOTkyICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwljcC1kZWNsLmMgKHBvcGxldmVsKTogSWYgYXBwYXJlbnRseSBuZXN0ZWQgaW5saW5lIGZ1bmN0aW9uIGhhcworCURFQ0xfQUJTVFJBQ1RfT1JJR0lOLCBkb24ndCBvdXRwdXQgaXQ7IHByb3BhZ2F0ZSBUUkVFX0FERFJFU1NBQkxFLgorCShwdXNoZGVjbCk6IFdoZW4gY29weWluZyBpbmxpbmUgZGV0YWlscyBpbnRvIGFuIGV4dGVybiBkZWNsLAorCWNvcHkgREVDTF9SRVNVTFQsIFRSRUVfQVNNX1dSSVRURU4uICBTZXQgREVDTF9BQlNUUkFDVF9PUklHSU4uCisKKwlGcmkgT2N0IDIzIDE4OjUyOjE5IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChwb3BsZXZlbCk6IFVzZSBlcnJvcl93aXRoX2RlY2wgb24gYW4gdW51c2VkIGxhYmVsLCBzbworCWl0cyBsaW5lIG51bWJlciBjb21lcyBvdXQgY29ycmVjdC4KKworCVRodSBPY3QgMjIgMTg6MzE6NTAgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChvcGVyYXRvcl9uYW1lKTogSWYgYSB0eXBlIGNvbnZlcnNpb24gb3BlcmF0b3IgaXMKKwlkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwsIGRvbid0IGNyYXNoLCBjb21wbGFpbi4KKworCVRodSBPY3QgMjIgMTc6NDE6MTMgMTk5MiAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUmV0dXJuIHZvaWRfdHlwZV9ub2RlIGluc3RlYWQgb2YKKwlOVUxMX1RSRUUgb24gZXJyb3JzLCB0byBmb3Jlc3RhbGwgYW5vdGhlciBlcnJvciBtZXNzYWdlLiAgQ2hlY2sgZm9yCisJcmVkdW5kYW50IG9yIGlsbGVnYWwgcXVhbGlmaWNhdGlvbiBvbiBjbGFzcyBtZW1iZXJzLgorCisJVGh1IE9jdCAyMiAxMzoxNTo1NyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuaCAoQU5PTl9BR0dSTkFNRV9QKTogQ2hlY2sgdGhlIHNlY29uZCBjaGFyYXRlciBhcyB3ZWxsLCBhcworCWl0IGNvdWxkIGJlICR2dGJsX3B0cl90eXBlLCBhbmQgbm90IGFuIEFOT05fQUdHUk5BTUUuCisKKwlXZWQgT2N0IDIxIDE5OjMxOjM2IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEluaXRpYWxpemUgYl9vcl9kIHRvIDAuCisKKwkqIGNwLXR5cGVjay5jIChjb21wcGFybXMpOiBEZWxldGUgZGVhZCBjb2RlIGZvciByZXR1cm5pbmcgaWYgZWl0aGVyCisJVFJFRV9QVVJQT1NFIGlzIHRydWUgd2hlbiB0MSBhbmQgdDIgYXJlIGJvdGggMC4KKworCSogY3AtcGFyc2UueSAob2JqZWN0KTogT25seSBwYXNzIG9uZSBhcmd1bWVudCBpbnRvIGJ1aWxkX3hfYXJyb3cuCisKKwkqIGNwLXBhcnNlLnkgKHVuYXJ5X2V4cHIpOiBBZGQgY29kZSB0byBwYXJzZSBgJiZsYWJlbCcuCisJKHN0bXQpOiBFeHBhbmQgY29tcHV0ZWQgZ290b3MuCisKKwkqIGNwLW1ldGhvZC5jIChmbmRlY2xfYXNfc3RyaW5nKTogU2F5IGl0J3Mgc3RhdGljIGJlZm9yZSBnaXZpbmcgaXRzCisJdHlwZSwgaXQgbG9va3MgYmV0dGVyIChhbmQgbWF0Y2hlcyBob3cgeW91J2QgZGVjbGFyZSBpdCkuCisKKwlXZWQgT2N0IDIxIDE2OjIyOjQzIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdGFydF9kZWNsKTogcmV0dXJuIE5VTExfVFJFRSwgbm90IGVycm9yX21hcmtfbm9kZSB0bworCXNpZ25pZnkgZXJyb3IuCisJKiBjcC1kZWNsMi5jIChjcGx1c19kZWNsX2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb24uICBEb24ndCBjYWxsCisJZGVjbF9hdHRyaWJ1dGVzIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBOVUxMX1RSRUUuCisJKiBjcC10cmVlLmggKGNwbHVzX2RlY2xfYXR0cmlidXRlcyk6IERlY2xhcmUgbmV3IGZ1bmN0aW9uLgorCSogY3AtcGFyc2UueTogQ2hhbmdlZCBhbGwgY2FsbHMgdG8gZGVjbF9hdHRyaWJ1dGVzIGludG8gY2FsbHMgdG8KKwljcGx1c19kZWNsX2F0dHJpYnV0ZXMsIGFzIGFsbCBjYWxscyBtYXkgcGFzcyBOVUxMX1RSRUUgaW4gdGhlIGZpcnN0CisJYXJndW1lbnQuCisKKwlXZWQgT2N0IDIxIDExOjQwOjM1IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEF2b2lkIGFuIGFib3J0IG9uIHBhcnNlIGVycm9ycyBieQorCWNoYW5naW5nIGFuIGFzc2VydCBpbnRvIGEgY29uZGl0aW9uYWwgbXlfZnJpZW5kbHlfYWJvcnQuCisKKwlUdWUgT2N0IDIwIDE2OjUyOjMyIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChUWVBFX0FTU0VNQkxFUl9OQU1FX1NUUklORywKKwlUWVBFX0FTU0VNQkxFUl9OQU1FX0xFTkdUSCk6IE5ldyBtYWNyb3MuCisJKiBjcC1zZWFyY2guYyAoYnVpbGRfdHlwZV9wYXRobmFtZSk6IFVzZSBuZXcgbWFjcm9zLgorCSogY3AtZGVjbC5jIChwdXNodGFnKTogU2V0IERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIFRZUEVfREVDTHMgd2l0aAorCWJ1aWxkX292ZXJsb2FkX25hbWUgc28gdGhhdCBhc3NlbWJsZXIgbmFtZXMgZm9yIHRlbXBsYXRlIHR5cGUgdGhpbmdzCisJYXJlIGxpa2UgX192dCR0MVgxWmkkMVQuNCBhbmQgbm90IF9fdnQkWDxpbnQ+JFQuNC4KKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBTaW5jZSB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIgd2FudHMgdG8gdXNlCisJREVDTF9OQU1FIGZvciBUWVBFX0RFQ0xzLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIERFQ0xfQVNTRU1CTEVSX05BTUUuCisKKwlUdWUgT2N0IDIwIDExOjI5OjUwIDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCVdlZCBPY3QgIDcgMTY6MDE6NTUgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEB0Y3QuY29tKQorCisJWyBjaGFuZ2VzIHByb3BhZ2F0ZWQgZnJvbSA5MjEwMDUgc25hcHNob3QgXQorCSogY3AtbGV4LmMgKHJlYWRlc2NhcGUpOiBObyB3YXJuaW5nIGlmIGRpZ2l0cyBpbiBceCBhcmUgYWxsIDAncy4KKworCUZyaSBPY3QgIDkgMTU6MTg6MTkgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBPbmx5IGZpbmQgb3V0IGlmIG9sZGRlY2wgaXMgYQorCWZyaWVuZCBhZnRlciB3ZSBrbm93IGl0J3Mgbm90IGEgVFJFRV9MSVNULgorCisJV2VkIE9jdCAgNyAxNjowNDozNCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlXZWQgT2N0ICA3IDEyOjI2OjA3IFBEVCAxOTkyICBSb24gR3VpbG1ldHRlICAocmZnIGF0IG5ldGNvbS5jb20pCisKKwkqIGNwLWxleC5jIChyZWFkZXNjYXBlKTogIFBlcm1pdCBcPyBhcyBhbiBlc2NhcGUgc2VxdWVuY2UuCisKKwlUdWUgT2N0ICA2IDE3OjU0OjA5IDE5OTIgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCU1ham9yIE1JIHJldmFtcC4KKworCSogY3Atc2VhcmNoLmMgKGdldF9iaW5mbywgZmluZF9iYXNlX2Rpc3RhbmNlKTogIEZpeCBjb21tZW50cy4KKwlEaXNhYmxlIGluY29ycmVjdCBjb2RlIHRoYXQgd291bGQgaW5jb3JyZWN0bHkgZmluZCBhbWJpZ3VpdGllcyB3aGVyZQorCW5vbmUgZXhpc3RlZC4gIEFkZCBzb21lIGNvZGUgdG8gZmluZCBhbGwgYW1iaWd1aXRpZXMuCisJKiBjcC1zZWFyY2guYyAoZ2V0X2JpbmZvMl9yZWN1cnNpdmUsIGdldF9iaW5mbzIpOiBBZGRlZCB0byBmaW5kCisJYW1iaWd1aXRpZXMuCisKKwkqIGNwLXNlYXJjaC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fc2luZ2xlX2xldmVsKTogQWRkZWQgc28gdGhhdCBvbmUKKwljYW4gY29udmVydCBwb2ludGVyIHVuYW1iaWd1b3VzbHkgdG8gYW4gaW1tZWRpYXRlIGJhc2UgY2xhc3MKKwlwb2ludGVyLgorCisJKiBjcC1zZWFyY2guYyAoZGZzX3dhbGspOiBBZGRlZCBjb21tZW50cy4gIEZpeGVkIHRvIGtlZXAgdHJhY2sgb2YKKwlob3cgaXQgd2Fsa3MgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBzbyB0aGF0IHdoZW4gd2UgZ2V0IGRvd24gdG8KKwl0aGUgYm90dG9tLCB3ZSBoYXZlIGEgcG9pbnRlciB0byB3aGF0IHdlIHdhbnQuCisJKiBjcC1zZWFyY2guYyAoZGZzX2ZpbmRfdmJhc2VzKTogQ2hhbmdlZCB0byB1c2UgbmV3IGludGVybWVkaWF0ZQorCXBvaW50ZXIgaW5zdGVhZCBvZiBpbmNvcnJlY3RseSB0cnlpbmcgdG8gY29udmVydCBhdCB0aGUgYm90dG9tLgorCSogY3Atc2VhcmNoLmMgKGluaXRfdmJhc2VfcG9pbnRlcnMpOiBDaGFuZ2VkIHRvIHNldCB1cCBuZXcKKwlpbnRlcm1lZGlhdGUgcG9pbnRlci4KKworCSogY3AtKi5jOiBSZW5hbWUgY2hpbGQgLT4gYmFzZV9iaW5mbywgY2hpbGRfY2hpbGQgLT4KKwliYXNlX2Jhc2VfYmluZm8sIGNoaWxkX2JpbmZvcyAtPiBiYXNlX2JpbmZvcywgLipfY2hpbGQgLT4KKwkuKl9iYXNlX2JpbmZvLiAgUmVuYW1lIERFUklWRURfRlJPTV9QIHRvIFVOSVFVRUxZX0RFUklWRURfRlJPTV9QLgorCisJVHVlIE9jdCAgNiAxNDo1MToxMyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCSogY3Atc3Bldy5jICh5eWxleF9jdHIpOiBNYWtlIHVuc2lnbmVkLgorCSogY3AtZGVjbDIuYyAoc3Bld19kZWJ1Zyk6IEFkZCBleHRlcm4gcmVmZXJlbmNlLgorCShsYW5nX2RlY29kZV9vcHRpb24pOiBOZXcgb3B0aW9uIGAtc3Bldy1kZWJ1ZycsIHNvIG1hc29jaGlzdHMgY2FuCisJdXNlIGl0IHdoZW4gdGhleSBuZWVkIHRvLgorCisJTW9uIE9jdCAgNSAxNTo0NzozNSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKKworCUltcGxlbWVudCBwcm90ZWN0ZWQgYmFzZWNsYXNzZXMuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBTZXQgVFJFRV9WSUFfUFJPVEVDVEVELgorCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBDaGVjayBmb3IgZWl0aGVyIHB1YmxpYyBvciBwcm90ZWN0ZWQKKwltZW1iZXJzIHRvIGtpY2sgb3V0IG9mIHRoZSAiYWxsIG1lbWJlcnMgYXJlIHByaXZhdGUiIHRlc3QuCisJKiBjcC1kZWNsLmMgKHhyZWZfdGFnKTogU2V0IFRSRUVfVklBX1BST1RFQ1RFRCBhcHByb3ByaWF0ZWx5LgorCSogY3AtcGFyc2UueSAoYmFzZV9jbGFzc192aXNpYmlsaXR5X2xpc3QpOiBSZW1vdmUgY29kZSBhYm91dAorCWBwcm90ZWN0ZWQnIHZpc2liaWxpdHkgbm90IGJlaW5nIGltcGxlbWVudGVkLgorCSogY3AtcHQuYyAodHN1YnN0KTogU2V0IHZpYV9wcm90ZWN0ZWQgYW5kIGNhbGwgaGFzaF90cmVlX2NvbnMKKwl3aXRoIGl0IGFzIG5lY2Vzc2FyeS4KKwkqIGNwLXNlYXJjaC5jIChjb21wdXRlX3Zpc2liaWxpdHkpOiBTZXQgdmlzaWJpbGl0eSBpZiBwcm90ZWN0ZWQuCisJUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB2aXNpYmlsaXR5IHdoZW4gcmVzb2x2aW5nIGEgZmllbGQuCisJKGxvb2t1cF9maWVsZCk6IFNldCBUUkVFX1ZJQV9QUk9URUNURUQgZm9yIGJ0eXBlcyBmcm9tIGl0cyBjaGlsZC4KKwlXaGVuIGNvbXBsYWluaW5nIGFib3V0IGEgbWVtYmVyIGJlaW5nIHByb3RlY3RlZCwgZGlmZmVyZW50aWF0ZSB3aGVuCisJaXQncyBmcm9tIGEgcHJvdGVjdGVkIGJhc2UgY2xhc3MgKGNvdWxkIGJlIGEgcHVibGljIG1lbWJlciBpbiB0aGUKKwliYXNlKS4KKwkobG9va3VwX2ZuZmllbGRzKTogU2V0IFRSRUVfVklBX1BST1RFQ1RFRC4KKwkoZ2V0X2Jhc2VsaW5rcyk6IFBhc3MgVFJFRV9WSUFfUFJPVEVDVEVEIGludG8gaGFzaF90cmVlX2NvbnMuCisJQWxzbyBwYXNzIGEgMCB3aGVuIG5lY2Vzc2FyeS4KKwkqIGNwLXRyZWUuYyAocHJvcGFnYXRlX2JpbmZvX29mZnNldHMpOiBTZXQgVFJFRV9WSUFfUFJPVEVDVEVELgorCShsYXlvdXRfdmJhc2V0eXBlcyk6IERpdHRvLgorCShsYXlvdXRfYmFzZXR5cGVzKTogRGl0dG8uCisJKGxpc3RfaGFzaF9sb29rdXApOiBDaGVjayBUUkVFX1ZJQV9QUk9URUNURUQgd2hlbiBsb29raW5nIGF0IGFuCisJaW5jb21wbGV0ZSBiYXNldHlwZS4KKwkoaGFzaF90cmVlX2NvbnMpOiBOZXcgYXJndW1lbnQgYHZpYV9wcm90ZWN0ZWQnLiAgU2V0IFRSRUVfVklBX1BST1RFQ1RFRAorCXdoZW4gbmVjZXNzYXJ5LgorCShsaXN0X2hhc2hfbG9va3VwX29yX2NvbnMpOiBDaGVjayBUUkVFX1ZJQV9QUk9URUNURUQgd2hlbiBtYWtpbmcKKwlzdXJlIGEgaGFzaCBsaXN0IGlzIHNhbmUuCisJKG1ha2VfYmluZm8pOiBTZXQgVFJFRV9WSUFfUFJPVEVDVEVEIGZvciB0aGUgbmV3IGNoaWxkLgorCisJTW9uIE9jdCAgNSAxMzoyNzo0NCAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAobWF5YmVfYWRqdXN0X2FkZHJfZm9yX2RlbGV0ZSk6ICBNYWtlIHN1cmUgd2UgZG9uJ3QKKwlldmFsdWF0ZSB0aGUgYWRkciB0d2ljZSBpZiBpdCBoYXMgc2lkZSBlZmZlY3RzLgorCisJTW9uIE9jdCAgNSAxMzowNTozNyAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IE1ha2Ugc3VyZSB3ZSBkb24ndCBldmFsdWF0ZSB0aGUgYmFzZQorCWV4cHJlc3Npb24gdHdpY2UgaWYgaXQgaGFzIHNpZGUgZWZmZWN0cy4KKworCU1vbiBPY3QgIDUgMTI6Mzg6MzUgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBJc3N1ZSBhIHdhcm5pbmcgb3IgZXJyb3IgaWYgd2UncmUKKwliZWluZyBBTlNJLWNhcmVmdWwgd2hlbiB0aGV5IGRvIGBleHRlcm4gaW5saW5lJy4KKwkoZmxhZ19hbnNpKTogQWRkIGV4dGVybiBkZWNsLgorCisJTW9uIE9jdCAgNSAxMjozNDozMiAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBnaXZlIGFuIGVycm9yIGlmIGFuIGVudW1lcmF0aW9uCisJdHlwZSBpcyBzdHVjayBpbiBhIGJpdC1maWVsZCwgYXMgaXQgaXMgbGVnYWwgYysrLgorCisJTW9uIE9jdCAgNSAxMTo0MzowOSAxOTkyICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlNb24gU2VwIDE0IDE2OjM5OjEwIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IERvbid0IHBhc3MgdHJ1bmNhdGlvbiB0aHJ1IGxzaGlmdAorCWlmIHNoaWZ0IGNvdW50ID49IHdpZHRoIG9mIG5hcnJvd2VyIHR5cGUuICBJbnN0ZWFkLCBqdXN0IHVzZSAwLgorCisJRnJpIE9jdCAgMiAxMzoyMTo0MCAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5Aa3lyaWF0aC5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogUmVpbnN0YXRlIGVycm9yIGNoZWNrIGZvciBtaXNzaW5nCisJc2VtaWNvbG9uIGVycm9uZW91c2x5IHJlbW92ZWQuCisKK1RodSBOb3YgMTIgMTc6Mzc6MjMgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMubWQgKG1vdmRmX2ludGVybmFsKTogU3BsaXQgbW92ZGYgaW5zbiBpbnRvIHR3byAtLSBvbmUgZm9yCisJbm9ybWFsIHVzZSwgYW5kIG9uZSBmb3IgLW1zb2Z0LWZsb2F0LCBhbmQgZG9uJ3QgcHJlZmVyIEZQVQorCXJlZ2lzdGVycyBpbiB0aGUgLW1zb2Z0LWZsb2F0IGNhc2UuCisJKG1vdnNmX2ludGVybmFsKTogRGl0dG8gZm9yIG1vdnNmLgorCitUaHUgTm92IDEyIDA3OjMwOjE3IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5oIChIQVJEX1JFR05PX01PREVfT0spOiBSZXN0cmljdCBNT0RFX0lOVCBmcm9tIEZQIHJlZ3Mgb25seS4KKworCSogaTM4Ni5tZCAoZmxvYXRNTjIgcmVjb2duaXplcnMpOiBEb24ndCBvbWl0IG1vZGUgb24gYQorCW1hdGNoX29wZXJhbmQgdGhhdCBtaWdodCBiZSByZWxvYWRlZC4gIFNwbGl0IGludG8gc2VwYXJhdGUKKwlwYXR0ZXJucyBmb3IgZWFjaCBtb2RlLgorCSh6ZXJvX2V4dHJhY3QgdGVzdCk6IERpc2FibGUgZm9yIG5vdy4KKworCSogaTM4Ni5jIChmbG9hdF9vcCk6IERlbGV0ZSAtIG5vIGxvbmdlciB1c2VkLgorCitXZWQgTm92IDExIDExOjU1OjIyIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisgCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24sIGNhc2UgQVNISUZUUlQpOiBtb2RlX2Zvcl9zaXplCisJcmV0dXJucyBCTEttb2RlIG9uIGVycm9yLCBub3QgVk9JRG1vZGUuCisKKwkqIHJvbXAubWQgKHJlbG9hZF9vdXRkaSk6IFdyaXRlIGFzIHByb3BlciBQQVJBTExFTC4KKworV2VkIE5vdiAxMSAwMTowNjozMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBDaGFuZ2UgK2UuLi4gdG8gLStlLi4uCisKKwkqIHhtLXRvd2VyLmg6IEluY2x1ZGUgeG0tc3ZyMy5oLgorCShiY29weSwgYnplcm8sIGJjbXAsIFVTRyk6IE1hY3JvcyBkZWxldGVkLgorCitUdWUgTm92IDEwIDEyOjI2OjIzIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluIChzYWNAY3lnbnVzLmNvbSkKKworCSogc2Rib3V0LmMgKHBsYWluX3R5cGVfMSk6IEhhbmRsZSBMT05HX1RZUEVfU0laRSBsaWtlIElOVF9UWVBFX1NJWkUuCisKK1R1ZSBOb3YgMTAgMTQ6MjA6MjcgMTk5MiAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIG1pcHMubWQgKGZmc3NpMik6IEFkZCA9JiBjb25zdHJhaW50cyB0byB0aGUgdHdvIG1hdGNoX3NjcmF0Y2gKKwljbG9iYmVyZWQgcmVnaXN0ZXJzLiAgRml4IGZyb20gSm9obiBGIENhcnIuCisKKwkqIG1pcHMtdGR1bXAuYyAodG9wbGV2ZWwpOiBNb3ZlICN1bmRlZiBpbmRleCBhbmQgcmluZGV4IGJlZm9yZQorCWluY2x1ZGluZyBzeW0uaC4KKworVHVlIE5vdiAxMCAxMDozNzo1MCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IERlbGV0ZSBkZXBzICQoc3JjZGlyKS9nKysgJChzcmNkaXIpL2MrKworCisJKiBleHByLmMgKGluaXRfZXhwcl9vbmNlKTogVHJ5IGluZGV4aW5nIG1lbSBieSBmcCBhcyB3ZWxsIGFzIHNwLgorCitUdWUgTm92IDEwIDEwOjI4OjU5IDE5OTIgIENocmlzIFNtaXRoICAoY3NtaXRoQGNvbnZleC5jb20pCisKKwkqIGdlbmF0dHJ0YWIuYyAobWFpbik6IFVubGltaXQgc3RhY2sgc2l6ZS4KKworVHVlIE5vdiAxMCAxMDoxNzo1MSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBVc2Ugc2l6ZW9mIHNwYWNlcyAtIDEgdG8gZ2V0IHRoZSBsZW5ndGgKKwlvZiB0aGUgc3BhY2VzIHN0cmluZy4KKworVHVlIE5vdiAxMCAwOTo1NjozMiAxOTkyICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzY2hpcmYuY3MudXRhaC5lZHUpCisKKwkqIHBhLWhwdXguaCAoTElOS19TUEVDKTogRGlzYWJsZSBsaW5raW5nIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcy4KKwkqIHBhLWdocHV4LmggKExJTktfU1BFQyk6IExpa2V3aXNlLiAKKworVHVlIE5vdiAxMCAwODozOTowMSAxOTkyICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lciBhdCB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbHhzaS5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBWZXJpZnkgdGhhdCByZWdpc3RlciBpcyB2YWxpZAorCWZvciB1c2UgYXMgYmFzZSByZWdpc3RlciAodW4tYWxsb2NhdGVkIHBzZXVkb3MgYXJlbid0IHdoZW4gc3RyaWN0KS4KKworTW9uIE5vdiAgOSAyMjoxNzoyMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHhtLTNiMS5oIChpbmRleCwgcmluZGV4KTogRGVmaW5lIGFzIG1hY3Jvcy4KKworCSogaTM4NmJzZC5oOiBDb21wbGV0ZSByZXdyaXRlLgorCitNb24gTm92ICA5IDE0OjIyOjM4IDE5OTIgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBtaXBzLmgsIGRlY3Jvc2UuaDogTW92ZSBMSU5LX0xJQkdDQ19TUEVDSUFMIHRvIGRlY3Jvc2UuaC4KKworTW9uIE5vdiAgOSAxMjozOTowMyAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHVucm9sbC5jIChmaW5hbF9iaXZfdmFsdWUpOiBNYWtlIGEgbm90ZSBhZnRlciBsb29wX2VuZAorCWlmIHdlIG5lZWQgdG8gdXNlIE5FWFRfSU5TTiAobG9vcF9lbmQpLgorCisJKiBvYmpjLWFjdGlvbnMuYyAoYnVpbGRfbWVzc2FnZV9leHByKTogRG9uJ3QgY3Jhc2ggaWYgc3VwZXJfdHlwZSBpcyAwLgorCitNb24gTm92ICA5IDA3OjQyOjMwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNhbGxlci1zYXZlLmMgKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IEVuc3VyZSBhbnkgaW5zbnMgd2UgYWRkCisJYXJlIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIGFzIHRoZSBpbnNuIHdlIGFkZGVkIHRoZW0gZm9yLgorCitNb24gTm92ICA5IDEyOjM1OjU3IDE5OTIgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBqdXBpdGVyLnNpY3Muc2UpCisKKwkqIHBhLmggKFRBUkdFVF8qKTogTW92ZSBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgorCShDUFBfU1BFQyk6IEhhbmRsZSAtbW5vc25ha2UuCisJKiBwYS1naHB1eC5oIHBhLWhwdXguaCBwYTEtZ2hwdXguaCBwYTEtaHB1eC5oIHBhMS5oIHBhLmg6IE1vdmUKKwlkZWZpbml0aW9uIG9mIFRBUkdFVF9ERUZBVUxUIHRvIGJlZm9yZSBpbmNsdXNpb24gb2Ygb3RoZXIgcGEqaCBmaWxlcy4KKwlPbmx5IGRlZmluZSBUQVJHRVRfREVGQVVMVCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgorCUdldCByaWQgb2YgaHB1eDggY29uZGl0aW9uYWxzLgorCitTdW4gTm92ICA4IDIwOjM4OjE5IDE5OTIgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lcyBhdCBiaWd0ZXguY2FjdHVzLm9yZykKKworCSogaTM4Ni5tZCAobW92c3Ryc2kpOiBtYXNrIG1vdmUgY291bnQgYWZ0ZXIgc2lnbmVkIHNoaWZ0LgorCitTdW4gTm92ICA4IDAwOjI0OjMwIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jLnN2cjQ6IEF2b2lkIHVzZSBvZiB8IGluIHNlZCByZWdleHA7IHVzZSBtdWx0aXBsZSBzIGNvbW1hbmRzLgorCisJKiBpMzg2bWFjaC5oOiBJbmNsdWRlIGkzODZnc3RhYnMuaCwgbm90IGkzODZnYXMuaC4KKworCSogZ3N5c2xpbWl0cy5oOiBSZW5hbWVkIGZyb20gc3lzbGltaXRzLmguCisJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogc3lzbGltaXRzLmggZGVsZXRlZC4KKwkoaW5zdGFsbC1jb21tb24taGVhZGVycyk6IEluc3RhbGwgZ3N5c2xpbWl0cy5oIGFzIHN5c2xpbWl0cy5oLgorCURlcGVuZCBvbiBnc3lzbGltaXRzLmggYW5kIGFzc2VydC5oLgorCisJKiBjY2NwLmMgKHJlc2Nhbik6IEFjY2VwdCAjIGFzIGNvbW1hbmQgaW5zaWRlIG1hY3JvIGFyZ3MsIGV0Yy4KKwlJZiBhbiBhY3R1YWwgbmV3bGluZSBhdCB0aGUgc2FtZSBsZXZlbCBwcmVjZWRlcy4KKworCSogZml4aW5jbHVkZXMgKEVYSU5JVCk6IFNldCBpdCB0byBgc2V0Jywgbm90IG51bGwuCisKKwkqIHRvcGxldi5jIChtYWluKTogVXNlIHN0cm5jbXAgd2hlbiB0ZXN0aW5nIGZvciBnc3RhYnMrIHZzIGdzdGFicy4KKworU2F0IE5vdiAgNyAxNzo0NjozNSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfdW5vcCk6CisJRm9yIGNvbXBsZXggbmVnYXRpb24sIGRvIGdldF9pbnNucywgbm90IGdlbl9zZXF1ZW5jZS4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogRG9uJ3QgY2xlYXIgREVDTF9JTklUSUFMIGluIGlubGluZSBmbiBkZWNscy4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogU3RyaXAgTk9QX0VYUFIgZnJvbSBpbmRpY2VzLgorCUNsZWFyIGVuZF9pbmRleCBpZiB0aGVyZSdzIGFuIGVycm9yIGluIGEgcmFuZ2UuCisKKwkqIG1pcHMtNXN5c3YuaCwgbWlwcy01c3ZyNC5oLCBtaXBzLTVic2QuaCAoQ1BQX1BSRURFRklORVMpOgorCUFkZCBzaW5nbGUtdW5kZXJzY29yZSB2YXJpYW50cyBvZiBhbGwgdGhlIHByZWRlZmluZWQgc3ltYm9scy4KKworCSogZ3N0ZGRlZi5oIFtfQU5TSV9IX106IFdoZW4gdW5kZWZpbmcgYXQgdGhlIGVuZCwgdGVzdCBfU1REREVGX0gsCisJbm90IF9fbmVlZF9wdHJkaWZmX3QuCisKKwkqIG1pcHMuYyAoZ2VuX2ludF9yZWxhdGlvbmFsKTogSGFuZGxlIG92ZXJmbG93IHdoZW4gaW5jcmVtZW50aW5nIGNtcDEuCisKK0ZyaSBOb3YgIDYgMjM6MDM6MTQgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBlbHhzaS5jOiBJbmNsdWRlIGNvbmZpZy5oLgorCitGcmkgTm92ICA2IDE4OjUzOjIxIDE5OTIgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAdGN0LmNvbSkKKworCSogaTM4NnNjby5oIChTVEFSVEZJTEVfU1BFQyk6IEZpeCBsaW5lIHdyYXAuCisJKFNJR05FRF9DSEFSX1NQRUMpOiBEZWZpbmVkIHRvIHNldCBfQ0hBUl9VTlNJR05FRC4KKworRnJpIE5vdiAgNiAxOTowNjo1NiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sKTogR2l2ZSBuYW1lIGAgJyB0byB1bm5hbWVkIGVudW1zLgorCitGcmkgTm92ICA2IDE1OjI2OjMwIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisgCisJKiBvcHRhYnMuYyAoaW5pdF9saWJmdW5jcyk6IEFkZCBjYXN0cyB3aGVuIGNvbXBhcmluZy9pbmNyZW1lbnRpbmcgZW51bS4KKyAKK0ZyaSBOb3YgIDYgMTU6NDE6MDAgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbik6IFJlYWxseSBhY2NlcHQgLWdzdGFicysuCisKK0ZyaSBOb3YgIDYgMDY6NDY6MjIgMTk5MiAgVG9tIFdvb2QgICh3b29kQGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsubWQgKHRjbmRfZGl2aWRlX2J5X3plcm8sIGRpdnNpMywgdWRpdnNpMyk6IEFsbG93IHRoZQorCWV4cGxpY2l0IHRyYXAgZm9yIGRpdmlkZSBieSB6ZXJvIHRvIHJlc3VtZSBleGVjdXRpb24gYWxvbmcgdGhlCisJZXhwZWN0ZWQgcGF0aC4KKworCSogdC1tODhrdjQgKEZJWElOQ0xVREVTKTogRGVsZXRlLgorCitGcmkgTm92ICA2IDAzOjA4OjEzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaTM4Ni5tZCAoYW5kc2kzKTogTWFzayBpbW1lZCBvcCB0byAweGZmIGluIFFJLXJlZyBmZjAwLWJ5dGUgY2FzZS4KKworCSogZ3N0ZGRlZi5oOiBGaW5kIGFuc2kuaCBpbiBtYWNoaW5lIHN1YmRpci4KKwlbX19uZWVkX3B0cmRpZmZfdF06IERvbid0IHVuZGVmIF9TSVpFX1RfIG9yIF9XQ0hBUl9UXy4KKwkqIGd2YXJhcmdzLmgsIGdzdGRhcmcuaDogRG9uJ3QgdGVzdCwgZGVmaW5lIG9yIHVuZGVmIF9WQV9MSVNUXworCW9uIE5FVCAyIHN5c3RlbXMuICBEb24ndCBpbmNsdWRlIGFuc2kuaC4KKworCSogYy1sZXguYyAocmVhZGVzY2FwZSk6IFN1cHBvcnQgXGUgbGlrZSBcRS4gIFdhcm4gb25seSBpZiAtcGVkYW50aWMuCisKK0ZyaSBOb3YgIDYgMDg6MzQ6MTcgMTk5MiAgVGltIE1vb3JlICAobW9vcmUgYXQgZGVmbWFjcm8uY3MudXRhaC5lZHUpCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSlbQVJHU19HUk9XX0RPV05XQVJEXTogTWFwCisJdmlydHVhbCBhcmdzIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgYXJndW1lbnQgYmxvY2suCisJKiBjYWxscy5jIChleHBhbmRfY2FsbClbQVJHU19HUk9XX0RPV05XQVJEXSBGaXggZmVuY2Vwb3N0IGVycm9yIGluCisJY2FsY3VsYXRpbmcgaGlnaF90b19zYXZlIGFuZCBsb3dfdG9fc2F2ZS4gIFVzZSAtIGhpZ2hfdG9fc2F2ZSB0bworCWFkZHJlc3Mgc3RhY2tfYXJlYS4KKworRnJpIE5vdiAgNiAwMDo0MTo1MyAxOTkyICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogc3BhcmMuaCAoVEFSR0VUX0VET00sIEdFTl9FUlJOT19SVFgpOiBEZWxldGVkLgorCitUaHUgTm92ICA1IDE4OjU1OjQ0IDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKG91dHB1dF9wcm9sb2d1ZSk6IEZpeCB0eXBvOiBgYWRkJyBzaG91bGQgYmUgYGFkZHEnLgorCitUaHUgTm92ICA1IDE4OjM1OjQzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZml4aW5jbHVkZXMpOiBBZGQgc2VtaWNvbG9uIGluIG5ldyBmb3ItbG9vcC4KKworVGh1IE5vdiAgNSAxNToyNDoxNCAxOTkyICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4NnJvc2UuaCwgZGVjcm9zZS5oIChSRUFMX0xEX0ZJTEVfTkFNRSk6IERlZmluZSB0byBiZSB0aGUKKwljb3JyZWN0IGxvY2F0aW9uIG9uIE9TRi8xIC0tIC91c3IvYmluL2xkIHBvaW50cyB0bworCS91c3IvY2NzL2djYy9sZCwgd2hpY2ggaXMgY29sbGVjdC4KKwkoUkVBTF9OTV9GSUxFX05BTUUpOiBEaXR0byBmb3Igbm0uCisJKFJFQUxfU1RSSVBfRklMRV9OQU1FKTogRGl0dG8gZm9yIHN0cmlwLgorCitXZWQgTm92ICA0IDEzOjM2OjEwIDE5OTIgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IFdoZW4gdHJ5aW5nIHRvIGV4cGFuZCBhIG11bHRpcGxlIHdvcmQKKwlhZGQgaW50byBtdWx0aXBsZSBzaW5nbGUgd29yZCBhZGRzLCBkb24ndCBvdmVyd3JpdGUgT1AwIGFuZCBPUDEgaW4KKwljYXNlIHdlIG11c3QgYmFja3RyYWNrLiAgV2UgdXNlIGluc3RlYWQgbmV3IHZhcmlhYmxlcyBYT1AwIGFuZCBYT1AxLgorCitXZWQgTm92ICA0IDE2OjQ1OjUzIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLnN1YjogRG9uJ3QgZGlzY2FyZCBTQ08gdmVyc2lvbiBudW1iZXIgaWYgaXQncyAzLjJ2NC4KKworCSogeG0tdmF4LXZtcy5oIChIT1NUX0ZMT0FUX0ZPUk1BVCk6IERlZmluZWQuCisKKwkqIHZhcmFzbS5jOiBGaXggdHlwb3MgaW4gbGFzdCBjaGFuZ2UuCisKK1dlZCBOb3YgIDQgMTA6MTE6MjggMTk5MiAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGp1cGl0ZXIuc2ljcy5zZSkKKworCSogdmEtcGEuaCAodmFfZW5kKTogRG8gaXQgbGlrZSBpbiBvdGhlciB2YS0qLmggZmlsZXMuCisKK1dlZCBOb3YgIDQgMDc6MjM6NDYgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAob3B0aW1pemVfcmVnX2NvcHlfMSk6IElmIFAgaXMgYSBDQUxMX0lOU04sIGNvdW50CisJaXQgYXMgYmVpbmcgY3Jvc3NlZCBieSBTUkMgc2luY2UgU1JDIHVzZWQgdG8gZGllIHRoZXJlLgorCitXZWQgTm92ICA0IDAwOjEzOjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeC1uZXh0IChsaWJnY2MyLmEsIHN0ZGFyZy5oKTogTmV3IHJ1bGVzLgorCisJKiB2YXJhc20uYyAoaW1tZWRfcmVhbF9jb25zdF8xLCBpbW1lZF9kb3VibGVfY29uc3QpOgorCURvbid0IHB1c2ggb24gY29uc3RfZG91YmxlX2NoYWluIGluIG5lc3RlZCBmdW5jdGlvbi4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IERvIHJldHVybiBhIHZhbHVlLCBpbiBjb21wbGV4IGNhc2UuCisKK1R1ZSBOb3YgIDMgMTA6NDU6MDkgMTk5MiAgSC5KLiBMdSAgKGhsdUB5YXJkYmlyZC5lZWNzLndzdS5lZHUpCisKKwkqIGkzODZsaW51eC5oIChTVEFSVEZJTEVfU1BFQyk6IC1zdGF0aWMgaXMgYWRkZWQgdG8gbGQgaWYgCisJICAtcGcsIC1nIG9yIC1wIGlzIHBhc3NlZCBkb3duIGJ5IGdjYy4KKworVHVlIE5vdiAgMyAxNToxNDo0OCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9pb3IpOiBIYW5kbGUgImlvciIgYWdhaW5zdCB6ZXJvLgorCisJKiBpMzg2bWFjaC5oIChZRVNfVU5ERVJTQ09SRVMpOiBEZWZpbmUgaXQuCisKKwkqIHN1bjMuaCAoQVNNX09VVFBVVF9GTE9BVF9PUEVSQU5EKTogVXNlIFJFQUxfVkFMVUVfTUlOVVNfWkVSTy4KKwkoQVNNX09VVFBVVF9ET1VCTEVfT1BFUkFORCk6IExpa2V3aXNlLgorCitUdWUgTm92ICAzIDA4OjI1OjM1IDE5OTIgIENocmlzIFNtaXRoICAoY3NtaXRoQGNvbnZleC5jb20pCisKKwkqIGNvbnZleC5oIChSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiBBZGQgJ0EnLCBpbmRleCByZWdzLgorCShtb3ZzaSBhbHRlcm5hdGl2ZSk6IFVzZSBpdCB0byBtYWtlIHBzaC53IHNwIChwdXNoIHRoZQorCXN0YWNrIHBvaW50ZXIpIGEgbm9uaW5zdHJ1Y3Rpb24uCisKK1R1ZSBOb3YgIDMgMDg6MDU6MTAgMTk5MiAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogRW5zdXJlIG9wZXJhbmQgb2YgUkVHX05PVEVTIGlzIGFuIElOU047CisJb3RoZXJ3aXNlLCB3ZSBtaWdodCB0cnkgdG8gcmVhZCBvdXRzaWRlIGFsbG9jYXRlZCBtZW1vcnkuCisKKwkqIHZhLWFscGhhLmggKHZhX2VuZCk6IERvbid0IGRlZmluZSBlbnVtIGlmIHZhX2VuZCBhbHJlYWR5IGRlZmluZWQuCisKK1R1ZSBOb3YgIDMgMDI6NTY6MjIgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBvYmpjL01ha2VmaWxlOiBVc2UgJChzcmNkaXIpLCBub3QgYC4uJy4KKworCSogb2JqYy1hY3Rpb25zLmMgKGJ1aWxkX21lc3NhZ2VfZXhwcik6IFVzZSBzYXZlX2V4cHIgZm9yIHJlY2VpdmVyLgorCisJKiB2YS1pODYwLmggKHZhX2VuZCwgYW5vbnltb3VzIGVudW0pOiBEb24ndCBkZWNsYXJlIGlmCisJdmFfZW5kIGFscmVhZHkgZGVmaW5lZCBhcyBtYWNyby4KKwkqIHZhLW1pcHMuaCwgdmEtaTk2MC5oICh2YV9lbmQpOiBJZiBhbHJlYWR5IGEgbWFjcm8sIGRvbid0IGRlY2xhcmUuCisKK01vbiBOb3YgIDIgMjE6MTc6NDAgMTk5MiAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIHZhLXNwYXJjLmggKHZhX2VuZCk6IElmIGFscmVhZHkgZGVmIGFzIG1hY3JvLCBkb24ndCBkZWNsYXJlLgorCitNb24gTm92ICAyIDE2OjA0OjUxIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaTM4NmxpbnV4Lmg6IEluY2x1ZGUgaTM4NmdzdGFicy5oLCBub3QgaTM4Nmdhcy5oLgorCitNb24gTm92ICAyIDE0OjQ2OjMxIDE5OTIgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyIGF0IHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNyb3NzLXRvb2xzKTogRGVsZXRlIG9sZCBzeW1saW5rIGJlZm9yZQorCW1ha2luZyBuZXcgb25lOyBlbHNlIHN5bWxpbmsgd2lsbCBmYWlsIGFuZCB3ZSB3aWxsIHVzZQorCWJhY2tlZCBzdHJhdGVneS4KKworU3VuIE5vdiAgMSAxNzo1NTo1NiAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHZhcmFzbS5jIChkZWNvZGVfcnR4X2NvbnN0KTogSGFuZGxlIFBDIHNhbWUgYXMgTEFCRUxfUkVGLgorCitTdW4gTm92ICAxIDAzOjE5OjM5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogVmVyc2lvbiAyLjMuMSByZWxlYXNlZC4KKworCSogeC1pMzg2czQ6IFJlbmFtZWQgZnJvbSB4LWkzODZzY280LgorCSogY29uZmlndXJlIChpWzM0XTg2LSotc2NvKik6IFVzZSBuZXcgbmFtZS4KKworCSogc29sMi1jMS5hc20sIHNvbDItY2kuYXNtLCBzb2wyLWNuLmFzbTogUmVuYW1lZCBmcm9tIHNvbDItY3J0Li4uCisJKiB0LXNvbDI6IFVzZXIgbmV3IG5hbWVzLgorCitTZWUgQ2hhbmdlTG9nLjYgZm9yIGVhcmxpZXIgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuOCBiL2djYy9DaGFuZ2VMb2cuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzkxNDBlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL0NoYW5nZUxvZy44CkBAIC0wLDAgKzEsMTEwODAgQEAKK1R1ZSBNYXIgIDEgMTk6NDM6MzEgMTk5NCAgU3RhbiBTaGVicyAgKHNoZWJzQGN5Z251cy5jb20pCisKKwkqIGEyOWsvYTI5ay5oIChUQVJHRVRfU09GVF9GTE9BVCk6IERlZmluZS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tc29mdC1mbG9hdC4KKwkqIGEyOWsvYTI5ay5tZCAoYWxsIGZsb2F0aW5nIHBvaW50KTogRGlzYWJsZSBmbG9hdGluZyBwb2ludCBpbnNucworCWlmIGRvaW5nIHNvZnQgZmxvYXRzLgorCitUdWUgTWFyICAxIDE5OjM2OjA1IDE5OTQgIEdsZW5uIEhvbGxvd2F5ICAoZ2xlbm5Ac29pLmNvbSkKKworICAgICAgICAqIGRlZmF1bHRzLmggKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IFVzZQorCUFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwgaW5zdGVhZCBvZiBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwuCisKK1R1ZSBNYXIgIDEgMTk6MjY6NDcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzcGFyYy9zb2wyLmggKEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTik6IERlbGV0ZS4KKwkqIHNwYXJjL3N5c3Y0LmggKEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTik6IEFkZC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogUGFzcyBUUkVFX1RZUEUgKG9yaWdfb3AwKSBub3QKKwlvcmlnX29wMCB0byBUUkVFX1VOU0lHTkVELgorCitUdWUgTWFyICAxIDE4OjMzOjMzIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnQpOiBTdHJpcCBvZmYgc29tZSBOT1BfRVhQUnMKKwliZWZvcmUgZnVydGhlciBwcm9jZXNzaW5nLgorCitUdWUgTWFyICAxIDEyOjAwOjAwIDE5OTQgIFN0YW4gQ294ICAoY294c0BkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLmMgKGxlZ2l0aW1pemVfYWRkcmVzcywgcHJpbnRfb3BlcmFuZCk6IE1ha2UgLWZQSUMgd29yaworCWFnYWluLiAgUHV0IGFkZHJlc3NlcyBpbnNpZGUgVU5TUEVDIHdoZW4gbG9hZGluZyB0aGVtIHRvCisJZW5zdXJlIHRoYXQgY3NlIHdvbid0IG1pc3Rha2VubHkgb3B0aW1pemUgdGhlbS4KKyAgICAgICAgCisJKiBtODhrLm1kOiBUd28gbmV3IHBhdHRlcm5zLCB0byBtYXRjaCAoSElHSCAoVU5TUEVDICguLikpKSBhbmQKKwkoTE9fU1VNIChyZWcpIChVTlNQRUMgKC4uKSkpICBhcyBnZW5lcmF0ZWQgYWJvdmUuCisKKwkqIG04OGsuaDogKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUykgUmVqZWN0IGludmFsaWQgUElDIGFkZHJlc3Nlcy4KKworVHVlIE1hciAgMSAxMTowMDoxNCAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZTogRml4IHNvbWUgdHlwb3MuCisJKiBjb25maWcuc3ViOiBNb3ZlIGNvbW1lbnQgdG8gcHJvcGVyIHBsYWNlLgorCitNb24gRmViIDI4IDE4OjMxOjUwIDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogbnMzMmsvZW5jb3JlLmggKEFTTV9PVVRQVVRfQVNDSUkpOiBGaXggdHlwby4KKworTW9uIEZlYiAyOCAxODozMTo0MiAxOTk0ICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BjeWdudXMuY29tKQorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IENoYW5nZSBuYW1lIG9mIHRydW5jc2lwc2kgdG8gdHJ1bmNzaXBzaTIKKwl0byBjb25mb3JtIHRvIGV4aXN0aW5nIGNvbnZlbnRpb24sIHNhbWUgd2l0aCBleHRlbmRwc2lzaS4KKworTW9uIEZlYiAyOCAwODoxMTo1NSAxOTk0ICBKaW0gTWV5ZXJpbmcgIChtZXllcmluZ0Bjb21jby5jb20pCisKKwkqIGNjY3AuYyAoY2hlY2tfcHJlY29tcGlsZWQpOiBEZWxldGUgdW51c2VkIHZhciBkb2xsYXJfbG9jLgorCShwY3N0cmluZ191c2VkKTogRGVsZXRlIHVudXNlZCB2YXIgVE1QLgorCSh3cml0ZV9vdXRwdXQpOiBEZWxldGUgdW51c2VkIHZhciBXUklUVEVOLgorCShhc3NlcnRpb25fbG9va3VwKTogRGVsZXRlIHVudXNlZCB2YXIgQlAuCisJKHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogRGVsZXRlIHVudXNlZCB2YXIgSS4KKworTW9uIEZlYiAyOCAwNzoxMjoyNCAxOTk0ICBKdWxpYW4gQnJhZGZpZWxkICAoamNiQGRjcy5lZC5hYy51aykKKworCSogbTY4ay5tZCAoY2FsbCk6IENoYW5nZSBIUFVYX0FTTSBjYXNlLgorCSogbTY4ay9ocDMyMC5oIChSRUFET05MWV9EQVRBX1NFQ1RJT04sIExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCk6CisJRGVmaW5lZC4KKwkoRlVOQ1RJT05fUFJPTE9HVUUpOiBFbWl0IFBJQyBwcm9sb2d1ZS4KKworTW9uIEZlYiAyOCAwNjoyMToxOCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzLCBjYXNlIE1VTFQpOiBOZXcgY2FzZSwgdG8gYXBwbHkKKwlkaXN0cmlidXRpdmUgbGF3LCB3aGVuIG5lZWRlZC4KKworCSogc3Rvci1sYXlvdXQuYyAodmFyaWFibGVfc2l6ZSk6IElmIGdsb2JhbF9iaW5kaW5nc19wIDwgMCwKKwlkb24ndCBldmVuIG1ha2UgdGhlIFNBVkVfRVhQUi4KKworCSogcmVnLXN0YWNrLmMgKHJlZ190b19zdGFjayk6IFVzZSBHRVRfUlRYX0NMQVNTLgorCUNsZWFyIExBQkVMX1JFRnMgaGVyZS4KKwkoZmluZF9ibG9ja3MpOiBNYWtlIGFsZ29yaXRobSBpZGVudGljYWwgdG8gdGhhdCBpbnJlZ190b19zdGFjay4KKwlVc2UgR0VUX1JUWF9DTEFTUy4KKwlEb24ndCBjbGVhciBMQUJFTF9SRUZzIGhlcmUuCisJQnVpbGQgYSBsaXN0IG9mIGxhYmVscyByZWZlcmVuY2VkIGJ5IG90aGVyIHRoYW4ganVtcHMuCisJSWYgY29tcHV0ZWQganVtcCwgbWFyayB1c2luZyB0aGF0IGxpc3QgYW5kIGZvcmNlZF9sYWJlbHMuCisJKHVzZXNfcmVnX29yX21lbSk6IE5ldyBmdW5jdGlvbiwgY29waWVkIGZyb20gZmxvdy5jLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogVXNlIGV4cGFuZF9kaXZtb2QgdG8gZG8KKwlpbnRlZ2VyIGRpdmlzaW9uIGZvciBESVYgb2YgTU9ERV9DT01QTEVYX0lOVCBvcGVyYW5kcy4KKworU3VuIEZlYiAyNyAyMDoyNDozMCAxOTk0ICBSb2IgQXVzdGVpbiAgKHNyYUBlcGlsb2d1ZS5jb20pCisKKwkqIHByb3RvaXplLmMgKHByb2Nlc3NfYXV4X2luZm9fZmlsZSk6IFByb3Blcmx5IHN0YXJ0IG92ZXIgb24KKwlmaWxlIGVycm9yLgorCitTdW4gRmViIDI3IDE3OjQyOjE5IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKHN0b3JlX3NwbGl0X2JpdF9maWVsZCk6IElmIE9QMCBpcyBhIFNVQlJFRywgdGhlbgorCWNvbXB1dGUgV09SRCBmcm9tIHRoZSBiYXNlIHJlZ2lzdGVyLCBpbnN0ZWFkIG9mIGZyb20gdGhlIFNVQlJFRy4KKwkoZXh0cmFjdF9zcGxpdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KKwkoZXh0cmFjdF9iaXRfZmllbGQpOiBTaWduLWV4dGVuZCBtdWx0aXdvcmQgYml0ZmllbGQgaWYgbmVjZXNzYXJ5LgorCisJKiBlbWl0LXJ0bC5jIChzdWJyZWdfcmVhbHBhcnRfcCk6IE5ldyBmdW5jdGlvbi4KKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFVzZSBzdWJyZWdfcmVhbHBhcnRfcAorCWluc3RlYWQgb2Ygc3VicmVnX2xvd3BhcnRfcCBmb3IgQ09OQ0FULgorCisJKiBjLXByYWdtYS5jIChIQU5ETEVfUFJBR01BX1dFQUspOiBEZXBlbmQgb24gQVNNX09VVFBVVF9ERUYgbm90CisJU0VUX0FTTV9PUCB3aGVuIGRlZmluaW5nIGl0LgorCSogZHdhcmZvdXQuYyAoQVNNX09VVFBVVF9ERUYpOiBEZWxldGUgZGVmaW5pdGlvbi4KKwkqIGRlZmF1bHRzLmggKEFTTV9PVVRQVVRfREVGKTogQWRkIGl0IGhlcmUuCisJKiB2YXJhc20uYyAoaGFuZGxlX3ByYWdtYV93ZWFrKTogRGVwZW5kIG9uIEFTTV9PVVRQVVRfREVGIG5vdAorCVNFVF9BU01fT1Agd2hlbiBkZWZpbmluZyBpdC4gIFVzZSBBU01fT1VUUFVUX0RFRiB0byBvdXRwdXQgdmFsdWUKKwlpbnN0ZWFkIG9mIFNFVF9BU01fT1AgYW5kIGV4cGxpY2l0IEFTTV9PVVRQVVRfTEFCRUxSRUYgY2FsbHMuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU2V0IG5yZWdzIHRvIC0xIGZvciBCTEttb2RlIHBhcmFtZXRlciwKKwl0aGVuIGJlZm9yZSBtb3ZlX2Jsb2NrX3RvX3JlZyBjYWxsIHNldCBpdCB0byB0aGUgdHlwZSBzaXplLgorCisJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBTdWNjZXNzIHdoZW4gU0xPVF9OVU1CRVIgPT0KKwlOVU1fU0xPVFMgbm90IHdoZW4gTkVYVF9UT19NQVRDSCA9PSAwLgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogQWRqdXN0IEJJVFBPUyBzbyB0aGF0IGl0CisJZml0cyBpbnNpZGUgTU9ERSBiZWZvcmUgYWRqdXN0aW5nIE9GRlNFVCB0byBnZXQgYW4gYWxpZ25lZCBhZGRyZXNzLgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogTW92ZSBmbG9hdCBtb2RlIHRvIGludGVncmFsCisJbW9kZSBjb252ZXJzaW9uIGZyb20gbmVhciBlbmQgb2YgZnVuY3Rpb24gdG8gdG9wIG9mIGZ1bmN0aW9uLgorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfZWxlbWVudCk6IENoZWNrIGZvciBjb25zdHJ1Y3Rvcl90eXBlCisJc2V0IGJlZm9yZSBkZXJlZmVyZW5jaW5nIGl0IGluIHRoZSBzdHJpbmcgY3N0IGNvZGUuCisKK1N1biBGZWIgMjcgMTc6Mjg6MDYgMTk5NCAgUGhpbGlwcGUgRGUgTXV5dGVyICAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay9tb3QzMzAwLmggKFRBUkdFVF9ERUZBVUxUKTogRGVmYXVsdCB0byA2ODAyMC00MC4KKwkoQVNNX1NQRUMpOiBOZXcgbWFjcm8uCisJKEZVTkNUSU9OX1ZBTFVFLCBGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogUmV0dXJuIHBvaW50ZXIgaW4gYTAuCisJKCpfTElCQ0FMTCk6IFVzZSBmdW5jdGlvbnMgZnJvbSBzeXNWNjgncyBsaWJyYXJ5LgorCShJTklUX0NVTVVMQVRJVkVfQVJHUywgRlVOQ1RJT05fQVJHKik6IFNvbWUgbGliY2FsbHMgcGFzcworCXBhcmFtZXRlcnMgaW4gcmVnaXN0ZXJzLgorCitTdW4gRmViIDI3IDE1OjIwOjM1IDE5OTQgIFJvbiBHdWlsbWV0dGUgIChyZmdAbmV0Y29tLmNvbSkKKworCSogZmxhZ3MuaCAoaWRfY2xhc2hfbGVuKTogTm93IHVuc2lnbmVkLgorCSh3YXJuX2xhcmdlcl90aGFuLCBsYXJnZXJfdGhhbl9zaXplKTogTmV3IHZhcmlhYmxlcy4KKwkqIHRvcGxldi5jOiBMaWtld2lzZS4KKwkobWFpbik6IFN1cHBvcnQgLVdsYXJnZXItdGhhbi1OTi4KKwkqIGMtY29tbW9uLmMgKGRlY2xhcmVfaGlkZGVuX2NoYXJfYXJyYXkpOiBCdWlsZCBuZXcgdHlwZSBpZgorCXdhcm5fbGFyZ2VyX3RoYW4uCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wsIGZpbmlzaF9mdW5jdGlvbik6IElzc3VlIHdhcm5pbmcgZm9yCisJbGFyZ2Ugb2JqZWN0cywgaWYgcmVxdWVzdGVkLgorCitTdW4gRmViIDI3IDEwOjUwOjUwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQWxsb3cgZXh0cmEgYXJndW1lbnRzCisJYW5kIGZvcmNlIHRoZWlyIGV2YWx1YXRpb24gZm9yIHNpZGUtZWZmZWN0cy4KKworCSogbG9jYWwtYWxsb2MuYyAocXR5X2NvbXBhcmV7LF8xfSk6IEdpdmUgbXVsdGktd29yZCByZWdzIGhpZ2hlcgorCXByaW9yaXR5LCBhcyBzdGF0ZWQgaW4gdGhlIGNvbW1lbnRzLgorCSogZ2xvYmFsLmMgKGFsbG9jbm9fY29tcGFyZSk6IExpa2V3aXNlLgorCisJKiBjLWNvbW1vbi5jIChiaW5hcnlfb3BfZXJyb3IpOiBJbml0aWFsaXplIE9QTkFNRS4KKwkqIGMtZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogSW5pdGlhbGl6ZSBzb21lIHZhcnMuCisJKiBjLWxleC5jIChyZWFkZXNjYXBlKTogSW5pdGlhbGl6ZSBGSVJTVERJRy4KKwkqIGMtdHlwZWNrLmMgKHR5cGVfbGlzdHNfY29tcGF0aWJsZV9wKTogSW5pdGlhbGl6ZSBORVdWQUwuCisJKHBvcF9pbml0X2xldmVsKTogSW5pdGlhbGl6ZSBTSVpFLgorCShvdXRwdXRfcGVuZGluZ19pbml0X2VsZW1lbnRzKTogSW5pdGlhbGl6ZSBORVhUUE9TX1RSRUUuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEluaXRpYWxpemUgT0xEX1BFTkRJTkdfQURKLgorCSogY2NjcC5jIChtYWluLCBhcmdzIGNhc2UgJ0QnKTogUmV3cml0ZSB0byBhdm9pZCB1bmluaXRpYWxpemVkIHZhci4KKwkobWFpbiwgYXJncyBjYXNlICdBJyk6IERlbGV0ZSB1bnVzZWQgdmFyIFAxLgorCShyZXNjYW4pOiBJbml0aWFsaXplIFNUUi4KKwkoZG9feGlmZGVmLCBkb19lbmRpZik6IEluaXRpYWxpemUgYXJnIHRvIHNraXBfdG9fZW5kX29mX2NvbW1lbnQuCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuKTogRGVsZXRlIHVudXNlZCB2YXJzLgorCShlbWl0X21vdmVfaW5zbl8xKTogRG9uJ3Qgc2V0IFNVQk1PREUgdW5sZXNzIHVzZWQuCisJKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX1NBVkVSRUdTKTogQ2xlYW4gdXAgdXNlcyBvZiBWQUxSRUcKKwlhbmQgU0FWRURfVkFMUkVHLgorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQWx3YXlzIHNldCBPUFMgYW5kIHVzZSBhbGxvY2EuCisJKiBnY2MuYyAoZXhlY3V0ZSk6IEluaXRpYWxpemUgUFJPRy4KKwkqIG9wdGFicy5jIChlbWl0X2Zsb2F0X2xpYl9jbXApOiBJbml0IExJQkZVTkM7IGFib3J0IGlmIG5vdCByZXNldC4KKwkqIHN0bXQuYyAoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzKTogUHJvcGVybHkgc2V0IE5PVEUgaWYgYnl0ZWNvZGUuCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSwgc3RhYmlsaXplX3JlZmVyZW5jZV8xKTogQWJvcnQgaWYgdW5rbm93biBjbGFzcy4KKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogSW5pdGlhbGl6ZSBOQU1FIGFuZCBhYm9ydCBpZiBub3QgcmVzZXQuCisKK1NhdCBGZWIgMjYgMTM6MDk6MzcgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKwkKKwkqIG1pcHMtdGZpbGUuYyAoZmF0YWwsIGVycm9yKTogRG9uJ3QgdXNlIHByb3RvdHlwZXMKKwlpZm5kZWYgSEFWRV9WUFJJTlRGLgorCisJKiBmaXhpbmNsdWRlczogRml4IGluY2x1ZGluZyBvZiBtYWNoaW5lL3IzX2NwdS5oIGFuZCBtYWNoaW5lL3I0X2NwdS5oCisJaW4gbWFjaGluZS9jcHUuaCBvbiBVbHRyaXggNC4zLgorCitTYXQgRmViIDI2IDA3OjE0OjA0IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oIChNQVNLX05PX1NVTV9JTl9UT0MsIFRBUkdFVF9OT19TVU1fSU5fVE9DKTogTmV3IG1hY3Jvcy4KKwkoTUFTS19NSU5JTUFMX1RPQyk6IENoYW5nZSBiaXQgdmFsdWUuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbW5vLXN1bS1pbi10b2M7IHVzZSAtbWZ1bGwtdG9jIGluc3RlYWQKKwlvZiAtbW5vcm1hbC10b2MsIG90aGVyIG1pbm9yIGNoYW5nZXMuCisJKiByczYwMDAubWQgKG1vdnNpKTogSWYgLW1uby1zdW0taW4tdG9jLCBkbyBhZGRpdGlvbiBvZgorCXN5bWJvbCArIGNvbnN0LgorCisJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3ApOiBGaXggYnVnIGluIGNvbXBhcmluZyBTVUJSRUdzCisJYW5kIFJFR3MuCisJVHdvIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMgYXJlIGVxdWFsIGlmIHRoZSBvcGVyYW5kcyBhcmUgaW4gdGhlCisJb3Bwb3NpdGUgb3JkZXIuCisKKwkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzX2luc24pOiBEZWxldGUgQ0xPQkJFUiBvZiBWQVIuICBJZgorCVZBUiBpcyBiZWluZyBhc3NpZ25lZCBpbnRvIGJ5IGEgbGliY2FsbCBzZXF1ZW5jZSwgcmVtb3ZlIHRoZQorCWxpYmNhbGwgbm90ZXMuCisKKwkqIGNzZS5jIChjb3VudF9yZWdfdXNhZ2UsIGNhc2UgU0VUKTogSWYgU1JDIGhhcyBzaWRlLWVmZmVjdHMsCisJY291bnQgYSB1c2FnZSBvZiBERVNUIGluIGl0LgorCisJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBJbiBwcm9tb3RlZCBUQVJHRVQgY2FzZSwgaWYgRVhQIGlzIGEKKwl2b2xhdGlsZSBNRU0gYW5kIFdBTlRfVkFMVUUgaXMgbm9uemVybywgb25seSByZWZlcmVuY2UgdGhlIE1FTSBvbmNlLgorCVJldHVybiBUQVJHRVQgaWYgaXQgaXMgYSBoYXJkIHJlZ2lzdGVyOyBjbGVhbiB1cCByZXR1cm4gY29kZS4KKworCSogdHJlZS5jIChzdWJzdGl0dXRlX2luX3R5cGUsIGNhc2UgUkVBTF9UWVBFKTogRml4IHR5cG8gaW4KKwlwcmV2aW91cyBjaGFuZ2UuCisKK0ZyaSBGZWIgMjUgMDY6NDI6MjAgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jIChzdWJzdGl0dXRlX2luX3R5cGUsIGNhc2UgUkVBTF9UWVBFKTogQWxsb3cKKwlUWVBFX3tNSU4sTUFYfV9WQUxVRSB0byBiZSB1bmFzc2lnbmVkLgorCisJKiBjb21iaW5lLmMgKGlmX3RoZW5fZWxzZV9jb25kKTogRml4IHR5cG8gaW4gbmFycm93aW5nIG9mIGEgU1VCUkVHLgorCisJKiBhbHBoYS5tZCAobmVnW3NkXWYyKTogVXNlICVSMSBjb25zaXN0ZW50bHkuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEb24ndCByZXN0cmljdCBjbGFzcyBvZiBtdWx0aXdvcmQKKwlvcGVyYW5kIHRvIHByZWZlcnJlZCBjbGFzcy4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IFJld29yayB0byB1c2UgYHN3aXRjaCcuCisJUmVsb2FkIGEgU1VCUkVHIG9mIGEgaGFyZCByZWcgYXMgYSB1bml0LgorCisJKiBhbHBoYS5tZCAobXVsKik6IERpc2FsbG93IG11bHRpcGx5IGJ5IGNvbnN0YW50LgorCitUaHUgRmViIDI0IDIxOjIwOjExIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jLnNjbzogSW4gPHByb3RvdHlwZXMuaD4sIGZpeCBwcm90b3R5cGVzIG9mIGdldGN3ZCBhbmQKKwlsaW5rLgorCitUaHUgRmViIDI0IDEzOjA2OjA1IDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLnN1YjogRG9uJ3QgZm9yY2Ugb3M9LWhwdXggZm9yIGhwOWsyLi4uIGFuZCBocDlrMy4uLgorCitUaHUgRmViIDI0IDExOjE3OjExIDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBjb25maWd1cmUgKGhwcGEqLSotb3NmKik6IFJlbmFtZWQgZnJvbSBocHBhKi0qLW1hY2guICBUYXJnZXQKKwlmaWxlbmFtZXMgY2hhbmdlZCBhY2NvcmRpbmdseS4KKworVGh1IEZlYiAyNCAwODo1NDoyNyAxOTk0ICBCb2IgTWlvcmVsbGkgIChwd2EtYiFtaW9yZWxsaUB1dW5ldC51dS5uZXQpCisKKwkqIGx5bnguaCAoTElCX1NQRUMsIExJTktfU1BFQyk6IEFkZCBtaXNzaW5nIGJsYW5rcy4KKworVGh1IEZlYiAyNCAwODo0MjowNyAxOTk0ICBJYW4gV2lsbGlzICAoaWFud0BzY28uY29tKQorCisJKiBpMzg2L3Njby5oLCBpMzg2L3Njb2RieC5oIChIQU5ETEVfU1lTVl9QUkFHTUEpOiBEZWZpbmUuCisKK1RodSBGZWIgMjQgMDc6MzE6NDQgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9vcC5jIChtYXliZV9lbGltaW5hdGVfYml2XzEpOiBJZ25vcmUgR0lWIGlmIGl0IGlzbid0CisJYWx3YXlzIGNvbXB1dGVkLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCwgc3RyZW5ndGhfcmVkdWNlKTogR28gYmFjayB0byBMT09QX1RPUCwgbm90CisJaXRzIE5FWFRfSU5TTiAoaW4gY2FzZSBTQ0FOX1NUQVJUID09IExPT1BfVE9QKS4KKworV2VkIEZlYiAyMyAwNzozMDoxNCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IElmIEVRVUlWIGlzIGEgU1VCUkVHLCAKKwltYWtlIGEgbmV3IFJFRy4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogV2FybiBpZiBhdHRyaWJ1dGUgd2lsbCBiZSBpZ25vcmVkLgorCUFsbG93IGBub3JldHVybicsIGB2b2xhdGlsZScsIGFuZCBgY29uc3QnIG9uIG9iamVjdCBvZiB0eXBlCisJcG9pbnRlciB0byBmdW5jdGlvbi4KKwlBbHdheXMgZ2l2ZSBkZWNsIHdpdGggZXJyb3Igb3Igd2FybmluZy4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRnVuY3Rpb25zIG1heSBiZSBjb25zdCBvciB2b2xhdGlsZSBmcm9tCisJdGhlaXIgdHlwZS4KKworVHVlIEZlYiAyMiAxMTowMDoxMiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBJbiAjW2VsXWlmLCBwdXQgZG91YmxlIHVuZGVyc2NvcmVzIGFyb3VuZCBNMzIsCisJbTg4aywgcGRwMTEsIHRvd2VyW18wLTldKiwgdTM3MCwgdTNiWzAtOV0qLiAgRnJvbSBLYXZlaCBSLgorCUdoYXppLgorCisJKiBmaXhpbmMuc2NvOiBGaXggcHJvdG90eXBlIGRlY2xhcmF0aW9uIG9mIHV0aW1lIGluIDxzeXMvdGltZXMuaD47CisJaXQncyBicm9rZW4gaW4gU0NPIDMuMnY0LjAuCisKK1R1ZSBGZWIgMjIgMDg6MTQ6MjggMTk5NCAgTWF0dGhpYXMgUGZhbGxlciAgKGxlb0BtYXJjby5kZSkgCisKKwkqIG5zMzJrLmggKEZVTkNUSU9OX3tQUk9MT0dVRSxFUElMT0dVRX0pOiAlJCBpcyBub3Qgc3VwcG9ydGVkCisJaW4gZnByaW50Zi4KKwkoQURKU1ApOiBOZXcgbWFjcm8gdG8gcmVzb2x2ZSAlJC4KKworCSogcGM1MzIuaCAoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IERlbGV0ZWQuCisJKiBwYzUzMi1tYWNoLmggKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBNb3ZlZCB0byBoZXJlLgorCShERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogRGVsZXRlZDsgcmVkdW5kYW50LgorCisJKiBuczMyay5jIChvdXRwdXRfbW92ZV9kY29uc3QpOiBOZXcgZnVuY3Rpb24uCisJKiBuczMyay5oIChvdXRwdXRfbW92ZV9kY29uc3QpOiBOZXcgZGVjbGFyYXRpb24uCisJKiBuczMyay5tZDogQWRkZWQgcGVlcGhvbGUgcGF0dGVybnMgZm9yIHN0YWNrIGFkanVzdG1lbnRzIGZvbGxvd2VkCisJYnkgUUkvSEkgcHVzaGVzLgorCShtb3ZzaSk6IFVzZSBvdXRwdXRfbW92ZV9kY29uc3QgZm9yIFRBUkdFVF8zMjUzMi4KKwkoZmZzKTogTmV3IHBhdHRlcm5zLgorCisJKiBuczMyay5jIChnbG9iYWxfc3ltYm9saWNfcmVmZXJlbmNlX21lbnRpb25lZF9wKTogTmV3IGZ1bmN0aW9uLgorCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBBbGxvdyBwYy1yZWxhdGl2ZSBtb2RlIG5vdCBvbmx5CisJZm9yIHtMQUJFTCwgU1lNQk9MfV9SRUYgYnV0IGZvciBDT05TVCB0b28uIElmIGNvbXBpbGluZyBQSUMsCisJdHJhbnNmb3JtICJzeW1ib2wrY29uc3QoUngpIiB0byAiY29uc3Qoc3ltYm9sKHNiKSlbUng6Yl0iLgorCSogbnMzMmsuaCAoT1ZFUlJJREVfT1BUSU9OUyk6IE5ldyBtYWNybyB0byBzdXBwb3J0IFBJQy4KKwkoRlVOQ1RJT05fUFJPTE9HVUUpOiBTYXZlL0xvYWQgc2Igd2hlbiBjb21waWxpbmcgUElDLgorCShGVU5DVElPTl9FUElMT0dVRSk6IFJlc3RvcmUgc2Igd2hlbiBjb21waWxpbmcgUElDLgorCShJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUKTogVGFrZSBzYXZlZCBzYiBpbnRvIGFjY291bnQgd2hlbiBQSUMuCisJKExFR0lUSU1BVEVfQ09OU1RBTlRfUCwgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKToKKwlTZXQgY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUgaWYgUCB1c2VzIGEgZ2xvYmFsCisJc3ltYm9saWMgcmVmZXJlbmNlLgorCShFTkNPREVfU0VDVElPTl9JTkZPKTogTmV3IG1hY3JvIHRvIHN1cHBvcnQgUElDLgorCitUdWUgRmViIDIyIDA3OjU5OjI3IDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBjeWdudXMuY29tKQorCisJKiBhbHBoYS5tZCAoZGl2c2kzKTogRW1pdCBhbGwgUlRMIGZyb20gUlRMIHRlbXBsYXRlLgorCSh1ZGl2c2kzLCBtb2RzaTMsIHVtb2RzaTMsIGRpdmRpMywgdWRpdmRpMywgbW9kZGkzLCB1bW9kZGkzKTogTGlrZXdpc2UuCisKK1R1ZSBGZWIgMjIgMDc6MjE6MzEgMTk5NCAgU2FtdWVsIEEuIEZpZ3Vlcm9hICAoZmlndWVyb2FAY3Mubnl1LmVkdSkKKworCSogaTM4Ni9vczIuaCAoTElOS19TUEVDLCBMSUJfU1BFQyk6IE5ldyBtYWNyb3MuCisJKFBBVEhfU0VQQVJBVE9SKTogRGVsZXRlIGZyb20gaGVyZS4KKwkqIGkzODYveG0tb3MyLmggKFBBVEhfU0VQQVJBVE9SKTogQWRkIHRvIGhlcmUuCisKK01vbiBGZWIgMjEgMTc6NDg6MzkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBtaXBzLXRmaWxlLmMgKGZhdGFsLCBlcnJvcik6IEFkZCAhIEhBVkVfVlBSSU5URiB2ZXJzaW9ucy4KKworU3VuIEZlYiAyMCAxNjo1MzowMiAxOTk0ICBUZWQgTGVtb24gIChtZWxsb25AcGVwcGVyLm5jZC5jb20pCisKKwkqIG1pcHMuYyAobWlwc19tb3ZlXzJ3b3Jkcyk6IENoZWNrIGZvciBUQVJHRVRfRkxPQVQ2NCAhPSBUQVJHRVRfNjRCSVQuCisJKG92ZXJyaWRlX29wdGlvbnMpOiBEb24ndCBvdmVycmlkZSBNQVNLXzY0QklUOyBkb24ndCBhbGxvdyAtZ3A2NAorCXdpdGhvdXQgLW1pcHMzLgorCSogbWlwcy5oOiBVcGRhdGUgbWlwczMgY29tbWVudHMuCisJKFRBUkdFVF9PUFRJT05TKTogQWRkIGdwNjQgYW5kIGdwMzIuCisJKFNFQ09OREFSWV9NRU1PUllfTkVFREVEKTogRG9uJ3QgYWxsb3cgZnA8LT5ncCBjb3B5IGlmIFRBUkdFVF9GTE9BVDY0CisJIT0gVEFSR0VUXzY0QklULgorCShDQzFfU1BFQyk6IEdlbmVyYXRlIGNvcnJlY3QgLW1mcCogYW5kIC1tZ3AqIGZyb20gLW1pcHMqCisJKiBtaXBzLm1kIChtb3ZkZl9pbnRlcm5hbDEpOiBEaXNhYmxlIGlmIFRBUkdFVF9GTE9BVDY0ICE9IFRBUkdFVF82NEJJVC4KKwkobW92ZGZfaW50ZXJuYWwxYSk6ICBOZXcgcGF0dGVybi4KKwkqIG9zZnJvc2UuaCAoQ0MxX1NQRUMpOiBVcGRhdGUgYXMgYWJvdmUuCisKK1N1biBGZWIgMjAgMTU6NDA6NDUgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzcGFyYy5oIChIQVJEX1JFR05PX01PREVfT0spOiBVcGRhdGUgY29tbWVudC4KKworCSogaXJpczUuaCAoT0JKRUNUX0ZPUk1BVF9FTEYpOiBBZGQgY29tbWVudHMuCisJKiBjb25maWd1cmUgKG1pcHMtc2dpLWlyaXg1KTogVXNlIGNvbGxlY3QuCisKK1NhdCBGZWIgMTkgMTQ6MjU6NDEgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogUGVybWl0IHVwcGVyIGNhc2UgY2hhcmFjdGVycyBpbiB0eXBlZGVmIG9mIHNpemVfdAorCWluIDxzeXMvdHlwZXMuaD4uCisKK1RodSBGZWIgMTcgMTg6MDI6MDIgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAY3lnbnVzLmNvbSkKKworCSogYy1wYXJzZS5pbiAoYXR0cmliKTogSGFuZGxlIGF0dHJpYnV0ZSAoKHNlY3Rpb24gKCJzdHJpbmciKSkpLgorCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRGVjb2RlIHNlY3Rpb24gYXR0cmlidXRlLgorCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlIHNlY3Rpb24gbmFtZSBpbnRvIG5ldyBkZWNsLgorCSogdHJlZS5oIChERUNMX1NFQ1RJT05fTkFNRSk6IE5ldyBtYWNyby4KKwkoc3RydWN0IHRyZWVfZGVjbCk6IE5ldyBtZW1iZXIgYHNlY3Rpb25fbmFtZScuCisJKiB2YXJhc20uYyAoSU5fTkFNRURfU0VDVElPTik6IE5ldyBtYWNyby4KKwkobmFtZWRfc2VjdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkoZW51bSBpbl9zZWN0aW9uKTogTmV3IHZhbHVlIGBpbl9uYW1lZCcuCisJKGluX25hbWVkX25hbWUpOiBOZXcgZ2xvYmFsLgorCShtYWtlX2Z1bmN0aW9uX3J0bCwgbWFrZV9kZWNsX3J0bCwgb3V0cHV0X2NvbnN0YW50X2RlZik6IEZpeCBjb21tZW50CisJcmVnYXJkaW5nIEFTTV9PVVRQVVRfTEFCRUxSRUYuCisJKG1ha2VfZGVjbF9ydGwpOiBXYXJuIGlmIHNlY3Rpb24gYXR0cmlidXRlIHVzZWQgd2l0aCB1bmluaXRpYWxpemVkCisJdmFyaWFibGUgZGVjbGFyYXRpb24uCisJKGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uLCBhc3NlbWJsZV92YXJpYWJsZSwgb3V0cHV0X2NvbnN0YW50X2RlZik6CisJQ2hhbmdlIHRvIG5hbWVkIHNlY3Rpb24gaWYgZ2l2ZW4uCisJKiBzcGFyYy9zeXN2NC5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERlZmluZS4KKwkqIGg4MzAwL2g4MzAwLmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRGVmaW5lLgorCShFWFRSQV9TRUNUSU9OUywgRVhUUkFfU0VDVElPTl9GVU5DVElPTlMsIFNFTEVDVF9TRUNUSU9OKTogRGVsZXRlLgorCShBU01fT1VUUFVUX0xBQkVMUkVGKTogQ2FsbCBmcHJpbnRmIGRpcmVjdGx5LgorCSogaDgzMDAvaDgzMDAuYyAoYXNtX291dHB1dF9sYWJlbHJlZik6IERlbGV0ZS4KKwkqIHNoL3NoLmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRGVmaW5lLgorCShBU01fT1VUUFVUX1NFQ1RJT04pOiBEZWxldGUuCisKK1dlZCBGZWIgMTYgMjE6NDY6NDggMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBpOTYwL2k5NjAuYyAoaTk2MF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFB1dCByZWdpc3RlciBzYXZlIGFyZWEgYmVmb3JlCisJb3V0Z29pbmcgYXJnIGJsb2NrLgorCitXZWQgRmViIDE2IDE1OjMzOjI2IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChnZXRfcG9pbnRlcl9hbGlnbm1lbnQpOiAgQUxJR04gaXMgYWxpZ25tZW50IG9mIGlubmVybW9zdAorCW9iamVjdCwgbm90IHRoZSBNQVggb2YgYWxpZ25tZW50IG9mIGFsbCBvYmplY3RzLgorCisJKiBleHByLmMgKGdyb3VwX2luc25zKTogRGVsZXRlLgorCShlbWl0X21vdmVfaW5zbl8xLCBleHBhbmRfZXhwcik6IFVzZSBlbWl0X25vX2NvbmZsaWN0X2Jsb2NrCisJaW5zdGVhZCBvZiBncm91cF9pbnNucy4KKworCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogUGFzcyBCSUdHRVNUX0FMSUdOTUVOVCBub3QgYWxpZ24gdG8KKwlBU01fT1VUUFVUX0FMSUdORURfTE9DQUwuCisKKwkqIGFscGhhLmMgKGFscGhhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBEb24ndCBpbmNsdWRlCisJY3VycmVudF9mdW5jdGlvbl9hcmdfb2Zmc2V0X3J0eCBpbiBhcmdzaXplLiAgU3VidHJhY3QgNDggZnJvbSBhcmcKKwliYXNlIGFkZHJlc3Mgd2hlbiBubyBpbnQgcmVnaXN0ZXJzIHN0b3JlZCBvbiB0aGUgc3RhY2suCisKKwkqIGdlbmF0dHJ0YWIuYyAoZXhwYW5kX3VuaXRzKTogRml4IGJsb2NrYWdlIGNhbGN1bGF0aW9uLgorCisJKiBsb29wLmMgKHNjYW5fbG9vcCk6IEFkZCBub19sYWJlbHNfYmV0d2Vlbl9wIGNhbGwgdG8gdGVzdHMgd2hpY2gKKwlkZWNpZGUgaWYgYW4gaW52YXJpYW50IHJlZyBjYW4gYmUgc2FmZWx5IHJlcGxhY2VkIHdpdGggaXRzIFNFVF9TUkMuCisKK1dlZCBGZWIgMTYgMDA6NTQ6MDQgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogRml4IHVzZXMgb2YgbmV3IGluIFhtL1RyYXZlcnNhbC5oLiAgRm91bmQgb24KKwlSUy82MDAwLgorCitUdWUgRmViIDE1IDE5OjQ0OjQxIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiB0cmVlLmRlZjogIFJlbW92ZSBTVFJJTkdfVFlQRS4gIE5vLW9uZSB1c2VzIGl0LgorCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV90eXBlKTogIE5ldyBiaXRmaWVsZCBzdHJpbmdfZmxhZy4KKwkqIHRyZWUuaCAoVFlQRV9TVFJJTkdfRkxBRyk6ICBOZXcgbWFjcm8uCisJKiB0cmVlLmMsIHNwYXJjLmM6ICBSZW1vdmUgdW5uZWVkZWQgdGVzdHMgZm9yIFNUUklOR19UWVBFLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiksIGR3YXJmb3V0LmM6ICBVc2UgVFlQRV9TVFJJTkdfRkxBRy4KKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6ICBGb3IgU0VUX1RZUEUgYW5kIEFSUkFZX1RZUEUsIHVzZQorCVRZUEVfU1RSSU5HX0ZMQUcgdG8gZW1pdCBhcHByb3ByaWF0ZSBpbmRpY2F0aW9uLgorCitUdWUgRmViIDE1IDE5OjM2OjQ1IDE5OTQgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiByZWFsLmMgKHJlYWxfdmFsdWVfdHJ1bmNhdGUpOiBJZiByZXF1ZXN0ZWQgbW9kZSBpcyBub3QKKwlzdXBwb3J0ZWQsIHJldHVybiB0aGUgdW5tb2RpZmllZCBpbnB1dCBpbnN0ZWFkIG9mIGFib3J0aW5nLgorCitUdWUgRmViIDE1IDE5OjMwOjQ4IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IEhhbmRsZSBib3RoIEJBRF9TVUJSRUcgYW5kIFBPU1QuCisKK1R1ZSBGZWIgMTUgMTE6MDk6MDggMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmMuc3ZyNDogTWFrZSBieXRlb3JkZXIuaCBhIGhlcmUgZG9jdW1lbnQsIHJhdGhlciB0aGFuCisJY29weWluZyBpdCBmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorCSogYnl0ZW9yZGVyLmg6IFJlbW92ZWQuCisKKwkqIGZpeGluYy5zY286IERvbid0IGluc3RhbGwgPHN5cy9ieXRlb3JkZXIuaD4uCisKKwkqIGZpeGluY2x1ZGVzOiBSZW1vdmVkIHJlZmVyZW5jZXMgdG8gR0NDQ01ELiAgSW5zdGVhZCBvZiBydW5uaW5nCisJJHtHQ0NDTUR9IHRvIGRldGVybWluZSBjb3JyZWN0IHZhbHVlIGZvciBzaXplX3QsIGp1c3QgZml4IHRoZQorCWhlYWRlciBmaWxlcyB0byB1c2UgX19TSVpFX1RZUEVfXy4KKwkqIE1ha2VmaWxlLmluIChmaXhpbmMucmVhZHkpOiBSZW1vdmVkIHRhcmdldC4KKwkoc3RtcC1maXhpbmMpOiBEb24ndCBkZXBlbmQgdXBvbiBmaXhpbmMucmVhZHkuICBEb24ndCBwYXNzIGZvdXJ0aAorCWFyZ3VtZW50ICh3YXMgImBwd2RgL3hnY2MgLUJgcHdkYC8iKSB0byAkKEZJWElOQ0xVREVTKS4KKwkoY2xlYW4pOiBEb24ndCByZW1vdmUgZml4aW5jLnJlYWR5LgorCisJKiByczYwMDAuaCAoUlM2MDAwX0lUUlVOQywgUlM2MDAwX1VJVFJVTkMpOiBEZWZpbmUuCisJKiByczYwMDAubWQgKGZpeF90cnVuY2Rmc2kyLCBmaXh1bnNfdHJ1bmNkZnNpMik6IFVzZSBSUzYwMDBfSVRSVU5DCisJYW5kIFJTNjAwMF9VSVRSVU5DLCBub3QgIml0cnVuYyIgYW5kICJ1aXRydW5jIi4KKwkqIHJzNjAwMC5jIChvdXRwdXRfcHJvbG9nKTogTGlrZXdpc2UuCisKK01vbiBGZWIgMTQgMTk6MTk6MDYgMTk5NCAgSmltIE1leWVyaW5nICAobWV5ZXJpbmdAaWRlZml4LmNvbWNvLmNvbSkKKworCSogZ2VuLXByb3Rvcy5jIChtYWluKTogUmVtb3ZlIHVudXNlZCBhcmdzIGluIGNhbGwgdG8gZnByaW50Zi4KKwkqIGJpLW9wY29kZS5jIChtYWluKTogTW92ZSB1bnVzZWQgYXJnICsraSBvdXQgb2YgY2FsbCB0byBwcmludGYuCisKK01vbiBGZWIgMTQgMTk6MTQ6NTUgMTk5NCAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHJlYWwuYyAoZWlmcmFjKTogSWYgRklYVU5TX1RSVU5DX0xJS0VfRklYX1RSVU5DLAorCWNvbnZlcnQgb24gcG9zaXRpdmUgb3ZlcmZsb3cgYXMgaWYgdW5zaWduZWQuCisKK01vbiBGZWIgMTQgMTk6MTM6MTUgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBBZGQgLVd7bm8sfWV4dGVybi1pbmxpbmUuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEdlbmVyYXRlIGFuZCB1c2UgLmlpIGZpbGVzIGluIHRoZQorCWludGVybWVkaWF0ZSBzdGFnZSBvZiBjb21waWxpbmcgQysrIHNvdXJjZS4KKworTW9uIEZlYiAxNCAxOTowODozNyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb2NhbC1hbGxvYy5jIChvcHRpbWl6ZV9yZWdfY29weSk6IEEgcmVnaXN0ZXIgdGhhdCBkaWVzIGluCisJYSBDQUxMX0lOU04gZG9lc24ndCBjcm9zcyB0aGF0IGNhbGwuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QsIGNhc2UgQU5EKTogV2hlbiByZW1ha2luZworCWJpbmFyeSBvcGVyYXRpb24sIGRvIGl0IGluIFNISUZUX01PREUuCisKK01vbiBGZWIgMTQgMTE6Mjc6MzUgMTk5NCAgRnJlZGVyaWMgUGllcnJlc3RlZ3V5ICAoRi5QaWVycmVzdGVndXlAZnJjbC5idWxsLmZyKQorCisJKiBjb25maWcuc3ViOiBBZGQgY2FzZSBmb3IgQnVsbCBkcHgyMC4KKworU3VuIEZlYiAxMyAyMzo1MDoxNSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9nKTogRG9uJ3Qgb3V0cHV0IGEgdHJhY2ViYWNrIHRhYmxlIGlmCisJZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlIGlzIHNldC4KKworU3VuIEZlYiAxMyAxNzo0NzoxNCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuYyAocnM2MDAwX2FkanVzdF9jb3N0KTogUmVuYW1lZCBmcm9tIHBwY19hZGp1c3RfY29zdC4KKwkqIHJzNjAwMC5oIChBREpVU1RfQ09TVCk6IENhbGwgcnM2MDAwX2FkanVzdF9jb3N0LgorCitTdW4gRmViIDEzIDE3OjA3OjAyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUxfUFJFRklYKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCk6IFVzZSBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwgaW5zdGVhZAorCW9mIGFzc3VtaW5nIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgaW50ZXJuYWwgbGFiZWxzLgorCShBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBMaWtld2lzZS4KKwkqIHJzNjAwMC5jIChvdXRwdXRfcHJvbG9nLCBvdXRwdXRfZXBpbG9nKTogTGlrZXdpc2UuCisJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IExpa2V3aXNlLgorCisJKiBmaXhpbmNsdWRlczogRml4IGNvbmZsaWN0cyB3aXRoIEMrKyByZXNlcnZlZCB3b3JkcyBpbgorCVgxMS9TaGVsbFAuaCwgWG0vVHJhdmVyc2FsLmgsIGFuZCBYbS9CYXNlQ2xhc3NJLmguICBGb3VuZCBvbgorCVJTLzYwMDAuCisKK1N1biBGZWIgMTMgMTM6NDA6MTcgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGhhbGZwaWMuaCAodG9wbGV2ZWwpOiBJbmNsdWRlIHN0ZGlvLmggaWYgaXQgaGFzbid0IGJlZW4gaW5jbHVkZWQKKwlhbHJlYWR5LCBzbyB0aGF0IFNURElPX1BST1RPIGNhbiBiZSBkZWZpbmVkLiAgT3RoZXJ3aXNlLAorCWFzbV9mcHJpbnRmIGdldHMgYSBwcm90b3R5cGUgbWlzbWF0Y2guCisKK1N1biBGZWIgMTMgMDI6MzY6MzAgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBnY2MuYyAoZmF0YWwsIGVycm9yKTogRml4IGRlY2xhcmF0aW9ucyAoZGVwZW5kZW50IG9uIEhBVkVfVlBSSU5URikuLgorCitTYXQgRmViIDEyIDE5OjQ2OjI5IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjb25maWd1cmUgKDM4Ni0qLW9zZnJvc2UpOiBVc2UgaTM4Ni94bS1vc2YuaCBhcyB4bSBmaWxlLgorCisJKiBpMzg2L3htLW9zZi5oIChuZXcgZmlsZSk6IERlZmluZSBIQVZFX1BVVEVOViBhbmQgSEFWRV9WUFJJTlRGLgorCitTYXQgRmViIDEyIDA4OjUxOjAyIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBXaGVuIHByZXNlcnZpbmcgc3ViZXhwcmVzc2lvbnMsIGRvbid0IHB1dAorCWV4cGVuc2l2ZSBhcmd1bWVudHMgZGlyZWN0bHkgaW50byBoYXJkIHJlZ2lzdGVycy4KKworCSogY29tYmluZS5jIChSRVZFUlNJQkxFX0NDX01PREUpOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9uLgorCShyZXZlcnNpYmxlX2NvbXBhcmlzb25fcCk6IFJFVkVSU0lCTEVfQ0NfTU9ERS4KKwkqIHNwYXJjLmggKFJFVkVSU0lCTEVfQ0NfTU9ERSk6IERlZmluZS4KKworCSogY29tYmluZS5jIChzdWJzdCk6IEFsd2F5cyBzaW1wbGlmeSB0cnVlIGFuZCBmYWxzZSBhcm1zIGlmCisJaWZfdGhlbl9lbHNlX2NvbmQgc3VjY2VlZHMuCisJKHN1YnN0LCBjYXNlIElGX1RIRU5fRUxTRSk6IE1vcmUgY2Fub25pY2FsaXphdGlvbnM7IGRlbGV0ZSBzb21lCisJcmVkdW5kYW50IHRlc3RzLgorCShpZl90aGVuX2Vsc2VfY29uZCk6IENhbm9uaWNhbGl6ZSAoT1AgKG11bHQgQ09NUCBBKSAobXVsdCBSRVZfQ09NUCBCKSkuCisJKGdlbl9iaW5hcnkpOiBTaW1wbGlmeSAoUkVMX09QIChjb21wYXJlIFggWSkgMCkgaGVyZS4KKworU2F0IEZlYiAxMiAwNzo0MTo1NSAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogY3NlLmMgKGNzZV9tYWluKTogQ29uZGl0aW9uYWxpemUgc3BlY2lhbCB0cmVhdG1lbnQgb2YKKwlQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSBvbiBQSUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxMX0NMT0JCRVJFRC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IFRydW5jYXRlIGltbWVkaWF0ZSBjb3VudCBpZgorCVNISUZUX0NPVU5UX1RSVU5DQVRFRC4KKworRnJpIEZlYiAxMSAxODo0OTo0MiAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlX2ZpZWxkcyk6ICBFbWl0IGFub255bW91cyBmaWVsZHMKKwlqdXN0IGxpa2Ugb3RoZXIgZmllbGRzLCBidXQgd2l0aCBhbiBlbXB0eSBuYW1lLiAgRG9uJ3QKKwl0cmVhdCB0aGUgZmllbGRzIGFzIGJlbG9uZ2luZyB0byB0aGUgY29udGFpbmluZyBvYmplY3QuCisKK0ZyaSBGZWIgMTEgMjA6MDg6MjUgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGFkZGVyLmN5Z251cy5jb20pCisKKwkqIHJzNjAwMC5tZCAoZGVmaW5pdGlvbiBvZiAidHlwZSIpOiBBZGQgImptcHJlZyIgYXMgbmV3CXR5cGUuCisJQ2hhbmdlICJtdGxyIiB0byAibXRqbXByIi4KKwkobW92c2kgbWF0Y2hlcik6IFBhaXIgYGMnIGFuZCBgbCcgaW4gdGhlIHNhbWUgY29uc3RyYWludAorCWFsdGVybmF0aXZlLgorCShyZXR1cm4pOiBTZXQgYXR0cmlidXRlIHRvICJqbXByZWciLgorCShpbmRpcmVjdF9qdW1wKTogTGlrZXdpc2UuCisJKiByczYwMDAuaCAoQURKVVNUX0NPU1QpOiBDYWxsIHBwY19hZGp1c3RfY29zdC4KKwkqIHJzNjAwMC5jIChwcGNfYWRqdXN0X2Nvc3QpOiBOZXcgZnVuY3Rpb24uICBBZGp1c3QgZm9yIFRZUEVfSk1QUkVHLgorCitGcmkgRmViIDExIDE3OjM5OjQyIDE5OTQgIE1pY2hhZWwgQ29sbGlzb24gIChjb2xsaXNvbkBvc2Yub3JnKQorCisJKiByZWxvYWQxLmMgKGdlbl9pbnB1dF9yZWxvYWQpOiBJZiByZWctcmVnIGFkZCBpcyBub3QgdmFsaWQsCisJdHJ5IGNvcHlpbmcgcmVnLXJlZyBhbmQgYWRkaW5nIHJlZy1pbnQuCisKK0ZyaSBGZWIgMTEgMTc6MzY6MTEgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBJZiB0aGUgYnVpbHRpbiB3YXMgY2FsbGVkIGFzCisJX19idWlsdGluX3doYXRldmVyLCBwcmV0ZW5kIHdlJ3JlIG9wdGltaXppbmcuCisKK0ZyaSBGZWIgMTEgMTc6MzA6MjggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChtYXJrX2p1bXBfbGFiZWwsIGNhc2UgTEFCRUxfUkVGKTogVXBkYXRlIFJFR19MQUJFTAorCW5vdGUgaWYgY2hhbmdpbmcgdGFyZ2V0IG9mIGp1bXAuCisKKwkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IEZpeCBsb2dpYyBpbiBjYXNlIG9mIG1hdGNoaW5nCisJb3BlcmFuZHMuCisKK0ZyaSBGZWIgMTEgMTY6MDM6MjEgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiB0cmVlLmggKFZQUk9UTywgVkFfU1RBUlQpOiBBdm9pZCBkdXBsaWNhdGUgZGVmaW5pdGlvbi4KKwkqIHJ0bC5oIChWUFJPVE8sIFZBX1NUQVJUKTogTGlrZXdpc2UuCisJKiBnY2MuYyAoVlBST1RPLCBWQV9TVEFSVCk6IERlZmluZS4KKwkoUFJPVE8pOiBEZWZpbmUuCisJQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKiBnKysuYyAoVlBST1RPLCBWQV9TVEFSVCk6IERlZmluZS4KKworCSogZ3N0ZGFyZy5oOiBEb24ndCBkZWZpbmUgX1NUREFSR19IL2V0Yy4gaWYgbm90IGdjYywKKwlpdCBtYXkgY29sbGlkZSB3aXRoIHN5c3RlbSdzIGhlYWRlci4KKworVGh1IEZlYiAxMCAxOToyNjozNyAxOTk0ICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQorCisJKiBjLXR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBEbyBub3Qgd2FybiBhYm91dCByZXR1cm5pbmcgdGhlCisJYWRkcmVzcyBvZiBhIGxvY2FsbHkgZGVjbGFyZWQgZXh0ZXJuIHZhcmlhYmxlLgorCitUaHUgRmViIDEwIDE1OjU3OjA2IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBmaW5hbC5jIChJU19BU01fTE9HSUNBTF9MSU5FX1NFUEFSQVRPUik6IFByb3ZpZGUgZGVmYXVsdAorCWRlZmluaXRpb24uCisJKGFzbV9pbnNuX2NvdW50KTogVXNlIElTX0FTTV9MT0dJQ0FMX0xJTkVfU0VQQVJBVE9SIHJhdGhlcgorCXRoYW4gYXNzdW1pbmcgdGhlIGxvZ2ljYWwgbGluZSBzZXBhcmF0b3IgaXMgJzsnLgorCisJKiBwYS5oIChJU19BU01fTE9HSUNBTF9MSU5FX1NFUEFSQVRPUik6IERlZmluZS4KKworVGh1IEZlYiAxMCAwODo0OTozOSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuaCAocmVsb2FkX3NlY29uZGFyeV97cmVsb2FkLGljb2RlfSk6IERlbGV0ZWQuCisJKHJlbG9hZF9zZWNvbmRhcnlfe2luLG91dH1fe3JlbG9hZCxpY29kZX0pOiBOZXcgdmFyaWFibGVzLgorCSogcmVsb2FkLmM6IExpa2V3aXNlLgorCShNQVRDSEVTLCBNRVJHQUJMRV9SRUxPQURTLCBNRVJHRV9UT19PVEhFUik6IE1vdmUgdG8gZnJvbnQgb2YgZmlsZS4KKwkocHVzaF9zZWNvbmRhcnlfcmVsb2FkKTogTmV3IGZ1bmN0aW9uLCBmcm9tIGZpbmRfc2Vjb25kYXJ5X3JlbG9hZC4KKwkoZmluZF9zZWNvbmRhcnlfcmVsb2FkKTogRGVsZXRlZC4KKwkocHVzaF9yZWxvYWQpOiBDYWxsIHB1c2hfc2Vjb25kYXJ5X3JlbG9hZC4KKwkoY29tYmluZV9yZWxvYWRzKTogVXNlIG5ldyB2YXJzIGZvciBzZWNvbmRhcnkgcmVsb2FkcyBhbmQgaWNvZGVzLgorCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFVzZSBuZXcgdmFycyBmb3Igc2Vjb25kYXJ5CisJcmVsb2FkcyBhbmQgaWNvZGVzLgorCisJKiBleHBsb3cuYyAobWVtb3J5X2FkZHJlc3MpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK1RodSBGZWIgMTAgMDg6MTM6NDkgMTk5NCAgU3RlcGhlbiBSLiB2YW4gZGVuIEJlcmcgIChiZXJnQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZSkKKworCSogcnRsLmgsIHRyZWUuaCwgbWlwcy10ZmlsZS5jIChWUFJPVE8pOiBOZXcgbWFjcm8uCisJKiBjb21iaW5lLmMsIGV4cHIuaCwgZ2VuYXR0cnRhYi5jLCBvdXRwdXQuaCwgcnRsLmgsIHRyZWUuaCwgdG9wbGV2LmM6CisJVXNlIFBST1RPIGZvciB2YXJhcmdzIGZ1bmN0aW9ucy4KKwkqIGdlbmF0dHJ0YWIuYyAoYXR0cl9wcmludGYpOiBPbmx5IGRlY2xhcmUgd2hlbiBkZWZpbmVkLgorCSogYmMtZW1pdC5jLCBjYWxscy5jLCBjb21iaW5lLmMsIGVtaXQtcnRsLmMsIGZpbmFsLmMsIGcrKy5jOgorCUlmIF9fU1REQ19fLCBpbmNsdWRlIGdzdGRhcmcgYW5kIHVzZSBBTlNJIGZvcm0gb2YgdmFyYXJncy4KKwkqIGdjYy5jLCBnZW5hdHRydGFiLmMsIG1pcHMtdGZpbGUuYywgdHJlZS5jLCB0b3BsZXYuYzogTGlrZXdpc2UuCisKK1dlZCBGZWIgIDkgMDk6NTM6NTQgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1tY291bnQtcHRyIGFzIGEKKwlzeW5vbnltIGZvciAtbW5vLW1jb3VudC4KKwkoQ0MxX1NQRUMpOiBJZiAtbWVsZiwgcGFzcyAtbW1jb3VudC1wdHIgYnkgZGVmYXVsdC4KKworCSogaTM4Ni9vc2ZlbGYuaCAoQ0MxX1NQRUMpOiBVbmxlc3MgLW1yb3NlLCBwYXNzIC1tbWNvdW50LXB0ciBieQorCWRlZmF1bHQuCisKKwkqIGNvbmZpZ3VyZSAoYWxwaGEtZGVjLW9zZik6IFVzZSBvc2YyLmggYW5kIGdkYi1vc2YyLmggb24gT1NGLzEgMi4wIGFuZAorCWJleW9uZC4KKworCSogYWxwaGEvb3NmMi5oLCBhbHBoYS9nZGItb3NmMi5oIChuZXcgZmlsZXMpOiBTdXBwb3J0IGZvciBPU0YvMSAyLjAKKwl0aGF0IHVzZXMgNCBieXRlIHdjaGFyX3QncyBpbnN0ZWFkIG9mIDIgYnl0ZS4KKworVHVlIEZlYiAgOCAyMDoxODoxMiAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogcmVhbC5jIChlYXJpdGgsIGVyZWFsX25lZ2F0ZSwgZW5lZywgZWlzbmVnLCBlbmFuLCBlbW92bywgZXN1Yik6CisJUHJvcGFnYXRlIHRoZSBzaWduIG9mIE5hTnMsIHNvIHRoYXQgZS5nLiAtKE5hTikgZXZhbHVhdGVzIHRvIC1OYU4uCisJKGVhZGQsIGVkaXYsIGVtdWwsIGVyZW1haW4sIGU1M3RvZSwgZTY0dG9lLCBlMTEzdG9lLCBlMjR0b2UsIGVzcXJ0KTogCisJTGlrZXdpc2UuCisJKG1ha2VfbmFuKTogTmV3IGFyZyBzcGVjaWZpZXMgc2lnbiBvZiBOYU4uICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCShlaWlzbmVnKTogTmV3IGZ1bmN0aW9uLgorCShlc3FydCk6IENvbXB1dGUgc3FydCgtMC4wKSB0byBiZSAtMC4wLCBub3QgMC4wLgorCitUdWUgRmViICA4IDE5OjIzOjQxIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRvcGxldi5jOiBJbmNsdWRlIGN0eXBlLmguCisKKwkqIHRyZWUuYyAoaW50X2ZpdHNfdHlwZV9wKTogUHJvcGVybHkgaGFuZGxlIGNhc2Ugb2YgdmFyaWFibGUgYm91bmRzCisJZm9yIHR5cGVzLgorCitUdWUgRmViICA4IDE5OjIwOjA0IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBmaXhwcm90bzogQWRkIHBvcGVuIGFuZCBwY2xvc2UgdG8gcmVxdWlyZWQgbGlzdCBmb3Igc3RkaW8uaC4KKwlBZGQgcHV0ZW52IHRvIHJlcXVpcmVkIGxpc3QgZm9yIHN0ZGxpYi5oLgorCUFkZCBnZXRvcHQgdG8gcmVxdWlyZWQgbGlzdCBmb3IgdW5pc3RkLmguCisKKwkqIGZpeHByb3RvOiBBcHBlbmQgIiNpbmNsdWRlIDxzdGRsaWIuaD4iIHRvIGFzc2VydC5oIGlmIGl0IHVzZXMKKwlleGl0IG9yIGFib3J0LgorCisJKiBsaWJnY2MyLmMgKF9fYnVpbHRpbl9uZXcpOiBJZiBfX25ld19oYW5kbGVyIHJldHVybnMsIGtlZXAgdHJ5aW5nCisJdG8gYWxsb2NhdGUgdGhlIG1lbW9yeS4KKwkoX19kZWZhdWx0X25ld19oYW5kbGVyKTogQWRkIF9fIHRvIGJlZ2lubmluZyBvZiBuYW1lIHRvIGF2b2lkCisJbmFtZXNwYWNlIGNsYXNoaW5nLgorCitUdWUgRmViICA4IDE4OjUwOjA3IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogaTM4Ni94LWFpeCAoRklYSU5DTFVERVMpOiBEZWxldGUgZGVmaW5pdGlvbi4KKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni1pYm0tYWl4KTogRGVsZXRlIGRlZmluaXRpb24gb2YgZml4aW5jbHVkZXMuCisJKiBmaXhpbmNsdWRlczogV2hlbiBlZGl0IHNpemVfdCB0eXBlZGVmLCBtb2RpZnkgc2VkIHBhdHRlcm4gdG8KKwlhdm9pZCBtYXRjaGluZyB0eXBlZGVmIHVzZXMgb2Ygc2l6ZV90LiAgTGlrZXdpc2Ugd2hlbiBhZGRpbmcKKwkjaWZuZGVmIEdDQ19TSVpFX1QuCisJKiBmaXhpbmMucHMyOiBEZWxldGUgZmlsZS4KKworCSogbWlwcy5oIChBU01fT1VUUFVUX0xPQ0FMLCBBU01fT1VUUFVUX0NPTU1PTik6IFVzZSBTSVpFIG5vdCBST1VOREVELgorCisJKiBpcmlzNS5oIChTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSk6IERvbid0IHJlZGVmaW5lLgorCShNQVhfV0NIQVJfVFlQRV9TSVpFKTogRGVmaW5lLgorCisJKiBtaXBzLXRkdW1wLmMgKHByaW50X2ZpbGVfZGVzYyk6IENvcnJlY3QgcHJpbnRmIGZvcm1hdC4KKwkobWFpbik6IExpa2V3aXNlLgorCisJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogQWxzbyBsb29rIGZvciBSRUdfTEFCRUwgbm90ZXMgb24gZmlyc3QKKwlpbnN0cnVjdGlvbiBvZiBlYWNoIGJhc2ljIGJsb2NrLgorCisJKiBzcGFyYy5jIChzYXZlX3JlZ3MsIHJlc3RvcmVfcmVncyk6IFVzZSBfX2lubGluZV9fIG5vdCBpbmxpbmUuCisKK1R1ZSBGZWIgIDggMTA6MTM6NTQgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiB0b3BsZXYuYyAob3Blbl9kdW1wX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCisJKGNvbXBpbGVfZmlsZSk6IE9wZW4gZHVtcCBmaWxlcyB3aXRoIGl0LiAgUmVtb3ZlIGR1bXBfYmFzZV9uYW1lX2xlbmd0aC4KKworU3VuIEZlYiAgNiAxNTo1Mjo0OCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGNvbGxlY3QyLmMgKHN5c19zaWdsaXN0KTogRG9uJ3QgZGVjbGFyZSBpZgorCURPTlRfREVDTEFSRV9TWVNfU0lHTElTVCBpcyBkZWZpbmVkLgorCSogbWlwcy94bS1zeXN2NC5oIChET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QpOiBEZWZpbmUuCisJKiBzcGFyYy94bS1zb2wyLmggKE5PX1NZU19TSUdMSVNUKTogRGVsZXRlLgorCShET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QpOiBEZWZpbmUuCisJKiBtaXBzLXRmaWxlLmMgKHN5c19zaWdsaXN0KTogRG9uJ3QgZGVjbGFyZSBpZiBOT19TWVNfU0lHTElTVCBvcgorCURPTlRfREVDTEFSRV9TWVNfU0lHTElTVCBhcmUgZGVmaW5lZC4KKwkoY2F0Y2hfc2lnbmFsKTogQWRkIGNvZGUgZm9yIE5PX1NZU19TSUdMSVNUIGNhc2UuCisKKwkqIHNjaGVkLmMgKHJlZ19wZW5kaW5nX3NldHMsIHJlZ19wZW5kaW5nX3NldHNfYWxsKTogTmV3IHZhcmlhYmxlcy4KKwkoc2NoZWRfYW5hbHl6ZV8xKTogU2V0IHJlZ19wZW5kaW5nX3NldHMgaW5zdGVhZCBvZiByZWdfbGFzdF9zZXRzLgorCShzY2hlZF9hbmFseXplXzIpOiBTZXQgcmVnX3BlbmRpbmdfc2V0cyBvciByZWdfcGVuZGluZ19zZXRzX2FsbAorCWluc3RlYWQgb2YgcmVnX2xhc3Rfc2V0cy4KKwkoc2NoZWRfYW5hbHl6ZV9pbnNuKTogVXNlIHJlZ19wZW5kaW5nX3NldHMgYW5kCisJcmVnX3BlbmRpbmdfc2V0c19hbGwgdG8gc2V0IHJlZ19sYXN0X3NldHMuICBTZXQKKwlyZWdfcGVuZGluZ19zZXRzX2FsbCBpbnN0ZWFkIG9mIHJlZ19sYXN0X3NldHMuCisJKHNjaGVkdWxlX2Jsb2NrKTogQWxsb2NhdGUgYW5kIGNsZWFyIHJlZ19wZW5kaW5nX3NldHMuCisKKwkqIHNwYXJjLm1kIChtb3ZkaSk6IEhhbmRsZSAnVScgYW5kICdUJyBjb25zdHJhaW50cy4KKworCSogbTY4ay9ocDMyMC5oIChGVU5DVElPTl9QUk9GSUxFUik6IENvbmNhdGVuYXRlIHN0cmluZ3MgdG8gYXZvaWQKKwl1c2Ugb2YgQU5TSSBDIHNwZWNpZmljIGZlYXR1cmUuCisKKwkqIG1pcHMuYyAoZnVuY3Rpb25fYXJnKTogV2hlbiBzb2Z0LWZsb2F0LCBkb24ndCBhZGQgYmlhcyBmb3IKKwlzZWNvbmQgU0Ztb2RlIGFyZ3VtZW50LgorCisJKiBpcmlzNS5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBfTUlQU0VCLgorCitTdW4gRmViICA2IDA4OjQwOjQ2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKHN0cnVjdCB0ZW1wX3Nsb3QpOiBBZGQgbmV3IGZpZWxkLCBBRERSRVNTLgorCShhc3NpZ25fc3RhY2tfdGVtcCk6IEluaXRpYWxpemUgaXQgdG8gemVyby4KKwkoZmluZF90ZW1wX3Nsb3RfZnJvbV9hZGRyZXNzLCB1cGRhdGVfdGVtcF9zbG90X2FkZHJlc3MpOiBOZXcgZnVuY3Rpb25zLgorCShwcmVzZXJ2ZV90ZW1wX3Nsb3RzKTogVXNlIGZpbmRfdGVtcF9zbG90X2Zyb21fYWRkcmVzcy4KKwkqIGV4cGxvdy5jIChtZW1vcnlfYWRkcmVzcyk6IENhbGwgdXBkYXRlX3RlbXBfc2xvdF9hZGRyZXNzIG9uCisJbmV3IGFuZCBvbGQgYWRkcmVzcy4KKworCSogY3NlLmMgKGNhbm9uX2hhc2gsIGNhc2UgTEFCRUxfUkVGLCBTWU1CT0xfUkVGKTogQXZvaWQgd2FybmluZworCW9uIDY0LWJpdCBtYWNoaW5lcy4KKworU2F0IEZlYiAgNSAxNzo1NTo1MiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUgKGlbMzRdODYtc2VxdWVudC1wdHgpOiBBbGlhcyBmb3IgaVszNF04Ni1zZXF1ZW50LXN5c3YqLgorCitTYXQgRmViICA1IDExOjQ2OjAwIDE5OTQgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQGN5Z251cy5jb20pCisKKwkqIHNoLmMgKGhhcmRfcmVnbm9fbW9kZV9vayk6IE5ldyB2ZWN0b3IuIAorCShvdXRwdXRfc3RhY2tfYWRqdXN0KTogQWx3YXlzIGFkanVzdCBzdGFjayB3aXRoIGFuIGFkZHNpIGluc24uIAorCShjYWxjX2xpdmVfcmVncyk6ICBTdXBwb3J0IGFsZXJuYXRpdmUgY2FsbGluZyBjb252ZW50aW9ucy4gCisJKHByaW50X29wZXJhbmQpOiBEZWxldGUgb2Jzb2xldGUgY2FzZXMuCisJKHN5bnRoX2NvbnN0YW50KTogTmV3IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNvbnN0YW50cyBieQorCWFyaXRobWV0aWMgbWVhbnMuIAorCShleHBhbmRfYmxvY2tfbW92ZSk6IFVzZSBuZXcgYmxvY2sgbW92ZSBzdXBwb3J0CXJvdXRpbmVzLiAKKwkocHJlcGFyZV9tb3ZlX29wZXJhbmRzKTogIFVzZSBzeW50aF9jb25zdGFudCB3aGVuIHBvc3NpYmxlLCB0cnkKKwlhbmQgZ2VuZWF0ZSBzcGxpdHMgZm9yIERJIG1vdmVzLgorCShvdXRwdXRfanVtcF9sYWJlbF90YWJsZSwgZHVtcF90YWJsZSwgb3V0cHV0X2Zhcl9qdW1wLAorCXByZXBhcmVfc3BsaXRfZG91YmxlX29wcyxmcm9tX2NvbXBhcmUsIGVxdWFsaXR5X29wZXJhdG9yLAorCWhhbmRsZV9wcmFnbWEsIGV4cGFuZF9hY2FsbCk6IE5ldyBmdW5jdGlvbnMuIAorCShwcmVwYXJlX3NjY19vcGVyYW5kcyk6CVdoZW4gY29uZGl0aW9uIGlzbid0IHN1cHBvcnRlZCBzd2FwIGFyZ3MKKwlhbmQgYWx0ZXIgdGVzdC4KKwkob3V0cHV0X21vdmVfZG91YmxlKTogR2VuZXJhdGUgYmV0dGVyIGNvZGUgZm9yIGNvbnN0YW50IG1vdmVzLgorCShvdXRwdXRfc2hpZnQpOiBDb3BlIHdpdGggbmVnYXRpdmUgc2hpZnRzLiAKKwkoYnl0ZV9pbmRleF9vcGVyYW5kLCBwb3Bfb3BlcmFuZCwgcGFpbmZ1bF9pbW1lZGlhdGVfb3BlcmFuZCwKKwlva19zaGlmdF92YWx1ZSwgaGFyZF9pbW1lZGlhdGVfb3BlcmFuZCwgYWRqdXN0X2luc25fbGVuZ3RoLAorCWR1bXBfY29uc3RhbnRzLCBvdXRwdXRfbW92ZXBjcmVsKTogRGVsZXRlZC4gIAorCShmaW5hbF9wcmVzY2FuX2luc24pOiBOb3cgb25seSBwcmludHMgcGMuCisJKHNoaWZ0Y29zdHMsIGFuZGNvc3RzLCBtdWx0Y29zdHMpOiBXb3JrIG91dCBzb21lIGluc24gY29zdHMuCisJKGdlbl9hc2hpZnQsIGdlbl9zaGlmdHkpOiAgRW1pdCBjb2RlIGZvciBzaGlmdCBvcGVyYXRpb25zLgorCShmaXhpdCwgaGlfY29uc3QsIGZpbmRfYmFycmllciwJYnJva2VuX21vdmUsCisJbWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBOZXcgZnVuY3Rpb25zIHRvIGZpeCBtb3ZlIGluc3RydWN0aW9ucworCXdpdGggb3V0LW9mLXJhbmdlIGxpdGVyYWxzLgorCisJKiBzaC5oIChPUFRJTUlaQVRJT05fT1BUSU9OUywgQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBOZXcuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEV4dHJhIC1tIG9wdGlvbnMgZm9yIGV4cGVyaW1lbnRhbCBjYWxsaW5nCisJY29udmVudGlvbnMuCisJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IFVzZSBoYXJkX3JlZ25vX21vZGVfb2sgdmVjdG9yIHJhdGhlciB0aGFuCisJaW5saW5lIGNvZGUuICAKKwkoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IEFsd2F5cyAwLiAKKwkocmVnX2NsYXNzLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR19DTEFTU19OQU1FUyk6IENoYW5nZSBvcmRlcgorCW9mIGNsYXNzZXMuCisJKEZSQU1FX0dST1dTX0RPV05XQVJEKTogRG9uJ3QgZGVmaW5lLgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUyk6IEFsd2F5cyAwLiAgCisJKE1BWF9SRUdTX1BFUl9BRERSRVNTKToJSXMgMi4gCisJKEdPX0lGX0xFR0lUSU1BVEVfSU5ERVgpOiBTcGxpdCB1cCBpbnRvIHNtYWxsZXIgbWFjcm9zLgorCShDQVNFX1ZFQ1RPUl9NT0RFLCBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRSk6IEp1bXAgdGFibGVzIGFyZSBvZgorCXN3aXRjaGFibGUgc2l6ZSBhbmQgYWx3YXlzIHBjIHJlbGF0aXZlLiAKKwkoUlRYX0NPU1RTKTogVXNlIG5ldyBhbmRjb3N0cywgbXVsdGNvc3RzIGFuZCBzaGlmdGNvc3RzIGZ1bmN0aW9ucy4gCisJKElOU05fU0VUU19BUkVfREVMQVlFRCwJSU5TTl9SRUZFUkVOQ0VTX0FSRV9ERUxBWUVEKTogTmV3LgorCShBU01fT1VUUFVUX0NBU0VfTEFCRUwsIEFTTV9PVVRQVVRfQUREUl9ESUZfRUxUKTogTm93IHN3aXRjaGVzIGFyZQorCXBjIHJlbGF0aXZlLgorCisJKiBzaC5tZCAoZGVmaW5lX2F0dHIgbGVuZ3RoKTogQ2FsY3VsYXRlIGxlbmd0aHMgbW9yZSBhY2N1cmF0ZWx5LgorCShkZWZpbmVfYXR0ciAicnRlIiwgImhpdF9zdGFjayIpOiBOZXcuICAKKwkoY21wKik6ICBBbGxvdyBhbGwgY29uZGl0aW9ucyBieSBzd2FwcGluZyBhcmdzLiAgCisJKGFkZGMsIGFkZGRpMywgYW5kX2ZmLCBjYXNlc2ksIGNhc2VzaV93b3JrZXIsIHBlZXBob2xlcyk6IE5ldy4gCisJKGRpdiosIG11bCopOiBVc2UgbGlicmFyeSByb3V0aW5lcyB3aXRoIHNwZWNpYWwgY2FsbGluZworCWNvbnZlbnRpb25zLiAKKwkoc2hpZnRzKTogR2VuZXJhdGUgb25seSBsZWdhbCBzaGlmdCBpbnNuIHNlcXVlbmNlcy4gCisJKGV4dGVuZCopOiBHZXQgY2xvYmJlcnMgcmlnaHQsIGV4dHJhIGNvbnN0cmFpbnRzLiAKKwkobW92Kik6IEdyZWF0bHkgc2ltcGxpZmllZC4KKwkoYiopOiAgVXNlIGZyb21fY29tcGFyZSBmdW5jdGlvbi4gCisJKHJldHVybiwgcnRlKTogVW5kZXJzdGFuZCBwcmFnbWEgaW50ZXJydXB0LiAKKwkoYW5kZGkzLCBpb3JkaTMsIHhvcmRpMyk6IERlbGV0ZWQuICAKKwkoY29uc3R0YWJsZV8yLGNvbnN0dGFibGVfNCwgY29uc3R0YWJsZV84LCBhbGlnbl8yLCBhbGlnbl80LAorCWNvbnN0dGFibGVfZW5kLCBtb3Zlc2lfaywgbW92aGlfaywgbW92ZGlfayk6IFN1cHBvcnQgZm9yIGlubGluZQorCWxpdGVyYWwgdGFibGVzLgorCShtb3ZzdHJzaSwgYmxvY2tfbW92ZV9yZWFsLCBibG9ja19sdW1wX3JlYWwpOiBVc2UgbmV3IGJsb2NrIG1vdmUKKwlyb3V0aW5lcy4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBJbnZva2UgTUFDSElORV9ERVBFTkRFTlRfUkVPUkcgaWYKKwlkZWZpbmVkLgorCitTYXQgRmViICA1IDA4OjA1OjU4IDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogY3NlLmMgKG1lbW9yeV9leHRlbmRfcnR4KTogTmV3IHZhcmlhYmxlLgorCShjc2VfbWFpbik6IEluaXRpYWxpemUgaXQuCisJKGNzZV9pbnNuKTogU2VlIGlmIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgYSBNRU0gaW4gYSB3aWRlciAgbW9kZS4KKworU2F0IEZlYiAgNSAwNzowNToyOSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogZml4cHJvdG86IEFkZCBsc3RhdCB0byByZXF1aXJlZF9saXN0IGZvciBzeXMvc3RhdC5oCisKK0ZyaSBGZWIgIDQgMTI6MTQ6NDkgMTk5NCAgU3RhbiBDb3ggIChjb3hzQGRnLXJ0cC5kZy5jb20pCisKKwkqIG04OGsuaDogKFRBUkdFVF9TV0lUQ0hFUykgQXNzdW1lIC1tdXNlLWRpdi1pbnN0cnVjdGlvbgorCS1tbm8tY2hlY2stemVyby1kaXZpc2lvbiBmb3IgLW04ODExMC4gIChDT05TVEFOVF9BRERSRVNTX1ApIEZpeCBhCisJLWZwaWMgcmVsb2FkIGJ1Zy4gIChET05UX1JFRFVDRV9BRERSKSBEb24ndCBzdHJlbmd0aCByZWR1Y2Ugc28KKwltODhrIHNjYWxlZCBsb2Fkcy9zdG9yZXMgd2lsbCBiZSB1c2VkLiAgKGVudW0gcHJvY2Vzc29yX3R5cGUpIFVzZQorCWluc3RlYWQgb2YgYXR0cl9jcHUsIHdoaWNoIGlzIG5vdCBhbHdheXMgZGVmaW5lZC4KKworCSogbTg4ay5tZDogKG1vdmRmKSBTcGxpdCBtb3ZkZiBzbyBpdCBjYW4gZ28gaW50byBhIGJyYW5jaCBkZWxheSBzbG90CisKKwkqIG04OGsuYzogKG04OGtfZ3BfdGhyZXNob2xkKSBNYWtlIC1tc2hvcnQtZGF0YS0gdW5zaWduZWQuCisJKGJsb2NrX21vdmVfKikgQ29weSBNRU1fSU5fU1RSVUNUX1AgZm9yIGJsb2NrIG1vdmUgY2FzZXMuCisKKwkqIGRndXguaDogKFRBUkdFVF9TVlI0KSBVc2UgLW1zdnI0Ly1tc3ZyMyBpbnN0ZWFkIG9mCisJLW12ZXJzaW9uLTAzLjAwIHRvIGNob29zZSBhc3NlbWJsZXIgc3ludGF4LgorCitGcmkgRmViICA0IDA4OjE0OjMxIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0X2NvbW1vbiwgZ2VuX2hpZ2hwYXJ0KTogVGVzdCAqX0JJR19FTkRJQU4KKwl3aXRoICJpZiIsIG5vdCAjaWYgYW5kIGZpeCBvbmUgZXJyb25lb3VzIHRlc3QuCisKK1RodSBGZWIgIDMgMTc6MTU6MDcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkLCBpbnN2IGNhc2UpOiBEb24ndCB1c2UgUFVUX01PREUgb24KKwl4b3AwIHdoZW4gaXQgaXMgYSBTVUJSRUcsIGdlbmVyYXRlIGEgbmV3IFNVQlJFRy4KKworVGh1IEZlYiAgMyAxMzoyNDoxNCAxOTk0ICBBbGV4IFphdHNtYW4gIChhbGV4LnphdHNtYW5AYW5hbG9nLmNvbSkKKworCSogaGFyZC1yZWctc2V0LmggKEdPX0lGX0hBUkRfUkVHX0VRVUFMKTogRml4IHR5cG8uCisKK1RodSBGZWIgIDMgMDc6NDU6NDUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmxvdy5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkodXNlc19yZWdfb3JfbWVtKTogTmV3IGZ1bmN0aW9uLgorCShmaW5kX2Jhc2ljX2Jsb2NrKTogU29tZSBjbGVhbnVwczsgZWxpbWluYXRlIHNoYWRvd2VkIHZhcmlhYmxlcy4KKwlMb29rIGZvciBSRUdfTEFCRUwgbm90ZXMgaW4gYWxsIGluc25zIGFuZCBhbGxvdyBmb3IgbXVsdGlwbGUgc3VjaC4KKwlEb24ndCBkZWxldGUgbGFiZWxzIGluIGZvcmNlZF9sYWJlbHMuCisJR2VuZXJhbGl6ZSB0ZXN0IGZvciBjb21wdXRlZCBqdW1wcy4KKwkoZmluZF9hdXRvX2luYyk6IE9GRlNFVCBzaG91bGQgYmUgSE9TVF9XSURFX0lOVC4KKwkobWFya191c2VkX3JlZ3MpOiBQdXQgZGVjbHMgb2YgcGFybXMgaW4gcGFybSBvcmRlci4KKwkoZmluZF91c2VfYXNfYWRkcmVzcyk6IFBMVVNDT05TVCBzaG91bGQgYmUgSE9TVF9XSURFX0lOVC4KKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncywgY2FzZSBJTlNOX0xJU1QpOiBQcm9wZXJseSByZW1ha2UKKwlsaXN0IHdoZW4gd2UgY2hhbmdlIHNvbWV0aGluZyBmdXJ0aGVyIG9uLgorCitXZWQgRmViICAyIDIxOjI1OjAzIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogYy10eXBlY2suYyAoc2lnbmVkX29yX3Vuc2lnbmVkX3R5cGUpOiBDaGVjayBmb3IgYW55CisgICAgICAgIElOVEVHUkFMX1RZUEVfUCBub3QganVzdCBJTlRFR0VSX1RZUEUuCisKKwkqIE1ha2VmaWxlLmluIChlbnF1aXJlLm8pOiBEZXBlbmQgb24gc3RtcC1pbnQtaGRycy4KKworCSogbWlwcy5oIChDUFBfU1BFQyk6IERlZmluZSBfX1BUUkRJRkZfVFlQRV9fIG5vdCBfX1BUUkRJRkZfVFlQRS4KKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBXaGVuIGZpbGwgZXBpbG9ndWUgZGVsYXkKKwlzbG90LCBzZXQgbmVlZGVkIHRvIGVuZF9vZl9mdW5jdGlvbl9uZWVkcyBpbnN0ZWFkIG9mIGNsZWFyaW5nIGl0LgorCitXZWQgRmViICAyIDE1OjIwOjM4IDE5OTQgIFBoaWxpcHBlIERlIE11eXRlciAgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIHRyZWUuYyAoRklMRV9GVU5DVElPTl9GT1JNQVQpOiBGaXggdHlwbyBpZiBuZWl0aGVyIGRvdCBub3IgZG9sbGFyCisJaW4gbGFiZWwuCisKK1dlZCBGZWIgIDIgMTQ6Mzg6NTYgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChjb25zdF9iaW5vcCwgQ09NUExFWF9UWVBFLCBjYXNlIFJESVZfRVhQUik6CisJSWYgY29tcGxleCBpbnRlZ2VyLCB1c2UgVFJVTkNfRElWX0VYUFIgZm9yIGlubmVyIGRpdmlzaW9uLgorCisJKiBjLXRyZWUuaDogUmUtb3JkZXIgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgaW4gYy10eXBlY2suYyB0bworCWFncmVlIHdpdGggb3JkZXIgdGhlcmU7IGFkZCBzb21lIG1pc3NpbmcgZGVjbGFyYXRpb25zLgorCSogYy10eXBlY2suYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnM7IGRlbGV0ZQorCWZvcndhcmQgZGVjbGFyYXRpb25zIG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zLgorCShpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQWRkIG1pc3NpbmcgcGFyYW1ldGVyIHRvCisJcmVjdXJzaXZlIGNhbGwuCisKK1dlZCBGZWIgIDIgMTQ6MjI6MDUgMTk5NCAgS2F2ZWggUi4gR2hhemkgIChnaGF6aUBub2MucnV0Z2Vycy5lZHUpCisKKwkqIG9iamMvTWFrZWZpbGUgKFNVQkRJUl9JTkNMVURFUyk6IEFkZCAtSSBmb3IgaW5jbHVkZSBkaXJlY3RvcnkuCisKK1dlZCBGZWIgIDIgMTM6MjQ6MjMgMTk5NCAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogZXhwbWVkLmMgKHN5bnRoX211bHQpOiBEZWxheSBhbGxvY2F0aW9uIG9mIGFsZ29yaXRobSBzdHJ1Y3R1cmVzCisJdW50aWwgdGhleSBhcmUgbmVlZGVkLiAgUmVvcmRlciBlYXJseS1leGl0IHRlc3RzIHRvIGF2b2lkIGNvbXBhcmluZworCXZhbHVlIHRoYXQgaXMgbm90IHlldCBzZXQuCisKK1R1ZSBGZWIgIDEgMTg6NTY6MTkgMTk5NCAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogIEFsbG93IGZvcm1hdCBhdHRyaWJ1dGVzCisJb24gb2xkIHN0eWxlIChub24tcHJvdG90eXBlKSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisKK1R1ZSBGZWIgIDEgMTE6MjU6NDAgMTk5NCAgU3RlcGhlbiBSLiB2YW4gZGVuIEJlcmcgIChiZXJnQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZSkKKworCSogdHJlZS5jIChidWlsZF90eXBlX3ZhcmlhbnQpOiBTaW1wbGlmeSBieSB1c2luZyBidWlsZF90eXBlX2NvcHkuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IGB2b2xhdGlsZScgZnVuY3Rpb24gd2FybmluZworCWNvcnJlY3RlZCB0byByZWFkIGBub3JldHVybicgZnVuY3Rpb24gd2FybmluZy4KKwkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgorCSogYy10eXBlY2suYywgY3AtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBMaWtld2lzZS4KKworVHVlIEZlYiAgMSAwNjowNjoyMiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IERvbid0IG1ha2UgYW4gZXh0cmFjdGlvbiB0aGF0CisJaGFzIHRoZSBwb3RlbnRpYWwgb2YgY3Jvc3NpbmcgYSBib3VuZGFyeS4KKworCSogcmVnY2xhc3MuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKGF1dG9faW5jX2RlY19yZWdfcCk6IE5ldyBmdW5jdGlvbi4KKwkocmVnY2xhc3MpOiBDYWxsIGl0IHRvIGFsbG93IGEgcmVnaXN0ZXIgbmVlZGluZyBhIHNlY29uZGFyeSByZWxvYWQKKwl0byBiZSB1c2VkIGZvciBpbmMvZGVjIGlmIGl0IGlzIGFscmVhZHkgdmFsaWQgZm9yIGl0LgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMsIEBhZGEpOiBEb24ndCBkdXBsaWNhdGUgIi1nbmF0IiBwYXJhbWV0ZXJzOworCXBhc3MgLXF1aWV0IHVubGVzcyAtUSBpcyBzcGVjaWZpZWQuCisKKwkqIGFscGhhLm1kIChtaW5zZjMsIG1heGRmMywgbWluZGYzKTogUHJvcGVybHkgaW5zZXJ0IGNvbnN0YW50IG9mCisJemVybyBpbnRvIHBhdHRlcm5zLgorCitNb24gSmFuIDMxIDIwOjU1OjQxIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogaTk2MC5jIChpOTYwX2Z1bmN0aW9uX25hbWVfZGVjbGFyZSk6IEhhbmRsZSBuYW1lcyB0aGF0IHN0YXJ0CisJd2l0aCAnKicuCisKK01vbiBKYW4gMzEgMTk6MTM6NTkgMTk5NCAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCVVuaWZ5IGVycm9yIGFuZCBtZXNzYWdlIGZ1bmN0aW9uczoKKwkqIHRvcGxldi5jOiBJbmNsdWRlICJndmFyYXJncy5oIi4KKwkoZmF0YWxfaW5zbl9ub3RfZm91bmQpOiBPbWl0IHN1cGVyZmx1b3VzIGFyZ3VtZW50IHRvIGVycm9yLgorCSh2bWVzc2FnZSwgdl9tZXNzYWdlX3dpdGhfZmlsZV9hbmRfbGluZSk6IE5ldyBmdW5jdGlvbnMuCisJKHZfbWVzc2FnZV93aXRoX2RlY2wsIGZpbGVfYW5kX2xpbmVfZm9yX2FzbSk6IExpa2V3aXNlLgorCSh2X2Vycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgdl9lcnJvcl93aXRoX2RlY2wpOiBMaWtld2lzZS4KKwkodl9lcnJvcl9mb3JfYXNtLCB2ZXJyb3IsIHZmYXRhbCk6IExpa2V3aXNlLgorCSh2X3dhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCB2X3dhcm5pbmdfd2l0aF9kZWNsKTogTGlrZXdpc2UuCisJKHZfd2FybmluZ19mb3JfYXNtLCB2d2FybmluZyk6IExpa2V3aXNlLgorCShlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUsIGVycm9yX3dpdGhfZGVjbCwgZXJyb3IsIGZhdGFsKTogTm93IGp1c3QKKwl3cmFwcGVycyBmb3IgYWJvdmUgZnVuY3Rpb25zLgorCShlcnJvcl9mb3JfYXNtLCB3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgorCSh3YXJuaW5nX3dpdGhfZGVjbCwgd2FybmluZ19mb3JfYXNtLCB3YXJuaW5nKTogTGlrZXdpc2UuCisKK01vbiBKYW4gMzEgMTk6MDM6MTYgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplX2luc24pOiBBZGQgdXNlIGRlcGVuZGVuY2llcyBmb3IgcmVnaXN0ZXJzCisJbWVudGlvbmVkIGluIFJFR19ERUFEIG5vdGVzLgorCisJKiBjb25maWd1cmUgKG1pcHMtdGFuZGVtLXN5c3Y0Kik6IEFkZC4KKwkqIG1pcHMvc3ZyNC10LmgsIG1pcHMvc3ZyNC10LWdkYi5oOiBOZXcgZmlsZXMuCisKKwkqIHNjaGVkLmMgKHByaW9yaXR5KTogQ2FsbCBpbnNuX2Nvc3QoKSBmb3IgYW50aS0gYW5kIG91dHB1dC0KKwlkZXBlbmRlbmNpZXMgYXMgd2VsbCBhcyBmb3IgdHJ1ZSBkZXBlbmRlbmNpZXMuCisKKwkqIGNzZS5jIChmaW5kX2Jlc3RfYWRkcik6IExpbWl0IG51bWJlciBvZiBjc2VfZ2VuX2JpbmFyeSBjYWxscyB0bworCTIwIHBlciBpdGVyYXRpb24uCisKK01vbiBKYW4gMzEgMTg6MDg6MjcgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVhbC5jIChlbW92byk6IFVzZSBzZXBhcmF0ZSB2YXJpYWJsZSBmb3IgbG9vcCBpbmRleC4KKworCSogZm9sZC1jb25zdC5jIChvcGVyYW5kX2VxdWFsX2Zvcl9jb21wYXJpc29uX3ApOiBEZWNsYXJlCisJY29ycmVjdF93aWR0aCBhcyB1bnNpZ25lZC4KKworCSogY29uZmlndXJlIChtNjhrLXdycy12eHdvcmtzKTogRml4IHR5cG8gaW4gbmFtZS4KKworCSogTWFrZWZpbGUuaW4gKGNyb3NzLXRlc3QsIGVucXVpcmUsIHByb3RvaXplLCB1bnByb3RvaXplKToKKwlTcGVjaWZ5IHByb2dyYW0gbmFtZSBpbiAtbyB0byBmb3JjZSBpbnRvIGJ1aWxkIGRpcmVjdG9yeS4KKworCSogaTM4Ni9zb2wyLmggKENQUF9TUEVDKTogQWRkIC1Ec3VuLgorCisJKiBhbHBoYS9nZGIuaDogUmVuYW1lZCBmcm9tIGFscGhhLWdkYi5oLgorCSogYWxwaGEvZ2RiLW9zZjEyLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChhbHBoYSk6IFJlZmxlY3QgbmV3IG5hbWUgZm9yIGZpbGVzIGFuZCBzdXBwb3J0CisJZ2RiIHdpdGggT1NGIFYxLjIuCisKK01vbiBKYW4gMzEgMTU6MTg6NDAgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBiYy1lbWl0LmMgKGNsYXNzX25hcnJvd2VzdF9tb2RlLCBieXRlX21vZGUsIHdvcmRfbW9kZSk6IEFkZAorCWV4dGVybiB0byBkZWNsYXJhdGlvbi4KKwkqIGV4cHIuYyAobG9jYWxfdmFyc19zaXplKTogTGlrZXdpc2UuCisKKwkqIGdlbmF0dHJ0YWIuYyAoZXhwYW5kX3VuaXRzKTogV2hlbiBjYWxjdWxhdGUgQkxPQ0tBR0UsIHJldmVyc2UKKwl0ZXJtcyB0byBQT1NfTUlOVVNfT1AuICBDbGFyaWZ5IGNvbW1lbnQgYmVmb3JlIEJMT0NLQUdFIGNvbXB1dGF0aW9uLgorCSh3cml0ZV9jb21wbGV4X2Z1bmN0aW9uKTogVXNlIEVYRUNVVElOR19JTlNOIGZvciBmaXJzdCBzd2l0Y2gsIGFuZAorCUNBTkRJREFURV9JTlNOIGZvciBzZWNvbmQgc3dpdGNoLgorCisJKiBzcGFyYy9saXRlLmggKFRBUkdFVF9ERUZGQVVMVCk6IEFkZCAtbWFwcC1yZWdzLgorCSogc3BhcmMvc3BhcmMuaCAoVEFSR0VUX0FQUF9SRUdTKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgbmV3IG9wdGlvbnMgLW1hcHAtcmVncyBhbmQgLW1uby1hcHAtcmVncy4KKwkoVEFSR0VUX0RFRkFVTFQpOiBBZGQgLW1hcHAtcmVncy4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBNYWtlICVnMiwgJWczLCBhbmQgJWc0IGJlIGZpeGVkIHdoZW4KKwl0aGUgLW1uby1hcHAtcmVncyBvcHRpb24gaXMgdXNlZC4KKwkqIHNwYXJjL3N1bjRvczMuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWxldGUuCisKKwkqIHN2cjQtNS5oIChTVEFSVEZJTEVfU1BFQyk6IEluY2x1ZGUgdmFsdWVzLVhbY3RhXS5vIGZpbGUgaW4gbGluay4KKworCSogeGNvZmZvdXQuYyAoQVNNX09VVFBVVF9MRkUpOiBPdXRwdXQgYWJzb2x1dGUgbGluZSBudW1iZXIgbm90CisJcmVsYXRpdmUgbGluZSBudW1iZXIuCisKK0ZyaSBKYW4gMjggMTk6MjA6MDcgMTk5NCAgTWljaGFlbCBDb2xsaXNvbiAgKGNvbGxpc29uQG9zZi5vcmcpCisKKwkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IENoZWNrIGZvciBpbmNyZW1lbnQgdXNpbmcgc2luZ2xlX3NldC4KKworRnJpIEphbiAyOCAxOToxMToxNyAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLm1kIChmc2VsKTogUmVtb3ZlIGluc25zIHdpdGggcmVjb3JkIGJpdCBzZXQuCisKK1RodSBKYW4gMjcgMTg6MjI6MjUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IEZpeCB0eXBvIGluIHByZXZpb3VzIGNoYW5nZS4KKworV2VkIEphbiAyNiAxODoxOTo1MSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAc3VnYXItYm9tYnMuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiAgTWFrZSBub24tc3RhdGljLgorCShJdCdzIHVzZWQgYnkgdGhlIENoaWxsIGJhY2stZW5kLikKKworV2VkIEphbiAyNiAxMzo1NDo0MCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjaGVkLmMgKGF0dGFjaF9kZWF0aHNfaW5zbik6IEFkZCBSRUdfREVBRCBub3RlcyB0byBDTE9CQkVSIGlmCisJaXQgaXMgZm9yIGEgTUVNLgorCitUdWUgSmFuIDI1IDA4OjMwOjExIDE5OTQgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIGNzZS5jIChIQVNIQklUUyk6IFJlbW92ZWQuCisJKEhBU0gsIHN0cnVjdCBzZXQsIGNhbm9uX2hhc2gsIHNhZmVfaGFzaCwgcmVtb3ZlX2Zyb21fdGFibGUpOgorCUdlbmVyYXRlIGFuZCB1c2UgdW5zaWduZWQgaGFzaCB2YWx1ZXMsIHRvIGF2b2lkIHBvdGVudGlhbCB0cm91YmxlCisJd2l0aCBzaWduZWQgc2hpZnQvb3ZlcmZsb3cuCisJQWxzbyBuYW1lIHZhcmlhYmxlcyBjb25zaXN0ZW50bHk6ICJoYXNoIiwgbm90ICJoYXNoX2NvZGUiLgorCShsb29rdXAsIGxvb2t1cF9mb3JfcmVtb3ZlLCBpbnNlcnQsIG1lcmdlX2VxdWl2X2NsYXNzZXMpOiBMaWtld2lzZS4KKwkoaW52YWxpZGF0ZSwgcmVoYXNoX3VzaW5nX3JlZywgaW52YWxpZGF0ZV9mb3JfY2FsbCk6IExpa2V3aXNlLgorCShmaW5kX2Jlc3RfYWRkciwgcmVjb3JkX2p1bXBfY29uZCwgY3NlX2luc24pOiAgTGlrZXdpc2UuCisKK01vbiBKYW4gMjQgMTg6NTk6NTkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoc3RvcmVfc3BsaXRfYml0X2ZpZWxkKTogIEZvciBCWVRFU19CSUdfRU5ESUFOLCBvbmx5CisJcGFkIG9uIGxlZnQgaWYgdmFsdWUgbm90IGluIG1lbW9yeS4gIFJlamVjdCBnZW5fbG93cGFydF9jb21tb24KKwlvdXRwdXQgaWYgaXQgcmV0dXJucyB0aGUgaW5wdXQgdmFsdWUuCisKKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IFdoZW4gZGVsZXRlIHNpbXBsaWZpZWQgY29uZGp1bXAsCisJcHJvdGVjdCB0aGUgbGFiZWwsIHNvIHRoYXQgaXQgZG9lc24ndCBnZXQgZGVsZXRlZCBhbHNvLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogSWYgeXlwYXJzZSByZXR1cm5zIGFuIGVycm9yLCBwb3AgYWxsCisJcGVuZGluZyBiaW5kaW5nIGxldmVscy4KKworTW9uIEphbiAyNCAxODozMDo1MyAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIG9iamMvT2JqZWN0LmggKHN0cmVhbVZlcnNpb24sIHJlYWQsIHdyaXRlKTogI2lmbmRlZiBvdXQgZm9yIHRoZQorCWFscGhhIHNpbmNlIFR5cGVkU3RyZWFtIG5vdCBzdXBwb3J0ZWQgdGhlcmUgeWV0LgorCSogb2JqYy9PYmplY3QubSAoc3RyZWFtVmVyc2lvbiwgcmVhZCwgd3JpdGUpOiBEaXR0by4KKworTW9uIEphbiAyNCAxNzo0MDo1NiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmMgKHNwYXJjX2FkZHJlc3NfY29zdCk6IERlbGV0ZS4KKwkqIHNwYXJjLmggKEFERFJFU1NfQ09TVCk6IERlZmluZSB0byAxLgorCisJKiBic2QtNS5oLCBtaXBzLTUuaCwgc3ZyMy01LmgsIHN2cjQtNS5oIChBU01fT1VUUFVUX05FV0xJTkUpOgorCURlZmluZSBuZXcgbWFjcm8uCisJKiBtaXBzLmggKEFTTV9PVVRQVVRfTkVXTElORSk6IE5ldyBkZWZhdWx0IGZvciBuZXcgbWFjcm8uCisJKEFTTV9PVVRQVVRfQVNDSUkpOiBVc2UgQVNNX09VVFBVVF9ORVdMSU5FLgorCisJKiBzcGFyYy5oIChBU01fT1VUUFVUX0NPTU1PTik6IERvbid0IG91dHB1dCAuZ2xvYmFsLiAgVXNlIFNJWkUgbm90CisJUk9VTkRFRC4KKwkoQVNNX09VVFBVVF9MT0NBTCk6IERlbGV0ZS4KKwkoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogRGVmaW5lLgorCitTdW4gSmFuIDIzIDE4OjU3OjAxIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogSW5pdGlhbGl6ZSBKVU1QX0xBQkVMIGZvciB0aGUgYnJhbmNoCisJaW5zbiBiZWZvcmUgdHJ5aW5nIHRvIGludmVydCBpdC4KKworU3VuIEphbiAyMyAxODo0MDoyMyAxOTk0ICBTYW11ZWwgQS4gRmlndWVyb2EgIChmaWd1ZXJvYUBjcy5ueXUuZWR1KQorCisJKiBpMzg2L29zMi5oIChQQVRIX1NFUEFSQVRPUik6IE5ldyBtYWNyby4KKwkqIGkzODYvZ2FzLmggKEFTTV9GSUxFX1NUQVJUKTogRGVsZXRlOyBpZGVudGljYWwgdG8gb25lIGluIGJzZC5oLAorCXdoaWNoIGlzIGluY2x1ZGVkLgorCitTdW4gSmFuIDIzIDE4OjIxOjIzIDE5OTQgIFJhbmR5IFMuIFdlbGNoICAocmFuZHlAdHNzLmNvbSkKKworCSogbTY4ay9wbGV4dXMuaDogQXNzdW1lIEdBUyAyLnggdXNlZCBhbmQgYWRkIHN1cHBvcnQgZm9yIGRlYnVnZ2luZy4KKworU3VuIEphbiAyMyAwNjoxOToyOCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUHJvcGVybHkgdGVzdCBmb3Igb3V0cHV0IG9wZXJhbmQKKwl3aGVuIGNoYW5naW5nIFJFTE9BRF9GT1JfT1VUUFVUX0FERFJFU1MgdG8gUkVMT0FEX0ZPUl9JTlBVVF9BRERSRVNTLgorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIFNVQlJFRyk6IEhhbmRsZSBwYXJhZG94aWNhbCBTVUJSRUcgb2YKKwljb25zdGFudC4KKwkoSUZfVEhFTl9FTFNFKTogQWRkIG1pc3NpbmcgImVsc2UiIGFuZCBjaGVjayBmb3IgY29tcGFyaXNvbgorCWJlZm9yZSBjYWxsaW5nIHJldmVyc2libGVfY29tcGFyaXNvbl9wLgorCisJKiBjLXR5cGVjay5jIChvdXRwdXRfaW5pdF9lbGVtZW50cyk6IFVzZSBGSUVMRCBpbnN0ZWFkCisJb2YgY29uc3RydWN0b3JfZmllbGRzIHdoZW4gZG9pbmcgYWxpZ25tZW50IGFuZCBzaXppbmcuCisJKG91dHB1dF9wZW5kaW5nX2luaXRfZWxlbWVudHMpOiBEb24ndCBibG93IHVwIHdoZW4gd3JpdGluZworCW90aGVyIHRoYW4gZmlyc3QgZmllbGQgcHV0IGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZyB5ZXQuCisJVXBkYXRlIGNvbnN0cnVjdG9yX2JpdF9pbmRleCB3aGVuIHdlIGVtaXQgYSBza2lwLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IERlZmVyIGNvbXBpbGF0aW9uIG9mIGZ1bmN0aW9uCisJdGhhdCB3ZXJlIHNwZWNpZmllZCBhcyBpbmxpbmUsIHdoZXRoZXIgb3Igbm90IHRoZXkgYWN0dWFsbHkgd2VyZQorCWlubGluZWQuCisKKwkqIGFscGhhLmggKE9CSkVDVF9GT1JNQVRfQ09GRiwgRVhURU5ERURfQ09GRiwgTk1fRkxBR1MpOiBEZWZpbmUuCisJKiB4LWFscGhhOiBOZXcgZmlsZS4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogQ2FuIHJlbW92ZSBOT1Qgb24gYm90aCBvcGVyYW5kcworCWlmIHdlIHN3YXAgY29tcGFyaXNvbiBjb2RlLgorCisJKiByczYwMDAubWQ6IEluc2VydCBzb21lIG1pc3NpbmcgYmxhbmsgbGluZXMuCisKKwkqIGFscGhhLmMgKG91dHB1dF97cHJvLGVwaX1sb2cpOiBVc2UgYXNzZW1ibGVfbmFtZSB0byBvdXRwdXQKKwlhbHBoYV9mdW5jdGlvbl9uYW1lLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBGaXggdHlwb3MgaW4gbGFzdCBjaGFuZ2UuCisKK1N1biBKYW4gMjMgMDU6NTk6MzEgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0KTogU2F2ZSBjdXJyZW50IGVsZW1lbnRzCisJaW5zdGVhZCBvZiBjbGVhcmluZyB0aGVtLgorCitTYXQgSmFuIDIyIDE1OjUwOjI5IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IElzc3VlIGEgd2FybmluZyBpZiByZXR1cm5pbmcKKwlhZGRyZXNzIG9mIG5vbi1zdGF0aWMgbG9jYWwgb2JqZWN0LgorCisJKiBjb21iaW5lLmMgKGlmX3RoZW5fZWxzZV9jb25kKTogRG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBDT01QQVJFLgorCShzaW1wbGlmeV9jb21wYXJpc29uKTogU3RyaXAgU0lHTl9FWFRFTkQsIE5PVCwgb3IgTkVHIHdoZW4KKwlib3RoIG9wZXJhbmRzIGhhdmUgaXQuCisKKwkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IElmbmRlZiBXT1JEX1JFR0lTVEVSX09QRVJBVElPTlMsCisJZW5zdXJlIHdlIGRvbid0IGRvIHRoZSB3cm9uZyB0aGluZyBpZiBYIGlzIG5hcnJvd2VyIHRoYW4gTU9ERS4KKworVGh1IEphbiAyMCAwMTowNjoyMyAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IE1ha2UgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIHN0YWIKKwlmb3IgZWFjaCBwcm9jZWR1cmUgc3BlY2lhbCB0byBhdm9pZCB0aGUgbmVlZCBmb3IgbmFzdHkgaGFja3MgaW4gR0FTLgorCisJKiBwYS5tZCAoaW9yc2NjKTogRml4IHR5cG8uCisKK1dlZCBKYW4gMTkgMTk6MzU6MzcgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGFkZGVyLmN5Z251cy5jb20pCisKKwkqIHBhLmggKEFTTV9HTE9CQUxJWkVfTEFCRUwpOiBEb24ndCBnbG9iYWxpemUgZnVuY3Rpb24gbGFiZWxzIGhlcmUuCisKK01vbiBKYW4gMTcgMTY6Mzg6MTYgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB4Y29mZm91dC5jICh4Y29mZm91dF9iZWdpbl9ibG9jayk6IERvbid0IGVtaXQgYSAuYmIgZm9yIHRoZQorCWZ1bmN0aW9uIGxldmVsIHNjb3BlLgorCSh4Y29mZm91dF9lbmRfYmxvY2spOiBEb24ndCBlbWl0IGEgLmViIGZvciB0aGUgZnVuY3Rpb24gbGV2ZWwKKwlzY29wZS4KKworU3VuIEphbiAxNiAxNDoyOTozMSAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IEFscGhhYmV0aXplIHRoZSBsaXN0IG9mIG1hY2hpbmUtbmFtZSBhbGlhc2VzLgorCUFkZCBuaDMwMDAgYW5kIG5oWzQ1XTAwMC4KKwlEZWxldGUgZHVwbGljYXRlIGNsYXVzZXMgZm9yIGhwOWsyLi4uIGFuZCBocDlrMzEuLi4KKworU2F0IEphbiAxNSAxODowNjo0NSAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYmx1ZXMuY3lnbnVzLmNvbSkKKworCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChzbXVsc2kzX2hpZ2hwYXJ0KTogTmV3IHBhdHRlcm4uCisJKHVtdWxzaTNfaGlnaHBhcnQpOiBOZXcgcGF0dGVybi4KKwkqIGNvbmZpZy9taXBzL21pcHMubWQgKHNtdWxzaTNfaGlnaHBhcnQpOiBOZXcgcGF0dGVybi4KKwkodW11bHNpM19oaWdocGFydCk6IE5ldyBwYXR0ZXJuLgorCitUaHUgSmFuIDEzIDE4OjU0OjI3IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogaXJpczMuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19TSVpFX1RZUEVfXywgX19QVFJESUZGX1RZUEVfXywgYW5kCisJX19taXBzLgorCShTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSk6IERlbGV0ZS4KKwkqIG1pcHMuYyAoZGZoaWdoLCBkZmxvdywgc2ZoaWdoLCBzZmxvdyk6IE5ldyB2YXJpYWJsZXMuCisJKG1pcHNfc3dfcmVnX25hbWVzKTogQ29uc2lzdGVudGx5IHVzZSAkIGFzIG5hbWUgcHJlZml4LgorCShsYXJnZV9pbnQpOiBIYW5kbGUgNjQgYml0IGNvbnN0YW50cy4KKwkocmVnX29yXzBfb3BlcmFuZCwgbWlwc19jb25zdF9kb3VibGVfb2spOiBEb24ndCBleGFtaW5lCisJQ09OU1RfRE9VQkxFIGludGVybmFscy4KKwkobWlwc19jb25zdF9kb3VibGVfb2spOiBVc2UgUkVBTF9WQUxVRV8qIG1hY3Jvcy4KKwkoc2ltcGxlX21lbW9yeV9vcGVyYW5kKTogQWRkIDY0IGJpdCBzdXBwb3J0LiAgT25seSB0ZXN0CisJVEFSR0VUX0dQX09QVCB0byBkZXRlcm1pbmUgaWYgZG9pbmcgZ3Agb3B0aW1pemF0aW9ucy4gIFBhc3MKKwlhZGRyZXNzIG5vdCBNRU0gdG8gZWxpbWluYXRlX2NvbnN0YW50X3Rlcm0uICBVc2UgU01BTExfSU5ULgorCShtaXBzX2ZpbGxfZGVsYXlfc2xvdCk6IEFkZCA2NCBiaXQgc3VwcG9ydC4KKwkobWlwc19tb3ZlXzF3b3JkKTogQWRkIDY0IGJpdCBzdXBwb3J0LiAgRG9uJ3QgZXhhbWluZSBDT05TVF9ET1VCTEUKKwlpbnRlcm5hbHMuCisJKG1pcHNfbW92ZV8yd29yZHMpOiBMaWtld2lzZS4KKwkobWlwc19hZGRyZXNzX2Nvc3QpOiBQYXNzIGFkZHJlc3Mgbm90IE1FTSB0bworCWVsaW1pbmF0ZV9jb25zdGFudF90ZXJtLiAgVXNlIFNNQUxMX0lOVC4KKwkoZ2VuX2ludF9yZWxhdGlvbmFsKTogTmV3IHZhcmlhYmxlIG1vZGUuICBBZGQgNjQgYml0IHN1cHBvcnQuCisJKGdlbl9jb25kaXRpb25hbF9icmFuY2gpOiBBZGQgNjQgYml0IHN1cHBvcnQuCisJKGJsb2NrX21vdmVfbG9hZF9zdG9yZSwgYmxvY2tfbW92ZV9sb29wLCBibG9ja19tb3ZlX2NhbGwsCisJZXhwYW5kX2Jsb2NrX21vdmUsIG91dHB1dF9ibG9ja19tb3ZlLCBmdW5jdGlvbl9hcmdfYWR2YW5jZSwKKwlmdW5jdGlvbl9hcmcsIGZ1bmN0aW9uX2FyZ19wYXJ0aWFsX25yZWdzKTogTGlrZXdpc2UuCisJKG92ZXJyaWRlX29wdGlvbnMpOiBDbGVhciBNQVNLX0dQT1BUIGlmIHRocmVzaG9sZCBpcyB6ZXJvIG9yCisJbmVnYXRpdmUuICBTZXQgTUFTS19HUE9QVCBpZiBvcHRpbWl6aW5nLiAgU2V0IG1pcHNfaXNhIGZyb20gLW1pc2E9CisJb3B0aW9uLCBlbHNlIGZyb20gTUlQU19JU0FfREVGQVVMVCBpZiBkZWZpbmVkLCBlbHNlIHRvIDEuICBNYWtlCisJZGVmYXVsdCBjcHUgZGVwZW5kIG9uIGlzYS4gIEFkZCBjcHVzIHI0NDAwLCByNDYwMCwgb3Jpb24uICBSZXdyaXRlCisJVEFSR0VUX05BTUVfUkVHUyBzdXBwb3J0LiAgSW5pdGlhbGl6ZSBkZmhpZ2gsIGRmbG93LCBzZmhpZ2gsCisJc2Zsb3cuICBBZGQgNjQgYml0IHN1cHBvcnQuCisJKHByaW50X29wZXJhbmQpOiBVc2UgUkVBTF9WQUxVRV8qIG1hY3Jvcy4KKwkobWlwc19vdXRwdXRfZXh0ZXJuYWwpOiBEb24ndCBkZXBlbmQgb24gbWlwc19zZWN0aW9uX3RocmVzaG9sZC4KKwkobWFrZV90ZW1wX2ZpbGUpOiBEZWZpbmUgUF90bXBkaXIgd2hlbiBfX01TRE9TX18uICBNYWxsb2MgZmlsZW5hbWUKKwlzdHJpbmcuICBEb24ndCB1bmxpbmsgdGVtcCBmaWxlIHdoZW4gX19NU0RPU19fLgorCShtaXBzX2FzbV9maWxlX3N0YXJ0KTogRGVsZXRlIFRBUkdFVF9OQU1FX1JFR1Mgc3VwcG9ydC4KKwkobWlwc19hc21fZmlsZV9lbmQpOiBVbmxpa2UgdGVtcCBmaWxlIHdoZW4gX19NU0RPU19fLgorCShtaXBzX2RlY2xhcmVfb2JqZWN0KTogRG9uJ3QgdGVzdCBtaXBzX3NlY3Rpb25zX3RocmVzaG9sZC4KKwkoY29tcHV0ZV9mcmFtZV9zaXplLCBzYXZlX3Jlc3RvcmVfaW5zbnMsIGZ1bmN0aW9uX3Byb2xvZ3VlLAorCW1pcHNfZXhwYW5kX3Byb2xvZ3VlLCBmdW5jdGlvbl9lcGlsb2d1ZSwgbWlwc19leHBhbmRfZXBpbG9ndWUpOgorCUFkZCA2NCBiaXQgc3VwcG9ydC4KKwkoZnVuY3Rpb25fZXBpbG9ndWUpOiBDb3JyZWN0bHkgb3V0cHV0IGAjJyBiZWZvcmUgLnNldCB2b2xhdGlsZS4KKwkqIG1pcHMuaCAoZW51bSBjbXBfdHlwZSk6IEFkZCA2NCBiaXQgc3VwcG9ydC4KKwkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUjQ2MDAuCisJKE1BU0tfNjRCSVQsIFRBUkdFVF82NEJJVCk6IE5ldyBtYXNrIGJpdCwgdG8gaW5kaWNhdGUgNjQgYml0IG1vZGUuCisJKEhBVkVfNjRCSVRfUCwgT1BUSU1JWkFUSU9OX09QVElPTlMpOiBEZWxldGUuCisJKENQUF9TUEVDKTogRG9uJ3QgYWJvcnQgaWYgbm90IGRlZmluZWQuCisJKENDMV9TUEVDKTogLW1pcHMxIGFuZCAtbWlwczIgaW1wbHkgLW1mcDMyLiAtbWlwczMgaW1wbGllcyAtbWZwNjQuCisJKENQUF9TUEVDKTogRGVmaW5lIF9fU0laRV9UWVBFX18sIF9fUFRSRElGRl9UWVBFX18sIGFuZCBfX21pcHMuCisJKEJJVFNfUEVSX1dPUkQsIFVOSVRTX1BFUl9XT1JELCBJTlRfU0laRV9UWVBFLCBMT05HX1RZUEVfU0laRSwKKwlMT05HX0xPTkdfVFlQRV9TSVpFLCBQT0lOVEVSX1NJWkUsIFBPSU5URVJfQk9VTkRBUlksCisJUEFSTV9CT1VOREFSWSwgRU1QVFlfRklFTERfQk9VTkRBUlksIEhBUkRfUkVHTk9fTlJFR1MsCisJQ09OU1RfT0tfRk9SX0xFVFRFUl9QLCBTVEFDS19BUkdTX0FESlVTVCwgRlVOQ1RJT05fUFJPRklMRVIsCisJVFJBTVBPTElORV9URU1QTEFURSwgVFJBTVBPTElORV9TSVpFLCBUUkFNUE9MSU5FX0FMSUdOTUVOVCwKKwlJTklUSUFMSVpFX1RSQU1QT0xJTkUsIENBU0VfVkVDVE9SX01PREUsIE1PVkVfTUFYLAorCVRSVUxZX05PT1BfVFJVTkNBVElPTiwgUG1vZGUsIEZVTkNUSU9OX01PREUsCisJQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQsIEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCwKKwlBU01fT1VUUFVUX1JFR19QVVNILCBBU01fT1VUUFVUX1JFR19QT1ApOiBBZGQgNjQgYml0IHN1cHBvcnQuCisJKE1BWF9CSVRTX1BFUl9XT1JELCBNQVhfVU5JVFNfUEVSX1dPUkQsIFVOSVRTX1BFUl9GUFJFRywKKwlNQVhfSU5UX1RZUEVfU0laRSwgTUFYX1dDSEFSX1RZUEVfU0laRSwgTUFYX0xPTkdfVFlQRV9TSVpFLAorCU1BWF9NT1ZFX01BWCk6IERlZmluZS4KKwkoSU5ERVhfUkVHX0NMQVNTKTogTk9fUkVHUyBub3QgR1JfUkVHUy4KKwkoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IERvbid0IGV4YW1pbmUgQ09OU1RfRE9VQkxFCisJaW50ZXJuYWxzLgorCShQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogUmV0dXJuIENMQVNTIGlmIGl0IGlzbid0IEFMTF9SRUdTLgorCShUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUsIEFTTV9PVVRQVVRfQ0FTRV9MQUJFTCk6IERlbGV0ZS4KKwkoUkVHTk9fT0tfRk9SX0lOREVYX1AsIFJFR19PS19GT1JfSU5ERVhfUCk6IFJlZGVmaW5lIHRvIDAuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERlbGV0ZSByZWR1bmRhbnQgY29kZTAgPT0gUkVHIHRlc3QuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEb24ndCB0ZXN0IG1pcHNfc2VjdGlvbl90aHJlc2hvbGQuCisJKENPTlNUX0NPU1RTKTogQ09OU1RfSU5UIGhhdmUgY29zdCAwIG5vdCBDT05TVFNfTl9JTlNOUyAoMCkuICBQYXNzCisJYWRkcmVzcyBub3QgTUVNIHRvIGVsaW1pbmF0ZV9jb25zdGFudF90ZXJtLiAgQWRkIDY0IGJpdCBzdXBwb3J0LgorCShNRU1PUllfTU9WRV9DT1NULCBBU01fT1VUUFVUX0RPVUJMRV9JTlQpOiBEZWZpbmUuCisJKEVYVFJBX1NFQ1RJT05TKTogRGVsZXRlIGluX2xhc3RfcDEuCisJKFNFTEVDVF9SVFhfU0VDVElPTik6IERlbGV0ZSBkaXZpc2lvbiBieSBCSVRTX1BFUl9VTklULgorCShOT19CVUlMVElOX1NJWkVfVFlQRSwgTk9fQlVJTFRJTl9QVFJESUZGX1RZUEUpOiBEZWZpbmUuCisJKFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFKTogQWRkIDY0IGJpdCBzdXBwb3J0LgorCSogbWlwcy5tZCAoY3B1KTogQWRkIHI0NjAwLgorCShkZWZpbmVfZnVuY3Rpb25fdW5pdCk6IENvcnJlY3QgbnVtZXJvdXMgZXJyb3JzLiAgQWRkIHI0NjAwLgorCShhZGRkaTMqLCBzdWJkaTMqLCBtdWxzaWRpMywgdW11bHNpZGkzLCBuZWdkaTIqLCBvbmVfY21wZGwyKiwKKwlub3JkaTIqLCBhbmRkaTIqLCBpb3JkaTMqLCB4b3JkaTMqLCBtb3ZkaSosIGFzaGxkaTMqLCBhc2hyZGkzKiwKKwlsc2hyZGkzKiwgc2VxLCBzbmUsIHNndCwgc2dlLCBzbHQsIHNsZSwgc2d0dSwgc2dldSwgc2x0dSwgc2xldSwKKwlpbmRpcmVjdF9qdW1wLCB0YWJsZWp1bXAsIGNhbGwqLCBjYWxsX3ZhbHVlKik6IEFkZCA2NCBiaXQgc3VwcG9ydC4KKwkoYWRkZGkzX2ludGVybmFsXzMsIGFkZHNpM19pbnRlcm5hbF8yLCBzdWJkaTNfaW50ZXJuYWxfMywKKwlzdWJzaTNfaW50ZXJuYWxfMiwgbXVsZGkzLCBtdWxkaTNfaW50ZXJuYWwsIGRpdm1vZGRpNCwgdWRpdm1vZGRpNCwKKwlkaXZkaTMsIG1vZGRpMywgdWRpdmRpMywgdW1vZGRpMywgYWJzZGkzLCBmZnNkaTIsCisJbmVnZGkyX2ludGVybmFsXzIsIGFuZGRpM19pbnRlcm5hbDEsIHhvcmRpM19pbW1lZCwgdHJ1bmNkaXNpMiwKKwl0cnVuY2RpaGkyLCB0cnVuY2RpcWkyLCB6ZXJvX2V4dGVuZHNpZGkyLAorCXplcm9fZXh0ZW5kc2lkaTJfaW50ZXJhbCwgemVyb19leHRlbmRoaWRpMiwgemVyb19leHRlbmRxaWRpMiwKKwlleHRlbmRzaWRpMiwgZXh0ZW5kaGlkaTIsIGV4dGVuZGhpZGkyX2ludGVybmFsLCBleHRlbmRxaWRpMiwKKwlleHRlbmRxaWRpMl9pbnNuLCBmaXhfdHJ1bmNkZmRpMiwgZml4X3RydW5jc2ZkaTIsIGZsb2F0ZGlkZjIsCisJZmxvYXRkaXNmMiwgZml4dW5zX3RydW5jZGZkaTIsIGZpeHVuc190cnVuY2Rmc2kyLAorCWFzaGxkaTNfaW50ZXJuYWw0LCBhc2hyZGkzX2ludGVybmFsXzQsIGxzaHJkaTNfaW50ZXJuYWw0LCBjbXBkaSwKKwl0c3RkaSwgYnJhbmNoX3plcm9fZGksIGJyYW5jaF9lcXVhbGl0eV9kaSwgc2VxX2RpX3plcm8sIHNlcV9kaSwKKwlzbmVfZGlfemVybywgc25lX2RpLCBzZ3RfZGksIHNnZV9kaSwgc2x0X2RpLCBzbGVfZGlfY29uc3QsCisJc2xlX2RpX3JlZywgc2d0dV9kaSwgc2dldV9kaSwgc2x0dV9kaSwgc2xldV9kaV9jb25zdCwgc2xldV9kaV9yZWcsCisJaW5kaXJlY3RfanVtcF9pbnRlcm5hbDEsIGluZGlyZWN0X2p1bXBfaW50ZXJuYWwyLAorCXRhYmxlanVtcF9pbnRlcm5hbDEsIHRhYmxlanVtcF9pbnRlcm5hbDIpOiBOZXcgcGF0dGVybnMuCisJKG11bHNpMyk6IEFkZCBtaXNzaW5nIG1pcHNfbW92ZV8xd29yZCBwYXJhbWV0ZXIuCisJKG11bHNpMysxKTogRG9uJ3Qgc3BsaXQgb24gcjQwMDAuCisJKGRpdm1vZHNpNCwgdWRpdm1vZHNpNCwgdWRpdnNpMywgdW1vZHNpMyk6IENvcnJlY3QgbGVuZ3Rocy4KKwkoZGl2c2kzLCBtb2RzaTMsIHVkaXZzaTMsIHVtb2RzaTMpOiBBbGxvdyBjb25zdGFudCBvcGVyYW5kcy4KKwkoc3FydGRmMiwgc3FydHNmMik6IENvcnJlY3QgdHlwZSBhdHRyaWJ1dGUuCisJKGFic3NpMik6IEFkZCBtaXBzMiBzdXBwb3J0LgorCShtb3ZzaV91bmFsaWduZWQsIG1vdnNpX3VsdywgbW92c2lfdXN3KTogQ29tbWVudCBvdXQuCisJKG1vdnNmLCBtb3ZkZik6IFVzZSBGIG5vdCBFLgorCShjbXBkZiwgY21wc2YsIGJyYW5jaF9mcCosIHN7ZXEsbmUsbHQsbGUsZ3QsZ2V9X1tkc11mKTogRGVwZW5kIG9uCisJVEFSR0VUX0hBUkRfRkxPQVQuCisJKiB2YS1taXBzLmg6IEFkZCA2NCBiaXQgc3VwcG9ydC4KKworVGh1IEphbiAxMyAwNjoxNDoxNyAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogYy1wYXJzZS5pbiAobWF5YmVfYXR0cmlidXRlKTogQWxsb3cgbXVsdGlwbGUgX19hdHRyaWJ1dGVfXworCWNsYXVzZXMgb24gYSBkZWNsYXJhdGlvbi4KKworVGh1IEphbiAxMyAwNjowMTowOSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLmggKFJFR19DTEFTU19DT05URU5UUyk6IEZpeCBwcm9ibGVtcyB3aXRoIGxhc3Qgd29yZCBvZgorCXJlZ2lzdGVyIHNldCBpbiBzb21lIGNsYXNzZXMuCisKKwkqIGEyOWsuaCAoTUVNT1JZX01PVkVfQ09TVCk6IE5ldyBtYWNyby4KKworVGh1IEphbiAxMyAwNTo0MjozMCAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogY29uZmlnLnN1YjogRml4IHR5cG8gaW4gLWhpdXgqIGNhc2UuCisKK1dlZCBKYW4gMTIgMTM6MjU6MTIgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfcmFuZ2VfdHlwZSk6ICBJZiB0aGUgcmFuZ2UgaGFzIGEgYmFzZSB0eXBlCisJKFRSRUVfVFlQRSksIGVtaXQgaXQsIGV2ZW4gaWYgdGhhdCBpcyBzb21lIG90aGVyIGludGVnZXIgdHlwZS4KKworV2VkIEphbiAxMiAwNjowMjoyMyAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLmggKE1BU0sgYW5kIFRBUkdFVCk6IENoYW5nZSBQT1dFUlBDU1FSIHRvIFBQQ0ZQWCB0bworCWRlc2NyaWJlIGJvdGggZnNxcnQgYW5kIGZzZWwuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IHBvd2VycGM2NCBpbXBsaWVzIHBwY2ZweC4KKwkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IENoYW5nZSBQT1dFUlBDU1FSIHRvIFBQQ0ZQWC4KKwkqIHJzNjAwMC5tZCAoc3FydHNmMiwgc3FydGRmMik6IENoYW5nZSBQT1dFUlBDU1FSIHRvIFBQQ0ZQWC4KKwkobWF4c2YzLCBtaW5zZjMsIG1heGRmMywgbWluZGYzKTogTmV3IHBhdHRlcm5zIHVzaW5nIGZzZWwgaW5zdHJ1Y3Rpb24uCisKK1R1ZSBKYW4gMTEgMTk6MTQ6MzEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5jIChvdXRwdXRfcHJvbG9nKTogVXBkYXRlIGRlYnVnIHJlZyBtYXAgd2hlbiAKKwl3ZSBoYXZlIC1ta2VybmVsLXJlZ2lzdGVycy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCB0cnV0aF9hbmRvcik6IERvbid0IGFwcGx5IGRpc3RyaWJ1dGl2ZQorCWxhdyB3aGVuIGl0IHdvdWxkIGNoYW5nZSBldmFsdWF0aW9uIG9yZGVyLgorCUNsZWFuIHVwIGNvZGUgYSBiaXQgdG8gaW1wcm92ZSBmbG93LgorCitNb24gSmFuIDEwIDE5OjM3OjI3IDE5OTQgIERhdmlkIFJvYmluc29uIChkcnRyQG1haWwuYXN0LmNhbS5hYy51aykKKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogQ2FsbCBnZW5fcmVhbHBhcnQgYW5kIGdlbl9pbWFncGFydAorCWluc3RlYWQgb2YgZ2VuX2xvd3BhcnQgYW5kIGdlbl9oaWdocGFydC4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IExpa2V3aXNlLgorCSogb3B0YWJzLmM6IFJlbW92ZSByZWR1bmRhbnQgcHJvdG90eXBlIGZvciBnZW5faGlnaHBhcnQuCisKK01vbiBKYW4gMTAgMTk6MTQ6MDcgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBqdW1wLmMgKGNvbXBhcmlzb25fZG9taW5hdGVzX3ApOiBORSBpcyBkb21pbmF0ZWQgYnkgTFQsIEdULCBMVFUKKwlhbmQgR1RVLgorCitNb24gSmFuIDEwIDE5OjA2OjU3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl97cmVhbCxpbWFnfXBhcnQpOiBFeHRyYWN0IHZhbHVlIGZyb20KKwlDT05DQVQgZGlyZWN0bHkuCisJKGdlbl9sb3dwYXJ0X2NvbW1vbiwgZ2VuX2hpZ2hwYXJ0KTogRG9uJ3QgZG8gaXQgaGVyZS4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uKTogRG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBDQzAKKwlpbiBhZGRpdGlvbiB0byBNT0RFX0NDIHZhbHVlcy4KKworCSogZXhwci5jIChwcm90ZWN0X2Zyb21fcXVldWUpOiBJZiAoTUVNIChRVUVVRUQgLi4uKSksIG1vZGlmeSBhCisJbmV3IE1FTSBpbnN0ZWFkIG9mIHRoZSBvbmUgd2Ugd2VyZSBwYXNzZWQuCisKKwkqIGkzODYvbGludXguaDogVXBkYXRlIGJhbm5lciwgcmVmb3JtYXQgY29tbWVudHMuCisJKFNUQVJURklMRV9TUEVDLCBHUExVU1BMVVNfSU5DTFVERV9ESVIpOiBObyBsb25nZXIgY29uZGl0aW9uYWwKKwlvbiBDUk9TU19DT01QSUxFUi4KKwkqIE1ha2VmaWxlLmluIChnY2MubywgY2NjcC5vKTogTm8gbG9uZ2VyIGRlZmluZSBUT09MRElSLgorCisJKiByZWdjbGFzcy5jIChnbG9iYWxpemVfcmVnKTogTmV3IGZ1bmN0aW9uLgorCShpbml0X3JlZ19zZXRzXzEpOiBEb24ndCBoYW5kbGUgZ2xvYmFsIHJlZ3MgaGVyZS4KKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogQ2FsbCBnbG9iYWxpemVfcmVnLCBub3QgaW5pdF9yZWdfc2V0c18xLgorCisJKiBhMjlrLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0YnKTogSWYgd2UgaGF2ZSB0byBkbyB0aGUgbGFzdAorCXByb2xvZyBpbnNuLCBnaXZlIHRoYXQgcHJpb3JpdHkgZm9yIGFuIHVuZmlsbGVkIGRlbGF5IHNsb3QuCisKKwkqIGZ1bmN0aW9uLmMgKHByZXNlcnZlX3J0bF9leHByX3Jlc3VsdCk6IE5ldyBmdW5jdGlvbi4JCisJKiBleHByLmMgKGV4YW5kX2V4cHIsIGNhc2UgUlRMX0VYUFIpOiBDYWxsIGl0LgorCitNb24gSmFuIDEwIDEzOjQzOjA0IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogc2NoZWQuYyAobmV3X2luc25fZGVhZF9ub3Rlcyk6IENvbXBhcmUgcmVnaXN0ZXJzIHdpdGggcnR4X2VxdWFsX3AuCisKKwkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSwgc3RtcC1maXhpbmMsIGRlZHVjZWQuaCwgc3RtcC1maXhwcm90byk6CisJRXhlY3V0ZSBzaGVsbCBzY3JpcHRzIHdpdGggJChTSEVMTCkuCisJKiBjb25maWcveC1seW54IChTSEVMTCk6IERlZmluZSB0byAvYmluL2Jhc2guCisKK1N1biBKYW4gIDkgMjI6MzE6MDAgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChzcGVjaWFsIGluZGV4ZWQgZnBzdG9yZXMpOiBGaXggYXNzb3J0ZWQgdHlwb3MuCisKK1N1biBKYW4gIDkgMDQ6MzQ6MTcgMTk5NCAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBqdW1wLmMgKGZvbGxvd19qdW1wcyk6IERvbid0IGZvbGxvdyB0YWJsZWp1bXBzLgorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1oZWFkZXJzLWNwaW8pOiBSdW4gY3BpbyBpbiBpbmNsdWRlLWRpci4KKworU2F0IEphbiAgOCAxNDo1NDowNiAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKToganVtcF9vcHRpbWl6ZSBjYW4gY2hhbmdlIG1heF9yZWdfbnVtCisJc28gcmVydW4gcmVnX3NjYW4gYmVmb3JlIGNhbGxpbmcgY3NlX21haW4uCisKK0ZyaSBKYW4gIDcgMjA6MzQ6MTQgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGFkZGVyLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZy9hbHBoYS9hbHBoYS5oIChSVFhfQ09TVFMpOiBSZXR1cm4gYWN0dWFsIGNvc3RzIGZvcgorCW11bHRpcGxpY2F0aW9uLgorCitUdWUgSmFuICA0IDEzOjQ0OjA5IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBIYW5kbGUgdmFyaWFibGVzIGF0IHplcm8gb2Zmc2V0IGZyb20KKwlmcmFtZSBwb2ludGVyLgorCitUdWUgSmFuICA0IDA3OjM1OjA1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuYyAoc3Vic3RpdHV0ZV9leHByKTogRG9uJ3QgYWJvcnQgZm9yIFJUTF9FWFBSIGFuZAorCVNBVkVfRVhQUjsganVzdCBkbyBub3RoaW5nLgorCitUdWUgSmFuICA0IDAwOjUyOjE1IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoYW5kc2kzKTogVXNlICI/IiBpbnN0ZWFkIG9mICIhIiB0byBhdm9pZCBsb3NpbmcKKwlpbiBzb21lIGNhc2VzLgorCitNb24gSmFuICAzIDE2OjU5OjM0IDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBqdW1wLmMgKHRocmVhZF9qdW1wcyk6IERvbid0IHRocmVhZCB0byBsb29wIGxhYmVsOworCWNyZWF0ZSBuZXcgbGFiZWwgYmVmb3JlIGxvb3AgaW5zdGVhZC4KKwkodGhyZWFkX2p1bXBzKTogUmVuYW1lIGFyZ3VtZW50IGB2ZXJib3NlJyAtPiBgZmxhZ19iZWZvcmVfanVtcCcuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFBhc3MgMSBmb3IgZmxhZ19iZWZvcmVfanVtcAorCWZpcnN0IHRpbWUgd2UgY2FsbCB0aHJlYWRfanVtcHMuCisKKwkqIGMtdHlwZWNrIChidWlsZF9iaW5hcnlfb3AsIGNhc2UgKl9ESVZfRVhQUik6IFVzZSBzYW1lIHNob3J0ZW4KKwljb25kaXRpb24gYXMgZm9yICpfTU9EX0VYUFIuCisKK01vbiBKYW4gIDMgMDg6MDA6MTYgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jICh0cnV0aF92YWx1ZV9wKTogTmV3IGZ1bmN0aW9uLgorCShmb2xkKTogVXNlIGl0IHRvIHNlZSB3aGVuIHdlIHNob3VsZCBtYWtlIGEgVFJVVEhfe0FORCxPUn1fRVhQUi4KKwkoZm9sZCwgY2FzZSBUUlVUSF97QU5ELE9SLEFORElGLE9SSUZ9X0VYUFIpOiBVc2UgZGlzdHJpYnV0aXZlCisJbGF3IG9uIGV4cHJlc3Npb25zIHN1Y2ggYXMgKEEgJiYgQikgfHwgKEEgJiYgQykuCisKK1N1biBKYW4gIDIgMDg6MTQ6MzggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uKTogQ29ycmVjdCBkZWNsYXJhdGlvbiBvZgorCXZhcmlhYmxlcyBob2xkaW5nIHBhcnRzIG9mIGNvbnN0YW50cy4KKworRnJpIERlYyAzMSAwNjoyNzo1NyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0b3BsZXYuYyAobWFpbik6IFR1cm4gb24gLWZvbWl0LWZyYW1lLXBvaW50ZXIgaWYgaXQgaXMgc2FmZS4KKwlBZGQgLU8zLCB3aGljaCB0dXJucyBvbiAtZmlubGluZS1mdW5jdGlvbnMuCisJKiBhMjlrLmgsIGFscGhhLmgsIGNsaXBwZXIuaCwgaDgzMDAuaCwgbTg4ay5oLCBwYS5oLCByb21wLmgsIHJzNjAwMC5oOgorCURlZmluZSBDQU5fREVCVUdfV0lUSE9VVF9GUDsgZGVsZXRlIE9QVElNSVpBVElPTl9PUFRJT05TLgorCSogc2guaCwgc3BhcmMuaDogTGlrZXdpc2UuCisJKiBhcm0uaDogRGVsZXRlIE9QVElNSVpBVElPTl9PUFRJT05TLgorCSogaDgzMDAuaDogRGVmaW5lIE5PX0ZVTkNUSU9OX0NTRSBhbmQgQ0FOX0RFQlVHX1dJVEhPVVRfRlA7CisJZGVsZXRlIE9WRVJSSURFX09QVElPTlMuCisJKiBpOTYwLmggKE9QVElNSVpBVElPTl9PUFRJT05TKTogSnVzdCB0dXJuIG9uIG1hY2hpbmUtc3BlY2lmaWMgb3B0cy4KKwkoQ0FOX0RFQlVHX1dJVEhPVVRfRlApOiBEZWZpbmUuCisJKiBtaXBzLmggKENBTl9ERUJVR19XSVRIT1VUX0ZQKTogRGVmaW5lLgorCShPUFRJTUlaQVRJT05fTEVWRUxTKTogSnVzdCBzZXQgTUFTS19HUE9QVC4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uKTogUmV3cml0ZSBhbmQgc2ltcGxpZnkuCisJQWRkIGNhc2Ugd2hlbiB3ZSBjYW4gc2ltcGxpZnkgQS1CIGZvciBjb21wYXJlIG9mIEEgYW5kIEIuCisKKwkqIGNvbWJpbmUuYyAoYWRkZWRfbGlua3NfaW5zbik6IE5ldyB2YXJpYWJsZS4KKwkoZGlzdHJpYnV0ZV9saW5rcyk6IFNldCBpdC4KKwkoaWZfdGhlbl9lbHNlX2NvbmQpOiBOZXcgZnVuY3Rpb24uCisJKHRyeV9jb21iaW5lKTogUmV0dXJuIGFkZGVkX2xpbmtzX2luc24gaWYgaXQgaXMgZWFybGllciB0aGFuIHdoYXQKKwl3ZSB3b3VsZCBvdGhlcndpc2UgcmV0dXJuLgorCShzdWJzdCk6IEdlbmVyYWxpemUgKE9QIFggWSkgdG8gY2FsbCBpZl90aGVuX2Vsc2VfY29uZAorCWluc3RlYWQgb2Ygb25seSBjaGVja2luZyBmb3IgYW4gZXhwbGljaXQgSUZfVEhFTl9FTFNFLgorCShzdWJzdCwgY2FzZSBJRl9USEVOX0VMU0UpOiBXaGVuIGNvbnZlcnRpbmcgdG8gYSBNVUxULCBzaW1wbGlmeQorCXRoZSBNVUxUIGJlZm9yZSBwdXR0aW5nIGl0IGludG8gT1AuCisJKHN1YnN0LCBjYXNlIEFORCk6IERvbid0IG1ha2UgSUZfVEhFTl9FTFNFIGhlcmU7IG5vdyBtYWRlIGluCisJZ2VuZXJpYyBjYXNlIGVhcmxpZXIuCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSk6IEFkZCBuZXcgcGFybSBKVVNUX1NFTEVDVDsgYWxsCisJY2FsbGVycyBjaGFuZ2VkLgorCitXZWQgRGVjIDI5IDE4OjA1OjAwIDE5OTMgIExlb25pZCBCYXJheiAgKGxiYXJhekBpaWwuaW50ZWwuY29tKQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgUExVU19FWFBSKTogQWRkIGEgbWlzc2luZyB0ZXN0IG9mIAorCWZsYWdfZmFzdF9tYXRoLgorCitXZWQgRGVjIDI5IDA2OjUyOjA3IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIE1VTFQpOiBEb24ndCBjb252ZXJ0CisJdG8gQVNISUZUIGlmIHN0aWxsIGdlbmVyYXRpbmcgUlRMLgorCitNb24gRGVjIDI3IDIyOjE1OjU1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IERvIG5vdCBmaXggPHN1bmRldi9pcGlfZXJyb3IuaD4sIGJlY2F1c2UgU3VuT1MKKwlzZWQgY2FuIG5vdCBoYW5kbGUgdGhlIHZlcnkgbGFyZ2UgbWFjcm8gaXQgY29udGFpbnMuCisKK01vbiBEZWMgMjcgMDY6Mjg6NDggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEubWQgKG1heHNmMywgbWluc2YzKTogQ29ycmVjdCBudW1lcm91cyBlcnJvcnMuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgTUlOVVMpOiBBbGxvdyBzb21lIEZQIHNpbXBsaWZpY2F0aW9ucyAKKwlpZiAtZmZhc3QtbWF0aC4KKwkocmV2ZXJzaWJsZV9jb21wYXJpc29uX3ApOiBGUCBjb21wYXJpc29ucyByZXZlcnNpYmxlIHdpdGggLWZmYXN0LW1hdGguCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgZm9sZF9ydHgpOiBBbGxvdyBzb21lIEZQCisJc2ltcGxpY2F0aW9ucyB3aXRoIC1mZmFzdC1tYXRoLgorCShzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbik6IEZQIGNvbXBhcmlzb25zIGNhbiBiZSByZXZlcnNlZAorCWlmIC1mZmFzdC1tYXRoIGlzIHNwZWNpZmllZC4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFNpbXBsaWZ5IG1vcmUgRlAgb3BzIGlmIC1mZmFzdC1tYXRoLgorCSoganVtcC5jIChjYW5fcmV2ZXJzZV9jb21wYXJpc29uX3ApOiBSZXR1cm4gMSBpZiAtZmZhc3QtbWF0aC4KKwkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IENhbiByZXZlcnNlIGNvbXBhcmlzb24gaWYgLWZmYXN0LW1hdGguCisKKwkqIGFscGhhLmMgKGlvcl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGlvcl9vcGVyYW5kLgorCSogYWxwaGEubWQgKGlvcmRpMyk6IFVzZSBvcm5vdCBmb3Igc29tZSBjb25zdGFudCBjYXNlcy4KKworU3VuIERlYyAyNiAwNzo1NToyNiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGRvX3RhYmxlanVtcCk6IENhbGwgZW1pdF9jbXBfaW5zbiB3aXRoIGxpa2VseS1jb25zdGFudAorCWFzIHNlY29uZCBvcGVyYW5kLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIGRlbGV0aW5nIGFuIGluc24gYWZ0ZXIgYSBqdW1wLAorCXVwZGF0ZSByZWFsbGFiZWxwcmV2IHNpbmNlIGl0IG1pZ2h0IHBvaW50IHRvIHRoZSBkZWxldGVkIGluc24uCisKKwkqIGNzZS5jIChjb3VudF9yZWdfdXNhZ2UpOiBEb24ndCBjb3VudCBhIHJlZ2lzdGVyIHVzZWQgd2l0aGluCisJYSBTRVQgdGhhdCBzZXRzIGl0LgorCShkZWxldGVfZGVhZF9mcm9tX2NzZSk6IFBhc3MgbmV3IHBhcm0gdG8gY291bnRfcmVnX3VzYWdlLgorCisJKiBjc2UuYyAoZm9sZF9ydHgsIGNhc2UgUExVUyk6IElmIHdlIGhhdmUgKHBsdXMgQSBCKSwgQSBpcworCWVxdWl2YWxlbnQgdG8gYSBuZWdhdGl2ZSBjb25zdGFudCwgYW5kIHRoZSBuZWdhdGVkIGNvbnN0YW50IGlzIGluCisJcmVnaXN0ZXIsIGNvbnZlcnQgdG8gKG1pbnVzIEEgQykgd2hlcmUgQyBpcyB0aGUgcmVnaXN0ZXIgY29udGFpbmluZworCXRoZSBuZWdhdGVkIGNvbnN0YW50LgorCitTYXQgRGVjIDI1IDIzOjQ3OjAxIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogRGVmaW5lLgorCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogTGlrZXdpc2UuCisJKERCWF9GVU5DVElPTl9GSVJTVCk6IExpa2V3aXNlLgorCisJKiBwYS5oIChGUkFNRV9QT0lOVEVSX1JFR05VTSwgQVJHX1BPSU5URVJfUkVHTlVNKTogQ2hhbmdlIHRvICVyMworCWZvciBjb21wYXRhYmlsaXR5IHdpdGggSFAgY29tcGlsZXJzLgorCisJKiBwYS5oIChSRUFET05MWV9EQVRBX1NFQ1RJT04pOiBSZS1lbmFibGUgdXNlIG9mICRMSVQkLgorCitTYXQgRGVjIDI1IDA2OjA1OjI4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9yZWdfcnR4KTogT25seSBjbGVhciBwYXJ0IG9mIGFycmF5cyB3ZSBhcmVuJ3QKKwlnb2luZyB0byBjb3B5IGludG8uCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09OU1RSVUNUT1IpOiBJZiBoYXZlIGEgdGFyZ2V0LAorCWRvbid0IGJ1aWxkIGNvbnN0cnVjdG9yIGludG8gbWVtb3J5LgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFSUkFZX1JFRik6IFJlbW92ZSB1c2VzIG9mICpfdHlwZV9ub2RlCisJYW5kIHNpbXBsaWZ5IGZvbGRpbmcgYSByZWZlcmVuY2UgdG8gYSBjaGFyYWN0ZXIgaW4gYSBTVFJJTkdfQ1NULgorCisJKiBhMjlrLmMsIGEyOWsuaDogUmVuYW1lIFJfQUNDIHRvIFJfQUNVIHRvIG5vdCBjb25mbGljdCB3aXRoIGFjY2Vzcy5oLgorCisJKiBtNjhrL2NyZHMuaCAoSEFWRV9WUFJJTlRGKTogRGVsZXRlIGZyb20gaGVyZS4KKwkqIG02OGsveG0tY3Jkcy5oIChIQVZFX1ZQUklOVEYpOiBEZWZpbmUuCisJKiBtNjhrL2RweDIuaCAoVVNHKTogRGVsZXRlIGZyb20gaGVyZSAoYWxyZWFkeSBpbiB4bS5oIGZpbGUpLgorCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUsIHByaW50X25vZGVfYnJpZWYpOiBTYXkgc29tZXRoaW5nCisJd2hlbiBUUkVFX0NPTlNUQU5UX09WRVJGTE9XIGlzIHNldC4KKworCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBGaXggZXJyb3IgaW4gcHJldmlvdXMgY2hhbmdlLgorCisJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzLCBub256ZXJvX2JpdHMpOgorCUZpeCBlcnJvcnMgaW4gU0hPUlRfSU1NRURJQVRFU19TSUdOX0VYVEVORCBjb2RlLgorCisJKiBhbHBoYS5oIChGVU5DVElPTl9BUkcpOiBQYXNzIGNvbXBsZXggZmxvYXQgaW4gZmxvYXQgcmVncy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIEVRX0VYUFIsIE5FX0VYUFIpOiBJZiBDT01QTEVYX1RZUEUKKwlhbmQgYXQgbGVhc3Qgb25lIGFyZyBpcyBhIENPTVBMRVhfRVhQUiwgc3BsaXQgaW50byBhIGxvZ2ljYWwKKwlvcGVyYXRpb24gb24gdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cy4KKworCSogYy10eXBlY2suYyAoY29tbW9uX3R5cGUpOiBGb3IgQ09NUExFWF9UWVBFLCByZXR1cm4gb25lIG9mIHRoZQorCW9yaWdpbmFsIHR5cGVzIGlmIGlzIHRoZSBkZXNpcmVkIGNvbW1vbiB0eXBlLgorCShidWlsZF9iaW5hcnlfb3ApOiBVc2UgU0hPUlRfQ09NUEFSRSBjb2RlIGV2ZW4gaWYgY29tcGxleC4JCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFByb3Blcmx5IHZhbGlkYXRlIF9fY29tcGxleF9fIGFuZAorCWNyZWF0ZSB0aGUgdmFyaW91cyBraW5kcyBvZiBjb21wbGV4IGludGVnZXIgdHlwZXMuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb25zKTogQ2hlY2sgdGhhdCBvcGVyYXRpb25zIHJlYWxseQorCWFyZSBkb3VibGUtd29yZCBiZWZvcmUgZG9pbmcgdGhlbS4KKworRnJpIERlYyAyNCAxNToyMToxNiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAocmVhZF9uYW1lX21hcCwgcmVhZF9maWxlbmFtZV9zdHJpbmcsIG9wZW5faW5jbHVkZV9maWxlKToKKwlOZXcgZnVuY3Rpb25zLgorCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBOZXcgbWVtYmVyczogbmFtZV9tYXAsIGdvdF9uYW1lX21hcC4KKwkobWFpbiwgcGF0aF9pbmNsdWRlLCBkb19pbmNsdWRlLCBkb19vbmNlKTogU2V0IGdvdF9uYW1lX21hcC4KKwkoZG9faW5jbHVkZSk6IFVzZSBvcGVuX2luY2x1ZGVfZmlsZSBpbnN0ZWFkIG9mIG9wZW4uICBBZGQgbmV3CisJcGFyYW1ldGVyIHRvIGxvb2t1cF9pbXBvcnQgY2FsbHMuCisJKGxvb2t1cF9pbXBvcnQpOiBOZXcgcGFyYW1ldGVyIHNlYXJjaHB0ci4gIENhbGwgb3Blbl9pbmNsdWRlX2ZpbGUKKwlpbnN0ZWFkIG9mIG9wZW4uCisKKwkqIGV4cHIuYyAoY29udmVydF9tb2Rlcyk6IENhbid0IHRydW5jYXRlIFJFRyB3aXRoIGdlbl9sb3dwYXJ0IGlmCisJVFJVTFlfTk9PUF9UUlVOQ0FUSU9OIGRvZXNuJ3QgYWxsb3cgaXQuCisKK0ZyaSBEZWMgMjQgMTQ6MzY6NTMgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFNldCAiY3NlX2p1bXBzX2FsdGVyZWQiIHdoZW4gY29sbGFwc2luZworCWEgc3dpdGNoIHN0YXRlbWVudCBpbnRvIGFuIHVuY29uZGl0aW9uYWwganVtcC4KKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogUmVydW4ganVtcF9vcHRpbWl6ZQorCWJlZm9yZSB0aGUgc2Vjb25kIENTRSBwYXNzLgorCitGcmkgRGVjIDI0IDA1OjM0OjM4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIFBMVVMsIE1JTlVTKToKKwlTaW1wbGlmeSBzdWNoIHRoaW5ncyBhcyAoWCA+PiAxKSAtIFguCisKKwkqIGFscGhhLm1kIChkZWZpbmVfYXR0ciB0eXBlKTogQWRkIG5ldyB0eXBlIElTVUJSLgorCShkaXZtb2QpOiBTZXQgdG8gdHlwZSBJU1VCUi4KKwkqIGFscGhhLmMgKG91dHB1dF9wcm9sb2cpOiBOZWVkIEdQIGlmIHR5cGUgSVNVQlIuCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCwgZmluZF9yZWxvYWRzKTogUmVsb2FkIGluc2lkZSBhIHBhcmFkb3hpY2FsCisJU1VCUkVHIG9mIE1FTSBleGNlcHQgZG9uJ3QgZm9yY2UgYSByZWxvYWQgdW5sZXNzIHRoZSBpbm5lciBtb2RlCisJaXMgbmFycm93ZXIgdGhhbiBCSUdHRVNUX0FMSUdOTUVOVC4KKworCSogYy10eXBlY2suYyAoY2hlY2tfaW5pdF90eXBlX2JpdGZpZWxkcyk6IENoZWNrIHJlY3Vyc2l2ZWx5IGluc2lkZQorCWFycmF5cyBhbmQgcmVjb3Jkcy4KKworCSogYy1wYXJzZS5pbiAoYXR0cmliKTogQWxsb3cgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiBjb25zdGFudHMuCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZSk6IFZlcmlmeSB0aGF0IGFsaWdubWVudCBhbmQgZm9ybWF0CisJYXJndW1lbnQgbnVtYmVycyBhcmUgYWxsIGludGVnZXIgY29uc3RhbnRzLgorCUNvbnRpbnVlIG9uIHRvIG5leHQgYXR0cmlidXRlIGlmIG9uZSBpcyBpbiBlcnJvci4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBDYW4gZm9sZCBtdWx0aS13b3JkCisJb3BlcmF0aW9ucyB3aGVuIGZpcnN0IGlzIENPTlNUX0lOVC4KKwkoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgY2FzZSBQTFVTLCBNSU5VUyk6IERvbid0IGNhbGwKKwlwbHVzX2NvbnN0YW50IHdoZW4gT1AwIGlzIFZPSURtb2RlLgorCisJKiBjLXR5cGVjay5jIChwb3BfaW5pdF9sZXZlbCk6IERvbid0IGFib3J0IGlmIGhhdmUgaW5jb21wbGV0ZSBhcnJheQorCXR5cGUgaW5zaWRlIHNvbWUgb3RoZXIgdHlwZS4KKworVGh1IERlYyAyMyAyMjowNjoyMSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSoganVtcC5jICh0aHJlYWRfanVtcHMpOiBEZWxldGUgcmVkdW5kYW50IGxvb3AgdGVybWluYXRpb24gdGVzdC4KKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24sIGNhc2UgKlNISUZUKik6IFJlZHVjZSBhcmcxIGFzCisJZGVmaW5lZCBieSBTSElGVF9DT1VOVF9UUlVOQ0FURUQuCisKKwkqIGNvbmZpZy9wYS9wYS5jIChTZXZlcmFsIHBsYWNlcyk6IERlY2xhcmUgdmFsdWVzIGZyb20gSU5UVkFMKHgpIGFzCisJSE9TVF9XSURFX0lOVC4KKwkodWludDMyX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9ibG9ja19tb3ZlKTogQ2hhbmdlIHVucm9sbCB0aHJlc2hvbGQgZnJvbSA2NCB0byAzMi4KKwkoY29tcHV0ZV9tb3ZzdHJzaV9sZW5ndGgpOiBDb3JyZXNwb25kaW5nIGNoYW5nZS4KKwkocHJpbnRfb3BlcmFuZCk6IERvbid0IGNhbGwgZGVidWdfcnR4LCBqdXN0IGFib3J0LgorCisJKiBjb25maWcvcGEvcGEuaCAoRlVOQ1RJT05fSU5DT01JTkdfQVJHKTogRGVsZXRlIGRlZmluaXRpb24uCisJKFJUWF9DT1NUUykgW1BMVVNdOiBSZXdyaXRlLgorCShvdXRwdXRfc2NjX2luc24pOiBEZWxldGUuCisJKG91dHB1dF9mbG9hdHNpc2YyKTogRGVsZXRlLgorCShvdXRwdXRfZmxvYXRzaWRmMik6IERlbGV0ZS4KKwkoUFJFRElDQVRFX0NPREVTKTogRGVmaW5lLCBidXQgbGVhdmUgd2l0aGluICNpZiAwIGZvciBub3cuCisKKwkqIGNvbmZpZy9wYS9wYS5tZCAoaW9yc2NjKTogTmV3IHJlY29nbml6ZXIuCisJMiBuZXcgcmVjb2duaXplcnMgZm9yIHN1YjtzdWJiLiAgMSBuZXcgcmVjb2duaXplciBmb3IgYWRkaTtzdWJiLgorCShtb3ZzdHJzaSk6IFJlbW92ZSBwcmVkaWNhdGVzLiAgU2V0IGlubGluZSB0aHJlc2hvbGQgdG8gOC4KKwkodW11bHNpZGkzKTogQ2hhbmdlIHByZWRpY2F0ZXMgdG8gbm9uaW1tZWRpYXRlX29wZXJhbmQuCisJTmV3IHJlY29nbml6ZXIgZm9yIG11bHRpcGx5LWJ5LWltbWVkaWF0ZS4KKwkoYW5kc2kzKTogQWRkIGAhJyBmb3IgcmVnaXN0ZXIgYWx0ZXJuYXRpdmUuCisJKHZkZXBpX2lvciwgdmRlcGlfYW5kKTogTmV3IHJlY29nbml6ZXJzLgorCSh2ZXh0cnUgcngsMSxyeSwgdmV4dHJzIHJ4LDEscnkpOiBOZXcgcmVjb2duaXplcnMuCisKKwkqIGNvbmZpZy9wYS9wYS5jIChpbml0aWFsaXplX3BpYyk6IERlbGV0ZS4KKwkoZmluYWxpemVfcGljKTogVXNlIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIHJhdGhlciB0aGFuIDE5LgorCSogY29uZmlnL3BhL3BhLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTmV2ZXIgbWFrZQorCVBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGZpeGVkLgorCShJTklUSUFMSVpFX1BJQyk6IERlbGV0ZS4KKwkqIGNvbmZpZy9wYS9wYS5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IElmIFBJQywgZW1pdCBVU0UgZm9yIGZvcgorCVBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNLiAgVXNlIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIHJhdGhlciB0aGFuIDE5LgorCitUaHUgRGVjIDIzIDE4OjUxOjEyIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogbG9jYWwtYWxsb2MuYyAob3B0aW1pemVfcmVnX2NvcHlfMSk6IEFmdGVyIGRlY3JlYXNpbmcgc3JlZ25vJ3MKKwlyZWdfbGl2ZV9sZW5ndGgsIGNvcnJlY3QgaXQgaWYgaXQgaXMgbm93IG9idmlvdXNseSB0b28gc21hbGwuCisKKwkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRG9uJ3QgcmV2ZXJzZSBsb29wIGlmIHRoZXJlIGlzIGEKKwlzaW5nbGUgbWVtb3J5IHN0b3JlIHRvIGFuIGludmFyaWFudCBhZGRyZXNzLgorCisJKiBnY2MuYyAodHJhbnNsYXRlX29wdGlvbnMpOiBTa2lwIGFyZ3VtZW50cyBvZiAtQiwgLWIsIC1WLCAteCwKKwlhbmQgLVhsaW5rZXIgb3B0aW9ucy4KKworCSogY29uZmlndXJlIChyaXNjb3MtKi0qKTogVXNlIGZpeGluY2x1ZGVzIGluc3RlYWQgb2YgZml4aW5jLm1pcHMuCisJKiBmaXhpbmMubWlwczogRGVsZXRlIGZpbGUuCisJKiBmaXhpbmNsdWRlczogTWVyZ2UgaW4gY2hhbmdlcyBmcm9tIGZpeGluYy5taXBzLiAgRml4IGlkZW50aWZpZXJzCisJaG9zdF9taXBzLCBtaXBzLCBNSVBTRVtMQl0sIFJbMzRdMDAwLCBTWVNUWVBFXyouICBGaXggc2l6ZV90IHVzZXMKKwlpbiBzdGRkZWYuaCwgbWVtb3J5LmgsIHVuaXN0ZC5oLiAgRml4IC8qKi8gaW4gYnNkNDMvYnNkNDNfLmguCisKK1RodSBEZWMgMjMgMTg6Mjg6MDIgMTk5MyAgUmljaGFyZCBFYXJuc2hhdyAgKHJ3ZTExQHN0aWN0ZS5jbC5jYW0uYWMudWspCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCk6IFByZXNlcnZlIHVzZWZ1bCBzdWItZXhwcmVzc2lvbnMgd2hlbgorCSBleHBhbmRpbmcgYSBzeW50aGVzaXplZCBtdWx0LgorCitUaHUgRGVjIDIzIDE4OjIxOjM0IDE5OTMgIFJ1c3MgTm9zZXdvcnRoeSAgKGpybm9zZXdvQHJhbC5ycGkuZWR1KQorCisJKiBjb25maWd1cmUgKG02OGstd3JzLXZ4d29ya3MpOiBOZXcsIHNhbWUgYXMgbTY4ay1zdW4tc3Vub3MqLgorCitUaHUgRGVjIDIzIDA5OjAzOjMwIDE5OTMgIFBoaWwgTmVsc29uICAocGhpbEBjcy53d3UuZWR1KQorCisJKiBuczMyay5oIChBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBVc2UgLmxvbmcsIG5vdCAuZG91YmxlLgorCitUaHUgRGVjIDIzIDA3OjMwOjI0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChsaWJnY2MuYSk6IEFsbG93IGNobW9kIG9mIHRtcGNvcHkgZGlyZWN0b3J5IHRvCisJZmFpbCBzaW5jZSBpdCBjYW4gYmUgZW1wdHkuCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycywgZ25hdDEpOiBEb24ndCB3cml0ZSAtZ25hdGIuCisKKwkqIGMtY29tbW9uLmMgKFRfU1QpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBNSU5VU19FWFBSKTogV2hlbiBleHBhbmRpbmcgYW4KKwlpbml0aWFsaXplciwgdXNlIHBsdXNfY29uc3RhbnQgYXMgYXBwcm9wcmlhdGUuCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBXaGVuIHNlYXJjaGluZyBjb21waWxlciBkaXJlY3RvcmllcywgCisJbG9vayBmb3IgbGRfc3VmZml4LCBub3QgZnVsbF9sZF9zdWZmaXguCisKKwkqIGEyOWsvdW5peC5oIChUQVJHRVRfREVGQVVMVCk6IFVwZGF0ZSB0byB1c2UgbmV3IHZhbHVlcy4KKworCSogTWFrZWZpbGUuaW4gKEdDQ19DRkxBR1MpOiBBZGQgLUkuL2luY2x1ZGUuCisKK1RodSBEZWMgMjMgMDY6NTc6MzkgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogTWFrZWZpbGUuaW4gKEVOUVVJUkVfQ0ZMQUdTKTogT21pdCAtRE5PX1NURERFRi4KKwkoVVNFX0FMTE9DQSk6IEFsbG93ICR7QUxMT0NBfSB0byBiZWdpbiB3aXRoIGEgZGFzaC4KKwkoT0JKQywgT0JKRUNUSVZFLUMpOiBEZXBlbmQgb24gb2JqYy1ydW50aW1lLgorCShvYmpjLWhlYWRlcnMpOiBNYWtlIGluY2x1ZGUgZGlyZWN0b3J5IGlmIG1pc3NpbmcuCisKKwkqIHhtLXN2cjMuaCAoSEFWRV9WUFJJTlRGKTogRGVmaW5lLgorCisJKiBjc2UuYyAoZGVsZXRlX3JlZ19lcXVpdik6IERvbid0IHJlZmVyZW5jZSBlbGVtZW50cyBvZgorCVJFR197TkVYVCxQUkVWfV9FUVYgdGhhdCBhcmUgbm90IGRlZmluZWQuCisKK1dlZCBEZWMgMjIgMTQ6MjE6NDkgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogRm9yIHBhcmFtZXRlciBwYXNzZWQgYnkgaW52aXNpYmxlCisJcmVmZXJlbmNlLCB1c2UgREVDTF9JTkNPTUlOR19SVEwgaWYgREVDTF9SVEwgaXMgYSBwc2V1ZG8tcmVnIGFkZHJlc3MuCisKKwkqIHhjb2Zmb3V0LmggKERCWF9GSU5JU0hfU1lNQk9MKTogR2V0IHZhcmlhYmxlIG5hbWUgZnJvbSBERUNMX1JUTAorCWluc3RlYWQgb2YgZnJvbSBERUNMX0FTU0VNQkxFUl9OQU1FLgorCisJKiBzY2hlZC5jIChwcmlvcml0eSk6IEhhbmRsZSBJTlNOX0RFTEVURURfUCBpbnNucywgaW4gYWRkaXRpb24gdG8KKwlpbnNucyB3aGljaCB3ZXJlIGRlbGV0ZWQgYnkgYmVpbmcgdHVybmVkIGludG8gbm90ZXMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIE5FR0FURV9FWFBSIGNhc2UpOiBVc2Ugc3VidGFyZ2V0IGluCisJcmVjdXJzaXZlIGNhbGwsIG5vdCB0YXJnZXQuCisKKwkqIGZpeHByb3RvIChyZXF1aXJlZF91bmlzdGRfaCk6IERlbGV0ZSBnZXRncm91cHMgZnJvbSBsaXN0LgorCisJKiBmaXgtaGVhZGVyLmMgKG1pc3NpbmdfZXh0ZXJuX0NfY291bnQpOiBJZmRlZiBvdXQuCisJKHdyaXRlX2xicmFjLCByZWNvZ25pemVkX2Z1bmN0aW9uLCByZWFkX3NjYW5fZmlsZSwgd3JpdGVfcmJyYWMpOgorCUxpa2V3aXNlLgorCisJKiBjY2NwLmMgKG1haW4pOiBDYXN0IGFsbG9jYSByZXN1bHQgdG8gY2hhciAqIHRvIGF2b2lkIHdhcm5pbmcuCisKKwkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEZvciByZXdyaXR0aW5nIGlsbGVnYWwgaW5pdAorCWluc24sIHVzZSBmb3JjZV9vcGVyYW5kIGluc3RlYWQgb2YgZW1pdF9pdl9hZGRfbXVsdC4KKworV2VkIERlYyAyMiAxMzo0NDoxNyAxOTkzICBSb24gR3VpbG1ldHRlICAocmZnQG5ldGNvbS5jb20pCisKKwkqIHRyZWUuYyAoY2hhaW5vbik6ICBEZXRlY3QgbW9yZSBjaXJjdWxhcml0aWVzLgorCisJKiBlbnF1aXJlLmMgKG1haW4pOiAgTW92ZSBkZWNsYXJhdGlvbnMgb2YgU0laRSBhbmQgVE9UQUwgdG8KKwl3aGVyZSB0aGV5IHdvbid0IGNhdXNlICJ1bnVzZWQiIHdhcm5pbmdzIHdoZW4gTk9fTUVNIGlzIGRlZmluZWQuCisJKHByb21vdGlvbnMpOiAgRXhwbGljaXRseSBkZWNsYXJlIHJldHVybiB0eXBlICh0byBhdm9pZCB3YXJuaW5ncykuCisJQWx3YXlzIHJldHVybiBhIHZhbHVlLgorCitXZWQgRGVjIDIyIDEzOjM5OjQwIDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIE1ha2VmaWxlLmluIChnY2Mubyk6IERlZmluZSBERUZBVUxUX1RBUkdFVF9WRVJTSU9OLgorCSogZ2NjLmMgKGNvbXBpbGVyX3ZlcnNpb24pOiBOZXcgdmFyaWFibGUuCisJKHNwZWNfdmVyc2lvbik6IEluaXRpYWxpemUgZnJvbSBERUZBVUxUX1RBUkdFVF9WRVJTSU9OLgorCShtYWluKTogRGlzdGluZ3Vpc2ggQ09NUElMRVJfVkVSU0lPTiBmcm9tIFRBUkdFVF9WRVJTSU9OLgorCShwcm9jZXNzX2NvbW1hbmQpOiBVc2UgQ09NUElMRVJfVkVSU0lPTiBmb3IgJXYuCisJR3VhcmQgYWdhaW5zdCBhIENPTVBJTEVSX1ZFUlNJT04gdGhhdCBsYWNrcyBhIG1pbm9yLgorCitXZWQgRGVjIDIyIDA3OjQ3OjE3IDE5OTMgIEdyZWcgR2lsbGV5ICAoZ2dpbGxleUBhZG9iZS5jb20pCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFRyZWF0ICIuY3BwIiBhcyBDKysuCisJKiBjY2NwLmMgKG1haW4pOiBTdHJpcCBvZmYgIi5jcHAiIGV4dGVuc2lvbi4KKwkqIHRvcGxldi5jIChzdHJpcF9vZmZfZW5kaW5nKTogTGlrZXdpc2UuCisKK1dlZCBEZWMgMjIgMDc6MjY6MjYgMTk5MyAgUmFmYWwgUGlldHJhayAgKFJhZmFsX1BpZXRyYWtAY2Ftay5lZHUucGwpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWhlYWRlcnMsIGluc3RhbGwtaGVhZGVycy10YXIpOiBDb3JyZWN0bHkKKwloYW5kbGUgZGlyZWN0b3JpZXMgd2hlbiAkKGxpYnN1YmRpcikgaXMgYSByZWxhdGl2ZSBwYXRoLgorCitXZWQgRGVjIDIyIDA3OjEyOjA2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAoVF9TVCk6IE5ldyBtYWNyby4KKwkoc2Nhbl9jaGFyX3RhYmxlKTogV2l0aCBzLCBjIGFuZCBbLCBhbGxvdyBgYScgZmxhZy4KKwkocHJpbnRfY2hhcl90YWJsZSk6IEFjY2VwdCBaIGFuZCBtIGNvZGVzLgorCShjaGVja19mb3JtYXRfaW5mbyk6IEhhbmRsZSB0aGUgYGEnIGZsYWcuCisKK1R1ZSBEZWMgMjEgMjE6MDk6MzggMTk5MyAgUmFpbmVyIE9ydGhlciAgKHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5kZSkKKworCSogZml4aW5jbHVkZXMgKHJwYy9hdXRoLmgsIHJwYy94ZHIuaCk6IERlY2xhcmUgc3RydWN0dXJlcyBiZWZvcmUKKwl1c2luZyB0aGVtIGluIHByb3RvdHlwZXMsIGZvciBJcml4IDQuMC41LgorCShycGMvcnBjLmgpOiBBdm9pZCBhIG5lc3RlZCBjb21tZW50IG9uIFVsdHJpeCA0LjMuCisKK1R1ZSBEZWMgMjEgMTg6NDE6MzYgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKworCSogY29uZmlndXJlIChjcHBfbWRfZmxhZ3MpOiBSZW5hbWUgdG8gbWRfY3BwZmxhZ3MuCisJKE1EX0NQUCwgTURfREVQUyk6IFNldCBhcHByb3ByaWF0ZWx5IGZvciBuYXRpdmUgb3IgY3Jvc3MgYnVpbGQuCisJKE1EX0ZJTEUpOiBFZGl0IGluIHBsYWNlLgorCSogTWFrZWZpbGUuaW4gKE1EX0ZJTEUgcnVsZSk6IERlcGVuZCBvbiAkKE1EX0RFUFMpLiAgSW52b2tlICQoTURfQ1BQKS4KKworVHVlIERlYyAyMSAxNzozNzoyMCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXRyZWUuaCAoVlRBQkxFX05BTUUpOiBObyBkZWYgd2l0aCBOT197RE9MTEFSLERPVH0gZGVmaW5lZC4KKwkoVlRBQkxFX05BTUVfUCk6IFVzZSBpdCBpbnN0ZWFkIG9mIFZUQUJMRV9OQU1FX0ZPUk1BVC4KKworVHVlIERlYyAyMSAxMzoyNTozOSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmggKEZVTkNUSU9OX0FSR19QQVNTX0JZX1JFRkVSRU5DRSk6IEFsc28gcGFzcyBQYXNjYWwgYXJyYXlzCisJYnkgcmVmZXJlbmNlLgorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplKTogRm9yIENBTExfSU5TTiBmb2xsb3dlZCBieQorCU5PVEVfSU5TTl9TRVRKTVAgbm90ZSwgbWFrZSBpdCBkZXBlbmQgb24gYWxsIHJlZ2lzdGVycyBub3QganVzdAorCWhhcmQgcmVnaXN0ZXJzLCBhbmQgYWRkIGEgUkVHX0RFQUQgLTEgbm90ZS4KKwkodW5saW5rX25vdGVzKTogRG9uJ3Qgc2F2ZSBhd2F5IE5PVEVfSU5TTl9TRVRKTVAgbm90ZXMuCisJKHNjaGVkdWxlX2Jsb2NrKTogQWZ0ZXIgc2NoZWR1bGluZyBDQUxMX0lOU04sIGNoZWNrIGZvciBSRUdfREVBRAorCS0xIG5vdGUuICBJZiBmaW5kIGl0LCBkZWxldGUgaXQsIGFuZCBvdXRwdXQgYSBOT1RFX0lOU05fU0VUSk1QIG5vdGUuCisKKwkqIHJ0bGFuYWwuYyAocmVwbGFjZV9yZWdzLCBjYXNlIFJFRyk6IFJldHVybiBjb3BpZXMgb2YgU1VCUkVHcywgdG8KKwlhdm9pZCBpbnZhbGlkIHNoYXJpbmcuCisKK1R1ZSBEZWMgMjEgMTM6MDc6MTQgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFVzZSBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwKKwlyYXRoZXIgdGhhbiBnZW5lcmF0aW5nIG9uZSBvbiBpdHMgb3duLgorCisJKiBwYS5oIChBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiBBbHdheXMgdXNlIEwkIGFzIHRoZSBwcmVmaXgKKwlmb3IgaW50ZXJuYWwgbGFiZWxzLgorCShBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKTogTGlrZXdpc2UuCisKK01vbiBEZWMgMjAgMTk6MTA6MTYgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy10eXBlY2suYyAoc3RydWN0IGluaXRpYWxpemVyX3N0YWNrKTogTmV3IGZpZWxkIEVMRU1FTlRTLgorCShzdGFydF9pbml0LCBmaW5pc2hfaW5pdCk6IFNhdmUgYW5kIHJlc3RvcmUgY29uc3RydWN0b3JfZWxlbWVudHMuCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0X2NvbW1vbik6IFJldHVybiBhIG5ldyBoYXJkIHJlZyBldmVuCisJaWYgbm90IHZhbGlkIGluIE1PREUgaWYgdGhlIGlucHV0IFJFRyBpcyBub3QgdmFsaWQgaW4gaXRzIG1vZGUuCisKKwkqIHJzNjAwMC5tZCAoZGl2c2kzKTogQ29ycmVjdCBsb2dpYyBmb3Igd2hlbiB3ZSBjYWxsIGZvcmNlX3JlZy4KKwkobW9kc2kzKTogRW5zdXJlIG9wZXJhbmRzWzJdIGlzIGEgQ09OU1RfSU5UOyBpbmNsdWRlIFJFRyBpbgorCXByZWRpY2F0ZS4KKworVGh1IERlYyAxNiAxNjoxNDo1MyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5jIChjb21wdXRlX2ZyYW1lX3NpemUpOiBSZW1vdmUgaW1wbGljaXQgYXNzdW1wdGlvbiB0aGF0ICVyNAorCWlzIHRoZSBmcmFtZSBwb2ludGVyLgorCisJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBSZXZlcnNlIGxhc3QgY2hhbmdlLiAgT3V0cHV0CisJYm90aCB0aGUgZnVuY3Rpb24gbGFiZWwgYW5kIHRoZSAuUFJPQyBoZXJlLgorCisJKiBwYS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRG8gbm90IG91dHB1dCB0aGUgZnVuY3Rpb24KKwlsYWJlbCBvciB0aGUgLlBST0MgaGVyZS4KKworVGh1IERlYyAxNiAxMTozNDo0OCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBEbyBub3QgcHJlc2VydmUgX0hJRERFTl9WQV9MSVNUIGluIHN0ZGlvLmguCisKK1dlZCBEZWMgMTUgMTM6NDg6MjUgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZsYWdfY29uc2VydmVfc3BhY2UpOiBOZXcgbGFuZ3VhZ2Ugc3BlY2lmaWMgZmxhZyB0bworCXRlbGwgdGhlIGNvbXBpbGVyIHRvIHVzZSAuY29tbW9uIHdoZW4gcG9zc2libGUuICBSZWR1Y2VzIHRoZSBzaXplIG9mCisJLm8gZmlsZXMuCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IENvcHkgREVDTF9DT01NT04gZnJvbSB0aGUgb2xkZGVjbC4KKwkqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCk6IFNldCBERUNMX0NPTU1PTiBhcHByb3ByaWF0ZWx5LgorCSogY3AtZGVjbC5jIChmaW5pc2hfZGVjbCk6IFVzZSBmbGFnX2NvbnNlcnZlX3NwYWNlLCBpbnN0ZWFkIG9mCisJZmxhZ19ub19jb21tb24uCisJKiBjcC1kZWNsMi5jIChmbGFnX2NvbnNlcnZlX3NwYWNlLCBsYW5nX2Zfb3B0aW9ucyk6IE5ldyBmbGFnLgorCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IE5ldyAtZmNvbnNlcnZlLXNwYWNlIGZsYWcuCisJKiB0cmVlLmggKERFQ0xfQ09NTU9OKTogTmV3IGZsYWcuCisJKiB0cmVlLmggKHRyZWVfZGVjbCk6IE5ldyBjb21tb25fZmxhZy4KKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFVzZSBERUNMX0NPTU1PTiB0byBoZWxwIGRldGVybWluZSBpZgorCWFuIG9iamVjdCBjYW4gYmUgcHV0IGluIC5jb21tb24uCisJKiBjLWRlY2wuYyAoc3RhcnRfZGVjbCk6IFNldCBERUNMX0NPTU1PTiB0byAxLgorCitXZWQgRGVjIDE1IDE5OjA0OjU1IDE5OTMgIENvbnJhZCBLaW1iYWxsICAoY2VrQHNkYy5ib2VpbmcuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoY2NjcC5vLCBzdG10LXByb3RvKTogVXNlICQoaW5jbHVkZWRpcikuCisKK1dlZCBEZWMgMTUgMTg6NDQ6MDMgMTk5MyAgTGVvbmlkIEJhcmF6ICAobGJhcmF6QGlpbC5pbnRlbC5jb20pCisKKwkqIHRyZWUuYyAoY29weV9ub2RlKTogSGFuZGxlIGxlbmd0aCBvZiBJTlRFR0VSX0NTVCBsaWtlIG1ha2Vfbm9kZS4KKworV2VkIERlYyAxNSAxODozNzoyOSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaW5hbC5jIChwcm9maWxlX2Z1bmN0aW9uKTogU2V0IEFMSUdOIHByb3Blcmx5LgorCisJKiBwcm90b2l6ZS5jOiBSZW1vdmUgZGVjbGFyYXRpb25zIG9mIHNldGptcCBhbmQgbG9uZ2ptcC4KKworV2VkIERlYyAxNSAxODozMTowMSAxOTkzICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogYy10eXBlY2suYyAobWlzc2luZ19icmFjZXNfbWVudGlvbmVkKTogUmVuYW1lZCBmcm9tCisJYHBhcnRpYWxfYnJhY2tldF9tZW50aW9uZWQnLgorCShzdGFydF9pbml0KTogQ2xlYXIgYG1pc3NpbmdfYnJhY2VzX21lbnRpb25lZCcuCisJKHdhcm5pbmdfaW5pdCk6IE5ldyBmdW5jdGlvbi4KKwkocHVzaF9pbml0X2xldmVsKTogT3B0aW9uYWxseSB3YXJuIGFib3V0IG1pc3NpbmcgYnJhY2VzLgorCVdoZW4gd2FybmluZyBhYm91dCBicmFjZXMgYXJvdW5kIHNjYWxhcnMsIGlkZW50aWZ5IHdoaWNoIHNjYWxhcnMuCisKK1dlZCBEZWMgMTUgMTg6MjE6MjkgMTk5MyAgUmljaGFyZCBIZW5kZXJzb24gIChyaWNoYXJkQHZpei50YW11LmVkdSkKKworCSogbWlwcy9pcmlzMy5oIChMSUJfU1BFQyk6IFVzZSBzaGFyZWQgbGliYyB3aGVuIG5vdCBwcm9maWxpbmcsCisJbm90IGRlYnVnZ2luZywgYW5kIG5vICItc3RhdGljIi4KKworV2VkIERlYyAxNSAxODoxNDozMSAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogQWxsb3cgX19idWlsdGluX25leHRfYXJnIHRvIGJlIHVzZWQKKwlpbiB2YXJhcmdzIGZ1bmN0aW9ucy4KKworV2VkIERlYyAxNSAxODowOTo1NyAxOTkzICBLYXZlaCBSLiBHaGF6aSAgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGdudWNvbXBhcmUsIGdudWNvbXBhcmUzKTogTmV3IHRhcmdldHMuCisKK1R1ZSBEZWMgMTQgMDA6MTk6NDQgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9jYWxsKTogUHV0IHRlbXBvcmFyeSBsYWJlbCBhZnRlciB0aGUKKwlSUCBhZGp1c3RtZW50LiAgIi0gOCIgYWRqdXN0bWVudCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorCisJKiB4LXBhIChDQyk6IERvIG5vdCB1c2UgYWJzb2x1dGUgcGF0aCB0byBnY2MuCisKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IERvIG5vdCBvdXRwdXQgdGhlIC5QUk9DIGRpcmVjdGl2ZQorCWhlcmUuCisKKwkqIHBhLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBFbWl0IHRoZSAuUFJPQyBpbW1lZGlhdGVseQorCWFmdGVyIHRoZSBmdW5jdGlvbidzIGxhYmVsLgorCisJKiBwYS5oIChBU01fRklMRV9TVEFSVCk6IEVtaXQgYSAuZmlsZSBkaXJlY3RpdmUgYXQgdGhlIGJlZ2lubmluZworCW9mIHRoZSBvdXRwdXQgZmlsZSBpZiBkZWJ1ZyBzeW1ib2xzIGFyZSBiZWluZyBnZW5lcmF0ZWQuCisKKwkqIHBhLmggKE1BWF9PRklMRV9BTElHTk1FTlQpOiBEZWZpbmUgYXBwcm9wcmlhdGVseSBmb3IgdGhlIFBBLgorCisJKiBwYS1naGl1eC5oIChUQVJHRVRfREVGQVVMVCk6IEVuYWJsZSBUQVJHRVRfSlVNUF9JTl9ERUxBWSBhbmQKKwlUQVJHRVRfR0FTLgorCSogcGExLWdoaXV4LmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCisKKwkqIHBhLWdocHV4LmggKFRBUkdFVF9ERUZBVUxUKTogRW5hYmxlIFRBUkdFVF9KVU1QX0lOX0RFTEFZLgorCSogcGEtZ3V4Ny5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgorCSogcGEtdXRhaG1hY2guaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KKwkqIHBhLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCisJKiBwYTEtZ2hwdXguaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KKwkqIHBhMS11dGFobWFjaC5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgorCSogcGExLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCisKKwkqIHBhLmggKExFR0lUSU1BVEVfQ09OU1RBTlRfUCk6IFJlbW92ZSBoYWNrIGZvciBmdW5jdGlvbiBhZGRyZXNzZXMuCisJKiBwYS5jIChzZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogRnVuY3Rpb24gYWRkcmVzc2VzIG5vIGxvbmdlcgorCW5lZWQgc2Vjb25kYXJ5IHJlbG9hZHMuCisJKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IFNwZWNpYWwgaGFuZGxpbmcgb2YgZnVuY3Rpb24gYWRkcmVzc2VzIGlzCisJbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIHBhLm1kIChsb19zdW0gb2YgYSBmdW5jdGlvbiBhZGRyZXNzKTogVXNlIHNob3J0IGZvcm0gYXMgd2UgaGF2ZQorCW5vIGludGVudGlvbiBvZiBzdXBwb3J0aW5nIE1QRSBleHRlcm5hbCBjYWxscy4KKworTW9uIERlYyAxMyAyMDo1ODo1OCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHN1YnN0LCBjYXNlIE1JTlVTKTogQ2Fub25pY2FsaXplIChtaW51cyBBIChwbHVzIEEgQikpLgorCitNb24gRGVjIDEzIDE5OjA5OjQyIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBtaXBzL2lyaXM0LmggKEFTTV9PVVRQVVRfQVNDSUkpOiBXcmFwIGluIGBkbyB7IC4uLiB9IHdoaWxlICgwKScuCisJKiBjbGlwcGVyL2NsaXguaCwgZng4MC9meDgwLmgsIGk4NjAvYnNkLmgsIG02OGsvM2IxLmg6IExpa2V3aXNlLgorCSogbTY4ay9hbWl4LmgsIG02OGsvY3Jkcy5oLCBtNjhrL2hwMzIwLmgsIG02OGsvbTY4a3Y0Lmg6IExpa2V3aXNlLgorCSogbTY4ay9tb3QzMzAwLmgsIG02OGsvc2dzLmgsIG02OGsvdG93ZXItYXMuaDogTGlrZXdpc2UuCisJKiBuczMyay9lbmNvcmUuaCwgdGFob2UvaGFycmlzLmgsIHRhaG9lL3RhaG9lLmg6IExpa2V3aXNlLgorCSogdmF4L3ZheHYuaCx3ZTMyay93ZTMyay5oOiBMaWtld2lzZS4KKworTW9uIERlYyAxMyAwMzoyODowMiAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKHNwYXJjLSotc29sYXJpczIpOiBGaXggdHlwbyBpbiBleHRyYV9wYXJ0cy4KKworU3VuIERlYyAxMiAwODoxOTozOCAxOTkzICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQorCisJKiBjY2NwLmMgKG1haW4pOiBDb21iaW5lIHRlc3RzIG9mIHNpbmdsZS1jaGFyYWN0ZXIgc3VmZml4ZXMuCisJKGRlcHNfb3V0cHV0KTogRGlmZmVyZW50IHNlY29uZCBwYXJhbWV0ZXI6IFNQQUNFUiBkZXRlcm1pbmVzCisJbWVhbmluZyBvZiBmaXJzdCBhcmd1bWVudCAodGFyZ2V0LCBkZXBlbmRlbmN5LCBsaXRlcmFsIHRleHQpLgorCVdyYXAgb3V0cHV0IGNvcnJlY3RseS4KKworU3VuIERlYyAxMiAwNzo1NDowNyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKHR5cGVfaGFzaF9jYW5vbik6IENsZWFuIHVwIG9ic3RhY2sgdXNhZ2UgYSBiaXQuCisKKwkqIHJlY29nLmMgKGluZGlyZWN0X29wZXJhbmQpOiBWZXJpZnkgbW9kZSBvZiBPUCBpcyBjb3JyZWN0LgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCwgc3RvcmVfb25lX2FyZyk6IFByb3Blcmx5IHB1c2ggYW5kIHBvcAorCXRlbXBvcmFyeSBsZXZlbCBhcm91bmQgZXhwcmVzc2lvbiBldmFsdWF0aW9ucy4KKworCSogY29uZmlndXJlOiBIYW5kbGUgRVhUUkFfUEFSVFMgYW5kIEVYVFJBX09CSlMgbGlrZSB0aGUgb3RoZXJzLgorCShpWzM0XTg2LSotb3Nmcm9zZSopOiBSZXBsYWNlIHQtb3Nmcm9zZSB3aXRoIGV4dHJhX29ianMgYXNzaWdubWVudC4KKwkoaVszNF04Ni0qLXNjbyopOiBMaWtld2lzZSBmb3IgdC1zY28uCisJKGlbMzRdODYtKi1pc2MqKTogTGlrZXdpc2UgZm9yIHQtaXNjLgorCShpWzM0XTg2LWlibS1haSopOiBMaWtld2lzZSBmb3IgdC1haXguCisJKGlbMzRdODYtKi1zb2xhcmlzMiwgaTg2MC1hbGxpYW50LSopOiBBZGQgZXh0cmFfcGFydHMuCisJKHNwYXJjLSotc29sYXJpczIqLCBtODhrLSopOiBMaWtld2lzZS4KKwkobWlwcy1kZWMtb3Nmcm9zZSopOiBBZGQgZXh0cmFfb2Jqcy4KKwkoY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgqKTogUmVwbGFjZSB0LWNsaXggd2l0aCBleHRyYV9oZWFkZXJzIGFuZAorCWV4dHJhX3BhcnRzLgorCSogTWFrZWZpbGUuaW4gKGhhbGZwaWMubyk6IE5ldyBydWxlOyBjb3BpZWQgZnJvbSB0LW9zZnJvc2UuCisJKiBoODMwMC90LWg4MzAwOiBEZWxldGUgbnVsbCBMSUIyRlVOQ1NfRVhUUkEuCisJKiBpMzg2L3Qtc29sMiwgaTg2MC90LWZ4MjgwMCwgbTg4ay90LWRndXgtZ2FzOiBEZWxldGUgRVhUUkFfUEFSVFMuCisJKiBtODhrL3QtZGd1eCwgbTg4ay90LW04OGssIG04OGsvdC1zeXN2NCwgc3BhcmMvdC1zb2wyOiBMaWtld2lzZS4KKwkqIG04OGsvdC1sdW5hOiBEb24ndCByZXF1aXJlIGJhc2guCisJKiBtaXBzL3Qtb3Nmcm9zZTogRGVsZXRlIEVYVFJBX09CSlMgYW5kIGhhbGZwaWMubyBydWxlLgorCSogY2xpcHBlci90LWNsaXgsIGkzODYvdC1haXgsIGkzODYvdC1pc2MsIGkzODYvdC1vc2Zyb3NlLCBpMzg2L3Qtc2NvOgorCURlbGV0ZWQ7IG5vIGxvbmdlciBuZWVkZWQuCisKK1N1biBEZWMgMTIgMDY6NDc6MTQgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogVmVyc2lvbiAyLjUuNyByZWxlYXNlZC4KKworU3VuIERlYyAxMiAwNjoxODozMyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGZ1bmN0aW9uLmMgKHRocmVhZF9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfaW5zbnMpOiBXaGVuIGNvbnN0cnVjdGluZworCVVTRSBjaGFpbiwgc2V0IGJvdGggTkVYVF9JTlNOIGFuZCBQUkVWX0lOU04gbGlua3MuICBBbHNvLCBwcmVzZXJ2ZQorCW9yZGVyIG9mIFVTRSBpbnNucyBpbiBjaGFpbi4KKworU3VuIERlYyAxMiAwNjoxMzo1MSAxOTkzICBESiBEZWxvcmllICAoZGpAY3Ryb24uY29tKQorCisJKiBjb25maWd1cmUuYmF0OiBVcGRhdGUgdG8gcmVsZWN0IHJlY2VudCBjaGFuZ2VzIGVsc2V3aGVyZS4KKwkqIG9iamMvbWFrZWZpbGUuZG9zOiBMaWtld2lzZS4KKworU2F0IERlYyAxMSAxODowOTo1MCAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogIFRoZSAiYmFzZSB0eXBlIiBvZiBhIFNFVF9UWVBFIGlzIGl0cworCURPTUFJTl9UWVBFLCBub3QgaXRzIFRSRUVfVFlQRS4KKwkqIGR3YXJmb3V0LmMgKG91dHB1dF90eXBlKTogTGlrZXdpc2UuCisKK1NhdCBEZWMgMTEgMDc6MzY6NTcgMTk5MyAgRGF2aWQgUmlma2luZCAgKGRhdmVAeWFyYy5jb20pCisKKwkqIHJzNjAwMC5tZDogQWRkIGEgZmV3IG1pc3NpbmcgbmV3IG5tZW1vbmljcy4KKworU2F0IERlYyAxMSAwNjo1Nzo1NSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjY2NwLmMgKElOUFVUX1NUQUNLX01BWCk6IERvdWJsZSBzaXplLgorCisJKiBpbnRlZ3JhdGUuYyAoaW5pdGlhbGl6ZV9mb3JfaW5saW5lKTogSGFuZGxlIENPTkNBVCB3aGVuIHNldHRpbmcgdXAKKwlwYXJtZGVjbF9tYXAuCisKKwkqIHJzNjAwMC5tZCAobW9kc2kzKTogUmVqZWN0IFJFRyBpbiBwcmVkaWNhdGUgdG8gYXZvaWQgdW5kZWZpbmVkCisJcmVmZXJlbmNlIGFuZCBleHRyYSBwc2V1ZG8gY3JlYXRpb24gaWYgd2lsbCBmYWlsLgorCitGcmkgRGVjIDEwIDEwOjAzOjM2IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IENoYW5nZSAtZm5vZG9sbGFycy1pbi1pZGVudGlmaWVycyB0bworCS1mbm8tZG9sbGFycy1pbi1pZGVudGlmaWVycyB0byBtYXRjaCBkb2NzLgorCitGcmkgRGVjIDEwIDE1OjQyOjAyIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1sZXguYyAoeXlsZXgpOiBXaGVuIHJlYWRpbmcgbWFsZm9ybWVkIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LAorCWF2b2lkIHByaW50aW5nIGVycm9yIG1vcmUgdGhhbiBvbmNlLCBhbmQgYXZvaWQgcGFzc2luZyBtYWxmb3JtZWQKKwludW1iZXIgdG8gc3Vic2VxdWVudCBhdG9mIGNhbGwuCisKK0ZyaSBEZWMgMTAgMDY6MDM6MzUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmMgKGVhc3lfZnBfY29uc3RhbnQpOiBVc2UgaW5wdXRfb3BlcmFuZCB0byBzZWUgaWYKKwllYWNoIHdvcmQgY2FuIGJlIGxvYWRlZCBpbiBvbmUgaW5zbi4KKworCSogcnM2MDAwLm1kOiBDaGFuZ2UgbnVtZXJvdXMgb2NjdXJyZW5jZXMgb2YgVEFSR0VUX1BPV0VSUEMKKwl0byAhIFRBUkdFVF9QT1dFUiBhbmQgbWFrZSByZWxhdGVkIGNoYW5nZXMuCisKKwkqIHJzNjAwMC5tZCAobW9kc2kzKTogUmV3b3JrIHRvIG9wZXJhdGUgY29ycmVjdGx5IGZvciBib3RoIFBPV0VSCisJYW5kIFBvd2VyUEMuCisKK1RodSBEZWMgIDkgMTY6MTk6MDUgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKE9QRVJBVE9SX1RZUEVOQU1FX1ApOiBEZWZpbmUgb3V0c2lkZSBvZgorCU5PX3tET0xMQVIsRE9UfSBtYWNybyBjaGVja3MsIHNvIGl0IGFsd2F5cyBnZXRzIGRlZmluZWQuCisJKFZUQUJMRV9OQU1FX1ApOiBEZWZpbmUgZm9yIE5PX0RPVCAmJiBOT19ET0xMQVJfSU5fTEFCRUwuCisKK1dlZCBEZWMgIDggMDU6NDY6MjYgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncywgY2FzZSBDTE9CQkVSKTogUmVmaW5lIHByZXZpb3VzIGNoYW5nZQorCXRvIGp1c3QgbG9vayBhdCB0aGUgYWRkcmVzcyBvZiBhIE1FTSBpbnNpZGUgYSBDTE9CQkVSLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgKl97RElWLE1PRH1fRVhQUik6IFdoZW4gdXNpbmcKKwlkaXN0cmlidXRpdmUgbGF3LCB0YWtlIGNhcmUgd2hlbiBDMiBpcyBuZWdhdGl2ZS4KKworVHVlIERlYyAgNyAwODo0NTo1OSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogTG9vayBpbnNpZGUgYSBDTE9CQkVSOyBpdCBtYXkgYmUgdGhlIG9ubHkKKwlwbGFjZSByZWdzIGFyZSB1c2VkIGlmIGl0IGhhcyBhIHN0YWNrIHNsb3QgdGhhdCBpcyBmcm9tIGFuIGlubGluZWQKKwlmdW5jdGlvbi4KKworTW9uIERlYyAgNiAyMDo1NjoxMSAxOTkzICBEYXZpZCBSaWZraW5kICAoZGF2ZUB5YXJjLmNvbSkKKworCSogZXhwci5jIChtb3ZlX2Jsb2NrX3t0byxmcm9tfV9yZWcpOiBDaGVjayBIQVZFX3tsb2FkLHN0b3JlfV9tdWx0aXBsZQorCXZhbHVlOyBkb24ndCBqdXN0ICNpZGVmIHRoZSBzeW1ib2wuCisKK01vbiBEZWMgIDYgMDg6MDE6NTkgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGN5Z251cy5jb20pCisKKwkqIHBhLmMgKGhwcGFfbGVnaXRpbWl6ZV9hZGRyZXNzKTogSWYgd2UgY2FuJ3QgbGVnaXRpbWl6ZSwKKwlkbyBub3RoaW5nOyBkb24ndCBjYWxsIGFib3J0LgorCitNb24gRGVjICA2IDA3OjM4OjMwIDE5OTMgIFJpY2hhcmQgRWFybnNoYXcgIChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGFybS5jIChvdXRwdXRfYXNjaWlfcHNldWRvX29wKTogOC1iaXQgY2hhcnMgc2hvdWxkIGJlIHplcm8tZXh0ZW5kZWQuCisJKiBhcm0uaCAoQVNNX09VVFBVVF9BU0NJSSk6IExpa2V3aXNlLgorCitNb24gRGVjICA2IDA3OjMyOjU5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9iamMvZW5jb2RpbmcuaDogSW5jbHVkZSBjdHlwZS5oLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFBMQUNFSE9MREVSX0VYUFIpOiBSZW1vdmUgdG9wIGVudHJ5IAorCWZyb20gUExBQ0VIT0xERVJfTElTVCB3aGVuIGV4cGFuZGluZyB0aGUgdmFsdWUgaW4gaXQuCisKK01vbiBEZWMgIDYgMDU6NDA6MzggMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBlbWl0LXJ0bC5jIChzdGFydF9zZXF1ZW5jZSk6IFNhdmUgY3VycmVudCBzZXF1ZW5jZV9ydGxfZXhwci4KKworRnJpIERlYyAgMyAwNzowNzowMSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBWZXJzaW9uIDIuNS42IHJlbGVhc2VkLgorCisJKiBjLXR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBSZXR1cm4gaWYgY29udmVydF9mb3JfYXNzaWdubWVudAorCXJldHVybnMgZXJyb3JfbWFya19ub2RlLgorCitGcmkgRGVjICAzIDA2OjQyOjA1IDE5OTMgIEFybmUgSGVucmlrIEp1dWwgIChhcm5lakBmbS51bml0Lm5vKQorCisJKiBmaXhpbmNsdWRlcyAoc3RkaW8uaCk6IEZpeCB0eXBvcyAobWlzc2luZyBxdW90ZSkgaW4gcHJldmlvdXMgY2hhbmdlLgorCitGcmkgRGVjICAzIDA2OjM1OjU3IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogZ3N0ZGRlZi5oOiBEZWZpbmUgYW5kIHByb3RlY3QgYWdhaW5zdCBfX1NURERFRl9IX18gZm9yIElyaXggNS4xLgorCisJKiBzcGFyYy5jIChzaGlmdF9vcGVyYW5kKTogRGVsZXRlIGZ1bmN0aW9uLgorCSogc3BhcmMubWQgKGFzaGxzaTMsIGFzaHJzaTMsIGxzaHJzaTMpOiBVc2UgYXJpdGhfb3BlcmFuZCBpbnN0ZWFkCisJb2Ygc2hpZnRfb3BlcmFuZC4gIFRydW5jYXRlIHNoaWZ0IGNvdW50cyB0byA1IGJpdHMuCisKK1RodSBEZWMgIDIgMDg6MTE6MDAgMTk5MyAgU3RlZmFuIFJhcHAgIChzckBpcmIuaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGUpCisKKwkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ29ycmVjdCBhcmd1bWVudHMgZm9yIHJlZ2lzdGVyIGNoZWNrLgorCitUaHUgRGVjICAyIDA3OjA3OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IFByZXNlcnZlIF9ISURERU5fVkFfTElTVCB3aGVuIGNoYW5naW5nIFZBX0xJU1QgdG8KKwlEVU1NWV9WQV9MSVNULiAgQ2hhbmdlIF9fdmFfbGlzdCB0byBfX2dudWNfdmFfbGlzdC4gIEZvciBBSVgKKwkzLjIuNS4KKworVGh1IERlYyAgMiAwNzowMDoyNCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBlbWl0LXJ0bC5jIChwdXNoX3RvcG1vc3Rfc2VxdWVuY2UsIGVuZF9zZXF1ZW5jZSk6IFVwZGF0ZQorCXNlcXVlbmNlX3J0bF9leHByIGZyb20gc2VxdWVuY2Vfc3RhY2sgZW50cnkuCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogVXNlIFBtb2RlLCBub3QgT1VUTU9ERSwgd2hlbiBwYXNzaW5nCisJaW4gc3RydWN0dXJlIGFkZHJlc3MuCisKKwkqIGEyOWsuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IEtlcm5lbCByZWdzIGFyZSBpbiBzYW1lIGNsYXNzCisJYXMgdXNlciByZWdzLgorCisJKiBhMjlrLm1kIChtb3Z0aSBzcGxpdCk6IFNldCBDUiB0byAzLCBub3QgMSBsaWtlIERJbW9kZS4KKworVGh1IERlYyAgMiAwNjo0NjowNyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogUmVwbGFjZSBvYnNvbGV0ZSByZWZlcmVuY2UgdG8KKwlCWVRFX0xPQURTXypfRVhURU5EIHdpdGggTE9BRF9FWFRFTkRfT1AuCisKK1RodSBEZWMgIDIgMDY6Mzk6MTYgMTk5MyAgSmVmZnJleSBBIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoQVNNX1NUQUJTX09QLCBBU01fU1RBQk5fT1ApOiBEZWZpbmUuCisJKEFTTV9GSUxFX0VORCk6IFB1dCBhIFRBQiBiZWZvcmUgdGhlIC5zdGFicyBkaXJlY3RpdmUuCisKK1RodSBEZWMgIDIgMDY6MzA6MTcgMTk5MyAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBSZXN0b3JlIHBwYzYwMSBsb2FkIGFuZCBmcGxvYWQKKwl0aW1pbmdzLgorCitXZWQgRGVjICAxIDE3OjI0OjE3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwlXZWQgTm92IDI0IDA2OjM2OjEwIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworICAgICAgICAqIGNwLXRyZWUuYyAoZ2V0X2RlY2xfbGlzdCk6IFVzZSB0aGUgREVDTF9ORVNURURfVFlQRU5BTUUgZm9yIHRoZQorICAgICAgICB2YWx1ZSB3ZSdyZSBnb2luZyB0byBwYXN0ZSBvbnRvIENMQVNTVFlQRV9JRF9BU19MSVNULiAgVGhpcyB3aWxsIGdldAorICAgICAgICB0aGUgcmlnaHQgbmFtZSBmb3IgbmVzdGVkIGNsYXNzZXMsIGFuZCBmb3IgdGVtcGxhdGVzLgorCisJTW9uIE5vdiAyOSAxMzowOTozMSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBQcm9wZXJseSBldmFsdWF0ZSBUUkVFX1BVQkxJQyBmb3IKKwlmcmllbmRzLiAgKEZpeGVzIHNwdXJpb3VzIHdhcm5pbmdzIGFib3V0IGZyaWVuZHMgYmVpbmcgZGVjbGFyZWQKKwlzdGF0aWMgYnV0IG5vdCB1c2VkLikKKworCSogY3AtdHlwZTIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogSWYgd2UgZ290IGFuIGVycm9yX21hcmtfbm9kZQorCWZyb20gYnVpbGRfbWV0aG9kX2NhbGwsIG1ha2Ugc3VyZSBFWFBSX0FTX01FVEhPRCBpcyBjbGVhcmVkIG91dAorCWFnYWluLCBzbyB0aGUgbGF0ZXIgY2hlY2tzIHdpbGwgd29yayBwcm9wZXJseS4KKworCSogY3AtZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogRml4IGxvZ2ljIHNvIGFuIGVudW0gaW5zaWRlIGEgY2xhc3MKKwl0aGF0J3MgbG9jYWwgdG8gYSBmdW5jdGlvbiBoYXMgaXRzIGVudW1lcmF0b3JzIGVuZCB1cCBpbiB0aGF0CisJY2xhc3MncyBsaXN0IG9mIG1lbWJlcnMsIG5vdCBpbiB0aGUgbGlzdCBmb3IgdGhlIGZ1bmN0aW9uLgorCitUdWUgTm92IDMwIDE5OjI2OjA1IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHNwYXJjLmggKFNUQVRJQ19DSEFJTl9SRUdOVU0pOiBVc2UgJWcyOyAlZzEgaXMgcmVzZXJ2ZWQKKwlmb3IgcHJvbG9ndWUuCisJKFRSQU1QT0xJTkVfVEVNUExBVEUsIElOSVRJQUxJWkVfVFJBTVBPTElORSk6IFN3YXAgdXNlYWdlIG9mICVnMQorCWFuZCAlZzIuCisKKwkqIG02OGsubWQgKG1vdmRmKTogRG9uJ3QgbmVlZCBlYXJseWNsb2JiZXIgd2hlbiBhIHJlZ2lzdGVyCisJaXMgY29waWVkIHRvIGl0c2VsZi4KKworU2F0IE5vdiAyNyAwNjoxOToyMiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBWZXJzaW9uIDIuNS41IHJlbGVhc2VkLgorCisJKiBjLXR5cGVjay5jIChwb3BfaW5pdF9sZXZlbCk6IEVuc3VyZSBuZXZlciBvbiBtb21lbnRhcnlfb2JzdGFjaworCXdoZW4gY2FsbGluZyBjb21wbGV0ZV9hcnJheV90eXBlLgorCitTYXQgTm92IDI3IDAzOjUyOjI2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4cHJvdG8gKHNjYW5uaW5nIGZpbGVzX3RvX2NoZWNrKTogQ3JlYXRlIHN1YmRpcnMgZmlsZXMgYXJlIGluLgorCisJKiBjb25maWcvbTY4ay9tNjhrLm1kIChjbXBzaSwgY21waGksIGNtcHFpKTogSGFuZGxlIFNHU19DTVBfT1JERVIKKwl3aGVuIG91dHB1dHRpbmcgY21wbSBpbnNuLgorCitGcmkgTm92IDI2IDE1OjU3OjI0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogRG8gZGVmaW5lIF9fR05VQ19NSU5PUl9fIGlmIGlucHV0IGlzIGAtJy4KKworVGh1IE5vdiAyNSAxODoxNjoyNSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5oIChzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2spOiBOZXcgZmllbGQgc2VxdWVuY2VfcnRsX2V4cHIuCisJKHN0cnVjdCBmdW5jdGlvbik6IExpa2V3aXNlLgorCSogZW1pdC1ydGwuYzogSW5jbHVkZSB0cmVlLmguCisJKHNlcXVlbmNlX3J0bF9leHByKTogTmV3IHZhcmlhYmxlLgorCShzYXZlX2VtaXRfc3RhdHVzLCByZXN0b3JlX2VtaXRfc3RhdHVzKTogU2F2ZSBhbmQgcmVzdG9yZSBpdC4KKwkoaW5pdF9lbWl0KTogSW5pdGlhbGl6ZSBpdC4KKwkoc3RhcnRfc2VxdWVuY2VfZm9yX3J0bF9leHByKTogTmV3IGZ1bmN0aW9uLgorCSogZnVuY3Rpb24uYzogRGVjbGFyZSBzZXF1ZW5jZV9ydGxfZXhwci4KKwkoc3RydWN0IHRlbXBfc2xvdCk6IE5ldyBmaWVsZCBydGxfZXhwci4KKwkoYXNzaWduX3N0YWNrX3RlbXApOiBTZXQgaXQgZnJvbSBzZXF1ZW5jZV9ydGxfZXhwci4KKwkoe2ZyZWUscG9wfV90ZW1wX3Nsb3RzKTogRG9uJ3QgZnJlZSBhbnkgc2xvdCB3aXRoIG5vbnplcm8gcnRsX2V4cHIuCisJKGZyZWVfdGVtcHNfZm9yX3J0bF9leHByKTogTmV3IGZ1bmN0aW9uLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBSVExfRVhQUik6IENhbGwgZnJlZV90ZW1wc19mb3JfcnRsX2V4cHIuCisJKiBzdG10LmMgKGV4cGFuZF9zdGFydF9zdG10X2V4cHIpOiBDYWxsIHN0YXJ0X3NlcXVlbmNlX2Zvcl9ydGxfZXhwcgorCWluc3RlYWQgb2Ygc3RhcnRfc2VxdWVuY2UuCisJKiBjcC1wYXJzZS55IChleGNlcHRfc3RtdHMpOiBMaWtld2lzZS4KKwkqIGNwLWluaXQuYyAoYnVpbGRfbmV3KTogTGlrZXdpc2UuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluIChlbWl0LXJ0bC5vKTogSW5jbHVkZXMgdHJlZS5oLgorCitUaHUgTm92IDI1IDE3OjI0OjAyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4cHJvdG8pOiBDcmVhdGUgaW5jbHVkZSBzdWJkaXIgaWYgZG9lc24ndCBleGlzdC4KKworV2VkIE5vdiAyNCAxNDozMjo0NyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGMtY29tbW9uLmMgKHNob3J0ZW5fY29tcGFyZSk6IENvcnJlY3QgdHlwbyBmcm9tIGxhc3QgY2hhbmdlLgorCitXZWQgTm92IDI0IDEzOjI1OjA5IDE5OTMJUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBwcm90b2l6ZS5jIChzYXZlX2RlZl9vcl9kZWMpOiBDb3JyZWN0IHR5cG8gaW4gY2hhbmdlIG9mIE5vdiAyMy4gIE1ha2UKKwlzdXJlIHBvaW50ZXJzIHdpdGhpbiBkZWZfZGVjX3AgYXJlIHZhbGlkIGJlZm9yZSBpdCBpcyBmcmVlZC4KKworV2VkIE5vdiAyNCAwNzowMjo1MCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQUREUl9FWFBSKTogQWxzbyBwYXNzIGNvbnN0MF9ydHggaWYKKwluZWNlc3NhcnksIHRvIGF2b2lkIG11bHRpcGxlIGNsZWFudXAgcnVucy4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgV0lUSF9DTEVBTlVQX0VYUFIpOiBQYXNzIGNvbnN0MF9ydHggaWYKKwluZWNlc3NhcnksIHRvIGtlZXAgdGhlIHJlY3Vyc2l2ZSBjYWxsIGZyb20gcnVubmluZyB0aGUgc2FtZQorCWNsZWFudXBzIHR3aWNlLgorCShleHBhbmRfZXhwciwgY2FzZSBUQVJHRVRfRVhQUik6IERvbid0IHRyeSB0byBhZGQgdGhlIGNsZWFudXAgaWYKKwlpZ25vcmUncyBub24temVybywgc2luY2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgaXQuCisKK1R1ZSBOb3YgMjMgMjE6MTA6MjIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJQ3lnbnVzPC0+RlNGIEMrKyBmcm9udC1lbmQgbWVyZ2UuCisJVHVlIE5vdiAyMyAxMTowNToyOCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZXJyZm4uYyAoU1RSRFVQKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIChjaGFyICopLgorCisJTW9uIE5vdiAyMiAwMDowNzoxNyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogTW92ZSBkZWNsYXJhdGlvbiBvZiB0bXAgaW5zaWRlIHRoZSBibG9jaworCXRoYXQgdXNlcyBpdCwgc28gY29tcGlsZXJzIGRvbid0IHRyeSB0byBtaXMtb3B0aW1pemUgaXQgYXdheS4KKworCSogY3Atc2VhcmNoLmMgKGRmc19wdXNoZGVjbHMpOiBNYWtlIHN1cmUgdGhlcmUncyBhIGxhbmdfc3BlY2lmaWMKKwlub2RlIG9uIHRoZSBkZWNsIGJlZm9yZSB0cnlpbmcgdG8gcHJpbnQgdGhlIHdhcm5pbmcgb3V0LgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogU2F5IHRoZSBtZW1iZXIgd2FzIHJlZGVjbGFyZWQgYXMKKwlzdGF0aWMsIG5vdCBqdXN0IHRoYXQgaXQgY2FuJ3QgYmUgZGVjbGFyZWQgc3RhdGljLgorCisJKiBjcC1zZWFyY2guYyAoZ2V0X2ZpcnN0X21hdGNoaW5nX3ZpcnR1YWwpOiBEb24ndCBkbworCVNFVF9JREVOVElGSUVSX0VSUk9SX0xPQ1VTIGFzIGFuIGF0dGVtcHQgdG8gYXZvaWQgbXVsdGlwbGUgd2FybmluZ3MKKwl3aXRoIC1Xb3ZlcmxvYWRlZC12aXJ0dWFsLiAgSXQgY2hhbmdlcyB0aGUgY29tcGlsZXIncyBiZWhhdmlvcgorCShlbGljaXRzIHVud2FudGVkIGVycm9ycykuCisKKwlTYXQgTm92IDIwIDE5OjMxOjAxIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChsYW5nX3R5cGUpOiBBZGQgZmllbGQgYGhhc19ub25wdWJsaWNfY3RvcicsIGFuZCBkZWxldGUKKwlkdW1teSBzaW5jZSB3ZSB1c2VkIHRoZSB0d28gYml0cyBpdCB3YXMgaG9sZGluZyBvdXQgZm9yIHRoZSBNSVBTCisJY29tcGlsZXIuCisJKFRZUEVfSEFTX05PTlBVQkxJQ19DVE9SKTogRGVmaW5lZC4KKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IFNldCBUWVBFX0hBU19OT05QVUJMSUNfQ1RPUgorCWFzIGFwcHJvcHJpYXRlIGZvciBhIGNvcHkgY3RvciB3aXRoIG5vbi1wdWJsaWMgdmlzaWJpbGl0eS4KKwkoZmluaXNoX3N0cnVjdCk6IERvbid0IGdlbmVyYXRlIGEgY29weSBjdG9yIGlmIHRoZSB0eXBlIGlmIG9uZSBvZgorCWl0cyBmaWVsZHMgaGFzIGEgcHJpdmF0ZSBjb3B5IGN0b3IsIG9yIGEgcHJvdGVjdGVkIG9uZSBmb3Igd2hpY2ggd2UKKwlhcmVuJ3QgYWxsb3dlZCBhY2Nlc3MuCisJKGJhc2VfaW5mbyk6IEFkZCBtZW1iZXIgYHNhd19ub25wdWJsaWNfY3RvcicuCisJKGZpbmlzaF9iYXNlX3N0cnVjdCk6IFNldCBiLT5zYXdfbm9ucHVibGljX2N0b3IgaWYgbmVjZXNzYXJ5LgorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogTWFrZSBzdXJlIHRoZXJlJ3MgYQorCURFQ0xfTEFOR19TUEVDSUZJQyBiZWZvcmUgZ2V0dGluZyByZWFkeSB0byBncm9wZSBhcm91bmQgYSBjbGFzcy4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IENvbXBsYWluIGlmIHdlIGVuY291bnRlciBhCisJcG9pbnRlciB0byBtZW1iZXIuCisKKwlGcmkgTm92IDE5IDE2OjM3OjI4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChzdGFydF9kZWNsKTogQ29tcGxhaW4gd2hlbiBhIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzCisJcGFydCBvZiBhIHRlbXBsYXRlIGRlZmluaXRpb24sIGJ1dCB0aGUgY2xhc3MgaXQncyBzdXBwb3NlZCB0byBiZQorCXBhcnQgb2Ygd2Fzbid0IGEgdGVtcGxhdGUuCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCB3YXJuIGFib3V0IHNoYWRvd2luZyBhIG1lbWJlciBvZgorCWB0aGlzJyBpZiB0aGF0IG1lbWJlciBpcyBzdGF0aWMuCisKKwkqIGNwLWNhbGwuYyAoY29udmVydF9oYXJzaG5lc3Nfb2xkKTogRG9uJ3QgZGllIGlmIG9uZSBvZiB0aGUgdHlwZXMKKwlpc24ndCBhbiBhZ2dyZWdhdGUgd2l0aCBhIGJpbmZvLgorCShjb252ZXJ0X2hhcnNobmVzc19hbnNpKTogTGlrZXdpc2UuCisKKwlGcmkgTm92IDE5IDEyOjE4OjMxIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBGaXggdHlwbyBzbyBpbml0aWFsaXphdGlvbgorCW9mIGEgcG9pbnRlciBmcm9tIGFuIGludGVnZXIgYWN0dWFsbHkgd29yaywgcmF0aGVyIHRoYW4gZW1pdCBib2d1cworCWNvZGUuCisKKwkqIGNwLXB0LmMgKG92ZXJsb2FkX3RlbXBsYXRlX25hbWUpOiBBY2NlcHQgdW5pb25zIGZvciB0ZW1wbGF0ZXMuCisJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCisJKiBjcC1wYXJzZS55ICh0ZW1wbGF0ZV9pbnN0YW50aWF0ZV9vbmNlKTogTGlrZXdpc2UuCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogSW5zdGVhZCBvZiB1c2luZyB0aGUgInNob3J0cyIgbWV0aG9kIHRvCisJY2hlY2sgZm9yIG92ZXJmbG93LCB1c2UgdGhlIEMgZnJvbnQtZW5kJ3MgInBhcnRzIiBtZXRob2QgKHRvIGhhbmRsZQorCWFueSBzaXplLCBhbmQgbm90IHJlbHkgb24gbG9uZyBsb25nIGJlaW5nIDMyIGJpdHMgd2lkZSkuCisKKwlUaHUgTm92IDE4IDExOjUxOjM0IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogRGlzYWJsZSBlYXJsaWVyIGNoYW5nZTsgaXQKKwlzY3Jld3MgdXAgc3RhYnMgc29tZWhvdy4gIFZlcnkgc3RyYW5nZS4KKworCVRodSBOb3YgMTggMDA6MTY6MjkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogU2F5IHdoYXQgY2xhc3MgaXMgaW52b2x2ZWQgd2hlbiBzYXlpbmcKKwl3ZSBjYW4ndCBkZWNsYXJlIGEgbWVtYmVyIGluc2lkZSBpdC4KKworCSogY3AtbGV4LmMgKHJlYWxfeXlsZXgpOiBSZWNvZ25pemUgb3BlcmF0b3ItPigpIGFzIFBPSU5UU0FULCBub3QKKwlQT0lOVFNBVF9MRUZUX1JJR0hULiAgQnkgc3dhbGxvd2luZyB0aGUgcGFyZW5zLCB3ZSBlbmRlZCB1cCBuZXZlcgorCWJ1aWxkaW5nIHRoZSBjYWxsIHByb3Blcmx5IGZvciB0aGVtLgorCSogY3AtcGFyc2UueSAoUE9JTlRTQVRfTEVGVF9SSUdIVCk6IFJlbW92ZSB0b2tlbi4KKwkob3BlcmF0b3JfbmFtZSk6IFJlbW92ZSBQT0lOVFNBVF9MRUZUX1JJR0hUIHJ1bGUuCisJKiBjcC1zcGV3LmMgKGluaXRfc3Bldyk6IFJlbW92ZSBQT0lOVFNBVF9MRUZUX1JJR0hUIGZyb20KKwl0b2tzX2ZvbGxvd19pZHMuCisKKwkqIGNwLXBhcnNlLnkgKHByaW1hcnkpOiBPbmx5IHRyeSB0byBwcmludCBvdXQgdGhlIG9wZXJhdG9yJ3MgbmFtZSBpZgorCWl0J3MgdmFsaWQuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva19vcF9wcm9wZXJ0aWVzKTogRml4IG1pc3NpbmcgcGFyZW5zIHRvIGtlZXAgdGhlCisJbG9naWMgZnJvbSBhY2NpZGVudGFsbHkgZ2l2aW5nIGFuIGVycm9yIHdoZW4gaXQgc2hvdWxkbid0LgorCisJV2VkIE5vdiAxNyAyMDowNDowMCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGRmc19wdXNoZGVjbHMpOiBUUkVFX1BVUlBPU0UgZG9lc24ndCBoYXZlIHRvIGJlCisJYSBfREVDTCBmb3IgY2xhc3NfdmFsdWUgdG8gYmUgYW4gZW52ZWxvcGUsIGl0IGp1c3QgY2FuJ3QgYmUgYW4KKwlJREVOVElGSUVSX05PREUuCisKKwlXZWQgTm92IDE3IDE1OjU0OjAyIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZTIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRGVhbCB3aXRoIHBvaW50ZXJzIHRvCisJbWVtYmVycyBhcyBpbml0aWFsaXplcnMgZm9yIGluaXRpYWxpemVyIGxpc3RzLgorCisJV2VkIE5vdiAxNyAxMTo0ODozOCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChhbWJpX29wX3ApOiBBZGQgKysgYW5kIC0tLgorCisJKiBjcC1lcnJvci5jOiBMb3NlIHRoZSBhbm9uX3Bhcm1fbmFtZSBzdHVmZi4KKworCSogY3AtbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IENoYW5nZSBpbnB1dF9maWxlbmFtZSBmb3IKKwlzeW50aGV0aWMgY29kZS4KKworCSogY3AtZXJyb3IuYyAoZHVtcF9hZ2dyX3R5cGUpOiBBbHdheXMgcHJpbnQgY29uc3Qgb3Igdm9sYXRpbGUuCisJKGR1bXBfZnVuY3Rpb25fZGVjbCk6IE9ubHkgcHJpbnQgc3RhdGljIGlmIHZlcmJvc2UuCisKKwkqIGNwLWVycmZuLmMgKGNwX3NwcmludGYpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEJlIG1vcmUgdmVyYm9zZSBpbiBjb21wbGFpbnQgYWJvdXQgYXBwbHlpbmcKKwltZXRob2QgcXVhbGlmaWVycyB0byBub24tbWV0aG9kcy4KKworCVdlZCBOb3YgMTcgMDk6NTE6MDQgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChhdHRyaWIpOiBBY2NlcHQgIm5vcmV0dXJuIiBhdHRyaWJ1dGUuCisKKwlUdWUgTm92IDE2IDEyOjI4OjQ5IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChncm9rb3B0eXBlbmFtZSk6IEZpeCBoYW5kbGluZyBvZiB1ZGMncy4KKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX2NvbXBvbmVudF90eXBlX2V4cHIpOiBEaXR0by4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogQmUgbW9yZSB2ZXJib3NlIGluIGNvbXBsYWludAorCWFib3V0IG92ZXJsb2FkZWQgb3BlcmF0b3IgZGVsZXRlLgorCisJKiBjcC1kZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6IERvIG1vcmUgY2hlY2tpbmcgb24gb3BlcmF0b3JzLgorCShncm9rZGVjbGFyYXRvcik6IFJlbW92ZSBjaGVjayBmb3Igb3BzIGJlaW5nIG1lbWJlcnMsIGZpeCBoYW5kbGluZworCW9mIHVzZXItZGVmaW5lZCBjb252ZXJzaW9ucy4KKwkoZ3Jva2ZuZGVjbCk6IFJlbW92ZSBjaGVja3MgZm9yIG9wcywgbW92ZSBjYWxsIHRvIGdyb2tfb3BfcHJvcGVydGllcworCXVwLgorCShmaW5pc2hfZGVjbCk6IFJlbW92ZSBjaGVjayBmb3Igb3BzIHdpdGggZGVmYXVsdCBhcmd1bWVudHMuCisJKGFtYmlfb3BfcCk6IE5ldyBmbiwgbmFtZSBmb3IgZWl0aGVyIHVuYXJ5IG9yIGJpbmFyeSBvcAorCSh1bmFyeV9vcF9wKTogTmV3IGZuLCBjaGVja3MgbmFtZSBmb3IgdW5hcnkgb3AKKworCU1vbiBOb3YgMTUgMTI6Mzg6NTQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AcnRsLmN5Z251cy5jb20pCisKKwkqIGcrKy5jIChtYWluKTogSWYgdGhleSBnYXZlIHVzIC12LCBhbHNvIHNob3cgdGhlIGludm9jYXRpb24gb2YgdGhlCisJZ2NjIGRyaXZlci4KKworCU1vbiBOb3YgMTUgMTI6MDQ6NDcgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBMb3NlICJvcGVyYXRvciA8dHlwZW5hbWU+Ii4KKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX2NvbXBvbmVudF90eXBlX2V4cHIpOiBEaXR0by4KKworCSogY3AtZGVjbDIuYyAoZ3Jva29wdHlwZW5hbWUpOiBEaXR0by4KKworCU1ha2UgQysrIGFjY2VwdCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGFzIHR5cGUgbmFtZXM7IGZvciBleGFtcGxlLAorCWRvaW5nIGB0ZW1wbGF0ZSA8Y2xhc3MgVCwgVCB0PiBBIHsuLi59Jy4KKworCSogY3AtcHQuYyAoZW5kX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IEZpeCBhIGJ1ZyBpbiBnczR0J3MgcGF0Y2guCisJKGdyb2tfdGVtcGxhdGVfdHlwZSk6IFNpbXBsaWZ5LgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHJfMSk6IEdpdmUgZXJyb3IgaWYgdHJ5aW5nIHRvCisJZ2V0IGRlZmF1bHQgb3BlcmF0b3I9IGZvciBjbGFzcyB3aGVyZSB5b3UgY2FuJ3QuCisKKwkqIGNwLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogVW5pZm9ybWlmeSwgZml4IHJlZGVjbGFyYXRpb24gb2YKKwlidWlsdGlucy4KKworCVNhdCBOb3YgIDYgMTk6MDY6MjUgRVNUIDE5OTMgR25hbmFzZWthcmFuIFN3YW1pbmF0aGFuIChnczR0QHZpcmdpbmlhLmVkdSkKKworCSogY3AtcHQuYyAoYmVnaW5fdGVtcGxhdGVfcGFybV9saXN0KTogcHVzaGRlY2wgaGVyZSBzbyB0aGF0IHdlCisJY2FuIHB1c2ggVEVNUExBVEUgUEFSQU1FVEVSUyBhcyB0eXBlIG5hbWVzLgorCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBidWlsZF9sYW5nX2RlY2wgZm9yIFRFTVBMQVRFCisJUEFSQU1FVEVSUyBoZXJlLgorCShncm9rX3RlbXBsYXRlX3R5cGUpOiBOZXcgZnVuY3Rpb24uIGdldCB0aGUgYWN0dWFsIHR5cGUgb2YgYQorCVRFTVBMQVRFIFBBUkFNRVRFUi4KKwkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogZGVsZXRlIHB1c2hkZWNsIGFzIGl0IGlzIG1vdmVkIChzZWUKKwlhYm92ZSkuIERvbid0IGJ1aWxkIHR5cGUgZGVjbHMgZm9yIFRFTVBMQVRFIFBBUkFNRVRFUlMgYXMgaXQgaXMKKwlidWlsdCBhYm92ZS4KKwkKKwlNb24gTm92IDE1IDEyOjA0OjQ3IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IElmIGEgZnVuY3Rpb24gaGFzIGJlZW4gZGVjbGFyZWQgd2l0aAorCWV4cGxpY2l0IGxhbmd1YWdlIGxpbmthZ2UsIHJlZGVjbGFyaW5nIChvciBkZWZpbmluZykgaXQgd2l0aG91dAorCWlzIE9LLgorCisJRnJpIE5vdiAxMiAxNTozMDoyNyAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKG9wZXJhdG9yX25hbWVfc3RyaW5nKTogRml4IGhhbmRsaW5nIG9mIF9fYWRfX2Zvby4KKworCSogY3AtZXJyb3IuYyAoZHVtcF9kZWNsKTogSGFuZGxlIGRlbWFuZ2xpbmcgb2YgdnRhYmxlIG5hbWVzLgorCisJKiBjcC10cmVlLmMgKGxhbmdfcHJpbnRhYmxlX25hbWUpOiBQYXNzIGV2ZXJ5dGhpbmcgdG8gZGVjbF9hc19zdHJpbmcsCisJbm90IGp1c3QgZnVuY3Rpb25zLgorCisJKiBjcC1kZWNsMi5jIChjaGVja19jbGFzc2ZuKTogVXNlIGNwX2Vycm9yLgorCisJKiBjcC1lcnJvci5jIChkdW1wX2RlY2wpOiBGaXggSURFTlRJRklFUl9UWVBFTkFNRV9QIGNhc2UuCisKKwkqIGNwLW1ldGhvZC5jIChidWlsZF9kZWNsX292ZXJsb2FkKTogUHJvcGFnYXRlIElERU5USUZJRVJfT1BOQU1FX1AKKwl0byBtYW5nbGVkIGlkZW50aWZpZXIuCisKKwkqIGNwLXR5cGUyLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogQWRkICJjb25mdXNpb24iIG1lc3NhZ2UgZm9yCisJYWJvcnQgYWZ0ZXIgZWFybGllciBlcnJvcnMuCisKKwlXZWQgTm92IDEwIDE4OjM5OjE3IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBJbmNsdWRlIHdhcm5fZW51bV9jbGFzaCBhbW9uZworCS1XYWxsLgorCisJV2VkIE5vdiAxMCAxNjoxODoxOSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1jcC1wYXJzZSk6IFVwZGF0ZSBjb3VudHMuCisKKwlXZWQgTm92IDEwIDE1OjI3OjEyIDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1lcnJmbi5jIChjcF90aGluZyk6IEFsbG93IGNwXypfYXQgdG8gdXNlIGFuIGFyYml0cmFyeSBhcmd1bWVudCwKKwlub3QganVzdCB0aGUgZmlyc3QsIGJ5IHVzaW5nLCBmb3IgaW5zdGFuY2UsIGAlK0QnLgorCisJTW9uIE5vdiAgOCAxMzo1MDo0OSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZXJyb3IuYyAobGFuZ3VhZ2VfYXNfc3RyaW5nKTogTmV3IGZ1bmN0aW9uIGZvciBwcmludGluZyBsYW5ndWFnZQorCWNvbnRleHQuICBDb3JyZXNwb25kcyB0byAlTC4KKworCU1vbiBOb3YgIDggMTA6Mzk6MjggMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKHJlaW5pdF9wYXJzZV9mb3JfdGVtcGxhdGUpOiBVc2UgaW5saW5lX3RleHRfb2JzdGFjaworCWluc3RlYWQgb2YgcGVybWFuZW50X29ic3RhY2sgc28gdGhhdCB5eWxleCgpIGRvZXNuJ3QgY2xvYmJlciB0aGUKKwlncm93aW5nIG9iamVjdC4KKworCSogY3AtbGV4LmMgKHJlaW5pdF9wYXJzZV9mb3JfYmxvY2spOiBPdmVyaGF1bCB0byByZWR1Y2UgY29kZSBzaXplIGJ5CisJaGFsZiBhbmQgbWFrZSAjbGluZSBkaXJlY3RpdmVzIGluIHRlbXBsYXRlIGRlZmluaXRpb25zIHdvcmsuCisKKwlTdW4gTm92ICA3IDE1OjE5OjI4IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IGlmICghc2V0dXBfcGFyc2UpLCBkb24ndAorCW1lc3Mgd2l0aCBsaW5lbm8gYW5kIGlucHV0X2ZpbGVuYW1lLgorCisJTW9uIE5vdiAgMSAxODoxNTo1OSAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogRml4IHdoZW4gcGFzcyByZWYgdG8gYXJyYXkgYXMgCisJaW5pdGlhbGl6ZXIsIHRoZSBhcmd1bWVudCB0eXBlIGlzIGNvbnZlcnQgdG8gcG9pbnRlciBhbmQgdGhlIHR5cGUKKwlpbiB0aGUgZmllbGQgb2YgdGhlIGNsYXNzIHNob3VsZCBhbHNvIGNvbnZlcnQgdG8gcG9pbnRlci4KKworCUZyaSBOb3YgIDUgMTE6NTc6NDEgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogV29yayBwcm9wZXJseSB3aXRoCisJLWZleHRlcm5hbC10ZW1wbGF0ZXMuCisKKwkqIGNwLWxleC5jIChleHRyYWN0X2ludGVyZmFjZV9pbmZvKTogI2lmIDAgb3V0IGVhcmxpZXIKKwl0aW5zdF9sZXZlbCB3b3JrIHBlbmRpbmcgZnVydGhlciB3b3JrLgorCisJRnJpIE5vdiAgNSAwNzozOTowMCAxOTkzICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGJsdWVzLmN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChjb21wdXRlX3Zpc2liaWxpdHkpOiBEb24ndCBsb3NlIGFjY2VzcyB0byBwdWJsaWMKKwltZW1iZXJzIGZyb20gYmFzZSBjbGFzc2VzIG9mIGJhc2UgY2xhc3Nlcy4KKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW4KKwlMSFNCVUYgZm9yIHRoZSBudWxsIHRlcm1pbmlhdG9yLgorCisJVHVlIE5vdiAgMiAwNzoyMDowMyAxOTkzICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGJsdWVzLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGJ1aWxkX3B1c2hfc2NvcGUpOiBEb24ndCBwdXNoIHRoZSBzY29wZSBmb3IKKwlwdHItdG8tbWV0aG9kIGRlY2xhcmF0aW9ucy4gIEFsc28sIGNsYXJpZnkgc29tZSBjb21tZW50cy4KKworCSogY3AtcGFyc2UueSAoYWJzX21lbWJlcl9kZWNsYXJhdG9yKTogQWRkIGBzZWVfdHlwZW5hbWUnIGVwc2lsb24KKwlydWxlIHNvIHRoYXQgcGFyc2VyIGNhbiByZWNvZ25pemUgcHRyLXRvLW1lbWJlciBmdW5jdGlvbnMuCisKKwlNb24gTm92ICAxIDE4OjE1OjU5IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmMoY29udmVydF90b19yZWZlcmVuY2UpOiBGaXggd2hlbiBwYXNzIHJlZiB0byBhcnJheSBhcyAKKwlpbml0aWFsaXplciwgdGhlIGFyZ3VtZW50IHR5cGUgaXMgY29udmVydCB0byBwb2ludGVyIGFuZCB0aGUgdHlwZQorCWluIHRoZSBmaWVsZCBvZiB0aGUgY2xhc3Mgc2hvdWxkIGFsc28gY29udmVydCB0byBwb2ludGVyLgorCisJTW9uIE5vdiAgMSAxMTowNjozOSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZXJyZm4uYzogRG9uJ3QgaW5jbHVkZSA8c3RyaW5nLmg+LgorCURvbid0IHVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHN0cmNweS4KKworCVN1biBPY3QgMzEgMjI6MzI6MDUgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogUmV0dXJuICh2b2lkKTAgaWYgdHJ5aW5nIHRvCisJY2FsbCBhIG5vbmV4aXN0ZW50IGRlc3RydWN0b3IuCisKKwkqIGNwLXBhcnNlLnkgKG9iamVjdCk6IFN1cHBvcnQgcC5+aW50KCkuCisKKwkqIGNwLWVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBlcnJvcl9tYXJrX25vZGUgYmV0dGVyLgorCisJU2F0IE9jdCAzMCAyMTo0OTowMCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAocHJpbWFyeSk6IFN1cHBvcnQgcC0+fmludCgpLgorCisJRnJpIE9jdCAyOSAxODowOToxMiAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGUyLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IERvbid0IGRlbGV0ZSB0aGluZ3MgdHdpY2UuCisKKwlUaHUgT2N0IDI4IDE1OjM1OjU1IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKHN0cnVjdCB0aW5zdF9sZXZlbCk6IFRoZSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGxldmVsCisJc3RydWN0dXJlLiAgVXNlZCBieSB0aGUgY29kZSBkZXNjcmliZWQgYmVsb3cuCisKKwkqIGNwLXB0LmMgKHB1c2hfdGluc3RfbGV2ZWwpOiBOZXcgZnVuY3Rpb24gZm9yIHJlbWVtYmVyaW5nIGZpbGUKKwljb250ZXh0IHdoZW4gaW5zdGFudGlhdGluZyB0ZW1wbGF0ZXMuICBTdG9yZXMgdGhlIGlkZW50aWZpZXIgYXMgd2VsbCwKKwlmb3IgZXJyb3IgcmVwb3J0aW5nLgorCShwb3BfdGluc3RfbGV2ZWwpOiBEYSBvcHBvc2l0ZS4KKwkodGluc3RfZm9yX2RlY2wpOiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdGluc3RfbGV2ZWwgc3RydWN0dXJlIHRvCisJdXNlIGZvciBkZXRlcm1pbmluZyB3aGljaCBmaWxlIHRvIGFzc29jaWF0ZSB0aGUgY3VycmVudCBERUNMIHdpdGgsIG9yCisJTlVMTCB0byB1c2UgdGhlIGN1cnJlbnQgZmlsZSBhbmQgbGluZS4gIFRvIHJlc3RvcmUgdGhlIG9sZCBiZWhhdmlvciwKKwlqdXN0IGNoYW5nZSB0aGlzIGZ1bmN0aW9uIHRvICJyZXR1cm4gMDsiLgorCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IHB1c2hfdGluc3RfbGV2ZWwuCisKKwkqIGNwLXBhcnNlLnkgKHRtcGxhdGVfaW5zdGFudGlhdGVfb25jZSk6IHBvcF90aW5zdF9sZXZlbCgpIGFmdGVyCisJaW5zdGFudGlhdGluZyBtZW1iZXIgdGVtcGxhdGVzLgorCisJKiBjcC1sZXguYyAoZXh0cmFjdF9pbnRlcmZhY2VfaW5mbyk6IElmIGluc3RhbnRpYXRpbmcgYSB0ZW1wbGF0ZSwKKwlzZXQgdXAgaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uIGFjY29yZGluZyB0byB0aGUgc3BvdCBpbiB0aGUgdXNlcidzCisJY29kZSB0aGF0IHRyaWdnZXJlZCB0aGUgaW5zdGFudGlhdGlvbi4KKworCSogY3AtcHQuYyAodHN1YnN0KTogQXNzb2NpYXRlIHRoZSBGVU5DVElPTl9ERUNMIHdpdGggdGhlIHNwb3QgaW4gdGhlCisJdXNlcidzIGNvZGUgdGhhdCB0cmlnZ2VyZWQgdGhlIGluc3RhbnRpYXRpb24uICAqQ3VycmVudGx5IGRpc2FibGVkKgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogSWYgd2UncmUgaW5zdGFudGlhdGluZyBhIHRlbXBsYXRlLAorCWFzc29jaWF0ZSB0aGUgVFlQRV9ERUNMIHdpdGggdGhlIHNwb3QgaW4gdGhlIHVzZXIncyBjb2RlIHRoYXQKKwl0cmlnZ2VyZWQgdGhlIGluc3RhbnRpYXRpb24uICAqQ3VycmVudGx5IGRpc2FibGVkKgorCisJKiBjcC1wdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBEbyBleHRyYSBjaGVja2luZyBvbiB0aGUgdGVtcGxhdGUKKwlwYXJtcywgc2luY2UgdGVtcGxhdGVzIGFyZSBtb3JlIHBpY2t5IHRoYW4gaW5pdGlhbGl6ZXJzLgorCisJV2VkIE9jdCAyNyAxNzowNjo1NCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoZGF0YWRlZik6IERvbid0IG92ZXJyaWRlIGEgdGVtcGxhdGUgd2l0aCBhIGZvcndhcmQKKwlkZWNsYXJhdGlvbiBvZiBhIHRlbXBsYXRlIGNsYXNzLgorCisJVHVlIE9jdCAyNiAxNzo1NDoxMiAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKGNvbXBvbmVudC1kZWNsYXJhdG9yMCk6IGZpeCBiaXQgZmllbGQgbmFtZSBzYW1lIGFzIHR5cGUKKwluYW1lIHN5bnRheCBlcnJvci4KKworCVR1ZSBPY3QgMjYgMTY6MDc6MjkgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogRml4IHR5cG8sIGZpeGVzIGNvcmUgZHVtcCBvbiBiYWQKKwljb2RlLgorCisJVHVlIE9jdCAyNiAxMTo1MjowOSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZXJyb3IuYyAoZHVtcF9mdW5jdGlvbl9kZWNsKTogT25seSBwcmludCBkZWZhdWx0IGFyZ3VtZW50cworCWlmIHZlcmJvc2UuCisJKGR1bXBfdHlwZSk6IERpdHRvLgorCisJTW9uIE9jdCAyNSAyMjoxODowNSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNfc2l6ZW9mLCBidWlsZF9jX2Nhc3QpOiAgUmUtZW5hYmxlIFNhbHplbmJlcmcncworCUp1bHkgMTAgY2hhbmdlIChzZXQgVFJFRV9PVkVSRkxPVyBhcyB3ZWxsIGFzIFRSRUVfQ09OU1RBTlRfT1ZFUkZMT1cpLgorCisJTW9uIE9jdCAyNSAxODo1MzowOCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCBkbyB0aGUKKwlwdXNoX3RlbXBsYXRlX2RlY2xzIHRoYW5nIGlmICFzZXR1cF9wYXJzZTsgdGhlIGJpbmRpbmcgbGV2ZWwKKwluZXZlciBnZXRzIHBvcHBlZC4KKworCU1vbiBPY3QgMjUgMTE6NTQ6MzQgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogZml4IHNlZyBmYXVsdCB3aGVuIGFuCisJZXh0ZXJuYWwgdmFyaWFibGUgZG9lcyBub3QgaGF2ZSBjbGFzcyBjb250ZXh0LgorCisJU3VuIE9jdCAyNCAxOTowMToxNSAxOTkzICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGJsdWVzLmN5Z251cy5jb20pCisKKwkqIGNwLXNwZXcuYyAoc2Nhbl90b2tlbnMpOiBUZXN0IGZvciAnOycgaW4gZmlyc3QgcHJlLXNjYW4gb2YgdGhlCisJdG9rZW5zLgorCisJRnJpIE9jdCAyMiAyMzo0NjoxNyAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChnZXRfZGVjbF9saXN0KTogV2hlbiBjb25zaW5nIHVwIENMQVNTVFlQRV9JRF9BU19MSVNULAorCWRvbid0IGFzc3VtZSB0aGF0IGB2YWx1ZScgaXMgYSByZWFzb25hYmxlIGlkZW50aWZpZXIgdG8gdXNlLgorCShsaXN0X2hhc2hfbG9va3VwX29yX2NvbnMpOiBEaXR0by4KKworCSogY3AtZXJyb3IuYyAoZHVtcF9kZWNsLCBDT05TVF9ERUNMKTogUGFzcyBvZmYgbm9uLWVudW0gY2FzZXMgdG8KKwlkdW1wX2V4cHIuCisJKGR1bXBfZXhwcik6IFBhc3Mgb2ZmIERFQ0xzIHRvIGR1bXBfZGVjbC4KKworCUZyaSBPY3QgMjIgMjA6NTc6NDYgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1lcnJmbi5jIChTVFJEVVApOiBDaGFuZ2UgdG8gY29tbWEgZXhwciBmb3IgYmRtYWdlZCBjYydzLgorCShjcF90aGluZyk6IEFkZCBkZWNsIGZvciBhcCwgaW5pdGlhbGl6ZSBmbXQgbGF0ZXIuCisKKwlGcmkgT2N0IDIyIDE3OjE1OjAxIDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1lcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgQ09OU1RfREVDTHMgZm9yIGVudW0gdGFncy4KKworCSogY3AtdHlwZTIuYyAobXlfZnJpZW5kbHlfYWJvcnQpOiBNb3ZlIGFib3J0Y291bnQgdG8gZ2xvYmFsIGxldmVsLgorCisJKiBjcC1zZWFyY2guYyAoZGZzX3B1c2hkZWNscyk6IEJlIG1vcmUgaGVscGZ1bCBpbiBzaGFkb3dpbmcgd2FybmluZy4KKworCSogY3AtcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogSWYgdGhlIGxhc3QgdGVtcGxhdGUKKwlwYXJhbWV0ZXIgd2FzIGFsc28gYSB0ZW1wbGF0ZSBjbGFzcywgaW5zZXJ0IGEgc3BhY2Ugc28gdGhhdAorCXRoZSBtYW5nbGVkIG5hbWUgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSBjb21waWxlciAoaS5lLgorCXdpdGggZGVmYXVsdF9jb3B5X2NvbnN0cnVjdG9yX2JvZHkpLgorCisJRnJpIE9jdCAyMiAxNjo0MDoyNyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwlIYW5kbGUgY29uc3RydWN0b3JzIGluIHRlbXBsYXRlcyBiZXR0ZXIuCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgY29uc3RydWN0b3JfbmFtZV9mdWxsIGluc3RlYWQKKwlvZiBjb25zdHJ1Y3Rvcl9uYW1lLgorCSogY3AtY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlLCBjb252ZXJ0LCBidWlsZF90eXBlX2NvbnZlcnNpb25fMSwKKwlidWlsZF90eXBlX2NvbnZlcnNpb24pOiBEaXR0by4KKwkqIGNwLWRlY2wuYyAobWFrZV90ZW1wb3JhcnlfZm9yX3JlZmVyZW5jZSwgZ3Jva19yZWZlcmVuY2VfaW5pdCk6CisJRGl0dG8uCisJKiBjcC1pbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQsIGV4cGFuZF9hZ2dyX2luaXRfMSwgYnVpbGRfbmV3KToKKwlEaXR0by4KKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcl8xLCBjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6CisJRGl0dG8uCisJKiBjcC1zZWFyY2guYyAobG9va3VwX2ZpZWxkLCBsb29rdXBfZm5maWVsZHMpOiBDaGVjayBmb3Igc2hvcnQKKwljb25zdHJ1Y3RvciBuYW1lLCBhcyB0aGF0IGlzIGhvdyB3ZSBzdG9yZSBpdC4KKwkqIGNwLWRlY2wyLmMgKGNvbnN0cnVjdG9yX25hbWVfZnVsbCk6IE5ldyByb3V0aW5lLgorCSogY3AtdHJlZS5oIChjb25zdHJ1Y3Rvcl9uYW1lX2Z1bGwpOiBEZWNsYXJlIGl0LgorCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENoZWNrIGZvciBlaXRoZXIgc2hvcnQgb3IgdGhlIGZ1bGwKKwljb25zdHJ1Y3RvciBuYW1lLgorCisJV2VkIE9jdCAyMCAxNzoxNzozNyAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oOiBEZWNsYXJlIGNvZGVfYXNfc3RyaW5nLgorCisJKiBjcC1lcnJvci5jIChjb2RlX2FzX3N0cmluZyk6IE5ldyBmdW5jdGlvbiwgdHJhbnNsYXRlcworCWVudW0gdHJlZV9jb2RlIGludG8gYSBzdHJpbmcuICBWZXJ5IGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKworCSogY3AtZGVjbC5jIChsb29rdXBfdGFnKTogVXNlIGNwX2Vycm9yIG1vcmUuCisKKwlUdWUgT2N0IDE5IDE2OjM5OjIwIDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1lcnJvci5jIChkdW1wX3R5cGVfcHJlZml4KTogRG8gdGhlIHByZWZpeC9zdWZmaXggdGhhbmcgZm9yCisJQVJSQVlfVFlQRSBub2Rlcy4KKworCVRodSBPY3QgMTQgMjM6NTY6MzQgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWdjLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IEF2b2lkIGRvaW5nIHJ1bnRpbWUgd29yayBpZiBwb3NzaWJsZS4KKwkoYnVpbGRfdHlwZWlkKTogQWRkIGxvZ2ljLgorCisJVGh1IE9jdCAxNCAxMDo1Njo0MyAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZ2MuYyAoYnVpbGRfdHlwZWlkKTogTmV3IGZ1bmN0aW9uLCBhbGxlZ2VkbHkgcmV0dXJucyB0aGUKKwlUeXBlX2luZm8gb2JqZWN0IGZvciB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLCBjdXJyZW50bHkgZG9lcworCW5vdGhpbmcuCisJKGdldF90eXBlaWQpOiBOZXcgZnVuY3Rpb24sIGFsbGVnZWRseSByZXR1cm5zIHRoZSBUeXBlX2luZm8gb2JqZWN0CisJZm9yIGEgX1RZUEUgbm9kZSwgY3VycmVudGx5IGRvZXMgbm90aGluZy4KKwkoYnVpbGRfZHluYW1pY19jYXN0KTogTmV3IGZ1bmN0aW9uLCBzdXBwb3NlZGx5IGltcGxlbWVudHMKKwlydW4tdGltZSBjaGVja2VkIGNhc3RpbmcsIGN1cnJlbnRseSBvbmx5IGRvZXMgd2hhdCBjYW4gYmUgZG9uZQorCWF0IGNvbXBpbGUgdGltZS4KKworCSogY3AtcGFyc2UueSAoLmtpbmRvZl9wdXNobGV2ZWwpOiBPbmx5IHB1c2ggZmlyc3QgZGVjbCAodGhlIHZhcmlhYmxlKS4KKwkocHJpbWFyeSk6IEFkZCBkeW5hbWljX2Nhc3QgYW5kIHR5cGVpZCBleHByZXNzaW9ucy4KKwkoc2ltcGxlX2lmKTogVXNlIHBhcnRpYWxseV9zY29wZWRfc3RtdCBhZ2Fpbi4KKwlNYWtlcyAnaWYnIGNvbmRpdGlvbiB3b3JrLgorCisJKiBjcC1lcnJvci5jIChleHByX2FzX3N0cmluZyk6IFN1cHByZXNzIHBhcmVucyBvbiBpbml0aWFsIGNhbGwKKwl0byBkdW1wX2V4cHIuCisKKwkqIGNwLXRyZWUuaDogQWRkIGRlY2xzIGZvciBUeXBlX2luZm9fdHlwZV9ub2RlLCBidWlsZF90eXBlaWQsCisJZ2V0X3R5cGVpZCBhbmQgYnVpbGRfZHluYW1pY19jYXN0LgorCisJKiBncGx1cy5ncGVyZjogQWRkIHR5cGVpZCBhbmQgZHluYW1pY19jYXN0LgorCisJKiBjcC1zcGV3LmMgKGluaXRfc3Bldyk6IERpdHRvLgorCisJV2VkIE9jdCAxMyAxOToxNToyMSAxOTkzIEphc29uIE1lcnJpbGwgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwlQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIFN0cm91c3RydXAncyBwcm9wb3NhbCBmb3IgZGVjbGFyYXRpb25zIGluCisJY29uZGl0aW9ucyBmcm9tIFgzSjE2LzkyLTAxMjEuCisKKwkqIGNwLXBhcnNlLnkgKHBhcmVuX2NvbmRfb3JfbnVsbCk6IE5ldyBydWxlLCB1c2UgY29uZGl0aW9uIGluc3RlYWQKKwlvZiBleHByLgorCSh4Y29uZCk6IERpdHRvLgorCShjb25kaXRpb24pOiBOZXcgcnVsZSwgdXNlZCBpbiB0aGUgY29uZGl0aW9uIHBhcnRzIG9mIGlmLCB3aGlsZSwgZm9yCisJYW5kIHN3aXRjaCBzdGF0ZW1lbnRzLiAgQWxsb3dzIGEgcmVzdHJpY3RlZCBzZXQgb2YgZGVjbGFyYXRpb25zIG9mCisJdGhlIGZvcm0gInR5cGVfc3BlY2lmaWVyIGRlY2xhcmF0b3IgPSBleHByZXNzaW9uIi4KKwkoLmtpbmRvZl9wdXNobGV2ZWwpOiBMaWtlIHB1c2hsZXZlbCwgYnV0IHB1c2hlcyBhbGwgb2YgdGhlIGRlY2xzCisJZnJvbSB0aGUgcHJldmlvdXMgYmluZGluZyBsZXZlbCBpbnRvIHRoZSBuZXcgb25lIHRvby4KKwkocGFydGlhbGx5X3Njb3BlZF9zdG10KTogTGlrZSBpbXBsaWNpdGx5X3Njb3BlZF9zdG10LCBidXQgdXNlcworCS5raW5kb2ZfcHVzaGxldmVsIGluc3RlYWQgb2YgLnB1c2hsZXZlbC4KKwkoc2ltcGxlX2lmKTogLnB1c2hsZXZlbCBiZWZvcmUgY29uZGl0aW9uLgorCShzaW1wbGVfc3RtdCwgc2ltcGxlX2lmIEVMU0UpOiBEaXR0bywgcG9wIGJpbmRpbmcgbGV2ZWwuCisJKHNpbXBsZV9zdG10LCBzaW1wbGVfaWYpOiBEaXR0by4KKwkoc2ltcGxlX3N0bXQsIFdISUxFKTogRGl0dG8uCisJKHNpbXBsZV9zdG10LCBmb3JoZWFkLjEpOiAucHVzaGxldmVsIGJlZm9yZSBjb25kaXRpb24sIHVzZSB4Y29uZAorCWluc3RlYWQgb2YgeGV4cHIsIHBvcCBiaW5kaW5nIGxldmVsLgorCShzaW1wbGVfc3RtdCwgZm9yaGVhZC4yKTogVXNlIHhjb25kIGluc3RlYWQgb2YgeGV4cHIsIGFsd2F5cyBwb3AKKwliaW5kaW5nIGxldmVsLgorCShzaW1wbGVfc3RtdCwgU1dJVENIKTogLnB1c2hsZXZlbCBiZWZvcmUgY29uZGl0aW9uLCBldGMsIGV0Yy4KKwkoZm9yaGVhZC4yKTogYWx3YXlzIC5wdXNobGV2ZWwuCisJKGRhdGFkZWYpOiBVc2UgY3BfZXJyb3IgbW9yZS4KKwkoc2ltcGxlX3N0bXQsIENBU0UpOiBEaXR0by4KKworCSogY3AtZGVjbDIuYyAocHVzaGRlY2xzKTogTmV3IGZ1bmN0aW9uLCBwdXNoIGFsbCBkZWNscyBpbiB0aGUgY2hhaW4KKwlpbnRvIHRoZSBjdXJyZW50IHNjb3BlLgorCisJV2VkIE9jdCAxMyAxMjozMTo1OCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYzogUmVtb3ZlIHJlZGVmaW5pdGlvbiBvZiBOVUxMLCBhcyBzb21lIG1hY2hpbmVzIGRvbid0CisJICBsaWtlIGl0LiAgQ2xlYW4gdXAgYWxsIE5VTEwgdXNlcy4KKworCU1vbiBPY3QgMTEgMTc6MjE6MDggMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfZmlsZSk6IEZpeCBsaWJnKysgYnVpbGQgcHJvYmxlbSBvZiBtaXNtYXRjaAorCSAgYmxvY2tzLgorCisJTW9uIE9jdCAxMSAxMzo1MTowNSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlNb24gT2N0ICA0IDExOjQ5OjQ4IDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IENoZWNrIHdoZXRoZXIgcmVjdXJzaXZlIGNhbGxzCisJcmV0dXJuIGVycm9yX21hcmtfbm9kZS4KKworCU1vbiBPY3QgIDQgMTI6NDE6MTYgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFRvby1sb25nIGJpdGZpZWxkIGlzIGFuIGVycm9yLgorCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6ICJpbmxpbmUgbWFpbigpIiBpcyBhbiBlcnJvci4KKwkoZ3Jva19vcF9wcm9wZXJ0aWVzKTogT3ZlcmxvYWRlZCA/OiBpcyBhbiBlcnJvci4KKwkoc3RhcnRfZW51bSk6IER1cGxpY2F0ZSBlbnVtIGRlZmluaXRpb24gaXMgYW4gZXJyb3IuCisKKwlNb24gT2N0ICA0IDEyOjQ1OjExIDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIGNwLXR5cGVjay5jIChjb21tb25fdHlwZSk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCB3aGVuIHByZWZlcnJpbmcKKwlsb25nIGludCB0byBpbnQgKHdoZW4gd2lkdGggaXMgdGhlIHNhbWUpLgorCisJTW9uIE9jdCAgNCAxMjo0Njo1NCAxOTkzICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQorCisJKiBjcC10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IE1pc21hdGNoIGluIHNpZ25lZG5lc3MKKwlvZiBwb2ludGVyIHRhcmdldHMgc2hvdWxkIG5vdCBpbmhpYml0IHdhcm5pbmdzIGZvciBjb25zdCBtaXNtYXRjaC4KKworCU1vbiBPY3QgIDQgMTI6NTM6MDQgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogY3AtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IENvbnZlcnQgdG8gdW5zaWduZWQgaW50CisJaWYgb3JpZ2luYWwgdHlwZSBpcyB1bnNpZ25lZCBhbmQgb2YgZ3JlYXRlciBvciBlcXVhbCBzaXplLgorCisJTW9uIE9jdCAxMSAxMzoxOTo0MiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoYnVpbGRfZW51bWVyYXRvcik6IENhbGwgZGVmYXVsdF9jb252ZXJzaW9uIG9uIHRoZSBWQUxVRQorCWJlZm9yZSBjYWxsaW5nIGNvbnN0YW50X2V4cHJlc3Npb25fd2FybmluZy4KKworCU1vbiBPY3QgMTEgMTA6MjE6MzcgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IGZpeCB0aGUgbWlzbWF0Y2ggTEJCIExCRSBibG9jaworCSAgcHJvYmxlbSwgc3BlY2lmaWNhbGx5IHdoZW4gY29tcGlsZXIgZ2VuZXJhdGVkCisJICBkZXN0cnVjdG9yL2NvbnN0cnVjdG9yIChwcjI5NzIpCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfZmlsZSk6IHNhbWUgYXMgYWJvdmUKKyAgICAgICAgKiBjcC1wYXJzZS55IChjb21wc3RtdCk6IHNhbWUgYXMgYWJvdmUKKworCU1vbiBPY3QgMTEgMDE6MDg6MDkgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWVycm9yLmMgKGR1bXBfdHlwZV9zdWZmaXgpOiBDb3BlIHdpdGggYXJyYXlzIHdpdGggdW5zcGVjaWZpZWQKKwlib3VuZHMuCisKKwlUaHUgT2N0ICA3IDE5OjM1OjI2IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1lcnJvci5jOiAgRGVhbCB3aXRoIHByaW50aW5nIG91dCBhcnJheSBERUNMcyBwcm9wZXJseS4KKwlVc2UgZHVtcF9jaGFyIGZvciBwcmludGluZyBvdXQgc3RyaW5nIGxpdGVyYWxzLCB0b28uCisKK1R1ZSBOb3YgMjMgMTg6MDg6MjcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkd2FyZm91dC5jIChmdW5jdGlvbl9zdGFydF9sYWJlbCk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2VudHJ5X3BvaW50X2RpZSk6IFVzZSBpdC4KKwkob3V0cHV0X2dsb2JhbF9zdWJyb3V0aW5lX2RpZSwgb3V0cHV0X2xvY2FsX3N1YnJvdXRpbmVfZGllKTogVXNlIGl0LgorCisJKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IEFsd2F5cyB1c2UgVFlQRV9NQUlOX1ZBUklBTlQKKwl3aGVuIGNvbXBhcmluZyBjdXJfdHlwZSBhZ2FpbnN0IHdhbnRlZF90eXBlLgorCisJKiBwcm90b2l6ZS5jIChzYXZlX2RlZl9vcl9kZWMpOiBJZiBmdW5jdGlvbidzIGF1eCBpbmZvIGRvZXNuJ3QgZW5kCisJd2l0aCBhIGNsb3NlcGFyZW4sIGlnbm9yZSBpdC4KKwkoeG1hbGxvYywgeHJlYWxsb2MpOiBDYXN0IHJlc3VsdCBvZiBtYWxsb2MuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IERvbid0IGFjY2VwdCBjb21wbGV4IHR5cGVzCisJZm9yIG1heCwgbWluLCBsdCwgZXRjLgorCitUdWUgTm92IDIzIDE4OjA1OjE0IDE5OTMgIExpc2EgUmVwa2EgIChsaXNhQE1pY3JvVW5pdHkuY29tKQorCisJKiByZW9yZy5jIChyYXJlX2Rlc3RpbmF0aW9uKTogRW5zdXJlIHdlIGFsd2F5cyBjb3JyZWN0bHkgaGFuZGxlCisJYSBudWxsIEpVTVBfTEFCRUwuCisKK1R1ZSBOb3YgMjMgMTc6NDg6MzkgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKworCSogaTk2MC9pOTYwLmggKEFTTV9TUEVDKTogUGFzcyAtbGlua3JlbGF4LCBub3QgLWxpbmstcmVsYXguCisKK1R1ZSBOb3YgMjMgMTc6MzU6MjUgMTk5MyAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBhcm0uYyAoYXJtX2JhY2t3YXJkc19icmFuY2gpOiBCcmFuY2hpbmcgdG8gdGhlIGN1cnJlbnQgaW5zbiBpcyBhIAorCWJhY2t3YXJkcyBicmFuY2guCisKK1R1ZSBOb3YgMjMgMTM6NTk6MjQgMTk5MyAgSGFsbHZhcmQgQiBGdXJ1c2V0aCAgKGhiZkBkdXJpbi51aW8ubm8pCisKKwkqIGxpYmdjYzIuYSAoX19iYl9leGl0X2Z1bmMpOiBGaXggZm9ybWF0ICUqZCAtPiAlKmxkLgorCisJKiBjLXBhcnNlLmluLCBjcC1wYXJzZS55IChtYXliZV90eXBlX3F1YWwpOiBEb24ndCBmYWlsIHRvIHNldCAkJC4KKworVHVlIE5vdiAyMyAxNToyNjoyOCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lLCBzaW1wbGlmeV9zaGlmdF9jb25zdCk6IEFkZCBpbml0aWFsaXphdGlvbnMKKwlmb3Igc29tZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKworCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBXaGVuIHdlIGhhdmUgSU5URUdFUl9UWVBFcywKKwlzYXZlIHJlc3VsdCBvZiBzaWduZWRfdHlwZSBvciB1bnNpZ25lZF90eXBlIGZvciBsYXRlcgorCWNvbXBhcmlzb24gd2l0aCB0aGUgdmFyaW91cyBmb3JtcyBvZiBjaGFyIHR5cGVzLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFNBVkVfRVhQUik6IFByb3Blcmx5IHJlY29tcHV0ZSB0aGUKKwl2YWx1ZSBvZiBVTlNJR05FRFAgd2hlbiBTQVZFX0VYUFJfUlRMIGlzIG5vbnplcm8gYW5kIHdlIGhhdmUgcHJvbW90ZWQuCisKK1R1ZSBOb3YgMjMgMDQ6MTQ6MDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkd2FyZm91dC5jIChvdXRwdXRfbG9jYWxfc3Vicm91dGluZV9kaWUpOiBVc2UgdGhlIGZ1bmN0aW9uIG5hbWUKKwlmcm9tIGl0cyBzeW1ib2xfcmVmLCBub3QgREVDTF9BU1NFTUJMRVJfTkFNRS4KKworTW9uIE5vdiAyMiAxMzo1OTo0MSAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaW5hbC5jIChnZXRfYXR0cl9sZW5ndGgpOiBhc21faW5zbl9jb3VudCB0YWtlcyBhIGJvZHksIG5vdCBhbgorCWluc24uCisKK1N1biBOb3YgMjEgMjI6Mzc6MTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbTY4ay9tb3QzMzAwLmggKEFTTV9PVVRQVVRfQ09NTU9OLCBBU01fT1VUUFVUX0xPQ0FMKTogCisJVXNlIFNJWkUsIG5vdCBST1VOREVELgorCShGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUpOiBEZWZpbml0aW9ucyB0dXJuZWQgb2ZmLgorCShSRUdJU1RFUl9QUkVGSVgsIElNTUVESUFURV9QUkVGSVgpOiBOZXcgZGVmaW5pdGlvbnMuCisJKFBBUk1fQk9VTkRBUlkpOiBOZXcgZGVmaW5pdGlvbi4KKworU3VuIE5vdiAyMSAxNTozOTowNCAxOTkzICBUb3IgRWdnZSAgKHRlZ2dlQHB2di51bml0Lm5vKQorCisJKiBtODhrL2RvbHBoLmggKFNEQl9BTExPV19GT1JXQVJEX1JFRkVSRU5DRVMpOiBEZWZpbmUuCisJKFNEQl9BTExPV19VTktOT1dOX1JFRkVSRU5DRVMpOiBEZWZpbmUuCisJKENQUF9QUkVERUZJTkVTKTogUmVkZWZpbmUuCisJKENQUF9ERUZBVUxUKTogUmVkZWZpbmUuIAorCShJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBSZWRlZmluZS4KKwkqIG04OGsvZG9scGhpbi5sZDogTmV3IGZpbGUuCisJKiBtODhrL3QtbTg4ayAocmVhbGNsZWFuKTogUmVtb3ZlIHNvbWUgZ2VuZXJhdGVkIC5hc20gZmlsZXMuCisJKiBtODhrL3gtZG9scGggKEVYVFJBX1BBUlRTKTogUmVkZWZpbmVkIHRvIGFsc28gY29udGFpbiBnY2MubGQuCisJKGdjYy5sZCk6IENvcGllZCBmcm9tIGRvbHBoaW4ubGQuCisJKFhfQ0ZMQUdTKTogRGVmaW5lIF9fbTg4a19fLgorCSogbGliZ2NjMi5jIChfX2VuYWJsZV9leGVjdXRlX3N0YWNrKTogQWRkIERvbHBoaW5PUyB2ZXJzaW9uLgorCitTdW4gTm92IDIxIDAxOjAwOjQwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL202OGsvaXNpLmggKExJQl9TUEVDKTogVXNlIC1sbSBpbiBhZGRpdGlvbiB0byAtbGMtLQorCW5vdCBpbnN0ZWFkIG9mIC1sYy4KKworCSogZml4LWhlYWRlci5jICh3cml0ZV9yYnJhYyk6IE1ha2UgYWRkZWQgZGVjbGFyYXRpb25zIGNvbmRpdGlvbmFsCisJb24gX19jcGx1c3BsdXMgYW5kIG5vdGhpbmcgZWxzZS4KKwkqIGZpeHByb3RvIChzdGRpby5oKTogUmVlbmFibGUgYWRkaW5nIHByb3RvcyBmb3IgdipwcmludGYuCisKKwkqIHN5cy1wcm90b3MuaCAoYXV0aGRlc19jcmVhdGUpOiBEZWxldGUgYXJnIGluZm8uCisJV2UgY2FuJ3QgY291bnQgb24gaGF2aW5nIHN0cnVjdCBzb2NrYWRkciBkZWZpbmVkLgorCisJKiBmaXhpbmNsdWRlcyAobWF0aC5oKTogV2hlbiBkZWxldGluZyBpbmxpbmUgc3FydCBhbmQgYWJzLAorCWJlIGZsZXhpYmxlIGFib3V0IGFyZyBuYW1lIGFuZCBmdW5jdGlvbiBib2R5LgorCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhwcm90byk6IE5ldmVyIHJ1biBmaXhwcm90byB0d2ljZS4KKworU2F0IE5vdiAyMCAxNjo1MjoxNSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBIYW5kbGUgYXJiaXRyYXJ5IG51bWJlciBvZiBjYXN0cworCWJlZm9yZSBhIG1vZGlmeS4KKworU2F0IE5vdiAyMCAxNjozODoyNSAxOTkzICBFcmljIEJhdXIgIChlcmljQHN5bm5ldC5jb20pCisKKwkqIGkzODYvcGVyZm9ybS5oIChwZXJmb3JtX2RpdnNpMywgcGVyZm9ybV9tb2RzaTMpOiBBZGQgJyYnIGluCisJY29uc3RyYWludCBmb3IgRFg7IGV4cGxpY2l0bHkgY29weSBhcmcgYXJnMSB0byBjeC4KKworU2F0IE5vdiAyMCAwMjoyNjoyOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBGb3Igc2luLCBjb3MsIGZzcXJ0LCBhbGxvY2EsIGZmcywgc3RybGVuLAorCXN0cmNweSwgbWVtY3B5LCBzdHJjbXAsIG1lbWNtcCwgaWYgYXJncyBhcmUgYmFkLCB1c2UgZXhwYW5kX2NhbGwuCisKKwkqIGZpeC1oZWFkZXIuYyAod3JpdGVfcmJyYWMpOiBUcmVhdCByZXdpbmRkaXIgbGlrZSBtZW1tb3ZlLgorCitGcmkgTm92IDE5IDE4OjI0OjQzIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHByb3RvaXplLmM6IFJlbW92ZSBkZWNsYXJhdGlvbnMgZm9yIG1hbGxvYyBhbmQgcmVhbGxvYy4KKworCSogZXhwci5jIChzdG9yZV9maWVsZCk6IENvbnZlcnQgRVhQIHRvIE1PREUgYmVmb3JlIGNhbGxpbmcKKwlzdG9yZV9iaXRfZmllbGQuCisKKwkqIG9wdGFicy5jIChleHBhbmRfY29tcGxleF9hYnMpOiBSZXBsYWNlIHNvbWUgZXJyb25lb3VzIAorCXVzZXMgb2YgTU9ERSB3aXRoIFNVQk1PREUuCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSk6IERvbid0IGFsbG93IHNpZ24tZXh0ZW5zaW9uIG9mIAorCWNvbnN0YW50cyB3aGVuIHdlIGFyZSBuYXJyb3dpbmcgdGhpbmdzIGluIGFuIElPUiBvciBYT1IuCisKK0ZyaSBOb3YgMTkgMTY6NDI6NDMgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiByczYwMDAuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2ZpbGVyKTogV2hlbiBUQVJHRVRfTUlOSU1BTF9UT0MsCisJZW1pdCAubG9uZyBpbnN0ZWFkIG9mIC50Yy4KKworRnJpIE5vdiAxOSAxMzoyMjozNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCisKKyAgICAJKiBjb25maWd1cmU6IExldCBhIGhvc3Qgc2V0IHRydW5jYXRlX3RhcmdldCB0byBzcGVjaWZ5IHRoYXQgdGhlCisJaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBuYW1lcyBtdXN0IGJlIHRydW5jYXRlZCB0byAxNCBjaGFyYWN0ZXJzLgorCUlmIHNldCwgdHJ1bmNhdGUgdGhlIHRhcmdldCBhcmd1bWVudC4KKworRnJpIE5vdiAxOSAxNzoyNzo1OCAxOTkzICBIb2xnZXIgVGV1dHNjaCAgKGhvbGdlckBob3Ric28ucmhlaW4tbWFpbi5kZSkKKworCSogY2xpcHBlci5oIChIQVJEX1JFR05PX01PREVfT0spOiBBbGxvdyBhbnkgbW9kZSBpbiBnZW5lcmFsIHJlZ3MuCisJRmxvYXQgcmVncyBtYXkgb25seSBob2xkIFNGbW9kZSBhbmQgREZtb2RlLgorCShGVU5DVElPTl9BUkcpOiBPbmx5IE1PREVfSU5UIGFuZCBNT0RFX0ZMT0FUIHdpdGggc2l6ZSA8PSA4IGFyZQorCXBhc3NlZCBpbiByZWdpc3RlcnMuCisJKEZVTkNUSU9OX0FSR19BRFZBTkNFKTogVXBkYXRlIGFjY29yZGluZ2x5LgorCShGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHKTogVW5kZWZpbmUuCisKKwkqIGNsaXBwZXIubWQgKG1vdnNmKzEsMixtb3ZkZisxLDIpOiBNYWtlICdmJyBwcmVmZXJyZWQgcmVnaXN0ZXIgY2xhc3MuCisKK1RodSBOb3YgMTggMjA6MDk6NTYgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogV2hlbiBjb21wdXRlIERPVFMsIGNvbnZlcnQgLy4vIHRvIC8gdG8gYXZvaWQKKwlhY2NpZGVudGFsbHkgY29udmVydGluZyBpdCB0byAvLi4vLgorCSogZml4aW5jLmRndXgsIGZpeGluYy5zdnI0OiBMaWtld2lzZS4KKworVGh1IE5vdiAxOCAwNjoxNDo1NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBOZXcgYXJnIEVORF9CSU5ESU5HUy4KKwkqIGMtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBQYXNzIG5ldyBhcmcgdG8gZXhwYW5kX2Z1bmN0aW9uX2VuZC4KKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogUGFzcyBuZXcgYXJnIHRvIGV4cGFuZF9mdW5jdGlvbl9lbmQuCisJRG9uJ3QgY2FsbCBleHBhbmRfZW5kX2JpbmRpbmdzIGhlcmUuCisJKiBpbnRlZ3JhdGUuYyAob3V0cHV0X2lubGluZV9mdW5jdGlvbik6CisJUGFzcyBuZXcgYXJnIHRvIGV4cGFuZF9mdW5jdGlvbl9lbmQuCisKK1dlZCBOb3YgMTcgMTg6NTQ6MjEgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogb2JqYy9vYmplY3RzLmM6IEluY2x1ZGUgInRjb25maWcuaCIgYmVmb3JlICJydW50aW1lLmgiLgorCitXZWQgTm92IDE3IDE5OjE1OjMxIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChtYXRoLmgpOiBBZGQgbWlzc2luZyBxdW90aW5nIG9mIGAqJyB3aGVuIGZpeGluZworCXByb3RvdHlwZSBvZiBgc3FyJy4KKworVHVlIE5vdiAxNiAwNzoxNTo1MiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5oIChFWFRSQV9DT05TVFJBSU5UKTogTmV3IG1hY3JvLgorCShTRUNPTkRBUllfe0lOUFVULE9VVFBVVH1fUkVMT0FEX0NMQVNTKTogRGlzYWxsb3cgdW5hbGlnbmVkIGludG8gZmxvYXQKKwlyZWdzLgorCSogYWxwaGEubWQgKG1vdmRpKTogVXNlICdRJyBpbnN0ZWFkIG9mICdtJyBmb3IgRlAuCisKK1R1ZSBOb3YgMTYgMDI6MDY6MDEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuNS40IHJlbGVhc2VkLgorCisJKiBjLXR5cGVjay5jIChwdXNoX2luaXRfbGV2ZWwpOiBXaGVuIGFsaWduaW5nIG5leHQgc3RydWN0IGZpZWxkLAorCW1ha2Ugc3VyZSB0aGVyZSdzIGFub3RoZXIgZmllbGQgbGVmdC4KKworCSogY3AtZXJyZm4uYzogRG9uJ3QgaW5jbHVkZSBzdHJpbmcuaC4KKwkoU1RSRFVQKTogTWFjcm8gZGVsZXRlZC4KKwkoY3BfdGhpbmcpOiBDb3B5IHN0cmluZ3MgImJ5IGhhbmQiLgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUpOiBEb24ndCBkbyByaWdodC1zaGlmdCBpbiBhIG5hcnJvd2VyIG1vZGUuCisKK01vbiBOb3YgMTUgMDE6NTQ6NDggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCk6IElmIG5vbi1zdGF0aWMgdmFyIGhhcyBzdGF0aWMtc3R5bGUgUlRMLAorCWRvbid0IG91dHB1dCBhbnl0aGluZyBmb3IgaXQuCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWZpeHByb3RvKTogRG9uJ3QgZGVwZW5kIG9uIHhzeXMtcHJvdG9zLmguCisJKGRpZmYpOiBEb24ndCBjb21wYXJlIGJpLXBhcnNlci5jCisKKwkqIG5ld3MuaCAoTk9fRE9UX0lOX0xBQkVMLCBOT19ET0xMQVJfSU5fTEFCRUwpOiBEZWZpbmVkLgorCisJKiBjLXR5cGVjay5jIChwdXNoX2luaXRfbGV2ZWwsIHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0KToKKwlTa2lwIGFueSBuYW1lbGVzcyBiaXRmaWVsZHMgYXQgc3RhcnQgb2YgcmVjb3JkLgorCShwcm9jZXNzX2luaXRfZWxlbWVudCk6IFNraXAgYW55IG5hbWVsZXNzIGJpdGZpZWxkcyBhZnRlciB0aGUgZmllbGQKKwlqdXN0IHByb2Nlc3NlZC4KKworTW9uIE5vdiAxNSAwMjowOTo1NCAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYmx1ZXMuY3lnbnVzLmNvbSkKKworCSogcGEuaCAoUkVUVVJOX0lOX01FTU9SWSk6IERlZmluZS4KKworU3VuIE5vdiAxNCAxNzoyNToyOSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBGb3IgVFJVVEhfQU5EX0VYUFIsIFRSVVRIX09SX0VYUFIKKwlhbmQgVFJVVEhfWE9SX0VYUFIsIGlmIHJlc3VsdCBtb2RlIGRvZXNuJ3QgbWF0Y2ggb3BlcmFuZHMsCisJZG9uJ3QgdXNlIHN1YnRhcmdldC4KKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEZpeCB0eXBvIChjb2RlbCA9PiBjb2RlcikuCisKK1N1biBOb3YgMTQgMTI6NDU6MzcgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogQ2xlYXIgU1RBQ0tfUEFSTSB3aGVuIHdlIGhhdmUgYSAKKwlwYXNzLWJ5LXBvaW50ZXIgcGFybSB0aGF0IHdlIGxvYWQgaW50byBhIHBzZXVkby4KKworCSogZmxvdy5jIChmbG93X2FuYWx5c2lzKTogRml4IGJ1ZyBpbiBwcmV2aW91cyBjaGFuZ2UuCisKKwkqIGZvbGQtY29uc3QuYyAodHdvdmFsX2NvbXBhcmlzb25fcCk6IERvIG5vdGhpbmcgZm9yIFNBVkVfRVhQUiwgYXQKKwlsZWFzdCBmb3Igbm93LgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBBbGxvdyBSRUxPQURfRk9SX0lOUFVUIHdpdGggYSBzZWNvbmRhcnkKKwlyZWxvYWQgdGhlIHNhbWUgY2xhc3MgYXMgdGhlIGlucHV0IGlmIHRoZSBtb2RlcyBkaWZmZXIuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IENvbnZlcnQgY29uc3RhbnRzIHRvIHByb3BlciBtb2RlIGluIHR3byBwbGFjZXMuCisKKwkqIHNoLmggKEhBVkVfVlBSSU5URik6IERlbGV0ZSBmcm9tIGhlcmUuCisJKiB4bS1zaC5oIChIQVZFX1ZQUklOVEYpOiBOZXcgbWFjcm8uCisKK1N1biBOb3YgMTQgMDQ6Mjg6NTYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTg2MC9pODYwLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOgorCU1vdmluZyBhbnkga2luZCBvZiBpbnRlZ2VyIGNzdCB0byBmbG9hdCByZWcgbmVlZHMgaW50ZXJtZWRpYXRlLgorCisJKiBzeXMtcHJvdG9zLmggKGdldG1udGVudCk6IERlbGV0ZSB0aGUgYXJnIGRlY2xzCisJYmVjYXVzZSBCU0QgNC40IGFuZCBTdW5vcyBkaXNhZ3JlZSBvbiB0aGVtLgorCitTYXQgTm92IDEzIDIzOjA2OjQyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL21pcHMvbWlwcy5jIChmdW5jdGlvbl9hcmcsIGZ1bmN0aW9uX2FyZ19hZHZhbmNlKToKKwlJbiBkZWZhdWx0IGNhc2UsIGhhbmRsZSBjb21wbGV4IG1vZGVzIG11Y2ggbGlrZSBCTEttb2RlLgorCShmdW5jdGlvbl9hcmdfcGFydGlhbF9ucmVncyk6IExpa2V3aXNlLgorCitTYXQgTm92IDEzIDIyOjMxOjQ4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmggKENQUF9TUEVDKTogQWx3YXlzIGRlZmluZSBfX0xBTkdVQUdFX0NfXyB1bmxlc3MgYXNzZW1ibGVyLgorCURlZmluZSBfX2NwbHVzcGx1cyBmb3IgQysrLgorCisJKiBhbHBoYS5tZCAobW92c2YsIG1vdmRmKTogQWRkICdHJyB0byBjb25zdHJhaW50IGZvciBvcGVyYW5kIDEKKwl3aGVuIG9wZXJhbmQgMCBpcyBhIHJlZ2lzdGVyIGFuZCBzdXBwb3J0IGl0IGluIGFsdGVybmF0aXZlIDAuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IFVzZSBlbWl0X21vdmVfaW5zbiBpbnN0ZWFkIG9mCisJZ2VuX21vdmVfaW5zbiBpbiBjYXNlIG5vbmxvY2FsX2dvdG9faGFuZGxlcl9zbG90IGlzIG5vdCBhIHZhbGlkIG1lbXJlZi4KKworCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IFdoZW4gc3RhcnRpbmcgbmV3IGJhc2ljIGJsb2NrCisJZm9yIGEgQ0FMTF9JTlNOIGluIHRoZSBwcmVzZW5jZSBvZiBub25sb2NhbCBsYWJlbHMsIGRvbid0CisJZ2V0IGNvbmZ1c2VkIHdpdGggZm9sbG93aW5nIENMT0JCRVIuCisJKGZsb3dfYW5hbHlzaXMpOiBVc2Ugc2FtZSBsb2dpYyBhcyBmaW5kX2Jhc2ljX2Jsb2NrIHRvIHNlZSB3aGVuCisJdGhlIGluc24gYWZ0ZXIgYSBDQUxMX0lOU04gc3RhcnRzIGEgbmV3IGJhc2ljIGJsb2NrLgorCisJKiBleHBtZWQuYyAoc3RvcmVfc3BsaXRfYml0X2ZpZWxkKTogUHJvcGVybHkgbG9hZCBhIGNvbnN0YW50IFZBTFVFCisJaW50byBhIFdPUkRfTU9ERSBwc2V1ZG8uCisKK1NhdCBOb3YgMTMgMTg6Mjc6NDMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbnMzMmsvbnMzMmsubWQgKG1vdnNpKTogSGFuZGxlIG1vdmVzIHRvIGZwIHJlZy4KKwlIYW5kbGUgY29uc3RfZG91YmxlIGFzIG9wZXJhbmQgMS4KKworCSogTWFrZWZpbGUuaW4gKGRpZmYpOiBGaXggdHlwbyBpbiBuYW1lIGdjYy4/P3MuCisKK0ZyaSBOb3YgMTIgMDg6MzQ6NTggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlX2ZpZWxkKTogU2tpcCBmaWVsZHMgd2l0aCB2YXJpYWJsZQorCXBvc2l0aW9uIGFuZC9vciBzaXplIGluc3RlYWQgb2YgY3Jhc2hpbmcgb24gdGhlbS4KKworRnJpIE5vdiAxMiAyMjo0OTo1MCAxOTkzICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogYmktYXJpdHkuYywgYmktb3Bjb2RlLmMsIGJpLW9wbmFtZS5jIChtYWluKTogRmx1c2ggc3Rkb3V0IGFuZAorCWFuZCBjaGVjayBmb3IgZXJyb3JzIHByaW9yIHRvIHRlcm1pbmF0aW9uOyBlbmQgd2l0aCBjYWxsIHRvIGV4aXQKKwlyYXRoZXIgdGhhbiByZXR1cm4gZnJvbSBtYWluLCBhcyB3aXRoIGdlbiouYy4KKwkqIGJpLWFyaXR5LmMsIGJpLWxleGVyLmMsIGJpLW9wY29kZS5jLCBiaS1vcG5hbWUuYywgYmktcGFyc2VyLnk6CisJVXNlIEZBVEFMX0VYSVRfQ09ERSByYXRoZXIgdGhhbiBoYXJkY29kZWQgMSBmb3IgZmF0YWwgZXhpdCBjb2RlLgorCitGcmkgTm92IDEyIDE4OjQxOjUxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3N0ZGFyZy5oLCBndmFyYXJncy5oOiBUZXN0IF9fYnNkaV9fIGxpa2UgX19CU0RfTkVUMl9fLgorCisJKiBwYS5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBGaXggcmV0dXJuIHZhbHVlIGZvciA2NGJpdAorCXBhc3MgYnkgdmFsdWUgc3RydWN0dXJlcy4KKworCSogZml4LWhlYWRlci5jICh3cml0ZV9yYnJhYyk6IEhhbmRsZSB2KnByaW50ZiBsaWtlIG1lbW1vdmUuCisKK0ZyaSBOb3YgMTIgMDg6NTM6NDcgMTk5MyAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBhcm0ubWQgKGNvbXBhcmlzb24pOiBEb24ndCBlbWl0IGludmFsaWQgb3B0aW1pemF0aW9uCisJZm9yIChzZXQgKHJlZykgKGNvbXBhcmlzb24pKSBhbmQgKHNldCAocmVnKSAobmVnIChjb21wYXJpc29uKSkpCisJd2hlbiBjb21wYXJpc29uIGlzIExULgorCisJKiBhcm0uYyAocGF0dGVybl9yZWFsbHlfY2xvYmJlcnNfbHIpOiBTZXR0aW5nIGEgc3VicmVnIG9mIGEgbWVtIGlzCisJdmFsaWQgYW5kIHNhZmUuCisKK0ZyaSBOb3YgMTIgMDg6Mzg6MjIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbTY4ay9ocHV4Ny5oOiBBZGQgZGlyZWN0b3J5IG5hbWUgdG8gI2luY2x1ZGUgb2YgaHAzMjAuaC4KKworVGh1IE5vdiAxMSAwMDowMDo1NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi41LjMgcmVsZWFzZWQuCisKKwkqIGZpeC1oZWFkZXIuYywgZ2VuLXByb3Rvcy5jIChmYW5jeV9hYm9ydCk6IE5ldyBmdW5jdGlvbi4KKworCSogYy10eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IEhhbmRsZSBSRUFMUEFSVF9FWFBSIGFuZAorCUlNQUdQQVJUX0VYUFIuCisKKwkqIGludGVncmF0ZS5oIChnbG9iYWxfY29uc3RfZXF1aXZfbWFwX3NpemUpOiBEZWNsYXJlZC4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBJZiBpdCdzIEMrKywgZG9uJ3QgY2hlY2sgdGhlCisJREVDTF9TT1VSQ0VfTElORSBvZiBhIHR5cGVkZWYuCisJKGRieG91dF9wYXJtcyk6IEZpeCBwcmV2aW91cyBjaGFuZ2UuCisKK1dlZCBOb3YgMTAgMTA6MzM6MjggMTk5MwlSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGZpeHByb3RvIChyZWxfc291cmNlX3N1YmRpcik6CVBydW5lIG91dCByZWR1bmRhbnQgL3N1YmRpci8uLi8gdG8KKwlwcmV2ZW50IHJlY3Vyc2lvbi4KKworV2VkIE5vdiAxMCAyMjozMDoxNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9uczMyay9lbmNvcmUuaCAoQVNNX09VVFBVVF9BU0NJSSk6IERlY2xhcmUgaS4KKworV2VkIE5vdiAxMCAxNjoxODoxOSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBVbmRvIGNoYW5nZSBvZiBKYW4gMTUgMTk5MyB3aGljaAorCXRyaWVkIHRvIGltcGxlbWVudCB0aGUgIm9uZSBkZWZpbml0aW9uIHJ1bGUiLiAgVGhlIGR1cGxpY2F0ZV9kZWNscworCWNhbGwgaW4gcHVzaGRlY2wgZG9lcyBpbXBsZW1lbnQgdGhpczsgZ3Jva3ZhcmRlY2wgZ290IHNvbWUgYmFkIGhpdHMuCisKK1dlZCBOb3YgMTAgMDg6NDQ6MTcgMTk5MyAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogY3Atc2VhcmNoLmMgKGNvbXB1dGVfdmlzaWJpbGl0eSk6IFJldmVydCBUaWVtYW5uJ3MgcGF0Y2ggb2YKKwlOb3YgNS4gIEluc3RlYWQgY2hlY2sgdGhhdCBwcml2YXRlbHkgaW5oZXJpdGVkIGVudGl0aWVzIGRvbid0CisJZ2V0IHJlc3RyaWN0ZWQgdmlzaWJpbGl0eSBpZiB0aGUgcHJpdmF0ZSBkZXJpdmF0aW9uIGlzIGEKKwlzaGFsbG93IGRlcml2YXRpb24gKGkuZS4gb25lIGxlYWRpbmcgdG8gdGhlIG1vc3QgZGVyaXZlZAorCWNsYXNzKSBhbmQgd2UncmUgYWN0dWFsbHkgaW4gdGhlIG1vc3QgZGVyaXZlZCBjbGFzcycgc2NvcGUuCisKKwkqIGNwLXNlYXJjaC5jIChkZnNfcHVzaGRlY2xzKTogIERvbid0IGJlIGNvbmZ1c2VkIGJ5IHRoZSBmYWN0IHRoYXQKKwlvdmVybG9hZGVkIG1ldGhvZHMgZnJvbSBhbiBvdXRlciBzY29wZSBhbG1vc3QgbG9va3MgbGlrZSBhbgorCWVudmVsb3BlLgorCitXZWQgTm92IDEwIDE4OjU1OjIyIDE5OTMgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogZml4aW5jbHVkZXM6IENvcHkgZmlsZXMgbmVlZGVkIGZvciBvdGhlciBmaWxlcyBhdCB0aGUgdmVyeSBlbmQuCisKKwkqIGFybS5tZCAocmVsb2FkIHBhdHRlcm5zIGZvciBtbGEgaW5zdHJ1Y3Rpb24pOiBOZXcuCisKK1dlZCBOb3YgMTAgMTg6MTc6NDAgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogRm9yIHBhcm1zIHBhc3NlZCB2aWEgaW52aXNpYmxlCisJcmVmZXJlbmNlLCBhY2NlcHQgYW55IHJlZyBleGNlcHQgRlAsIFNQLCBhbmQgQVAuCisKKwkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IFNldCBnbG9iYWxfY29uc3RfZXF1aXZfbWFwX3NpemUuCisKK1dlZCBOb3YgMTAgMTc6NTI6MzMgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzdWJzdF9wcmV2X2luc24pOiBOZXcgdmFyaWFibGUuCisJKHRyeV9jb21iaW5lKTogU2V0IGl0LgorCShnZXRfbGFzdF92YWx1ZSk6IFVzZSBzdWJzdF9wcmV2X2luc24gaWYgc2V0IGluc3RlYWQgb2YgCisJbG9va2luZyBmb3IgdGhlIGZpcnN0IGluc24gYmVmb3JlIFNVQlNUX0xPV19DVUlELgorCisJKiBpbnRlZ3JhdGUuYyAoZ2xvYmFsX2NvbnN0X2VxdWl2X21hcF9zaXplKTogTmV3IHZhcmlhYmxlLgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogU2V0IGl0LgorCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgdHJ5X2NvbnN0YW50cyk6CisJTmV2ZXIgYWNjZXNzIGNvbnN0X2VxdWl2X21hcCB3aXRob3V0IGNoZWNraW5nIGZvciBvdXQtb2YtcmFuZ2UuCisJKG1hcmtfc3RvcmVzKTogTGlrZXdpc2UuCisKKwkqIGFscGhhLm1kIChzbWF4ZGkzKTogV2FzIGluY29ycmVjdGx5IGNhbGxlZCBtYXhkaTMuCisKKwkqIHJzNjAwMC5oIChMSU5LX1NQRUMpOiBEb24ndCBwYXNzIC1idGV4dHJvIGlmIC1yLgorCisJKiBhbHBoYS9vc2YxMi5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoYWxwaGEtZGVjLW9zZjEuMik6IE5ldyBjYXNlLCB0byB1c2UgbmV3IGZpbGUuCisKKwkqIHJzNjAwMC5tZCAoc3FydGRmMik6IEZpeCB0eXBvIGluIGV4dHJhIGNvbmRpdGlvbi4KKwkocGx1cy9lcSBwYXR0ZXJuKTogRml4IHR5cG86ICJhZGR6ZSIgd2FzICJhZGRkemUiLgorCitXZWQgTm92IDEwIDEyOjMyOjU2IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBJZiByZW1fZmxhZywgYWx3YXlzIGZvcmNlIG9wMCB0byBhCisJcmVnaXN0ZXIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBVc2UgYSBzbWFsbGVyIGFsaWdubWVudCB3aGVuIHJlYWRpbmcgZnJvbQorCWEgZmllbGQgd2l0aCBhIHZhcmlhYmxlIG9mZnNldC4KKworV2VkIE5vdiAxMCAwMToyODoyNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBVc2UgYSBzbWFsbGVyIGFsaWdubWVudCB3aGVuIHN0b3JpbmcKKwlpbnRvIGEgZmllbGQgd2l0aCBhIHZhcmlhYmxlIG9mZnNldC4KKworCSogZml4aW5jbHVkZXMgKG1hdGguaCk6IERlbGV0ZSBpbmxpbmUgZGVmaW5pdGlvbnMgZm9yIHNxci4KKworVHVlIE5vdiAgOSAxNTozMzo0NSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IFVuZG8gcmZnJ3MgZWFybGllciBwYXRjaC4KKworVHVlIE5vdiAgOSAxOTozMDowMiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKSBbU01BTExfUkVHSVNURVJfQ0xBU1NFU106IFRyeSwgYXQgbGVhc3QsCisJdG8gYXZvaWQgMi1ncm91cHMgd2hvc2Ugc2Vjb25kIHJlZ2lzdGVyIGlzIGV4cGxpY2l0bHkgdXNlZC4KKworVHVlIE5vdiAgOSAxOTowODo0NyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIG1pcHMubWQgKGFkZGRpMyk6IFVzZSBESW1vZGUgbm90IFNJbW9kZSBpbiBmb3JjZV9yZWcgY2FsbC4KKworCSogbWlwcy5jIChQSUNfT0ZGU0VUX1RBQkxFX01BU0spOiBOZXcgbWFjcm8uCisJKGZ1bmN0aW9uX2VwaWxvZ3VlKTogV2hlbiAtbWFiaWNhbGxzLCBpZ25vcmUKKwlQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSB3aGVuIGNhbGN1bGF0aW5nIGxvYWRfb25seV9yMzEuCisKKwkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQWNjZXB0IFZPSURtb2RlIGluaXRpYWwgdmFsdWVzLgorCitUdWUgTm92ICA5IDA5OjIzOjMxIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5tZCAobmVnc2NjKTogQWRkIG1vZGUgZm9yIE5FRy4KKworVHVlIE5vdiAgOSAxMjo1MTo1NCAxOTkzICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kICgiY21wc2YiICYgImNtcGRmIik6IFVuZG8gaW5hZHZlcnRlbnQgY2hhbmdlIGluY2x1ZGVkCisJd2l0aCBDQ0VWRU5tb2RlIGNoYW5nZS4KKworVHVlIE5vdiAgOSAwMTozMTo1OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChsb29wIG9uICRyZXF1aXJlZCk6IFdoZW4gYSBmaWxlIGlzIGNvcGllZAorCWJlY2F1c2UgYW5vdGhlciBmaWxlIG5lZWRzIGl0LCBzY2FuIGl0IGZvciB3aGF0IGZpbGVzIGl0IG5lZWRzLgorCisJKiBmaXgtaGVhZGVyLmMgKHdyaXRlX3JicmFjKTogV2hlbiBhZGRpbmcgcHJvdG8gZm9yIG1lbW1vdmUsCisJcHV0IGl0IGluc2lkZSAjaWZuZGVmIG1lbW1vdmUuCisKK01vbiBOb3YgIDggMTY6NTA6NDkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzZGJvdXQuYyAoc2Rib3V0X2luaXQpIFtSTVNfUVVJQ0tfSEFDS18xXTogQ2FsbCBzZGJvdXRfc3ltYm9sCisJZm9yIF9fdnRibF9wdHJfdHlwZS4KKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVuZG8gcHJldmlvdXMgY2hhbmdlLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBXYXJuIGZvciBvcmRlcmVkIGNvbXBhcmUgb2YgcHRyIHdpdGggMAorCW9ubHkgaWYgcGVkYW50aWMgaW4gYm90aCBjYXNlcy4KKworTW9uIE5vdiAgOCAxODoyNTowNiAxOTkzICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLmggKEFTTV9GSUxFX1NUQVJUKTogRW1pdCBmaWxlbmFtZSBkaXJlY3RpdmUuCisKK1N1biBOb3YgIDcgMDA6MjQ6MDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBEZWxldGUgZml4aGRyLnJlYWR5IGhlcmUuCisJKGNsZWFuKTogTm90IGhlcmUuCisKKwkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6ICBBZnRlciBzZWVpbmcgYW4gZXh0ZXJuIHZhcmlhYmxlCisJZGVjbGFyYXRpb24sIGdvdG8gbmV3X3N0YXRlbWVudCB0byByZWFkIGEgbmV3IHRva2VuLCByYXRoZXIKKwl0aGFuIGdvaW5nIHRvIGhhbmRsZV9zdGF0ZW1lbnQgKHdoaWNoIHVzZXMgdGhlIGN1cnJlbnQgdG9rZW4pLgorCitTYXQgTm92ICA2IDE5OjQwOjIyIDE5OTMgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBjb25maWcvdmF4L3Ztcy5oIChfX01BSU5fTkFNRSk6IERlZmluZSBhcyAiIG1haW4oIiByYXRoZXIKKwlyYXRoZXIgdGhhbiAiIG1haW4gKCIgdG8gcmVmbGVjdCBjdXJyZW50IGNjMXBsdXMuCisKKwkqIGNvbmZpZy92YXgvdm1zLmg6IEFkZCBfX0dOVUNfTUlOT1JfXz01IHRvIENQUF9QUkVERUZJTkVTLgorCitTYXQgTm92ICA2IDIyOjU0OjI1IDE5OTMgIFRvciBFZ2dlICAodGVnZ2VAcHZ2LnVuaXQubm8pCisKKwkqIG04OGsuYyAocGFydGlhbF9jY21vZGVfcmVnaXN0ZXJfb3BlcmFuZCwgZXZlbl9yZWxvcCkKKwkob2RkX3JlbG9wKTogTmV3IGZ1bmN0aW9ucywgZm9yIHN1cHBvcnQgb2YgQ0NFVkVObW9kZS4KKwkocHJpbnRfb3BlcmFuZCwgbmV3IGNhc2UgJyEnKTogUmV2ZXJ0IGZvbGxvd2luZyBjb25kaXRpb24uCisJKiBtODhrLmggKEVYVFJBX0NDX01PREVTLCBFWFRSQV9DQ19OQU1FUywgU0VMRUNUX0NDX01PREUpOgorCU5ldyBtYWNyb3MgdG8gZGVmaW5lIENDRVZFTm1vZGUuIAorCSogbTg4ay5tZDogSGFuZGxlIENDRVZFTm1vZGUgYXMgYSBuZXcgbW9kZS4gIExvZ2ljYWwgb3BlcmF0aW9ucworCW9uIENDbW9kZSByZWdpc3RlcnMgbm93IHJlc3VsdHMgaW4gQ0NFVkVObW9kZS4gCisJQWRkIHBhdHRlcm5zIGZvciBqdW1wcyBhbmQgZXh0J3MgZm9yIENDRVZFTm1vZGUuCisJKGNtcHNmLCBjbXBkZik6IFVzZSByZWcgNjUgYW5kIGNsb2JiZXIgcmVnIDY0LgorCitTYXQgTm92ICA2IDE3OjA3OjU0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZykgW1JNU19RVUlDS19IQUNLXzFdOgorCUlmIHNkYiBvdXRwdXQsIGNhbGwgc2Rib3V0X3N5bWJvbCBmb3IgdnRhYmxlX2VudHJ5X3R5cGUuCisJKiBjb25maWcvbTg4ay9kZ3V4LmggKFJNU19RVUlDS19IQUNLXzEpOiBEZWZpbmVkLgorCitTYXQgTm92ICA2IDEyOjMyOjMxIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogRG9uJ3QgdW5yb2xsIGxvb3AgaWYganVtcCBoYXMgY29tYmluZWQKKwl0aGUgb3JpZ2luYWwgbG9vcCBzdGFydCBsYWJlbCB3aXRoIGFub3RoZXIgbGFiZWwuCisKK1NhdCBOb3YgIDYgMDU6MDE6MzEgMTk5MyAgQ2hyaXMgU21pdGggIChjc21pdGhAY29udmV4LmNvbSkKKworCSogY29udmV4Lm1kICh1bnR5cGVkX2NhbGwsIGJsb2NrYWdlKTogQWRkIG5ldyBwYXR0ZXJucy4KKworU2F0IE5vdiAgNiAwMzoxMTo0NiAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AZ251LmFpLm1pdC5lZHUpCisKKyAgICAgICAgKiBqdXN0LWZpeGluYzogUmVuYW1lIGZpeGVkIG5hdGl2ZSBsaW1pdHMuaCB0byBzeXNsaW1pdHMuaCAob3IKKyAgICAgICAgaW5zdGFsbCBnc3lzbGltaXRzLmgpIGJlZm9yZSByZW5hbWluZyBnY2MncyBsaW1pdHMuaCBmcm9tIHRtcGZvbworICAgICAgICBkaXJlY3RvcnkuCisKK1NhdCBOb3YgIDYgMDA6MDc6NDEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuXzEpOiBQdXNoIHRoZSBjb21wb25lbnRzIG9mIGEgY29tcGxleAorCWluIHByb3BlciBvcmRlcjogaW1hZyBwYXJ0IGhhcyBoaWdoZXIgYWRkcmVzcy4KKworRnJpIE5vdiAgNSAxNjoyMzo1MSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIG1pcHMuYyAobWlwc19hYmljYWxscyk6IENoYW5nZSB0eXBlIHRvIGVudW0gbWlwc19hYmljYWxsc190eXBlLgorCShvdmVycmlkZV9vcHRpb25zKTogVXNlIE1JUFNfQUJJQ0FMTFNfe05PLFlFU30gaW5zdGVhZCBvZgorCUFCSUNBTExTX3tOTyxZRVN9LgorCSogbWlwcy5oIChlbnVtIG1pcHNfYWJpY2FsbHNfdHlwZSk6IE5ldyB0eXBlLgorCShtaXBzX2FiaWNhbGxzX2F0dHIpOiBOZXcgZGVmaW5lLgorCShtaXBzX2FiaWNhbGxzKTogQ2hhbmdlIHR5cGUgdG8gZW51bSBtaXBzX2FiaWNhbGxzX3R5cGUuCisJKiBtaXBzLm1kIChhYmljYWxscyk6IFVzZSBtaXBzX2FiaWNhbGxzX2F0dHIgbm90IG1pcHNfYWJpY2FsbHMuCisKK0ZyaSBOb3YgIDUgMjA6MzQ6MTkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhwcm90byAoc3RkaW8uaCk6IERvbid0IGFkZCBwcm90b3MgZm9yIHZwcmludGYsIHZmcHJpbnRmLCB2c3ByaW50Zi4KKworRnJpIE5vdiAgNSAyMDozMjo1MyAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogY29uZmlnL3BhL3BhLm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvKToKKwlBZGQgbWlzc2luZyBgcmV0dXJuJy4KKworRnJpIE5vdiAgNSAxNjowODozNCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGxpc3Rpbmc6IEhhbmRsZSBpMzg2LWxpbnV4IGxpa2UgbTY4MDIwLgorCVBhc3MgY29tcGlsYXRpb24gb3B0aW9ucyB0aHJ1IGFuIGF3ayB2YXJpYWJsZSwgbm90IGFzIG9yZGluYXJ5IGFyZ3MuCisKKwkqIGNjY3AuYyAoc2FmZV9yZWFkLCBzYWZlX3dyaXRlKTogSGFuZGxlIEVJTlRSLgorCShvdXRwdXRfbGluZV9jb21tYW5kKTogSGFuZGxlIE5PX0lNUExJQ0lUX0VYVEVSTl9DIGhlcmUuCisJKG1haW4pOiBOb3QgaGVyZS4KKworCSogcHJvdG9pemUuYyAoc2FmZV9yZWFkLCBzYWZlX3dyaXRlKTogSGFuZGxlIEVJTlRSLgorCShzYWZlX3dyaXRlKTogUmV0dXJuIHJpZ2h0IGF3YXkgYWZ0ZXIgc2FmZV93cml0ZS4KKworRnJpIE5vdiAgNSAxMTo0MDo1OSAxOTkzICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEtZ2hwdXguaCAoTk9fSU1QTElDSVRfRVhURVJOX0MpOiBEZWZpbmUuCisJKiBwYS1ocHV4LmggKE5PX0lNUExJQ0lUX0VYVEVSTl9DKTogRGVmaW5lLgorCitGcmkgTm92ICA1IDA5OjQ1OjIwIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQHZpa2luZykKKworCSogb2JqYy9hcmNoaXZlLmMgKG9iamNfcmVhZF9zdHJpbmcpOiBBbGxvY2F0ZSBzdHJpbmcgcHJvcGVybHkuCisJKiBvYmpjL2hhc2guaCAoY29tcGFyZV9zdHJpbmdzKTogQ2hlY2sgZm9yIG51bGwgcG9pbnRlcnMuCisKK0ZyaSBOb3YgIDUgMTE6Mjk6MjYgMTk5MyAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5oIChBU01fT1VUUFVUX0RPVUJMRSwgQVNNX09VVFBVVF9GTE9BVCk6IFVzZQorCVJFQUxfQVJJVEhNRVRJQyBtYWNyb3MgaW5jbHVkaW5nIGhleCBmb3Igc3BlY2lhbCB2YWx1ZXMuCisKK0ZyaSBOb3YgIDUgMTA6MjY6MzQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRm9yIHVuaW9ucywgZG9uJ3QgdXNlIGdldF9iaW5mbyBhbmQKKwljb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCwgc2luY2UgdW5pb25zIGNhbid0IGJlIGludm9sdmVkIGluIGNvbXBsZXggTUkKKwlzaXR1YXRpb25zLiAgKEZpeGVzIHVuaW9uIGN0b3IgY3Jhc2gsIGFuZCBjb21wbGV0ZXMgU2VwIDI3IGZpeC4pCisKK0ZyaSBOb3YgIDUgMDc6Mzk6MDAgMTk5MyAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBibHVlcy5jeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoY29tcHV0ZV92aXNpYmlsaXR5KTogRG9uJ3QgbG9zZSBhY2Nlc3MgdG8gcHVibGljCisJbWVtYmVycyBmcm9tIGJhc2UgY2xhc3NlcyBvZiBiYXNlIGNsYXNzZXMuCisKKwkqIGNwLXNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZSk6IEluaXRpYWxpemUgQkFTRVRZUEVfUEFUSCBiZWZvcmUKKwl1c2luZy4gIEFsc28sIGluaXRpYWxpemUgUlZBTCBmcm9tIGdldF9iYXNlX2Rpc3RhbmNlX3JlY3Vyc2l2ZS4KKworRnJpIE5vdiAgNSAwNTo0ODowNCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9pODYwL3BhcmFnb24uaCAoU0laRV9UWVBFKTogI3VuZGVmIGl0LgorCisJKiBjb25maWcvbTg4ay9kZ3V4LmggKExJQl9TUEVDKTogSGFuZGxlIC1tc3ZyNC4KKwkoR1BMVVNQTFVTX0lOQ0xVREVfRElSKTogRGVmaW5pdGlvbiBhbmQgI3VuZGVmIGRlbGV0ZWQuCisKKwkqIGNjY3AuYyAobWFpbik6IEhhbmRsZSBOT19JTVBMSUNJVF9FWFRFUk5fQy4KKworRnJpIE5vdiAgNSAwMzoxMTowNSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogY29uZmlnL202OGsvbTY4ay5oIChSVFhfQ09TVCk6IFJldHVybiBhY3R1YWwgY29zdHMgZm9yCisJbXVsdGlwbGljYXRpb24sIG5vdCBjb3N0cyBmb3IgdGhlb3JldGljYWwgc3BlY2lhbCBjYXNlcyB0aGF0IGFyZQorCW5vdCBoYW5kbGVkIGluIHRoZSBtZC4KKworRnJpIE5vdiAgNSAwMDo0MjowOSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGdlbl9oaWdocGFydCk6IElmIGFyZyBpcyBmdW5jdGlvbiB2YWx1ZSBoYXJkIHJlZywKKwlyZXR1cm4gYSBzdWJyZWcgb2YgaXQgKGFzIGluIGdlbl9sb3dwYXJ0X2NvbW1vbikuCisKKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogSGFuZGxlIENPTkNBVCBhcyBydGwgZm9yIHBhcm0uCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogRm9yIHN1YnJlZywgaGFuZGxlIGNhc2Ugd2hlcmUgdGhlIHJlZworCWluc2lkZSB0dXJucyBpbnRvIGEgQ09OQ0FULgorCisJKiBjb25maWd1cmU6IFRyZWF0IGhwcGExLlswMV0taHB1eDguMFswMV0gbGlrZSBocHBhMS5bMDFdLWhwdXg4LjAyLgorCisJKiBmaXhwcm90bzogIERvbid0IHNjYW4gc3ViLWRpcmVjdG9yaWVzIHdob3NlIG5hbWVzIGVuZCBpbiBDQworCW9yIGNvbnRhaW4gKysgLSB0aGVzZSBhcmUgcHJvYmFibHkgQysrIGRpcmVjdG9yaWVzLgorCitUaHUgTm92ICA0IDEyOjAyOjA0IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBjYWxsCisJcHVzaF90ZW1wX3Nsb3RzLCBmcmVlX3RlbXBfc2xvdHMsIGFuZCBwb3BfdGVtcF9zbG90cyB3aGVuIGhhbmRsaW5nCisJcGFyYW1ldGVycywgYmVjYXVzZSB0aGV5IG1pZ2h0IGVuZCB1cCBpbiBhIHRlbXAgc2xvdC4KKworVGh1IE5vdiAgNCAxNTowMDozOCAxOTkzICBTYW11ZWwgRmlndWVyb2EgIChmaWd1ZXJvYUBjcy5ueXUuZWR1KQorCisJKiBpMzg2L29zMi5oLCBpMzg2L3htLW9zMi5oOiBOZXcgZmlsZXMuCisKK1RodSBOb3YgIDQgMTQ6MzY6NTQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KKworVGh1IE5vdiAgNCAxMzozMDoxNiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IElnbm9yZSBpbml0aWFsIHZhbHVlIGlmIGl0IGlzIHRoZQorCXdyb25nIG1vZGUuCisJKHJlY29yZF9pbml0aWFsKTogRG9uJ3QgaWdub3JlIGFueSBzZXQgb2YgdGhlIHJlZ2lzdGVyLgorCisJKiByczYwMDAubWQgKG1vdmRmKTogRG9uJ3QgaGF2ZSByZWxvYWQgY2hvb3NlIGFsdGVybmF0aXZlIG9mCisJbG9hZGluZyBhIGNvbnN0YW50IGludG8gYSBHUFIuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMsIGNhc2UgJ28nKTogQSBwc2V1ZG8gaXMgbm90IGFsd2F5cworCWFuIG9mZnNldHRhYmxlIG1lbXJlZi4KKwkoZmluZF9yZWxvYWRzKTogSWYgd2UgcmVsb2FkIGEgY29uc3RhbnQgaW50byBhIHJlZ2lzdGVyIHZpYQorCW1lbW9yeSwgY291bnQgaXQgYXMgdHdvIHJlbG9hZHMuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IElmIG5vdCBvcHRpbWl6aW5nLCBlbnN1cmUKKwl3ZSBtYXJrIGNvbnRleHQgZGlzcGxheSByZWdzIGFzIGxpdmUgZm9yIHRoZSBlbnRpcmUgZnVuY3Rpb24uCisKK1RodSBOb3YgIDQgMDI6MjQ6MjIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB0cmVlLmggKERFQ0xfSU5fVEVYVF9TRUNUSU9OKTogTmV3IG1hY3JvLgorCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogU2V0IERFQ0xfSU5fVEVYVF9TRUNUSU9OLgorCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2xfbG9jYXRpb24pOiBUZXN0IERFQ0xfSU5fVEVYVF9TRUNUSU9OLgorCitXZWQgTm92ICAzIDIzOjU5OjQ4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbCk6IEluaXRpYWxpemUgZnVuZGVjbCB0byAwLgorCitXZWQgTm92ICAzIDE2OjM0OjAxIDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBwYS5oIChSRUdJU1RFUl9NT1ZFX0NPU1QpOiBEZWNyZWFzZSBjb3N0IGZvciBtb3ZlIGZyb20KKwlTSElGVF9SRUdTIHRvIGF2b2lkIHJlZ2NsYXNzIG92ZXJmbG93LgorCitXZWQgTm92ICAzIDE1OjM1OjQ0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL202OGsvbTY4ay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBGaXggdXAgdGhlIHRlc3QgZm9yIG92ZXJsYXAKKwlvZiBzb3VyY2UgYWRkcmVzcyB3aXRoIG9wZXJhbmRzWzBdLgorCisJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IENvbnNpZGVyIGNvbW11dGF0aXZpdHkgZXZlbiB3aGVuCisJb25lIGFyZyBpcyBhIGNvbnN0YW50LgorCitXZWQgTm92ICAzIDEyOjA2OjIzIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBVc2UgdGFyZ2V0IGFzIGNvcHlfdG9fc3VnZ2VzdGVkX3JlZworCWFyZ3VtZW50IG9ubHkgaWYgaXQgaGFzIHRoZSBzYW1lIG1vZGUgYXMgb3AwLgorCitXZWQgTm92ICAzIDA0OjU4OjI2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcHJvdG9pemUuYyAoc2FmZV93cml0ZSwgc2FmZV9yZWFkKTogUmVhbGx5IHVzZSBhcmcgREVTQy4KKworCSogbGliZ2NjMi5jIChleGl0KTogRml4IGRlY2xhcmF0aW9uIG9mIF9leGl0LgorCisJKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IE1ha2Ugd2FybmluZyBuaWNlciBmb3IgbWlzbWF0Y2gKKwlvZiBpbnQgdnMgbG9uZywgZXRjLgorCURvbid0IHdhcm4gaWYgZmllbGQgd2lkdGggaXMgYW4gdW5zaWduZWQgaW50LgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBBbHdheXMgbWFrZSBhbiBlbnVtIHNpZ25lZCBpZiBpdCB3aWxsIGZpdC4KKworV2VkIE5vdiAgMyAxNDoyMzo1MiAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogIENhbGwgYGludmFsaWRhdGUnIGFsc28gZm9yIFNUUklDVF9MT1dfUEFSVCBhbmQKKwlaRVJPX0VYVFJBQ1QgKHRocmVlIHBsYWNlcykuCisJKGludmFsaWRhdGVfZnJvbV9jbG9iYmVycyk6IExpa2V3aXNlICh0d28gcGxhY2VzKS4KKwkoY3NlX2Fyb3VuZF9sb29wKTogTGlrZXdpc2UuCisJKGludmFsaWRhdGVfc2tpcHBlZF9zZXQpOiBMaWtld2lzZS4KKwkoY3NlX3NldF9hcm91bmRfbG9vcCk6IExpa2V3aXNlLgorCitXZWQgTm92ICAzIDAzOjU2OjU1IDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBQcmludCBgLTInIGluc3RlYWQgb2YgYDAwMzc3Nzc3Nzc3NzYnCisJZm9yIGFuIGVudW1lcmF0aW9uIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIC0yOworCW90aGVyd2lzZSwgR0RCIDQuMTEgcmVqZWN0cyB0aGUgdHlwZS4KKworV2VkIE5vdiAgMyAwNDozNToxMyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChmaXgtaGVhZGVyLCBnZW4tcHJvdG9zKTogTGluayB3aXRoIEhPU1RfTElCUy4KKwlEZXBlbmQgb24gSE9TVF9MSUJERVBTLgorCitXZWQgTm92ICAzIDAwOjA3OjE4IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeHByb3RvOiAgV2hlbiBjaGVja2luZyBmb3IgdXNlcyBvZiBfZmxzYnVmLCBtYWtlIHN1cmUgdG8KKwlub3QgbWF0Y2ggKHNheSkgX19mbHNidWYgb3Igb3RoZXIgbm9uLXdvcmQgX2Zsc2J1ZiBzdHJpbmdzLgorCSogZml4cHJvdG86ICBCZSBtb3JlIHJvYnVzdCB3aGVuIGNoZWNraW5nIGZvciBmaWxlcyBpbmRpcmVjdGx5CisJbmVlZGVkICh2aWEgI2luY2x1ZGUgZGlyZWN0aXZlcykuICBFLmcuIGhhbmRsZSAiLi4vZm9vL2Jhci5oIgorCXByb3Blcmx5LCBhbmQgc2lsZW50bHkgaWdub3JlIG1pc3NpbmcgaW5jbHVkZSBmaWxlcy4KKworVHVlIE5vdiAgMiAxNzozNzozOSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkb19zcGVjXzEpOiBVc2Ugc3BlY192ZXJzaW9uIGZvciAldiwgbm90IHZlcnNpb25fc3RyaW5nLgorCURpc3Rpbmd1aXNoICV2MSBhbmQgJXYyLgorCShkZWZhdWx0X2NvbXBpbGVycyk6IEZvciBfX0dOVUNfTUlOT1JfXywgdXNlICV2Mi4KKwlGb3IgX19HTlVDX18gYW5kIF9fR05VR19fLCB1c2UgJXYxLgorCisJKiBwcm90b2l6ZS5jIChzYWZlX3JlYWQpOiBOZXcgZnVuY3Rpb24uCisJKHByb2Nlc3NfYXV4X2luZm9fZmlsZSwgZWRpdF9maWxlKTogVXNlIHNhZmVfcmVhZC4KKworCSogY2NjcC5jIChzYWZlX3JlYWQpOiBOZXcgZnVuY3Rpb24uCisJKG1haW4sIGZpbmNsdWRlLCBjaGVja19wcmVjb21waWxlZCk6IFVzZSBzYWZlX3JlYWQuCisKK1R1ZSBOb3YgIDIgMTQ6MzE6NDIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogRG9uJ3QgcmVtb3ZlIC8qKi8gZnJvbSBYMTEvWGxpYmludC5oIG9yCisJWDExL2V4dGVuc2lvbnMvbXVsdGlidWZzdC5oOyB1bm5lY2Vzc2FyeS4KKworVHVlIE5vdiAgMiAwNzoyMDoxMiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBGdW5jdGlvbiBgZmZzJyB0YWtlcyBgaW50Jywgbm90IG1vZGUgdGhhdAorCWlzIEJJVFNfUEVSX1dPUkQgd2lkZS4KKworVHVlIE5vdiAgMiAwMjo1MzoyNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNwLXR5cGVjay5jIChjb21wdHlwZXMpOiBGaXggdHlwbyBpbiBjaGFuZ2luZyBTVFJJQ1QgZnJvbSAyIHRvIDEuCisKKwkqIHByb3RvaXplLmMgKGVkaXRfZmlsZSk6IFVzZSBzYWZlX3dyaXRlLgorCShzYWZlX3dyaXRlKTogTmV3IHN1YnJvdXRpbmUuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRGlzY2FyZCBfXyBwcmVmaXggbGlrZSBfIG9yIF9feC4KKworCSogb2JqYy9vYmplY3RzLmM6IEluY2x1ZGUgdGNvbmZpZy5oLgorCitNb24gTm92ICAxIDIzOjM0OjQ2IDE5OTMgIFJhaW5lciBPcnRoICAocm9AYW5lbW9uZS50ZWNoZmFrLnVuaS1iaWVsZWZlbGQuZGUpCisKKwkqIGZpeGluY2x1ZGVzIChzeXMvc3RhdC5oKSBmaXggZmNobW9kIHByb3RvdHlwZSwgZmlyc3QgYXJnIGlzCisJaW50LCBub3QgY2hhciAqIFtBSVggMy4yLjRdCisJKHJwYy9zdmMuaCk6IGF2b2lkIG5lc3RlZCBjb21tZW50cyBbVWx0cml4IDQuM10KKwkoc3RkaW8uaCwgc3RkbGliLmgpOiBmaXhlZCBnZXRvcHQgcHJvdG90eXBlcyB0byBtYXRjaCBQT1NJWC4yCisJW0RFQyBBbHBoYSBPU0YvMSAxLjNdCisKK01vbiBOb3YgIDEgMTE6NDI6MjkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogRml4IDxzeXMvbGltaXRzLmg+IGxpa2UgPGxpbWl0cy5oPi4KKworCSogZml4aW5jbHVkZXM6IFVucXVvdGUgJ2YnIGluICNkZWZpbmUgX0lPLiAgRml4IGVsZi5oIGxpa2UKKwllbGZfYWJpLmguICBGb3IgSXJpeCA1LgorCitNb24gTm92ICAxIDE1OjE1OjM4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChtaXBzLXNnaS1pcml4NSopOiBBZGQgZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4uCisKKwkqIGZpeHByb3RvIChzZXRqbXAuaCk6ICBEb24ndCByZXF1aXJlIHNpZ2xvbmdqbXAgYW5kIHNpZ3NldGptcC4KKwlUaGV5IG5lZWQgc2lnam1wX2J1ZiwgYW5kIGFyZSBtaXNzaW5nIG9uIG1hbnkgc3lzdGVtcy4KKworCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4cHJvdG8pOiBQcmludCBhIG5vdGljZSB0aGF0IHdhcm5pbmdzIGFuZCBlcnJvcnMKKwlmcm9tIGZpeHByb3RvIGFyZSBub3JtYWwuCisJKGRpc3RkaXIpOiBBdm9pZCBzcHVyaW91cyBvdXRwdXQgZnJvbSBnY2MudGV4aSB2ZXJzaW9uIG51bWJlciBjaGVjay4KKwkoZGlmZik6IE5ldyB0YXJnZXQuCisKK01vbiBOb3YgIDEgMTU6MTk6MDkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogRG9uJ3QgcmVtb3ZlIC8qKi8gZnJvbSBYMTEveG1kLmg7IGJyZWFrcyBnY2MKKwktdHJhZGl0aW9uYWwgb24gc29tZSBzeXN0ZW1zLgorCitNb24gTm92ICAxIDA3OjM4OjU4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUKKworCSogcnM2MDAwLm1kOiBBZGQgc2V0X2F0dHIgZm9yICJsZW5ndGgiIHdoZW4gd2UgYXJlIGdvaW5nIHRvIHNwbGl0CisJYW4gaW5zbiBhdCBvdXRwdXQgdGltZS4KKworCSogcnM2MDAwLm1kIChiZG4vYmR6KTogRml4IHR5cG8gaW4gY2hlY2tpbmcgZm9yIHdoZW4gd2UKKwluZWVkIHRvIHNwbGl0LgorCisJKiByczYwMDAubWQgKG11bHNpMyk6IE1ha2UgYWx0ZXJuYXRpdmVzIGJlICJtcSIgYW5kICJub19tcSIKKwlpbnN0ZWFkIG9mICJwb3dlciIgYW5kICJwb3dlcnBjIi4gIE9ubHkgYWxsb3cgb25lIHBhdHRlcm4gKGVpdGhlcgorCXdpdGggb3Igd2l0aG91dCB0aGUgY2xvYmJlciBvZiBNUSkgdG8gbWF0Y2guCisKKwkqIHN0bXQuYyAoZXhwYW5kX2RlY2xfaW5pdCk6IElmIENPTlNUX0RFQ0wsIGRvbid0IGdlbmVyYXRlIGFueQorCWNvZGUsIGJ1dCBjYWxsIGV4cGFuZF9leHByIGlmIERFQ0xfSU5JVElBTCBpcyBhIGNvbnN0YW50LgorCitNb24gTm92ICAxIDA2OjE3OjE2IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBtNjhrLm1kIChkaXZoaXNpMywgdWRpdmhpc2kzLCBtb2RoaXNpMywgdW1vZGhpMyk6IENvbW1lbnQgb3V0LgorCShkaXZoaXNpMywgdWRpdmhpc2kzLCBtb2RoaXNpMywgdW1vZGhpMyByZWNvZ25pemVycyk6IENvbW1lbnQgb3V0LgorCisJKiBleHBtZWQuYyAoc3ludGhfbXVsdCk6IFdoZW4gZmFjdG9yaW5nIFQsIGJyZWFrIGZyb20gbG9vcCBhZnRlcgorCWZpcnN0IGZhY3Rvci4KKwkoZXhwYW5kX211bHQpOiBJbmNyZWFzZSBtYXggY29zdCB0byAxMiBhZ2Fpbi4KKworTW9uIE5vdiAgMSAwMTowNjoyNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNjY3AuYyAoc2FmZV93cml0ZSk6IE5ldyBmdW5jdGlvbi4KKwkod3JpdGVfb3V0cHV0KTogVXNlIHNhZmVfd3JpdGUuCisKK01vbiBOb3YgIDEgMDE6MDY6MjcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBWZXJzaW9uIDIuNS4yIHJlbGVhc2VkLgorCisJKiBjY2NwLmMgKGRvX2lkZW50KTogRml4IHByZXZpb3VzIGNoYW5nZS4KKworU3VuIE9jdCAzMSAxNDo0MTo0MCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIFZlcnNpb24gMi41LjEgcmVsZWFzZWQuCisKKwkqIGNjY3AuYyAoZG9faWRlbnQpOiBTdWJzdGl0dXRlIG1hY3JvcyBhbmQgb3V0cHV0IGhlcmUuCisJKGRpcmVjdGl2ZV90YWJsZSk6IFR1cm4gb2ZmIHRoZSBwYXNzX3RocnUgZmllbGQgZm9yICNpZGVudC4KKworCSogYy1jb21tb24uYyAoc2hvcnRlbl9jb21wYXJlKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisJSW5zdGVhZCwganVzdCBzdXBwcmVzcyB3YXJuaW5ncyBpZiBib3RoIGFyZ3MgYXJlIGNvbnN0YW50LgorCisJKiBjb25maWcvbTY4ay9tNjhrLm1kIChleHR6diwgYW5kIGl0cyByZWNvZ25pemVyKToKKwlJZiB3aWR0aCBpcyAzMiwgZG9uJ3Qgc2V0IENDX05PVF9ORUdBVElWRS4KKwlJZiB3aWR0aCBpcyB2YXJpYWJsZSwgY2xlYXIgdGhlIENDIHN0YXR1cy4KKworCSogY29uZmlnL202OGsvbTY4ay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBFeHRlbmQgdGhlIHNwZWNpYWwgY2FzZQorCWZvciAqLS1zcCA9IHNwW05dIHRvIGhhbmRsZSAxMiBieXRlcyBhcyB3ZWxsIGFzIDggYnl0ZXMuCisKK1N1biBPY3QgMzEgMTc6MDI6MTMgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogV2hlbiB1bnN3aXRjaGluZyBhIENPTkRfRVhQUgorCWluaXRpYWxpemVyIChpLmUuIGludCBhID0gYiA/IDEgOiAwID0+IGludCBhOyBiID8gYT0xIDogYT0wKSwKKwlzZXQgVFJFRV9TSURFX0VGRkVDVFMgb24gdGhlIHJlc3VsdC4KKworU3VuIE9jdCAzMSAxMzozMzo0NiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IEZvciBlcXVhbGl0eSB0ZXN0IG9mIGEgc2luZ2xlIGJpdCwgdXNlCisJc3VidGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGluIGNhbGxzLgorCitTYXQgT2N0IDMwIDE3OjU4OjM3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL202OGsvaHB1eDcuaDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKG02OGstaHAtaHB1eDcqKTogTmV3IGFsdGVybmF0aXZlLgorCisJKiBjLWNvbW1vbi5jIChzaG9ydGVuX2NvbXBhcmUpOiBEbyBub3RoaW5nIGlmIGJvdGggYXJncyBjb25zdGFudC4KKworCSogY29uZmlnLnN1YjogUmUtYWRkIGhpdGFjaGkgdG8gbGlzdCBvZiBjb21wYW5pZXMgbm90IHRvIHRyZWF0CisJYXMgT1MgbmFtZXMuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogV2hlbiBleHRlbmRpbmcgdG8gbXVsdGktd29yZCByZWdpc3RlcgorCXZpYSBpdHMgbG93IHdvcmQsIGNsb2JiZXIgdGhlIHdob2xlIHRoaW5nLgorCisJKiBjb25maWcvaTM4Ni9pMzg2LmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEV4dGVuZCB0aGUgc3BlY2lhbCBjYXNlCisJZm9yICotLXNwID0gc3BbTl0gdG8gaGFuZGxlIDEyIGJ5dGVzIGFzIHdlbGwgYXMgOCBieXRlcy4KKworU2F0IE9jdCAzMCAxNzoyMTozMyAxOTkzICBBdHN1c2hpIEZ1cnV0YSAgKGZ1cnV0YUBzcmEuY28uanApCisKKwkqIHBhLWdoaXV4LmgsIHBhLWhpdXguaCwgcGExLWdoaXV4Lmg6IE5ldyBmaWxlcywgZm9yIEhpdGFjaGkgSDMwNTAvUlguCisJKiBwYTEtaGl1eC5oLCB4LXBhLWhpdXgsIHhtLXBhaGl1eC5oOiBMaWtld2lzZS4KKwkqIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZTogQWRkIEgzMDUwL1JYIHN1cHBvcnQuCisKK1NhdCBPY3QgMzAgMDM6NDA6MDggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvcGEvcGEuYyAob3V0cHV0X2RicmEpOiBGaXggYXJndW1lbnQgbnVtYmVyIGluIGFkZGkgYXQgZW5kLgorCisJKiB0cmVlLmggKGVudW0gYnVpbHRfaW5fZnVuY3Rpb24pOiAgQWRkZWQgRU5EX0JVSUxUSU5TIHRvIGRlbGltaXQKKwlzdGFuZGFyZCBmcm9tIGxhbmd1YWdlLXNwZWNpZmljIGJ1aWx0aW5zLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFdoZW4gYW4gYGV4dGVybiBpbmxpbmUnIGlzIG5vdAorCXJlYWxseSBpbmxpbmUsIGNsZWFyIERFQ0xfSU5JVElBTCBzbyB3ZSBkb24ndCBjb21wbGFpbiBhYm91dAorCWEgc3Vic2VxdWVudCBub24tZXh0ZXJuIGRlZmluaXRpb24uCisJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogSWYgcmVzdF9vZl9jb21waWxhdGlvbiBzZXQgREVDTF9JTklUSUFMCisJdG8gbnVsbCwgbGVhdmUgaXQgbnVsbC4KKworCSogYy1jb21tb24uYyAoY29udmVydF9hbmRfY2hlY2spOiBEb24ndCB3YXJuIGNvbnZlcnRpbmcgMHhmZgorCXRvIGEgc2lnbmVkIGNoYXIsIGV0Yy4sIHVubGVzcyBwZWRhbnRpYy4KKworCSogTWFrZWZpbGUuaW4gKG1haW52ZXJzaW9uKTogTmV3IHZhcmlhYmxlLgorCShkaXN0ZGlyKTogVXNlIG1haW52ZXJzaW9uIHdoZW4gdmVyaWZ5aW5nIGdjYy50ZXhpIGhhcyBiZWVuIHVwZGF0ZWQuCisKK1NhdCBPY3QgMzAgMDM6MTI6NTQgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGN5Z251cy5jb20pCisKKwkqIG02OGsubWQgKG11bHNpZGkzIHBhdHRlcm5zKTogRml4IHR5cG8sIExTSElGVFJUIHdhcyBBU0hJRlQuCisKK0ZyaSBPY3QgMjkgMTI6MDY6MDkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmMuc3ZyNCAoc3lzL3N0YXQuaCk6IERvbid0IGNoYW5nZSBkZWZpbml0aW9ucyBpbnRvCisJcHJvdG90eXBlcyBpZiB0aGV5IG1heSBhbHJlYWR5IGJlIGluIHByb3RvdHlwZSBmb3JtLgorCitGcmkgT2N0IDI5IDE2OjUwOjMzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2kzODYvbGludXguaCAoTElCX1NQRUMpOiBVc2UgLWxpZWVlIGlmIC1taWVlZS1mcC4KKworRnJpIE9jdCAyOSAxMzowNDoxNiAxOTkzICBBcm5lIEguIEp1dWwgIChhcm5lakBmbS51bml0Lm5vKQorCisJKiBtaXBzL2lyaXM1LmggKExJTktfU1BFQyk6IFBhc3MgLW5vX3VucmVzb2x2ZWQgaWYgLWNhbGxfc2hhcmVkLgorCitGcmkgT2N0IDI5IDEyOjUyOjU0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAoYWRkc2YzLCBzdWJzZjMsIG11bHNmMywgZGl2c2YzKTogUHV0IFBPV0VSUEMgZmlyc3QsCisJdGhlbiBQT1dFUi4KKworCSogbWlwcy9pcmlzNS5oICh7REJYLFNEQixNSVBTfV9ERUJVR0dJTkdfSU5GTyk6IFR1cm4gb2ZmIHVudGlsIHdvcmtpbmcuCisKK0ZyaSBPY3QgMjkgMTI6MTU6MTIgMTk5MyAgTWluaCBUcmFuLUxlICAodHJhbmxlQGludGVsbGljb3JwLmNvbSkKKworCSogaTM4Ni94bS1haXguaDogRGVmaW5lIEhBVkVfUFVURU5WIGZvciBBSVggUFMvMi4KKworRnJpIE9jdCAyOSAxMTo0OTo0NiAxOTkzICBESiBEZWxvcmllIChkakBjdHJvbi5jb20pCisKKwkqIGkzODYvZ28zMi5oOiBBZGQgc3VwcG9ydCBmb3IgY29mZi1iYXNlZCBjdG9yL2R0b3IgaGFuZGxpbmcuIAorCitUaHUgT2N0IDI4IDIxOjMzOjIyIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQG5leHQuY29tKQorCisJKiBvYmpjLWFjdC5jIChjaGVja19tZXRob2RzX2FjY2Vzc2libGUpOiBGaXggYnVnIGluCisJLVduby1wcm90b2NvbC4gIFJlc2V0IGNoYWluIHRvIGJvdHRvbSBjbGFzcyBmb3IgZWFjaCBzZWFyY2guIAorCitUaHUgT2N0IDI4IDIxOjMwOjM4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKGluaXQpOiBSZW1vdmUgZXh0cmFuZW91cyBwb3BfbW9tZW50YXJ5IGluIGVycm9yIGNhc2UuCisKK1RodSBPY3QgMjggMTk6MDE6MzMgMTk5MyAgUm9uIEd1aWxtZXR0ZSAgKHJmZ0BuZXRjb20uY29tKQorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogSWYgYW4gb3ZlcmxvYWRlZCBpZGVudGlmaWVyCisJY2FuIG9ubHkgbWVhbiBvbmUgdGhpbmcsIGl0IGNhbiBvbmx5IG1lYW4gb25lIHRoaW5nLgorCitUaHUgT2N0IDI4IDE4OjUyOjE1IDE5OTMgIEpvaG4gRiBDYXJyICAoamZjQG1pdC5lZHUpCisKKwkqIGNwLXR5cGVjay5jIChnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYyk6ICBDb252ZXJ0IGRlbHRhCisJdG8gc2l6ZV90IGJlZm9yZSBhZGRpbmcgdG8gcG9pbnRlci4KKworVGh1IE9jdCAyOCAxODo0Mzo0MSAxOTkzICBSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGFybS5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogVXNlIERFQ0xfUlRMIGZvciBERUNMcy4KKworV2VkIE9jdCAyNyAyMDo1ODozMSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogRml4IHR5cG8sIGBQbW9kZScgd2FzIGBtb2RlJy4KKworV2VkIE9jdCAyNyAwMDowMTowNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFdoZW4gdXNpbmcgc3JjX3JlbGF0ZWQsIGNvcHkgdGhlIHJ0eC4KKwlMaWtld2lzZSBmb3Igc3JjX2Vxdl9oZXJlLgorCisJKiBjLXR5cGVjay5jIChvdXRwdXRfcGVuZGluZ19pbml0X2VsZW1lbnRzKTogRG9uJ3QgY3Jhc2ggaWYKKwljb25zdHJ1Y3Rvcl91bmZpbGxlZF9maWVsZHMgaXMgMC4KKworCSogZml4aW5jbHVkZXMgKGJzZC9zeXMvd2FpdC5oKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisKKwkqIGNvbmZpZy9tNjhrL3htLWFtaXguaCAoYWJvcnQpOiBEb24ndCB1c2UgZmFuY3lfYWJvcnQuCisJKGFsbG9jYSk6IEluIEdDQyAxLCBkZWZpbmUgYXMgX19idWlsdGluX2FsbG9jYS4KKworCSogY29uZmlnL202OGsvYW1peC5oIChBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpCisJKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwpOiAjaWYgMCBkZWxldGVkLCB0byByZWVuYWJsZSB0aGVzZS4KKwkoTk9fRE9UX0lOX0xBQkVMKTogRGVmaW5lZC4KKwkoTk9fRE9MTEFSX0lOX0xBQkVMKTogVW5kZWZpbmVkLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBJZiBwYXJtcmVnIGlzIGEgQ09OQ0FULCBoYW5kbGUgdGhlCisJY2FzZSB3aGVyZSBzdGFja19wYXJtIGlzIDAuCisKKwkqIGV4cHIuYyAoZG9fanVtcCk6IFVzZSBkb19qdW1wX2J5X3BhcnRzX2VxdWFsaXR5IGZvciBjb21wbGV4IGNvbXBhcmVzLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBXaGVuIG1ha2luZyB1bmlvbiBjb25zdHJ1Y3RvciwKKwljb3B5IFRSRUVfQ09OU1RBTlQgZnJvbSB0aGUgZ2l2ZW4gdmFsdWUuCisJKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBTcGVjaWFsIGhhbmRsaW5nIGZvciAiY29uc3RhbnQiCisJdW5pb24gY29uc3RydWN0b3IuCisKKwkqIGJ5dGVjb2RlLmRlZjogUmVuYW1lIGR1cCB0byBkdXBsaWNhdGUuCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogVXNlIGR1cGxpY2F0ZS4KKwkoYmNfZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KKwkoYmNfZXhwYW5kX2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZV9icmllZik6IFVzZSB1bnNpZ25lZCBjaGFyIHRvIHByaW50CisJdGhlIGJ5dGVzIG9mIGEgcmVhbCBjb25zdGFudC4KKworCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IFdoZW4gY2FsbGluZyBvcGVyYW5kX3N1YndvcmRfZm9yY2UsCisJaWYgVkFMVUUgaGFzIGEgbm9uLXZvaWQgbW9kZSwgcGFzcyB0aGF0IG1vZGUuCisKKwkqIGNvbmZpZy9tNjhrL2FtaXguaCAoTk9fRE9MTEFSX0lOX0xBQkVMKTogRGVmaW5lZC4KKworVHVlIE9jdCAyNiAxOTowNTozNiAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BtaXQuZWR1KQorCisJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBTdXBwb3J0IC1tY3B1PXJzYzEuCisKK1R1ZSBPY3QgMjYgMTk6MDE6MDggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZGVkdWNlZC5oKTogQWRkIC1JLiBhbmQgLUkkKHNyY2RpcikuCisKKwkqIHNjYW4tdHlwZXMuc2ggKENDKTogTW92ZSBhICIgdG8gYXZvaWQgc2hlbGwgZXJyb3IuCisKKwkqIGNvbmZpZy5zdWIgKHBhcmFnb24pOiBOZXcgYWxpYXMuCisJKiBjb25maWd1cmUgKGk4NjAtKi1vc2YqKTogTmV3IGFsdGVybmF0aXZlLgorCSogZ3N0ZGFyZy5oLCBndmFyYXJncy5oIFtfX2k4NjBfX106IEFkZCB0byBsaXR0bGUtZW5kaWFuIGxpc3QuCisJKiBsaWJnY2MyLmMgKF9fX2J1aWx0aW5fc2F2ZXJlZ3MpOiBOZXcgYWx0ZXJuYXRpdmUgZm9yIF9fUEFSQUdPTl9fLgorCSogdmEtaTg2MC5oOiBUcmVhdCBfX1BBUkFHT05fXyBsaWtlIF9fU1ZSNF9fLgorCSh2YV9kY2wpIFtfX1BBUkFHT05fX106IERlY2xhcmUgdmFfYWxpc3QuCisJKiBwYXJhZ29uLmgsIHhtLXBhcmFnb24uaDogTmV3IGZpbGVzLgorCitUdWUgT2N0IDI2IDE4OjU4OjQ5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZpeC1oZWFkZXIuYzogRGVsZXRlIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mICJidWYiLgorCSogZml4LWhlYWRlci5jLCBnZW4tcHJvdG9zLmMsIHNjYW4tZGVjbHMuYywgc2Nhbi5jOiBJbmNsdWRlIGhjb25maWcuaC4KKwkqIHNjYW4tZGVjbHMuYzogUmVtb3ZlIHVudXNlZCAjaWZkZWYgT0xELgorCisJKiBNYWtlZmlsZS5pbiAoZ2VuLXByb3Rvcy5vLCBzY2FuLm8sIGZpeC1oZWFkZXIubywgc2Nhbi1kZWNscy5vKToKKwlBZGQgcnVsZSB0byBjb21waWxlIHVzaW5nICQoSE9TVF9DQykuCisJU2hvdyB1c2luZyBoY29uZmlnLmguCisKKwkqIHJzNjAwMC5tZCAobW92c2kpOiBDYW4gY29weSBhIFRPQyBhZGRyZXNzIGludG8gYSByZWdpc3Rlci4KKworVHVlIE9jdCAyNiAxNTowMzowNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IERlZmluZSBfX0dOVUNfTUlOT1JfXywgdXNpbmcgJXYuCisJKGRvX3NwZWNfMSk6IEltcGxlbWVudCAldi4KKworVHVlIE9jdCAyNiAxMTowNjo1OSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChjb25zdW1lX3N0cmluZyk6IEhhbmRsZSAiXCIiIGFuZCAnXCcnLgorCitUdWUgT2N0IDI2IDEzOjQ0OjE3IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGZpeC1oZWFkZXIubyk6IERlcGVuZCBvbiBmaXgtaGVhZGVyLmMuCisJKHNjYW4tZGVjbHMubyk6IE5ldyB0YXJnZXQuCisJKGdlbi1wcm90b3Mubywgc2Nhbi5vKTogTmV3IHRhcmdldHMuCisKKwkqIE1ha2VmaWxlLmluIChnZW4tcHJvdG9zLCBmaXhfaGVhZGVyKTogQWRkICQoSE9TVF9DRkxBR1MpIGFuZAorCSQoSE9TVF9MREZMQUdTKS4KKworCSogeC1zeXN2IChPTERDQyk6IEFkZCAtWE5oMTUwMC4KKwkqIHgtbWlwczogTGlrZXdpc2UuCisKK1R1ZSBPY3QgMjYgMTI6MjE6MDYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogRml4IE5lWFQgPHN5cy93YWl0Lmg+IHByb2JsZW0gaW4gPGJzZC9zeXMvd2FpdC5oPgorCWFzIHdlbGwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgdGhlIGZpbGUgaXMgaW4gTmVYVFN0ZXAgMy4wLgorCitUdWUgT2N0IDI2IDA3OjIzOjA4IDE5OTMgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoaW5pdF9leHBtZWQpOiBVc2UgcmVnaXN0ZXIgMTAwMDAsIG5vdCBGSVJTVF9QU0VVRE9fUkVHSVNURVIKKwl0aGF0IGdldHMgc3BlY2lhbCB0cmVhdG1lbnQgaW4gcnR4X2Nvc3QuCisJKGV4cGFuZF9tdWx0KTogRGVjcmVhc2UgbWF4IGNvc3QgdG8gOC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogRm9yIFRSVU5DX01PRF9FWFBSIGFuZCBGTE9PUl9NT0RfRVhQUiwKKwlzZXQgY29tbW9uLgorCitUdWUgT2N0IDI2IDAxOjU5OjE3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcHJvdG9pemUuYyBbX19OZVhUX19dOiBEb24ndCBkZWNsYXJlIHNldGptcCBvciBsb25nam1wLgorCisJKiBjb25maWd1cmU6IElnbm9yZSAtLXZlcmJvc2Ugb3B0aW9uIGlmIHNwZWNpZmllZC4KKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogRG9uJ3QgY2FsbCBncm91cF9pbnNucworCXdoZW4gWCBpcyBhIENPTkNBVC4KKwkoZW1pdF9tb3ZlX2luc25fMSwgY2FzZSBDT05KX0VYUFIgYW5kIENPTVBMRVhfRVhQUik6IExpa2V3aXNlLgorCisJKiBmaXhwcm90byAoc2lnbmFsLmgpOiBBZGQgcHJvdG90eXBlcyBvbmx5IGZvciBraWxsIGFuZCByYWlzZS4KKwlOb3QgZm9yIHRoZSBQT1NJWCBzaWduYWwgZnVuY3Rpb25zLgorCShzeXMvcmVzb3VyY2UuaCk6IERlbGV0ZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGlzIGZpbGUuCisKKwkqIGMtdHlwZWNrLmMgKHB1c2hfaW5pdF9sZXZlbCk6IEFsaWduIGhlcmUgZm9yIGVsZW1lbnQgb2YgcmVjb3JkLgorCShwcm9jZXNzX2luaXRfZWxlbWVudCk6IE5vdCBoZXJlICh3YXMgYmVmb3JlIGNhbGwgdG8gcHVzaF9pbml0X2xldmVsKS4KKworCSogc2Nhbi10eXBlcy5zaDogRXhwZWN0IEdDQyBzb3VyY2UgZGlyIGFzIGFyZ3VtZW50LgorCUluIGR1bW15LmMsIHVzZSBnc3RkZGVmLmggYW5kIGdzdGRhcmcuaCwgbm90IHN0ZGRlZi5oIGFuZCBzdGRhcmcuaC4KKwkqIE1ha2VmaWxlLmluIChkZWR1Y2VkLmgpOiBQYXNzIEdDQyBzb3VyY2UgZGlyIHRvIHNjYW4tdHlwZXMuc2guCisKK01vbiBPY3QgMjUgMjM6MjM6MjYgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGJsdWVzLmN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IEZvciBUUlVOQ19NT0RfRVhQUiBhbmQgRkxPT1JfTU9EX0VYUFIsCisJZG9uJ3Qgc2hvcnRlbiB3aGVuIGRpdmlzb3IgbWlnaHQgYmUgLTEuCisKK01vbiBPY3QgMjUgMjM6NDU6MjAgMTk5MyBNaW5oIFRyYW4tTGUgKHRyYW5sZUBpbnRlbGxpY29ycC5jb20pCisKKwkqIHNlcS1zeXN2My5oIChDUFBfU1BFQyk6IERlZmluZSBfU0VRVUVOVF8gdG8gYmUgY29tcGF0aWJsZSB3aXRoIGNjLgorCShJTlZPS0VfX21haW4pOiBEZWZpbmVkLgorCShIQVZFX0FURVhJVCk6IERlZmluZWQuCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni1zZXF1ZW50LXN5c3YpOiBVc2UgZml4aW5jLnNydjQgYW5kIGRlZmluZQorCWJyb2tlbl9pbnN0YWxsLgorCitNb24gT2N0IDI1IDE4OjUzOjUxIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgUExBQ0VIT0xERVJfRVhQUik6IEZpeCB0eXBvcy4KKworTW9uIE9jdCAyNSAxNjoyNTo1OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNjYW4uYyAoc2Nhbl9zdHJpbmcsIHNraXBfc3BhY2VzKTogQWRkIG5ld2xpbmUgYmVmb3JlIGZuIG5hbWUuCisKKwkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IFdoZW4gcmVhZGluZyBwYXJhbWV0ZXIgbGlzdCwKKwloYW5kbGUgd2hpdGVzcGFjZSBkaWZmZXJlbnRseSwgYW5kIGtlZXAgdHJhY2sgb2YgbGluZSBudW1iZXIuCisKKwkqIGNvbmZpZy9pMzg2L3gtbGludXggKFNUTVBfRklYUFJPVE8pOiBEZWZpbmUgYXMgZW1wdHkuCisKK01vbiBPY3QgMjUgMTM6MjI6MzcgMTk5MyAgS2F2ZWggUi4gR2hhemkgIChnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1KQorCisJKiBmaXhpbmNsdWRlczogRml4IGJhZCBTX0lTKiBtYWNyb3MgaW4gPHN5cy9zdGF0Lmg+IG9uIG04OGstc3lzdjMuCisKK01vbiBPY3QgMjUgMjI6MzQ6MTIgQlNUIDE5OTMJUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBmaXhpbmNsdWRlczogUmVtb3ZlIG5lc3RlZCBicmFja2V0cyBpbiBjaGFuZ2Ugb2YgT2N0IDIxLgorCUZpeCB0b2tlbiBwYXN0aW5nIG9wZXJhdG9yIGluIEFSTS9SSVNDaVggaW5jbHVkZSBmaWxlcy4KKworTW9uIE9jdCAyNSAxMzowMTo1MiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHNwYXJjLmggKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IERvbid0IGRlZmluZSBoZXJlLgorCSogc29sMi5oIChMT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEbyBkZWZpbmUgaGVyZS4KKworCSogY29uZmlndXJlIChtaXBzLXNnaS1pcml4NSk6IERvbid0IHVzZSBjb2xsZWN0LgorCitTdW4gT2N0IDI0IDE0OjE1OjEyIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogbGliZ2NjMi5jIChMX2JiKTogVW5kZWYgTlVMTCBiZWZvcmUgaW5jbHVkaW5nIDxzdGRpby5oPi4KKworU3VuIE9jdCAyNCAwMzowNDo1MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChnKysubyk6IE5ldyB0YXJnZXQuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IFNldCBsYXN0X2Fzc2VtYmxlX3ZhcmlhYmxlX2RlY2wuCisJKGxhc3RfYXNzZW1ibGVfdmFyaWFibGVfZGVjbCk6IE5ldyB2YXJpYWJsZS4KKwkqIHRvcGxldi5jIChyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiBUZXN0IHRoYXQgdmFyLgorCitTYXQgT2N0IDIzIDIwOjI4OjEzIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlIChtaXBzLXNnaS1pcml4NSk6IFVuY29tbWVudC4KKwkqIGlyaXM1Lmg6IFJlcGxhY2Ugd2l0aCB3b3JraW5nIHZlcnNpb24uCisJKiB4bS1pcmlzNS5oOiBOZXcgZmlsZS4KKworCSogbWlwcy5jIChtaXBzX2FiaWNhbGxzKTogTmV3IHZhcmlhYmxlLgorCShvdmVycmlkZV9vcHRpb25zKTogU2V0IG1pcHNfYWJpY2FsbHMuICBBbGxvdyAnXicgYXMgcHJpbnQgb3BlcmFuZAorCXB1bmN0dWF0aW9uIGNoYXJhY3Rlci4KKwkocHJpbnRfb3BlcmFuZCk6IEFkZCBzdXBwb3J0IGZvciAnXicuCisJKG1pcHNfYXNtX2ZpbGVfc3RhcnQpOiBVc2UgQUJJQ0FMTFNfQVNNX09QIGluc3RlYWQgb2YgIi5hYmljYWxscyIuCisJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IEhhbmRsZSBUQVJHRVRfQUJJQ0FMTFMgY2FzZS4KKwkobWlwc19leHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4KKwkqIG1pcHMuaCAobWlwc19hYmljYWxscyk6IERlY2xhcmUgbmV3IHZhcmlhYmxlLgorCShQSUNfRlVOQ1RJT05fQUREUl9SRUdOVU0pOiBOZXcgbWFjcm8uCisJKFNUQVJUSU5HX0ZSQU1FX09GRlNFVCk6IEhhbmRsZSBUQVJHRVRfQUJJQ0FMTFMgY2FzZS4KKwkqIG1pcHMubWQgKGFiaWNhbGxzKTogTmV3IGF0dHJpYnV0ZS4KKwkoZGVmaW5lX2RlbGF5KTogRG9uJ3QgZmlsbCBjYWxsIGRlbGF5IHNsb3RzIHdoZW4gVEFSR0VUX0FCSUNBTExTLgorCShjYWxsX2ludGVybmFsMywgY2FsbF92YWx1ZV9pbnRlcm5hbDMpOiBSZW5hbWVkIGZyb20KKwljYWxsX2ludGVybmFsMiBhbmQgY2FsbF92YWx1ZV9pbnRlcm5hbDIuCisJKGNhbGxfaW50ZXJuYWwyLCBjYWxsX3ZhbHVlX2ludGVybmFsMik6IE5ldyBjYWxsIHBhdHRlcm5zIGZvcgorCVRBUkdFVF9BQklDQUxMIGNhc2UuCisJKGNhbGxfaW50ZXJuYWw0LCBjYWxsX3ZhbHVlX2ludGVybmFsNCk6IExpa2V3aXNlLgorCitTYXQgT2N0IDIzIDAwOjA2OjE0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGRlZHVjZWQuaCk6IERlcGVuZCBvbiBHQ0NfUEFTU0VTIGFuZCBzdG1wLWludC1oZHJzLgorCSh4c3lzLXByb3Rvcy5oKTogRGVwZW5kIG9uIEdDQ19QQVNTRVMuCisJKGZpeGhkci5yZWFkeSk6IE5ldyB0YXJnZXQuCisJKHN0bXAtZml4cHJvdG8pOiBEZXBlbmQgb24gZml4aGRyLnJlYWR5LCBub3QgZml4LWhlYWRlciBpdHNlbGYuCisJKGNsZWFuKTogRGVsZXRlIGZpeGhkci5yZWFkeS4KKworRnJpIE9jdCAyMiAwMToyMDoyOSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeC1oZWFkZXIuYzogUmVuYW1lZCBmcm9tIHBhdGNoLWhlYWRlci5jLgorCShwcm9nbmFtZSk6IENoYW5nZSBuYW1lLgorCSogZml4cHJvdG86IFVzZSBmaXgtaGVhZGVyLgorCSogTWFrZWZpbGUuaW4gKGZpeC1oZWFkZXIsIGZpeC1oZWFkZXIubyk6IFJlbmFtZWQgZnJvbSBwYXRjaC1oZWFkZXIqLgorCShzdG1wLWZpeHByb3RvLCBtb3N0bHljbGVhbik6IFJlbmFtZSByZWZlcmVuY2VzIHRvIHRoZW0uCisKKwkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBJbiBCTEttb2RlIGNhc2UsIHJldHVybiBibGtfb2JqZWN0LgorCisJKiBjb25maWcvbTg4ay9tODhrLmggKEFTTV9GSU5JU0hfREVDTEFSRV9PQkpFQ1QpOiBVbmRlZiwgdGhlbiBkZWZpbmUuCisKKwkqIFZlcnNpb24gMi41LjAgcmVsZWFzZWQuCisKK1RodSBPY3QgMjEgMTM6MDI6NDggMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBtaXBzLmggKENVTVVMQVRJVkVfQVJHUyk6IERvdWJsZSBzaXplIG9mIGFkanVzdCBhcnJheS4KKwkqIG1pcHMuYyAoZnVuY3Rpb25fYXJnKTogQWRkIGNvbW1lbnQgYWJvdXQgdG9vIG1hbnkgYWRqdXN0IGVudHJpZXMuCisKK1RodSBPY3QgMjEgMTM6NDg6MTQgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IE11bHRpLXdvcmQgb2JqZWN0cyBjYW5ub3QKKwlnbyBpbnRvIE1RLCBMUiwgb3IgQ1RSLgorCisJKiBjb25maWd1cmUgKG1pcHMtc2dpLWlyaXM1Kik6IERpc2FibGU7IG5vdCB3b3JraW5nIHlldC4KKwkqIG1pcHMvaXJpczUuaCAoQVNNX1NQRUMsIExJTktfU1BFQywgQ1BQX1BSRURFRklORVMpOiBFeHRlbmQgYSBiaXQuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogQ3JlYXRlIFJFU1VMVCBpbiBwcm9wZXIgbW9kZSB3aGVuIHRyeWluZworCXF1b3RpZW50LWFuZC1yZW1haW5kZXIgaW5zbi4KKworVGh1IE9jdCAyMSAxMzoxNDo0MCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChTVE1QX0ZJWFBST1RPKTogVW5jb21tZW50IHRoZSBkZWZpbml0aW9uLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0cnVjdG9yKTogRml4IHByZXZpb3VzIGNoYW5nZToKKwlpZiBubyBUWVBFX0RPTUFJTiwgZG9uJ3Qgc2V0IG1pbl9pbmRleC4KKworVGh1IE9jdCAyMSAxMToxMzoyMSAxOTkzICBSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGZpeGluY2x1ZGVzOiBBdm9pZCBjb25mbGljdGluZyB1c2VzIG9mIF9fd2NoYXJfdCBpbiBjYzFwbHVzIGFuZAorCXN0ZGxpYi5oIGZvciBBUk0vUklTQ2lYLgorCitUaHUgT2N0IDIxIDA4OjE2OjEzIDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IFJlbW92ZSBnKysgZGVwZW5kZW5jeS4KKwlOb3QgYnVpbHQgZm9yIGNyb3NzIGNvbXBpbGVycy4KKworVGh1IE9jdCAyMSAwMDowNDo0MCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChyZXF1aXJlZCk6IEFjY2VwdCBhIHNwYWNlIGluc3RlYWQgb2YgYSB0YWIKKwliZXR3ZWVuICNkZWZpbmUgYW5kIENUUkwgKG9yIF9DVFJMKS4KKworCSogY29uZmlnL202OGsvbTY4ay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AKKwl3aGVuIGNoZWNraW5nIGZvciBvdmVybGFwIGJldHdlZW4gc291cmNlIGFuZCBkZXN0LgorCUZpeCBzeW50YXggZm9yIHRoZSBsZWEgaW5zbiBmb3IgZG91YmxlIG92ZXJsYXAgY2FzZS4KKwkqIG02OGsubWQgKG1vdmRpLCBtb3ZkZiwgbW92eGYpOiBEZWxldGUgdGhlICYgZnJvbSBsb2FkIGNhc2UuCisKKwkqIGNvbmZpZy9tODhrL204OGsuaCAoQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVCk6IEVtaXQgLnNpemUKKwlvbmx5IGlmIERFQ0xBUkVfQVNNX05BTUUuCisKK1dlZCBPY3QgMjAgMjE6MzI6MTEgMTk5MyAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9hcmdfZGVzY3JpcHRvcik6IERvIG5vdCBzdG9wIHNlYXJjaGluZyBpZiBhIFVTRQorCWZvciB0aGUgc3RhdGljIGxpbmsgb3Igc3RydWN0IHZhbHVlIHJlZ2lzdGVyIGlzIGZvdW5kLgorCitXZWQgT2N0IDIwIDIyOjQzOjIyIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVCk6IERvbid0IGVtaXQgLnNpemUKKwlkaXJlY3RpdmUgaWYgdXNpbmcgdGhlIE9TRi9yb3NlIG9iamVjdCBmb3JtYXQuCisKKwkqIGkzODYvb3Nmcm9zZS5oLCBpMzg2L29zZmVsZi5oIChTV0lUQ0hfVEFLRVNfQVJHKTogQWxsb3cgdXNlIG9mCisJU3lzdGVtIFYuNCAtaCAqIGFuZCAteiAqIHN3aXRjaGVzLgorCShMSU5LX1NQRUMpOiBQYXNzIC1HLCAtaCosIC16KiBzd2l0Y2hlcyB0aHJvdWdoIHRvIHRoZSBFTEYgbGlua2VyLgorCU1hcCAtc3RhdGljLCAtc3ltYm9saWMsIGFuZCAtc2hhcmVkIGludG8gdGhlIGFwcHJvcHJpYXRlIC1CLCAtZCwKKwlhbmQgLUcgb3B0aW9ucyB3aGVuIGludm9raW5nIHRoZSBFTEYgbGlua2VyLgorCitXZWQgT2N0IDIwIDIwOjMyOjU0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKGZvbGRfcnR4KTogQWx0ZXIgcHJldmlvdXMgY2hhbmdlOiBkb24ndCBmb2xkIHRoZSBzaGlmdAorCWlmIHRoZSBjb3VudCBleGNlZWRzIHRoZSB3aWR0aCBvZiB0aGUgdmFsdWUgaW5zaWRlIHRoZSBzdWJyZWcuCisKKwkqIHZhcmFzbS5jIChjb3B5X2NvbnN0YW50KTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfY29uc3RhbnRfZGVmKTogVXNlIGl0LgorCisJKiBNYWtlZmlsZS5pbiAoJChzcmNkaXIpL0lOU1RBTEwpOiBBZGQgLS1uby1zcGxpdC4KKworV2VkIE9jdCAyMCAxOTozNTozNSAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BtaXQuZWR1KQorCisJKiBhbHBoYS5oIChMSUJfU1BFQyk6IExpbmsgLWxwcm9mMSB3aGVuIHByb2ZpbGluZy4KKworV2VkIE9jdCAyMCAxOToyMToxOCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGNjY3AuYyAoc3lzX2Vycmxpc3QpOiBDb25kaXRpb25hbGl6ZSBkZWNsYXJhdGlvbiBmb3IgQlNEIDQuNC4KKwkqIGNvbGxlY3QyLmMsIGcrKy5jLCBnY2MuYywgcHJvdG9pemUuYzogTGlrZXdpc2UuCisJKiBjb2xsZWN0Mi5jIChteV9zdHJlcnJvcik6IE1vdmUgYmxvY2sgbG9jYWwgZXh0ZXJuIGRlY2xhcmF0aW9ucworCWZvciBzeXNfZXJybGlzdCBhbmQgc3lzX25lcnIgdG8gZmlsZSBsZXZlbC4KKworV2VkIE9jdCAyMCAxODoyNzoyOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKG91dHB1dF9pbml0X2VsZW1lbnQpOiBXaGVuIGluaXRpYWxpemluZyBhIHVuaW9uLAorCWRvIGl0IHJpZ2h0IGF3YXk6IG5ldmVyIHB1dCB0aGUgZmllbGQgb24gdGhlIHBlbmRpbmcgbGlzdC4KKworCSogcGF0Y2gtaGVhZGVyLmMgKG1haW4pOiBEZWxldGUgb3V0cHV0IGZpbGUgYmVmb3JlIG9wZW5pbmcgaXQuCisJRGlzY2FyZCBkaXJlY3RvcnkgbmFtZXMgZnJvbSBwcm9nbmFtZS4KKwkqIHBhdGNoLWhlYWRlci5jOiAgU2ltcGxpZnkgYW5kIGZpeCBoYW5kbGluZyBvZiBlcnJuby5oLgorCShJdCBubyBsb25nZXIgdGhpbmtzIGVycm5vLmggYWx3YXlzIG5lZWRzIGZpeGluZy4pCisJKiBwYXRjaC1oZWFkZXIuYyAod3JpdGVfbGJyYWMsIHdyaXRlX3JicmFjKTogIE9ubHkgd3JpdGUKKwlleHRlcm4gIkMiIGlmIHRoYXQgc3BlY2lmaWNhbGx5IGlzIG5lZWRlZC4KKworV2VkIE9jdCAyMCAxODoxMjoyMSAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogcGEubWQgKGNhY2hlZmx1c2gpOiBTcGxpdCBpbnRvIGRjYWNoZWZsdXNoIGFuZCBpY2FjaGVmbHVzaC4KKwlSZXdyaXRlIHRvIHVzZSBzcGFjZSByZWdzIGNvcnJlY3RseS4KKwkqIHBhLmggKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBSZXdyaXRlLgorCShUUkFNUE9MSU5FX1NJWkUpOiBVcGRhdGUgd2l0aCBuZXcgc2l6ZS4KKwkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogUmV3cml0ZS4KKworV2VkIE9jdCAyMCAxNzo1ODozMiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3Rvcik6ICBBZGQgc3VwcG9ydCBmb3Igbm9uLXplcm8KKwlsb3dlciBhcnJheSBib3VuZC4KKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KKworV2VkIE9jdCAyMCAxNToxNjozNCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2RlY2xfY29tcGlsYXRpb24pOiBVc2UgQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVAorCXVuY29uZGl0aW9uYWxseSwgYnV0IGRlZmluZSBpdCBhcyBuby1vcCBieSBkZWZhdWx0LgorCisJKiBjb25maWcvY29udmV4L2NvbnZleC5oIChNQVhfTE9OR19UWVBFX1NJWkUpOiBEZWZpbmVkLgorCisJKiB2YXJhc20uYyAoc2l6ZV9kaXJlY3RpdmVfb3V0cHV0KTogTmV3IHZhcmlhYmxlLgorCSogdG9wbGV2LmMgKHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbik6IFVzZSBBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNULgorCSogY29uZmlnL3N2cjQuaCAoQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUpOiBTZXQgc2l6ZV9kaXJlY3RpdmVfb3V0cHV0LgorCShBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKTogRGVmaW5lZC4KKwkqIGNvbmZpZy9pMzg2L29zZnJvc2UuaCwgY29uZmlnL204OGsvbTg4ay5oOiBMaWtld2lzZS4KKworCSogcGF0Y2gtaGVhZGVyLmMgKGluZl9zaXplKTogIE1vdmUgZGVjbCBpbnNpZGUgbWFpbi4KKwkoc3RyZHVwKTogIFVzZSB4bWFsbG9jIHJhdGhlcm4gdGhhbiBtYWxsb2MuCisJRG9uJ3QgdXNlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc3RyY3B5LgorCShJTkZfVU5HRVQpOiAgVGFrZSBwYXJhbWV0ZXI7ICBkbyBub3RoaW5nIGlmIEVPRi4KKwkoc3RyY3B5KTogRGVjbGFyYXRpb24gZGVsZXRlZC4KKworV2VkIE9jdCAyMCAxMTozOTo1NiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHhtLW1pcHMuaCAoSEFWRV9WUFJJTlRGKTogRGVmaW5lIGZvciBCU0QgNC40LgorCisJKiBtaXBzLmMgKG1pcHNfb3V0cHV0X2ZpbGVuYW1lKTogV2hlbiBlbWl0dGluZyBzdGFicywgZG9uJ3QKKwlkaXNhYmxlIHRoZW0gaWYgdXNpbmcgZ2FzLgorCShtaXBzX291dHB1dF9saW5lbm8pOiBMaWtld2lzZS4KKworCSogc3BhcmMuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRW1pdCAzIGZsdXNoIGluc3RydXRpb25zLgorCSogc3BhcmMubWQgKGZsdXNoKTogQWRkIHBhdHRlcm4uCisKK1dlZCBPY3QgMjAgMTA6NDc6NTQgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGNvbmZpZ3VyZSAobWlwcy1kZWMtYnNkLCBtaXBzLWRlYy1vc2YpOiBGaXggYSB0eXBvIGluIHRoZSBsYXN0CisJY2hhbmdlLgorCitXZWQgT2N0IDIwIDA3OjU3OjA2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oLCBhaXgzMS5oIChSUzYwMDBfQ1JPUl9CSVRfTlVNQkVSKTogRGVsZXRlZC4KKwkoUlM2MDAwX0NBTExfR0xVRSk6IE5ldyBtYWNyby4KKwkqIHJzNjAwMC5jIChwcmludF9vcGVyYW5kLCBjYXNlICcuJyk6IFVzZSBSUzYwMDBfQ0FMTF9HTFVFCisJaW5zdGVhZCBvZiBSUzYwMDBfQ1JPUl9CSVRfTlVNQkVSLgorCShwcmludF9vcGVyYW5kLCBjYXNlICdFJywgY2FzZSAwKTogVXNlICJyZXR1cm4iLCBub3QgImJyZWFrIi4KKwkqIHJzNjAwMC5tZCAoY2FsbCk6IERvbid0IHVzZSBDUk9SIG9yIE5PUDsganVzdCB1c2UgIiUuIi4KKworCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBDb25zaWRlciAiY2hhciIsICJzaWduZWQgY2hhciIsCisJYW5kICJ1bnNpZ25lZCBjaGFyIiB0eXBlcyBhcyBlcXVpdmFsZW50LgorCisJKiBsb29wLmMgKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IFByb3Blcmx5IGNvbnRpbnVlIGxvb3AgYWZ0ZXIKKwltb3ZpbmcgYSBibG9jayBvZiBjb2RlIG5lYXIgYSBsb29wIGV4aXQuCisKK1dlZCBPY3QgMjAgMDI6MDE6NTAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoZXh0cmFjbGVhbik6IERlbGV0ZSBmaWxlIGRqZWZvby4KKwkoc3RtcC1maXhwcm90byk6IERlcGVuZCBvbiBzdG1wLWhlYWRlcnMsIG5vdCBMSUJHQ0MyX0RFUFMuCisKK1R1ZSBPY3QgMTkgMjM6MTE6MTYgMTk5MyAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzQGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiBjb25maWcvaTM4Ni9pc2MuaCAoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogRGVmaW5lIGFzIDY0IGJpdHMKKwlkdWUgdG8gRlAgZW11bGF0b3IgYnVncyBpbiB0aGUgdGFyZ2V0IGtlcm5lbC4KKwkqIGNvbmZpZy9pMzg2L3Njby5oOiBMaWtld2lzZSAoa2VybmVsIGJ1Z3MgYXJlIG9ubHkgc3VzcGVjdGVkKS4KKworVHVlIE9jdCAxOSAyMToyMTozNCBQRFQgMTk5MyAgUmFscGggQ2FtcGJlbGwgKHJhbHBoY0BweXJhbWlkLmNvbSkKKworCSogY29uZmlndXJlIChtaXBzLWRlYy1ic2QpOiBOZXcgYWx0ZXJuYXRpdmUuCisJKiBjb25maWcvbWlwcy9kZWMtYnNkLmg6IE5ldyBmaWxlLgorCitUdWUgT2N0IDE5IDE4OjQ5OjQwIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBGb3IgYXJyYXlzLCB1c2UgY29tcHR5cGVzIHRvIGNvbXBhcmUKKwl0eXBlcyBpbnN0ZWFkIG9mIGNvbXBhcmluZyBwb2ludGVycy4KKworVHVlIE9jdCAxOSAxMToyNDoxNiAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvcGUgd2hlbiBpbmhlcml0ZWQgcmVnaXN0ZXIgaXMgbGFyZ2VyIHRoYW4KKwlvbmUgd29yZC4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogRGl0dG8uCisKK1R1ZSBPY3QgMTkgMTg6MDk6MTggMTk5MyAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBBZGQgc3VwcG9ydCBmb3IgUklPUzIKKwlhc3ltbWV0cmljIGludGVnZXIgdW5pdHMuCisKK1R1ZSBPY3QgMTkgMTc6NDg6MzcgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogUHJvcGVybHkgc2V0IHBhcm1fcmVnX3N0YWNrX2xvYyBmb3IKKwlhcmdzIHRoYXQgYXJlIGEgQ09OQ0FULgorCisJKiBjbGlwcGVyLm1kIChtb3ZkaSk6IEZvcmNlIHVzZSBvZiAibyIgYWx0ZXJuYXRpdmUgaWYKKwlvcGVyYW5kIDEgaXMgYSBNRU0uCisKKwkqIGFscGhhLmggKEhBVkVfQVRFWElUKTogTmV3IG1hY3JvLgorCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQsIGZpbmRfcmVsb2Fkcyk6IElmIGFuIG9wZXJhbmQgaXMKKwlhIFNVQlJFRyBvZiBhIFBMVVMsIGZvcmNlIGEgcmVsb2FkIGFuZCByZWxvYWQgd2hhdCBpcyBpbnNpZGUuCisKKwkqIGRieG91dC5jIChwcmludF9pbnRfY3N0X29jdGFsKTogRml4IGJ1ZyBpbiBsYXN0IGNoYW5nZS4KKworVHVlIE9jdCAxOSAxNzo0MjoyMyAxOTkzICBSaWNoYXJkIEVhcm5zaGF3ICAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBhcm0uYzogSW5jbHVkZSByZWxvYWQuaAorCShhcm1fcmVsb2FkX291dF9oaSk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2NhbGwpOiBEb24ndCBsb29rIGluc2lkZSBvcGVyYW5kc1swXS4KKwkqIGFybS5oOiBBZGQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHNoaWZ0X2luc3RyLCAKKwlvdXRwdXRfbW92X2xvbmdfZG91YmxlX2ZwdV9mcm9tX2FybSwKKwlvdXRwdXRfbW92X2xvbmdfZG91YmxlX2FybV9mcm9tX2ZwdSwKKwlhbmQgb3V0cHV0X21vdl9sb25nX2RvdWJsZV9hcm1fZnJvbV9hcm0uCisJKEZMT0FUX1dPUkRTX0JJR19FTkRJQU4pOiBEZWZpbmUgdG8gMS4KKwkoU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiByZXR1cm4gR0VORVJBTF9SRUdTIGZvciBISW1vZGUKKwlvdXRwdXRzLgorCShBU01fT1VUUFVUX0xPTkdfRE9VQkxFLCBBU01fT1VUUFVUX0RPVUJMRSwgQVNNX09VVFBVVF9GTE9BVCk6CisJb3V0cHV0IGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyBhcyBoZXgsIG1ha2Ugb3JkZXIgY29ycmVjdCBnaXZlbgorCWRlZmluaXRpb24gb2YgRkxPQVRfV09SRFNfQklHX0VORElBTi4KKwkoUFJJTlRfT1BFUkFORCk6IERlbGV0ZSByZWR1bmRhbnQgY29kZSB3aGVuIGhhbmRsaW5nIENPTlNUX0RPVUJMRS4KKwkqIGFybS5tZDogKHJlbG9hZF9vdXRoaSk6IE5ldyBwYXR0ZXJuLgorCShtb3ZoaSk6IEhhbmRsZSByZWxvYWRzIGJldHRlci4KKwkocmVzdG9yZWhpKTogRGVsZXRlLiAgQWxzbyB0aWR5IHVwIGNvbW1lbnRlZCBvdXQgY29kZS4KKwkoY2FsbCk6IE1ha2UgdGhpcyBhIGRlZmluZV9leHBhbmQuCisJKG1hdGNoZXIgZm9yIGFib3ZlKTogb25seSBhY2NlcHQgTUVNKHJlZykKKwkoY2FsbF92YWx1ZSk6IEhhbmRsZSBhcyBmb3IgKGNhbGwpLgorCSogeG0tYXJtLmggKEhPU1RfRkxPQVRfV09SRFNfQklHX0VORElBTik6IERlZmluZSB0byAxLgorCitUdWUgT2N0IDE5IDEzOjI1OjAzIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAcnRsLmN5Z251cy5jb20pCisKKyAgICAgICAgKiBjcC10eXBlMi5jIChidWlsZF9tX2NvbXBvbmVudF9yZWYpOiBGaXggdHlwbywgdHlwZSBtdXN0IGJlIHNldCwKKwlhZnRlciBjaGFuZ2luZyBjb21wb25lbnQuICBGaXhlcyBwcm9ibGVtIGludHJvZHVjZWQgb24gVGh1IFNlcCA5CisJMjE6MjI6NDAgMTk5My4KKworVHVlIE9jdCAxOSAwMTowOTo1NiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAobTY4MDAwLWNvbnZlcmdlbnQtc3lzdiopOiBVbnRhbmdsZSBmcm9tIG02OGstKi1seW54b3MuCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWZpeHByb3RvKTogRGVwZW5kIG9uIExJQkdDQzJfREVQUy4KKwkoY3J0YmVnaW4ubywgY3J0ZW5kLm8pOiBTcGVjaWZ5IC1mbm8taW5saW5lLWZ1bmN0aW9ucy4KKworCSogY29uZmlnL21pcHMvaXJpczUuaDogTmV3IGZpbGUuCisJKiBjb25maWcvbWlwcy9taXBzLmMgKG1pcHNfYXNtX2ZpbGVfc3RhcnQpOiBIYW5kbGUgQUJJQ0FMTFNfQVNNX09QLgorCSogY29uZmlndXJlIChtaXBzLXNnaS1pcmlzNSopOiBOZXcgY29uZmlndXJhdGlvbi4KKworTW9uIE9jdCAxOCAxNjoxNjoyNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNzZS5jIChub3RlX21lbV93cml0dGVuKTogKG1lbSAoc2NyYXRjaCkpIG1lYW5zIGNsb2JiZXIgZXZlcnl0aGluZy4KKworCSogZ2VuLXByb3Rvcy5jOiBJbmNsdWRlIGN0eXBlLmguCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X3NwbGl0X2JpdF9maWVsZCk6IENoYW5nZSBzaGlmdCBjb3VudCBjYWxjdWxhdGlvbgorCWluIGxpdHRsZS1lbmRpYW4gY2FzZS4KKworCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4cHJvdG8pOiAgQWRkZWQgZGVwZW5kZW5jeSBvbiBmaXhwcm90byBzY3JpcHQuCisKK01vbiBPY3QgMTggMTE6MjY6MDggMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfZWxlbWVudCk6IEFsaWduIHN0cnVjdHVyZSBlbGVtZW50cworCXRoYXQgYXJlIHN1YmFnZ3JlZ2F0ZXMuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IEFmdGVyIHByZXNlcnZlX2luaXRpYWxpemVyIGNhbGwsIHNldAorCVRSRUVfUEVSTUFORU5UIGJpdCBpbiBpbml0aWFsaXplci4KKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogRG9uJ3QgY29tYmluZSBpbnN0cnVjdGlvbnMgYWNyb3NzIGEKKwl2b2xhdGlsZSBpbnNuLgorCSogcnRsYW5hbC5jICh2b2xhdGlsZV9pbnNuX3ApOiBOZXcgZnVuY3Rpb24uCisKK1N1biBPY3QgMTcgMDM6MDQ6NDkgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGFkZGVyLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZSAocG93ZXJwYy1pYm0tYWl4Kik6IFNldCBjcHVfdHlwZS4KKwkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSBwb3dlcnBjLgorCitTdW4gT2N0IDE3IDIxOjM3OjU3IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBSZXJlY29nbml6ZSBzb21lIGxvYWRzIGFuZAorCXN0b3Jlcy4KKwkqIHBhLm1kIChpbmRleGluZyBsb2FkcyBhbmQgc3RvcmVzKTogUHJvdmlkZSB2YXJpYW50cyB3aGljaCBhdm9pZAorCXJlbG9hZCBwcm9ibGVtcyB3aXRoIHNoaWZ0LWFkZCBvcGVyYXRpb25zLgorCisJKiBwYS5oIChSRUFET05MWV9EQVRBX1NFQ1RJT04pOiBEaXNhYmxlLgorCitUaHUgT2N0IDE0IDEyOjM4OjI3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY3NlLmMgKGZvbGRfcnR4KTogU3BlY2lhbCBjYXNlIGhhbmRsaW5nIGZvciBmb2xkaW5nCisJYSBzdWJyZWcgb2YgdGhlIHJlc3VsdCBvZiBhIGxlZnQgc2hpZnQuCisKK1RodSBPY3QgMTQgMDA6MDU6NDIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuaCAoREJYX0NPTlRJTl9MRU5HVEgpOiBTZXQgdG8gNDAwMC4KKworCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogRG9uJ3QgYmxvdyB1cCBpZiBhcmVuJ3QgYW55IGluc25zCisJaW4gdGhpcyBzZXF1ZW5jZSB5ZXQuCisKKwkqIGFscGhhLmggKExJTktfU1BFQyk6IE5vdyBPSyB0byBwYXNzIC1PMyB0byBsaW5rZXIuCisJKEFTTV9PVVRQVVRfTE9PUF9BTElHTiwgQVNNX09VVFBVVF9BTElHTl9DT0RFKTogV29yayBhcm91bmQKKwlidWcgaW4gREVDIGFzc2VtYmxlci4KKworV2VkIE9jdCAxMyAyMTo0Nzo1OCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBSZW1vdmUgZXJyb25lb3VzIHBhcmVucyBmcm9tIEFscGhhIE9TRi8xIDxzeW0uaD4uCisKK1dlZCBPY3QgMTMgMTY6MDg6NTQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvbTY4ay9zdW4zLmggKENQUF9QUkVERUZJTkVTKTogRG9uJ3QgZGVmaW5lIF9DUk9TU19UQVJHRVRfQVJDSC4KKworCSogZm9sZC1jb25zdC5jIChpbnZlcnRfdHJ1dGh2YWx1ZSk6IEhhbmRsZSBTQVZFX0VYUFIuCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbGxlY3QyKTogRGVwZW5kIG9uIGluc3RhbGwtZGlyLgorCShpbnN0YWxsLWluZm8sIGluc3RhbGwtZmxvYXQtaC1jcm9zcyk6IExpa2V3aXNlLgorCitXZWQgT2N0IDEzIDE1OjUxOjAyIDE5OTMgIFN0ZXBoZW4gTC4gTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSlcCisKKwkqIHJlYWwuaCAoRkxPQVRfV09SRFNfQklHX0VORElBTik6IE5ldyBtYWNyby4KKwkoSE9TVF9GTE9BVF9XT1JEU19CSUdfRU5ESUFOKTogTGlrZXdpc2UsIGZvciBob3N0LgorCShSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUgKGRlZmF1bHQgdmVyc2lvbikpOiBVc2UgdGhlbS4KKwkoZWZpeGksIGVmaXh1aSk6IFJldHVybiBIT1NUX1dJREVfSU5ULgorCShSRUFMX1ZBTFVFX0ZST01fSU5UKTogQ2FzdCBpbnB1dHMgdG8gSE9TVF9XSURFX0lOVC4KKwkqIHJlYWwuYyAoRkxPQVRfV09SRFNfQklHX0VORElBTiwgSE9TVF9GTE9BVF9XT1JEU19CSUdfRU5ESUFOKToKKwlVc2UgZXZlcnl3aGVyZSBpbiBwbGFjZSBvZiBXT1JEU19CSUdfRU5ESUFOLCBIT1NUX1dPUkRTX0JJR19FTkRJQU4sCisJZXhjZXB0IGluIHJlZmVyZW5jZSB0byBlbmRpYW4tbmVzcyBvZiBpbnRlZ2Vycy4KKwkoZXRydW5jaSwgZXRydW5jdWksIGVmaXhpLCBlZml4dWksIGVyZWFsX2Zyb21faW50LCBlcmVhbF90b19pbnQsCisJbHRvZSwgdWx0b2UsIGVpZnJhYywgZXVpZnJhYyk6IENoYW5nZSBgbG9uZycgdG8gYEhPU1RfV0lERV9JTlQnLgorCitXZWQgT2N0IDEzIDE1OjQ3OjM3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1wYXJzZS5pbiAoaW5pdGRjbCwgbm90eXBlX2luaXRkY2wpOiBDYWxsIGRlY2xfYXR0cmlidXRlcworCWJlZm9yZSBpbml0IGFzIHdlbGwgYXMgYWZ0ZXIuCisKKwkqIGNvbmZpZy9uczMyay9wYzUzMi5oIChGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKToKKwlSZXF1aXJlIGEgZnJhbWUgcG9pbnRlciBpZiBmbiBjYWxscyBzZXRqbXAuCisKK1dlZCBPY3QgMTMgMTU6Mjc6MDEgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIG1vdmluZyBhIHJhbmdlIG9mIGluc3RydWN0aW9ucywKKwlpbmNsdWRlIGFsbCBOT1RFcyBiZWZvcmUgdGhlIHJhbmdlLCBub3QganVzdCBsaW5lIG51bWJlciBub3Rlcy4KKworV2VkIE9jdCAxMyAxMTowMTo1MSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBwYXRjaC1oZWFkZXIuYzogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gYmVmb3JlIDxzeXMvc3RhdC5oPi4KKworV2VkIE9jdCAxMyAxMTo1NzozMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQgKHNlcSk6IEZpeCB0eXBvOiBoYWQgInh1YmZpYyIgaW5zdGVhZCBvZiAic3ViZmljIi4KKworCSogdmEtbTg4ay5oIChfVkFfTElTVF8pOiBEZWZpbmUuCisKKwkqIGFscGhhLmMgKGlnbm9yZV9saW5lX251bWJlcik6IE5vIGxvbmdlciB1c2VkLgorCisJKiBtaXBzLXRkdW1wLmMgKHByaW50X2dsb2JhbF9oZHIpOiBGaXggdHlwbyBpbiBjYXN0IGluIGN0aW1lIGNhbGwuCisKKwkqIGNjY3AuYyAobWFpbik6IERvbid0IGNhdGNoIFNJR1BJUEUgaWYgbm8gc3VjaCBzaWduYWwuCisKKwkqIHgtYWxwaGE6IEZpbGUgZGVsZXRlZCwgYWxsIHNoaXBwZWQgT1NGIHN5c3RlbXMgaGF2ZSBgcmFubGliJy4KKworCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9iaXRfZmllbGRfY29tcGFyZSwgZGVjb2RlX2ZpZWxkX3JlZmVyZW5jZSk6CisJRG9uJ3QgZG8gYW55dGhpbmcgaWYgZ2V0X2lubmVyX3JlZmVyZW5jZSByZXR1cm5lZCBpdHMgYXJndW1lbnQuCisKKwkqIGJpLXJldmVyc2UuYzogQXZvaWQgZGVmaW5pbmcgTlVMTDsgY2FuIGNhdXNlIGR1cGxpY2F0ZSBkZWZpbml0aW9uCisJZXJyb3JzLgorCitXZWQgT2N0IDEzIDA3OjU4OjI4IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogRGVmaW5lIGxpa2UgaW4gVi40LgorCShGVU5DVElPTl9QUk9GSUxFUiwgRlVOQ1RJT05fUFJPTE9HVUUpOiBEb24ndCBsb2FkIHVwICVlYXggd2l0aAorCXRoZSBwb2ludGVyIHZhbHVlIGJlZm9yZSBjYWxsaW5nIGluZGlyZWN0LCBqdXN0IGNhbGwgaW5kaXJlY3QgdGhlCisJbWVtb3J5IGFkZHJlc3MgdG8gc2F2ZSBzb21lIGN5Y2xlcyBpbiBwcm9maWxpbmcuCisKK1R1ZSBPY3QgMTIgMTI6NDE6MTIgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjc2UuYyAocmVjb3JkX2p1bXBfY29uZCk6IEF0IGVuZCwgbWFrZSBtaXNzaW5nIGVxdWl2YWxlbmNlcworCWZpcnN0LCBhbmQgdGhlbiBtZXJnZSB0aGVtLgorCitUdWUgT2N0IDEyIDIxOjMwOjI5IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogdmEtaDgzMDAuaCAoX192YV9yb3VuZGVkX3NpemUpOiBGaXggdHlwbyBpbiAjaWZkZWYuCisKK1R1ZSBPY3QgMTIgMjA6MTk6MjIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBiYy1lbWl0LmM6IEluY2x1ZGUgc3RkaW8uaCBsYXN0LgorCSogY29tYmluZS5jOiBJbmNsdWRlIHN0ZGlvLmggYWZ0ZXIgZ3ZhcmFyZ3MuaC4KKworVHVlIE9jdCAxMiAxMzoyODoxOCAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogZml4cHJvdG86ICBSZS13cml0ZS4gIFdlIG5vdyBhc3N1bWUgdGhhdCB0aGVyZSBhcmUgdHdvCisJc291cmNlIGRpcmVjdG9yaWVzIChzb3VyY2VfZGlyX2FsbCBhbmQgc291cmNlX2Rpcl9zdGQpLiAgVGhlc2UKKwlhcmUgaGFuZGxlZCBkaWZmZXJlbnRseS4gIEFsbCBmaWxlcyBpbiBzb3VyY2VfZGlyX2FsbCAobm9ybWFsbHkKKwkuL2luY2x1ZGUpIGFyZSBwcm9jZXNzZWQsIGJ1dCBpbiBzb3VyY2VfZGlyX3N0ZCAobm9ybWFsbHkKKwkvdXNyL2luY2x1ZGUpIHdlIG9ubHkgcHJvY2VzcyB0aGUgc3RhbmRhcmQgQU5TSS9Qb3NpeCBvbmVzIHdoZXJlCisJd2UgbWlnaHQgYmUgYWJsZSB0byBhZGQgbWlzc2luZyBwcm90b3R5cGVzLgorCSogc2Nhbi1kZWNscy5jIChzY2FuX2RlY2xzKTogIFJld3JvdGUgZnJvbSBiZWluZyBhIHByb2dyYW0gd2hvc2UKKwlvdXRwdXQgaXMgcGlwZWQgdG8gcGF0Y2gtaGVhZGVyLCB0byBhIHN1YnJvdXRpbmUgY2FsbGVkIGJ5CisJcGF0Y2gtaGVhZGVyLiAgVGhpcyBzaG91bGQgYmUgc29tZXdoYXQgbW9yZSBlZmZpY2llbnQuCisJKiBNYWtlZmlsZS5pbiAoc2Nhbi1kZWNscyk6ICBSZW1vdmVkIHJ1bGUgdG8gbWFrZSBwcm9ncmFtLgorCSogcGF0Y2gtaGVhZGVyLmMgKHJlY29nbml6ZWRfbWFjcm8sIHJlY29nbml6ZWRfZXh0ZXJuLAorCXJlY29nbml6ZWRfZnVuY3Rpb24pOiAgTmV3IGZ1bmN0aW5zLCB3aXRoIGxvZ2ljIG1vdmVkIG91dCBmcm9tCisJcmVhZF9zY2FuX2ZpbGUsIHNvIHRoZXkgY2FuIGJlIGNhbGxlZCBieSBzY2FuX2RlY2xzLgorCSogcGF0Y2gtaGVhZGVyIChtYWluKTogIFJlYWQgdGhlIG9yaWdpbmFsIGhlYWRlciBmaWxlIGludG8gYQorCWJ1ZmZlciAocmF0aGVyIHRoYW4gcmVhZGluZyBpdCB3aXRoIHN0ZGlvKS4gIFRoaXMgc2hvdWxkIGJlIG1vcmUKKwllZmZpY2llbnQsIHBhcnRseSBiZWNhdXNlIHdlIGNhbiByZS13cml0ZSBpdCBpbiBwbGFjZS4KKwkoaW5mX3NraXBfc3BhY2VzLCBpbmZfcmVhZF91cHRvLCBpbmZfc2Nhbl9pZGVudCk6ICBOZXcgZnVuY3Rpb25zLAorCWJhc2VkIG9uIHNraXBfc3BhY2VzLCByZWFkX3VwdG8sIGFuZCBzY2FuX2lkZW50IGluIHNjYW4uYywgYnV0CisJdGhlc2UgcmVhZCBmcm9tIHRoZSBpbi1tZW1vcnkgYnVmZmVyIG1lbnRpb25lZCBhYm92ZS4KKwkqIHNjYW4tdHlwZXMuc2g6ICBEb24ndCBjaGVjayBmb3Igc2lnc2V0X3QsIHNpbmNlIGl0IGNhbiBiZSBhCisJc3RydWN0LCB3aG9zZSBuYW1lIGNhbm5vdCBiZSBzaW1wbGlmeSByZXBsYWNlZCBieSBpdHMgZGVmaW5pdGlvbi4KKwkqIE1ha2VmaWxlLmluIChkZWR1Y2VkLmgpOiAgRG9uJ3QgcGFzcyAtbm9zdGRpbmMuCisKK1R1ZSBPY3QgMTIgMTg6MzY6MzIgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQorCisJQ2hhbmdlcyB0byBzdXBwb3J0IG5hdGl2ZSBlY29mZiBhbmQgZW1iZWRkZWQgc3RhYnMgZGVidWdnaW5nCisJZm9yIHRoZSBBbHBoYS4KKworCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IFB1dCBvdXQgZmlsZSBhbmQgbGluZSBudW1iZXIgaWYgc2RiCisJZGVidWdnaW5nIGZvcm1hdCwgcHV0IG91dCAuZW50IGRpcmVjdGl2ZSwgc2lnbmFsIHN0YXJ0IG9mIGZ1bmN0aW9uIGZvcgorCWFscGhhX291dHB1dF9maWxlbmFtZSBhbmQgc2V0IHVwIGRlYnVnZ2luZyBhdXRvL2FyZyBvZmZzZXRzLgorCShvdXRwdXRfZXBpbG9nKTogU2lnbmFsIGVuZCBvZiBmdW5jdGlvbiBmb3IgYWxwaGFfb3V0cHV0X2ZpbGVuYW1lLgorCShhbHBoYV9vdXRwdXRfZmlsZW5hbWUsIGFscGhhX291dHB1dF9saW5lbm8pOiBOZXcgZnVuY3Rpb25zLgorCSogYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGdhcyBvcHRpb24uCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBNb3ZlZCBvdXRwdXQgb2YgLmVudCBkaXJlY3RpdmUgdG8KKwlvdXRwdXRfcHJvbG9nLgorCShEQlhfTk9fWFJFRlMpOiBSZW1vdmVkLCBnZGIgdW5kZXJzdGFuZHMgY3Jvc3MgcmVmZXJlbmNlcyBhbmQgdGhlCisJbmF0aXZlIGRlYnVnZ2VyIGNhbid0IGhhbmRsZSBlbWJlZGRlZCBzdGFicy4KKwkoQVNNX0ZJTEVfU1RBUlQpOiBSZXBsYWNlIG91dHB1dCBvZiAuZmlsZSBkaXJlY3RpdmUKKwlieSBBU01fT1VUUFVUX1NPVVJDRV9GSUxFTkFNRSBjYWxsLgorCShUQVJHRVRfR0FTLCBNQVNLX0dBUywgU0RCX0RFQlVHR0lOR19JTkZPLCBEQlhfREVCVUdHSU5HX0lORk8sCisJTUlQU19ERUJVR0dJTkdfSU5GTywgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFLCBERUJVR0dFUl9BVVRPX09GRlNFVCwKKwlERUJVR0dFUl9BUkdfT0ZGU0VULCBBU01fT1VUUFVUX1NPVVJDRV9MSU5FLAorCUFTTV9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FLCBERUZBVUxUX0dEQl9FWFRFTlNJT05TLCBBU01fU1RBQlNfT1AsCisJQVNNX1NUQUJOX09QLCBBU01fU1RBQkRfT1AsIFNEQl9BTExPV19GT1JXQVJEX1JFRkVSRU5DRVMsCisJU0RCX0FMTE9XX1VOS05PV05fUkVGRVJFTkNFUywgUFVUX1NEQl9ERUYsIFBVVF9TREJfUExBSU5fREVGLAorCVBVVF9TREJfVFlQRSwgUFVUX1NEQl9CTE9DS19TVEFSVCwgUFVUX1NEQl9CTE9DS19FTkQsCisJUFVUX1NEQl9GVU5DVElPTl9TVEFSVCwgUFVUX1NEQl9GVU5DVElPTl9FTkQsIFBVVF9TREJfRVBJTE9HVUVfRU5ELAorCUFTTV9GSU5BTF9TUEVDLCBDT0RFX01BU0ssIE1JUFNfSVNfU1RBQiwgTUlQU19NQVJLX1NUQUIsCisJTUlQU19VTk1BUktfU1RBQiwgU0hBU0hfU0laRSwgVEhBU0hfU0laRSk6IE5ldyBtYWNyb3MuCisJKiBhbHBoYS1nZGIuaDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKGFscGhhLSotb3NmKik6IEhhbmRsZSAtLXdpdGgtc3RhYnMgYW5kIC0td2l0aC1nbnUtYXMuCisJKiBtaXBzLXRmaWxlLmMgKGFkZF9sb2NhbF9zeW1ib2wpOiBJbmRleCBpbiB0aGUgZXh0ZXJuYWwgc3ltYm9sCisJbXVzdCBwb2ludCB0byBsb2NhbCBzeW1ib2wgdGFibGUgZW50cnkgZm9yIHByb2NlZHVyZXMuCisKK01vbiBPY3QgMTEgMTY6MTQ6NTMgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogSWYgYSBmaWxlIGlzIHJlZmVyZW5jZWQgd2l0aCBkb3VibGUgcXVvdGVzIGZyb20KKwlhIGZpeGVkIGZpbGUsIG1ha2Ugc3VyZSBpdCBpcyBjb3BpZWQgaW50byB0aGUgZml4ZWQgaW5jbHVkZQorCWRpcmVjdG9yeS4KKwlSZW1vdmUgRFBTL1hEUFNsaWIuaCBzcGVjaWFsLWNhc2UgY29kZS4KKworVHVlIE9jdCAxMiAwODowNToyOCAxOTkzICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwL3Bvd2VycGMuaDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUgKHBvd2VycGMtaWJtLWFpeCopOiBOZXcgdGFyZ2V0LgorCSogcnM2MDAwLmggKE1BU0sgYW5kIFRBUkdFVCk6IEFkZCBuZXcgZmxhZ3MgZm9yIFBPV0VSMiBhbmQgUG93ZXJQQworCXdpdGggc3F1YXJlIHJvb3QuCisJKEFTU0VNQkxFUl9ESUFMRUNUKTogTmV3IG1hY3JvLgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IFNldCBNUSByZWdpc3RlciBmaXhlZCBpZiBub3QgUE9XRVIuCisJKFNISUZUX0NPVU5UX1RSVU5DQVRFRCk6IENvbmRpdGlvbmFsIG9uIFBPV0VSLgorCShBU01fT1VUUFVUX1JFR197UFVTSCxQT1B9KTogTW5lbW9uaWNzIGRlcGVuZGVuY2llcy4KKwkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBuZXcgVEFSR0VUIGZsYWdzIGFuZAorCWFkZCBzb21lIG1vcmUgY3B1IGNob2ljZXMuCisJKG91dHB1dF9wcm9sb2csIG91dHB1dF9lcGlsb2cpOiBTdXBwb3J0IG5ldyBtbmVtb25pY3MgYW5kIGF2b2lkCisJdXNpbmcgbG0vc3RtIHdoZW4gbm90IFBPV0VSLgorCSogcnM2MDAwLm1kOiBVcGRhdGUgZGVmaW5lX2Z1bmN0aW9uX3VuaXRzLgorCVB1dCBib3RoIG9sZCBhbmQgbmV3IG1uZW1vbmljcyBpbiBhbGwgdGVtcGxhdGVzLgorCUFkZCB0YXJnZXQgdGVzdHMgdG8gcGF0dGVybiBjb25kaXRpb25hbCBmaWVsZCB0aHJvdWdob3V0LgorCShvbmVfY21wbHNpMik6IE1ha2UgUE9XRVIgYW5kIFBvd2VyUEMgdmFyaWFudHMuCisJKG11bHNpMyk6IENvbnZlcnQgdG8gZGVmaW5lX2V4cGFuZCB3aGljaCBjYWxscyBhcHByb3ByaWF0ZSBQT1dFUgorCW9yIFBvd2VyUEMgcGF0dGVybi4KKwkoZGl2c2kzLCB1ZGl2c2kzKTogQWRkIHBhdHRlcm5zIGZvciBQb3dlclBDIGNhc2UuICBVcGRhdGUgZGl2c2kzCisJZGVmaW5lX2V4cGFuZCBmb3IgUG93ZXJQQyBjYXNlLgorCShhc2hsc2kzLCBsc2hyc2kzLCBhc2hyc2kzLCBleHRlbmRxaXNpMiwgZXh0ZW5kcWloaTIpOiBDb252ZXJ0IHRvCisJZGVmaW5lX2V4cGFuZCB3aGljaCBjYWxscyBhcHByb3ByaWF0ZSBQT1dFUiBvciBQb3dlclBDIHBhdHRlcm4uCisJKGZsb2F0aW5nLXBvaW50KTogQWRkIFBvd2VyUEMgc2luZ2xlLXByZWNpc2lvbiBGUCwgYW5kIFNGL0RGIHNxcnQKKwlpbnNucyBmb3IgNjAzLCA2MDQsIDYyMC4KKwkoY2FsbCBpbnNucyk6IFVzZSAibm9wIiBmb3IgbWFnaWMgVE9DIHJlc3RvcmUuCisJKG1vdmUgZGF0YSwgbm9wKTogVXNlIFBvd2VyUEMgZXh0ZW5kZWQgbW5lbW9uaWNzLgorCitUdWUgT2N0IDEyIDA3OjU4OjM2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBJZiBub3QgVEFSR0VUX0ZQUkVHUywKKwlzYXZlIGFub3RoZXIgY29weSBvZiB0aGUgaW50ZWdlciByZWdzIHdoZXJlIHRoZSBGUCByZWdzIHdvdWxkCisJaGF2ZSBnb25lLgorCisJKiB0cmVlLmggKHN0cnVjdCB0cmVlX3R5cGUpOiBzeW10YWJfYWRkcmVzcyBpcyBub3cgYSB1bmlvbiBvZgorCXBvaW50ZXIgYW5kIGludGVnZXIuCisJKFRZUEVfU1lNVEFCX0FERFJFU1MpOiBSZWZlciB0byB0aGUgaW50ZWdlci4KKwkoVFlQRV9TWU1UQUJfUE9JTlRFUik6IE5ldyBtYWNybyB0byByZWZlciB0byBwb2ludGVyLgorCSogc2Rib3V0LmMgKEtOT1dOX1RZUEVfVEFHLCBTRVRfS05PV05fVFlQRV9UQUcpOiBSZWZlciB0bworCVRZUEVfU1lNVEFCX1BPSU5URVIgYW5kIHJlbW92ZSBjYXN0cy4KKwkodGFnX29mX3J1X3R5cGUpOiBMaWtld2lzZS4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBGaXggdHlwbyBpbiBSRUxPQURfRk9SX0lOU04gY2FzZSB3aGVuCisJYWNjb3VudGluZyBmb3IgcmVsb2Fkcy4KKworCSogZXhwci5jIChjb252ZXJ0X21vZGVzKTogUmVzZXQgT0xETU9ERSBmcm9tIFggYWZ0ZXIgd2Ugc3RyaXAKKwlhIFNVQlJFRyBkdWUgdG8gYSBwcm9tb3RlZCB2YXJpYWJsZS4KKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlLCBjYXNlIElOVEVHRVJfVFlQRSk6IE91dHB1dCBib3VuZHMgaW4KKwlvY3RhbCBpZiB0eXBlIHdpZGVyIHRoYW4gSE9TVF9XSURFX0lOVC4KKwkocHJpbnRfaW50X2NzdF9vY3RhbCk6IFRyaW0gYm91bmQgYnkgcHJlY2lzaW9uIG9mIGl0cyB0eXBlLgorCUF2b2lkIHdhcm5pbmcgb24gd2hhdCBtYXkgYmUgc2hpZnQgaW50byBzaWduIGJpdC4KKworCSogYmktcmV2ZXJzZS5jOiBBZGQgbWlzc2luZyAjaW5jbHVkZSBmb3IgaGNvbmZpZy5oLgorCisJKiBmaXhpbmNsdWRlczogUXVvdGUgYnJhY2VzIHdoZW4gbG9va2luZyBmb3IgRE9ORSBmaWxlcy4KKworCSogZmluYWwuYyAoZGlhbGVjdF9udW1iZXIpOiBOZXcgdmFyaWFibGUuCisJKGluaXRfZmluYWwpOiBJbml0aWFsaXplIGl0LgorCShvdXRwdXRfYXNtX2luc24sIGFzbV9mcHJpbnRmKTogU3VwcG9ydCBBU1NFTUJMRVJfRElBTEVDVC4KKworVHVlIE9jdCAxMiAwMTozNDoxNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogSWYgdHJhZGl0aW9uYWwsIGFsbG93IHVuYnJhY2VkIHNjYWxhcgorCXRvIGluaXRpYWxpemUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYWdncmVnYXRlLgorCisJKiBjY2NwLmMgKG91dHB1dF9saW5lX2NvbW1hbmQpOiBPdXRwdXQgdGhlIGA0JyBmbGFnIG9ubHkgaWYgY3BsdXNwbHVzLgorCShkb19saW5lKTogSGFuZGxlIHRoZSBgNCcgZmxhZy4KKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQ2FsbCB3YWxrX2FsdGVyX3N1YnJlZyBmb3Igb3BlcmFuZHMKKwl0aGF0IGFyZSBQTFVTIG9yIE1VTFQsIGJlZm9yZSBjb25zdHJhaW5fb3BlcmFuZHMuCisKK01vbiBPY3QgMTEgMTU6MTg6NDUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWFsLmMgKGRlYnVnX3JlYWwpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IFhFWFAgKHgsIDApIGluIEVYUFJfTElTVCBtYXkgYmUgMC4KKworCSogY29uZmlnL202OGsvbTY4ay5tZCAoY21waGkpOiBUdXJuIG9uIGNvbnN0cmFpbnRzIHRvIHN1cHBvcnQgY21wbS53LgorCitNb24gT2N0IDExIDEzOjIwOjU0IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogU2V0IG1hcC0+Y29uc3RfZXF1aXZfbWFwX3NpemUgdG8KKwluZXdfbWF4cmVnbnVtLgorCShjb3B5X2xvb3BfYm9keSk6IFdoZW4gc2V0IGNvbnN0X2FnZV9tYXAgZW50cnkgZm9yIHNwbGl0IGRlc3QgcmVnLAorCXZlcmlmeSB0aGF0IGl0IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBtYXAuCisJKGZpbmRfc3BsaXR0YWJsZV9yZWdzKTogQ291bnQgbnVtYmVyIG9mIGJpdiBzZXRzLCBub3QgbnVtYmVyIG9mCisJYml2cy4gIERvbid0IHBhc3MgcmVzdWx0IHRvIGZpbmRfc3BsaXR0YWJsZV9naXZzLgorCShmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IERlbGV0ZSBwYXJhbWV0ZXIgcmVzdWx0LiAgQWRkIGxvY2FsCisJdmFyaWFibGUgcmVzdWx0LgorCitNb24gT2N0IDExIDA3OjQzOjMxIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBXaGVuIGFzc2lnbmluZyBhbiBJTkRJUkVDVF9SRUYgdG8KKwlhIFJFU1VMVF9ERUNMLCB0aGUgc2l6ZSBhbmQgc291cmNlIHJ0eCB3ZXJlIHN3YXBwZWQuCisKKwkqIGZ1bmN0aW9uLmMgKHRyYW1wb2xpbmVfYWRkcmVzcyk6IERvbid0IGFsbG9jYXRlIGFueXRoaW5nCisJZnJvbSBwYXJlbnQgZnVuY3Rpb24ncyBjdXJyZW50IG9ic3RhY2suCisKKwkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuKTogRG9uJ3QgY2FsbCByZWdfc2Nhbl9tYXJrX3JlZnMgb24gbm90ZXMKKwlpZiB0aGVyZSBhcmVuJ3QgYW55LgorCShyZWdfc2Nhbl9tYXJrX3JlZnMsIGNhc2UgSU5TTl9MSVNULCBFWFBSX0xJU1QpOiBOZXcgY2FzZXMuCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogVGVzdCB2YWx1ZSBvZgorCVNISUZUX0NPVU5UX1RSVU5DQVRFRCBpZiBpdCBpcyBkZWZpbmVkLgorCSogY29tYmluZS5jIChzdWJzdCwgc2hpZnQgYW5kIHJvdGF0ZSBjYXNlcyk6IExpa2V3aXNlLgorCSogYTI5ay5oLCBhbHBoYS5oLCBmeDgwLmgsIGk5NjAuaCwgbWlwcy5oLCBwYS5oLCBweXIuaCwgcnM2MDAwLmg6CisJRGVmaW5lIFNISUZUX0NPVU5UX1RSVU5DQVRFRCB0byBoYXZlIGEgdmFsdWUgb2YgMS4KKwkqIHNwYXJjLmgsIHRhaG9lLmgsIHdlMzJrLmg6IExpa2V3aXNlLgorCitNb24gT2N0IDExIDAyOjQwOjIyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVnY2xhc3MuYyAocmVnbm9fbGFzdF9ub3RlX3VpZCk6IE5ldyB2ZWN0b3IuCisJKHJlZ19zY2FuKTogSW5pdGlhbGl6ZSByZWdub19sYXN0X25vdGVfdWlkLgorCUNhbGwgcmVnX3NjYW5fbWFya19yZWZzIGZvciB0aGUgbm90ZXMuICBQYXNzIGl0cyBuZXcgYXJnLgorCShyZWdfc2Nhbl9tYXJrX3JlZnMpOiBOZXcgYXJnIE5PVEVfRkxBRy4gIFBhc3MgaXQgcmVjdXJzaXZlbHkuCisJU2V0IHJlZ25vX2xhc3Rfbm90ZV91aWQuCisJKiByZWdzLmggKHJlZ25vX2xhc3Rfbm90ZV91aWQpOiBEZWNsYXJlZC4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFVzZSByZWdub19sYXN0X25vdGVfdWlkIHdoZW4gZGVjaWRpbmcKKwl3aGV0aGVyIGEgcmVnaXN0ZXIgaXMgc2V0IGFuZCBuZXZlciB1c2VkLgorCitTdW4gT2N0IDEwIDIyOjUxOjAxIDE5OTMgIFN0ZXBoZW4gTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChhc2N0b2VnKTogRml4IGJhY2t3YXJkIGNvbmRpdGlvbiBpbiBsYXN0IGNoYW5nZS4KKworU3VuIE9jdCAxMCAyMjozMzoxNyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogY29uZmlndXJlIChocHBhMS4wLSotbWFjaCopOiBVc2UgY29sbGVjdDIuCisJKGhwcGExLjEtKi1tYWNoKik6IExpa2V3aXNlLgorCisJKiBwYS5jIChsZWdpdGltaXplX3BpY19hZGRyZXNzKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZXMuCisJKG91dHB1dF9ibG9ja19tb3ZlLCBvdXRwdXRfaW9yKTogTGlrZXdpc2UuCisJKGhwcGFfYnVpbHRpbl9zYXZlcmVncyk6IExpa2V3aXNlLgorCShlbWl0X21vdmVfc2VxdWVuY2UpOiBBZGQgcGFyZW5zIGFzIHN1Z2dlc3RlZCBieSAtV2FsbC4KKwkoY29tcHV0ZV9mcmFtZV9zaXplKTogTGlrZXdpc2UuCisJKG91dHB1dF9hc2NpaSk6IFJldHVybiB0eXBlIGlzICJ2b2lkIi4KKwkoaHBwYV9leHBhbmRfcHJvbG9ndWUsIGltcG9ydF9taWxsaSk6IExpa2V3aXNlLgorCisJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiAgUGFzcyB0aGUgaGlnaGVzdCByZWdpc3RlcgorCW51bWJlciBzYXZlZCBmb3IgRU5UUllfR1IgYW5kIEVOVFJZX0ZSIGRpcmVjdGl2ZXMgcmF0aGVyCisJdGhhbiB0aGUgbnVtYmVyCW9mIHJlZ2lzdGVycyBzYXZlZC4KKwkoaHBwYV9leHBhbmRfcHJvbG9ndWUpOiAgQWNjb3VudCBmb3IgJXI0IHdoZW4gaXQncyBiZWluZyAKKwl1c2VkIGFzIGEgZnJhbWUgcG9pbnRlci4KKworU3VuIE9jdCAxMCAxODo0Mjo0OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHN0YXJ0X2luaXQpOiBEb24ndCBzZXQgcmVxdWlyZV9jb25zdGFudF9lbGVtZW50cworCWZvciBzY2FsYXIgdHlwZXMuCisKKwkqIGMtcGFyc2UuaW4gKHN0bXQpOiBEb24ndCBjYWxsIGRlZmF1bHRfY29udmVyc2lvbiBvbiB0b3AtbGV2ZWwKKwlleHByZXNzaW9ucy4KKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEFsbG93IHNpbGVudCBjb252ZXJzaW9uIHRvCisJYSBwb2ludGVyIGZyb20gYW4gaW50ZWdlciAwIHRoYXQgcmVzdWx0ZWQgZnJvbSBhcml0aG1ldGljLgorCisJKiB2YXJhc20uYywgYy1wcmFnbWEuYyAoZW51bSBwcmFnbWFfc3RhdGUpOiBEZWZpbmVkLgorCisJKiBjb25maWcvaTM4Ni9pMzg2LmMgKHJlc3RvcmVfMzg2X21hY2hpbmVfc3RhdHVzKQorCShzYXZlXzM4Nl9tYWNoaW5lX3N0YXR1cyk6IE5ldyBmdW5jdGlvbnMuCisJKGNsZWFyXzM4Nl9zdGFja19sb2NhbHMpOiBTdG9yZSB0aG9zZSBmdW5jdGlvbnMgaW4KKwlzYXZlX21hY2hpbmVfc3RhdHVzLCByZXN0b3JlX21hY2hpbmVfc3RhdHVzLgorCShzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbik6IE5ldyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KKworCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IGZpZWxkIGBtYWNoaW5lJy4KKwkqIGZ1bmN0aW9uLmMgKHNhdmVfbWFjaGluZV9zdGF0dXMsIHJlc3RvcmVfbWFjaGluZV9zdGF0dXMpOiBOZXcgdmFycy4KKwkocHVzaF9mdW5jdGlvbl9jb250ZXh0LCBwb3BfZnVuY3Rpb25fY29udGV4dCk6IFVzZSB0aGVtLgorCisJKiBleHBsb3cuYyAoZW1pdF9zdGFja19zYXZlKTogQ2FzdCBlbnVtIGFycmF5IGluZGV4IHRvIGludC4KKworU3VuIE9jdCAxMCAxMjo0OTozOSAxOTkzICBSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGFybS5jIChjb25zdF9va19mb3JfYXJtKTogQ2FzdCBjb25zdGFudHMgdG8gdW5zaWduZWQgSE9TVF9XSURFX0lOVC4KKwkob3V0cHV0X3Byb2xvZ3VlKTogU2FuaXR5IGNoZWNrIHRoZSBmaW5pdGUgc3RhdGUgbWFjaGluZS4KKwkob3V0cHV0X2VwaWxvZ3VlKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZS4KKwkoZmluYWxfcHJlc2Nhbl9pbnNuKTogQWx3YXlzIGNsZWFyIGFybV90YXJnZXRfaW5zbiB3aGVuIEZTTSBnb2VzIHRvCisJc3RhdGUgMC4KKwkqIGFybS5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERvbid0IHNldCBmbGFnX29taXRfZnJhbWVfcG9pbnRlciwKKwlzaW5jZSB0aGlzIGluaGliaXRzIGRlYnVnZ2luZy4KKwkoQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCk6IEFsd2F5cyBjbGVhciBhcm1fdGFyZ2V0X2luc24gd2hlbiBGU00KKwlnb2VzIHRvIHN0YXRlIDAuCisKK1N1biBPY3QgMTAgMDg6NTY6NTggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuaCAoQUxQSEFfQ09TVFMpOiBBZGQgbWlzc2luZyBhcmcgdG8gY2FsbCB0byBydHhfY29zdC4KKworCSogY29tYmluZS5jIChmb3JjZV90b19tb2RlLCBjYXNlIEFTSElGVFJUKTogVmVyaWZ5IHRoYXQgcmVzdWx0IG9mCisJbWFraW5nIGEgTFNISUZUUlQgcmVtYWlucyBhIHNoaWZ0LgorCisJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBGdW5jdGlvbl9tYXliZXBlcm1hbmVudF9vYnN0YWNrIGlzIHRoZQorCWZ1bmN0aW9uX29ic3RhY2sgb2YgcGFyZW50IGZ1bmN0aW9uLgorCShyZXN0b3JlX3RyZWVfc3RhdHVzKTogT25seSBmcmVlIG9iamVjdHMgbGF0ZXIgdGhhbgorCW1heWJlcGVybWFuZW50X2ZpcnN0b2JqIGluIGZ1bmN0aW9uX21heWJlcGVybWFuZW50X29ic3RhY2suCisJKG1ha2Vfbm9kZSk6IEZpeCBsb2dpYyBlcnJvciBpbiBQQVJNX0RFQ0wgY29kZS4KKwlQdXQgUEFSTV9ERUNMIGluIHBhcmVudCBmdW5jdGlvbidzIHNhdmVhYmxlIG9ic3RhY2suCisJKiBmdW5jdGlvbi5jIChwdXRfcmVnX2ludG9fc3RhY2spOiBBbGxvY2F0ZSBmaXh1cCBzdHJ1Y3R1cmUgaW4KKwlzYXZlYWJsZSBvYnN0YWNrLgorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogRG9uJ3Qgc2hvcnQgY2lyY3VpdCBzdG9yZV9leHByCisJd2hlbiBUTyBpcyBhIFZBUl9ERUNMIHNpbmNlIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgaWYgcHJvbW90ZWQuCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QsIGNhc2UgU1VSRUcpOiBPbmx5IGNhbGwgZm9yY2VfdG9fbW9kZSBpZiBib3RoCisJaW5uZXIgYW5kIG91dGVyIG1vZGVzIGFyZSBNT0RFX0lOVC4KKworCSogbWlwcy10ZmlsZS5jIChXT1JEX0FMSUdOKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGMtY29tbW9uLmMgKGNoZWNrX2Zvcm1hdF9pbmZvKTogU3VwcG9ydCBYL09wZW4gZm9ybWF0cyBsaWtlICIlMSRkIi4KKworU2F0IE9jdCAgOSAyMjoyOToxNyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmU6ICBJZiBubyB0YXJnZXQgaXMgc3BlY2lmaWVkLCB0cnkgZ2V0dGluZyBvbmUKKwl3aXRoIGNvbmZpZy5ndWVzcy4KKwkqIGNvbmZpZy5ndWVzczogTmV3IGZpbGUuCisKK1NhdCBPY3QgIDkgMTk6NTA6MjQgMTk5MyAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGMtY29tbW9uLmMgKGNoZWNrX2Zvcm1hdF9pbmZvKTogQXZvaWQgPzogY29uZGl0aW9uYWwgZm9yIGZ1bmN0aW9uCisJdG8gYmUgY2FsbGVkLgorCisJKiBjb25maWcvdmF4L3htLXZtcy5oIFtWQVhDXSAoYmNfY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcpCisJKGN1cnJlbnRfZnVuY3Rpb25faGFzX25vbmxvY2FsX2dvdG8pCisJKG91dHB1dF9kZWZlcnJlZF9hZGRyZXNzZWRfY29uc3RhbnRzKTogTmV3IG1hY3JvcyB0byBzaG9ydGVuCisJZXh0ZXJuYWwgbmFtZXMgZXhjZWVkaW5nIDMxIGNoYXJhY3RlcnMuCisKKwkqIG1ha2UtY2MxLmNvbTogTW92ZSBhbGxvY2EgaGFuZGxpbmcgYmVmb3JlIGJ5dGVjb2RlIGNvbnN0cnVjdGlvbgorCXNvIHRoYXQgVkFYIEMgd29uJ3QgbmVlZCB0d28gZGlmZmVyZW50IHZhbHVlcyBmb3IgTElCUy4gIEVsaW1pbmF0ZSBhCisJY29tbWVudCBhYm91dCBtYWtlLWxpa2UgZnVuY3Rpb25hbGl0eSB0aGF0IHJlZmVycmVkIHRvIGEgY2FwYWJpbGl0eQorCXdoaWNoIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC4KKworU2F0IE9jdCAgOSAyMTo1Mzo1MyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBVbnF1b3RlIGEgcXVvdGVkIGB0JyBpbiBhICNkZWZpbmUgX0lPIGxpbmUsIGZvciBBSVgKKwkzLjIgc3lzL3N0cm9wdHMuaCAjZGVmaW5lIF9JTyh0LHYpLgorCShzeXMvc3BpbmxvY2suaCk6IERvbid0IGNvcHkgaXQgaWYgaXQgZG9lc24ndCBleGlzdC4KKwkoRFBTL1hEUFNsaWIuaCk6IENoYW5nZSAiWERQUy5oIiB0byA8RFBTL1hEUFMuaD4sIGZvciBBSVguCisKK1NhdCBPY3QgIDkgMTU6MDA6MDAgMTk5MyBESiBEZWxvcmllIChkakBjdHJvbi5jb20pCisKKwkqIGNvbmZpZ3VyZS5iYXQ6IENoYW5nZSAkKHNyY2RpcikvIHRvICQoc3JjZGlyKVwgaW4gY29tbWFuZHMuCisKK1NhdCBPY3QgIDkgMTU6MTc6MjIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBQlNfRVhQUik6IERvbid0IGNvcHkgdHdpY2UgaW50bworCXZvbGF0aWxlIE1FTS4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IE5ldmVyIHJlc2V0IE9SSUdJTkFMX1RBUkdFVC4KKwlQYXNzIE9SSUdJTkFMX1RBUkdFVCB0byBsYW5nX2V4cGFuZF9leHByLCBub3QgVEFSR0VULgorCitTYXQgT2N0ICA5IDEzOjI3OjEwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogdHJlZS5jIChwb3BfbW9tZW50YXJ5X25vZnJlZSk6IE5ldyBmdW5jdGlvbi4KKwkqIGMtcGFyc2UuaW4gKGluaXRkY2wsIG5vdHlwZV9pbml0ZGNsLCBpbml0KTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisJKGluaXQpOiBVc2UgcG9wX21vbWVudGFyeV9ub2ZyZWUgaWYgdGhlIGluaXRpYWxpemVyIGhhcyByZWFsIGRhdGEuCisKK1NhdCBPY3QgIDkgMTI6NTU6MjYgMTk5MyAgU3RlcGhlbiBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiByZWFsLmMgKGFzY3RvZWcpOiBBbGxvY2F0ZSBsb2NhbCBidWZmZXIgZHluYW1pY2FsbHkuICBDb3VudAorCWFueSBsb3N0IHNpZ25pZmljYW50IGRpZ2l0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQuCisKK0ZyaSBPY3QgIDggMTY6MzM6NDIgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChPRkZTRVRfUkVGKTogT3ZlcnJpZGUgT0ZGU0VUX1JFRnMgZnJvbSB0aGUgYmFjay1lbmQsIGFzCisJICB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCB0aGVtLgorCSogY3AtdHJlZS5kZWYgKENQX09GRlNFVF9SRUYpOiBWZXJ5IHNpbWlsYXIgdG8gT0ZGU0VUX1JFRnMsIGJ1dAorCSAgYWxsb3cgdGhlIGZyb250LWVuZCB0byBoYW5kbGUgdGhlbS4KKworRnJpIE9jdCAgOCAxNDo0MDoyOSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtZXJyb3IuYyAoZHVtcF9leHByLCBSRUFMX0NTVCk6IFN1cHBvcnQgcHJpbnRpbmcgb2YgcmVhbCB2YWx1ZXMKKwl3aGVuIFJFQUxfSVNfTk9UX0RPVUJMRSAocHJpbnRzIG91dCByZXAgaW4gaGV4KS4KKworRnJpIE9jdCAgOCAxMzo1NDowMyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGUyLmMgKHN0b3JlX2luaXRfdmFsdWUpOiBNb3ZlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uCisJICBpbml0aWxpemF0aW9uIGNvZGUgdG8uLi4KKwkqIGNwLXR5cGUyLmMgKGRpZ2VzdF9pbml0KTogaGVyZS4gIEFsbG93cyBuZXN0ZWQgcG9pbnRlciB0byBtZW1iZXIKKwkgIGZ1bmN0aW9ucyB0byB3b3JrLgorCSogY3AtZGVjbC5jIChidWlsZF9wdHJtZW1mdW5jX3R5cGUpOiBVc2UgYSByZWFsIHVuaW9uIGluc3RlYWQgb2YgYQorCSAgbWFnaWMgdW5pb24sIGFzIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGRvZXNuJ3QgbGlrZSB0aGVtLgorCSogY3AtdHJlZS5oIChUWVBFX1BUUk1FTUZVTkNfRk5fVFlQRSk6IENoYW5nZWQgdG8gZ28gdGhvdWdoIHRoZQorCSAgdW5pb24uCisJKiBjcC10cmVlLmggKERFTFRBMl9GUk9NX1BUUk1FTUZVTkMsIFBGTl9GUk9NX1BUUk1FTUZVTkMpOiBBY2Nlc3NvcgorCSAgbWFjcm9zIHRvIGdvIHRob3VnaHQgdW5pb24uICBBbGxvd3MgdXMgdG8gY2hhbmdlIHBvaW50ZXIgdG8gbWVtYmVyCisJICBmdW5jdGlvbnMgYSBsaXR0bGUgZWFzaWVyLgorCSogY3AtdHlwZWNrLmMgKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jLAorCSAgYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENoYW5nZWQgdG8gdXNlIG5ldyBhY2Nlc3NvciBtYWNyb3MuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYyk6IFVzZSBuZXcgdW5pb24gaW5zdGVhZC4gIEFsc28sIG1ha2UKKwkgIHN1cmUgVFJFRV9DT05TVEFOVCBpcyBzZXQgZm9yIENPTlNUQU5UIHRoaW5ncy4KKwkqIGNwLWRlY2wuYyAocGZuX29yX2RlbHRhMl9pZGVudGlmaWVyKTogQWRkZWQgdG8gY2FjaGUKKwkgIGdldF9pZGVudGlmaWVyIGNhbGxzLgorCSogY3AtdHJlZS5oIChwZm5fb3JfZGVsdGEyX2lkZW50aWZpZXIpOiBEZWNsYXJlIGl0LgorCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldHVwIHBmbl9vcl9kZWx0YTJfaWRlbnRpZmllci4KKworRnJpIE9jdCAgOCAxOTowMzowOSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIHhjb2Zmb3V0LmggKERCWF9TVEFUSUNfQkxPQ0tfU1RBUlQpOiBGb3IgTl9MQ1NZTSwgZm9yY2UgY2hhbmdlCisJdG8gdGV4dCBzZWN0aW9uIHRvIGF2b2lkIGFzc2VtYmxlciBidWcuCisKKwkqIG1pcHMubWQgKG1vdnNpX3VuYWxpZ25lZCk6IENoYW5nZSBpbiBjb21tZW50ICJsb2FkcyIgdG8gInN0b3JlcyIuCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogQ29tcHV0ZSBzdHJ1Y3RfdmFsdWVfc2l6ZSwKKwlhbmQgcGFzcyBpdCB0byBlbWl0X2NhbGxfMS4KKworRnJpIE9jdCA4ICAxNjoxMzoxNyAxOTkzICBILkouIEx1ICAoaGpsQG55bmV4c3QuY29tKQorCisJKiBjb25maWcvaTM4Ni9saW51eC5oIChTVEFSVEZJTEVfU1BFQyk6IEhhbmRsZSAtcCBhbmQgLXBnCisJb3V0ZXJtb3N0LiAgQWxzbyBhZGQgc3VwcG9ydCBmb3IgY3Jvc3MtbGlua2luZy4KKworRnJpIE9jdCAgOCAxNToyMDo1OCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChjcC1lcnJvci5vLCBjcC1lcnJmbi5vKTogQWRkIGRlcGVuZGVuY3kgcnVsZXMuCisKK0ZyaSBPY3QgIDggMDg6MDA6NTEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGthZmthKQorCisJKiBsaW51eC5oOiBPbmx5IGluY2x1ZGUgaTM4Ni9nc3RhYnMuaCBpZiBMSU5VWF9FTEYgaXMgbm90IGRlZmluZWQuCisKKwkqIGxpbnV4ZWxmLmg6ICBDb3B5IGEgbG90IG9mIHN0dWZmIGZyb20gdGhlIFNWcjQgY29uZmlndXJhdGlvbjoKKwlpbmNsdWRlICJpMzg2L2kzODYuaCIsICJpMzg2L2F0dC5oIiBhbmQgInN2cjQuaCIuCisJKE1EX0VYRUNfUFJFRklYLCBNRF9TVEFSVEZJTEVfUFJFRklYKTogIFVuZGVmaW5lLgorCShBU01fRklMRV9TVEFSVCwgUkVUVVJOX0lOX01FTU9SWSwgQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKQorCShKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04sIERCWF9SRUdJU1RFUl9OVU1CRVIpOiBDb3B5IGZyb20gc3lzdjQuaC4KKwkoVEFSR0VUX1ZFUlNJT04pOiBEZWZpbmUgdG8gcHJpbnQgImkzODYgTGludXgvRUxGIi4KKwkoTElOVVhfRUxGKTogRGVmaW5lLCBiZWZvcmUgd2UgaW5jbHVkZSAiaTM4Ni9saW51eC5oIgorCShZRVNfVU5ERVJTQ09SRSk6IFVuZGVmaW5lLgorCitGcmkgT2N0ICA4IDEzOjQwOjQ0IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCwgaTM4Ni9vc2ZlbGYuaCAoQ1BQX1NQRUMpOiBJZiBidWxpZGluZyBmb3Igc2hhcmVkCisJbGlicmFyaWVzLCBkZWZpbmUgX19TSEFSRURfXy4KKworCSogaTM4Ni9vc2Zyb3NlLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogSWYgaGFsZi1waWMsIGNhbGwgbWNvdW50IGluIGEKKwloYWxmLXBpYyBmYXNoaW9uLgorCShGVU5DVElPTl9QUk9MT0dVRSk6IElmIGhhbGYtcGljIGNhbGwgdGhyb3VnaCBfbWNvdW50X3B0ciBpbiBhCisJaGFsZi1waWMgZmFzaGlvbi4KKworCSogaGFsZnBpYy5jIChoYWxmX3BpY19leHRlcm5hbCk6IE5ldyBmdW5jdGlvbiB0byBkZWNsYXJlIGEgaGFsZnBpYworCWlkZW50aWZpZXIgYXMgYWx3YXlzIGV4dGVybmFsLgorCisJKiBoYWxmcGljLmggKGhhbGZfcGljX2V4dGVybmFsKTogZGVjbGFyZSBmdW5jdGlvbi4KKwkoSEFMRl9QSUNfRVhURVJOQUwpOiBEZWNsYXJlIGFjY2Vzc29yIG1hY3JvLgorCitGcmkgT2N0ICA4IDE1OjAzOjU2IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCUN5Z251czwtPkZTRiBDKysgZnJvbnQtZW5kIG1lcmdlLgorCVRodSBPY3QgIDcgMTE6NDU6MzIgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChDUExVU19PQkpTKTogQ2hhbmdlIGVycm9yLm8gdG8gY3AtZXJyZm4ubworCisJKiBjcC0qLmMsIGNwLXBhcnNlLnk6IFJlbmFtZSBsYW5nX2Vycm9yIGFuZCBpdHMga2luIHRvIGNwX2Vycm9yCisJYW5kIHRoZSBsaWtlIHRvIGFjY29tb2RhdGUgcm1zJ3MgYmVsaWVmIHN0cnVjdHVyZS4KKworCSogZXJyb3IuYzogTW92ZWQgdG8gY3AtZXJyZm4uYyB0byBhY2NvbW9kYXRlIHJtcydzIGJlbGllZiBzdHJ1Y3R1cmUKKworCVdlZCBPY3QgIDYgMTU6MDU6NDkgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLXB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IEFsd2F5cyB1c2UgdHlwZV9hc19zdHJpbmcKKwlmb3IgcHJpbnRpbmcgb3V0IHR5cGUgcGFyYW1ldGVycy4gIE51a2UgaWQgYW5kIHR5cGUgdmFyaWFibGVzLgorCisJKiBjcC1lcnJvci5jIChkdW1wX2V4cHIsIElOVEVHRVJfQ1NUKTogU3VwcG9ydCBwcmludGluZyBvZiBjaGFyYWN0ZXIKKwlsaXRlcmFscyBhbmQgbGFyZ2UgaW50ZWdlcnMKKwkoZHVtcF9jaGFyKTogTmV3IGZ1bmN0aW9uCisJKGR1bXBfdHlwZSk6IERlYWwgd2l0aCAqKiBhbmQgKiYgbW9yZSBwcmV0dGlseQorCisJKiBjcC1wdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBTdHJpcCBvdXQgY29kZSBmb3IKKwlwcmludGluZyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCByZXBsYWNlIHdpdGggY2FsbCB0byBleHByX2FzX3N0cmluZy4KKworCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogZGVzY2VuZCB0aHJvdWdoCisJVFJFRV9PUEVSQU5EIG9uIE5PUF9FWFBScyBhcyB3ZWxsIGFzIE5PTl9MVkFMVUVfRVhQUnMuCisKKwkqIGNwLWRlY2wuYyAocG9wbGV2ZWxfY2xhc3MpOiBBZGQgYXNzZXJ0aW9uIHRoYXQKKwljbGFzc19iaW5kaW5nX2xldmVsIGlzIG5vdCBOVUxMLgorCisJVHVlIE9jdCAgNSAxMToxMToyNSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCVBhdGNoZXMgdG8gc3VwcG9ydCBwcm9wZXIgaGFuZGxpbmcgb2Ygc3lzdGVtIGluY2x1ZGVzIHdpdGhvdXQgbXVuZ2luZzoKKworCSogY3AtbGV4Lmg6IERlY2xhcmUgaW5fY19oZWFkZXIsIGEgZmxhZyBtZWFuaW5nICdpbXBsaWNpdGx5IHdyYXAgdGhpcworCWZpbGUgaW4gZXh0ZXJuICJDIiB7IH0nLgorCisJKiBjcC1sZXguYzogRGVmaW5lIGluX2NfaGVhZGVyLgorCShjaGVja19uZXdsaW5lKTogSWYgaW5fY19oZWFkZXIgd2hlbiBjaGFuZ2luZyBmaWxlcywKKwlwb3BfbGFuZ19jb250ZXh0KCkuCisJKGNoZWNrX25ld2xpbmUpOiBJZiAiNCIgc2VlbiBvbiAjbGluZSBsaW5lLCBwdXNoX2xhbmdfY29udGV4dChDKS4KKworCSogY2NjcC5jOiBBZGQgYSBuZXcgZmllbGQgY19zeXN0ZW1faW5jbHVkZV9wYXRoIHRvIHN0cnVjdAorCWZpbGVfbmFtZV9saXN0IHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBkaXJlY3RvcnkgY29udGFpbnMgQy1sYW5ndWFnZQorCXN5c3RlbSBpbmNsdWRlcy4KKwkoKnZhcmlvdXMqKTogU2V0IHRoaXMgZmxhZyBjb3JyZWN0bHkKKwkoaXNfc3lzdGVtX2luY2x1ZGUpOiBSZXR1cm4gMiBpZiBDLWxhbmd1YWdlIHN5c3RlbSBpbmNsdWRlLgorCShvdXRwdXRfbGluZV9jb21tYW5kKTogT3V0cHV0ICIgNCIgYWZ0ZXIgIiAzIiBmb3IgQy1sYW5ndWFnZSBzeXN0ZW0KKwlpbmNsdWRlLgorCisJKiBjcC10cmVlLmggKFNFVF9DTEFTU1RZUEVfSU5URVJGQUNFX1VOS05PV05fWCk6IENvZXJjZSBYIHRvIGJvb2xlYW4KKwl2YWx1ZQorCisJTW9uIE9jdCAgNCAxNzowMzo0OCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oOiBBZGQgZGVjbGFyYXRpb24gZm9yIGZsYWdfZXh0ZXJuYWxfdGVtcGxhdGVzCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCk6IERvbid0IGRlY2xhcmUgZmxhZ19leHRlcm5hbF90ZW1wbGF0ZXMKKworCSogY3AtcHQuYzogRGl0dG8KKworCSogY3AtcGFyc2UueSAodGVtcGxhdGVfaW5zdGFudGlhdGVfb25jZSk6IERpdHRvCisKKwkqIGNwLWxleC5jIChyZWluaXRfcGFyc2VfZm9yX21ldGhvZCk6IERpdHRvCisJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IERpdHRvCisJKGV4dHJhY3RfaW50ZXJmYWNlX2luZm8pOiBEb24ndCBzZXQgaW50ZXJmYWNlX3Vua25vd24KKwlpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWZuICYmICFmbGFnX2V4dGVybmFsX3RlbXBsYXRlcykKKworCSogY3AtZXJyb3IuYyAoZHVtcF90eXBlKTogRGVhbCBwcm9wZXJseSB3aXRoIHBvaW50ZXJzIHRvIG1lbWJlcgorCWZ1bmN0aW9ucy4KKworCSogY3AtcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBJZiAhZmxhZ19leHRlcm5hbF90ZW1wbGF0ZXMsCisJaW5jcmVtZW50IGludGVyZmFjZV91bmtub3duIHNvIHRoYXQgbmVzdGVkIGNsYXNzZXMgd2lsbCBiZSBkZWFsdCB3aXRoCisJcHJvcGVybHkuCisJKGVuZF90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogSWYgIWZsYWdfZXh0ZXJuYWxfdGVtcGxhdGVzLAorCWRlY3JlbWVudCBpbnRlcmZhY2VfdW5rbm93bi4KKworCSogY3AtbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFJlbW92ZSByZWR1bmRhbnQgY2hlY2sKKwlmb3IgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWZuICYmICFmbGFnX2V4dGVybmFsX3RlbXBsYXRlcworCShyZWluaXRfcGFyc2VfZm9yX21ldGhvZCk6IERpdHRvCisKKwkqIGNwLXBhcnNlLnkgKHRlbXBsYXRlX2luc3RhbnRpYXRlX29uY2UpOiAgRG9uJ3QgbWVzcyB3aXRoCisJaW50ZXJmYWNlX3Vua25vd24KKworCU1vbiBPY3QgIDQgMTU6NDc6MzQgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1vdmUgc2V0dGluZyBvZiBUUkVFX0NIQUlOIGFmdGVyCisJICBhbGwgcG9zc2libGUgcmV0dXJuIDA7cyBhcyB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyB3aGVuIHdlIGtub3cKKwkgIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGR1cGxpY2F0ZS4KKworCSogY3AtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFJlbW92ZSBteV9mcmllbmRseV9hYm9ydCAxOS4gIEFsbG93cworCSAgb25lIHRvIGRlY2xhcmUgYSBidWlsdC1pbiBhcyBleHRlcm4gaW5saW5lLgorCisJTW9uIE9jdCAgNCAxMjo0NzozMyAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BtaXQuZWR1KQorCisJKiBjcC1sZXguYyAoY29uc3VtZV9zdHJpbmcpOiBDaGFuZ2UgdmFyaWFibGUgYGMnIHRvIGludCBzbyByZXR1cm4KKwl2YWx1ZSBvZiBnZXRjaCBjYW4gYmUgYXNzaWduZWQgdG8gaXQgc2FmZWx5LiAgQ29tcGFyZSByZXR1cm4gdmFsdWUKKwlvZiBnZXRjaCB0byBFT0YsIG5vdCAtMS4KKworCU1vbiBPY3QgIDQgMTE6NDI6NDYgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChlcnJvciBhbmQgaXRzIGtpbik6IFVzZSAjZGVmaW5lcyBmb3IgdGhlIGFyZ3VtZW50CisJbGlzdHMgZm9yIGVhc2Ugb2YgYWRkaW5nIGFyZ3VtZW50cywgYW5kIG9mIG1vdmluZyB0byB2ZnByaW50ZiB3aGVuCisJZGplIGFkZHMgaXQuCisKKwkqIGVycm9yLmMgKGxhbmdfdGhpbmcgYW5kIGl0cyBjaGlsZHJlbik6IERvIHRoZSBzYW1lIHRoaW5nLgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogRG8gYXdheSB3aXRoIHRoZSBrbHVkZ2UsIG5vdyB0aGF0CisJZXJyb3IgYWNjZXB0cyBtb3JlIGFyZ3VtZW50cy4KKworCVN1biBPY3QgIDMgMTY6MzQ6MzkgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWVycm9yLmM6IFJlbW92ZSBhbGwgdHJhY2VzIG9mIGluX3Bhcm1saXN0CisKKwlTdW4gT2N0ICAzIDEzOjU0OjU3IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzc19hbnNpLCBjb252ZXJ0X2hhcnNobmVzc19vbGQpOiBIYW5kbGUKKwkgIHBvaW50ZXIgdG8gZnVuY3Rpb24gbWVtYmVycyBwcm9wZXJseS4KKworCUZyaSBPY3QgIDEgMTY6NDI6MzAgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1lcnJvci5jIChkdW1wX2Z1bmN0aW9uX2RlY2wsIGR1bXBfZnVuY3Rpb25fbmFtZSk6IE1ha2Ugc3RhdGljCisJICB0byBtYXRjaCBwcm90b3R5cGUuCisKKwlGcmkgT2N0ICAxIDE1OjIzOjMxIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMpOiBNb3ZlIHNvbWUgY29kZSBpbnRvIHRoZSB2aXJ0dWFsCisJICBjb25kaXRpb25hbCBwYXJ0LiAgRml4ZXMgcHJvYmxlbSB3aXRoIGNvcmUgY29yZSBkdW1waW5nIHdoZW4gdGhlCisJICBjbGFzcyB0aGF0IHdlIHdhbnQgdG8gYnVpbGQgYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiBmb3IgZG9lc24ndAorCSAgaGF2ZSBhbnkgdmlydHVhbCBmdW5jdGlvbnMuCisKKwlUaHUgU2VwIDMwIDE4OjE1OjI5IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChpZF9zY29wZSk6IFByaW50IHRoZSBuYW1lIG9mIHRoZSBpbnZhbGlkIHNjb3BlLgorCSh1bmFyeV9leHByKTogQWRkIC5zY29wZSBuZXcgdHlwZXNwZWMgJygnIHR5cGVzcGVjICcpJyBleHBhbnNpb24KKwl3aGljaCBqdXN0IGdpdmVzIGFuIGVycm9yLgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogUHJpbnQgbW9yZSBoZWxwZnVsIG1lc3NhZ2UgZm9yCisJYSBtaXNzaW5nIG1lbWJlciBvcGVyYXRvciAocHJpbnQgdGhlIGRlc2lyZWQgdHlwZSBpbnZvbHZlZCkuCisJVmVyeSBrbHVkZ2V5IGR1ZSB0byBlcnJvcigpJ3MgdHdvLWFyZyBsaW1pdC4KKworCSogZXJyb3IuYyAobGFuZ190aGluZyk6IEFib3J0IGlmIG1vcmUgdGhhbiBOQVJHUyAoY3VycmVudGx5IDIpIGFyZQorCXBhc3NlZCwgc2luY2UgdGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgYSBzZWcgZmF1bHQgZWxzZXdoZXJlIGFueXdheS4KKworCVRodSBTZXAgMzAgMTQ6MTk6MjggMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGcrK2ludC50ZXhpOiBBZGQgZXJyb3IgcmVwb3J0aW5nIHNlY3Rpb24sIG1ha2UgYG1ha2VpbmZvJ2FibGUKKworCSogY3AtdHlwZTIuYyAobXlfZnJpZW5kbHlfYWJvcnQpOiBEZWFsIHdpdGggcmVjdXJzaXZlIGNhbGxzCisKKwlUaHUgU2VwIDMwIDEyOjI0OjMzIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva19hcnJheV9kZWNsKTogRG9uJ3QgcGVkd2FybiBvbiByZXZlcnNpbmcgdGhlIGFycmF5CisJYW5kIGl0cyBpbmRleCBpbiBgYVtiXScuCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogTWFrZSBwb2ludGVyIHR5cGUgbWlzbWF0Y2gKKwlpbiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gZ2V0IGEgcGVkd2Fybi4KKwkoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IE1ha2UgY29tcGFyaXNvbiBiZXR3ZWVuIGRpZmZlcmVudAorCXBvaW50ZXIgdHlwZXMgbGFja2luZyBhIGNhc3QgZ2V0IGEgcGVkd2Fybi4KKwkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBEb24ndCBzdHJpcCB0aGUgTk9QX0VYUFJzLCBzaW5jZSB3ZSdyZSB1c2luZworCXRoZSByaHMgaW4gYSBub24tbHZhbHVlIGNvbnRleHQuCisJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBBbGxvdyBjb252ZXJzaW9uIG9mIDAgdG8gYSBwb2ludGVyLCBidXQKKwlub3QgYSAwIHRoYXQgcmVzdWx0cyBmcm9tIGNhc3Rpbmcgb3IgZm9sZGluZy4KKworCVRodSBTZXAgMzAgMTE6MjQ6NTkgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IEZvciBtZW1iZXJ3aXNlIGFzc2lnbm1lbnQsCisJcHV0IG5vcF9leHByIChyZWZlcmVuY2VfdHlwZSAobGhzdHlwZSkpIGF0IHRoZSBlbmQgb2Ygb2YgdGhlIGxpc3Qgc28KKwl0aGF0IHRoZSBleHByZXNzaW9uIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorCisJKiBlcnJvci5jIChsYW5nX3RoaW5nKTogRG9uJ3QgcmVseSBvbiBTVERDIGFycmF5IGluaXRpYWxpemF0aW9uCisKKwlUdWUgU2VwIDI4IDE4OjIwOjA1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChidWlsZF92aXJ0dWFsX2luaXQpOiBVc2UgZ2V0X2JpbmZvIGFuZAorCSAgY29udmVydF9wb2ludGVyX3RvX3JlYWwsIHRvIGZpbmQgdGhlIHJpZ2h0IGJhc2V0eXBlIHRvIGNvbnZlcnQgdG8sCisJICBpbnN0ZWFkIG9mIHRyeWluZyB0byB1c2UgY29udmVydF9wb2ludGVyX3RvLCBhcyBjb252ZXJ0X3BvaW50ZXJfdG8KKwkgIGRvZXNuJ3QgaGFuZGxlIGNvbXBsZXggTUkgc2l0dWF0aW9ucy4gIEN1cmVzIGEgYm9ndXMgImNhbm5vdAorCSAgY29udmVydCBhIHBvaW50ZXIgb2YgdHlwZSBgQicgdG8gYSBwb2ludGVyIG9mIHR5cGUgYEEnIiB3aGVuIHRoZQorCSAgY29tcGlsZXIgaXMgaW5pdGlhbGl6aW5nIHZpcnR1YWwgdGFibGUgcG9pbnRlcnMuCisKKwlNb24gU2VwIDI3IDE0OjU0OjQyIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFVzZSBnZXRfYmluZm8gYW5kCisJICBjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCwgdG8gZmluZCB0aGUgcmlnaHQgYmFzZXR5cGUgdG8gY29udmVydCB0bywKKwkgIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHVzZSBjb252ZXJ0X3BvaW50ZXJfdG8sIGFzIGNvbnZlcnRfcG9pbnRlcl90bworCSAgZG9lc24ndCBoYW5kbGUgY29tcGxleCBNSSBzaXR1YXRpb25zLiAgQ3VyZXMgYSBib2d1cyAiY2Fubm90CisJICBjb252ZXJ0IGEgcG9pbnRlciBvZiB0eXBlIGBCJyB0byBhIHBvaW50ZXIgb2YgdHlwZSBgQSciIHdoZW4gdGhlCisJICBjb21waWxlciBpcyBzZXR0aW5nIHVwIHRoZSBgdGhpcycgcG9pbnRlci4KKwkqIGNwLWN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG8pOiBKdXN0IGNhbGwgY29udmVydF9wb2ludGVyX3RvX3JlYWwKKwkgIHRvIGltcGxlbWVudCBmdW5jdGlvbmFsaXR5LgorCSogY3AtY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90b19yZWFsKTogTmV3IHJvdXRpbmUuICBVc2VzIG5ldworCSAgZnVuY3Rpb25hbGl0eSBpbiBnZXRfYmFzZV9kaXN0YW5jZSB0byBmaWd1cmUgb3V0IHdoaWNoIGV4YWN0CisJICBwYXJlbnQgd2Ugd2FudCB0byBjb252ZXJ0IHRvLgorCSogY3Atc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlX3JlY3Vyc2l2ZSwgZ2V0X2Jhc2VfZGlzdGFuY2UpOgorCSAgTW9kaWZ5IHRvIHN1cHBvcnQgc2VhcmNoaW5nIGZvciBhIHNwZWNpZmljIFBBUkVOVCBnaXZlbiBhcyBhIGJpbmZvCisJICBmcm9tIG91ciBoaWVyYXJjaHkuCisJKiBjcC10eXBlZS5oIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IERlY2xhcmUgbmV3IHJvdXRpbmUuCisKKwlNb24gU2VwIDI3IDEzOjAyOjUxIDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChteV9mcmllbmRseV9hYm9ydCk6IFVuZG8gcHJldmlvdXMgY2hhbmdlCisKKwkqIGNwLSouYzogVXNlIGxhbmdfZXJyb3IgaW5zdGVhZCBvZiBlcnJvcl93aXRoX2RlY2wsCisJZXJyb3Jfd2l0aF9hZ2dyX3R5cGUsIGV0Yy4gIE5vdCBjb21wbGV0ZTsgSSBvbmx5IGNoYW5nZWQgdGhlIGVhc3kKKwljYXNlcyBhbmQgYSBmZXcgb2YgdGhlIG1vcmUgb2JzY3VyZSBvbmVzLiAgUGxlYXNlIGNvbnZlcnQgY2FsbHMKKwlvdmVyIHdoZW4geW91J3JlIHdvcmtpbmcgb24gYW4gYXBwcm9wcmlhdGUgc2VjdGlvbi4KKworCSogY3AtbWV0aG9kLmM6IFN0cmlwIG91dCBlcnJvciByZXBvcnRpbmcgY29kZQorCisJKiBNYWtlZmlsZS5pbiAoQ1BMVVNfT0JKUyk6IEFkZCBlcnJvci5vIGFuZCBjcC1lcnJvci5vCisKKwkqIGNwLWVycm9yLmM6IE5ldyBmaWxlLCBjb250YWlucyBjYWxsLWJhY2sgZnVuY3Rpb25zIGZvciBDKysuCisJVGhlIGFjdHVhbCBvdXRwdXQgY29kZSBpcyBhbiBleHRlbnNpdmVseSBvdmVyaGF1bGVkIHZlcnNpb24gb2YgdGhlCisJY29kZSBmcm9tIGNwLW1ldGhvZC5jLgorCURvbid0IGNhbGwgbXlfZnJpZW5kbHlfKiB0byBhdm9pZCB1bmRlc2lyYWJsZSByZWN1cnNpb24uCisKKwkqIGVycm9yLmM6IE5ldyBmaWxlLCBwcm92aWRlcyBjYWxsLWJhY2sgbWVjaGFuaXNtIGZvciBsYW5ndWFnZS0KKwlkZXBlbmRlbnQgZXJyb3IgcmVwb3J0aW5nLgorCisJRnJpIFNlcCAyNCAxMzo1MjoyNyAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZTIuYyAobXlfZnJpZW5kbHlfYWJvcnQpOiBEb24ndCBkaWUgcXVpZXRseSBpZiAKKwllcnJvcmNvdW50IG9yIHNvcnJ5Y291bnQgYXJlIHBvc2l0aXZlLCBkaWUgbG91ZGx5LgorCitGcmkgT2N0ICA4IDEzOjU4OjEzIDE5OTMgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBXaGVuIHNraXBwaW5nIGNvbnNlY3V0aXZlIGluc25zLAorCWRvbid0IGNvdW50IG5vdGVzLgorCitGcmkgT2N0ICA4IDEwOjQxOjA3IDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIGMtY29tbW9uLmMgKGNoZWNrX2Z1bmN0aW9uX2Zvcm1hdCk6IENvcnJlY3QgZXJyb3IgaW4gbGFzdAorCWNoYW5nZS4KKworRnJpIE9jdCAgOCAwODoxMDowMyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKGluaXRkY2wsIG5vdHlwZV9pbml0ZGNsKTogQ2FsbCBwdXNoX21vbWVudGFyeSBhbmQKKwlwb3BfbW9tZW50YXJ5IGhlcmUuCisJKGluaXQpOiBOb3QgaGVyZS4KKworRnJpIE9jdCAgOCAwNjozNTowNyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUsIGNhc2UgSU5URUdFUl9UWVBFKTogQ29ycmVjdGx5IGNoZWNrCisJZm9yIHR5cGUgc21hbGxlciB0aGFuIGBpbnRlZ2VyJy4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBNQVhfRVhQUik6IERvbid0IHVzZSBUQVJHRVQgZGlyZWN0bHkKKwlpZiBpdCBpcyBhIHZvbGF0aWxlIE1FTS4KKworCSogaTM4Ni90LWFpeCwgaTM4Ni90LWlzYywgaTM4Ni90LW9zZnJvc2UsIGkzODYvdC1zY28sIG1pcHMvdC1vc2Zyb3NlOgorCVJlbW92ZSBMSU1JVFNfSDsgaGFzbid0IGJlZW4gdXNlZCBmb3IgYSB3aGlsZS4KKworCSogY29uZmlndXJlOiBBZGQgRVhUUkFfUEFTU0VTIGxpa2Ugd2UgYWRkIEVYVFJBX0hFQURFUlMuCisJQ29ycmVjdCBFWFRSQV9IRUFERVJTIGhhbmRsaW5nIHRvIGFjY2VwdCBtdWx0aXBsZSBuYW1lcy4KKwkobWlwcy0qLSopOiBTZXQgZXh0cmFfcGFzc2VzIHRvIG1pcHMtdGZpbGUgYW5kIG1pcHMtdGR1bXAgd2hlbgorCXdlIHVzZSB0LW1pcHMsIHQtYnNkLCB0LXN2clszNF0sIGFuZCB0LXVsdHJpeC4KKwkqIE1ha2VmaWxlLmluIChtaXBzLXRmaWxlLCBtaXBzLXRmaWxlLm8sIG1pcHMtdGR1bXAsIG1pcHMtdGR1bXAubyk6CisJTmV3IHJ1bGVzLgorCSogbWlwcy10ZmlsZS5jOiBEb24ndCBkZWZpbmUgbWVtb3J5IGZ1bmN0aW9ucyBvbiBBbHBoYS4KKwkoUHRyZGlmZl90KTogQWx3YXlzIGBsb25nJy4KKwkoV09SRF9BTElHTik6IE1ha2UgcG9ydGFibGUuCisJKiBtaXBzL3QtYnNkLCB0LW1pcHMsIHQtc3ZyMywgdC1zdnI0LCB0LXVsdHJpeDogUmVtb3ZlCisJZGVmaW5pdGlvbiBvZiBFWFRSQV9QQVNTRVMgYW5kIHJlbW92ZSBydWxlcyBmb3IgbWlwcy0qIGZpbGVzLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogRG9uJ3QgY29uZnVzZSBhIHBhcmFtZXRlciBhdCBhbgorCW9mZnNldCBvZiB6ZXJvIGZyb20gQVAgb3IgRlAgd2l0aCBvbmUgdGhhdCBoYXMgdmFyaWFibGUgc2l6ZS4KKworCSogY2FsbHMuYyAoZW1pdF9saWJyYXJ5X2NhbGwpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZTsgc2hvdWxkCisJdXNlIFBtb2RlIGluc3RlYWQgb2YgU0ltb2RlLgorCitGcmkgT2N0ICA4IDAwOjM0OjM5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogRXJyb3IgaWYgYmxvY2stc2NvcGUgc3RhdGljIHZhcgorCWhhcyBpbmNvbXBsZXRlIHR5cGUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgVkFSX0RFQ0wpOiBJZiBkZWNsIHdhc24ndCBsYWlkIG91dCwKKwlsYXkgaXQgb3V0IG5vdywgYW5kIGZpeCB0aGUgcnRsJ3MgbW9kZS4KKworVGh1IE9jdCAgNyAxMjozMDoxMCAxOTkzICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQorCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IENvcnJlY3RseSBzZXQgTUFYSU5ERVggdG8KKwlvbmUgbGVzcyB0aGFuIGFycmF5IHNpemUuCisKK1RodSBPY3QgIDcgMjA6NDQ6NDEgMTk5MyAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGFkZGVyLmN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcCk6IEZvciAqX0RJVl9FWFBSLCBzZXQgc2hvcnRlbiBiYXNlZAorCW9uIG9yaWdfb3AwLgorCitUaHUgT2N0ICA3IDE4OjE5OjE3IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogeG0tbWlwcy5oIChIQVZFX1ZQUklOVEYpOiBDb3JyZWN0IHR5cG8sIGlzIFZQUklOVEYgbm90IFZGUFJJTlRGLgorCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTKTogQWRkIF9maXh0ZmRpLCBfZml4dW5zdGZkaSwgX2Zsb2F0ZGl0Zi4KKworVGh1IE9jdCAgNyAxNDo1ODowMiAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY29uZmlndXJlIChpMzg2LW9zZik6IEVMRiBvbiBPU0YvMSBkb2VzIG5vdCBuZWVkIGNvbGxlY3QyLgorCitUaHUgT2N0ICA3IDE3OjM4OjI1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluKTogTmV3IG9wdGlvbiAtbGFuZy1jLWMrKy1jb21tZW50cy4KKworVGh1IE9jdCAgNyAxNjo0MDozOCAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY29uZmlnL2kzODYvb3Nmcm9zZS5oIChPU0ZfUFJPRklMRV9CRUZPUkVfUFJPTE9HVUUpOiBOZXcgbWFjcm8KKwl0byBkZXRlcm1pbmUgd2hldGhlciBwcm9maWxpbmcgZ29lcyBiZWZvcmUgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlCisJb3IgYWZ0ZXIuICBOZXcgc3R5bGUgcHJvZmlsaW5nIGdvZXMgYmVmb3JlIGluIG9yZGVyIHRvIHNhdmUKKwlnZXR0aW5nIGFuZCBzYXZpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbGVycyBhZGRyZXNzIG9yIGhhdmUgbWNvdW50CisJJ2tub3cnIHRoZXJlIGlzIGEgZnJhbWUgcG9pbnRlci4gIE9sZCBzdHlsZSBwcm9maWxpbmcgdXNpbmcgbWNvdW50CisJYW5kIHNvbWUgRUxGIFBJQyBwcm9maWxpbmcgZ29lcyBhZnRlciB0aGUgcHJvbG9ndWUuCisJKEZVTkNUSU9OX1BST0xPR1VFKTogUmVkZWZpbmUgaW4gb3JkZXIgdG8gZ2V0IG5ldyBzdHlsZSBwcm9maWxpbmcKKwliZWZvcmUgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIGlmIGRlc2lyZWQuCisJKEZVTkNUSU9OX1BST0ZJTEVSKTogRG8gbm90IHB1dCBhIHByb2ZpbGUgY2FsbCBpZiBpdCBhbHJlYWR5IGhhcworCWJlZW4gcHV0IG91dCBpbiB0aGUgcHJvbG9ndWUuICBDaGFuZ2UgbmV3IHN0eWxlIHByb2ZpbGluZyB0byBjYWxsCisJdGhyb3VnaCBfbWNvdW50X3B0ciBpbnN0ZWFkIG9mIF9yZWFsX21jb3VudC4gIFByb3BpZ2F0ZSBST1NFIGJyYWluCisJZGFtYWdlIHJlZ2FyZGluZyBtY291bnQgYmVpbmcgaW4gdGhlIHVzZXJzIG5hbWUgc3BhY2UgdG8gRUxGLgorCShTVUJUQVJHRVRfU1dJVENIRVMpOiBNYWtlIC1tbWNvdW50IGRlZmF1bHQgYWdhaW4gaW5zdGVhZCBvZgorCS1tbm8tbW1jb3VudC4KKworCSogaTM4Ni5oIChGSU5BTElaRV9QSUMpOiBBZGQgbWFjcm8gdG8gc2V0IHRoZSB2YXJpYWJsZQorCWN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlIGlmIGVpdGhlciAtcCBvciAtYSBzd2l0Y2hlcworCWFyZSB1c2VkLgorCitUaHUgT2N0ICA3IDE3OjA3OjU3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogcnRsLmMgKGJ5dGVfbW9kZSwgd29yZF9tb2RlKTogTW92ZSB0byBlbWl0LXJ0bC5jLgorCShpbml0X3J0bCk6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgYnl0ZV9tb2RlIGFuZCB3b3JkX21vZGUgdG8KKwlpbml0X2VtaXRfb25jZS4KKwkqIGVtaXRfcnRsLmMgKGJ5dGVfbW9kZSwgd29yZF9tb2RlKTogTW92ZWQgZnJvbSBydGwuYy4KKwkoaW5pdF9lbWl0X29uY2UpOiBNb3ZlZCBpbiBpbml0aWFsaXphdGlvbiBvZiBieXRlc19tb2RlIGFuZAorCXdvcmRfbW9kZSBmcm9tIGluaXRfcnRsLgorCitUaHUgT2N0ICA3IDExOjExOjI1IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBjY2NwLmMgKHN0cnVjdCBmaWxlX25hbWVfbGlzdCk6IEFkZCBuZXcgZmllbGQgY19zeXN0ZW1faW5jbHVkZV9wYXRoLgorCSgqdmFyaW91cyopOiBTZXQgdGhpcyBmbGFnIGNvcnJlY3RseQorCShpc19zeXN0ZW1faW5jbHVkZSk6IFJldHVybiAyIGlmIEMtbGFuZ3VhZ2Ugc3lzdGVtIGluY2x1ZGUuCisJKG91dHB1dF9saW5lX2NvbW1hbmQpOiBPdXRwdXQgIiA0IiBhZnRlciAiIDMiIGZvciBDLWxhbmd1YWdlIHN5c3RlbQorCWluY2x1ZGUuCisKK1RodSBPY3QgIDcgMTQ6NDU6MjAgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGlyKTogRml4IHR5cG8uCisJKGluc3RhbGwtY29tbW9uKTogUmVtb3ZlIG9ic29sZXRlIGNvbW1lbnQuCisJKGluc3RhbGwtY29tbW9uKTogSW5zdGFsbCBuYXRpdmUgZysrIG9ubHkgaWYgbm90IGNyb3NzLiAKKworVGh1IE9jdCAgNyAxMToyNzo0NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsLCBlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6CisJQWxsb2NhdGUgYSB0ZW1wIHNsb3QgaWYgYXJnIG11c3QgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4KKworCSogZ2NjLmMgKHJlYWRfc3BlY3MpOiBGaXggY2FsbCB0byBiemVyby4KKworVGh1IE9jdCAgNyAwODo1Mzo1NyAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogYWxwaGEubWQ6IENsZWFuIHVwIHVzYWdlIG9mIGNvbW11dGF0aXZlIGRlY2xhcmF0b3IgYCUnLgorCitUaHUgT2N0ICA3IDA4OjE0OjQ2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGk4NjAveG0tZngyODAwLmggKEhBVkVfVlBSSU5URik6IEZpeCB0eXBvOyB3YXMgSEFWRV9WRlBSSU5URi4KKworCSogeG0tYWxwaGEuaDogQWx3YXlzIGRlY2xhcmUgbWFsbG9jLCByZWFsbG9jLCBldGMsIHRvIGJlIHZvaWQgKi4KKworCSogY29tYmluZS5jIChmb3JjZV90b19tb2RlKTogU2lnbi1leHRlbmQgY29uc3RhbnQgYmVpbmcgdHJ1bmNhdGVkLgorCitXZWQgT2N0ICA2IDE4OjUzOjQzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYmktbGV4ZXIuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBDYXN0IHRoZSByZXN1bHQgb2YgbWFsbG9jLCByZWFsbG9jLgorCitXZWQgT2N0ICA2IDE1OjMwOjM5IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWZpbmUgdG8gcGFzcyB0aGUgZnVuY3Rpb24KKwlhZGRyZXNzLCBpdHMgY2FsbGVyLCBhbmQgdGhlIHVuaXF1ZSBsYWJlbCBhZGRyZXNzIHRocm91Z2ggdGhlCisJX3JlYWxfbWNvdW50IHBvaW50ZXIsIHVubGVzcyAtbW1jb3VudCBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIHVzZQorCXRoZSBvbGQgY2FsbGluZyBzZXF1ZW5jZS4KKwkoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tbWNvdW50LCAtbW5vLW1jb3VudCBzdXBwb3J0LgorCitXZWQgT2N0ICA2IDE1OjI5OjQwIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBQYXNzIG9uIGluZm9ybWF0aW9uIGFib3V0IHRoZQorCW51bWJlciBvZiBjYWxsZWUgc2F2ZWQgZ2VuZXJhbCBhbmQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHdoaWNoCisJYXJlIHNhdmVkIGJ5IHRoZSBjdXJyZW50IGZ1bmN0aW9uJ3MgcHJvbG9ndWUuCisJKGhwcGFfZXhwYW5kX3Byb2xvZ3VlKTogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGNhbGxlZQorCXJlZ2lzdGVyIHNhdmVzIGRvbmUgZm9yIGdlbmVyYWwgYW5kIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4KKworV2VkIE9jdCAgNiAxMzo1MDowMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGNleHAueSAoTUFYX0NIQVJfVFlQRV9TSVpFLCBNQVhfSU5UX1RZUEVfU0laRSwKKwlNQVhfTE9OR19UWVBFX1NJWkUsIE1BWF9XQ0hBUl9UWVBFX1NJWkUpOiBEZWZpbmUuCisJKHl5bGV4KTogVXNlIHRoZW0gaW5zdGVhZCBvZiB0aGUgbm9uLU1BWCB2ZXJzaW9ucywgdG8gYXZvaWQKKwlkZXBlbmRlbmNpZXMgb24gdGFyZ2V0X2ZsYWdzLgorCitXZWQgT2N0ICA2IDEzOjQ3OjEzIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IE5ldyB2YXJpYWJsZSBpM19zdWJzdF9pbnRvX2kyLgorCVNldCBpdCBmb3Igc3BlY2lhbCBjYXNlIG9mIHN1YnN0aXR1dGluZyBpMyBpbnRvIGkyLiAgVXNlIGl0IG5lYXIKKwllbmQgdG8gZGV0ZWN0IHdoZW4gc3BlY2lhbCBjYXNlIHN1Y2NlZWRlZC4gIE1vdmUgaTJub3RlcyB0bworCWkzbm90ZXMgZm9yIHRoaXMgc3BlY2lhbCBjYXNlLgorCShkaXN0cmlidXRlX25vdGVzLCBSRUdfVU5VU0VEIGNhc2UpOiBJZ25vcmUgYWxsIFJFR19VTlVTRUQgbm90ZXMKKwlleGNlcHQgdGhvc2UgZnJvbSBJMy4KKworV2VkIE9jdCAgNiAxMzoxNDoxMyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IFdoZW4gbWFraW5nIGEgQ09OU1RSVUNUT1IsIHByb3ZpZGUKKwl0aGUgZHVtbXkgZmlyc3Qgb3BlcmFuZC4KKworCSogcmVhbC5jIChyZWFsX3ZhbHVlX3RydW5jYXRlKTogQ29ycmVjdCBldHJ1bmNpIGFyZ3VtZW50CisJaW4gY2FzZSBTSW1vZGUuCisKK1dlZCBPY3QgIDYgMDY6NTU6MDUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZmluYWwuYyAoYXNtX2ZwcmludGYpOiBBZGQgY2FzZXMgZm9yICd3JyBhbmQgJ2wnLgorCisJKiBNYWtlZmlsZS5pbiAoYmktb3Bjb2RlLm8pOiBJbmNsdWRlcyBoY29uZmlnLmguCisJKiBiaS1sZXhlci5jOiBSZW1vdmUgZGVjbGFyYXRpb25zIG9mIG1hbGxvYyBhbmQgcmVhbGxvYy4KKwkqIGJpLW9wY29kZS5jOiBJbmNsdWRlIGhjb25maWcuaC4KKwkqIGJpLXBhcnNlci55OiBSZW1vdmUgZGVjbGFyYXRpb24gb2YgbWFsbG9jLgorCisJKiByZWdjbGFzcy5jIChyZWNvcmRfcmVnX2NsYXNzZXMpOiBDaGVjayBpZiBvcGVyYW5kcyBhcmUgdGhlIHNhbWUKKwlieSBzZWVpbmcgaWYgdGhleSBhcmUgdGhlIHNhbWUgcmVnaXN0ZXIuCisKKwkqIGNzZS5jIChyZWNvcmRfanVtcF9jb25kKTogUmVoYXNoIE9QMSBpZiBPUDAncyBpbnNlcnRfcmVncyByZXR1cm5zCisJbm9uemVyby4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBBZGQgeWV0IGFub3RoZXIgYXNzaWdubWVudCB0byBNRU1fSU5fU1RSVUNUX1AuCisKK1dlZCBPY3QgIDYgMDA6MDg6MjggMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBzcGFyYy5jICh1bnNfc21hbGxfaW50LCB1bnNfYXJpdGhfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbnMuCisJKiBzcGFyYy5tZCAodW11bHNpZGkzKTogVXNlIHVuc19hcml0aF9vcGVyYW5kIG5vdCBhcml0aF9vcGVyYW5kLgorCShjb25zdF91bXVsc2lkaTMpOiBVc2UgdW5zX3NtYWxsX2ludCBub3Qgc21hbGxfaW50LgorCisJKiBzcGFyYy5oIChTRUxFQ1RfQ0NfTU9ERSk6IEFkZCBzdXBwb3J0IGZvciBBU0hJRlQuCisJKiBzcGFyYy5tZCAoYXNobHNpMysxLCBhc2hsc2kzKzIpOiBOZXcgcGF0dGVybnMgdG8gcmVwbGFjZSBzaGlmdAorCWFuZCBjb21wYXJlIHdpdGggYWRkY2MuCisKK1R1ZSBPY3QgIDUgMTY6MjU6MzIgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplXzIpOiBNYWtlIHZvbGF0aWxlIGFzbXMgZGVwZW5kIG9uIGFsbAorCXBzZXVkbyByZWdpc3RlcnMuCisKKwkqIG1pcHMuYyAobWlwc19leHBhbmRfcHJvbG9ndWUpOiBIYW5kbGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZXMgYXMKKwl0aGUgZmlyc3QgYXJndW1lbnQgaWYgbmVjZXNzYXJ5LgorCisJKiBtaXBzLmggKENMQVNTX01BWF9OUkVHUyk6IEZvciBERm1vZGUgYW5kICFUQVJHRVRfRkxPQVQ2NCBjYXNlLAorCXJldHVybiAyIG5vdCA0LgorCShDTEFTU19VTklUUyk6IFRha2Ugc2l6ZSBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBudW0gKHdvcmRzKS4KKworCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCk6IFdoZW4gdHJ5IHRvIGNvcHkgRklFTEQgaWYgaXQKKwlpcyBhbiBpbnRlcmdlciBjb25zdGFudCwgZmlyc3QgY2hlY2sgdG8gbWFrZSBzdXJlIGl0IGlzIG5vbnplcm8uCisKKwkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogV2hlbiB0YWtlIGluc24gZnJvbSBhCisJZm9sbG93aW5nIHVuY29uZGl0aW9uYWwgYnJhbmNoIHRhcmdldCwgaWYgbmV3X2xhYmVsIGlzIHplcm8sIG11c3QKKwlzZXQgaXQgdG8gdGhlIHJlc3VsdCBvZiBmaW5kX2VuZF9sYWJlbCAoKS4KKworCSogaXJpczMuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FLCBUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUpOgorCURlbGV0ZS4KKwkqIG1pcHMuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRGVsZXRlICNpZm5kZWYvI2VuZGlmLiAgQ2hhbmdlCisJZnVuY3Rpb24gbmFtZSBmcm9tIF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2sgdG8gX19nY2NfZmx1c2hfY2FjaGUuCisJKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IExpa2V3aXNlLiAgRGVsZXRlIGNvZGUgY2FsbGluZworCW1wcm90ZWN0LiAgVW5jb21tZW50IGNvZGUgY2FsbGluZyBjYWNoZWZsdXNoLgorCitUdWUgT2N0ICA1IDE2OjExOjUzIDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiB0b3BsZXYuYyAoZXJyb3IgYW5kIGl0cyBraW4pOiBVc2UgI2RlZmluZXMgZm9yIHRoZSBhcmd1bWVudAorCWxpc3RzIGZvciBlYXNlIG9mIGFkZGluZyBhcmd1bWVudHMgYW5kIGFkZCBvbmUgYXJnLgorCitUdWUgT2N0ICA1IDE2OjA1OjExIDE5OTMgIFRvciBFZ2dlICAodGVnZ2VAcHZ2LnVuaXQubm8pCisKKwkqIGNjY3AuYyAocmVzY2FuKTogRG9uJ3QgZXhwYW5kIGFuIGlkZW50aWZpZXIgYWZ0ZXIgYSAnIycuCisKK1R1ZSBPY3QgIDUgMTU6MTU6NTIgMTk5MyAgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwlNb3ZlIGZvcm1hdCB3YXJuaW5nIGNvZGUgdG8gYy1jb21tb24uYyBmb3IgdXNlIHdpdGggQysrLgorCSogYy10cmVlLmggKGluaXRfZnVuY3Rpb25fZm9ybWF0X2luZm8sIHJlY29yZF9mdW5jdGlvbl9mb3JtYXQsCisJY2hlY2tfZnVuY3Rpb25fZm9ybWF0KTogRGVjbGFyZS4KKwkqIGMtY29tbW9uLmM6IEluY2x1ZGUgPGN0eXBlLmg+OyBhdm9pZCBob21lLWdyb3duIElTRElHSVQuCisJKGRlY2xfYXR0cmlidXRlcyk6IENhbGwgcmVjb3JkX2Z1bmN0aW9uX2Zvcm1hdCB3aXRoIERFQ0xfTkFNRQorCWFuZCBhbHNvIERFQ0xfQVNTRU1CTEVSX05BTUUuCisJKHN0cnVjdCBmb3JtYXRfY2hhcl9pbmZvKTogTW92ZWQgaGVyZSBmcm9tIGMtdHlwZWNrLmMuCisJKHByaW50X2NoYXJfdGFibGUpOiBMaWtld2lzZTsgcmVuYW1lZCBmcm9tIHByaW50X3RhYmxlLgorCShzY2FuX2NoYXJfdGFibGUpOiBMaWtld2lzZTsgcmVuYW1lZCBmcm9tIHNjYW5fdGFibGUuCisJKHN0cnVjdCBmdW5jdGlvbl9mb3JtYXRfaW5mbyk6IExpa2V3aXNlOyBhZGQgYXNzZW1ibGVyX25hbWUuCisJKGZ1bmN0aW9uX2Zvcm1hdF9saXN0KTogTWFrZSBsaXN0LCBub3QgYXJyYXkuCisJKGluaXRfZnVuY3Rpb25fZm9ybWF0X2luZm8pOiBMaWtld2lzZTsgcmVuYW1lZCBmcm9tCisJaW5pdF9mb3JtYXRfaW5mb190YWJsZS4KKwkocmVjb3JkX2Z1bmN0aW9uX2Zvcm1hdCk6IExpa2V3aXNlOyByZW5hbWVkIGZyb20KKwlyZWNvcmRfZm9ybWF0X2luZm87IHJlY29yZCBhc3NlbWJsZXJfbmFtZS4KKwkoY2hlY2tfZm9ybWF0X2luZm8pOiBMaWtld2lzZTsgcmVuYW1lZCBmcm9tIGNoZWNrX2Zvcm1hdC4KKwkoY2hlY2tfZnVuY3Rpb25fZm9ybWF0KTogTmV3IGludGVyZmFjZSB0aGF0IGRvZXMgbm90IHJlcXVpcmUKKwlrbm93bGVkZ2Ugb2Ygc3RydWN0IGZ1bmN0aW9uX2Zvcm1hdF9pbmZvLgorCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBpbml0X2Z1bmN0aW9uX2Zvcm1hdF9pbmZvLgorCSogYy10eXBlY2suYyAoc3RydWN0IGZvcm1hdF9jaGFyX2luZm8sIHByaW50X3RhYmxlLCBzY2FuX3RhYmxlLAorCXN0cnVjdCBmdW5jdGlvbl9pbmZvLCBmdW5jdGlvbl9pbmZvX2VudHJpZXMsIGZ1bmN0aW9uX2luZm9fdGFibGUsCisJcmVjb3JkX2Zvcm1hdF9pbmZvLCBpbml0X2Zvcm1hdF9pbmZvX3RhYmxlLCBjaGVja19mb3JtYXQpOiBNb3ZlZAorCXRvIGMtY29tbW9uLmMuCisJKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBDYWxsIGNoZWNrX2Z1bmN0aW9uX2Zvcm1hdC4KKworVHVlIE9jdCAgNSAxNDowODoxOCAxOTkzICBXb2xmZ2FuZyBTdHVrZW5icm9jayAod2dzdHVrZW5AaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGUpCisKKwkqIGdjYy5jIChjaG9vc2VfdGVtcF9iYXNlKTogQ29ycmVjdCBzaXplIGFsbG9jYXRlZCBmb3IgdGVtcF9maWxlbmFtZS4KKworVHVlIE9jdCAgNSAwNjozNDozNCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKGNvbnRhaW5zX3BsYWNlaG9sZGVyX3ApOiBSZXR1cm4gMCBmb3IgQ09OU1RSVUNUT1IuCisJKHN1YnN0aXR1dGVfaW5fZXhwcik6IERvbid0IGFsbG93IENPTlNUUlVDVE9SLgorCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSwgY2FzZSAnZCcpOiBSZWZpbmUgaW4gd2hpY2ggb2JzdGFjaworCVBBUk1fREVDTHMgYXJlIGFsbG9jYXRlZC4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBQcm9wZXJseSB0ZXN0IGlmIHdlIG5lZWQgdG8gcHJvbW90ZQorCW9wZXJhbmQ7IHVzZSBjb252ZXJ0X21vZGVzIGluc3RlYWQgb2YgY29udmVydF90b19tb2RlLgorCSogZXhwci5jIChjb252ZXJ0X21vZGVzKTogUHJvcGVybHkgaGFuZGxlIGV4dGVuZGluZyBjb25zdGFudHMKKwlzaW5jZSB3ZSBtaWdodCBiZSBjaGFuZ2luZyBzaWduZWRuZXNzLgorCisJKiBnY2MuYyAocmVhZF9zcGVjcyk6IE1ha2UgYSBudWxsIGVudHJ5IGF0IGVuZCBvZiBgY29tcGlsZXJzJworCXdoZW4gcmVhZGluZyBuZXcgZW50cnkgZnJvbSBmaWxlLgorCisJKiB0cmVlLmMgKGNvbnRhaW5zX3BsYWNlaG9sZGVyKTogUmV0dXJuIDAgZm9yIFdJVEhfUkVDT1JEX0VYUFIuCisKKwkqIGJpLWFyaXR5LmMsIGJpLWxleGVyLmMsIGJpLW9wbmFtZS5jLCBiaS1wYXJzZXIueTogSW5jbHVkZSBoY29uZmlnLmguCisJKiBNYWtlZmlsZS5pbiAoYmktYXJpdHkubywgYmktbGV4ZXIubywgYmktb3BuYW1lLm8sIGJpLXBhcnNlci5vKToKKwlMaWtld2lzZS4KKworCSogYmMtZW1pdC5jIChkY29uc3RbMDEyXSwgZGNvbnN0bTEpOiBSZW1vdmUgcmVkdW5kYW50IGRlZmluaXRpb24uCisKK1R1ZSBPY3QgIDUgMDY6MjQ6NDMgMTk5MyAgTGlzYSBSZXBrYSAgKGxpc2FATWljcm9Vbml0eS5jb20pCisKKwkqIHZhcmFzbS5jIChkZWNvZGVfcnR4X2NvbnN0LCBjYXNlIENPTlNUX0RPVUJMRSk6IE9ubHkgdXNlIG1vZGUKKwlvZiBYIGlmIGl0IGlzIG5vdCBWT0lEbW9kZS4KKworVHVlIE9jdCAgNSAwMDo0NTozMCAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXNAYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYvaTM4Ni5jIChvdXRwdXRfdG9fcmVnKTogSGFuZGxlIFhGbW9kZSB3cml0ZSB0byBNRU0gYnkKKwlyZWFkaW5nIGJhY2sgdmFsdWUgYWZ0ZXIgd3JpdGUgaWYgc291cmNlIGRvZXNuJ3QgZGllLgorCSogaTM4Ni9pMzg2Lm1kIChwdXNoeGYsbW92eGYsZXh0ZW5kZGZ4ZjIsZXh0ZW5kc2Z4ZjIpOiBMaWtld2lzZS4KKworCSogaTM4Ni9pMzg2Lm1kIChtb3Z4ZixleHRlbmRkZnhmMixleHRlbmRzZnhmMik6IERvbid0IGVtaXQgZmxkCisJYmVmb3JlIGNhbGxpbmcgb3V0cHV0X3RvX3JlZzogb3V0cHV0X3RvX3JlZyBkb2VzIHRoYXQgbm93LgorCisJKiBpMzg2L2kzODYuaCAoRklYRURfUkVHSVNURVJTKTogRG9uJ3QgZml4IGhhcmQgcmVnIHN0NyBpZiBYRm1vZGUKKwlpcyBlbmFibGVkLgorCisJKiByZWctc3RhY2suYyAobW92ZV9mb3Jfc3RhY2tfcmVnKTogSWYgdGhlIDM4NyByZWdzdGFjayBpcyBub3QKKwlmdWxsIHdoZW4gZG9pbmcgYW4gWEZtb2RlIHdyaXRlIGZyb20gMzg3IHRvIE1FTSwgY29weSB0aGUgc291cmNlCisJcmVnIGFuZCB3cml0ZSB0aGUgY29weS4KKworTW9uIE9jdCAgNCAxODo0MDo1MSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IFRoZXJlIGlzIG5vIGFsdF9jb3N0CisJZm9yIGEgcGFpciBvZiBtYXRjaGluZyBhcmdzIGlmIHRoZXkgYXJlIHRoZSBzYW1lIHBzZXVkbyByZWcuCisKKwkqIHZhcmFzbS5jIChiY19vdXRwdXRfYXNjaWkpOiBOZXcgZnVuY3Rpb24uCisJKGFzc2VtYmxlX3N0cmluZyk6IFVzZSBpdC4KKwkoYXNzZW1ibGVfc3RhdGljX3NwYWNlLCBhc3NlbWJsZV92YXJpYWJsZSk6IFB1dCBicmFjZXMgYXJvdW5kIHVzZXMKKwlvZiBCQ19PVVRQVVRfQ09NTU9OIGFuZCBCQ19PVVRQVVRfTE9DQUwuCisKK01vbiBPY3QgIDQgMTg6MDM6MDQgMTk5MyAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIGV4cHIuYyAoYmNfaW5pdF9tb2RlX3RvX29wY29kZV9tYXBzLCBiY19leHBhbmRfZXhwcik6IENhc3QgZW51bQorCWFycmF5IGluZGljZXMgdG8gaW50LgorCShiY19sb2FkX21lbW9yeSwgYmNfc3RvcmVfbWVtb3J5KTogTGlrZXdpc2UuCisJKGJjX3J1bnRpbWVfdHlwZV9jb2RlKTogQ2FzdCBlbnVtIGxvZ2ljYWwgb3BlcmFuZCB0byBpbnQuCisJKiBiYy1lbWl0LmMgKGJjX2VtaXRfYnl0ZWNvZGUpOiBDYXN0IGVudW0gYXJyYXkgaW5kaWNlcyB0byBpbnQuCisJKiBiYy1vcHRhYi5jIChkZWR1Y2VfY29udmVyc2lvbiwgZW1pdF90eXBlY29kZV9jb252ZXJzaW9uKTogTGlrZXdpc2UuCisJKGJjX2luaXRfbW9kZV90b19jb2RlX21hcCwgcHJlZmVycmVkX3R5cGVjb2RlKTogTGlrZXdpc2UuCisJKGJjX2V4cGFuZF9iaW5hcnlfb3BlcmF0aW9uLCBiY19leHBhbmRfdW5hcnlfb3BlcmF0aW9uKTogTGlrZXdpc2UuCisJKGJjX2V4cGFuZF9pbmNyZW1lbnQpOiBMaWtld2lzZS4KKwkqIGJjLXR5cGVjZC5oOiBDYXN0IGVudW0gYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBvcGVyYW5kcyB0byBpbnQuCisKK01vbiBPY3QgIDQgMDU6NTI6MjEgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYTI5ay5jIChpbmNvbWluZ19yZWdzKTogT25seSB1c2UgMTYgcmVnaXN0ZXJzIGZvciBwYXJhbWV0ZXIKKwlwYXNzaW5nLgorCisJKiB0cmVlLmMgKGJ1aWxkX3N0cmluZyk6IFJlbW92ZSBwcmV2aW91cyBjaGFuZ2UgYW5kIGNvbW1lbnQgd2h5CisJc3RyaW5nIHRleHQgaGFzIHRvIGJlIGluIHNhdmVhYmxlX29ic3RhY2suCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X2RlZik6IFJlbW92ZSBsYXN0IGNoYW5nZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKworU3VuIE9jdCAgMyAxODo1MToxOSAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXNAYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYvaTM4Ni5jIChvdXRwdXRfb3BfZnJvbV9yZWcpOiAgSGFuZGxlIDMtd29yZCBYRm1vZGUgdmFsdWVzLgorCShvdXRwdXRfdG9fcmVnKTogTGlrZXdpc2UuCisJKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEhhbmRsZSBYRm1vZGUgb3BlcmFuZHMuCisJKG91dHB1dF9tb3ZlX2NvbnN0X3NpbmdsZSk6IFVzZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUuCisJKHByaW50X29wZXJhbmQpOiBBZGQgbGV0dGVyIGBUJywgc2l6ZSBgMTInLiAgVXNlIFJFQUxfVkFMVUUKKwltYWNyb3MgdG8gY29udmVydCBmbG9hdGluZyBwb2ludCBvcGVyYW5kcy4KKwkoY29udmVydF8zODdfb3ApOiAgQWRkIFhGbW9kZSB0byBjYXNlIEZMT0FUX0VYVEVORC4KKworCSogaTM4Ni9pMzg2LmggKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IERlZmluZSBhcyA5Ni4KKwkoRklYRURfUkVHSVNURVJTKTogSWYgWEZtb2RlIGVuYWJsZWQsIGhhcmQgcmVnIHN0NyBpcyBmaXhlZC4KKwkoQVNNX09VVFBVVF9ET1VCTEUpOiBVc2UgUkVBTF9WQUxVRV8uLi4gbWFjcm9zLgorCShBU01fT1VUUFVUX0ZMT0FUKTogTGlrZXdpc2UuCisJKEFTTV9PVVRQVVRfTE9OR19ET1VCTEUpOiBOZXcgbWFjcm8uCisJKFBSSU5UX1JFRyk6ICBBZGQgc2l6ZSBjYXNlIDEyLgorCShERUJVR19QUklOVF9SRUcpOiAgTGlrZXdpc2UuCisKKwkqIGkzODYvaTM4Ni5tZDogKHRzdHhmX2NjLCB0c3R4ZiwgY21weGYsIGNtcHhmX2NjLCBjbXB4Zl9jY2ZwZXEsCisJc3dhcHhmLCBtb3Z4ZiwgZXh0ZW5kZGZ4ZjIsIGV4dGVuZHNmeGYyLCB0cnVuY3hmc2YyLCB0cnVuY3hmZGYyLAorCWZpeHVuc190cnVuY3hmc2kyLCBmaXhfdHJ1bmN4ZmRpMiwgZml4X3RydW5jeGZzaTIsIGZsb2F0c2l4ZjIsCisJZmxvYXRkaXhmMiwgYWRkeGYzLCBzdWJ4ZjMsIG11bHhmMywgZGl2eGYzLCBuZWd4ZjIsIGFic3hmMiwKKwlzcXJ0eGYyKTogTmV3IHBhdHRlcm5zLgorCisJKiBpMzg2L25leHQuaCxpMzg2L29zZnJvc2UuaCxpMzg2L3N5c3Y0LmgKKwkoQVNNX09VVFBVVF9ET1VCTEUsQVNNX09VVFBVVF9GTE9BVCk6IFVzZSBSRUFMX1ZBTFVFXyBtYWNyb3MuCisJKEFTTV9PVVRQVVRfTE9OR19ET1VCTEUpOiBOZXcgbWFjcm8uCisKKwkqIGkzODYvYnNkLmgsaTM4Ni9zY280LmggKEFTTV9PVVRQVVRfRE9VQkxFKTogRGVsZXRlZCwKKwl1c2UgZGVmYXVsdCB2ZXJzaW9uLgorCisJKiBpMzg2L25leHQuaCxpMzg2L3Njby5oIChWQUxVRV9SRUdOTyk6IEFkZCBjYXNlIFhGbW9kZS4KKworU3VuIE9jdCAgMyAxNjozNTowNSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChyZWFkX2ZpbGUpOiBGaXggdHlwbyBpbiBwcm90b3R5cGUuCisKK1N1biBPY3QgIDMgMTg6MzI6NDYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoYnl0ZWNvZGUucmVhbGNsZWFuKTogRG9uJ3QgZGVsZXRlIGJpLWxleGVyLmMuCisKK1N1biBPY3QgIDMgMTk6NDU6MDIgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogQWRkIHJ1bGVzIGZvciBBZGEuCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIHRlbXBvcmFyeSBwYXJhbWV0ZXIgImduYXQiLgorCisJKiB0cmVlLmMgKHN0YXRpY3ApOiBERUNMX0VYVEVSTkFMIGlzIG5vdCBkZWZpbmVkIGZvciBDT05TVFJVQ1RPUi4KKworCSogdHJlZS5kZWYgKFBMQUNFSE9MREVSX0VYUFIsIFdJVEhfUkVDT1JEX0VYUFIpOiBOZXcgdHJlZSBjb2Rlcy4KKwkqIHRyZWUuYyAoc2F2ZV9leHByKTogRG9uJ3QgZXZhbHVhdGUgc29tZXRoaW5nIGNvbnRhaW5pbmcgYSAKKwlQTEFDRUhPTERFUl9FWFBSLgorCShjb250YWluc19wbGFjZWhvbGRlcl9wLCBzdWJzdGl0dXRlX2luX3tleHByLHR5cGV9KTogTmV3IGZ1bmN0aW9ucy4KKwkqIHRyZWUuaDogQWRkIGRlY2xhcmF0aW9ucyBmb3IgbmV3IGZ1bmN0aW9ucy4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogUGFzcyBvYmplY3RzIHdobyBzaXplIGRlcGVuZHMgb24gdGhlCisJY29udGVudHMgb2YgdGhlIG9iamVjdCBieSBpbnZpc2libGUgcmVmZXJlbmNlLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogTGlrZXdpc2UuCisJKiBleHBsb3cuYyAoZXhwcl9zaXplKTogSWYgdGhlIHNpemUgY29udGFpbnMgYSBQTEFDRUhPTERFUl9FWFBSLAorCXN1cnJvdW5kIGl0IHdpdGggYSBXSVRIX1JFQ09SRF9FWFBSLgorCSogZXhwci5jIChzdG9yZV9leHByKTogVXNlIGV4cHJfc2l6ZSB2YWx1ZSwgbm90IHNpemVfaW50LgorCShzdG9yZV9jb25zdHJ1Y3Rvcik6IEhhbmRsZSBjYXNlIG9mIHZhcmlhYmxlIHBvc2l0aW9uIGFuZCBhbGxvdworCWl0IHRvIGNvbnRhaW4gYSBQTEFDRUhPTERFUl9FWFBSLgorCShnZXRfaW5uZXJfcmVmZXJlbmNlKTogTWFrZSBhIFdJVEhfUkVDT1JEX0VYUFIgaWYgcmVxdWlyZWQuCisJKGV4cGFuZF9leHByLCBjYXNlIFBMQUNFSE9MREVSX0VYUFIsIFdJVEhfUkVDT1JEX0VYUFIpOiBOZXcgY2FzZXMuCisJKGV4cGFuZF9leHByLCBjYXNlIEFSUkFZX1JFRik6IE1ha2UgV0lUSF9SRUNPUkRfRVhQUiBleHByZXNzaW9ucworCXdoZW4gbmVlZGVkLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFNldCBNRU1fSU5fU1RSVUNUX1AgaW4gc3RhY2sgc2xvdCBpZgorCWFwcHJvcHJpYXRlLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X2RlZik6IENvcHkgc3RyaW5nIGFzIHdlbGwgYXMgc3RyaW5nCisJbm9kZSB3aGVuIGRlZmVycmluZyBvdXRwdXQgb2YgY29uc3RhbnRzLgorCisJKiBjb25maWd1cmUgKGkzNzAtKik6IFJlbmFtZWQgdG0tbXZzLmggdG8gbXZzLmguCisJKiBjb25maWcvaTM3MC9tdnMuaDogUmVuYW1lZCBmcm9tIHRtLW12cy5oLgorCitTdW4gT2N0ICAzIDEyOjUwOjU3IDE5OTMgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogYXJtLmggKGZ1bmN0aW9uIGRlZmluaXRpb25zKTogQWRkIG5ldyBmdW5jdGlvbnMgZGVmaW5pdGlvbnMuCisJKGFybV9jb25kaXRpb25fY29kZXMpOiBtYWtlIHRoaXMgZXh0ZXJuYWxseSB2aXNpYmxlLgorCShTVEFSVEZJTEVfU1BFQyk6IE1vdmUgdG8gcmlzY2l4LmggYW5kIHJpc2NpeDEtMS5oLgorCShDUFBfUFJFREVGSU5FUyk6IE1vdmUgb2xkIGRlZm4gdG8gcmlzY2l4LmggYW5kIHJpc2NpeDEtMS5oLCBhZGQKKwlnZW5lcmFpYyBkZWZhdWx0IGRlZmluaXRpb24uCisJKENQUF9TUEVDKTogRGVmaW5lIGZvciBnZW5lcmljIGltcGxlbWVudGF0aW9uLCBwYXNzIGNwdSB2YXJpYW50IAorCWRlZm4gdG8gcHJlLXByb2Nlc3Nvci4KKwkoVEFSR0VUX1ZFUlNJT04pOiBJbmRpY2F0ZSB0aGlzIGlzIGdlbmVyaWMgdmFyaWFudC4KKwkoVEFSR0VUXzYpOiBOZXcgbWFjcm8sIHNldCB3aGVuIGNvbXBpbGluZyBmb3IgYXJtNiBpbiAzMmJpdCBtb2RlLgorCShBUk1fRVhUUkFfVEFSR0VUX1NXSVRDSEVTKTogTmV3IG1hY3JvLCBob29rIGZvciBvcyBkZXBlbmRlbnQgZmlsZXMKKwl0byBtYWtlIGFkZGl0aW9ucyB0byBUQVJHRVRfU1dJVENIRVMuIERlZmF1bHQgdG8gbnVsbC4KKwkocHJvY2Vzc29yX3R5cGUpOiBuZXcgZW51bSB0eXBlIGRlZmluaW5nIHByb2Nlc3NvciB2YXJpYW50IGZvcgorCWF0dHJpYnV0ZXMuCisJKGFybV9jcHVfYXR0cik6IE1hY3JvIHRvIGdldCBhdCBjcHUgdHlwZSBmcm9tIGF0dHJpYnV0ZXMuCisJKFRBUkdFVF9XSEVOX0RFQlVHR0lORyk6IHJlbW92ZSBub24tZ2VuZXJpYyBkZWZpbml0aW9ucworCShPVkVSUklERV9PUFRJT05TKTogU2V0IHByb2Nlc3NvciB0eXBlIGZvciBhdHRyaWJ1dGVzLgorCShPUFRJTUlaRV9PUFRJT05TKTogU2V0IGZsYWdfZm9yY2VfbWVtLgorCShQUk9NT1RFX01PREUpOiBQcm9tb3RlIGJ5dGUgY29uc3RhbnRzIHVuc2lnbmVkLgorCShFTkFCTEVfWEZfUEFUVEVSTlMpOiBEZWZpbmUsIGRvIG5vdCBlbmFibGUgWEZtb2RlIGluc25zIGJ5IGRlZmF1bHQKKwktLSBpdCB0ZW5kcyB0byBjcmFzaCByaXNjaXguCisJKFJFQUxfQVJJVEhNRVRJQyk6IERlZmluZS4KKwkoQ09OU1RBTlRfQUxJR05NRU5UKTogQWxpZ24gc3RyaW5nIGNvbnN0YW50cyBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MKKwl0aGVtIGZhc3Rlci4KKwkoVEFSR0VUX0ZMT0FUX0ZPUk1BVCk6IElzIElFRUVfRkxPQVRfRk9STUFULgorCShGSVJTVF9QU0VVRE9fUkVHSVNURVIpOiBJbmNyZWFzZSB0byBzdXBwb3J0IGZha2UgcmVnaXN0ZXJzLgorCShGSVhFRF9SRUdJU1RFUlMpOiBEZXNjcmliZSBiZWhhdmlvdXJzIG9mIGZha2UgcmVncy4KKwkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IExpa2V3aXNlLgorCShIQVJEX1JFR05PX05SRUdTKTogRGVhbCB3aXRoIGZha2UgZnJhbWUgYW5kIGFyZ3VtZW50IHJlZ2lzdGVycy4KKwkoSEFSRF9SRUdOT19NT0RFX09LKTogTGlrZXdpc2UuCisJKEZSQU1FX1BPSU5URVJfUkVHTlVNKTogTWFrZSB0aGlzIGEgZmFrZSByZWdpc3RlcikKKwkoSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSk6IERlZmluZS4gc2V0IHRvIHJlZyAxMSAoZnApLgorCShGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKTogSXQgaXMgaWYgVEFSR0VUX0FQQ1MuCisJKEFSR19QT0lOVEVSX1JFR05VTSk6IFNldCB0byBuZXcgZmFrZSByZWdpc3Rlci4KKwkoQ0NfUkVHTlVNKTogRGVmaW5lLCBzZXQgdG8gZmFrZSByZWdpc3Rlci4KKwkoUkVHX0FMTE9DX09SREVSKTogQWRqdXN0IHRvIGdldCBiZXR0ZXIgYWxsb2NhdGlvbiBpbiBzbWFsbCBmdW5jdGlvbnMuCisJQWRkIGZha2UgcmVnaXN0ZXJzLgorCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBBZGQgbmV3IGZha2VzLgorCShSRUdOT19SRUdfQ0xBU1MpOiBMaWtld2lzZS4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQWRkIHJlY29nbml0aW9uIGZvciBuZWdhdGVkIGFuZCBpbnZlcnRlZCAKKwljb25zdGFudCBpbnRlZ2Vycy4KKwkoRVhUUkFfQ09OU1RSQUlOVCk6IEFkZCAnUScgdG8gcmVjb2duaXplIE1FTSAoUkVHKS4gQWRkICdTJyBmb3IKKwlzeW1ib2xzIGluIHRoZSB0ZXh0IHNlZ21lbnQuCisJKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBBZGQgJ0gnIGZvciBuZWdhdGVkIGZwIGNvbnN0YW50cy4KKwkoU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBEZWZpbmUuIE5lZWRlZCB0byBzdG9yZSBERm1vZGUgaGVsZAorCWluIFNJbW9kZSByZWdzLgorCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBNYWtlIHRoaXMgbW9yZSBleHBlbnNpdmUgdGhhbiBtZW1vcnkgZm9yCisJZmxvYXQ8LT5pbnQgbW92ZXMuCisJKFVTRV9SRVRVUk5fSU5TTik6IERlZmluZSwgY2FsbCBmdW5jdGlvbi4KKwkoRUxJTUlOQUJMRV9SRUdTKTogRGVmaW5lIHRvIGVsaW1pbmF0ZSBmYWtlIHJlZ3MuCisJKENBTl9FTElNSU5BVEUpOiBMaWtld2lzZS4KKwkoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBMaWtld2lzZS4KKwkoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IERlbGV0ZS4KKwkoUkVHTk9fT0tfRk9SX0JBU0VfUCk6IEFkZCBmYWtlIHJlZ3MuCisJKE1BWF9SRUdTX1BFUl9BRERSRVNTKTogSXMgb25seSAyOyBzaGlmdGluZyBieSByZWcgbm90IGFsbG93ZWQgaW4gYWRkci4KKwkoQ09OU1RBTlRfQUREUkVTU19QKTogQWNjZXB0IGFkZHJlc3NlcyB3aXRoIHRoZSBzeW1ib2xfcmVmIGZsYWcgc2V0LgorCShMRUdJVElNQVRFX0NPTlNUQU5UKTogQWNjZXB0IG5lZ2F0ZWQgZmxvYXRzOyBhbHNvIGNvbnN0YW50IGFkZHJlc3Nlcy4KKwkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IE1hcmsgc3RyaW5ncyB0aGF0IHdpbGwgZ28gaW4gdGhlIHRleHQgc2VnbWVudAorCXdpdGggdGhlIHN5bWJvbF9yZWYgZmxhZy4KKwkoUkVHX09LX0ZPUl9CQVNFX1AgWyFSRUdfT0tfU1RSSUNUXSk6IEFkZCBuZXcgZmFrZXMuCisJKFJFR19PS19GT1JfUFJFX1BPU1RfUCBbIVJFR19PS19TVFJJQ1RdKTogTGlrZXdpc2UuCisJKFJFR19PS19GT1JfUFJFX1BPU1RfUCBbUkVHX09LX1NUUklDVF0pOiBMaWtld2lzZS4KKwkoR09fSUZfTEVHSVRJTUFURV9JTkRFWCk6IGNvbnN0YW50IEZMT0FUIGluZGljZWVzIG11c3QgYmUgd29yZAorCWFsaWduZWQ7IGJlIG1vcmUgcmVzdHJpY3RpdmUgYWJvdXQgbXVsdGktcmVnIGludHM7IGFsbG93IGFsbCBsZWdhbAorCXNoaWZ0IG9wZXJhdGlvbnM7IGNoZWNrIGJvdW5kYXJ5IGNvbmRpdGlvbnMgbW9yZSBjYXJlZnVsbHkuCisJKERFRkFVTFRfU0lHTkVEX0NIQVIpOiBSZW1vdmUgb3MgZGVwZW5kZW50IGFsdGVybmF0aXZlcy4KKwkoTE9BRFNfWkVST19FWFRFTkQpOiBEZWZpbmU7IG9ubHkgUUltb2RlIGxvYWRzIGRvLgorCShIQVZFX1ZQUklOVEYpOiBNb3ZlIHRvIHhtLWFybS5oCisJKFNISUZUX0NPVU5UX1RSVU5DQVRFRCk6IE5vdCB0cnVlIC0tIERlbGV0ZS4KKwkoQ09OU1RfQ09TVFMpOiBEZWZpbmU7IGdpdmUgdGhlIGNvc3Qgb2YgY29uc3RhbnRzLgorCShSVFhfQ09TVFMpOiBEZWZpbmU7IGdpdmUgdGhlIGNvc3Qgb2YgcnRsLgorCShNRU1PUllfTU9WRV9DT1NUKTogSXMgZXhwZW5zaXZlLgorCShCUkFOQ0hfQ09TVCk6IFNldCBoaWdoIHRvIGdldCBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMuCisJKEFERFJFU1NfQ09TVCk6IEFyZSBhbGwgdGhlIHNhbWUuCisJKE5PVElDRV9VUERBVEVfQ0MpOiBEZWxldGUuCisJKEVYVFJBX0NDX01PREVTKTogQWRkIGEgbm8gb3ZlcmZsb3cgbW9kZSBhbmQgZmxvYXRpbmcgcG9pbnQgbW9kZXMuCisJKEVYVFJBX0NDX05BTUVTKTogTGlrZXdpc2UuCisJKFNFTEVDVF9DQ19NT0RFKTogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCShTVE9SRV9GTEFHX1ZBTFVFKTogRGVmaW5lLgorCShQUkVESUNBVEVfQ09ERVMpOiBEZWZpbmUsIHNob3cgd2hhdCB0aGV5IGFyZS4KKwkoQVJNX09TX05BTUUpOiBTdXBwbHkgZ2VuZXJpYyB2ZXJzaW9uLgorCShBU01fRklMRV9TVEFSVCk6IFByaW50IGFwcHJvcHJpYXRlIE9TIG5hbWUuCisJKFJFR0lTVEVSX05BTUVTKTogQWRkIGZha2VzLgorCShEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVOQU1FKTogc2V0IGRlc2MgZmllbGQgdG8gY29tcGlsZXIgdmVyc2lvbgorCW51bWJlciBleHBlY3RlZCBieSBkYnggKFJJU0NJWCBoYWNrKS4KKwkoQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCk6IERvbid0IHJlc2V0IGFybV9jY2ZzbV9zdGF0ZSBpZiBsYWJlbCBpc24ndAorCWEgY29kZSAoJ0wnKSBsYWJlbC4KKwkoQVNNX09VVFBVVF9MT05HX0RPVUJMRSk6IERlZmluZSBmb3IgWEZtb2RlLgorCShBU01fT1VUUFVUX0RPVUJMRSk6IFVzZSBSRUFMX0FSSVRNRVRJQyByb3V0aW5lcy4KKwkoQVNNX09VVFBVVF9GTE9BVCk6IExpa2V3aXNlLgorCShBU01fT1VUUFVUX09QQ09ERSk6IENoYW5nZSBvZiBhcm1fY2Nmc21fc3RhdGUgaXMgbm93IGhhbmRsZWQgYnkgaW5zbnMKKwl0aGF0IG5lZWQgdG8gY2hhbmdlIGl0LgorCShQUklOVF9PUEVSQU5EKTogJWQgaXMgcmVwbGFjZWQgYnkgYXBwcm9wcmlhdGUgY29uZGl0aW9uIGNoYXJhY3RlcnMsCisJJUQgYnkgdGhlIGludmVyc2Ugb2YgdGhvc2UgZ2l2ZW4uIENPTlNUX0RPVUJMRXMgdXNlIFJFQUxfQVJJVEhNRVRJQworCWZ1bmN0aW9ucy4KKwkoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogU3VwcG9ydCBhbGwgdGhlIHNoaWZ0IHR5cGVzLgorCShJTklUX0NVTVVMQVRJVkVfQVJHUyk6IEFkZCBtaXNzaW5nIGJyYWNrZXQuCisKKwkqIHJpc2NpeC5oOiBOZXcgZmlsZSAtLSBPUyBkZXBlbmRlbnQgZGVmaW50aXRpb25zIGZvciByaXNjaXggMS4yIGFuZAorCWFib3ZlLgorCisJKiByaXNjaXgxLTEuaDogTmV3IGZpbGUgLS0gT1MgZGVwZW5kZW50IGRlZmluaXRpb25zIGZvciByaXNjaXggYmVmb3JlCisJdmVyc2lvbiAxLjIKKworCSogcml4LWdhcy5oOiBOZXcgZmlsZSAtLSByaXNjaXggMS4yIGFuZCBhYm92ZSwgYnV0IHdpdGggYW4gYXNzZW1ibGVyCisJd2hpY2ggc3VwcG9ydHMgc3RhYnMuCisKKwkqIGFybS5jIChhcm1fY29tcGFyZV9vcDAsIGFybV9jb21wYXJlX29wMSwgYXJtX2NvbXBhcmVfZnApOiBOZXcKKwl2YXJpYWJsZXMuCisJKGFybV9jcHUpOiBOZXcgdmFyaWFibGUuCisJKGxyX3NhdmVfZWxpbWluYXRlZCk6IE5ldyB2YXJpYWJsZS4KKwkoYXJtX2NvbmRpdGlvbl9jb2Rlcyk6IGRlbGV0ZSBkZWZpbml0aW9uLgorCShyZXR1cm5fdXNlZF90aGlzX2Z1bmN0aW9uKTogTmV3IHZhcmlhYmxlLgorCSh1c2VfcmV0dXJuX2luc24pOiBOZXcgZnVuY3Rpb24uCisJKGNvbnN0X29rX2Zvcl9hcm0pOiBVc2UgSE9TVF9XSURFX0lOVDsgcmV3cml0ZSB0byB3b3JrIGlmCisJSE9TVF9XSURFX0lOVCA+IDMyIGJpdHMuCisJKGZwYV9jb25zdHNfaW5pdGVkLCBzdHJpbmdzX2ZwYSk6IE5ldyB2YXJpYWJsZXMuCisJKGluaXRfZnBhX3RhYmxlKTogTmV3IGZ1bmN0aW9uLCBpbml0aWFsaXplIGFib3ZlLgorCShjb25zdF9kb3VibGVfcnR4X29rX2Zvcl9mcHUpOiBSZXdyaXRlIHVzaW5nIGZwYV9jb25zdHNfaW5pdGVkIGFuZAorCVJFQUxfQVJJVEhNRVRJQyBmdW5jdGlvbnMuCisJKG5lZ19jb25zdF9kb3VibGVfcnR4X29rX2Zvcl9mcHUpOiBOZXcgZnVuY3Rpb24uCisJKHNfcmVnaXN0ZXJfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbiwgYXMgcmVnaXN0ZXJfb3BlcmFuZCwgYnV0IGRvbid0CisJYWNjZXB0IFNVQlJFRyAoTUVNKS4KKwkocmVsb2FkX21lbW9yeV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShhcm1fcmhzX29wZXJhbmQpOiBVc2Ugc19yZWdpc3Rlcl9vcGVyYW5kLgorCShhcm1fcmhzbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShhcm1fYWRkX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGFybV9ub3Rfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KKwkoZnB1X3Joc19vcGVyYW5kKTogVXNlIHNfcmVnaXN0ZXJfb3BlcmFuZC4KKwkoZnB1X2FkZF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShkaV9vcGVyYW5kKTogVXNlIHNfcmVnaXN0ZXJfb3BlcmFuZC4KKwkoZGlfb3BlcmFuZCwgY2FzZSBNRU0pOiBhZGRyZXNzIG11c3QgYmUgb2Zmc2V0dGFibGUuCisJKGluZGV4X29wZXJhbmQpOiBVc2Ugc19yZWdpc3Rlcl9vcGVyYW5kLgorCShjb25zdF9zaGlmdF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShzaGlmdF9vcGVyYXRvcik6IEFsc28gYWNjZXB0IE1VTFQgYnkgcG93ZXIgb2YgdHdvLgorCShlcXVhbGl0eV9vcGVyYXRvcik6IE5ldyBmdW5jdGlvbi4KKwkobWlubWF4X29wZXJhdG9yKTogTmV3IGZ1bmN0aW9uLgorCShjY19yZWdpc3Rlcik6IE5ldyBmdW5jdGlvbi4KKwkobWlubWF4X2NvZGUpOiBOZXcgZnVuY3Rpb24uCisJKGFkamFjZW50X21lbV9sb2NhdGlvbnMpOiBOZXcgZnVuY3Rpb24uCisJKGxvYWRfbXVsdGlwbGVfb3BlcmF0aW9uKTogTmV3IGZ1bmN0aW9uLgorCShzdG9yZV9tdWx0aXBsZV9vcGVyYXRpb24pOiBOZXcgZnVuY3Rpb24uCisJKGFybV9nZW5fbG9hZF9tdWx0aXBsZSk6IE5ldyBmdW5jdGlvbi4KKwkoYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSk6IE5ldyBmdW5jdGlvbi4KKwkoZ2VuX2NvbXBhcmVfcmVnKTogTmV3IGZ1bmN0aW9uLgorCShhcm1fYmFja3dhcmRzX2JyYW5jaCk6IE5ldyBmdW5jdGlvbi4KKwkoc2hvcnRfYnJhbmNoKTogTmV3IGZ1bmN0aW9uLgorCShhcm1faW5zbl9ub3RfdGFyZ2V0ZWQpOiBOZXcgZnVuY3Rpb24uCisJKGZwX2ltbWVkaWF0ZV9jb25zdGFudCk6IE5ldyBmdW5jdGlvbi4KKwkoZWxpbWluYXRlX2xyMmlwKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfY2FsbF9tZW0pOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9tb3ZfbG9uZ19kb3VibGVfZnB1X2Zyb21fYXJtKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfbW92X2xvbmdfZG91YmxlX2FybV9mcm9tX2ZwdSk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X21vdl9sb25nX2RvdWJsZV9hcm1fZnJvbV9hcm0pOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9tb3ZlX2RvdWJsZSk6IG91dHB1dCBjb25zdGFudHMgdXNpbmcgb3V0cHV0X21vdmVfaW1tZWRpYXRlOworCXNpZ25fZXh0ZW5kIENPTlNUX0lOVHM7IGhhbmRsZSBQUkUvUE9TVCBJTkNzLgorCShzaGlmdF9pbnN0cik6IEhhbmRsZSBNVUxULgorCShvdXRwdXRfc2hpZnRfY29tcGFyZSk6IE5ldyBmdW5jdGlvbi4KKwkocGF0dGVybl9yZWFsbHlfY2xvYmJlcnNfbHIpOiBOZXcgZnVuY3Rpb24uCisJKGZ1bmN0aW9uX3JlYWxseV9jbG9iYmVyc19scik6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X3Byb2xvZ3VlKTogRGV0ZXJtaW5lIHdoZXRoZXIgdGFpbCBjYWxsaW5nIGlzIHBvc3NpYmxlLAorCWNvbXBlbnNhdGUgZm9yIHRoaXMgd2hlbiBzYXZpbmcgcmVnaXN0ZXJzLiBSZS1pbml0aWFsaXplCisJcmV0dXJuX3VzZWRfdGhpc19mdW5jdGlvbjsgdXNlIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0sIHdoZW4KKwlzYXZpbmcgZmxvYXRpbmcgcG9pbnQgcmVncy4KKwkob3V0cHV0X2VwaWxvZ3VlKTogRXBpbG9ndWUgaXNuJ3QgbmVlZGVkIGlmIHJldHVybl91c2VkX3RoaXNfZnVuY3Rpb247CisJdXNlIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gd2hlbiByZXN0b3JpbmcgZmxvYXRpbmcgcG9pbnQgcmVncworCWFuZCB0aGVyZSBpcyBhIHN0YWNrIGZyYW1lOyBBcm0gNiByZXF1aXJlcyBkaWZmZXJlbnQgcmV0dXJuCisJaW5zdHJ1Y3Rpb24uCisJKG91dHB1dF9sb2FkX3N5bWJvbCk6IE5ldyBmdW5jdGlvbi4KKwkoZmluYWxfcHJlc2Nhbl9pbnNuKTogQWRkIHN1cHBvcnQgZm9yIFJFVFVSTiBwYXR0ZXJuczsgY2FuIGFsc28KKwljb25kaXRpb25hbGl6ZSBhbmQgdGFyZ2V0IGEgUkVUVVJOOyB1c2UgYXR0cmlidXRlcyB0byBkZXRlcm1pbmUKKwl3aGV0aGVyIGNvbmRpdGlvbiBjb2RlcyBhcmUgc2V0IG9yIGNsb2JiZXJlZDsgYWRkIG5ldyBjYXNlIENBTExfSU5TTgorCXRvIHN3aXRjaCwgZmFpbCBpZiBBcm0gNjsgc3VwcG9ydCBhIGp1bXAgaW5zaWRlIGEgcGFyYWxsZWw7IGNhbGwKKwlyZWNvZyAoKSBiZWZvcmUgcmV0dXJuaW5nIHRvIHJlY292ZXIgZnJvbSB1c2luZyBhdHRyaWJ1dGVzIG9uIG90aGVyIAorCWluc25zLgorCQorCSogYXJtLm1kICh0eXBlKTogTmV3IGF0dHJpYnV0ZSBmb3Igc2NoZWR1bGluZy4KKwkoY3B1KTogTmV3IGF0dHJpYnV0ZSBmb3IgY3B1IHR5cGUgZm9yIHVzZSBpbiBjb25kcyBhdHRyaWJ1dGUuCisJKGNvbmRzKTogTmV3IGF0dHJpYnV0ZSB0byBkZXNjcmliZSBhY3Rpb25zIG9uIGNvbmRpdGlvbiBjb2Rlcywgc2V0IGluCisJaW5zbnMuCisJKGxlbmd0aCk6IE5ldyBhdHRyaWJ1dGUsIHNldCBpbiBpbnNucy4KKwkod3JpdGVfY29uZmxpY3QpOiBOZXcgYXR0cmlidXRlIGRlc2NyaWJpbmcgY29uZmxpY3RzIHdpdGggdGhlIHdyaXRlCisJYnVmZmVyLgorCShmcGEpOiBOZXcgZnVuY3Rpb24gdW5pdCBmb3IgZmxvYXRpbmcgcG9pbnQgY28tcHJvY2Vzc29yLgorCSh3cml0ZV9idWYpOiBOZXcgZnVuY3Rpb24gdW5pdCBmb3IgQXJtIDYgd3JpdGUgYnVmZmVyLgorCU1vc3QgcGF0dGVybnM6IHVzZSBzX3JlZ2lzdGVyX29wZXJhbmQgaW5zdGVhZCBvZiByZWdpc3Rlcl9vcGVyYW5kLgorCU1vc3QgcGF0dGVybnM6IERvbid0IHVzZSBnZW5lcmFsIG9wZXJhbmQgYW5kIHRoZW4gZXhwZWN0IHJlbG9hZCB0bworCWRvIHRoZSB3b3JrLgorCShhZGRkaTMpOiBvcDAgY2FuIGJlIHRoZSBzYW1lIGFzIG9wczEgb3IgMjsgY2xvYmJlcnMgY29uZGl0aW9uIGNvZGVzLgorCU5ldyB1bm5hbWVkIHBhdHRlcm5zIHRvIGFkZCBhbiBTSW1vZGUgb3BlcmFuZCB0byBhIERJbW9kZSBvcC4KKwkoYWRkc2kzKTogYWNjZXB0IGNvbnN0YW50cyB0aGF0IGNhbiBiZSBjYXRlcmVkIGZvciB1c2luZyBzdWIuCisJTmV3IHVubmFtZWQgcGF0dGVybnMgdGhhdCBzZXQgY29uZGl0aW9ucyBvbiBhZGQuCisJKGluY3NjYyk6IG5ldyBwYXR0ZXJuLCBjb25kaXRpb25hbCBpbmNyZW1lbnQuCisJTmV3IHNwbGl0IHRvIGFkZCBzb21lIG51bWJlcnMgaW4gdHdvIGluc25zLgorCShhZGRzZjMpOiBVc2UgUkVBTF9BUklUSE1FVElDOyBzdXBwb3J0IC12ZSBpbW1lZGlhdGVzLgorCShhZGRkZjMpOiBMaWtld2lzZS4KKwkoRkxPQVRfRVhURU5EIGFuZCBBREQpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkoYWRkeGYzKTogTmV3IHBhdHRlcm4uCisJKHN1YmRpMyk6IEFsbG93IGlucHV0IGFuZCBvdXRwdXQgb3BlcmFuZHMgdG8gb3ZlcmxhcCBleGFjdGx5LgorCShTVUIgREltb2RlIGFuZCBTSW1vZGUpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkoc3Vic2kzKTogRG9uJ3QgYWNjZXB0IGEgY29uc3RhbnQgYXMgbGFzdCBvcGVyYW5kLCBpdCB3aWxsIG5ldmVyIGJlCisJbWF0Y2hlZC4KKwkoU1VCIGFuZCBzZXQgQ0MpIE5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShkZWNzY2MpOiBuZXcgcGF0dGVybiwgY29uZGl0aW9uYWwgZGVjcm1lbnQuCisJKHN1YmRmMyk6IEZpeCBiYWQgY2FzZSBhbHRlcm5hdGl2ZS4KKwkoRkxPQVRfRVhURU5EIGFuZCBTVUIpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkoc3VieGYzKTogTmV3IHBhdHRlcm4uCisJKG11bHNpMyk6IEFsbG93IG9wMiB0byBiZSB0aGUgc2FtZSBhcyBvcDAKKwkoTVVMVCBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKE1VTFQgYW5kIEFERCk6IE9wcyAyIGFuZCAzIGNhbiBtYXRjaCBvcCAwLgorCShNVUxULCBBREQgYW5kIHNldCBDQyk6IE5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShtdWxzZjMpOiB1c2UgZm1scyBmb3IgZmFzdGVyIG11bHRpcGx5LgorCShGTE9BVF9FWFRFTkQgYW5kIE1VTFQpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkobXVseGYzKTogTmV3IHBhdHRlcm4uCisJKGRpdnNmMyk6IHVzZSBkdmZzIGFuZCByZGZzIGZvciBmYXN0ZXIgZGl2aWRlLgorCShGTE9BVF9FWFRFTkQgYW5kIERJVik6IE5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShkaXZ4ZjMpOiBOZXcgcGF0dGVybi4KKwkoRkxPQVRfRVhURU5EIGFuZCBNT0QpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkobW9keGYzKTogTmV3IHBhdHRlcm4uCisJKGFuZGRpMyk6IG9wIDAgY2FuIGJlIHRoZSBzYW1lIGFzIG9wczEgb3IgMi4KKwkoKl9FWFRFTkQgYW5kIEFORCk6IE5ldyB1bm5hbWVkIHBhdHRlcm5zCisJKGFuZHNpMyk6IEFsc28gYWNjZXB0IGNvbnN0YW50cyB0aGF0IGNhbiBiZSBoYW5kbGVkIHdpdGggYmljCisJaW5zdHJ1Y3Rpb24uCisJKEFORCBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKGFuZGNic2kzKTogRGVsZXRlLCB0aGlzIGNhbid0IGJlIGdlbmVyYXRlZCBhbnkgbW9yZS4KKwkoTk9UIHRoZW4gQU5EKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKE5PVCB0aGVuIEFORCBhbmQgc2V0IENDKTogTGlrZXdpc2UuCisJKGlvcmRpMyk6IE9wcyAxIGFuZCAyIGNhbiBtYXRjaCBvcCAwLgorCSgqX0VYVEVORCBhbmQgSU9SKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKGlvcnNpMyk6IE9ubHkgYWNjZXB0IGEgdmFsaWQgcmhzIG9wZXJhbmQgZm9yIG9wIDIuCisJKElPUiBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKHhvcmRpMyk6IE5ldyBwYXR0ZXJuLgorCSgqX0VYVEVORCBhbmQgWE9SKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKHhvcnNpMyk6IE9ubHkgYWNjZXB0IGEgdmFsaWQgcmhzIG9wZXJhbmQgZm9yIG9wIDIuCisJKFhPUiBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKHNwbGl0IHBhdHRlcm4pOiBDb21wbGV4IHBhdHRlcm4gd2l0aCBOT1QsIEFORCwgYW5kIElPUiwgY2FuCisJc29tZXRpbWVzIHByb2R1Y2UgYmV0dGVyIGNvZGUgaWYgcmVvcmRlcmVkLgorCShBTkQgKElPUiAoKSBOT1QgKCkpKTogU3BlY2lhbCBwYXR0ZXJuIHRvIHJlY29nbml6ZSBzcGlsdCBhYm92ZS4KKwkoW3N1XXttaW4sbWF4fXNpMyk6IE5ldyBwYXR0ZXJucy4KKwkoc2V0IG1lbW9yeSBmcm9tIE1JTi9NQVggb3BlcmF0aW9uKTogTmV3IHBhdHRlcm4uCisJKEFyaXRobWV0aWMgb24gTUlOL01BWCBvcGVyYXRpb24pOiBOZXcgcGF0dGVybi4KKwkoYXNobHNpMywgYXNocnNpMywgbHNocnNpMywgcm90cnNpMyk6IE9ubHkgYWNjZXB0IGEgdmFsaWQgcnNoIGZvciBvcDIuCisJKHVubmFtZWQgTFNISUZUIHBhdHRlcm4pOiBsaWtld2lzZS4KKwkoU0hJRlQgYW5kIHNldCBDQyk6IE5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShTSElGVCBhbmQgTk9UKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkoU0hJRlQsIE5PVCBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKG5lZ2RpMik6IG9wZXJhbmQxIGNhbiBiZSB0aGUgc2FtZSBhcyBvcCAwLgorCShGTE9BVF9FWFRFTkQgYW5kIE5FRyk6IE5ldyB1bnNpZ25lZCBwYXR0ZXJuLgorCShuZWd4ZjIpOiBOZXcgcGF0dGVybi4KKwkoYWJzc2kyKTogTmV3IHBhdHRlcm4uCisJKEFCUyBhbmQgTkVHKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkoRkxPQVRfRVhURU5EIGFuZCBBQlMpOiBOZXcgdW5uYW1lZCBwYXR0ZXJuLgorCShhYnN4ZjIpOiBOZXcgcGF0dGVybi4KKwkoRkxPQVRfRVhURU5EIGFuZCBTUVJUKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkoc3FydHhmMik6IE5ldyBwYXR0ZXJuLgorCSh7c2luLGNvc317c2YsZGYseGZ9Mik6IE5ldyBwYXR0ZXJucy4KKwkoRkxPQVRfRVhURU5EIGFuZCBTSU4vQ09TKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKG9uZV9jbXBsZGkyKTogTmV3IHBhdHRlcm4uCisJKE5PVCBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKGZsb2F0c2l4ZjIsIGZpeF90cnVuY3Nmc2kyLCBmaXhfdHJ1bmNkZnNpMiwgZml4X3RydW5jeGZzaTIpOiBOZXcKKwlwYXR0ZXJucy4KKwkodHJ1bmN4ZnNmMiwgdHJ1bmN4ZmRmMik6IE5ldyBwYXR0ZXJucy4KKwkoemVyb19leHRlbmRzaWRpMiwgemVyb19leHRlbmRxaWRpMiwgZXh0ZW5kc2lkaTIpOiBOZXcgcGF0dGVybnMuCisJKFpFUk9fRVhURU5EIGFuZCBzZXQgQ0MpOiBOZXcgcGF0dGVybnMuCisJKGV4dGVuZHtzZixkZn14ZjIpOiBOZXcgcGF0dGVybnMuCisJKG1vdmRpKTogQ29uc3RyYWlucyBtdXN0IGFjY2VwdCBQUkUvUE9TVCBJTkMvREVDLgorCShtb3ZzaSk6IG1ha2UgYW4gZXhwYW5kIHRoYXQgc3BsaXRzIHVwIGludGVnZXJzIGFuZCB1bnN1cHBvcnRlZAorCW1vdmVzLgorCSh1bm5hbWVkIHBhdHRlcm4gdG8gbWF0Y2ggbW92c2kpOiBOZXcsIGRvbid0IGFsbG93IHRoaW5ncyB0bworCWJlIG1vdmVkIGJhY2sgdG9nZXRoZXIgYWdhaW4uCisJKFJFRy1SRUcgY29weSBhbmQgc2V0IENDKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkocmVzdG9yZWhpKTogdXNlIHBsdXNfY29uc3RhbnQgaW4gZXhwYW5zaW9uIGNvZGUsIG5vdCBQTFVTIGluIFJUTCBwYXJ0LgorCShzdG9yZWhpLCBzdG9yZWludGhpKTogbGlrZXdpc2UuCisJKG1vdmhpKTogQnJlYWsgdXAgaW1wb3NzaWJsZSBtb3Zlcy4KKwkocGF0dGVybiB0byBtYXRjaCBtb3ZoaSk6IERvbid0IGFsbG93IGltcG9zc2libGUgbW92ZXMgdG8gYmUgcHV0CisJYmFjayB0b2dldGhlci4KKwkobW92cWkpOiBCcmVhayB1cCBpbXBvc3NpYmxlIG1vdmVzLgorCShwYXR0ZXJuIHRvIG1hdGNoIG1vdnFpKTogRG9uJ3QgYWxsb3cgaW1wb3NzaWJsZSBtb3ZlcyB0byBiZSBwdXQKKwliYWNrIHRvZ2V0aGVyOyBjb252ZXJ0IG5lZ2F0aXZlIGNvbnN0YW50cyBpbnRvIG12biBpbnN0cnVjdGlvbi4KKwkobW92c2YpOiBVc2UgUkVBTF9BUklUSE1FVElDIGZvciBjb25zdGFudHM7IGFkZCBhbHRlcm5hdGl2ZXMgZm9yCisJbW92aW5nIEdFTkVSQUxfUkVHUyB0byBhbmQgZnJvbSBtZW1vcnkuCisJKG1vdmRmKTogTWFrZSB0aGlzIGFuIGV4cGFuZDsgc3BsaXQgb3V0IGltcG9zc2libGUgbW92ZXMuCisJKHJlbG9hZF9vdXRkZik6IE5ldyBwYXR0ZXJuLgorCShwYXR0ZXJuIHRvIG1hdGNoIG1vdmRmKTogRG9uJ3QgYWxsb3cgaW1wb3NzaWJsZSBtb3ZlcyB0byBiZSBwdXQgYmFjaworCXRvZ2V0aGVyOyBhZGQgYWx0ZXJuYXRpdmVzIGZvciBtb3ZpbmcgR0VORVJBTF9SRUdTIHRvIGFuZCBmcm9tIG1lbW9yeTsKKwlyZWFycmFuZ2UgYW5kIHdlaWdodCB0byBnZXQgb3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uLgorCShtb3Z4Zik6IE5ldyBwYXR0ZXJuLgorCShsb2FkX211bHRpcGxlKTogTmV3IGV4cGFuZCBwYXR0ZXJuLgorCShwYXR0ZXJuIHRvIGxvYWQgbXVsdGlwbGUsIHBhdHRlcm4gdG8gbG9hZCBtdWx0aXBsZSB3aXRoIHdyaXRlLWJhY2spOgorCU5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShzdG9yZV9tdWx0aXBsZSk6IE5ldyBleHBhbmQgcGF0dGVybi4KKwkocGF0dGVybiB0byBzdG9yZSBtdWx0aXBsZSwgcGF0dGVybiB0byBzdG9yZSBtdWx0aXBsZSB3aXRoIHdyaXRlLWJhY2spOgorCU5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShtb3ZzdHJzaSk6IEV4cGFuZCBzaG9ydCBtb3ZlcyBhcyBhIHNlcmllcyBvZiBsb2FkL3N0b3JlIG11bHRpcGxlcyB3aXRoCisJd3JpdGUtYmFjay4KKwkoY21wKik6IE1ha2UgdGhlc2UgZXhwYW5kczsganVzdCBzZXQgc29tZSBzdGF0ZSB2YXJpYWJsZXMuCisJKENDID0gQ09NUEFSRSBvcCwgb3ApOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkoQ0MgPSBDT01QQVJFIG9wLCBORUcgb3ApOiBOZXcgdW5uYW1lZCBwYXR0ZXJuLgorCShDQyA9IENPTVBBUkUgb3AsIFNISUZUIG9wKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkoRkxPQVRfRVhURU5EIHRoZW4gQ09NUEFSRSk6IE5ldyB1bm5hbWVkIHBhdHRlcm5zLgorCShDQyA9IENDKTogTmV3IHVubmFtZWQgKGR1bW15KSBwYXR0ZXJuIHRvIGFsbG93IGNzZSB0byBjb21iaW5lIHJlcGVhdGVkCisJY29tcGFyZXMuCisJKGJ7ZXEsbmUsbGUsbHQsZ2UsZ3QsZ2V1LGd0dSxsZXUsbHR1fSk6IE1ha2UgdGhlc2UgZXhwYW5kIHBhdHRlcm5zLAorCXVzZSBnZW5fY29tcGFyZV9yZWcoKS4KKwkocGF0dGVybiB0byBtYXRjaCBicmFuY2hlcywgcGF0dGVybiB0byBtYXRjaCBpbnZlcnRlZCBicmFuY2VzKTogTmV3CisJdW5uYW1lZCBwYXR0ZXJucy4KKwkoc3tlcSxuZSxsZSxsdCxnZSxndCxnZXUsZ3R1LGxldSxsdHV9KTogTmV3IGV4cGFuZHMuCisJKHBhdHRlcm4gdG8gbWF0Y2ggc3RvcmVfZmxhZyBvcGVyYXRpb25zKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkocGF0dGVybiB0byBtYXRjaCBOT1Qgc3RvcmVfZmxhZywgcGF0dGVybiB0byBtYXRjaCBORUcgc3RvcmVfZmxhZyk6CisJTmV3IHVubmFtZWQgcGF0dGVybnMuCisJKGp1bXApOiBoYW5kbGUgYXJtX2NjZnNtX3N0YXRlIGV4cGxpY2l0bHkuCisJKENBTEwgKE1FTSkpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkocmV0dXJuKTogTmV3IHBhdHRlcm4uCisJKGNvbmRpdGlvbmFsIFJFVFVSTik6IE5ldyB1bm5hbWVkIHBhdHRlcm5zOworCSh0YWJsZV9qdW1wIChNRU0pKTogTmV3IHVubmFtZWQgcGF0dGVybi4KKwkoaW5kaXJlY3RfanVtcCAoTUVNKSk6IE5ldyB1bm5hbWVkIHBhdHRlcm4uCisJUmVwbGFjZSBzaGlmdC1hcml0aG1ldGljIHBhdHRlcm5zIHdpdGggbmV3IHZlcnNpb25zIHRoYXQgY2F0Y2hlIGFsbAorCWNhc2VzLgorCShPbGQgcGVlcGhvbGUgcGF0dGVybnMgKGNvbW1lbnRlZCBvdXQpKTogcmVtb3ZlLgorCShzaGlmdC1hcml0aG1ldGljIGFuZCBzZXQgQ0MpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkocmVsb2FkIHBhdHRlcm5zIGZvciBhbGwgc2hpZnQtYXJpdGhtZXRpYyBwYXR0ZXJucyk6IE5ldyBwYXR0ZXJucy4KKwlBZGQgbWFueSBuZXcgcGF0dGVybnMgdG8gbWVyZ2Ugc3RvcmVfZmxhZyBwYXR0ZXJucywgYXJpdGhtZXRpYyBhbmQKKwlzaGlmdGluZy4KKwlOZXcgcGF0dGVybnMgdG8gbWF0Y2ggY29uZGl0aW9uYWwgY29tcGFyaXNvbnMuCisJKG1vdmNvbmQpOiBOZXcgcGF0dGVybi4KKwkoYXJpdGggKE1FTSwgTUVNKzQpKTogTmV3IHVubmFtZWQgcGF0dGVybiB0byBzcG90IGxvYWQgbXVsdGlwbGUgCisJcG9zc2liaWxpdHkuCisJKHBhdHRlcm5zIHRvIG1hdGNoIGV4dGVuZGVkIHByZS1pbmNyZW1lbnQpOiBOZXcgdW5uYW1lZCBwYXR0ZXJucy4KKwkocGVlcGhvbGVzIHRvIG1hdGNoIGV4dGVuZGVkIHBvc3QtaW5jcmVtZW50KTogTmV3LgorCShwZWVwaG9sZSB0byBtYXRjaCBtb3ZlIGFuZCBzZXQgY29uZHMpOiBOZWVkZWQgYmVjYXVzZSBjb21iaW5lIG1pc3NlcworCXRoaXMgb25lLgorCShwZWVwaG9sZXMgdG8gbWF0Y2ggbG9hZC9zdG9yZSBtdWx0aXBsZXMpOiBOZXcuCisJKENBTEwsIFJFVFVSTik6IE5ldyBwZWVwaG9sZS4KKwkoQ0FMTCwgSlVNUCk6IE5ldyBwZWVwaG9sZS4KKwkoc2F2ZV9zdGFja19ub25sb2NhbCwgcmVzdG9yZV9zdGFja19ub25sb2NhbCk6IE5ldyBleHBhbmRzIGZvcgorCW5vbi1sb2NhbCBnb3Rvcy4KKwlzcGVjaWFsIHNwbGl0IHRvIGJyZWFrIHVwIHNvbWUgY29uZGl0aW9uYWwgYXJpdGhtZXRpYyBzZXF1ZW5jZXMgCisJYmVmb3JlIHNjaGVkdWxpbmcuCisKKwkqY29uZmlndXJlIChhcm0tKi1yaXNjaXgxLlswMV0qLCBhcm0tKi1yaXNjaXgqKTogTmV3IGNvbmZpZ3VyYXRpb25zLgorCSpjb25maWcuc3ViOiBSZWNvZ25pemUgb3BlcmF0aW5nIHN5c3RlbSAicmlzY2l4KiI7IHJlY29nbml6ZSBhY29ybiBhcworCXZlbmRvci4KKworU2F0IE9jdCAgMiAxNzoyNDo0NCAxOTkzICBKYW1lcyBWYW4gQXJ0c2RhbGVuICAoamFtZXNAYmlndGV4LmNhY3R1cy5vcmcpCisKKwkqIGkzODYubWQgKGFkZGhpMyk6IFVzZSBieXRlIG9wY29kZXMgd2hlbiB0aGUgbG93IGJ5dGUgb2YgYSB3b3JkCisJaXMga25vd24gdG8gYmUgemVyby4KKworU2F0IE9jdCAgMiAxNDoxMTowNiAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogIEFsbG93IGFuIGluc24gd2l0aCBhIFJFR19FUVVJViBub3RlCisJdGhhdCByZWFkcyBtZW1vcnkgdG8gYmUgbW92ZWQgcGFzdCBhbiBpbnNuIHRoYXQgd3JpdGVzIG1lbW9yeS4KKworU2F0IE9jdCAgMiAxNDowNDowMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWdjbGFzcy5jIChyZWNvcmRfcmVnX2NsYXNzZXMpOiBTa2lwIHRvIG5leHQgYWx0ZXJuYXRpdmUKKwl3aGVuIHdlIHNraXAgbm9ybWFsIGNvc3QgY29tcHV0YXRpb24uCisKKwkqIGNvbGxlY3QyLmM6IEFkZCBwcm90b3R5cGVzIHRvIHN0YXRpYyBkZWNsYXJhdGlvbnMuCisJKFBST1RPKTogTmV3IG1hY3JvLgorCShkdXAyLCBwdXRlbnYpOiBGdW5jdGlvbnMgcmV0dXJuIGludGVnZXJzOyBhZGQgdHlwZSBhbmQgcmV0dXJucy4KKworCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMgb24gZ2xvYmFsIGlmCisJLWZ2b2xhdGlsZS1nbG9iYWwuCisKKwkqIHRyZWUuYyAoYnVpbGRfc3RyaW5nKTogTWFrZSBsaWZldGltZSBvZiBzdHJpbmcgdGhlIHNhbWUgYXMgCisJdHJlZSBub2RlLgorCitTYXQgT2N0ICAyIDA0OjU1OjQ0IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIGEyOWsvYTI5ay5oLCBhMjlrL3VuaXguaCwgYWxwaGEvYWxwaGEuaCwgYXJtL2FybS5oLCBjbGlwcGVyL2NsaXguaCwKKwljb252ZXgvY29udmV4LmgsIGVseHNpL2VseHNpLmgsIGZ4ODAvZng4MC5oLCBnbWljcm8vZ21pY3JvLmgsCisJaDgzMDAvaDgzMDAuaCwgaTM3MC90bS1tdnMuaCwgaTM4Ni8zODZic2QuaCwgaTM4Ni9haXgzODZuZy5oLAorCWkzODYvZ2FzLmgsIGkzODYvZ28zMi5oLCBpMzg2L2xpbnV4LmgsIGkzODYvbHlueC5oLCBpMzg2L21hY2guaCwKKwlpMzg2L25leHQuaCwgaTM4Ni9vc2ZlbGYuaCwgaTM4Ni9vc2Zyb3NlLmgsIGkzODYvc2NvLmgsIGkzODYvc2NvNC5oLAorCWkzODYvc2NvNGRieC5oLCBpMzg2L3Njb2RieC5oLCBpMzg2L3NlcXVlbnQuaCwgaTM4Ni9zdW4uaCwKKwlpMzg2L3N5c3YzLmgsIGkzODYvc3lzdjQuaCwgaTg2MC9meDI4MDAuaCwgaTg2MC9pODYwLmgsIGk4NjAvbWFjaC5oLAorCWk4NjAvc3lzdjMuaCwgaTg2MC9zeXN2NC5oLCBpOTYwL2k5NjAuaCwgbTY4ay8zYjEuaCwgbTY4ay8zYjFnLmgsCisJbTY4ay9hbHRvczMwNjguaCwgbTY4ay9hcG9sbG82OC5oLCBtNjhrL2NyZHMuaCwgbTY4ay9jdGl4LmgsCisJbTY4ay9kcHgyLmgsIG02OGsvaHAyYnNkLmgsIG02OGsvaHAzMjAuaCwgbTY4ay9ocDNic2QuaCwKKwltNjhrL2hwM2JzZDQ0LmgsIG02OGsvaXNpLmgsIG02OGsvbHlueC5oLCBtNjhrL202OGt2NC5oLAorCW02OGsvbW90MzMwMC5oLCBtNjhrL25ld3MuaCwgbTY4ay9uZXh0LmgsIG02OGsvcGJiLmgsIG02OGsvcGxleHVzLmgsCisJbTY4ay9zdW4yLmgsIG02OGsvc3VuMy5oLCBtNjhrL3N1bjNtYWNoLmgsIG02OGsvdG93ZXItYXMuaCwKKwltNjhrL3Rvd2VyLmgsIG04OGsvZGd1eC5oLCBtODhrL2x1bmEuaCwgbTg4ay9tODhrLmgsIG04OGsvc3lzdjMuaCwKKwltODhrL3N5c3Y0LmgsIG1pcHMvYnNkLTQuaCwgbWlwcy9ic2QtNS5oLCBtaXBzL2RlYy1vc2YxLmgsCisJbWlwcy9pcmlzMy5oLCBtaXBzL21pcHMuaCwgbWlwcy9uZXdzNC5oLCBtaXBzL25ld3M1LmgsCisJbWlwcy9ud3MzMjUwdjQuaCwgbWlwcy9vc2Zyb3NlLmgsIG1pcHMvc3ZyMy00LmgsIG1pcHMvc3ZyMy01LmgsCisJbWlwcy9zdnI0LTQuaCwgbWlwcy9zdnI0LTUuaCwgbWlwcy91bHRyaXguaCwgbnMzMmsvZW5jb3JlLmgsCisJbnMzMmsvbWVybGluLmgsIG5zMzJrL25zMzJrLmgsIG5zMzJrL3BjNTMyLW1hY2guaCwgbnMzMmsvcGM1MzIuaCwKKwluczMyay9zZXF1ZW50LmgsIG5zMzJrL3RlazYwMDAuaCwgbnMzMmsvdGVrNjEwMC5oLCBuczMyay90ZWs2MjAwLmgsCisJcGEvcGEtZ2hwdXguaCwgcGEvcGEtZ3V4Ny5oLCBwYS9wYS1ocHV4LmgsIHBhL3BhLWhwdXg3LmgsCisJcGEvcGEtdXRhaG1hY2guaCwgcGEvcGEuaCwgcGEvcGExLXV0YWhtYWNoLmgsIHB5ci9weXIuaCwgcm9tcC9yb21wLmgsCisJcnM2MDAwL2FpeDMxLmgsIHJzNjAwMC9tYWNoLmgsIHJzNjAwMC9yczYwMDAuaCwgc2gvc2guaCwgc3BhcmMvbGl0ZS5oLAorCXNwYXJjL2x5bnguaCwgc3BhcmMvcGJkLmgsIHNwYXJjL3NvbDIuaCwgc3BhcmMvc3BhcmMuaCwgc3BhcmMvc3lzdjQuaCwKKwlzcHVyL3NwdXIuaCwgdGFob2UvaGFycmlzLmgsIHRhaG9lL3RhaG9lLmgsIHZheC91bHRyaXguaCwgdmF4L3ZheC5oLAorCXZheC92YXh2LmgsIHZheC92bXMuaCwgd2UzMmsvd2UzMmsuaAorCShDUFBfUFJFREVGSU5FUyk6IEFkZCBzeXN0ZW0vY3B1L21hY2hpbmUgYXNzZXJ0aW9ucyB3aGVyZSBtaXNzaW5nLgorCitGcmkgT2N0ICAxIDIyOjExOjE3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZ3ZhcmFyZ3MuaDogVGVzdCBfX3NlcXVlbnRfXyBsaWtlIF9fQlNEX05FVDJfXy4KKworRnJpIE9jdCAgMSAxNzoxOTo1NCAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogY3NlLmMgKGluc2VydF9yZWdzKTogQWx3YXlzIHJldHVybiBzb21ldGhpbmcuCisJKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisJKGNzZV9wcm9jZXNzX25vdGVzKTogTGlrZXdpc2UuCisJKGludmFsaWRhdGVfc2tpcHBlZF9ibG9jayk6IExpa2V3aXNlLgorCShjc2Vfc2V0X2Fyb3VuZF9sb29wKTogTGlrZXdpc2UuCisKKwkqIHBhLWdocHV4LmggKExJTktfU1BFQyk6IFBhc3MgIi1hIC1hcmNoaXZlIiB3aGVuCisJZGVidWdnaW5nLgorCSogcGEtaHB1eC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHBhLWdocHV4LmggKExJQl9TUEVDKTogTWFrZSBzdXJlIHRvIGFkZCBzcGFjZSBiZXR3ZWVuIGZsYWdzLgorCSogcGEtZ3V4Ny5oIChMSUJfU1BFQyk6IExpa2V3aXNlLgorCSogcGEtaHB1eC5oIChMSUJfU1BFQyk6IExpa2V3aXNlLgorCSogcGEtaHB1eDcuaCAoTElCX1NQRUMpOiBMaWtld2lzZS4KKworRnJpIE9jdCAxICAyMjoxNzoxMiAxOTkzICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAa2Fma2EpCisKKwkqIHZtc2NvbmZpZy5jb206IFdyaXRlIG91dCB0aGUgZGVmaW5pdGlvbnMgZnJvbSBNYWtlZmlsZS5pbiBmb3IKKwl0aGUgc3ltYm9scyBCQ19BTEwgYW5kIEJJX09CSiBpbnRvIGZpbGVzIEJDX0FMTC5PUFQgYW5kCisJQklfQUxMLm9wdC4gIFJlbW92ZSAiYnl0ZWNvZGUgIiBmcm9tIGNvbXBpbGVyIG9wdGlvbnMgZmlsZXMgc28KKwljb21waWxlciB3aWxsIGxpbmsgY29ycmVjdGx5LgorCisJKiBtYWtlLWNjMS5jb20gKGJjX2dlbmVyYXRlKTogTmV3IFZNUyBEQ0wgZnVuY3Rpb24uICBUYWtlcyBhIEJDCisJaGVhZGVyIGZpbGUgdGhhdCBuZWVkcyB0byBiZSBnZW5lcmF0ZWQsIGFuZCBidWlsZHMgaXQuCisKKwkqIG1ha2UtY2MxLmNvbTogIENvbXBpbGUgZW50cmllcyBsaXN0ZWQgaW4gQklfQUxMLk9QVCwgYW5kIHRoZW4gY2FsbAorCWJjX2dlbmVyYXRlIGZvciBldmVyeSBoZWFkZXIgZmlsZSBsaXN0ZWQgaW4gQkNfQUxMLk9QVAorCitGcmkgT2N0IDEgIDIxOjEzOjE3IDE5OTMgIEguSi4gTHUgIChoamxAbnluZXhzdC5jb20pCisKKwkqIGNvbmZpZy9pMzg2L2xpbnV4LmggKExJQl9TUEVDKTogSGFuZGxlIC1wIGFubWQgLXBnIG91dGVybW9zdC4KKworRnJpIE9jdCAgMSAxODoyMzo1NyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHJlbG9hZDEuYyAoZ2VuX2lucHV0X3JlbG9hZCk6IEhhbmRsZSBQTFVTIHdpdGggTUVNIG9wZXJhbmQKKwlleGFjdGx5IHRoZSBzYW1lIGFzIGEgUExVUyB3aXRoIGEgUkVHIG9wZXJhbmQuCisJKiByZWxvYWQuYyAoZm9ybV9zdW0pOiBVbmRvIFNlcCAyOCBjaGFuZ2UuCisKKwkqIE1ha2VmaWxlLmluIChjYzEsIGNjMXBsdXMsIGNjMW9iaik6IERlbGV0ZSBzdXBlcmZsdW91cworCWRlcGVuZGVuY2llcyBvbiBieXRlY29kZS4KKwkoc3RhbXAtYmNhcml0eSwgc3RhbXAtYmNvcGNvZGUsIHN0YW1wLWJjb3BuYW1lKTogQ3JlYXRlIHN0YW1wIGZpbGVzLgorCitGcmkgT2N0ICAxIDE4OjE3OjU2IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZSAoY3BwX21kX2ZsYWdzKTogTmV3IHZhcmlhYmxlLgorCShsaW5rcyk6IEJ1aWxkIGxpbmsgZnJvbSBtZC5wcmUtY3BwIGlmIGNwcF9tZF9mbGFncyBkZWZpbmVkLgorCShDUFBfTUQsIENQUF9NRF9GTEFHUywgTURfRklMRSk6IE5ldyBtYWNyb3MgZm9yIE1ha2VmaWxlLgorCSogTWFrZWZpbGUuaW4gKG1kKTogTmV3IGRlcGVuZGVuY3kuCisJKE1EX0ZJTEUpOiBOZXcgbWFjcm8uCisJKGNsZWFuKTogUmVtb3ZlIGZpbGUgbWQgaWYgbWQucHJlLWNwcCBleGlzdHMuCisJKGRpc3RjbGVhbik6IFJlbW92ZSBtZC5wcmUtY3BwLgorCitGcmkgT2N0ICAxIDE1OjQ0OjQ4IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBoYWxmcGljLmggKHRvcGxldmVsKTogRW5jbG9zZSB0aGUgd2hvbGUgZmlsZSBpbnNpZGUgYSAjaWZuZGVmCisJTk9fSEFMRl9QSUMgY29uZGl0aW9uYWwuCisKKwkqIGkzODYveC1vc2Zyb3NlIChDQ0xJQkZMQUdTLCBHQ0NfQ0ZMQUdTKTogRGVmaW5lIE5PX0hBTEZfUElDIHNvCisJdGhhdCB0aGUgdHdvIGNvbW1vbiB2YXJpYWJsZXMgaW4gaGFsZnBpYy5oIGRvbid0IGdldCBjcmVhdGVkLgorCisJKiBtaXBzL3gtb3Nmcm9zZSAoQ0NMSUJGTEFHUywgR0NDX0NGTEFHUyk6IERpdHRvLgorCitGcmkgT2N0ICAxIDEwOjQ2OjE1IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGEyOWsuaCAoUl9LUik6IE5ldyBtYWNyby4KKwkoRklSU1RfUFNFVURPX1JFR0lTVEVSLCBGSVhFRF9SRUdJU1RFUlMsIENBTExfVVNFRF9SRUdJU1RFUlMpOgorCUFkanVzdCBmb3IgbW9yZSByZWdpc3RlcnMgcHJlc2VudC4KKwkoUkVHX0FMTE9DX09SREVSLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR0lTVEVSX05BTUVTKTogTGlrZXdpc2UuCisJKEhBUkRfUkVHTk9fTlJFR1MsIEhBUkRfUkVHTk9fTU9ERV9PSywgUkVHTk9fUkVHX0NMQVNTKTogTGlrZXdpc2UuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogU3dhcCBuYW1lcyByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbS4KKwkqIGEyOWsuYyAoZ3BjX3JlZ19vcGVyYW5kKTogSW5jbHVkZSBrZXJuZWwgcmVnaXN0ZXJzLgorCisJKiBhMjlrLmggKFRBUkdFVF9MQVJHRV9NRU1PUlkpOiBOZXcgZmxhZzsgY2hhbmdlIHZhbHVlIGZvcgorCWFsbCBvdGhlcnMuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBOZXcgbWFjcm8uCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAibm9ybWFsIiBhbmQgY2hhbmdlIHZhbHVlcy4KKworCSogYTI5ay5jIChjYWxsX29wZXJhbmQsIGNhc2UgU1lNQk9MX1JFRik6IEhhbmRsZSBUQVJHRVRfTEFSR0VfTUVNT1JZCisJYW5kIFNZTUJPTF9SRUZfRkxBRy4KKworVGh1IFNlcCAzMCAyMzoyNToxMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcmVvcmcuYyAob3B0aW1pemVfc2tpcCk6IERvIG5vdCB0aHJlYWQgYSBqdW1wIHRvIGEgbmV3IHRhcmdldCBpZgorCWRvaW5nIHNvIHdvdWxkIGludmFsaWRhdGUgdGhlIGluc24gaW4gdGhlIGp1bXAncyBkZWxheSBzbG90LgorCitUaHUgU2VwIDMwIDE0OjIxOjAzIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogYmktbGV4ZXIuYyAoc2Nhbl9zdHJpbmcpOiBEbyB4bWFsbG9jIGlmIGJ1ZmZlciBpcyBudWxsIGFuZAorCXhyZWFsbG9jIGlmIGl0J3Mgbm90LCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuCisKK1RodSBTZXAgMzAgMTA6NTc6MzAgMTk5MyAgSmFuIEJyaXR0ZW5zb24gIChic29uQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQorCisJKiBiYy1lbWl0LmMgKGJjX2VuZF9mdW5jdGlvbiwgc2VnX2RhdGEpOiBVc2UgYmNvcHkgaW5zdGVhZCBvZiBtZW1jcHkuIAorCitUaHUgU2VwIDMwIDA1OjUzOjU4IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBQTFVTX0VYUFIsIE1JTlVTX0VYUFIpOiBQcm9wZXJseSBoYW5kbGUKKwljYXNlIHdoZW4gQVJHMSBzcGxpdHMgYW5kIFZBUlNJR04gaXMgLTEuCisKK1dlZCBTZXAgMjkgMTk6NDE6MTggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IENoZWNrIHdoZXRoZXIgcmVjdXJzaXZlIGNhbGxzCisJcmV0dXJuIGVycm9yX21hcmtfbm9kZS4KKworV2VkIFNlcCAyOSAxODozNTozMCAxOTkzICBMZW9uaWQgQmFyYXogIChsYmFyYXpAaWlsLmludGVsLmNvbSkKKworCSogcnRsLmggKEdFTl9JTlQpOiBBZGQgbWlzc2luZyBjYXN0IHRvIEhPU1RfV0lERV9JTlQuCisJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3AsIGNhc2UgQ09OU1RfSU5UKTogVXNlIElOVFZBTCwKKwlub3QgWElOVC4KKworV2VkIFNlcCAyOSAxNzozMjowMyAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBnbGltaXRzLmggKFVJTlRfTUFYLCBVTE9OR19NQVgsIFVMT05HX0xPTkdfTUFYKTogCisJcmVkZWZpbmUgaW4gYSBzaW1wbGVyIHdheS4KKworV2VkIFNlcCAyOSAxNzoyNToxNyAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzIChzeXMvc3BpbmxvY2suaCk6IGNoYW5nZSByZWZlcmVuY2VzIG9mCisJIi4uL21hY2hpbmUvKi5oIiB0byA8bWFjaGluZS8qLmg+CisKK1dlZCBTZXAgMjkgMDc6MDk6NTAgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmMgKHJlZ19vcl9zaG9ydF9vcGVyYW5kKTogUmVtb3ZlIHJlZHVuZGFudCB0ZXN0LgorCisJKiBzY2hlZC5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9uLgorCShhZGRfZGVwZW5kZW5jZSwgcmVtb3ZlX2RlcGVuZGVuY2UsIHJlZ25vX3VzZV9pbik6IE5vdyBzdGF0aWMuCisJKHNjaGVkdWxlX2luc25zKTogSGF2ZSBkdW1teSB2ZXJzaW9uIGFsc28gdGFrZSBGSUxFICogcGFyYW1ldGVyLgorCitXZWQgU2VwIDI5IDAxOjI5OjMxIDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjY2NwLmMgKHF1b3RlX3N0cmluZyk6IE5ldyBmdW5jdGlvbi4KKwkoc3BlY2lhbF9zeW1ib2wsIHdyaXRlX291dHB1dCwgb3V0cHV0X2xpbmVfY29tbWFuZCk6IFVzZSBpdCB0byBlc2NhcGUKKwlzcGVjaWFsIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lcyB3aGVuIG91dHB1dHRpbmcgI2xpbmUgZGlyZWN0aXZlcy4KKwkoZG9fbGluZSk6IFBhcnNlIGVzY2FwZSBzZXF1ZW5jZXMgaW4gI2xpbmUgZGlyZWN0aXZlcycgZmlsZSBuYW1lcy4KKwkqIGMtbGV4LmMsIGNwLWxleC5jIChjaGVja19uZXdsaW5lLCB5eWxleCwgcmVhbF95eWxleCk6IExpa2V3aXNlLgorCShpZ25vcmVfZXNjYXBlX2ZsYWcpOiBSZW1vdmUgdmFyLgorCitUdWUgU2VwIDI4IDIxOjI3OjI2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUKKworCSogZnVuY3Rpb24uYyAocHVzaF90ZW1wX3Nsb3RzLCBwb3BfdGVtcF9zbG90cyk6IEFsd2F5cyBjaGFuZ2UgbGV2ZWwuCisJKiBjcC1leHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogUHVzaCBhbmQgcG9wIHRlbXAgc2xvdHMgYXJvdW5kCisJbWFraW5nIG5ldyB0ZW1wIHNsb3RzIGFuZCBmcmVlaW5nIHRoZW0uCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50LCBleHBhbmRfZXhwciwgZG9fanVtcHMpOiBMaWtld2lzZS4KKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisKK1R1ZSBTZXAgMjggMTg6NTA6NTcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRG9uJ3QgY2FsbCBmaW5kX3JlbG9hZHNfdG9wbGV2CisJKG9yIGFueXRoaW5nIGxpa2UgdGhhdCkJZm9yIG1hdGNoX29wZXJhdG9yIG9wZXJhbmRzLgorCisJKiBjb25maWcvbnMzMmsvbnMzMmsuYyAob3V0cHV0X21vdmVfZG91YmxlKTogU3BlY2lhbCBjb2RlIGZvcgorCXB1c2hpbmcgZnJvbSBhbiBhZGRyZXNzIHRoYXQgdXNlcyB0aGUgc3AuICBVc2UgUFVTSE9QIGZvciBwdXNoZXMsCisJbm90IFBPUE9QLgorCisJKiBjb25maWcvbnMzMmsvbnMzMmsuaCAoRlVOQ1RJT05fRVBJTE9HVUUsIEZVTkNUSU9OX1BST0xPR1VFKTogCisJQWRkICUkIGluIGFkanNwYi9hZGpzcGQgaW5zbnMuCisJKiBjb25maWcvbnMzMmsvbnMzMmsubWQgKHJlY29nbml6ZXIgZm9yIHN1YnRyYWN0aW5nIGNvbnN0IGZyb20gcmVnIDE3KToKKwlBZGQgJSQgaW4gYWRqc3BiL2FkanNwZCBpbnNucy4KKworCSogYnl0ZXR5cGVzLmggKFFJdHlwZSwgSEl0eXBlLCBTSXR5cGUsIERJdHlwZSk6IFVzZSBfX3NpZ25lZF9fLgorCisJKiBNYWtlZmlsZS5pbiAoc3RhbXAtYmNvcG5hbWUsIHN0YW1wLWJjb3Bjb2RlKTogCisJVXNlIHNob3J0ZXIgbmFtZXMgZm9yIHRlbXBvcmFyeSBmaWxlcy4KKwkoYmMtZW1pdC5vKTogRGVwZW5kIG9uIGJjLWFyaXR5LmguCisKKwkqIGJpLW9wbmFtZS5jLCBiaS1hcml0eS5jLCBiaS1vcGNvZGUuYyAoeG1hbGxvYyk6IE5ldyBmdW5jdGlvbi4KKwkqIGJpLW9wbmFtZS5jLCBiaS1hcml0eS5jOiBJbmNsdWRlIHN0ZGlvLmguCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9tYWluX2Z1bmN0aW9uKTogUHV0IGJhY2sgYWNjaWRlbnRhbGx5CisJZGVsZXRlZCBwcmV2aW91cyBjaGFuZ2UgdG8gdXNlIE5BTUVfX01BSU4uCisKKwkqIGdsaW1pdHMuaCAoSU5UX01BWCwgTE9OR19NQVgsIExPTkdfTE9OR19NQVgpOiBEZWxldGUgcGFyZW5zLgorCShfX2dsaW1pdHNfX2V2Y29uY2F0X18sIF9fZ2xpbWl0c19fY29uY2F0X18pOiBOZXcgbWFjcm9zLgorCShVSU5UX01BWCwgVUxPTkdfTUFYLCBVTE9OR19MT05HX01BWCk6IFVzZSB0aGVtLgorCisJKiBjY2NwLmMgKG91dHB1dF9kb3RzKTogTmV3IGZ1bmN0aW9uLgorCShkb19pbmNsdWRlKTogQ2FsbCBpdCAodG8gaW5kZW50IG91dHB1dCBmb3IgcHJpbnRfaW5jbHVkZV9uYW1lcykuCisKK1R1ZSBTZXAgMjggMTg6MjI6MzEgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogQWxsIHJlY3Vyc2l2ZSBjYWxscyBub3cgcGFzcyBJTlNOCisJaW5zdGVhZCBvZiBOVUxMX1JUWC4gIFNlY29uZCBhc3NpZ25tZW50IHRvIHJlZl9vdXRzaWRlX21lbSBjaGFuZ2VkCisJdG8gYmUgc2FtZSBhcyBmaXJzdCBhc3NpZ25tZW50LgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIExTSElGVFJUIGNhc2UpOiBBdm9pZCBzaGlmdHMgbGFyZ2VyCisJdGhhbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULgorCisJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IERvbid0IHplcm8gcmVnX25fY2FsbHNfY3Jvc3NlZCBmb3IKKwlwc2V1ZG9zIGxpdmUgYWNyb3NzIG11bHRpcGxlIGJsb2Nrcy4KKworCSogZml4aW5jbHVkZXMgKHtzcGFyYyxzdW4zLHN1bjN4LHN1bjQsc3VuNGMsc3VuNG19L2FzbV9saW5rYWdlLmgsCisJe3N1bjRjLHN1bjRtfS9kZWJ1Zy9hc21fbGlua2FnZS5oOiBSZXBsYWNlIC8qKi8gd2l0aCAjIy4KKworCSogcmVvcmcuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogV2hlbiBzY2FubmluZyBpbnNucywgaWdub3JlCisJQ0xPQkJFUnMgaW4gYWRkaXRpb24gdG8gVVNFcy4KKworCSogbGlmZS5oOiBDb21tZW50IHRoYXQgdGhpcyBpcyBmb3Igc3BhcmNsaXRlIHcvbyBGUFUuCisJKiBzcGFyYy5oIChDUFBfU1BFQyk6IEhhbmRsZSAtbWY5MzAgYW5kIC1tZjkzNC4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tZjkzMCBhbmQgLW1mOTM0IG9wdGlvbnMuICAtbXNwYXJjbGl0ZSBubworCWxvbmdlciBkb2VzIC1tbm8tZnB1LgorCisJKiBmaXhpbmMuc3ZyNCwgZml4aW5jbHVkZXMgKG1hdGguaCk6IFB1dCAjaWZuZGVmIGFyb3VuZCBIVUdFX1ZBTAorCWRlZmluZS4KKwkqIG1hdGgtNjg4ODEuaCwgbWF0aC0zMzAwLmggKEhVR0VfVkFMKTogQWRkICN1bmRlZiBiZWZvcmUgSFVHRV9WQUwKKwlkZWZpbmUsIGluc3RlYWQgb2Ygc3Vycm91bmRpbmcgaXQgd2l0aCAjaWZuZGVmLyNlbmRpZi4KKworCSogc3BhcmMvYnNkLmg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChzcGFyYy0qLWJzZCopOiBOZXcgY29uZmlndXJhdGlvbi4KKworCSogcmVsb2FkLmMgKGZvcm1fc3VtKTogQ2hhbmdlIHRoZSB3YXkgdGhhdCBmb3JtX3N1bSBjYW5vbmljYWxpemVzCisJYWRkcmVzc2VzLCBzbyB0aGF0IGl0IG5ldmVyIGNyZWF0ZXMgKFBMVVMgKFBMVVMgTUVNIENPTlNUX0lOVCkgUkVHKQorCWJ1dCBpbnN0ZWFkIGNhbm9uaWNhbGxpemVzIHRoaXMgdG8gKFBMVVMgKFBMVVMgUkVHIENPTlNUX0lOVCkgTUVNKS4KKworVHVlIFNlcCAyOCAxNjowMDoyNSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGJjLWVtaXQuYzogSW5jbHVkZSBndmFyYXJncy5oLCBub3QgdmFyYXJncy5oLgorCURvbid0IGluY2x1ZGUgc3RyaW5nLmguCisJKHNlZ19hbGlnbik6IFVzZSBiemVybywgbm90IG1lbXNldC4KKworTW9uIFNlcCAyNyAyMDo1MzowMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHBvcF9pbml0X2xldmVsKTogQWRkIHNwZWNpYWwgY2FzZSBmb3Igbm9uaW5jcmVtZW50YWwKKwlzY2FsYXIgaW5pdGlhbGl6ZXJzLgorCisJKiBwcm90b2l6ZS5jOiBEZWNsYXJlIHJpbmRleCB1bmNvbmRpdGlvbmFsbHkuCisKKwkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSBzaWduZWRfdHlwZSBhbmQgdW5zaWduZWRfdHlwZQorCXRvIHNldCBzaWduZWRfd2NoYXJfdHlwZV9ub2RlIGFuZCB1bnNpZ25lZF93Y2hhcl90eXBlX25vZGUuCisKK01vbiBTZXAgMjcgMjA6MzE6MDEgMTk5MyAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfaW5pdCwgZGJ4b3V0X3NvdXJjZV9maWxlKTogUXVvdGUgc3BlY2lhbAorCWNoYXJhY3RlcnMgd2hlbiBvdXRwdXR0aW5nIHNvdXJjZSBmaWxlIG5hbWVzLgorCSogY29uZmlnL2EyOWsvYTI5ay5oLCBjb25maWcvYTI5ay91bml4LmgsIGNvbmZpZy9hbHBoYS9hbHBoYS5oLAorCWNvbmZpZy9pMzg2L2FpeDM4Nm5nLmgsIGNvbmZpZy9pMzg2L2JzZC5oLCBjb25maWcvaTM4Ni9nYXMuaCwKKwljb25maWcvaTM4Ni9zdW4zODYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9lbHhzaS9lbHhzaS5oLCBjb25maWcvbTY4ay8zYjEuaCwgY29uZmlnL202OGsvY3Jkcy5oLAorCWNvbmZpZy9tNjhrL21vdDMzMDAuaCwgY29uZmlnL202OGsvdG93ZXItYXMuaCwgY29uZmlnL204OGsvbTg4ay5oLAorCWR3YXJmb3V0LmMgKEFTTV9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FKTogTGlrZXdpc2UuCisJKiB4Y29mZm91dC5oLCBjb25maWcvaTM4Ni9pMzg2aXNjZ2FzLmgsIGNvbmZpZy9pODYwL2Z4MjgwMC5oCisJKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRElSRUNUT1JZLCBEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVOQU1FKToKKwlMaWtld2lzZS4KKwkqIHhjb2Zmb3V0LmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19vdXRwdXRfZmlsZW5hbWUpOiBMaWtld2lzZS4KKwkqIHRvcGxldi5jIChvdXRwdXRfZmlsZV9kaXJlY3RpdmUpOiBMaWtld2lzZS4KKwkob3V0cHV0X3F1b3RlZF9zdHJpbmcpOiBOZXcgZnVuY3Rpb24uCisKK01vbiBTZXAgMjcgMTk6MzE6NTcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBiaS1sZXhlci5jICh4cmVhbGxvYyk6IEhhbmRsZSAwIHBhc3NlZCBhcyBCTE9DSy4KKworCSogTWFrZWZpbGUuaW4gKHN0YW1wLWJjb3BuYW1lLCBzdGFtcC1iY29wY29kZSwgc3RhbXAtYmNhcml0eSk6CisJUmVuYW1lZCBmcm9tIHN0YW1wLWJjLS4uLiB0byBmaXQgaW4gMTQgY2hhcnMuCisJRG9uJ3Qgcm0gdGhlIC5oIGZpbGVzLgorCShTVEFHRVNUVUZGKTogQWRkIHNvbWUgYmMgYW5kIGJpIGZpbGVzLgorCisJKiBjLWxleC5jICh5eWxleCk6IEhhbmRsZSBpIHRvZ2V0aGVyIHdpdGggZiBvciBsIGluIGZsb2F0IGNvbnN0YW50LgorCitNb24gU2VwIDI3IDE5OjAwOjE4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChzcGVjaWFsX3N5bWJvbCwgaW5pdGlhbGl6ZV9idWlsdGlucyk6IElmCisJTk9fQlVJTFRJTl9TSVpFX1RZUEUgaXMgZGVmaW5lZCwgbmV2ZXIgcmVmZXIgdG8gU0laRV9UWVBFLgorCUxpa2V3aXNlIGZvciBOT19CVUlMVElOX1BUUkRJRkZfVFlQRSBhbmQgUFRSRElGRl9UWVBFLgorCitNb24gU2VwIDI3IDE4OjU5OjA5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncywgU0VUIGNhc2UpOiBDaGVjayBmb3IgSU5TTl9MSVNUCisJYWxvbmcgd2l0aCBFWFBSX0xJU1QuCisKK01vbiBTZXAgMjcgMTQ6Mjk6MTcgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAaWVzZC5hdWMuZGspCisKKwkqIG9iamMvdHlwZWRzdHJlYW0uaCAob2JqY19yZWFkX29iamVjdCk6IEFkZCBkZWNsYXJhdGlvbi4KKworTW9uIFNlcCAyNyAxNzowMDozOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogSGFuZGxlIG9wdGlvbiAtLXdpdGgtZWxmLgorCShpWzM0XTg2LSotbGludXgqKTogVXNlIGxpbnV4ZWxmLmggaWYgLS13aXRoLWVsZi4KKwkoaVszNF04Ni0qLW9zZmVsZik6IENvbmZpZyBkZWxldGVkLgorCShpWzM0XTg2LSotb3Nmcm9zZSk6IEhhbmRsZSAtLXdpdGgtZWxmLgorCSogY29uZmlnL2kzODYvbGludXhlbGYuaDogTmV3IGZpbGUuCisKK01vbiBTZXAgMjcgMTQ6MTk6MzMgMTk5MyAgSmFuIEJyaXR0ZW5zb24gIChic29uQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGJjX2V4cGFuZF9jb25zdHJ1Y3Rvcik6IERlbGV0ZSBjYXN0IG9mIGFyZ3VtZW50IHRvCisJYmNfZW1pdF9pbnN0cnVjdGlvbiB0byBIT1NUX1dJREVfSU5ULiBNb3ZlIGFzc2lnbm1lbnQgb2YgcHRyb2ZmcworCXRvIHNlcGFyYXRlIGxpbmUuCisKK01vbiBTZXAgMjcgMTA6MzI6MjggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKHN0bXQubywgZXhwci5vLCBlbWl0LXJ0bC5vKTogQWRkIG1pc3NpbmcgZGVwZW5kZW5jeQorCW9uIGJjLXR5cGVjZC5kZWYuCisJKGJpLXJ1bi5vKTogRml4IGZvcm1hdHRpbmcuCisKK01vbiBTZXAgMjcgMTA6MjY6NDMgMTk5MyAgSmFuIEJyaXR0ZW5zb24gIChic29uQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoYmktYXJpdHkuaCwgYmMtb3Bjb2RlLmgsIGJjLW9wbmFtZS5oKTogVXNlCisJbW92ZS1pZi1jaGFuZ2VkLiAKKwkoc3RhbXAtYmMtYXJpdHksIHN0YW1wLWJjLW9wY29kZSwgc3RhbXAtYmMtb3BuYW1lKTogTmV3IHRhcmdldHMuCisKK1N1biBTZXAgMjYgMjM6MTE6MzQgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9GSUxFX1NUQVJUKTogUmVtb3ZlIGxhc3QgY2hhbmdlIGZvciAkTElUJCBzdWJzcGFjZSwKKwlub3QgYWxsIEhQVVggbGlua2VycyBoYW5kbGUgaXQgY29ycmVjdGx5LgorCitTdW4gU2VwIDI2IDIwOjUxOjM2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlLCBiY19leHBhbmRfc3RhcnRfY29uZCk6CisJVXNlIHhqdW1waWZub3QsIG5vdCBqdW1waWZub3QuCisKKwkqIE1ha2VmaWxlLmluIChiaS1hcml0eSwgYmktb3Bjb2RlLCBiaS1vcG5hbWUpOiBEZWxldGUgJChMRVhMSUIpLgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RyaW5nKTogUHV0IGJyYWNlcyBhcm91bmQgQVNNX09VVFBVVF9BU0NJSS4KKworU2F0IFNlcCAyNSAwODozMDoxNiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkRfRVhQUik6IFNldCBNRU1fSU5fU1RSVUNUX1AKKwlwcm9wZXJseSBmb3IgVEVNUC4KKworCSogY29tYmluZS5jIChCWVRFX0xPQURTX0VYVEVORCwgTE9BRF9FWFRFTkQpOiBEZWxldGVkLgorCShzdWJzdCwgZm9yY2VfdG9fbW9kZSwgbm9uemVyb19iaXRzLCBudW1fc2lnbl9iaXRfY29waWVzKToKKwlVc2UgbmV3IG1hY3JvcyBMT0FEX0VYVEVORF9PUCBhbmQgV09SRF9SRUdJU1RFUl9PUEVSQVRJT04gaW5zdGVhZAorCW9mIEJZVEVfTE9BRFNfKl9FWFRFTkQgYW5kIExPQURfRVhURU5ELgorCSogZXhwci5jIChkb19zdG9yZV9mbGFnKTogTGlrZXdpc2UuCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQsIGZpbmRfcmVsb2Fkcyk6IExpa2V3aXNlLgorCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IExpa2V3aXNlLgorCSogYTI5ay5oLCBhbHBoYS5oLCBjbGlwcGVyLmgsIGFybS5oLCBpOTYwLmgsIG04OGsuaCwgbWlwcy5oOgorCVVzZSBXT1JEX1JFR0lTVEVSX09QRVJBVElPTiBhbmQgTE9BRF9FWFRFTkRfT1AgYW5kIGRlbGV0ZQorCUJZVEVfTE9BRFNfe1NJR04sWkVST31fRVhURU5ELgorCSogcGEuaCwgcm9tcC5oLCByczYwMDAuaCwgc2guaCwgc3BhcmMuaDogTGlrZXdpc2UuCisKK1NhdCBTZXAgMjUgMDY6MTk6MjAgMTk5MyAgSmFuIEJyaXR0ZW5zb24gIChic29uQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQorCisJKiBiaS1sZXhlci5sOiBEZWxldGVkLgorCisJKiBiaS1sZXhlci5jOiBOZXcgZmlsZS4KKworCSogTWFrZWZpbGUuaW4gKGJpLWxleGVyKTogRGVsZXRlZC4KKwkoYmktbGV4ZXIubCk6IERlbGV0ZWQuCisKK0ZyaSBTZXAgMjQgMTY6NTk6MDMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJQ3lnbnVzPC0+RlNGIEMrKyBmcm9udC1lbmQgbWVyZ2UuCisKKwlUdWUgU2VwIDIxIDE5OjE3OjI5IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChidWlsZF9wdHJtZW1mdW5jX3R5cGUpOiBTZXQgQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04KKwkgIGp1c3QgaW4gY2FzZS4KKwkqIGNwLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBFeGNsdWRlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9ucyBpbgorCSAgSVNfQUdHUl9UWVBFIHRlc3QuCisJKiBjcC1tZXRob2QuYyAoZHVtcF90eXBlX3ByZWZpeCwgZHVtcF90eXBlX3N1ZmZpeCwgZHVtcF90eXBlKToKKwkgIEhhbmRsZSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbnMuCisKKwlUdWUgU2VwIDIxIDEwOjQ3OjEwIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChmaW5pc2hfc3RydWN0KTogU2luY2Ugd2Uga25vdyB3aGljaCBiYXNlIGNsYXNzIHdlIHdhbnQKKwkgIHRoZSBiaW5mbyBmb3IsIGdldCBpdCBkaXJlY3RseSwgaW5zdGVhZCBvZiBzZWFyY2hpbmcgZm9yIGl0LiAgQ3VyZXMKKwkgIGEgY29tcGlsZXJfZXJyb3IgaW4gYmluZm9fdmFsdWUuCisKKwlUaHUgU2VwIDE2IDIwOjMzOjI1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90byk6IE1ha2UgZXJyb3IgbW9yZSBzcGVjaWZpYyBhbmQgbW9yZQorCSAgcmVhZGFibGUuCisKKwlUaHUgU2VwIDE2IDIwOjE0OjE4IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKGNvbnN1bWVfc3RyaW5nKTogQWRkIHNlY29uZCBhcmd1bWVudCBzbyB0aGF0IHdlIGNhbiB1c2UKKwkgIHRoaXMgcm91dGluZSBmb3IgY2hhcmFjdGVyIGNvbnN0YW50cyB0b28uICBBbHNvLCBoYW5kbGUgZW9mIGluc2lkZQorCSAgdGhlIHN0cmluZyBvciBjaGFyYWN0ZXIgY29uc3RhbnQgYmV0dGVyLiAgTWFrZSBzdGF0aWMsIGFzIGl0IGlzbid0CisJICB1c2VkIGFueXBsYWNlIGVsc2UuCisKKwkqIGNwLWxleC5jIChyZWluaXRfcGFyc2VfZm9yX2Jsb2NrKTogQWRkIHNlY29uZCBhcmd1bWVudCB0bworCSAgY29uc3VtZV9zdHJpbmcuICBBZGQgc3VwcG9ydCBmb3IgY2hhcmFjdGVyIGNvbnN0YW50cy4KKworCSogY3AtdHJlZS5oIChjb25zdW1lX3N0cmluZyk6IFJlbW92ZSBkZWNsYXJhdGlvbiwgbm90IHVzZWQgYW55IHBsYWNlCisJICBlbHNlLgorCisJV2VkIFNlcCAxNSAxMjo0NDoxMyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogY3AtZ2MuYyAoYnVpbGRfdF9kZXNjKTogIE1ha2Ugc3VyZSBmaW5pc2hfdGFibGUgaXMgY2FsbGVkCisJZm9yIHRoZSBtZXRob2RzIGFuZCBpdmFycyB0YWJsZXMuCisKKwlNb24gU2VwIDEzIDE0OjQwOjIzIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtcHQuYyAodW5pZnkpOiBVc2UgdGhlIHJlZmVyZW50IHR5cGUgaWYgbmVjZXNzYXJ5LgorCisJRnJpIFNlcCAxMCAxNjozNDozNyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQWRkIG1pc3NpbmcgZm91cnRoCisJICBhcmd1bWVudCB0byBidWlsZF9iaW5hcnlfb3AgY2FsbHMsIGFuZCBlbGltaW5hdGUgYm9ndXMgZGVsdGEyCisJICBjaGVjay4KKworCUZyaSBTZXAgMTAgMTQ6NTI6NTkgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IE1ha2Ugc3VyZSBkZWx0YTIncyBtYXRjaAorCSAgd2hlbiBjb21wYXJpbmcgcG9pbnRlcnMgdG8gX3ZpcnR1YWxfIG1lbWJlciBmdW5jdGlvbnMuCisKKwlGcmkgU2VwIDEwIDE0OjI3OjQ1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBSZXZlcnQgYSBjYXN0LgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBBZGQgbWlzc2luZyBmb3VydGgKKwkgIGFyZ3VtZW50IHRvIGJ1aWxkX2JpbmFyeV9vcCBjYWxscy4KKworCVRodSBTZXAgIDkgMjE6MjI6NDAgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJQ29tcGxldGUgcmUtdmFtcCBvZiBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbnMuICBJbXBsZW1lbnRzCisJY29tcGxldGUgc2VtYW50aWNzLiAgQ3VyZXMgcHJvYmxlbXMgb24gQ09OVkVYLCBpOTYwIGFuZCBhbHBoYS4KKworCSogY3AtdHJlZS5oIChnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYywgYnVpbGRfcHRybWVtZnVuYyk6CisJICBOZXcgcm91dGluZXMuCisJKiBjcC1kZWNsLmMgKGJ1aWxkX3B0cm1lbWZ1bmNfdHlwZSk6IE5ldyByb3V0aW5lLCBidWlsZHMgY2Fub25pY2FsCisJICBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlcy4KKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgbmV3IHR5cGUgZm9yIFBPSU5URVJfVFlQRSB0bworCSAgTUVUSE9EX1RZUEVzLgorCSogY3AtbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBNYWtlIHRoZSBvbGQgbWFuZ2xpbmcgdG8gc2hvdworCSAgdGhyb3VnaCB3aGVuIG1hbmdsaW5nIHRoZSBuZXcgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZS4KKworCSogY3AtdHJlZS5oIChUWVBFX1BUUk1FTUZVTkNfUCwgVFlQRV9QVFJNRU1GVU5DX0ZOX1RZUEUsCisJICBUWVBFX0dFVF9QVFJNRU1GVU5DX1RZUEUsIFRZUEVfU0VUX1BUUk1FTUZVTkNfVFlQRSk6IE5ldyBtYWNyb3MKKwkgIGZvciBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiBjb2RlLgorCSogY3AtaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBIYW5kbGUgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb25zCisJICBzcGVjaWFsbHkuCisJKiBjcC10eXBlMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogTWFrZSBuZXcgcG9pbnRlciB0byBtZW1iZXIKKwkgIGZ1bmN0aW9ucyBpbml0aWFsaXphYmxlLgorCSogY3AtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBNYWtlIG5ldyBwb2ludGVyIHRvIG1lbWJlcgorCSAgZnVuY3Rpb25zIGFzc2lnbmFibGUuCisJKiBjcC10eXBlMi5jIChidWlsZF9tX2NvbXBvbmVudF9yZWYpOiBNYWtlIG5ldyBwb2ludGVyIHRvIG1lbWJlcgorCSAgZnVuY3Rpb25zIHdvcmsuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsLCBidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwsCisJICBidWlsZF9iaW5hcnlfb3ApOiBEaXR0by4KKwkqIGNwLWNsYXNzLmMgKGFkZF92aXJ0dWFsX2Z1bmN0aW9uKTogRG9uJ3Qgc2V0IHRoZSBoaWdoIGJpdCBvbgorCSAgREVDTF9WSU5ERVhzLgorCisJKiBjcC10eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBOZXcgcm91dGluZSB0bworCSAgcmVzb2x2ZSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMpOiBOZXcgcm91dGluZSB0byBidWlsZCBDT05TVFJVQ1RPUnMKKwkgIGZvciBuZXcgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb25zLiAgVXNlZCBieSB0byBnZW5lcmF0ZQorCSAgaW5pdGlhbGl6YXRpb24gYW5kIGFzc2lnbm1lbnQgZXhwcmVzc2lvbnMuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IEltcGxlbWVudCA9PSBhbmQgIT0gZm9yCisJICBuZXcgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb25zLgorCSogY3AtdHlwZWNrLmMgKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogSGFuZGxlICYgaW4gbW9yZSByZWFzb25hYmxlCisJICB3YXlzIHRvIG1ha2UgbmV3IHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9ucyB3b3JrLgorCisJKiBjcC1wYXJzZS55IChleHByX25vX2NvbW1hcyk6IERvbid0IGRlcmVmZXJlbmNlIHRoZSBzZWNvbmQKKwkgIGFyZ3VtZW50LCB0aGlzIGlzIG5vdyBkb25lIGluIGJ1aWxkX21fY29tcG9uZW50X3JlZiBhcyBuZWVkZWQuCisJKiBjcC10eXBlY2suYyAoYnVpbGRfeF9iaW5hcnlfb3ApOiBEaXR0by4KKworCU90aGVyIG1pc2Mgd29yay4KKworCSogY3AtY2FsbC5jIChidWlsZF9maWVsZF9jYWxsLCBidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwsCisJICBidWlsZF9tZXRob2RfY2FsbCk6IFNlY29uZCBhcmcgdG8gYnVpbGRfaW5kaXJlY3RfcmVmIHNob3VsZCBiZQorCSAgTlVMTF9QVFIsIG5vdCBOVUxMIG9yIDAuCisJKiBjcC1jbGFzcy5jIChidWlsZF92YmFzZV9wYXRoLCBidWlsZF92Zm5fcmVmLCBwb3BjbGFzcyk6IERpdHRvLgorCSogY3AtY3Z0LmMgKGNvbnZlcnRfZnJvbV9yZWZlcmVuY2UpOiBEaXR0by4KKwkqIGNwLWRlY2wyLmMgKHNldHVwX3Z0YmxfcHRyLCBmaW5pc2hfZmlsZSk6IERpdHRvLgorCSogY3AtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCwgYnVpbGRfdmlydHVhbF9pbml0LAorCSAgZXhwYW5kX2FnZ3JfdmJhc2VfaW5pdF8xLCBleHBhbmRfcmVjdXJzaXZlX2luaXRfMSwKKwkgIGdldF9tZW1iZXJfZnVuY3Rpb24sIHJlc29sdmVfb2Zmc2V0X3JlZiwgYnVpbGRfbmV3LCBidWlsZF9kZWxldGUsCisJICBidWlsZF92ZWNfZGVsZXRlKTogRGl0dG8uIAorCSogY3Atc2VhcmNoLmMgKGRmc19pbml0X3ZiYXNlX3BvaW50ZXJzLCBpbml0X3ZiYXNlX3BvaW50ZXJzLAorCSAgYnVpbGRfdmJhc2VfdnRhYmxlc19pbml0KTogRGl0dG8uCisJKiBjcC10eXBlMi5jIChidWlsZF94X2Fycm93LCBidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBEaXR0by4KKwkqIGNwLXR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IERpdHRvLgorCisJSW5zdGVhZCBvZiBjYWxsaW5nIGdldF9pZGVudGlmaWVyIHdpdGggdGhlIHNhbWUgdmFsdWUgYWxsIHRoZSB0aW1lLAorCWNhbGwgaXQgb25jZSwgYW5kIHJlLXVzZSB0aGUgY2FjaGVkIHZhbHVlLgorCisJKiBjcC1kZWNsLmMgKHBmbl9pZGVudGlmaWVyLCBpbmRleF9pZGVudGlmaWVyLCBkZWx0YV9pZGVudGlmaWVyLAorCSAgZGVsdGEyX2lkZW50aWZpZXIpOiBOZXcgY2FjaGVkIGNhbGxzIHRvIGdldF9pZGVudGlmaWVyLgorCSogY3AtdHJlZS5oICh0aGlzX2lkZW50aWZpZXIsIHBmbl9pZGVudGlmaWVyLCBpbmRleF9pZGVudGlmaWVyLAorCSAgZGVsdGFfaWRlbnRpZmllciwgZGVsdGEyX2lkZW50aWZpZXIpOiBBbGxvdyB0aGVtIHRvIGJlIGFjY2Vzc2VkCisJICBldmVyeXdoZXJlLgorCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgcGZuX2lkZW50aWZpZXIsCisJICBpbmRleF9pZGVudGlmaWVyLCBkZWx0YV9pZGVudGlmaWVyIGFuZCBkZWx0YTJfaWRlbnRpZmllciBhbmQKKwkgIHVzZSBhIGNhY2hlZCBnZXRfaWRlbnRpZmllciBjYWxsLgorCSogY3AtY2xhc3MuYyAoZGVsdGFfbmFtZSwgcGZuX25hbWUpOiBSZW1vdmVkLCB1c2UgZGVsdGFfaWRlbnRpZmllcgorCSAgYW5kIHBmbl9pZGVudGlmaWVyIGluc3RlYWQuCisJKiBjcC1jbGFzcy5jIChwb3BjbGFzcyk6IFVzZSBhIGNhY2hlZCBnZXRfaWRlbnRpZmllciBjYWxsIGZvciBgdGhpcycuCisKKwlUdWUgU2VwICA3IDE2OjAxOjE0IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3Atc2VhcmNoLmMgKGltbWVkaWF0ZWx5X2Rlcml2ZWQpOiBOZXcgZnVuY3Rpb24uCisJKGdldF9iaW5mbyk6IFVzZSBpdC4KKwkoY29tcHV0ZV92aXNpYmlsaXR5KTogUmV3cml0ZSBob3cgcHJpdmF0ZSBpbmhlcml0YW5jZSBpcyBoYW5kbGVkLCBzbworCWl0IGFjdHVhbGx5IHdvcmtzLiAgVXNlIHRoZSBuZXcgaW1tZWRpYXRlbHlfZGVyaXZlZCBmbi4KKworCU1vbiBTZXAgIDYgMTQ6NDQ6NDYgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tmbmRlY2wpOiBBZGQgZW1wdHkgc3RhdGVtZW50IGFmdGVyIGZvdW5kYWdnciBsYWJlbC4KKworCVNhdCBTZXAgIDQgMTY6MTI6MjcgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2ZuZGVjbCk6IFJlcXVpcmUgY2xhc3Mgb3IgZW51bSBhcmd1bWVudCB0bworCW9wZXJhdG9ycy4KKworCSogY3AtaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IE1ha2UgZGVzdHJ1Y3RvciB3aXRob3V0IG9iamVjdAorCWVycm9yIG1vcmUgdXNlZnVsLCBkb24ndCBjb21wbGFpbiBvZiBtaXNzaW5nIGRlc3RydWN0b3IuCisKKwlUaHUgU2VwICAyIDE1OjUxOjU0IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChnbG9iYWxpemVfbmVzdGVkX3R5cGUpOiBNYWtlIHN1cmUgdGhlIHR5cGUgaW4gcXVlc3Rpb24KKwloYXMgYSBsYW5nX3NwZWNpZmljIGFyZWEgYmVmb3JlIHRyeWluZyB0byBjbGVhciBERUNMX0NMQVNTX0NPTlRFWFQuCisKKwlXZWQgU2VwICAxIDEzOjQwOjMwIDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluKQorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogQ2FsbCBkdXBsaWNhdGVfZGVjbHMgd2hlbiB1c2VyCisJcmVkZWZpbmVzIGEgYnVpbHRpbiBmdW5jdGlvbi4KKworCVRodSBTZXAgIDIgMTU6Mzg6NDMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IE9ubHkga2ljayBiYWNrIHRoZSBsb2NhbAorCXZhbHVlIGlmIHdlJ3JlIHNldHRpbmcgdGhpbmdzIHVwIGZvciB0aGUgcGFyc2VyLgorCisJV2VkIFNlcCAgMSAxMjo1NDozOCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBEb24ndCBjb21wbGFpbiBpZiB0aGUgYmFzZSBoYXMgbm8KKwljb25zdHJ1Y3Rvcjsgd2Ugc2hvdWxkIHRyeSB0byB1c2UgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaW5zdGVhZC4KKworCVdlZCBTZXAgIDEgMTE6NTc6MDAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGZpbmRfc2NvcGVkX3R5cGUpOiBVbmRvIHRoZSBzb3JyeSBmb3Igbm93LCBpdCdzIGhpdHRpbmcKKwlhIGxvdCBvZiBjb2RlIHRoYXQgaXQgc2hvdWxkbid0IGJlLgorCisJTW9uIEF1ZyAzMCAxMzowODo0OCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF94X3VuYXJ5X29wKTogdW5hcnkgJiBvbiBhbiBleHByZXNzaW9uIG9mCisJUkVDT1JEX1RZUEUgdGhhdCBoYXMgYW4gaW5jb21wbGV0ZSB0eXBlIGdpdmVzIHRoZSBzaW1wbGUgYWRkcmVzcyBvZgorCXRoZSBvYmplY3QsIGFuZCBzaG91bGQgbm90IGdpdmUgYW4gZXJyb3IgYWJvdXQgbWV0aG9kIG5vdCBmb3VuZC4KKworCU1vbiBBdWcgMzAgMTE6MDY6MjYgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IHRyeSB0byBpbnN0YW50aWF0ZSBhCisJdGVtcGxhdGUgdGhhdCdzIGFscmVhZHkgYmVpbmcgd29ya2VkIG9uLgorCisJKiBjcC1pbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBNYWtlIGFuIHVuaW5pdGlhbGl6ZWQgcmVmZXJlbmNlCisJYmUgYSBwZWR3YXJuLCBub3QgYSB3YXJuaW5nLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogTWFrZSBkZWNsYXJhdGlvbiBvZiBhIG5lZ2F0aXZlIHdpZHRoCisJZm9yIGEgYml0LWZpZWxkIGJlIGFuIGVycm9yLCBub3QgYSB3YXJuaW5nLgorCisJU2F0IEF1ZyAyOCAwOTo0MDo0NyAxOTkzICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uQGJsdWVzLmN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoZmluZF9zY29wZWRfdHlwZSk6IEFkZCBhIGBzb3JyeScgY2FsbCBpZiB3ZSBoaXQgYW4KKwl1bmluc3RhbnRpYXRlZCB0eXBlLgorCisJVGh1IEF1ZyAyNiAxMzo1MzoyMyAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBEb24ndCBwcm9kdWNlIGFuIGVycm9yCisJaWYgdGhlIHR5cGUgaGFzIG5vIGRlc3RydWN0b3IuCisKKwkqIGNwLWRlY2wuYyAocmVjb3JkX2J1aWx0aW5fdHlwZSk6IERvbid0IHNldCBUWVBFX0hBU19ERVNUUlVDVE9SCisJYWZ0ZXIgYWxsLgorCisJV2VkIEF1ZyAyNSAxOToxMDoyNCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENoZWNrIGZvciBjbGFzcyB0eXBlIHZhbHVlIGFzCisJd2VsbAorCisJKiBjcC10cmVlLmggKElERU5USUZJRVJfQ0xBU1NfVFlQRV9WQUxVRSk6IENyZWF0ZSBtYWNybworCShJREVOVElGSUVSX0hBU19DTEFTU19UWVBFX1ZBTFVFKTogRGl0dG8KKworCSogY3AtaW5pdC5jIChpc19hZ2dyX3R5cGVkZWYpOiBDaGVjayBmb3IgY2xhc3MgdHlwZSB2YWx1ZSBhcyB3ZWxsCisJKGZvciB0ZW1wbGF0ZSBkZXN0cnVjdG9ycykKKwkoYnVpbGRfZGVsZXRlKTogRG9uJ3QgYXNzZXJ0IGFnZ3JlZ2F0ZSB0eXBlLCBkb24ndCBjaGVjaworCVRSRUVfR0VUU19ERUxFVEUgaWYgYnVpbHQtaW4gdHlwZS4KKworRnJpIFNlcCAyNCAxNTo1NzoxNCAxOTkzICBSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIHJ0bC5oOiAoSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSk6IE5ldyBtYWNyby4KKwkoaGFyZF9mcmFtZV9wb2ludGVyX3J0eCk6IE5ldyB2YXJpYWJsZQorCSogY29tYmluZS5jOiAoY29tYmluYWJsZV9pM19wYXQpOiBEb24ndCBhZGQgUkVHX0RFQUQgbm90ZXMgZm9yCisJSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTS4KKwkoc3Vic3QsIGNhc2UgU1VCUkVHKTogRG9uJ3QgY2hhbmdlIHJlZ2lzdGVyIG51bWJlciBvciBtb2RlIGlmIGl0CisJaXMgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTS4KKwkqIGNzZS5jOiAoRklYRURfUkVHTk9fUCk6IEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaXMgZml4ZWQuCisJKENIRUFQX1JFRyk6IEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaXMgY2hlYXAuCisJKEZJWEVEX0JBU0VfUExVUyk6IEFsbG93IGhhcmQgZnJhbWUgcG9pbnRlciBhcyBiYXNlLgorCShOT05aRVJPX0JBU0VfUExVU19QKTogTGlrZXdpc2UuCisJKGNhbm5vbl9oYXNoLCBjYXNlIFJFRyk6IEFkZCBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIHRvIGxpc3Qgb2YKKwlzcGVjaWFsIHJlZ2lzdGVycyBmb3IgU01BTExfUkVHSVNURVJfQ0xBU1NFUy4KKwkoZmluZF9iZXN0X2FkZHIpOiBBZGRyZXNzZXMgY29udGFpbmluZyBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNCisJY2Fubm90IGJlIHJlcGxhY2VkLgorCShjc2VfbWFpbik6IHZhbHVlIGluIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaXMgcHJlc2VydmVkIGFjcm9zcworCWNhbGxzLgorCSogZGJ4b3V0LmM6IChkYnhvdXRfc3ltYm9sKTogRlJBTUVfUE9JTlRFUl9SRUdOVU0gaGFzIGJlZW4gZWxpbWluYXRlZAorCWJ5IG5vdywgdXNlIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0uCisJKiBlbWl0LXJ0bC5jOiAoaGFyZF9mcmFtZV9wb2ludGVyX3J0eCk6IE5ldyB2YXJpYWJsZS4KKwkoZ2VuX3J0eCk6IHJldHVybiBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4IGlmIGdlbmVyYXRpbmcgcnRsCisJZm9yIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0uCisJKGVuaXRfZW1pdF9vbmNlKTogR2VuZXJhdGUgaW5pdGlhbCBydGwgZm9yIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHguCisJKiBleHBsb3cuYzogKGNvcHlfYWxsX3JlZ3MpOiBEb24ndCBjb3B5IEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0uCisJKiBmbG93LmM6IChsaWZlX2FuYWx5c2lzKTogTWFyayBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIGFzIGxpdmUgYXQKKwl0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KKwkoaW5zbl9kZWFkX3ApOiBEb24ndCBkZWxldGUgaW5zbnMgdGhhdCBzZXQgdGhlIGhhcmQgZnJhbWUgcG9pbnRlci4KKwkobWFya19zZXRfMSk6IERvbid0IGFkZCBkZWF0aCBpbmZvcm1hdGlvbiBhYm91dAorCUhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0uCisJKG1hcmtfdXNlZF9yZWdzLCBjYXNlIFJFRyk6IERvbid0IHB1dCBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIGluCisJcmVnc19ldmVyX2xpdmUuICBEb24ndCBtYXJrIGl0IGFzIG5lZWRlZCBlaXRoZXIuCisJKiBmdW5jdGlvbi5jOiAoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEsIGNhc2UgTUVNKTogcmVmZXJlbmNlcyB0bworCU1FTSB2aWEgdGhlIGhhcmQgZnJhbWUgcG9pbnRlciBzaG91bGRuJ3QgYmUgY29waWVkLgorCSogZ2VuYXR0cnRhYi5jOiAoaGFyZF9mcmFtZV9wb2ludGVyX3J0eCk6IE5ldyBEdW1teSBkZWZpbml0aW9uLgorCSogZ2xvYmFsLmM6IChnbG9iYWxfYWxsb2MpOiBNYWtlIHN1cmUgdGhhdCBpdCBpcyBhbHdheXMgcG9zc2libGUgdG8KKwllbGltaW5hdGUgRlJBTUVfUE9JTlRFUl9SRUdOVU0gaW50byBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLgorCSoganVtcC5jOiAodGhyZWFkX2p1bXBzKTogVmFsdWUgaW4gSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBpcyBuZXZlcgorCW1vZGlmaWVkIGJ5IGEgY2FsbC4KKwkqIGxvY2FsLWFsbG9jLmM6IChmaW5kX2ZyZWVfcmVnKTogTWFrZSBzdXJlIHdlIHdpbGwgYWx3YXlzIGJlIGFibGUKKwl0byBlbGltaW5hdGUgRlJBTUVfUE9JTlRFUl9SRUdOVU0gaW50byBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLgorCSogbG9vcC5jOiAoaW52YXJpYW50X3AsIGNhc2UgUkVHKTogaGFyZF9mcmFtZV9wb2ludGVyX3J0eCBpcyAKKwlpbnZhcmlhbnQuCisJKiByZWxvYWQuYzogKGltbXVuZV9wKTogQ29uc3RhbnRzIG5ldmVyIG92ZXJsYXAgaGFyZCBmcmFtZSBwb2ludGVyCisJcmVmZXJlbmNlcy4KKwkoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBDb21wdXRlIGludmFsaWQgcmVmZXJlbmNlcyB0byB0aGUgaGFyZCAKKwlmcmFtZSBwb2ludGVyIGluIGEgcmVnaXN0ZXI7IGFsc28gKHJlZyArIGNvbnN0KQorCWFuZCAocmVnICsgcmVnICsgY29uc3QpLgorCisJKiByZWxvYWQxLmM6IChpbml0X3JlbG9hZCk6IHVzZSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIGluc3RlYWQgb2YKKwlGUkFNRV9QT0lOVEVSX1JFR05VTS4KKwkocmVsb2FkKTogT25seSBwcm9oaWJpdCBlbGltaW5hdGlvbiBvZiBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLCBub3QKKwlGUkFNRV9QT0lOVEVSX1JFR05VTSBpZiBmcmFtZV9wb2ludGVyX25lZWRlZC4gIE5ldmVyIHByb2hpYml0CisJZWxpbWluYXRpb24gb2YgRlJBTUVfUE9JTlRFUl9SRUdOVU0gaW50byBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLgorCU1hcmsgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBhcyBsaXZlIGF0IHRoZSBzdGFydCBvZiBhIGJsb2NrIGlmCisJaXQgaXMgc3RpbGwgbmVlZGVkIGFmdGVyIGVsaW1pbmF0aW9uLgorCShlbGltaW5hdGVfcmVncyk6IEZvciBub24tbG9jYWwgZ290bydzLCBkb24ndCBkZWxldGUgc3RvcmVzIGludG8gdGhlCisJaGFyZCBmcmFtZSBwb2ludGVyLgorCShlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogYWRqdXN0IGNvbW1lbnQuCisJKG1hcmtfbm90X2VsaW1pbmFibGUpOiBpZiBmcmFtZV9wb2ludGVyX3J0eCBhbmQgaGFyZF9mcmFtZV9wb2ludGVyX3J0eAorCWFyZSBub3QgdGhlIHNhbWUsIHRoZW4gZnJhbWVfcG9pbnRlcl9ydHggaXMgZWxpbWluYWJsZTsgCisJaGFyZF9mcmFtZV9wb2ludGVyX3J0eCBuZXZlciBpcyBpZiBpdCBpcyBzZXQuLgorCShvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIGlzIGEgYmFkIHNwaWxsIHJlZy4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBpcyBhIGJhZCBjaG9pY2UuCisJKiByZW9yZy5jOiAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlKTogaWYgZnJhbWVfcG9pbnRlcl9uZWVkZWQsIAorCUhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaXMgYWxzbyBhIHJlZmVyZW5jZWQgcmVzb3VyY2UuCisJKG1hcmtfdGFyZ2V0X2xpdmVfcmVncyk6IHZhbHVlIGluIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaXMgbm90CisJY2FsbC1jbG9iYmVyZWQuCisJKGRicl9zY2hlZHVsZSk6IEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gc2hvdWxkIGJlIHZhbGlkIGF0IHRoZQorCWVuZCBvZiBhIGZ1bmN0aW9uLgorCSogcnRsYW5hbC5jOiAocnR4X3Vuc3RhYmxlX3ApOiBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIGlzIG5vdAorCWFuIHVuc3RhYmxlIHJlZ2lzdGVyLgorCShydHhfdmFyaWVzX3AsIGNhc2UgUkVHKTogaGFyZF9mcmFtZV9wb2ludGVyX3J0eCBpcyBpbnZhcmlhbnQuCisJKHJ0eF9hZGRyX2Nhbl90cmFwX3AsIGNhc2UgUkVHKTogaGFyZF9mcmFtZV9wb2ludGVyX3J0eCB3b24ndCB0cmFwLgorCSogc2NoZWQuYzogKG1lbXJlZnNfY29uZmxpY3RfcCk6IFdlIGNhbiB3b3JrIG91dCB3aGV0aGVyIHJlZmVyZW5jZXMKKwl2aWEgaGFyZF9mcmFtZV9wb2ludGVyX3J0eCBhcmUgbGlrZWx5IHRvIGNvbmZsaWN0LgorCShhdHRhY2hfZGVhdGhzLCBjYXNlIFJFRyk6IERvbid0IGFkZCBkZWF0aCBub3RlcyBmb3IKKwlIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLgorCSogc2Rib3V0LmM6IChzZGJvdXRfc3ltYm9sKTogVXNlIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaW5zdGVhZCBvZgorCUZSQU1FX1BPSU5URVJfUkVHTlVNLgorCSogc3RtdC5jOiAoZXhwYW5kX2dvdG8pOiBTZXQgaGFyZF9mcmFtZV9wb2ludGVyX3J0eCB3aGVuIHJlc3RvcmluZworCXRoZSBmcmFtZS4gIFVzZSBpdCB3aGVuIHJlc3RvcmluZyBvdGhlciByZWdpc3RlcnMuCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBBUkdfUE9JTlRFUl9SRUdOVU0gd2lsbCBiZSBlbGltaW5hdGVkIGludG8KKwlIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLCBub3QgRlJBTUVfUE9JTlRFUl9SRUdOVU07IGFkanVzdCBjb2RlIAorCWFjY29yZGluZ2x5LgorCSogc3R1cGlkLmM6IChzdHVwaWRfZmluZF9yZWcpOiBuZXZlciB1c2UgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTS4KKworRnJpIFNlcCAyNCAxNTowNToxNCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBTcGVjaWFsbHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIElOU04KKwlpcyBhIG5vdGUgKGFuIEVYUFJfTElTVCBvciBJTlNOX0xJU1QpLgorCShlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogUGFzcyB0aGUgbm90ZXMgYXMgSU5TTiwKKwl3aGVuIGNhbGxpbmcgZWxpbWluYXRlX2luc24gdG8gcHJvY2VzcyB0aGUgbm90ZXMuCisKK0ZyaSBTZXAgMjQgMTE6Mjk6MjYgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oIChTRVRfQVNNX09QKTogRGVmaW5lLgorCitGcmkgU2VwIDI0IDA0OjQ3OjMzIDE5OTMgIEphbiBCcml0dGVuc29uICAoYnNvbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKHRvcGxldi5vKTogQWRkIGJ5dGVjb2RlLmggYW5kIGJjLWVtaXQuaCB0byBsaXN0CisJb2YgZGVwZW5kZW5jaWVzLgorCShzdG10Lm8pOiBBZGQgYnl0ZWNvZGUuaCwgYmMtdHlwZWNkLmgsIGJjLW9wY29kZS5oLCBiYy1vcHRhYi5oLAkKKwlhbmQgYmMtZW1pdC5oIHRvIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgorCShleHByLm8pOiBBZGQgYnl0ZWNvZGUuaCwgYmMtb3Bjb2RlLmgsIGJjLXR5cGVjZC5oLCBiYy1vcHRhYi5oLAorCWJjLWVtaXQuaCwgYW5kIG1vZGVtYXAuZGVmIHRvIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgorCShlbWl0LXJ0bC5vKTogQWRkIGJ5dGVjb2RlLmgsIGJjLW9wY29kZS5oLCBiYy10eXBlY2QuaCwKKwliYy1vcHRhYi5oLCBiYy1lbWl0LmgsIGJjLW9wbmFtZS5oIHRvIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgorCShpbnRlZ3JhdGUubywgcmVnY2xhc3MubywgdmFyYXNtLm8sIGZ1bmN0aW9uLm8pOiBBZGQgYnl0ZWNvZGUuaCB0bworCWxpc3Qgb2YgZGVwZW5kZW5jaWVzLgorCitUaHUgU2VwIDIzIDIzOjU4OjU4IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0BiaWd0ZXguY2FjdHVzLm9yZykKKworCSogYXR0LmggKEFTTV9PVVRQVVRfQVNDSUkpOiBFbmNsb3NlIG1hY3JvIGluICJkbyB7IC4uIH0gd2hpbGUgKDApIi4KKwkqIHN1bjM4Ni5oIChBU01fT1VUUFVUX0FTQ0lJKTogTGlrZXdpc2UuCisKK1RodSBTZXAgMjMgMTE6NTU6NDcgMTk5MyAgVGVkIExlbW9uICAobWVsbG9uQG5jZC5jb20pCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBBZGQgLWZhbGxvdy1zaW5nbGUtcHJlY2lzaW9uLgorCitUaHUgU2VwIDIzIDAwOjQwOjI4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGJpLXBhcnNlci5jKTogU3VwcGx5IGV4cGxpY2l0IHJ1bGUuCisJQWRkIGJpLXBhcnNlci5oIGFzIHRhcmdldC4KKwlQdXQgdGhlc2UgZmlsZXMgaW4gc3JjZGlyLgorCisJKiBiYy1lbWl0LmMgKGJjX2dlbl9ydHgpOiBDYWxsIGdlbl9ydHguCisJKGJjX3ByaW50X3J0bCk6ICNpZiAwIHRoZSBjb250ZW50cy4KKworCSogTWFrZWZpbGUuaW4gKGJjLW9wdGFiLm8sIGJjLWVtaXQubyk6IEFkZCBtaXNzaW5nIGRlcHMuCisJKGJpLXBhcnNlci5jLCBiaS1sZXhlci5jKTogRG9uJ3QgZGVwZW5kIG9uIC5oIGZpbGVzIGhlcmUuCisKKwkqIHZhcmFzbS5jIChoYW5kbGVfcHJhZ21hX3dlYWspOiBUZXN0IEhBTkRMRV9QUkFHTUFfV0VBSworCWFuZCBXRUFLX0FTTV9PUCBhbmQgU0VUX0FTTV9PUC4KKworCSogTWFrZWZpbGUuaW4gKHN0bXQubyk6IEZpeCB0eXBvLgorCisJKiBlbWl0LXJ0bC5jIChnZW5fbGFiZWxfcnR4KTogSWYgb3V0cHV0X2J5dGVjb2RlLCBtYWtlIGEgQ09ERV9MQUJFTAorCWJ1dCB3aXRoIGRpZmZlcmVudCBjb250ZW50cy4KKworCSogcnRsLmggKEJZVEVDT0RFX0xBQkVMLCBCWVRFQ09ERV9PRkZTRVQsIEJZVEVDT0RFX0JDX0xBQkVMKTogCisJKEJZVEVDT0RFX1VJRCk6IE5ldyBtYWNyb3MuCisJKHN0cnVjdCBydHhfZGVmKTogRGVsZXRlIGVsZW1lbnRzIGxhYmVsLCBvZmZzZXQsIGJjX2xhYmVsLCB1aWQuCisKKwkqIE1ha2VmaWxlLmluIChiYy1hcml0eS5oLCBiYy1vcGNvZGUuaCwgYmMtb3BuYW1lLmgpOiBVc2UgYC4vJy4KKwkoYmktYXJpdHksIGJpLW9wY29kZSwgYmktb3BuYW1lLCBiaS1sZXhlcik6IFVzZSBob3N0IGNvbXBpbGVyLgorCUxpbmsgd2l0aCBIT1NUX0xJQlMgYW5kIGRlcGVuZCBvbiBIT1NUX0xJQkRFUFMuCisJKGJpLXVucGFyc2UpOiBEZWxldGVkLgorCShieXRlY29kZS5kaXN0Y2xlYW4pOiBEb24ndCBkbyBhbnl0aGluZyB3aXRoIGJpLXVucGFyc2UKKwkoYmktYXJpdHkubywgYmktb3Bjb2RlLm8sIGJpLW9wbmFtZS5vLCBiaS1wYXJzZXIubywgYmktcmV2ZXJzZS5vKQorCShiaS1sZXhlci5vKTogVXNlIGhvc3QgY29tcGlsZXIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IERvbid0IHN0b3JlIGRpcmVjdGx5IGl0byBhIHN1YnJlZworCXRoYXQgaXMgbmFycm93ZXIgdGhhbiBhIHdvcmQuCisKK1dlZCBTZXAgMjIgMjI6MTg6MzUgMTk5MyAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogY29tYmluZS5jIChpbml0X3JlZ19sYXN0X2FycmF5cyk6IE5ldyBmdW5jdGlvbi4KKwkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBVc2UgaXQuCisJKGZvcmNlX3RvX21vZGUpOiBOYXJyb3cgbWFzayB0byBmaXQgbW9kZSAoZXhjZXB0IFZPSURtb2RlKS4KKwkocmVjb3JkX3ZhbHVlX2Zvcl9yZWcpOiBXaGVuIHplcm9pbmcgcmVnX2xhc3Rfc2V0X3ZhbHVlLCBhbHNvCisJemVybyByZWdfbGFzdF9zZXRfe21vZGUsbm9uemVyb19iaXRzLHNpZ25fYml0X2NvcGllc30uCisJKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVncyk6IExpa2V3aXNlLgorCitXZWQgU2VwIDIyIDIyOjEzOjA3IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0BiaWd0ZXguY2FjdHVzLm9yZykKKworCSogYmMtZW1pdC5jIChiY19pbml0aWFsaXplKTogQWRkIE1PREUgYXJnIHRvIFJFQUxfVkFMVUVfQVRPRiBjYWxscy4KKworCSogTWFrZWZpbGUuaW4gKGJpLWxleGVyLmMpOiBGaWxlIGlzIGluICQoc3JjZGlyKS4KKworCSogcmVnLXN0YWNrLmMgKHJlY29yZF9sYWJlbF9yZWZlcmVuY2VzKTogRG9uJ3QgZm9sbG93IGEgbnVsbCBsYWJlbAorCXJlZmVyZW5jZSBjaGFpbi4KKworV2VkIFNlcCAyMiAxNTo1NjoyNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChiaS1hcml0eSwgYmktb3Bjb2RlLCBiaS1vcG5hbWUsIGJpLXVucGFyc2UsIGJpLWxleGVyKTogCisJTWFrZSB0aGUgcnVsZXMgZXhwbGljaXQuICBEb24ndCB1c2UgJF4uCisJKGJpLXJ1bi5vLCBiaS1wYXJzZXIubywgYmktbGV4ZXIubyk6IEVsaW1pbmF0ZSAkPC4KKwkoYmMtYXJpdHkuaCwgYmMtb3Bjb2RlLmgsIGJjLW9wbmFtZS5oKTogRWxpbWluYXRlICQ8IGFuZCAkQC4KKworCSogYy10eXBlY2suYyAoc2V0X2luaXRfaW5kZXgpOiBIYW5kbGUgYW5kIGFsbG93IENPTlNUX0RFQ0wuCisJKGJ1aWxkX2NfY2FzdCk6IFdoZW4gbWFraW5nIGEgQ09OU1RSVUNUT1IgZm9yIGEgdW5pb24gY2FzdCwKKwlzcGVjaWZ5IGl0cyB0eXBlLgorCisJKiBNYWtlZmlsZS5pbiAoYmktbGV4ZXIubywgYmktcGFyc2VyLm8pOiBVc2UgQUxMX0NGTEFHUy4KKworCSogYmktYXJpdHkuYyAobWFpbik6IE1ha2Ugc3VyZSB0aGVyZSdzIHNvbWUgdmFsdWUgd2l0aGluCisJZWFjaCBwYWlyIG9mIGJyYWNlcy4KKworCSogZXhwci5jIChiY19hZGp1c3Rfc3RhY2spOiBVc2UgVkFMSURBVEVfU1RBQ0tfRk9SX0JDLAorCW5vdCBWQUxJREFURV9TVEFDSy4KKwkqIGJjLWVtaXQuYyAoYmNfZW1pdF9ieXRlY29kZSk6IExpa2V3aXNlLgorCShiY19lbWl0X2luc3RydWN0aW9uKSBbISBfX0dOVUNfX106IERvbid0IHJlYWxseSB1c2UgYmMtdHlwZWNkLmRlZi4KKworCSogdmFyYXNtLmMgKGJjX2Fzc2VtYmxlX2ludGVnZXIpOiBNYWtlIGRlZmluaXRpb24gc3RhdGljLgorCisJKiBleHByLmMgKGJjX3N0cmR1cCk6IERvbid0IHVzZSBzdHJjcHkncyB2YWx1ZS4KKworCSogYnl0ZXR5cGVzLmg6IE5ldyBmaWxlLiAgVHlwZWRlZnMgbW92ZWQgZnJvbSBieXRlY29kZS5oLgorCSh1bmlvbiBzdGFja3R5cGUpOiBNb3ZlZCBoZXJlLgorCSogYnl0ZWNvZGUuaDogVHlwZWRlZnMgZGVsZXRlZC4KKwkqIGJpLXJ1bi5oOiAodW5pb24gc3RhY2t0eXBlKTogRGVsZXRlZC4KKwkoQklfUEFSQU1TKTogRG9uJ3QgY29udGludWUgdGhlIHBhcm1saXN0LgorCSogYmMtZW1pdC5jOiBJbmNsdWRlIGJ5dGV0eXBlcy5oLCBpZiBfX0dOVUNfXy4KKworV2VkIFNlcCAyMiAxNTo0OTo0NyAxOTkzICBUZWQgTGVtb24gKG1lbGxvbkBuY2QuY29tKQorCisJKiBjLWRlY2wuYyAoZmxhZ19hbGxvd19zaW5nbGVfcHJlY2lzaW9uKTogTmV3IHZhcmlhYmxlLgorCShjX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZhbGxvdy1zaW5nbGUtcHJlY2lzaW9uLgorCSogYy10cmVlLmggKGZsYWdfYWxsb3dfc2luZ2xlX3ByZWNpc2lvbik6IERlY2xhcmVkLgorCSogYy10eXBlY2suYyAoZGVmYXVsdF9jb252ZXJzaW9uKTogSW1wbGVtZW50IC1mYWxsb3ctc2luZ2xlLXByZWNpc2lvbi4KKworV2VkIFNlcCAyMiAxMToxODoyNCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBNb3ZlIHNwZWNpYWwgQysrIG9ubHkgY29kZSB0aGF0CisJICBoYW5kbGVzIGFub255bW91cyB1bmlvbnMgaW5zaWRlIHN0cnVjdHVyZXMgaGVyZS4KKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBGcm9tIGhlcmUuCisKK1dlZCBTZXAgMjIgMTQ6MTQ6NTUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBlbnF1aXJlLmMgKEZQUk9QKTogUmVjb2duaXplIDgwMzg3IG9yIDY4ODgxIFhGbW9kZSBmb3JtYXQuCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBGb3IgYSBmaWVsZCBpbiBhbiBhbm9ueW1vdXMgdW5pb24sCisJbWFrZSB0d28gbmVzdGVkIENPTVBPTkVOVF9SRUZzLgorCShsb29rdXBfZmllbGQpOiBBZGRpdGlvbmFsIGFyZyBJTkRJUkVDVC4KKworV2VkIFNlcCAyMiAxNDo0NTo0MiAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKworICAgICAgICAqIHRtLnRleGkgKENMRUFSX0lOU05fQ0FDSEUpOiBOZXcgbWFjcm8uIAorICAgICAgICAqIGxpYmdjYzIuYyAoX19jbGVhcl9jYWNoZSk6IGFkZCBjYXNlIGZvciBuZXcgQ0xFQVJfSU5TTl9DQUNIRS4KKworICAgICAgICAqIGxpYmdjYzIuYyAoX19lbmFibGVfZXhlY3V0ZV9zdGFjayk6IEFkZCBjYXNlIGZvciBOZVhUL19fTUFDSF9fLiAKKyAgICAgICAgKiBjb25maWcvbTY4ay9uZXh0LmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEFwcGVuZCBjYWxsIHRvCisgICAgICAgIF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2suICAKKyAgICAgICAgKENMRUFSX0lOU05fQ0FDSEUpOiBOZXcgbWFjcm8uCisKKyAgICAgICAgKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0cnVjdG9yKTogVXNlIHRoZSB0eXBlIGdpdmVuCisgICAgICAgIGJ5IHRoZSBjb25zdHJ1Y3RvciBleHByZXNzaW9uIG9ubHkgaWYgYXZhaWxhYmxlLiAgT3RoZXJ3aXNlCisgICAgICAgIHVzZSB0aGUgdHlwZSBvZiB0aGUgZGVjbGFyZWQgdHlwZS4KKworVHVlIFNlcCAyMSAxOTo1MToyNiAxOTkzICBBbmRyZXcgTWNDYWxsdW0gIChtY2NhbGx1bUB2ZWluLmNzLnJvY2hlc3Rlci5lZHUpCisKKyAgICAgICAgKiBvYmpjL09iamVjdC5baG1dICgtY29tcGFyZTosIC1zaG91bGROb3RJbXBsZW1lbnQ6KTogQWRkZWQuCisKKyAgICAgICAgKiBvYmpjL2FyY2hpdmUuYyAob2JqY193cml0ZV90eXBlLCBvYmpjX3dyaXRlX3R5cGVzKTogVGFrZQorICAgICAgICB0YWtlIGNoYXIqKiBhcmdzIGZvciB3cml0aW5nIHN0cmluZ3MgaW4gc3RlYWQgb2YgY2hhciogdG8KKyAgICAgICAgbWF0Y2ggTmVYVC4gIEFsc28gY29ycmVjdCBzb21lIHR5cG9zIGluIGVycm9yIG1lc3NhZ2VzLgorCitUdWUgU2VwIDIxIDE4OjM1OjA0IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBjLXR5cGVjay5jIChwdXNoX21lbWJlcl9uYW1lKTogIFRha2UgYSBkZWNsIGluc3RlYWQgb2YgYSBzdHJpbmcuCisJQWxsb3cgREVDTF9OQU1FIHRvIGJlIE5VTEwgKGFub255bW91cyBmaWVsZHMpLgorCSogYy10eXBlY2suYyAocHVzaF9pbml0X2xldmVsLCBwcm9jZXNzX2luaXRfZWxlbWVudCk6ICBDaGFuZ2UKKwljYWxsZXJzIGFwcHJvcHJpYXRlbHkuCisKK1R1ZSBTZXAgMjEgMTY6NDQ6MTcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBsaWJnY2MyLmMgKExfYmIpOiBUZXN0IGluaGliaXRfbGliYy4KKworCSogTWFrZWZpbGUuaW4gKEVOUVVJUkUsIENST1NTX1RFU1QpOiBOZXcgdmFyaWFibGVzLgorCShhbGwuY3Jvc3MpOiBVc2UgdGhlbS4KKworCSogbWlwcy10ZmlsZS5jLCBtaXBzLXRkdW1wLmMgW0NST1NTX0NPTVBJTEVdOiBJbmNsdWRlIG1pcHMvYS5vdXQuaC4KKworCSogYXJtLmgsIGNsaXBwZXIuaCwgaTM4Ni5oLCBpODYwLmgsIHB5ci5oLCBzcHVyLmg6CisJKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogUGFzcyBqdXN0IHRoZSByZXR1cm4gdmFsdWUgdHlwZQorCXRvIGFnZ3JlZ2F0ZV92YWx1ZV9wLgorCitUdWUgU2VwIDIxIDEwOjUwOjE5IDE5OTMgIEphbiBCcml0dGVuc29uICAoYnNvbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoZ2VuX2xhYmVsX3J0eCwgZW1pdF9saW5lX25vdGUpOiBhZGQgY29uZGl0aW9uYWwgZm9yCisJYnl0ZWNvZGUuCisKKwkqIGV4cHIuYyAobW9kZV90b19jb25zdF9tYXAsIG1vZGVfdG9fbG9hZF9tYXAsIG1vZGVfdG9fc3RvcmVfbWFwKToKKwluZXcgdmFyaWFibGUuCisJKGJjX2luaXRfbW9kZV90b19vcGNvZGVfbWFwcyk6IG5ldyBmdW5jdGlvbjsgaW5pdGlhbGl6ZSBtYXBzLgorCShleHBhbmRfYXNzaWdubWVudCwgZXhwYW5kX2V4cHIsIGV4cGFuZF9pbmNyZW1lbnQpOiBhZGQKKwljb25kaXRpb25hbCBmb3IgYnl0ZWNvZGUuCisJKGJjX2V4cGFuZF9leHByLCBiY19sb2FkX21lbW9yeSwgYmNfc3RvcmVfbWVtb3J5LAorCWJjX2FsbG9jYXRlX2xvY2FsLCBiY19hbGxvY2F0ZV92YXJpYWJsZV9hcnJheSwgYmNfbG9hZF9leHRlcm5hZGRyLAorCWJjX3N0cmR1cCwgYmNfbG9hZF9leHRlcm5hZGRyX2lkLCBiY19sb2FkX2xvY2FsYWRkciwKKwliY19sb2FkX3Bhcm1hZGRyLCBiY19jYW5vbmljYWxpemVfYXJyYXlfcmVmLAorCWJjX2V4cGFuZF9jb21wb25lbnRfYWRkcmVzcywgYmNfcHVzaF9vZmZzZXRfYW5kX3NpemUsCisJYmNfZXhwYW5kX2FkZHJlc3MsIGJjX3J1bnRpbWVfdHlwZV9jb2RlLCBiY19nZW5fY29uc3RyX2xhYmVsLAorCWJjX2V4cGFuZF9jb25zdHJ1Y3RvciwgYmNfc3RvcmVfZmllbGQsIGJjX3N0b3JlX2JpdF9maWVsZCwKKwliY19sb2FkX2JpdF9maWVsZCwgYmNfYWRqdXN0X3N0YWNrKTogbmV3IGZ1bmN0aW9uLgorCisJKiBmdW5jdGlvbi5jIChwdXRfdmFyX2ludG9fc3RhY2ssIGV4cGFuZF9tYWluX2Z1bmN0aW9uKTogZG8KKwlub3RoaW5nIGZvciBieXRlY29kZS4KKwkoYmNfYnVpbGRfY2FsbGRlc2MpOiBuZXcgZnVuY3Rpb24uCisJKGluaXRfZnVuY3Rpb25fc3RhcnQpOiB1c2UgaXQgaWYgb3V0cHV0dGluZyBieXRlY29kZS4KKwkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0LCBleHBhbmRfZnVuY3Rpb25fZW5kKTogYWRkIGNvbmRpdGlvbmFsIGZvcgorCWJ5dGVjb2RlLgorCShiY19leHBhbmRfZnVuY3Rpb25fc3RhcnQsIGJjX2V4cGFuZF9mdW5jdGlvbl9lbmQpOiBuZXcgZnVuY3Rpb24uCisKKwkqIGludGVncmF0ZS5jIChvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogc2lnbmFsIGVycm9yIGZvciBieXRlY29kZS4KKworCSogcmVnY2xhc3MuYyAoZml4X3JlZ2lzdGVyKTogc2lnbmFsIGVycm9yIGZvciBieXRlY29kZS4KKworCSogc3RtdC5jIChzdHJ1Y3QgbmVzdGluZyk6IG5ldyBtZW1iZXJzIGJjX3N0YWNrX2xldmVsLCBza2lwX2xhYmVsKS4KKwkoc3RydWN0IGdvdG9fZml4dXApOiBuZXcgbWVtYmVycyBiY190YXJnZXQsIGxhYmVsLCBiY19oYW5kbGVkLAorCWJjX3N0YWNrX2xldmVsLgorCShlbWl0X25vcCwgZXhwYW5kX2NvbXB1dGVkX2dvdG8sIGV4cGFuZF9sYWJlbCwgZXhwYW5kX2dvdG8sCisJZXhwYW5kX2dvdG9faW50ZXJuYWwsIGZpeHVwX2dvdG9zLCBleHBhbmRfYXNtLAorCWV4cGFuZF9hc21fb3BlcmFuZHMsIGV4cGFuZF9leHByX3N0bXQsIGV4cGFuZF9zdGFydF9leHByX3N0bXQsCisJZXhwYW5kX2VuZF9leHByX3N0bXQsIGV4cGFuZF9zdGFydF9jb25kLCBleHBhbmRfc3RhcnRfZWxzZSwKKwlleHBhbmRfZW5kX2NvbmQsIGV4cGFuZF9zdGFydF9sb29wLCBleHBhbmRfbG9vcF9jb250aW51ZV9oZXJlLAorCWV4cGFuZF9lbmRfbG9vcCwgZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZSwgZXhwYW5kX251bGxfcmV0dXJuLAorCWV4cGFuZF9yZXR1cm4sIGV4cGFuZF9zdGFydF9iaW5kaW5ncywgZXhwYW5kX2VuZF9iaW5kaW5ncywKKwlleHBhbmRfZGVjbCwgZXhwYW5kX3N0YXJ0X2Nhc2UsIHB1c2hjYXNlLAorCWNoZWNrX2Zvcl9mdWxsX2VudW1lcmF0aW9uLCBleHBhbmRfZW5kX2Nhc2UpOiBhZGQgY29uZGl0aW9uYWwgZm9yCisJYnl0ZWNvZGUuCisJKGJjX2V4cGFuZF9nb3RvX2ludGVybmFsLCBiY19leHBhbmRfZml4dXAsIGJjX2ZpeHVwX2dvdG9zLAorCWJjX2V4cGFuZF9zdGFydF9jb25kLCBiY19leHBhbmRfZW5kX2NvbmQsIGJjX2V4cGFuZF9zdGFydF9lbHNlLAorCWJjX2V4cGFuZF9lbmRfYmluZGluZ3MsIGJjX2V4cGFuZF9kZWNsLAorCWJjX2V4cGFuZF92YXJpYWJsZV9sb2NhbF9pbml0LCBiY19leHBhbmRfZGVjbF9pbml0LAorCWJjX2V4cGFuZF9zdGFydF9jYXNlLCBiY19wdXNoY2FzZSwKKwliY19jaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZywgYmNfZXhwYW5kX2VuZF9jYXNlLAorCWJjX25ld191aWQpOiBuZXcgZnVuY3Rpb24uCisKKwkqIHRvcGxldi5jIChvdXRwdXRfYnl0ZWNvZGUpOiBuZXcgdmFyaWFibGUuCisJKGZfb3B0aW9ucyk6IGFkZCBlbnRyeSBmb3IgLWZieXRlY29kZS4KKwkoZmF0YWxfaW5zbl9ub3RfZm91bmQsIGNvbXBpbGVfZmlsZSwgcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uLAorCXJlc3Rfb2ZfY29tcGlsYXRpb24sIG1haW4pOiBhZGQgY29uZGl0aW9uYWwgZm9yIGJ5dGVjb2RlLgorCQorCSogY29uZmlnL202OGsvbTY4ay5jIGNvbmZpZy9tNjhrL202OGsuaDogYWRkIGJ5dGVjb2RlIHNwZWNpZmljCisJZGVmaW5pdGlvbnMuCisKKwkqIHZhcmFzbS5jICh0ZXh0X3NlY3Rpb24sIGRhdGFfc2VjdGlvbiwgbWFrZV9mdW5jdGlvbl9ydGwsCisJbWFrZV9kZWNsX3J0bCwgYXNzZW1ibGVfYXNtLCBhc3NlbWJsZV9zdGFydF9mdW5jdGlvbiwKKwlhc3NlbWJsZV96ZXJvcywgYXNzZW1ibGVfc3RyaW5nLCBhc3NlbWJsZV92YXJpYWJsZSwKKwlhc3NlbWJsZV9leHRlcm5hbCwgYXNzZW1ibGVfZXh0ZXJuYWxfbGliY2FsbCwgYXNzZW1ibGVfbGFiZWwsCisJYXNzZW1ibGVfbmFtZSwgYXNzZW1ibGVfc3RhdGljX3NwYWNlLAorCWFzc2VtYmxlX3RyYW1wb2xpbmVfdGVtcGxhdGUsIGFzc2VtYmxlX2ludGVnZXIsIGFzc2VtYmxlX3JlYWwsCisJZGVjb2RlX2FkZHJfY29uc3QsIG91dHB1dF9jb25zdGFudF9kZWYsIG91dHB1dF9jb25zdGFudF9wb29sLAorCW91dHB1dF9jb25zdGFudCwgb3V0cHV0X2NvbnN0cnVjdG9yKTogYWRkIGNvbmRpdGlvbmFsIGZvcgorCWJ5dGVjb2RlLiAKKwkoYmNfb3V0cHV0X2NvbnN0cnVjdG9yLCBvdXRwdXRfYnl0ZV9hc20sIGJjX21ha2VfcnRsLAorCWJjX291dHB1dF9kYXRhX2NvbnN0cnVjdG9yLCBiY19hc3NlbWJsZV9pbnRlZ2VyKTogCisJbmV3IGZ1bmN0aW9uLiAKKwkoaGFuZGxlX3ByYWdtYV93ZWFrKTogYnJlYWsgb3V0IGFzbSB3cml0aW5nIGNvZGUgZnJvbQorCWhhbmRsZV9wcmFnbWFfdG9rZW4sIG1vdmUgdG8gdmFyYXNtLmMsIHNvIGJ5dGVjb2RlLXNwZWNpZmljCisJbWFjcm9zIGNhbiBhY2Nlc3Mgc3RhdGljIHZhcmFzbSBkYXRhIGFuZCBmdW5jdGlvbnMuCisKKwkqIGMtcHJhZ21hLmMgKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiB1c2UgaGFuZGxlX3ByYWdtYV93ZWFrLgorCisJKiBmdW5jdGlvbi5oIChlbnVtIHByYWdtYV9zdGF0ZSk6IG1vdmVkIGZyb20gYy1wcmFnbWEuYworCisJKiBiYy1jb25maWcuaCwgYmMtZW1pdC5jLCBiYy1vcHRhYi5jLCBiYy1vcHRhYi5oLCBiYy10cmFucy5oLAorCWJjLXR5cGVjZC5kZWYsIG1vZGVtYXAuZGVmLCBieXRlY29kZS5kZWYsIGJjLWVtaXQuaCwgYmMtdHlwZWNkLmgsCisJYmktYXJpdHkuYywgYmktZGVmcy5oLCBiaS1sZXhlci5jLCBiaS1vcGNvZGUuYywgYmktb3BuYW1lLmMsCisJYmktcGFyc2VyLmMsIGJpLXBhcnNlci5oLCBiaS1yZXZlcnNlLmMsIGJpLXJ1bi5jLCBiaS1ydW4uaCwKKwliaS11bnBhcnNlLmM6IG5ldyBmaWxlLiBiYy0qIGFyZSBleGNsdXNpdmVseSBjb21waWxlciBmaWxlcywgYmktKgorCWFyZSBpbnRlcnByZXRlciBmaWxlcy4KKworCSogTWFrZWZpbGUuaW46IGFkZCBydWxlcyBhbmQvb3IgZGVwZW5kZW5jaWVzIGZvciBiYy1lbWl0Lm8sCisJYmMtb3B0YWIubywgYnl0ZWNvZGUsIGJpLWFyaXR5LCBiaS1vcGNvZGUsIGJpLW9wbmFtZSwgYmktbGV4ZXIsCisJYmktcnVuLm8sIGJpLXBhcnNlci5jLCBiaS1wYXJzZXIubywgYmktbGV4ZXIubyBiaS1hcml0eS5vLAorCWJpLW9wY29kZS5vLCBiaS1vcG5hbWUubywgYmktcmV2ZXJzZS5vLCBiYy1hcml0eS5oLCBiYy1vcGNvZGUuaCwKKwliYy1vcG5hbWUuaCwgYnl0ZWNvZGUubW9zdGx5Y2xlYW4sIGJ5dGVjb2RlLmRpc3RjbGVhbiwgCisJYnl0ZWNvZGUucmVhbGNsZWFuCisKKworVHVlIFNlcCAyMSAxMDoyMDo1NSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBUcnkgcHV0dGluZyBSRVRVUk4gYXQgZW5kIG9mIGZ1bmN0aW9uCisJYm90aCBhdCBzdGFydCBhbmQgYXQgZW5kIG9mIG91ciBvcHRpbWl6YXRpb24uCisKK01vbiBTZXAgMjAgMTc6MjI6MTMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogSGFuZGxlIGZsYWdfdm9sYXRpbGUgaGVyZS4KKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IFRSRUVfVEhJU19WT0xBVElMRSBubyBsb25nZXIKKwlkZXBlbmRzIG9uIGZsYWdfdm9sYXRpbGUuCisKK01vbiBTZXAgMjAgMTU6MjE6MzEgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBnc3RkZGVmLmg6IEJhY2sgb3V0IGNoYW5nZSBvZiBTZXAgMTUgKGhhbmRsZXMgU3VuIGxvc3NhZ2UpLgorCVByZXZlbnRlZCBib290c3RyYXBwaW5nLgorCitNb24gU2VwIDIwIDEyOjIxOjU2IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorCisgICAgICAgICogb2JqYy9hcmNoaXZlLmMgKG9iamNfcmVhZF9zdHJpbmcpOiBBbGxvY2F0ZSBuKzEgY2hhcnMgaW5zdGVhZCBvZgorICAgICAgICBqdXN0IG4uCisKK1N1biBTZXAgMTkgMTM6MDY6MzcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmdW5jdGlvbi5jIChjb21iaW5lX3RlbXBfc2xvdHMpOiBIYW5kbGUgZGVsZXRpb24gcHJvcGVybHkuCisJRnJlZSB0aGUgUlRMIHRoYXQgaXMgYWxsb2NhdGVkLgorCSogcnRsLmMgKHJ0eF9mcmVlKTogTmV3IGZ1bmN0aW9uLgorCisJKiBjb25maWcvbTY4ay9tNjhrLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEhhbmRsZSByZWdpc3RlciBvdmVybGFwCisJY2FzZSB0aGF0IG9jY3VyIGluIHNvZnQtZmxvYXQgWEZtb2RlLiAgQ29kZSBiYXNpY2FsbHkgY29waWVkIGZyb20KKwlpMzg2LmMuCisKK1N1biBTZXAgMTkgMTQ6NDA6MDggSkRUIDE5OTMgIE1pY2hhZWwgQmVuLUdlcnNob24gKG15YmdAY3MuaHVqaS5hYy5pbCkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IElmIFJFQUxfQVJJVEhNRVRJQyBpcyBkZWZpbmVkLAorCWFuZCBhIEZJWCBvcGVyYXRpb24gaXMgYXBwbGllZCB0byBjb252ZXJ0IGEgQ09OU1RfRE9VQkxFIHRvIGFuIElOVCwKKwl0aGUgQ09OU1RfRE9VQkxFIG11c3QgZmlyc3QgYmUgcm91bmRlZCB0byB6ZXJvLgorCitTdW4gU2VwIDE5IDEyOjQ5OjA1IDE5OTMgIEphbWVzIFZhbiBBcnRzZGFsZW4gIChqYW1lc0BiaWd0ZXguY2FjdHVzLm9yZykKKworCSogTWFrZWZpbGUuaW4gKG9iamMtaGVhZGVycyk6IERlcGVuZCBvbiBzdG1wLWZpeGluYyB0byBidWlsZCB0aGUKKwlpbmNsdWRlLyBzdWJkaXJlY3RvcnkgZmlyc3QuCisKK1N1biBTZXAgMTkgMDk6NDU6MTYgMTk5MyAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBnc3RkZGVmLmggKHNpemVfdCk6IEFjb3JuIFJJU0NpWCByZXF1aXJlcyBfX3NpemVfdCBkZWZpbmVkLgorCitTdW4gU2VwIDE5IDA5OjA4OjA5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdlbnJlY29nLmMgKHByZWRzKTogQ29ycmVjdCB0eXBvIGluIG5hbWUgb2YgYGNvbXBhcmlzb25fb3BlcmF0b3InLgorCShhZGRfdG9fc2VxdWVuY2UpOiBJZiBQUkVESUNBVEVfQ09ERVMgc3BlY2lmaWVkLCB3YXJuIGlmIHdlIGZpbmQgYQorCXByZWRpY2F0ZSBub3QgaW4gdGhhdCBsaXN0LgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUmVqZWN0IGFuIGFsdGVybmF0aXZlIGlmIHR3byBvcGVyYW5kcworCW1hdGNoIHRoZSBzYW1lIG91dHB1dCBhbmQgd2UgaGF2ZSB0byBkbyBhIHJlbG9hZC4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogQ2hhbmdlIHByb2Nlc3NvciB0eXBlIHRvCisJInJpb3MxIjsgYWxsb3cgInJpb3MiIGFzIHN5bm9ueW0uCisJQWRkIHN5bm9ueW1zIGZvciAibXBjNnh4Ii4KKwkqIHJzNjAwMC5oIChlbnVtIHByb2Nlc3Nvcl90eXBlKTogQ2hhbmdlIGZyb20gUklPUyB0byBSSU9TMS4KKwkoUFJPQ0VTU09SX0RFRkFVTFQpOiBMaWtld2lzZS4KKwkqIHJzNjAwMC5tZCAoYXR0cmlidXRlICJjcHUiKTogQ2hhbmdlIGZyb20gInJpb3MiIHRvICJyaW9zMSI7IGFsbAorCXVzZXMgY2hhbmdlZC4KKworCSogeG0tYWxwaGEuaDogQWRkIGV4dGVybiBkZWNsYXJhdGlvbiBmb3IgYWxsb2NhLgorCisJKiBhMjlrLmggKFBSRURJQ0FURV9DT0RFUyk6IEZpeCB0eXBvcyBhbmQgYWRkIG1pc3NpbmcgZW50cmllcy4KKwkqIGFscGhhLmgsIGk4NjAuaCBpOTYwLmgsIG04OGsuaCwgbWlwcy5oLCByczYwMDAuaDogTGlrZXdpc2UuCisKK1NhdCBTZXAgMTggMDk6Mjc6MDMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVzZSBlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZS4KKworU2F0IFNlcCAxOCAwODowMTo0NCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5oIChSRUdfQUxMT0NfT1JERVIpOiBBZGQgbWlzc2luZyBlbnRyaWVzLgorCisJKiBjb21iaW5lLmMgKHJlY29nX2Zvcl9jb21iaW5lKTogRml4IHR5cG9zIGluIHByZXZpb3VzIGNoYW5nZS4KKworCSogcmVsb2FkLmMgKGVhcmx5Y2xvYmJlcl9vcGVyYW5kX3ApOiBOZXcgZnVuY3Rpb24uCisJKGNvbWJpbmVfcmVsb2Fkcyk6IFVzZSBpdC4KKwkoZmluZF9yZWxvYWRzKTogU2V0IHJlbG9hZF9lYXJseWNsb2JiZXJzIGVhcmxpZXIuCisJKHJlZmVyc190b19yZWdub19mb3JfcmVsb2FkX3ApOiBDb3VudCBzb21ldGhpbmcgYmVpbmcgc3RvcmVkIGludG8KKwlpZiBpdCBpcyBhbiBlYXJseWNsb2JiZXIgb3BlcmFuZC4KKworRnJpIFNlcCAxNyAyMTo0MDowMiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChpbnZlcnRfdHJ1dGh2YWx1ZSk6ICBJbnN0ZWFkIG9mIGFib3J0aW5nLAorCWJ1aWxkIGEgVFJVVEhfTk9UX0VYUFIgd2hlbiB1bmFibGUgdG8gb3B0aW1pemUuCisJKFRoZSBhYm9ydHMgd2VyZSBub3QgYSBwcm9ibGVtIGZvciBDLCB3aGljaCBhbHdheXMgZmlyc3QKKwljYWxscyB0cnV0aHZhbHVlX2NvbnZlcnNpb24sIGJ1dCB0aGF0IHNob3VsZCBub3QgYmUKKwluZWNlc3NhcnkgZm9yIGEgbGFuZ3VhZ2Ugd2l0aCByZWFsIEJvb2xlYW5zLikKKworRnJpIFNlcCAxNyAyMDozODo1MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKG91dHB1dF9pbml0X2VsZW1lbnQpOiBVcGRhdGUgY29uc3RydWN0b3JfYml0X2luZGV4CisJZm9yIHVuaW9uIHR5cGVzLgorCisJKiBsaWJnY2MyLmM6IERlY2xhcmUgX19maXh1bnN4ZmRpIG9ubHkgaWYgcmVhbGx5IGhhdmUgWEZtb2RlLgorCUxpa2V3aXNlIGZvciBfX2ZpeHVuc3RmZGkuCisKK0ZyaSBTZXAgMTcgMTg6MDg6MzcgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChyZWNvZ19mb3JfY29tYmluZSk6IEFsd2F5cyByZWplY3QgYSBQQVJBTExFTCBjb250YWluaW5nCisJb3VyIHNwZWNpYWwgQ0xPQkJFUi4KKworCSogY3NlLmMgKGZvbGRfcnR4LCBjYXNlIE1JTlVTKTogQ29weSByZXN1bHQgb2J0YWluZWQgZnJvbQorCWhhc2ggdGFibGUuCisKKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBTVUJSRUcpOiBJZiBwYXJhZG94aWNhbCBTVUJSRUcgb2YgYSAKKwljb25zdGFudCwgcmV0dXJuIHRoZSBjb25zdGFudC4KKworCSogYy10eXBlY2suYyAobG9va3VwX2ZpZWxkKTogVXNlIEhPU1RfV0lERV9JTlQgaW5zdGVhZCBvZiBsb25nIG9yCisJaW50IHdoZW4gd2Ugd2FudCBpbnRlZ2VyIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyIGRpZmZlcmVuY2UuCisKK0ZyaSBTZXAgMTcgMTY6MDM6MjIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6ICBGb3IgQ0hBUl9UWVBFIGFuZCBCT09MRUFOX1RZUEUgKGluCisJbGFuZ3VhZ2VzIHRoYXQgaGF2ZSB0aGVtIC0gbm90IEMpLCBhZG9wdCBhbiBBSVggY29udmVudGlvbgorCXRvIGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gb3RoZXIgdHlwZXMuCisKK0ZyaSBTZXAgMTcgMDk6MDI6MDYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmggKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogRml4IGRlY2xhcmF0aW9uLgorCitUaHUgU2VwIDE2IDEyOjA1OjQ0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGZpeGluYy5yZWFkeSk6IE5ldyB0YXJnZXQsIGxpa2UgbGliZ2NjMi5yZWFkeSwKKwlkZXBlbmRpbmcgb24geGdjYyBhbmQgY3BwLgorCShzdG1wLWZpeGluYyk6IERlcGVuZCBvbiBmaXhpbmMucmVhZHkgaW5zdGVhZCBvZiB4Z2NjIGFuZCBjcHAuCisJKGNsZWFuKTogUmVtb3ZlIGZpeGluYy5yZWFkeS4KKworVGh1IFNlcCAxNiAxMDoyMjoxNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBGb3IgUExVUyBvcGVyYW5kLCBjYWxsIGZpbmRfcmVsb2Fkc190b3BsZXYuCisKKwkqIG9wdGFicy5jIChleHBhbmRfY29tcGxleF9hYnMpOiBGaXggdHlwbyBpbiBwcmV2IGNoYW5nZS4KKworVGh1IFNlcCAxNiAwMjowNjoxMSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGZsYWdzLmggKGN1cnJlbnRfZnVuY3Rpb25faGFzX25vbmxvY2FsX2dvdG8pOiBEZWNsYXJlLgorCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IGZpZWxkIGhhc19ub25sb2NhbF9nb3RvLgorCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9oYXNfbm9ubG9jYWxfZ290byk6IE5ldyB2YXIuCisJKHB1c2hfZnVuY3Rpb25fY29udGV4dCk6IFNhdmUgaXQuCisJKHBvcF9mdW5jdGlvbl9jb250ZXh0KTogUmVzdG9yZSBpdC4KKwkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXQgaXQuCisJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogRG9uJ3QgaW5saW5lIGlmIGl0J3Mgc2V0LgorCSogc3RtdC5jIChleHBhbmRfZ290byk6IFNldCBpdC4KKworCSogcmVvcmcuYyAobWFya19zZXRfcmVzb3VyY2VzKTogRm9yIENBTExfSU5TTiwgaWYgZm9sbG93ZWQgYnkgYQorCU5PVEVfSU5TTl9TRVRKTVAgbm90ZSwgdGhlbiBhc3N1bWUgdGhhdCBhbGwgcmVnaXN0ZXJzIGFyZSBjbG9iYmVyZWQuCisJSGFuZGxlIGNhc2Ugd2hlcmUgQ0FMTF9JTlNOIGlzIGluIGEgc2VxdWVuY2UuCisKK1dlZCBTZXAgMTUgMTc6Mzg6MzggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnc3RkZGVmLmg6IERlbGV0ZSB0aGUgY29uZGl0aW9uYWwgdGhhdCB1c2VkIHRvIHNlbWktYXZvaWQKKwlpbnRlcmZlcmVuY2Ugd2l0aCBzeXMvc3RkdHlwZXMuaCBvbiBTdW4uICAoZml4aW5jbHVkZXMgbWFrZXMKKwlpdCBvay4pCisKK1dlZCBTZXAgMTUgMTY6MTc6MDkgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9GSUxFX1NUQVJUKTogRml4IGFjY2VzcyBpbmZvcm1hdGlvbiBmb3IgJExJVCQKKwlzdWJzcGFjZS4KKworV2VkIFNlcCAxNSAxNDo1Mzo0OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9uczMyay9uczMyay5tZDogQWRkIHBlZXBob2xlcyBmb3Igc3RhY2sgYWRqdXN0IHBsdXMgcHVzaGVzLgorCitXZWQgU2VwIDE1IDEzOjM4OjI0IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKyAgICAgICAgKiBjLXR5cGVjay5jIChsb29rdXBfZmllbGQpOiBOZXcgZnVuY3Rpb24gKGZvciBjaGlsbCkuCisJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBDYWxsIGl0LgorCitXZWQgU2VwIDE1IDA4OjEyOjMyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbGliZ2NjMi5jOiBEZWNsYXJlIF9fZml4dW5zeGZkaSBhbmQgX19maXh1bnN0ZmRpLgorCisJKiBpbnRlZ3JhdGUuYyAoY29weV9mb3JfaW5saW5lLCBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6CisJQWx3YXlzIHByZXNlcnZlIHRoZSB2b2xhdGlsIGZsYWcgd2hlbiBjb3B5aW5nIEFTTV9PUEVSQU5EUy4KKworVHVlIFNlcCAxNCAyMTo1NjoyMCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKHZhbGlkX2NvbXBvdW5kX2V4cHJfaW5pdGlhbGl6ZXIpOiBOZXcgZnVuY3Rpb24uCisJKGRpZ2VzdF9pbml0KTogSGFuZGxlIGNvbXBvdW5kIGV4cHJlc3Npb25zIGFzIGluaXRpYWxpemVycyB3aGVuCisJcGVkYW50aWMuCisKKwkqIHZhcmFzbS5jIChpbW1lZF9kb3VibGVfY29uc3QsIGltbWVkX3JlYWxfY29uc3RfMSk6IERvbid0IHRvdWNoCisJY29uc3RfZG91YmxlX2NoYWluIGlmIG5vdCBpbnNpZGUgYSBmdW5jdGlvbi4KKworVHVlIFNlcCAxNCAxNjoyMjowMyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6ICBDb21wYXJlIHR5cGVzIHVzaW5nIGNvbXB0eXBlcworCWluc3RlYWQgb2YgY29tcGFyaW5nIHBvaW50ZXJzLiAgKEhlbHBzIENoaWxsIGZyb250IGVuZC4pCisKK1R1ZSBTZXAgMTQgMTI6MTY6NTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjYWxscy5jIChlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6IEZpbmlzaCBtYWtpbmcgaXQgd29yay4KKwkqIG9wdGFicy5jIChleHBhbmRfZmxvYXQpOiBVc2UgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUuCisJKGV4cGFuZF91bm9wLCBleHBhbmRfYmlub3ApOiBMaWtld2lzZS4KKwkoZXhwYW5kX2NvbXBsZXhfYWJzKTogTGlrZXdpc2UuCisJQWxzbyBwYXNzIFNVQk1PREUgYXMgb3V0cHV0IG1vZGUgdG8gZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUuCisJKiBmdW5jdGlvbi5jIChhZ2dyZWdhdGVfdmFsdWVfcCk6IEFsbG93IHR5cGUgbm9kZSBhcyBhcmd1bWVudC4KKworCSogY29uZmlnL25zMzJrL25zMzJrLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6CisJSWYgb21pdHRpbmcgZnJhbWUgcG9pbnRlciwgb3V0cHV0IGFuIGFkanNwZCBpZiBuZWNlc3NhcnkuCisJVXNlIG1vdmQgdG8gc2F2ZSByZWdpc3RlcnMgaWYgZm91ciBvciBsZXNzIG5lZWQgc2F2aW5nLgorCVNldCBERVBUSCBwcm9wZXJseS4KKworCSogcmVsb2FkLmMgKGZpbmRfZHVtbXlfcmVsb2FkKTogTmV3IGFyZ3MgaW5tb2RlLCBvdXRtb2RlLgorCShmaW5kX3JlbG9hZHMpOiBQYXNzIG5ldyBhcmdzLgorCShwdXNoX3JlbG9hZCk6IExpa2V3aXNlLgorCitNb24gU2VwIDEzIDEyOjUyOjAzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoc2V0X2luaXRfaW5kZXgpOiBEb24ndCBhbGxvdyB2YXJpYWJsZSBpbmRpY2VzLgorCisJKiBjLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IEhhbmRsZSBUUkVFX1BVUlBPU0UKKwlvZiBhcnJheSBjb25zdHJ1Y3RvciBlbGVtZW50cy4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IEhhbmRsZSBUUkVFX1BVUlBPU0Ugb2YgYXJyYXkgY29uc3RydWN0b3IuCisJKGV4cGFuZF9leHByLCBBUlJBWV9SRUYgY2FzZSk6IExpa2V3aXNlLgorCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0cnVjdG9yKTogSGFuZGxlIGluZGV4IHZhbHVlIGluCisJdGhlIFRSRUVfUFVSUE9TRSwgZm9yIGFycmF5IGNvbnN0cnVjdG9ycy4KKworCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCk6IFdoZW4gcHV0dGluZyBhbiBlbHQgaW50byBhCisJQ09OU1RSVUNUT1IsIGFsd2F5cyBzZXQgdGhlIFRSRUVfUFVSUE9TRSAoZXZlbiBmb3IgYXJyYXlzKS4KKwlDb3B5IHRoZSBub2RlIGlmIGl0J3MgYW4gSU5URUdFUl9DU1QuCisJKG91dHB1dF9wZW5kaW5nX2luaXRfZWxlbWVudHMpOiBJZiBoYXZlIGdhcCBhbmQgbm90IGluY3JlbWVudGFsLAorCWFkdmFuY2UgY29uc3RydWN0b3JfdW5maWxsZWRfZmllbGRzIG9yIGNvbnN0cnVjdG9yX3VuZmlsbGVkX2luZGV4LgorCitTdW4gU2VwIDEyIDIzOjAwOjI1IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQVJSQVlfUkVGKTogIENvZXJjZSBsb3dlciBib3VuZCAoaWYKKwlub24temVybykgdG8gc2l6ZXR5cGUgYmVmb3JlIHN1YnRyYWN0aW9uLgorCitTdW4gU2VwIDEyIDE2OjE4OjE4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAocHVzaF9pbml0X2xldmVsKTogUG9wIGFueSBpbXBsaWNpdCBsZXZlbHMKKwl0aGF0IGhhdmUgYmVlbiBmaWxsZWQgdXAuCisJRG9uJ3QgZGllIGlmIGNvbnN0cnVjdG9yX3R5cGUgaXMgMC4KKwkocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBJZiBWQUxVRSBpcyAwIGZvciB1bmlvbiB0eXBlLAorCXVwZGF0ZSBjb25zdHJ1Y3Rvcl9iaXRfaW5kZXguCisKK1N1biBTZXAgMTIgMTA6NTk6MDggMTk5MyAgQmlsbCBDb3ggIChiaWxsQGN5Z251cy5jb20pCisKKwkqIGMtdHlwZWNrLmMgKGRpZ2VzdF9pbml0KTogUmVtb3ZlIG9ic29sZXRlIGNvbW1lbnRzIG9uIGFyZ3MKKwlUQUlMLCBPRl9XSEFULgorCitTdW4gU2VwIDEyIDA4OjQ1OjM2IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbG9vcC5jIChiYXNpY19pbmR1Y3Rpb25fdmFyKTogTmV3IGFyZyBNT0RFLgorCVVzZSBpdCB0byBjYWxsIGNvbnZlcnRfbW9kZXMuCisJKHN0cmVuZ3RoX3JlZHVjZSk6IFN1cHBseSB0aGUgbmV3IGFyZyB0byBiYXNpY19pbmR1Y3Rpb25fdmFyLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogVXNlIGNvbnZlcnRfbW9kZXMuCisJKGVtaXRfc3RvcmVfZmxhZyk6IExpa2V3aXNlLgorCitTYXQgU2VwIDExIDE2OjQ0OjE1IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBQcm92aWRlIHVwd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHZlcnNpb24KKwlvZiBjb2xsZWN0IChhdm9pZHMgaW5maW5pdGUgbXV0dWFsIHJlY3Vyc2lvbiBiZXR3ZWVuIHRoZSB0d28pLgorCitTYXQgU2VwIDExIDEzOjA1OjA3IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbnN0cnVjdG9yX25vX2ltcGxpY2l0KTogIE5ldyB2YXJpYWJsZS4KKwlJZiBzZXQsIGRpcy1hbGxvd3MgZWxpZGluZyBvZiBicmFjZXMgaW4gaW5pdGlhbGl6ZXJzLgorCShTZXQgYnkgQ2hpbGwgZnJvbnQtZW5kLikKKwkqIGMtdHlwZWNrLmMgKHByb2Nlc3NfaW5pdF9lbGVtZW50KTogIFVzZSBpdC4KKworU2F0IFNlcCAxMSAxNTo1NToyNSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBUdXJuIG9mZiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTCisJcm91bmRpbmcgb2YgZmllbGQgYml0cG9zLCBpZiBtYXhpbXVtX2ZpZWxkX2FsaWdubWVudCBpcyBub256ZXJvLgorCitGcmkgU2VwIDEwIDA4OjUyOjAxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY2hlY2tfaW5pdF90eXBlX2JpdGZpZWxkcyk6IENoZWNrIGZvciBtaXNtYXRjaAorCWJldHdlZW4gZmllbGQncyBtb2RlIGFuZCBpdHMgdHlwZSdzIG1vZGUuCisKKwkqIGV4cHIuYyAocHJvdGVjdF9mcm9tX3F1ZXVlKTogRG9uJ3QgYWx0ZXIgYW4gZXhpc3RpbmcgTUVNLgorCShjb252ZXJ0X21vZGVzKTogVXNlIFgncyBtb2RlIChub3QgT0xETU9ERSkgdW5sZXNzIGl0IGlzIFZPSURtb2RlLgorCitGcmkgU2VwIDEwIDAxOjAxOjMyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSBvcGVyYXRpbmcgc3lzdGVtIGBuZXRic2QqJy4KKworVGh1IFNlcCAgOSAxODowOToxNCAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChyZWFsbHlfc3RhcnRfaW5jcmVtZW50YWxfaW5pdCwgcHVzaF9pbml0X2xldmVsKToKKwlBZGQgc3VwcG9ydCBmb3IgYXJyYXlzIHdpdGggbm9uLXplcm8gbG93ZXIgYm91bmRzLiAoVXNlZCBieSBDaGlsbC4pCisKK1RodSBTZXAgIDkgMTk6MjA6NTkgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiB0cmVlLmMgKG1ha2Vfbm9kZSk6IFB1dCBQQVJNX0RFQ0xzIG9mIG5lc3RlZCBmdW5jdGlvbnMgb250bworCXBhcmVudCdzIHNhdmVhYmxlIG9ic3RhY2suCisKK1RodSBTZXAgIDkgMTQ6MTc6MDAgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoQ1JPU1NfTElCR0NDMSk6IE5ldyB2YXJpYWJsZS4gIFJ1bGUgdG8gdXNlIHdoZW4KKwlidWlsZGluZyBsaWJnY2MxLmEgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICBEZWZhdWx0cyB0bworCWxpYmdjYzEuY3Jvc3MuCisJKiBjcm9zcy1tYWtlIChMSUJHQ0MxKTogRGVmYXVsdCB0byAkKENST1NTX0xJQkdDQzEpIHJhdGhlciB0aGFuCisJbGliZ2NjMS5jcm9zcy4KKwkqIGNvbmZpZy9pMzg2L3QtbmV4dCwgY29uZmlnL2kzODYvdC1zb2wyLCBjb25maWcvbTg4ay90LWRndXgsCisJY29uZmlnL204OGsvdC1sdW5hLCBjb25maWcvbTg4ay90LWRndXgtZ2FzLAorCWNvbmZpZy9tODhrL3QtbHVuYS1nYXMsIGNvbmZpZy9tODhrL3QtbTg4aywKKwljb25maWcvbTg4ay90LW04OGstZ2FzLCBjb25maWcvbTg4ay90LXN5c3Y0LAorCWNvbmZpZy9tNjhrL3QtbmV4dCwgY29uZmlnL21pcHMvdC1ic2QsIGNvbmZpZy9taXBzL3QtYnNkLWdhcywKKwljb25maWcvbWlwcy90LW1pcHMsIGNvbmZpZy9taXBzL3QtbWlwcy1nYXMsCisJY29uZmlnL21pcHMvdC1vc2Zyb3NlLCBjb25maWcvbWlwcy90LXN2cjMsCisJY29uZmlnL21pcHMvdC1zdnIzLWdhcywgY29uZmlnL21pcHMvdC1zdnI0LAorCWNvbmZpZy9taXBzL3Qtc3ZyNC1nYXMsIGNvbmZpZy9taXBzL3QtdWx0cml4LCBjb25maWcvcGEvdC1wYSwKKwljb25maWcvc3BhcmMvdC1zb2wyLCBjb25maWcvaDgzMDAvdC1oODMwMCwgY29uZmlnL3NoL3Qtc2gsCisJY29uZmlnL3QtbGliYy1vayAoQ1JPU1NfTElCR0NDMSk6IERlZmluZWQgdG8gYmUgbGliZ2NjMS5udWxsLgorCitUaHUgU2VwICA5IDA5OjQ4OjU0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFNldCBpZ25vcmUgZm9yIENPTkRfRVhQUiB3aXRoIFZPSURfVFlQRS4KKworCSogZXhwci5jIChjb252ZXJ0X21vZGVzKTogTmV3IGZ1bmN0aW9uLgorCShjb252ZXJ0X3RvX21vZGUpOiBVc2UgdGhhdC4KKwkqIGV4cHIuaCAoY29udmVydF9tb2Rlcyk6IERlY2xhcmVkLgorCSogb3B0YWJzLmMgKGV4cGFuZF90d292YWxfYmlub3ApOiBVc2UgY29udmVydF9tb2Rlcy4KKwkoZXhwYW5kX2NvbXBsZXhfYWJzKTogTGlrZXdpc2UuCisJKGVtaXRfY21wX2luc24pOiBMaWtld2lzZS4KKwkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgorCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBMaWtld2lzZS4KKwkoZW1pdF9zdG9yZV9mbGFnKTogTGlrZXdpc2UuCisJKiBsb29wLmMgKGJhc2ljX2luZHVjdGlvbl92YXIpOiBMaWtld2lzZS4KKwkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisKKwkqIG9wdGFicy5jICh3aWRlbl9vcGVyYW5kKTogTmV3IGFyZyBPTERNT0RFLgorCShleHBhbmRfYmlub3AsIGV4cGFuZF91bm9wKTogRml4IGNhbGxzIHRvIHdpZGVuX29wZXJhbmQuCisKK1dlZCBTZXAgIDggMTg6MjU6NTAgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBzcGFyYy5jLCBzcGFyYy5oLCBzcGFyYy5tZDogQ29zbWV0aWMgY2hhbmdlcyBvbmx5LiAgSnVzdAorCXJlb3JkZXJlZCBjb2RlIGEgbGl0dGxlLgorCitXZWQgU2VwICA4IDE0OjQ5OjU5IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9wYXJtcyk6IEZvciBwYXJhbWV0ZXJzIGluIHJlZ2lzdGVycywgaWYgdXNlCisJREVDTF9SVEwsIHRoZW4gbXVzdCB1c2UgVFJFRV9UWVBFIGluc3RlYWQgb2YgREVDTF9BUkdfVFlQRS4KKworCSogbWlwcy5tZCAoZml4X3RydW5jZGZzaTIsIGZpeHRydW5jc2ZzaTIpOiBNYXJrIFNJbW9kZSBzY3JhdGNoCisJcmVnaXN0ZXIgYXMgZWFybHkgY2xvYmJlcmVkIHdoZW4gZGVzdCBpcyBpbiBtZW1vcnkuCisKKwkqIGZpeGluY2x1ZGVzIChzYnVzZGV2L2F1ZGlvdmFyLmgpOiBGaXggd3JvbmdseSBlZGl0ZWQgLy8gY29tbWVudHMKKwluZXN0ZWQgd2l0aGluIC8qICovIGNvbW1lbnRzLgorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogRG9uJ3Qgd2FybiBmb3IgLXggYWZ0ZXIgbGFzdCBpbnB1dCBmaWxlCisJaWYgc3BlY19sYW5nIGlzIHplcm8uCisKKwkqIGZpeGluYy5taXBzIChic2Q0My9ic2Q0My5oKTogQ2hhbmdlIC8qKi8gdG8gIyMuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogV2hlbiB0cnVuY2F0aW5nLCBjYWxsIGZvcmNlX3JlZyBmaXJzdCBpZgorCWl0IGlzIHNvbWV0aGluZyB0aGF0IGdlbl9sb3dwYXJ0IHdvbid0IHVuZGVyc3RhbmQuCisKKwkqIHN5cy1wcm90b3MuaCAoZ2V0cmxpbWl0LCBnZXRydXNhZ2UsIHNldHJsaW1pdCk6IFJldHVybiBpbnQgbm90IHZvaWQuCisKK1dlZCBTZXAgIDggMTE6Mjg6NDEgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay5jIChvdXRwdXRfY2FsbCk6IEF2b2lkIHVzZSBvZiBqc3IubiByMSwgdGhpcyBsb3NlcyBvbgorCXRoZSA4ODExMC4KKworV2VkIFNlcCAgOCAxMDo1MTowNyAxOTkzICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLmg6IChNQVNLXyosIFRBUkdFVF8qKTogQWRkIHRhcmdldCBtYXNrcyBhbmQgdGVzdHMuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCB0YXJnZXQgc3dpdGNoZXMgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcworCWFuZCBtbmVtb25pY3Mgb3B0aW9ucy4KKwkoVEFSR0VUX09QVElPTlMpOiBBZGQgY3B1IHR5cGUgYXMgc3BlY2lhbCB0YXJnZXQgb3B0aW9uLgorCShPVkVSUklERV9PUFRJT05TKTogQ2FsbCByczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyB0byBkZWNpcGhlci4KKworCSogcnM2MDAwLmMgKHJzNjAwMF9jcHUsIHJzNjAwMF9jcHVfc3RyaW5nKTogTmV3IHZhcmlhYmxlcy4KKwkocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHJzNjAwMC5tZCAoZGVmaW5lX2F0dHIpOiBFeHBhbmQgbGlzdCBvZiBpbnN0cnVjdGlvbiBhdHRyaWJ1dGVzLgorCShkZWZpbmVfZnVuY3Rpb25fdW5pdCk6IENvbXB1dGUgZGVsYXkgaW5mb3JtYXRpb24gYmFzZWQKKwl1cG9uIHByb2Nlc3NvciB0eXBlIGFuZCBleHBhbmQgZnVuY3Rpb25hbCB1bml0IHR5cGVzLgorCShtdWxzaTMsIGRpdnNpMywgZGl2bW9kc2k0LCBkaXZzZjMsIGRpdmRmMywgbXVsZGYzLCBtb3ZzZik6CisJVXNlIGV4cGFuZGVkIGF0dHJpYnV0ZXMuCisJKGxvYWQgd2l0aCB1cGRhdGUpOiBMaWtld2lzZS4KKworV2VkIFNlcCAgOCAwNjozNDozMiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKG91dHB1dF9pbml0X2VsZW1lbnQpOiBXaGVuIGFkZGluZyB0bworCWNvbnN0cnVjdG9yX3BlbmRpbmdfZWx0cywgY29weSBmaWVsZC4KKworV2VkIFNlcCAgOCAwNjoxNTo1OCAxOTkzICBEYXZpZCBHZXJzaG92aWNoICAoZGdpcnNoQGlpbC5pbnRlbC5jb20pCisKKwkqIGV4cG1lZC5jIChtYWtlX3RyZWUsIGNhc2UgQ09OU1RfSU5UKTogUHJvcGVybHkgc2V0IGhpZ2ggcGFydCBpZgorCXVuc2lnbmVkLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wKTogTXVzdCBhbHdheXMgd2lkZW4gc2Vjb25kIG9wZXJhbmQKKwlvZiBzaGlmdC4KKworV2VkIFNlcCAgOCAwNToxNjo1OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHB1c2hfaW5pdF9sZXZlbCk6IERpYWdub3NlIGV4dHJhIGJyYWNlIGdyb3VwIGF0IGVuZAorCW9mIHJlY29yZC4gIFNldCBjb25zdHJ1Y3Rvcl90eXBlIHRvIDAuCisJKHBvcF9pbml0X2xldmVsKTogRG9uJ3Qgb3V0cHV0IGFueXRoaW5nIGlmIGNvbnN0cnVjdG9yX3R5cGUgaXMgMC4KKwkocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBEbyBub3RoaW5nIGlmIGNvbnN0cnVjdG9yX3R5cGUgaXMgMC4KKworVHVlIFNlcCAgNyAxOToxMToyMCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWNvbW1vbi5jIChjX2J1aWxkX3R5cGVfdmFyaWFudCk6IEFsbG9jYXRlIG5ldyB0eXBlIGluIHNhbWUKKwlvYnN0YWNrIGFzIG9sZCBvbmUuCisKK1R1ZSBTZXAgIDcgMTc6NDU6NTAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IEZpeCBlcnJvciBtZXNzYWdlIHRleHQuCisKK1R1ZSBTZXAgIDcgMTQ6MzI6NTEgMTk5MyAgTGVvbmlkIEJhcmF6ICAobGJhcmF6QGlpbC5pbnRlbC5jb20pCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogQ29ycmVjdCB0eXBlIG9mIEJJVC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogRG9uJ3QgdHJ5IHRvIHByb2Nlc3MgYW4gUlRMX0VYUFIuCisKK1R1ZSBTZXAgIDcgMDY6MTg6NTAgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBIYW5kbGUgZW51bSBjb25zdGFudHMgYmlnZ2VyIHRoYW4gb25lIHdvcmQuCisJRG9uJ3QgcHJpbnQgYmlnIHVuc2lnbmVkIHZhbHVlcyBhcyBuZWdhdGl2ZS4KKwkqIGMtZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogQ2hvb3NlIHR5cGUgcHJvcGVybHkgZm9yIHdpZGUgY29uc3RhbnRzLgorCShmaW5pc2hfZW51bSk6IEFsd2F5cyBzZXQgdHlwZSBvZiB0aGUgZW51bWVyYXRvcnMgdG8gdGhlIGVudW0gdHlwZS4KKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IEZvciBlbnVtIHRoYXQncyB1bnNpZ25lZCwKKwlpZiBpdCdzIGF0IGxlYXN0IGFzIHdpZGUgYXMgaW50LCBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIHR5cGUuCisKKwkqIGNvbmZpZy9pMzg2L3NvbDIuaCAoTElCX1NQRUMsIExJTktfU1BFQywgU1dJVENIX1RBS0VTX0FSRyk6CisJRGVmaW5pdGlvbnMgY29waWVkIGZyb20gc3BhcmMvc29sMi5oLgorCShDUFBfU1BFQyk6IENvcGllZCBmcm9tIHNwYXJjL3NvbDIuaCwgYnV0IGRlbGV0ZWQgLW1zcGFyY2xpdGUuCisKK01vbiBTZXAgIDYgMTQ6NDM6MjAgMTk5MyAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBnZW5leHRyYWN0LmMgKGluc25fbmFtZV9wdHIpOiBEZWZpbmUgZm9yIGRlYnVnZ2luZy4KKwkod2Fsa19ydHgsIGNhc2UgTUFUQ0hfT1BfRFVQKTogRXhwYW5kIHJlY29nX2R1cF9sb2MgdXNpbmcgWEVYUCBub3QKKwlYVkVDRVhQLgorCitNb24gU2VwICA2IDEzOjI4OjAzIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJ0bGFuYWwuYyAobW9kaWZpZWRfYmV0d2Vlbl9wKTogSGFuZGxlIHZlY3RvcnMuCisJKG1vZGlmaWVkX2luX3ApOiBOZXcgZnVuY3Rpb24uCisJKHJlZmVyc190b19yZWdub19wKTogSWYgc2V0dGluZyBBUCwgRlAsIG9yIFNQLCB3ZSBjbG9iYmVyIHRoZQorCXZpcnR1YWwgcmVnaXN0ZXJzLgorCSogb3B0YWJzLmMgKGVtaXRfbGliY2FsbF9ibG9jayk6IERvbid0IG1vdmUgaW5zbnMgdGhhdCByZWZlcmVuY2UKKwl0aGluZ3Mgc2V0IGluIHByZXZpb3VzIGluc25zLgorCitNb24gU2VwICA2IDA4OjM1OjM0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL21pcHMvbWlwcy5oOiBEb24ndCBkZWNsYXJlIGFib3J0LgorCitNb24gU2VwICA2IDAxOjAzOjU4IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogcHJvdG9pemUgKGFib3J0KTogQ29ycmVjdCB2b2xhdGlsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKworU3VuIFNlcCAgNSAxODoyMzowOSAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogQWRkIHZhLWg4MzAwLmguCisKKwkqIGNvbGxlY3QyLmMgKG91cl9maWxlX25hbWUsIGxhc3RfZmlsZV9uYW1lKTogZGVsZXRlZC4KKwkob3VyX2ZpbGVfbmFtZXMpOiBOZXcgdmFyaWFibGUuCisJKGlzX2luX3ByZWZpeF9saXN0KTogTmV3IGZ1bmN0aW9uLgorCShmaW5kX2FfZmlsZSk6IENhbGwgaXNfaW5fcHJlZml4X2xpc3QuCisJKG1haW4pOiBNYWtlIENPTExFQ1RfTkFNRVMgYSBsaXN0IG9mIG91ciBpbnZvY2F0aW9ucy4KKwlJZiB3ZSd2ZSBpbnZva2VkIG91cnNlbHZlcywgdHJ5IGFnYWluIHdpdGggbGRfZmlsZV9uYW1lLgorCitTdW4gU2VwICA1IDE2OjAwOjQ3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogV2hlbiBwYXJtIG5lZWRzIGNvbnZlcnNpb24gb24gZW50cnksCisJZG9uJ3Qgc3RvcmUgaXQgYmFjayBpbiB0aGUgc2xvdCB3aGVyZSBpdCB3YXMgcGFzc2VkLgorCitTdW4gU2VwICA1IDE0OjUxOjE0IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogYy1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRm9yIFBBUk1fREVDTHMsIG9ubHkgY2FsbAorCWNfYnVpbGRfdHlwZV92YXJpYW50IGlzIGNvbnN0cCBvciB2b2xhdGlsZXAgaXMgdHJ1ZS4KKworU3VuIFNlcCAgNSAwNjo0NDowOSAxOTkzICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworICAgICAgICAqIHJzNjAwMC5jOiAocHJpbnRfb3BlcmFuZCk6IENvbnZlcnQgZnByaW50ZiBvZiBzaW5nbGUgbGV0dGVycworCXRvIHB1dGMgYW5kIGNvbnZlcnQgZnByaW50ZiBvZiBjb25zdGFudCBzdHJpbmdzIHRvIGZwdXRzLgorCU91dHB1dCAnJXUnIG9wZXJhbmQgYXMgaGV4YWRlY2ltYWwuCisKK1NhdCBTZXAgIDQgMTE6MTY6MTggMTk5MyAgQ3JhaWcgQnVybGV5ICAoYnVybGV5QGdudS5haS5taXQuZWR1KQorCisJKiBjLWNvbW1vbi5jICh0cnV0aHZhbHVlX2NvbnZlcnNpb24pOiBBIGNvbXBsZXggdmFsdWUgaXMgbm9uemVybworCWlmIGVpdGhlciBwYXJ0IGlzIG5vbnplcm8sIG5vdCBpZiBib3RoIHBhcnRzIGFyZSBub256ZXJvLgorCitGcmkgU2VwICAzIDE5OjAyOjQxIDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLWRlY2wuYyAoYnVpbGRfZW51bWVyYXRvcik6IEFwcGx5IGRlZmF1bHQgY29udmVyc2lvbiB0bworCWNvbnN0YW50LWV4cHJlc3Npb24uCisKK0ZyaSBTZXAgIDMgMTg6MDM6NDcgMTk5MyAgQ2hyaXMgTGFuZyAgKGNocmlzbEBtaXJjMDAubmNtcy5vcmcpCisKKyAgICAgICAgKiBjY2NwLmMgKHNraXBfaWZfZ3JvdXApOiBDaGVjayBmb3IgdHJhZGl0aW9uYWwgbW9kZSB3aGVuCisgICAgICAgIHNraXBwaW5nIGFoZWFkIHRvIG5leHQgIywgaWdub3JlIHVubGVzcyBhdCBiZWdpbm5pbmcgb2YgbGluZS4KKworRnJpIFNlcCAgMyAxODowMDoxNSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9vc2Zyb3NlLmgsIGkzODYvb3NmZWxmLmggKExJTktfU1BFQyk6IFBhc3MgLXYgYW5kIC1kbiBvbiB0bworCXRoZSBFTEYgbGlua2VyLCB3aGljaCBub3cgYWNjZXB0cyB0aGVzZSBzd2l0Y2hlcy4KKworRnJpIFNlcCAgMyAxMzozNDoyMiAxOTkzICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGkzODYveC1saW51eDogQWRkIC1JaW5jbHVkZSB0byBCT09UX0NGTEFHUy4KKworRnJpIFNlcCAgMyAwMTo1NDoxOSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoUkVBRE9OTFlfREFUQV9BU01fT1ApOiBEZWZpbmUuCisJKFJFQURPTkxZX0RBVEFfU0VDVElPTik6IERlZmluZS4KKwkoRVhUUkFfU0VDVElPTlMpOiBBZGQgaW5fcmVhZG9ubHlfZGF0YS4KKwkoRVhUUkFfU0VDVElPTl9GVU5DVElPTlMpOiBBZGQgcmVhZG9ubHlfZGF0YS4KKworVGh1IFNlcCAgMiAxOToxOToxNCAxOTkzICBIb2xnZXIgVGV1dHNjaCAgKGhvbGdlckBob3Ric28ucmhlaW4tbWFpbi5kZSkKKworCSogY2xpcHBlci5oIDogSW1wcm92ZSBnZW5lcmF0ZWQgY29kZSBmb3IgQzQwMCBDbGlwcGVyLgorCShUQVJHRVRfU1dJVENIRVMpOiBOZXcgb3B0aW9ucyBgYzMwMCcgYGM0MDAnLgorCShUQVJHRVRfQzMwMCwgVEFSR0VUX0M0MDApOiBOZXcgZGVmaW5lcy4KKwkoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUgYXMgVEFSR0VUX0MzMDAuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTmV3IGRlZmluZS4KKworVGh1IFNlcCAgMiAxNzo0Nzo1NyAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBnbGltaXRzLmggKF9fSU5UX01BWF9fLCBfX0xPTkdfTUFYX18sIF9fTE9OR19MT05HX01BWF9fKTogTmV3IG1hY3Jvcy4KKwkoSU5UX01BWCwgTE9OR19NQVgsIExPTkdfTE9OR19NQVgpOiBVc2UgdGhlbS4KKwkoVUlOVF9NQVgsIFVMT05HX01BWCwgVUxPTkdfTE9OR19NQVgpOiBEaXR0by4KKworVGh1IFNlcCAgMiAxNDoyNjoyOCAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9vc2Zyb3NlLmggKFlFU19VTkRFUlNDT1JFUyk6IERlbGV0ZSBtYWNybywgc2luY2Ugd2UgaGF2ZQorCXJlZGVmaW5lZCBhbGwgb2YgdGhlIG1hY3JvcyB0aGF0IGFyZSBiYXNlZCBvbiB1c2luZyBpdC4KKwkoQ1BQX1NQRUMsIENDMV9TUEVDKTogUmVtb3ZlICNpZm5kZWYgTk9fVU5ERVJTQ09SRSB2ZXJzaW9uLgorCU9TRi9FTEYgd2lsbCBub3cgb21pdCB0aGUgbGVhZGluZyB1bmRlcnNjb3JlIGJ5IGRlZmF1bHQuCisJKExJTktfU1BFQyk6IFBhc3MgLWR5IHRocm91Z2ggdG8gRUxGIGxpbmtlci4gIERvIG5vdCBwYXNzIC12IHRvCisJRUxGIGxpbmtlci4KKworCSogaTM4Ni9vc2ZlbGYuaCAoQ1BQX1NQRUMsIENDMV9TUEVDKTogUmVtb3ZlICNpZm5kZWYgTk9fVU5ERVJTQ09SRQorCXZlcnNpb24uICBPU0YvRUxGIHdpbGwgbm93IG9taXQgdGhlIGxlYWRpbmcgdW5kZXJzY29yZSBieSBkZWZhdWx0LgorCShMSU5LX1NQRUMpOiBQYXNzIC1keSB0aHJvdWdoIHRvIEVMRiBsaW5rZXIuICBEbyBub3QgcGFzcyAtdiB0bworCUVMRiBsaW5rZXIuCisKKworCSogZmluYWwuYyAodHJlZS5oKTogSW5jbHVkZSB0cmVlLmggdG8gZ2V0IHRoZSBkZWNsYXJhdGlvbiBmb3IKKwlkZWNsX3ByaW50YWJsZV9uYW1lLgorCShsYXN0X2ZpbGVuYW1lKTogR2xvYmFsIHRvIGhvbGQgbGFzdCBmaWxlbmFtZSBlbmNvdW50ZXJlZCBpbiBhCisJTk9URS4KKwkoYWRkX2JiKTogTmV3IGZ1bmN0aW9uIHRvIGRvIGNvbW1vbiBjb2RlIGZvciBlbWl0dGluZyBhIGJhc2ljCisJYmxvY2sgcHJvZmlsaW5nIGluY3JlbWVudC4gIFJlbWVtYmVyIHRoZSBjdXJyZW50IGZ1bmN0aW9uLCBhbmQgaWYKKwlkZWJ1Z2dpbmcsIGxpbmUgbnVtYmVyIGFuZCBmaWxlbmFtZSBmb3IgZWFjaCBiYXNpYyBibG9jay4KKwkoYWRkX2JiX3N0cmluZyk6IE5ldyBmdW5jdGlvbiB0byByZW1lbWJlciBzdHJpbmdzIGZvciBwcm9maWxpbmcKKwliYXNpYyBibG9ja3MuCisJKGVuZF9maW5hbCk6IEJ1bXAgbmFtZSBhcnJheSBzaXplIHRvIDIwLiAgVXNlIEJTUyB0byBzdG9yZSBwcm9maWxlCisJYmxvY2sgY291bnQgYXJyYXkgdW5sZXNzIC1mbm8tY29tbW9uLiAgRWxpbWluYXRlIHJlZGVmaW5pbmcgbmFtZQorCXdpdGhpbiBmb3IgbG9vcCBibG9jay4gIEFkZCBhIGxlbmd0aCBmaWVsZCBhbmQgdGhyZWUgbmV3IHBhcmFsbGVsCisJYXJyYXlzIGZvciBiYXNpYyBibG9ja3MgdG8gaG9sZCBmdW5jdGlvbiBuYW1lLCBhbmQgaWYgZGVidWdnaW5nLAorCWxpbmUgbnVtYmVyIGFuZCBmaWxlIG5hbWUgZm9yIGJhc2ljIGJsb2NrIHByb2ZpbGluZy4KKwkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBTYXZlIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQKKwlmdW5jdGlvbiBuYW1lIGF3YXkgaWYgcHJvZmlsaW5nIGJhc2ljIGJsb2Nrcy4KKwkoZmluYWxfZW5kX2Z1bmN0aW9uKTogRm9yZ2V0IHRoZSBjdXJyZW50IHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZQorCWN1cnJlbnQgZnVuY3Rpb24gbmFtZSBpZiBwcm9maWxpbmcgYmFzaWMgYmxvY2tzLgorCShmaW5hbCk6IE1vdmUgYmFzaWMgYmxvY2sgcHJvZmlsaW5nIHN1cHBvcnQgdG8ganVzdCBjYWxsIGFkZF9iYi4KKwkoZmluYWxfc2Nhbl9pbnNuKTogRGl0dG8uCisJKG91dHB1dF9zb3VyY2VfbGluZSk6IFNhdmUgZmlsZW5hbWUgaW4gbGFzdF9maWxlbmFtZS4gIElmIHRoZSBmaWxlCisJbmFtZSB3YXMgY2hhbmdlZCBhbmQgcHJvZmlsaW5nIGJhc2ljIGJsb2NrcywgcmVtZW1iZXIgdGhlIG5ldyBmaWxlCisJbmFtZSBmb3IgdGhlIG5leHQgY2FsbCB0byBhZGRfYmIuCisKKwkqIGxpYmdjYzIuYyAoTF9iYik6IElmIEJMT0NLX1BST0ZJTEVSX0NPREUgaXMgZGVmaW5lZCwgZXhwYW5kIGl0CisJaGVyZSBkaXJlY3RseS4gIElmIEJMT0NLX1BST0ZJTEVSX0NPREUgaXMgbm90IGRlZmluZWQsIGFkZCBjb2RlCisJdGhhdCBhcHBlbmRzIGJhc2ljIGJsb2NrIHByb2ZpbGUgaW5mb3JtYXRpb24gaW50byBhIHRleHQgZmlsZQorCWJiLm91dC4gIE1vdmUgc3VuMyBzcGVjaWZpYyBibG9jayBwcm9maWxpbmcgY29kZSB0byBtNjhrL3N1bjMuaC4KKworCSogTWFrZWZpbGUuaW4gKGZpbmFsLm8pOiBGaW5hbC5jIG5vdyBpbmNsdWRlcyB0cmVlLmguCisKKwkqIG02OGsvc3VuMy5oIChCTE9DS19QUk9GSUxFUl9DT0RFKTogTW92ZSB0aGUgc3VuMyBzcGVjaWZpYyBiYXNpYworCWJsb2NrIHByb2ZpbGluZyBjb2RlIGhlcmUgZnJvbSBsaWJnY2MyLmMuCisKK1dlZCBTZXAgIDEgMTk6MDA6MDYgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiByczYwMDAubWQgKHRydW5jZGZzZjIpOiBSb3VuZCB0byBzaW5nbGUgaW5zdGVhZCBvZiBkb2luZyBub3RoaW5nLgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIG9wdGltaXplIGNvbmRpdGlvbmFsIGp1bXAgYXJvdW5kCisJdW5jb25kaXRpb25hbCBqdW1wLCBoYW5kbGUgY2FzZSB3aGVyZSBwcmV2X2xhYmVsIGNhbiBiZSB6ZXJvLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBGb3Igc3RhdGljIGNvbnN0IHZhcmlhYmxlcywgcHJlc2VydmUKKwlpbml0aWFsaXplcnMgaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uCisKK1dlZCBTZXAgIDEgMTg6NDM6MDEgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEJ1bXAgUkVKRUNUIGZvciBhIGhhcmQgcmVnaXN0ZXI7IGp1c3QKKwlub3QgZm9yIGEgcHNldWRvLgorCisJKiByczYwMDAubWQ6IENsZWFuIHVwIGhleCBjb25zdGFudHMgYSBiaXQgaW4gZW1pdHRlZCBpbnNucy4KKworCSogcnM2MDAwLmMgKGlucHV0X29wZXJhbmQpOiBBbGxvdyAiZWFzeSIgRlAgY29uc3RhbnRzLgorCSogcnM2MDAwLmggKFNFQ09OREFSWV9NRU1PUllfTkVFREVEKTogTmV3IG1hY3JvLgorCSogcnM2MDAwLm1kIChtb3ZkZik6IFNpbXBsaWZ5IGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YKKwloYXZpbmcgU0VDT05EQVJZX01FTU9SWV9ORUVERUQuCisJRml4IGJ1Z3MgcmVsYXRpbmcgdG8gb3JkZXIgaW4gd2hpY2ggbW92ZXMgYXJlIGRvbmUuCisKK1dlZCBTZXAgIDEgMTg6MDg6MzYgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IEhhbmRsZSBTVUJSRUdzIHNhbWUgYXMgUkVHcy4KKworV2VkIFNlcCAgMSAxODowMzo0NSAxOTkzICBNaWtlIFN0dW1wICAobXJzQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbGxlY3QyLmMgKGlzX2N0b3JfZHRvcik6IE1ha2Ugc2l6ZW9mIGFyZ3VtZW50IG1hdGNoIHRoZQorCXN0cmluZy4KKworV2VkIFNlcCAgMSAxNTowMTo0OCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdGFydC5lbmNhcCk6IEJ1aWxkIGcrKyBoZXJlIGFsc28uCisKK1R1ZSBBdWcgMzEgMTY6MzA6NTMgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjb21iaW5lLmMgKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogSGFuZGxlIHRoZSBjYXNlCisJKGFuZCAoeG9yL2lvciAobHNoaWZ0Li4uKSAobHNoaWZ0Li4uKSkgLi4uKS4KKwkobWFrZV9maWVsZF9hc3NpZ25tZW50KTogSW4gZ2V0X3Bvc19mcm9tX21hc2sgY2FsbCwgb25seSBpbnZlcnQKKwliaXRzIGluIG1vZGUgbWFzay4KKworCSogcmVsb2FkLmMgKHB1c2hfcmVsb2FkKTogQWJvcnQgaXMgc2Vjb25kYXJ5X3JlbG9hZCB3YW50cyBzYW1lCisJY2xhc3MgYXMgYW4gaW5wdXQgcmVsb2FkLgorCisJKiBNYWtlZmlsZS5pbiAobGliZ2NjMS5hLCBsaWJnY2MyLmEpOiBEb24ndCB1c2Ugc2V0IC1lLgorCSogY29uZmlndXJlIChpWzM0XTg2LSotbHlueG9zLCBtNjhrLSotbHlueG9zLCBzcGFyYy0qLWx5bnhvcyk6IFVzZQorCXhtLWx5bnguaCwgeC1seW54LiAgRG9uJ3QgcnVuIGZpeGluY2x1ZGVzLgorCSogeC1seW54LCB4bS1seW54Lmg6IE5ldyBmaWxlcy4KKworCSogTWFrZWZpbGUuaW4gKHhzeXMtcHJvdG9zLmgpOiBVc2UgZml4dG1wLmMgbm90IHRtcC5jLCBhbmQgZGVsZXRlCisJaXQgYWZ0ZXJ3YXJkcy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXApOiBXaGVuIGFsbG9jYXRlIGEgc2xvdCB0b28gbGFyZ2UsCisJc3BsaXQgZXh0cmEgb2ZmIGludG8gYSBzbG90IG9mIGl0cyBvd24uCisJKGNvbWJpbmVfdGVtcF9zbG90cyk6IE5ldyBmdW5jdGlvbi4KKwkoZnJlZV90ZW1wX3Nsb3RzLCBwb3BfdGVtcF9zbG90cyk6IENhbGwgY29tYmluZV90ZW1wX3Nsb3RzLgorCitUdWUgQXVnIDMxIDA2OjM1OjM3IDE5OTMgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAubWQ6ICh6ZXJvX2V4dGVuZHFpc2kyLCB6ZXJvX2V4dGVuZHFpaGkyKTogQ2hhbmdlIGFub255bW91cworCXBhdHRlcm5zIHRvIHVzZSAxNi1iaXQgYW5kIDMyLWJpdCBoZXhhZGVjaW1hbCB2YWx1ZXMgYW5kIG1hc2tzCisJaW5zdGVhZCBvZiBiaXQgcmFuZ2VzIGlmIGNvbnN0YW50LgorCShyb3Rsc2kzLCBsc2hyc2kzLCBtb3ZlIGNvbmRpdGlvbiBjb2Rlcywgc2NjIGluc25zKTogTGlrZXdpc2UuCisKK1R1ZSBBdWcgMzEgMDY6MjU6NTIgMTk5MyAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtZGVjbC5jIChzdHJ1Y3QgY19mdW5jdGlvbik6IFJlbW92ZSB1bm5lZWRlZCBlbnVtX25leHRfdmFsdWUuCisJKHB1c2hfY19mdW5jdGlvbl9jb250ZXh0LCBwb3BfY19mdW5jdGlvbl9jb250ZXh0KTogRG9uJ3Qgc2F2ZSBpdC4KKworTW9uIEF1ZyAzMCAxNjoxNjo1NiAxOTkzICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogYy1kZWNsLmMgKGdldF9wYXJtX2luZm8sIHN0b3JlX3Bhcm1fZGVjbHMpOiBJZiBQUk9NT1RFX1BST1RPVFlQRSwKKwlwcm9tb3RlIGFsbCBpbnRlZ3JhbCB0eXBlcyBzaG9ydGVyIHRoYW4gaW50LCBpbmNsdWRpbmcgc2hvcnQgZW51bXMuCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IExpa2V3aXNlLgorCSogY3AtZGVjbC5jIChncm9rcGFybXMpOiBMaWtld2lzZS4KKwkqIGNwLWV4Y2VwdC5jIChmaW5pc2hfZXhjZXB0aW9uX2RlY2wpOiBMaWtld2lzZS4KKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IExpa2V3aXNlLgorCitTdW4gQXVnIDI5IDE4OjM0OjI1IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oIChUQVJHRVRfTk9fRlBfSU5fVE9DKTogTmV3OyBkZWxldGVkIFRBUkdFVF9GUF9JTl9UT0MuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IFJlYXJyYW5nZSB0byBoYXZlIHRocmVlIFRPQyBjaG9pY2VzLgorCShBU01fT1VUUFVUX1NQRUNJQUxfUE9PTF9FTlRSWSk6IFVzZSBUQVJHRVRfTk9fRlBfSU5fVE9DLgorCSogcnM2MDAwLmMgKG91dHB1dF90b2MpOiBMaWtld2lzZS4KKworU2F0IEF1ZyAyOCAxNTowNDozNSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIG1pcHMuaCAoU0VMRUNUX1NFQ1RJT04pOiBTaW1wbGlmeSBzZGF0YV9zZWN0aW9uIHRlc3QuCisKKwkqIGx5bnguaCAoQ1BQX1NQRUMpOiBVc2UgaW5jbHVkZV92IG5vdCBpbmNsdWRlLXYuCisJKExJTktfU1BFQyk6IEFkZCBtaXNzaW5nIGAtJyBiZWZvcmUgYGsnIG9wdGlvbi4KKwkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lIHRvIERCWF9ERUJVRy4KKwkoU0RCX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgorCShNRF9FWEVDX1BSRUZJWCk6IERlZmluZSB0byAvdXNyL2xvY2FsL2xpYi9nY2MtLgorCShMSU5LX0xJQkdDQ19TUEVDSUFMXzEpOiBEZWZpbmUuCisJKE5BTUVfX01BSU4sIFNZTUJPTF9fTUFJTik6IERlZmluZS4KKworCSogc3BhcmMuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IERlbGV0ZSAnUycuCisJKiBzcGFyYy5tZCAoY2FsbCsxLCBjYWxsKzIsIGNhbGxfdmFsdWUrMSwgdW50eXBlZF9jYWxsKzEpOiBTcGxpdAorCWludG8gdHdvIHBhdHRlcm5zLCBvbmUgdXNpbmcgYWRkcmVzc19vcGVyYW5kIGFuZCAncCcsIHRoZSBvdGhlcgorCWltbWVkaWF0ZV9vcGVyYW5kIGFuZCAnaScuCisKK0ZyaSBBdWcgMjcgMTU6NDM6MTkgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChub256ZXJvX2JpdHMpOiBGaXggcmV2ZXJzZWQgdGVzdCBmb3Igd2hlbiB3ZQorCW5lZWQgdG8gaW5zZXJ0IGV4dHJhIGJpdHMgd2hlbiBzaXplcyBkaWZmZXIuCisJKG5vbnplcm9fYml0cywgY2FzZSBFUSk6IEFsd2F5cyByZXR1cm4gU1RPUkVfRkxBR19WQUxVRSB3aGVuIHJldHVybmluZworCWludGVnZXIgbW9kZTsgcmVtb3ZlIG5vdy1yZWR1bmRhbnQgdGVzdC4KKworCSogcnM2MDAwLmggKExJTktfU1BFQyk6IEFkZCAtYmV4cG9ydDovdXNyL2xpYi9saWJnLmV4cCB3aGVuIC1nLgorCitGcmkgQXVnIDI3IDEzOjE3OjI4IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFdoZW4gVEFSR0VUX01JTklNQUxfVE9DLCB1c2UKKwlyMzAgaW5zdGVhZCBvZiByMiBmb3IgVE9DIHJlZmVyZW5jZXMuCisJKG91dHB1dF9wcm9sb2d1ZSk6IElmIFRBUkdFVF9NSU5JTUFMX1RPQywgYW5kIHRoZSBjb25zdGFudCBwb29sCisJaXMgbmVlZGVkLCB0aGVuIHNldHVwIHIzMC4KKwkob3V0cHV0X3RvYyk6IFdoZW4gVEFSR0VUX01JTklNQUxfVE9DLCB1c2UgLmxvbmcgaW5zdGVhZCBvZiAudGMuCisJKiByczYwMDAuaCAoVEFSR0VUX01JTklNQUxfVE9DKTogTmV3IG1hY3JvLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1taW5pbWFsLXRvYyBhbmQgLW1uby1taW5pbWFsLXRvYy4KKwkoRUxJTUlOQUJMRV9SRUdTKTogQWRkIGVsaW1pbmF0aW9uIGZvciByMzAuCisJKENBTl9FTElNSU5BVEUpOiBBZGQgY2FzZSBmb3IgcjMwLgorCShJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFkZCBjYXNlIGZvciByMzAuCisJKHRvY19zZWN0aW9uKTogV2hlbiBUQVJFVF9NSU5JTUFMX1RPQywgaW5pdGlhbGl6ZSB0b2NfdGFibGUuCisKK1RodSBBdWcgMjYgMTc6NTk6MzggMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBnc3RkYXJnLmgsIGd2YXJhcmdzLmg6IEFkZCBzdXBwb3J0IGZvciBIOC8zMDBILgorCSogdmEtaDgzMDAuaDogTmV3IGZpbGUuCisKK1RodSBBdWcgMjYgMTU6MTU6MjcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJQ3lnbnVzPC0+RlNGIEMrKyBmcm9udC1lbmQgbWVyZ2UuCisJV2VkIEF1ZyAyNSAxNzo1NTo1OCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGFsdGVyX3Zpc2liaWxpdHkpOiBQcm9wZXJseSBncm9rIHByb3RlY3RlZCB2aXNpYmlsaXR5LgorCisJV2VkIEF1ZyAyNSAxMjo1NToxNyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChjX3NpemVvZik6IElmIHdlJ3JlIGdpdmVuIGFuIE9GRlNFVF9UWVBFLCB3b3JrIHdpdGgKKwl0aGUgdHlwZSBpdCByZWZlcnMgdG8uCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogUHJvcGVybHkgaGFuZGxlIGlubGluZSBmdW5jdGlvbnMsCisJZG9uJ3QganVzdCBjYWxsIHJlc3Rfb2ZfY29tcGlsYXRpb24uCisKKwkqIGNwLWRlY2wyLmMgKGZsYWdfaW5saW5lX2RlYnVnKTogRGVsZXRlZCwgbmV2ZXIgdXNlZC4KKwkobGFuZ19mX29wdGlvbnMpOiBEZWxldGVkIC1maW5saW5lLWRlYnVnLgorCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IExpa2V3aXNlLgorCisJVHVlIEF1ZyAyNCAxNjowNjoyMyAxOTkzICBNaWtlIFN0dW1wICAobXJzQHBvc2VpZG9uLmN5Z251cy5jb20pCisKKwkqIGNwLWRlbS5jOiBEZWxldGVkLiAgU2VlIGRlbWFuZ2xlciBpbiB0aGUgYmludXRpbHMgZGlzdHJpYnV0aW9uLgorCisJVHVlIEF1ZyAyNCAxNDoyNDozNCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBnZXQgcmVhZHkgdG8gY29tcGxhaW4gYWJvdXQgYQorCWJ1aWx0LWluIEMtbGlua2FnZSBmdW5jdGlvbiBhZ2FpbnN0IGEgQysrLWxpbmthZ2UgZnVuY3Rpb24uCisKKwlUdWUgQXVnIDI0IDEzOjU0OjQzIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvb0BydGwuY3lnbnVzLmNvbSkKKworCSogZysrLmM6IGFsc28gaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKwlUdWUgQXVnIDI0IDA1OjM5OjU3IDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AYmx1ZXMuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoaWRfc2NvcGUpOiBSZW5hbWVkIGZyb20gc2NvcGVkX2lkLiAgQWxzbyBhZGRlZCBoYW5kbGVyCisJZm9yIGNhc2Ugd2hlbiBydWxlIGFwcGVhcnMgYWZ0ZXIgYGRvbnRfc2VlX3R5cGVuYW1lJyBhY3Rpb24uICBOb3cKKwloYW5kbGVzIHBvaW50ZXItdG8tbWVtYmVyIHN5bnRheC4KKworCU1vbiBBdWcgMjMgMTQ6MDQ6MzQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1wYXJzZS55IChkYXRhZGVmKTogRGlzYWxsb3cgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhbiBlbnVtLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2V0IExBU1RfWCB0byBYLCBzbyB3ZSBrZWVwIHRoZSBjaGFpbgorCWluIHNvbWUgc2VtYmxhbmNlIG9mIHNhbml0eS4gIE1ha2VzIG1vcmUgdGhhbiBvbmUgbmVzdGVkIHR5cGVkZWYKKwl3b3JrIHByb3Blcmx5LgorCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFJld3JpdGUgaG93IGNsYXNzLWxvY2FsIHR5cGVkZWZzIGFyZQorCWhhbmRsZWQgdG8gZ2VuZXJhdGUgYSBUWVBFX0RFQ0wgdGhhdCdzIHVzZWZ1bC4KKworCSogY3AtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IERvbid0IGVycm9yIG91dCBpZiBpdCdzIGEgc3RhdGljCisJZnVuY3Rpb247IGRvbid0IHJldHVybiAwLCB3aGljaCBjYW4gY2F1c2Ugb3RoZXIgcHJvYmxlbXMuCisKKwlTdW4gQXVnIDIyIDE4OjAwOjU3IDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AYmx1ZXMuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBTZXQgREVDTF9PVkVSTE9BREVEIGZsYWcgb24gIkMiCisJZnVuY3Rpb25zIHNvIHRoYXQgdGhleSBhcmUgdHJlYXRlZCBwcm9wZXJseSB3aGVuICJDKysiIGZ1bmN0aW9ucyBvZgorCXRoZSBzYW1lIG5hbWUgYXJlIGRlY2xhcmVkIGJlZm9yZSB0aGV5IGFyZS4KKworCVN1biBBdWcgMjIgMTM6MzE6NDQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJRml4IGhvdyB3ZSBoYW5kbGUgYmluZGluZyBsZXZlbHMsIGFuZCB0d2VhayBOaWtsYXMncyBuZXcgc2NvcGluZworCWNvZGUgdG8gd29yayAxMDAlLiAgVGhpcyB3b3JrIHNob3VsZCBzaWduaWZpY2FudGx5IGltcHJvdmUgaG93CisJZysrIGhhbmRsZXMgdGhlIHVzZSBvZiBuZXN0ZWQgY2xhc3Nlcy4KKwkqIGNwLXRyZWUuaCAoTkVXX0NMQVNTX1NDT1BJTkcpOiBEZWZhdWx0IHRvIDEgbm93IQorCSogY3AtZGVjbC5jIChwb3BfYmluZGluZ19sZXZlbCk6IFNldCBjdXJyZW50X2JpbmRpbmdfbGV2ZWwgdG8gYmUKKwljbGFzc19iaW5kaW5nX2xldmVsIGlmIGl0J3Mgbm9uLU5VTEwuICBDaGFuZ2UgY29kZSB0aGF0IGxvb2tzIGZvcgorCW91ciBtZXRob2Qgb2YgY2xpbWJpbmcgYmFjayB1cCB0aGUgYmluZGluZyBsZXZlbHMgd2hlbiB3ZSdyZQorCWRlYWxpbmcgd2l0aCBhIHBhcm0uCisJKHB1c2hsZXZlbF9jbGFzcyk6IENhbGwgcHVzaF9iaW5kaW5nX2xldmVsLCBub3QgcHVzaGxldmVsLgorCShwb3BsZXZlbF9jbGFzcyk6IERvbid0IHdlaXJkIG91dCBpZiBsZXZlbCBpcyAwLiAgRE8gTk9UIHNldAorCWNsYXNzX2JpbmRpbmdfbGV2ZWwgdG8gdGhlIGxldmVsX2NoYWluLCB0aGlzIHdhcyB0aGUgYmlnZ2VzdCBidWcKKwl0aGF0IG1hZGUgdGhlIHB1c2hlcyBhbmQgcG9wcyB0byBlbmQgdXAgYmVpbmcgdW5iYWxhbmNlZC4KKwlDYWxsIHBvcF9iaW5kaW5nX2xldmVsIGluc3RlYWQgb2YgbWFudWFsbHkgcHV0dGluZyB0aGUgbGV2ZWwgb24KKwl0aGUgZnJlZV9iaW5kaW5nX2xldmVsIGNoYWluLgorCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBEb24ndCBjYWxsIHBvcGxldmVsIGlmIHByZXZpb3VzX2NsYXNzIGlzCisJbm9uLU5VTEwuCisJKGZpbmlzaF9mdW5jdGlvbik6IENhbGwgZXhwYW5kX3N0YXJ0X2JpbmRpbmdzIGFuZAorCWV4cGFuZF9lbmRfYmluZGluZ3MgaW4gYSBiYWxhbmNlZCB3YXkuCisJKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IGZsYWlsIGFyb3VuZCBzY3Jld2luZyB3aXRoIHRoZSBSVEwgZm9yCisJdGhlIGZ1bmN0aW9uIGluIGEgdmVyeSBzcGVjaWFsIGNhc2UsIGp1c3QgYWx3YXlzIGNhbGwKKwlyZXN0X29mX2NvbXBpbGF0aW9uIGFzIHdlIG5vcm1hbGx5IHdvdWxkLgorCShmaW5pc2hfbWV0aG9kKTogQ2FsbCBwb3BsZXZlbCwgbm90IHBvcF9iaW5kaW5nX2xldmVsLgorCSogY3AtY2xhc3MuYyAocHVzaGNsYXNzKTogRG9uJ3QgY2FsbCB1bnVzZV9maWVsZHMuCisJKiBjcC10cmVlLmMgKGJyZWFrX291dF9jYWxscyk6IEFsd2F5cyBjYWxsIGNvcHlfbm9kZSwgbm90IGp1c3QKKwl3aGVuIGNoYW5nZWQrKyA9PSAwLgorCSogY3Atc2VhcmNoLmMgKGJyaWRnZV9vYnN0YWNrKTogRGVsZXRlZC4KKwkocHVzaF9jbGFzc19kZWNscyk6IFVzZSBzZWFyY2hfb2JzdGFjaywgbm90IGJyaWRnZV9vYnN0YWNrLgorCShpbml0X3NlYXJjaF9wcm9jZXNzaW5nKTogRG9uJ3QgaW5pdCBicmlkZ2Vfb2JzdGFjayBhbnltb3JlLgorCisJKiBjcC1pbml0LmMgKGJ1aWxkX25ldyk6IERvbid0IGNsZWFyIExPT0tVUF9DT01QTEFJTiBvbiBmbGFncywgc2luY2UKKwl3ZSBuZWVkIHRvIGhvbm9yIHRoZSB2aXNpYmlsaXR5IG9mIHdoYXQgd2UgZmluZC4KKworCVNhdCBBdWcgMjEgMTI6MDc6MjYgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogR2l2ZSBhbiBlcnJvciBhYm91dCBhbiBhcnJheSBvZgorCW9mZnNldCB0eXBlcyBhbmQgbWV0aG9kIHR5cGVzLCBpbiBhZGRpdGlvbiB0byByZWZlcmVuY2UgdHlwZXMuCisJQWxzbyBtYWtlIHN1cmUgdG8gc2V0IGB0eXBlJyB0byBiZSBlcnJvcl9tYXJrX25vZGUgZm9yIGVhY2guCisKKwkqIGNwLXBhcnNlLnkgKHByaW1hcnksIFBMVVNQTFVTL01JTlVTTUlOVVMpOiBSZXNvbHZlIHRoZSBPRkZTRVRfUkVGCisJaGVyZS4KKwkqIGNwLXR5cGVjay5jIChidWlsZF94X3VuYXJ5X29wKTogTm90IGhlcmUuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBTZXQgREVDTF9DTEFTU19DT05URVhUIG9ubHkgaWYgaXQncworCWEgdmlydHVhbCBmdW5jdGlvbi4KKwkqIGNwLWRlY2wuYyAoZ3Jva2ZuZGVjbCk6IENvbW11bmljYXRlIHRoZSB2aXJ0dWFsIGJpdCB0byBmdW5jdGlvbgorCWRlY2xzIHRoYXQgb3ZlcmxvYWQgYSB2aXJ0dWFsIGZ1bmN0aW9uIGZyb20gYSBiYXNlIGNsYXNzLgorCSogY3Atc2VhcmNoLmMgKGRmc19wdXNoZGVjbHMpOiBMb29rIGF0IERFQ0xfQ0xBU1NfQ09OVEVYVCBpZiBpdCdzCisJYSB2aXJ0dWFsIGZ1bmN0aW9uLgorCisJRnJpIEF1ZyAyMCAxMzozNTo1NCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlNYWtlIHRoZSBnKysgZHJpdmVyIHdvcmsgd2l0aCBNUy1ET1MuCisJKiBnKysuYyAoUF90bXBkaXIsIHtSLFcsWH1fT0spIFtfX01TRE9TX19dOiBEZWZpbmVkLgorCShjaG9vc2VfdGVtcF9iYXNlX3RyeSwgY2hvb3NlX3RlbXBfYmFzZSwgcGVycm9yX2V4ZWMsCisJcnVuX2RvcykgW19fTVNET1NfX106IE5ldyBmdW5jdGlvbnMgZm9yIHRoZSBnKysgcHJvZ3JhbSB0byBvcGVyYXRlCisJY29ycmVjdGx5IHVuZGVyIE1TLURPUy4KKwkodGVtcF9maWxlbmFtZSwgdGVtcF9maWxlbmFtZV9sZW5ndGgpIFtfX01TRE9TX19dOiBOZXcgdmFyaWFibGVzLgorCShtYWluKTogRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gYWxsb2NhdGlvbiBvZiBhcmdsaXN0LiAgV2hlbgorCXJ1bm5pbmcgdGhlIG1haW4gR0NDIHByb2dyYW0sIGhhbmRsZSBydW5uaW5nIGl0IHVuZGVyIE9TLzIsIE1TLURPUywKKwlhcyB3ZWxsIGFzIG9uIGEgc3lzdGVtIHRoYXQgaGFzIGV4ZWN2cCgyKS4gIE9ubHkgZmluZCB0aGUgbG9jYXRpb24KKwlvZiB0aGUgR0NDIGV4ZWN1dGFibGUgaWYgd2UncmUgbm90IHVzaW5nIERPUy4KKworCSogY3AtZGVjbC5jIChwb3BsZXZlbCk6IE9ubHkgY2FsbCByZW1lbWJlcl9lbmRfbm90ZSBpZiB3ZSBoYXZlbid0CisJYWxyZWFkeSBjcmVhdGVkIHRoZSBibG9jay4gIFNldCBUUkVFX1VTRUQgb24gdGhlIGJsb2NrLgorCShkdXBsaWNhdGVfZGVjbHMpOiBJZiB0aGUgdHlwZSBvZiBlaXRoZXIgdGhlIG9sZCBvciBuZXcgZGVjbCBpcyBhbgorCWVycm9yX21hcmtfbm9kZSwgd2UndmUgYWxyZWFkeSBpc3N1ZWQgYW4gZXJyb3Igc28gc2V0IHR5cGVzX21hdGNoCisJdG8gYmUgMSBub3cuCisJKHhyZWZfZGVmbl90YWcpOiBNYXJrIHRoZSBUWVBFX0RFQ0wgYXMgaWdub3JlZCBpZiBkb2luZyBkd2FyZgorCWRlYnVnZ2luZy4KKworCSogY3AtcGFyc2UueSAoYmFzZV9pbml0LCBub2RlY2xzKTogQ2FsbCBrZWVwX25leHRfbGV2ZWwgdG8gbWFrZQorCXN1cmUgdGhlIEJMT0NLIG5vZGUgaXMga2VwdCB3aXRoIHRoZSBvdXRlcm1vc3QgY3VybHkgYnJhY2VzIG9mIGEKKwlmdW5jdGlvbi4KKwkoY29tcHN0bXQpOiBGb3IgYHsgfScsIGluc2VydCBhIC5wdXNobGV2ZWwgYW5kIGRvIGFsbCBvZiB0aGUgb3RoZXIKKwlzdHVmZiB3ZSBuZWVkIGluIGV2ZXJ5IG90aGVyIGNvbXBzdG10IHNpdHVhdGlvbiwgdG8gZ2VuZXJhdGUgcHJvcGVyCisJZGVidWdnaW5nIGZvciBzdWNoIHRoaW5ncyBhbmQgaGFuZGxlIHRoZSBiaW5kaW5nIGxldmVscyBwcm9wZXJseSBmb3IKKwl0aGVtLgorCisJVGh1IEF1ZyAxOSAxODoyNDoyNSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IFdyYXAgdm9pZCBDT05EX0VYUFIgaW4gTk9QX0VYUFIsIHNvCisJdGhhdCB0aGUgYmFja2VuZCBkb2VzIG5vdCBhYm9ydCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHZvaWQgbW9kZQorCWV4cHJlc3Npb24uICBGaXhlcyBtYWtlIGNoZWNrICh0U3RyaW5nLm8pIGluIGxpYmcrKy4KKworCVRodSBBdWcgMTkgMTI6MjE6MTIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfeF91bmFyeV9vcCk6IFdoZW4gd2UgcmVjZWl2ZSBhbiBPRkZTRVRfUkVGLAorCXJlc29sdmUgaXQgYmVmb3JlIGxvb2tpbmcgZm9yIGEgd2F5IHRvIGhhbmRsZSB0aGUgb3BlcmF0aW9uLgorCisJKiBjcC1tZXRob2QuYzogSW5jbHVkZSBjdHlwZS5oLgorCisJVGh1IEF1ZyAxOSAxMjowMDowOCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMsIGNwLXNlYXJjaC5jIChORVdfU0VBUkNILCBORVdfQ09OVkVSVCwKKwlDSEVDS19jb252ZXJ0X3BvaW50ZXJfdG9fc2luZ2xlX2xldmVsKTogUmVtb3ZlIGFiaWxpdHkgdG8gcmV2ZXJ0IHRvCisJb2xkIGNvZGUsIGFuZCByZW1vdmUgY2hlY2tzLiAgQ2xlYW5zLXVwIHRoZSBjb2RlIGEgbGl0dGxlLgorCisJVGh1IEF1ZyAxOSAwMDo0MTo1NSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdCk6IEF2b2lkIGZhdWx0aW5nLCBnaXZlIGVycm9yIGluc3RlYWQuCisKKwlXZWQgQXVnIDE4IDIyOjQzOjI1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmggKFJJRF9CSVRfVFlQRSwgUklEQklUX1NFVFAsIFJJREJJVF9OT1RTRVRQLCBSSURCSVRfU0VULAorCVJJREJJVF9SRVNFVCwgUklEQklUX1JFU0VUX0FMTCwgUklEQklUX0FOWV9TRVQpOiBOZXcgUklEIG1hY3JvcywKKwlyZXBsYWNlcyBSSURCSVQgbWFjcm8uICBUaGUgbmV3IG1hY3JvcyBhbGxvdyB1cyB0byBlYXNpbHkgZXhwYW5kCisJcGFzdCAzMiBSSURzLgorCSogY3AtZGVjbC5jIChncm9rdmFyZGVjbCwgZ3Jva2RlY2xhcmF0b3IpOiBVc2UgdGhlbS4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEltcGxlbWVudCBgbXV0YWJsZScga2V5d29yZC4KKwkqIGNwLWxleC5jIChpbml0X2xleCwgKTogRGl0dG8uCisJKiBjcC1sZXguaCAoZW51bSByaWQpOiBEaXR0by4KKwkqIGNwLXB0cmVlLmMgKHByaW50X2xhbmdfZGVjbCk6IERpdHRvLgorCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ19kZWNsX2ZsYWdzLCBERUNMX01VVEFCTEVfUCk6IERpdHRvLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWZfMSwgYnVpbGRfY29tcG9uZW50X3JlZik6IERpdHRvLgorCSogZ3BsdXMuZ3BlcmYgKG11dGFibGUpOiBEaXR0by4KKwkqIGNwLWhhc2guaDogUmVnZW5lcmF0ZS4KKworCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ190eXBlKTogRmlsbCBvdXQgdHlwZV9mbGFncyB0byBtdWx0aXBsZSBvZiA0CisJYnl0ZXMgZm9yIE1JUFMuCisKKwlGcmkgQXVnIDEzIDE2OjA3OjQ2IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtbGV4LmMgKERFQlVHX0RFRkFVTFRfRlVOQ1RJT05TKTogVGFrZSBvdXQgdGhlICN1bmRlZiwgc28gd2UgY2FuCisJdXNlIHRoZSBjb21tYW5kIGxpbmUgdG8gdHVybiB0aGlzIG9uLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTG9vayBmb3IgSURFTlRJRklFUl9URU1QTEFURSBpbiB0aGUKKwluYW1lIG9mIGN1cnJlbnRfY2xhc3NfdHlwZSwgbm90IGluIGN1cnJlbnRfY2xhc3NfdHlwZSBpdHNlbGYuCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBDaGFuZ2UgdG8gYWxzbyBjaGVjayBUUkVFX1BVQkxJQyBvbiB0aGUgZGVjbAorCWluIHF1ZXN0aW9uLCBhbmQgZG8gYSBwZWR3YXJuX3dpdGhfZGVjbCBpbnN0ZWFkIG9mCisJd2FybmluZ193aXRoX2RlY2wgZm9yIGNvbmZsaWN0aW5nIGV4dGVybiBkZWNsYXJhdGlvbnMuCisKKwlGcmkgQXVnIDEzIDEyOjI2OjQxIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oOiBEZWxldGUgYWxsIHRoZSBvbGQgUEFSQU5PSUQgc3R1ZmYsIGl0J3Mgc3VmZmVyZWQKKwlzZXJpb3VzIGJpdCByb3QuCisJKFBSSU5UX0xBTkdfREVDTCwgUFJJTlRfTEFOR19UWVBFKTogRGVsZXRlZCwgbm90IHVzZWQgYW55bW9yZS4KKwkoTEFOR19JRF9GSUVMRCwgU0VUX0xBTkdfSUQpOiBOZXcgbWFjcm9zLgorCSh7LFNFVF99SURFTlRJRklFUl97TEFCRUxfVkFMVUUsIElNUExJQ0lUX0RFQ0wsIEFTX0RFU0MsIEFTX0xJU1QsCisJRVJST1JfTE9DVVN9KTogUmVkZWZpbmUgdGhlc2UgbWFjcm9zIHRvIHVzZSB0aGUgbmV3IExBTkdfSURfRklFTEQKKwlhbmQgU0VUX0xBTkdfSUQgb25lcywgc28gZXZlcnl0aGluZyBpcyBtdWNoIGNsZWFuZXIgYW5kIHJlYWRhYmxlLgorCisJKiBjcC1kZWNsLmMgKHB1c2h0YWcpIFtORVdfQ0xBU1NfU0NPUElOR106IFB1c2ggaW50byB0aGUgdGVtcGxhdGUncworCWNsYXNzIHNjb3BlIGJlZm9yZSB0cnlpbmcgdG8gcHVzaCB0aGUgZGVjbCwgYW5kIHRoZW4gcG9wIGJhY2sgb3V0LgorCShnbG9iYWxpemVfbmVzdGVkX3R5cGUpIFtORVdfQ0xBU1NfU0NPUElOR106IEFzc2VydHMgMzQ4IGFuZCAzNDkKKwlhcmVuJ3QgY29ycmVjdCwgc2hhZG93IGNhbiBjb21lIG91dCB0byBiZSBudWxsIGluIHNvbWUgc2l0dWF0aW9ucy4KKworCVRodSBBdWcgMTIgMTA6NTY6NTAgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1tZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IEFsbG93IHRoZSBkZWJ1Z2dlciB0bworCWRldGVybWluaXN0aWNhbGx5IGRlbWFuZ2xlIG5hbWVzIHdpdGggbW9yZSB0aGFuIDkgbmVzdGVkIGNsYXNzCisJbGV2ZWxzLgorCisJVGh1IEF1ZyAxMiAwMDo0Njo1NCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChwdXNoZF9zdGFja19sZXZlbCk6IEZpeCBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtLgorCURvbid0IGFzc3VtZSB0aGF0IHRoZSBvYnN0YWNrIHdvbid0IG1vdmUsIGJlY2F1c2UgdGhleSB3aWxsLiAgQW1vbmcKKwlvdGhlciB0aGluZ3MsIHRoZSBmaXggYWxsb3dzIG9uZSB0byBuZXN0IGNsYXNzZXMgdXB0byAyNDAgbGV2ZWxzCisJZGVlcCwgaW5zdGVhZCBvZiA2MCBvciBzby4KKworCVRodSBBdWcgMTIgMDA6Mzg6MDUgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGZpbmlzaF9maWxlKTogIFVzZSBuZXcgZ2V0X2ZpbGVfZnVuY3Rpb25fbmFtZSgpLgorCSogY3AtdHJlZS5oIChGSUxFX0ZVTkNUSU9OX0ZPUk1BVCk6ICBObyBsb25nZXIgbmVlZGVkLgorCisJRnJpIEF1ZyAgNiAxMTozNzowOCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocG9wX2JpbmRpbmdfbGV2ZWwpIFtERUJVR19DUF9CSU5ESU5HX0xFVkVMU106IERvbid0CisJY2FsbCBhYm9ydCwgc2luY2Ugd2UgbmVlZCB0byBzZWUgd2hlcmUgdGhpbmdzIGVuZCB1cC4KKworCUZyaSBBdWcgIDYgMTE6MTM6NTcgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQmxhc3QgYXdheSBvbGQgREVDTF9TSVpFIG9uCisJYmFzZV9sYXlvdXRfZGVjbCBzbyB0aGF0IHRoZSBvbGQgdmFsdWUgaXMgbm90IHJldXNlZCwgYnV0IHJhdGhlciB0aGUKKwluZXcgdmFsdWUgaW4gdGhlIFRSRUVfVFlQRSAoVFlQRV9TSVpFICgpKSB3aWxsIGJlLgorCisJVGh1IEF1ZyAgNSAxODo0NToyNiAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBNb3ZlIHZiYXNlIHZ0YWJsZSBwb2ludGVyIGluaXQgdG8gdmVyeQorCWVuZCBvZiBiYXNlIGluaXRpYWxpemF0aW9uIGNvZGUuICBDb21wbGV0ZXMgSnVseSAzMCBjaGFuZ2UuICBUaGUKKwlkeW5hbWljIHR5cGUgb2YgYSB2aXJ0dWFsIGJhc2Ugc2hvdWxkIG5vdCBiZSB0aGUgdHlwZSBvZiB0aGUgY3VycmVudAorCWNvbnN0cnVjdG9yLCB1bnRpbCBhZnRlciBhbGwgYmFzZXMgYXJlIGluaXRpYWxpemVkLgorCitUaHUgQXVnIDI2IDA2OjAwOjA5IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cHIuYzogKGFwcGx5X2FyZ3NfcmVnaXN0ZXJfb2Zmc2V0KTogRG9uJ3QgdXNlIEFOU0ktc3R5bGUKKwlkZWZpbml0aW9uLgorCitXZWQgQXVnIDI1IDE5OjM3OjI2IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogRG8gbm90IHVzZSBiaXRmaWVsZCBpbnN0cnVjdGlvbnMgZm9yCisJU1RSSUNUX0FMSUdOTUVOVCBtYWNoaW5lcyBpZiB0aGUgTUVNJ3MgYWxpZ25tZW50IGlzbid0IGFzIGJpZyBhcworCXRoZSBNRU0ncyBtb2RlLgorCitXZWQgQXVnIDI1IDE5OjE3OjEzIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGZvcm1hdF9jaGFyX2luZm9fcHJpbnRfdGFibGUsICJwIik6IEFsbG93IHdpZHRoLgorCitUdWUgQXVnIDI0IDE4OjM2OjMxIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfe3BybyxlcGl9bG9nKTogRG9uJ3QgbmVlZCBuby1vcHMgYWZ0ZXIgY2FsbHMKKwl0byBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSBGUCByZWdzLgorCitUdWUgQXVnIDI0IDE1OjQzOjQzIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBvc2Zyb3NlLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxhcmdlLWFsaWduIGFuZAorCS1td29yZC1hbGlnbiB0byBjb250cm9sIHdoZXRoZXIgYWxpZ25tZW50cyBvZiA+IDQgYXJlIGhvbm9yZWQuCisJKEFTTV9PVVRQVVRfQUxJR05fQ09ERSk6IElmIC1tbGFyZ2UtYWxpZ24gYWxsb3cgYWxpZ25tZW50cyA+IDQuCisJKEFTTV9PVVRQVVRfQUxJR04pOiBEaXR0by4KKwkoQVNNX09VVFBVVF9MT09QX0FMSUdOKTogQWx3YXlzIGRvIGEgLmFsaWduIDIuCisJKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogRGVmaW5lLgorCShCTE9DS19QUk9GSUxFUik6IERlZmluZS4KKworVHVlIEF1ZyAyNCAxNDowNDoxMSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuYyAoY29tcHV0ZV9mcmFtZV9zaXplKTogQWx3YXlzIGFsaWduIHN0YWNrIHRvIDY0IGJ5dGUKKwlib3VuZGFyeS4KKworCSogcGEuaCAoU1RBQ0tfQk9VTkRBUlkpOiBTdGFjayBwb2ludGVyIGlzIDUxMiBiaXQgKDY0IGJ5dGUpCisJYWxpZ25lZC4KKworCSogcGEuYyAob3V0cHV0X2NhbGwpOiBVc2UgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCBpbnN0ZWFkIG9mCisJb3V0cHV0X2FzbV9sYWJlbC4KKworVHVlIEF1ZyAyNCAxMToyNDoyNyAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKyAKKyAgICAgICAgKiBNZXJnZSBvZiBPYmplY3RpdmUgQyByZWxhdGVkIGNoYW5nZXMgc2luY2UgSnVuZSAxLgorIAorICAgICAgICAqIG9iamMveGZvcndhcmQuYywgb2JqYy9tdXRleC5oOiBGaWxlcyByZW1vdmVkLgorICAgICAgICAqIG9iamMvZW5jb2RpbmcuW2NoXTogTmV3IGZpbGVzLgorCSogb2JqYy90b2RvOiBGaWxlIHJlbW92ZWQuCisgCisgICAgICAgIFR1ZSBKdW4gIDEgMDA6MDU6MTIgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAaWVzZC5hdWMuZGspCisgCisgICAgICAgICogZXhwci5jIChhcHBseV9hcmdzX3JlZ2lzdGVyX29mZnNldCk6IE5ldyBmdW5jdGlvbgorICAgICAgICAoYXBwbHlfYXJnc19yZWdfb2Zmc2V0KTogTmV3IHZhcmlhYmxlCisgICAgICAgIChhcHBseV9hcmdzX3NpemUpOiBBZGRlZCBpbml0aWFsaXphdGlvbiBvZiBhcHBseV9hcmdzX3JlZ19vZmZzZXQuIAorIAorICAgICAgICAqIG9iamMtYWN0LmMgKG9mZnNldF9pc19yZWdpc3Rlcik6IE5ldyB2YXJpYWJsZQorICAgICAgICAoZm9yd2FyZGluZ19vZmZzZXQpOiBVc2UgYXBwbHlfYXJnc19yZWdpc3Rlcl9vZmZzZXQgdG8gZ2V0CisgICAgICAgIHJlZ2lzdGVyIG9mZnNldC4KKyAgICAgICAgKGVuY29kZV9tZXRob2RfZGVmLCBlbmNvZGVfbWV0aG9kX3Byb3RvdHlwZSk6IFByZXBlbmQgYXJndW1lbnQKKyAgICAgICAgb2Zmc2V0IGJ5ICcrJyBpZiBwYXNzZWQgaW4gcmVnaXN0ZXIuIAorICAgICAgICAoYXBwbHlfYXJnc19yZWdpc3Rlcl9vZmZzZXQpOiBBZGRlZCBkZWNsYXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFN1biBKdW4gIDYgMjA6NTc6MDMgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAaWVzZC5hdWMuZGspCisgCisgICAgICAgICogb2JqYy9lbmNvZGluZy5oLCBvYmpjL2VuY29kaW5nLmM6IE5ldyBmaWxlcy4KKyAgICAgICAgKiBvYmpjL09iamVjdC5tICgtcGVyZm9ybXYpOiBVc2UgbmV3IG9iamNfbXNnX3NlbmR2LgorICAgICAgICAqIG9iamMvc2VuZG1zZy5jIChvYmpjX21zZ19zZW5kdik6IFVzZSBuZXcgZW5jb2RpbmcgZmFjaWxpdGllcy4KKyAgICAgICAgKiBvYmpjL29iamMuaCAoYXJnbGlzdF90KTogRGF0YS1kZWZpbml0aW9uIGNoYW5nZWQuCisgICAgICAgICogb2JqYy94Zm9yd2FyZC5jOiBGaWxlIHJlbW92ZWQuCisgICAgICAgICogb2JqYy9NYWtlZmlsZSAoc2VuZG1zZy5jLCBmZmxhZ3MsIHhmb3J3YXJkKTogVGFyZ2V0cyByZW1vdmVkOworICAgICAgICAoT0JKQ19PKTogQWRkZWQgZW5jb2RpbmcubzsKKyAgICAgICAgKE9CSkNfSCk6IEFkZGVkIGVuY29kaW5nLmgsIHJlbW92ZWQgbXV0ZXguaC4KKyAKKyAgICAgICAgKiBvYmpjL29iamMuaCAobmlsX21ldGhvZCk6IERvbid0IGRlZmluZSBpdCwgaW1wb3J0IGl0IGZyb20gc2VuZG1zZy5jLgorIAorICAgICAgICBXZWQgSnVuIDE2IDE3OjM5OjU2IDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGllc2QuYXVjLmRrKQorIAorICAgICAgICAqIG9iamMvb2JqYy1hcGkuaDogKENMU19TRVROVU1CRVIpOiBDbGVhciBvbGQgbnVtYmVyCisgICAgICAgICogb2JqYy9zZW5kbXNnLmMgKF9fb2JqY191cGRhdGVfZGlzcGF0Y2hfdGFibGVfZm9yX2NsYXNzKTogCisgICAgICAgIERvbid0IGZyZWUgZHRhYmxlLi4uIChtZW1vcnkgbGVhayB0byBtYWtlIHBvc2luZyB3b3JrKQorICAgICAgICAqIG9iamMvY2xhc3MuYyAoY2xhc3NfcG9zZV9hcyk6IGxhenkgY29weSBkdGFibGVzLgorICAgICAgICAjaW5jbHVkZSBzYXJyYXkuaAorIAorICAgICAgICBUdWUgSnVuIDIyIDIxOjM5OjExIDE5OTMgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQHhpdikKKyAKKyAgICAgICAgKiBvYmpjL2NsYXNzLmMgKGNsYXNzX3Bvc2VfYXMpOiBSZXdyaXR0ZW4KKyAgICAgICAgKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX3VwZGF0ZV9kaXNwYXRjaF90YWJsZV9mb3JfY2xhc3MpOiAKKyAgICAgICAgRnJlZSBvbGQgZGlzcGF0Y2ggdGFibGUgYW5kIGluc3RhbGwgYSBuZXcuCisgCisgICAgICAgIFR1ZSBBdWcgMjQgMDA6NDE6MzUgMTk5MyAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAaWVzZC5hdWMuZGspCisgCisgICAgICAgICogb2JqYy1hY3QuYyAoZ2VuZXJhdGVfbWV0aG9kX2Rlc2NyaXB0b3JzLCBnZW5lcmF0ZV9pdmFyX2xpc3RzLAorICAgICAgICBnZW5lcmF0ZV9kaXNwYXRjaF90YWJsZXMpOiBSZW9yZ2FuaXplZCB1c2Ugb2YgY29uc3RydWN0b3JzLgorICAgICAgICAoYnVpbGRfZGVzY3JpcHRvcl90YWJsZV9pbml0aWFsaXplciwgYnVpbGRfaXZhcl9saXN0X2luaXRpYWxpemVyLAorICAgICAgICBidWlsZF9kaXNwYXRjaF90YWJsZV9pbml0aWFsaXplcik6IFJlbW92ZWQgYXJndW1lbnQgYGludCAqc2l6ZScuICAKKyAKKyAgICAgICAgVHVlIEF1ZyAyNCAwMDo1MjowNCAxOTkzICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBpZXNkLmF1Yy5kaykKKyAKKyAgICAgICAgKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2luc3RhbGxfZGlzcGF0Y2hfdGFibGVfZm9yX2NsYXNzKToKKyAgICAgICAgRHluYW1pY2FsbHkgZXhwYW5kIGRpc3BhdGNoIHRhYmxlIHdoZW4gZnVsbC4KKworTW9uIEF1ZyAyMyAxOTozNzozMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoVEFSR0VUX1RSQUlMSU5HX0NPTE9OKTogRGVsZXRlIHN3aXRjaC4gIFRBUkdFVF9HQVMgbm93CisJY29udHJvbHMgdGhlIHVzZSBvZiB0cmFpbGluZyBjb2xvbnMuCisKK01vbiBBdWcgMjMgMTg6NDY6MTQgMTk5MyAgRnJlZGVyaWMgUGllcnJlc3RlZ3V5IChGLlBpZXJyZXN0ZWd1eUBmcmNsLmJ1bGwuZnIpCisKKwkqIGNvbmZpZy9tNjhrL2RweDJnLmggKEFTTV9MT05HKTogTW92ZSBmcm9tIGRweDIuaC4KKworCSogY29uZmlndXJlIChtNjhrLWJ1bGwtc3lzdik6IEFkZCBzdXBwb3J0IGZvciB3b3JraW5nIHdpdGggbmF0aXZlIAorCWFzc2VtYmxlci4KKwkqIGNvbmZpZy9tNjhrL2RweDIuaCAoTU9UT1JPTEEpOiBEZWZpbmUgdGhpcy4KKwkoVkVSU0FET1MpOiBUaGlzIHRoZSBuYW1lIG9mIHRoZSBEUFgyIGFzc2VtYmxlci4gRGVmaW5lIHRoaXMgaW4gY2FzZS4KKwkoVVNHKTogRGVmaW5lIHRoaXMuCisJKFNHU19OT19MSSk6IGRlZmluZSB0aGlzIHRvIHN1cHByZXNzIGp1bXAgdGFibGUgdXNhZ2UuCisJKFRBUkdFVF9ERUZBVUxUKTogRGVmaW5lIHRoaXMgdG8gMyBpbnNpZGUgdGhlIGNvbmRpdGlvbmFsIFVTRV9HQVMgCisJc2luY2UgYml0ZmllbGRzIGRvIG5vdCB3b3JrIGEgY2xlYW4gd2F5IG9uIERQWDIuIAorCShFWFRSQV9TRUNUSU9OUywgRVhUUkFfU0VDVElPTl9GVU5DVElPTlMsIFNFTEVDVF9TRUNUSU9OLAorCVNFTEVDVF9SVFhfU0VDVElPTik6ICN1bmRlZiB0aGVzZS4KKwkoUkVBRE9OTFlfREFUQV9TRUNUSU9OKTogRGVmaW5lIHRvIGRhdGFfc2VjdGlvbi4KKwkoKl9BU01fT1AsIEFTTV9PVVRQVVRfKik6IERlZmluZSB0aGVzZSBhY2NvcmRpbmdseSB0byB0aGUgbmF0aXZlIAorCWFzc2VtYmxlciBzeW50YXguCisJKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IFNldCB0byA2NCB0byBub3QgdXNlIFhGbW9kZS4KKwkoUkVBTF9BUklUSE1FVElDKTogRGVmaW5lIHRoaXMgdG8gdXNlIHRoZSBzb2Z0d2FyZSBmbG9hdGluZyBwb2ludCAKKwllbXVsYXRvci4KKwkoSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OKTogRGVmaW5lIHRoaXMgdG8gMS4KKwkoRlVOQ1RJT05fUFJPTE9HVUUsIEZVTkNUSU9OX0VQSUxPR1VFKTogT3ZlcnJpZGUgbTY4ay5oIGRlZmF1bHQuCisJKEFTTV9PVVRQVVRfQVNDSUkpOiBhZGQgYSBuZXcgdmFyaWFibGUgdG8gdGFrZSBjYXJlIG9mIHRoZSBsZW50Z2ggb2YKKwl0aGUgb3BlcmFuZCBmaWVsZCB3aGljaCBtdXN0IGJlIDwgODAgY2hhcnMuCisJKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IE92ZXJyaWRlIG02OGsuaCBkZWZhdWx0LiAKKwkoUFVUX1NEQl9UWVBFKTogT3V0cHV0IHR5cGUgaW4gZGVjaW1hbC4KKwkoUFVUX1NEQl9GVU5DVElPTl9bU1RBUlR8RU5EXSk6IE92ZXJyaWRlIHNkYm91dC5jIGRlZmF1bHQuIAorCShQVVRfU0RCX0JMT0NLX1tTVEFSVHxFTkRdKTogT3ZlcnJpZGUgc2Rib3V0LmMgZGVmYXVsdC4gCisKK01vbiBBdWcgMjMgMTg6MzM6MjYgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jICh0d292YWxfY29tcGFyaXNvbl9wKTogQWRkIG5ldyBhcmcsIFNBVkVfUDsgYWxsCisJY2FsbGVycyBjaGFuZ2VkLgorCShmb2xkLCBjYXNlIEVRX0VYUFIpOiBJZiBTQVZFX1AgaXMgdHJ1ZSBhZnRlciBjYWxsIHRvIAorCXR3b3ZhbF9jb21wYXJpc29uX3AsIGNhbGwgc2F2ZV9leHByIG9uIHRoZSBleHByZXNzaW9uIHdlIG1ha2UuCisKK01vbiBBdWcgMjMgMDc6NTc6NDEgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oIChDQzFfU1BFQywgQ1BQX1NQRUMpOiBJZiBOT19VTkRFUlNDT1JFIGlzCisJZGVmaW5lZCwgdGhlIEVMRiBjb21waWxlciBkZWZhdWx0cyB0byAtbW5vLXVuZGVyc2NvcmVzIHRvIHJlbW92ZQorCWxlYWRpbmcgdW5kZXJzY29yZXMuICBDbGVhbiB1cCBST1NFIC1waWMgb3B0aW9ucyBzbyB0aGF0IHRoZXkgYXJlCisJbmV2ZXIgcGFzc2VkIHdoZW4gYnVpbGRpbmcgRUxGIG9iamVjdHMuCisJKiBpMzg2L29zZmVsZi5oOiBMaWtld2lzZS4KKworU3VuIEF1ZyAyMiAyMzozNjoyNCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbl9hcHBseSk6IEZpeCB0eXBvLgorCisJKiBwYS5tZCAodW50eXBlZF9jYWxsKTogTmV3IGRlZmluZV9leHBhbmQuCisKK0ZyaSBBdWcgMjAgMTI6MjQ6NTAgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBzcGlmZi5nbnUuYWkubWl0LmVkdSkKKworCSogZ2NjLmMgKG1haW4pOiBDb3JyZWN0IEF1Z3VzdCA2IGNoYW5nZS4KKworVGh1IEF1ZyAxOSAxOToxOToxOSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY29uc3QsIFhPUiBjYXNlKTogV2hlbiBhcHBseWluZworCWRpc3RyaWJ1dGl2ZSBsYXcsIHVzZSBzaGlmdF9tb2RlIGFuZCBHRVRfTU9ERSAodmFyb3ApIGluc3RlYWQgb2YKKwlyZXN1bHRfbW9kZS4KKworVGh1IEF1ZyAxOSAwODoyODo1MCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAubWQgKHNjYyk6IEZpeCB0eXBvIGluIHNjYyB3aXRoIGNvbXBhcmUgYW5kIHNldC4KKworCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogRG9uJ3QgcmVqZWN0IFNVQlJFRyBhc3NpZ25tZW50cyBoZXJlLgorCShzdWJzdCk6IEluc3RlYWQsIGRvIGl0IGhlcmUsIGJ1dCBhbHNvIGFsbG93IGl0IGluIGFzIGEgCisJbmVzdGVkIFNVQlJFRyBzaW5jZSB0aGUgaW5uZXIgb25lIHdpbGwgYmUgZWxpbWluYXRlZC4KKwkoc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6IENvbnZlcnQgKGFuZCAobmVnIFgpIChjb25zdF9pbnQgMSkpCisJdG8gYSBzaGlmdCB3aGVuIFggaXMga25vd24gdG8gYmUgZWl0aGVyIDAgb3IgMS4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogSGFuZGxlIEVRX0VYUFIgYW5kIE5FX0VYUFIgd2hlcmUgYm90aAorCWFyZ3MgYXJlIGNvbXBhcmlzb25zIG9yIEJJVF9BTkRfRVhQUiB3aXRoIGNvbnN0YW50IDEuCisKK1dlZCBBdWcgMTggMjM6Mzc6MDUgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBtaXBzLmggKFNFTEVDVF9TRUNUSU9OKTogUHV0IG9iamVjdCBpbiBzZGF0YSBvbmx5IGlmIHNpemUgaXMKKwlrbm93biwgaS5lLiBncmVhdGVyIHRoYW4gMC4KKworV2VkIEF1ZyAxOCAxNzo0ODo1MSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3Qgc3BsaXQgYSBQQVJBTExFTCBvZiBhIFNJR05fRVhURU5ECisJYW5kIHRoZSBvYmplY3QgYmVpbmcgc2lnbiBleHRlbmRlZCBpZiB3ZSBoYXZlIG1hZGUgYXNzdW1wdGlvbnMKKwlhYm91dCB0aGUgZm9ybSB0aGUgSTJERVNULgorCisJKiBjb21iaW5lLmMgKG5vbnplcm9fYml0cyk6IEhhbmRsZSBjYXNlIHdoZW4gQllURV9MT0FEU19FWFRFTkQgaXMKKwlub3Qgb24gYW5kIHdlIGFyZSBhc2tlZCBmb3Igc29tZXRoaW5nIGluIGEgbW9kZSB3aWRlciB0aGFuIGl0LgorCitXZWQgQXVnIDE4IDAyOjIxOjM1IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAobW92ZGYgaW5zbik6IERpc3Rpbmd1aXNoIGJldHdlZW4gb2Zmc2V0dGFibGUgYW5kCisJbm9ub2Zmc2V0dGFibGUgbWVtb3J5IGxvY2F0aW9ucyB3aGVuIGxvYWRpbmcvc3RvcmluZyBhIEdSLgorCShtb3ZkaSBpbnNuKTogTGlrZXdpc2UuICBMb2FkaW5nIGEgREltb2RlIGNvbnN0YW50IGNhbiB0YWtlIGFzCisJbWFueSBhcyA0IGluc25zIChsZW5ndGggb2YgMTYgYnl0ZXMpLgorCisJKiBwYS5tZCAoemVyb19leHRlbmRxaWhpMik6IE5vIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYSBsZW5ndGg7CisJdGhlIGRlZmF1bHRzIGFyZSBjb3JyZWN0LgorCSh6ZXJvX2V4dGVuZHFpc2kyLCBmbG9hdHNpc2YyLCBmbG9hdHNpZGYyKTogTGlrZXdpc2UuCisJKGZpeF90cnVuY2Rmc2kyLCBmaXhfdHJ1bmNzZmRpMiwgZml4X3RydW5jZGZkaTIpOiBMaWtld2lzZS4KKworCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogQ2hlY2sgYm90aCByZWxvYWRfaW5fcHJvZ3Jlc3MgYW5kCisJcmVsb2FkX2NvbXBsZXRlZCB3aGVuIGNob29zaW5nIGEgc2NyYXRjaC90ZW1wb3JhcnkgcmVnaXN0ZXIuCisKKwkqIHBhLmggKFRBUkdFVF9LRVJORUwpOiBEZWxldGUgc3dpdGNoIGFuZCBhbGwgcmVmZXJlbmNlcyB0byBpdC4KKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEFsd2F5cyBoYW5kbGUgc2Vjb25kYXJ5IHJlbG9hZHMgZm9yCisJc3ltYm9saWMgYWRkcmVzc2VzLgorCShzZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogU3ltYm9saWMgb3BlcmFuZHMgYWx3YXlzIG5lZWQgYSBzZWNvbmRhcnkgCisJcmVsb2FkIGZyb20gUjFfUkVHUyBpZiB0aGVpciB0YXJnZXQgY2xhc3MgaXMgbm90IFIxX1JFR1MuCisJKiBwYS5tZCAoSElHSCBmb3Igc3ltYm9saWMgb3BlcmFuZHMpOiBUQVJHRVRfS0VSTkVMIHZlcnNpb24gaXMgbm93CisJdGhlIG9ubHkgY2hvaWNlLiAgRGVsZXRlICEgVEFSR0VUX0tFUk5FTCB2ZXJzaW9uLgorCisJKiBwYS5oIChERUZBVUxUX0dEQl9FWFRFTlNJT05TKTogR0RCIGV4dGVuc2lvc24gYXJlIG9uIGJ5IGRlZmF1bHQuCisJKiBwYS1ocHV4LmggKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMpOiBUdXJuIEdEQiBleHRlbnNpb25zIG9mZi4KKwkqIHBhLWhwdXg3LmggKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMpOiBMaWtld2lzZS4KKworCSogcGEuaCAoVEFSR0VUX0dBUyk6IE5ldyB0YXJnZXQgZmxhZyB0byBjb250cm9sIHVzZSBvZiBHQVMKKwlzcGVjaWZpYyBhc3NlbWJsZXIgZGlyZWN0aXZlcy4KKwkoVEFSR0VUX1NXSVRDSEVTKTogU3VwcG9ydCAtbWdhcyBhbmQgLW1uby1nYXMuCisJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBJZiBUQVJHRVRfR0FTIHRoZW4gZW1pdCAuUEFSQU0KKwlkaXJlY3RpdmVzIGZvciBzdGF0aWMgZnVuY3Rpb25zIHNvIGFyZ3VtZW50IHJlbG9jYXRpb25zIHdvcmsuCisJKiBwYS1naHB1eC5oIChUQVJHRVRfREVGQVVMVCk6IEVuYWJsZSBUQVJHRVRfR0FTLgorCSogcGEtZ3V4Ny5oLCBwYS11dGFobWFjaC5oLCBwYS5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgorCSogcGExLWdocHV4LmgsIHBhMS11dGFobWFjaC5oLCBwYTEuaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KKworCSogcGEuYyAoaHBwYV9sZWdpdGltaXplX2FkZHJlc3MpOiBSZXdvcmsgYWRkcmVzcyBjb21wdXRhdGlvbiBmb3IKKwl4W24gLSBtXSBzbyB0aGF0IHByb2JsZW1zIHdpdGggaW1wbGljaXQgc3BhY2UgcmVnaXN0ZXIgc2VsZWN0aW9uCisJYXJlIGF2b2lkZWQuCisKKwkqIHBhLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBEZWxldGUgdW51c2VkICdTJyBjb25zdHJhaW50LgorCSogcGEubWQgKGNhbGxfaW50ZXJuYWxfc3ltcmVmKTogTWFrZSBwYXR0ZXJuIHVuYXZhaWxhYmxlIGlmCisJVEFSR0VUX0xPTkdfQ0FMTFMuCisJKGNhbGxfdmFsdWVfaW50ZXJuYWxfc3ltcmVmKTogTGlrZXdpc2UuCisKK01vbiBBdWcgMTYgMTg6NDc6NTYgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCUZyb20gcGFya2VzQHVpdWMuZWR1OgorCSogZW5jb3JlLmgsIG5zMzJrLmggKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IFVzZSAuZG91YmxlIGluc3RlYWQKKwlvZiAud29yZC4KKwkqIG5zMzJrLmggKENBU0VfVkVDVE9SX01PREUpOiBOb3cgU0ltb2RlOyB3YXMgSEltb2RlLgorCSogbnMzMmsubWQgKHRhYmxlanVtcCk6IE5vdyBTSW1vZGUgYW5kIHVzZXMgY2FzZWQuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBFUV9FWFBSKTogUmUtZW5hYmxlIGNvbnZlcnRpbmcKKwlzaWduZWQgTU9EIG9wZXJhdGlvbnMgdG8gdW5zaWduZWQgd2hlbiBpbnNpZGUgY29tcGFyaXNvbnMKKwlhZ2FpbnN0IHplcm8sIGJ1dCBvbmx5IHdoZW4gdGhlIHNlY29uZCBvcGVyYW5kIG9mIHRoZSBNT0QKKwlpcyBhbiBpbnRlZ3JhbCBwb3dlciBvZiB0d28uCisKK01vbiBBdWcgMTYgMTI6Mzg6MjggMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogZml4aW5jLmRndXg6IEZpeGVkIHZhX2xpc3QgcHJvYmxlbSBpbiBfaW50X3ZhcmFyZ3MuaAorCitNb24gQXVnIDE2IDExOjI2OjU3IDE5OTMgIEtldmluIEJ1ZXR0bmVyICAoa2V2QHNwdWRzLmdlZy5tb3QuY29tKQorCisJKiBjb25maWd1cmUgKG04OGstbW90LXN5c3Y0Kik6IEFkZGVkIG5ldyBjb25maWd1cmF0aW9uIGZvciBtODhrCisJZGVsdGEgbWFjaGluZXMgcnVubmluZyBzdnI0LgorCisJKiBjb25maWcvbTg4ay9tb3Qtc3lzdjQuaDogTmV3IGZpbGUuCisKK01vbiBBdWcgMTYgMTE6MTY6MzIgMTk5MyAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBjb21iaW5lLmM6ICh1c2VfY3Jvc3Nlc19zZXRfcCk6IENoZWNrIGZvciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcKKwloYXJkIHJlZ3MuCisKK1N1biBBdWcgMTUgMjA6MTc6MjAgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbmRfZW5kX2xhYmVsKTogSWYgYSBzdWl0YWJsZSBSRVRVUk4gaW5zbiBleGlzdHMgYXQKKwl0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLCBwbGFjZSBhIGxhYmVsIGluIGZyb250IG9mIGl0IGZvcgorCXRoZSBlbmRfb2ZfZnVuY3Rpb25fbGFiZWwuCisKK0ZyaSBBdWcgMTMgMTY6NDA6MDMgMTk5MyAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNoZWNrX2Zvcm1hdCk6IEZvciBzY2FuIG9mICIlWyIsIHNraXAgb3ZlciBzY2FuIHNldAorICAgICAgICB0aWwgY2xvc2luZyAnXScgdG8gYXZvaWQgcHJvY2Vzc2luZyBpdCBhcyBvcmRpbmFyeSBmb3JtYXQgY2hhcmFjdGVycy4KKworRnJpIEF1ZyAxMyAxNjowMjoyMyAxOTkzICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQorCisJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2hpZGRlbl9jaGFyX2FycmF5KTogTmV3IGZ1bmN0aW9uIHRvCisJZmFjdG9yIG91dCBkdXBsaWNhdGUgY29kZSBpbiBkZWNsYXJlX2Z1bmN0aW9uX25hbWUuCisJRG9uJ3Qgc2V0IERFQ0xfRVhURVJOQUwgKHdoaWNoIGlzIGlsbGVnYWwgd2l0aG91dCBUUkVFX1BVQkxJQykKKwl0byBwcmV2ZW50IG91dHB1dDsgaW5zdGVhZCwgc2V0IFRSRUVfQVNNX1dSSVRURU4uCisJKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IFVzZSBkZWNsYXJlX2hpZGRlbl9jaGFyX2FycmF5LgorCitGcmkgQXVnIDEzIDE0OjU4OjUyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL25zMzJrL2VuY29yZS5oIChBU01fT1VUUFVUX0FMSUdOX0NPREUpOiBPdmVycmlkZSBhcyBuby1vcC4KKworRnJpIEF1ZyAxMyAxNDoyOToxNyAxOTkzICBTdGVwaGVuIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHNwYXJjLmggKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IERlZmluZSB0byAxMjguCisKKwkqIHJlYWwuYyAoR0VUX1JFQUwsIFBVVF9SRUFMKTogQWRkIFRGbW9kZSB2ZXJzaW9ucy4KKwkoTUFYREVDRVhQLCBNSU5ERUNFWFApOiBOZXcgZGVjaW1hbCBleHBvbmVudCBsaW1pdHMKKwl0aGF0IHZhcnkgd2l0aCBkZWZpbml0aW9uIG9mIExPTkdfRE9VQkxFX1RZUEVfU0laRS4KKwkoZW5kaWFuLCBlcmVhbF9hdG9mLCByZWFsX3ZhbHVlX3RydW5jYXRlLCBlaW5maW4sIGVtZG5vcm0sIGFzY3RvZWcpOgorCUFkZCBjYXNlcyBmb3IgVEZtb2RlLgorCShldGFydGRvdWJsZSk6IE5ldyBmdW5jdGlvbiBjb252ZXJ0cyBSRUFMX1ZBTFVFX1RZUEUgdG8gVEZtb2RlCisJZm9yIHVzZSBieSBBU01fT1VUUFVUX0xPTkdfRE9VQkxFLgorCShlZGl2bSwgZW11bG0pOiBJZmRlZiBvdXQsIHJlcGxhY2UgYnkgZmFzdGVyIG11bHRpcGx5IGFuZCBkaXZpZGUuCisJKGV0b2UxMTMsIHRvZTExMywgZTExM3RvZSk6IE5ldyB0eXBlIGNvbnZlcnNpb25zIGZvciBURm1vZGUuCisJKGFzY3RvZTExMywgZTExM3RvYXNjKTogTmV3IFRGbW9kZSBiaW5hcnkgPC0+IGRlY2ltYWwgY29udmVyc2lvbnMuCisJKGF0IHRvcCBsZXZlbCk6IERlZmluZSBjb25zdGFudHMgZXplcm8sIGVvbmUsIGVtdGVucywgZXRlbnMsIC4uLgorCWluIGEgbmV3IDIwLWJ5dGUgZm9ybWF0IHdoZW4gTE9OR19ET1VCTEVfVFlQRV9TSVpFID0gMTI4IGFuZAorCXNldCBORSB0byAxMC4gIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGZvcm1hdCByZW1haW5zIDEyIGJ5dGVzIHdpZGUuCisJKGV0b3VkaSwgZXRvZGksIGRpdG9lLCB1ZGl0b2UpOiBOZXcgZnVuY3Rpb25zLCBzaWduZWQgYW5kIHVuc2lnbmVkCisJREltb2RlIGZsb2F0IGFuZCBmaXgsIGZvciByZWFsLmMgdXNlZCBpbiBhIGxpYmdjYy1vZi1sYXN0LXJlc29ydC4KKwkoZXNxcnQpOiBOZXcgZnVuY3Rpb24sIGNvcnJlY3RseSByb3VuZGVkIHNxdWFyZSByb290IGZvciBsaWJnY2MuCisJKGV0b2RlYyk6IERlbGV0ZSBpZmRlZidkIHZlcnNpb24uCisJKGVyb3VuZGksIGVyb3VuZHVpKTogUmVuYW1lIHRvIGVmaXhpLCBlZml4dWkgYW5kIGFsd2F5cworCXJvdW5kIHRvd2FyZHMgemVyby4KKworCUZyb20gZnJhbmtAYXRvbS5hbnN0by5nb3YuYXUgKEZyYW5rIENyYXdmb3JkKToKKwkoZXRvaWJtLCB0b2libSwgaWJtdG9lKTogTmV3IGNvbnZlcnNpb25zIGZvciBJQk0gMzcwIGZsb2F0IGZvcm1hdC4KKwkoZTUzdG9lLCBlNjR0b2UsIHRvZTY0LCBldG9lNTMsIHRvZTUzLCBldG9lMjQsIHRvZTI0LCBhc2N0b2U1MywKKwlhc2N0b2VnLCBtYWtlX25hbik6IElmZGVmIGZvciBJQk0uCisKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9UWVBFKTogRGVmaW5lIGFycmF5IGF0IGxlYXN0IDIwIGJ5dGVzIHdpZGUKKwlpZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUgaXMgMTI4IGJpdHMuCisJKGV0YXJ0ZG91YmxlKTogRGVjbGFyZSBhbmQgdXNlIGZvciBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9MT05HX0RPVUJMRQorCXdoZW4gbG9uZyBkb3VibGUgaXMgVEZtb2RlLgorCShSRUFMX1ZBTFVFX0ZJWCwgUkVBTF9WQUxVRV9VTlNJR05FRF9GSVgpOiBNdXN0IGFsd2F5cyByb3VuZAorCXRvd2FyZHMgemVyby4KKworRnJpIEF1ZyAxMyAwNzo1MDo0MiAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFNBVkVfRVhQUik6IFNldCBNRU1fSU5fU1RSVUNUX1AKKwlhcHByb3ByaWF0ZWx5IHdoZW4gdGhlIHJlc3VsdCBpcyBhIE1FTS4KKworCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDb3B5IGFyZ3MgdGhhdCBhcmUgaW4KKwloYXJkIHJlZ3MgaW5zdGVhZCBvZiBzdWJzdGl0dXRpbmcgdGhlbSBkaXJlY3RseSBpbnRvIGluc25zLgorCisJKiByczYwMDAubWQgKHN1YnNpMyk6IE1lcmdlIGFsdGVybmF0aXZlcy4KKwkoY29tcGFyaXNvbiBwYXR0ZXJucyk6IEVsaW1pbmF0ZSBnZW5lcmF0aW9uIG9mICJzZmkuIjsgbm8gc3VjaAorCWluc3RydWN0aW9uIGV4aXN0cy4KKworVGh1IEF1ZyAxMiAyMToyNDowMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrL3N1bjMuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgX0NST1NTX1RBUkdFVF9BUkNILgorCitUaHUgQXVnIDEyIDE5OjAyOjQ3IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5tZCAoYXR0cmlidXRlICJ0eXBlIik6IEFkZCBuZXcgdHlwZSwgImJyYW5jaCIuCisJKGF0dHJpYnV0ZSAibGVuZ3RoIik6IE5ldyBhdHRyaWJ1dGU7IHB1dCBvbiBhbGwgaW5zbnMgdGhhdCBkb24ndAorCWhhdmUgZGVmYXVsdCBsZW5ndGguCisJKGJyYW5jaCBwYXR0ZXJucyk6IElmIGNvbmRpdGlvbmFsIGJyYW5jaCB3b24ndCByZWFjaCwgdGFrZQorCWNvbmRpdGlvbmFsIGJyYW5jaCBhcm91bmQgYW4gdW5jb25kaXRpb25hbCBicmFuY2guCisKKwkqIHJzNjAwMC5tZCAocGx1cyk6IFNwbGl0IChwbHVzIChDT01QQVJJU09OIEZPTyAuLi4pIC4uLikgYXQgRk9PLgorCitUaHUgQXVnIDEyIDE0OjA0OjQwIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tdW5kZXJzY29yZXMgYW5kCisJLW1uby11bmRlcnNjb3Jlcy4KKwkoQ1BQX1NQRUMpOiBJZiAtbW5vLXVuZGVyc2NvcmVzLCBkZWZpbmUgX19OT19VTkRFUlNDT1JFU19fLgorCShMUFJFRklYKTogUmVkZWZpbmUsIHRvIHRha2UgLW17LG5vLX11bmRlcnNjb3JlcyBpbnRvIGFjY291bnQuCisJKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IERpdHRvLgorCShBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKTogRGl0dG8uCisJKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBEaXR0by4KKworCSogaTM4Ni9vc2ZlbGYuaCAoQ1BQX1NQRUMpOiBJZiAtbW5vLXVuZGVyc2NvcmVzLCBkZWZpbmUKKwlfX05PX1VOREVSU0NPUkVTX18uCisKKwkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IERvbid0IGdpdmUgbmVzdGVkIHdhcm5pbmcgbWVzc2FnZXMgaWYKKwlERUNMX0lOX1NZU1RFTV9IRUFERVIgaXMgc2V0IGluIG9yZGVyIG5vdCB0byBnaXZlIHdhcm5pbmdzIHdoZW4KKwlkZWZpbmluZyBuZXcgaW5zdGFuY2VzIG9mIF9fRlVOQ1RJT05fXyBhbmQgX19QUkVUVFlfRlVOQ1RJT05fXy4KKworVGh1IEF1ZyAxMiAxMzo0MjowNCAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBEZWxldGUgNHRoIGFyZyBTQ1JBVENILgorCUZpeCBhbGwgY2FsbGVycy4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogRGVsZXRlIDNyZCBhcmcgU0NSQVRDSF9SRUcuICBGaXggYWxsCisJY2FsbGVycy4gIElmIG9wZXJhbmQxIGlzIGFuIGludmFsaWQgUElDIGFkZHJlc3MsIHRoZW4gbGVnaXRpbWl6ZQorCWl0IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgorCSogc3BhcmMuaCAoU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUyk6IERlbGV0ZSBjYXNlIGZvciBpbnZhbGlkCisJUElDIGFkZHJlc3Nlcy4KKwkoQ09OU1RBTlRfQUREUkVTU19QKTogUmVqZWN0IGludmFsaWQgUElDIGFkZHJlc3Nlcy4KKwkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogTmV3IG1hY3JvLgorCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBSZWplY3QgaW52YWxpZCBQSUMgYWRkcmVzc2VzLgorCShMRUdJVElNSVpFX0FERFJFU1MpOiBGaXggY2FsbCB0byBsZWdpdGltaXplX3BpY19hZGRyZXNzLgorCSogc3BhcmMubWQgKHJlbG9hZF9pbnNpKTogRGVsZXRlLgorCSgqKTogRml4IGFsbCBjYWxsZXJzIG9mIGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgYW5kIGVtaXRfbW92ZV9zZXF1ZW5jZS4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogSGFuZGxlIFVTRSBiZWZvcmUgYSBKVU1QX0lOU04ganVzdAorCWxpa2UgYSBVU0UgYmVmb3JlIGEgQ0FMTF9JTlNOLgorCSogZnVuY3Rpb24uYyAodGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyk6IEZvciB0aGUKKwllcGlsb2d1ZSwgcHV0IFVTRSBpbnNucyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHJldHVybiBpbnNuLgorCisJKiBzcGFyYy5oIChBU01fT1VUUFVUX0RPVUJMRSk6IEFsd2F5cyB1c2UgUkVBTF9WQUxVRV9UT19UQVJHRVRfRE9VQkxFLgorCShBU01fT1VUUFVUX0ZMT0FUKTogQWx3YXlzIHVzZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUuCisKK1dlZCBBdWcgMTEgMTk6NDg6MjQgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIHRyZWUuYyAoZ2V0X2ZpbGVfZnVuY3Rpb25fbmFtZSk6ICBOZXcgZnVuY3Rpb24KKwlmb3IgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgY29uc3RydWN0b3IgbmFtZSBnZW5lcmF0aW9uLgorCSogb2JqYy1hY3QuYyAoYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiAgVXNlIGl0LgorCSogdHJlZS5oIChDT05TVFJVQ1RPUl9OQU1FX0ZPUk1BVCk6IFJlbW92ZWQuCisKK1dlZCBBdWcgMTEgMTk6NTA6MDUgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IEZpeCB0eXBvLgorCShmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IE9ubHkgYWNjZXNzIHRoZSBKVU1QX0xBQkVMIGZpZWxkCisJaWYgdGhlIElOU04gbmVlZGluZyBkZWxheSBzbG90cyBpcyBhIEpVTVBfSU5TTi4KKworV2VkIEF1ZyAxMSAxNTowOTo1MiAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCk6IERvbid0IGNhbGwgZGVmYXVsdF9jb252ZXJzaW9uCisJZm9yIGEgU1RSSU5HX0NTVCBpZiB0eXBlIGlzIGRpcmVjdGx5IHN1aXRhYmxlIGZvciBpdC4KKwkoZGlnZXN0X2luaXQpOiBFbGltaW5hdGUgYSBsb3Qgb2YgY29kZSB0aGF0IGNoZWNrcyB0aGUgdmFyaWFibGUKKwknZWxlbWVudCcsIHNpbmNlIGVsZW1lbnQgaXMgYWx3YXlzIDAgaW4gdGhlc2UgY29kZSBwYXRocy4KKworV2VkIEF1ZyAxMSAxNzo1OToyOCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb21iaW5lLmMgKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogRml4IHR5cG8gb24gdGVzdCBvZiBiYXNpYyBibG9jaworCW51bWJlci4KKworV2VkIEF1ZyAxMSAxNzo0NDozOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAobTY4ay1ocC1ic2Q0LjQqKTogQWRkIG1pc3NpbmcgKjsKKwltb3ZlIGJlZm9yZSBtNjhrLWhwLWJzZCouCisKK1dlZCBBdWcgMTEgMDk6MjE6NTYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogR2V0IFNJWkVfVFlQRSBieSBpbnZva2luZyBnY2MgcmF0aGVyIHRoYW4gY2M7IGdjYworCWxvY2F0aW9uIGlzIHBhc3NlZCBpbiBhcyBmb3VydGggYXJndW1lbnQuCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhpbmMpOiBEZXBlbmQgdXBvbiB4Z2NjIGFuZCBjcHA7IHBhc3MKKwlvYmpkaXIveGdjYyAtQm9iamRpci8gYXMgZm91cnRoIGFyZ3VtZW50IHRvICQoRklYSU5DTFVERVMpLgorCitUdWUgQXVnIDEwIDE1OjEyOjExIDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogQWZ0ZXIgaW5zZXJ0aW5nIHNyY19lcXYsIGNoZWNrIHRvIHNlZSBpZiBpdCBpcworCWlkZW50aWNhbCB0byBhbnkgdW5pbnNlcnRlZCBTRVRfU1JDcywgYW5kIGlmIHNvLCBzZXQgdGhlaXIgc3JjX2VsdAorCXRvIHNyY19lcXZfZWx0LgorCitUdWUgQXVnIDEwIDEyOjU2OjQ2IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChET0xMQVJTX0lOX0lERU5USUZJRVJTKTogRGVmaW5lIGFzIDIuCisKK01vbiBBdWcgIDkgMTk6MDI6NDkgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCU1lcmdlZCBmaXhwcm90byBzdHVmZiBmcm9tIEN5Z251cy4KKworCUZyaSBBdWcgIDYgMTI6MjM6MDQgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGZpeHByb3RvLCBNYWtlZmlsZS5pbjogIFJlbmFtZSB0bXAuW2NpXSAtPiBmaXh0bXAuW2NpXS4KKworCVR1ZSBBdWcgIDMgMjI6MjQ6NTggMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGZpeHByb3RvOiAgRmluZCBub3Qgb25seSBuZXN0ZWQgZGlyZWN0b3JpZXMsIGJ1dCBhbHNvCisJbGlua3MgdG8gZGlyZWN0b3JpZXMuCisKKwlNb24gQXVnICAyIDE4OjU4OjM1IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBmaXhwcm90bzogIEFkZCBrbHVkZ2UgdG8gZ2V0dGluZyBoaXQgYnkgZG91YmxlIGdsb2JiaW5nLgorCSogc2Nhbi10eXBlcy5zaDogIEZpeCB0byBlbWl0ICNkZWZpbmUsIG5vdCBhIHR5cGVkZWYuCisJKiBwYXRjaC1oZWFkZXIuYyAobWFpbik6ICBNYWtlIHN1cmUgdG8gcHJpbnQgYSBzcGFjZSBhZnRlcgorCWEgZnVuY3Rpb24gbmFtZSB3aGVuIHdlIGRpZG4ndCBzZWUgYSAnKCcuCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhwcm90byk6IEZpeCBzbyAoLyouLi4qLykgYmVjb21lcyAoKS4KKworCUZyaSBKdWwgMzAgMTc6MTg6MjIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGZpeHByb3RvOiAgQXBwZW5kIHNlZW4gZmlsZXMgdG8gZml4cHJvdG8ubGlzdCBmaWxlLAorCWluc3RlYWQgb2YgZG9uZV9maWxlcyB2YXJpYWJsZSAod2hpY2ggY291bGQgYmVjb21lIHRvbyBsb25nKS4KKwkqIGZpeHByb3RvOiAgRG9uJ3QgZ2VuZXJhdGUgYSBodWdlIHJlbF9zb3VjZV9maWxlcyB2YXJpYWJsZQorCSh3aGljaCBtaWdodCBiZWNvbWUgdG9vIGxvbmcpOyAgaW5zdGVhZCBsb29wIG92ZXIgZGlyZWN0b3JpZXMuCisJKiBmaXhwcm90bzogIFJlbW92ZSBzaWduYWwoKSBmcm9tIGxpc3Qgb2YgcmVxdWlyZWQgZnVuY3Rpb25zCisJZm9yIHNpZ25hbC5oLCBiZWNhdXNlIHdlIGNhbid0IGdyb2sgaXRzIGNvbXBsaWN0ZWQgcHJvdG90eXBlLgorCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogIEFsc28gZGVsZXRlIGZpeHByb3RvLmxpc3QuCisKKwlUaHUgSnVsIDI5IDEyOjQzOjUzIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBzY2FuLWRlY2xzLmMgKHNraXBfdG9fZW5jbG9zaW5nX2JyYWNlKTogIE5ldyBmdW5jdGlvbi4KKwkqIHNjYW4tZGVjbHMuYyAobWFpbik6ICBBZnRlciBhIHBhcmFtZXRlciBsaXN0LCBza2lwCisJYW55IGZvbGxvd2luZyBmdW5jdGlvbiBib2R5ICh1c3VhbGx5IGZvciBpbmxpbmUgZnVuY3Rpb25zKS4KKworCSogZml4cHJvdG86ICBGaXggdG8gbWFrZSBzdXJlIHN0ZGxpYi5oIGFuZCB1bmlzdGQuaCBnZXQKKwl0aGUgcHJvcGVyIHJlcXVpcmVkX2xpc3QsIGV2ZW4gd2hlbiB0aGV5IG5lZWQgdG8gYmUgY3JlYXRlZC4KKwkqIGZpeHByb3RvOiAgRGlyZWN0IGNwcCBlcnJvciBtZXNzYWdlcyB0byAvZGV2L251bGwuCisJKiBwYXRjaC1oZWFkZXIuYzogIE1ha2UgbGVzcyB2ZXJib3NlLgorCisJV2VkIEp1bCAyOCAxNjoxMjozOSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogZml4cHJvdG86ICBSZXdyaXRlIHRvIHVzZSBhIGNhc2Ugc3RhdGVtZW50IGluc3RlYWQgb2YgZXZhbCB0bworCXNldCByZXF1aXJlZF9saXN0IGFuZCBleHRyYV9jaGVja19saXN0LgorCSogZml4cHJvdG86ICBTaW1wbGlmeSByZW1haW5pbmcgY2FsbCB0byB0ciBpbXByb3ZpbmcgcG9ydGFiaWxpdHkuCisKKwkqIHNjYW4tZGVjbDogIFJlY29nbml6ZSBpbmxpbmUgZnVuY3Rpb25zLCBlbWl0dGluZyB0eXBlY29kZSAnSScuCisJKiBwYXRjaC1oZWFkZXIgKHJlYWRfc2Nhbl9maWxlKTogIEhhbmRsZSBpbmxpbmUgZnVuY3Rpb25zLgorCSogcGF0Y2gtaGVhZGVyIChyZWFkX3NjYW5fZmlsZSk6ICBGaXggdGhpbmtvLiAgUmVuYW1lIHZhcmlhYmxlLgorCitNb24gQXVnICA5IDE3OjQ3OjQ4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRm9yICh2b2lkICopIChGT08gKikgMCwgcmV0dXJuIGEgbm9wX2V4cHIKKwlzbyBpdCBkb2Vzbid0IGNvdW50IGFzIGEgbnVsbCBwb2ludGVyIGNvbnN0YW50LgorCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50LCBidWlsZF9iaW5hcnlfb3ApOiBQZWRhbnRpY2FsbHkgd2FybiBhYm91dAorCXRoYXQgY2FzZSBpZiBsb29raW5nIGZvciBhIG51bGxfcG9pbnRlcl9jb25zdGFudC4KKwkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IExpa2V3aXNlLgorCisJKiBuczMyay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBGaXggdHlwb3MgaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IERvbid0IHJldHVybiBURU1QIGlmIGl0J3MgYSBNRU0uCisKK01vbiBBdWcgIDkgMTU6MjY6MjcgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVyX3ZhcmlhYmxlKTogRm9yIFhDT0ZGX0RFQlVHLCByZXN0b3JlIHNlY3Rpb24KKwlpZiBkYnhvdXRfc3ltYm9sIGNhbGwgY2hhbmdlcyBpdC4KKworCSogc2NoZWQuYyAoc2NoZWR1bGVfaW5zbnMpOiBEb24ndCBlbWl0IGEgTk9URSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0CisJYmFzaWMgYmxvY2sgaWYgdGhhdCB3b3VsZCBwdXQgaXQgYmV0d2VlbiBhIEpVTVBfSU5TTiBhbmQgYSBCQVJSSUVSLgorCisJKiBtaXBzLmggKE9QVElNSVpBVElPTl9PUFRJT05TKTogVXNlIHw9LCBub3QgJj0gdG8gc2V0IC1tcGdvcHQuCisJKiBtaXBzLmMgKGZ1bmN0aW9uX2FyZywgREZtb2RlIGNhc2UpOiBTZXQgcmVnYmFzZSB0byBHUF9BUkdfRklSU1QKKwlpZiBjdW0tPmFyZ19udW1iZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIuCisKK01vbiBBdWcgIDkgMDc6MzE6MDcgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogb3B0YWJzLmMgKHdpZGVuX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGV4cGFuZF9iaW5vcCwgZXhwYW5kX3Vub3ApOiBDYWxsIGl0LgorCitTdW4gQXVnICA4IDE3OjMyOjA0IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IFByb3Blcmx5IGhhbmRsZSBjYXNlIHdoZW4gTU9ERSBpcworCW5hcnJvd2VyIHRoYW4gdGhhdCBvZiBYLgorCShzaW1wbGlmeV9zaGlmdF9jb25zdCk6IFJlbW92ZSBjaGFuZ2Ugb2YgSnVseSAyNi4KKworU3VuIEF1ZyAgOCAxNzoyNjo1NyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmMgKHNwYXJjX3R5cGVfY29kZSk6IFN1cHBvcnQgcmFuZ2UgdHlwZXMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2luY3JlbWVudCk6IENhbGwgc2F2ZV9leHByIG9uIGlubmVyIGV4cHJlc3Npb24gaWYKKwlpdCBpcyBpdHNlbGYgYW4gaW5jcmVtZW50IGV4cHJlc3Npb24uCisKKwkqIGNvbmZpZ3VyZSAoKi0qLXJpc2NvcyopOiBTZXQgYnJva2VuX2luc3RhbGwuCisJKG1pcHMtKi1yaXNjb3NbNTY3ODldc3lzdjQpOiBVc2UgeG0tc3lzdjQuaC4KKwkqIG1pcHMveG0tc3lzdjQuaDogTmV3IGZpbGUuCisJKiBtaXBzL3N2cjMtNS5oLCBtaXBzL3N2cjQtNS5oIChfU0NfUEFHRV9TSVpFKTogRGVmaW5lIHRvCisJX1NDX1BBR0VTSVpFIGlmIHRoYXQgZXhpc3RzLgorCisJKiBzcGFyYy5oIChDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogVXNlIGZwX3plcm9fb3BlcmFuZC4KKwkqIHNwYXJjLmMgKHJlZ19vcl8wX29wZXJhbmQpOiBVc2UgZnBfemVyb19vcGVyYW5kLgorCShmcF96ZXJvX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IEZvcmNlIGFycmF5IHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUKKwlzdGFjayBpZiBpdCBpcyBhY2Nlc3NlZCBieSBvdXQtb2YtYm91bmQgY29uc3RhbnQgaW50ZWdlciBzdWJzY3JpcHQuCisKKwkqIGNvbmZpZ3VyZSAobWlwcy0qKTogU3RhbmRhcmRpemUgaW5kZW50YXRpb24uCisJKG1pcHMtKi0qYnNkKik6IFVzZSB0LWJzZCBhbmQgdC1ic2QtZ2FzLgorCShtaXBzLSotKnN5c3Y0Kik6IFVzZSB0LXN2cjQgYW5kIHQtc3ZyNC1nYXMuCisJKG1pcHMtKi0qc3lzdiopOiBVc2UgdC1zdnIzIGFuZCB0LXN2cjMtZ2FzLgorCSogbWlwcy90LWJzZCwgbWlwcy90LWJzZC1nYXMsIG1pcHMvdC1zdnIzLCBtaXBzL3Qtc3ZyMy1nYXMsCisJbWlwcy90LXN2cjQsIG1pcHMvdC1zdnI0LWdhczogTmV3IGZpbGVzLgorCitTdW4gQXVnICA4IDExOjMzOjUxIDE5OTMgIEpvaG4gRiBDYXJyICAoamZjQEF0aGVuYS5taXQuZWR1KQorCisJKiBleHBtZWQuYyAoU0xPV19VTkFMSUdORURfQUNDRVNTKTogRGVmaW5lLCBidXQgYWxsb3cgb3ZlcnJpZGUuCisJKHN0b3JlX2JpdF9maWVsZCk6IFRlc3QgdGhhdCBpbnN0ZWFkIG9mIFNUUklDVF9BTElHTk1FTlQuCisJQWxzbywgYWxsb3cgZmV0Y2hpbmcgYXMgbm9uLWJpdGZpZWxkIGlmIG1lbW9yeSBpcyBhbGlnbmVkIGVub3VnaC4KKwkoZXh0cmFjdF9iaXRfZmllbGQpOiBJbnN0YWxsIGNvZGUgaGVyZSBsaWtlIHRoYXQgaW4gc3RvcmVfYml0X2ZpZWxkLgorCitTdW4gQXVnICA4IDA0OjI2OjIxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IElmIFdBTlRfVkFMVUUgaXMgMCwgcmV0dXJuIE5VTEwuCisJKHN0b3JlX2V4cHIpOiBMaWtld2lzZS4KKwlSZW5hbWUgYXJnIFNVR0dFU1RfUkVHIHRvIFdBTlRfVkFMVUUuCisJTmV2ZXIgcmV0dXJuIFRBUkdFVCBpZiBXQU5UX1ZBTFVFIHVubGVzcyBCTEttb2RlLgorCUluc3RlYWQsIHJldHVybiBURU1QIG9yIGEgdmFsdWUgY29waWVkIGZyb20gVEFSR0VULgorCVBhc3MgMCBmb3IgV0FOVF9WQUxVRSBpbiByZWN1cnNpdmUgY2FsbHMgdGhhdCBpZ25vcmUgdmFsdWUuCisKKwkqIHZhcmFzbS5jIChjb250YWluc19wb2ludGVyc19wKTogTmV3IGZ1bmN0aW9uLgorCShhc3NlbWJsZV92YXJpYWJsZSk6IFVzZSB0aGF0LgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogRG9uJ3QgbG9vayBhdCBERUNMX0lHTk9SRURfUC4KKwlEb24ndCBvdXRwdXQgYSByZWFkLW9ubHkgaW5pdGlhbGl6ZWQgZXh0ZXJuIHZhcmlhYmxlLgorCisJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBTZXQgREVDTF9FWFRFUk5BTCBpbiB0aGUgZGVjbHMuCisKK1NhdCBBdWcgIDcgMjI6MjU6NDIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfZWxlbWVudCk6IERvbid0IGNhbGwgY2xlYXJfbW9tZW50YXJ5CisJaWYgdmFsdWUgaXMgMC4KKworU2F0IEF1ZyAgNyAxNTo1MzowNiAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBjYWxsZXItc2F2ZS5jIChNQVhfTU9WRV9NQVgsIE1BWF9VTklUU19QRVJfV09SRCk6IE5ldyBtYWNyb3MuCisgICAgICAgIChyZWdub19zYXZlX21vZGUsIHJlZ25vX3NhdmVfbWVtKTogVXNlIHRoZW0uCisgICAgICAgICogdG0udGV4aSAoTUFYX01PVkVfTUFYLCBNQVhfVU5JVFNfUEVSX1dPUkQpOiBEb2N1bWVudCB0aGVtLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYWtlIGxvbmcgbG9uZyBhdmFpbGFibGUgdG8KKwl1c2UgZm9yIFNJWkVfVFlQRSBhbmQgUFRSRElGRl9UWVBFLgorCitTYXQgQXVnICA3IDE0OjQ3OjEyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL25zMzJrL25zMzJrLm1kIChzdHJpY3RfbG93X3BhcnQgYWRkL3N1YnRyYWN0IHJlY29nbml6ZXJzKToKKwlVc2UgJTIsIG5vdCAlMSwgaW4gdGVtcGxhdGUuCisKK1NhdCBBdWcgIDcgMDc6NDA6MjggMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvbid0IGNvbWJpbmUgdHdvIHJlbG9hZHMgaWYgdGhlaXIKKwlyZWxvYWRfcmVnX3J0eCB2YWx1ZXMgZGlmZmVyLgorCisJKiBhbHBoYS5jIChhZGRfbG9uZ19jb25zdCk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X3twcm8sZXBpfWxvZyk6IFVzZSBpdC4KKwlJZiByZWdpc3RlciBzYXZlIGFyZWEgaXMgbW9yZSB0aGFuIDMyNzY4IGZyb20gU1AsIGNvbXB1dGUgaXRzCisJYWRkcmVzcyBpbnRvIGEgcmVnaXN0ZXIuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogQ2xlYW4gdXAgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwKKwllc3BlY2lhbGx5IGluIGFyZWFzIHJlbGF0ZWQgdG8gd2hlbiBjb3BpZXMgYXJlIG1hZGUuCisKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCwgZmluZF9yZWxvYWRzKTogVHJlYXQgKHN1YnJlZyAocHNldWRvKSkKKwlhbmQgKHN1YnJlZyAobWVtKSkgdGhlIHNhbWUuCisJSWYgd2UgaGF2ZSAoc3VicmVnOk0xIChtZW06TTIgLi4uKSAuLi4pLCBuZXZlciBkbyBhbnl0aGluZworCXNwZWNpYWwgaWYgTTEgYW5kIE0yIGFyZSB0aGUgc2FtZSBzaXplLgorCisJKiB0cmVlLmMgKHByaW50X29ic3RhY2tfbmFtZSk6IE5ldyBmdW5jdGlvbjsgZGVyaXZlZCBmcm9tCisJb3JpZ2luYWwgZGVidWdfb2JzdGFjay4KKwkoZGVidWdfb2JzdGFjayk6IENhbGwgcHJpbnRfb2JzdGFja19uYW1lLgorCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgb2JzdGFjayBub2RlIGlzIGNvbnRhaW5lZCBpbi4KKworU2F0IEF1ZyAgNyAwNDo0Nzo0MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IEFsbG93IGZpbGUtc2NvcGUgc3RhdGljIGluY29tcGxldGUgYXJyYXkuCisKK0ZyaSBBdWcgIDYgMTM6MDM6MjcgMTk5MyAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFBMVVNfRVhQUik6IEdvdG8gYmlub3AyIG5vdAorCWJvdGhfc3VtbWFuZHMgaWYgd2Ugc2hvdWxkIG5vdCBiZSByZXR1cm5pbmcgYSBwbHVzLgorCitGcmkgQXVnICA2IDE2OjM1OjUwIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL202OGsvbTY4ay5tZCAoY2FsbCBhbmQgY2FsbF92YWx1ZSBwaWMgcmVjb2duaXplcnMpIFtIUFVYX0FTTV06CisJT3V0cHV0IHBsYWluIGJzciwgd2l0aG91dCBgQFBMVFBDJy4KKworRnJpIEF1ZyAgNiAxNjoxMjowOCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jIChyZWdfb3JfNmJpdF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIHJlZ19vcl82Yml0X29wZXJhbmQgdG8gbGlzdC4KKwkqIGFscGhhLm1kIChzaGlmdHMpOiBVc2UgcmVnX29yXzZiaXRfb3BlcmFuZCBmb3Igc2hpZnQgY291bnRzLgorCitGcmkgQXVnICA2IDE1OjU3OjU4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZ2NjLmMgKG1haW4pOiBJZiBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4IGlzIGEgcmVsYXRpdmUgcGF0aCwKKwlwcmVwZW5kIHN0YW5kYXJkX2V4ZWNfcHJlZml4L01BQ0hJTkUvVkVSU0lPTiBhbmQsIGlmCisJR0NDX0VYRUNfUFJFRklYIGlzIGRlZmluZWQsIEdDQ19FWEVDX1BSRUZJWC9NQUNISU5FL1ZFUlNJT04uCisKKwkqIGNvbmZpZ3VyZTogSWYgY29uZmlnLnN0YXR1cyBkaWQgbm90IGNoYW5nZSwgZG9uJ3QgdXBkYXRlIGl0cworCW1vZGlmaWNhdGlvbiB0aW1lLgorCitGcmkgQXVnICA2IDE1OjIzOjQ5IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCk6IEZpeCBiYWNrd2FyZCB0ZXN0IGluIGxhc3QgY2hhbmdlLgorCVVzZSBUWVBFX01BSU5fVkFSSUFOVC4KKworRnJpIEF1ZyAgNiAwNjo0MzowOSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogZysrLmMgKGZhbmN5X2Fib3J0KTogUHJvdmlkZSBmdW5jdGlvbiBpbiBjYXNlIHVzZXIgZG9lcworCSNkZWZpbmUgYWJvcnQgZmFuY3lfYWJvcnQgd2hlbiBidWlsZGluZyBHQ0MuCisKK0ZyaSBBdWcgIDYgMDA6MTU6MjEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjY2NwLmMgKG1haW4pOiBJZiAtdiwgcHJpbnQgaGVhZGVyIHNlYXJjaCBkaXIgbGlzdC4KKworCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCk6IENhbGwgZGVmYXVsdF9jb252ZXJzaW9uIGhlcmUuCisJU2V0IGNvbnN0cnVjdG9yX2Vycm9uZW91cywgZXRjLiwgaGVyZS4KKwkocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBOb3QgaGVyZS4KKworVGh1IEF1ZyAgNSAyMDo1NTo0NyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlDeWdudXM8LT5GU0YgbWVyZ2UuCisKKwlUaHUgQXVnICA1IDE3OjA3OjIwIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoYnVpbGRfdnRhYmxlLCBwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IFR1cm4gb24KKwlXUklUQUJMRV9WVEFCTEVTIHN0dWZmIHRoYXQgSSBkaXNhYmxlZCBKdWx5IDMwdGguCisJKiBjcC1wdC5jOiBJbmNsdWRlIGZsYWdzLmggdG8gZ2V0IHdyaXRlX3N5bWJvbHMuCisKKwlUaHUgQXVnICA1IDE1OjUwOjI1IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IE1ha2UgRFdBUkYgY29uZGl0aW9uYWwgY29kZSwgcmVhbGx5CisJRFdBUkYgY29uZGl0aW9uYWwgKHdyaXRlX3N5bWJvbHMgPT0gRFdBUkZfREVCVUcpLgorCSogY3AtZGVjbC5jIChwdXNodGFnKTogRGl0dG8uCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBEaXR0by4KKwkqIGNwLXB0LmMgKGVuZF90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uKTogRGl0dG8uCisJKiBjcC1zZWFyY2guYyAoZGZzX2RlYnVnX21hcmspOiBEaXR0by4KKworCVdlZCBBdWcgIDQgMTU6NDI6MTkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfb2JqZWN0X3JlZik6IFBhc3MgdGhlIG9yaWdpbmFsIGJhc2V0eXBlLCBub3QKKwl0aGUgdHlwZSB2YWx1ZSBvZiBpdCwgaW50byBidWlsZF9zY29wZWRfcmVmIChjb21wbGV0ZXMgY2hhbmdlIG9mCisJSnVsIDEpLgorCisJV2VkIEF1ZyAgNCAxNDo0MDozNSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKHJlbGF0ZWRfdnNsb3QpOiBBZGRpdGlvbmFsIGNoZWNrIHRvIG1ha2Ugc3VyZSB2c2xvdHMKKwlhcmUgcmVsYXRlZC4KKwkqIGNwLWNsYXNzLmMgKG1vZGlmeV92dGFibGVfZW50cmllcyk6IFVzZSBERUNMX0NPTlRFWFQsIG5vdAorCURFQ0xfQ0xBU1NfQ09OVEVYVCB3aGVuIGZpbmRpbmcgdGhlIHZ0YWJsZSB0byBwdXQgdGhlIHZpcnR1YWwKKwlmdW5jdGlvbiBpbiwgYXMgb3RoZXJ3aXNlIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGZpbmQgc2Vjb25kYXJ5CisJdnRhYmxlcy4gIEVuc3VyZXMgdGhhdCB0aGUgdmlydHVhbCBmdW5jdGlvbiBwb2ludGVyIHdpbGwgYmUgcHV0IGluCisJdGhlIGNvcnJlY3QgdnRhYmxlLCBpbnN0ZWFkIG9mIHRoZSB3cm9uZyBvbmUuCisJKiBjcC1jbGFzcy5jIChtb2RpZnlfdnRhYmxlX2VudHJ5KTogRGVsZXRlIHVudXNlZCBhcmd1bWVudCBjb250ZXh0LgorCSogY3AtY2xhc3MuYyAobW9kaWZ5X3Z0YWJsZV9lbnRyaWVzKTogRGl0dG8uCisKKwlUdWUgQXVnICAzIDA4OjI0OjUwIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChuY19uZWx0c19maWVsZF9pZCk6IE5ldyB2YXJpYWJsZSB0byBjYWNoZSB0aGUgdmFsdWUgb2YKKwl0aGUgIm5lbHRzIiBpZGVudGlmaWVyLCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWxscyB0byBnZXRfaWRlbnRpZmllci4KKwkoaW5pdF9pbml0X3Byb2Nlc3NpbmcpOiBVc2UgaXQuCisJKGJ1aWxkX25ldyk6IExpa2V3aXNlLgorCShidWlsZF92ZWNfZGVsZXRlKTogTGlrZXdpc2UuCisKKwkqIGNwLWRlY2wyLmMgKHdhbGtfdnRhYmxlcyk6IE1ha2Ugc3VyZSB0aGUgdHlwZSBvZiBWQVJTIGlzbid0IGFuCisJZXJyb3JfbWFya19ub2RlIHdoZW4gd2UncmUgcnVubmluZyBkb3duIHRoZSBsaXN0LgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogR2l2ZSBhbiBlcnJvciBhbmQgcmV0dXJuIGFuCisJZXJyb3JfbWFya19ub2RlLCBpbnN0ZWFkIG9mIHNheWluZyBzb3JyeSwgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYQorCXN0cnVjdHVyZSB0aGF0J3Mgbm90IHlldCBiZWVuIGRlZmluZWQuICAgTWFrZSBzdXJlIHR5cGUgaXNuJ3QgYW4KKwllcnJvcl9tYXJrX25vZGUgd2hlbiBsb29raW5nIGZvciBhbiBhbm9ueW1vdXMgdHlwZS4KKworCSogY3AtcHQuYyAoZW5kX3RlbXBsYXRlX2luc3RhbnRpYXRpb24pOiBJZiB3ZSdyZSBzdXBwbHlpbmcgZHdhcmYKKwlkZWJ1ZyBpbmZvLCBzZXQgdXAgdGhlIFRZUEVfU1RVQl9ERUNMIGFuZCBvdXRwdXQgdGhlIHJlc3Qgb2YgdGhlCisJZGVidWcgb3V0cHV0IGZvciB0aGUgZGVjbC4KKworCSogY3Atc2VhcmNoLmMgKHBvcF9zZWFyY2hfbGV2ZWwpOiBDaGFuZ2UgZnJvbSBhIG1hY3JvIGludG8gYQorCWZ1bmN0aW9uLCBzbyB3ZSBjYW4gbW9yZSBlYXNpbHkgZGVidWcgaXQuCisKKwkqIGNwLXNlYXJjaC5jIChkZnNfZGVidWdfbWFyayk6IE9ubHkgbWFyayB0aGUgdHlwZSBuYW1lIGFzIGlnbm9yZWQKKwlpZiB3ZSBhcmVuJ3QgZG9pbmcgZHdhcmYgZGVidWdnaW5nLgorCisJKiBjcC10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBPbmx5IGFsbG93IHRoZSBwcmVmaXggb3BlcmF0b3JzIHRvCisJYmUgbHZhbHVlcywgbm90IHRoZSBwb3N0Zml4IG9uZXMuCisKKwkqIGNwLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRGVsZXRlIHRoZSBjb2RlIHRoYXQgc2F2ZWQgYW5kCisJcmVzdG9yZWQgdGhlIFVJRCBvZiBhIGRlY2wsIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworCSogY3AtY2FsbC5jIChjb21wdXRlX2NvbnZlcnNpb25fY29zdHNfYW5zaSk6IEF2b2lkIGdlbmVyYXRpbmcKKwl3YXJuaW5ncyB3aGVuIHdlIGNhbGwgYnVpbGRfdHlwZV9jb252ZXJzaW9uLgorCisJTW9uIEF1ZyAgMiAxNzo1NjozNiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBDb21wbGFpbiBhYm91dCByZWRlY2xhcmF0aW9uIG9mIGEKKwl0ZW1wbGF0ZSBmdW5jdGlvbiwgYmVpbmcgY2FyZWZ1bCB0byBvbmx5IGRlYWwgd2l0aCBwcmUtcGFyc2VkCisJZGVjbGFyYXRpb25zIHRoYXQgKmFyZSogaW4gZmFjdCBmcm9tIHRlbXBsYXRlcy4KKworCUZyaSBKdWwgMzAgMTg6MDM6MTAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jLCBjcC1kZWNsLmMsIGNwLXB0LmMsIGNwLXRyZWUuaDogRGVsZXRlIGFsbCBvZiB0aGUgb2xkCisJY29kZSBmb3IgREVCVUdfQ1BfQklORElOR19MRVZFTFMsIGFuZCByZXBsYWNlIGl0IHdpdGggYSBuZXcsIGNsZWFuZXIsCisJYW5kIG1vcmUgdXNhYmxlIGZvcm1hdC4KKworCUZyaSBKdWwgMzAgMTc6MDY6MjQgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChidWlsZF92dGFibGUsIHByZXBhcmVfZnJlc2hfdnRhYmxlKTogVGVtcG9yYXJpbHkKKwlkaXNhYmxlIHRoZSBjaGFuZ2Ugb2YgSnVuZSAyMHRoIG1ha2luZyB2dGFibGVzIHJlYWRvbmx5IGJ5IGRlZmF1bHQuCisKKwlGcmkgSnVsIDMwIDE0OjQ3OjA5IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IE1ha2Ugc3VyZSB3ZSBpbml0aWFsaXplIHRoZSBwb2ludGVyIHRvCisJdnRhYmxlcyBldmVuIHdoZW4gd2UgYXJlIG5vdCBpbiBjaGFyZ2UuICBGaXhlcyB2aXJ0dWFsIGNhbGxzIHRvIGRlcml2ZWQKKwlvYmplY3RzIHRoYXQgaGF2ZSBhIHN0YXRpYyBiYXNlIHR5cGUsIHNvIHRoYXQgdGhleSBjYWxsIGRlcml2ZWQKKwlmdW5jdGlvbnMsIG5vdCBiYXNlIGZ1bmN0aW9ucy4KKwkqIGNwLXNlYXJjaC5jIChidWlsZF92YmFzZV92dGFibGVzX2luaXQpOiBDaGFuZ2UgY29tbWVudHMgdG8gcmVmbGVjdAorCXVzZXMgb2YgbGFzdCBhcmd1bWVudCBtb3JlIGFjY3VyYXRlbHkuICBBbHNvIHJlbmFtZSBsYXN0IGFyZ3VtZW50IHRvCisJYSBiZXR0ZXIgbmFtZS4KKworCVdlZCBKdWwgMjggMTY6MjM6NTIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoYnVpbGRfdHlwZV9wYXRobmFtZSk6IERlbGV0ZWQgZm4uCisJKiBjcC1jbGFzcy5jIChidWlsZF90eXBlX3BhdGhuYW1lKTogTW92ZWQgdG8gaGVyZSBhbmQgbWFkZSBzdGF0aWMsCisJc2luY2UgcHJlcGFyZV9mcmVzaF92dGFibGUgaXMgdGhlIG9ubHkgZm4gdGhhdCBldmVyIHVzZXMgaXQuCisJKiBjcC10cmVlLmggKGJ1aWxkX3R5cGVfcGF0aG5hbWUpOiBEZWxldGVkIHByb3RvdHlwZS4KKworCSogZysrLmMgKGVycm9yKSBbIUhBVkVfVkZQUklOVEZdOiBNb3ZlIGJlZm9yZSBmYXRhbCB0byBhdm9pZCBhbgorCWltcGxpY2l0IGRlY2xhcmF0aW9uLgorCisJV2VkIEp1bCAyOCAxMzo0OTo1OCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChnKystY3Jvc3MpOiBBZGQgYW4gZXhwbGljaXQgJChzcmNkaXIpIGZvciBnKysuYywgcGFzcworCXRoZSBxdW90ZXMgYXMgcGFydCBvZiBHQ0NfTkFNRQorCisJKiBnKysuYzogb25seSBkZWZpbmUgR0NDX05BTUUgaWYgaXQncyBhbHJlYWR5IHVuZGVmaW5lZAorCisJVHVlIEp1bCAyNyAxMDo0ODozMCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEb24ndCBlcnJvciBvbiB1bmluaXRpYWxpemVkIGNvbnN0CisJYXJyYXlzLiAgVXNlIGVycm9yLCBub3QgZXJyb3Jfd2l0aF9kZWNsLCBzbyB3ZSBrbm93IHdoYXQgcmVhbGx5CisJYnJvdWdodCBhYm91dCB0aGUgcHJvYmxlbXMuCisKKwkqIGcrKy5jOiBOZXcgZmlsZSwgd3JpdHRlbiBpbiBDIHNvIHdlIGRvbid0IGRvIHNvIG1hbnkgZXhlYydzLCBhcyB3ZQorCWRpZCB3aXRoIHRoZSBzaGVsbCBzY3JpcHQuCisJKiBnKyssIGMrKzogRGVsZXRlZC4KKwkqIE1ha2VmaWxlLmluIChTVEFHRVNUVUZGKTogQWRkZWQgZysrIGFuZCBnKystY3Jvc3MuCisJKGFsbC5jcm9zcyk6IEFkZGVkIGcrKy1jcm9zcy4KKwkoYWxsLmJ1aWxkKTogRGVwZW5kIHVwb24gZysrLgorCShnKyssIGcrKy1jcm9zcyk6IE5ldyBydWxlcy4KKwkoaW5zdGFsbC1jb21tb24pOiBEZXBlbmQgdXBvbiBnKysuICBDaGFuZ2VkIGluc3RhbGxhdGlvbiBvZiBnKysvYysrCisJdG8gaW5zdGFsbCB0aGUgZysrIHByb2dyYW0sIGFuZCBsaW5rIGMrKyB0byBpdC4gIExpa2V3aXNlIGZvcgorCWcrKy1jcm9zcyBhbmQgYysrLWNyb3NzLgorCisJTW9uIEp1bCAyNiAwOTo0MDozNyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCkgW2Nhc2UgQUREUl9FWFBSXTogV2hlbiB0YWtpbmcgdGhlCisJYWRkcmVzcyBvZiBhbiBpbmNyZW1lbnQvZGVjcmVtZW50IG9wZXJhdGlvbiwgYWN0IG9uIHRoZSB0aGluZworCWJlaW5nIGluY3JlbWVudGVkLCBub3QgdGhlIC4uLl9FWFBSIGl0c2VsZi4KKworCUZyaSBKdWwgMjMgMDg6MzM6MzIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQ2hlY2sgREVDTF9TVEFUSUNfRlVOQ1RJT05fUCwgbm90CisJVFJFRV9TVEFUSUMsIHdoZW4gdmFsaWRhdGluZyBhIG1ldGhvZCBjYWxsIGluIGEgc3RhdGljIGNhbGwgY29udGV4dC4KKworVGh1IEF1ZyAgNSAxOToxODowMCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmggKFRZUEVfT0JTVEFDSyk6IE5ldyBtYWNyby4KKwkoc3RydWN0IHRyZWVfdHlwZSk6IEFkZCBuZXcgZmllbGQgb2JzdGFjay4KKwkqIHRyZWUuYyAobWFrZV9ub2RlLCBjb3B5X25vZGUpOiBTZXQgVFlQRV9PQlNUQUNLLgorCShidWlsZF90eXBlX3ZhcmlhbnQsIGJ1aWxkX3R5cGVfY29weSwgYnVpbGRfcG9pbnRlcl90eXBlKTogUHV0CisJbmV3IG5vZGUgaW4gc2FtZSBvYnN0YWNrIGFzIG9sZCBub2RlOyB1c2UgcHVzaC9wb3Agb2JzdGFja3MuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IFB1dCBzaXplLXJlbGF0ZWQgbm9kZXMgaW4gc2FtZQorCW9ic3RhY2sgYXMgdHlwZS4KKwkKKwkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCwgZmluZF9yZWxvYWRzKTogUmVmaW5lIHdoZW4gd2UgcmVsb2FkCisJaW5zaWRlIGEgU1VCUkVHIGJ5IHJlc3BlY3RpbmcgQllURV9MT0FEU18qX0VYVEVORDsgc2VlIGNvbW1lbnRzCisJaW4gcHVzaF9yZWxvYWQuCisKK1RodSBBdWcgIDUgMTQ6MTc6NTkgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKTogRW5hYmxlIHNldHRpbmcgdGhlCisJc2l6ZSBmb3IgZWxmIGZ1bmN0aW9ucy4KKworVGh1IEF1ZyAgNSAwMTo0NDozNyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBJZiBub3Qgb3B0aW1pemluZywgdHVybiBvZmYKKwlERUNMX0lOTElORSBmb3IgZnVuY3Rpb25zIGRlY2xhcmVkIGFzIGlubGluZS4gIEF2b2lkIHR1cm5pbmcgb24KKwlERUNMX0lOTElORSB3aGVuIC1maW5saW5lLWZ1bmN0aW9ucyBpcyB1c2VkIHdpdGhvdXQgLU8uCisKK1RodSBBdWcgIDUgMDA6MDY6NDUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChoYW5kbGVyKTogQ2hlY2sgd2hldGhlciBjX2ZpbGUgYW5kIG9fZmlsZSBhcmUgMC4KKworV2VkIEF1ZyAgNCAxODowNjoyNiAxOTkzICBTYW11ZWwgQS4gRmlndWVyb2EgIChmaWd1ZXJvYUBjcy5ueXUuZWR1KQorCisJKiBpMzg2L2dhcy5oIChBU01fRklMRV9TVEFSVCk6IFdyaXRlIG91dCB0d28gYmFja3NsYXNoZXMgZm9yIGVhY2gKKwliYWNrc2xhc2ggaW4gdGhlIGZpbGVuYW1lLgorCitXZWQgQXVnICA0IDE4OjAwOjQzIDE5OTMgIEhvbGdlciBUZXV0c2NoICAoaG9sZ2VyQGhvdGJzby5yaGVpbi1tYWluLmRlKQorCisJKiBjbGlwcGVyLm1kIChtb3ZkZisyKTogQWxsb3cgYGYnIHJlZ2lzdGVyIGFzIHNvdXJjZSBvcGVyYW5kIGluCisJZmlyc3QgYWx0ZXJuYXRpdmUuCisKK1dlZCBBdWcgIDQgMDc6MzU6MDMgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogQWx3YXlzIGRvIGVsaW1pbmF0aW9uIGluCisJUkVHX05PVEVTIGlmIHdlIGNoYW5nZWQgYW55dGhpbmcgaW4gdGhlIGluc24uCisKKwkqIGdlbmF0dHJ0YWIuYzogSW5jbHVkZSBndmFyYXJncy5oIGFmdGVyIGhjb25maWcuaCwgbGlrZSBlbHNld2hlcmUuCisKK1dlZCBBdWcgIDQgMDE6MzI6MjcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChvdXRwdXRfaW5pdF9lbGVtZW50KTogQ2FsbCBkaWdlc3RfaW5pdCBiZWZvcmUKKwljYWxsaW5nIG91dHB1dF9jb25zdGFudC4gIEFsd2F5cyBwYXNzIDAsIDAgZm9yIGxhc3QgMiBhcmdzCisJdG8gZGlnZXN0X2luaXQuCisKKwkqIGV4cHIuYyAoZG9fdGFibGVqdW1wKSBbUElDX0NBU0VfVkVDVE9SX0FERFJFU1NdOiBJZiBwaWMsCisJY29weSBJTkRFWCB0byBhIHJlZ2lzdGVyIGVhcmx5LCB0byBhdm9pZCBpbnZhbGlkIGFkZHJlc3MgbGF0ZXIuCisKK1R1ZSBBdWcgIDMgMjM6NTY6NDkgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogRG9uJ3QgY2hlY2sgd2hldGhlciBmaWxlIGAtJyBleGlzdHMuCisKK1R1ZSBBdWcgIDMgMTg6NTI6MTMgMTk5MyAgSm9obiBIYXNzZXkgIChoYXNzZXlAZGctcnRwLmRnLmNvbSkKKworCSogY29uZmlndXJlIChtODhrLWRnLWRndXgqKTogVXNlIGZpeGluYy5kZ3V4LgorCSogeC1kZ3V4IChJTlNUQUxMX0hFQURFUlMpOiBEZWZpbml0aW9uIGRlbGV0ZWQuCisJKiBmaXhpbmMuZGd1eDogTmV3IGZpbGUuCisKK1R1ZSBBdWcgIDMgMTc6MzQ6NTMgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IERvbid0IHBhc3MgQVJHLT5TVEFDSyBhcyBUQVJHRVQgaWYgaXQKKwlpcyBhIGRpZmZlcmVudCBtb2RlIHRoYW4gdGhlIGV4cHJlc3Npb24gKGkuZS4sIGEgcHJvbW90ZWQgbW9kZSkuCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSk6IE5vdyBwYXNzIGFjdHVhbCBBTkQgbWFzayBpbnN0ZWFkCisJb2YgbnVtYmVyIG9mIGJpdHM7IGdlbmVyYWxpemUgYXBwcm9wcmlhdGVseS4KKwlNb3ZlIG1vc3QgY2FzZXMgZnJvbSBzaW1wbGlmeV9hbmRfY29uc3RfaW50IGluLgorCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogUmVtb3ZlIG1vc3QgY29kZSBmcm9tIGhlcmU7IGNhbGwKKwlmb3JjZV90b19tb2RlIGluc3RlYWQuCisJKHN1YnN0LCBtYWtlX2V4dHJhY3Rpb24sIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogQ2hhbmdlIGNhbGxzCisJdG8gZm9yY2VfdG9fbW9kZS4KKwkobWFrZV9maWVsZF9hc3NpZ25tZW50KTogTGlrZXdpc2UuCisJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBBZGQgY2FsbCB0byBmb3JjZV90b19tb2RlIHdoZW4KKwlkb2luZyBhIHNpZ24gYml0IGNvbXBhcmlzb24uCisJKiBvcHRhYnMuYyAoY29kZV90b19vcHRhYik6IE5ldyB2YXJpYWJsZS4KKwkoaW5pdF9vcHRhYik6IEluaXRpYWxpemUgaXQuCisJKiBleHByLmg6IERlY2xhcmUgY29kZV90b19vcHRhYi4KKworVHVlIEF1ZyAgMyAxNTo0MDoxNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdzdGRkZWYuaDogVGVzdCBhbmQgZGVmaW5lIF9fSU5UX1dDSEFSX1RfSC4KKworTW9uIEF1ZyAgMiAyMjo0MjoxMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni1zZXF1ZW50LXN5c3YqKTogTmV3IGFsdGVybmF0aXZlLgorCSogY29uZmlnL2kzODYvc2VxLXN5c3YzLmg6IE5ldyBmaWxlLgorCisJKiBjb21iaW5lLmMgKHN0cnVjdCB1bmRvKTogUmVuYW1lIGBydHgnIGZpZWxkcyB0byBgcicuCisJKHVuZG9fYWxsLCBTVUJTVCwgZ2VuX3J0eF9jb21iaW5lKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCitNb24gQXVnICAyIDE4OjUzOjIzIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc3Vic3QpOiBNb3ZlIHNpbXBsZSBvcGVyYXRpb25zIGluc2lkZSBJRl9USEVOX0VMU0UgCisJaWYgdGhlIElGX1RIRU5fRUxTRSBpcyBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYXMgd2VsbCBhcyB0aGUgZmlyc3QuCisJKHN1YnN0LCBjYXNlIE5FRyk6IFVzZSBwbHVzX2NvbnN0YW50IHRvIG1ha2UgYSBQTFVTLgorCShzdWJzdCwgY2FzZSBNSU5VUyk6IFNpbXBsaWZ5IChtaW51cyAxIChjb21wYXJpc29uIGZvbyBiYXIpKS4KKwkoc3Vic3QsIGNhc2UgRVEpOiBBZGQgYSBudW1iZXIgb2YgbWlzc2luZyBjYXNlcyB3aGVyZSAKKwljb21wYXJpc29ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhcml0aG1ldGljIG9yIGxvZ2ljYWwgb3BzLgorCShzdWJzdCwgY2FzZSBJRl9USEVOX0VMU0UpOiBIYW5kbGUgKGlmX3RoZW5fZWxzZSBDT05EIChPUCBaIEMxKSBaKQorCWluIGEgbW9yZSBnZW5lcmFsIG1hbm5lci4KKwkoc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6IE1ha2UgQU5EIHdpdGggZ2VuX2JpbmFyeSBpbiBjYXNlIHdlCisJY2FuIHNpbXBsaWZ5IGl0LgorCitNb24gQXVnICAyIDE0OjQ1OjQzIDE5OTMgIEZyZWRlcmljIFBpZXJyZXN0ZWd1eSAgKEYuUGllcnJlc3RlZ3V5QGZyY2wuYnVsbC5mcikKKworCSogZ2VuYXR0cnRhYi5jIChzdWJzdGl0dXRlX2FkZHJlc3MpOiBJbiBwcm90b3R5cGUsIGRvbid0IHNwZWNpZnkKKwl0aGUgYXJnIHR5cGVzIG9mIHRoZSBhcmcgZnVuY3Rpb25zLgorCisJKiBjb25maWcvbTY4ay94LWRweDIgKENMSUIpOiBGaXggdHlwby4KKworTW9uIEF1ZyAgMiAwNjozNjo1MyAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiAgRG9uJ3QgYXR0ZW1wdCB0byBhbGxvY2F0ZSBhCisJU0NSQVRDSCBpZiBpdCB3aWxsIG5vdCBmaXQgaW4gc2NyYXRjaF9saXN0LgorCitNb24gQXVnICAyIDAwOjAyOjU0IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBDaGVjayBwcm9wZXJseSBmb3Igdm9sYXRpbGUgZnVuY3Rpb24uCisKK1N1biBBdWcgIDEgMDQ6MTg6MjMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBTdXBwb3J0IGF0dHJpYnV0ZXMgYHZvbGF0aWxlJworCXdpdGggYWxpYXMgYG5vcmV0dXJuJywgYW5kIGBjb25zdCcuCisJKiBjLXBhcnNlLmluIChhdHRyaWIpOiBBY2NlcHQgdGhvc2UgYXR0cmlidXRlcy4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogV2FybiBhYm91dCBvcmRlcmVkIGNvbXBhcmlzb24KKwliZXR3ZWVuIHBvaW50ZXJzIHRvIGNvbXBsZXRlIGFuZCBpbmNvbXBsZXRlIHR5cGVzLgorCisJKiBjLXBhcnNlLmluIChzdG10KTogSW4gYW4gZXhwciBzdG10LCBjYWxsIGRlZmF1bHRfY29udmVyc2lvbgorCWZvciBhcnJheXMgYW5kIGZvciBmdW5jdGlvbnMuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogTm8gcGVkd2FybiBmb3IgZmllbGQgd2l0aCBlbnVtIHR5cGUKKwlpZiBzaXplIG1hdGNoZXMgaW50LgorCShncm9rZGVjbGFyYXRvcik6IE5vIGVycm9yIGZvciB2b2lkIHR5cGUgZm9yIGV4dGVybiBvciBnbG9iYWwgdmFyLgorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IE5vIGVycm9yIGZvciBhIFNUUklOR19DU1QgdGhhdCBhbHJlYWR5CisJd2VudCB0aHJvdWdoIGRpZ2VzdF9pbml0LgorCShwYXJzZXJfYnVpbGRfYmluYXJ5X29wKTogR2VuZXJhdGUgYSBOT05fTFZBTFVFX0VYUFIsIG5vdCBOT1BfRVhQUiwKKwlhcm91bmQgYSBjb25zdGFudCB2YWx1ZS4KKworCSogY29uZmlnL202OGsvYW1peC5oIChBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKQorCShBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiBEZWZpbml0aW9ucyBkZWxldGVkLgorCisJKiBleHByLmMgKGRvX3RhYmxlanVtcCk6IFVzZSBQSUNfQ0FTRV9WRUNUT1JfQUREUkVTUyBpZiBkZWZpbmVkLgorCSogY29uZmlnL202OGsvbTY4ay5oIChQSUNfQ0FTRV9WRUNUT1JfQUREUkVTUyk6IERlZmluZWQuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IElmIHBpYywgYWNjZXB0IExBQkVMK0lOREVYLgorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBXYXJuIGhlcmUgZm9yIHZvbGF0aWxlIGZuIHJldHVybmluZworCW5vbi12b2lkIHR5cGUuCisJKHN0YXJ0X2Z1bmN0aW9uKTogTm90IGhlcmUuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IHBhc3Mgb24gY29uc3QgYW5kIHZvbGF0aWxlCisJZnJvbiBmdW5jdGlvbiB2YWx1ZSB0eXBlIHRvIGZ1bmN0aW9uIHR5cGUuCisKK1NhdCBKdWwgMzEgMDE6NDg6MDggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IEZpbmlzaCBnZXR0aW5nIHJpZCBvZiB0YWlsLgorCUFsc28gZ2V0IHJpZCBvZiBvbGRfdGFpbF9jb250ZW50cy4gIERvbid0IHNldCBmcmVlX3RyZWVfbGlzdC4KKwkoZnJlZV90cmVlX2xpc3QpOiBWYXIgZGVsZXRlZC4KKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBUcmVhdCBzdHJpbmcgY29uc3RhbnRzIHNwZWNpYWxseQorCW9ubHkgZm9yIGFycmF5cyBvZiBpbnRlZ2Vycy4KKworRnJpIEp1bCAzMCAwNjo0OTo1OCAxOTkzICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAc2ljcy5zZSkKKworCSogZXhwbWVkLmMgKG11bHRfaXNfdmVyeV9jaGVhcCk6IERlbGV0ZS4KKwkobXVsdF9jb3N0KTogRGVsZXRlLgorCShpbml0X2V4cG1lZCk6IERlbGV0ZSBjb21wdXRhdGlvbiBvZiBtdWx0X2Nvc3QgYW5kIG11bHRfaXNfdmVyeV9jaGVhcC4KKwkoZXhwYW5kX211bHQpOiBDb21wdXRlIG11bHRfY29zdCBoZXJlIGZvciBldmVyeSBjb25zdGFudCBtdWx0aXBsaWVyLgorCShzeW50aF9tdWx0KTogUmV0dXJuIGZvdW5kIGFsZ29yaXRobXMgdGhyb3VnaCBhIHN0cnVjdCBwb2ludGVyLgorCQorRnJpIEp1bCAzMCAwNjo0NTozNSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgTk9QX0VYUFIpOiBEZWxldGUgYSBwYWlyIG9mIGNvbnZlcnNpb25zCisJYmFjayB0byB0aGUgb3JpZ2luYWwgdHlwZSB3aGVuIGludGVybWVkaWF0ZSB0eXBlIGlzIGF0IGxlYXN0IGFzIHdpZGUuCisKKwkqIGNvbWJpbmUuYzogUmVtb3ZlIGNoYW5nZSBvZiBKdWx5IDIxLgorCSh0aGlzX2Jhc2ljX2Jsb2NrKTogTmV3IHZhcmlhYmxlLgorCShjb21iaW5lX2luc3RydWN0aW9ucyk6IFNldCBpdC4KKwkodHJ5X2NvbWJpbmUsIGRpc3RyaWJ1dGVfbGlua3MpOiBVc2UgaXQgYW5kIGJhc2ljX2Jsb2NrX2hlYWQKKwl0byBzZWUgaWYgd2UndmUgZ29uZSB0byBhIG5ldyBiYXNpYyBibG9jayBpbnN0ZWFkIG9mIHRyeWluZworCXRvIHJlcHJvZHVjZSBjYWxjdWxhdGlvbiBkb25lIGluIGZsb3cuCisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IERvbid0IHVzZSBqdW1wcyBmb3IgInJldHVybiB4ID09IHkiIGlmCisJdGhleSBhcmUgZXhwZW5zaXZlLgorCitGcmkgSnVsIDMwIDAyOjAzOjEyIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL2kzODYvaTM4Ni5tZCAoZmZzc2kyIGFuZCBmZnNoaTIgcmVjb2duaXplcnMpOgorCUdlbmVyYXRlIHVuaXF1ZSBsYWJlbHMgYnkgaGFuZC4KKworVGh1IEp1bCAyOSAwMTo0NzoyMSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHB1c2hfaW5pdF9sZXZlbCk6IEZvciBicmFjZXMgYXJvdW5kIHNjYWxhciwganVzdCB3YXJuLgorCShwcm9jZXNzX2luaXRfZWxlbWVudCk6IFNwZWNpYWwgaGFuZGxpbmcgZm9yIHsiZm9vIn0uCisJKHN0cnVjdCBjb25zdHJ1Y3Rvcl9zdGFjayk6IE5ldyBmaWVsZCBgcmVwbGFjZW1lbnRfdmFsdWUnLgorCShwdXNoX2luaXRfbGV2ZWwsIHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0KTogQ2xlYXIgbmV3IGZpZWxkLgorCShwb3BfaW5pdF9sZXZlbCk6IFJldHVybiB0aGUgcmVwbGFjZW1lbnRfdmFsdWUgaWYgYW55LgorCUF0IHRvcCBsZXZlbCBpbiBpbml0aWFsaXplciwgb3V0cHV0IHRoYXQgdmFsdWUsCisJYW5kIHNldCB0aGUgYXJyYXkgc2l6ZSBmcm9tIGl0LgorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IERlbGV0ZSBhcmcgVEFJTC4gRml4IGFsbCBjYWxscy4KKworCSogb2JqYy1hY3QuYyAoYnVpbGRfc2hhcmVkX3N0cnVjdHVyZV9pbml0aWFsaXplcik6CisJQ2FsbCBkZWZhdWx0X2NvbnZlcnNpb24gZm9yIE5BTUUuCisJKGFkZF9vYmpjX3N0cmluZyk6IE1ha2UgYW4gQUREUl9FWFBSIHRvIHJldHVybi4KKwkoaW5pdF9vYmpjX3N5bXRhYik6IE1ha2UgQUREUl9FWFBSIGZvciBVT0JKQ19TRUxFQ1RPUl9UQUJMRV9kZWNsLgorCisJKiBvYmpjLWFjdC5jOiBCdWlsZCBhbGwgQ09OU1RSVUNUT1JzIHdpdGggdHlwZXMuCisJKGJ1aWxkX2NvbnN0cnVjdG9yKTogTmV3IGZ1bmN0aW9uLiAgQWxsIENPTlNUUlVDVE9SIGJ1aWxkcyBjaGFuZ2VkLgorCShpbml0X2RlZl9saXN0LCBpbml0X29iamNfc3ltdGFiKTogTmV3IGFyZyBUWVBFLgorCShpbml0X21vZHVsZV9kZXNjcmlwdG9yKTogTGlrZXdpc2UuCisJKGluaXRfb2JqY19zeW10YWIpOiBQYXNzIFRZUEUgYXJnIHRvIGluaXRfZGVmX2xpc3QuCisJKGdlbmVyYXRlX29iamNfc3ltdGFiX2RlY2wpOiBQYXNzIFRZUEUgYXJnIHRvIGluaXRfb2JqY19zeW10YWIuCisJKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yKTogUGFzcyBUWVBFIGFyZyB0byBpbml0X21vZHVsZV9kZXNjcmlwdG9yLgorCShidWlsZF9kZXNjcmlwdG9yX3RhYmxlX2luaXRpYWxpemVyKTogTmV3IGFyZyBUWVBFLgorCShnZW5lcmF0ZV9tZXRob2RfZGVzY3JpcHRvcnMpOiBQYXNzIFRZUEUgYXJnIHRvCisJYnVpbGRfZGVzY3JpcHRvcl90YWJsZV9pbml0aWFsaXplci4KKwkoZ2VuZXJhdGVfcHJvdG9jb2xzKTogUGFzcyBUWVBFIGFyZyB0byBidWlsZF9wcm90b2NvbF9pbml0aWFsaXplci4KKwkodWlsZF9wcm90b2NvbF9pbml0aWFsaXplcik6IE5ldyBhcmcgVFlQRS4KKwkoYnVpbGRfaXZhcl9saXN0X2luaXRpYWxpemVyKTogTmV3IGFyZyBUWVBFLgorCShnZW5lcmF0ZV9pdmFyX2xpc3RzKTogUGFzcyBUWVBFIGFyZyB0byBidWlsZF9pdmFyX2xpc3RfaW5pdGlhbGl6ZXIuCisJKGJ1aWxkX2Rpc3BhdGNoX3RhYmxlX2luaXRpYWxpemVyKTogTmV3IGFyZyBUWVBFLgorCShnZW5lcmF0ZV9kaXNwYXRjaF90YWJsZXMpOiBQYXNzIFRZUEUgYXJnIHRvCisJYnVpbGRfZGlzcGF0Y2hfdGFibGVfaW5pdGlhbGl6ZXIuCisJKGJ1aWxkX2NhdGVnb3J5X2luaXRpYWxpemVyKTogTmV3IGFyZyBUWVBFLgorCShidWlsZF9zaGFyZWRfc3RydWN0dXJlX2luaXRpYWxpemVyKTogTmV3IGFyZyBUWVBFLgorCShnZW5lcmF0ZV9jYXRlZ29yeSk6IFBhc3MgVFlQRSBhcmcgdG8gYnVpbGRfY2F0ZWdvcnlfaW5pdGlhbGl6ZXIuCisJKGdlbmVyYXRlX3NoYXJlZF9zdHJ1Y3R1cmVzKTogUGFzcyBUWVBFIGFyZyB0bworCWJ1aWxkX3NoYXJlZF9zdHJ1Y3R1cmVfaW5pdGlhbGl6ZXIuCisKKwkqIGNvbmZpZy9pMzg2L3gtbmNyMzAwMCAoQ0MsIE9MRENDKTogRGVsZXRlZC4KKwkqIGNvbmZpZy9pMzg2L3htLXN5c3Y0LmggW19fSElHSENfX106IEluY2x1ZGUgYWxsb2NhLmguCisKKwkqIGNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogRG9uJ3QgcGFzcyB0cnVuY2F0ZSBpbnRvIEFCU19FWFBSLgorCisJKiBjb25maWd1cmU6IElnbm9yZSAtZW5hYmxlLi4uIGFuZCAtLWVuYWJsZS4uLiBvcHRpb25zLgorCitXZWQgSnVsIDI4IDIwOjE1OjA1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogTWFrZWZpbGUuaW4gKGNvbXBhcmUpOiBBZGQgLi8gaW4gdGFpbCBjb21tYW5kLgorCitXZWQgSnVsIDI4IDE1OjM2OjExIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgY2FzZSBMQUJFTF9SRUYpOiBJZgorCXdlIHR1cm4gb2ZmIExBQkVMX1JFRl9OT05MT0NBTF9QLCBpbmNyZW1lbnQgZnVuY3Rpb25fY2FsbF9jb3VudC4KKworCSogaW50ZWdyYXRlLmMgKGNvcHlfZm9yX2lubGluZSwgY2FzZSBMQUJFTF9SRUYpOiBQcm9wZXJseSBjb3B5CisJTEFCRUxfUkVGIHdpdGggTEFCRUxfUkVGX05PTkxPQ0FMX1Agc2V0LgorCUNvcHkgTEFCRUxfT1VUU0lERV9MT09QX1AgZmxhZy4KKwkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUsIGNhc2UgTEFCRUxfUkVGKTogTGlrZXdpc2UuCisJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCBjYXNlIENPTlNUKTogTWFrZSByZWN1cnNpdmUgY2FsbCBmb3IKKwlhIExBQkVMX1JFRiBpbiB0aGUgY29uc3RhbnQgcG9vbC4KKworCSogYy1pdGVyYXRlLmMgKGl0ZXJhdG9yX2xvb3Bfe3BybyxlcGl9bG9ndWUpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMKKwlvbiB0aGUgTU9ESUZZX0VYUFJzIHdlIG1ha2UuCisJUGFzcyBjb25zdDBfcnR4IGFzIFRBUkdFVCB0byBleHBhbmRfZXhwci4KKwkqIGNwLWN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMgb24gTU9ESUZZX0VYUFIuCisJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBMaWtld2lzZS4KKworV2VkIEp1bCAyOCAxMjoxNzozOSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9vc2Zyb3NlLmggKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogVXNlIHRoaXMgaW5zdGVhZCBvZgorCU9WRVJSSURFX09QVElPTlMuCisKK1dlZCBKdWwgMjggMTM6NDU6MTMgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFERFJfRVhQUik6IFRyZWF0IENPTkNBVCBsaWtlIFJFRy4KKworCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogV2FybiBpZiB2b2xhdGlsZSBmbiByZXR1cm5zIG5vbi12b2lkLgorCitXZWQgSnVsIDI4IDEzOjIyOjE1IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogYy1wYXJzZS5pbiAoc2ltcGxlX2lmLCBpZl9wcmVmaXgsIHN0bXQpOiBVbmRvIEp1bCA3IGNoYW5nZS4KKwkoaWZfcHJlZml4KTogU3RvcmUgc3RtdF9jb3VudCBpbiAkJCBub3QgJDEuCisJKHN0bXQpOiBBZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSBlbXB0eS1pZiB3YXJuaW5nIGlzIGhlcmUuCisKKwkqIHNwYXJjLmMgKHNoaWZ0X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKiBzcGFyYy5tZCAoYXNobHNpMywgYXNocnNpMywgbHNocnNpMyk6IFVzZSBzaGlmdF9vcGVyYW5kLgorCisJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvbid0IGlnbm9yZSBhIGdpdiB0aGF0IGRlcGVuZHMgb24gYQorCXJldmVyc2VkIGJpdi4KKworCSogbWlwcy94LXN5c3YgKEFMTE9DQSk6IERlZmluZS4KKwkqIG1pcHMtNS5oIChTVEFSVEZJTEVfU1BFQyk6IERlZmluZS4KKwkqIHgtaXJpczM6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChtaXBzLXNnaS0qKTogVXNlIHgtaXJpczMgaW5zdGVhZCBvZiB4LWlyaXMuCisJKiBNYWtlZmlsZS5pbiAobGliZ2NjLmEpOiBEbyBgY2htb2QgK3cgKicgYmV0d2VlbiB0d28gYXIgY29tbWFuZHMuCisKKwkqIGk5NjAuaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IE5lZ2F0ZSwgYW5kIHN1YnRyYWN0IDY0CisJYnl0ZXMuCisKKwkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogRG8gbm90IGVtaXQgbGluZSBudW1iZXIgbm90ZXMgYmVmb3JlCisJb3RoZXIgbm90ZXMuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IGZsYWdfbm9fY29tbW9uIGFwcGxpZXMgb25seSBpZgorCWV4dGVybmFsIGxpbmthZ2UuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogRm9yIHVuYWxpZ25lZCBhcmd1bWVudHMgb24KKwlCWVRFU19CSUdfRU5ESUFOIG1hY2hpbmVzLCBjb3JyZWN0IGJpdGZpZWxkIG9mZnNldCBjYWxjdWxhdGlvbnMuCisJKiBleHByLmMgKG1vdmVfYmxvY2tfZnJvbV9yZWcpOiBOZXcgYXJndW1lbnQgU0laRS4gIElmIFNJWkUgbGVzcworCXRoYW4gd29yZCBhbmQgQllURVNfQklHX0VORElBTiwgc2hpZnQgYmxvY2sgbGVmdCB0byBhbGlnbiBpdAorCWJlZm9yZSBzdG9yaW5nIGl0IHRvIG1lbW9yeS4KKwkqIGV4cHIuaCAobW92ZV9ibG9ja19mcm9tX3JlZyk6IEFkZCBuZXcgYXJndW1lbnQgdG8gcHJvdG90eXBlLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogUGFzcyBleHRyYSBhcmd1bWVudCBTSVpFIHRvCisJbW92ZV9ibG9ja19mcm9tX3JlZyBjYWxscy4KKwkobG9jYXRlX2FuZF9wYWRfcGFybSk6IEZvciAhQVJHU19HUk9XX0RPV05XQVJEIGNhc2UsIG1vdmUgZG93bndhcmQKKwlwYWRkaW5nIHBhZF9iZWxvdyBjYWxsIGFmdGVyIHJvdW5kX3VwIGNhbGwuCisJKiBtaXBzLmMgKGZ1bmN0aW9uX2FyZyk6IFNoaWZ0IGFsbCBzdHJ1Y3R1cmVzIGxlc3MgdGhhbiA0IGJ5dGVzLAorCW5vdCBqdXN0IHRob3NlIHdoaWNoIGFyZSBRSW1vZGUgb3IgSEltb2RlLgorCSogYTI5ay5oLCBhbHBoYS5oLCBpOTYwLmMsIG04OGsuYywgcGEuYywgcm9tcC5oLCByczYwMDAuaDoKKwlBZGQgbmV3IHBhcmFtZXRlciB0byBtb3ZlX2Jsb2NrX2Zyb21fcmVnIGNhbGxzLgorCitXZWQgSnVsIDI4IDEyOjQwOjA2IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIGV4cG1lZC5jIChzdG9yZV9zcGxpdF9iaXRmaWVsZCk6IEZpeCBoYW5kbGluZyBvZiBiaXRmaWVsZHMgdGhhdAorCWNyb3NzIHdvcmQgYm91bmRhcmllcywgY2FuIG9ubHkgaGFuZGxlIGEgd29yZCBhdCBhIHRpbWUuCisJKGV4dHJhY3Rfc3BsaXRfYml0ZmllbGQpOiBMaWtld2lzZS4KKworV2VkIEp1bCAyOCAwNjo0NDo1MCAxOTkzICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiBjb25maWd1cmU6IFVzZSBtODhrL3gtc3lzdjMgZm9yIG04OGstKi1zeXN2My4KKwkqIG04OGsveC1zeXN2MzogTmV3IGZpbGUsIHVzZSBnbnUgYWxsb2NhLgorCitUdWUgSnVsIDI3IDEzOjUzOjA2IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckB3b21iYXQuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeHByb3RvOiAgUGFzcyAnLScgdG8gdHIgYXMgdGhlIDEtY2hhcmFjdGVyIHJhbmdlICctLS0nLgorCSogY3Jvc3MtbWFrZTogIERlZmluZSBTVE1QX0ZJWFBST1RPIHRvIGVtcHR5IGZvciBjcm9zcy4KKwkqIHBhdGNoLWhlYWRlci5jIChyZWFkX3NjYW5fZmlsZSk6ICBNaW5vciByZS13cml0ZSB0byBhdm9pZAorCW9ic3RhY2tfY29weTAsIHNpbmNlIHRoYXQgdXNlcyB0aGUgbm9uLXBvcnRhYmxlIGJjb3B5KCkuCisJKiBNYWtlZmlsZS5pbiAocGF0Y2gtaGVhZGVyKTogIFVzZSAkKEhPU1RfT0JTVEFDSykuCisJKiBnZW4tcHJvdG9zLmMgKG1haW4pOiAgRGlzYWJsZSBvYm5veGlvdXMgd2FybmluZyBtZXNzYWdlLgorCitUdWUgSnVsIDI3IDE2OjQyOjQ0IDE5OTMgIEpvaG4gRiBDYXJyICAoamZjQEF0aGVuYS5taXQuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlKTogUHJlc2VydmUgdm9sYXRpbGl0eQorCW9mIGJpdGZpZWxkLgorCitUdWUgSnVsIDI3IDAxOjMzOjI1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IE1pc21hdGNoIGluIHNpZ25lZG5lc3MKKwlvZiBwb2ludGVyIHRhcmdldHMgc2hvdWxkIG5vdCBpbmhpYml0IHdhcm5pbmdzIGZvciBjb25zdCBtaXNtYXRjaC4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRG9uJ3QgY29weSB0b28gbXVjaCB3aGVuIGV4dGVuZGluZworCXBhcm1fcmVnX3N0YWNrX2xvYy4KKworCSogY29uZmlnL204OGsvbTg4ay5oIChBU01fREVDTEFSRV9PQkpFQ1RfTkFNRSk6IERvbid0IG1ha2UgYSAuc2l6ZQorCWlmIHRoZSBzaXplIGlzIG5vdCBrbm93bi4gIFVzZSBERUNMLCBub3QgZGVjbC4KKwkqIGNvbmZpZy9zdnI0LmgsIGNvbmZpZy9pMzg2L29zZnJvc2UuaDogTGlrZXdpc2UuCisKKwkqIGMtdHlwZWNrLmMgKHNldF9pbml0X2luZGV4KTogQWRkIHBlZGFudGljIHdhcm5pbmcuCisJKHNldF9pbml0X2xhYmVsKTogTGlrZXdpc2UuCisKK1R1ZSBKdWwgMjcgMTQ6MjI6NDggMTk5MyAgRnJlZGVyaWMgUGllcnJlc3RlZ3V5ICAoRi5QaWVycmVzdGVndXlAZnJjbC5idWxsLmZyKQorCisJKiBnc3RkZGVmLmggKF9XQ0hBUl9UX0gpOiBUZXN0IHRoaXMgYW5kIGRlZmluZSB0aGlzLiAKKworCSogY29uZmlndXJlIChtNjhrLWJ1bGwtc3lzdik6IFRlc3QgZm9yIC0tc3RhYnM7CisJZ2VuZXJhdGUgZWl0aGVyIG5hdGl2ZSBjb2ZmIG9yIGRieC1pbi1jb2ZmIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworCSogY29uZmlnL202OGsvZHB4Mi5oIChDUFBfUFJFREVGSU5FUyk6IGFkZGVkIC1EX1BPU0lYX1NPVVJDRSAKKyAJLURfWE9QRU5fU09VUkNFIC1EX0JVTExfU09VUkNFIHRvIHRoZSBsaXN0LgorIAkoQ1BQX1NQRUMpOiByZW1vdmVkIGFuc2kgZGVmaW5pdGlvbi4KKyAJKiBjb25maWcvbTY4ay9kcHgyZy5oIChEQlhfREVCVUdHSU5HX0lORk8pOiBSZW1vdmUgdGhpcyB0byBsZXQgZ2NjIAorCWRlYWxzIHdpdGggZ2FzIGFuZCBjb2ZmLgorCSogY29uZmlnL202OGsvZHB4MmNkYnguaDogTmV3IGZpbGUgZm9yIGdhcyBhbmQgZGJ4LWluLWNvZmYuCisgCSogY29uZmlnL3gtZHB4MiAoQ0xJQik6IHJlbW92ZWQgLWxjX3MgYW5kIGFkZGVkIC1sbWFsbG9jLgorIAkoWF9DRkxBR1MpOiByZW1vdmVkIC1EX1NZU1YgYW5kIGFkZGVkIC1EX1BPU0lYX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0UgCisgCS1EX0JVTExfU09VUkNFIHRvIGRlYWwgd2l0aCB0aGUgcG9zaXggc3R1ZmYuCisKK01vbiBKdWwgMjYgMTc6NDI6MjIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChkaWdlc3RfaW5pdCk6IEFkZCBgc3RhdGljJyB0byBkZWZpbml0aW9uLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogSW5oaWJpdCBoYWNrcyBiYXNlZCBvbgorCW51bV9zaWduX2JpdF9jb3BpZXMgaWYgc2hpZnRfbW9kZSBkaWZmZXJzIGZyb20gdGhlIG1vZGUgb2YgdmFyb3AuCisKKwkqIHRvcGxldi5jIChtYWluKTogV2hlbiAtVyBzZXRzIHdhcm5fdW5pbml0aWFsaXplZCwgYXZvaWQgbGF0ZXIgd2FybmluZworCWlmIHdhcm5fdW5pbml0aWFsaXplZCBpcyBub3Qgc3VwcG9ydGVkLgorCitNb24gSnVsIDI2IDE0OjE0OjAyIEJTVCAxOTkzCVJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogY29sbGVjdDIuYyAoTkFNRV9fTUFJTiwgU1lNQk9MX19NQUlOKTogQWRkIGRlZmF1bHQgZGVmaW5pdGlvbnMuCisJKHdyaXRlX2NfZmlsZSwgc2Nhbl9wcm9nX2ZpbGUgW09CSkVDVF9GT1JNQVRfUk9TRV0pOgorCVVzZSBtYWNyb3MgaW5zdGVhZCBvZiBleHBsaWNpdGx5IF9fbWFpbi4KKworCSogZnVuY3Rpb24uYyAoZXhwYW5kX21haW5fZnVuY3Rpb24pOiBMaWtld2lzZS4KKworCSogbGliZ2NjMi5jIChfX21haW4pOiBVc2UgbWFjcm8gU1lNQk9MX19NQUlOIGluc3RlYWQgb2YgaW52b2tpbmcKKwlkaXJlY3RseS4KKworTW9uIEp1bCAyNiAxNjowMzozMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgRVFfRVhQUik6IFJlbW92ZSBjb2RlIHRoYXQgY29udmVydHMKKwltb2QgdG8gdW5zaWduZWQgbW9kOyBpdCBpc24ndCBjb3JyZWN0IGZvciBuZWdhdGl2ZSBvcGVyYW5kcy4KKworCSogdG9wbGV2LmMgKHN0cmlwX29mZl9lbmRpbmcpOiBBbGxvdyAuYWQqIGZvciBBZGEuCisKK01vbiBKdWwgMjYgMTQ6MDY6MDQgMTk5MyAgQmlsbCBDb3ggIChiaWxsQG1hamlwb29yLmN5Z251cy5jb20pCisKKwkqIGMtZGVjbC5jIChwcmludF9sYW5nX2RlY2wsIHByaW50X2xhbmdfdHlwZSk6IENvcnJlY3QgZnVuY3Rpb24KKwkgIGhlYWRlcnMgdG8gbWF0Y2ggcHJvdG90eXBlLCBhbmQgY2FsbHMuCisKK1N1biBKdWwgMjUgMTc6MDE6MzQgMTk5MyAgUGVyIEJvdGhuZXIgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworICAgICAgICAqIGZpeHByb3RvOiAgTmV3IHNjcmlwdCB0byBhZGQgcHJvdG90eXBlcyBhbmQgb3RoZXJ3aXNlIGNsZWFuIHVwCisgICAgICAgIHN5c3RlbSBpbmNsdWRlIGZpbGVzIChlc3BlY2lhbGx5IGZvciBDKysgYW5kIGFsc28gZ2NjIC1XaW1wbGljaXQpLgorICAgICAgICAqIHNjYW4tZGVjbC5jOiAgTmV3IHByb2dyYW0gdXNlZCBieSBmaXhwcm90byB0byBhbmFseXplIGhlYWRlcgorICAgICAgICBmaWxlcyAoaXQgZXh0cmFjdHMgZGVjbGFyYXRpb25zIGZyb20gY3BwIG91dHB1dCkuCisgICAgICAgICogcGF0Y2gtaGVhZGVyLmM6ICBOZXcgcHJvZ3JhbSB1c2VkIGJ5IGZpeHByb3RvIHRvIGFuYWx5emUgYW5kCisgICAgICAgIHBhdGNoIGhlYWRlciBmaWxlcy4KKyAgICAgICAgKiBzY2FuLmM6ICBOZXcgZmlsZS4gIFJvdXRpbmVzIHVzZWQgYnkgc2Nhbi1kZWNscyBhbmQKKwlwYXRjaC1oZWFkZXIuCisgICAgICAgICogc2Nhbi5oOiAgTmV3IGZpbGUuICBDb21tb24gZGVjbGFyYXRpb25zLgorICAgICAgICAqIGdlbi1wcm90b3MuYzogIE5ldyBmaWxlLiAgTWFzc2FnZXMgYSBsaXN0IG9mIHByb3RvdHlwZXMuCisJKiBNYWtlZmlsZS5pbjogIEFkZCBmaXhwcm90byBzdXBwb3J0LgorCSogcG9wdWxhdGU6ICBEZWxldGVkLiAgU3VwZXJzZWRlZCBieSBmaXhwcm90by4KKworU3VuIEp1bCAyNSAwMzo1NjoxOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKHN0YXJ0X2luaXQpOiBGaWxsIGluIHAtPm5leHQuCisKKwkqIGNvbmZpZy9pMzg2L2kzODYubWQgKG1vdnN0cmljdHFpKTogQ2hhbmdlIHE8LWcgYWx0ZXJuYXRpdmUgdG8gcTwtbS4KKworU2F0IEp1bCAyNCAxODoxNzo1NSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc25fMSk6IEZvciBjb21wbGV4IHN0YWNrIHB1c2gsCisJZG9uJ3QgdXNlIGNoYW5nZV9hZGRyZXNzLgorCitTYXQgSnVsIDI0IDE1OjA1OjUwIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlcyAodW5pc3RkLmgpOiAgR2VuZXJhbGl6ZSBBSVggZml4IChmb3IgdXNpbmcKKwlDKysga2V5d29yZCBuZXcpIHRvIHVuaXN0ZC5oIGFzIHdlbGwgYXMgc3RkaW8uaC4KKwkqIGZpeGluY2x1ZGVzIChzeXMvd2FpdC5oKTogIEZpeCBOZVhUIHByb2JsZW0gd2l0aAorCWEgJ3dhaXQodW5pb24gd2FpdCopJyBwcm90b3R5cGUgdGhhdCBicmVha3MgUG9zaXguMS4KKwkqIGZpeGluY2x1ZGVzIChtYXRoLmgpOiAgRm9yIEMrKywgcGF0Y2ggQUlYJ3MgdXNlIG9mCisJJ2NsYXNzJyBhcyBmdW5jdGlvbiBuYW1lLgorCitTYXQgSnVsIDI0IDAyOjQ4OjMxIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZnVuY3Rpb24uYyAocHV0X3JlZ19pbnRvX3N0YWNrKTogTmV3IHN1YnJvdXRpbmUuCisJKHB1dF92YXJfaW50b19zdGFjayk6IFVzZSB0aGF0OyBoYW5kbGUgQ09OQ0FULgorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBGb3IgYXJyYXkgd2hvc2Ugc2l6ZSBjb21lcyBmcm9tCisJdGhlIGluaXRpYWxpemVyLCBkZXRlcm1pbmUgcHJvcGVyIGFsaWdubWVudCBoZXJlLgorCShhc3NlbWJsZV9hbGlnbik6IE5ldyBmdW5jdGlvbi4KKworCSogYy10eXBlY2suYzogSGFuZGxlIGdhcHMgaW4gcmVjb3JkIGluaXRpYWxpemVycy4KKwkoY29uc3RydWN0b3JfYml0X2luZGV4KTogTmV3IHZhcmlhYmxlLgorCShjb25zdHJ1Y3Rvcl9zdGFjayk6IE5ldyBmaWVsZCBiaXRfaW5kZXguCisJKHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0LCBwdXNoX2luaXRfbGV2ZWwpOiBTYXZlIGFuZCBpbml0IGl0LgorCShwb3BfaW5pdF9sZXZlbCk6IFJlc3RvcmUgaXQuCisJKG91dHB1dF9pbml0X2VsZW1lbnQpOiBVcGRhdGUgY29uc3RydWN0b3JfYml0X2luZGV4LgorCVVzZSBpdCB0byBvdXRwdXQgZ2Fwcy4KKwkocG9wX2luaXRfbGV2ZWwpOiBTcGVlZCB1cCBieSB1c2luZyBjb25zdHJ1Y3Rvcl9iaXRfaW5kZXguCisKKwkqIGMtdHlwZWNrLmMgKHByb2Nlc3NfaW5pdF9lbGVtZW50KTogQWNjZXB0IFNUUklOR19DU1QgZm9yIHN1YmFycmF5LgorCisJKiBsb29wLmMgKG1hcmtfbG9vcF9qdW1wKTogSGFuZGxlIHdlaXJkIGNhc2VzIGxpa2UganVtcGluZyB0bworCWEgc3ltYm9sX3JlZi4KKworRnJpIEp1bCAyMyAxNTo1NToxNCAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBjLXRyZWUuaDogRml4IHByb3RvdHlwZXMgZm9yIHByaW50X2xhbmdfZGVjbCwgcHJpbnRfbGFuZ190eXBlLgorCitGcmkgSnVsIDIzIDE1OjA2OjA1IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogYy10eXBlY2suYyAoc3RhcnRfaW5pdCk6IFNlY29uZCBhcmcgaXMgbm93IGEgdHJlZS4KKworRnJpIEp1bCAyMyAwODoyNjo0MyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlDeWdudXM8LT5GU0YgbWVyZ2UuCisJVGh1IEp1bCAyMiAwOTo1NDowNSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBGaXggdHlwbyBpbiB3YXJuaW5nIG1zZy4KKworCVR1ZSBKdWwgMjAgMTM6MTM6MTggMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChidWlsZF92dGFibGUsIHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTWFrZSB0aGUgdnRhYmxlcworCXJlYWRvbmx5IGJ5IGRlZmF1bHQuCisKKwlNb24gSnVsIDE5IDEzOjE2OjU4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oIChORVdfQ0xBU1NfU0NPUElORyk6IFR1cm4gdGhpcyBvZmYgZm9yIG5vdy4KKworCU1vbiBKdWwgMTkgMTE6MDQ6NTEgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChidWlsZF92Zm5fcmVmKTogUmVuYW1lIGBpbmRleCcgdG8gYGlkeCcuCisKKwlGcmkgSnVsIDE2IDA3OjQ0OjQ5IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IENoZWNrIGJvdGggaWYgdGhlIHR5cGUgaGFzIGEgZGVmYXVsdAorCWNvbnN0cnVjdG9yLCBhbmQgaWYgaXQgaGFzIGEgbm9uLWNvbnN0IGNvcHkgY29uc3RydWN0b3IsIHNvIHdlJ2xsIGtub3cKKwlub3QgdG8gZ2VuZXJhdGUgYSBjb25zdCBjb3B5IGNvbnN0cnVjdG9yIGZvciB0aGUgdHlwZSB3ZSdyZSB3b3JraW5nIG9uLgorCSogY3AtbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IEFkZCBvdGhlciBmcm9udC1lbmQgZGVidWdnaW5nCisJaW5mby4KKwkoZGVmYXVsdF9jb3B5X2NvbnN0cnVjdG9yX2JvZHkpOiBBbmQgdGFrZSBpdCBvdXQgb2YgaGVyZS4KKworCSogY3AtZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IEFkZCBtaXNzaW5nIGFyZ3VtZW50cyB0byBleHBhbmRfZXhwci4KKworCVRodSBKdWwgMTUgMTY6NTQ6MzMgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoZGVmYXVsdF9jb3B5X2NvbnN0cnVjdG9yX2JvZHkpOiBBbHNvIGNoZWNrIHRvIGNvcHkKKwlhbm9ueW1vdXMgdW5pb25zLCBzaW5jZSB0aGV5IGRvbid0IHNob3cgdXAgYXMgRklFTERfREVDTHMuCisJKGxhcmdlc3RfdW5pb25fbWVtYmVyKTogTmV3IGZ1bmN0aW9uLgorCisJVGh1IEp1bCAxNSAxNjoyMzoxOCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBVc2UgcmVzb2x2ZV9vZmZzZXRfcmVmIHRvIGhhbmRsZQorCU9GRlNFVF9SRUZzLCBhcyBhbnl0aGluZyBlbHNlIHdvdWxkIGJlIHdyb25nLgorCQorCVRodSBKdWwgMTUgMTM6MjM6NDAgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKENMQVNTVFlQRV9JTlRFUkZBQ0VfS05PV04sCisJU0VUX0NMQVNTVFlQRV9JTlRFUkZBQ0VfVU5LTk9XTl9YLCBTRVRfQ0xBU1NUWVBFX0lOVEVSRkFDRV9VTktOT1dOLAorCVNFVF9DTEFTU1RZUEVfSU5URVJGQUNFX0tOT1dOKTogTmV3IGFjY2VzcyBtZXRob2RzLgorCSogY3AtY2xhc3MuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUsIGR1cGxpY2F0ZV90YWdfZXJyb3IsCisJZmluaXNoX3N0cnVjdCk6IFVzZSBuZXcgYWNjZXNzIG1ldGhvZC4KKwkqIGNwLWRlY2wuYzogKGdyb2tmbmRlY2wsIGdyb2tkZWNsYXJhdG9yLCB4cmVmX3RhZyk6IERpdHRvLgorCSogY3AtZ2MuYyAoYnVpbGRfdF9kZXNjKTogRGl0dG8uCisJKiBjcC1sZXguYyAoc2V0X3ZhcmRlY2xfaW50ZXJmYWNlX2luZm8sIG1ha2VfbGFuZ190eXBlKTogRGl0dG8uCisJKiBjcC1wdC5jIChlbmRfdGVtcGxhdGVfaW5zdGFudGlhdGlvbiwgZG9fcGVuZGluZ19leHBhbnNpb25zKToKKwlEaXR0by4KKwkqIGNwLXNlYXJjaC5jIChkZnNfZGVidWdfbWFyayk6IERpdHRvLgorCisJKiBjcC1kZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBSZXdvcmQgZXJyb3IgbWVzc2FnZS4KKworCVdlZCBKdWwgMTQgMDk6MTc6MTggMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBBZGp1c3QgY2hhbmdlIG9mIE1heSAzMHRoIHRvCisJYWNjZXB0IG1vcmUgdGhpbmdzIChhbmQgc3RpbGwgaGFuZGxlIEFSTSBwMzA4IHByb3Blcmx5KS4gIERpc2FibGUKKwl0aGUgb2xkIHdheSwgYnV0IGxlYXZlIGl0IHRvIGJlIHByb3Blcmx5IGZpeGVkIGxhdGVyLgorCisJVHVlIEp1bCAxMyAyMjo0MzozOCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ2V0X2JpbmZvX2Zyb21fdmZpZWxkKTogTmV3IGZ1bmN0aW9uLgorCSogY3AtZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBVc2UgZ2V0X2JpbmZvX2Zyb21fdmZpZWxkIHRvIGdldCB0aGUKKwliaW5mbyB1c2VkIHRvIGZpbmQgdGhlIHZ0YWJsZSBmb3IgdGhpcyB2ZmllbGRzLiAgQ29ycmVjdHMgcHJvYmxlbQorCXdpdGggdnRhYmxlIHBvaW50ZXJzIGJlaW5nIHdyb25nIGR1cmluZyBjYWxsZWQgbWVtYmVyIGZ1bmN0aW9ucywKKwljYWxsZWQgZnJvbSBkZXN0cnVjdG9ycy4KKworCVR1ZSBKdWwgMTMgMTE6NTI6MzcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgcGVkd2FybiBhYm91dCBhIGR1cGxpY2F0ZSBsb25nCisJZm9yIGBsb25nIGxvbmcnLCB1bnRpbCB3ZSBmaWd1cmUgb3V0IGhvdyB3ZSByZWFsbHkgd2FudCB0byBoYW5kbGUgaXQuCisKKwlTYXQgSnVsIDEwIDE0OjU0OjM2IDE5OTMgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIGNwLXRyZWUuaCAod2Fybl9yZWR1bmRhbnRfZGVjbHMsIHdhcm5fbWlzc2luZ19icmFjZXMpOiBEZWNsYXJlZC4KKwkqIGNwLWRlY2wuYyAod2Fybl9yZWR1bmRhbnRfZGVjbHMpOiBOb3QgZGVjbGFyZWQgaGVyZS4KKwkqIGNwLWRlY2wyLmMgKHdhcm5fbWlzc2luZ19icmFjZXMpOiBEZWZpbmVkLgorCShsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLVdtaXNzaW5nLWJyYWNlcy4KKwkqIGNwLXR5cGUyLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFRlc3Qgd2Fybl9taXNzaW5nX2JyYWNlcy4KKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBNYWtlIHdhcm5pbmcKKwltZXNzYWdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gcmlnaHQvbGVmdCBhbmQgc2hpZnQvcm90YXRlLgorCisJKiBjcC1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogV2hlbiBtYWtpbmcgU0laRVRZUEUsCisJc3RhcnQgd2l0aCBuYW1lIGluIFNJWkVfVFlQRS4gIElmIC10cmFkaXRpb25hbCwgdXNlIGEgc2lnbmVkCisJdmVyc2lvbiBvZiB0aGF0IHR5cGUsIGlmIGl0IGlzIHVuc2lnbmVkLgorCisJKiBjcC10eXBlY2suYyAoY19zaXplb2YsIGJ1aWxkX2NfY2FzdCk6IFNldCBUUkVFX09WRVJGTE9XIGluCisJYWRkaXRpb24gdG8gVFJFRV9DT05TVEFOVF9PVkVSRkxPVy4KKworCSogY3AtZGVjbC5jIChmaW5pc2hfZW51bSk6IFN0b3JlIGxheW91dCByZXN1bHRzIGludG8gdmFyaWFudCB0eXBlcy4KKworCSogY3AtdHlwZWNrLmMgKGludGVybmFsX2J1aWxkX2NvbXBvdW5kX2V4cHIpOiBXaGVuIHBlZGFudGljLCBkb24ndAorCXNpbXBsaWZ5IGEgQ09NUE9VTkRfRVhQUiwgc28gdGhhdCBpdCB3b24ndCBiZSBtaXN0YWtlbiBmb3IgYW4KKwlsdmFsdWUgb3IgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorCisJKiBjcC1wYXJzZS55IChwcm9ncmFtKTogQWZ0ZXIgZXh0ZGVmcywgcG9wIGFueSB1bnBvcHBlZCBiaW5kaW5nIGx2bHMuCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IsIEFSUkFZX1JFRiBjYXNlKTogQnVpbGQgYXJyYXkgdHlwZSwKKwlhbmQgdGhlbiBidWlsZCB0aGUgdmFyaWFudCBhcnJheSB0eXBlLgorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IEF2b2lkIGludmFsaWQgc2hpZnQgZm9yIGVycm9uZW91cyBlbXB0eQorCWNoYXIgY29uc3QuCisKKwkqIGNwLWRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IE1ha2UgbWF4aW5kZXggLTEgZm9yIGVtcHR5CisJY29uc3RydWN0b3IuCisKKwkqIGNwLXR5cGUyLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBBbGxvdyBjYXN0IG9mIHB0ciB0bworCXdpZGVyIGludGVnZXIuCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBDb3B5IERFQ0xfRlJBTUVfU0laRSBmb3IgaW5saW5lIGZ1bmN0aW9uIGRlY2xzLgorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsKTogRG8gbm90IGFsbG9jYXRlIHN0YXRpYyB2YXIgb2YKKwl1bmtub3duIHNpemUuCisJKGNvbXBsZXRlX2FycmF5X3R5cGUpOiBVc2UgMCBhcyBkZWZhdWx0IG1heGluZGV4LgorCitGcmkgSnVsIDIzIDA3OjE4OjIwIDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGFnZ3JlZ2F0ZV92YWx1ZV9wKTogQW4gQVJSQVlfVFlQRSBpcyBhbHNvIGFuIGFnZ3JlZ2F0ZS4KKworRnJpIEp1bCAyMyAwMTo1NDoyOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChtYWluKTogSW1wcm92ZSAiTm8gaW5wdXQgZmlsZXMiIGVycm9yIG1lc3NhZ2UuCisKK1RodSBKdWwgMjIgMjM6MDA6MTEgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogRG8gbm90IHJlZGlyZWN0IGEganVtcCBpZiBkb2luZyBzbworCWludmFsaWRhdGVzIGluc25zIGluIHRoZSBqdW1wJ3MgZGVsYXkgc2xvdHMuCisJKHJlZGlyZWN0X3dpdGhfZGVsYXlfc2xvdHNfc2FmZV9wKTogTmV3IGZ1bmN0aW9uLgorCitUaHUgSnVsIDIyIDE4OjAxOjI5IDE5OTMgIEpvaG4gSGFzc2V5ICAoaGFzc2V5QGRnLXJ0cC5kZy5jb20pCisKKwkqIGludm9rZS50ZXhpLCBtODhrLmgsIG04OGsuYzogQ2hhbmdlZCBzZXJpYWxpemUtdm9sYXRpbGUgCisJdG8gdXNlIHRiMSBpbnN0ZWFkIG9mIGZsZGNyLCBmbGRjciBoYXMgcHJvYmxlbXMgb24gODgxMTAuCisJTWFkZSBzZXJpYWxpemUtdm9sYXRpbGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGFsbCBtb2RlbHMuCisKK1RodSBKdWwgMjIgMTE6MTk6MjggUERUIDE5OTMgIFJvbiBHdWlsbWV0dGUgKHJmZ0BuZXRjb20uY29tKQorCisJKiBmaXhpbmMuc3ZyNCAobWFraW5nIExJQiBhYnNvbHV0ZSk6IEp1c3QgY29uY2F0IHdpdGggJE9SSUdfRElSLgorCisJKiBjb25maWd1cmU6ICBVc2UgYHNlZCcgcmF0aGVyIHRoYW4gYGNhdCcgdG8gcHV0IGBNQVlCRV9UQVJHRVRfREVGQVVMVCcKKwlkZWZpbml0aW9uIGluLiAgKFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgYW4gTkZTIGJ1Zy4pCisKK1RodSBKdWwgMjIgMTQ6NTk6MzggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jOiBPdXRwdXQgbW9zdCBjb25zdHJ1Y3RvcnMgYW4gZWxlbWVudCBhdCBhIHRpbWUuCisJKGRpZ2VzdF9pbml0KTogRGVsZXRlZCBjb2RlIGZvciByYXcgY29uc3RydWN0b3JzLgorCShwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBGdW5jdGlvbiBkZWxldGVkLgorCShzdGFydF9pbml0LCBmaW5pc2hfaW5pdCk6IE5ldyBmdW5jdGlvbnMuCisJKHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0KQorCShwdXNoX2luaXRfbGV2ZWwsIGNoZWNrX2luaXRfdHlwZV9iaXRmaWVsZHMsIHBvcF9pbml0X2xldmVsKQorCShzZXRfaW5pdF9pbmRleCwgc2V0X2luaXRfbGFiZWwsIHByb2Nlc3NfaW5pdF9lbGVtZW50KQorCShvdXRwdXRfaW5pdF9lbGVtZW50LCBvdXRwdXRfcGVuZGluZ19pbml0X2VsZW1lbnRzKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGMtdHJlZS5oOiBEZWNsYXJlIG1vc3Qgb2YgdGhvc2UgZnVuY3Rpb25zLgorCisJKiBjLXBhcnNlLmluIChjYXN0X2V4cHIpOiBVc2UgbmV3IGluaXRpYWxpemVyIHBhcnNpbmcgZnVuY3Rpb25zLgorCShpbml0ZGNsLCBub3R5cGVfaW5pdGRjbCk6IExpa2V3aXNlLgorCShpbml0KTogTGlrZXdpc2UuCisJKGluaXRsaXN0X21heWJlX2NvbW1hLCBpbml0bGlzdDEpOiBUaGVzZSByZXBsYWNlIGluaXRsaXN0LgorCShpbml0ZWx0KTogTmV3IG5vbnRlcm1pbmFsLgorCUNoYW5nZSBzcGVjaWZpZWQgaW5kZXggc3ludGF4IHRvIGBbSU5ERVhdPScuCisJQ2hhbmdlIHNwZWNpZmllZCBmaWVsZCBzeW50YXggdG8gYC5OQU1FPScuCisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnRfZGVmX2NvbnRlbnRzKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfY29uc3RhbnRfZGVmKTogVXNlIGl0LgorCShkZWZlcnJlZF9jb25zdGFudHMpOiBOZXcgbGlzdCBvZiBjb25zdGFudHMgbm90IHlldCBvdXRwdXQuCisJKGRlZmVyX2FkZHJlc3NlZF9jb25zdGFudHMpOiBOZXcgZnVuY3Rpb24uCisJKG91dHB1dF9kZWZlcnJlZF9hZGRyZXNzZWRfY29uc3RhbnRzKTogTmV3IGZ1bmN0aW9uLgorCShtYWtlX2RlY2xfcnRsKTogRG9uJ3QgZXZlciByZXBsYWNlIG9sZCBydGw7CisJaW5zdGVhZCwgY2hhbmdlIGl0cyBtb2RlIGlmIG5lY2Vzc2FyeS4KKworV2VkIEp1bCAyMSAxNTo1MDoxOSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIENPTVBPTkVOVF9SRUYgY2FzZSk6IEZvciB1bmFsaWduZWQgb2JqZWN0CisJaW4gYW4gYWxpZ25lZCB1bmlvbiwgc2V0IE1FTV9JTl9TVFJVQ1RfUCBpZiBjcmVhdGUgYSBNRU0gcnR4LgorCisJKiBzcGFyYy5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBPbmx5IHNldCBoaWdoZXN0X2ZpcnN0IGlmIGZpcnN0IHJlZworCW9mIGRlc3Qgb3ZlcmxhcHMgbWVtb3J5IHNyYyBhZGRyZXNzLiAgT3RoZXJ3aXNlLCBpZiBhZGRyZWcxIHNldCBhbmQKKwlpcyBzYW1lIGFzIHNlY29uZCByZWcgb2YgZGVzdCwgc3VwcHJlc3MgdHJhaWxpbmcgZGVjcmVtZW50LgorCQorCSogc3BhcmMubWQgKG1vdmRpKzEpOiBEZWxldGUgJiBmcm9tIHIvaSBjb25zdHJhaW50LgorCisJRnJvbSByZmdAbmV0Y29tLmNvbToKKwkqIGZpeGluYy5zdnI0ICg8ZnR3Lmg+KTogIERvbid0IGFwcGx5IHNwZWNpYWxpemVkIGZpeGVzIHRvIDxmdHcuaD4KKwlpZiB3ZSBhcmUgb24gU29sYXJpcy4gIFRoZXkgYXJlIG5vdCBuZWVkZWQgaW4gdGhhdCBjYXNlLgorCisJKiBjb21iaW5lLmMgKG5vbmxvY2FsX2xhYmVsX2xpc3QpOiBOZXcgdmFyaWFibGUuCisJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogU2V0IGl0LgorCSh0cnlfY29tYmluZSwgZGlzdHJpYnV0ZV9saW5rcyk6IENBTExfSU5TTiB0ZXJtaW5hdGVzIGEgYmFzaWMKKwlibG9jayBpZiBub25sb2NhbF9sYWJlbF9saXN0IGlzIHNldC4KKworCSogY29uZmlnL21pcHMve2JzZC00LmgsIGJzZC01LmgsIGlyaXMzLmgsIG1pcHMuaCwgbmV3czQuaCwKKwluZXdzNS5oLCBud3MzMjUwdjQuaCwgb3Nmcm9zZS5oLCBzdnIzLTQuaCwgc3ZyMy01LmgsIHN2cjQtNC5oLAorCXN2cjQtNS5oLCB1bHRyaXguaH0gKENQUF9TUEVDKTogRGVmaW5lIExBTkdVQUdFX0FTU0VNQkxZLCBub3QKKwlMQU5HVUFHRV9DLCB3aGVuIGNvbXBpbGluZyBhIC5zIGZpbGUuCisKKwkqIG02OGsuaCAoVEFSR0VUX1NXSVRDSEVTKTogUmVjb2duaXplIC1tNjg4NTEsIC1tbm8tNjg4NTEsCisJLW02ODMwMiwgLW1uby02ODMwMiwgLW02ODMzMiwgLW1uby02ODMzMi4KKworCSogbHlueC5oLCBpMzg2L2x5bnguaCwgbTY4ay9seW54LmgsIHNwYXJjL2x5bnguaDogTmV3IGZpbGVzLgorCSogaTM4Ni5oIChPVkVSUklERV9PUFRJT05TLCBTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IERlZmluZS4KKwkqIG02OGsuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIFNVQlRBUkdFVF9TV0lUQ0hFUy4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUy4KKwkoU1VCVEFSR0VUX1NXSVRDSEVTLCBTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IERlZmluZS4KKwkqIHNwYXJjLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBTVUJUQVJHRVRfU1dJVENIRVMuCisJKE9WRVJSSURFX09QVElPTlMpOiBBZGQgU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMuCisJKFNVQlRBUkdFVF9TV0lUQ0hFUywgU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMpOiBEZWZpbmUuCisKKwkqIGZpeGluY2x1ZGVzIChzeXMvdHlwZXMuaCBzeXMvc3RkdHlwZXMuaCk6IERlbGV0ZSBuZXdsaW5lIGJlZm9yZQorCWRvLgorCShtYWNoaW5lL2NwdS5oKTogRGVsZXRlIHNwYWNlIGluIGAyPiYgMScuCisKKwkqIGNvbmZpZy5zdWIgKGx5bngpOiBSZWNvZ25pemUgYXMgdmVuZG9yLgorCShseW54b3MpOiBSZWNvZ25pemUgYXMgT1MuCisJKiBjb25maWd1cmUgKGkzODYtKi1seW54b3MsIHNwYXJjLSotbHlueG9zLCBtNjhrLSotbHlueG9zKToKKwlSZWNvZ25pemUgYXMgbmV3IGNvbmZpZ3VyYXRpb25zLgorCisJKiBnY2MuYyAobGlua19jb21tYW5kX3NwZWMpOiBNb3ZlICV7VCp9IGFmdGVyICV7TCp9IGFuZCAlRC4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IFN5bnRoZXNpemUgZG91YmxlIHdvcmQgc2hpZnRzIGFuZAorCXJvdGF0ZXMgZnJvbSBzaW5nbGUgd29yZCBzaGlmdHMuCisJKiBzcGFyYy5tZCAoYXNobGRpMywgbHNocmRpMyk6IE9ic29sZXRlLCBkZWxldGVkLgorCitXZWQgSnVsIDIxIDE1OjU1OjE4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jLnN2cjQ6IFdoZW4gZml4aW5nIGZ0dy5oLCBwcmVzZXJ2ZSByZW1haW5kZXIgb2YKKwlmdHcgYW5kIG5mdHcgZGVjbGFyYXRpb247IGRvbid0IGp1c3QgcmV3cml0ZSBpdC4KKworVHVlIEp1bCAyMCAyMzozNTozNiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbGxlY3QyLmMgKGlzX2N0b3JfZHRvcik6IERlbGV0ZSBsZWFkaW5nIF8ncyBmcm9tIHN5bSBuYW1lcworCWluIGBzcGVjaWFsJyB0YWJsZSwgaW4gbmVpdGhlci1kb3RzLW5vci1kb2xsYXJzIGNhc2UuCisKK1R1ZSBKdWwgMjAgMTg6NDk6MDkgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oLCBpMzg2L29zZmVsZi5oIChDQzFfU1BFQyk6IERvbid0IHR1cm4gb24KKwktbWhhbGYtcGljIGlmIEVMRi4KKworCSogaTM4Ni9vc2Zyb3NlLmggKEFTTV9GSUxFX0VORCk6IFB1dCBmaWxlbmFtZSwgc2FucyBkaXJlY3RvcnkgaW50bworCXRoZSAuaWRlbnQgc3RyaW5nLgorCitUdWUgSnVsIDIwIDE1OjA3OjA2IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKHN1YnN0LCBjYXNlIElGX1RIRU5fRUxTRSk6IEFkZCBtaXNzaW5nIGFyZyB0byBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbi4KKwkobWFrZV9jb21wb3VuZF9vcGVyYXRpb24sIGNhc2UgQVNISUZUUlQpOiBEZWxldGUgZXh0cmEgZ2VuX3VuYXJ5IGFyZy4KKworTW9uIEp1bCAxOSAxODoxNTo0OCAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogcnM2MDAwLmMgKGN1cnJlbnRfZmlsZV9mdW5jdGlvbl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogcnM2MDAwLmggKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBOZXcgbWFjcm8uCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBjdXJyZW50X2ZpbGVfZnVuY3Rpb25fb3BlcmFuZC4KKwkqIHJzNjAwMC5tZDogQWRkIHZhcmlhbnRzIG9mIGNhbGwgYW5kIGNhbGxfdmFsdWUgcGF0dGVybnMgZm9yCisJY2FsbHMgdG8gZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIHNhbWUgZmlsZS4gIE9taXQgdGhlIFRPQyBwb2ludGVyCisJcmVsb2FkIGFmdGVyIHN1Y2ggY2FsbHMuCisKK01vbiBKdWwgMTkgMTM6MTc6NTIgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogVHJ5IGZpbGxpbmcgYW55IGluc24gbmVlZGluZworCWRlbGF5IHNsb3RzIHdpdGggYSBKVU1QX0lOU04uCisKK01vbiBKdWwgMTkgMDA6MzM6MjQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBOZXcgYXJnIERPTlRfT1VUUFVUX0RBVEEuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uKTogUGFzcyAwIGFzIERPTlRfT1VUUFVUX0RBVEEuCisKK1N1biBKdWwgMTggMTU6Mzg6MDQgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMKKwlmb3IgdGhlIE1PRElGWV9FWFBSIHRoYXQgd2UgbWFrZS4KKworCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogV2hlbiBleHBhbmRpbmcgYXNzaWdubWVudCBpbnRvIERFQ0xfUkVTVUxULAorCWlnbm9yZSB0aGUgInZhbHVlIi0tZG8gaXQgZm9yIGVmZmVjdC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogSGFuZGxlIENPTkpfRVhQUi4KKwkqIGMtdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogU3VwcG9ydCBDT05KX0VYUFIuCisJQ2hhbmdlIEJJVF9OT1RfRVhQUiB0byBDT05KX0VYUFIgaWYgYXJnIGlzIGNvbXBsZXguCisKK1N1biBKdWwgMTggMTQ6MjI6MDUgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXRpYWxpemUgdHJhbXBvbGluZV9saXN0IGhlcmUuCisJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBOb3QgaGVyZS4KKworU3VuIEp1bCAxOCAwMToyNDo1NCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogVXNlIFRZUEVfTUFJTl9WQVJJQU5UIHdoZW4gcHJlZmVycmluZworCWxvbmcgaW50IHRvIGludCAod2hlbiB3aWR0aCBpcyB0aGUgc2FtZSkuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IE1vdmUgZGVidWdnaW5nIG91dHB1dCBjYWxscworCXRvIGFmdGVyIHNlY3Rpb24gaGFzIGJlZW4gc2VsZWN0ZWQuICBTZWxlY3QgdGhlIHNlY3Rpb24gYWdhaW4KKwlpZiB0aGUgZGVidWdnaW5nIG91dHB1dCBjYWxsIGNoYW5nZXMgdGhlIHNlY3Rpb24uCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbF9sb2NhdGlvbik6IENhbGwgaW5fdGV4dF9zZWN0aW9uCisJdG8gZGVjaWRlIHdoZXRoZXIgdG8gdXNlIERCWF9TVEFUSUNfQ09OU1RfVkFSX0NPREUuCisKKwkqIG9iamMtYWN0LmMgKHN5bnRoX21vZHVsZV9wcm9sb2d1ZSk6IENhbGwgbGF5b3V0X3R5cGUgZm9yIHRoZSBhcnJheQorCXR5cGUgdXNlZCBmb3IgX09CSkNfU0VMRUNUT1JfVEFCTEUuCisKK1NhdCBKdWwgMTcgMDA6NDE6NTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBleHByLmMgKGV4cGFuZF9pbmNyZW1lbnQpOiBDb252ZXJ0IGNvbnN0YW50IHN1YnRyYWN0IHRvIGFkZAorCWJlZm9yZSBzZXR0aW5nIHNpbmdsZV9pbnNuLiAgQ29tcGVuc2F0ZSBmb3IgdGhpcyB3aGVuIGNob29zaW5nCisJdGhlIHRyZWUgY29kZSB0byBwYXNzIHRvIGBidWlsZCcuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogSWYgZnVuY3Rpb24gaXMgZXh0ZXJuIGlubGluZSwKKwlldmVuIGlmIHdlIGNhbid0IGlubGluZSBpdCwgZG9uJ3QgY29tcGlsZSBpdC4KKworRnJpIEp1bCAxNiAyMTozMzo1MCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2luaXQpOiBSZXBvcnQgZmFpbHVyZSBvZiBnZXRwd2QuCisKK0ZyaSBKdWwgMTYgMTU6NTk6MDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjb25maWcvbTY4ay9ocDMyMC5oIChMSU5LX0xJQkdDQ19TUEVDSUFMLCBTUEFDRV9BRlRFUl9MX09QVElPTikKKwkoTElCX1NQRUMpOiBNb3ZlIG91dHNpZGUgb2YgVVNFX0dBUyBjb25kaXRpb25hbC4KKworRnJpIEp1bCAxNiAxNDoyNjoyNSAxOTkzICBEYXZpZCBkIGB6b28nIFp1aG4gICh6b29AY3lnbnVzLmNvbSkKKworCSogY29uZmlnLnN1YjogaWYgWyAiJG9zIiBdIC0tPiBpZiBbIHgiJG9zIiAhPSB4IiIgXQorCitGcmkgSnVsIDE2IDA1OjUwOjM1IDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjLXR5cGVjay5jIChjaGVja19mb3JtYXQpOiBXaXRoIC1XZm9ybWF0LCB3YXJuIGFib3V0CisJcHJpbnRmKCIlbGQiLCAxKSBldmVuIGlmIHNpemVvZiAoaW50KSA9PSBzaXplb2YgKGxvbmcpLAorCXNpbmNlIHRoZSBjb2RlIGlzbid0IHBvcnRhYmxlLiAgU2ltaWxhcmx5IGZvciAiJWQiIHZzIDFMLgorCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cykgW1BST01PVEVfUFJPVE9UWVBFU106CisJV2l0aCAtV2NvbnZlcnNpb24sIHVzZSB1bnByb21vdGVkIHR5cGUgdG8gY2hlY2sgZm9yIHNpZ25lZG5lc3MgY2hhbmdlcy4KKworVGh1IEp1bCAxNSAxMzowNDo0OCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzIChzdGRsaWIuaCk6IENoZWNrIGNhcmVmdWxseSBmb3IgZGVmaW5pdGlvbiBvZiBzaXplX3QuCisKK1dlZCBKdWwgMTQgMTk6MDU6NTEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogRml4IHNpemVfdCBkZWZpbml0aW9uIGluIHN0ZGxpYi5oIGFzIGluIHR5cGVzLmguCisJQWxzbyBhIGNvbmRpdGlvbmFsIHRvIHByZXZlbnQgcmVwZWF0ZWQgZGVmaW5pdGlvbi4KKworV2VkIEp1bCAxNCAxNDo1MzoyNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBEb24ndCBkaXNjYXJkIGNvbW1lbnQgZW5kIGNoYXJhY3RlcnMgb24gbGluZXMgdGhhdAorCWxvb2sgbGlrZSAiI2VuZGlmICovIi4gIEZpeGVzIEVzaXggNC4wLjQgcHJvYmxlbS4KKworV2VkIEp1bCAxNCAxMjoyMDoxMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogVXNlIGNpbnRfb2tfZm9yX21vdmUgaW5zdGVhZCBvZgorCWNoZWNraW5nIGVhY2ggY29uZGl0aW9uIG91cnNlbHZlcy4KKworCSogcGEtdXRhaG1hY2guaCAoQ1BQX1BSRURFRklORVMpOiBEbyBub3QgZGVmaW5lIEhQVVhfU09VUkNFLCBocDcwMAorCW9yIEhQNzAwLgorCSogcGExLXV0YWhtYWNoLmggKENQUF9QUkVERUZJTkVTKTogRG8gbm90IGRlZmluZSBocDkwMDBzODAwLAorCWhwOWs4LCBIUFVYX1NPVVJDRSwgb3IgaHA4MDAuCisKKwkqIEFsbG93IHVuY29uZGl0aW9uYWwganVtcHMgaW4gZGVsYXkgc2xvdHMgb2YgY2FsbCBhbmQgbWlsbGljb2RlCisJY2FsbCBpbnN0cnVjdGlvbnMuCisJKiBwYS5oIChUQVJHRVRfSlVNUF9JTl9ERUxBWSk6IE5ldyB0YXJnZXQgZmxhZyB0byBhbGxvdy9kaXNhbGxvdworCWp1bXAgaW5zdHJ1Y3Rpb25zIGluIGNhbGwgZGVsYXkgc2xvdHMuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWp1bXAtaW4tZGVsYXkgYW5kIC1tbm8tanVtcC1pbi1kZWxheS4gIAorCVByb3ZpZGUgLW1ubyBhbHRlcm5hdGl2ZXMgZm9yIG1vc3Qgb3B0aW9ucy4KKwkob3V0cHV0X2NhbGwpOiBEZWNsYXJlLgorCSogcGEuYyAob3V0cHV0X2NhbGwpOiBOZXcgZnVuY3Rpb24gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBvcgorCW1pbGxpY29kZSBjYWxsLCBwb3NzaWJseSB3aXRoIGEganVtcCBpbiB0aGUgZGVsYXkgc2xvdC4KKwkob3V0cHV0X211bF9pbnNuKTogQWNjZXB0IGFkZGl0aW9uYWwgYXJndW1lbnQsIHVzZSBvdXRwdXRfY2FsbC4KKwkob3V0cHV0X2Rpdl9pbnNuKTogTGlrZXdpc2UuCisJKG91dHB1dF9tb2RfaW5zbik6IExpa2V3aXNlLgorCShqdW1wX2luX2NhbGxfZGVsYXkpOiBOZXcgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiAKKwlKVU1QX0lOU04gaXMgaW4gdGhlIGRlbGF5IHNsb3Qgb2YgYSBjYWxsIG9yIG1pbGxpY29kZSBjYWxsLgorCSogcGEubWQgKHVuY29uZF9icmFuY2gpOiBOZXcgdHlwZSBhdHRyaWJ1dGUuICBFeHBsaWNpdGx5IGRpc2FsbG93CisJdW5jb25kX2JyYW5jaCBpbiBtb3N0IGRlbGF5IHNsb3RzLgorCShpbl9jYWxsX2RlbGF5IGF0dHJpYnV0ZSk6IE5ldyB0ZXN0IGZvciBkZWxheSBzbG90IG9mIGNhbGwgaW5zbnMuCisJQWxsb3cgdW5jb25kX2JyYW5jaGVzIGluIHRoZSBkZWxheSBzbG90IGlmIFRBUkdFVF9KVU1QX0lOX0RFTEFZLgorCShkZWZpbmVfZGVsYXkgZm9yIGNhbGxzLCBtaWxsaWNvZGUgY2FsbHMsIGJyYW5jaGVzLCByZXR1cm5zLCBldGMpOgorCUJyb2tlbiB1cCBpbnRvIHR3byBkZWZpbmUgZGVsYXlzLiAgT25lIGZvciBjYWxscyBhbmQgbWlsbGljb2RlIAorCWNhbGxzLCBhIHNlY29uZCBmb3IgYnJhbmNoZXMsIHJldHVybnMsIGV0Yy4KKwkobWlsbGljb2RlIGluc25zKTogUGFzcyB0aGUgY3VycmVudCBpbnNuIGRvd24gdG8gCisJb3V0cHV0X3ttdWwsZGl2LG1vZH1faW5zbi4KKwkoanVtcCBpbnNuKTogVXNlICJ1bmNvbmRfYnJhbmNoIiB0eXBlIGF0dHJpYnV0ZS4gIExlbmd0aCBvZiB0aGlzCisJaW5zbiB2YXJpZXMgaWYgaXQgaXMgaW4gdGhlIGRlbGF5IHNsb3Qgb2YgYSBjYWxsLgorCShjYWxsX2ludGVybmFsX3N5bXJlZik6IFVzZSBvdXRwdXRfY2FsbC4KKwkoY2FsbF92YWx1ZV9pbnRlcm5hbF9zeW1yZWYpOiBMaWtld2lzZS4KKwkoY2FsbF9pbnRlcm5hbF9yZWcpOiBVc2UgJXIgc3ludGF4IGluc3RlYWQgb2YganVzdCByZWdpc3RlciBudW1iZXJzLgorCShjYWxsX3ZhbHVlX2ludGVybmFsX3JlZyk6IExpa2V3aXNlLgorCitXZWQgSnVsIDE0IDAyOjE5OjExIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcnRsLmRlZiAoQ09OQ0FUKTogTmV3IHJ0eCBjb2RlLgorCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uLCBnZW5faGlnaHBhcnQpOiBIYW5kbGUgQ09OQ0FULgorCShvcGVyYW5kX3N1YndvcmQpOiBMaWtld2lzZS4KKwkoZ2VuX3JlZ19ydHgpOiBGb3IgY29tcGxleCBtb2RlLCByZXR1cm4gYSBDT05DQVQgb2YgdHdvIHBzZXVkb3MuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogTWFrZSBhIENPTkNBVCwgZm9yIGRlY2xzIG9mIGNvbXBsZXggdHlwZS4KKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sX2xvY2F0aW9uKTogU3Vicm91dGluZSBicm9rZW4gb3V0IGZyb20KKwlkYnhvdXRfc3ltYm9sLiAgSGFuZGxlIENPTkNBVCBoZXJlLgorCShkYnhvdXRfc3ltYm9sX25hbWUpOiBOZXcgc3Vicm91dGluZS4gIEhhbmRsZSBhbm9ueW1vdXMgZGVjbHMgdG9vLgorCShkYnhvdXRfcmVnX3Bhcm1zKTogU2ltcGxpZnkgdXNpbmcgZGJ4b3V0X3N5bWJvbF9sb2NhdGlvbi4KKwlIYW5kbGUgQ09OQ0FULgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBXaGVuIGNhc3RpbmcgdG8gdW5pb24sIGlmIHZhbHVlIGlzIGFycmF5CisJb3IgZnVuY3Rpb24sIGRvIGRlZmF1bHRfY29udmVyc2lvbi4KKworV2VkIEp1bCAxNCAwMDo1MjoyMyAxOTkzICBKaW0gQmxhbmR5ICAoamltYkB3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3ViOiBBZGQgY2FzZSBmb3IgQnVsbCBkcHgvMi4KKworTW9uIEp1bCAxMiAxNzoyNjo1MyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGZpeGluY2x1ZGVzOiBXaGVuIGxvb2tpbmcgZm9yICNkZWZpbmUgQ1RSTCwKKwlhY2NlcHQgbXVsdGlwbGUgc3BhY2VzIGJldHdlZW4gdGhlIHR3byB3b3Jkcy4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEb24ndCBmcmVlIHNjcmF0Y2hfbGlzdCBvciBzY3JhdGNoX2Jsb2NrIGlmIDAuCisKK01vbiBKdWwgMTIgMTc6MTI6MzEgMTk5MyAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGMtY29tbW9uLmMgKHVuc2lnbmVkX2NvbnZlcnNpb25fd2FybmluZyk6IEp1c3QgdXNlIGB3YXJuaW5nJywKKwlub3QgYHBlZHdhcm4nOyB0aGVzZSBkaWFnbm9zdGljcyBhcmUgbm90IHJlcXVpcmVkIGJ5IFN0YW5kYXJkIEMuCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogVXNlIGBjb252ZXJ0X2FuZF9jaGVjaycsCisJbm90IGBjb252ZXJ0JywgZm9yIGNvbnZlcnRpbmcgYXJpdGhtZXRpYyB0eXBlcywgc2luY2UKKwlgY29udmVydF9hbmRfY2hlY2snIG5vIGxvbmdlciByZXBvcnRzIGFuIGVycm9yCisJd2hlcmUgaXQgc2hvdWxkIGp1c3Qgd2Fybi4KKworTW9uIEp1bCAxMiAxNjo0NDozNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9pMzg2L2kzODYubWQgKGZmc3NpMiwgZmZzaGkyKTogQXNzdW1lIGJzZiBwcm9kdWNlcworCWdhcmJhZ2UgaWYgaW5wdXQgaXMgMC4gIFVzZSBqdW1wcyB0byBsb2FkIG91dHB1dCBpbiB0aGF0IGNhc2UuCisKKwkqIGNvbmZpZy92YXgvdmF4LmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEFkZCBjb2RlIHRvCisJZG8gYW4gcmVpIHRvIGNsZWFyIHRoZSBpbnNuIGNhY2hlLgorCitTdW4gSnVsIDExIDE4OjEzOjQ3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnL25zMzJrL25zMzJrLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IERvIHRoZSBsb3cgcmVnIGZpcnN0LAorCXdoZW4gb25seSB0aGUgaGlnaCByZWcgaGFzIGFuIG92ZXJsYXAuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogRG9uJ3Qgd2FybiBhYm91dCBzaWduIGNoYW5nZQorCWZvciBhbiBJTlRFR0VSX0NTVCBpbnNpZGUgTk9QX0VYUFIsIGlmIHZhbHVlIG5vdCBmaXRzIG5ldyB0eXBlLgorCURlbGV0ZSB0aGUgY29kZSB0byBjaGVjayBmb3IgVkFMIGhhdmluZyBlbnVtZXJhdGlvbiB0eXBlLgorCisJKiBpODYwLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEZpeCB0eXBvcyBpbiBKdW4gMjggY2hhbmdlLgorCitTYXQgSnVsIDEwIDE2OjA1OjI2IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogaTg2MC5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBPbmx5IHNldCBoaWdoZXN0X2ZpcnN0IGlmIGZpcnN0IHJlZworCW9mIGRlc3Qgb3ZlcmxhcHMgbWVtb3J5IHNyYyBhZGRyZXNzLiAgT3RoZXJ3aXNlLCBpZiBhZGRyZWcxIHNldCBhbmQKKwlpcyBzYW1lIGFzIHNlY29uZCByZWcgb2YgZGVzdCwgc3VwcHJlc3MgdHJhaWxpbmcgZGVjcmVtZW50LgorCQorU2F0IEp1bCAxMCAxOTo0OTozMSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBDb3JyZWN0bHkgaWRlbnRpZnkgYnJhbmNoZXMgdG8gdGhlIGVuZAorCW9mIGEgZnVuY3Rpb24gc28gdGhhdCB0aGV5IG1heSBiZSB0dXJuZWQgaW50byBSRVRVUk4gaW5zbnMuCisKK1NhdCBKdWwgMTAgMTc6Mzc6MTIgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogQWxsb2NhdGUgQ09MTEVDVF9OQU1FIHN0cmluZyB3aXRoIHhtYWxsb2MuCisKK1NhdCBKdWwgMTAgMTQ6NDQ6MjkgMTk5MiAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogYmFzaWMtYmxvY2suaCAoUkVHU0VUX0VMVF9UWVBFKTogTWFrZSB1bnNpZ25lZCB0byBhdm9pZAorCXNpZ25lZCBhcml0aG1ldGljIG92ZXJmbG93LgorCSogaGFyZC1yZWctc2V0LmggKEhBUkRfUkVHX0VMVF9UWVBFKTogTmV3IHVuc2lnbmVkIHR5cGUgdG8KKwlhdm9pZCBzaWduZWQgYXJpdGhtZXRpYyBvdmVyZmxvdy4KKwkoSEFSRF9SRUdfU0VUKTogRGVmaW5lIGFzIEhBUkRfUkVHX0VMVF9UWVBFLCBvciBhcnJheSB0aGVyZW9mLgorCShIQVJEX0NPTlNUKTogQWx3YXlzIGNhc3QgdG8gSEFSRF9SRUdfRUxUX1RZUEUuCisJKCpfSEFSRF9SRUdfKik6IFVzZSB1bnNpZ25lZCBIQVJEX0NPTlNUIGFuZCBIQVJEX1JFR19FTFRfVFlQRQorCXR5cGVzIGluc3RlYWQgb2YgYXNzdW1pbmcgSE9TVF9XSURFX0lOVC4gCisKK1NhdCBKdWwgMTAgMTA6MjU6MTYgMTk5MyAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKKworCSogZml4aW5jbHVkZXM6IENoZWNrIGZvciBzeW1saW5rcyBiZWluZyBhdmFpbGFibGUgaW4gL3RtcC4KKworU2F0IEp1bCAxMCAwMjowMTowOCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrLzNiMS5oIChNWV9JU0NPRkYsIE9CSkVDVF9GT1JNQVRfQ09GRiwgTk9fU1lTX1NJR0xJU1QpOgorCU5ldyBkZWZpbml0aW9ucy4KKworRnJpIEp1bCAgOSAyMDo0MDoyOSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKGRicmEgYW5kIG1vdmIgcGF0dGVybnMpOiBGaXggY29uc3RyYWludHMgc28gdGhhdCBGUAorCXJlZ2lzdGVycyBhcmUgbmV2ZXIgcHJlZmVycmVkLgorCitGcmkgSnVsICA5IDE3OjM2OjM1IDE5OTMgIEhvbGdlciBUZXV0c2NoICAoaG9sZ2VyQGhvdGJzby5yaGVpbi1tYWluLmRlKQorCisJKiB2YS1jbGlwcGVyLmg6IE1ha2UgdmFyL3N0ZGFyZ3MgY29tcGF0aWJsZSB3aXRoIGFwb2dlZSdzIGFjYy4KKwkoX19nbnVjX3ZhX2xpc3QpOiBSZXBsYWNlIF9fdmFfZiBhbmQgX192YV9yIHdpdGggX192YV9yZWcuCisJKF9fdmFfbGlzdCwgX1NZU19JTlRfU1REQVJHX0gpOiBOZXcgZGVmaW5lcy4KKwkodmFfYXJnKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgorCisJKiBjb25maWcvY2xpcHBlci9jbGlwcGVyLmMgKGNsaXBwZXJfYnVpbHRpbl9zYXZlcmVncykgOiBEaXRvLgorCitGcmkgSnVsICA5IDEzOjM5OjA4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCUN5Z251czwtPkZTRiBtZXJnZS4KKwlGcmkgSnVsICA5IDEyOjE3OjIwIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGJ1aWxkX2FycmF5X3JlZik6IEZvcmNlIHRoZSBhcnJheSB0byBiZSBhbGxvY2F0ZWQgb24KKwl0aGUgc3RhY2sgaWYgaXQgaXMgYWNjZXNzZWQgYnkgYSBvdXQtb2YtYm91bmQgY29uc3RhbnQgaW50ZWdlcgorCXN1YnNjcmlwdC4KKworCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IFVuZG8gY2hhbmdlIHRvIGdlbmVyYXRlIGEgbmV3IF9UWVBFIG5vZGUgZm9yCisJYSB0eXBlZGVmLgorCisJVGh1IEp1bCAgOCAxNjoyNTo1MiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocHVzaHRhZyk6IERvbid0IG1hcmsgdGhlIGJpbmRpbmcgbGF5ZXIgbWFya2VyOyBmb3IKKwlkd2FyZiBkZWJ1Z2dpbmcsIGRvIG1hcmsgdGhlIFRZUEVfREVDTCB3ZSBjcmVhdGVkIGFzIGlnbm9yZWQuCisKKwkqIGNwLXRyZWUuaCAoSU5fQ0hBUkdFX05BTUUpOiBEZWZpbmUgdG8gbm90IG5lZWQgRE9MTEFSX0lOX0xBQkVMLgorCShWVEJMX1BUUl9UWVBFKTogTGlrZXdpc2UuCisJKFZUQUJMRV9ERUxUQV9OQU1FLCBWVEFCTEVfSU5ERVhfTkFNRSwgVlRBQkxFX1BGTl9OQU1FLAorCVZUQUJMRV9ERUxUQTJfTkFNRSk6IFVzZSB0d28gbGVhZGluZyB1bmRlcnNjb3Jlcy4KKworCVRodSBKdWwgIDggMTQ6MzE6NDAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKFRSRUVfQU5PTl9VTklPTl9FTEVNKTogRGVsZXRlZCwgaXQncyBuZXZlciBzZXQuCisJKiBjcC1kZWNsLmMgKGJ1aWxkX2RlZmF1bHRfY29uc3RydWN0b3IpOiBEZWxldGUgY2hlY2tpbmcKKwlUUkVFX0FOT05fVU5JT05fRUxFTS4KKwkqIGNwLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBMaWtld2lzZS4KKwkqIGNwLXR5cGUyLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogVXBkYXRlIGNvdW50LgorCisJKiBjcC10eXBlMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBEaXNhYmxlIGFzc2VydCAzMjMgKHNlZQorCWNvbW1lbnRzIGZvciBleHBsYW5hdGlvbikuCisKKwkqIGNwLXR5cGVjay5jIChjb21wX3RhcmdldF9wYXJtcyk6IFJldHVybiAwIGlmIHN0cmljdCBpcyAhPSAwLCBub3QKKwlqdXN0ID4gMC4KKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IHNldCBXQVJOX1JFVFVSTl9UWVBFLgorCisJV2VkIEp1bCAgNyAxODozNjo1OSAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzQGRlbGxhLmFwcGxpLnNlKQorCisJQWRkIHRoZSBjaGFuZ2VzIHRvIHJlZG8gaG93IHdlIGhhbmRsZSBzY29waW5nLiBbTWVyZ2VkIGJ5IGJway5dCisKKwkqIGNwLWNsYXNzLmMgKHtwb3AscHVzaH1fbmVzdGVkX2NsYXNzKTogTmV3IGZ1bmN0aW9ucyB0byB1c2UKKwlpbnN0ZWFkIG9mIHBsYWluIHtwdXNoLHBvcH1jbGFzcy4gIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHNlZSB0bworCXRoYXQgc3RhdGljIGVudGl0aWVzIG9mIGVuY2xvc2luZyBjbGFzc2VzIHdpbGwgYmUgdmlzaWJsZS4KKwkqIGNwLXRyZWUuaCAoe3BvcCxwdXNofV9uZXN0ZWRfY2xhc3MpOiBEZWNsYXJlIHRoZW0uCisJKiBjcC1kZWNsLmggKHtmaW5pc2gsc3RhcnR9X2Z1bmN0aW9uKTogVXNlIHRoZXNlIG5ldyBmdW5jdGlvbnMKKwlpbnN0ZWFkIG9mIHBsYWluIHtwdXNoLHBvcH1jbGFzcyBjYWxscy4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBEaXR0by4KKwkqIGNwLWRlY2wyLmMgKGJ1aWxkX3B1c2hfc2NvcGUpOiBEaXR0by4KKwkqIGNwLWNsYXNzLmMgKHBvcGNsYXNzKTogT25seSBjYWxsIHBvcF9jbGFzc19kZWNscyBpZiBNT0RJRlkgaXMKKwlzZXQuCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCk6IE1heWJlIGNhbGwgcHVzaGRlY2xfY2xhc3NfbGV2ZWwgaW5zdGVhZCBvZgorCXB1c2hkZWNsLiAgVGhpcyBpcyB1c2VkIGZvciBuZXN0ZWQgdHlwZXMuCisJKGdyb2tkZWNsYXJhdG9yKTogUmVtb3ZlIHRoZSB7cHVzaCxwb3B9bGV2ZWwgY2FsbHMgYXJvdW5kIHRoZQorCWluZGlyZWN0IHJlY3Vyc2lvbiBvY2N1cmluZyB3aGVuIGdyb2tpbmcgY2xhc3MtbG9jYWwgdHlwZWRlZnMuCisJUmVtb3ZlIHRoZSBlcnJvciBjaGVjayBvZiBzdWNoIHR5cGVkZWZzIGhpZGluZyBvdGhlciBmaWVsZHMgaW4gdGhlCisJc2FtZSBzY29wZS4gIFJlbW92ZSB0aGUgcHVzaGRlY2xfY2xhc3NfbGV2ZWwgY2FsbCBzaW5jZSBzdGFydF9kZWNsCisJZG9lcyB0aGUgd29yayBub3cuCisKKwlDbGFzcyBzY29waW5nIChhbmQgdHlwZSB2YWx1ZSBjYWNoaW5nKSByZWRvbmUuICBUaGUgbmV3IGJlaGF2aW91cgorCWlzIHRyaWdnZXJlZCBieSBORVdfQ0xBU1NfU0NPUElORyBiZWluZyBkZWZpbmVkIHRvIDEuICBUaGUgb2xkCisJYmVoYXZpb3IgaXMgYWNjb21wbGlzaGVkIGJ5IGRlZmluaW5nIGl0IHRvIHRoZSB2YWx1ZSAwLiAgVGhlIGVudHJpZXMKKwliZWxvdyBkZXNjcmliZXMgdGhlIGVmZmVjdGl2ZSBjaGFuZ2VzIHdoZW4gTkVXX0NMQVNTX1NDT1BJTkcgaXMgc2V0CisJdG8gbm9uLXplcm8uCisKKwkqIGNwLWNsYXNzLmMgKHNldF9jbGFzc19zaGFkb3dzKTogQWRkIHByb3RvdHlwZS4KKwkocHJldmlvdXNfY2xhc3NfdmFsdWVzKTogTmV3IHZhcmlhYmxlLgorCShwdXNoY2xhc3MpOiBBZGFwdGVkIHRvIG5vdCB1c2UgcHJldmlvdXNfY2xhc3NfdHlwZSAmIHVudXNlX2ZpZWxkcy4KKwlSZW1vdmVkIHNldHRpbmcgb2YgSURFTlRJRklFUl9DTEFTU19WQUxVRS4KKwkocG9wY2xhc3MpOiBBZGFwdGVkIHRvIG5vdCB1c2UgcHJldmlvdXNfY2xhc3NfdHlwZS4gIERvbid0IHJlc2V0CisJSURFTlRJRklFUl9DTEFTU19WQUxVRS4gIE1vdmVkIGNhbGwgb2YgcG9wX2NsYXNzX2RlY2xzLgorCShtYXliZV9wdXNoX2NhY2hlX29ic3RhY2spOiBOZXcgZnVuY3Rpb24uCisJKiBjcC1kZWNsLmMgKGN1cnJlbnRfY2xhc3NfZGVwdGgpOiBBZGQgZXh0ZXJuIGRlY2wuCisJKHByZXZpb3VzX2NsYXNzX3ZhbHVlcyk6IEFkZCBleHRlcm4gZGVjbC4KKwkocG9wX2RlY2xfbGV2ZWwpOiBEb24ndCByZXNldCBJREVOVElGSUVSX0NMQVNTX1ZBTFVFLgorCShzZXRfY2xhc3Nfc2hhZG93cyk6IE5ldyBmdW5jdGlvbi4KKwkocG9wbGV2ZWxfY2xhc3MpOiBBZGp1c3Qgc2V0dGluZyBvZiBJREVOVElGSUVSX0NMQVNTX1ZBTFVFIHRvIG9ubHkKKwloYXBwZW4gaWYgd2UncmUgbm90IGxlYXZpbmcgYSB0b3BsZXZlbCBjbGFzcy4KKwkocHVzaF90b190b3BfbGV2ZWwpOiBEb24ndCB1c2UgYWRqdXN0X3R5cGVfdmFsdWUuCisJKHNldF9pZGVudGlmaWVyX3R5cGVfdmFsdWUpOiBSZXZlcnNlIHRoZSBjaG9pY2UgYmV0d2VlbiBjbGFzcyBhbmQKKwlsb2NhbCBzY29wZSB3aGVuIGluc3RhbGxpbmcgdGhlIHR5cGUgdmFsdWUuCisJKHNldF9pZGVudGlmaWVyX2xvY2FsX3ZhbHVlKTogU2V0IHRoZSB0eXBlIHZhbHVlIGlmIHdlJ3JlIHNlZWluZyBhCisJVFlQRV9ERUNMLgorCShzZXRfbmVzdGVkX3R5cGVuYW1lKTogQWRkZWQgY29tbWVudC4KKwkocHVzaHRhZyk6IERvbid0IGNhbGwgc2V0X2lkZW50aWZpZXJfdHlwZV92YWx1ZS4gIExlYXZlIG91dAorCXNldHRpbmcgb2YgSURFTlRJRklFUl9DTEFTU19WQUxVRS4KKwkoYWRqdXN0X3R5cGVfdmFsdWUpOiBSZW1vdmVkLgorCShwdXNoZGVjbCk6IERvbid0IGNhbGwgYWRqdXN0X3R5cGVfdmFsdWUuCisJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogQ2FsbCBwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcuICBTZXQgdGhlCisJdHlwZSB2YWx1ZSBpZiB3ZSdyZSBzZWVpbmcgYSBUWVBFX0RFQ0wuCisJKHB1c2hfY2xhc3NfbGV2ZWxfYmluZGluZyk6IE5ldyBmdW5jdGlvbiB3aG9zZSBndXRzIGNhbWUgZnJvbQorCXB1c2hkZWNsX2NsYXNzX2xldmVsLgorCShnbG9iYWxpemVfbmVzdGVkX3R5cGUpOiBTZWUgdG8gdGhhdCBib3RoIHRoZSBjbGFzc19zaGFkb3dlZCBhbmQKKwl0eXBlX3NoYWRvd2VkIGxpc3RzIGluIHRoZSBiaW5kaW5nIHN0YWNrIGdldHMgdXBkYXRlZCBjb3JyZWN0bHkuCisJRG9uJ3QgY2FsbCBzZXRfaWRlbnRpZmllcl90eXBlX3ZhbHVlIG9uIHRoZSBERUNMX05FU1RFRF9UWVBFTkFNRS4KKwlDbGVhciBERUNMX0NMQVNTX0NPTlRFWFQgYXMgd2VsbCBhcyBERUNMX0NPTlRFWFQuICBJbnN0YWxsIGEKKwljb3JyZWN0IElERU5USUZJRVJfe0NMQVNTLFRZUEV9X1ZBTFVFIGlmIG5lZWRlZC4KKwkoZ3Jva2RlY2xhcmF0b3IpOiBQcmVmZXIgcHVzaGRlY2xfY2xhc3NfbGV2ZWwgb3ZlciBwdXNodGFnIHdoZW4KKwlyZWNvcmRpbmcgYSBuZXN0ZWQgdHlwZWRlZi4KKwkoYnVpbGRfZW51bWVyYXRvcik6IERvbid0IGluc3RhbGwgYSBtZXRob2QtbG9jYWwgZW51bWVyYXRvciBpbnRvCisJY2xhc3Mgc2NvcGUuCisJKiBjcC1kZWNsMi5jIChncm9rZmllbGQpOiBEb24ndCBjYWxsIHNldF9pZGVudGlmaWVyX3R5cGVfdmFsdWUuCisJKiBjcC1zZWFyY2guYyAoY2xvc2VkX2VudmVsb3Blcyk6IE5ldyBsaXN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24KKwlvZiB3aGF0IGRlY2xzIHNob3VsZCBiZSBwdXNoZWQgd2hlbiBlbnRlcmluZyBhIGNsYXNzIHNjb3BlLgorCShkZnNfcHVzaGRlY2xzKTogQnVpbGQgYW5kIG1haW50YWluIHRoZSBjbG9zZWRfZW52ZWxvcGVzIGxpc3QKKwlpbnN0ZWFkIG9mIG1hbmFnaW5nIHRoZSBJREVOVElGSUVSX0NMQVNTX1ZBTFVFcyBkaXJlY3RseS4KKwkoZGZzX2NvbXByZXNzX2RlY2xzKTogQWRhcHRlZCB0byByZWNvZ25pemUgdGhlIGVudmVsb3BlcworCWRmc19wdXNoZGVjbHMgaGFzIGluc3RhbGxlZCBpbiB0aGUgSURFTlRJRklFUl9DTEFTU19WQUxVRSBzbG90cy4KKwkocHVzaF9jbGFzc19kZWNscyk6IFRlbGwgb3ZlcmxvYWRfdGVtcGxhdGVfbmFtZSB0byBwdXNoIHRoZQorCXRlbXBsYXRlIGRlY2xzIGludG8gY2xhc3Mgc2NvcGUgaW5zdGVhZCBvZiBidWlsZGluZyBhIG5ldyBsZXZlbC4KKwlBZGRlZCBjb2RlIHRvIG9wZW4gdXAgdGhlIGVudmVsb3BlcyBpbiBjbG9zZWRfZW52ZWxvcGVzIGFuZAorCWluc3RhbGwgdGhlIGNsYXNzL3R5cGUgdmFsdWVzIGluIHRoZSBjbGFzcyBiaW5kaW5nIGNvbnRvdXIgd2l0aAorCXByb3BlciBzaGFkb3dpbmcuCisJKGRmc19wb3BkZWNscyk6IFJlbW92ZWQuCisJKHBvcF9jbGFzc19kZWNscyk6IFJlbW92ZWQgdGhlIGFjdHVhbCBkZWNsLXBvcHBpbmcgY29kZSwgbGVhdmluZworCWp1c3QgdGhlIG9ic3RhY2sgZnJlZWluZyBwb3Bfc2VhcmNoX2xldmVsIGNhbGwuICBUaGUgcG9wcGluZyBpcworCWF1dG9tYXRpY2FsbHkgaGFuZGxlZCBieSBwb3BsZXZlbCBub3cuCisJKiBjcC10cmVlLmggKE5FV19DTEFTU19TQ09QSU5HKTogQSBuZXcgbWFjcm8gY29uc3RhbnQgZGVmYXVsdGVkIHRvCisJdGhlIHZhbHVlIDEuCisJKGFkanVzdF90eXBlX3ZhbHVlKTogUHJvdG90eXBlIHJlbW92ZWQuCisJKHB1c2hfY2xhc3NfbGV2ZWxfYmluZGluZyk6IEFkZGVkIHByb3RvdHlwZS4KKworCVdlZCBKdWwgIDcgMTE6MDQ6MDkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHB1c2hkZWNsKTogV2hlbiBwcm9jZXNzaW5nIGEgdHlwZWRlZiBzdGF0ZW1lbnQsCisJZ2VuZXJhdGUgYSB3aG9sZSBuZXcgLi4uX1RZUEUgbm9kZS4gIEJlIGNhcmVmdWwgdGhhdCB0aGUgdHlwZSB3ZSdyZQorCWxvb2tpbmcgYXQgaXNuJ3QgYW4gZXJyb3JfbWFya19ub2RlLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2V0IHRoZSBERUNMX0NPTlRFWFQgb24gdGhlIHR5cGUgd2UndmUKKwlmb3VuZC4KKwkqIGNwLWRlY2wuYyAocHVzaHRhZyk6IE1hcmsgdGhlIFRZUEVfREVDTCBhcyBpZ25vcmVkIHdoZW4gdXNpbmcKKwlkd2FyZiBkZWJ1Z2dpbmc7IGRvbid0IGlnbm9yZSBpdCBpZiBpdCdzIGFub255bW91cyBmb3IgZHdhcmYKKwlkZWJ1Z2dpbmcuICBQdXQgdGhlIERFQ0xfQ09OVEVYVCBpbiB0aGUgVFlQRV9DT05URVhUIG9mIFRZUEUuCisJKGdsb2JhbGl6ZV9uZXN0ZWRfdHlwZSk6IFJlbWVtYmVyIHRvIHNldCBUWVBFX0NPTlRFWFQuCisJKiBjcC1wdC5jIChvdmVybG9hZF90ZW1wbGF0ZV9uYW1lKTogU2V0IERFQ0xfQ09OVEVYVC4KKwkqIGNwLXNlYXJjaC5jIChjb21wdXRlX3Zpc2liaWxpdHkpOiBTZXQgREVDTF9DT05URVhUIGlmIHRoZSBjb250ZXh0CisJaXMgTlVMTC4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IE1hcmsgdGhlIHRhZyBhcyBpZ25vcmVkIGZvciBkd2FyZgorCWRlYnVnZ2luZy4KKworCSogY3AtZXhjZXB0LmMgKEVIU190eXBlKTogRG9uJ3QgbWFrZSBpdCBzdGF0aWMuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogRG9uJ3QgY3JlYXRlIGEgZGVmYXVsdCBjb3B5CisJY29uc3RydWN0b3IgZm9yIHRoZSBFSFNfdHlwZS4KKworCSogY3AtY2xhc3MuYyAoZ2V0X3Z0YWJsZV9uYW1lKTogTGVhdmUgdGhlIG51bWJlcnMgaW4gdGhlIG5hbWUgZm9yCisJdGhlIHZ0YWJsZSwgc28gd2UncmUgdW5pZm9ybSB3aXRoIHdoYXQgcHJlcGFyZV9mcmVzaF92dGFibGUgaXMKKwlkb2luZy4gIEludHJvZHVjZXMgYSBiaW5hcnkgaW5jb21wYXRhYmlsaXR5LgorCisJKiBjcC10cmVlLmMgKGJ1aWxkX2NwbHVzX21ldGhvZF90eXBlKTogTWFyayB0aGUgZmlyc3QgYXJndHlwZSAodGhlCisJdGhpcyBwb2ludGVyKSBhcyBhcnRpZmljaWFsLgorCisJKiBjcC1pbml0LmMgKGRvX2ZyaWVuZCk6IERvbid0IGFsbG93IGEgZnJpZW5kIG9mIGEgY2xhc3MgdGhhdCdzIG5vdAorCXlldCBiZWVuIGRlZmluZWQ7IGluc3RlYWQsIGNvbXBsYWluLiAgTWFrZSBzdXJlIHdlIG1hcmsgZXZlcnkgZGVjbAorCXRoYXQgY29tZXMgaW4gYXMgYmVpbmcgYSBmcmllbmQgb2Ygc29tZXRoaW5nLgorCisJKiBjcC1kZWNsMi5jIChncm9rY2xhc3Nmbik6IE1hcmsgdGhlIF9faW5fY2hyZyBwYXJhbWV0ZXIgYXMKKwlhcnRpZmljaWFsLiAgRG9uJ3QgbWFyayBpdCBhcyByZWFkb25seSwgYW5kIGZvciBkZXN0cnVjdG9ycyBtYWtlCisJc3VyZSB0aGUgZmlyc3QgYXJnIGluIHRoZSBhcmdfdHlwZXMgY2hhaW4gaGFzIFRSRUVfU0lERV9FRkZFQ1RTIHNldCwKKwlzbyBpdCdzIHNlZW4gYXMgYXJ0aWZpY2lhbC4KKwkoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogRm9yIGR3YXJmIGRlYnVnZ2luZywgbWFrZSB0aGUgdnRhYmxlJ3MKKwlWQVJfREVDTCBub2RlIGJlIGlnbm9yZWQuICAKKworCSogY3AtZGVjbC5jIChyZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UpOiBVc2UgY29tcHR5cGVzIHRvIHNlZSBpZgorCU9MRERFQ0wgYW5kIE5FV0RFQ0wgaGF2ZSB0aGUgc2FtZSB0eXBlLgorCSogY3AtdHlwZWNrLmMgKGNvbXB0eXBlcyk6IENvbXBhcmUgdGhlIG1haW4gdmFyaWFudHMgb2YgdGhlIHR5cGVzLAorCWFmdGVyIHdlJ3ZlIGNoZWNrZWQgdGhlIHF1YWxpZmllcnMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gdXNlZCBvbiB0aGVtLgorCisJKiBjcC1jYWxsLmMgKEVWSUxfUkVUVVJOLCBRVUFMX1JFVFVSTiwgVFJJVklBTF9SRVRVUk4sIFpFUk9fUkVUVVJOKToKKwlSZXdyaXRlIGRlZmluaXRpb25zIHRvIG5vdCB1c2UgZG8vd2hpbGUoMCksIHRvIGF2b2lkIGJvZ3VzIHdhcm5pbmdzCisJb24gY29tcGlsZXJzIHRoYXQgY2FuJ3QgZGVhbCB3aXRoIGEgcmV0dXJuIGluc2lkZSBpdC4gIENoYW5nZSBhbGwKKwl1c2VzIG9mIHRoZW0gdG8gZG8gYHJldHVybiBGT09fUkVUVVJOJy4gCisKKwlUdWUgSnVsICA2IDEzOjAwOjQ0IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBTZXQgR0lWRV9FUlJPUiBzbyB3ZSBrbm93IHdoZXJlIHRoZQorCXByZXZpb3VzIGRlY2xhcmF0aW9uIHdhcyBmb3IgZW1wdHkgcGFyYW1ldGVyIG5hbWUgbGlzdCBkZWNsYXJhdGlvbnMuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBDbGVhbiB1cCBlcnJvciBtZXNzYWdlIGFib3V0IGFub255bW91cworCWNsYXNzZXMuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBwbGF5IHdpdGggVEFJTCB3aGVuIHdlJ3JlCisJZGVhbGluZyB3aXRoIGEgVFlQRV9ERUNMIG9mIGEgUkVDT1JEX1RZUEU7IHRoZSBsaXN0IGNvbnRpbnVlcyBvbgorCWp1c3QgZmluZSwgYW5kIFRBSUwgaXMgb25seSB1c2VkIGZvciBtYW5hZ2luZyBGTl9GSUVMRFMuCisKKwkqIGNwLWRlY2wuYyAocHVzaGxldmVsKTogQ2hhbmdlIGNhc3QgdG8gSE9TVF9XSURFX0lOVC4KKwkqIGNwLXNlYXJjaC5jIChicmVhZHRoX2ZpcnN0X3NlYXJjaCk6IExpa2V3aXNlLgorCisJRnJpIEp1bCAgMiAxOToyNDo1NSAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtbWV0aG9kLmM6IEluY2x1ZGUgImNwLWNsYXNzLmgiCisKKwlGcmkgSnVsICAyIDE4OjE2OjEwIDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AYmx1ZXMuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBEb24ndCBsb29rIGF0IGEgcmVxdWlyZWQKKwl0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGFuZCBhIHNwZWN1bGF0aXZlIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gYXMKKwl0d28gZGlmZmVyZW50IGZ1bmN0aW9ucyBpZiB0aGV5IGFyZSByZWFsbHkgdGhlIHNhbWUgZnVuY3Rpb24uCisKKwlUaHUgSnVsICAxIDIyOjI4OjQ2IDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AYmx1ZXMuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oOiBEb24ndCBpbmNsdWRlICJjcC1jbGFzcy5oIiBoZXJlLgorCSogY3AtY2FsbC5jLCBjcC1jdnQuYzogSW5jbHVkZSBpdCBoZXJlIGluc3RlYWQuCisKKwlUaHUgSnVsICAxIDE4OjQyOjAzIDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBGaXggdHlwby4gIChvbGRkZWNsLT5vbGRkZWNscykKKworCVRodSBKdWwgIDEgMTg6MzQ6MTIgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJTmV3IGltcGxlbWVudGF0aW9uIG9mIGFyZ3VtZW50IG1hdGNoaW5nLiAgVGhpcyBpcyBub3cgbXVjaCBjbGVhbmVyCisJdG8gcmVhZCwgYW5kIGlzIGRlc2lnbmVkIHN1Y2ggdGhhdCBpdCBzaG91bGQgYmUgZWFzeSB0byB0d2VhaworCXRoaW5ncyB3aGVuIGluY29ycmVjdCBkZWNpc2lvbnMgYXJlIG1hZGUgYmFzZWQgb24gdGhlIGNhbmRpZGF0ZXMKKwliZWluZyBleGFtaW5lZC4KKworCSogY3AtZGVjbDIuYyAoZmxhZ19hbnNpX292ZXJsb2FkaW5nKTogTmV3IHZhcmlhYmxlLgorCShsYW5nX2Zfb3B0aW9ucyk6IEFkZCAtZmFuc2ktb3ZlcmxvYWRpbmcuCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1mYW5zaS1vdmVybG9hZGluZyBhbmQKKwktZm5vLWFuc2ktb3ZlcmxvYWRpbmcuCisKKwkqIGNwLWNsYXNzLmggKGhhcnNobmVzc19jb2RlKTogTmV3IHN0cnVjdC4KKwkoY2FuZGlkYXRlKTogTmV3IG1lbWJlcnMgYGgnIGFuZCBgaF9sZW4nIHVzZWQgYnkgbmV3IG1ldGhvZC4gIE5ldworCWFub255bW91cyB1bmlvbiBgdicsIHdpdGggYW5zaV9oYXJzaG5lc3MgYW5kIG9sZF9oYXJzaG5lc3MuCisJRGVsZXRlZCBtZW1iZXIgYGhhcnNobmVzcycgKHVzZWQgYnkgb2xkIG1ldGhvZCwgbm93IGluIGB2JykuCisJQ2hhbmdlIGV2ZXJ5IGZpbGUgdGhhdCB1c2VzIGhhcnNobmVzcyB0byByZWZlciB0byBpdCBpbiB0aGUgdW5pb24KKwlhcyBhcHByb3ByaWF0ZS4KKwkoRVZJTF9DT0RFLCBDT05TVF9DT0RFLCBFTExJUFNJU19DT0RFLCBVU0VSX0NPREUsIFNURF9DT0RFLAorCVBST01PX0NPREUsIFFVQUxfQ09ERSwgVFJJVklBTF9DT0RFKTogTmV3IG1hY3Jvcy4KKworCSogY3AtY2FsbC5jIChFVklMX1JFVFVSTiwgUVVBTF9SRVRVUk4sIFRSSVZJQUxfUkVUVVJOLAorCVpFUk9fUkVUVVJOKTogTmV3IG1hY3Jvcy4KKwkocmFua19mb3Jfb3ZlcmxvYWQpOiBSZW5hbWVkIHRvIHJhbmtfZm9yX292ZXJsb2FkX29sZC4KKwkocmFua19mb3Jfb3ZlcmxvYWRfYW5zaSk6IE5ldyBmdW5jdGlvbiBmb3IgbmV3IG1ldGhvZC4KKwkocmFua19mb3Jfb3ZlcmxvYWQpOiBDYWxsIHRoZSBhcHByb3ByaWF0ZSBmbiBiYXNlZCBvbiB0aGUgbmV3IGZsYWcuCisJKHJhbmtfZm9yX2lkZWFsKTogTmV3IGZ1bmN0aW9uIGZvciBuZXcgbWV0aG9kLgorCShjb21wdXRlX2hhcnNobmVzcyk6IFJlbmFtZWQgdG8gY29tcHV0ZV9oYXJzaG5lc3Nfb2xkLgorCShjb21wdXRlX2hhcnNobmVzc19hbnNpKTogTmV3IGZ1bmN0aW9uIGZvciBuZXcgbWV0aG9kLgorCShjb21wdXRlX2NvbnZlcnNpb25fY29zdHMpOiBSZW5hbWVkIHRvIGNvbXB1dGVfY29udmVyc2lvbl9jb3N0c19vbGQuCisJKGNvbXB1dGVfY29udmVyc2lvbl9jb3N0c19hbnNpKTogTmV3IGZ1bmN0aW9uIGZvciBuZXcgbWV0aG9kLgorCShjb21wdXRlX2NvbnZlcnNpb25fY29zdHMpOiBDYWxsIHRoZSBhcHByb3ByaWF0ZSBmbiBiYXNlZCBvbiB0aGUKKwluZXcgZmxhZy4KKwkoaWRlYWxfY2FuZGlkYXRlKTogUmVuYW1lZCB0byBpZGVhbF9jYW5kaWRhdGVfb2xkLgorCShpZGVhbF9jYW5kaWRhdGVfYW5zaSk6IE5ldyBmdW5jdGlvbiBmb3IgbmV3IG1ldGhvZC4KKwkoaWRlYWxfY2FuZGlkYXRlKTogQ2FsbCB0aGUgYXBwcm9wcmlhdGUgZm4gYmFzZWQgb24gdGhlIG5ldyBmbGFnLgorCShzdHJpY3RseV9iZXR0ZXIpOiBOZXcgZnVuY3Rpb24gZm9yIG5ldyBtZXRob2QuCisJKGJ1aWxkX21ldGhvZF9jYWxsKTogQ2hhbmdlIHRoaW5ncyB0byB1c2UgdGhlIG5ldyBtZXRob2QgaWYKKwktZmFuc2ktb3ZlcmxvYWRpbmcgaXMgc2V0LgorCShidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBMaWtld2lzZS4KKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX2FnZ3IpOiBMaWtld2lzZS4KKworCSogY3AtY2FsbC5jIChidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBPbmx5IHVzZSB0aGUgc3BlZWQgaGFjaworCXRvIHRyaWdnZXIgaW1tZWRpYXRlbHkgaWYgdGhlIE9WRVJMT0FEX05BTUUgaGFzIGEgZ2xvYmFsIHZhbHVlIGlmIHdlCisJYXJlbid0IHVzaW5nIHRoZSBuZXcgb3ZlcmxvYWRpbmcgc2NoZW1lLgorCisJKiBjcC1jdnQuYyAoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogT25seSBhY2NlcHQgdXNpbmcgYW4gYG9wZXJhdG9yCisJZG91YmxlJyBpZiB0aGVyZSBpc24ndCBhIGNvbmZsaWN0aW5nIGBvcGVyYXRvciBpbnQnLCBpZgorCS1mYW5zaS1vdmVybG9hZGluZyBpcyBvbi4gCisKKwlUaHUgSnVsICAxIDE3OjU0OjQ0IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQcm9wYWdhdGUgc29tZSBjaGFuZ2VzIGZyb20gQworCWZyb250LWVuZC4gIENvbmZsaWN0cyB3aXRoIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgbm93IG9ubHkgd2FybmluZ3MuCisKKwlUaHUgSnVsICAxIDE1OjQzOjQ4IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogVXNlIHJlYWwgdHlwZSBpZiB0eXBlIGlzIGEKKwlSRUZFUkVOQ0VfVFlQRS4KKwkqIGNwLXBhcnNlLnkgKHByaW1hcnkpOiBDbGVhbnVwIGFuZCBtb3ZlIHNvbWUgY29kZSBvdXQgaW50byBuZXcKKwlmdW5jdGlvbiBidWlsZF9vYmplY3RfcmVmLgorCSogY3AtdHJlZS5oIChidWlsZF9vYmplY3RfcmVmKTogTmV3IGZ1bmN0aW9uLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX29iamVjdF9yZWYpOiBEZWZpbmUgbmV3IGZ1bmN0aW9uLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFJldHVybiBlcnJvcl9tYXJrX25vZGUgaWYKKwlmaXJzdCBhcmd1bWVudCBpcywgYW5kIGhhbmRsZSB3aGVuIFRSRUVfUFVSUE9TRSBpcyBhIGJpbmZvIGFuZCBjb21lcworCWZyb20gbG9va3VwX2ZuZmllbGRzLgorCisJVGh1IEp1bCAgMSAxMzo0ODo0NiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChyZWFkZXNjYXBlKTogRG9uJ3QgY29tcGxhaW4gZm9yIFwlIHVubGVzcyBwZWRhbnRpYy4KKworCVdlZCBKdW4gMzAgMTA6MzU6NTAgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChiYWRfc3BlY2lmaWVycyk6IE1vdmVkIHRvIGNwLWRlY2wuYy4gIE5ldyBhcmdzCisJYGlubGluZXAnIGFuZCBgb2JqZWN0JyAob2xkIG9iamVjdCByZW5hbWVkIHRvIHR5cGUpLCBzbyB3ZSBjYW4gc2VlCisJd2hlcmUgdGhlIHRoaW5nIHdhcyBkZWNsYXJlZC4gIFVzZSBlcnJvcl93aXRoX2RlY2wgaW5zdGVhZCBvZiBlcnJvci4KKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBQYXNzIElOTElORVAgYW5kIERFQ0wgZG93bjsgbW92ZSBjYWxscworCXNvIHdlJ2xsIGhhdmUgYSB2YWxpZCBERUNMIHRvIGdpdmUgaXQuCisJKiBjcC10cmVlLmggKGJhZF9zcGVjaWZpZXJzKTogRGVsZXRlZCBwcm90b3R5cGUuCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogSWYgaXQncyBhIHJlZmVyZW5jZSwgd29yaworCXdpdGggdGhlIGFjdHVhbCB0eXBlLgorCSogY3AtdHlwZTIuYyAoYnVpbGRfc2NvcGVkX3JlZik6IExpa2V3aXNlLgorCisJVHVlIEp1biAyOSAxOTo0OTo1NyAxOTkzICBNaWtlIFN0dW1wICAobXJzQHBvc2VpZG9uLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChkZWZhdWx0X2NvcHlfY29uc3RydWN0b3JfYm9keSk6IEhhY2sgYnJva2VuIGNvZGUgdG8gd29yaworCW1hcmdpbmFsbHkgYmV0dGVyIHRoYW4gaG93IGl0IHdvcmtlZCBiZWZvcmUsIHNvIHRoYXQgUGxvdEZpbGUzRCdzCisJbWFrZSBjaGVjayBvZiBsaWJnKysgd29ya3MuCisKKwlUdWUgSnVuIDI5IDEyOjQ0OjQ4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBEb24ndCBjb21wbGFpbiBhYm91dCB0YWtpbmcgdGhlCisJYWRkcmVzcyBvZiBhbiBvYmplY3Qgd2l0aCByZWdpc3RlciBzdG9yYWdlIGNsYXNzOyBpdCdzIGxlZ2FsIGluIEMrKy4gCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IE9ubHkgd2FybiBhYm91dCBwYXNzaW5nIGFuIG9iamVjdAorCXRocm91Z2ggYW4gZWxsaXBzaXMuCisKKwkqIGNwLXBhcnNlLnkgKHR5cGVkX2RlY2xzcGVjcyk6IE1ha2Ugc3VyZSB0aGUgVFlQRVNQRUMgd2UgaGl0CisJdXBvbiBpcyBub24tbnVsbC4KKworCVR1ZSBKdW4gMjkgMTE6NTg6MDMgMTk5MyAgVG9ueSBEZWlnaCAgKHRvbnlkQGJvc3RlY2guY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTG9vayBhdCB0aGUgZGVjbCBhcyBhIEZVTkNUSU9OX1RZUEUKKwliZWZvcmUgc2VlaW5nIGlmIGl0cyBUWVBFX01BSU5fVkFSSUFOVCBtYXRjaGVzIG9yIGl0J3MgYSBmcmllbmQ7CisJdGhpcyB3YXksIHdlIGNhbiBwcm9wZXJseSBkZXRlY3QgZGVjbGFyYXRpb24gb2YgYW5vdGhlciBjbGFzcydzCisJbWV0aG9kcyBpbnNpZGUgYW5vdGhlciBjbGFzcy4gIFNvbHZlcyBjaGFpbm9uIGFib3J0cy4KKworCVR1ZSBKdW4gMjkgMDk6NDc6MzYgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogVXNlIHBlZHdhcm5fd2l0aF9kZWNsIGZvciB3YXJuaW5ncworCWFib3V0IG5vbi1zdGF0aWMgY29uc3QvcmVmIGluIGNsYXNzIHdpdGhvdXQgYSBjdG9yLCBzbyB0aGUgbGluZQorCW51bWJlciBpcyBoZWxwZnVsLgorCisJVHVlIEp1biAyOSAwMjo0NjozOSAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBEZWxldGUgdW5uZWVkIGNhc3QuCisJKiBjcC10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgorCisJTW9uIEp1biAyOCAxOToxOTozNCAxOTkzICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IFVzZSBwZWR3YXJuIHRvIHdhcm4gYWJvdXQgdXNpbmcgY2F0Y2gsIHRyeQorCWFuZCB0aHJvdyBhcyBpZGVudGlmaWVycy4KKworCU1vbiBKdW4gMjggMTE6MTM6MTcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1tZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogT25seSBsb29rIGZvciB2aXNpYmlsaXR5IGlmIHdlIGhhdmUKKwlhIGJhc2V0eXBlIHBhdGguCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbHNvIGZvcmJpZCB0aGUgc3Vic2NyaXB0aW5nIG9wZXJhdG9yLAorCWFuZCBjbGFzcyBtZW1iZXIgYWNjZXNzIG9wZXJhdG9yIGJlaW5nIGRlY2xhcmVkIGFzIGEgbm9uLW1lbWJlcgorCWZ1bmN0aW9uLgorCisJKiBjcC1pbml0LmMgKGFkZF9mcmllbmQpOiBQZWR3YXJuIG9uIGR1cGxpY2F0ZSBmcmllbmQgZGVjbHMuCisKKwkqIGNwLWluaXQuYyAoaXNfZnJpZW5kX3R5cGUpOiBOZXcgZnVuY3Rpb24uCisJKGlzX2ZyaWVuZCk6IENhbGwgaXQ7IHJld3JpdGUgaW4gbWlub3Igd2F5cywgdG8gY2xlYW4gdGhlIGNvZGUgdXAuCisJKiBjcC10cmVlLmggKGlzX2ZyaWVuZF90eXBlKTogQWRkIHByb3RvdHlwZS4KKwkqIGNwLXNlYXJjaC5jIChjb21wdXRlX3Zpc2liaWxpdHkpOiBBbHNvIGNoZWNrIGlmIHRoZQorCUNVUlJFTlRfQ0xBU1NfVFlQRSBpcyBhIGZyaWVuZCBvZiBDT05URVhULCB3aGljaCBjYW4gYnV5IHVzIGFjY2VzcworCXRvIHRoZSBmaWVsZCBpbiBxdWVzdGlvbi4KKworCSogY3AtaW5pdC5jIChzb3J0X21lbWJlcl9pbml0KTogRGlzYWJsZSBhc3NlcnQgdGhhdCB3YXMgd3JvbmcuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBNYWtlIGRlY2xhcmF0aW9uIG9mIGEgbm9uLXN0YXRpYyBjb25zdAorCW9yIHJlZmVyZW5jZSBtZW1iZXIgZ2V0IGEgcGVkd2FybiBpZiB0aGUgY2xhc3MgaXQncyBpbiBoYXMgbm8KKwljb25zdHJ1Y3Rvci4KKworCSogY3AtZGVjbDIuYyAoZ3Jva2ZpZWxkKTogRml4IHVwIHRoZSBlcnJvciBtZXNzYWdlIGFib3V0IG1lbWJlcgorCWluaXRpYWxpemF0aW9uLgorCisJKiBjcC10eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogTWFrZSBzdXJlIHdlIGRvbid0IHNldAorCUNVUlJFTlRfRlVOQ1RJT05fUkVUVVJOU19WQUxVRSBpZiB3ZSBzZXQgQ1VSUkVOVF9GVU5DVElPTl9SRVRVUk5TX05VTEwuCisKKwkqIGNwLW1ldGhvZC5jIChkdW1wX2luaXQpOiBEb24ndCBlbWl0IGRpZ2l0X2J1ZmZlciBpZiB3ZSdyZSBnaXZpbmcKKwlhbiBlbnVtJ3MgdGFnLgorCitGcmkgSnVsICA5IDE2OjQ1OjI1IDE5OTMgIERhdmlkIGQgYHpvbycgWnVobiAgKHpvb0BjeWdudXMuY29tKQorCisJKiBjb25maWcuc3ViOiBNYWtlIC1zb2xhcmlzIHJlZmxlY3QgdGhlIG1vc3QgcmVjZW50IG1ham9yIHJlbGVhc2UuCisKK0ZyaSBKdWwgIDkgMTY6MTg6MjAgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIENoYW5nZSBsZW5ndGggYXR0cmlidXRlcyB0byB1c2UgYnl0ZXMgaW5zdGVhZCBvZiBpbnN0cnVjdGlvbgorCWNvdW50cy4KKwkqIHBhLmggKENBU0VfVkVDVE9SX01PREUpOiBDaGFuZ2UgdG8gREltb2RlLgorCSogcGEuYyAoY29tcHV0ZV9tb3ZzdHJzaV9sZW5ndGgpOiBSZXR1cm4gbGVuZ3RoIGluIGJ5dGVzLgorCShwYV9hZGp1c3RfaW5zbl9sZW5ndGgpOiBSZXR1cm4gYWRqdXN0bWVudCBpbiBieXRlcy4KKwkob3V0cHV0X2NicmFuY2gpOiBIYW5kbGUgbGVuZ3RocyBhcyBieXRlcy4KKwkob3V0cHV0X2JiLCBvdXRwdXRfZGJyYSwgb3V0cHV0X21vdmIpOiBMaWtld2lzZS4KKwkqIHBhLm1kIChkZWZhdWx0IGxlbmd0aCBkZWZpbmVfYXR0cik6IExlbmd0aHMgYXJlIGluIGJ5dGVzIG5vdy4KKwkoYXNtX2F0dHJpYnV0ZXMpOiBMaWtld2lzZS4KKwkoZGVsYXkgc2xvdCBhdHRyaWJ1dGVzKTogRGVhbCB3aXRoIGxlbmd0aHMgaW4gYnl0ZXMuCisJKGV4cGxpY2l0IGxlbmd0aCBjb21wdXRhdGlvbnMpOiBDb21wdXRlIGxlbmd0aCBpbiBieXRlcy4KKworCSogTWFrZSBtb3JlIGRicmEgaW5zbnMgYW5kIHN1cHBvcnQgbW92YiBpbnNucy4KKwkqIHBhLmggKG91dHB1dF9kYnJhLCBvdXRwdXRfbW92Yik6IERlY2xhcmUuCisJKiBwYS5tZCAoZGJyYSBwYXR0ZXJuKTogVXNlIG91dHB1dF9kYnJhLgorCShkYnJhIHBhdHRlcm4gIzIpOiBOZXcgcGF0dGVybi4gIEFsc28gdXNlIG91dHB1dF9kYnJhLgorCShtb3ZiLCBpbnZlcnRlZCBtb3ZiKTogTmV3IHBhdHRlcm5zLgorCSogcGEuYyAocGFfYWRqdXN0X2luc25fbGVuZ3RoKTogZGJyYSBhbmQgbW92YiBpbnNucyB3aGljaCBoYXZlCisJdGhlaXIgb3V0cHV0IGluIGEgRlAgcmVnaXN0ZXIgZG8gbm90IG5lZWQgYWRqdXN0bWVudC4KKwkob3V0cHV0X2NicmFuY2gsIG91dHB1dF9iYik6IEhhbmRsZSBjb25kaXRpb25hbCBqdW1wIHRvIHRoZQorCWZvbGxvd2luZyBpbnN0cnVjdGlvbi4KKwkob3V0cHV0X2RicmEpOiBOZXcgZnVuY3Rpb24gZXh0cmFjdGVkIGZyb20gZGJyYSBwYXR0ZXJuLgorCShvdXRwdXRfbW92Yik6IE5ldyBmdW5jdGlvbi4KKwkoZXFfbmVxX2NvbXBhcmlzb25fb3BlcmF0b3IpOiBOZXcgZnVuY3Rpb24uCisJKG1vdmJfY29tcGFyaXNvbl9vcGVyYXRvcik6IE5ldyBmdW5jdGlvbi4KKworRnJpIEp1bCAgOSAwMTowNzo1MiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrL21vdDMzMDAuaCAoQVNNX09VVFBVVF9PUENPREUpOiBEb24ndCBhZGQgLncgc3VmZml4CisJdG8ganVtcCBpbnNucy4KKworCSogY29tYmluZS5jLCBjc2UuYzogSW5jbHVkZSBzdGRpby5oIGJlZm9yZSBydGwuaC4KKworV2VkIEp1bCAgNyAxODowNjo0NSAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwlGcm9tIG1vc2hpZXJAd29ybGQuc3RkLmNvbToKKwkqIHNwYXJjLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogQ29udmVydCBTRm1vZGUgYnkgUkVBTF9WQUxVRS4uLiBtYWNyb3MuCisJKiBzcGFyYy5oIChBU01fT1VUUFVUX0ZMT0FULCBBU01fT1VUUFVUX0RPVUJMRSk6CisJVXNlIFJFQUxfVkFMVUVfVE9fREVDSU1BTCB0byBnZW5lcmF0ZSBkZWNpbWFsIHN0cmluZy4KKwkoUkVBTF9BUklUSE1FVElDKTogRGVmaW5lLgorCisJKiBzcGFyYy5oIChTRUNPTkRBUllfTUVNT1JZX05FRURFRF9SVFgpOiBVc2UKKwlTVEFSVElOR19GUkFNRV9PRkZTRVQuCisJKFNUQVJUSU5HX0ZSQU1FX09GRlNFVCk6IFNldCB0byAtMTYuCisKKwkqIGMtcGFyc2UuaW4gKHNpbXBsZV9pZik6IFNhdmUgc3RtdF9jb3VudCwgYW5kIHByaW50IGVtcHR5IGJvZHkKKwl3YXJuaW5nIGhlcmUuCisJKGlmX3ByZWZpeCk6IERvbid0IHNhdmUgc3RtdF9jb3VudCBoZXJlLgorCShzdG10KTogRG9uJ3QgcHJpbnQgZW1wdHkgYm9keSB3YXJuaW5nIGhlcmUuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbik6IEFkZCBwYXJlbnRoZXNlcyB0byBzYXRpZnkgZ2NjLgorCSogc3BhcmMuYyAoc3BhcmNfZnJ3X3NhdmVfcmVzdG9yZSk6IExpa2V3aXNlLgorCSogZXhwci5jIChjb252ZXJ0X3RvX21vZGUpOiBNb3ZlIG1pc3BsYWNlZCBwYXJlbnRoZXNlcy4KKworV2VkIEp1bCAgNyAxNjozNzoyNiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogSW1wcm92ZSBjb2RlIGZvciBjb25kaXRpb25hbCBicmFuY2hlcyBhbmQgZGJyYSBpbnNucyBvbiB0aGUgUEEuICAKKwkqIHBhLmMgKHBhX2FkanVzdF9pbnNuX2xlbmd0aCk6IFJld3JpdGUgc28gdGhhdCBpdCBvbmx5IGFkanVzdHMKKwlpbnNucyB3aGljaCByZWFsbHkgbmVlZCBhZGp1c3RtZW50LgorCShvdXRwdXRfY2JyYW5jaCk6IFJld29yayBzbyB0aGF0IG91dHB1dCB0ZW1wbGF0ZXMgYXJlIHNpbXBsZXIuICAKKwlVc2Ugc2hvcnRlciBzZXF1ZW5jZSBmb3IgbG9uZyBiYWNrd2FyZHMgY29uZGl0aW9uYWwgYnJhbmNoZXMgd2l0aAorCWEgZmlsbGVkIGRlbGF5IHNsb3QgdGhhdCBpcyBudWxsaWZpZWQuICBNb3JlIGFncmVzc2l2ZWx5IHVzZSAic2tpcCIKKwlpbnN0cnVjdGlvbnMuICBNb3JlIGFncmVzc2l2ZWx5IG51bGxpZnkgdGhlIGRlbGF5IHNsb3QgaWYgbm90aGluZworCXVzZWZ1bCBjb3VsZCBiZSBwbGFjZWQgdGhlcmUuCisJKG91dHB1dF9iYik6IExpa2V3aXNlLgorCShmb3J3YXJkX2JyYW5jaF9wKTogTmV3IGZ1bmN0aW9uLgorCSogcGEubWQgKGNvbmRpdGlvbmFsIGJyYW5jaGVzKTogVXNlIHRoZSBmdWxsIGRpc3BsYWNlbWVudCByYW5nZQorCWZvciB0aGUgYnJhbmNoIHRhcmdldC4gIFVwZGF0ZSBsZW5ndGggY29tcHV0YXRpb25zIHRvIG1hdGNoIGN1cnJlbnQKKwlyZWFsaXR5LgorCShicmFuY2ggb24gYml0IHBhdHRlcm5zKTogTGlrZXdpc2UuCisJKGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBSZS1lbmFibGUgcGF0dGVybi4gIFJld3JpdGUgdG8KKwliZSBzaW1wbGVyIGFuZCBtb3JlIGVmZmljaWVudC4gIEFsc28gaGFuZGxlIGNhc2Ugd2hlcmUgbG9vcCBjb3VudGVyCisJaXMgaW4gYSBGUCByZWdpc3Rlci4KKworV2VkIEp1bCAgNyAxMToxOTowMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGdsaW1pdHMuaCAoTUJfTEVOX01BWCk6IERvbid0IG92ZXJyaWRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBzeXN0ZW0KKwk8bGltaXRzLmg+LiAgSnVzdCBkZWZpbmUgaXQgaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZC4KKworCSogY29sbGVjdDIuYyAobWFpbik6IFNlYXJjaCBmb3IgbGQgaW4gdGhlIGNvbXBpbGVyIGRpcmVjdG9yaWVzLgorCitXZWQgSnVsICA3IDEzOjQwOjU1IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Aa3JvcG90a2luLmdudS5haS5taXQuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChmb3JrX2V4ZWN1dGUsIHNjYW5fcHJvZ19maWxlKTogVXNlICJmb3JrIiBpbiBlcnJvcgorCW1lc3NhZ2VzIGluc3RlYWQgb2YgInZmb3JrIiB3aGVuIHZmb3JrIGlzIGRlZmluZWQgdG8gZm9yay4KKworVHVlIEp1bCAgNiAxNjozODozNiAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmMgKHNwYXJjX3R5cGVfY29kZSk6IFJlY29nbml6ZSBTRVRfVFlQRS4gIEZvciBzcGVjaWFsCisJRm9ydHJhbi9QYXNjYWwgdHlwZXMsIGp1c3QgcmV0dXJuIHF1YWxpZmllcnMgaW5zdGVhZCBvZiBhYm9ydGluZy4KKworCSogYy1kZWNsLmMgKGluc2VydF9ibG9jayk6IENvcnJlY3QgdHlwbyBpbiBjb21tZW50LgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQsIExTSElGVFJUIGNhc2UpOiBNdXN0IGJlIGF0CisJbGVhc3QgYXMgbWFueSBzaWduIGJpdCBjb3BpZXMgYXMgYml0cyBpbiBtYXNrLgorCisJKiBjLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogIEFsbCBzaW1wbGlmaWVkIHJlc3VsdHMKKwltdXN0IGdvIHRocm91Z2ggcGVkYW50aWNfbm9uX2x2YWx1ZS4KKwkqIGNwLXR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIENPTkRfRVhQUiBjYXNlKTogTGlrZXdpc2UuCisJKHBlZGFudGljX25vbl9sdmFsdWUpOiBOZXcgZnVuY3Rpb24uCisJKiB0cmVlLmggKHBlZGFudGljX25vbl9sdmFsdWUpOiBBZGQgZGVjbGFyYXRpb24uCisKKwkqIGZvbGQtY29uc3QuYyAoaW52ZXJ0X3RydXRodmFsdWUpOiBDaGVjayBmb3IgRVJST1JfTUFSSyBpbnB1dC4KKworCSogbTY4ay5oIChMRUdJVElNQVRFX0JBU0VfUkVHX1ApOiBOZXcgbWFjcm8uCisJKElORElSRUNUQUJMRV8xX0FERFJFU1NfUCwgR09fSUZfSU5ERVhBQkxFX0JBU0UsCisJTEVHSVRJTUFURV9JTkRFWF9SRUdfUCk6IEFjY2VwdCBTVUJSRUcgZXZlcnl3aGVyZSBSRUcgaXMgYWNjZXB0ZWQuCisKKwkqIHNwYXJjLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBGb3IgJ1QnLCBwYXNzIGFkZHJlc3Mgbm90IG1lbSB0bworCXN0cmljdF9tZW1vcnlfYWRkcmVzc19wIGNhbGwuICBGb3IgJ1UnLCBkb24ndCBhY2NlcHQgdW5hbGxvY2F0ZWQKKwlwc2V1ZG8tcmVnIHdoZW4gc3RyaWN0LgorCisJKiBzcGFyYy5jIChvdXRwdXRfbW92ZV9xdWFkKTogSW1wbGVtZW50IENOU1RPUCBjYXNlLgorCisJKiBpOTYwLmggKEFTTV9PVVRQVVRfQ09NTU9OKTogVXNlIFNJWkUgbm90IFJPVU5ERUQuCisKK1R1ZSBKdWwgIDYgMDI6MTI6MTUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjc2UuYyAoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgY2FzZSBNSU5VUyk6IEZpeCBiYWNrd2FyZHMKKwl0ZXN0IGFkZGVkIGluIGxhc3QgY2hhbmdlLgorCisJKiBjb25maWcvaTM4Ni9zdW4uaCAoU0laRV9UWVBFKTogRGVsZXRlZC4KKworCSogYy10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBEb24ndCB3YXJuIGZvciAtV2NvbnZlcnNpb24KKwlhYm91dCBzaWduZWRuZXNzIG9mIGFuIGFyZyB0aGF0J3MgZXh0ZW5kZWQgZnJvbSBuYXJyb3dlciB1bnNpZ25lZCB0eXBlLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgd2FybiBmb3Igbm9uLWV4dGVybiB2YXIgZGVjbAorCWZvbGxvd2luZyBhbiBleHRlcm4gb25lIChmb3IgLVdyZWR1bmRhbnQtZGVjbHMpLgorCitNb24gSnVsICA1IDE3OjUwOjI3IDE5OTMgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBEb24ndCB1c2UgZ2VuX2xvd3BhcnRfY29tbW9uIHRvCisJZ2V0IHJlbG9hZCByZWdpc3RlciBpbnRvIHByb3BlciBtb2RlLgorCSogcmVsb2FkLmMgKHN1YnN0X3JlbG9hZHMpOiBMaWtld2lzZS4KKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBQTFVTKTogU2ltcGxpZnkgKHBsdXMgKGNvbXAgQSBCKSAtMSksIGV0Yy4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIEVRX0VYUFIsIExFX0VYUFIpOiBJZiBjb21wYXJpbmcgcmVzdWx0cworCW9mIHNpZ25lZCBNT0Qgd2l0aCB6ZXJvLCB1c2UgYW4gdW5zaWduZWQgTU9ELgorCisJKiBjYWxscy5jOiBGaXggdHlwbzogaGFkIEFSR1NfR1JPV19ET1dOQVJELgorCisJKiBjb25maWd1cmUgKHJzNjAwMC1pYm0tYWl4KTogVXNlIGRlZmF1bHQgZmlsZXMgZm9yIGFpeDMuMiBhbmQKKwlhaXgzMS5oIGZvciBhaXgzLlswMV0uICBBZGQgbmV3IGZpbGUgeC1haXgzMS4KKwkqIHJzNjAwMC5jIChpbnB1dF9vcGVyYW5kKTogRml4IG1pc3Npbmcgb3BlcmFuZCBvbiBhIHJldHVybi4KKwkocHJpbnRfb3BlcmFuZCk6IEFkZCBuZXcgY29kZSAnLicuCisJKHJzNjAwMF9zYV9zaXplKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBgaScuCisJKG91dHB1dF9wcm9sb2csIG91dHB1dF9lcGlsb2cpOiBVc2UgbmV3IFJTNjAwMF9DUk9SX0JJVF9OVU1CRVIuCisJKiByczYwMDAuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgX0FJWDMyLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FLCBURVhUX1NFQ1RJT05fQVNNX09QKTogVXNlICIudGV4dFtQUl0iIGFzCisJY3NlY3QgbmFtZS4KKwkoUlM2MDAwX0NST1JfQklUX05VTUJFUik6IE5ldyBtYWNyby4KKwkoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogQWxsb3cgYC4nIGFzIHZhbGlkLgorCSogcnM2MDAwLm1kIChjYWxsIHBhdHRlcm5zKTogVXNlICUuIGluIGNyb3IuCisJKiB4LXJzNjAwMCAoQ0xJQik6IE5vIGxvbmdlciBuZWVkIC1sbS4KKwkqIGFpeDMxLmgsIHgtYWl4MzEuaDogTmV3IGZpbGVzLgorCSogYWl4MzIuaDogRGVsZXRlZC4KKworTW9uIEp1bCAgNSAxNzo0NDowOSAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogcm9tcC5tZCAobW92aGkpOiBXaGVuIHN0b3JpbmcgYSBjb25zdGFudCBpbiBhbiBISW1vZGUgcmVnaXN0ZXIsIHVzZQorCWNhbDE2IGluc3RlYWQgb2YgY2FsIHNvIHRoYXQgdGhlIGhpZ2ggYml0cyBhcmUgY2xlYXIgKGNvbWJpbmUKKwlyZXF1aXJlcyB0aGlzKS4KKworTW9uIEp1bCAgNSAxNzoxNToyNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0LmMgKGVuY29kZV90eXBlX3F1YWxpZmllcnMpOiBBZGQgY2FzdHMgdG8gZW51bXMgaW4gaW5kaWNlcy4KKworTW9uIEp1bCAgNSAwMjoyNTo1NCAxOTkzICBEb3VnIEV2YW5zICAoZGplQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluOiBQYXJhbWV0ZXJpemUgbGliZ2NjLmEgYW5kIGluc3RhbGwtbGliZ2NjCisJKExJQkdDQyBhbmQgSU5TVEFMTF9MSUJHQ0MpLgorCisJKiB0cmVlLmMgKGdldF9uYXJyb3dlcik6IFByZXNlcnZlIHVuc2lnbmVkbmVzcyB3aGVuIGJpdHNjaGFuZ2UgPT0gMC4KKworU3VuIEp1bCAgNCAwMjo1NTo0NiAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGV4cG1lZC5jIChzdG9yZV9zcGxpdF9iaXRfZmllbGQsIGV4dHJhY3Rfc3BsaXRfYml0X2ZpZWxkKToKKwlIYW5kbGUgZmllbGRzIHNwbGl0IGFjcm9zcyBtb3JlIHRoYW4gMiBhbGlnbmVkIHVuaXRzLgorCisJKiBleHByLmMgKHN0b3JlX2ZpZWxkKTogVGVzdCBTVFJJQ1RfQUxJR05NRU5UIGF0IHJ1biB0aW1lLgorCShleHBhbmRfZXhwciwgQ09NUE9ORU5UX1JFRiBjYXNlKTogRmV0Y2ggdW5hbGlnbmVkIGZpZWxkIGFzIGJpdGZpZWxkLgorCisJKiBjb2xsZWN0Mi5jIChlcnJvciwgZmF0YWwsIGZhdGFsX3BlcnJvcik6IFNheSBjb2xsZWN0Miwgbm90IGNvbGxlY3QuCisKKwkqIGMtcGFyc2UuaW4gKHByaW1hcnkpOiBJbiBzdGF0ZW1lbnQgZXhwcmVzc2lvbiBjYXNlLAorCWlmIGNvbXBzdG10IHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBCTE9DSywKKwlyZXR1cm4gaXQgdW5jaGFuZ2VkLgorCitTYXQgSnVsICAzIDIwOjMyOjQzIDE5OTMgIE1pbmggVHJhbi1MZSAgKHRyYW5sZUBpbnRlbGxpY29ycC5jb20pCisKKwkqIGZpeGluYy5zdnI0OiBBZGRlZCBmaXh1cCBmb3IgX19TVERDX18gPT0gMCBhbmQgX19TVERDX18gPT0gMQorCWNhc2VzIGZvdW5kIGluIHNlcXVlbnQgUFRYLTIuMC54IGhlYWRlcnMuCisKK1NhdCBKdWwgIDMgMTg6NTQ6MDcgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKGNhbGxfb3BlcmFuZF9hZGRyZXNzKTogRG8gbm90IGFjY2VwdCByZWdpc3RlcnMgYW55bW9yZS4KKwkqIHBhLm1kIChjYWxsIGV4cGFuZGVycyk6IEVtaXQgZGlmZmVyZW50IHBhdHRlcm5zIGZvciBuYW1lZCBjYWxscworCWFuZCBpbmRpcmVjdCBjYWxscy4KKwkoY2FsbF9pbnRlcm5hbF9zeW1yZWYsIGNhbGxfaW50ZXJuYWxfcmVnKTogTmV3IHBhdHRlcm5zLiAKKwkoY2FsbF9pbnRlcm5hbCk6IERlbGV0ZWQuICBOb3cgaGFuZGxlZCBieSBjYWxsX2ludGVyYWxfe3N5bXJlZixyZWd9LgorCShjYWxsX3ZhbHVlX2ludGVybmFsX3N5bXJlZiwgY2FsbF92YWx1ZV9pbnRlcm5hbF9yZWcpOiBOZXcgcGF0dGVybnMuCisJKGNhbGxfdmFsdWVfaW50ZXJuYWwpOiBEZWxldGVkLiAgTm93IGhhbmRsZWQgYnkKKwljYWxsX3ZhbHVlX2ludGVybmFsX3tzeW1yZWYscmVnKS4KKworU2F0IEp1bCAgMyAxNjo0MDo1MiAxOTkzICBEb3VnIEV2YW5zICAoZGplQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBHaXZlIGxkX2ZpbGVfbmFtZSBhbiBpbml0aWFsIHZhbHVlLgorCitGcmkgSnVsICAyIDE2OjM2OjU2IDE5OTMgIEppbSBXaWxzb24gICh3aWxzb25Ad29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogc3BhcmMubWQgKGFzaGxkaTMrMik6IENoYW5nZSBsc2hpZnQgdG8gYXNoaWZ0LgorCisJKiBzcGFyYy5tZCAoemVyb19leHRlbmRoaXNpMiwgZXh0ZW5kaGlzaTIsIGV4dGVuZHFpaGkyLAorCWV4dGVuZHFpc2kyKTogUHJlc2VydmUgdGhlIFNVQlJFR19XT1JEIHZhbHVlIG9mIHN1YnJlZyBvcGVyYW5kcy4KKwkoYXNobGRpMyk6IERlbGV0ZSwgb2Jzb2xldGVkIGJ5IGxzaGxkaTMgcGF0dGVybi4KKwkobHNobGRpMyk6IFJlbmFtZSB0byBhc2hsZGkzIGZvciBjb25zaXN0ZW5jeSB3aXRoIFNJbW9kZSBzaGlmdHMuCisKK0ZyaSBKdWwgIDIgMDE6MTA6NTYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1oZWFkZXJzLXRhcik6IElnbm9yZSBleGl0IHN0YXR1cyBvZiB0aGUKKwlmaXJzdCB0YXIgY29tbWFuZC4KKworVGh1IEp1bCAgMSAxNDozMTo0NSAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQorCisJKiBmbG93LmMgKGZpbmRfYXV0b19pbmMpOiBJbiAqcD1leHByO3E9cCtzaXplIGNhc2UsIGF2b2lkIGNsb2JiZXJpbmcgcQorCWlmIHJlZmVyZW5jZWQgaW4gZXhwci4KKworRnJpIEp1bCAgMiAwMToyNjowMSAxOTkzICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogdHJlZS5oIChwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBBZGQgYSBuZXcgY29udmVydGVyCisJZnVuY3Rpb24gYXJndW1lbnQgdGhhdCBzcGVjaWZpZXMgaG93IHRvIGNvbnZlcnQgY2FzZSBsYWJlbHMgdG8gdGhlCisJbm9taW5hbCB0eXBlLgorCSogc3RtdC5jIChwdXNoY2FzZSwgcHVzaGNhc2VfcmFuZ2UpOiBMaWtld2lzZS4KKwkqIGMtcGFyc2UuaW4gKGxhYmVsKTogVXNlIGBjb252ZXJ0X2FuZF9jaGVjaycgd2hlbiBjaGVja2luZyBmb3IKKwlvdmVyZmxvdyBpbiBjYXNlIGxhYmVscy4KKwkqIGNwLXBhcnNlLnkgKHNpbXBsZS1zdG10KTogU2ltaWxhciBjaGFuZ2UsIGJ1dCB1c2UgYGNvbnZlcnQnIGluc3RlYWQ7CisJdGhpcyBsZWF2ZXMgdGhlIGJlaGF2aW9yIHVuY2hhbmdlZCBmb3IgQysrLiAgQSBDKysgZXhwZXJ0IHNob3VsZCBsb29rCisJaW50byB0aGlzLgorCisJKiB0cmVlLmggKFRSRUVfT1ZFUkZMT1cpOiBOZXcgbWFjcm8uCisJKiBjLWNvbW1vbi5jIChjb25zdGFudF9leHByZXNzaW9uX3dhcm5pbmcsIG92ZXJmbG93X3dhcm5pbmcsCisJY29udmVydF9hbmRfY2hlY2spOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIFRSRUVfT1ZFUkZMT1csIHdoaWNoIGlzIGp1c3QKKwlmb3Igd2FybmluZ3MsIGFuZCBUUkVFX0NPTlNUQU5UX09WRVJGTE9XLCB3aGljaCBpcyBmb3IgcmVxdWlyZWQKKwlwZWRhbnRpYyBkaWFnbm9zdGljcy4KKwkqIGMtdHlwZWNrLmMgKGNfc2l6ZW9mLCBidWlsZF9jX2Nhc3QpOiBTZXQgVFJFRV9PVkVSRkxPVyBpbiBhZGRpdGlvbgorCXRvIFRSRUVfQ09OU1RBTlRfT1ZFUkZMT1cuCisJKHN0b3JlX2luaXRfdmFsdWUpOiBTVFJJUF9UWVBFX05PUFMgaXMgcmVxdWlyZWQgYmVmb3JlCisJY29uc3RhbnRfZXhwcmVzc2lvbl93YXJuaW5nLgorCSogZm9sZC1jb25zdC5jOiAoY29uc3RfYmlub3AsIGZvbGRfY29udmVydCwgZm9sZCk6CisJU2V0IFRSRUVfT1ZFUkZMT1cgaW4gYWRkaXRpb24gdG8gVFJFRV9DT05TVEFOVF9PVkVSRkxPVy4KKworVGh1IEp1bCAgMSAyMDo1NToyNyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBGaXggdHlwbyBpbiBCWVRFX0xPQURTX1pFUk9fRVhURU5ELgorCitUaHUgSnVsICAxIDIwOjAwOjAwIDE5OTMgREogRGVsb3JpZSAoZGpAY3Ryb24uY29tKQorCisJKiBnY2MuYyAoY2hvb3NlX3RlbXBfYmFzZSk6IFRyeSBtdWx0aXBsZSB2YXJpYWJsZXMuICBEb24ndAorCWFzc3VtZSB0aGF0IHRoZSB2YXJpYWJsZSBwb2ludHMgdG8gYSB2YWxpZCBkaXJlY3RvcnkuCisKKwkqIGdjYy5jIChwZXhlY3V0ZSk6IEhhbmRsZSB0aGUgTVMtRE9TIHJldHVybiBjb2RlcyBjb3JyZWN0bHkuCisJQWRkIC5leGUgdG8gZmlsZSBuYW1lIHdoZW4gYXBwcm9wcmlhdGUuCisKKwkqIGNvbmZpZ3VyZS5iYXQ6IE1ha2UgZ2NjIHVzZSBpdHMgb3duIG9ic3RhY2suby4KKworCSogb2JqYy9tYWtlZmlsZS5kb3M6IE5ldyBmaWxlIGZvciBidWlsZGluZyB3aXRoIGRqZ3BwLgorCitUaHUgSnVsICAxIDE4OjE1OjE3IDE5OTMgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBmaXhpbmNsdWRlcywgZml4aW5jLnN2cjQ6IERvbid0IGNyZWF0ZSBhYnNvbHV0ZSBzeW1ib2xpYyBsaW5rczsKKwltYWtlIHRoZW0gcmVsYXRpdmUgaW5zdGVhZC4KKwkqIGZpeGluY2x1ZGVzOiBSZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBJUklYIDQuMC4xIHRoYXQgd2FzCisJc3VwZXJzZWRlZCBieSBhIG1vcmUgZ2VuZXJhbCBmaXggdG8gZml4aW5jbHVkZXMuCisKKwkqIGZpeGluYy5zdnI0OiBSZW1vdmUgZXZlcnl0aGluZyBhZnRlciAjZW5kaWYsIGluc3RlYWQgb2YgdHJ5aW5nCisgICAgICAgIHRvIHR1cm4gaXQgaW50byBjb21tZW50cywgd2hpY2ggbG9zZXMgaW5zaWRlIGNvbW1lbnRzLgorICAgICAgICAqIGZpeGluY2x1ZGVzOiBMaWtld2lzZS4gIFJlbW92ZSAjZW5kaWYgd29ya2Fyb3VuZHMgZm9yIFVsdHJpeCA0LlsxMl0KKyAgICAgICAgYW5kIFN1bk9TIDQuMSwgd2hpY2ggYXJlIG5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSBvZiB0aGlzIGJ1ZyBmaXguCisKK1RodSBKdWwgIDEgMTQ6NTY6NTYgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKE9WRVJSSURFX09QVElPTlMpOiBEZWZpbmUuICBHaXZlIGEgd2FybmluZyBpZiAtZnBpYyBvciAKKwktZlBJQyB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKwkqIGNvbmZpZ3VyZSAoaHBwYTEuMC1ocC1ocHV4OC4wMik6IE5ldyB0YXJnZXQuCisJKGhwcGExLjEtaHAtaHB1eDguMDIpOiBBY2NlcHQgIi0tZ2FzIiBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCisJKiBwYS1vbGRhcy5oOiBOZXcgdGFyZ2V0IGZvciAxLjAgbWFjaGluZXMgcnVubmluZyBIUFVYIDguMDIuCisJKiBwYS5jIChvdXRwdXRfYXJnX2Rlc2NyaXB0b3IpOiBSZXZlcnNlIHBvbGFyaXR5IG9mIHRlc3QgZm9yCisJSFBfRlBfQVJHX0RFU0NSSVBUT1JfUkVWRVJTRUQuCisJKiBwYS5oIChBU01fRE9VQkxFX0FSR19ERVNDUklQVE9SUyk6IExpa2V3aXNlLgorCSogcGEtaHB1eDcuaCAoSFBfRlBfQVJHX0RFU0NSSVBUT1JfUkVWRVJTRUQpOiBEZWZpbmUuCisJKiBwYTEtb2xkYXMuaCAoSFBfRlBfQVJHX0RFU0NSSVBUT1JfUkVWRVJTRUQpOiBEZWZpbmUuCisJKFRBUkdFVF9ERUZBVUxUKTogQ2xlYXIgdXNlbGVzcyBiaXRzIGluIFRBUkdFVF9ERUZBVUxULgorCSogcGEtdXRhaG1hY2guaCAoSFBfRlBfQVJHX0RFU0NSSVBUT1JfUkVWRVJTRUQpOiBEbyBub3QgZGVmaW5lIGhlcmUuCisJKiBwYTEtdXRhaG1hY2guaCAoSFBfRlBfQVJHX0RFU0NSSVBUT1JfUkVWRVJTRUQpOiBMaWtld2lzZS4KKwkqIHBhMS1naHB1eC5oIChIUF9GUF9BUkdfREVTQ1JJUFRPUl9SRVZFUlNFRCk6IExpa2V3aXNlLgorCSogcGExLWhwdXguaCAoSFBfRlBfQVJHX0RFU0NSSVBUT1JfUkVWRVJTRUQpOiBMaWtld2lzZS4KKworVGh1IEp1bCAgMSAwOTo0ODoyMyAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgR0VfRVhQUiwgTFRfRVhQUik6IERvbid0IGFzc3VtZSAKKwlyZXN1bHQgb2YgY29tcGFyaXNvbiBpcyBpbnRlZ2VyX3R5cGVfbm9kZS4KKworVGh1IEp1bCAgMSAwMDoyMzoxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvaTM4Ni9tYWNoLmggKFNJWkVfVFlQRSk6IERlZmluaXRpb24gZGVsZXRlZC4KKworV2VkIEp1biAzMCAxNjoxNjoyMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9tNjhrL3N1bjMuaCAoU0laRV9UWVBFKTogRGVmaW5pdGlvbiBkZWxldGVkLgorCitXZWQgSnVuIDMwIDE2OjU1OjI1IDE5OTMgIEpvaG4gRiBDYXJyICAoamZjQEF0aGVuYS5taXQuZWR1KQorCisJKiBtaXBzLmMgKGdlbl9pbnRfcmVsYXRpb25hbCk6IEZvciB0ZXN0IHdpdGggY29uc3RhbnQgcmVzdWx0LAorCWNvcHkgY29uc3QwX3J0eCBvciBjb25zdF90cnVlX3J0eCB0byByZXN1bHQgcmVnaXN0ZXIgaW5zdGVhZAorCW9mIGFsbG9jYXRpbmcgYSBuZXcgcHNldWRvLXJlZ2lzdGVyLgorCitXZWQgSnVuIDMwIDE1OjE5OjQyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSBgZ251JyBhcyBhIHZhbGlkIG9wZXJhdGluZyBzeXN0ZW0uICBTaGVlc2guCisKK1dlZCBKdW4gMzAgMTM6NDM6NDUgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IEVtaXQgU0FWRV9TUCBmbGFnIGlmIGEgZnJhbWUKKwlwb2ludGVyIGlzIG5lZWRlZC4KKworV2VkIEp1biAzMCAwMDo1MjoyNSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBEb24ndCBsb29rIGZvciBgZ2xkJyBvciBgVEFSR0VULWdsZCcuCisKKwkqIGZpeGluY2x1ZGVzIChzdGR0eXBlcy5oKTogVmVyaWZ5IHRoYXQgc2l6ZV90IGV0Yy4gZm9sbG93IHdoaXRlc3BhY2UuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgUExVU19FWFBSKTogSW4gdGhlIHNwZWNpYWwgY2FzZQorCXRvIHJldHVybiBzeW0raW50ZWdlciBhcyBhbiBleHByZXNzaW9uLCBsaW1pdCBpdCB0byB3aGVuCisJdGhlIG5vbi1DT05TVF9JTlQgYXJnIGlzIGF0IGxlYXN0IGEgY29uc3RhbnQuCisJKGV4cGFuZF9pbmNyZW1lbnQpOiBEbyBwcmVpbmMgd2l0aCBzaW5nbGUgaW5zbiBpZiB0aGVyZSdzIHN1Y2ggYW4gaW5zbi4KKworCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBQYXNzIDEgYXMgVU5TSUdORURQIHRvIGVtaXRfY21wX2luc24KKwl3aGVuIGhhbmRsaW5nIHdpZGUgdmFsdWVzLgorCVNhdmUgb3JpZ2luYWwgbWludmFsIGluIG9yaWdfbWludmFsIGFuZCB1c2UgZm9yIG1ha2luZyB0aGUgdGFibGUuCisKK1R1ZSBKdW4gMjkgMjI6Mjg6MDYgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKHNpbmdsZW1vdmVfc3RyaW5nKTogVXNlIHpkZXBpIGFuZCBsZGlsIHRvIGxvYWQgY29uc3RhbnRzCisJaW50byByZWdpc3RlcnMgd2hlbiBhcHByb3ByaWF0ZS4KKworVHVlIEp1biAyOSAxMToyNjozNSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSAtc3lzdiogYWZ0ZXIgLXN5c3ZyNC4KKworCSogY29uZmlnL3ZheC92YXguaCAoR09fSUZfTk9OSU5ERVhFRF9BRERSRVNTKTogRGVjbGFyZSByZWdfZXF1aXZfbWVtLgorCitNb24gSnVuIDI4IDIwOjEyOjA0IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQGFwcGxlLWd1bmtpZXMuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy9zaC8qOiAgTWFqb3IgcmV3b3JrLgorCitNb24gSnVuIDI4IDAyOjQ2OjQ3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXMgKGZpbGUpOiBXaGVuIGNoYW5naW5nIFZBX0xJU1QgdG8gRFVNTVlfVkFfTElTVCwKKwlwcmVzZXJ2ZSBfTkVFRF9fX1ZBX0xJU1QuCisKKwkqIGNvbmZpZy9uczMyay9uczMyay5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiAKKwlIYW5kbGUgcmVnW24sbisxXSA9IG1lbVtyZWdbbl0gKyByZWdbbisxXV0uCisJKiBjb25maWcvbnMzMmsvbnMzMmsubWQgKG1vdmRmLCBtb3ZkaSk6IERlbGV0ZSBgJicgZnJvbSBjb25zdHJhaW50LgorCisJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAob3V0cHV0X21vdmVfZG91YmxlKTogVXNlIG5ldyBsb2NhbCB2YXIKKwloaWdoZXN0X2ZpcnN0IHRvIG1ha2Ugc3VyZSBhZGRyZWcxIGdldHMgaGFuZGxlZCBpbiB0aGUgb3ZlcmxhcCBjYXNlLgorCUluIDItcmVnLW92ZXJsYXAgY2FzZSwgcmVhbGx5IHVzZSBwcm9wZXIgcmVnIGluIG5ldyBhZGRyZXNzLgorCisJKiBjb25maWcvaTg2MC9pODYwLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IAorCUhhbmRsZSByZWdbbixuKzFdID0gbWVtW3JlZ1tuXSArIHJlZ1tuKzFdXS4gIFVzZSBuZXcgbG9jYWwgdmFyCisJaGlnaGVzdF9maXJzdCB0byBtYWtlIHN1cmUgYWRkcmVnMSBnZXRzIGhhbmRsZWQgaW4gdGhlIG92ZXJsYXAgY2FzZS4KKwkqIGNvbmZpZy9pODYwL2k4NjAubWQgKG1vdmRmLCBtb3ZkaSk6IERlbGV0ZSBgJicgZnJvbSBsb2FkIGNvbnN0cmFpbnQuCisKKwkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKENQUF9TUEVDKTogRm9yIC1jb21wYXQtYnNkLCBwdXQgdGhlIHVjYmluY2x1ZGUKKwlkaXJzIGJlZm9yZSwgbm90IGFmdGVyLgorCisJKiBleHByLmMgKHN0b3JlX2ZpZWxkKTogU3RvcmUgdW5hbGlnbmVkIGZpZWxkIHdpdGggYml0IGZpZWxkIG1ldGhvZHMuCisKKwkqIGNvbmZpZy92YXgvdmF4LmggKEdPX0lGX05PTklOREVYRURfQUREUkVTUyk6IElmIHJlbG9hZF9pbl9wcm9ncmVzcywKKwljaGVjayBhIFJFRydzIHJlZ19lcXVpdl9tZW0gdGhlIHdheSB3ZSB3b3VsZCBjaGVjayBhIE1FTS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogQmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaW5uZXIKKwlhZGRyZXNzZXMgdG8gYWxsb3cgaW4gYW4gaW5kaXJlY3QgbWVtIHJlZi4KKworU3VuIEp1biAyNyAxNjo0MDo1OSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGNvcHlfcnR4X2lmX3NoYXJlZCk6IERvbid0IHRyeSB0byBjb3B5IGEgMC1sZW5ndGggdmVjdG9yLgorCisJKiBjb25maWcvbTY4ay94LWFwb2xsbzY4IChUQVJPVVRPUFRTKTogTmV3IGRlZmluaXRpb24uCisKKwkqIGNvbmZpZy5zdWI6IENhbm9uaWNhbGl6ZSAtc2NvNCBhbmQgLXNjbzMuMi40IHRvIC1zY28zLjJ2NC4KKworCSogZ2NjLmMgKERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKTogQ2hlY2sgZm9yIC1pd2l0aHByZWZpeGJlZm9yZS4KKwkob3B0aW9uX21hcCk6IEFkZCAtLWluY2x1ZGUtd2l0aC1wcmVmaXgtYmVmb3JlIGFuZAorCS0taW5jbHVkZS13aXRoLXByZWZpeC1hZnRlci4KKworU3VuIEp1biAyNyAxNjowNDo1MiAxOTkzICBIb2xnZXIgVGV1dHNjaCAgKGhvbGdlckBob3Ric28ucmhlaW4tbWFpbi5kZSkKKworCSogdmEtY2xpcHBlci5oOiBVc2UgYW5kIGRlZmluZSBNYWNybyBfX0dOVUNfVkFfTElTVC4gRGVmaW5lIHN0cnVjdAorCV9fZ251Y192YV9saXN0LgorIAorU3VuIEp1biAyNyAwODozMjoxOSAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtYWNobW9kZS5oIChJTlRFR1JBTF9NT0RFX1AsIEZMT0FUX01PREVfUCk6IE5ldyBtYWNyb3MuCisJKiBjc2UuYyAoc2ltcGxpZnlfKl9vcGVyYXRpb24sIGZvbGRfcnR4LCByZWNvcmRfanVtcF9jb25kLCBjc2VfaW5zbik6CisJVXNlIHRoZW0uCisJKiBjb21iaW5lLmMgKHN1YnN0LCBhcHBseV9kaXN0cmlidXRpdmVfbGF3KTogTGlrZXdpc2UuCisJKHJldmVyc2libGVfY29tcGFyaXNvbl9wKTogTGlrZXdpc2UuCisJQ2FuIHJldmVyc2UgaWYgTU9ERV9DT01QTEVYX0lOVCBvciBNT0RFX1BBUlRJQUxfSU5ULgorCisJKiBmdW5jdGlvbi5jIChmaXh1cF9zdGFja18xKTogSGFuZGxlCisJY3VycmVudF9mdW5jdGlvbl9pbnRlcm5hbF9hcmdfcG9pbnRlci4gCisKKwkqIHN0b3ItbGF5b3V0LmM6IEFkZCBwcm90b3R5cGVzIGZvciBsYXlvdXRfcmVjb3JkIGFuZCBsYXlvdXRfdW5pb24uCisJKHNtYWxsZXN0X21vZGVfZm9yX3NpemUpOiBOZXcgZnVuY3Rpb24uCisJKHZhcmlhYmxlX3NpemUpOiBBbGxvdyB2YXJpYWJsZSBzaXplcyBpZiBnbG9iYWxfYmluZGluZ3NfcCByZXR1cm5zIGEKKwluZWdhdGl2ZSB2YWx1ZS4KKwkobW9kZV9mb3Jfc2l6ZSk6IEZpeCBpbmNvcnJlY3QgY29tbWVudC4KKwkobGF5b3V0X2RlY2wpOiBJZiBERUNMIGhhcyBhIHNpemUgYWxyZWFkeSwgZG9uJ3QgY29weSBmcm9tIHR5cGUuCisJKGxheW91dF90eXBlLCBjYXNlIElOVEVHRVJfVFlQRSwgRU5VTUVSQUxfVFlQRSk6IFVzZSBzbWFsbGVzdAorCWludGVnZXIgbW9kZSB0aGF0IGZpdHMsIHdoZXRoZXIgb3Igbm90IGl0IGZpdHMgZXhhY3RseS4KKwkKKwkqIGVtaXQtcnRsLmMgKHJlc3RvcmVfZW1pdF9zdGF0dXMpOiBDbGVhciBMQVNUX0xBQkVMX05VTS4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJZiBmdW5jdGlvbiBoYXNuJ3QgYmVlbiB1c2VkIGJlZm9yZSwKKwljYWxsIGFzc2VtYmxlX2V4dGVybmFsLgorCisJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogVHJlYXQgUVVBTF9VTklPTl9UWVBFIGp1c3QKKwlsaWtlIFVOSU9OX1RZUEUuCisJKHNhZmVfZnJvbV9wLCBjYXNlIEFERFJfRVhQUik6IEVYUCBpcyBzYWZlIGZyb20gWCBpdCBpcyBpcyBzdGF0aWMgb3IKKwlpZiB0aGUgb2JqZWN0IHdob3NlIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4gaXMgc2FmZSBmcm9tIFguCisJKGV4cGFuZF9leHByKTogRml4IG1pc3BsYWNlZCBjb21tZW50IGZyb20gbGFzdCBjaGFuZ2UuCisJKGV4cGFuZF9leHByLCBjYXNlICpfREVDTCk6IElmIG5vdCBhbHJlYWR5IHVzZWQsIGFzc2VtYmxlIGV4dGVybmFsLgorCShleHBhbmRfZXhwciwgY2FzZSBFWElUX0VYUFIpOiBTaW1wbGlmeS4KKwkoZXhwYW5kX2V4cHIsIFRSVVRIX3tBTkQsT1J9SUZfRVhQUik6IFByb3Blcmx5IGhhbmRsZSBJR05PUkUgY2FzZS4KKworCSogdHJlZS5jIChhcnJheV90eXBlX25lbHRzKTogVGlnaHRlbiB1cCBjb2RlIGFuZCBtYWtlIG1vcmUgZ2VuZXJhbC4KKwkoYnVpbGRfZnVuY3Rpb25fdHlwZSk6IEFsbG93IGZ1bmN0aW9uIHRvIHJldHVybiBhcnJheS4KKwkoZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogVHJlYXQgUVVBTF9VTklPTl9UWVBFIGxpa2UgVU5JT05fVFlQRS4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIFRSVVRIX1hPUl9FWFBSKTogRW5kIHdpdGggYHJldHVybicsCisJbm90IGBicmVhaycuCisKKwkqIGR3YXJmb3V0LmMgKG91dHB1dF9jb21waWxlX3VuaXRfZGllKTogQWRkIHN1cHBvcnQgZm9yIEFkYS4KKworCSogYy1pdGVyYXRlLmMgKGNvbGxlY3RfaXRlcmF0b3JzLCBjYXNlIFNBVkVfRVhQUik6IFNpbXBsaWZ5IGNvZGUKKwlhZGRlZCBpbiBwcmV2aW91cyBjaGFuZ2UuCisKKwkqIGV4cHIuYzogRml4IHR5cG86IHdhcyBBUkdTX0dST1dfRE9XTkFSRC4KKworCSogY29tYmluZS5jIChzdWJzdCwgY2FzZSBJRl9USEVOX0VMU0UpOiBJbnN0YWxsIGNvcnJlY3QgdmVyc2lvbiBvZgorCWxhc3QgY2hhbmdlLgorCitTYXQgSnVuIDI2IDE1OjM4OjMzIDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2NjcC5jIChtYWluKTogRm9yIC1pd2l0aHByZWZpeCwgaWYgbm8gaW5jbHVkZV9wcmVmaXgsCisJbWFrZSBhIGRlZmF1bHQgZnJvbSBHQ0NfSU5DTFVERV9ESVIuCisJU3VwcG9ydCAtaXdpdGhwcmVmaXhiZWZvcmUuCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBXaGVuIG1lcmdpbmcgcmVsb2FkcyBhZ2FpbiBhZnRlciB0aGV5IGhhdmUKKwliZWVuIGNoYW5nZWQsIGRvIGNoZWNrIHJlbG9hZF9yZWdfY2xhc3MgYW5kIHJlbG9hZF9ub2NvbWJpbmUuCisKKwkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGYgcmVjb2duaXplcik6IFJlbW92ZSAmIGZyb20KKwljb25zdHJhaW50IGZvciBsb2FkaW5nIG1lbSB0byBjcHUgcmVnLgorCisJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogSWYgRlJPTSBpcyBzY2FsYXIgZnVuY3Rpb24gY2FsbCwKKwlleHBhbmRfZXhwciBGUk9NIGJlZm9yZSBUTy4KKworCSogZ2NjLmMgKHRyYW5zbGF0ZV9vcHRpb25zKTogYConIGluaGliaXRzIHdhcm5pbmcgb2YgZXh0cmFuZW91cyBhcmcuCisKK1NhdCBKdW4gMjYgMTE6MDc6MjMgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBVc2UgcmVnX2VxdWl2X2FkZHJlc3MgZm9yIGludmFsaWQgYWRkcmVzc2VzCisJb2YgdGhlIGZvcm0gKG1lbSAocmVnKSkuCisKKwkqIGNvbmZpZy8qL3htLSouaDogUmVtb3ZlIGxpbmUgdGhhdCAjZGVmaW5lJ3MgYWxsb2NhCisJdG8gX19idWlsdGluX2FsbG9jYS4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIFBMVVNfRVhQUiwgTUlOVVNfRVhQUik6IEFwcGx5CisJZGlzdHJpYnV0aXZlIGxhdyB0byBtdWx0aXBsaWNhdGlvbi4KKwkoZm9sZCwgY2FzZSAqX0RJVl9FWFBSKTogUmVwbGFjZSBjb2RlIHRvIGhhbmRsZSAoQSpDMSkvQzIgd2l0aAorCW1vcmUgZ2VuZXJhbCBjb2RlIHRvIGhhbmRsZSBhZGRpdGlvbiBhcyB3ZWxsLgorCShmb2xkLCBjYXNlICpfTU9EX0VYUFIpOiBBZGQgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGFib3ZlIGNvZGUuCisKKwkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBDYW4gbm93IGlubGluZSBuZXN0ZWQKKwlmdW5jdGlvbnMuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBTZXQgdXAgc3RhdGljIGNoYWluIGlmIG5lZWRlZC4KKwkob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IERvbid0IHN3aXRjaCB0byB0ZW1wb3JhcnkgYWxsb2NhdGlvbgorCWhlcmUuCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogU3dpdGNoIHRvIHRlbXBvcmFyeSBhbGxvY2F0aW9uIHdoZW4KKwl3cml0aW5nIG91dCBpbmxpbmUgZnVuY3Rpb24uCisJKiBjcC1kZWNsMi5jICh3cml0ZV92dGFibGVfZW50cmllcywgZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KKwkqIGMtZGVjbC5jLCBjcC1kZWNsLmMgKHBvcGxldmVsKTogU3RhcnQgbmV3IGZ1bmN0aW9uIGNvbnRleHQKKwl3aGVuIHdyaXRpbmcgaW5saW5lIGZ1bmN0aW9uLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBXaGVuIG1ha2luZyBTSVpFVFlQRSwKKwlzdGFydCB3aXRoIG5hbWUgaW4gU0laRV9UWVBFLiAgSWYgLXRyYWRpdGlvbmFsLCB1c2UgYQorCXNpZ25lZCB2ZXJzaW9uIG9mIHRoYXQgdHlwZSwgaWYgaXQgaXMgdW5zaWduZWQuCisKKwkqIGZvbGQtY29uc3QuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKHtsLHJ9e3NoaWZ0LHJvdGF0ZX1fZG91YmxlKTogQ09VTlQgYXJnIGlzIEhPU1RfV0lERV9JTlQsIFBSRUMgaXMgaW50LgorCShhbGxfb25lc19tYXNrKTogUmVtb3ZlIF9faW5saW5lX18uCisJKHJhbmdlX3Rlc3QpOiBNYWtlIHN0YXRpYzsgbm90IHVzZWQgZWxzZXdoZXJlLgorCSogdHJlZS5oOiBBZGQgbW9yZSBkZWNscyBmb3IgZnVuY3Rpb25zIGluIGZvbGQtY29uc3QuYy4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGxzKTogRml4IHR5cG86IEFMTE9DQVRFX09VVEdPSU5HX0FSR1MKKwlzaG91bGQgYmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTLgorCisJKiB0cmVlLmRlZiAoVFJVVEhfe0FORCxPUixYT1J9X0VYUFIpOiBNYWtlIGNvZGUgY2xhc3MgYmUgJ2UnIGxpa2UKKwl0aGUgcmVzdCBvZiB0aGUgdHJ1dGggb3BlcmF0aW9ucy4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogVHJlYXQgYSBCSVRfQU5EX0VYUFIgd2l0aCBhIGNvbnN0YW50IG9mCisJb25lIGFzIGlmIGl0IHdlcmUgc3Vycm91bmRlZCB3aXRoIGFuIE5FX0VYUFIuCisJKGZvbGQpOiBEb24ndCBtb3ZlIG9wZXJhdGlvbiBpbnRvIGNvbmRpdGlvbmFsIGlmIGl0CisJaXMgQklUX3tBTkQsT1J9X0VYUFIgd2l0aCB0aGUgY29uc3RhbnQgMTsgY2hhbmdlIGl0IHRvIFRSVVRIXypfRVhQUgorCWluc3RlYWQuCisJV2hlbiBtb3ZpbmcgdGhpbmdzIGluc2lkZSBjb25kaXRpb25zLCBtb3ZlIGNvbXBhcmlzb25zIGFzIHdlbGwgYXMKKwliaW5hcnkgb3BlcmF0aW9ucy4KKwlEb24ndCBtYWtlIGEgU0FWRV9FWFBSIHdoZW4gbW92aW5nIHRoaW5ncyBpbnNpZGUgY29uZGl0aW9uYWxzIHVubGVzcworCXRoZSB2YWx1ZSB3b3VsZCByZWFsbHkgaGF2ZSBiZWVuIHVzZWQgdHdpY2UuCisKKwkqIGV4cHIuYyAoZG9fc3RvcmVfZmxhZyk6IFdoZW4gY29tcHV0aW5nIHZpYSBhIHNoaWZ0LCBhbGxvdyBmb3IKKwlhbiBpbm5lciBSU0hJRlRfRVhQUiBpbiBCSVROVU0uCisJU29tZXRpbWVzIGRvIHRoZSBvcGVyYXRpb25zIGFzIHNpZ25lZC4KKworCSogY29tYmluZS5jIChzdWJzdCk6IGFwcGx5X2Rpc3RyaWJ1dGl2ZV9sYXcgY2FuIGFsc28gaGFuZGxlIEFORC4KKwkoc3Vic3QsIGNhc2UgSUZfVEhFTl9FTFNFKTogTWFrZSBhIHNoaWZ0IHdoZW4gYXBwcm9wcmlhdGUuCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogSWYgd2UgaGF2ZSBhbiBvdXRlciBvcGVyYXRpb24gYW5kIG1hZGUKKwlhIHNoaWZ0LCBzZWUgaWYgaXQgY2FuIGJlIHNpbXBsaWZpZWQuCisKK1NhdCBKdW4gMjYgMDM6MjU6MzUgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWd1cmUgKGkzNzAtKi1tdnMqKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBjb25maWcvaTM3MC9pMzcwLm1kLCBtdnMzNzAuYywgdG0tbXZzLmgsIHhtLW12cy5oCisKKwkqIGZpbmFsLmMsIHZhcmFzbS5jOiBJbmNsdWRlIGN0eXBlLmguCisJKiBjLWxleC5jOiBJbmNsdWRlIGN0eXBlLmguCisJKGlzYWxudW0sIGlzZGlnaXQpOiBNYWNyb3MgZGVsZXRlZC4KKworCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEhhbmRsZQorCXJlZ1tuLG4rMV0gPSBtZW1bcmVnW25dICsgcmVnW24rMV1dLgorCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkaSk6IERlbGV0ZSB0aGUgZWFybHljbG9iYmVyIGluIGxvYWQgY2FzZS4KKworU2F0IEp1biAyNiAwMzoxNTozOCAxOTkzICBEb3VnIEV2YW5zICAoZGplQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCisKKwkqIGdjYy5jIChvcHRpb25fbWFwKTogQWRkIG1pc3NpbmcgY29tbWEuCisKK1NhdCBKdW4gMjYgMDI6MTc6MjggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcvd2UzMmsvd2UzMmsuYzogQ2xlYW4gdXAgZm9ybWF0dGluZy4KKworCSogY2FsbHMuYyAoY2FsbHNfZnVuY3Rpb25fMSk6IEFkZCBkZWNsYXJhdGlvbi4KKworCSogY29uZmlnL202OGsvbTY4ay5tZCAoZml4X3RydW5jZGZzaTIsIGZpeF90cnVuY2RmaGkyLCBmaXhfdHJ1bmNkZnFpMik6CisJUmVxdWlyZSBUQVJHRVRfNjg4ODEgYXMgd2VsbCBhcyBUQVJHRVRfNjgwNDAuCisKK0ZyaSBKdW4gMjUgMjA6MTM6NTEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjYWxscy5jIChjYWxsc19mdW5jdGlvbik6IERvbid0IHNjYW4gYSBzaW5nbGUgc2F2ZV9leHByIHR3aWNlLgorCShjYWxsc19mdW5jdGlvbl8xKTogTmV3IHN1YnJvdXRpbmUgZm9yIHRoZSBhY3R1YWwgcmVjdXJzaW9uLgorCisJKiBjLXBhcnNlLmluIChhbGxfaXRlcl9zdG10X3NpbXBsZSk6IEFkZCBtaXNzaW5nIGBlbHNlJy4KKworRnJpIEp1biAyNSAxNTo1Mzo1OSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwlDeWdudXM8LT5GU0YgbWVyZ2UuCisJRnJpIEp1biAyNSAxMDowMDozNCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYzogRGVsZXRlIHNvbWUgI2lmIDAnZCBjb2RlIHRoYXQgaGFzIGJlZW4gdGhlcmUgZm9yZXZlci4KKworCSogY3AtdHlwZTIuYyAobXlfZnJpZW5kbHlfYWJvcnQpOiBVcGRhdGUgY291bnQgb2YgYWJvcnRzIChhZGRlZCBieQorCWVtaXRfYmFzZV9pbml0IHJld3JpdGUpLgorCisJTWFrZSBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3JzIHdvcmsgcHJvcGVybHkuCisJKiBjcC1sZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogTWFyayB0aGUgZ2VuZXJhdGVkIGN0b3Igd2l0aAorCVJJRF9JTkxJTkUsIHNvIGl0IHdvbid0IGdldCBlbWl0dGVkIHVubGVzcyBpdCdzIG5lZWRlZC4KKwkqIGNwLWRlY2wuYyAoZ3Jva19jdG9yX3Byb3BlcnRpZXMpOiBJZiBDVFlQRSBoYXMgdmlydHVhbCBiYXNlCisJY2xhc3NlcywgbWFrZSBzdXJlIHdlIGRvbid0IHBheSBhdHRlbnRpb24gdG8gdGhlIGludCB0aGF0IHdlCisJbWFnaWNhbGx5IGFkZGVkIHRvIHRoZSBjdG9yIGRlY2wuCisJKiBjcC1wdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiBOb3RlIGEgY29uc3QgY29weSBjdG9yIHZzIGEgbm9ybWFsCisJY29weSBjdG9yLiAgU2F5IGlmIFRZUEVfSEFTX0RFRkFVTFRfQ09OU1RSVUNUT1IuCisJKiBjcC10cmVlLmggKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IE1vZGlmeSBwcm90b3R5cGUuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQWxzbyBjaGVjayBUWVBFX0hBU19DT05TVFJVQ1RPUiwgc28KKwl3ZSBkb24ndCBnZW5lcmF0ZSBhIGRlZmF1bHQgY3RvciBpZiB0aGV5IGFscmVhZHkgZGVjbGFyZWQgb25lCisJKHRha2luZyB3aGF0ZXZlciBhcmcgdHlwZXMpLgorCisJV2VkIEZlYiAgMyAxNzo0MTowMiAxOTkzICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQHRjdC5jb20pCisKKwkqIGNwLWNsYXNzLmMgKG5lZWRzX2NvbnN0X2N0b3IpOiBFbGltaW5hdGUgYXMgbWVhbmluZ2xlc3MuCisJKGZpbmlzaF9zdHJ1Y3QpIEFsd2F5cyBnZW5lcmF0ZSBkZWZhdWx0IGZ1bmN0aW9ucy4KKwlHZW5lcmF0ZSBleGFjdGx5IG9uZSBjb3B5IGNvbnN0cnVjdG9yOiBlaXRoZXIgIlgoWCYpIiBvcgorCSJYKGNvbnN0IFgmKSIsIGJ1dCBub3QgYm90aC4KKwkqIGNwLWxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBUYWtlIGxpc3Qgb2YgZmllbGRzCisJYXMgYSBuZXcgcGFyYW1ldGVyLiAgVXNlIGRlZmF1bHRfY29weV9jb25zdHJ1Y3Rvcl9ib2R5LgorCVNldCBUUkVFX1BVQkxJQyBhbmQgREVDTF9FWFRFUk5BTCBjb3JyZWN0bHkgZm9yIHVzYWdlIHdpdGgKKwkjcHJhZ21hIGludGVyZmFjZS4JCisJKGRlZmF1bHRfY29weV9jb25zdHJ1Y3Rvcl9ib2R5KTogTmV3IGZ1bmN0aW9uICh1c2VzIG9ic3RhY2tzKS4KKworCVRodSBKdW4gMjQgMTI6NDE6MTYgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BydGwuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwsIGJ1aWxkX21ldGhvZF9jYWxsKTogUmVtb3ZlCisJbWF5YmVfYWRqdXN0IGFyZ3VtZW50IHRvIGJ1aWxkX2RlbGV0ZSBhcyBpdCBpcyB1bm5lZWRlZCBhbmQgcmVtb3ZlIGFsbAorCXN1cHBvcnQgZm9yIHRoZSBtYWdpYyBjb29raWUga2V5IGluIHRoZSBhcmVhIGp1c3QgYmVmb3JlIHRoZSBkYXRhCisJYWxsb2NhdGVkIGJ5IG5ldyBbXS4KKwkqIGNwLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uLCBtYXliZV9idWlsZF9jbGVhbnVwLAorCXB1c2hfZXhjZXB0aW9uX2NsZWFudXApOiBMaWtld2lzZS4KKwkqIGNwLWRlY2wyLmMgKGRlbGV0ZV9zYW5pdHksIGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCisJKiBjcC1pbml0LmMgKGluaXRfaW5pdF9wcm9jZXNzaW5nLCBidWlsZF9uZXcsCisJbWF5YmVfYWRqdXN0X2FkZHJfZm9yX2RlbGV0ZSwgYnVpbGRfZGVsZXRlLCBidWlsZF92YmFzZV9kZWxldGUsCisJYnVpbGRfdmVjX2RlbGV0ZSk6IExpa2V3aXNlLgorCSogY3AtdHJlZS5jIChidWlsZF9jcGx1c19uZXcpOiBMaWtld2lzZS4KKwkqIGNwLXRyZWUuaCAoYnVpbGRfZGVsZXRlKTogTGlrZXdpc2UuCisKKwlXZWQgSnVuIDIzIDE3OjE4OjQxIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFsc28gY2F0Y2ggU0lHQlVTLgorCShzaWdzZWd2KTogUmVuYW1lIHRvIHNpZ25hbF9jYXRjaDsgYWxzbyByZXNldCBTSUdCVVMuCisKKwkqIGNwLXR5cGVjay5jIChwb2ludGVyX2RpZmYpOiBFcnJvciBpZiBvcDEgaXMgYSBwb2ludGVyIHRvIGFuCisJaW5jb21wbGV0ZSB0eXBlLgorCisJV2VkIEp1biAyMyAxNjoxNzo0MyAxOTkzICBNaWtlIFN0dW1wICAobXJzQHJ0bC5jeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoZGZzX2dldF92YmFzZV90eXBlcywgZ2V0X3ZiYXNlX3R5cGVzKTogQ29uZm9ybSB0byBBUk0KKwkxMi42LjIgd2l0aCByZXNwZWN0IHRvIHZpcnR1YWwgYmFzZXMuICBWaXJ0dWFsIGJhc2VzIGFyZSBub3cKKwlpbml0aWFsaXplZCBpbiBkZnMgb3JkZXIuCisKKwlXZWQgSnVuIDIzIDE2OjA0OjE3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogRGlzYWJsZSB0aGUgd2FybmluZyByZWxhdGluZyB0byBhCisJbm9uLXZpcnR1YWwgZHRvci4KKworCVR1ZSBKdW4gMjIgMjA6MDM6NTkgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAocmVpbml0X3BhcnNlX2Zvcl9ibG9jayk6IERldGVjdCBFT0ZzIGluc2lkZSB0ZW1wbGF0ZXMuCisKKwlUdWUgSnVuIDIyIDE2OjEwOjQ2IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFNldCBUWVBFX05PTkNPUElFRF9QQVJUUyBub3cgdGhhdCB0aGUKKwlyaWdodCB2dGFibGUgY2FuIGJlIGZvdW5kLCBzbyB0aGF0IHRoZSB2dGFibGUgcG9pbnRlcnMgYXJlIHNldAorCWNvcnJlY3RseSB3aGVuIGltcGxlbWVudGluZyBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3JzLgorCSogY3AtdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogVXNlIFRZUEVfTk9OQ09QSUVEX1BBUlRTIGluIHRoZQorCXNhbWUgd2F5IHRoZSBiYWNrZW5kIHVzZXMgaXQgd2hlbiBpbXBsZW1lbnRpbmcgZGVmYXVsdCBjb3B5CisJY29uc3RydWN0b3JzLgorCisJVHVlIEp1biAyMiAxMDo1MDo1NiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCB0cnkgdG8gbWFuZ2xlIHRoZSBuYW1lIG9mIGEgZm4KKwl0aGF0IGhhcyBDIGxpbmthZ2UuCisKKwkqIGNwLWluaXQuYyAoeHJlZl9mcmllbmRzKTogRGVsZXRlZCBmbiwgc2luY2UgaXQncyB0aGUgc2FtZSBhcworCXhyZWZfZnJpZW5kLgorCSh4cmVmX2ZyaWVuZCk6IE1ha2UgaXQgc3RhdGljLgorCShkb19mcmllbmQpOiBDaGFuZ2UgY2FsbCB0byB4cmVmX2ZyaWVuZC4KKwkqIGNwLXRyZWUuaCAoeHJlZl9mcmllbmQsIHhyZWZfZnJpZW5kcyk6IERlbGV0ZSBleHRlcm4gZGVjbHMuCisKKwkqIGNwLXRyZWUuaCAobGFuZ190eXBlKTogRGVsZXRlIGBkeW5hbWljJyBiaXQuCisJKiBncGx1cy5ncGVyZiAoZHluYW1pYyk6IERlbGV0ZSByZXNlcnZlZCB3b3JkLgorCSogY3AtaGFzaC5oOiBHZW5lcmF0ZWQgYSBuZXcgdmVyc2lvbi4KKwkqIGNwLWxleC5jIChpbml0X2xleCk6IERlbGV0ZSBkb2luZyBhbiB1bnNldCBvZiBgZHluYW1pYycuCisJKiBjcC1wYXJzZS55IChEWU5BTUlDKTogRGVsZXRlIHRva2VuIGFuZCBzZXR0aW5nIGl0IHRvICVyaWdodC4KKwkobmV3LCBhZ2dyKTogRGVsZXRlIERZTkFNSUMgcnVsZXMuCisJKiBjcC1zcGV3LmMgKGluaXRfc3Bldywgc3RydWN0IHRva3NfZm9sbG93X3R5cGVzKTogRGVsZXRlIERZTkFNSUMuCisKKwkqIGNwLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogVGhlcmUncyBubyBzdGFuZGFyZAorCWNvbnZlcnNpb24gZnJvbSBhIHBvaW50ZXIgdG8gbWVtYmVyIHRvIGEgYHZvaWQgKicuCisKKwkqIGNwLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgYnVpbHRpbnMgZm9yCisJX19idWlsdGluX2FwcGx5X2FyZ3MsIF9fYnVpbHRpbl9hcHBseSwgYW5kIF9fYnVpbHRpbl9yZXR1cm4uCisKKwlNb24gSnVuIDIxIDEyOjA1OjI4IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBOZXcgZnVuY3Rpb24uICBBZGp1c3QgdGhlIGNvZGUgdGhhdAorCWhhbmRsZXMgRU5VTUVSQUxfVFlQRXMgYW5kIFVOSU9OX1RZUEVzIHRvIG1ha2UgbW9yZSBzZW5zZS4gCisJKiBjcC1wYXJzZS55IChjb21wb25lbnRfZGVjbCk6IE1vdmUgYSBsb3Qgb2YgY29kZSBpbnRvIHRoYXQgZm4uCisJKiBjcC10cmVlLmggKGdyb2tfeF9jb21wb25lbnRzKTogQWRkIGV4dGVybiBkZWNsLgorCisJKiBjcC1wYXJzZS55IChjb21wb25lbnRfZGVjbF9saXN0KTogRG9uJ3Qgd2FybiBhYm91dCBhIHNlbWljb2xvbgorCWFmdGVyIGEgY29tcG9uZW50X2RlY2xfbGlzdC4KKworCSogY3Atc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IEJlIGNhcmVmdWwgdG8gaGFuZGxlIG9wZXJhdG9ycworCXByb3Blcmx5IHdoZW4gY29tcGxhaW5pbmcgYWJvdXQgYW1iaWd1aXRpZXMgJmMuCisKKwkqIGNwLXNlYXJjaC5jIChkZnNfcHVzaGRlY2xzKTogTWFrZSBzdXJlIHdlIGhhdmUgYSBjb250ZXh0IGJlZm9yZQorCXNlZWluZyBpZiBpdCBkZXJpdmVzIGZyb20gVFlQRS4KKworCUZyaSBKdW4gMTggMDg6MTQ6MTEgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChmaW5pc2hfYW5vbl91bmlvbik6IFVzZSBzaW1wbGVfY3N0X2VxdWFsIHRvIGZpbmQgdGhlCisJbWVtYmVyIHRoYXQgY2FuIGhvbGQgYWxsIHRoZSB2YWx1ZXMsIGluc3RlYWQgb2YganVzdCBkb2luZyBhIGNvbXBhcmUKKwliZXR3ZWVuIHRoZSBERUNMX1NJWkVzLgorCisJV2VkIEp1biAxNiAxMDo1NzozNyAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IE1ha2Ugc3VyZSBpdCdzIHRoZSBnbG9iYWwgZm4gYG1haW4nCisJYmVmb3JlIGNvbXBsYWluaW5nIGFib3V0IHRha2luZyB0aGUgYWRkcmVzcyBvZiBpdC4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFsc28gZm9yYmlkIGBvcGVyYXRvciAoKScgYXMgYQorCW5vbi1tZW1iZXIgZm4uCisKKwkqIGNwLWRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IERvbid0IGFsbG93IGFuIGluaXRpYWxpemVyIGxpc3QKKwlhcyB0aGUgaW5pdGlhbGl6ZXIgZm9yIGEgcmVmZXJlbmNlLgorCisJKiBjcC1tZXRob2QuYyAoZHVtcF9pbml0KTogSGFuZGxlIGEgTk9OX0xWQUxVRV9FWFBSLgorCisJU3VuIEp1biAxMyAxMjo1NToyMiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBEb24ndCBjb21wbGFpbiBhYm91dCBkdXBsaWNhdGUKKwlkZWZpbml0aW9ucyBvZiBgZXh0ZXJuICJDIicgZGVjbGFyYXRpb25zIChwYXJhbGxlbGl6ZSBpdCB3aXRoIGhvdworCXJlZ3VsYXIgYGV4dGVybicgZGVjbHMgYXJlIGhhbmRsZWQpLgorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogQXZvaWQgYSBudWxsLXJlZmVyZW5jZSBvbiBDVFlQRS4KKworCSogY3AtY3Z0LmMgKGJ1aWxkX2RlZmF1bHRfYmluYXJ5X3R5cGVfY29udmVyc2lvbik6IExvb2sgZGVlcGVyIGludG8KKwl3aGF0IEFSRzEgYW5kIEFSRzIgYXJlIGlmIHRoZXkncmUgUE9JTlRFUl9UWVBFcy4KKworCVRodSBKdW4gMTAgMTI6MDk6MTcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTWFrZSB0aGUgd2FybmluZyBhYm91dCBvcHItZXEgYmVpbmcgYQorCW1lbWJlciBmdW5jdGlvbiBiZSBhIHBlZHdhcm4uCisKKwlUaHUgSnVuIDEwIDAwOjMwOjA4IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtdHJlZS5oOiAocHJldmlvdXNfY2xhc3NfdHlwZSk6IEFkZCBleHRlcm5hbCBkZWNsYXJhdGlvbi4KKwkqIGNwLWNsYXNzLmMgKHByZXZfY2xhc3NfdHlwZSk6IFJlbmFtZSB0byBwcmV2aW91c19jbGFzc190eXBlLgorCSogY3AtZGVjbC5jIChzdHJ1Y3Qgc2F2ZWRfc2NvcGUpOiBBZGQgcHJldmlvdXNfY2xhc3NfdHlwZSBzbG90LgorCSogY3AtZGVjbC5jIChwdXNoX3RvX3RvcF9sZXZlbCwgcG9wX2Zyb21fdG9wX2xldmVsKTogVHJhY2sKKwlwcmV2aW91c19jbGFzc190eXBlIHZhbHVlLiAgVGhlIG9ubHkgdHJpY2sgaXMgdGhhdCB3ZSBoYXZlIHRvIGNhbGwKKwlwb3BjbGFzcygtMSkgd2hlbiB3ZSBoYXZlIGEgcHJldmlvdXNfY2xhc3NfdHlwZSB0aGF0IHdlIGFyZSBhYm91dCB0bworCWRlc3Ryb3ksIHRvIGtlZXAgdGhpbmdzIGluIHN5bmMuCisKKwlUdWUgSnVuICA4IDE2OjQ4OjQ5IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogY3AtY3Z0LmMgKGJ1aWxkX3RodW5rLCBjb252ZXJ0X2ZuX3B0cik6IE5ldyByb3V0aW5lcyB0byBoYW5kbGUKKwl0aHVua3MuCisJKiBjcC1jdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogVXNlIGNvbnZlcnRfZm5fcHRyIHdoZW4KKwljb252ZXJ0aW5nIG5vbi1zdGF0aWMgcG9pbnRlciB0byBtZW1iZXJzLgorCisJVHVlIEp1biAgOCAxNjo0MTo1OSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChyZWluaXRfcGFyc2VfZm9yX2Jsb2NrKTogTWFrZSBzdXJlIG5vdCB0byB0cnkgdG8gdXNlCisJY29uc3VtZV9zdHJpbmcgb24gYW4gZXNjYXBlZCBkb3VibGUtcXVvdGUuIAorCisJVHVlIEp1biAgOCAxNjoyNTo0MyAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEb24ndCBzZWFyY2ggaGlkZGVuIGZ1bmN0aW9ucyBmcm9tCisJYmFzZSBjbGFzc2VzLCBhcyB0aGlzIHZpb2xhdGVzIGNoYXB0ZXIgMTAuCisKKwlNb24gSnVuICA3IDE4OjQ2OjAxIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IFJld3JpdGUsIG1lcmdpbmcgdGhlIHR3byBwYXRocyBpbnRvCisJb25lIGZvciBtZW1iZXIgaW5pdGlhbGl6YXRpb24uICBOb3cgbWVtYmVycyB3aWxsIGJlIGluaXRpYWxpemVkIGluCisJb3JkZXIgb2YgZGVjbGFyYXRpb24sIG5vdCBpbiB0aGUgb3JkZXIgb2YgdGhlIG1lbS1pbml0aWFsaXplciBsaXN0LgorCShwZXJmb3JtX21lbWJlcl9pbml0LCBzb3J0X21lbWJlcl9pbml0KTogTmV3IGZ1bmN0aW9ucy4KKworCU1vbiBKdW4gIDcgMTg6MDE6MzEgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC1zZWFyY2guYyAoaXNfc3Vib2JqZWN0X29mX3AsIGxvb2t1cF9maWVsZCwgbG9va3VwX2ZuZmllbGRzKToKKwlCZWNhdXNlIHZpcnR1YWwgYmFzZXMgZG9uJ3QgbmVjZXNzYXJpbHkgc2hhcmUgdGhlIHNhbWUgYmluZm8sIHVzZQorCXRoZSBiaW5mbyBoaWVyYXJjaHkgb2YgVFlQRV9CSU5GTyBvZiBhbnkgdmlydHVhbCBiYXNlcywgd2hlbgorCXBlcmZvcm1pbmcgaGlkaW5nIGNoZWNrcy4gIEZpeGVzIHByb2JsZW0gaW50cm9kdWNlZCBvbiBUaHUgTWFyIDI1CisJMjM6MDk6MjcgMTk5My4gIFRoZSBzeW1wdG9tIGlzIHRoZSBjb21waWxlciByZXBvcnRzIG5vbiBhbWJpZ3VvdXMKKwltZW1iZXJzIGFzIGJlaW5nIGFtYmlndW91cy4KKworCVN1biBKdW4gIDYgMTE6NDU6NDQgMTk5MyAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKKworCSogY3AtY2FsbC5jIChFVklMLFRSSVZJQUwpOiBOZXcgbWFjcm9zLgorCShjb252ZXJ0X2hhcnNobmVzcyk6IFVzZSB0aGVzZSBtYWNyb3MuCisKKwlTYXQgSnVuICA1IDE5OjA2OjEzIDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBNYWtlIGNsZWFyaW5nIEJJTkZPX0JBU0VJTklUX01BUktFRAorCXN5bW1ldHJpYyB3aXRoIGl0cyBzZXR0aW5nLiAgRml4ZXMgcDI4MjUuCisKKwlUaHUgSnVuICAzIDE2OjI0OjMwIDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtcGFyc2UueSAoY29tcG9uZW50X2RlY2xhcmF0b3IsIGNvbXBvbmVudF9kZWNsYXJhdG9yMCk6CisJQWxsb3cgYXR0cmlidXRlIGFmdGVyIG5hbWVsZXNzIGZpZWxkLgorCisJKiBjcC1sZXguYyAocmVhbF95eWxleCk6IFRha2UgY2FyZSB0byBleHBhbmQgdG9rZW5fYnVmZmVyIGJlZm9yZQorCXN0b3JpbmcgZWFjaCBjaGFyYWN0ZXIuCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogSWYgYW4gaW50ZWdlciB2YWx1ZSBvdmVyZmxvd3Mgc28gdGhlIGhpZ2gKKwl3b3JkIGlzIG5lZ2F0aXZlLCBpdCdzIG9mIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLiAgSW50ZWdlciBjb25zdGFudAorCWlzIHVuc2lnbmVkIGZvciBwdXJwb3NlcyBvZiBpbnRfZml0c190eXBlX3Agc28gdGhhdCBpdCBjb21wYXJlcyBodWdlCisJY29uc3RhbnRzIHByb3Blcmx5LiAgV2FybiBhYm91dCBpbnRlZ2VycyBzbyBsYXJnZSB0aGF0IHRoZXkgYXJlCisJdW5zaWduZWQuCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X2Zyb21fcmVmZXJlbmNlKTogRG8gYW4gb3ItZXF1YWxzIG9uIHNldHRpbmcKKwlUUkVFX1NJREVfRUZGRUNUUyBmb3IgTlZBTC4KKwkqIGNwLXRyZWUuYyAobHZhbHVlX3ApOiBGb3IgYSBTQVZFX0VYUFIsIGNoZWNrIGl0cyBmaXJzdCBhcmd1bWVudC4KKworCVRodSBKdW4gIDMgMTE6MzQ6MzUgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsMi5jIChncm9rX2FsaWdub2YpOiBOZXcgZnVuY3Rpb24uCisJKiBjcC1wYXJzZS55ICh1bmFyeV9leHByLCBBTElHTk9GIHVuYXJ5X2V4cHIgcnVsZSk6IE1vdmUgdGhlIGNvZGUKKwlpbnRvIHRoZSBuZXcgZnVuY3Rpb24sIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFyc2VyLgorCSogY3AtdHJlZS5oIChncm9rX2FsaWdub2YpOiBBZGQgcHJvdG90eXBlLgorCisJKiBjcC1kZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWxsb3cgZnVuY3Rpb24tY2FsbCBub3RhdGlvbiBmb3IKKwlpbml0aWFsaXphdGlvbiBvZiBzY2FsYXJzIGFzIHdlbGwgYXMgYWdncmVnYXRlcy4KKworCSogY3AtZGVjbC5jIChwdXNoZGVjbCk6IERvbid0IHBheSBhdHRlbnRpb24gdG8gZnJpZW5kcyB3aGVuIG5vdGluZyBhCisJbWlzc2luZyBgc3RhdGljJyBkZWNsLiAgRGlzYWJsZSB0aGlzIGNvZGUgZm9yIG5vdy4KKworCVdlZCBKdW4gIDIgMTI6MjM6MDUgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvIGEgcmVndWxhciBlcnJvciBpZiB0aGUgbGluZSBudW1iZXIKKwlvbiBORVdERUNMIGhhc24ndCBiZWVuIHNldCB5ZXQgKGUuZy4sIGJlZm9yZSBmaW5pc2hfc3RydWN0KS4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFJlbW92ZSB3YXJuaW5nIGFib3V0IGEgYml0LWZpZWxkCisJaGF2aW5nIGEgYmFkIHR5cGUgaW4gQU5TSSBDKyssIGl0J3Mgbm90IGFwcHJvcHJpYXRlIGdpdmVuIHRoZQorCXdhcm5pbmcgaW1tZWRpYXRlbHkgYWJvdmUuCisKKwkqIGNwLXR5cGVjay5jIChyZXF1aXJlX2luc3RhbnRpYXRlZF90eXBlKTogRG9uJ3QgYWxsb3cgYW4KKwlpbml0aWFsaXplciBsaXN0IGluIGFuIGFyZ3VtZW50IGxpc3QuCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBDaGFuZ2Ugc2hhZG93aW5nIG9mIGEgcGFyYW0gaW4gb3V0ZXJtb3N0CisJYmxvY2sgb2YgdGhlIGZuIGZyb20gYSBwZWR3YXJuIHRvIGFuIGVycm9yLCBzaW5jZSBpdCdzIGEKKwlyZWRlY2xhcmF0aW9uLgorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2F5IGFub255bW91cyBjbGFzc2VzIGFuZCBzdHJ1Y3RzIGFyZQorCXVzZWxlc3MsIG5vdCBqdXN0IGNsYXNzZXMuCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogV2FybiBpZiBjYXRjaCwgdGhyb3csIG9yIHRyeSBhcmUgdXNlZCBhcworCWlkZW50aWZpZXIgbmFtZXMuCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBNYWtlIHN1cmUgd2UgaGF2ZSBhIENVUlJFTlRfRlVOQ1RJT05fREVDTAorCWJlZm9yZSBzZXR0aW5nIGl0cyBwdWJsaWMgZmxhZy4KKworCSogY3AtZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBPbmx5IGNvbXBsYWluIGFib3V0IG11bHRpcGxlCisJaW5pdGlhbGl6YXRpb25zIG9mIGEgc3RhdGljIHZhcmlhYmxlIGlmIHdlIGFjdHVhbGx5IGhhdmUgYW4KKwlpbml0aWFsaXplci4KKwkoZmluaXNoX2RlY2wpOiBMaWtld2lzZSBmb3IgY29uc3QuCisKKwkqIGNwLXNlYXJjaC5jIChidWlsZF9taV9tYXRyaXgpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvciBpbgorCWNsZWFyaW5nIG9mIE1JX01BVFJJWC4KKwkoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBJbml0IE5FV19CSU5GTyB0byAwLgorCisJKiBjcC1wdC5jIChpbnN0YW50aWF0ZV9tZW1iZXJfdGVtcGxhdGVzKTogSW5pdGlhbGl6ZSBYWFggdG8gMC4KKworCSogY3AtY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFplcm8gb3V0IGNhbmRpZGF0ZXMuCisJKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IExpa2V3aXNlLgorCisJV2VkIEp1biAgMiAxMTo1MzoyNCAxOTkzICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGNwLXNlYXJjaC5jIChsb29rdXBfZm5maWVsZHNfaGVyZSk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCBvbgorCWNvbnRleHQgdHlwZXMgYmVmb3JlIGNvbXBhcmluZy4gIEZpeGVzIGNvbnN0IG1lbWJlciBmdW5jdGlvbnMgbm90CisJYmVpbmcgZm91bmQgaW4gdGVtcGxhdGVzLgorCisJVHVlIEp1biAgMSAxODoyNjoxOCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKHN0cnVjdHNwKTogQXZvaWQgYSBudWxsLXJlZiBvbiBJRC4KKwkobGVmdF9jdXJseSk6IExpa2V3aXNlLgorCisJVHVlIEp1biAgMSAxMzo0OToyMCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAocHVzaGRlY2wpOiBDb21tdW5pY2F0ZSBhIGBzdGF0aWMnIGRlY2wgb2YgYSBwcm90b3R5cGUKKwlpbnRvIGl0cyBkZWZpbml0aW9uLCBpZiB0aGV5IGZvcmdldCB0byB0YWtlIGNhcmUgb2YgaXQuCisKKwkqIGNwLWluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBNYWtlIGVycm9yIG1lc3NhZ2UgbW9yZSB1c2VmdWwgYWJvdXQKKwlpbnN1ZmZpY2llbnQgaW5pdGlhbGl6ZXJzIGZvciBhIG1lbWJlciBvZiBhIGNsYXNzIHcvbyBhIGN0b3IuCisKKwlTdW4gTWF5IDMwIDA5OjQ1OjA2IDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWNhbGwuYyAoY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogUGVuYWxpc2UgZWFjaCBhcmd1bWVudCB0aGF0CisJbWF0Y2hlcyBhbiBlbGxpcHNpcywgbm90IGp1c3QgdGhlIGVsbGlwc2lzIGl0c2VsZi4KKwkoYnVpbGRfbWV0aG9kX2NhbGwpOiBEb24ndCBjb25zaWRlciBhIGNhbmRpZGF0ZSBhbiBlYXN5IG1hdGNoIGlmCisJY3AtPmVsbGlwc2lzIGlzIG5vbi16ZXJvIChmaXhlcyBwMjc3OCkuCisKKwlTYXQgTWF5IDI5IDA5OjM0OjU3IDE5OTMgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AcnRsLmN5Z251cy5jb20pCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IE1hdGNoIEFSTSBydWxlcyBtb3JlIGNsb3NlbHkgYnk6CisJKDEpIG5vdCBjb252ZXJ0aW5nIGJldHdlZW4gdHlwZXMgb2YgZGlmZmVyZW50IHNpZ25lZG5lc3MsIGFuZAorCSgyKSBjb252ZXJ0aW5nIGJldHdlZW4gdHlwZXMgb2YgZGlmZmVyZW50IHZhcmlldGllcyBpZiBhIGNvbnN0JgorCXN1Z2dlc3RzIHdlIGNhbiB1c2UgYSB0ZW1wb3JhcnkgKGZpeGVzIHAyNzgwKS4KKworCSogY3AtZGVjbC5jIChkZWNsc19tYXRjaCk6IEhhbmRsZSBwc2V1ZG8tbWF0Y2ggb2YgcGFyYW1ldGVyIGxpc3RzCisJYWNjb3JkaW5nIHRvIHAzMDggb2YgdGhlIEFSTS4KKwkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBEaXR0by4KKwkqIGNwLXR5cGVjay5jIChjb21wdHlwZXMpOiBSZXN0IG9mIGNoYW5nZSAoY2xvc2VzIHAyNzc5KS4KKworCSogY3AtY2FsbC5jIChjb21wdXRlX2NvbnZlcnNpb25fY29zdHMpOiBDb3VudCBlbGxpcHNlcyB3aGVuIHdlIHNlZQorCXRoZW0uCisJKGlkZWFsX2NhbmRpZGF0ZSk6IEdyYWNlZnVsbHkgaGFuZGxlIGFyZyBsaXN0cyB0aGF0IGhhdmUgZWxsaXBzZXMKKwkoRml4ZXMgcDI3NzcpLgorCisJKiBjcC1jYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRGVsZXRlIHNvbWUgI2lmZGVmcyB0aGF0IGFyZQorCW9ic29sZXRlZCBieSBBTlNJLgorCisJRnJpIE1heSAyOCAxMjoxNToyMSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBEb24ndCBhbGxvdyBvdmVybG9hZGVkIG9wZXJhdG9ycyB0byBoYXZlCisJZGVmYXVsdCBhcmd1bWVudHMuCisKKwkqIGNwLWN2dC5jIChjb252ZXJ0KTogSWYgaXQncyBhbiBhbm9ueW1vdXMgZW51bSwgc2F5IHNvIGluc3RlYWQgb2YKKwlnaXZpbmcgdGhlIGNyeXB0aWMgYC5fMTIzJyBhcyB0aGUgZW51bSB0eXBlLgorCisJVGh1IE1heSAyNyAxMDo1Mjo0OSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZXR1cm4gMCBpbnN0ZWFkIG9mIGRvaW5nIGEgMTU1IGFib3J0LAorCXNvIHdlJ2xsIGdldCB0aGUgcmlnaHQgZXJyb3IgbWVzc2FnZSBsYXRlci4KKworCSogY3AtdHlwZTIuYyAocmVhZG9ubHlfZXJyb3IpOiBHaXZlIGEgbW9yZSB1c2VmdWwgZXJyb3Igd2hlbiB0aGUgYXJnCisJaXMgYSBSRVNVTFRfREVDTC4KKworCSogY3AtaW5pdC5jIChidWlsZF9uZXcpOiBTZXQgTE9PS1VQX0NPTVBMQUlOIG9uIHRoZSBmbGFncywgc28gd2UnbGwKKwlwYXkgYXR0ZW50aW9uIHRvIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb25zdHJ1Y3RvciB3ZSdyZSB0cnlpbmcgdG8KKwljYWxsLgorCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIHdhcm5pbmcgYWJvdXQgY3Rvci9kdG9yIHByaXZhY3kuCisJKiBjcC1kZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBHcm9rIGl0LiAgTWFrZSAtV2FsbCBlZmZlY3QgaXQuCisJKHdhcm5fY3Rvcl9kdG9yX3ByaXZhY3kpOiBOZXcgdmFyaWFibGUsIGRlZmF1bHQgYmVpbmcgb24uCisJKiBjcC10cmVlLmggKHdhcm5fY3Rvcl9kdG9yX3ByaXZhY3kpOiBBZGQgZXh0ZXJuIGRlY2wuCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBNYWtlIHRoZSBjdG9yIHdhcm5pbmcKKwljb25kaXRpb25hbGl6ZWQgb24gdGhlIGZsYWcuCisJKGZpbmlzaF9zdHJ1Y3QpOiBMaWtld2lzZSBmb3IgY3RvcnMuCisJKiBpbnZva2UudGV4aSAoT3B0aW9uIFN1bW1hcnksIFdhcm5pbmcgT3B0aW9ucyk6IEFkZCBpdC4KKwkoT3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIFdhcm5pbmdzKTogRXhwbGFpbiBpdC4KKworCSogY3AtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBhIHBlZHdhcm4gb24gZXh0ZXJuIGlubGluZS4KKworCVR1ZSBNYXkgMjUgMTM6NTU6NDggMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1pbml0LmMgKGJ1aWxkX2RlbGV0ZSk6IERvbid0IHBhc3MgdGhlIHNpemUgYXMgYW4gYXJndW1lbnQgdG8KKwlidWlsdGluIGRlbGV0ZSBmb3IgYSBub24tYWdncmVnYXRlIHR5cGUuICBPbmx5IHBhc3MgaXQgZm9yIGEgY2xhc3MKKwl3aGVuIHdlJ2xsIGJlIHVzaW5nIGl0cyBvd24gb3BlcmF0b3IgZGVsZXRlKCkuIChjb21wbGllcyB3LyAkMTIuNSkKKwkoYnVpbGRfeF9kZWxldGUpOiBEb24ndCBwYXNzIHRoZSBzaXplIGRvd24gdG8gYnVpbHRpbiBkZWxldGUuCisKKwkqIGNwLWRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBJZiBpdCdzIGEgcG9pbnRlciB0byBhIHR5cGUgdGhhdCBoYXMKKwlubyBkZXN0cnVjdG9yLCB0aGVuIGJ1aWxkIGEgcmVndWxhciBkZWxldGUgZXhwcmVzc2lvbiwgaW5zdGVhZCBvZiBhCisJdmVjdG9yIG9uZSAoc2luY2Ugd2UgZGlkbid0IHB1c2ggYW55IGluZm8gaW50byB0aGUgQklfaGVhZGVyX3R5cGUKKwlhcmVhKS4KKworCSogY3AtZGVjbDIuYyAoZ3Jva19hcnJheV9kZWNsKTogQWRkIGEgcGVkd2FybiBpZiB0aGV5IGRvIGA1W2FdJy4KKworCSogY3AtdHlwZWNrLmMgKGNvbXB0eXBlcyk6IERvbid0IHdhcm4gYWJvdXQgdDIgYmVpbmcgYW4KKwllcnJvcl9tYXJrX25vZGUuCisKKwkqIGNwLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBJZiB0eXBlIGlzIGxhaWQgb3V0LCBidXQgZGVjbCBpcyBub3QsCisJY2FsbCBsYXlvdXRfZGVjbC4KKworCU1vbiBNYXkgMTcgMTA6MzU6NTUgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10cmVlLmggKGVycm9yX25vdF9iYXNlX3R5cGUpOiBBZGQgcHJvdG90eXBlLgorCisJRnJpIE1heSAxNCAxNzoxNjo1NSAxOTkzICBNaWtlIFN0dW1wICAobXJzQHBvc2VpZG9uLmN5Z251cy5jb20pCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBVc2UgZ2V0X2JpbmZvIGluc3RlYWQgb2YgYmluZm9fdmFsdWUKKwl0byBmaW5kIHZmaWVsZHMuICBDdXJlcyBjb21waWxlcl9lcnJvci4KKworCVRodSBNYXkgMTMgMTQ6NTc6NTEgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjcC10cmVlLmMgKGJpbmZvX3ZhbHVlKTogSWYgdHlwZSBpcyB0aGUgbWFpbiBiaW5mbyBmb3IgZWxlbSwKKwlyZXR1cm4gaXQuCisKKwlXZWQgTWF5IDEyIDEzOjEwOjA3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKKworCSogY3AtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IFBlZHdhcm4gb24gdXNpbmcgcmV0dXJuIHdpdGhvdXQgYQorCXZhbHVlIGluIGEgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBvbmUuICBDbGVhcgorCUNVUlJFTlRfRlVOQ1RJT05fUkVUVVJOU19OVUxMLCBzbyB3ZSBkb24ndCBnZXQgYSBib2d1cyB3YXJuaW5nIGFib3V0CisJcmVhY2hpbmcgdGhlIGVuZCBvZiBhIG5vbi12b2lkIGZ1bmN0aW9uLgorCisJVHVlIE1heSAxMSAxNzo1MToxNiAxOTkzICBNaWtlIFN0dW1wICAobXJzQHBvc2VpZG9uLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZGVjbCk6IEFsbG93IC1mZXh0ZXJuYWwtdGVtcGxhdGVzIGNvbXBpbGVkIGNvZGUgdG8KKwlmYWxsIGJhY2sgdG8gb2xkIHN0cmF0ZWd5IG9mIGdlbmVyYXRpbmcgc3RhdGljIGNvcGllcyBmb3IgdGVtcGxhdGVzCisJdGhhdCBhcmUgbm90IHVuZGVyIHRoZSBjb250cm9sIG9mICNwcmFnbWEgaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uLAorCWJ1dCB3YXJuIGlmIHRoaXMgaGFwcGVucy4KKwkqIGNwLWRlY2wyLmMgKHdhcm5faWZfdW5rbm93bl9pbnRlcmZhY2UpOiBMaWtld2lzZS4KKwkqIGNwLWxleC5jIChyZWluaXRfcGFyc2VfZm9yX21ldGhvZCwgY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKToKKwlMaWtld2lzZS4KKwkqIGNwLXB0LmMgKGVuZF90ZW1wbGF0ZV9kZWNsLCBpbnN0YW50aWF0ZV9tZW1iZXJfdGVtcGxhdGVzLAorCWluc3RhbnRpYXRlX3RlbXBsYXRlKTogTGlrZXdpc2UuCisJKiBjcC10cmVlLmggKHdhcm5faWZfdW5rbm93bl9pbnRlcmZhY2UpOiBMaWtld2lzZS4KKworCVNhdCBNYXkgIDggMDU6NTM6MTcgMTk5MyAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBjeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsKTogVE9QTEVWIHNob3VsZCBiZSBzZXQgbm9uLXplcm8gYWxzbyBpZiB3ZQorCWFyZSBhdCB0aGUgcHNldWRvLWdsb2JhbCBsZXZlbC4gIFVzZSBUT1BMRVYgaW5zdGVhZCBvZiB0ZXN0aW5nCisJQ1VSUkVOVF9CSU5ESU5HX0xFVkVMLgorCisJRnJpIE1heSAgNyAxMjo0Mjo0NiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWRlY2wyLmMgKGdyb2tfYXJyYXlfZGVjbCk6IE5ldyBmdW5jdGlvbi4KKwkqIGNwLXBhcnNlLnkgKHByaW1hcnkpOiBVc2UgaXQgaW5zdGVhZCBvZiBsb3RzIG9mIGNvZGUgaW4gdGhlCisJcGFyc2VyLgorCSogY3AtdHJlZS5oIChncm9rX2FycmF5X2RlY2wpOiBBZGQgcHJvdG90eXBlLgorCisJKiBjcC1wYXJzZS55IChjb21wb25lbnRfZGVjbCk6IERpc2FibGUgY2hhbmdlIGFib3V0IFRZUEVfREVDTHMgZ29pbmcKKwlpbnRvIHRoZSBUWVBFX0ZJRUxEUyBsaXN0IGZvciBub3cuCisJKiBjcC10eXBlMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogRGlzYWJsZSBjaGVja3MgZm9yIG5vdy4KKworCVRodSBNYXkgIDYgMTY6NTk6MTkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1sZXguYyAoY2hlY2tfbmV3bGluZSk6IFVzZSBhIHdoaWxlIGluc3RlYWQgb2YgYSBkby13aGlsZSB0bworCWF2b2lkIHJlYWRpbmcgdGhlIGxpbmUgYWZ0ZXIgdGhlICNwcmFnbWEgaWYgd2UncmUgYXQgYSBuZXdsaW5lLgorCisJV2VkIE1heSAgNSAxNjozODowNiAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1jcC1wYXJzZSk6IFVwZGF0ZSByZWR1Y2UvcmVkdWNlIGNvdW50IHRvIDEzLgorCisJKiBjcC1kZWNsMi5jIChkZWxldGVfc2FuaXR5KTogTmV3IGZ1bmN0aW9uLgorCSogY3AtcGFyc2UueSAodW5hcnlfZXhwcik6IENhbGwgaXQsIGdldHRpbmcgcmlkIG9mIGEgbG90IG9mCisJcmVwZWF0ZWQgY29kZSBpbiB0aGUgcGFyc2VyLgorCSogY3AtdHJlZS5oIChkZWxldGVfc2FuaXR5KTogQWRkIHByb3RvdHlwZS4KKworCSogY3AtaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IERvbid0IHRyeSB0byBkbyBhbnl0aGluZyB3aXRoIGEgbWVtYmVyCisJdGhhdCBsYWNrcyBhIERFQ0xfTkFNRSAoZS5nLiwgdHlwZXMgd2UgYWRkZWQgaW4gY29tcG9uZW50X2RlY2wgZnJvbQorCXRoZSBwYXJzZXIpLgorCisJV2VkIE1heSAgNSAxMjo1NzozMyAxOTkzICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCisKKwkqIGNwLXBhcnNlLnkgKGdldF9jdXJyZW50X2RlY2xzcGVjcyk6ICBPYnNvbGV0ZSwgZGVsZXRlZC4KKworCVR1ZSBNYXkgIDQgMTM6NDY6MDkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC10eXBlMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBEb24ndCBjaGVjayBmb3IgcHJpdmF0ZSBvcgorCXByb3RlY3RlZCBtZW1iZXJzOyB3ZSBkbyB0aGF0IGluIHN0b3JlX2luaXRfdmFsdWUgbm93LgorCisJKiBjcC1wYXJzZS55IChzaW1wbGVfc3RtdCk6IFVzZSBleHByX25vX2NvbW1hcyBpbnN0ZWFkIG9mIGV4cHIgZm9yCisJY2FzZSBsYWJlbHMuCisKKwkqIGNwLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQWRkICdyaWdodCcgYW5kICdsZWZ0JyB0bworCXNoaWZ0IGNvdW50IHdhcm5pbmdzIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBlYWNoIG90aGVyLgorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9kZWNsLCBncm9rZGVjbGFyYXRvcik6IFJlcG9ydCBvdmVyZmxvd3MgaW4KKwlzdG9yYWdlIHNpemVzLgorCShidWlsZF9lbnVtZXJhdG9yKTogUmVwb3J0IG92ZXJmbG93cyBvbiBlbnVtZXJhdG9ycy4KKwkqIGNwLWRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IExpa2V3aXNlLgorCSogY3AtcGFyc2UueSAodW5hcnlfZXhwcik6IFdhcm4gYWJvdXQgb3ZlcmZsb3dzIGluIHBhcnNlci1idWlsdAorCXVuYXJ5IGV4cHJlc3Npb25zLgorCSogY3AtdHlwZWNrLmMgKGNfc2l6ZW9mKTogQ2FsbCBmb3JjZV9maXRfdHlwZSBvbmx5IGZvciBJTlRFR0VSX0NTVC4KKwkoYnVpbGRfY19jYXN0KTogSWdub3JlIGFueSBpbnRlZ2VyIG92ZXJmbG93IGNhdXNlZCBieSBhIGNhc3QuCisJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBXYXJuIGlmIHNvdXJjZSBoYWQgb3ZlcmZsb3cgaW4gZm9sZGluZy4KKwkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IENoZWNrIGNvbnZlcnNpb25zIGluIGlmLXRoZW4tZWxzZQorCWV4cHJlc3Npb25zLgorCSogY3AtdHJlZS5oIChjb252ZXJ0X2FuZF9jaGVjaywgb3ZlcmZsb3dfd2FybmluZywKKwl1bnNpZ25lZF9jb252ZXJzaW9uX3dhcm5pbmcpOiBBZGQgcHJvdG90eXBlcyBmb3IgZm5zIGluIGMtY29tbW9uLmMuCisKKwkqIGNwLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYWtlIHRoZSBhcnJheXMgMjAwIGxvbmcgdG8KKwlsZWF2ZSBlbm91Z2ggcm9vbSBmb3IgbW9zdCBuYW1lcy4KKworCSogY3AtZGVjbC5jIChsb29rdXBfbGFiZWwpOiBSZXR1cm4gYSBOVUxMX1RSRUUgaWYgbm90IHdpdGhpbiBhCisJZnVuY3Rpb24uCisJKiBjcC1wYXJzZS55ICh1bmFyeV9leHByLCBBTkRBTkQgaWRlbnRpZmllcik6IEhhbmRsZSBsb29rdXBfbGFiZWwKKwlyZXR1cm5pbmcgYSBOVUxMX1RSRUUuCisKKwkqIGNwLW1ldGhvZC5jIChkdW1wX2luaXQpOiBHcm9rIGEgRklFTERfREVDTCBhcyB3ZWxsLgorCisJKiBjcC1kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IE1vdmUgc2V0dGluZyBvZiB0aGUgREVDTF9SRVNVTFQncworCWNvbnRleHQgYW5kIGNhbGxpbmcgc2V0am1wX3Byb3RlY3QgYWZ0ZXIgcG9wbGV2ZWwsIHNvIHdlIGhhdmUgYQorCXZhbGlkIERFQ0xfSU5JVElBTCBmb3IgdGhlIGZuZGVjbCAobm90IGFuIGVycm9yX21hcmtfbm9kZSkuCisKKwlNb24gSmFuIDI1IDExOjA0OjIzIDE5OTMgIE5pa2xhcyBIYWxscXZpc3QgIChuaWtsYXMgYXQgZGVsbGEuYXBwbGkuc2UpCisKKwkqIGNwLXBhcnNlLnkgKGNvbXBvbmVudF9kZWNsKTogSGFuZGxlIGFub255bW91cyB1bmlvbnMgYXMgc3RhdGljCisJY2xhc3MgbWVtYmVycy4KKwkqIGNwLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEaXR0by4KKworCSogY3AtZGVjbC5jIChzaGFkb3dfdGFnKTogRW1pdCBlcnJvciBtZXNzYWdlIGlmIHN0YXRpYyBvciBleHRlcm4KKwlpcyBzcGVjaWZpZWQgYXMgcGVyIEFSTSA3LjEuMS4KKyAgICAKKyAgICAgICAgKiBjcC1kZWNsMi5jIChmaW5pc2hfYW5vbl91bmlvbik6IElzc3VlIGVycm9yIGlmIGEgZ2xvYmFsCisJYW5vbnltb3VzIHVuaW9uIGlzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHJlbW92ZSBvbGQgZnVubnkgZXJyb3IKKwlhYm91dCBzb21lIG9wdGltaXplciBmYWlsaW5nLgorCisgICAgICAgICogY3AtY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IENvcnJlY3RlZCBlcnJvciBtZXNzYWdlIGNvbmNlcm5pbmcKKwlhbm9ueW1vdXMgY2xhc3Nlcy4KKworCSogY3AtbGV4LmMgKGNoZWNrX2Zvcl9taXNzaW5nX3NlbWljb2xvbik6IEFsbG93IHRyYWlsaW5nIHN0b3JhZ2UKKwlzcGVjaWZpZXJzLgorCisJRnJpIEphbiAyOSAwOTozOToxNyAxOTkzICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzIGF0IGRlbGxhKQorCisJKiBjcC1wYXJzZS55IChjb21wb25lbnRfZGVjbCk6IE5lc3RlZCB1bmlvbnMsIGVudW1zIGFuZCBzdHJ1Y3RzCisJc2hvdWxkIGhhdmUgdGhlaXIgVFlQRV9ERUNMcyBpbiB0aGUgVFlQRV9GSUVMRFMgc2xvdCBvZiB0aGUKKwljb250YWluaW5nIHR5cGUgc28gdGhlIGFjY2VzcyBmbGFncyBldmVudHVhbGx5IHdpbGwgZ2V0IGNvcnJlY3RseQorCXNldC4KKworCSogY3AtdHlwZTIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IENoZWNrIGZvciB0aGUgYWdncmVnYXRlIGNvbmRpdGlvbnMKKwlkZXNjcmliZWQgaW4gQVJNIDguNC4xLgorCisJTW9uIE1heSAgMyAxOToxMDoyOCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLWxleC5jIChyZWFsX3l5bGV4KTogRG9uJ3Qgd2FybiBhYm91dCBmbG9hdGluZyBwb2ludCBvdXQgb2YKKwlyYW5nZSBpZiB0YXJnZXQgZmxvYXRpbmctcG9pbnQgZm9ybWF0IGlzIElFRUUuCisKKwkqIGNwLWNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBQcm9tb3RlIHVuc2lnbmVkIGJpdGZpZWxkcyB0byBzaWduZWQKKwlpbnQgaWYgdGhlIGZpZWxkIGlzbid0IGFzIHdpZGUgYXMgYW4gaW50LgorCisJKiBjcC1zZWFyY2guYyAoZGZzX3B1c2hkZWNscyk6IFVzZSB3YXJuaW5nX3dpdGhfZGVjbCwgc28gd2UgZ2l2ZSB0aGUKKwlsaW5lIG51bWJlciBvZiB0aGUgb2ZmZW5kaW5nIG1ldGhvZCBkZWNsYXJhdGlvbiwgcmF0aGVyIHRoYW4gdGhlCisJbGluZSBudW1iZXIgb2YgdGhlIGN1cmx5LWJyYWNlIHRoYXQgZW5kcyB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKworCU1vbiBNYXkgIDMgMTg6MDQ6MTUgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jdnQuYyAoY29udmVydCk6IFdoZW4gZG9pbmcgaW50LT5lbnVtIGNvbnZlcnNpb25zLCBhbHdheXMgY2FsbAorCXBlZHdhcm4sIGV2ZW4gaWYgd2UgZGlkbid0IGdpdmUgYC1wZWRhbnRpYycuCisKKwkqIGNwLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBBZGQgZXh0ZXJuIGRlY2wgb2YKKwlgZmxhZ19leHRlcm5hbF90ZW1wbGF0ZXMnLgorCisJKiBjcC1sZXguYyAoY2hlY2tfbmV3bGluZSk6IFdhcm4gaWYgdGhlcmUncyBhbnl0aGluZyBhZnRlciBhCisJYCNwcmFnbWEgaW50ZXJmYWNlJy4KKworCU1vbiBNYXkgIDMgMTI6Mzk6NDkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBjcC1jbGFzcy5jIChmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBVc2UgYHdhcm5pbmcnIG9uIGEgY2xhc3Mgdy8gYQorCXByaXZhdGUgZHRvciBhbmQgbm8gZnJpZW5kcywgc28gdGhlIGxpbmUgbnVtYmVyIGNvbWVzIG91dCByaWdodC4gIEFsc28KKwlvbmx5IGVtaXQgdGhpcyB3YXJuaW5nIHdoZW4gYGV4dHJhX3dhcm5pbmdzJyBpcyB0cnVlLgorCisJKiBjcC10eXBlMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBEb24ndCBhbGxvdyB1c2Ugb2YgYW4KKwlpbml0aWFsaXplciBsaXN0IGZvciBhIGNsYXNzIHdpdGggcHJpdmF0ZSBvciBwcm90ZWN0ZWQgbWVtYmVycy4KKworCVNhdCBNYXkgIDEgMTU6MDc6MjQgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0Bwb3NlaWRvbi5jeWdudXMuY29tKQorCisJKiBjcC1kZWNsLmMgKHN0YXJ0X2RlY2wsIHN0YXJ0X2Z1bmN0aW9uKTogQWRkIGEgbmV3IGZsYWcKKwktZmV4dGVybmFsLXRlbXBsYXRlcy4gIFVzZSBmbGFnX2V4dGVybmFsX3RlbXBsYXRlcyB0byBkZXRlcm1pbmUgd2hlbgorCXRlbXBsYXRlIGRlZmluaXRpb25zIHNob3VsZCBiZSBtYWRlIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQKKwlhY2Nlc3NpYmxlLiAgVGhpcyBwZXJtaXRzIG5vbi1leHBvbmVudGlhbCBncm93dGggaW4gb2JqZWN0IGZpbGVzCisJdGhhdCB1c2UgdGVtcGxhdGVzLgorCSogY3AtZGVjbDIuYyAobGFuZ19mX29wdGlvbnMpOiBMaWtld2lzZS4KKwkqIGNwLWxleC5jIChyZWluaXRfcGFyc2VfZm9yX21ldGhvZCwgY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKToKKwlMaWtld2lzZS4KKwkqIGNwLXBhcnNlLnkgKHRlbXBsYXRlX2luc3RhbnRpYXRlX29uY2UpOiBMaWtld2lzZS4KKwkqIGNwLXB0LmMgKGVuZF90ZW1wbGF0ZV9kZWNsLCBpbnN0YW50aWF0ZV9tZW1iZXJfdGVtcGxhdGVzLAorCWluc3RhbnRpYXRlX3RlbXBsYXRlLCBlbmRfdGVtcGxhdGVfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgorCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IExpa2V3aXNlLgorCisJRnJpIEFwciAzMCAxODo1MDowMCAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKwkqIGNwLXNwZXcuYyAoYXJiaXRyYXRlX2xvb2t1cCk6IElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICdbJywgdGhlbgorCWhhdmUgdGhlIGNvbXBpbGVyIGFzc3VtZSBpdCdzIGFuIGV4cHJlc3Npb24gaW5zdGVhZCBvZiBhIHR5cGUuCisKKwlGcmkgQXByIDMwIDE0OjM5OjI4IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAcG9zZWlkb24uY3lnbnVzLmNvbSkKKworCSogY3AtY2xhc3MuYyAobWF5YmVfZml4dXBfdnB0cnMpOiBVc2UgdGhlIFZGX05PUk1BTF9WQUxVRSBvZiB0aGUKKwl2ZmllbGRzIHRvIGdldCB0aGUgYmluZm8gdG8gZ2V0IHRoZSB2dGFibGUsIHNvIHRoYXQgd2UgbWF5IHBpY2sgdXAKKwl0aGUgbW9zdCBkZXJpdmVkIHZlcnNpb24gb2YgdGhlIHZ0YWJsZS4KKworCSogY3AtY2xhc3MuYyAoZmluaXNoX2Jhc2Vfc3RydWN0KTogQWx3YXlzIHNldCB0aGUgVkZfTk9STUFMX1ZBTFVFIHNvCisJdGhhdCBtYXliZV9maXh1cF92cHRycyBjYW4gZ2V0IHRoZSBtb3N0IGRlcml2ZWQgdnRhYmxlLgorCitGcmkgSnVuIDI1IDE0OjAwOjE3IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlnLnN1YjogQ29udmVydCAuLi4tc3lzdnI0IGludG8gLi4uLXN5c3Y0LgorCisJKiBjb25maWcvbTY4ay9uZXdzLmggKENQUF9QUkVERUZJTkVTKTogSGF2ZSB0d28gYWx0ZXJuYXRpdmVzLAorCW9uZSBmb3IgbW90b3JvbGEgYW5kIG9uZSBmb3Igbm90IG1vdG9yb2xhLgorCisJKiBjb25maWcvbTY4ay90b3dlci1hcy5oLCBtb3QzMzAwLmgsIG02OGt2NC5oLCBocDMyMC5oLCBhbWl4Lmg6CisJKiBjb25maWcvbTY4ay8zYjEuaCwgY3Jkcy5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBfX21vdG9yb2xhX18uCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IElmIFRBUkdFVCBpcyB2b2xhdGlsZSBtZW0gcmVmLCByZXR1cm4gaXQuCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBBZGQgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzLgorCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMuCisKK0ZyaSBKdW4gMjUgMTM6MzM6MzkgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLWhwdXguaCAoTElOS19TUEVDKTogU2VhcmNoIHNoYXJlZCBsaWJyYXJpZXMgYnkgZGVmYXVsdDsgdHVybgorCW9mZiBzaGFyZWQgbGlicmFyeSBzZWFyY2hpbmcgb2YgLXN0YXRpYyBpcyBzcGVjaWZpZWQuCisJKiBwYS1naHB1eC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKworCSogcGEuaCAoVEFSR0VUX1NIQVJFRF9MSUJTKTogRGVsZXRlIHN3aXRjaCBhbmQgYWxsIHJlZmVyZW5jZXMgdG8KKwl0aGUgc3dpdGNoLgorCSogcGEuYzogUmVmZXJlbmNlcyB0byBUQVJHRVRfU0hBUkVEX0xJQlMgZGVsZXRlZC4KKwkqIHBhLm1kOiBMaWtld2lzZS4KKworCSogcGEtdXRhaG1hY2guaCAoVEFSR0VUX0RFRkFVTFQpOiBBbGxvdyBpbmRleGluZyBvbiBNYWNoIHBvcnRzLgorCSogcGExLXV0YWhtYWNoLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCisJKiBwYS5oIChUQVJHRVRfRElTQUJMRV9JTkRFWElORyk6IENsZWFuIHVwIGNvbW1lbnRzLgorCitGcmkgSnVuIDI1IDAwOjUwOjQ4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9leHByKTogSWdub3JlIFNVR0dFU1RfUkVHIGlmIHRhcmdldCBpcyB2b2xhdGlsZS4KKworCSogY29uZmlnL21pcHMvbWlwcy5tZCAobmVnZGkyLCBuZWdkaTJfaW50ZXJuYWwpOiBSZW5hbWVkIGZyb20gbmVnZGkzLi4uCisKK1RodSBKdW4gMjQgMDA6MzE6MjcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0B3b29rdW16LmdudS5haS5taXQuZWR1KQorCisJKiBnY2MuYyAob3B0aW9uX21hcCk6IE1ha2UgLS12ZXJzaW9uIGFsaWFzIGZvciAtZHVtcHZlcnNpb24uCisKK1dlZCBKdW4gMjMgMDc6NTA6MjEgMTk5MyAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcm9tcC5jIChvdXRwdXRfcHJvbG9ndWUpOiBEZWxldGUgdW51c2VkIHZhciwgSU5TTi4KKwkob3V0cHV0X2VuY29kZWRfb2Zmc2V0KTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfZXBpbG9ndWUpOiBNaW5vciBjaGFuZ2VzIHRvIHRyYWNlYmFjayB0YWJsZTsgY2FsbAorCW5ldyBvdXRwdXRfZW5jb2RlZF9vZmZzZXQuCisJKHJvbXBfZGVidWdnZXJfe2F1dG8sYXJnfV9jb3JyZWN0aW9uKTogTmV3IGZ1bmN0aW9ucy4KKwkqIHJvbXAuaCAoREJYX1JFR1BBUk1fU1RBQlNfTEVUVEVSLCBERUJVR0dFUl97QVVUTyxBUkd9X09GRlNFVCk6CisJTmV3IG1hY3Jvcy4KKworCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IFdoZW4gcmVwbGFjaW5nIGEgdXNlIG9mIGEKKwlyZWdpc3RlciB3aXRoIHdoYXQgaXQgd2FzIHNldCB0bywgZG9uJ3QgZG8gaXQgd2hlbiBlaXRoZXIgdGhlCisJZGVzdGluYXRpb24gb3Igc291cmNlIG9mIHRoZSBjb3B5IGlzIHNldCBpbiB0aGUgaW5zbi4KKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogUHJvcGVybHkgbWFrZSBqdW1wIGludG8gc3RvcmUtZmxhZworCXNlcXVlbmNlIHdoZW4gdGhlIGp1bXAgY2FuJ3QgYmUgcmV2ZXJzZWQgYnV0IHRoZSBUUlVFIGJyYW5jaAorCWlzIGNvbnN0MF9ydHguIAorCisJKiBleHByLmMgKGV4cGFuZF9leHByKTogU2V0IElHTk9SRSBpZiB0YXJnZXQgaXMgY29uc3QwX3J0eCBvcgorCXJlc3VsdCB0eXBlIGlzIFZPSUQuCisJTW92ZSBtb3N0IElHTk9SRSBwcm9jZXNzaW5nIHRvIG9uZSBwbGFjZSB0byBhdm9pZCBleHBhbmRpbmcgdGhpbmdzCisJdGhhdCBkb24ndCBuZWVkIHRvIGJlIGV4cGFuZGVkLgorCShleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUiwgY2FzZSBDT05EX0VYUFIpOiBJZiBJR05PUkUsIGRvbid0CisJZXhwYW5kIGFueXRoaW5nIHdlIGRvbid0IGhhdmUgdG8uCisJKGV4cGFuZF9leHByLCBjYXNlIENPTlZFUlRfRVhQUik6IERvbid0IGRlYWwgd2l0aCBJR05PUkUgaGVyZS4KKworV2VkIEp1biAyMyAwNzo0NzozMiAxOTkzICBKb2huIEYgQ2FyciAgKGpmY0BBdGhlbmEubWl0LmVkdSkKKworCSogcmVncy5oIChzY3JhdGNoX2xpc3QsIHNjcmF0Y2hfYmxvY2ssIHNjcmF0Y2hfbGlzdF9sZW5ndGgpOiBOZXcgdmFycy4KKwkqIHJlbG9hZDEuYyAobWFya19zY3JhdGNoX2xpdmUpOiBOZXcgZnVuY3Rpb24uCisJKHJlbG9hZCk6IENhbGwgaXQgb24gZWFjaCBTQ1JBVENILgorCUZyZWUgc2NyYXRjaCBsaXN0IGFuZCBibG9jay4KKwkoc3BpbGxfaGFyZF9yZWcpOiBSZWFsbG9jYXRlIGFueSBTQ1JBVENIIHdob3NlIHJlZ2lzdGVyIHdlIHdhbnQgdG8KKwlzcGlsbC4KKwkqIGxvY2FsLWFsbG9jLmMgKHNjcmF0Y2hfYmxvY2ssIHNjcmF0Y2hfbGlzdHssX2xlbmd0aH0sIHNjcmF0Y2hfaW5kZXgpOgorCU5ldyB2YXJpYWJsZXMuCisJKGxvY2FsX2FsbG9jKTogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlbS4KKwkoYWxsb2NfcXR5X2Zvcl9zY3JhdGNoKTogQ2FuIGFsbG9jYXRlIGxpa2VseS1zcGlsbGVkIHJlZ2lzdGVyCisJY2xhc3NlcyBmb3IgU0NSQVRDSC4KKwkoYmxvY2tfYWxsb2MpOiBMaWtld2lzZSBmb3IgcmVncyBpbiBzbWFsbCByZWdpc3RlciBjbGFzc2VzLgorCU9ubHkgYWxsb2NhdGUgYSBTQ1JBVENIIGlmIGl0IGNhbiBmaXQgaW4gdGhlIGJsb2NrIHdlIG1ha2UuCisJRG9uJ3QgbWFyayByZWdzIHVzZWQgaW4gU0NSQVRDSCBsaXZlIGhlcmU7IGluc3RlYWQsIG1ha2UgZW50cnkgaW4KKwluZXcgdGFibGVzLgorCitUdWUgSnVuIDIyIDE5OjUyOjA4IDE5OTMgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKKworCSogZW1pdC1ydGwuYyAoY29weV9ydHhfaWZfc2hhcmVkKTogSW4gYEUnIGNhc2UsIGdldCB0aGUgbGVuZ3RoCisJYmVmb3JlIGNvcHlpbmcsIGFuZCBkb24ndCBnZXQgaXQgYWdhaW4gYWZ0ZXIuCisKK1R1ZSBKdW4gMjIgMTA6NTA6NTYgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiB0b3BsZXYuYyAocmVwb3J0X2Vycm9yX2Z1bmN0aW9uKTogQ2hhbmdlIGZvcm1hdCBvZiB0aGUKKwlpbmNsdWRlZC1maWxlIHN0YWNrIHRvIGJlIG1vcmUgcmVhZGFibGUuCisJKiBjY2NwLmMgKHByaW50X2NvbnRhaW5pbmdfZmlsZXMpOiBMaWtld2lzZS4KKworTW9uIEp1biAyMSAxOToyMToxOCAxOTkzICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCwgY2FzZSAnSicpOiBXcml0ZSBvdXQgc2hpZnQgY291bnQKKwlvZiAwLCBub3QgMzIgZm9yIGJpdCAzMSBvZiBDQ1IuCisKK1NlZSBDaGFuZ2VMb2cuNyBmb3IgZWFybGllciBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvZ2NjL0NoYW5nZUxvZy45IGIvZ2NjL0NoYW5nZUxvZy45Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZDhjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvQ2hhbmdlTG9nLjkKQEAgLTAsMCArMSw5OTY4IEBACitUdWUgRmViIDI4IDE2OjM2OjU4IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgorCisJKiByczYwMDAvZWFiaS5hc20gKF9fZWFiaSk6IENvcnJlY3RseSByZWxvYWQgcjMwIGluIHRoZSBjYXNlIHdoZXJlCisJdGhlIEdPVCBwb2ludGVycyBoYXZlIHRvIGJlIHJlbG9jYXRlZC4KKworCSogcnM2MDAwL3JzNjAwMC5tZCAoZmxvYXRzaWRmMiwgZmxvYXR1bnNzaWRmMik6IEFkZAorCVRBUkdFVF9TT0ZUX0ZMT0FUIGNvbmRpdGlvbmFsIGRyb3BwZWQgaW4gdGhlIGxhc3QgY2hhbmdlLgorCShtb3ZkZiBpbnNucyk6IEFkZCAtbXNvZnQtZmxvYXQgdmFyaWVudHMgdGhhdCBkbyBub3QgdXNlICdmJyByZWdpc3RlcgorCWNvbnN0cmFpbnRzLgorCShtb3Z0aSk6IE9uIFBvd2VyUEMsIGRvbid0IGNsb2JiZXIgdGhlIE1RIHJlZ2lzdGVyLCBzaW5jZSBpdCBkb2Vzbid0CisJZXhpc3QuICBBZGQgYWJvcnQgdG8gZGVmYXVsdCBzd2l0Y2ggY2FzZS4KKwkoc3RvcmVfbXVsdGlwbGUsIGxvYWRfbXVsdGlwbGUpOiBUZXN0IGZvciBUQVJHRVRfUE9XRVIgaW5zdGVhZAorCW9mICFUQVJHRVRfUE9XRVJQQyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgTVEgcmVnaXN0ZXIgZXhpc3RzLgorCitUdWUgRmViIDI4IDE0OjQ2OjQ4IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlIChleHRyYV9oZWFkZXJzKTogUmVuYW1lZCBmcm9tIGhlYWRlcl9maWxlcy4KKworCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEZWZlciBvdXRwdXQgb2Ygc3RhdGljIGlubGluZXMKKwlldmVuIGlmIG5vdCBvcHRpbWl6aW5nLCB0aGV5IG1heSBuZXZlciBiZSByZWZlcmVuY2VkLgorCitNb24gRmViIDI3IDE3OjA2OjQ3IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogQ2hlY2sgZm9yIHJlZHVuZGFudCBmaWxlIGJlZm9yZSBvcGVuaW5nIGluCisJcmVsYXRpdmUgcGF0aCBjYXNlLiAgRG9uJ3QgY2FsbCBmc3RhdCB1bm5lY2Vzc2FyaWx5LgorCitNb24gRmViIDI3IDExOjIwOjI5IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogbWlwcy5tZCAobXVsZGkzX2ludGVybmFsKTogQ2hhbmdlIGRtdWwgdG8gZG11bHQuCisKK01vbiBGZWIgMjcgMDI6MzA6NTQgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogcGEuYyAoaHBwYV9leHBhbmRfcHJvbG9ndWUpOiBEb24ndCBzYXZlIHRoZSBQSUMgcmVnaXN0ZXIgaW50bworCXRoZSBzdGFjayBmb3IgZnVuY3Rpb25zIHdoaWNoIGhhdmUgbm8gc3RhY2sgb2YgdGhlaXIgb3duLgorCitNb24gRmViIDI3IDAwOjQzOjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZy9nbnUuaCAoQVNNX1NQRUMpOiBNYWNybyByZW1vdmVkLgorCitTdW4gRmViIDI2IDIwOjIxOjUyIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogRml4IHR5cG8gaW4gcmVnK2NvbnN0IGNhc2UuCisKK1NhdCBGZWIgMjUgMTA6MjE6MTMgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBnY2MuYyAocHJpbnRfc2VhcmNoX2RpcnMpOiBOZXcgdmFyaWFibGUuCisJKGJ1aWxkX3NlYXJjaF9saXN0KTogTmV3IGZ1bmN0aW9uLgorCShwdXRlbnZfZnJvbV9wcmVmaXhlcyk6IENhbGwgaXQuCisJKG9wdGlvbl9tYXApOiBOZXcgb3B0aW9uIC0tcHJpbnQtc2VhcmNoLWRpcnMuCisJKHByb2Nlc3NfY29tbWFuZCk6IEhhbmRsZSBpdC4KKwkobWFpbik6IFByaW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYW5kIGV4ZWMvc3RhcnRmaWxlX3ByZWZpeGVzIGlmCisJLS1wcmludC1zZWFyY2gtZGlycyBnaXZlbi4KKworCSogTWFrZWZpbGUuaW4gKE1ha2VmaWxlKTogRGVsZXRlIGNvbmZpZy5ydW4gYWZ0ZXJ3YXJkcy4KKwkoZGlzdGNsZWFuKTogRGVsZXRlIGNvbmZpZy5ydW4uCisKK1NhdCBGZWIgMjUgMDg6MzY6NDAgMTk5NSAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgIChkYXZpZG1AY3MuYXJpem9uYS5lZHUpCisKKwkqIGFscGhhLmggKEFTTV9TUEVDKTogUGFzcyAtcGcgdG8gYXNzZW1ibGVyLgorCShGVU5DVElPTl9QUk9GSUxFUik6IERvIG5vdGhpbmc7IHRoZSBhc3NlbWJsZXIgZG9lcyBpdCBmb3IgdXMuCisKK1NhdCBGZWIgMjUgMDg6MjQ6MjcgMTk5NSAgSC5KLiBMdSAgIChoamxAbnluZXhzdC5jb20pCisKKwkqIGNvbmZpZ3VyZSAobmF0aXZlX3ByZWZpeCk6IE5ldzsgbGV0cyBzb21lIGhvc3RzIHB1dAorCWZpbGVzIGluIC91c3IgaW5zdGVhZCBvZiAvdXNyL2xvY2FsIGlmIG5vIC0tcHJlZml4IHNwZWNpZmllZC4KKworU2F0IEZlYiAyNSAwODowNzo1NiAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmggKFJUWF9DT1NUUyk6IEFkZCBjb3N0IG9mIEZGUy4KKworU2F0IEZlYiAyNSAwNjo1MjoyMiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBtaXBzLmMgKG1pcHNfZmlsbF9kZWxheV9zbG90KTogRml4IHR5cG8gaW4gY2FsbCB0byBGUF9SRUdfUC4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IElmIG9wZXJhbmQgbW9kZSBpcyBWT0lEbW9kZQorCWZvciBVTlNJR05FRF9GTE9BVCBhbmQgb3BlcmFuZCBsb29rcyBuZWdhdGl2ZSwgY2FuJ3Qgc2ltcGxpZnkuCisKKwkqIHJzNjAwMC5jIChsb3dfMzJfYml0X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGxvd18zMl9iaXRfb3BlcmFuZC4KKwkqIHJzNjAwMC5tZDogUmVtb3ZlIHVubmVlZGVkIHRlc3RzIG9uIEhPU1RfQklUU19QRVJfSU5UIGZyb20gCisJc29tZSBleHRyYSBjb25kaXRpb25zLgorCVVzZSBsb3dfMzJfYml0X29wZXJhbmQgZm9yIChwbHVzOkRJICh6ZXJvX2V4dGVuZDpESSAuLikgLi4pIGNhc2VzLgorCitTYXQgRmViIDI1IDAwOjQ5OjI5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZy94bS1nbnUuaCAoUE9TSVgpOiBEZWZpbmUgdGhpcyBtYWNyby4KKworCSogY29uZmlnL2dudS5oIChHTlVfQ1BQX1BSRURFRklORVMpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCisKK0ZyaSBGZWIgMjQgMTk6MTc6MjkgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAc25ha2UuY3MudXRhaC5lZHU+CisKKwkqIGNvbmZpZ3VyZSAoaHBwYTEuPy1ocC1ocHV4OSopOiBVc2UgaHB1eDkgY29uZmlndXJhdGlvbiBmaWxlcy4KKwkqIHBhLWhwdXg5LmgsIHBhLWdocHV4OS5oLCBwYTEtaHB1eDkuaCwgcGExLWdocHV4OS5oOiBOZXcKKwljb25maWd1cmF0aW9uIGZpbGVzLgorCitGcmkgRmViIDI0IDE1OjU1OjMzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogcmVvcmcuYyAocmVsYXhfZGVsYXlfc2xvdHMpOiBXaGVuIHNlYXJjaGluZyBmb3IgbmV4dCBDT0RFX0xBQkVMLAorCXVzZSBuZXh0X3JlYWxfaW5zbiBub3QgbmV4dF9hY3RpdmVfaW5zbi4KKworCSogc3RkYXJnLmgsIHZhLSouaCwgdmFyYXJncy5oICh2YV9lbmQpOiBFeHBhbmQgdG8gYSB2b2lkIGV4cHJlc3Npb24KKwlpbnN0ZWFkIG9mIG5vdGhpbmcuCisKKwkqIHNoLmggKFBBQ0tTVFJVQ1RfQklULCBUQVJHRVRfUEFDS1NUUlVDVCk6IENoYW5nZSB0byBQQURTVFJVQ1QuCisJQWRkIGNvbW1lbnQgc2F5aW5nIHRoYXQgdGhlIG9wdGlvbiBpcyBub3QgdXNlZnVsLgorCShUQVJHRVRfU1dJVENIRVMpOiBDaGFuZ2UgLW1wYWNrc3RydWN0IG9wdGlvbiB0byAtbXBhZHN0cnVjdC4KKwkoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBDaGFuZ2UgUEFDS1NUUlVDVCB0byBQQURTVFJVQ1QgY2hhbmdpbmcKKwlkZWZhdWx0IHZhbHVlIGZyb20gMzIgdG8gOC4KKworCSogZHdhcmZvdXQuYyAoUFVTSFNFQ1RJT05fRk9STUFUKTogQWRkIGEgbGVhZGluZyB0YWIuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQ09NUE9ORU5UX1JFRik6IERvbid0IGZldGNoIHVuYWxpZ25lZAorCWZpZWxkIGlmIHdlIG9ubHkgd2FudCBpdHMgYWRkcmVzcy4KKworCSogaTk2MC5jIChmcF9saXRlcmFsX29uZSwgZnBfbGl0ZXJhbF96ZXJvKTogRG9uJ3QgYWNjZXB0IFZPSURtb2RlLgorCShpOTYwX291dHB1dF9sZGNvbnN0KTogSW4gREZtb2RlIGNvZGUsIGRlbGV0ZSBjb2RlIHRvIGhhbmRsZSBGUF9SRUdfUAorCXRhcmdldC4gIEluIERGbW9kZSBhbmQgU0Ztb2RlIGNvZGUsIGRlbGV0ZSB0ZXN0IGZvciBIT1NUX0ZMT0FUX0ZPUk1BVAorCT09IFRBUkdFVF9GTE9BVF9GT1JNQVQuCisJKiBpOTYwLmggKFJFQUxfQVJJVEhNRVRJQyk6IERlZmluZS4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUGFzcyBhcmd1bWVudCBtb2RlIG5vdCBWT0lEbW9kZSB0byBmcF9saXRlcmFsLgorCisJKiBpOTYwLmggKENDMV9TUEVDKTogRG9uJ3Qgb3V0cHV0IGltcGxpY2l0IC1nc3RhYnMgb3IgLWdjb2ZmIG9wdGlvbgorCWlmIHVzZXIgZ2F2ZSBhbiBleHBsaWNpdCBvbmUuCisJKiB2eDk2MC1jb2ZmLmggKENDMV9TUEVDKTogTGlrZXdpc2UuCisKKwkqIGRieG91dC5jIChHREJfSU5WX1JFRl9SRUdQQVJNX1NUQUJTX0xFVFRFUik6IE5ldyBtYWNyby4KKwkoZGJ4b3V0X3Bhcm1zKTogRm9yIGdkYiwgb3V0cHV0IHVzZSBHREJfSU5WX1JFRl9SRUdQQVJNX1NUQUJTX0xFVFRFUgorCWZvciBwYXJhbWV0ZXJzIHBhc3NlZCBieSBpbnZpc2libGUgcmVmZXJlbmNlIGluIHJlZ2lzdGVycy4KKworCSogbWlwcy5jIChtaXBzX3NlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBBbHNvIGhhbmRsZSBTVUJSRUdzLgorCSogbWlwcy5tZCAobWFkc2kpOiBEb24ndCB1c2UgJysnIGNvbnN0cmFpbnQgaW4gYSBjbG9iYmVyLgorCShtYWRzaV9oaWdocGFydCwgdW1hZHNpX2hpZ2hwYXJ0KTogRGVsZXRlLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogRm9yIHBhcmFtZXRlcnMgcGFzc2VkIGluIG1lbW9yeSwgZGVsZXRlCisJb2Jzb2xldGUgY29kZSB0byBoYW5kbGUgcGFyYW1ldGVycyBjb252ZXJ0ZWQgYW5kIHN0b3JlZCBiYWNrIHRvCisJdGhlIHN0YWNrIHNsb3Qgd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCBpbi4KKwkoZGJ4b3V0X3JlZ19wYXJtcyk6IERlbGV0ZSBvYnNvbGV0ZSBpZmRlZmVkIG91dCBjb2RlLiAgQ29tYmluZQorCXJlZHVuZGFudCBQQVJNX1BBU1NFRF9JTl9NRU1PUlkgdGVzdHMuICBGb3IgY2FzZSB3aGVyZSBwYXJhbWV0ZXIKKwlsaXZlcyBpbiBtZW1vcnksIG91dHB1dCBzdGFiIGlmIGl0IGRvZXNuJ3QgbGl2ZSB3aGVyZSBpdCB3YXMgcGFzc2VkLgorCisJKiBzaC5jOiBDb3JyZWN0IHR5cG9zIGFuZCBmb3JtYXR0aW5nIHByb2JsZW1zLgorCShhZGRfY29uc3RhbnQsIGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUsCisJZmxhZ190cmFkaXRpb25hbCwgdGFibGVfbGFiKTogRGVsZXRlIHVubmVjZXNzYXJ5IGRlY2xhcmF0aW9ucy4KKwkoc2hfY3B1KTogQ2hhbmdlIHR5cGUgZnJvbSBhdHRyX2NwdSB0byBwcm9jZXNzb3JfdHlwZS4JCisJKG5lZWRfc2xvdCwgb3V0cHV0X3NoaWZ0LCBsc2hpZnRydF9pbnNucywgaG93c2hpZnQsCisJcG9wX29wZXJhbmQpOiBEZWxldGUuCisJKHByaW50X29wZXJhbmQsIG91dHB1dF9icmFuY2gpOiBEZWxldGUgY2FsbHMgdG8gbmVlZF9zbG90LgorCShzeW50aF9jb25zdGFudCk6IENvbW1lbnQgdGhhdCBpdCBkb2Vzbid0IHdvcmsuCisJKG91dHB1dF9tb3ZlZG91YmxlKTogSGFuZGxlIFBSRV9ERUMgZGVzdCBub3QgUE9TVF9JTkMgZGVzdC4KKwkob3V0cHV0X29wdGlvbnMpOiBEb24ndCB1c2UgZmxhZ190cmFkaXRpb25hbC4KKwkoc2hpZnRfaW5zbnMpOiBDb3JyZWN0IG51bWJlcnMgdG8gb3B0aW1hbCBzZXF1ZW5jZXMuCisJKHNoaWZ0X2Ftb3VudHMpOiBOZXcgdGFibGUuCisJKHNoaWZ0X2luc25zX3J0eCk6IE5ldyBmdW5jdGlvbi4KKwkoc2hpZnRpbnNucyk6IENvbWJpbmUgTFNISUZUUlQgYW5kIEFTSElGVCBjYXNlcy4KKwkoc2hpZnRjb3N0cyk6IFJldHVybiB0cnVlIGNvc3RzIG9mIHNoaWZ0cyBpbnN0ZWFkIG9mIGVzdGltYXRlIG9mIDEuCisJKGdlbl9hc2hpZnQpOiBIYW5kbGUgbmVnYXRpdmUgc2hpZnQgYW1vdW50cy4gIENhbGwgZ2VuX2xzaHJzaTNfbQorCWZvciBzaW5nbGUgYml0IExTSElGVFJULCBhbmQgZ2VuX2xzaHJpc2kzX2sgZm9yIG11bHRpcGxlIGJpdCBzaGlmdHMuCisJKGdlbl9zaGlmdHlfb3ApOiBIYW5kbGUgbmVnYXRpdmUgc2hpZnQgYW1vdW50cyBhdCB0b3AuICBHZW5lcmF0ZQorCW9wdGltYWwgc2VxdWVuY2VzIGZvciBBU0hJRlQgYW5kIExTSElGVFJULgorCShmaW5kX2JhcnJpZXIpOiBDb3JyZWN0IHBhdHRlcm4gZm9yIG1hdGNoaW5nIG1vdmEgaW5zdHJ1Y3Rpb25zLgorCShnZW5lcmFsX21vdnNyY19vcGVyYW5kKTogRGVsZXRlIHJlZHVuZGFudCB0ZXN0IGZvciAoTUVNIExBQkVMX1JFRikuCisJRG9uJ3QgcmVqZWN0IFBPU1RfSU5DIGFkZHJlc3MgZm9yIHNpemUgPiA0LgorCShnZW5lcmFsX21vdmRzdF9vcGVyYW5kKTogRG9uJ3QgcmVqZWN0IFBSRV9ERUMgYWRkcmVzcyBmb3Igc2l6ZSA+IDQuCisJKiBzaC5oOiBDb3JyZWN0IHR5cG9zIGFuZCBmb3JtYXR0aW5nIHByb2JsZW1zLgorCShNT0RFX0RJU1BfT0tfWzEyXSk6IERlbGV0ZS4KKwkoR09fSUZfTEVHSVRJTUFURV9JTkRFWCk6IERlbGV0ZSB1c2VzIG9mIE1PREVfRElTUF9PS19bMTJdLgorCShSVFhfQ09TVFMpOiBBZGQgTFNISUZUUlQuCisJKHRhYmxlX2xhYik6IERlbGV0ZSBkZWNsYXJhdGlvbi4KKwkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IE5ldyBlbnVtLgorCShzaF9jcHVfYXR0cik6IE5ldyBtYWNyby4KKwkoc2hfY3B1KTogQ2hhbmdlIHR5cGUgdG8gZW51bSBwcm9jZXNzb3JfdHlwZSB0byBhdm9pZCBpbmNvbXBsZXRlCisJZW51bSB0eXBlLgorCSogc2gubWQ6IENvcnJlY3QgdHlwb3MgYW5kIGZvcm1hdHRpbmcgcHJvYmxlbXMuCisJKGNwdSk6IFVzZSBzaF9jcHVfYXR0ciBub3Qgc2hfY3B1LgorCShhZGRkaTMsIHN1YmRpMywgdWRpdnNpMy0xLCBkaXZzaTMtMSwgbXVsc2kzX2NhbGwtMSwgYXNocnNpMl8xNiwKKwlhc2hyc2kyXzMxLCBkZWN0LCBjYXNlc2lfd29ya2VyKTogVXNlIGFyaXRoX3JlZ19vcGVyYW5kIG5vdAorCXJlZ2lzdGVyX29wZXJhbmQuCisJKGFzaGxzaTNfbiwgbHNocnNpM19uKTogRW5hYmxlIHBhdHRlcm4uICBTZXQgbGVuZ3RoIGNvcnJlY3RseS4KKwlVc2UgJyMnIHRvIG91dHB1dCBpdC4KKwkoYXNobHNpM19uKzEsIGxzaHJzaTNfbisxKTogTmV3IHBhdHRlcm5zIHRvIHNwbGl0IHNoaWZ0cy4KKwkoYXNobHNpMywgbHNocnNpMyk6IFVzZSBzaGlmdGJ5X29wZXJhbmQgaW5zdGVhZCBvZiBnZW5fc2hpZnR5X29wLgorCShsc2hsc2kzX20pOiBOZXcgcGF0dGVybiBmb3Igc2luZ2xlIGJpdCBzaGlmdHMuCisJKGxzaGxzaTNfayk6IE9ubHkgaGFuZGxlIG11bHRpcGxlIGJpdCBzaGlmdHMuCQorCShuZWdjKTogVXNlIElPUiBub3QgUExVUyB0byBzZXQgY2FycnkgYml0LgorCShwdXNoKzIsIHBvcCsyLCBtb3ZzaV9waSwgbW92ZGktMiwgbW92ZGZfay0xLCBtb3ZzZl9pLTEpOiBEZWxldGUuCisJKG1vdnNpX2ksIG1vdnFpX2ksIG1vdmhpX2kpOiBEZWxldGUgcmVkdW5kYW50IDwgYW5kID4gY29uc3RyYWludHMuCisJKG1vdnNmX2kpOiBEZWxldGUgaW5jb3JyZWN0IDwgYW5kID4gY29uc3RyYWludHMuCisKK0ZyaSBGZWIgMjQgMTM6MDc6NTUgMTk5NSAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CisKKwkqIGkzODYvaTM4Ni5tZCAoc2lueGYyLCBjb3N4ZjIpOiBEZWZpbmUuCisKK1RodSBGZWIgMjMgMTQ6MTQ6MjAgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiByczYwMDAuaC9yczYwMDAuaCAoUkVUVVJOX0FERFJfUlRYKTogQWRkIGRlZmluaXRpb24gdG8gc3VwcG9ydAorCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyBhbmQgX19idWlsdGluX2ZyYW1lX2FkZHJlc3Mgb24gdGhlCisJcnM2MDAwLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcgaW4gZysrIG9uCisJdGhlIHJzNjAwMC4gCisKK1RodSBGZWIgMjMgMTU6MjM6MjYgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9yczYwMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWxsIC1tcG93ZXIgc3dpdGNoZXMgc2V0CisJLW1tdWx0aXBsZSBieSBkZWZhdWx0LiAgUmVuYW1lIC1tbm8tZnAtcmVncyB0byAtbXNvZnQtZmxvYXQgYW5kCisJLW1mcC1yZWdzIHRvIC1taGFyZC1mbG9hdC4KKwkoVEFSR0VUX05PX0ZQUik6IFJlbmFtZSBhbGwgb2NjdXJhbmNlcyBvZiBtYWNybyB0byBiZSBlaXRoZXIKKwlUQVJHRVRfSEFSRF9GTE9BVCBvciBUQVJHRVRfU09GVF9GTE9BVC4KKwkoRlVOQ1RJT05fVkFMVUUpOiBJZiAtbXNvZnQtZmxvYXQsIGZsb2F0aW5nIHBvaW50IGdldHMgcmV0dXJuZWQgaW4KKwlyZWdpc3RlciAzLgorCShMSUJDQUxMX1ZBTFVFKTogRGl0dG8uCisJKFVTRV9GUF9GT1JfQVJHX1ApOiBEb24ndCB1c2UgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGlmCisJLW1zb2Z0LWZsb2F0LgorCShNT1ZFX01BWCk6IFVzZSBUQVJHRVRfTVVUSVBMRSBpbnN0ZWFkIG9mIFRBUkdFVF9QT1dFUiB0byBkZWNpZGUKKwl0byBtb3ZlIDE2IGJ5dGVzIGF0IGEgdGltZS4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogRG9uJ3QgYWxsb3cgaW5kZXggKyBiYXNlIHJlZ2lzdGVyCisJYWRkcmVzc2VzIGZvciBERidzIGlmIC1tc29mdC1mbG9hdC4KKworCSogcnM2MDAwL3JzNjAwMC5jIChQT1dFUl9NQVNLUyk6IE9yIGluIE1BU0tfTVVMVElQTEUuCisJKHByb2Nlc3Nvcl90YXJnZXRfdGFibGUpOiBTZXQgTUFTS19NVUxUSVBMRSBmb3IgUG93ZXIgQ1BVcyBhbmQKKwlkb24ndCBzZXQgaXQgZm9yIFBvd2VyUEMgQ1BVcy4KKwkob3V0cHV0X3Byb2xvZyk6IElmIC1tcmVsb2NhdGFibGUgYW5kIGEgR09UIHBvb2wgaXMgdXNlZCwgbWFyayB0aGUgbGluaworCXJlZ2lzdGVyIGFzIGJlaW5nIGxpdmUuICBMb2FkIHRoZSBHT1QgYWRkcmVzcyB2aWEgYSBibCBpbnN0cnVjdGlvbi4KKwkob3V0cHV0X3RvYyk6IElmIFYuNCBzZW1hbnRpY3MsIG1ha2UgdGhlIFRPQyBsYWJlbCBiZSB0aGUgZGlmZmVyZW5jZQorCWZyb20gdGhlIHN0YXJ0IG9mIHRoZSBUT0Mgc2VjdGlvbiwgcmF0aGVyIGEgbGFiZWwgdGhlIGFzc2VtYmxlciBoYXMgdG8KKwlyZWNvZ25pemUgYXMgYmVpbmcgYW4gb2Zmc2V0LgorCisJKiByczYwMDAvcnM2MDAwLm1kIChhbGwgZmxvYXRpbmcgcG9pbnQgb3BzKTogRm9yIGFsbCBvcGVyYXRpb25zLAorCWNoZWNrIGlmIGZsb2F0aW5nIHBvaW50IGlzIGFsbG93ZWQuCisJKG1vdnRpKTogVXNlIFRBUkdFVF9NVUxUSVBMRSB0byBkZWNpZGUgd2hldGhlciB0byBleHBhbmQgbW92dGkKKwlpbnN0ZWFkIG9mIFRBUkdFVF9QT1dFUi4KKworCSogcnM2MDAwL3N5c3Y0LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IE1vdmUgaGVyZSBmcm9tIGVhYmkuaCwgc28gdGhlCisJdmFyaW91cyBtYWNybyBvdmVycmlkZXMgZG9uJ3QgaGF2ZSB0byBiZSByZWNvZGVkIGZvciBlYWJpIGFzIHdlbGwKKwlhcyBTeXN0ZW0gVi40LiAgQWRkIC1tc3RyaWN0LWFsaWduIHRvIHNldCBTVFJJQ1RfQUxJR05NRU5UIHRvIDEuCisJQWRkIC1tcmVsb2NhdGFibGUgdG8gc3BlY2lmeSB0aGF0IHRoYXQgdGhlIGRhdGEvdGV4dCBzZWN0aW9ucyBtYXkKKwliZSBjb3BpZWQgZWxzZXdoZXJlLCBidXQgbm90IHRydWUgVi40IHN0eWxlIFBJQy4KKwkoVE9DX1NFQ1RJT05fRlVOQ1RJT04pOiBIYW5kbGUgVEFSR0VUX1JFTE9DQVRBQkxFLgorCShUT0NfU0VDVElPTl9BU01fT1ApOiBQdXQgcXVvdGVzIGFyb3VuZCAiLmdvdCIuCisJKE1JTklNQUxfVE9DX1NFQ1RJT05fQVNNX09QKTogUHV0IHF1b3RlcyBhcm91bmQgIi5nb3QxIi4KKworCSogcnM2MDAwL2VhYmkuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogTW92ZSB0byByczYwMDAvc3lzdjQuaC4KKwkoTUlOSU1BTF9UT0NfU0VDVElPTl9BU01fT1ApOiBVc2UgIi5nb3QyIiBzZWN0aW9uIGlmCisJLW1yZWxvY2F0YWJsZS4KKworCSogcnM2MDAwL2VhYmkuYXNtOiBOZXcgZmlsZSB0byBsb2FkIHVwIHJlZ2lzdGVyIDIgb3IgcmVsb2NhdGUgdGhlIC5nb3QyCisJYWRkcmVzc2VzLiAgQ2FsbGVkIGZyb20gbWFpbi4KKworCSogcnM2MDAwL3QtcnM2MDAwOiBCdWlsZCB0d28gbGliZ2NjLmEncywgb25lIGZvciBub3JtYWwgdXNlLCBhbmQgb25lCisJdXNlZCB3aGVuIGNvbXBpbGluZyB3aXRoIC1tc29mdC1mbG9hdC4KKworCSogcnM2MDAwL3QtZWFiaTogTmV3IGZpbGUsIGJ1aWxkIHR3byBsaWJnY2MuYSdzLCBvbmUgZm9yIG5vcm1hbCB1c2UsCisJYW5kIG9uZSB1c2VkIHdoZW4gY29tcGlsaW5nIHdpdGggLW1zb2Z0LWZsb2F0LiAgQWRkIHN1cHBvcnQgZm9yIGVhYmkKKwltb2R1bGUgdG8gcmVsb2NhdGUgdGhlIC5HT1QyIHNlY3Rpb24gdG8gc3VwcG9ydCAtbW11bHRpcGxlLgorCisJKiBjb25maWd1cmUgKHBvd2VycGMtKi1lYWJpKik6IFVzZSB0LWVhYmksIG5vdCB0LXJzNjAwMC4KKworVGh1IEZlYiAyMyAwNjo1ODo0NiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAobGQpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2ggdG8gbWFrZSBjb250aW51YXRpb24gbGluZS4KKworCSogaTM4Ni93aW5udC5jIChnZW5fc3RkY2FsbF9zdWZmaXgpOiBEZWxldGVkLgorCSogd2lubnQvd2lubnQuaCAoTU9ESUZZX0FTU0VNQkxFUl9OQU1FKTogRGVsZXRlZC4KKwkoVkFMSURfTUFDSElORV9ERUNMX0FUVFJJQlVURVMpOiBEZWxldGVkLgorCSogdmFyYXNtLmMgKG1ha2VfZGVjbF9ydGwpOiBSZW1vdmUgcmVmZXJlbmNlIHRvIE1PRElGWV9BU1NFTUJMRVJfTkFNRS4KKworCSogYWxwaGEuaCAoUlRYX0NPU1RTKTogVXBkYXRlIGNvc3RzIGZvciBGUCBvcGVyYXRpb25zLgorCitUaHUgRmViIDIzIDAwOjEzOjA1IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisgICAgICAgICogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogV2FybiBpZiwgaW4gYSBjb21wYXJpc29uLCBhIHNpZ25lZAorICAgICAgICBvcGVyYW5kIHRoYXQgbWlnaHQgYmUgbmVnYXRpdmUgaXMgY29udmVydGVkIHRvIHVuc2lnbmVkLgorCitXZWQgRmViIDIyIDIxOjMyOjQ4IDE5OTUgIFBldGVyIFNjaGF1ZXIgIChQZXRlci5TY2hhdWVyQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCisKKwkqIGNvbmZpZy9zdnI0LmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBOZXcgbWFjcm8uCisKK1dlZCBGZWIgMjIgMjA6Mjk6MzEgMTk5NSAgSi5ULiBDb25rbGluICA8anRjQG5ldGJzZC5vcmc+CisKKwkqIGNvbmZpZ3VyZSAoKi0qLW5ldGJzZCopOiBTZXQgdG1ha2VfZmlsZSB0byB0LWxpYmMtb2suCisKKwkqIGNvbmZpZy94bS1uZXRic2QuaCwgaTM4Ni94bS1uZXRic2QuaCwgbTY4ay94bS1uZXRic2QuaDogTmV3IGZpbGVzLgorCSogc3BhcmMveG0tbmV0YnNkLmg6IE5ldyBmaWxlLgorCSogbnMzMmsveG0tbmV0YnNkLmg6IENoYW5nZWQgdG8gdXNlIGNvbmZpZy94bS1uZXRic2QuaCBhbmQKKwluczMyay94bS1uczMyay5oLgorCSogY29uZmlndXJlIChpMzg2LSotbmV0YnNkKik6IFVzZSBpMzg2L3htLW5ldGJzZC5oLgorCShtNjhrLSotbmV0YnNkKik6IFVzZSBtNjhrL3htLW5ldGJzZC5oLgorCShzcGFyYy0qLW5ldGJzZCopOiBVc2Ugc3BhcmMveG0tbmV0YnNkLmguCisKKwkqIGNwcHAuYywgY29sbGVjdDIuYzogUmVtb3ZlZCBfX05ldEJTRF9fIGZyb20gY29uZGl0aW9uYWwuCisJKiBjb2xsZWN0Mi5jOiBEZWNsYXJlIHN0cmVycm9yIGlmIEhBVkVfU1RSRVJST1IgaXMgZGVmaW5lZDsKKwlvdGhlcndpc2UgZGVjbGFyZSBzeXNfZXJybGlzdCBhbmQgc3lzX25lcnIuCisKK1dlZCBGZWIgMjIgMTk6MDc6MDggMTk5NSAgTmlrbGFzIEhhbGxxdmlzdCAgKG5pa2xhc0BhcHBsaS5zZSkKKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYzEuYSk6IFJ1biByYW5saWIuCisKK1dlZCBGZWIgMjIgMTg6NDY6NTAgMTk5NSAgWXVyeSBTaGV2Y2h1ayAgKHNpemlmQGJvdGlrLnlhcm9zbGF2bC5zdSkKKworCSogZXhwbG93LmMgKG1lbW9yeV9hZGRyZXNzKTogQWRkIG1pc3NpbmcgImVsc2UiLgorCitXZWQgRmViIDIyIDE1OjI5OjU4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisgICAgICAgICogY29sbGVjdDIuYyAobGlic2VsZWN0KTogTmV3IGZ1bmN0aW9uIGZvciBwYXNzaW5nIHRvIHNjYW5kaXIuCisgICAgICAgIChsaWJjb21wYXJlKTogRGl0dG8uCisgICAgICAgIChsb2NhdGVsaWIpOiBVc2Ugc2NhbmRpciB0byBsb29rIGZvciBsaWJyYXJpZXMgd2l0aCBtYXRjaGluZyB2ZXJzaW9uCisgICAgICAgIG51bWJlcnMuCisKK1dlZCBGZWIgMjIgMTg6Mjc6MTQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAoZW51bSBzaGFycF90b2tlbl90eXBlKTogTmV3IHR5cGUuCisJKHN0cmluZ2lmeSwgcmF3X2JlZm9yZSwgcmF3X2FmdGVyKTogVXNlIHRoaXMgdHlwZSBpbnN0ZWFkIG9mIGNoYXIuCisJKGNvbGxlY3RfZXhwYW5zaW9uLCBkdW1wX3NpbmdsZV9tYWNybyk6IEtlZXAgdHJhY2sgb2Ygd2hpdGUgc3BhY2UKKwlhZnRlciAjIGFuZCBhcm91bmQgIyMgdG9rZW5zLCBzaW5jZSB0aGUgQyBTdGFuZGFyZCByZXF1aXJlcyBhCisJZGlhZ25vc3RpYyBpZiB0aGUgd2hpdGUgc3BhY2UgZG9lc24ndCBtYXRjaCBkdXJpbmcgYSByZWRlZmluaXRpb24uCisJKHNoYXJwX3Rva2VuLCBzaGFycF9zaGFycF90b2tlbik6IExhYmVscyByZW5hbWVkIGZyb20gaGFzaF90b2tlbiBhbmQKKwloYXNoX2hhc2hfdG9rZW4gZm9yIG5hbWluZyBjb25zaXN0ZW5jeS4KKworV2VkIEZlYiAyMiAxNzozNzoxMiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnY2MuYyAoU1dJVENIX1RBS0VTX0FSRyk6IEFkZCBgeCcuCisJKHByb2Nlc3NfY29tbWFuZCk6IC1XbCwgLVhsaW5rZXIsIGFuZCAtbG0gdmFsdWVzIGFsd2F5cyBnbyB0bworCWxpbmtlciBldmVuIGlmIC14IHdhcyBzcGVjaWZpZWQuCisKK1dlZCBGZWIgMjIgMDk6MzM6MzYgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisgICAgIAorICAgICAgICAqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFN1cHBvcnQgZm9sZGluZyBDTEVBTlVQX1BPSU5UX0VYUFJzIGludG8KKyAgICAgICAgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4KKworV2VkIEZlYiAyMiAwODo0MDozMCAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0gnLCAnUycpOiBEZWxldGUgdW51c2VkLgorCisJKiByczYwMDAubWQgKGZmc3NpMik6IFVzZSBncGNfcmVnX29wZXJhbmQgcHJlZGljYXRlLgorCShTb21lIG1hc2tpciBwYXR0ZXJucyk6IExpa2V3aXNlLgorCShmZnNkaTIpOiBMaWtld2lzZS4KKworCSogcnM2MDAwLm1kIChtb3ZzZmNjLCBtb3ZkZmNjKTogTmV3IHN0YW5kYXJkIHBhdHRlcm5zLgorCShmc2Vsc2ZzZjQsIGZzZWxkZnNmNCwgZnNlbGRmZGY0LCBmc2Vsc2ZkZjQpOiBOYW1lIGFuZCBjcmVhdGUKKwl2YXJpYW50cyBvZiBleGlzdGluZyBhbm9ueW1vdXMgcGF0dGVybnMgZm9yIG1vdnNmY2MgYW5kIG1vdmRmY2MuCisJCitXZWQgRmViIDIyIDA4OjEwOjM2IDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogZmluYWwuYyAob3V0cHV0X2FzbV9uYW1lKTogTmV3IGZ1bmN0aW9uLCB1c2luZyBjb2RlIHRha2VuCisJZnJvbSBvdXRwdXRfYXNtX2luc24uCisJKG91dHB1dF9hc21faW5zbik6IElmIGZsYWdfcHJpbnRfYXNtX25hbWUsIHByaW50IHRoZSBjb21tZW50CisJYWZ0ZXIgdGhlIGZpcnN0IGFzc2VtYmxlciBpbnN0cnVjdGlvbiBldmVuIGluIG11bHRpLWluc3RydWN0aW9uCisJdGVtcGxhdGVzLgorCitXZWQgRmViIDIyIDA3OjA0OjI1IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogcmVhbC5jIChSRUFMX1dPUkRTX0JJR19FTkRJQU4pOiBOZXcgbWFjcm8uICBEZWZpbmUgYXMgZWl0aGVyCisJRkxPQVRfV09SRFNfQklHX0VORElBTiBvciBIT1NUX0ZMT0FUX1dPUkRTX0JJR19FTkRJQU4uICBVc2UgaXQKKwlpbnN0ZWFkIG9mIEZMT0FUX1dPUkRTX0JJR19FTkRJQU4uIAorCitXZWQgRmViIDIyIDA3OjAzOjM5IDE5OTUgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiBmaW5hbC5jIChzcGxpdF9kb3VibGUpOiBIYW5kbGUgQ09OU1RfSU5UIHRoYXQgaG9sZHMgYm90aCB3b3Jkcy4KKwkqIGkzODYuYyAob3V0cHV0X21vdmVfZG91YmxlKTogTGV0IHNwbGl0X2RvdWJsZSBleHRyYWN0IGFueQorCWNvbnN0YW50IGluIG9wIDE7IHRha2Ugc2l6ZSBmcm9tIG9wIDAuCisKKwkqIHJlYWwuYyAobTE2bSwgZWRpdm0sIGVtdWxtKTogQ2hhbmdlIGBzaG9ydCcgdG8gYEVNVVNIT1JUJywgYW5kIGBsb25nJworCXRvIGBFTVVMT05HJy4KKwlDbGVhbiB1cCBjb21tZW50cy4KKworV2VkIEZlYiAyMiAwMDo1Mjo0MCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBwYS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogSGFuZGxlIGludmlzaWJsZSByZWZlcmVuY2UKKwlhcmd1bWVudHMgcGFzc2VkIGluIHJlZ2lzdGVycy4KKworVHVlIEZlYiAyMSAxOTowMzowOSAxOTk1ICBEb3VnbGFzIFJ1cHAgIChkcnVwcEBjcy53YXNoaW5ndG9uLmVkdSkKKworCSogTWFrZWZpbGUuaW4gKCRleGVleHQsICRvYmpleHQsICRvbGRvYmpleHQpOiBOZXcgbWFjcm9zLgorCSogTWFrZWZpbGUuaW46IENvcHkgY29uZmlnLnN0YXR1cyB0byBjb25maWcucnVuIGFuZCB0aGVuIGV4ZWN1dGUuCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBUcnkgYSAiY3AiIGlmICJsbiIgZmFpbHMuCisJKiBvYmpjL01ha2VmaWxlOiBBZGRlZCB7fSBhcm91bmQgZmlsZSB2YXJpYWJsZS4KKworCSogYy1wYXJzZS5pbjogTmV3IHJ1bGVzIHRvIGFsbG93IGF0dHJpYnV0ZXMgaW4gYSBwcmVmaXggcG9zaXRpb24uCisJKiBjLXRyZWUuaCAoZGVjbF9hdHRyaWJ1dGVzKTogQWRkZWQgYXJndW1lbnQuCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBZGRlZCBjb2RlIHRvIHN1cHBvcnQgbWFjaGluZSBhdHRyaWJ1dGVzLgorCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQWRkIHRoaXJkIGFyZ3VtZW50IHByZWZpeF9hdHRyaWJ1dGVzLgorCSh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IERlbGV0ZWQ7IG1vdmVkIHRvIHRyZWUuYy4KKwkqIHRyZWUuaCAodW5pb24gdHJlZV9kZWNsKTogTmV3IGZpZWxkIE1BQ0hJTkVfQVRUUklCVVRFUy4KKwkoREVDTF9NQUNISU5FX0FUVFJJQlVURVMpOiBOZXcgbWFjcm8uCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUGFzcyBERUNMX01BQ0hJTkVfQVRUUklCVVRFUyB0bworCWRlc2NlbmRlbnQgdHlwZWRlZjsgbWFrZSBkdXBsaWNhdGUgdHlwZWRlZnMgdGhhdCBhcmUgaWRlbnRpY2FsIAorCWdlbmVyYXRlIGEgd2FybmluZyBpZiB0aGV5IGFyZSBib3RoIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuICAKKwkocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlKTogTWFrZSBkdXBsaWNhdGUgdHlwZWRlZnMgdGhhdCAKKwlhcmUgaWRlbnRpY2FsIG5vdCBhbiBlcnJvciBpZiB0aGV5IGFyZSBib3RoIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuICAKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZXssX2JyaWVmfSk6IFByaW50IG1hY2hpbmUgYXR0cmlidXRlcy4KKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBBZGRlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBub2RlIGFyZ3VtZW50CisJcGFzc2VkIHRvIFJFVFVSTl9QT1BTX0FSR1M7IGFsc28gZWZmZWN0cyBjYWxscyB0byBlbWl0X2NhbGxfMS4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEFkZGVkIGFyZyB0byBSRVRVUk5fUE9QU19BUkdTLgorCSogMTc1MGEuaCwgYTI5ay5oLCBhbHBoYS5oLCBhcm0uaCwgY2xpcHBlci5oLCBjb252ZXguaDogTGlrZXdpc2UuCisJKiBkc3AxNnh4LmgsIGVseHNpLmgsIGZ4ODAuaCwgZ21pY3JvLmgsIGg4MzAwLmgsIGkzNzAvbXZzLmg6IExpa2V3aXNlLgorCSogaTM4Ni5oLCBpMzg2L2lzYy5oLCBpMzg2L25leHQuaCwgaTM4Ni9zY28uaDogTGlrZXdpc2UuCisJKiBpMzg2L3Njb2RieC5oLCBpODYwLmgsIGk5NjAuaCwgbTY4ay5oLCBtODhrLmgsIG1pcHMuaDogTGlrZXdpc2UuCisJKiBuczMyay5oLCBwYS5oLCBwZHAxMS5oLCBweXIuaCwgcm9tcC5oLCByczYwMDAuaCwgc2guaDogTGlrZXdpc2UuCisJKiBzcGFyYy5oLCBzcHVyLmgsIHRhaG9lLmgsIHZheC5oLCB3ZTMyay5oOiBMaWtld2lzZS4KKworCSogY2NjcC5jIChtYWluKTogRG9uJ3Qgc2V0ICJJbmNsdWRlIiBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgTlQuCisJKiBwcm90b2l6ZS5jOiBBZGRlZCAjaWZkZWYncyBXSU5OVC4KKwkqIHRvcGxldi5jIChnZXRfcnVuX3RpbWUpOiBSZXR1cm4gYW4gYXBwcm94aW1hdGUgdmFsdWUgZm9yIE5ULgorCSogZ2JsLWN0b3JzLmgsIGxpYmdjYzIuYyAoYXRleGl0KTogUHJvdG90eXBlIG5vdyB3b3JrcyB3aXRoIE5ULgorCSogZ2NjLmMgKGZpeF9hcmd2KTogUmV3cml0ZS4KKworCSogaTM4Ni93aW5udC5jOiBOZXcgZmlsZQorCSogd2lubnQvbGQuYyAoZXhwYW5kX2xpYik6IExvb2sgZm9yIGJvdGggbGliZm9vLmEgYW5kIGZvby5saWIuCisJTW9kaWZpZWQgdG8gc3VwcG9ydCBsaW5raW5nIHdpdGggV2luZG93cyBOVCBncmFwaGljcyBsaWJyYXJpZXMuIAorCSogaTM4Ni93aW5udC5oLCB4LXdpbm50OiBTdXBwb3J0IE5UIEdyYXBoaWNzIHByb2dyYW1zOyBhbHNvIGJ1ZyBmaXhlcy4KKwkqIHdpbm50L3dpbm50LmggKENQUF9TUEVDKTogQWNjZXB0IGMrKyBzdHlsZSBjb21tZW50cy4KKwkqIHdpbm50L3htLXdpbm50Lmg6IFJlZmxlY3QgZmVhdHVyZXMvZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiBOVC4KKworCSogZml4aW5jLndpbm50OiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaVszNDVdODYtKi13aW5udCk6IEFkZCBmaXhpbmNsdWRlcyBhbmQgZXh0cmFfb2Jqcy4KKwkqIGNvbmZpZy1udC5iYXQ6IERlbGV0ZWQuCisJKiBjb25maWd1cmUuYmF0OiBUYWtlIGFyZyBzcGVjaWZ5aW5nIG1zZG9zIG9yIHdpbm50IGJhdGNoIGZpbGUgY29uZmlnLgorCSogaTM4Ni9jb25maWctbnQue2JhdCxzZWR9OiBVcGRhdGVkIHRvIFdpbmRvd3MgTlQgMy41LgorCisJKiBnaW5jbHVkZS9zdGRhcmcuaCwgZ2luY2x1ZGUvdmFyYXNncy5oOiBUZXN0IF9WQV9MSVNUX0RFRklORUQgbWFjcm8uCisJKiBnaW5jbHVkZS9zdGRkZWYuaDogVGVzdCBfU0laRV9UX0RFRklORUQgYW5kIF9XQ0hBUl9UX0RFRklORUQuCisJKiBnaW5jbHVkZS92YXJhcmdzLmg6IE1vZGlmZWQgdG8gd29yayB3aXRoIFdpbmRvd3MgTlQuICBOZWVkZWQgYSAKKwlfVkFfTElTVF9ERUZJTkVEIG1hY3JvLgorCisJKiB0cmVlLmM6IChjaGFpbl9tZW1iZXJfdmFsdWUsIGRlY2xfYXR0cmlidXRlX3ZhcmlhbnQpOiBOZXcgZnVuY3Rpb25zLgorCSh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IE1vdmVkIGhlcmUgZnJvbSBjLWNvbW1vbi5jLgorCisJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IENhbGwgTU9ESUZZX0FTU0VNQkxFUl9OQU1FIGlmIGRlZmluZWQuCisKK1R1ZSBGZWIgMjEgMTI6NDA6MDUgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAc25ha2UuY3MudXRhaC5lZHU+CisKKwkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogU3RvcCBsb29waW5nIG92ZXIgdGhlIGlucHV0CisJb3BlcmFuZHMgb25jZSB3ZSBmaW5kIGFuIGlucHV0L291dHB1dCByZWdpc3RlciBwYWlyIHdoaWNoIGNhbgorCWJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgcXR5LgorCisJKiBpbnRlZ3JhdGUuYyAoZmluaXNoX2lubGluZSk6IERvbid0IHNldCBERUNMX0lOTElORS4KKworVHVlIEZlYiAyMSAxMDoxOTo1MSAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IE1vdmUgZm9ydHJhbiBzd2l0Y2hlcyBoZXJlLCBmaXhpbmcgYmFkCisJcGF0Y2guCisKK1R1ZSBGZWIgMjEgMDc6MzA6MTEgMTk5NSAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfdG9jKTogVXNlIFJFQUxfVkFMVUVfKiBtYWNyb3MuCisJKiByczYwMDAuaCAoUkVBTF9BUklUSE1FVElDKTogRGVmaW5lLgorCitUdWUgRmViIDIxIDA2OjQ4OjQxIDE5OTUgIFN0ZXBoZW4gUi4gdmFuIGRlbiBCZXJnICAoYmVyZ0Bwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX3ZhbHVlX3JldHVybik6IE1ha2UgZnVuY3Rpb24gc3RhdGljLgorCitUdWUgRmViIDIxIDA2OjQyOjMzIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJQWRkIHN1cHBvcnQgZm9yIElTTyBOb3JtYXRpdmUgQWRkZW5kdW0gMSB0byB0aGUgQyBTdGFuZGFyZC4KKwkqIGdpbmNsdWRlL2lzbzY0Ni5oOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgaXNvNjQ2LmguCisJKiBjLWxleC5jICh5eWxleCk6IEFkZCBzdXBwb3J0IGZvciA8OiA6PiA8JSAlPiBkaWdyYXBocy4KKwkqIGNjY3AuYyAocmVzY2FuKTogQWRkIHN1cHBvcnQgZm9yICU6IGFuZCAlOiU6IGRpZ3JhcGhzLgorCShjb2xsZWN0X2V4cGFuc2lvbiwgc2tpcF9pZl9ncm91cCwgZHVtcF9zaW5nbGVfbWFjcm8pOiBMaWtld2lzZS4KKwkodW5pb24gaGFzaHZhbCk6IFJlbW92ZSBpdmFsIG1lbWJlcjsgaXQgZG9lc24ndCBzdWZmaWNlIGZvciBgMTk5NDA5TCcuCisJKHNwZWNpYWxfc3ltYm9sKTogVXNlIGNwdmFsIGluc3RlYWQgb2YgaXZhbCBmb3IgVF9DT05TVCBtYWNyb3MuCisJKGluc3RhbGwpOiBSZW1vdmUgaXZhbHVlIGFyZ3VtZW50LCBzaW5jZSBzdHJpbmcgdmFsdWUgbm93IHN1ZmZpY2VzLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKGluaXRpYWxpemVfYnVpbHRpbnMpOiBTd2l0Y2ggZnJvbSBpbnQgdG8gc3RyaW5nIHZhbHVlcyBmb3IgVF9DT05TVC4KKwlJZiBub3QgdHJhZGl0aW9uYWwsIGluaXRpYWxpemUgX19TVERDX1ZFUlNJT05fXyB0byAxOTk0MDlMLgorCShTVERDX1ZBTFVFKTogUmVtb3ZlIG5vLWxvbmdlci11c2VkIGNvbmZpZ3VyYXRpb24gbWFjcm8uCisKK1R1ZSBGZWIgMjEgMDY6MTY6MzcgMTk5NSAgRnJhbnogS29ybnRuZXIgIChma29ybnRuZUBiYXppcy5ubCkKKworCSogZ2NjLmMgKHJlYWRfc3BlY3MpOiBVc2UgbGVuZ3RoIHJlYWQgd2hlbiBpbnNlcnRpbmcgemVyby4KKworCSogYy1sZXguYyAoeXlsZXgpOiBGb3IgZmxvYXQsIGJ1aWxkIGNvbnN0YW50IGluIGxvbmcgZG91YmxlLgorCitUdWUgRmViIDIxIDA1OjU3OjQyIDE5OTUgIENyYWlnIEJ1cmxleSAgKGJ1cmxleUBnbnUuYWkubWl0LmVkdSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCBvcHRpb25zIGZvciBGb3J0cmFuLgorCisJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBBZGQgZW50cmllcyBmb3IgLmYgYW5kIC5GLgorCitUdWUgRmViIDIxIDA1OjM3OjIxIDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFJlbW92ZSBydWxlIGZvciAiLmFkYSIuCisJUGFzcyAuYWRzIG9yIC5hZGIgc3VmZml4IHRvIC1kdW1wYmFzZSwgZGVwZW5kaW5nIG9uIGlucHV0IGZpbGVuYW1lLgorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogSW5pdGlhbGl6ZSBpbnB1dF9maWxlX3N0YWNrIGJlZm9yZQorCWNhbGxpbmcgbGFuZ19pbml0LCBub3QgYWZ0ZXIuCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogR2l2ZSB3YXJuaW5nIGlmIHVucmVjb2duaXplZCBkYXRhIG9uICNsaW5lLgorCSh5eWxleCk6IEdpdmUgZXJyb3IgZm9yIHVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnQuCisKK01vbiBGZWIgMjAgMTQ6NDY6NTYgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnQpOiAgU3RyaXAgTk9QX0VYUFJzIGZvciBTRVRfVFlQRSB0b28sCisJYnkgdXNpbmcgQUdHUkVHQVRFX1RZUEVfUCBtYWNyby4KKworTW9uIEZlYiAyMCAxNDozOTo1NyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogY29uZmlnL3N2cjQuaCAoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6ICBVc2UgYXNzZW1ibGVfbmFtZS4KKworTW9uIEZlYiAyMCAxNToyNjowNSAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZy5zdWIgKHN1bjRzb2wyKTogQWxpYXMgZm9yIHNwYXJjLXN1bi1zb2xhcmlzMi4KKworU2F0IEZlYiAxOCAxNjoxNTozMyAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzIuYyAoX191bndpbmRfZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb24gdG8gc3VwcG9ydCBzdGFjaworCXVud2luZGluZyBvbiByczYwMDAgZm9yIGcrKyBleGNlcHRpb24gaGFuZGxpbmcuCisKK1NhdCBGZWIgMTggMTM6NTU6MDIgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIHRyZWUuaCAoZ2V0X3NldF9jb25zdHJ1Y3Rvcl9ieXRlcyk6IEZpeCBwcm90b3R5cGUuCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0cnVjdG9yKTogRml4IHR5cG8gYnl0ZV9zaXplIC0+IHNpemUuCisKK1NhdCBGZWIgMTggMTI6MzY6MTIgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJTHlueCBwYXRjaGVzIGZyb20gdmFyaW91cyBDeWdudXMgcGVvcGxlLgorCSogY29uZmlnLnN1YjogUmVjb2duaXplIGx5bngqIGFzIGx5bnhvcy4KKwkqIGNvbmZpZ3VyZSAoaTM4Ni1seW54KTogU2V0IHhtX2ZpbGUgdG8gaTM4Ni94bS1seW54LmgKKwlTZXQgdG1ha2VfZmlsZSB0byBpMzg2L3QtaTM4NmJhcmUuCisJKG02OGstbHlueCk6IFNldCB4bV9maWxlIHRvIG02OGsveG0tbHlueC5oLgorCVNldCB0bWFrZV9maWxlIHRvIG02OGsvdC1seW54LgorCShyczYwMDAtbHlueG9zKik6IE5ldyB0YXJnZXQuCisJKHNwYXJjLWx5bnhvcyopOiBTZXQgeG1fZmlsZSB0byBzcGFyYy94bS1seW54LmguCisJU2V0IHRtYWtlX2ZpbGUgdG8gc3BhcmMvdC1zdW5vczQxLgorCSogY29uZmlnL2x5bnguaCAoTElCX1NQRUMsIFNUQVJURklMRV9TUEVDKTogVXBkYXRlIHRvIEx5bnhPUyAyLjIuMi4KKwkoRlVOQ1RJT05fUFJPRklMRSk6IFVuZGVmLgorCSogY29uZmlnL3htLWx5bnguaCAoSE9TVF9CSVRTX1BFUl9DSEFSKTogRGVsZXRlLgorCShIT1NUX0JJVFNfUEVSX3tTSE9SVCxJTlQsTE9ORyxMT05HTE9OR30pOiBMaWtld2lzZS4KKwkobWt0ZW1wKTogUHJvdmlkZSBvdXIgb3duLCBseW54J3MgZGVmaW5pdGlvbiBpc24ndCBzdGFuZGFyZC4KKwkqIGkzODYvdC1pMzg2YmFyZSAoTElCR0NDMSk6IERlZmluZSB0byBlbXB0eSBpbnN0ZWFkIG9mIGxpYmdjYzEubnVsbC4KKwkoQ1JPU1NfTElCR0NDMSk6IExpa2V3aXNlLgorCSogaTM4Ni94bS1seW54Lmg6IE5ldyBmaWxlLgorCSogbTY4ay9seW54LmggKEZVTkNUSU9OX1ZBTFVFKTogUmVkZWZpbmUuCisJKExJQkNBTExfVkFMVUUsIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1AsIE5FRURTX1VOVFlQRURfQ0FMTCk6IExpa2V3aXNlLgorCSogbTY4ay90LWx5bng6IE5ldyBmaWxlLgorCSogbTY4ay94bS1seW54Lmg6IE5ldyBmaWxlLgorCSogcnM2MDAwL2x5bnguaDogTmV3IGZpbGUuCisJKiByczYwMDAvcnM2MDAwLmggKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogRGVmaW5lLgorCShPVkVSUklERV9PUFRJT05TKTogQ2FsbCBpdC4KKwkqIHJzNjAwMC94LWx5bng6IE5ldyBmaWxlLgorCSogcnM2MDAwL3htLWx5bnguaDogTmV3IGZpbGUuCisJKiBzcGFyYy94bS1seW54Lmg6IE5ldyBmaWxlLgorCitUaHUgRmViIDE2IDE3OjAyOjUxIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlnL21pcHMvbWlwcy5oIChlbnVtIHByb2Nlc3Nvcl90eXBlKTogQWRkIFBST0NFU1NPUl9SNDY1MC4KKwkqIGNvbmZpZy9taXBzL21pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBQUk9DRVNTT1JfUjQ2NTAgZm9yCisJdGhlIDQ2NTAsIG5vdCBQUk9DRVNTT1JfUjQ2MDAuICBDaGVjayBmb3IgaXQgd2hlbiBkb3VibGVjaGVja2luZworCW1pcHNfaXNhIGxldmVsLgorCSogY29uZmlnL21pcHMvbWlwcy5tZDogQWRkIHI0NjUwIHRvIGNwdSBhdHRyLiAgVXBkYXRlIGZ1bmN0aW9uYWwKKwl1bml0cyBmb3IgcjQ2NTAuCisJKG11bHNpMyk6IElmIFRBUkdFVF9NQUQsIGdlbmVyYXRlIG11bHNpM19yNDY1MC4KKwkobXVsc2kzX3I0NjUwKTogTmV3IGluc3RydWN0aW9uLCBtdWwgZGlyZWN0bHkgdG8gcmVnaXN0ZXIgZmlsZSwKKwlzdXBwb3J0ZWQgb24gcjQ2NTAuCisKK1RodSBGZWIgMTYgMTE6NDQ6NTEgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC9lYWJpLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBzdXBwb3J0IGZvcgorCS1tc3RyaWN0LWFsaWduIHRvIGNvbnRyb2wgd2hldGhlciBTVFJJQ1RfQUxJR05NRU5UIGlzIDEgb3IgMC4KKwkoU1RSSUNUX0FMSUdOTUVOVCk6IFJlZGVmaW5lLCB0byBiZSAxIGlmIC1tc3RyaWN0LWFsaWduIHVzZWQuCisKK1dlZCBGZWIgMTUgMTM6MDM6MzggMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbGliZ2NjMi5jOiBSZXBhaXIgYm90Y2ggaW4gYXBwbGljYXRpb24gb2YgcGF0Y2guCisKK1R1ZSBGZWIgMTQgMTY6MDA6NTIgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIHRyZWUuYyAoZ2V0X3NldF9jb25zdHJ1Y3Rvcl9ieXRlcyk6ICBOZXcgZnVuY3Rpb24uICBSZXBsYWNlcyAuLi4KKwkoZ2V0X3NldF9jb25zdHJ1Y3Rvcl93b3Jkcyk6ICAuLi4gcmVtb3ZlZCBvbGQgZnVuY3Rpb24uCisJKiB0cmVlLmg6IGdldF9zZXRfY29uc3RydWN0b3Jfd29yZHMgLT4gZ2V0X3NldF9jb25zdHJ1Y3Rvcl9ieXRlcy4KKwkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IpOiAgRG9uJ3QgdXNlIGdldF9zZXRfY29uc3RydWN0b3Jfd29yZHMuCisJKiB2YXJhc20uYyAoY29uc3RfaGFzaCk6ICBBZGQgc3VwcG9ydCBmb3IgU0VUX1RZUEUgY29uc3RydWN0b3JzLgorCShyZWNvcmRfY29uc3RhbnRfMSk6ICBMaWtld2lzZS4KKwkoY29weV9jb25zdGFudCk6ICBMaWtld2lzZS4KKwkob3V0cHV0X2NvbnN0YW50KTogIExpa2V3aXNlLiAgKEFsc28gU0VUX1RZUEUgSU5URUdFUl9DU1RzLikKKworVHVlIEZlYiAxNCAwODowNTowNyAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKHN0YWJpbGl6ZV9yZWZlcmVuY2VfMSk6IE5vIGxvbmdlciBzdGF0aWMuCisJKiB0cmVlLmggKHN0YWJpbGl6ZV9yZWZlcmVuY2VfMSk6IEFkZCBkZWNsYXJhdGlvbi4KKworTW9uIEZlYiAxMyAxOTozNzoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvbWlwcy9nbnUuaDogUmV3cml0dGVuIHRvIHVzZSBFTEYgb2JqZWN0IGZvcm1hdC4KKwkqIGNvbmZpZy9nbnUuaCAoR05VX0NQUF9QUkVERUZJTkVTKTogTmV3IG1hY3JvLgorCSogY29uZmlnL2kzODYvZ251LmggKENQUF9QUkVERUZJTkVTKTogVXNlIEdOVV9DUFBfUFJFREVGSU5FUyBtYWNyby4KKwkqIGNvbmZpZy9pMzg2L2dudWVsZi5oOiBMaWtld2lzZS4KKworTW9uIEZlYiAxMyAxNDowNjowNCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworICAgICAgICAqIGxpYmdjYzIuYyAoX19kZWZhdWx0X25ld19oYW5kbGVyKTogRG9uJ3QgY2FsbCB3cml0ZSBpZgorICAgICAgICBpbmhpYml0X2xpYmMgaXMgZGVmaW5lZC4KKyAgICAgICAgKF9fcHVyZV92aXJ0dWFsKTogRGl0dG8uCisKK01vbiBGZWIgMTMgMTY6NDI6MzggMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBhMjlrL2EyOWstdWRpLmggKERCWF9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KKwkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lLgorCisJKiBleHBtZWQuYyAoc3RvcmVfc3BsaXRfYml0X2ZpZWxkKTogSWYgdmFsdWUgaXMgVk9JRG1vZGUsCisJcGFzcyB3b3JkX21vZGUgdG8gZm9yY2VfcmVnLgorCisJKiB2YXJhc20uYyAoZnVuY3Rpb25fc2VjdGlvbik6IE5ldyBmdW5jdGlvbi4KKwkoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBDYWxsIGl0LgorCSogb3V0cHV0LmggKGZ1bmN0aW9uX3NlY3Rpb24pOiBEZWNsYXJlIGl0LgorCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQ2FsbCBmdW5jdGlvbl9zZWN0aW9uIGluc3RlYWQgb2YKKwl0ZXh0X3NlY3Rpb24uCisJKiBkd2FyZm91dC5jIChkd2FyZm91dF9iZWdpbl9ibG9jayk6IExpa2V3aXNlLgorCShkd2FyZm91dF9lbmRfYmxvY2spOiBMaWtld2lzZS4KKwkoZHdhcmZvdXRfbGFiZWwpOiBMaWtld2lzZS4KKwkoZHdhcmZvdXRfYmVnaW5fZnVuY3Rpb24pOiBMaWtld2lzZS4KKwkoZHdhcmZvdXRfZW5kX2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKGR3YXJmb3V0X2xpbmUpOiBMaWtld2lzZS4KKworCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IFJldmlzZSBjYWxjdWxhdGlvbiBvZiB3aGVuIHRvCisJbWFrZSBhbm90aGVyIHBhc3MuCisKKwkqIGxpYmdjYzIuYyAoZXhpdCk6IERvbid0IGNhbGwgX19kb19nbG9iYWxfZHRvcnMgaWYKKwlJTklUX1NFQ1RJT05fQVNNX09QIGFuZCBPQkpFQ1RfRk9STUFUX0VMRi4KKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYzEuUyk6IE5ldyB0YXJnZXQuCisKK01vbiBGZWIgMTMgMTI6NDU6MTEgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIHRyZWUuYyAocGVybWFuZW50X2FsbG9jYXRpb24pOiAgUG9wIGZ1bmN0aW9uX21heWJlcGVybWFuZW50X29ic3RhY2ssCisJbm90IGhhcmR3aXJlZCAmbWF5YmVwZXJtYW5lbnRfb2JzdGFjay4KKworTW9uIEZlYiAxMyAxMjoxMDozMSAxOTk1ICBKLlQuIENvbmtsaW4gIDxqdGNAbmV0YnNkLm9yZz4KKworCSogY29uZmlnL25ldGJzZC5oOiBDaGFuZ2VkIHNvIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgdXNlZCB3aGVuIGdjYworCWlzIGludGVncmF0ZWQgaW50byB0aGUgTmV0QlNEIHNvdXJjZSB0cmVlIGFyZSBub3QgZGVmaW5lZCB1bmxlc3MKKwlORVRCU0RfTkFUSVZFIGlzIGRlZmluZWQgdG9vLgorCisJKiBjb25maWd1cmUgKCotbmV0YnNkLSopOiBSZW5hbWUgbmV0YnNkIGNvbmZpZyBmaWxlcyBzbyB0aGF0IHRoZXkgZG9uJ3QKKwloYXZlIHRoZSBtYWNoaW5lIHR5cGUgaW4gdGhlbS4KKwkqIGkzODYvbmV0YnNkLmg6IFJlbmFtZWQgZnJvbSBpMzg2L25ldGJzZC1pMzg2LmguCisJKiBtNjhrL25ldGJzZC5oOiBSZW5hbWVkIGZyb20gbTY4ay9uZXRic2QtbTY4ay5oLgorCSogbnMzMmsvbmV0YnNkLmg6IFJlbmFtZWQgZnJvbSBuczMyay9uZXRic2QzMmsuaC4KKworTW9uIEZlYiAxMyAxNTowNTowOSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworICAgICAgICAqIGNvbGxlY3QyLmMgKG1haW4pOiBSZW1lbWJlciBhbGwgdGhlIC5vIGZpbGVzIHNwZWNpZmllZCBvbiB0aGUKKyAgICAgICAgY29tbWFuZCBsaW5lLCBhbmQgc2NhbiB0aGVtIGRpcmVjdGx5IGlmIENPTExFQ1RfU0NBTl9PQkpFQ1RTLgorICAgICAgICAqIHJzNjAwMC9yczYwMDAuaCAoQ09MTEVDVF9TQ0FOX09CSkVDVFMpOiBEZWZpbmUuCisKKyAgICAgICAgKiBzdG10LmMgKHdhcm5faWZfdW51c2VkX3ZhbHVlKTogRG9uJ3Qgd2FybiBhYm91dCBkZXJlZmVyZW5jZWQKKyAgICAgICAgcmVmZXJlbmNlcy4KKworTW9uIEZlYiAxMyAxNDowMDo1MSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIG02OGsuaCAoUlRYX0NPU1RTKTogRml4IHR5cG8gZnJvbSBsYXN0IGNoYW5nZS4KKworCSogcmVsb2FkMS5jIChsYXN0X3NwaWxsX3JlZyk6IE1vdmUgZGVmaW5pdGlvbiB0byB0b3Agb2YgZmlsZS4KKwlEb24ndCBpbml0aWFsaXplIGhlcmUuICAKKwkocmVsb2FkKTogSW50aWFsaXplIGhlcmUgdG8gLTEuCisKK01vbiBGZWIgMTMgMDk6Mjk6NDkgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGZpeGluYy5zdnI0IChsb25nbG9uZ190LCB1X2xvbmdsb25nX3QpOgorCVdvcmsgYXJvdW5kIGJ1ZyBpbiBTb2xhcmlzIDIuNCA8c3lzL3R5cGVzLmg+LgorCitNb24gRmViIDEzIDA4OjMxOjE4IDE5OTUgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AbWhwY2MuZWR1PgorCisJKiByczYwMDAuaCwgcG93ZXJwYy5oIChDUFBfU1BFQyk6IERlZmluZSBfUE9TSVhfU09VUkNFIGlmIC1wb3NpeC4KKworCSogcnM2MDAwLm1kIChleHRlbmRzZmRmMik6IFVuZG8gMzAgTm92IDk0IGNoYW5nZS4gIFVzZSBmbG9hdF9leHRlbmQKKwlpbnN0ZWFkIG9mIFNVQlJFRyBhbmQgcmVzdG9yZSBmbXIgaW5zdHJ1Y3Rpb24gZm9yIGRpZmZlcmluZyBGUFJzLgorCitNb24gRmViIDEzIDA1OjI1OjA5IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisgICAgICAgICogY29udmVydC5jIChjb252ZXJ0X3RvX3twb2ludGVyLHJlYWwsaW50ZWdlcixjb21wbGV4fSk6CisJSGFuZGxlIHJlZmVyZW5jZXMuCisKK01vbiBGZWIgMTMgMDg6MTQ6MTAgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1wYXJzZS5pbiAoQUxJR04pOiBSZW1vdmUgdW51c2VkIHRva2VuLgorCisJKiBsb29wLmMgKG1hcmtfbG9vcF9qdW1wKTogUmVtb3ZlIGJvZ3VzIGFzc2lnbm1lbnRzIHRvIExBQkVMXworCWZpZWxkcyBpbiBkZWZhdWx0IGNhc2UuCisKK01vbiBGZWIgMTMgMDc6NTU6MzAgMTk5NSAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHRpbnkuY3lnbnVzLmNvbSkKKworCSogYTI5ay5oIChUQVJHRVRfTVVMVE0pOiBOZXcgI2RlZmluZS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogUmVjb2duaXplICItbW5vLW11bHRtIi4KKwkqIGEyOWsubWQgKHNtdWxzaTNfaGlnaHBhcnQsIHVtdWxzaTNfaGlnaHBhcnQsIG11bHNpZGkzLCB1bXVsc2lkaTMpOgorCU1ha2UgdGhlc2UgY29uZGl0aW9uYWwgb24gVEFSR0VUX01VTFRNLgorCisJKiBhMjlrLm1kIChtdWx0bSBtYXRjaGVyKTogRGVsZXRlLgorCShtdWx0bXUgbWF0Y2hlcik6IERlbGV0ZS4KKwkobXVsc2lkaTMgREVGSU5FX1NQTElUKTogR2VuZXJhdGUgUlRMIGZvciBzbXVsc2kzX2hpZ2hwYXJ0IGluc3RlYWQgb2YKKwlmb3IgZGVsZXRlZCBwYXR0ZXJuLiAgRml4IHR5cG8gaW4gcHJlcGFyYXRpb24gY29kZS4KKwkodW11bHNpZGkzIERFRklORV9TUExJVCk6IEFuYWxvZ291cyBjaGFuZ2UuCisKK01vbiBGZWIgMTMgMDc6MDk6MDIgMTk5NSAgUGV0ZXIgRmxhc3MgIChGTEFTU0BMQkRSU0NTLkJJVE5FVCkKKworCSogaTM3MC9tdnMuaCAoQVNNX09VVFBVVF9BU0NJSSk6IERvbid0IGR1cGxpY2F0ZSBmaXJzdCBjaGFyLgorCitNb24gRmViIDEzIDA2OjUxOjA3IDE5OTUgIFNhbXVlbCBBLiBGaWd1ZXJvYSAgKGZpZ3Vlcm9hQENTLk5ZVS5FRFUpCisKKwkqIGkzODYvb3MyLmggKE9CSkVDVF9TVUZGSVgpOiBOZXcgbWFjcm8uCisJKExJQl9TUEVDLCBTVEFSVEZJTEVfU1BFQyk6IEFkanVzdCB0byBpbmNsdWRlIGJldHRlciBzZXQgb2YgbGlicy4KKworCSogaTM4Ni94bS1vczIuaCAoRElSX1NFUEFSQVRPUik6IERlZmluZSBpZiBub3QgYWxyZWFkeS4KKwkoc3RyY2FzZWNtcCk6IE5ldyBkZWZpbml0aW9uLgorCisJKiB0b3BsZXYuYyAobWFpbik6IExvb2sgYXQgRElSX1NFUEFSQVRPUiBmb3IgZmluZGluZyBsYXN0IGNvbXBvbmVudC4KKwkqIGNjY3AuYyAoZG9faW5jbHVkZSwgaXNfc3lzdGVtX2luY2x1ZGUsIG9wZW5faW5jbHVkZV9maWxlKToKKwlIYW5kbGUgRElSX1NFUEFSQVRPUi4KKworU3VuIEZlYiAxMiAyMDoyMDoyOCAxOTk1ICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCisKKyAgICAgICAgKiBjb25maWcvc3BhcmMvc3lzdjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBDaGVjayB0byBtYWtlCisgICAgICAgIHN1cmUgREVDTCBpcyBub24tbnVsbCBiZWZvcmUgdHJ5aW5nIHRvIHJlZmVyZW5jZSBpdC4KKyAgICAgICAgKiBjb25maWcvbWlwcy9lbGY2NC5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IExpa2V3aXNlLgorCitTdW4gRmViIDEyIDE5OjU1OjQ1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogQWRkIG1pc3NpbmcgcGFyZW4gaW4gbGFzdCBjaGFuZ2UuCisKK1NhdCBGZWIgMTEgMTg6MDk6MjcgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmMgKExfZml4dW5zeGZzaSwgTF9maXh1bnNkZnNpLCBMX2ZpeHVuc3Nmc2kpOiBVbmRlZgorCW5vcm1hbCB0eXBlcyBiZWZvcmUgaW5jbHVkaW5nIGxpbWl0cy5oLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFdoZW4gc2V0dGluZyBuX25hbWVkX2FyZ3MsIGRlcGVuZCBvbiBuZXcKKwltYWNybyBTVFJJQ1RfQVJHVU1FTlRfTkFNSU5HLgorCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX05FWFRfQVJHKTogRG9uJ3Qgd2FybiB3aGVuCisJbm8gYXJndW1lbnQgaWYgdGhpcyBpcyBhIHZhcmFyZ3Mgcm91dGluZS4KKworU2F0IEZlYiAxMSAxNjowODoxMyAxOTk1ICBTYW11ZWwgQS4gRmlndWVyb2EgIChmaWd1ZXJvYUBDUy5OWVUuRURVKQorCisJKiBnY2MuYyAoc3BlY3MpOiBVc2UgJU8gaW5zdGVhZCBvZiAibyIgZm9yIG9iamVjdCBmaWxlIHN1ZmZpeC4KKwkoZG9fc3BlY18xLCBjYXNlICdPJyk6IE5ldyBvcHRpb24uCisKK1NhdCBGZWIgMTEgMTQ6NTg6MTkgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrL21vdDMzMDAuaCAoUkVUVVJOX0lOX01FTU9SWSk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KKworU2F0IEZlYiAxMSAxMzowOToyOCAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjZXhwLnkgKCV1bmlvbik6IERlbGV0ZSBWT0lEVkFMIGFuZCBTVkFMOyB1bnVzZWQuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBOQU1FLCBub3QgSURFTlRJRklFUl9QT0lOVEVSCisJb2YgREVDTEFSQVRPUiBmb3IgZXJyb3IgbWVzc2FnZXM7IERFQ0xBUkFUT1IgbWlnaHQgYmUgbnVsbC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBBbHdheXMgY2FsbCBleHBhbmRfdHdvdmFsX2Jpbm9wIHdpdGgKKwlwc3VlZG9zIGFzIHRhcmdldHMuCisKK0ZyaSBGZWIgMTAgMTQ6NTU6MDUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbGVyLXNhdmUuYzogUmVwbGFjZSBNQVhfVU5JVFNfUEVSX1dPUkQgd2l0aCBNSU5fVU5JVFNfUEVSX1dPUkQuCisJKiBoODMwMC5oLCBtaXBzLmgsIHJzNjAwMC5oLCBzcGFyYy5oOiBMaWtld2lzZS4KKworCSogYWxwaGEuYyAoZGlyZWN0X3JldHVybik6IENhbid0IGlmIGhhdmUgb3V0Z29pbmcgYXJncy4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3RvciwgQVJSQVlfVFlQRSk6IFVzZSBjb2RlIGZvcgorCW5vbi1pbnRlZ2VyIElOREVYIGZvciBub24taW50ZWdlciBFTFRUWVBFIHNpemUuCisJQWxsb3cgSU5ERVggdG8gYmUgemVybyBpbiBjb2RlIGFuZCBkaXZpZGUgc2l6ZSBieSBCSVRTX1BFUl9VTklULgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBEb24ndCBtb2RpZnkgdHJlZSB3aXRoIG5ld2x5LWFsbG9jYXRlZAorCW5vZGVzOyBpbnN0ZWFkIG1ha2UgbmV3IHRyZWUgaW4gdGhvc2UgY2FzZXMuCisKK1dlZCBGZWIgIDggMTU6MTM6NDkgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBzcGFyYy9zcGFyYy5jICh2OV9yZWdjbXBfcCk6IE5ldyBmdW5jdGlvbi4KKwkodjlfcmVnY21wX29wKTogQ2FsbCBpdC4KKwkqIHNwYXJjL3NwYXJjLm1kIChtb3ZzaWNjKTogTmV3IHBhdHRlcm4uCisJKG1vdmRpY2MsIG1vdnNmY2MsIG1vdmRmY2MsIG1vdnRmY2MpOiBMaWtld2lzZS4KKworCSogc3BhcmMvc3BhcmMuYyAoc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBVc2UgZ2VuX2ZsdXNoCisJaW5zdGVhZCBvZiBrbm93aW5nIHdoYXQgcGF0dGVybiBsb29rcyBsaWtlLgorCisJKiBzcGFyYy9zcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IFVzZSBQbW9kZSBpbnN0ZWFkIG9mIFNJbW9kZS4KKworV2VkIEZlYiAgOCAxMDowNToxMSAxOTk1ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZ2VlY2guZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZy5zdWI6IEFkZCBhIGJsYW5rIGluIHRoZSAjISBsaW5lIGZvciA0LjJCU0QsIER5bml4LCBldGMuCisKK1dlZCBGZWIgIDggMDI6NTI6MjEgMTk5NSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogcGEubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBFbWl0IHNhdmUgb2YgdGhlIFBJQyByZWdpc3RlcgorCXdpdGggImVtaXRfaW5zbiIgYmVmb3JlIGVtaXR0aW5nIHRoZSBjYWxsIGluc24gaXRzZWxmLgorCitUdWUgRmViICA3IDE1OjE5OjQwIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2guYyAocHJlcGFyZV9zY2Nfb3BlcmFuZHMsIGZyb21fY29tcGFyZSk6IEZvcmNlIGNvbnN0YW50IDAgaW50bworCXJlZ2lzdGVyIGZvciB1bnNpZ25lZCBjb21wYXJpc29ucy4KKworCSogc2guYzogQ29ycmVjdCBlcnJvcnMgaW4gY29tbWVudHMuCisJKGNhbGNfbGl2ZV9yZWdzLCBleHBhbmRfYWNhbGwpOiBEZWxldGUgVEFSR0VUX1NNQUxMQ0FMTCBzdXBwb3J0LgorCShuZWVkX3Nsb3QpOiBBZGQgY29tbWVudC4gIERlbGV0ZSB0ZXN0IG9mIElOU05fQU5OVUxMRURfQlJBTkNIX1AuCisJKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IERlbGV0ZSAnKicsICdeJywgJyEnIHN1cHBvcnQuCisJKHN5bnRoX2NvbnN0YW50KTogQ2FsbCB6ZXJvX2V4dGVuZCogaW5zdGVhZCBvZiBhbmQqLiAgQ2FsbCBhc2hsc2kzX2sKKwlpbnN0ZWFkIG9mIGFzaGxzaTNfbi4KKwkocHJlcGFyZV9zY2Nfb3BlcmFuZHMpOiBBYm9ydCBmb3IgTkUgY2FzZS4KKwkob3V0cHV0X21vdmVfZG91YmxlLCBvdXRwdXRfZmFyX2p1bXAsIG91dHB1dF9icmFuY2gpOiBEZWxldGUgY29tbWVudGVkCisJb3V0IGNvZGUuICBEb24ndCBvdXRwdXQgYXNzZW1ibGVyIGNvbW1lbnRzLgorCShnZW5fYXNoaWZ0KTogRG9uJ3QgY2FsbCBhZGRzaTMuCisJKGZpeGl0KTogRGVsZXRlIHJlZHVuZGFudCB0ZXN0IGZvciBRSW1vZGUgY29uc3RhbnRzLgorCShoaV9jb25zdCk6IERlbGV0ZSBUQVJHRVRfU0hPUlRBRERSIHN1cHBvcnQuCisJKGZpbmRfYmFycmllcik6IERvbid0IHB1dCBjb25zdGFudCBwb29sIGJldHdlZW4gbW92YSBhbmQgaXRzIGxhYmVsLgorCShhZGRfZnVuY3Rpb24sIHNlZW5fZnVuY3Rpb24sIGJzcl9vcGVyYW5kLCBtYWNfb3BlcmFuZCwKKwlmYWtlX3NoaWZ0KTogRGVsZXRlLgorCShzaF9leHBhbmRfcHJvbG9ndWUsIGV4cGFuZF9hY2FsbCk6IERlbGV0ZSBUQVJHRVRfQlNSIHN1cHBvcnQuCisJKGdlbmVyYWxfbW92c3JjX29wZXJhbmQpOiBEb24ndCByZWplY3Qgbm9uLUkgQ09OU1RfSU5ULgorCSogc2guaDogQ29ycmVjdCBlcnJvcnMgaW4gY29tbWVudHMuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRGVsZXRlIFRBUkdFVF9OT1NBVkUgc3VwcG9ydC4KKwkoVEFSR0VUX01BQywgVEFSR0VUX1RSWVIwLCBUQVJHRVRfTk9TQVZFLCBUQVJHRVRfU01BTExDQUxMLAorCVRBUkdFVF9QQVJBTk9JRCwgVEFSR0VUX1JFVFIyLCBUQVJHRVRfU0hPUlRBRERSLCBUQVJHRVRfQlNSKTogRGVsZXRlLgorCShUQVJHRVRfU1dJVENIRVMpOiBEZWxldGUgYWJvdmUgb3B0aW9ucy4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IERlbGV0ZSBUQVJHRVRfQlNSIHN1cHBvcnQuCisJKEZVTkNUSU9OX0JPVU5EQVJZKTogVXNlIDMyIGJpdCBhbGlnbm1lbnQgd2hlbiBub3QgVEFSR0VUX1NNQUxMQ09ERS4KKwkoRklSU1RfUkVUX1JFRyk6IERlbGV0ZSBUQVJHRVRfUkVUUjIgc3VwcG9ydC4KKwkoTU9ERV9ESVNQX09LX1syMV0pOiBEZWxldGUgVEFSR0VUX1RSWVIwIHN1cHBvcnQuCisJKEVYVFJBX0NPTlNUUkFJTlRfVSk6IERlbGV0ZS4KKwkoQ09OU1RfQ09TVFMpOiBGb3IgbG9naWNhbCBvcGVyYXRpb25zLCBnaXZlIEwgY29uc3RhbnRzIGNvc3QgMS4KKwkoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogRGVsZXRlICcqJywgJ14nLCAnIScuCisJKiBzaC5tZDogQ29ycmVjdCBlcnJvcnMgaW4gY29tbWVudHMuICBEZWxldGUgYWxsIGFzc2VtYmxlciBjb21tZW50cy4KKwlEZWxldGUgY29tbWVudGVkIG91dCBwYXR0ZXJucy4gIERlbGV0ZSBhbGwgcGVlcGhvbGVzIGJ1dCB0d28uCisJRGVsZXRlIGFsbCBkZWZpbmVfc3BsaXRzIGJ1dCBvbmUuICBEZWxldGUgYWxsIGBjb21iaW5lcicgcGF0dGVybnMuCisJKG1weSk6IENvcnJlY3QgbXVsdGlwbHkgbGF0ZW5jaWVzLgorCShuZWVkc19kZWxheV9zbG90LCBoaXRfc3RhY2ssIGludGVycnVwdF9mdW5jdGlvbiwgaW5fZGVsYXlfc2xvdCwKKwlkZWZpbmVfZGVsYXkpOiBDb3JyZWN0IGFuZC9vciBzaW1wbGlmeSBhbGwgcmVvcmcgcmVsYXRlZCBkZWZpbml0aW9ucy4KKwkoYWRkc2kzX3JlYWwpOiBEZWxldGUuCisJKGFkZHNpMyk6IFVzZSBhcml0aF9vcGVyYW5kIGZvciBhcmd1bWVudCAxLgorCShtdWxoaXNpMyk6IFVzZSBhcml0aF9yZWdfb3BlcmFuZCBub3QgbWFjX29wZXJhbmQuCisJKGFuZF9mZmZmLCBhbmRfZmYpOiBEZWxldGUuCisJKGFuZHNpMyk6IEhhbmRsZSBjb25zdGFudCAyNTUgc3BlY2lhbGx5LgorCShyb3QqKTogQ29ycmVjdCBhbmQvb3Igc2ltcGxpZnkgYWxsIHJvdGF0ZSBwYXR0ZXJucy4KKwkoYXNobHNpM19rKTogRGVsZXRlIGNsb2JiZXIgb2YgVCBiaXQuICBPdXRwdXQgYWRkIGZvciAxIGJpdCBzaGlmdC4KKwkoYXNobHNpM19uLCBsc2hyc2kzX24pOiBEZWxldGUgdXNlIG9mIGZha2Vfc2hpZnQuCisJKG5lZ2MpOiBDb3JyZWN0IHBhdHRlcm4gYnkgYWRkaW5nIHNldCBvZiBUIGJpdC4KKwkoZXh0ZW5kKik6IERlbGV0ZSAndScgYW5kICdVJyBjb25zdHJhaW50IGNhc2VzLgorCShwb3ApOiBTZXBhcmF0ZSAnbCcgYW5kICd4JyBjb25zdHJhaW50IGNhc2VzLgorCShtb3ZzaS0xKTogQmV0dGVyIGNvZGUgZm9yIG1vdmUgdG8gVCBiaXQgY2FzZS4KKwkoYnNyLCBic3JfdmFsdWUsIG1hYyk6IERlbGV0ZS4KKworVHVlIEZlYiAgNyAxNDoyMzo1MiAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIHNwYXJjL3NwYXJjLm1kICgqKTogR2l2ZSBuYW1lcyB0byBhbGwgYW5vbnltb3VzIHBhdHRlcm5zLgorCitNb24gRmViICA2IDIzOjQxOjA5IDE5OTUgIFN0ZXBoZW4gTCBNb3NoaWVyICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgorCisJKiBzcGFyYy9zeXN2NC5oIChBU01fT1VUUFVUX0ZMT0FULCBBU01fT1VUUFVUX0RPVUJMRSk6IFJlbW92ZQorCSAgdGVzdHMgZm9yIGhvc3QgPT0gdGFyZ2V0IGZvcm1hdCBhbmQgZW5kaWFubmVzcy4KKworTW9uIEZlYiAgNiAxNjo1MjozOCAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAdGlueS5jeWdudXMuY29tKQorCisJKiBpMzg2LmggKFJUWF9DT1NUUyk6IFJld3JpdGUuCisKKwkqIG02OGsvbGIxc2Y2OC5hc20gKF9fdWRpdnNpMywgX19kaXZzaTMsIF9fdW1vZHNpMywgX19tb2RzaTMpOgorCVJld3JpdGUgdG8gYWN0dWFsbHkgd29yayBmb3IgbW9yZSB0aGFuIGEgZmV3IHNtYWxsIG9wZXJhbmRzLAorCWFuZCB0byBiZSByZWFzb25hYmx5IHNtYWxsLgorCShfX211bHNpMyk6IEVsaW1pbmF0ZSB1c2FnZSBvZiBsaW5rIHJlZ2lzdGVyIChpLmUuIGE2KS4KKwkoc2hpZnQgcGF0dGVybnMpOiBEZWxldGUuCisJKF9fdW11bHNpMyk6IERlbGV0ZS4KKwkqIHQtbTY4a2JhcmUgKExJQjFBU01GVU5DUyk6IFJlbW92ZSBfdW11bHNpMy4KKwkqIHQtdnh3b3JrczY4OiBMaWtld2lzZS4KKworTW9uIEZlYiAgNiAxNToyMjozOSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGdpbmNsdWRlL3ZhLWk5NjAuaCAodmFfc3RhcnQpOiBBZGQgX19idWlsdGluX25leHRfYXJnIGNhbGwuCisKKwkqIHNoL3NoLmMgKHNoX2Z1bmN0aW9uX2FyZyk6IERvbid0IHJlamVjdCB1bmFsaWduZWQgc3RydWN0dXJlcy4KKwkoc2hfZnVuY3Rpb25fYXJnX3BhcnRpYWxfbnJlZ3MpOiBMaWtld2lzZS4KKworCSogc3BhcmMvc3BhcmMubWQgKG1vdnNmLTEsIG1vdmRmLTEsIG1vdnRmLTEpOiBVc2UgJ0YnIG5vdCAnRScuCisKKwkqIHNwYXJjL3NvbDIuaCAoU1RBUlRGSUxFX1NQRUMpOiBEZWxldGUgZXhwbGljaXQgL3Vzci9jY3MvbGliLworCXBhdGhuYW1lcy4KKworCSogcmVsb2FkMS5jIChhbHRlcl9yZWcpOiBOZXcgdmFyaWFibGUgc3RhY2tfc2xvdC4gIEFwcGx5IGFudGkKKwlCWVRFU19CSUdfRU5ESUFOIGNvcnJlY3Rpb24gdG8gc3RhY2sgc2xvdCBhZGRyZXNzIHN0b3JlZCBpbgorCXNwaWxsX3N0YWNrX3Nsb3QuCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gc2VhcmNoaW5nIGZvciBhIExPT1BfRU5EIG5vdGUgdG8gbW92ZSwKKwlzdG9wIGlmIHdlIGZpbmQgYSBMT09QX0JFRyBub3RlIGZpcnN0LgorCitNb24gRmViICA2IDE1OjAzOjM1IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogaTM4Ni9zeXN2My5oIChEQlhfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCisJKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IERlZmluZS4KKworTW9uIEZlYiAgNiAxMTo1NjoxNCAxOTk1ICBKZWZmcmV5IEEuIExhdyAgPGxhd0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBwYS5tZDogUmVwbGFjZSAibWlzYyIgYXR0cmlidXRlIHdpdGggIm11bHRpIiBpbiByZWNlbnRseWFkZGVkCisJc29mdC1mbG9hdCBjb2RlLgorCisJKiBwYS1vc2YuaCAoVEFSR0VUX0RFRkFVTFQpOiBQcm90ZWN0IGRlZmluaXRpb24uCisKK01vbiBGZWIgIDYgMTE6NTI6MjUgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBmaXhpbmNsdWRlczogV2hlbiBjaGFuZ2luZyA8YXNzZXJ0Lmg+IHRvIGluY2x1ZGUgPHN0ZGlvLmg+IG9yCisJPHN0ZGxpYi5oPiwgbWFrZSBpdCBpbmNsdWRlIHRoZW0gb25seSBmb3IgQysrLgorCitTdW4gRmViICA1IDIxOjM5OjQxIDE5OTUgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBjeWdudXMuY29tPgorCisJKiBwYS5jIChnbG9iYWxseSk6IFVzZSBHRU5fSU5ULgorCShlbWl0X21vdmVfc2VxdWVuY2UpOiBVc2UgZXhwYW5kX2luYyBpbnN0ZWFkIG9mIHBsdXNfY29uc3RhbnQKKwkoZ2VuZXJhdGVzIGxlc3MgcnRsKS4KKwkqIHBhLm1kIChnbG9iYWxseSk6IFVzZSBHRU5fSU5ULgorCisJKiBwYS5oIChQUkVESUNBVEVfQ09ERVMpOiBGaXggbWFueSBlcnJvcnMuICBFbmFibGUuCisKKwkqIG02OGsuaCAoUlRYX0NPU1RTKTogQWRkIHNwZWNpYWwgY2FzZXMgZm9yIGEgcGxhaW4gNjgwMDAuCisKKwkqIGV4cG1lZC5jIChtdWxfY29zdCwgZGl2X2Nvc3QpOiBOZXcgdmFyaWFibGVzLgorCShtdWxfd2lkZW5fY29zdCwgbXVsX2hpZ2hwYXJ0X2Nvc3QpOiBOZXcgdmFyaWFibGVzLgorCShpbml0X2V4cG1lZCk6IEluaXQgbmV3IHZhcmlhYmxlcy4KKwkoZXhwYW5kX211bHRfaGlnaHBhcnQpOiBOZXcgYXJndW1lbnQsIE1BWF9DT1NULgorCVVzZSBuZXcgYXJndW1lbnQgaW4gc2V2ZXJhbCBwbGFjZXMuICBTaW1wbGlmeSBjb2RlIHRoYXQgdHJpZXMKKwl3aWRlbmluZyBtdWx0aXBseSB2YXJpYW50cy4KKwkoZXhwYW5kX2Rpdm1vZCk6IE5ldyB2YXJpYWJsZXMgTUFYX0NPU1QsIEVYVFJBX0NPU1QuCisJSW5pdGlhbGl6ZSBNQVhfQ09TVCBkZXBlbmRlbnQgb24gUkVNX0ZMQUcuCisJQ2FsY3VsYXRlIGFuZCBwYXNzIGNvc3QgaW4gYWxsIGNhbGxzIG9mIGV4cGFuZF9tdWx0X2hpZ2hwYXJ0LgorCitTYXQgRmViICA0IDEzOjE5OjI5IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy9hYmk2NC5oLCBtaXBzL2Nyb3NzNjQuaCwgbWlwcy9pcmlzNi5oOiBOZXcgZmlsZXMuCisJKiBtaXBzL2lyaXM1LmggKFRBUkdFVF9ERUZBVUxUKTogQWRkICNpZm5kZWYvI2VuZGlmIGFyb3VuZCBkZWZpbmUuCisJKiBtaXBzL21pcHMuYyAobWlwc19pc2Ffc3RyaW5nKTogQWRkIG1pcHM0IHRvIGNvbW1lbnQuCisJKGxhcmdlX2ludCk6IERlbGV0ZSBjb2RlIGZvciBoYW5kbGluZyA2NCBiaXQgY29uc3RhbnRzLgorCShtaXBzX2NvbnN0X2RvdWJsZV9vayk6IEZvciBpcml4NiwgcmVqZWN0IGFsbCBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisJKG1pcHNfbW92ZV8yd29yZHMpOiBVc2UgZGxpIG5vdCBsaSBmb3IgNjQgYml0IGNvbnN0YW50cy4KKwlVc2UgZGxhIG5vdCBsYSBmb3IgNjQgYml0IGFkZHJlc3Nlcy4KKwkob3V0cHV0X2Jsb2NrX21vdmUpOiBMaWtld2lzZS4KKwkoZnVuY3Rpb25fYXJnKTogQWRkIHN1cHBvcnQgZm9yIDY0Yml0IEFCSS4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IEFkZCBzdXBwb3J0IGZvciBtaXBzNCBhbmQgUjgwMDAuCisJKHByaW50X29wZXJhbmQpOiBIYW5kbGUgbmV3IG1vZGlmaWVycyAnQicsICdiJywgJ1QnLCAndCcuCisJTWFrZSAnWCcgY2FzZSB3b3JrIGZvciA2NCBiaXQgaG9zdC4KKwkobWlwc19vdXRwdXRfZmlsZW5hbWUpOiBVc2UgQVNNX09VVFBVVF9GSUxFTkFNRS4KKwkobWlwc19hc21fZmlsZV9zdGFydCk6IEdvIHRvIHRleHQgc2VjdGlvbiBmb3IgNjRiaXQgQUJJLgorCShjb21wdXJlX2ZyYW1lX3NpemUsIHNhdmVfcmVzdG9yZV9pbnNucywgZnVuY3Rpb25fcHJvbG9ndWUsCisJbWlwc19leHBhbmRfcHJvbG9ndWUsIGZ1bmN0aW9uX2VwaWxvZ3VlKTogQWRkIHN1cHBvcnQgZm9yIDY0IGJpdCBBQkkuCisJKHR5cGVfZGVwZW5kZW50X3JlZywgbWlwc19mdW5jdGlvbl92YWx1ZSk6IE5ldyBmdW5jdGlvbnMuCisJKiBtaXBzL21pcHMuaCAoX19QVFJfVE9fSU5ULCBfX0lOVF9UT19QVFIpOiBEZWxldGUuCisJKGVudW0gcHJvY2Vzc29yX3R5cGUpOiBBZGQgUjgwMDAuCisJKG1pcHNfaXNhX3N0cmluZywgQ0MxX1NQRUMpOiBBZGQgbWlwczQgdG8gY29tbWVudC4KKwkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBVc2UgU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFLgorCShTVUJUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBOZXcgbWFjcm8uCisJKEFTTV9TUEVDLCBMSU5LX1NQRUMsIENQUF9TUEVDKTogQWRkIG1pcHM0IHN1cHBvcnQuCisJKE1JUFNfVEVNUFsxMl1fUkVHTlVNKTogQ2hhbmdlIHRvIGF2b2lkIGNsb2JiZXJpbmcgNjRiaXQgYWJpCisJcGFyYW1ldGVyIHJlZ2lzdGVycy4KKwkoU01BTExfSU5ULCBTTUFMTF9JTlRfVU5TSUdORUQsIENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IEZpeCBmb3IgNjQKKwliaXQgaG9zdC4KKwkoQUJJXzY0QklUKTogTmV3IG1hY3JvLgorCShSRUdfUEFSTV9TVEFDS19TUEFDRSk6IFVzZSBVTklUU19QRVJfV09SRCBub3QgNC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTLCBDT05TVEFOVF9BRERSRVNTX1AsIExFR0lUSU1BVEVfQ09OU1RBTlQsCisJTEVHSVRJTUlaRV9BRERSRVNTKTogRG9uJ3QgYWxsb3cgQ09OU1QgYWRkcmVzc2VzIGZvciBJcml4Ni4KKwkoQVNNX09VVFBVVF9GSUxFTkFNRSk6IE5ldyBtYWNyby4KKwkoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogQWRkIDY0IGJpdCBBQkkgc3VwcG9ydC4KKwkqIG1pcHMvbWlwcy5tZCAodHlwZSBhdHRyaWJ1dGUpOiBBZGQgZm1hZGQuCisJKGNwdSBhdHRyaWJ1dGUpOiBBZGQgcjgwMDAuCisJKHVtYWRkaSsxLCAuLi4sIHVtYWRkZGkrOCk6IEFkZCBwYXR0ZXJuIGZvciBtdWx0aXBseSBhY2N1bXVsYXRlLgorCShtb3ZkaSk6IExlZ2l0aW1pemUgYWRkcmVzc2VzLCBqdXN0IGxpa2UgbW92c2kgZG9lcy4KKwkobG9hZGdwKTogTmV3IHBhdHRlcm4gZm9yIDY0IGJpdCBBQkkuCisJKHNoaWZ0IHBhdHRlcm5zKTogVXNlIElOVFZBTCBpbnN0ZWFkIG9mIFhJTlQgZm9yIGNvbnN0YW50cy4KKwkoanVtcCwgdGFibGVqdW1wX2ludGVyYWxbMTJdKTogQWRkIDY0IGJpdCBBQkkgc3VwcG9ydC4KKwkobW92c2ljYy04LCAuLi4sIG1vdnNpY2MpOiBBZGQgcGF0dGVybnMgZm9yIGNvbmRpdGlvbmFsIG1vdmVzLgorCSogbWlwcy90LWNyb3NzNjQsIG1pcHMvdC1pcmlzNiwgbWlwcy94LWlyaXM2LCBtaXBzL3htLWlyaXM2Lmg6CisJTmV3IGZpbGVzLgorCSogY29uZmlndXJlOiBBZGQgaXJpeDYgYW5kIGlyaXg1Y3Jvc3M2NCBjb25maWd1cmF0aW9ucy4KKwkqIGdpbmNsdWRlL3ZhLW1pcHMuaCAoKik6IENoYW5nZSBfX21pcHM9PTMgdG8gX19taXBzPj0zLgorCShzZ2lkZWZzLmgpOiBJbmNsdWRlIGlmIF9NSVBTX1NJTSBpcyBkZWZpbmVkLgorCSh2YV9zdGFydCk6IEFkZCBzdXBwb3J0IGZvciA2NCBiaXQgQUJJLgorCitTYXQgRmViICA0IDEwOjMxOjM3IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogZGJ4b3V0LmMgKGRieG91dF9zb3VyY2VfZmlsZSk6IERvbid0IHN3aXRjaCB0byB0ZXh0IHNlY3Rpb24gaWYKKwlpbiBmdW5jdGlvbiB3aXRoIHNlY3Rpb24gYXR0cmlidXRlLiAgUHJpbnQgTHRleHQgbGFiZWwgdG8gY29ycmVjdAorCWZpbGUgKGltcG9ydGFudCBvbiBtaXBzKS4KKworRnJpIEZlYiAgMyAxNDo0MzoyMyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogcnM2MDAwL3JzNjAwMC5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IElmIGJ1aWxkaW5nIGZvciBTeXN0ZW0gVi40CisJb3IgZUFCSSwgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGp1c3QgcG9pbnRlcnMsIG5vdCBwb2ludGVycyB0byBhCisJdGhyZWUgd29yZCBhcmVhLgorCitUaHUgRmViICAyIDE1OjUwOjI2IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogZml4aW5jbHVkZXM6IFdoZW4gZml4aW5nIGJvb2wgaW4gPGN1cnNlcy5oPiwgcGVybWl0IHdoaXRlc3BhY2UKKwliZWZvcmUgdGhlIHNlbWljb2xvbi4gIE5lZWRlZCBvbiBBSVggMy4yLjUuCisKK1RodSBGZWIgIDIgMTI6MDY6MTIgMTk5NSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBtaHBjYy5lZHU+CisKKwkqIHJzNjAwMC5tZCAoc21heDpTRiBkZWZpbmVfc3BsaXQpOiBDaGFuZ2UgbWF0Y2hfb3BlcmFuZCB0eXBvIHRvCisJbWF0Y2hfZHVwLgorCShzbWluOlNGIGRlZmluZV9zcGxpdCk6IExpa2V3aXNlLgorCShzbWF4OkRGIGRlZmluZV9zcGxpdCk6IExpa2V3aXNlLgorCShzbWluOkRGIGRlZmluZV9zcGxpdCk6IExpa2V3aXNlLgorCitXZWQgRmViICAxIDE2OjUwOjE4IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBjeWdudXMuY29tKQorCisJKiBjb25maWcuc3ViOiBBZGQgc3VwcG9ydCBmb3IgcG93ZXJwYy0qLXtlbGYsc3ZyNCxlYWJpfS4KKwkqIGNvbmZpZ3VyZTogRGl0dG8uCisKKwkqIHJzNjAwMC94bS1zeXN2NC5oOiBOZXcgZmlsZSwgdG8gc3VwcG9ydCBidWlsZGluZyBHQ0MgZm9yIGEKKwlTeXN0ZW0gVi40IFBvd2VyUEMgc3lzdGVtLgorCSogcnM2MDAwL3N5c3Y0Lmg6IERpdHRvLgorCSogcnM2MDAwL3gtc3lzdjQ6IERpdHRvLgorCisJKiByczYwMDAvZWFiaS5oOiBOZXcgZmlsZSwgdG8gc3VwcG9ydCBidWlsZGluZyBHQ0MgZm9yIGFuIGVtYmVkZGVkCisJUG93ZXJQQyBzeXN0ZW0uCisKKwkqIHJzNjAwMC9yczYwMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tbXVsdGlwbGUsIC1tbm8tbXVsdGlwbGUKKwl0byBjb250cm9sIGVtaXR0aW5nIGxvYWQvc3RvcmUgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zLiAgT24gdGhlCisJcG93ZXIsIHRoaXMgaXMgb24gYnkgZGVmYXVsdCwgYW5kIG9uIHRoZSBwb3dlcnBjIGl0IGlzIG9mZi4KKwkoU1VCVEFSR0VUX1NXSVRDSEVTKTogTmV3IG1hY3JvLCB3aGljaCBkZWZhdWx0cyB0byBub3RoaW5nIHRvCisJYWxsb3cgYSBzdWJ0YXJnZXQgdG8gYWRkIG5ldyBzd2l0Y2hlcy4KKwkoU0FWRV9GUF8qLCBSRVNUT1JFX0ZQXyopOiBOZXcgbWFjcm9zIHRoYXQgZ2l2ZSB0aGUgcHJlZml4IGFuZAorCXN1ZmZpeCB0byB1c2UgZm9yIHRoZSBmdW5jdGlvbnMgdGhhdCBzYXZlIGFuZCByZXN0b3JlIHRoZSBmbG9hdGluZworCXBvaW50IHJlZ2lzdGVycy4KKworCSogcnM2MDAwL3JzNjAwMC5jIChvdXRwdXRfcHJvbG9nKTogVXNlIFRBUkdFVF9NVUxUSVBMRSBpbnN0ZWFkIG9mCisJVEFSR0VUX1BPV0VSIHRvIGNvbnRyb2wgd2hldGhlciB0byBlbWl0dCBsb2FkL3N0b3JlIG11bHRpcGxlCisJaW5zdHJ1Y3Rpb25zLiAgVXNlIHRoZSBTQVZFX0ZQXyovUkVTVE9SRV9GUF8qIG1hY3JvcyBpbnN0ZWFkIG9mCisJdXNpbmcgdGhlIGhhcmR3aXJlZCBBSVggbmFtZXMgZm9yIHRoZSBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQKKwlyZXN0b3JlIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisJKG91dHB1dF9lcGlsb2cpOiBMaWtld2lzZS4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogRG8gbm90IHByZXBlbmQgYSAnLicgZm9yICV6IHdoZW4gdXNpbmcKKwl0aGUgRUxGIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkoc3ZyNF90cmFjZWJhY2spOiBOZXcgZnVuY3Rpb24gdG8gZW1pdCB0aGUgd29yZCBiZWZvcmUgdGhlCisJcHJvY2VkdXJlIHByb2xvZ3VlIHRoYXQgU3lzdGVtIFYuNCBleHBlY3RzIHRvIGRvIHRyYWNlYmFja3MuCisJKG91dHB1dF9wcm9sb2cpOiBDYWxsIHN2cjRfdHJhY2ViYWNrIHVuZGVyIEVMRiBzeXN0ZW1zLgorCShvdXRwdXRfZXBpbG9nKTogT21pdCBBSVggc3R5bGUgdHJhY2ViYWNrIHRhYmxlcyBmb3IgRUxGIHN5c3RlbXMuCisJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IEFib3J0IGZvciBub3cgaW4gdGhlIEVMRiBjYXNlLgorCisJKiByczYwMDAvcnM2MDAwLm1kIChsb2FkX211bHRpcGxlLCBzdG9yZV9tdWx0aXBsZSk6IFRlc3QgYWdhaW5zdAorCVRBUkdFVF9NVUxUSVBMRSBpbnN0ZWFkIG9mIFRBUkdFVF9QT1dFUi4KKworVHVlIEphbiAzMSAxOToyNzo0MyAxOTk1ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAY3lnbnVzLmNvbT4KKworCSogcGEuaCAoUkVBTF9BUklUSE1FVElDKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0RPVUJMRSk6IFJld3JpdGUuCisJKEFTTV9PVVRQVVRfRkxPQVQpOiBSZXdyaXRlLgorCSogcGEubWQgKFNGIGFuZCBERiBtb3ZlKTogVXNlIGNvbnN0cmFpbnQgJ0UnIGluc3RlYWQgb2YgJ0YnLgorCSogcGEuYyAoc2luZ2xlbW92ZV9zdHJpbmcpOiBNYWtlIGNhc2Ugd2l0aCBTRm1vZGUgQ09OU1RfRE9VQkxFIGFib3J0LgorCShwcmludF9vcGVyYW5kKTogI2lmZGVmIG91dCBDT05TVF9ET1VCTEUgY2FzZXMuCisKK1R1ZSBKYW4gMzEgMTk6Mjc6NDMgMTk5NSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBwYS9wYS5oIChUQVJHRVRfU09GVF9GTE9BVCk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTLCBDUFBfU1BFQywgQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UsIEZVTkNUSU9OX1ZBTFVFLAorCUxJQkNBTExfVkFMVUUsIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1AsIEZVTkNUSU9OX0FSR19SRUdOT19QLAorCUZVTkNUSU9OX0FSRywgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSwgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTLAorCVJUWF9DT1NUUyk6IFVzZSBUQVJHRVRfU09GVF9GTE9BVC4KKwkqIHBhL3BhLm1kICgqc2YqLCAqZGYqLCBldGMpOiBNYWtlIGFsbCBmbG9hdGluZyBwb2ludCBwYXR0ZXJucyBkZXBlbmQKKwlvbiAhIFRBUkdFVF9TT0ZUX0ZMT0FULgorCShtb3ZzaSwgbW92ZGksIG1vdnNmLCBtb3ZkZik6IEFkZCBwYXR0ZXJucyBmb3IgVEFSR0VUX1NPRlRfRkxPQVQuCisKK1R1ZSBKYW4gMzEgMTU6NTM6MDQgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKyAgICAgICAgKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1me25vLSx9Y2hlY2stbmV3LgorCitUdWUgSmFuIDMxIDEzOjU1OjM3IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogbWlwcy9taXBzLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBFbnN1cmUgc2VjdGlvbiBpcyAudGV4dCBpZgorCW5vIHNlY3Rpb24gYXR0cmlidXRlLgorCSogbWlwcy9lbGY2NC5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IFVzZSBhc21fb3V0X3RleHRfZmlsZSBmb3IKKwlmdW5jdGlvbnMuCisKK1R1ZSBKYW4gMzEgMTM6MjY6NDIgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBsaWJnY2MyLmM6IEluY2x1ZGUgPGxpbWl0cy5oPiwgbm90ICJnbGltaXRzLmgiLgorCitNb24gSmFuIDMwIDE2OjM0OjI0IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisgICAgICAgICogYy1jb21tb24uYyAodHlwZV9mb3Jfc2l6ZSk6IFRyeSB0byBtYXRjaCBvbiBpbnQgYmVmb3JlIG90aGVyCisgICAgICAgIHR5cGVzICh3aGljaCBtaWdodCBiZSB0aGUgc2FtZSBzaXplKS4KKyAgICAgICAgKHR5cGVfZm9yX21vZGUpOiBEaXR0by4KKworU2F0IEphbiAyOCAxNjoyODoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvc3BhcmMvc3lzdjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiAjdW5kZWYgYmVmb3JlCisgCWRlZmluaW5nLgorCitTYXQgSmFuIDI4IDEzOjU0OjIzIDE5OTUgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoY2FsbCwgY2FsbF92YWx1ZSk6IEFsd2F5cyBzYXZlIHRoZSBQSUMgcmVnaXN0ZXIgYmVmb3JlCisJYSBjYWxsLgorCitTYXQgSmFuIDI4IDA3OjMxOjI2IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IFJlZmluZSBjaGVjayBmb3IgcmV0dXJuaW5nIHBvaW50ZXIKKwl0byBsb2NhbCB2YXJpYWJsZSB0byBhbGxvdyBzdWJ0cmFjdGluZyBhIHBvaW50ZXIgZnJvbSBpdC4KKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBXaGVuIGVtaXR0aW5nIHF1ZXVlIGZvciBlYWNoIGFyZywKKwljYWxsIHByb3RlY3RfZnJvbV9xdWV1ZTsgcHV0IGluIGluaXRpYWxfdmFsdWUgc28gRVhQUl9MSVNUIGluCisJaXNfY29uc3QgY2FzZSB3b24ndCBoYXZlIFFVRVVFRC4KKworU2F0IEphbiAyOCAwNDozNjo0NiAxOTk1ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEubWQgKGNhbGxfaW50ZXJuYWxfcmVnKTogVXNlIGFuIGV2ZW4gZmFzdGVyIHNlcXVlbmNlIGZvcgorCVRBUkdFVF9GQVNUX0lORElSRUNUX0NBTExTLgorCShjYWxsX3ZhbHVlX2ludGVybmFsX3JlZyk6IExpa2V3aXNlLgorCitGcmkgSmFuIDI3IDIxOjI4OjUxIDE5OTUgIFJvbmFsZCBGLiBHdWlsbWV0dGUgIChyZmdAc2VnZmF1bHQudXMuY29tKQorCisJKiBjb25maWcuc3ViICh1bml4d2FyZSwgc3ZyNCk6IFRyZWF0IGFzIHN5bm9ueW1zIGZvciBzeXN2NC4KKworRnJpIEphbiAyNyAxOTozNjoxMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcvaTM4Ni9nbnVlbGYuaDogTmV3IGZpbGUuCisKK0ZyaSBKYW4gMjcgMTY6NTU6MDUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbGliZ2NjMS5jIChwZXJmb3JtX2xzaGxzaTMsIF9fbHNobHNpMyk6IERlbGV0ZWQuCisJKiBsaWJnY2MyLmMgKF9fbHNobGRpMyk6IERlbGV0ZWQuCisJKiBNYWtlZmlsZS5pbiAoTElCMUZVTkNTKTogRGVsZXRlIF9sc2hsc2kzLgorCShMSUIyRlVOQ1MpOiBEZWxldGUgX2xzaGxkaTMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgTUlOVVNfRVhQUik6IFJlbW92ZSBib2d1cyBvcGVyYW5kIHN3YXAuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBBZGQgbWlzc2luZyB0ZXN0IGZvciBWT0lEbW9kZQorCWJlZm9yZSBjYWxsaW5nIGNvbnZlcnRfdG9fbW9kZS4KKworCSogZmluYWwuYyAoaGlnaF97YmxvY2ssZnVuY3Rpb259X2xpbmVudW0pOiBOZXcgdmFyaWFibGVzLgorCShmaW5hbF9zdGFydF9mdW5jdGlvbik6IEluaXRpYWxpemUgdGhlbS4KKwkoZmluYWxfZW5kX2Z1bmN0aW9uKTogUGFzcyBoaWdoZXN0IGxpbmUgbnVtYmVyIHRvIGZ1bmN0aW9uIGVuZAorCWRlYnVnZ2luZyByb3V0aW5lcy4KKwkoZmluYWxfc2Nhbl9pbnNuKTogUGFzcyBoaWdoZXN0IGxpbmUgbnVtYmVyIGluIGJsb2NrIHRvIGJsb2NrIGVuZAorCWRlYnVnZ2luZyBmdW5jdGlvbi4KKwkob3V0cHV0X3NvdXJjZV9saW5lKTogVXBkYXRlIGhpZ2hlc3QgbGluZSBpbiBibG9jayBhbmQgZnVuY3Rpb24uCisKK1RodSBKYW4gMjYgMDM6NDY6MzUgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlndXJlIChpWzM0NV04Ni0qbGludXgqKTogU2V0ICRleHRyYV9wYXJ0cyBpZiAkZWxmLgorCSgqLSotZ251Kik6IExpa2V3aXNlLgorCitXZWQgSmFuIDI1IDE4OjExOjE5IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogc2guYyAocHJlcGFyZV9zY2Nfb3BlcmFuZHMpOiBGb3JjZSBzaF9jb21wYXJlX29wMSB0byBhIHJlZ2lzdGVyIGlmCisJaXQgaXMgYW4gaW52YWxpZCBjb25zdGFudC4KKwkob3V0cHV0X2JyYW5jaCk6IEFkZCBjYXNlcyBmb3IgNCwgOCwgYW5kIDE4LiAgQ29ycmVjdCBicmFuY2ggb2Zmc2V0cworCWluIGNvbW1lbnRzLgorCShmaW5kX2JhcnJpZXIpOiBDb3JyZWN0IHRlc3QgZm9yIG1vdmUgaW5zdHJ1Y3Rpb25zIHRoYXQgbmVlZCB0byBiZQorCWZpeGVkIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBzZXQgc291cmNlIGlzIGEgYmFkIGNvbnN0YW50LgorCShhcml0aF9yZWdfb3JfMF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogc2guaCAoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQWRkIGNhc2UgZm9yICdOJy4gIENvcnJlY3QgY29tbWVudC4KKwkoQURKVVNUX0lOU05fTEVOR1RILCBTSE9SVEVOX1dJVEhfQUpVU1RfSU5TTl9MRU5HVEgpOiBOZXcgbWFjcm9zLgorCSogc2gubWQgKGRlZmluZV9hdHRyIHR5cGUpOiBDb21iaW5lIHBjbG9hZHNpIGFuZCBwY2xvYWRoaSBpbnRvIHBjbG9hZC4KKwkoKik6IExpa2V3aXNlIGZvciBhbGwgcGF0dGVybnMgdGhhdCB1c2UgdGhlbS4KKwkoZGVmaW5lX2F0dHIgbGVuZ3RoKTogRGVsZXRlIGNhc2VzIGZvciBwY2xvYWRzaSBhbmQgcGNsb2FkaGkuCisJTW9kaWZ5IGJyYW5jaCBvZmZzZXRzIGFuZCBsZW5ndGhzIHRvIGJlIGNvcnJlY3QuICBDb3JyZWN0IGNvbW1lbnQuCisJKCopOiBDb3JyZWN0IGxlbmd0aCBhdHRyaWJ1dGVzIGZvciBhbGwgcGF0dGVybnMuCisJKGluX2RlbGF5X3Nsb3QpOiBEZWxldGUgbWF5YmUgdmFsdWUuICBDaGFuZ2UgZGVmYXVsdCBjYXNlIGZyb20geWVzIHRvCisJbm8uICBEZWxldGUgY2FzZSBmb3IgbGVuZ3RocyBvZiA0LCA2LCA4LCAxMCwgYW5kIDEyLgorCShjbXBlcV8wLCBjbXBlcV8wLTEsIGNtcGVxXzAtMik6IERlbGV0ZSBwYXR0ZXJucy4KKwkoY21wZXFzaV90KTogRGVsZXRlIGNhc2Ugd2l0aCBjb25zdGFudCBhcyBmaXJzdCBvcGVyYW5kLgorCShjbXBndHNpX3QsIGNtcGdlc2lfdCk6IFVzZSBhcml0aF9yZWdfb3JfMF9vcGVyYW5kIG5vdCBhcml0aF9vcGVyYW5kLgorCVB1dCByZWdpc3RlciBjYXNlcyBmaXJzdC4KKwkoY21wZ2V1c2lfdCwgY21wZ3R1c2lfdCk6IERlbGV0ZSBjYXNlcyBmb3IgY29tcGFyaW5nIGFnYWluc3QgemVyby4KKwkoanVtcCk6IENhbGwgb3V0cHV0X2Zhcl9qdW1wIGlmIGluc24gbGVuZ3RoID49IDE0IGluc3RlYWQgb2YgPT0gMTQuCisJKGNhc2VzaSk6IFVzZSBhcml0aF9yZWdfb3BlcmFuZCBub3QgYXJpdGhfb3BlcmFuZCBmb3Igb3BlcmFuZCAyLgorCisJKiBmaXhpbmNsdWRlcyAoc3RyaW5ncy5oKTogRml4IHJldHVybiB0eXBlIG9mIHN0cmxlbi4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBNSU5fRVhQUik6IElmIG11c3QgZW1pdCBtdWx0aXBsZQorCWluc3RydWN0aW9ucywgdGhlbiBkb24ndCBhbGxvdyBhIE1FTSB0YXJnZXQuCisKK1dlZCBKYW4gMjUgMTc6MDc6NDcgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEZvciBWTVMsIGRvbid0IGF0dGVtcHQgdG8KKwl0cmVhdCBgI2luY2x1ZGUgWCcgYXMgYCNpbmNsdWRlIDxYLmg+JyB1bmxlc3MgYFgnIGhhcyBhbHJlYWR5IGJlZW4KKwltYWNybyBleHBhbmRlZC4KKwkobWFpbik6IEZvciBWTVMsIGRvIGEgYmV0dGVyIGpvYiBvZiBwaWNraW5nIG91dCB0aGUgYmFzZSBuYW1lIGZyb20KKwlhcmd2WzBdJ3MgYWJzb2x1dGUgbmFtZS4KKwkqIHZheC94bS12bXMuaCAoRkFJTFVSRV9FWElUX0NPREUpOiBEZWZpbmUuCisKK1dlZCBKYW4gMjUgMTQ6NTA6NDUgMTk5NSAgRGF2aWQgUy4gTWlsbGVyICAoZGF2ZW1AbmFkemllamEucnV0Z2Vycy5lZHUpCisKKwkqIGdlbmF0dHJ0YWIuYyAoY2hlY2tfYXR0cl92YWx1ZSk6IENoYW5nZSBlcnJvciBtZXNzYWdlIHRleHQuCisJKHNpbXBsaWZ5X3Rlc3RfZXhwKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKGV4cGFuZF9hc20sIGV4cGFuZF9hc21fb3BlcmFuZHMpOiBMaWtld2lzZS4KKwkqIG1pcHMuYyAocHJpbnRfb3BlcmFuZCwgcHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogTGlrZXdpc2UuCisJKiBkc3AxNnh4LmMgKGRzcDE2eHhfcmVnX2NsYXNzX2Zyb21fbGV0dGVyKTogTGlrZXdpc2UuCisJKGxpbWl0X3JlbG9hZF9jbGFzcywgZG91YmxlX3JlZ190b19tZW1vcnkpOiBMaWtld2lzZS4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzLCBlbWl0XzE2MDBfY29yZV9zaGlmdCk6IExpa2V3aXNlLgorCShnZW5fdHN0X3JlZywgZ2VuX2NvbXBhcmVfcmVnKTogTGlrZXdpc2UuCisJKiBkc3AxNnh4Lm1kIChjb21wYXJlKTogTGlrZXdpc2UuCisJKiB1bnJvbGwuYyAoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBMaWtld2lzZS4KKworV2VkIEphbiAyNSAxMzoyMToxMCAxOTk1ICBNYXR0aGlhcyBQZmFsbGVyIChsZW9AbWFyY28uZGUpCisKKwkqIGNvbmZpZ3VyZSAobnMzMmstcGM1MzItbmV0YnNkKTogVXNlIG5ldGJzZDMyay5oIGluc3RlYWQgb2YgbmV0YnNkLmguCisJKiBuczMyay9uZXRic2QzMmsuaDogUmVuYW1lZCBmcm9tIG5ldGJzZC5oLgorCURvbid0IGluY2x1ZGUgYW5zaS5oLgorCUluY2x1ZGUgY29uZmlnL25ldGJzZC5oIGFuZCBkZWxldGUgZGVmaW5pdGlvbnMgaW5jbHVkZWQgZnJvbSBpdC4KKwkqIG5zMzJrL3htLW5ldGJzZC5oIChIQVZFX0FURVhJVCk6IERlbGV0ZWQuCisKK1dlZCBKYW4gMjUgMTI6NTM6NDAgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrL21vdDMzMDAuaCAoREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTik6IERlZmluZSBhcyB6ZXJvLgorCShSRVRVUk5fSU5fTUVNT1JZKTogU21hbGwgYWdncmVnYXRlcyBhcmUgdG8gYmUgcmV0dXJuZWQgaW4gZDAuCisKK1dlZCBKYW4gMjUgMTI6NDg6NDMgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IEZpeCB0eXBvOiAnXCcgY2F1c2VkIG5leHQgY2hhciB0bworCWJlIGNvcGllZCBibGluZGx5LCB3aGljaCB3YXMgYW4gZXJyb3IgaWYgIXRyYWRpdGlvbmFsIGFuZCBpZgorCXRoZSBuZXh0IGNoYXIgd2FzIG5ld2xpbmUgb3Igb25lIG9mIDxcJyIvLgorCitXZWQgSmFuIDI1IDA4OjE1OjQ5IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYzogSW5jbHVkZSBleHByLmggYWZ0ZXIgaW5zbi1jb25maWcuaCBhbmQgaW5zbi1mbGFncy5oLgorCitUdWUgSmFuIDI0IDIzOjE5OjI4IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCUltcHJvdmVkIGNvbmRpdGlvbmFsIG1vdmUgc3VwcG9ydCBmcm9tIFJpY2hhcmQgRWFybnNoYXcuCisJKiBvcHRhYnMuYyAobW92Y2NfZ2VuX2NvZGUpOiBOZXcgdmFyaWFibGUuCisJKGluaXRfb3B0YWJzKTogSW5pdGlhbGl6ZSBpdC4KKwkoZW1pdF9jb25kaXRpb25hbF9tb3ZlKTogTmV3IGZ1bmN0aW9uLgorCShjYW5fY29uZGl0aW9uYWxseV9tb3ZlX3ApOiBOZXcgZnVuY3Rpb24uCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NldCk6IENhbGwgaXQuCisJKiBleHByLmg6IChlbWl0X2NvbmRpdGlvbmFsX21vdmUpOiBEZWNsYXJlIGl0LgorCShjYW5fY29uZGl0aW9uYWxseV9tb3ZlX3ApOiBMaWtld2lzZS4KKwkobW92Y2NfZ2VuX2NvZGUpOiBMaWtld2lzZS4KKwkqIGdlbm9waW5pdC5jIChvcHRhYnMpOiBBZGQgZW50cnkgZm9yIG1vdmNjX2dlbl9jb2RlLgorCSogZ2VuY29uZmlnLmMgKG1haW4pOiBEZWxldGUgI2lmbmRlZiBhcm91bmQgSEFWRV9jb25kaXRpb25hbF9tb3ZlLgorCSoganVtcC5jIChqdW1wX29wdGltaXplKTogVHJ5IHRvIGVtaXQgYSBjb25kaXRpb25hbCBtb3ZlIGluc24gYmVmb3JlCisJdHJ5aW5nIGEgc3RvcmUtZmxhZyBpbnNuLgorCSogYWxwaGEubWQgKG1vdnNpY2MpOiBOZXcgbmFtZWQgcGF0dGVybi4KKwkobW92ZGljYywgbW92c2ZjYywgbW92ZGZjYyk6IExpa2V3aXNlLgorCShTSW1vZGUgY29uZGl0aW9uYWwgbW92ZSk6IE5ldyBtYXRjaGVyLgorCSogc3BhcmMuaCAoSEFWRV9jb25kaXRpb25hbF9tb3ZlKTogRGVsZXRlLgorCisJKiBjb25maWd1cmU6IFJlY29nbml6ZSBhbmQgaWdub3JlIC0teC0qIG9wdGlvbnMuCisKK01vbiBKYW4gMjMgMjM6MjM6MzMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnL3N2cjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBSZW5hbWVkIGZyb20KKyAJQVNNX09VVFBVVF9TRUNUSU9OLiAgVGhlIG9sZCBuYW1lIHdhcyBhIHR5cG8uCisJKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogVGFrZSBwcm9wZXIgbnVtYmVyIG9mIGFyZ3MuCisKK01vbiBKYW4gMjMgMTg6NTE6MzggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKyAgICAgICAgKiBjb2xsZWN0Mi5jIChtYWluKTogQ2hlY2sgTERfSU5JVF9TV0lUQ0ggYW5kIExEX0ZJTklfU1dJVENICisgICAgICAgIHNlcGFyYXRlbHkuCisgICAgICAgIChzY2FuX3Byb2dfZmlsZSk6IERvbid0IGFkZCBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXplcnMgb3IKKyAgICAgICAgZmluYWxpemVycyB0byBsaXN0IGlmIExEX0lOSVRfU1dJVENIIG9yIExEX0ZJTklfU1dJVENIIGFyZQorICAgICAgICBkZWZpbmVkLCByZXNwZWN0aXZlbHkuCisKK01vbiBKYW4gMjMgMTg6NDU6MTMgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBjb25maWcvbWlwcy9taXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBQZXJtaXQgYW55IHNtYWxsIGludGVncmFsCisJbW9kZSBpbiB0aGUgSEkvTE8gcmVnaXN0ZXJzLgorCitNb24gSmFuIDIzIDE1OjQxOjEwIDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQGN5Z251cy5jb20+CisKKwkqIGg4MzAwLm1kICh0YWJsZV9qdW1wX2g4MzAwLCB0YWJsZV9qdW1wX2g4MzAwaCk6IENvbnN0cmFpbgorCW9wZXJhbmQgdG8gdXNlIHJlZ2lzdGVyLgorCitTYXQgSmFuIDIxIDAwOjAxOjA4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZ3VyZSAoKi0qLWdudWVsZiopOiBTZXQgZWxmPXllcy4KKwkoKi0qLWdudSopOiBVc2UgJHtjcHVfdHlwZX0vZ251ZWxmLmggdW5kZXIgLS13aXRoLWVsZi4KKworRnJpIEphbiAyMCAyMDoxMToxNyAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IENhbiBoYW5kbGUgcGFyYWRveGljYWwgc3VicmVnIG9ubHkKKwlpZiBMT0FEX0VYVEVORF9PUCBpcyBkZWZpbmVkIHRvIFNJR05fRVhURU5ELgorCisJKiBsb29wLmMgKHJlY29yZF9naXYpOiBJbml0aWFsaXplIG5ldyBmaWVsZCBzYW1lX2luc24uCisJKiBsb29wLmggKHN0cnVjdHVyZSBpbmR1Y3Rpb24pOiBBZGQgbmV3IGZpZWxkIHNhbWVfaW5zbi4KKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IFdoZW4gY2hlY2sgZm9yIHNoYXJlZCBhZGRyZXNzIGdpdnMsIHVzZQorCW5ldyBzYW1lX2luc24gZmllbGQuCisJKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogTmV3IHZhcmlhYmxlIHYyLiAgU2NhbiBnaXZzIHRvIHNldCBuZXcKKwlzYW1lX2luc24gZmllbGQuICBVc2Ugc2FtZV9pbnNuIHRvIGluZGVudGlmeSBhZGRyZXNzIGdpdnMgdG8gYmUKKwlzaGFyZWQuCisKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBObyBsb25nZXIgbmVlZCB0byBjaGVjayBmb3IgZGVsZXRlZAorCW5vbmxvY2FsX2xhYmVscy4KKwkqIGZ1bmN0aW9uLmMgKGRlbGV0ZV9oYW5kbGVycyk6IFdoZW4gY2xlYXIgTEFCRUxfUFJFU0VSVkVfUCwKKwlhbHNvIHJlbW92ZSBsYWJlbCBmcm9tIG5vbmxvY2FsX2xhYmVsIGxpc3QuCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBBZGQgY29tbWVudCB0aGF0CisJbm9ubG9jYWxfbGFiZWwgbGlzdCBzaG91bGQgYmUgdXBkYXRlZCBpZiBpdCBldmVyIGNhbiBiZSBub256ZXJvLgorCisJKiBzZGJvdXQuYyAoc3ltcy5oKTogRG9uJ3QgaW5jbHVkZSB1bmRlciBMaW51eC4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBGb3IgdGhlIHJlcGxhY2VfcnR4IGNhbGwsIGNvcHkgdGhlIHJ0eCB0aGF0IGlzCisJYmVpbmcgc3Vic3RpdHV0ZWQgaW4gYmVmb3JlIHRoZSBjYWxsLgorCisJKiBzaC5jIChtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IFdoZW4gcmVtb3ZlIFNVQlJFRywgYWRkIGluCisJU1VCUkVHX1dPUkQgdG8gbmV3IHJlZ2lzdGVyIG51bWJlci4KKworCSogc2guYyAobXVsdGNvc3RzKTogRG8gbm90IGNvbXB1dGUgY29zdCBvZiBjb25zdGFudCBwb3dlci1vZi10d28KKwltdWx0aXBsaWVzIGFzIGlmIHRoZXkgd2VyZSBzaGlmdHMuICBSZWR1Y2UgbXVsdGlwbHkgY29zdCBmcm9tIDUgdG8gMy4KKwlEZWxldGUgdmFyaWFibGUgaW5zbl9jb3N0LgorCitGcmkgSmFuIDIwIDE0OjIxOjQ5IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogc3RtdC5jIChleHBhbmRfY2xlYW51cHMpOiBBZGQgNHRoIGFyZ3VtZW50IHRvIGluZGljYXRlIGlmIGNvZGUKKwluZWVkcyB0byBiZSBleHBhbmRlZCBmb3IgdGhlIGNsZWFudXAuCisJKGV4cGFuZF9nb3RvX2ludGVybmFsKTogRGl0dG8uCisJKGJjX2V4cGFuZF9nb3RvX2ludGVybmFsKTogRGl0dG8uCisJKGZpeHVwX2dvdG9zKTogRGl0dG8uCisJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBEaXR0by4gIFdlIG5vdyBhbHdheXMgY2FsbCBleHBhbmRfY2xlYW51cHMsCisJZXZlbiBhZnRlciBCQVJSSUVScywgc28gdGhhdCB0aGUgY2FsbCB0byB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nCisJcm91dGluZXMgaXMgYWx3YXlzIGRvbmUuCisKK1RodSBKYW4gMTkgMTg6Mzk6MTQgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBjb25maWcvbWlwcy9taXBzLmggKE1BU0tfU0lOR0xFX0ZMT0FUKTogRGVmaW5lLgorCShNQVNLX01BRCk6IERlZmluZS4KKwkoVEFSR0VUX1NJTkdMRV9GTE9BVCwgVEFSR0VUX0RPVUJMRV9GTE9BVCk6IERlZmluZS4KKwkoVEFSR0VUX01BRCk6IERlZmluZS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIHNpbmdsZS1mbG9hdCwgZG91YmxlLWZsb2F0LCBtYWQsIG5vLW1hZCwKKwk0NjUwLgorCShBU01fU1BFQyk6IEZvciBnYXMsIHBhc3MgZG93biAtbTQ2NTAsIGFuZCBwYXNzIC1tNDY1MCBpZiAtbW1hZCBpcworCXVzZWQuCisJKENDMV9TUEVDKTogSWYgLW1pcHMzIGlzIHVzZWQsIG9ubHkgc2V0IC1tZnA2NCBpZiBuZWl0aGVyCisJLW1zaW5nbGUtZmxvYXQgbm9yIC1tNDY1MCBhcmUgdXNlZC4gIERvbid0IHBlcm1pdCBib3RoIC1tZnA2NCBhbmQKKwktbXNpbmdsZS1mbG9hdCwgb3IgYm90aCAtbWZwNjQgYW5kIC1tNDY1MC4gIElmIC1tNDY1MCBpcyB1c2VkLAorCXBhc3MgZG93biAtbWNwdT1yNDY1MC4KKwkoRklYRURfUkVHSVNURVJTKTogQ2hhbmdlIEhJIGFuZCBMTyB0byBub3QgYmUgZml4ZWQuCisJKEhBUkRfUkVHTk9fTlJFR1MpOiBJZiBUQVJHRVRfU0lOR0xFX0ZMT0FULCB1c2UgZmxvYXRpbmcgcG9pbnQKKwlyZWdpc3RlcnMgaW4gNCBieXRlIHVuaXRzLCBub3QgOCBieXRlIHVuaXRzLgorCShTRUNPTkRBUllfUkVMT0FEX0NMQVNTKTogRGVmaW5lLgorCShtaXBzX3NlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBEZWNsYXJlLgorCShMSUJDQUxMX1ZBTFVFKTogSWYgVEFSR0VUX1NJTkdMRV9GTE9BVCwgb25seSB1c2UgRlBfUkVUVVJOIGlmIHRoZQorCW1vZGUgc2l6ZSBpcyA8PSA0LgorCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBVc2UgYSBjb3N0IG9mIDEyIHdoZW4gbW92aW5nIEhJIG9yIExPIHRvCisJYW55dGhpbmcgb3RoZXIgdGhhbiBhIGdlbmVyYWwgcmVnaXN0ZXIuCisJKiBjb25maWcvbWlwcy9taXBzLmMgKGZ1bmN0aW9uX2FyZyk6IElmIFRBUkdFVF9TSU5HTEVfRkxPQVQsIHBhc3MKKwlERm1vZGUgYXJndW1lbnRzIGluIGdlbmVyYWwgcmVnaXN0ZXJzLgorCShvdmVycmlkZV9vcHRpb25zKTogQWNjZXB0IDQ2NTAgYXMgYSBjcHUgdHlwZS4gIElmCisJVEFSR0VUX1NJTkdMRV9GTE9BVCwgcGVybWl0IG9ubHkgc21hbGwgZmxvYXRpbmcgcG9pbnQgbW9kZXMgaW4KKwlmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICBBbHdheXMgcGVybWl0IFNJbW9kZSBtb2RlcyBpbiBISS9MTworCXJlZ2lzdGVycy4KKwkoY29tcHV0ZV9mcmFtZV9zaXplKTogSWYgVEFSR0VUX1NJTkdMRV9GTE9BVCwgb25seSBzYXZlIDQgYnl0ZXMKKwlwZXIgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIuICBBbGlnbiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIKKwlzYXZlIHNwYWNlIHRvIGFuIGVpZ2h0IGJ5dGUgYm91bmRhcnkuCisJKHNhdmVfcmVzdG9yZV9pbnNucyk6IElmIFRBUkdFVF9TSU5HTEVfRkxPQVQsIHNhdmUgZmxvYXRpbmcgcG9pbnQKKwlyZWdpc2VycyBpbiBzaW5nbGUgcHJlY2lzaW9uLgorCShtaXBzX3NlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCisJKiBjb25maWcvbWlwcy9taXBzLm1kOiBSZXF1aXJlIFRBUkdFVF9ET1VCTEVfRkxPQVQgZm9yIGFsbCBkb3VibGUKKwlwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgaW5zbnMuICBDaGFuZ2UgdGhlIG11bHRpcGxpY2F0aW9uIGluc25zCisJdG8gYmUgc2luZ2xlIGluc3RydWN0aW9ucyB3aGljaCBzZXQgYSByZWdpc3RlciBvZiBjbGFzcyBsIG9yIGggb3IKKwl4LCBhcyBhcHByb3ByaWF0ZSwgcmF0aGVyIHRoYW4gZXhwbGljaXRseSBzZXR0aW5nIEhJIGFuZC9vciBMTy4KKwlVc2UgZGVmaW5lX2V4cGFuZCB0byBhdm9pZCBnZW5lcmF0aW5nIGEgc2hpZnQgbmVhciBhIG11bHRpcGx5IG9uCisJdGhlIHI0MDAwLiAgVXNlIG1hdGNoX3NjcmF0Y2ggaW4gdGhlIGRpdmlzaW9uIGluc25zIHRvIGNsb2JiZXIgSEkKKwlhbmQgTE8sIHJhdGhlciB0aGFuIG1lbnRpb25pbmcgdGhlbSBleHBsaWNpdGx5LiAgQWRkIHN1cHBvcnQgZm9yCisJcjQ2NTAgbWFkIGFuZCBtYWR1IGluc25zLgorCSogY29uZmlnL21pcHMvdC1lY29mZiAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtaXBzMS9taXBzMy4KKwkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgbWlwczEgbWlwczMuCisKK1dlZCBKYW4gMTggMDc6NDM6NTMgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jIChzdGFiaWxpemVfcmVmZXJlbmNlKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBEb24ndCBpZ25vcmUgQ09OVkVSVF9FWFBSIGZyb20KKwlub24tVU5JT05fVFlQRSB0byBVTklPTl9UWVBFLgorCShleHBhbmRfZXhwciwgY2FzZSBDT05WRVJUX0VYUFIpOiBDaGVjayBmb3IgY29udmVyc2lvbiB0byB1bmlvbgorCWJlZm9yZSBjaGVja2luZyBmb3Igbm90IGNoYW5naW5nIG1vZGUuCisKK1R1ZSBKYW4gMTcgMjI6MzM6MjcgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdHJlZS5jIChzdGFiaWxpemVfcmVmZXJlbmNlLCBjYXNlIFJUTF9FWFBSKTogTmV3IGNhc2UuCisKK1R1ZSBKYW4gMTcgMTg6NDI6NDQgMTk5NSAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEFsc28gaGFuZGxlIGRpc3BsYWNlbWVudHMgd2hpY2gKKwlkbyBub3QgZml0IGluIDE0IGJpdHMgZm9yIGZwIGxvYWQvc3RvcmUgc2Vjb25kYXJ5IHJlbG9hZHMuCisKK1R1ZSBKYW4gMTcgMTM6MzQ6MjIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKyAgICAgICAgQXZvaWQgYm9ndXMgZXJyb3JzIGZvciBDKysgbHZhbHVlcy4KKyAgICAgICAgKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgcGVkYW50aWNfbHZhbHVlcyB0byBwZWRhbnRpYy4KKyAgICAgICAgKiBmb2xkLWNvbnN0LmMgKHBlZGFudGljX25vbl9sdmFsdWUpOiBPbmx5IGZvcmNlIGEgbm9uLWx2YWx1ZSBpZgorICAgICAgICBwZWRhbnRpY19sdmFsdWVzIGlzIHNldC4KKyAgICAgICAgKiB0cmVlLmg6IERlY2xhcmUgcGVkYW50aWNfbHZhbHVlcy4KKworICAgICAgICBHZW5lcmFsaXplIHNoYXJlZCB0cnV0aHZhbHVlIGNvZGUgdG8gYWxsb3cgZm9yIEMrKyBib29sLgorICAgICAgICAqIGMtdHJlZS5oOiBEZWNsYXJlIGJvb2xlYW5fe3R5cGUsdHJ1ZSxmYWxzZX1fbm9kZS4KKyAgICAgICAgKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgdXAKKyAgICAgICAgYm9vbGVhbl97dHlwZSx0cnVlLGZhbHNlfV9ub2RlIHRvIGVxdWFsCisgICAgICAgIGludGVnZXJfe3R5cGUsb25lLHplcm99X25vZGUuCisgICAgICAgICogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogVXNlCisgICAgICAgIGJvb2xlYW5fe3R5cGUsdHJ1ZSxmYWxzZX1fbm9kZSBpbnN0ZWFkIG9mCisgICAgICAgIGludGVnZXJfe3R5cGUsb25lLHplcm99X25vZGUuCisgICAgICAgIChzaG9ydGVuX2NvbXBhcmUpOiBEaXR0by4KKworTW9uIEphbiAxNiAwNzoxMTo1MCAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKyAKKwkqIGNjY3AuYyAocmVzY2FuKTogRml4IHR5cG8gdGhhdCBjYXVzZWQgdG9rZW5zIHRvIGJlIGdsdWVkCisJdG9nZXRoZXIgaW1wcm9wZXJseS4KKworU3VuIEphbiAxNSAyMTowMDoyNCAxOTk1ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZSAodmludG1zZyk6IERlbGV0ZS4KKworU2F0IEphbiAxNCAxNzo1MDowNiAxOTk1ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGdldF9pbm5lcl9yZWZlcmVuY2UpOiBPbmx5IHRyZWF0IG9mZnNldCBvZiBQTFVTX0VYUFIKKwlhcyBzcGVjaWFsIGlmIHNlY29uZCBhcmcgaXMgaW50ZWdlciBjb25zdGFudC4KKworU2F0IEphbiAxNCAwMToyODoxNSAxOTk1ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCwgZmllbGRzIGJpZ2dlciB0aGFuIHdvcmQgY2FzZSk6IENvdW50CisJc3Vid29yZHMgaW4gdGFyZ2V0LiAgWmVybyByZW1haW5pbmcgdXBwZXIgYml0cyBpZiB1bnNpZ25lZC4KKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRml4IHR5cG8gaW4gcGFja2VkIGlnbm9yZWQgd2FybmluZy4KKwlGaXggdW5yZWNvZ25pemVkIG1vZGUgd2FybmluZy4gIE1ha2Ugc3RyaW5nIGNvbXBhcmlzb25zIGNvbnNpc3RlbnQuCisJU3VwcG9ydCBtYWNoaW5lIGF0dHJpYnV0ZXMgd2l0aCBhcmd1bWVudHMuICBNYWtlIG5vcmV0dXJuL3ZvbGF0aWxlCisJd2FybmluZ3MgY29uc2lzdGVudCB3aXRoIG90aGVycy4KKworCSogYTI5ay5oIChJTklUX0NVTVVMQVRJVkVfSU5DT01JTkdfQVJHUyk6IFJlc2VydmUgdHdvIHJlZ3MgZm9yCisJY2FsbGVyJ3MgbHIwLGxyMS4KKwkqIGEyOWsuYyAoaW5jb21pbmdfcmVnKTogS2VlcCByZWdzdGFjayBhbGlnbmVkIHRvIGV2ZW4gYm91bmRhcnkuCisKK0ZyaSBKYW4gMTMgMjA6Mjk6MzAgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogRm9yIExPTkdfTE9OR19UWVBFX1NJWkUsIHJldHVybiBUX1tVXUxPTkcKKwlpbnN0ZWFkIG9mIDAgKGkuZS4gVF9WT0lEKS4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IERvIG5vdCBmb3JjZSBjb25zdGFudCBzaGlmdC1jb3VudCB0bworCWEgcmVnaXN0ZXIsIHRvIGFsbG93IHBvc3NpYmxlIHdpZGVuaW5nOyBkbyBub3QgY29udmVydF90b19tb2RlCisJbW9kZXsxLDJ9IG9yIGNvcHlfdG9fbW9kZV9yZWcgaWYgbW9kZXsxLDJ9IGlzIFZPSURtb2RlLgorCSogbTY4ay5tZCAoemVyb19leHRlbmRzaWRpMik6IE5ldyBwYXR0ZXJuLgorCShleHRlbmRxaWRpMiwgZXh0ZW5kaGlkaTIsIGV4dGVuZHNpZGkyLCBleHRlbmRwbHVzc2lkaSk6IE5ldyBwYXR0ZXJucy4KKwkoYWRkZGlhX3NleHRoaXNobDMyLCBhZGRkaWRfc2V4dGhpc2hsMzIpOiBOZXcgcGF0dGVybnMuCisJKGFkZGRpX2RpbHNocjMyLCBhZGRkaV9kaXNobDMyLCBhZGRkaV9tZW0pOiBOZXcgcGF0dGVybnMuCisJKGFkZGRpMywgc3ViZGkzKTogQWxsb3cgbW9yZSBhbHRlcm5hdGl2ZXMuCisJKHN1YmRpYV9zZXh0aGlzaGwzMiwgc3ViZGlkX3NleHRoaXNobDMyKTogTmV3IHBhdHRlcm5zLgorCShzdWJkaV9kaXNobDMyLCBzdWJkaV9tZW0pOiBOZXcgcGF0dGVybnMuCisJKG5lZ2RpMik6IE5ldyBwYXR0ZXJuLgorCShhc2hsZGlfc2V4dGhpLCBhc2hsZGlfY29uc3QzMiwgYXNobGRpX2NvbnN0LCBhc2hsZGkzKTogTmV3IHBhdHRlcm5zLgorCShzdWJyZWcxYXNocmRpX2NvbnN0MzIsIGFzaHJkaV9jb25zdDMyKTogTmV3IHBhdHRlcm5zLgorCShhc2hyZGlfY29uc3QzMl9tZW0sIGFzaHJkaV9jb25zdCwgYXNocmRpMyk6IE5ldyBwYXR0ZXJucy4KKwkoc3VicmVnMWxzaHJkaV9jb25zdDMyLCBsc2hyZGlfY29uc3QzMiwgbHNocmRpX2NvbnN0LCBsc2hyZGkzKTogRGl0dG8uCisJKGxzaHJzaV8zMSk6IE5ldyBwYXR0ZXJuLgorCShsc2hyc2lfMTYsIGxzaHJzaV8xN18yNCk6IE5ldyBuYW1lcyBmb3Igb2xkIHVubmFtZWQgcGF0dGVybnMuCisKKwkqIG02OGsuYyAodXNlX21vdnFpLCBjb25zdF9tZXRob2QpOiBOZXcgZnVuY3Rpb25zLgorCShjb25zdF9pbnRfY29zdCwgb3V0cHV0X21vdmVfY29uc3RfaW50b19kYXRhX3JlZyk6IExpa2V3aXNlLgorCShzaW5nbGVtb3ZlX3N0cmluZyk6IENhbGwgb3V0cHV0X21vdmVfY29uc3RfaW50b19kYXRhX3JlZy4KKwkqIG02OGsubWQgKGZ1bGx3b3JkIG1vdmUpOiBMaWtld2lzZS4KKwkqIG02OGsuaCAoQ09OU1RfQ09TVFMpOiBDYWxsIGNvbnN0X2ludF9jb3N0LgorCitGcmkgSmFuIDEzIDIwOjE3OjU1IDE5OTUgIE9saXZlciBLZWxsb2dnICAob2tlbGxvZ2dAc2FseWtvLmN1YmUubmV0KQorCisJKiAxNzUwYS5oLCAxNzUwYS5jOiBSZW1vdmUgdXNlIG9mIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisKK0ZyaSBKYW4gMTMgMTU6NTM6MzMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKyAgICAgICAgKiB0cmVlLmggKERFQ0xfU1RBVElDX0NPTlNUUlVDVE9SKTogTmV3IG1hY3JvLgorICAgICAgICAoREVDTF9TVEFUSUNfREVTVFJVQ1RPUik6IE5ldyBtYWNyby4KKyAgICAgICAgKHRyZWVfZGVjbCk6IEFkZCBzdGF0aWNfY3Rvcl9mbGFnIGFuZCBzdGF0aWNfZHRvcl9mbGFnLgorCisgICAgICAgICogb2JqYy1hY3QuYyAoZmluaXNoX2ZpbGUpOiBSZW5hbWVkIGZyb20gb2JqY19maW5pc2guCisKKyAgICAgICAgKiBjLXBhcnNlLmluIChwcm9ncmFtKTogQ2FsbCBmaW5pc2hfZmlsZS4KKworICAgICAgICAqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQcm9wYWdhdGUgREVDTF9TVEFUSUNfe0NPTixERX1TVFJVQ1RPUi4KKyAgICAgICAgKGZpbmlzaF9mdW5jdGlvbik6IEhhbmRsZSBERUNMX1NUQVRJQ197Q09OLERFfVNUUlVDVE9SLgorCisgICAgICAgICogYy1sYW5nLmMgKGZpbmlzaF9maWxlKTogTmV3IGZ1bmN0aW9uIHRvIGVtaXQgY29kZSBmb3IgY2FsbGluZworICAgICAgICBzdGF0aWMgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgZnVuY3Rpb25zIGFzIG5lY2Vzc2FyeS4KKworICAgICAgICAqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IFN1cHBvcnQgX19hdHRyaWJ1dGVfX3MKKyAgICAgICAgImNvbnN0cnVjdG9yIiBhbmQgImRlc3RydWN0b3IiLgorCitGcmkgSmFuIDEzIDE5OjM4OjA4IDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBnY2MuYyAoZXhlY3V0ZSk6IERvbid0IHdhaXQgZm9yIGp1c3QgYW55IE4gc3VicHJvY2Vzc2VzLAorCXNpbmNlIHdlIG1heSBoYXZlIHN0YXJ0ZWQgd2l0aCBzb21lIHN1YnByb2Nlc3NlcyBiZWZvcmUgd2UKKwlzdGFydGVkIGV4ZWN1dGluZy4gIFdhaXQganVzdCBmb3IgX291cl8gTiBzdWJwcm9jZXNzZXMuCisKK0ZyaSBKYW4gMTMgMTg6MDg6MTcgMTk5NSAgSm9obiBGIENhcnIgIDxqZmNAbWl0LmVkdT4KKworCSogZ2VuY29kZXMuYywgZ2VuZW1pdC5jLCBnZW5mbGFncy5jIChnZW5faW5zbik6ICBJZ25vcmUgaW5zbnMgd2hvc2UKKwluYW1lcyBiZWdpbiB3aXRoICcqJy4KKwkqIGdlbm91dHB1dC5jIChvdXRwdXRfZXBpbG9ndWUpOiBEbyBub3QgcmVmZXJlbmNlIGdlbl8gZnVuY3Rpb25zIGZvcgorCWluc25zIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggJyonLgorCitGcmkgSmFuIDEzIDE3OjU0OjQyIDE5OTUgIFdvbGZnYW5nIEZvcm1hbm4gICh3b2xmaUBleG5lci50Z20uYWMuYXQpCisKKwkqIGkzODYvaXNjLmggKEFTTV9GSUxFX1NUQVJUKTogTmV3IG1hY3JvLgorCitGcmkgSmFuIDEzIDE1OjAxOjU5IDE5OTUgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKHVuYXJ5X2V4cHIpOiBJZiAtcGVkYW50aWMsIGdpdmUgZXJyb3IgZm9yICYmLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgQ09ORF9FWFBSKTogUHJvcGVybHkgc3dhcCBhcmdzIDEgYW5kIDIuCisJU3RyaXAgbm9wcyBmcm9tIEFSRzIsIGp1c3QgbGlrZSBBUkcxLgorCU1ha2Uge01JTixNQVh9X0VYUFIgcHJvcGVybHkgd2hlbiB0eXBlIG9mIHJlc3VsdCBkaWZmZXJlbnQgdGhhbiBhcmdzLgorCQorCSogZnVuY3Rpb24uYyAob3B0aW1pemVfYml0X2ZpZWxkKTogRG9uJ3QgcmVtb3ZlIGEgU1VCUkVHIHRoYXQKKwljaGFuZ2VzIG1vZGUgY2xhc3MuCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLW11bHRpbGliKik6IFBhc3MgQ0MgYW5kIENGTEFHUyB0byByZWN1cnNpdmUgbWFrZS4KKworCSogYWxwaGEvb3NmMTIuaCAoTElOS19TUEVDKTogQWRkIG1pc3NpbmcgIlwiLgorCitUaHUgSmFuIDEyIDEzOjM3OjEzIDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogaTk2MC90LSogKExJQkdDQzEsIENST1NTX0xJQkdDQzEpOiBEZWZpbmUgdG8gZW1wdHkgaW5zdGVhZCBvZgorCXRvIGxpYmdjYzEubnVsbC4KKwkqIG1pcHMvdC0qLCBzcGFyYy90LSo6IExpa2V3aXNlLgorCitUaHUgSmFuIDEyIDA4OjEzOjU1IDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogbGliZ2NjMi5jIChfX2xzaGxkaTMsIF9fbHNocmRpMywgIF9fYXNobGRpMywgX19hc2hyZGkzKToKKwlTaGlmdCBjb3VudCBjb21lcyBhcyBhIHdvcmQsIG5vdCBhcyBhbiBTSS4gIEtlZXAgdGVtcG9yYXJ5IGluCisJYSB3b3JkLgorCShfX21vZGRpMywgX19kaXZkaTMpOiBNYWtlIG5lZ2F0ZSBmbGFnIGBjJyBoYXZlIHdvcmRfdHlwZSBmb3IKKwllZmZpY2llbmN5LgorCitUaHUgSmFuIDEyIDA3OjE4OjA5IDE5OTUgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiByZWFsLmMgKHRvZTY0KTogIFVzZSBJbnRlbCBiaXQgcGF0dGVybiBmb3IgbGl0dGxlLWVuZGlhbiBYRm1vZGUgSW5mLgorCShlNjR0b2UpOiBMaWtld2lzZTsgYWxzbyBjaGVjayB0aGUgZXhwb25lbnQgZmllbGQgcHJvcGVybHkuCisKK1dlZCBKYW4gMTEgMTQ6MjQ6NTUgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKyAgICAgICAgKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1me25vLSx9Z251LWtleXdvcmRzLCAKKyAgICAgICAgLWZ7bm8tLH1vcGVyYXRvci1uYW1lcy4KKworVHVlIEphbiAxMCAxOToxNjowNyAxOTk1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG1ocGNjLmVkdT4KKworCSogcnM2MDAwLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IEFkZCBMSU5LX09SX0NUUl9SRUdTIGNsYXNzIHRvCisJZXhwZW5zaXZlIG1vdmVzLgorCitUdWUgSmFuIDEwIDE5OjA3OjM2IDE5OTUgIEpvbmF0aGFuIEJlaW1lbCAgKGpiZWltZWxAZ29tZXouc2MuaW50ZWwuY29tKQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2lmX3RoZW5fZWxzZSk6IEZpeCB0eXBvOiAifCIgc2hvdWxkIGJlICJ8fCIuCisKK1R1ZSBKYW4gMTAgMDU6NDk6MjUgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogQXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGNhdXNlZCBieSBsYXN0IGNoYW5nZS4KKworTW9uIEphbiAgOSAxNzowODo1NiAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAY3lnbnVzLmNvbSkKKworCSogY29uZmlndXJlOiBBbGwgQUlYIHZlcnNpb25zIFs0NTY3ODldLiogdXNlIHRoZSBBSVggNC4xIHN1cHBvcnQuCisKK01vbiBKYW4gIDkgMTM6MjE6MDcgMTk5NSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBucGFjLnN5ci5lZHU+CisKKwkqIHJzNjAwMC9haXg0MXBwYy5oOiBOZXcgZmlsZS4KKworCSogY29uZmlndXJlIChwb3dlcnBjLWlibS1haXg0LjEqKTogQWRkIHN1cHBvcnQgQUlYIHZlcnNpb24gNC4xIG9uCisJdGhlIHBvd2VycGMuCisKK1NhdCBKYW4gIDcgMDg6NTE6MjkgMTk5NSAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3BhcmMuYyAob3JkZXJfcmVnc19mb3JfbG9jYWxfYWxsb2MpOiBBZGQgY2FzdHMgdG8gYmNvcHkgY2FsbC4KKwkocHJpbnRfb3BlcmFuZCwgY2FzZSAnZicpOiBOZXcgY2FzZS4KKwkoc3BhcmNfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogVXNlIGdlbl9mbHVzaCBpbnN0ZWFkIG9mIGtub3dpbmcKKwl3aGF0IHBhdHRlcm4gbG9va3MgbGlrZS4KKwlVc2UgTUVNIGluc3RlYWQgb2YgYWRkcmVzcyBpbiBmbHVzaCBpbnNuLCBzbyB2aXJ0dWFsIHJlZworCWluc3RhbnRpYXRpb24gY2FuIHVwZGF0ZS4KKwlFbnN1cmUgYWRkcmVzcyBpbiBmbHVzaCBpbnNuIGlzIHZhbGlkLgorCSogc3BhcmMubWQgKGZsdXNoKTogQ2hhbmdlIHRvIHVzaW5nIGEgTUVNIGluc3RlYWQgb2YgYWRkcmVzcy4KKworCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogQWRkIG1pc3NpbmcgY2FzdHMgaW4gYnplcm8gY2FsbC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIENPTlZFUlRfRVhQUik6IERvbid0IHJlbW92ZSBhbgorCWludGVnZXIgY29udmVyc2lvbiB3aGVuIG91dGVyIGlzIEZQIHVubGVzcyBpdCBkb2Vzbid0IGNoYW5nZQorCXNpZ25lZG5lc3M7IHJld29yayBjb2RlIGluIHRoaXMgYXJlYSB0byBiZSBjbGVhcmVyLgorCitTYXQgSmFuICA3IDAyOjU4OjIxIDE5OTUgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChlbnVtIHByb2Nlc3Nvcl90eXBlKTogTmV3IGVudW1lcmF0aW9uIGRlc2NyaWJpbmcgdGhlCisJcHJvY2Vzc29yIHRvIHNjaGVkdWxlIGZvciAoNzAwLCA3MTAwLCA3MTAwTEMpLgorCShwYV9jcHVfYXR0ciwgVEFSR0VUX09QVElPTlMsIE9WRVJSSURFX09QVElPTlMpOiBEZWZpbmUuCisJKHBhX2NwdV9zdHJpbmcsIHBhX2NwdSk6IFByb3ZpZGUgZXh0ZXJuIGRlY2xzLgorCSogcGEuYyAocGFfY3B1LCBwYV9jcHVfc3RyaW5nKTogUHJvdmlkZSBkZWZpbml0aW9ucy4KKwkob3ZlcnJpZGVfb3B0aW9ucyk6IE5ldyBmdW5jdGlvbi4KKwkocGFfYWRqdXN0X2Nvc3QpOiBIYW5kbGUgUFJPQ0VTU09SXzcxMDAgYW5kIFBST0NFU1NPUl83MTAwTEMKKwlzY2hlZHVsaW5nLiAgSGFuZGxlIGFudGktZGVwZW5kZW5keSBjYXNlcyBpbnZvbHZpbmcgZnAgZGl2aXNpb24KKwlhbmQgc3FydC4gIEhhbmRsZSBvdXRwdXQgZGVwZW5kZW5jaWVzIGNvcnJlY3RseS4gIEJyZWFrIFRZUEVfRlBNVUwKKwlpbnRvIFRZUEVfRlBNVUxTR0wgYW5kIFRZUEVfRlBNVUxEQkwuCisJKiBwYS5tZCAoY3B1IGF0dHJpYnV0ZSk6IE5ldyBhdHRyaWJ1dGUuCisJQ2xlYW4gdXAgY29tbWVudHMgZm9yIFBST0NFU1NPUl83MDAgc2NoZWR1bGluZyBpbmZvLiAgU2xpZ2h0bHkKKwlzaW1wbGlmeS4gIE1ha2UgY29uZGl0aW9uYWwgb24gUFJPQ0VTU09SXzcwMC4KKwlBZGQgY29tbWVudHMgYW5kIHNjaGVkdWxpbmcgaW5mb3JtYXRpb24gZm9yIFBST0NFU1NPUl83MTAwIGFuZAorCVBST0NFU1NPUl83MTAwTEMuICBTZXQgdHlwZXMgZm9yIGluc3RydWN0aW9ucyB3aGljaCB1c2UgdGhlIHNoaWZ0ZXIKKwl0byAic2hpZnQiLiAgRXhwbGljaXRseSBzZXQgbGVuZ3RocyBhbmQgdHlwZXMgZm9yIGFsbCBpbnN0cnVjdGlvbnMuCisJQnJlYWsgdHlwZSAiZnBtdWwiIGludG8gImZtdWxzZ2wiIGFuZCAiZnBtdWxkYmwiLgorCitGcmkgSmFuICA2IDE3OjUwOjQ4IDE5OTUgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KKworCSogc2gvc2guaCAoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBSdW4gY29uc3RydWN0b3JzIGZyb20gcmlnaHQgdG8KKwlsZWZ0IG5vdCBsZWZ0IHRvIHJpZ2h0LgorCSogaDgzMDAvaDgzMDAuaDogTGlrZXdpc2UuCisKK1RodSBKYW4gIDUgMTI6Mzc6MjYgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBVc2UgQ09OU1QwX1JUWCBpbnN0ZWFkIG9mIGNvbnN0MF9ydHguCisKK1dlZCBKYW4gIDQgMDQ6MjY6MjMgMTk5NSAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLm1kIChjYWxsIGV4cGFuZGVyKTogVXNlIGVtaXRfaW5zbl9iZWZvcmUgdG8gZW1pdCBhbiBpbnNuIHRvCisJc2F2ZSB0aGUgUElDIHJlZ2lzdGVyIGJlZm9yZSBhIGZ1bmN0aW9uIGNhbGwuCisJKGNhbGxfdmFsdWUgZXhwYW5kZXIpOiBMaWtld2lzZS4KKworVHVlIEphbiAgMyAxNToyMzo0OSAxOTk1ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIHZhLW1pcHMuaCAodmFfYXJnLCBtaXBzMyBjYXNlKTogVXNlIF9fUFRSRElGRl9UWVBFX18gbm90IGludCBpbgorCWNhc3RzLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUHVzaCB0byBjb3JyZWN0IG9ic3RhY2sgYmVmb3JlCisJY3JlYXRpbmcgbmV3IGZ1bmN0aW9uIHR5cGVzLgorCitGcmkgRGVjIDMwIDE2OjEyOjUyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogZml4aW5jLnN2cjQ6IFJlbW92ZSBzcGVjaWFsIHBhdGNoIGZvciA8bmV0aW5ldC9pbi5oPi4KKworRnJpIERlYyAzMCAwODowMDo1MyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXJhc20uYzogSW5jbHVkZSBvdXRwdXQuaC4KKwlBZGQgcHJvdG90eWVzIGZvciBhbGwgc3RhdGljIGZ1bmN0aW9uczsgcmVtb3ZlIGZvcndhcmQgZGVjbGFyYXRpb25zCisJb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMuCisJKGFzc2VtYmxlX3ZhcmlhYmxlKTogQWRkIG1pc3NpbmcgYXJnIGRlY2wuCisJKGJjX21ha2VfZGVjbF9ydGwsIGNvbnN0X2hhc2gsIGNvbnN0X2hhc2hfcnR4KTogTm93IHN0YXRpYy4KKwkob3V0cHV0X2FkZHJlc3NlZF9jb25zdGFudHMsIG91dHB1dF9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgorCShiY19vdXRwdXRfY29uc3RydWN0b3IpOiBBZGQgbWlzc2luZyBhcmd1bWVudC4KKwkob3V0cHV0X2J5dGVfYXNtKTogRGVsZXRlLCB1bnVzZWQuCisJKiBvdXRwdXQuaDogQWRkIGRlY2xzIG9mIGZ1bmN0aW9ucyBpbiB2YXJhc20uYy4KKwlBbGxvdyB0byBiZSBpbmNsdWRlZCB3aGVuIHJ0bC5oIGlzIG5vdC4KKwkqIGZ1bmN0aW9uLmggKHtzYXZlX3Jlc3RvcmV9X3ZhcmFzbV9zdGF0dXMpOiBBZGQgZGVjbHMuCisJKiBjLWRlY2wuYywgYy10eXBlY2suYywgdG9wbGV2LmM6IEluY2x1ZGUgb3V0cHV0LmguCisJKiBNYWtlZmllLmluIChjLWRlY2wubywgYy10eXBlY2subywgdG9wbGV2Lm8sIHZhcmFzbS5vKTogTGlrZXdpc2UuCisKK1RodSBEZWMgMjkgMjE6NDg6MDMgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU2V0IE1FTV9JTl9TVFJVQ1RfUCBhcyBuZWVkZWQgb24gcmV0dXJuCisJdmFsdWUgZnJvbSBhc3NpZ25fc3RhY2tfdGVtcC4KKwkoc3RvcmVfb25lX2FyZyk6IExpa2V3aXNlLgorCSogZXhwci5jIChzYXZlX25vbmNvcGllZF9wYXJ0cyk6IExpa2V3aXNlLgorCShleHBhbmRfZXhwcik6IExpa2V3aXNlLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogTGlrZXdpc2UuCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgorCSogc3RtdC5jIChleHBhbmRfZGVjbCk6IExpa2V3aXNlLgorCitUaHUgRGVjIDI5IDE0OjA2OjM0IDE5OTQgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IENhc3QgY29uc3RhbnQgMSB0byBIT1NUX1dJREVfSU5UCisJYmVmb3JlIHNoaWZ0aW5nIGxlZnQgdG8gZm9ybSBtYXNrLgorCSogZ2NjLmMgKHByaW50X211bHRpbGliX2luZm8pOiBJbml0aWFsaXplIGxhc3RfcGF0aF9sZW4gdG8gMC4KKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSB2YWx1ZSB0bworCUhPU1RfV0lERV9JTlQuCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdF9oaWdocGFydCk6IFVzZSBjb252ZXJ0X21vZGVzIGluc3RlYWQgb2YKKwlnZW5fbG93cGFydCB0byBkbyBjb252ZXJzaW9ucy4KKworVGh1IERlYyAyOSAxMzo0MjowOCAxOTk0ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBBZGQgLWZydHRpIGZsYWcgZm9yIHJ0dGkgc3VwcG9ydCBpbiBDKysuCisKK1dlZCBEZWMgMjggMjI6MDQ6NDIgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGNvbmZpZy9wYS9saWIyZnVuY3MuYXNtOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy9wYS90LXBhIChMSUIyRlVOQ1NfRVhUUkEpOiBEZWZpbmUuCisJKiBjb25maWcvcGEvcGEuaCAoRE9fR0xPQkFMX0RUT1JTX0JPRFkpOiBEZWZpbmUuICBJbmNsdWRlIGEKKwlyZWZlcmVuY2UgdG8gX19nY2NfcGx0X2NhbGwgc28gX19nY2NfcGx0X2NhbGwgYWx3YXlzIGFwcGVhcnMgaW4KKwlleGVjdXRhYmxlcyB3aGljaCByZWZlcmVuY2UgX19tYWluLgorCitXZWQgRGVjIDI4IDIxOjE4OjI2IDE5OTQgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy5tZCAodHJ1bmNkaXFpMitbMTIzXSk6IEFkZCBwYXR0ZXJucyB0byBvcHRpbWl6ZSBESW1vZGUgdG8KKwlTSW1vZGUgdHJ1bmNhdGlvbi4KKworCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBGb3IgdGhlIGVwaWxvZ3VlIGNhc2UsIHNldCBuZWVkZWQKKwl0byBpbmNsdWRlIGZyYW1lIHBvaW50ZXIgYW5kIHN0YWNrIHBvaW50ZXIsIGRvbid0IGluY2x1ZGUgYWxsIG9mCisJZW5kX29mX2Z1bmN0aW9uX25lZWRzLglSZWplY3QgaW5zbiBpZiBpdCBzZXRzIGEgcHJldmlvdXNseSBzZXQKKwlyZXNvdXJjZS4KKworCSogc2guYyAoc2hfZXhwYW5kX3Byb2xvZ3VlKTogQ2xlYXIgZXh0cmFfcHVzaCBhdCBzdGFydC4gIENsZWFyCisJY3VycmVudF9mdW5jdGlvbl9hbm9ueW1vdXNfYXJncyBpZiBzZXQuICBDbGVhciBzaGlmdHN5bXMgYXJyYXkuCisJKHNoX2V4cGFuZF9lcGlsb2d1ZSk6IERvbid0IGNsZWFyIGV4dHJhX3B1c2gsCisJY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZSwgY3VycmVudF9mdW5jdGlvbl9hbm9ueW1vdXNfYXJncywKKwlhbmQgc2hpZnRzeW1zIGFycmF5LgorCisJKiByZWxvYWQuYyAoZmluZF9lcXVpdl9yZWcpOiBFeGNsdWRlIHJlZ2lzdGVycyBjbG9iYmVyZWQgaW4gdGhlCisJQ0FMTF9JTlNOX0ZVTkNUSU9OX1VTQUdFIGZpZWxkIG9mIGEgQ0FMTF9JTlNOLgorCitUdWUgRGVjIDI3IDE5OjIyOjM1IDE5OTQgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KKworCSogc3RtdC5jIChleHBhbmRfY2xlYW51cHMpOiBBZGQgdGhpcmQgcGFyYW1ldGVyIHNvIHRoYXQgd2UgY2FuCisJYXZvaWQgbWFya2luZyBhIGNsZWFudXAgcmVnaW9uIGlmIHRoaXMgY2xlYW51cCBpcyBwYXJ0IG9mIGEgZml4dXAKKwlzdHlsZSBnb3RvLgorCShleHBhbmRfZ290b19pbnRlcm5hbCk6IFBhc3MgYSAxIHRvIGV4cGFuZF9jbGVhbnVwcy4KKwkoYmNfZXhwYW5kX2dvdG9faW50ZXJuYWwpOiBEaXR0by4KKwkoZml4dXBfZ290b3MpOiBEaXR0by4KKwkoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IFBhc3MgYSAwIHRvIGV4cGFuZF9jbGVhbnVwcy4KKworVHVlIERlYyAyNyAxNTo0NToxOCAxOTk0ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEuYyAob3V0cHV0X21vdmIpOiBGaXggdHR5cG8uCisKK1R1ZSBEZWMgMjcgMTU6MTE6NDIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBjb25maWcvaTk2MC9pOTYwLmMgKGk5NjBfb3V0cHV0X2RvdWJsZSk6IFByaW50IGhleCBjb25zdGFudHMgaWYKKwlSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUgaXMgZGVmaW5lZC4KKwkoaTk2MF9vdXRwdXRfZmxvYXQpOiBMaWtld2lzZSB3aXRoIFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRS4KKworU3VuIERlYyAyNSAwNzoyMjozMCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb252ZXJ0LmMgKGNvbnZlcnRfdG9fcG9pbnRlcik6IEVsaW1pbmF0ZSByZWYgdG8gbnVsbF9wb2ludGVyX25vZGUuCisKK1RodSBEZWMgMjIgMTI6NTE6MzEgMTk5NCAgU3RlcGhlbiBSLiB2YW4gZGVuIEJlcmcgIChiZXJnQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZSkKKworCSogbGltaXR4LmggKHN5c2xpbWl0cy5oKTogRmluZCBzeXNsaW1pdHMuaCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisKKwkqIGxpbWl0eS5oIChfR0NDX05FWFRfTElNSVRTX0gpOiBJZiBtYWNybyBkZWZpbmVkLCByZWN1cnNlIGRvd24KKwl0byByZWFsIGxpbWl0cy5oLgorCisJKiBnc3lzbGltaXRzLmggKF9HQ0NfTkVYVF9MSU1JVFNfSCk6IERlZmluZSBtYWNybyBhbmQgc3RhcnQgcmVjdXJzaW5nCisJZG93biB0byB0aGUgcmVhbCBsaW1pdHMuaC4KKworVGh1IERlYyAyMiAxMjoxNzoxMSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluIChMSU1JVFNfSF9URVNUKTogTmV3IHZhcmlhYmxlLgorCSh4bGltaXRzLmgpOiBVc2UgTElNSVRTX0hfVEVTVC4KKwkqIGNvbmZpZy9tNjhrL3QtbmV4dCAoTElNSVRTX0hfVEVTVCk6IERlZmluZS4KKwkqIGNvbmZpZy9pMzg2L3QtbmV4dCAoTElNSVRTX0hfVEVTVCk6IERlZmluZS4KKworV2VkIERlYyAyMSAxNTo1NjoxMyAxOTk0ICBIb2xnZXIgVGV1dHNjaCAgKHRldXRzY2hAc3cwMTcuZmZtLWl3LkRlZ3Vzc2EuREUpCisKKwkqIGNsaXBwZXIuaCAoVFJBTVBPTElORV9URU1QTEFURSk6IFNwZWNpZnkgc29tZSBjb2RlIGFzIGV4cGxpY2l0IGhleAorCXdvcmRzLiBTaG9ydGVuIHRlbXBsYXRlLgorCShUUkFNUE9MSU5FX1NJWkUsSU5JVElBTElaRV9UUkFNUE9MSU5FKTogVXBkYXRlIGFjY29yZGluZ2x5LgorCShGVU5DVElPTl9BUkcsRlVOQ1RJT05fQVJHX0FEVkFOQ0UpOiBBZ2dyZWdhdGVzIGFyZSBBTFdBWVMgcGFzc2VkCisJb24gdGhlIHN0YWNrLgorCSogdmEtY2xpcHBlci5oIChfX3ZhX3JvdW5kZWRfc2l6ZSk6IERlbGV0ZS4KKwkoX192YV9yb3VuZCk6IEFyZ3MgaGF2ZSBhdCBsZWFzdCBQQVJNX0JPVU5EQVJZICg9MzIpIGFsaWdubWVudC4KKworV2VkIERlYyAyMSAxNTozNjo0NiAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogbTY4ay5tZCAoc3FydHNmMiwgc2luc2YyLCBzaW5kZjIsIHNpbnhmMik6IERlZmluZS4KKwkoY29zc2YyLCBjb3NkZjIsIGNvc3hmMik6IExpa2V3aXNlLgorCShzcXJ0eGYyKTogT3BlcmFuZCAxIG5vdyBYRm1vZGUuCisKK1dlZCBEZWMgMjEgMTQ6Mzk6NDYgMTk5NCAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLm1kIChhZGRkaTMsIHN1YmRpMyk6IE5ldyBwYXR0ZXJucy4KKworV2VkIERlYyAyMSAxMzo1NjowOCAxOTk0ICBNaWNoYWVsIEdzY2h3aW5kICA8bWlrZUB2bHNpdmllLnR1d2llbi5hYy5hdD4KKworCSogcGRwMTEubWQgKG11bGhpc2kzKTogQWRkIHRydW5jYXRlIHRvIG11bGhpc2kzIHRvIGZpeCBidWcgYW5kCisJY2hhbmdlIGZyb20gZGVmaW5lX2luc24gdG8gZGVmaW5lX2V4cGFuZCB0byBzdXJ2aXZlIHJlZ2lzdGVyCisJcHJlc3NzdXJlLgorCitXZWQgRGVjIDIxIDEyOjUxOjEwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IE1ha2Ugc3VyZSBpbnB1dCBvcGVyYW5kcyBhcmUKKwl2YWxpZCBjb25zdGFudHMgaWYgdGhleSBhcmUgY29uc3RhbnRzLgorCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEFkanVzdCB0ZXN0cyBmb3Igd2hlbiB0bworCWlubGluZSBhbmQgd2hlbiB0byBkZWZlci4KKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogT25seSBpbmxpbmUgaWYgREVDTF9JTkxJTkU7IGRvbid0CisJY2FsbCBmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3AgaGVyZS4KKworCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogSWYgd2FudCB2YWx1ZXMgZm9yIHN0YXRlbWVudHMsCisJY29udmVydCBmdW5jdGlvbiB0byBhZGRyZXNzLW9mLWZ1bmN0aW9uLgorCitXZWQgRGVjIDIxIDAwOjAyOjMzIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9zaGlmdF9jb25zdCk6IEFsd2F5cyBjb3B5IGZsYWdzIHRvIG5ldyBNRU0uCisKK1R1ZSBEZWMgMjAgMTQ6MTU6NTggMTk5NCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogcnM2MDAwL2FpeDQxLmggKExJTktfU1BFQyk6IEFkZCBjYXNlIGZvciAtc2hhcmVkLCBqdXN0IGxpa2UgcnM2MDAwLmguCisKK1R1ZSBEZWMgMjAgMDk6MTQ6MDAgMTk5NCAgREogRGVsb3JpZSAoZGpAY3Ryb24uY29tKQorCisJKiBpMzg2L2dvMzIuaDogc3VwcG9ydCAjcHJhZ21hIHBhY2soKS4KKworCSogbXNkb3MvY29uZmlndXIuYmF0OiBhZGQgbGliZ2NjLmEgdGFyZ2V0LgorCSogbXNkb3MvbWtsaWJnY2MuYzogbmV3IGZpbGUsIGhlbHBzIGJ1aWxkIGxpYmdjYy5hLgorCSogbXNkb3MvbGliZ2NjLm1hazogbmV3IGZpbGUsIG1ha2VmaWxlIGZyYWdtZW50IGZvciBsaWJnY2MuYS4KKwkqIG1zZG9zL3RvcC5zZWQ6IGNoYW5nZSBNYWtlZmlsZSB0byBiZSBhYmxlIHRvIGJ1aWxkIGxpYmdjYy5hLgorCitNb24gRGVjIDE5IDIwOjUyOjEzIDE5OTQgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KKworCSogbWlwcy94LXN5c3YgKENMSUIpOiBBZGQgLUwvdXNyL2xpYi9jbXBscnMvY2MzLjExLgorCisJKiBkc3AxNnh4L2RzcDE2eHguaCAoSEFWRV9WUFJJTlRGKTogRGVsZXRlLgorCisJKiBmbG93LmMgKG1hcmtfc2V0XzEpOiBGb3IgbXVsdGktcmVnIGhhcmQgcmVnaXN0ZXIsIGNsZWFyIGFsbAorCXJlZ19uZXh0X3VzZSBlbnRyaWVzLgorCitNb24gRGVjIDE5IDE3OjQ5OjU5IDE5OTQgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW4gKHN0bXAtbXVsdGlsaWIpOiBDaGVjayByZWN1cnNpdmUgbWFrZSdzIHJldHVybiBjb2RlLgorCSguUEhPTlkpOiBUZWxsIEdOVSBtYWtlIHRoZSB2YXJpb3VzIExBTkdVQUdFUyBhcmUgcGhvbnkgdGFyZ2V0cy4KKworTW9uIERlYyAxOSAxNzowNzo0MSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZy9taXBzL21pcHMuYyAocHJpbnRfb3BlcmFuZCk6IERvbid0IHByaW50IGEgQ09OU1RfRE9VQkxFCisJYXMgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBpZiBpdCBpcyBub3QgTU9ERV9GTE9BVC4KKworTW9uIERlYyAxOSAxNToyNzo0MiAxOTk0ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CisKKwkqIGZwLWJpdC5jIChmcGFkZF9wYXJ0cyk6IEFkZGluZyBpbmZpbml0aWVzIHdpdGggb3Bwb3NpdGUgc2lnbnMKKwl5aWVsZHMgYSBOYU4uCisKKwkqIGxvb3AuYyAoaW52YXJpYW50X3ApOiBSZWplY3QgY29uc3Qgdm9sYXRpbGUgcmVmZXJlbmNlcy4KKworU3VuIERlYyAxOCAyMTo1NToyNiAxOTk0ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEubWQgKHBpYzJfaGlnaHBhcnQpOiBBY2NlcHQgcmVhZG9ubHkgb3BlcmFuZHMuCisKK1N1biBEZWMgMTggMTY6Mjk6MjAgMTk5NCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgorCisJKiBtaXBzL2RlYy1ic2QuaCAoQ1BQX1BSRURFRklORVMpOiBDaGFuZ2UgX01JUFNFQiB0byBfTUlQU0VMLgorCisJKiBjY2NwLmMgKG1hY2FyZzEpOiBDb3VudCBuZXdsaW5lIGF0IGVuZCBvZiBDKysgY29tbWVudC4KKworU3VuIERlYyAxOCAwNjo1NDozNCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IEFsbG93IERFQ0xfQklUX0ZJRUxEIGZvciBhbnkgdHlwZS4KKworU2F0IERlYyAxNyAwMzo0MzoyNCAxOTk0ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcGEuaCAocmVhZG9ubHlfc2VjdGlvbik6IER1cmluZyBQSUMgY29kZSBnZW5lcmF0aW9uLCBwdXQKKwlyZWFkb25seSBkYXRhIGludG8gdGhlIHN0YW5kYXJkIGRhdGEgc2VjdGlvbi4KKworCSogcGEuYyAocGljX2xhYmVsX29wZXJhbmQpOiBEaXNhbGxvdyBTWU1CT0xfUkVGcyAoY29uc3RhbnQgZGF0YSkuCisKK0ZyaSBEZWMgMTYgMDY6NDQ6NDAgMTk5NCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBzcGFyYy9saXRlY29mZi5oIChEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFLCBEQlhfRlVOQ1RJT05fRklSU1QsCisJREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IERlZmluZS4KKwkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IE1vZGlmeSBpdCB0byBvdXRwdXQgZnVuY3Rpb24gcmVsYXRpdmUgc3RhYnMuCisKKwkqIHNoL2xpYjFmdW5jcy5hc20gKGFzaGlmdHJ0X3I0XzEpOiBEZWxldGUgdXNlbGVzcyBvciBpbnN0cnVjdGlvbi4KKwlBZGQgbm9wIHRvIHJ0cyBkZWxheSBzbG90LgorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBXaGVuIG91dHB1dCBhbiBpbnNuIHRvIGhvbGQgYSBSRUdfREVBRAorCW5vdGUsIHVwZGF0ZSBiYXNpY19ibG9ja19oZWFkIGlmIG5lY2Vzc2FyeS4KKworVGh1IERlYyAxNSAxNToyMjo0NiAxOTk0ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IERvbid0IGVtaXQgYSAiLnRleHQiCisJcHNldWRvLW9wLCB3ZSBhbHJlYWR5IG1ha2Ugc3VyZSB3ZSdyZSBpbiB0aGUgcmlnaHQgc3BhY2Uvc3Vic3BhY2UuCisKK1RodSBEZWMgMTUgMDc6NDk6MzYgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IFByb3Blcmx5IGdldCBjb25zdGFudCBwYXJ0IG9mCisJYml0IHBvc2l0aW9uIHdoZW4gREVDTF9GSUVMRF9CSVRQT1MgaXMgYSBQTFVTX0VYUFIuCisKK1dlZCBEZWMgMTQgMTk6MDE6MzIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogVXNlIEVYQUNUX0RJVl9FWFBSIHRvCisJY29tcHV0ZSBieXRlIG9mZnNldCBmcm9tIGJpdCBvZmZzZXQuCisKK1dlZCBEZWMgMTQgMTE6NDE6MjEgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgorCisJKiBmaXhpbmNsdWRlczogRml4IG5vbiBjb25zdCBhdG9mIHBhcmFtZXRlciBvbiBORVdTLU9TIDQuMlIuCisKK1R1ZSBEZWMgMTMgMTg6Mzk6MDkgMTk5NCAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBoODMwMC5jIChoYW5kbGVfcHJhZ21hKTogT25seSBwcmludCB3YXJuaW5nIG9uY2UuCisKKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xLCBjYXNlIFBMVVMpOiBJZiBvZmZzZXQgaXMKKwl6ZXJvLCBtYWtlIHN1cmUgcmVnaXN0ZXIgcmVwbGFjZW1lbnQgaXMgc3RpbGwgdmFsaWRhdGVkLgorCitUdWUgRGVjIDEzIDA3OjUxOjIwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRvd2VyLWFzLmggKEZVTkNUSU9OX0VYVFJBX0VQSUxPR1VFKTogRml4IHR5cG8gaW4gbW92Lmwgb3Bjb2RlLgorCSogdG93ZXIuaCAoSU1NRURJQVRFX1BSRUZJWCk6IFJlYWxseSBkZWZpbmUuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgTUlOVVNfRVhQUik6IFByb3Blcmx5IGhhbmRsZSBjYXNlCisJd2hlbiB0aGUgTkVHQVRFIG92ZXJmbG93cy4KKworTW9uIERlYyAxMiAxNzoyMjoxOSAxOTk0ICBkZXIgTW91c2UgIChtb3VzZUBjb2xsYXR6Lm1jcmNpbS5tY2dpbGwuZWR1KQorCisJKiByZWxvYWQuYyAoZGVidWdfcmVsb2FkKTogVXNlIEdFVF9NT0RFX05BTUUgdG8gYXZvaWQgd2FybmluZy4KKworTW9uIERlYyAxMiAxMzoxNTowNCAxOTk0ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGZ1bmN0aW9uLmMgKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBEb24ndCBjYWxsIHBhZF9iZWxvdyBmb3IgQkxLbW9kZQorCXBhcm1zIGluIHJlZ3MuCisKKwkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBTZXQgbW9kZSBhZnRlciBjYW5vbmljYWxpemluZyBvcDAvb3AxCisJc28gb3AxIGlzIGNvbnN0YW50LgorCitNb24gRGVjIDEyIDA4OjA0OjMzIDE5OTQgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBjY2NwLmMsIHRvcGxldi5jICh2bXNfZm9wZW4pOiBDYWxsIGBmb3BlbicgdGhyb3VnaCBhbiBpbmRpcmVjdAorCXBvaW50ZXIgdG8gaW5oaWJpdCBjaGVja2luZyBhcmd1bWVudCBsaXN0IGFnYWluc3QgaXRzIHByb3RvdHlwZS4KKwlJbmNyZWFzZSBSTVMgbXVsdGktYmxvY2sgY291bnQgZnJvbSAxNiB0byAzMi4KKworU2F0IERlYyAxMCAxNzowMzo1OSAxOTk0ICBILkouIEx1ICAgKGhqbEBueW5leHN0LmNvbSkKKworCSogY2NjcC5jIChkb19pbmNsdWRlKTogQXZvaWQgZHluYW1pYyBpbml0aWFsaXphdGlvbiBvZiBhZ2dyZWdhdGUuCisKK1NhdCBEZWMgMTAgMTY6NTc6NTAgMTk5NCAgQW5kcmVhcyBMdWlrICAobHVpa0Bpc2EuZGUpCisKKwkqIG02OGsubWQgKGNtcHNpKTogTWFrZSB0aGlzIGludG8gYSBkZWZpbmVfZXhwYW5kOyBsZWdpdGltaXplCisJUElDIGFkZHJlc3NlcyBpZiBuZWNlc3NhcnkuCisJT2xkIGNtcHNpIGNvZGUgbm93IHVubmFtZWQgZGVmaW5lX2luc24gcGF0dGVybi4KKworU2F0IERlYyAxMCAxNjowNjowMyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKHBlZGFudGljX29taXRfb25lX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKGZvbGQsIGNhc2UgQ09ORF9FWFBSKTogVXNlIGl0IGluc3RlYWQgb2YgY2FsbGluZworCXBlZGFudGljX25vbl9sdmFsdWUgb24gdGhlIHJlc3VsdCBvZiBvbWl0X29uZV9vcGVyYW5kLgorCitGcmkgRGVjICA5IDE1OjUzOjM1IDE5OTQgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiAgSGFuZGxlIFRSVU5DQVRFIGFuZAorCVpFUk9fRVhURU5EIGluIHNhbWUgd2F5IGFzIFNJR05fRVhURU5ELgorCitGcmkgRGVjICA5IDE0OjUyOjQxIDE5OTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisgICAgICAgICogcnM2MDAwL3JzNjAwMC5oIChMSU5LX1NQRUMpOiBBZGQgJXtzaGFyZWQ6LWJNOlNSRX0uCisgICAgICAgIChMSU5LX0xJQkdDQ19TUEVDSUFMXzEpOiBVc2UgTElCR0NDX1NQRUMgaW5zdGVhZC4KKworRnJpIERlYyAgOSAxNDoyNDowMiAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogIEFkZCBzdXBwb3J0IGZvciBDaGlsbCAoLmNoIGFuZCAuY2hpKS4KKworRnJpIERlYyAgOSAxNzozMTo0NiAxOTk0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworCSogZml4aW5jLnN2cjQgKHN5cy9ieXRlb3JkZXIuaCk6IFR1cm4gZXh0ZXJuIGlubGluZXMgYmFjayBpbnRvCisJc3RhdGljIGlubGluZXMgZm9yIHRhcmdldHMgKHN1Y2ggYXMgU1BBUkMvU29sYXJpcykgdGhhdCBkb24ndAorCXN1cHBseSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIEMgbGlicmFyeS4KKworRnJpIERlYyAgOSAxNzoxOTo0NCAxOTk0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG5wYWMuc3lyLmVkdT4KKworCSogcnM2MDAwLmggKE1BU0tfTk9fRlBSLCBUQVJHRVRfTk9fRlBSKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgImZwLXJlZ3MiIGFuZCAibm8tZnAtcmVncyIuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogU2V0IEZQUnMgZml4ZWQgYW5kIGNhbGxfdXNlZCBpZgorCVRBUkdFVF9OT19GUFIuCisKK0ZyaSBEZWMgIDkgMTY6MDY6MjMgMTk5NCAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBDYWxsIHJlYWxfemVyb3AgZm9yIHJlYWwgY29uc3RhbnRzLgorCitUaHUgRGVjICA4IDE3OjI4OjU3IDE5OTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgorCisgICAgICAgICogZGJ4b3V0LmMgKGRieG91dF90eXBlX21ldGhvZF8xKTogRG9uJ3QgdHJ5IHRvIGxvb2sgYXQgdGhlIGZpcnN0CisgICAgICAgIGFyZ3VtZW50IG9mIG5vbi1tZXRob2RzICh3aGljaCBtaWdodCBub3QgaGF2ZSBhIGZpcnN0IGFyZ3VtZW50KS4KKworVGh1IERlYyAgOCAxNjowNzoyNyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWd1cmUgKG1pcHMtKi1nbnUqKTogUmVjb2duaXplIHRoaXMgY29uZmlndXJhdGlvbi4KKwkqIGNvbmZpZy9taXBzL2dudS5oOiBOZXcgZmlsZS4KKworVGh1IERlYyAgOCAxNTo0MTozMiAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIG02OGsuYyAoZXh0ZW5kX29wZXJhdG9yKTogTmV3IHByZWRpY2F0ZS4KKwkqIG02OGsubWQgKGJzZXRtZW1xaSwgYmNscm1lbXFpKTogTmV3IHBhdHRlcm5zIHRvIHNldCBiaXQgaW4gbWVtb3J5CisJYnl0ZSB3aXRoIGJpdCBudW1iZXIgZHluYW1pYyAodXNlIGJjbHIvYnNldCBpbnN0cnVjdGlvbnMpLgorCitUaHUgRGVjICA4IDE0OjEzOjQ1IDE5OTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgorCisJKiBjY2NwLmMgKGRvX2luY2x1ZGUpOiBEb24ndCB0dXJuIG5ld2xpbmUgbWFya2VycyBpbnRvIHNwYWNlcworCXdoZW4gZXhwYW5kaW5nIGFuIGluY2x1ZGUgZmlsZSBuYW1lLgorCisJKiBjY2NwLmMgKGRpc2NhcmRfY29tbWVudHMpOiBJZiB0cmFkaXRpb25hbCwgcmVwbGFjZSBhIGNvbW1lbnQKKwl3aXRoIG5vdGhpbmcgaW5zdGVhZCBvZiB3aXRoIGEgc3BhY2UuCisKKwkqIGNjY3AuYyAoY2hhcl9uYW1lKTogTmV3IHZhci4KKwkoaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCk6IEluaXRpYWxpemUgaXQuCisJKGhhbmRsZV9kaXJlY3RpdmUpOiBVc2UgaXQgdG8gc2ltcGxpZnkgcHJpbnRpbmcgb2YgZGlhZ25vc3RpY3MuCisJV2FybiBhYm91dCAnXHInIHRvby4KKwkoY3JlYXRlX2RlZmluaXRpb24sIGRvX3ByYWdtYSwgZG9fZW5kaWYsIG1ha2VfYXNzZXJ0aW9uKTogQmUgY29uc2lzdGVudAorCWFib3V0IHNraXBwaW5nIGFsbCBob3Jpem9udGFsIHdoaXRlIHNwYWNlLCBub3QganVzdCBzcGFjZSBhbmQgdGFiLgorCitUaHUgRGVjICA4IDEzOjU0OjM4IDE5OTQgIEguSi4gTHUgKGhqbEBueW5leHN0LmNvbSkKKworCSogaTM4Ni9saW51eGVsZi5oOiBNb2RpZmllZCBmb3Igc3RhYnMtaW4tRUxGLgorCShQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBEZWZpbmVkIGFzIERCWF9ERUJVRy4KKwkoRlVOQ1RJT05fUFJPRklMRVIpOiBVc2UgbWNvdW50IGluc3RlYWQgb2YgX21vdW50LgorCShDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fRUxGX18uCisJKENQUF9TUEVDKTogQWRkIC1EX19QSUNfXyAtRF9fcGljX18gZm9yIC1mUElDIG9yIC1mcGljLgorCShMSUJfU1BFQyk6IERvbid0IHVzZSBhbnkgZGVmYXVsdCBsaWJyYXJ5IGlmIC1zaGFyZWQuCisJKExJQkdDQ19TUEVDLCBMSU5LX1NQRUMsIFNUQVJURklMRV9TUEVDLCBFTkRGSUxFX1NQRUMpOiBOZXcgc3BlY3MuCisJKiBjb25maWd1cmUgKGd4eF9pbmNsdWRlX2Rpcik6IFNldCBkZWZhdWx0IHRvICckKHByZWZpeCkvaW5jbHVkZS9nKysnCisJKGlbMzQ1XTg2LSotbGludXhlbGYpOiBOZXcgcGxhdGZvcm0gZm9yIEVMRi4KKwkqIGNydHN0dWZmLmMgKENSVF9FTkQpOiBBZGQgZHVtbXkgcmVmcyB0byBfX19icmtfYWRkciwgX19lbnZpcm9uCisJYW5kIGF0ZXhpdCBpZiBfX2xpbnV4X18gYW5kIF9fUElDX18gIGRlZmluZWQuIAorCitUaHUgRGVjICA4IDEyOjU4OjM0IDE5OTQgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIGNvbmZpZy94bS1mcmVlYnNkLmgsIGkzODYveG0tZnJlZWJzZC5oOiBOZXcgZmlsZXMuCisJKiBjb25maWd1cmUgKGlbMzQ1XTg2LSotZnJlZWJzZCopOiBVc2UgaTM4Ni94bS1mcmVlYnNkLmguCisKK1dlZCBEZWMgIDcgMTY6NTE6NTYgMTk5NCAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLm1kOiBOZXcgcGF0dGVybiBmb3IgaW9yIGJldHdlZW4gU0ltb2RlIHRhcmdldCBhbmQgemVyb19leHRlbmRlZAorCXZhbHVlLgorCitXZWQgRGVjICA3IDE2OjQyOjQ2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IElmIGNhbid0IGZpbmQgcGxhY2UgZm9yIFJFR19ERUFECisJbm90ZSwgYWRkIGFuIElOU04gd2l0aCBhIFVTRSB0byBob2xkIGl0LgorCisJKiB0cmVlLmMgKHByZXNlcnZlX21vbWVudGFyeSk6IE5ldyBmdW5jdGlvbi4KKworV2VkIERlYyAgNyAxNTo1OTowMCAxOTk0ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwkqIGZ1bmN0aW9uLmMgKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBEbyBwYWRkaW5nIGJlZm9yZSByb3VuZGluZworCXNvIHBhZF9iZWxvdyBrbm93cyBob3cgbXVjaCBpcyBuZWVkZWQuCisKK1R1ZSBEZWMgIDYgMTc6NTM6MzcgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAd29tYmF0LmdudS5haS5taXQuZWR1KQorCisgICAgICAgICogc2gubWQgKGFzaHJzaTJfMTYpOiBOZXcgcGF0dGVybiBkb2Vzbid0IGNsb2JiZXIgcmVnIDE4LgorICAgICAgICAoYXNocnNpMl8zMSk6IEZpeC4KKworVHVlIERlYyAgNiAxOToxMTozNiAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIEltcGxlbWVudCBidWlsdC1pbiBmdW5jdGlvbnMKKwlmYWJzZiwgc3FydGYsIHNpbmYsIGNvc2YsIGZhYnNsLCBzcXJ0bCwgc2lubCwgY29zbC4KKworVHVlIERlYyAgNiAxODo0MjoxNSAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogbWFrZS1nY2MuY29tOiBFbGltaW5hdGUgYHNldCBzeW1ib2wvc2NvcGU9bm9HbG9iYWwnLgorCisJKiB2YXgvdm1zLmggKENQUF9QUkVERUZJTkVTKTogU2V0IF9fR05VQ19NSU5PUl9fIHRvIDcuCisKK1R1ZSBEZWMgIDYgMTU6MTA6MzcgMTk5NCAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CisKKyAgICAgICAgKiBzcGFyYy90LXNvbDIgKENSVFNUVUZGX1RfQ0ZMQUdTKTogRG9uJ3QgdXNlIFBJQyBpZgorICAgICAgICBjcm9zcy1jb21waWxpbmcsIHVzZSB0aGUgbmF0aXZlIGFzc2VtYmxlciBvdGhlcndpc2UuCisKK1R1ZSBEZWMgIDYgMDU6NDg6MzIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlndXJlIChpWzM0NV04Ni0qLWdudSopOiBKdXN0IHNldCBjcHVfdHlwZT1pMzg2IGhlcmUuCisJKCotKi1nbnUqKTogTWF0Y2ggdGhpcyBpbiBzZWNvbmQgY2FzZSBzdG10IGFuZCBzZXQgb3RoZXIgdmFycyBiYXNlZCBvbgorCSRjcHVfdHlwZS4KKwkqIGNvbmZpZy9nbnUuaDogTmV3IGZpbGUuCisJKiBjb25maWcvaTM4Ni9nbnUuaDogSW5jbHVkZSAiZ251LmgiLgorCitNb24gRGVjICA1IDE2OjU5OjM5IDE5OTQgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCSogc3BhcmMvdC1zcGFyY2JhcmUgKExJQjJGVU5DU19FWFRSQSk6IENvbXBpbGUgZnAtYml0LmMuCisKK01vbiBEZWMgIDUgMTQ6NDg6NTMgMTk5NCAgSmltIFdpbHNvbiAgPHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1PgorCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBSZWZvcm1hdCBDT0RFX0xBQkVMX05VTUJFUiBtYWNybyBjYWxsCisJdG8gYXZvaWQgSFBVWCBjb21waWxlciBidWcuCisKK01vbiBEZWMgIDUgMTM6NTM6NDUgMTk5NCAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBtNjhrLm1kIChuZWdzZjIpOiBGbGlwIHNpZ24gYml0IGlmIHNvZnR3YXJlIGZsb2F0aW5nIHBvaW50LgorCShuZWdkZjIsbmVneGYyKTogTGlrZXdpc2UuCisJKGFic3NmMik6IFplcm8gc2lnbiBiaXQgaWYgc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQuCisJKGFic2RmMixhYnN4ZjIpOiBMaWtld2lzZS4KKworTW9uIERlYyAgNSAxMzowMDozNyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByczYwMDAuaCAoRVhUUkFfQ09OU1RSQUlOVCwgY2FzZSAnUicpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCisKK01vbiBEZWMgIDUgMDA6NDA6MTEgMTk5NCAgRG91ZyBFdmFucyAgPGRqZUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbiAoYy1wYXJzZS5oKTogU3BsaXQgYXdheSBmcm9tIGMtcGFyc2UuYyBmb3IgcGFyYWxsZWwKKwltYWtlcy4KKwkoYmktcGFyc2VyLmgpOiBMaWtld2lzZSB3aXRoIGJpLXBhcnNlci5jLgorCitTdW4gRGVjICA0IDIxOjA0OjQwIDE5OTQgIERvdWcgRXZhbnMgIDxkamVAY3lnbnVzLmNvbT4KKworCURlbGV0ZSB0aGlzIHBhdGNoOgorCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IENyZWF0ZSBhIFVTRSBpbnNuIGZvciBhbnkKKwlyZWR1bmRhbnQgaW5zbiB3ZSBwcmV0ZW5kIHRvIGZpbGwgYSBkZWxheSBzbG90IHdpdGguICBDb250aW51ZQorCXNlYXJjaGluZyBmb3IgYSBzdWl0YWJsZSBkZWxheSBzbG90IGluc24gYXQgdGhlIG5ldyBVU0UgaW5zbi4KKworRnJpIERlYyAgMiAxMToyOTo0MSAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KKworCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6ICBBZGQgc3VwcG9ydCBmb3IgU0VUX1RZUEUuCisKK0ZyaSBEZWMgIDIgMTg6MTQ6MDkgMTk5NCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBucGFjLnN5ci5lZHU+CisKKwkqIHJzNjAwMC5oIChNQVNLXzY0QklULCBUQVJHRVRfNjRCSVQsIFNIT1JUX1RZUEVfU0laRSk6IERlZmluZS4KKwkoSU5UX1RZUEVfU0laRSwgTUFYX0lOVF9UWVBFX1NJWkUsIExPTkdfVFlQRV9TSVpFKTogRGVmaW5lLgorCShNQVhfTE9OR19UWVBFX1NJWkUsIExPTkdfTE9OR19UWVBFX1NJWkUsIENIQVJfVFlQRV9TSVpFKTogRGVmaW5lLgorCShGTE9BVF9UWVBFX1NJWkUsIERPVUJMRV9UWVBFX1NJWkUsIExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IERlZmluZS4KKwkoUE9JTlRFUl9TSVpFLCBQQVJNX0JPVU5EQVJZKTogRGVwZW5kIG9uIFRBUkdFVF82NEJJVC4KKwkoQklHR0VTVF9BTElHTk1FTlQsIFNUQVJUSU5HX0ZSQU1FX09GRlNFVCk6IExpa2V3aXNlLgorCShGSVJTVF9QQVJNX09GRlNFVCwgUkVHX1BBUk1fU1RBQ0tfU1BBQ0UpOiBMaWtld2lzZS4KKwkoU1RBQ0tfUE9JTlRFUl9PRkZTRVQsIFBtb2RlLCBGVU5DVElPTl9NT0RFKTogVEFSR0VUXzY0QklUIGRlcGVuZGVudC4KKwkqIHhjb2Zmb3V0LmMgKHhjb2ZmX291dHB1dF9zdGFuZGFyZF90eXBlcyk6IEFkZCBUQVJHRVRfNjRCSVQKKwlkZXBlbmRlbmNpZXMuICBBZGQgIndjaGFyIiwgImxvbmcgbG9uZyBpbnQiLCBhbmQgImxvbmcgbG9uZworCXVuc2lnbmVkIGludCIgYnVpbHQtaW4gQyB0eXBlcy4KKworRnJpIERlYyAgMiAxODowODoxNiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBpbnRlZ3JhdGUuYyAoc3Vic3RfY29uc3RhbnQpOiBEb24ndCB0cmVhdCBhbGwgdmlydHVhbCByZWdzIGFzCisJY29uc3RhbnRzLCBqdXN0IHRob3NlIHRoYXQgYXJlIG9mZiBGUCBhbmQgQVAsIGJ1dCBub3QgU1AuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBJZiBjYWxsZWQgZnVuY3Rpb24gY2FsbHMgYWxsb2NhLCBzYXZlIGFuZAorCXJlc3RvcmUgU1AgYXJvdW5kIGl0cyBjYWxsLgorCisJKiByczYwMDAuYyAoaW5wdXRfb3BlcmFuZCk6IENvcnJlY3RseSBjaGVjayBmb3IgU1lNQk9MX1JFRiAKKwlyZWZlcnJpbmcgdG8gdGhlIFRPQy4KKwkqIHJzNjAwMC5oIChFWFRSQV9DT05TVFJBSU5UKTogTGlrZXdpc2UuCisKK1dlZCBOb3YgMzAgMjA6NDI6NTcgMTk5NCAgSmVmZnJleSBBLiBMYXcgIDxsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBDcmVhdGUgYSBVU0UgaW5zbiBmb3IgYW55CisJcmVkdW5kYW50IGluc24gd2UgcHJldGVuZCB0byBmaWxsIGEgZGVsYXkgc2xvdCB3aXRoLiAgQ29udGludWUKKwlzZWFyY2hpbmcgZm9yIGEgc3VpdGFibGUgZGVsYXkgc2xvdCBpbnNuIGF0IHRoZSBuZXcgVVNFIGluc24uCisKK1dlZCBOb3YgMzAgMTk6MDI6NDkgMTk5NCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgorCisJKiBjb21iaW5lLmMgKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVnc18xKTogSGFuZGxlIFNVQlJFR3MuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogV2hlbiBlbWl0IG11bHRpd29yZCBjb252ZXJzaW9uLCBmb3JjZSBGUk9NCisJaW50byBhIG5ldyBwc2V1ZG8tcmVnIGlmIGl0IG92ZXJsYXBzIFRPLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IERlbGV0ZSBCSVRfQU5EX0VYUFIgb2YgY29uc3RhbnRzCisJd2l0aCBtYXNrcy4KKworV2VkIE5vdiAzMCAxODoyMjozMSAxOTk0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQG5wYWMuc3lyLmVkdT4KKworCSogcnM2MDAwLmggKEJJVFNfUEVSX1dPUkQpOiBUQVJHRVRfUE9XRVJQQzY0IGRlcGVuZGVudC4KKwkoTUFYX0JJVFNfUEVSX1dPUkQpOiBEZWZpbmUuCisJKFVOSVRTX1BFUl9XT1JEKTogVEFSR0VUX1BPV0VSUEM2NCBkZXBlbmRlbnQuCisJKE1BWF9VTklUU19QRVJfV09SRCk6IERlZmluZS4KKwkoVU5JVFNfUEVSX0ZQX1dPUkQpOiBEZWZpbmUuCisJKEhBUkRfUkVHTk9fTlJFR1MpOiBVc2UgTUFYX1VOSVRTX1BFUl9GUF9XT1JELgorCShIQVJEX1JFR05PX01PREVfT0spOiBMaWtld2lzZS4KKwkoQ0xBU1NfTUFYX05SRUdTKTogTGlrZXdpc2UuCisJKE1PVkVfTUFYKTogVEFSR0VUX1BPV0VSIGFuZCBUQVJHRVRfUE9XRVJQQzY0IGRlcGVuZGVudC4KKwkoTUFYX01PVkVfTUFYKTogRGVmaW5lLgorCSogcnM2MDAwLm1kIChmbG9hdHNpZGYyKTogVGVzdCBCSVRTX1BFUl9XT1JEIGluIHBhdHRlcm4gY29uZGl0aW9uCisJbm90IGR1cmluZyBidWlsZC4gIEZhaWwgaWYgVEFSR0VUX1BPV0VSUEM2NC4KKwkoZmxvYXR1bnNzaWRmMik6IExpa2V3aXNlLgorCisJKiByczYwMDAubWQgKGV4dGVuZHNpZGkyKTogVXNlIGx3YV9vcGVyYW5kIHByZWRpY2F0ZS4KKwkoc2lnbl9leHRlbmQgbG9hZCB3aXRoIHVwZGF0ZSk6IE5ldyBQb3dlclBDNjQgcGF0dGVybi4KKwkqIHJzNjAwMC5jIChsd2Ffb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuCisJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGx3YV9vcGVyYW5kLgorCitXZWQgTm92IDMwIDE4OjE5OjA4IDE5OTQgIFdpbGwgQXRoYW5hc2lvdSAgKHdpbGxAd2VzdGZvcmQuY2N1ci5jb20pCisKKwkqIHJzNjAwMC5tZCAoZXh0ZW5kc2ZkZjIpOiBTRm1vZGUgYW5kIERGbW9kZSByZWdpc3RlciBmb3JtYXQKKwlpZGVudGljYWwgc28gdXNlIGRlZmluZV9leHBhbmQgd2l0aCBwYXJhZG94aWNhbCBzdWJyZWcgbm8tb3AgYW5kCisJYWNjb21wYW55aW5nIG5ldyBkZWZpbmVfc3BsaXQuCisKK1dlZCBOb3YgMzAgMTg6MDU6MDMgMTk5NCAgTWljaGFlbCBDb2xsaXNvbiAgKGNvbGxpc29uQHN3LnN0cmF0dXMuY29tKQorCisJKiByZWxvYWQuYyAoY29tYmluZV9yZWxvYWRzKTogSWYgdXNpbmcgcmVnIGR5aW5nIGluIHRoaXMgaW5zbiBhcworCXJlbG9hZCByZWcsIGVuc3VyZSBpdCBjYW4ndCBiZSBhIHNlY29uZGFyeSBvdXRwdXQgcmVsb2FkIHJlZy4KKwkKK1dlZCBOb3YgMzAgMTU6NDg6MjkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBPbmx5IHVzZSBtb3ZzdHIgaWYgc2l6ZSBpcworCXNtYWxsIGVub3VnaCBjb25zdGFudCBvciBNT0RFIGlzIGF0IGxlYXN0IEJJVFNfUEVSX1dPUkQuCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlKTogQWxsb3cgc3BlY2lhbCBuYW1lcyAoZS5nLCBgd29yZCcpCisJZm9yIG1vZGUgYXR0cmlidXRlLgorCSogbGliZ2NjMi5jICh3b3JkX3R5cGUpOiBVc2UgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpLgorCitUdWUgTm92IDI5IDE2OjUwOjM3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKyAgICAJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogT3Blbi1jb2RlIHJvdGF0ZSBldmVuIGlmIGJ5IGEgdmFyaWFibGUuCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBEb24ndCBzZXQgZnVuY3Rpb25zIGZvciByb3RsIGFuZCByb3RyLgorCitUdWUgTm92IDI5IDAwOjM5OjU2IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogRGVmaW5lIGFzIHplcm8uCisJKFJFVFVSTl9JTl9NRU1PUlkpOiBPbmx5IGxhcmdlIHN0cnVjdHMgKD44IGJ5dGVzKSBhbmQgYWRkcmVzc2FibGUKKwlzdHJ1Y3RzIHNob3VsZCBiZSByZXR1cm5lZCBpbiBtZW1vcnkuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEhhbmRsZSByZXR1cm5pbmcgQkxLbW9kZSB2YWx1ZXMgaW4KKwlyZWdpc3RlcnMuICBEbyBub3QgdHJ5IHRvIHByb21vdGUgQkxLbW9kZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBGb3IgQkxLbW9kZSBzdHJ1Y3R1cmUgcmV0dXJucywKKwljb3B5IHRoZSByZXR1cm4gdmFsdWUgZnJvbSByZWdpc3RlcnMgaW50byB0aGUgdGFyZ2V0IG1lbW9yeQorCWxvY2F0aW9ucy4KKwkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBEbyBub3QgaW5saW5lIGZ1bmN0aW9ucworCXdoaWNoIHJldHVybiBhIEJMS21vZGUgdmFsdWUgaW4gcmVnaXN0ZXJzLgorCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogRm9yIEJMS21vZGUgc3RydWN0dXJlIHJldHVybnMsIGNvcHkKKwl0aGUgcmV0dXJuIHZhbHVlIGZyb20gbWVtb3J5IGludG8gdGhlIHJldHVybiByZWdpc3RlcnMuICBVc2UKKwlhbiBpbnRlZ2VyIG1vZGUgcmF0aGVyIHRoYW4gQkxLbW9kZSBmb3IgcmV0dXJuaW5nIHN0cnVjdHVyZXMKKwlpbiByZWdpc3RlcnMuCisJKiBleHBsb3cuYyAoaGFyZF9mdW5jdGlvbl92YWx1ZSk6IENoYW5nZSBhIHJlZ2lzdGVyIGluIEJMS21vZGUKKwl0byBhIHJlZ2lzdGVyIGluIGEgc3VmZmljaWVudGx5IHdpZGUgaW50ZWdlciBtb2RlLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IERvIG5vdCBzZXQgaXNfaW50ZWdyYWJsZSBpZiB0aGUKKwlmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZSBhY2NvcmRpbmcgdG8gZnVuY3Rpb25fY2Fubm90X2lubGluZV9wLgorCitNb24gTm92IDI4IDE4OjUzOjA2IDE5OTQgIERhdmUgTG92ZSAgKGQubG92ZUBkbC5hYy51aykKKworCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBGaXggdHlwbyBpbiBHQ0NfRk9SX1RBUkdFVC4KKworTW9uIE5vdiAyOCAxODoxNTo1OCAxOTk0ICBTdGVwaGVuIFIuIHZhbiBkZW4gQmVyZyAgKGJlcmdAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlKQorCisJKiBjb25maWd1cmUgKGxhbmcpOiBSZWFsbHkgZml4IHRoZSBxdW90aW5nIGJ1ZyBpbiBiYXNoIDEuMTIuCisKK01vbiBOb3YgMjggMTg6MDM6NDggMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkLCBleHRyYWN0X2JpdF9maWVsZCk6IENvbnNpc3RlbnRseSB1c2UKKwlTTE9XX1VOQUxJR05FRF9BQ0NFU1MgaW5zdGVhZCBvZiBTVFJJQ1RfQUxJR05NRU5ULgorCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlcywgbW92ZV9ieV9waWVjZXNfbmluc25zLCBlbWl0X3B1c2hfaW5zbiwKKwlleHBhbmRfYXNzaWdubWVudCwgc3RvcmVfZmllbGQsIGV4cGFuZF9leHByKTogTGlrZXdpc2UuCisJKFNMT1dfVU5BTElHTkVEX0FDQ0VTUyk6IERlZmF1bHQgdG8gU1RSSUNUX0FMSUdOTUVOVCwgbm90IHplcm8uCisKKwkqIGNjY3AuYyAoY3JlYXRlX2RlZmluaXRpb24pOiBFcnJvciBpZiBjb21tYSBub3QgZm9sbG93ZWQgYnkgYW4KKwlpZGVudGlmaWVyLgorCShjb2xsZWN0X2V4cGFuc2lvbik6IEVycm9yIGlmICMgdXNlZCBpbiBtYWNybyB3aXRoIG5vIGFyZ3VtZW50cy4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogVXNlIERFQ0xfQ09OVEVYVCBpbnN0ZWFkIG9mCisJY3VycmVudF9iaW5kaW5nX2xldmVsIHRvIGlkZW50aWZ5IGZpbGUtc2NvcGUgdmFyaWFibGVzLgorCitXZWQgTm92IDIzIDE5OjQ0OjI1IDE5OTQgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQGpvbm55LmN5Z251cy5jb20pCisKKwkqIHNoLmMgKE1TVywgTFNXKTogTmV3IG1hY3Jvcy4KKyAgICAgICAgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IEFkZGVkICdUJyBhbmQgJ1MnLiAgTW9kaWZpZWQKKyAgICAgICAgdG8gc3VwcG9ydCBhbHRlcm5hdGUgZW5kaWFubmVzcy4KKyAgICAgICAgKG91dHB1dF9tb3ZlZG91YmxlKTogIFN1cHBvcnQgYm90aCBieXRlIG9yZGVycy4KKyAgICAgICAgKG91dHB1dF9vcHRpb25zKTogVGVsbCBhc3NlbWJsZXIgd2hlbiBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCisgICAgICAgIChzaGlmdGluc25zKTogTmV3IGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBzaGlmdCBjb3N0IG1vcmUKKyAgICAgICAgYWNjdXJhdGVseS4KKyAgICAgICAgKGdlbl9zaGlmdHlfb3ApOiBVc2UgbmV3IGZ1bmN0aW9uLgorICAgICAgICAqIHNoLmggKENQUF9TUEVDLCBBU01fU1BFQywgTElOS19TUEVDLCBMSUJHQ0MyX1dPUkRTX0JJR19FTkRJQU4pOiBOZXcuCisgICAgICAgIChUQVJHRVRfU1dJVENIRVMsIFdPUkRTX0JJR19FTkRJQU4sIEJZVEVTX0JJR19FTkRJQU4sICk6IFN1cHBvcnQKKyAgICAgICAgYm90aCBieXRlIG9yZGVycy4KKyAgICAgICAgKiBzaC5tZCAoYWRkaTMsIHN1YmRpMywgYXNocmRpMywgYXNobGRpMywgZXh0ZW5kc2lkaTIsIG1vdmRpLCBtb3ZkZik6CisgICAgICAgIFN1cHBvcnQgYm90aCBieXRlIG9yZGVycy4KKyAgICAgICAgKGFzaHJzaTJfMTYsIGFzaHJzaTJfMzEpOiBOZXcuCisgICAgICAgIHQtc2g6IFN1cHBvcnQgYm90aCBieXRlIG9yZGVycy4KKworV2VkIE5vdiAyMyAxNzoyNTo0MyAxOTk0ICBJYW4gRGFsbCAgKGRhbGxAaGZyZC5kc3RvLmdvdi5hdSkKKworCSogY29uZmlnL25zMzJrL3tuczMyay5jLG5zMzJrLmh9OiBBZGQgLW1oaW1lbSB0bworCXN1cHBvcnQgbGlua2luZyBhYm92ZSAweDIwMDAwMDAwIGJvdW5kYXJ5LgorCisJKiBjb25maWcvbnMzMmsve25ldGJzZC5oLHBjNTMyLmgsIG5zMzJrLmN9OiBGaXggbWVhbmluZworCW9mIEJBU0VfUkVHX05FRURFRC4KKworV2VkIE5vdiAyMyAxNzoyNDoyNCAxOTk0IE1hdHRoaWFzIFBmYWxsZXIgKGxlb0BtYXJjby5kZSkKKworCSogY29uZmlndXJlIChuczMyay1wYzUzMi1uZXRic2QpOiBObyBuZWVkIGZvciBmaXhpbmNsdWRlcworCWFuZCBsaWJnY2MxLgorCSogbnMzMmsvbnMzMmsuaCAoQ09OU1RfQ09TVFMpOiBDb3JyZWN0IHJhbmdlIGlzIC0weDFmZmYgdG8gMHgyMDAwLgorCSogbnMzMmsvbnMzMmsubWQgKGV2ZXJ5d2hlcmUpOiBDb3JyZWN0IHJhbmdlIGlzIC0weDFmZmZmZmZmCisJdG8gMHgyMDAwMDAwMCwgb3RoZXJzIGhhdmUgdG8gYmUgbG9hZGVkIHdpdGggbW92ZC4KKwlTaG9ydGNpcmN1aXQgd2l0aCBUQVJHRVRfMzI1MzIgYXMgZWFybHkgYXMgcG9zc2libGUuCisJKG1vdnNpKTogVXNlIG1vdmQgdG8gbG9hZCB1bmtub3duIHN5bWJvbCB2YWx1ZXMuIHRvIGFsbG93CisJKiBuczMyay9uczMyay5jIChwcmludF9vcGVyYW5kKTogUmVtb3ZlZCBkZWFkIGNvZGUuCisJKiBuczMyay9wYzUzMi5oIChUQVJHRVRfREVGQVVMVCk6IEZvcmJpZCB1c2FnZSBvZiBiaXRmaWVsZAorCWluc3RydWN0aW9ucy4KKworV2VkIE5vdiAyMyAxNDowOTo0MiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIG1pcHMuYyAobWlwc19vdXRwdXRfZXh0ZXJuYWwpOiBFeGNsdWRlIF9fYnVpbHRpbl9uZXh0X2FyZyBmcm9tIGxpc3QKKwlvZiB1c2VkIGV4dGVybmFsIGZ1bmN0aW9ucy4KKworCSogc2guYyAoYXJpdGhfcmVnX29wZXJhbmQpOiBEaXNhbGxvdyBNQUNIX1JFRyBhbmQgTUFDTF9SRUcuCisKKwkqIHNwYXJjLmggKFNFQ09OREFSWV9NRU1PUllfTkVFREVEX1JUWCwgU0VDT05EQVJZX01FTU9SWV9ORUVERURfTU9ERSk6CisJVXNlIE1PREUgbm90IG1vZGUuCisKK1dlZCBOb3YgMjMgMTM6MzA6NTIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IElmIHNwbGl0dGluZyB1cCBpbnRvIGluZGl2aWR1YWwgd29yZHMKKwlhbmQgWCBpcyBhIHB1c2hfb3BlcmFuZCwgZG8gdGhlIHB1c2ggYW5kIHJlZmVyZW5jZSB0b3Agb2Ygc3RhY2suCisKK1R1ZSBOb3YgMjIgMjE6Mzk6NTIgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBtaXBzL2VsZjY0LmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRGVmaW5lLgorCitUdWUgTm92IDIyIDA2OjI5OjIxIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZF9jb252ZXJ0KTogRG9uJ3QgZm9sZCBjb252ZXJzaW9uIGlmIGl0IHdvdWxkCisJcHJvZHVjZSBjb25zdGFudCBsYXJnZXIgdGhhbiB3ZSBjYW4gc3VwcG9ydC4KKwkqIGVtaXQtcnRsLmMgKGdlbl9sb3dwYXJ0X2NvbW1vbik6IERvIG5vdGhpbmcgaWYgc2l6ZSBpcworCWdyZWF0ZXIgdGhhbiB0d2ljZSBob3N0IHdvcmRzaXplLCBub3QganVzdCBpZiBlcXVhbC4KKworCSogb3B0YWJzLmMgKGVtaXRfbm9fY29uZmxpY3RfYmxvY2spOiBKdXN0IGVtaXQgdGhlIGluc25zIGlmCisJdGhlIGJsb2NrIGNvbnRhaW5zIHNvbWV0aGluZyBub3QgYW4gSU5TTiBvciBoYXMgYW4gZW1iZWRkZWQgYmxvY2suCisKKwkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdCk6IFNldCBSRUdOT19QT0lOVEVSX0ZMQUcKKwlmb3IgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTS4KKworCSogbWFjaG1vZGUuaCAocHRyX21vZGUpOiBBZGQgZGVjbGFyYXRpb24uCisJKiBlbWl0LXJ0bC5jIChwdHJfbW9kZSk6IEFkZCBkZWZpbml0aW9uLgorCShpbml0X2VtaXRfb25jZSk6IEluaXRpYWxpemUgcHRyX21vZGUuCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IFVzZSBwdHJfbW9kZSBpbnN0ZWFkIG9mIGVxdWl2YWxlbnQKKwljYWxsIHRvIG1vZGVfZm9yX3NpemUuCisKK01vbiBOb3YgMjEgMTg6NDE6NDIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IFdoZW4gZWxpbWluYXRpbmcgY29udmVyc2lvbnMsCisJdHJlYXQgQVJSQVlfVFlQRSBsaWtlIGEgcmVjb3JkLgorCisJKiBtNjhrLm1kIChtb3ZxaSk6IEZpeCB0eXBvIGluIHB1c2gvcG9wIGNhc2UuCisKK01vbiBOb3YgMjEgMTg6MTE6NTUgMTk5NCAgU3RlcGhlbiBSLiB2YW4gZGVuIEJlcmcgIChiZXJnQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZSkKKworCSogZ2Vub3Bpbml0LmMgKGdlbl9pbnNuKTogVXNlIEdFVF9NT0RFX1dJREVSX01PREUgbWFjcm8gaW5zdGVhZCBvZgorCWRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgYXJyYXkuCisKK01vbiBOb3YgMjEgMTc6NTk6MDcgMTk5NCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBucGFjLnN5ci5lZHU+CisKKwkqIGFpeDQxLmggKExJTktfU1BFQyk6IE5ldyBvdmVycmlkaW5nIGRlZmludGlvbi4KKworTW9uIE5vdiAyMSAxNzo0NDowMSAxOTk0ICBKb2huIEYgQ2FyciAgKGpmY0BtaXQuZWR1KQorCisJKiByczYwMDAuYyAoaW5wdXRfb3BlcmFuZCk6ICBBbGxvdyBhIFNZTUJPTF9SRUYgcmVmZXJyaW5nIHRvIGEKKwlzeW1ib2wgaW4gdGhlIFRPQy4KKworTW9uIE5vdiAyMSAxNDozOToxMyAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIG1pcHMvdC1lY29mZiAoZHAtYml0LmMpOiBGaXggdHlwb3MuCisKK01vbiBOb3YgMjEgMTQ6MDY6MjkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBGb3IgQ09OU1RfRE9VQkxFLCBhZGQgY2FzZSB0bworCWhhbmRsZSBCSVRTX1BFUl9XT1JEIG9mIDE2LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFdoZW4gZGVjcmVtZW50IG1heF9ncm91cHMgb2Ygc3VwZXJjbGFzcywgY2FuCisJb25seSBkbyBzbyBpZiB0aGUgZ3JvdXBfc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgZ3JvdXAuCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogRG8gd2FybiBhYm91dCBmbG9hdGluZyBwb2ludCBvdXQgb2YgcmFuZ2UgaWYKKwl0YXJnZXQgZmxvYXRpbmctcG9pbnQgZm9ybWF0IGlzIElFRUUuICBVc2Ugd2FybmluZyBpbnN0ZWFkIG9mCisJcGVkd2FybiB0byBhdm9pZCBnZXR0aW5nIGVycm9ycy4KKworTW9uIE5vdiAyMSAxMzozNzowMyAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIG04OGsvbTg4ay1hb3V0LmggKENQUF9QUkVERUZJTkVTKTogQWRkIC1BY3B1IGFuZCAtQW1hY2hpbmUuCisJKiBtODhrL204OGstY29mZi5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgorCShEQlhfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCisKKwkqIG02OGsvdC1tNjhrYmFyZSAoTVVMVElMSUJfTUFUQ0hFUyk6IFRyZWF0IG02ODMwMi9tNjgzMzIgbGlrZSBtNjgwMDAuCisKK01vbiBOb3YgMjEgMDA6NTg6MzYgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogcGEuYyAob3V0cHV0X2NhbGwpOiBXaGVuIGVtaXR0aW5nIGFuIGlubGluZSBsb25nLWNhbGwsIHVzZSBMUCUKKwlhbmQgUlAlIHByZWZpeGVzIHRvIGdldCB0aGUgZnVuY3Rpb24ncyBhZGRyZXNzLgorCitTdW4gTm92IDIwIDA3OjAwOjI1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChvYmpjLXBhcnNlLnkpOiBGaXggdHlwby4KKworCSogdC1zdnIzOiBEZWxldGVkLgorCSogdC1zdnI0IChFWFRSQV9QQVJUUyk6IERlbGV0ZWQuCisJKiBpMzg2L3QtY3J0c3R1ZmYsIGkzODYvdC1jcnRwaWM6IE5ldyBmaWxlcy4KKwkqIGkzODYvdC1zdnIzZGJ4IChFWFRSQV9QQVJUUyk6IERlbGV0ZWQuCisJKiBjb25maWd1cmU6IFJlcGxhY2UgdXNlIG9mIHQtc3ZyMyB3aXRoIGV4dHJhX3BhcnRzIGRlZmluaXRpb24uCisJQWRkIGV4dHJhX3BhcnRzIHRvIHQtc3ZyNCB1c2VyczsgbGlrZXdpc2UgZm9yIGkzODYvdC1zdnIzZGJ4LgorCShpMzg2IGNvbmZpZ3VyYXRpb25zKTogQWRkIHQtY3J0c3R1ZmYgaWYgY2FuJ3QgYnVpbGQgY3J0c3R1ZmYuYworCXdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXI7IHVzZSB0LWNydHBpYyBpZiBhbHNvIG11c3QgYnVpbGQgd2l0aCAtZnBpYy4KKworU2F0IE5vdiAxOSAxNzoxNDo1NCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIG02OGsvbGIxc2Y2OC5hc20gKGFkZHNmMyk6IEFmdGVyIHVzaW5nIHN3YXAgZm9yIDE2IGJpdCByb3RhdGUsCisJYnJhbmNoIGJhY2sgb25seSBpZiBjb3VudCBzdGlsbCBncmVhdGVyIHRoYW4gMC4KKworCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogQ2FuIHNob3J0ZW4gc2hpZnQgb25seSBpZiBzaGlmdCBjb3VudAorCWlzIGxlc3MgdGhhbiBzaXplIGluIGJpdHMgb2YgYXJnMC4KKwkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBSZS1lbmFibGUgdHJ1bmNhdGlvbiBvZiBpbW1lZGlhdGUgc2hpZnQKKwljb3VudC4KKworCSogbWlwcy5jIChtaXBzX2NvbnN0X2RvdWJsZV9vayk6IEFjY2VwdCBWT0lEbW9kZSBub3QgREltb2RlLgorCShtaXBzX21vdmVfMXdvcmQpOiBBY2NlcHQgVk9JRG1vZGUgQ09OU1RfRE9VQkxFLgorCitTYXQgTm92IDE5IDA1OjM2OjM1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGFscGhhLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ2MnLCBjYXNlICdkJyk6IE5ldyBjYXNlcy4KKwkqIGFscGhhLm1kIChzaWduX2V4dGVuZCk6IERpc2FibGUgcGF0dGVybiB3aXRoIGV4cGxpY2l0IFNVQlJFRy4KKwkoY21vdik6IEFsbG93IGZpcnN0IG9wZXJhbmQgb2YgY29tcGFyaXNvbiB0byBiZSB6ZXJvLCAybmQgcmVnLgorCisJKiBhMjlrL3VuaXguaCAoREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTik6IERlZmluZSBhcyAwLgorCSogYTI5ay94LXVuaXggKENMSUIpOiBSZW1vdmUgLWxzeXN2LgorCitGcmkgTm92IDE4IDIyOjM3OjI2IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiBtODhrL21vdC1zeXN2NC5oOiBSZW1vdmUsIG5vIGxvbmdlciBuZWVkZWQuCisJKiBjb25maWd1cmU6IFJlbW92ZSBtODhrLW1vdCotc3lzdjQqIHNwZWNpYWwgY2FzZS4KKworCSogY29sbGVjdDIuYzogTWFrZSB2YXJpb3VzIGZ1bmN0aW9ucyBzdGF0aWMuCisKKwkqIHNwYXJjL3N5c3Y0LmggKFtDRF1UT1JTX1NFQ1RJT05fQVNNX09QKTogUmVtb3ZlICNleGVjaW5zdHIuCisKKwkqIHN2cjQuaCwgaTM4Ni9zb2wyLmgsIG04OGsvZGd1eC5oLCBzcGFyYy9zb2wyLmgKKwkoTElOS19TUEVDKTogUGFzcyAteiB0ZXh0IHdoZW4gLXNoYXJlZCBvciAtc3ltYm9saWMuCisJKiBzdnI0LmggKExJQkdDQ19TUEVDKTogRG9uJ3QgcGFzcyAtbGdjYyB3aGVuIC1zeW1ib2xpYy4KKworCSogY3J0c3R1ZmYuYzogRml4IGNvbW1lbnRzLgorCitGcmkgTm92IDE4IDIyOjM2OjI2IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiBwYS9wYS1ocHV4LmggKExERF9TVUZGSVgpOiBNb3ZlIHRvIHBhLmguCisJKFBBUlNFX0xERF9PVVRQVVQpOiBEaXR0by4KKwkqIHBhL3BhLmg6IChMRERfU1VGRklYKTogTW92ZSBmcm9tIHBhLWhwdXguaC4KKwkoUEFSU0VfTEREX09VVFBVVCk6IERpdHRvLgorCShMSU5LX1NQRUMpOiBQYXNzIC1iIGlmIC1zaGFyZWQuICBEb24ndCBwYXNzIC11IG1haW4gaWYgLXNoYXJlZC4KKwkqIHBhL3BhMS1vc2YuaDogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24uCisKK0ZyaSBOb3YgMTggMjI6MzU6MjYgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChjcnR7YmVnaW4sZW5kfS5vKTogUGFzcyAkKENSVFNUVUZGX1RfQ0ZMQUdTKS4KKwkoQ1JUU1RVRkZfVF9DRkxBR1MpOiBOZXcgdmFyaWFibGUuCisKKwkqIHN2cjQuaCwgbTg4ay9zeXN2NC5oLCBzcGFyYy9zeXN2NC5oIChGSU5JX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgorCSogaTM4Ni9zb2wyLmggKEZPUkNFX0ZJTklfU0VDVElPTl9BTElHTik6IERlZmluZSB0bworCUZPUkNFX0lOSVRfU0VDVElPTl9BTElHTi4KKwkqIG04OGsvZGd1eC5oLCBtODhrL21vdC1zeXN2NC5oLCBzcGFyYy9zeXN2NC5oCisJKElOSVRfU0VDVElPTl9QUkVBTUJMRSk6IFJlbW92ZS4KKwkqIHN2cjQuaCwgc3BhcmMvc29sMi5oIChTVEFSVEZJTEVfU1BFQyk6IEluY2x1ZGUgY3J0aS5vIGFuZAorICAgICAgICB2YWx1ZXMtWD8ubyB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYi4KKwkqIHN2cjQuaCwgaTM4Ni9zb2wyLmgsIHNwYXJjL3NvbDIuaCAoTElCX1NQRUMpOiBSZW1vdmUgZW5kZmlsZXMuCisJKEVOREZJTEVfU1BFQyk6IEhhbmRsZSBlbmRmaWxlcy4KKworCSogbGliZ2NjMi5jIChfX2RvX2dsb2JhbF9kdG9ycyk6IERvbid0IGRlZmluZSBpZgorICAgICAgICBJTklUX1NFQ1RJT05fQVNNX09QIGFuZCBPQkpFQ1RfRk9STUFUX0VMRi4KKwkoTF9bY2RddG9yX2xpc3QpOiBMb3NlIHVudXNlZCBwaWVjZXMuCisKKwkqIGNydHN0dWZmLmMgKF9fW0NEXVRPUl97TElTVCxFTkR9X18pOiBzdGF0aWMgaWYgT0JKRUNUX0ZPUk1BVF9FTEYuCisJKF9fZG9fZ2xvYmFsX2N0b3JzX2F1eCk6IEluIC50ZXh0IGlmIE9CSkVDVF9GT1JNQVRfRUxGLgorCShfX2RvX2dsb2JhbF9kdG9yc19hdXgpOiBEaXR0by4KKwkoaW5pdF9kdW1teSk6IER1bW15IGZ1bmN0aW9uIHRvIHN0aWNrIGEgY2FsbCB0byBfX2RvX2dsb2JhbF9jdG9yc19hdXgKKwlpbnRvIHRoZSAuaW5pdCBzZWN0aW9uIGlmIE9CSkVDVF9GT1JNQVRfRUxGLgorCShmaW5pX2R1bW15KTogU2ltaWxhcmx5LgorCVJlbW92ZSByZWZlcmVuY2UgdG8gSU5JVF9TRUNUSU9OX1BSRUFNQkxFLgorCisJKiBtaXBzL2lyaXM1LmggKEhBU19JTklUX1NFQ1RJT04pOiBEZWZpbmUuCisJKExJTktfU1BFQyk6IFBhc3MgLXUgX19tYWluIC1pbml0IF9fbWFpbiBpZiBub3QgLXNoYXJlZC4KKwkoU1RBUlRGSUxFX1NQRUMpOiBEb24ndCBpbmNsdWRlIHRoZXNlIHdoZW4gLXNoYXJlZC4KKwkoTElCX1NQRUMpOiBEb24ndCBpbmNsdWRlIHRoZXNlIHdoZW4gLXNoYXJlZC4KKwkoRU5ERklMRV9TUEVDKTogRGVmaW5lLgorCShMRF9JTklUX1NXSVRDSCk6IERlZmluZS4KKwkoTERfRklOSV9TV0lUQ0gpOiBEZWZpbmUuCisKKwkqIGFscGhhL2FscGhhLmggKExEX0lOSVRfU1dJVENIKTogRGVmaW5lLgorCShMRF9GSU5JX1NXSVRDSCk6IERlZmluZS4KKwkoSU5JVF9OQU1FX0ZPUk1BVCk6IExvc2UuCisJKEZJTklfTkFNRV9GT1JNQVQpOiBMb3NlLgorCitGcmkgTm92IDE4IDIyOjM0OjI2IDE5OTQgIFJvbmFsZCBGLiBHdWlsbWV0dGUgKHJmZ0BzZWdmYXVsdC51cy5jb20pCisKKwkqIGNydHN0dWZmLmMsIHN2cjQuaCwgaTg2MC9zeXN2NC5oLCBtODhrL3N5c3Y0LmgsIHNwYXJjL3N5c3Y0LmgKKyAgICAgICAgKENUT1JTX1NFQ1RJT05fQVNNX09QKTogUmVtb3ZlIEBwcm9nYml0cywgYWRkIFNIRl9XUklURS4KKwkoRFRPUlNfU0VDVElPTl9BU01fT1ApOiBEaXR0by4KKworCSogdC1zdnI0LCBpMzg2L3Qtc29sMiwgbTg4ay90LXN5c3Y0LCBzcGFyYy90LXNvbDIKKwkoQ1JUU1RVRkZfVF9DRkxBR1MpOiBEZWZpbmUgdG8gLWZwaWMuCisKK0ZyaSBOb3YgMTggMjI6MzM6MjYgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCisKKwkqIGdjYy5jIChMSUJHQ0NfU1BFQyk6IE5ldyBzcGVjLgorCShsaW5rX2NvbW1hbmRfc3BlYyk6IFVzZSBMSUJHQ0NfU1BFQy4KKwkoc2V0X3NwZWMpOiBIYW5kbGUgTElCR0NDX1NQRUMuCisJKHByb2Nlc3NfY29tbWFuZCk6IERpdHRvLgorCShkb19zcGVjXzEpOiAlRyBpcyBMSUJHQ0NfU1BFQy4KKwkodmFsaWRhdGVfYWxsX3N3aXRjaGVzKTogQWxzbyB2YWxpZGF0ZSBMSUJHQ0NfU1BFQy4KKworCSogYWxwaGEvYWxwaGEuaCAoTElCR0NDX1NQRUMpOiBEbyBpbmNsdWRlIGxpYmdjYyB3aGVuCisgICAgICAgIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCisKK0ZyaSBOb3YgMTggMjI6MzI6MjYgMTk5NCAgU3RldmUgRHVtICAoc3RldmVfZHVtQG1lbnRvcmcuY29tKQorCisJKiBjb2xsZWN0Mi5jIChTVU5PUzRfU0hBUkVEX0xJQlJBUklFUyk6IFN1cHBvcnQgc2Nhbm5pbmcgdGhlCisgICAgICAgIF9EWU5BTUlDIGZpZWxkIG9mIFN1bk9TIDQgc2hhcmVkIGxpYnJhcmllcyBkaXJlY3RseS4KKworRnJpIE5vdiAxOCAyMjozMToyNiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbSkKKworCSogY29sbGVjdDIuYyAobWFpbik6IEZvciBzaGFyZWQgbGlicmFyaWVzLCBsaW5rIGluIHN0dWJzIGV2ZW4gaWYKKwl0aGVyZSBhcmUgbm8gY29uc3RydWN0b3JzIG9yIGRlc3RydWN0b3JzIHNvIHRoYXQgc3RhdGljIG9iamVjdHMKKwljYW4gYmUgYWRkZWQgd2l0aG91dCByZS1saW5raW5nIGV2ZXJ5dGhpbmcgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5LgorCSh3cml0ZV9jX2ZpbGVfc3RhdCk6IFR3ZWFrLgorCisJKiBjb25maWd1cmU6IFVzZSBzdW5vczQuaCBpbnN0ZWFkIG9mIHNwYXJjLmggZm9yIFN1bk9TIDQgdGFyZ2V0cy4KKworCSogc3BhcmMvc3Vub3M0Lmg6IE5ldyBmaWxlIGZvciBTdW5PUyA0LXNwZWNpZmljIHRoaW5ncy4KKwkoU1VOT1M0X1NIQVJFRF9MSUJSQVJJRVMpOiBEZWZpbmUgdG8gMS4KKwkqIHNwYXJjL3NwYXJjLmg6IChMSU5LX1NQRUMpOiBTdXBwb3J0IC1zaGFyZWQuCisJKExJQl9TUEVDKTogRGl0dG8uCisKKwkqIHBhL3BhLWhwdXguaCAoTEREX1NVRkZJWCk6IE5ldyBtYWNyby4KKwkoUEFSU0VfTEREX09VVFBVVCk6IE5ldyBtYWNyby4KKwkoTElOS19TUEVDKTogUGFzcyAtYiBpZiAtc2hhcmVkLiAgRG9uJ3QgcGFzcyAtdQltYWluIGlmIC1zaGFyZWQuCisJKExJQl9TUEVDKTogRG9uJ3QgaW5jbHVkZSBpZiAtc2hhcmVkLgorCisJKiBjb2xsZWN0Mi5jIChzY2FuX3Byb2dfZmlsZSk6IElnbm9yZSB1bmRlZmluZWQgc3ltYm9scy4KKworRnJpIE5vdiAxOCAyMjozMDoyNiAxOTk0ICBTdGV2ZSBEdW0gKHN0ZXZlX2R1bUBtZW50b3JnLmNvbSkKKworCSogY29sbGVjdDIuYyAoZW51bSBwYXNzKTogQWRkIFBBU1NfTElCLgorCShpc19jdG9yX2R0b3IpOiBDaGVjayBmb3Igc2hhcmVkIGxpYnJhcnkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IKKwlmdW5jdGlvbnMsIHRvby4KKwkobWFpbik6IEFkZCBvX2ZpbGUgYWZ0ZXIgYW55IGxpbmsgbGlicmFyaWVzLCB0b28uCisJQ3JlYXRlIGEgc2hhcmVkIG9iamVjdCBpZiBDT0xMRUNUX0dDQ19PUFRJT05TIGNvbnRhaW5zIC1zaGFyZWQuCisJQWxzbyBzY2FuIHNoYXJlZCBsaWJyYXJpZXMgZm9yIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgaWYKKwlMRERfU1VGRklYIGlzIGRlZmluZWQuCisJKHdyaXRlX2NfZmlsZV9zdGF0KTogTmV3IGZ1bmN0aW9uIHRvIHdyaXRlIG91dCBmaWxlIGZvciBhIHNoYXJlZAorCW9iamVjdC4KKwkod3JpdGVfY19maWxlX2dsb2IpOiBSZW5hbWVkIGZyb20gd3JpdGVfY19maWxlLgorCSh3cml0ZV9jX2ZpbGUpOiBDYWxscyBvbmUgb2Ygd3JpdGVfY19maWxlX3tzdGF0LGdsb2J9LgorCShzY2FuX3Byb2dfZmlsZSk6IFVwZGF0ZSB0byBkZWFsIHdpdGggc2hhcmVkIGxpYnJhcmllcy4KKwkoc2Nhbl9saWJyYXJpZXMpOiBOZXcgZnVuY3Rpb24gdG8gc2NhbiBzaGFyZWQgbGlicmFyaWVzIGZvcgorCWNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuCisKK0ZyaSBOb3YgMTggMTk6MTY6MTkgMTk5NCAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5jIChhZGRyc19va19mb3JfcXVhZF9wZWVwKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfcHJvbG9nKTogVXNlIGxpdSBtbmVtb25pYy4KKwkocmVnaXN0ZXJzX29rX2Zvcl9xdWFkX3BlZXApOiBOZXcgZnVuY3Rpb24uCisJKiByczYwMDAubWQgKHBlZXBob2xlcyBmb3IgdHdvIERGIGxvYWQvc3RvcmUpOiBOZXcgcGVlcGhvbGVzLgorCitGcmkgTm92IDE4IDE5OjEwOjI0IDE5OTQgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQG5leHQuY29tKQorCisgICAgICAgICogb2JqYy9vYmplY3QuYyAoY2xhc3NfY3JlYXRlX2luc3RhbmNlKTogIFJlcGxhY2UgbWVtY2hyCisJd2l0aCBtZW1zZXQuCisKK0ZyaSBOb3YgMTggMTk6MDY6MTUgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBzcGFyYy9saXRlLmg6ICNpbmNsdWRlICJnb2Zhc3QuaCIKKwkoSU5JVF9TVUJUQVJHRVRfT1BUQUJTKTogRGVmaW5lLgorCitGcmkgTm92IDE4IDE5OjAxOjUxIDE5OTQgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CisKKwkqIE1ha2VmaWxlLmluIChleHRyYWNsZWFuKTogUmVtb3ZlICoucHMuCisKK0ZyaSBOb3YgMTggMTg6NTM6NTcgMTk5NCAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBjY2NwLmMgKGNyZWF0ZV9kZWZpbml0aW9uKTogQWxsb3cgY2FycmlhZ2UtcmV0dXJuICgnXHInKQorCWFzIHdoaXRlIHNwYWNlIGluIHNpbXBsZSBvciBlbXB0eSBleHBhbnNpb24uCisKK0ZyaSBOb3YgMTggMTg6MzA6NDAgMTk5NCAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIHdpbm50L2xkLmMgKG1haW4pOiBGaXggb2ZmLWJ5LW9uZSBlcnJvciBhbGxvY2F0aW5nIHNkYnVmZi4KKworRnJpIE5vdiAxOCAxODoyMzo1NCAxOTk0ICBNaWtlIENvbGxpc29uICAoY29sbGlzb25Ac3cuc3RyYXR1cy5jb20pCisKKwkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IEZvciBzaW5nbGUgU0VUIGJldHdlZW4gaGFyZCByZWcKKwkgYWxvbmUgaW4gYSBjbGFzcyBhbmQgcHNldWRvLCBlbnN1cmUgcmVnIGlzIHRoZSBvbmx5IG1lbWJlciBvZiBjbGFzcy4KKworRnJpIE5vdiAxOCAxNToxNToyNyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNvbDIuaCAoTURfU1RBUlRGSUxFX1BSRUZJWCk6IERlbGV0ZS4KKworRnJpIE5vdiAxOCAxNDoxNjowNCAxOTk0ICBDaHJpcyBIdWV5ICAoY2FoQHRhY3RpeC5yYWluLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKG9iamMtcGFyc2UueSwgbW9zdGx5Y2xlYW4pOiBSZW5hbWUgdGVtcCBmaWxlIAorCWZvciBvYmpjLXBhcnNlLnkgdG8gYmUgdW5kZXIgMTQgY2hhcmFjdGVycy4KKworVGh1IE5vdiAxNyAyMDo0NjoxNSAxOTk0ICBEb3VnIEV2YW5zICA8ZGplQGN5Z251cy5jb20+CisKKwlWeFdvcmtzIHN1cHBvcnQgZnJvbSB2YXJpb3VzIHBlb3BsZSBhdCBDeWdudXMuCisJKiBjb25maWcuc3ViOiBWZW5kb3IgZm9yIHZ4d29ya3MgaXMgd3JzLgorCSogY29uZmlndXJlIChpOTYwLXdycy12eHdvcmtzKik6IE5ldyB0YXJnZXQuCisJKG02OGstd3JzLXZ4d29ya3MqKTogTmV3IHRhcmdldC4KKwkoc3BhcmMtd3JzLXZ4d29ya3MqLCBzcGFyY2xpdGUtd3JzLXZ4d29ya3MqKTogTmV3IHRhcmdldHMuCisJKiBpOTYwL3Qtdnh3b3Jrczk2MCwgaTk2MC92eDk2MC1jb2ZmLmgsIGk5NjAvdng5NjAuaDogTmV3IGZpbGVzLgorCSogbTY4ay90LXZ4d29ya3M2OCwgbTY4ay92eG02OGsuaDogTmV3IGZpbGVzLgorCSogc3BhcmMvdC12eHNwYXJjLCBzcGFyYy92eHNwYXJjLmg6IE5ldyBmaWxlcy4KKworCSogaDgzMDAvaDgzMDAuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgorCShQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBEZWZpbmUgdG8gU0RCX0RFQlVHLgorCisJKiBjb25maWd1cmUgKC0tcHJvZ3JhbS1wcmVmaXgsIC0tcHJvZ3JhbS1zdWZmaXgsCisJLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lLCAtdiwgLXZlcmJvc2UpOiBOZXcgYXJndW1lbnRzLgorCShhcyk6IElmIGdhcyBpcyBpbiBidWlsZCB0cmVlLCB1c2UgaXQuCisJKGxkLCByZWFsLWxkKTogTGlrZXdpc2UgYnV0IHdhdGNoIGZvciB1c2VfY29sbGVjdC4KKwkocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSk6IFVwZGF0ZSBNYWtlZmlsZSBpZgorCS0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBnaXZlbi4KKwkocHJvZ3JhbV90cmFuc2Zvcm1fY3Jvc3NfbmFtZSk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4gKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpOiBEZWZpbmUuCisJKHByb2dyYW1fdHJhbnNmb3JtX2Nyb3NzX25hbWUpOiBEZWZpbmUuCisJKEdDQ19JTlNUQUxMX05BTUUsIEdDQ19DUk9TU19OQU1FKTogRGVmaW5lLgorCShpbnN0YWxsLWNvbW1vbik6IFVzZSB0aGVtLgorCShpbnN0YWxsLW1hbik6IExpa2V3aXNlLgorCShkaXN0Y2xlYW4pOiBEZWxldGUgKi5hc20uCisJKHN0YWdlKiwgcmlza3ktc3RhZ2UqKTogSWYgYXMvbGQvcmVhbC1sZCBleGlzdCwgY29weSB0aGVtIHRvIHN0YWdlIGRpci4KKworCUVtYmVkZGVkIHRhcmdldCBzdXBwb3J0IGZyb20gdmFyaW91cyBDeWdudXMgcGVvcGxlLgorCSogY29uZmlnLnN1YiAoc3BhcmMpOiBSZWNvZ25pemUgYXMgYSBjcHUuCisJKGVjb2ZmKiwgdnN0YSwgdWRpKTogUmVjb2duaXplIGFzIG9zJ3MuCisJKHVkaTI5ayk6IE5ldyBhbGlhcy4KKwkqIGNvbmZpZ3VyZTogKGEyOWstKi11ZGkpOiBOZXcgdGFyZ2V0LgorCShpWzM0NV04Ni0qLWFvdXQqKTogTmV3IHRhcmdldC4KKwkoaVszNDVdODYtKi1jb2ZmKik6IE5ldyB0YXJnZXQuCisJKGlbMzQ1XTg2LSotdnN0YSk6IE5ldyB0YXJnZXQuCisJKG02OGstKi1hb3V0Kik6IE5ldyB0YXJnZXQuCisJKG02OGstKi1jb2ZmKik6IE5ldyB0YXJnZXQuCisJKG04OGstKi1hb3V0Kik6IE5ldyB0YXJnZXQuCisJKG04OGstKi1jb2ZmKik6IE5ldyB0YXJnZXQuCisJKG1pcHNlbC0qLWVjb2ZmKik6IE5ldyB0YXJnZXQuCisJKG1pcHMtKi1lY29mZiopOiBOZXcgdGFyZ2V0LgorCShtaXBzZWwtKi1lbGYqKTogTmV3IHRhcmdldC4KKwkobWlwcy0qLWVsZiopOiBOZXcgdGFyZ2V0LgorCShtaXBzNjRlbC0qLWVsZiopOiBOZXcgdGFyZ2V0LgorCShtaXBzNjRvcmlvbmVsLSotZWxmKik6IE5ldyB0YXJnZXQuCisJKG1pcHM2NC0qLWVsZiopOiBOZXcgdGFyZ2V0LgorCShtaXBzNjRvcmlvbi0qLWVsZiopOiBOZXcgdGFyZ2V0LgorCShzcGFyYy0qLWFvdXQqKTogTmV3IHRhcmdldC4KKwkoc3BhcmNsaXRlLSotY29mZiopOiBOZXcgdGFyZ2V0LgorCShzcGFyY2xpdGUtKi0qKTogU2V0IHRtYWtlX2ZpbGUgdG8gc3BhcmMvdC1zcGFyY2xpdGUuCisJKG1pcHMqLSotKik6IENoYW5nZWQgZnJvbSBtaXBzLSotKi4KKwkqIG9wdGFicy5jIChleHBhbmRfdW5vcCk6IFRyeSBzdWJ0cmFjdGlvbiBmcm9tIHplcm8gaWYgdGhlcmUgaXNuJ3QgYQorCW5lZ2F0ZSBsaWJyYXJ5IGZ1bmN0aW9uLgorCSogY29uZmlnL2dvZmFzdC5oOiBOZXcgZmlsZS4KKwkqIGEyOWsvYTI5ay11ZGkuaCwgYTI5ay90LWEyOWtiYXJlOiBOZXcgZmlsZXMuCisJKiBpMzg2L2kzODYtYW91dC5oLCBpMzg2L2kzODYtY29mZi5oLCBpMzg2L3QtaTM4NmJhcmU6IE5ldyBmaWxlcy4KKwkqIGkzODYvdnN0YS5oLCBpMzg2L3QtdnN0YSwgaTM4Ni94LXZzdGEsIGkzODYveG0tdnN0YS5oOiBOZXcgZmlsZXMuCisJKiBtNjhrL2NvZmYuaDogTmV3IGZpbGUgKHJlbmFtZWQgZnJvbSBtNjhrLWNvZmYuaCkuCisJKiBtNjhrL2x5bngtbmcuaCwgbTY4ay9seW54Lmg6IEluY2x1ZGUgaXQuCisJKiBtNjhrL2ZwZ251bGliLmMsIG02OGsvbGIxc2Y2OC5hc20sIG02OGsvbTY4a2VtYi5oOiBOZXcgZmlsZXMuCisJKiBtNjhrL202OGstYW91dC5oLCBtNjhrL202OGstY29mZi5oLCBtNjhrL202OGstbm9uZS5oOiBOZXcgZmlsZXMuCisJKiBtNjhrL3QtbTY4a2JhcmU6IE5ldyBmaWxlLgorCSogbTg4ay9tODhrLWFvdXQuaCwgbTg4ay9tODhrLWNvZmYuaCwgbTg4ay90LWJ1ZzogTmV3IGZpbGVzLgorCSogbWlwcy9lY29mZi1nZGIuaCwgbWlwcy9lY29mZi5oLCBtaXBzL2Vjb2ZmbC1nZGIuaDogTmV3IGZpbGVzLgorCSogbWlwcy9lY29mZmwuaCwgbWlwcy9lbGYuaCwgbWlwcy9lbGY2NC5oLCBtaXBzL2VsZmwuaDogTmV3IGZpbGVzLgorCSogbWlwcy9lbGZsNjQuaCwgbWlwcy9lbGZsb3Jpb24uaCwgbWlwcy9lbGZvcmlvbi5oOiBOZXcgZmlsZXMuCisJKiBtaXBzL3QtZWNvZmY6IE5ldyBmaWxlcy4KKwkqIHNwYXJjL2xiMXNwYy5hc20sIHNwYXJjL2xiMXNwbC5hc20sIHNwYXJjL2xpdGVjb2ZmLmg6IE5ldyBmaWxlcy4KKwkqIHNwYXJjL3NwYXJjLWFvdXQuaCwgc3BhcmMvdC1zcGFyY2JhcmUsIHNwYXJjL3Qtc3BhcmNsaXRlOiBOZXcgZmlsZXMuCisKK1RodSBOb3YgMTcgMTg6MzI6MjQgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHRpbnkuY3lnbnVzLmNvbSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBEbyAoeCAtICh4ICYgeSkpIC0+ICh4ICYgfnkpLgorCitUaHUgTm92IDE3IDE3OjI2OjAyIDE5OTQgIE1hcmsgUC4gR29vZGVydW0gIChtYXJrQGdvb2QuY29tKQorCisJKiBzdGRkZWYuaDogSW5jbHVkZSA8bWFjaGluZS9hbnNpLmg+IG9uIE5ldEJTRC4KKwlDaGVjayBmb3IgX0JTRF9YWFhfVF8gYXMgd2VsbCBhcyBfWFhYX1RfLgorCUFkZCBfQlNEX1hYWF9UXyB0byBsaXN0IG9mIGRlZmluZXMgdG8gY2hlY2sgYW5kIGRlZmluZSBmb3IgYSBnaXZlbgorCXR5cGUgZm9yIFNJWkVfVCwgUFRSRElGRl9ULCBhbmQgV0NIQVJfVC4KKworVGh1IE5vdiAxNyAxMToxMTo1MCAxOTk0ICBNaWtlIENvbGxpc29uICAoY29sbGlzb25Ac3cuc3RyYXR1cy5jb20pCisKKwkqIGRzcDE2eHguYyAobm90aWNlX3VwZGF0ZV9jYyk6IFJlbW92ZWQgcmVmZXJlbmNlIHRvIG9ic29sZXRlIExTSElGVC4KKwkqIGRzcDE2eHguaCAoUlRYX0NPU1RTKTogTGlrZXdpc2UuCisKK1RodSBOb3YgMTcgMTE6MDY6NDMgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAoc29tZV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGBzb21lX29wZXJhbmQnLgorCSogYWxwaGEubWQgKGFkZHNpMywgYWRkZGkzKTogRm9yIHBhdHRlcm5zIHZhbGlkIG9ubHkKKwlkdXJpbmcgcmVsb2FkLCBhbGxvdyBvcGVyYW5kIDEgdG8gYmUgYHNvbWVfb3BlcmFuZCcuCisKKwkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IEluc2VydCBtaXNzaW5nICJyZXR1cm4iIHN0YXRlbWVudC4KKworCSogYy1jb21tb24uYyAocHJpbnRfY2hhcl90YWJsZSk6IEFsbG93IGBMJyBmb3IgYHUnLgorCitUaHUgTm92IDE3IDEwOjE1OjUwIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnLnN1YjogQWNjZXB0IC1kb21haW4gYXMgT1MsIGFuZCBtYWtlIGl0IGRlZmF1bHQgZm9yIEFwb2xsby4KKworV2VkIE5vdiAxNiAxOToyODo0NiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20pCisKKwkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IEZvciBtb3ZlX2luc24gY2FzZSwgc2tpcCBub3RlcyB3aGVuIGRlbGV0aW5nCisJaW5zdHJ1Y3Rpb25zLgorCitXZWQgTm92IDE2IDE2OjEzOjQ4IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogYmktcnVuLmg6IEFsd2F5cyBjaGVjayBCSVRTX0JJR19FTkRJQU4sIEJZVEVTX0JJR19FTkRJQU4sIGFuZAorCVdPUkRTX0JJR19FTkRJQU4gYXQgcnVuIHRpbWUsIG5ldmVyIGF0IGNvbXBpbGUgdGltZS4KKwkqIGJ5dGVjb2RlLmgsIGNvbWJpbmUuYywgY3NlLmMsIGRieG91dC5jLCBkd2FyZm91dC5jOiBMaWtld2lzZS4KKwkqIGV4cG1lZC5jLCBleHByLmgsIGZpbmFsLmMsIGZvbGQtY29uc3QuYywgZnVuY3Rpb24uYzogTGlrZXdpc2UuCisJKiBqdW1wLmMsIG9iamMtYWN0LmMsIHJlYWwuYywgcmVhbC5oLCByZWNvZy5jLCByZWxvYWQuYzogTGlrZXdpc2UuCisJKiByZWxvYWQxLmMsIHNkYm91dC5jLCB0cmVlLmMsIHZhcmFzbS5jOiBMaWtld2lzZS4KKwkqIHJlYWwuYzogUmVwbGFjZSB1c2VzIG9mIE1JRUVFIGFuZCBJQk1QQyB3aXRoIGEgY29tcGlsZSB0aW1lCisJY2hlY2sgb2YgSUVFRSBhbmQgYSBydW50aW1lIGNoZWNrIG9mIEZMT0FUX1dPUkRTX0JJR19FTkRJQU4uCisJKiBsaWJnY2MuMiAoTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOKTogSWYgbm90IGRlZmluZWQsIGRlZmluZSB0bworCVdPUkRTX0JJR19FTkRJQU4uICBVc2UgaXQgaW5zdGVhZCBvZiBXT1JEU19CSUdfRU5ESUFOLgorCSogbWlwcy10ZmlsZS5jIChpbml0X2ZpbGUpOiBJbml0aWFsaXplIGZCaWdlbmRpYW4gZmllbGQgYmFzZWQgb24KKwlIT1NUX1dPUkRTX0JJR19FTkRJQU4sIG5vdCBCWVRFU19CSUdfRU5ESUFOLgorCSogY29uZmlnL21pcHMvbWlwcy5oIChNQVNLX0JJR19FTkRJQU4pOiBEZWZpbmUsIHJlcGxhY2luZworCU1BU0tfVU5VU0VENC4KKwkoVEFSR0VUX0JJR19FTkRJQU4pOiBEZWZpbmUuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBlYiBhbmQgZWwuICBJbmNsdWRlIFRBUkdFVF9FTkRJQU5fREVGQVVMVAorCWluIGRlZmF1bHQgdmFsdWUuCisJKFRBUkdFVF9FTkRJQU5fREVGQVVMVCk6IERlZmluZSBpZiBub3QgZGVmaW5lZCwgYmFzZWQgb24KKwlERUNTVEFUSU9OLgorCShDQzFfU1BFQyk6IENvbnZlcnQgLUVCIHRvIC1tZWIsIGNvbnZlcnQgLUVMIHRvIC1tZWwsIGFuZCB3YXJuIGlmCisJLUVCIGFuZCAtRUwgYXJlIGJvdGggdXNlZC4KKwkoQ1BQX1NQRUMpOiBJZiAtRUIgaXMgc2VlbiwgdW5kZWZpbmUgTUlQU0VMLCBfTUlQU0VMLCBfX01JUFNFTCBhbmQKKwlfX01JUFNFTF9fLCBhbmQgZGVmaW5lIF9NSVBTRUIsIF9fTUlQU0VCLCBfX01JUFNFQl9fIGFuZCBNSVBTRUIKKwkodGhlIGxhc3Qgb25seSBpZiAtYW5zaSB3YXMgbm90IHNlZW4pLiAgU2ltaWxhcmx5IGlmIC1FTCBpcyBzZWVuLgorCShSRUFMX0FSSVRITUVUSUMpOiBEZWZpbmUuCisJKEJZVEVTX0JJR19FTkRJQU4sIFdPUkRTX0JJR19FTkRJQU4pOiBCYXNlIG9uIFRBUkdFVF9CSUdfRU5ESUFOLgorCShMSUJHQ0MyX1dPUkRTX0JJR19FTkRJQU4pOiBEZWZpbmUuCisJKENPTlNUX0NPU1RTKTogVXNlIHNwbGl0X2RvdWJsZSBpbiBDT05TVF9ET1VCTEUgY2FzZS4KKwkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19tb3ZlXzJ3b3Jkcyk6IFVzZSBzcGxpdF9kb3VibGUgcmF0aGVyCisJdGhhbiBDT05TVF9ET1VCTEVfTE9XIGFuZCBDT05TVF9ET1VCTEVfSElHSC4KKwkob3V0cHV0X2Jsb2NrX21vdmUpOiBDaGVjayBCWVRFU19CSUdfRU5ESUFOIGF0IHJ1biB0aW1lLCBub3QKKwljb21waWxlIHRpbWUuCisJKHByaW50X29wZXJhbmQpOiBDaGVjayBXT1JEU19CSUdfRU5ESUFOLCByYXRoZXIgdGhhbiB1c2luZworCU1PU1RfU0lHTklGSUNBTlRfV09SRCBhbmQgTEVBU1RfU0lHTklGSUNBTlRfV09SRC4KKwkqIGNvbmZpZy9taXBzL3QtbWlwcyAoTVVMVElMSUJfT1BUSU9OUywgTVVMVElMSUJfRElSTkFNRVMsCisJTVVMVElMSUJfTUFUQ0hFUywgTElCR0NDLCBJTlNUQUxMX0xJQkdDQyk6IERlZmluZSB0byBidWlsZCBib3RoCisJYmlnIGFuZCBsaXR0bGUgZW5kaWFuIHZlcnNpb25zIG9mIGxpYmdjYy5hLgorCSogY29uZmlnL21pcHMvdC1taXBzLWdhczogTElrZXdpc2UuCisJKiBjb25maWcvbWlwcy9kZWMtYnNkLmggKENQUF9TUEVDKTogU2FtZSBjaGFuZ2UgYXMgaW4gbWlwcy5oLgorCSogY29uZmlnL21pcHMvZGVjLW9zZjEuaCAoQ1BQX1NQRUMpOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9taXBzL2lyaXMzLmggKENQUF9TUEVDKTogTGlrZXdpc2UuCisJKiBjb25maWcvbWlwcy9pcmlzNS5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCSogY29uZmlnL21pcHMvb3Nmcm9zZS5oIChDUFBfU1BFQyk6IExpa2V3aXNlLgorCShDQzFfU1BFQyk6IFNhbWUgY2hhbmdlIGFzIGluIG1pcHMuaC4KKworV2VkIE5vdiAxNiAxNjowNDoyMSAxOTk0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jIChyZXNjYW4pOiBSZW1vdmUgdW5uZWNlc3NhcnkgY29tcGFyaXNvbnMgb2YgaWJwIHRvIGxpbWl0LgorCitXZWQgTm92IDE2IDA3OjQ4OjE3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IEhhbmRsZSBjYXNlIG9mIHNpbmdsZSBTRVQKKwliZXR3ZWVuIGEgaGFyZCByZWdpc3RlciBhbG9uZSBpbiBhIGNsYXNzIGFuZCBhIHBzZXVkby4KKworCSogdHJlZS5jIChpbnRlZ2VyX3t6ZXJvLG9uZSxhbGxfb25lcyxwb3cyfXApOiBIYW5kbGUgQ09NUExFWF9DU1QuCisJKHJlYWxfe3plcm8sb25lLHR3b31wKTogTGlrZXdpc2UuCisKKwkqIGdjYy5jIChtYWluKTogRm9yIC1WIG91dHB1dCwgZ2l2ZSBib3RoIGRyaXZlciBhbmQgY29tcGlsZXIKKwl2ZXJzaW9ucywgaWYgdGhleSBkaWZmZXIuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQWx3YXlzIHJlcnVuIGp1bXBfb3B0aW1pemUKKwlhZnRlciBDU0UgaWYgLU8yLgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBJZiBtb3ZlZCBjb252ZXJzaW9uIGludG8gQ09ORF9FWFBSLAorCWxlYXZlIGl0IHRoZXJlIGlmIGl0IGlzIGFuIGludGVncmFsIGNvbnZlcnNpb24gdG8gd29yZCBvciBuYXJyb3dlci4KKwkoZm9sZCwgY2FzZSBOT1BfRVhQUik6IElnbm9yZSBjb252ZXJzaW9uIHRvIHNhbWUgdHlwZSBhcyBvcGVyYW5kLgorCShmb2xkLCBjYXNlIENPTkRfRVhQUik6IE1ha2UgdGhpcmQgb3BlcmFuZCB0aGUgc2ltcGxlc3QuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogRG9uJ3QgcHV0IEZST00gaW4gYSByZWdpc3RlciBpZiBpdAorCWlzIGEgU1VCUkVHLgorCShzdG9yZV9leHByKTogSWYgZG9uJ3Qgd2FudCBhIHZhbHVlIGFuZCBzdG9yaW5nIGludG8gcHJvbW90ZWQKKwl2YXJpYWJsZSwgZG8gY29udmVyc2lvbiBhdCB0cmVlIGxldmVsOyBkb24ndCBjb3B5IHZvbGF0aWxlIE1FTQorCXVubGVzcyB3YW50IHZhbHVlLCBhcyBjb21tZW50IHNheXMuCisKK1R1ZSBOb3YgMTUgMjA6MDI6MzQgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiB2YXJhc20uYyAobmFtZWRfc2VjdGlvbik6IE5ldyBhcmd1bWVudCBkZWNsLCBhbGwgY2FsbGVycyBjaGFuZ2VkLgorCSogaDgzMDAvaDgzMDAuaCwgc2gvc2guaCwgc3BhcmMvc3lzdjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOgorCU5ldyBhcmcgREVDTC4KKworTW9uIE5vdiAxNCAxNTowNzoxOSAxOTk0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KKworICAgICAgICAqIHRyZWUuaCAoUE9JTlRFUl9UWVBFX1ApOiBOZXcgbWFjcm8uCisgICAgICAgICogbTY4ay9tNjhrdjQuaCwgbTY4ay9tb3QzMzAwLmggKEZVTkNUSU9OX1ZBTFVFKTogVXNlCisgICAgICAgIFBPSU5URVJfVFlQRV9QIHJhdGhlciB0aGFuIGNoZWNraW5nIHRoZSB0eXBlIGFnYWluc3QKKyAgICAgICAgUE9JTlRFUl9UWVBFICh0byBpbmNsdWRlIHJlZmVyZW5jZXMpLgorICAgICAgICAqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBEaXR0by4KKworICAgICAgICAqIGFscGhhL2FscGhhLmggKEZVTkNUSU9OX1ZBTFVFKTogVXNlIElOVEVHUkFMX01PREVfUCByYXRoZXIgdGhhbgorICAgICAgICBjaGVja2luZyB0aGUgdHlwZSBhZ2FpbnN0IHZhcmlvdXMgaW50ZWdyYWwgYW5kIHBvaW50ZXIgdHlwZXMuCisKKyAgICAgICAgKiBtNjhrL3szYjEsM2IxZyxjcmRzLG1vdDMzMDB9Lmg6IERvbid0IGRlZmluZSBfX1BUUl9UT19JTlQgYW5kCisgICAgICAgIF9fSU5UX1RPX1BUUi4KKyAgICAgICAgKiBtNjhrL3htLXszYjEsY3Jkcyxtb3QzMzAwfS5oOiBEZWZpbmUgX19QVFJfVE9fSU5UIGFuZCBfX0lOVF9UT19QVFIuCisKK1R1ZSBOb3YgMTUgMTk6Mjk6MDQgMTk5NCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CisKKwkqIHRyZWUuYyAoc3RhdGljcCk6ICBBIG5vbi1uZXN0ZWQgZnVuY3Rpb24gaXMgYWx3YXlzIHN0YXRpYy4KKworVHVlIE5vdiAxNSAxOToxMjowMyAxOTk0ICBKaW0gTWV5ZXJpbmcgIChtZXllcmluZ0Bjb21jby5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzcGVjcywgZmxvYXQuaC1jcm9zcywgeGxpbWl0cy5oKTogVXNlIHRlbXBvcmFyeSBpbnN0ZWFkCisJb2YgcmVkaXJlY3Rpbmcgb3V0cHV0IGRpcmVjdGx5IHRvIG1ha2UgdGFyZ2V0LgorCSgkKE1EX0ZJTEUpLCB4c3lzLXByb3Rvcy5oKTogTGlrZXdpc2UuCisJKG1vc3RseWNsZWFuKTogUmVtb3ZlIGFueSBvZiB0aGVzZSB0ZW1wb3Jhcmllcy4KKwkobGliZ2NjMi5hKTogQWRkIG1pc3Npbmcgc2VtaWNvbG9uIGluIGNvbW1lbnRlZCBjb2RlIHRoYXQgY291bGQgY2F1c2UKKwlhIC9iaW4vc2ggc3ludGF4IGVycm9yIGlmIHVuY29tbWVudGVkLgorCitUdWUgTm92IDE1IDE5OjA3OjAwIDE5OTQgIFdhcm5lciBMb3NoICAoaW1wQHZpbGxhZ2Uub3JnKQorICAKKyAgICAgICAgKiBpMzg2L2ZyZWVic2QuaCAoTk9fSU1QTElDSVRfRVhURVJOX0MpOiBEZWZpbmUuCisKK1R1ZSBOb3YgMTUgMTk6MDA6NTUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogcmVvcmcuYyAocmVkdW5kYW50X2luc24pOiBSZW5hbWVkIGZyb20gcmVkdW5kYW50X2luc25fcDsgYWxsCisgICAgICAgIGNhbGxlcnMgY2hhbmdlZC4KKworVHVlIE5vdiAxNSAxODo1Nzo0NiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20pCisKKwkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogV2hlbiBpbnZlcnQgYSBjb25kaXRpb25hbCBqdW1wIG92ZXIgYQorCXNpbmdsZSB1bmNvbmRpdGlvbmFsIGp1bXAsIGludmVydCB0aGUgSU5TTl9GUk9NX1RBUkdFVF9QIGJpdCBvZiBpbnNucworCWluIHRoZSBkZWxheSBzbG90cy4KKworCSogcmVvcmcuYyAocmVkdW5kYW50X2luc25fcCk6IENoYW5nZSByZXR1cm4gdHlwZSB0byBydHguICBSZXR1cm4gdGhlCisJcmVkdW5kYW50IGluc24gaW5zdGVhZCBvZiB0cnVlLgorCSh1cGRhdGVfcmVnX3VudXNlZF9ub3Rlcyk6IE5ldyBmdW5jdGlvbi4KKwkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IENhbGwgdXBkYXRlX3JlZ191bnVzZWRfbm90ZXMgYWZ0ZXIgb25lIG9mCisJdGhlIHJlZHVuZGFudF9pbnNuX3AgY2FsbHMuCisKK1R1ZSBOb3YgMTUgMTg6Mzk6MzMgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHRpbnkuY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QsIGNhc2UgUk9VTkRfRElWX0VYUFIpOiBJbXBsZW1lbnQuCisJKiBleHByLmMgKGRvX2p1bXBfYnlfcGFydHNfZ3JlYXRlcl9ydHgpOiBObyBsb25nZXIgc3RhdGljLgorCShleHBhbmRfZXhwcik6IERlbGV0ZSBjb2RlIGZvciBwbGFpbiBgYWJzJy4KKwkqIG9wdGFicy5jIChleHBhbmRfYWJzKTogTmV3IGZ1bmN0aW9uLCBjb2RlIG1vdmVkIGZyb20gZXhwYW5kX2V4cHIuCisJKiBleHByLmg6IERlY2xhcmUgZXhwYW5kX2Ficy4KKworVHVlIE5vdiAxNSAxMjoxMToyNiAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5jIChvdXRwdXRfY2JyYW5jaCk6IEltcHJvdmUgY29kZSBmb3Igc2hvcnQgYmFja3dhcmRzIGJyYW5jaAorCXdpdGggYW4gdW5maWxsZWQgZGVsYXkgc2xvdC4KKwkob3V0cHV0X2JiLCBvdXRwdXRfZGJyYSwgb3V0cHV0X21vdmIpOiBMaWtld2lzZS4KKworVHVlIE5vdiAxNSAwOTo1NTozMSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBEZWxldGUgbGFiZWxzIGluIEFERFJfVkVDcyBhbmQKKwlBRERSX0RJRkZfVkVDcyBpZiB0aGVpciB1c2UgY291bnQgYmVjb21lcyB6ZXJvLgorCSogZmxvdy5jIChmbG93X2RlbGV0ZV9pbnNuKTogTmV3IGZ1bmN0aW9uLgorCShmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENhbGwgaXQgdG8gcGh5c2ljYWxseSBkZWxldGUgaW5zbnMgaW4KKwl1bnJlYWNoYWJsZSBibG9ja3MuICBXaGVuIHNjYW5uaW5nIGJsb2NrcyBhZnRlciBkZWFkIG9uZXMsCisJc3RhcnQgc2Nhbm5pbmcgYWZ0ZXIgdGhlIGRlYWQgb25lIChub3QgYXQgdGhlIGRlYWQgb25lKS4KKwlJZiB0aGVyZSBhcmUgbG90cyBvZiB1bnJlYWNoYWJsZSBibG9ja3MsIG1ha2UgYW5vdGhlciBwYXNzIHRvIHNxdWVlemUKKwl0aGVtIG91dCAodGhpcyByZWR1Y2VzIG1lbW9yeSB1c2FnZSBpbiBzb21lIHBhdGhhbG9naWNhbCBjYXNlcyBieSBhCisJc2lnbmlmaWNhbnQgYW1vdW50IHdpdGhvdXQgcmVzb3J0aW5nIHRvIHNwYXJzZSBtYXRyaWNlcykuCisJKHByb3BhZ2F0ZV9ibG9jayk6IE1ha2UgY29kZSBhIGJpdCBtb3JlIGVmZmljaWVudCAoZm9yIGV4YW1wbGUsCisJbm8gbmVlZCB0byB0ZXN0IGBsb29wX2RlcHRoJyBmb3IgZWFjaCBpbnNuLCBqdXN0IG5vdGVzKS4KKworVHVlIE5vdiAxNSAwOTo0MjozMSAxOTk0ICBMeW5uIFNodW1ha2VyICAoc2h1bWFrZXJAc2FpZnIwMC5hdGVuZy5hei5ob25leXdlbGwuY29tKQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcCk6IENvbXB1dGUgc2l6ZSBvZiBzbG90IGFmdGVyCisJYXNzaWduX3N0YWNrX2xvY2FsIGhhcyBhY2NvdW50ZWQgZm9yIGFsaWdubWVudC4KKworTW9uIE5vdiAxNCAyMzo0NzoyMCAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAdGlueS5jeWdudXMuY29tKQorCisJKiBwYS5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBbGxvdworCShsb19zdW0gKHJlZykgKHVuc3BlYyAoc3ltcmVmKSkpLgorCisJKiBwYS5tZCAocGljMl9sb19zdW0pOiBOZXcgcGF0dGVybiBtYXRjaGluZyB3aGVuIC1mUElDIHVzaW5nIFVOU1BFQy4KKwkqIHBhLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBHZW5lcmF0ZSBhbiBpbnNuIG1hdGNoaW5nCisJcGljMl9sb19zdW0gd2hlbiAtZlBJQy4KKworCSogcGEubWQgKHBpY19oaWdocGFydCk6IEFkZCBtaXNzaW5nIG1vZGUgZm9yIFBMVVMuCisJKGFkZF9oaWdoX2NvbnN0KTogTGlrZXdpc2UuCisKKwkqIHBhLm1kIChtYXRjaGVyIGZvciBwbGFpbiBsb19zdW0pOiBDYWxsIGFib3J0IGlmIHRoaXMgaGFwcGVucworCXdoZW4gZ2VuZXJhdGluZyBwaWMgb3IgUElDLgorCitNb24gTm92IDE0IDIzOjQ3OjIwIDE5OTQgIEplZmZyZXkgQS4gTGF3ICAoc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIEF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIGlubGluZSBsb25nIGNhbGwgc2VxdWVuY2VzIHdoZW4gbmVlZGVkLgorCSogcGEuaCAoVEFSR0VUX0xPTkdfQ0FMTFMpOiBEZWxldGUuICBSZXBsYWNlIGFsbCB1c2VzIG9mIHdpdGgKKwlUQVJHRVRfUE9SVEFCTEVfUlVOVElNRS4KKwkoVEFSR0VUX01JTExJQ09ERV9MT05HX0NBTExTKTogTmV3IHRhcmdldCBmbGFnLgorCSogcGEuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogS2VlcCB0cmFjayBvZiB0aGUgdG90YWwgbnVtYmVyCisJb2YgY29kZSBieXRlcyBlbWl0dGVkIGZvciBlYWNoIHNvdXJjZSBmaWxlLgorCShvdXRwdXRfY2FsbCk6IEhhbmRsZSBUQVJHRVRfUE9SVEFCTEVfUlVOVElNRSBhbmQgbWlsbGljb2RlIGNhbGxzCisJZm9yIFRBUkdFVF9NSUxMSUNPREVfTE9OR19DQUxMUy4gIEVtaXQgYW4gaW5saW5lIGxvbmctY2FsbCBpZgorCW5lZWRlZC4gIElmIGVtaXR0aW5nIGFuIGlubGluZSBsb25nLWNhbGwsIHBlcmZvcm0gYXJndW1lbnQgcmVsb2NhdGlvbnMKKwliZWZvcmUgdGhlIGNhbGwgaWYgdGhleSBhcmUgbmVlZGVkLCB1bmZpbGwgdGhlIGRlbGF5IHNsb3Qgb2YgdGhlCisJY2FsbCBpZiBuZWNlc3NhcnkuCisJKiBwYS5tZCAoZGVmaW5lX2RlbGF5IGZvciBtaWxsaWNvZGUpOiBEaXNhYmxlIHRoZSBkZWxheSBzbG90IGlmCisJVEFSR0VUX01JTExJQ09ERV9MT05HX0NBTExTLgorCShtaWxsaWNvZGUgaW5zbnMgYW5kIGluZGlyZWN0IGNhbGxzKTogUHJvcGVybHkgY29tcHV0ZSBsZW5ndGggZm9yIAorCWJvdGggVEFSR0VUX1BPUlRBQkxFX1JVTlRJTUUgYW5kIFRBUkdFVF9NSUxMSUNPREVfTE9OR19DQUxMUy4KKwkoY2FsbF9pbnRlcm5hbF9zeW1yZWYpOiBQcm9wZXJseSBjb21wdXRlIHRoZSBsZW5ndGggd2hlbiBtb3JlCisJdGhhbiAyNDAwMDAgYnl0ZXMgb2YgY29kZSBoYXZlIGFscmVhZHkgYmVlbiBvdXRwdXQuICBUYWtlIAorCVRBUkdFVF9NSUxMSUNPREVfTE9OR19DQUxMUyBpbnRvIGFjY291bnQgaW4gdGhlIGxlbmd0aAorCWNvbXB1dGF0aW9uLgorCisJKiBwYS5oIChEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogRGVmaW5lLgorCShBU01fRklMRV9FTkQpOiBEZWxldGUgdW5uZWVkZWQgZGVmaW5pdGlvbi4KKworCSogRmFzdCBpbmRpcmVjdCBjYWxsIHN1cHBvcnQuCisJKiBwYS5oIChUQVJHRVRfRkFTVF9JTkRJUkVDVF9DQUxMUyk6IE5ldyB0YXJnZXQgc3dpdGNoLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgImZhc3QtaW5kaXJlY3QtY2FsbHMiIGFuZCBpbnZlcnNlLgorCSogcGEubWQgKGNhbGxfaW50ZXJuYWxfcmVnLCBjYWxsX3ZhbHVlX2ludGVybmFsX3JlZyk6IEdlbmVyYXRlCisJYXBwcm9wcmlhdGUgY29kZSBmb3IgVEFSR0VUX0ZBU1RfSU5ESVJFQ1RfQ0FMTFMuCisJCQkgIAorCSogUEEgUElDIHN1cHBvcnQuCisJKiBwYS5jIChzZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogUmVmaW5lLiAgUmVhZG9ubHkgZGF0YSBuZWVkcyBhCisJc2Vjb25kYXJ5IHJlbG9hZCBvbmx5IGR1cmluZyBQSUMgZ2VuZXJhdGlvbi4gIExvYWRpbmcgYSBmbG9hdGluZworCXBvaW50IHJlZ2lzdGVyIHdpdGggYSBjb25zdGFudCByZXF1aXJlcyBhIHJlZ2lzdGVyIGZyb20gUjFfUkVHUworCWR1cmluZyAtZlBJQyBjb2RlIGdlbmVyYXRpb24uCisJKHJlYWRfb25seV9vcGVyYW5kKTogQ29uc3RhbnQgcG9vbCBlbnRyaWVzIGFyZSBubyBsb25nZXIgcmVhZCBvbmx5CisJZHVyaW5nIFBJQyBjb2RlIGdlbmVyYXRpb24uCisJKGhwcGFfbGVnaXRpbWl6ZV9hZGRyZXNzKTogSWYgZmxhZ19waWMgaXMgbm9uemVybywgdGhlbgorCWltbWVkaWF0ZWx5IGNhbGwgbGVnaXRpbWl6ZV9waWNfYWRkcmVzcy4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogQ2FsbCBsZWdpdGltaXplX3BpY19hZGRyZXNzIHRvIGhhbmRsZQorCWNvbnN0YW50IGRhdGEuICBIYW5kbGUgc2Vjb25kYXJ5IHJlbG9hZHMgZm9yIFBJQy4gIFVzZQorCXBpY19sYWJlbF9vcGVyYW5kIHJhdGhlciB0aGFuIG9wZW4gY29kaW5nIHRoZSB0ZXN0LiAgSGFuZGxlCisJbG9hZGluZyBhIExBQkVMX1JFRiB3aGVuIGdlbmVyYXRpbmcgUElDLgorCShsZWdpdGltemllX3BpY19hZGRyZXNzKTogSGFuZGxlIGNvbnN0YW50IGRhdGEgYWRkcmVzc2luZyBmb3IgUElDCisJaGVyZS4gICBGaXggbG9hZGluZyBvZiBzeW1ib2xpYyBhZGRyZXNzZXMgZm9yIC1mUElDIGdlbmVyYXRpb24uCisJKHBpY19sYWJlbF9vcGVyYW5kKTogUmVuYW1lZCBmcm9tIHBpY19vcGVyYW5kLiAgSGFuZGxlIGFueSByZWFkCisJb25seSBvcGVyYW5kIChzdWNoIGFzIGNvbnN0YW50IGRhdGEpLiAgUmVqZWN0IGZ1bmN0aW9uIGFkZHJlc3NlcywKKwlBY2NlcHQgU1lNQk9MX1JFRiB3aXRoIHRoZSByZWFkLW9ubHkgYml0IHNldC4gIEdlbmVyYWxpemUgdG8KKwloYW5kbGUgKGNvbnN0IChwbHVzIChyZWcpIChpbnQpKSkuCisJKGZpbmFsaXplX3BpYyk6IERlbGV0ZSB1bnVzZWQgZnVuY3Rpb24uCisJKGNoZWNrX3BpYyk6IERlbGV0ZSBmdW5jdGlvbi4KKwkocGljX3BjX3J0eCk6IERlbGV0ZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorCShjdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZSk6IERlbGV0ZSBleHRlcm4gZGVjbC4KKwkoZm9yY2VfcmVnLCB2YWxpZGl6ZV9tZW0pOiBMaWtld2lzZS4KKyAgICAgICAgKG91dHB1dF9nbG9iYWxfYWRkcmVzcyk6IERvbid0IHRhY2sgb24gIi0kZ2xvYmFsJCIgd2hlbiBnZW5lcmF0aW5nCisgICAgICAgIFBJQyBjb2RlLgorCShmaW5hbGl6ZV9waWMpOiBEb24ndCBlbWl0IGNvZGUgZm9yIGluaXRpYWxpemF0aW9uIG9mIAorCWhwcGFfc2F2ZV9waWNfdGFibGVfcnR4IGhlcmUuICBEb24ndCBjbGFpbSB3ZSBVU0UKKwlwaWNfb2Zmc2V0X3RhYmxlX3J0eCBhdCBmdW5jdGlvbiBlbmQuCisJKiBwYS5oIChTRUxFQ1RfUlRYX1NFQ1RJT04pOiBEZWZpbmUuICBEdXJpbmcgUElDIGdlbmVyYXRpb24KKwlldmVyeXRoaW5nIChpbiB0aGUgY29uc3RhbnQgcG9vbCkgZ29lcyBpbnRvIHRoZSBkYXRhIHNwYWNlLgorCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBIYW5kbGUgQ09OU1RfSU5UcyBkdXJpbmcgUElDCisJZ2VuZXJhdGlvbi4gIEhhbmRsZSBMT19TVU0gYWRkcmVzcyBkdXJpbmcgLWZQSUMgZ2VuZXJhdGlvbi4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUmVqZWN0IGZ1bmN0aW9uIGxhYmVscyB3aGVuIGdlbmVyYXRpbmcKKwlQSUMgY29kZS4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogT25seSBhY2NlcHQgcGljX3JlZyArIFNZTUJPTF9SRUYgZm9yCisJLWZwaWMuCisJKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogRm9yIC1mcGljLCB1c2UgdGhlIFRFWFQgc2VjdGlvbiBmb3IKKwljb25zdGFudHMgdG8gYXZvaWQgR0FTIGxvc3NhZ2UuCisJKE9WRVJSSURFX09QVElPTlMpOiBEZWxldGUuCisJKFBJQ19PRkZTRVRfVEFCTEVfUkVHX0NBTExfQ0xPQkJFUkVEKTogRGVmaW5lLgorCShGSU5BTElaRV9QSUMpOiBEZWxldGUgZGVmaW5pdGlvbi4KKwkoSU5JVF9FWFBBTkRFUlMpOiBEZWZpbmUuICBDbGVhciBocHBhX3NhdmVfcGljX3RhYmxlX3J0eCBoZXJlLgorCSogcGEubWQ6IFVzZSAhZmxhZ19waWMgcmF0aGVyIHRoYW4gY2FsbGluZyBjaGVja19waWMuCisJKEhJbW9kZSBoaWdoIGFuZCBsb19zdW0pOiBPbmx5IGFjY2VwdCBjb25zdF9pbnRfb3BlcmFuZHMuCisJKHBpY19sb2FkX2xhYmVsKTogRm9yY2Ugb3V0cHV0IHRvIGJlIGluICVyMS4gCisJKHBpY19oaWdocGFydCk6IE5ldyBwYXR0ZXJuLiAgT3V0cHV0IG11c3QgZ28gaW50byAlcjEuICBNb3JlCisJbGlua2VyIHRyaWNrZXJ5LgorCShzeW1ib2xpYyBoaWdoIGFuZCBsb19zdW0pOiBEaXNhbGxvdyBkdXJpbmcgUElDCWdlbmVyYXRpb24gaWYKKwlzb3VyY2UgaXMgYSBzeW1ib2xpYyBvcGVyYW5kLiAgSGFuZGxlIENPTlNUX0lOVCBMT19TVU0gZHVyaW5nIFBJQworCWdlbmVyYXRpb24uICBTaW1wbGlmeS4KKwkoZGVmaW5lX3NwbGl0IGZvciBzeW1ib2xpY19vcGVyYW5kIGxvYWQpOiBEbyBub3QgYWNjZXB0IGEgc3ltYm9saWMKKwlvcGVyYW5kIHRoYXQgaXMgYSBwaWNfbGFiZWxfb3BlcmFuZC4KKwkocGljX2xvYWRfbGFiZWwpOiBOYW1lIHRoaXMgcGF0dGVybi4gIE1hc2sgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cworCWFuZCBvcHRpbWl6ZSB3aGVuIGEgc2ltcGxlIGxhYmVsIGlzIHdpdGhpbiByZWFjaCBvZiBhbiBsZG8uCisJKGNhbGwsIGNhbGxfdmFsdWUpOiBFbWl0IG5ldy1zdHlsZSBVU0UgaW5mb3JtYXRpb24gZm9yCisJcGljX29mZnNldF90YWJsZV9ydHguICBFbWl0IGNvZGUgZm9yIGluaXRpYWxpemF0aW9uIG9mCisJaHBwYV9zYXZlX3BpY190YWJsZV9ydHggYW5kIHdyYXAgaXQgaW50byBwdXNoX3RvcG1vc3Rfc2VxdWVuY2UoKQorCWFuZCBwb3BfdG9wbW9zdF9zZXF1ZW5jZSgpIGNhbGxzLiAKKworCSogVmFyaW91cyBQQSBjb25maWd1cmF0aW9uIGNsZWFudXBzLiAgCisJKiBjb25maWd1cmUgKGhwcGEqLSotaFtwaV11eCk6IFVzZSB4bS1wYWhwdXguaCBhbmQgeC1wYS1ocHV4IGluc3RlYWQKKwlvZiB0aGUgcmVkdW5kYW50IGhpdXggZmlsZXMuICBMaWtld2lzZSBmb3IgdC1wYSBpbnN0ZWFkIG9mIHQtcGEtaHB1eC4KKwkqIGNvbmZpZy9wYS94bS1wYWhpdXguaDogRGVsZXRlLiAgSXQncyBpZGVudGljYWwgdG8geG0tcGFocHV4LmguCisJKiBjb25maWcvcGEveC1wYS1oaXV4OiBEZWxldGUuICBJdCdzIGlkZW50aWFsIHRvIHgtcGEtaHB1eC4KKwkqIGNvbmZpZy9wYS94LXBhIChUQVJPVVRPUFRTKTogRGVsZXRlLiAgSXQgd2FzIGFuIEhQVVggaG9zdAorCWNvbmRpdGlvbmFsLCBhbmQgeC1wYSBpcyBhIEJTRCBob3N0IHRhcmdldCBmcmFnbWVudC4KKwkoSU5TVEFMTF9IRUFERVJTKTogRGVmaW5lLgorCShTVE1QX0ZJWFBST1RPKTogRGVmaW5lLgorCSogY29uZmlnL3BhL3QtcGEgKElOU1RBTExFRF9IKTogRGVsZXRlLgorCSogY29uZmlnL3BhL3QtcGEtaHB1eDogRGVsZXRlLCBpdCdzIGlkZW50aWNhbCB0byB0LXBhLgorCSogY29uZmlnL3BhL3BhLWhpdXguaDogSW5jbHVkZSAicGEvcGEtaHB1eC5oIiBhbmQganVzdCBvdmVycmlkZQorCXRoZSBDUFAgcHJlZGVmaW5lcy4KKwkoQ1BQX1BSRURFRklORVMpOiBBZGQgLUEgYXNzZXJ0aW9ucy4KKwkqIGNvbmZpZy9wYS97cGExLWhpdXguaCwgcGEtZ2hpdXguaCwgcGExLWdoaXV4Lmh9OiBMaWtld2lzZS4KKwkqIGNvbmZpZy9wYS9wYS1naHB1eC5oOiBTaW1wbGlmeSBieSBpbmNsdWRpbmcgcGEtaHB1eC5oLgorCShEQlhfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCisJKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMpOiBEZWZpbmUuCisKK01vbiBOb3YgMTQgMTk6MTY6MDAgMTk5NCAgRGVubmlzIEdsYXR0aW5nICA8d2FyMDQhZGVubmlzZ0BrZXJieS5vY3NnLmNvbT4KKworCSogZml4aW5jbHVkZXM6IEZpeGVzIGZvciBOZXh0U3RlcCAzLjIuICBSZW1vdmUgYGBfX2NvbnN0X18nJyBmcm9tCisJc2luIGFuZCBjb3MgcHJvdG90eXBlcyBpbiBhbnNpL21hdGguaC4gIFJlbW92ZSBrZXl3b3JkIGBgdGVtcGxhdGUnJworCWZyb20gYmZkL2xpYmMuaC4gIFJlbW92ZSBgYHZvbGF0aWxlJycgZnJvbSBhYm9ydCBpbiBic2QvbGliYy5oCisJYW5kIGFib3J0IGFuZCBleGl0IGluIGFuc2kvc3RkbGliLmguCisKK01vbiBOb3YgMTQgMTg6NTQ6MjggMTk5NCAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIGkzODYveC13aW5udCAoRVhUUkFfUFJPR1JBTSk6IE1hdGNoIHRhcmdldCBuYW1lLgorCitNb24gTm92IDE0IDE4OjQ4OjIxIDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUB0aW55LmN5Z251cy5jb20pCisKKwkqIGZyZWVic2QuaCAoSU5DTFVERV9ERUZBVUxUUyk6IE1vdmUgZGVmaW5pdGlvbiBiZXlvbmQKKwlGUkVFQlNEX05BVElWRSBjb25kaXRpb25hbC4KKwkoRlVOQ1RJT05fUFJPRklMRVIpOiBNb3ZlIGRvd24gdG8gbWFrZSBmaWxlIG1vcmUgc2ltaWxhciB0bworCW5ldGJzZC1pMzg2LmguCisJKERFRkFVTFRfVEFSR0VUX01BQ0hJTkUsIGV0Yyk6IENvbW1lbnQgb3VyIHRoaXMgYnJhaW5kYW1hZ2UhCisKK01vbiBOb3YgMTQgMTg6NDY6MTggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBJZiBJU19DT05TVCBhbmQgVkFMUkVHID09IDAsIGVuZCBvdXIKKwlzZXF1ZW5jZSBhbmQgZW1pdCB0aGUgaW5zbnMuCisKK1NhdCBOb3YgMTIgMDY6MzU6NDIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogVmVyc2lvbiAyLjYuMiByZWxlYXNlZC4KKworU2F0IE5vdiAxMiAwNjozNToyMSAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QsIGNhc2UgVFJVTkNfRElWX0VYUFIpOiBQcm9tb3RlIHNpZ25lZAorCWRpdmlzaW9uIGJ5IDB4ODAwMDAwMDAgdG8gdW5zaWduZWQuCisKK0ZyaSBOb3YgMTEgMTc6MDc6MzUgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IEFkZCBkb3VibGUtdW5kZXJzY29yZSB2ZXJzaW9uIG9mCisJcHJpbnRmIGFuZCBzY2FuZiBmb3IgZm9ybWF0IHR5cGUuCisKK0ZyaSBOb3YgMTEgMTY6Mzg6MDQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tKQorCisJKiBtaXBzLXRkdW1wLmM6IEluY2x1ZGUgPHRpbWUuaD4uICBEZWxldGUgY3RpbWUgcHJvdG90eXBlLgorCitGcmkgTm92IDExIDE0OjE2OjAwIDE5OTQgIEhvbGdlciBUZXV0c2NoICA8aG9sZ2VyQGhvdGJzby5yaGVpbi1tYWluLmRlPgorCisJKiBjbGlwcGVyLm1kIChtb3ZzaSsxKTogQWxsb3cgci0+bSBtb3ZlIGR1cmluZyByZWxvYWRpbmcuCisKK0ZyaSBOb3YgMTEgMTI6NDA6NTEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFByb3Blcmx5IG1lcmdlIGRlY2xzIHdpdGgKKwlkaWZmZXJpbmcgREVDTF9DT05URVhULgorCisJKiBmdW5jdGlvbi5jIChwcmVzZXJ2ZV9ydGxfZXhwcl9yZXN1bHQpOiBmaW5kX3RlbXBfc2xvdF9mcm9tX2FkZHJlc3MKKwlub3cgdXNlZC4KKwlEb24ndCBicmluZyB0aGUgdGVtcCBzbG90IHRvIGFuIGlubmVyIGxldmVsIHRoYW4gaXQgd2FzLgkKKwkoYXNzaWduX3N0YWNrX3RlbXApOiBBbHdheXMgaW5pdGlhbGl6ZSBwLT5ydGxfZXhwci4KKworCSogbTY4ay9tb3QzMzAwZy5oIChTUEFDRV9BRlRFUl9MX09QVElPTik6IERlbGV0ZWQuCisKK1RodSBOb3YgMTAgMTg6NTA6NTIgMTk5NCAgS3Jlc3RlbiBLcmFiIFRob3J1cCAoa3JhYkBuZXh0LmNvbSkKKworCSogb2JqYy9saXN0Lmg6IEFkZCBpZm5kZWYvZGVmaW5lIGZvciByZXBlYXRlZCBpbmNsdXNpb24uCisKK1RodSBOb3YgMTAgMTg6MDI6NTggMTk5NCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHBhc3RhLm9zZi5vcmc+CisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IENoZWNrIGZvciBhdHRyaWJ1dGVzIHdpdGggbGVhZGluZworCWFuZCB0cmFpbGluZyBkb3VibGUgdW5kZXJzY29yZXMuCisKK1RodSBOb3YgMTAgMTc6NTU6MDcgMTk5NCAgQ2hyaXMgTWV0Y2FsZiAgKG1ldGNhbGZAY2F0ZmlzaC5sY3MubWl0LmVkdSkKKworCSogZml4aW5jbHVkZXM6IE1ha2UgYXJndW1lbnQgdHlwZSBjb25zdCBmb3IgcG9wZW4gYW5kIHRlbXBuYW0gaW4KKwlzdGRpby5oIGFuZCBmb3Igc3RyZHVwIGluIHN0cmluZy5oLCBmb3IgT1NGLzEgVjMuMC4KKworCSogdmEtYWxwaGEuaCAodmFfYXJnKTogQWRkIGNhc3QgdG8gdm9pZCAqIHRvIHN1cHByZXNzIHdhcm5pbmcuCisKK1RodSBOb3YgMTAgMTc6NDg6MjEgMTk5NCAgV2FsdGVyIE1pc2FyICAoaHJ6LnRoLWRhcm1zdGFkdC5kZSkKKworCSogbTY4ay9ocDMyMC5oIChGVU5DVElPTl97UFJPLEVQSX1MT0dVRSk6IERvbid0IGRlZmluZS4KKwkoSU1NRURJQVRFX1BSRUZJWCwgUkVHSVNURVJfUFJFRklYKTogRGVmaW5lLgorCitUaHUgTm92IDEwIDE1OjA0OjU3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG02OGsvY3Jkcy5oIChGVU5DVElPTl97UFJPLEVQSX1MT0dVRSk6IEFkZCBjb2RlIHRvIGFkanVzdCBzdGFjaworCXdoZW4gbm8gZnJhbWUgcG9pbnRlci4KKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogVXNlIGExIGFzIHNjcmF0Y2gsIG5vdCBhMC4KKwkqIG02OGsvdG93ZXItYXMuaCAoRlVOQ1RJT05fe1BSTyxFUEl9TE9HVUUpOiBObyBsb25nZXIgZGVmaW5lZC4KKwkoRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUpOiBEZWZpbmUuCisJKiBtNjhrL3Rvd2VyLmggKFJFR0lTVEVSX1BSRUZJWCwgSU1NRURJQVRFX1BSRUZJWCk6IERlZmluZS4KKworCSogaTM4Ni94LXNjbywgaTM4Ni94LXNjbzQgKENMSUIpOiBBZGQgLWxQVy4KKwkoQUxMT0NBKTogRGVsZXRlLgorCisJKiBjLWNvbW1vbi5jICh7cHJpbnQsc2Nhbn1fY2hhcl90YWJsZSk6IEFsbG93IGBMJyBtb2RpZmllcgorCWZvciBpbnRlZ2VyIG91dHB1dCBmb3JtYXRzLgorCShjaGVja19mb3JtYXRfaW5mbyk6IFRyZWF0IGBsbCcgbGlrZSBgcScuCisKKwkqIHJzNjAwMC5tZCAobW92c2kpOiBJbiBUT0Mgc3ltYm9sIGNhc2UsIHVzZSAibGEiIGZvciBQb3dlclBDLgorCShtb3ZkaSk6IEhhbmRsZSBUT0Mgc3ltYm9sIGp1c3QgbGlrZSBtb3ZzaS4KKworCSogb2JqYy1hY3QuYyAoaW5pdF9vYmpjKTogQWRkIG1pc3NpbmcgY2FzdHMgdG8gYXJncyBvZiBiY29weS4KKwkobGFuZ19pbml0KTogRW5zdXJlIGxpbmUgbnVtYmVyIGlzIDAsIG5vdCAtMS4KKworVHVlIE5vdiAgOCAwNzo1MTo1MyAxOTk0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KKworCSogY2NjcC5jIChkdW1wX3NpbmdsZV9tYWNybywgZHVtcF9kZWZuXzEpOiBJZiAtdHJhZGl0aW9uYWwsCisJZHVtcCBtYWNyb3MgaW4gdHJhZGl0aW9uYWwgc3R5bGUuICBUaGlzIGFsc28gYXZvaWRzIGEgYm9ndXMgZXJyb3IKKwltZXNzYWdlIGlmIHRoZSBtYWNybyB1c2VzIHRyYWRpdGlvbmFsIHN0cmluZ2l6aW5nLgorCitNb24gTm92ICA3IDIxOjI4OjEzIDE5OTQgIE1pY2hhZWwgSSBCdXNobmVsbCAgPG1pYkBnZWVjaC5nbnUuYWkubWl0LmVkdT4KKworCSogcHJvdG9pemUuYyBbIVBPU0lYXTogT25seSBkZWZpbmUgT19SRE9OTFkgYW5kIE9fV1JPTkxZIGlmIG5vdAorCWFscmVhZHkgZGVmaW5lZC4KKworTW9uIE5vdiAgNyAxOTozMzozMSAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBVcGRhdGUgc3BsaXRfY29kZSBhZnRlciBjb252ZXJ0aW5nIE1VTFQKKwl0byBBU0hJRlQuCisKK01vbiBOb3YgIDcgMTI6MjY6MjQgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQGN5Z251cy5jb20+CisKKwkqIHJzNjAwMC5tZCAoREltb2RlIGxvYWQtd2l0aC11cGRhdGUgbWF0Y2hlcik6IEZpeCB0eXBvIGluIE1FTSBtb2RlLgorCShjb21wYXJlIHBhdHRlcm5zKTogRml4IHNldmVyYWwgdHlwb3MsIFNJbW9kZSA9PiBDQ21vZGUuCisJKiBzaC5tZCAoc3ViZGkzKTogRGVsZXRlICUgZnJvbSBjb25zdHJhaW50cy4KKwkqIDE3NTBhLm1kIChzdWJxaTMpOiBMaWtld2lzZS4KKwkqIGNsaXBwZXIubWQgKHN1YmRpMyk6IExpa2V3aXNlLgorCSogaTM3MC5tZCAoc3VicWkzKTogTGlrZXdpc2UuCisJKGFub255bW91cyBzdWJxaTMgbWF0Y2hlcik6IExpa2V3aXNlLgorCSogaTg2MC5tZCAoc3ViZGkzKTogTGlrZXdpc2UuCisJKiBkc3AxNnh4Lm1kIChtdWxxaTMpOiBGaXggdHlwbyBpbiBNVUxUIG1vZGUuCisJKiBlbHhzaS5tZCAob25lX2NtcGxzaTIpOiBGaXggdHlwbyBpbiBOT1QgbW9kZS4KKworTW9uIE5vdiAgNyAxMjo0NzozNyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CisKKwkqIG02OGt2NC5oIChBU01fSURFTlRJRllfR0NDKTogVXNlIHByb3BlciBkZWZpbml0aW9uIGZvciBTR1MgYXNzZW1ibGVyLgorCitNb24gTm92ICA3IDExOjAyOjI1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBJZ25vcmUgTElCUkFSWV9QQVRIIGFuZCBMUEFUSCBpZgorCWNyb3NzLWNvbXBpbGVyLgorCitTdW4gTm92ICA2IDA3OjIzOjM3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNyb3NzLXRlc3QuYyAoZm9vKTogUmV0dXJuIHZhbHVlIGZvciBCVSBpbiByYW5nZSBmb3Igc2hpZnRzLgorCitTYXQgTm92ICA1IDE0OjI1OjM2IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbSkKKworCSogbTY4ay5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogRlAgY29uc3RhbnRzIHJlamVjdGVkIGJ5ICdHJworCWFyZSBPSyBmb3IgY2xhc3MgRlBfUkVHUy4KKworU2F0IE5vdiAgNSAxNDowODozMSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogUHJlc2VydmUgYW55IHRlbXAgc2xvdHMgd2hvc2UgYWRkcmVzcworCW1heSBoYXZlIGJlZW4gdGFrZW4uCisKKwkqIHJlYWwuYyAoR0VUX1JFQUwsIFBVVF9SRUFMKTogQ2FzdCBhcmdzIHRvIGJjb3B5IHRvIGNoYXIgKi4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogTGlrZXdpc2UuCisJKiBpMzg2LmMgKHtzYXZlLHJlc3RvcmV9XzM4Nl9tYWNoaW5lX3N0YXR1cyk6IExpa2V3aXNlLgorCSogcmVnLXN0YWNrLmMgKHN1YnN0X2FzbV9zdGFja19yZWdzKTogTGlrZXdpc2UuCisJKEJMT0NLX05VTSk6IFJld29yayB0byBhdm9pZCBjYXN0IG9mIGFib3J0IHRvIGludCAqLgorCShmaW5kX2Jsb2Nrcyk6IERvbid0IHVzZSBCTE9DS19OVU0gb24gbGhzLgorCShyZWdfdG9fc3RhY2ssIHJlY29yZF9hcmdfcmVnX2xpZmUpOiBDYXN0IGFyZyB0byBiemVybyB0byBjaGFyICouCisKK1NhdCBOb3YgIDUgMDg6Mjk6NDUgMTk5NCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAocmVzY2FuKTogRG8gbm90IHByZXNlcnZlIG5ld2xpbmVzIGFmdGVyIG1hY3JvIG5hbWUKKwlpZiByZXNjYW5uaW5nIGEgbWFjcm8gZXhwYW5zaW9uLiAgSW5zdGVhZCwgcHJlc2VydmUgdGhlbSBpZgorCW5vdCBvdXRwdXR0aW5nIG1hcmtzLgorCitGcmkgTm92ICA0IDE3OjI1OjI5IDE5OTQgIEpvaG4gRGF2aWQgQW5nbGluICAoZGF2ZUBoaWF1bHkxLmhpYS5ucmMuY2EpCisKKwkqIHZheC5jOiBJbmNsdWRlIHRyZWUuaCBhbmQgVk1TLXNwZWNpZmljIGZ1bmN0aW9ucyAjaWZkZWYgVk1TX1RBUkdFVC4KKwkqIHZtcy5oIChWTVNfVEFSR0VUKTogRGVmaW5lLgkKKworRnJpIE5vdiAgNCAxNzoxOTozMCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBiaS1hcml0eS5jIChtYWluKTogQ2FzdCBlbnVtIHRvIGNoYXIgaW4gb3V0cHV0LgorCSogYmMtZW1pdC5jIChiY19lbWl0X2J5dGVjb2RlKTogQWRkIG1pc3NpbmcgY2FzdC4KKworVGh1IE5vdiAgMyAxNDoxNzoyMiAxOTk0ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIGxpYmdjYzIuYyAoX19yZWdpc3Rlcl9leGNlcHRpb25zKTogRmluZCBtYXggZW5kaW5nIG9mIGEgc2VnbWVudCBmb3IKKwllbmQsIG5vdCBtaW4uCisJKiBsaWJnY2MyLmMgKF9fdW53aW5kX2Z1bmN0aW9uKTogTmV3IGZ1bmN0aW9uIHRvIHN1cHBvcnQgc3RhY2sKKwl1bndpbmRpbmcgb24gaVszNF04NiBmb3IgZysrIGV4Y2VwdGlvbiBoYW5kbGluZy4KKworVGh1IE5vdiAgMyAxODo1NTo0MiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBNYWtlZmlsZS5pbiAoYy1wYXJzZS5vLCBjLWxleC5vKTogYy1wYXJzZS5oIGlzIGluICQoc3JjZGlyKS4KKworVGh1IE5vdiAgMyAxODoxMTo1NiAxOTk0ICBKb2huIEYgQ2FyciAgKGpmY0BtaXQuZWR1KQorCisJKiByczYwMDAubWQgKG1vdnNpKTogTmV3IGFsdGVybmF0aXZlIGZvciBTWU1CT0xfUkVGIHNvdXJjZSBvcGVyYW5kLgorCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQpOiBOZXcgY29kZSAnKicgdG8gcHJpbnQgVE9DIHJlZ2lzdGVyIG51bWJlci4KKwkqIHJzNjAwMC5oIChFWFRSQV9DT05TVFJBSU5UKTogJ1InIG1hdGNoZXMgYSBTWU1CT0xfUkVGIGZvciBUT0MgZW50cnkuCisJKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IFJlY29nbml6ZSAnKicuCisJKFBSRURJQ0FURV9DT0RFUyk6IGlucHV0X29wZXJhbmQgY2FuIG5vdyBtYXRjaCBTWU1CT0xfUkVGLgorCitUaHUgTm92ICAzIDE4OjAzOjI0IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiBjY2NwLmM6IFRPT0xfSU5DTFVERV9ESVIgaXMgbm90IEMrKy1hd2FyZS4KKworVGh1IE5vdiAgMyAxNzoyMzozMCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGNoZXN0bnV0LmN5Z251cy5jb20pCisKKwkqIG1pcHMuYyAobWlwc19vdXRwdXRfZXh0ZXJuYWwpOiBFeGNsdWRlIGFsbG9jYSBmcm9tIGxpc3Qgb2YKKwl1c2VkIGV4dGVybmFsIGZ1bmN0aW9ucy4KKworVHVlIE5vdiAgMSAxOToxOTo0MSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBWZXJzaW9uIDIuNi4xIHJlbGVhc2VkLgorCitUdWUgTm92ICAxIDE4OjUxOjAwIDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBjeWdudXMuY29tKQorCisJKiBwYS5tZCAoYWRkX2hpZ2hfY29uc3QpOiBBZGQgbWlzc2luZyBtb2RlIGZvciBQTFVTLgorCitUdWUgTm92ICAxIDE4OjM5OjUzIDE5OTQgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uLCBjYXNlIFRSVU5DQVRFKTogU2V0IExWIGFuZCBIVi4KKworVHVlIE5vdiAgMSAxODozNjoyMyAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogdmF4LmMgKHN0cnVjdCBleHRlcm5fbGlzdCk6IFB1dCBjb2RlIGJhY2sgb3V0c2lkZSBvZiAjaWZkZWYgVk1TLgorCSh2bXNfY2hlY2tfZXh0ZXJuYWwsIHZtc19mbHVzaF9wZW5kaW5nX2V4dGVybmFscyk6IExpa2V3aXNlLgorCitNb24gT2N0IDMxIDE2OjE4OjEyIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBwYXN0YS5vc2Yub3JnPgorCisJKiBpMzg2L2kzODYubWQgKG1vdnNmLCBtb3ZkZiwgbW92eGYpOiBJZiB3ZSBhcmUgbW92aW5nIGZsb2F0aW5nCisJcG9pbnQgY29uc3RhbnRzIHRvIGEgbm9uLW1lbW9yeSBsb2NhdGlvbiB0aGF0IGFyZW4ndCAwIG9yIDEsCisJYXNzdW1lIHdlIG5lZWQgdGhlIHBpYyByZWdpc3RlciBpZiAtZnBpYy4KKworTW9uIE9jdCAzMSAxMzoyNjo0NSAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHNwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERvbid0IGFsbG93IFRGbW9kZSBMT19TVU0uCisJKiBzcGFyYy5tZCAobW92dGYrMyk6IERpc2FibGUgcGF0dGVybi4KKworTW9uIE9jdCAzMSAwODoxMTo0NyAxOTk0ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBDT05EX0VYUFIgY2FzZSk6IERvbid0IHVzZSBvcmlnaW5hbCB0YXJnZXQgYXMKKwlhIHRlbXAgaWYgaXQncyBhIHZvbGF0aWxlIG1lbSByZWYuICBGaW5pc2ggcHJldmlvdXMgcGF0Y2ggKGRvbid0CisJZXhwYW5kICJYID8gQSAmIDEgOiBBIiBhcyAiQSAmIChYICE9IDApIikuCisKK01vbiBPY3QgMzEgMDg6MDc6MDkgMTk5NCAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIHZheC5jOiBJbmNsdWRlIHRyZWUuaCAjaWZkZWYgVk1TLgorCShzdHJ1Y3QgZXh0ZXJuX2xpc3QpOiBNb3ZlIGluc2lkZSAjaWZkZWYgVk1TOyBhZGQgU0laRSBhbmQgSU5fQ09OU1QKKwlmaWVsZHM7IG1ha2UgYGV4dGVybl9oZWFkJyBzdGF0aWM7IGFkZCBzZWNvbmQgbGlzdCBoZWFkLgorCSh2bXNfY2hlY2tfZXh0ZXJuYWwpOiBNb3ZlIGluc2lkZSAjaWZkZWYgVk1TOyBnaXZlIG5ldyBhcmdzOyBtYWludGFpbgorCWxpc3Qgb2YgYm90aCBwZW5kaW5nIGV4dGVybmFsIHN5bWJvbHMgYW5kIHByZXZpb3VzbHkgZGVmaW5lZCBvbmVzLgorCSh2bXNfZmx1c2hfcGVuZGluZ19leHRlcm5hbHMpOiBOZXcgZnVuY3Rpb24uCisJKiB2YXgvdm1zLmggKEFTTV9HTE9CQUxJWkVfTEFCRUwpOiBQYXNzIG5ldyBhcmdzIHRvIHZtc19jaGVja19leHRlcm5hbC4KKwkoQVNNX09VVFBVVF9FWFRFUk5BTCk6IEp1c3QgY2FsbCB2bXNfY2hlY2tfZXh0ZXJuYWwuCisJKEFTTV97LEZJTklTSF99REVDTEFSRV9PQkpFQ1RfTkFNRSwgQVNNX0ZJTEVfRU5EKTogRGVmaW5lLgorCitNb24gT2N0IDMxIDA4OjAwOjU5IDE5OTQgIE1pY2hhZWwgR3NjaHdpbmQgIChtaWtlQHZsc2l2aWUudHV3aWVuLmFjLmF0KQorCisJKiBwZHAxMS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgLXNwbGl0IGFuZCAtbm8tc3BsaXQuCisJKFRBUkdFVF9TUExJVCwgVEFSR0VUX05PU1BMSVQpOiBOZXcgbWFjcm9zLgorCShUUkFNUE9MSU5FX1RFTVBMQVRFLCBJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBBYm9ydCBpZiAtc3BsaXQuCisKK01vbiBPY3QgMzEgMDc6NTM6MzQgMTk5NCAgV2FybmVyIExvc2ggIDxpbXBAdmlsbGFnZS5vcmc+CisKKwkqIGkzODYveC1mcmVlYnNkIChDTElCKTogQWRkIGRlZmluaXRpb24uCisKK01vbiBPY3QgMzEgMDc6NDk6MTcgMTk5NCAgSmVmZnJleSBBIExhdyAgPGxhd0BzbmFrZS5jcy51dGFoLmVkdT4KKworCSogcmVvcmcuYyAobWFya19zZXRfcmVzb3VyY2VzKTogUHJvcGVybHkgaGFuZGxlIFNVQlJFR3MuCisKK01vbiBPY3QgMzEgMDc6MjQ6MzIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT01QT05FTlRfUkVGKTogRG9uJ3QgZXh0cmFjdAorCWZpZWxkIGZyb20gYSBDT05TVFJVQ1RPUiBpZiBpdCBhbHJlYWR5IGhhcyBhIFRSRUVfQ1NUX1JUTC4KKwkoZXhwYW5kX2V4cHIsIGNhc2UgQUREUl9FWFBSKTogQ2FsbCBtYXJrX3RlbXBfYWRkcl90YWtlbgorCW9uIHRoZSB0ZW1wb3JhcnkgbWFkZSB3aGVuIG9wZXJhbmQgbmVlZHMgdG8gYmUgc3RvcmVkIGludG8gbWVtb3J5LgorCSogZnVuY3Rpb24uYyAocHJlc2VydmVfdGVtcF9zbG90cyk6IFByZXNlcnZlIGFueXRoaW5nIHdob3NlCisJYWRkcmVzcyB3YXMgdGFrZW4gd2hlbiBYIGlzIHplcm8uCisKK1N1biBPY3QgMzAgMTU6MTE6NTEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogbXNkb3MvdG9wLnNlZCwgaTM4Ni9jb25maWctbnQuc2VkOiBVcGRhdGUgdmVyc2lvbiB0byAyLjYuMS4KKwkqIHBhL3QtcGEtaHB1eDogQWRkIG1pc3NpbmcgbmV3bGluZSBhdCBlbmQuCisKK1NhdCBPY3QgMjkgMjE6MTY6MjkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogRml4IHR5cG86IEhPU1RfQklUU19QRVJfSU5UCisJc2hvdWxkIGJlIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCisKK0ZyaSBPY3QgMjggMTk6MTM6MTMgMTk5NCAgQW5kcmV3IE1jQ2FsbHVtICAobWNjYWxsdW1AdmVpbi5jcy5yb2NoZXN0ZXIuZWR1KQorCisJKiBvYmpjL21pc2MuYyAoX19vYmpjX3hjYWxsb2MpOiAgVXNlIGNhbGxvYyBpbnN0ZWFkIG1hbGxvYy9iemVyby4KKworRnJpIE9jdCAyOCAxOTowNzo1MyAxOTk0ICBNaWNoYWVsIEdzY2h3aW5kICAobWlrZUB2bHNpdmllLnR1d2llbi5hYy5hdCkKKworCSogcGRwMTEuaCAoVFJBTVBPTElORV9TSVpFKTogSW5zdGFsbCByZWFsIGltcGxlbWVudGF0aW9uLgorCShJTklUSUFMSVpFX1RSQU1QT0xJTkUsIFRSQU1QT0xJTkVfVEVNUExBVEUpOiBMaWtld2lzZS4KKworRnJpIE9jdCAyOCAxOTowMToyNyAxOTk0ICBDcmFpZyBCdXJsZXkgIChidXJsZXlAZ251LmFpLm1pdC5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChzdGFnZT8tc3RhcnQpOiBBZGQgc2VtaWNvbG9uIGJldHdlZW4gZmkgYW5kIGRvbmUuCisgIAorRnJpIE9jdCAyOCAxNzoxMjoyNiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBEb24ndCByZWNvcmQgYSBERVNUIGlmIHBhcmFkb3hpY2FsIFNVQlJFRworCWFuZCBTUkMgaXMgYSBTSUdOX0VYVEVORCBvciBaRVJPX0VYVEVORC4KKworCSogYWxwaGEubWQgKHJlbG9hZF9vdXRxaSk6IENvcnJlY3RseSBoYW5kbGUgc2NyYXRjaCBhc3NpZ25tZW50cworCWZvciB1bmFsaWduZWQgY2FzZSB3aGVuIEFERFIgaXMgYSBSRUcuCisKK0ZyaSBPY3QgMjggMDc6NTU6NDAgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvaTM4Ni5tZCAoYWRkZGkzKTogRml4dXAgY29kZSBpbiBjYXNlIG9wZXJhbmRzWzBdIGlzIGVxdWFsCisJdG8gb3BlcmFuZHNbMl0uCisKK1RodSBPY3QgMjcgMTg6NTg6MzkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChjb3VudF9wb3NzaWJsZV9ncm91cHMpOiBGaXggdHlwbyBpbiBzZXR0aW5nCisJY291bnRlZF9mb3JfZ3JvdXBzLgorCitUaHUgT2N0IDI3IDE1OjMwOjQxIDE5OTQgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBjLXR5cGVjay5jIChwcm9jZXNzX2luaXRfZWxlbWVudCk6ICBJbiB0aGUgY2FzZSBvZgorCVtMTyAuLiBISV0gPSBWQUxVRSwgdXNlIHNhdmVfZXhwciB0byBvbmx5IGV2YWx1YXRlIFZBTFVFIG9uY2UuCisKK1RodSBPY3QgMjcgMTU6MTU6MjUgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHJ0bC5jeWdudXMuY29tKQorCisJKiBnY2MuYyAocHJvY2Vzc19jb21tYW5kKTogRG9uJ3QgZm9yZ2V0IHRvIHNwbGl0IC1XbCBhcmd1bWVudHMgYXQKKwljb21tYXMuCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBIYW5kbGUgLVdsLCBhbmQgLVhsaW5rZXIgc2ltaWxhciB0byAtbCwKKwlpLmUuLCBwcmVzZXJ2ZSB0aGVpciBvcmRlciB3aXRoIHJlc3BlY3QgdG8gbGlua2VyIGlucHV0IGZpbGVzLgorCitUaHUgT2N0IDI3IDEzOjExOjE2IDE5OTQgIERvdWdsYXMgUnVwcCAgKGRydXBwQGNzLndhc2hpbmd0b24uZWR1KQorCisJKiBjb25maWd1cmUgKGlbMzQ1XTg2LSotd2lubnQzKik6IEFsbG93IGFueSB2ZXJzaW9uIDMueC4KKwlEb24ndCB1c2UgYSB0LXdpbm50IGZpbGUgYW5kIG1vdmUgeC13aW5udCB0byBjb25maWcvaTM4Ni4KKwkqIGkzODYveC13aW5udDogQnVpbGQgbGQtd2lubnQuZXhlIG9ubHkgb24gaG9zdC4KKwkqIHdpbm50L3Qtd2lubnQ6IERlbGV0ZWQuCisKK1RodSBPY3QgMjcgMTM6MDU6MTYgMTk5NCAgTWlrZSBDb2xsaXNvbiAgKGNvbGxpc29uQGNoaWFudGkuc3cuc3RyYXR1cy5jb20pCisKKwkqIHJlbG9hZC5jIChkZWJ1Z19yZWxvYWQpOiBOZXcgZnVuY3Rpb24gdG8gcHJpbnQgcmVsb2FkIGluZm8KKwlzZXQgdXAgYnkgZmluZF9yZWxvYWRzLgorCitXZWQgT2N0IDI2IDE4OjI3OjAzIDE5OTQgIERhdmlkIE1vc2Jlcmdlci1UYW5nICA8ZGF2aWRtQHBpc3Rvbi5jcy5hcml6b25hLmVkdT4KKworCSogYWxwaGEuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBVc2UgJDI4IGluc3RlYWQgb2YgJDI3LgorCShMSU5LX1NQRUMpOiBQYXNzIC1wZyB0byBsaW5rZXIuCisJKExJQl9TUEVDKTogTGluayBpbiAtbHByb2YxIHdpdGggLXBnLCBub3QgLWxwcm9mMi4KKwkoU1RBUlRGSUxFX1NQRUMpOiBVU2UgZ2NydDAubyBpZiAtcGcsIG5vdCBtY3J0MC5vLgorCitXZWQgT2N0IDI2IDE4OjIyOjM0IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgQ09ORF9FWFBSIGNhc2UpOiBEb24ndCBleHBhbmQKKwkiWCA/IEEgJiAxIDogQSIgYXMgIkEgJiAoWCAhPSAwKSIuCisKK1dlZCBPY3QgMjYgMTg6MDY6NTIgMTk5NCAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIHdpbm50L2xkLmMgKGV4cGFuZF9saWIsIG1haW4pOiBGaXggb2ZmLWJ5LW9uZSBidWdzIGluIHNldmVyYWwKKwljYWxscyB0byBtYWxsb2MuCisKK1dlZCBPY3QgMjYgMjI6MDA6MDkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KKworCSogd2lubnQvdC13aW5udDogUmVtb3ZlIHNvbWUgc3B1cmlvdXMgYmxhbmsgbGluZXMuCisKK1dlZCBPY3QgMjYgMTQ6MTQ6MzkgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oIChSRUFMX05NX0ZJTEVfTkFNRSk6IFVzZSAvdXNyL2Njcy9nY2MvYmZkLW5tCisJaW5zdGVhZCBvZiAvdXNyL2Njcy9iaW4vbm0sIHNpbmNlIHRoZSBHTlUgbm0gZG9lcyBub3Qgb3V0cHV0IHN0YWIKKwlzeW1ib2xzIGJ5IGRlZmF1bHQuCisKK1dlZCBPY3QgMjYgMTM6NDc6MDYgMTk5NCAgTWljaGFlbCBHc2Nod2luZCAgKG1pa2VAdmxzaXZpZS50dXdpZW4uYWMuYXQpCisKKwkqIGNvbmZpZy5zdWIgKHBkcDExKTogTmV3IG1hY2hpbmUgbmFtZS4KKwkqIGNvbmZpZ3VyZSAocGRwMTEtKi0qKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBwZHAxMS5jLCBwZHAxMS5oLCBwZHAxMS5tZCwgeG0tcGRwMTEuaDogTmV3IGZpbGVzLgorCitXZWQgT2N0IDI2IDA3OjMzOjQwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBFbnN1cmUgZWFjaCBsaXZlIGJhc2ljIGJsb2NrIGlzCisJYWN0dWFsbHkgcmVhY2hhYmxlLgorCShsaWZlX2FuYWx5c2lzKTogQ2xlYW4gdXAgaGFuZGxpbmcgb2YgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCisKK1R1ZSBPY3QgMjUgMTg6NDA6MTIgMTk5NCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAocmVzY2FuKTogIi4uIiBubyBsb25nZXIgdGVybWluYXRlcyBhIHByZXByb2Nlc3NpbmcKKwludW1iZXIsIHNpbmNlIHRoYXQncyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQyBzdGFuZGFyZC4KKworVHVlIE9jdCAyNSAxNjoxNjo0MCAxOTk0ICBNaWNoYWVsIERvYnNvbiAgKGRvYnNvbkBpbmZvLnVzdWhzLm1pbCkKKworCSogd2UzMmsuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgdTNiMiwgbm90IHUzYi4KKworVHVlIE9jdCAyNSAxNjoxNToyNyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHJlb3JnLmMgKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBVcGRhdGUgVEhSRUFEIGlmIGl0IGlzIHNwbGl0LgorCitNb24gT2N0IDI0IDAwOjEyOjQ2IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1me25vLSx9YWNjZXNzLWNvbnRyb2wuCisKK01vbiBPY3QgMjQgMDY6MTQ6MDMgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKKworCSogYXJtL2FybS5tZCAocGVlcGhvbGVzIGZvciBjYWxsIGZvbGxvd2VkIGJ5IGJyYW5jaCk6IERpc2FibGUuCisKK1N1biBPY3QgMjMgMDg6NTQ6MjcgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKKworCSogYXJtL3gtcmlzY2l4IChJTlNUQUxMKTogSW52b2tlIGluc3RhbGwuc2ggd2l0aCAtYyBmbGFnLgorCitGcmkgT2N0IDIxIDAwOjQyOjA4IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoTElCMkZVTkNTKTogQWRkIF9wdXJlLgorCisJKiBsaWJnY2MyLmMgKF9fcHVyZV92aXJ0dWFsKTogTmV3IGZ1bmN0aW9uIHRvIGdvIGludG8gdnRhYmxlCisJZW50cmllcyBmb3IgcHVyZSB2aXJ0dWFsIG1ldGhvZHMgaW5zdGVhZCBvZiBhYm9ydC4KKworVGh1IE9jdCAyMCAxODo0MDozNiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5tZCAoZGVmaW5lX3NwbGl0IGNvbXBhcmlzb24gb3Agd2l0aCBwb3dlciBvZiB0d28gbWludXMgMSk6CisJRml4IHR5cG8uCisKK1RodSBPY3QgMjAgMTM6MTQ6MjQgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCisKKwkqIGNvbGxlY3QyLmMgKGFkZF90b19saXN0KTogQ2hlY2sgZm9yIGR1cGxpY2F0ZXMuCisKKwkqIGFscGhhL2FscGhhLmggKExJTktfU1BFQyk6IFBhc3MgLXNoYXJlZCB0aHJvdWdoOyBkb24ndAorCXBhc3MgLWluaXQgX19tYWluIGlmIC1zaGFyZWQuCisJKFNUQVJURklMRV9TUEVDKTogV3JhcCBzdGFydGZpbGVzIGluICV7IXNoYXJlZDp9LgorCShJTklUX05BTUVfRk9STUFUKTogRGVmaW5lLgorCShGSU5JX05BTUVfRk9STUFUKTogRGVmaW5lLgorCSogYWxwaGEvb3NmMTIuaCAoTElOS19TUEVDKTogRGl0dG8uCisJKiBhbHBoYS9nZGItb3NmMTIuaDogI2luY2x1ZGUgb3NmMTIuaCBpbnN0ZWFkIG9mIGFscGhhLmgKKworCSogZ2NjLmMgKFNUQVJURklMRV9TUEVDKTogV3JhcCBzdGFydGZpbGVzIGluICV7IXNoYXJlZDp9LgorCitUaHUgT2N0IDIwIDE2OjA3OjQ2IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9ucyk6IE1vdmUgYWxsIGZhaWx1cmUgZXhpdHMgYWZ0ZXIgdGhlCisJY29tcHV0YXRpb24gb2YgZmluYWxfdmFsdWUuCisKKwkqIG1pcHMubWQgKG1vdmRmX2ludGVybmFsMisxKTogRGlzYWJsZSB3aGVuIFRBUkdFVF82NEJJVC4KKworCSogaTk2MC5jIChWQVJBUkdTX1NUREFSR19GVU5DVElPTik6IE5ldyBtYWNyby4KKwkoaTk2MF9mdW5jdGlvbl9uYW1lX2RlY2xhcmUsIG91dHB1dF9mdW5jdGlvbl9wcm9maWxlciwKKwlpOTYwX2Z1bmN0aW9uX2VwaWxvZ3VlLCBpOTYwX291dHB1dF9jYWxsX2luc24sICBpOTYwX291dHB1dF9yZXRfaW5zbiwKKwlpOTYwX3JlZ19wYXJtX3N0YWNrX3NwYWNlKTogVXNlIGl0LgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBEb24ndCB1c2UgY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZS4KKwkoaTk2MF9mdW5jdGlvbl9hcmdfYWR2YW5jZSwgaTk2MF9mdW5jdGlvbl9hcmcpOiBEb24ndCB1c2UgcGFyYW1ldGVyCisJbmFtZWQuCisJKGk5NjBfc2V0dXBfaW5jb21pbmdfdmFyYXJncyk6IE5vIG5lZWQgdG8gYWRqdXN0IGZpcnN0X3JlZ19vZmZzZXQKKwlhZnRlciBzZXR0aW5nIGl0LiAgRG9uJ3Qgc2F2ZSBsYXN0IG5hbWVkIGFyZ3VtZW50IHRvIHN0YWNrLgorCURvbid0IHNldCBwcmV0ZW5kX3NpemUuCisJKiBpOTYwLmggKFNJR05FRF9DSEFSX1NQRUMpOiBVc2UgI2lmIGluc3RlYWQgb2YgPzouCisJKiB2YS1pOTYwLmggKHZhX3N0YXJ0KTogVXNlIGJ1aWx0aW5fYXJ0c19pbmZvIGluc3RlYWQgb2YKKwlidWlsdGluX25leHRfYXJnLgorCisgCSogY3NlLmMgKG1lcmdlX2VxdWl2X2NsYXNzZXMsIGNzZV9pbnNuKTogQ2FsbCByZWhhc2hfdXNpbmdfcmVnCisJYWZ0ZXIgaW5zZXJ0X3JlZ3MuCisJKGNhbm9uX2hhc2gpOiBEb24ndCB1c2UgcXR5X2NvbnN0IHRvIGNvbXB1dGUgaGFzaCBjb2RlIGZvciBhCisJcmVnaXN0ZXIuCisKK1RodSBPY3QgMjAgMDk6NDE6NTEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1KQorCisJKiBzdG9yLWxheW91dC5jICh2YXJpYWJsZV9zaXplKTogUmV0dXJuIFNJWkUgaWYgaXQgY29udGFpbnMKKwlhIFBMQUNFSE9MREVSX0VYUFIuCisKK1R1ZSBPY3QgMTggMTk6NTE6MjQgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCisKKwkqIGNvbGxlY3QyLmMgKG1haW4pOiBDaGVjayBSRUFMXypfRklMRV9OQU1FIGZpcnN0LgorCitXZWQgT2N0IDE5IDE1OjU1OjE1IDE5OTQgIERhdmlkIEouIE1hY0tlbnppZSAgPGRqbUBkdWFsaXR5LmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcuc3ViOiBBZGQgbGljZW5zaW5nIGV4Y2VwdGlvbiBmb3IgQXV0b2NvbmYuCisKK1dlZCBPY3QgMTkgMDY6NDM6NDYgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvaTM4Ni5oIChGVU5DVElPTl9CTE9DS19QUk9GSUxFUik6IERvbid0IGJvdGhlciBwcmVzZXJ2aW5nCisJZWF4IGlmIC1mcGljLCBzaW5jZSBpdCBpcyBhIGNhbGwgY2xvYmJlcmVkIHJlZ2lzdGVyIGFueXdheS4gIEZpeCAtZnBpYworCWNvZGUgc28gdGhhdCBpdCBpcyBjb3JyZWN0LgorCitUdWUgT2N0IDE4IDE4OjAwOjIzIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2kzODYuaCAoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIsIEJMT0NLX1BST0ZJTEVSKTogTW92ZQorCW1hY3JvcyBoZXJlIGZyb20gb3Nmcm9zZSwgbmV0YnNkLCBhbmQgZnJlZWJzZCBwb3J0cy4gIFJlbW92ZQorCWFzc3VtcHRpb25zIHRoYXQgdGhlIGFzc2VtYmxlciBpcyBnYXMuICBSZXdyaXRlIGFuZCBmaXggdGhlCisJaW5zdHJ1Y3Rpb25zIHByb2R1Y2VkIHdpdGggLWZwaWMuCisKKwkqIGkzODYvb3Nmcm9zZS5oIChGVU5DVElPTl9CTE9DS19QUk9GSUxFUiwgQkxPQ0tfUFJPRklMRVIpOiBEZWxldGUuCisJKiBpMzg2L2ZyZWVic2QuaCAoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIsIEJMT0NLX1BST0ZJTEVSKTogRGVsZXRlLgorCSogaTM4Ni9uZXRic2QtaTM4Ni5oIChGVU5DVElPTl9CTE9DS19QUk9GSUxFUiwgQkxPQ0tfUFJPRklMRVIpOgorCURlbGV0ZS4KKworVHVlIE9jdCAxOCAyMDoyNzoyOSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmggKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBSZXF1aXJlIGZyYW1lIHBvaW50ZXIgaWYKKwlub24tbGVhZiBmbGF0IGZ1bmN0aW9uLgorCSogc3BhcmMuYyAoc3BhcmNfZnJhbWVfaW5mbyk6IENvbWJpbmUgbWVtYmVycyBncF9zcF9vZmZzZXQgYW5kCisJZnBfc3Bfb2Zmc2V0IGludG8gcmVnX29mZnNldC4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKFJFVFVSTl9BRERSX1JFR05VTSk6IE5ldyBtYWNyby4KKwkoUkVUVVJOX0FERFJfTUFTSywgRlJBTUVfUE9JTlRFUl9NQVNLKTogTmV3IG1hY3Jvcy4KKwkoc3BhcmNfZmxhdF9jb21wdXRlX2ZyYW1lX2luZm8pOiBSZW5hbWUgbG9jYWwgbWFzayB0byBnbWFzay4KKwlPbmx5IGVuc3VyZSByZWcgc2F2ZSBhcmVhIGlzIDggYnl0ZSBhbGlnbmVkIGlmIG5lY2Vzc2FyeS4KKwkoc3BhcmNfZmxhdF9zYXZlX3Jlc3RvcmUpOiBOZXcgYXJndW1lbnRzIGJhc2VfcmVnLCBvZmZzZXQsIGdtYXNrLAorCWFuZCBmbWFzay4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuICBObyBsb25nZXIgdXNlICVnMiB0byBzYXZlIHJlZ3MKKwlpbiBiaWcgc3RhY2sgZnJhbWVzLgorCShzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IERlbGV0ZSBsb2NhbCB0c2l6ZS4KKwlSZW9yZGVyIHN0b3Jpbmcgb2YgcHJldmlvdXMgZnJhbWUgcG9pbnRlciBhbmQgcmV0dXJuIGFkZHJlc3MgcmVnIHRvCisJbWFrZSBpdCBlYXNpZXIgZm9yIGdkYiB0byBpZGVudGlmeSBmbGF0IGZ1bmN0aW9ucy4gIERlY3JlbWVudCAlc3AKKwl0d2ljZSB3aGVuIHNhdmluZyBjYWxsLXNhdmVkIHJlZ3MgaW4gYmlnIGZyYW1lcy4KKwlDb3VudCBmcCByZWdzIGFzIDQgYnl0ZXMgaW4gYXNzZW1ibGVyIGNvbW1lbnQuCisJKHNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2Ugd2hlbiByZXN0b3JpbmcKKwljYWxsLXNhdmVkIHJlZ3MuCisKK1R1ZSBPY3QgMTggMTk6MzM6NTUgMTk5NCAgTWlrZSBDb2xsaXNvbiAgKGNvbGxpc29uQHN3LnN0cmF0dXMuY29tKQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvcnJlY3RseSBjb21wdXRlIGdyb3VwIGFkZGl0aW9uYWwgbmVlZHMgd2hlbgorCXRoZSByZXR1cm4gcmVnaXN0ZXIgY2Fubm90IGJlIHVzZWQgYXMgYSBzcGlsbCByZWdpc3Rlci4KKworVHVlIE9jdCAxOCAxNjoxNzoyNiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIG1pcHMuaCAoQVNNX1NQRUMpOiBQYXNzIC1tY3B1PSBvcHRpb24gdG8gR05VIGFzLgorCitUdWUgT2N0IDE4IDA4OjM5OjQ5IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogQ2FsbCBtYXJrX3VzZWRfcmVncyB0byBzaG93IGdsb2JhbCByZWdzCisJdXNlZCBieSBjYWxsLgorCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogRG9uJ3QgY29tYmluZSBpbnRvIENBTExfSU5TTiB3aGVyZQorCURFU1QgaXMgYSBnbG9iYWwgcmVnLgorCisJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBTYXZlIGltbWVkaWF0ZV9zaXplX2V4cGFuZAorCWFuZCBpbml0aWFsaXplIGl0IHRvIHplcm8gaW4gY2FzZSBuZXN0ZWQgZnVuY3Rpb24uCisKKwkqIHBhLmMgKG5vbl9oYXJkX3JlZ19vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCSogcGEubWQgKHJlbG9hZF97aW4sb3V0fSopOiBSZXBsYWNlIGdlbmVyYWxfb3BlcmFuZCB3aXRoCisJbm9uX2hhcmRfcmVnX29wZXJhbmQuCisKK0ZyaSBPY3QgMTQgMTg6MzU6MzAgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCisKKwkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFRyZWF0IGZpbGVzIHdpdGggYW4gZXh0ZW5zaW9uIG9mIC5jKysKKwlhcyBDKysgY29kZS4KKworTW9uIE9jdCAxNyAxOToyMTo1NyAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogY29uZmlndXJlIChyczYwMDAtaWJtLWFpeDQuMSopOiBOZXcgY29uZmlndXJhdGlvbi4KKwkqIHJzNjAwMC9haXg0MS5oOiBOZXcgZmlsZS4KKworTW9uIE9jdCAxNyAxOToxNToxNCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIHZhLW1pcHMuaCAodmFfYXJnKTogQWRkIGxpdHRsZSBlbmRpYW4gbWlwczMgc3VwcG9ydC4KKworCSogc3BhcmMuaCAoUkVUVVJOX0lOX01FTU9SWSk6IFJldHVybiB0cnVlIGZvciBUQ21vZGUgdmFsdWVzLgorCisJKiBSRUFETUUuSVJJWDU6IERlbGV0ZS4KKwkqIGluc3RhbGwudGV4aTogVXBkYXRlIElyaXggNSBkZWJ1Z2dpbmcgaW5mby4KKworCSogbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IE9ubHkgZW1pdCBsaW5lIG51bWJlciB3aGVuIFNEQl9ERUJVRy4KKworCSogY29uZmlndXJlOiBEZWxldGUgbmV3IGFyZ3VtZW50LCAtLW5vZ3Vlc3MuICBEZWZhdWx0IGJ1aWxkIGZyb20KKwlob3N0IGlmIGhvc3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UgZ3Vlc3MgYnVpbGQuICBGaXggdHlwbyBpbgorCXNldHRpbmcgYnVpbGQgZnJvbSBob3N0LgorCitNb24gT2N0IDE3IDE1OjU0OjU2IDE5OTQgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCwgZW1pdF9saWJyYXJ5X2NhbGwsIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKToKKwlBbGx3YXlzIGFkanVzdCBjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSwgZXZlbiAjaWZuZGVmCisJQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTLiAgKFVzZWZ1bCBmb3Igc3RhY2sgb3ZlcmZsb3cgY2hlY2tpbmcuKQorCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUpOiAgVXBkYXRlIGNvbW1lbnQuCisKK01vbiBPY3QgMTcgMTg6NDk6MDEgMTk5NCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwkqIGNjY3AuYyAocmVzY2FuKTogUHJlc2VydmUgbmV3bGluZXMgYWZ0ZXIgbWFjcm8gbmFtZXMgYXQgdGhlIHRvcCBsZXZlbAorCXNpbmNlIHRoaXMgaXMgbW9yZSBsaWtlbHkgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggbGluZSBudW1iZXJzLgorCitNb24gT2N0IDE3IDExOjMxOjQyIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZ2VuX3JlbG9hZCk6IFJlbmFtZWQgZnJvbSBnZW5faW5wdXRfcmVsb2FkLgorCShlbWl0X3JlbG9hZF9pbnNucyk6IERlbGV0ZSBTRUNPTkRBUllfTUVNX05FRURFRCBjYXNlIGZvciBpbnB1dAorCXJlbG9hZHMgdGhhdCBjYW4ndCBoYXBwZW4gYW5kIGRvZXNuJ3Qgd29yay4KKwlGaXggZXJyb3JzIGluIHVzZSBvZiByZWxvYWRfb3V0eHggaW5zbnMuCisJU2ltcGxpZnkgb3V0cHV0IHJlbG9hZCBjb2RlIGJ5IHVzaW5nIGdlbl9yZWxvYWQuCisJKiByZWxvYWQuaCAoZ2VuX3JlbG9hZCk6IFJlbmFtZWQgZnJvbSBnZW5faW5wdXRfcmVsb2FkLgorCitNb24gT2N0IDE3IDA5OjI2OjU3IDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZUBwZWdhc3VzLmVzcHJpdC5lYy5vcmcpCisKKwkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSwgY2FzZSBKVU1QX0lOU04pOiBEb24ndCBhYm9ydCBpZiBpbnZlcnRfZXhwCisJZmFpbHMuICBJbnN0ZWFkLCByZWRpcmVjdCB0aGUganVtcCBhcm91bmQgYW4gdW5jb25kaXRpb25hbCBicmFuY2guCisKK1N1biBPY3QgMTYgMDU6MDI6MjMgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKKworCSogZW1pdC1ydGwuYyAoYWRkX2luc25fe2JlZm9yZSxhZnRlcn0pOiBEb24ndCBhYm9ydCBiZWNhdXNlIEFGVEVSIHdhcworCWRlbGV0ZWQgd2hlbiBub3Qgb3B0aW1pemluZy4KKworRnJpIE9jdCAxNCAxOToyNjoyOCAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogSGFuZGxlIHNlY29uZGFyeSByZWxvYWQgd2hlbiBsb2FkaW5nCisJYSBjb25zdGFudCBpbnRvIFNBUi4KKworRnJpIE9jdCAxNCAxMDoyOTozMSAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3IChyd2VAcGVnYXN1cy5lc3ByaXQuZWMub3JnKQorCisJKiBmaXhpbmNsdWRlczogRml4IFgxMS9JbnRyaW5zaWMuaCBmb3IgUklTQ2lYIHRvIHJlbW92ZSBfX190eXBlIGZyb20KKwlYdE9mZnNldC4KKwlBZGQgYWxsIGZpbGVzIHRoYXQgcmVjZWl2ZSBzcGVjaWFsIGF0dGVudGlvbiB0byBSRVFVSVJFRCwgc28gdGhhdAorCWRlcGVuZGVudCBjb3BpZXMgYXJlIGRvbmUgaWYgbmVjZXNzYXJ5LgorCisJKiBnZXRwd2QuYzogQWx3YXlzIHVzZSBnZXR3ZCBpZiBIQVZFX0dFVFdEIGlzIGRlZmluZWQuCisJKiBhcm0veG0tYXJtLmg6IERlZmluZSBIQVZFX0dFVFdELgorCisJKiBhcm0veC1yaXNjaXgsIGFybS90LXJpc2NpeDogTmV3IGZpbGVzCisJKiBjb25maWd1cmUgKGFybS0qLXJpc2NpeCopOiBVc2UgdGhlbS4KKwkKK1RodSBPY3QgMTMgMTc6MTI6MjcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBpOTYwLm1kIChjYWxsLCBjYWxsX2ludGVybmFsLCBjYWxsX3ZhbHVlLCBjYWxsX3ZhbHVlX2ludGVybmFsKToKKwlVc2UgbWVtb3J5X29wZXJhbmQgbm90IGdlbmVyYWxfb3BlcmFuZC4KKworCSogb3B0YWJzLmMgKGV4cGFuZF9maXgpOiBDb3JyZWN0IHR5cG8gd2l0aCBGSVgvVU5TSUdORURfRklYCisJUkVHX05PVEVTLgorCitUaHUgT2N0IDEzIDEwOjQ0OjMyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZ2VuYXR0cnRhYi5jIChvcHRpbWl6ZV9hdHRycyk6IERvbid0IGRvIGFueXRoaW5nIGlmCisJbnVtX2luc25fZW50cyBpcyB6ZXJvLgorCitXZWQgT2N0IDEyIDE5OjA2OjQ4IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogbWlwcy9taXBzLmMgKG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogSGFuZGxlIHR5cGVzIHRoYXQgbmVlZAorCWNvbnN0cnVjdGluZy4gIFJlbmFtZSBUWVBFIHRvIFBBU1NFRF9UWVBFIGFuZCB1c2UgY29uc2lzdGVudGx5LgorCitXZWQgT2N0IDEyIDExOjMyOjA1IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZ2VuYXR0cnRhYi5jIChudW1faW5zbl9lbnRzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KKwkocmVtb3ZlX2luc25fZW50KTogRGVjcmVtZW50IG51bV9pbnNuX2VudHMuCisJKGluc2VydF9pbnNuX2VudCk6IEluY3JlbWVudCBudW1faW5zbl9lbnRzLgorCShvcHRpbWl6ZV9hdHRycyk6IFVzZSB4bWFsbG9jIHRvIGFsbG9jYXRlIGFsbCB0aGUgYXR0cl92YWx1ZV9saXN0CisJc3RydWN0dXJlcyBhdCBvbmNlLCByYXRoZXIgdGhhbiB1c2luZyBhbGxvY2EgZm9yIGVhY2ggb25lLgorCitXZWQgT2N0IDEyIDA5OjE3OjM0IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jICg/P2hmMl9saWJmdW5jKTogRGVmaW5lIGxpa2UgPz9zZjJfbGliZnVuYy4KKwkoZW1pdF9mbG9hdF9saWJfY21wKTogQ2FsbCBIRm1vZGUgbGlicmFyeSBmdW5jdGlvbnMuCisJKGluaXRfb3B0YWJzKTogU2V0IG5hbWVzIGZvciBIRm1vZGUgY29tcGFyaXNvbiBmdW5jdGlvbnMuCisJKiBleHByLmggKD8/aGYyX2xpYmZ1bmMpOiBBZGQgZGVjbGFyYXRpb25zLCBsaWtlICA/P3NmMl9saWJmdW5jLgorCitUdWUgT2N0IDExIDE5OjIwOjQ4IDE5OTQgIERvdWdsYXMgUnVwcCAgKGRydXBwQGNzLndhc2hpbmd0b24uZWR1KQorCisJKiB3aW5udC9sZC5jIChtYWluKTogUGFzcyAtZGVidWc6ZnVsbCAtZGVidWd0eXBlOmNvZmYuCisJKiB3aW5udC90LXdpbm50OiBSZXdvcmsgcnVsZXMgZm9yIGxkLgorCSogaTM4Ni9jb25maWctbnQuYmF0OiBSZW5hbWVkIGZyb20gY29uZmlnL2kzODYvY29uZmlnLXdpbm50LmJhdC4KKwlNYWtlIHNwZWNpZmljIGZvciB4ODYsIG5vdCBhbGwgd2lubnQ7IGNoYW5nZSBmaWxlbmFtZXMuCisJKiBpMzg2L2NvbmZpZy1udC5zZWQ6IFJlbW92ZSAtZyBmcm9tIENGTEFHUy4KKwlSZWZsZWN0IGNoYW5nZXMgdG8gdC13aW5udCBhbmQgb3RoZXIgbWlub3IgY2hhbmdlcy4KKwkqIGkzODYveC13aW5udDogUmVuYW1lZCBmcm9tIHdpbm50L3gtd2lubnQuCisJKiBpMzg2L2NvbmZpZy1udC5zZWQ6IFJlbmFtZWQgZnJvbSBjb25maWcvd2lubnQvdG9wLnNlZC4KKwkKK1R1ZSBPY3QgMTEgMTg6NDA6NDEgMTk5NCAgUGV0ZXIgU2NoYXVlciAgKFBldGVyLlNjaGF1ZXJAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKKworCSogcnM2MDAwLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBBbHdheXMgcHV0IG91dCAubGdsb2JsCisJZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisKK01vbiBPY3QgMTAgMTk6MTk6NTEgMTk5NCAgQWxleCBULiBSYW1vcyAgKHJhbW9zQGVuZ3IubGF0ZWNoLmVkdSkKKworCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBBZGQgVEltb2RlIGNvbnZlcnNpb25zLgorCitNb24gT2N0IDEwIDE4OjQ2OjQ0IDE5OTQgIEFsZXggRHJleXplbiAgKGFsZXhAYWxleC5qZi5pbnRlbC5jb20pCisKKwkqIG9wdGFicy5jIChleHBhbmRfZmxvYXQpOiBDb3B5IFRFTVAgdG8gVEFSR0VUIHdoZW4KKwltYWtpbmcgcmVjdXJzaXZlIGNhbGwgYW5kIGFkanVzdGluZy4KKworTW9uIE9jdCAxMCAwNzoxMDoyNSAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9saW51eC5oIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogRG8gbm90IGRlZmluZSBhcyAwIGlmCisJTElOVVhfRUxGIGlzIGRlZmluZWQuCisJKHBlcmZvcm0uaCk6IEluY2x1ZGUgcGVyZm9ybS5oIHRvIGRlZmluZSBhc20gc3RhdGVtZW50cyB0byB1c2UgZm9yCisJbGliZ2NjMS5hIGJ1aWxkcy4KKworCSogaTM4Ni9saW51eGVsZi5oIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogRGVmaW5lIGFzIDEuCisJKFJFVFVSTl9JTl9NRU1PUlkpOiBEb24ndCBkZWZpbmUuCisKK1N1biBPY3QgIDkgMTE6NDk6MjAgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvaTM4Ni5tZCAobW92c2ZfbWVtKTogQWRkICYgY29uc3RyYWludCwgc28gdGhhdCB0aGUgc2NyYXRjaAorCXJlZ2lzdGVyIGRvZXMgbm90IGNsb2JiZXIgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisKK1N1biBPY3QgIDkgMTI6NDA6NDMgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKKworCSogYXJtLm1kIChyZWxvYWRfb3V0ZGYpOiBEb24ndCBjYWxsIGdlbl9hZGRzaTMgaWYgdGhlIGFkZHJlc3MgaXMganVzdAorCWEgcmVnaXN0ZXIuCisKK1NhdCBPY3QgIDggMTE6MTY6NTAgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBvYmpjL2FyY2hpdmUuYyAoX19vYmpjX2ZyZWUpOiBOZXcgZnVuY3Rpb24uCisJKF9fb2JqY19maW5pc2hfcmVhZF9yb290X29iamVjdCk6IFVzZSBpdC4KKworRnJpIE9jdCAgNyAxOToyMzowMyAxOTk0ICBKLlQuIENvbmtsaW4gIChqdGNAY3lnbnVzLmNvbSkKKworCSogZ2luY2x1ZGUvc3RkZGVmLmg6IE5ldHdhcmUgdXNlcyBfU0laRV9UX0RFRklORURfLCBfV0NIQVJfVF9ERUZJTkVEXy4KKworRnJpIE9jdCAgNyAxMjo0NTo0MyAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9pMzg2LmMgKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogRGlzYWJsZSBTVUJSRUdzIGFzIGVpdGhlcgorCXRoZSBpbmRleCBvciBiYXNlIHJlZ2lzdGVyLgorCitGcmkgT2N0ICA3IDA4OjI0OjQ0IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGkzODYvZ251LmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIF9fSFVSRF9fLgorCisJKiBjb2xsZWN0Mi5jIChteV9zdHJlcnJvcik6IElmIEhBVkVfU1RSRVJST1IgZGVmaW5lZCwgY2FsbCBzdHJlcnJvci4KKwkqIHhtLWdudS5oIChIQVZFX1NUUkVSUk9SKTogRGVmaW5lLgorCisJKiBmdW5jdGlvbi5jIChwcmVzZXJ2ZV90ZW1wX3Nsb3RzKTogSWYgWCBjYW5ub3QgYmUgYSB0ZW1wCisJc2xvdCwgcHJlc2VydmUgYWxsIHRoaW5ncyB3aG9zZSBhZGRyZXNzIHdhcyB0YWtlbiBhdCB0aGUKKwlwcmVzZW50IGxldmVsLgorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcCk6IEFib3J0IGlmIFNJWkUgPT0gLTEuCisKKwkqIGV4cHIuYyAoc2FmZV9mcm9tX3ApOiBJZiBFWFAgaGFzIGEgdmFyaWFibGUgc2l6ZSwgYXNzdW1lIHNhZmUuCisJKHByZWV4cGFuZF9jYWxscyk6IERvbid0IHByZWV4cGFuZCBhIGNhbGwgdGhhdCByZXR1cm5zIGEgdmFyaWFibGUtCisJc2l6ZWQgb2JqZWN0LgorCisJKiBlbWl0LXJ0bC5jIChhZGRfaW5zbl97YWZ0ZXIsYmVmb3JlfSk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KKworVGh1IE9jdCAgNiAwOToxODoyOCAxOTk0ICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBuZXh0LmNvbSkKKworCUFkYW0gRmVkb3IgKGZlZG9yQGhvcHBlci5jb2xvcmFkby5lZHUpCisJKiBvYmpjL2FyY2hpdmUuYyAoX19vYmpjX2ZpbmlzaF9yZWFkX3Jvb3Rfb2JqZWN0KTogRGVsYXkgZnJlZWluZworCW9mIGJhY2stcGF0Y2ggbGlzdC4KKworCUFuZHJldyBNY0NhbGx1bSAobWNjYWxsdW1AY3Mucm9jaGVzdGVyLmVkdSkKKwkqIG9iamMvb2JqYy5oIChCT09MKTogQ2hhbmdlZCBmcm9tIGNoYXIgdG8gdW5zaWduZWQgY2hhci4KKworVGh1IE9jdCAgNiAwODoxNzowNCAxOTk0ICBTdGFuIENveCAgKGNveHNAZGctcnRwLmRnLmNvbSkKKworCSogbTg4ay9tODhrLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IElmIG9wZXJhbmQxIGlzIGFuIGludmFsaWQgUElDCisJIGFkZHJlc3MsIHRoZW4gbGVnaXRpbWl6ZSBpdCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKworVGh1IE9jdCAgNiAwNjo1NDowMyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoY3NlX2luc24pOiBEb24ndCBjYWxsIGZvcmNlX2NvbnN0X21lbSBvbiAoY29uc3QgKHRydW5jYXRlKSkuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IERvbid0IGNsb2JiZXIgVEVNUCB3aXRoIGFkZHJlc3MuCisKKwkqIHJlb3JnLmMgKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IFVwZGF0ZSBUSFJFQUQgaWYgaXQgaXMgc3BsaXQuCisKKwkqIGZ1bmN0aW9uLmMgKHN0cnVjdCB0ZW1wX3Nsb3QpOiBOZXcgZmllbGQgYWRkcl90YWtlbi4KKwkoYXNzaWduX3N0YWNrX3RlbXApOiBJbml0aWFsaXplIGl0LgorCShtYXJrX3RlbXBfYWRkcl90YWtlbik6IE5ldyBmdW5jdGlvbi4KKwkocHJlc2VydmVfdGVtcF9zbG90cyk6IERlY3JlbWVudCBsZXZlbCBvZiB0aGluZ3MgYXQgc2FtZSBsZXZlbAorCWJ1dCB3aG9zZSBhZGRyZXNzIGhhcyBiZWVuIHRha2VuLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBRERSX0VYUFIpOiBDYWxsIG1hcmtfdGVtcF9hZGRyX3Rha2VuLgorCitXZWQgT2N0ICA1IDE0OjE3OjM5IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIENPTVBPTkVOVF9SRUYpOiBEb24ndCBkaWUgaWYgdGhlIENPTlNUUlVDVE9SCisJZG9lc24ndCBpbml0aWFsaXplIHRoZSBmaWVsZCB3ZSB3YW50LgorCitXZWQgT2N0ICA1IDExOjM4OjQ4IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2kzODYuYyAobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IENoYW5nZXMgdG8gc3VwcG9ydAorCUxBQkVMX1JFRiByZWZlcmVuY2VzIHdoZW4gdXNpbmcgLWZwaWMuCisJKG91dHB1dF9waWNfYWRkcl9jb25zdCk6IERpdHRvLgorCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBEaXR0by4KKworCSogaTM4Ni9pMzg2Lm1kIChtb3ZzaSBpbnNuKTogQ2hhbmdlcyB0byBzdXBwb3J0IExBQkVMX1JFRgorCXJlZmVyZW5jZXMgd2hlbiB1c2luZyAtZnBpYy4KKwkobW92c2lfbGVhKTogTmFtZSBpbnNuIHN1cHBvcnRpbmcgbGVhIGluc3RydWN0aW9uIHNvIGl0IHNob3dzIHVwCisJbW9yZSBjbGVhcmx5IHdoZW4gZG9pbmcgLWRwLgorCitXZWQgT2N0ICA1IDA2OjU2OjM2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlb3JnLmMgKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IFVwZGF0ZSBUSFJFQUQgaWYgZGVsZXRpbmcgZmlyc3QKKwlpbnNuIGluIGl0LgorCitXZWQgT2N0ICA1IDAxOjE5OjE0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZ3VyZSAoaVszNDVdODYtKi1nbnUqKTogU2V0IHhtX2ZpbGU9aTM4Ni94bS1nbnUuaC4KKwkqIGNvbmZpZy9pMzg2L3htLWdudS5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZy94bS1nbnUuaDogTmV3IGZpbGUuCisJKiBjb25maWcvaTM4Ni9nbnUuaDogTW92ZSAjaW5jbHVkZSA8ZmNudGwuaD4gb3V0IG9mIGhlcmUsIGludG8KKwljb25maWcveG0tZ251LmguCisKK1R1ZSBPY3QgIDQgMjM6MTk6MjggMTk5NCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHBhc3RhLm9zZi5vcmc+CisKKwkqIHByb3RvaXplLmMgKFBPU0lYIGluY2x1ZGVzKTogSWYgUE9TSVggaXMgZGVmaW5lZCwgaW5jbHVkZQorCXN5cy93YWl0LmggdG8gZ2V0IFdJRlNJR05BTEVELCBXVEVSTVNJRywgV0lGRVhJVEVELCBhbmQKKwlXRVhJVFNUQVRVUy4KKworVHVlIE9jdCAgNCAyMTo0ODowMiAxOTk0ICBNaWNoYWVsIEkgQnVzaG5lbGwgIDxtaWJAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnL2kzODYvZ251Lmg6IEluY2x1ZGUgPGZjbnRsLmg+IHRvIGdldCBPX1JET05MWSBkZWZpbml0aW9uLgorCSogZ2NjLmMgKE9fUkRPTkxZKTogRGVmaW5lIG1hY3JvIGlmZiBub3QgYWxyZWFkeSBkZWZpbmVkLgorCShyZWFkX3NwZWNzKTogU2Vjb25kIGFyZyB0byBvcGVuIHNob3VsZCBiZSBPX1JET05MWSwgbm90IGNvbnN0YW50IDAuCisKK1R1ZSBPY3QgIDQgMTk6MDY6MzggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogUHJvcGVybHkgc2NhbiBpbnNucyB3aGVuCisJYnJhbmNoIGlzIGF0IHN0YXJ0IG9mIHNlcXVlbmNlLgorCitUdWUgT2N0ICA0IDE2OjUzOjU0IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZ2NjLmMsIGNvbGxlY3QyLmMsIHByb3RvaXplLmMgKFdJRlNJR05BTEVEKTogRGVmaW5lIGlmIG5vdAorCWFscmVhZHkgZGVmaW5lZC4KKwkoV1RFUk1TSUcsIFdJRkVYSVRFRCwgV0VYSVRTVEFUVVMpOiBMaWtld2lzZS4KKwkqIGdjYy5jIChleGVjdXRlKTogVXNlIHRoZW0uCisJKiBjb2xsZWN0Mi5jIChkb193YWl0KTogTGlrZXdpc2UuCisJKiBwcm90b2l6ZS5jIChnZW5fYXV4X2luZm9fZmlsZSk6IExpa2V3aXNlLgorCitUdWUgT2N0ICA0IDE2OjM4OjA2IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBwYXN0YS5vc2Yub3JnPgorCisJKiBpMzg2L2kzODYuaCAoUkVUVVJOX0lOX01FTU9SWSk6IERlZmluZSBzbyB0aGF0IGxhcmdlIHR5cGVzIHN1Y2gKKwlhcyBjb21wbGV4IGRvdWJsZSB2YWx1ZXMgZ2V0IHJldHVybmVkIGxpa2Ugc3RydWN0dXJlcyBkbywgYW5kCisJZG9uJ3Qgb3ZlcndyaXRlICVlYnguCisKK1R1ZSBPY3QgIDQgMTU6NTg6MjEgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBseW54LW5nLmgsIGx5bnguaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19JTkZPKTogQWRkIHVuZGVmIGJlZm9yZQorCWRlZmluZS4KKworVHVlIE9jdCAgNCAwNToxMjowMiAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZy5zdWI6IFRyYW5zbGF0ZSAtZ251L2xpbnV4KiB0byAtbGludXgqLgorCitNb24gT2N0ICAzIDExOjQzOjQ1IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogY29uZmlnLnN1YjogQWRkIHN1cHBvcnQgZm9yIE1JUFMgdmFyaWFudHM6IG1pcHM2NCwgbWlwc2VsLAorCW1pcHM2NGVsLCBtaXBzNjRvcmlvbiwgbWlwczY0b3Jpb25lbCwgbWlwczMqLgorCitTdW4gT2N0ICAyIDE4OjI2OjM0IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQorCisJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBSZW5hbWVkIGZyb20KKwlwdXNoX2Z1bmN0aW9uX2NvbnRleHQsIGFkZHMgYXJndW1lbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbmV3CisJZnVuY3Rpb24gaXMgbm90IGEgbmVzdGVkIGZ1bmN0aW9uLgorCShwdXNoX2Z1bmN0aW9uX2NvbnRleHQpOiBDYWxsIGl0LgorCShwb3BfZnVuY3Rpb25fY29udGV4dHssX2Zyb219KTogU2ltaWxhcmx5LgorCisJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBBZGQgYXJndW1lbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbmV3CisJZnVuY3Rpb24gaXMgbm90IGEgbmVzdGVkIGZ1bmN0aW9uLgorCShyZXN0b3JlX3RyZWVfc3RhdHVzKTogRGl0dG8uCisKK1N1biBPY3QgIDIgMTg6MDU6MzcgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKGlbMzRdODYtKik6IENoYW5nZSB0byBpWzM0NV04Ni0qLgorCSh0YXJnZXRfY3B1X2RlZmF1bHQpOiBUcmVhdCBpNTg2IGFzIGFuIGk0ODYgKGZvciBub3cpLgorCitTdW4gT2N0ICAyIDEwOjI1OjUxIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZUBwZWdhc3VzLmVzcHJpdC5lYy5vcmcpCisKKwkqIGFybS5tZCAobW92c2YpOiBJZiByZWxvYWRpbmcsIGNyZWF0ZSBhIHNjcmF0Y2ggZnJvbSB0aGUgdGFyZ2V0IGZvcgorCWxvYWRpbmcgYSBjb25zdGFudCBpbnRvIGludGVnZXIgcmVncy4KKwkobW92ZGYpOiBMaWtld2lzZS4KKworCVN1cHBvcnQgZm9yIHZhcmlhbnRzIHRoYXQgZmF1bHQgb24gdW5hbGlnbmVkIGFkZHJzOgorCSogYXJtLmggKFRBUkdFVF9TSE9SVF9CWV9CWVRFUyk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTKTogUmVjb2duaXplIHN3aXRjaGVzIC1tW25vLV1zaG9ydC1sb2FkLWJ5dGVzLgorCShUQVJHRVRfREVGQVVMVCk6IE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28uCisJKFBST01PVEVfTU9ERSk6IFByb21vdGUgSEltb2RlIHVuc2lnbmVkIGlmIFRBUkdFVF9TSE9SVF9CWV9CWVRFUy4KKwkoU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUyk6IE5lZWQgYSBzY3JhdGNoIGZvciByZWxvYWRpbmcgSEltb2RlIGlmCisJVEFSR0VUX1NIT1JUX0JZX0JZVEVTLgorCSogYXJtLmMgKGFybV9yZWxvYWRfaW5faGkpOiBOZXcgZnVuY3Rpb24uCisJKiBhcm0ubWQgKHplcm9fZXh0ZW5kaGlzaTIsIGV4dGVuZGhpc2kyKTogRXhwYW5kIHRvIHN1aXRhYmxlIGJ5dGUKKwlzZXF1ZW5jZSB3aGVuIFRBUkdFVF9TSE9SVF9CWVRFUyBhbmQgbG9hZGluZyBhIG1lbS4KKwkobW92aGlfYnl0ZXMsIGV4dGVuZGhpc2kyX21lbSk6IE5ldyBleHBhbmRzLgorCShtb3ZoaSk6IENhbGwgbW92aGlfYnl0ZXMgdG8gbG9hZCBhIHNob3J0IGZyb20gbWVtb3J5IGlmIAorCVRBUkdFVF9TSE9SVF9CWV9CWVRFUy4KKwkoYWxsIG1hdGNoZXJzIGxvYWRpbmcgYSBzaG9ydCBmcm9tIG1lbW9yeSk6IERvbid0IG1hdGNoIGlmIAorCVRBUkdFVF9TSE9SVF9CWV9CWVRFUy4KKwkobWF0Y2hlciBmb3IgbW92aGkgd2hlbiBUQVJHRVRfU0hPUlRfQllfQllURVMpOiBOZXcgcGF0dGVybiB0byBjb3ZlciAKKwlyZW1haW5pbmcgdmFsaWQgY2FzZXMuCisKK1N1biBPY3QgIDIgMDg6NTQ6MzAgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVnLXN0YWNrLmMgKHN1YnN0X3N0YWNrX3JlZ3MpOiBDaGVjayBmb3IgTk9URSB0byBzZWUgaWYgaW5zbiB3YXMKKwlkZWxldGVkLgorCisJKiByZW9yZy5jIChmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogVXBkYXRlIFRIUkVBRCBpZiBkZWxldGluZworCWl0cyBmaXJzdCBpbnNuLgorCisJKiByZWctc3RhY2suYyAoZGVsZXRlX2luc25fZm9yX3N0YWNrZXIpOiBEb24ndCBzZXQgSU5TTl9ERUxFVEVEX1AKKwlvbiBOT1RFX0lOU05fREVMRVRFRC4KKworU2F0IE9jdCAgMSAyMDo0MjozMyAxOTk0ICBDaGlwIFNhbHplbmJlcmcgIDxjaGlwQGZpbi51dWNwPgorCisJKiBzY280LmggKENQUF9QUkVERUZJTkVTKTogUmVtb3ZlIGkzODYsIHVuaXguCisJKENQUF9TUEVDKTogQWRkIHRoZW0gaGVyZSwgc28gdGhhdCB0aGV5J3JlIHVuZGVmaW5lZCBpZiAtYW5zaS4KKwlBbHNvIGFkZCBfaTM4NiBhbmQgX3VuaXgsIHdoaWNoIGFyZSBhbHdheXMgZGVmaW5lZC4KKwkqIHgtc2NvIChDTElCKTogQWRkICItbG1hbGxvYyIuCisJKEFMTE9DQSk6IERlZmluZSBhcyAiLWxQVyIuCisJKiB4LXNjbzQgKENDLCBPTERDQywgUkNDRkxBR1MsIENDTElCRkxBR1MsIENMSUIsIEFMTE9DQSk6IEZyb20geC1zY28uCisJKFhfQ0ZMQUdTKTogUmVtb3ZlLgorCitTYXQgT2N0ICAxIDE0OjI3OjQ1IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2kzODYubWQgKG1vdnNmX3B1c2gzODYpOiBSZW5hbWUgdG8gbW92c2ZfcHVzaF9ub21vdmUuCisJKG1vdmRmX25vcm1hbCk6IFByZWZlciB0byB1c2UgZmxvYXQgcmVnaXN0ZXJzIHJhdGhlciB0aGFuIGdlbmVyYWwKKwlwdXJwb3NlIHJlZ2lzdGVycy4KKworU2F0IE9jdCAgMSAwNzowMToxMCAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3IChyd2VAcGVnYXN1cy5lc3ByaXQuZWMub3JnKQorCisJKiBjLWRlY2wuYyAoc2hhZG93X2xhYmVsKTogRW1pdCBhbiBlcnJvciBpZiB0aGUgbGFiZWwgaXMgYWxyZWFkeQorCWRlY2xhcmVkIGF0IHRoaXMgbGFiZWwgc2NvcGUuIAorCitTYXQgT2N0ICAxIDA2OjQ0OjU4IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGFkZF9pbnNuX3tiZWZvcmUsYWZ0ZXJ9KTogQWJvcnQgaWYgaW5zZXJ0aW9uIHBvaW50IGlzCisJYSBkZWxldGVkIGluc24uCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIGRlbGV0aW5nIGEganVtcCwgcHJvcGVybHkgc2V0IE5FWFQuCisJKGR1cGxpY2F0ZV9sb29wX2V4aXRfdGVzdCk6IERvbid0IGluc2VydCBOT1RFX0lOU05fTE9PUF9WVE9QCisJYmVmb3JlIGRlbGV0ZWQgaW5zbjsgaW5zZXJ0IGZpcnN0LCB0aGVuIGRlbGV0ZS4KKworCSogZ2NjLmM6IEluc3RhbGwgb21pdHRlZCBodW5rIGZyb20gbGFzdCBkaWZmLgorCitGcmkgU2VwIDMwIDE4OjI2OjExIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGFkZF9pbnNuX2FmdGVyKTogQWJvcnQgaWYgY2FuJ3QgZmluZCBBRlRFUiBhbmQgaXQKKwloYXMgbm8gTkVYVF9JTlNOLgorCShhZGRfaW5zbl9iZWZvcmUpOiBOZXcgZnVuY3Rpb24uCisJKGVtaXRfe2luc24saW5zbnMsanVtcF9pbnNuLGNhbGxfaW5zbixiYXJyaWVyLG5vdGV9X2JlZm9yZSk6IENhbGwgaXQuCisKK0ZyaSBTZXAgMzAgMTc6MzM6NDEgMTk5NCAgRG91Z2xhcyBSdXBwICAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKKwkqIGNvbmZpZy5zdWIgKHdpbmRvd3NudCk6IEFsaWFzIGZvciB3aW5udC4KKwkod2lubnQpOiBOZXcgT1MgbmFtZS4KKwkqIGNvbmZpZ3VyZSAoZXh0cmFfcHJvZ3JhbXMpOiBOZXcsIGxpa2UgZXh0cmFfcGFydHMuCisJKGlbMzRdODYtKi13aW5udDMuMSk6IE5ldyBjb25maWd1cmF0aW9uLgorCSogZ2VuYXR0ci5jIChhdG9pKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgorCSogZ2V0cHdkLmM6ICNpZmRlZiBXSU5OVCwgaW5jbHVkZSBkaXJlY3QuaC4KKwkqIHNkYm91dC5jOiBEb24ndCBpbmNsdWRlIHN5bXMuaCBmb3Igd2lubnQuCisJKiB0b3BsZXYuYzogRG9uJ3QgaW5jbHVkZSB0aW1lcy5oIGZvciB3aW5udC4KKwkoZ2V0X3J1bl90aW1lKTogSnVzdCByZXR1cm4gemVybyBmb3Igd2lubnQuCisJKG1haW4pOiBEb24ndCBwcmludCBtZW1vcnkgdXNhZ2UgZm9yIE9TLzIgb3Igd2lubnQuCisJKiBjY2NwLmMgKG1haW4pOiBVc2UgRElSX1NFUEFSQVRPUiBpZiBkZWZpbmVkLgorCVVzZSAiSW5jbHVkZSIgZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdGVhZCBvZiBDUEFUSCBmb3Igd2lubnQuCisJKiBnY2MuYzogRG9uJ3QgaW5jbHVkZSBzeXMvZmlsZS5oIGZvciB3aW5udDsgdXNlIHByb2Nlc3MuaCBpbnN0ZWFkLgorCShjb25jYXQpOiBOb3cganVzdCBjb25jYXRzIHR3byB0aGluZ3M7IGFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKGNvbmNhdFszNDZdKTogTmV3IGZ1bmN0aW9ucy4KKwkoZGlyX3NlcGFyYXRvcl9zdHIpOiBOZXcgdmFyaWFibGUuCisJKGV4ZWNfcHJlZml4ZXMsIHN0YXJ0ZmlsZV9wcmVmaXhlcywgaW5jbHVkZV9wcmVmaXhlcyk6IFJlbmFtZWQKKwlmcm9tIHNhbWUgbmFtZXMgd2l0aG91dCBwbHVyYWw7IGFsbCB1c2VycyBjaGFuZ2VkLgorCShmaW5kX2FfZmlsZSwgcHJvY2Vzc19jb21tYW5kLCBkb19zcGVjXzEpOiBVc2UgRElSX1NFUEFSQVRPUi4KKwkoZmluZF9maWxlLCBpc19kaXJlY3RvcnksIG1haW4pOiBMaWtld2lzZS4KKwkobG9va3VwX2NvbXBpbGVyKTogSWYgT1MvMiwgZG8gY2FzZS1pbmRlcGVuZGVudCBzZWFyY2guCisJKGZpeF9hcmd2KTogTmV3IGZ1bmN0aW9uIG9uIHdpbm50LgorCShGSVhfQVJHVik6IE5ldyBtYWNybyBmb3Igc29tZSBzeXN0ZW1zOyB1c2UgaW5zdGVhZCBvZiBhcmd2LgorCSogaTM4Ni91bml4Lmg6IFRyZWF0IEFMTU9TVF9TVERDIGxpa2UgX19TVERDX18uCisJKEFTMkMpOiBOZXcgbWFjcm8uCisJKiBpMzg2LmMgKG91dHB1dF8zODdfYmluYXJ5X29wKTogVXNlIEFTMkMgaW5zdGVhZCBvZiBBUzIgd2l0aAorCW51bGwgZmlyc3QgYXJnLgorCSogY29uZmlnL3dpbm50L2NvbmZpZy1udC5iYXQsIGNvbmZpZy93aW5udC9sZC5jOiBOZXcgZmlsZXMuCisJKiBjb25maWcvd2lubnQve1t0eF0td2lubnQsIGNvbmZpZy93aW5udC90b3Auc2VkOiBOZXcgZmlsZXMuCisJKiBjb25maWcvd2lubnQvd2lubnQuaCwgY29uZmlnL3dpbm50L3htLXdpbm50OiBOZXcgZmlsZXMuCisJKiBpMzg2L3dpbm50LmgsIGkzODYveG0td2lubnQuaDogTmV3IGZpbGVzLgorCitUaHUgU2VwIDI5IDE5OjUzOjE0IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogc3BhcmMubWQgKG1vdmRmKzMpOiBIYW5kbGUgb3ZlcmxhcHBpbmcgcmVnaXN0ZXJzIGluIGRlZmluZV9zcGxpdC4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogQWRkICVaIHRvIGFsbCBjcHAgc3BlY3MuCisJKG5fcHJlcHJvY2Vzc29yX29wdGlvbnMsIHByZXByb2Nlc3Nvcl9vcHRpb25zKTogTmV3IHZhcmlhYmxlcy4KKwkocHJvY2Vzc19jb21tYW5kKTogSGFuZGxlIC1XcCBvcHRpb24uCisJKGRvX3NwZWNfMSk6IEhhbmRsZSAlWiBzcGVjLgorCisJKiBpOTYwL2k5NjAtY29mZi5oOiBOZXcgZmlsZS4KKwkqIHQtOTYwYmFyZTogTmV3IGZpbGUuCisJKiBjb25maWcuc3ViIChvcyk6IEFjY2VwdCBjb2ZmIGFzIGFuIE9TLgorCSogY29uZmlndXJlIChpOTYwLSotY29mZik6IE5ldyBjb25maWd1cmF0aW9uLgorCisJKiBleHByLmMgKHJlc3VsdF92ZWN0b3IpOiBVc2UgSU5DT01JTkdfUkVHTk8gd2hlbiAhc2F2ZXAgaW5zdGVhZAorCW9mIHdoZW4gc2F2ZXAuCisJKiBzcGFyYy5tZCAoY2FsbCk6IFVzZSBzdHJ1Y3QgdmFsdWUgcGF0dGVybiBpcyBzdHJ1Y3Qgc2l6ZSBpcyBub3QKKwllcXVhbCB0byB6ZXJvIGluc3RlYWQgb2YgZ3JlYXRlciB0aGFuIHplcm8uCisJKGNhbGwrNywgY2FsbCs4KTogTmV3IHBhdHRlcm5zIGZvciB1bnR5cGVkIGNhbGxzLgorCSh1bnR5cGVkX2NhbGwpOiBSZXZpc2UgdG8gZW1pdCBleHBsaWNpdCBydGwgZm9yIGFsbCBvcGVyYXRpb24uCisJRGVsZXRlIGZvdXIgb2xkIHBhdHRlcm5zIHRoYXQgbWF0Y2hlZCB0aGUgdW5leHBhbmRlZCB1bnR5cGVkX2NhbGwKKwlwYXR0ZXJuLgorCShibG9ja2FnZSk6IE5ldyBwYXR0ZXJuLgorCShmbHVzaF9yZWdpc3Rlcl93aW5kb3dzKTogTW9kaWZ5IGZyb20gMCB0byAxLgorCShnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUpOiBNb2RpZnkgZnJvbSAxIHRvIDIuCisJKGZsdXNoKTogTW9kaWZ5IGZyb20gMiB0byAzLgorCSogc3BhcmMuYyAoc3BhcmNfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogRkxVU0ggaXMgbm93IDMgbm90IDIuCisKKwkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogRm9yIEZVTkNUSU9OX0FSR19QQVNTX0JZX1JFRkVSRU5DRSwKKwlwYXNzIGFkZHJlc3MgdGhyb3VnaCBmb3JjZV9vcGVyYW5kIGJlZm9yZSB1c2luZyBpdC4KKworCSogaTk2MC5jIChpOTYwX3NldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBTdG9yZSBwYXJhbWV0ZXIgcmVnaXN0ZXJzCisJYXQgcHJvcGVyIG9mZnNldCBpbiBhcmd1bWVudCBibG9jay4KKworVGh1IFNlcCAyOSAxNjozOTozMiAxOTk0ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CisKKwkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBvZiBjbGVhbnVwcyB0aGF0IGNhbgorCWJlIGdlbmVyYXRlZCB3aGVuIGV4cGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZQorCXdpcGUgb3V0IHRoZSByZXR1cm4gdmFsdWUuCisKK1RodSBTZXAgMjkgMTM6MzU6MjQgMTk5NCAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgorCisJKiBleHByLmMgKGRvX2p1bXApOiBIYW5kbGUgY2xlYW51cHMgaW4gVFJVVEhfQU5ESUZfRVhQUiBhbmQKKwlUUlVUSF9PUklGX0VYUFIuCisKK1RodSBTZXAgMjkgMTM6MjM6NTYgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2NjLmMgKHN0cnVjdCBvcHRpb25fbWFwKTogU29ydCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCisJKHRyYW5zbGF0ZV9vcHRpb25zKTogSWdub3JlIG9wdGlvbiBvbmNlIGFuIGVycm9yIG9jY3Vycy4KKwlGaXggZXJyb3Igd2l0aCByZXZlcnNlZCAnYScgYW5kICdvJy4KKwlHaXZlIGVycm9yIGlmIHNwZWNpZmllZCBhYmJyZXZpYXRpb24gaXMgdW5hbWJpZ3VvdXMuCisKKwkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBXaGVuIGNvbnZlcnRpbmcgb2JqZWN0CisJdG8gdW5pb24sIGFsbG93IGNvbnZlcnRpbmcgdGhlIGNvbnN0YW50IHplcm8gaW50byBhIHBvaW50ZXIKKwltZW1iZXIgb2YgdGhlIHVuaW9uLgorCitXZWQgU2VwIDI4IDE5OjMzOjAxIDE5OTQgIEFsZXggVCBSYW1vcyAgKHJhbW9zQGVuZ3IubGF0ZWNoLmVkdSkKKworCSogbWFjaG1vZGUuZGVmIChQU0ltb2RlKTogV2lkZW5zIHRvIFBESW1vZGUuCisJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IEFkZGVkIGhhbmRsaW5nIG9mIFBESW1vZGUgY29udmVyc2lvbnMuCisKK1dlZCBTZXAgMjggMTk6MjQ6MTcgMTk5NCAgSC5KLiBMdSAgKGhqbEBueW5leHN0LmNvbSkKKworCSogY29uZmlndXJlOiBEb24ndCBtYWtlIG9iamMtcnVudGltZSBpZiBjcm9zcy1jb21waWxpbmcgZ2NjLgorCSogYnVpbGQtbWFrZSAoRklYSU5DTFVERVMpOiBTZXQgdG8gTWFrZWZpbGUuaW4uCisKK1dlZCBTZXAgMjggMTk6MTg6MTkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZnVuY3Rpb24uYyAodHJhbXBvbGluZV9hZGRyZXNzKTogQWRkIG1pc3NpbmcgY2FsbCB0byAKKwlyb3VuZF90cmFtcG9saW5lLgorCitXZWQgU2VwIDI4IDE4OjM0OjEzIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjb25maWcvc3ZyNC5oIChFU0NBUEVTKTogUHJpbnQgXHYgaW4gb2N0YWwgcmF0aGVyIHRoYW4gYXMgJ1x2JywKKwlzaW5jZSBzb21lIG9sZGVyIHZlcnNpb25zIG9mIGdhcyBkaWRuJ3QgYWNjZXB0IGl0LgorCitXZWQgU2VwIDI4IDE0OjI5OjIwIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IENvbW1lbnQgb3V0IGxvb3Agd2hpY2ggaGFuZGxlcyBzeW1ib2xpYyBsaW5rcyB0bworCWZpbGVzLiAgSXQgYXBwZWFycyB0byBub3Qgd29yaywgYW5kIHRvIGJlIHVubmVjZXNzYXJ5LgorCitUdWUgU2VwIDI3IDE5OjI3OjU2IDE5OTQgIE1hdHRoaWFzIFBmYWxsZXIgIChsZW9AbWFyY28uZGUpCisKKwkqIG5zMzJrLmggKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBPbmx5IGNhbGxzIG1heSBnbyB0aHJvdWdoIHRoZQorCVBMVC4gQWxsIGFkZHJlc3MgbG9hZHMsIGV2ZW4gZnVuY3Rpb24gYWRkcmVzcyBsb2FkcywgaGF2ZSB0byAKKwlnbyB0aHJvdWdoIHRoZSBHT1Qgb3IgZnVuY3Rpb24gYWRkcmVzc2VzIHdpbGwgbm90IGJlIHVuaXF1ZS4KKworVHVlIFNlcCAyNyAxOToyMDoxMiAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogY2NjcC5jIChuZXdsaW5lX2ZpeCwgbmFtZV9uZXdsaW5lX2ZpeCk6IERvbid0IHRyZWF0IFxyCisJc3BlY2lhbGx5IGhlcmU7IGl0IG9ubHkgY2F1c2VzIGJ1Z3MuICBUaGlzIHVuZG9lcyB0aGUKKwlNYXkgMTQgMTY6MDE6MTMgMTk5MCBjaGFuZ2UgdG8gbmV3bGluZV9maXggYW5kIG5hbWVfbmV3bGluZV9maXguCisKK1R1ZSBTZXAgMjcgMTk6MDI6NTUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbTg4ay5oIChBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogQWRkIG1pc3NpbmcgI3VuZGVmLgorCitUdWUgU2VwIDI3IDE4OjMyOjE3IDE5OTQgIFdpbGxpYW0gSi4gRWF0b24gICh3amVAaG9mZm1hbi5yc3RudS5iY20udG1jLmVkdSkKKworCSogZnVuY3Rpb24uYyAob3B0aW1pemVfYml0X2ZpZWxkKTogUHV0IGFueSBpbnNucyBtYWRlIGJ5CisJY2hhbmdlX2FkZHJlc3MgaW4gZnJvbnQgb2YgSU5TTi4KKwkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IERvbid0IHBhc3MgREVDTF9JTklUSUFMIHRvIHNldGptcF9wcm90ZWN0CisJaWYgaXQgaXMgZXJyb3JfbWFya19ub2RlLgorCisJKiBnZW5vdXRwdXQuYywgcmVsb2FkLmMgKG5fb2NjdXJyZW5jZXMpOiBNYWtlIGFyZyBpbnQsIG5vdCBjaGFyLgorCSogb2JqYy1hY3QuYyAod2Fybl93aXRoX21ldGhvZCk6IExpa2V3aXNlLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2ZpeCk6IENhbGwgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUuCisKK1R1ZSBTZXAgMjcgMTI6Mzk6MTAgMTk5NCAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiwgbGliZ2NjMi5jIChMX2VoKTogc29tZSBzdXBwb3J0IHJvdXRpbmVzIGZvciBDKysuCisKK01vbiBTZXAgMjYgMDY6NDU6MjAgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIDM4Ni9pMzg2Lm1kIChhZGRkaTMsIHN1YmRpMyk6IFJld3JpdGUgdG8gYWRkIGEgY2xvYmJlciBvZiBhCisJc2NyYXRjaCB2YXJpYWJsZSwgc28gdGhhdCBtZW1vcnkvbWVtb3JveSBhZGRzIGFuZCBzdWJ0cmFjdHMgY2FuIGJlCisJZG9uZSB1c2luZyBqdXN0IG9uZSBzY3JhdGNoIHJlZ2lzdGVyLiAgQWxzbywgZG9uJ3QgcmVxdWlyZSBvcDEgdG8KKwliZSB0aGUgc2FtZSBhcyBvcDAuCisKK0ZyaSBTZXAgMjMgMTk6MDM6MDkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogY29uZmlnL2kzODYvZ251LmggKExJQl9TUEVDKTogUmVtb3ZlIG1hY3JvLgorCitGcmkgU2VwIDIzIDE2OjExOjI2IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2x5bngtbmcuaCAoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IENvcHkgZGVmaW5pdGlvbiBmcm9tCisJaTM4Ni9seW54LmggdGhhdCBtYWtlcyBlYnggYmUgYSBjYWxsIGNsb2JiZXJlZCByZWdpc3Rlciwgc2luY2UKKwlzb21lIHN5c3RlbSBjYWxscyBldmlkZW50bHkgdHJhc2ggaXQuCisKK0ZyaSBTZXAgMjMgMTU6NTQ6NTMgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKG1pcHMtKnJpc2NvcyopOiBDaGFuZ2VkIHRvIG1pcHMtKi1yaXNjb3MqLgorCShtaXBzLSotcmlzY29zKi0qKTogRGVsZXRlZC4KKworCSogY3NlLmMgKGludmFsaWRhdGUpOiBOZXcgcGFyYW1ldGVyIEZVTExfTU9ERS4gIEFsbCBjYWxsZXJzCisJY2hhbmdlZC4KKwkoc2V0X25vbnZhcnlpbmdfYWRkcmVzc19jb21wb25lbnRzKTogTW9kaWZ5IGluaXRpYWwgY29tbWVudC4KKwkoY3NlX2luc24pOiBXaGVuIGNhbGwgaW52YWxpZGF0ZSBmb3IgZGVzdCwgdXNlIHRoZSBhY3R1YWwgZGVzdCBub3QKKwlpbm5lcl9kZXN0LgorCitUaHUgU2VwIDIyIDE4OjU2OjE5IDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBjeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IFNwZWNpYWwgY2FzZSBmb3Igc2lnbmVkIENFSUxfRElWX0VYUFIKKwl3aGVuIGRpdmlzb3IgaXMgcG93ZXIgb2YgMi4KKworVGh1IFNlcCAyMiAxMjoyODo1MyAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogZml4aW5jLnN2cjQ6IEZpeCBzaXplX3QsIHB0cmRpZmZfdCBhbmQgd2NoYXJfdCBsaWtlIGZpeGluY2x1ZGVzCisJZG9lcy4gIFVzZSBleHRlcm4gaW5saW5lIHJhdGhlciB0aGFuIHN0YXRpYyBpbmxpbmUgaW4gYnl0ZW9yZGVyLmguCisKK1RodSBTZXAgMjIgMTI6MjI6MDMgMTk5NCAgU3RldmUgRHVtICAoc3RldmVfZHVtQG1lbnRvcmcuY29tKQorCisJKiBjb2xsZWN0Mi5jIChtYWluKTogRGlzY2FyZCB0aGUgZmlyc3QgZXhlY3V0YWJsZSBvbmNlIHdlJ3ZlCisJZXhwbG9pdGVkIGl0LgorCitUaHUgU2VwIDIyIDExOjM4OjM0IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IFR3ZWFrcyBmb3IgTHlueE9TIDIuMi4yOiBhY2NlcHQgc3BhY2VzIGFmdGVyICMgd2hlbgorCXJlbW92aW5nICNkZWZpbmUgdm9pZCBpbnQgaW4gY3Vyc2VzLmg7IGNoYW5nZSBwcm90b3R5cGUgb2YgZm5jdGwKKwlpbiBmY250bC5oIHRvIG1hdGNoIFBPU0lYLjEuCisKK1RodSBTZXAgMjIgMDc6MTg6MzcgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlOiBDb25zaXN0ZW50bHkgcHV0IHNwZWNpZmllZCBtYW51ZmFjdHVyZXIgbmFtZXMgYWhlYWQKKwlvZiBlbnRyaWVzIHdpdGggd2lsZGNhcmQgbWFudWZhY3R1cmVycy4KKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworV2VkIFNlcCAyMSAyMTozMjo1NiAxOTk0ICBDaHJpcyBTbWl0aCAgKGNzbWl0aEBjb252ZXguY29tKQorCisJKiBjb25maWcuZ3Vlc3M6IEFkZCBjb252ZXggYzMqIGFuZCBjNCogZ3Vlc3Nlcy4KKwkqIGNvbmZpZ3VyZTogRG9uJ3QgcnVuIGZpeGluY2x1ZGVzIG9uIGNvbnZleC4KKworV2VkIFNlcCAyMSAxNTo1OToxMiAxOTk0ICBBc2hsZXkgU2F1bHNidXJ5ICAoYW5zQHNpY3Muc2UpCisKKwkqIGFscGhhLmggKEFTTV9GSUxFX1NUQVJUKTogV3JpdGUgLnNldCB2b2xhdGlsZS4KKworV2VkIFNlcCAyMSAxNDo0NTo0NSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IFByb3Blcmx5IGFkZCBhIENMT0JCRVIgZm9yIHNwIAorCXRvIENBTExfSU5TTl9GVU5DVElPTl9VU0FHRS4KKworCSogYy10eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IEdpdmUgZGlmZmVyZW50IGVycm9yIGlmIHRyeWluZworCXRvIHB1dCBvYmplY3Qgd2l0aCB2b2xhdGlsZSBmaWVsZHMgaW50byByZWdpc3RlcjsgZG9uJ3QgdXNlIERFQ0xfTkFNRS4KKworV2VkIFNlcCAyMSAxNDowMjoxMCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBNYWtlIHRlc3QgaW4gTE9BRF9FWFRFTkRfT1AgY2FzZQorCW1vcmUgcHJlY2lzZS4KKworV2VkIFNlcCAyMSAxMTozNDoxMiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBEb24ndCB0cnkgdG8gcmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzIHVudGlsIGFmdGVyCisJcmVtb3ZpbmcgRE9ORSBmaWxlcy4KKworV2VkIFNlcCAyMSAwNTo1Mjo0OSAxOTk0ICBVd2UgU2VpbWV0ICAoc2VpbWV0QGNoZW1pZS51bmkta2wuZGUpCisKKwkqIG02OGsvYXRhcmkuaCAoTk9fe0RPTExBUixET1R9X0lOX0xBQkVMKTogRGVmaW5lLgorCitUdWUgU2VwIDIwIDIwOjA2OjA4IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogZmluYWwuYyAoYXNtX2luc25fY291bnQpOiBIYW5kbGUgQVNNX0lOUFVUcyB0b28uCisKK1R1ZSBTZXAgMjAgMTk6MzI6MTAgMTk5NCAgT2xpdmVyIEtlbGxvZ2cgIChva2VsbG9nZ0BzYWx5a28uY3ViZS5uZXQpCisKKwkqIDE3NTBhLmgsIDE3NTBhLmMsIDE3NTBhLm1kOiBOZXcgZmlsZXMsIHRvIHVzZSBhczE3NTAuCisJKiAxNzUwYS9tMTc1MC5pbmM6IEZpbGUgZGVsZXRlZC4KKwkqIDE3NTBhL21zMTc1MC5pbmM6IE5ldyBmaWxlLgorCitUdWUgU2VwIDIwIDE3OjU1OjUwIDE5OTQgIEhhbGx2YXJkIEIgRnVydXNldGggIChoYmZAZHVyaW4udWlvLm5vKQorIAorCSogY2NjcC5jIChtYWtlX2RlZmluaXRpb24pOiBFbmFibGUgYC1EJyB3aXRoIG1hY3JvIGFyZ3VtZW50cy4KKworVHVlIFNlcCAyMCAxNzo0OTo0NyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjZXhwLnkgKEhPU1RfV0lERV9JTlQsIEhPU1RfQklUU19QRVJfV0lERV9JTlQpOiBOZXcgbWFjcm9zLgorCShleHByZXNzaW9uX3ZhbHVlKTogTm93IEhPU1RfV0lERV9JTlQuCisJKHBhcnNlX2NfZXhwcmVzc2lvbik6IE5vdyByZXR1cm5zIEhPU1RfV0lERV9JTlQuCisJKiBjY2NwLmMgKGV2YWxfaWZfZXhwcmVzc2lvbik6IExpa2V3aXNlLgorCShkb19pZiwgZG9fZWxpZik6IFJlZmxlY3QgbmV3IHJldHVybiB2YWx1ZSBvZiBmdW5jdGlvbnMuCisKKwkqIGFscGhhLmMgKG1vZGVfbWFza19vcGVyYW5kKTogQWx3YXlzIHJldHVybiBhIHZhbHVlLgorCisJKiBmdW5jdGlvbi5jIChwb3BfZnVuY3Rpb25fY29udGV4dCk6IENsZWFyIHJlZ19yZW51bWJlci4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IEFkZCBuZXcgc3dpdGNoLCAtZHVtcG1hY2hpbmUuCisKK1R1ZSBTZXAgMjAgMTU6NTc6NDAgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplX2luc24pOiBQYXJhbWV0ZXIgbG9vcF9ub3RlIHR5cGUgY2hhbmdlZAorCXRvIHJ0eCwgYW5kIG5hbWUgY2hhbmdlZCB0byBsb29wX25vdGVzLiAgQ29kZSBhZGRpbmcgaXQgdG8KKwlSRUdfTk9URVMgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdHlwZSBjaGFuZ2UuCisJKHNjaGVkX2FuYWx5emUpOiBWYXJpYWJsZSBsb29wX25vdGUgdHlwZSBjaGFuZ2VkIHRvIHJ0eCwgYW5kIG5hbWUKKwljaGFuZ2VkIHRvIGxvb3Bfbm90ZXMuICBTdG9yZSBMT09QXyogUkVHX0RFQUQgbm90ZXMgaW4gaXQgaW5zdGVhZAorCW9mIExPT1BfKiBOT1RFX0xJTkVfTlVNQkVSLgorCShzY2hlZHVsZV9ibG9jayk6IFBhc3MgbGFzdCBub3QgaW5zbiB0byBlbWl0X25vdGVfYmVmb3JlIGNhbGwuCisKKwkqIGlyaXM1LmggKEFTTV9PVVRQVVRfVU5ERUZfRlVOQ1RJT04pOiBEZWZpbmUuCisJKEFTTV9PVVRQVVRfRVhURVJOQUxfTElCQ0FMTCk6IERlZmluZS4KKwkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSk6IERlZmluZS4KKwkqIG1pcHMuYyAobWlwc19vdXRwdXRfZXh0ZXJuYWwpOiBVc2UgQVNNX09VVFBVVF9VTkRFRl9GVU5DVElPTi4KKwkobWlwc19vdXRwdXRfZXh0ZXJuYWxfbGliY2FsbCk6IE5ldyBmdW5jdGlvbi4KKwkobWlwc19hc21fZmlsZV9lbmQpOiBIYW5kbGUgQVNNX09VVFBVVF9VTkRFRl9GVU5DVElPTi4KKwkqIFJFQURNRS5JUklYNTogVXBkYXRlLgorCitUdWUgU2VwIDIwIDE0OjM5OjM3IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2kzODYuaCAob3V0cHV0X21vdmVfbWVtb3J5KTogQWRkIGRlY2xhcmF0aW9uLgorCShvdXRwdXRfbW92ZV9wdXNobWVtKTogRGl0dG8uCisKKwkqIGkzODYvaTM4Ni5jIChvdXRwdXRfbW92ZV9wdXNobWVtKTogTmV3IGZ1bmN0aW9uIHRvIGhhbmRsZQorCXB1c2hpbmcgYnl0ZXMgZnJvbSBtZW1vcnkgb250byB0aGUgc3RhY2ssIHBvc3NpYmlseSB1c2luZworCXRlbXBvcmFyeSByZWdpc3RlcnMuCisJKG91dHB1dF9tb3ZlX21lbW9yeSk6IE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgbW92aW5nIGJ5dGVzIGZyb20KKwltZW1vcnkgdG8gbWVtb3J5IHZpYSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgorCisJKiBpMzg2L2kzODYubWQgKG1vdnNpIGluc24pOiBJZiAtZnBpYyBhbmQgdGhlIHZhbHVlIHdlIGFyZSBtb3ZpbmcKKwlpcyBhIGNvbnN0YW50IHBvb2wgYWRkcmVzcywgZW1pdCBhIGxlYWwgaW5zdHJ1Y3Rpb24gaW5zdGVhZCBvZgorCW1vdmwuCisJKG1vdnNmX3B1c2gpOiBBbGxvdyBwdXNoZXMgZnJvbSBtZW1vcnkuCisJKFNGLCBERiwgWEYsIERJIHB1c2hlcyk6IE1vdmUgbW9zdCBvZiB0aGUgY29kZSB0byB0aGUgY29tbW9uCisJZnVuY3Rpb24gb3V0cHV0X21vdmVfcHVzaG1lbS4KKwkoU0YsIERGLCBYRiwgREkgbWVtb3J5LT5tZW1vcnkgbW92ZXMpOiBNb3ZlIG1vc3Qgb2YgdGhlIGNvZGUgdG8KKwl0aGUgY29tbW9uIGZ1bmN0aW9uIG91dHB1dF9tb3ZlX21lbW9yeS4KKwkoREkgbW92ZSBwYXR0ZXJucyk6IENvbWJpbmUgREkgcGF0dGVybnMgaW50byB0d28sIG9uZSBmb3IgcHVzaGVzLAorCWFuZCBvbmUgZm9yIGV2ZXJ5dGhpbmcgZWxzZSwgc28gdGhhdCB0aGUgY29tYmluZXIgd2lsbCBjb21iaW5lIGEKKwlsb2FkIHdpdGggYSBzdG9yZSBpbnRvIGEgbWVtb3J5LT5tZW1vcnkgbW92ZS4KKwkodW50eXBlZF9jYWxsKTogUmVwbGFjZSBub24td29ya2luZyBjb2RlIHdpdGggbTY4ayB2ZXJzaW9uIHRoYXQKKwllbWl0cyBhIHJlZ3VsYXIgY2FsbCwgdGhlbiBicmVha3MgdGhlIHBhcmFsbGVsIG1vdmVzIGludG8gc2VwYXJhdGUKKwltb3ZlcywgYW5kIHRoZW4gaXNzdWUgYSBibG9ja2FnZSBpbnN0cnVjdGlvbi4KKwkoYmxvY2thZ2UpOiBOZXcgdW5zcGVjX3ZvbGF0aWxlIGluc24gdG8gYmxvY2sgaW5zbnMgZnJvbSBiZWluZworCW1vdmVkIGFjcm9zcyB0aGlzIHBvaW50LgorCSh1bnR5cGVkX3JldHVybik6IERlbGV0ZS4KKwkodXBkYXRlX3JldHVybik6IERlbGV0ZS4KKworCSogb2JqYy9zZW5kbXNnLmMgKGdldF9pbXApOiBBbGxvdyBfX2lubGluZV9fIG9uIHg4NiBwbGF0Zm9ybXMuCisKK1R1ZSBTZXAgMjAgMTI6MjE6MTIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogSGFuZGxlIHRoZSBjYXNlIG9mIGEgc3ltbGluayB0byByb290LyogZnJvbSBhCisJc3ViZGlyZWN0b3J5IG9mIGFub3RoZXIgc3ltbGluayB0byByb290LyouCisKK01vbiBTZXAgMTkgMjA6MzA6MjEgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEhhbmRsZSBDT01QT05FTlRfUkVGcyBpbnZvbHZpbmcgQ09OU1RSVUNUT1JzLgorCitNb24gU2VwIDE5IDIwOjI1OjM4IDE5OTQgIFdpbGwgQXRoYW5hc2lvdSAgKHdpbGxAd2VzdGZvcmQuY2N1ci5jb20pCisKKwkqIHJzNjAwMC5tZCAobG9hZCBzZiB3aXRoIHVwZGF0ZSk6IEZpeCBSVEwgdHlwby4KKworTW9uIFNlcCAxOSAwODo0Njo0NiAxOTk0ICBDaGFybGVzIE0uIEhhbm51bSAgKG15Y3JvZnRAZHVhbGl0eS5nbnUuYWkubWl0LmVkdSkKKworCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBFbmFibGUgY2hlY2tpbmcgb2YgZm9ybWF0CisJc3BlY2lmaWVycyB1c2luZyB0aGUgYHEnIChxdWFkKSBsZW5ndGggbW9kaWZpZXIuCisJKGZvcm1hdF9jaGFyX2luZm8pOiBBZGQgYHFsZW4nLgorCShwcmludF9jaGFyX3RhYmxlLCBzY2FuX2NoYXJfdGFibGUpOiBBZGQgYXBwcm9wcmlhdGUgZW50cmllcyBmb3IKKwlxbGVuLgorCitTYXQgU2VwIDE3IDEyOjQ4OjU3IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBzdG10LmMgKG1hcmtfc2Vlbl9jYXNlcyk6ICBEb24ndCBjYWxsIGZhdGFsIChvciBkbyBhbnl0aGluZworCWVsc2UpIGlmIGNhc2UgaW5kZXggb3V0IG9mIHJhbmdlLiAgV2FybmluZyBpcyBnaXZlbiBsYXRlci4KKworRnJpIFNlcCAxNiAxOToyMjo0NiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnbG9iYWwuYyAoZ2xvYmFsX2FsbG9jKTogTWFyayByZWdzIGFzc2lnbmVkIHRvIFNDUkFUQ0ggYXMgdXNlZCBieQorCW1vcmUgdGhhbiBqdXN0IGxvY2FsIGFsbG9jLgorCitUaHUgU2VwIDE1IDE0OjM2OjU5IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBwYXN0YS5vc2Yub3JnPgorCisJKiBpMzg2L2kzODYuYyAob3JkZXJfcmVnc19mb3JfbG9jYWxfYWxsb2MpOiBJbnN0ZWFkIG9mIHVzaW5nCisJZmxhZ19jc2VfZm9sbG93X2p1bXBzIGFuZCBub3QgbGVhZl9mdW5jdGlvbl9wIHRvIGRldGVybWluZSB3aGV0aGVyCisJdG8gYWxsb2NhdGUgRURYLCBhbmQgRUNYIGJlZm9yZSBFQVgsIHVzZSB3aGV0aGVyIG9yIG5vdCBhIERJbW9kZQorCXZhcmlhYmxlIHdhcyB1c2VkIGluIHRoZSBjb21waWxhdGlvbi4gIERJbW9kZSB2YXJpYWJsZXMgc2VlbSB0bworCWNhdXNlIHNwaWxsIGZhaWx1cmVzIGlmIEVBWCBpcyBhbGxvY2F0ZWQgZmlyc3QsIHdoaWxlIHNtYWxsZXIgY29kZQorCWlzIGdlbmVyYXRlZCBpZiBFQVggaXMgYWxsb2NhdGVkIGZpcnN0LCBhc3N1bWluZyBubyBzcGlsbCBmYWlsdXJlLgorCisJKiBpMzg2L2kzODYubWQgKFNGLCBERiwgWEYsIGFuZCBESSBtb3ZlcyBhbmQgcHVzaGVzKTogRWxpbWluYXRlCisJc3BlY2lhbCBwYXR0ZXJucyBmb3IgVEFSR0VUXzM4NiB0aGF0IGFsbG93IGRpcmVjdCBwdXNoZXMgZnJvbQorCW1lbW9yeSwgYW5kIGluc3RlYWQgYWxsb3cgZGlyZWN0IHB1c2hlcyBmcm9tIG1lbW9yeSBhcyB0aGUgbGFzdAorCWFsdGVybmF0aXZlIGluIGNhc2Ugbm8gc2NyYXRjaCByZWdpc3RlcnMgY291bGQgYmUgYWxsb2NhdGVkLgorCShtb3Z4Zl9tZW0pOiBSZW1vdmUgaW5hZHZlcnRlbnQgIVRBUkdFVF8zODYgY29uZGl0aW9uLgorCShhZGRzaTMpOiBBbGxvdyBnZW5lcmF0aW9uIG9mIGxlYSBvbiA0ODYsIHNpbmNlIHRoZSBzaW5nbGUKKwlpbnN0cnVjdGlvbiBsZWEgaXMgYXQgbGVhc3QgYXMgZmFzdCBhcyB0aGUgbW92IGFuZCBhZGQgaXQKKwlyZXBsYWNlcy4KKwkoemVybyBleHRlbmQgcGF0dGVybnMpOiBSZXBsYWNlICFUQVJHRVRfNDg2IHdpdGggVEFSR0VUXzM4Ni4KKwkoYml0IGV4dHJhY3RzKTogRGl0dG8uCisKKwkqIGkzODYvb3Nmcm9zZS5oIChMT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEb24ndCByZWRlZmluZSB0byBiZSA2NAorCXVubGVzcyBOT19MT05HX0RPVUJMRSBpcyBkZWZpbmVkLgorCitUaHUgU2VwIDE1IDEzOjQ2OjA1IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworIAkqIGV4cG1lZC5jIChzdG9yZV9zcGxpdF9iaXRfZmllbGQpOiBVc2UgbnVtYmVyIG9mIGJpdHMgaW4gYXJnIG5vdAorCUJJVFNfUEVSX1dPUkQgdG8gYWRqdXN0IGFyZyBpbiBCWVRFU19CSUdfRU5ESUFOIGNhc2UuCisKK1RodSBTZXAgMTUgMDk6MTk6MTIgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKKworCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCwgbXVsdGktd29yZCBzaGlmdHMpOiBHZW5lcmF0ZSBydGwKKwlmcmVlIG9mIGNvbmZsaWN0cyBmb3Igc2hpZnRzIGxlc3MgdGhhbiBvbmUgd29yZC4KKworVGh1IFNlcCAxNSAwNToyOTo1OCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBnY2MuYzogUmV3b3JrIGxhc3QgY2hhbmdlIHNvIGl0J3MgZG9uZSBsaWtlIGNvbGxlY3QyLmMuCisKKwkqIGNzZS5jIChjc2VfYXJvdW5kX2xvb3ApOiBEb24ndCBpbnZhbGlkYXRlIFNVQlJFRyB1bmxlc3MgCisJaXQncyBhIFNVQlJFRyBvZiBhIFJFRy4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogRG9uJ3Qgc2V0IFNDSEVEX0dST1VQX1AgZm9yIHByZXZpb3VzCisJSU5TTiBhIFVTRSB1bmxlc3MgaXQncyBhIFVTRSBvZiBhIFJFRy4KKworV2VkIFNlcCAxNCAxMDowODo1OCAxOTk0ICBNaWNoYWVsIEkgQnVzaG5lbGwgIDxtaWJAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KKworCSogZ2NjLmM6IEluY2x1ZGUgPHN5cy9lcnJuby5oPiBpbiBjYXNlIGBlcnJubycgaXMgcmVhbGx5IGEgbWFjcm8KKwlhcyBwZXJtaXR0ZWQgYnkgQU5TSSBDLiAgCisKKwkqIGdldHB3ZC5jIChHVUVTU1BBVEhMRU4pOiBJZiB0aGVyZSBpcyBubyBkZWZpbml0aW9uIG9mCisJTUFYUEFUSExFTiwgdGhlbiBzZXQgR1VFU1NQQVRITEVOIHRvIGJlIDEwMC4gIChJdCdzIHVzZWQKKwlhcyBhIHN0YXJ0aW5nIHBvaW50LCBub3QgYSBsaW1pdCwgc28gdGhpcyBpcyBoYXJtbGVzcy4pCisKK1R1ZSBTZXAgMTMgMTU6MDI6MTkgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHBhc3RhLm9zZi5vcmc+CisKKwkqIGkzODYvaTM4Ni5tZCAobW92eGZfbWVtKTogRml4IHR5cG8gd2l0aCBtZW1vcnkvbWVtb3J5IG1vdmVzCisJb2YgWEZtb2RlIHZhcmlhYmxlcywgd2hlcmUgdGhlIHN0b3JlIGFjdHVhbGx5IGRpZCBhIGxvYWQsIGllLCB0aGUKKwlzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG9wZXJhbmRzIHdlcmUgZml4ZWQuCisJKGZpeHVuc190cnVuYyBwYXR0ZXJucyk6IFJldmVydCB0byB0aGUgb2xkIGNvZGUuCisJKG1vdmRmX3B1c2g0ODYsIG1vdnhmX3B1c2g0ODYsIG1vdmRpX3B1c2g0ODYpOiBJZiBhbiBhZGRyZXNzIGlzCisJYmFzZWQgb24gdGhlIHN0YWNrIHBvaW50ZXIsIGFjY291bnQgZm9yIHRoZSBzdGFjayBwb2ludGVyIGNoYW5naW5nCisJZHVlIHRvIHRoZSBpbnRlcm1lZGlhdGUgcHVzaGVzIGdlbmVyYXRlZC4KKworVHVlIFNlcCAxMyAxNDoxMToxNiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb2xsZWN0Mi5jIChmYXRhbF9wZXJyb3IsIGZhdGFsLCBlcnJvcik6IERlY2xhcmUgYWxsIGFyZ3MgYXMgY2hhciAqLgorCitUdWUgU2VwIDEzIDEyOjQwOjM5IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAoc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEhhbmRsZSBzZWNvbmRhcnkgRlAgbG9hZC9zdG9yZQorCXJlbG9hZHMgb2YgdGhlIGZvcm0gKHN1YnJlZyAobWVtIChwbHVzIChyZWcpIChkaXNwKSkpKS4KKwkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IEEgc2Vjb25kYXJ5IHJlZ2lzdGVyIGlzIG5lZWRlZCB0byBoYW5kbGUKKwlvdXQtb2YtcmFuZ2UgRlAgbG9hZHMgYW5kIHN0b3Jlcy4KKwkqIHBhLm1kIChyZWxvYWRfaW5kZiwgcmVsb2FkX291dGRmKTogTmV3IGV4cGFuZGVycy4KKwkocmVsb2FkX2luc2YsIHJlbG9hZF9vdXRzZik6IExpa2V3aXNlLgorCitNb24gU2VwIDEyIDE4OjE1OjQ4IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHQtcGEgKEFEQV9DRkxBR1MpOiBOZXcgb3ZlcnJpZGUuCisJKiBwYS90LXBhLWhwdXg6IE5ldyBmaWxlLgorCSogY29uZmlndXJlIChocHBhKi0qLWhwdXgqKTogVXNlIHQtcGEtaHB1eCBpbnN0ZWFkIG9mIHQtbGliYy1vay4KKworTW9uIFNlcCAxMiAxNDo1MjoxNyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFNldCBSVFhfVU5DSEFOR0lOR19QIG9uIHN0YWNrX3Bhcm0KKwlmb3IgY29uc3QgcGFyYW1ldGVyIGJlZm9yZSBjYWxsaW5nIG1vdmVfYmxvY2tfZnJvbV9yZWcuCisKK01vbiBTZXAgMTIgMTQ6Mjc6NTggMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWcvZnAtYml0LmMgKEZMT191bmlvbl90eXBlKTogQWRkIHBhY2tlZCBhdHRyaWJ1dGUgdG8gYGJpdHMnLgorCitTYXQgU2VwIDEwIDA5OjUwOjQxIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChpbnZhbGlkYXRlX2Zvcl9jYWxsKTogUHJvcGVybHkgc2V0IElOX1RBQkxFLgorCitTYXQgU2VwIDEwIDA2OjQ2OjI0IDE5OTQgIEJpbGwgQnVydG9uICAoYmlsbGJAcHJvZ3Jlc3MuY29tKQorCisJKiBBZGRlZCBpbXByb3ZlZCBzdXBwb3J0IGZvciBTZXF1ZW50IERZTklYL3B0eCAxLnggYW5kIDIueDoKKwkqIGZpeGluYy5wdHg6IE5ldyBmaWxlLgorCSogaTM4Ni9zZXEtc3lzdjMuaCAoSEFWRV9BVEVYSVQpOiBObyBsb25nZXIgZGVmaW5lZC4KKwkqIGkzODYvc2VxMi1zeXN2My5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni1zZXF1ZW50LXB0eFsxMl0qKTogTmV3IGNvbmZpZ3VyYXRpb25zLgorCShpWzM0XTg2LXNlcXVlbnQtc3lzdiosIGlbMzRdODQtc2VxdWVudC1wdHgpOiBEZWxldGVkIGNvbmZpZ3VyYXRpb25zLgorCSogY29uZmlnLnN1YiAocHR4KTogTmV3IE9TOyB1c2UgZm9yIFNlcXVlbnQuCisKK0ZyaSBTZXAgIDkgMjE6NDg6NDggMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNjY3AuYyAocmVzY2FuLCBoYW5kbGVfZGlyZWN0aXZlKTogQmFja3NsYXNoIG5vIGxvbmdlciBzdXBwcmVzc2VzIHRoZQorCXNwZWNpYWxuZXNzIG9mIHRoZSBmb2xsb3dpbmcgY2hhciB1bmxlc3MgLXRyYWRpdGlvbmFsLgorCShyZXNjYW4pOiBSZW1vdmUgYmFja3NsYXNoLW5ld2xpbmUgb25seSBpZiBhdCB0b3AgbGV2ZWwsIHNpbmNlCisJYmFja3NsYXNoLW5ld2xpbmUtc3BhY2UgY2FuIGJlIGVuY291bnRlcmVkIGR1cmluZyBtYWNybyBwcm9jZXNzaW5nLgorCShjb2xsZWN0X2V4cGFuc2lvbik6IFJlbW92ZSBzcGVjaWFsIGhhY2sgZm9yIFwjIGluc2lkZSBhICNkZWZpbmU7CisJaXQncyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBDIFN0YW5kYXJkLgorCitUaHUgU2VwICA5IDE3OjM2OjAzIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorIAorCSogVXRpbGl6ZSBPU0YvMSdzIGxpbWl0ZWQgLmluaXQgc3VwcG9ydC4KKwkqIGFscGhhL2FscGhhLmggKEhBU19JTklUX1NFQ1RJT04pOiBEZWZpbmUuCisJKExJTktfU1BFQyk6IEFkZCAnLWluaXQgX19tYWluJy4KKwkqIGFscGhhL29zZjEyLmggKExJTktfU1BFQyk6IERpdHRvLgorIAorCSogZnVuY3Rpb24uYyAoZXhwYW5kX21haW5fZnVuY3Rpb24pOiBEb24ndCBjYWxsIF9fbWFpbiBpZgorCUhBU19JTklUX1NFQ1RJT04gaXMgZGVmaW5lZC4KKworRnJpIFNlcCAgOSAxNjozNjo0NiAxOTk0ICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIHRyZWUuYyAoZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogRG9uJ3QgdHJlYXQgQysrIG1lbWJlcgorCWZ1bmN0aW9ucyBvZiBjbGFzc2VzIGRlY2xhcmVkIGluIGEgZnVuY3Rpb24sIGFzIG5lc3RlZCBmdW5jdGlvbnMuCisKK0ZyaSBTZXAgIDkgMTY6MTA6MjUgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAam9ubnkuY3lnbnVzLmNvbSkKKworCSogc2gvc2guYyAocHJlcGFyZV9tb3ZlX29wZXJhbmRzKTogR2VuZXJhdGUgYmV0dGVyIERJIGNvbnN0YW50IAorCWNvZGUuCisJKGZha2Vfc2hpZnQpOiBOZXcgZnVuY3Rpb24uCisJKiBzaC9zaC5tZCAoYXNobHNpM19uLCBsc2hyc2kzX24pOiBPbmx5IHJlY29nbmlzZSBpZiBmYWtlX3NoaWZ0CisJZW5hYmxlZC4KKwkqIHNoL3tsaWIxZnVuY3MuYXNtLCBhc2hsc2kzLmMsIGxzaHJzaTMuYywgYXNocnNpMy5jfSA6IE5ldyBmaWxlcy4KKwkqIHNoL3Qtc2ggOiBCdWlsZCBuZXcgZmlsZXMuCisKK0ZyaSBTZXAgIDkgMTU6NTI6NTQgMTk5NCAgSGFsbHZhcmQgQiBGdXJ1c2V0aCAgKGguYi5mdXJ1c2V0aEB1c2l0LnVpby5ubykKKworCSogY2NjcC5jOiBDb3JyZWN0IHVucHJvdG90eXBlZCBwb2ludGVyIGFyZ3MgZnJvbSBgMCcgdG8gYE5VTExfUFRSJworCitGcmkgU2VwICA5IDE1OjE3OjUyIDE5OTQgIE1hdHRoZXcgR3JlZW4gIChtcmdAc3Bsb2RlLm1hbWUubXUub3ouYXUpCisKKwkqIGNvbmZpZ3VyZSAoc3BhcmMtKi1uZXRic2QpOiBOZXcgY29uZmlndXJhdGlvbi4KKwkqIHNwYXJjL25ldGJzZC5oOiBOZXcgZmlsZS4KKworRnJpIFNlcCAgOSAxNToxNTo0OCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIG1pcHMubWQgKHRydW5jZGlzaTIpOiBDaGFuZ2UgZnJvbSBkZWZpbmVfZXhwYW5kIHRvIGRlZmluZV9pbnNuLgorCSh0cnVuY2RpaGkyLCB0cnVuY2RpcWkyKTogTGlrZXdpc2UuCisKKwkqIHNwYXJjLmggKFNRUlRURjJfTElCQ0FMTCk6IERlbGV0ZS4KKwkoSU5JVF9UQVJHRVRfT1BUQUJTKTogRGVmaW5lLgorCShJTklUX1NVQlRBUkdFVF9PUFRBQlMpOiBEZWZpbmUuCisKKwkqIHN0bXQuYyAoY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcpOiBDYXN0IG1hbGxvYyByZXN1bHQKKwl0byBgdW5zaWduZWQgY2hhciAqJyBub3QgYGNoYXIgKicuCisKKwkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sX2xvY2F0aW9uKTogSGFuZGxlIGVycm9yX21hcmtfbm9kZSBpbgorCURFQ0xfSU5JVElBTCBmb3IgQysrLgorCisJKiBtaXBzLm1kIChtZW1vcnkpOiBBZGQgbWlzc2luZyAhcjQ2MDAgdG8gZmlyc3QgZGVmaW5lX2Z1bmN0aW9uX3VuaXQuCisKKwkqIHNwYXJjLm1kIChuZWdzaTIpOiBVc2UgcmVnaXN0ZXJfb3BlcmFuZCBub3QgZ2VuZXJhbF9vcGVyYW5kIGZvcgorCW91dHB1dC4KKworRnJpIFNlcCAgOSAxNDo1Mjo1OCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWcvbmV0YnNkLmg6IEFkZCAjdW5kZWYgZm9yIGV2ZXJ5dGhpbmcgd2UgZGVmaW5lOyBhIGZldyB3ZXJlCisJbWlzc2luZy4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2FkcywgY2FzZSAncCcpOiBPcGVyYW5kIGlzIEJBU0VfUkVHX0NMQVNTLgorCitGcmkgU2VwICA5IDE0OjAwOjI4IDE5OTQgIE1pa2UgQ29sbGlzb24gIChjb2xsaXNvbkB3b3JsZC5zdGQuY29tKQorCisJKiBjb25maWd1cmUgKGRzcDE2eHgtKik6IE5ldyBjb25maWd1cmF0aW9uLgorCSogY29uZmlnLnN1YiAoZHNwMTZ4eCk6IE5ldyBiYXNpYyBtYWNoaW5lLgorCSogZHNwMTZ4eC5jLCBkc3AxNnh4Lm1kLCBkc3AxNnh4LmgsIHhtLWRzcDE2eHguaDogTmV3IGZpbGVzLgorCitGcmkgU2VwICA5IDEyOjQ3OjAwIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2kzODYubWQgKEFsbCBTRiwgREYsIFhGLCBESSA0ODYgcHVzaCBwYXR0ZXJucyk6IE1lcmdlIHRoZQorCW1lbW9yeSBhbmQgbm9ubWVtb3J5IHB1c2ggcGF0dGVybnMgdG9nZXRoZXIuCisKK0ZyaSBTZXAgIDkgMDA6NTM6MzYgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcuc3ViOiBBY2NlcHQgaTU4NiBsaWtlIGkzODYuCisJRG8gbm90IHVzZSBTQ08gYXMgYSBkZWZhdWx0IGZvciBpMzg2LSouCisKK1RodSBTZXAgIDggMTg6NDk6MzUgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAY3lnbnVzLmNvbSkKKworCSogY29uZmlnL2ZwLWJpdC5jIChfZnBtdWxfcGFydHMpOiAgUGVyZm9ybSBvcHRpbWl6ZWQKKwk2NGJpdCo2NGJpdCBtdWx0aXBseSBjb3JyZWN0bHkuCisJKiBzaC9zaC5jIChzeW50aF9jb25zdGFudCk6IEVuc3VyZSBESSBtb2RlIGNvbnN0YW50cyBnZXQgdGhlaXIKKwloaWdoIHBhcnQgemVyb2VkLgorCShhZGRfY29uc3RhbnQpOiAgRW50YWJsZWQgY29uc3RhbnRzIGFyZSBvbmx5IGlkZW50aWNhbCBpZiB0aGVpcgorCXNpemVzIGFyZSB0aGUgc2FtZS4KKworVGh1IFNlcCAgOCAxNDo0MDozMSAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MsIGNhc2UgUkVHKTogQ29ycmVjdCB0eXBvLCB1c2UgR0VUX01PREUKKwlub3QgR0VUX0NPREUuCisJKiBzY2hlZC5jIChhdHRhY2hfZGVhdGhzKTogTGlrZXdpc2UuCisKK1R1ZSBTZXAgIDYgMjM6MzM6NDEgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIHRyZWUuYyAoZ2V0X3NldF9jb25zdHJ1Y3Rvcl9iaXRzLCBnZXRfc2V0X2NvbnN0cnVjdG9yX3dvcmRzKToKKwlOZXcgZnVuY3Rpb25zLiAgRXh0cmFjdCBiaXRzIG9yIHdvcmRzIGZyb20gU0VUX1RZUEUgQ09OU1RSVUNUT1IuCisJKiB0cmVlLmg6ICBEZWNsYXJlIGFib3ZlIG5ldyBmdW5jdGlvbnMuCisKK1RodSBTZXAgIDggMTQ6MDI6MDUgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIDM4Ni9pMzg2LmggKFRBUkdFVF9PUFRJT05TKTogTmV3IG1hY3JvIHRvIGRlZmluZSAtbXJlZy1hbGxvYz0KKwlzd2l0Y2ggdG8gYWxsb3cgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gb3JkZXIuCisJKE9WRVJSSURFX09QVElPTlMpOiBDYWxsIHRoZSBmdW5jdGlvbiBvdmVycmlkZV9vcHRpb25zLgorCShSRUdfQUxMT0NfT1JERVIpOiBEZWZpbmUgdG8gYWxsb2NhdGUgaW4gdGhlIG5hdHVyYWwgb3JkZXIsIHRoaXMKKwlpcyBuZWVkZWQgZm9yIE9SREVSX1JFR1NfRk9SX0xPQ0FMX0FMTE9DIHRvIHdvcmsuCisJKE9SREVSX1JFR1NfRk9SX0xPQ0FMX0FMTE9DKTogRGVmaW5lIHRvIGNhbGwgdGhlIGZ1bmN0aW9uCisJb3JkZXJfcmVnc19mb3JfbG9jYWxfYWxsb2MuCisJKHJlZ2NsYXNzX21hcCk6IE1vdmUgZGVjbGFyYXRpb24gdG8gZW5kIG9mIGZpbGUuCisJKGkzODZfY29tcGFyZV9vcDAsIGkzODZfY29tcGFyZV9vcDEpOiBEaXR0by4KKwkoQ0xBU1NfTElLRUxZX1NQSUxMRURfUCk6IERlZmluZSwgcmV0dXJuIDEgZm9yIEFEX1JFR1MgaW4gYWRkaXRpb24KKwl0byBhbGwgb2YgdGhlIHNpbmdsZSByZWdpc3RlciBjbGFzc2VzLCBzaW5jZSBBRF9SRUdTIGlzIG9ubHkgdXNlZAorCXRvIGFsbG9jYXRlIEVBWDpFRFguCisJKG92ZXJyaWRlX29wdGlvbnMsIG9yZGVyX3JlZ3NfZm9yX2xvY2FsX2FsbG9jKTogQWRkIGRlY2xhcmF0aW9ucy4KKwkoaGlfcmVnX25hbWUpOiBBZGQgZGVjbGFyYXRpb24uCisJKHFpX3JlZ19uYW1lKTogRGl0dG8uCisJKHFpX2hpZ2hfcmVnX25hbWUpOiBEaXR0by4KKwkoaTM4Nl9yZWdfYWxsb2Nfb3JkZXIpOiBBZGQgZGVjbGFyYXRpb24gZm9yIFRBUkdFVF9PUFRJT05TIHRvIHVzZS4KKworCSogaTM4Ni9pMzg2LmMgKGkzODZfY29tcGFyZV9vcDAsIGkzODZfY29tcGFyZV9vcDEpOiBJbml0aWFsaXplCisJd2l0aCBOVUxMX1JUWC4KKwkoaTM4Nl9yZWdfYWxsb2Nfb3JkZXIpOiAgUHJvdmlkZSBnbG9iYWwgdmFyaWFibGUgZGVmaW5pdGlvbi4KKwkocmVnc19hbGxvY2F0ZWQpOiBTdGF0aWMgYXJyYXkgdG8gbm90ZSB3aGV0aGVyIGEgcmVnaXN0ZXIgaXMgbm90ZWQKKwl2aWEgLW1yZWctYWxsb2M9PHh4eD4uCisJKG92ZXJyaWRlX29wdGlvbnMpOiBQcm92aWRlIGNoZWNraW5nIGZvciByZWdpc3RlcnMgZGVjbGFyZWQgd2l0aAorCS1tcmVnLWFsbG9jPTx4eHg+LgorCShvcmRlcl9yZWdzX2Zvcl9sb2NhbF9hbGxvYyk6IElmIC1tcmVnLWFsbG9jPTx4eHg+IHdhcyB1c2VkLAorCWFsbG9jYXRlIHJlZ2lzdGVycyBtZW50aW9uZWQgaW4gb3JkZXIsIGFuZCB0aGVuIGFsbG9jYXRlIGFsbCBvdGhlcgorCXJlZ2lzdGVycyBpbiB0aGUgbm9ybWFsIHJlZ2lzdGVyIG9yZGVyLiAgSWYgLW1yZWctYWxsb2M9PHh4eD4gd2FzCisJbm90IHVzZWQsIGFsbG9jYXRlIHJlZ2lzdGVycyBpbiBuYXR1cmFsIG9yZGVyIGV4Y2VwdCBmb3Igbm9uLWxlYWYKKwlmdW5jdGlvbnMgd2l0aCBDU0UgZm9sbG93aW5nIGp1bXBzLCBhbGxvY2F0ZSBFQVggYWZ0ZXIgRURYIGFuZAorCUVDWCwgdG8gYWxsb3cgdGhlIGZ1bmN0aW9uIHJldHVybiB0byBiZSBDU0UnZCwgYW5kIHBlcmwgNC4wMzYncworCXBlcmx5LnkgdG8gYmUgY29tcGlsZWQgd2l0aG91dCBhYm9ydGluZyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG8KKwlmaW5kIGEgc3BpbGwgcmVnaXN0ZXIuCisJKG1vdnNmLCBtb3ZkZiwgbW92ZGkpOiBSZXdyaXRlIGFsbCBwYXR0ZXJucyB0byBwcm92aWRlIGVmZmVjaWVudAorCW1lbW9yeSB0byBtZW1vcnkgbW92ZXMsIGluY2x1ZGluZyBwdXNoZXMgZm9yIGkzODYgYW5kIGk0ODYuICBGaXhlcworCXByb2JsZW1zIGluIGNvbXBpbGluZyBtb3RpZisgd2l0aG91dCBvcHRpbWl6YXRpb24uCisJKHN3YXBzZik6IEFkZCwgbGlrZSBzd2FwZGYgYW5kIHN3YXB4Zi4KKwkoZml4dW5zX3RydW5jc2ZzaTIsIGZpeHVuc190cnVuY2Rmc2kyKTogVXNlIGdlbmVyYWxfb3BlcmFuZAorCWluc3RlYWQgb2YgcmVnaXN0ZXJfb3BlcmFuZCBmb3IgZGVmaW5lX2V4cGFuZCwgc2luY2UgdGhlIG9wZXJhbmQKKwlpcyBjb3BpZWQgdG8gYSBuZXcgcHNldWRvIHJlZ2lzdGVyIGFzIHBhcnQgb2YgdGhlIGV4cGFuc2lvbi4KKwkoZml4X3RydW5jeGZkaTIsIGZpeF90cnVuY2RmZGkyLCBmaXhfdHJ1bmNzZmRpMik6IFJld3JpdGUgdG8gY2FsbAorCXRoZSBtb3JlIHByaW1pdGl2ZSBnZW5lcmF0b3IgZnVuY3Rpb25zIGluc3RlYWQgb2Yga25vd2luZyBob3cgbWFueQorCWNsb2JiZXJzIG9mIG1hdGNoX3NjcmF0Y2hzIHRoZXkgZG8uCisKKwkqIE1ha2VmaWxlLmluIChhdXhfb3V0cHV0Lm8pOiBEZWZpbmUgVEFSR0VUX0NQVV9ERUZBVUxUIGlmCisJc3BlY2lmaWVkIHdoZW4gY29tcGlsaW5nIGF1eF9vdXRwdXQubyB0byBhbGxvdyB0aGUgbWFjaGluZSBDIGZpbGUKKwlhY2Nlc3MgdG8gdGhpcyBpZiBpdCB3YW50cyBpdC4KKworVGh1IFNlcCAgOCAwNzoxNToyOSAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLm1kIChtb3ZzaSBtYXRjaGVyKTogTWVyZ2UgVEFSR0VUX1BPV0VSIGFuZCAhVEFSR0VUX1BPV0VSCisJY2FzZXMuICBSYXRpb25hbGl6ZSBtbmVtb25pY3MuCisJKG1vdmhpIGFuZCBtb3ZxaSBtYXRjaGVycyk6IExpa2V3aXNlLgorCShtb3ZzZiBtYXRjaGVyKTogQ29ycmVjdCBsZW5ndGggYXR0cmlidXRlIGZvciBzdGZzIHdoaWNoIG5vIGxvbmdlcgorCWluY2x1ZGVzIGZyc3AuCisKK1RodSBTZXAgIDggMDc6MDY6MzEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitXZWQgU2VwICA3IDE5OjMxOjUyIDE5OTQgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQorCisJKiBjY2NwLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBJbiBgI2luY2x1ZGUgPHh4eD4nIGRpcmVjdGl2ZXMsCisJcmVtb3ZlIGJhY2tzbGFzaC1uZXdsaW5lIHByb3Blcmx5LiAgRG9uJ3QgYWxsb3cgYW55IG90aGVyIG5ld2xpbmVzLgorCitXZWQgU2VwICA3IDE4OjExOjI5IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5oIChSRUdJU1RFUl9NT1ZFX0NPU1QpOiBNb3ZpbmcgYmV0d2VlbiBzcGVjaWFsIHJlZ2lzdGVycworCWlzIGV4cGVuc2l2ZS4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogQ29udmVydCBjb21wYXJpc29uIHRvIHVuc2lnbmVkCisJd2hlbiBzdHJpcHBpbmcgb2ZmIGEgWkVST19FWFRFTkQuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2V0KTogT25seSBjb252ZXJ0IElGX1RIRU5fRUxTRSB0byBsb2dpY2FsCisJZXhwcmVzc2lvbiBpZiBtb2RlIG9mIG9iamVjdCBiZWluZyBjb21wYXJlZCBpcyByZXN1bHQgbW9kZS4KKworV2VkIFNlcCAgNyAxODowOToxNyAxOTk0ICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam1AZ2VlY2guZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogSWdub3JlIC0taGVscCwgLS12ZXJzaW9uLCAtLXByb2dyYW0tcHJlZml4LAorCS0tcHJvZ3JhbS1zdWZmaXgsIC0tY2FjaGUtZmlsZSwgLS1xdWlldCwgLS1zaWxlbnQuCisKK1dlZCBTZXAgIDcgMTM6Mjk6NTAgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBNb3ZlIHRlc3QgZm9yIG1pc3NwZWxsZWQgcmVnaXN0ZXJzCisJaGlnaGVyIHNvIGFsbCBjYXNlcyBjYXVnaHQuCisKK1dlZCBTZXAgIDcgMDk6NTQ6MTQgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZTogIFRvdWNoIE1ha2VmaWxlLmxsIGJlZm9yZSBhcHBlbmRpbmcgc3ViZGlyIHN0dWZmLgorCShOZWVkZWQgaWYgdGhlcmUgYXJlIG5vIHN1YmRpcnMuKQorCitXZWQgU2VwICA3IDExOjE5OjE4IDE5OTQgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGFrdmF2aXQubmV4dC5jb20pCisKKwkqIG9iamMvaW5pdC5jIChfX29iamNfaW5pdF9wcm90b2NvbHMpOiBSZW1vdmUgYXNzZXJ0aW9uLgorCSogb2JqYy9PYmplY3QubSAoY29uZm9ybXNUbzopOiBNYWtlIGxvb2t1cCBhbGx3YXlzIGhhcHBlbiBpbgorCXRoZSBjbGFzcyBvYmplY3QuCisKK1R1ZSBTZXAgIDYgMTc6NDc6MzkgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZTogIFJlbmFtZSAqLW5leHQtbnNbMjNdIHRvICotbmV4dC1uZXh0c3RlcFsyM10uCisJKiBjb25maWcuc3ViOiAgQ2xlYW51cCBOZVhUIHN1cHBvcnQgdG8gZW1pdCBuZXh0c3RlcCouCisKK1R1ZSBTZXAgIDYgMTg6Mzg6MDIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogRG9uJ3QgcmVvcmRlciB0aGUgb3BlcmFuZHMgb2YgYQorCVBMVVMgd2hlbiBmaXhpbmcgdXAgaW5kZXguCisKK1R1ZSBTZXAgIDYgMTg6MjQ6NTAgMTk5NCAgTWF0dGhpYXMgUGZhbGxlciAgKGxlb0BtYXJjby5kZSkKKworCSogbnMzMmsubWQgKHN0YWNrYWRqdXN0L3B1c2ggcGVlcGhvbGVzKTogRm9yIHRoZSBhZGp1c3QvcHVzaC9wdXNoCisJcGF0dGVybiBvbmUgb2Zmc2V0IHdhcyB3cm9uZy4KKwlEb24ndCB1c2UgYWRkciBmb3IgcmVnaXN0ZXIgYW5kIGFuZCBNRU0gcmVmcy4KKworVHVlIFNlcCAgNiAxMToyNDowNiAxOTk0ICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0Bqb25ueS5jeWdudXMuY29tKQorCisJKiBzaC9zaC5jIChwdXNoLCBwb3ApOiBHZW5lcmF0ZSBSRUdfTk9URVMuCisJKHN5bnRoX2NvbnN0YW50KTogQ29ycmVjdCBvbmUgb2YgdGhlIHBhdHRlcm5zLgorCShvdXRwdXRfZmlsZV9zdGFydCk6IEJ1bXAgdmVyc2lvbiBudW1iZXIuCisJKiBzaC9zaC5oIChFWElUX0lHTk9SRV9TVEFDSyk6IE5vdyAxLgorCSogc2gvc2gubWQgKGFkZGRpMywgc3ViZGkzKTogU2ltcGxpZnkuCisJKGNhc2VzaV93b3JrZXIpOiBVc2UgVEFSR0VUX0JJR1RBQkxFLgorCitNb24gU2VwICA1IDEyOjI5OjE1IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZ2luY2x1ZGUvbWF0aC02ODg4MS5oOiBDaGFuZ2UgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHN0YXRpYyB0bworCWV4dGVybi4KKworCSogY29uZmlndXJlIChpWzM0XTg2LSotc3lzdjQqKTogSWYgLS13aXRoLXN0YWJzLCBzZXQgdG1fZmlsZSB0bworCWkzODYvc3lzdjRnZGIuaC4KKwkqIGNvbmZpZy9pMzg2L3N5c3Y0Z2RiLmg6IE5ldyBmaWxlOyBzZXRzIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRS4KKworU3VuIFNlcCAgNCAwODo0MDowMiAxOTk0ICBDaHJpcyBTbWl0aCAgKGNzbWl0aEBjb252ZXguY29tKQorCisJKiBjb252ZXguaCAoVlRBQkxFX1VTRVNfTUFTSywgVklOREVYX01BWCwgU0VUX0RFQ0xfVklOREVYKToKKwlkZWxldGUsIG5vIGxvbmdlciB1c2VkLgorCSh0YXJnZXRfZmxhZ3MpOiBkZWxldGUgY2V4cC5jIGhhY2ssIG5vIGxvbmdlciBuZWVkZWQuCisJKiBjb252ZXgubWQgKGRlY3ItYW5kLXNldC1jYzApOiBmaXggSEltb2RlIHRvIHVzZSBoYWxmd29yZAorCWluc25zLgorCShjbXBxaSBwYXR0ZXJucyk6IGZpeCBjb25zdHJhaW50cyBub3QgdG8gdXNlIEEgcmVncworCitTYXQgU2VwICAzIDE0OjEyOjExIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L2kzODYubWQgKERJbW9kZSBtb3ZlIGFuZCBwdXNoIGluc25zKTogRWxpbWluYXRlIG1vdmRpCisJd3JhcHBlciB0aGF0IG1hZGUgYSBESSB0ZW1wIHJlZ2lzdGVyIHRvIGRvIGEgbWVtb3J5IHRvIG1lbW9yeQorCW1vdmUgYmVjYXVzZSBpdCBjcmVhdGVzIHRvbyBtdWNoIHJlZ2lzdGVyIHByZXNzdXJlLCBlc3BlY2lhbGx5CisJd2hlbiBub3Qgb3B0aW1pemluZy4gIE9uIHRoZSA0ODYsIGFsbG9jYXRlIGFuZCB1c2UgMS0yIHNjcmF0Y2gKKwlyZWdpc3RlcnMgdG8gcHVzaCBhIERJbW9kZSB2YWx1ZS4KKworRnJpIFNlcCAgMiAxNToxMTo1OSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKyAKKyAgICAgICAgKiBjLWRlY2wuYyAobWluX3ByZWNpc2lvbik6IE1vdmUgZnJvbSBoZXJlLgorICAgICAgICAqIGMtY29tbW9uLmM6IFRvIGhlcmUuCisKK0ZyaSBTZXAgIDIgMTM6MTY6MzggMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIHRyZWUuaCAobWF4aW11bV9maWVsZF9hbGlnbm1lbnQsIHNldF9hbGlnbm1lbnQpOiAgTmV3IGRlY2xhcmF0aW9ucy4KKworRnJpIFNlcCAgMiAxNDoyNTozNiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZy9zdnI0LmggKERCWF9ERUJVR0dJTkdfSU5GTywgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFLAorCURCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkUsIEFTTV9JREVOVElGWV9HQ0MsCisJQVNNX0lERU5USUZZX0dDQ19BRlRFUl9TT1VSQ0UsIEFTTV9PVVRQVVRfU09VUkNFX0xJTkUsCisJREJYX0ZVTkNUSU9OX0ZJUlNUKTogRGVmaW5lLiAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIC1nc3RhYnMgZm9yCisJU1ZSNCBjb25maWd1cmF0aW9ucy4gIC1nc3RhYnMgcmVxdWlyZXMgZ2FzIGFuZCBnZGIuCisJKiBjb25maWcvc3BhcmMvc29sMi5oIChEQlhfREVCVUdHSU5HX0lORk8sCisJREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSwgQVNNX0lERU5USUZZX0dDQywKKwlBU01fSURFTlRJRllfR0NDX0FGVEVSX1NPVVJDRSwgQVNNX09VVFBVVF9TT1VSQ0VfTElORSwKKwlEQlhfRlVOQ1RJT05fRklSU1QpOiBEb24ndCBkZWZpbmUuICBOb3cgZGVmaW5lZCBieSBjb25maWcvc3ZyNC5oLgorCShQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBVbmRlZmluZSBiZWZvcmUgZGVmaW5pbmcuCisJKiBjb25maWcvc3BhcmMvc3lzdjQuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogRG9uJ3QgYm90aGVyIHRvCisJdW5kZWZpbmUgYmVmb3JlIGluY2x1ZGluZyBzdnI0LmguCisJKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBVbmRlZmluZSBiZWZvcmUgaW5jbHVkaW5nIHN2cjQuaC4KKworVGh1IFNlcCAgMSAyMjowMjowMiAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogdG9wbGV2LmMgKGZhdGFsX2luc24pOiBNb3ZlIG1vc3Qgb2YgdGhlIGNvZGUgZnJvbQorCWZhdGFsX2luc25zX25vdF9mb3VuZCBoZXJlLCBhbmQgYWRkIGFuIGFyZ3VtZW50IHRvIGdpdmUgdGhlIGVycm9yCisJbWVzc2FnZS4KKwkoZmF0YWxfaW5zbl9ub3RfZm91bmQpOiBDYWxsIGZhdGFsX2luc24uCisJKiBydGwuaCAoZmF0YWxfaW5zbiwgZmF0YWxfaW5zbl9ub3RfZm91bmQpOiBBZGQgcHJvdG90eXBlcy4KKwkqIGdlbmV4dHJhLmMgKG1haW4pOiBEb24ndCBkZWNsYXJlIGZhdGFsX2luc25fbm90X2ZvdW5kIGluCisJaW5zbi1leHRyYWN0LmMuCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENhbGwgZmF0YWxfaW5zbiB3aGVyZSBhcHByb3ByaWF0ZSB0byBwcmludAorCWFuIGVycm9yIG1lc3NhZ2UgaW5zdGVhZCBvZiBjYWxsaW5nIGFib3J0LgorCShzcGlsbF9mYWlsdXJlKTogRGl0dG8uCisJKHJlbG9hZF9hc19uZWVkZWQpOiBEaXR0by4KKwkoYWxsb2NhdGVfcmVsb2FkX3JlZyk6IERpdHRvLgorCShlbWl0X3JlbG9hZF9pbnNucyk6IERpdHRvLgorCitUaHUgU2VwICAxIDE5OjM0OjI2IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorIAorICAgICAgICAqIHRyZWUuYyAodHlwZV9saXN0X2VxdWFsKTogSWYgdGhlIHR5cGVzIG9mIHRoZSBkZWZhdWx0IGFyZ3VtZW50cworICAgICAgICBkaWZmZXIsIHRoZSBsaXN0cyBkbyBub3QgbWF0Y2guCisgCitUaHUgU2VwICAxIDE5OjI5OjU4IDE5OTQgIE1hdHRoaWFzIFBmYWxsZXIgIChsZW9AbWFyY28uZGUpCisKKwkqIG5zMzJrLm1kIChzdGFjay1hZGp1c3QvcHVzaCBwZWVwaG9sZXMpOiBBZGRyZXNzZXMgYXJlCisJbW92ZWQgd2l0aCAiYWRkciIsIG5vdCB3aXRoICJtb3ZkIi4KKworVGh1IFNlcCAgMSAxOToxNzo1NSAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogY2NjcC5jIChtYWtlX2RlZmluaXRpb24pOiBEb24ndCBkdW1wIGNvcmUgd2hlbiBnaXZlbiBhbgorCXVudGVybWluYXRlZCBzdHJpbmcgaW4gYSAtRCBvcHRpb24uCisKK1RodSBTZXAgIDEgMTk6MTM6MzUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBHaXZlIHByb3BlciB3YXJuaW5ncyB3aGVuCisJY29udmVydGluZyBDT01QTEVYX1RZUEU7IHdpZGVuIGNoZWNrIHRvIGluY2x1ZGUgYWxsIGludGVncmFsIHR5cGVzLgorCitXZWQgQXVnIDMxIDIwOjM4OjUzIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBzcGlmZi5nbnUuYWkubWl0LmVkdSkKKworCSogZml4cHJvdG86ICBEZWZpbmUgRklYX0hFQURFUiAobmVlZGVkIGJ5IEF1ZyAxOSBjaGFuZ2UpLgorCVVzZSBGSVhfSEVBREVSIGluc3RlYWQgb2YgJG9yaWdpbmFsX2Rpci9maXgtaGVhZGVyICh0d2ljZSkuCisKK1dlZCBBdWcgMzEgMTY6NTY6MTUgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisgCisgICAgICAgICogc3RtdC5jICh3YXJuX2lmX3VudXNlZF92YWx1ZSk6IEV4dGVuZCBzcGVjaWFsIGNhc2UgZm9yIGNhc3RlZAorICAgICAgICBNT0RJRllfRVhQUnMgdG8gYXBwbHkgdG8gSU5JVF9FWFBScyBhcyB3ZWxsLgorIAorV2VkIEF1ZyAzMSAxNjozMDowOSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogc3Rvci1sYXlvdXQuYyAoc2V0X2FsaWdubWVudCk6ICBOZXcgZ2xvYmFsLgorCShsYXlvdXQtdHlwZSk6ICBBZGQgc3VwcG9ydCBmb3IgU0VUX1RZUEUuCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiAgU2VtaS1yZXZlcnQgQXVnIDI1IGNoYW5nZToKKwlNYWtlIGl0IGFwcGx5IG9ubHkgZm9yIEJMS21vZGUsIG5vdCBpbnRlZ3JhbCBtb2Rlcy4KKworCSogc3RtdC5jIChhbGxfY2FzZXNfY291bnQsIG1hcmtfc2Vlbl9jYXNlcyk6ICBOZXcgZnVuY3Rpb25zLgorCShCSVRBUlJBWV9URVNULCBCSVRBUlJBWV9TRVQpOiAgTmV3IG1hY3Jvcy4gIFVzZWQgKG1haW5seSBieQorCUNoaWxsKSB0byBjaGVjayBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgKGZvciBlbnVtcyBhbmQgcmFuZ2VzKS4KKwkoY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxpbmcpOiAgUmUtd3JpdGUgdG8gdXNlIHRoZQorCW5ldyBmdW5jdGlvbnMsIG5vdyB0aGF0IHdlIGhhdmUgdGhlbS4KKworV2VkIEF1ZyAzMSAxOToxOToyOSAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3ICAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKKworCSogY29tYmluZS5jIChub256ZXJvX2JpdHMsIGNhc2VzIERJViwgTU9ELCBVRElWLCBVTU9EKTogRGVjbGFyZQorCW9wMF9tYXliZV9taW51c3AgYW5kIG9wMV9tYXliZV9taW51c3AgYXMgSE9TVF9XSURFX0lOVC4KKworV2VkIEF1ZyAzMSAxODo1NDo1NCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBtZWQuYyAoc3RvcmVfc3BsaXRfYml0X2ZpZWxkKTogQWx3YXlzIGFkanVzdCBhcmcgdG8gCisJZXh0cmFjdF9maXhlZF9iaXRfZmllbGQgaW4gQllURVNfQklHX0VORElBTiBjYXNlLgorCitXZWQgQXVnIDMxIDAyOjQ5OjM0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZy9pMzg2L2dudS5oIChMSUJfU1BFQyk6IE5ldyBtYWNyby4KKworVHVlIEF1ZyAzMCAxNjozNToyMyAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKyAKKyAgICAgICAgKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1Xe25vLSx9cmVvcmRlci4KKyAKK1R1ZSBBdWcgMzAgMTM6NTU6NTggMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbiwgY2FzZSBHRVUpOiBBZGQgbWlzc2luZyBicmVhay4KKworTW9uIEF1ZyAyOSAxNzo1MDo1NSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXgubWQgKGV4dHYsIGV4dHp2KTogRG9uJ3QgdXNlIFJPVEwgd2hlbiBmaWVsZCBpcyBvdXRzaWRlCisJYm91bmRhcmllcyBvZiBhIHdvcmQuCisKK01vbiBBdWcgMjkgMTE6NDM6MTggMTk5NCAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAYWt2YXZpdC5uZXh0LmNvbSkKKworCSogb2JqYy9zZW5kbXNnLmMgKGdldF9pbXApOiBEb24ndCBpbmxpbmUgb24gMzg2LgorCitTdW4gQXVnIDI4IDE4OjU2OjAzIDE5OTQgIEFuZHJldyBNY0NhbGx1bSAobWNjYWxsdW1AY3Mucm9jaGVzdGVyLmVkdSkKKworCSogb2JqYy9jbGFzcy5jIChvYmpjX2dldF9tZXRhX2NsYXNzKTogIE5ldyBmdW5jdGlvbi4KKworU2F0IEF1ZyAyNyAyMzoxMzo1MyAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9pMzg2LmMgKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogSWYgaW5kZXggcmVnaXN0ZXIgaXMgZWl0aGVyCisJdGhlIGFyZyBwb2ludGVyIG9yIHRoZSBzdGFjayBwb2ludGVyLCBhbmQgdGhlcmUgaXMgbm8gc2NhbGUKKwlmYWN0b3IsIHN3YXAgd2l0aCB0aGUgYmFzZSByZWdpc3Rlci4KKworCSogaTM4Ni9pMzg2LmggKFJFR19DTEFTU19DT05URU5UUyk6IERvbid0IGFsbG93IHRoZSBhcmcgcG9pbnRlcgorCXJlZ2lzdGVyIGFzIGFuIGluZGV4IHJlZ2lzdGVyLCBzaW5jZSB0aGUgZnJhbWUgY291bGQgYmUgb21pdHRlZCwKKwlhbmQgdGhlIHN0YWNrIHBvaW50ZXIgaXMgbm90IHZhbGlkIGFzIGFuIGluZGV4LgorCisJKiBpMzg2L2kzODYubWQgKG1vdiosIG1vdnN0cmljdCopOiBEb24ndCBjcmVhdGUgcHVzaGVzIG9mIG1lbW9yeQorCXZhbHVlcyB3aGVuIGNyZWF0aW5nIGluc25zLCBsZXQgdGhlIGNvbWJpbmVyIGNyZWF0ZSBhIHB1c2ggb2YgYQorCW1lbW9yeSB2YWx1ZSBpZiAtbTM4Ni4gIEluIHBhcnRpY3VsYXIsIHB1c2hlcyBvZiBieXRlIHZhbHVlcyB3YXMKKwlicm9rZW4gYmVjYXVzZSB0aGVyZSBpcyBubyBwYXR0ZXJuIHRvIHJlY29nbml6ZSBzdWNoIGEgcHVzaC4KKworRnJpIEF1ZyAyNiAxNjowMzowOSAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9pMzg2LmggKE1BU0tfKik6IEFkZCBtYXNrcyBmb3IgYWxsIG9mIHRoZSBzd2l0Y2hlcy4KKwkoVEFSR0VUXyopOiBVc2UgYXBwcm9wcmlhdGUgTUFTS18qIGluc3RlYWQgb2YgYSBudW1iZXIuICBBZGQKKwktbWRlYnVnLWFkZHIgc3dpdGNoIHRvIGRlYnVnIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUywKKwktbW5vLXdpZGUtbXVsdGlwbHkgdG8gdHVybiBvZmYgd2lkZW5pbmcgbXVsdGlwbGllcywgYW5kIC1tbm8tbW92ZQorCXRvIGFsbG93IGludGVnZXIgbW92ZSBpbnNucyB0byBnZW5lcmF0ZSBkaXJlY3QgbWVtb3J5IHRvIG1lbW9yeQorCWNvcGllcywgd2hpY2ggcmVsb2FkIHdpbGwgZml4IHVwLiAgQWRkIFRBUkdFVF8zODYgd2hpY2ggaXMgbm90IG9mCisJVEFSR0VUXzQ4Ni4KKwkoUkVHX0FMTE9DX09SREVSKTogR28gdG8gdGhlIG9yZGVyIHVzZWQgaW4gMi41LjgsIGVheCwgZWR4LCBlY3gsIC4uLgorCUFkZCBhIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgdHJhZGVvZmZzLgorCShSRUdfT0sqKTogQWRkIHN0cmljdCBhbmQgbm9uLXN0cmljdCB2ZXJzaW9ucyBvZiB0aGUgbWFjcm9zIHRoYXQKKwlhcmUgYWx3YXlzIHByZXNlbnQsIGFuZCBSRUdfT0tfU1RSSUNUIGNob29zZXMgYmV0d2VlbiB0aGUgdHdvCisJaW5uZXIgbWFjcm9zLgorCShHT19JRl9MRUdJTUFURV9BRERSRVNTKTogTW92ZSBwcm9jZXNzaW5nIHRvIGxlZ2l0aW1hdGVfYWRkcmVzc19wCisJZnVuY3Rpb24uCisJKExFR0lUSU1JWkVfQUREUkVTUyk6IE1vdmUgcHJvY2Vzc2luZyB0byBsZWdpdGltaXplX2FkZHJlc3MKKwlmdW5jdGlvbi4KKwkoZnVuY3Rpb24gZGVjbGFyYXRpb25zKTogQWRkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGV4dGVybgorCWZ1bmN0aW9ucyBpbiBpMzg2LmMuCisKKwkqIGkzODYvaTM4Ni5jIChhc21fYWRkKTogQWRkIHN1cHBvcnQgaW4gY2FzZSBhZGRpbmcgYnkgMSBvciAtMSB0bworCXVzZSBpbmMvZGVjLgorCSh2YXJpb3VzKTogQ2hhbmdlIFRBUkdFVF80ODYgLT4gIVRBUkdFVF8zODYuCisJKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogTW92ZSBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MgcHJvY2Vzc2luZworCWhlcmUgZnJvbSBpMzg2LmguICBDb21iaW5lIE9TRi9yb3NlIHN1cHBvcnQgZnJvbSBvc2Zyb3NlLmggdGhyb3VnaAorCXRoZSB1c2Ugb2YgY29uZGl0aW9uYWwgbWFjcm9zLiAgT25seSByZWNvZ25pemUgYWRkcmVzc2VzIGluCisJY2Fub25pY2FsIGZvcm1hdHMsIGNvZGUgYWRhcHRlZCBmcm9tIHRoZSBpOTYwIHBvcnQuICBBZGQgdHJhY2luZworCWlmIC1tZGVidWctYWRkci4KKwkobGVnaXRpbWl6ZV9hZGRyZXNzKTogTW92ZSBMRUdJVElNSVpFX0FERFJFU1MgaGVyZSBmcm9tIGkzODYuaCwKKwlhbmQgYWRkIGFkYXB0YXRpb25zIGZyb20gdGhlIGk5NjAgcG9ydC4KKwkoY29udmVydF8zODdfb3ApOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorCisJKiBpMzg2L2kzODYubWQgKHZhcmlvdXMpOiBSZW1vdmUgY2FzdCB0byBjaGFyICogb2Ygb3V0cHV0CisJZnVuY3Rpb25zLCBzaW5jZSBpMzg2Lmggbm93IGRlY2xhcmVzIHRoZW0gYWxsIHByb3Blcmx5LiAgQ2hhbmdlCisJVEFSR0VUXzQ4NiB0ZXN0cyB0byAhVEFSR0VUXzM4NiBhbmQgIVRBUkdFVF80ODYgdG8gVEFSR0VUXzM4Ni4KKwkobW92c2ksIG1vdnN0cmljdGhpLCBtb3ZoaSwgbW92c3RyaWN0cWksIG1vdnFpLCBtb3ZkaSk6IEFkZAorCWRlZmluZV9leHBhbmQgd3JhcHBlcnMgdG8gcHJldmVudCBtZW1vcnk8LT5tZW1vcnkgbW92ZXMgZnJvbSBiZWluZworCWdlbmVyYXRlZCB1bmxlc3MgLW1uby1tb3ZlIGlzIHVzZWQuICBPbiA0ODYncyBkbyBub3QgYWxsb3cgcHVzaCBvZgorCW1lbW9yeSBpbnNucyB0byBiZSBnZW5lcmF0ZWQgdW5sZXNzIC1tbm8tbW92ZS4KKwkobW92ZGkpOiBGb3IgbW92ZGkgcGF0dGVybnMsIGFkZCAyIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoLi4uKSkKKwlkZWNsYXJhdGlvbnMgdG8gYWxsb3cgbWVtb3J5PC0+bWVtb3J5IG1vdmVzIHdpdGggbm9uLWNvbnRpZ291cworCXJlZ2lzdGVycywgc28gdGhhdCByZWxvYWQgZG9uJ3QgYWJvcnQgaWYgaXQgY2FuJ3QgbWFrZSBhIERJCisJcmVnaXN0ZXIuCisJKHVtdWxzaWRpMywgbXVsc2lkaTMpOiBEb24ndCBhbGxvdyBwYXR0ZXJuIGlmIC1tbm8td2lkZS1tdWx0aXBseS4KKwkoc211bHRzaTNfaGlnaHBhcnQsIHVtdWx0c2kzX2hpZ2hwYXJ0KTogQWRkIHBhdHRlcm5zIHRvIG1ha2UKKwlkaXZpc2lvbiBieSBjb25zdGFudHMgZ2VuZXJhdGUgYmV0dGVyIGNvZGUuCisKKwkqIGkzODYvb3Nmcm9zZS5oIChNQVNLXyopOiBVc2Ugb2N0YWwgdG8gZGVmaW5lIGJpdG1hc2tzLCBub3QgaGV4LAorCWZvciBjb21wYXRpYmlsaXR5IHdpdGggaTM4Ni5oLgorCShOT19JTVBMSUNJVF9FWFRFUk5fQyk6IERlZmluZS4KKwkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogRXhwbGljaXRseSBkZWZpbmUgdG8gYmUgNjQgaW5zdGVhZCBvZgorCWp1c3QgI3VuZGVmJ2luZyBpdC4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogRGVsZXRlLCBtZXJnZWQgd2l0aCBjb21tb24gaTM4NiBjb2RlLgorCShBU01fRklMRV9FTkQpOiBQcmludCAtZnNjaGVkdWxlLWluc25zIGFuZCAtZnNjaGVkdWxlLWluc25zMiBpbgorCWlkZW50IHN0cmluZyBpZiB0aG9zZSBvcHRpb25zIGFyZSB1c2VkLgorCShSRUFMX0xEX0ZJTEVfTkFNRSk6IERlbGV0ZS4KKwkoQVNNX09VVFBVVF9ET1VCTEUpOiBEZWxldGUsIHVzZSB0aGUgY29tbW9uIG1hY3Jvcy4KKwkoQVNNX09VVFBVVF9GTE9BVCk6IERpdHRvLgorCShBU01fT1VUUFVUX0xPTkdfRE9VQkxFKTogRGl0dG8uCisKK1RodSBBdWcgMjUgMTc6MTU6MTggMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCisKKwkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiAgQWx3YXlzIHN0b3JlIGludG8gbXVsdGktd29yZAorCWJpdGZpZWxkcyBzdGFydGluZyB3aXRoIGxvdyBhZGRyZXNzZXMuICAoT2xkIGNvZGUgd2FzCisJaW5jb21wYXRpYmxlIHdpdGggb3BlcmFuZF9zdWJ3b3JkX2ZvcmNlIG9uIGJpZy1lbmRpYW4gdGFyZ2V0cy4pCisKK1RodSBBdWcgMjUgMTg6MzE6MjAgMTk5NCAgQW50dGkgTWlldHRpbmVuICAoYW1pZXR0aW5AbnRjLm5va2lhLmNvbSkKKworCSogbTY4ay9seW54LmggKENBTExfVVNFRF9SRUdTKTogQWRkIGQyIGFuZCBkMyBhcyBjYWxsLXVzZWQuCisKK1RodSBBdWcgMjUgMTE6MzA6NDQgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHJlY29yZF9qdW1wX2NvbmQpOiBEb24ndCBkbyBhbnl0aGluZyBpZiBPUDAgYW5kIE9QMQorCWFyZSBhbHJlYWR5IGVxdWl2YWxlbnQuCisKKwkqIHJ0bGFuYWwuYyAobWF5X3RyYXBfcCwgY2FzZSBFWFBSX0xJU1QpOiBOZXcgY2FzZS4KKworCSogYy1jb21tb24uYyAoc2hvcnRlbl9jb21wYXJlKTogRG9uJ3QgaXNzdWUgd2FybmluZyBpZiBib3RoCisJb3BlcmFuZHMgY29uc3RhbnRzIGFuZCB0aGUgc2lnbmVkbmVzcyBkb2Vzbid0IGFmZmVjdCB0aGUgCisJY29tcGFyaXNvbiByZXN1bHRzLgorCisJKiBjb25maWd1cmU6IFJlZmluZSBoYW5kbGluZyBhbmQgZXJyb3ItY2hlY2tpbmcgb2YgcG9zaXRpb25hbCBhcmdzLgorCisJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBQcmludCBtb3JlIGZsYWdzIGZvciB0eXBlcyBhbmQgZGVjbHMuCisKKwkqIGMtdHlwZWNrLmMgKHR5cGVfbGlzdHNfY29tcGF0aWJsZV9wKTogVHJlYXQgdHJhbnNwYXJlbnQgdW5pb25zCisJanVzdCBsaWtlIHVubmFtZWQgb25lcy4KKworV2VkIEF1ZyAyNCAxOTozNDo1MiAxOTk0ICBDaGFybGVzIEhhbm51bSAgKG15Y3JvZnRAZHVhbGl0eS5nbnUuYWkubWl0LmVkdSkKKworCSogY29uZmlndXJlOiBSZWFycmFuZ2UgaGFuZGxpbmcgb2YgTmV0QlNEIHBvcnRzIHRvIHVzZSB0aGUgc3RhbmRhcmQKKwlgY3B1LXZlbmRvci1vcycgZm9ybWF0LgorCSogY29uZmlnLnN1YjogUmVjb2duaXplIG5hbWVzIG9mIE5ldEJTRCBwb3J0cyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kCisJdG8gYSBDUFUgbmFtZS4KKworV2VkIEF1ZyAyNCAxODo0MzozMCAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZV9icmllZiwgcHJpbnRfbm9kZSk6IFVzZSBhc3NpZ25tZW50IGluc3RlYWQKKwlvZiBpbml0aWFsaXphdGlvbiBmb3IgYWdncmVnYXRlIGxvY2FsIHZhcmlhYmxlIFJFQUxfVkFMVUVfVFlQRSBkLgorCitXZWQgQXVnIDI0IDE4OjI4OjUyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogY29uZmlnL3N2cjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBEZWZpbmUuCisJKiBjb25maWcvc3BhcmMvc3lzdjQuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBPdXRwdXQgI2FsbG9jIHRvCisJc2V0IFNIRl9BTExPQyBpbiBzZWN0aW9uIGZsYWdzLgorCitXZWQgQXVnIDI0IDE3OjQ1OjE5IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25Ac3BoYWdudW0uY3lnbnVzLmNvbSkKKworCSogYy1wYXJzZS5pbiAocGFybWxpc3RfMik6IEdpdmUgZXJyb3IgZm9yIGZ1bmN0aW9uIHdpdGggb25seQorCUVMTElQU0lTIGFzIGFuIGFyZ3VtZW50LgorCitXZWQgQXVnIDI0IDE3OjM2OjIyIDE5OTQgIEguSi4gTHUgKGhqbEBueW5leHN0LmNvbSkKKworCSogaTM4Ni9saW51eC5oIChTVEFSVEZJTEVfU1BFQyk6IEFkZCAle3N0YXRpYzotc3RhdGljfS4KKworV2VkIEF1ZyAyNCAxNDozNDozNyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IENoZWNrIGZvciB2YXJpYWJsZS1zaXplZCByZXR1cm4gdmFsdWUKKwlpbiBwcm9wZXIgcGxhY2UuCisKKwkqIGMtdHlwZWNrLmMgKGRlZmF1bHRfY29udmVyc2lvbik6IERvbid0IHN1YnN0aXR1dGUgY29uc3RhbnQKKwl2YWx1ZSBpZiBhcnJheSBzaW5jZSB3aWxsIHJldHVybiBhZGRyZXNzLgorCisJKiBjb25maWd1cmUgKExBTkdfTUFLRUZJTEUpOiBJbmNsdWRlIGxhbmcvTWFrZWZpbGUuaW4gaW4gbGlzdC4KKworCSogYWxwaGEuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEFkZCBuZXcgbGV0dGVyLCBgUicuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEb24ndCBjaGVjayBUUkVFX0FTTV9XUklUVEVOLgorCShQUkVESUNBVEVfQ09TVFMpOiBBZGQgY2FsbF9vcGVyYW5kLgorCSogYWxwaGEuYyAoY2FsbF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorCShvdXRwdXRfZXBpbG9nKTogRG9uJ3Qgc2V0IFNZTUJPTF9SRUZfRkxBRyBvZiBjdXJyZW50IGZ1bmN0aW9uLgorCSogYWxwaGEubWQgKGNhbGwpOiBSZXdvcmsgdG8gdXNlIG1hY3JvIHZlcnNpb24gb2YganNyLgorCSogb3NmMi5oIChMSU5LX1NQRUMpOiBEb24ndCBkZWZpbmU7IHNob3VsZCBuZXZlciBoYXZlIGJlZW4uCisKKwkqIGMtdHlwZWNrLmMgKHB1c2hfaW5pdF9sZXZlbCk6IERvbid0IGJsb3cgdXAgaWYgY29uc3RydWN0X3R5cGUKKwlpcyBudWxsIChjYW4gaGFwcGVuIHdpdGggbWlzc2luZyBicmFjZSkuCisKK1dlZCBBdWcgMjQgMTA6NDk6MzUgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvaTM4Ni5oIChSRUdfQUxMT0NfT1JERVIpOiBSZXN0b3JlIHByZXZpb3VzIHZlcnNpb24gd2hpY2gKKwlhbGxvY2F0ZXMgZWR4IGZpcnN0LCB0aGVuIGVjeCwgZWF4LCAuLi4gIFRoaXMgaXMgYmVjYXVzZSBwZXJsCisJZG9lc24ndCBidWlsZCB3aGVuIHRoZSBvcmRlciBpcyBlYXgsIGVjeCwgZWR4Li4uCisKK1R1ZSBBdWcgMjMgMDk6MjA6MTYgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29uZmlndXJlOiBSZXN0b3JlIG9sZCBiZWhhdmlvciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKwlBZGQgbmV3IGFyZ3VtZW50LCAtLW5vZ3Vlc3MuCisJY29uZmlnLmd1ZXNzIG5vdyBndWVzc2VzIEJVSUxELCBub3QgSE9TVDsgSE9TVCBkZWZhdWx0cyBmcm9tIEJVSUxELgorCUFsd2F5cyBjb21wYXJlIGNhbm9uaWNhbCBuYW1lcywgbm90IHVzZXItc3BlY2lmaWVkIG5hbWVzLgorCU51bWVyb3VzIG1pbm9yIGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2VzIG91dHB1dCB0byBtYWtlIHRoZQorCWNvbmZpZ3VyYXRpb24gY2hvc2VuIGNsZWFyZXIuCisKK1R1ZSBBdWcgMjMgMDI6MDE6NDIgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgorCisJKiBjb25maWcuc3ViOiBNb3ZlIG02OGstY2N1ciBoYW5kbGluZyB0byBwcm9wZXIgcGFydCBvZiBmaWxlLgorCUNhbm9uaWNhbGl6ZSBjcHUgdHlwZSBwZW50aXVtIGludG8gaTQ4Ni4gIChDaGFuZ2UgaXQgdG8gaTU4NiBsYXRlci4pCisKK01vbiBBdWcgMjIgMTg6NDE6NTkgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAam9ubnkuY3lnbnVzLmNvbSkKKworCSogc2gvc2guYyAoZmluZF9iYXJyaWVyKTogIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBsYXJnZXIgdGhhbgorCVNJIG1vdmVzIGNvcnJlY3RseS4KKwkoZ2VuZXJhbF9tb3ZzcmNfb3BlcmFuZCk6IEFsbG93IGxhYmVsX3JlZnMgcGx1cyBjb25zdC4KKwkoc2hfZnVuY3Rpb25fYXJnX3BhcnRpYWxfbnJlZ3MsIHNoX2Z1bmN0aW9uX2FyZyk6IFBhc3MgQkxLbW9kZQorCW9iamVjdHMgaW4gcGFydGlhbCByZWdzLgorCSogc2guaCAoVEFSR0VUX0RFRkFVTFQpOiBUdXJuIG9mZiBCSUdUQUJMRV9CSVQuCisJKEVYVFJBX0NPTlNUUkFJTlRfUSk6IEFsbG93IGxhYmVsX3JlZnMgcGx1cyBjb25zdC4KKwkoUkVBRE9OTFlfREFUQV9TRUNUSU9OX0FTTV9PUCwgRVhUUkFfU0VDVElPTlMsIHJkYXRhX3NlY3Rpb24pOgorCURlbGV0ZSByZGF0YSBzZWN0aW9uIGFuZCByZWZzLgorCSogc2gubWQgKGRpbW9kZSBzcGxpdCk6IERvbid0IGFsbG93IGEgUSBjb25zdHJhaW50IHNvdXJjZS4KKworU3VuIEF1ZyAyMSAyMzoxNTozNSAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoRlVOQ1RJT05fQVJHKTogVXNlIGluZGlyZWN0IGNhbGxpbmcgY29udmVudGlvbnMgd2hlbgorCVRBUkdFVF9MT05HX0NBTExTIGlzIGluIGVmZmVjdC4KKworU2F0IEF1ZyAyMCAxMzozMTozNCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IEFkZCBuZXcgcGFyYW1ldGVyIGxvb3Bfbm90ZS4KKwlJZiBsb29wX25vdGUgc2V0LCB0aGVuIHNlcmlhbGl6ZSBvbiB0aGlzIGluc24uCisJKHNjaGVkX2FuYWx5emUpOiBOZXcgdmFyaWFibGUgbG9vcF9ub3RlLiAgUGFzcyB0bworCXNjaGVkX2FuYWx5emVfaW5zbi4gIFNldCBpdCBpZiB3ZSBwYXNzIGEgTk9URV9JTlNOX0xPT1BfQkVHIG9yCisJTk9URV9JTlNOX0xPT1BfRU5ELgorCSh1bmxpbmtfbm90ZXMpOiBEb24ndCBzYXZlIGF3YXkgTk9URV9JTlNOX0xPT1BfQkVHIG9yCisJTk9URV9JTlNOX0xPT1BfRU5EIG5vdGVzLgorCShzY2hlZHVsZV9ibG9jayk6IEdlbmVyYWxpemUgY29kZSB0aGF0IGxvb2tzIGZvciBtYWdpYyBSRUdfREVBRAorCW5vdGVzIGFuZCBjb252ZXJ0cyB0aGVtIHRvIG5vdGVzLgorCitTYXQgQXVnIDIwIDEyOjQ3OjIxIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2LmggKFJFR19BTExPQ19PUkRFUik6IEFsbG9jYXRlIGVheCBmaXJzdCwgdGhlbiBlY3gsIGVkeCwgYW5kCisJdGhlbiBkbyB0aGUgbnJvbWFsIGFsbG9jYXRpb24gb3JkZXIgZm9yIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLgorCitGcmkgQXVnIDE5IDIwOjE0OjM1IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogdHJlZS5jIChidWlsZF90eXBlX3ZhcmlhbnQpOiBPbmx5IHJldHVybiBleGlzdGluZyB0eXBlIGlmIGl0CisJYWxzbyBoYXMgdGhlIHNhbWUgVFlQRV9OQU1FLgorCisJKiBpcml4NS5oIChOT19JTVBMSUNJVF9FWFRFUk5fQyk6IENvbW1lbnQgb3V0LgorCitGcmkgQXVnIDE5IDE2OjQxOjQzIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBmaXhwcm90bzogIFVzZSAkRklYX0hFQURFUiBtYWNybyBpbnN0ZWFkIG9mIGNhbGxpbmcKKwlmaXgtaGVhZGVyIGRpcmVjdGx5IGluIDJuZCBsb2NhdGlvbi4KKworRnJpIEF1ZyAxOSAxNzozNDoxOSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuXzEpOiBOZXZlciBtYWtlIGEgbm8tY29uZmxpY3QgYmxvY2suCisKKwkqIHRyZWUuaCAoc3RydWN0IHRyZWVfdHlwZSk6IE5ldyBmaWVsZCB0cmFuc3BhcmVudF91bmlvbl9mbGFnLgorCShzdHJ1Y3QgdHJlZV9kZWNsKTogTmV3IGZpZWxkIHRyYW5zcGFyZW50X3VuaW9uLgorCSh7REVDTCxUWVBFfV9UUkFOU1BBUkVOVF9VTklPTik6IE5ldyBtYWNyb3MuCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZSk6IEhhbmRsZSAidHJhbnNwYXJlbnRfdW5pb24iIGF0dHJpYnV0ZS4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IElmIHBhcm0gaXMgdHJhbnNwYXJlbnQgdW5pb24sIHVzZQorCXR5cGUgb2YgZmlyc3QgZmllbGQuCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IExpa2V3aXNlLgorCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmUpOiBEb24ndCBpbmxpbmUgaWYgYW55CisJcGFybSBpcyBhIHRyYW5zcGFyZW50IHVuaW9uLgorCitGcmkgQXVnIDE5IDEyOjAxOjExIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IENhbm9uaWNhbGl6ZSAke0lOUFVUfSB0byBhdm9pZCBhdXRvbW91bnRlcgorCXByb2JsZW1zLgorCitGcmkgQXVnIDE5IDExOjMxOjI0IDE5OTQgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGFrdmF2aXQubmV4dC5jb20pCisKKwkqIG9iamMtYWN0LmMgKGJ1aWxkX3NlbGVjdG9yX3RyYW5zbGF0aW9uX3RhYmxlKTogUmVzZXQKKwljdXJyZW50X2Z1bmN0aW9uX2RlY2wgYWZ0ZXIgaGFja19mdW5jdGlvbl9wcm90b3R5cGUgYnVpbGQgaXQuCisJKGJ1aWxkX21vZHVsZV9kZXNjcmlwdG9yKTogUmV0dXJuIGNvbnN0cnVjdG9yIG5hbWUgZnJvbSBmdW5jdGlvbnMKKwlkZWNsX3J0bC4gCisKK1RodSBBdWcgMTggMTc6MjM6MTggMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQHNwaWZmLmdudS5haS5taXQuZWR1KQorCisJKiBSRUFETUUuRlJFU0NPOiAgTmV3IGZpbGUuICBOb3RlcyBhYm91dCBjb21waWxpbmcgdGhlIEZyZXNjbworCXRvb2xraXQgd2l0aCBnKysuCisKK1RodSBBdWcgMTggMTQ6MTA6MjIgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMsIGNhc2UgUkVHX1VOVVNFRCk6IElnbm9yZSBub3RlcyB3aGVuCisJZnJvbV9pbnNuICE9IGkzIG9ubHkgaWYgdGhlIG5vdGVzIHdvdWxkIHJlbWFpbiBhcyBSRUdfVU5VU0VEIG5vdGVzLgorCitXZWQgQXVnIDE3IDE4OjMxOjQzIDE5OTQgIEhvbGdlciBUZXV0c2NoICAoaG9sZ2VyQGhvdGJzby5yaGVpbi1tYWluLmRlKQorCisJKiBjbGlwcGVyLmggKENMSVBQRVJfQVJHX1NJWkUpOiBSZXR1cm4gc2l6ZSBpbiBieXRlcy4KKwkoRlVOQ1RJT05fQVJHX0FEVkFOQ0UpOiBGaXggYXJndW1lbnQgYWxpZ25tZW50IHByb2Nlc3NpbmcuCisKK1dlZCBBdWcgMTcgMTg6MDM6NTQgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZng4MC5tZCAoY2FzZXNpXzIpOiBPcGVyYW5kIDAgaXMgSEltb2RlOyBhZGQgU0lHTl9FWFRFTkQKKwl3aGVuIGFkZGluZyB0byBwYy4KKwkoY2FzZXNpKTogT3BlcmFuZCAwIGlzIEhJbW9kZS4KKwkodW5uYW1lZCBQQyBhZGRpdGlvbiBwYXR0ZXJuKTogQWRkIFNJR05fRVhURU5EIHRvIGFkZCBISW1vZGUKKwlvZmZzZXQgdG8gU0ltb2RlIFBDLgorCSogbTY4ay5tZCAodGFibGVqdW1wKTogQWRkIFNJR05fRVhURU5EIHRvIEhJbW9kZSBvZmZzZXQKKwlzbyBjYW4gYWRkIHRvIFNJbW9kZSBQQy4KKwlMaWtld2lzZSBmb3IgbWF0Y2hpbmcgcGF0dGVybi4KKwkqIGNzZS5jIChmb2xkX3J0eCk6IFdoZW4gZm9sZGluZyB0YWJsZWp1bXAsIGFsbG93IExBQkVMX1JFRgorCXRvIGJlIGluIGFyZzA7IGFsc28gYWxsb3cgb3RoZXIgYXJnIHRvIGJlIE1JTlVTLCBub3QganVzdCBiZQorCWVxdWl2YWxlbnQgdG8gaXQuCisKK01vbiBBdWcgMTUgMTk6MTk6MTEgMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNjY3AuYyAoaW5kZXgwKTogTmV3IGZ1bmN0aW9uLgorCSh0cmlncmFwaF9wY3ApOiBVc2UgaW5kZXgwIGluc3RlYWQgb2YgaW5kZXgsIHNvIHRoYXQgYSBudWxsCisJYnl0ZSBkb2Vzbid0IHN1cHByZXNzIGZ1cnRoZXIgdHJpZ3JhcGggcHJlcHJvY2Vzc2luZy4KKworCSogY2NjcC5jIChyZXNjYW4sIGRvX2lkZW50KTogUGFzcyBtb3JlIGFjY3VyYXRlIHNpemUgcmVxdWVzdAorCXRvIGNoZWNrX2V4cGFuZC4KKworCSogY2NjcC5jIChtYWluKTogRG9uJ3QgZHVtcCBjb3JlIGlmIGdpdmVuIC1wY3AsIC1NRCwgb3IgLU1NRAorCXdpdGhvdXQgZm9sbG93aW5nIGFyZy4KKworTW9uIEF1ZyAxNSAxNzo1NjozOCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdG10LmMgKGV4cGFuZF9lbHNlaWYpOiBOZXcgZnVuY3Rpb24uCisKK01vbiBBdWcgMTUgMTQ6MTY6MTggMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmU6IElmIHRoZSBob3N0IGlzIGd1ZXNzZWQsIGFuZCB0aGUgdGFyZ2V0IG5hbWUgaXMgYQorCXByZWZpeCBvZiB0aGUgaG9zdCBuYW1lLCB0aGVuIHVzZSB0aGUgdGFyZ2V0IG5hbWUgYXMgdGhlIGhvc3QKKwluYW1lLgorCitNb24gQXVnIDE1IDEzOjM1OjI0IDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKKworCSogbTY4ay9tNjhrLWNvZmYuaDogTmV3IGZpbGUuCisKK1N1biBBdWcgMTQgMDA6Mjg6MTUgMTk5NCAgQW5kcmV3IE1jQ2FsbHVtICAobWNjYWxsdW1AdmVpbi5jcy5yb2NoZXN0ZXIuZWR1KQorCisJKiBvYmpjL2VuY29kaW5nLmMgKG9iamNfc2l6ZW9mX3R5cGUpOiBBc3NpZ24gZnJvbSBST1VORCwKKwlkb24ndCBpbmNyZW1lbnQuICBSZW1vdmUgOyBhZnRlciB3aGlsZSB0byBmaXggaW5maW5pdGUgbG9vcC4KKwlBZGQgZmxvYXQgYW5kIGRvdWJsZSBjYXNlcy4KKwkob2JqY19hbGlnbm9mX3R5cGUpOiAgQWRkIGZsb2F0IGFuZCBkb3VibGUgY2FzZXMuCisJKiBvYmpjL3NlbGVjdG9yLmMgKCk6IFVzZSBfX29iamNfc2VsZWN0b3JfbmFtZXMsIG5vdAorCV9fb2JqY19zZWxlY3Rvcl9hcnJheS4KKwkoc2VsX3R5cGVzX21hdGNoKTogTmV3IGZ1bmN0aW9uLgorCShzZWxfZ2V0X3R5cGVkX3VpZCk6IFVzZSBzZWxfdHlwZXNfbWF0Y2guICBDaGFuZ2Ugc3RyY21wIHRvICFzdHJjbXAuCisKK1N1biBBdWcgMTQgMjE6NTQ6MjkgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfQUxJR05FRF9DT01NT04sIEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6CisJRGVmaW5lLgorCShBU01fT1VUUFVUX0NPTU1PTiwgQVNNX09VVFBVVF9MT0NBTCk6IERlbGV0ZS4KKworCSogcGEuYyAoaHBwYV9leHBhbmRfcHJvbG9ndWUpOiBBdm9pZCB3cml0aW5nIG91dHNpZGUgdGhlIGN1cnJlbnQKKwlzdGFjayBib3VuZGFyeSBpbiBjb2RlIHRvIGhhbmRsZSBsYXJnZSBzdGFjayBmcmFtZXMuCisKK1N1biBBdWcgMTQgMTg6NTU6NTEgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25zKTogVXNlIFBSRVZfSU5TTiBub3QgcHJldl9ub25ub3RlX2luc24uCisKKwkqIGJzZC01LmggKEFTTV9PVVRQVVRfTkVXTElORSk6IERlbGV0ZS4KKwkoQVNNX09VVFBVVF9BU0NJSSk6IERlZmluZS4KKwkqIG1pcHMtNS5oLCBzdnIzLTUuaCwgc3ZyNC01Lmg6IExpa2V3aXNlLgorCSogbWlwcy5oIChBU01fT1VUUFVUX05FV0xJTkUpOiBEZWxldGUuCisJKEFTTV9PVVRQVVRfQVNDSUkpOiBEb24ndCB1c2UgQVNNX09VVFBVVF9ORVdMSU5FLgorCisJKiB2YS1taXBzLmggKHZhX3N0YXJ0KTogQWRkIGNhc3QgdG8gX19nbnVjX3ZhX2xpc3QgdHlwZS4KKworCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IFdoZW4gYWRkaW5nIFJFR19ERUFEIG5vdGVzLCBjaGVjayBmb3IKKwl0aGUgY2FzZSB3aGVyZSBhIG11bHRpcGxlIHJlZ2lzdGVyIGhhcmQgcmVnIG92ZXJsYXBzIGEgcmVnaXN0ZXIKKwlzZXQgYnkgdGhlIGluc24uCisJKiBzY2hlZC5jIChhdHRhY2hfZGVhdGhzKTogTGlrZXdpc2UuCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMsIGNhc2UgUkVHX0RFQUQpOiBBZGQgYW5vdGhlcgorCWZpbmRfcmVnX2Z1c2FnZSBjYWxsLgorCisJKiB1bnJvbGwuYyAoY2FsY3VsYXRlX2dpdl9pbmMpOiBIYW5kbGUgY29uc3RhbnRzIGxvYWRlZCB3aXRoIElPUi4KKworU3VuIEF1ZyAxNCAxNjo0MDowNCAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNjY3AuYyAoc2tpcF9pZl9ncm91cCk6IE5ldyBhcmcgb3AuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCUlmIG91dHB1dF9jb25kaXRpb25hbHMgaXMgdHJ1ZSwgb3V0cHV0IHRleHQgb2YgZmFpbGVkIGNvbmRpdGlvbmFscy4KKwkoY29uZGl0aW9uYWxfc2tpcCk6IE5ldyBhcmcgb3AuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCShtYWluKTogSGFuZGxlIC1pZm91dHB1dCBvcHRpb24uCisKK1N1biBBdWcgMTQgMDU6NDk6MjkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RleyxfYnJpZWZ9KTogVXNlIFJFQUxfVkFMVUVfVE9fREVDSU1BTAorCXRvIHByaW50IFJFQUxfQ1NUIGlmZGVmIFJFQUxfQVJJVEhNRVRJQy4KKworCSogcmVsb2FkMS5jIChjb3VudF9wb3NzaWJsZV9ncm91cHMpIFBhc3MgQ0xBU1MgYXMgYXJnIGFuZCBvbmx5CisJdHJ5IHRvIGZpbmQgZ3JvdXBzIG9mIHRoYXQgY2xhc3MuCisKKwkqIGNvbmZpZ3VyZTogSWYgY29uZmlnLmd1ZXNzIGZhaWxzIGFuZCB0YXJnZXQgc3BlY2lmaWVkLCB1c2UgYXMgaG9zdC4gCisJUHJpbnQgYSBtZXNzYWdlIHdoZW4gbWFraW5nIGEgY3Jvc3MtY29tcGlsZXIuCisKK1NhdCBBdWcgMTMgMTc6MTI6MzAgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKHNwYXJjLSotc3Vub3M0LjAqKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiB0LXN1bm9zNDogUmVuYW1lIGZpbGUgdG8gdC1zdW5vczQxLgorCSogdC1zdW5vczQwOiBOZXcgZmlsZS4KKworU2F0IEF1ZyAxMyAxMzo1MDoyMiAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEhhbmRsZSBhIHNlY29uZGFyeSBpbnB1dCByZWxvYWQKKwl3aGljaCBuZWVkcyB0byB1c2Ugc2Vjb25kYXJ5IG1lbW9yeSB0b28uCisKK0ZyaSBBdWcgMTIgMTg6NTM6MjQgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBtaXBzL21pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IElmIG5laXRoZXIgLW1jcHU9IG5vciAtbWlwc04gd2FzCisJdXNlZCwgYW5kIE1JUFNfQ1BVX0RFRkFVTFQgaXMgZGVmaW5lZCwgc2V0IG1pcHNfY3B1IHRvCisJTUlQU19DUFVfREVGQVVMVCBhbmQgc2V0IG1pcHNfY3B1X3N0cmluZyB0bworCU1JUFNfQ1BVX1NUUklOR19ERUZBVUxULgorCitGcmkgQXVnIDEyIDEwOjU0OjM1IDE5OTQgIFN0YW4gQ294ICAoY294c0BkZy1ydHAuZGcuY29tKQorCisJKiBtODhrL2RndXguaCwgbTg4ay9kZ3V4YmNzLmggKEFTTV9TUEVDLENQUF9TUEVDKTogCisJTWFkZSAtcGlwZSB3b3JrIGZvciAtbXN2cjQuIEFkZGVkIC1EKl9UQVJHRVQgZGVmaW5pdGlvbnMuCisKKwkqIG04OGsuYyAoZW1pdF9iY25kKTogSW1wcm92ZWQgY29kZSBnZW5lcmF0ZWQgYnkgY2hhbmdpbmcgY21wL2JieAorCWluc3RydWN0aW9uIHBhaXIgdG8gc2luZ2xlIGJjbmQgaW5zdHJ1Y3Rpb24KKworRnJpIEF1ZyAxMiAwNzo1MjoyMCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjc2UuYyAoc2V0X25vbnZhcnlpbmdfYWRkcmVzc19jb21wb25lbnRzKTogSWYgQkFTRSBpcyBDT05TVF9JTlQsCisJYWRkIHZhbHVlIHRvIHN0YXJ0IGFuZCBzZXQgQkFTRSB0byBjb25zdDBfcnR4LgorCShyZWZlcnNfdG9fbWVtX3ApOiBEb24ndCBkbyBpdCBoZXJlLgorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBBZGQgcmVkdW5kYW50IGNvcHkgdG8KKwlzdGF0aWNfY2hhaW5faW5jb21pbmdfcnR4IGlmIFNNQUxMX1JFR0lTVEVSX0NMQVNTIHNvIGlubGluaW5nCisJd29ya3MgcHJvcGVybHkuCisJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFVzZSBzaW5nbGVfc2V0IHdoZW4KKwlhcHByb3ByaWF0ZS4KKwlEZWxldGUgaW5zbiB0aGF0IHNldHMgc3RhdGljX2NoYWluX2luY29taW5nX3J0eCBiZWZvcmUgaXRzIHVzZS4KKwkoc3Vic3RfY29uc3RhbnRzKTogVHJlYXQgdmlydHVhbCByZWcgYXMgY29uc3RhbnQuCisKKwkqIGZsb3cuYyAobWFya191c2VkX3JlZ3MpOiBPbmx5IHNob3cgY2hhbmdlcyBzaXplIGlmIG9uZSBtb2RlIGlzCisJaW50ZWdyYWwuCisJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IExpa2V3aXNlLgorCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgsIGNhc2UgRkxPQVRfVFJVTkNBVEUpOiBSZW1vdmUKKwlyZWR1bmRhbnQgZmxvYXRfdHJ1bmNhdGUuCisJKiByczYwMDAubWQgKG1vdnNmKTogRG9uJ3QgdHJ1bmNhdGUgaWYgbm90IHJlZ2lzdGVyOyBjbGVhbiB1cC4KKworCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFN1cHByZXNzIC1XcmVkdW5kYW50LWRlY2xzIHdhcm5pbmcKKwlpZiB3ZSBoYXZlIGFscmVhZHkgZ2l2ZW4gYW4gZXJyb3IuCisKK1RodSBBdWcgMTEgMTg6NDQ6MjUgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKyAgICAgICAgKiBzdG10LmMgKGV4cGFuZF9hbm9uX3VuaW9uX2RlY2wpOiBGaXggdXAgdGhlIGFsaWdubWVudCBhbmQgbW9kZQorICAgICAgICBvZiB0aGUgbWVtYmVyIFZBUl9ERUNMcy4KKworVGh1IEF1ZyAxMSAxMzozNjoxNCAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogdHJlZS5jIChzdGFiaWxpemVfcmVmZXJlbmNlKTogIEhhbmRsZSBDT01QT1VORF9FWFBSLgorCisJKiBmaXgtaGVhZGVyLmMgKHdyaXRlX3JicmFjKTogIElmIE5PX0lNUExJQ0lUX0VYVEVSTl9DIGlzIGRlZmluZWQsCisJYWRkIGV4dGVybiAiQyIgeyAuLi4gfSB0byBhZGRlZCBwcm90b3R5cGVzLiAgKE5lZWRlZCBmb3IgaHB1eC4pCisKK1RodSBBdWcgMTEgMTQ6MjM6NTkgMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNjY3AuYyAocmVzY2FuKTogRml4IGJvdGNoZXMgd2l0aCBgLWxpbnQnOiB0aGUgb3V0cHV0IGJ1ZmZlcgorCXBvaW50ZXIgd2FzIG5vdCByZWNhY2hlZCBwcm9wZXJseSwgbGVhZGluZyB0byBsb3N0IG91dHB1dC4KKwlBbHNvLCBidWZmZXIgb3ZlcnJ1biB3YXMgcG9zc2libGUuCisKKwkqIGNjY3AuYyAoZHVtcF9kZWZuXzEpOiBTa2lwIG5ld2xpbmVzIGFuZCBzdHJpbmdzIGNvcnJlY3RseS4KKworVGh1IEF1ZyAxMSAxNDoxMzoxNyAxOTk0ICBOaWtsYXMgSGFsbHF2aXN0ICAobmlrbGFzQGFwcGxpLnNlKQorCisJKiBjb25maWd1cmUgKG02OGstKi1uZXRic2QqKTogTmV3IHRhcmdldCwgbGlrZSBvdGhlcnMuCisKK1RodSBBdWcgMTEgMTQ6MDk6MjMgMTk5NCAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgIChkYXZpZG1AcGlzdG9uLmNzLmFyaXpvbmEuZWR1KQorCisgICAgICAqIGFscGhhLmggKEZVTkNUSU9OX1BST0ZJTEVSKTogIExvYWQgZ2xvYmFsIHBvaW50ZXIgZnJvbSAkMjcsIG5vdCAkMjYuIGUKKyAKK1RodSBBdWcgMTEgMTM6NTI6MTUgMTk5NCAgV2FsdGVyIE1pc2FyICAobWlzYXJAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlKQorCisJKiBtNjhrL2hwMzIwLmggKE5PX0RPVF9JTl9MQUJFTCk6IERlZmluZSBpZiBIUFVYX0FTTS4KKworVGh1IEF1ZyAxMSAxMzoxMjoxMiAxOTk0ICBEYXZpZCBNb3NiZXJnZXItVGFuZyAgKGRhdmlkbUBjcy5hcml6b25hLmVkdSkKKworCSogYWxwaGEuaCAoQkxPQ0tfUFJPRklMRVIpOiBVc2UgJDI2IGFuZCAkMjcgaW5zdGVhZCBvZiAkMCBhbmQgJDEuCisKK1RodSBBdWcgMTEgMTM6MDk6MzYgMTk5NCAgQW50dGkgTWlldHRpbmVuICAoYW1pZXR0aW5AdHJzaHAudHJzLm50Yy5ub2tpYS5jb20pCisKKwkqIGNvbmZpZy9seW54LmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBDYWxsIGFzc2VtYmxlX25hbWUuCisKK1RodSBBdWcgMTEgMTI6NTc6MjIgMTk5NCAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBSZWxlZ2F0ZSBzaW4gYW5kIGNvcyB0byBmZmFzdC1tYXRoLgorCitUaHUgQXVnIDExIDEyOjQ1OjIwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IEVuc3VyZSB0aGF0IGFsbCBwcm9wb3NlZCBjaGFuZ2VzIHRvCisJaW5zbnMgYXJlIHZhbGlkIGJlZm9yZSBjb21taXRpbmcgdG8gdGhlIGF1dG8taW5jLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEVuc3VyZSB3ZSBjYWxsIGZvcmNlX29wZXJhbmQgb24KKwlzdHJ1Y3R1cmVfdmFsdWVfYWRkci4KKworCSogY29uZmlndXJlOiBVc2UgY29uZmlnLmd1ZXNzIHRvIGdldCBkZWZhdWx0IHZhbHVlIGZvciBob3N0LAorCW5vdCB0YXJnZXQuCisKK1RodSBBdWcgMTEgMTI6NDM6MjQgMTk5NCAgUm9iZXJ0IFdpbGhlbG0gIChSb2JlcnQuV2lsaGVsbUBwaHlzaWsudHUtbXVlbmNoZW4uZGUpCisKKwkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IEFkZCBtaXNzaW5nIC1mLgorCitUdWUgQXVnICA5IDAyOjAyOjA3IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoZGVmYXVsdCBzZXQgaGlnaCk6IERvIG5vdCBhY2NlcHQgZnVuY3Rpb24gbGFiZWwgYXJpdGhtZXRpYworCWFzIGEgdmFsaWQgb3BlcmFuZC4KKwkoZGVmYXVsdCBsb19zdW0pOiBMaWtld2lzZS4KKwkqIHBhLmMgKGhwcGFfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRG8gbm90aGluZyB3aXRoIGZ1bmN0aW9uIGxhYmVsCisJYXJpdGhtZXRpYy4KKwkoZW1pdF9tb3ZlX3NlcXVlbmNlKTogU3BsaXQgdXAgZnVuY3Rpb24gbGFiZWwgYXJpdGhtZXRpYyBzbyB0aGF0CisJZnVuY3Rpb24ncyBhZGRyZXNzIGlzIGxvYWRlZCBmaXJzdCwgdGhlbiBjb25zdGFudCBwYXJ0IGlzIGFkZGVkIHRvCisJdGhlIGZ1bmN0aW9uJ3MgYWRkcmVzcy4KKwkoaXNfZnVuY3Rpb25fbGFiZWxfcGx1c19jb25zdCk6IE5ldyBmdW5jdGlvbi4KKworTW9uIEF1ZyAgOCAxOTo1NzowNSAxOTk0ICBNYXR0aGlhcyBQZmFsbGVyICAobGVvQG1hcmNvLmRlKQorCisJKiBuczMyay5tZCAoYWxsIHBhdHRlcm5zIHRoYXQgdXNlIGlucy9pbnNzIGFuZCBleHQvZXh0cyk6CisJRGlzYWxsb3cgdXNlIG9mIHRoZXNlIGluc3RydWN0aW9ucyB3aGVuIC1tbm9iaXRmaWVsZCBpcworCXNwZWNpZmllZC4KKwkqIG5zMzJrLmggKFRBUkdFVF9CSVRGSUVMRCk6IE5ldyBtYWNyby4KKwkoVEFSR0VUX1NXSVRDSEVTKTogU3VwcG9ydCBmb3IgVEFSR0VUX0JJVEZJRUxELgorCSogbnMzMmsvbmV0YnNkLmggKFRBUkdFVF9ERUZBVUxUKTogQWRkZWQgLW1ub2JpdGZpZWxkLgorCShDUFBfUFJFREVGSU5FUyk6IEFkZGVkIC1EcGM1MzIuCisJKFdDSEFSX3tUWVBFLCBVTlNJR05FRCwgVFlQRV9TSVpFfSk6IENoYW5nZWQgdG8gbWF0Y2ggbmV3IGRlZmluaXRpb24KKwlpbiBOZXRCU0QgMS4wLgorCSogbnMzMmsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogQSBwYXRjaCBmb3IgMi41LjggZW5kZWQgdXAgYXQgdGhlCisJd3JvbmcgcGxhY2UuICBNb3ZlZC4KKworTW9uIEF1ZyAgOCAxOTo0MjowOSAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IFdhcm4gYWJvdXQgYCNkZWZpbmUgYUAnLCBzaW5jZSBhCisJZGlhZ25vc3RpYyBpcyBub3cgcmVxdWlyZWQgKHNlZSBJU08gVEMxJ3MgYWRkaXRpb24gdG8KKwlzdWJjbGF1c2UgNi44KS4gIEFsc28gd2FybiBhYm91dCBgI2RlZmluZSBpcy1lbXB0eSh4KSAoIXgpJy4KKworTW9uIEF1ZyAgOCAxNjozMjozNyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmaXgtaGVhZGVyLmMgKHdyaXRlX3JicmFjKTogU2V0IHVwIHRvIHVzZSBmaXhlZCBoZWFkZXJzCisJaWYgX19VU0VfRklYRURfSEVBREVSU19fIGlzIGRlZmluZWQuCisKKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBBbHdheXMgY2xlYXIgbmV3X3NwaWxsX3JlZ19zdG9yZS4KKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZvcmNlIHJlbG9hZCBmb3IgcGFyYWRveGljYWwgU1VCUkVHCisJb2YgTUVNIGlmIEJZVEVTX0JJR19FTkRJQU4uCisKKwkqIG02OGsvaHAzMjAuaCAoUkVBRE9OTFlfREFUQV9TRUNUSU9OKTogUmVtb3ZlIGRlZmluaXRpb24uCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IE9ubHkgdXNlCisJc3RhdGljX2NoYWluX2luY29taW5nX3J0eCBvbmNlIGlmIGl0IGlzIGEgUkVHIGFuZCB3ZSAKKwloYXZlIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMuCisKKwkqIGxvY2FsLWFsbG9jLmMgKGZpbmRfZnJlZV9yZWcpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKwkqIHJzNjAwMC5oIChDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUpOiBOZXcgbWFjcm8uCisKK1N1biBBdWcgIDcgMDg6NTQ6NDIgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVncy5oIChyZWdfY2hhbmdlc19zaXplKTogQWRkIGRlY2xhcmF0aW9uLgorCSogZmxvdy5jIChyZWdfY2hhbmdlc19zaXplKTogTmV3IHZhcmlhYmxlLgorCShhbGxvY2F0ZV9mb3JfbGlmZV9hbmFseXNpcyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGl0LgorCShtYXJrX3VzZWRfcmVncywgY2FzZSBTVUJSRUcpOiBTZXQgaXQuCisJKiBsb2NhbC1hbGxvYy5jIChxdHlfY2hhbmdlc19zaXplKTogTmV3IHZhcmlhYmxlLgorCShhbGxvY19xdHl7LF9mb3Jfc2NyYXRjaH0sIHVwZGF0ZV9xdHlfY2xhc3MpOiBTZXQgaXQuCisJKGxvY2FsX2FsbG9jKTogQWxsb2NhdGUgaXQuCisJKGZpbmRfZnJlZV9yZWcpOiBJZiBDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUsIGF2b2lkIGl0cyByZWdpc3RlcnMKKwlpZiBxdHlfY2hhbmdlc19zaXplLgorCSogZ2xvYmFsLmMgKGZpbmRfcmVnKSBJZiBDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUsIGF2b2lkIGl0cworCXJlZ2lzdGVycyBpZiByZWdfY2hhbmdlc19zaXplLgorCSogc3R1cGlkLmMgKHJlZ3NfY2hhbmdlX3NpemUpOiBOZXcgdmFyaWFibGUuCisJKHN0dXBpZF9saWZlX2FuYWx5c2lzKTogQWxsb2MsIGluaXQgYW5kIHBhc3MgaXQgdG8gc3R1cGlkX2ZyZWVfcmVnLgorCShzdHVwaWRfbWFya19yZWdzKTogU2V0IGl0LgorCShzdHVwaWRfZmluZF9yZWcpOiBOZXcgYXJnLCBDSEFOR0VTX1NJWkU7IGF2b2lkIHJlZ3MKKwlpbiBDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUgaWYgZGVmaW5lZCBhbmQgQ0hBTkdFU19TSVpFIG5vbnplcm8uCisJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBNYWtlIHRlc3QgaW4gTE9BRF9FWFRFTkRfT1AgY2FzZSBtb3JlCisJcHJlY2lzZTsgaGFuZGxlIENMQVNTX0NBTk5PVF9DSEFOR0VfU0laRS4KKwkoZmluZF9yZWxvZHMpOiBXaGVuIHNldHRpbmcgZm9yY2VfcmVsb2FkcywgbWFrZSBMT0FEX0VYVEVORF9PUAorCWNhc2UgbW9yZSBwcmVjaXNlLgorCSogYWxwaGEuaCAoQ0xBU1NfQ0FOTk9UX0NIQU5HRV9TSVpFKTogTmV3IG1hY3JvLgorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzLCBjYXNlIFNVQlJFRyk6IEFkZCBVU0Ugb2YgcHNldWRvCisJc28gd2UgZG9uJ3QgaW1wcm9wZXJseSBkZWxldGUgYW4gb3V0cHV0IHJlbG9hZC4KKworRnJpIEF1ZyAgNSAxNTowODozOSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworICAgICAgICAqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIENPTkRfRVhQUiBjYXNlKTogVXNlIHRydXRodmFsdWVfY29udmVyc2lvbgorICAgICAgICB0byBtYWtlIHRoZSBjb25kaXRpb24gZm9yIHJ1bm5pbmcgY2xlYW51cHMgYWNjZXB0YWJsZSB0bworICAgICAgICBpbnZlcnRfdHJ1dGh2YWx1ZS4KKworRnJpIEF1ZyAgNSAxMjoyOTo0MiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCk6IEFjY2VwdCBESW1vZGUgZm9yIHN5bnRoX211bHQgb25seSBpZgorCUNPTlNUX0RPVUJMRV9ISUdIIGlzIHplcm8uICBSZWplY3QgbmVnYXRpdmUgdmFsdWVzIGZvciBzeW50aF9tdWx0CisJaWYgdGhlIG1vZGUgaXMgbGFyZ2VyIHRoYW4gSE9TVF9CSVRTX1BFUl9JTlQuICBEb24ndCBkbyB0aGUKKwluZWdhdGVfdmFyaWFudCBpZiB0aGUgbW9kZSBpcyBsYXJnZXIgdGhhbiBIT1NUX0JJVFNfUEVSX0lOVC4KKworRnJpIEF1ZyAgNSAxMjoyMzoxNyAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogZ2JsLWN0b3JzLmggKERPX0dMT0JBTF9DVE9SU19CT0RZKTogVXNlIGxvbmcgaW5zdGVhZCBvZgorCUhPU1RfV0lERV9JTlQuCisKK0ZyaSBBdWcgIDUgMTI6MTg6MTggMTk5NCAgS2F2ZWggUi4gR2hhemkgIChnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1KQorCisJKiBjb25maWd1cmU6IEluIHN1YmRpcmVjdG9yaWVzLCBtYWtlIGxpbmsgdG8gaW5jbHVkZSBkaXJlY3RvcnkuCisJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogRGVsZXRlIGl0LgorCitUaHUgQXVnICA0IDE3OjIxOjAyIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisgICAgICAgICogZXhwci5jIChkZWZlcl9jbGVhbnVwc190byk6IFB1dCBiYWNrIGxpbmUgd2hpY2ggd2FzIG1pc3Rha2VubHkKKyAgICAgICAgcmVtb3ZlZC4KKworV2VkIEF1ZyAgMyAyMTozNzozMSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmMgKHY5IHNwYXJjX2J1aWx0aW5fc2F2ZXJlZ3MpOiBTYXZlIHF1YWR3b3JkIGZwIHJlZ3Mgb24KKwkxNiBieXRlIGJvdW5kYXJpZXMuICBIYW5kbGUgbm9uLXplcm8gbnVtYmVyIG9mIG5hbWVkIGZwIGFyZ3MuCisJKiB2YS1zcGFyYy5oICh2OSB2YV9zdGFydCk6IFBhc3MgYW4gYXJnIHRvIF9fYnVpbHRpbl9uZXh0X2FyZy4KKwkodjkgdmFfYXJnKTogQWR2YW5jZSBvdmVyIGZsb2F0J3MuCisKK1dlZCBBdWcgIDMgMTE6MTA6MzIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBtb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmaXhpbmNsdWRlczogQ2hhbmdlcyBmb3IgZ2xpYmMuICBJbiB0aGUgbWFpbiBsb29wLCBkb24ndCBmaXgKKwlmaWxlcyB3aGljaCBjb250YWluIHRoZSBzdHJpbmcgYGBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMKKwlMaWJyYXJ5JycuICBEb24ndCBpbmNsdWRlIDxzdGRhcmcuaD4gaW4gPHN0ZGlvLmg+IGlmIDxzdGRpby5oPgorCWNvbnRhaW5zIHRoZSBzdHJpbmcgYGBfX25lZWRfX192YV9saXN0JycuICBJbiA8c3RkaW8uaD4sIGRvbid0CisJY2hhbmdlIEdOVUNfVkFfTElTVCB0byBHTlVDX0RVTU1ZX1ZBX0xJU1QuICBEb24ndCBhZGQgZXh0ZXJuICJDIgorCXRvIDxhc3NlcnQuaD4gaWYgaXQgY29udGFpbnMgdGhlIHN0cmluZyBgYF9fQkVHSU5fREVDTFMnJy4gIERvbid0CisJYWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIHRvIDx0aW1lLmg+IG9yIDxzeXMvdGltZS5oPiBpZgorCXRoZXkgY29udGFpbiB0aGUgc3RyaW5nIGBgI2lmbmRlZicnLgorCitUdWUgQXVnICAyIDE4OjM4OjQ2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBDbGVhbiB1cCBzb21lIG1vZGUgYW5kCisJc2l6ZSBjaGVja3Mgd2l0aCBDT05TVF9ET1VCTEVzOyBUUlVOQ0FURSBzaG91bGQgZG8gbm90aGluZy4KKworCSogY29tYmluZS5jIChzdWJzdF9wcmV2X2luc24pOiBSZW1vdmUgdmFyaWFibGUgYW5kIGFsbCB1c2VzLgorCitUdWUgQXVnICAyIDE0OjQyOjI5IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIHNwYXJjLmggKFY5X1NXSVRDSEVTKTogQWRkIC1tbWVkbG93LCAtbW1lZGFueS4KKwkoVEFSR0VUX09QVElPTlMpOiBEZWxldGUuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRG9uJ3QgdW5maXggJWc0IGlmIC1tbWVkYW55LgorCSogc3BhcmMuYyAoc3BhcmNfY29kZV9tb2RlbCk6IERlbGV0ZS4KKwkoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IENvZGUgbW9kZWwgZmxhZ3Mgb25seSB1c2VhYmxlIHdpdGggdjkuCisKKwkqIHNwYXJjLmggKGVudW0gcmVnX2NsYXNzKTogTmV3IHZhbHVlcyBFWFRSQV9GUF9SRUdTLAorCUdFTkVSQUxfT1JfRVhUUkFfRlBfUkVHUyBmb3IgdGhlIHY5IGNhc2UuCisJKFJFR19DTEFTU19OQU1FUyk6IExpa2V3aXNlLgorCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBMaWtld2lzZS4KKwkoUkVHTk9fUkVHX0NMQVNTKTogSGFuZGxlIEVYVFJBX0ZQX1JFR1MuCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IExpa2V3aXNlLCBhcyBgZScuCisJVHJlYXQgYGUnIGxpa2UgYGYnIGluIHY4IGNhc2UuCisJKEZQX1JFR19DTEFTU19QKTogTmV3IG1hY3JvLgorCShQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogVXNlIGl0LgorCShTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTLCBTRUNPTkRBUllfT1VUUFVUX1JFTE9BRF9DTEFTUywKKwlTRUNPTkRBUllfTUVNT1JZX05FRURFRCwgQ0xBU1NfTUFYX05SRUdTLCBSRUdJU1RFUl9NT1ZFX0NPU1QpOgorCUxpa2V3aXNlLgorCSogc3BhcmMubWQgKGFsbCBERi9URm1vZGUgcGF0dGVybnMpOiBVc2UgYGUnIGluIGNvbnRyYWludCBmaWVsZAorCWluc3RlYWQgb2YgYGYnLgorCitNb24gQXVnICAxIDIwOjA1OjUxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CisKKwkqIGNvbmZpZy9pMzg2L2dudS5oOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni0qLWdudSopOiBEZWFsIHdpdGggdGhpcyBvbiBpdHMgb3duLCBub3QgbGlrZQorCWlbMzRdODYtKi1tYWNoKi4gIFVzZSBpMzg2L2dudS5oIGFuZCB0LWxpYmMtb2s7IHNldCBnbnVfbGQgYW5kCisJZ2FzLCBhbmQgZGlzYWJsZSBmaXhpbmNsdWRlcy4KKworTW9uIEF1ZyAgMSAxOToyNzo0NCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0cmVlLmMgKHBlcm1hbmVudF9hbGxvY2F0aW9uKTogV2hlbiBmcmVlaW5nIHRvCisJbW9tZW50YXJ5X2Z1bmN0aW9uX2ZpcnN0b2JqLCBzZXQgbW9tZW50YXJ5X2ZpcnN0b2JqIHRvIGJlCisJdGhlIG5leHQgYXZhaWxhYmxlIGxvY2F0aW9uIChpLmUuLCBtb21lbnRhcnlfZnVuY3Rpb25fZmlyc3RvYmopLgorCitNb24gQXVnICAxIDE4OjUyOjQwIDE5OTQgIENocmlzIEFydGh1ciAgKGNzYUBnbnUuYWkubWl0LmVkdSkKKworCSogc3RkZGVmLmg6IEhhbmRsZSBfQlNEX1dDSEFSX1RfIGxpa2UgX1dDSEFSX1RfLCBzaW5jZQorCWF0IGxlYXN0IEJTRC8zODYgMS4xIHVzZXMgdGhlIGZvcm1lciBpbnN0ZWFkIG9mIHRoZSBsYXR0ZXIuCisJSWYgX0JTRF9SVU5FX1RfIGlzIGRlZmluZWQsIHRoZW4gZGVmaW5lIHJ1bmVfdCB3aGVuIHdlIGRlZmluZQorCXdjaGFyX3QuICBUZXN0IGRlZmluZWRuZXNzIG9mIF9HQ0NfU0laRV9UIGFzIHdlbGwgYXMKKwlfR0NDX1NJWkVfVF87IGxpa2V3aXNlIGZvciBfR0NDX1BUUkRJRkZfVCBhbmQgX0dDQ19XQ0hBUl9ULgorCitNb24gQXVnICAxIDA1OjIwOjQ0IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS1naHB1eC5oLCBwYS1ocHV4LmggKExJTktfU1BFQyk6IEFueSAtZyBhcmd1bWVudCBpbXBsaWVzCisJc3RhdGljIGxpbmtpbmcuCisKK1N1biBKdWwgMzEgMTc6MTk6MzcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKyAgICAgICAgKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IERvbid0IGZhbGwgZG93biB0cnlpbmcgdG8KKyAgICAgICAgcGFzcyB0aGluZ3MgYnkgaW52aXNpYmxlIHJlZmVyZW5jZS4KKworU3VuIEp1bCAzMSAwNjo1Njo0NiAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogY2NjcC5jIChteV9zdHJlcnJvcik6IE5ldyBmdW5jdGlvbi4KKwkoZXJyb3JfZnJvbV9lcnJubywgcGVycm9yX3dpdGhfbmFtZSk6IFVzZSBpdC4KKworU2F0IEp1bCAzMCAxMjo1OTowMSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IEFwcGx5IG1hc2tzIHRvIGNvbnN0YW50cy4KKworCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RleyxfYnJpZWZ9KTogVXNlIGNvcnJlY3QgcHJpbnRmIGNvZGUgdG8KKwlwcmludCBJTlRFR0VSX0NTVCBpZiBIT1NUX1dJREVfSU5UIGlzIHdpZGVyIHRoYW4gaW50LgorCisJKiBleHBtZWQuYyAoe3N0b3JlLGV4dHJhY3R9X2JpdF9maWVsZCk6IERvbid0IHVzZSBiaXRmaWVsZCBpbnNuCisJaWYgT1AwIGlzIHJlZ2lzdGVyIGFuZCBiaXRmaWVsZCBzcGFucyBpdC4KKworCSogbTg4ay5jIChhcml0aDY0X29wZXJhbmQpOiBJbnRlZ2VyIENPTlNUX0RPVUJMRSBpcyBub3QgREltb2RlLgorCSogc3BhcmMuYyAocmVnX29yXzBfb3BlcmFuZCk6IExpa2V3aXNlLgorCSogbnMzMmsuYywgcGEuYyAocHJpbnRfb3BlcmFuZCk6IExpa2V3aXNlLgorCSogZng4MC5oLCBnbWljcm8uaCwgbnMzMi97Z2VuaXgsbWVybGlufS5oIChQUklOVF9PUEVSQU5EKTogTGlrZXdpc2UuCisJKiBtNjhrL2NyZHMuaCwgbTY4ay9uZXdzLmgsIHB5ci5oIChQUklOVF9PUEVSQU5EKTogTGlrZXdpc2UuCisKKwkqIGFscGhhLmggKENBU0VfVkVDVE9SX1BDX1JFTEFUSVZFKTogRGVmaW5lLgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCk6IEFib3J0LgorCShBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBOb3cgd2hhdCB1c2VkIHRvIGJlIHByZXZpb3VzIGRlZmluaXRpb24uCisJKiBhbHBoYS5tZCAodGFibGVqdW1wKTogUmV3b3JrIHRvIGxvb2sgbGlrZSBub3JtYWwgYWRkIGJ1dCB2ZXJpZnkKKwl0aGF0IGxhYmVsIGlzIGZvciBuZXh0IGluc24gYW5kIGlzIHRhYmxlanVtcDsgbG9vayBmb3IgQUREUl9ESUZGX0VMVC4KKwkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBNRU0pOiBTdXJyb3VuZCBUUlVOQ0FURSBmb3IganVtcCB0YWJsZQorCWVudHJ5IHdpdGggYSBDT05TVC4KKwkoZm9sZF9ydHgsIGNhc2UgJzEnKTogSGFuZGxlIG9wZXJhbmQgMCBvZiBhIENPTlNULgorCShmb2xkX3J0eCwgY2FzZSBQTFVTKTogSGFuZGxlIChjb25zdCAobWludXMgKGxhYmVsX3JlZikgKGxhYmVsX3JlZikpKS4KKworRnJpIEp1bCAyOSAxOToyNzoxNyAxOTk0ICBMZWUgSXZlcnNvbiAgKGxlZWlAYWkuc3JpLmNvbSkKKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogUHJlc2VydmUgaW5pdGlhbGlhbGl6ZXIgaWYgaXRlcmF0b3IuCisKK0ZyaSBKdWwgMjkgMTk6MDc6MjMgMTk5NCAgSGFsbHZhcmQgQiBGdXJ1c2V0aCAgKGguYi5mdXJ1c2V0aEB1c2l0LnVpby5ubykKKworCSogbGliZ2NjMi5jOiBBZGQgZGVjbGFyYXRpb24gb2YgY3RpbWUuCisJKiBiYy1lbWl0LmMgKGJjX3N5bV93cml0ZSk6IENoYW5nZSAlZCB0byAlbHUgaW4gcHJpbnRmIGNhbGxzLgorCSogZml4LWhlYWRlci5jICh3cml0ZV97bCxyfWJyYWMpOiBTcGVjaWZ5IHJldHVybiB0eXBlIG9mIGludC4KKwkqIHRyZWUuYyAoY2hhbmdlX21haW5fdmFyaWFudCk6IFJldHVybiB0eXBlIG5vdyB2b2lkLgorCSogdmFyYXNtLmMgKGJjX291dHB1dF9jb25zdHJ1Y3Rvcik6IFJldHVybiB0eXBlIG5vdyBydHguCisKK0ZyaSBKdWwgMjkgMTg6MzM6NDggMTk5NCAgS2VuIER1ZGEgIChramRAY2FjaGUuY3JjLnJpY29oLmNvbSkKKworCSogYy10eXBlY2suYyAoYnVpbGRfdW5hcnlfb3AsIGNhc2UgKklOQ1JFTUVOVF9FWFBSKToKKwlBZGQgc2l6ZSBpbiBieXRlcywgbm90IHZhbHVlIG9mIHNpemVvZi4KKworRnJpIEp1bCAyOSAxNzozNjozOCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplIFZBTFVFX0FERFJFU1MuCisKKwkqIHJvbXAubWQgKHRzdD9mKTogVXNlIENPTlNUMF9SVFggaW5zdGVhZCBvZiBpbmNvcnJlY3QgY2FsbAorCXRvIGltbWVkX3JlYWxfY29uc3RfMS4KKworCSogZXhwci5jIChtb3ZlX2Jsb2NrX3RvX3JlZyk6IERvIG5vdGhpbmcgaWYgTlJFR1MgPT0gMC4KKworRnJpIEp1bCAyOSAxNzoxNzoxOCAxOTk0ICBUb20gVHJvbWV5ICAodHJvbWV5QGJ1c2NvLmxhbmwuZ292KQorCisJKiBjY2NwLmMgKHNwZWNpYWxfc3ltYm9sLCBkb194aWZkZWYpOiBEb24ndCBhY2Nlc3MgdmFsdWUuZGVmbgorCW9mIGEgVF9DT05TVC4KKworVGh1IEp1bCAyOCAxNzoxOTozMiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworICAgICAgICAqIGdibC1jdG9ycy5oIChET19HTE9CQUxfQ1RPUlNfQk9EWSk6IFJldmVyc2Ugb3JkZXIgb2YgZXhlY3V0aW9uCisgICAgICAgIG9mIGNvbnN0dWN0b3IgbGlzdHMuCisgICAgICAgICogY29uZmlnL3N2cjMuaCAoRE9fR0xPQkFMX0NUT1JTX0JPRFkpOiBEaXR0by4KKworICAgICAgICAqIGxpYmdjYzIuYyAoX19kb19nbG9iYWxfZHRvcnMpOiBSZXZlcnNlIG9yZGVyIG9mIGV4ZWN1dGlvbiBvZgorICAgICAgICBkZXN0cnVjdG9yIGxpc3RzLgorCitUaHUgSnVsIDI4IDE5OjU2OjMwIDE5OTQgIEppbSBQZW5kZXJncmFmdCAgKGppbXBAZGctcnRwLmRnLmNvbSkKKworCSogZHdhcmZvdXQuYyAob3V0cHV0X2RlY2wsIGNhc2UgRlVOQ1RJT05fREVDTCk6IENvcnJlY3RlZAorCWFuZCBzaW1wbGlmaWVkIGNvZGUgdGhhdCBkZXRlcm1pbmVkIHdoZW4gdG8gZ2VuZXJhdGUKKwl2YXJhcmdzIG9yIEFOU0kgc3RkYXJncyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGxpc3QKKwlEV0FSRiBpbmZvcm1hdGlvbi4KKworVGh1IEp1bCAyOCAxOTozODo1NyAxOTk0ICBBbmRyZWFzIFNjaHdhYiAgKHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZSkKKworCSogbTY4ay5tZCAoZXh0diwgZXh0enYpOiBJbiBwYXR0ZXJucyB0aGF0IHdpbGwgdXNlIG1vdmIgYW5kCisJbW92dywgZW5zdXJlIHNpemUgaXMgOCBvciAxNi4KKworVGh1IEp1bCAyOCAxOToyODozMSAxOTk0ICBEYXZpZCBSb2JpbnNvbiAgKGRydHJAbWFpbC5hc3QuY2FtLmFjLnVrKQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTkpfRVhQUik6IFVzZSBjb3JyZWN0IG1vZGUgZm9yCisJcGFydHMgb2YgYSBjb21wbGV4IGV4cHJlc3Npb24uCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGNhc2UgTVVMVCBbY29tcGxleF0pIEZpeCB0eXBvLgorCitUaHUgSnVsIDI4IDE5OjIxOjM4IDE5OTQgIFV3ZSBTZWltZXQgIChzZWltZXRAY2hlbWllLnVuaS1rbC5kZSkKKworCSogYW02OGsvYXRhcmkuaCAoRlVOQ1RJT05fVkFMVUUpOiBOZXcgb3ZlcnJpZGUuCisKK1RodSBKdWwgMjggMTc6Mjc6MzggMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIE1ha2VmaWxlLmluIChjLWxleC5vLCBkaXN0ZGlyLXN0YXJ0KToKKwlEZXBlbmQgb24gJChzcmNkaXIpL2MtZ3BlcmYuaCwgbm90IGMtZ3BlcmYuaC4KKworVGh1IEp1bCAyOCAxNToxNDozMyAxOTk0ICBPbGl2ZXIgS2VsbG9nZyAgKG9rZWxsb2dnQHNhbHlrby5jdWJlLm5ldCkKKworCSogbTE3NTAuaW5jIChETlIuTSk6IEFkZCBtaXNzaW5nIG1hY3JvLgorCitUaHUgSnVsIDI4IDEzOjAyOjU2IDE5OTQgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIChrcmFiQGFrdmF2aXQpCisKKwkqIG9iamMvbWlzYy5jIChfX29iamNfeGNhbGxvYyk6IFJlbW92ZSBkZWNsYXJhdGlvbiBvZiBiemVyby4KKworVGh1IEp1bCAyOCAwNzoyOTo1MiAxOTk0ICBNYXJrdXMgV2lsZCAgKG13QGV1bmV0LmNoKQorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBDb3JyZWN0IHN0cmluZyBjaGVjayBmb3IgImZvcm1hdCIKKwl0byBpbmNsdWRlIHVuc2lnbmVkIGFuZCBzaWduZWQgY2hhci4KKworVGh1IEp1bCAyOCAwNzoxMTozNiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGNvbXBhcmVfc3BpbGxfcmVncyk6IFNpbXBsaWZ5IGFuZCByZXR1cm4gemVybyBpZgorCXJlZ2lzdGVycyBhcmUgdGhlIHNhbWUuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogRG9uJ3QgbG9vayBhdCBhbGlnbm1lbnQgb2YgZXJyb3JfbWFya19ub2RlLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgbWFrZSBhIE1VTFQgaWYgbm9uZSBvZiB0aGUgaW5zbnMKKwlpbiBvdXIgaW5wdXQgaGFkIG9uZS4KKworV2VkIEp1bCAyNyAxOTowNjo1MyAxOTk0ICBSIEJvd2xlciAgKHJib3dsZXJAY2l4LmNvbXB1bGluay5jby51aykKKworCSogaTM3MC9tdnMuaCAoQVNNX09VVFBVVF9BU0NJSSk6IEZpeCBidWcgd2hlbiBmaXJzdCBjaGFyYWN0ZXIKKwlvZiBzdHJpbmcgY29uc3RhbnQgaXMgc2luZ2xlIHF1b3RlLgorCitXZWQgSnVsIDI3IDIyOjQ0OjMyIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorICAKKyAgICAgICAgKiBtNjhrL25leHQuaDogI3VuZGVmIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTi4KKworICAgICAgICAqIGFscGhhL2FscGhhLmg6ICNkZWZpbmUgTk9fSU1QTElDSVRfRVhURVJOX0MuCisKK1dlZCBKdWwgMjcgMTQ6MDY6MzcgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogUHJvcGVybHkgc2V0IEFERF9UQVJHRVQgZm9yIGFkZF92YXJpYW50LgorCisJKiBhbHBoYS5oIChJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IFByb3Blcmx5IGNvbXB1dGUgb2Zmc2V0CisJYmV0d2VlbglBUCBhbmQgU1Agd2hlbiBnZXRfZnJhbWVfc2l6ZSBhbmQKKwljdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplIGFyZSBub3QgYSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBEb24ndCBtYWtlIFJFR19OT1RFIGlmIGxhc3QgaW5zbidzCisJZGVzdGluYXRpb24gaXNuJ3QgUVVPVElFTlQuCisKK1R1ZSBKdWwgMjYgMTk6NDU6NTQgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBUlJBWV9SRUYpOiBEb24ndCBmb2xkIEwiZm9vIlsyXS4KKworVHVlIEp1bCAyNiAxNDoxMDo1MiAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogY29uZmlnLnN1YjogIFJlZmVyIHRvIE5lWFQncyBvcGVyYXRpbmcgc3lzdGVtIGFzIG5leHRzdGVwLgorCitUdWUgSnVsIDI2IDEzOjUwOjM3IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBEbyBub3QgY2FsbCBwdXNoX2luaXRfbGV2ZWwKKwlpZiB0aGUgdmFsdWUgaXMgZXJyb3JfbWFya19ub2RlLgorCisJKiBpcmlzNS5oIChOT19JTVBMSUNJVF9FWFRFUk5fQyk6IERlZmluZS4KKworTW9uIEp1bCAyNSAwMDoyMDozNiAxOTk0ICBDaHJpcyBBcnRodXIgIChjc2FAZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoY2Fub25fdGFyZ2V0KTogYWRkIGNhc2VzIHRvIHJlY29nbml6ZSBCU0QvMzg2CisJc3BlY2lmaWNhbGx5LCBzbyB3ZSBjYW4gdXNlIGEgdG1fZmlsZSB0aGF0IHdpbGwgY2F1c2UgX19ic2RpX18KKwl0byBnZXQgZGVmaW5lZCAoc2luY2UgZW1hY3MsIGFtb25nIG90aGVyIHRoaW5ncywgbmVlZHMgaXQpLgorCisJKiBjb25maWcvaTM4Ni9ic2QzODYuaDogTmV3LiAgVXNlIDM4NmJzZC5oLCBhbmQganVzdCBvdmVycmlkZQorCUNQUF9QUkVERUZJTkVTIChhZGQgLURic2RpKSBhbmQgV0NIQVIgc3R1ZmYuCisKK1NhdCBKdWwgMjMgMTY6MzA6MTIgMTk5NCAgS2F2ZWggUi4gR2hhemkgIChnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1KQorCisJKiBmaXhpbmMuc3ZyNDogQ2hhbmdlIGk4NjAgaW4gI2lmIHRvIF9faTg2MF9fLCBhcyB3aXRoIG90aGVyIENQVXMuCisKK0ZyaSBKdWwgMjIgMTQ6MzM6NTkgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBoODMwMC5tZCAoYW5kaGkzLCBpb3JoaTMsIHhvcmhpMyk6IENoYW5nZSBjb25zdHJhaW50IG9uCisJb3BlcmFuZCAyIGZyb20gYGknIHRvIGBuJy4KKworRnJpIEp1bCAyMiAwOTozMDozOSAxOTk0ICBESiBEZWxvcmllICAoZGpAY3Ryb24uY29tKQorCisJKiBjb25maWd1cmUuYmF0OiBtb3ZlIGNvZGUgdG8gY29uZmlnL21zZG9zLyogKHNpbXBsaWZpY2F0aW9uKQorCisJKiBjb25maWcvbXNkb3MvY29uZmlndXJlLmJhdCBbbmV3IGZpbGVdOiBtb3ZlZCBtb3N0IHByb2Nlc3NpbmcKKwloZXJlIHNvIHRoYXQgYXMgdGhpbmdzIGdldCBtb3JlIGNvbXBsaWNhdGVkIHdpdGggdGhlIGxhbmd1YWdlCisJYnJlYWtvdXRzLCB0aGUgdG9wIGRpcmVjdG9yeSB3b24ndCBnZXQgdG9vIG1lc3N5LiAgU2VkIHNjcmlwdAorCWJyb2tlbiBvdXQgdG8gc2ltcGxpZnkgcHJvY2Vzc2luZyBhbmQgYXZvaWQgcXVvdGluZyBlcnJvcnMuCisJKiBjb25maWcvbXNkb3MvdG9wLnNlZCBbbmV3IGZpbGVdOiBzZWQgc2NyaXB0IHRvIGNoYW5nZSBNYWtlZmlsZS5pbgorCXRvIE1ha2VmaWxlIGluIHRvcCBkaXJlY3RvcnkgKGN1cnJlbnRseSB1c2VkIGZvciBjcCBkaXJlY3RvcnkgYWxzbykKKwlzZWQgY29tbWFuZHMgY2hhbmdlZCB0byBoYW5kbGUgbGFuZ3VhZ2UgYnJlYWtvdXQKKworCSogZ2NjLmMgKHBleGVjdXRlKTogdXNlIHNwYXduKigpIGZvciBkamdwcCB0byBlbnN1cmUgdGhhdCBxdW90ZXMKKwlhcmUgcHJvcGVybHkgcHJlc2VydmVkLiAgUmVzcG9uc2UgZmlsZSBjb2RlIGxlZnQgZm9yIDE2LWJpdAorCWNvbXBpbGVycywgd2hpY2ggY2FuJ3QgaGFuZGxlIHRoZSBsb25nIGNvbW1hbmQgbGluZXMgdGhhdCBnY2MKKwltYXkgZ2VuZXJhdGUuCisKKwkqIGNvbmZpZy9pMzg2L2dvMzIuaDogZGVmaW5lIE5PX0lNUExJQ0lUX0VYVEVSTl9DLgorCitUaHUgSnVsIDIxIDIzOjE5OjAzIDE5OTQgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHdvbWJhdC5nbnUuYWkubWl0LmVkdSkKKworICAgICAgICAqIHNoL3NoLmggKFRBUkdFVF9TV0lUQ0hFUywgUEFDS1NUUlVDVF9CSVQsIFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZKToKKyAgICAgICAgcGFyc2UgYW5kIGhhbmRsZSBuZXcgb3B0aW9uLgorICAgICAgICAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogTEFCRUxfUkVGcyBhcmUgbm8gbG9uZ2VyIGlsbGVnYWwuCisgICAgICAgIChXQ0hBUl9UWVBFLCBXQ0hBUl9UWVBFX1NJWkUpOiBOZXcgZGVmaW5pdGlvbnMuCisgICAgICAgIChIQU5ETEVfUFJBR01BKTogSGFzIHJldHVybi4KKworICAgICAgICAqIHNoL3NoLmMgKGFkZF9mdW5jdGlvbiwgc2Vlbl9mdW5jdGlvbik6IEV4cGVyaW1lbnRhbCBjb2RlIHRvCisgICAgICAgIGdlbmVyYXRlIGJzcnMuCisgICAgICAgIChoYW5kbGVfcHJhZ21hKTogUmV0dXJuIGZpbmFsIGNoYXIuCisgICAgICAgIChleHBhbmRfYWNhbGwpOiBIYW5kbGUgVEFSR0VUX0JTUi4KKyAgICAgICAgKGdlbmVyYWxfbW92ZHN0X29wZXJhbmQsIGdlbmVyYWxfbW92c3JjX29wZXJhbmQpOiBBbGxvdyBvaworICAgICAgICBhdXRvaW5jL2RlYy4KKyAgICAgICAgKGJzcl9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgorICAgICAgICAoZml4aXQpOiBOZWVkIHRvIGZpeCBMQUJFTF9SRUZzLgorCisgICAgICAgICogc2gvc2gubWQgKGFkZGMpOiBTaW1wbGlmeS4KKyAgICAgICAgKGFkZGRpMywgc3ViZGkzLCBuZWdkaTMpOiBVc2Ugb3BlcmFuZF9zdWJ3b3JkLgorICAgICAgICAoc3ViYywgbmVnYyk6IE5ldyBwYXR0ZXJuLgorICAgICAgICAoc2hpZnRzKTogRml4IGNvbnN0cmFpbnRzLgorCitUaHUgSnVsIDIxIDE3OjU5OjQzIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogb2JqYy1hY3QuYyAoYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiBEb24ndCBzZXQgREVDTF9FWFRFUk5BTCBvbgorCWN1cnJlbnRfZnVuY3Rpb25fZGVjbC4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBGb3IgKG5vdCAoeG9yIFggQykpIGdlbmVyYXRlIG5ldyBydHgKKwlpbnN0ZWFkIG9mIG1vZGlmeWluZyBvbGQgcnR4LgorCisJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBJZiBvbGRfZGVjbCBpcyBOVUxMLCB0aGVuIHNldCBpdCB0bworCXRoZSBpbXBsaWNpdCBkZWNsIGlmIGFueS4gIERlbGV0ZSBzdXBlcmZsdW91cyB0ZXN0IGZyb20gd2FybiBtaXNzaW5nCisJcHJvdG90eXBlcyBjb2RlLiAgRm9yIHdhcm4gbWlzc2luZyBkZWNsYXJhdGlvbnMgY29kZSwgb25seSB3YXJuIGlmCisJcHJldmlvdXMgZGVjbCBpcyBpbXBsaWNpdC4KKworVGh1IEp1bCAyMSAxNzo0NzowNSAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogRG9uJ3QgZm9sZCBYLVggdG8gMCBpZiBYIGlzIGZsb2F0aW5nIHBvaW50CisJYW5kICFmbGFnX2Zhc3RfbWF0aC4KKworVGh1IEp1bCAyMSAwMjowNzo0NSAxOTk0ICBDaGFybGVzIExldmVydCAgKGNoYXJsZXNAY29tbS5wb2x5bXRsLmNhKQorCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1tdWx0aWxpYik6IFJld29yayB0byBoYW5kbGUgbWFrZSAtbi4KKwkoc3RtcC1tdWx0aWxpYi1zdWIpOiBOZXcgdGFyZ2V0LgorCitUdWUgSnVsIDE5IDIzOjE0OjQyIDE5OTQgIExhcnJ5IEpvbmVzICAobGFycnkuam9uZXNAc2RyYy5jb20pCisKKwkqIGNvbmZpZ3VyZSAoaVszNF04Ni0qLWlzYyopOiBUcmVhdCBpc2M0IGxpa2UgaXNjMy4KKwlSZW1vdmUgcmVmZXJlbmNlcyB0byBub25leGlzdGFudCBmaWxlcyBhbmQgYWRkIGV4dHJhX3BhcnRzCisJd2hlbiBuZWVkZWQuCisJKGlbMzRdODYtKi1zb2xhcmlzMiopOiBSZW1vdmUgcmVmZXJlbmNlIHRvIG5vbmV4aXN0YW50CisJdC1zY28gYW5kIHVzZSBleHRyYV9wYXJ0cyBpbnN0ZWFkLgorCShpWzM0XTg2LSotc3lzdiosIGk4NjAtKi1zeXN2MyosIG02OGstKi1zeXN2MyosIG02OGstbmNyLXN5c3YqKToKKwlSZXBsYWNlIHQtc3ZyMyB3aXRoIGV4dHJhX3BhcnRzLgorCitUdWUgSnVsIDE5IDIwOjMxOjM0IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogY29uZmlndXJlIChmaW5kIGxhbmcgc3ViZGlycyBsb29wKTogVHJ5IHRvIHdvcmsgYXJvdW5kIGFuCisJYXBwYXJlbnQgYnVnIGluIGJhc2ggMS4xMiBvbiBsaW51eC4KKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogUmVtb3ZlIG11bHRpbGliIGJ1aWxkIGRpcnMuCisKKwkqIGg4MzAwLmMgKHByaW50X29wZXJhbmQsIGRlZmF1bHQgY2FzZSk6IEhhbmRsZSBTRm1vZGUgcmVncy4KKworTW9uIEp1bCAxOCAyMjowMjo1MyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmMgKGNhbGxfb3BlcmFuZCk6IFVzZSBzeW1ib2xpY19vcGVyYW5kIG5vdCBDT05TVEFOVF9QLgorCShjYWxsX29wZXJhbmRfYWRkcmVzcyk6IExpa2V3aXNlLgorCSogc3BhcmMubWQgKGNhbGwqKTogVXNlIHN5bWJvbGljX29wZXJhbmQgbm90IGltbWVkaWF0ZV9vcGVyYW5kLgorCVVzZSAncycgY29uc3RyYWludCBub3QgJ2knIGNvbnN0cmFpbnQuCisKKwkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQ2xlYXIgREVDTF9BQlNUUkFDVF9PUklHSU4gaWYKKwljbGVhciBERUNMX0lOTElORS4KKworCSogZ2xvYmFsLmMgKGZpbmRfcmVnKTogU3RvcmUgZGl2aWRlIHJlc3VsdHMgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcy4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IFdoZW4gaGF2ZSAtQnN0YWdlTiBvcHRpb24sIHBhc3MgaW5jbHVkZQorCW5vdCBzdGFnZU4vLi4vaW5jbHVkZSB0byBwcmVwcm9jZXNzb3IuCisKK01vbiBKdWwgMTggMjE6NTg6MjcgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHRpbnkuY3lnbnVzLmNvbSkKKworCSogbG9vcC5jIChtb3ZlX21vdmFibGVzKTogQXZpb2QgbG9zc2FnZSB3aGVuIENBTExfSU5TTl9GVU5DVElPTl9VU0FHRQorCWlzIE5VTEwuCisKK01vbiBKdWwgMTggMjA6NTM6NTQgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogUmV3b3JrIHJlcXVpcmVkIGxvb3AgdG8gYXZvaWQgY3Jhc2ggb24gZGVjc3RhdGlvbi4KKworVGh1IEp1bCAxNCAwOTo0MjoyMyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBWZXJzaW9uIDIuNi4wIHJlbGVhc2VkLgorCisJKiBleHBsb3cuYyAoZm9yY2VfcmVnKTogRG9uJ3QgbWFrZSBhIFJFR19FUVVBTCBub3RlIGZvciBhbiBpbnNuCisJdGhhdCBkb2Vzbid0IHNldCBURU1QLgorCitXZWQgSnVsIDEzIDE3OjAwOjM1IDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBydGwuY3lnbnVzLmNvbSkKKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QsIGNhc2UgQ0VJTF9ESVZfRVhQUik6CisJSGFuZGxlIGVtaXRfc3RvcmVfZmxhZyByZXR1cm5pbmcgMC4KKworV2VkIEp1bCAxMyAxNjozNTo1NyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBTZXQgTUVNX0lOX1NUUlVDVF9QIG9uIG9iamVjdCBhbmQKKwlibGtfb2JqZWN0LgorCitXZWQgSnVsIDEzIDA4OjQwOjExIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChkaXN0ZGlyLXN0YXJ0KTogTWFrZSB0bXAvZ2luY2x1ZGUgYW5kIGNvcHkgaXRzIGZpbGVzLgorCShkaXN0ZGlyLWZpbmlzaCk6IERvbid0IHVzZSAtZiBNYWtlZmlsZS5pbi4KKwkoZ2NjLnh0YXIuZ3opOiBBZGQgLS1iZXN0LgorCisJKiBmb2xkLWNvbnN0LmMgKGRlY29kZV9maWVsZF9yZWZlcmVuY2UpOiBNZXJnZSBvcGVyYW5kIG9mCisJYSBCSVRfQU5EX0VYUFIgd2l0aCB0aGUgbWFzayBtYWRlIGZyb20gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIE1VTFRfRVhQUik6IFJlbW92ZSBsYXN0IGNoYW5nZS4KKworV2VkIEp1bCAxMyAwNzoxMjozMiAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogeG0tcGEuaCwgeG0tcGFocHV4LmgsIHhtLXBhaGl1eC5oIChVU0VfQ19BTExPQ0EpOiBEZWZpbmUuCisKK1dlZCBKdWwgMTMgMDM6MzA6MzYgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKyAgICAgICAgKiB0cmVlLmggKFRZUEVfTkVFRFNfQ09OU1RSVUNUSU5HKTogTmV3IG1hY3JvLgorICAgICAgICAodHJlZV90eXBlKTogQWRkIG5lZWRzX2NvbnN0cnVjdGluZ19mbGFnLgorICAgICAgICAqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IElmIFRZUEVfTkVFRFNfQ09OU1RSVUNUSU5HLCBwYXNzIGJ5CisgICAgICAgIGludmlzaWJsZSByZWZlcmVuY2UuCisgICAgICAgICogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBEaXR0by4KKworV2VkIEp1bCAxMyAwNjo0OTowNSAxOTk0ICBTaW1vbiBDb29wZXIgIChzY29vcGVyQGhhcmRlZXMucnV0Z2Vycy5lZHUpCisKKwkqIG9iamMvT2JqZWN0Lm06IEluY2x1ZGUgc3RkYXJnLmggYmVmb3JlIHN0ZGlvLmguCisKK1R1ZSBKdWwgMTIgMjE6MzE6NTkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjLWRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBjYWxsIGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWxfZ2xvYmFsCisJd2hlbiB0cmFkaXRpb25hbC4gIFdoZW4gZG9pbmcgY2hlY2tzIGFnYWluc3QKKwlJREVOVElGSUVSX0xJTUJPX1ZBTFVFLCBhbHNvIGRvIGNoZWNrIGFnYWluc3QKKwlJTkRFTlRJRklFUl9HTE9CQUxfVkFMVUUgd2hlbiB0cmFkaXRpb25hbC4KKworCSogZmluYWwuYyAoZ2V0cHdkKTogRGVjbGFyZS4KKworVHVlIEp1bCAxMiAxNjoyNDoxMCAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKKworCSogcGEuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogT25seSBhbGxvdyBpbW1lZGlhdGUgYWRkcmVzc2luZworCXVzaW5nIDUgYml0cyB0byBhdm9pZCBsb3Npbmcgd2l0aCBGUCBsb2FkcyBhbmQgc3RvcmVzIG9uIHBhZ2UgemVyby4KKworVHVlIEp1bCAxMiAxNjoyMDowOSAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLm1kIChhc2hsc2kzLCBsc2hyc2kzLCBhc2hyc2kzKTogT25seSBvdXRwdXQgbG93LW9yZGVyIGZpdmUKKwliaXRzIGZvciAhVEFSR0VUX1BPV0VSIGNhc2UuCisKK1R1ZSBKdWwgMTIgMTM6MDY6MTQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjb21iaW5lLmMgKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVnc18xKTogQ2FuIG9ubHkgaGFuZGxlIFNVQlJFRworCWlmIHRoZSByZWdpc3RlciBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIEJJVFNfUEVSX1dPUkQuCisKKwkqIHNwYXJjL3N5c3Y0LmggKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSLCBCTE9DS19QUk9GSUxFUik6IERlZmluZS4KKworCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogU3RvcmUgZnVsbCBwYXRoIG5hbWUgaW4gLmQgZmlsZSBub3QganVzdAorCXRoZSBmaWxlbmFtZS4KKworCSogUkVBRE1FLklSSVg1OiBOZXcgZmlsZS4KKworVHVlIEp1bCAxMiAxMDo1NToxNCAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9vc2Zyb3NlLmggKENDMV9TUEVDKTogSWYgYm90aCAtcGljLWV4dGVybi8tcGljLWxpYiBhbmQKKwktcGljLW5vbmUsIHVzZSAtcGljLWV4dGVybiB3aW4sIGluc3RlYWQgb2YgLXBpYy1ub25lLgorCisJKiBpMzg2L29zZmVsZi5oIChDQzFfU1BFQyk6IERpdHRvLgorCitUdWUgSnVsIDEyIDA5OjA4OjA2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEb24ndCB0cnkgdG8gY2FsbCBmb3JjZV9jb25zdF9tZW0gb24KKwlhIEhJR0guCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSBNVUxUX0VYUFIpOiBJZiBhcmcgaXMgYW4gdW5zaWduZWQKKwlDRUlMX0RJVl9FWFBSLCBjb252ZXJ0IHRvIFRSVU5DX0RJVl9FWFBSIG9mIGEgUExVU19FWFBSIGluIHNvbWUgY2FzZXMuCisKKwkqIGFscGhhLm1kIChhc2hsZGkzKTogVXBkYXRlIHBhdHRlcm4gZm9yIChzaWduX2V4dGVuZCAoYXNoaWZ0IC4uKSkKKwl0byBtYXRjaCB0aGUgY3VycmVudCBjYW5vbmljYWxpemF0aW9uLgorCisJKiBleHBsb3cuYyAocm91bmRfcHVzaCwgYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IEF2b2lkCisJdXNpbmcgQ0VJTF9ESVZfRVhQUjsgYWRkIGFkanVzdG1lbnQgYW5kIHVzZSBUUlVOQ19ESVZfRVhQUiBpbnN0ZWFkLgorCitUdWUgSnVsIDEyIDA4OjEyOjA0IDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogZGJ4b3V0LmMgKGRieG91dF9zb3VyY2VfZmlsZSk6IEluY3JlbWVudCBzb3VyY2VfbGFiZWxfbnVtYmVyIG91dHNpZGUKKwlvZiBtYWNybyBleHBhbnNpb24uCisKKwkqIGFybS5jIChyZXZlcnNpYmxlX2NjX3JlZ2lzdGVyKTogTmV3IGZ1bmN0aW9uLgorCShmaW5hbF9wcmVzY2FuX2luc24pOiBEb24ndCB0cnkgdG8gY29uZGl0aW9uYWxpemUganVtcHMgd2l0aCBKVU1QX0NMT0IKKwlhdHRyaWJ1dGUuCisJKiBhcm0uaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIHJldmVyc2libGVfY2NfcmVnaXN0ZXIuCisJKiBhcm0ubWQgKG1hdGNoZXIgZm9yIFNGbW9kZSBpbmVxdWFsaXR5IGNvbXBhcmlzb24pOiBVc2UgY21mZSwgbm90IGNmbS4KKwkobWF0Y2hlcnMgZm9yIHtzdG9yZS1mbGFnLCBub3Qtc3RvcmUtZmxhZywgbmVnLXN0b3JlLWZsYWd9KTogT3V0cHV0CisJaWYtZmFsc2UgaW5zdHJ1Y3Rpb24gZmlyc3QgYmVmb3JlIGlmLXRydWUgaW5zdHJ1Y3Rpb24uCisJKG1hdGNoZXIgZm9yIChBTkQgc3RvcmUtZmxhZyB4KSk6IE9ubHkgbWF0Y2ggaWYgcmV2ZXJzaWJsZV9jY19yZWdpc3Rlci4KKwkobWF0Y2hlciBmb3IgKElGLVRIRU4tRUxTRSByZWcgKE5PVCByZWcpKSk6IExpa2V3aXNlLgorCisJKiBhcm0uaCAoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IEFsd2F5cyB0cnVlIGlmIHRoZSBmdW5jdGlvbiBoYXMKKwlub25sb2NhbCBsYWJlbHMuCisJKiBhcm0ubWQgKHtzYXZlLHJlc3RvcmV9X3N0YWNrX25vbmxvY2FsKTogRGVsZXRlLgorCitNb24gSnVsIDExIDE5OjI5OjE1IDE5OTQgIE9saXZlciBLZWxsb2dnICAob2tlbGxvZ2dAc2FseWtvLmN1YmUubmV0KQorCisJKiBtYWNobW9kZS5kZWYgKFRRRm1vZGUpOiBOZXcgbW9kZS4KKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogQWRkIHNvbWUgY29udmVyc2lvbnMgZm9yIFRRRm1vZGUuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfcmVhbCk6IEhhbmRsZSBUUUZtb2RlIG91dHB1dC4KKwkqIGNvbmZpZy5zdWIgKGJhc2ljX21hY2hpbmUpOiBBZGQgMTc1MGEuCisJKiBjb25maWd1cmUgKDE3NTBhLSotKik6IE5ldyBjb25maWd1cmF0aW9uLgorCSogMTc1MGEuYywgMTc1MGEuaCwgMTc1MGEubWQsIG0xNzUwYS5pbmM6IE5ldyBmaWxlcy4KKworTW9uIEp1bCAxMSAxODozODo0MiAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwlBZGQgc3VwcG9ydCBmb3IgdGhlIGg4LzMwMGggY3B1LgorCSogY29uZmlnL2g4MzAwL2xpYjFmdW5jcy5hc206IE5ldyBmaWxlLgorCSogaDgzMDAvdC1oODMwMCAoQ1JPU1NfTElCR0NDMSk6IFVzZSBsaWJnY2MxLWFzbS5hLgorCShMSUIxQVNNU1JDLCBMSUIxQVNNRlVOQ1MsIExJQjJGVU5DU19FWFRSQSwgTVVMVElMSUJfT1BUSU9OUywKKwlNVUxUSUxJQl9ESVJOQU1FUywgTElCR0NDLCBJTlNUQUxMX0xJQkdDQyk6IERlZmluZS4KKwkoZnAtYml0LmMpOiBCdWlsZCBpdC4KKwkqIGg4MzAwL2g4MzAwLmggKENQUF9QUkVERUZJTkVTLCBDUFBfU1BFQywgTElCX1NQRUMsIFRBUkdFVF9TV0lUQ0hFUywKKwlCSVRTX1BFUl9XT1JELCBNQVhfQklUU19QRVJfV09SRCwgVU5JVFNfUEVSX1dPUkQsIE1BWF9VTklUU19QRVJfV09SRCwKKwlQT0lOVEVSX1NJWkUsIFBBUk1fQk9VTkRBUlksIEJJR0dFU1RfQUxJR05NRU5ULAorCUJJR0dFU1RfRklFTERfQUxJR05NRU5ULCBTVEFDS19CT1VOREFSWSwgSEFSRF9SRUdOT19OUkVHUywKKwlIQVJEX1JFR05PX01PREVfT0ssIFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTLAorCVJFR05PX1JFR19DTEFTUywgUFVTSF9ST1VORElORywgRlVOQ1RJT05fQVJHX0FEVkFOQ0UsCisJVFJBTVBPTElORV9URU1QTEFURSwgVFJBTVBPTElORV9TSVpFLCBJTklUSUFMSVpFX1RSQU1QT0xJTkUsCisJQ09OU1RBTlRfQUREUkVTUywgTU9WRV9NQVgsIFBtb2RlLCBTSVpFX1RZUEUsIFBUUkRJRkZfVFlQRSk6CisJQWRkIGg4LzMwMGggc3VwcG9ydC4KKwkoTElOS19TUEVDLCBUQVJHRVRfUlRMX0RVTVAsIFRBUkdFVF9IODMwMCwgVEFSR0VUX0g4MzAwSCwKKwlSRUFMX0FSSVRITUVUSUMsIFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MsIEhBVkVfUE9TVF9JTkNSRU1FTlQsCisJSEFWRV9QUkVfREVDUkVNRU5ULCBNQVhfTU9WRV9NQVgsIE5PX0JVSUxUSU5fU0laRV9UWVBFLAorCU5PX0JVSUxUSU5fUFRSRElGRl9UWVBFLCBXQ0hBUl9UWVBFLCBXQ0hBUl9UWVBFX1NJWkUsCisJTUFYX1dDSEFSX1RZUEVfU0laRSwgQVNNX1dPUkRfT1AsIElOSVRfU0VDVElPTl9BU01fT1AsCisJQ1RPUlNfU0VDVElPTl9BU01fT1AsIERUT1JTX1NFQ1RJT05fQVNNX09QLCBFWFRSQV9TRUNUSU9OUywKKwlFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUywgQVNNX09VVFBVVF9DT05TVFJVQ1RPUiwgQVNNX09VVFBVVF9ERVNUUlVDVE9SLAorCURPX0dMT0JBTF9DVE9SU19CT0RZLCBET19HTE9CQUxfRFRPUlNfQk9EWSwgSU5JVF9UQVJHRVRfT1BUQUJTKToKKwlEZWZpbmUuCisJKENBTl9ERUJVR19XSVRIT1VUX0ZQLCBQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4sIFNUUlVDVF9WQUxVRV9SRUdOVU0sCisJU1RSVUNUX1ZBTFVFX0lOQ09NSU5HLCBTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSk6IFVuZGVmaW5lLgorCShlbnVtIHJlZ19jbGFzcyk6IEFkZCBoOC8zMDBoIHN1cHBvcnQuCisJKGVtaXRfYV9zaGlmdCk6IERlY2xhcmUuCisJKFRBUkdFVF9ERUZBVUxUKTogU2V0IGRlZmF1bHQgdG8gLW1xdWlja2NhbGwuCisJKERPVUJMRV9UWVBFX1NJWkUpOiBGaXggYXQgMzIuICBERm1vZGUgc3VwcG9ydCBkb2Vzbid0IGV4aXN0LgorCShDQUxMX1VTRURfUkVHSVNURVJTLCBSRUdfQUxMT0NfT1JERVIpOiBTd2FwIHJlZ2lzdGVycyAyLDMgd2l0aCA0LDUuCisJUmVnaXN0ZXJzIDAsMSBjb250YWluIGZ1bmN0aW9uIHJlc3VsdCwgYWxsb2NhdGUgYWZ0ZXIgMiwzLgorCShTVEFUSUNfQ0hBSU5fUkVHTlVNKTogVXNlIHJlZyA0LgorCShDT05TVF9PS19GT1JfTEVUVEVSX1ApOiAnTycgaXMgb2tfZm9yX2JjbHIsICdQJyBpcyBzbWFsbF9wb3dlcl9vZl90d28uCisJKEZVTkNUSU9OX1BST0ZJTEVSLCBGVU5DVElPTl9CTE9DS19QUk9GSUxFUiwgQkxPQ0tfUFJPRklMRVIpOiBGaXJzdAorCWF0dGVtcHQgYXQgYW4gaW1wbGVtZW50YXRpb24uCisJKENPTlNUX0NPU1RTKTogTW92ZSBjb2RlIGludG8gZnVuY3Rpb24gY29uc3RfY29zdHMuCisJKEJSQU5DSF9DT1NUKTogU2V0IHRvIDAuCisJKE5PVElDRV9VUERBVEVfQ0MpOiBNb3ZlIGNvZGUgaW50byBmdW5jdGlvbiBub3RpY2VfdXBkYXRlX2NjLgorCShBU01fRklMRV9TVEFSVCk6IE1vdmUgY29kZSBpbnRvIGZ1bmN0aW9uIGFzbV9maWxlX3N0YXJ0LgorCShBU01fRklMRV9FTkQpOiBNb3ZlIGNvZGUgaW50byBmdW5jdGlvbiBhc21fZmlsZV9lbmQuCisJKEFTTV9PVVRQVVRfRE9VQkxFLCBBU01fT1VUUFVUX0ZMT0FUKTogVXNlIFJFQUxfVkFMVUVfVE9fREVDSU1BTC4KKwkqIGg4MzAwL2g4MzAwLmMgKGNwdV90eXBlLCBuYW1lc19leHRlbmRlZCwgbmFtZXNfdXBwZXJfZXh0ZW5kZWQsCisJaDhfcmVnX25hbWVzLCBoOF9wdXNoX29wcywgaDhfcG9wX29wcywgaDhfbW92X29wcywgaDhfcHVzaF9vcCwKKwloOF9wb3Bfb3AsIGg4X21vdl9vcCwgY3VycmVudF9mdW5jdGlvbl9hbm9ueW1vdXNfYXJncywgZXh0cmFfcG9wLAorCWhhbmRfbGlzdCk6IE5ldyB2YXJpYWJsZXMuCisJKGg4MzAwX2luaXRfb25jZSwgYXNtX2ZpbGVfc3RhcnQsIGFzbV9maWxlX2VuZCwgb2tfZm9yX2JjbHIsIG9fb3BlcmFuZCwKKwlwX29wZXJhbmQsIGNhbGxfaW5zbl9vcGVyYW5kLCBqdW1wX2FkZHJlc3Nfb3BlcmFuZCwgYml0X29wZXJhbmQsCisJZXFfb3BlcmF0b3IsIGNvbnN0X2Nvc3RzLCBub3RpY2VfdXBkYXRlX2NjLCBiaXRfb3BlcmF0b3IsCisJbnNoaWZ0X29wZXJhdG9yLCBleHBhbmRfYV9zaGlmdCwgZ2V0X3NoaWZ0X2FsZywgZW1pdF9hX3NoaWZ0LAorCWZpeF9iaXRfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbnMuCisJKHNoaWZ0X2FsZywgc2hpZnRfdHlwZSwgc2hpZnRfbW9kZSk6IE5ldyBlbnVtcy4KKwkoc2hpZnRfaW5zbik6IE5ldyBzdHJ1Y3QuCisJKHNoaWZ0X25fYml0cywgY2FuX3NoaWZ0KTogRGVsZXRlZC4KKwkoc2hpZnRfb25lLCByb3RhdGVfb25lKTogTmV3IHZhcmlhYmxlcy4KKwkoV09SRF9SRUdfVVNFRCk6IE5ldyBtYWNybyAod2FzIGZ1bmN0aW9uIHdvcmRfcmVnX3VzZWQpLgorCShkb3NpemUsIGZ1bmN0aW9uX3Byb2xvZ3VlLCBmdW5jdGlvbl9lcGlsb2d1ZSwgcHJpbnRfb3BlcmFuZF9hZGRyZXNzKToKKwlBZGQgaDgvMzAwaCBzdXBwb3J0LgorCShzbWFsbF9wb3dlcl9vZl90d28pOiBSZW5hbWVkIGZyb20gcG90bDguCisJKHBvdGc4KTogRGVsZXRlZC4KKwkoZ2VuZXJhbF9vcGVyYW5kX3NyYyk6IEZpeCBQT1NUX0lOQyBjYXNlLgorCShnZW5lcmFsX29wZXJhbmRfZHN0KTogRml4IFBSRV9ERUMgY2FzZS4KKwkoZnVuY3Rpb25fYXJnKTogMyByZWdzIG9mIGFyZ3MgYXJlIHBhc3NlZCBpZiAtbXF1aWNrY2FsbC4KKwk0IHJlZ3Mgb2YgYXJncyBhcmUgcGFzc2VkIHRvIGhhbmR3cml0dGVuIGFzc2VtYmxlciByb3V0aW5lcy4KKwkocHJpbnRfb3BlcmFuZCk6IE5ldyBjYXNlcyAnQScsICdQJywgJ1MnLCAnVScsICdXJywgJ2InLCAnYycsICdkJywgJ2cnLgorCURlbGV0ZSBjYXNlICdPJy4gIFNvcnQgY2FzZXMuICBBZGQgaDgvMzAwaCBzdXBwb3J0LgorCShkb19tb3ZzaSk6IFJlbmFtZWQgZnJvbSBkb21vdnNpLgorCUhhbmRsZSByZWxvYWRfaW5fcHJvZ3Jlc3MgYW5kIHJlbG9hZF9jb21wbGV0ZWQuCisJKGluaXRpYWxfb2Zmc2V0KTogUmVuYW1lZCBmcm9tIGlvLiAgQWRkIGg4LzMwMGggc3VwcG9ydC4KKwkqIGg4MzAwL2g4MzAwLm1kIChjcHUpOiBOZXcgYXR0cmlidXRlLgorCShhdHRyaWJ1dGUgbGVuZ3RoKTogQWRkIGg4LzMwMGggc3VwcG9ydC4KKwkoYXR0cmlidXRlIGNjKTogTmV3IHZhbHVlIGBjYml0Jy4KKwkoYWxsIGFub255bW91cyBpbnNucyk6IEdpdmUgdGhlbSBuYW1lcy4KKwkobW92ZSBpbnNucyk6IEFkZCBoOC8zMDBoIHN1cHBvcnQuCisJKHRzdHFpLCB0c3RoaSk6IFVzZSBidHN0IGluc24gaWYgYWJsZS4KKwkoYXJpdGhtZXRpYyBpbnNucyk6IEFkZCBoOC8zMDBoIHN1cHBvcnQuCisJKGJvb2xlYW4gaW5zbnMpOiBMaWtld2lzZS4KKwkobmVnYXRlIGluc25zKTogTGlrZXdpc2UuCisJKGJyYW5jaCBpbnNucyk6IExpa2V3aXNlLgorCShjYWxsX3ZhbHVlKTogVXNlIGNhbGxfaW5zbl9vcGVyYW5kIGZvciBvcGVyYW5kIDEuCisJKHNoaWZ0IGluc25zKTogQ29tcGxldGVseSByZXdyaXR0ZW4uICBBZGQgaDgvMzAwaCBzdXBwb3J0LgorCSh6ZXJvL3NpZ24gZXh0ZW5zaW9uIGluc25zKTogQWRkIGg4LzMwMGggc3VwcG9ydC4KKwkoZXh0dik6IERlbGV0ZWQuCisJKGluc3YsIGV4dHp2KTogT25seSB1c2UgZm9yIGg4LzMwMC4KKwkoYml0ZmllbGQgaW5zbnMpOiBDb21wbGV0ZWx5IHJld3JpdHRlbi4KKwkoZmFuY3liKik6IE5ldyBpbnNucyBmb3Igc3BlZWRpbmcgdXAgYml0IGFjY2Vzc2VzLgorCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBBbGxvdyB0YXJnZXQgc3BlY2lmaWMgbGliY2FsbHMKKwl3aXRoIElOSVRfVEFSR0VUX09QVEFCUy4KKworTW9uIEp1bCAxMSAxODozMjo0MiAxOTk0ICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BjeWdudXMuY29tKQorCisJKiBjb25maWcvZnAtYml0LmM6IE5ldyBmaWxlLiAgUHJvdmlkZXMgc2ltcGxlIGZwIGVtdWxhdGlvbiBsaWJyYXJ5LgorCitNb24gSnVsIDExIDE4OjI3OjQyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYzEtYXNtLmEpOiBOZXcgdGFyZ2V0IGZvciBidWlsZGluZyBsaWJnY2MxLmEKKwlpbiBjcm9zcyBjb21waWxlcnMuCisKK01vbiBKdWwgMTEgMTc6MDA6NDUgMTk5NCAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5tZCAobW92c2kgbWF0Y2hlcik6IEFkZCBub3AgZm9yIG1vdmluZyBzcGVjaWFsIHJlZ2lzdGVyCisJdG8gaXRzZWxmIGZvciAhVEFSR0VUX1BPV0VSLgorCShtb3ZoaSBhbmQgbW92cWkgbWF0Y2hlcik6IExpa2V3aXNlIGFuZCBhZGQgbXRqbXByIGF0dHJpYnV0ZS4KKwlTZXBhcmF0ZSBNUSBmcm9tIENUUiBhbmQgTFIgdGFyZ2V0IHJlZ2lzdGVycyBmb3IgVEFSR0VUX1BPV0VSLgorCisJKiBwb3dlcnBjLmggKENQUF9TUEVDKTogRml4IHR5cG8uCisKK01vbiBKdWwgMTEgMTY6NTA6MjkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1wYXJzZS5pbiAoc3RtdCk6IERvbid0IGdpdmUgbW9yZSB0aGFuIG9uZSBlcnJvciBtZXNzYWdlIGlmIGEKKwluZXN0ZWQgYGlmJyBoYXMgYW4gZW1wdHkgYm9keS4KKworCSogYTI5ay5tZCAobW92cWkpOiBDYWxsIGxvYWRoaSwgbm90IGxvYWRxaS4KKworTW9uIEp1bCAxMSAxNjo0NjowOSAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBwYS5oIChERUJVR0dFUl9BUkdfT0ZGU0VUKTogRGVmaW5lLiAgSWYgbm8gZnJhbWUgcG9pbnRlcgorCWlzIGF2YWlsYWJsZSwgdGhlbiBhZGp1c3QgdGhlIG9mZnNldCBieSB0aGUgc2l6ZSBvZiB0aGUKKwljdXJyZW50IGZyYW1lLgorCitNb24gSnVsIDExIDE2OjM0OjE0IDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKKworIAkqIGNvbmZpZ3VyZSAoKi0qLWx5bnhvcyopOiBBbHdheXMgcnVuIGZpeGluY2x1ZGVzLCBhbmQgaWYgbm90IHVzaW5nCisJZ2FzLCBzZXQgdG1fZmlsZSB0byBseW54LW5nLmguCisJKiBjb25maWcveC1seW54OiBBbHdheXMgcnVuIGZpeHByb3RvLgorCSogY29uZmlnL2x5bnguaCwgaTM4Ni9seW54LmgsIG02OGsvbHlueC5oLCBzcGFyYy9seW54Lmg6IFJld3JpdGUKKwl0byB3b3JrIHdpdGggZ2FzIHByb2R1Y2luZyBjb2ZmIGZpbGVzLgorCSogY29uZmlnL2x5bngtbmcuaCwgaTM4Ni9seW54LW5nLmgsIG02OGsvbHlueC1uZy5oLAorCXNwYXJjL2x5bngtbmcuaDogTmV3IGZpbGVzLgorCitNb24gSnVsIDExIDE1OjE2OjI4IDE5OTQgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiBtYWtlLWNjMS5jb206IENvbXBpbGUgbW9zdCBvZiBjYzFwbHVzIGluIHRoZSBgY3AnIHN1YmRpcmVjdG9yeS4KKwkqIHZtc2NvbmZpZy5jb206IFdoZW4gc2V0dGluZyB1cCB0bS5oLCBjb252ZXJ0ICJ2YXgvdmF4LmgiIGludG8KKwkiY29uZmlnLXZheC5oIiByYXRoZXIgdGhhbiAiWy5jb25maWcudmF4XXZheC5oIiBmb3IgI2luY2x1ZGUgc28KKwlpdCB3aWxsIHdvcmsgZnJvbSBbLmNwXSBzdWJkaXJlY3Rvcnk7IGNvcHkgdmF4LmggdG8gY29uZmlnLXZheC5oCisJYXMgcGFydCBvZiBjb25maWd1cmF0aW9uIHNldHVwLiAgQWxzbywgbWFudWFsbHkgaW5jbHVkZSBjYzFwbHVzCisJaW4gdGhlIGxpc3Qgb2YgYnVpbGRhYmxlIGNvbXBpbGVycyAoYSB0ZW1wb3JhcnkgbWVhc3VyZTsgaXQKKwlzaG91bGQgcHJvY2VzcyBjcC9NYWtlZmlsZS5pbiBsaWtlIGl0IGRvZXMgZm9yIHByaW1hcnkgbWFrZWZpbGUpLgorCisJKiBtYWtlLWNjMS5jb206IFVzZSBgPScgcmF0aGVyIHRoYW4gYDo9JyB3aGVuIHNldHRpbmcgdXAgQ0MsCisJc28gdGhhdCBgZ2NjJyBjYW4gYmUgZGVmaW5lZCBhcyBhIGZvcmVpZ24gY29tbWFuZCBpZiBuZWNlc3Nhcnk7CisJZWxpbWluYXRlIGBzZXQgc3ltYm9sL3Njb3BlPW5vR2xvYmFsJyBmb3Igc2FtZSByZWFzb247IHVzZSBgPScKKwl3aXRoIGFsbCBvdGhlciBzeW1ib2xzLCBmb3IgY29uc2lzdGVuY3k7IGFkZCBleHBsaWNpdCAub2JqCisJZXh0ZW5zaW9uIHRvIHNvbWUgbGlzdHMgb2Ygb2JqZWN0IGZpbGVzIHBhc3NlZCB0byB0aGUgbGlua2VyOworCWdlbmVyYWwgY2xlYW51cCBvZiB0aGUgY29tbWFuZCB0ZXh0IGVjaG9lZCBkdXJpbmcgZXhlY3V0aW9uLgorCSogbWFrZS1jY2NwLmNvbTogUmV2aXNlIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIG1ha2UtY2MxLmNvbQorCWZvciBzeW1ib2wgc2V0dXAgJiB1c2FnZSBhbmQgZm9yIGVjaG9pbmcgY29tbWFuZCBleGVjdXRpb24uCisKK01vbiBKdWwgMTEgMTU6MDM6MjMgMTk5NCAgQ2hhcmxlcyBIYW5udW0gIChteWNyb2Z0QGR1YWxpdHkuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZTogUmVjb2duaXplIG02OGstKi1uZXRic2QqIGFuZCBpWzM0NV04Ni0qLW5ldGJzZCouCisJKiBjY2NwLmMsIGNvbGxlY3QyLmMsIGdjYy5jLCBwcm90b2l6ZS5jLCBjcC9nKysuYyAoc3lzX2Vycmxpc3QpCisJW2JzZDRfNF06IERvIHRoaXMgZm9yIF9fTmV0QlNEX18gYWxzby4KKworTW9uIEp1bCAxMSAxNDoxNjoyOCAxOTk0ICBLcmVzdGVuIEtyYWIgVGhvcnVwICAoa3JhYkBzcGlmZi5nbnUuYWkubWl0LmVkdSkKKworCSogbWlwcy9taXBzLmggKFNUUlVDVF9WQUxVRSk6IENoYW5nZSBkZWZpbml0aW9uIGZyb20gYChydHgpMCcgdG8KKwlqdXN0IGAwJyBzbyBpdCBpcyBhIHZhbGlkIGV4cHJlc3Npb24gZm9yIHRoZSBwcmUtcHJvY2Vzc29yLiAKKworTW9uIEp1bCAxMSAxMDo1NDozNSAxOTk0ICBTdGFuIENveCAgKGNveHNAZGctcnRwLmRnLmNvbSkKKworCSogY29uZmlndXJlIChtODhrLWRnLWRndXhiY3MpOiBOZXcgY29uZmlndXJhdGlvbi4gIG04OGstZGctZGd1eAorCU5vdyBidWlsZHMgYW4gZWxmIGNvbXBpbGVyLiAgQm90aCB0YXJnZXRzIHdpbGwgY3JlYXRlIGJjcyBvciBlbGYuCisKKwkqIG04OGsvZGd1eC5oIChBU01fU1BFQyxTVEFSVEZJTEVfU1BFQyxMSUJfU1BFQyk6IHN2cjQgZGVmYXVsdC4KKworCSogbTg4ay9kZ3V4YmNzLmggKEFTTV9TUEVDLFNUQVJURklMRV9TUEVDLExJQl9TUEVDKTogCisJTmV3IHRhcmdldCBmb3Igc3ZyMy4KKworCSogbTg4ay94LWRndXgsIG04OGsvdC1kZ3V4LCBtODhrL3gtZGd1eGJjczogCisJQ2hhbmdlZCBmb3Igc3ZyNC9zdnI0L3N2cjMgcmVzcGVjdGl2ZWx5LgorCisJKiBtODhrL204OGsuaCAoVEFSR0VUX1NWUjMpOiBOZXcgdGFyZ2V0IHN3aXRjaC4KKworV2VkIEp1biAyOSAxOToyMzoyNyAxOTk0ICBEYXZpZCBNb3NiZXJnZXItVGFuZyAgKGRhdmlkbUBwaXN0b24uY3MuYXJpem9uYS5lZHUpCisgIAorICAJKiBhbHBoYS5oIChMSUJfU1BFQyk6IElmIC1wZywgYWRkIC1scHJvZjIuCisKK01vbiBKdWwgMTEgMTM6MTc6MzggMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NldCk6IE9ubHkgdHVybiBJRl9USEVOX0VMU0UgaW50byBBTkQgaWYKKwlNT0RFX0lOVC4KKworU3VuIEp1bCAxMCAwNjowMzoxMiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBIYW5kbGUgc3BlY2lhbCBjYXNlIG9mCisJYXNzaWdubWVudCBmcm9tIGhhcmQgZnJhbWUgcG9pbnRlciB0byBmcmFtZSBwb2ludGVyIChmb3IKKwlub25sb2NhbCBnb3RvKS4KKwkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogUmVtb3ZlIGxhc3QgY2hhbmdlLgorCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogV2hlbiBhZGp1c3RpbmcgRlAsIHNldCBpdAorCWZyb20gaGFyZF9mcmFtZV9wb2ludGVyX3J0eC4KKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9GU1FSVCk6IERvbid0IHVzZQorCWFzdGVyaXNrIGluIG5hbWUgb2YgYGVycm5vJy4KKworRnJpIEp1bCAgOCAyMjowNzozMiAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHN0ZGFyZy5oOiBEZWxldGUgaW5jbHVkZSBvZiA8c3RkYXJnLmg+IHdoZW4gbm90IGdjYy4KKwkqIHZhcmFyZ3MuaDogRGVsZXRlIGluY2x1ZGUgb2YgPHZhcmFyZ3MuaD4gd2hlbiBub3QgZ2NjLgorCitGcmkgSnVsICA4IDE4OjQ1OjU2IDE5OTQgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay9tb3QzMzAwLmggKEZVTkNUSU9OX0VYVFJBX0VQSUxPR1VFKTogQ29weSBhMCB0byBkMCwgbm90CisJdGhlIG90aGVyIHdheS4KKworRnJpIEp1bCAgOCAxNzo0MTozOSAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZ2V0X2lubmVyX3VuYWxpZ25lZF9wKTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfYXNzaWdubWVudCwgZXhwYW5kX2V4cHIpOiBVc2UgaXQuCisKK0ZyaSBKdWwgIDggMTc6MTY6MjUgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoZXh0cmFjdF9zcGxpdF9iaXRfZmllbGQpOiBTZXQgVU5JVCB0byBCSVRTX1BFUl9XT1JEIGZvcgorCXJlZ2lzdGVyIHZhbHVlcy4KKwkoc3RvcmVfc3BsaXRfYml0X2ZpZWxkKTogTGlrZXdpc2UuICBDYWxsIG9wZXJhbmRfc3Vid29yZF9mb3JjZS4KKworRnJpIEp1bCAgOCAxMzo0ODoyMyAxOTk0ICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAodGFyZ2V0X3RlbXBfc2xvdF9sZXZlbCk6IE5ldyB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mCisJdGhlIGN1cnJlbnQgc3RhY2sgbGV2ZWwgZm9yIHRlbXBvcmFyaWVzIGNyZWF0ZWQgYnkgVEFSR0VUX0VYUFJzLgorCSogZXhwci5oICh0YXJnZXRfdGVtcF9zbG90X2xldmVsKTogRGVjbGFyZSBpdC4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBBZGQgY29kZSB0byBtYWludGFpbiB0aGUgbmV3IHRlbXBvcmFyeQorCXN0YWNrIGZvciBUQVJHRVRfRVhQUnMgdG8gdGhlIENMRUFOVVBfUE9JTlRfRVhQUiBjb2RlIGFuZCBjaGFuZ2UKKwl0aGUgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcyBmb3IgVEFSR0VUX0VYUFJzIHRvIGJlIGZyb20gdGhlIG5ldworCXN0YWNrLCBzbyB0aGF0IHRoZXkgbWF5IGxpdmUgbG9uZ2VyLCBhbmQgb25seSBiZSByZXVzZWQgYWZ0ZXIgdGhleQorCWFyZSBubyBsb25nZXIgaW4gdXNlLgorCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXApOiBLRUVQIGNhbiBub3cgYWxzbyBiZSAyLCB0bworCWluZGljYXRlIGFsbG9jYXRpb24gZnJvbSB0aGUgbG9uZ2VyIHRlcm0gZnJvbnRlbmQgY29udHJvbGxlZAorCXRlbXBvcmFyeSBzdGFjay4KKwkqIGZ1bmN0aW9uLmMgKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplCisJdGFyZ2V0X3RlbXBfc2xvdF9sZXZlbCB0byB6ZXJvLgorCitGcmkgSnVsICA4IDE2OjUyOjM4IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzLCBSRUdfREVBRCBjYXNlKTogV2hlbiBjaGVjayB0byBzZWUKKwlpZiBpbnNuIHVzZXMgcmVnaXN0ZXIsIGFsc28gY2FsbCBmaW5kX3JlZ25vX2Z1c2FnZS4KKworCSogc3BhcmMuaCAoU0VDT05EQVJZX01FTU9SWV9ORUVERURfUlRYKTogQ2FsbCBhc3NpZ25fc3RhY2tfbG9jYWwKKwlpZiB0aGUgZnJhbWUgaGFzIHplcm8gc2l6ZS4KKworRnJpIEp1bCAgOCAxMTo0Njo1MCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB2YXJhc20uYyAocmVjb3JkX2NvbnN0YW50X3J0eCwgZm9yY2VfY29uc3RfbWVtKTogRW5zdXJlIGV2ZXJ5dGhpbmcKKwlpcyBpbiBzYXZlYWJsZV9vYnN0YWNrLCBub3QgY3VycmVudF9vYnN0YWNrLgorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUpOiBPUF9NT0RFIG11c3QgYmUgTU9ERSBpZiBNT0RFIGFuZAorCW1vZGUgb2YgWCBhcmUgb2YgZGlmZmVyZW50IGNsYXNzZXMuCisJKG5vbnplcm9fYml0cywgbnVtX3NpZ25fYml0X2NvcGllcyk6IFNheSBub3RoaW5nIGtub3duIGZvcgorCWZsb2F0aW5nLXBvaW50IG1vZGVzLgorCisJKiBmdW5jdGlvbi5jIChpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSwgY2FzZSBTRVQpOgorCUlmIERFU1QgaXMgdmlydHVhbF9zdGFja192YXJzX3J0eCwgcmVwbGFjZSB3aXRoIGhhcmR3YXJlCisJZnJhbWUgcG9pbnRlci4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBDT05WRVJUX0VYUFIpOiBJZiBjaGFuZ2luZyBzaWduZWRuZXNzCisJYW5kIHdlIGhhdmUgYSBwcm9tb3RlZCBTVUJSRUcsIGNsZWFyIHRoZSBwcm9tb3Rpb24gZmxhZy4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogUHV0IFJUTCBhbmQgb3RoZXIgc3R1ZmYgaW4gCisJcGVybWFuZW50X29ic3RhY2sgaWYgREVDTCBpcy4KKworCSogY29tYmluZS5jIChnZW5fdW5hcnkpOiBBZGQgbmV3IGFyZywgT1AwX01PREUuCisJQWxsIGNhbGxlcnMgY2hhbmdlZC4KKworVGh1IEp1bCAgNyAxOTo1ODozNSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworICAgICAgICAqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IERvIHNldCBUUkVFX0FTTV9XUklUVEVOIG9uCisgICAgICAgIGVycm9uZW91cyBpbmNvbXBsZXRlIGRlY2xzLgorCitUaHUgSnVsICA3IDE3OjU5OjQ2IDE5OTQgIEpvc2VwaCBBcmNlbmVhdXggIChqbGFAZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZ3VyZSAobTY4ay1tb3Rvcm9sYS1zeXN2Kik6IFVzZSBtb3QzMzAwZy5oIGZvciBnYXMuCisJKiBtNjhrL21vdDMzMDBnLmg6IE5ldyBmaWxlLgorCitUaHUgSnVsICA3IDE3OjQyOjIxIDE5OTQgIFBoaWxpcHBlIERlIE11eXRlciAgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIG02OGsvbW90MzMwMC5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitUaHUgSnVsICA3IDE3OjM2OjI2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cG1lZC5jIChleHBhbmRfbXVsdF9oaWdocGFydCk6IEJ1aWxkIGNvbnN0YW50IGZvcm1zIG9mIENOU1QxCisJaW4gTU9ERSBvciBXSURFX01PREUsIGFzIGFwcHJvcHJpYXRlLgorCisJKiBvcHRhYnMuYyAoZXhwYW5kX2Jpbm9wLCBjYXNlIERJViBbY29tcGxleF0pOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KKworCSogYWxwaGEubWQgKHJlbG9hZF9pbnFpKTogTWFrZSBvcGVyYW5kWzJdIGJlIFRJbW9kZSBhbmQKKwlwYXNzIHJlZ2lzdGVyIG51bWJlciB0aGF0IGRpZmZlcnMgdG8gdW5hbGlnbmVkX2xvYWRxaS4KKwkocmVsb2FkX291dHFpKTogQ2hhbmdlIG92ZXJsYXAgaW4gdGVtcHMgdG8gdW5hbGlnbmVkX3N0b3JlcWkuCisJKiBhbHBoYS5jICh7dW4sfWFsaWduZWRfbWVtb3J5X29wZXJhbmQpOiBDaGVjayBhZ2FpbnN0CisJaGFyZF9mcmFtZV9wb2ludGVyX3J0eCwgbm90IGZyYW1lX3BvaW50ZXJfcnR4LgorCitUaHUgSnVsICA3IDAxOjM5OjMzIDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogY29tYmluZS5jIChtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgQU5EIGNhc2UpOiBEbyBleHRyYWN0aW9uIGluCisJZGVzaXJlZCByZXN1bHQgbW9kZS4KKworCSogZmxvdy5jIChtYXJrX3NldF8xKTogUmVjb3JkIGV4cGxpY2l0IGhhcmQgcmVnaXN0ZXJzIGluIHRoZWlyCisJcmF3IG1vZGUuCisJKG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCisJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBMaWtld2lzZS4KKworV2VkIEp1bCAgNiAxNDo0NTowOCAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogbG9uZ2xvbmcuaCAodmF4IHNkaXZfcXJubmQpOiBGaXggdHlwby4KKworV2VkIEp1bCAgNiAxOTo1OToxMiAxOTk0ICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGRlZmVyX2NsZWFudXBzX3RvLCBleHBhbmRfY2xlYW51cHNfdG8pOiBBbGwKKwljbGVhbnVwcyBoYXZlIHRvIGJlIHByb3RlY3RlZCBieSBpbnRlcmltIGV4Y2VwdGlvbiBoYW5kbGluZyBjb2RlLgorCSogc3RtdC5jIChleHBhbmRfZGVjbF9jbGVhbnVwLCBleHBhbmRfY2xlYW51cHMpOiBEaXR0by4KKwkqIHRvcGxldi5jIChpbnRlcmltX2VoX2hvb2spOiBIb29rIGZvciBpbnRlcmltIGV4Y2VwdGlvbiBoYW5kbGluZy4KKwkqIHRvcGxldi5jIChpbnRlcmltX2VoKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgZXhjZXB0aW9uCisJaGFuZGxpbmcgdGhhdCBkb2VzIG5vdGhpbmcuCisJKiB0b3BsZXYuYyAobWFpbik6IFNldCBkZWZhdWx0IGZvciBpbnRlcmltX2VoX2hvb2suCisKK1dlZCBKdWwgIDYgMTc6NTY6MzcgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IFN0YXJ0IG1lbW9yeSBwcm9iaW5nIHdpdGggJDIuCisKK1dlZCBKdWwgIDYgMTQ6MjE6MTQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKHN0cnVjdCBuZXN0aW5nKTogQWRkIG5ldyBmaWVsZCBhbHRfZW5kX2xhYmVsLgorCShleHBhbmRfc3RhcnRfbG9vcCk6IEluaXRpYWxpemUgaXQgdG8gemVyby4KKwkoZXhwYW5kX2VuZF9sb29wKTogUmVvcmRlciBsb29wIGlmIGZpbmQgZWl0aGVyIGEganVtcCB0byBlbmRfbGFiZWwKKwlvciBhIGp1bXAgdG8gYWx0X2VuZF9sYWJlbC4KKwkoZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZSk6IFNldCBhbHRfZW5kX2xhYmVsLgorCitXZWQgSnVsICA2IDA1OjA3OjMxIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgIChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IElmIFRSRUVfVFlQRSBmb3IgdGhlIERFQ0wgaXMgdXBkYXRlZCwKKwl0aGVuIHVwZGF0ZSBUWVBFIGFzIHdlbGwuCisKKwkqIGxvbmdsb25nLmggKGFybSB1bXVsX3BwbW0pOiBGaXggdXNlIG9mIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXIuIAorCUVsaW1pbmF0ZSBjbG9iYmVycyBvZiBoYXJkIHJlZ2lzdGVycy4KKworV2VkIEp1bCAgNiAwMzoyMjowNCAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAcnRsLmN5Z251cy5jb20pCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogQ2xlYXIgb3V0IFRBUkdFVCBhbHNvIGlmIE9QMSBpcyBhCisJY29uc3RhbnQsIHdoZW4gVEFSR0VUID09IE9QMC4KKworVHVlIEp1bCAgNSAxODo1ODoyOCAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAcnRsLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChjLXBhcnNlLnkpOiBSZWRpcmVjdCB0aHJvdWdoIHRtcCBmaWxlLgorCShvYmpjLXBhcnNlLnkpOiBMaWtld2lzZS4KKwkoYy1ncGVyZi5oKTogTGlrZXdpc2UuCisJKG1vc3RseWNsZWFuKTogRGVsZXRlIHRoZSBuZXcgdG1wIGZpbGVzLgorCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IEZpeCB0eXBvIHNldHRpbmcgb3AxX2lzX3BvdzIuCisJKGV4cGFuZF9kaXZtb2QpOiBIYW5kbGUgcG93ZXJzLW9mLXR3byBzcGVjaWZpY2FsbHkgZm9yIHVuc2lnbmVkCisJQ0VJTF8qX0VYUFIuCisKKwkqIGxvbmdsb25nLmg6IFJlYWxseSBmaXggdGhlIHRlc3QgZm9yIF9JQk1SMi4gIENoYW5nZSB0ZXN0IG9mCisJX19wb3dlcnBjX18gdG8gX0FSQ0hfUFBDLgorCitUdWUgSnVsICA1IDE3OjAwOjE5IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBEb24ndCBjaGVjayBmb3IgcmVwbGFjaW5nCisJYXJnIG9mIGZ1bmN0aW9uIGhlcmUuCisJKGNhbl9jb21iaW5lX3ApOiBEbyBpdCBoZXJlLgorCisJKiBleHByLmMgKGV4cGFuZF9pbmNyZW1lbnQpOiBJZiBwcmUtaW5jcmVtZW50aW5nIGEgcHJvbW90ZWQKKwl2YXJpYWJsZSwgZG9uJ3QgYWRqdXN0IE9QMCBzaW5jZSB0aGUgcmVzdWx0IHdvbid0IGJlIHVzZWQuCisKKwkqIGp1bXAuYyAoZHVwbGljYXRlX2xvb3BfZXhpdF90ZXN0KTogSGFuZGxlIFNVQlJFRyBpbiBTRVRfREVTVAorCW9mIGxvb3AgZXhpdCB0ZXN0IHN0YXRlbWVudHMuCisKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBJZiBJMkRFU1Qgd2FzIHVzZWQgaW4gSTJTUkMsIGl0IGlzbid0CisJdW51c2VkIGp1c3QgYmVjYXVzZSB0aGVyZSBpcyBubyBTRVQgZm9yIEkyIGFueW1vcmUuCisKK01vbiBKdWwgIDQgMTE6MTU6MTMgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmggKFJTNjAwMF9PVVRQVVRfQkFTRU5BTUUpOiBBbHdheXMgY2FsbCBhc3NlbWJsZXJfbmFtZQorCWFuZCBwYXNzIHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUuCisKKwkqIHZhcmFzbS5jIChhc3NlbWJsZV9uYW1lKTogQ2FsbCBTVFJJUF9OQU1FX0VOQ09ESU5HLgorCisJKiBjc2UuYyAoY2Fub25faGFzaCwgZXhwX2VxdWl2X3ApOiBSZWZlciB0byBzdHJpbmcgaW4gU1lNQk9MX1JFRgorCXdpdGggWFNUUiwgbm90IFhFWFAuCisKK1NhdCBKdWwgIDIgMTg6NTM6MTkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBtaXBzLm1kIChzbXVsZGkzX2hpZ2hwYXJ0LCBzbXVsZGkzX2hpZ2hwYXJ0X2ludGVybmFsLAorCXVtdWxkaTNfaGlnaHBhcnQsIHVtdWxkaTNfaGlnaHBhcnRfaW50ZXJuYWwpOiBOZXcgcGF0dGVybnMuCisKKwkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBPbmx5IHVzZSBSRUdfRVFVQUwgbm90ZSB2YWx1ZSBpZiBpdAorCWlzIGNvbnN0YW50LgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGVfbWV0aG9kcyk6IEVuYWJsZSBkZWJ1Z2dpbmcgaW5mbyBmb3IKKwl0ZW1wbGF0ZSBjbGFzc2VzLgorCisJKiBjLWxleC5jICh5eWxleCk6IFJlamVjdCBpbWFnaW5hcnkgbnVtYmVycyB3aGVuIHBlZGFudGljLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogV2hlbiBtYWtlIHZvaWQqIG1hdGNoIGNoYXIqLCBzZXQKKwlERUNMX0lOX1NZU1RFTV9IRUFERVIuCisKKwkqIE1ha2VmaWxlLmluIChjbGVhbik6IERlbGV0ZSBMSUIyRlVOQ1NfRVhUUkEuCisKKwkqIGFscGhhLmggKEZVTkNUSU9OX1BST0ZJTEVSLCBGVU5DVElPTl9CTE9DS19QUk9GSUxFUiwKKwlCTE9DS19QUk9GSUxFUik6IFVzZSBtdWx0aXBsZSBmcHV0cy9mcHJpbnRmIGNhbGxzIGluc3RlYWQgb2YgQU5TSQorCUMgY29uY2F0ZW5hdGVkIHN0cmluZ3MuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBjaW50OF9vcGVyYW5kLgorCisJKiBnY2MuYyAoREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcpOiBBZGQgLWlzeXN0ZW0uCisKK1NhdCBKdWwgIDIgMDk6MzQ6MjAgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQHJ0bC5jeWdudXMuY29tKQorCisJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IEFsd2F5cyByZXR1cm4gZ2VuX2xvd3BhcnQgKG1vZGUsIC4uLikuCisKK0ZyaSBKdWwgIDEgMTk6Mjg6MzkgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHJlb3JnLmMgKG1ha2VfcmV0dXJuX2luc25zKTogTWFrZSBzdXJlIHJlZGlyZWN0aW5nIGEganVtcCB0bworCWEgUkVUVVJOIGluc24gZG9lcyBub3QgaW52YWxpZGF0ZSB0aGUgZGVsYXkgc2xvdHMgb2YgdGhlIGp1bXAuCisKK0ZyaSBKdWwgIDEgMTY6MzI6NTggMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBsb25nbG9uZy5oOiAoYXJtIHVtdWxfcHBtbSk6IEZpeCB0eXBvcyBpbiBsYXN0IGNoYW5nZS4gIE1hcmsKKwloYXJkLWNvZGVkIHJlZ2lzdGVycyB3aXRoICIlfCIuCisKK0ZyaSBKdWwgIDEgMTA6MDg6NDcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBQYXNzIHRocm91Z2ggc3RhdGljIGNvbnN0cyBhbmQgaW5saW5lcworCW11bHRpcGxlIHRpbWVzIGluIGNhc2UgdGhleSByZWZlcmVuY2UgZWFjaCBvdGhlci4KKworRnJpIEp1bCAgMSAwNzo0MToxOSAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAdGlueS5jeWdudXMuY29tKQorCisJKiBsb25nbG9uZy5oOiBUZXN0IGZvciBfQU0yOUsgYW5kIF9JQk1SMiwgbm90IF9fX0FNMjlLX18KKwlhbmQgX19fSUJNUjJfXy4KKwkoYXJtIHVtdWxfcHBtbSk6IE5ldyBkZWZpbml0aW9uLgorCShjbGlwcGVyIHVtdWxfcHBtbSwgc211bF9wcG1tLCBfX3VtdWxzaWRpMyk6IE5ldyBkZWZpbml0aW9ucy4KKwkoaHBwYSBjb3VudF9sZWFkaW5nX3plcm9zKTogTmV3IGRlZmluaXRpb24uCisJKGk5NjAgdW11bF9wcG1tLCBfX3VtdWxzaWRpMyk6IE5ldyBkZWZpbml0aW9ucy4KKwkobWM2ODAwMCB1bXVsX3BwbW0pOiBVc2UgJS4gYmVmb3JlIHNpemUgc3VmZml4ZXMuCisJKG1jODgxMTAgdW11bF9wcG1tLCB1ZGl2X3Fybm5kKTogUmV3cml0ZSwKKwkobWM4ODAwMCk6IEdldCBVTVVMX1RJTUUgYW5kIFVESVZfVElNRSByaWdodC4KKwkobWlwcyk6IEdldCBVTVVMX1RJTUUgcmlnaHQuCisJKG5zMzIwMDAgdW11bF9wcG1tKTogTmV3IGRlZmluaXRpb24uCisJKG5zMzIwMDAgdWRpdl9xcm5uZCk6IFJlbmFtZSBmcm9tIGJvZ3VzIGRpdl9xcm5uZCwgcmV3cml0ZS4KKwkocG93ZXJwYyB1bXVsX3BwbW0sIHNtdWxfcHBtbSk6IE5ldyBkZWZpbml0aW9ucy4KKwkoX0lCTVIyL3Bvd2VycGMgYWRkX3NzYWFhYSwgc3ViX2RkbW1zcyk6IEltcHJvdmUuCisJKHB5ciB1bXVsX3BwbW0pOiBGaXggdHlwby4KKwkoc3BhcmMgYWRkX3NzYWFhYSwgc3ViX2RkbW1zcyk6IE1hdGNoIGNvbnN0YW50IDAgZm9yIGFsbCBpbnB1dHMuCisJKHZheCBzZGl2X3Fybm5kKTogTmV3IGRlZmluaXRpb24uCisKKwkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogUHV0IE9QMCBpbiBhIHJlZ2lzdGVyIHdoZW4gY29tcHV0aW5nCisJcmVtYWluZGVyLCBvciB3aGVuIE9QMSBpcyBjb25zdGFudC4KKworRnJpIEp1bCAgMSAwNjo0NjowOSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBjb252ZXJ0IGlmIChmb28pIHgrKyBpbnRvIGFuCisJYWRkIG9mIGFuIHNjYyB1bmxlc3MgWCBoYXMgbm8gc2lkZSBlZmZlY3RzIGFuZCBjYW4ndCB0cmFwLgorCisJKiBjLXBhcnNlLmluIChpbml0ZWx0KTogVGhlIGVxdWFsIHNpZ24gaXMgb3B0aW9uYWwgd2hlbgorCXBvc2l0aW9uaW5nIHRvIGEgc2luZ2xlIGVsZW1lbnQgb2YgYW4gYXJyYXkuCisKKwkqIGMtdHlwZWNrLmMgKHB1c2hfaW5pdF9sZXZlbCk6IElmIG5vdCBhdCAidW5maWxsZWQiIHBvc2l0aW9uLAorCXNldCBjb25zdHJ1Y3Rvcl9pbmNyZW1lbnRhbCB0byAwOyBsaWtld2lzZSBmb3IgcmFuZ2UuCisKKwkqIHhtLWFscGhhLmg6IElmIEdOVUMsIGluY2x1ZGUgYWxsb2NhLmgsIGVsc2UgZGVjbGFyZSBhbGxvY2EuCisKKwkqIG02OGsvbW90MzMwMC5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IE5ldyBtYWNyby4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBEb24ndCBzZXQgUkVHX05PVEVTIHVubGVzcyB3ZSBnZW5lcmF0ZWQKKwlhIHF1b3RpZW50LgorCitUaHUgSnVuIDMwIDE4OjI1OjUyIDE5OTQgIERhdmlkIEVkZWxzb2huIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIGdjYy5jIChkb19zcGVjXzEsIGNhc2UgJ1AnKTogRG9uJ3QgYWRkIHVuZGVyc2NvcmVzIHRvIG1hY3JvcworCXN0YXJ0aW5nIHdpdGggJ19bQS1aXScuCisKK1RodSBKdW4gMzAgMTg6MTY6MzYgMTk5NCAgV2lsbCBBdGhhbmFzaW91ICAod2lsbEBndWFyZGlhbi53ZXN0Zm9yZC5jY3VyLmNvbSkKKworCSogbTY4ay5tZCAodW11bHNpM19oaWdocGFydCwgc211bHNpM19oaWdocGFydCk6IEZpeCBjb25zdHJhaW50CisJZm9yIG9wZXJhbmQgMCBpbiBkZWZpbmVfaW5zbi4KKworVGh1IEp1biAzMCAxNjowNzozMyAxOTk0ICBLYXZlaCBSLiBHaGF6aSAgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSkKKworCSogZml4aW5jbHVkZXM6IFB1dCB3cmFwcGVycyBhcm91bmQgPHRpbWUuaD4gYW5kIDxzeXMvdGltZS5oPiB0bworCWF2b2lkIG11bHRpcGxlIGluY2x1c2lvbiBlcnJvcnMgb24gbTg4ay10ZWt0cm9uaXgtc3lzdjMuCisKK1RodSBKdW4gMzAgMTI6MDg6NDggMTk5NCAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgKGtyYWJAc3BpZmYuZ251LmFpLm1pdC5lZHUpCisKKwkqIG9iamMtYWN0LmMsIG9iamMvaW5pdC5jIChPQkpDX1ZFUlNJT04pOiBJbmNyZW1lbnRlZCB0byA2LgorCisJKiBvYmpjL3NlbmRtc2cuYyAoSU5WSVNJQkxFX1NUUlVDVF9SRVRVUk4pOiBOZXcgbWFjcm8uCisJKF9fb2JqY19ibG9ja19mb3J3YXJkKTogRGVjbGFyZSBkZXBlbmRpbmcgb24gdGhlIGFib3ZlLgorCisJKiBvYmpjL2NsYXNzLmMgKG9iamNfbmV4dF9jbGFzcyk6ICBOZXcgZnVuY3Rpb24uCisJKiBvYmpjL29iamMtYXBpLmggKG9iamNfbmV4dF9jbGFzcyk6ICBOZXcgZnVuY3Rpb24uCisKKwkqIG9iamMtYWN0LmMgKGdldF9wcm90b19lbmNvZGluZywgYnVpbGRfdHlwZWRfc2VsZWN0b3JfcmVmZXJlbmNlKToKKwlOZXcgZnVjbmN0aW9ucy4gKFVUQUdfUFJPVE9DT0wpOiBOZXcgZGVmaW5lLgorCShvYmpjX3NlbGVjdG9yX3RlbXBsYXRlLCBmbGFnX3R5cGVkX3NlbGVjdG9ycyk6IE5ldyB2YXJpYWJsZXMuCisJKG9iamNfaW5pdCk6IHNldCBmbGFnX3R5cGVkX3NlbGVjdG9ycyBpZiAtZmdudS1ydW50aW1lLgorCShzeW50aF9tb2R1bGVfcHJvbG9ndWUpOiBDaGFuZ2UgZGVjbGFyYXRpb24gb2YKKwlfT0JKQ19TRUxFQ1RPUl9UQUJMRSB3aGVuIGZsYWdfdHlwZWRfc2VsZWN0b3JzIGlzIG5vbi1udWxsLgorCShidWlsZF9tb2R1bGVfZGVzY3JpcHRvcik6IE1ha2Ugc3VyZSB0aGUgZ2VuZXJhdGVkIGNvbnN0cnVjdG9yCisJZnVuY3Rpb24gaXMgZGVjbGFyZWQgcHVibGljLgorCShidWlsZF9zZWxlY3Rvcik6IE9ubHkgY2FzdCB0byBTRUwgd2hlbiBub3QgZG9pbmcgdHlwZWQgc2VsZWN0b3JzLgorCShidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSk6IFJld3JpdGUgaW5pdGlhbGl6YXRpb24uCisJKGJ1aWxkX3RtcF9mdW5jdGlvbl9kZWNsKTogTWFrZSB1cCBuZXcgbmFtZSB3aGVuIGNhbGxlZCwgc2luY2UgaXQKKwltYXkgbm93IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KKwkoaGFja19tZXRob2RfcHJvdG90eXBlKTogVXNlIGluaXRfZnVuY3Rpb25fc3RhcnQgdG8gcmVpbml0IGFyZ3MKKwltYWNoaW5lcnkuICBBbHNvIHNldCBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgYmVmb3JlIGNhbGxpbmcKKwlhc3NpZ25fcGFybXMuCisJKGdlbmVyYXRlX3Byb3RvY29scyk6ICBEb24ndCBnZW5lcmF0ZSBlbmNvZGluZyB0d2ljZS4KKwkoYnVpbGRfc2VsZWN0b3JfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uCisJKGJ1aWxkX21ldGhvZF9saXN0X3RlbXBsYXRlKTogR2VuZXJhdGUgKHZvaWQqKTAgYXMgZmlyc3QgZWxlbWVudCwKKwlub3QgKGludCkwLgorCShidWlsZF9tZXNzYWdlX2V4cHIpOiBtb3ZlIHRoZSBjYWxsIHRvIGJ1aWxkX3NlbGVjdG9yX3JlZmVyZW5jZSAKKwl0b3dhcmRzIHRoZSBlbmQsIHdoZXJlIHdlIGhhdmUgZGV0ZXJtaW5lZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlLgorCisJKiBvYmpjL09iamVjdC5oLCBvYmpjL09iamVjdC5tIChyZWFkOiwgd3JpdGU6LCBzdHJlYW1WZXJzaW9uOik6CisJVW4tZGlzYWJsZSBmb3IgYWxwaGEuICAoZm9yd2FyZDo6LCBwZXJmb3Jtdjo6KTogRGVjbGFyZSBhbmQgZml4IHRvCisJcmV0dXJuIHJldHZhbF90LiAKKwkqIG9iamMvYXJjaGl2ZS5jOiBDb21wbGV0ZWx5IHJld3JpdHRlbiB0byBoYW5kbGUgNjQgYml0IGxvbmdzIGFuZAorCXBvaW50ZXJzLiAKKwkqIG9iamMvY2xhc3MuYyAoY2xhc3NfcG9zZV9hcyk6IFJld3JpdHRlbi4KKwkqIG9iamMvZW5jb2RpbmcuYzogdXNlIG5ldyBST1VORCBtYWNybyBmb3IgYWxpZ25tZW50IHJvdW5kaW5nLgorCSogb2JqYy9pbml0LmMsIG9iamMvc2VsZWN0b3IuYywgb2JqYy9zZW5kbXNnLmM6IFJld3JpdHRlbiB0bworCWhhbmRsZSBuZXcgc2VsZWN0b3JzLgorCitUaHUgSnVuIDMwIDA3OjQ5OjUwIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogYXJtLmggKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogQ2hlY2sgZnJhbWVfcG9pbnRlcl9uZWVkZWQgd2hlbgorCWVsaW1pbmF0aW5nIHRoZSBhcmcgcG9pbnRlciBpbnRvIHRoZSBzdGFjayBwb2ludGVyLgorCitUaHUgSnVuIDMwIDA2OjI1OjUwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtY29tbW9uLmMgKGNfYnVpbGRfdHlwZV92YXJpYW50KTogUmVtb3ZlIGxhc3QgY2hhbmdlOyBpbnN0ZWFkLAorCWNvcHkgVFlQRSBpZiBub3QgaW4gb2xkIG9ic3RhY2suCisKK1dlZCBKdW4gMjkgMjE6NTE6NTIgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChsYW5nX29wdGlvbnMpOiBBZGQgLVd7bm8tLH1ub24tdmlydHVhbC1kdG9yLgorCitXZWQgSnVuIDI5IDE5OjIzOjI3IDE5OTQgIERhdmlkIE1vc2Jlcmdlci1UYW5nICAoZGF2aWRtQHBpc3Rvbi5jcy5hcml6b25hLmVkdSkKKworCSogZmluYWwuYyAoZW5kX2ZpbmFsLHByb2ZpbGVfZnVuY3Rpb24pOiBQcm9maWxpbmcgdmFyaWFibGVzIGFyZQorCXNpemUgb2YgcG9pbnRlciwgbm90IGludC4KKwkqIGFscGhhLmggKExJQl9TUEVDKTogSWYgLXBnLCBhZGQgLWxwcm9mMi4KKwkoU1RBUlRGSUxFX1NQRUMsIHtGVU5DVElPTixCTE9DSyxGVU5DVElPTl9CTE9DS31fUFJPRklMRVIpOiBOZXcgbWFjcm9zLgorCitXZWQgSnVuIDI5IDE1OjUyOjQ1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGxvb3AuYyAoYmFzaWNfaW5kdWN0aW9uX3ZhciwgY2FzZSBSRUcpOiBBbGxvdyBwcmV2aW91cworCWluc24gdG8gc2V0IGEgU1VCUkVHIG9mIFguCisKKwkqIGFscGhhLmMgKGFscGhhX3NhX3NpemUpOiBSb3VuZCBzaXplIHRvIDE2LWJ5dGUgYm91bmRhcnkuCisJKGFkZF9sb25nX2NvbnN0KTogQWRkIG5ldyBhcmcsIFRFTVBfUkVHLgorCShvdXRwdXRfe3BybyxlcGl9bG9nKTogUmV3b3JrIHRvIHB1dCBzYXZlIGFyZWEgYmV0d2VlbiBvdXRnb2luZworCWFyZ3MgYW5kIGxvY2FsIHZhcmlhYmxlcy4KKwkqIGFscGhhLmggKEZSQU1FX1BPSU5URVJfUkVHTlVNKTogTm93IHJlZ2lzdGVyIDYzLgorCShIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNKTogTmV3IG1hY3JvLgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSwgUkVHX0NMQVNTX0NPTlRFTlRTLCBSRUdOT19SRUdfQ0xBU1MpOgorCVNob3cgcmVnaXN0ZXIgNjMgaXMgbm90IGFuIEZQIHJlZ2lzdGVyLgorCShSRUdITk9fT0tfRk9SX0JBU0VfUCwgUkVHX09LX0ZPUl9CQVNFX1AsIFJFR0lTVEVSX05BTUVTKTogTGlrZXdpc2UuCisJKEFMUEhBX1JPVU5EKTogTmV3IG1hY3JvLgorCShTVEFSVElOR19GUkFNRV9PRkZTRVQsIEVMSU1JTkFCTEVfUkVHUywgSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOgorCU1vZGlmeSB0byByZWZsZWN0IHNhdmUgYXJlYSBiZXR3ZWVuIG91dGdvaW5nIGFyZ3MgYW5kIGxvY2FsIHZhcnMuCisJKiBhbHBoYS5tZDogQWRkIG5ldyBwYXR0ZXJuIGZvciBkb3VibGUtYWRkIHdoZW4gaGF2ZQorCXJlZyArIGZyYW1lIHBvaW50ZXIuCisJU2xpZ2h0IGNoYW5nZXMgdG8gYWxsIHN1Y2ggcGF0dGVybnMgYW5kIGFkZCBkZWZpbmVfc3BsaXRzIGZvciB0aGVtLgorCisJKiBnbG9iYWwuYyAoZ2xvYmFsX2FsbG9jKTogTWFrZSBhIG1vcmUgYWNjdXJhdGUgYXR0ZW1wdCB0byBzZWUKKwlpZiB0aGUgZnJhbWUgcG9pbnRlciB3aWxsIGJlIHVzZWQuCisJSWYgaXQgaXMsIHNob3cgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSB1c2VkIGlmIGl0cyBub3QKKwl0aGUgc2FtZSBhcyBGUkFNRV9QT0lOVEVSX1JFR05VTS4KKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2FuJ3QgZWxpbWluYXRlIGlmIGZyYW1lIHBvaW50ZXIgbmVlZGVkCisJYW5kIFRPIGlzIHN0YWNrIHBvaW50ZXIuCisJU3BpbGwgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBpZiBub3QgRlJBTUVfUE9JTlRFUl9SRUdOVU0KKwlhbmQgZnJhbWUgcG9pbnRlciBpcyBuZWVkZWQuCisJKHNwaWxsX2hhcmRfcmVnKTogSWYgQ0FOVF9FTElNSU5BVEUsIHNldCByZWdzX2V2ZXJfbGl2ZTsKKwlubyBsb25nZXIgZG9uZSBieSBjYWxsZXJzLgkKKworCSogYTI5ay5tZCAobW92cWkpOiBBZGQgbWlzc2luZyBgRE9ORScuCisKK1dlZCBKdW4gMjkgMTU6NDQ6MTggMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKKworCSogc3BhcmMvc3BhcmMuaAkoQ1BQX1NQRUMpOiBTcGxpdCB1cCB2OS9ub24tdjkgc3R1ZmYuCisJTW92ZSAtQWNwdSBhbmQgLUFtYWNoaW5lIGZyb20gaGVyZS4KKwkoQ1BQX1BSRURFRklORVMpOiBUbyBoZXJlLgorCShOT19CVUlMVElOX1BUUkRJRkZfVFlQRSk6IFVuZGVmaW5lLgorCShOT19CVUlMVElOX1NJWkVfVFlQRSk6IExpa2V3aXNlLgorCShQVFJESUZGX1RZUEUpOiBTcGxpdCB1cCB2OS9ub24tdjkgZGVmaW5pdGlvbnMuCisJKFNJWkVfVFlQRSk6IExpa2V3aXNlLgorCSogc3BhcmMvc3A2NC1lbGY6IChQVFJESUZGX1RZUEUpOiBSZW1vdmUgZGVwZW5kZW5jZSBvbiBQT0lOVEVSX1NJWkUuCisJKFNJWkVfVFlQRSk6IExpa2V3aXNlLgorCitXZWQgSnVuIDI5IDE1OjI4OjE3IDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBjY2NwLmMgKGNvbGxlY3RfZXhwYW5zaW9uKTogQWx3YXlzIHB1dCAxIHNwYWNlIGFmdGVyIHRoZSBtYWNybworCWV4cGFuc2lvbiBpbiBBTlNJIG1vZGUgdG8gZml4IHJlZ3Jlc3Npb24gZnJvbSBKdW5lIDI0dGguCisKK1R1ZSBKdW4gMjggMjI6NDE6NTIgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NldCk6IEV2YWx1YXRlIEhBVkVfY29uZGl0aW9uYWxfbW92ZSBhdCBydW50aW1lLgorCitUdWUgSnVuIDI4IDIwOjI3OjA4IDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBvcHRhYi5jIChleHBhbmRfYmlub3ApOiBDb252ZXJ0IE9QMCB0byBtb2RlIGZvciBsaWJyYXJ5IGNhbGxzLgorCisJQ2hhbmdlcyB0byBvcHRpbWl6ZSBkaXZpc2lvbi1ieS1jb25zdGFudHMsIGFuZCBtYWtlIGNlaWwgYW5kIGZsb29yCisJcm91bmRpbmcgd29yayBjb3JyZWN0bHk6CisJKiBleHBtZWQuYyAoZXhwYW5kX211bHQpOiBHZW5lcmFsaXplIHRvIGNhbGwgc3ludGhfbXVsdCBhbHNvCisJZm9yIE9QMSAtIDEuCisJKGNlaWxfbG9nMik6IE5ldyBmdW5jdGlvbi4KKwkoY2hvb3NlX211bHRpcGxpZXIpOiBOZXcgZnVuY3Rpb24uCisJKGludmVydF9tb2Qybik6IE5ldyBmdW5jdGlvbi4KKwkoZXhwYW5kX211bHRfaGlnaHBhcnRfYWRqdXN0KTogTmV3IGZ1bmN0aW9uLgorCShleHBhbmRfbXVsdF9oaWdocGFydCk6IE5ldyBmdW5jdGlvbi4KKwkoRVhBQ1RfUE9XRVJfT0ZfMl9PUl9aRVJPX1ApOiBOZXcgbWFjcm8uCisJKGV4cGFuZF9kaXZtb2QpOiBBbG1vc3QgY29tcGxldGVseSByZXdyaXR0ZW4uCisJKGV4cGFuZF9zaGlmdCk6IERvbid0IHRydW5jYXRlIGltbWVkaWF0ZSBzaGlmdCBjb3VudCwgaXQgZG9lc24ndCB3b3JrCisJZm9yIHR5cGVzIHNtYWxsZXIgdGhhbiBpbnQuCisJKiBleHByLmggKHNtdWxfaGlnaHBhcnRfb3B0YWIsIHVtdWxfaGlnaHBhcnRfb3B0YWIpOiBOZXcgdmFyaWFibGVzLgorCSogZ2Vub3Bpbml0LmMgKG9wdGFicyk6IEFkZCBbdXNdbXVsX2hpZ2hwYXJ0X29wdGFiLgorCSogb3B0YWJzLmMgKHNtdWxfaGlnaHBhcnRfb3B0YWIsIHVtdWxfaGlnaHBhcnRfb3B0YWIpOiBOZXcgdmFyaWFibGVzLgorCShleHBhbmRfYmlub3ApOiBIYW5kbGUgW3VzXW11bF9oaWdocGFydF9vcHRhYiBhcyBjb21tdXRhdGl2ZS4KKwkoaW5pdF9vcHRhYnMpOiBJbml0aWFsaXplIFt1c11tdWxfaGlnaHBhcnRfb3B0YWIuCisJKiBmb2xkLWNvbnN0LmMgKGRpdl9hbmRfcm91bmRfZG91YmxlKTogTWFrZSBpdCBnbG9iYWxseSBhY2Nlc3NpYmxlLgorCSogYTI5ay5tZCAoc211bHNpM19oaWdocGFydCwgdW11bHNpM19oaWdocGFydCk6IE5ldyBwYXR0ZXJucy4KKwkqIGFscGhhLm1kICh1bXVsZGkzX2hpZ2hwYXJ0KTogTmV3IGV4cGFuZGVyIGFuZCBtYXRjaGVyLgorCSogYWxwaGEuYyAoY2ludDhfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuCisJKiBtNjhrLm1kICh1bXVsc2kzX2hpZ2hwYXJ0LCBjb25zdF91bXVsc2kzX2hpZ2hwYXJ0KToKKwlOZXcgZXhwYW5kZXIgYW5kIG1hdGNoZXIuCisJKHNtdWxzaTNfaGlnaHBhcnQsIGNvbnN0X3NtdWxzaTNfaGlnaHBhcnQpOiBMaWtld2lzZS4KKworVHVlIEp1biAyOCAxMzo0MjoxMCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNvbDIuaCAoQ1BQX1NQRUMpOiBIYW5kbGUgLW1zdXBlcnNwYXJjLgorCSogc3BhcmMuYyAoY3B1X3R5cGUsIHNwYXJjX2NwdV90eXBlKTogUmVuYW1lIHRvIGFyY2hfdHlwZSBhbmQKKwlzcGFyY19hcmNoX3R5cGUuICBGaXggYWxsIHVzZXJzLgorCShzdXBlcnNwYXJjX2FkanVzdF9jb3N0KTogTmV3IGZ1bmN0aW9uLgorCSogc3BhcmMuaCAoY3B1X3R5cGUsIHNwYXJjX2NwdV90eXBlKTogUmVuYW1lIHRvIGFyY2hfdHlwZSBhbmQKKwlzcGFyY19hcmNoX3R5cGUuCisJKENQUF9TUEVDKTogSGFuZGxlIC1tc3VwZXJzcGFyYy4KKwkoTUFTS19TVVBFUlNQQVJDLCBUQVJHRVRfU1VQRVJTUEFSQyk6IE5ldyBtYWNyb3MuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbXN1cGVyc3BhcmMgYW5kIC1tY3lwcmVzcy4KKwkoQURKVVNUX0NPU1QpOiBOZXcgbWFjcm8uCisJKiBzcGFyYy5tZCAoY3B1IGF0dHJpYnV0ZSk6IFJlbmFtZSB0byBhcmNoIGF0dHJpYnV0ZS4gIEFkZCBhIG5ldworCWNwdSBhdHRyaWJ1dGUuICBGaXggYWxsIHVzZXJzLgorCSh0eXBlIGF0dHJpYnV0ZSk6IEFkZCBpYWx1LCBzaGlmdCwgaW11bCwgZnBkaXZzLCBhbmQgZnBkaXZkLgorCURlbGV0ZSBmcGRpdi4KKwkoZnVuY3Rpb24gdW5pdHMpOiBBZGQgQ3lwcmVzcyBhbmQgU3VwZXJzcGFyYyB2ZXJzaW9ucyBvZiBlYWNoLgorCShhZGRzaTMsIHN1YnNpMywgYW5kc2kzLCBpb3JzaTMsIHhvcnNpMyk6IEFkZCBpYWx1IHR5cGUgYXR0cmlidXRlLgorCShtdWxzaTMpOiBBZGQgaW11bCB0eXBlIGF0dHJpYnV0ZS4KKwkoZGl2dGYzLCBkaXZkZjMpOiBVc2UgZnBkaXZkIG5vdCBmcGRpdiB0eXBlIGF0dHJpYnV0ZS4KKwkoZGl2c2YzKTsgVXNlIGZwZGl2cyBub3QgZnBkaXYgdHlwZSBhdHRyaWJ1dGUuCisJKGFzaGxzaTMsIGFzaHJzaTMsIGxzaHJzaTMpOiBBZGQgc2hpZnQgdHlwZSBhdHRyaWJ1dGUuCisKKwkqIGk5NjAubWQgKGFuZHNpMys2KTogUmVwbGFjZSBiYWQgY2xyYml0IHBhdHRlcm4gd2l0aCB0d28gd29ya2luZworCW9uZXMuCisKK1R1ZSBKdW4gMjggMTM6MzE6MzEgMTk5NCAgVXdlIFNlaW1ldCAgKHNlaW1ldEBpcmlzMS5jaGVtaWUudW5pLWtsLmRlKQorCisJKiBjb25maWd1cmUgKG02OGstYXRhcmktc3lzdjQqKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBtNjhrL2F0YXJpLmgsIG02OGsveG0tYXRhcmkuaDogTmV3IGZpbGVzLgorCitUdWUgSnVuIDI4IDEyOjQxOjMyIDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5tZCAoZGVmaW5lX3NwbGl0IGZvciAocGx1cyAocmVnKSAobGFyZ2VfY29uc3RhbnQpKSk6IFRyZWF0CisJbGFyZ2VfY29uc3RhbnQgYXMgc2lnbmVkLgorCitUdWUgSnVuIDI4IDA1OjQ2OjU1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IFdoZW4gY2hlY2tpbmcgZm9yIG1vdmVzCisJYW5kIGFkZHMsIHVzZSBzaW5nbGVfc2V0LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZHNfY29uZmxpY3QpOiBIYW5kbGUgUjFfVFlQRSBvZiBSRUxPQURfT1RIRVIuCisKKwkqIGV4cHIuYyAoZG9fanVtcCwgY2FzZSBCSVRfQU5EX0VYUFIpOiBPbmx5IG5hcnJvdyB0byBhIHR5cGUKKwl0aGF0IGNvcnJlc3BvbmRzIHRvIGEgbW9kZS4KKworVHVlIEp1biAyOCAwNTo0MToyOSAxOTk0ICBXaWxsIFIuIEF0aGFuYXNpb3UgKHdpbGxAd2VzdGZvcmQuY2N1ci5jb20pCisKKwkqIHJzNjAwMC5oIChNRU1PUllfTU9WRV9DT1NUKTogTWFrZSBwcm9jZXNzb3ItZGVwZW5kZW50LgorCSogcnM2MDAwLm1kIChtb3ZzZik6IEVtaXQgZnJzcCBpZiBzdG9yaW5nIHRvIG1lbW9yeSBhbmQgbm90IFBvd2VyUEMuCisJKG1vdnNmIG1hdGNoZXIpOiBSZW1vdmUgZXhwbGljaXQgZnJzcC4KKwkoc3RvcmUgc2Ygd2l0aCB1cGRhdGUpOiBMaWtld2lzZS4KKwkqIHJzNjAwMC5jOiBJbmNsdWRlIGN0eXBlLmguCisKK1R1ZSBKdW4gMjggMDU6NDA6NDQgMTk5NCAgTWlrZSBDb2xsaXNvbiAgKGNvbGxpc29uQGNoaWFudGkuc3cuc3RyYXR1cy5jb20pCisKKwkqIHJlYWwuYzogVHJlYXQgSEZtb2RlIGxpa2UgU0Ztb2RlLCBmb3Igbm93LgorCitNb24gSnVuIDI3IDE5OjE2OjQ5IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIG11bHRpLXdvcmRzIHNoaWZ0cyBhbmQgcm90YXRlcyk6CisJRml4IGVycm9ycyBpbiBsYXN0IGNoYW5nZS4KKworTW9uIEp1biAyNyAxMToyOToxOCAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGFybS5jOiBJbmNsdWRlICJleHByLmgiLgorCShhcm1fZnB1KTogTmV3IHZhcmlhYmxlLgorCShhcm1fZ2VuX21vdnN0cnFpKTogRml4IHR5cG8uCisJKiBhcm0uaDogKGVudW0gZmxvYXRpbmdfcG9pbnRfdHlwZSk6IE5ldyBlbnVtZXJhdGlvbiB0eXBlLgorCShhcm1fZnB1KTogTmV3IGRlY2xhcmF0aW9uLgorCSogYXJtLm1kOiAoZnVuY3Rpb25fdW5pdCBmcGEpOiBBZGQgbW9yZSBhY2N1cmF0ZSBzY2hlZHVsaW5nCisJaW5mb3JtYXRpb24uCisJKGFsbCBmbG9hdGluZyBwb2ludCBwYXR0ZXJucyk6IEFkZCBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9uIHR5cGUKKwlpbmZvcm1hdGlvbiB0byBhdHRyaWJ1dGVzLgorCSogcmlzY2l4Lmg6IChTVEFSVEZJTEVfU1BFQyxTSVpFX1RZUEUsUFRSRElGRl9UWVBFKTogRml4IHR5cG9zLgorCShBU01fRklOQUxfU1BFQyk6IE9ubHkgcmVqZWN0IC1tYnNkIGFuZCAtbXhvcGVuIHdoZW4gLXBlZGFudGljLgorCitTdW4gSnVuIDI2IDA1OjM3OjI2IDE5OTQgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiB0b3BsZXYuYyAodl9tZXNzYWdlX3dpdGhfZGVjbCk6IEF2b2lkIGZ3cml0ZSBmb3Igc3RkZXJyOyBtaXhpbmcKKwlpdCB3aXRoIGZwcmludGYgYW5kIGZwdXRzIGNhbiBjYXVzZSBzdHJhbmdlIHJlc3VsdHMgdW5kZXIgVk1TLgorCitTYXQgSnVuIDI1IDA2OjA3OjU2IDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzLCBjYXNlIFJFR19ERUFEKTogSWYgYSBjYWxsIHVzZXMgYQorCWhhcmQgcmVnLCB0aGVuIHRoaXMgaXMgd2hlcmUgaXQgZGllcy4KKworRnJpIEp1biAyNCAxOTowOTozMyAxOTk0ICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQorCisJKiBjY2NwLmMgKGNyZWF0ZV9kZWZpbml0aW9uKTogRWxpbWluYXRlIHdoaXRlc3BhY2UgYmVmb3JlIGFuZAorCWFmdGVyIG1hY3JvIGRlZmluaXRpb25zLgorCitGcmkgSnVuIDI0IDE2OjE5OjI3IDE5OTQgIFBoaWxpcHBlIERlIE11eXRlciAgKHBoZG1AaW5mby51Y2wuYWMuYmUpCisKKwkqIGMtZGVjbC5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBTZXQgd2Fybl9iYWRfZnVuY3Rpb25fY2FzdAorCWZvciAtV2JhZC1mdW5jdGlvbi1jYXN0LgorCSogYy10eXBlY2suYyAoYnVpbGRfY19jYXN0KTogSXNzdWUgYSB3YXJuaW5nIGZvciBub24tbWF0Y2hpbmcgY2FzdAorCWZyb20gYSBmdW5jdGlvbiBjYWxsIChsaWtlIG1hbGxvYyB3aXRob3V0IHByb3RvKS4KKwkqIGMtdHJlZS5oOiBEZWNsYXJlIHdhcm5fYmFkX2Z1bmN0aW9uX2Nhc3QuCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1XW25vXS1iYWQtZnVuY3Rpb24tY2FzdC4KKworRnJpIEp1biAyNCAxNjowOToxMiAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogdmF4LmggKEFTTV9JREVOVElGWV9MQU5HVUFHRSk6IE5ldyBtYWNyby4KKworRnJpIEp1biAyNCAxNTozNjozNyAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3ICAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJZiB3ZSByZXZlcnNlICJpZiAoZm9vKSBiYXIgZWxzZSBicmVhazsiCisJYW5kIHRoZXJlIGZvbGxvd3MgYSBOT1RFX0lOU05fTE9PUF9FTkQsIG1vdmUgdGhlIG5vdGUgYmVmb3JlICJiYXIiLgorCisJKiBhcm0ubWQgKG1vdnN0cnNpKTogRGVsZXRlLgorCShtb3ZzdHJxaSk6IE5ldyBleHBhbmQuCisJKiBhcm0uaCAoYXJtX2dlbl9tb3ZzdHJxaSk6IE5ldyBmdW5jdGlvbi4KKworRnJpIEp1biAyNCAxNDo0Mzo0NiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5jIChhbHBoYV9idWlsdGluX3NhdmVyZWdzKTogRml4IHR5cG8gaW4gY29tcHV0aW5nIHZhbHVlCisJZm9yIF9fYmFzZS4KKworCSogdmF4Lm1kICh6ZXJvX2V4dHJhY3QgcGF0dGVybnMpOiBEb24ndCBhbGxvdyBjb25zdGFudHMgaW4KKwl0aGUgZmlyc3Qgb3BlcmFuZCBvZiBaRVJPX0VYVFJBQ1Qgc2luY2UgdGhlIHJlY29nbml6ZXIKKwlmdW5jdGlvbiBmb3JjZXMgdGhlbSB0byBtYXRjaCB0aGUgbW9kZSBvZiB0aGUgbWF0Y2hfb3BlcmFuZC4KKworCSogYy10eXBlY2suYyAoZGVjbF9jb25zdGFudF92YWx1ZSk6IFRlc3QgZm9yIGNvbnN0IGFuZAorCW5vdCBpdGVyYXRvci4KKwkoZGVmYXVsdF9jb252ZXJzaW9uLCBkaWdlc3RfaW5pdCk6IFJlbW92ZSByZWR1bmRhbnQgY2hlY2tzCisJYmVmb3JlIGNhbGxpbmcgZGVjbF9jb25zdGFudF92YWx1ZS4KKwkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFNlZSBpZiBSSFMgaGFzIGEgY29uc3RhbnQgdmFsdWUuCisKKwkqIG02OGsubWQgKGFzaHJzaTMsIGxzaHJzaDMpOiBSZW1vdmUgcGF0dGVybnMgdXNpbmcgYmZleHRbc3VdLgorCisJKiByZWctc3RhY2suYyAoZ290b19ibG9ja19wYXQpOiBJZ25vcmUgdW5kZWZpbmVkIGxhYmVsLgorCitUaHUgSnVuIDIzIDIyOjA3OjQyIDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogc3BhcmMvc3A2NC1lbGYuaCAoTElOS19TUEVDKTogRml4IHR5cG8uCisJKFBUUkRJRkZfVFlQRSk6IExpa2V3aXNlLgorCitUaHUgSnVuIDIzIDE5OjE1OjM2IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiB0cmVlLmggKFRSRUVfU1lNQk9MX1JFRkVSRU5DRUQpOiBOZXcgbWFjcm8uCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfbmFtZSk6IFNldCBUUkVFX1NZTUJPTF9SRUZFUkVOQ0VEIG9uIHRoZQorCWlkZW50aWZpZXIgZm9yIGBuYW1lJy4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBVc2UgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRCBpbnN0ZWFkIG9mCisJVFJFRV9VU0VEIGFuZCBUUkVFX0FERFJFU1NBQkxFIHdoZXJlIGFwcHJvcHJpYXRlLgorCitUaHUgSnVuIDIzIDE5OjA2OjA1IDE5OTQgIFJhbmR5IFdyaWdodCAgKHJ3cmlnaHRAZGhvc3R3by5jb252ZXguY29tKQorCisJKiBjc2UuYyAoc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uLCBjYXNlIFVOU0lHTkVEX0ZMT0FUKTogQWRkCisJbWlzc2luZyBjYXN0IHRvIHVuc2lnbmVkLgorCitUaHUgSnVuIDIzIDE5OjAwOjE4IDE5OTQgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAubWQgKGZpeF90cnVuY2Rmc2kyLCBtb3ZzZiwgbW92ZGkpOiBVc2UgYXNzaWduX3N0YWNrX3RlbXAuCisJKG11bHNpZGkzKTogQWRkIGVhcmx5Y2xvYmJlciBjb25zdHJhaW50IG1vZGlmaWVyIHRvIFBvd2VyUEMKKwl2ZXJzaW9uIGFuZCAhVEFSR0VUX1BPV0VSUEM2NCB0byBmaW5hbCBjb25kaXRpb24uCisKKwkqIHJzNjAwMC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfUE9XRVIgKGFsaWFzIGZvciBfSUJNUjIpLgorCShDUFBfU1BFQyk6IE5ldyBtYWNyby4KKwkqIHBvd2VycGMuaCAoQVNNX1NQRUMpOiBVc2UgUG93ZXJQQyBtb2RlLCBub3QgNjAxIG1vZGUuCisJKENQUF9TUEVDKTogTmV3IG1hY3JvLgorCShUQVJHRVRfREVGQVVMVCk6IEdlbmVyYXRlIHB1cmUgUG93ZXJQQyBjb2RlLCBub3QgNjAxLXNwZWNpZmljLgorCitUaHUgSnVuIDIzIDE4OjA5OjIzIDE5OTQgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQorCisJKiB2YXguaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgYF9fdmF4X18nLgorCSogdmF4L3Ztcy5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBgX192YXhfXycsIGBfX3Ztc19fJywgYW5kIGBfX1ZNU19fJzsKKwl1cGRhdGUgX19HTlVDX01JTk9SX18gdG8gNi4KKworVGh1IEp1biAyMyAxNzo1OTo0MSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogRG9uJ3QgdHJ5IHRvIHdyaXRlIGZ1bmN0aW9uIGlmIHdlCisJZGlkbid0IHNhdmUgaW5zbnMgZm9yIGl0LgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRG9uJ3QgcmVqZWN0aW5nIG5vbi1jb25zdCBkdWUgdG8gdmFsdWUKKwlvZiBQUkVGRVJSRURfUkVMT0FEX0NMQVNTIGlmIG5vIHJlZ3Mgd2VyZSB2YWxpZCBmb3IgYWx0ZXJuYXRpdmUuCisKK1RodSBKdW4gMjMgMTc6NDU6NTUgMTk5NCAgTWF0dGhpYXMgUGZhbGxlciAgKGxlb0BtYXJjby5kZSkKKworCSogbnMzMmsuYyAob3V0cHV0X21vdmVfZG91YmxlKTogSWYgdGhlIGRlc3QgaXMgcmVnaXN0ZXIgcGFpciBhbmQgYm90aAorCXJlZ3MgYXJlIHVzZWQgaW4gc3JjIGFkZHJlc3MsIHVzZSBBRERSIHRvIGNvbXB1dGUgc3JjIGFkZHJlc3MsIG5vdAorCUFEREQsIHdoaWNoIHRocm93cyBhd2F5IHNjYWxlZCBpbmRleC4KKworVGh1IEp1biAyMyAxNzo0MDowNiAxOTk0ICBDcmFpZyBCdXJsZXkgIChidXJsZXlAZ251LmFpLm1pdC5lZHUpCisKKwkqIGMtZGVjbC5jIChjbGVhcl9iaW5kaW5nX2xldmVsKTogQWRkIG1pc3NpbmcgZmllbGRzIGluIGluaXRpYWxpemVyLgorCShjX2RlY29kZV9vcHRpb24pOiBDb3JyZWN0IG1pc3NwZWxsaW5nIG9mIC1mbm8tZG9sbGFycy1pbi1pZGVudGlmaWVycy4KKworVGh1IEp1biAyMyAxMzo0NzoyMyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBGaXggcmV0dXJuIHR5cGUgb2Ygc2JyayBpbiA8dW5pc3RkLmg+IG9uIEFscGhhCisJT1NGLzEgVjIuMC4gIEFsc28sIHJlZGlyZWN0IGdyZXAgZXJyb3JzIHRvIC9kZXYvbnVsbCBpbiA8YXNzZXJ0Lmg+CisJZml4LgorCitUaHUgSnVuIDIzIDEyOjA4OjIzIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogYXJtLmM6IEluY2x1ZGUgdHJlZS5oLgorCShjb25zdF9va19mb3JfYXJtKTogQWRkIGZhc3QgcmV0dXJuIGZvciAwIG9yIGp1c3Qgb25lIG5vbi16ZXJvIGJpdC4KKwkoY29uc3Rfb2tfZm9yX29wLCBhcm1fc3BsaXRfY29uc3RhbnQpOiBOZXcgZnVuY3Rpb25zLgorCShhcm1fcnR4X2Nvc3RzLCByZWdfb3JfaW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgorCShzaGlmdF9vcGVyYXRvcik6IEFjY2VwdCBST1RBVEVSVC4KKwkobXVsdGlfcmVnaXN0ZXJfcHVzaCk6IE5ldyBmdW5jdGlvbi4KKwkoc2hpZnRfb3ApOiBEb24ndCBhYm9ydCBpZiBhIGNvbnN0YW50IGlzIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UsCisJYnV0IGNvbnZlcnQgdGhlIHdob2xlIHNoaWZ0IGV4cHJlc3Npb24gaW50byBzb21ldGhpbmcgbGVnYWwuICBJZiB0aGUKKwlzaGlmdCBpcyB6ZXJvLCB0aGVuIHJldHVybiBOVUxMLgorCShvdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uKTogT3V0cHV0IGEgY2FsbCB0byBhYm9ydCBpZiB0aGUgZnVuY3Rpb24gaXMKKwl2b2xhdGlsZS4KKwkoYXJtX3ZvbGF0aWxlX2Z1bmMpOiBOZXcgZnVuY3Rpb24uCisJKGdldF9wcm9sb2d1ZV9zaXplKTogUmVtb3ZlIGFsbCBhZGp1c3RtZW50cyBmb3IgaW5zbnMgdGhhdCBhcmUgbm93CisJb3V0cHV0IGFzIHJ0eC4KKwkob3V0cHV0X2Z1bmNfcHJvbG9ndWUpOiBSZW1vdmUgYWxsIGNvZGUgdGhhdCBvdXRwdXRzIGluc3RydWN0aW9ucywKKwlqdXN0IHByaW50IGEgZmV3IGNvbW1lbnRzLgorCShvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IE91dHB1dCBhIGNhbGwgdG8gYWJvcnQgaWYgYSB2b2xhdGlsZSBmdW5jdGlvbgorCXRyaWVzIHRvIHJldHVybi4KKwkoZW1pdF9tdWx0aV9yZWdfcHVzaCk6IE5ldyBmdW5jdGlvbi4KKwkoYXJtX2V4cGFuZF9wcm9sb2d1ZSk6IE5ldyBmdW5jdGlvbi4gIERvbid0IGJvdGhlciB0byBwdXNoIGNhbGwtc2F2ZWQKKwlyZWdzIGlmIHdlIHdpbGwgbmV2ZXIgcmV0dXJuLgorCShhcm1fcHJpbnRfb3BlcmFuZCwgY2FzZSAnUycpOiBJZiBzaGlmdF9vcCByZXR1cm5zIE5VTEwsIHRoZW4gbm8gc2hpZnQKKwlpcyByZXF1aXJlZC4KKwkqIGFybS5oIChUQVJHRVRfV0hFTl9ERUJVR0dJTkcpOiBEZWxldGUuCisJKE1PREVTX1RJRUFCTEVfUCk6IEFsbCBtb2RlcyBvZiB0aGUgc2FtZSBjbGFzcyBhcmUgdGllYWJsZS4KKwkoQ09OU1RfT0tfRk9SX0xFVFRFUl9QKTogQWRkICdNJyBmb3IgY29uc3RhbnRzIHZhbGlkIGluIGEgc2hpZnQuCisJKEZVTkNUSU9OX1BST0ZJTEVSKTogRG9uJ3QgY2FsbCBhcm1faW5jcmVhc2VfbG9jYXRpb24uCisJKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogQ2FsbCBzYXZlZCByZWdzIGFyZSBuby1sb25nZXIgcHVzaGVkIGZvcgorCWZ1bmN0aW9ucyB0aGF0IGRvbid0IHJldHVybi4KKwkoTEVHSVRJTUlaRV9BRERSRVNTKTogUHVzaCBjb25zdGFudHMgdGhhdCB3aWxsIG5ldmVyIGJlIGxlZ2l0aW1hdGUgLS0gCisJc3ltYm9scyBhbmQgbGFiZWxzIC0tIGludG8gcmVnaXN0ZXJzLiAgSGFuZGxlIERJbW9kZSBiZXR0ZXIuCisJKERFRkFVTFRfU0lHTkVEX0NIQVIpOiBVc2UgdW5zaWduZWQgdW5sZXNzIGFscmVhZHkgZGVmaW5lZC4KKwkoUlRYX0NPU1RTKTogQ2FsbCBhcm1fcnR4X2Nvc3RzLgorCShBRERSRVNTX0NPU1QpOiBTaW5jZSBtb3N0IG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBydHggY29zdCwgbWFrZSB0aGUKKwltb3JlIGNvbXBsZXggYWRkcmVzc2VzIGNoZWFwZXIuCisJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBST1RBVEVSVCB0byBzaGlmdF9vcGVyYXRvcjsgYW5kIG5ldyBwcmVkaWNhdGVzCisJZm9yIHJlZ19vcl9pbnRfb3BlcmFuZCBhbmQgbXVsdGlfcmVnaXN0ZXJfcHVzaC4KKwkoREJYX0NPTlRJTl9MRU5HVEgpOiBPbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeSBkb25lLgorCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBMZXQgYXJtX3ByaW50IG9wZXJhbmQgb3V0cHV0IHRoZSAiLCAiIGZvcgorCXNoaWZ0cy4KKwkqIGFybS5tZCAoYWRkc2kzLCBzdWJzaTMsIGFuZHNpMywgaW9yc2kzLCBhc2hsc2kzLCBhc2hyc2kzLCBsc2hyc2kzLAorCXJvdHJzaTMpOiBSZXdyaXRlIGFzIGV4cGFuZCBwYXR0ZXJucy4KKwkocm90bHNpMyk6IE5ldyBleHBhbmQuCisJKG1hdGNoZXJzLCBhbmQgc3BsaXQgcGF0dGVybnMgZm9yIGFib3ZlKTogTmV3LgorCShhbGwgcGF0dGVybnMgd2l0aCBzaGlmdHMpOiBMZXQgYXJtX3ByaW50X29wZXJhbmQgb3V0cHV0IHRoZSAiLCAiCisJYmVmb3JlIGEgc2hpZnQgaWYgaXQgaXMgbmVlZGVkLgorCSh6ZXJvX2V4dGVuZHFpaGkyKTogRGVsZXRlLgorCSh6ZXJvX2V4dGVuZHFpc2kyKTogRXhwYW5kIHRvIChhbmQgLi4uKSBpZiBub3QgbWVtb3J5LgorCShtb3ZzaSk6IENhbGwgYXJtX3NwbGl0X2NvbnN0YW50IHRvIGdlbmVyYXRlIGEgY29uc3RhbnQuCisJKG1vdnFpKTogT25seSBmb3JjZSBhIE1FTSBpbnRvIGEgcmVnaXN0ZXIgaWYgbm90IHJlbG9hZGluZy4KKwkobW92c2YsIG1vdmRmKTogSWYgbG9hZGluZyBhIG5vbi1pbW1lZGlhdGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUsIG9yCisJbG9hZGluZyBhbmQgZmxvYXRpbmcgcG9pbnQgaW1tZWRpYXRlIGludG8gaW50ZWdlciByZWdzLCBwdXNoIHRoZQorCWNvbnN0YW50IHN0cmFpZ2h0IGludG8gdGhlIHBvb2wuCisJKG1vdmRmKTogR2V0IHJpZCBvZiB0aGUgc2NyYXRjaCByZWdpc3Rlci4KKwkocmVsb2FkX291dGRmKTogUmV3cml0ZSB0byBleHBhbmQgdG8gdGhlIHR3byByZXF1aXJlZCBpbnNucy4KKwkobWF0Y2hlciBmb3IgbW92ZGYpOiBSZW1vdmUgYWx0ZXJuYXRpdmUgdGhhdCB1c2VkIHNjcmF0Y2ggcmVnaXN0ZXIgZm9yCisJc3RvcmluZy4KKwkobW92eGYpOiByZXdyaXRlIGFzIGV4cGFuZC4KKwkobWF0Y2hlciBmb3IgbW92eGYpOiBSZWNvZ25pemUgZXZlbiB3aGVuIFhGbW9kZSBjb2RlIGlzIGRpc2FibGVkLCBzbworCXRoYXQgcHJvbG9ndWUgaW5zbnMgY2FuIGJlIGdlbmVyYXRlZC4KKwkoTWF0Y2hlciBmb3IgcmV2ZXJzZWQgY29uZGl0aW9uYWwganVtcCk6IERvbid0IG1hdGNoIGlmIHRoZSBtb2RlIG9mIHRoZQorCUNDIHJlZ2lzdGVyIGlzIG5vdCByZXZlcnNpYmxlLgorCShwcm9sb2d1ZSk6IE5ldyBleHBhbmQuCisJKG1hdGNoZXIgZm9yIG11bHRpX3JlZ2lzdGVyX3B1c2ggaW5zbik6IE5ldy4KKwkqIHJpc2NpeC5oOiBEZWxldGUgc29tZSBkZWFkIGNvZGUuCisJKFNUQVJURklMRV9TUEVDKTogTG9vayBpbiB0aGUgY29ycmVjdCBwbGFjZXMgZm9yIHN0YXJ0IGZpbGVzLgorCShMSUJfU1BFQyk6IERlZmluZS4KKwkoTElOS19TUEVDKTogRGVmaW5lLgorCShUQVJHRVRfV0hFTl9ERUJVR0dJTkcpOiBEZWxldGUuCisJKERFRkFVTFRfU0lHTkVEX0NIQVIpOiBTZXQgdG8gdW5zaWduZWQuCisJKFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFLCBUQVJHRVRfRURPTSk6IERlZmluZS4KKwkqIHJpeC1nYXMuaCAoREJYX0NPTlRJTl9MRU5HVEgpOiBTZXQgdG8gODAuCisJKERFRkFVTFRfR0RCX0VYVEVOU0lPTlMsIERCWF9OT19YUkVGUyk6IERvbid0IHRyeSB0byBwYW5kZXIgdG8gZGJ4LCBpdAorCWlzIGp1c3QgdG8gYnJva2VuIHRvIHVzZS4KKworV2VkIEp1biAyMiAyMDoxMzowMyAxOTk0ICBXaWxsIEF0aGFuYXNpb3UgICh3aWxsQHdlc3Rmb3JkLmNjdXIuY29tKQorCisJKiBjb25maWd1cmUgKG02OGstY2N1ci1ydHUpOiBOZXcgY29uZmlndXJhdGlvbi4KKwkqIGNvbmZpZy5zdWIgKG02OGstY2N1cik6IE5ldyBzeXN0ZW0uCisJKiBwcm90b2l6ZS5jOiBJbmNsdWRlIDxkaXJlbnQuaD4sIG5vdCA8c3lzL2Rpci5oPiBvbiBDb25jdXJyZW50LgorCSogY2N1ci1HQVMuaCwgeC1jY3VyOiBOZXcgZmlsZXMuCisKK1dlZCBKdW4gMjIgMTg6NDk6MTcgMTk5NCAgV2FsdGVyIE1pc2FyICAobWlzYXJAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlKQorCisJKiBtNjhrL2hwMzIwLmggKExJTktfU1BFQyk6IE5ldyBtYWNyby4KKworV2VkIEp1biAyMiAxODo0Mzo1MSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZTogRm9yIHRhcmdldCBhbHBoYS0qLSosIGlmIHVzaW5nIGdhcywgc2V0CisJdGFyZ2V0X2NwdV9kZWZhdWx0IHRvIDQuCisJKiBjb25maWcvYWxwaGEvYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogSW5jbHVkZQorCVRBUkdFVF9DUFVfREVGQVVMVCBpbiBkZWZhdWx0IHZhbHVlLgorCShUQVJHRVRfQ1BVX0RFRkFVTFQpOiBEZWZpbmUgYXMgMCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgorCShBU01fRklOQUxfU1BFQyk6IEluY2x1ZGUgVEFSR0VUX0NQVV9ERUZBVUxUIGluIHRlc3QgZm9yIHdoaWNoCisJdmVyc2lvbiB0byBkZWZpbmUuCisKK1dlZCBKdW4gMjIgMTg6MTU6NDEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIHJlcGxhY2luZyBERVNUX0FERFIgZ2l2cywgbWFrZQorCXN1cmUgcmVzdWx0aW5nIGluc24gaXMgdmFsaWQuCisKKwkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBOZXcgdmFyaWFibGUgbmV4dF9tZXRob2RzOyBwYXNzIHRvCisJbW9zdCByZWN1cnNpdmUgY2FsbHMgd2hlbiB0cnlpbmcgdG8gYXZvaWQgbGliY2FsbHMuCisJQWx3YXlzIGNoZWNrIGZvciBhIHJldHVybiB2YWx1ZSBvZiB6ZXJvIGluIHJlY3Vyc2l2ZSBjYWxscy4KKwkoZXhwYW5kX2Zsb2F0KTogRW5zdXJlIFRBUkdFVCBoYXMgcHJvcGVyIG1vZGUuCisJUGFzcyBPUFRBQl9MSUJfV0lERU4gdG8gZXhwYW5kX2Jpbm9wIGNhbGxzLgorCitUdWUgSnVuIDIxIDE0OjM1OjM4IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChza2lwX3RvX2VuZF9vZl9jb21tZW50KTogQ2F0Y2ggdW50ZXJtaW5hdGVkIGNvbW1lbnRzLgorCitTYXQgSnVuIDE4IDE3OjQ5OjQxIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBmaXhwcm90bzogTW92ZSBoYWNraW5nIG9mIGFzc2VydC5oIGZyb20gaGVyZS4KKwkqIGZpeGluY2x1ZGVzOiBUbyBoZXJlLgorCitTYXQgSnVuIDE4IDE2OjQyOjMxIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBGb3IgZmllbGR0eXBlLCBkb24ndCBhY2Nlc3MKKwlUWVBFX01BSU5fVkFSSUFOVCBmaWVsZCBpZiB0aGUgdHlwZSBpcyBlcnJvcl9tYXJrX25vZGUuCisKKwkqIGp1bXAuYyAoZHVwbGljYXRlX2xvb3BfZXhpdF90ZXN0KTogSW5pdGlhbGl6ZSBjb3B5IHRvIHplcm8uCisJRW1pdCBqdW1wIHRvIGVuZCBsYWJsZSBpZiBjb3B5IGlzIHN0aWxsIHplcm8uCisKKwkqIG1pcHMubWQgKHRydW5jZGlzaTIpOiBDaGFuZ2UgZnJvbSBkZWZpbmVfaW5zbiB0byBkZWZpbmVfZXhwYW5kLgorCSh0cnVuY2RpaGkyLCB0cnVuY2RpcWkyLCBleHRlbmRzaWRpMik6IExpa2V3aXNlLgorCShleHRlbmRzaWRpMl9pbnRlcm5hbCk6IE5ldyBwYXR0ZXJuLgorCisJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBDb3B5IENBTExfSU5TTl9GVU5DVElPTl9VU0FHRSBmaWVsZC4KKworCSogc2Rib3V0LmMgKHNkYm91dF9vbmVfdHlwZSk6IFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIGlmCisJREVDTF9MQU5HX1NQRUNJRklDIGlzIHNldC4gIFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIG5vdAorCURFQ0xfTkFNRSBmb3IgY2hpbGRfdHlwZSB0aGF0IGlzIGEgdGVtcGxhdGUgdHlwZS4KKwkoc2Rib3V0X3N5bWJvbCk6IFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIGlmIERFQ0xfTEFOR19TUEVDSUZJQworCWlzIHNldC4KKworU2F0IEp1biAxOCAxNjozOTowMyAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3N5bWJvbCk6IFJlcGxhY2UgREVDTF9JR05PUkVEX1Agd2l0aAorCVRZUEVfREVDTF9TVVBQUkVTU19ERUJVRy4KKworU2F0IEp1biAxOCAxMDoyMTo0NCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogRG9uJ3QgdHJ5IGV4dHp2IGZvciBsc2hyLgorCisJKiB2YXgubWQgKGxzaHJzaTMpOiBOZXcgZGVmaW5lX2V4cGFuZC4KKworCSogb3B0YWJzLmM6IFBhc3MgTlVMTF9SVFggZm9yIFRBUkdFVCBpbiBjYWxscyB0byBleHBhbmRfe3VuLGJpbn1vcC4KKwkoZXhwYW5kX2Zsb2F0KTogVXNlIGV4cGFuZF9zaGlmdCBpbnN0ZWFkIG9mIGV4cGFuZF9iaW5vcC4KKworRnJpIEp1biAxNyAxNTowNTo1OCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBDb3JyZWN0IG1hdGguaCBvbiBMeW54IGhhbmRsaW5nIGFnYWluLgorCitGcmkgSnVuIDE3IDEwOjUyOjQxIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgIChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uLCBjYXNlIE1JTlVTKTogQ2hlY2sgbW9kZSBvZiBvcDAsCisJaW5zdGVhZCBvZiBvcDEsIGJlZm9yZSBjYWxsaW5nIHBsdXNfY29uc3RhbnQuCisKK0ZyaSBKdW4gMTcgMDE6NDI6MzcgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKERFQlVHR0VSX0FVVE9fT0ZGU0VUKTogRGVmaW5lLiAgSWYgbm8gZnJhbWUgcG9pbnRlcgorCWlzIGF2YWlsYWJsZSwgdGhlbiBhZGp1c3QgdGhlIG9mZnNldCBieSB0aGUgc2l6ZSBvZiB0aGUgY3VycmVudAorCWZyYW1lLgorCitUaHUgSnVuIDE2IDE2OjM1OjEyIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiB0cmVlLmggKERFQ0xfREVGRVJfT1VUUFVUKTogTmV3IG1hY3JvLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFVuc2V0IERFQ0xfREVGRVJfT1VUUFVUIG9uIGRlY2xzCisJY29uc2lkZXJlZCBhdCBlbmQgb2YgZmlsZS4KKwkqIGludGVncmF0ZS5jIChvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogVW5zZXQgREVDTF9ERUZFUl9PVVRQVVQgb24KKwlmbmRlY2wuCisJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEFsc28gcG9zdHBvbmUgY29tcGlsYXRpb24gb2YKKwlpbmxpbmVzIHdpdGggREVDTF9ERUZFUl9PVVRQVVQgc2V0LgorCShjb21waWxlX2ZpbGUpOiBBbHdheXMgZW1pdCBwb3N0cG9uZWQgaW5saW5lcyBpZgorCS1ma2VlcC1pbmxpbmUtZnVuY3Rpb25zLgorCitUaHUgSnVuIDE2IDExOjAwOjE0IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jbHVkZXM6IEZpeCBhcmd1bWVudCB0eXBlIGZvciBmZnMgaW4gPHN0cmluZy5oPiBvbiBBbHBoYQorCU9TRi8xIFYyLjAuCisKK1RodSBKdW4gMTYgMDY6NDk6MDMgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfcCwgY2FzZSBSRUxPQURfT1RIRVIpOiBBbGxvd2VkCisJdG8gY29uZmxpY3Qgd2l0aCBSRUxPQURfRk9SX09USEVSX0FERFJFU1MuCisKKwkqIGNzZS5jIChzZXRfbm9udmFyeWluZ19hZGRyZXNzX2NvbXBvbmVudHMpOiBSZXdvcmsgYW5kIGFsc28KKwloYW5kbGUgYW4gQU5EIHVzZWQgZm9yIG5vbi1hbGlnbmVkIGFjY2Vzc2VzLgorCitUaHUgSnVuIDE2IDA2OjM2OjQ5IDE5OTQgIENoaXAgU2FsemVuYmVyZyAgKGNoaXBAZmluLnV1Y3ApCisKKwkqIGkzODYuaCAoUkVHX0FMTE9DX09SREVSKTogUHJlZmVyIHJlZ2lzdGVycyBsaXN0ZWQgaW4KKwlDQUxMX1VTRURfUkVHSVNURVJTLgorCitXZWQgSnVuIDE1IDIwOjQ1OjE0IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiB0cmVlLmggKFRSRUVfTk9fVU5VU0VEX1dBUk5JTkcpOiBOb3RlIHRoYXQgdGhpcyBjYW4gYmUgYXBwbGllZAorCXRvIENPTVBPVU5EX0VYUFJzLCB0b28uCisKKwkqIHN0bXQuYyAod2Fybl9pZl91bnVzZWRfdmFsdWUpOiBIYW5kbGUgVFJFRV9OT19VTlVTRURfV0FSTklORyBmb3IKKwlDT01QT1VORF9FWFBScywgdG9vLgorCitXZWQgSnVuIDE1IDIwOjM1OjIxIDE5OTQgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAubWQgKGRpdnNpMyk6IEZpeCBkaXZpZGUgYnkgMl5OIHdpdGggY29tcGFyZSBSVEwuCisKKwkqIHJzNjAwMC5tZCAobWF4c2YzLCBtaW5zZjMsIG1heGRmMywgbWluZGYzKTogRml4IHByZWRpY2F0ZSBvZgorCWRlZmluZV9zcGxpdC4KKwkobXVsZGkzKTogRml4IHByZWRpY2F0ZS4KKwkobW92ZGYgbWF0Y2hlcik6IEFsbG93IHVwZGF0ZSBhbmQgaW5kZXhlZCBmb3IgbGZkIGluc3RydWN0aW9uLgorCitXZWQgSnVuIDE1IDE5OjI0OjIzIDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogRml4IGNhbGwgdG8gYnplcm8uCisKK1dlZCBKdW4gMTUgMTk6MjA6MzQgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgorCitXZWQgSnVuIDE1IDE1OjIwOjU0IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3JhbmdlX3R5cGUpOiAgSGFuZGxlIHRoZSBjYXNlIHRoYXQgYW4gYXJyYXkKKwlyYW5nZSBpcyBuZWl0aGVyIGFuIGludGVnZXIgbm9yIGEgc3ViLXJhbmdlLiAgKEluIFBhc2NhbCBvcgorCUNoaWxsIGl0IGNvdWxkIGJlIGEgQm9vbGVhbiwgY2hhcmFjdGVyLCBvciBlbnVtZXJhbCB0eXBlLikKKworV2VkIEp1biAxNSAwNDowMDo0MiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGdlbm11bHRpbGliOiBOZXcgc2hlbGwgc2NyaXB0IHRvIGdlbmVyYXRlIG11bHRpcGxlIGxpYnJhcnkKKwlpbmZvcm1hdGlvbi4KKwkqIE1ha2VmaWxlLmluIChtdWx0aWxpYi5oLCBzdG1wLW11bHRpbGliLCBpbnN0YWxsLW11bHRpbGliKTogTmV3CisJdGFyZ2V0cy4KKwkoZ2NjLm8pOiBEZXBlbmQgb24gbXVsdGlsaWIuaC4KKwkoY2xlYW4pOiBSZW1vdmUgbXVsdGlsaWIuaCBhbmQgdG1wbXVsdGlsaWIqLgorCSogZ2NjLmM6IEluY2x1ZGUgbXVsdGlsaWIuaC4KKwkocHJpbnRfbXVsdGlfbGliLCBwcmludF9tdWx0aV9kaXJlY3RvcnksIG11bHRpbGliX3NlbGVjdCwKKwltdWx0aWxpYl9kaXIpOiBOZXcgc3RhdGljIHZhcmlhYmxlcy4KKwkob3B0aW9uX21hcCk6IEFkZGVkIC0tcHJpbnQtbXVsdGktbGliIGFuZCAtLXByaW50LW11bHRpLWRpcmVjdG9yeS4KKwkoc2V0X3NwZWMpOiBHZXQgbXVsdGlsaWJfc2VsZWN0IGZyb20gc3BlY3MgZmlsZS4KKwkocHJvY2Vzc19jb21tYW5kKTogRHVtcCBtdWx0aWxpYl9zZWxlY3QgaW50byBzcGVjcyBmaWxlLiAgSGFuZGxlCisJLXByaW50LW11bHRpLWxpYiBhbmQgLXByaW50LW11bHRpLWRpcmVjdG9yeS4KKwkoZG9fc3BlY18xKTogVHJ5IG11bHRpbGliX2RpciBmb3IgJUQgY2FzZS4KKwkoZmluZF9maWxlKTogVHJ5IG11bHRpbGliX2Rpci4KKwkobWFpbik6IENhbGwgc2V0X211bHRpbGliX2Rpci4gIEhhbmRsZSBwcmludF9tdWx0aV9saWIgYW5kCisJcHJpbnRfbXVsdGlfZGlyZWN0b3J5LgorCSh1c2VkX2FyZywgc2V0X211bHRpbGliX2RpciwgcHJpbnRfbXVsdGlsaWJfaW5mbyk6IE5ldyBmdW5jdGlvbnMuCisJKiBjb25maWd1cmUgKHNwYXJjLSotc3Vub3M0Kik6IFVzZSB0YXJnZXQgZnJhZ21lbnQgc3BhcmMvdC1zdW5vczQuCisJKiBzcGFyYy90LXN1bm9zNDogTmV3IGZpbGUuCisKK1dlZCBKdW4gMTUgMDM6NTQ6MzIgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJQWRkIHN1cHBvcnQgZm9yIHRoZSBTUEFSQyBWOSBjcHUuCisJKiBjb25maWd1cmUgKHNwYXJjNjQtKi1hb3V0KTogTmV3IHRhcmdldC4KKwkoc3BhcmM2NC0qLWVsZik6IE5ldyB0YXJnZXQuCisJKiBjb25maWcuc3ViIChzcGFyYzY0KTogTmV3IGNwdS4KKwkoYW91dCwgZWxmKTogTmV3IG9zJ3MuCisJKiBnZW5jb25maWcuYyAobWFpbik6IEFsbG93IHRhcmdldHMgdG8gb3ZlcnJpZGUgSEFWRV9jb25kaXRpb25hbF9tb3ZlLgorCSoganVtcC5jIChqdW1wX29wdGltaXplKTogVXNlIGl0IGF0IHJ1bi10aW1lLgorCSogc3BhcmMvdC1zcDY0OiBOZXcgZmlsZS4KKwkqIHNwYXJjL3NwNjQtYW91dC5oOiBOZXcgZmlsZS4KKwkqIHNwYXJjL3NwNjQtZWxmLmg6IE5ldyBmaWxlLgorCSogc3BhcmMvc3lzdjQuaCAoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogSGFuZGxlIDY0IGJpdCBwb2ludGVycy4KKwkqIHNwYXJjL3NwYXJjLmggKGNwdV90eXBlKTogTmV3IGVudW0uCisJKENQUF9QUkVERUZJTkVTLENQUF9TUEVDKTogQWRkIHY5IHN1cHBvcnQuCisJKE5PX0JVSUxUSU5fUFRSRElGRl9UWVBFLCBOT19CVUlMVElOX1NJWkVfVFlQRSwgTUFYX1dDSEFSX1RZUEVfU0laRSwKKwlTSE9SVF9UWVBFX1NJWkUsIElOVF9UWVBFX1NJWkUsIExPTkdfVFlQRV9TSVpFLCBMT05HX0xPTkdfVFlQRV9TSVpFLAorCUZMT0FUX1RZUEVfU0laRSwgRE9VQkxFX1RZUEVfU0laRSwgTUFYX0lOVF9UWVBFX1NJWkUsCisJTUFYX0xPTkdfVFlQRV9TSVpFKTogRGVmaW5lLgorCShQVFJESUZGX1RZUEUsIFNJWkVfVFlQRSwgQklUU19QRVJfV09SRCwgTUFYX0JJVFNfUEVSX1dPUkQsCisJVU5JVFNfUEVSX1dPUkQsIE1BWF9VTklUU19QRVJfV09SRCwgTE9OR19ET1VCTEVfVFlQRV9TSVpFLAorCVBPSU5URVJfU0laRSwgUEFSTV9CT1VOREFSWSwgU1RBQ0tfQk9VTkRBUlksIFNQQVJDX1NUQUNLX0FMSUdOLAorCUVNUFRZX0ZJRUxEX0JPVU5EQVJZLCBCSUdHRVNUX0FMSUdOTUVOVCwgRklSU1RfUFNFVURPX1JFR0lTVEVSLAorCUZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUywgQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOgorCUFkZCB2OSBzdXBwb3J0LgorCShzcGFyY19vdmVycmlkZV9vcHRpb25zLCBzcGFyY19jb2RlX21vZGVsKTogRGVjbGFyZS4KKwkoT1ZFUlJJREVfT1BUSU9OUyk6IENhbGwgaXQuCisJKE1BU0tfKik6IERlZmluZSBiaXRzIHNldCBieSB0YXJnZXQgZmxhZ3MuCisJKFRBUkdFVF8qKTogVXNlIHRoZW0uCisJKHtNQVNLLFRBUkdFVH1fe1Y5LElOVDY0LExPTkc2NCxQVFI2NCxFTlYzMixTVEFDS19CSUFTLAorCU1FRExPVyxNRURBTlksRlVMTEFOWX0pOiBEZWZpbmUuCisJKE1FREFOWV9CQVNFX1JFRyk6IERlZmluZS4KKwkoVjlfU1dJVENIRVMsIFRBUkdFVF9PUFRJT05TKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMsIFRBUkdFVF9ERUZBVUxUKTogVXNlIE1BU0tfKi4KKwkoU1BBUkNfU1RBQ0tfQklBUywgU0VDT05EQVJZX01FTU9SWV9ORUVERURfTU9ERSk6IERlZmluZS4KKwkoU0VDT05EQVJZX01FTU9SWV9ORUVERUQpOiBTaW1wbGlmeS4KKwkoaGFyZF9yZWdub19tb2RlX2NsYXNzLCBzcGFyY19tb2RlX2NsYXNzLCBzcGFyY19jcHVfdHlwZSk6IERlY2xhcmUuCisJKFJFR19QQVJNX1NUQUNLX1NQQUNFKTogRG8gbm90IGRlZmluZSBpZiB2OS4KKwkoSEFSRF9SRUdOT19OUkVHUywgSEFSRF9SRUdOT19NT0RFX09LLCBNT0RFU19USUVBQkxFX1AsCisJUkVUVVJOX0lOX01FTU9SWSwgU1RSVUNUX1ZBTFVFLCBTVFJVQ1RfVkFMVUVfSU5DT01JTkcsIHJlZ19jbGFzcywKKwlSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUywgUkVHTk9fUkVHX0NMQVNTLCBSRUdfQUxMT0NfT1JERVIsCisJUkVHX0xFQUZfQUxMT0NfT1JERVIsIExFQUZfUkVHSVNURVJTLCBSRUdfQ0xBU1NfRlJPTV9MRVRURVIsCisJQ0xBU1NfTUFYX05SRUdTLCBTVEFSVElOR19GUkFNRV9PRkZTRVQsIEZJUlNUX1BBUk1fT0ZGU0VULAorCUJBU0VfUkVUVVJOX1ZBTFVFX1JFRywgQkFTRV9PVVRHT0lOR19WQUxVRV9SRUcsIEJBU0VfUEFTU0lOR19BUkdfUkVHLAorCUJBU0VfSU5DT01JTkdfQVJHX1JFRywgRlVOQ1RJT05fQVJHX1JFR05PX1ApOiBBZGQgdjkgc3VwcG9ydC4KKwkoc3BhcmNfYXJnX2NsYXNzKTogTmV3IGVudW0gKHY5IG9ubHkpLgorCShzcGFyY19hcmdzKTogTmV3IHN0cnVjdCB0byByZWNvcmQgdjkgYXJndW1lbnRzLgorCShDVU1VTEFUSVZFX0FSR1MpOiBVc2UgaXQgKHY5IG9ubHkpLgorCShHRVRfU1BBUkNfQVJHX0NMQVNTKTogRGVmaW5lLgorCShzcGFyY19hcmdfY291bnQsIHNwYXJjX25fbmFtZWRfYXJncyk6IERlY2xhcmUuCisJKFBBU1NfSU5fUkVHX1ApOiBEZWZpbmUuCisJKFJPVU5EX1JFRywgUk9VTkRfQURWQU5DRSwgSU5JVF9DVU1VTEFUSVZFX0FSR1MsIEZVTkNUSU9OX0FSR19BRFZBTkNFLAorCUZVTkNUSU9OX0FSRywgRlVOQ1RJT05fSU5DT01JTkdfQVJHLCBGVU5DVElPTl9BUkdfUEFSVElBTF9OUkVHUywKKwlGVU5DVElPTl9BUkdfUEFTU19CWV9SRUZFUkVOQ0UsIEZVTkNUSU9OX0FSR19DQUxMRUVfQ09QSUVTKToKKwlBZGQgdjkgc3VwcG9ydC4KKwkoc3BhcmM2NF9pbml0X2V4cGFuZGVycywgc3BhcmM2NF9mcGNvbnZfc3RhY2tfdGVtcCk6IERlY2xhcmUuCisJKElOSVRfRVhQQU5ERVJTKTogRGVmaW5lICh2OSBvbmx5KS4KKwkoZ2VuX3Y5X3NjYywgb3V0cHV0X3Y5YnJhbmNoKTogRGVjbGFyZS4KKwkoSEFWRV9jb25kaXRpb25hbF9tb3ZlKTogRGVmaW5lLgorCShGVU5DVElPTl9QUk9GSUxFUiwgRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIsIEJMT0NLX1BST0ZJTEVSLAorCURZTkFNSUNfQ0hBSU5fQUREUkVTUywgUkVUVVJOX0FERFJfUlRYLCBSRUdOT19PS19GT1JfRlBfUCwKKwlSRUdfT0tfRk9SX0lOREVYX1AsIFJFR19PS19GT1JfQkFTRV9QLCBFWFRSQV9DT05TVFJBSU5ULAorCUNBU0VfVkVDVE9SX01PREUsIFBtb2RlLCBFWFRSQV9DQ19NT0RFUywgRVhUUkFfQ0NfTkFNRVMsCisJU0VMRUNUX0NDX01PREUsIFJFR0lTVEVSX05BTUVTKTogQWRkIHY5IHN1cHBvcnQuCisJKFJFR05PX09LX0ZPUl9DQ0ZQX1ApOiBEZWZpbmUuCisJKHNwYXJjX2luaXRpYWxpemVfdHJhbXBvbGluZSwgc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBEZWNsYXJlLgorCShJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBDYWxsIHRoZW0uCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBNYXJrIGZ1bmN0aW9ucyBpbiB2OS4KKwkoUlRYX0NPU1RTKTogQXNzdW1lIE1VTFQgY29zdHMgdGhlIHNhbWUgZm9yIHY5IGFzIHY4LgorCShBU01fTE9OR0xPTkcsIEFTTV9GTE9BVCk6IERlZmluZS4KKwkoQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQsIEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IEFkZCB2OSBzdXBwb3J0LgorCSogc3BhcmMvc3BhcmMuYyAoU0tJUF9DQUxMRVJTX1VOSU1QX1ApOiBEZWZpbmUuCisJKHNwYXJjX2NwdV90eXBlLCBzcGFyY19hcmdfY291bnQsIHNwYXJjX25fbmFtZWRfYXJncywKKwlmcmFtZV9iYXNlX29mZnNldCwgZnBjb252X3N0YWNrX3RlbXApOiBOZXcgZ2xvYmFscy4KKwkobGVhZl9yZWdfcmVtYXApOiBBZGQgYWRkaXRpb25hbCByZWdpc3RlcnMgZm9yIHY5LgorCShzcGFyY19vdmVycmlkZV9vcHRpb25zLCBzcGFyYzY0X2luaXRfZXhwYW5kZXJzLAorCXNwYXJjNjRfZnBjb252X3N0YWNrX3RlbXAsIGludHJlZ19vcGVyYW5kLCBjY2ZwX3JlZ19vcGVyYW5kLAorCWRhdGFfc2VnbWVudF9vcGVyYW5kLCB0ZXh0X3NlZ21lbnRfb3BlcmFuZCwgdjlfcmVnY21wX29wLAorCWFyaXRoMTFfb3BlcmFuZCwgYXJpdGgxMF9vcGVyYW5kLCBhcml0aDExX2RvdWJsZV9vcGVyYW5kLAorCWFyaXRoMTBfZG91YmxlX29wZXJhbmQsIGdlbl92OV9zY2MsIGVtaXRfdjlfYnJ4eF9pbnNuLAorCXNwYXJjX2luaXRfbW9kZXMsIGJ1aWxkX2JpZ19udW1iZXIsIG91dHB1dF92OWJyYW5jaCwKKwlzcGFyY19pbml0aWFsaXplX3RyYW1wb2xpbmUsIHNwYXJjNjRfaW5pdGlhbGl6ZV90cmFtcG9saW5lKToKKwlOZXcgZnVuY3Rpb25zLgorCShhcml0aF9kb3VibGVfb3BlcmFuZCwgZ2VuX2NvbXBhcmVfcmVnLCBmaW5hbGl6ZV9waWMsCisJZW1pdF9tb3ZlX3NlcXVlbmNlLCBtZW1fYWxpZ25lZF84LCBvdXRwdXRfbW92ZV9kb3VibGUsCisJb3V0cHV0X21vdmVfcXVhZCwgb3V0cHV0X2ZwX21vdmVfZG91YmxlLCBvdXRwdXRfZnBfbW92ZV9xdWFkLAorCW91dHB1dF9ibG9ja19tb3ZlLCBzYXZlX3JlZ3MsIHJlc3RvcmVfcmVncyk6IEFkZCB2OSBzdXBwb3J0LgorCShzcGFyY19tb2RlX2NsYXNzKTogTmV3IGVudW0uCisJKCpfTU9ERVMpOiBSZWRlZmluZSB0byB1c2UgaXQuCisJKGhhcmRfMzJiaXRfbW9kZV9jbGFzc2VzKTogUmVuYW1lZCBmcm9tIGhhcmRfcmVnbm9fbW9kZV9vay4KKwkoaGFyZF9yZWdub19tb2RlX2NsYXNzZXMsIGhhcmRfNjRiaXRfbW9kZV9jbGFzc2VzLCAKKwlzcGFyY19tb2RlX2NsYXNzKTogTmV3IGdsb2JhbHMuCisJKG51bV9nZnJlZ3MpOiBSZW5hbWVkIGZyb20gbnVtX2ZyZWdzLgorCShjb21wdXRlX2ZyYW1lX3NpemUpOiBBZGQgdjkgc3VwcG9ydC4gIFNpbXBsaWZ5IGNhbGN1bGF0aW9ucy4KKwkob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogQ2FsbCBidWlsZF9iaWdfbnVtYmVyIHRvIGNvbXB1dGUgc3RhY2sKKwlzaXplIGluICVnMSwgdGhlbiBhZGp1c3QgJXNwLgorCUZpeCBzYXZpbmcgb2YgY2FsbCBzYXZlZCByZWdpc3RlcnMuICBIYW5kbGUgbmV3IHY5IHJlZ2lzdGVycy4KKwkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogRml4IHJlc3RvcmF0aW9uIG9mIGNhbGwgc2F2ZWQgcmVnaXN0ZXJzLgorCUhhbmRsZSBuZXcgdjkgcmVnaXN0ZXJzLgorCVVzZSBTS0lQX0NBTExFUlNfVU5JTVBfUCB0byBzZWUgaWYgdW5pbXAgaW5zbiBpcyBhdCByZXR1cm4gYWRkcmVzcy4KKwkoc3BhcmNfYnVpbHRpbl9zYXZlcmVncyk6IERlZmluZSB2OSB2ZXJzaW9uLgorCShvdXRwdXRfY2JyYW5jaCk6IE5ldyBhcmd1bWVudCBmcF9jb25kX3JlZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJQWRkIHY5IHN1cHBvcnQuCisJKG91dHB1dF9yZXR1cm4pOiBVc2UgU0tJUF9DQUxMRVJTX1VOSU1QX1AuCisJKHByaW50X29wZXJhbmQpOiBOZXcgY29kZXMgJ18nLCAnQCcsICdDJywgJ0QnLgorCShvdXRwdXRfZG91YmxlX2ludCk6IEhhbmRsZSBMQUJFTF9SRUYgYW5kIE1JTlVTIGZvciB2OS4KKwlVc2UgQVNNX0xPTkdMT05HIGlmIGFzc2VtYmxlciBjYW4gaGFuZGxlIGl0LgorCSogc3BhcmMvc3BhcmMubWQgKGNwdSk6IE5ldyBhdHRyaWJ1dGUuCisJKHR5cGUgYXR0cmlidXRlKTogTmV3IHZhbHVlIGNtb3ZlIChjb25kaXRpb25hbCBtb3ZlcykuCisJKGNtcGRpKTogTmV3IHBhdHRlcm4gZm9yIHY5LgorCShzZXEqLCBzbmUqKTogQWRkIHY5IHN1cHBvcnQuCisJKHNndCxzbHQsc2dlLHNsZSk6IEV4cGxpY2l0bHkgcmVzdHJpY3Qgb3BlcmFuZCAwIHRvIHRoZSBpbnRlZ2VyCisJcmVnaXN0ZXJzLiAgVHJ5IGVtaXR0aW5nIGEgY29uZGl0aW9uYWwgbW92ZSBmb3IgdjkuCisJKHNndHUsc2x0dSxzZ2V1LHNsZXUpOiBMaWtld2lzZS4KKwkoY29tcGFyaXNvbiBpbnNucyk6IEFkZCB2OSB2ZXJzaW9ucy4KKwkoc2NjIGluc25zKTogQWRkIERJbW9kZSB2ZXJzaW9ucyBmb3IgdjkuCisJKGJlcSwgYm5lLCBiZ3QsIGJsdCwgYmdlLCBibGUpOiBJZiBjb21wYXJpbmcgREltb2RlIHdpdGggMCBvbiB2OSwKKwl1c2UgYnJ4eCBpbnNucy4gIFVzZSBlbWl0X2p1bXBfaW5zbiwgbm90IGVtaXRfaW5zbiwgYXMgdGhlIGxhdHRlcgorCW1pc2hhbmRsZXMgYnJ4eCBpbnNucy4KKwkoYnJhbmNoIGluc25zKTogVXBkYXRlIGNhbGxzIHRvIG91dHB1dF9jYnJhbmNoLgorCUFkZCB2OSB2ZXJzaW9ucyB0byBzdXBwb3J0IG11bHRpcGxlIGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbiBjb2RlIHJlZ3MuCisJQWRkIHY5IHZlcnNpb25zIHRvIHN1cHBvcnQgYnJ4eCBpbnNucy4KKwkobG9fc3VtLCBoaWdoLCBwaWMpOiBBZGQgdjkgc3VwcG9ydC4KKwkoc3ltYm9saWMgbW92ZSBwYXR0ZXJucyk6IERpc2FibGUgZm9yIHY5LgorCShESW1vZGUsIERGbW9kZSwgVEZtb2RlIG1vdmVzKTogQWRkIHY5IHN1cHBvcnQuCisJKGNvbmRpdGlvbmFsIG1vdmUgaW5zbnMpOiBEZWZpbmUgZm9yIHY5LgorCSh6ZXJvX2V4dGVuZHFpZGkyLCBleHRlbmRxaWRpMiwgemVyb19leHRlbmRoaWRpMiwgZXh0ZW5kaGlkaTIsCisJemVyb19leHRlbmRzaWRpMiwgZXh0ZW5kc2lkaTIsIGZsb2F0ZGlzZjIsIGZsb2F0ZGlkZjIsIGZsb2F0ZGl0ZjIsCisJZml4X3RydW5jc2ZkaTIsIGZpeF90cnVuY2RmZGkyLCBmaXhfdHJ1bmN0ZmRpMiwgbXVsZGkzLCBkaXZkaTMsCisJdWRpdmRpMywgYXNobGRpMywgYXNocmRpMywgbHNocmRpMywgZmZzZGkyKTogTmV3IHBhdHRlcm5zIGZvciB2OS4KKwkoYml0ZmllbGQgY29tcGFyZSBpbnNuKTogQWRkIERJbW9kZSB2ZXJzaW9uIGZvciB2OS4KKwkoYWRkZGkzLCBzdWJkaTMsIG5lZ2RpMiwgYW5kZGkzLCBpb3JkaTMsIHhvcmRpMywgb25lX2NtcGxkaTIsCisJbWl4ZWQgbW9kZSBmcCBtdWx0IGluc25zLCBuZWdkZjIsIG5lZ3RmMiwgYWJzZGYyLCBhYnN0ZjIsIHRhYmxlanVtcCwKKwljYWxsLCBjYWxsX3ZhbHVlLCB1bnR5cGVkX2NhbGwsIHVudHlwZWRfcmV0dXJuLCBpbmRpcmVjdF9qdW1wLAorCWZsdXNoX3JlZ2lzdGVyX3dpbmRvd3MsIGZsdXNoKTogQWRkIHY5IHN1cHBvcnQuCisJKGxkZCBwZWVwIGhvbGVzKTogRGlzYWJsZSBmb3IgdjkuCisJKHNldC9jb21wYXJlIHBlZXAgaG9sZSk6IERlZmluZSBESW1vZGUgdmVyc2lvbiBmb3IgdjkuCisJKHNpZ24gZXh0ZW5kL2NvbXBhcmUgcGVlcCBob2xlKTogTGlrZXdpc2UuCisJKHJldHVybiBwZWVwIGhvbGVzKTogQWRkIHY5IHN1cHBvcnQuCisJKGNhbGwvanVtcCBwZWVwIGhvbGVzKTogQWRkIHY5IHN1cHBvcnQuCisJKiBnaW5jbHVkZS92YS1zcGFyYy5oOiBBZGQgdjkgc3VwcG9ydC4KKworVHVlIEp1biAxNCAyMjo0NDo1MiAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogY29uZmlnL2kzODYvaTM4Ni5oIChyZWdfY2xhc3MpOiBBZGQgQURfUkVHUyB0aGF0IG1hdGNoICVlYXggYW5kCisJJWVkeCB0byBhbGxvdyAlZWF4OiVlZHggdG8gYmUgc3BlY2lmaWVkIGFzIG9uZSBESSByZWdpc3Rlci4KKwkoUkVHX0NMQVNTX05BTUVTKTogRGl0dG8uCisJKFJFR19DTEFTU19DT05URU5UUyk6IERpdHRvLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIpOiAnQScgc3BlY2lmaWVzIEFEX1JFR1MuCisKKwkqIGNvbmZpZy9pMzg2L2kzODYubWQgKHVtdWxxaWhpMyk6IE5hbWUgdGhlIGluc24gd2l0aCB0aGUgc3RhbmRhcmQKKwluYW1lLgorCShtdWxxaWhpMywgdW11bHNpZGkzLCBtdWxzaWRpMyk6IEFkZCBuZXcgd2lkZW5pbmcgbXVsdGlwbHkKKwlwYXR0ZXJucy4KKworVHVlIEp1biAxNCAyMjoyNToxNiAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChlbmNvZGUsIGRlY29kZSk6IFVzZSA0IEhPU1RfV0lERV9JTlRzIGZvciBlbmNvZGVkCisJdmFsdWUgd2l0aCBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULzIgYml0cyBpbiBlYWNoLgorCShMT1dQQVJULCBISUdIUEFSVCk6IE5ldyBtYWNyb3MuCisJKEJBU0UpOiBNb3ZlIGRlZmluaXRpb24gb3V0c2lkZSBvZiBkaXZfYW5kX3JvdW5kX2RvdWJsZS4KKwkoYWRkX2RvdWJsZSwgbXVsX2RvdWJsZSwgbHNoaWZ0X2RvdWJsZSwgcnNoaWZ0X2RvdWJsZSk6IFJld3JpdGUuCisJKGxyb3RhdGVfZG91YmxlKTogVXNlIExPV1BBUlQsIEhJR0hQQVJULCBhbmQgQkFTRS4KKwkocnJvdGF0ZV9kb3VibGUpOiBMaWtld2lzZS4KKwkoZGl2X2FuZF9yb3VuZF9kb3VibGUpOiBNYWpvciBjaGFuZ2VzIHRvIGNvZGUgZm9yIGdlbmVyYWwgY2FzZS4KKwlOb3cgaXQgYWN0dWFsbHkgcHJvZHVjZXMgbm9uLWdhcmJhZ2UgcmVzdWx0cyBmb3IgbGFyZ2Ugb3BlcmFuZHMuCisJKGRpdl9hbmRfcm91bmRfZG91YmxlKTogU2ltcGxpZnkgY29uZGl0aW9uIGZvciBzcGVjaWFsIGNvZGUgdXNlZCB3aGVuCisJZGl2aXNvciA8IEJBU0UuCisJKGNvbnN0X2Jpbm9wKTogRGVsZXRlIHNwZWNpYWwgY2FzZXMgZm9yIG11bHRpcGx5aW5nIGJ5IDAsIDEsIDIsIDQsIDguCisJKGZvbGQsIGNhc2UgKl9ESVZfRVhQUik6IERvbid0IHRyeSB0byBvcHRpbWl6ZSBmb3Igb3ZlcmZsb3cuCisJKiBtYWNobW9kZS5oIChNQVhfU0hPUlRTKTogRGVsZXRlZC4KKworCSogbTY4ay5tZDogVHJpdmlhbCBzaW1wbGlmaWNhdGlvbiBvZiBtYW55IHBhdHRlcm5zLgorCShzdWJzaTMpOiBEb24ndCBoYW5kbGUgQ09OU1RfSU5UIGZvciBvcGVyYW5kIDIuCisJKGFzaGlmdHJ0LCBvcDIgPiA4KTogTmV3IHBhdHRlcm4uCisJKGxzaGlmdHJ0LCBvcDIgPiA4KTogTmV3IHBhdHRlcm4uCisKKwkqIGEyOWsubWQgKGxvZ2ljYWwgcGF0dGVybnMpOiBUdW5lIHRvIGdpdmUgYmV0dGVyIGNvZGUgZm9yIGltbWVkaWF0ZQorCXZhbHVlcy4KKwkqIGEyOWsuYyAoY21wbHNyY2Jfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuCisJKiBhMjlrLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBjbXBsc3JjYl9vcGVyYW5kLgorCitUdWUgSnVuIDE0IDE3OjUyOjEwIDE5OTQgIFRvciBFZ2dlICAodGVnZ2VAZmxpcHBlci5wdnYudW5pdC5ubykKKworCSogbTg4ay9zeXN2My5oIChET19HTE9CQUxfQ1RPUlNfQk9EWSk6IENhbGwgX19idWlsdGluX2FsbG9jYSAKKwl3aXRoIGEgbm9uLXplcm8gYXJndW1lbnQsIGZvcmNpbmcgYSBmcmFtZSBwb2ludGVyIHRvIGJlIG5lZWRlZC4KKworVHVlIEp1biAxNCAxNzozNzo0MSAxOTk0ICBNaWtlIENvbGxpc29uICAoY29sbGlzb25Ac3cuc3RyYXR1cy5jb20pCisKKwkqIHJlbG9hZC5oIChSRUxPQURfRk9SX09QQUREUl9BRERSKTogTmV3IHJlbG9hZCBjbGFzcy4KKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBDaGFuZ2Ugc2Vjb25kYXJ5IHJlbG9hZHMgb2YgY2xhc3MKKwlSRUxPQURfRk9SX09QRVJBTkRfQUREUkVTUyB0byBSRUxPQURfRk9SX09QQUREUl9BRERSLgorCSogcmVsb2FkMS5jIChyZWxvYWQpOiBQcm9jZXNzIGFuZCBhY2N1bXVsYXRlIG5lZWRzIGZvcgorCVJFTE9BRF9GT1JfT1BBRERSX0FERFIgcmVsb2Fkcy4KKwlXaGVuIGRldGVybWluaW5nIGlmIG5lZWRzIGFyZSBub25ncm91cCBuZWVkcywgaWdub3JlCisJaW5hY3RpdmUgb3Igb3B0aW9uYWwgcmVsb2Fkcy4KKwkocmVsb2FkX3JlZ191c2VkX2luX29wX2FkZHJfcmVsb2FkKTogTmV3IHZhcmlhYmxlIHRvIGluZGljYXRlCisJd2hlbiByZWxvYWRzIG9mIGNsYXNzIFJFTE9BRF9GT1JfT1BBRERSX0FERFIgYXJlIGluIHVzZS4KKwkobWFya19yZWxvYWRfcmVnX2luX3VzZSwgY2xlYXJfcmVsb2FkX3JlZ19pbl91c2UpOgorCVByb2Nlc3MgcmVsb2FkcyBvZiBjbGFzcyBSRUxPQURfRk9SX09QQUREUl9BRERSLgorCShyZWxvYWRfcmVnX2ZyZWVfcCwgcmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wLCByZWxvYWRzX2NvbmZsaWN0KToKKwlMaWtld2lzZS4KKwkoY2hvb3NlX3JlbG9hZF9yZWdzKTogU3VwcG9ydCBSRUxPQURfRk9SX09QQUREUl9BRERSIHJlbG9hZHMuCisJKGVtaXRfcmVsb2FkX2luc25zKTogT3V0cHV0IFJFTE9BRF9GT1JfT1BBRERSX0FERFIgcmVsb2Fkcy4KKworVHVlIEp1biAxNCAxNzoyOTo1MyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjY2NwLmMsIHRvcGxldi5jLCB0cmVlLmMsIHByaW50LXRyZWUuYywgZm9sZC1jb25zdC5jOgorCUNhc3QgcG9pbnRlciBvcGVyYW5kcyB0byBiemVybywgYmNvcHksIGFuZCBiY21wIHRvIChjaGFyICopLgorCSogZnVuY3Rpb24uYywgc3RtdC5jLCBleHBtZWQuYywgdmFyYXNtLmMsIGVtaXQtcnRsLmM6IExpa2V3aXNlLgorCSogZGJ4b3V0LmMsIGludGVncmF0ZS5jLCBqdW1wLmMsIHJlYWwuaCwgY2FsbHMuYywgY3NlLmM6IExpa2V3aXNlLgorCSogbG9vcC5jLCB1bnJvbGwuYywgZmxvdy5jLCBzdHVwaWQuYywgY29tYmluZS5jLCByZWdjbGFzcy5jOiBMaWtld2lzZS4KKwkqIGxvY2FsLWFsbG9jLmMsIGdsb2JhbC5jLCByZWxvYWQuYywgcmVsb2FkMS5jLCBzY2hlZC5jOiBMaWtld2lzZS4KKwkqIGdlbmF0dHJ0YWIuYywgYmMtZW1pdC5jLCBnY2MuYywgY29sbGVjdDIuYzogTGlrZXdpc2UuCisKKwkqIGMtZGVjbC5jIChtaW5fcHJlY2lzaW9uKTogTmV3IGZ1bmN0aW9uLgorCShmaW5pc2hfZW51bSk6IFJld3JpdGUgY29kZSB0byBkZXRlcm1pbmUgcHJlY2lzaW9uIHJlcXVpcmVkCisJZm9yIGVudW1lcmFsIHR5cGUuCisKKwkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBDb3JyZWN0bHkgYW5kIGNvbnNpc3RlbnRseQorCWhhbmRsZSBDT05TVF9JTlQgY2FzZXMgZm9yIEZMT0FUIGFuZCBVTlNJR05FRF9GTE9BVC4KKworCSogeG0tYWxwaGEuaCAoc2Jyayk6IERvbid0IGRlY2xhcmUgaGVyZS4KKworCSogYWxwaGEuaCAoQ09OU1RfQ09TVFMsIGNhc2UgQ09OU1RfSU5UKTogRml4IHR5cG8uCisKKwkqIHRyZWUuYyAoc3RhdGljcCwgY2FzZSBGVU5DVElPTl9ERUNMKTogQSBuZXN0ZWQgZnVuY3Rpb24gaXNuJ3Qgc3RhdGljLgorCisJKiBpMzg2L2xpbnV4LmggKFNUQVJURklMRV9TUEVDKTogRG9uJ3QgZm9yY2UgLXN0YXRpYyBmb3IgLWcuCisKKwkqIGdjYy5jIChmaW5kX2FfZmlsZSk6IFRyeSBFWEVDVVRBQkxFX1NVRkZJWCBmaXJzdCwgdGhlbiBmaWxlCisJd2l0aG91dCB0aGUgc3VmZml4LgorCisJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBEb24ndCBkZWxldGUgZGVhZCBpbnNuIGlmIGl0IGhhcyBhCisJUkVHX1JFVFZBTCBub3RlLgorCisJKiBmaXgtaGVhZGVyLmMgKHhzdHJkdXApOiBSZW5hbWVkIGZyb20gc3RyZHVwLgorCShjaGVja19wcm90ZWN0aW9uKTogQ2FsbCB4c3RyZHVwLCBub3Qgc3RyZHVwLgorCitUdWUgSnVuIDE0IDE3OjI2OjA4IDE5OTQgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogUmVtb3ZlIC1tcG93ZXJwYzY0IGFuZCAtbW5vLXBvd2VycGM2NC4KKwkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IFJlbW92ZSBNUEM2MjAgY3B1IHZhcmlhbnRzLgorCisJKiByczYwMDAuYyAob3V0cHV0X3Byb2xvZyk6IEZpeCBlcnJvciBpbiBsb2FkaW5nIHNpemUgb2YgbGFyZ2UKKwlzdGFjayBmcmFtZXMuCisKK1R1ZSBKdW4gMTQgMTc6MjQ6MDkgMTk5NCAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKKworCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogQ2xlYXIgc3BpbGxfcmVnX3N0b3JlIGF0IHN0YXJ0LgorCShlbWl0X3JlbG9hZF9pbnNucyk6IE9taXQgZXJyb25lb3VzIHByZWRpY2F0ZSBvZiByZWxvYWQKKwlkZWxldGlvbiAtLSByZWxvYWRfc3BpbGxfaW5kZXggaXMgbm90IGluZGV4ZWQgYnkgcmVnbm8uCisKK1R1ZSBKdW4gMTQgMTU6NTk6NTUgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogV3JhcCBhc3NlcnQuaCBpbiBleHRlcm4gIkMiIHsgfSB0byBhdm9pZCBwcm9ibGVtIG9uCisJSFAvVVgsIHdoaWNoIHVzZXMgTk9fSU1QTElDSVRfRVhURVJOX0MuICBBbHNvIGZpeCAxMiBNYXkgOTQKKwljaGFuZ2UuCisKK1R1ZSBKdW4gMTQgMTU6MTI6NTAgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGp1bXAuYyAoY29uZGp1bXBfaW5fcGFyYWxsZWxfcCk6IE5ldyBmdW5jdGlvbiB0byBkZXRlY3QKKwljb25kaXRpb25hbCBqdW1wcyB3aXRoaW4gUEFSQUxMRUwgaW5zbnMuCisJKGp1bXBfb3B0aW1pemUpOiBBbGxvdyBmb3Igc29tZSBzaW1wbGUgb3B0aW1pemF0aW9ucyBpbnZvbHZpbmcKKwljb25kaXRpb25hbCBqdW1wcyB3aXRoaW4gUEFSQUxMRUwgaW5zbnMuCisJKiByZW9yZy5jIChnZXRfanVtcF9mbGFncyk6IEhhbmRsZSBjb25kaXRpb25hbCBqdW1wcyBpbiBQQVJBTExFTAorCWluc25zLgorCShnZXRfYnJhbmNoX2NvbmRpdGlvbiwgZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBMaWtld2lzZS4KKwkoZmlsbF9lYWdlcl9kZWxheV9zbG90cywgcmVsYXhfZGVsYXlfc2xvdHMsIGRicl9zY2hlZHVsZSk6IExpa2V3aXNlLgorCisJKiBwYS1vc2YuaCAoU0laRV9UWVBFKTogRGVmaW5lIGFzICJsb25nIHVuc2lnbmVkIGludCIgdG8gYmUKKwljb21wYXRhYmxlIHdpdGggc3lzdGVtIGluY2x1ZGUgZmlsZXMuCisJKiBwYTEtb3NmLmggKFNJWkVfVFlQRSk6IExpa2V3aXNlLgorCisJKiBwYTEtb3NmLmggKFdDSEFSX1RZUEUpOiBEZWZpbmUgYXMgInNob3J0IHVuc2lnbmVkIGludCIuCisJKFdDSEFSX1RZUEVfU0laRSk6IERlZmluZSBhcyAxNiBiaXRzLgorCisJKiBwYS5jIChvdXRwdXRfYXJnX2Rlc2NyaXB0b3IpOiBSZXN0b3JlIG9sZCBiZWhhdmlvciBmb3IgU0ltb2RlCisJVVNFIGluc25zIG9mIEZQIHJlZ2lzdGVycyAodXNlZCBieSB1bnR5cGVkIGNhbGwgc3VwcG9ydCkuCisKK01vbiBKdW4gIDYgMDk6MTU6NDMgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBhcm0uYyAoYXJtX3JlbG9hZF9vdXRfaGkpOiBSZXdyaXRlLiAgQWRkIHN1cHBvcnQgZm9yIHByb2Nlc3NvcnMKKwlydW5uaW5nIGluIGJpZy1lbmRpYW4gbW9kZS4KKwkoZnBfaW1tZWRpYXRlX2NvbnN0YW50KTogRml4IHR5cG8gaW4gYXJndW1lbnQgZGVjbGFyYXRpb24uCisJKiBhcm0uaCAoUFJPTU9URV9NT0RFKTogUHJvbW90ZSBISW1vZGUgaW50ZWdlcnMgYXMgc2lnbmVkLgorCShCWVRFU19CSUdfRU5ESUFOKTogQWxsb3cgT1MgZGVzY3JpcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdC4KKwkoTE9BRF9FWFRFTkRfT1ApOiBXaGVuIGJpZy1lbmRpYW4sIEhJbW9kZSBsb2FkcyBhcmUgc2lnbiBleHRlbmRlZC4KKwkqIGFybS5tZCAoc3RvcmVoaV9iaWdlbmQpOiBOZXcgZXhwYW5zaW9uIHBhdHRlcm4uCisJKHN0b3JlaW50aGkpOiBSZXdvcmsgdG8gZ2VuZXJhdGUgYmV0dGVyIGNvZGUsIGFkZCBiaWctZW5kaWFuIHN1cHBvcnQuCisJKG1vdmhpKTogQWRkIHN1cHBvcnQgZm9yIHByb2Nlc3NvcnMgcnVubmluZyBpbiBiaWctZW5kaWFuIG1vZGUuCisJKG1vdmhpX2JpZ2VuZCk6IE5ldyBleHBhbnNpb24gcGF0dGVybi4KKwkobWF0Y2hlciBmb3IgbW92aGkpOiBSZW1vdmUgaW5jb3JyZWN0IGFsdGVybmF0aXZlIGZvciBzdG9yaW5nIEhJbW9kZSB0bworCW1lbW9yeS4gIE9ubHkgbWF0Y2ggd2hlbiBsaXR0bGUgZW5kaWFuLgorCShtYXRjaGVyIGZvciBiaWctZW5kaWFuIG1vdmhpKTogTmV3IHBhdHRlcm4uCisJKG1hdGNoZXJzL3BlZXBob2xlcyBmb3IgZXh0ZW5kZWQgcHJlL3Bvc3QgaW5jcmVtZW50IEhJbW9kZSBsb2Fkcyk6IE9ubHkKKwltYXRjaCB3aGVuIGxpdHRsZS1lbmRpYW4uCisJKG1hdGNoZXIgZm9yIG9wZXJhdGluZyBvbiBhZGphY2VudCBtZW1vcnkgbG9jYXRpb25zKTogTG9hZCBvcGVyYXRpb24KKwlpbnRvIGFyaXRoIG9wZXJhbmRzLgorCShwZWVwaG9sZXMgZm9yIGV4dGVuZGVkIHByZS1pbmNyZW1lbnQgYnl0ZSBsb2Fkcyk6IE5ldyBwYXR0ZXJucy4KKworU2F0IEp1biAgNCAyMTowNjoyOSAxOTk0ICBLYXZlaCBSLiBHaGF6aSAgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSkKKworCSogc3lzLXR5cGVzLmggKF9fZ251Y192YV9saXN0KTogVXNlIGluc3RlYWQgb2YgdmFfbGlzdC4KKwkqIHN5cy1wcm90b3MuaCAoKik6IFVzZSBfX2dudWNfdmFfbGlzdCwgbm90IHZhX2xpc3QuCisKK1NhdCBKdW4gIDQgMDc6MTk6MzkgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBhcm0uYyAocHJpbnRfbXVsdGlfcmVnLCBvdXRwdXRfY2FsbCwgb3V0cHV0X2NhbGxfbWVtLAorCW91dHB1dF9tb3ZfbG9uZ19kb3VibGVfZnB1X2Zyb21fYXJtLAorCW91dHB1dF9tb3ZfbG9uZ19kb3VibGVfYXJtX2Zyb21fZnB1LAorCW91dHB1dF9tb3ZfZG91YmxlX2ZwdV9mcm9tX2FybSwgb3V0cHV0X21vdl9kb3VibGVfYXJtX2Zyb21fZnB1LAorCW91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24sIG91dHB1dF9mdW5jX3twcm9sb2d1ZSxlcGlsb2d1ZX0sCisJYXJtX3ByaW50X29wZXJhbmQsIG91dHB1dF9sb2FkX3N5bWJvbCk6ICBQcmludCB0aGUgcmVnaXN0ZXIgcHJlZml4CisJYmVmb3JlIGVhY2ggcmVnaXN0ZXIgbmFtZS4KKwkob3V0cHV0X2Z1bmNfcHJvbG9ndWUsIG91dHB1dF9sY29tbV9kaXJlY3RpdmUpOiAgT3V0cHV0IHRoZSB0YXJnZXQKKwlkZXBlbmRlbnQgY29tbWVudCBjaGFyIGZvciBhc20gY29tbWVudHMuCisJKiBhcm0uaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWxldGUgZHVwbGljYXRlIGRlZmluaXRpb24uCisJKEZVTkNUSU9OX1BST0ZJTEVSLCBUUkFNUE9MSU5FX1RFTVBMQVRFLCBBU01fRklMRV9TVEFSVCwKKwlBU01fT1VUUFVUX1JFR197UFVTSCxQT1B9LCBQUklOVF9PUEVSQU5EX0FERFJFU1MpOiAgT3V0cHV0IHJlZ2lzdGVyCisJcHJlZml4IGJlZm9yZSBhbnkgZXhwbGljaXQgcmVnaXN0ZXIgbmFtZS4KKwkoQVNNX09VVFBVVF9MT05HX0RPVUJMRSwgQVNNX09VVFBVVF9ET1VCTEUsIEFTTV9PVVRQVVRfRkxPQVQsCisJQVNNX09VVFBVVF9DT01NT04pOiBPdXRwdXQgdGhlIHRhcmdldCBkZXBlbmRlbnQgY29tbWVudCBjaGFyLgorCShBU01fRklMRV9TVEFSVCk6IE91dHB1dCByZWdpc3RlciBhbGlhcyBmb3IgcjEwLgorCShSRUdJU1RFUl9OQU1FUyk6IE91dHB1dCAicjkiIG5vdyBmb3IgcjksIG5vdCAicmZwIi4KKwkoQURESVRJT05BTF9SRUdJU1RFUl9OQU1FUyk6IE5ldyBtYWNyby4KKwkqIGFybS5tZCAoYWxsIHBhdHRlcm5zIGV4cGxpY2l0bHkgbWVudGlvbmluZyByZWdpc3RlciBuYW1lcyk6IE91dHB1dAorCXRoZSB0YXJnZXQgZGVwZW5kZW50IHByZWZpeCBiZWZvcmUgdGhlIHJlZ2lzdGVyIG5hbWUuCisJKGFsbCBwYXR0ZXJucyB3aXRoIGFzbSBjb21tZW50cyk6IE91dHB1dCB0aGUgdGFyZ2V0IGRlcGVuZGVudCBjb21tZW50CisJY2hhcmFjdGVyLgorCitGcmkgSnVuICAzIDE4OjE0OjA3IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRml4IHNlY3Rpb24gYXR0cmlidXRlcy4KKwkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogSWYgc2VjdGlvbiBhdHRyaWJ1dGUgaXMgYmVpbmcgaWdub3JlZCwKKwlyZWFsbHkgaWdub3JlIGl0LgorCitGcmkgSnVuICAzIDE1OjUzOjU3IDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBwYS5oIChGUF9SRUdOT19QKTogTmV3IG1hY3JvIGZvciBpbnRyYSBmaWxlIHVzYWdlLgorCShSRUdOT19PS19GT1JfRlBfUCk6IFVzZSBGUF9SRUdOT19QLgorCShGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorCSogcGEubWQgKG11bHNpMyk6IFVzZSBNQVRDSF9EVVAgZm9yIG9wMywgbm90IE1BVENIX09QRVJBTkQuCisKKwkqIHBhLmggCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IFBhcnRpYWxseSByZXZlcnQgbGFzdCBjaGFuZ2VzOworCU1ha2Ugbm9uLWV4aXN0aW5nIDEuMCBmcCByZWdzIGZpeGVkLCBpbmNsdWRpbmcgb2RkLW51bWJlcmVkIHJlZ3MuCisJKGVudW0gcmVnX2NsYXNzKTogR2V0IHJpZCBvZiBTTkFLRV9GUF9SRUdTLCBHRU5FUkFMX09SX1NOQUtFX0ZQX1JFR1MsCisJYW5kIE5PTl9TSElGVF9SRUdTLgorCShSRUdfQ0xBU1NfTkFNRVMpOiBMaWtld2lzZS4KKwkoUkVHX0NMQVNTX0NPTlRFTlRTKTogTGlrZXdpc2UuCisJKFJFR05PX1JFR19DTEFTUyk6IExpa2V3aXNlLgorCShIQVJEX1JFR05PX01PREVfT0spOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuICBEb24ndCBmb3JjZSAxLjAgZnByZWdzCisJdG8gZXZlbiByZWdubyBoZXJlOyBmaXhlZF9yZWdzIGRvZXMgdGhlIGpvYiBiZXR0ZXIuCisJKEZQX1JFR19DTEFTU19QKTogR2V0IHJpZCBvZiBTTkFLRV9GUF9SRUdTLgorCShSRUdfQ0xBU1NfRlJPTV9MRVRURVIsIGNhc2UgJ3onKTogRGVsZXRlZC4KKwkoSEFSRF9SRUdOT19OUkVHUyk6IFBhcnRpYWxseSByZXZlcnQgbGFzdCBjaGFuZ2UuCisJKENMQVNTX01BWF9OUkVHUyk6IFBhcnRpYWxseSByZXZlcnQgbGFzdCBjaGFuZ2UuCisJKiBwYS5tZCAoZ2xvYmFsbHkpOiBEZWxldGUgJ3gnIGNvbnN0cmFpbnQgb3IgY2hhbmdlIGl0IHRvICdmJywKKwlhcyBhcHJvcHJpYXRlLgorCitGcmkgSnVuICAzIDA5OjE4OjU1IDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogYXJtLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6IE9ubHkgYWxsb3cgY29uc3RhbnRzIHRoYXQgYXJlIHZhbGlkCisJd2hlbiBpbnZlcnRlZCBmb3IgJ0snLiAgT25seSBhbGxvdyBjb25zdGFudHMgdGhhdCBhcmUgdmFsaWQgd2hlbgorCW5lZ2F0ZWQgZm9yICdMJy4KKwkqIGFybS5tZCAoYWxsIHBhdHRlcm5zKTogVXBkYXRlIGluc3RydWN0aW9uIGdlbmVyYXRpb24gdG8gcmVmbGVjdCBuZXcKKwltZWFuaW5ncyBvZiBjb25zdHJhaW50cyAnSycgYW5kICdMJy4gIFVzZSBvdXRwdXQgdHlwZSAnQicgdG8KKwlnZW5lcmF0ZSBhbiBpbnZlcnRlZCBjb25zdGFudC4gIFVzZSBvdXRwdXQgdHlwZSAnTicgdG8gZ2VuZXJhdGUgYQorCW5lZ2F0ZWQgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuCisKK1RodSBKdW4gIDIgMjI6NDM6NTggMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkgKiBwYS5oIChUQVJHRVRfU1dJVENIRVMpOiBFbmFibGUgVEFSR0VUX0xPTkdfQ0FMTFMgd2hlbgorCVRBUkdFVF9QT1JUQUJMRV9SVU5USU1FIGlzIGVuYWJsZWQuCisJKiBwYS5jIChvdXRwdXRfY2FsbCk6IElmIFRBUkdFVF9MT05HX0NBTExTIGlzIGVuYWJsZWQsIHRoZW4gZW1pdAorCWFuIGlubGluZSBsb25nLWNhbGwgc2VxdWVuY2UuCisJKiBwYS5tZCAobWlsbGljb2RlIGRlZmluZV9kZWxheSk6IERpc2FibGUgZGVsYXkgc2xvdHMgaWYKKwlUQVJHRVRfTE9OR19DQUxMUy4KKwkoY2FsbF9pbnRlcm5hbF9yZWcsIGNhbGxfdmFsdWVfaW50ZXJuYWxfcmVnKTogSWYgVEFSR0VUX0xPTkdfQ0FMTFMKKwlpcyBlbmFibGVkLCB0aGVuIGVtaXQgYW4gaW5saW5lIGxvbmctY2FsbCBzZXF1ZW5jZS4gIEZpeCBsZW5ndGgKKwljb21wdXRhdGlvbiBmb3IgVEFSR0VUX0xPTkdfQ0FMTFMuCisJKG1pbGxpY29kZSBjYWxscyk6IEZpeCBsZW5ndGggY29tcHV0YXRpb24gZm9yIFRBUkdFVF9MT05HX0NBTExTLgorCisJKiBwYS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRml4IHR5cG8uCisKK1RodSBKdW4gIDIgMTg6Mjg6MDcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9iaW5kaW5ncyk6IERvbid0IGJvdGhlciBlbWl0dGluZyBjbGVhbnVwcworCWFmdGVyIGEgYmFycmllci4KKworVGh1IEp1biAgMiAxODoxMDozNiAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogbGliZ2NjMi5jIChfX2Zsb2F0ZGlzZik6ICBQcm90ZWN0IGFnYWluc3QgZG91YmxlLXJvdW5kaW5nIGVycm9yLgorCitUaHUgSnVuICAyIDE3OjQ3OjU0IDE5OTQgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAuaCAoTUFTS19QUENGUFgpOiBEZWxldGUuCisJKE1BU0tfUFBDX0dQT1BULCBNQVNLX1BQQ19HRlhPUFQsIFRBUkdFVF9QUENfR1BPUFQsIFRBUkdFVF9QUENfR0ZYT1BUKToKKwlOZXcgTWFjcm9zLgorCShUQVJHRVRfU1dJVENIRVMpOiBSZW1vdmUgLW1wb3dlcnBjLWZweDsgYWRkIC1tcG93ZXJwYy1ncG9wdAorCWFuZCAtbXBvd2VycGMtZ2Z4b3B0LgorCSogcnM2MDAwLmMgKHByb2Nlc3Nvcl90YXJnZXRfdGFibGUpOiBVc2UgbmV3IG1hY3Jvcy4KKwkqIHJzNjAwMC5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBSZW1vdmUgcHBjNjA0IGZyb20gc3FydCBsaXN0LgorCShkaXZzaTMsIHVkaXZzaTMpOiBSZW1vdmUgc3BhY2VzIGZyb20gUG93ZXJQQyBvdXRwdXQgdGVtcGxhdGVzLgorCShzcXJ0c2YyLCBtYXhzZjMsIG1pbnNmMywgc3FydGRmMiwgbWF4ZGYzLCBtaW5kZjMpOiBVc2UgbmV3IG1hY3Jvcy4KKwkoZmxvYXRkaWRmMiwgZml4X3RydW5jZGZkaTIsIGZmc2RpMiwgbXVsZGkzKTogTmV3IHBhdHRlcm5zLgorCSh7cyx1fW11bGRpM19oaWdocGFydCwgZGl2ZGkzLCB1ZGl2ZGkzLCByb3RsZGkzKTogTGlrZXdpc2UuCisJKG1vdmRpKTogSGFuZGxlIG1vdmVzIGJldHdlZW4gRlBScyBhbmQgR1BScy4KKwkoc2NjIGluc24pOiBDb3JyZWN0IHN3YXBwZWQgY29tcGFyZSBhbmQgZGVsYXllZF9jb21wYXJlIGF0dHJpYnV0ZXMuCisKK1RodSBKdW4gIDIgMTQ6NDU6MDQgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBhcm0uYyAoYXJtX2NvbmRpdGlvbl9jb2RlKTogTW92ZSB0byBzdGFydCBvZiBmaWxlLgorCShjb25zdF9wb29sX29mZnNldCk6IENvcnJlY3QgdHlwby4KKwkoZnBfY29uc3RfZnJvbV92YWwpOiBOZXcgZnVuY3Rpb24uCisJKGFsbCBpbnN0cnVjdGlvbiBnZW5lcmF0b3JzKTogbWFyayBwb3NpdGlvbiB3aGVyZSBjb25kaXRpb25hbGl6YXRpb24KKwlzaG91bGQgYmUgd2l0aCAnJT8nLgorCShvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2UgbmV3ICclbScgb3V0cHV0IHR5cGUgdG8gc2ltcGxpZnkgbG9hZC9zdG9yZQorCW11bHRpcGxlIGdlbmVyYXRpb24uCisJKHNoaWZ0X2luc3RyKTogRGVsZXRlLgorCShzaGlmdF9vcCk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2FyaXRobWV0aWMpOiBEZWxldGUuCisJKG91dHB1dF9hcml0aG1ldGljX3dpdGhfc2hpZnQpOiBEZWxldGUuCisJKG91dHB1dF9hcml0aG1ldGljX3dpdGhfaW1tZWRpYXRlX211bHRpcGx5KTogRGVsZXRlLgorCShvdXRwdXRfc2hpZnRlZF9tb3ZlKTogRGVsZXRlLgorCShvdXRwdXRfc2hpZnRfY29tcGFyZSk6IERlbGV0ZS4KKwkoYXJtX3ByaW50X29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKiBhcm0uaCAob3V0cHV0X2Z1bmNfe3Byb2xvZ3VlLGVwaWxvZ3VlfSk6IENoYW5nZSBkZWNsYXJhdGlvbnMgZnJvbQorCW91dHB1dF97cHJvbG9ndWUsZXBpbG9ndWV9LgorCShhcm1fb3V0cHV0X2xsYywgYXJpdGhtZXRpY19pbnN0ciwKKwkgb3V0cHV0X2FyaXRobWV0aWNfd2l0aF9pbW1lZGlhdGVfbXVsaXRwbHksCisJIG91dHB1dF9hcml0aG1ldGljX3dpdGhfc2hpZnQsIHNoaWZ0X2luc3RyKTogRGVsZXRlIGZ1bmN0aW9uCisJZGVmaW5pdGlvbnMuCisJKEFTTV9PVVRQVVRfT1BDT0RFKTogRGVsZXRlLgorCShQUklOVF9PUEVSQU5EKTogQ2FsbCBhcm1fcHJpbnRfb3BlcmFuZCwgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4KKwkoQVJNX0NPTU1FTlRfQ0hBUik6IE5ldyBtYWNyby4KKwkoQVJNX1JFR19QUkVGSVgpOiBOZXcgbWFjcm8uCisJKEFSTV9TSUdOX0VYVEVORCk6IE5ldyBtYWNyby4KKwkoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogRGVsZXRlIHZhcmlhYmxlICdzaGlmdCcuICBDaGFuZ2UgdHlwZSBvZgorCXZhcmlhYmxlICdvZmZzZXQnIHRvIEhPU1RfV0lERV9JTlQuICBVc2UgYXJtX3ByaW50X29wZXJhbmQgdG8gaGFuZGxlCisJc2hpZnRzIGluIGFkZHJlc3Nlcy4KKwkqIGFybS5tZCAoYWxsIG91dHB1dCBwYXR0ZXJucyk6IFVzZSBuZXcgY2FwYWJpbGl0aWVzIG9mCisJYXJtX3ByaW50X29wZXJhbmQgdG8gc2ltcGxpZnkgb3V0cHV0IHNlcXVlbmNlcy4gIE1hcmsgcG9zaXRpb24gb2YKKwljb25kaXRpb24gY29kZSB3aXRoICclPycuCisKKwkqIHJpc2NpeC5oIChBU01fRklOQUxfU1BFQyBbQ1JPU1NfQ09NUElMRV0pOiBDb3JyZWN0IHR5cG8uCisKK1RodSBKdW4gIDIgMDg6MTQ6MDAgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYy1jb21tb24uYyAoY19idWlsZF90eXBlX3ZhcmlhbnQpOiBEb24ndCBjaGFuZ2UgVFlQRV9NQUlOX1ZBUklBTlQKKwlvZiBuZXcgdHlwZS4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBRERSX0VYUFIpOiBJZiByZXN1bHQgaXMgaWdub3JlZCwKKwlqdXN0IHJldHVybiBjb25zdDBfcnR4LgorCitXZWQgSnVuICAxIDEzOjUyOjAxIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBpMzg2L3NjbzQuaDogI2RlZmluZSBOT19JTVBMSUNJVF9FWFRFUk5fQy4KKworV2VkIEp1biAgMSAwNDo1NTowNiAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3IChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGFybS5jOiBHZW5lcmFsIHRpZHkgdXAuCisJI2luY2x1ZGUgPHN0cmluZy5oPi4KKwlEZWNsYXJlIHNvbWUgcHJvdG90eXBlcy4KKwkob3V0cHV0X21lbW9yeV9yZWZlcmVuY2VfbW9kZSk6IENoYW5nZSB0eXBlIHRvIGVudW0gbWFjaGluZV9tb2RlLgorCShhcm1fY29uc3Rfbm1vdmVzKTogRGVsZXRlLgorCShhZGphY2VudF9tZW1fbG9jYXRpb25zLCB7bG9hZCxzdG9yZX1fbXVsdGlwbGVfb3BlcmF0aW9uKTogRXhwbGljaXRseQorCWRlY2xhcmUgdG8gcmV0dXJuIGludC4KKwkoe2xvYWQsc3RvcmV9X211bHRpcGxlX29wZXJhdGlvbik6IENoYW5nZSB0eXBlIG9mICdjb3VudCcsICdiYXNlJyBhbmQKKwknaScgdG8gSE9TVF9XSURFX0lOVC4KKwkob3V0cHV0X2FkZF9pbW1lZGlhdGUpOiBDaGFuZ2UgdHlwZSBvZiAnbicgdG8gSE9TVF9XSURFX0lOVC4KKwkob3V0cHV0X211bHRpX2ltbWVkaWF0ZSk6IENoYW5nZSB0eXBlIG9mIEFyZ3VtZW50ICduJyB0bworCUhPU1RfV0lERV9JTlQsIGlmIHdpZGVyIHRoYW4gMzIgYml0cywgbWFzayBvdXQgdGhlIGhpZ2ggYml0cy4KKwkob3V0cHV0X2FyaXRobWV0aWNfd2l0aF9pbW1lZGlhdGVfbXVsdGlwbHkpOiBDaGFuZ2UgdHlwZSBvZiAnc2hpZnQnCisJdG8gSE9TVF9XSURFX0lOVC4KKwkob3V0cHV0X2Z1bmNfe3Byb2xvZ3VlLGVwaWxvZ3VlfSk6IFJlbmFtZWQgZnJvbQorCW91dHB1dF97cHJvbG9ndWUsZXBpbG9ndWV9LiAgQ2hlY2sgYWxsIHJlZ2lzdGVycyB0byBzZWUgaWYgdGhleSBhcmUKKwlsaXZlLCBidXQgb25seSBwdXNoL3BvcCB0aGVtIGlmIHRoZXkgYXJlIG5vdCBpbiBjYWxsX3VzZWRfcmVncy4KKwkqIGFybS5oOiBEZWxldGUgc29tZSBkZWFkIGNvZGUuCisJKEZVTkNUSU9OX3tQUk9MT0dVRSxFUElMT0dVRX0pOiBDYWxsIG91dHB1dF9mdW5jX3twcm9sb2d1ZSxlcGlsb2d1ZX0uCisJKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogSW5zcGVjdCBhbGwgcmVnaXN0ZXJzLCBidXQgb25seSBhZGQKKwl0aG9zZSB0aGF0IGFyZSBub3QgaW4gY2FsbF91c2VkX3JlZ3MuCisJKEdPX0lGX0xFR0lUSU1BVEVfSU5ERVgpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSAncmFuZ2UnIHRvCisJSE9TVF9XSURFX0lOVDsgY2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgJ2NvZGUnIHRvIGVudW0gcnR4X2NvZGUuCisJKFJFVkVSU0lCTEVfQ0NfTU9ERSk6IE5ldyBtYWNyby4KKworCSogYXJtLmMgKGNvbnN0X3Bvb2xfb2Zmc2V0KTogTmV3IGZ1bmN0aW9uLgorCShnZXRfcHJvbG9ndWVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KKwkob3V0cHV0X2Z1bmNfcHJvbG9ndWUpOiBFbGltaW5hdGUgdmFyaWFibGUgY29kZV9zaXplLgorCShvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IE9ubHkgY2FsbCBhcm1faW5jcmVhc2VfbG9jYXRpb24gd2hlbgorCW9wdGltaXppbmc7IGFsc28gYWRkIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiBqdXN0IGNvbXBpbGVkLCBhbmQgdGhlCisJc2l6ZSBvZiB0aGUgcHJvbG9ndWUuCisJKGFybV9vdXRwdXRfYXNtX2luc24pOiBEZWxldGUuICBBbGwgY2FsbGVycyBjaGFuZ2VkIHRvIHVzZQorCW91dHB1dF9hc21faW5zbi4KKwkoYXJtX291dHB1dF9sbGMpOiBEZWxldGUuCisJKG91dHB1dF9sb2FkX3N5bWJvbCk6IE5ldyBmaXJzdCBwYXJhbWV0ZXIgJ2luc24nLiAgUmV3cml0ZSBzbyB0aGF0CisJYXNzZW1ibGVyIGNhbiBkZXRlY3Qgd2hldGhlciB3ZSBtYWRlIGEgbWlzdGFrZS4KKwkqIGFybS5oIChhcm1fb3V0cHV0X2FzbV9pbnNuKTogRGVsZXRlIGRlY2xhcmF0aW9uLgorCShFWFRSQV9DT05TVEFJTlQpOiBOZXcgY29uc3RyYWludCAnUicgdG8gbWF0Y2ggYSBjb25zdGFudCBwb29sIGxhYmVsLgorCU1ha2UgY29uc3RyYWludCAnUycgbmV2ZXIgbWF0Y2ggd2hlbiBub3Qgb3B0aW1pemluZy4KKwkoQ09OU1RBTlRfQUREUkVTU19QKTogT25seSBhY2NlcHQgc3ltYm9scyBtYXJrZWQgd2l0aCBTWU1CT0xfUkVGX0ZMQUcKKwl3aGVuIG9wdGltaXppbmcuCisJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEb24ndCBtYXJrIGFueSBzeW1ib2xzIHdoZW4gbm90IG9wdGltaXppbmcuCisJKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH06IERvbid0IGNhbGwgYXJtX2luY3JlYXNlX2xvY2F0aW9uLgorCShBU01fT1VUUFVUX0FERFJfVkVDX0VMVCk6IExpa2V3aXNlLgorCSogYXJtLm1kIChhbGwgaW5zbiBhbmQgcGVlcGhvbGUgcGF0dGVybnMpOiBSZXdyaXRlIHdpdGhvdXQgdXNpbmcKKwlhcm1fb3V0cHV0X2FzbV9pbnNuLgorCShtYXRjaGVyIGZvciBtb3ZzaSk6IE5ldyBhbHRlcm5hdGl2ZSB0byBsb2FkIHN5bWJvbCBkaXJlY3RseSBpbnRvIGEKKwlyZWdpc3Rlci4gIEFkZCBuZXcgcGFyYW1ldGVyIGluIGNhbGwgdG8gb3V0cHV0X2xvYWRfc3ltYm9sLgorCisJKiBhcm0ubWQgKGFsbCBwYXR0ZXJucyk6IExlbmd0aCBhdHRyaWJ1dGUgbm93IGRlc2NyaWJlcyBsZW5ndGggaW4KKwlieXRlcy4KKwkqIGFybS5jIChzaG9ydF9icmFuY2gpOiBDb252ZXJ0IGxlbmd0aCBjYWxjdWxhdGlvbnMgdG8gYnl0ZXMuCisKK1R1ZSBNYXkgMzEgMjA6MzU6MzkgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGFkZGVyLmN5Z251cy5jb20pCisKKwkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IHRvIHN5bWJvbGljX29wZXJhbmQuCisJKG91dHB1dF9ibG9ja19tb3ZlKTogUHJlZmVyIGFkZGwgdG8gYWRkLgorCShwcmludF9vcGVyYW5kKTogUHJpbnQgZnAgcmVncyB3aXRoIEwgc3VmZml4IHdoZW4gYXBwcm9wcmlhdGUuCisJKG91dHB1dF9hcmdfZGVzY3JpcHRvcik6IFJld3JpdGUgdG8gYWNjb21vZGF0ZSBuZXcgY29udmVudGlvbiBmb3IKKwlVU0UgaW5mb3JtYXRpb24uCisKKwkqIHBhLmggKFNFQ09OREFSWV9NRU1PUllfTkVFREVEKTogU2ltcGxpZnkuCisJKEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMpOiBEZWZpbmUuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTWFrZSBQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSBmaXhlZAorCWFnYWluLgorCisJQ2hhbmdlcyB0byBjb21iaW5lIGZwIHJlZ2lzdGVycyBmb3IgMS4wIGFuZCAxLjEgYXJjaGl0ZWN0dXJlcy4KKwkoTWFrZSBleHBsaWNpdCBjbG9iYmVycyBvZiBmcCByZWdpc3RlcnMgd29yay4pCisJKiBwYS5oIChGSVJTVF9QU0VVRE9fUkVHSVNURVIpOiBOb3cgODkuCisJKEZJWEVEX1JFR0lTVEVSUyk6IERlbGV0ZSAxLjAgZnAgcmVnaXN0ZXJzLAorCShDQUxMX1VTRURfUkVHSVNURVJTKTogTGlrZXdpc2UuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogQWxtb3N0IGRlbGV0ZWQuCisJKFJFR19BTExPQ19PUkRFUik6IFVwZGF0ZSByZWdpc3RlciBudW1iZXJzLgorCShIQVJEX1JFR05PX05SRUdTKTogRGVsZXRlIHNwZWNpYWwgY2FzZSBmb3IgMS4wIGZwIHJlZ2lzdGVycy4KKwkoSEFSRF9SRUdOT19NT0RFX09LKTogUmV3cml0ZS4gIERvbid0IGFsbG93IHVzZSBvZiBvZGQgZnAgcmVnaXN0ZXJzCisJKGVudW0gcmVnX2NsYXNzKTogRGVsZXRlIEhJX1NOQUtFX0ZQX1JFR1MgYW5kIEZQX09SX1NOQUtFX0ZQX1JFR1MuCisJKFJFR19DTEFTU19OQU1FUyk6IENvcnJlc3BvbmRpbmcgY2hhbmdlLgorCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBEZWxldGUgSElfU05BS0VfRlBfUkVHUyBhbmQKKwlGUF9PUl9TTkFLRV9GUF9SRUdTLiAgTWFrZSBTTkFLRV9GUF9SRUdTIGNsYXNzIGNvbnRhaW4gYWxsIGZwCisJcmVnaXN0ZXJzLiAgVXBkYXRlIGFsbCB2YWx1ZXMgZm9yIGNoYW5nZWQgcmVnaXN0ZXIgbnVtYmVyaW5nLgorCShSRUdOT19SRUdfQ0xBU1MpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IERlbGV0ZSAneScuCisJKEZQX1JFR19DTEFTU19QKTogTm8gbG9uZ2VyIHRlc3QgSElfU05BS0VfRlBfUkVHUy4KKwkoQ0xBU1NfTUFYX05SRUdTKTogRGVsZXRlIHNwZWNpYWwgY2FzZSBmb3IgMS4xIGZwIHJlZ2lzdGVycy4KKwkoRlVOQ1RJT05fVkFMVUUpOiBSZW1vdmUgVEFSR0VUX1NOQUtFIGNvbmRpdGlvbmFscy4KKwkoTElCQ0FMTF9WQUxVRSk6IExpa2V3aXNlLgorCShGVU5DVElPTl9BUkdfUkVHTk9fUCk6IExpa2V3aXNlLgorCShGVU5DVElPTl9WQUxVRV9SRUdOT19QKTogTGlrZXdpc2UuICBBZGQgcmVnaXN0ZXJzIDI5IGFuZCAzMy4KKwkoRlVOQ1RJT05fQVJHKTogUmVtb3ZlIFRBUkdFVF9TTkFLRSBjb25kaXRpb25hbHMuICBVcGRhdGUgcmVnaXN0ZXIKKwludW1iZXJzLgorCShSRUdOT19PS19GT1JfRlBfUCk6IFVwZGF0ZSByZWdpc3RlciBudW1iZXIuCisJKFJFR0lTVEVSX05BTUVTKTogRGVsZXRlIHNwZWNpYWwgZW50cmllcyBmb3IgMS4wIGZwIHJlZ2lzdGVycy4KKwkoREJYX1JFR0lTVEVSX05VTUJFUik6IExpa2V3aXNlLgorCSogcGEuYyAoY29tcHV0ZV9mcmFtZV9zaXplKTogVXBkYXRlIGZvciBjaGFuZ2VkIHJlZ2lzdGVyIG51bWJlcnMuCisJU2ltcGxpZnkgbG9vcHMgb3ZlciBnZW5lcmFsIHJlZ2lzdGVycyB0byBzdG9wIGF0IHJlZ2lzdGVyIDQuCisJKGhwcGFfZXhwYW5kX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJKGhwcGFfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCisKK1R1ZSBNYXkgMzEgMTk6MzI6MTggMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBtaXBzLm1kIChtb3Zlc2lfdW5hbGlnbmVkLCBtb3ZzaV91bHcsIG1vdnNpX3Vzdyk6IERlbGV0ZS4KKwkoZXh0diwgZXh0enYsIGluc3YsIG1vdnNpX3VsdywgbW92c2lfdXN3KTogTmV3IHBhdHRlcm5zLgorCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBBbHdheXMgZW1pdCBjcm9zcy1yZWZlcmVuY2VzIGlmCisJdXNlX2dudV9kZWJ1Z19pbmZvX2V4dGVuc2lvbnMgc2V0LgorCisJKiBmaW5hbC5jIChvdXRwdXRfc291cmNlX2xpbmUpOiBDYWxsIHhjb2Zmb3V0X3NvdXJjZV9saW5lLgorCSogeGNvZmZvdXQuYyAoeGNvZmZfbGFzdGZpbGUpOiBOZXcgdmFyaWFibGUuCisJKEFCU19PUl9SRUxBVElWRV9MSU5FTk8sIEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBEZWZpbmUgaGVyZS4KKwkoeGNvZmZvdXRfc291cmNlX2ZpbGUsIHhjb2Zmb3V0X3NvdXJjZV9saW5lKTogTmV3IGZ1bmN0aW9ucy4KKwkoeGNvZmZvdXRfZGVjbGFyZV9mdW5jdGlvbik6IFVzZSB4Y29mZm91dF9zb3VyY2VfZmlsZS4KKwkqIHhjb2Zmb3V0LmggKHhjb2ZmX2xhc3RmaWxlKTogRGVjbGFyZS4KKwkoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFTkFNRSk6IENsZWFuIHVwLiAgU2V0IHhjb2ZmX2xhc3RmaWxlLgorCShBQlNfT1JfUkVMQVRJVkVfTElORU5PLCBBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogRGVsZXRlIGhlcmUuCisJKERCWF9PVVRQVVRfU09VUkNFX0ZJTEVOQU1FKTogRGVsZXRlLgorCisJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBDb3B5IENBTExfSU5TTl9GVU5DVElPTl9VU0FHRSBmaWVsZC4KKworCSogc3BhcmMuaCAoQVNNX1NQRUMpOiBEb24ndCBwYXNzIC1rIHdoZW4gLXBnIG9yIC1wIGdpdmVuLgorCShPVkVSUklERV9PUFRJT05TKTogV2FybiB3aGVuIGRpc2FibGluZyAtZnBpYy4KKworCSogbWlwcy10ZHVtcC5jIChwcmludF9nbG9iYWxfaGRyKTogUmVtb3ZlICJsIiBmcm9tIHByaW50ZiBmb3JtYXQKKwlmb3IgZmxhZ3MuCisJKHByaW50X3N5bV9oZHIpOiBBZGQgbWlzc2luZyAibCIgdG8gcHJpbnRmIGZvcm1hdHMuCisJKHByaW50X3N5bWJvbCwgcHJpbnRfZmlsZV9kZXNjKTogTGlrZXdpc2UuCisKKwkqIGk5NjAuaCAoUFVUX1NEQl9UWVBFKTogQWRqdXN0IHZhbHVlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggR05VOTYwCisJdG9vbGNoYWluLgorCisJKiBzcGFyYy5oIChMSUJfU1BFQyk6IERvbid0IGxpbmsgaW4gL3Vzci9saWIvYmJfbGluay5vIHdpdGggLWEuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogV2hlbiAtYSwgbWFrZSAlZzEgYW5kICVnMiBmaXhlZC4KKworCSogbWlwcy9pcmlzNWdhcy5oLCBtaXBzL2lyaXM1Z2RiLmg6IE5ldyBmaWxlcy4KKwkqIGNvbmZpZ3VyZSAobWlwcy1zZ2ktaXJpeDUpOiBVc2UgaXJpczVnYXMuaCBhbmQgaXJpczVnZGIuaC4KKworVHVlIE1heSAzMSAxOToyMTo0NCAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogcGEubWQgKG1vdnNpIG1hdGNoZXIpOiBVc2UgbGRpIGZvciBtb3Zpbmcgb2YgMCB0byBhIHJlZy4KKwkobW92aGkgbWF0Y2hlcik6IExpa2V3aXNlLgorCShtb3ZxaSBtYXRjaGVyKTogTGlrZXdpc2UuCisJKG1hbnkgcGF0dGVybnMpOiBQcmVmZXIgYWRkbCB0byBhZGQsIGFuZCBzaE5hZGRsIHRvIHNoTmFkZC4KKwkoZGVmaW5lX3NwbGl0IGZvciAocGx1cyAocmVnKSAobGFyZ2VfY29uc3RhbnQpKSk6IENsZWFudXAuCisJKGRpdnNpMyk6IFVzZSBtYXRjaF9kdXAgZm9yIG9wZXJhbmQgMywgbm90IG1hdGNoX29wZXJhbmQuCisJKHVkaXZzaTMpOiBMaWtld2lzZS4KKwkobW9kc2kzKTogTGlrZXdpc2UuCisJKHVtb2RzaTMpOiBMaWtld2lzZS4KKworVHVlIE1heSAzMSAxOToxNTozMSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jICh2X3BlZHdhcm5fd2l0aF9kZWNsKTogRG9uJ3QgZXZlbiBpc3N1ZSB3YXJuaW5ncyBmcm9tCisJcGVkYW50aWMgZXJyb3JzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuCisKK1R1ZSBNYXkgMzEgMTc6MTY6NDEgMTk5NCAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZXh0ZW5kcWlkaTIsIGV4dGVuZHFpc2kyLCBleHRlbmRxaWhpMik6IFJlbW92ZQorCW5vbi1leGlzdGVudCBsYmEgaW5zdHJ1Y3Rpb24uCisJKGFzaHJkaTMpOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KKworVHVlIE1heSAzMSAxMjozMDowMCAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCAtZntuby0sfWltcGxpY2l0LXRlbXBsYXRlcy4KKwkoY29tcGlsZV9maWxlKTogRG9uJ3Qgb3V0cHV0IFNEQiBkZWJ1Z2dpbmcgaW5mbyBmb3IKKwlleHRlcm5hbHMuCisKK1R1ZSBNYXkgMzEgMDc6MjA6MTggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogTWFrZSBNRU0gd2l0aCBCTEttb2RlIGZvciBjbG9iYmVyCisJb2YgIm1lbW9yeSIuCisJKiBsb29wLmMgKG5vdGVfYWRkcl9zdG9yZWQpOiBBIFNFVCBvciBDTE9CQkVSIG9mIGEgQkxLbW9kZSBNRU0gbWVhbnMKKwl0aGF0IGFsbCBtZW1vcnkgaXMgY2xvYmJlcmVkLgorCitNb24gTWF5IDMwIDE0OjAxOjQ4IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtTUcgdG8gY3BwIGlmIHByZXNlbnQuCisJKG9wdGlvbl9tYXApOiBOZXcgb3B0aW9uIC0tcHJpbnQtbWlzc2luZy1maWxlLWRlcGVuZGVuY2llcy8tTUcuCisJKiBjY2NwLmMgKHByaW50X2RlcHNfbWlzc2luZ19maWxlcyk6IE5ldyBnbG9iYWwuCisJKG1haW4pOiBOZXcgYXJndW1lbnQgLU1HLiAgVHJlYXQgbWlzc2luZyBpbmNsdWRlIGZpbGVzIGFzCisJZ2VuZXJhdGVkIGZpbGVzIGFuZCBvdXRwdXQgZGVwZW5kZW5jaWVzIGZvciB0aGVtLgorCitNb24gTWF5IDMwIDEwOjQyOjE0IDE5OTQgIEZyZWRlcmljIFBpZXJyZXN0ZWd1eSAgKEYuUGllcnJlc3RlZ3V5QGZyY2wuYnVsbC5mcikKKworCSogbTY4ay9kcHgyY2RieC5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBEZWZpbmUgYXMgU0RCX0RFQlVHLgorCSogbTY4ay9kcHgyZy5oOiBEaXNhYmxlIGNvZGUgdGhhdCBtYW5hZ2VzIGdjYy5pZmlsZS4KKworTW9uIE1heSAzMCAxMDozNTo0OSAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogb3B0YWJzLmMgKGV4cGFuZF9mbG9hdCk6ICBBdm9pZCBkb3VibGUtcm91bmRpbmcgd2hlbiBmbG9hdCBpcyAKKwlpcyBuYXJyb3dlciB0aGFuIGludC4KKwkqIHJlYWwuYyAoc2lnbmlmaWNhbmRfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KKwkqIHJlYWwuaCAoc2lnbmlmaWNhbmRfc2l6ZSk6IERlY2xhcmUuCisKK1N1biBNYXkgMjkgMTU6NTg6MjEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSoganVtcC5jIChqdW1wX29wdGltaXplKTogV2hlbiBkZWxldGluZyB1bm5lZWRlZCBzdGFjayBhZGp1c3RzCisJb3IgbWVtLW1lbSBjb3BpZXMsIHVzZSBkZWxldGVfY29tcHV0YXRpb24uCisKKwkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSk6IE5FWFRfU0VMRUNUIGlzIHRydWUgZm9yIE5FRy4KKwlPbmx5IGV4aXQgcXVpY2tseSBpZiBYIGlzIG5hcnJvd2VyIHRoYW4gTU9ERSBhbmQgTUFTSyBoYXMgYWxsCisJYml0cyBpbiBYJ3MgbW9kZSBzZXQuCisJKGZvcmNlX3RvX21vZGUsIGNhc2UgU1VCUkVHKTogRG9uJ3QgY2hlY2sgZm9yIFdPUkRfUkVHSVNURVJfT1BFUkFUSU9OUy4KKwkoZm9yY2VfdG9fbW9kZSwgY2FzZSBORUcpOiBTcGVjaWFsLWNhc2UgdGVzdCBmb3IgbG93LW9yZGVyIGJpdC4KKworCSogcnRsYW5hbC5jICh2b2xhdGlsZV9pbnNuX3ApOiBDYWxsIG91cnNlbHZlcyBpbiByZWN1cnNpdmUgc2Nhbi4KKworU2F0IE1heSAyOCAxOTowMzoyMyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLXBhcnNlLmluIChpbml0LCBjb21wc3RtdCwgc3RtdCwgYWxsX2l0ZXJfc3RtdF93aXRoX2RlY2wpOgorCUlmIHRoZSBsb29rYWhlYWQgdG9rZW4gaXMgYSBjb25zdGFudCBhbmQgd2UgbmVlZCB0byBwb3AgdGhlCisJbW9tZW50YXJ5IG9ic3RhY2ssIGRvbid0IGZyZWUgaXQuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogSGF2ZSBJTkRFWF9UWVBFIHRyYWNrIGNvbnZlcnNpb25zIGRvbmUKKwl0byBJTkRFWF9FWFBSLgorCitTYXQgTWF5IDI4IDA2OjI1OjQwIDE5OTQgIFRvcmJqb3JuIEdyYW5sdW5kICAodGVnZUBhZGRlci5jeWdudXMuY29tKQorCisJKiBwYS5tZCAoY2FsbCk6IEZvcmNlIGFkZHJlc3MgaW50byByZWdpc3RlciBpbiBub24tc3ltYm9sIGNhc2UuCisJKGNhbGxfdmFsdWUpOiBMaWtld2lzZS4KKworRnJpIE1heSAyNyAxOToyOTozMCAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGluaXRfcmVncyBhZnRlciBgd29yZF9tb2RlJyBpcyB2YWxpZC4KKwkqIHJlZ2NsYXNzLmMgKGluaXRfcmVnX21vZGVzKTogSWYgY2hvb3NlX2hhcmRfcmVnX21vZGUgY2FuJ3QgZmluZCBhCisJdmFsaWQgbW9kZSwgZmFsbCBiYWNrIHRvIHdvcmRfbW9kZS4KKworCSogZXhwci5jICh1c2VfcmVnKTogRml4IHJlY29yZGluZyBvZiBVU0UgaW5mb3JtYXRpb24uCisJKHVzZV9yZWdzKTogTGlrZXdpc2UuCisJRGVsZXRlIGFyZ3VtZW50IGByZWcnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkqIGV4cHIuaCAodXNlX3JlZ3MpOiBVcGRhdGUgcHJvdG90eXBlLgorCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBVcGRhdGUgY2FsbCB0byB1c2VfcmVncy4gIENhbGwgdXNlX3JlZworCWlmIHBhcm0gaXMgd2hvbGx5IGluIHJlZ2lzdGVycy4KKworCSogY29uZmlndXJlOiBJZiBjb21waWxpbmcgaW4gc2VwYXJhdGUgZGlyLCBhZGQgc3ViZGlycyB0byAuZ2RiaW5pdC4KKworRnJpIE1heSAyNyAxODoxODoyMyAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLm1kICh6ZXJvX2V4dGVuZHFpZGkyLCB6ZXJvX2V4dGVuZGhpZGkyKTogVXNlIHJsZGljbAorCWluc3RydWN0aW9uLgorCSogcnM2MDAwLmggKFJUWF9DT1NUUyk6IFVwZGF0ZSBQUEM2MDMgYW5kIFBQQzYwNCB2YWx1ZXMuCisKK0ZyaSBNYXkgMjcgMTc6NTY6MDcgMTk5NCAgRG91Z2xhcyBSdXBwIChkcnVwcEBjcy53YXNoaW5ndG9uLmVkdSkKKworCSogaTM4Ni94bS1kb3MuaCAoRElSX1NFUEFSQVRPUik6IE5ldyBtYWNyby4KKworRnJpIE1heSAyNyAxNzo0NTowOCAxOTk0ICBIb2xnZXIgVGV1dHNjaCAgKHRldXRzY2hAZmZtLWl3LkRlZ3Vzc2EuREUpCisKKwkqIGNsaXBwZXIuaCAoUENDX1NUQVRJQ19TVFJVQ1RfUkVUVVJOKTogTm8gbG9uZ2VyIGRlZmluZWQuCisKK0ZyaSBNYXkgMjcgMTc6MzY6NTMgMTk5NCAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCisKKwkqIG1ha2UtbDIuY29tOiBVcGRhdGUgdG8gaGFuZGxlIGBnaW5jbHVkZScgc3ViZGlyZWN0b3J5CisJd2hlbiBjb21waWxpbmcgbGliZ2NjMi4KKworRnJpIE1heSAyNyAxNzozMDozNyAxOTk0ICBNYXR0aGlhcyBQZmFsbGVyICAobGVvQG1hcmNvLmRlKQorCQorCSogbnMzMmsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogcHJpbnRfb3BlcmFuZF9hZGRyZXNzCisJY3JlYXRlcyBQTFVTLXJ0bHMgZm9yIGludGVybmFsIHVzZSwgc28gaXQgaGFzIHRvIGhhbmRsZSB0aGVtLgorCitGcmkgTWF5IDI3IDE2OjEzOjUzIDE5OTQgIENocmlzIFRvcmVrICAodG9yZWtAZWxmLmJzZGkuY29tKQorCisJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBTZXQgUkVHX1VTRVJWQVJfUCB3aGVuIHBhcm0KKwlpcyBwYXNzZWQgYnkgaW52aXNpYmxlIHJlZmVyZW5jZSBidXQgY2FuIGxpdmUgaW4gcmVnaXN0ZXIuCisKK0ZyaSBNYXkgMjcgMDY6MDM6MTEgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFJldmVydCB0byBvbGQgY29kZSBhbmQgY2hhbmdlIHNlY29uZGFyeQorCXJlbG9hZHMgdG8gUkVMT0FEX0ZPUl9PUEVSQU5EX0FERFJFU1MgdG9vLgorCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogRG9uJ3QgbWFrZSBjb21wbGVtZW50ZWQgWE9SIGZvcgorCWNvbnN0YW50IG91dCBvZiByYW5nZS4KKworCSogYWxwaGEuYyAob3Jfb3BlcmFuZCk6IFJlbmFtZWQgZnJvbSBpb3Jfb3BlcmFuZC4KKwkqIGFscGhhLmggKFBSRURJQ0FURV9DT0RFUyk6IExpa2V3aXNlLgorCSogYWxwaGEubWQgKGlvcmRpMyk6IExpa2V3aXNlLgorCSh4b3JkaTMpOiBVc2Ugb3Jfb3BlcmFuZCBhbmQgYWRkIHNlY29uZCBhbHRlcm5hdGl2ZS4KKwkoZXF2KTogT25seSBhY2NlcHQgcmVnaXN0ZXJzLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIENPTlNUUlVDVE9SKTogSWYgY29uc3RhbnQgYW5kIGxhcmdlCisJZW5vdWdoIGZvciBtZW1jcHkgdG8gYmUgdXNlZCwgYnVpbGQgY29uc3RydWN0b3IgaW50byBzdGF0aWMgbWVtb3J5LgorCisJKiBhbHBoYS5tZDogQWRkIGRlZmluZV9zcGxpdCBmb3Igc2lnbi1leHRlbmRlZCBQTFVTIG9mIGEgTVVMVAorCW9mIGFuIFNJbW9kZSBjb21wYXJpc29uLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBOYXJyb3cgY29tcGFyaXNvbiBmb3IgQU5EJ3MKKwl0aGF0IGFyZSBaRVJPX0VYVEVORHMuCisJQ2FuIHdpZGVuIGZvciBhbGwgY29tcGFyaXNvbnMgaWYgaW5wdXRzIGFyZSBib3RoIHNpZ24gZXh0ZW5kZWQuCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFVwZGF0ZSBzcGlsbF9yZWdfb3JkZXIgb25jZSB3ZSBzb3J0CisJc3BpbGxfcmVncy4KKworCSogYWxwaGEubWQ6IEFkZCBkZWZpbmVfc3BsaXQgZm9yIHNpZ24tZXh0ZW5kZWQgUExVUyBvZiBhbiBTSW1vZGUKKwljb21wYXJpc29uOyBjaGFuZ2UgY29tcGFyaXNvbiB0byBESW1vZGUuCisKKwkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogVXNlIG9sZCB0eXBlIG9mIElOREVYX0VYUFIgd2hlbiBtYWtpbmcKKwlhIGNvbnN0YW50LgorCisJKiBsb2NhbC1hbGxvYy5jIChyZXF1aXJlc19pbm91dCk6IFJlbmFtZWQgZnJvbSByZXF1aXJlc19pbm91dF9wIGFuZAorCXJldHVybnMgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyB0aGF0IHJlcXVpcmUgYSBtYXRjaC4KKwkoYmxvY2tfYWxsb2MpOiBVc2UgbmV3IGZ1bmN0aW9uIGFuZCBoYW5kbGUgY2FzZSB3aGVyZSBhbGwKKwlhbHRlcm5hdGl2ZXMgaGF2ZSBzb21lIG9wZXJhbmQgdGhhdCBtdXN0IG1hdGNoIG9wZXJhbmQgMC4KKworCSogbG9jYWwtYWxsb2MuYyAocXR5X3BoeXNfbnVteyxfY29weX1fc3VnZyk6IE5ldyB2YXJpYWJsZXMuCisJKHF0eV9waHlzX2hhc3ssX2NvcHl9X3N1Z2cpOiBEZWxldGVkLgorCShxdHlfc3VnZ19jb21wYXJleyxfMX0pOiBOZXcgZnVuY3Rpb25zLgorCShsb2NhbF9hbGxvYyk6IEFsbG9jYXRlIGFuZCBpbml0IG5ldyB2YXJzIGluc3RlYWQgb2YgZGVsZXRlZCBvbmVzLgorCShibG9ja19hbGxvYyk6IFVwZGF0ZSBhbmQgdXNlIG5ldyB2YXJzLgorCU9yZGVyIHF1YW50aXRpZXMgdXNpbmcgbmV3IGZ1bmN0aW9ucyB3aGVuIGFsbG9jYXRpbmcgcXVhbnRpdGllcworCXdpdGggc3VnZ2VzdGVkIHJlZ2lzdGVycy4KKwkoY29tYmluZV9yZWdzLCBmaW5kX2ZyZWVfcmVnKTogVXNlIG5ldyB2YXJzIHRvIGNvdW50IG51bWJlcgorCW9mIHN1Z2dlc3Rpb25zLgorCitUaHUgTWF5IDI2IDExOjU1OjQ0IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gbG9va2luZyBmb3IgYW4gYGlmJyBzdGF0ZW1lbnQKKwl0aGF0IHRha2VzIHR3byBpbnNucyB0byBjb21wdXRlIGEgcmVzdWx0IHVzaW5nIGEgdGVtcG9yYXJ5LAorCWFsbG93IHRoZSB0ZW1wb3JhcnkgdG8gYmUgYSBTVUJSRUcuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbik6IENhbGwgQ0FOT05JQ0FMSVpFX0NPTVBBUklTT04sCisJaWYgZGVmaW5lZC4KKwkqIGFscGhhLmggKENBTk9OSUNBTElaRV9DT01QQVJJU09OKTogTmV3IG1hY3JvLgorCisJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2lmX3RoZW5fZWxzZSk6IERvbid0IG1ha2UgKG11bHQgKGNvbmQpKQorCWluIHNpbXBsZSBjYXNlOyBsZWF2ZSBhcyBJRl9USEVOX0VMU0UgaW5zdGVhZC4KKworCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBDb3JyZWN0bHkgc2V0IENBTl9DTE9CQkVSX09QMCB3aGVuIHdlJ3ZlCisJY29udmVydGVkIE9QMCB0byBDT01QVVRFX01PREUuCisKK1RodSBNYXkgMjYgMTE6NDE6NTggMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogUHJvdGVjdCBib29sIGluIGN1cnNlcy5oIHdpdGggI2lmbmRlZiBfX2NwbHVzcGx1cywKKwlzaW5jZSBnKysgbm93IGRlZmluZXMgYm9vbCBhcyBhIGJhc2ljIHR5cGUuCisKKwkqIGZpeGluYy5zdnI0OiBQcm90ZWN0IGRlZmluaXRpb24gb2YgX19QIHVzZWQgaW4gU29sYXJpcyBtYXRoLmgKKwlhbmQgZmxvYXRpbmdwb2ludC5oIHRvIGF2b2lkIGZ1dHVyZSBmaXhwcm90byBjb25mbGljdHMuCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWZpeGluYyk6IERvbid0IHBhc3MgJHtzcmNkaXJ9IGFyZ3VtZW50IHRvCisJJChGSVhJTkNMVURFUyk7IG5vIGxvbmdlciBuZWVkZWQsIGFuZCBhbHdheXMgcHJvYmxlbWF0aWNhbCBmb3IKKwliaW5hcnkgb25seSBpbnN0YWxsYXRpb25zLgorCSogZml4aW5jbHVkZXM6IFJlbW92ZSBpbml0aWFsaXphdGlvbiBvZiAke1NSQ0RJUn0uICBEb24ndAorCWV4cGxpY2l0bHkgY29weSBvdmVyIG11bHRpbWVkaWEvYXVkaW9fZXJybm8uaDsgc2hvdWxkIGJlIGhhbmRsZWQKKwlieSBPY3QgMTEsIDE5OTMgY2hhbmdlLgorCSogZml4aW5jLnN2cjQ6IFJlbW92ZSBpbml0aWFsaXphdGlvbiBvZiAke1NSQ0RJUn0uCisJKiBmaXhpbmMuc2NvLCBmaXhpbmMuZGd1eDogTGlrZXdpc2UuCisKK0ZyaSBNYXkgMjAgMTI6NDg6MjQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UpOiBFbWl0IGNvbmRpdGlvbmFsIGp1bXAgYXJvdW5kCisJdW5jb25kaXRpb25hbCBsb29wIGV4aXQgaW5zdGVhZCBvZiBjb25kaXRpb25hbCBsb29wIGV4aXQuCisKKwkqIHJzNjAwMC5jIChvdXRwdXRfcHJvbG9nKTogVXNlIG11bHRpcGxlIGZwdXRzIGNhbGxzIGluc3RlYWQgb2YKKwlvbmUgY2FsbCB3aXRoIG11bHRpcGxlIHN0cmluZ3MuCisKKwkqIGlyaXM0LmggKFNUQVJURklMRV9TUEVDLCBMSUJfU1BFQyk6IERlZmluZS4KKworCSogeGNvZmZvdXQuYyAoTUFLRV9MSU5FX1NBRkUpOiBEZWxldGUuCisJKEFTTV9PVVRQVVRfTEJCLCBBU01fT1VUUFVUX0xCRSk6IERvbid0IHVzZSBNQUtFX0xJTkVfU0FGRS4KKworRnJpIE1heSAyMCAwMToxODozMCAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWIgKGJhc2ljX21hY2hpbmUpOiBBY2NlcHQgY3h1eCouCisKK1RodSBNYXkgMTkgMTk6MTI6NDEgMTk5NCAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IE9ubHkgZGVzdHJveSB0ZW1wcyBoZXJlLCBpZiAtZnNob3J0LXRlbXBzCisJaXMgZ2l2ZW4uCisKK1RodSBNYXkgMTkgMTk6MDc6NTkgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3ViOiBGaXggdW5yZWNvZ25pemVkIG9zIGVycm9yIG1lc3NhZ2UuCisKK1RodSBNYXkgMTkgMTc6NDY6NTUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFdoZW4gc2VlaW5nIGlmIGFuIGVxdWl2YWxlbnQKKwlyZWdpc3RlciBjYW4gaGF2ZSBpdCdzIG91dHB1dCByZWxvYWQgZGVsZXRlZCwgY2hlY2sgZm9yIFJFR19ERUFECisJbm90ZXMgZm9yIHJlbG9hZF9pbiBpbnN0ZWFkIG9mIGNhbGxpbmcgZGVhZF9vcl9zZXRfcC4KKworVGh1IE1heSAxOSAxNjozODozMiAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogZW1pdC1ydGwuYyAob3BlcmFuZF9zdWJ3b3JkKTogRml4IGFyZyBvZiBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUKKwlhbmQgLi5fRE9VQkxFLiAgUGVybWl0IGZsb2F0IHN1YndvcmQgZXh0cmFjdGlvbiB3aGVuIGhvc3QncyB3b3JkCisJd2lkdGggaXMgd2lkZXIgdGhhbiB0YXJnZXQncy4KKworVGh1IE1heSAxOSAxNTowOToyMSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBNYWtlIE9TRi8xIGdldG9wdC5oIGZpeCB3b3JrIG9uIEFJWCBhbHNvLgorCitXZWQgTWF5IDE4IDE1OjM0OjEwIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBmaXhpbmNsdWRlczogQWRkIGZvcndhcmQgZGVjbGFyYXRpb24gb2Ygc3RydWN0IGV4Y2VwdGlvbiB0bworCVN1bk9TIDQgbWF0aC5oLgorCitXZWQgTWF5IDE4IDEyOjQ2OjQ2IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6ICBBbGxvdyBhbnkgaW50ZWdyYWwgdHlwZXMKKwlmb3IgYml0IGZpZWxkcy4gIChTcGVjaWZpY2FsbHksIEMrKyBub3cgaGFzIGEgJ2Jvb2wnIHR5cGUuKQorCitXZWQgTWF5IDE4IDE2OjMyOjQwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAoY29tcGFyZV9zcGlsbF9yZWdzKTogRml4IHR5cG8gaW4gZGVjbGFyYXRpb24uCisKK1dlZCBNYXkgMTggMTA6Mzk6MDAgMTk5NCAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQorCisJKiBmaXhpbmMuc3ZyNDogQXZvaWQgdGhlIFNWUjQgdHlwZWRlZiBvZiBib29sIGluIGN1cnNlcy5oIHdoZW4KKwljb21waWxpbmcgZm9yIEMrKywgc2luY2UgZysrIG5vdyBzdXBwb3J0cyBpdCBhcyBhbiBvZmZpY2lhbCB0eXBlbmFtZS4KKworVHVlIE1heSAxNyAxODowNjozMiAxOTk0ICBNYXR0aGlhcyBQZmFsbGVyICAobGVvQG1hcmNvLmRlKQorCisJKiBuczMyay5tZDogRG9uJ3QgdXNlIHRoZSBleHRzZC9leHRkIGluc3RydWN0aW9ucyBvbiB0aGUgbnMzMjUzMi4KKworVHVlIE1heSAxNyAxNzo0NDozOCAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogbWFrZS1jYzEuY29tIChDRkxBR1MpOiBTZXBhcmF0ZSBpbmNsdWRlIGZpbGUgaGFuZGxpbmc7IGZvcgorCXN0YWdlIDEsIENGTEFHUzEgaXMgYXBwZW5kZWQgdG8gQ0ZMQUdTLCBvdGhlcndpc2UgQ0ZMQUdTMi4KKworVHVlIE1heSAxNyAxNjozNToyMiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY29udmVydC5jIChjb252ZXJ0X3RvX3JlYWwpOiBBY2NlcHQgYm9vbGVhbiB2YWx1ZXMuCisKKwkqIGNvbmZpZy9tNjhrL2hwMzIwLmg6ICNkZWZpbmUgTk9fSU1QTElDSVRfRVhURVJOX0MKKworVHVlIE1heSAxNyAxNTo1MjowNSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBsaWJnY2MyLmMgKF9fdW1vZGRpMyk6IENvcnJlY3QgdHlwZSBvZiB2YXJpYWJsZSBgdycuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2V0KTogTW92ZSBjYWxsIHRvIG1ha2VfZmllbGRfYXNzaWdubWVudAorCXRvIGVuZDsgaWYgU1JDIG9yIERFU1QgaXMgYSAoY2xvYmJlciAoY29uc3RfaW50IDApKSwgcmV0dXJuIGl0LgorCShmb3JjZV90b19tb2RlKTogSWYgWCBpcyBhIENBTEwsIGp1c3QgcmV0dXJuIGl0LgorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogUHJvcGVybHkgYWNjb3VudCBmb3IgY29zdCB3aGVuCisJY29uc3RhbnQgaXMgZm9yY2VkIHRvIG1lbW9yeSB0byBlbnN1cmUgc2FtZSBhbHRlcm5hdGl2ZSBjaG9zZW4gbGF0ZXIuCisKK1R1ZSBNYXkgMTcgMTE6MzA6MTkgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9zZXQpOiBVc2UgcnR4X2VxdWFsX3AgdG8gY29tcGFyZSBjY191c2UgYW5kIGl0cworCXNldHRlci4KKwkobWFrZV9leHRyYWN0aW9uKTogRG9uJ3QgcHV0IGEgc3VicmVnIGFyb3VuZCBhIHJlZ2lzdGVyIGlmIGl0IGlzIAorCWFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbW9kZS4KKworCSogcmVsb2FkMS5jIChjb21wYXJlX3NwaWxsX3JlZ3MpOiBOZXcgZnVuY3Rpb24uCisJKHJlbG9hZF9hc19uZWVkZWQpOiBTb3J0IHRoZSBzcGlsbGVkIHJlZ3MuCisJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBJZiB3ZSBoYXZlIGdyb3VwIG5lZWRzIGFuZCBmYWlsdXJlIHdvdWxkIGJlCisJZmF0YWwsIGRvIG5vdCB0cnkgdG8gZG8gcm91bmQtcm9iaW4gYWxsb2NhdGlvbiBvZiB0aGUgc3BpbGwgcmVncy4KKworTW9uIE1heSAxNiAxODo1ODoxMCAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLm1kICh6ZXJvX2V4dGVuZHFpZGkyKTogRml4IG9taXNzaW9uIG9mIFRBUkdFVF9QT1dFUlBDNjQKKwl0ZXN0IGluIHByZXZpb3VzIGNoYW5nZS4KKworTW9uIE1heSAxNiAxNDo1OToyNSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogIFdoZW4gZW1pdHRpbmcgYW4gRU5VTUVSQUxfVFlQRSwgaWYKKwl0aGUgcHJlY2lzaW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IHByZWNpc2lvbiAocGVyaGFwcworCWJlY2F1c2Ugb2YgLWZzaG9ydC1lbnVtcyksIHdyaXRlIG91dCB0aGUgcHJlY2lzaW9uLgorCitNb24gTWF5IDE2IDE3OjQ0OjQ5IDE5OTQgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiByZWFsLmMgKGVyZWFsX2Zyb21faW50LCBlcmVhbF90b19pbnQsIGV0YXJzaW5nbGUpOiAgQ29ycmVjdAorCXNpZ25lZC91bnNpZ25lZCBkaXNjcmVwYW5jaWVzLgorCShlcmVhbF9mcm9tX2RvdWJsZSk6IEF2b2lkICJyaWdodCBzaGlmdCBjb3VudCB0b28gYmlnIiB3YXJuaW5nCisJaW4gcHJldmlvdXMgY2hhbmdlLgorCSogZmluYWwuYyAoc3BsaXRfZG91YmxlKTogRml4IGFyZyBvZiBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUuCisKKwkqIHJlYWwuaCAoUkVBTF9WQUxVRV9GUk9NX1RBUkdFVF9TSU5HTEUsIC4uX0RPVUJMRSk6ICBDaGFuZ2UKKwlhcmcgZnJvbSBsb25nIHRvIEhPU1RfV0lERV9JTlQuCisJKiByZWFsLmMgKGVyZWFsX2Zyb21fZmxvYXQsIC4uX2RvdWJsZSk6IExpa2V3aXNlLCBhbmQgdW5wYWNrCisJdGhlIEhPU1RfV0lERV9JTlRzLgorCitNb24gTWF5IDE2IDE2OjE2OjMyIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgIChyd2UxMUBjbC5jYW0uYWMudWspCisKKwkqIGZsb3cuYyAodHJ5X3ByZV9pbmNyZW1lbnRfMSk6IERvbid0IHRyeSB0byBjcmVhdGUgYSBwcmUtaW5jcmVtZW50CisJZXhwcmVzc2lvbiBpZiB0aGUgcmVnaXN0ZXIgZGllcyBpbiB0aGUgc3VjY2VlZGluZyBpbnNuLgorCisJKiBleHByLmM6IFVzZSAjaWZkZWYgVEFSR0VUX0VET00sIG5vdCAjaWYuCisKKwkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogV2hlbiB7emVybyxzaWdufV9leHRlbmRpbmcsIGFsbG93IGEgd2lkZXIKKwlpbnRlcm1lZGlhdGUgdGhhbiB0b19tb2RlIGlmIHRydW5jYXRpb24gaXMgYSBuby1vcC4KKworTW9uIE1heSAxNiAxMTo0OToyOCAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIG02OGsvYXBvbGxvNjguaCAoUkVHSVNURVJfUFJFRklYX01EKTogRGVsZXRlLgorCitNb24gTWF5IDE2IDA4OjExOjU3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJzNjAwMC5jIChyczYwMDBfY29udmVydF9wcmVpbmNzKTogRGVsZXRlLgorCSogcnM2MDAwLmggKEZJTkFMX1BSRVNDQU5fSU5TTik6IERlbGV0ZS4KKworCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IFJld29yayB0byB1c2UKKwlwcmVjaXNpb24sIG5vdCBzaXplLgorCUFsbG93IGNvbnZlcnNpb25zIGZyb20gaW50ZWdlciB0byBwb2ludGVyIGlmIGludCBpcyB3aWRlIGVub3VnaC4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogSGFuZGxlIFZBTFVFUyBiZWluZyBhbiBFUlJPUl9NQVJLLgorCisJKiByczYwMDAubWQ6IFJlcGxhY2UgYm9ndXMgImFuZGlsIiBvcGNvZGUgd2l0aCBybGlubS4KKworU2F0IE1heSAxNCAyMToyNjowNSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGhhcmQtcmVnLXNldC5oIChHT19JRl9IQVJEX1JFR19FUVVBTCk6IEZpeCB0eXBvLgorCisJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IFR3byBDQUxMX0lOU05zIG9ubHkgY29tcGFyZSBlcXVhbCBpZgorCXRoZWlyIENBTExfSU5TTl9GVU5DVElPTl9VU0FHRXMgYXJlIHRoZSBzYW1lIGFzIHdlbGwuCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IE1ha2Ugc3VyZSBhIGZ1bmN0aW9uIHJlc3VsdCByZWcKKwlpcyBzdGlsbCBsaXZlIGlmIGl0IGNvbnRhaW5zIGFuIGFyZ3VtZW50LgorCitGcmkgTWF5IDEzIDIyOjE3OjQ4IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcyk6IEZpeCB0eXBvLgorCitGcmkgTWF5IDEzIDE4OjU0OjM4IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBpbnRlZ3JhdGUuYyAoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IFVzZSBjb3B5X25vZGUgdG8gbWFrZSBhIGNvcHkKKwlvZiB0aGUgZGVjbC4gIEFsc28gY2FsbCBjb3B5X2xhbmdfZGVjbCB0byBjb3B5IHRoZQorCWxhbmd1YWdlLXNwZWNpZmljIGJpdHMuCisJKiB0cmVlLmg6IERlY2xhcmUgY29weV9sYW5nX2RlY2wuCisJKiBjLWRlY2wuYyAoY29weV9sYW5nX2RlY2wpOiBOby1vcCBmdW5jdGlvbiB0aGF0IHdpbGwgbmV2ZXIKKwlhY3R1YWxseSBiZSBjYWxsZWQuCisKK0ZyaSBNYXkgMTMgMTU6MTI6MjAgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY3NlLmMgKGNzZV9pbnNuKTogQ29ycmVjdGx5IGNoZWNrIGZvciB0d28gbW9kZXMgYmVpbmcgdGhlCisJc2FtZSBudW1iZXIgb2Ygd29yZHMuCisKK0ZyaSBNYXkgMTMgMDU6MDM6NTEgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLmluIChlbnVtbGlzdCk6IEFkZCBlcnJvciBhbHRlcm5hdGl2ZS4KKworVGh1IE1heSAxMiAyMzoyNTozOCAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogYy1jb21tb24uYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogSWYgZXhwciBpcyBhIEJJVF9BTkRfRVhQUgorCXdoZXJlIG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgaW50ZWdlcl9vbmVwLCBqdXN0IHJldHVybiBleHByLgorCitUaHUgTWF5IDEyIDIwOjA4OjQ5IDE5OTQgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCUZpeHVwIGxpZmV0aW1lIG9mIHRlbXBvcmFyaWVzLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IE9ubHkgZGVzdHJveSB0ZW1wb3JhcmllcyBhdCB0aGUgZW5kCisJb2YgZnVuY3Rpb24gY2FsbHMsIGlmIGZsYWdfc2hvcnRfdGVtcHMgaXMgc2V0LgorCSogZXhwci5jIChzYWZlX2Zyb21fcCwgZXhwYW5kX2V4cHIpOiBIYW5kbGUgQ0xFQU5VUF9QT0lOVF9FWFBScy4KKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBJbXByb3ZlIGhhbmRsaW5nIG9mIHRlbXBvcmFyaWVzIGluc2lkZQorCUNPTkRfRVhQUnMsIGN1cmVzIGNhbGwgdG8gc29ycnkuCisJKiBleHByLmMgKGRlZmVyX2NsZWFudXBzX3RvKTogTmV3IHJvdXRpbmUgdG8gaGFuZGxlIHRoZSBkZWZlcnJhbAorCW9mIGNsZWFudXBzLgorCSogZmxhZ3MuaCAoZmxhZ19zaG9ydF90ZW1wcyk6IE5ldyBmbGFnLCB0byBhbGxvdyBiZXR0ZXIgY29udHJvbAorCW92ZXIgdGhlIGxpZmV0aW1lIG9mIHRlbXBvcmFyaWVzLgorCSogdG9wbGV2LmMgKGZsYWdfc2hvcnRfdGVtcHMsIGxhbmdfb3B0aW9ucyk6IERpdHRvLgorCSogdHJlZS5kZWYgKENMRUFOVVBfUE9JTlRfRVhQUik6IEFkZCwgdG8gYWxsb3cgYmV0dGVyIGNvbnRyb2wgb3ZlciAKKwl0aGUgbGlmZXRpbWUgb2YgdGVtcG9yYXJpZXMuCisKK1RodSBNYXkgMTIgMTk6MzM6NTQgMTk5NCAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5tZCAoZnVuY3Rpb24gdW5pdHMpOiBOdW1lcm91cyBjeWNsZSBjb3VudCBjaGFuZ2UuCisJKHplcm9fZXh0ZW5kcWlkaTIsIGV4dGVuZHFpZGkyLCB6ZXJvX2V4dGVuZGhpZGkyKTogTmV3IHBhdHRlcm5zLgorCShleHRlbmRoaWRpMiwgemVyb19leHRlbmRzaWRpMiwgZXh0ZW5kc2lkaTIpOiBMaWtld2lzZS4KKwkoemVyb19leHRlbmRxaXNpMiwgemVyb19leHRlbmRxaWhpMiwgemVyb19leHRlbmRoaXNpMik6IFVzZQorCWFuZGlsL2FuZGkgaW5zdGVhZCBvZiBybGlubS9ybHdpbm0uCisJKHplcm9fZXh0ZW5kcWloaTIpOiBBZGQgY29uZGl0aW9uIHJlZ2lzdGVyIHZhcmlhbnRzLgorCShleHRlbmRxaXNpMiwgZXh0ZW5kcWloaTIpOiBVc2UgZXh0c2IgZm9yIFBvd2VyUEMuCisJKGFkZGRpMywgc3ViZGkzLCBuZWdkaTIsIGFzaHJkaTMpOiBFbXVsYXRlIG9ubHkgaWYgIVRBUkdFVF9QT1dFUlBDNjQuCisJKG1vdmRmLCBtb3ZkaSwgbW92dGkpOiBOZXcgUG93ZXJQQzY0IHZlcnNpb25zLgorCShsb2FkL3N0b3JlIHdpdGggdXBkYXRlKTogTmV3IFBvd2VyUEM2NCBwYXR0ZXJucy4KKworVGh1IE1heSAxMiAxODo1MDo1NSAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogcmVhbC5jIChtMTZtKTogQ2hhbmdlIGZpcnN0IGFyZyB0byBpbnQ7IGFsbCBjYWxsZXJzIGNoYW5nZWQuCisKK1RodSBNYXkgMTIgMTg6NDY6MjYgMTk5NCAgQmlsbCBDb3ggIChiaWxsQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBBZGQgZGVmaW5pdGlvbiBvZiBEQkxfTUFYIHRvIG1hdGguaCBmb3IgTHlueCBtYXRoLmguCisJQ29ycmVjdCByZXR1cm4gdHlwZSBvZiBzdHJsZW4gaW4gTHlueCBzdHJpbmcuaC4KKwlEZWxldGUgZGVmaW5pdGlvbiBvZiAndm9pZCcgYXMgJ2ludCcgZnJvbSBMeW54IGN1cnNlcy5oLgorCitUaHUgTWF5IDEyIDE4OjExOjMzIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEb24ndCBjaGFuZ2UgYSBzZWNvbmRhcnkgcmVsb2FkCisJdG8gUkVMT0FEX0ZPUl9PUEVSQU5EX0FERFJFU1MuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEZpeCB0eXBvIGluIHByZXZpb3VzIGNoYW5nZS4KKworVGh1IE1heSAxMiAxNTo0ODo1NCAxOTk0ICBTdGVwaGVuIFIuIHZhbiBkZW4gQmVyZyAgKGJlcmdAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlKQorCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBSZXZlcnQgdG8gaWRlbnRpZmllcnMgZm9yCisJbW9kZSBhdHRyaWJ1dGVzLgorCSogbGliZ2NjMi5jOiBMaWtld2lzZS4KKworVGh1IE1heSAxMiAxNTo0MTozOCAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogdmF4L3htLXZtcy5oIChsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsX2dsb2JhbCk6IE5ldyBtYWNyby4KKworV2VkIE1heSAxMSAxNzo0NDo0NyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGNzZS5jIChjc2VfaW5zbik6IFNldCBzcmNfZXF2IGlmIHRoZSBkZXN0IGlzIGEgU1RSSUNUX0xPV19QQVJULgorCisJKiBleHBtZWQuYyAoc3RvcmVfZml4ZWRfYml0X2ZpZWxkKTogRGVsZXRlIGNvZGUgdG8gaGFuZGxlCisJTU9ERV9GTE9BVCB2YWx1ZXMgaGVyZS4KKwkoc3RvcmVfYml0X2ZpZWxkKTogUHV0IGl0IGhlcmUgaW5zdGVhZC4KKworV2VkIE1heSAxMSAxNjoxODoyMSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhMjlrLmMgKGEyOWtfY2xvYmJlcnNfdG8pOiBOZXcgZnVuY3Rpb24uCisJKiBhMjlrLm1kIChjbG9iYmVyc190byk6IERlbGV0ZWQuCisJKGNhbGxfaW50ZXJuYWwsIGNhbGxfdmFsdWVfaW50ZXJuYWwpOiBOZXcgcGF0dGVybnMuCisJKGNhbGwsIGNhbGxfdmFsdWUpOiBKdXN0IGNhbGwgbmV3IHBhdHRlcm5zIGFuZCBhMjlrX2Nsb2JiZXJzX3RvLgorCisJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IFVzZSBQT0lOVEVSX1NJWkUsIGluc3RlYWQgb2Ygd2lkdGgKKwlvZiBQbW9kZSwgd2hlbiBhcHByb3ByaWF0ZS4KKworCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBQdXQgbmV3IGZ1bmN0aW9uIHVzYWdlIGRhdGEgYXQgZW5kIG9mCisJYW55IGRhdGEgYWxyZWFkeSB0aGVyZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW5fYXBwbHkpOiBMaWtld2lzZS4KKworCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK1dlZCBNYXkgMTEgMTQ6NDU6MTIgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmU6IEZpeCBoYW5kaW5nIGNhc2Ugb2Ygbm8gbGFuZ3VhZ2Ugc3ViZGlycy4KKworV2VkIE1heSAxMSAxMjoxMTo0MCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBEb24ndCByZWN1cnNpdmVseSBzZWFyY2ggc3ltbGlua3MgdG8gYC4nLgorCitUdWUgTWF5IDEwIDE3OjQ5OjU3IDE5OTQgIFN0ZXBoZW4gUi4gdmFuIGRlbiBCZXJnICAoYmVyZ0Bwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGUpCisKKwkqIGNvbmZpZ3VyZTogSW5jbHVkZSBzdGFnZTQgaW4gdGhlIGxpc3QuCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBLbHVkZ2UgaW4gc3RhZ2VOLy4uL2luY2x1ZGUgaW5zdGVhZCBvZgorCWluY2x1ZGUuCisKK01vbiBNYXkgIDkgMjE6MDQ6MTkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzcGFyYy5oICgqVEYqX0xJQkNBTEwpOiBEZWxldGUgYConIGZyb20gbGliY2FsbCBuYW1lLgorCitNb24gTWF5ICA5IDE4OjQyOjEwIDE5OTQgIE1hdHRoaWFzIFBmYWxsZXIgIChsZW9AbWFyY28uZGUpCisKKwkqIG5zMzJrLmMgKG91dHB1dF9tb3ZlX2Rjb25zdCk6IEZpeCBlcnJvcnMgb24gcmFuZ2VzLgorCitNb24gTWF5ICA5IDE4OjMzOjE2IDE5OTQgIENocmlzIFRvcmVrICAodG9yZWtAYnNkaS5jb20pCisKKwkqIGdjYy5jIChkZWxldGVfaWZfb3JkaW5hcnkpOiBOZXcgZnVuY3Rpb24uCisJKGRlbGV0ZV90ZW1wX2ZpbGVzLCBkZWxldGVfZmFpbHVyZV9xdWV1ZSk6IENhbGwgaXQuCisKK1NhdCBNYXkgIDcgMTI6MTI6NTggMTk5NCAgQW5kcmVhcyBOZXViYWNoZXIgIChhbmV1YmFjaEByaXNjLnVuaS1saW56LmFjLmF0KQorCisJKiBpMzg2L3NlcS1zeXN2My5oIChMSUJfU1BFQyk6IFN1cHBvcnQgLWZzaGFyZWQtZGF0YS4KKwkoQ1BQX1NQRUMpOiBTZXQgX1NFUVVFTlRfIHRvIDEuCisJKFNIQVJFRF9TRUNUSU9OX0FTTV9PUCwgQVNNX09VVFBVVF9TSEFSRURfQ09NTU9OKTogU3VwcGx5IG5ldyBtYWNyb3MuCisJKFNIQVJFRF9CU1NfU0VDVElPTl9BU01fT1AsIEJTU19TRUNUSU9OX0ZVTkNUSU9OKTogTGlrZXdpc2UuCisKK1NhdCBNYXkgIDcgMTA6MDk6NDkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVvcmcuYyAobWFya197cmVmZXJlbmNlZCxzZXR9X3Jlc291cmNlcyk6IEZpeCB0eXBvcyBpbiBsYXN0IGNoYW5nZS4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IERvbid0IHRyeSB0byBkZWxldGUgb3V0cHV0IHJlbG9hZAorCWlmIHRoZXJlIGlzbid0IG9uZS4KKworCSogaTM4Ni5oIChSRUdfQUxMT0NfT1JERVIpOiBOZXcgbWFjcm8uCisKKwkqIHNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbiwgYXR0YWNoX2RlYXRoc19pbnNuKTogTG9vayBhdAorCUNBTExfSU5TTl9GVU5DVElPTl9VU0FHRS4KKworCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBSZW1vdmUgcHJldmlvdXMgY2hhbmdlLgorCitGcmkgTWF5ICA2IDIwOjMyOjIyIDE5OTQgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCisKKwkqIHNwYXJjLmMgKGxlYWZfcmVnX2JhY2ttYXApOiBEZWxldGUuCisJKHNwYXJjX2ZsYXRfY29tcHV0ZV9mcmFtZV9zaXplKTogUmVuYW1lZCBmcm9tCisJc3BhcmNfZnJ3X2NvbXB1dGVfZnJhbWVfc2l6ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKHNwYXJjX2ZsYXRfc2F2ZV9yZXN0b3JlKTogTGlrZXdpc2UuCisJKHNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJRGVsZXRlIGRlY2wgb2YgY2FsbF91c2VkX3JlZ3MuCisJRGVsZXRlIHJlZmVyZW5jZSB0byBmcmFtZV9iYXNlX25hbWUsIHVzZSBmcmFtZSBwb2ludGVyIGV4cGxpY2l0bHkuCisJUHJpbnQgcHJvbG9ndWUgZW5kIG1hcmtlci4KKwkoc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBMaWtld2lzZSAocmVuYW1pbmcpLgorCURlbGV0ZSBkZWNscyBvZiBhc21fb3V0X2RhdGFfZmlsZSwgYXNtX291dF9maWxlLCBjYWxsX3VzZWRfcmVncy4KKwlQcmludCBlcGlsb2d1ZSBzdGFydCBtYXJrZXIuCisJKHNwYXJjX2ZsYXRfZXBpbG9ndWVfZGVsYXlfc2xvdHMpOiBMaWtld2lzZSAocmVuYW1pbmcpLgorCShzcGFyY19mbGF0X2VsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IExpa2V3aXNlLgorCSogc3BhcmMuaCAoVEFSR0VUX0ZSVyk6IEFkZCBub3RlIHNheWluZyB0aGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkLgorCShUQVJHRVRfRkxBVCk6IFJlbmFtZWQgZnJvbSBUQVJHRVRfRlJXX0NPTVBBVC4KKwkoVEFSR0VUX1NXSVRDSEVTKTogRGVsZXRlIHJlZmVyZW5jZXMgdG8gLW1mcncsIC1tZnJ3LWNvbXBhdC4KKwlBZGQgLW1mbGF0LgorCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IElmIC1tZmxhdCwgZml4ICVpNywgcmVuYW1lICIlZnAiCisJdG8gIiVpNyIsIGFuZCBtYWtlICVnNyBhIGdsb2JhbF9yZWcuCisJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBIYW5kbGUgLW1mbGF0LgorCShJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUKTogTGlrZXdpc2UuCisJKEFSR19QT0lOVEVSX1JFR05VTSk6IEV4cGxpY2l0bHkgc2F5IGl0J3MgdGhlIGZyYW1lIHBvaW50ZXIuCisJKExFQUZfUkVHSVNURVJTKTogTWFrZSAlZzcgbm90IGEgbGVhZiByZWdpc3Rlci4KKwkobGVhZl9yZWdfYmFja21hcCk6IERlbGV0ZS4KKwkoTEVBRl9SRUdfQkFDS01BUCk6IExpa2V3aXNlLgorCShGVU5DVElPTl9QUk9MT0dVRSk6IEhhbmRsZSAtbWZsYXQuCisJKEZVTkNUSU9OX0VQSUxPR1VFKTogTGlrZXdpc2UuCisJKERFTEFZX1NMT1RTX0ZPUl9FUElMT0dVRSk6IExpa2V3aXNlLgorCShFTElHSUJMRV9GT1JfRVBJTE9HVUVfREVMQVkpOiBMaWtld2lzZS4KKworRnJpIE1heSAgNiAxNDowNTowMCAxOTk0ICBTdGVwaGVuIFIuIHZhbiBkZW4gQmVyZyAgKGJlcmdAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlKQorCisJKiB0cmVlLmggKFRZUEVfQVRUUklCVVRFUyk6IE5ldyBtYWNyby4KKwkoc3RydWN0IHRyZWVfdHlwZSk6IGF0dHJpYnV0ZXMsIG5ldyBmaWVsZC4KKwkocHJlY2lzaW9uKTogTW92ZSB0aGlzIGZpZWxkIHVwIGZvciBiZXR0ZXIgYWxpZ25tZW50LgorCShhdHRyaWJ1dGVfbGlzdF97ZXF1YWwsY29udGFpbmVkfSk6IFByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9ucy4KKwkoYnVpbGRfdHlwZV9hdHRyaWJ1dGVfdmFyaWFudCk6IFByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9uLgorCSogYy1wYXJzZS5pbjogUmV3cml0ZSBhdHRyaWJ1dGUgcGFyc2luZzsgdXBkYXRlIHRoZSBleHBlY3RlZAorCWNvbmZsaWN0cyBhbmQgc3RhdGUgbnVtYmVycy4KKwkqIHRyZWUuYyAoVFlQRV9IQVNIKTogTW92ZSBkZWZpbml0aW9uIHRvIHRvcCBvZiBmaWxlLgorCShtYWtlX25vZGUpOiBBZGQgc3VwcG9ydCBmb3IgU0VUX0RFRkFVTFRfVFlQRV9BVFRSSUJVVEVTLgorCShidWlsZF90eXBlX2F0dHJpYnV0ZV92YXJpYW50KTogTmV3IGZ1bmN0aW9uLgorCSh0eXBlX2hhc2hfbG9va3VwKTogQ2hlY2sgaWYgdGhlIGF0dHJpYnV0ZXMgbWF0Y2guCisJKGF0dHJpYnV0ZV9saXN0X3tlcXVhbCxjb250YWluZWR9KTogTmV3IGZ1bmN0aW9ucy4KKwkqIGMtdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogQWRkIGF0dHJpYnV0ZSBtZXJnaW5nLgorCShjb21wX3R5cGVzKTogVXNlIENPTVBfVFlQRV9BVFRSSUJVVEVTIG1hY3JvLgorCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgYXR0cmlidXRlcy4KKwkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IE1vdmUgdGhlIGF0dHJpYnV0ZQorCXJlY29nbml0aW9uIGFuZCByZWplY3Rpb24gaGVyZSBmcm9tIGMtcGFyc2UuaW4uCisJKGRlY2xfYXR0cmlidXRlcyk6IFVzZSBWQUxJRF9NQUNISU5FX0FUVFJJQlVURSBtYWNyby4KKworCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogRWxpbWluYXRlIHNldmVyYWwgcGVybWFuZW50CisJY2FsbF9maXhlZF9yZWdzLgorCisJKiBydGwuZGVmIChDQUxMX0lOU04pOiBEZWZpbmUgbmV3IENBTExfSU5TTl9GVU5DVElPTl9VU0FHRSBmaWVsZC4KKwkqIHJ0bC5oIChDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UpOiBOZXcgbWFjcm8uCisJKGZpbmRfcmVneyxub31fZnVzYWdlKTogUHJvdG90eXBlIGZvciBuZXcgZnVuY3Rpb24uCisJKiBydGxhbmFsLmMgKHJlZ191c2VkX2JldHdlZW5fcCk6IENoZWNrIHVzYWdlIGV4cHJzIG9uIENBTExfSU5TTnMuCisJKHJlZ19yZWZlcmVuY2VkX2JldHdlZW5fcCwgcmVnX3NldF9wLCBkZWFkX29yX3NldF9yZWdub19wKTogTGlrZXdpc2UuCisJKGZpbmRfcmVneyxub31fZnVzYWdlKTogTmV3IGZ1bmN0aW9ucy4KKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBSZXN0cmljdCBjb21iaW5pbmcgb24gQ0FMTF9JTlNOcy4KKwkoZGlzdHJpYnV0ZV97bm90ZXMsbGlua3N9KTogTG9vayBhdCBDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UuCisJKiBjc2UuYyAoY3NlX2luc24pOiBJbnZhbGlkYXRlIENMT0JCRVJlZCByZWdpc3RlcnMuCisJKGNvdW50X3JlZ191c2FnZSk6IENvdW50IHJlZ2lzdGVycyBpbiBVU0UgcnRscyBvbiBDQUxMX0lOU05zLgorCSogZW1pdC1ydGwuYyAobWFrZV9jYWxsX2luc25fcmF3KTogTmV3IGZ1bmN0aW9uLgorCShlbWl0X2NhbGxfaW5zbnssX2JlZm9yZX0pOiBVc2UgbWFrZV9jYWxsX2luc25fcmF3LgorCSogY2FsbHMuYyAocHJlcGFyZV9jYWxsX2FkZHJlc3MsIGVtaXRfY2FsbF8xLCBleHBhbmRfY2FsbCk6IENoYW5nZQorCWZyb20gVVNFIGFuZCBDTE9CQkVSIGluc25zIHRvIHVzaW5nIENBTExfSU5TTl9GVU5DVElPTl9VU0FHRS4KKwkoZW1pdF9saWJyYXJ5X2NhbGx7LF92YWx1ZX0pOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAodXNlX3JlZ3MsIGV4cGFuZF9idWlsdGluX2FwcGx5KTogTGlrZXdpc2UuCisJKiBleHByLmggKHVzZV9yZWdzKTogTGlrZXdpc2UuCisJKiBmbG93LmMgKGZsb3dfYW5hbHlzaXMsIGZpbmRfYmFzaWNfYmxvY2tzKTogTGlrZXdpc2UuCisJKiBjYWxsZXItc2F2ZS5jIChpbnNlcnRfc2F2ZV9yZXN0b3JlKTogTGlrZXdpc2UuCisJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IExpa2V3aXNlLgorCSoganVtcC5jIChmaW5kX2Nyb3NzX2p1bXAsIGdldF9sYWJlbF97YmVmb3JlLGFmdGVyfSk6IExpa2V3aXNlLgorCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IExpa2V3aXNlLgorCSogcmVvcmcuYyAobWFya19yZWZlcmVuY2VkX3Jlc291cmNlcywgbWFya19zZXRfcmVzb3VyY2VzKTogTGlrZXdpc2UuCisJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcsIGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOgorCUNvcHkgQ0FMTF9JTlNOX0ZVTkNUSU9OX1VTQUdFIGZpZWxkLgorCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBCYW4gZmlsbGVkIGFyZ3VtZW50IHJlZ2lzdGVycy4KKwkqIGNhbGxlci1zYXZlLmMgKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IENBTExfSU5TTl9GVU5DVElPTl9VU0FHRQorCXJlcXVpcmVzIGEgc2hhcnBlciBsaXZlbGluZXNzIGNoZWNrLgorCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBNYXJrIGFsbCByZWdpc3RlcnMgbWVudGlvbmVkIGluIFVTRQorCXVzYWdlIGV4cHJlc3Npb25zIG9uIGEgQ0FMTF9JTlNOIGFzIHVzZWQuCisJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IElmIFNUQUNLX1JFR1MgaXMgZGVmaW5lZCB0d28KKwlDQUxMX0lOU05zIG9ubHkgY29tcGFyZSBlcXVhbCBpZiB0aGVpciBVU0UgdXNhZ2UgcnRscyBhcmUKKwl0aGUgc2FtZSBhcyB3ZWxsLgorCSogc3R1cGlkLmMgKHN0dXBpZF9saWZlX2FuYWx5c2lzKTogQ2hlY2sgdGhlIHVzYWdlIGluZm9ybWF0aW9uCisJb24gQ0FMTF9JTlNOcy4KKworCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU3ByZWFkIG91dCB0aGUgUkVHX0VRVUlWIG5vdGVzCisJb24gQ09OQ0FUcy4KKworRnJpIE1heSAgNiAxMjo0MzoxMCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSWdub3JlIGFsdGVybmF0aXZlcyB0aGF0IHdpbGwKKwlub3QgYmUgcmVsb2FkYWJsZSBkdWUgdG8gUFJFRkVSUkVEX1JFTE9BRF9DTEFTUy4KKworCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBKdXN0IHJldHVybgorCXZpcnR1YWxfc3RhY2tfZHluYW1pY19ydHggaWYgYXNraW5nIGZvciB6ZXJvIGJ5dGVzLgorCVNldCBjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2FsbG9jYSBoZXJlIGFuZCBhbHNvIHJlY29yZCBuZXcKKwlzdGFjayBsZXZlbCBmb3Igbm9ubG9jYWwgZ290b3MuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0FMTE9DQSk6IERvbid0CisJc2V0IGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfYWxsb2NhIGhlcmUgbm9yIHJlY29yZCBuZXcKKwlzdGFjayBsZXZlbCBmb3Igbm9ubG9jYWwgZ290b3MuCisJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogTGlrZXdpc2UuCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IFVzZSBleHByX3NpemUgd2hlbiBhcHByb3ByaWF0ZS4KKworCSogYy10eXBlY2suYyAoY29tcHR5cGVzKTogQW4gZW51bSB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0eXBlIG9mCisJc2FtZSBzaWduZWRuZXNzIGFzIHdlbGwgYXMgcHJlY2lzaW9uLgorCisJKiBhbHBoYS5oIChDT05TVF9DT1NUUyk6IFJldmlzZSBhbGwgY29zdHMuCisJKiBhbHBoYS5tZCAoYWRkc2kzLCBzdWJzaTMpOiBBZGQgZGVmaW5lX2V4cGFuZCB0byBtYWtlIAorCWFkZGRpMy9zdWJkaTM7IG9sZCBwYXR0ZXJuIGlzIG5vdyBhbm9ueW1vdXMuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfcnR4LCBjYXNlIE1VTFQpOiBEb24ndCBjb252ZXJ0IE1VTFQgdG8KKwlzaGlmdCBoZXJlLgorCShzaW1wbGlmeV9sb2dpY2FsLCBjYXNlIElPUik6IENvbnZlcnQgYmFjayB0byBQTFVTIGlmIHZhbGlkIGFuZAorCWl0IHdpbGwgY29tYmluZSB3aXRoIGFub3RoZXIgUExVUy4KKwkoZXh0cmFjdF9sZWZ0X3NoaWZ0KTogTmV3IGZ1bmN0aW9uLgorCShtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiwgY2FzZSBBU0hJRlRSVCk6IFNpbXBsaWZ5IGJ5IGNhbGxpbmcgaXQuCisJKGZvcmNlX3RvX21vZGUpOiBEb24ndCBpZ25vcmUgaWYgWCBpcyBhIFNVQlJFRy4KKwkoZm9yY2VfdG9fbW9kZSwgY2FzZSBBTkQpOiBUcnkgdG8gdHVybiB1bmNoZWNrZWQgYml0cyBvbgorCWluc3RlYWQgb2YganVzdCBvZmYgYW5kIHNlZSB3aGljaCBpcyBjaGVhcGVyLgorCitGcmkgTWF5ICA2IDExOjIyOjIzIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogTWFrZWZpbGUuaW4gKGxpYmdjYzEuYSwgbGliZ2NjMi5hKTogRG9uJ3QgaWdub3JlIGVycm9ycyBpbiBmb3IKKwlsb29wcyBvdmVyICQoTElCWzEyXUZVTkNTX0VYVFJBKS4KKworRnJpIE1heSAgNiAwNjoxNDo1NiAxOTk0ICBNaWtlIFN0dW1wICAobXJzQGN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2NsZWFudXBzX3RvKTogVGVsbCBleHBhbmRfZXhwciB0aGF0IHdlIGFyZSBnb2luZworCXRvIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoZSBjbGVhbnVwLgorCitUaHUgTWF5ICA1IDE3OjQ1OjAyIDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKKworCSogZ2NjLmMgKGRvX3NwZWNfMSk6IElmIC1zYXZlLXRlbXBzLCBhbHdheXMgY2xlYXIgdGhlIGRlbGV0aW9uIGZsYWcuCisKK1RodSBNYXkgIDUgMTM6Mzk6MzUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgsIGNhc2UgU1VCUkVHKTogRG9uJ3QgY2FsbCBmb3JjZV90b19tb2RlLgorCShzaW1wbGlmeV9zZXQpOiBDYWxsIGZvcmNlX3RvX21vZGUgaGVyZS4KKworCSogbTY4ay5tZCAobW92aGkpOiBTaW1wbGlmeSBjb2RlIGludm9sdmluZyBqdW1wLXRhYmxlCisJcmVmZXJlbmNlLgorCShsb2FkX2FkZHJlc3MpOiBIYW5kbGUgY2FzZSBvZiBqdW1wLXRhYmxlIHJlZmVyZW5jZTsgb3V0cHV0CisJcmVxdWlyZWQgbGFiZWwuCisKK1RodSBNYXkgIDUgMTI6Mjg6MTYgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiBjY2NwLmMgKG1haW4pOiBJbmNsdWRlIHNvdXJjZSBmaWxlIG5hbWUgaW4gZGVwZW5kZW5jeSBvdXRwdXQuCisKK1dlZCBNYXkgIDQgMTg6NDU6MDcgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWcuc3ViOiBSZW1vdmUgZHVwbGljYXRlIC1mcmVlYnNkKiBlbnRyeS4KKworV2VkIE1heSAgNCAxODowMzozNCAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChzcGVjaWFsX3N5bWJvbCk6IERvbid0IGNvcHkgc2ltcGxlIHN0cmluZ3MsIHVzZSB3Y2hhcl90eXBlLgorCShtYWluKTogU2V0dXAgd2NoYXJfdHlwZSBmb3IgQysrIGlmIG5lZWRlZC4KKwkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IFVzZSB3Y2hhcl90eXBlLgorCitXZWQgTWF5ICA0IDE3OjE5OjM0IDE5OTQgIE1pa2UgQ29sbGlzb24gIChjb2xsaXNvbkBzdy5zdHJhdHVzLmNvbSkKKworCSogcmVsb2FkLmMgKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCk6IFVzZSBUWVBFIGZvciBzZWNvbmRhcnkgdHlwZQorCWlmIGl0IGlzIFJFTE9BRF9GT1Jfe0lOUFVULE9VVFBVVH1fQUREUkVTUy4KKworV2VkIE1heSAgNCAxNjozNTo0OSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjb25maWd1cmUgKGkzODYtZ251KTogTmV3LCBzYW1lIGFzIGkzODYtbWFjaC4KKworCSogZ2xvYmFsLmMgKGZpbmRfcmVnKTogV2hlbiBsb29raW5nIGZvciBsb2NhbGx5LWFsbG9jYXRlZCBoYXJkCisJcmVncyB0byByZWNsYWltLCB1c2UgUkVHX0FMTE9DX09SREVSIHRvIGZpbmQgbGVhc3QgdXNlZC4KKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEFkZCBhbm90aGVyIHdheSB0byBkZWxldGUgYW4KKwlvdXRwdXQgcmVsb2FkLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCwgcmVsb2FkX2FzX25lZWRlZCk6IENoZWNrIGZvciB1c2Ugb2YgcmV0dXJuCisJcmVnaXN0ZXIgd2l0aCByZWdfcmVmZXJlbmNlZF9wLCBub3QgcmVnX21lbnRpb25lZF9wLgorCitXZWQgTWF5ICA0IDE0OjIzOjUxIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogRGVsZXRlIFRBUkdFVF9MTE9ORzEyOCByZWZlcmVuY2VzLgorCSogbWlwcy5oIChNQVNLX0xMT05HMTI4LCBUQVJHRVRfTExPTkcxMjgpOiBEZWxldGUuCisJKFRBUkdFVF9TV0lUQ0hFUyk6IERlbGV0ZSAtbWxvbmdsb25nMTI4IG9wdGlvbi4KKwkoTE9OR19MT05HX1RZUEVfU0laRSk6IERlbGV0ZSBUQVJHRVRfTExPTkcxMjggcmVmZXJlbmNlLgorCisJKiBtaXBzL2JzZC00LmgsIG1pcHMvYnNkLTUuaCwgbWlwcy9uZXdzNC5oLCBtaXBzL25ld3M1LmgsCisJbWlwcy9ud3MzMjUwdjQuaCwgbWlwcy9zdnIzLTQuaCwgbWlwcy9zdnIzLTUuaCwgbWlwcy9zdnI0LTQuaCwKKwltaXBzL3N2cjQtNS5oIChDUFBfU1BFQyk6IERlbGV0ZS4KKwkqIG1pcHMvZGVjLWJzZC5oIChDUFBfU1BFQyk6IERlZmluZSBfX1NJWkVfVFlQRV9fLAorCV9fUFRSRElGRl9UWVBFX18sIGFuZCBfX21pcHMuCisJKFNJWkVfVFlQRSk6IERlbGV0ZS4KKwkqIG1pcHMvZGVjLW9zZjEuaCAoUFRSRElGRl9UWVBFKTogRGVsZXRlLgorCShDUFBfU1BFQyk6IERlZmluZSwgb3ZlcnJpZGluZyB1bHRyaXguaCB2ZXJzaW9uLgorCSogbWlwcy9pcmlzNS5oIChDUFBfU1BFQyk6IERlZmluZSBfX1NJWkVfVFlQRV9fLCBfX1BUUkRJRkZfVFlQRV9fLAorCWFuZCBfX21pcHMuCisJKiBtaXBzL29zZnJvc2UuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX19QVFJESUZGX1RZUEVfXyBhbmQgX19taXBzLgorCShQVFJESUZGX1RZUEUpOiBEZWxldGUuCisJKFNJWkVfVFlQRSk6IERlZmluZS4KKwkoU0VUX0FTTV9PUCk6IERlZmluZS4KKwkqIGNvbmZpZy9taXBzL3VsdHJpeC5oIChDUFBfU1BFQyk6IERlbGV0ZS4KKwkoU0laRV9UWVBFKTogRGVsZXRlLgorCitUdWUgTWF5ICAzIDE5OjA0OjQzIDE5OTQgIEphc29uIE1lcnJpbGwgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1vYmpsaXN0KTogRGVwZW5kIG9uIE9CSlMgYW5kIEJDX09CSlMgc28gdGhhdAorCXN1YmRpciBtYWtlcyB3aWxsIGtub3cgdG8gcmUtbGluay4KKworTW9uIE1heSAgMiAxNjowNTowNSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6ICBJZiBzdGF0aWMgY29uc3RzIGhhdmVuJ3QgYmVlbiB3cml0dGVuCisJb3V0IHlldCwgZG9uJ3QgZG8gaXQganVzdCBiZWNhdXNlIFRSRUVfVVNFRCBpcyBzZXQgKGlmIHdlJ3JlCisJb3B0aW1pemluZykuICAoVGhpcyB3aW5zIGZvciBDKyssIHdoaWNoIHVzZXMgc3RhdGljIGNvbnN0cyBhIGxvdC4pCisKK01vbiBNYXkgIDIgMTY6NDI6NTkgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IE1ha2Ugc3VyZSBnZW5fY2FzZXNpIG9wZXJhbmRzIGFyZQorCXZhbGlkIGJ5IHBhc3NpbmcgdGhlbSB0aHJvdWdoIGNvcHlfdG9fbW9kZV9yZWcgaWYgbmVjZXNzYXJ5LgorCSogbWlwcy5tZCAoY2FzZXNpKTogRGVsZXRlIGZvcmNlX3JlZyBjYWxscy4KKworCSogbnMzMmsuYyAob3V0cHV0X21vdmVfZG91YmxlKTogQWx3YXlzIHVzZSBzcGxpdF9kb3VibGUgZm9yIHRoZQorCUNOU1RPUCBjYXNlLgorCisJKiBnY2MuYyAodHJhbnNsYXRlX29wdGlvbnMpOiBGb3Igb3B0aW9ucyB0aGF0IHRha2UgYW4gYXJndW1lbnQsCisJZG9uJ3Qgc2tpcCB0aGUgYXJndW1lbnQgaWYgaXQgZG9lc24ndCBleGlzdC4KKworCSogYy1kZWNsLmMgKHB1c2hkZWNsKTogVXNlIGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWxfZ2xvYmFsIGluc3RlYWQKKwlvZiBsb29rdXBfbmFtZSBmb3IgZXh0ZXJuIHJlZmVyZW5jZXMuICBEb24ndCByZXR1cm4gZHVwbGljYXRlIGRlY2wKKwlpZiBpdCBjYW1lIGZyb20gdGhlIGdsb2JhbCBiaW5kaW5nIGxldmVsLCBhbmQgdGhlcmUgZXhpc3RzIGEKKwljb25mbGljdGluZyBkZWNsIGluIGFuIGludGVydmVuaW5nIGJsb2NrLgorCShsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsX2dsb2JhbCk7IE5ldyBmdW5jdGlvbi4KKwkqIGMtdHJlZS5oIChsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsX2dsb2JhbCk6IERlY2xhcmUuCisKKwkqIHN5cy1wcm90b3MuaCAocmVhZCwgd3JpdGUpOiBMYXN0IHBhcm0gaXMgc2l6ZV90IG5vdCB1bnNpZ25lZCBpbnQuCisKKwkqIHVucm9sbC5jIChyZW1hcF9zcGxpdF9iaXZzKTogTmV3IGZ1bmN0aW9uLgorCSh1bnJvbGxfbG9vcCk6IFdoZW4gcmVtYXBwaW5nIHNwbGl0IGJpdnMgaW4gdGhlIGxhc3QgaW5zdHJ1Y3Rpb24sCisJaGFuZGxlIEpVTVBfSU5TTnMgaW4gYWRkaXRpb24gdG8gSU5TTnMuCisKK01vbiBNYXkgIDIgMTI6NTM6NTcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGNvbmZpZy9uZXh0c3RlcC5oIChJTkNMVURFX0RFRkFVTFRTKTogQWRkIGN4eF9hd2FyZSBmaWVsZC4KKwkqIGNvbmZpZy92YXgveG0tdm1zLmggKElOQ0xVREVfREVGQVVMVFMpOiBEaXR0by4KKworRnJpIEFwciAyOSAxODozMDozOCAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAY3lnbnVzLmNvbSkKKworCSogdHJlZS5oIChUWVBFX0RFQ0xfU1VQUFJFU1NfREVCVUcpOiBuZXcgbWFjcm8gdG8gc3VwcG9ydAorCXN1cHByZXNzaW5nIG9mIGRldGFpbCB0eXBlIGluZm9zIGludG8gc3RhYnMuCisJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUpOiBjaGVjayB0aGUgYWJvdmUgZmxhZyB0byBnZW5lcmF0ZSBjcm9zcworCXJlZmVyZW5jZSBpbiBzdGFicy4KKworRnJpIEFwciAyOSAwMTowMTo0NSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdGFtcC1vYmpsaXN0KTogTmV3IHRhcmdldC4KKworVGh1IEFwciAyOCAyMjoxNzoxNSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChVU0VfQUxMT0NBKTogUmVhcnJhbmdlICIncy4KKwkoRkxBR1NfVE9fUEFTUyk6IERlbGV0ZSBDTElCLCBNQUxMT0MsIE9CU1RBQ0suCisKK1RodSBBcHIgMjggMTk6MDQ6MTcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IENvcnJlY3QgdGVzdCBmb3Igc2lnbiBleHRlbmRpbmcKKwl1bnNpZ25lZCBjb25zdGFudCBpbmRleCB3aGVuIGNyZWF0aW5nIGluZGV4X2V4cHIuCisKKwkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBVc2Ugc3RhcnRfbGluZSBmb3IgbGluZSBudW1iZXIgb2YgdGhlIG5ldworCWluc3RhY2sgbGV2ZWwgcHVzaGVkIGF0IHRoZSBlbmQuCisKK1RodSBBcHIgMjggMTg6NTk6MTcgMTk5NCAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQorCisJKiBzdG10LmM6IFJlbW92ZSBvbGQgZXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQgZnJvbSB0aGUgYmFja2VuZC4KKworVGh1IEFwciAyOCAxODo1OTo1MyAxOTk0ICBUb3Jiam9ybiBHcmFubHVuZCAgKHRlZ2VAYWRkZXIuY3lnbnVzLmNvbSkKKworCSogc3BhcmMuYyAoYXJpdGhfZG91YmxlX29wZXJhbmQpOiBNb2RpZnkgdG8gYWNjZXB0IGFsbCBwb3NzaWJsZSBjb25zdGFudHMuCisJKiBzcGFyYy5tZCAoYWRkZGkzLCBzdWJkaTMsIGFuZGRpMywgaW9yZGkzLCB4b3JkaTMpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCisJKG9uZV9jbXBsZGkzKTogRG9uJ3QgYWxsb3cgY29uc3RhbnRzIGZvciBvcGVyYW5kIDEuCisKK1RodSBBcHIgMjggMTg6MTA6MTggMTk5NCAgRGF2aWQgRWRlbHNvaG4gIChlZGVsc29obkBucGFjLnN5ci5lZHUpCisKKwkqIHJzNjAwMC5tZCAoYWRkc2kzKTogUHJlZmVyIGFkZCB3aXRob3V0IGNhcnJ5IGluc3RydWN0aW9ucyBhbmQKKwlmbGFnIGlucHV0IG9wZXJhbmRzIGFzIGNvbW11dGF0aXZlIGZvciBjb25kaXRpb24gcmVnaXN0ZXIgdmFyaWFudC4KKwkoc3Vic2kzKTogRGVmaW5lIFBvd2VyUEMgcGF0dGVybnMgdXNpbmcgc3VidHJhY3Qgd2l0aG91dCBjYXJyeS4KKwkobnVtZXJvdXMpOiBGbGFnIGlucHV0IG9wZXJhbmRzIGFzIGNvbW11dGF0aXZlIGZvciBjb25kaXRpb24KKwlyZWdpc3RlciB2YXJpYW50LgorCShtb3YqIG1hdGNoZXJzKTogVXNlIG1yIGluc3RydWN0aW9uIGluICEgVEFSR0VUX1BPV0VSUEMgY2FzZSBhcworCXdlbGwgYW5kIG1yLiBpbiBjb25kaXRpb24gcmVnaXN0ZXIgdmFyaWFudC4KKwkqIHJzNjAwMC5jIChvdXRwdXRfcHJvbG9nKTogVXNlIG1yLCBsaXMsIGFuZCBsaSBpbnN0cnVjdGlvbnMuCisJVXNlIHN1YmYgaW5zdHJ1Y3Rpb24gaWYgVEFSR0VUX1BPV0VSUEMuCisJKG91dHB1dF9lcGlsb2cpOiBVc2UgY2FsL2FkZGkgaW5zdHJ1Y3Rpb24uCisKK1RodSBBcHIgMjggMTI6NDg6NTkgMTk5NCAgQW5kcmVhcyBOZXViYWNoZXIgIChhbmV1YmFjaEByaXNjLnVuaS1saW56LmFjLmF0KQorCisJKiBpMzg2L3NlcS1zeXN2My5oIChTSEFSRURfU0VDVElPTl9BU01fT1ApOiBEZWZpbmVkLgorCitUaHUgQXByIDI4IDEyOjQwOjI4IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEZpeCB0eXBvIGluIHByZXZpb3VzIHBhdGNoCisJKGFsbG93IF9fYnVpbHRpbl9uZXh0X2FyZyBpbiB2YXJhcmdzIGZ1bmN0aW9ucykuCisKK1R1ZSBBcHIgMjYgMTY6MzE6NDQgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCisKKwkqIHRyZWUuaCAoQUdHUkVHQVRFX1RZUEVfUCk6ICBOZXcgbWFjcm8uCisJKiBjYWxscy5jLCBleHByLmMsIGZ1bmN0aW9uLmMsIHN0bXQuYywgdmFyYXNtLmM6ICBVc2UKKwluZXcgbWFjcm8gQUdHUkVHQVRFX1RZUEVfUC4KKworTW9uIEFwciAyNSAxODo0NToyOCAxOTk0ICBKb2huIEhhc3NleSAgKGhhc3NleUBkZy1ydHAuZGcuY29tKQorCisJKiB2YXJhc20uYyAoY29weV9jb25zdGFudCwgY2FzZSBDT05TVFJVQ1RPUik6IEZpeCB0eXBvOyBjb3BpZWQgbGlzdAorCXdhcyBwbGFjZWQgb24gb2xkIENPTlNUUlVDVE9SLCBub3QgbmV3IG9uZS4KKworTW9uIEFwciAyNSAxNTowNDo1MyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBOZXZlciB3YXJuIGFib3V0IGBsb25nIGxvbmcnIGluCisJc3lzdGVtIGhlYWRlci4KKworCSogYy1kZWNsLmMgKGZpbmlzaF9kZWNsKTogUmVkbyBsYXN0IGNoYW5nZS4KKworCSogTWFrZWZpbGUuaW4gKCpjb21wYXJlKik6IEFkZCBtaXNzaW5nIHNlbWljb2xvbnMuCisKK01vbiBBcHIgMjUgMTU6MDI6MzEgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKG02OGstaHAtaHB1eCk6IHQtaHAzMjBnIG5vIGxvbmdlciBuZWVkZWQgYXMgb2YgZ2FzIDIuMS4KKwkqIG02OGsvdC1ocDMyMGc6IERlbGV0ZWQuCisKK01vbiBBcHIgMjUgMTQ6MjM6MTggMTk5NCAgUG91bC1IZW5uaW5nIEthbXAgIChwaGtAbG9naW4uZGt1dWcuZGspCisKKwkqIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZTogUmVjb2duaXplIEZyZWVCU0QuCisJKiBpMzg2L2ZyZWVic2QuaCwgeC1mcmVlYnNkOiBOZXcgZmlsZXMuCisJKiBpMzg2L3gtZnJlZWJzZDogTmV3IGZpbGUuCisJKiBpMzg2LmggKFRBUkdFVF9OT19GQU5DWV9NQVRIXzM4Nyk6IE5ldyBvcHRpb24uCisJKiBpMzg2Lm1kIChUQVJHRVRfTk9fRkFOQ1lfTUFUSF8zODcpOiBJbXBsZW1lbnQgbmV3IG9wdGlvbi4KKwkqIGdpbmNsdWRlL3N0ZGFyZy5oLCBnaW5jbHVkZS9zdGRkZWYuaCwgZ2luY2x1ZGUvdmFyYXJncy5oOgorCVJlY29nbml6ZSBfX0ZyZWVCU0RfXy4KKwkqIGdjYy5jIChsaW5rX2NvbW1hbmRfc3BlYyk6IEFkZCAtWiBhcmd1bWVudCBmb3IgWk1BR0lDJ3Mgb24gRnJlZUJTRC4KKwkKK01vbiBBcHIgMjUgMTQ6MDg6MjYgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmUgKGxhbmd1YWdlIHNlYXJjaCBsb29wKTogQ29ycmVjdCB0ZXN0IGZvciBubyBsYW5ndWFnZXMuCisJKENDKTogVXNlIHNpbmdsZSBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uIG9mICQoQ0MpLgorCitNb24gQXByIDI1IDEzOjEwOjA3IDE5OTQgIEFuZHJlYXMgU3RvbGNrZSAgKHN0b2xja2VAaWNzaS5iZXJrZWxleS5lZHUpCisKKwkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgRVhUUkFfUEFSVFMgd2l0aAorCUlOU1RBTExfREFUQSwgbm90IElOU1RBTExfUFJPR1JBTS4KKworTW9uIEFwciAyNSAwNjozNDowMCAxOTk0ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkLWNvbnZlcnQpOiBVc2UgYXNzaWdubWVudCwgaW5zdGVhZCBvZgorCWluaXRpYWxpemluZywgYWdncmVnYXRlIGxvY2FsIHZhcmlhYmxlIFJFQUxfVkFMVUVfVFlQRS4KKworU3VuIEFwciAyNCAxMToxNzoyMCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZW9yZy5jIChyZWRpcmVjdF93aXRoX2RlbGF5X2xpc3Rfc2FmZV9wKTogRml4IG9mZi1ieS1vbmUgZXJyb3IuCisKKwkqIHJlYWwuYyAoZXRvZTUzLCBldG9lMjQpOiBNYWtlIGFsbCBvY2N1cnJlbmNlcyBzdGF0aWMuCisKKwkqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IERvbid0IHRyeSB0byByZWN1cnNpdmVseSBzcGxpdCBkZWxldGVkIGluc24uCisKKwkqIHJzNjAwMC5tZCAobW92dGkpOiBBZGp1c3QgY29uc3RyYWludHMgdG8gYXZvaWQgaW1wb3NzaWJsZSByZWxvYWQuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgU0FWRV9FWFBSKTogRml4IGVycm9yIGluIGxhc3QgY2hhbmdlLgorCitTYXQgQXByIDIzIDA2OjQ1OjUwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHJlbG9hZDEuYyAocmVsb2Fkc19jb25mbGljdCwgY2FzZSBSRUxPQURfRk9SX09VVFBVVCk6IEZpeCB0eXBvLgorCitGcmkgQXByIDIyIDE4OjQzOjA4IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbmZpZ3VyZSAoYWxwaGEtZGVjLW9zZik6IEZpeCB0eXBvLgorCitGcmkgQXByIDIyIDE1OjAyOjIyIDE5OTQgIEhhbGx2YXJkIEIgRnVydXNldGggIChoLmIuZnVydXNldGhAdXNpdC51aW8ubm8pCisKKwkqIGdjYy5jIChoYW5kbGVfYnJhY2VzLCBjaGVja19saXZlX3N3aXRjaCk6IFJlZmluZSBwcmV2aW91cyBjaGFuZ2UuCisKK0ZyaSBBcHIgMjIgMDM6Mjc6MjYgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmU6IFNvcnQgbWFjaGluZXMuCisKKwkqIExhbmd1YWdlIGRpcmVjdG9yeSByZW9yZ2FuaXphdGlvbi4KKwkqIGNvbmZpZ3VyZTogQXV0by1jb25maWd1cmUgZWFjaCBsYW5ndWFnZSBzdWJkaXJlY3RvcnkgYnkgbG9va2luZworCWZvciAqL2NvbmZpZy1sYW5nLmluLgorCUFkZCBsYW5ndWFnZSBtYWtlZmlsZSBmcmFnbWVudHMgKE1ha2UtbGFuZy5pbikgdG8gdG9wIGxldmVsIG1ha2VmaWxlLAorCWFuZCBob29rIHRoZW0gaW4gdmlhIGxhbmcuKiB0YXJnZXRzLgorCUNvbmZpZ3VyZSBlYWNoIGxhbmd1YWdlIHN1YmRpcmVjdG9yeS4gIE9uIGhvc3RzIHRoYXQgc3VwcG9ydCB0aGVtLAorCWNyZWF0ZSBzdGFnZVsxMjNdIHN5bWxpbmtzIGluIGVhY2ggc3ViZGlyZWN0b3J5LgorCUlmIHRoZXJlIGlzIGEgY29uZmlndXJlIHNjcmlwdCBpbiB0aGUgc3ViZGlyZWN0b3J5LCBydW4gaXQuCisJKiBNYWtlZmlsZS5pbiAoTEFOR1VBR0VTKTogUmVtb3ZlIGMrKy4KKwkoU1VCRElSUyk6IE5ldyB2YXJpYWJsZS4KKwkoTEVYLCBMRVhGTEFHUyk6IERpdHRvLgorCShNQUtFT1ZFUlJJREVTKTogRGl0dG8uCisJKENPTVBJTEVSUyk6IFJlbW92ZSBjYzFwbHVzLgorCShMQU5HX01BS0VGSUxFUywgTEFOR19TVEFHRVNUVUZGLCBMQU5HX0RJRkZfRVhDTFVERVMsIEZMQUdTX1RPX1BBU1MpOgorCU5ldyB2YXJpYWJsZXMuCisJKENQTFVTX09CSlMsIENQTFVTX1RSRUVfSCwgQysrLCBjKyssIGcrKywgZysrLWNyb3NzLCBjYzFwbHVzLAorCWNwLSoubywgZysrLm8sIGdwbHVzLmluZm8pOiBEZWxldGVkLgorCShTVEFHRVNUVUZGKTogUmVtb3ZlIGcrKywgZysrLWNyb3NzLCBjYzFwbHVzLiAgQWRkICQoTEFOR19TVEFHRVNUVUZGKS4KKwkoTWFrZWZpbGUpOiBEZXBlbmQgb24gJChMQU5HX01BS0VGSUxFUykuCisJKCMjIyNsYW5ndWFnZSBob29rcywgIyMjI2xhbmd1YWdlIGZyYWdtZW50cyk6IE5ldyBzcG90cyBmb3Igc2VkCisJdG8gaW5zZXJ0IHRoaW5ncy4KKwkoYWxsLmNyb3NzLCBhbGwuYnVpbGQsIHN0YXJ0LmVuY2FwLCByZXN0LmVuY2FwLCBpbmZvLCBkdmksCisJaW5zdGFsbC1ub3JtYWwsIGluc3RhbGwtY29tbW9uLCBpbnN0YWxsLWluZm8sIGluc3RhbGwtbWFuLAorCXVuaW5zdGFsbCwgZGlzdGRpciwgbW9zdGx5Y2xlYW4sIGNsZWFuLCBkaXN0Y2xlYW4sIGV4dHJhY2xlYW4sCisJcmVhbGNsZWFuLCBzdGFnZTEsIHN0YWdlMiwgc3RhZ2UzLCBzdGFnZTQpOiBEZXBlbmQgb24gbGFuZy5mb28uCisJKG1vc3RseWNsZWFuLCBjbGVhbiwgZGlzdGNsZWFuLCBleHRyYWNsZWFuLCByZWFsY2xlYW4pOiBDbGVhbiBhcworCW11Y2ggb2YgdGhlIGxhbmd1YWdlIHN1YmRpcmVjdG9yaWVzIGFzIHdlIGNhbi4KKwkoaW5zdGFsbC1jb21tb24pOiAgUmVtb3ZlIGcrKyBpbnN0YWxsYXRpb24uCisJKGluc3RhbGwtbWFuKTogUmVtb3ZlIGcrKy4xIGluc3RhbGxhdGlvbi4KKwkodW5pbnN0YWxsKTogUmVtb3ZlIGcrKyByZWZlcmVuY2UuCisJKFRBR1MpOiBSZW1vdmUgY3AtcGFyc2UuPyByZWZlcmVuY2UuCisJKGRpc3RkaXIpOiBEaXR0by4KKwkoZGlzdGRpci1zdGFydCwgZGlzdGRpci1maW5pc2gpOiBOZXcgdGFyZ2V0cy4KKwkoZGlmZik6IFJlbW92ZSBjcC1wYXJzZS4/IHJlZmVyZW5jZS4gIEFkZCAkKExBTkdfRElGRl9FWENMVURFUykuCisJKGNvbXBhcmUsIGNvbXBhcmUzLCBnbnVjb21wYXJlLCBnbnVjb21wYXJlMyk6IENvbXBhcmUgbGFuZ3VhZ2UKKwlzdWJkaXJlY3RvcmllcyB0b28uCisJKHN0YWdlMS1zdGFydCwgc3RhZ2UyLXN0YXJ0LCBzdGFnZTMtc3RhcnQsIHN0YWdlNC1zdGFydCk6IE5ldyB0YXJnZXRzLgorCUVuc3VyZSBzdGFnZSBzdWJkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBwcm9jZXNzaW5nIGxhbmd1YWdlCisJZGVwZW5kZW50IHBhcnQuCisJKiBjcC9NYWtlZmlsZS5pbjogTmV3IGZpbGUsIG1ha2VmaWxlIGZvciBjKysgc3ViZGlyZWN0b3J5LgorCSogY3AvTWFrZS1sYW5nLmluOiBOZXcgZmlsZSwgYysrIGxhbmd1YWdlIG1ha2VmaWxlIGZyYWdtZW50LgorCVRoaXMgZmlsZSBwcm92aWRlcyBjKysgc3BlY2lmaWMgc3VwcG9ydCB0byB0aGUgdG9wIGxldmVsIG1ha2VmaWxlIHZpYQorCXNldmVyYWwgd2VsbCBkZWZpbmVkIHRhcmdldHM6IGMrKy5hbGwuYnVpbGQsIGMrKy5hbGwuY3Jvc3MsCisJYysrLnN0YXJ0LmVuY2FwLCBjKysucmVzdC5lbmNhcCwgYysrLmluZm8sIGMrKy5kdmksCisJYysrLmluc3RhbGwtbm9ybWFsLCBjKysuaW5zdGFsbC1jb21tb24sIGMrKy5pbnN0YWxsLWluZm8sCisJYysrLmluc3RhbGwtbWFuLCBjKysudW5pbnN0YWxsLCBjKysuZGlzdGRpciwgYysrLm1vc3RseWNsZWFuLAorCWMrKy5jbGVhbiwgYysrLmRpc3RjbGVhbiwgYysrLmV4dHJhY2xlYW4sIGMrKy5yZWFsY2xlYW4sCisJYysrLnN0YWdlMSwgYysrLnN0YWdlMiwgYysrLnN0YWdlMywgYysrLnN0YWdlNC4KKwkqIGNwL2NvbmZpZy1sYW5nLmluOiBOZXcgZmlsZSwgZGVmaW5lcyBsYW5ndWFnZSBuYW1lIGFuZCBvdGhlcgorCWNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGMrKyBsYW5ndWFnZTogY29tcGlsZXJzLCBzdGFnZXN0dWZmLAorCWFuZCBkaWZmX2V4Y2x1ZGVzLgorCSogZysrLmM6IE1vdmUgaW50byBjcCBzdWJkaXJlY3RvcnkuCisJKiBnKysuMTogRGl0dG8uCisJKiBnKytpbnQudGV4aTogRGl0dG8uCisJKiBjcC0qOiBEaXR0bywgcmVtb3ZlICJjcC0iIHByZWZpeCBleGNlcHQgZm9yIGNwLXRyZWUuaC4KKworVGh1IEFwciAyMSAxNTo0NzowMSAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIHNwYXJjLmMgKG1lbV9hbGlnbmVkXzgpOiBEb24ndCBhc3N1bWUgYWRkcmVzc2VzIHdpdGgKKwlNRU1fSU5fU1RSVUNUX1Agc2V0IGFyZSA4IGJ5dGUgYWxpZ25lZC4KKworCSogaXJpczUuaCAoQ1BQX1NQRUMpOiBEZWZpbmUgX0xBTkdVQUdFX0MgZm9yIE9iamVjdGl2ZSBDIGFsc28uCisKKwkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IFNoYXJlIGRlc3RfcmVnIGZvciBtdWx0aXBsZQorCWFkZHJlc3MgZ2l2cyB3aXRoaW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCisJKGNvcHlfbG9vcF9ib2R5KTogT25seSB1cGRhdGUgcHN1ZWRvLXJlZyBmb3Igc2hhcmVkIGdpdiBvbmNlLgorCisJKiBzcGFyYy5jIChzcGFyY190eXBlX2NvZGUpOiBEb24ndCBwdXQgbW9yZSB0aGFuIDMwIGJpdHMgb2YgaW5mbworCWludG8gdGhlIHZhcmlhYmxlIHF1YWxpZmllcnMuCisKKwkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IERvbid0IGNoZWNrIHRoZSBUWVBFX01PREUgb2YgYW4gRVJST1JfTUFSSy4KKworVGh1IEFwciAyMSAxNTozNDoxMSAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjYWxscy5jIChjYWxsc19mdW5jdGlvbl8xKTogQSBsYW5ndWFnZS1zcGVjaWZpYyBjb2RlIG11c3QKKwliZSBhc3N1bWVkIHRvIGNhbGwgYSBmdW5jdGlvbiBhbmQgYWxzbyBjYWxsIGFsbG9jYS4KKwlDaGVjayBmb3IgaW5saW5lZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGFsbG9jYS4KKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDbGVhciBmb3JiaWRkZW5fcmVncyBlYXJsaWVyLgorCShuZXdfc3BpbGxfcmVnKTogTWVudGlvbiBpbiBlcnJvciBtZXNzYWdlIHRoYXQgYXNtIGNsYXVzZXMgY2FuIGFsc28gCisJY2F1c2UgdGhlIGNvbXBpbGVyIHRvIHJ1biBvdXQgb2Ygc3BpbGwgcmVncy4KKwkoc2Nhbl9wYXJhZG94aWNhbF9yZWdzKTogSWYgU01BTExfUkVHSVNURVJfQ0xBU1NFUywgZm9yYmlkCisJaGFyZCByZWdzIHVzZWQgaW4gZXhwbGljaXQgdXNlciB2YXJpYWJsZXMuCisKKwkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCwgY29tYmluYWJsZV9pM3BhdCwgdHJ5X2NvbWJpbmUpOiBBbGxvdworCWNvbWJpbmF0aW9uIGludm9sdmluZyBoYXJkIHJlZ3MgaWYgdGhlIGhhcmQgcmVnIGlzIGEgdXNlciB2YXJpYWJsZS4KKworCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogSWYgLUUgYW5kIHRoZSBmaWxlIGlzIChlLmcuKSB4LnMsCisJZG9uJ3QgcnVuIHRoZSBhc3NlbWJsZXI7IHNpbWlsYXJseSBmb3IgLmksIC5paSwgLmFkYiwgZXRjLgorCisJKiBDbGVhbnVwcyByZWxhdGVkIHRvIGFkZGluZyBwcm90b3R5cGVzIHRvIG1hbnkgZGVjbGFyYXRpb25zLgorCSogcnRsLmg6IElmIFRSRUVfQ09ERSB1bmRlZmluZWQsIG1ha2UgYW4gaW5jb21wbGV0ZSB1bmlvbiBmb3IgdHJlZS4KKwkoU1RESU9fUFJPVE8pOiBEZWZpbmUgaGVyZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgorCShyZWFkX3J0eCk6IFVzZSBTVERJT19QUk9UTy4KKwkob3V0cHV0X2NvbnN0YW50X2RlZiwgaW1tZWRfcmVhbF9jb25zdCk6IFVzZSAidW5pb24gdHJlZV9ub2RlICoiLgorCShpbW1lZF9yZWFsX2NvbnN0XzEpOiBNb3ZlIGRlY2xhcmF0aW9uIHRvIHJlYWwuaC4KKwkocnR4X3RvX3RyZWVfY29kZSk6IFN1cHBseSBwcm90b3R5cGUuCisJKiB0cmVlLmg6IElmIFJUWF9DT0RFIHVuZGVmaW5lZCwgbWFrZSBhbiBpbmNvbXBsZXRlIHN0cnVjdCBmb3IgcnR4LgorCUFkZCBzb21lIG1pc3NpbmcgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbiBzdG10LmMuCisJKFNURElPX1BST1RPKTogRGVmaW5lIGhlcmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KKwkqIHJlYWwuaDogQWRkIHByb3RvdHlwZXMgdG8gZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbiByZWFsLmMuCisJKGltbWVkX3JlYWxfY29uc3RfMSk6IE1vdmUgZGVjbGFyYXRpb24gZnJvbSBydGwuaC4KKwkqIG91dHB1dC5oOiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGluIGZpbmFsLmMuCisJKFNURElPX1BST1RPKTogRG9uJ3QgZGVmaW5lIGhlcmUuCisJKiBjLXRyZWUuaCAoU1RESU9fUFJPVE8pOiBMaWtld2lzZS4KKwkqIHJlbG9hZC5oIChQUk9UTywgU1RESU9fUFJPVE8pOiBMaWtld2lzZS4KKwkqIGJpLW9wY29kZS5jIChtYWluKTogRG9uJ3Qgd3JpdGUgb3Zlcmx5LWxvbmcgbGluZS4KKwkqIGNzZS5jLCBlbWl0LXJ0bC5jOiBVc2UgQ09OU1RfRE9VQkxFX0ZST01fUkVBTF9WQUxVRSBtYWNybyBmb3IgaW1tZWQKKwlyZWFsX2NvbnN0XzEuCisJKiBleHBtZWQuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKiBleHByLmMgKGJjX2V4cGFuZF9leHByKTogQ2FsbCBleHBhbmRfZGVjbCBhbmQgZXhwYW5kX2RlY2xfaW5pdCwKKwlub3QgdGhlIGJjXyB2ZXJzaW9ucy4KKwkqIGZpbmFsLmM6IEluY2x1ZGUgc3RkaW8uaCBhbmQgY3R5cGUuaCBlYXJseS4KKwlBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkqIGZ1bmN0aW9uLmM6IEFkZCBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zLgorCShiY19leHBhbmRfZnVuY3Rpb25fZW5kLCBleHBhbmRfZnVuY3Rpb25fZW5kKTogQ2FsbCBuZXcKKwlleHBhbmRfZml4dXBzIGluc3RlYWQgb2Ygb2xkIGZpeHVwX2dvdG9zLgorCSogZ2xvYmFsLmMsIGxvY2FsLWFsbG9jLmM6IEFkZCBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zLgorCSogaW50ZWdyYXRlLmM6IExpa2V3aXNlLgorCVVzZSBDT05TVF9ET1VCTEVfRlJPTV9SRUFMX1ZBTFVFIG1hY3JvIGZvciBpbW1lZF9yZWFsX2NvbnN0XzEuCisJKiBvcHRhYnMuYzogTGlrZXdpc2UuCisJKiByZWFsLmM6IE1ha2UgbW9zdCBmdW5jdGlvbnMgc3RhdGljIGFuZCBhZGQgcHJvdG90eXBlcyBmb3IKKwlhbGwgc3RhdGljIGZ1bmN0aW9ucy4KKwkoR0VUX1JFQUwsIFBVVF9SRUFMKTogQ2FzdCBwYXJhbWV0ZXIgdG8gcHJvcGVyIHBvaW50ZXIgdHlwZSBpbgorCXNvbWUgY2FzZXM7IHVzZSB1bnNpZ25lZCBhcnJheS4KKwkqIHN0bXQuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKGV4cGFuZF9maXh1cHMpOiBOZXcgZnVuY3Rpb24uCisJKGZpeHVwX2dvdG9zKTogTm93IHN0YXRpYy4KKwlEb24ndCBjYWxsIGJjX2ZpeHVwX2dvdG9zIHdpdGggd3JvbmcgdHlwZSAoYnV0IG5vdyBwcm9iYWJseSB3cm9uZworCXZhbHVlKS4KKwkoYmNfKik6IE5vdyBzdGF0aWMuCisJKGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UpOiBDYWxsIGJjX2V4cGFuZF9nb3RvX2ludGVybmFsIHdpdGgKKwlwcm9wZXIgbnVsbCBwb2ludGVyLgorCShleHBhbmRfZGVjbF9pbml0KTogQ2FsbCBiY19leHBhbmRfZGVjbF9pbml0IGlmIHdyaXRpbmcgYnl0ZWNvZGUuCisJCitUaHUgQXByIDIxIDE0OjIxOjU2IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCVN1cHBvcnQgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgdGV4dCBzZWdtZW50IHN5bWJvbCB3aGVuIHVzaW5nCisJTUlQUyAtbWVtYmVkZGVkLXBpYy4KKwkqIG1pcHMuaCAoZW1iZWRkZWRfcGljX2ZuYWRkcl9ydHgpOiBEZWNsYXJlLgorCShlbWJlZGRlZF9waWNfb2Zmc2V0KTogRGVjbGFyZS4KKwkobWlwc19maW5hbGl6ZV9waWMpOiBEZWNsYXJlLgorCShGSU5BTElaRV9QSUMpOiBEZWZpbmUuCisJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFdoZW4gdXNpbmcgLW1lbWJlZGRlZC1waWMsIHJlamVjdAorCWNvbWJpbmluZyBhbiBlbWJlZGRlZCBQSUMgdGV4dCByZWZlcmVuY2Ugd2l0aCBhIHJlZ2lzdGVyLgorCShFTkNPREVfU0VDVElPTl9JTkZPKTogVW5kZXIgLW1lbWJlZGRlZC1waWMgc2V0IFNZTUJPTF9SRUZfRkxBRyB0bworCTAgZm9yIHRleHQgc2VnbWVudCBzeW1ib2xzLCAxIGZvciBkYXRhIHNlZ21lbnQgc3ltYm9scy4KKwkqIG1pcHMuYyAoZW1iZWRkZWRfcGljX2ZuYWRkcl9ydHgpOiBOZXcgdmFyaWFibGUuCisJKGVtYmVkZGVkX3BpY19vZmZzZXQpOiBOZXcgZnVuY3Rpb24uCisJKG1pcHNfZmluYWxpemVfcGljKTogTmV3IGZ1bmN0aW9uLgorCShtaXBzX3NlbGVjdF9zZWN0aW9uKTogV2hlbiB1c2luZyAtbWVtYmVkZGVkLXBpYyBhbmQgbm90IHVzaW5nCisJLWZ3cml0YWJsZS1zdHJpbmdzLCBwdXQgc3RyaW5ncyBpbiB0aGUgdGV4dCBzZWN0aW9uLCBub3QgdGhlIHJlYWQKKwlvbmx5IGRhdGEgc2VjdGlvbi4KKwkqIG1pcHMubWQgKG1vdnNpKTogV2hlbiB1c2luZyAtbWVtYmVkZGVkLXBpYywgYWRkIHNwZWNpYWwgY29kZQorCXdoZW4gbG9hZGluZyBhIHN5bWJvbCBkaXJlY3RseSB0byB1c2UgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mCisJdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisJKGdldF9mbmFkZHIpOiBOZXcgaW5zbiB0byBnZXQgYWRkcmVzcyBvZiBjdXJyZW50IGZ1bmN0aW9uLgorCitXZWQgQXByIDIwIDE5OjM4OjM4IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogTWFrZSBzdGF0aWMuCisJKGluaXRfcmVnX21vZGVzKTogTmV3IGZ1bmN0aW9uLgorCShpbml0X3JlZ3MpOiBMaWtld2lzZS4KKwkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGluaXRfcmVncyBhZnRlciBpbml0X3J0bC4KKwkobWFpbik6IERlbGV0ZSBjYWxsIHRvIGluaXRfcmVnX3NldHNfMS4KKworV2VkIEFwciAyMCAxNTowNjozNSAxOTk0ICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BjeWdudXMuY29tKQorCisJKiBzaC5jIChSRUdfT0REKTogQWxsb3cgRElzIGFuZCBERnMgaW50byBvZGQgcmVnaXN0ZXJzLgorCShwcmludF9vcGVyYW5kKTogTmV3IGNvbW1hbmQgY2hhciAnQCcsIGNoYW5nZSBub3AgaW5zbi4KKwkoc3ludGhfY29uc3RhbnQpOiBEb24ndCBhbGxvY2F0ZSB0ZW1wIHJlZyBkdXJpbmcgcmVsb2FkLgorCShleHBhbmRfYmxvY2tfbW92ZSk6IERvbid0IGV4cGFuZCBpZiBUQVJHRVRfU01BTExDT0RFLgorCShwcmVwYXJlX3NwbGl0X2RvdWJsZV9vcHMpOiBEZWxldGVkLgorCShob3dzaGlmdCwgbXVsdGNvc3RzKTogV29yayBvdXQgY29zdHMgZXhhY3RseS4KKwkoZHVtcF90YWJsZSk6IEVtaXQgYSBsYWJlbCBiZWZvcmUgdGhlIGFsaWduLgorCShoaV9jb25zdCk6IFRBUkdFVF9TSE9SVEFERFIgbWFrZXMgbW9yZSB0aGluZ3MgSEkgY29uc3RzLgorCShtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IExvb2sgdGhyb3VnaCBTVUJSRUdTLgorCShmcm9tX2NvbXBhcmUpOiBHZXQgYmV0dGVyIGNvZGUgd2hlbiByZWxhdGlvbmFsIGFyZ3MgYXJlIGxvYWRlZAorCWludG8gcmVncyBub3cuCisJKGV4cGFuZF9hY2FsbCk6IENvcGUgd2l0aCBUQVJHRVRfQlNSLgorCShnZW5lcmFsX21vdmRzdF9vcGVyYW5kKTogRG9uJ3QgYWxsb3cgaWxsZWdhbCBhdXRvaW5jcy4KKwkobWFjX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCisJKHNoX2Z1bmN0aW9uX2FyZywgc2hfZnVuY3Rpb25fcGFydGlhbF9ucmVncyk6IEZyb20gc2guaAorCSogc2guaCAoUEFSQU5PSURfQklULCBSRVRSMl9CSVQsIENPTlNUTEVOMF9CSVQsIEJTUl9CSVQsCisJU0hPUlRBRERSX0JJVCwgVEFSR0VUX1BBUkFOT0lELCBUQVJHRVRfUkVUUjIsIFRBUkdFVF9DT05TVExFTjAsCisJVEFSR0VUX0JTUiwgVEFSR0VUX1NIT1JUQUREUiwgVEFSR0VUX1NXSVRDSEVTKTogIE5ldyBvcHRpb25zLgorCShPVkVSUklERV9PUFRJT05TKTogTm8gZnVuY3Rpb25fY3NlIHdoZW4gVEFSR0VUX0JTUi4KKwkoRklSU1RfUkVUX1JFRyk6IERlcGVuZHMgb24gVEFSR0VUX1JFVFIyLgorCShGVU5DVElPTl9BUkcsIEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKTogTW92ZWQgdG8gc2guYworCShIQVZFX1BPU1RfSU5DUkVNRU5ULCBIQVZFX1BSRV9ERUNSRU1FTlQpOiBEZWZpbmUuCisJKE1PREVfRElTUF9PS184KTogRGVmaW5lLgorCShSRUdfT0tfRk9SX1BSRV9QT1NUX1ApOiBBbGxvdyBhIHBzZXVkb3JlZy4KKwkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWxsb3cgREkgYWRkcmVzc2luZyBtb2Rlcy4KKwkoTU9WRV9SQVRJTyk6IERlcGVuZHMgb24gVEFSR0VUX1NNQUxMQ09ERS4KKwkqIHNoLm1kIChpbnRlcnJ1cHRfZnVuY3Rpb24pOiBOZXcgYXR0ci4KKwkoZGVmaW5lX2RlbGF5KTogQWNjb3VudCBmb3IgaW50ZXJydXB0IGZ1bmN0aW9ucy4KKwkoYWRkYyk6IERlc2NyaWJlIHBhdHRlcm4gYmV0dGVyLgorCShhZGRkaTMpOiBFeHBhbmRlZCBiZXR0ZXIuCisJKHBlZXBob2xlcyk6IERlbGV0ZWQgbWFueSBvYnNvbGV0ZSBwYXR0ZXJucy4KKwkKK1dlZCBBcHIgMjAgMTM6Mzc6NTggMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEb24ndCBmb3JjZSBpZ25vcmUgd2hlbiBleHBhbmRpbmcgdGhlCisJc3ViZXhwcmVzc2lvbiBvZiBhIFdJVEhfQ0xFQU5VUF9FWFBSLiAgRG9uJ3QgY2hlY2sgaWdub3JlIHdoZW4KKwlkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byBleHBhbmQgdGhlIGNsZWFudXAgZm9yIGEgVEFSR0VUX0VYUFIuCisKK1dlZCBBcHIgMjAgMTI6MjA6MTYgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBoODMwMC9oODMwMC5oIChSVFhfQ09TVFMpOiBSZW1vdmUgTFNISUZULgorCSogaDgzMDAvaDgzMDAubWQgKGxzaHJoaTNfZWlnaHQpOiBGaXggbmFtZS4KKwkobHNocmhpMyk6IFVzZSBpdC4KKwkqIGk4NjAvaTg2MC5jIChzYWZlX2luc25fc3JjX3ApOiBSZW1vdmUgTFNISUZULgorCShzaW5nbGVfaW5zbl9zcmNfcCk6IExpa2V3aXNlLgorCSogaTk2MC9pOTYwLmMgKGk5NjBfZXhwcl9hbGlnbm1lbnQpOiBSZW1vdmUgTFNISUZULgorCSogc2gvc2guYyAob3V0cHV0X3NoaWZ0LCBBU0hJRlRSVCBjYXNlKTogRG8gb3Bwb3NpdGUgc2hpZnQgYXMgQVNISUZULgorCURlbGV0ZSBMU0hJRlQgY2FzZS4KKwkqIHNoL3NoLmggKFJUWF9DT1NUUyk6IFJlbW92ZSBMU0hJRlQsIGFkZCBMU0hJRlRSVC4KKwkqIHNwdXIvc3B1ci5tZCAobHNobHNpMyk6IERlbGV0ZS4KKworV2VkIEFwciAyMCAwNjo0MDoxNSAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogQXZvaWQgdW5yZWFjaGFibGUgc3RhdGVtZW50IHdoZW4KKwlIQU5ETEVfU1lTVl9QUkFHTUEgZGVmaW5lZC4KKworV2VkIEFwciAyMCAwMTo1MjoyNCAxOTk0ICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBmbG93LmMgKGZpbmRfYXV0b19pbmMsIHRyeV9wcmVfaW5jcmVtZW50KTogTWFrZSBzdXJlCisJdGhhdCBpbnNlcnRpb24gb2YgYXV0b2luYyBhZGRyZXNzaW5nIG1vZGUgd291bGQgeWllbGQgYSB2YWxpZAorCWluc3RydWN0b24uCisKK1R1ZSBBcHIgMTkgMjM6NDE6MTQgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoZXhwci5vKTogRGVwZW5kIG9uIHJlZ3MuaC4KKwkqIHJ0bC5oIChjaG9vc2VfaGFyZF9yZWdfbW9kZSk6IERlY2xhcmUuCisJKiByZWdzLmggKHJlZ19yYXdfbW9kZSk6IERlY2xhcmUuCisJKiBjYWxsZXItc2F2ZS5jIChjaG9vc2VfaGFyZF9yZWdfbW9kZSk6IERlbGV0ZSBmcm9tIGhlcmUuCisJKiByZWdjbGFzcy5jIChjaG9vc2VfaGFyZF9yZWdfbW9kZSk6IERlZmluZSBoZXJlLgorCShyZWdfcmF3X21vZGUpOiBEZWZpbmUuCisJKGluaXRfcmVnX3NldHNfMSk6IEluaXRpYWxpemUgcmVnX3Jhd19tb2RlLgorCSogZXhwci5jOiAjaW5jbHVkZSByZWdzLmguCisJKHVzZV9yZWdzKTogVXNlIHJlZ19yYXdfbW9kZS4KKwkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBSZWNvcmQgYWRkaXRpb25hbCBzcGlsbCByZWdpc3RlcnMKKwlpbiB0aGVpciBpbnRyaW5zaWMgbW9kZS4KKwkqIGNvbWJpbmUuYyAobW92ZV9kZWF0aHMpOiBSZWNvcmQgZGVhdGggaW5mb3JtYXRpb24gb2YgcmVtYWluaW5nCisJcmVnaXN0ZXJzIGluIHRoZWlyIGludHJpbnNpYyBtb2RlLgorCSogc2NoZWQuYyAoYXR0YWNoX2RlYXRocyk6IENyZWF0ZSBwYXJ0aWFsIHJlZ2lzdGVyIGRlYWQgbm90ZXMgdXNpbmcKKwlyZWdpc3RlcidzIGludHJpbnNpYyBtb2RlLgorCitUdWUgQXByIDE5IDIxOjQwOjU3IDE5OTQgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6IEFkZCAtZmhhbmRsZS1zaWduYXR1cmVzIGZvciBDKysKKwlmcm9udGVuZC4KKworVHVlIEFwciAxOSAxOTowMDozMCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBjY2NwLmMgKGRvX2Vycm9yKTogRG9uJ3QgdGVybWluYXRlLgorCitUdWUgQXByIDE5IDE3OjQ4OjQxIDE5OTQgIEhhbGx2YXJkIEIgRnVydXNldGggIChoYmZAZHVyaW4udWlvLm5vKQorCisJKiBnY2MuYzogQWRkIG5ldyBvcHRpb25zIC1wcmludC1maWxlLW5hbWU9IGFuZCAtcHJpbnQtcHJvZy1uYW1lPS4KKworCSogZ2NjLmMgKHN0cnVjdCBzd2l0Y2hzdHIpOiBOZXcgZmllbGQgTElWRV9DT05ELgorCShwcm9jZXNzX2NvbW1hbmQpOiBJbml0aWFsaXplIGl0LgorCShjaGVja19saXZlX3N3aXRjaCk6IE5ldyBmdW5jdGlvbi4KKwkoaGFuZGxlX2JyYWNlcyk6IENhbGwgaXQuCisKK01vbiBBcHIgMTggMTk6MjI6MjUgMTk5NCAgTGVlIEl2ZXJzb24gIChsZWVpQGFpLnNyaS5jb20pCisKKwkqIG1pcHMuaCAoUlRYX0NPU1RTKTogUmVtb3ZlIExTSElGVC4KKworTW9uIEFwciAxOCAxNzo1NjoyMiAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQWx3YXlzIHdhcm4gd2hlbiBjb25zdCBkZWNsYXJhdGlvbgorCWZvbGxvd3Mgbm9uLWNvbnN0IG9uZSBmb3IgdmFyaWFibGVzLgorCitNb24gQXByIDE4IDE2OjM4OjMwIDE5OTQgIFN0ZXBoZW4gUi4gdmFuIGRlbiBCZXJnICAoYmVyZ0Bwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGUpCisKKwkqIGNhbGxzLmMgKHByZXBhcmVfY2FsbF9hZGRyZXNzKTogTmV3IGFyZyBSRUdfUEFSTV9TRUVOLgorCUFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKGV4cGFuZF9jYWxsKTogUHJlLWxvYWQgYXJncyBpZiBzbWFsbCByZWcgY2xhc3NlcyBhbmQgcmVnIHBhcm1zLgorCSogZXhwci5oIChwcmVwYXJlX2NhbGxfYWRkcmVzcyk6IEV4dGVuZCBwcm90b3R5cGUuCisJKiBleHByLmMgKGV4cGFuZF9idWlsdGluX2FwcGx5KTogUGFzcyBuZXcgYXJnIHRvIHByZXBhcmVfY2FsbF9hZGRyZXNzLgorCitNb24gQXByIDE4IDE0OjUzOjE0IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBJZiBhcmcgaXMgTmFOLCBqdXN0IHJldHVybiBpdAorCShmb2xkX2NvbnZlcnQpOiBIYW5kbGUgTmFOIGluIHJlYWwtPmludCBhbmQgcmVhbC0+cmVhbCBjYXNlcy4KKworCSogYy1sZXguYyAoeXlsZXgpOiBJZiBGUCB2YWx1ZSBpcyBOYU4sIHVzZSB2YWx1ZSBvZiB6ZXJvLgorCisJKiBleHByLmggKFBST01PVEVfTU9ERSk6IERvbid0IHN1cHBseSBkZWZhdWx0IGhlcmUuCisJKHByb21vdGVfbW9kZSk6IEFkZCBkZWNsYXJhdGlvbi4KKwkqIGV4cGxvdy5jIChwcm9tb3RlX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFVzZSBpdC4KKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcywgcHJvbW90ZWRfaW5wdXRfYXJnLCBleHBhbmRfZnVuY3Rpb25fc3RhcnQpOgorCUxpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBWQVJfREVDTCwgU0FWRV9FWFBSKTogTGlrZXdpc2UuCisJKiBzdG10LmMgKGV4cGFuZF92YWx1ZV9yZXR1cm4sIGV4cGFuZF9kZWNsKTogTGlrZXdpc2UuCisKK01vbiBBcHIgMTggMTE6MzY6MDQgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBDaGFuZ2UgX29wX3ZlY19kZWxldGUgdG8gX29wX3ZlY19kZWwuCisJKiBsaWJnY2MyLmM6IERpdHRvLgorCitNb24gQXByIDE4IDExOjE5OjA3IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiByZW9yZy5jIChyZWRpcmVjdF93aXRoX2RlbGF5X2xpc3Rfc2FmZV9wKTogTmV3IGZ1bmN0aW9uLAorCXNpbWlsYXIgdG8gcmVkaXJlY3Rfd2l0aF9kZWxheV9zbG90c19zYWZlX3AuCisJKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBEbyBub3QgcmVkaXJlY3QgYSBqdW1wIGlmIGRvaW5nCisJc28gd291bGQgaW52YWxpZGF0ZSB0aGUgZGVsYXkgbGlzdCBmb3IgdGhlIGp1bXAuCisKK01vbiBBcHIgMTggMDM6MDk6MzAgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBzY2FuLXR5cGVzLnNoOiBGaXggcHJvZ3JhbSdzIG5hbWUgaW4gZXJyb3IgbWVzc2FnZS4KKwlSZW5hbWUgZHVtbXkuYyB0byBhdm9pZCBjb2xsaXNpb25zIGluIHBhcmFsbGVsIG1ha2VzLgorCitTdW4gQXByIDE3IDE4OjI5OjAwIDE5OTQgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAuaCAoUFJPQ0VTU09SX0NPTU1PTiwgUFJPQ0VTU09SX1BPV0VSLCBQUk9DRVNTT1JfUE9XRVJQQyk6CisJTmV3IG1hY3Jvcy4KKwkqIHJzNjAwMC5jIChwcm9jZXNzb3JfdGFyZ2V0X3RhYmxlKTogQ2hhbmdlICJhbGwiIHRvICJjb21tb24iLgorCUFkZCAicG93ZXIiIGFuZCAicG93ZXJwYyIgZ2VuZXJpYyBwcm9jZXNzb3JzLiAgRXhwbGljaXRseSB0dXJuIG9mZgorCW5ldyBtbmVtb25pY3MgZm9yIGFsbCBtZW1iZXJzIG9mIHRoZSBQT1dFUiBhcmNoaXRlY3R1cmUgZmFtaWx5LgorCitTdW4gQXByIDE3IDEwOjA0OjE4IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHRyZWUuaCAoREVDTF9QUklOVF9OQU1FKTogRGVsZXRlZC4KKwkoc3RydWN0IHRyZWVfZGVjbCk6IEZpZWxkIHByaW50X25hbWUgZGVsZXRlZC4KKworU3VuIEFwciAxNyAwNjo1OTo1OCAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogdmF4LmggKFJUWF9DT1NUUyksIHZheC5jICh2YXhfcnR4X2Nvc3QpOiBSZW1vdmUgTFNISUZUIGNhc2UuCisKK1N1biBBcHIgMTcgMDE6MTU6MjcgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBGb3IgQVJHU19HUk9XX0RPV05XQVJELAorCVJvdW5kIHNpemV0cmVlIGZvciBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgcGFkZGluZywgbnVrZQorCXRoZSAobm93IHVubmVjZXNzYXJ5KSBjYWxsIHRvIHBhZF9iZWxvdyBmb3IgYXJnX3NpemVfcHRyLgorCitTYXQgQXByIDE2IDIxOjA1OjQwIDE5OTQgIERhdmlkIEVkZWxzb2huICAoZWRlbHNvaG5AbnBhYy5zeXIuZWR1KQorCisJKiByczYwMDAubWQgKG9uZV9jbXBsc2kyKTogQWx3YXlzIHVzZSBub3IgaW5zdHJ1Y3Rpb247CisJcmVtb3ZlIGV4dHJhbmVvdXMgbWludXMgc2lnbiBmcm9tIGNvbmRpdGlvbiByZWdpc3RlciBzZXQgY29uc3RyYWludC4KKworU2F0IEFwciAxNiAxNzoxMjo0MCAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLmMgKHByaW50X29wZXJhbmQpOiAneCcgYW5kICd5JyBtb2RlIGxldHRlcnMgb25seQorCWlmIFNVUFBPUlRfU1VOX0ZQQS4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSWYgKG5ldykgQVNNX09VVFBVVF9DQVNFX0ZFVENIIGRlZmluZWQsCisJdXNlIGl0IHRvIGVtaXQgdGhlIGFkZHJlc3MgZm9yIHRoZSBpbnNuIGJlZm9yZSBhIHRhYmxlanVtcC4KKwkqIG02OGsvbW90MzMwMC5oIChGVU5DVElPTl9BUkdfUEFERElORywgRlVOQ1RJT05fUFJPTE9HVUUpOiBEZWxldGVkLgorCShGVU5DVElPTl9FUElMT0dVRSwgUFJJTlRfT1BFUkFORCwgUFJJTlRfT1BFUkFORF9BRERSRVNTKTogRGVsZXRlZC4KKwkoU0dTX1NXSVRDSF9UQUJMRVMsIEFTTV9PVVRQVVRfQ0FTRV9FTkQpOiBEZWxldGVkLgorCShBU01fT1VUUFVUX0ZMT0FUX09QRVJBTkQsIEFTTV9PVVRQVVRfRE9VQkxFX09QRVJBTkQpOiBEZWxldGVkLgorCShTR1NfTk9fTEksIEFTTV9PVVRQVVRfQ0FTRV9GRVRDSCwgQVNNX1JFVFVSTl9DQVNFX0pVTVApOiBEZWZpbmVkLgorCisJKiBjb25maWd1cmUgKGhlYWRlcl9maWxlcyk6IFVzZSAke3NyY2Rpcn0gaW5zdGVhZCBvZiAkKHNyY2RpcikuCisKK1NhdCBBcHIgMTYgMTY6NTE6MTUgMTk5NCAgREogRGVsb3JpZSAgKGRqQGN0cm9uLmNvbSkKKworCSogb2JqYy9tYWtlZmlsZS5kb3MgKE9CSkNfTyk6IEFkZCBlbmNvZGluZy5vLgorCitTYXQgQXByIDE2IDE2OjM4OjMyIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtbGV4LmMgKHl5bGV4KTogVHVybiBvZmYgb3ZlcmZsb3cgZmxhZyB3aGVuIGZpeGluZyB1cCBsYXJnZQorCXRyYWRpdGlvbmFsIGhleCBjb25zdGFudHMuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IElmIGFzbXNwZWNfdHJlZSwgY2xlYXIgREVDTF9CVUlMVF9JTgorCWZvciBmdW5jdGlvbiBhbmQgREVDTF9SVEwgYWx3YXlzLgorCitXZWQgQXByIDEzIDEzOjA4OjEwIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQorCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogIE5ldmVyIHdhcm4gYWJvdXQgdW51c2VkIHN0YXRpYyBjb25zdHMsCisJc2luY2UgaXQgaXMgcmVhc29uYWJsZSB0byBoYXZlIHRob3NlIGluIGhlYWRlciBmaWxlcy4KKworV2VkIEFwciAxMyAxMjoyNToyMSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKKworCSogdmFyYXNtLmMgKGNvbnRhaW5zX3BvaW50ZXJzX3ApOiBXaGVuIGV4YW1pbmluZyBhIFJFQ09SRF9UWVBFLAorCW9ubHkgbG9vayBhdCB0aGUgRklFTERfREVDTHMuCisKK1R1ZSBBcHIgMTIgMTg6MTQ6NDIgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluIChMSUIyRlVOQ1MpOiBBZGQgX29wX3ZlY197ZGVsZXRlLG5ld30uCisKKwkqIGxpYmdjYzIuYyAoX19idWlsdGluX3ZlY197ZGVsZXRlLG5ld30pOiBOZXcgZnVuY3Rpb25zIHBlciB0aGUKKwlsYXRlc3QgQysrIHdvcmtpbmcgcGFwZXIuCisJKF9fZGVmYXVsdF9uZXdfaGFuZGxlcik6IE5vIGxvbmdlciBzdGF0aWMuCisJKF9fc2V0X25ld19oYW5kbGVyKTogTG9zZS4KKyAgCisJKiBjY2NwLmM6IERvbid0IGltcGxpY2l0bHkgd3JhcCBMT0NBTF9JTkNMVURFX0RJUi4KKwkoc3RydWN0IGRlZmF1bHRfaW5jbHVkZSk6IEFkZCBjeHhfYXdhcmUgZmllbGQuCisJKGluY2x1ZGVfZGVmYXVsdHNfYXJyYXkpOiBEaXR0by4KKwkobWFpbik6IFVzZSBjeHhfYXdhcmUgZmllbGQuCisKK1R1ZSBBcHIgMTIgMTY6MTM6MTAgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjb25maWcuc3ViIChuZXh0KTogRml4IHR5cG8gaW4gbTY4ay1uZXh0LW5zMyBhbHRlcm5hdGl2ZS4KKworVHVlIEFwciAxMiAwNzo0MToxNyAxOTk0ICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKKworCSogaTM4Ni9pMzg2LmMgKG5vdGljZV91cGRhdGVfY2MpOiBSZW1vdmUgTFNISUZUIGNhc2UsIHNpbmNlIHRoZXJlCisJaXMgbm8gTFNISUZUIHJ0bCBjb2RlIGFueSBtb3JlLgorCisJKiBoYWxmcGljLmggKE5PX1NURElPX0gpOiBEbyBub3QgaW5jbHVkZSBzdGRpby5oIGlmIHRoaXMgaXMgZGVmaW5lZC4KKworTW9uIEFwciAxMSAxNzoyNDo0NiAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBzY2FuLmMgKGdldF90b2tlbik6IENvcnJlY3RseSBpbmNyZW1lbnQgbGluZW5vIGFmdGVyCisJZW5jb3VudGVyaW5nICNpZGVudCAob3Igb3RoZXIgIy1kaXJlY3RpdmUpLgorCitNb24gQXByIDExIDEzOjIyOjUxIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogcmVvcmcuYyAodHJ5X21lcmdlX2RlbGF5X2luc25zKTogQWNjb3VudCBmb3IgcmVzb3VyY2VzIHNldC91c2VkCisJYnkgYSBmaWxsZWQgaW5zbiBiZWZvcmUgdHJ5aW5nIHRvIHNpbXBsaWZ5IGluc25zIGluIGRlbGF5IHNsb3RzLgorCisJKiB4LWlyaXMsIHgtaXJpczMsIHgtbWlwcywgeC1zb255LCB4LXN5c3YgKE9MRENDKTogQ2hhbmdlIC1YTmgxNTAwCisJdG8gLVhOaDIwMDAuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IERvbid0IHByZXNlcnZlIGluaXRpYWxpemVyIGlmIGl0IGlzCisJZXJyb3JfbWFya19ub2RlLgorCisJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBNb3ZlIG5leHRfdHJpYWwgdXBkYXRlCisJaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRyeV9zcGxpdCBjYWxsLgorCisJKiBtaXBzLmMgKG1pcHNfc2VsZWN0X3J0eF9zZWN0aW9uLCBtaXBzX3NlbGVjdF9zZWN0aW9uKTogTmV3CisJZnVuY3Rpb25zLiAgUHJlZmVyIHJkYXRhIHdoZW4gVEFSR0VUX0VNQkVEREVEX0RBVEEsIGFuZCBwcmVmZXIKKwlzZGF0YSBvdGhlcndpc2UuCisJKiBtaXBzLmggKE1BU0tfRU1CRURERURfREFUQSwgVEFSR0VUX0VNQkVEREVEX0RBVEEpOiBOZXcgbWFjcm9zLgorCShUQVJHRVRfU1dJVENIRUQpOiBBZGQgbmV3IG9wdGlvbiAtbWVtYmVkZGVkLWRhdGEuCisJKFNFTEVDVF9SVFhfU0VDVElPTiwgU0VMRUNUX1NFQ1RJT04pOiBDYWxsIGZ1bmN0aW9uIGluIG1pcHMuYy4KKworCSogTWFrZWZpbGUuaW4gKGFsbC5jcm9zcywgcmVzdC5lbmNhcCk6IERlbGV0ZSBvYmpjLXJ1bnRpbWUgYW5kCisJU1lTQ0FMTFMuYy5YLgorCShPQkpDLCBPQkpFQ1RJVkUtQyk6IEFkZCBvYmpjLXJ1bnRpbWUuCisJKHByb3RvKTogQWRkIFNZU0NBTExTLmMuWC4KKwkobGliZ2NjMi5yZWFkeSwgbGlib2JqYy5hLCBzdWJsaWJvYmpjLmEsIFNZU0NBTExTLmMuWCk6IEFkZAorCWRlcGVuZGVuY2Ugb24gc3RtcC1pbnQtaGRycy4KKworCSogY2NjcC5jIChyZXNjYW4pOiBEb24ndCBsb29rIGZvciBDKysgLy8gY29tbWVudCBiZWZvcmUgZGlyZWN0aXZlLgorCUhhbmRsZSBcLW5ld2xpbmUgaW5zaWRlIGEgQysrIC8vIGNvbW1lbnQuCisJKHNraXBfaWZfZ3JvdXApOiBMaWtld2lzZS4KKwkoaGFuZGxlX2RpcmVjdGl2ZSk6IEFsc28gaGFuZGxlIEMrKyAvLyBjb21tZW50IGFmdGVyICMuICBQb2ludAorCWlwLT5idWZwIGFmdGVyIHRoZSBjb21tZW50IHN0YXJ0IGJlZm9yZSBjYWxsaW5nCisJc2tpcF90b19lbmRfb2ZfY29tbWVudC4KKwkodmFsaWRhdGVfZWxzZSk6IEhhbmRsZSBcLW5ld2xpbmUgaW5zaWRlIGEgQysrIC8vIGNvbW1lbnQuCisJKHNraXBfdG9fZW5kX29mX2NvbW1lbnQsIG1hY2FyZzEsIGRpc2NhcmRfY29tbWVudHMpOiBMaWtld2lzZS4KKworCSogdmFyYXNtLmMgKGltbWVkX2RvdWJsZV9jb25zdCk6IFNpZ24tZXh0ZW5kIGNvbnN0YW50cyB3aGVuIHRoZXkKKwloYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgZm9yIHRoZSB0YXJnZXQuCisKK01vbiBBcHIgMTEgMDY6MjA6NTYgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcmVsb2FkMS5jIChyZWxvYWQpOiBXaGVuIGFjY3VtdWxhdGluZyBuZWVkcywgdXNlIG5lc3RlZAorCXN0cnVjdHVyZXMgdG8gc2ltcGxpZnkgYW5kIHNwZWVkIHVwIHRoZSBjb2RlLgorCisJKiBhbHBoYS5tZCAoY29tcGFyZSBkZWZpbmVfc3BsaXQpOiBGaXggYnVncyBpbiBsYXN0IGFkZGl0aW9uLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCwgZW1pdF9saWJyYXJ5X2NhbGx7LF92YWx1ZX0sIHN0b3JlX29uZV9hcmcpOgorCVVzZSBjb252ZXJ0X21vZGVzIGluc3RlYWQgb2YgY29udmVydF90b19tb2RlLgorCisJKiB0cmVlLmggKGZyYW1lX3NpemUpOiBOb3cgYSB1bmlvbi4KKwkoREVDTF9BTElHTiwgREVDTF9GUkFNRV9TSVpFLCBERUNMX0ZVTkNUSU9OX0NPREUpOiBBY2Nlc3MgcHJvcGVyCisJZmllbGQgb2YgZnJhbWVfc2l6ZSB1bmlvbi4KKwkoREVDTF9TRVRfRlVOQ1RJT05fQ09ERSk6IFNpbXBsaWZpZWQ7IHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5LgorCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscywgcHVzaGRlY2wsIGJ1aWx0aW5fZnVuY3Rpb24pOgorCVVzZSBERUNMX0ZVTkNUSU9OX0NPREUgaW5zdGVhZCBvZiBERUNMX1NFVF9GVU5DVElPTl9DT0RFLgorCitNb24gQXByIDExIDA1OjUwOjI2IDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKKworCSogbWlwcy10ZmlsZS5jICh1cGRhdGVfaGVhZGVycyk6IERvIG5vdCBjb3B5IHN0U3RhdGljIHN5bWJvbHMgdGhhdAorCXJlc3VsdCBmcm9tIGludGVybmFsIGxhYmVscy4KKworU3VuIEFwciAxMCAwNzoxMzoyNCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBydGwuZGVmIChMU0hJRlQpOiBEZWxldGVkLgorCSogY29tYmluZS5jLCBjc2UuYywgZnVuY3Rpb24uYzogTm8gbG9uZ2VyIGhhbmRsZSBMU0hJRlQuCisJKiBnZW5hdHRydGFiLmMsIGxvb3AuYywgcmVsb2FkMS5jOiBMaWtld2lzZS4KKwkqIGV4cHIuaCAobHNobF9vcHRhYik6IERlbGV0ZWQuCisJKiBvcHRhYnMuYyAobHNobF9vcHRhYik6IERlbGV0ZWQuCisJKGV4cGFuZF9iaW5vcCwgaW5pdF9vcHRhYnMpOiBObyBsb25nZXIgcmVmZXJlbmNlIGl0LgorCSogZ2Vub3Bpbml0LmMsIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBMaWtld2lzZS4KKworCSogYXJtLmMsIGFybS5oLCBhcm0ubWQ6IFJlbW92ZSByZWZlcmVuY2VzIHRvIExTSElGVCBhbmQgbHNobHNpMy4KKwkqIGNsaXBwZXIuaCwgY2xpcHBlci5tZCwgY29udmV4LmgsIGNvbnZleC5tZCwgZWx4c2kubWQ6IExpa2V3aXNlLgorCSogZng4MC5oLCBmeDgwLm1kLCBnbWljcm8ubWQsIGkzNzAubWQ6IExpa2V3aXNlLgorCSogbTY4ay5jLCBtNjhrLmgsIG02OGsubWQsIG04OGsuYywgbTg4ay5tZCwgbnMzMmsubWQ6IExpa2V3aXNlLgorCSogcnM2MDAwLm1kLCB0YWhvZS5tZDogTGlrZXdpc2UuCisKKwkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfc2hpZnRfY291bnQsIGNhc2UgRVEpOiBMU0hJRlQgc2hvdWxkIGJlCisJTFNISUZUUlQuCisKK1N1biBBcHIgMTAgMDQ6NDg6MzcgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLWdoaXV4LmggKExJQl9TUEVDKTogUmVtb3ZlIGxhc3QgY2hhbmdlIHVudGlsIHdlJ3ZlIGdvdCB0aGUKKwlnbyBhaGVhZCBmcm9tIEhQIHRvIGRpc3RyaWJ1dGUgL3Vzci9saWIvZW5kLm8uCisJKiBwYS1naHB1eC5oLCBwYS1oaXV4LmgsIHBhLWdoaXV4Lmg6IExpa2V3aXNlLgorCitTYXQgQXByICA5IDE1OjA2OjIyIDE5OTQgIENocmlzdGlhbiBLcmFueiAgKGtyYW56QHNlbnQ1LnVuaS1kdWlzYnVyZy5kZSkKKworCSogY29uZmlnLnN1YjogQWRkIG5zKiBhcyBvcGVyYXRpbmcgc3lzdGVtczsgZGVmYXVsdCB0byBuczIgZm9yIE5lWFQuCisJKiBjb25maWd1cmUgKG02OGstbmV4dC1uczIqKTogTmV3IGNvbmZpZ3VyYXRpb24uCisJKiBsaWJnY2MyLmM6IEluY2x1ZGUgPG1hY2guaD4sIG5vdCA8bWFjaC9tYWNoLmg+IGZvciBOZVhUU3RlcCAyLjEuCisJKiBjb25maWcvbmV4dHN0ZXAyMS5oLCBtNjhrL25leHQyMS5oOiBOZXcgZmlsZXMuCisKK1NhdCBBcHIgIDkgMTA6NTY6MDYgMTk5NCAgUmFuZHkgV3JpZ2h0ICAocndyaWdodEBjb252ZXguY29tKQorCisJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgUk9UQVRFKTogRG9uJ3QgYXNzdW1lCisJc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiBhbHdheXMgcmV0dXJucyBDT05TVF9JTlQuCisJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0LCBjYXNlIElPUiwgUExVUyk6IExpa2V3aXNlLgorCitTYXQgQXByICA5IDA5OjEzOjEwIDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKKworCSogaTM4Ni9zZXF1ZW50LmggKFNUUlVDVF9WQUxVRXssX0lOQ09NSU5HLF9SRUdOVU19KToKKwlSZWRlZmluZSBmb3IgY2FsbGluZyBjb252ZW50aW9ucyBvZiBuYXRpdmUgY2MuCisKK1NhdCBBcHIgIDkgMDg6MjU6NDMgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogcnM2MDAwLmggKEZJTkFMX1BSRVNDQU5fSU5TTik6IERlZmluZS4KKwkqIHJzNjAwMC5jIChyczYwMDBfY29udmVydF9wcmVpbmNzKTogTmV3IGZ1bmN0aW9uLgorCisJKiBpMzg2Lm1kIChtdWxoaTMpOiBVc2UgU0ltb2RlIGZvciBNVUxUIFJUTC4KKworCSogZm9sZC1jb25zdC5jIChmb2xkKTogQXZvaWQgZXhwb25lbnRpYWwgd29yayB3aGVuIHNpbXBsaWZ5aW5nCisJY29uZGl0aW9uYWwgZXhwcmVzc2lvbnM7IGRvbid0IHJlY3Vyc2UgdHdpY2UgaWYgQVJHMSBpcyBjb25zdGFudC4KKworCSogZnVuY3Rpb24uYyAodW5pdGlhbGl6ZWRfdmFyc193YXJuaW5nLCBzZXRqbXBfYXJnc193YXJuaW5nKToKKwlSZXdvcmQgd2FybmluZyB0byBiZSBsZXNzIGFtYmlndW91cy4KKworCSogYy10eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBUcnVuY2F0ZSBhbmQgcmVleHRlbmQKKwlmb3IgUFJPTU9URV9QUk9UT1RZUEVTIHNvIHdlIGNhbiBnaXZlIGVycm9yIG9uIG92ZXJmbG93LgorCisJKiByZWxvYWQxLmMgKHJlbG9hZF9jb25mbGljdHMpOiBSZXdyaXRlIHRvIGNsZWFuIHVwIGFuZCBmaXgKKwludW1lcm91cyBidWdzOyBtb3ZlIHRvIGxhdGVyIGluIGZpbGUuCisKKwkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQdXQgbmV3IHR5cGUgaW4gc2FtZSBvYnN0YWNrIGFzCisJb2xkIG9uZXMsIG9yIHBlcm1hbmVudCBpZiBvbGQgb25lcyBpbiBkaWZmZXJlbnQgb2JzdGFja3MuCisKK0ZyaSBBcHIgIDggMTg6MTg6MTggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZm9sZC1jb25zdC5jIChmb2xkLCBjYXNlIEdUX0VYUFIpOiBTaW1wbGlmeSBYIDwgKDEgPDwgWSkKKwlpbnRvIFggPj4gWSA9PSAwLgorCitGcmkgQXByICA4IDExOjIzOjUxIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCUFkZCBzdXBwb3J0IGZvciAtbWVtYmVkZGVkLXBpYyB0byBNSVBTIGJhY2tlbmQsIHRvIGNyZWF0ZQorCWdlbnVpbmVseSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHdpdGhvdXQgdXNpbmcgYSBnbG9iYWwgb2Zmc2V0CisJdGFibGUuICBSZXF1aXJlcyBHTlUgYXMgYW5kIGxkLgorCSogbWlwcy5oIChNQVNLX0VNQkVEREVEX1BJQyk6IERlZmluZS4KKwkoVEFSR0VUX0VNQkVEREVEX1BJQyk6IERlZmluZS4KKwkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGVtYmVkZGVkLXBpYyBhbmQgbm8tZW1iZWRkZWQtcGljLgorCShBU01fU1BFQyk6IFBhc3MgLW1lbWJlZGRlZC1waWMgdG8gYXNzZW1ibGVyLgorCShBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBJZiBUQVJHRVRfRU1CRURERURfUElDIG91dHB1dCBhCisJZGlmZmVyZW5jZSwgcmF0aGVyIHRoYW4gdXNpbmcgLmdwd29yZC4KKwkoQVNNX09VVFBVVF9DQVNFX0xBQkVMKTogRGVmaW5lLgorCSogbWlwcy5tZCAoY2FzZXNpLCBjYXNlc2lfaW50ZXJuYWwpOiBOZXcgaW5zdHJ1Y3Rpb25zLCB1c2VkIG9ubHkKKwlmb3IgVEFSR0VUX0VNQkVEREVEX1BJQy4KKwkqIG1pcHMuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IEZvciBUQVJHRVRfRU1CRURERURfUElDIHdhcm4KKwlpZiAtbWFiaWNhbGxzIG9yIC1HIHdlcmUgdXNlZCwgYW5kIHNldCBmbGFnX3BpYyBhbmQKKwltaXBzX3NlY3Rpb25fdGhyZXNob2xkLgorCShwcmludF9vcGVyYW5kKTogSGFuZGxlICdTJyBieSBwcmludGluZyBhIGxhYmVsIHdpdGggYSBsZWFkaW5nIExTLgorCitUaHUgQXByICA3IDIyOjIwOjA5IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogY2FsbHMuYyAoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBNb3ZlIGlzX2NvbnN0IHNldCBhZnRlciBpZmRlZi4KKworV2VkIEFwciAgNiAyMTozNDoxNyAxOTk0ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKKworCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgY2FzZSBCVUlMVF9JTl9ORVhUX0FSRyk6IFRlc3Qgd2hldGhlcgorCWFuIGFyZ3VubWVudCBoYXMgYmVlbiBwYXNzZWQgdG8gX19idWlsdGluX25leHRfYXJnOyB3YXJuIGlmIG5vdC4KKworV2VkIEFwciAgNiAxNzoyODo0NCAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogdG9wbGV2LmMgKGxhbmdfb3B0aW9ucyk6ICBBZGQgLWZbbm8tXXZ0YWJsZS10aHVua3MgKGZvciBDKyspLgorCitXZWQgQXByICA2IDE1OjM1OjQyIDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogY2NjcC5jIChkaXNjYXJkX2NvbW1lbnRzKTogUmVwbGFjZSBjb21tZW50cyB3aXRoIGEgc2luZ2xlIHNwYWNlLgorCisJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogQWRkICQoc3JjZGlyKS8gYmVmb3JlIGV2ZXJ5IGdpbmNsdWRlIHVzZS4KKworCSogY2FsbHMuYyAoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBOZXcgdmFyaWFibGUgaXNfY29uc3QuICBDbGVhcgorCWl0IGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gYW4gYWdncmVnYXRlIGluIG1lbW9yeS4KKworCSogY29uZmlndXJlIChoZWFkZXJfZmlsZXMpOiBQcmVwZW5kICQoc3JjZGlyKS9naW5jbHVkZS8gdG8gZWFjaAorCWVsZW1lbnQgYmVmb3JlIHN1YnN0aXR1dGluZyBpbnRvIHRoZSBNYWtlZmlsZS4gIERlbGV0ZSBnaW5jbHVkZS8KKwlhdCBlYWNoIHBvaW50IHdoZXJlIHdlIHNldCBoZWFkZXJfZmlsZXMuCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IENvcnJlY3QgdHlwbyBpbiB1c2Ugb2YgdHJlZV9pbnRfY3N0X3Nnbi4KKworV2VkIEFwciAgNiAwNzozOTo0NyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBhbHBoYS5tZDogQWRkIGRlZmluZV9zcGxpdCB0byBzaW1wbGlmeSAiKHVuc2lnbmVkKSB4ID4gMHhmZmZmZmYiLgorCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogR3JvdXAgYW5kIGFscGhhYmV0aXplIHNvbWUgb3B0aW9ucy4KKworV2VkIEFwciAgNiAwNzowMzoxMyAxOTk0ICBTdGVwaGVuIFIuIHZhbiBkZW4gQmVyZyAgKGJlcmdAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlKQorCisJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHQpOiBVc2UgY3VycmVudF9mdW5jdGlvbl92YXJhcmdzLgorCShwb3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgorCShhc3NpZ25fcGFybXMpOiBSZXNwZWN0IGN1cnJlbnRfZnVuY3Rpb25fdmFyYXJncy4KKwlTYXZlIGFyZ3Nfc29fZmFyIGluIGFueSBjYXNlLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEFsbG93IGJ1aWx0aW5fbmV4dF9hcmcgZm9yIHZhcmFyZ3MKKwlmdW5jdGlvbnMgYXMgd2VsbC4KKwkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBmaWVsZCBmb3IgY3VycmVudF9mdW5jdGlvbl92YXJhcmdzLgorCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IFVzZSBjdXJyZW50X2Z1bmN0aW9uX3ZhcmFyZ3MuCisJKiB2YS1hbHBoYS5oLCB2YS1tODhrLmgsIHZhLXNwYXJjLmggKHZhX2RjbCk6IEFkZCAuLi4gdG8KKwlzZXQgY3VycmVudF9mdW5jdGlvbl92YXJhcmdzLgorCisJKiBjLWRlY2wuYyAod2Fybl9taXNzaW5nX2RlY2xhcmF0aW9ucyk6IE5ldyB2YXJpYWJsZS4KKwkoY19kZWNvZGVfb3B0aW9uKTogLVdtaXNzaW5nLWRlY2xhcmF0aW9ucy4KKwkoc3RhcnRfZnVuY3Rpb24pOiBBY3R1YWxseSBkbyB0aGUgY2hlY2tpbmcuCisJKiB0b3BsZXYuYyAobGFuZ19vcHRpb25zKTogQWRkIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMuCisKKwkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IERlbGF5IGNvcHlpbmcgc3RhdGljIGNoYWluLgorCisJKiBjYWxscy5jIChlbWl0X2xpYnJhcnlfY2FsbCk6IE1vdmUgdGhlIGludm9jYXRpb24gb2YKKwlwcmVwYXJlX2NhbGxfYWRkcmVzcyBiZWZvcmUgdGhlIGFzc2lnbm1lbnRzIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuCisJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTGlrZXdpc2UuCisKKwkqIGkzODYuaCAoREVCVUdfUFJJTlRfUkVHKTogRml4IHByaW50aW5nIG9mIGNvcHJvY2Vzc29yIHJlZ3MgaW4gUUltb2RlLgorCitXZWQgQXByICA2IDA2OjQyOjUwIDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKKworCSogbWlwcy10ZmlsZS5jICh1cGRhdGVfaGVhZGVycyk6IENvcHkgc3RTdGF0aWMgc3ltYm9scyBmcm9tIHRoZSBvbGQKKwlsb2NhbCBzeW1ib2wgdGFibGUgdG8gdGhlIG5ldyBsb2NhbCBzeW1ib2wgdGFibGUgaWYgdGhleSBkaWQgbm90IGdldAorCWFkZGVkIHZpYSBkZWJ1Z2dpbmcgcHN1ZWRvIG9wcy4KKworV2VkIEFwciAgNiAwNjozNjowNSAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBzdGRhcmcuaCwgdmFyYXJncy5oIChfX3ZhX3JvdW5kZWRfc2l6ZSk6IFJvdW5kIHRvIG11bHRpcGxlCisJb2Ygc2l6ZW9mIChzaG9ydCkgb24gc3lzVjY4LgorCisJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IHBlYS9tb3ZlOiBGaXggdHlwb3MuCisJYXNtX2ZwcmludGYoImFkZCUuW3dsXSAuLi4pOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KKworVHVlIEFwciAgNSAyMDowNToxMCAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBBZGQgImluY2x1ZGUiIHByZWZpeCBmb3IgW2Zvby9dc3RhZ2VOLgorCitUdWUgQXByICA1IDAxOjIyOjA4IDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS1naGl1eC5oIChMSUJfU1BFQyk6IExpbmsgaW4gL3Vzci9saWIvZW5kLm8KKwkqIHBhLWdocHV4LmgsIHBhLWhpdXguaCwgcGEtaHB1eC5oIChMSUJfU1BFQyk6IExpa2V3aXNlLgorCitNb24gQXByICA0IDE3OjM2OjU1IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogUGFzcyBuZXcgYXJnLCBibG9jayBudW0sIHRvCisJc2Rib3V0X2VuZF9ibG9jay4KKwkqIHNkYm91dC5jIChzZGJvdXRfYmVnaW5fYmxvY2spOiBEb24ndCBvdXRwdXQgYmxvY2sgZm9yIGZ1bmN0aW9uCisJbGV2ZWwgc2NvcGUgdW5sZXNzIE1JUFNfREVCVUdHSU5HX0lORk8gaXMgZGVmaW5lZC4KKwkoc2Rib3V0X2VuZF9ibG9jayk6IExpa2V3aXNlLiAgQWRkIG5ldyBwYXJhbWV0ZXIgbiBmb3IgdGhlIGJsb2NrCisJbnVtYmVyLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IElmIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTiBkZWZpbmVkLCBtYXJrCisJZnVuY3Rpb24gYXMgYWRkcmVzc2FibGUgc2FtZSB0aW1lIGFzIHdlIGNsZWFyIGlzX2ludGVncmFibGUuCisKK01vbiBBcHIgIDQgMTc6MTE6MTcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCisKKwkqIE1ha2VmaWxlLmluICh4c3lzLXByb3Rvcy5oKTogVW5kZWZpbmUgX18qX1RZUEUgd2hlbgorCXByZXByb2Nlc3NpbmcgZml4dG1wLmMuCisJKiBmaXhpbmNsdWRlczogRml4IHB0cmRpZmZfdCBhbmQgd2NoYXJfdCBpbiBzeXN0ZW0gaGVhZGVycyBsaWtlIHdlCisJZG8gc2l6ZV90LgorCSogc2Nhbi10eXBlcy5zaDogVXNlIF9fV0NIQVJfVFlQRV9fLCBfX1BUUkRJRkZfVFlQRV9fLCBhbmQKKwlfX1NJWkVfVFlQRV9fLiAgU3RpbGwgZGVkdWNlIHNpemVfdCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvcgorCXNzaXplX3QgaWYgbmVjZXNzYXJ5LgorCSogc3RkZGVmLmggKHdjaGFyX3QpOiBBbHdheXMgZGVmaW5lIGFzIF9fV0NIQVJfVFlQRV9fLgorCSogY2NjcC5jIChzcGVjaWFsX3N5bWJvbCwgY2FzZSBUX1dDSEFSX1RZUEUpOiBPdXRwdXQgIl9fd2NoYXJfdCIKKwlmb3IgQysrLgorCitTYXQgQXByICAyIDA4OjE0OjAyIDE5OTQgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQorCisJKiBpMzg2L29zZnJvc2UuaCAoRlVOQ1RJT05fUFJPTE9HVUUsIEZVTkNUSU9OX1BST0ZJTEVSKTogQ29ycmVjdAorCWNvZGUgZm9yIC1mcGljIEVMRiBjYXNlLgorCitGcmkgQXByICAxIDE3OjMzOjM1IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQorCisJKiBmaXhwcm90bzogQWRkIHN0cm5jcHksIHN0cnBicmssIHN0cnJjaHIsIHN0cnNwbiwgc3Ryc3RyLCBzdHJ0b2sKKwlhbmQgc3RyeGZybSB0byB0aGUgcmVxdWlyZWQgbGlzdCBmb3Igc3RyaW5nLmguCisKK0ZyaSBBcHIgIDEgMDE6MDU6NTMgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjb25maWd1cmU6IENoYW5nZSBtYXRoLTY4ODgxLmggdG8gZ2luY2x1ZGUvbWF0aC02ODg4MS5oLgorCShFWFRSQV9IRUFERVJTKTogVXNlIHwgbm90IC8gaW4gc2VkIGNvbW1hbmQuCisJKiBtYXRoLTY4ODgxLmgsIG1hdGgtMzMwMC5oOiBNb3ZlIHRvIGdpbmNsdWRlIGRpcmVjdG9yeS4KKworCSogbGliZ2NjMi5jOiBNb2RpZnkgYWxsIHVzZXMgb2YgX19hdHRyaWJ1dGVfXyBtb2RlIHRvIHVzZSBuZXcKKwlzeW50YXguCisKKwkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBGaWxlcyBpbiBnaW5jbHVkZSBub3cuICBBZGQgc3RkYXJnLmgsCisJc3RkZGVmLmgsIHZhcmFyZ3MuaC4KKwkoYWxsLmNyb3NzLCByZXN0LmVuY2FwKTogTW92ZSBMSUJHQ0MgYWZ0ZXIgc3RtcC1oZWFkZXJzLiAgQWRkCisJb2JqYy1ydW50aW1lLCBhbmQgU1lTQ0FMTFMuYy5YLgorCShmb3ItYm9vdHN0cmFwKTogRGVsZXRlLgorCShPQkpDLCBPQkpFQ1RJVkUtQyk6IERlbGV0ZSBvYmpjLXJ1bnRpbWUuCisJKHByb3RvKTogRGVsZXRlIFNZU0NBTExTLmMuWC4KKwkoKi5vKTogRGVsZXRlIGd2YXJhcmdzLmggZGVwZW5kZW5jaWVzLgorCShzdG1wLWludC1oZHJzKTogRGVsZXRlIGd2YXJhcmdzLmgsIGdzdGRhcmcuaCwgZ3N0ZGRlZi5oIGRlcHMsIGFuZAorCWNvZGUgdG8gY29weSB0aGVtLgorCisJKiBiYy1lbWl0LmM6IENoYW5nZSA8Z3ZhcmFyZ3MuaD4gdG8gPHZhcmFyZ3MuaD4uCisJKiBlbnF1aXJlLmMsIGxpYmdjYzIuYywgc3lzLXR5cGVzLmg6IENoYW5nZSAiZ3N0ZGRlZi5oIiB0byA8c3RkZGVmLmg+LgorCSogZ2NjLmM6IENoYW5nZSAiZ3N0ZGFyZy5oIiB0byA8c3RkYXJnLmg+IGFuZCAiZ3ZhcmFyZ3MuaCIgdG8KKwk8dmFyYXJncy5oPi4KKwkqIG9iamMvT2JqZWN0Lm06IENoYW5nZSAiZ3N0ZGFyZy5oIiB0byA8c3RkYXJnLmg+LgorCSogb2JqYy9ydW50aW1lLmgsIHNjYW4tdHlwZXMuc2g6IENoYW5nZSAiZ3N0ZGRlZi5oIiB0byA8c3RkZGVmLmg+LgorCUNoYW5nZSAiZ3N0ZGFyZy5oIiB0byA8c3RkYXJnLmg+LgorCSogb2JqYy9oYXNoLmgsIG9iamMvb2JqYy5oLCBvYmpjL3NhcnJ5Lmg6IERlbGV0ZSB1c2Ugb2YgSU5fR0NDIHRvCisJY29udHJvbCBzdGRkZWYuaC9nc3RkZGVmLmggaW5jbHVkZS4KKwkqIGNjY3AuYyAocGNmaW5jbHVkZSk6IE1vZGlmeSBjb21tZW50IHJlZmVycmluZyB0byBnc3RkZGVmLmguCisJKiBzcGFyYy9zcGFyYy5oIChDUFBfUFJFREVGSU5FUyk6IFVwZGF0ZSBHQ0NfTkVXX1ZBUkFSR1MgY29tbWVudC4KKwkqIGkzODYveC1uZXh0LCBtNjhrL3gtbmV4dCAobGliZ2NjMi5hLCBzdGRhcmcuaCk6IERlbGV0ZSBydWxlcy4KKwkqIGZpeGluY2x1ZGVzOiBNb2RpZnkgY29tbWVudCByZWZlcnJpbmcgdG8gZ3ZhcmFyZ3MuaC4KKwkqIGNwL01ha2VmaWxlLmluOiBNb2RpZnkgY29tbWVudHMgdGhhdCByZWZlciB0byBndmFyYXJncy5oIGFuZAorCWdzdGRkZWYuaC4KKworCSogZ3N0ZGFyZy5oLCBnc3RkZGVmLmgsIGd2YXJhcmdzLmg6IE1vdmUgdG8gZ2luY2x1ZGUgZGlyZWN0b3J5CisJYW5kIHN0cmlwIG9mZiBpbml0aWFsIGBnJy4KKwkqIHZhLSouaCwgcHJvdG8uaDogTW92ZSB0byBnaW5jbHVkZSBkaXJlY3RvcnkuCisKK1RodSBNYXIgMzEgMTk6NDk6MTcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBzcGFyYy5oIChTUEFSQ19TVEFDS19BTElHTik6IFVzZSB+NyBub3QgMHhmZmZmZmZmOCBmb3IgcG9ydGFiaWxpdHkuCisKKwkqIHhjb2Zmb3V0LmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUpOiBEaXNhYmxlLgorCisJKiBzb2wyLmg6IERlbGV0ZSBpZmRlZmVkIG91dCBzZWN0aW9uIGRlZmluaW5nICpfU0VDVElPTl9BU01fT1AKKwltYWNyb3MuCisJKHtDVE9SUyxEVE9SU31fU0VDVElPTl9BU01fT1ApIERlbGV0ZSBkZWZpbml0aW9ucy4KKwkqIHN5c3Y0LmggKElOSVRfU0VDVElPTl9BU01fT1ApOiBEb24ndCBzZXQgdGhlIGFsbG9jIGZsYWcuCisJKHtDVE9SUyxEVE9SU31fU0VDVElPTl9BU01fT1ApOiBTZXQgZXhlY2luc3RyIGZsYWcuCisKKwkqIGRieG91dC5jIChkYnhvdXRfdHlwZSk6IFJlLWVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IGZvciBhbm9ueW1vdXMKKwlzdHJ1Y3R1cmVzLiAgQ2hhbmdlIGFsbCB0aHJlZSBwbGFjZXMgdGhhdCByZWZlciB0byB4cmVmcyB0byB1c2UKKwlleGFjdGx5IHRoZSBzYW1lIGNvbmRpdGlvbi4KKworCSogYy10eXBlY2suYyAocG9wX2luaXRfbGV2ZWwpOiBDb3JyZWN0IHR5cG8gaW4gdXNlIG9mCisJdHJlZV9pbnRfY3N0X3Nnbi4KKworCSogbWlwcy5jIChtaXBzX3J0eF9jbGFzc2lmeSwgbWRfcmVnaXN0ZXJfb3BlcmFuZCwKKwlmcHN3X3JlZ2lzdGVyX29wZXJhbmQsIGNtcDJfb3AsIHVuc19jbXBfb3AsIGZjbXBfb3ApOiBEZWxldGUuCisJKG1pcHNfY29uc3RfZG91YmxlX29rLCBtaXBzX2ZpbGxfZGVsYXlfc2xvdCwgb3V0cHV0X2Jsb2NrX21vdmUsCisJcHJpbnRfb3BlcmFuZCwgZnVuY3Rpb25fZXBpbG9ndWUpOiBEb24ndCB0cmVhdCBnYXMgZGlmZmVyZW50bHkKKwl0aGFuIG5hdGl2ZSBhc3NlbWJsZXIuCisJKGVxdWFsaXR5X29wLCBjbXBfb3ApOiBEZWxldGUgdXNlIG9mIGNsYXNzaWZ5X29wLgorCShvdmVycmlkZV9vcHRpb25zKTogRGVsZXRlIHVzZXMgb2YgbWlwc19ydHhfY2xhc3NpZnkuCisJKGZpbmFsX3ByZXNjYW5faW5zbik6IFNpbXBsaWZ5IGJhc2VkIG9uIG90aGVyIGNoYW5nZXMuCisJKiBtaXBzLmggKG1pcHNfcnR4X2NsYXNzaWZ5LCBjbXAyX29wLCBmY21wX29wLAorCWZwc3dfcmVnaXN0ZXJfb3BlcmFuZCwgbWRfcmVnaXN0ZXJfb3BlcmFuZCwgdW5zX2NtcF9vcCwKKwljbGFzc2lmeV9vcCwgYWRkaXRpdmVfb3AsIGRpdm1vZF9vcCwgdW5zaWduZWRfb3AsIENMQVNTXypfT1AsCisJTk9USUNFX1VQREFURV9DQyk6IERlbGV0ZS4KKwkoUlRYX0NPU1RTKTogVXNlIGRpZmZlcmVudCBudW1iZXJzIGZvciBSMzAwMC9SNjAwMC9SNDAwMC4KKwkoUkVHSVNURVJfTU9WRV9DT1NUKTogVXNlIGNvc3Qgb2YgMiB3aXRoaW4gc2FtZSByZWdpc3RlciBjbGFzcywgNAorCWZvciBGUCB0byBHUiBjb3B5LCA2IG90aGVyd2lzZS4KKwkoQURKVVNUX0NPU1QpOiBHaXZlIGFudGkgYW5kIG91dHB1dCBkZXBlbmRlbmNpZXMgemVybyBjb3N0LgorCShQUkVESUNBVEVfQ09ERVMpOiBEZWxldGUgb2Jzb2xldGUgZnVuY3Rpb25zIGZyb20gbGlzdC4KKwkqIG1pcHMubWQgKGFkZHNpM19pbnRlcm5hbCk6IERvbid0IG91dHB1dCBzdWJ0cmFjdC4KKwkoc3Vic2kzX2ludGVybmFsKTogRG9uJ3Qgb3V0cHV0IGFkZC4KKwkoc211bHNpM19oaWdocGFydCwgdW11bHNpM19oaWdocGFydCk6IEFkZCBtaXNzaW5nIHRoaXJkIG9wZXJhbmQgdG8KKwltaXBzX21vdmVfMXdvcmQgY2FsbC4KKworVGh1IE1hciAzMSAxMjowOTo0MiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGxvbmdsb25nLmg6IENoYW5nZSBSUy82MDAwIG1hY3JvcyB0byB1c2UgUG93ZXJQQyBtbmVtb25pY3Mgd2hlbgorCXVzaW5nIC1tbmV3LW1uZW1vbmljcy4KKworV2VkIE1hciAzMCAxNzozNzoxNiAxOTk0ICBGcmVkZXJpYyBQaWVycmVzdGVndXkgKEYuUGllcnJlc3RlZ3V5QGZyY2wuYnVsbC5mcikKKworCSogbTY4ay9kcHgyLmggKE5PX0FTTV9GTU9WRUNSKTogRGVmaW5lZC4KKwkqIG02OGsuYyAoc3RhbmRhcmRfNjg4ODFfY29uc3RhbnRfcCk6IFJldHVybiAwIGlmIE5PX0FTTV9GTU9WRUNSCisJZGVmaW5lZC4KKworCSogY29uZmlndXJlOiBBZGQgY2FzZSBmb3IgcnM2MDAwLWJ1bGwtYm9zeC4KKworV2VkIE1hciAzMCAxNzozMToyNCAxOTk0ICBNYXR0aGlhcyBQZmFsbGVyICAobGVvQG1hcmNvLmRlKQorCisJKiBuczMyay5jIChnbG9iYWxfc3ltYm9saWNfcmVmZXJlbmNlX21lbnRpb25lZF9wKTogTmV3ICBwYXJhbWV0ZXIgRi4KKwkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogV2hlbiBnZW5lcmF0aW5nIHBpYyBiYXNlcmVnaXN0ZXJzIGFyZQorCW9ubHkgYWxsb3dlZCBpZiBvZmZzZXQgaXMgQ09OU1RfSU5ULiBGb3Ige1NZTUJPTCxMQUJFTH1fUkVGCisJYSBpbmRleHJlZ2lzdGVyIGhhcyB0byBiZSB1c2VkIGluc3RlYWQuIChzYikgaXMgbm8gbG9uZ2VyCisJZW1pdHRlZCBmb3IgY29uc3RhbnQgYWJzb2x1dGUgYWRkcmVzc2VzLgorCShvdXRwdXRfbW92ZV9kb3VibGUpOiBVc2UgQ09OU1RBTlRfUCBpbnN0ZWFkIG9mIENPTlNUQU5UX0FERFJFU1NfUC4KKwkqIG5zMzJrLmggKEZVTkNUSU9OX1BST0xPR1VFKTogdXNlIF9fR0xPQkFMX09GRlNFVF9UQUJMRV8sCisJbm90IF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy4KKwkoTEVHSVRJTUFURV9DT05TVEFOVF9QLCBMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1ApOiBVc2UKKwlMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1AsIG5vdCBMRUdJVElNQVRFX0NPTlNUQU5UX1AsCisJdG8gc2V0IGN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlLgorCShJTkRJUkVDVEFCTEVfMV9BRERSRVNTX1ApOiBCYXNlcmVnaXN0ZXJzIGFyZSBub3QgbGVnYWwKKwlmb3Ige0xBQkVMLFNZTUJPTH1fUkVGUyB3aGVuIGVtaXR0aW5nIHBpYy4KKwkoR09fSUZfSU5ERVhBQkxFX0FERFJFU1MpOiBJTkRJUkVDVEFCTEVfMV9BRERSRVNTZXMgYXJlIGluZGV4YWJsZSB0b28uCisJKiBuczMyay9uZXRic2QuaCwgbnMzMmsveG0tbmV0YnNkLmg6ICBOZXcgZmlsZXMuCisJKiBjb25maWd1cmUgKG5zMzJrLXBjNTMyLW5ldGJzZCopOiBOZXcgY2FzZSwgdG8gdXNlIG5ldyBmaWxlcy4KKworV2VkIE1hciAzMCAxNjozOToyNCAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEZpeCB0eXBvIGluIHByZXZpb3VzIGNoYW5nZS4KKworCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCwgY2FzZSAnQicpOiBJZiBuYW1lIGlzICJzdGFnZU4vIiwKKwlhZGQgImluY2x1ZGUiIHRvIHN5c3RlbSBpbmNsdWRlIHByZWZpeC4KKworCSogYmMtZW1pdC5jLCBjYWxscy5jLCBjb21iaW5lLmMsIGVtaXQtcnRsLmMsIGZpbmFsLmMsIGcrKy5jOgorCUluY2x1ZGUgPHN0ZGFyZy5oPiBpbnN0ZWFkIG9mICJnc3RkYXJnLmgiOyBzaW1pbGFybHkgZm9yIHZhcmFyZ3MuCisJKiBnZW5hdHRydGFiLmMsIG1pcHMtdGZpbGUuYywgcHJvdG9pemUuYywgdG9wbGV2LmMsIHRyZWUuYzogTGlrZXdpc2UuCisKKwkqIGZvbGQtY29uc3QuYyAoc3RyaXBfY29tcG91bmRfZXhwcik6IE5ldyBmdW5jdGlvbi4KKwkoZm9sZCk6IENhbGwgaXQ7IGF2b2lkIGV4cG9uZW50aWFsIHdvcmsgd2hlbiBzaW1wbGlmeWluZworCWJpbmFyeSBvcCBvdmVyIGEgQ09ORF9FWFBSLgorCisJKiBjc2UuYyAoY3NlX2luc24pOiBBZGQgbWlzc2luZyBkZWZpbml0aW9uIG9mIHZhciBURU07IGNsZWFuIHVwCisJc2hhZG93ZWQgdXNlcy4KKworCSogc3BhcmMuYyAoc3BhcmNfdHlwZV9jb2RlKTogUmV2aXNlIHNvIGl0IHN1cHBvcnRzIG5vbi1DIHR5cGVzLgorCitXZWQgTWFyIDMwIDE0OjUyOjI2IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKKworCSogeG0tYWxwaGEuaCAoc3RyaW5nLmgpOiBEb24ndCBpbmNsdWRlIHdoZW4gaW5oaWJpdF9saWJjIGlzIGRlZmluZWQuCisKK1dlZCBNYXIgMzAgMTA6Mzc6NTEgMTk5NCAgU3RhbiBDb3hzICAoY294c0BkZy1ydHAuZGcuY29tKQorCisJKiBtODhrLm1kIChtb3ZkZik6IERvIG5vdCBjb25zaWRlciBleHRlbmRlZCByZWdpc3RlcnMgd2hlbiBkb2luZworCWRlZmluZV9zcGxpdC4gCisKK1dlZCBNYXIgMzAgMDE6NDk6MDYgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZy9tNjhrL202OGsuYyAob3V0cHV0X21vdmVfZG91YmxlKTogVXNlIGAlLicgd2hlcmUgYXBwcm9wcmlhdGUuCisKK1R1ZSBNYXIgMjkgMTA6NDY6MTggMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKEFTTV9PVVRQVVRfTEFCRUwpOiBUQVJHRVRfR0FTIG5vIGxvbmdlciBuZWVkcyB0cmFpbGluZyBjb2xvbnMuCisJKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwsIEFTTV9PVVRQVVRfQ09NTU9OKTogTGlrZXdpc2UuCisKKwkqIHBhLmggKFRBUkdFVF9QT1JUQUJMRV9SVU5USU1FKTogRGVmaW5lLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1wb3J0YWJsZS1ydW50aW1lIGFuZCAtbW5vLXBvcnRhYmxlLXJ1bnRpbWUuCisJKENVTVVMQVRJVkVfQVJHUyk6IE5vdyBhICJzdHJ1Y3QgaHBwYV9hcmdzIiByYXRoZXJuIHRoYW4gYW4gaW50LgorCUFsbCByZWZlcmVuY2VzIGNoYW5nZWQuCisJKElOSVRfQ1VNVUxBVElWRV9BUkdTKTogQWxzbyBpbml0aWFsaXplIG5hcmdzX3Byb3RvdHlwZS4KKwkoSU5JVF9DVU1VTEFUSVZFX0lOQ09NSU5HX0FSR1MpOiBEZWZpbmUuCisJKEZVTkNUSU9OX0FSR19BRFZBTkNFKTogRGVjcmVtZW50IG5hcmdzX3Byb3RvdHlwZSBmb3IgZWFjaCBhcmcgc2Vlbi4KKwkoRlVOQ1RJT05fQVJHKTogSGFuZGxlIFRBUkdFVF9QT1JUQUJMRV9SVU5USU1FLgorCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRXhwbGljaXRseSBkaXNhbGxvdyBhcmd1bWVudCByZWxvY2F0aW9ucworCWZvciBUQVJHRVRfUE9SVEFCTEVfUlVOVElNRS4KKwkoQVNNX09VVFBVVF9JTlQpOiBEbyBub3QgdXNlIGEgUCUgcHJlZml4IGZvciBmdW5jdGlvbiByZWZlcmVuY2VzCisJaWYgVEFSR0VUX1BPUlRBQkxFX1JVTlRJTUUuCisKKwkqIHBhLm1kIChoaWdoIGFuZCBsb19zdW0gZm9yIGZ1bmN0aW9uIGFkZHJlc3Nlcyk6IFByb3ZpZGUgYWx0ZXJuYXRlCisJZGVmaW5pdGlvbnMgZm9yIFRBUkdFVF9QT1JUQUJMRV9SVU5USU1FLgorCisJKiBwYS5jIChvdXRwdXRfYXJnX2Rlc2NyaXB0b3IpOiBFeHBsaWNpdGx5IGRpc2FsbG93IGFyZ3VtZW50CisJcmVsb2NhdGlvbnMgZm9yIFRBUkdFVF9QT1JUQUJMRV9SVU5USU1FLgorCitUdWUgTWFyIDI5IDA3OjQ1OjQ0IDE5OTQgIENocmlzIFNtaXRoICAoY3NtaXRoQGNvbnZleC5jb20pCisKKwkqIGNvbnZleC5oIChjaGVja19mbG9hdF92YWx1ZSk6IGZpeCByZXR1cm4gdHlwZSBpbiBleHRlcm4uCisKK01vbiBNYXIgMjggMTg6MzY6NTYgMTk5NCAgUGhpbGlwcGUgRGUgTXV5dGVyICAocGhkbUBpbmZvLnVjbC5hYy5iZSkKKworCSogbTY4ay9tb3QzMzAwLmggKEFTTV9JREVOVElGWV9HQ0MpOiBEZWZpbmUgdG8gYmUgbm9uLW51bGwuCisKK1N1biBNYXIgMjcgMjA6MjY6MzYgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQorCisJKiBjLXBhcnNlLmluIChhdHRyaWIpOiBIYW5kbGUgc3RyaW5nIGFyZ3MgYXMgZXhwcmVzc2lvbnMsCisJbWVyZ2luZyB0aGUgdHdvIHJ1bGVzLiAgYG1vZGUnIGF0dHJpYnV0ZSBub3cgdGFrZXMgYSBzdHJpbmcgYXJnLgorCURlbGV0ZSB0aGUgcnVsZSBmb3IgYW4gaWRlbnRpZmllciBhcyBhcmcuCisJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBgbW9kZScgYXR0cmlidXRlIG5vdyB0YWtlcyBzdHJpbmcgYXJnLgorCitTdW4gTWFyIDI3IDE0OjQyOjM5IDE5OTQgIERvdWcgRXZhbnMgIChkamVAY3lnbnVzLmNvbSkKKworCSogYy1wYXJzZS5pbiAoYXR0cmliKTogQmFjayBvdXQgbGFzdCBwYXRjaC4KKworRnJpIE1hciAyNSAxNzo1Mjo0NCAxOTk0ICBXYWx0ZXIgTWlzYXIgIChtaXNhckByYmcuaW5mb3JtYXRpay50aC1kYXJtc3RhZHQuZGUpCisKKwkqIG02OGsubWQgKG1vdnNpKTogTmV3IHN0cmF0ZWd5IGZvciBtb3Zpbmcgc21hbGwgY29uc3RhbnRzIGludG8gZHJlZ3MsCisJaWYgaXQgY2FuJ3QgYmUgZG9uZSB3aXRoIG1vdmVxLiAKKwkqIG02OGsuaCAoQ09OU1RfQ09TVFMpOiBSZWZsZWN0IHRoZSBjaGFuZ2UgaW4gbTY4ay5tZC4KKworRnJpIE1hciAyNSAxNDozMDo0NyAxOTk0ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIChwaGRtQGluZm8udWNsLmFjLmJlKQorCisJKiBtNjhrLm1kIChjYWxsKTogSWYgKG5ldykgTU9UT1JPTEFfQlNSIGRlZmluZWQsIHRyeSB0byBlbWl0ICdic3InLgorCSogbTY4ay9tb3QzMzAwLmggKE1PVE9ST0xBX0JTUik6IERlZmluZWQuCisKKwkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogVXNlIGxpbmsudyBvbiA2ODA0MDsKKwllbWl0IHBlYSBmcCArIG1vdmwgc3AsZnAgaW5zdGVhZCBvZiBsaW5rdyAwIGZvciA2ODA0MC4KKworRnJpIE1hciAyNSAxNDoyMTowNiAxOTk0ICBKaW0gTWV5ZXJpbmcgIChtZXllcmluZ0BpZGVmaXguY29tY28uY29tKQorCisJKiBiYy1lbWl0LmMgKGJjX2VtaXRfYnl0ZWNvZGUpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgTlBVU0hFUy4KKwkoYmNfZW1pdF9pbnN0cnVjdGlvbik6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBMSVRFUkFMLgorCSogYy1hdXgtaW5mby5jIChnZW5fZGVjbCk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZS4KKwkqIGMtY29tbW9uLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCBDT0RFLgorCSogYy1kZWNsLmMgKHB1c2hfcGFybV9kZWNsKTogTW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBPTERERUNMCisJaW50byAjaWYgMCBibG9jay4KKwkoZmluaXNoX2VudW0pOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcyBJIGFuZCBURU1QT1JBUlkuCisJKiBjLXBhcnNlLmluIChwcmltYXJ5KTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIENPTlRFWFQuCisJKiBjLXR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFJlbW92ZSBkZWNscyBvZiB1bnVzZWQgdmFyaWFibGVzLgorCSogY29sbGVjdDIuYyAocHV0ZW52KTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIFNUUl9MRU4uCisJKG1haW4pOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcyBMRU4gYW5kIENMRU4uCisJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogUmVtb3ZlIGRlY2xzIG9mIHVudXNlZCB2YXJpYWJsZXMuCisJKHN1YnN0KTogUmVtb3ZlIGRlY2xzIG9mIHVudXNlZCB2YXJpYWJsZXMgT1JJR19DT0RFLgorCShzaW1wbGlmeV9pZl90aGVuX2Vsc2UpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgQzIuCisJKG1ha2VfY29tcG91bmRfb3BlcmF0aW9uKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIENPVU5ULgorCShrbm93bl9jb25kKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIE5FVy4KKwkobWFrZV9maWVsZF9hc3NpZ25tZW50KTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIE9VUkRFU1QuCisJKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcy4KKwkoc2ltcGxpZnlfc2hpZnRfY29uc3QpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgSU5ORVIuCisJKiBjc2UuYyAoY3NlX2luc24pOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgVEVNLgorCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wpOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcy4KKwkqIGVtaXQtcnRsLmMgKHJlc2V0X3VzZWRfZmxhZ3MpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUuCisJKGdlbl9zZXF1ZW5jZSk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBORVdWRUMuCisJKiBlbnF1aXJlLmMgKGZfcmVwKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIEYxLgorCSogZmluYWwuYyAob3V0cHV0X3NvdXJjZV9saW5lKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlLgorCSogZml4LWhlYWRlci5jIChyZWFkX3NjYW5fZmlsZSk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBSUFRSLgorCSh3cml0ZV9yYnJhYyk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBQQVJUSUFMLgorCShtYWluKTogTGlrZXdpc2UuCisJKiBnKysuYyAobWFpbik6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBGTi4KKwkqIGdlbmF0dHIuYyAobWFpbik6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBNQVhfSVNTVUVfVElNRS4KKwkqIGdlbmF0dHJ0YWIuYyAoZXhwYW5kX3VuaXRzKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlLgorCSogZ2VucmVjb2cuYyAoYnJlYWtfb3V0X3N1YnJvdXRpbmVzKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlLgorCSogZ2xvYmFsLmMgKGdsb2JhbF9jb25mbGljdHMpOiBNb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIEkgaW50bworCSNpZiAwIGJsb2NrLgorCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9ub2NvcHkpOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcnMuCisJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBSZW1vdmUgdHdvIGJsb2NrLXNjb3BlIGRlY2xzIG9mIHVudXNlZAorCXZhcmlhYmxlIENPUFkuCisJKiBqdW1wLmMgKGludmVydF9qdW1wKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIE9MQUJFTC4KKwkqIGxvb3AuYyAoaW5pdF9sb29wKTogUmVtb3ZlIGRlY2xzIG9mIHVudXNlZCB2YXJpYWJsZXMuCisJKGxvb3Bfb3B0aW1pemUpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgRU5ELgorCShjb21iaW5lX21vdmFibGVzKTogUmVtb3ZlIGRlY2xzIG9mIHVudXNlZCB2YXJpYWJsZXMuCisJKGNoZWNrX2ZpbmFsX3ZhbHVlKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIFRFTS4KKwkoY2hlY2tfZGJyYV9sb29wKTogUmVtb3ZlIGRlY2xzIG9mIHVudXNlZCB2YXJpYWJsZXMuCisJKG1heWJlX2VsaW1pbmF0ZV9iaXYpOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcyBTRVQgYW5kIFYuCisJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3MpOiBSZW1vdmUgdHdvIGJsb2NrLXNjb3BlIGRlY2xzIG9mCisJdW51c2VkIHZhcmlhYmxlIE9MRFJFRi4KKwkqIHJ0bC5jIChyZWFkX3J0eCk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBTVFJJTkdCVUZTSVpFLgorCSogc2Nhbi5jIChnZXRfdG9rZW4pOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgUVVPVEUuCisJKGdldF90b2tlbik6IFJlbW92ZSB1bnVzZWQgbGFiZWwgQUdBSU4uCisJKiBzY2hlZC5jIChjbGVhcl91bml0cyk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBVTklULgorCShhY3R1YWxfaGF6YXJkX3RoaXNfaW5zdGFuY2UpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgSS4KKwkoYWN0dWFsX2hhemFyZCk6IFJlbW92ZSB0d28gYmxvY2stc2NvcGUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlIEJFU1QuCisJKHNjaGVkX2FuYWx5emVfMSk6IFJlbW92ZSBkZWNscyBvZiB1bnVzZWQgdmFyaWFibGVzIE9GRlNFVCBhbmQgQklULgorCShzY2hlZF9hbmFseXplKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIERFU1QuCisJKHNjaGVkX25vdGVfc2V0KTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIEouCisJKGNyZWF0ZV9yZWdfZGVhZF9ub3RlKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIEJBQ0tMSU5LLgorCShuZXdfc29tZXRpbWVzX2xpdmUpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgSS4KKwkoc2NoZWR1bGVfYmxvY2spOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcyBMQVNUX05PVEUgYW5kIFJFR05PLgorCShzY2hlZHVsZV9pbnNucyk6IFJlbW92ZSBkZWNscyBvZiB1bnVzZWQgdmFyaWFibGVzIEkgYW5kIElOU05TLgorCSogc2Rib3V0LmMgKHNkYm91dF9zeW1ib2wpOiBSZW1vdmUgZGVjbCBvZiB1bnVzZWQgdmFyaWFibGUgTEVUVEVSLgorCShzZGJvdXRfdHlwZSk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCB2YXJpYWJsZSBURU0uCisJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogUmVtb3ZlIHVudXNlZCBsYWJlbC4KKwkqIHRyZWUuYyAoc3RhYmlsaXplX3JlZmVyZW5jZV8xKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlLgorCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIFYuCisJKHByZWNvbmRpdGlvbl9sb29wX3ApOiBSZW1vdmUgZGVjbHMgb2YgdW51c2VkIHZhcmlhYmxlcy4KKwkoZmluYWxfZ2l2X3ZhbHVlKTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIHZhcmlhYmxlIENPREUuCisKK0ZyaSBNYXIgMjUgMTM6NDA6MDUgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCisKKwkqIHBhLmggKERCWF9SRUdJU1RFUl9OVU1CRVIpOiBGaXggbnVtZXJvdXMgYnVncyBpbiBoYW5kbGluZworCW9mIEZQIHJlZ2lzdGVycyBhbmQgdGhlIFNBUiByZWdpc3Rlci4KKworRnJpIE1hciAyNSAxMjo0Njo1NiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBpMzg2Lm1kIChtb3ZoaSwgbW92cWkpOiBQcm9wZXJseSByZWNvZ25pemUgdW5zaWduZWQgZm9ybXMgb2YgLTEKKwlmb3IgZGVjW2J3XSBpbnNucy4KKworCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBBRERSX0VYUFIpOiBSZXR1cm4gY29uc3QwX3J0eCBpZgorCXRha2luZyBhZGRyZXNzIG9mIGFuIEVSUk9SX01BUks7IGFsc28gZG8gc29tZSBtaW5vciBjbGVhbnVwLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IERvbid0IHJlcXVpcmUgYm90aCAtVyBhbmQgLVdpbmxpbmUgdG8gc2F5CisJdGhhdCBjYWxsIGNhbid0IGJlIGlubGluZWQuCisJV2FybiBpZiBpbmxpbmluZyBpcyB0cmllZCBidXQgZmFpbHMuCisKKwkqIGNjY3AuYyAoZm9yX2xpbnQpOiBWYXJpYWJsZSByZW5hbWVkIGZyb20gYGxpbnQnLgorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFCU19FWFBSKTogQ29tcGFyZSB3aXRoIDAgb2YgcHJvcGVyIG1vZGUuCisKKwkqIGZvbGQtY29uc3QuYyAoZm9sZCwgY2FzZSAqX0RJVl9FWFBSKTogQ29ycmVjdCByZXN1bHQgd2hlbgorCXByb2R1Y3Qgb2YgY29uc3RhbnRzIG92ZXJmbG93cy4KKworCSogYWxwaGEuYyAob3V0cHV0X3Byb2xvZyk6IENvcnJlY3RseSBjb21wdXRlIGZsb2F0aW5nLXJlZyBzYXZlCisJYXJlYSBvZmZzZXQuCisKKwkqIHN0bXQuYyAoaW5pdF9zdG10X2Zvcl9mdW5jdGlvbik6IENsZWFyIHN0YWNrX2Jsb2NrX3N0YWNrLgorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZTsgb25seSBjaGVjaworCWFnYWluc3QgZ3JvdXAgcmVsb2FkcyBhbmQgY2hlY2sgYWxsIHJlbG9hZHMuCisKK1RodSBNYXIgMjQgMTM6MTk6NDMgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiB0b3BsZXYuYyAodl9wZWR3YXJuX3dpdGhfZGVjbCk6IERvbid0IGNhdXNlIGNvbXBpbGF0aW9uIHRvIGZhaWwKKwlmcm9tIHBlZGFudGljIGVycm9ycyBpbiBzeXN0ZW0gaGVhZGVyIGZpbGVzLgorCitUaHUgTWFyIDI0IDAzOjAxOjA1IDE5OTQgIEZyZWRlcmljIFBpZXJyZXN0ZWd1eSAgKEYuUGllcnJlc3RlZ3V5QGZyY2wuYnVsbC5mcikKKworCSogY29uZmlnLnN1YjogQWRkIGNhc2UgZm9yIEJ1bGwgZHB4MjAuCisKKwkqIGNvbmZpZy9tNjhrL2RweDIuaCAoQ1BQX1BSRURFRklORVMpOiBGaXggdHlwby4KKworV2VkIE1hciAyMyAxNzoyOTo1NiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZTsgY29tcHV0ZSBNT0RFIGJlZm9yZQorCWl0J3MgdXNlZC4KKworCSogbG9vcC5jIChnZXRfY29uZGl0aW9uKTogRXhpdCBpZiB3ZSBkb24ndCByZWNvZ25pemUgU0VUX1NSQyBvZiAKKwlhIFNFVCB0aGF0IG1vZGlmaWVzIE9QMC4KKworCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgsIGNhc2UgRkxPQVRfVFJVTkNBVEUpOiBTaW1wbGlmeQorCWNhc2Ugb2YgKGZsb2F0X3RydW5jYXRlIChhYnMgKGZsb2F0X2V4dGVuZCBYKSkpLgorCitXZWQgTWFyIDIzIDE3OjIwOjU0IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogZGJ4b3V0LmMgKGRieG91dF9wYXJtcyk6IEZvciBwYXJhbWV0ZXIgbGl2aW5nIGluIHBzdWVkby1yZWcgdGhhdAorCXdhcyBvcHRpbWl6ZWQgYXdheSwgdXNlIGRlY2xhcmVkIHR5cGUgaW5zdGVhZCBvZiBwYXNzZWQgdHlwZS4KKworCSogbWlwcy5jIChtaXBzX2FzbV9maWxlX3N0YXJ0KTogQWRkIGNvbW1lbnQgb24gVEFSR0VUX0dQX09QVCBjb2RlLgorCisJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDaGFuZ2UgYnVpbHRpbl9uZXh0X2FyZyB0eXBlIHNvCisJdGhhdCBpdCBhY2NlcHRzIGFueSBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBub25lLgorCSogY3AvZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgorCSogZXhwci5jIChleHBhbmRfYnVpbHRpbiwgQlVJTFRfSU5fTkVYVF9BUkcgY2FzZSk6IFZlcmlmeSB0aGF0CisJcGFyYW1ldGVyIGlzIGxhc3QgbmFtZWQgYXJndW1lbnQuCisJKiBnc3RkYXJnLmggKHZhX3N0YXJ0KTogUGFzcyBMQVNUQVJHIGFzIGEgcGFyYW1ldGVyIHRvCisJYnVpbHRpbl9uZXh0X2FyZy4KKwkqIHZhLWg4MzAwLmgsIHZhLWk4NjAuaCwgdmEtaTk2MC5oLCB2YS1taXBzLmgsIHZhLXNwYXJjLmgKKwkodmFfc3RhcnQpOiBMaWtld2lzZS4KKwkqIHZhLWFscGhhLmggKHZhX3N0YXJ0KTogQWRkIGNhbGwgdG8gYnVpbHRpbl9uZXh0X2FyZy4KKwkqIHZhLWNsaXBwZXIuaCwgdmEtbTg4ay5oLCB2YS1wYS5oLCB2YS1zcGFyYy5oICh2YV9zdGFydCk6CisJTGlrZXdpc2UuCisKK1R1ZSBNYXIgMjIgMTg6NTc6NTQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBpcmlzNS5oIChNSVBTX0RFRkFVTFRfR1ZBTFVFKTogRGVmaW5lIHRvIHplcm8uCisJKiBtaXBzLmMgKHBpY19hZGRyZXNzX25lZWRzX3NjcmF0Y2gpOiBOZXcgZnVuY3Rpb24uCisJKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgZmxhZ19waWMgd2hlbiBUQVJHRVRfQUJJQ0FMTFMuCisJKiBtaXBzLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEFsc28gcHJldGVuZCB0aGF0IHdlIGhhdmUgUkVHCisJcGx1cyBDT05TVF9JTlQgYWRkcmVzc2VzIGJ5IGRlbGV0aW5nIGFuIGVsc2UuCisJKENPTlNUQU5UX0FERFJFU1NfUCk6IFdoZW4gcGljLCBkb24ndCBhY2NlcHQgYWRkcmVzc2VzIHdoaWNoIGFyZQorCXN5bWJvbF9yZWYgcGx1cyBhIGxhcmdlIGludGVnZXIuCisJKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCk6IExpa2V3aXNlLgorCShMRUdJVElNSVpFX0FERFJFU1MpOiBXaGVuIHBpYywgY29udmVydCBhZGRyZXNzZXMgd2hpY2ggYXJlCisJc3ltYm9sX3JlZyBwbHVzIGEgbGFyZ2UgaW50ZWdlciwgdG8gcmVnIHBsdXMgYSBsYXJnZSBpbnRlZ2VyLgorCShBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBVc2UgLmdwd29yZCBpbnN0ZWFkIG9mIHN1YnRyYWN0aW5nCisJbGFiZWxzLgorCSogbWlwcy5tZCAobW92c2kpOiBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgY29uc3RhbnRzIHdoaWNoIGFyZQorCWlsbGVnYWwgYWRkcmVzc2VzIHdoZW4gcGljLgorCSh0YWJsZWp1bXBfaW50ZXJuYWwxLCB0YWJsZWp1bXBfaW50ZXJuYWwyKTogRW1pdCAuY3BhZGQgd2hlbgorCVRBUkdFVF9BQklDQUxMUy4gIEFkanVzdCBsZW5ndGggdG8gaW5jbHVkZSAuY3BhZGQuCisKKwkqIG1pcHMuaCAoVFJBTVBPTElORV9URU1QTEFURSk6IEFkZCBgbW92ZSAkMjUsJDMnIGZvciB3aGVuCisJVEFSR0VUX0FCSUNBTExTLiAgRGVsZXRlIHBhZGRpbmcgZm9yIDY0IGJpdCBjYXNlLiAgQWRqdXN0IG9mZnNldHMuCisJKFRSQU1QT0xJTkVfU0laRSk6IEluY3JlYXNlIGZyb20gOSB0byAxMCB3b3JkcyBmb3IgMzIgYml0IGNhc2UuCisJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEluY3JlYXNlIG9mZnNldHMgYnkgNCBieXRlcyBmb3IgMzIgYml0IGNhc2UuCisKK1R1ZSBNYXIgMjIgMTU6NDY6NDIgMTk5NCAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCisKKwkqIGkzODYvb3Nmcm9zZS5oIChIQU5ETEVfUFJBR01BX1dFQUspOiBEZWZpbmUgaW4gdGVybXMgb2YKKwlUQVJHRVRfRUxGLgorCShBU01fT1VUUFVUX0RFRik6IFByb3ZpZGUgYSBkZWZpbml0aW9uLgorCitNb24gTWFyIDIxIDE1OjU2OjU4IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQorCisJKiBmaXgtaGVhZGVyLmM6ICBNYWtlIHNzdHJpbmcgYnVmIGV4dGVybiAocmF0aGVyIHRoYW4gImNvbW1vbiIpLgorIAorTW9uIE1hciAyMSAxNzo0NTo1NiAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIGNvbmZpZ3VyZTogQWNjZXB0IGFuZCBpZ25vcmUgLS13aXRob3V0LSouCisKK01vbiBNYXIgMjEgMTc6MDU6MjUgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBkYnhvdXQuYyAoc291cmNlX2xhYmVsX251bWJlcik6IE5ldyB2YXJpYWJsZS4KKwkoZGJ4b3V0X3NvdXJjZV9maWxlKTogVXNlIGl0LiAgT3V0cHV0IGFuIEx0ZXh0IGxhYmVsLgorCisJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogV2hlbiBwZWRhbnRpYywgd2FybiB3aGVuIGFueSBzdGF0aWMKKwlkZWNsYXJhY3Rpb24gZm9sbG93cyBhIG5vbi1zdGF0aWMuCisKKwkqIHNwYXJjLm1kIChzZXEsIHNuZSwgc2d0LCBzbHQsIHNnZSwgc2xlKTogQWRkIHN1cHBvcnQKKwlmb3IgIVRBUkdFVF9IQVJEX1FVQUQuCisKK01vbiBNYXIgMjEgMTY6NTk6MDIgMTk5NCAgTWlrZSBDb2xsaXNvbiAgKGNvbGxpc29uQGNoaWFudGkuc3cuc3RyYXR1cy5jb20pCisKKwkqIHJlbG9hZDEuYyAocmVsb2FkKTogTW9yZSBhY2N1cmF0ZWx5IGNvbXB1dGUgbm9uZ3JvdXAgbmVlZHMuCisJKHJlbG9hZHNfY29uZmxpY3QpOiBOZXcgZnVuY3Rpb24uCisKK01vbiBNYXIgMjEgMTY6MjE6MDcgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjeWdudXMuY29tKQorCisJKiBsaWJnY2MyLmMgKF9fYnVpbHRpbl9zYXZlcmVncyk6IEZpeCByZXR1cm4gdHlwZS4KKworTW9uIE1hciAyMSAwNzozNzoxMyAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBmdW5jdGlvbi5jIChwcmVzZXJ2ZV90ZW1wX3Nsb3RzKTogSWYgYXJndW1lbnQgaXMgUkVHLCBzZWUgaWYgaXQKKwlpcyBhZGRyZXNzIG9mIGEgdGVtcCBzbG90IHdlIGtub3cgYWJvdXQuCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFERFJfRVhQUik6IFVwZGF0ZSB0ZW1wIHNsb3QgYWRkcmVzcworCWlmIHdlIHB1dCBpdCBpbiBhIHJlZ2lzdGVyOyBtYXJrIHJlc3VsdCBhcyBwb2ludGVyLgorCisJKiBjc2UuYyAoRklYRURfUkVHTk9fUCk6IFRyZWF0ZSBnbG9iYWwgcmVncyBhcyBmaXhlZC4KKwkoQ0hFQVBfUkVHTk8pOiBSZW5hbWVkIGZyb20gQ0hFQVBfUkVHLgorCShDSEVBUF9SRUcpOiBOZXcgbWFjcm87IHVzZXIgdmFyIGluIGhhcmQgcmVnIGlzIGNoZWFwLgorCShDT1NUKTogUGFzcyBSVEwgdG8gQ0hFQVBfUkVHLCBub3QgcmVnbm8uCisJKHJ0eF9jb3N0LCBjYXNlIFJFRyk6IExpa2V3aXNlLgorCitTdW4gTWFyIDIwIDE5OjM4OjQ0IDE5OTQgIFN0ZXBoZW4gTCBNb3NoaWVyICAobW9zaGllckB3b3JsZC5zdGQuY29tKQorCisJKiBtNjhrL25ld3MuaCAoUFJJTlRfT1BFUkFORCk6IFByaW50IGZsb2F0IGluZmluaXR5CisJYW5kIE5hTidzIGFzICsvLTk5ZTk5OS4KKworU3VuIE1hciAyMCAxNzo0MjowOSAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCisKKwkqIG1pcHMtdGZpbGUuYyAodXBkYXRlX2hlYWRlcnMpOiBBbGlnbiBzeW1ib2wgdGFibGUgc2VjdGlvbnMsCisJdXNpbmcgQUxJR05fU1lNVEFCTEVfT0ZGU0VULiBQcm92aWRlIGEgZGVmYXVsdCBkZWZpbml0aW9uIHdoaWNoCisJZG9lcyBubyBhbGlnbm1lbnQuCisJKiBhbHBoYS5oIChBTElHTl9TWU1UQUJMRV9PRkZTRVQpOiBOZXcgbWFjcm8uCisKK1N1biBNYXIgMjAgMDY6Mzg6NDEgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBlbWl0X3J0bC5jICh0cnlfc3BsaXQpOiBSZW5hbWUgdGhpcmQgcGFyYW1ldGVyIGFzIExBU1QuCisJUmVjdXJzaXZlbHkgY2FsbCB0cnlfc3BsaXQgZm9yIGVhY2ggbmV3IGluc24gY3JlYXRlZC4KKworCSogY29tYmluZS5jIChtYXJrX3VzZWRfcmVnc19jb21iaW5lKTogQ29ycmVjdCB0eXBvLgorCitTdW4gTWFyIDIwIDA2OjI4OjIzIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHZheC5oIChDSEVDS19GTE9BVF9WQUxVRSk6IEFkZCBtaXNzaW5nIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIuCisJKiB0cmVlLmMgKGJ1aWxkX3JlYWwpOiBBZGQgYG92ZXJmbG93JyB2YXI7IHBhc3MgdG8gQ0hFQ0tfRkxPQVRfVkFMVUUuCisKK1NhdCBNYXIgMTkgMTc6NDQ6MTQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFCU19FWFBSKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK1NhdCBNYXIgMTkgMTc6MTM6NDcgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBjb21iaW5lLmMgKG5ld3BhdF91c2VkX3JlZ3MpOiBOZXcgdmFyaWFibGUuCisJKG1hcmtfdXNlZF9yZWdzX2NvbWJpbmUpOiBOZXcgZnVuY3Rpb24uCisJKHRyeV9jb21iaW5lKTogVXNlIHRoZW0uCisJKHJlZ19kZWFkX2F0X3ApOiBSZWdpc3RlcnMgbWFya2VkIGluIG5ld3BhdF91c2VkX3JlZ3MgbXVzdCBhbHdheXMgYmUgCisJY29uc2lkZXJlZCB0byBiZSBsaXZlLgorCitTYXQgTWFyIDE5IDA2OjI5OjM4IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGMtcGFyc2UuaW4gKGF0dHJpYik6IFVzZSBgaWRlbnRpZmllcicgaW5zdGVhZCBvZiBgSURFTlRJRklFUicKKwlzaW5jZSBuYW1lcyB0aGF0IGFyZSAoZS5nLikgdHlwZWRlZiBuYW1lcyBhcmUgc3RpbGwgT0suCisKKwkqIG02OGsvbmV4dC5oIChHT19JRl9JTkRFWEFCTEVfQkFTRSk6IE1ha2UgY29tcGF0aWJsZSB3aXRoIG02OGsuaC4KKworCSogZ2Vub3V0cHV0LmMgKG91dHB1dF9lcGlsb2d1ZSwgaW5zbl9uYW1lcyk6IFdyaXRlIGNvcnJlY3QgbmFtZXMKKwlmb3IgcGF0dGVybnMgYmVmb3JlIGZpcnN0IG5hbWVkIHBhdHRlcm4uCisKKwkqIG5leHRzdGVwLmggKFNFTEVDVF9TRUNUSU9OKTogRml4IHR5cG8gKGFyZyBuYW1lcykgaW4gbGFzdCBjaGFuZ2UuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBzaWduZWQgdmVyc2lvbiBvZiBgc2l6ZXR5cGUnIGZvcgorCXR5cGUgb2YgYXJyYXkgaW5kZXguCisKK1NhdCBNYXIgMTkgMDY6MjU6MzkgMTk5NCAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCisKKwkqIGZvbGQtY29uc3QuYyAoY29uc3RfYmlub3ApOiBBdm9pZCBpbml0aWFsaXplZCBhZ2dyZWdhdGUKKwlsb2NhbCB2YXJpYWJsZXMsIGZvciBhbnRpcXVlIGNvbXBpbGVycy4KKworRnJpIE1hciAxOCAxODo0MzoyOCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGkzODYvb3Nmcm9zZS5oIChTRUxFQ1RfU0VDVElPTik6IFZhcmlhYmxlcyBnbyBpbiByZWFkb25seSBkYXRhCisJb25seSBpZiB0aGUgaW5pdGlhbGl6ZXIgaXMgY29uc3RhbnQuCisJKiBpMzg2L3N2cjNnYXMuaCwgbTg4ay9tODhrLmgsIG1pcHMvbWlwcy5oLCBuZXhzdGVwLmgsCisJcnM2MDAwL3JzNjAwMC5oLCBzcGFyYy9zcGFyYy5oLCBzdnIzLmgsIHN2cjQuaCwgdmF4L3Ztcy5oCisJKFNFTEVDVF9TRUNUSU9OKTogTGlrZXdpc2UuCisJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBMaWtld2lzZS4KKworRnJpIE1hciAxOCAxNzo1NDoxMiAxOTk0ICBEYXZpZCBFZGVsc29obiAgKGVkZWxzb2huQG5wYWMuc3lyLmVkdSkKKworCSogcnM2MDAwLm1kIChkaXZtb2RzaTQsIHVkaXZzaTMsIGRpdnNpMywgdWRpdm1vZHNpNCk6IEFkZCBBSVgKKwljb21tb24tbW9kZSBjYXNlcy4KKwkobXVsaF9jYWxsLCBtdWxsX2NhbGwsIGRpdnNzX2NhbGwsIGRpdnVzX2NhbGwsIHF1b3NzX2NhbGwsIHF1b3VzX2NhbGwpOgorCUFJWCBjb21tb24tbW9kZSBjYWxsIHBhdHRlcm5zLgorCShhc2hsc2kzKTogTW9yZSBUQVJHRVRfUE9XRVJQQyB0byAhIFRBUkdFVF9QT1dFUiBjaGFuZ2VzLgorCShhZGRzZjMsIHN1YnNmMywgbXVsc2YzLCBkaXZzZjMsIGV0Yy4pOiBDaGFuZ2UgVEFSR0VUX1BPV0VSCisJdG8gISBUQVJHRVRfUE9XRVJQQy4KKwkoZml4X3RydW5jZGZzaTIpOiBVc2UgUE9XRVIvMiBhbmQgUG93ZXJQQyBGUCBjb252ZXJ0IGluc3RydWN0aW9uLgorCShmcGN2dHNpKTogTmV3IHBhdHRlcm4uCisJKG11bHNpZGkzKTogQWRkIEFJWCBjb21tb24tbW9kZSBjYXNlLCBhZGQgaW11bCBhdHRyaWJ1dGUgdG8gUE9XRVIKKwlwYXR0ZXJuLCBhZGQgUG93ZXJQQyBwYXR0ZXJuLCBmbGFnIGlucHV0IG9wZXJhbmRzIGFzIGNvbW11dGF0aXZlLgorCShzbXVsc2kzX2hpZ2hwYXJ0KTogQWRkIEFJWCBjb21tb24tbW9kZSBjYXNlLgorCShtb3ZzaSBtYXRjaGVyKTogQWRkIG10am1wciBhdHRyaWJ1dGUgdG8gISBUQVJHRVRfUE9XRVIgY2FzZS4KKwkobW92c2YpOiBDbGVhbiB1cCBsb2FkIGZyb20gbWVtb3J5IG9yIGludGVnZXIgcmVnaXN0ZXIgdGVzdC4KKwkobW92ZGkgbWF0Y2hlcik6IEFkZCBGUCByZWdpc3RlciBzdXBwb3J0LgorCisJKiByczYwMDAuYyAoY29tbW9uX21vZGVfZGVmaW5lZCk6IE5ldyB2YXJpYWJsZS4KKwkob3V0cHV0X3Byb2xvZyk6IERlZmluZSBleHRlcm5hbCBjb21tb24tbW9kZSBjYWxscy4KKworCSogcnM2MDAwLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEFsbG93IERJbW9kZSBpbiBGUCByZWdpc3RlcnMuCisJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRGVsZXRlIHBwY2FzIG1lbnRpb24gZnJvbSBjb21tZW50LgorCShSVFhfQ09TVFMpOiBDb3N0cyBiYXNlZCB1cG9uIHByb2Nlc3Nvcl90eXBlIGVudW0uCisKK0ZyaSBNYXIgMTggMTc6NTM6MzUgMTk5NCAgVG9yYmpvcm4gR3Jhbmx1bmQgICh0ZWdlQGN5Z251cy5jb20pCisKKwkqIHJzNjAwMC5tZCAoc211bHNpM19oaWdocGFydCk6IE5ldyBwYXR0ZXJucy4KKwkodW11bHNpM19oaWdocGFydF9wb3dlcik6IE5ldyBwYXR0ZXJuLgorCitGcmkgTWFyIDE4IDE1OjI2OjU2IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogc29sMi5oIChTRUxFQ1RfUlRYX1NFQ1RJT04pOiBEZWxldGUuCisJKiBzeXN2NC5oIChTRUxFQ1RfUlRYX1NFQ1RJT04pOiBBZGQuCisJKEFTTV9TUEVDKTogUGFzcyAtSyB0byBhc3NlbWJsZXIgd2hlbiBQSUMuCisKKwkqIGNjY3AuYyAoYmVmb3JlX3N5c3RlbSwgbGFzdF9iZWZvcmVfc3lzdGVtKTogTmV3IHZhcmlhYmxlcy4KKwkobWFpbik6IEhhbmRsZSAtaXN5c3RlbSBvcHRpb24uICBJbnNlcnQgLWlzeXN0ZW0gZGlyZWN0b3JpZXMgaW4KKwlzZWFyY2ggY2hhaW4gYXQgZmlyc3Rfc3lzdGVtX2luY2x1ZGUuCisJKiBnY2MuYyAoaW5jbHVkZV9wcmVmaXgpOiBOZXcgdmFyaWFibGUuCisJKHByb2Nlc3NfY29tbWFuZCk6IEFkZCBwYXRoL2luY2x1ZGUgdG8gaW5jbHVkZV9wcmVmaXggd2hlbiBzZWUgYQorCS1CcGF0aCBvcHRpb24uCisJKGRvX3NwZWNfMSwgY2FzZSAnSScpOiBQYXNzIGluY2x1ZGVfcHJlZml4IGRpcmVjdG9yaWVzIHRvIGNwcCB3aXRoCisJdGhlIC1pc3lzdGVtIG9wdGlvbi4KKworCSogbG9vcC5jIChzY2FuX2xvb3ApOiBOZXcgdmFyaWFibGUgbG9vcF9kZXB0aC4JSW5jcmVtZW50IGFuZAorCWRlY3JlbWVudCBvbiBMT09QX0JFRyBhbmQgTE9PUF9FTkQgbm90ZXMuICBPbmx5IHVzZSBMT09QX1ZUT1Agbm90ZQorCWlmIGxvb3BfZGVwdGggaXMgemVyby4KKwkoc3RyZW5ndGhfcmVkdWNlKTogTGlrZXdpc2UuCisKKwkqIHNwYXJjL3NwYXJjLmggKEZJWFVOU19UUlVOQ1RGU0kyX0xJQkNBTEwpOiBEZWZpbmUuCisJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBVc2UgRklYVU5TX1RSVU5DVEZTSTJfTElCQ0FMTCBtYWNyby4KKworVGh1IE1hciAxNyAxMzoxMzo0NiAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKKworCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUsIGNhc2UgQk9PTEVBTl9UWVBFKToKKwlTZXQgVFJFRV9VTlNJR05FRCB1bmxlc3MgVFlQRV9NSU5fVkFMVUUgaXMgbmVnYXRpdmUuCisKK1RodSBNYXIgMTcgMTg6MzY6MzQgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQorCisJKiBjLWNvbW1vbi5jIChzaG9ydGVuX2NvbXBhcmUpOiBXaGVuIHNpbXBsaWZ5IGNvbXBhcmUgYWdhaW5zdAorCXplcm8sIGNoZWNrIGZvciByZXN0eXBlX3B0ciB1bnNpZ25lZCBpbnN0ZWFkIG9mIHByaW1vcDAgdW5zaWduZWQuCisKKwkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVW5kbyBGZWIgMjcgY2hhbmdlLiAgU2V0IG5yZWdzIHRvIC0xIGZvcgorCW5vcm1hbCBjYXNlLgorCitUaHUgTWFyIDE3IDE3OjQzOjI4IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKKworCSogZml4aW5jLnN2cjQ6IERlZmluZSBCWVRFX09SREVSIGluIDxzeXMvYnl0ZW9yZGVyLmg+IGFzIG9uCisJVW5peFdhcmUgMS4xLgorCitUaHUgTWFyIDE3IDA2OjAyOjI0IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlLCBjYXNlIElOVEVHRVJfVFlQRSk6IFByb3Blcmx5IHRlc3QgZm9yCisJbm9ubmVnYXRpdmUgbG93ZXIgYm91bmQuCisKK1dlZCBNYXIgMTYgMTI6NDE6MTkgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQorCisJKiB0cmVlLmMgKGJ1aWxkX250LCBidWlsZF9wYXJzZV9ub2RlKTogRG9uJ3QgZGVjbGFyZSBsYXN0CisJcGFyYW1ldGVyIHRvIGJlIHJlZ2lzdGVyLCBzaW5jZSBpdCBpcyB1c2VkIGluIFZBX1NUQVJULCB3aGljaAorCW1heSB0YWtlIGl0cyBhZGRyZXNzLgorCSogZ2VuYXR0cnRhYi5jIChhdHRyX3ByaW50Zik6IExpa2V3aXNlLgorCitXZWQgTWFyIDE2IDEyOjAwOjQwIDE5OTQgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQorCisJKiBwYS5oIChJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBEbyBub3QgbWFzayBvZmYgaGlnaAorCWJpdHMgb2YgYWRkcmVzcyBwYXNzZWQgdG8gaWNhY2hlZmx1c2guCisKKwkqIHBhLmggKFdDSEFSX1RZUEUpOiBVc2UgInVuc2lnbmVkIGludCIgYnkgZGVmYXVsdC4KKwkoV0NIQVJfVFlQRV9TSVpFKTogQ2hhbmdlIGFwcHJvcHJpYXRlbHkuCisJKiBwYS1naGl1eC5oLCBwYS1naHB1eC5oLCBwYS1ndXg3LmgsIHBhLWhpdXguaCwgcGEtaHB1eC5oLAorCXBhLWhwdXg3LmggKFdDSEFSX1RZUEUpOiBEZWxldGUgZGVmaW5pdGlvbi4KKwkoV0NIQVJfVFlQRV9TSVpFKTogTGlrZXdpc2UuCisJKiBwYS1vc2YuaCAoV0NIQVJfVFlQRSk6IE92ZXJyaWRlIGFwcHJvcHJpYXRlbHkgZm9yIE9TRjEuCisJKFdDSEFSX1RZUEVfU0laRSk6IExpa2V3aXNlLgorCisJKiBwYS5tZCAoREltb2RlIGxvX3N1bSk6IEFkZCBlYXJseWNsb2JiZXIgZm9yIGFsdGVybmF0aXZlIG9uZS4KKworCSogcGEuaCAoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogUmV3cml0ZSB0byBtYXRjaAorCUFTTV9PVVRQVVRfQUREUl9WRUNfRUxUIHdoaWNoIGlzIFBJQy1zYWZlLgorCitXZWQgTWFyIDE2IDA5OjA3OjM0IDE5OTQgIE1hdHRoaWFzIFBmYWxsZXIgIChsZW9AbWFyY28uZGUpCisKKwkqIG5zMzJrLmMgKGdsb2JhbF9zeW1ib2xpY19yZWZlcmVuY2VfbWVudGlvbmVkX3ApOiBSZWN1cnNlIG9ubHkKKwlpZiBHRVRfQ09ERSAob3ApID09IENPTlNULgorCisJKiBuczMyay5oIChGVU5DVElPTl9QUk9MT0dVRSk6IExvYWQgc2IgdGhyb3VnaCByMCBpZiBUQVJHRVRfUkVHUEFSTQorCWlzIGZhbHNlLgorCitXZWQgTWFyIDE2IDA2OjU3OjQ1IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dSkKKworCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uLCBnZW5faGlnaHBhcnQsIG9wZXJhbmRfc3Vid29yZCk6CisJVGVzdCBpbnB1dCBhZ2FpbnN0IFJUWCBmb3IgRlAsIEFQLCBhbmQgU1AsIG5vdCBzYW1lIHJlZ2lzdGVyIG51bWJlci4KKworCSogZXhwci5jIChleHBhbmRfZXhwcik6IFVwZGF0ZSBjb21tZW50cyBhbmQgZml4IGZvcm1hdHRpbmcuCisJKGV4cGFuZF9leHByLCBjYXNlIFZBUl9ERUNMLCBTVFJJTkdfQ1NULCBDT05TVFJVQ1RPUik6IElmCisJZmxhZ19mb3JjZV9hZGRyLCBwdXQgYWRkcmVzcyBpbiByZWdpc3RlciB1bmxlc3MgUkVHLgorCShleHBhbmRfZXhwciwgY2FzZSBDT05TVFJVQ1RPUiwgQ09OVkVSVF9FWFBSKTogTWFrZSBUQVJHRVQgd2l0aAorCVRNT0RFLCBpZiBzcGVjaWZpZWQuCisJKGV4cGFuZF9leHByLCBjYXNlIElOX0VYUFIpOiBDbGVhbiB1cC4gIEFsbG93IElOREVYIHRvIGJlIGFuCisJdW5zaWduZWQgdHlwZS4gIEFsd2F5cyBldmFsdWF0ZSBTRVQgYW5kIElOREVYIGluIGNhc2Ugb2Ygc2lkZSBlZmZlY3RzLgorCShleHBhbmRfZXhwciwgY2FzZSBDT05WRVJUX0VYUFIpOiBVc2UgY29udmVydF9tb2RlcyB0byBoYW5kbGUgY29uc3RzLgorCShleHBhbmRfZXhwciwgY2FzZSBBQlNfRVhQUik6IFNpbXBsaWZ5IHByb2Nlc3Npbmcgb2YgQ09NUExFWC4KKwlDb21wYXJlIHdpdGggemVybyB3b3JkLWJ5LXdvcmQgaWYgcmVxdWlyZWQuCisJKGV4cGFuZF9leHByLCBjYXNlIEFCU19FWFBSLCBNSU5fRVhQUiwgQ09ORF9FWFBSKTogRG9uJ3QgdXNlIFRBUkdFVAorCWlmIG5vdCBNT0RFLgorCShleHBhbmRfZXhwciwgY2FzZSBUUlVUSF8qX0VYUFIpOiBNb2RlcyBvZiBpbnB1dCBhbmQgb3V0cHV0IG11c3QgYWdyZWUuCisJKGV4cGFuZF9leHByLCBjYXNlIENPTkpfRVhQUik6IFJlbW92ZSByZWR1bmRhbnQgZGVmIG9mIE1PREUuCisKKwkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9yZWNvcmQpOiBJZiB0aGUgcGxhY2Ugd2hlcmUgd2Ugd2VyZSBnb2luZworCXRvIHB1dCBhIGZpZWxkIGNoYW5nZWQsIGxheSBpdCBvdXQgYWdhaW4uCisKK1R1ZSBNYXIgMTUgMDc6NTM6MzYgMTk5NCAgUGF1bCBBIFZpeGllICAocGF1bEB2aXguY29tKQorCisJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhwcm90byk6IEFkZCBtaXNzaW5nICItIiBpbiBmcm9udCBvZiAiaWYiLgorCShpbnN0YWxsLWhlYWRlcnMtdGFyLCBnY2MueHRhcik6IFVzZSAiLSIgaW4gZnJvbnQgb2YgdGFyIG9wdGlvbnMuCisKK01vbiBNYXIgMTQgMTY6Mjg6MTYgMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGZpeGluY2x1ZGVzOiBJbnNlcnQgbmV3bGluZXMganVzdCBiZWZvcmUgdGhlIGVuZCBvZiAnc2VkJworCWNvbW1hbmQgc3RyaW5ncyBpZiB0aGUgbGFzdCAnc2VkJyBjb21tYW5kIGlzICdhJyBvciAnaSc7CisJQlNESSAxLjEgJ3NlZCcgbmVlZHMgdGhpcy4KKworTW9uIE1hciAxNCAxNTo0NjoyOSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIGZpeGluYy5zdnI0OiBEb24ndCBuYW1lIHZhcmlhYmxlcyBpbiBtbWFwIHByb3RvdHlwZS4KKworTW9uIE1hciAxNCAxNToxNjozOCAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGN5Z251cy5jb20pCisKKwkqIG9iamMvTWFrZWZpbGUgKCoubyk6IEFkZCBleHBsaWNpdCBkZXBlbmRlbmNpZXMgZm9yIFN1bidzIFZQQVRILgorCitNb24gTWFyIDE0IDA1OjExOjQyIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcywgZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogUHJvcGVybHkKKwlzZXQgTUVNX0lOX1NUUlVDVF9QIGZvciBERUNMX1JUTCBvZiBmdW5jdGlvbiByZXN1bHQuCisKKwkqIGMtZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENvbnZlcnQgdG8gc2l6ZXR5cGUgd2hlbiBtYW5pcHVsYXRpbmcKKwlzaXplIG9mIGFycmF5IGFuZCB1c2UgY2FyZSB0byBhdm9pZCBtaXhlZC10eXBlIG9wZXJhdGlvbnMuCisKKwkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEb24ndCBjYWxsIGJjX2V4cGFuZF9leHByCisJaWYgRVhQQU5EX0lOSVRJQUxJWkVSLgorCSogYmMtb3B0YWIuYyAoYmNfZXhwYW5kX3tiaW5hcnksdW5hcnl9X29wZXJhdGlvbik6IEFkZCBtaXNzaW5nCisJYXJncyB0byBjYWxsIHRvIGV4cGFuZF9leHByLgorCSogc3RtdC5jIChiY19leHBhbmRfc3RhcnRfY29uZCk6IFNldCBleGl0X2xhYmVsIGlmIG5vdCBFWElURkxBRy4KKwkoYmNfZXhwYW5kX2VuZF9iaW5kaW5ncyk6IE9ubHkgZGVmaW5lIGV4aXRfbGFiZWwgaWYgc2V0LgorCURvbid0IHBvcCBuZXN0aW5nX3N0YWNrLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9kZWYpOiBEbyBoYXNoaW5nIGFuZCBtYWtlIGxhYmVsCisJZXZlbiBpZiBieXRlY29kZS4KKwkqIGJjLWVtaXQuYyAoYmNfc2VnX3dyaXRlKTogRG9uJ3QgbWFrZSB1bmFsaWduZWQgcmVmZXJlbmNlIHRvCisJc2VnLT5kYXRhLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgYmNfd3JpdGVfZmlsZSBoZXJlIGFuZCBwYXNzCisJYXNtX291dF9maWxlLCBub3Qgc3Rkb3V0LgorCShtYWluKTogRG9uJ3QgY2FsbCBiY193cml0ZV9maWxlIGhlcmUuCisJRml4IHdvcmRpbmcgb24gZXJyb3IgaWYgLWZieXRlY29kZSBzcGVjaWZpZWQgb24gdW5zdXBwb3J0ZWQgdGFyZ2V0LgorCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGFzc29jaWF0ZSk6IElmIC1mZmFzdC1tYXRoLCBhc3NvY2lhdGUgRlAgbXVsdHMuCisJKGZvbGQsIGNhc2UgUkRJVl9FWFBSKTogU3BsaXQgY2FzZTsgaWdub3JlIGRpdmlzaW9uIGJ5IDEuCisJSWYgLWZmYXN0LW1hdGgsIGNvbnZlcnQgdG8gbXVsdHBseSBieSByZWNpcHJvY2FsLgorCShmb2xkLCBjYXNlICpfRElWX0VYUFIpOiBTaW1wbGlmeSBBL0MxL0MyLgorCisJKiB0cmVlLmggKHRyZWVfaW50X2NzdF9zZ24pOiBOZXcgZGVjbGFyYXRpb24uCisJKiB0cmVlLmMgKHRyZWVfaW50X2NzdF9zZ24pOiBOZXcgZnVuY3Rpb24uCisJKiBjLWRlY2wuYyAoZmluaXNoX3tkZWNsLHN0cnVjdCxlbnVtfSk6IENhbGwgaXQuCisJKiBjLXR5cGVjay5jIChidWlsZF9iaW5hcnlfb3AsIHBvcF9pbml0X2xldmVsKTogTGlrZXdpc2UuCisJKG91dHB1dF9wZW5kaW5nX2luaXRfZWxlbWVudHMpOiBMaWtld2lzZS4KKwkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fUkVUVVJOX0FERFJFU1MpOiBMaWtld2lzZS4KKwkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IExpa2V3aXNlLgorCShmb2xkLCBjYXNlICpfRElWX0VYUFIpOiBBZGQgbWlzc2luZyBjb252ZXJzaW9uLgorCSogY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBDb252ZXJ0IGludGVnZXJfb25lX25vZGUgdG8KKwlwcm9wZXIgdHlwZSBiZWZvcmUgdHJlZV9pbnRfY3N0X2x0IGNhbGwuCisKK1N1biBNYXIgMTMgMDY6NDY6MTMgMTk5NCAgV29sZmdhbmcgU3R1a2VuYnJvY2sgKHdnc3R1a2VuQGltbWQ0LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlKQorCisJKiBnY2MuYyAoZG9fc3BlY18xKTogRG9uJ3QgZHVwbGljYXRlIGEgbWFjcm8gc3RhcnRpbmcgd2l0aCAnX18nLgorCitTdW4gTWFyIDEzIDA1OjU0OjAwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGNvbnZlcnQuYyAoY29udmVydF90b19pbnRlZ2VyKTogV2hlbiBjaGFuZ2luZyB0eXBlIG9mIHRydXRodmFsdWUKKwlvcGVyYXRpb24sIGNoYW5nZSB0eXBlcyBvZiBpbnB1dHMgdG9vLgorCSogYy1jb21tb24uYyAoVFJVVEhfKl9FWFBSKTogQ29udmVydCB0byBpbnRlZ2VyX3R5cGVfbm9kZS4KKworCSogdHJlZS5jOiBJbmNsdWRlIHNldGptcC5oLgorCShidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IFByb3BhZ2F0ZSBvdmVyZmxvdyBmbGFncyBhbmQKKwllc3RhYmxpc2ggZmxvYXQgaGFuZGxlci4KKwkoYnVpbGRfY29tcGxleCk6IFByb3BhZ2F0ZSBvdmVyZmxvdyBmbGFncy4KKwkqIGNzZS5jIChzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogUHJvdGVjdCByZWFsX3ZhbHVlX3RydW5jYXRlCisJaW5zaWRlIGhhbmRsZXIuCisJKiBmb2xkLWNvbnN0LmMgKGZvcmNlX2ZpdF92YWx1ZSk6IE9wZXJhdGUgb24gUkVBTF9DU1QgYXMgd2VsbC4KKwkocmVhbF92YWx1ZV90cnVuY2F0ZSk6IERvbid0IHVzZSBpdHMgb3duIGhhbmRsZXIuCisJKGNvbnN0X2Jpbm9wKTogU2V0IG92ZXJmbG93IG9uIEZQIGVycm9yIGFuZCBjYWxsIGZvcmNlX2ZpdF90eXBlLgorCShmb2xkX2NvbnZlcnQpOiBMaWtld2lzZS4KKwkqIGMtY29tbW9uLmMgKGNvbnN0YW50X2V4cHJlc3Npb25fd2FybmluZywgb3ZlcmZsb3dfd2FybmluZyk6CisJSGFuZGxlIFJFQUxfQ1NUIGFuZCBDT01QTEVYX0NTVC4KKwkqIGNvbnZleC5oLCBjb252ZXguYywgZng4MC5oLCB0YWhvZS5oLCB2YXguaCwgdmF4LmM6IEFkZCBPVkVSRkxPVworCW9wZXJhbmQgdG8gQ0hFQ0tfRkxPQVRfVkFMVUUuCisKKwkqIGp1bXAuYyAocnR4X2VxdWFsX2Zvcl90aHJlYWRfcCk6IENvcnJlY3QgZXJyb3IgaW4gcHJldmlvdXMKKwljaGFuZ2U7IGFkZCBtaXNzaW5nIGFyZyBpbiByZWN1cnNpdmUgY2FsbC4KKworU2F0IE1hciAxMiAxOTo0MjowMyAxOTk0ICBILkouIEx1ICAoaGpsQG55bmV4c3QuY29tKQorCisJKiBjb25maWd1cmUgKGd4eC1pbmNsdWRlLWRpcik6IFJlcGxhY2VtZW50IGZvciBneHgtcHJlZml4LgorCSogTWFrZWZpbGUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IExpa2V3aXNlLCBmb3IgZ3h4X3ByZWZpeC4KKworCSogaTM4Ni9saW51eC5oIChOT19JTVBMSUNJVF9FWFRFUk5fQyk6IERlZmluZWQuCisKK1NhdCBNYXIgMTIgMDc6NDI6MTIgMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIE1ha2VmaWxlLmluIChzdG1wLWZpeHByb3RvKTogV29yayBhcm91bmQgYSBgbWFrZScgYnVnIGluIEJTREkgMS4xLgorCitTYXQgTWFyIDEyIDA3OjM4OjA4IDE5OTQgIEtsYXVzIEthZW1wZiAgKGtrYWVtcGZAZGlkeW11cy5ybWkuZGUpCisKKwkqIGJpLXJ1bi5oOiBQcm9wZXJseSB0ZXN0IEJZVEVTX0JJR19FTkRJQU4uCisJKiBieXRlY29kZS5oOiBMaWtld2lzZSBmb3IgV09SRFNfQklHX0VORElBTi4KKworCSogY2NjcC5jIChkb19pbmNsdWRlLCBoYWNrLXZtc19pbmNsdWRlX3NwZWNpZmljYXRpb24pOiBDaGFuZ2UgaGFuZGxpbmcKKwlvZiAnI2luY2x1ZGUgZmlsZW5hbWUnIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBWQVgtQy4KKworCSogZ2VuZW1pdC5jIChnZW5fZXhwKTogQWRkZWQgXG4gdG8gcHJpbnRmIHRvIHNob3J0ZW4gbGluZSBmb3IgVkFYLUMuCisKK1NhdCBNYXIgMTIgMDY6NDI6MzggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZXhwci5oIChlbWl0X2Zsb2F0X2xpYl9jbXApOiBBZGQgZGVjbGFyYXRpb24gaGVyZS4KKwkqIG9wdGFicy5jOiBEb24ndCBkZWZpbmUgZW1pdF9mbG9hdF9saWJfY21wIG5vdyB0aGF0IG5vIGxvbmdlciBzdGF0aWMuCisKKwkqIGp1bXAuYzogQWRkIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisJKGp1bXBfb3B0aW1pemUsIGRlbGV0ZV9pbnNuKTogVXNlIEdFVF9SVFhfQ0xBU1MgdG8gdGVzdCBmb3IgaW5zbnMuCisJKG1hcmtfanVtcF9sYWJlbCk6IERlbGV0ZSBkZWFkIGNvZGUuCisJKGRlbGV0ZV9jb21wdXRhdGlvbiwgcmVkaXJlY3RfdGFibGVqdW1wKTogTm8gbG9uZ2VyIHN0YXRpYy4KKworRnJpIE1hciAxMSAxNDo0MDo0MCAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGxpdGUuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2UgcGFyZW50aGVzZXMuCisJKiBzcGFyYy5oIChUQVJHRVRfSEFSRF9RVUFEKTogTmV3IG1hY3JvLgorCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgaGFyZC1xdWFkLWZsb2F0LCBzb2Z0LXF1YWQtZmxvYXQuCisJKFRBUkdFVF9ERUZBVUxUKTogVXNlIHBhcmVudGhlc2VzLgorCSh7QUREVEYzLFNVQlRGMyxNVUxURjMsRElWVEYzLFNRUlRURjIsRkxPQVRTSVRGMixGSVhfVFJVTkNURlNJMiwKKwlFWFRFTkRTRlRGMixUUlVOQ1RGU0YyLEVYVEVORERGVEYyLFRSVU5DVEZERjIsRVFURjIsTkVURjIsR1RURjIsCisJR0VURjIsTFRURjIsTEVURjJ9X0xJQkNBTEwpOiBOZXcgbWFjcm9zLgorCSogc3BhcmMubWQgKHNsZXUrNCwgc2xldSs3LCBleHRlbmRzZnRmMiwgZXh0ZW5kZGZ0ZjIsIHRydW5jdGZzZjIsCisJdHJ1bmN0ZmRmMiwgZmxvYXRzaXRmMiwgZml4X3RydW5jdGZzaTIsIGFkZHRmMywgc3VidGYzLCBtdWx0ZjMsCisJZGl2dGYzLCBzcXJ0dGYyKTogRGlzYWJsZSB3aGVuIC1tc29mdC1xdWFkLWZsb2F0LgorCShiZXEsIGJuZSwgYmd0LCBibHQsIGJnZSwgYmxlKTogV2hlbiAtbXNvZnQtcXVhZC1mbG9hdCwgYWNjb3VudAorCWZvciByZXR1cm4gdmFsdWUgb2YgU1BBUkMgQUJJIHJvdXRpbmVzIHRoYXQgZGlmZmVycyBmcm9tIGxpYmdjYy4KKwkqIGZsb3cuYyAobGliY2FsbF9kZWFkX3ApOiBGYWlsIG5vdCBhYm9ydCBmb3IgbGliY2FsbCB0aGF0IHJldHVybnMKKwl2YWx1ZSB2aWEgaW52aXNpYmxlIHBvaW50ZXIuCisJKiBvcHRhYnMuYyAoZW1pdF9mbG9hdF9saWJfY21wKTogTWFrZSBub24gc3RhdGljLgorCShpbml0X29wdGFicyk6IFVzZSB7QUREVEYzLFNVQlRGMyxNVUxURjMsRElWVEYzLFNRUlRURjIsRkxPQVRTSVRGMiwKKwlGSVhfVFJVTkNURlNJMixFWFRFTkRTRlRGMixUUlVOQ1RGU0YyLEVYVEVORERGVEYyLFRSVU5DVEZERjIsRVFURjIsCisJTkVURjIsR1RURjIsR0VURjIsTFRURjIsTEVURjJ9X0xJQkNBTEwgbWFjcm9zLgorCisJKiBzcGFyYy9zcGFyYy5oIChTVEFSVElOR19GUkFNRV9PRkZTRVQpOiBEZXBlbmQgb24KKwlMT05HX0RPVUJMRV9UWVBFX1NJWkUuCisKK0ZyaSBNYXIgMTEgMDg6MDE6NTQgMTk5NCAgU3RlcGhlbiBSLiB2YW4gZGVuIEJlcmcgIChiZXJnQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZSkKKworCSogcnRsLmgsIHRyZWUuaCwgZysrLmMsIGdjYy5jIChQVlBST1RPKTogTmV3IG1hY3JvLgorCSogY29tYmluZS5jLCBleHByLmgsIHJ0bC5oLCB0cmVlLmgsIGdjYy5jOiBVc2UgaXQgZm9yIHZhcmFyZ3MgcHJvdG9zLi4KKwkqIGdlbmF0dHJ0YWIuYywgbWlwcy10ZmlsZS5jLCBvdXRwdXQuaCwgdG9wbGV2LmM6IExpa2V3aXNlLgorCitGcmkgTWFyIDExIDA3OjIxOjM2IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGVtaXQtcnRsLmMgKGNvcHlfcnR4X2lmX3NoYXJlZCwgY2FzZSBMQUJFTF9SRUYpOiBDYW4ndCBzaGFyZS4KKwkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IERlbGV0ZSBSRUdfTEFCRUwgbm90ZSBpZiBsYWJlbCBubworCWxvbmdlciBpbiBpbnNuLgorCisJKiBjLWRlY2wuYyAoZmluaXNoX2RlY2wpOiBXaGVuIHByZXNlcnZpbmcgYW4gaW5pdGlhbGl6ZXIsIGVuc3VyZQorCWl0cyB0eXBlIGlzIG9uIGEgZ29vZCBvYnN0YWNrLgorCitUaHUgTWFyIDEwIDE1OjMyOjQyIDE5OTQgIE1pa2UgQ29sbGlzb24gIChjb2xsaXNvbkBzdy5zdHJhdHVzLmNvbSkKKworCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IFdoZW4gY2xlYXJpbmcgcmVnX2xhc3RfcmVsb2FkX3JlZywKKwljbGVhciBhbGwgaGFyZCByZWdzIGluIHJlbG9hZF9vdXQuCisKK1RodSBNYXIgMTAgMTU6MjM6MTAgMTk5NCAgSGFsbHZhcmQgQiBGdXJ1c2V0aCAgKGhiZkBkdXJpbi51aW8ubm8pCisKKwkqIGNvbGxlY3QyLmMgKGR1cDIpOiBDYXRjaCBgZHVwJyBmYWlsdXJlLiAgUmV0dXJuIGNvcnJlY3QgdmFsdWUuCisKK1RodSBNYXIgMTAgMTU6MTg6MDggMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAgKHJ3ZTExQGNsLmNhbS5hYy51aykKKworCSogZ2NjLmMgKFtfX01TRE9TX19dKTogVXNlICNpZmRlZiwgbm90ICNpZi4KKwkqIGNvbGxlY3QyLmMgKFtfX01TRE9TX19dKTogTGlrZXdpc2UuCisKK1RodSBNYXIgMTAgMTU6MDM6MDEgMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIGNjY3AuYyAobWFpbiwgZmluY2x1ZGUsIGNoZWNrX3ByZWNvbXBpbGVkKTogV2hlbiBzYWZlX3JlYWQKKwlyZXR1cm5zIGEgcGFydGlhbCBidWZmZXIsIHRoaXMgbWVhbnMgRU9GIGhhcyBiZWVuIHJlYWNoZWQ7CisJZG9uJ3QgdHJ5IHRvIHJlYWQgYW55IG1vcmUuCisKK1dlZCBNYXIgIDkgMTg6NDc6MjkgMTk5NCAgUGF1bCBFZ2dlcnQgIChlZ2dlcnRAdHdpbnN1bi5jb20pCisKKwkqIHJlYWwuYyAodGFyZ2V0X25lZ2F0aXZlKTogLTAgY291bnRzIGFzIG5lZ2F0aXZlLgorCitXZWQgTWFyICA5IDE1OjMyOjAxIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIG02OGsubWQgKG1vdnFpKTogRGlzYWJsZSBzcGVjaWFsLWNhc2Ugb2Ygc3RhY2sgcHVzaCBpZiBvcGVyYW5kCisJb25lIGlzIGFuIGFkZHJlc3MgcmVnaXN0ZXIuCisKKwkqIGMtdHlwZWNrLmMgKHBvaW50ZXJfaW50X3N1bSk6IE11bHRpcGxpY2F0aW9uIHNob3VsZCBiZQorCWRvbmUgc2lnbmVkLgorCShwb2ludGVyX2RpZmYpOiBMaWtld2lzZSB0aGUgZGl2aXNpb24uCisJKiBmb2xkLWNvbnN0LmMgKGZvbGQsIGNhc2UgTVVMVF9FWFBSKTogU2ltcGxpZnkgTVVMVF9FWFBSIG9mIGFuCisJRVhBQ1RfRElWX0VYUFIgd2l0aCB0aGUgc2FtZSBkaXZpc29yIGFzIG91ciBtdWx0aXBsaWNhbmQuCisKKwkqIGp1bXAuYyAocnR4X2VxdWFsX2Zvcl90aHJlYWRfcCk6IENvbW11dGF0aXZlIG9wZXJhdGlvbnMKKwlhcmUgaWRlbnRpY2FsIGlmIHRoZSBvcGVyYW5kcyBtYXRjaCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuCisJKiBzY2hlZC5jIChydHhfZXF1YWxfZm9yX21lbXJlZl9wKTogTGlrZXdpc2UuCisKK1dlZCBNYXIgIDkgMTI6MDc6MjkgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlMTFAY2wuY2FtLmFjLnVrKQorCisJKiBjc2UuYyAoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBGaXggdHlwb3M7IHVzZQorCSBBUkdfUE9JTlRFUl9SRUdOVU0gYW5kIEZSQU1FX1BPSU5URVJfUkVHTlVNIGluIGNvbmR0aW9uYWxzLgorCitUdWUgTWFyICA4IDE2OjEyOjA3IDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIGV4cGxvdy5jIChicmVha19vdXRfbWVtb3J5X3JlZnMpOiBEb24ndCBjYWxsIG1hcmtfcmVnX3BvaW50ZXIKKwloZXJlLgorCShtZW1vcnlfYWRkcmVzcyk6IENhbGwgaXQgaGVyZSBpZiBYIGNoYW5nZWQgYW5kIGlzIG5vdyBhIFJFRworCW9yIFJFRyArIENPTlNUX0lOVC4KKworVHVlIE1hciAgOCAxNTo1NzoyOSAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCisKKwkqIGMtZGVjbC5jIChmaW5pc2hfZGVjbCk6IFdoZW4gc2F2aW5nL2Rpc2NhcmRpbmcgaW5pdGlhbGl6ZXJzLAorCWRvbid0IGNoZWNrIFRSRUVfUEVSTUFORU5UIGFuZCBUUkVFX1NUQVRJQy4KKwkoZmluaXNoX2RlY2wsIGZpbmlzaF9mdW5jdGlvbik6IFBhc3MgbmV3IGFyZ3VtZW50IHRvCisJcGVybWFuZW50X2FsbG9jYXRpb24uCisJKiBjcC9kZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgkKKwkqIGNwL2RlY2wyLmMgKHdyaXRlX3Z0YWJsZV9lbnRyaWVzLCBmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgorCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IExpa2V3aXNlLgorCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIG1vbWVudGFyeV9mdW5jdGlvbl9maXJzdG9iagorCWZpZWxkLgorCSogdHJlZS5jIChtb21lbnRhcnlfZnVuY3Rpb25fZmlyc3RvYmopOiBOZXcgdmFyaWFibGUuCisJKGluaXRfb2JzdGFjayk6IFNldCBpdC4KKwkoc2F2ZV90cmVlX3N0YXR1cyk6IFNhdmUgaXQgYW5kIHNldCBpdC4KKwkocmVzdG9yZV90cmVlX3N0YXR1cyk6IFVzZSBpdCBhbmQgcmVzdG9yZSBpdC4KKwkocGVybWFuZW50X2FsbG9jYXRpb24pOiBOZXcgcGFyYW1ldGVyIGZ1bmN0aW9uX2VuZC4gIENsZWFyCisJbW9tZW50YXJ5X29ic3RhY2sgdG8gbW9tZW50YXJ5X2Z1bmN0aW9uX2ZpcnN0b2JqIGlmIHRydWUuCisJKHByZXNlcnZlX2luaXRpYWxpemVyKTogU2V0IGJhc2UgZmllbGQgb2YgZXZlcnkgbW9tZW50YXJ5CisJbGV2ZWwgb24gdGhlIG1vbWVudGFyeSBzdGFjayB0byBuZXcgbW9tZW50YXJ5X2ZpcnN0b2JqLgorCShwb3BfbW9tZW50YXJ5KTogT25seSBmcmVlIGJhY2sgdG8gcHJldmlvdXMgYmFzZS4KKwkqIHRyZWUuaCAocGVybWFuZW50X2FsbG9jYXRpb24pOiBBZGQgcHJvdG90eXBlLgorCitNb24gTWFyICA3IDIwOjEwOjU2IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKKworCSogaXJpczRnbC5oOiBSZXdyaXRlLiAgSW5jbHVkZSBpcmlzNGxvc2VyLmggbm90IGlyaXM0LWdkYi5oLgorCURlZmluZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgbm90IEFTTV9TUEVDLgorCisJKiBic2QtNC5oIChMSU5LX1NQRUMpOiBEbyBub3QgZGVwZW5kIG9uIGdhcy4gIERvbid0IGludGVycHJldCAtRUIKKwlhbmQgLUVMIG9wdGlvbnMsIGJ1dCBkbyBwYXNzIHRoZW0uCisJKiBic2QtNS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIGRlY2wtb3NmMS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIGlyaXM1LmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy01LmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCSogbWlwcy5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHN2cjMtNC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHN2cjMtNS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHN2cjQtNC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKwkqIHN2cjQtNS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KKworCSogZGVjLWJzZC5oIChMSU5LX1NQRUMpOiBQYXNzIGFsbCBub3JtYWwgbGlua2VyIG9wdGlvbnMgdG8gZ2xkLgorCShBU01fU1BFQyk6IFBhc3MgYWxsIG5vcm1hbCBhc3NlbWJsZXIgb3B0aW9ucyB0byBnYXMuCisJKiBvc2Zyb3NlLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgorCShBU01fU1BFQyk6IExpa2V3aXNlLgorCisJKiBtaXBzLmggKEFTTV9TUEVDKTogTWFrZSBkZWZpbml0aW9uIGRlcGVuZCBvbiB3aGV0aGVyIG9yCisJbm90IHRoZSBkZWZhdWx0IGFzc2VtYmxlciBpcyBnYXMuICBQYXNzIGFsbCBub3JtYWwgYXNzZW1ibGVyCisJb3B0aW9ucyB0byBnYXMuICAKKwkqIGlyaXM0bG9zZXIuaCAoQVNNX1NQRUMpOiBMaWtld2lzZS4gIFBhc3MgLU8wIGlmIHRoZSBhc3NlbWJsZXIgaXMKKwlub3QgZ2FzLgorCisJKiBpcmlzMy5oIChBU01fU1BFQywgTElOS19TUEVDKTogRGVsZXRlLgorCSogbmV3czQuaCAoQVNNX1NQRUMsIExJTktfU1BFQyk6IERlbGV0ZS4KKwkqIG5ld3M1LmggKExJTktfU1BFQyk6IERlbGV0ZS4KKwkqIG53czMyNTB2NC5oIChBU01fU1BFQywgTElOS19TUEVDKTogRGVsZXRlLgorCSogdWx0cml4LmggKEFTTV9TUEVDLCBMSU5LX1NQRUMpOiBEZWxldGUuCisKKwkqIG1pcHMuaCAoQVNNX0ZJTkFMX1NQRUMpOiBDcm9zcyBjb21waWxpbmcgZG9lcyBub3QgcHJlc3VtZSBnYXMuCisKKwkqIG9zZnJvc2UuaCAoU0laRV9UWVBFKTogRGVsZXRlLgorCShNQVhfV0NIQVJfVFlQRV9TSVpFKTogRGVmaW5lLgorCisJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IEZvciBwY2Nfc3RydWN0X3ZhbHVlIGNhc2UsIHNldAorCU1FTV9JTl9TVFJVQ1RfUCBjb3JyZWN0bHkgb24gdGFyZ2V0LgorCisJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBEb24ndCBleHBsaWNpdGx5IGRlbGV0ZSBsZC4KKworTW9uIE1hciAgNyAyMDowNjozOCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCisKKwkqIG1pcHMtdGR1bXAuYyAocHJpbnRfc3ltYm9sKTogVGhlIGluZGV4IGZpZWxkIG9mIGEgZ2xvYmFsIHN5bWJvbAorCWlzIHRoZSBzeW1ib2wgdGFibGUgaW5kZXggb2YgdGhlIGNvcnJlc3BvbmRpbmcgbG9jYWwgc3ltYm9sLCBub3QKKwlhbiBpbmRleCBpbnRvIHRoZSBhdXggdGFibGUuCisJKHByaW50X2ZpbGVfZGVzYyk6IFByaW50IG91dCBzaXplIG9mIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uCisJcmF0aGVyIHRoYW4gcmVwZWF0aW5nIGxpbmUgbnVtYmVyIGNvdW50LiAgVGhlIGNiTGluZU9mZnNldCBmaWVsZAorCW9mIGEgUERSIGlzIHJlbGF0aXZlIHRvIHRoZSBjYkxpbmVPZmZzZXQgZmllbGQgb2YgdGhlIEZEUi4gIEFsc28sCisJd2hlbiBjb21wdXRpbmcgbGluZV9lbmQgb2YgdGhlIGxhc3QgUERSLCB1c2UgY2JMaW5lT2Zmc2V0LCBub3QKKwlpbGluZUJhc2UuCisKK01vbiBNYXIgIDcgMTc6NDI6MzUgMTk5NCAgSC5KLiBMdSAoaGpsQG55bmV4c3QuY29tKQorCisJKiBNYWtlZmlsZS5pbiAoZ3h4X3ByZWZpeCk6ICBOZXc7IGRlZmF1bHQgdG8gJChsaWJkaXIpLgorCShHUExVU1BMVVNfSU5DTFVERV9ESVIpOiBDaGFuZ2UgdG8gJChneHhfcHJlZml4KS9nKystaW5jbHVkZS4KKwkqIGNvbmZpZ3VyZSAoZ3h4X3ByZWZpeCk6IE5ldzsgZGVmYXVsdCB0byAkKGxpYmRpcikuCisKKwkqIGkzODYvbGludXguaCAoR1BMVVNQTFVTX0lOQ0xVREVfRElSKTogRGVsZXRlZC4KKwkoU1RBUlRGSUxFX1NQRUMpOiBSZW1vdmUgIi1ub2p1bXAiLgorCitNb24gTWFyICA3IDE3OjA2OjA4IDE5OTQgIFN0ZXBoZW4gUi4gdmFuIGRlbiBCZXJnICAoYmVyZ0Bwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGUpCisKKwkqIGkzODYveG0tbGludXguaCAobWFsbG9jKTogUmVtb3ZlIGRpc2FibGVkIGNvZGUuCisKK01vbiBNYXIgIDcgMTM6Mjc6MDkgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogY2NjcC5jIChub19yZWNvcmRfZmlsZSk6IE5ldyB2YXJpYWJsZS4KKwkobWFpbik6IFNldCBpdCBmb3IgLWltYWNyb3MgYW5kIC1pbmNsdWRlIGZpbGVzLgorCShkb19lbmRpZik6IERvbid0IGNhbGwgcmVjb3JkX2NvbnRyb2xfbWFjcm8gZm9yIC1pbmNsdWRlIG9yIC1pbWFjcm9zCisJZmlsZXMgb3IgZmlsZXMgaW5jbHVkZWQgZnJvbSAtaW1hY3Jvcy4KKworU3VuIE1hciAgNiAyMTo0ODo1MSAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCisKKwkqIGNvbmZpZy5zdWI6IEFjY2VwdCBmcmVlYnNkIGFzIE9TLgorCitTdW4gTWFyICA2IDE0OjQwOjAwIDE5OTQgIFJpY2hhcmQgS2VubmVyICAoa2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHUpCisKKwkqIHN0dXBpZC5jOiBBZGQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4KKwkobGFzdF97anVtcCxsYWJlbH1fc3VpZCk6IERlbGV0ZWQ7IGFsbCB1c2VzIGRlbGV0ZWQuCisJKHJlZ19jcm9zc2VzX2Jsb2Nrcyk6IExpa2V3aXNlLgorCShzdHVwaWRfbGlmZV9hbmFseXNpcyk6IE9ubHkgYWxsb2NhdGUgTUFYX1NVSUQgZW50cmllcworCW9mIGFmdGVyX2luc25faGFyZF9yZWdzLgorCVVzZSBHRVRfUlRYX0NMQVNTIHdoZW4gcG9zc2libGUuCisJSW5pdGlhbGl6ZSBhbGwgb2YgcmVnX3JlbnVtYmVyLgorCVVzZSByZWdfYWx0ZXJuYXRlX2NsYXNzIHdoZW4gcmVnIG5vdCBhdmFpbGFibGUgaW4gcHJlZmVycmVkIGNsYXNzLgorCShzdHVwaWRfZmluZF9yZWcpOiBEZWxldGUgYXJndW1lbnQgQ1JPU1NFU19CTE9DS1MuCisKKwkqIHN0dXBpZC5jIChzdHVwaWRfbWFya19yZWZzKTogSWYgc2V0dGluZyByZWdfd2hlcmVfZGVhZCwgc2V0CisJcmVnc19saXZlIHNvIHdlIGRvbid0IGxhdGVyIGNsb2JiZXIgaXQuCisKKwkqIHJlY29nLmMgKGNvbnN0cmFpbl9vcGVyYW5kcyk6IFByb3Blcmx5IGhhbmRsZSAnIycgaW4gY29uc3RyYWludC4KKworCSogY29tYmluZS5jIChzdWJzdCk6IFNwbGl0IGludG8gZml2ZSBmdW5jdGlvbnMuCisJKHNpbXBsaWZ5X3tydHgsaWZfdGhlbl9lbHNlLHNldCxsb2dpY2FsfSk6IE5ldyBmdW5jdGlvbnMuCisKK1N1biBNYXIgIDYgMTM6MTI6NDggMTk5NCAgSmFtZXMgVmFuIEFydHNkYWxlbiAgKGphbWVzIGF0IGJpZ3RleC5jYWN0dXMub3JnKQorCisJKiByZWctc3RhY2suYyAoZmluZF9ibG9ja3MpOiBVbmRvIHByZXZpb3VzIGNoYW5nZSB0byBibG9jaworCWRlbGluZWF0aW9uIGFsZ29yaXRobS4KKwkocmVnX3RvX3N0YWNrKTogTWFrZSBhbGdvcml0aG0gaWRlbnRpY2FsIHRvIHRoYXQgaW4gZmluZF9ibG9ja3MuCisKK1NhdCBNYXIgIDUgMTY6Mjc6NTggMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogZ2VuYXR0cnRhYi5jIChhdHRyX3ByaW50Zik6IFJlbW92ZSBgcmVnaXN0ZXInIGZyb20gZGVjbCBvZiBGTVQuCisJKiB0cmVlLmMgKGJ1aWxkX250LCBidWlsZF9wYXJzZV9ub2RlKTogUmVtb3ZlIGByZWdpc3RlcicgZnJvbSBkZWNsCisJb2YgQ09ERS4KKworCSogcmVsb2FkLmMgKGdldF9zZWNvbmRhcnlfbWVtKTogQ2FsbCBTRUNPTkRBUllfTUVNT1JZX05FRURFRF9NT0RFCisJaWYgaXQgaXMgZGVmaW5lZC4KKwkqIGFscGhhLmggKFNFQ09OREFSWV9NRU1PUllfTkVFREVEX01PREUpOiBOZXcgbWFjcm8uCisJKiBhbHBoYS5jIChvdXRwdXRfe3BybyxlcGl9bG9nKTogUm91bmQgdmFyIHNpemUgdG8gcXVhZHdvcmQgYm91bmRhcnkuCisKKwkqIGFscGhhLm1kICh1bmFsaWduZWRfe2xvYWQsc3RvcmV9aGkpOiBDbGVhciBsb3cgYml0IG9mCisJYWRkcmVzcyBiZWZvcmUgdXNpbmcgYXMgb3BlcmFuZCB0byBleHR3bCwgbXNrd2wsIGFuZCBpbnN3bC4KKwkobW92aGksIHJlbG9hZF9pbmhpLCByZWxvYWRfb3V0aGkpOiBQYXNzIGV4dHJhIHNjcmF0Y2ggdmFsdWUuCisKK0ZyaSBNYXIgIDQgMTc6MTY6MjMgMTk5NCAgTGVvbmFyZCBOb3JyZ2FyZCAgKHZpbnNjaUBuaWMuZnVuZXQuZmkpCisKKwkqIGMtbGV4LmM6IERlbGV0ZSBncGVyZi1nZW5lcmF0ZWQgc291cmNlIGZyb20gaGVyZS4KKwkqIGMtZ3BlcmYuaDogTmV3IGZpbGU7IGNvbnRhaW5zIGp1c3QgZ3BlcmYgb3V0cHV0LgorCSogTWFrZWZpbGUuaW4gKGMtZ3BlcmYuaCk6IE5ldyBydWxlLgorCShjLWxleC5vKTogRGVwZW5kcyBvbiBjLWdwZXJmLmguCisJKHJlYWxjbGVhbik6IERlbGV0ZSBjLWdwZXJmLmguCisJKGRpc3RkaXIpOiBCdWlsZCBjLWdwZXJmLmguCisJKGRpZmYpOiBPbWl0IGRpZmZlcmVuY2VzIGluIGMtZ3BlcmYuaC4KKworRnJpIE1hciAgNCAwNjozNToyNiAxOTk0ICBSaWNoYXJkIEtlbm5lciAgKGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1KQorCisJKiBzdnI0LmgsIG04OGsuaCAoQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVCk6IFNldAorCXNpemVfZGlyZWN0aXZlX291dHB1dCB0byAxLgorCisJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogRG9uJ3QgY2FsbCBnZW5faW5wdXRfcmVsb2FkIGlmCisJc3JjIGFuZCBkZXN0IGFyZSBpZGVudGljYWwuCisKK1RodSBNYXIgIDMgMTU6MzI6NTUgMTk5NCAgUmljaGFyZCBLZW5uZXIgIChrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdSkKKworCSogYWxwaGEubWQgKG1za1hsKTogQWRkIG1pc3NpbmcgTk9UIGluIHBhdHRlcm5zLgorCisJKiB0LW04OGs6IFJlbW92ZSBhZGRlZCByZWFsY2xlYW4gcnVsZS4KKworU2VlIENoYW5nZUxvZy44IGZvciBlYXJsaWVyIGNoYW5nZXMuCmRpZmYgLS1naXQgYS9nY2MvSU5TVEFMTCBiL2djYy9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YWM3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvSU5TVEFMTApAQCAtMCwwICsxLDE5MDYgQEAKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgR05VIGNvbXBpbGVyLiAgQ29weXJpZ2h0CisoQykgMTk4OCwgMTk4OSwgMTk5MiwgMTk5NCwgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIFlvdQorbWF5IGNvcHksIGRpc3RyaWJ1dGUsIGFuZCBtb2RpZnkgaXQgZnJlZWx5IGFzIGxvbmcgYXMgeW91IHByZXNlcnZlIHRoaXMKK2NvcHlyaWdodCBub3RpY2UgYW5kIHBlcm1pc3Npb24gbm90aWNlLgorCitJbnN0YWxsaW5nIEdOVSBDQworKioqKioqKioqKioqKioqKioKKworICAgSGVyZSBpcyB0aGUgcHJvY2VkdXJlIGZvciBpbnN0YWxsaW5nIEdOVSBDQyBvbiBhIFVuaXggc3lzdGVtLiAgU2VlCisqTm90ZSBWTVMgSW5zdGFsbDo6LCBmb3IgVk1TIHN5c3RlbXMuICBJbiB0aGlzIHNlY3Rpb24gd2UgYXNzdW1lIHlvdQorY29tcGlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc291cmNlIGZpbGVzOyBzZWUgKk5vdGUKK090aGVyIERpcjo6LCB0byBmaW5kIG91dCBob3cgdG8gY29tcGlsZSBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSBvbiBVbml4CitzeXN0ZW1zLgorCisgICBZb3UgY2Fubm90IGluc3RhbGwgR05VIEMgYnkgaXRzZWxmIG9uIE1TRE9TOyBpdCB3aWxsIG5vdCBjb21waWxlCit1bmRlciBhbnkgTVNET1MgY29tcGlsZXIgZXhjZXB0IGl0c2VsZi4gIFlvdSBuZWVkIHRvIGdldCB0aGUgY29tcGxldGUKK2NvbXBpbGF0aW9uIHBhY2thZ2UgREpHUFAsIHdoaWNoIGluY2x1ZGVzIGJpbmFyaWVzIGFzIHdlbGwgYXMgc291cmNlcywKK2FuZCBpbmNsdWRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBjb21waWxhdGlvbiB0b29scyBhbmQgbGlicmFyaWVzLgorCisgIDEuIElmIHlvdSBoYXZlIGJ1aWx0IEdOVSBDQyBwcmV2aW91c2x5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBmb3IgYQorICAgICBkaWZmZXJlbnQgdGFyZ2V0IG1hY2hpbmUsIGRvIGBtYWtlIGRpc3RjbGVhbicgdG8gZGVsZXRlIGFsbCBmaWxlcworICAgICB0aGF0IG1pZ2h0IGJlIGludmFsaWQuICBPbmUgb2YgdGhlIGZpbGVzIHRoaXMgZGVsZXRlcyBpcworICAgICBgTWFrZWZpbGUnOyBpZiBgbWFrZSBkaXN0Y2xlYW4nIGNvbXBsYWlucyB0aGF0IGBNYWtlZmlsZScgZG9lcyBub3QKKyAgICAgZXhpc3QsIGl0IHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIGRpcmVjdG9yeSBpcyBhbHJlYWR5IHN1aXRhYmx5CisgICAgIGNsZWFuLgorCisgIDIuIE9uIGEgU3lzdGVtIFYgcmVsZWFzZSA0IHN5c3RlbSwgbWFrZSBzdXJlIGAvdXNyL2JpbicgcHJlY2VkZXMKKyAgICAgYC91c3IvdWNiJyBpbiBgUEFUSCcuICBUaGUgYGNjJyBjb21tYW5kIGluIGAvdXNyL3VjYicgdXNlcworICAgICBsaWJyYXJpZXMgd2hpY2ggaGF2ZSBidWdzLgorCisgIDMuIFNwZWNpZnkgdGhlIGhvc3QsIGJ1aWxkIGFuZCB0YXJnZXQgbWFjaGluZSBjb25maWd1cmF0aW9ucy4gIFlvdSBkbworICAgICB0aGlzIGJ5IHJ1bm5pbmcgdGhlIGZpbGUgYGNvbmZpZ3VyZScuCisKKyAgICAgVGhlICJidWlsZCIgbWFjaGluZSBpcyB0aGUgc3lzdGVtIHdoaWNoIHlvdSBhcmUgdXNpbmcsIHRoZSAiaG9zdCIKKyAgICAgbWFjaGluZSBpcyB0aGUgc3lzdGVtIHdoZXJlIHlvdSB3YW50IHRvIHJ1biB0aGUgcmVzdWx0aW5nIGNvbXBpbGVyCisgICAgIChub3JtYWxseSB0aGUgYnVpbGQgbWFjaGluZSksIGFuZCB0aGUgInRhcmdldCIgbWFjaGluZSBpcyB0aGUKKyAgICAgc3lzdGVtIGZvciB3aGljaCB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgY29kZS4KKworICAgICBJZiB5b3UgYXJlIGJ1aWxkaW5nIGEgY29tcGlsZXIgdG8gcHJvZHVjZSBjb2RlIGZvciB0aGUgbWFjaGluZSBpdAorICAgICBydW5zIG9uIChhIG5hdGl2ZSBjb21waWxlciksIHlvdSBub3JtYWxseSBkbyBub3QgbmVlZCB0byBzcGVjaWZ5CisgICAgIGFueSBvcGVyYW5kcyB0byBgY29uZmlndXJlJzsgaXQgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIHR5cGUgb2YKKyAgICAgbWFjaGluZSB5b3UgYXJlIG9uIGFuZCB1c2UgdGhhdCBhcyB0aGUgYnVpbGQsIGhvc3QgYW5kIHRhcmdldAorICAgICBtYWNoaW5lcy4gIFNvIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4KKyAgICAgYnVpbGRpbmcgYSBuYXRpdmUgY29tcGlsZXIgdW5sZXNzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0CisgICAgIHdoYXQgeW91ciBjb25maWd1cmF0aW9uIGlzIG9yIGd1ZXNzZXMgd3JvbmcuCisKKyAgICAgSW4gdGhvc2UgY2FzZXMsIHNwZWNpZnkgdGhlIGJ1aWxkIG1hY2hpbmUncyAiY29uZmlndXJhdGlvbiBuYW1lIgorICAgICB3aXRoIHRoZSBgLS1idWlsZCcgb3B0aW9uOyB0aGUgaG9zdCBhbmQgdGFyZ2V0IHdpbGwgZGVmYXVsdCB0byBiZQorICAgICB0aGUgc2FtZSBhcyB0aGUgYnVpbGQgbWFjaGluZS4gIChJZiB5b3UgYXJlIGJ1aWxkaW5nIGEKKyAgICAgY3Jvc3MtY29tcGlsZXIsIHNlZSAqTm90ZSBDcm9zcy1Db21waWxlcjo6LikKKworICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisKKyAgICAgICAgICAuL2NvbmZpZ3VyZSAtLWJ1aWxkPXNwYXJjLXN1bi1zdW5vczQuMQorCisgICAgIEEgY29uZmlndXJhdGlvbiBuYW1lIG1heSBiZSBjYW5vbmljYWwgb3IgaXQgbWF5IGJlIG1vcmUgb3IgbGVzcworICAgICBhYmJyZXZpYXRlZC4KKworICAgICBBIGNhbm9uaWNhbCBjb25maWd1cmF0aW9uIG5hbWUgaGFzIHRocmVlIHBhcnRzLCBzZXBhcmF0ZWQgYnkKKyAgICAgZGFzaGVzLiAgSXQgbG9va3MgbGlrZSB0aGlzOiBgQ1BVLUNPTVBBTlktU1lTVEVNJy4gIChUaGUgdGhyZWUKKyAgICAgcGFydHMgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiBkYXNoZXM7IGBjb25maWd1cmUnIGNhbiBmaWd1cmUgb3V0CisgICAgIHdoaWNoIGRhc2hlcyBzZXJ2ZSB3aGljaCBwdXJwb3NlLikgIEZvciBleGFtcGxlLAorICAgICBgbTY4ay1zdW4tc3Vub3M0LjEnIHNwZWNpZmllcyBhIFN1biAzLgorCisgICAgIFlvdSBjYW4gYWxzbyByZXBsYWNlIHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGJ5IG5pY2tuYW1lcyBvcgorICAgICBhbGlhc2VzLiAgRm9yIGV4YW1wbGUsIGBzdW4zJyBzdGFuZHMgZm9yIGBtNjhrLXN1bicsIHNvCisgICAgIGBzdW4zLXN1bm9zNC4xJyBpcyBhbm90aGVyIHdheSB0byBzcGVjaWZ5IGEgU3VuIDMuICBZb3UgY2FuIGFsc28KKyAgICAgdXNlIHNpbXBseSBgc3VuMy1zdW5vcycsIHNpbmNlIHRoZSB2ZXJzaW9uIG9mIFN1bk9TIGlzIGFzc3VtZWQgYnkKKyAgICAgZGVmYXVsdCB0byBiZSB2ZXJzaW9uIDQuICBgc3VuMy1ic2QnIGFsc28gd29ya3MsIHNpbmNlIGBjb25maWd1cmUnCisgICAgIGtub3dzIHRoYXQgdGhlIG9ubHkgQlNEIHZhcmlhbnQgb24gYSBTdW4gMyBpcyBTdW5PUy4KKworICAgICBZb3UgY2FuIHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBhZnRlciBhbnkgb2YgdGhlIHN5c3RlbSB0eXBlcywKKyAgICAgYW5kIHNvbWUgb2YgdGhlIENQVSB0eXBlcy4gIEluIG1vc3QgY2FzZXMsIHRoZSB2ZXJzaW9uIGlzCisgICAgIGlycmVsZXZhbnQsIGFuZCB3aWxsIGJlIGlnbm9yZWQuICBTbyB5b3UgbWlnaHQgYXMgd2VsbCBzcGVjaWZ5IHRoZQorICAgICB2ZXJzaW9uIGlmIHlvdSBrbm93IGl0LgorCisgICAgIFNlZSAqTm90ZSBDb25maWd1cmF0aW9uczo6LCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uCisgICAgIG5hbWVzIGFuZCBub3RlcyBvbiBtYW55IG9mIHRoZSBjb25maWd1cmF0aW9ucy4gIFlvdSBzaG91bGQgY2hlY2sKKyAgICAgdGhlIG5vdGVzIGluIHRoYXQgc2VjdGlvbiBiZWZvcmUgcHJvY2VlZGluZyBhbnkgZnVydGhlciB3aXRoIHRoZQorICAgICBpbnN0YWxsYXRpb24gb2YgR05VIENDLgorCisgICAgIFRoZXJlIGFyZSBmb3VyIGFkZGl0aW9uYWwgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgaW5kZXBlbmRlbnRseSB0bworICAgICBkZXNjcmliZSB2YXJpYW50IGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBjb25maWd1cmF0aW9ucy4gIFRoZXNlIGFyZQorICAgICBgLS13aXRoLWdudS1hcycsIGAtLXdpdGgtZ251LWxkJywgYC0td2l0aC1zdGFicycgYW5kIGAtLW5mcCcuCisKKyAgICBgLS13aXRoLWdudS1hcycKKyAgICAgICAgICBJZiB5b3Ugd2lsbCB1c2UgR05VIENDIHdpdGggdGhlIEdOVSBhc3NlbWJsZXIgKEdBUyksIHlvdQorICAgICAgICAgIHNob3VsZCBkZWNsYXJlIHRoaXMgYnkgdXNpbmcgdGhlIGAtLXdpdGgtZ251LWFzJyBvcHRpb24gd2hlbgorICAgICAgICAgIHlvdSBydW4gYGNvbmZpZ3VyZScuCisKKyAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbnN0YWxsIEdBUy4gIEl0IG9ubHkgbW9kaWZpZXMgdGhlCisgICAgICAgICAgb3V0cHV0IG9mIEdOVSBDQyB0byB3b3JrIHdpdGggR0FTLiAgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcKKyAgICAgICAgICBHQVMgaXMgdXAgdG8geW91LgorCisgICAgICAgICAgQ29udmVyc2VseSwgaWYgeW91ICpkbyBub3QqIHdpc2ggdG8gdXNlIEdBUyBhbmQgZG8gbm90IHNwZWNpZnkKKyAgICAgICAgICBgLS13aXRoLWdudS1hcycgd2hlbiBidWlsZGluZyBHTlUgQ0MsIGl0IGlzIHVwIHRvIHlvdSB0byBtYWtlCisgICAgICAgICAgc3VyZSB0aGF0IEdBUyBpcyBub3QgaW5zdGFsbGVkLiAgR05VIENDIHNlYXJjaGVzIGZvciBhCisgICAgICAgICAgcHJvZ3JhbSBuYW1lZCBgYXMnIGluIHZhcmlvdXMgZGlyZWN0b3JpZXM7IGlmIHRoZSBwcm9ncmFtIGl0CisgICAgICAgICAgZmluZHMgaXMgR0FTLCB0aGVuIGl0IHJ1bnMgR0FTLiAgSWYgeW91IGFyZSBub3Qgc3VyZSB3aGVyZQorICAgICAgICAgIEdOVSBDQyBmaW5kcyB0aGUgYXNzZW1ibGVyIGl0IGlzIHVzaW5nLCB0cnkgc3BlY2lmeWluZyBgLXYnCisgICAgICAgICAgd2hlbiB5b3UgcnVuIGl0LgorCisgICAgICAgICAgVGhlIHN5c3RlbXMgd2hlcmUgaXQgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZXRoZXIgeW91IHVzZSBHQVMKKyAgICAgICAgICBhcmUKKyAgICAgICAgICBgaHBwYTEuMC1BTlktQU5ZJywgYGhwcGExLjEtQU5ZLUFOWScsIGBpMzg2LUFOWS1zeXN2JywKKyAgICAgICAgICBgaTM4Ni1BTlktaXNjJywKKyAgICAgICAgICBgaTg2MC1BTlktYnNkJywgYG02OGstYnVsbC1zeXN2JywgYG02OGstaHAtaHB1eCcsCisgICAgICAgICAgYG02OGstc29ueS1ic2QnLAorICAgICAgICAgIGBtNjhrLWFsdG9zLXN5c3YnLCBgbTY4MDAwLWhwLWhwdXgnLCBgbTY4MDAwLWF0dC1zeXN2JywKKyAgICAgICAgICBgQU5ZLWx5bngtbHlueG9zJywgYW5kIGBtaXBzLUFOWScpLiAgT24gYW55IG90aGVyIHN5c3RlbSwKKyAgICAgICAgICBgLS13aXRoLWdudS1hcycgaGFzIG5vIGVmZmVjdC4KKworICAgICAgICAgIE9uIHRoZSBzeXN0ZW1zIGxpc3RlZCBhYm92ZSAoZXhjZXB0IGZvciB0aGUgSFAtUEEsIGZvciBJU0Mgb24KKyAgICAgICAgICB0aGUgMzg2LCBhbmQgZm9yIGBtaXBzLXNnaS1pcml4NS4qJyksIGlmIHlvdSB1c2UgR0FTLCB5b3UKKyAgICAgICAgICBzaG91bGQgYWxzbyB1c2UgdGhlIEdOVSBsaW5rZXIgKGFuZCBzcGVjaWZ5IGAtLXdpdGgtZ251LWxkJykuCisKKyAgICBgLS13aXRoLWdudS1sZCcKKyAgICAgICAgICBTcGVjaWZ5IHRoZSBvcHRpb24gYC0td2l0aC1nbnUtbGQnIGlmIHlvdSBwbGFuIHRvIHVzZSB0aGUgR05VCisgICAgICAgICAgbGlua2VyIHdpdGggR05VIENDLgorCisgICAgICAgICAgVGhpcyBvcHRpb24gZG9lcyBub3QgY2F1c2UgdGhlIEdOVSBsaW5rZXIgdG8gYmUgaW5zdGFsbGVkOyBpdAorICAgICAgICAgIGp1c3QgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEdOVSBDQyB0byB3b3JrIHdpdGggdGhlIEdOVQorICAgICAgICAgIGxpbmtlci4gIFNwZWNpZmljYWxseSwgaXQgaW5oaWJpdHMgdGhlIGluc3RhbGxhdGlvbiBvZgorICAgICAgICAgIGBjb2xsZWN0MicsIGEgcHJvZ3JhbSB3aGljaCBvdGhlcndpc2Ugc2VydmVzIGFzIGEgZnJvbnQtZW5kCisgICAgICAgICAgZm9yIHRoZSBzeXN0ZW0ncyBsaW5rZXIgb24gbW9zdCBjb25maWd1cmF0aW9ucy4KKworICAgIGAtLXdpdGgtc3RhYnMnCisgICAgICAgICAgT24gTUlQUyBiYXNlZCBzeXN0ZW1zIGFuZCBvbiBBbHBoYXMsIHlvdSBtdXN0IHNwZWNpZnkgd2hldGhlcgorICAgICAgICAgIHlvdSB3YW50IEdOVSBDQyB0byBjcmVhdGUgdGhlIG5vcm1hbCBFQ09GRiBkZWJ1Z2dpbmcgZm9ybWF0LAorICAgICAgICAgIG9yIHRvIHVzZSBCU0Qtc3R5bGUgc3RhYnMgcGFzc2VkIHRocm91Z2ggdGhlIEVDT0ZGIHN5bWJvbAorICAgICAgICAgIHRhYmxlLiAgVGhlIG5vcm1hbCBFQ09GRiBkZWJ1ZyBmb3JtYXQgY2Fubm90IGZ1bGx5IGhhbmRsZQorICAgICAgICAgIGxhbmd1YWdlcyBvdGhlciB0aGFuIEMuICBCU0Qgc3RhYnMgZm9ybWF0IGNhbiBoYW5kbGUgb3RoZXIKKyAgICAgICAgICBsYW5ndWFnZXMsIGJ1dCBpdCBvbmx5IHdvcmtzIHdpdGggdGhlIEdOVSBkZWJ1Z2dlciBHREIuCisKKyAgICAgICAgICBOb3JtYWxseSwgR05VIENDIHVzZXMgdGhlIEVDT0ZGIGRlYnVnZ2luZyBmb3JtYXQgYnkgZGVmYXVsdDsKKyAgICAgICAgICBpZiB5b3UgcHJlZmVyIEJTRCBzdGFicywgc3BlY2lmeSBgLS13aXRoLXN0YWJzJyB3aGVuIHlvdQorICAgICAgICAgIGNvbmZpZ3VyZSBHTlUgQ0MuCisKKyAgICAgICAgICBObyBtYXR0ZXIgd2hpY2ggZGVmYXVsdCB5b3UgY2hvb3NlIHdoZW4geW91IGNvbmZpZ3VyZSBHTlUgQ0MsCisgICAgICAgICAgdGhlIHVzZXIgY2FuIHVzZSB0aGUgYC1nY29mZicgYW5kIGAtZ3N0YWJzKycgb3B0aW9ucyB0bworICAgICAgICAgIHNwZWNpZnkgZXhwbGljaXRseSB0aGUgZGVidWcgZm9ybWF0IGZvciBhIHBhcnRpY3VsYXIKKyAgICAgICAgICBjb21waWxhdGlvbi4KKworICAgICAgICAgIGAtLXdpdGgtc3RhYnMnIGlzIG1lYW5pbmdmdWwgb24gdGhlIElTQyBzeXN0ZW0gb24gdGhlIDM4NiwKKyAgICAgICAgICBhbHNvLCBpZiBgLS13aXRoLWdhcycgaXMgdXNlZC4gIEl0IHNlbGVjdHMgdXNlIG9mIHN0YWJzCisgICAgICAgICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGVtYmVkZGVkIGluIENPRkYgb3V0cHV0LiAgVGhpcyBraW5kIG9mCisgICAgICAgICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIHN1cHBvcnRzIEMrKyB3ZWxsOyBvcmRpbmFyeSBDT0ZGCisgICAgICAgICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGRvZXMgbm90LgorCisgICAgICAgICAgYC0td2l0aC1zdGFicycgaXMgYWxzbyBtZWFuaW5nZnVsIG9uIDM4NiBzeXN0ZW1zIHJ1bm5pbmcKKyAgICAgICAgICBTVlI0LiAgSXQgc2VsZWN0cyB1c2Ugb2Ygc3RhYnMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGVtYmVkZGVkCisgICAgICAgICAgaW4gRUxGIG91dHB1dC4gIFRoZSBDKysgY29tcGlsZXIgY3VycmVudGx5ICgyLjYuMCkgZG9lcyBub3QKKyAgICAgICAgICBzdXBwb3J0IHRoZSBEV0FSRiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbm9ybWFsbHkgdXNlZCBvbiAzODYKKyAgICAgICAgICBTVlI0IHBsYXRmb3Jtczsgc3RhYnMgcHJvdmlkZSBhIHdvcmthYmxlIGFsdGVybmF0aXZlLiAgVGhpcworICAgICAgICAgIHJlcXVpcmVzIGdhcyBhbmQgZ2RiLCBhcyB0aGUgbm9ybWFsIFNWUjQgdG9vbHMgY2FuIG5vdAorICAgICAgICAgIGdlbmVyYXRlIG9yIGludGVycHJldCBzdGFicy4KKworICAgIGAtLW5mcCcKKyAgICAgICAgICBPbiBjZXJ0YWluIHN5c3RlbXMsIHlvdSBtdXN0IHNwZWNpZnkgd2hldGhlciB0aGUgbWFjaGluZSBoYXMKKyAgICAgICAgICBhIGZsb2F0aW5nIHBvaW50IHVuaXQuICBUaGVzZSBzeXN0ZW1zIGluY2x1ZGUKKyAgICAgICAgICBgbTY4ay1zdW4tc3Vub3NOJyBhbmQgYG02OGstaXNpLWJzZCcuICBPbiBhbnkgb3RoZXIgc3lzdGVtLAorICAgICAgICAgIGAtLW5mcCcgY3VycmVudGx5IGhhcyBubyBlZmZlY3QsIHRob3VnaCBwZXJoYXBzIHRoZXJlIGFyZQorICAgICAgICAgIG90aGVyIHN5c3RlbXMgd2hlcmUgaXQgY291bGQgdXNlZnVsbHkgbWFrZSBhIGRpZmZlcmVuY2UuCisKKyAgICAgVGhlIGBjb25maWd1cmUnIHNjcmlwdCBzZWFyY2hlcyBzdWJkaXJlY3RvcmllcyBvZiB0aGUgc291cmNlCisgICAgIGRpcmVjdG9yeSBmb3Igb3RoZXIgY29tcGlsZXJzIHRoYXQgYXJlIHRvIGJlIGludGVncmF0ZWQgaW50byBHTlUKKyAgICAgQ0MuICBUaGUgR05VIGNvbXBpbGVyIGZvciBDKyssIGNhbGxlZCBHKysgaXMgaW4gYSBzdWJkaXJlY3RvcnkKKyAgICAgbmFtZWQgYGNwJy4gIGBjb25maWd1cmUnIGluc2VydHMgcnVsZXMgaW50byBgTWFrZWZpbGUnIHRvIGJ1aWxkCisgICAgIGFsbCBvZiB0aG9zZSBjb21waWxlcnMuCisKKyAgICAgSGVyZSB3ZSBzcGVsbCBvdXQgd2hhdCBmaWxlcyB3aWxsIGJlIHNldCB1cCBieSBgY29uZmlndXJlJy4KKyAgICAgTm9ybWFsbHkgeW91IG5lZWQgbm90IGJlIGNvbmNlcm5lZCB3aXRoIHRoZXNlIGZpbGVzLgorCisgICAgICAgICogQSBmaWxlIG5hbWVkIGBjb25maWcuaCcgaXMgY3JlYXRlZCB0aGF0IGNvbnRhaW5zIGEgYCNpbmNsdWRlJworICAgICAgICAgIG9mIHRoZSB0b3AtbGV2ZWwgY29uZmlnIGZpbGUgZm9yIHRoZSBtYWNoaW5lIHlvdSB3aWxsIHJ1biB0aGUKKyAgICAgICAgICBjb21waWxlciBvbiAoKm5vdGUgVGhlIENvbmZpZ3VyYXRpb24gRmlsZToKKyAgICAgICAgICAoZ2NjLmluZm8pQ29uZmlnLikuICBUaGlzIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nCisgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3QgbWFjaGluZS4gIEl0IGluY2x1ZGVzIGB0bS5oJy4KKworICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgY29uZmlnIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUgc3ViZGlyZWN0b3J5CisgICAgICAgICAgYGNvbmZpZycuICBJdHMgbmFtZSBpcyBhbHdheXMgYHhtLVNPTUVUSElORy5oJzsgdXN1YWxseQorICAgICAgICAgIGB4bS1NQUNISU5FLmgnLCBidXQgdGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9ucy4KKworICAgICAgICAgIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIHlvdSBtaWdodAorICAgICAgICAgIHdhbnQgdG8gc2V0IHVwIGBjb25maWcuaCcgdG8gY29udGFpbiBhIGAjaW5jbHVkZScgY29tbWFuZAorICAgICAgICAgIHdoaWNoIHJlZmVycyB0byB0aGUgYXBwcm9wcmlhdGUgZmlsZS4KKworICAgICAgICAqIEEgZmlsZSBuYW1lZCBgdGNvbmZpZy5oJyBpcyBjcmVhdGVkIHdoaWNoIGluY2x1ZGVzIHRoZQorICAgICAgICAgIHRvcC1sZXZlbCBjb25maWcgZmlsZSBmb3IgeW91ciB0YXJnZXQgbWFjaGluZS4gIFRoaXMgaXMgdXNlZAorICAgICAgICAgIGZvciBjb21waWxpbmcgY2VydGFpbiBwcm9ncmFtcyB0byBydW4gb24gdGhhdCBtYWNoaW5lLgorCisgICAgICAgICogQSBmaWxlIG5hbWVkIGB0bS5oJyBpcyBjcmVhdGVkIHdoaWNoIGluY2x1ZGVzIHRoZQorICAgICAgICAgIG1hY2hpbmUtZGVzY3JpcHRpb24gbWFjcm8gZmlsZSBmb3IgeW91ciB0YXJnZXQgbWFjaGluZS4gIEl0CisgICAgICAgICAgc2hvdWxkIGJlIGluIHRoZSBzdWJkaXJlY3RvcnkgYGNvbmZpZycgYW5kIGl0cyBuYW1lIGlzIG9mdGVuCisgICAgICAgICAgYE1BQ0hJTkUuaCcuCisKKyAgICAgICAgKiBUaGUgY29tbWFuZCBmaWxlIGBjb25maWd1cmUnIGFsc28gY29uc3RydWN0cyB0aGUgZmlsZQorICAgICAgICAgIGBNYWtlZmlsZScgYnkgYWRkaW5nIHNvbWUgdGV4dCB0byB0aGUgdGVtcGxhdGUgZmlsZQorICAgICAgICAgIGBNYWtlZmlsZS5pbicuICBUaGUgYWRkaXRpb25hbCB0ZXh0IGNvbWVzIGZyb20gZmlsZXMgaW4gdGhlCisgICAgICAgICAgYGNvbmZpZycgZGlyZWN0b3J5LCBuYW1lZCBgdC1UQVJHRVQnIGFuZCBgeC1IT1NUJy4gIElmIHRoZXNlCisgICAgICAgICAgZmlsZXMgZG8gbm90IGV4aXN0LCBpdCBtZWFucyBub3RoaW5nIG5lZWRzIHRvIGJlIGFkZGVkIGZvciBhCisgICAgICAgICAgZ2l2ZW4gdGFyZ2V0IG9yIGhvc3QuCisKKyAgNC4gVGhlIHN0YW5kYXJkIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZyBHTlUgQ0MgaXMgYC91c3IvbG9jYWwvbGliJy4KKyAgICAgSWYgeW91IHdhbnQgdG8gaW5zdGFsbCBpdHMgZmlsZXMgc29tZXdoZXJlIGVsc2UsIHNwZWNpZnkKKyAgICAgYC0tcHJlZml4PURJUicgd2hlbiB5b3UgcnVuIGBjb25maWd1cmUnLiAgSGVyZSBESVIgaXMgYSBkaXJlY3RvcnkKKyAgICAgbmFtZSB0byB1c2UgaW5zdGVhZCBvZiBgL3Vzci9sb2NhbCcgZm9yIGFsbCBwdXJwb3NlcyB3aXRoIG9uZQorICAgICBleGNlcHRpb246IHRoZSBkaXJlY3RvcnkgYC91c3IvbG9jYWwvaW5jbHVkZScgaXMgc2VhcmNoZWQgZm9yCisgICAgIGhlYWRlciBmaWxlcyBubyBtYXR0ZXIgd2hlcmUgeW91IGluc3RhbGwgdGhlIGNvbXBpbGVyLiAgVG8gb3ZlcnJpZGUKKyAgICAgdGhpcyBuYW1lLCB1c2UgdGhlIGAtLWxvY2FsLXByZWZpeCcgb3B0aW9uIGJlbG93LgorCisgIDUuIFNwZWNpZnkgYC0tbG9jYWwtcHJlZml4PURJUicgaWYgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIHNlYXJjaAorICAgICBkaXJlY3RvcnkgYERJUi9pbmNsdWRlJyBmb3IgbG9jYWxseSBpbnN0YWxsZWQgaGVhZGVyIGZpbGVzCisgICAgICppbnN0ZWFkKiBvZiBgL3Vzci9sb2NhbC9pbmNsdWRlJy4KKworICAgICBZb3Ugc2hvdWxkIHNwZWNpZnkgYC0tbG9jYWwtcHJlZml4JyAqb25seSogaWYgeW91ciBzaXRlIGhhcyBhCisgICAgIGRpZmZlcmVudCBjb252ZW50aW9uIChub3QgYC91c3IvbG9jYWwnKSBmb3Igd2hlcmUgdG8gcHV0CisgICAgIHNpdGUtc3BlY2lmaWMgZmlsZXMuCisKKyAgICAgKkRvIG5vdCogc3BlY2lmeSBgL3VzcicgYXMgdGhlIGAtLWxvY2FsLXByZWZpeCchICBUaGUgZGlyZWN0b3J5CisgICAgIHlvdSB1c2UgZm9yIGAtLWxvY2FsLXByZWZpeCcgKm11c3Qgbm90KiBjb250YWluIGFueSBvZiB0aGUKKyAgICAgc3lzdGVtJ3Mgc3RhbmRhcmQgaGVhZGVyIGZpbGVzLiAgSWYgaXQgZGlkIGNvbnRhaW4gdGhlbSwgY2VydGFpbgorICAgICBwcm9ncmFtcyB3b3VsZCBiZSBtaXNjb21waWxlZCAoaW5jbHVkaW5nIEdOVSBFbWFjcywgb24gY2VydGFpbgorICAgICB0YXJnZXRzKSwgYmVjYXVzZSB0aGlzIHdvdWxkIG92ZXJyaWRlIGFuZCBudWxsaWZ5IHRoZSBoZWFkZXIgZmlsZQorICAgICBjb3JyZWN0aW9ucyBtYWRlIGJ5IHRoZSBgZml4aW5jbHVkZXMnIHNjcmlwdC4KKworICA2LiBNYWtlIHN1cmUgdGhlIEJpc29uIHBhcnNlciBnZW5lcmF0b3IgaXMgaW5zdGFsbGVkLiAgKFRoaXMgaXMKKyAgICAgdW5uZWNlc3NhcnkgaWYgdGhlIEJpc29uIG91dHB1dCBmaWxlcyBgYy1wYXJzZS5jJyBhbmQgYGNleHAuYycgYXJlCisgICAgIG1vcmUgcmVjZW50IHRoYW4gYGMtcGFyc2UueScgYW5kIGBjZXhwLnknIGFuZCB5b3UgZG8gbm90IHBsYW4gdG8KKyAgICAgY2hhbmdlIHRoZSBgLnknIGZpbGVzLikKKworICAgICBCaXNvbiB2ZXJzaW9ucyBvbGRlciB0aGFuIFNlcHQgOCwgMTk4OCB3aWxsIHByb2R1Y2UgaW5jb3JyZWN0CisgICAgIG91dHB1dCBmb3IgYGMtcGFyc2UuYycuCisKKyAgNy4gSWYgeW91IGhhdmUgY2hvc2VuIGEgY29uZmlndXJhdGlvbiBmb3IgR05VIENDIHdoaWNoIHJlcXVpcmVzIG90aGVyCisgICAgIEdOVSB0b29scyAoc3VjaCBhcyBHQVMgb3IgdGhlIEdOVSBsaW5rZXIpIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkCisgICAgIHN5c3RlbSB0b29scywgaW5zdGFsbCB0aGUgcmVxdWlyZWQgdG9vbHMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeQorICAgICB1bmRlciB0aGUgbmFtZXMgYGFzJywgYGxkJyBvciB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZS4gIFRoaXMgd2lsbAorICAgICBlbmFibGUgdGhlIGNvbXBpbGVyIHRvIGZpbmQgdGhlIHByb3BlciB0b29scyBmb3IgY29tcGlsYXRpb24gb2YKKyAgICAgdGhlIHByb2dyYW0gYGVucXVpcmUnLgorCisgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZG8gc3Vic2VxdWVudCBjb21waWxhdGlvbiB1c2luZyBhIHZhbHVlIG9mCisgICAgIHRoZSBgUEFUSCcgZW52aXJvbm1lbnQgdmFyaWFibGUgc3VjaCB0aGF0IHRoZSBuZWNlc3NhcnkgR05VIHRvb2xzCisgICAgIGNvbWUgYmVmb3JlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gdG9vbHMuCisKKyAgOC4gQnVpbGQgdGhlIGNvbXBpbGVyLiAgSnVzdCB0eXBlIGBtYWtlIExBTkdVQUdFUz1jJyBpbiB0aGUgY29tcGlsZXIKKyAgICAgZGlyZWN0b3J5LgorCisgICAgIGBMQU5HVUFHRVM9Yycgc3BlY2lmaWVzIHRoYXQgb25seSB0aGUgQyBjb21waWxlciBzaG91bGQgYmUKKyAgICAgY29tcGlsZWQuICBUaGUgbWFrZWZpbGUgbm9ybWFsbHkgYnVpbGRzIGNvbXBpbGVycyBmb3IgYWxsIHRoZQorICAgICBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOyBjdXJyZW50bHksIEMsIEMrKyBhbmQgT2JqZWN0aXZlIEMuICBIb3dldmVyLAorICAgICBDIGlzIHRoZSBvbmx5IGxhbmd1YWdlIHRoYXQgaXMgc3VyZSB0byB3b3JrIHdoZW4geW91IGJ1aWxkIHdpdGgKKyAgICAgb3RoZXIgbm9uLUdOVSBDIGNvbXBpbGVycy4gIEluIGFkZGl0aW9uLCBidWlsZGluZyBhbnl0aGluZyBidXQgQworICAgICBhdCB0aGlzIHN0YWdlIGlzIGEgd2FzdGUgb2YgdGltZS4KKworICAgICBJbiBnZW5lcmFsLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGxhbmd1YWdlcyB0byBidWlsZCBieSB0eXBpbmcgdGhlCisgICAgIGFyZ3VtZW50IGBMQU5HVUFHRVM9IkxJU1QiJywgd2hlcmUgTElTVCBpcyBvbmUgb3IgbW9yZSB3b3JkcyBmcm9tCisgICAgIHRoZSBsaXN0IGBjJywgYGMrKycsIGFuZCBgb2JqZWN0aXZlLWMnLiAgSWYgeW91IGhhdmUgYW55CisgICAgIGFkZGl0aW9uYWwgR05VIGNvbXBpbGVycyBhcyBzdWJkaXJlY3RvcmllcyBvZiB0aGUgR05VIENDIHNvdXJjZQorICAgICBkaXJlY3RvcnksIHlvdSBtYXkgYWxzbyBzcGVjaWZ5IHRoZWlyIG5hbWVzIGluIHRoaXMgbGlzdC4KKworICAgICBJZ25vcmUgYW55IHdhcm5pbmdzIHlvdSBtYXkgc2VlIGFib3V0ICJzdGF0ZW1lbnQgbm90IHJlYWNoZWQiIGluCisgICAgIGBpbnNuLWVtaXQuYyc7IHRoZXkgYXJlIG5vcm1hbC4gIEFsc28sIHdhcm5pbmdzIGFib3V0ICJ1bmtub3duCisgICAgIGVzY2FwZSBzZXF1ZW5jZSIgYXJlIG5vcm1hbCBpbiBgZ2Vub3Bpbml0LmMnIGFuZCBwZXJoYXBzIHNvbWUKKyAgICAgb3RoZXIgZmlsZXMuICBMaWtld2lzZSwgeW91IHNob3VsZCBpZ25vcmUgd2FybmluZ3MgYWJvdXQgImNvbnN0YW50CisgICAgIGlzIHNvIGxhcmdlIHRoYXQgaXQgaXMgdW5zaWduZWQiIGluIGBpbnNuLWVtaXQuYycgYW5kCisgICAgIGBpbnNuLXJlY29nLmMnIGFuZCBhIHdhcm5pbmcgYWJvdXQgYSBjb21wYXJpc29uIGFsd2F5cyBiZWluZyB6ZXJvCisgICAgIGluIGBlbnF1aXJlLm8nLiAgQW55IG90aGVyIGNvbXBpbGF0aW9uIGVycm9ycyBtYXkgcmVwcmVzZW50IGJ1Z3MgaW4KKyAgICAgdGhlIHBvcnQgdG8geW91ciBtYWNoaW5lIG9yIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBzaG91bGQgYmUKKyAgICAgaW52ZXN0aWdhdGVkIGFuZCByZXBvcnRlZC4KKworICAgICBTb21lIGNvbW1lcmNpYWwgY29tcGlsZXJzIGZhaWwgdG8gY29tcGlsZSBHTlUgQ0MgYmVjYXVzZSB0aGV5IGhhdmUKKyAgICAgYnVncyBvciBsaW1pdGF0aW9ucy4gIEZvciBleGFtcGxlLCB0aGUgTWljcm9zb2Z0IGNvbXBpbGVyIGlzIHNhaWQKKyAgICAgdG8gcnVuIG91dCBvZiBtYWNybyBzcGFjZS4gIFNvbWUgVWx0cml4IGNvbXBpbGVycyBydW4gb3V0IG9mCisgICAgIGV4cHJlc3Npb24gc3BhY2U7IHRoZW4geW91IG5lZWQgdG8gYnJlYWsgdXAgdGhlIHN0YXRlbWVudCB3aGVyZQorICAgICB0aGUgcHJvYmxlbSBoYXBwZW5zLgorCisgIDkuIElmIHlvdSBhcmUgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlciwgc3RvcCBoZXJlLiAgKk5vdGUKKyAgICAgQ3Jvc3MtQ29tcGlsZXI6Oi4KKworIDEwLiBNb3ZlIHRoZSBmaXJzdC1zdGFnZSBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzIGludG8gYQorICAgICBzdWJkaXJlY3Rvcnkgd2l0aCB0aGlzIGNvbW1hbmQ6CisKKyAgICAgICAgICBtYWtlIHN0YWdlMQorCisgICAgIFRoZSBmaWxlcyBhcmUgbW92ZWQgaW50byBhIHN1YmRpcmVjdG9yeSBuYW1lZCBgc3RhZ2UxJy4gIE9uY2UKKyAgICAgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlLCB5b3UgbWF5IHdpc2ggdG8gZGVsZXRlIHRoZXNlIGZpbGVzIHdpdGgKKyAgICAgYHJtIC1yIHN0YWdlMScuCisKKyAxMS4gSWYgeW91IGhhdmUgY2hvc2VuIGEgY29uZmlndXJhdGlvbiBmb3IgR05VIENDIHdoaWNoIHJlcXVpcmVzIG90aGVyCisgICAgIEdOVSB0b29scyAoc3VjaCBhcyBHQVMgb3IgdGhlIEdOVSBsaW5rZXIpIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkCisgICAgIHN5c3RlbSB0b29scywgaW5zdGFsbCB0aGUgcmVxdWlyZWQgdG9vbHMgaW4gdGhlIGBzdGFnZTEnCisgICAgIHN1YmRpcmVjdG9yeSB1bmRlciB0aGUgbmFtZXMgYGFzJywgYGxkJyBvciB3aGF0ZXZlciBpcworICAgICBhcHByb3ByaWF0ZS4gIFRoaXMgd2lsbCBlbmFibGUgdGhlIHN0YWdlIDEgY29tcGlsZXIgdG8gZmluZCB0aGUKKyAgICAgcHJvcGVyIHRvb2xzIGluIHRoZSBmb2xsb3dpbmcgc3RhZ2UuCisKKyAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBkbyBzdWJzZXF1ZW50IGNvbXBpbGF0aW9uIHVzaW5nIGEgdmFsdWUgb2YKKyAgICAgdGhlIGBQQVRIJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdWNoIHRoYXQgdGhlIG5lY2Vzc2FyeSBHTlUgdG9vbHMKKyAgICAgY29tZSBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSB0b29scy4KKworIDEyLiBSZWNvbXBpbGUgdGhlIGNvbXBpbGVyIHdpdGggaXRzZWxmLCB3aXRoIHRoaXMgY29tbWFuZDoKKworICAgICAgICAgIG1ha2UgQ0M9InN0YWdlMS94Z2NjIC1Cc3RhZ2UxLyIgQ0ZMQUdTPSItZyAtTzIiCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgbWFraW5nIHRoZSBzdGFnZSAyIGNvbXBpbGVyLgorCisgICAgIFRoZSBjb21tYW5kIHNob3duIGFib3ZlIGJ1aWxkcyBjb21waWxlcnMgZm9yIGFsbCB0aGUgc3VwcG9ydGVkCisgICAgIGxhbmd1YWdlcy4gIElmIHlvdSBkb24ndCB3YW50IHRoZW0gYWxsLCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgIGxhbmd1YWdlcyB0byBidWlsZCBieSB0eXBpbmcgdGhlIGFyZ3VtZW50IGBMQU5HVUFHRVM9IkxJU1QiJy4gIExJU1QKKyAgICAgc2hvdWxkIGNvbnRhaW4gb25lIG9yIG1vcmUgd29yZHMgZnJvbSB0aGUgbGlzdCBgYycsIGBjKysnLAorICAgICBgb2JqZWN0aXZlLWMnLCBhbmQgYHByb3RvJy4gIFNlcGFyYXRlIHRoZSB3b3JkcyB3aXRoIHNwYWNlcy4KKyAgICAgYHByb3RvJyBzdGFuZHMgZm9yIHRoZSBwcm9ncmFtcyBgcHJvdG9pemUnIGFuZCBgdW5wcm90b2l6ZSc7IHRoZXkKKyAgICAgYXJlIG5vdCBhIHNlcGFyYXRlIGxhbmd1YWdlLCBidXQgeW91IHVzZSBgTEFOR1VBR0VTJyB0byBlbmFibGUgb3IKKyAgICAgZGlzYWJsZSB0aGVpciBpbnN0YWxsYXRpb24uCisKKyAgICAgSWYgeW91IGFyZSBnb2luZyB0byBidWlsZCB0aGUgc3RhZ2UgMyBjb21waWxlciwgdGhlbiB5b3UgbWlnaHQKKyAgICAgd2FudCB0byBidWlsZCBvbmx5IHRoZSBDIGxhbmd1YWdlIGluIHN0YWdlIDIuCisKKyAgICAgT25jZSB5b3UgaGF2ZSBidWlsdCB0aGUgc3RhZ2UgMiBjb21waWxlciwgaWYgeW91IGFyZSBzaG9ydCBvZiBkaXNrCisgICAgIHNwYWNlLCB5b3UgY2FuIGRlbGV0ZSB0aGUgc3ViZGlyZWN0b3J5IGBzdGFnZTEnLgorCisgICAgIE9uIGEgNjgwMDAgb3IgNjgwMjAgc3lzdGVtIGxhY2tpbmcgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUsIHVubGVzcworICAgICB5b3UgaGF2ZSBzZWxlY3RlZCBhIGB0bS5oJyBmaWxlIHRoYXQgZXhwZWN0cyBieSBkZWZhdWx0IHRoYXQgdGhlcmUKKyAgICAgaXMgbm8gc3VjaCBoYXJkd2FyZSwgZG8gdGhpcyBpbnN0ZWFkOgorCisgICAgICAgICAgbWFrZSBDQz0ic3RhZ2UxL3hnY2MgLUJzdGFnZTEvIiBDRkxBR1M9Ii1nIC1PMiAtbXNvZnQtZmxvYXQiCisKKyAxMy4gSWYgeW91IHdpc2ggdG8gdGVzdCB0aGUgY29tcGlsZXIgYnkgY29tcGlsaW5nIGl0IHdpdGggaXRzZWxmIG9uZQorICAgICBtb3JlIHRpbWUsIGluc3RhbGwgYW55IG90aGVyIG5lY2Vzc2FyeSBHTlUgdG9vbHMgKHN1Y2ggYXMgR0FTIG9yCisgICAgIHRoZSBHTlUgbGlua2VyKSBpbiB0aGUgYHN0YWdlMicgc3ViZGlyZWN0b3J5IGFzIHlvdSBkaWQgaW4gdGhlCisgICAgIGBzdGFnZTEnIHN1YmRpcmVjdG9yeSwgdGhlbiBkbyB0aGlzOgorCisgICAgICAgICAgbWFrZSBzdGFnZTIKKyAgICAgICAgICBtYWtlIENDPSJzdGFnZTIveGdjYyAtQnN0YWdlMi8iIENGTEFHUz0iLWcgLU8yIgorCisgICAgIFRoaXMgaXMgY2FsbGVkIG1ha2luZyB0aGUgc3RhZ2UgMyBjb21waWxlci4gIEFzaWRlIGZyb20gdGhlIGAtQicKKyAgICAgb3B0aW9uLCB0aGUgY29tcGlsZXIgb3B0aW9ucyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgd2hlbiB5b3UgbWFkZQorICAgICB0aGUgc3RhZ2UgMiBjb21waWxlci4gIEJ1dCB0aGUgYExBTkdVQUdFUycgb3B0aW9uIG5lZWQgbm90IGJlIHRoZQorICAgICBzYW1lLiAgVGhlIGNvbW1hbmQgc2hvd24gYWJvdmUgYnVpbGRzIGNvbXBpbGVycyBmb3IgYWxsIHRoZQorICAgICBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOyBpZiB5b3UgZG9uJ3Qgd2FudCB0aGVtIGFsbCwgeW91IGNhbiBzcGVjaWZ5CisgICAgIHRoZSBsYW5ndWFnZXMgdG8gYnVpbGQgYnkgdHlwaW5nIHRoZSBhcmd1bWVudCBgTEFOR1VBR0VTPSJMSVNUIicsCisgICAgIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICBJZiB5b3UgZG8gbm90IGhhdmUgdG8gaW5zdGFsbCBhbnkgYWRkaXRpb25hbCBHTlUgdG9vbHMsIHlvdSBtYXkKKyAgICAgdXNlIHRoZSBjb21tYW5kCisKKyAgICAgICAgICBtYWtlIGJvb3RzdHJhcCBMQU5HVUFHRVM9TEFOR1VBR0UtTElTVCBCT09UX0NGTEFHUz1PUFRJT04tTElTVAorCisgICAgIGluc3RlYWQgb2YgbWFraW5nIGBzdGFnZTEnLCBgc3RhZ2UyJywgYW5kIHBlcmZvcm1pbmcgdGhlIHR3bworICAgICBjb21waWxlciBidWlsZHMuCisKKyAxNC4gVGhlbiBjb21wYXJlIHRoZSBsYXRlc3Qgb2JqZWN0IGZpbGVzIHdpdGggdGhlIHN0YWdlIDIgb2JqZWN0CisgICAgIGZpbGVzLS10aGV5IG91Z2h0IHRvIGJlIGlkZW50aWNhbCwgYXNpZGUgZnJvbSB0aW1lIHN0YW1wcyAoaWYgYW55KS4KKworICAgICBPbiBzb21lIHN5c3RlbXMsIG1lYW5pbmdmdWwgY29tcGFyaXNvbiBvZiBvYmplY3QgZmlsZXMgaXMKKyAgICAgaW1wb3NzaWJsZTsgdGhleSBhbHdheXMgYXBwZWFyICJkaWZmZXJlbnQuIiAgVGhpcyBpcyBjdXJyZW50bHkKKyAgICAgdHJ1ZSBvbiBTb2xhcmlzIGFuZCBzb21lIHN5c3RlbXMgdGhhdCB1c2UgRUxGIG9iamVjdCBmaWxlIGZvcm1hdC4KKyAgICAgT24gc29tZSB2ZXJzaW9ucyBvZiBJcml4IG9uIFNHSSBtYWNoaW5lcyBhbmQgREVDIFVuaXggKE9TRi8xKSBvbgorICAgICBBbHBoYSBzeXN0ZW1zLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb21wYXJlIHRoZSBmaWxlcyB3aXRob3V0CisgICAgIHNwZWNpZnlpbmcgYC1zYXZlLXRlbXBzJzsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbmRpdmlkdWFsCisgICAgIHN5c3RlbXMgYWJvdmUgdG8gc2VlIGlmIHlvdSBnZXQgY29tcGFyaXNvbiBmYWlsdXJlcy4gIFlvdSBtYXkgaGF2ZQorICAgICBzaW1pbGFyIHByb2JsZW1zIG9uIG90aGVyIHN5c3RlbXMuCisKKyAgICAgVXNlIHRoaXMgY29tbWFuZCB0byBjb21wYXJlIHRoZSBmaWxlczoKKworICAgICAgICAgIG1ha2UgY29tcGFyZQorCisgICAgIFRoaXMgd2lsbCBtZW50aW9uIGFueSBvYmplY3QgZmlsZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBzdGFnZSAyIGFuZAorICAgICBzdGFnZSAzLiAgQW55IGRpZmZlcmVuY2UsIG5vIG1hdHRlciBob3cgaW5ub2N1b3VzLCBpbmRpY2F0ZXMgdGhhdAorICAgICB0aGUgc3RhZ2UgMiBjb21waWxlciBoYXMgY29tcGlsZWQgR05VIENDIGluY29ycmVjdGx5LCBhbmQgaXMKKyAgICAgdGhlcmVmb3JlIGEgcG90ZW50aWFsbHkgc2VyaW91cyBidWcgd2hpY2ggeW91IHNob3VsZCBpbnZlc3RpZ2F0ZQorICAgICBhbmQgcmVwb3J0LgorCisgICAgIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90IHB1dCB0aW1lIHN0YW1wcyBpbiB0aGUgb2JqZWN0IGZpbGVzLCB0aGVuCisgICAgIHRoaXMgaXMgYSBmYXN0ZXIgd2F5IHRvIGNvbXBhcmUgdGhlbSAodXNpbmcgdGhlIEJvdXJuZSBzaGVsbCk6CisKKyAgICAgICAgICBmb3IgZmlsZSBpbiAqLm87IGRvCisgICAgICAgICAgY21wICRmaWxlIHN0YWdlMi8kZmlsZQorICAgICAgICAgIGRvbmUKKworICAgICBJZiB5b3UgaGF2ZSBidWlsdCB0aGUgY29tcGlsZXIgd2l0aCB0aGUgYC1tbm8tbWlwcy10ZmlsZScgb3B0aW9uIG9uCisgICAgIE1JUFMgbWFjaGluZXMsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvbXBhcmUgdGhlIGZpbGVzLgorCisgMTUuIEluc3RhbGwgdGhlIGNvbXBpbGVyIGRyaXZlciwgdGhlIGNvbXBpbGVyJ3MgcGFzc2VzIGFuZCBydW4tdGltZQorICAgICBzdXBwb3J0IHdpdGggYG1ha2UgaW5zdGFsbCcuICBVc2UgdGhlIHNhbWUgdmFsdWUgZm9yIGBDQycsCisgICAgIGBDRkxBR1MnIGFuZCBgTEFOR1VBR0VTJyB0aGF0IHlvdSB1c2VkIHdoZW4gY29tcGlsaW5nIHRoZSBmaWxlcworICAgICB0aGF0IGFyZSBiZWluZyBpbnN0YWxsZWQuICBPbmUgcmVhc29uIHRoaXMgaXMgbmVjZXNzYXJ5IGlzIHRoYXQKKyAgICAgc29tZSB2ZXJzaW9ucyBvZiBNYWtlIGhhdmUgYnVncyBhbmQgcmVjb21waWxlIGZpbGVzIGdyYXR1aXRvdXNseQorICAgICB3aGVuIHlvdSBkbyB0aGlzIHN0ZXAuICBJZiB5b3UgdXNlIHRoZSBzYW1lIHZhcmlhYmxlIHZhbHVlcywgdGhvc2UKKyAgICAgZmlsZXMgd2lsbCBiZSByZWNvbXBpbGVkIHByb3Blcmx5LgorCisgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBidWlsdCB0aGUgc3RhZ2UgMiBjb21waWxlciwgeW91IGNhbiB1c2UKKyAgICAgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgICAgICAgICAgbWFrZSBpbnN0YWxsIENDPSJzdGFnZTIveGdjYyAtQnN0YWdlMi8iIENGTEFHUz0iLWcgLU8iIExBTkdVQUdFUz0iTElTVCIKKworICAgICBUaGlzIGNvcGllcyB0aGUgZmlsZXMgYGNjMScsIGBjcHAnIGFuZCBgbGliZ2NjLmEnIHRvIGZpbGVzIGBjYzEnLAorICAgICBgY3BwJyBhbmQgYGxpYmdjYy5hJyBpbiB0aGUgZGlyZWN0b3J5CisgICAgIGAvdXNyL2xvY2FsL2xpYi9nY2MtbGliL1RBUkdFVC9WRVJTSU9OJywgd2hpY2ggaXMgd2hlcmUgdGhlCisgICAgIGNvbXBpbGVyIGRyaXZlciBwcm9ncmFtIGxvb2tzIGZvciB0aGVtLiAgSGVyZSBUQVJHRVQgaXMgdGhlIHRhcmdldAorICAgICBtYWNoaW5lIHR5cGUgc3BlY2lmaWVkIHdoZW4geW91IHJhbiBgY29uZmlndXJlJywgYW5kIFZFUlNJT04gaXMKKyAgICAgdGhlIHZlcnNpb24gbnVtYmVyIG9mIEdOVSBDQy4gIFRoaXMgbmFtaW5nIHNjaGVtZSBwZXJtaXRzIHZhcmlvdXMKKyAgICAgdmVyc2lvbnMgYW5kL29yIGNyb3NzLWNvbXBpbGVycyB0byBjb2V4aXN0LgorCisgICAgIFRoaXMgYWxzbyBjb3BpZXMgdGhlIGRyaXZlciBwcm9ncmFtIGB4Z2NjJyBpbnRvCisgICAgIGAvdXNyL2xvY2FsL2Jpbi9nY2MnLCBzbyB0aGF0IGl0IGFwcGVhcnMgaW4gdHlwaWNhbCBleGVjdXRpb24KKyAgICAgc2VhcmNoIHBhdGhzLgorCisgICAgIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBjb21tYW5kIGNhdXNlcyByZWNvbXBpbGF0aW9uIG9mIHNvbWUgZmlsZXMuCisgICAgIFRoaXMgaXMgdXN1YWxseSBkdWUgdG8gYnVncyBpbiBgbWFrZScuICBZb3Ugc2hvdWxkIGVpdGhlciBpZ25vcmUKKyAgICAgdGhpcyBwcm9ibGVtLCBvciB1c2UgR05VIE1ha2UuCisKKyAgICAgKldhcm5pbmc6IHRoZXJlIGlzIGEgYnVnIGluIGBhbGxvY2EnIGluIHRoZSBTdW4gbGlicmFyeS4gIFRvIGF2b2lkCisgICAgIHRoaXMgYnVnLCBiZSBzdXJlIHRvIGluc3RhbGwgdGhlIGV4ZWN1dGFibGVzIG9mIEdOVSBDQyB0aGF0IHdlcmUKKyAgICAgY29tcGlsZWQgYnkgR05VIENDLiAgKFRoYXQgaXMsIHRoZSBleGVjdXRhYmxlcyBmcm9tIHN0YWdlIDIgb3IgMywKKyAgICAgbm90IHN0YWdlIDEuKSAgVGhleSB1c2UgYGFsbG9jYScgYXMgYSBidWlsdC1pbiBmdW5jdGlvbiBhbmQgbmV2ZXIKKyAgICAgdGhlIG9uZSBpbiB0aGUgbGlicmFyeS4qCisKKyAgICAgKEl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIGluc3RhbGwgR05VIENDIGV4ZWN1dGFibGVzIGZyb20gc3RhZ2UgMgorICAgICBvciAzLCBzaW5jZSB0aGV5IHVzdWFsbHkgcnVuIGZhc3RlciB0aGFuIHRoZSBvbmVzIGNvbXBpbGVkIHdpdGgKKyAgICAgc29tZSBvdGhlciBjb21waWxlci4pCisKKyAxNi4gSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBDKyssIGl0J3MgbGlrZWx5IHRoYXQgeW91IG5lZWQgdG8gYWxzbworICAgICBpbnN0YWxsIHRoZSBsaWJnKysgZGlzdHJpYnV0aW9uLiAgSXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBmcm9tIHRoZQorICAgICBzYW1lIHBsYWNlIHdoZXJlIHlvdSBnb3QgdGhlIEdOVSBDIGRpc3RyaWJ1dGlvbi4gIEp1c3QgYXMgR05VIEMKKyAgICAgZG9lcyBub3QgZGlzdHJpYnV0ZSBhIEMgcnVudGltZSBsaWJyYXJ5LCBpdCBhbHNvIGRvZXMgbm90IGluY2x1ZGUKKyAgICAgYSBDKysgcnVuLXRpbWUgbGlicmFyeS4gIEFsbCBJL08gZnVuY3Rpb25hbGl0eSwgc3BlY2lhbCBjbGFzcworICAgICBsaWJyYXJpZXMsIGV0Yy4sIGFyZSBhdmFpbGFibGUgaW4gdGhlIGxpYmcrKyBkaXN0cmlidXRpb24uCisKK0NvbmZpZ3VyYXRpb25zIFN1cHBvcnRlZCBieSBHTlUgQ0MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSGVyZSBhcmUgdGhlIHBvc3NpYmxlIENQVSB0eXBlczoKKworICAgICAxNzUwYSwgYTI5aywgYWxwaGEsIGFybSwgY04sIGNsaXBwZXIsIGRzcDE2eHgsIGVseHNpLCBoODMwMCwKKyAgICAgaHBwYTEuMCwgaHBwYTEuMSwgaTM3MCwgaTM4NiwgaTQ4NiwgaTU4NiwgaTg2MCwgaTk2MCwgbTY4MDAwLCBtNjhrLAorICAgICBtODhrLCBtaXBzLCBtaXBzZWwsIG1pcHM2NCwgbWlwczY0ZWwsIG5zMzJrLCBwb3dlcnBjLCBwb3dlcnBjbGUsCisgICAgIHB5cmFtaWQsIHJvbXAsIHJzNjAwMCwgc2gsIHNwYXJjLCBzcGFyY2xpdGUsIHNwYXJjNjQsIHZheCwgd2UzMmsuCisKKyAgIEhlcmUgYXJlIHRoZSByZWNvZ25pemVkIGNvbXBhbnkgbmFtZXMuICBBcyB5b3UgY2FuIHNlZSwgY3VzdG9tYXJ5CithYmJyZXZpYXRpb25zIGFyZSB1c2VkIHJhdGhlciB0aGFuIHRoZSBsb25nZXIgb2ZmaWNpYWwgbmFtZXMuCisKKyAgICAgYWNvcm4sIGFsbGlhbnQsIGFsdG9zLCBhcG9sbG8sIGF0dCwgYnVsbCwgY2JtLCBjb252ZXJnZW50LCBjb252ZXgsCisgICAgIGNyZHMsIGRlYywgZGcsIGRvbHBoaW4sIGVseHNpLCBlbmNvcmUsIGhhcnJpcywgaGl0YWNoaSwgaHAsIGlibSwKKyAgICAgaW50ZXJncmFwaCwgaXNpLCBtaXBzLCBtb3Rvcm9sYSwgbmNyLCBuZXh0LCBucywgb21yb24sIHBsZXh1cywKKyAgICAgc2VxdWVudCwgc2dpLCBzb255LCBzdW4sIHR0aSwgdW5pY29tLCB3cnMuCisKKyAgIFRoZSBjb21wYW55IG5hbWUgaXMgbWVhbmluZ2Z1bCBvbmx5IHRvIGRpc2FtYmlndWF0ZSB3aGVuIHRoZSByZXN0IG9mCit0aGUgaW5mb3JtYXRpb24gc3VwcGxpZWQgaXMgaW5zdWZmaWNpZW50LiAgWW91IGNhbiBvbWl0IGl0LCB3cml0aW5nCitqdXN0IGBDUFUtU1lTVEVNJywgaWYgaXQgaXMgbm90IG5lZWRlZC4gIEZvciBleGFtcGxlLCBgdmF4LXVsdHJpeDQuMicKK2lzIGVxdWl2YWxlbnQgdG8gYHZheC1kZWMtdWx0cml4NC4yJy4KKworICAgSGVyZSBpcyBhIGxpc3Qgb2Ygc3lzdGVtIHR5cGVzOgorCisgICAgIDM4NmJzZCwgYWl4LCBhY2lzLCBhbWlnYWRvcywgYW9zLCBhb3V0LCBib3N4LCBic2QsIGNsaXgsIGNvZmYsCisgICAgIGN0aXgsIGN4dXgsIGRndXgsIGR5bml4LCBlYm1vbiwgZWNvZmYsIGVsZiwgZXNpeCwgZnJlZWJzZCwgaG1zLAorICAgICBnZW5peCwgZ251LCBnbnUvbGludXgsIGhpdXgsIGhwdXgsIGlyaXMsIGlyaXgsIGlzYywgbHVuYSwgbHlueG9zLAorICAgICBtYWNoLCBtaW5peCwgbXNkb3MsIG12cywgbmV0YnNkLCBuZXdzb3MsIG5pbmR5LCBucywgb3NmLCBvc2Zyb3NlLAorICAgICBwdHgsIHJpc2NpeCwgcmlzY29zLCBydHUsIHNjbywgc2ltLCBzb2xhcmlzLCBzdW5vcywgc3ltLCBzeXN2LAorICAgICB1ZGksIHVsdHJpeCwgdW5pY29zLCB1bmlwbHVzLCB1bm9zLCB2bXMsIHZzdGEsIHZ4d29ya3MsIHdpbm50LAorICAgICB4ZW5peC4KKworWW91IGNhbiBvbWl0IHRoZSBzeXN0ZW0gdHlwZTsgdGhlbiBgY29uZmlndXJlJyBndWVzc2VzIHRoZSBvcGVyYXRpbmcKK3N5c3RlbSBmcm9tIHRoZSBDUFUgYW5kIGNvbXBhbnkuCisKKyAgIFlvdSBjYW4gYWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIHN5c3RlbSB0eXBlOyB0aGlzIG1heSBvciBtYXkgbm90CittYWtlIGEgZGlmZmVyZW5jZS4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHdyaXRlIGBic2Q0LjMnIG9yIGBic2Q0LjQnIHRvCitkaXN0aW5ndWlzaCB2ZXJzaW9ucyBvZiBCU0QuICBJbiBwcmFjdGljZSwgdGhlIHZlcnNpb24gbnVtYmVyIGlzIG1vc3QKK25lZWRlZCBmb3IgYHN5c3YzJyBhbmQgYHN5c3Y0Jywgd2hpY2ggYXJlIG9mdGVuIHRyZWF0ZWQgZGlmZmVyZW50bHkuCisKKyAgIElmIHlvdSBzcGVjaWZ5IGFuIGltcG9zc2libGUgY29tYmluYXRpb24gc3VjaCBhcyBgaTg2MC1kZy12bXMnLCB0aGVuCit5b3UgbWF5IGdldCBhbiBlcnJvciBtZXNzYWdlIGZyb20gYGNvbmZpZ3VyZScsIG9yIGl0IG1heSBpZ25vcmUgcGFydCBvZgordGhlIGluZm9ybWF0aW9uIGFuZCBkbyB0aGUgYmVzdCBpdCBjYW4gd2l0aCB0aGUgcmVzdC4gIGBjb25maWd1cmUnCithbHdheXMgcHJpbnRzIHRoZSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGFsdGVybmF0aXZlIHRoYXQgaXQgdXNlZC4gIEdOVQorQ0MgZG9lcyBub3Qgc3VwcG9ydCBhbGwgcG9zc2libGUgYWx0ZXJuYXRpdmVzLgorCisgICBPZnRlbiBhIHBhcnRpY3VsYXIgbW9kZWwgb2YgbWFjaGluZSBoYXMgYSBuYW1lLiAgTWFueSBtYWNoaW5lIG5hbWVzCithcmUgcmVjb2duaXplZCBhcyBhbGlhc2VzIGZvciBDUFUvY29tcGFueSBjb21iaW5hdGlvbnMuICBUaHVzLCB0aGUKK21hY2hpbmUgbmFtZSBgc3VuMycsIG1lbnRpb25lZCBhYm92ZSwgaXMgYW4gYWxpYXMgZm9yIGBtNjhrLXN1bicuCitTb21ldGltZXMgd2UgYWNjZXB0IGEgY29tcGFueSBuYW1lIGFzIGEgbWFjaGluZSBuYW1lLCB3aGVuIHRoZSBuYW1lIGlzCitwb3B1bGFybHkgdXNlZCBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUuICBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIGtub3duCittYWNoaW5lIG5hbWVzOgorCisgICAgIDMzMDAsIDNiMSwgM2JOLCA3MzAwLCBhbHRvczMwNjgsIGFsdG9zLCBhcG9sbG82OCwgYXR0LTczMDAsCisgICAgIGJhbGFuY2UsIGNvbnZleC1jTiwgY3JkcywgZGVjc3RhdGlvbi0zMTAwLCBkZWNzdGF0aW9uLCBkZWx0YSwKKyAgICAgZW5jb3JlLCBmeDI4MDAsIGdtaWNybywgaHA3Tk4sIGhwOE5OLCBocDlrMk5OLCBocDlrM05OLCBocDlrN05OLAorICAgICBocDlrOE5OLCBpcmlzNGQsIGlyaXMsIGlzaTY4LCBtMzIzMCwgbWFnbnVtLCBtZXJsaW4sIG1pbmlmcmFtZSwKKyAgICAgbW1heCwgbmV3cy0zNjAwLCBuZXdzODAwLCBuZXdzLCBuZXh0LCBwYmQsIHBjNTMyLCBwbWF4LCBwb3dlcnBjLAorICAgICBwb3dlcnBjbGUsIHBzMiwgcmlzYy1uZXdzLCBydHBjLCBzdW4yLCBzdW4zODZpLCBzdW4zODYsIHN1bjMsCisgICAgIHN1bjQsIHN5bW1ldHJ5LCB0b3dlci0zMiwgdG93ZXIuCisKK1JlbWVtYmVyIHRoYXQgYSBtYWNoaW5lIG5hbWUgc3BlY2lmaWVzIGJvdGggdGhlIGNwdSB0eXBlIGFuZCB0aGUgY29tcGFueQorbmFtZS4gIElmIHlvdSB3YW50IHRvIGluc3RhbGwgeW91ciBvd24gaG9tZW1hZGUgY29uZmlndXJhdGlvbiBmaWxlcywKK3lvdSBjYW4gdXNlIGBsb2NhbCcgYXMgdGhlIGNvbXBhbnkgbmFtZSB0byBhY2Nlc3MgdGhlbS4gIElmIHlvdSB1c2UKK2NvbmZpZ3VyYXRpb24gYENQVS1sb2NhbCcsIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgd2l0aG91dCB0aGUgY3B1IHByZWZpeAoraXMgdXNlZCB0byBmb3JtIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgbmFtZXMuCisKKyAgIFRodXMsIGlmIHlvdSBzcGVjaWZ5IGBtNjhrLWxvY2FsJywgY29uZmlndXJhdGlvbiB1c2VzIGZpbGVzCitgbTY4ay5tZCcsIGBsb2NhbC5oJywgYG02OGsuYycsIGB4bS1sb2NhbC5oJywgYHQtbG9jYWwnLCBhbmQgYHgtbG9jYWwnLAorYWxsIGluIHRoZSBkaXJlY3RvcnkgYGNvbmZpZy9tNjhrJy4KKworICAgSGVyZSBpcyBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIHNwZWNpYWwgdHJlYXRtZW50IG9yCitzcGVjaWFsIHRoaW5ncyB5b3UgbXVzdCBrbm93OgorCitgMTc1MGEtKi0qJworICAgICBNSUwtU1RELTE3NTBBIHByb2Nlc3NvcnMuCisKKyAgICAgU3RhcnRpbmcgd2l0aCBHQ0MgMi42LjEsIHRoZSBNSUwtU1RELTE3NTBBIGNyb3NzIGNvbmZpZ3VyYXRpb24gbm8KKyAgICAgbG9uZ2VyIHN1cHBvcnRzIHRoZSBUZWt0cm9uaXggQXNzZW1ibGVyLCBidXQgaW5zdGVhZCBwcm9kdWNlcworICAgICBvdXRwdXQgZm9yIGBhczE3NTAnLCBhbiBhc3NlbWJsZXIvbGlua2VyIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VCisgICAgIFB1YmxpYyBMaWNlbnNlIGZvciB0aGUgMTc1MEEuIENvbnRhY3QgKmtlbGxvZ2dAc3BhY2Uub3RuLmRhc2EuZGUqCisgICAgIGZvciBtb3JlIGRldGFpbHMgb24gb2J0YWluaW5nIGBhczE3NTAnLiAgQSBzaW1pbGFybHkgbGljZW5zZWQKKyAgICAgc2ltdWxhdG9yIGZvciB0aGUgMTc1MEEgaXMgYXZhaWxhYmxlIGZyb20gc2FtZSBhZGRyZXNzLgorCisgICAgIFlvdSBzaG91bGQgaWdub3JlIGEgZmF0YWwgZXJyb3IgZHVyaW5nIHRoZSBidWlsZGluZyBvZiBsaWJnY2MKKyAgICAgKGxpYmdjYyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUgMTc1MEEuKQorCisgICAgIFRoZSBgYXMxNzUwJyBhc3NlbWJsZXIgcmVxdWlyZXMgdGhlIGZpbGUgYG1zMTc1MC5pbmMnLCB3aGljaCBpcworICAgICBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IGBjb25maWcvMTc1MGEnLgorCisgICAgIEdOVSBDQyBwcm9kdWNlZCB0aGUgc2FtZSBzZWN0aW9ucyBhcyB0aGUgRmFpcmNoaWxkIEY5NDUwIEMKKyAgICAgQ29tcGlsZXIsIG5hbWVseToKKworICAgIGBOb3JtYWwnCisgICAgICAgICAgVGhlIHByb2dyYW0gY29kZSBzZWN0aW9uLgorCisgICAgYFN0YXRpYycKKyAgICAgICAgICBUaGUgcmVhZC93cml0ZSAoUkFNKSBkYXRhIHNlY3Rpb24uCisKKyAgICBgS29uc3QnCisgICAgICAgICAgVGhlIHJlYWQtb25seSAoUk9NKSBjb25zdGFudHMgc2VjdGlvbi4KKworICAgIGBJbml0JworICAgICAgICAgIEluaXRpYWxpemF0aW9uIHNlY3Rpb24gKGNvZGUgdG8gY29weSBLUkVMIHRvIFNSRUwpLgorCisgICAgIFRoZSBzbWFsbGVzdCBhZGRyZXNzYWJsZSB1bml0IGlzIDE2IGJpdHMgKEJJVFNfUEVSX1VOSVQgaXMgMTYpLgorICAgICBUaGlzIG1lYW5zIHRoYXQgdHlwZSBgY2hhcicgaXMgcmVwcmVzZW50ZWQgd2l0aCBhIDE2LWJpdCB3b3JkIHBlcgorICAgICBjaGFyYWN0ZXIuICBUaGUgMTc1MEEncyAiTG9hZC9TdG9yZSBVcHBlci9Mb3dlciBCeXRlIiBpbnN0cnVjdGlvbnMKKyAgICAgYXJlIG5vdCB1c2VkIGJ5IEdOVSBDQy4KKworYGFscGhhLSotb3NmMScKKyAgICAgU3lzdGVtcyB1c2luZyBwcm9jZXNzb3JzIHRoYXQgaW1wbGVtZW50IHRoZSBERUMgQWxwaGEgYXJjaGl0ZWN0dXJlCisgICAgIGFuZCBhcmUgcnVubmluZyB0aGUgREVDIFVuaXggKE9TRi8xKSBvcGVyYXRpbmcgc3lzdGVtLCBmb3IgZXhhbXBsZQorICAgICB0aGUgREVDIEFscGhhIEFYUCBzeXN0ZW1zLiAgKFZNUyBvbiB0aGUgQWxwaGEgaXMgbm90IGN1cnJlbnRseQorICAgICBzdXBwb3J0ZWQgYnkgR05VIENDLikKKworICAgICBHTlUgQ0Mgd3JpdGVzIGEgYC52ZXJzdGFtcCcgZGlyZWN0aXZlIHRvIHRoZSBhc3NlbWJsZXIgb3V0cHV0IGZpbGUKKyAgICAgdW5sZXNzIGl0IGlzIGJ1aWx0IGFzIGEgY3Jvc3MtY29tcGlsZXIuICBJdCBnZXRzIHRoZSB2ZXJzaW9uIHRvCisgICAgIHVzZSBmcm9tIHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGUgYC91c3IvaW5jbHVkZS9zdGFtcC5oJy4gIElmIHlvdQorICAgICBpbnN0YWxsIGEgbmV3IHZlcnNpb24gb2YgREVDIFVuaXgsIHlvdSBzaG91bGQgcmVidWlsZCBHQ0MgdG8gcGljaworICAgICB1cCB0aGUgbmV3IHZlcnNpb24gc3RhbXAuCisKKyAgICAgTm90ZSB0aGF0IHNpbmNlIHRoZSBBbHBoYSBpcyBhIDY0LWJpdCBhcmNoaXRlY3R1cmUsCisgICAgIGNyb3NzLWNvbXBpbGVycyBmcm9tIDMyLWJpdCBtYWNoaW5lcyB3aWxsIG5vdCBnZW5lcmF0ZSBjb2RlIGFzCisgICAgIGVmZmljaWVudCBhcyB0aGF0IGdlbmVyYXRlZCB3aGVuIHRoZSBjb21waWxlciBpcyBydW5uaW5nIG9uIGEKKyAgICAgNjQtYml0IG1hY2hpbmUgYmVjYXVzZSBtYW55IG9wdGltaXphdGlvbnMgdGhhdCBkZXBlbmQgb24gYmVpbmcKKyAgICAgYWJsZSB0byByZXByZXNlbnQgYSB3b3JkIG9uIHRoZSB0YXJnZXQgaW4gYW4gaW50ZWdyYWwgdmFsdWUgb24gdGhlCisgICAgIGhvc3QgY2Fubm90IGJlIHBlcmZvcm1lZC4gIEJ1aWxkaW5nIGNyb3NzLWNvbXBpbGVycyBvbiB0aGUgQWxwaGEKKyAgICAgZm9yIDMyLWJpdCBtYWNoaW5lcyBoYXMgb25seSBiZWVuIHRlc3RlZCBpbiBhIGZldyBjYXNlcyBhbmQgbWF5CisgICAgIG5vdCB3b3JrIHByb3Blcmx5LgorCisgICAgIGBtYWtlIGNvbXBhcmUnIG1heSBmYWlsIG9uIG9sZCB2ZXJzaW9ucyBvZiBERUMgVW5peCB1bmxlc3MgeW91IGFkZAorICAgICBgLXNhdmUtdGVtcHMnIHRvIGBDRkxBR1MnLiAgT24gdGhlc2Ugc3lzdGVtcywgdGhlIG5hbWUgb2YgdGhlCisgICAgIGFzc2VtYmxlciBpbnB1dCBmaWxlIGlzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGZpbGUsIGFuZCB0aGF0IG1ha2VzCisgICAgIGNvbXBhcmlzb24gZmFpbCBpZiBpdCBkaWZmZXJzIGJldHdlZW4gdGhlIGBzdGFnZTEnIGFuZCBgc3RhZ2UyJworICAgICBjb21waWxhdGlvbnMuICBUaGUgb3B0aW9uIGAtc2F2ZS10ZW1wcycgZm9yY2VzIGEgZml4ZWQgbmFtZSB0byBiZQorICAgICB1c2VkIGZvciB0aGUgYXNzZW1ibGVyIGlucHV0IGZpbGUsIGluc3RlYWQgb2YgYSByYW5kb21seSBjaG9zZW4KKyAgICAgbmFtZSBpbiBgL3RtcCcuICBEbyBub3QgYWRkIGAtc2F2ZS10ZW1wcycgdW5sZXNzIHRoZSBjb21wYXJpc29ucworICAgICBmYWlsIHdpdGhvdXQgdGhhdCBvcHRpb24uICBJZiB5b3UgYWRkIGAtc2F2ZS10ZW1wcycsIHlvdSB3aWxsIGhhdmUKKyAgICAgdG8gbWFudWFsbHkgZGVsZXRlIHRoZSBgLmknIGFuZCBgLnMnIGZpbGVzIGFmdGVyIGVhY2ggc2VyaWVzIG9mCisgICAgIGNvbXBpbGF0aW9ucy4KKworICAgICBHTlUgQ0Mgbm93IHN1cHBvcnRzIGJvdGggdGhlIG5hdGl2ZSAoRUNPRkYpIGRlYnVnZ2luZyBmb3JtYXQgdXNlZAorICAgICBieSBEQlggYW5kIEdEQiBhbmQgYW4gZW5jYXBzdWxhdGVkIFNUQUJTIGZvcm1hdCBmb3IgdXNlIG9ubHkgd2l0aAorICAgICBHREIuICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgdGhlIGAtLXdpdGgtc3RhYnMnIG9wdGlvbiBvZgorICAgICBgY29uZmlndXJlJyBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBmb3JtYXRzIGFuZCBob3cgdG8KKyAgICAgc2VsZWN0IHRoZW0uCisKKyAgICAgVGhlcmUgaXMgYSBidWcgaW4gREVDJ3MgYXNzZW1ibGVyIHRoYXQgcHJvZHVjZXMgaW5jb3JyZWN0IGxpbmUKKyAgICAgbnVtYmVycyBmb3IgRUNPRkYgZm9ybWF0IHdoZW4gdGhlIGAuYWxpZ24nIGRpcmVjdGl2ZSBpcyB1c2VkLiAgVG8KKyAgICAgd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCBHTlUgQ0Mgd2lsbCBub3QgZW1pdCBzdWNoIGFsaWdubWVudAorICAgICBkaXJlY3RpdmVzIHdoaWxlIHdyaXRpbmcgRUNPRkYgZm9ybWF0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBldmVuCisgICAgIGlmIG9wdGltaXphdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGhhcyB0aGUKKyAgICAgdmVyeSB1bmRlc2lyYWJsZSBzaWRlLWVmZmVjdCB0aGF0IGNvZGUgYWRkcmVzc2VzIHdoZW4gYC1PJyBpcworICAgICBzcGVjaWZpZWQgYXJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgYC1nJyBpcyBhbHNvCisgICAgIHNwZWNpZmllZC4KKworICAgICBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yLCBzcGVjaWZ5IGAtZ3N0YWJzKycgYW5kIHVzZSBHREIgaW5zdGVhZCBvZgorICAgICBEQlguICBERUMgaXMgbm93IGF3YXJlIG9mIHRoaXMgcHJvYmxlbSB3aXRoIHRoZSBhc3NlbWJsZXIgYW5kCisgICAgIGhvcGVzIHRvIHByb3ZpZGUgYSBmaXggc2hvcnRseS4KKworYGFybScKKyAgICAgQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBBUk0tZmFtaWx5IHByb2Nlc3NvcnMuICBUaGVzZSBhcmUgb2Z0ZW4KKyAgICAgdXNlZCBpbiBlbWJlZGRlZCBhcHBsaWNhdGlvbnMuICBUaGVyZSBhcmUgbm8gc3RhbmRhcmQgVW5peAorICAgICBjb25maWd1cmF0aW9ucy4gIFRoaXMgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgYmFzaWMKKyAgICAgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIGFuZCB3aWxsIHByb2R1Y2UgYS5vdXQgZm9ybWF0IG9iamVjdCBtb2R1bGVzLgorCisgICAgIFlvdSBtYXkgbmVlZCB0byBtYWtlIGEgdmFyaWFudCBvZiB0aGUgZmlsZSBgYXJtLmgnIGZvciB5b3VyCisgICAgIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KKworYGFybS0qLXJpc2NpeCcKKyAgICAgVGhlIEFSTTIgb3IgQVJNMyBwcm9jZXNzb3IgcnVubmluZyBSSVNDIGlYLCBBY29ybidzIHBvcnQgb2YgQlNECisgICAgIFVuaXguICBJZiB5b3UgYXJlIHJ1bm5pbmcgYSB2ZXJzaW9uIG9mIFJJU0MgaVggcHJpb3IgdG8gMS4yIHRoZW4KKyAgICAgeW91IG11c3Qgc3BlY2lmeSB0aGUgdmVyc2lvbiBudW1iZXIgZHVyaW5nIGNvbmZpZ3VyYXRpb24uICBOb3RlCisgICAgIHRoYXQgdGhlIGFzc2VtYmxlciBzaGlwcGVkIHdpdGggUklTQyBpWCBkb2VzIG5vdCBzdXBwb3J0IHN0YWJzCisgICAgIGRlYnVnZ2luZyBpbmZvcm1hdGlvbjsgYSBuZXcgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibGVyLCB3aXRoIHN0YWJzCisgICAgIHN1cHBvcnQgaW5jbHVkZWQsIGlzIG5vdyBhdmFpbGFibGUgZnJvbSBBY29ybi4KKworYGEyOWsnCisgICAgIEFNRCBBbTI5ay1mYW1pbHkgcHJvY2Vzc29ycy4gIFRoZXNlIGFyZSBub3JtYWxseSB1c2VkIGluIGVtYmVkZGVkCisgICAgIGFwcGxpY2F0aW9ucy4gIFRoZXJlIGFyZSBubyBzdGFuZGFyZCBVbml4IGNvbmZpZ3VyYXRpb25zLiAgVGhpcworICAgICBjb25maWd1cmF0aW9uIGNvcnJlc3BvbmRzIHRvIEFNRCdzIHN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgYW5kCisgICAgIGJpbmFyeSBpbnRlcmZhY2UgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCBvdGhlciAyOWsgdG9vbHMuCisKKyAgICAgWW91IG1heSBuZWVkIHRvIG1ha2UgYSB2YXJpYW50IG9mIHRoZSBmaWxlIGBhMjlrLmgnIGZvciB5b3VyCisgICAgIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KKworYGEyOWstKi1ic2QnCisgICAgIEFNRCBBbTI5MDUwIHVzZWQgaW4gYSBzeXN0ZW0gcnVubmluZyBhIHZhcmlhbnQgb2YgQlNEIFVuaXguCisKK2BkZWNzdGF0aW9uLSonCisgICAgIERFQ3N0YXRpb25zIGNhbiBzdXBwb3J0IHRocmVlIGRpZmZlcmVudCBwZXJzb25hbGl0aWVzOiBVbHRyaXgsIERFQworICAgICBPU0YvMSwgYW5kIE9TRi9yb3NlLiAgVG8gY29uZmlndXJlIEdDQyBmb3IgdGhlc2UgcGxhdGZvcm1zIHVzZSB0aGUKKyAgICAgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zOgorCisgICAgYGRlY3N0YXRpb24tdWx0cml4JworICAgICAgICAgIFVsdHJpeCBjb25maWd1cmF0aW9uLgorCisgICAgYGRlY3N0YXRpb24tb3NmMScKKyAgICAgICAgICBEZWMncyB2ZXJzaW9uIG9mIE9TRi8xLgorCisgICAgYGRlY3N0YXRpb24tb3Nmcm9zZScKKyAgICAgICAgICBPcGVuIFNvZnR3YXJlIEZvdW5kYXRpb24gcmVmZXJlbmNlIHBvcnQgb2YgT1NGLzEgd2hpY2ggdXNlcworICAgICAgICAgIHRoZSBPU0Yvcm9zZSBvYmplY3QgZmlsZSBmb3JtYXQgaW5zdGVhZCBvZiBFQ09GRi4gIE5vcm1hbGx5LAorICAgICAgICAgIHlvdSB3b3VsZCBub3Qgc2VsZWN0IHRoaXMgY29uZmlndXJhdGlvbi4KKworICAgICBUaGUgTUlQUyBDIGNvbXBpbGVyIG5lZWRzIHRvIGJlIHRvbGQgdG8gaW5jcmVhc2UgaXRzIHRhYmxlIHNpemUKKyAgICAgZm9yIHN3aXRjaCBzdGF0ZW1lbnRzIHdpdGggdGhlIGAtV2YsLVhOZzE1MDAnIG9wdGlvbiBpbiBvcmRlciB0bworICAgICBjb21waWxlIGBjcC9wYXJzZS5jJy4gIElmIHlvdSB1c2UgdGhlIGAtTzInIG9wdGltaXphdGlvbiBvcHRpb24sCisgICAgIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGAtT2xpbWl0IDMwMDAnLiAgQm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZQorICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbiB0aGUgYE1ha2VmaWxlJyB0aGF0IHRoZSBzaGVsbCBzY3JpcHQKKyAgICAgYGNvbmZpZ3VyZScgYnVpbGRzLiAgSWYgeW91IG92ZXJyaWRlIHRoZSBgQ0MnIG1ha2UgdmFyaWFibGUgYW5kCisgICAgIHVzZSB0aGUgTUlQUyBjb21waWxlcnMsIHlvdSBtYXkgbmVlZCB0byBhZGQgYC1XZiwtWE5nMTUwMCAtT2xpbWl0CisgICAgIDMwMDAnLgorCitgZWx4c2ktZWx4c2ktYnNkJworICAgICBUaGUgRWx4c2kncyBDIGNvbXBpbGVyIGhhcyBrbm93biBsaW1pdGF0aW9ucyB0aGF0IHByZXZlbnQgaXQgZnJvbQorICAgICBjb21waWxpbmcgR05VIEMuICBQbGVhc2UgY29udGFjdCBgbXJzQGN5Z251cy5jb20nIGZvciBtb3JlIGRldGFpbHMuCisKK2Bkc3AxNnh4JworICAgICBBIHBvcnQgdG8gdGhlIEFUJlQgRFNQMTYxMCBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKworYGg4MzAwLSotKicKKyAgICAgVGhlIGNhbGxpbmcgY29udmVudGlvbiBhbmQgc3RydWN0dXJlIGxheW91dCBoYXMgY2hhbmdlZCBpbiByZWxlYXNlCisgICAgIDIuNi4gIEFsbCBjb2RlIG11c3QgYmUgcmVjb21waWxlZC4gIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gbm93CisgICAgIHBhc3NlcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGluIGZ1bmN0aW9uIGNhbGxzIGluIHJlZ2lzdGVycy4KKyAgICAgU3RydWN0dXJlcyBhcmUgbm8gbG9uZ2VyIGEgbXVsdGlwbGUgb2YgMiBieXRlcy4KKworYGhwcGEqLSotKicKKyAgICAgVGhlcmUgYXJlIHR3byB2YXJpYW50cyBvZiB0aGlzIENQVSwgY2FsbGVkIDEuMCBhbmQgMS4xLCB3aGljaCBoYXZlCisgICAgIGRpZmZlcmVudCBtYWNoaW5lIGRlc2NyaXB0aW9ucy4gIFlvdSBtdXN0IHVzZSB0aGUgcmlnaHQgb25lIGZvcgorICAgICB5b3VyIG1hY2hpbmUuICBBbGwgN05OIG1hY2hpbmVzIGFuZCA4TjcgbWFjaGluZXMgdXNlIDEuMSwgd2hpbGUKKyAgICAgYWxsIG90aGVyIDhOTiBtYWNoaW5lcyB1c2UgMS4wLgorCisgICAgIFRoZSBlYXNpZXN0IHdheSB0byBoYW5kbGUgdGhpcyBwcm9ibGVtIGlzIHRvIHVzZSBgY29uZmlndXJlIGhwTk5OJworICAgICBvciBgY29uZmlndXJlIGhwTk5OLWhwdXgnLCB3aGVyZSBOTk4gaXMgdGhlIG1vZGVsIG51bWJlciBvZiB0aGUKKyAgICAgbWFjaGluZS4gIFRoZW4gYGNvbmZpZ3VyZScgd2lsbCBmaWd1cmUgb3V0IGlmIHRoZSBtYWNoaW5lIGlzIGEgMS4wCisgICAgIG9yIDEuMS4gIFVzZSBgdW5hbWUgLWEnIHRvIGZpbmQgb3V0IHRoZSBtb2RlbCBudW1iZXIgb2YgeW91cgorICAgICBtYWNoaW5lLgorCisgICAgIGAtZycgZG9lcyBub3Qgd29yayBvbiBIUC1VWCwgc2luY2UgdGhhdCBzeXN0ZW0gdXNlcyBhIHBlY3VsaWFyCisgICAgIGRlYnVnZ2luZyBmb3JtYXQgd2hpY2ggR05VIENDIGRvZXMgbm90IGtub3cgYWJvdXQuICBIb3dldmVyLCBgLWcnCisgICAgIHdpbGwgd29yayBpZiB5b3UgYWxzbyB1c2UgR0FTIGFuZCBHREIgaW4gY29uanVuY3Rpb24gd2l0aCBHQ0MuICBXZQorICAgICBoaWdobHkgcmVjb21tZW5kIHVzaW5nIEdBUyBmb3IgYWxsIEhQLVBBIGNvbmZpZ3VyYXRpb25zLgorCisgICAgIFlvdSBzaG91bGQgYmUgdXNpbmcgR0FTLTIuMyAob3IgbGF0ZXIpIGFsb25nIHdpdGggR0RCLTQuMTIgKG9yCisgICAgIGxhdGVyKS4gIFRoZXNlIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhbGwgdGhlIHRyYWRpdGlvbmFsIEdOVSBmdHAKKyAgICAgYXJjaGl2ZSBzaXRlcy4KKworICAgICBCdWlsZCBHQVMgYW5kIGluc3RhbGwgdGhlIHJlc3VsdGluZyBiaW5hcnkgYXM6CisKKyAgICAgICAgICAvdXNyL2xvY2FsL2xpYi9nY2MtbGliL0NPTkZJR1VSQVRJT04vR0NDVkVSU0lPTi9hcworCisgICAgIHdoZXJlIENPTkZJR1VSQVRJT04gaXMgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSAocGVyaGFwcworICAgICBgaHBOTk4taHB1eCcpIGFuZCBHQ0NWRVJTSU9OIGlzIHRoZSBHTlUgQ0MgdmVyc2lvbiBudW1iZXIuICBEbworICAgICB0aGlzICpiZWZvcmUqIHN0YXJ0aW5nIHRoZSBidWlsZCBwcm9jZXNzLCBvdGhlcndpc2UgeW91IHdpbGwgZ2V0CisgICAgIGVycm9ycyBmcm9tIHRoZSBIUFVYIGFzc2VtYmxlciB3aGlsZSBidWlsZGluZyBgbGliZ2NjMi5hJy4gIFRoZQorICAgICBjb21tYW5kCisKKyAgICAgICAgICBtYWtlIGluc3RhbGwtZGlyCisKKyAgICAgd2lsbCBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBkaXJlY3RvcnkgaGllcmFyY2h5IHNvIHlvdSBjYW4gaW5zdGFsbAorICAgICBHQVMgYmVmb3JlIGJ1aWxkaW5nIEdDQy4KKworICAgICBUbyBlbmFibGUgZGVidWdnaW5nLCBjb25maWd1cmUgR05VIENDIHdpdGggdGhlIGAtLXdpdGgtZ251LWFzJworICAgICBvcHRpb24gYmVmb3JlIGJ1aWxkaW5nLgorCisgICAgIEl0IGhhcyBiZWVuIHJlcG9ydGVkIHRoYXQgR05VIENDIHByb2R1Y2VzIGludmFsaWQgYXNzZW1ibHkgY29kZSBmb3IKKyAgICAgMS4xIG1hY2hpbmVzIHJ1bm5pbmcgSFAtVVggOC4wMiB3aGVuIHVzaW5nIHRoZSBIUCBhc3NlbWJsZXIuCisgICAgIFR5cGljYWxseSB0aGUgZXJyb3JzIGxvb2sgbGlrZSB0aGlzOgorICAgICAgICAgIGFzOiBidWcucyBAbGluZSMxNSBbZXJyIzEwNjBdCisgICAgICAgICAgICBBcmd1bWVudCAwIG9yIDIgaW4gRkFSRyB1cHBlcgorICAgICAgICAgICAgICAgICAgIC0gbG9va2FoZWFkID0gQVJHVzE9RlIsUlROVkFMPUdSCisgICAgICAgICAgYXM6IGZvby5zIEBsaW5lIzI4IFtlcnIjMTA2MF0KKyAgICAgICAgICAgIEFyZ3VtZW50IDAgb3IgMiBpbiBGQVJHIHVwcGVyCisgICAgICAgICAgICAgICAgICAgLSBsb29rYWhlYWQgPSBBUkdXMT1GUgorCisgICAgIFlvdSBjYW4gY2hlY2sgdGhlIHZlcnNpb24gb2YgSFAtVVggeW91IGFyZSBydW5uaW5nIGJ5IGV4ZWN1dGluZworICAgICB0aGUgY29tbWFuZCBgdW5hbWUgLXInLiAgIElmIHlvdSBhcmUgaW5kZWVkIHJ1bm5pbmcgSFAtVVggOC4wMiBvbgorICAgICBhIFBBIGFuZCB1c2luZyB0aGUgSFAgYXNzZW1ibGVyIHRoZW4gY29uZmlndXJlIEdDQyB3aXRoCisgICAgICJocE5OTi1ocHV4OC4wMiIuCisKK2BpMzcwLSotKicKKyAgICAgVGhpcyBwb3J0IGlzIHZlcnkgcHJlbGltaW5hcnkgYW5kIGhhcyBtYW55IGtub3duIGJ1Z3MuICBXZSBob3BlIHRvCisgICAgIGhhdmUgYSBoaWdoZXItcXVhbGl0eSBwb3J0IGZvciB0aGlzIG1hY2hpbmUgc29vbi4KKworYGkzODYtKi1saW51eG9sZGxkJworICAgICBVc2UgdGhpcyBjb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIGEub3V0IGJpbmFyaWVzIG9uIExpbnV4IGlmIHlvdQorICAgICBkbyBub3QgaGF2ZSBnYXMvYmludXRpbHMgdmVyc2lvbiAyLjUuMiBvciBsYXRlciBpbnN0YWxsZWQuIFRoaXMgaXMKKyAgICAgYW4gb2Jzb2xldGUgY29uZmlndXJhdGlvbi4KKworYGkzODYtKi1saW51eGFvdXQnCisgICAgIFVzZSB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgYS5vdXQgYmluYXJpZXMgb24gTGludXguIFRoaXMKKyAgICAgY29uZmlndXJhdGlvbiBpcyBiZWluZyBzdXBlcnNlZGVkLiBZb3UgbXVzdCB1c2UgZ2FzL2JpbnV0aWxzCisgICAgIHZlcnNpb24gMi41LjIgb3IgbGF0ZXIuCisKK2BpMzg2LSotbGludXgnCisgICAgIFVzZSB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgRUxGIGJpbmFyaWVzIG9uIExpbnV4LiAgWW91IG11c3QKKyAgICAgdXNlIGdhcy9iaW51dGlscyB2ZXJzaW9uIDIuNS4yIG9yIGxhdGVyLgorCitgaTM4Ni0qLXNjbycKKyAgICAgQ29tcGlsYXRpb24gd2l0aCBSQ0MgaXMgcmVjb21tZW5kZWQuICBBbHNvLCBpdCBtYXkgYmUgYSBnb29kIGlkZWEKKyAgICAgdG8gbGluayB3aXRoIEdOVSBtYWxsb2MgaW5zdGVhZCBvZiB0aGUgbWFsbG9jIHRoYXQgY29tZXMgd2l0aCB0aGUKKyAgICAgc3lzdGVtLgorCitgaTM4Ni0qLXNjbzMuMnY0JworICAgICBVc2UgdGhpcyBjb25maWd1cmF0aW9uIGZvciBTQ08gcmVsZWFzZSAzLjIgdmVyc2lvbiA0LgorCitgaTM4Ni0qLWlzYycKKyAgICAgSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGxpbmsgd2l0aCBHTlUgbWFsbG9jIGluc3RlYWQgb2YgdGhlCisgICAgIG1hbGxvYyB0aGF0IGNvbWVzIHdpdGggdGhlIHN5c3RlbS4KKworICAgICBJbiBJU0MgdmVyc2lvbiA0LjEsIGBzZWQnIGNvcmUgZHVtcHMgd2hlbiBidWlsZGluZyBgZGVkdWNlZC5oJy4KKyAgICAgVXNlIHRoZSB2ZXJzaW9uIG9mIGBzZWQnIGZyb20gdmVyc2lvbiA0LjAuCisKK2BpMzg2LSotZXNpeCcKKyAgICAgSXQgbWF5IGJlIGdvb2QgaWRlYSB0byBsaW5rIHdpdGggR05VIG1hbGxvYyBpbnN0ZWFkIG9mIHRoZSBtYWxsb2MKKyAgICAgdGhhdCBjb21lcyB3aXRoIHRoZSBzeXN0ZW0uCisKK2BpMzg2LWlibS1haXgnCisgICAgIFlvdSBuZWVkIHRvIHVzZSBHQVMgdmVyc2lvbiAyLjEgb3IgbGF0ZXIsIGFuZCBhbmQgTEQgZnJvbSBHTlUKKyAgICAgYmludXRpbHMgdmVyc2lvbiAyLjIgb3IgbGF0ZXIuCisKK2BpMzg2LXNlcXVlbnQtYnNkJworICAgICBHbyB0byB0aGUgQmVya2VsZXkgdW5pdmVyc2UgYmVmb3JlIGNvbXBpbGluZy4gIEluIGFkZGl0aW9uLCB5b3UKKyAgICAgcHJvYmFibHkgbmVlZCB0byBjcmVhdGUgYSBmaWxlIG5hbWVkIGBzdHJpbmcuaCcgY29udGFpbmluZyBqdXN0CisgICAgIG9uZSBsaW5lOiBgI2luY2x1ZGUgPHN0cmluZ3MuaD4nLgorCitgaTM4Ni1zZXF1ZW50LXB0eDEqJworICAgICBTZXF1ZW50IERZTklYL3B0eCAxLnguCisKK2BpMzg2LXNlcXVlbnQtcHR4MionCisgICAgIFNlcXVlbnQgRFlOSVgvcHR4IDIueC4KKworYGkzODYtc3VuLXN1bm9zNCcKKyAgICAgWW91IG1heSBmaW5kIHRoYXQgeW91IG5lZWQgYW5vdGhlciB2ZXJzaW9uIG9mIEdOVSBDQyB0byBiZWdpbgorICAgICBib290c3RyYXBwaW5nIHdpdGgsIHNpbmNlIHRoZSBjdXJyZW50IHZlcnNpb24gd2hlbiBidWlsdCB3aXRoIHRoZQorICAgICBzeXN0ZW0ncyBvd24gY29tcGlsZXIgc2VlbXMgdG8gZ2V0IGFuIGluZmluaXRlIGxvb3AgY29tcGlsaW5nIHBhcnQKKyAgICAgb2YgYGxpYmdjYzIuYycuICBHTlUgQ0MgdmVyc2lvbiAyIGNvbXBpbGVkIHdpdGggR05VIENDIChhbnkKKyAgICAgdmVyc2lvbikgc2VlbXMgbm90IHRvIGhhdmUgdGhpcyBwcm9ibGVtLgorCisgICAgIFNlZSAqTm90ZSBTdW4gSW5zdGFsbDo6LCBmb3IgaW5mb3JtYXRpb24gb24gaW5zdGFsbGluZyBHTlUgQ0Mgb24KKyAgICAgU3VuIHN5c3RlbXMuCisKK2BpWzM0NV04Ni0qLXdpbm50My41JworICAgICBUaGlzIHZlcnNpb24gcmVxdWlyZXMgYSBHQVMgdGhhdCBoYXMgbm90IGxldCBiZWVuIHJlbGVhc2VkLiAgVW50aWwKKyAgICAgaXQgaXMsIHlvdSBjYW4gZ2V0IGEgcHJlYnVpbHQgYmluYXJ5IHZlcnNpb24gdmlhIGFub255bW91cyBmdHAgZnJvbQorICAgICBgY3Mud2FzaGluZ3Rvbi5lZHU6cHViL2duYXQnIG9yIGBjcy5ueXUuZWR1OnB1Yi9nbmF0Jy4gWW91IG11c3QKKyAgICAgYWxzbyB1c2UgdGhlIE1pY3Jvc29mdCBoZWFkZXIgZmlsZXMgZnJvbSB0aGUgV2luZG93cyBOVCAzLjUgU0RLLgorICAgICBGaW5kIHRoZXNlIG9uIHRoZSBDRFJPTSBpbiB0aGUgYC9tc3Rvb2xzL2gnIGRpcmVjdG9yeSBkYXRlZAorICAgICA5LzQvOTQuICBZb3UgbXVzdCB1c2UgYSBmaXhlZCB2ZXJzaW9uIG9mIE1pY3Jvc29mdCBsaW5rZXIgbWFkZQorICAgICBlc3BlY2lhbGx5IGZvciBOVCAzLjUsIHdoaWNoIGlzIGFsc28gaXMgYXZhaWxhYmxlIG9uIHRoZSBOVCAzLjUKKyAgICAgU0RLIENEUk9NLiAgSWYgeW91IGRvIG5vdCBoYXZlIHRoaXMgbGlua2VyLCBjYW4geW91IGFsc28gdXNlIHRoZQorICAgICBsaW5rZXIgZnJvbSBWaXN1YWwgQy9DKysgMS4wIG9yIDIuMC4KKworICAgICBJbnN0YWxsaW5nIEdOVSBDQyBmb3IgTlQgYnVpbGRzIGEgd3JhcHBlciBsaW5rZXIsIGNhbGxlZCBgbGQuZXhlJywKKyAgICAgd2hpY2ggbWltaWNzIHRoZSBiZWhhdmlvdXIgb2YgVW5peCBgbGQnIGluIHRoZSBzcGVjaWZpY2F0aW9uIG9mCisgICAgIGxpYnJhcmllcyAoYC1MJyBhbmQgYC1sJykuICBgbGQuZXhlJyBsb29rcyBmb3IgYm90aCBVbml4IGFuZAorICAgICBNaWNyb3NvZnQgbmFtZWQgbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5IGAtbGZvbycsCisgICAgIGBsZC5leGUnIHdpbGwgbG9vayBmaXJzdCBmb3IgYGxpYmZvby5hJyBhbmQgdGhlbiBmb3IgYGZvby5saWInLgorCisgICAgIFlvdSBtYXkgaW5zdGFsbCBHTlUgQ0MgZm9yIFdpbmRvd3MgTlQgaW4gb25lIG9mIHR3byB3YXlzLAorICAgICBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgeW91IGhhdmUgYSBVbml4LWxpa2Ugc2hlbGwgYW5kIHZhcmlvdXMKKyAgICAgVW5peC1saWtlIHV0aWxpdGllcy4KKworICAgICAgIDEuIElmIHlvdSBkbyBub3QgaGF2ZSBhIFVuaXgtbGlrZSBzaGVsbCBhbmQgZmV3IFVuaXgtbGlrZQorICAgICAgICAgIHV0aWxpdGllcywgeW91IHdpbGwgdXNlIGEgRE9TIHN0eWxlIGJhdGNoIHNjcmlwdCBjYWxsZWQKKyAgICAgICAgICBgY29uZmlndXJlLmJhdCcuICBJbnZva2UgaXQgYXMgYGNvbmZpZ3VyZSB3aW5udCcgZnJvbSBhbgorICAgICAgICAgIE1TRE9TIGNvbnNvbGUgd2luZG93IG9yIGZyb20gdGhlIHByb2dyYW0gbWFuYWdlciBkaWFsb2cgYm94LgorICAgICAgICAgIGBjb25maWd1cmUuYmF0JyBhc3N1bWVzIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGFuZCBoYXZlCisgICAgICAgICAgaW4geW91ciBwYXRoIGEgVW5peC1saWtlIGBzZWQnIHByb2dyYW0gd2hpY2ggaXMgdXNlZCB0bworICAgICAgICAgIGNyZWF0ZSBhIHdvcmtpbmcgYE1ha2VmaWxlJyBmcm9tIGBNYWtlZmlsZS5pbicuCisKKyAgICAgICAgICBgTWFrZWZpbGUnIHVzZXMgdGhlIE1pY3Jvc29mdCBObWFrZSBwcm9ncmFtIG1haW50ZW5hbmNlCisgICAgICAgICAgdXRpbGl0eSBhbmQgdGhlIFZpc3VhbCBDL0MrKyBWOC4wMCBjb21waWxlciB0byBidWlsZCBHTlUgQ0MuCisgICAgICAgICAgWW91IG5lZWQgb25seSBoYXZlIHRoZSB1dGlsaXRpZXMgYHNlZCcgYW5kIGB0b3VjaCcgdG8gdXNlCisgICAgICAgICAgdGhpcyBpbnN0YWxsYXRpb24gbWV0aG9kLCB3aGljaCBvbmx5IGF1dG9tYXRpY2FsbHkgYnVpbGRzIHRoZQorICAgICAgICAgIGNvbXBpbGVyIGl0c2VsZi4gIFlvdSBtdXN0IHRoZW4gZXhhbWluZSB3aGF0IGBmaXhpbmMud2lubnQnCisgICAgICAgICAgZG9lcywgZWRpdCB0aGUgaGVhZGVyIGZpbGVzIGJ5IGhhbmQgYW5kIGJ1aWxkIGBsaWJnY2MuYScKKyAgICAgICAgICBtYW51YWxseS4KKworICAgICAgIDIuIFRoZSBzZWNvbmQgdHlwZSBvZiBpbnN0YWxsYXRpb24gYXNzdW1lcyB5b3UgYXJlIHJ1bm5pbmcgYQorICAgICAgICAgIFVuaXgtbGlrZSBzaGVsbCwgaGF2ZSBhIGNvbXBsZXRlIHN1aXRlIG9mIFVuaXgtbGlrZSB1dGlsaXRpZXMKKyAgICAgICAgICBpbiB5b3VyIHBhdGgsIGFuZCBoYXZlIGEgcHJldmlvdXMgdmVyc2lvbiBvZiBHTlUgQ0MgYWxyZWFkeQorICAgICAgICAgIGluc3RhbGxlZCwgZWl0aGVyIHRocm91Z2ggYnVpbGRpbmcgaXQgdmlhIHRoZSBhYm92ZQorICAgICAgICAgIGluc3RhbGxhdGlvbiBtZXRob2Qgb3IgYWNxdWlyaW5nIGEgcHJlLWJ1aWx0IGJpbmFyeS4gIEluIHRoaXMKKyAgICAgICAgICBjYXNlLCB1c2UgdGhlIGBjb25maWd1cmUnIHNjcmlwdCBpbiB0aGUgbm9ybWFsIGZhc2hpb24uCisKK2BpODYwLWludGVsLW9zZjEnCisgICAgIFRoaXMgaXMgdGhlIFBhcmFnb24uICBJZiB5b3UgaGF2ZSB2ZXJzaW9uIDEuMCBvZiB0aGUgb3BlcmF0aW5nCisgICAgIHN5c3RlbSwgeW91IG5lZWQgdG8gdGFrZSBzcGVjaWFsIHN0ZXBzIHRvIGJ1aWxkIEdOVSBDQyBkdWUgdG8KKyAgICAgcGVjdWxpYXJpdGllcyBvZiB0aGUgc3lzdGVtLiAgTmV3ZXIgc3lzdGVtIHZlcnNpb25zIGhhdmUgbm8KKyAgICAgcHJvYmxlbS4gIFNlZSB0aGUgc2VjdGlvbiBgSW5zdGFsbGF0aW9uIFByb2JsZW1zJyBpbiB0aGUgR05VIENDCisgICAgIE1hbnVhbC4KKworYCotbHlueC1seW54b3MnCisgICAgIEx5bnhPUyAyLjIgYW5kIGVhcmxpZXIgY29tZXMgd2l0aCBHTlUgQ0MgMS54IGFscmVhZHkgaW5zdGFsbGVkIGFzCisgICAgIGAvYmluL2djYycuICBZb3Ugc2hvdWxkIGNvbXBpbGUgd2l0aCB0aGlzIGluc3RlYWQgb2YgYC9iaW4vY2MnLgorICAgICBZb3UgY2FuIHRlbGwgR05VIENDIHRvIHVzZSB0aGUgR05VIGFzc2VtYmxlciBhbmQgbGlua2VyLCBieQorICAgICBzcGVjaWZ5aW5nIGAtLXdpdGgtZ251LWFzIC0td2l0aC1nbnUtbGQnIHdoZW4gY29uZmlndXJpbmcuICBUaGVzZQorICAgICB3aWxsIHByb2R1Y2UgQ09GRiBmb3JtYXQgb2JqZWN0IGZpbGVzIGFuZCBleGVjdXRhYmxlczsgIG90aGVyd2lzZQorICAgICBHTlUgQ0Mgd2lsbCB1c2UgdGhlIGluc3RhbGxlZCB0b29scywgd2hpY2ggcHJvZHVjZSBhLm91dCBmb3JtYXQKKyAgICAgZXhlY3V0YWJsZXMuCisKK2BtNjgwMDAtaHAtYnNkJworICAgICBIUCA5MDAwIHNlcmllcyAyMDAgcnVubmluZyBCU0QuICBOb3RlIHRoYXQgdGhlIEMgY29tcGlsZXIgdGhhdAorICAgICBjb21lcyB3aXRoIHRoaXMgc3lzdGVtIGNhbm5vdCBjb21waWxlIEdOVSBDQzsgY29udGFjdAorICAgICBgbGF3QGNzLnV0YWguZWR1JyB0byBnZXQgYmluYXJpZXMgb2YgR05VIENDIGZvciBib290c3RyYXBwaW5nLgorCitgbTY4ay1hbHRvcycKKyAgICAgQWx0b3MgMzA2OC4gIFlvdSBtdXN0IHVzZSB0aGUgR05VIGFzc2VtYmxlciwgbGlua2VyIGFuZCBkZWJ1Z2dlci4KKyAgICAgQWxzbywgeW91IG11c3QgZml4IGEga2VybmVsIGJ1Zy4gIERldGFpbHMgaW4gdGhlIGZpbGUKKyAgICAgYFJFQURNRS5BTFRPUycuCisKK2BtNjhrLWF0dC1zeXN2JworICAgICBBVCZUIDNiMSwgYS5rLmEuIDczMDAgUEMuICBTcGVjaWFsIHByb2NlZHVyZXMgYXJlIG5lZWRlZCB0bworICAgICBjb21waWxlIEdOVSBDQyB3aXRoIHRoaXMgbWFjaGluZSdzIHN0YW5kYXJkIEMgY29tcGlsZXIsIGR1ZSB0bworICAgICBidWdzIGluIHRoYXQgY29tcGlsZXIuICBZb3UgY2FuIGJvb3RzdHJhcCBpdCBtb3JlIGVhc2lseSB3aXRoCisgICAgIHByZXZpb3VzIHZlcnNpb25zIG9mIEdOVSBDQyBpZiB5b3UgaGF2ZSB0aGVtLgorCisgICAgIEluc3RhbGxpbmcgR05VIENDIG9uIHRoZSAzYjEgaXMgZGlmZmljdWx0IGlmIHlvdSBkbyBub3QgYWxyZWFkeQorICAgICBoYXZlIEdOVSBDQyBydW5uaW5nLCBkdWUgdG8gYnVncyBpbiB0aGUgaW5zdGFsbGVkIEMgY29tcGlsZXIuCisgICAgIEhvd2V2ZXIsIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIG1pZ2h0IHdvcmsuICBXZSBhcmUgdW5hYmxlIHRvCisgICAgIHRlc3QgaXQuCisKKyAgICAgICAxLiBDb21tZW50IG91dCB0aGUgYCNpbmNsdWRlICJjb25maWcuaCInIGxpbmUgb24gbGluZSAzNyBvZgorICAgICAgICAgIGBjY2NwLmMnIGFuZCBkbyBgbWFrZSBjcHAnLiAgVGhpcyBtYWtlcyBhIHByZWxpbWluYXJ5IHZlcnNpb24KKyAgICAgICAgICBvZiBHTlUgY3BwLgorCisgICAgICAgMi4gU2F2ZSB0aGUgb2xkIGAvbGliL2NwcCcgYW5kIGNvcHkgdGhlIHByZWxpbWluYXJ5IEdOVSBjcHAgdG8KKyAgICAgICAgICB0aGF0IGZpbGUgbmFtZS4KKworICAgICAgIDMuIFVuZG8geW91ciBjaGFuZ2UgaW4gYGNjY3AuYycsIG9yIHJlaW5zdGFsbCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICB2ZXJzaW9uLCBhbmQgZG8gYG1ha2UgY3BwJyBhZ2Fpbi4KKworICAgICAgIDQuIENvcHkgdGhpcyBmaW5hbCB2ZXJzaW9uIG9mIEdOVSBjcHAgaW50byBgL2xpYi9jcHAnLgorCisgICAgICAgNS4gUmVwbGFjZSBldmVyeSBvY2N1cnJlbmNlIG9mIGBvYnN0YWNrX2ZyZWUnIGluIHRoZSBmaWxlCisgICAgICAgICAgYHRyZWUuYycgd2l0aCBgX29ic3RhY2tfZnJlZScuCisKKyAgICAgICA2LiBSdW4gYG1ha2UnIHRvIGdldCB0aGUgZmlyc3Qtc3RhZ2UgR05VIENDLgorCisgICAgICAgNy4gUmVpbnN0YWxsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIGAvbGliL2NwcCcuCisKKyAgICAgICA4LiBOb3cgeW91IGNhbiBjb21waWxlIEdOVSBDQyB3aXRoIGl0c2VsZiBhbmQgaW5zdGFsbCBpdCBpbiB0aGUKKyAgICAgICAgICBub3JtYWwgZmFzaGlvbi4KKworYG02OGstYnVsbC1zeXN2JworICAgICBCdWxsIERQWC8yIHNlcmllcyAyMDAgYW5kIDMwMCB3aXRoIEJPUy0yLjAwLjQ1IHVwIHRvIEJPUy0yLjAxLiBHTlUKKyAgICAgQ0Mgd29ya3MgZWl0aGVyIHdpdGggbmF0aXZlIGFzc2VtYmxlciBvciBHTlUgYXNzZW1ibGVyLiBZb3UgY2FuIHVzZQorICAgICBHTlUgYXNzZW1ibGVyIHdpdGggbmF0aXZlIGNvZmYgZ2VuZXJhdGlvbiBieSBwcm92aWRpbmcKKyAgICAgYC0td2l0aC1nbnUtYXMnIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IG9yIHVzZSBHTlUgYXNzZW1ibGVyIHdpdGgKKyAgICAgZGJ4LWluLWNvZmYgZW5jYXBzdWxhdGlvbiBieSBwcm92aWRpbmcgYC0td2l0aC1nbnUtYXMgLS1zdGFicycuCisgICAgIEZvciBhbnkgcHJvYmxlbSB3aXRoIG5hdGl2ZSBhc3NlbWJsZXIgb3IgZm9yIGF2YWlsYWJpbGl0eSBvZiB0aGUKKyAgICAgRFBYLzIgcG9ydCBvZiBHQVMsIGNvbnRhY3QgYEYuUGllcnJlc3RlZ3V5QGZyY2wuYnVsbC5mcicuCisKK2BtNjhrLWNyZHMtdW5veCcKKyAgICAgVXNlIGBjb25maWd1cmUgdW5vcycgZm9yIGJ1aWxkaW5nIG9uIFVub3MuCisKKyAgICAgVGhlIFVub3MgYXNzZW1ibGVyIGlzIG5hbWVkIGBjYXNtJyBpbnN0ZWFkIG9mIGBhcycuICBGb3Igc29tZQorICAgICBzdHJhbmdlIHJlYXNvbiBsaW5raW5nIGAvYmluL2FzJyB0byBgL2Jpbi9jYXNtJyBjaGFuZ2VzIHRoZQorICAgICBiZWhhdmlvciwgYW5kIGRvZXMgbm90IHdvcmsuICBTbywgd2hlbiBpbnN0YWxsaW5nIEdOVSBDQywgeW91CisgICAgIHNob3VsZCBpbnN0YWxsIHRoZSBmb2xsb3dpbmcgc2NyaXB0IGFzIGBhcycgaW4gdGhlIHN1YmRpcmVjdG9yeQorICAgICB3aGVyZSB0aGUgcGFzc2VzIG9mIEdDQyBhcmUgaW5zdGFsbGVkOgorCisgICAgICAgICAgIyEvYmluL3NoCisgICAgICAgICAgY2FzbSAkKgorCisgICAgIFRoZSBkZWZhdWx0IFVub3MgbGlicmFyeSBpcyBuYW1lZCBgbGlidW5vcy5hJyBpbnN0ZWFkIG9mIGBsaWJjLmEnLgorICAgICBUbyBhbGxvdyBHTlUgQ0MgdG8gZnVuY3Rpb24sIGVpdGhlciBjaGFuZ2UgYWxsIHJlZmVyZW5jZXMgdG8KKyAgICAgYC1sYycgaW4gYGdjYy5jJyB0byBgLWx1bm9zJyBvciBsaW5rIGAvbGliL2xpYmMuYScgdG8KKyAgICAgYC9saWIvbGlidW5vcy5hJy4KKworICAgICBXaGVuIGNvbXBpbGluZyBHTlUgQ0Mgd2l0aCB0aGUgc3RhbmRhcmQgY29tcGlsZXIsIHRvIG92ZXJjb21lIGJ1Z3MKKyAgICAgaW4gdGhlIHN1cHBvcnQgb2YgYGFsbG9jYScsIGRvIG5vdCB1c2UgYC1PJyB3aGVuIG1ha2luZyBzdGFnZSAyLgorICAgICBUaGVuIHVzZSB0aGUgc3RhZ2UgMiBjb21waWxlciB3aXRoIGAtTycgdG8gbWFrZSB0aGUgc3RhZ2UgMworICAgICBjb21waWxlci4gIFRoaXMgY29tcGlsZXIgd2lsbCBoYXZlIHRoZSBzYW1lIGNoYXJhY3RlcmlzdGljcyBhcyB0aGUKKyAgICAgdXN1YWwgc3RhZ2UgMiBjb21waWxlciBvbiBvdGhlciBzeXN0ZW1zLiAgVXNlIGl0IHRvIG1ha2UgYSBzdGFnZSA0CisgICAgIGNvbXBpbGVyIGFuZCBjb21wYXJlIHRoYXQgd2l0aCBzdGFnZSAzIHRvIHZlcmlmeSBwcm9wZXIKKyAgICAgY29tcGlsYXRpb24uCisKKyAgICAgKFBlcmhhcHMgc2ltcGx5IGRlZmluaW5nIGBBTExPQ0EnIGluIGB4LWNyZHMnIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgY29tbWVudHMgdGhlcmUgd2lsbCBtYWtlIHRoZSBhYm92ZSBwYXJhZ3JhcGggc3VwZXJmbHVvdXMuICBQbGVhc2UKKyAgICAgaW5mb3JtIHVzIG9mIHdoZXRoZXIgdGhpcyB3b3Jrcy4pCisKKyAgICAgVW5vcyB1c2VzIG1lbW9yeSBzZWdtZW50YXRpb24gaW5zdGVhZCBvZiBkZW1hbmQgcGFnaW5nLCBzbyB5b3UKKyAgICAgd2lsbCBuZWVkIGEgbG90IG9mIG1lbW9yeS4gIDUgTWIgaXMgYmFyZWx5IGVub3VnaCBpZiBubyBvdGhlcgorICAgICB0YXNrcyBhcmUgcnVubmluZy4gIElmIGxpbmtpbmcgYGNjMScgZmFpbHMsIHRyeSBwdXR0aW5nIHRoZSBvYmplY3QKKyAgICAgZmlsZXMgaW50byBhIGxpYnJhcnkgYW5kIGxpbmtpbmcgZnJvbSB0aGF0IGxpYnJhcnkuCisKK2BtNjhrLWhwLWhwdXgnCisgICAgIEhQIDkwMDAgc2VyaWVzIDMwMCBvciA0MDAgcnVubmluZyBIUC1VWC4gIEhQLVVYIHZlcnNpb24gOC4wIGhhcyBhCisgICAgIGJ1ZyBpbiB0aGUgYXNzZW1ibGVyIHRoYXQgcHJldmVudHMgY29tcGlsYXRpb24gb2YgR05VIENDLiAgVG8gZml4CisgICAgIGl0LCBnZXQgcGF0Y2ggUEhDT180NDg0IGZyb20gSFAuCisKKyAgICAgSW4gYWRkaXRpb24sIGlmIHlvdSB3aXNoIHRvIHVzZSBnYXMgYC0td2l0aC1nbnUtYXMnIHlvdSBtdXN0IHVzZQorICAgICBnYXMgdmVyc2lvbiAyLjEgb3IgbGF0ZXIsIGFuZCB5b3UgbXVzdCB1c2UgdGhlIEdOVSBsaW5rZXIgdmVyc2lvbgorICAgICAyLjEgb3IgbGF0ZXIuICBFYXJsaWVyIHZlcnNpb25zIG9mIGdhcyByZWxpZWQgdXBvbiBhIHByb2dyYW0gd2hpY2gKKyAgICAgY29udmVydGVkIHRoZSBnYXMgb3V0cHV0IGludG8gdGhlIG5hdGl2ZSBIUC9VWCBmb3JtYXQsIGJ1dCB0aGF0CisgICAgIHByb2dyYW0gaGFzIG5vdCBiZWVuIGtlcHQgdXAgdG8gZGF0ZS4gIGdkYiBkb2VzIG5vdCB1bmRlcnN0YW5kCisgICAgIHRoYXQgbmF0aXZlIEhQL1VYIGZvcm1hdCwgc28geW91IG11c3QgdXNlIGdhcyBpZiB5b3Ugd2lzaCB0byB1c2UKKyAgICAgZ2RiLgorCitgbTY4ay1zdW4nCisgICAgIFN1biAzLiAgV2UgZG8gbm90IHByb3ZpZGUgYSBjb25maWd1cmF0aW9uIGZpbGUgdG8gdXNlIHRoZSBTdW4gRlBBCisgICAgIGJ5IGRlZmF1bHQsIGJlY2F1c2UgcHJvZ3JhbXMgdGhhdCBlc3RhYmxpc2ggc2lnbmFsIGhhbmRsZXJzIGZvcgorICAgICBmbG9hdGluZyBwb2ludCB0cmFwcyBpbmhlcmVudGx5IGNhbm5vdCB3b3JrIHdpdGggdGhlIEZQQS4KKworICAgICBTZWUgKk5vdGUgU3VuIEluc3RhbGw6OiwgZm9yIGluZm9ybWF0aW9uIG9uIGluc3RhbGxpbmcgR05VIENDIG9uCisgICAgIFN1biBzeXN0ZW1zLgorCitgbTg4ay0qLXN2cjMnCisgICAgIE1vdG9yb2xhIG04OGsgcnVubmluZyB0aGUgQVQmVC9Vbmlzb2Z0L01vdG9yb2xhIFYuMyByZWZlcmVuY2UgcG9ydC4KKyAgICAgVGhlc2Ugc3lzdGVtcyB0ZW5kIHRvIHVzZSB0aGUgR3JlZW4gSGlsbHMgQywgcmV2aXNpb24gMS44LjUsIGFzIHRoZQorICAgICBzdGFuZGFyZCBDIGNvbXBpbGVyLiAgVGhlcmUgYXJlIGFwcGFyZW50bHkgYnVncyBpbiB0aGlzIGNvbXBpbGVyCisgICAgIHRoYXQgcmVzdWx0IGluIG9iamVjdCBmaWxlcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHN0YWdlIDIgYW5kIHN0YWdlCisgICAgIDMuICBJZiB0aGlzIGhhcHBlbnMsIG1ha2UgdGhlIHN0YWdlIDQgY29tcGlsZXIgYW5kIGNvbXBhcmUgaXQgdG8KKyAgICAgdGhlIHN0YWdlIDMgY29tcGlsZXIuICBJZiB0aGUgc3RhZ2UgMyBhbmQgc3RhZ2UgNCBvYmplY3QgZmlsZXMgYXJlCisgICAgIGlkZW50aWNhbCwgdGhpcyBzdWdnZXN0cyB5b3UgZW5jb3VudGVyZWQgYSBwcm9ibGVtIHdpdGggdGhlCisgICAgIHN0YW5kYXJkIEMgY29tcGlsZXI7IHRoZSBzdGFnZSAzIGFuZCA0IGNvbXBpbGVycyBtYXkgYmUgdXNhYmxlLgorCisgICAgIEl0IGlzIGJlc3QsIGhvd2V2ZXIsIHRvIHVzZSBhbiBvbGRlciB2ZXJzaW9uIG9mIEdOVSBDQyBmb3IKKyAgICAgYm9vdHN0cmFwcGluZyBpZiB5b3UgaGF2ZSBvbmUuCisKK2BtODhrLSotZGd1eCcKKyAgICAgTW90b3JvbGEgbTg4ayBydW5uaW5nIERHL1VYLiAgVG8gYnVpbGQgODhvcGVuIEJDUyBuYXRpdmUgb3IgY3Jvc3MKKyAgICAgY29tcGlsZXJzIG9uIERHL1VYLCBzcGVjaWZ5IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgYXMKKyAgICAgYG04OGstKi1kZ3V4YmNzJyBhbmQgYnVpbGQgaW4gdGhlIDg4b3BlbiBCQ1Mgc29mdHdhcmUgZGV2ZWxvcG1lbnQKKyAgICAgZW52aXJvbm1lbnQuICBUbyBidWlsZCBFTEYgbmF0aXZlIG9yIGNyb3NzIGNvbXBpbGVycyBvbiBERy9VWCwKKyAgICAgc3BlY2lmeSBgbTg4ay0qLWRndXgnIGFuZCBidWlsZCBpbiB0aGUgREcvVVggRUxGIGRldmVsb3BtZW50CisgICAgIGVudmlyb25tZW50LiAgWW91IHNldCB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYnkKKyAgICAgaXNzdWluZyBgc2RlLXRhcmdldCcgY29tbWFuZCBhbmQgc3BlY2lmeWluZyBlaXRoZXIgYG04OGtiY3MnIG9yCisgICAgIGBtODhrZGd1eGVsZicgYXMgdGhlIG9wZXJhbmQuCisKKyAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiBuYW1lLCBgY29uZmlndXJlJyBndWVzc2VzIHRoZQorICAgICBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNvZnR3YXJlIGRldmVsb3BtZW50CisgICAgIGVudmlyb25tZW50LgorCitgbTg4ay10ZWt0cm9uaXgtc3lzdjMnCisgICAgIFRla3Ryb25peCBYRDg4IHJ1bm5pbmcgVVRla1YgMy4yZS4gIERvIG5vdCB0dXJuIG9uIG9wdGltaXphdGlvbgorICAgICB3aGlsZSBidWlsZGluZyBzdGFnZTEgaWYgeW91IGJvb3RzdHJhcCB3aXRoIHRoZSBidWdneSBHcmVlbiBIaWxscworICAgICBjb21waWxlci4gIEFsc28sIFRoZSBidW5kbGVkIExBSSBTeXN0ZW0gViBORlMgaXMgYnVnZ3kgc28gaWYgeW91CisgICAgIGJ1aWxkIGluIGFuIE5GUyBtb3VudGVkIGRpcmVjdG9yeSwgc3RhcnQgZnJvbSBhIGZyZXNoIHJlYm9vdCwgb3IKKyAgICAgYXZvaWQgTkZTIGFsbCB0b2dldGhlci4gIE90aGVyd2lzZSB5b3UgbWF5IGhhdmUgdHJvdWJsZSBnZXR0aW5nCisgICAgIGNsZWFuIGNvbXBhcmlzb25zIGJldHdlZW4gc3RhZ2VzLgorCitgbWlwcy1taXBzLWJzZCcKKyAgICAgTUlQUyBtYWNoaW5lcyBydW5uaW5nIHRoZSBNSVBTIG9wZXJhdGluZyBzeXN0ZW0gaW4gQlNEIG1vZGUuICBJdCdzCisgICAgIHBvc3NpYmxlIHRoYXQgc29tZSBvbGQgdmVyc2lvbnMgb2YgdGhlIHN5c3RlbSBsYWNrIHRoZSBmdW5jdGlvbnMKKyAgICAgYG1lbWNweScsIGBtZW1jbXAnLCBhbmQgYG1lbXNldCcuICBJZiB5b3VyIHN5c3RlbSBsYWNrcyB0aGVzZSwgeW91CisgICAgIG11c3QgcmVtb3ZlIG9yIHVuZG8gdGhlIGRlZmluaXRpb24gb2YgYFRBUkdFVF9NRU1fRlVOQ1RJT05TJyBpbgorICAgICBgbWlwcy1ic2QuaCcuCisKKyAgICAgVGhlIE1JUFMgQyBjb21waWxlciBuZWVkcyB0byBiZSB0b2xkIHRvIGluY3JlYXNlIGl0cyB0YWJsZSBzaXplCisgICAgIGZvciBzd2l0Y2ggc3RhdGVtZW50cyB3aXRoIHRoZSBgLVdmLC1YTmcxNTAwJyBvcHRpb24gaW4gb3JkZXIgdG8KKyAgICAgY29tcGlsZSBgY3AvcGFyc2UuYycuICBJZiB5b3UgdXNlIHRoZSBgLU8yJyBvcHRpbWl6YXRpb24gb3B0aW9uLAorICAgICB5b3UgYWxzbyBuZWVkIHRvIHVzZSBgLU9saW1pdCAzMDAwJy4gIEJvdGggb2YgdGhlc2Ugb3B0aW9ucyBhcmUKKyAgICAgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaW4gdGhlIGBNYWtlZmlsZScgdGhhdCB0aGUgc2hlbGwgc2NyaXB0CisgICAgIGBjb25maWd1cmUnIGJ1aWxkcy4gIElmIHlvdSBvdmVycmlkZSB0aGUgYENDJyBtYWtlIHZhcmlhYmxlIGFuZAorICAgICB1c2UgdGhlIE1JUFMgY29tcGlsZXJzLCB5b3UgbWF5IG5lZWQgdG8gYWRkIGAtV2YsLVhOZzE1MDAgLU9saW1pdAorICAgICAzMDAwJy4KKworYG1pcHMtbWlwcy1yaXNjb3MqJworICAgICBUaGUgTUlQUyBDIGNvbXBpbGVyIG5lZWRzIHRvIGJlIHRvbGQgdG8gaW5jcmVhc2UgaXRzIHRhYmxlIHNpemUKKyAgICAgZm9yIHN3aXRjaCBzdGF0ZW1lbnRzIHdpdGggdGhlIGAtV2YsLVhOZzE1MDAnIG9wdGlvbiBpbiBvcmRlciB0bworICAgICBjb21waWxlIGBjcC9wYXJzZS5jJy4gIElmIHlvdSB1c2UgdGhlIGAtTzInIG9wdGltaXphdGlvbiBvcHRpb24sCisgICAgIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGAtT2xpbWl0IDMwMDAnLiAgQm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZQorICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbiB0aGUgYE1ha2VmaWxlJyB0aGF0IHRoZSBzaGVsbCBzY3JpcHQKKyAgICAgYGNvbmZpZ3VyZScgYnVpbGRzLiAgSWYgeW91IG92ZXJyaWRlIHRoZSBgQ0MnIG1ha2UgdmFyaWFibGUgYW5kCisgICAgIHVzZSB0aGUgTUlQUyBjb21waWxlcnMsIHlvdSBtYXkgbmVlZCB0byBhZGQgYC1XZiwtWE5nMTUwMCAtT2xpbWl0CisgICAgIDMwMDAnLgorCisgICAgIE1JUFMgY29tcHV0ZXJzIHJ1bm5pbmcgUklTQy1PUyBjYW4gc3VwcG9ydCBmb3VyIGRpZmZlcmVudAorICAgICBwZXJzb25hbGl0aWVzOiBkZWZhdWx0LCBCU0QgNC4zLCBTeXN0ZW0gVi4zLCBhbmQgU3lzdGVtIFYuNCAob2xkZXIKKyAgICAgdmVyc2lvbnMgb2YgUklTQy1PUyBkb24ndCBzdXBwb3J0IFYuNCkuICBUbyBjb25maWd1cmUgR0NDIGZvcgorICAgICB0aGVzZSBwbGF0Zm9ybXMgdXNlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6CisKKyAgICBgbWlwcy1taXBzLXJpc2Nvc2ByZXYnJworICAgICAgICAgIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgUklTQy1PUywgcmV2aXNpb24gYHJldicuCisKKyAgICBgbWlwcy1taXBzLXJpc2Nvc2ByZXYnYnNkJworICAgICAgICAgIEJTRCA0LjMgY29uZmlndXJhdGlvbiBmb3IgUklTQy1PUywgcmV2aXNpb24gYHJldicuCisKKyAgICBgbWlwcy1taXBzLXJpc2Nvc2ByZXYnc3lzdjQnCisgICAgICAgICAgU3lzdGVtIFYuNCBjb25maWd1cmF0aW9uIGZvciBSSVNDLU9TLCByZXZpc2lvbiBgcmV2Jy4KKworICAgIGBtaXBzLW1pcHMtcmlzY29zYHJldidzeXN2JworICAgICAgICAgIFN5c3RlbSBWLjMgY29uZmlndXJhdGlvbiBmb3IgUklTQy1PUywgcmV2aXNpb24gYHJldicuCisKKyAgICAgVGhlIHJldmlzaW9uIGByZXYnIG1lbnRpb25lZCBhYm92ZSBpcyB0aGUgcmV2aXNpb24gb2YgUklTQy1PUyB0bworICAgICB1c2UuICBZb3UgbXVzdCByZWNvbmZpZ3VyZSBHQ0Mgd2hlbiBnb2luZyBmcm9tIGEgUklTQy1PUyByZXZpc2lvbgorICAgICA0IHRvIFJJU0MtT1MgcmV2aXNpb24gNS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgYXZvaWRpbmcgYSBsaW5rZXIKKyAgICAgYnVnLgorCitgbWlwcy1zZ2ktKicKKyAgICAgSW4gb3JkZXIgdG8gY29tcGlsZSBHQ0Mgb24gYW4gU0dJIHJ1bm5pbmcgSVJJWCA0LCB0aGUgImMuaGRyLmxpYiIKKyAgICAgb3B0aW9uIG11c3QgYmUgaW5zdGFsbGVkIGZyb20gdGhlIENELVJPTSBzdXBwbGllZCBmcm9tIFNpbGljb24KKyAgICAgR3JhcGhpY3MuICBUaGlzIGlzIGZvdW5kIG9uIHRoZSAybmQgQ0QgaW4gcmVsZWFzZSA0LjAuMS4KKworICAgICBJbiBvcmRlciB0byBjb21waWxlIEdDQyBvbiBhbiBTR0kgcnVubmluZyBJUklYIDUsIHRoZQorICAgICAiY29tcGlsZXJfZGV2LmhkciIgc3Vic3lzdGVtIG11c3QgYmUgaW5zdGFsbGVkIGZyb20gdGhlIElETyBDRC1ST00KKyAgICAgc3VwcGxpZWQgYnkgU2lsaWNvbiBHcmFwaGljcy4KKworICAgICBgbWFrZSBjb21wYXJlJyBtYXkgZmFpbCBvbiB2ZXJzaW9uIDUgb2YgSVJJWCB1bmxlc3MgeW91IGFkZAorICAgICBgLXNhdmUtdGVtcHMnIHRvIGBDRkxBR1MnLiAgT24gdGhlc2Ugc3lzdGVtcywgdGhlIG5hbWUgb2YgdGhlCisgICAgIGFzc2VtYmxlciBpbnB1dCBmaWxlIGlzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGZpbGUsIGFuZCB0aGF0IG1ha2VzCisgICAgIGNvbXBhcmlzb24gZmFpbCBpZiBpdCBkaWZmZXJzIGJldHdlZW4gdGhlIGBzdGFnZTEnIGFuZCBgc3RhZ2UyJworICAgICBjb21waWxhdGlvbnMuICBUaGUgb3B0aW9uIGAtc2F2ZS10ZW1wcycgZm9yY2VzIGEgZml4ZWQgbmFtZSB0byBiZQorICAgICB1c2VkIGZvciB0aGUgYXNzZW1ibGVyIGlucHV0IGZpbGUsIGluc3RlYWQgb2YgYSByYW5kb21seSBjaG9zZW4KKyAgICAgbmFtZSBpbiBgL3RtcCcuICBEbyBub3QgYWRkIGAtc2F2ZS10ZW1wcycgdW5sZXNzIHRoZSBjb21wYXJpc29ucworICAgICBmYWlsIHdpdGhvdXQgdGhhdCBvcHRpb24uICBJZiB5b3UgZG8geW91IGAtc2F2ZS10ZW1wcycsIHlvdSB3aWxsCisgICAgIGhhdmUgdG8gbWFudWFsbHkgZGVsZXRlIHRoZSBgLmknIGFuZCBgLnMnIGZpbGVzIGFmdGVyIGVhY2ggc2VyaWVzCisgICAgIG9mIGNvbXBpbGF0aW9ucy4KKworICAgICBUaGUgTUlQUyBDIGNvbXBpbGVyIG5lZWRzIHRvIGJlIHRvbGQgdG8gaW5jcmVhc2UgaXRzIHRhYmxlIHNpemUKKyAgICAgZm9yIHN3aXRjaCBzdGF0ZW1lbnRzIHdpdGggdGhlIGAtV2YsLVhOZzE1MDAnIG9wdGlvbiBpbiBvcmRlciB0bworICAgICBjb21waWxlIGBjcC9wYXJzZS5jJy4gIElmIHlvdSB1c2UgdGhlIGAtTzInIG9wdGltaXphdGlvbiBvcHRpb24sCisgICAgIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGAtT2xpbWl0IDMwMDAnLiAgQm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZQorICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbiB0aGUgYE1ha2VmaWxlJyB0aGF0IHRoZSBzaGVsbCBzY3JpcHQKKyAgICAgYGNvbmZpZ3VyZScgYnVpbGRzLiAgSWYgeW91IG92ZXJyaWRlIHRoZSBgQ0MnIG1ha2UgdmFyaWFibGUgYW5kCisgICAgIHVzZSB0aGUgTUlQUyBjb21waWxlcnMsIHlvdSBtYXkgbmVlZCB0byBhZGQgYC1XZiwtWE5nMTUwMCAtT2xpbWl0CisgICAgIDMwMDAnLgorCisgICAgIE9uIElyaXggdmVyc2lvbiA0LjAuNUYsIGFuZCBwZXJoYXBzIG9uIHNvbWUgb3RoZXIgdmVyc2lvbnMgYXMgd2VsbCwKKyAgICAgdGhlcmUgaXMgYW4gYXNzZW1ibGVyIGJ1ZyB0aGF0IHJlb3JkZXJzIGluc3RydWN0aW9ucyBpbmNvcnJlY3RseS4KKyAgICAgVG8gd29yayBhcm91bmQgaXQsIHNwZWNpZnkgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uCisgICAgIGBtaXBzLXNnaS1pcml4NGxvc2VyJy4gIFRoaXMgY29uZmlndXJhdGlvbiBpbmhpYml0cyBhc3NlbWJsZXIKKyAgICAgb3B0aW1pemF0aW9uLgorCisgICAgIEluIGEgY29tcGlsZXIgY29uZmlndXJlZCB3aXRoIHRhcmdldCBgbWlwcy1zZ2ktaXJpeDQnLCB5b3UgY2FuIHR1cm4KKyAgICAgb2ZmIGFzc2VtYmxlciBvcHRpbWl6YXRpb24gYnkgdXNpbmcgdGhlIGAtbm9hc21vcHQnIG9wdGlvbi4gIFRoaXMKKyAgICAgY29tcGlsZXIgb3B0aW9uIHBhc3NlcyB0aGUgb3B0aW9uIGAtTzAnIHRvIHRoZSBhc3NlbWJsZXIsIHRvCisgICAgIGluaGliaXQgcmVvcmRlcmluZy4KKworICAgICBUaGUgYC1ub2FzbW9wdCcgb3B0aW9uIGNhbiBiZSB1c2VmdWwgZm9yIHRlc3Rpbmcgd2hldGhlciBhIHByb2JsZW0KKyAgICAgaXMgZHVlIHRvIGVycm9uZW91cyBhc3NlbWJsZXIgcmVvcmRlcmluZy4gIEV2ZW4gaWYgYSBwcm9ibGVtIGRvZXMKKyAgICAgbm90IGdvIGF3YXkgd2l0aCBgLW5vYXNtb3B0JywgaXQgbWF5IHN0aWxsIGJlIGR1ZSB0byBhc3NlbWJsZXIKKyAgICAgcmVvcmRlcmluZy0tcGVyaGFwcyBHTlUgQ0MgaXRzZWxmIHdhcyBtaXNjb21waWxlZCBhcyBhIHJlc3VsdC4KKworICAgICBUbyBlbmFibGUgZGVidWdnaW5nIHVuZGVyIElyaXggNSwgeW91IG11c3QgdXNlIEdOVSBhcyAyLjUgb3IgbGF0ZXIsCisgICAgIGFuZCB1c2UgdGhlIGAtLXdpdGgtZ251LWFzJyBjb25maWd1cmUgb3B0aW9uIHdoZW4gY29uZmlndXJpbmcgZ2NjLgorICAgICBHTlUgYXMgaXMgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgYmludXRpbHMgcGFja2FnZS4KKworYG1pcHMtc29ueS1zeXN2JworICAgICBTb255IE1JUFMgTkVXUy4gIFRoaXMgd29ya3MgaW4gTkVXU09TIDUuMC4xLCBidXQgbm90IGluIDUuMC4yCisgICAgICh3aGljaCB1c2VzIEVMRiBpbnN0ZWFkIG9mIENPRkYpLiAgU3VwcG9ydCBmb3IgNS4wLjIgd2lsbCBwcm9iYWJseQorICAgICBiZSBwcm92aWRlZCBzb29uIGJ5IHZvbHVudGVlcnMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgbGlua2VyIGRvZXMKKyAgICAgbm90IGxpa2UgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IEdDQyB3aGVuIHNoYXJlZCBsaWJyYXJpZXMgYXJlCisgICAgIGxpbmtlZCBpbi4KKworYG5zMzJrLWVuY29yZScKKyAgICAgRW5jb3JlIG5zMzIwMDAgc3lzdGVtLiAgRW5jb3JlIHN5c3RlbXMgYXJlIHN1cHBvcnRlZCBvbmx5IHVuZGVyCisgICAgIEJTRC4KKworYG5zMzJrLSotZ2VuaXgnCisgICAgIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgbnMzMjAwMCBzeXN0ZW0uICBHZW5peCBoYXMgYnVncyBpbiBgYWxsb2NhJworICAgICBhbmQgYG1hbGxvYyc7IHlvdSBtdXN0IGdldCB0aGUgY29tcGlsZWQgdmVyc2lvbnMgb2YgdGhlc2UgZnJvbSBHTlUKKyAgICAgRW1hY3MuCisKK2BuczMyay1zZXF1ZW50JworICAgICBHbyB0byB0aGUgQmVya2VsZXkgdW5pdmVyc2UgYmVmb3JlIGNvbXBpbGluZy4gIEluIGFkZGl0aW9uLCB5b3UKKyAgICAgcHJvYmFibHkgbmVlZCB0byBjcmVhdGUgYSBmaWxlIG5hbWVkIGBzdHJpbmcuaCcgY29udGFpbmluZyBqdXN0CisgICAgIG9uZSBsaW5lOiBgI2luY2x1ZGUgPHN0cmluZ3MuaD4nLgorCitgbnMzMmstdXRlaycKKyAgICAgVVRFSyBuczMyMDAwIHN5c3RlbSAoIm1lcmxpbiIpLiAgVGhlIEMgY29tcGlsZXIgdGhhdCBjb21lcyB3aXRoCisgICAgIHRoaXMgc3lzdGVtIGNhbm5vdCBjb21waWxlIEdOVSBDQzsgY29udGFjdCBgdGVrdHJvbml4IXJlZWQhbWFzb24nCisgICAgIHRvIGdldCBiaW5hcmllcyBvZiBHTlUgQ0MgZm9yIGJvb3RzdHJhcHBpbmcuCisKK2Byb21wLSotYW9zJworYHJvbXAtKi1tYWNoJworICAgICBUaGUgb25seSBvcGVyYXRpbmcgc3lzdGVtcyBzdXBwb3J0ZWQgZm9yIHRoZSBJQk0gUlQgUEMgYXJlIEFPUyBhbmQKKyAgICAgTUFDSC4gIEdOVSBDQyBkb2VzIG5vdCBzdXBwb3J0IEFJWCBydW5uaW5nIG9uIHRoZSBSVC4gIFdlCisgICAgIHJlY29tbWVuZCB5b3UgY29tcGlsZSBHTlUgQ0Mgd2l0aCBhbiBlYXJsaWVyIHZlcnNpb24gb2YgaXRzZWxmOyBpZgorICAgICB5b3UgY29tcGlsZSBHTlUgQ0Mgd2l0aCBgaGMnLCB0aGUgTWV0YXdhcmUgY29tcGlsZXIsIGl0IHdpbGwgd29yaywKKyAgICAgYnV0IHlvdSB3aWxsIGdldCBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIHN0YWdlIDIgYW5kIHN0YWdlIDMKKyAgICAgY29tcGlsZXJzIGluIHZhcmlvdXMgZmlsZXMuICBUaGVzZSBlcnJvcnMgYXJlIG1pbm9yIGRpZmZlcmVuY2VzIGluCisgICAgIHNvbWUgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGFuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQ7IHRoZSBzdGFnZQorICAgICAzIGNvbXBpbGVyIGlzIGNvcnJlY3QuCisKK2ByczYwMDAtKi1haXgnCitgcG93ZXJwYy0qLWFpeCcKKyAgICAgVmFyaW91cyBlYXJseSB2ZXJzaW9ucyBvZiBlYWNoIHJlbGVhc2Ugb2YgdGhlIElCTSBYTEMgY29tcGlsZXIKKyAgICAgd2lsbCBub3QgYm9vdHN0cmFwIEdOVSBDQy4gIFN5bXB0b21zIGluY2x1ZGUgZGlmZmVyZW5jZXMgYmV0d2VlbgorICAgICB0aGUgc3RhZ2UyIGFuZCBzdGFnZTMgb2JqZWN0IGZpbGVzLCBhbmQgZXJyb3JzIHdoZW4gY29tcGlsaW5nCisgICAgIGBsaWJnY2MuYScgb3IgYGVucXVpcmUnLiAgS25vd24gcHJvYmxlbWF0aWMgcmVsZWFzZXMgaW5jbHVkZToKKyAgICAgeGxjLTEuMi4xLjgsIHhsYy0xLjMuMC4wIChkaXN0cmlidXRlZCB3aXRoIEFJWCAzLjIuNSksIGFuZAorICAgICB4bGMtMS4zLjAuMTkuICBCb3RoIHhsYy0xLjIuMS4yOCBhbmQgeGxjLTEuMy4wLjI0IChQVEYgNDMyMjM4KSBhcmUKKyAgICAga25vd24gdG8gcHJvZHVjZSB3b3JraW5nIHZlcnNpb25zIG9mIEdOVSBDQywgYnV0IG1vc3Qgb3RoZXIgcmVjZW50CisgICAgIHJlbGVhc2VzIGNvcnJlY3RseSBib290c3RyYXAgR05VIENDLiAgQWxzbywgcmVsZWFzZXMgb2YgQUlYIHByaW9yCisgICAgIHRvIEFJWCAzLjIuNCBpbmNsdWRlIGEgdmVyc2lvbiBvZiB0aGUgSUJNIGFzc2VtYmxlciB3aGljaCBkb2VzIG5vdAorICAgICBhY2NlcHQgZGVidWdnaW5nIGRpcmVjdGl2ZXM6IGFzc2VtYmxlciB1cGRhdGVzIGFyZSBhdmFpbGFibGUgYXMKKyAgICAgUFRGcy4gIEFsc28sIGlmIHlvdSBhcmUgdXNpbmcgQUlYIDMuMi41IG9yIGdyZWF0ZXIgYW5kIHRoZSBHTlUKKyAgICAgYXNzZW1ibGVyLCB5b3UgbXVzdCBoYXZlIGEgdmVyc2lvbiBtb2RpZmllZCBhZnRlciBPY3RvYmVyIDE2dGgsCisgICAgIDE5OTUgaW4gb3JkZXIgZm9yIHRoZSBHTlUgQyBjb21waWxlciB0byBidWlsZC4gIFNlZSB0aGUgZmlsZQorICAgICBgUkVBRE1FLlJTNjAwMCcgZm9yIG1vcmUgZGV0YWlscyBvbiBvZiB0aGVzZSBwcm9ibGVtcy4KKworICAgICBHTlUgQ0MgZG9lcyBub3QgeWV0IHN1cHBvcnQgdGhlIDY0LWJpdCBQb3dlclBDIGluc3RydWN0aW9ucy4KKworICAgICBPYmplY3RpdmUgQyBkb2VzIG5vdCB3b3JrIG9uIHRoaXMgYXJjaGl0ZWN0dXJlIGJlY2F1c2UgaXQgbWFrZXMKKyAgICAgYXNzdW1wdGlvbnMgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGNhbGxpbmcgY29udmVudGlvbnMuCisKKyAgICAgQUlYIG9uIHRoZSBSUy82MDAwIHByb3ZpZGVzIHN1cHBvcnQgKE5MUykgZm9yIGVudmlyb25tZW50cyBvdXRzaWRlCisgICAgIG9mIHRoZSBVbml0ZWQgU3RhdGVzLiAgQ29tcGlsZXJzIGFuZCBhc3NlbWJsZXJzIHVzZSBOTFMgdG8gc3VwcG9ydAorICAgICBsb2NhbGUtc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zIG9mIHZhcmlvdXMgb2JqZWN0cyBpbmNsdWRpbmcKKyAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyAoIi4iIHZzICIsIiBmb3Igc2VwYXJhdGluZyBkZWNpbWFsCisgICAgIGZyYWN0aW9ucykuICBUaGVyZSBoYXZlIGJlZW4gcHJvYmxlbXMgcmVwb3J0ZWQgd2hlcmUgdGhlIGxpYnJhcnkKKyAgICAgbGlua2VkIHdpdGggR05VIENDIGRvZXMgbm90IHByb2R1Y2UgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQKKyAgICAgZm9ybWF0cyB0aGF0IHRoZSBhc3NlbWJsZXIgYWNjZXB0cy4gIElmIHlvdSBoYXZlIHRoaXMgcHJvYmxlbSwgc2V0CisgICAgIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICJDIiBvciAiRW5fVVMiLgorCisgICAgIER1ZSB0byBjaGFuZ2VzIGluIHRoZSB3YXkgdGhhdCBHTlUgQ0MgaW52b2tlcyB0aGUgYmluZGVyIChsaW5rZXIpCisgICAgIGZvciBBSVggNC4xLCB5b3UgbWF5IG5vdyByZWNlaXZlIHdhcm5pbmdzIG9mIGR1cGxpY2F0ZSBzeW1ib2xzCisgICAgIGZyb20gdGhlIGxpbmsgc3RlcCB0aGF0IHdlcmUgbm90IHJlcG9ydGVkIGJlZm9yZS4gIFRoZSBhc3NlbWJseQorICAgICBmaWxlcyBnZW5lcmF0ZWQgYnkgR05VIENDIGZvciBBSVggaGF2ZSBhbHdheXMgaW5jbHVkZWQgbXVsdGlwbGUKKyAgICAgc3ltYm9sIGRlZmluaXRpb25zIGZvciBjZXJ0YWluIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24KKyAgICAgZGVjbGFyYXRpb25zIGluIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiAgVGhlIHdhcm5pbmdzIHNob3VsZCBub3QKKyAgICAgcHJldmVudCB0aGUgbGlua2VyIGZyb20gcHJvZHVjaW5nIGEgY29ycmVjdCBsaWJyYXJ5IG9yIHJ1bm5hYmxlCisgICAgIGV4ZWN1dGFibGUuCisKK2Bwb3dlcnBjLSotZWxmJworYHBvd2VycGMtKi1zeXN2NCcKKyAgICAgUG93ZXJQQyBzeXN0ZW0gaW4gYmlnIGVuZGlhbiBtb2RlLCBydW5uaW5nIFN5c3RlbSBWLjQuCisKKyAgICAgVGhpcyBjb25maWd1cmF0aW9uIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudC4KKworYHBvd2VycGMtKi1lYWJpYWl4JworICAgICBFbWJlZGRlZCBQb3dlclBDIHN5c3RlbSBpbiBiaWcgZW5kaWFuIG1vZGUgd2l0aCAtbWNhbGwtYWl4CisgICAgIHNlbGVjdGVkIGFzIHRoZSBkZWZhdWx0LiAgVGhpcyBzeXN0ZW0gaXMgY3VycmVudGx5IHVuZGVyCisgICAgIGRldmVsb3BtZW50LgorCitgcG93ZXJwYy0qLWVhYmlzaW0nCisgICAgIEVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtIGluIGJpZyBlbmRpYW4gbW9kZSBmb3IgdXNlIGluIHJ1bm5pbmcKKyAgICAgdW5kZXIgdGhlIFBTSU0gc2ltdWxhdG9yLiAgVGhpcyBzeXN0ZW0gaXMgY3VycmVudGx5IHVuZGVyCisgICAgIGRldmVsb3BtZW50LgorCitgcG93ZXJwYy0qLWVhYmknCisgICAgIEVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtIGluIGJpZyBlbmRpYW4gbW9kZS4KKworICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgY3VycmVudGx5IHVuZGVyIGRldmVsb3BtZW50LgorCitgcG93ZXJwY2xlLSotZWxmJworYHBvd2VycGNsZS0qLXN5c3Y0JworICAgICBQb3dlclBDIHN5c3RlbSBpbiBsaXR0bGUgZW5kaWFuIG1vZGUsIHJ1bm5pbmcgU3lzdGVtIFYuNC4KKworICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgY3VycmVudGx5IHVuZGVyIGRldmVsb3BtZW50LgorCitgcG93ZXJwY2xlLSotc3lzdjQnCisgICAgIEVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4KKworICAgICBUaGlzIHN5c3RlbSBpcyBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQuCisKK2Bwb3dlcnBjbGUtKi1lYWJpc2ltJworICAgICBFbWJlZGRlZCBQb3dlclBDIHN5c3RlbSBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgZm9yIHVzZSBpbiBydW5uaW5nCisgICAgIHVuZGVyIHRoZSBQU0lNIHNpbXVsYXRvci4KKworICAgICBUaGlzIHN5c3RlbSBpcyBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQuCisKK2Bwb3dlcnBjbGUtKi1lYWJpJworICAgICBFbWJlZGRlZCBQb3dlclBDIHN5c3RlbSBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCisKKyAgICAgVGhpcyBjb25maWd1cmF0aW9uIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudC4KKworYHZheC1kZWMtdWx0cml4JworICAgICBEb24ndCB0cnkgY29tcGlsaW5nIHdpdGggVmF4IEMgKGB2Y2MnKS4gIEl0IHByb2R1Y2VzIGluY29ycmVjdCBjb2RlCisgICAgIGluIHNvbWUgY2FzZXMgKGZvciBleGFtcGxlLCB3aGVuIGBhbGxvY2EnIGlzIHVzZWQpLgorCisgICAgIE1lYW53aGlsZSwgY29tcGlsaW5nIGBjcC9wYXJzZS5jJyB3aXRoIHBjYyBkb2VzIG5vdCB3b3JrIGJlY2F1c2Ugb2YKKyAgICAgYW4gaW50ZXJuYWwgdGFibGUgc2l6ZSBsaW1pdGF0aW9uIGluIHRoYXQgY29tcGlsZXIuICBUbyBhdm9pZCB0aGlzCisgICAgIHByb2JsZW0sIGNvbXBpbGUganVzdCB0aGUgR05VIEMgY29tcGlsZXIgZmlyc3QsIGFuZCB1c2UgaXQgdG8KKyAgICAgcmVjb21waWxlIGJ1aWxkaW5nIGFsbCB0aGUgbGFuZ3VhZ2VzIHRoYXQgeW91IHdhbnQgdG8gcnVuLgorCitgc3BhcmMtc3VuLSonCisgICAgIFNlZSAqTm90ZSBTdW4gSW5zdGFsbDo6LCBmb3IgaW5mb3JtYXRpb24gb24gaW5zdGFsbGluZyBHTlUgQ0Mgb24KKyAgICAgU3VuIHN5c3RlbXMuCisKK2B2YXgtZGVjLXZtcycKKyAgICAgU2VlICpOb3RlIFZNUyBJbnN0YWxsOjosIGZvciBkZXRhaWxzIG9uIGhvdyB0byBpbnN0YWxsIEdOVSBDQyBvbgorICAgICBWTVMuCisKK2B3ZTMyay0qLSonCisgICAgIFRoZXNlIGNvbXB1dGVycyBhcmUgYWxzbyBrbm93biBhcyB0aGUgM2IyLCAzYjUsIDNiMjAgYW5kIG90aGVyCisgICAgIHNpbWlsYXIgbmFtZXMuICAoSG93ZXZlciwgdGhlIDNiMSBpcyBhY3R1YWxseSBhIDY4MDAwOyBzZWUgKk5vdGUKKyAgICAgQ29uZmlndXJhdGlvbnM6Oi4pCisKKyAgICAgRG9uJ3QgdXNlIGAtZycgd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgc3lzdGVtJ3MgY29tcGlsZXIuICBUaGUKKyAgICAgc3lzdGVtJ3MgbGlua2VyIHNlZW1zIHRvIGJlIHVuYWJsZSB0byBoYW5kbGUgc3VjaCBhIGxhcmdlIHByb2dyYW0KKyAgICAgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisKKyAgICAgVGhlIHN5c3RlbSdzIGNvbXBpbGVyIHJ1bnMgb3V0IG9mIGNhcGFjaXR5IHdoZW4gY29tcGlsaW5nIGBzdG10LmMnCisgICAgIGluIEdOVSBDQy4gIFlvdSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBidWlsZGluZyBgY3BwJyBpbiBHTlUgQ0MKKyAgICAgZmlyc3QsIHRoZW4gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgc3lzdGVtJ3MgcHJlcHJvY2Vzc29yIHdpdGggdGhlCisgICAgIHN5c3RlbSdzIEMgY29tcGlsZXIgdG8gY29tcGlsZSBgc3RtdC5jJy4gIEhlcmUgaXMgaG93OgorCisgICAgICAgICAgbXYgL2xpYi9jcHAgL2xpYi9jcHAuYXR0CisgICAgICAgICAgY3AgY3BwIC9saWIvY3BwLmdudQorICAgICAgICAgIGVjaG8gJy9saWIvY3BwLmdudSAtdHJhZGl0aW9uYWwgJHsxKyIkQCJ9JyA+IC9saWIvY3BwCisgICAgICAgICAgY2htb2QgK3ggL2xpYi9jcHAKKworICAgICBUaGUgc3lzdGVtJ3MgY29tcGlsZXIgcHJvZHVjZXMgYmFkIGNvZGUgZm9yIHNvbWUgb2YgdGhlIEdOVSBDQworICAgICBvcHRpbWl6YXRpb24gZmlsZXMuICBTbyB5b3UgbXVzdCBidWlsZCB0aGUgc3RhZ2UgMiBjb21waWxlciB3aXRob3V0CisgICAgIG9wdGltaXphdGlvbi4gIFRoZW4gYnVpbGQgYSBzdGFnZSAzIGNvbXBpbGVyIHdpdGggb3B0aW1pemF0aW9uLgorICAgICBUaGF0IGV4ZWN1dGFibGUgc2hvdWxkIHdvcmsuICBIZXJlIGFyZSB0aGUgbmVjZXNzYXJ5IGNvbW1hbmRzOgorCisgICAgICAgICAgbWFrZSBMQU5HVUFHRVM9YyBDQz1zdGFnZTEveGdjYyBDRkxBR1M9Ii1Cc3RhZ2UxLyAtZyIKKyAgICAgICAgICBtYWtlIHN0YWdlMgorICAgICAgICAgIG1ha2UgQ0M9c3RhZ2UyL3hnY2MgQ0ZMQUdTPSItQnN0YWdlMi8gLWcgLU8iCisKKyAgICAgWW91IG1heSBuZWVkIHRvIHJhaXNlIHRoZSBVTElNSVQgc2V0dGluZyB0byBidWlsZCBhIEMrKyBjb21waWxlciwKKyAgICAgYXMgdGhlIGZpbGUgYGNjMXBsdXMnIGlzIGxhcmdlciB0aGFuIG9uZSBtZWdhYnl0ZS4KKworQ29tcGlsYXRpb24gaW4gYSBTZXBhcmF0ZSBEaXJlY3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIElmIHlvdSB3aXNoIHRvIGJ1aWxkIHRoZSBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzIGluIGEgZGlyZWN0b3J5CitvdGhlciB0aGFuIHRoZSBvbmUgY29udGFpbmluZyB0aGUgc291cmNlIGZpbGVzLCBoZXJlIGlzIHdoYXQgeW91IG11c3QKK2RvIGRpZmZlcmVudGx5OgorCisgIDEuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhIHZlcnNpb24gb2YgTWFrZSB0aGF0IHN1cHBvcnRzIHRoZSBgVlBBVEgnCisgICAgIGZlYXR1cmUuICAoR05VIE1ha2Ugc3VwcG9ydHMgaXQsIGFzIGRvIE1ha2UgdmVyc2lvbnMgb24gbW9zdCBCU0QKKyAgICAgc3lzdGVtcy4pCisKKyAgMi4gSWYgeW91IGhhdmUgZXZlciBydW4gYGNvbmZpZ3VyZScgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnksIHlvdSBtdXN0CisgICAgIHVuZG8gdGhlIGNvbmZpZ3VyYXRpb24uICBEbyB0aGlzIGJ5IHJ1bm5pbmc6CisKKyAgICAgICAgICBtYWtlIGRpc3RjbGVhbgorCisgIDMuIEdvIHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHdhbnQgdG8gYnVpbGQgdGhlIGNvbXBpbGVyIGJlZm9yZQorICAgICBydW5uaW5nIGBjb25maWd1cmUnOgorCisgICAgICAgICAgbWtkaXIgZ2NjLXN1bjMKKyAgICAgICAgICBjZCBnY2Mtc3VuMworCisgICAgIE9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcywgdGhpcyBkaXJlY3RvcnkgbXVzdAorICAgICBiZSBvbiB0aGUgc2FtZSBmaWxlIHN5c3RlbSBhcyB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LgorCisgIDQuIFNwZWNpZnkgd2hlcmUgdG8gZmluZCBgY29uZmlndXJlJyB3aGVuIHlvdSBydW4gaXQ6CisKKyAgICAgICAgICAuLi9nY2MvY29uZmlndXJlIC4uLgorCisgICAgIFRoaXMgYWxzbyB0ZWxscyBgY29uZmlndXJlJyB3aGVyZSB0byBmaW5kIHRoZSBjb21waWxlciBzb3VyY2VzOworICAgICBgY29uZmlndXJlJyB0YWtlcyB0aGUgZGlyZWN0b3J5IGZyb20gdGhlIGZpbGUgbmFtZSB0aGF0IHdhcyB1c2VkIHRvCisgICAgIGludm9rZSBpdC4gIEJ1dCBpZiB5b3Ugd2FudCB0byBiZSBzdXJlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNvdXJjZQorICAgICBkaXJlY3Rvcnkgd2l0aCB0aGUgYC0tc3JjZGlyJyBvcHRpb24sIGxpa2UgdGhpczoKKworICAgICAgICAgIC4uL2djYy9jb25maWd1cmUgLS1zcmNkaXI9Li4vZ2NjIE9USEVSIE9QVElPTlMKKworICAgICBUaGUgZGlyZWN0b3J5IHlvdSBzcGVjaWZ5IHdpdGggYC0tc3JjZGlyJyBuZWVkIG5vdCBiZSB0aGUgc2FtZSBhcworICAgICB0aGUgb25lIHRoYXQgYGNvbmZpZ3VyZScgaXMgZm91bmQgaW4uCisKKyAgIE5vdywgeW91IGNhbiBydW4gYG1ha2UnIGluIHRoYXQgZGlyZWN0b3J5LiAgWW91IG5lZWQgbm90IHJlcGVhdCB0aGUKK2NvbmZpZ3VyYXRpb24gc3RlcHMgc2hvd24gYWJvdmUsIHdoZW4gb3JkaW5hcnkgc291cmNlIGZpbGVzIGNoYW5nZS4gIFlvdQorbXVzdCwgaG93ZXZlciwgcnVuIGBjb25maWd1cmUnIGFnYWluIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2NoYW5nZSwgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcy4KKworQnVpbGRpbmcgYW5kIEluc3RhbGxpbmcgYSBDcm9zcy1Db21waWxlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBHTlUgQ0MgY2FuIGZ1bmN0aW9uIGFzIGEgY3Jvc3MtY29tcGlsZXIgZm9yIG1hbnkgbWFjaGluZXMsIGJ1dCBub3QKK2FsbC4KKworICAgKiBDcm9zcy1jb21waWxlcnMgZm9yIHRoZSBNaXBzIGFzIHRhcmdldCB1c2luZyB0aGUgTWlwcyBhc3NlbWJsZXIKKyAgICAgY3VycmVudGx5IGRvIG5vdCB3b3JrLCBiZWNhdXNlIHRoZSBhdXhpbGlhcnkgcHJvZ3JhbXMKKyAgICAgYG1pcHMtdGR1bXAuYycgYW5kIGBtaXBzLXRmaWxlLmMnIGNhbid0IGJlIGNvbXBpbGVkIG9uIGFueXRoaW5nCisgICAgIGJ1dCBhIE1pcHMuICBJdCBkb2VzIHdvcmsgdG8gY3Jvc3MgY29tcGlsZSBmb3IgYSBNaXBzIGlmIHlvdSB1c2UKKyAgICAgdGhlIEdOVSBhc3NlbWJsZXIgYW5kIGxpbmtlci4KKworICAgKiBDcm9zcy1jb21waWxlcnMgYmV0d2VlbiBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCBmbG9hdGluZyBwb2ludAorICAgICBmb3JtYXRzIGhhdmUgbm90IGFsbCBiZWVuIG1hZGUgdG8gd29yay4gIEdOVSBDQyBub3cgaGFzIGEgZmxvYXRpbmcKKyAgICAgcG9pbnQgZW11bGF0b3Igd2l0aCB3aGljaCB0aGVzZSBjYW4gd29yaywgYnV0IGVhY2ggdGFyZ2V0IG1hY2hpbmUKKyAgICAgZGVzY3JpcHRpb24gbmVlZHMgdG8gYmUgdXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiBpdC4KKworICAgKiBDcm9zcy1jb21waWxhdGlvbiBiZXR3ZWVuIG1hY2hpbmVzIG9mIGRpZmZlcmVudCB3b3JkIHNpemVzIGlzCisgICAgIHNvbWV3aGF0IHByb2JsZW1hdGljIGFuZCBzb21ldGltZXMgZG9lcyBub3Qgd29yay4KKworICAgU2luY2UgR05VIENDIGdlbmVyYXRlcyBhc3NlbWJsZXIgY29kZSwgeW91IHByb2JhYmx5IG5lZWQgYQorY3Jvc3MtYXNzZW1ibGVyIHRoYXQgR05VIENDIGNhbiBydW4sIGluIG9yZGVyIHRvIHByb2R1Y2Ugb2JqZWN0IGZpbGVzLgorSWYgeW91IHdhbnQgdG8gbGluayBvbiBvdGhlciB0aGFuIHRoZSB0YXJnZXQgbWFjaGluZSwgeW91IG5lZWQgYQorY3Jvc3MtbGlua2VyIGFzIHdlbGwuICBZb3UgYWxzbyBuZWVkIGhlYWRlciBmaWxlcyBhbmQgbGlicmFyaWVzIHN1aXRhYmxlCitmb3IgdGhlIHRhcmdldCBtYWNoaW5lIHRoYXQgeW91IGNhbiBpbnN0YWxsIG9uIHRoZSBob3N0IG1hY2hpbmUuCisKK1N0ZXBzIG9mIENyb3NzLUNvbXBpbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUbyBjb21waWxlIGFuZCBydW4gYSBwcm9ncmFtIHVzaW5nIGEgY3Jvc3MtY29tcGlsZXIgaW52b2x2ZXMgc2V2ZXJhbAorc3RlcHM6CisKKyAgICogUnVuIHRoZSBjcm9zcy1jb21waWxlciBvbiB0aGUgaG9zdCBtYWNoaW5lIHRvIHByb2R1Y2UgYXNzZW1ibGVyCisgICAgIGZpbGVzIGZvciB0aGUgdGFyZ2V0IG1hY2hpbmUuICBUaGlzIHJlcXVpcmVzIGhlYWRlciBmaWxlcyBmb3IgdGhlCisgICAgIHRhcmdldCBtYWNoaW5lLgorCisgICAqIEFzc2VtYmxlIHRoZSBmaWxlcyBwcm9kdWNlZCBieSB0aGUgY3Jvc3MtY29tcGlsZXIuICBZb3UgY2FuIGRvIHRoaXMKKyAgICAgZWl0aGVyIHdpdGggYW4gYXNzZW1ibGVyIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwgb3Igd2l0aCBhCisgICAgIGNyb3NzLWFzc2VtYmxlciBvbiB0aGUgaG9zdCBtYWNoaW5lLgorCisgICAqIExpbmsgdGhvc2UgZmlsZXMgdG8gbWFrZSBhbiBleGVjdXRhYmxlLiAgWW91IGNhbiBkbyB0aGlzIGVpdGhlcgorICAgICB3aXRoIGEgbGlua2VyIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwgb3Igd2l0aCBhIGNyb3NzLWxpbmtlciBvbiB0aGUKKyAgICAgaG9zdCBtYWNoaW5lLiAgV2hpY2hldmVyIG1hY2hpbmUgeW91IHVzZSwgeW91IG5lZWQgbGlicmFyaWVzIGFuZAorICAgICBjZXJ0YWluIHN0YXJ0dXAgZmlsZXMgKHR5cGljYWxseSBgY3J0Li4uLm8nKSBmb3IgdGhlIHRhcmdldAorICAgICBtYWNoaW5lLgorCisgICBJdCBpcyBtb3N0IGNvbnZlbmllbnQgdG8gZG8gYWxsIG9mIHRoZXNlIHN0ZXBzIG9uIHRoZSBzYW1lIGhvc3QKK21hY2hpbmUsIHNpbmNlIHRoZW4geW91IGNhbiBkbyBpdCBhbGwgd2l0aCBhIHNpbmdsZSBpbnZvY2F0aW9uIG9mIEdOVQorQ0MuICBUaGlzIHJlcXVpcmVzIGEgc3VpdGFibGUgY3Jvc3MtYXNzZW1ibGVyIGFuZCBjcm9zcy1saW5rZXIuICBGb3IKK3NvbWUgdGFyZ2V0cywgdGhlIEdOVSBhc3NlbWJsZXIgYW5kIGxpbmtlciBhcmUgYXZhaWxhYmxlLgorCitDb25maWd1cmluZyBhIENyb3NzLUNvbXBpbGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIFRvIGJ1aWxkIEdOVSBDQyBhcyBhIGNyb3NzLWNvbXBpbGVyLCB5b3Ugc3RhcnQgb3V0IGJ5IHJ1bm5pbmcKK2Bjb25maWd1cmUnLiAgVXNlIHRoZSBgLS10YXJnZXQ9VEFSR0VUJyB0byBzcGVjaWZ5IHRoZSB0YXJnZXQgdHlwZS4gIElmCitgY29uZmlndXJlJyB3YXMgdW5hYmxlIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgc3lzdGVtIHlvdSBhcmUgcnVubmluZworb24sIGFsc28gc3BlY2lmeSB0aGUgYC0tYnVpbGQ9QlVJTEQnIG9wdGlvbi4gIEZvciBleGFtcGxlLCBoZXJlIGlzIGhvdwordG8gY29uZmlndXJlIGZvciBhIGNyb3NzLWNvbXBpbGVyIHRoYXQgcHJvZHVjZXMgY29kZSBmb3IgYW4gSFAgNjgwMzAKK3N5c3RlbSBydW5uaW5nIEJTRCBvbiBhIHN5c3RlbSB0aGF0IGBjb25maWd1cmUnIGNhbiBjb3JyZWN0bHkgaWRlbnRpZnk6CisKKyAgICAgLi9jb25maWd1cmUgLS10YXJnZXQ9bTY4ay1ocC1ic2Q0LjMKKworVG9vbHMgYW5kIExpYnJhcmllcyBmb3IgYSBDcm9zcy1Db21waWxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBJZiB5b3UgaGF2ZSBhIGNyb3NzLWFzc2VtYmxlciBhbmQgY3Jvc3MtbGlua2VyIGF2YWlsYWJsZSwgeW91IHNob3VsZAoraW5zdGFsbCB0aGVtIG5vdy4gIFB1dCB0aGVtIGluIHRoZSBkaXJlY3RvcnkgYC91c3IvbG9jYWwvVEFSR0VUL2JpbicuCitIZXJlIGlzIGEgdGFibGUgb2YgdGhlIHRvb2xzIHlvdSBzaG91bGQgcHV0IGluIHRoaXMgZGlyZWN0b3J5OgorCitgYXMnCisgICAgIFRoaXMgc2hvdWxkIGJlIHRoZSBjcm9zcy1hc3NlbWJsZXIuCisKK2BsZCcKKyAgICAgVGhpcyBzaG91bGQgYmUgdGhlIGNyb3NzLWxpbmtlci4KKworYGFyJworICAgICBUaGlzIHNob3VsZCBiZSB0aGUgY3Jvc3MtYXJjaGl2ZXI6IGEgcHJvZ3JhbSB3aGljaCBjYW4gbWFuaXB1bGF0ZQorICAgICBhcmNoaXZlIGZpbGVzIChsaW5rZXIgbGlicmFyaWVzKSBpbiB0aGUgdGFyZ2V0IG1hY2hpbmUncyBmb3JtYXQuCisKK2ByYW5saWInCisgICAgIFRoaXMgc2hvdWxkIGJlIGEgcHJvZ3JhbSB0byBjb25zdHJ1Y3QgYSBzeW1ib2wgdGFibGUgaW4gYW4gYXJjaGl2ZQorICAgICBmaWxlLgorCisgICBUaGUgaW5zdGFsbGF0aW9uIG9mIEdOVSBDQyB3aWxsIGZpbmQgdGhlc2UgcHJvZ3JhbXMgaW4gdGhhdAorZGlyZWN0b3J5LCBhbmQgY29weSBvciBsaW5rIHRoZW0gdG8gdGhlIHByb3BlciBwbGFjZSB0byBmb3IgdGhlCitjcm9zcy1jb21waWxlciB0byBmaW5kIHRoZW0gd2hlbiBydW4gbGF0ZXIuCisKKyAgIFRoZSBlYXNpZXN0IHdheSB0byBwcm92aWRlIHRoZXNlIGZpbGVzIGlzIHRvIGJ1aWxkIHRoZSBCaW51dGlscworcGFja2FnZSBhbmQgR0FTLiAgQ29uZmlndXJlIHRoZW0gd2l0aCB0aGUgc2FtZSBgLS1ob3N0JyBhbmQgYC0tdGFyZ2V0Jworb3B0aW9ucyB0aGF0IHlvdSB1c2UgZm9yIGNvbmZpZ3VyaW5nIEdOVSBDQywgdGhlbiBidWlsZCBhbmQgaW5zdGFsbAordGhlbS4gIFRoZXkgaW5zdGFsbCB0aGVpciBleGVjdXRhYmxlcyBhdXRvbWF0aWNhbGx5IGludG8gdGhlIHByb3BlcgorZGlyZWN0b3J5LiAgQWxhcywgdGhleSBkbyBub3Qgc3VwcG9ydCBhbGwgdGhlIHRhcmdldHMgdGhhdCBHTlUgQ0MKK3N1cHBvcnRzLgorCisgICBJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGxpYnJhcmllcyB0byB1c2Ugd2l0aCB0aGUgY3Jvc3MtY29tcGlsZXIsCitzdWNoIGFzIGEgc3RhbmRhcmQgQyBsaWJyYXJ5LCBwdXQgdGhlbSBpbiB0aGUgZGlyZWN0b3J5CitgL3Vzci9sb2NhbC9UQVJHRVQvbGliJzsgaW5zdGFsbGF0aW9uIG9mIEdOVSBDQyBjb3BpZXMgYWxsIGFsbCB0aGUKK2ZpbGVzIGluIHRoYXQgc3ViZGlyZWN0b3J5IGludG8gdGhlIHByb3BlciBwbGFjZSBmb3IgR05VIENDIHRvIGZpbmQKK3RoZW0gYW5kIGxpbmsgd2l0aCB0aGVtLiAgSGVyZSdzIGFuIGV4YW1wbGUgb2YgY29weWluZyBzb21lIGxpYnJhcmllcworZnJvbSBhIHRhcmdldCBtYWNoaW5lOgorCisgICAgIGZ0cCBUQVJHRVQtTUFDSElORQorICAgICBsY2QgL3Vzci9sb2NhbC9UQVJHRVQvbGliCisgICAgIGNkIC9saWIKKyAgICAgZ2V0IGxpYmMuYQorICAgICBjZCAvdXNyL2xpYgorICAgICBnZXQgbGliZy5hCisgICAgIGdldCBsaWJtLmEKKyAgICAgcXVpdAorCitUaGUgcHJlY2lzZSBzZXQgb2YgbGlicmFyaWVzIHlvdSdsbCBuZWVkLCBhbmQgdGhlaXIgbG9jYXRpb25zIG9uIHRoZQordGFyZ2V0IG1hY2hpbmUsIHZhcnkgZGVwZW5kaW5nIG9uIGl0cyBvcGVyYXRpbmcgc3lzdGVtLgorCisgICBNYW55IHRhcmdldHMgcmVxdWlyZSAic3RhcnQgZmlsZXMiIHN1Y2ggYXMgYGNydDAubycgYW5kIGBjcnRuLm8nCit3aGljaCBhcmUgbGlua2VkIGludG8gZWFjaCBleGVjdXRhYmxlOyB0aGVzZSB0b28gc2hvdWxkIGJlIHBsYWNlZCBpbgorYC91c3IvbG9jYWwvVEFSR0VUL2xpYicuICBUaGVyZSBtYXkgYmUgc2V2ZXJhbCBhbHRlcm5hdGl2ZXMgZm9yCitgY3J0MC5vJywgZm9yIHVzZSB3aXRoIHByb2ZpbGluZyBvciBvdGhlciBjb21waWxhdGlvbiBvcHRpb25zLiAgQ2hlY2sKK3lvdXIgdGFyZ2V0J3MgZGVmaW5pdGlvbiBvZiBgU1RBUlRGSUxFX1NQRUMnIHRvIGZpbmQgb3V0IHdoYXQgc3RhcnQKK2ZpbGVzIGl0IHVzZXMuICBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBjb3B5aW5nIHRoZXNlIGZpbGVzIGZyb20gYSB0YXJnZXQKK21hY2hpbmU6CisKKyAgICAgZnRwIFRBUkdFVC1NQUNISU5FCisgICAgIGxjZCAvdXNyL2xvY2FsL1RBUkdFVC9saWIKKyAgICAgcHJvbXB0CisgICAgIGNkIC9saWIKKyAgICAgbWdldCAqY3J0Ki5vCisgICAgIGNkIC91c3IvbGliCisgICAgIG1nZXQgKmNydCoubworICAgICBxdWl0CisKK2BsaWJnY2MuYScgYW5kIENyb3NzLUNvbXBpbGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIENvZGUgY29tcGlsZWQgYnkgR05VIENDIHVzZXMgY2VydGFpbiBydW50aW1lIHN1cHBvcnQgZnVuY3Rpb25zCitpbXBsaWNpdGx5LiAgU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseSB3aXRoCitHTlUgQ0MgaXRzZWxmLCBidXQgYSBmZXcgY2Fubm90IGJlLiAgVGhlc2UgcHJvYmxlbSBmdW5jdGlvbnMgYXJlIGluIHRoZQorc291cmNlIGZpbGUgYGxpYmdjYzEuYyc7IHRoZSBsaWJyYXJ5IG1hZGUgZnJvbSB0aGVtIGlzIGNhbGxlZAorYGxpYmdjYzEuYScuCisKKyAgIFdoZW4geW91IGJ1aWxkIGEgbmF0aXZlIGNvbXBpbGVyLCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIHdpdGgKK3NvbWUgb3RoZXIgY29tcGlsZXItdGhlIG9uZSB0aGF0IHlvdSB1c2UgZm9yIGJvb3RzdHJhcHBpbmcgR05VIENDLgorUHJlc3VtYWJseSBpdCBrbm93cyBob3cgdG8gb3BlbiBjb2RlIHRoZXNlIG9wZXJhdGlvbnMsIG9yIGVsc2Uga25vd3MgaG93Cit0byBjYWxsIHRoZSBydW4tdGltZSBlbXVsYXRpb24gZmFjaWxpdGllcyB0aGF0IHRoZSBtYWNoaW5lIGNvbWVzIHdpdGguCitCdXQgdGhpcyBhcHByb2FjaCBkb2Vzbid0IHdvcmsgZm9yIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZXIuICBUaGUKK2NvbXBpbGVyIHRoYXQgeW91IHVzZSBmb3IgYnVpbGRpbmcga25vd3MgYWJvdXQgdGhlIGhvc3Qgc3lzdGVtLCBub3QgdGhlCit0YXJnZXQgc3lzdGVtLgorCisgICBTbywgd2hlbiB5b3UgYnVpbGQgYSBjcm9zcy1jb21waWxlciB5b3UgaGF2ZSB0byBzdXBwbHkgYSBzdWl0YWJsZQorbGlicmFyeSBgbGliZ2NjMS5hJyB0aGF0IGRvZXMgdGhlIGpvYiBpdCBpcyBleHBlY3RlZCB0byBkby4KKworICAgVG8gY29tcGlsZSBgbGliZ2NjMS5jJyB3aXRoIHRoZSBjcm9zcy1jb21waWxlciBpdHNlbGYgZG9lcyBub3Qgd29yay4KK1RoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBzdXBwb3NlZCB0byBpbXBsZW1lbnQgYXJpdGhtZXRpYworb3BlcmF0aW9ucyB0aGF0IEdOVSBDQyBkb2VzIG5vdCBrbm93IGhvdyB0byBvcGVuIGNvZGUgZm9yIHlvdXIgdGFyZ2V0CittYWNoaW5lLiAgSWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21waWxlZCB3aXRoIEdOVSBDQyBpdHNlbGYsIHRoZXkgd2lsbAorY29tcGlsZSBpbnRvIGluZmluaXRlIHJlY3Vyc2lvbi4KKworICAgT24gYW55IGdpdmVuIHRhcmdldCwgbW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBuZWVkZWQuICBJZiBHTlUKK0NDIGNhbiBvcGVuIGNvZGUgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24sIGl0IHdpbGwgbm90IGNhbGwgdGhlc2UKK2Z1bmN0aW9ucyB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uICBJdCBpcyBwb3NzaWJsZSB0aGF0IG9uIHlvdXIgdGFyZ2V0CittYWNoaW5lLCBub25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBuZWVkZWQuICBJZiBzbywgeW91IGNhbiBzdXBwbHkgYW4KK2VtcHR5IGxpYnJhcnkgYXMgYGxpYmdjYzEuYScuCisKKyAgIE1hbnkgdGFyZ2V0cyBuZWVkIGxpYnJhcnkgc3VwcG9ydCBvbmx5IGZvciBtdWx0aXBsaWNhdGlvbiBhbmQKK2RpdmlzaW9uLiAgSWYgeW91IGFyZSBsaW5raW5nIHdpdGggYSBsaWJyYXJ5IHRoYXQgY29udGFpbnMgZnVuY3Rpb25zIGZvcgorbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uLCB5b3UgY2FuIHRlbGwgR05VIENDIHRvIGNhbGwgdGhlbSBkaXJlY3RseQorYnkgZGVmaW5pbmcgdGhlIG1hY3JvcyBgTVVMU0kzX0xJQkNBTEwnLCBhbmQgdGhlIGxpa2UuICBUaGVzZSBtYWNyb3MKK25lZWQgdG8gYmUgZGVmaW5lZCBpbiB0aGUgdGFyZ2V0IGRlc2NyaXB0aW9uIG1hY3JvIGZpbGUuICBGb3Igc29tZQordGFyZ2V0cywgdGhleSBhcmUgZGVmaW5lZCBhbHJlYWR5LiAgVGhpcyBtYXkgYmUgc3VmZmljaWVudCB0byBhdm9pZCB0aGUKK25lZWQgZm9yIGxpYmdjYzEuYTsgaWYgc28sIHlvdSBjYW4gc3VwcGx5IGFuIGVtcHR5IGxpYnJhcnkuCisKKyAgIFNvbWUgdGFyZ2V0cyBkbyBub3QgaGF2ZSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnM7IHRoZXkgbmVlZCBvdGhlcgorZnVuY3Rpb25zIGluIGBsaWJnY2MxLmEnLCB3aGljaCBkbyBmbG9hdGluZyBhcml0aG1ldGljLiAgUmVjZW50Cit2ZXJzaW9ucyBvZiBHTlUgQ0MgaGF2ZSBhIGZpbGUgd2hpY2ggZW11bGF0ZXMgZmxvYXRpbmcgcG9pbnQuICBXaXRoIGEKK2NlcnRhaW4gYW1vdW50IG9mIHdvcmssIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb25zdHJ1Y3QgYSBmbG9hdGluZworcG9pbnQgZW11bGF0b3IgdGhhdCBjYW4gYmUgdXNlZCBhcyBgbGliZ2NjMS5hJy4gIFBlcmhhcHMgZnV0dXJlCit2ZXJzaW9ucyB3aWxsIGNvbnRhaW4gY29kZSB0byBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgYW5kIGNvbnZlbmllbnRseS4KK1RoYXQgZGVwZW5kcyBvbiB3aGV0aGVyIHNvbWVvbmUgd2FudHMgdG8gaW1wbGVtZW50IGl0LgorCisgICBTb21lIGVtYmVkZGVkIHRhcmdldHMgY29tZSB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGBsaWJnY2MxLmEnCityb3V0aW5lcyB3cml0dGVuIGluIEMgb3IgYXNzZW1ibGVyLiAgVGhlc2UgdGFyZ2V0cyBidWlsZCBgbGliZ2NjMS5hJworYXV0b21hdGljYWxseSBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIHRoZW0uCitPdGhlciBlbWJlZGRlZCB0YXJnZXRzIGRvIG5vdCBuZWVkIGFueSBgbGliZ2NjMS5hJyByb3V0aW5lcyBzaW5jZSBhbGwKK3RoZSBuZWNlc3Nhcnkgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4KKworICAgSWYgeW91ciB0YXJnZXQgc3lzdGVtIGhhcyBhbm90aGVyIEMgY29tcGlsZXIsIHlvdSBjYW4gY29uZmlndXJlIEdOVQorQ0MgYXMgYSBuYXRpdmUgY29tcGlsZXIgb24gdGhhdCBtYWNoaW5lLCBidWlsZCBqdXN0IGBsaWJnY2MxLmEnIHdpdGgKK2BtYWtlIGxpYmdjYzEuYScgb24gdGhhdCBtYWNoaW5lLCBhbmQgdXNlIHRoZSByZXN1bHRpbmcgZmlsZSB3aXRoIHRoZQorY3Jvc3MtY29tcGlsZXIuICBUbyBkbyB0aGlzLCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgb24gdGhlIHRhcmdldAorbWFjaGluZToKKworICAgICBjZCBUQVJHRVQtQlVJTEQtRElSCisgICAgIC4vY29uZmlndXJlIC0taG9zdD1zcGFyYyAtLXRhcmdldD1zdW4zCisgICAgIG1ha2UgbGliZ2NjMS5hCisKK0FuZCB0aGVuIHRoaXMgb24gdGhlIGhvc3QgbWFjaGluZToKKworICAgICBmdHAgVEFSR0VULU1BQ0hJTkUKKyAgICAgYmluYXJ5CisgICAgIGNkIFRBUkdFVC1CVUlMRC1ESVIKKyAgICAgZ2V0IGxpYmdjYzEuYQorICAgICBxdWl0CisKKyAgIEFub3RoZXIgd2F5IHRvIHByb3ZpZGUgdGhlIGZ1bmN0aW9ucyB5b3UgbmVlZCBpbiBgbGliZ2NjMS5hJyBpcyB0bworZGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBgcGVyZm9ybV8uLi4nIG1hY3JvcyBmb3IgdGhvc2UgZnVuY3Rpb25zLiAgSWYKK3RoZXNlIGRlZmluaXRpb25zIGRvIG5vdCB1c2UgdGhlIEMgYXJpdGhtZXRpYyBvcGVyYXRvcnMgdGhhdCB0aGV5IGFyZQorbWVhbnQgdG8gaW1wbGVtZW50LCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGVtIHdpdGggdGhlCitjcm9zcy1jb21waWxlciB5b3UgYXJlIGJ1aWxkaW5nLiAgKElmIHRoZXNlIGRlZmluaXRpb25zIGFscmVhZHkgZXhpc3QKK2ZvciB5b3VyIHRhcmdldCBmaWxlLCB0aGVuIHlvdSBhcmUgYWxsIHNldC4pCisKKyAgIFRvIGJ1aWxkIGBsaWJnY2MxLmEnIHVzaW5nIHRoZSBwZXJmb3JtIG1hY3JvcywgdXNlCitgTElCR0NDMT1saWJnY2MxLmEgT0xEQ0M9Li94Z2NjJyB3aGVuIGJ1aWxkaW5nIHRoZSBjb21waWxlci4KK090aGVyd2lzZSwgeW91IHNob3VsZCBwbGFjZSB5b3VyIHJlcGxhY2VtZW50IGxpYnJhcnkgdW5kZXIgdGhlIG5hbWUKK2BsaWJnY2MxLmEnIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHdpbGwgYnVpbGQgdGhlCitjcm9zcy1jb21waWxlciwgYmVmb3JlIHlvdSBydW4gYG1ha2UnLgorCitDcm9zcy1Db21waWxlcnMgYW5kIEhlYWRlciBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgSWYgeW91IGFyZSBjcm9zcy1jb21waWxpbmcgYSBzdGFuZGFsb25lIHByb2dyYW0gb3IgYSBwcm9ncmFtIGZvciBhbgorZW1iZWRkZWQgc3lzdGVtLCB0aGVuIHlvdSBtYXkgbm90IG5lZWQgYW55IGhlYWRlciBmaWxlcyBleGNlcHQgdGhlIGZldwordGhhdCBhcmUgcGFydCBvZiBHTlUgQ0MgKGFuZCB0aG9zZSBvZiB5b3VyIHByb2dyYW0pLiAgSG93ZXZlciwgaWYgeW91CitpbnRlbmQgdG8gbGluayB5b3VyIHByb2dyYW0gd2l0aCBhIHN0YW5kYXJkIEMgbGlicmFyeSBzdWNoIGFzIGBsaWJjLmEnLAordGhlbiB5b3UgcHJvYmFibHkgbmVlZCB0byBjb21waWxlIHdpdGggdGhlIGhlYWRlciBmaWxlcyB0aGF0IGdvIHdpdGgKK3RoZSBsaWJyYXJ5IHlvdSB1c2UuCisKKyAgIFRoZSBHTlUgQyBjb21waWxlciBkb2VzIG5vdCBjb21lIHdpdGggdGhlc2UgZmlsZXMsIGJlY2F1c2UgKDEpIHRoZXkKK2FyZSBzeXN0ZW0tc3BlY2lmaWMsIGFuZCAoMikgdGhleSBiZWxvbmcgaW4gYSBDIGxpYnJhcnksIG5vdCBpbiBhCitjb21waWxlci4KKworICAgSWYgdGhlIEdOVSBDIGxpYnJhcnkgc3VwcG9ydHMgeW91ciB0YXJnZXQgbWFjaGluZSwgdGhlbiB5b3UgY2FuIGdldAordGhlIGhlYWRlciBmaWxlcyBmcm9tIHRoZXJlIChhc3N1bWluZyB5b3UgYWN0dWFsbHkgdXNlIHRoZSBHTlUgbGlicmFyeQord2hlbiB5b3UgbGluayB5b3VyIHByb2dyYW0pLgorCisgICBJZiB5b3VyIHRhcmdldCBtYWNoaW5lIGNvbWVzIHdpdGggYSBDIGNvbXBpbGVyLCBpdCBwcm9iYWJseSBjb21lcword2l0aCBzdWl0YWJsZSBoZWFkZXIgZmlsZXMgYWxzby4gIElmIHlvdSBtYWtlIHRoZXNlIGZpbGVzIGFjY2Vzc2libGUKK2Zyb20gdGhlIGhvc3QgbWFjaGluZSwgdGhlIGNyb3NzLWNvbXBpbGVyIGNhbiB1c2UgdGhlbSBhbHNvLgorCisgICBPdGhlcndpc2UsIHlvdSdyZSBvbiB5b3VyIG93biBpbiBmaW5kaW5nIGhlYWRlciBmaWxlcyB0byB1c2Ugd2hlbgorY3Jvc3MtY29tcGlsaW5nLgorCisgICBXaGVuIHlvdSBoYXZlIGZvdW5kIHN1aXRhYmxlIGhlYWRlciBmaWxlcywgcHV0IHRoZW0gaW4KK2AvdXNyL2xvY2FsL1RBUkdFVC9pbmNsdWRlJywgYmVmb3JlIGJ1aWxkaW5nIHRoZSBjcm9zcyBjb21waWxlci4gIFRoZW4KK2luc3RhbGxhdGlvbiB3aWxsIHJ1biBmaXhpbmNsdWRlcyBwcm9wZXJseSBhbmQgaW5zdGFsbCB0aGUgY29ycmVjdGVkCit2ZXJzaW9ucyBvZiB0aGUgaGVhZGVyIGZpbGVzIHdoZXJlIHRoZSBjb21waWxlciB3aWxsIHVzZSB0aGVtLgorCisgICBQcm92aWRlIHRoZSBoZWFkZXIgZmlsZXMgYmVmb3JlIHlvdSBidWlsZCB0aGUgY3Jvc3MtY29tcGlsZXIsIGJlY2F1c2UKK3RoZSBidWlsZCBzdGFnZSBhY3R1YWxseSBydW5zIHRoZSBjcm9zcy1jb21waWxlciB0byBwcm9kdWNlIHBhcnRzIG9mCitgbGliZ2NjLmEnLiAgKFRoZXNlIGFyZSB0aGUgcGFydHMgdGhhdCAqY2FuKiBiZSBjb21waWxlZCB3aXRoIEdOVSBDQy4pCitTb21lIG9mIHRoZW0gbmVlZCBzdWl0YWJsZSBoZWFkZXIgZmlsZXMuCisKKyAgIEhlcmUncyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIGNvcHkgdGhlIGhlYWRlciBmaWxlcyBmcm9tIGEgdGFyZ2V0CittYWNoaW5lLiAgT24gdGhlIHRhcmdldCBtYWNoaW5lLCBkbyB0aGlzOgorCisgICAgIChjZCAvdXNyL2luY2x1ZGU7IHRhciBjZiAtIC4pID4gdGFyZmlsZQorCisgICBUaGVuLCBvbiB0aGUgaG9zdCBtYWNoaW5lLCBkbyB0aGlzOgorCisgICAgIGZ0cCBUQVJHRVQtTUFDSElORQorICAgICBsY2QgL3Vzci9sb2NhbC9UQVJHRVQvaW5jbHVkZQorICAgICBnZXQgdGFyZmlsZQorICAgICBxdWl0CisgICAgIHRhciB4ZiB0YXJmaWxlCisKK0FjdHVhbGx5IEJ1aWxkaW5nIHRoZSBDcm9zcy1Db21waWxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIE5vdyB5b3UgY2FuIHByb2NlZWQganVzdCBhcyBmb3IgY29tcGlsaW5nIGEgc2luZ2xlLW1hY2hpbmUgY29tcGlsZXIKK3Rocm91Z2ggdGhlIHN0ZXAgb2YgYnVpbGRpbmcgc3RhZ2UgMS4gIElmIHlvdSBoYXZlIG5vdCBwcm92aWRlZCBzb21lCitzb3J0IG9mIGBsaWJnY2MxLmEnLCB0aGVuIGNvbXBpbGF0aW9uIHdpbGwgZ2l2ZSB1cCBhdCB0aGUgcG9pbnQgd2hlcmUKK2l0IG5lZWRzIHRoYXQgZmlsZSwgcHJpbnRpbmcgYSBzdWl0YWJsZSBlcnJvciBtZXNzYWdlLiAgSWYgeW91IGRvCitwcm92aWRlIGBsaWJnY2MxLmEnLCB0aGVuIGJ1aWxkaW5nIHRoZSBjb21waWxlciB3aWxsIGF1dG9tYXRpY2FsbHkKK2NvbXBpbGUgYW5kIGxpbmsgYSB0ZXN0IHByb2dyYW0gY2FsbGVkIGBsaWJnY2MxLXRlc3QnOyBpZiB5b3UgZ2V0CitlcnJvcnMgaW4gdGhlIGxpbmtpbmcsIGl0IG1lYW5zIHRoYXQgbm90IGFsbCBvZiB0aGUgbmVjZXNzYXJ5IHJvdXRpbmVzCitpbiBgbGliZ2NjMS5hJyBhcmUgYXZhaWxhYmxlLgorCisgICBZb3UgbXVzdCBwcm92aWRlIHRoZSBoZWFkZXIgZmlsZSBgZmxvYXQuaCcuICBPbmUgd2F5IHRvIGRvIHRoaXMgaXMKK3RvIGNvbXBpbGUgYGVucXVpcmUnIGFuZCBydW4gaXQgb24geW91ciB0YXJnZXQgbWFjaGluZS4gIFRoZSBqb2Igb2YKK2BlbnF1aXJlJyBpcyB0byBydW4gb24gdGhlIHRhcmdldCBtYWNoaW5lIGFuZCBmaWd1cmUgb3V0IGJ5IGV4cGVyaW1lbnQKK3RoZSBuYXR1cmUgb2YgaXRzIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLiAgYGVucXVpcmUnIHJlY29yZHMgaXRzCitmaW5kaW5ncyBpbiB0aGUgaGVhZGVyIGZpbGUgYGZsb2F0LmgnLiAgSWYgeW91IGNhbid0IHByb2R1Y2UgdGhpcyBmaWxlCitieSBydW5uaW5nIGBlbnF1aXJlJyBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUsIHRoZW4geW91IHdpbGwgbmVlZCB0byBjb21lCit1cCB3aXRoIGEgc3VpdGFibGUgYGZsb2F0LmgnIGluIHNvbWUgb3RoZXIgd2F5IChvciBlbHNlLCBhdm9pZCB1c2luZyBpdAoraW4geW91ciBwcm9ncmFtcykuCisKKyAgIERvIG5vdCB0cnkgdG8gYnVpbGQgc3RhZ2UgMiBmb3IgYSBjcm9zcy1jb21waWxlci4gIEl0IGRvZXNuJ3Qgd29yayB0bworcmVidWlsZCBHTlUgQ0MgYXMgYSBjcm9zcy1jb21waWxlciB1c2luZyB0aGUgY3Jvc3MtY29tcGlsZXIsIGJlY2F1c2UKK3RoYXQgd291bGQgcHJvZHVjZSBhIHByb2dyYW0gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwgbm90IG9uIHRoZQoraG9zdC4gIEZvciBleGFtcGxlLCBpZiB5b3UgY29tcGlsZSBhIDM4Ni10by02ODAzMCBjcm9zcy1jb21waWxlciB3aXRoCitpdHNlbGYsIHRoZSByZXN1bHQgd2lsbCBub3QgYmUgcmlnaHQgZWl0aGVyIGZvciB0aGUgMzg2IChiZWNhdXNlIGl0IHdhcworY29tcGlsZWQgaW50byA2ODAzMCBjb2RlKSBvciBmb3IgdGhlIDY4MDMwIChiZWNhdXNlIGl0IHdhcyBjb25maWd1cmVkCitmb3IgYSAzODYgYXMgdGhlIGhvc3QpLiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBHTlUgQ0MgaW50byA2ODAzMCBjb2RlLAord2hldGhlciB5b3UgY29tcGlsZSBpdCBvbiBhIDY4MDMwIG9yIHdpdGggYSBjcm9zcy1jb21waWxlciBvbiBhIDM4NiwgeW91CittdXN0IHNwZWNpZnkgYSA2ODAzMCBhcyB0aGUgaG9zdCB3aGVuIHlvdSBjb25maWd1cmUgaXQuCisKKyAgIFRvIGluc3RhbGwgdGhlIGNyb3NzLWNvbXBpbGVyLCB1c2UgYG1ha2UgaW5zdGFsbCcsIGFzIHVzdWFsLgorCitJbnN0YWxsaW5nIEdOVSBDQyBvbiB0aGUgU3VuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIE9uIFNvbGFyaXMgKHZlcnNpb24gMi4xKSwgZG8gbm90IHVzZSB0aGUgbGlua2VyIG9yIG90aGVyIHRvb2xzIGluCitgL3Vzci91Y2InIHRvIGJ1aWxkIEdOVSBDQy4gIFVzZSBgL3Vzci9jY3MvYmluJy4KKworICAgTWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgRkxPQVRfT1BUSU9OJyBpcyBub3Qgc2V0IHdoZW4KK3lvdSBjb21waWxlIGBsaWJnY2MuYScuICBJZiB0aGlzIG9wdGlvbiB3ZXJlIHNldCB0byBgZjY4ODgxJyB3aGVuCitgbGliZ2NjLmEnIGlzIGNvbXBpbGVkLCB0aGUgcmVzdWx0aW5nIGNvZGUgd291bGQgZGVtYW5kIHRvIGJlIGxpbmtlZAord2l0aCBhIHNwZWNpYWwgc3RhcnR1cCBmaWxlIGFuZCB3b3VsZCBub3QgbGluayBwcm9wZXJseSB3aXRob3V0IHNwZWNpYWwKK3BhaW5zLgorCisgICBUaGVyZSBpcyBhIGJ1ZyBpbiBgYWxsb2NhJyBpbiBjZXJ0YWluIHZlcnNpb25zIG9mIHRoZSBTdW4gbGlicmFyeS4KK1RvIGF2b2lkIHRoaXMgYnVnLCBpbnN0YWxsIHRoZSBiaW5hcmllcyBvZiBHTlUgQ0MgdGhhdCB3ZXJlIGNvbXBpbGVkIGJ5CitHTlUgQ0MuICBUaGV5IHVzZSBgYWxsb2NhJyBhcyBhIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBuZXZlciB0aGUgb25lIGluCit0aGUgbGlicmFyeS4KKworICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgU3VuIGNvbXBpbGVyIGNyYXNoIHdoZW4gY29tcGlsaW5nIEdOVSBDQy4gIFRoZQorcHJvYmxlbSBpcyBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBjcHAuICBUaGlzIHByb2JsZW0gc2VlbXMgdG8gYmUgZHVlIHRvCit0aGUgYnVsayBvZiBkYXRhIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBZb3UgbWF5IGJlIGFibGUgdG8gYXZvaWQKK2l0IGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBjb21waWxlIEdOVSBDQyB3aXRoIFN1biBDQzoKKworICAgICBtYWtlIENDPSJURVJNQ0FQPXggT0JKUz14IExJQkZVTkNTPXggU1RBR0VTVFVGRj14IGNjIgorCitJbnN0YWxsaW5nIEdOVSBDQyBvbiBWTVMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBUaGUgVk1TIHZlcnNpb24gb2YgR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIGEgYmFja3VwIHNhdmVzZXQKK2NvbnRhaW5pbmcgYm90aCBzb3VyY2UgY29kZSBhbmQgcHJlY29tcGlsZWQgYmluYXJpZXMuCisKKyAgIFRvIGluc3RhbGwgdGhlIGBnY2MnIGNvbW1hbmQgc28geW91IGNhbiB1c2UgdGhlIGNvbXBpbGVyIGVhc2lseSwgaW4KK3RoZSBzYW1lIG1hbm5lciBhcyB5b3UgdXNlIHRoZSBWTVMgQyBjb21waWxlciwgeW91IG11c3QgaW5zdGFsbCB0aGUgVk1TCitDTEQgZmlsZSBmb3IgR05VIENDIGFzIGZvbGxvd3M6CisKKyAgMS4gRGVmaW5lIHRoZSBWTVMgbG9naWNhbCBuYW1lcyBgR05VX0NDJyBhbmQgYEdOVV9DQ19JTkNMVURFJyB0bworICAgICBwb2ludCB0byB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgdGhlIEdOVSBDQyBleGVjdXRhYmxlcworICAgICAoYGdjYy1jcHAuZXhlJywgYGdjYy1jYzEuZXhlJywgZXRjLikgYW5kIHRoZSBDIGluY2x1ZGUgZmlsZXMgYXJlCisgICAgIGtlcHQgcmVzcGVjdGl2ZWx5LiAgVGhpcyBzaG91bGQgYmUgZG9uZSB3aXRoIHRoZSBjb21tYW5kczoKKworICAgICAgICAgICQgYXNzaWduIC9zeXN0ZW0gL3RyYW5zbGF0aW9uPWNvbmNlYWxlZCAtCisgICAgICAgICAgICBkaXNrOltnY2MuXSBnbnVfY2MKKyAgICAgICAgICAkIGFzc2lnbiAvc3lzdGVtIC90cmFuc2xhdGlvbj1jb25jZWFsZWQgLQorICAgICAgICAgICAgZGlzazpbZ2NjLmluY2x1ZGUuXSBnbnVfY2NfaW5jbHVkZQorCisgICAgIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRpc2sgYW5kIGRpcmVjdG9yeSBuYW1lcy4gIFRoZXNlIGNvbW1hbmRzIGNhbgorICAgICBiZSBwbGFjZWQgaW4geW91ciBzeXN0ZW0gc3RhcnR1cCBmaWxlIHNvIHRoZXkgd2lsbCBiZSBleGVjdXRlZAorICAgICB3aGVuZXZlciB0aGUgbWFjaGluZSBpcyByZWJvb3RlZC4gIFlvdSBtYXksIGlmIHlvdSBjaG9vc2UsIGRvIHRoaXMKKyAgICAgdmlhIHRoZSBgR0NDX0lOU1RBTEwuQ09NJyBzY3JpcHQgaW4gdGhlIGBbR0NDXScgZGlyZWN0b3J5LgorCisgIDIuIEluc3RhbGwgdGhlIGBHQ0MnIGNvbW1hbmQgd2l0aCB0aGUgY29tbWFuZCBsaW5lOgorCisgICAgICAgICAgJCBzZXQgY29tbWFuZCAvdGFibGU9c3lzJGNvbW1vbjpbc3lzbGliXWRjbHRhYmxlcyAtCisgICAgICAgICAgICAvb3V0cHV0PXN5cyRjb21tb246W3N5c2xpYl1kY2x0YWJsZXMgZ251X2NjOlswMDAwMDBdZ2NjCisgICAgICAgICAgJCBpbnN0YWxsIHJlcGxhY2Ugc3lzJGNvbW1vbjpbc3lzbGliXWRjbHRhYmxlcworCisgIDMuIFRvIGluc3RhbGwgdGhlIGhlbHAgZmlsZSwgZG8gdGhlIGZvbGxvd2luZzoKKworICAgICAgICAgICQgbGlicmFyeS9oZWxwIHN5cyRsaWJyYXJ5OmhlbHBsaWIuaGxiIGdjYy5obHAKKworICAgICBOb3cgeW91IGNhbiBpbnZva2UgdGhlIGNvbXBpbGVyIHdpdGggYSBjb21tYW5kIGxpa2UgYGdjYyAvdmVyYm9zZQorICAgICBmaWxlLmMnLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBjb21tYW5kIGBnY2MgLXYgLWMgZmlsZS5jJyBpbgorICAgICBVbml4LgorCisgICBJZiB5b3Ugd2lzaCB0byB1c2UgR05VIEMrKyB5b3UgbXVzdCBmaXJzdCBpbnN0YWxsIEdOVSBDQywgYW5kIHRoZW4KK3BlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKworICAxLiBEZWZpbmUgdGhlIFZNUyBsb2dpY2FsIG5hbWUgYEdOVV9HWFhfSU5DTFVERScgdG8gcG9pbnQgdG8gdGhlCisgICAgIGRpcmVjdG9yeSB3aGVyZSB0aGUgcHJlcHJvY2Vzc29yIHdpbGwgc2VhcmNoIGZvciB0aGUgQysrIGhlYWRlcgorICAgICBmaWxlcy4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgY29tbWFuZDoKKworICAgICAgICAgICQgYXNzaWduIC9zeXN0ZW0gL3RyYW5zbGF0aW9uPWNvbmNlYWxlZCAtCisgICAgICAgICAgICBkaXNrOltnY2MuZ3h4X2luY2x1ZGUuXSBnbnVfZ3h4X2luY2x1ZGUKKworICAgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkaXNrIGFuZCBkaXJlY3RvcnkgbmFtZS4gIElmIHlvdSBhcmUgZ29pbmcgdG8KKyAgICAgYmUgdXNpbmcgbGliZysrLCB0aGlzIGlzIHdoZXJlIHRoZSBsaWJnKysgaW5zdGFsbCBwcm9jZWR1cmUgd2lsbAorICAgICBpbnN0YWxsIHRoZSBsaWJnKysgaGVhZGVyIGZpbGVzLgorCisgIDIuIE9idGFpbiB0aGUgZmlsZSBgZ2NjLWNjMXBsdXMuZXhlJywgYW5kIHBsYWNlIHRoaXMgaW4gdGhlIHNhbWUKKyAgICAgZGlyZWN0b3J5IHRoYXQgYGdjYy1jYzEuZXhlJyBpcyBrZXB0LgorCisgICAgIFRoZSBHTlUgQysrIGNvbXBpbGVyIGNhbiBiZSBpbnZva2VkIHdpdGggYSBjb21tYW5kIGxpa2UgYGdjYyAvcGx1cworICAgICAvdmVyYm9zZSBmaWxlLmNjJywgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgY29tbWFuZCBgZysrIC12IC1jCisgICAgIGZpbGUuY2MnIGluIFVuaXguCisKKyAgIFdlIHRyeSB0byBwdXQgY29ycmVzcG9uZGluZyBiaW5hcmllcyBhbmQgc291cmNlcyBvbiB0aGUgVk1TCitkaXN0cmlidXRpb24gdGFwZS4gIEJ1dCBzb21ldGltZXMgdGhlIGJpbmFyaWVzIHdpbGwgYmUgZnJvbSBhbiBvbGRlcgordmVyc2lvbiB0aGFuIHRoZSBzb3VyY2VzLCBiZWNhdXNlIHdlIGRvbid0IGFsd2F5cyBoYXZlIHRpbWUgdG8gdXBkYXRlCit0aGVtLiAgKFVzZSB0aGUgYC92ZXJzaW9uJyBvcHRpb24gdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIG51bWJlciBvZgordGhlIGJpbmFyaWVzIGFuZCBjb21wYXJlIGl0IHdpdGggdGhlIHNvdXJjZSBmaWxlIGB2ZXJzaW9uLmMnIHRvIHRlbGwKK3doZXRoZXIgdGhpcyBpcyBzby4pICBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgdXNlIHRoZSBiaW5hcmllcyB5b3UgZ2V0Cit0byByZWNvbXBpbGUgdGhlIHNvdXJjZXMuICBJZiB5b3UgbXVzdCByZWNvbXBpbGUsIGhlcmUgaXMgaG93OgorCisgIDEuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgcHJvY2VkdXJlIGB2bXNjb25maWcuY29tJyB0byBzZXQgdXAgdGhlIGZpbGVzCisgICAgIGB0bS5oJywgYGNvbmZpZy5oJywgYGF1eC1vdXRwdXQuYycsIGFuZCBgbWQuJywgYW5kIHRvIGNyZWF0ZSBmaWxlcworICAgICBgdGNvbmZpZy5oJyBhbmQgYGhjb25maWcuaCcuICBUaGlzIHByb2NlZHVyZSBhbHNvIGNyZWF0ZXMgc2V2ZXJhbAorICAgICBsaW5rZXIgb3B0aW9uIGZpbGVzIHVzZWQgYnkgYG1ha2UtY2MxLmNvbScgYW5kIGEgZGF0YSBmaWxlIHVzZWQgYnkKKyAgICAgYG1ha2UtbDIuY29tJy4KKworICAgICAgICAgICQgQHZtc2NvbmZpZy5jb20KKworICAyLiBTZXR1cCB0aGUgbG9naWNhbCBuYW1lcyBhbmQgY29tbWFuZCB0YWJsZXMgYXMgZGVmaW5lZCBhYm92ZS4gIEluCisgICAgIGFkZGl0aW9uLCBkZWZpbmUgdGhlIFZNUyBsb2dpY2FsIG5hbWUgYEdOVV9CSVNPTicgdG8gcG9pbnQgYXQgdGhlCisgICAgIHRvIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB0aGUgQmlzb24gZXhlY3V0YWJsZSBpcyBrZXB0LiAgVGhpcworICAgICBzaG91bGQgYmUgZG9uZSB3aXRoIHRoZSBjb21tYW5kOgorCisgICAgICAgICAgJCBhc3NpZ24gL3N5c3RlbSAvdHJhbnNsYXRpb249Y29uY2VhbGVkIC0KKyAgICAgICAgICAgIGRpc2s6W2Jpc29uLl0gZ251X2Jpc29uCisKKyAgICAgWW91IG1heSwgaWYgeW91IGNob29zZSwgdXNlIHRoZSBgSU5TVEFMTF9CSVNPTi5DT00nIHNjcmlwdCBpbiB0aGUKKyAgICAgYFtCSVNPTl0nIGRpcmVjdG9yeS4KKworICAzLiBJbnN0YWxsIHRoZSBgQklTT04nIGNvbW1hbmQgd2l0aCB0aGUgY29tbWFuZCBsaW5lOgorCisgICAgICAgICAgJCBzZXQgY29tbWFuZCAvdGFibGU9c3lzJGNvbW1vbjpbc3lzbGliXWRjbHRhYmxlcyAtCisgICAgICAgICAgICAvb3V0cHV0PXN5cyRjb21tb246W3N5c2xpYl1kY2x0YWJsZXMgLQorICAgICAgICAgICAgZ251X2Jpc29uOlswMDAwMDBdYmlzb24KKyAgICAgICAgICAkIGluc3RhbGwgcmVwbGFjZSBzeXMkY29tbW9uOltzeXNsaWJdZGNsdGFibGVzCisKKyAgNC4gVHlwZSBgQG1ha2UtZ2NjJyB0byByZWNvbXBpbGUgZXZlcnl0aGluZyAoYWx0ZXJuYXRpdmVseSwgc3VibWl0CisgICAgIHRoZSBmaWxlIGBtYWtlLWdjYy5jb20nIHRvIGEgYmF0Y2ggcXVldWUpLiAgSWYgeW91IHdpc2ggdG8gYnVpbGQKKyAgICAgdGhlIEdOVSBDKysgY29tcGlsZXIgYXMgd2VsbCBhcyB0aGUgR05VIENDIGNvbXBpbGVyLCB5b3UgbXVzdAorICAgICBmaXJzdCBlZGl0IGBtYWtlLWdjYy5jb20nIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyB0aGF0IGFwcGVhcgorICAgICBpbiB0aGUgY29tbWVudHMuCisKKyAgNS4gSW4gb3JkZXIgdG8gdXNlIEdDQywgeW91IG5lZWQgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB3aGljaCBHQ0MKKyAgICAgY29tcGlsZWQgY29kZSB3aWxsIGNhbGwgdG8gcGVyZm9ybSBjZXJ0YWluIHRhc2tzLCBhbmQgdGhlc2UKKyAgICAgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBmaWxlIGBsaWJnY2MyLmMnLiAgVG8gY29tcGlsZSB0aGlzCisgICAgIHlvdSBzaG91bGQgdXNlIHRoZSBjb21tYW5kIHByb2NlZHVyZSBgbWFrZS1sMi5jb20nLCB3aGljaCB3aWxsCisgICAgIGdlbmVyYXRlIHRoZSBsaWJyYXJ5IGBsaWJnY2MyLm9sYicuICBgbGliZ2NjMi5vbGInIHNob3VsZCBiZSBidWlsdAorICAgICB1c2luZyB0aGUgY29tcGlsZXIgYnVpbHQgZnJvbSB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGhhdAorICAgICBgbGliZ2NjMi5jJyBjYW1lIGZyb20sIGFuZCBgbWFrZS1nY2MuY29tJyB3aWxsIGF1dG9tYXRpY2FsbHkgZG8KKyAgICAgYWxsIG9mIHRoaXMgZm9yIHlvdS4KKworICAgICBUbyBpbnN0YWxsIHRoZSBsaWJyYXJ5LCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworICAgICAgICAgICQgbGlicmFyeSBnbnVfY2M6WzAwMDAwMF1nY2NsaWIvZGVsZXRlPShuZXcsZXByaW50ZikKKyAgICAgICAgICAkIGxpYnJhcnkgZ251X2NjOlswMDAwMDBdZ2NjbGliL2RlbGV0ZT1MXyoKKyAgICAgICAgICAkIGxpYnJhcnkgbGliZ2NjMi9leHRyYWN0PSovb3V0cHV0PWxpYmdjYzIub2JqCisgICAgICAgICAgJCBsaWJyYXJ5IGdudV9jYzpbMDAwMDAwXWdjY2xpYiBsaWJnY2MyLm9iagorCisgICAgIFRoZSBmaXJzdCBjb21tYW5kIHNpbXBseSByZW1vdmVzIG9sZCBtb2R1bGVzIHRoYXQgd2lsbCBiZSByZXBsYWNlZAorICAgICB3aXRoIG1vZHVsZXMgZnJvbSBgbGliZ2NjMicgdW5kZXIgZGlmZmVyZW50IG1vZHVsZSBuYW1lcy4gIFRoZQorICAgICBtb2R1bGVzIGBuZXcnIGFuZCBgZXByaW50ZicgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50IGluIHlvdXIKKyAgICAgYGdjY2xpYi5vbGInLS1pZiB0aGUgVk1TIGxpYnJhcmlhbiBjb21wbGFpbnMgYWJvdXQgdGhvc2UgbW9kdWxlcworICAgICBub3QgYmVpbmcgcHJlc2VudCwgc2ltcGx5IGlnbm9yZSB0aGUgbWVzc2FnZSBhbmQgY29udGludWUgb24gd2l0aAorICAgICB0aGUgbmV4dCBjb21tYW5kLiAgVGhlIHNlY29uZCBjb21tYW5kIHJlbW92ZXMgdGhlIG1vZHVsZXMgdGhhdAorICAgICBjYW1lIGZyb20gdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgYGxpYmdjYzIuYycuCisKKyAgICAgV2hlbmV2ZXIgeW91IHVwZGF0ZSB0aGUgY29tcGlsZXIgb24geW91ciBzeXN0ZW0sIHlvdSBzaG91bGQgYWxzbworICAgICB1cGRhdGUgdGhlIGxpYnJhcnkgd2l0aCB0aGUgYWJvdmUgcHJvY2VkdXJlLgorCisgIDYuIFlvdSBtYXkgd2lzaCB0byBidWlsZCBHQ0MgaW4gc3VjaCBhIHdheSB0aGF0IG5vIGZpbGVzIGFyZSB3cml0dGVuCisgICAgIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHNvdXJjZSBmaWxlcyByZXNpZGUuICBBbiBleGFtcGxlIHdvdWxkCisgICAgIGJlIHRoZSB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlIG9uIGEgcmVhZC1vbmx5IGRpc2suICBJbiB0aGVzZQorICAgICBjYXNlcywgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIERDTCBjb21tYW5kcyAoc3Vic3RpdHV0aW5nIHlvdXIKKyAgICAgYWN0dWFsIHBhdGggbmFtZXMpOgorCisgICAgICAgICAgJCBhc3NpZ24gZHVhMDpbZ2NjLmJ1aWxkX2Rpci5dL3RyYW5zbGF0aW9uPWNvbmNlYWxlZCwgLQorICAgICAgICAgICAgICAgICAgIGR1YTE6W2djYy5zb3VyY2VfZGlyLl0vdHJhbnNsYXRpb249Y29uY2VhbGVkICBnY2NfYnVpbGQKKyAgICAgICAgICAkIHNldCBkZWZhdWx0IGdjY19idWlsZDpbMDAwMDAwXQorCisgICAgIHdoZXJlIHRoZSBkaXJlY3RvcnkgYGR1YTE6W2djYy5zb3VyY2VfZGlyXScgY29udGFpbnMgdGhlIHNvdXJjZQorICAgICBjb2RlLCBhbmQgdGhlIGRpcmVjdG9yeSBgZHVhMDpbZ2NjLmJ1aWxkX2Rpcl0nIGlzIG1lYW50IHRvIGNvbnRhaW4KKyAgICAgYWxsIG9mIHRoZSBnZW5lcmF0ZWQgb2JqZWN0IGZpbGVzIGFuZCBleGVjdXRhYmxlcy4gIE9uY2UgeW91IGhhdmUKKyAgICAgZG9uZSB0aGlzLCB5b3UgY2FuIHByb2NlZWQgYnVpbGRpbmcgR0NDIGFzIGRlc2NyaWJlZCBhYm92ZS4gIChLZWVwCisgICAgIGluIG1pbmQgdGhhdCBgZ2NjX2J1aWxkJyBpcyBhIHJvb3RlZCBsb2dpY2FsIG5hbWUsIGFuZCB0aHVzIHRoZQorICAgICBkZXZpY2UgbmFtZXMgaW4gZWFjaCBlbGVtZW50IG9mIHRoZSBzZWFyY2ggbGlzdCBtdXN0IGJlIGFuIGFjdHVhbAorICAgICBwaHlzaWNhbCBkZXZpY2UgbmFtZSByYXRoZXIgdGhhbiBhbm90aGVyIHJvb3RlZCBsb2dpY2FsIG5hbWUpLgorCisgIDcuICpJZiB5b3UgYXJlIGJ1aWxkaW5nIEdOVSBDQyB3aXRoIGEgcHJldmlvdXMgdmVyc2lvbiBvZiBHTlUgQ0MsIHlvdQorICAgICBhbHNvIHNob3VsZCBjaGVjayB0byBzZWUgdGhhdCB5b3UgaGF2ZSB0aGUgbmV3ZXN0IHZlcnNpb24gb2YgdGhlCisgICAgIGFzc2VtYmxlciouICBJbiBwYXJ0aWN1bGFyLCBHTlUgQ0MgdmVyc2lvbiAyIHRyZWF0cyBnbG9iYWwgY29uc3RhbnQKKyAgICAgdmFyaWFibGVzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gR05VIENDIHZlcnNpb24gMSwgYW5kIEdBUworICAgICB2ZXJzaW9uIDEuMzguMSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRjaGVzIHJlcXVpcmVkIHRvIHdvcmsgd2l0aCBHQ0MKKyAgICAgdmVyc2lvbiAyLiAgSWYgeW91IHVzZSBHQVMgMS4zOC4xLCB0aGVuIGBleHRlcm4gY29uc3QnIHZhcmlhYmxlcworICAgICB3aWxsIG5vdCBoYXZlIHRoZSByZWFkLW9ubHkgYml0IHNldCwgYW5kIHRoZSBsaW5rZXIgd2lsbCBnZW5lcmF0ZQorICAgICB3YXJuaW5nIG1lc3NhZ2VzIGFib3V0IG1pc21hdGNoZWQgcHNlY3QgYXR0cmlidXRlcyBmb3IgdGhlc2UKKyAgICAgdmFyaWFibGVzLiAgVGhlc2Ugd2FybmluZyBtZXNzYWdlcyBhcmUgbWVyZWx5IGEgbnVpc2FuY2UsIGFuZCBjYW4KKyAgICAgc2FmZWx5IGJlIGlnbm9yZWQuCisKKyAgICAgSWYgeW91IGFyZSBjb21waWxpbmcgd2l0aCBhIHZlcnNpb24gb2YgR05VIENDIG9sZGVyIHRoYW4gMS4zMywKKyAgICAgc3BlY2lmeSBgL0RFRklORT0oImlubGluZT0iKScgYXMgYW4gb3B0aW9uIGluIGFsbCB0aGUKKyAgICAgY29tcGlsYXRpb25zLiAgVGhpcyByZXF1aXJlcyBlZGl0aW5nIGFsbCB0aGUgYGdjYycgY29tbWFuZHMgaW4KKyAgICAgYG1ha2UtY2MxLmNvbScuICAoVGhlIG9sZGVyIHZlcnNpb25zIGhhZCBwcm9ibGVtcyBzdXBwb3J0aW5nCisgICAgIGBpbmxpbmUnLikgIE9uY2UgeW91IGhhdmUgYSB3b3JraW5nIDEuMzMgb3IgbmV3ZXIgR05VIENDLCB5b3UgY2FuCisgICAgIGNoYW5nZSB0aGlzIGZpbGUgYmFjay4KKworICA4LiBJZiB5b3Ugd2FudCB0byBidWlsZCBHTlUgQ0Mgd2l0aCB0aGUgVkFYIEMgY29tcGlsZXIsIHlvdSB3aWxsIG5lZWQKKyAgICAgdG8gbWFrZSBtaW5vciBjaGFuZ2VzIGluIGBtYWtlLWNjY3AuY29tJyBhbmQgYG1ha2UtY2MxLmNvbScgdG8KKyAgICAgY2hvb3NlIGFsdGVybmF0ZSBkZWZpbml0aW9ucyBvZiBgQ0MnLCBgQ0ZMQUdTJywgYW5kIGBMSUJTJy4gIFNlZQorICAgICBjb21tZW50cyBpbiB0aG9zZSBmaWxlcy4gIEhvd2V2ZXIsIHlvdSBtdXN0IGFsc28gaGF2ZSBhIHdvcmtpbmcKKyAgICAgdmVyc2lvbiBvZiB0aGUgR05VIGFzc2VtYmxlciAoR05VIGFzLCBha2EgR0FTKSBhcyBpdCBpcyB1c2VkIGFzCisgICAgIHRoZSBiYWNrLWVuZCBmb3IgR05VIENDIHRvIHByb2R1Y2UgYmluYXJ5IG9iamVjdCBtb2R1bGVzIGFuZCBpcworICAgICBub3QgaW5jbHVkZWQgaW4gdGhlIEdOVSBDQyBzb3VyY2VzLiAgR0FTIGlzIGFsc28gbmVlZGVkIHRvIGNvbXBpbGUKKyAgICAgYGxpYmdjYzInIGluIG9yZGVyIHRvIGJ1aWxkIGBnY2NsaWInIChzZWUgYWJvdmUpOyBgbWFrZS1sMi5jb20nCisgICAgIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBmaW5kIGl0IG9wZXJhdGlvbmFsIGluCisgICAgIGBnbnVfY2M6WzAwMDAwMF1nbnUtYXMuZXhlJy4KKworICAgICBUbyB1c2UgR05VIENDIG9uIFZNUywgeW91IG5lZWQgdGhlIFZNUyBkcml2ZXIgcHJvZ3JhbXMgYGdjYy5leGUnLAorICAgICBgZ2NjLmNvbScsIGFuZCBgZ2NjLmNsZCcuICBUaGV5IGFyZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBWTVMKKyAgICAgYmluYXJpZXMgKGBnY2Mtdm1zJykgcmF0aGVyIHRoYW4gdGhlIEdOVSBDQyBzb3VyY2VzLiAgR0FTIGlzIGFsc28KKyAgICAgaW5jbHVkZWQgaW4gYGdjYy12bXMnLCBhcyBpcyBCaXNvbi4KKworICAgICBPbmNlIHlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBidWlsdCBHTlUgQ0Mgd2l0aCBWQVggQywgeW91IHNob3VsZCB1c2UKKyAgICAgdGhlIHJlc3VsdGluZyBjb21waWxlciB0byByZWJ1aWxkIGl0c2VsZi4gIEJlZm9yZSBkb2luZyB0aGlzLCBiZQorICAgICBzdXJlIHRvIHJlc3RvcmUgdGhlIGBDQycsIGBDRkxBR1MnLCBhbmQgYExJQlMnIGRlZmluaXRpb25zIGluCisgICAgIGBtYWtlLWNjY3AuY29tJyBhbmQgYG1ha2UtY2MxLmNvbScuICBUaGUgc2Vjb25kIGdlbmVyYXRpb24KKyAgICAgY29tcGlsZXIgd2lsbCBiZSBhYmxlIHRvIHRha2UgYWR2YW50YWdlIG9mIG1hbnkgb3B0aW1pemF0aW9ucyB0aGF0CisgICAgIG11c3QgYmUgc3VwcHJlc3NlZCB3aGVuIGJ1aWxkaW5nIHdpdGggb3RoZXIgY29tcGlsZXJzLgorCisgICBVbmRlciBwcmV2aW91cyB2ZXJzaW9ucyBvZiBHTlUgQ0MsIHRoZSBnZW5lcmF0ZWQgY29kZSB3b3VsZAorb2NjYXNpb25hbGx5IGdpdmUgc3RyYW5nZSByZXN1bHRzIHdoZW4gbGlua2VkIHdpdGggdGhlIHNoYXJhYmxlCitgVkFYQ1JUTCcgbGlicmFyeS4gIE5vdyB0aGlzIHNob3VsZCB3b3JrLgorCisgICBFdmVuIHdpdGggdGhpcyB2ZXJzaW9uLCBob3dldmVyLCBHTlUgQ0MgaXRzZWxmIHNob3VsZCBub3QgYmUgbGlua2VkCit3aXRoIHRoZSBzaGFyYWJsZSBgVkFYQ1JUTCcuICBUaGUgdmVyc2lvbiBvZiBgcXNvcnQnIGluIGBWQVhDUlRMJyBoYXMgYQorYnVnIChrbm93biB0byBiZSBwcmVzZW50IGluIFZNUyB2ZXJzaW9ucyBWNC42IHRocm91Z2ggVjUuNSkgd2hpY2gKK2NhdXNlcyB0aGUgY29tcGlsZXIgdG8gZmFpbC4KKworICAgVGhlIGV4ZWN1dGFibGVzIGFyZSBnZW5lcmF0ZWQgYnkgYG1ha2UtY2MxLmNvbScgYW5kIGBtYWtlLWNjY3AuY29tJwordXNlIHRoZSBvYmplY3QgbGlicmFyeSB2ZXJzaW9uIG9mIGBWQVhDUlRMJyBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGUKK2Bxc29ydCcgcm91dGluZSBpbiBgZ2NjbGliLm9sYicuICBJZiB5b3Ugd2lzaCB0byBsaW5rIHRoZSBjb21waWxlcgorZXhlY3V0YWJsZXMgd2l0aCB0aGUgc2hhcmVhYmxlIGltYWdlIHZlcnNpb24gb2YgYFZBWENSVEwnLCB5b3Ugc2hvdWxkCitlZGl0IHRoZSBmaWxlIGB0bS5oJyAoY3JlYXRlZCBieSBgdm1zY29uZmlnLmNvbScpIHRvIGRlZmluZSB0aGUgbWFjcm8KK2BRU09SVF9XT1JLQVJPVU5EJy4KKworICAgYFFTT1JUX1dPUktBUk9VTkQnIGlzIGFsd2F5cyBkZWZpbmVkIHdoZW4gR05VIENDIGlzIGNvbXBpbGVkIHdpdGgKK1ZBWCBDLCB0byBhdm9pZCBhIHByb2JsZW0gaW4gY2FzZSBgZ2NjbGliLm9sYicgaXMgbm90IHlldCBhdmFpbGFibGUuCisKK2Bjb2xsZWN0MicKKz09PT09PT09PT0KKworICAgTWFueSB0YXJnZXQgc3lzdGVtcyBkbyBub3QgaGF2ZSBzdXBwb3J0IGluIHRoZSBhc3NlbWJsZXIgYW5kIGxpbmtlcgorZm9yICJjb25zdHJ1Y3RvcnMiLS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUKK29mZmljaWFsICJzdGFydCIgb2YgYG1haW4nLiAgT24gc3VjaCBzeXN0ZW1zLCBHTlUgQ0MgdXNlcyBhIHV0aWxpdHkKK2NhbGxlZCBgY29sbGVjdDInIHRvIGFycmFuZ2UgdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgYXQgc3RhcnQgdGltZS4KKworICAgVGhlIHByb2dyYW0gYGNvbGxlY3QyJyB3b3JrcyBieSBsaW5raW5nIHRoZSBwcm9ncmFtIG9uY2UgYW5kIGxvb2tpbmcKK3Rocm91Z2ggdGhlIGxpbmtlciBvdXRwdXQgZmlsZSBmb3Igc3ltYm9scyB3aXRoIHBhcnRpY3VsYXIgbmFtZXMKK2luZGljYXRpbmcgdGhleSBhcmUgY29uc3RydWN0b3IgZnVuY3Rpb25zLiAgSWYgaXQgZmluZHMgYW55LCBpdCBjcmVhdGVzCithIG5ldyB0ZW1wb3JhcnkgYC5jJyBmaWxlIGNvbnRhaW5pbmcgYSB0YWJsZSBvZiB0aGVtLCBjb21waWxlcyBpdCwgYW5kCitsaW5rcyB0aGUgcHJvZ3JhbSBhIHNlY29uZCB0aW1lIGluY2x1ZGluZyB0aGF0IGZpbGUuCisKKyAgIFRoZSBhY3R1YWwgY2FsbHMgdG8gdGhlIGNvbnN0cnVjdG9ycyBhcmUgY2FycmllZCBvdXQgYnkgYSBzdWJyb3V0aW5lCitjYWxsZWQgYF9fbWFpbicsIHdoaWNoIGlzIGNhbGxlZCAoYXV0b21hdGljYWxseSkgYXQgdGhlIGJlZ2lubmluZyBvZgordGhlIGJvZHkgb2YgYG1haW4nIChwcm92aWRlZCBgbWFpbicgd2FzIGNvbXBpbGVkIHdpdGggR05VIENDKS4gIENhbGxpbmcKK2BfX21haW4nIGlzIG5lY2Vzc2FyeSwgZXZlbiB3aGVuIGNvbXBpbGluZyBDIGNvZGUsIHRvIGFsbG93IGxpbmtpbmcgQworYW5kIEMrKyBvYmplY3QgY29kZSB0b2dldGhlci4gIChJZiB5b3UgdXNlIGAtbm9zdGRsaWInLCB5b3UgZ2V0IGFuCit1bnJlc29sdmVkIHJlZmVyZW5jZSB0byBgX19tYWluJywgc2luY2UgaXQncyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZAorR0NDIGxpYnJhcnkuICBJbmNsdWRlIGAtbGdjYycgYXQgdGhlIGVuZCBvZiB5b3VyIGNvbXBpbGVyIGNvbW1hbmQgbGluZQordG8gcmVzb2x2ZSB0aGlzIHJlZmVyZW5jZS4pCisKKyAgIFRoZSBwcm9ncmFtIGBjb2xsZWN0MicgaXMgaW5zdGFsbGVkIGFzIGBsZCcgaW4gdGhlIGRpcmVjdG9yeSB3aGVyZQordGhlIHBhc3NlcyBvZiB0aGUgY29tcGlsZXIgYXJlIGluc3RhbGxlZC4gIFdoZW4gYGNvbGxlY3QyJyBuZWVkcyB0bworZmluZCB0aGUgKnJlYWwqIGBsZCcsIGl0IHRyaWVzIHRoZSBmb2xsb3dpbmcgZmlsZSBuYW1lczoKKworICAgKiBgcmVhbC1sZCcgaW4gdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiB0aGUgY29tcGlsZXIncyBzZWFyY2gKKyAgICAgZGlyZWN0b3JpZXMuCisKKyAgICogYHJlYWwtbGQnIGluIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgIGBQQVRIJy4KKworICAgKiBUaGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlIGBSRUFMX0xEX0ZJTEVfTkFNRScgY29uZmlndXJhdGlvbiBtYWNybywKKyAgICAgaWYgc3BlY2lmaWVkLgorCisgICAqIGBsZCcgaW4gdGhlIGNvbXBpbGVyJ3Mgc2VhcmNoIGRpcmVjdG9yaWVzLCBleGNlcHQgdGhhdCBgY29sbGVjdDInCisgICAgIHdpbGwgbm90IGV4ZWN1dGUgaXRzZWxmIHJlY3Vyc2l2ZWx5LgorCisgICAqIGBsZCcgaW4gYFBBVEgnLgorCisgICAiVGhlIGNvbXBpbGVyJ3Mgc2VhcmNoIGRpcmVjdG9yaWVzIiBtZWFucyBhbGwgdGhlIGRpcmVjdG9yaWVzIHdoZXJlCitgZ2NjJyBzZWFyY2hlcyBmb3IgcGFzc2VzIG9mIHRoZSBjb21waWxlci4gIFRoaXMgaW5jbHVkZXMgZGlyZWN0b3JpZXMKK3RoYXQgeW91IHNwZWNpZnkgd2l0aCBgLUInLgorCisgICBDcm9zcy1jb21waWxlcnMgc2VhcmNoIGEgbGl0dGxlIGRpZmZlcmVudGx5OgorCisgICAqIGByZWFsLWxkJyBpbiB0aGUgY29tcGlsZXIncyBzZWFyY2ggZGlyZWN0b3JpZXMuCisKKyAgICogYFRBUkdFVC1yZWFsLWxkJyBpbiBgUEFUSCcuCisKKyAgICogVGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBgUkVBTF9MRF9GSUxFX05BTUUnIGNvbmZpZ3VyYXRpb24gbWFjcm8sCisgICAgIGlmIHNwZWNpZmllZC4KKworICAgKiBgbGQnIGluIHRoZSBjb21waWxlcidzIHNlYXJjaCBkaXJlY3Rvcmllcy4KKworICAgKiBgVEFSR0VULWxkJyBpbiBgUEFUSCcuCisKKyAgIGBjb2xsZWN0MicgZXhwbGljaXRseSBhdm9pZHMgcnVubmluZyBgbGQnIHVzaW5nIHRoZSBmaWxlIG5hbWUgdW5kZXIKK3doaWNoIGBjb2xsZWN0MicgaXRzZWxmIHdhcyBpbnZva2VkLiAgSW4gZmFjdCwgaXQgcmVtZW1iZXJzIHVwIGEgbGlzdAorb2Ygc3VjaCBuYW1lcy0taW4gY2FzZSBvbmUgY29weSBvZiBgY29sbGVjdDInIGZpbmRzIGFub3RoZXIgY29weSAob3IKK3ZlcnNpb24pIG9mIGBjb2xsZWN0MicgaW5zdGFsbGVkIGFzIGBsZCcgaW4gYSBzZWNvbmQgcGxhY2UgaW4gdGhlCitzZWFyY2ggcGF0aC4KKworICAgYGNvbGxlY3QyJyBzZWFyY2hlcyBmb3IgdGhlIHV0aWxpdGllcyBgbm0nIGFuZCBgc3RyaXAnIHVzaW5nIHRoZQorc2FtZSBhbGdvcml0aG0gYXMgYWJvdmUgZm9yIGBsZCcuCisKK1N0YW5kYXJkIEhlYWRlciBGaWxlIERpcmVjdG9yaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBgR0NDX0lOQ0xVREVfRElSJyBtZWFucyB0aGUgc2FtZSB0aGluZyBmb3IgbmF0aXZlIGFuZCBjcm9zcy4gIEl0IGlzCit3aGVyZSBHTlUgQ0Mgc3RvcmVzIGl0cyBwcml2YXRlIGluY2x1ZGUgZmlsZXMsIGFuZCBhbHNvIHdoZXJlIEdOVSBDQworc3RvcmVzIHRoZSBmaXhlZCBpbmNsdWRlIGZpbGVzLiAgQSBjcm9zcyBjb21waWxlZCBHTlUgQ0MgcnVucworYGZpeGluY2x1ZGVzJyBvbiB0aGUgaGVhZGVyIGZpbGVzIGluIGAkKHRvb2xkaXIpL2luY2x1ZGUnLiAgKElmIHRoZQorY3Jvc3MgY29tcGlsYXRpb24gaGVhZGVyIGZpbGVzIG5lZWQgdG8gYmUgZml4ZWQsIHRoZXkgbXVzdCBiZSBpbnN0YWxsZWQKK2JlZm9yZSBHTlUgQ0MgaXMgYnVpbHQuICBJZiB0aGUgY3Jvc3MgY29tcGlsYXRpb24gaGVhZGVyIGZpbGVzIGFyZQorYWxyZWFkeSBzdWl0YWJsZSBmb3IgQU5TSSBDIGFuZCBHTlUgQ0MsIG5vdGhpbmcgc3BlY2lhbCBuZWVkIGJlIGRvbmUpLgorCisgICBgR1BMVVNfSU5DTFVERV9ESVInIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGZvciBuYXRpdmUgYW5kIGNyb3NzLiAgSXQKK2lzIHdoZXJlIGBnKysnIGxvb2tzIGZpcnN0IGZvciBoZWFkZXIgZmlsZXMuICBgbGliZysrJyBpbnN0YWxscyBvbmx5Cit0YXJnZXQgaW5kZXBlbmRlbnQgaGVhZGVyIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LgorCisgICBgTE9DQUxfSU5DTFVERV9ESVInIGlzIHVzZWQgb25seSBmb3IgYSBuYXRpdmUgY29tcGlsZXIuICBJdCBpcworbm9ybWFsbHkgYC91c3IvbG9jYWwvaW5jbHVkZScuICBHTlUgQ0Mgc2VhcmNoZXMgdGhpcyBkaXJlY3Rvcnkgc28gdGhhdAordXNlcnMgY2FuIGluc3RhbGwgaGVhZGVyIGZpbGVzIGluIGAvdXNyL2xvY2FsL2luY2x1ZGUnLgorCisgICBgQ1JPU1NfSU5DTFVERV9ESVInIGlzIHVzZWQgb25seSBmb3IgYSBjcm9zcyBjb21waWxlci4gIEdOVSBDQworZG9lc24ndCBpbnN0YWxsIGFueXRoaW5nIHRoZXJlLgorCisgICBgVE9PTF9JTkNMVURFX0RJUicgaXMgdXNlZCBmb3IgYm90aCBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4gIEl0CitpcyB0aGUgcGxhY2UgZm9yIG90aGVyIHBhY2thZ2VzIHRvIGluc3RhbGwgaGVhZGVyIGZpbGVzIHRoYXQgR05VIENDIHdpbGwKK3VzZS4gIEZvciBhIGNyb3NzLWNvbXBpbGVyLCB0aGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGAvdXNyL2luY2x1ZGUnLgorV2hlbiB5b3UgYnVpbGQgYSBjcm9zcy1jb21waWxlciwgYGZpeGluY2x1ZGVzJyBwcm9jZXNzZXMgYW55IGhlYWRlcgorZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCisKZGlmZiAtLWdpdCBhL2djYy9ORVdTIGIvZ2NjL05FV1MKaW5kZXggMDRkOGE3Yy4uNjQ4MzczOCAxMDA2NDQKLS0tIGEvZ2NjL05FV1MKKysrIGIvZ2NjL05FV1MKQEAgLTMsMTIgKzMsMTcgQEAKIFRoZSAtc3BlY3M9ZmlsZSBzd2l0Y2ggYWxsb3dzIHlvdSB0byBvdmVycmlkZSBkZWZhdWx0IHNwZWNzIHVzZWQgaW4gaW52b2tpbmcKIHByb2dyYW1zIGxpa2UgY2MxLCBhcywgZXRjLgogCitPcHRpb25zIC1XYWxsIGFuZCAtV2ltcGxpY2l0IG5vdyBjYXVzZSBHQ0MgdG8gd2FybiBhYm91dCBpbXBsaWNpdCBpbnQKK2luIGRlY2xhcmF0aW9ucyAoZS5nLiBgcmVnaXN0ZXIgaTsnKSwgc2luY2UgdGhlIEMgU3RhbmRhcmQgY29tbWl0dGVlCitoYXMgZGVjaWRlZCB0byBkaXNhbGxvdyB0aGlzIGluIHRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBzdGFuZGFyZC4KKwogVGhlIGZvbGxvd2luZyBuZXcgdGFyZ2V0cyBhcmUgc3VwcG9ydGVkOgogCiAgICAgU29sYXJpcyAyLjUgcnVubmluZyBvbiBVbHRyYVNQQVJDJ3MuCiAgICAgVGhlIHNwYXJjbGV0IGNwdSAoYS5vdXQgZmlsZSBmb3JtYXQpLgogICAgIFNvbGFyaXMgMi41MSBydW5uaW5nIG9uIFBvd2VyUEMncy4KICAgICBMaW51eCBydW5uaW5nIG9uIFBvd2VyUEMncy4KKyAgICBFbWJlZGRlZCB0YXJnZXQgbTMyci1lbGYuCiAKIE5ldyBmZWF0dXJlcyBmb3IgdGhlIEhpdGFjaGkgSDgvMzAwKEgpLgogCkBAIC0yMyw2ICsyOCwxNyBAQAogICAgIC1tdHVuZT14eHgKICAgICAtbWltcHVyZS10ZXh0IGFuZCAtbW5vLWltcHVyZS10ZXh0CiAKK05ldyBmZWF0dXJlcyBmb3IgYWxsIHJzNjAwMCBhbmQgUG93ZXJQQyBzeXN0ZW1zOgorCisgICAgLW1jcHU9NjA0ZQorICAgIC1tY3B1PTgwMQorICAgIC1tY3B1PTgyMworICAgIC1tdHVuZT14eHgKKyAgICAtbXVwZGF0ZQorICAgIC1tbm8tdXBkYXRlCisgICAgLW1mdXNlZC1tYWRkCisgICAgLW1uby1mdXNlZC1tYWRkCisKIE5ldyBmZWF0dXJlcyBmb3IgUG93ZXJQQy1iYXNlZCBzeXN0ZW1zIHJ1bm5pbmcgZWl0aGVyIFN5c3RlbSBWLCBMaW51eCwgU29sYXJpcywKIG9yIGVtYmVkZGVkIHN5c3RlbXM6CiAKQEAgLTMzLDEwICs0OSwxNiBAQAogICAgIC1tY2FsbC1zeXN2LWVhYmkKICAgICAtbWNhbGwtc3lzdi1ub2VhYmkKICAgICAtbXNkYXRhCisgICAgLW1zZGF0YT1ub25lCisgICAgLW1zZGF0YT1kZWZhdWx0CisgICAgLW1zZGF0YT1zeXN2CisgICAgLW1zZGF0YT1lYWJpCiAgICAgLW1lbWIKLSAgICAtbXR1bmU9eHh4CiAgICAgLW1zaW0KICAgICAtbW12bWUKKyAgICB3Y2hhcl90IGlzIG5vdyBvZiB0eXBlIGxvbmcsIG5vdCB1bnNpZ25lZCBzaG9ydCBhcyBwZXIgQUJJLgorICAgIC1wLy1wZyBzdXBwb3J0CisgICAgLW1jcHU9NDAzIG5vdyBpbXBsaWVzIC1tc3RyaWN0LWFsaWduLgogCiBPcHRpb25zIC1tbm8tdjggYW5kIC1tbm8tc3BhcmNsaXRlIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIG9uIFNQQVJDCiB0YXJnZXRzLiAgT3B0aW9ucyAtbWN5cHJlc3MsIC1tdjgsIC1tc3VwZXJzcGFyYywgLW1zcGFyY2xpdGUsIC1tZjkzMCwKZGlmZiAtLWdpdCBhL2djYy9PUkRFUlMgYi9nY2MvT1JERVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTgzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvT1JERVJTCkBAIC0wLDAgKzEsNDAwMyBAQAorVGhlIGFjdHVhbCBvcmRlciBmb3JtIGZvbGxvd3MgdGhlIGRlc2NyaXB0aW9ucyBvZiBtZWRpYSBjb250ZW50cy4KKworTW9zdCBvZiB0aGlzIGZpbGUgaXMgZXhjZXJwdGVkIGZyb20gdGhlIEphbnVhcnkgMTk5NyBHTlUncyBCdWxsZXRpbi4KKworUGxlYXNlIHNlbmQgc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50cyB0byBnbnVAcHJlcC5haS5taXQuZWR1IG9yIHRoZSBwb3N0YWwKK2FkZHJlc3MgYXQgdGhlIGVuZCBvZiB0aGUgb3JkZXIgZm9ybS4gIFRoYW5rIFlvdS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIAorRlNGIE9yZGVyIEZvcm0gd2l0aCBEZXNjcmlwdGlvbnMgICAgICAgICAgICAgICAgICAgICAgIEphbnVhcnksIDE5OTcKKyAgIAorCisKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgVGVsZXBob25lOiArMS02MTctNTQyLTU5NDIKKzU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCAgICAgICAgRmF4OiAoaW5jbHVkaW5nIEphcGFuKSArMS02MTctNTQyLTI2NTIKK0Jvc3RvbiwgTUEgICAwMjExMS0xMzA3ICAgICAgICAgICAgRWxlY3Ryb25pYyBNYWlsOiBgZ251QHByZXAuYWkubWl0LmVkdScKK1VTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ybGQgV2lkZSBXZWI6IGh0dHA6Ly93d3cuZ251LmFpLm1pdC5lZHUKKyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitUaGVyZSBhcmUgc29tZSBzZWN0aW9ucyAoZS5nLiBgYEZvcnRoY29taW5nIEdOVXMnJyBhbmQgYGBIb3cgdG8gR2V0IEdOVQorU29mdHdhcmUnJykgd2hpY2ggYXJlIG5vdCBpbiB0aGlzIE9yZGVyIEZvcm0gZmlsZS4gIElmIHlvdSB3aXNoIHRvIHNlZSB0aGVtLAorYXNrIGdudUBwcmVwLmFpLm1pdC5lZHUgZm9yIHRoZSBjb21wbGV0ZSBKdWx5LCAxOTk2IEdOVSdzIEJ1bGxldGluLgorCisKKworVGFibGUgb2YgQ29udGVudHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKwlEb25hdGlvbnMgVHJhbnNsYXRlIEludG8gRnJlZSBTb2Z0d2FyZQorCUN5Z251cyBNYXRjaGVzIERvbmF0aW9ucyEKKwlGcmVlIFNvZnR3YXJlIFJlZGlzdHJpYnV0b3JzIERvbmF0ZQorCUhlbHAgZnJvbSBGcmVlIFNvZnR3YXJlIENvbXBhbmllcworCU1ham9yIENoYW5nZXMgaW4gR05VIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uCisJVGhlIERlbHV4ZSBEaXN0cmlidXRpb24KKwlHTlUgRG9jdW1lbnRhdGlvbgorCUdOVSBTb2Z0d2FyZQorCisJUHJvZ3JhbS9QYWNrYWdlIENyb3NzIFJlZmVyZW5jZQorCUNELVJPTXMKKwkgICBQcmljaW5nIG9mIHRoZSBHTlUgQ0QtUk9NcworCSAgICAgIFdoYXQgRG8gdGhlIERpZmZlcmVudCBQcmljZXMgTWVhbj8KKwkgICAgICBXaHkgSXMgVGhlcmUgYW4gSW5kaXZpZHVhbCBQcmljZT8KKwkgICAgICBJcyBUaGVyZSBhIE1heGltdW0gUHJpY2U/CisJICAgSmFudWFyeSAxOTk3IENvbXBpbGVyIFRvb2xzIEJpbmFyaWVzIENELVJPTQorCSAgIFNvdXJjZSBDb2RlIENELVJPTXMKKwkgICAgICBKYW51YXJ5IDE5OTcgU291cmNlIENvZGUgQ0QtUk9NcworCSAgICAgIEp1bHkgMTk5NiBTb3VyY2UgQ29kZSBDRC1ST01zCisJQ0QtUk9NIFN1YnNjcmlwdGlvbiBTZXJ2aWNlCisJRlNGIFQtc2hpcnQKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gT3JkZXIgRm9ybQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitEb25hdGlvbnMgVHJhbnNsYXRlIEludG8gRnJlZSBTb2Z0d2FyZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworSWYgeW91IGFwcHJlY2lhdGUgRW1hY3MsIEdOVSBDQywgR2hvc3RzY3JpcHQsIGFuZCBvdGhlciBmcmVlIHNvZnR3YXJlLCB5b3UKK21heSB3aXNoIHRvIGhlbHAgdXMgbWFrZSBzdXJlIHRoZXJlIGlzIG1vcmUgaW4gdGhlIGZ1dHVyZS0tcmVtZW1iZXIsCisqZG9uYXRpb25zIHRyYW5zbGF0ZSBpbnRvIG1vcmUgZnJlZSBzb2Z0d2FyZSEqCisKK1lvdXIgZG9uYXRpb24gdG8gdXMgaXMgdGF4LWRlZHVjdGlibGUgaW4gdGhlIFVuaXRlZCBTdGF0ZXMuICBXZSBnbGFkbHkgYWNjZXB0CisqYW55KiBjdXJyZW5jeSwgYWx0aG91Z2ggdGhlIFUuUy4gZG9sbGFyIGlzIHRoZSBtb3N0IGNvbnZlbmllbnQuCisKK0lmIHlvdXIgZW1wbG95ZXIgaGFzIGEgbWF0Y2hpbmcgZ2lmdHMgcHJvZ3JhbSBmb3IgY2hhcml0YWJsZSBkb25hdGlvbnMsCitwbGVhc2UgYXJyYW5nZSB0bzogYWRkIHRoZSBGU0YgdG8gdGhlIGxpc3Qgb2Ygb3JnYW5pemF0aW9ucyBmb3IgeW91cgorZW1wbG95ZXIncyBtYXRjaGluZyBnaWZ0cyBwcm9ncmFtOyBhbmQgaGF2ZSB5b3VyIGRvbmF0aW9uIG1hdGNoZWQgKG5vdGUgKk5vdGUKK0N5Z251cyBNYXRjaGVzIERvbmF0aW9ucyE6OikuICBJZiB5b3UgZG8gbm90IGtub3csIHBsZWFzZSBhc2sgeW91ciBwZXJzb25uZWwKK2RlcGFydG1lbnQuCisKK0NpcmNsZSBhbW91bnQgeW91IGFyZSBkb25hdGluZywgY3V0IG91dCB0aGlzIGZvcm0sIGFuZCBzZW5kIGl0IHdpdGggeW91cgorZG9uYXRpb24gdG86CisKKyAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMAorICAgICAgICBCb3N0b24sIE1BICAwMjExMS0xMzA3CisgICAgICAgIFVTQQorCisgICAgICAkNTAwICAgJDI1MCAgICQxMDAgICAkNTAgICBPdGhlciAkX19fX18gIE90aGVyIGN1cnJlbmN5Ol9fX19fCisKK1lvdSBjYW4gY2hhcmdlIGEgZG9uYXRpb24gdG8gYW55IG9mIENhcnRlIEJsYW5jaGUsIERpbmVyJ3MgQ2x1YiwgSkNCLAorTWFzdGVyQ2FyZCwgVmlzYSwgb3IgQW1lcmljYW4gRXhwcmVzcy4gIENoYXJnZXMgbWF5IGFsc28gYmUgZmF4ZWQgdG8KKysxLTYxNy01NDItMjY1Mi4KKworICAgICAgQ2FyZCB0eXBlOiBfX19fX19fX19fX19fX19fX18gIEV4cGlyYXRpb24gRGF0ZTogX19fX19fX19fX19fXworICAgICAKKyAgICAgIEFjY291bnQgTnVtYmVyOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgCisgICAgICBDYXJkaG9sZGVyJ3MgU2lnbmF0dXJlOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgIAorICAgICAgTmFtZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAKKyAgICAgIFN0cmVldCBBZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgCisgICAgICBDaXR5L1N0YXRlL1Byb3ZpbmNlOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgIAorICAgICAgWmlwIENvZGUvUG9zdGFsIENvZGUvQ291bnRyeTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAKKyAgICAgIFRlbGVwaG9uZSBOdW1iZXI6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgCisgICAgICBFbWFpbCBBZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAKKworQ3lnbnVzIE1hdGNoZXMgRG9uYXRpb25zIQorKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUbyBlbmNvdXJhZ2UgY2FzaCBkb25hdGlvbnMgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgQ3lnbnVzIFNvbHV0aW9ucword2lsbCBjb250aW51ZSB0byBjb250cmlidXRlIGNvcnBvcmF0ZSBmdW5kcyB0byB0aGUgRlNGIHRvIGFjY29tcGFueSBnaWZ0cyBieQoraXRzIGVtcGxveWVlcywgYW5kIGJ5IGl0cyBjdXN0b21lcnMgYW5kIHRoZWlyIGVtcGxveWVlcy4KKworRG9uYXRpb25zIHBheWFibGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzaG91bGQgYmUgc2VudCBieSBlbGlnaWJsZQorcGVyc29ucyB0byBDeWdudXMgU29sdXRpb25zLCB3aGljaCB3aWxsIGFkZCBpdHMgZ2lmdHMgYW5kIGZvcndhcmQgdGhlIHRvdGFsCit0byB0aGUgRlNGIGVhY2ggcXVhcnRlci4gIFRoZSBGU0Ygd2lsbCBwcm92aWRlIHRoZSBjb250cmlidXRvciB3aXRoIGEgcmVjZWlwdAordG8gcmVjb2duaXplIHRoZSBjb250cmlidXRpb24gKHdoaWNoIGlzIHRheC1kZWR1Y3RpYmxlIG9uIFUuUy4gIHRheCByZXR1cm5zKS4KK1RvIHNlZSBpZiB5b3VyIGVtcGxveWVyIGlzIGEgQ3lnbnVzIGN1c3RvbWVyLCBvciBmb3IgbW9yZSBpbmZvcm1hdGlvbiwKK3BsZWFzZSBjb250YWN0IEN5Z251czoKKworICAgICAgICBDeWdudXMgU29sdXRpb25zCisgICAgICAgIDEzMjUgQ2hlc2FwZWFrZSBUZXJyYWNlCisgICAgICAgIFN1bm55dmFsZSwgQ0EgICA5NDA4OQorICAgICAgICBVU0EKKyAgICAgCisgICAgICAgIFRlbGVwaG9uZTogKzEgNDA4IDU0MiA5NjAwCisgICAgICAgICAgICAgICAgICAgKzEgODAwIEN5Z251czEgKC0yOTQtNjg3MSkKKyAgICAgICAgRmF4OiAgICAgICArMSA0MDggNTQyIDk3MDAKKyAgICAgICAgRWxlY3Ryb25pYy1NYWlsOiBgaW5mb0BjeWdudXMuY29tJworICAgICAgICBGVFA6IGBmdHAuY3lnbnVzLmNvbScKKyAgICAgICAgV29ybGQgV2lkZSBXZWI6IGBodHRwOi8vd3d3LkN5Z251cy5jb20vJworCisgCisKK0ZyZWUgU29mdHdhcmUgUmVkaXN0cmlidXRvcnMgRG9uYXRlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitJbiBhZGRkaXRpb24gdG8gdGhlaXIgY29uZmVyZW5jZSBkb25hdGlvbiwgUmVkIEhhdCBTb2Z0d2FyZSBoYXMgYWdyZWVkIHRvCitkb25hdGUgJDEuMDAgdG8gdGhlIEZTRiBmb3IgZXZlcnkgY29weSBvZiBSZWQgSGF0IEFyY2hpdmVzIHNvbGQuICBUaGV5IGhhdmUKK2Fsc28gYWRkZWQgYSBHTlUgbG9nbyB0byB0aGUgYmFjayBvZiB0aGF0IENEIHdpdGggdGhlIHdvcmRzICJTdXBwb3J0cyB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiIuCisKK1RoZSBTTk9XIDIuMSBDRCBwcm9kdWNlcnMgYWRkZWQgdGhlIHdvcmRzICJJbmNsdWRlcyAkNSBkb25hdGlvbiB0byB0aGUgRlNGIgordG8gdGhlIGZyb250IG9mIHRoZWlyIENELiAgUG90ZW50aWFsIGJ1eWVycyB3aWxsIGtub3cganVzdCBob3cgbXVjaCBvZiB0aGUKK3ByaWNlIGlzIGZvciB0aGUgRlNGICYgaG93IG11Y2ggaXMgZm9yIHRoZSByZWRpc3RyaWJ1dG9yLgorCitUaGUgU3VuIFVzZXJzIEdyb3VwIERldXRzY2hsYW5kIGhhcyBtYWRlIGl0IGV2ZW4gY2xlYXJlcjogdGhlaXIgQ0Qgc2F5cywKKyJQcmljZSA5MCBETSwgKyAxMiBETSBkb25hdGlvbiB0byB0aGUgRlNGLiIgV2UgdGhhbmsgdGhlbSBmb3IgdGhlaXIKK2NvbnRyaWJ1dGlvbiB0byBvdXIgZWZmb3J0cy4KKworS3lvdG8gTWljcm8gQ29tcHV0ZXIgb2YgSmFwYW4gcmVndWxhcmx5IGdpdmVzIHVzIDEwJSBvZiB0aGVpciBHTlUtcmVsYXRlZAorc2FsZXMuCisKK01yLiBIaXJvc2hpLCBNci4gS29qaW1hLCBhbmQgdGhlIG90aGVyIGF1dGhvcnMgb2YgdGhlIGBMaW51eCBQcmltZXInIGluIEphcGFuCitoYXZlIGRvbmF0ZWQgbW9uZXkgZnJvbSB0aGUgc2FsZXMgb2YgdGhlaXIgYm9vay4KKworSW5mb21hZ2ljIGhhcyBjb250aW51ZWQgdG8gbWFrZSBzaXplYWJsZSBkb25hdGlvbnMgdG8gdGhlIEZTRi4KKworQXQgdGhlIHJlcXVlc3Qgb2YgYXV0aG9yIEFybm9sZCBSb2JiaW5zLCBTcGVjaWFsaXplZCBTeXN0ZW1zIENvbnN1bHRhbnRzLCBJbmMuCitjb250aW51ZXMgdG8gZG9uYXRlIDMlIG9mIHRoZWlyIHByb2ZpdHMgZnJvbSBzZWxsaW5nIGBFZmZlY3RpdmUgQVdLCitQcm9ncmFtbWluZycuICBXZSB3b3VsZCBhbHNvIGxpa2UgdG8gYWNrbm93bGVkZ2UgdGhlIG1hbnkgU1NDIGF1dGhvcnMgd2hvCitoYXZlIGRvbmF0ZWQgdGhlaXIgcm95YWx0aWVzIGFuZCBmZWVzIHRvIHRoZSBGU0YuCisKK0luIHRoZSBsb25nIHJ1biwgdGhlIHN1Y2Nlc3Mgb2YgZnJlZSBzb2Z0d2FyZSBkZXBlbmRzIG9uIGhvdyBtdWNoIG5ldyBmcmVlCitzb2Z0d2FyZSBwZW9wbGUgZGV2ZWxvcC4gIEZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIG9mZmVycyBhbiBvcHBvcnR1bml0eSB0bworcmFpc2UgZnVuZHMgZm9yIHN1Y2ggZGV2ZWxvcG1lbnQgaW4gYW4gZXRoaWNhbCB3YXkuICBUaGVzZSByZWRpc3RyaWJ1dG9ycworaGF2ZSBtYWRlIHVzZSBvZiB0aGUgb3Bwb3J0dW5pdHkuICBNYW55IG90aGVycyBsZXQgaXQgZ28gdG8gd2FzdGUuCisKK1lvdSBjYW4gaGVscCBwcm9tb3RlIGZyZWUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgYnkgY29udmluY2luZyBmb3ItYS1mZWUKK3JlZGlzdHJpYnV0b3JzIHRvIGNvbnRyaWJ1dGUtLWVpdGhlciBieSBkb2luZyBkZXZlbG9wbWVudCB0aGVtc2VsdmVzIG9yIGJ5Citkb25hdGluZyB0byBkZXZlbG9wbWVudCBvcmdhbml6YXRpb25zICh0aGUgRlNGIGFuZCBvdGhlcnMpLgorCitUaGUgd2F5IHRvIGNvbnZpbmNlIGRpc3RyaWJ1dG9ycyB0byBjb250cmlidXRlIGlzIHRvIGRlbWFuZCBhbmQgZXhwZWN0IHRoaXMKK29mIHRoZW0uICBUaGlzIG1lYW5zIGNob29zaW5nIGFtb25nIGRpc3RyaWJ1dG9ycyBwYXJ0bHkgYnkgaG93IG11Y2ggdGhleSBnaXZlCit0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50LiAgVGhlbiB5b3UgY2FuIHNob3cgZGlzdHJpYnV0b3JzIHRoZXkgbXVzdAorY29tcGV0ZSB0byBiZSB0aGUgb25lIHdobyBnaXZlcyB0aGUgbW9zdC4KKworVG8gbWFrZSB0aGlzIHdvcmssIHlvdSBtdXN0IGluc2lzdCBvbiBudW1iZXJzIHRoYXQgeW91IGNhbiBjb21wYXJlLCBzdWNoIGFzLAorIldlIHdpbGwgZ2l2ZSB0ZW4gZG9sbGFycyB0byB0aGUgRm9vYmFyIHByb2plY3QgZm9yIGVhY2ggZGlzayBzb2xkLiIgQSB2YWd1ZQorY29tbWl0bWVudCwgc3VjaCBhcyAiQSBwb3J0aW9uIG9mIHRoZSBwcm9maXRzIGlzIGRvbmF0ZWQsIiBkb2Vzbid0IGdpdmUgeW91IGEKK2Jhc2lzIGZvciBjb21wYXJpc29uLiAgRXZlbiBhIHByZWNpc2UgZnJhY3Rpb24gIm9mIHRoZSBwcm9maXRzIGZyb20gdGhpcworZGlzayIgaXMgbm90IHZlcnkgbWVhbmluZ2Z1bCwgc2luY2UgY3JlYXRpdmUgYWNjb3VudGluZyBhbmQgdW5yZWxhdGVkCitidXNpbmVzcyBkZWNpc2lvbnMgY2FuIGdyZWF0bHkgYWx0ZXIgd2hhdCBmcmFjdGlvbiBvZiB0aGUgc2FsZXMgcHJpY2UgY291bnRzCithcyBwcm9maXQuCisKK0Fsc28sIHByZXNzIGRldmVsb3BlcnMgZm9yIGZpcm0gaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIGRldmVsb3BtZW50Cit0aGV5IGRvIG9yIHN1cHBvcnQuICBTb21lIGtpbmRzIG1ha2UgbXVjaCBtb3JlIGxvbmctdGVybSBkaWZmZXJlbmNlIHRoYW4KK290aGVycy4gIEZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIHNlcGFyYXRlIHZlcnNpb24gb2YgYSBHTlUgcHJvZ3JhbQorY29udHJpYnV0ZXMgdmVyeSBsaXR0bGU7IG1haW50YWluaW5nIGEgcHJvZ3JhbSBvbiBiZWhhbGYgb2YgdGhlIEdOVSBQcm9qZWN0Cis8Y29udHJpYnV0ZXMgbXVjaC4gIEVhc3kgbmV3IHBvcnRzIGNvbnRyaWJ1dGUgbGl0dGxlLCBzaW5jZSBzb21lb25lIGVsc2UKK3dvdWxkIHN1cmVseSBkbyB0aGVtOyBkaWZmaWN1bHQgcG9ydHMgc3VjaCBhcyBhZGRpbmcgYSBuZXcgQ1BVIHRvIHRoZSBHTlUKK2NvbXBpbGVyIG9yIE1hY2ggY29udHJpYnV0ZSBtb3JlOyBtYWpvciBuZXcgZmVhdHVyZXMgJiBwcm9ncmFtcyBjb250cmlidXRlCit0aGUgbW9zdC4KKworQnkgZXN0YWJsaXNoaW5nIHRoZSBpZGVhIHRoYXQgc3VwcG9ydGluZyBmdXJ0aGVyIGRldmVsb3BtZW50IGlzICJ0aGUgcHJvcGVyCit0aGluZyB0byBkbyIgd2hlbiBkaXN0cmlidXRpbmcgZnJlZSBzb2Z0d2FyZSBmb3IgYSBmZWUsIHdlIGNhbiBhc3N1cmUgYQorc3RlYWR5IGZsb3cgb2YgcmVzb3VyY2VzIGZvciBtYWtpbmcgbW9yZSBmcmVlIHNvZnR3YXJlLgorCisgCisKK0hlbHAgZnJvbSBGcmVlIFNvZnR3YXJlIENvbXBhbmllcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1doZW4gY2hvb3NpbmcgYSBmcmVlIHNvZnR3YXJlIGJ1c2luZXNzLCBhc2sgdGhvc2UgeW91IGFyZSBjb25zaWRlcmluZyBob3cKK211Y2ggdGhleSBkbyB0byBhc3Npc3QgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCwgZS5nLiwgYnkgY29udHJpYnV0aW5nIG1vbmV5Cit0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50IG9yIGJ5IHdyaXRpbmcgZnJlZSBzb2Z0d2FyZSBpbXByb3ZlbWVudHMKK3RoZW1zZWx2ZXMgZm9yIGdlbmVyYWwgdXNlLiAgQnkgYmFzaW5nIHlvdXIgZGVjaXNpb24gcGFydGlhbGx5IG9uIHRoaXMKK2ZhY3RvciwgeW91IGNhbiBoZWxwIGVuY291cmFnZSB0aG9zZSB3aG8gcHJvZml0IGZyb20gZnJlZSBzb2Z0d2FyZSB0bworY29udHJpYnV0ZSB0byBpdHMgZ3Jvd3RoLgorCitXaW5nbnV0IChTUkEncyBzcGVjaWFsIEdOVSBzdXBwb3J0IGdyb3VwKSByZWd1bGFybHkgZG9uYXRlcyBhIHBhcnQgb2YgaXRzCitpbmNvbWUgdG8gdGhlIEZTRiB0byBzdXBwb3J0IHRoZSBkZXZlbG9wbWVudCBvZiBuZXcgR05VIHByb2dyYW1zLiAgTGlzdGluZwordGhlbSBoZXJlIGlzIG91ciB3YXkgb2YgdGhhbmtpbmcgdGhlbS4gIFdpbmdudXQgaGFzIG1hZGUgYSBwbGVkZ2UgdG8gZG9uYXRlCisxMCUgb2YgdGhlaXIgaW5jb21lIHRvIHRoZSBGU0YsIGFuZCBoYXMgcHVyY2hhc2VkIHNldmVyYWwgRGVsdXhlIERpc3RyaWJ1dGlvbgorcGFja2FnZXMgaW4gSmFwYW4uICBBbHNvIHNlZSAqTm90ZSBDeWdudXMgTWF0Y2hlcyBEb25hdGlvbnMhOjouCisKKyAgICAgICAgV2luZ251dCBQcm9qZWN0CisgICAgICAgIFNvZnR3YXJlIFJlc2VhcmNoIEFzc29jaWF0ZXMsIEluYy4KKyAgICAgICAgMS0xLTEgSGlyYWthd2EtY2hvLCBDaGl5b2RhLWt1CisgICAgICAgIFRva3lvIDEwMiwgSmFwYW4KKyAgICAgCisgICAgICAgIFBob25lOiAgKCs4MS0zKTMyMzQtMjYxMQorICAgICAgICBGYXg6ICAgICgrODEtMykzOTQyLTUxNzQKKyAgICAgICAgRS1tYWlsOiBgaW5mby13aW5nbnV0QHNyYS5jby5qcCcKKyAgICAgICAgV1dXOiBgaHR0cDovL3d3dy5zcmEuY28uanAvcHVibGljL3NyYS9wcm9kdWN0L3dpbmdudXQvJworCisgCisKK01ham9yIENoYW5nZXMgaW4gR05VIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAqIEh1cmQgUHJvZ3Jlc3MgICAoQWxzbyAqbm90ZSBXaGF0IElzIHRoZSBIdXJkOjouKQorCisgICAgIFdlIGhhdmUgbWFkZSB0d28gdGVzdCByZWxlYXNlcyBvZiB0aGUgSHVyZCwgYW5kIHdlIHdpbGwgbWFrZSBhbm90aGVyCisgICAgICh2ZXJzaW9uIDAuMikgaW4gdGhpcyBtb250aC4gIFN0YWJpbGl0eSBpcyBpbXByb3ZpbmcsIGFuZCB3ZSBoYXZlIGJlZ3VuCisgICAgIG1vZGlmeWluZyB2YXJpb3VzIHVzZXItbGV2ZWwgdXRpbGl0aWVzIHRvIHVuZGVyc3RhbmQgbmV3IEh1cmQgZmlsZXN5c3RlbQorICAgICBmZWF0dXJlcyAoZmlsZXV0aWxzLCBzaGVsbHV0aWxzLCB0YXIsIGV0Yy4pLgorCisgICAgIE9uZSB3YXkgZm9yIHBlb3BsZSB0byBoZWxwIG91dCBpcyB0byBjb21waWxlIGFuZCBydW4gYXMgbXVjaCB0aGlyZC1wYXJ0eQorICAgICBmcmVlIHNvZnR3YXJlIGFzIHRoZXkgY2FuOyBpbiB0aGlzIHdheSB3ZSBjYW4gZmluZCBidWdzIGFuZCBkZWZpY2llbmNpZXMKKyAgICAgd2l0aCBzb21lIHJhcGlkaXR5LiAgVm9sdW50ZWVycyB3aXRoIGEgUEMgYXJlIHRoZXJlZm9yZSBlYWdlcmx5IHNvdWdodAorICAgICB0byBnZXQgdGhlIG5ldyAwLjIgcmVsZWFzZSBhbmQgY29tcGlsZSB0aGVpciBmYXZvcml0ZSBVbml4IHByb2dyYW1zIGFuZAorICAgICBnYW1lcy4KKworICAgKiBHTlUgU3lzdGVtIFByb2dyZXNzCisKKyAgICAgVmVyc2lvbiAwLjIgb2YgdGhlIEdOVSBzeXN0ZW0gd2lsbCBiZSByZWxlYXNlZCBpbiB0aGlzIG1vbnRoLCB0byBjb2luY2lkZQorICAgICB3aXRoIHRoZSAwLjIgcmVsZWFzZSBvZiB0aGUgSHVyZC4gIFRoaXMgY29tcGxldGUgR05VIHN5c3RlbSBpcyBhdmFpbGFibGUKKyAgICAgYnkgRlRQLiAgV2UgYXJlIHdvcmtpbmcgd2l0aCBJYW4gTXVyZG9jayB0byBkZXZlbG9wIGFuIGV4Y2VsbGVudCBwYWNrYWdlCisgICAgIG1hbmFnZW1lbnQgc3lzdGVtIGZvciBHTlUuICBUaGlzIHdpbGwgbWFrZSBhZG1pbmlzdGVyaW5nIGFuZCB1cGdyYWRpbmcKKyAgICAgdGhlIHN5c3RlbSBtdWNoIGVhc2llci4gIEJlY2F1c2Ugb2YgZmVhdHVyZXMgb25seSB0aGUgSHVyZCBoYXMsIHRoZSBHTlUKKyAgICAgcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSB3aWxsIGJlIHNpbXBsZXIgYW5kIG1vcmUgZmVhdHVyZWZ1bCB0aGFuCisgICAgIHNpbWlsYXIgcGFja2FnZSBzeXN0ZW1zIGZvciB2YXJpb3VzIEdOVS9MaW51eCBkaXN0cmlidXRpb25zLgorCisgICAqIE5ldyBTb3VyY2UgQ29kZSBDRCEgICAoU2VlICpOb3RlIEphbnVhcnkgMTk5NyBTb3VyY2UgQ29kZSBDRC1ST01zOjopCisKKyAgICAgV2UgYXJlIHJlbGVhc2luZyB0aGUgSmFudWFyeSAxOTk3IChFZGl0aW9uIDkpIFNvdXJjZSBDb2RlIENELVJPTSB0aGlzCisgICAgIG1vbnRoLiAgT25jZSBhZ2FpbiwgaXQgaXMgYSB0d28gZGlzayBzZXQuICBJdCBpbmNsdWRlcyBzZXZlcmFsIG5ldworICAgICBwcm9ncmFtczogYGdmb3J0aCcsIGBncGMnLCA8TWV0YS1IVE1MPiwgYHN0b3cnLCBgdW5pdHMnLCBWUndlYiwgYHdnZXQnLAorICAgICBgd2luZG93czMyYXBpJywgYW5kIGB4aW5mbycuICBPbiB0aGUgQ0QtUk9NcyBhcmUgZnVsbCBkaXN0cmlidXRpb25zIG9mCisgICAgIFgxMVI2LjMsIE1JVCBTY2hlbWUsIEVtYWNzLCBHQ0MsIGFuZCBjdXJyZW50IHZlcnNpb25zIG9mIGFsbCBvdGhlciBHTlUKKyAgICAgU29mdHdhcmUuICAqTm90ZSBHTlUgU29mdHdhcmU6OiwgZm9yIG1vcmUgYWJvdXQgdGhlc2UgcGFja2FnZXMuCisKKyAgICogTmV3IENvbXBpbGVyIFRvb2xzIENELVJPTSAgCisKKyAgICAgV2UgYXJlIHJlbGVhc2luZyB0aGUgSmFudWFyeSAxOTk3IChFZGl0aW9uIDQpIENvbXBpbGVyIFRvb2xzIEJpbmFyaWVzCisgICAgIENELiAgU3VwcG9ydCBpcyBpbmNsdWRlZCBmb3Igc2V2ZXJhbCBuZXcgb3BlcmF0aW5nIHN5c3RlbXMuCisKKyAgICAgVGhlIENvbXBpbGVyIFRvb2xzIEJpbmFyaWVzIENELVJPTSBjb250YWlucyBleGVjdXRhYmxlcyBvZiB0aGUgR05VCisgICAgIGNvbXBpbGVyIHRvb2xzIGZvciBzb21lIHN5c3RlbXMgdGhhdCBkb24ndCBub3JtYWxseSBjb21lIHdpdGggYQorICAgICBjb21waWxlci4gIFRoaXMgYWxsb3dzIHVzZXJzIG9mIHRob3NlIHN5c3RlbXMgdG8gY29tcGlsZSB0aGVpciBvd24KKyAgICAgc29mdHdhcmUgd2l0aG91dCBoYXZpbmcgdG8gYnV5IGEgcHJvcHJpZXRhcnkgY29tcGlsZXIuCisKKyAgICAgV2UgaG9wZSB0byBpbmNsdWRlIG1vcmUgc3lzdGVtcyB3aXRoIGVhY2ggdXBkYXRlIG9mIHRoaXMgQ0QtUk9NLiAgSWYgeW91CisgICAgIGNhbiBoZWxwIGJ1aWxkIGJpbmFyaWVzIGZvciBuZXcgc3lzdGVtcyBvciBoYXZlIG9uZSB0byBzdWdnZXN0LCBwbGVhc2UKKyAgICAgY29udGFjdCB1cyBhdCBlaXRoZXIgYWRkcmVzcyBvbiB0aGUgdG9wIG1lbnUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisgICAgICpOb3RlIENvbXBpbGVyIFRvb2xzIEJpbmFyaWVzIENELVJPTTo6LgorCisgICAqIE5ldy9VcGRhdGVkIE1hbnVhbHMgc2luY2UgTGFzdCBCdWxsZXRpbiAgIChTZWUgKk5vdGUgRG9jdW1lbnRhdGlvbjo6KQorCisgICAgIFNpbmNlIHRoZSBsYXN0IGJ1bGxldGluLCB3ZSBoYXZlIHB1Ymxpc2hlZCBuZXcgZWRpdGlvbnMgb2Y6IGBEZWJ1Z2dpbmcKKyAgICAgd2l0aCBHREInLCBmb3IgdmVyc2lvbiA0LjE2IHdpdGggYSBuZXcgY29sb3IgY292ZXI7IGBUZXhpbmZvJyBNYW51YWwsCisgICAgIGVkaXRpb24gMi4yNDsgJiB0aGUgYEdOVSBFbWFjcyBNYW51YWwnLCBmb3IgdmVyc2lvbiAxOS4zMyB3aXRoIGEgbmV3CisgICAgIGNvbG9yIGNvdmVyLiAgYFVzaW5nIGFuZCBQb3J0aW5nIEdOVSBDQycgaGFzIGJlZW4gcmUtcHJpbnRlZCBpbiBhCisgICAgIGxheS1mbGF0IGJvdW5kIGVkaXRpb24gd2l0aCBhIG5ldyBjb2xvciBjb3Zlci4gIEEgbmV3IEJpc29uIE1hbnVhbCB3aXRoCisgICAgIGEgbmV3IGNvbG9yIGNvdmVyIGlzIHBsYW5uZWQuCisKKyAgICogR2l2ZSB0byBHTlUgdGhlIFVuaXRlZCBXYXkhCisKKyAgICAgQXMgYSA1MDEoYykzIHRheC1leGVtcHQgb3JnYW5pemF0aW9uLCB0aGUgRlNGIGlzIGVsaWdpYmxlIHRvIHJlY2VpdmUKKyAgICAgVW5pdGVkIFdheSBmdW5kcy4gIFdoZW4gZG9uYXRpbmcgdG8gVW5pdGVkIFdheSwgb25lIGNhbiBzcGVjaWZ5IHRoYXQgYWxsCisgICAgIG9yIHBhcnQgb2YgdGhlIGRvbmF0aW9uIGJlIGRpcmVjdGVkIHRvIHRoZSBGU0YuICBPbiB0aGUgZG9ub3IgZm9ybSwKKyAgICAgY2hlY2sgdGhlICJTcGVjaWZpYyBSZXF1ZXN0cyIgYm94IGFuZCBpbmNsdWRlIHRoZSBzZW50ZW5jZSwgIlNlbmQgbXkKKyAgICAgZ2lmdCB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAgICAgQm9zdG9uLCBNQSAwMjExMS4iIFdlIGVzcGVjaWFsbHkgYXBwcmVjaWF0ZSB0aGUgZG9uYXRpb25zIGZyb20gTWljcm9zb2Z0CisgICAgIG1hdGNoaW5nIHRoZSBVbml0ZWQgV2F5IGRvbmF0aW9ucyBvZiB0aGVpciBlbXBsb3llZXMuICBBbHNvIHNlZSAqTm90ZQorICAgICBEb25hdGlvbnMgVHJhbnNsYXRlIEludG8gRnJlZSBTb2Z0d2FyZTo6IGFuZCAqTm90ZSBDeWdudXMgTWF0Y2hlcworICAgICBEb25hdGlvbnMhOjouCisKKyAgICogR05VIFNvZnR3YXJlIFdvcmtzIG9uIE1TLURPUyAgIChBbHNvICpub3RlIEdOVSBTb2Z0d2FyZTo6LikKKworICAgICBHTlUgRW1hY3MgMTkgYW5kIG1hbnkgb3RoZXIgR05VIHByb2dyYW1zIGhhdmUgYmVlbiBwb3J0ZWQgdG8gTVMtRE9TIGZvcgorICAgICBpMzg2L2k0ODYvUGVudGl1bSBtYWNoaW5lcy4gIFdlIHNoaXAgYmluYXJpZXMgJiBzb3VyY2VzIG9uIHRoZSAqTm90ZQorICAgICBDb21waWxlciBUb29scyBCaW5hcmllcyBDRC1ST006Oi4KKworICAgKiBNVUxFIE1lcmdlIEFsbW9zdCBDb21wbGV0ZQorCisgICAgIE1VTEUgaXMgdGhlIE11bHRpLUxpbmd1YWwgRW1hY3MgZGV2ZWxvcGVkIGJ5IEtlbidpY2hpIEhhbmRhIGF0IHRoZQorICAgICBFbGVjdHJvLVRlY2huaWNhbCBMYWIgaW4gVHN1a3ViYSwgSmFwYW4uICBIYW5kYSBoYXMgcmVhZGllZCB0aGUgY29kZSBmb3IKKyAgICAgbWVyZ2luZyBpbnRvIEVtYWNzIGFuZCB3ZSBleHBlY3QgdG8gY29tcGxldGUgdGhlIG1lcmdlIHNvb24uCisKKyAgICogR0NDICAgKEZvciBjdXJyZW50IHN0YXR1cyBvbiBHQ0MgYW5kIEdOQVQsICpub3RlIEdOVSBTb2Z0d2FyZTo6LikKKworICAgICBOZXcgZnJvbnQgZW5kcyBmb3IgR0NDIGFyZSBiZWluZyBkb25lIGZvciBQYXNjYWwgJiBDaGlsbC4gIFBhc2NhbCwKKyAgICAgYGdwYycsIHN0YWduYXRlZCBmb3Igc29tZSB5ZWFycywgYnV0IHNob3VsZCBiZSByZWxlYXNlZCBieSB0aGUgdGltZSB5b3UKKyAgICAgcmVhZCB0aGlzLiAgU2VlIGBodHRwOi8vYWduZXMuZGlkYS5waHlzaWsudW5pLWVzc2VuLmRlL35nbnUtcGFzY2FsJy4KKworICAgKiBHVUlMRQorCisgICAgIEdVSUxFIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgYXMgYSB0ZXN0IHJlbGVhc2UuICBHTlUncyBVYmlxdWl0b3VzCisgICAgIEludGVsbGlnZW50IExhbmd1YWdlIGZvciBFeHRlbnNpb24gaXMgYW4gU0NNLWJhc2VkIGxpYnJhcnkgdGhhdCBjYW4gbWFrZQorICAgICBhbnkgb3JkaW5hcnkgQyBwcm9ncmFtIGV4dGVuc2libGUuICAoRm9yIFNDTSBpbmZvLCBzZWUgIkpBQ0FMIiBpbiAqTm90ZQorICAgICBHTlUgU29mdHdhcmU6Oi4pCisKKyAgICAgQWxzbyBiZWluZyBkZXZlbG9wZWQgYXJlIFNDU0gtY29tcGF0aWJsZSBzeXN0ZW0gY2FsbCAmIFRrIGludGVyZmFjZXMsIGEKKyAgICAgbW9kdWxlIHN5c3RlbSwgZHluYW1pYyBsaW5raW5nIHN1cHBvcnQsICYgYSBieXRlLWNvZGUgaW50ZXJwcmV0ZXIuCisgICAgIFN1cHBvcnQgZm9yIEVtYWNzIExpc3AgJiBhIG1vcmUgQy1saWtlIGxhbmd1YWdlIGlzIGNvbWluZy4KKworICAgKiBUZXhpbmZvICAgKEZvciBjdXJyZW50IHN0YXR1cywgKm5vdGUgR05VIFNvZnR3YXJlOjouKQorCisgICAgIFRleGluZm8gbm93IHByb3ZpZGVzIG1hY3JvIGZhY2lsaXRpZXMgYW5kIHN1cHBvcnRzIG11bHRpY29sdW1uIHRhYmxlcy4KKyAgICAgSXQgY29tZXMgd2l0aCBhbiBgaW5zdGFsbC1pbmZvJyBwcm9ncmFtIHRoYXQgcGFja2FnZXMgY2FuIHVzZSB0byB1cGRhdGUKKyAgICAgdGhlIGBkaXInIGZpbGUgYXV0b21hdGljYWxseSB3aGVuIHRoZXkgaW5zdGFsbCB0aGVpciBJbmZvIGZpbGVzLgorCisgICAqIEdOVSBDb21tb24gTGlzcCAgIChGb3IgY3VycmVudCBzdGF0dXMsICpub3RlIEdOVSBTb2Z0d2FyZTo6LikKKworICAgICBWZXJzaW9uIDIuMi4xIG9mIEdOVSBDb21tb24gTGlzcCAoR0NMKSB3YXMgcmVsZWFzZWQgaW4gRGVjZW1iZXIgJzk2LiAgSXQKKyAgICAgbm93IGluY2x1ZGVzIGEgZ3JhcGhpY2FsIGludGVyZmFjZSB0byB0aGUgVGsgd2lkZ2V0IHN5c3RlbS4gIEFsbAorICAgICBkb2N1bWVudGF0aW9uIGlzIG5vdyBUZXhpbmZvLWJhc2VkLCB3aXRoIGJ1aWx0LWluIHJlZ2V4cCBtYXRjaGluZyB1c2VkCisgICAgIHRvIGFjY2VzcyB0aGUgZG9jdW1lbnRhdGlvbi4gIEEgZmlyc3QgcGFzcyBhdCB0aGUgQ29tbW9uIExpc3AgY29uZGl0aW9uCisgICAgIHN5c3RlbSBpcyBhbHNvIGluY2x1ZGVkLiAgVmVyc2lvbiAyLjIuMSBjb250YWlucyBtYWlubHkgdXBkYXRlcyB0byBhbGxvdworICAgICBHQ0wgMi4yIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggY3VycmVudCBvcGVyYXRpbmcgc3lzdGVtIGxldmVscywgYW5kIHRvCisgICAgIGZpeCBidWdzLiAgVm9sdW50ZWVycyB0byBoZWxwIHdpdGggdGhlIG1vdmUgdG8gdGhlIEFOU0kgc3RhbmRhcmQgYXJlCisgICAgIG1vc3Qgd2VsY29tZTsgcGxlYXNlIGNvbnRhY3QgYHNjaGVsdGVyQG1hdGgudXRleGFzLmVkdScuCisKKyAgICogRXhwZXJpbWVudGFsIEVsZWN0cm9uaWMgQ2FzaAorCisgICAgIGBodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9OQ2FzaCcgaXMgYW4gZXhwZXJpbWVudGFsCisgICAgIGltcGxlbWVudGF0aW9uIG9mIGFub255bW91cyBlbGVjdHJvbmljIGNhc2ggd2hpY2ggaXMgdG8gYmUgcmVsZWFzZWQgYXMKKyAgICAgZnJlZSBzb2Z0d2FyZS4KKworICAgKiBIVE1MIFByb2Zlc3Npb25hbCBhbmQgR1BMCisKKyAgICAgVGhlIHJlY2VudCBkZXZlbG9wbWVudCBhbmQgcmVsZWFzZSBvZiBIVE1MIFByb2Zlc3Npb25hbCB3YXMgbWFkZSB1bmRlcgorICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwuICBJbiBvcmRlciB0byBmYWNpbGl0YXRlIGRpc3RyaWJ1dGlvbiwgdGhlIEdQTAorICAgICB0ZXh0IHdhcyByZS1lbmNvZGVkIGludG8gdGhpcyBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIEhUTUwsIGFuZCBpcyBub3cKKyAgICAgZGlzdHJpYnV0ZWQgd2l0aCBIVE1MIFByby4gIEFuIG9ubGluZSBjb3B5IGNhbiBiZSByZXRyaWV2ZWQgYXQKKyAgICAgYGh0dHA6Ly93d3cuYXJib3JuZXQub3JnL35zaWxtYXJpbC9kdGRzL2h0bWwvZ251Z3BsLmh0bWwnLgorCisgICAgIEhUTUwgUHJvIGlzIGFuIHVub2ZmaWNpYWwgdmVyc2lvbiBvZiB0aGUgSFRNTCBEVEQuICBIVE1MIFBybyBpcworICAgICBkaXN0cmlidXRlZCBmb3IgZGlzY3Vzc2lvbiBieSB0aGUgYHd3dy1odG1sJyBtYWlsaW5nIGxpc3QuICBJdAorICAgICBjb21wb3NpdGVzIGFsbCBvdGhlciBrbm93biB2ZXJzaW9ucywgYW5kIGFsbG93cyBXb3JsZCBXaWRlIFdlYiBkZXNpZ25lcnMKKyAgICAgdG8gdXNlIHJlY2VudCBleHBlcmltZW50YWwgYWRkaXRpb25zIGluIGEgcmF0aW9uYWwgYW5kIHN0cnVjdHVyZWQgbWFubmVyLgorICAgICBJdCBjb21lcyB3aXRoIGEgYC5jZWQnIGZpbGUgZm9yIEdOVSBFbWFjcy9wc2dtbC1tb2RlIGFuZCBjYW4gYmUgZ290dGVuIGF0CisgICAgIGBmdHA6Ly93d3cudWNjLmllL3B1Yi9odG1sL2h0bWxwcm8ue3ppcHx0YXIuZ3p8emlwLmhxeH0nLgorICAgICBEb2N1bWVudGF0aW9uIGlzIGF0CisgICAgIGBodHRwOi8vd3d3LmFyYm9ybmV0Lm9yZy9+c2lsbWFyaWwvZHRkcy9odG1sL2h0bWxwcm8uaHRtbCcuCisKKyAgICogTWV0YS1IVE1MIDUuMDEgU291cmNlIFJlbGVhc2UKKworICAgICBWZXJzaW9uIDUuMDEgb2YgVW5pdmVyc2FsIEFjY2VzcyBJbmMuJ3MgPE1ldGEtSFRNTD4gaXMgbm93IGF2YWlsYWJsZS4KKworICAgICA8TWV0YS1IVE1MPiBpcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrCisgICAgIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIFdvcmxkIFdpZGUgV2ViLiAgQWx0aG91Z2ggaXQgaXMgYSBnZW51aW5lCisgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlLCBzdWl0YWJsZSBmb3IgbGFyZ2Utc2NhbGUgc3ltYm9saWMgbWFuaXB1bGF0aW9uLAorICAgICA8TWV0YS1IVE1MPiBhbHNvIHByb3ZpZGVzIHRoZSBtb3N0IGNvbW1vbmx5IHdhbnRlZCBXZWIgZnVuY3Rpb25hbGl0eSBhcworICAgICBidWlsdC1pbiBwcmltaXRpdmVzLCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB3cml0ZSB0aGVtLiAgWW91IGNhbiBmaW5kIG91dAorICAgICBtb3JlIGFib3V0IHRoZSB0aGVvcnkgb2YgaW1wbGVtZW50YXRpb24gaW4gdGhpcyB3aGl0ZSBwYXBlcgorICAgICBgaHR0cDovL3d3dy5tZXRhaHRtbC5jb20vbWV0YS1odG1sL21hbmlmZXN0by5odG1sJy4KKworICAgICBXZWIgcGFnZXMgYXJlIGF1dGhvcmVkIHVzaW5nIEhUTUwgYW5kIDxNZXRhLUhUTUw+IHN0YXRlbWVudHMgZnJlZWx5CisgICAgIGludGVybWl4ZWQuICBXaGVuIGEgcGFnZSBpcyByZXF1ZXN0ZWQgYnkgYSBicm93c2VyLCB0aGUgcGFnZSBpcyBwYXNzZWQKKyAgICAgdGhyb3VnaCB0aGUgPE1ldGEtSFRNTD4gZW5naW5lLCB3aGljaCBkeW5hbWljYWxseSBwcm9jZXNzZXMgYW55CisgICAgIDxNZXRhLUhUTUw+IHN0YXRlbWVudHMgdG8gcHJvZHVjZSBhIGZpbmFsIEhUTUwgcGFnZSB3aGljaCBpcyBkZWxpdmVyZWQKKyAgICAgdG8gdGhlIGJyb3dzZXIuCisKKyAgICAgVGhlIHNvdXJjZSBkaXN0cmlidXRpb24gcHJvdmlkZXMgc2V2ZXJhbCBkaWZmZXJlbnQgaW50ZXJwcmV0ZXIgb3B0aW9uczoKKyAgICAgYSBDR0kgZW5naW5lIHdoaWNoIGNhbiBiZSBydW4gYnkgYW55IFVuaXggV2ViIHNlcnZlcjsgYSBmdWxsLWZlYXR1cmVkCisgICAgIFdlYiBzZXJ2ZXIgKG1odHRwZCkgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgYnVpbHQgaW47IGEgc3RhbmRhbG9uZQorICAgICBwcm9jZXNzb3IsIG11Y2ggbGlrZSBQZXJsIG9yIFRjbDsgYW5kIGFuIGludGVyYWN0aXZlIGRlYnVnZ2VyLCB3aXRoIGEKKyAgICAgZmVlbCBzaW1pbGFyIHRvIEdEQiAobWRiKS4KKworICAgICBUaGVyZSBpcyBhIHVzZXIgbWFpbGluZyBsaXN0OiBgbWV0YWh0bWwtdXNlcnNAbWV0YWh0bWwuY29tJy4gIFlvdSBjYW4KKyAgICAgc3Vic2NyaWJlIG9uIHRoZSBXZWIgYXQgYGh0dHA6Ly93d3cubWV0YWh0bWwuY29tL0UtTWFpbC8nLCBvciBieSBzZW5kaW5nCisgICAgIG1haWwgdG8gYG1ldGFodG1sLXVzZXJzLXJlcXVlc3RAbWV0YWh0bWwuY29tJy4KKworICAgICBQcmUtY29tcGlsZWQgZGlzdHJpYnV0aW9uIHNldHMgZm9yIHNvbWUgc3lzdGVtcyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUKKyAgICAgPE1ldGEtSFRNTD4gV2ViIHNpdGUgYXQgYGh0dHA6Ly93d3cubWV0YWh0bWwuY29tJy4KKworICAgKiBWUndlYiBCcm93c2VyCisKKyAgICAgVlJ3ZWIsIGEgYnJvd3NlciBmb3IgM0QgbW9kZWxzIG9uIHRoZSBXZWIgd3JpdHRlbiBpbiB0aGUgVmlydHVhbCBSZWFsaXR5CisgICAgIE1vZGVsaW5nIExhbmd1YWdlIChWUk1MKSwgaXMgbm93IGF2YWlsYWJsZSB1bmRlciB0aGUgR1BMLiAgVlJ3ZWIgd29ya3MKKyAgICAgaW4gY29uanVuY3Rpb24gd2l0aCBXZWIgYnJvd3NlcnMgb24gVW5peCAmIFdpbmRvd3MgcGxhdGZvcm1zLgorCisgICAgIFZSd2ViIGlzIGEgam9pbnQgcHJvamVjdCBvZiBJSUNNIChob21lIG9mIEh5cGVyLUcpLCBOQ1NBIChob21lIG9mCisgICAgIE1vc2FpYyksICYgdGhlIFVuaXZlcnNpdHkgb2YgTWlubmVzb3RhIChob21lIG9mIEdvcGhlcikuICBUaGUgc29mdHdhcmUKKyAgICAgaXMgZnJlZWx5IGF2YWlsYWJsZSBpbiBiaW5hcnkgJiBzb3VyY2UuICBWUndlYiAxLjIgZm9yIFVuaXggaGFzIGp1c3QKKyAgICAgYmVlbiByZWxlYXNlZCwgVlJ3ZWIgMS4yIGZvciBXaW5kb3dzIHdpbGwgZm9sbG93IGluIGR1ZSBjb3Vyc2UuICBZb3UgY2FuCisgICAgIGRvd25sb2FkIFZSd2ViIGZyb20gYGZ0cDovL2lpY20udHUtZ3Jhei5hYy5hdC9wdWIvSHlwZXItRy9WUndlYi9VTklYJworICAgICBhbmQgbnVtZXJvdXMgbWlycm9yIHNpdGVzLiAgRnVydGhlciBpbmZvcm1hdGlvbiBvbiBWUndlYiBjYW4gYmUgZm91bmQgYXQKKyAgICAgYGh0dHA6Ly9oeXBlcmcuaWljbS50dS1ncmF6LmFjLmF0L3Zyd2ViJy4KKworICAgICBWUk1MIGlzIGEgbm9uLXByb3ByaWV0YXJ5LCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBmaWxlIGZvcm1hdCBmb3IgM0QKKyAgICAgZ3JhcGhpY3Mgb24gdGhlIEludGVybmV0LiAgQWxzbyBzZWUgYGh0dHA6Ly93d3cuc2RzYy5lZHUvdnJtbC8nLCAgdGhlCisgICAgIFZSTUwgUmVwb3NpdG9yeS4KKworCisKK1RoZSBEZWx1eGUgRGlzdHJpYnV0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGhhcyBiZWVuIGFza2VkIHJlcGVhdGVkbHkgdG8gY3JlYXRlIGEgcGFja2FnZQordGhhdCBwcm92aWRlcyBleGVjdXRhYmxlcyBmb3IgYWxsIG9mIG91ciBzb2Z0d2FyZS4gIE5vcm1hbGx5IHdlIG9mZmVyIG9ubHkKK3NvdXJjZXMuICBUaGUgRGVsdXhlIERpc3RyaWJ1dGlvbiBwcm92aWRlcyBiaW5hcmllcyB3aXRoIHRoZSBzb3VyY2UgY29kZSBhbmQKK2luY2x1ZGVzIHNpeCBULXNoaXJ0cywgYWxsIG91ciBDRC1ST01zLCBwcmludGVkIG1hbnVhbHMsICYgcmVmZXJlbmNlIGNhcmRzLgorCitUaGUgRlNGIERlbHV4ZSBEaXN0cmlidXRpb24gY29udGFpbnMgdGhlIGJpbmFyaWVzIGFuZCBzb3VyY2VzIHRvIGh1bmRyZWRzIG9mCitkaWZmZXJlbnQgcHJvZ3JhbXMgaW5jbHVkaW5nIEVtYWNzLCB0aGUgR05VIEMvQysrIENvbXBpbGVyLCB0aGUgR05VIERlYnVnZ2VyLAordGhlIGNvbXBsZXRlIFggV2luZG93IFN5c3RlbSwgYW5kIGFsbCB0aGUgR05VIHV0aWxpdGllcy4KKworV2Ugd2lsbCBtYWtlIGEgRGVsdXhlIERpc3RyaWJ1dGlvbiBmb3IgbW9zdCBtYWNoaW5lcy9vcGVyYXRpbmcgc3lzdGVtcy4gIFdlCittYXkgYmUgYWJsZSB0byBzZW5kIHNvbWVvbmUgdG8geW91ciBvZmZpY2UgdG8gZG8gdGhlIGNvbXBpbGF0aW9uLCBpZiB3ZSBjYW4ndAorZmluZCBhIHN1aXRhYmxlIG1hY2hpbmUgaGVyZS4gIEhvd2V2ZXIsIHdlIGNhbiBvbmx5IGNvbXBpbGUgdGhlIHByb2dyYW1zIHRoYXQKK2FscmVhZHkgc3VwcG9ydCB5b3VyIGNob3NlbiBtYWNoaW5lL3N5c3RlbSAtIHBvcnRpbmcgaXMgYSBzZXBhcmF0ZSBtYXR0ZXIuCisoVG8gY29tbWlzc2lvbiBhIHBvcnQsIHNlZSB0aGUgR05VIFNlcnZpY2UgRGlyZWN0b3J5OyBkZXRhaWxzIGluICpOb3RlIEZyZWUKK1NvZnR3YXJlIFN1cHBvcnQ6Oi4pIENvbXBpbGluZyBhbGwgdGhlc2UgcHJvZ3JhbXMgdGFrZXMgdGltZTsgYSBEZWx1eGUKK0Rpc3RyaWJ1dGlvbiBmb3IgYW4gdW51c3VhbCBtYWNoaW5lIHdpbGwgdGFrZSBsb25nZXIgdG8gcHJvZHVjZSB0aGFuIG9uZSBmb3IKK2EgY29tbW9uIG1hY2hpbmUuICBQbGVhc2UgY29udGFjdCB0aGUgRlNGIE9mZmljZSB3aXRoIGFueSBxdWVzdGlvbnMuCisKK1dlIHN1cHBseSB0aGUgc29mdHdhcmUgb24gYSB3cml0ZS1vbmNlIENELVJPTSAoaW4gSVNPIDk2NjAgZm9ybWF0IHdpdGggIlJvY2sKK1JpZGdlIiBleHRlbnNpb25zKSwgb3Igb24gb25lIG9mIHRoZXNlIHRhcGVzIGluIFVuaXggYHRhcicgZm9ybWF0OiAxNjAwIG9yCis2MjUwYnBpIDEvMmluIHJlZWwsIFN1biBEQzMwMFhMUCAxLzRpbiBjYXJ0cmlkZ2UgLSBRSUMyNCwgSUJNIFJTLzYwMDAgMS80aW4KK2MudC4gLSBRSUMgMTUwLCBFeGFieXRlIDhtbSBjLnQuLCBvciBEQVQgNG1tIGMudC4gIElmIHlvdXIgY29tcHV0ZXIgY2Fubm90CityZWFkIGFueSBvZiB0aGVzZSwgcGxlYXNlIGNvbnRhY3QgdXMgdG8gc2VlIGlmIHdlIGNhbiBoYW5kbGUgeW91ciBmb3JtYXQuCisKK1RoZSBtYW51YWxzIGluY2x1ZGVkIGFyZSBvbmUgZWFjaCBvZiBgQmlzb24nLCBgQ2FsYycsIGBHQVdLJywgYEdDQycsIGBHTlUgQworTGlicmFyeScsIGBHREInLCBgRmxleCcsIGBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UnLCBgUHJvZ3JhbW1pbmcgaW4gRW1hY3MKK0xpc3A6IEFuIEludHJvZHVjdGlvbicsIGBNYWtlJywgYFRleGluZm8nLCAmIGBUZXJtY2FwJyBtYW51YWxzOyBzaXggY29waWVzIG9mCit0aGUgYEdOVSBFbWFjcycgbWFudWFsOyBhbmQgdGVuIHJlZmVyZW5jZSBjYXJkcyBlYWNoIGZvciBFbWFjcywgQmlzb24sIENhbGMsCitGbGV4LCAmIEdEQi4KKworRXZlcnkgRGVsdXhlIERpc3RyaWJ1dGlvbiBhbHNvIGhhcyBhIGNvcHkgb2YgdGhlIGxhdGVzdCBlZGl0aW9ucyBvZiBvdXIKK0NELVJPTXMgdGhhdCBoYXZlIHNvdXJjZXMgb2Ygb3VyIHNvZnR3YXJlICYgY29tcGlsZXIgdG9vbCBiaW5hcmllcyBmb3Igc29tZQorc3lzdGVtcy4gIFRoZSBDRHMgYXJlIGluIElTTyA5NjYwIGZvcm1hdCB3aXRoIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucy4KKworVGhlIHByaWNlIG9mIHRoZSBEZWx1eGUgRGlzdHJpYnV0aW9uIGlzICQ1MDAwIChzaGlwcGluZyBpbmNsdWRlZCkuICBUaGVzZQorc2FsZXMgcHJvdmlkZSBlbm9ybW91cyBmaW5hbmNpYWwgYXNzaXN0YW5jZSB0byBoZWxwIHRoZSBGU0YgZGV2ZWxvcCBtb3JlIGZyZWUKK3NvZnR3YXJlLiAgVG8gb3JkZXIsIHBsZWFzZSBmaWxsIG91dCB0aGUgIkRlbHV4ZSBEaXN0cmlidXRpb24iIHNlY3Rpb24gb24gdGhlCisqbm90ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gT3JkZXIgRm9ybTo6LiAgYW5kIHNlbmQgaXQgdG86CisKKyAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMAorICAgICAgICBCb3N0b24sIE1BICAgMDIxMTEtMTMwNworICAgICAgICBVU0EKKyAgICAgCisgICAgICAgIFRlbGVwaG9uZTogKzEtNjE3LTU0Mi01OTQyCisgICAgICAgIEZheCAoaW5jbHVkaW5nIEphcGFuKTogKzEtNjE3LTU0Mi0yNjUyCisgICAgICAgIEVsZWN0cm9uaWMgTWFpbDogZ251QHByZXAuYWkubWl0LmVkdQorICAgICAgICBXb3JsZCBXaWRlIFdlYjogaHR0cDovL3d3dy5nbnUuYWkubWl0LmVkdQorCisgCisKK0dOVSBEb2N1bWVudGF0aW9uCisqKioqKioqKioqKioqKioqKgorCitHTlUgaXMgZGVkaWNhdGVkIHRvIGhhdmluZyBxdWFsaXR5LCBlYXN5LXRvLXVzZSBvbmxpbmUgJiBwcmludGVkCitkb2N1bWVudGF0aW9uLiAgR05VIG1hbnVhbHMgYXJlIGludGVuZGVkIHRvIGV4cGxhaW4gdW5kZXJseWluZyBjb25jZXB0cywKK2Rlc2NyaWJlIGhvdyB0byB1c2UgYWxsIHRoZSBmZWF0dXJlcyBvZiBlYWNoIHByb2dyYW0sICYgZ2l2ZSBleGFtcGxlcyBvZgorY29tbWFuZCB1c2UuICBHTlUgbWFudWFscyBhcmUgZGlzdHJpYnV0ZWQgYXMgVGV4aW5mbyBzb3VyY2UgZmlsZXMsIHdoaWNoCit5aWVsZCBib3RoIHR5cGVzZXQgaGFyZGNvcHkgdmlhIHRoZSBUZVggZG9jdW1lbnQgZm9ybWF0dGluZyBzeXN0ZW0gYW5kIG9ubGluZQoraHlwZXJ0ZXh0IGRpc3BsYXkgdmlhIHRoZSBtZW51LWRyaXZlbiBJbmZvIHN5c3RlbS4gIFNvdXJjZSBmb3IgdGhlc2UgbWFudWFscworY29tZXMgd2l0aCBvdXIgc29mdHdhcmU7IGhlcmUgYXJlIHRoZSBtYW51YWxzIHRoYXQgd2UgcHVibGlzaCBhcyBwcmludGVkCitib29rcy4gIFNlZSB0aGUgKm5vdGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIE9yZGVyIEZvcm06Oi4sIHRvIG9yZGVyIHRoZW0uCisKK01vc3QgR05VIG1hbnVhbHMgYXJlIGJvdW5kIGFzIHNvZnQgY292ZXIgYm9va3Mgd2l0aCAibGF5LWZsYXQiIGJpbmRpbmdzLgorVGhpcyBhbGxvd3MgeW91IHRvIG9wZW4gdGhlbSBzbyB0aGV5IGxpZSBmbGF0IG9uIGEgdGFibGUgd2l0aG91dCBjcmVhc2luZyB0aGUKK2JpbmRpbmcuICBUaGV5IGhhdmUgYW4gaW5uZXIgY2xvdGggc3BpbmUgYW5kIGFuIG91dGVyIGNhcmRib2FyZCBjb3ZlciB0aGF0Cit3aWxsIG5vdCBicmVhayBvciBjcmVhc2UgYXMgYW4gb3JkaW5hcnkgcGFwZXJiYWNrIHdpbGwuICBDdXJyZW50bHksIHRoZQorYFVzaW5nIGFuZCBQb3J0aW5nIEdOVSBDQycsIGBHREInLCBgRW1hY3MnLCBgRW1hY3MgTGlzcCBSZWZlcmVuY2UnLAorYFByb2dyYW1taW5nIGluIEVtYWNzIExpc3A6IEFuIEludHJvZHVjdGlvbicsIGBHTlUgQXdrIFVzZXIncyBHdWlkZScsIGBNYWtlJywKKyYgYEJpc29uJyBtYW51YWxzIGhhdmUgdGhpcyBiaW5kaW5nLiAgT3VyIG90aGVyIG1hbnVhbHMgYWxzbyBsaWUgZmxhdCB3aGVuCitvcGVuZWQsIHVzaW5nIGEgR0JDIGJpbmRpbmcuICBPdXIgbWFudWFscyBhcmUgN2luIGJ5IDkuMjVpbiBleGNlcHQgdGhlIDguNWluCitieSAxMWluIGBDYWxjJyBtYW51YWwuCisKK1RoZSBlZGl0aW9uIG51bWJlciBvZiB0aGUgbWFudWFsIGFuZCB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcHJvZ3JhbSBsaXN0ZWQKK2FmdGVyIGVhY2ggbWFudWFsJ3MgbmFtZSB3ZXJlIGN1cnJlbnQgYXQgdGhlIHRpbWUgdGhpcyBCdWxsZXRpbiB3YXMgcHVibGlzaGVkLgorCitgRGVidWdnaW5nIHdpdGggR0RCJyAoZm9yIFZlcnNpb24gNC4xNikgdGVsbHMgaG93IHRvIHJ1biB5b3VyIHByb2dyYW0gdW5kZXIKK0dOVSBEZWJ1Z2dlciBjb250cm9sLCBleGFtaW5lIGFuZCBhbHRlciBkYXRhLCBtb2RpZnkgYSBwcm9ncmFtJ3MgZmxvdyBvZgorY29udHJvbCwgYW5kIHVzZSBHREIgdGhyb3VnaCBHTlUgRW1hY3MuCisKK1RoZSBgR05VIEVtYWNzIE1hbnVhbCcgKDEydGggRWRpdGlvbiBmb3IgVmVyc2lvbiAxOS4zMykgZGVzY3JpYmVzIGVkaXRpbmcgd2l0aAorR05VIEVtYWNzLiAgSXQgZXhwbGFpbnMgYWR2YW5jZWQgZmVhdHVyZXMsIGluY2x1ZGluZyBvdXRsaW5lIG1vZGUgYW5kIHJlZ3VsYXIKK2V4cHJlc3Npb24gc2VhcmNoOyBob3cgdG8gdXNlIHNwZWNpYWwgcHJvZ3JhbW1pbmcgbW9kZXMgdG8gd3JpdGUgbGFuZ3VhZ2VzCitsaWtlIEMrKyBhbmQgVGVYOyBob3cgdG8gdXNlIHRoZSBgdGFncycgdXRpbGl0eTsgaG93IHRvIGNvbXBpbGUgYW5kIGNvcnJlY3QKK2NvZGU7IGhvdyB0byBtYWtlIHlvdXIgb3duIGtleWJpbmRpbmdzOyBhbmQgb3RoZXIgZWxlbWVudGFyeSBjdXN0b21pemF0aW9ucy4KKworYFByb2dyYW1taW5nIGluIEVtYWNzIExpc3A6IEFuIEludHJvZHVjdGlvbicgKE9jdG9iZXIgMTk5NSBFZGl0aW9uIDEuMDQpIGlzCitmb3IgcGVvcGxlIHdobyBhcmUgbm90IG5lY2Vzc2FyaWx5IGludGVyZXN0ZWQgaW4gcHJvZ3JhbW1pbmcsIGJ1dCB3aG8gZG8gd2FudAordG8gY3VzdG9taXplIG9yIGV4dGVuZCB0aGVpciBjb21wdXRpbmcgZW52aXJvbm1lbnQuICBJZiB5b3UgcmVhZCBpdCBpbiBFbWFjcwordW5kZXIgSW5mbyBtb2RlLCB5b3UgY2FuIHJ1biB0aGUgc2FtcGxlIHByb2dyYW1zIGRpcmVjdGx5LgorCitgVGhlIEdOVSBFbWFjcyBMaXNwIFJlZmVyZW5jZSBNYW51YWwnIChFZGl0aW9uIDIuNCBmb3IgVmVyc2lvbiAxOS4yOSkgYW5kCitgVGhlIEdOVSBFbWFjcyBMaXNwIFJlZmVyZW5jZSwgSmFwYW5lc2UgRWRpdGlvbicgKEphcGFuZXNlIERyYWZ0IFJldmlzaW9uCisxLjAsIGZyb20gRW5nbGlzaCBFZGl0aW9uIDIuNCBmb3IgVmVyc2lvbiAxOS4yOSkgY292ZXIgdGhpcyBwcm9ncmFtbWluZworbGFuZ3VhZ2UgaW4gZGVwdGgsIGluY2x1ZGluZyBkYXRhIHR5cGVzLCBjb250cm9sIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywKK21hY3Jvcywgc3ludGF4IHRhYmxlcywgc2VhcmNoaW5nL21hdGNoaW5nLCBtb2Rlcywgd2luZG93cywga2V5bWFwcywgYnl0ZQorY29tcGlsYXRpb24sIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmZhY2UuCisKK2BUaGUgR05VIEF3ayBVc2VyJ3MgR3VpZGUnIChFZGl0aW9uIDEuMCBmb3IgVmVyc2lvbiAzLjApIHRlbGxzIGhvdyB0byB1c2UKK2BnYXdrJy4gIEl0IGlzIHdyaXR0ZW4gZm9yIHRob3NlIHdobyBoYXZlIG5ldmVyIHVzZWQgYGF3aycgYW5kIGRlc2NyaWJlcworZmVhdHVyZXMgb2YgdGhpcyBwb3dlcmZ1bCBzdHJpbmcgYW5kIHJlY29yZCBtYW5pcHVsYXRpb24gbGFuZ3VhZ2UuICBJdAorY2xlYXJseSBkZWxpbmVhdGVzIHRob3NlIGZlYXR1cmVzIHdoaWNoIGFyZSBwYXJ0IG9mIFBPU0lYIGBhd2snIGZyb20gYGdhd2snCitleHRlbnNpb25zLCBwcm92aWRpbmcgYSBjb21wcmVoZW5zaXZlIGd1aWRlIHRvIGBhd2snIHByb2dyYW0gcG9ydGFiaWxpdHkuCisKK2BHTlUgTWFrZScgKEVkaXRpb24gMC41MCBmb3IgVmVyc2lvbiAzLjc1IEJldGEpIGRlc2NyaWJlcyBHTlUgYG1ha2UnLCBhCitwcm9ncmFtIHVzZWQgdG8gcmVidWlsZCBwYXJ0cyBvZiBvdGhlciBwcm9ncmFtcy4gIFRoZSBtYW51YWwgdGVsbHMgaG93IHRvCit3cml0ZSAibWFrZWZpbGVzIiwgd2hpY2ggc3BlY2lmeSBob3cgYSBwcm9ncmFtIGlzIHRvIGJlIGNvbXBpbGVkIGFuZCBob3cgaXRzCitmaWxlcyBkZXBlbmQgb24gZWFjaCBvdGhlci4gIEluY2x1ZGVkIGFyZSBhbiBpbnRyb2R1Y3RvcnkgY2hhcHRlciBmb3Igbm92aWNlCit1c2VycyBhbmQgYSBzZWN0aW9uIGFib3V0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGRlcGVuZGVuY2llcy4KKworVGhlIGBGbGV4JyBtYW51YWwgKEVkaXRpb24gMS4wMyBmb3IgVmVyc2lvbiAyLjMuNykgdGVhY2hlcyB5b3UgdG8gd3JpdGUgYQorbGV4aWNhbCBzY2FubmVyIGRlZmluaXRpb24gZm9yIHRoZSBgZmxleCcgcHJvZ3JhbSB0byBjcmVhdGUgYSBDKysgb3IgQy1jb2RlZAorc2Nhbm5lciB0aGF0IHJlY29nbml6ZXMgdGhlIHBhdHRlcm5zIGRlZmluZWQuICBZb3UgbmVlZCBubyBwcmlvciBrbm93bGVkZ2Ugb2YKK3NjYW5uZXJzLgorCitgVGhlIEJpc29uIE1hbnVhbCcgKE5vdmVtYmVyIDE5OTUgRWRpdGlvbiBmb3IgVmVyc2lvbiAxLjI1KSB0ZWFjaGVzIHlvdSBob3cKK3RvIHdyaXRlIGNvbnRleHQtZnJlZSBncmFtbWFycyBmb3IgdGhlIEJpc29uIHByb2dyYW0gdGhhdCBjb252ZXJ0IGludG8KK0MtY29kZWQgcGFyc2Vycy4gIFlvdSBuZWVkIG5vIHByaW9yIGtub3dsZWRnZSBvZiBwYXJzZXIgZ2VuZXJhdG9ycy4KKworYFVzaW5nIGFuZCBQb3J0aW5nIEdOVSBDQycgKE5vdmVtYmVyIDE5OTUgRWRpdGlvbiBmb3IgVmVyc2lvbiAyLjcuMikgdGVsbHMKK2hvdyB0byBydW4sIGluc3RhbGwsIGFuZCBwb3J0IHRoZSBHTlUgQyBDb21waWxlciB0byBuZXcgc3lzdGVtcy4gIEl0IGxpc3RzCituZXcgZmVhdHVyZXMgYW5kIGluY29tcGF0aWJpbGl0aWVzIG9mIEdDQywgYnV0IHBlb3BsZSBub3QgZmFtaWxpYXIgd2l0aCBDCit3aWxsIHN0aWxsIG5lZWQgYSBnb29kIHJlZmVyZW5jZSBvbiB0aGUgQyBwcm9ncmFtbWluZyBsYW5ndWFnZS4gIEl0IGFsc28KK2NvdmVycyBHKysuCisKK1RoZSBgVGV4aW5mbycgbWFudWFsIChFZGl0aW9uIDIuMjQgZm9yIFZlcnNpb24gMykgZXhwbGFpbnMgdGhlIG1hcmt1cAorbGFuZ3VhZ2UgdGhhdCBwcm9kdWNlcyBvdXIgb25saW5lIEluZm8gZG9jdW1lbnRhdGlvbiAmIHR5cGVzZXQgaGFyZGNvcGllcy4KK0l0IHRlbGxzIHlvdSBob3cgdG8gbWFrZSB0YWJsZXMsIGxpc3RzLCBjaGFwdGVycywgbm9kZXMsIGFjY2VudGVkICYgc3BlY2lhbAorY2hhcmFjdGVycywgaW5kZXhlcywgY3Jvc3MgcmVmZXJlbmNlcywgJiBob3cgdG8gY2F0Y2ggbWlzdGFrZXMuCisKK2BUaGUgVGVybWNhcCBNYW51YWwnICgzcmQgRWRpdGlvbiBmb3IgVmVyc2lvbiAxLjMpLCBvZnRlbiBkZXNjcmliZWQgYXMgInR3aWNlCithcyBtdWNoIGFzIHlvdSBldmVyIHdhbnRlZCB0byBrbm93IGFib3V0IHRlcm1jYXAsIiBkZXRhaWxzIHRoZSBmb3JtYXQgb2YgdGhlCit0ZXJtY2FwIGRhdGFiYXNlLCB0aGUgZGVmaW5pdGlvbnMgb2YgdGVybWluYWwgY2FwYWJpbGl0aWVzLCBhbmQgdGhlIHByb2Nlc3MKK29mIGludGVycm9nYXRpbmcgYSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4gIFRoaXMgbWFudWFsIGlzIHByaW1hcmlseSBmb3IKK3Byb2dyYW1tZXJzLgorCitUaGUgYEMgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsJyAoRWRpdGlvbiAwLjA4IGZvciBWZXJzaW9uIDIuMCkgZGVzY3JpYmVzIHRoZQorbGlicmFyeSdzIGZhY2lsaXRpZXMsIGluY2x1ZGluZyBib3RoIHdoYXQgVW5peCBjYWxscyAibGlicmFyeSBmdW5jdGlvbnMiICYKKyJzeXN0ZW0gY2FsbHMuIiAgV2UgYXJlIGRvaW5nIHNtYWxsIGNvcGllciBydW5zIG9mIHRoaXMgbWFudWFsIHVudGlsIGl0CitiZWNvbWVzIG1vcmUgc3RhYmxlLiAgUGxlYXNlIHNlbmQgZml4ZXMgdG8gYGJ1Zy1nbGliYy1tYW51YWxAcHJlcC5haS5taXQuZWR1Jy4KKworVGhlIGBFbWFjcyBDYWxjIE1hbnVhbCcgKGZvciBWZXJzaW9uIDIuMDIpIGlzIGJvdGggYSB0dXRvcmlhbCBhbmQgYSByZWZlcmVuY2UKK21hbnVhbC4gIEl0IHRlbGxzIGhvdyB0byBkbyBvcmRpbmFyeSBhcml0aG1ldGljLCBob3cgdG8gdXNlIENhbGMgZm9yIGFsZ2VicmEsCitjYWxjdWx1cywgYW5kIG90aGVyIGZvcm1zIG9mIG1hdGhlbWF0aWNzLCBhbmQgaG93IHRvIGV4dGVuZCBDYWxjLgorCisgCisKK0dOVSBTb2Z0d2FyZQorKioqKioqKioqKioqCisKK0FsbCBvdXIgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHZpYSBGVFA7IHNlZSAqTm90ZSBIb3cgdG8gR2V0IEdOVSBTb2Z0d2FyZTo6LgorV2UgYWxzbyBvZmZlciAqTm90ZSBDRC1ST01zOjosIGFuZCBwcmludGVkICpOb3RlIERvY3VtZW50YXRpb246Oiwgd2hpY2gKK2luY2x1ZGVzIG1hbnVhbHMgYW5kIHJlZmVyZW5jZSBjYXJkcy4gIEluIHRoZSBhcnRpY2xlcyBkZXNjcmliaW5nIHRoZQorY29udGVudHMgb2YgZWFjaCBtZWRpdW0sIHRoZSB2ZXJzaW9uIG51bWJlciBsaXN0ZWQgYWZ0ZXIgZWFjaCBwcm9ncmFtIG5hbWUKK3dhcyBjdXJyZW50IHdoZW4gd2UgcHVibGlzaGVkIHRoaXMgQnVsbGV0aW4uICBXaGVuIHlvdSBvcmRlciBhIG5ld2VyIENELVJPTSwKK3NvbWUgb2YgdGhlIHByb2dyYW1zIG1heSBiZSBuZXdlciBhbmQgdGhlcmVmb3JlIHRoZSB2ZXJzaW9uIG51bWJlciBoaWdoZXIuCitTZWUgdGhlICpub3RlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBPcmRlciBGb3JtOjouLCBmb3Igb3JkZXJpbmcKK2luZm9ybWF0aW9uLgorCitTb21lIG9mIHRoZSBjb250ZW50cyBvZiBvdXIgRlRQIGRpc3RyaWJ1dGlvbnMgYXJlIGNvbXByZXNzZWQuICBXZSBoYXZlCitzb2Z0d2FyZSBvbiBvdXIgRlRQIHNpdGVzIHRvIHVuY29tcHJlc3MgdGhlc2UgZmlsZXMuICBEdWUgdG8gcGF0ZW50IHRyb3VibGVzCit3aXRoIGBjb21wcmVzcycsIHdlIHVzZSBhbm90aGVyIGNvbXByZXNzaW9uIHByb2dyYW0sIGBnemlwJy4gIChTdWNoCitwcm9oaWJpdGlvbnMgb24gc29mdHdhcmUgZGV2ZWxvcG1lbnQgYXJlIGZvdWdodCBieSB0aGUgTGVhZ3VlIGZvciBQcm9ncmFtbWluZworRnJlZWRvbTsgKm5vdGUgV2hhdCBJcyB0aGUgTFBGOjouLCBmb3IgZGV0YWlscy4pCisKK1lvdSBtYXkgbmVlZCB0byBidWlsZCBHTlUgYG1ha2UnIGJlZm9yZSB5b3UgYnVpbGQgb3VyIG90aGVyIHNvZnR3YXJlLiAgU29tZQordmVuZG9ycyBzdXBwbHkgbm8gYG1ha2UnIHV0aWxpdHkgYXQgYWxsIGFuZCBzb21lIG5hdGl2ZSBgbWFrZScgcHJvZ3JhbXMgbGFjawordGhlIGBWUEFUSCcgZmVhdHVyZSBlc3NlbnRpYWwgZm9yIHVzaW5nIHRoZSBHTlUgY29uZmlndXJlIHN5c3RlbSB0byBpdHMgZnVsbAorZXh0ZW50LiAgVGhlIEdOVSBgbWFrZScgc291cmNlcyBoYXZlIGEgc2hlbGwgc2NyaXB0IHRvIGJ1aWxkIGBtYWtlJyBpdHNlbGYgb24KK3N1Y2ggc3lzdGVtcy4KKworV2Ugd2VsY29tZSBhbGwgYnVnIHJlcG9ydHMgYW5kIGVuaGFuY2VtZW50cyBzZW50IHRvIHRoZSBhcHByb3ByaWF0ZQorZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3QgKCpub3RlIEZyZWUgU29mdHdhcmUgU3VwcG9ydDo6LikuCisKKyAKKworQ29uZmlndXJpbmcgR05VIFNvZnR3YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2UgYXJlIHVzaW5nIEF1dG9jb25mLCBhIHVuaWZvcm0gc2NoZW1lIGZvciBjb25maWd1cmluZyBHTlUgc29mdHdhcmUgcGFja2FnZXMKK2luIG9yZGVyIHRvIGNvbXBpbGUgdGhlbSAoc2VlICJBdXRvY29uZiIgYW5kICJBdXRvbWFrZSIgYmVsb3csIGluIHRoaXMKK2FydGljbGUpLiAgVGhlIGdvYWwgaXMgdG8gaGF2ZSBhbGwgR05VIHNvZnR3YXJlIHN1cHBvcnQgdGhlIHNhbWUgYWx0ZXJuYXRpdmVzCitmb3IgbmFtaW5nIG1hY2hpbmUgYW5kIHN5c3RlbSB0eXBlcy4KKworVWx0aW1hdGVseSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBjb25maWd1cmUgYW5kIGJ1aWxkIHRoZSBlbnRpcmUgc3lzdGVtIGFsbAorYXQgb25jZSwgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gY29uZmlndXJlIGVhY2ggaW5kaXZpZHVhbCBwYWNrYWdlIHNlcGFyYXRlbHkuCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGJvdGggdGhlIGhvc3QgYW5kIHRhcmdldCBzeXN0ZW0gdG8gYnVpbGQKK2Nyb3NzLWNvbXBpbGF0aW9uIHRvb2xzLiAgTW9zdCBHTlUgcHJvZ3JhbXMgbm93IHVzZSBBdXRvY29uZi1nZW5lcmF0ZWQKK2NvbmZpZ3VyZSBzY3JpcHRzLgorCisgCisKK0dOVSBTb2Z0d2FyZSBOb3cgQXZhaWxhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgZnV0dXJlIHByb2dyYW1zIGFuZCBmZWF0dXJlcywgc2VlICpOb3RlIEZvcnRoY29taW5nIEdOVXM6Oi4KKworS2V5IHRvIGNyb3NzIHJlZmVyZW5jZToKKworICAgICAgICBCaW5DRCAgICAgICAgSmFudWFyeSAxOTk3IEJpbmFyaWVzIENELVJPTQorICAgICAgICBTcmNDRCAgICAgICAgSmFudWFyeSAxOTk3IFNvdXJjZSBDRC1ST01zCisKK1tGU0ZtYW5dIHNob3dzIHRoYXQgd2Ugc2VsbCBhIG1hbnVhbCBmb3IgdGhhdCBwYWNrYWdlLiAgW0ZTRnJjXSBzaG93cyB3ZSBzZWxsCithIHJlZmVyZW5jZSBjYXJkIGZvciB0aGF0IHBhY2thZ2UuICBUbyBvcmRlciB0aGVtLCBzZWUgdGhlICpub3RlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24gT3JkZXIgRm9ybTo6LiAgKk5vdGUgRG9jdW1lbnRhdGlvbjo6LCBmb3IgbW9yZQoraW5mb3JtYXRpb24gb24gdGhlIG1hbnVhbHMuICBTb3VyY2UgY29kZSBmb3IgZWFjaCBtYW51YWwgb3IgcmVmZXJlbmNlIGNhcmQgaXMKK2luY2x1ZGVkIHdpdGggZWFjaCBwYWNrYWdlLgorCisgICAqIGBhY20nICAgKFNyY0NEKQorCisgICAgIGBhY20nIGlzIGEgTEFOLW9yaWVudGVkLCBtdWx0aXBsYXllciwgYWVyaWFsIGNvbWJhdCBzaW11bGF0aW9uIHRoYXQgcnVucworICAgICB1bmRlciB0aGUgWCBXaW5kb3cgU3lzdGVtLiAgUGxheWVycyBlbmdhZ2UgaW4gYWlyIHRvIGFpciBjb21iYXQgYWdhaW5zdAorICAgICBvbmUgYW5vdGhlciB1c2luZyBoZWF0IHNlZWtpbmcgbWlzc2lsZXMgYW5kIGNhbm5vbnMuICBXZSBhcmUgd29ya2luZyBvbgorICAgICBhIG1vcmUgYWNjdXJhdGUgc2ltdWxhdGlvbiBvZiByZWFsIGFpcnBsYW5lIGZsaWdodCBjaGFyYWN0ZXJpc3RpY3MuCisKKyAgICogQXBhY2hlICAgKkFsc28gc2VlKiBgaHR0cDovL3d3dy5hcGFjaGUub3JnLycgICAoU3JjQ0QpCisKKyAgICAgQXBhY2hlIGlzIGFuIEhUVFAgc2VydmVyIGRlc2lnbmVkIGFzIGEgc3VjY2Vzc29yIHRvIHRoZSBOQ1NBIGZhbWlseSBvZgorICAgICB3ZWIgc2VydmVycy4gIEl0IGFkZHMgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgbmV3IGZ1bmN0aW9uYWxpdHksIGhhcyBhbgorICAgICBleHRlbnNpdmUgQVBJIGZvciBtb2R1bGFyIGVuaGFuY2VtZW50cywgaXMgZXh0cmVtZWx5IGZsZXhpYmxlIHdpdGhvdXQKKyAgICAgY29tcHJvbWlzaW5nIHNwZWVkLCBhbmQgaGFzIGFuIGFjdGl2ZSBkZXZlbG9wbWVudCBncm91cCBhbmQgdXNlcgorICAgICBjb21tdW5pdHkuCisKKyAgICogQXV0b2NvbmYgICAoU3JjQ0QpCisKKyAgICAgQXV0b2NvbmYgcHJvZHVjZXMgc2hlbGwgc2NyaXB0cyB3aGljaCBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBzb3VyY2UgY29kZQorICAgICBwYWNrYWdlcy4gIFRoZXNlIHNjcmlwdHMgYWRhcHQgdGhlIHBhY2thZ2VzIHRvIG1hbnkga2luZHMgb2YgVW5peC1saWtlCisgICAgIHN5c3RlbXMgd2l0aG91dCBtYW51YWwgdXNlciBpbnRlcnZlbnRpb24uICBBdXRvY29uZiBjcmVhdGVzIGEgc2NyaXB0IGZvcgorICAgICBhIHBhY2thZ2UgZnJvbSBhIHRlbXBsYXRlIGZpbGUgd2hpY2ggbGlzdHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZmVhdHVyZXMKKyAgICAgd2hpY2ggdGhlIHBhY2thZ2UgY2FuIHVzZSwgaW4gdGhlIGZvcm0gb2YgYG00JyBtYWNybyBjYWxscy4gIEF1dG9jb25mCisgICAgIHJlcXVpcmVzIEdOVSBgbTQnIHRvIG9wZXJhdGUsIGJ1dCB0aGUgcmVzdWx0aW5nIGNvbmZpZ3VyZSBzY3JpcHRzIGl0CisgICAgIGdlbmVyYXRlcyBkbyBub3QuCisKKyAgICogQXV0b21ha2UgICAoU3JjQ0QpCisKKyAgICAgQXV0b21ha2UgaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIGBNYWtlZmlsZS5pbidzIGZvciB1c2Ugd2l0aCBBdXRvY29uZi4KKyAgICAgVGhlIGdlbmVyYXRlZCBtYWtlZmlsZXMgYXJlIGNvbXBsaWFudCB3aXRoIEdOVSBNYWtlZmlsZSBzdGFuZGFyZHMuCisKKyAgICogQkFTSCAgIChTcmNDRCkKKworICAgICBHTlUncyBzaGVsbCwgQkFTSCAoQm91cm5lIEFnYWluIFNIZWxsKSwgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBVbml4IGBzaCcKKyAgICAgYW5kIG9mZmVycyBtYW55IGV4dGVuc2lvbnMgZm91bmQgaW4gYGNzaCcgYW5kIGBrc2gnLiAgQkFTSCBoYXMgam9iCisgICAgIGNvbnRyb2wsIGBjc2gnLXN0eWxlIGNvbW1hbmQgaGlzdG9yeSwgY29tbWFuZC1saW5lIGVkaXRpbmcgKHdpdGggRW1hY3MKKyAgICAgYW5kIGB2aScgbW9kZXMgYnVpbHQtaW4pLCBhbmQgdGhlIGFiaWxpdHkgdG8gcmViaW5kIGtleXMgdmlhIHRoZQorICAgICBgcmVhZGxpbmUnIGxpYnJhcnkuICBCQVNIIGNvbmZvcm1zIHRvIHRoZSBQT1NJWCAxMDAzLjItMTk5MiBzdGFuZGFyZC4KKworICAgKiBgYmMnICAgKFNyY0NEKQorCisgICAgIGBiYycgaXMgYW4gaW50ZXJhY3RpdmUgYWxnZWJyYWljIGxhbmd1YWdlIHdpdGggYXJiaXRyYXJ5IHByZWNpc2lvbgorICAgICBudW1iZXJzLiAgR05VIGBiYycgZm9sbG93cyB0aGUgUE9TSVggMTAwMy4yLTE5OTIgc3RhbmRhcmQgd2l0aCBzZXZlcmFsCisgICAgIGV4dGVuc2lvbnMsIGluY2x1ZGluZyBtdWx0aS1jaGFyYWN0ZXIgdmFyaWFibGUgbmFtZXMsIGFuIGBlbHNlJworICAgICBzdGF0ZW1lbnQsIGFuZCBmdWxsIEJvb2xlYW4gZXhwcmVzc2lvbnMuICBUaGUgUlBOIGNhbGN1bGF0b3IgYGRjJyBpcyBub3cKKyAgICAgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgc2FtZSBwYWNrYWdlLCBidXQgR05VIGBiYycgaXMgbm90IGltcGxlbWVudGVkCisgICAgIGFzIGEgYGRjJyBwcmVwcm9jZXNzb3IuCisKKyAgICogQkZEICAgKEJpbkNELCBTcmNDRCkKKworICAgICBUaGUgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5IGFsbG93cyBhIHByb2dyYW0gd2hpY2ggb3BlcmF0ZXMgb24KKyAgICAgb2JqZWN0IGZpbGVzIChlLmcuLCBgbGQnIG9yIEdEQikgdG8gc3VwcG9ydCBtYW55IGRpZmZlcmVudCBmb3JtYXRzIGluIGEKKyAgICAgY2xlYW4gd2F5LiAgQkZEIHByb3ZpZGVzIGEgcG9ydGFibGUgaW50ZXJmYWNlLCBzbyB0aGF0IG9ubHkgQkZEIG5lZWRzIHRvCisgICAgIGtub3cgdGhlIGRldGFpbHMgb2YgYSBwYXJ0aWN1bGFyIGZvcm1hdC4gIE9uZSByZXN1bHQgaXMgdGhhdCBhbGwKKyAgICAgcHJvZ3JhbXMgdXNpbmcgQkZEIHdpbGwgc3VwcG9ydCBmb3JtYXRzIHN1Y2ggYXMgYS5vdXQsIENPRkYsIGFuZCBFTEYuCisgICAgIEJGRCBjb21lcyB3aXRoIFRleGluZm8gc291cmNlIGZvciBhIG1hbnVhbCAobm90IHlldCBwdWJsaXNoZWQgb24gcGFwZXIpLgorCisgICAgIEF0IHByZXNlbnQsIEJGRCBpcyBub3QgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseTsgaXQgaXMgaW5jbHVkZWQgd2l0aAorICAgICBwYWNrYWdlcyB0aGF0IHVzZSBpdC4KKworICAgKiBCaW51dGlscyAgIChCaW5DRCwgU3JjQ0QpCisKKyAgICAgQmludXRpbHMgaW5jbHVkZXMgdGhlc2UgcHJvZ3JhbXM6IGBhcicsIGBjKytmaWx0JywgYGRlbWFuZ2xlJywgYGdhcycsCisgICAgIGBncHJvZicsIGBsZCcsIGBubG1jb252JywgYG5tJywgYG9iamNvcHknLCBgb2JqZHVtcCcsIGByYW5saWInLCBgc2l6ZScsCisgICAgIGBzdHJpbmdzJywgJiBgc3RyaXAnLgorCisgICAgIEJpbnV0aWxzIHZlcnNpb24gMiB1c2VzIHRoZSBCRkQgbGlicmFyeS4gIFRoZSBHTlUgYXNzZW1ibGVyLCBgZ2FzJywKKyAgICAgc3VwcG9ydHMgdGhlIGEyOWssIEFscGhhLCBIOC8zMDAsIEg4LzUwMCwgSFAtUEEsIGkzODYsIGk5NjAsIG02OGssIG04OGssCisgICAgIE1JUFMsIE5TMzJLLCBTSCwgU1BBUkMsIFRhaG9lLCBWYXgsIGFuZCBaODAwMCBDUFVzLCBhbmQgYXR0ZW1wdHMgdG8gYmUKKyAgICAgY29tcGF0aWJsZSB3aXRoIG1hbnkgb3RoZXIgYXNzZW1ibGVycyBmb3IgVW5peCBhbmQgZW1iZWRkZWQgc3lzdGVtcy4gIEl0CisgICAgIGNhbiBwcm9kdWNlIG1peGVkIEMgYW5kIGFzc2VtYmx5IGxpc3RpbmdzLCBhbmQgaW5jbHVkZXMgYSBtYWNybyBmYWNpbGl0eQorICAgICBzaW1pbGFyIHRvIHRoYXQgaW4gc29tZSBvdGhlciBhc3NlbWJsZXJzLiAgR05VJ3MgbGlua2VyLCBgbGQnLCBlbWl0cworICAgICBzb3VyY2UtbGluZSBudW1iZXJlZCBlcnJvciBtZXNzYWdlcyBmb3IgbXVsdGlwbHktZGVmaW5lZCBzeW1ib2xzIGFuZAorICAgICB1bmRlZmluZWQgcmVmZXJlbmNlcywgYW5kIGludGVycHJldHMgYSBzdXBlcnNldCBvZiBBVCZUJ3MgTGlua2VyIENvbW1hbmQKKyAgICAgTGFuZ3VhZ2UsIHdoaWNoIGdpdmVzIGNvbnRyb2wgb3ZlciB3aGVyZSBzZWdtZW50cyBhcmUgcGxhY2VkIGluIG1lbW9yeS4KKyAgICAgYG5sbWNvbnYnIGNvbnZlcnRzIG9iamVjdCBmaWxlcyBpbnRvIE5vdmVsbCBOZXRXYXJlIExvYWRhYmxlIE1vZHVsZXMuCisgICAgIGBvYmpkdW1wJyBjYW4gZGlzYXNzZW1ibGUgY29kZSBmb3IgbW9zdCBvZiB0aGUgQ1BVcyBsaXN0ZWQgYWJvdmUsIGFuZAorICAgICBjYW4gZGlzcGxheSBvdGhlciBkYXRhIChlLmcuLCBzeW1ib2xzIGFuZCByZWxvY2F0aW9ucykgZnJvbSBhbnkgZmlsZQorICAgICBmb3JtYXQgcmVhZCBieSBCRkQuCisKKyAgICogQmlzb24gICAqU2VlICpOb3RlIERvY3VtZW50YXRpb246OiogKEJpbkNELCBTcmNDRCkgICBbRlNGbWFuLCBGU0ZyY10KKworICAgICBCaXNvbiBpcyBhbiB1cHdhcmRseSBjb21wYXRpYmxlIHJlcGxhY2VtZW50IGZvciB0aGUgcGFyc2VyIGdlbmVyYXRvcgorICAgICBgeWFjYycuICBUZXhpbmZvIHNvdXJjZSBmb3IgdGhlIGBCaXNvbiBNYW51YWwnIGFuZCByZWZlcmVuY2UgY2FyZCBhcmUKKyAgICAgaW5jbHVkZWQuCisKKyAgICogQyBMaWJyYXJ5ICAgKlNlZSAqTm90ZSBGb3J0aGNvbWluZyBHTlVzOjoqICAgKEJpbkNELCBTcmNDRCkgICBbRlNGbWFuXQorCisgICAgIFRoZSBHTlUgQyBsaWJyYXJ5IHN1cHBvcnRzIElTTyBDLTE5ODksIElTTyBDL2FtZW5kbWVudCAxLTE5OTUsIFBPU0lYCisgICAgIDEwMDMuMS0xOTkwLCBQT1NJWCAxMDAzLjFiLTE5OTMsIFBPU0lYIDEwMDMuMWMtMTk5NSAod2hlbiB0aGUgdW5kZXJseWluZworICAgICBzeXN0ZW0gcGVybWl0cyksICYgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGluIFBPU0lYIDEwMDMuMi0xOTkyLiAgSXQgaXMKKyAgICAgbmVhcmx5IGNvbXBsaWFudCB3aXRoIHRoZSBleHRlbmRlZCBYUEc0LjIgc3BlY2lmaWNhdGlvbiB3aGljaCBndWFyYW50ZWVzCisgICAgIHVwd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggNC40QlNEICYgbWFueSBTeXN0ZW0gViBmdW5jdGlvbnMuCisKKyAgICAgV2hlbiB1c2VkIHdpdGggdGhlIEdOVSBIdXJkLCB0aGUgQyBMaWJyYXJ5IHBlcmZvcm1zIG1hbnkgZnVuY3Rpb25zIG9mIHRoZQorICAgICBVbml4IHN5c3RlbSBjYWxscyBkaXJlY3RseS4gIE1pa2UgSGFlcnRlbCBoYXMgd3JpdHRlbiBhIGZhc3QgYG1hbGxvYycKKyAgICAgd2hpY2ggd2FzdGVzIGxlc3MgbWVtb3J5IHRoYW4gdGhlIG9sZCBHTlUgdmVyc2lvbi4KKworICAgICBHTlUgYHN0ZGlvJyBsZXRzIHlvdSBkZWZpbmUgbmV3IGtpbmRzIG9mIHN0cmVhbXMsIGp1c3QgYnkgd3JpdGluZyBhIGZldworICAgICBDIGZ1bmN0aW9ucy4gIFR3byBtZXRob2RzIGZvciBoYW5kbGluZyB0cmFuc2xhdGVkIG1lc3NhZ2VzIGhlbHAgd3JpdGluZworICAgICBpbnRlcm5hdGlvbmFsaXplZCBwcm9ncmFtcyAmIHRoZSB1c2VyIGNhbiBhZG9wdCB0aGUgZW52aXJvbm1lbnQgdGhlCisgICAgIHByb2dyYW0gcnVucyBpbiB0byBjb25mb3JtIHdpdGggbG9jYWwgY29udmVudGlvbnMuICBFeHRlbmRlZCBgZ2V0b3B0JworICAgICBmdW5jdGlvbnMgYXJlIGFscmVhZHkgdXNlZCB0byBwYXJzZSBvcHRpb25zLCBpbmNsdWRpbmcgbG9uZyBvcHRpb25zLCBpbgorICAgICBtYW55IEdOVSB1dGlsaXRpZXMuICBUaGUgbmFtZSBsb29rdXAgZnVuY3Rpb25zIG5vdyBhcmUgbW9kdWxhcml6ZWQgd2hpY2gKKyAgICAgbWFrZXMgaXQgZWFzaWVyIHRvIHNlbGVjdCB0aGUgc2VydmljZSB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYworICAgICBkYXRhYmFzZSAmIHRoZSBkb2N1bWVudCBpbnRlcmZhY2UgbWFrZXMgaXQgZWFzeSB0byBhZGQgbmV3IHNlcnZpY2VzLgorICAgICBUZXhpbmZvIHNvdXJjZSBmb3IgdGhlIGBHTlUgQyBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwnIGlzIGluY2x1ZGVkCisgICAgICgqbm90ZSBEb2N1bWVudGF0aW9uOjouKS4KKworICAgICBQcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgR05VIEMgbGlicmFyeSByYW4gb24gYSBsYXJnZSBudW1iZXIgb2Ygc3lzdGVtcy4KKyAgICAgVGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgdGhlIEMgbGlicmFyeSBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQKKyAgICAgc2luY2UgZGV2ZWxvcG1lbnQgb24gdmVyc2lvbiAyLjAgc3RhcnRlZCwgc28gdG9kYXkgaXQgcnVucyBvdXQgb2YgdGhlCisgICAgIGJveCBvbmx5IG9uIEdOVS9IdXJkIChhbGwgcGxhdGZvcm1zIEdOVS9IdXJkIGFsc28gcnVucyBvbikgJiBHTlUvTGludXgKKyAgICAgKGl4ODYsIEFscGhhLCBtNjhrLCB3b3JrIGlzIGluIHByb2dyZXNzIGZvciBNSVBTICYgU3BhcmMpLiAgT3RoZXIKKyAgICAgYXJjaGl0ZWN0dXJlcyB3aWxsIGJlY29tZSBhdmFpbGFibGUgYWdhaW4gYXMgc29vbiBhcyBzb21lYm9keSBkb2VzIHRoZQorICAgICBwb3J0LgorCisgICAqIEMrKyBMaWJyYXJ5ICAgKEJpbkNELCBTcmNDRCkKKworICAgICBUaGUgR05VIEMrKyBsaWJyYXJ5IChsaWJnKyspIGNvbnRhaW5zIGFuIGV4dGVuc2l2ZSBjb2xsZWN0aW9uIG9mCisgICAgIGNvbnRhaW5lciBhbmQgdXRpbGl0eSBjbGFzc2VzLCBpbmNsdWRpbmcgT2JzdGFja3MsIG11bHRpcGxlLXByZWNpc2lvbgorICAgICBJbnRlZ2VycyBhbmQgUmF0aW9uYWxzLCBDb21wbGV4IG51bWJlcnMsIEJpdFNldHMsIGFuZCBCaXRTdHJpbmdzLgorCisgICAgIFRoZSBkaXN0cmlidXRpb24gYWxzbyBpbmNsdWRlcyB0aGUgbGlic3RkYysrIGxpYnJhcnkuICBUaGlzIGltcGxlbWVudHMKKyAgICAgbGlicmFyeSBmYWNpbGl0aWVzIGRlZmluZWQgYnkgdGhlIGZvcnRoY29taW5nIEFOU0kvSVNPIEMrKyBzdGFuZGFyZCwKKyAgICAgaW5jbHVkaW5nIHN0cmluZ3MsIHRoZSBpb3N0cmVhbSBsaWJyYXJ5LCBhbmQgYSBwb3J0IG9mIHRoZSBTdGFuZGFyZAorICAgICBUZW1wbGF0ZSBMaWJyYXJ5LgorCisgICAqIENhbGMgICAoU3JjQ0QpICAgW0ZTRm1hbiwgRlNGcmNdCisKKyAgICAgQ2FsYyAod3JpdHRlbiBieSBEYXZlIEdpbGxlc3BpZSBpbiBFbWFjcyBMaXNwKSBpcyBhbiBleHRlbnNpYmxlLCBhZHZhbmNlZAorICAgICBkZXNrIGNhbGN1bGF0b3IgJiBtYXRoZW1hdGljYWwgdG9vbCB0aGF0IHJ1bnMgYXMgcGFydCBvZiBHTlUgRW1hY3MuICBZb3UKKyAgICAgY2FuIHVzZSBDYWxjIGFzIGEgc2ltcGxlIGZvdXItZnVuY3Rpb24gY2FsY3VsYXRvciwgYnV0IGl0IGhhcyBtYW55IG1vcmUKKyAgICAgZmVhdHVyZXMgaW5jbHVkaW5nOiBjaG9pY2Ugb2YgYWxnZWJyYWljIG9yIFJQTiAoc3RhY2stYmFzZWQpIGVudHJ5OworICAgICBsb2dhcml0aG1pYywgdHJpZ29ub21ldHJpYywgJiBmaW5hbmNpYWwgZnVuY3Rpb25zOyBhcmJpdHJhcnkgcHJlY2lzaW9uOworICAgICBjb21wbGV4IG51bWJlcnM7IHZlY3RvcnM7IG1hdHJpY2VzOyBkYXRlczsgdGltZXM7IGluZmluaXRpZXM7IHNldHM7CisgICAgIGFsZ2VicmFpYyBzaW1wbGlmaWNhdGlvbjsgJiBkaWZmZXJlbnRpYXRpb24gJiBpbnRlZ3JhdGlvbi4gIEl0IG91dHB1dHMgdG8KKyAgICAgYGdudXBsb3QnLCAmIGNvbWVzIHdpdGggc291cmNlIGZvciBhIG1hbnVhbCAmIHJlZmVyZW5jZSBjYXJkICgqbm90ZQorICAgICBEb2N1bWVudGF0aW9uOjouKS4KKworICAgKiBgY2ZlbmdpbmUnICAgKFNyY0NEKQorCisgICAgIGBjZmVuZ2luZScgaXMgdXNlZCB0byBtYWludGFpbiBzaXRlLXdpZGUgY29uZmlndXJhdGlvbiBvZiBhCisgICAgIGhldGVyb2dlbmVvdXMgVW5peCBuZXR3b3JrIHVzaW5nIGEgc2ltcGxlIGhpZ2ggbGV2ZWwgbGFuZ3VhZ2UuICBJdHMKKyAgICAgYXBwZWFyYW5jZSBpcyBzaW1pbGFyIHRvIGByZGlzdCcsIGJ1dCBhbGxvd3MgbWFueSBtb3JlIG9wZXJhdGlvbnMgdG8gYmUKKyAgICAgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkuICBTZWUgTWFyayBCdXJnZXNzLCAiQSBTaXRlIENvbmZpZ3VyYXRpb24KKyAgICAgRW5naW5lIiwgYENvbXB1dGluZyBTeXN0ZW1zJywgVm9sLiA4LCBOby4gMyAoYXNrIGBvZmZpY2VAdXNlbml4Lm9yZycgaG93CisgICAgIHRvIGdldCBhIGNvcHkpLgorCisgICAqIENoZXNzICAgKFNyY0NEKQorCisgICAgIEdOVSBDaGVzcyBsZXRzIG1vc3QgbW9kZXJuIGNvbXB1dGVycyBwbGF5IGEgZnVsbCBnYW1lIG9mIGNoZXNzLiAgSXQgaGFzCisgICAgIGEgcGxhaW4gdGVybWluYWwgaW50ZXJmYWNlLCBhIGN1cnNlcyBpbnRlcmZhY2UsICYgdGhlIHVuaXF1ZSBYIFdpbmRvd3MKKyAgICAgaW50ZXJmYWNlIGB4Ym9hcmQnLiAgQmVzdCByZXN1bHRzIGFyZSBvYnRhaW5lZCB1c2luZyBHTlUgQyB0byBjb21waWxlCisgICAgIEdOVSBDaGVzcy4KKworICAgICBSZWNlbnQgaW1wcm92ZW1lbnRzIGluY2x1ZGUgImNvbmZpZ3VyZSItY2FwYWJpbGl0eSwgY29ycmVjdCB0aGlua2luZyBvbgorICAgICBvcHBvbmVudCdzIHRpbWUsIG1ha2VmaWxlIGZvciBXaW5kb3dzIE5ULCBmdWxsIFdpbmRvd3MgOTUvTlQKKyAgICAgY29tcGF0aWJpbGl0eSwgcGFyYWxsZWwgVW5peCAmIFdpbmRvd3MgOTUvTlQgdmVyc2lvbnMsIG1ham9yIGNyYXNoIGJ1ZworICAgICBmaXggJiB2YXJpb3VzIG90aGVyIG1pbm9yIGltcHJvdmVtZW50cyAmIGJ1ZyBmaXhlcy4KKworICAgICBTdHVhcnQgQ3JhY3JhZnQgZm91bmRlZCBHTlUgQ2hlc3MgJiBpcyB0aGUgcHJvamVjdCBsZWFkIGZvciB0aGUgMTArIHllYXIKKyAgICAgaGlzdG9yeSBvZiBHTlUgQ2hlc3MuICBBY2tub3dsZWRnZW1lbnRzIGZvciB0aGlzIHBhc3QgeWVhcidzIHdvcmsKKyAgICAgaW5jbHVkZSBDaHVhIEtvbmcgU2lhbiwgTmF0aW9uYWwgU3VwZXJjb21wdXRpbmcgUmVzZWFyY2ggQ2VudGVyLAorICAgICBTaW5nYXBvcmU7ICYgQ29ub3IgTWNDYXJ0aHksIEJpb21vbGVjdWxhci9CaW9tZWQgU2NpZW5jZSBhdCBHcmlmZml0aAorICAgICBVbml2ZXJzaXR5LCBBdXN0cmFsaWEuCisKKyAgICAgU2VuZCBidWdzIHRvIGBidWctZ251LWNoZXNzQHByZXAuYWkubWl0LmVkdScgJiBnZW5lcmFsIGNvbW1lbnRzIHRvCisgICAgIGBpbmZvLWdudS1jaGVzc0BwcmVwLmFpLm1pdC5lZHUnLiAgVmlzaXQgdGhlIGF1dGhvcidzIHdlYnNpdGUgYXQKKyAgICAgYGh0dHA6Ly93d3cud2luLm5ldC9+bXNtL2luZGV4Lmh0bWwnLiAgUGxheSBHTlUgQ2hlc3Mgb24gdGhlIHdlYiBhdAorICAgICBgaHR0cDovL3d3dy5kZWxvcmllLmNvbS9nYW1lLXJvb20vY2hlc3MnLgorCisgICAqIENMSVNQICAgKFNyY0NEKQorCisgICAgIENMSVNQIGlzIGEgQ29tbW9uIExpc3AgaW1wbGVtZW50YXRpb24gYnkgQnJ1bm8gSGFpYmxlICYgTWljaGFlbCBTdG9sbC4KKyAgICAgSXQgbW9zdGx5IHN1cHBvcnRzIHRoZSBMaXNwIGRlc2NyaWJlZCBieSBgQ29tbW9uIExJU1A6IFRoZSBMYW5ndWFnZSAoMm5kCisgICAgIGVkaXRpb24pJyAmIHRoZSBBTlNJIENvbW1vbiBMaXNwIHN0YW5kYXJkLiAgQ0xJU1AgaW5jbHVkZXMgYW4KKyAgICAgaW50ZXJwcmV0ZXIsIGEgYnl0ZS1jb21waWxlciwgYSBsYXJnZSBzdWJzZXQgb2YgQ0xPUyAmIGEgZm9yZWlnbiBsYW5ndWFnZQorICAgICBpbnRlcmZhY2UuICBUaGUgdXNlciBpbnRlcmZhY2UgbGFuZ3VhZ2UgKEVuZ2xpc2gsIEdlcm1hbiwgRnJlbmNoKSBjYW4gYmUKKyAgICAgY2hvc2VuIGF0IHJ1biB0aW1lLiAgQW4gWDExIEFQSSBpcyBhdmFpbGFibGUgdGhyb3VnaCBDTFggJiBHYXJuZXQuCisgICAgIENMSVNQIG5lZWRzIG9ubHkgMiBNQiBvZiBtZW1vcnkgJiBydW5zIG9uIG1hbnkgbWljcm9jb21wdXRlcnMgKGluY2x1ZGluZworICAgICBNUy1ET1Mgc3lzdGVtcywgT1MvMiwgV2luZG93cyBOVCwgV2luZG93cyA5NSwgQW1pZ2EgNTAwLTQwMDAsICYgQWNvcm4KKyAgICAgUklTQyBQQykgJiBhbGwga2luZHMgb2YgVW5peCBzeXN0ZW1zLgorCisgICAqIENvbW1vbiBMaXNwICAgKkFsc28gKm5vdGUgR05VcyBGbGFzaGVzOjouKiAgIChTcmNDRCkKKworICAgICBHTlUgQ29tbW9uIExpc3AgKEdDTCwgZm9ybWVybHkga25vd24gYXMgS3lvdG8gQ29tbW9uIExpc3ApIGlzIGEgY29tcGlsZXIKKyAgICAgJiBpbnRlcnByZXRlciBmb3IgQ29tbW9uIExpc3AuICBHQ0wgaXMgdmVyeSBwb3J0YWJsZSAmIGV4dHJlbWVseQorICAgICBlZmZpY2llbnQgb24gYSB3aWRlIGNsYXNzIG9mIGFwcGxpY2F0aW9ucywgJiBjb21wYXJlcyBmYXZvcmFibHkgaW4KKyAgICAgcGVyZm9ybWFuY2Ugd2l0aCBjb21tZXJjaWFsIExpc3BzIG9uIHNldmVyYWwgbGFyZ2UgdGhlb3JlbS1wcm92ZXIgJgorICAgICBzeW1ib2xpYyBhbGdlYnJhIHN5c3RlbXMuICBHQ0wgc3VwcG9ydHMgdGhlIENMdEwxIHNwZWNpZmljYXRpb24gYnV0IGlzCisgICAgIG1vdmluZyB0b3dhcmRzIHRoZSBwcm9wb3NlZCBBTlNJIHN0YW5kYXJkLgorCisgICAgIEdDTCBjb21waWxlcyB0byBDICYgdGhlbiB1c2VzIHRoZSBuYXRpdmUgb3B0aW1pemluZyBDIGNvbXBpbGVyIChlLmcuLAorICAgICBHQ0MpLiAgQSBmdW5jdGlvbiB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3MgJiBvbmUgdmFsdWUgdHVybnMgaW50byBhIEMKKyAgICAgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3MsIHJldHVybmluZyBvbmUgdmFsdWUtLXNvIEdDTCBpcworICAgICBtYXhpbWFsbHkgZWZmaWNpZW50IG9uIHN1Y2ggY2FsbHMuICBJdHMgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yCisgICAgIGdpdmVzIGdyZWF0IGZyZWVkb20gdG8gdGhlIEMgY29tcGlsZXIgdG8gcHV0IExpc3AgdmFsdWVzIGluIHJlZ2lzdGVycy4KKyAgICAgSXQgaGFzIGEgc291cmNlIGxldmVsIExpc3AgZGVidWdnZXIgZm9yIGludGVycHJldGVkIGNvZGUgJiBkaXNwbGF5cworICAgICBzb3VyY2UgY29kZSBpbiBhbiBFbWFjcyB3aW5kb3cuICBJdHMgcHJvZmlsZXIgKGJhc2VkIG9uIHRoZSBDIHByb2ZpbGluZworICAgICB0b29scykgY291bnRzIGZ1bmN0aW9uIGNhbGxzICYgdGhlIHRpbWUgc3BlbnQgaW4gZWFjaCBmdW5jdGlvbi4KKworICAgICBUaGVyZSBpcyBub3cgYSBidWlsdC1pbiBpbnRlcmZhY2UgdG8gdGhlIFRrIHdpZGdldCBzeXN0ZW0uICBJdCBydW5zIGluIGEKKyAgICAgc2VwYXJhdGUgcHJvY2Vzcywgc28gdXNlcnMgbWF5IG1vbml0b3IgcHJvZ3Jlc3Mgb24gTGlzcCBjb21wdXRhdGlvbnMgb3IKKyAgICAgaW50ZXJhY3Qgd2l0aCBydW5uaW5nIGNvbXB1dGF0aW9ucyB2aWEgYSB3aW5kb3dpbmcgaW50ZXJmYWNlLgorCisgICAgIFRoZXJlIGlzIGFsc28gYW4gWGxpYiBpbnRlcmZhY2UgdmlhIEMgKHhnY2wtMikuICBDTFggcnVucyB3aXRoIEdDTCwgYXMKKyAgICAgZG9lcyBQQ0wgKHNlZSAiUENMIiBsYXRlciBpbiB0aGlzIGFydGljbGUpLgorCisgICAgIEdDTCB2ZXJzaW9uIDIuMi4xIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlLgorCisgICAqIENMWCAgIChTcmNDRCkKKworICAgICBDTFggaXMgYW4gWCBXaW5kb3cgaW50ZXJmYWNlIGxpYnJhcnkgZm9yIEdDTC4gIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUKKyAgICAgYnVpbHQtaW4gVEsgaW50ZXJmYWNlLgorCisgICAqIGBjcGlvJyAgIChTcmNDRCkKKworICAgICBgY3BpbycgaXMgYW4gYXJjaGl2ZSBwcm9ncmFtIHdpdGggYWxsIHRoZSBmZWF0dXJlcyBvZiBTVlI0IGBjcGlvJywKKyAgICAgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHRoZSBmaW5hbCBQT1NJWCAxMDAzLjEgYHVzdGFyJyBzdGFuZGFyZC4gIGBtdCcsIGEKKyAgICAgcHJvZ3JhbSB0byBwb3NpdGlvbiBtYWduZXRpYyB0YXBlcywgaXMgaW5jbHVkZWQgd2l0aCBgY3BpbycuCisKKyAgICogQ1ZTICAgKFNyY0NEKQorCisgICAgIENWUyBpcyBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gKGxpa2UgUkNTIG9yIFNDQ1MpIHdoaWNoIGFsbG93cyB5b3UgdG8KKyAgICAga2VlcCBvbGQgdmVyc2lvbnMgb2YgZmlsZXMgKHVzdWFsbHkgc291cmNlIGNvZGUpLCBrZWVwIGEgbG9nIG9mIHdobywKKyAgICAgd2hlbiwgYW5kIHdoeSBjaGFuZ2VzIG9jY3VycmVkLCBldGMuICBJdCBoYW5kbGVzIG11bHRpcGxlIGRldmVsb3BlcnMsCisgICAgIG11bHRpcGxlIGRpcmVjdG9yaWVzLCB0cmlnZ2VycyB0byBlbmFibGUvbG9nL2NvbnRyb2wgdmFyaW91cyBvcGVyYXRpb25zLAorICAgICBhbmQgY2FuIHdvcmsgb3ZlciBhIHdpZGUgYXJlYSBuZXR3b3JrLiAgSXQgZG9lcyBub3QgaGFuZGxlIGJ1aWxkCisgICAgIG1hbmFnZW1lbnQgb3IgYnVnLXRyYWNraW5nOyB0aGVzZSBhcmUgaGFuZGxlZCBieSBgbWFrZScgYW5kIEdOQVRTLAorICAgICByZXNwZWN0aXZlbHkuCisKKyAgICogRGVqYUdudSAgIChTcmNDRCkKKworICAgICBEZWphR251IGlzIGEgZnJhbWV3b3JrIHRvIHRlc3QgcHJvZ3JhbXMgd2l0aCBhIHNpbmdsZSBmcm9udCBlbmQgZm9yIGFsbAorICAgICB0ZXN0cy4gIERlamFHbnUncyBmbGV4aWJpbGl0eSAmIGNvbnNpc3RlbmN5IG1ha2VzIGl0IGVhc3kgdG8gd3JpdGUgdGVzdHMuCisgICAgIERlamFHbnUgd2lsbCBhbHNvIHdvcmsgd2l0aCByZW1vdGUgaG9zdHMgYW5kIGVtYmVkZGVkIHN5c3RlbXMuCisKKyAgICAgRGVqYUdudSBjb21lcyB3aXRoIGBleHBlY3QnLCB3aGljaCBydW5zIHNjcmlwdHMgdG8gY29uZHVjdCBkaWFsb2dzIHdpdGgKKyAgICAgcHJvZ3JhbXMuCisKKyAgICogRGlmZnV0aWxzICAgKFNyY0NEKQorCisgICAgIEdOVSBgZGlmZicgY29tcGFyZXMgZmlsZXMgc2hvd2luZyBsaW5lLWJ5LWxpbmUgY2hhbmdlcyBpbiBzZXZlcmFsCisgICAgIGZsZXhpYmxlIGZvcm1hdHMuICBJdCBpcyBtdWNoIGZhc3RlciB0aGFuIHRyYWRpdGlvbmFsIFVuaXggdmVyc2lvbnMuICBUaGUKKyAgICAgRGlmZnV0aWxzIHBhY2thZ2UgaGFzIGBkaWZmJywgYGRpZmYzJywgYHNkaWZmJywgJiBgY21wJy4gIEZ1dHVyZSBwbGFucworICAgICBpbmNsdWRlIHN1cHBvcnQgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIChlLmcuLCBlcnJvciBtZXNzYWdlcyBpbgorICAgICBDaGluZXNlKSAmIHNvbWUgbm9uLVVuaXggUEMgZW52aXJvbm1lbnRzLCAmIGEgbGlicmFyeSBpbnRlcmZhY2UgdGhhdCBjYW4KKyAgICAgYmUgdXNlZCBieSBvdGhlciBmcmVlIHNvZnR3YXJlLgorCisgICAqIERKR1BQICAgKkFsc28gc2VlICJHQ0MiIGluIHRoaXMgYXJ0aWNsZSogICAoQmluQ0QpCisKKyAgICAgREogRGVsb3JpZSBoYXMgcG9ydGVkIEdDQy9HKysgdG8gaTM4NnMgcnVubmluZyBET1MuICBESkdQUCBoYXMgYSAzMi1iaXQKKyAgICAgaTM4NiBET1MgZXh0ZW5kZXIgd2l0aCBhIHN5bWJvbGljIGRlYnVnZ2VyLCBkZXZlbG9wbWVudCBsaWJyYXJpZXMsICYKKyAgICAgcG9ydHMgb2YgQmlzb24sIGBmbGV4JywgJiBCaW51dGlscy4gIEZ1bGwgc291cmNlIGNvZGUgaXMgcHJvdmlkZWQuICBJdAorICAgICBuZWVkcyBhdCBsZWFzdCA1TUIgb2YgaGFyZCBkaXNrIHNwYWNlIHRvIGluc3RhbGwgJiA1MTJLIG9mIFJBTSB0byB1c2UuCisgICAgIEl0IHN1cHBvcnRzIFNWR0EgKHVwIHRvIDEwMjR4NzY4KSwgWE1TICYgVkRJU0sgbWVtb3J5IGFsbG9jYXRpb24sCisgICAgIGBoaW1lbS5zeXMnLCBWQ1BJIChlLmcuLCBRRU1NLCBERVNRdmlldywgJiAzODZNQVgpLCAmIERQTUkgKGUuZy4sCisgICAgIFdpbmRvd3MgMy54LCBPUy8yLCBRRU1NLCAmIFFEUE1JKS4gIFZlcnNpb24gMiB3YXMgcmVsZWFzZWQgaW4gRmViLiAxOTk2LAorICAgICAmIG5lZWRzIGEgRFBNSSBlbnZpcm9ubWVudDsgYSBmcmVlIERQTUkgc2VydmVyIGlzIGluY2x1ZGVkLgorCisgICAgIEZUUCBmcm9tIGBmdHAuc2ltdGVsLm5ldCcgaW4gYC9wdWIvc2ltdGVsbmV0L2dudS9kamdwcC8nIChvciBhIFNpbVRlbAorICAgICBtaXJyb3Igc2l0ZSkuCisKKyAgICAgQXNrIGBsaXN0c2VydkBkZWxvcmllLmNvbScsIHRvIGpvaW4gYSBESkdQUCB1c2VycyBtYWlsaW5nIGxpc3QuCisKKyAgICogYGRsZCcgICAoU3JjQ0QpCisKKyAgICAgYGRsZCcgaXMgYSBkeW5hbWljIGxpbmtlciB3cml0dGVuIGJ5IFcuIFdpbHNvbiBIby4gIExpbmtpbmcgeW91ciBwcm9ncmFtCisgICAgIHdpdGggdGhlIGBkbGQnIGxpYnJhcnkgYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSBsb2FkIG9iamVjdCBmaWxlcyBpbnRvCisgICAgIHRoZSBydW5uaW5nIGJpbmFyeS4gIGBkbGQnIHN1cHBvcnRzIGEub3V0IG9iamVjdCB0eXBlcyBvbiB0aGUgZm9sbG93aW5nCisgICAgIHBsYXRmb3JtczogQ29udmV4IEMtU2VyaWVzIChCU0QpLCBpMzg2L2k0ODYvUGVudGl1bSAoR05VL0xpbnV4KSwgU2VxdWVudAorICAgICBTeW1tZXRyeSBpMzg2IChEeW5peCAzKSwgU3VuLTMgKFN1bk9TIDMgJiA0KSwgU3VuLTQgKFN1bk9TIDQpLCAmIFZBWAorICAgICAoVWx0cml4KS4KKworICAgKiBgZG9zY2hrJyAgIChTcmNDRCkKKworICAgICBUaGlzIHByb2dyYW0gaXMgYSB1dGlsaXR5IHRvIGhlbHAgc29mdHdhcmUgZGV2ZWxvcGVycyBlbnN1cmUgdGhhdCB0aGVpcgorICAgICBzb3VyY2UgZmlsZSBuYW1lcyBhcmUgZGlzdGluZ3Vpc2hhYmxlIG9uIFN5c3RlbSBWIHBsYXRmb3JtcyB3aXRoCisgICAgIDE0LWNoYXJhY3RlciBmaWxlbmFtZXMgYW5kIG9uIE1TLURPUyBzeXN0ZW1zIHdpdGggOCszIGNoYXJhY3RlcgorICAgICBmaWxlbmFtZXMuCisKKyAgICogYGVkJyAgIChTcmNDRCkKKworICAgICBgZWQnIGlzIHRoZSBzdGFuZGFyZCB0ZXh0IGVkaXRvci4gIEl0IGlzIGxpbmUtb3JpZW50ZWQgYW5kIGNhbiBiZSB1c2VkCisgICAgIGludGVyYWN0aXZlbHkgb3IgaW4gc2NyaXB0cy4KKworICAgKiBFbGliICAgKFNyY0NEKQorCisgICAgIEVsaWIgaXMgYSBzbWFsbCBsaWJyYXJ5IG9mIEVtYWNzIExpc3AgZnVuY3Rpb25zLCBpbmNsdWRpbmcgcm91dGluZXMgZm9yCisgICAgIHVzaW5nIEFWTCB0cmVlcyBhbmQgZG91Ymx5LWxpbmtlZCBsaXN0cy4KKworICAgKiBFbGlzcCBhcmNoaXZlICAgKFNyY0NEKQorCisgICAgIFRoaXMgaXMgYSBzbmFwc2hvdCBvZiBPaGlvIFN0YXRlJ3MgR05VIEVtYWNzIExpc3AgRlRQIEFyY2hpdmUuICBGVFAgaXQKKyAgICAgZnJvbSBgYXJjaGl2ZS5jaXMub2hpby1zdGF0ZS5lZHUnIGluIGAvcHViL2dudS9lbWFjcy9lbGlzcC1hcmNoaXZlJy4KKworICAgKiBFbWFjcyAgICpBbHNvICpub3RlIEZvcnRoY29taW5nIEdOVXM6Oi4qICAgW0ZTRm1hbihzKSwgRlNGcmNdCisKKyAgICAgSW4gMTk3NSwgUmljaGFyZCBTdGFsbG1hbiBkZXZlbG9wZWQgdGhlIGZpcnN0IEVtYWNzLCBhbiBleHRlbnNpYmxlLAorICAgICBjdXN0b21pemFibGUgcmVhbC10aW1lIGRpc3BsYXkgZWRpdG9yICYgY29tcHV0aW5nIGVudmlyb25tZW50LiAgR05VIEVtYWNzCisgICAgIGlzIGhpcyBzZWNvbmQgaW1wbGVtZW50YXRpb24uICBJdCBvZmZlcnMgdHJ1ZSBMaXNwLS1zbW9vdGhseSBpbnRlZ3JhdGVkCisgICAgIGludG8gdGhlIGVkaXRvci0tZm9yIHdyaXRpbmcgZXh0ZW5zaW9ucyAmIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgWAorICAgICBXaW5kb3cgU3lzdGVtLiAgSXQgcnVucyBvbiBVbml4LCBNUy1ET1MsICYgV2luZG93cyBOVCBvciA5NS4gIEluCisgICAgIGFkZGl0aW9uIHRvIGl0cyBwb3dlcmZ1bCBuYXRpdmUgY29tbWFuZCBzZXQsIEVtYWNzIGNhbiBlbXVsYXRlIHRoZQorICAgICBlZGl0b3JzIHZpICYgRURUIChERUMncyBWTVMgZWRpdG9yKS4gIEVtYWNzIGhhcyBtYW55IG90aGVyIGZlYXR1cmVzIHdoaWNoCisgICAgIG1ha2UgaXQgYSBmdWxsIGNvbXB1dGluZyBzdXBwb3J0IGVudmlyb25tZW50LiAgU291cmNlIGZvciB0aGUgYEdOVSBFbWFjcworICAgICBNYW51YWwnICYgYSByZWZlcmVuY2UgY2FyZCBjb21lcyB3aXRoIHRoZSBzb2Z0d2FyZS4gIFNvdXJjZXMgZm9yIHRoZQorICAgICBgR05VIEVtYWNzIExpc3AgUmVmZXJlbmNlIE1hbnVhbCcsICYgYFByb2dyYW1taW5nIGluIEVtYWNzIExpc3A6IEFuCisgICAgIEludHJvZHVjdGlvbicgYXJlIGRpc3RyaWJ1dGVkIGluIHNlcGFyYXRlIHBhY2thZ2VzLiAgKk5vdGUKKyAgICAgRG9jdW1lbnRhdGlvbjo6LgorCisgICAqIEVtYWNzIDE5ICAgKFNyY0NEKSAgIFtGU0ZtYW4ocyksIEZTRnJjXQorCisgICAgIEVtYWNzIDE5IHdvcmtzIHdpdGggY2hhcmFjdGVyLW9ubHkgdGVybWluYWxzICYgd2l0aCB0aGUgWCBXaW5kb3cgU3lzdGVtCisgICAgICh3aXRoIG9yIHdpdGhvdXQgYW4gWCB0b29sa2l0KS4gIEZlYXR1cmVzIG5ldyB0byBFbWFjcyAxOSBpbmNsdWRlOgorICAgICBtdWx0aXBsZSBYIHdpbmRvd3MgKCJmcmFtZXMiIHRvIEVtYWNzKSwgd2l0aCBhIHNlcGFyYXRlIFggd2luZG93IGZvciB0aGUKKyAgICAgbWluaWJ1ZmZlciBvciBhIG1pbmlidWZmZXIgYXR0YWNoZWQgdG8gZWFjaCBYIHdpbmRvdzsgdXNlIG9mIHRoZSBYCisgICAgIHRvb2xraXQ7IGludGVyZmFjaW5nIHdpdGggdGhlIFggcmVzb3VyY2UgbWFuYWdlcjsgcHJvcGVydHkgbGlzdHMKKyAgICAgYXNzb2NpYXRlZCB3aXRoIHJlZ2lvbnMgb2YgdGV4dCBpbiBhIGJ1ZmZlcjsgbXVsdGlwbGUgZm9udHMgJiBjb2xvcnMKKyAgICAgZGVmaW5lZCBieSB0aG9zZSBwcm9wZXJ0aWVzOyBzaW1wbGlmaWVkL2ltcHJvdmVkIHByb2Nlc3Npbmcgb2YgZnVuY3Rpb24KKyAgICAga2V5cywgbW91c2UgbW92ZW1lbnQgJiBjbGlja3M7IFggc2VsZWN0aW9uIHByb2Nlc3NpbmcsIGluY2x1ZGluZworICAgICBjbGlwYm9hcmQgc2VsZWN0aW9uczsgaG9va3MgdG8gYmUgcnVuIGlmIHRoZSBwb2ludCBvciBtb3VzZSBtb3ZlcworICAgICBvdXRzaWRlIGEgY2VydGFpbiByYW5nZTsgbWVudSBiYXJzICYgcG9wdXAgbWVudXMgZGVmaW5lZCBieSBrZXltYXBzOworICAgICBzY3JvbGxiYXJzOyBiZWZvcmUtICYgYWZ0ZXItY2hhbmdlIGhvb2tzOyBhIHNvdXJjZS1sZXZlbCBkZWJ1Z2dlciBmb3IKKyAgICAgRW1hY3MgTGlzcCBwcm9ncmFtczsgZmxvYXRpbmcgcG9pbnQgbnVtYmVyczsgaW1wcm92ZWQgYnVmZmVyIGFsbG9jYXRpb24sCisgICAgIGluY2x1ZGluZyByZXR1cm5pbmcgc3RvcmFnZSB0byB0aGUgc3lzdGVtIHdoZW4gYSBidWZmZXIgaXMga2lsbGVkOyBtYW55CisgICAgIHVwZGF0ZWQgbGlicmFyaWVzOyBBdXRvY29uZi1iYXNlZCBjb25maWd1cmF0aW9uOyBzdXBwb3J0IGZvciB2ZXJzaW9uCisgICAgIGNvbnRyb2wgc3lzdGVtcyAoQ1ZTLCBSQ1MsICYgU0NDUyk7ICYgRXVyb3BlYW4gY2hhcmFjdGVyIHNldHMuCisKKyAgICAgRmVhdHVyZXMgYWRkZWQgcmVjZW50bHkgdG8gRW1hY3MgMTkgaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBvcGVuIGZyYW1lcworICAgICBvbiBtb3JlIHRoYW4gb25lIFggZGlzcGxheSBmcm9tIGEgc2luZ2xlIEVtYWNzIGpvYiwgb3BlcmF0aW9uIHVuZGVyCisgICAgIE1TLURPUywgTVMgV2luZG93cywgYW5kIFdpbmRvd3MgTlQsIGRpc3BsYXlpbmcgbXVsdGlwbGUgdmlld3Mgb2YgYW4KKyAgICAgb3V0bGluZSBhdCB0aGUgc2FtZSB0aW1lLCBMaXNwLWxldmVsIHRpbWVycyBmb3IgcmVhbCB0aW1lIGFuZCBpZGxlIHRpbWUsCisgICAgIHZlcnNpb24gY29udHJvbCBzdXBwb3J0IGZvciBDVlMgYW5kIGZvciBtdWx0aXBsZSBicmFuY2hlcywgdGV4dAorICAgICBwcm9wZXJ0aWVzIGZvciBmb3JtYXR0aW5nIHRleHQsIGNvbW1hbmRzIHRvIGVkaXQgdGV4dCBwcm9wZXJ0aWVzIGFuZAorICAgICBzYXZlIHRoZW0gaW4gZmlsZXMsIGFuZCBHTlUtc3RhbmRhcmQgbG9uZy1uYW1lZCBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKyAgICAgQWxzbyBzZWUgKk5vdGUgRm9ydGhjb21pbmcgR05Vczo6LgorCisgICAgIEVtYWNzIDE5IHdvcmtzIG9uOiBBY29ybiBSSVNDIChSSVNDaVgpOyBBbGxpYW50IEZYLzI4MDAgKEJTRCk7IEFscGhhCisgICAgIChPU0YvMSBvciBHTlUvTGludXgpOyBBcG9sbG8gKERvbWFpbk9TKTsgQnVsbCBEUFgvMiAybm4gJiAzbm4gKFN5c1YuMykgJgorICAgICBzcHM3IChTeXNWLjIpOyBDbGlwcGVyOyBDb252ZXggKEJTRCk7IEN1Yml4IFFCeCAoU3lzVik7IERhdGEgR2VuZXJhbAorICAgICBBdmlpb24gKERHVVgpOyBERUMgTUlQUyAoVWx0cml4IDQuMiwgT1NGLzEsIG5vdCBWTVMpOyBFbHhzaSA2NDAwIChTeXNWKTsKKyAgICAgR291bGQgUG93ZXIgTm9kZSAmIE5QMSAoNC4yICYgNC4zQlNEKTsgSGFycmlzIE5pZ2h0IEhhd2sgMTIwMCwgMzAwMCwKKyAgICAgNDAwMCAmIDUwMDAgKGN4dXgpOyBIYXJyaXMgTmlnaHQgSGF3ayBQb3dlciBQQyAocG93ZXJ1bml4KTsgSG9uZXl3ZWxsCisgICAgIFhQUzEwMCAoU3lzVik7IEhQIDkwMDAgc2VyaWVzIDIwMCwgMzAwLCA3MDAsIDgwMCAoYnV0IG5vdCA1MDApICg0LjNCU0Q7CisgICAgIEhQLVVYIDcsIDgsIDk7IE5leHRTdGVwKTsgSW50ZWwgaTM4Ni9pNDg2L1BlbnRpdW0gKEdOVS9IdXJkLCBHTlUvTGludXgsCisgICAgIDM4NkJTRCwgQUlYLCBCU0RJLzM4NiwgRnJlZUJTRCwgRXNpeCwgSVNDLCBNUy1ET1MsIE5ldEJTRCwgU0NPMy4ydjQsCisgICAgIFNvbGFyaXMsIFN5c1YsIFhlbml4LCBXaW5kb3dzTlQsIFdpbmRvd3M5NSk7IElCTSBSUy82MDAwIChBSVggMy4yKSAmCisgICAgIFJUL1BDIChBSVgsIEJTRCk7IE1vdG9yb2xhIERlbHRhIDE0NyAmIDE4NyAoU3lzVi4zLCBTeXNWLjQsIG04OGtiY3MpOworICAgICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIDMySyAoR2VuaXgpOyBOZVhUIChCU0QsIE1hY2ggMiB3LyBOZVhUU3RlcCAzLjApOworICAgICBQYXJhZ29uIChPU0YvMSk7IFByaW1lIEVYTCAoU3lzVik7IFB5cmFtaWQgKEJTRCk7IFNlcXVlbnQgU3ltbWV0cnkgKEJTRCwKKyAgICAgcHR4KTsgU2llbWVucyBSTTQwMCAmIFJNNjAwIChTeXNWKTsgU0dJIElyaXMgNEQgKElyaXggNC54ICYgNS54KTsgU29ueQorICAgICBOZXdzL1JJU0MgKE5ld3NPUyk7IFN0YXJkZW50IGk4NjAgKFN5c1YpOyBTdW4gMyAmIDQsIFNQQVJDIDEsIDErLCAyLCAxMCwKKyAgICAgQ2xhc3NpYyAoU3VuT1MgNC4wLCA0LjEsIFNvbGFyaXMgMi4wLTIuMyk7IFRhZHBvbGUgNjhrIChTeXNWKTsgVGVrdHJvbml4CisgICAgIFhEODggKFN5c1YuMykgJiA0MzAwIChCU0QpOyAmIFRpdGFuIFAyICYgUDMgKFN5c1YpLgorCisgICAqIEVtYWNzIDE4ICAgKFNyY0NEKSAgIFtGU0ZyY10KKworICAgICBFbWFjcyAxOCBpcyBzZXZlcmFsIHllYXJzIG9sZC4gIFdlIG5vIGxvbmdlciBtYWludGFpbiBpdCwgYnV0IHN0aWxsCisgICAgIGRpc3RyaWJ1dGUgaXQgZm9yIHRob3NlIHVzaW5nIHBsYXRmb3JtcyB3aGljaCBFbWFjcyAxOSBkb2VzIG5vdCBzdXBwb3J0OgorICAgICBBbGxpYW50IEZYLzgwLCBBbHRvcyAzMDY4LCBBbWRhaGwgKFVUUyksIEFUJlQgKDNCcyAmIDczMDAgUEMpLCBDQ0kgNS8zMgorICAgICAmIDYvMzIsIENlbGVyaXR5LCBERUMgKFZBWCBWTVMpLCBEdWFsLCBFbmNvcmUgKEFQQywgRFBDLCAmIFhQQyksIEhMSAorICAgICBPcmlvbiAob3JpZ2luYWwgJiAxLzA1KSwgSVNJIChPcHRpbXVtIFYsIDgwMzg2KSwgTWFzc2NvbXAsIE5DUiBUb3dlciAzMgorICAgICAoU1ZSMiAmIFNWUjMpLCBOaXhkb3JmIFRhcmdvbiAzMSwgTnUgKFRJICYgTE1JKSwgcGZhNTAsIFBsZXh1cywgUHJpbWUKKyAgICAgRVhMLCBTdHJpZGUgKHN5c3RlbSByZWwuIDIpLCBUYWhvZSwgVGFuZGVtIEludGVncml0eSBTMiwgVGVrdHJvbml4IDE2MDAwLAorICAgICBUcml0b24gODgsIFVzdGF0aW9uIEUzMCAoU1M1RSksIFdoaXRlY2hhcGVsIChNRzEpLCAmIFdpY2F0LgorCisgICAqIGBlcycgICAoU3JjQ0QpCisKKyAgICAgYGVzJyBpcyBhbiBleHRlbnNpYmxlIHNoZWxsIChiYXNlZCBvbiBgcmMnKSB3aXRoIGZpcnN0LWNsYXNzIGZ1bmN0aW9ucywKKyAgICAgbGV4aWNhbCBzY29wZSwgZXhjZXB0aW9ucywgYW5kIHJpY2ggcmV0dXJuIHZhbHVlcyAoaS5lLiwgZnVuY3Rpb25zIGNhbgorICAgICByZXR1cm4gdmFsdWVzIG90aGVyIHRoYW4ganVzdCBudW1iZXJzKS4gIGBlcycncyBleHRlbnNpYmlsaXR5IGNvbWVzIGZyb20KKyAgICAgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IGFuZCBleHRlbmQgdGhlIHNoZWxsJ3MgYnVpbHQtaW4gc2VydmljZXMsIHN1Y2ggYXMKKyAgICAgcGF0aCBzZWFyY2hpbmcgYW5kIHJlZGlyZWN0aW9uLiAgTGlrZSBgcmMnLCBpdCBpcyBncmVhdCBmb3IgYm90aAorICAgICBpbnRlcmFjdGl2ZSB1c2UgYW5kIHNjcmlwdGluZywgcGFydGljdWxhcmx5IHNpbmNlIGl0cyBxdW90aW5nIHJ1bGVzIGFyZQorICAgICBtdWNoIGxlc3MgYmFyb3F1ZSB0aGFuIHRoZSBDIGFuZCBCb3VybmUgc2hlbGxzLgorCisgICAqIGBlbnNjcmlwdCcgICAoU3JjQ0QpCisKKyAgICAgYGVuc2NyaXB0JyBpcyBhbiB1cHdhcmRseS1jb21wYXRpYmxlIHJlcGxhY2VtZW50IGZvciB0aGUgQWRvYmUKKyAgICAgYGVuc2NyaXB0JyBwcm9ncmFtLiAgSXQgZm9ybWF0cyBBU0NJSSBmaWxlcyAob3V0cHV0dGluZyBpbiBQb3N0c2NyaXB0KQorICAgICBhbmQgc3RvcmVzIGdlbmVyYXRlZCBvdXRwdXQgdG8gYSBmaWxlIG9yIHNlbmRzIGl0IGRpcmVjdGx5IHRvIHRoZQorICAgICBwcmludGVyLgorCisgICAqIEV4aW0gICAoU3JjQ0QpCisKKyAgICAgRXhpbSBpcyBhIG5ldyBJbnRlcm5ldCBtYWlsIHRyYW5zZmVyIGFnZW50LCBzaW1pbGFyIGluIHN0eWxlIHRvIFNtYWlsIDMuCisgICAgIEl0IGNhbiBoYW5kbGUgcmVsYXRpdmVseSBoaWdoIHZvbHVtZSBtYWlsIHN5c3RlbXMsIGhlYWRlciByZXdyaXRpbmcsCisgICAgIGNvbnRyb2wgb3ZlciB3aGljaCBob3N0cy9uZXRzIG1heSB1c2UgaXQgYXMgYSByZWxheSwgYmxvY2tpbmcgb2YKKyAgICAgdW53YW50ZWQgbWFpbCBmcm9tIHNwZWNpZmllZCBob3N0cy9uZXRzL3NlbmRlcnMsIGFuZCBtdWx0aXBsZSBsb2NhbAorICAgICBkb21haW5zIG9uIG9uZSBtYWlsIGhvc3QgKCJ2aXJ0dWFsIGRvbWFpbnMiKSB3aXRoIHNldmVyYWwgb3B0aW9ucyBmb3IKKyAgICAgdGhlIHdheSB0aGVzZSBhcmUgaGFuZGxlZC4KKworICAgKiBgZjJjJyAgICpBbHNvIHNlZSAiRm9ydHJhbiIgYmVsb3cgJiBpbiAqTm90ZSBGb3J0aGNvbWluZyBHTlVzOjoqICAKKyAgICAgKFNyY0NEKQorCisgICAgIGBmMmMnIGNvbnZlcnRzIEZvcnRyYW4tNzcgc291cmNlIGludG8gQyBvciBDKyssIHdoaWNoIGNhbiBiZSBjb21waWxlZAorICAgICB3aXRoIEdDQyBvciBHKysuICBHZXQgYnVnIGZpeGVzIGJ5IEZUUCBmcm9tIHNpdGUgYG5ldGxpYi5iZWxsLWxhYnMuY29tJworICAgICBvciBieSBlbWFpbCBmcm9tIGBuZXRsaWJAbmV0bGliLmJlbGwtbGFicy5jb20nLiAgRm9yIGEgc3VtbWFyeSwgc2VlIHRoZQorICAgICBmaWxlIGAvbmV0bGliL2YyYy9yZWFkbWUuWicuCisKKyAgICogYGZmY2FsbCcgICAoU3JjQ0QpCisKKyAgICAgYGZmY2FsbCcgaXMgYSBDIGxpYnJhcnkgZm9yIGltcGxlbWVudGluZyBmb3JlaWduIGZ1bmN0aW9uIGNhbGxzIGluCisgICAgIGVtYmVkZGVkIGludGVycHJldGVycyBieSBCaWxsIFRyaWdncyBhbmQgQnJ1bm8gSGFpYmxlLiAgSXQgYWxsb3dzIEMKKyAgICAgZnVuY3Rpb25zIHdpdGggYXJiaXRyYXJ5IGFyZ3VtZW50IGxpc3RzIGFuZCByZXR1cm4gdHlwZXMgdG8gYmUgY2FsbGVkIG9yCisgICAgIGVtdWxhdGVkIChjYWxsYmFja3MpLgorCisgICAqIEZpbGV1dGlscyAgIChTcmNDRCkKKworICAgICBUaGUgRmlsZXV0aWxzIGFyZTogYGNoZ3JwJywgYGNobW9kJywgYGNob3duJywgYGNwJywgYGRkJywgYGRmJywgYGRpcicsCisgICAgIGBkaXJjb2xvcnMnLCBgZHUnLCBgaW5zdGFsbCcsIGBsbicsIGBscycsIGBta2RpcicsIGBta2ZpZm8nLCBgbWtub2QnLAorICAgICBgbXYnLCBgcm0nLCBgcm1kaXInLCBgc3luYycsIGB0b3VjaCcsICYgYHZkaXInLgorCisgICAqIEZpbmR1dGlscyAgIChTcmNDRCkKKworICAgICBgZmluZCcgaXMgZnJlcXVlbnRseSB1c2VkIGJvdGggaW50ZXJhY3RpdmVseSBhbmQgaW4gc2hlbGwgc2NyaXB0cyB0bworICAgICBmaW5kIGZpbGVzIHdoaWNoIG1hdGNoIGNlcnRhaW4gY3JpdGVyaWEgYW5kIHBlcmZvcm0gYXJiaXRyYXJ5IG9wZXJhdGlvbnMKKyAgICAgb24gdGhlbS4gIEFsc28gaW5jbHVkZWQgYXJlIGBsb2NhdGUnLCB3aGljaCBzY2FucyBhIGRhdGFiYXNlIGZvciBmaWxlCisgICAgIG5hbWVzIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuLCBhbmQgYHhhcmdzJywgd2hpY2ggYXBwbGllcyBhIGNvbW1hbmQgdG8gYQorICAgICBsaXN0IG9mIGZpbGVzLgorCisgICAqIEZpbmdlciAgIChTcmNDRCkKKworICAgICBHTlUgRmluZ2VyIGhhcyBtb3JlIGZlYXR1cmVzIHRoYW4gb3RoZXIgZmluZ2VyIHByb2dyYW1zLiAgRm9yIHNpdGVzIHdpdGgKKyAgICAgbWFueSBob3N0cywgYSBzaW5nbGUgaG9zdCBtYXkgYmUgZGVzaWduYXRlZCBhcyB0aGUgZmluZ2VyICJzZXJ2ZXIiIGhvc3QKKyAgICAgYW5kIG90aGVyIGhvc3RzIGF0IHRoYXQgc2l0ZSBjb25maWd1cmVkIGFzIGZpbmdlciAiY2xpZW50cyIuICBUaGUgc2VydmVyCisgICAgIGhvc3QgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgd2hvIGlzIGxvZ2dlZCBpbiBvbiB0aGUgY2xpZW50cy4gIFRvCisgICAgIGZpbmdlciBhIHVzZXIgYXQgYSBHTlUgRmluZ2VyIHNpdGUsIGEgcXVlcnkgdG8gYW55IG9mIGl0cyBjbGllbnQgaG9zdHMKKyAgICAgZ2V0cyB1c2VmdWwgaW5mb3JtYXRpb24uICBHTlUgRmluZ2VyIHN1cHBvcnRzIG1hbnkgY3VzdG9taXphdGlvbgorICAgICBmZWF0dXJlcywgaW5jbHVkaW5nIHVzZXIgb3V0cHV0IGZpbHRlcnMgYW5kIHNpdGUtcHJvZ3JhbW1hYmxlIG91dHB1dCBmb3IKKyAgICAgc3BlY2lhbCB0YXJnZXQgbmFtZXMuCisKKyAgICogYGZsZXgnICAgKEJpbkNELCBTcmNDRCkgICBbRlNGbWFuLCBGU0ZyY10KKworICAgICBgZmxleCcgaXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGBsZXgnIHNjYW5uZXIgZ2VuZXJhdG9yLiAgYGZsZXgnIHdhcworICAgICB3cml0dGVuIGJ5IFZlcm4gUGF4c29uIG9mIHRoZSBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBnZW5lcmF0ZXMKKyAgICAgZmFyIG1vcmUgZWZmaWNpZW50IHNjYW5uZXJzIHRoYW4gYGxleCcgZG9lcy4gIFNvdXJjZXMgZm9yIHRoZSBgRmxleAorICAgICBNYW51YWwnIGFuZCByZWZlcmVuY2UgY2FyZCBhcmUgaW5jbHVkZWQgKCpub3RlIERvY3VtZW50YXRpb246Oi4pLgorCisgICAqIEZvcnRyYW4gKGBnNzcnKSAgICpBbHNvICpub3RlIEZvcnRoY29taW5nIEdOVXM6Oi4qICAgKFNyY0NEKQorCisgICAgIEdOVSBGb3J0cmFuIChgZzc3JyksIGRldmVsb3BlZCBieSBDcmFpZyBCdXJsZXksIGlzIGF2YWlsYWJsZSBmb3IgcHVibGljCisgICAgIGJldGEgdGVzdGluZyBvbiB0aGUgSW50ZXJuZXQuICBGb3Igbm93LCBgZzc3JyBwcm9kdWNlcyBjb2RlIHRoYXQgaXMKKyAgICAgbW9zdGx5IG9iamVjdC1jb21wYXRpYmxlIHdpdGggYGYyYycgJiB1c2VzIHRoZSBzYW1lIHJ1bi10aW1lIGxpYnJhcnkKKyAgICAgKGBsaWJmMmMnKS4KKworICAgKiBGb250dXRpbHMgICAoU3JjQ0QpCisKKyAgICAgVGhlIEZvbnR1dGlscyBjb252ZXJ0IGJldHdlZW4gZm9udCBmb3JtYXRzLCBjcmVhdGUgZm9udHMgZm9yIHVzZSB3aXRoCisgICAgIEdob3N0c2NyaXB0IG9yIFRlWCAoc3RhcnRpbmcgd2l0aCBhIHNjYW5uZWQgdHlwZSBpbWFnZSAmIGNvbnZlcnRpbmcgdGhlCisgICAgIGJpdG1hcHMgdG8gb3V0bGluZXMpLCBldGMuICBJdCBpbmNsdWRlczogYGJwbHRvYnpyJywgYGJ6cnRvJywKKyAgICAgYGNoYXJzcGFjZScsIGBmb250Y29udmVydCcsIGBnc3JlbmRlcmZvbnQnLCBgaW1hZ2V0bycsIGBpbWdyb3RhdGUnLAorICAgICBgbGltbicsICYgYHhiZmUnLgorCisgICAqIEdBV0sgICAoU3JjQ0QpICAgW0ZTRm1hbl0KKworICAgICBHQVdLIGlzIHVwd2FyZGx5IGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IFBPU0lYIHNwZWNpZmljYXRpb24gb2YKKyAgICAgYGF3aycuICBJdCBhbHNvIHByb3ZpZGVzIHNldmVyYWwgdXNlZnVsIGV4dGVuc2lvbnMgbm90IGZvdW5kIGluIG90aGVyCisgICAgIGBhd2snIGltcGxlbWVudGF0aW9ucy4gIFRleGluZm8gc291cmNlIGZvciB0aGUgYFRoZSBHTlUgQXdrIFVzZXIncworICAgICBHdWlkZScgY29tZXMgd2l0aCB0aGUgc29mdHdhcmUgKCpub3RlIERvY3VtZW50YXRpb246Oi4pLgorCisgICAqIGBnY2FsJyAgIChTcmNDRCkKKworICAgICBgZ2NhbCcgaXMgYSBwcm9ncmFtIGZvciBwcmludGluZyBjYWxlbmRhcnMuICBJdCBkaXNwbGF5cyBkaWZmZXJlbnQKKyAgICAgc3R5bGVkIGNhbGVuZGFyIHNoZWV0cywgZXRlcm5hbCBob2xpZGF5IGxpc3RzLCBhbmQgZml4ZWQgZGF0ZSB3YXJuaW5nCisgICAgIGxpc3RzLgorCisgICAqIEdDQyAgICpBbHNvICpub3RlIEdOVXMgRmxhc2hlczo6LiogICAoQmluQ0QsIFNyY0NEKSAgIFtGU0ZtYW5dCisKKyAgICAgVmVyc2lvbiAyIG9mIHRoZSBHTlUgQyBDb21waWxlciBzdXBwb3J0cyB0aGUgbGFuZ3VhZ2VzIEMsIEMrKywgYW5kCisgICAgIE9iamVjdGl2ZS1DOyB0aGUgc291cmNlIGZpbGUgbmFtZSBzdWZmaXggb3IgYSBjb21waWxlciBvcHRpb24gc2VsZWN0cworICAgICB0aGUgbGFuZ3VhZ2UuICAoQWxzbyBzZWUgIkdOQVQiIGxhdGVyIGluIHRoaXMgYXJ0aWNsZSBmb3IgQWRhIGxhbmd1YWdlCisgICAgIHN1cHBvcnRzLikgT2JqZWN0aXZlLUMgc3VwcG9ydCB3YXMgZG9uYXRlZCBieSBOZVhULiAgVGhlIHJ1bnRpbWUgc3VwcG9ydAorICAgICBuZWVkZWQgdG8gcnVuIE9iamVjdGl2ZS1DIHByb2dyYW1zIGlzIG5vdyBkaXN0cmlidXRlZCB3aXRoIEdDQyAodGhpcworICAgICBkb2VzIG5vdCBpbmNsdWRlIGFueSBPYmplY3RpdmUtQyBjbGFzc2VzIGFzaWRlIGZyb20gYG9iamVjdCcsIGJ1dCBzZWUKKyAgICAgIkdOVXN0ZXAiIGluICpOb3RlIEZvcnRoY29taW5nIEdOVXM6OikuICBBcyBtdWNoIGFzIHBvc3NpYmxlLCBHKysgaXMKKyAgICAga2VwdCBjb21wYXRpYmxlIHdpdGggdGhlIGV2b2x2aW5nIGRyYWZ0IEFOU0kgc3RhbmRhcmQsIGJ1dCBub3Qgd2l0aAorICAgICBgY2Zyb250JyAoQVQmVCdzIGNvbXBpbGVyKSwgd2hpY2ggaGFzIGJlZW4gZGl2ZXJnaW5nIGZyb20gQU5TSS4KKworICAgICBHQ0MgaXMgYSBmYWlybHkgcG9ydGFibGUgb3B0aW1pemluZyBjb21waWxlciB3aGljaCBwZXJmb3JtcyBtYW55CisgICAgIG9wdGltaXphdGlvbnMuICBUaGV5IGluY2x1ZGU6IGF1dG9tYXRpYyByZWdpc3RlciBhbGxvY2F0aW9uLCBjb21tb24KKyAgICAgc3ViLWV4cHJlc3Npb24gZWxpbWluYXRpb24gKENTRSkgKGluY2x1ZGluZyBhIGNlcnRhaW4gYW1vdW50IG9mIENTRQorICAgICBiZXR3ZWVuIGJhc2ljIGJsb2NrcyAtIHRob3VnaCBub3QgYWxsIHRoZSBzdXBwb3J0ZWQgbWFjaGluZSBkZXNjcmlwdGlvbnMKKyAgICAgcHJvdmlkZSBmb3Igc2NoZWR1bGluZyBvciBkZWxheSBzbG90cyksIGludmFyaWFudCBjb2RlIG1vdGlvbiBmcm9tCisgICAgIGxvb3BzLCBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucywgY29uc3RhbnQgcHJvcGFnYXRpb24sIGNvcHkKKyAgICAgcHJvcGFnYXRpb24sIGRlbGF5ZWQgcG9wcGluZyBvZiBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cywgdGFpbCByZWN1cnNpb24KKyAgICAgZWxpbWluYXRpb24sIGludGVncmF0aW9uIG9mIGlubGluZSBmdW5jdGlvbnMgJiBmcmFtZSBwb2ludGVyIGVsaW1pbmF0aW9uLAorICAgICBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLCBsb29wIHVucm9sbGluZywgZmlsbGluZyBvZiBkZWxheSBzbG90cywgbGVhZgorICAgICBmdW5jdGlvbiBvcHRpbWl6YXRpb24sIG9wdGltaXplZCBtdWx0aXBsaWNhdGlvbiBieSBjb25zdGFudHMsIHRoZQorICAgICBhYmlsaXR5IHRvIGFzc2lnbiBhdHRyaWJ1dGVzIHRvIGluc3RydWN0aW9ucywgJiBtYW55IGxvY2FsIG9wdGltaXphdGlvbnMKKyAgICAgYXV0b21hdGljYWxseSBkZWR1Y2VkIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCisKKyAgICAgR0NDIGNhbiBvcGVuLWNvZGUgbW9zdCBhcml0aG1ldGljIG9uIDY0LWJpdCB2YWx1ZXMgKHR5cGUgYGxvbmcgbG9uZworICAgICBpbnQnKS4gIEl0IHN1cHBvcnRzIGV4dGVuZGVkIGZsb2F0aW5nIHBvaW50ICh0eXBlIGBsb25nIGRvdWJsZScpIG9uIHRoZQorICAgICA2OGs7IG90aGVyIG1hY2hpbmVzIHdpbGwgZm9sbG93LiAgR0NDIHN1cHBvcnRzIGZ1bGwgQU5TSSBDLCB0cmFkaXRpb25hbAorICAgICBDLCAmIEdOVSBDIGV4dGVuc2lvbnMgKGluY2x1ZGluZzogbmVzdGVkIGZ1bmN0aW9ucyBzdXBwb3J0LCBub25sb2NhbAorICAgICBnb3RvcywgJiB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsYWJlbCkuCisKKyAgICAgR0NDIGNhbiBnZW5lcmF0ZSBhLm91dCwgQ09GRiwgRUxGLCAmIE9TRi1Sb3NlIGZpbGVzIHdoZW4gdXNlZCB3aXRoIGEKKyAgICAgc3VpdGFibGUgYXNzZW1ibGVyLiAgSXQgY2FuIHByb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZXNlCisgICAgIGZvcm1hdHM6IEJTRCBzdGFicywgQ09GRiwgRUNPRkYsIEVDT0ZGIHdpdGggc3RhYnMsICYgRFdBUkYuCisKKyAgICAgR0NDIGdlbmVyYXRlcyBjb2RlIGZvciBtYW55IENQVXMsIGluY2x1ZGluZyB0aGUgYTI5aywgQWxwaGEsIEFSTSwgQVQmVCwKKyAgICAgRFNQMTYxMCwgQ2xpcHBlciwgQ29udmV4IGNOLCBFbHhzaSwgRnVqaXRzdSBHbWljcm8sIGkzNzAsIGk4NjAsIGk5NjAsCisgICAgIE1JTC1TVEQtMTc1MGEsIE1JUFMsIG5zMzJrLCBQRFAtMTEsIFB5cmFtaWQsIFJPTVAsIFJTLzYwMDAsIFNILCBTUFVSLAorICAgICBUYWhvZSwgVkFYLCAmIHdlMzJrLgorCisgICAgIFBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGUgQ2xpcHBlciwgSGl0YWNoaSBIOC8zMDAsCisgICAgIEhQLVBBICgxLjAgJiAxLjEpLCBpMzg2L2k0ODYvUGVudGl1bSwgbTY4aywgbTg4aywgU1BBUkMsICYgU1BBUkNsaXRlLgorCisgICAgIE9wZXJhdGluZyBzeXN0ZW1zIHN1cHBvcnRlZCBpbmNsdWRlOiBHTlUvSHVyZCwgR05VL0xpbnV4LCBBQ0lTLCBBSVgsIEFPUywKKyAgICAgQlNELCBDbGl4LCBDb25jZW50cml4LCBDdGl4LCBERy9VWCwgRHluaXgsIEZyZWVCU0QsIEdlbml4LCBIUC1VWCwgSXJpeCwKKyAgICAgSVNDLCBMdW5hLCBMeW54T1MsIE1pbml4LCBOZXRCU0QsIE5ld3NPUywgTmVYVFN0ZXAsIE9TLzIsIE9TRiwgT1NGLVJvc2UsCisgICAgIFJJU0NPUywgU0NPLCBTb2xhcmlzIDIsIFN1bk9TIDQsIFN5c3RlbS8zNzAsIFN5c1YsIFVsdHJpeCwgVW5vcywgVk1TLCAmCisgICAgIFdpbmRvd3MvTlQuCisKKyAgICAgVXNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2NoZW1lIGZvciBHQ0MsIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZXIgaXMgYXMKKyAgICAgZWFzeSBhcyBidWlsZGluZyBhIG5hdGl2ZSBjb21waWxlci4KKworICAgICBWZXJzaW9uIDEgb2YgR0NDLCBHKyssICYgbGliZysrIGFyZSBubyBsb25nZXIgbWFpbnRhaW5lZC4KKworICAgICBUZXhpbmZvIHNvdXJjZSBmb3IgdGhlIGBVc2luZyBhbmQgUG9ydGluZyBHTlUgQ0MnIG1hbnVhbCBpcyBpbmNsdWRlZAorICAgICB3aXRoIEdDQyAoKm5vdGUgRG9jdW1lbnRhdGlvbjo6LikuCisKKyAgICogR0RCICAgKEJpbkNELCBTcmNDRCkgICBbRlNGbWFuLCBGU0ZyY10KKworICAgICBHREIsIHRoZSBHTlUgRGVCdWdnZXIsIGlzIGEgc291cmNlLWxldmVsIGRlYnVnZ2VyIGZvciBDLCBDKyssICYgRm9ydHJhbi4KKyAgICAgSXQgcHJvdmlkZXMgcGFydGlhbCBzdXBwb3J0IGZvciAgTW9kdWxhLTIgJiBDaGlsbC4KKworICAgICBHREIgY2FuIGRlYnVnIGJvdGggQyAmIEMrKywgJiB3aWxsIHdvcmsgd2l0aCBleGVjdXRhYmxlcyBtYWRlIGJ5IG1hbnkKKyAgICAgZGlmZmVyZW50IGNvbXBpbGVyczsgYnV0LCBDKysgZGVidWdnaW5nIHdpbGwgaGF2ZSBzb21lIGxpbWl0YXRpb25zIGlmCisgICAgIHlvdSBkbyBub3QgdXNlIEdDQy4KKworICAgICBHREIgaGFzIGEgY29tbWFuZCBsaW5lIHVzZXIgaW50ZXJmYWNlLCBhbmQgRW1hY3MgaGFzIEdEQiBtb2RlIGFzIGFuCisgICAgIGludGVyZmFjZS4gIFR3byBYIGludGVyZmFjZXMgKG5vdCBkaXN0cmlidXRlZCBvciBtYWludGFpbmVkIGJ5IHRoZSBGU0YpCisgICAgIGFyZTogYGdkYnRrJyAoRlRQIGl0IGZyb20gYGZ0cC5jeWdudXMuY29tJyBpbiBkaXJlY3RvcnkgYC9wdWIvZ2RiJyk7IGFuZAorICAgICBgeHhnZGInIChGVFAgaXQgZnJvbSBgZnRwLngub3JnJyBpbiBkaXJlY3RvcnkgYC9jb250cmliL3V0aWxpdGllcycpLgorCisgICAgIEV4ZWN1dGFibGUgZmlsZXMgYW5kIHN5bWJvbCB0YWJsZXMgYXJlIHJlYWQgdmlhIHRoZSBCRkQgbGlicmFyeSwgd2hpY2gKKyAgICAgYWxsb3dzIGEgc2luZ2xlIGNvcHkgb2YgR0RCIHRvIGRlYnVnIHByb2dyYW1zIHdpdGggbXVsdGlwbGUgb2JqZWN0IGZpbGUKKyAgICAgZm9ybWF0cyAoZS5nLiwgYS5vdXQsIENPRkYsIEVMRikuICBPdGhlciBmZWF0dXJlcyBpbmNsdWRlIGEgcmljaCBjb21tYW5kCisgICAgIGxhbmd1YWdlLCByZW1vdGUgZGVidWdnaW5nIG92ZXIgc2VyaWFsIGxpbmVzIG9yIFRDUC9JUCwgYW5kIHdhdGNocG9pbnRzCisgICAgIChicmVha3BvaW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiBjaGFuZ2VzKS4KKworICAgICBHREIgdXNlcyBhIHN0YW5kYXJkIHJlbW90ZSBpbnRlcmZhY2UgdG8gYSBzaW11bGF0b3IgbGlicmFyeSB3aGljaCAoc28KKyAgICAgZmFyKSBoYXMgc2ltdWxhdG9ycyBmb3IgdGhlIEFSTSwgSGl0YWNoaSBIOC8zMDAsIEhpdGFjaGkgSDgvNTAwLCBIaXRhY2hpCisgICAgIFN1cGVyLUgsIFBvd2VyUEMsIFdEQyA2NTgxNiwgJiBaaWxvZyBaODAwMS8yLgorCisgICAgIEdEQiBjYW4gcGVyZm9ybSBjcm9zcy1kZWJ1Z2dpbmcuICBUbyBzYXkgdGhhdCBHREIgInRhcmdldHMiIGEgcGxhdGZvcm0KKyAgICAgbWVhbnMgaXQgY2FuIHBlcmZvcm0gbmF0aXZlIG9yIGNyb3NzLWRlYnVnZ2luZyBmb3IgaXQuICBUbyBzYXkgdGhhdCBHREIKKyAgICAgY2FuICJob3N0IiBhIGdpdmVuIHBsYXRmb3JtIG1lYW5zIHRoYXQgaXQgY2FuIGJlIGJ1aWx0IG9uIGl0LCBidXQgY2Fubm90CisgICAgIG5lY2Vzc2FyaWx5IGRlYnVnIG5hdGl2ZSBwcm9ncmFtcy4KKworICAgICBHREIgY2FuOgorCisgICAgICAgICogInRhcmdldCIgJiAiaG9zdCI6IEFtaWdhIDMwMDAgKEFtaXgsIE5ldEJTRCksIERFQyBBbHBoYSAoT1NGLzEpLAorICAgICAgICAgIERFQ3N0YXRpb24gMzEwMCAmIDUwMDAgKFVsdHJpeCksIEhQIDkwMDAvMzAwIChCU0QsIEhQLVVYKSwgSFAKKyAgICAgICAgICA5MDAwLzcwMCAoSFAtVVggOSwgMTApLCBpMzg2L2k0ODYvUGVudGl1bSAoR05VL0h1cmQsIEdOVS9MaW51eCwKKyAgICAgICAgICBCU0QsIEZyZWVCU0QsIEx5bnhPUywgTmV0QlNELCBTQ08sIFdpbmRvd3MgTlQpLCBJQk0gUlMvNjAwMCAoQUlYCisgICAgICAgICAgMy54LCBBSVggNC54LCBMeW54T1MpLCBNb3Rvcm9sYSBEZWx0YSBtODhrIChTeXN0ZW0gViwgQ1gvVVgpLCBQQzUzMgorICAgICAgICAgIChOZXRCU0QpLCBNb3Rvcm9sYSBtNjhrIE1WTUUtMTY3IChMeW54T1MpLCBOQ1IgMzAwMCAoU1ZSNCksIFBvd2VyUEMKKyAgICAgICAgICAoQUlYIDQueCwgTWFjT1MsIFdpbmRvd3MgTlQpLCBTR0kgKElyaXggVjMsIFY0LCBWNSksIFNPTlkgTmV3cworICAgICAgICAgIChOZXdzT1MgMy54KSwgU1BBUkMgKEx5bnhPUywgTmV0QlNELCBTb2xhcmlzIDIueCwgJiBTdW5PUyA0LjEgKQorICAgICAgICAgIFN1bi0zIChTdW5PUyA0LjEpLCAmIFVsdHJhY29tcHV0ZXIgKGEyOWsgcnVubmluZyBTeW0xKS4KKworICAgICAgICAqICJ0YXJnZXQiLCBidXQgbm90ICJob3N0IjogQU1EIDI5MDAwIChDT0ZGICYgYS5vdXQpLCBBUk0gKFJEUCksCisgICAgICAgICAgSGl0YWNoaSBIOC8zMDAsIEhpdGFjaGkgU0ggKENNT04sIFNIMywgRTcwMDApLCBIUCBQQSBQcm8gKFdpbmJvbmQsCisgICAgICAgICAgT2tpKSwgaTM4NiAoYS5vdXQsIENPRkYsIE9TLzkwMDApLCBpOTYwIChNT045NjAsIE5pbmR5LCBWeFdvcmtzKSwKKyAgICAgICAgICBtNjhrL202ODMzMiAoYS5vdXQsIENPRkYsIENQVTMyQlVHLCBFU1QsIFJPTTY4SywgVnhXb3JrcyksIE1JUFMKKyAgICAgICAgICAoRUxGLCBJRFQgZWNvZmYsIFBNT04sIFZ4V29ya3MpLCBQb3dlclBDIChQUENCdWcpLCBNYXRyYSBTcGFyY2xldCwKKyAgICAgICAgICBGdWppdHN1IFNQQVJDbGl0ZSAoYS5vdXQsIENPRkYpLCBXREMgNjU4MTYsICYgWjgwMDAuCisKKyAgICAgICAgKiAiaG9zdCIsIGJ1dCBub3QgInRhcmdldCI6IElCTSBSVC9QQyAoQUlYKSwgSFAvQXBvbGxvIDY4ayAoQlNEKSwgJgorICAgICAgICAgIG02OGsgQXBwbGUgTWFjaW50b3NoIChNYWNPUykuICBTb3VyY2VzIGZvciB0aGUgbWFudWFsLAorICAgICBgRGVidWdnaW5nIHdpdGggR0RCJywgYW5kIGEgcmVmZXJlbmNlIGNhcmQgYXJlIGluY2x1ZGVkICgqbm90ZQorICAgICBEb2N1bWVudGF0aW9uOjouKS4KKworICAgKiBgZ2RibScgICAoU3JjQ0QpCisKKyAgICAgYGdkYm0nIGlzIHRoZSBHTlUgcmVwbGFjZW1lbnQgZm9yIHRoZSB0cmFkaXRpb25hbCBgZGJtJyBhbmQgYG5kYm0nCisgICAgIGxpYnJhcmllcy4gIEl0IGltcGxlbWVudHMgYSBkYXRhYmFzZSB1c2luZyBxdWljayBsb29rdXAgYnkgaGFzaGluZy4KKyAgICAgYGdkYm0nIGRvZXMgbm90IG9yZGluYXJpbHkgbWFrZSBzcGFyc2UgZmlsZXMgKHVubGlrZSBpdHMgVW5peCBhbmQgQlNECisgICAgIGNvdW50ZXJwYXJ0cykuCisKKyAgICogYGdldHRleHQnICAgICpBbHNvICpub3RlIEhlbHAgdGhlIEdOVSBUcmFuc2xhdGlvbiBQcm9qZWN0OjouKiAgIChTcmNDRCkKKworICAgICBUaGUgR05VIGBnZXR0ZXh0JyB0b29sIHNldCBoYXMgZXZlcnl0aGluZyBtYWludGFpbmVycyBuZWVkIHRvCisgICAgIGludGVybmF0aW9uYWxpemUgYSBwYWNrYWdlJ3MgdXNlciBtZXNzYWdlcy4gIE9uY2UgYSBwYWNrYWdlIGhhcyBiZWVuCisgICAgIGludGVybmF0aW9uYWxpemVkLCBgZ2V0dGV4dCcncyBtYW55IHRvb2xzIGhlbHAgdHJhbnNsYXRvcnMgbG9jYWxpemUKKyAgICAgbWVzc2FnZXMgdG8gdGhlaXIgbmF0aXZlIGxhbmd1YWdlIGFuZCBhdXRvbWF0ZSBoYW5kbGluZyB0aGUgdHJhbnNsYXRpb24KKyAgICAgZmlsZXMuCisKKyAgICogR2VuZXJpYyBOUVMgICAoU3JjQ0QpCisKKyAgICAgR2VuZXJpYyBOUVMgaXMgYSBuZXR3b3JrIHF1ZXVpbmcgc3lzdGVtIGZvciBzcHJlYWRpbmcgYmF0Y2ggam9icyBhY3Jvc3MgYQorICAgICBuZXR3b3JrIG9mIG1hY2hpbmVzLiAgSXQgaXMgZGVzaWduZWQgdG8gYmUgc2ltcGxlIHRvIGluc3RhbGwgb24gYQorICAgICBoZXRlcm9nZW5lb3VzIG5ldHdvcmsgb2YgbWFjaGluZXMsIGFuZCBoYXMgb3B0aW1pemF0aW9ucyBmb3IgcnVubmluZyBvbgorICAgICB0aGUgaGlnaCBlbmQsIHN5bW1ldHJpYyBtdWx0aXByb2Nlc3Npbmcgc2VydmVycyB0aGF0IGFyZSBjdXJyZW50bHkgb24gdGhlCisgICAgIG1hcmtldC4gIEl0IGlzIGF2YWlsYWJsZSBmb3IgbWFueSBtb3JlIFVOSVggdmFyaWFudHMgdGhhbiBhbnkgb3RoZXIKKyAgICAgY29tcGFyYWJsZSBwcm9kdWN0LCBhbmQgaW50ZXItb3BlcmF0ZXMgd2l0aCBvdGhlciBOUVMgc3lzdGVtcywgaW5jbHVkaW5nCisgICAgIENyYXkncyBOUUUuCisKKyAgICogYGdlb212aWV3JyAgICpTZWUqIGBodHRwOi8vd3d3Lmdlb20udW1uLmVkdS9zb2Z0d2FyZS9nZW9tdmlldycgICAoU3JjQ0QpCisKKyAgICAgYGdlb212aWV3JyBpcyBhbiBpbnRlcmFjdGl2ZSBnZW9tZXRyeSB2aWV3aW5nIHByb2dyYW0sIGZvciBVTklYIHN5c3RlbXMKKyAgICAgd2l0aCBNb3RpZiwgdXNpbmcgWCwgR0wsIG9yIE9wZW5HTCBncmFwaGljcy4gIEl0IGFsbG93cyBtdWx0aXBsZQorICAgICBpbmRlcGVuZGVudGx5IGNvbnRyb2xsYWJsZSBvYmplY3RzIGFuZCBjYW1lcmFzLiAgYGdlb212aWV3JyBwcm92aWRlcworICAgICBpbnRlcmFjdGl2ZSBjb250cm9sIGZvciBtb3Rpb24sIGFwcGVhcmFuY2VzIChpbmNsdWRpbmcgbGlnaHRpbmcsCisgICAgIHNoYWRpbmcsIGFuZCBtYXRlcmlhbHMpLCBwaWNraW5nIG9uIGFuIG9iamVjdCwgZWRnZSBvciB2ZXJ0ZXggbGV2ZWwsIGFuZAorICAgICBzbmFwc2hvdHMgaW4gUFBNIG9yIFNHSSBpbWFnZSBmaWxlcywgUG9zdHNjcmlwdCwgYW5kIFJlbmRlcm1hbiBSSUIKKyAgICAgZm9ybWF0LiAgYGdlb212aWV3JyBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIGRpcmVjdCBtb3VzZSBtYW5pcHVsYXRpb24sCisgICAgIGNvbnRyb2wgcGFuZWxzLCBhbmQga2V5Ym9hcmQgc2hvcnRjdXRzLiAgRXh0ZXJuYWwgcHJvZ3JhbXMgY2FuIGFsc28KKyAgICAgZHJpdmUgZGVzaXJlZCBhc3BlY3RzIG9mIHRoZSB2aWV3ZXIgKHN1Y2ggYXMgY29udGludWFsbHkgbG9hZGluZworICAgICBjaGFuZ2luZyBnZW9tZXRyeSBvciBjb250cm9sbGluZyB0aGUgbW90aW9uIG9mIGNlcnRhaW4gb2JqZWN0cykgd2hpbGUKKyAgICAgYWxsb3dpbmcgaW50ZXJhY3RpdmUgY29udHJvbCBvZiBldmVyeXRoaW5nIGVsc2UuCisKKyAgICogYGdmb3J0aCcgICAoU3JjQ0QpCisKKyAgICAgYGdmb3J0aCcgaXMgYSBmYXN0LCBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQU5TIEZvcnRoIGxhbmd1YWdlLgorCisgICAqIEdob3N0c2NyaXB0ICAgKFNyY0NEKQorCisgICAgIEdob3N0c2NyaXB0IGlzIGFuIGludGVycHJldGVyIGZvciB0aGUgUG9zdHNjcmlwdCBhbmQgUERGIGdyYXBoaWNzCisgICAgIGxhbmd1YWdlcy4KKworICAgICBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIEdOVSBHaG9zdHNjcmlwdCwgMy4zMywgaW5jbHVkZXMgbmVhcmx5IGEgZnVsbAorICAgICBQb3N0c2NyaXB0IExldmVsIDIgaW50ZXJwcmV0ZXIgYW5kIGEgUERGIDEuMCBpbnRlcnByZXRlci4gIFNpZ25pZmljYW50CisgICAgIG5ldyBmZWF0dXJlcyBpbmNsdWRlOiBzdXBwb3J0IGZvciBhbnRpLWFsaWFzZWQgY2hhcmFjdGVyczsgdGhlIGFiaWxpdHkKKyAgICAgdG8gc2NhbiBhIGRpcmVjdG9yeSBhbmQgcmVnaXN0ZXIgYWxsIHRoZSBmb250cyBpbiBpdDsgc3VwcG9ydCBmb3IgVHlwZSAwCisgICAgIChKYXBhbmVzZSAvIENoaW5lc2UgLyBLb3JlYW4pIGZvbnRzOyBhbmQgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbGwgdGhlCisgICAgIGV4dGVybmFsIGluaXRpYWxpemF0aW9uIGZpbGVzIGludG8gdGhlIGV4ZWN1dGFibGUuICBUaGlzIHZlcnNpb24gY2FuCisgICAgIGFsc28gcnVuIGFzIGEgMzItYml0IE1TIFdpbmRvd3MgYXBwbGljYXRpb24uCisKKyAgICAgVGhhbmtzIHRvIHRoZSBnZW5lcm9zaXR5IG9mIFVSVysrIChIYW1idXJnLCBHZXJtYW55KSwgdGhlIGxvdy1xdWFsaXR5CisgICAgIGJpdG1hcC1kZXJpdmVkIGZvbnRzIGRpc3RyaWJ1dGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgaGF2ZSBiZWVuIHJlcGxhY2VkCisgICAgIHdpdGggY29tbWVyY2lhbC1xdWFsaXR5LCBoaW50ZWQgb3V0bGluZSBmb250cy4KKworICAgICBHaG9zdHNjcmlwdCBleGVjdXRlcyBjb21tYW5kcyBpbiB0aGUgUG9zdHNjcmlwdCBsYW5ndWFnZSBieSB3cml0aW5nCisgICAgIGRpcmVjdGx5IHRvIGEgcHJpbnRlciwgZHJhd2luZyBvbiBhbiBYIHdpbmRvdywgb3Igd3JpdGluZyB0byBmaWxlcyBmb3IKKyAgICAgcHJpbnRpbmcgbGF0ZXIgb3IgbWFuaXB1bGF0aW5nIHdpdGggb3RoZXIgZ3JhcGhpY3MgcHJvZ3JhbXMuCisKKyAgICAgR2hvc3RzY3JpcHQgaW5jbHVkZXMgYSBDLWNhbGxhYmxlIGdyYXBoaWNzIGxpYnJhcnkgKGZvciBjbGllbnQgcHJvZ3JhbXMKKyAgICAgdGhhdCBkbyBub3Qgd2FudCB0byBkZWFsIHdpdGggdGhlIFBvc3RzY3JpcHQgbGFuZ3VhZ2UpLiAgSXQgYWxzbyBzdXBwb3J0cworICAgICBpMzg2L2k0ODYvUGVudGl1bXMgcnVubmluZyBET1Mgd2l0aCBFR0EsIFZHQSBvciBTdXBlclZHQSBncmFwaGljcyAoYnV0CisgICAgIHBsZWFzZSBkbyAqbm90KiBhc2sgdGhlIEZTRiBzdGFmZiBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXM7IHdlIGRvIG5vdAorICAgICB1c2UgRE9TKS4KKworICAgKiBHaG9zdHZpZXcgICAoU3JjQ0QpCisKKyAgICAgVGltIFRoZWlzZW4sIGBnaG9zdHZpZXdAY3Mud2lzYy5lZHUnLCBjcmVhdGVkIEdob3N0dmlldywgYSBwcmV2aWV3ZXIgZm9yCisgICAgIG11bHRpLXBhZ2UgZmlsZXMgd2l0aCBhbiBYIFdpbmRvdyBpbnRlcmZhY2UuICBHaG9zdHZpZXcgJiBHaG9zdHNjcmlwdAorICAgICB3b3JrIHRvZ2V0aGVyOyBHaG9zdHZpZXcgY3JlYXRlcyBhIHZpZXdpbmcgd2luZG93ICYgR2hvc3RzY3JpcHQgZHJhd3MgaW4KKyAgICAgaXQuCisKKyAgICogR0lUICAgKFNyY0NEKQorCisgICAgIFRoZSBHTlUgSW50ZXJhY3RpdmUgVG9vbHMgcGFja2FnZSBpbmNsdWRlczogYW4gZXh0ZW5zaWJsZSBmaWxlIHN5c3RlbQorICAgICBicm93c2VyLCBhbiBBU0NJSS9oZXggZmlsZSB2aWV3ZXIsIGEgcHJvY2VzcyB2aWV3ZXIva2lsbGVyLCAmIG90aGVyCisgICAgIHJlbGF0ZWQgdXRpbGl0aWVzICYgc2hlbGwgc2NyaXB0cy4gIEl0IGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBzcGVlZAorICAgICAmIGVmZmljaWVuY3kgb2YgbWFueSBkYWlseSB0YXNrcywgc3VjaCBhcyBjb3B5aW5nICYgbW92aW5nIGZpbGVzICYKKyAgICAgZGlyZWN0b3JpZXMsIGludm9raW5nIGVkaXRvcnMsIGNvbXByZXNzaW5nL3VuY29tcHJlc3NpbmcgZmlsZXMsIGNyZWF0aW5nCisgICAgICYgZXhwYW5kaW5nIGFyY2hpdmVzLCBjb21waWxpbmcgcHJvZ3JhbXMsIHNlbmRpbmcgbWFpbCwgZXRjLiAgSXQgbG9va3MKKyAgICAgbmljZSwgaGFzIGNvbG9ycyAoaWYgdGhlIHN0YW5kYXJkIEFOU0kgY29sb3Igc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQpLCAmCisgICAgIGlzIHVzZXItZnJpZW5kbHkuCisKKyAgICogYGdtcCcgICAoU3JjQ0QpCisKKyAgICAgR05VIGBtcCcgaXMgYSBsaWJyYXJ5IGZvciBhcml0aG1ldGljIG9uIGFyYml0cmFyeSBwcmVjaXNpb24gaW50ZWdlcnMsCisgICAgIHJhdGlvbmFsIG51bWJlcnMsIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLiAgSXQgaGFzIGEgcmljaCBzZXQgb2YKKyAgICAgZnVuY3Rpb25zIHdpdGggYSByZWd1bGFyIGludGVyZmFjZS4KKworICAgICBBIG1ham9yIG5ldyByZWxlYXNlLCB2ZXJzaW9uIDIsIGNhbWUgb3V0IGluIFNwcmluZyAnOTYuICBDb21wYXJlZCB0bworICAgICBwcmV2aW91cyB2ZXJzaW9ucywgaXQgaXMgbXVjaCBmYXN0ZXIsIGNvbnRhaW5zIGxvdHMgb2YgbmV3IGZ1bmN0aW9ucywgJgorICAgICBoYXMgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IHByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorCisgICAqIEduYW5zICAgIChTcmNDRCkKKworICAgICBHbmFucyBpcyBhIHByb2dyYW0gKGFuZCBsYW5ndWFnZSkgZm9yIHRoZSBudW1lcmljYWwgc3R1ZHkgb2YKKyAgICAgZGV0ZXJtaW5pc3RpYyBhbmQgc3RvY2hhc3RpYyBkeW5hbWljYWwgc3lzdGVtcy4gIFRoZSBkeW5hbWljYWwgc3lzdGVtcworICAgICBtYXkgZXZvbHZlIGluIGNvbnRpbnVvdXMgb3IgZGlzY3JldGUgdGltZS4gIEduYW5zIGhhcyBncmFwaGljYWwgJgorICAgICBjb21tYW5kIGxpbmUgaW50ZXJmYWNlcy4KKworICAgKiBHTkFUOiBUaGUgR05VIEFkYSBUcmFuc2xhdG9yICAgKFNyY0NEKQorCisgICAgIEdOQVQsIGEgZnJvbnQgZW5kIGZvciB0aGUgZW50aXJlIEFkYSA5NSBsYW5ndWFnZSwgaW5jbHVkaW5nIGFsbCBzcGVjaWFsCisgICAgIG5lZWRzIGFubmV4ZXMsIGlzIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIEZUUCBmcm9tIGBjcy5ueXUuZWR1JyBhbmQKKyAgICAgdmFyaW91cyBtaXJyb3Igc2l0ZXMgaW4gYC9wdWIvZ25hdCcuICBTR0ksIERFQywgYW5kIFNpZW1lbnMgTml4ZG9yZiBoYXZlCisgICAgIGNob3NlbiBHTlUgQWRhIDk1IGFzIHRoZSBBZGEgY29tcGlsZXIgZm9yIHRoZWlyIHN5c3RlbXMuICBHTkFUIGlzCisgICAgIG1haW50YWluZWQgYnkgQWRhIENvcmUgVGVjaG5vbG9naWVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICAgICBgaHR0cDovL3d3dy5nbmF0LmNvbScuCisKKyAgICogR05BVFMgICAoU3JjQ0QpCisKKyAgICAgR05BVFMsIEdOYXRzOiBBIFRyYWNraW5nIFN5c3RlbSwgaXMgYSBidWctdHJhY2tpbmcgc3lzdGVtLiAgSXQgaXMgYmFzZWQKKyAgICAgdXBvbiB0aGUgcGFyYWRpZ20gb2YgYSBjZW50cmFsIHNpdGUgb3Igb3JnYW5pemF0aW9uIHdoaWNoIHJlY2VpdmVzCisgICAgIHByb2JsZW0gcmVwb3J0cyBhbmQgbmVnb3RpYXRlcyB0aGVpciByZXNvbHV0aW9uIGJ5IGVsZWN0cm9uaWMgbWFpbC4KKyAgICAgQWx0aG91Z2ggaXQgaGFzIGJlZW4gdXNlZCBwcmltYXJpbHkgYXMgYSBzb2Z0d2FyZSBidWctdHJhY2tpbmcgc3lzdGVtIHNvCisgICAgIGZhciwgaXQgaXMgc3VmZmljaWVudGx5IGdlbmVyYWxpemVkIHRoYXQgaXQgY291bGQgYmUgdXNlZCBmb3IgaGFuZGxpbmcKKyAgICAgc3lzdGVtIGFkbWluaXN0cmF0aW9uIGlzc3VlcywgcHJvamVjdCBtYW5hZ2VtZW50LCBvciBhbnkgbnVtYmVyIG9mIG90aGVyCisgICAgIGFwcGxpY2F0aW9ucy4KKworICAgKiBHTlVNQVRIIChgZ251c3NsJykgICAoU3JjQ0QpCisKKyAgICAgR05VTUFUSCBpcyBhIGxpYnJhcnkgKGBnbnVzc2wnKSB0aGF0IHNpbXBsaWZpZXMgc2NpZW50aWZpYyBwcm9ncmFtbWluZworICAgICBpbiBDICYgQysrLiAgSXRzIGZvY3VzIGlzIG9uIHByb2JsZW1zIHRoYXQgY2FuIGJlIHNvbHZlZCBieSBhCisgICAgIHN0cmFpZ2h0LWZvcndhcmQgYXBwbGljYXRpb24gb2YgbnVtZXJpY2FsIGxpbmVhciBhbGdlYnJhLiAgSXQgYWxzbworICAgICBoYW5kbGVzIHBsb3R0aW5nLiAgSXQgaXMgaW4gYmV0YSByZWxlYXNlOyBpdCBpcyBleHBlY3RlZCB0byBncm93IG1vcmUKKyAgICAgdmVyc2F0aWxlICYgb2ZmZXIgYSB3aWRlciBzY29wZSBpbiB0aW1lLgorCisgICAqIGBnbnVwbG90JyAgIChTcmNDRCkKKworICAgICBgZ251cGxvdCcgaXMgYW4gaW50ZXJhY3RpdmUgcHJvZ3JhbSBmb3IgcGxvdHRpbmcgbWF0aGVtYXRpY2FsCisgICAgIGV4cHJlc3Npb25zIGFuZCBkYXRhLiAgSXQgcGxvdHMgYm90aCBjdXJ2ZXMgKDIgZGltZW5zaW9ucykgJiBzdXJmYWNlcyAoMworICAgICBkaW1lbnNpb25zKS4gIEl0IHdhcyBuZWl0aGVyIHdyaXR0ZW4gbm9yIG5hbWVkIGZvciB0aGUgR05VIFByb2plY3Q7IHRoZQorICAgICBuYW1lIGlzIGEgY29pbmNpZGVuY2UuICBWYXJpb3VzIEdOVSBwcm9ncmFtcyB1c2UgYGdudXBsb3QnLgorCisgICAqIGBnbnVzZXJ2JyAgIChTcmNDRCkKKworICAgICBgZ251c2VydicgaXMgYW4gZW5oYW5jZWQgdmVyc2lvbiBvZiBFbWFjcycgYGVtYWNzY2xpZW50JyBwcm9ncmFtLiAgSXQKKyAgICAgbGV0cyB0aGUgdXNlciBkaXJlY3QgYSBydW5uaW5nIEVtYWNzIHRvIGVkaXQgZmlsZXMgb3IgZXZhbHVhdGUgYXJiaXRyYXJ5CisgICAgIEVtYWNzIExpc3AgY29uc3RydWN0cyBmcm9tIGFub3RoZXIgcHJvY2Vzcy4KKworICAgKiBHbnVHbyAgIChTcmNDRCkKKworICAgICBHbnVHbyBwbGF5cyB0aGUgZ2FtZSBvZiBHby4gIEl0IGlzIG5vdCB5ZXQgdmVyeSBzb3BoaXN0aWNhdGVkLgorCisgICAqIGBncGVyZicgICAoU3JjQ0QpCisKKyAgICAgYGdwZXJmJyBnZW5lcmF0ZXMgcGVyZmVjdCBoYXNoIHRhYmxlcy4gIFRoZSBDIHZlcnNpb24gaXMgaW4gcGFja2FnZQorICAgICBjcGVyZi4gIFRoZSBDKysgdmVyc2lvbiBpcyBpbiBsaWJnKysuICBCb3RoIHByb2R1Y2UgaGFzaCBmdW5jdGlvbnMgaW4KKyAgICAgZWl0aGVyIEMgb3IgQysrLgorCisgICAqIEdyYXBoaWNzICAgKFNyY0NEKQorCisgICAgIEdOVSBHcmFwaGljcyBwcm9kdWNlcyB4LXkgcGxvdHMgZnJvbSBBU0NJSSBvciBiaW5hcnkgZGF0YS4gIEl0IG91dHB1dHMKKyAgICAgaW4gUG9zdHNjcmlwdCwgVGVrdHJvbml4IDQwMTAgY29tcGF0aWJsZSwgYW5kIFVuaXggZGV2aWNlLWluZGVwZW5kZW50CisgICAgICJwbG90IiBmb3JtYXRzLiAgSXQgaGFzIGEgcHJldmlld2VyIGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtLiAgRmVhdHVyZXMKKyAgICAgaW5jbHVkZSBhIGBzcGxpbmUnIGludGVycG9sYXRpb24gcHJvZ3JhbTsgZXhhbXBsZXMgb2Ygc2hlbGwgc2NyaXB0cworICAgICB1c2luZyBgZ3JhcGgnIGFuZCBgcGxvdCc7IGEgc3RhdGlzdGljcyB0b29sa2l0OyBhbmQgb3V0cHV0IGluIFRla25pQ0FECisgICAgIFREQSBhbmQgbG4wMyBmaWxlIGZvcm1hdHMuICBFbWFpbCBidWdzIG9yIHF1ZXJpZXMgdG8gUmljaCBNdXJwaGV5LAorICAgICBgUmljaEBsYW1wcmV5LnV0bWIuZWR1Jy4KKworICAgKiBncmVwICAgKFNyY0NEKQorCisgICAgIFRoaXMgcGFja2FnZSBoYXMgR05VIGBncmVwJywgYGVncmVwJywgYW5kIGBmZ3JlcCcsIHdoaWNoIGZpbmQgbGluZXMgdGhhdAorICAgICBtYXRjaCBlbnRlcmVkIHBhdHRlcm5zLiAgVGhleSBhcmUgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgdHJhZGl0aW9uYWwgVW5peAorICAgICB2ZXJzaW9ucy4KKworICAgKiBHcm9mZiAgIChTcmNDRCkKKworICAgICBHcm9mZiBpcyBhIGRvY3VtZW50IGZvcm1hdHRpbmcgc3lzdGVtIGJhc2VkIG9uIGEgZGV2aWNlLWluZGVwZW5kZW50CisgICAgIHZlcnNpb24gb2YgYHRyb2ZmJywgJiBpbmNsdWRlczogYGVxbicsIGBucm9mZicsIGBwaWMnLCBgcmVmZXInLCBgdGJsJywKKyAgICAgYHRyb2ZmJzsgdGhlIGBtYW4nLCBgbXMnLCAmIGBtbScgbWFjcm9zOyAmIGRyaXZlcnMgZm9yIFBvc3RzY3JpcHQsIFRlWAorICAgICBgZHZpJyBmb3JtYXQsIHRoZSBMYXNlckpldCA0IHNlcmllcyBvZiBwcmludGVycywgYW5kIHR5cGV3cml0ZXItbGlrZQorICAgICBkZXZpY2VzLiAgR3JvZmYncyBgbW0nIG1hY3JvIHBhY2thZ2UgaXMgYWxtb3N0IGNvbXBhdGlibGUgd2l0aCB0aGUgRFdCCisgICAgIGBtbScgbWFjcm9zIHdpdGggc2V2ZXJhbCBleHRlbnNpb25zLiAgQWxzbyBpbmNsdWRlZCBpcyBhIG1vZGlmaWVkCisgICAgIHZlcnNpb24gb2YgdGhlIEJlcmtlbGV5IGBtZScgbWFjcm9zIGFuZCBhbiBlbmhhbmNlZCB2ZXJzaW9uIG9mIHRoZSBYMTEKKyAgICAgYHhkaXR2aWV3JyBwcmV2aWV3ZXIuICBXcml0dGVuIGluIEMrKywgdGhlc2UgcHJvZ3JhbXMgY2FuIGJlIGNvbXBpbGVkCisgICAgIHdpdGggR05VIEMrKyBWZXJzaW9uIDIuNy4yIG9yIGxhdGVyLgorCisgICAgIEdyb2ZmIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGNvbnRyaWJ1dGUgZW5oYW5jZW1lbnRzLiAgTW9zdCBuZWVkZWQgYXJlCisgICAgIGNvbXBsZXRlIFRleGluZm8gZG9jdW1lbnRhdGlvbiwgYSBgZ3JhcCcgZW11bGF0aW9uIChhIGBwaWMnIHByZXByb2Nlc3NvcgorICAgICBmb3IgdHlwZXNldHRpbmcgZ3JhcGhzKSwgYSBwYWdlLW1ha2V1cCBwb3N0cHJvY2Vzc29yIHNpbWlsYXIgdG8gYHBtJworICAgICAoc2VlIGBDb21wdXRpbmcgU3lzdGVtcycsIFZvbC4gMiwgTm8uIDI7IGFzayBgb2ZmaWNlQHVzZW5peC5vcmcnIGhvdyB0bworICAgICBnZXQgYSBjb3B5KSwgYW5kIGFuIEFTQ0lJIG91dHB1dCBjbGFzcyBmb3IgYHBpYycgdG8gaW50ZWdyYXRlIGBwaWMnIHdpdGgKKyAgICAgVGV4aW5mby4gIFF1ZXN0aW9ucyBhbmQgYnVnIHJlcG9ydHMgZnJvbSB1c2VycyB3aG8gaGF2ZSByZWFkIHRoZQorICAgICBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGggR3JvZmYgY2FuIGJlIHNlbnQgdG8KKyAgICAgYGJ1Zy1ncm9mZkBwcmVwLmFpLm1pdC5lZHUnLgorCisgICAqIGBnemlwJyAgIChTcmNDRCkKKworICAgICBgZ3ppcCcgY2FuIGV4cGFuZCBMWlctY29tcHJlc3NlZCBmaWxlcyBidXQgdXNlcyBhbm90aGVyLCB1bnBhdGVudGVkCisgICAgIGFsZ29yaXRobSBmb3IgY29tcHJlc3Npb24gd2hpY2ggZ2VuZXJhbGx5IHByb2R1Y2VzIGJldHRlciByZXN1bHRzLiAgSXQKKyAgICAgYWxzbyBleHBhbmRzIGZpbGVzIGNvbXByZXNzZWQgd2l0aCBTeXN0ZW0gVidzIGBwYWNrJyBwcm9ncmFtLgorCisgICAqIGBoZWxsbycgICAoU3JjQ0QpCisKKyAgICAgVGhlIEdOVSBgaGVsbG8nIHByb2dyYW0gcHJvZHVjZXMgYSBmYW1pbGlhciwgZnJpZW5kbHkgZ3JlZXRpbmcuICBJdAorICAgICBhbGxvd3Mgbm9uLXByb2dyYW1tZXJzIHRvIHVzZSBhIGNsYXNzaWMgY29tcHV0ZXIgc2NpZW5jZSB0b29sIHdoaWNoIHdvdWxkCisgICAgIG90aGVyd2lzZSBiZSB1bmF2YWlsYWJsZSB0byB0aGVtLiAgQmVjYXVzZSBpdCBpcyBwcm90ZWN0ZWQgYnkgdGhlIEdOVQorICAgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB1c2VycyBhcmUgZnJlZSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgYGhlbGxvJworICAgICBpcyBhbHNvIGEgZ29vZCBleGFtcGxlIG9mIGEgcHJvZ3JhbSB0aGF0IG1lZXRzIHRoZSBHTlUgY29kaW5nIHN0YW5kYXJkcy4KKyAgICAgTGlrZSBhbnkgdHJ1bHkgdXNlZnVsIHByb2dyYW0sIGBoZWxsbycgY29udGFpbnMgYSBidWlsdC1pbiBtYWlsIHJlYWRlci4KKworICAgKiBgaHAyeHgnICAgKFNyY0NEKQorCisgICAgIEdOVSBgaHAyeHgnIHJlYWRzIEhQLUdMIGZpbGVzLCBkZWNvbXBvc2VzIGFsbCBkcmF3aW5nIGNvbW1hbmRzIGludG8KKyAgICAgZWxlbWVudGFyeSB2ZWN0b3JzLCBhbmQgY29udmVydHMgdGhlbSBpbnRvIGEgdmFyaWV0eSBvZiB2ZWN0b3IgYW5kIHJhc3RlcgorICAgICBvdXRwdXQgZm9ybWF0cy4gIEl0IGlzIGFsc28gYW4gSFAtR0wgcHJldmlld2VyLiAgQ3VycmVudGx5IHN1cHBvcnRlZAorICAgICB2ZWN0b3IgZm9ybWF0cyBpbmNsdWRlIGVuY2Fwc3VsYXRlZCBQb3N0c2NyaXB0LCBVbmlwbGV4IFJHSVAsIE1ldGFmb250LAorICAgICB2YXJpb3VzIHNwZWNpYWwgVGVYLXJlbGF0ZWQgZm9ybWF0cywgYW5kIHNpbXBsaWZpZWQgSFAtR0wgKGxpbmUgZHJhd2luZworICAgICBvbmx5KSBmb3IgaW1wb3J0cy4gIFJhc3RlciBmb3JtYXRzIHN1cHBvcnRlZCBpbmNsdWRlIElNRywgUEJNLCBQQ1gsICYKKyAgICAgSFAtUENMIChpbmNsdWRpbmcgRGVza2pldCAmIERKNXh4QyBzdXBwb3J0KS4gIFByZXZpZXdlcnMgd29yayB1bmRlciBYMTEKKyAgICAgKFVuaXgpLCBPUy8yIChQTSAmIGZ1bGwgc2NyZWVuKSwgJiBNUy1ET1MgKFNWR0EsIFZHQSwgJiBIR0MpLgorCisgICAqIEh5bGFGQVggICAqQWxzbyBzZWUqIGBodHRwOi8vd3d3LnZpeC5jb20vaHlsYWZheC8nICAgKFNyY0NEKQorCisgICAgIEh5bGFGQVggKG9uY2UgbmFtZWQgRmxleEZBWCkgaXMgYSBmYWNzaW1pbGUgc3lzdGVtIGZvciBVbml4IHN5c3RlbXMuICBJdAorICAgICBzdXBwb3J0cyBzZW5kaW5nLCByZWNlaXZpbmcsICYgcG9sbGVkIHJldHJpZXZhbCBvZiBmYWNzaW1pbGUsIGFzIHdlbGwgYXMKKyAgICAgdHJhbnNwYXJlbnQgc2hhcmVkIGRhdGEgdXNlIG9mIHRoZSBtb2RlbS4KKworICAgKiBIeXBlcmJvbGUgICAoU3JjQ0QpCisKKyAgICAgSHlwZXJib2xlLCB3cml0dGVuIGJ5IEJvYiBXZWluZXIgaW4gRW1hY3MgTGlzcCwgaXMgYW4gb3BlbiwgZWZmaWNpZW50LAorICAgICBwcm9ncmFtbWFibGUgaW5mb3JtYXRpb24gbWFuYWdlbWVudCwgYXV0b251bWJlcmVkIG91dGxpbmVyLCAmIGh5cGVydGV4dAorICAgICBzeXN0ZW0sIGludGVuZGVkIGZvciBldmVyeWRheSB3b3JrIG9uIGFueSBwbGF0Zm9ybSBFbWFjcyBydW5zIG9uLgorCisgICAqIElEIFV0aWxzICAgKFNyY0NEKQorCisgICAgIElEIFV0aWxzIGlzIGEgcGFja2FnZSBvZiBzaW1wbGUsIGZhc3QsIGhpZ2gtY2FwYWNpdHksCisgICAgIGxhbmd1YWdlLWluZGVwZW5kZW50IHRvb2xzIHRoYXQgaW5kZXggcHJvZ3JhbSBpZGVudGlmaWVycywgbGl0ZXJhbAorICAgICBudW1iZXJzLCBvciB3b3JkcyBvZiBodW1hbi1yZWFkYWJsZSB0ZXh0LiAgUXVlcmllcyBjYW4gYmUgaXNzdWVkIGZyb20KKyAgICAgdGhlIGNvbW1hbmQtbGluZSwgb3IgZnJvbSB3aXRoaW4gRW1hY3MsIHNlcnZpbmcgYXMgYW4gYXVnbWVudGVkIHRhZ3MKKyAgICAgZmFjaWxpdHkuCisKKyAgICogYGluZGVudCcgICAoU3JjQ0QpCisKKyAgICAgR05VIGBpbmRlbnQnIGZvcm1hdHMgQyBzb3VyY2UgY29kZSBpbnRvIHRoZSBHTlUsIEJTRCwgSyZSLCBvciB5b3VyIG93bgorICAgICBzcGVjaWFsIGluZGVudGF0aW9uIHN0eWxlLiAgR05VIGBpbmRlbnQnIGlzIG1vcmUgcm9idXN0ICYgcHJvdmlkZXMgbW9yZQorICAgICBmdW5jdGlvbmFsaXR5IHRoYW4gb3RoZXIgc3VjaCBwcm9ncmFtcywgaW5jbHVkaW5nIGhhbmRsaW5nIEMrKyBjb21tZW50cy4KKyAgICAgSXQgcnVucyBvbiBVbml4LCBET1MsIFZNUyBhbmQgQVRBUkkgc3lzdGVtcy4KKworICAgICBUaGUgbmV4dCB2ZXJzaW9uIHdpbGwgYWxzbyBmb3JtYXQgQysrIHNvdXJjZSBjb2RlLiAgQSBKYXZhIHZlcnNpb24gbWF5CisgICAgIGJlIGNvbnNpZGVyZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgKiBJbmV0dXRpbHMgICAoU3JjQ0QpCisKKyAgICAgSW5ldHV0aWxzIGhhcyBjb21tb24gbmV0d29ya2luZyB1dGlsaXRpZXMgJiBzZXJ2ZXJzLgorCisgICAgIFRoaXMgcmVsZWFzZSBpcyBtYWlubHkgc3VwcG9ydCB0aGUgR05VIEh1cmQsIHdoaWNoIGlzIHNvdXJjZSBjb21wYXRpYmxlCisgICAgIHdpdGggQlNEIGluIG1hbnkgd2F5cywgJiB3aWxsIHByb2JhYmx5IG9ubHkgd29yayBvbiBzeXN0ZW1zIHRoYXQgYXJlCisgICAgIHNpbWlsYXJseSBjb21wYXRpYmxlLgorCisgICAqIElzcGVsbCAgIChTcmNDRCkKKworICAgICBJc3BlbGwgaXMgYW4gaW50ZXJhY3RpdmUgc3BlbGwgY2hlY2tlciB0aGF0IHN1Z2dlc3RzICJuZWFyIG1pc3NlcyIgdG8KKyAgICAgcmVwbGFjZSB1bnJlY29nbml6ZWQgd29yZHMuICBTeXN0ZW0gJiB1c2VyLW1haW50YWluZWQgZGljdGlvbmFyaWVzIGZvcgorICAgICBtdWx0aXBsZSBsYW5ndWFnZXMgY2FuIGJlIHVzZWQuICBTdGFuZGFsb25lICYgRW1hY3MgaW50ZXJmYWNlcyBhcmUKKyAgICAgYXZhaWxhYmxlLgorCisgICAqIEpBQ0FMICAgKk5vdCBhdmFpbGFibGUgZnJvbSB0aGUgRlNGIGV4Y2VwdCBieSBGVFAqCisKKyAgICAgSkFDQUwgaXMgYSBzeW1ib2xpYyBtYXRoZW1hdGljcyBzeXN0ZW0gZm9yIHRoZSBtYW5pcHVsYXRpb24gJgorICAgICBzaW1wbGlmaWNhdGlvbiBvZiBhbGdlYnJhaWMgZXF1YXRpb25zICYgZXhwcmVzc2lvbnMuICBJdCBpcyB3cml0dGVuIGluCisgICAgIFNjaGVtZSB1c2luZyB0aGUgU0xJQiBwb3J0YWJsZSBTY2hlbWUgTGlicmFyeS4gIEpBQ0FMIGNvbWVzIHdpdGggU0NNLCBhbgorICAgICBJRUVFIFAxMTc4ICYgUjRSUyBjb21wbGlhbnQgU2NoZW1lIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4gaW4gQy4gIFNDTSBydW5zCisgICAgIG9uIEFtaWdhLCBBdGFyaS1TVCwgTWFjT1MsIE1TLURPUywgT1MvMiwgTk9TL1ZFLCBVbmljb3MsIFZNUywgVW5peCwgJgorICAgICBzaW1pbGFyIHN5c3RlbXMuCisKKyAgICAgVGhlIEZTRiBpcyBub3QgZGlzdHJpYnV0aW5nIEpBQ0FMIG9uIGFueSBwaHlzaWNhbCBtZWRpYS4gIFlvdSBjYW4gRlRQIGl0CisgICAgIG9yIGdldCBpdCBmcm9tIHRoZSBXZWIgc2l0ZSBiZWxvdy4gIERvY3VtZW50YXRpb24gaXMgYXQKKyAgICAgYGh0dHA6Ly93d3ctc3dpc3MuYWkubWl0LmVkdS9+amFmZmVyL0pBQ0FMLmh0bWwnLgorCisgICAqIEthcm1hICAgKFNyY0NEKQorCisgICAgIEthcm1hIGlzIGEgc2lnbmFsIGFuZCBpbWFnZSBwcm9jZXNzaW5nIGxpYnJhcnkgYW5kIHZpc3VhbGl6YXRpb24gdG9vbGtpdAorICAgICB0aGF0IHByb3ZpZGVzIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9ucywgYXV0aGVudGljYXRpb24sIGdyYXBoaWNzCisgICAgIGRpc3BsYXksIGFuZCB1c2VyIGludGVyZmFjZSB0byBhbmQgbWFuaXB1bGF0aW9uIG9mIHRoZSBLYXJtYSBuZXR3b3JrCisgICAgIGRhdGEgc3RydWN0dXJlLiBTZXZlcmFsIGZvcmVpZ24gZGF0YSBmb3JtYXRzIGFyZSBhbHNvIHN1cHBvcnRlZC4gIEthcm1hCisgICAgIGNvbWVzIHBhY2thZ2VkIHdpdGggYSBudW1iZXIgb2YgZ2VuZXJpYyB2aXN1YWxpemF0aW9uIHRvb2xzIGFuZCBzb21lCisgICAgIGFzdHJvbm9teS1zcGVjaWZpYyB0b29scy4KKworICAgKiBgbGVzcycgICAoU3JjQ0QpCisKKyAgICAgYGxlc3MnIGlzIGEgZGlzcGxheSBwYWdpbmF0b3Igc2ltaWxhciB0byBgbW9yZScgYW5kIGBwZycsIGJ1dCB3aXRoCisgICAgIHZhcmlvdXMgZmVhdHVyZXMgKHN1Y2ggYXMgdGhlIGFiaWxpdHkgdG8gc2Nyb2xsIGJhY2t3YXJkcykgdGhhdCBtb3N0CisgICAgIHBhZ2VycyBsYWNrLgorCisgICAqIEx5bnggICAqQWxzbyBzZWUqIGBodHRwOi8vd3d3LmNjLnVrYW5zLmVkdS9hYm91dF9seW54JyAgKFNyY0NEKQorCisgICAgIEx5bnggaXMgYSB0ZXh0LW9ubHkgV29ybGQgV2lkZSBXZWIgYnJvd3NlciBmb3IgdGhvc2UgcnVubmluZworICAgICBjaGFyYWN0ZXItb25seSAoImN1cnNvci1hZGRyZXNzYWJsZSIpIHRlcm1pbmFscyBvciB0ZXJtaW5hbCBlbXVsYXRvcnMuCisKKyAgICogYG00JyAgIChTcmNDRCkKKworICAgICBHTlUgYG00JyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhZGl0aW9uYWwgVW5peCBtYWNybyBwcm9jZXNzb3IuCisgICAgIEl0IGlzIG1vc3RseSBTVlI0IGNvbXBhdGlibGUsIGFsdGhvdWdoIGl0IGhhcyBzb21lIGV4dGVuc2lvbnMgKGUuZy4sCisgICAgIGhhbmRsaW5nIG1vcmUgdGhhbiA5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBtYWNyb3MpLiAgYG00JyBhbHNvIGhhcworICAgICBidWlsdC1pbiBmdW5jdGlvbnMgZm9yIGluY2x1ZGluZyBmaWxlcywgcnVubmluZyBzaGVsbCBjb21tYW5kcywgZG9pbmcKKyAgICAgYXJpdGhtZXRpYywgZXRjLgorCisgICAqIGBtYWtlJyAgIChCaW5DRCwgU3JjQ0QpIFtGU0ZtYW5dCisKKyAgICAgR05VIGBtYWtlJyBzdXBwb3J0cyBQT1NJWCAxMDAzLjIgYW5kIGhhcyBhbGwgYnV0IGEgZmV3IG9ic2N1cmUgZmVhdHVyZXMKKyAgICAgb2YgdGhlIEJTRCBhbmQgU3lzdGVtIFYgdmVyc2lvbnMgb2YgYG1ha2UnLCBhbmQgcnVucyBvbiBNUy1ET1MsCisgICAgIEFtaWdhRE9TLCBWTVMsICYgV2luZG93cyBOVCBvciA5NSwgYXMgd2VsbCBhcyBhbGwgVW5peC1jb21wYXRpYmxlCisgICAgIHN5c3RlbXMuICBHTlUgZXh0ZW5zaW9ucyBpbmNsdWRlIGxvbmcgb3B0aW9ucywgcGFyYWxsZWwgY29tcGlsYXRpb24sCisgICAgIGZsZXhpYmxlIGltcGxpY2l0IHBhdHRlcm4gcnVsZXMsIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiwgJiBwb3dlcmZ1bCB0ZXh0CisgICAgIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuICBTb3VyY2UgZm9yIHRoZSBgTWFrZSBNYW51YWwnIGNvbWVzIHdpdGggdGhlCisgICAgIHByb2dyYW0gKCpub3RlIERvY3VtZW50YXRpb246Oi4pLgorCisgICAqIE1hbmRlbFNwYXduICAgKFNyY0NEKQorCisgICAgIEEgcGFyYWxsZWwgTWFuZGVsYnJvdCBnZW5lcmF0aW9uIHByb2dyYW0gZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0uCisKKyAgICogTWF4aW1hICAgKFNyY0NEKQorCisgICAgIE1heGltYSBpcyBhIENvbW1vbiBMaXNwIGltcGxlbWVudGF0aW9uIG9mIE1JVCdzIE1hY3N5bWEgc3lzdGVtIGZvcgorICAgICBjb21wdXRlciBiYXNlZCBhbGdlYnJhLgorCisgICAqIE1ldGEtSFRNTCAgIChTcmNDRCkKKworICAgICA8TWV0YS1IVE1MPiBpcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3Igd29ya2luZworICAgICB3aXRoaW4gdGhlIFdvcmxkIFdpZGUgV2ViIGVudmlyb25tZW50LiAgQWx0aG91Z2ggaXQgaXMgYSBnZW51aW5lCisgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlLCBzdWl0YWJsZSBmb3IgbGFyZ2Utc2NhbGUgc3ltYm9saWMgbWFuaXB1bGF0aW9uLCBpdAorICAgICBwcm92aWRlcyB0aGUgbW9zdCBjb21tb25seSB3YW50ZWQgV2ViIGZ1bmN0aW9uYWxpdHkgYXMgYnVpbHQtaW4KKyAgICAgcHJpbWl0aXZlcywgc28geW91IGRvbid0IGhhdmUgdG8gd3JpdGUgdGhlbS4KKworICAgKiBNaWRuaWdodCBDb21tYW5kZXIgKGBtYycpICAgKFNyY0NEKQorCisgICAgIFRoZSBNaWRuaWdodCBDb21tYW5kZXIgaXMgYSB1c2VyIGZyaWVuZGx5ICYgY29sb3JmdWwgVW5peCBmaWxlIG1hbmFnZXIgJgorICAgICBzaGVsbCwgdXNlZnVsIHRvIG5vdmljZSAmIGd1cnUgYWxpa2UuICBJdCBoYXMgYSBidWlsdC1pbiB2aXJ0dWFsIGZpbGUKKyAgICAgc3lzdGVtIHRoYXQgbWFuaXB1bGF0ZXMgZmlsZXMgaW5zaWRlIHRhciBmaWxlcyBvciBmaWxlcyBvbiByZW1vdGUKKyAgICAgbWFjaGluZXMgdXNpbmcgdGhlIEZUUCBwcm90b2NvbC4gIFRoaXMgbWVjaGFuaXNtIGlzIGV4dGVuZGFibGUgd2l0aAorICAgICBleHRlcm5hbCBVbml4IHByb2dyYW1zLgorCisgICAqIE1pc2NlbGxhbmVvdXMgRmlsZXMgRGlzdHJpYnV0aW9uICAgKFNyY0NEKQorCisgICAgIFRoZSBHTlUgTWlzY2VsbGFuZW91cyBGaWxlcyBhcmUgbm9uLWNydWNpYWwgZmlsZXMgdGhhdCBhcmUgY29tbW9uIG9uCisgICAgIHZhcmlvdXMgc3lzdGVtcywgaW5jbHVkaW5nIHdvcmQgbGlzdHMsIGFpcnBvcnQgY29kZXMsIFpJUCBjb2RlcyBldGMuCisKKyAgICogYG1raXNvZnMnICAgKFNyY0NEKQorCisgICAgIGBta2lzb2ZzJyBpcyBhIHByZS1tYXN0ZXJpbmcgcHJvZ3JhbSB0byBnZW5lcmF0ZSBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbS4KKyAgICAgSXQgdGFrZXMgYSBzbmFwc2hvdCBvZiBhIGRpcmVjdG9yeSB0cmVlLCBhbmQgbWFrZXMgYSBiaW5hcnkgaW1hZ2Ugd2hpY2gKKyAgICAgY29ycmVzcG9uZHMgdG8gYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gd2hlbiB3cml0dGVuIHRvIGEgYmxvY2sgZGV2aWNlLgorCisgICAgIEl0IGNhbiBhbHNvIGdlbmVyYXRlIHRoZSBTeXN0ZW0gVXNlIFNoYXJpbmcgUHJvdG9jb2wgcmVjb3JkcyBvZiB0aGUgUm9jaworICAgICBSaWRnZSBJbnRlcmNoYW5nZSBQcm90b2NvbCAodXNlZCB0byBmdXJ0aGVyIGRlc2NyaWJlIHRoZSBmaWxlcyBpbiBhbiBJU08KKyAgICAgOTY2MCBmaWxlIHN5c3RlbSB0byBhIFVuaXggaG9zdDsgaXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gc3VjaCBhcyBsb25nZXIKKyAgICAgZmlsZW5hbWVzLCB1aWQvZ2lkLCBwZXJtaXNzaW9ucywgYW5kIGRldmljZSBub2RlcykuCisKKyAgICAgVGhlIGBta2lzb2ZzJyBwcm9ncmFtIGlzIG9mdGVuIHVzZWQgd2l0aCBgY2R3cml0ZScuICBUaGUgYGNkd3JpdGUnCisgICAgIHByb2dyYW0gd29ya3MgYnkgdGFraW5nIHRoZSBpbWFnZSB0aGF0IGBta2lzb2ZzJyBnZW5lcmF0ZXMgYW5kIGRyaXZpbmcgYQorICAgICBjZHdyaXRlciBkcml2ZSB0byBhY3R1YWxseSBidXJuIHRoZSBkaXNrLiAgYGNkd3JpdGUnIHdvcmtzIHVuZGVyCisgICAgIEdOVS9MaW51eCwgYW5kIHN1cHBvcnRzIHBvcHVsYXIgY2R3cml0ZXIgZHJpdmVzLiAgT2xkZXIgdmVyc2lvbnMgb2YKKyAgICAgYGNkd3JpdGUnIHdlcmUgaW5jbHVkZWQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBgbWtpc29mcyc7CisgICAgIGBzdW5zaXRlLnVuYy5lZHUnIGhhcyB0aGUgbGF0ZXN0IHZlcnNpb246CisgICAgIGAvcHViL0xpbnV4L3V0aWxzL2Rpc2stbWFuYWdlbWVudC9jZHdyaXRlLTIuMC50YXIuZ3onLgorCisgICAqIGBtdG9vbHMnICAgKFNyY0NEKQorCisgICAgIGBtdG9vbHMnIGlzIGEgc2V0IG9mIHB1YmxpYyBkb21haW4gcHJvZ3JhbXMgdG8gYWxsb3cgVW5peCBzeXN0ZW1zIHRvCisgICAgIHJlYWQsIHdyaXRlLCBhbmQgbWFuaXB1bGF0ZSBmaWxlcyBvbiBhbiBNUy1ET1MgZmlsZSBzeXN0ZW0gKHVzdWFsbHkgYQorICAgICBkaXNrZXR0ZSkuCisKKyAgICogTVVMRSAgIChTcmNDRCkKKworICAgICBNVUxFIGlzIGEgTVVMdGlsaW5ndWFsIEVuaGFuY2VtZW50IHRvIEdOVSBFbWFjcy4gIE1VTEUgdGV4dCBidWZmZXJzIGNhbgorICAgICBjb250YWluIGEgbWl4IG9mIGNoYXJhY3RlcnMgZnJvbSBtYW55IGxhbmd1YWdlcyBpbmNsdWRpbmc6IEphcGFuZXNlLAorICAgICBDaGluZXNlLCBLb3JlYW4sIFZpZXRuYW1lc2UsIFRoYWksIG1vZGVybiBFdXJvcGVhbiBsYW5ndWFnZXMgKGluY2x1ZGluZworICAgICBHcmVlayAmIFJ1c3NpYW4pLCBBcmFiaWMsICYgSGVicmV3LiAgTVVMRSBhbHNvIHByb3ZpZGVzIGlucHV0IG1ldGhvZHMKKyAgICAgZm9yIGFsbCBvZiB0aGVtLiAgTVVMRSBpcyBiZWluZyBtZXJnZWQgaW50byBHTlUgRW1hY3MuICAqTm90ZSBHTlUgJgorICAgICBPdGhlciBGcmVlIFNvZnR3YXJlIGluIEphcGFuOjosIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IE1VTEUuCisKKyAgICogYG5jdXJzZXMnICAgKFNyY0NEKQorCisgICAgIGBuY3Vyc2VzJyBpbXBsZW1lbnRzIHRoZSBVbml4IGBjdXJzZXMnIEFQSSBmb3IgZGV2ZWxvcGluZyBzY3JlZW4tYmFzZWQKKyAgICAgcHJvZ3JhbXMgdGhhdCBhcmUgdGVybWluYWwgaW5kZXBlbmRlbnQuICBJdCBpcyBub3QgbWVyZWx5IGFuIGVtdWxhdGlvbgorICAgICBvZiBvbGQgKEJTRCkgY3Vyc2VzL3Rlcm1jYXAsIGJ1dCBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggU1ZSNAorICAgICBjdXJzZXMvdGVybWluZm8uICBJdCBpbmNsdWRlcyBjb2xvciwgbXVsdGlwbGUtaGlnaGxpZ2h0LCAmIHh0ZXJtCisgICAgIG1vdXNlLWV2ZW50IHN1cHBvcnQuCisKKyAgICogTmV0SGFjayAgIChTcmNDRCkKKworICAgICBOZXRIYWNrIGlzIGEgUm9ndWUtbGlrZSBhZHZlbnR1cmUgZ2FtZSBzdXBwb3J0aW5nIGNoYXJhY3RlciAmIFggZGlzcGxheXMuCisKKyAgICogTklIIENsYXNzIExpYnJhcnkgICAoU3JjQ0QpCisKKyAgICAgVGhlIE5JSCBDbGFzcyBMaWJyYXJ5IGlzIGEgc2V0IG9mIEMrKyBjbGFzc2VzIChzaW1pbGFyIHRvCisgICAgIFNtYWxsdGFsay04MCdzKSB3cml0dGVuIGluIEMrKyBieSBLZWl0aCBHb3JsZW4gb2YgdGhlIE5hdGlvbmFsIEluc3RpdHV0ZXMKKyAgICAgb2YgSGVhbHRoIChOSUgpLgorCisgICAqIGBudmknICAgKFNyY0NEKQorCisgICAgIGBudmknIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZXgnL2B2aScgVW5peCBlZGl0b3IuICBJdCBoYXMgYWxsIHRoZQorICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBvcmlnaW5hbCBgZXgnL2B2aScsIGV4Y2VwdCBgb3BlbicgbW9kZSAmIHRoZSBgbGlzcCcKKyAgICAgZWRpdCBvcHRpb24uICBFbmhhbmNlbWVudHMgaW5jbHVkZSBtdWx0aXBsZSBidWZmZXJzLCBjb21tYW5kLWxpbmUKKyAgICAgZWRpdGluZyAmIHBhdGggY29tcGxldGlvbiwgaW50ZWdyYXRlZCBQZXJsNSAmIFRjbCBzY3JpcHRpbmcgbGFuZ3VhZ2VzLAorICAgICBDc2NvcGUgc3VwcG9ydCAmIHRhZyBzdGFja3MsIDgtYml0IGRhdGEgc3VwcG9ydCwgaW5maW5pdGUgZmlsZS9saW5lCisgICAgIGxlbmd0aHMsIGluZmluaXRlIHVuZG8sIGxhbmd1YWdlIGNhdGFsb2dzLCBpbmNyZW1lbnRhbCBzZWFyY2gsIGV4dGVuZGVkCisgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGFuZCBzZWN1cml0eSBmaXhlcy4gIEl0IHVzZXMgQXV0b2NvbmYgZm9yCisgICAgIGNvbmZpZ3VyYXRpb24gYW5kIHJ1bnMgb24gYW55IFVuaXgtbGlrZSBzeXN0ZW0uCisKKyAgICogT2FrbGlzcCAgICAoU3JjQ0QpCisKKyAgICAgT2FrbGlzcCBpcyBhIGZhc3QsIHBvcnRhYmxlLCBvYmplY3Qtb3JpZW50ZWQgU2NoZW1lIHdpdGggZmlyc3QgY2xhc3MKKyAgICAgdHlwZXMuCisKKyAgICogT2JqZWN0aXZlLUMgTGlicmFyeSAgIChTcmNDRCkKKworICAgICBPdXIgT2JqZWN0aXZlLUMgQ2xhc3MgTGlicmFyeSAoYGdzdGVwLWJhc2UudGFyLmd6JywgYGxpYmdudXN0ZXAtYmFzZScpCisgICAgIGhhcyBnZW5lcmFsLXB1cnBvc2UsIG5vbi1ncmFwaGljYWwgT2JqZWN0aXZlLUMgb2JqZWN0cyB3cml0dGVuIGJ5IEFuZHJldworICAgICBNY0NhbGx1bSAmIG90aGVycy4gIEl0IGluY2x1ZGVzIGNvbGxlY3Rpb24gY2xhc3NlcyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgZ3JvdXBzIG9mIG9iamVjdHMsIEkvTyBzdHJlYW1zLCBjb2RlcnMgZm9yIGZvcm1hdHRpbmcgb2JqZWN0cyAmIEMgdHlwZXMKKyAgICAgdG8gc3RyZWFtcywgcG9ydHMgZm9yIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiwgZGlzdHJpYnV0ZWQgb2JqZWN0cworICAgICAocmVtb3RlIG9iamVjdCBtZXNzYWdpbmcpLCBzdHJpbmcgY2xhc3NlcywgaW52b2NhdGlvbnMsIG5vdGlmaWNhdGlvbnMsCisgICAgIGV2ZW50IGxvb3BzLCB0aW1lcnMsIGV4Y2VwdGlvbnMsIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMsICYKKyAgICAgbW9yZS4gIEl0IGhhcyB0aGUgYmFzZSBjbGFzc2VzIGZvciB0aGUgR05Vc3RlcCBwcm9qZWN0OyBhbGwgYnV0IGEgZmV3IG9mCisgICAgIHRoZW0gaGF2ZSBhbHJlYWR5IGJlZW4gd3JpdHRlbi4gIFNlbmQgcXVlcmllcyAmIGJ1Z3MgdG8KKyAgICAgYG1jY2FsbHVtQGdudS5haS5taXQuZWR1Jy4gIFNlZSAiR05Vc3RlcCIgaW4gKk5vdGUgRm9ydGhjb21pbmcgR05Vczo6LgorCisgICAqIE9CU1QgICAoU3JjQ0QpCisKKyAgICAgT0JTVCBpcyBhIHBlcnNpc3RlbnQgb2JqZWN0IG1hbmFnZW1lbnQgc3lzdGVtIHdpdGggYmluZGluZ3MgdG8gQysrLgorICAgICBPQlNUIHN1cHBvcnRzIGluY3JlbWVudGFsIGxvYWRpbmcgb2YgbWV0aG9kcy4gIEl0cyBncmFwaGljYWwgdG9vbHMKKyAgICAgcmVxdWlyZSB0aGUgWCBXaW5kb3cgU3lzdGVtLiAgSXQgZmVhdHVyZXMgYSBoYW5kcy1vbiB0dXRvcmlhbCBpbmNsdWRpbmcKKyAgICAgc2FtcGxlIHByb2dyYW1zLiAgSXQgY29tcGlsZXMgd2l0aCBHKyssIGFuZCBzaG91bGQgaW5zdGFsbCBlYXNpbHkgb24KKyAgICAgbW9zdCBVbml4IHBsYXRmb3Jtcy4KKworICAgKiBPY3RhdmUgICAqQWxzbyBzZWUqIGBodHRwOi8vd3d3LmNoZS53aXNjLmVkdS9vY3RhdmUnICAgKFNyY0NEKQorCisgICAgIE9jdGF2ZSBkb2VzIGFyaXRobWV0aWMgZm9yIHJlYWwgYW5kIGNvbXBsZXggc2NhbGFycyBhbmQgbWF0cmljZXMsIHNvbHZlcworICAgICBzZXRzIG9mIG5vbmxpbmVhciBhbGdlYnJhaWMgZXF1YXRpb25zLCBpbnRlZ3JhdGVzIHN5c3RlbXMgb2Ygb3JkaW5hcnkKKyAgICAgZGlmZmVyZW50aWFsICYgZGlmZmVyZW50aWFsLWFsZ2VicmFpYyBlcXVhdGlvbnMsIGFuZCBpbnRlZ3JhdGVzCisgICAgIGZ1bmN0aW9ucyBvdmVyIGZpbml0ZSAmIGluZmluaXRlIGludGVydmFscy4gIFR3by0gJiB0aHJlZS1kaW1lbnNpb25hbAorICAgICBwbG90dGluZyBpcyBhdmFpbGFibGUgdXNpbmcgYGdudXBsb3QnLgorCisgICAgIFZlcnNpb24gMi4wIG9mIE9jdGF2ZSB3YXMgcmVsZWFzZWQgaW4gRGVjZW1iZXIgJzk2LiAgSXQgaW5jbHVkZXMgc3VwcG9ydAorICAgICBmb3IgZHluYW1pY2FsbHkgbGlua2VkIGZ1bmN0aW9ucywgdXNlci1kZWZpbmVkIGRhdGEgdHlwZXMsIG1hbnkgbmV3CisgICAgIGZ1bmN0aW9ucywgJiBhIGNvbXBsZXRlbHkgcmV2aXNlZCBtYW51YWwuICBPY3RhdmUgd29ya3Mgb24gbW9zdCBVbml4CisgICAgIHN5c3RlbXMgJiBPUy8yLiAgQSBwb3J0IHRvIFdpbmRvd3MgTlQvOTUgaXMgdW5kZXJ3YXkuCisKKyAgICogT2xlbyAgICAgKFNyY0NEKQorCisgICAgIE9sZW8gaXMgYSBzcHJlYWRzaGVldCBwcm9ncmFtIChiZXR0ZXIgZm9yIHlvdSB0aGFuIHRoZSBtb3JlIGV4cGVuc2l2ZQorICAgICBzcHJlYWRzaGVldHMpLiAgSXQgc3VwcG9ydHMgdGhlIFggV2luZG93IFN5c3RlbSBhbmQgY2hhcmFjdGVyLWJhc2VkCisgICAgIHRlcm1pbmFscywgYW5kIGNhbiBvdXRwdXQgRW1iZWRkZWQgUG9zdHNjcmlwdCByZW5kaXRpb25zIG9mIHNwcmVhZHNoZWV0cy4KKyAgICAgS2V5YmluZGluZ3Mgc2hvdWxkIGJlIGZhbWlsaWFyIHRvIEVtYWNzIHVzZXJzIGFuZCBhcmUgY29uZmlndXJhYmxlLgorICAgICBPbGVvIHN1cHBvcnRzIG11bHRpcGxlIHZhcmlhYmxlLXdpZHRoIGZvbnRzIHdoZW4gdXNlZCB1bmRlciB0aGUgWCBXaW5kb3cKKyAgICAgU3lzdGVtIG9yIG91dHB1dHRpbmcgdG8gUG9zdHNjcmlwdCBkZXZpY2VzLgorCisgICAqIGBwMmMnICAgKFNyY0NEKQorCisgICAgIGBwMmMnIGlzIERhdmUgR2lsbGVzcGllJ3MgUGFzY2FsLXRvLUMgdHJhbnNsYXRvci4gIEl0IGlucHV0cyBtYW55CisgICAgIGRpYWxlY3RzIChIUCwgSVNPLCBUdXJibywgVkFYLCBldGMuKSAgJiBnZW5lcmF0ZXMgcmVhZGFibGUsCisgICAgIG1haW50YWluYWJsZSwgcG9ydGFibGUgQy4KKworICAgKiBgcGF0Y2gnICAgKFNyY0NEKQorCisgICAgIGBwYXRjaCcgaXMgb3VyIHZlcnNpb24gb2YgTGFycnkgV2FsbCdzIHByb2dyYW0gdG8gdGFrZSBgZGlmZicncyBvdXRwdXQKKyAgICAgYW5kIGFwcGx5IHRob3NlIGRpZmZlcmVuY2VzIHRvIGFuIG9yaWdpbmFsIGZpbGUgdG8gZ2VuZXJhdGUgdGhlIG1vZGlmaWVkCisgICAgIHZlcnNpb24uCisKKyAgICogUENMICAgKFNyY0NEKQorCisgICAgIFBDTCBpcyBhIGZyZWUgaW1wbGVtZW50YXRpb24gb2YgYSBsYXJnZSBzdWJzZXQgb2YgQ0xPUywgdGhlIENvbW1vbiBMaXNwCisgICAgIE9iamVjdCBTeXN0ZW0uICBJdCBydW5zIHVuZGVyIGJvdGggR0NMIGFuZCBDTElTUCwgbWVudGlvbmVkIGFib3ZlLgorCisgICAqIGBwZXJsJyAgIChTcmNDRCkKKworICAgICBMYXJyeSBXYWxsJ3MgYHBlcmwnIGNvbWJpbmVzIHRoZSBmZWF0dXJlcyAmIGNhcGFiaWxpdGllcyBvZiBDLCBgc2VkJywKKyAgICAgYGF3aycsICYgYHNoJywgYW5kIHByb3ZpZGVzIGludGVyZmFjZXMgdG8gdGhlIFVuaXggc3lzdGVtIGNhbGxzICYgbWFueSBDCisgICAgIGxpYnJhcnkgcm91dGluZXMuCisKKyAgICogYHBpbmUnICAgKkFsc28gKm5vdGUgQmFkIE5ld3MgYW5kIEdvb2QgTmV3cyBhYm91dCBQaW5lOjouKiAgIChTcmNDRCkKKworICAgICBgcGluZScgaXMgYSBmcmllbmRseSBtZW51LWRyaXZlbiBlbGVjdHJvbmljIG1haWwgbWFuYWdlciBhbmQgdXNlcgorICAgICBpbnRlcmZhY2UuCisKKyAgICogYHB0eCcgICAgKkFsc28gKm5vdGUgRm9ydGhjb21pbmcgR05Vczo6LiogICAoU3JjQ0QpCisKKyAgICAgR05VIGBwdHgnIGlzIG91ciB2ZXJzaW9uIG9mIHRoZSB0cmFkaXRpb25hbCBwZXJtdXRlZCBpbmRleCBnZW5lcmF0b3IuCisgICAgIEl0IGhhbmRsZXMgbXVsdGlwbGUgaW5wdXQgZmlsZXMgYXQgb25jZSwgaGFzIFRlWCBjb21wYXRpYmxlIG91dHB1dCwgJgorICAgICBvdXRwdXRzIHJlYWRhYmxlICJLV0lDIiAoS2V5V29yZHMgSW4gQ29udGV4dCkgaW5kZXhlcyB3aXRob3V0IHVzaW5nCisgICAgIGBucm9mZicuCisKKyAgICAgSXQgZG9lcyBub3QgeWV0IGhhbmRsZSBpbnB1dCBmaWxlcyB0aGF0IGRvIG5vdCBmaXQgaW4gbWVtb3J5IGFsbCBhdCBvbmNlLgorCisgICAqIGByYycgICAoU3JjQ0QpCisKKyAgICAgYHJjJyBpcyBhIHNoZWxsIHRoYXQgZmVhdHVyZXMgYSBDLWxpa2Ugc3ludGF4IChtdWNoIG1vcmUgc28gdGhhbiBgY3NoJykKKyAgICAgYW5kIGZhciBjbGVhbmVyIHF1b3RpbmcgcnVsZXMgdGhhbiB0aGUgQyBvciBCb3VybmUgc2hlbGxzLiAgSXQncworICAgICBpbnRlbmRlZCB0byBiZSB1c2VkIGludGVyYWN0aXZlbHksIGJ1dCBpcyBhbHNvIGdyZWF0IGZvciB3cml0aW5nCisgICAgIHNjcmlwdHMuICBJdCBpbnNwaXJlZCB0aGUgc2hlbGwgYGVzJy4KKworICAgKiBSQ1MgICAoU3JjQ0QpCisKKyAgICAgUkNTLCB0aGUgUmV2aXNpb24gQ29udHJvbCBTeXN0ZW0sIGlzIHVzZWQgZm9yIHZlcnNpb24gY29udHJvbCAmCisgICAgIG1hbmFnZW1lbnQgb2Ygc29mdHdhcmUgcHJvamVjdHMuICBVc2VkIHdpdGggR05VIGBkaWZmJywgUkNTIGNhbiBoYW5kbGUKKyAgICAgYmluYXJ5IGZpbGVzICg4LWJpdCBkYXRhLCBleGVjdXRhYmxlcywgb2JqZWN0IGZpbGVzLCBldGMpLiAgUkNTIG5vdworICAgICBjb25mb3JtcyB0byBHTlUgY29uZmlndXJhdGlvbiBzdGFuZGFyZHMgJiB0byBQT1NJWCAxMDAzLjFiLTE5OTMuICBBbHNvCisgICAgIHNlZSB0aGUgQ1ZTIGl0ZW0gYWJvdmUuCisKKyAgICogYHJlY29kZScgICAgKkFsc28gKm5vdGUgRm9ydGhjb21pbmcgR05Vczo6LiogICAoU3JjQ0QpCisKKyAgICAgR05VIGByZWNvZGUnIGNvbnZlcnRzIGZpbGVzIGJldHdlZW4gY2hhcmFjdGVyIHNldHMgYW5kIHVzYWdlcy4gIFdoZW4KKyAgICAgZXhhY3QgdHJhbnNsaXRlcmF0aW9ucyBhcmUgbm90IHBvc3NpYmxlLCBpdCBtYXkgZGVsZXRlIHRoZSBvZmZlbmRpbmcKKyAgICAgY2hhcmFjdGVycyBvciBmYWxsIGJhY2sgb24gYXBwcm94aW1hdGlvbnMuICBUaGlzIHByb2dyYW0gcmVjb2duaXplcyBvcgorICAgICBvdXRwdXRzIG5lYXJseSAxNTAgZGlmZmVyZW50IGNoYXJhY3RlciBzZXRzIGFuZCBpcyBhYmxlIHRvIHRyYW5zbGl0ZXJhdGUKKyAgICAgZmlsZXMgYmV0d2VlbiBhbG1vc3QgYW55IHBhaXIuICBNb3N0IFJGQyAxMzQ1IGNoYXJhY3RlciBzZXRzIGFyZQorICAgICBzdXBwb3J0ZWQuCisKKyAgICogYHJlZ2V4JyAgIChTcmNDRCkKKworICAgICBUaGUgR05VIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5IHN1cHBvcnRzIFBPU0lYLjIsIGV4Y2VwdCBmb3IKKyAgICAgaW50ZXJuYXRpb25hbGl6YXRpb24gZmVhdHVyZXMuICBJdCBpcyBpbmNsdWRlZCBpbiBtYW55IEdOVSBwcm9ncmFtcyB3aGljaAorICAgICBkbyByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgJiBpcyBhdmFpbGFibGUgc2VwYXJhdGVseS4gIEFuIGFsdGVybmF0ZQorICAgICByZWd1bGFyIGV4cHJlc3Npb24gcGFja2FnZSwgYHJ4JywgaXMgZmFzdGVyIHRoYW4gYHJlZ2V4JyBpbiBtYW55IGNhc2VzOworICAgICB3ZSB3ZXJlIHBsYW5uaW5nIHRvIHJlcGxhY2UgYHJlZ2V4JyB3aXRoIGByeCcsIGJ1dCBpdCBpcyBub3QgY2VydGFpbgorICAgICB0aGlzIHdpbGwgaGFwcGVuLgorCisgICAqIFJveGVuICAgKFNyY0NEKQorCisgICAgIFJveGVuIGlzIGEgbW9kdWxhcml6ZWQsIG9iamVjdC1vcmllbnRlZCwgbm9uLWZvcmtpbmcgV29ybGQgV2lkZSBXZWIKKyAgICAgc2VydmVyIHdpdGggaGlnaCBwZXJmb3JtYW5jZSBhbmQgdGhyb3VnaHB1dC4gIEl0IHdhcyBmb3JtZXJseSBuYW1lZAorICAgICBTcGlubmVyLCBidXQgd2FzIHJlbmFtZWQgZm9yIHRyYWRlbWFyayByZWFzb25zLgorCisgICAqIGByeCcgICAoU3JjQ0QpCisKKyAgICAgVG9tIExvcmQgaGFzIHdyaXR0ZW4gYHJ4JywgYSBuZXcgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkgd2hpY2ggaXMKKyAgICAgZmFzdGVyIHRoYW4gdGhlIG9sZGVyIEdOVSBgcmVnZXgnIGxpYnJhcnkuICBJdCBpcyBiZWluZyBkaXN0cmlidXRlZCB3aXRoCisgICAgIGBzZWQnLiAgYHJ4JyBpcyBhbHNvIGFuIGluc3RhbGxhdGlvbiBvcHRpb24gZm9yIGBmaWxldXRpbHMnLCBgaWQtdXRpbHMnLAorICAgICBhbmQgYHRleHR1dGlscycsIGFuZCBtYXliZSBmb3IgZnV0dXJlIHZlcnNpb25zIG9mIGBjcGlvJywgYG00JyBhbmQgYHB0eCcuCisKKyAgICogU0FPaW1hZ2UgICAoU3JjQ0QpCisKKyAgICAgU0FPaW1hZ2UgaXMgYW4gWC1iYXNlZCBhc3Ryb25vbWljYWwgaW1hZ2Ugdmlld2VyLiAgSXQgcmVhZHMgYXJyYXkgZGF0YQorICAgICBpbWFnZXMsIHdoaWNoIG1heSBiZSBpbiBzcGVjaWZpYyBmb3JtYXRzLCBhbmQgZGlzcGxheXMgdGhlbSB3aXRoIGEKKyAgICAgcHNldWRvY29sb3IgY29sb3JtYXAuICBUaGVyZSBpcyBmdWxsIGludGVyYWN0aXZlIGNvbnRyb2wgb2YgdGhlCisgICAgIGNvbG9ybWFwLCBwYW5uaW5nIGFuZCB6b29taW5nLCBncmFwaGljYWwgYW5ub3RhdGlvbiwgYW5kIGN1cnNvciB0cmFja2luZworICAgICBpbiBwaXhlbCBhbmQgc2t5IGNvb3JkaW5hdGVzLCBhbW9uZyBvdGhlciBmZWF0dXJlcy4KKworICAgKiBTY2hlbWUgICAoU3JjQ0QpCisKKyAgICAgU2NoZW1lIGlzIGEgc2ltcGxpZmllZCwgbGV4aWNhbGx5LXNjb3BlZCBkaWFsZWN0IG9mIExpc3AuICBJdCB3YXMKKyAgICAgZGVzaWduZWQgYXQgTUlUIGFuZCBvdGhlciB1bml2ZXJzaXRpZXMgdG8gdGVhY2ggc3R1ZGVudHMgdGhlIGFydCBvZgorICAgICBwcm9ncmFtbWluZyBhbmQgdG8gcmVzZWFyY2ggbmV3IHBhcmFsbGVsIHByb2dyYW1taW5nIGNvbnN0cnVjdHMgYW5kCisgICAgIGNvbXBpbGF0aW9uIHRlY2huaXF1ZXMuCisKKyAgICAgV2Ugbm93IGRpc3RyaWJ1dGUgTUlUIFNjaGVtZSA3LjMsIHdoaWNoIGNvbmZvcm1zIHRvIHRoZSAiUmV2aXNlZF40CisgICAgIFJlcG9ydCBPbiB0aGUgQWxnb3JpdGhtaWMgTGFuZ3VhZ2UgU2NoZW1lIiAoTUlUIEFJIExhYiBNZW1vIDg0OGIpLCBmb3IKKyAgICAgd2hpY2ggVGVYIHNvdXJjZSBpcyBpbmNsdWRlZC4gIEl0IGlzIHdyaXR0ZW4gcGFydGx5IGluIEMsIGJ1dCBpcworICAgICBwcmVzZW50bHkgaGFyZCB0byBib290c3RyYXAuICBCaW5hcmllcyB0byBib290c3RyYXAgaXQgZXhpc3QgZm9yOiBIUDkwMDAKKyAgICAgc2VyaWVzIDMwMCwgNDAwLCA3MDAsICYgODAwIChydW5uaW5nIEhQLVVYIDkuMCksIE5lWFQgKE5lWFQgT1MgMiBvciAzLjIpLAorICAgICBERUMgQWxwaGEgKE9TRi8xKSwgSUJNIFJTLzYwMDAgKEFJWCksIFN1bi0zIG9yIFN1bi00IChTdW5PUyA0LjEpLAorICAgICBERUNzdGF0aW9uIDMxMDAvNTEwMCAoVWx0cml4IDQuMCksIFNvbnkgTmVXUy0zMjUwIChORVdTIE9TIDUuMDEpLCAmCisgICAgIEludGVsIGkzODYgKE1TLURPUywgV2luZG93cyAzLjEgb3IgTlQpLiAgSWYgeW91ciBzeXN0ZW0gaXNuJ3Qgb24gdGhpcworICAgICBsaXN0ICYgeW91IGRvbid0IGVuam95IHRoZSBib290c3RyYXAgY2hhbGxlbmdlLCBzZWUgIkpBQ0FMIiBlYXJsaWVyIGluCisgICAgIHRoaXMgYXJ0aWNsZS4KKworICAgKiBgc2NyZWVuJyAgIChTcmNDRCkKKworICAgICBgc2NyZWVuJyBpcyBhIHRlcm1pbmFsIG11bHRpcGxleGVyIHRoYXQgcnVucyBzZXZlcmFsIHNlcGFyYXRlICJzY3JlZW5zIgorICAgICAodHR5cykgb24gYSBzaW5nbGUgY2hhcmFjdGVyLWJhc2VkIHRlcm1pbmFsLiAgRWFjaCB2aXJ0dWFsIHRlcm1pbmFsCisgICAgIGVtdWxhdGVzIGEgREVDIFZUMTAwIHBsdXMgc2V2ZXJhbCBJU08gMjAyMiBhbmQgSVNPIDY0MjkgKEVDTUEgNDgsIEFOU0kKKyAgICAgWDMuNjQpIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGNvbG9yLiAgQXJiaXRyYXJ5IGtleWJvYXJkIGlucHV0IHRyYW5zbGF0aW9uCisgICAgIGlzIGFsc28gc3VwcG9ydGVkLiAgYHNjcmVlbicgc2Vzc2lvbnMgY2FuIGJlIGRldGFjaGVkIGFuZCByZXN1bWVkIGxhdGVyCisgICAgIG9uIGEgZGlmZmVyZW50IHRlcm1pbmFsIHR5cGUuICBPdXRwdXQgaW4gZGV0YWNoZWQgc2Vzc2lvbnMgaXMgc2F2ZWQgZm9yCisgICAgIGxhdGVyIHZpZXdpbmcuCisKKyAgICogYHNlZCcgICAoU3JjQ0QpCisKKyAgICAgYHNlZCcgaXMgYSBzdHJlYW0tb3JpZW50ZWQgdmVyc2lvbiBvZiBgZWQnLiAgSXQgY29tZXMgd2l0aCB0aGUgYHJ4JworICAgICBsaWJyYXJ5LgorCisgICAqIFNoYXJ1dGlscyAgIChTcmNDRCkKKworICAgICBgc2hhcicgbWFrZXMgc28tY2FsbGVkIHNoZWxsIGFyY2hpdmVzIG91dCBvZiBtYW55IGZpbGVzLCBwcmVwYXJpbmcgdGhlbQorICAgICBmb3IgdHJhbnNtaXNzaW9uIGJ5IGVsZWN0cm9uaWMgbWFpbCBzZXJ2aWNlczsgYHVuc2hhcicgaGVscHMgdW5wYWNrCisgICAgIHRoZXNlIHNoZWxsIGFyY2hpdmVzIGFmdGVyIHJlY2VwdGlvbi4gIGB1dWVuY29kZScgYW5kIGB1dWRlY29kZScgYXJlCisgICAgIFBPU0lYIGNvbXBsaWFudCBpbXBsZW1lbnRhdGlvbnMgb2YgYSBwYWlyIG9mIHByb2dyYW1zIHdoaWNoIHRyYW5zZm9ybQorICAgICBmaWxlcyBpbnRvIGEgZm9ybWF0IHRoYXQgY2FuIGJlIHNhZmVseSB0cmFuc21pdHRlZCBhY3Jvc3MgYSA3LWJpdCBBU0NJSQorICAgICBsaW5rLgorCisgICAqIFNoZWxsdXRpbHMgICAoU3JjQ0QpCisKKyAgICAgVGhlIFNoZWxsdXRpbHMgYXJlOiBgYmFzZW5hbWUnLCBgY2hyb290JywgYGRhdGUnLCBgZGlybmFtZScsIGBlY2hvJywKKyAgICAgYGVudicsIGBleHByJywgYGZhY3RvcicsIGBmYWxzZScsIGBncm91cHMnLCBgaG9zdG5hbWUnLCBgaWQnLCBgbG9nbmFtZScsCisgICAgIGBuaWNlJywgYG5vaHVwJywgYHBhdGhjaGsnLCBgcHJpbnRlbnYnLCBgcHJpbnRmJywgYHB3ZCcsIGBzZXEnLCBgc2xlZXAnLAorICAgICBgc3R0eScsIGBzdScsIGB0ZWUnLCBgdGVzdCcsIGB0cnVlJywgYHR0eScsIGB1bmFtZScsIGB1cHRpbWUnLCBgdXNlcnMnLAorICAgICBgd2hvJywgYHdob2FtaScsICYgYHllcycuCisKKyAgICogU2hvZ2kgICAoU3JjQ0QpCisKKyAgICAgU2hvZ2kgaXMgYSBKYXBhbmVzZSBnYW1lIHNpbWlsYXIgdG8gQ2hlc3M7IGEgbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0CisgICAgIGNhcHR1cmVkIHBpZWNlcyBjYW4gYmUgcmV0dXJuZWQgaW50byBwbGF5LgorCisgICAgIEdOVSBTaG9naSBpcyBhIHZhcmlhbnQgb2YgR05VIENoZXNzOyBpdCBpbXBsZW1lbnRzIHRoZSBzYW1lIGZlYXR1cmVzICYKKyAgICAgc2ltaWxhciBoZXVyaXN0aWNzLiAgQXMgYSBuZXcgZmVhdHVyZSwgc2VxdWVuY2VzIG9mIHBhcnRpYWwgYm9hcmQKKyAgICAgcGF0dGVybnMgY2FuIGJlIGludHJvZHVjZWQgdG8gaGVscCB0aGUgcHJvZ3JhbSBwbGF5IHRvd2FyZCBzcGVjaWZpYworICAgICBvcGVuaW5nIHBhdHRlcm5zLiAgSXQgaGFzIGJvdGggY2hhcmFjdGVyIGFuZCBYIGRpc3BsYXkgaW50ZXJmYWNlcy4KKworICAgICBJdCBpcyBwcmltYXJpbHkgc3VwcG9ydGVkIGJ5IE1hdHRoaWFzIE11dHogb24gYmVoYWxmIG9mIHRoZSBGU0YuCisKKyAgICogU0lQUCAgICAoU3JjQ0QpCisKKyAgICAgU0lQUCBpcyBhIGxpYnJhcnkgZm9yIHBob3RvcmVhbGlzdGljbHkgcmVuZGVyaW5nIDNEIHNjZW5lcy4gIFNjZW5lcyBjYW4KKyAgICAgYmUgaWxsdW1pbmF0ZWQgYnkgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBsaWdodCBzb3VyY2VzOyB0aGV5IGFyZSBidWlsdCB1cAorICAgICBvZiBvYmplY3QgaGllcmFyY2hpZXMsIHdpdGggYXJiaXRyYXJpbHkgbWFueSBzdWJvYmplY3RzIGFuZCBzdWJzdXJmYWNlcy4KKyAgICAgU3VyZmFjZXMgY2FuIGJlIHJlbmRlcmVkIHdpdGggZWl0aGVyIFBob25nLCBHb3VyYXVkLCBvciBmbGF0IHNoYWRpbmcuCisgICAgIFRoZSBsaWJyYXJ5IHN1cHBvcnRzIHByb2dyYW1tYWJsZSBzaGFkZXJzIGFuZCB0ZXh0dXJlIG1hcHBpbmcuCisKKyAgICogU21haWwgICAoU3JjQ0QpCisKKyAgICAgU21haWwgaXMgYSBtYWlsIHRyYW5zcG9ydCBzeXN0ZW0sIGRlc2lnbmVkIGFzIGEgY29tcGF0aWJsZSBkcm9wLWluCisgICAgIHJlcGxhY2VtZW50IGZvciBgc2VuZG1haWwnLiAgSXQgdXNlcyBhIG11Y2ggc2ltcGxlciBjb25maWd1cmF0aW9uIGZvcm1hdAorICAgICB0aGFuIGBzZW5kbWFpbCcgYW5kIGlzIGRlc2lnbmVkIHRvIGJlIHNldHVwIHdpdGggbWluaW1hbCBlZmZvcnQuCisKKyAgICogU21hbGx0YWxrICAgKkFsc28gKm5vdGUgRm9ydGhjb21pbmcgR05Vczo6LiogICAoU3JjQ0QpCisKKyAgICAgR05VIFNtYWxsdGFsayBpcyBhbiBpbnRlcnByZXRlZCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UKKyAgICAgc3lzdGVtIHdyaXR0ZW4gaW4gaGlnaGx5IHBvcnRhYmxlIEMuICBJdCBoYXMgYmVlbiBwb3J0ZWQgdG8gRE9TLCBtYW55CisgICAgIFVuaXgsICYgb3RoZXIgT1Nlcy4gIEZlYXR1cmVzIGluY2x1ZGUgYSBiaW5hcnkgaW1hZ2Ugc2F2ZSBjYXBhYmlsaXR5LAorICAgICB0aGUgYWJpbGl0eSB0byBjYWxsIHVzZXItd3JpdHRlbiBDIGNvZGUgd2l0aCBwYXJhbWV0ZXJzLCBhbiBFbWFjcworICAgICBlZGl0aW5nIG1vZGUsIGEgdmVyc2lvbiBvZiB0aGUgWCBwcm90b2NvbCBpbnZvY2FibGUgZnJvbSBTbWFsbHRhbGssCisgICAgIG9wdGlvbmFsIGJ5dGUtY29kZSBjb21waWxhdGlvbiBhbmQvb3IgZXhlY3V0aW9uIHRyYWNpbmcsICYgYXV0b21hdGljYWxseQorICAgICBsb2FkZWQgcGVyLXVzZXIgaW5pdGlhbGl6YXRpb24gZmlsZXMuICBJdCBpbXBsZW1lbnRzIGFsbCBvZiB0aGUgY2xhc3NlcworICAgICAmIHByb3RvY29sIGluIHRoZSBib29rICJTbWFsbHRhbGstODA6IFRoZSBMYW5ndWFnZSIsIGV4Y2VwdCBmb3IgdGhlCisgICAgIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgKEdVSSkgcmVsYXRlZCBjbGFzc2VzLgorCisgICAqIFNOZVBTICAgIChTcmNDRCkKKworICAgICBTTmVQUyBpcyB0aGUgU2VtYW50aWMgTmV0d29yayBQcm9jZXNzaW5nIFN5c3RlbS4gIEl0IGlzIGFuCisgICAgIGltcGxlbWVudGF0aW9uIG9mIGEgZnVsbHkgaW50ZW5zaW9uYWwgdGhlb3J5IG9mIHByb3Bvc2l0aW9uYWwga25vd2xlZGdlCisgICAgIHJlcHJlc2VudGF0aW9uIGFuZCByZWFzb25pbmcuICBTTmVQUyBydW5zIHVuZGVyIENMSVNQIG9yIEdDTC4KKworICAgKiBTdXBlcm9wdCAgIChTcmNDRCkKKworICAgICBTdXBlcm9wdCBpcyBhIGZ1bmN0aW9uIHNlcXVlbmNlIGdlbmVyYXRvciB0aGF0IHVzZXMgYW4gZXhoYXVzdGl2ZQorICAgICBnZW5lcmF0ZS1hbmQtdGVzdCBhcHByb2FjaCB0byBmaW5kIHRoZSBzaG9ydGVzdCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmb3IKKyAgICAgYSBnaXZlbiBmdW5jdGlvbi4gIFlvdSBwcm92aWRlIGEgZnVuY3Rpb24gYXMgaW5wdXQsIGEgQ1BVIHRvIGdlbmVyYXRlCisgICAgIGNvZGUgZm9yLCBhbmQgaG93IG1hbnkgaW5zdHJ1Y3Rpb25zIHlvdSB3YW50LiAgSXRzIHVzZSBpbiBHQ0MgaXMKKyAgICAgZGVzY3JpYmVkIGluIHRoZSBgQUNNIFNJR1BMQU4gUExESSc5MiBQcm9jZWVkaW5ncycuICBJdCBzdXBwb3J0czogU1BBUkMsCisgICAgIG02OGssIG02ODAyMCwgbTg4aywgSUJNIFBPV0VSIGFuZCBQb3dlclBDLCBBTUQgMjlrLCBJbnRlbCB4ODYgJiA5NjAsCisgICAgIFB5cmFtaWQsIERFQyBBbHBoYSwgSGl0YWNoaSBTSCwgJiBIUC1QQS4KKworICAgKiBgc3RvdycgICAoU3JjQ0QpCisKKyAgICAgYHN0b3cnIG1hbmFnZXMgdGhlIGluc3RhbGxhdGlvbiBvZiBzb2Z0d2FyZSBwYWNrYWdlcywga2VlcGluZyB0aGVtCisgICAgIHNlcGFyYXRlIHdoaWxlIG1ha2luZyB0aGVtIGFwcGVhciB0byBiZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgcGxhY2UuCisKKyAgICogYHRhcicgICAoU3JjQ0QpCisKKyAgICAgR05VIGB0YXInIGluY2x1ZGVzIG11bHRpLXZvbHVtZSBzdXBwb3J0LCB0aGUgYWJpbGl0eSB0byBhcmNoaXZlIHNwYXJzZQorICAgICBmaWxlcywgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiwgcmVtb3RlIGFyY2hpdmVzLCBhbmQgc3BlY2lhbCBmZWF0dXJlcworICAgICB0aGF0IGFsbG93IGB0YXInIHRvIGJlIHVzZWQgZm9yIGluY3JlbWVudGFsIGFuZCBmdWxsIGJhY2t1cHMuICBHTlUgYHRhcicKKyAgICAgdXNlcyBhbiBlYXJseSBkcmFmdCBvZiB0aGUgUE9TSVggMTAwMy4xIGB1c3RhcicgZm9ybWF0IHdoaWNoIGlzCisgICAgIGRpZmZlcmVudCBmcm9tIHRoZSBmaW5hbCB2ZXJzaW9uLiAgVGhpcyB3aWxsIGJlIGNvcnJlY3RlZCBpbiB0aGUgZnV0dXJlLgorCisgICAqIFRlcm1jYXAgTGlicmFyeSAgIChTcmNDRCkgICBbRlNGbWFuXQorCisgICAgIFRoZSBHTlUgVGVybWNhcCBsaWJyYXJ5IGlzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgYGxpYnRlcm1jYXAuYScgb24KKyAgICAgYW55IHN5c3RlbS4gIEl0IGRvZXMgbm90IHBsYWNlIGFuIGFyYml0cmFyeSBsaW1pdCBvbiB0aGUgc2l6ZSBvZiBUZXJtY2FwCisgICAgIGVudHJpZXMsIHVubGlrZSBtb3N0IG90aGVyIFRlcm1jYXAgbGlicmFyaWVzLiAgSW5jbHVkZWQgaXMgc291cmNlIGZvciB0aGUKKyAgICAgYFRlcm1jYXAgTWFudWFsJyBpbiBUZXhpbmZvIGZvcm1hdCAoKm5vdGUgRG9jdW1lbnRhdGlvbjo6LikuCisKKyAgICogVGVybXV0aWxzICAgKFNyY0NEKQorCisgICAgIFRoZSBUZXJtdXRpbHMgcGFja2FnZSBjb250YWlucyBwcm9ncmFtcyBmb3IgY29udHJvbGxpbmcgdGVybWluYWxzLgorICAgICBgdHB1dCcgaXMgYSBwb3J0YWJsZSB3YXkgZm9yIHNoZWxsIHNjcmlwdHMgdG8gdXNlIHNwZWNpYWwgdGVybWluYWwKKyAgICAgY2FwYWJpbGl0aWVzLiAgYHRhYnMnIGlzIGEgcHJvZ3JhbSB0byBzZXQgaGFyZHdhcmUgdGVybWluYWwgdGFiIHNldHRpbmdzLgorCisgICAqIFRlWCAgIChTcmNDRCkKKworICAgICBUZVggaXMgYSBkb2N1bWVudCBmb3JtYXR0aW5nIHN5c3RlbSB0aGF0IGhhbmRsZXMgY29tcGxpY2F0ZWQKKyAgICAgdHlwZXNldHRpbmcsIGluY2x1ZGluZyBtYXRoZW1hdGljcy4gIEl0IGlzIEdOVSdzIHN0YW5kYXJkIHRleHQgZm9ybWF0dGVyLgorCisgICAgIFRoZSBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24gbWFpbnRhaW5zICYgc3VwcG9ydHMgYSB0YXBlIGRpc3RyaWJ1dGlvbiBvZgorICAgICBUZVggZm9yIFVuaXggc3lzdGVtcy4gIFRoZSBjb3JlIG1hdGVyaWFsIGlzIEthcmwgQmVycnkncyBgd2ViMmMnIFRlWAorICAgICBwYWNrYWdlLiAgU291cmNlcyBhcmUgYXZhaWxhYmxlIHZpYSBhbm9ueW1vdXMgRlRQOyByZXRyaWV2YWwKKyAgICAgaW5zdHJ1Y3Rpb25zIGFyZSBpbiBgL3B1Yi90ZXgvdW5peHRleC5mdHAnIG9uIGBmdHAuY3MudW1iLmVkdScuICBJZiB5b3UKKyAgICAgcmVjZWl2ZSBhbnkgaW5zdGFsbGF0aW9uIHN1cHBvcnQgZnJvbSB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLAorICAgICBjb25zaWRlciBzZW5kaW5nIHRoZW0gYSBkb25hdGlvbi4KKworICAgICBUbyBvcmRlciBhIGZ1bGwgZGlzdHJpYnV0aW9uIHdyaXR0ZW4gaW4gYHRhcicgb24gZWl0aGVyIGEgMS80aW5jaAorICAgICA0LXRyYWNrIFFJQy0yNCBjYXJ0cmlkZ2Ugb3IgYSA0bW0gREFUIGNhcnRyaWRnZSwgc2VuZCAkMjEwLjAwIHRvOgorCisgICAgICAgICAgUGllcnJlIEEuIE1hY0theQorICAgICAgICAgIERlcGFydG1lbnQgb2YgQ2xhc3NpY3MKKyAgICAgICAgICBESC0xMCwgRGVubnkgSGFsbCAyMTgKKyAgICAgICAgICBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24KKyAgICAgICAgICBTZWF0dGxlLCBXQSAgIDk4MTk1CisgICAgICAgICAgVVNBCisgICAgICAgICAgCisgICAgICAgICAgRWxlY3Ryb25pYy1NYWlsOiBgbWFja2F5QGNzLndhc2hpbmd0b24uZWR1JworICAgICAgICAgIFRlbGVwaG9uZTogKzEtMjA2LTU0My0yMjY4CisKKyAgICAgUGxlYXNlIG1ha2UgY2hlY2tzIHBheWFibGUgdG86IGBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24nLiAgRG8gbm90CisgICAgIHNwZWNpZnkgYW55IG90aGVyIHBheWVlLiAgVGhhdCBjYXVzZXMgYWNjb3VudGluZyBwcm9ibGVtcy4gIENoZWNrcyBtdXN0CisgICAgIGJlIGluIFUuUy4gZG9sbGFycywgZHJhd24gb24gYSBVLlMuIGJhbmsuICBPbmx5IHByZXBhaWQgb3JkZXJzIGNhbiBiZQorICAgICBoYW5kbGVkLiAgT3ZlcnNlYXMgc2l0ZXM6IHBsZWFzZSBhZGQgdG8gdGhlIGJhc2UgY29zdCAkMjAuMDAgdG8gc2hpcCB2aWEKKyAgICAgYWlyIHBhcmNlbCBwb3N0IG9yICQzMC4wMCB0byBzaGlwIHZpYSBjb3VyaWVyLiAgUGxlYXNlIGNoZWNrIHdpdGggdGhlCisgICAgIGFib3ZlIGZvciBjdXJyZW50IHByaWNlcyAmIGZvcm1hdHMuCisKKyAgICogVGV4aW5mbyAgIChTcmNDRCkgICBbRlNGbWFuXQorCisgICAgIFRleGluZm8gaXMgYSBzZXQgb2YgdXRpbGl0aWVzIChgbWFrZWluZm8nLCBgaW5mbycsIGBpbnN0YWxsLWluZm8nLAorICAgICBgdGV4aTJkdmknLCBgdGV4aW5kZXgnLCAmIGB0ZXhpbmZtdC5lbCcpIHdoaWNoIGdlbmVyYXRlIHByaW50ZWQgbWFudWFscywKKyAgICAgcGxhaW4gQVNDSUkgdGV4dCwgJiBvbmxpbmUgaHlwZXJ0ZXh0IGRvY3VtZW50YXRpb24gKGNhbGxlZCAiSW5mbyIpLCAmCisgICAgIGNhbiByZWFkIG9ubGluZSBJbmZvIGRvY3VtZW50czsgSW5mbyBmaWxlcyBjYW4gYWxzbyBiZSByZWFkIGluIEVtYWNzLgorICAgICBWZXJzaW9uIDMgaGFzIGJvdGggRW1hY3MgTGlzcCAmIHN0YW5kYWxvbmUgcHJvZ3JhbXMgd3JpdHRlbiBpbiBDIG9yIGFzCisgICAgIHNoZWxsIHNjcmlwdHMuICBUZXhpbmZvIG1vZGUgZm9yIEVtYWNzIGVuYWJsZXMgZWFzeSBlZGl0aW5nICYgdXBkYXRpbmcKKyAgICAgb2YgVGV4aW5mbyBmaWxlcy4gIFNvdXJjZSBmb3IgdGhlIGBUZXhpbmZvIE1hbnVhbCcgaXMgaW5jbHVkZWQgKCpub3RlCisgICAgIERvY3VtZW50YXRpb246Oi4pLgorCisgICAqIFRleHR1dGlscyAgIChTcmNDRCkKKworICAgICBUaGUgVGV4dHV0aWxzIHByb2dyYW1zIG1hbmlwdWxhdGUgdGV4dHVhbCBkYXRhLiAgVGhleSBpbmNsdWRlOiBgY2F0JywKKyAgICAgYGNrc3VtJywgYGNvbW0nLCBgY3NwbGl0JywgYGN1dCcsIGBleHBhbmQnLCBgZm10JywgYGZvbGQnLCBgaGVhZCcsCisgICAgIGBqb2luJywgYG1kNXN1bScsIGBubCcsIGBvZCcsIGBwYXN0ZScsIGBwcicsIGBzb3J0JywgYHNwbGl0JywgYHN1bScsCisgICAgIGB0YWMnLCBgdGFpbCcsIGB0cicsIGB1bmV4cGFuZCcsIGB1bmlxJywgYW5kIGB3YycuCisKKyAgICogVElGRiBsaWJyYXJ5ICAgKFNyY0NEKQorCisgICAgIFRoZSBUSUZGIGxpYnJhcnksIGBsaWJ0aWZmJywgaXMgYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgVGFnZ2VkIEltYWdlCisgICAgIEZpbGUgRm9ybWF0IGZpbGVzLCBhIGNvbW1vbmx5IHVzZWQgYml0bWFwIGdyYXBoaWNzIGZvcm1hdC4KKworICAgKiBUaWxlIEZvcnRoICAgKFNyY0NEKQorCisgICAgIFRpbGUgRm9ydGggaXMgYSAzMi1iaXQgaW1wbGVtZW50YXRpb24gb2YgdGhlIEZvcnRoLTgzIHN0YW5kYXJkIHdyaXR0ZW4KKyAgICAgaW4gQywgYWxsb3dpbmcgaXQgdG8gYmUgZWFzaWx5IHBvcnRlZCB0byBuZXcgc3lzdGVtcyAmIGV4dGVuZGVkIHdpdGggYW55CisgICAgIEMtZnVuY3Rpb24gKGdyYXBoaWNzLCB3aW5kb3dpbmcsIGV0YykuCisKKyAgICAgTWFueSBkb2N1bWVudGVkIEZvcnRoIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlLCBlLmcuIHRvcC1kb3duIHBhcnNpbmcsCisgICAgIG11bHRpLXRocmVhZHMsICYgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nLgorCisgICAqIGB0aW1lJyAgIChTcmNDRCkKKworICAgICBgdGltZScgcmVwb3J0cyAodXN1YWxseSBmcm9tIGEgc2hlbGwpIHRoZSB1c2VyLCBzeXN0ZW0sICYgcmVhbCB0aW1lIHVzZWQKKyAgICAgYnkgYSBwcm9jZXNzLiAgT24gc29tZSBzeXN0ZW1zIGl0IGFsc28gcmVwb3J0cyBtZW1vcnkgdXNhZ2UsIHBhZ2UKKyAgICAgZmF1bHRzLCBldGMuCisKKyAgICogYHVjYmxvZ28nICAgKFNyY0NEKQorCisgICAgIGB1Y2Jsb2dvJyBpbXBsZW1lbnRzIHRoZSBjbGFzc2ljIHRlYWNoaW5nIGxhbmd1YWdlLCBMb2dvLgorCisgICAqIFVVQ1AgICAoU3JjQ0QpCisKKyAgICAgR05VJ3MgVVVDUCBzeXN0ZW0gKHdyaXR0ZW4gYnkgSWFuIExhbmNlIFRheWxvcikgc3VwcG9ydHMgdGhlIGBmJywgYGcnCisgICAgIChhbGwgd2luZG93ICYgcGFja2V0IHNpemVzKSwgYHYnLCBgRycsIGB0JywgYGUnLCBabW9kZW0sICYgdHdvIG5ldworICAgICBiaWRpcmVjdGlvbmFsIChgaScgJiBgaicpIHByb3RvY29scy4gIFdpdGggYSBCU0Qgc29ja2V0cyBsaWJyYXJ5LCBpdCBjYW4KKyAgICAgbWFrZSBUQ1AgY29ubmVjdGlvbnMuICBXaXRoIFRMSSBsaWJyYXJpZXMsIGl0IGNhbiBtYWtlIFRMSSBjb25uZWN0aW9ucy4KKyAgICAgU291cmNlIGlzIGluY2x1ZGVkIGZvciBhIG1hbnVhbCAobm90IHlldCBwdWJsaXNoZWQgYnkgdGhlIEZTRikuCisKKyAgICogdmlld2ZheCAgIChTcmNDRCkKKworICAgICBWaWV3ZmF4IGlzIGEgdG9vbCBmb3IgZGlzcGxheWluZyBmYXggZmlsZXMgb24gYW4gWCBkaXNwbGF5LiAgSXQgY2FuCisgICAgIGRpc3BsYXkgcmF3LCBkaWdpZmF4IG9yIHRpZmYvZiBmaWxlcywgc3VjaCBhcyB0aG9zZSByZWNlaXZlZCBieSBIeWxhRkFYLgorCisgICAqIFczICAgKFNyY0NEKQorCisgICAgIFczICh3cml0dGVuIGJ5IFdpbGxpYW0gUGVycnkgaW4gRW1hY3MgTGlzcCkgaXMgYW4gZXh0ZW5zaWJsZSwgYWR2YW5jZWQKKyAgICAgV29ybGQgV2lkZSBXZWIgYnJvd3NlciB0aGF0IHJ1bnMgYXMgcGFydCBvZiBFbWFjcy4gIEl0IHVuZGVyc3RhbmRzIG1hbnkKKyAgICAgcHJvdG9jb2xzICYgZmlsZSBmb3JtYXRzOiBGVFAsIGdvcGhlciwgSFRNTCwgU01UUCwgVGVsbmV0LCBXQUlTLCBldGMuCisKKyAgICogYHdkaWZmJyAgIChTcmNDRCkKKworICAgICBgd2RpZmYnIGlzIGEgZnJvbnQtZW5kIHRvIEdOVSBgZGlmZicuICBJdCBjb21wYXJlcyB0d28gZmlsZXMsIGZpbmRpbmcKKyAgICAgdGhlIHdvcmRzIGRlbGV0ZWQgb3IgYWRkZWQgdG8gdGhlIGZpcnN0IHRvIG1ha2UgdGhlIHNlY29uZC4gIEl0IGhhcyBtYW55CisgICAgIG91dHB1dCBmb3JtYXRzIGFuZCB3b3JrcyB3ZWxsIHdpdGggdGVybWluYWxzIGFuZCBwYWdlcnMuICBgd2RpZmYnIGlzCisgICAgIHZlcnkgdXNlZnVsIHdoZW4gdHdvIHRleHRzIGRpZmZlciBvbmx5IGJ5IGEgZmV3IHdvcmRzIGFuZCBwYXJhZ3JhcGhzCisgICAgIGhhdmUgYmVlbiByZWZpbGxlZC4KKworICAgKiBgd2dldCcgICAoU3JjQ0QpCisKKyAgICAgYHdnZXQnIG5vbi1pbnRlcmFjdGl2ZWx5IHJldHJpZXZlcyBmaWxlcyBmcm9tIHRoZSBXV1cgdXNpbmcgSFRUUCAmIEZUUC4KKyAgICAgSXQgaXMgc3VpdGFibGUgZm9yIHVzZSBpbiBzaGVsbCBzY3JpcHRzLgorCisgICAqIGB3aW5kb3dzMzJhcGknICAgKFNyY0NEKQorCisgICAgIGB3aW5kb3dzMzInIGlzIGEgc2V0IG9mIGhlYWRlciBmaWxlcyAmIGltcG9ydCBsaWJyYXJpZXMgdGhhdCBjYW4gYmUgdXNlZAorICAgICBieSBHTlUgdG9vbHMgZm9yIGNvbXBpbGluZyAmIGxpbmtpbmcgcHJvZ3JhbXMgdG8gYmUgcnVuIG9uIFdpbmRvd3MgTlQvOTUuCisKKyAgICogV04gICAoU3JjQ0QpCisKKyAgICAgV04gaXMgYSBXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgZGVzaWduZWQgdG8gYmUgc2VjdXJlIGFuZCBmbGV4aWJsZS4gIEl0CisgICAgIG9mZmVycyBtYW55IGRpZmZlcmVudCBjYXBhYmlsaXRpZXMgaW4gcHJlLXBhcnNpbmcgZmlsZXMgYmVmb3JlIHBhc3NpbmcKKyAgICAgdGhlbSB0byB0aGUgY2xpZW50LCBhbmQgaGFzIGEgdmVyeSBkaWZmZXJlbnQgZGVzaWduIGZyb20gQXBhY2hlIGFuZCB0aGUKKyAgICAgTkNTQSBzZXJ2ZXIuCisKKyAgICogWDExICAgKFNyY0NEKQorCisgICAgIFdlIGRpc3RyaWJ1dGUgVmVyc2lvbiAxMSwgUmVsZWFzZSA2LjMgb2YgdGhlIFggV2luZG93IFN5c3RlbSB3aXRoIHRoZQorICAgICBsYXRlc3QgcGF0Y2hlcyAmIGJ1ZyBmaXhlcy4gIFgxMSBpbmNsdWRlcyBhbGwgb2YgdGhlIGNvcmUgc29mdHdhcmUsCisgICAgIGRvY3VtZW50YXRpb24sIGNvbnRyaWJ1dGVkIGNsaWVudHMsIGxpYnJhcmllcywgJiB0b29sa2l0cywgZ2FtZXMsIGV0Yy4KKworICAgICBXaGlsZSBzdXBwbGllcyBsYXN0LCB3ZSB3aWxsIGRpc3RyaWJ1dGUgWDExUjUgb24gdGhlIE5vdmVtYmVyIDE5OTMKKyAgICAgU291cmNlIENvZGUgQ0QtUk9NLgorCisgICAqIGB4Ym9hcmQnICAgKFNyY0NEKQorCisgICAgIGB4Ym9hcmQnIGlzIGEgZ3JhcGhpY2FsIGNoZXNzYm9hcmQgZm9yIFggV2luZG93cy4gIEl0IGNhbiBzZXJ2ZSBhcyBhCisgICAgIHVzZXIgaW50ZXJmYWNlIHRvIHRoZSBDcmFmdHkgb3IgR05VIGNoZXNzIHByb2dyYW1zLCB0aGUgSW50ZXJuZXQgQ2hlc3MKKyAgICAgU2VydmVycywgZS1tYWlsIGNvcnJlc3BvbmRlbmNlIGNoZXNzLCBvciBnYW1lcyBzYXZlZCBpbiBQb3J0YWJsZSBHYW1lCisgICAgIE5vdGF0aW9uLgorCisgICAqIGB4Z3JhYnNjJyAgIChTcmNDRCkKKworICAgICBgeGdyYWJzYycgaXMgYSBzY3JlZW4gY2FwdHVyZSBwcm9ncmFtIHNpbWlsYXIgdG8gYHh3ZCcgYnV0IHdpdGggYQorICAgICBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UsIG1vcmUgd2F5cyBvZiBzZWxlY3RpbmcgdGhlIHBhcnQgb2YgdGhlIHNjcmVlbgorICAgICB0byBjYXB0dXJlLCAmIGRpZmZlcmVudCB0eXBlcyBvZiBvdXRwdXQ6IFBvc3RzY3JpcHQsIGNvbG9yIFBvc3RzY3JpcHQsCisgICAgIHh3ZCwgYml0bWFwLCBwaXhtYXAsICYgcHV6emxlLgorCisgICAqIGB4aW5mbycgICAoU3JjQ0QpCisKKyAgICAgYHhpbmZvJyBpcyBhbiBYLXdpbmRvd3MgcHJvZ3JhbSBmb3IgcmVhZGluZyBJbmZvIGZpbGVzLiAgSXQgdXNlcyBhCisgICAgIHNwZWNpYWwgd2lkZ2V0LCB3aGljaCBpcyBhdmFpbGFibGUgZm9yIHVzZSBpbiBvdGhlciBwcm9ncmFtcy4KKworICAgKiBgeHNob2dpJyAgIChTcmNDRCkKKworICAgICBgeHNob2dpJyBpcyBhIGdyYXBoaWNhbCBTaG9naSAoSmFwYW5lc2UgQ2hlc3MpIGJvYXJkIGZvciB0aGUgWCBXaW5kb3cKKyAgICAgU3lzdGVtLiAgSXQgY2FuIHNlcnZlIGFzIGEgdXNlciBpbnRlcmZhY2UgdG8gR05VIFNob2dpLCBhcyBhIHJlZmVyZWUgZm9yCisgICAgIGdhbWVzIGJldHdlZW4gdHdvIGh1bWFucywgb3IgYXMgYSBjbGllbnQgZm9yIHRoZSBJbnRlcm5ldCBTaG9naSBTZXJ2ZXIuCisKKyAgICogYFlnbCcgICAoU3JjQ0QpCisKKyAgICAgYFlnbCcgZW11bGF0ZXMgYSBzdWJzZXQgb2YgU0dJJ3MgR0wgKEdyYXBoaWNzIExhbmd1YWdlKSBsaWJyYXJ5IHVuZGVyCisgICAgIFgxMSBvbiBtb3N0IHBsYXRmb3JtcyB3aXRoIGFuIEFOU0kgQyBjb21waWxlciAoaW5jbHVkaW5nIEdDQykuICBJdCBoYXMKKyAgICAgbW9zdCB0d28tZGltZW5zaW9uYWwgZ3JhcGhpY3Mgcm91dGluZXMsIHRoZSBxdWV1ZSBkZXZpY2UgJiBxdWVyeQorICAgICByb3V0aW5lcywgZG91YmxlIGJ1ZmZlcmluZywgUkdCIG1vZGUgd2l0aCBkaXRoZXJpbmcsIEZPUlRSQU4gYmluZGluZ3MsCisgICAgIGV0Yy4KKworIAorCitQcm9ncmFtL1BhY2thZ2UgQ3Jvc3MgUmVmZXJlbmNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0hlcmUgaXMgYSBsaXN0IG9mIHRoZSBwYWNrYWdlIGVhY2ggR05VIHByb2dyYW0gb3IgbGlicmFyeSBpcyBpbi4gIFlvdSBjYW4gRlRQCit0aGUgY3VycmVudCBsaXN0IGluIHRoZSBmaWxlIGAvcHViL2dudS9Qcm9ncmFtSW5kZXgnIGZyb20gYSBHTlUgRlRQIGhvc3QKKyhsaXN0ZWQgaW4gKk5vdGUgSG93IHRvIEdldCBHTlUgU29mdHdhcmU6OikuCisKKyAgICAgICAgKiA0ZHZpZXcgZ2VvbXZpZXcKKyAgICAgCisgICAgICAgICogYTJwIHBlcmwKKyAgICAgICAgKiBhMnggeG9wdAorICAgICAgICAqIGFjIGJzZDQ0CisgICAgICAgICogYWNjdG9uIGJzZDQ0CisgICAgICAgICogYWNrcGZkIHBodHRwZAorICAgICAgICAqIGFjbCBic2Q0NAorICAgICAgICAqIGFjbSBhY20KKyAgICAgICAgKiBhY21zIGFjbQorICAgICAgICAqIGFkZGJib3ggZ2VvbXZpZXcKKyAgICAgICAgKiBhZGRmdGluZm8gR3JvZmYKKyAgICAgICAgKiBhZHZlbnR1cmUgYnNkNDQKKyAgICAgICAgKiBhZm0ydGZtIFRlWAorICAgICAgICAqIGFpZCBJRCBVdGlscworICAgICAgICAqIGFtZCBic2Q0NAorICAgICAgICAqIGFuc2l0YXBlIGJzZDQ0CisgICAgICAgICogQW5zd2VyR2FyZGVuIHhvcHQKKyAgICAgICAgKiBhcHBseSBic2Q0NAorICAgICAgICAqIGFwcHJlcyB4cmVxCisgICAgICAgICogYXByb3BvcyBic2Q0NAorICAgICAgICAqIGFyIEJpbnV0aWxzCisgICAgICAgICogYXJpdGhtZXRpYyBic2Q0NAorICAgICAgICAqIGFycCBic2Q0NAorICAgICAgICAqIGF0YyBic2Q0NAorICAgICAgICAqIGF1dGh3biBXTgorICAgICAgICAqIGF1dG9jb25mIEF1dG9jb25mCisgICAgICAgICogYXV0b2hlYWRlciBBdXRvY29uZgorICAgICAgICAqIGF1dG9tYWtlIEF1dG9tYWtlCisgICAgICAgICogYXV0b3JlY29uZiBBdXRvY29uZgorICAgICAgICAqIGF1dG9zY2FuIEF1dG9jb25mCisgICAgICAgICogYXV0b3VwZGF0ZSBBdXRvY29uZgorICAgICAgICAqIGF1dG9fYm94IHhvcHQKKyAgICAgICAgKiBhdXRvX2JveCB4cmVxCisgICAgIAorICAgICAgICAqIGIybSBFbWFjcworICAgICAgICAqIGJhY2tnYW1tb24gYnNkNDQKKyAgICAgICAgKiBiYWQxNDQgYnNkNDQKKyAgICAgICAgKiBiYWRzZWN0IGJzZDQ0CisgICAgICAgICogYmFubmVyIGJzZDQ0CisgICAgICAgICogYmFzZW5hbWUgU2hlbGx1dGlscworICAgICAgICAqIGJhc2ggQkFTSAorICAgICAgICAqIGJhdHRsZXN0YXIgYnNkNDQKKyAgICAgICAgKiBiYyBiYworICAgICAgICAqIGJjZCBic2Q0NAorICAgICAgICAqIGJkZXMgYnNkNDQKKyAgICAgICAgKiBiZGZ0b3BzIEdob3N0c2NyaXB0CisgICAgICAgICogYmVhY2hfYmFsbCB4b3B0CisgICAgICAgICogYmVhY2hfYmFsbCB4cmVxCisgICAgICAgICogYmVhY2hfYmFsbDIgeG9wdAorICAgICAgICAqIGJpYnRleCBUZVgKKyAgICAgICAgKiBiaWZmIGJzZDQ0CisgICAgICAgICogYmlzb24gQmlzb24KKyAgICAgICAgKiBiaXRtYXAgeHJlcQorICAgICAgICAqIGJvZ2dsZSBic2Q0NAorICAgICAgICAqIGJwbHRvYnpyIEZvbnR1dGlscworICAgICAgICAqIGJ1Z2ZpbGVyIGJzZDQ0CisgICAgICAgICogYnVpbGRoYXNoIElzcGVsbAorICAgICAgICAqIGJ6cnRvIEZvbnR1dGlscworICAgICAKKyAgICAgICAgKiBjKysgR0NDCisgICAgICAgICogYysrZmlsdCBCaW51dGlscworICAgICAgICAqIGMycGggcGVybAorICAgICAgICAqIGNhMTAwIHhvcHQKKyAgICAgICAgKiBjYWVzYXIgYnNkNDQKKyAgICAgICAgKiBjYWwgYnNkNDQKKyAgICAgICAgKiBjYWxlbmRhciBic2Q0NAorICAgICAgICAqIGNhbmZpZWxkIGJzZDQ0CisgICAgICAgICogY2F0IFRleHR1dGlscworICAgICAgICAqIGNiYXJzIHdkaWZmCisgICAgICAgICogY2MgR0NDCisgICAgICAgICogY2MxIEdDQworICAgICAgICAqIGNjMW9iaiBHQ0MKKyAgICAgICAgKiBjYzFwbHVzIEdDQworICAgICAgICAqIGNjY3AgR0NDCisgICAgICAgICogY2R3cml0ZSBta2lzb2ZzCisgICAgICAgICogY2ZlbmdpbmUgY2ZlbmdpbmUKKyAgICAgICAgKiBjZ2kgU3Bpbm5lcgorICAgICAgICAqIGNoYXJzcGFjZSBGb250dXRpbHMKKyAgICAgICAgKiBjaGVja25yIGJzZDQ0CisgICAgICAgICogY2hlc3MgYnNkNDQKKyAgICAgICAgKiBjaGZsYWdzIGJzZDQ0CisgICAgICAgICogY2hncnAgRmlsZXV0aWxzCisgICAgICAgICogY2hpbmcgYnNkNDQKKyAgICAgICAgKiBjaG1vZCBGaWxldXRpbHMKKyAgICAgICAgKiBjaG93biBGaWxldXRpbHMKKyAgICAgICAgKiBjaHBhc3MgYnNkNDQKKyAgICAgICAgKiBjaHJvb3QgYnNkNDQKKyAgICAgICAgKiBjaSBSQ1MKKyAgICAgICAgKiBja3N1bSBUZXh0dXRpbHMKKyAgICAgICAgKiBja3R5cHMgZzc3CisgICAgICAgICogY2xpc3AgQ0xJU1AKKyAgICAgICAgKiBjbHJpIGJzZDQ0CisgICAgICAgICogY21haWwgeGJvYXJkCisgICAgICAgICogY21tZiBUZVgKKyAgICAgICAgKiBjbW9kZXh0IHhvcHQKKyAgICAgICAgKiBjbXAgRGlmZnV0aWxzCisgICAgICAgICogY28gUkNTCisgICAgICAgICogY29sIGJzZDQ0CisgICAgICAgICogY29sY3J0IGJzZDQ0CisgICAgICAgICogY29scm0gYnNkNDQKKyAgICAgICAgKiBjb2x1bW4gYnNkNDQKKyAgICAgICAgKiBjb21tIFRleHR1dGlscworICAgICAgICAqIGNvbXByZXNzIGJzZDQ0CisgICAgICAgICogY29tc2F0IGJzZDQ0CisgICAgICAgICogY29ubmVjdGQgYnNkNDQKKyAgICAgICAgKiBjcCBGaWxldXRpbHMKKyAgICAgICAgKiBjcGlja2VyIHhvcHQKKyAgICAgICAgKiBjcGlvIGNwaW8KKyAgICAgICAgKiBjcHAgR0NDCisgICAgICAgICogY3Bwc3RkaW4gcGVybAorICAgICAgICAqIGNyaWJiYWdlIGJzZDQ0CisgICAgICAgICogY3JvY2sgeG9wdAorICAgICAgICAqIGNzaCBic2Q0NAorICAgICAgICAqIGNzcGxpdCBUZXh0dXRpbHMKKyAgICAgICAgKiBjdGFncyBFbWFjcworICAgICAgICAqIGN0d20geG9wdAorICAgICAgICAqIGN1IFVVQ1AKKyAgICAgICAgKiBjdXQgVGV4dHV0aWxzCisgICAgICAgICogY3ZzIENWUworICAgICAgICAqIGN2c2NoZWNrIENWUworICAgICAgICAqIGN2dG1haWwgRW1hY3MKKyAgICAgICAgKiBjeHRlcm0geG9wdAorICAgICAKKyAgICAgICAgKiBkIEZpbGV1dGlscworICAgICAgICAqIGRhdGUgU2hlbGx1dGlscworICAgICAgICAqIGRjIGJjCisgICAgICAgICogZGQgRmlsZXV0aWxzCisgICAgICAgICogZGRkIERERAorICAgICAgICAqIGRlZmlkIElEIFV0aWxzCisgICAgICAgICogZGVsYXRleCBUZVgKKyAgICAgICAgKiBkZW1hbmdsZSBCaW51dGlscworICAgICAgICAqIGRlc2NlbmQgQ1ZTCisgICAgICAgICogZGV0ZXggVGVYCisgICAgICAgICogZGYgRmlsZXV0aWxzCisgICAgICAgICogZGh0cHBkIHBodHRwZAorICAgICAgICAqIGRpZmYgRGlmZnV0aWxzCisgICAgICAgICogZGlmZjMgRGlmZnV0aWxzCisgICAgICAgICogZGlmZnBwIGVuc2NyaXB0CisgICAgICAgICogZGlnZXN0LWRvYyBFbWFjcworICAgICAgICAqIGRpcHJlc3MgYnNkNDQKKyAgICAgICAgKiBkaXIgRmlsZXV0aWxzCisgICAgICAgICogZGlyY29sb3JzIEZpbGV1dGlscworICAgICAgICAqIGRpcm5hbWUgU2hlbGx1dGlscworICAgICAgICAqIGRpc2ggeG9wdAorICAgICAgICAqIGRpc2tsYWJlbCBic2Q0NAorICAgICAgICAqIGRpc2twYXJ0IGJzZDQ0CisgICAgICAgICogZGxkIGRsZAorICAgICAgICAqIGRtIGJzZDQ0CisgICAgICAgICogZG1lc2cgYnNkNDQKKyAgICAgICAgKiBkb3NjaGsgZG9zY2hrCisgICAgICAgICogZG94IHhvcHQKKyAgICAgICAgKiBkdSBGaWxldXRpbHMKKyAgICAgICAgKiBkdW1wIGJzZDQ0CisgICAgICAgICogZHVtcCBta2lzb2ZzCisgICAgICAgICogZHVtcGZzIGJzZDQ0CisgICAgICAgICogZHZpMnR0eSBUZVgKKyAgICAgICAgKiBkdmljb3B5IFRlWAorICAgICAgICAqIGR2aXBzIFRlWAorICAgICAgICAqIGR2aXR5cGUgVGVYCisgICAgIAorICAgICAgICAqIGVjYyBlY2MKKyAgICAgICAgKiBlY2hvIFNoZWxsdXRpbHMKKyAgICAgICAgKiBlZCBlZAorICAgICAgICAqIGVkaXQtcHIgR05BVFMKKyAgICAgICAgKiBlZGl0cmVzIHhyZXEKKyAgICAgICAgKiBlZHF1b3RhIGJzZDQ0CisgICAgICAgICogZWVwcm9tIGJzZDQ0CisgICAgICAgICogZWdyZXAgZ3JlcAorICAgICAgICAqIGVpZCBJRCBVdGlscworICAgICAgICAqIGVtYWNzIEVtYWNzCisgICAgICAgICogZW1hY3NjbGllbnQgRW1hY3MKKyAgICAgICAgKiBlbWFjc3NlcnZlciBFbWFjcworICAgICAgICAqIGVtYWNzdG9vbCBFbWFjcworICAgICAgICAqIGVtdSB4b3B0CisgICAgICAgICogZW5zY3JpcHQgZW5zY3JpcHQKKyAgICAgICAgKiBlbnYgU2hlbGx1dGlscworICAgICAgICAqIGVxbiBHcm9mZgorICAgICAgICAqIGVycm9yIGJzZDQ0CisgICAgICAgICogZXMgZXMKKyAgICAgICAgKiBlc2RlYnVnIGVzCisgICAgICAgICogZXRhZ3MgRW1hY3MKKyAgICAgICAgKiBleCBudmkKKyAgICAgICAgKiBleGFtcGxlIGdlb212aWV3CisgICAgICAgICogZXhpY3ljbG9nIEV4aW0KKyAgICAgICAgKiBleGlncmVwIEV4aW0KKyAgICAgICAgKiBleGltIEV4aW0KKyAgICAgICAgKiBleGltb24gRXhpbQorICAgICAgICAqIGV4aW1vbiBFeGltCisgICAgICAgICogZXhpbXN0YXRzIEV4aW0KKyAgICAgICAgKiBleGluZXh0IEV4aW0KKyAgICAgICAgKiBleGl3aGF0IEV4aW0KKyAgICAgICAgKiBleHBhbmQgVGV4dHV0aWxzCisgICAgICAgICogZXhwZWN0IERlamFHbnUKKyAgICAgICAgKiBleHByIFNoZWxsdXRpbHMKKyAgICAgICAgKiBleHRlcm0geG9wdAorICAgICAKKyAgICAgICAgKiBmMmMgZjJjCisgICAgICAgICogZmFjdG9yIGJzZDQ0CisgICAgICAgICogZmFrZW1haWwgRW1hY3MKKyAgICAgICAgKiBmYWxzZSBTaGVsbHV0aWxzCisgICAgICAgICogZmFzdGJvb3QgYnNkNDQKKyAgICAgICAgKiBmYXgycHMgSHlsYUZBWAorICAgICAgICAqIGZheGFsdGVyIEh5bGFGQVgKKyAgICAgICAgKiBmYXhhbnN3ZXIgSHlsYUZBWAorICAgICAgICAqIGZheGNvdmVyIEh5bGFGQVgKKyAgICAgICAgKiBmYXhkIEh5bGFGQVgKKyAgICAgICAgKiBmYXhkLnJlY3YgSHlsYUZBWAorICAgICAgICAqIGZheG1haWwgSHlsYUZBWAorICAgICAgICAqIGZheHF1aXQgSHlsYUZBWAorICAgICAgICAqIGZheHJjdmQgSHlsYUZBWAorICAgICAgICAqIGZheHJtIEh5bGFGQVgKKyAgICAgICAgKiBmYXhzdGF0IEh5bGFGQVgKKyAgICAgICAgKiBmYyBmMmMKKyAgICAgICAgKiBmZHJhdyB4b3B0CisgICAgICAgICogZmZlIGc3NworICAgICAgICAqIGZncmVwIGdyZXAKKyAgICAgICAgKiBmaWQgSUQgVXRpbHMKKyAgICAgICAgKiBmaWxlIGJzZDQ0CisgICAgICAgICogZmluZCBGaW5kdXRpbHMKKyAgICAgICAgKiBmaW5kMnBlcmwgcGVybAorICAgICAgICAqIGZpbmdlciBGaW5nZXIKKyAgICAgICAgKiBmaW5nZXJkIEZpbmdlcgorICAgICAgICAqIGZpc2ggYnNkNDQKKyAgICAgICAgKiBmaXhmb250cyBUZXhpbmZvCisgICAgICAgICogZml4aW5jLnN2cjQgR0NDCisgICAgICAgICogZml4aW5jbHVkZXMgR0NDCisgICAgICAgICogZmxleCBmbGV4CisgICAgICAgICogZmxleCsrIGZsZXgKKyAgICAgICAgKiBmbHl0aHJvdWdoIGdlb212aWV3CisgICAgICAgICogZm10IGJzZDQ0CisgICAgICAgICogZm5pZCBJRCBVdGlscworICAgICAgICAqIGZvbGQgVGV4dHV0aWxzCisgICAgICAgICogZm9udDJjIEdob3N0c2NyaXB0CisgICAgICAgICogZm9udGNvbnZlcnQgRm9udHV0aWxzCisgICAgICAgICogZm9ydGggVGlsZSBGb3J0aAorICAgICAgICAqIGZvcnRoaWNvbiBUaWxlIEZvcnRoCisgICAgICAgICogZm9ydGh0b29sIFRpbGUgRm9ydGgKKyAgICAgICAgKiBmb3J0dW5lIGJzZDQ0CisgICAgICAgICogZnByIGJzZDQ0CisgICAgICAgICogZnJlcSBJc3BlbGwKKyAgICAgICAgKiBmcmVxdGJsIElzcGVsbAorICAgICAgICAqIGZyb20gYnNkNDQKKyAgICAgICAgKiBmc2NrIGJzZDQ0CisgICAgICAgICogZnNwbGl0IGJzZDQ0CisgICAgICAgICogZnN0YXQgYnNkNDQKKyAgICAgICAgKiBmdHAgYnNkNDQKKyAgICAgICAgKiBmdHAgSW5ldHV0aWxzCisgICAgICAgICogZnRwZCBic2Q0NAorICAgICAgICAqIGZ0cGQgSW5ldHV0aWxzCisgICAgIAorICAgICAgICAqIGcrKyBHQ0MKKyAgICAgICAgKiBnYXMgQmludXRpbHMKKyAgICAgICAgKiBnYXdrIEdBV0sKKyAgICAgICAgKiBnY2FsIGdjYWwKKyAgICAgICAgKiBnY2MgR0NDCisgICAgICAgICogZ2NvcmUgYnNkNDQKKyAgICAgICAgKiBnZGIgR0RCCisgICAgICAgICogZ2VuY2xhc3MgbGliZysrCisgICAgICAgICogZ2VvbXN0dWZmIGdlb212aWV3CisgICAgICAgICogZ2V0dGV4dCBnZXR0ZXh0CisgICAgICAgICogZ2V0dHkgYnNkNDQKKyAgICAgICAgKiBnZnRvZHZpIFRlWAorICAgICAgICAqIGdmdG9wayBUZVgKKyAgICAgICAgKiBnZnR5cGUgVGVYCisgICAgICAgICogZ2hvc3R2aWV3IEdob3N0dmlldworICAgICAgICAqIGdpZCBJRCBVdGlscworICAgICAgICAqIGdpbnN1IGdlb212aWV3CisgICAgICAgICogZ2l0IEdJVAorICAgICAgICAqIGdpdGFjdGlvbiBHSVQKKyAgICAgICAgKiBnaXRjbXAgR0lUCisgICAgICAgICogZ2l0a2V5cyBHSVQKKyAgICAgICAgKiBnaXRtYXRjaCBHSVQKKyAgICAgICAgKiBnaXRtb3VudCBHSVQKKyAgICAgICAgKiBnaXRwcyBHSVQKKyAgICAgICAgKiBnaXRyZWRpciBHSVQKKyAgICAgICAgKiBnaXRyZ3JlcCBHSVQKKyAgICAgICAgKiBnaXR2aWV3IEdJVAorICAgICAgICAqIGdpdHdpcGUgR0lUCisgICAgICAgICogZ24gR04KKyAgICAgICAgKiBnbmFucyBHbmFucworICAgICAgICAqIGduYW5zbGF0b3IgR25hbnMKKyAgICAgICAgKiBnbmF0cyBHTkFUUworICAgICAgICAqIGdudWNoZXNzIENoZXNzCisgICAgICAgICogZ251Y2hlc3NjIENoZXNzCisgICAgICAgICogZ251Y2hlc3NuIENoZXNzCisgICAgICAgICogZ251Y2hlc3NyIENoZXNzCisgICAgICAgICogZ251Y2hlc3N4IENoZXNzCisgICAgICAgICogZ251Y2xpZW50IGdudXNlcnYKKyAgICAgICAgKiBnbnVkb2l0IGdudXNlcnYKKyAgICAgICAgKiBnbnVwZGlzcCBTaG9naQorICAgICAgICAqIGdudXBsb3QgZ251cGxvdAorICAgICAgICAqIGdudXBsb3RfeDExIGdudXBsb3QKKyAgICAgICAgKiBnbnVzZXJ2IGdudXNlcnYKKyAgICAgICAgKiBnbnVzaG9naSBTaG9naQorICAgICAgICAqIGdudXNob2dpciBTaG9naQorICAgICAgICAqIGdudXNob2dpeCBTaG9naQorICAgICAgICAqIGdvIEdudUdvCisgICAgICAgICogZ3BjIHhvcHQKKyAgICAgICAgKiBncGMgeHJlcQorICAgICAgICAqIGdwZXJmIGNwZXJmCisgICAgICAgICogZ3BlcmYgbGliZysrCisgICAgICAgICogZ3Byb2YgQmludXRpbHMKKyAgICAgICAgKiBncmFmZml0aSBnZW9tdmlldworICAgICAgICAqIGdyYXBoIEdyYXBoaWNzCisgICAgICAgICogZ3JlcCBncmVwCisgICAgICAgICogZ3JvZHZpIEdyb2ZmCisgICAgICAgICogZ3JvZmYgR3JvZmYKKyAgICAgICAgKiBncm9wcyBHcm9mZgorICAgICAgICAqIGdyb3R0eSBHcm9mZgorICAgICAgICAqIGdyb3VwcyBTaGVsbHV0aWxzCisgICAgICAgICogZ3MgR2hvc3RzY3JpcHQKKyAgICAgICAgKiBnc2JqIEdob3N0c2NyaXB0CisgICAgICAgICogZ3NkaiBHaG9zdHNjcmlwdAorICAgICAgICAqIGdzbGogR2hvc3RzY3JpcHQKKyAgICAgICAgKiBnc2xwIEdob3N0c2NyaXB0CisgICAgICAgICogZ3NuZCBHaG9zdHNjcmlwdAorICAgICAgICAqIGdzcmVuZGVyZm9udCBGb250dXRpbHMKKyAgICAgICAgKiBndW56aXAgZ3ppcAorICAgICAgICAqIGd2Y2xvY2sgZ2VvbXZpZXcKKyAgICAgICAgKiBnd20geG9wdAorICAgICAgICAqIGd6ZXhlIGd6aXAKKyAgICAgICAgKiBnemlwIGd6aXAKKyAgICAgCisgICAgICAgICogaDJwaCBwZXJsCisgICAgICAgICogaDJwbCBwZXJsCisgICAgICAgICogaGFjayBic2Q0NAorICAgICAgICAqIGhhbmdtYW4gYnNkNDQKKyAgICAgICAgKiBoZWFkIFRleHR1dGlscworICAgICAgICAqIGhlbGxvIGhlbGxvCisgICAgICAgICogaGV4ZHVtcCBic2Q0NAorICAgICAgICAqIGhleGwgRW1hY3MKKyAgICAgICAgKiBoaW5nZSBnZW9tdmlldworICAgICAgICAqIGhvc3RuYW1lIFNoZWxsdXRpbHMKKyAgICAgICAgKiBocDJ4eCBocDJ4eAorICAgICAgICAqIGh0ZXJtIHhvcHQKKyAgICAgICAgKiBodG1sZW5jb2RlIHBodHRwZAorICAgICAgICAqIGh0dHBkIGFwYWNoZQorICAgICAgICAqIGh0dHBkZWNvZGUgcGh0dHBkCisgICAgIAorICAgICAgICAqIGkxOG5PbHdtVjIgeG9wdAorICAgICAgICAqIGkybWlmIHhvcHQKKyAgICAgICAgKiBpY28geG9wdAorICAgICAgICAqIGljbyB4cmVxCisgICAgICAgICogaWQgU2hlbGx1dGlscworICAgICAgICAqIGlkZW50IFJDUworICAgICAgICAqIGlmY29uZmlnIGJzZDQ0CisgICAgICAgICogaWZuYW1lcyBBdXRvY29uZgorICAgICAgICAqIEltYWdlTWFnaWNrIHhvcHQKKyAgICAgICAgKiBpbWFnZXRvIEZvbnR1dGlscworICAgICAgICAqIGltYW4geG9wdAorICAgICAgICAqIGltZ3JvdGF0ZSBGb250dXRpbHMKKyAgICAgICAgKiBpbmRlbnQgaW5kZW50CisgICAgICAgICogaW5keGJpYiBHcm9mZgorICAgICAgICAqIGluZXRkIGJzZDQ0CisgICAgICAgICogaW5ldGQgSW5ldHV0aWxzCisgICAgICAgICogaW5mbyBUZXhpbmZvCisgICAgICAgICogaW5pbWYgVGVYCisgICAgICAgICogaW5pdCBic2Q0NAorICAgICAgICAqIGluaXRleCBUZVgKKyAgICAgICAgKiBpbm4gYnNkNDQKKyAgICAgICAgKiBpbnN0YWxsIEZpbGV1dGlscworICAgICAgICAqIGlvc3RhdCBic2Q0NAorICAgICAgICAqIGlzb2RpYWcgbWtpc29mcworICAgICAgICAqIGlzb2R1bXAgbWtpc29mcworICAgICAgICAqIGlzcGVsbCBJc3BlbGwKKyAgICAgICAgKiBpeHRlcm0geG9wdAorICAgICAgICAqIGl4eCB4b3B0CisgICAgIAorICAgICAgICAqIGpvaW4gVGV4dHV0aWxzCisgICAgICAgICogam90IGJzZDQ0CisgICAgICAgICogam92ZSBic2Q0NAorICAgICAKKyAgICAgICAgKiBrZGVzdHJveSBic2Q0NAorICAgICAgICAqIGtkdW1wIGJzZDQ0CisgICAgICAgICoga2VybWl0IGJzZDQ0CisgICAgICAgICoga2dhbWVzIHhvcHQKKyAgICAgICAgKiBrZ21vbiBic2Q0NAorICAgICAgICAqIGtpbGwgYnNkNDQKKyAgICAgICAgKiBraW5pdCBic2Q0NAorICAgICAgICAqIGtpbnB1dDIgeG9wdAorICAgICAgICAqIGtsaXN0IGJzZDQ0CisgICAgICAgICoga3Bhc3N3ZGQgYnNkNDQKKyAgICAgICAgKiBrc3J2dGd0IGJzZDQ0CisgICAgICAgICoga3Rlcm0geG9wdAorICAgICAgICAqIGt0cmFjZSBic2Q0NAorICAgICAKKyAgICAgICAgKiBsYW0gYnNkNDQKKyAgICAgICAgKiBsYXJuIGJzZDQ0CisgICAgICAgICogbGFzZXJnbnUgZ251cGxvdAorICAgICAgICAqIGxhc3QgYnNkNDQKKyAgICAgICAgKiBsYXN0Y29tbSBic2Q0NAorICAgICAgICAqIGxhdGV4IFRlWAorICAgICAgICAqIGxjbG9jayB4b3B0CisgICAgICAgICogbGQgQmludXRpbHMKKyAgICAgICAgKiBsZWF2ZSBic2Q0NAorICAgICAgICAqIGxlc3MgbGVzcworICAgICAgICAqIGxlc3NrZXkgbGVzcworICAgICAgICAqIGxpYmF2Y2FsbC5hIGZmY2FsbAorICAgICAgICAqIGxpYmJmZC5hIEJpbnV0aWxzCisgICAgICAgICogbGliYmZkLmEgR0RCCisgICAgICAgICogbGliYnpyLmEgRm9udHV0aWxzCisgICAgICAgICogbGliYy5hIEMgTGlicmFyeQorICAgICAgICAqIGxpYmNvbXBhdC5hIGJzZDQ0CisgICAgICAgICogbGliY3Vyc2VzLmEgYnNkNDQKKyAgICAgICAgKiBsaWJjdXJzZXMuYSBuY3Vyc2VzCisgICAgICAgICogbGliZGN1cnNlcy5hIG5jdXJzZXMKKyAgICAgICAgKiBsaWJlZGl0LmEgYnNkNDQKKyAgICAgICAgKiBsaWJGNzcuYSBmMmMKKyAgICAgICAgKiBsaWJGNzcuYSBnNzcKKyAgICAgICAgKiBsaWJnKysuYSBsaWJnKysKKyAgICAgICAgKiBsaWJnZGJtLmEgZ2RibQorICAgICAgICAqIGxpYmdmLmEgRm9udHV0aWxzCisgICAgICAgICogbGliZ21wLmEgZ21wCisgICAgICAgICogbGliZ25hbnNsaWIuYSBHbmFucworICAgICAgICAqIGxpYmdudXNzbC5hIGdudXNzbAorICAgICAgICAqIGxpYkk3Ny5hIGYyYworICAgICAgICAqIGxpYkk3Ny5hIGc3NworICAgICAgICAqIGxpYmt2bS5hIGJzZDQ0CisgICAgICAgICogbGlibS5hIGJzZDQ0CisgICAgICAgICogbGlibmN1cnNlcy5hIG5jdXJzZXMKKyAgICAgICAgKiBsaWJuaWhjbC5hIE5JSENMCisgICAgICAgICogbGlibmloY2xtaS5hIE5JSENMCisgICAgICAgICogbGlibmloY2x2ZWMuYSBOSUhDTAorICAgICAgICAqIGxpYm5scy5hIHhyZXEKKyAgICAgICAgKiBsaWJvYmplY3RzLmEgbGlib2JqZWN0cworICAgICAgICAqIGxpYm9jdGF2ZS5hIE9jdGF2ZQorICAgICAgICAqIGxpYm9sZFguYSB4cmVxCisgICAgICAgICogbGlicGJtLmEgRm9udHV0aWxzCisgICAgICAgICogbGliUEVYdC5hIHhvcHQKKyAgICAgICAgKiBsaWJway5hIEZvbnR1dGlscworICAgICAgICAqIGxpYnJlc29sdi5hIGJzZDQ0CisgICAgICAgICogbGlicnBjLmEgYnNkNDQKKyAgICAgICAgKiBsaWJzaXBwLmEgU0lQUAorICAgICAgICAqIGxpYnRjbC5hIERlamFHbnUKKyAgICAgICAgKiBsaWJ0ZWxuZXQuYSBic2Q0NAorICAgICAgICAqIGxpYnRlcm0uYSBic2Q0NAorICAgICAgICAqIGxpYnRlcm1jYXAuYSBUZXJtY2FwCisgICAgICAgICogbGlidGZtLmEgRm9udHV0aWxzCisgICAgICAgICogbGlidGlmZi5hIHRpZmYKKyAgICAgICAgKiBsaWJ1dGlsLmEgYnNkNDQKKyAgICAgICAgKiBsaWJ2YWNhbGwuYSBmZmNhbGwKKyAgICAgICAgKiBsaWJXYy5hIHhvcHQKKyAgICAgICAgKiBsaWJ3aWRnZXRzLmEgRm9udHV0aWxzCisgICAgICAgICogbGliWC5hIHhyZXEKKyAgICAgICAgKiBsaWJYYXUuYSB4cmVxCisgICAgICAgICogbGliWGF3LmEgeHJlcQorICAgICAgICAqIGxpYlhjcC5hIHhvcHQKKyAgICAgICAgKiBsaWJYY3UuYSB4b3B0CisgICAgICAgICogbGliWGRtY3AuYSB4cmVxCisgICAgICAgICogbGliWG1wLmEgeG9wdAorICAgICAgICAqIGxpYlhtdS5hIHhyZXEKKyAgICAgICAgKiBsaWJYTy5hIHhvcHQKKyAgICAgICAgKiBsaWJYb3AuYSB4b3B0CisgICAgICAgICogbGliWHAuYSB4b3B0CisgICAgICAgICogbGliWHBleC5hIHhvcHQKKyAgICAgICAgKiBsaWJYdC5hIHhvcHQKKyAgICAgICAgKiBsaWJYdC5hIHhyZXEKKyAgICAgICAgKiBsaWJYd2NoYXIuYSB4b3B0CisgICAgICAgICogbGlieS5hIGJzZDQ0CisgICAgICAgICogbGliWWdsLmEgWWdsCisgICAgICAgICogbGlkIElEIFV0aWxzCisgICAgICAgICogbGltbiBGb250dXRpbHMKKyAgICAgICAgKiBsaXN0cmVzIHhvcHQKKyAgICAgICAgKiBsaXN0cmVzIHhyZXEKKyAgICAgICAgKiBsa2JpYiBHcm9mZgorICAgICAgICAqIGxuIEZpbGV1dGlscworICAgICAgICAqIGxvY2F0ZSBGaW5kdXRpbHMKKyAgICAgICAgKiBsb2NrIGJzZDQ0CisgICAgICAgICogbG9nY3Z0LWlwMm4gcGh0dHBkCisgICAgICAgICogbG9nZ2VyIGJzZDQ0CisgICAgICAgICogbG9naW4gYnNkNDQKKyAgICAgICAgKiBsb2duYW1lIFNoZWxsdXRpbHMKKyAgICAgICAgKiBsb2dvIHVjYmxvZ28KKyAgICAgICAgKiBsb29rYmliIEdyb2ZmCisgICAgICAgICogbG9yZGVyIGJzZDQ0CisgICAgICAgICogbHByIGJzZDQ0CisgICAgICAgICogbHMgRmlsZXV0aWxzCisgICAgICAgICogbHlueCBseW54CisgICAgIAorICAgICAgICAqIG00IG00CisgICAgICAgICogbWFpbCBic2Q0NAorICAgICAgICAqIG1haWwtZmlsZXMgU2hhcnV0aWxzCisgICAgICAgICogbWFpbHEgc21haWwKKyAgICAgICAgKiBtYWlsc2hhciBTaGFydXRpbHMKKyAgICAgICAgKiBtYWtlIG1ha2UKKyAgICAgICAgKiBtYWtlLWRvY2ZpbGUgRW1hY3MKKyAgICAgICAgKiBtYWtlLXBhdGggRW1hY3MKKyAgICAgICAgKiBtYWtlaW5kZXggVGVYCisgICAgICAgICogbWFrZWluZm8gVGV4aW5mbworICAgICAgICAqIE1ha2VUZVhQSyBUZVgKKyAgICAgICAgKiBtYW4gYnNkNDQKKyAgICAgICAgKiBtYW4tbWFjcm9zIEdyb2ZmCisgICAgICAgICogbWFuaXZpZXcgZ2VvbXZpZXcKKyAgICAgICAgKiBtYXR0cmliIG10b29scworICAgICAgICAqIG1hemUgeG9wdAorICAgICAgICAqIG1hemUgeHJlcQorICAgICAgICAqIG1hemV3YXIgeG9wdAorICAgICAgICAqIG1jIG1jCisgICAgICAgICogbWNkIG10b29scworICAgICAgICAqIG1jb3B5IG10b29scworICAgICAgICAqIG1jc2VydiBtYworICAgICAgICAqIG1kNXN1bSBUZXh0dXRpbHMKKyAgICAgICAgKiBtZGVsIG10b29scworICAgICAgICAqIG1kaXIgbXRvb2xzCisgICAgICAgICogbWUtbWFjcm9zIEdyb2ZmCisgICAgICAgICogbWVkaXQyZ3YgZ2VvbXZpZXcKKyAgICAgICAgKiBtZXJnZSBSQ1MKKyAgICAgICAgKiBtZXNnIGJzZDQ0CisgICAgICAgICogbWYgVGVYCisgICAgICAgICogbWZvcm1hdCBtdG9vbHMKKyAgICAgICAgKiBtZnQgVGVYCisgICAgICAgICogbWdkaWZmIHhvcHQKKyAgICAgICAgKiBtaCBic2Q0NAorICAgICAgICAqIG1pbGxlIGJzZDQ0CisgICAgICAgICogbWthZm1tYXAgZW5zY3JpcHQKKyAgICAgICAgKiBta2NhY2hlIEdOCisgICAgICAgICogbWtkZXAgYnNkNDQKKyAgICAgICAgKiBta2RpciBGaWxldXRpbHMKKyAgICAgICAgKiBta2ZpZm8gRmlsZXV0aWxzCisgICAgICAgICogbWtpZCBJRCBVdGlscworICAgICAgICAqIG1raXNvZnMgbWtpc29mcworICAgICAgICAqIG1rbG9jYWxlIGJzZDQ0CisgICAgICAgICogbWttYW5pZmVzdCBtdG9vbHMKKyAgICAgICAgKiBta21mIGJzZDQ0CisgICAgICAgICogbWttb2R1bGVzIENWUworICAgICAgICAqIG1rbm9kIEZpbGV1dGlscworICAgICAgICAqIG1rc3RyIGJzZDQ0CisgICAgICAgICogbWxhYmVsIG10b29scworICAgICAgICAqIG1tLW1hY3JvcyBHcm9mZgorICAgICAgICAqIG1tZCBtdG9vbHMKKyAgICAgICAgKiBtb25vcCBic2Q0NAorICAgICAgICAqIG1vcmUgYnNkNDQKKyAgICAgICAgKiBtb3JzZSBic2Q0NAorICAgICAgICAqIG1vdW50IGJzZDQ0CisgICAgICAgICogbW91bnRkIGJzZDQ0CisgICAgICAgICogbW92ZW1haWwgRW1hY3MKKyAgICAgICAgKiBtcHJvZiBic2Q0NAorICAgICAgICAqIG1yZCBtdG9vbHMKKyAgICAgICAgKiBtcmVhZCBtdG9vbHMKKyAgICAgICAgKiBtcmVuIG10b29scworICAgICAgICAqIG1zLW1hY3JvcyBHcm9mZgorICAgICAgICAqIG1zZ2NtcCBnZXR0ZXh0CisgICAgICAgICogbXNnZm10IGdldHRleHQKKyAgICAgICAgKiBtc2dtZXJnZSBnZXR0ZXh0CisgICAgICAgICogbXNncyBic2Q0NAorICAgICAgICAqIG1zZ3VuZm10IGdldHRleHQKKyAgICAgICAgKiBtc3QgU21hbGx0YWxrCisgICAgICAgICogbXQgY3BpbworICAgICAgICAqIG10ZXJtIHhvcHQKKyAgICAgICAgKiBtdHJlZSBic2Q0NAorICAgICAgICAqIG10eXBlIG10b29scworICAgICAgICAqIG11bGUgTVVMRQorICAgICAgICAqIG11bmNoZXIgeG9wdAorICAgICAgICAqIG12IEZpbGV1dGlscworICAgICAgICAqIG12ZGlyIEZpbGV1dGlscworICAgICAgICAqIG13cml0ZSBtdG9vbHMKKyAgICAgCisgICAgICAgICogTkR2aWV3IGdlb212aWV3CisgICAgICAgICogbmV0aGFjayBOZXRIYWNrCisgICAgICAgICogbmV0c3RhdCBic2Q0NAorICAgICAgICAqIG5ld2ZzIGJzZDQ0CisgICAgICAgICogbmZzZCBic2Q0NAorICAgICAgICAqIG5mc2lvZCBic2Q0NAorICAgICAgICAqIG5mc3N0YXQgYnNkNDQKKyAgICAgICAgKiBuaWNlIFNoZWxsdXRpbHMKKyAgICAgICAgKiBubCBUZXh0dXRpbHMKKyAgICAgICAgKiBubG1jb252IEJpbnV0aWxzCisgICAgICAgICogbm0gQmludXRpbHMKKyAgICAgICAgKiBub2h1cCBTaGVsbHV0aWxzCisgICAgICAgICogbm9zZSBnZW9tdmlldworICAgICAgICAqIG5vdGlmeSBIeWxhRkFYCisgICAgICAgICogbnJvZmYgR3JvZmYKKyAgICAgICAgKiBudW1iZXIgYnNkNDQKKyAgICAgCisgICAgICAgICogb2JqYyBHQ0MKKyAgICAgICAgKiBvYmpjb3B5IEJpbnV0aWxzCisgICAgICAgICogb2JqZHVtcCBCaW51dGlscworICAgICAgICAqIG9iamVjdGl2ZS1jIEdDQworICAgICAgICAqIG9ic3QtYm9vdCBPQlNUCisgICAgICAgICogb2JzdC1DQyBPQlNUCisgICAgICAgICogb2JzdC1jY3QgT0JTVAorICAgICAgICAqIG9ic3QtY2djIE9CU1QKKyAgICAgICAgKiBvYnN0LWNtcCBPQlNUCisgICAgICAgICogb2JzdC1jbnQgT0JTVAorICAgICAgICAqIG9ic3QtY3BjbnQgT0JTVAorICAgICAgICAqIG9ic3QtY3N6IE9CU1QKKyAgICAgICAgKiBvYnN0LWRpciBPQlNUCisgICAgICAgICogb2JzdC1kbXAgT0JTVAorICAgICAgICAqIG9ic3QtZ2VuIE9CU1QKKyAgICAgICAgKiBvYnN0LWdzaCBPQlNUCisgICAgICAgICogb2JzdC1pbml0IE9CU1QKKyAgICAgICAgKiBvYnN0LXNjcCBPQlNUCisgICAgICAgICogb2JzdC1zaWwgT0JTVAorICAgICAgICAqIG9ic3Qtc3RmIE9CU1QKKyAgICAgICAgKiBvY2xvY2sgeHJlcQorICAgICAgICAqIG9jdGF2ZSBPY3RhdmUKKyAgICAgICAgKiBvZCBUZXh0dXRpbHMKKyAgICAgICAgKiBvbGVvIE9sZW8KKyAgICAgICAgKiBvcmEtZXhhbXBsZXMgeG9wdAorICAgICAKKyAgICAgICAgKiBwMmMgcDJjCisgICAgICAgICogcGFnZXNpemUgYnNkNDQKKyAgICAgICAgKiBwYWxldHRlIHhvcHQKKyAgICAgICAgKiBwYXNjYWwgYnNkNDQKKyAgICAgICAgKiBwYXNzd2QgYnNkNDQKKyAgICAgICAgKiBwYXN0ZSBUZXh0dXRpbHMKKyAgICAgICAgKiBwYXRjaCBwYXRjaAorICAgICAgICAqIHBhdGdlbiBUZVgKKyAgICAgICAgKiBwYXRoYWxpYXMgYnNkNDQKKyAgICAgICAgKiBwYXRoY2hrIFNoZWxsdXRpbHMKKyAgICAgICAgKiBwYXRodG8gc21haWwKKyAgICAgICAgKiBwYXggYnNkNDQKKyAgICAgICAgKiBwYm1wbHVzIHhvcHQKKyAgICAgICAgKiBwZXJsIHBlcmwKKyAgICAgICAgKiBwZmJ0b3BzIEdyb2ZmCisgICAgICAgICogcGhhbnRhc2lhIGJzZDQ0CisgICAgICAgICogcGh0dHBkIHBodHRwZAorICAgICAgICAqIHBpYyBHcm9mZgorICAgICAgICAqIHBpY28gcGluZQorICAgICAgICAqIHBpZyBic2Q0NAorICAgICAgICAqIHBpbmUgcGluZQorICAgICAgICAqIHBpbmcgYnNkNDQKKyAgICAgICAgKiBwaXhlZGl0IHhvcHQKKyAgICAgICAgKiBwaXhtYXAgeG9wdAorICAgICAgICAqIHBrdG9nZiBUZVgKKyAgICAgICAgKiBwa3R5cGUgVGVYCisgICAgICAgICogcGxhaWQgeG9wdAorICAgICAgICAqIHBsb3QyZmlnIEdyYXBoaWNzCisgICAgICAgICogcGxvdDJwbG90IEdyYXBoaWNzCisgICAgICAgICogcGxvdDJwcyBHcmFwaGljcworICAgICAgICAqIHBsb3QydGVrIEdyYXBoaWNzCisgICAgICAgICogcGx0b3RmIFRlWAorICAgICAgICAqIHBvbGxyY3ZkIEh5bGFGQVgKKyAgICAgICAgKiBwb20gYnNkNDQKKyAgICAgICAgKiBwb29sdHlwZSBUZVgKKyAgICAgICAgKiBwb3J0bWFwIGJzZDQ0CisgICAgICAgICogcHB0IGJzZDQ0CisgICAgICAgICogcHIgVGV4dHV0aWxzCisgICAgICAgICogcHItYWRkciBHTkFUUworICAgICAgICAqIHByLWVkaXQgR05BVFMKKyAgICAgICAgKiBwcmltZXMgYnNkNDQKKyAgICAgICAgKiBwcmludGVudiBTaGVsbHV0aWxzCisgICAgICAgICogcHJpbnRmIFNoZWxsdXRpbHMKKyAgICAgICAgKiBwcm90b2l6ZSBHQ0MKKyAgICAgICAgKiBwcm94eWdhcmIgU3Bpbm5lcgorICAgICAgICAqIHBzIGJzZDQ0CisgICAgICAgICogcHMyYXNjaWkgR2hvc3RzY3JpcHQKKyAgICAgICAgKiBwczJlcHNpIEdob3N0c2NyaXB0CisgICAgICAgICogcHMyZmF4IEh5bGFGQVgKKyAgICAgICAgKiBwc2JiIEdyb2ZmCisgICAgICAgICogcHN0YXQgYnNkNDQKKyAgICAgICAgKiBwc3ljaG8geG9wdAorICAgICAgICAqIHB0ZXN0ZXIgcGh0dHBkCisgICAgICAgICogcHR4IHB0eAorICAgICAgICAqIHB1YmRpYysgeG9wdAorICAgICAgICAqIHB1enpsZSB4b3B0CisgICAgICAgICogcHV6emxlIHhyZXEKKyAgICAgICAgKiBwd2QgU2hlbGx1dGlscworICAgICAgICAqIHB5cmFtaWQgeG9wdAorICAgICAKKyAgICAgICAgKiBxdWVyeS1wciBHTkFUUworICAgICAgICAqIHF1aXogYnNkNDQKKyAgICAgICAgKiBxdW90IGJzZDQ0CisgICAgICAgICogcXVvdGEgYnNkNDQKKyAgICAgICAgKiBxdW90YWNoZWNrIGJzZDQ0CisgICAgICAgICogcXVvdGFvbiBic2Q0NAorICAgICAKKyAgICAgICAgKiByYWluIGJzZDQ0CisgICAgICAgICogcmFuZG9tIGJzZDQ0CisgICAgICAgICogcmFubGliIEJpbnV0aWxzCisgICAgICAgICogcmJvb3RkIGJzZDQ0CisgICAgICAgICogcmMgcmMKKyAgICAgICAgKiByY3AgYnNkNDQKKyAgICAgICAgKiByY3AgSW5ldHV0aWxzCisgICAgICAgICogcmNzIFJDUworICAgICAgICAqIHJjcy10by1jdnMgQ1ZTCisgICAgICAgICogcmNzMmxvZyBFbWFjcworICAgICAgICAqIHJjc2RpZmYgUkNTCisgICAgICAgICogcmNzZnJlZXplIFJDUworICAgICAgICAqIHJjc21lcmdlIFJDUworICAgICAgICAqIHJkaXN0IGJzZDQ0CisgICAgICAgICogcmVib290IGJzZDQ0CisgICAgICAgICogcmVjb2RlIHJlY29kZQorICAgICAgICAqIHJlY3ZzdGF0cyBIeWxhRkFYCisgICAgICAgICogcmVkIGVkCisgICAgICAgICogcmVmZXIgR3JvZmYKKyAgICAgICAgKiByZW1zeW5jIFNoYXJ1dGlscworICAgICAgICAqIHJlbmljZSBic2Q0NAorICAgICAgICAqIHJlcHF1b3RhIGJzZDQ0CisgICAgICAgICogcmVzdG9yZSBic2Q0NAorICAgICAgICAqIHJldiBic2Q0NAorICAgICAgICAqIHJleGVjZCBic2Q0NAorICAgICAgICAqIHJleGVjZCBJbmV0dXRpbHMKKyAgICAgICAgKiBybG9nIFJDUworICAgICAgICAqIHJsb2dpbiBic2Q0NAorICAgICAgICAqIHJsb2dpbiBJbmV0dXRpbHMKKyAgICAgICAgKiBybG9naW5kIGJzZDQ0CisgICAgICAgICogcmxvZ2luZCBJbmV0dXRpbHMKKyAgICAgICAgKiBybSBGaWxldXRpbHMKKyAgICAgICAgKiBybWFpbCBic2Q0NAorICAgICAgICAqIHJtZGlyIEZpbGV1dGlscworICAgICAgICAqIHJtdCBjcGlvCisgICAgICAgICogcm10IHRhcgorICAgICAgICAqIHJvYm90cyBic2Q0NAorICAgICAgICAqIHJvZ3VlIGJzZDQ0CisgICAgICAgICogcm91dGUgYnNkNDQKKyAgICAgICAgKiByb3V0ZWQgYnNkNDQKKyAgICAgICAgKiByciB4b3B0CisgICAgICAgICogcnMgYnNkNDQKKyAgICAgICAgKiByc2ggYnNkNDQKKyAgICAgICAgKiByc2ggSW5ldHV0aWxzCisgICAgICAgICogcnNoZCBic2Q0NAorICAgICAgICAqIHJzaGQgSW5ldHV0aWxzCisgICAgICAgICogcnNtdHAgc21haWwKKyAgICAgICAgKiBydW5xIHNtYWlsCisgICAgICAgICogcnVudGVzdCBEZWphR251CisgICAgICAgICogcnVudGVzdC5leHAgRGVqYUdudQorICAgICAgICAqIHJ1cHRpbWUgYnNkNDQKKyAgICAgICAgKiByd2hvIGJzZDQ0CisgICAgICAgICogcndob2QgYnNkNDQKKyAgICAgCisgICAgICAgICogczJwIHBlcmwKKyAgICAgICAgKiBzYWlsIGJzZDQ0CisgICAgICAgICogc2FvaW1hZ2UgU0FPaW1hZ2UKKyAgICAgICAgKiBzYXZlY29yZSBic2Q0NAorICAgICAgICAqIHNjIGJzZDQ0CisgICAgICAgICogc2NjcyBic2Q0NAorICAgICAgICAqIHNjY3MycmNzIENWUworICAgICAgICAqIHNjZGlzcCB4b3B0CisgICAgICAgICogc2NyZWVuIHNjcmVlbgorICAgICAgICAqIHNjcmlwdCBic2Q0NAorICAgICAgICAqIHNjc2lmb3JtYXQgYnNkNDQKKyAgICAgICAgKiBzY3RleHQgeG9wdAorICAgICAgICAqIHNkaWZmIERpZmZ1dGlscworICAgICAgICAqIHNlZCBzZWQKKyAgICAgICAgKiBzZW5kLXByIEdOQVRTCisgICAgICAgICogc2VuZGZheCBIeWxhRkFYCisgICAgICAgICogc2VuZG1haWwgYnNkNDQKKyAgICAgICAgKiBzZ2kyZmF4IEh5bGFGQVgKKyAgICAgICAgKiBzZ24gR04KKyAgICAgICAgKiBzaCBic2Q0NAorICAgICAgICAqIHNoYXIgU2hhcnV0aWxzCisgICAgICAgICogc2hpbmJ1biB4b3B0CisgICAgICAgICogc2hvZ2kgU2hvZ2kKKyAgICAgICAgKiBzaG93Zm9udCB4b3B0CisgICAgICAgICogc2hvd21vdW50IGJzZDQ0CisgICAgICAgICogc2h1dGRvd24gYnNkNDQKKyAgICAgICAgKiBzaXplIEJpbnV0aWxzCisgICAgICAgICogc2ozIHhvcHQKKyAgICAgICAgKiBzanhhIHhvcHQKKyAgICAgICAgKiBzbGF0dGFjaCBic2Q0NAorICAgICAgICAqIHNsZWVwIFNoZWxsdXRpbHMKKyAgICAgICAgKiBzbGlwbG9naW4gYnNkNDQKKyAgICAgICAgKiBzbWFpbCBzbWFpbAorICAgICAgICAqIHNtdHBkIHNtYWlsCisgICAgICAgICogc25ha2UgYnNkNDQKKyAgICAgICAgKiBzbmZ0b2JkZiB4b3B0CisgICAgICAgICogc29lbGltIEdyb2ZmCisgICAgICAgICogc29ydCBUZXh0dXRpbHMKKyAgICAgICAgKiBzb3Myb2JzdCBPQlNUCisgICAgICAgICogc3BpZGVyIHhvcHQKKyAgICAgICAgKiBzcGxpdCBUZXh0dXRpbHMKKyAgICAgICAgKiBzdGFydHNsaXAgYnNkNDQKKyAgICAgICAgKiBzdGVyZW8gZ2VvbXZpZXcKKyAgICAgICAgKiBzdGYgT0JTVAorICAgICAgICAqIHN0cmluZ3MgQmludXRpbHMKKyAgICAgICAgKiBzdHJpcCBCaW51dGlscworICAgICAgICAqIHN0dHkgU2hlbGx1dGlscworICAgICAgICAqIHN1IFNoZWxsdXRpbHMKKyAgICAgICAgKiBzdW0gVGV4dHV0aWxzCisgICAgICAgICogc3VwZXJvcHQgU3VwZXJvcHQKKyAgICAgICAgKiBzd2Fwb24gYnNkNDQKKyAgICAgICAgKiBzd2VlcCBnZW9tdmlldworICAgICAgICAqIHN5bmMgYnNkNDQKKyAgICAgICAgKiBzeXNjdGwgYnNkNDQKKyAgICAgICAgKiBzeXNsb2cgSW5ldHV0aWxzCisgICAgICAgICogc3lzbG9nZCBic2Q0NAorICAgICAgICAqIHN5c2xvZ2QgSW5ldHV0aWxzCisgICAgICAgICogc3lzdGF0IGJzZDQ0CisgICAgIAorICAgICAgICAqIHRhYnMgVGVybXV0aWxzCisgICAgICAgICogdGFjIFRleHR1dGlscworICAgICAgICAqIHRhY2tkb3duIGdlb212aWV3CisgICAgICAgICogdGFpbCBUZXh0dXRpbHMKKyAgICAgICAgKiB0YWludHBlcmwgcGVybAorICAgICAgICAqIHRhbGsgYnNkNDQKKyAgICAgICAgKiB0YWxrIEluZXR1dGlscworICAgICAgICAqIHRhbGtkIGJzZDQ0CisgICAgICAgICogdGFsa2QgSW5ldHV0aWxzCisgICAgICAgICogdGFuZ2xlIFRlWAorICAgICAgICAqIHRhciB0YXIKKyAgICAgICAgKiB0YmwgR3JvZmYKKyAgICAgICAgKiB0Y2FsIGdjYWwKKyAgICAgICAgKiB0Y2wgRGVqYUdudQorICAgICAgICAqIHRjbHNoIERlamFHbnUKKyAgICAgICAgKiB0Y29weSBic2Q0NAorICAgICAgICAqIHRjcCBFbWFjcworICAgICAgICAqIHRlZSBTaGVsbHV0aWxzCisgICAgICAgICogdGVrMnBsb3QgR3JhcGhpY3MKKyAgICAgICAgKiB0ZWxuZXQgYnNkNDQKKyAgICAgICAgKiB0ZWxuZXQgSW5ldHV0aWxzCisgICAgICAgICogdGVsbmV0ZCBic2Q0NAorICAgICAgICAqIHRlbG5ldGQgSW5ldHV0aWxzCisgICAgICAgICogdGVzdCBTaGVsbHV0aWxzCisgICAgICAgICogdGVzdC1nKysgRGVqYUdudQorICAgICAgICAqIHRlc3QtdG9vbCBEZWphR251CisgICAgICAgICogdGV0cmlzIGJzZDQ0CisgICAgICAgICogdGV4IFRlWAorICAgICAgICAqIHRleDNwYXRjaCBUZXhpbmZvCisgICAgICAgICogdGV4aTJkdmkgVGV4aW5mbworICAgICAgICAqIHRleGluZGV4IFRleGluZm8KKyAgICAgICAgKiB0ZXhzcGVsbCBUZVgKKyAgICAgICAgKiB0ZXh0Zm10IEh5bGFGQVgKKyAgICAgICAgKiB0Zm10b2RpdCBHcm9mZgorICAgICAgICAqIHRmdG9wbCBUZVgKKyAgICAgICAgKiB0ZnRwIGJzZDQ0CisgICAgICAgICogdGZ0cCBJbmV0dXRpbHMKKyAgICAgICAgKiB0ZnRwZCBic2Q0NAorICAgICAgICAqIHRmdHBkIEluZXR1dGlscworICAgICAgICAqIHRncmluZCBUZVgKKyAgICAgICAgKiB0aW1lIHRpbWUKKyAgICAgICAgKiB0aW1lZCBic2Q0NAorICAgICAgICAqIHRpbWVyIEVtYWNzCisgICAgICAgICogdGltZXggeG9wdAorICAgICAgICAqIHRpcCBic2Q0NAorICAgICAgICAqIHRrcG9zdGFnZSB4b3B0CisgICAgICAgICogdG4zMjcwIGJzZDQ0CisgICAgICAgICogdG9nZW9tdmlldyBnZW9tdmlldworICAgICAgICAqIHRvdWNoIEZpbGV1dGlscworICAgICAgICAqIHRwdXQgVGVybXV0aWxzCisgICAgICAgICogdHIgVGV4dHV0aWxzCisgICAgICAgICogdHJhY2Vyb3V0ZSBic2Q0NAorICAgICAgICAqIHRyYW5zY3JpcHQgSHlsYUZBWAorICAgICAgICAqIHRyYW5zZmlnIHhvcHQKKyAgICAgICAgKiB0cmFuc2Zvcm1lciBnZW9tdmlldworICAgICAgICAqIHRyZWsgYnNkNDQKKyAgICAgICAgKiB0cmlncnAgZ2VvbXZpZXcKKyAgICAgICAgKiB0cm4zIGJzZDQ0CisgICAgICAgICogdHJvZmYgR3JvZmYKKyAgICAgICAgKiB0cnB0IGJzZDQ0CisgICAgICAgICogdHJzcCBic2Q0NAorICAgICAgICAqIHRydWUgU2hlbGx1dGlscworICAgICAgICAqIHRzZXQgYnNkNDQKKyAgICAgICAgKiB0c29ydCBic2Q0NAorICAgICAgICAqIHR0eSBTaGVsbHV0aWxzCisgICAgICAgICogdHR5Z25hbnMgR25hbnMKKyAgICAgICAgKiB0dW5lZnMgYnNkNDQKKyAgICAgICAgKiB0dXBkYXRlIGdldHRleHQKKyAgICAgICAgKiB0dnR3bSB4b3B0CisgICAgICAgICogdHdtIHhyZXEKKyAgICAgCisgICAgICAgICogdWwgYnNkNDQKKyAgICAgICAgKiB1bHBjIFNwaW5uZXIKKyAgICAgICAgKiB1bW91bnQgYnNkNDQKKyAgICAgICAgKiB1bmFtZSBTaGVsbHV0aWxzCisgICAgICAgICogdW5jb21wcmVzcyBnemlwCisgICAgICAgICogdW5leHBhbmQgVGV4dHV0aWxzCisgICAgICAgICogdW5pZmRlZiBic2Q0NAorICAgICAgICAqIHVuaWZ5IHdkaWZmCisgICAgICAgICogdW5pcSBUZXh0dXRpbHMKKyAgICAgICAgKiB1bnByb3RvaXplIEdDQworICAgICAgICAqIHVuc2hhciBTaGFydXRpbHMKKyAgICAgICAgKiB1bnZpcyBic2Q0NAorICAgICAgICAqIHVwZGF0ZSBic2Q0NAorICAgICAgICAqIHVwZGF0ZWRiIEZpbmR1dGlscworICAgICAgICAqIHVzZXJzIFNoZWxsdXRpbHMKKyAgICAgICAgKiB1dWNoayBVVUNQCisgICAgICAgICogdXVjaWNvIFVVQ1AKKyAgICAgICAgKiB1dWNvbnYgVVVDUAorICAgICAgICAqIHV1Y3AgVVVDUAorICAgICAgICAqIHV1Y3BkIGJzZDQ0CisgICAgICAgICogdXVjcGQgSW5ldHV0aWxzCisgICAgICAgICogdXVkZWNvZGUgU2hhcnV0aWxzCisgICAgICAgICogdXVkaXIgVVVDUAorICAgICAgICAqIHV1ZW5jb2RlIFNoYXJ1dGlscworICAgICAgICAqIHV1bG9nIFVVQ1AKKyAgICAgICAgKiB1dW5hbWUgVVVDUAorICAgICAgICAqIHV1cGF0aCBzbWFpbAorICAgICAgICAqIHV1cGljayBVVUNQCisgICAgICAgICogdXVyYXRlIFVVQ1AKKyAgICAgICAgKiB1dXNjaGVkIFVVQ1AKKyAgICAgICAgKiB1dXN0YXQgVVVDUAorICAgICAgICAqIHV1dG8gVVVDUAorICAgICAgICAqIHV1eCBVVUNQCisgICAgICAgICogdXV4cXQgVVVDUAorICAgICAKKyAgICAgICAgKiB2IEZpbGV1dGlscworICAgICAgICAqIHZhY2F0aW9uIGJzZDQ0CisgICAgICAgICogdmFuZGFsIHhvcHQKKyAgICAgICAgKiB2Y2RpZmYgRW1hY3MKKyAgICAgICAgKiB2ZGlyIEZpbGV1dGlscworICAgICAgICAqIHZmdG92cCBUZVgKKyAgICAgICAgKiB2Z3JpbmQgYnNkNDQKKyAgICAgICAgKiB2aSBudmkKKyAgICAgICAgKiB2aWV3cmVzIHhvcHQKKyAgICAgICAgKiB2aWV3cmVzIHhyZXEKKyAgICAgICAgKiB2aW5lIHhvcHQKKyAgICAgICAgKiB2aXB3IGJzZDQ0CisgICAgICAgICogdmlybWYgVGVYCisgICAgICAgICogdmlydGV4IFRlWAorICAgICAgICAqIHZpcyBic2Q0NAorICAgICAgICAqIHZtc3RhdCBic2Q0NAorICAgICAgICAqIHZwdG92ZiBUZVgKKyAgICAgCisgICAgICAgICogdyBic2Q0NAorICAgICAgICAqIHdhaXNnbiBHTgorICAgICAgICAqIHdha2V1cCBFbWFjcworICAgICAgICAqIHdhbGwgYnNkNDQKKyAgICAgICAgKiB3YXJnYW1lcyBic2Q0NAorICAgICAgICAqIHdjIFRleHR1dGlscworICAgICAgICAqIHdkaWZmIHdkaWZmCisgICAgICAgICogd2VhdmUgVGVYCisgICAgICAgICogd2hhdCBic2Q0NAorICAgICAgICAqIHdoYXRpcyBic2Q0NAorICAgICAgICAqIHdoZXJlaXMgYnNkNDQKKyAgICAgICAgKiB3aG8gU2hlbGx1dGlscworICAgICAgICAqIHdob2FtaSBTaGVsbHV0aWxzCisgICAgICAgICogd2hvaXMgYnNkNDQKKyAgICAgICAgKiB3aW5kb3cgYnNkNDQKKyAgICAgICAgKiB3aW50ZXJwIHhvcHQKKyAgICAgICAgKiB3aXNoIERlamFHbnUKKyAgICAgICAgKiB3biBXTgorICAgICAgICAqIHduZGV4IFdOCisgICAgICAgICogd29ybSBic2Q0NAorICAgICAgICAqIHdvcm1zIGJzZDQ0CisgICAgICAgICogd3JpdGUgYnNkNDQKKyAgICAgICAgKiB3dW1wIGJzZDQ0CisgICAgIAorICAgICAgICAqIHgxMXBlcmYgeHJlcQorICAgICAgICAqIHgycCBwZXJsCisgICAgICAgICogeGFsYXJtIHhvcHQKKyAgICAgICAgKiB4YW5jdXIgeG9wdAorICAgICAgICAqIHhhcmdzIEZpbmR1dGlscworICAgICAgICAqIHhhdXRoIHhyZXEKKyAgICAgICAgKiB4YmZlIEZvbnR1dGlscworICAgICAgICAqIHhiaWZmIHhvcHQKKyAgICAgICAgKiB4YmlmZiB4cmVxCisgICAgICAgICogeGJvYXJkIHhib2FyZAorICAgICAgICAqIHhib2luZyB4b3B0CisgICAgICAgICogeGJ1ZmZ5MyB4b3B0CisgICAgICAgICogeGNhbGMgeG9wdAorICAgICAgICAqIHhjYWxjIHhyZXEKKyAgICAgICAgKiB4Y2FsZW5kYXIgeG9wdAorICAgICAgICAqIHhjZHBsYXllciB4b3B0CisgICAgICAgICogeGNlbGwgeG9wdAorICAgICAgICAqIHhjbGlwYm9hcmQgeHJlcQorICAgICAgICAqIHhjbG9jayB4cmVxCisgICAgICAgICogeGNtZG1lbnUgeG9wdAorICAgICAgICAqIHhjbXMgeG9wdAorICAgICAgICAqIHhjbXNkYiB4cmVxCisgICAgICAgICogeGNtc3Rlc3QgeHJlcQorICAgICAgICAqIHhjbyB4b3B0CisgICAgICAgICogeGNvbG9yaXplIHhvcHQKKyAgICAgICAgKiB4Y29sb3JzIHhvcHQKKyAgICAgICAgKiB4Y29uc29sZSB4cmVxCisgICAgICAgICogeGNydGNhIHhvcHQKKyAgICAgICAgKiB4ZGFsaWNsb2NrIHhvcHQKKyAgICAgICAgKiB4ZGlhcnkgeG9wdAorICAgICAgICAqIHhkaXR2aWV3IEdyb2ZmCisgICAgICAgICogeGRpdHZpZXcgeG9wdAorICAgICAgICAqIHhkaXR2aWV3IHhyZXEKKyAgICAgICAgKiB4ZG0geHJlcQorICAgICAgICAqIHhkcHlpbmZvIHhyZXEKKyAgICAgICAgKiB4ZHUgeG9wdAorICAgICAgICAqIHhkdmkgVGVYCisgICAgICAgICogeGR2aSB4b3B0CisgICAgICAgICogeGR2b3JhayB4b3B0CisgICAgICAgICogeGVhcnRoIHhvcHQKKyAgICAgICAgKiB4ZWQgeG9wdAorICAgICAgICAqIHhlZGl0IHhvcHQKKyAgICAgICAgKiB4ZWRpdCB4cmVxCisgICAgICAgICogeGV2IHhvcHQKKyAgICAgICAgKiB4ZXYgeHJlcQorICAgICAgICAqIHhleGl0IHhvcHQKKyAgICAgICAgKiB4ZXllcyB4b3B0CisgICAgICAgICogeGV5ZXMgeHJlcQorICAgICAgICAqIHhmZCB4cmVxCisgICAgICAgICogeGZlZCB4b3B0CisgICAgICAgICogeGZlZG9yIHhvcHQKKyAgICAgICAgKiB4ZmVvYWsgeG9wdAorICAgICAgICAqIHhmZXJzdGF0cyBIeWxhRkFYCisgICAgICAgICogeGZpZyB4b3B0CisgICAgICAgICogeGZvbnRzZWwgeG9wdAorICAgICAgICAqIHhmb250c2VsIHhyZXEKKyAgICAgICAgKiB4Zm9yZWNhc3QgeG9wdAorICAgICAgICAqIHhnYXMgeG9wdAorICAgICAgICAqIHhnYXMgeHJlcQorICAgICAgICAqIHhnYyB4b3B0CisgICAgICAgICogeGdjIHhyZXEKKyAgICAgICAgKiB4Z2V0dGV4dCBnZXR0ZXh0CisgICAgICAgICogeGhlYXJ0cyB4b3B0CisgICAgICAgICogeGhlbHAgeG9wdAorICAgICAgICAqIHhob3N0IHhyZXEKKyAgICAgICAgKiB4aW5pdCB4cmVxCisgICAgICAgICogeGtleWNhcHMgeG9wdAorICAgICAgICAqIHhraWxsIHhyZXEKKyAgICAgICAgKiB4bGF4IHhvcHQKKyAgICAgICAgKiB4bGF5b3V0IHhvcHQKKyAgICAgICAgKiB4bGJpZmYgeG9wdAorICAgICAgICAqIHhsZXNzIHhvcHQKKyAgICAgICAgKiB4bG9hZCB4b3B0CisgICAgICAgICogeGxvYWQgeHJlcQorICAgICAgICAqIHhsb2dpbiB4b3B0CisgICAgICAgICogeGxvZ28geHJlcQorICAgICAgICAqIHhsc2F0b21zIHhyZXEKKyAgICAgICAgKiB4bHNjbGllbnRzIHhyZXEKKyAgICAgICAgKiB4bHNmb250cyB4cmVxCisgICAgICAgICogeG1hZyB4cmVxCisgICAgICAgICogeG1haWwgeG9wdAorICAgICAgICAqIHhtYWlsYm94IHhvcHQKKyAgICAgICAgKiB4bWFpbHdhdGNoZXIgeG9wdAorICAgICAgICAqIHhtYW4geG9wdAorICAgICAgICAqIHhtYW4geHJlcQorICAgICAgICAqIHhtYW5kZWwgeG9wdAorICAgICAgICAqIHhtZXNzYWdlIHhvcHQKKyAgICAgICAgKiB4bWV0ZXIgeG9wdAorICAgICAgICAqIHhtaCB4cmVxCisgICAgICAgICogeG1oLWljb25zIHhvcHQKKyAgICAgICAgKiB4bWguZWRpdG9yIHhvcHQKKyAgICAgICAgKiB4bW9kbWFwIHhyZXEKKyAgICAgICAgKiB4bW9uIHhvcHQKKyAgICAgICAgKiB4bW92ZSB4b3B0CisgICAgICAgICogeG1waG9uZSB4b3B0CisgICAgICAgICogeHBkIHhvcHQKKyAgICAgICAgKiB4cGhvb24geG9wdAorICAgICAgICAqIHhwaXBlbWFuIHhvcHQKKyAgICAgICAgKiB4cGxvdCBHcmFwaGljcworICAgICAgICAqIHhwb3N0aXQgeG9wdAorICAgICAgICAqIHhwciB4b3B0CisgICAgICAgICogeHByIHhyZXEKKyAgICAgICAgKiB4cHJvbXB0IHhvcHQKKyAgICAgICAgKiB4cHJvb2YgeG9wdAorICAgICAgICAqIHhwcm9wIHhyZXEKKyAgICAgICAgKiB4cHNlcnYgeG9wdAorICAgICAgICAqIHhyZGIgeHJlcQorICAgICAgICAqIHhyZWZyZXNoIHhyZXEKKyAgICAgICAgKiB4cnNoIHhvcHQKKyAgICAgICAgKiB4cnViaWsgeG9wdAorICAgICAgICAqIHhydW5jbGllbnQgeG9wdAorICAgICAgICAqIHhzY29wZSB4b3B0CisgICAgICAgICogeHNjcmVlbnNhdmVyIHhvcHQKKyAgICAgICAgKiB4c2Vzc2lvbiB4b3B0CisgICAgICAgICogeHNldCB4cmVxCisgICAgICAgICogeHNldHJvb3QgeHJlcQorICAgICAgICAqIHhzaG9naSB4c2hvZ2kKKyAgICAgICAgKiB4c3RkY21hcCB4cmVxCisgICAgICAgICogeHN0ciBic2Q0NAorICAgICAgICAqIHh0YWxrIHhvcHQKKyAgICAgICAgKiB4dGVybSB4cmVxCisgICAgICAgICogeHRlcm1fY29sb3IgeG9wdAorICAgICAgICAqIHh0ZXRyaXMgeG9wdAorICAgICAgICAqIHhUZVhjYWQuMTMgeG9wdAorICAgICAgICAqIHh0aWZmIHhvcHQKKyAgICAgICAgKiB4dG9raWQgSUQgVXRpbHMKKyAgICAgICAgKiB4dHJlZSB4b3B0CisgICAgICAgICogeHR2IHhvcHQKKyAgICAgICAgKiB4d2QgeHJlcQorICAgICAgICAqIHh3aW5pbmZvIHhyZXEKKyAgICAgICAgKiB4d3VkIHhyZXEKKyAgICAgCisgICAgICAgICogeWFjYyBic2Q0NAorICAgICAgICAqIHllcyBTaGVsbHV0aWxzCisgICAgICAgICogeW91YmluIHhvcHQKKyAgICAgICAgKiB5b3cgRW1hY3MKKyAgICAgCisgICAgICAgICogemNhdCBnemlwCisgICAgICAgICogemNtcCBnemlwCisgICAgICAgICogemRpZmYgZ3ppcAorICAgICAgICAqIHpmb3JjZSBnemlwCisgICAgICAgICogemdyZXAgZ3ppcAorICAgICAgICAqIHptb3JlIGd6aXAKKyAgICAgICAgKiB6bmV3IGd6aXAKKyAgICAgCisgICAgICAgICogWyBTaGVsbHV0aWxzCisKKyAKKworQ0QtUk9NcworKioqKioqKgorCitXZSBvZmZlciB0aGVzZSBDRC1ST01zOgorCisgICAqIFNldmVyYWwgZWRpdGlvbnMgb2Ygb3VyICpOb3RlIFNvdXJjZSBDb2RlIENELVJPTXM6Oi4KKworICAgKiBKYW51YXJ5IDE5OTcgKk5vdGUgQ29tcGlsZXIgVG9vbHMgQmluYXJpZXMgQ0QtUk9NOjouCisKKyAgICogRGVjZW1iZXIgMTk5NSBDb21waWxlciBUb29scyBCaW5hcmllcyBDRC1ST00sIHNlZSB0aGUgKm5vdGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uIE9yZGVyIEZvcm06Oi4KKworICAgKiBEZWNlbWJlciAxOTk0IENvbXBpbGVyIFRvb2xzIEJpbmFyaWVzIENELVJPTSwgc2VlIHRoZSAqbm90ZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24gT3JkZXIgRm9ybTo6LgorCisgICAqIERlY2VtYmVyIDE5OTMgQ29tcGlsZXIgVG9vbHMgQmluYXJpZXMgQ0QtUk9NLCBzZWUgdGhlICpub3RlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiBPcmRlciBGb3JtOjouCisKK091ciBDRHMgYXJlIGluIElTTyA5NjYwIGZvcm1hdCAmIGNhbiBiZSBtb3VudGVkIGFzIGEgcmVhZC1vbmx5IGZpbGUgc3lzdGVtIG9uCittb3N0IGNvbXB1dGVycy4gIElmIHlvdXIgZHJpdmVyIHN1cHBvcnRzIGl0LCB5b3UgY2FuIG1vdW50IGVhY2ggQ0Qgd2l0aCAiUm9jaworUmlkZ2UiIGV4dGVuc2lvbnMgJiBpdCB3aWxsIGxvb2sgbGlrZSBhIHJlZ3VsYXIgVW5peCBmaWxlIHN5c3RlbSwgcmF0aGVyIHRoYW4KK29uZSBmdWxsIG9mIHRydW5jYXRlZCAmIG90aGVyd2lzZSBtYW5nbGVkIG5hbWVzIHRoYXQgZml0IHZhbmlsbGEgSVNPIDk2NjAuCisKK1lvdSBjYW4gYnVpbGQgbW9zdCBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBjb3B5aW5nIHRoZSBzb3VyY2VzIG9mZiB0aGUgQ0QuCitZb3Ugb25seSBuZWVkIGVub3VnaCBkaXNrIHNwYWNlIGZvciBvYmplY3QgZmlsZXMgYW5kIGludGVybWVkaWF0ZSBidWlsZAordGFyZ2V0cy4KKworIAorCitQcmljaW5nIG9mIHRoZSBHTlUgQ0QtUk9NcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gaXMgdWx0aW1hdGVseSBwYXlpbmcsIHRoZSBKYW51YXJ5IDE5OTcgU291cmNlIENECitzZXQgY29zdHMgJDI0MC4gIFRoZSBzZXQgY29zdHMgJDYwIGlmIHlvdSwgYW4gaW5kaXZpZHVhbCwgYXJlIHBheWluZyBvdXQgb2YKK3lvdXIgb3duIHBvY2tldC4gIFRoZSBKYW51YXJ5IDE5OTcgQ29tcGlsZXIgVG9vbHMgQmluYXJpZXMgQ0QtUk9NIGNvc3RzICQyMjAKK2ZvciBhIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiwgYW5kICQ1NSBmb3IgYW4gaW5kaXZpZHVhbC4KKworIAorCitXaGF0IERvIHRoZSBEaWZmZXJlbnQgUHJpY2VzIE1lYW4/CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RoZSBzb2Z0d2FyZSBvbiBvdXIgZGlza3MgaXMgZnJlZTsgYW55b25lIGNhbiBjb3B5IGl0IGFuZCBhbnlvbmUgY2FuIHJ1biBpdC4KK1doYXQgd2UgY2hhcmdlIGZvciBpcyB0aGUgcGh5c2ljYWwgZGlzayBhbmQgdGhlIHNlcnZpY2Ugb2YgZGlzdHJpYnV0aW9uLgorCitXZSBjaGFyZ2UgdHdvIGRpZmZlcmVudCBwcmljZXMgZGVwZW5kaW5nIG9uIHdobyBpcyBidXlpbmcuICBXaGVuIGEgY29tcGFueSBvcgorb3RoZXIgb3JnYW5pemF0aW9uIGJ1eXMgdGhlIEphbnVhcnkgMTk5NyBTb3VyY2UgQ0QtUk9Ncywgd2UgY2hhcmdlICQyNDAuCitXaGVuIGFuIGluZGl2aWR1YWwgYnV5cyB0aGUgc2FtZSBDRC1ST01zLCB3ZSBjaGFyZ2UganVzdCAkNjAuICBUaGlzCitkaXN0aW5jdGlvbiBpcyBub3QgYSBtYXR0ZXIgb2Ygd2hvIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSBzb2Z0d2FyZS4gIEluIGVpdGhlcgorY2FzZSwgb25jZSB5b3UgaGF2ZSBhIGNvcHksIHlvdSBjYW4gZGlzdHJpYnV0ZSBhcyBtYW55IGNvcGllcyBhcyB5b3Ugd2lzaCBhbmQKK3RoZXJlJ3Mgbm8gcmVzdHJpY3Rpb24gb24gd2hvIGNhbiBoYXZlIG9yIHJ1biB0aGVtLiAgVGhlIHByaWNlIGRpc3RpbmN0aW9uIGlzCitlbnRpcmVseSBhIG1hdHRlciBvZiB3aGF0IGtpbmQgb2YgZW50aXR5IHBheXMgZm9yIHRoZSBDRHMuCisKK1lvdSwgdGhlIHJlYWRlciwgYXJlIGNlcnRhaW5seSBhbiBpbmRpdmlkdWFsLCBub3QgYSBjb21wYW55LiAgSWYgeW91IGFyZQorYnV5aW5nIGEgZGlzayAiaW4gcGVyc29uIiwgdGhlbiB5b3UgYXJlIHByb2JhYmx5IGRvaW5nIHNvIGFzIGFuIGluZGl2aWR1YWwuCitCdXQgaWYgeW91IGV4cGVjdCB0byBiZSByZWltYnVyc2VkIGJ5IHlvdXIgZW1wbG95ZXIsIHRoZW4gdGhlIGRpc2sgaXMgcmVhbGx5Citmb3IgdGhlIGNvbXBhbnk7IHNvIHBsZWFzZSBwYXkgdGhlIGNvbXBhbnkgcHJpY2UgYW5kIGdldCByZWltYnVyc2VkIGZvciBpdC4KK1dlIHdvbid0IHRyeSB0byBjaGVjayB1cCBvbiB5b3UtLXdlIHVzZSB0aGUgaG9ub3Igc3lzdGVtLS1zbyBwbGVhc2UgY29vcGVyYXRlLgorCitCdXlpbmcgQ0RzIGF0IHRoZSBjb21wYW55IHByaWNlIGlzIHZlcnkgaGVscGZ1bCBmb3IgR05VOyBqdXN0CisxNTAgU291cmNlIENEcyBhdCB0aGF0IHByaWNlIHN1cHBvcnQgYW4gRlNGIHByb2dyYW1tZXIgb3IgdGVjaCB3cml0ZXIgZm9yIGEKK3llYXIuCisKKyAKKworV2h5IElzIFRoZXJlIGFuIEluZGl2aWR1YWwgUHJpY2U/CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworSW4gdGhlIHBhc3QsIG91ciBkaXN0cmlidXRpb24gdGFwZXMgd2VyZSBvcmRlcmVkIG1haW5seSBieSBjb21wYW5pZXMuICBUaGUgQ0QKK2F0IHRoZSBwcmljZSBvZiAkMjQwIHByb3ZpZGVzIHRoZW0gd2l0aCBhbGwgb2Ygb3VyIHNvZnR3YXJlIGZvciBhIG11Y2ggbG93ZXIKK3ByaWNlIHRoYW4gdGhleSB3b3VsZCBwcmV2aW91c2x5IGhhdmUgcGFpZCBmb3Igc2l4IGRpZmZlcmVudCB0YXBlcy4gIFRvIGxvd2VyCit0aGUgcHJpY2UgbW9yZSB3b3VsZCBjdXQgaW50byB0aGUgRlNGJ3MgZnVuZHMgdmVyeSBiYWRseSBhbmQgZGVjcmVhc2UgdGhlCitzb2Z0d2FyZSBkZXZlbG9wbWVudCB3ZSBjYW4gZG8uCisKK0hvd2V2ZXIsIGZvciBpbmRpdmlkdWFscywgJDI0MCBpcyB0b28gaGlnaCBhIHByaWNlOyBoYXJkbHkgYW55b25lIGNvdWxkCithZmZvcmQgdGhhdC4gIFNvIHdlIGRlY2lkZWQgdG8gbWFrZSBDRHMgYXZhaWxhYmxlIHRvIGluZGl2aWR1YWxzIGF0IHRoZSBsb3dlcgorcHJpY2Ugb2YgJDYwLgorCisgCisKK0lzIFRoZXJlIGEgTWF4aW11bSBQcmljZT8KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworT3VyIHN0YXRlZCBwcmljZXMgYXJlIG1pbmltdW0gcHJpY2VzLiAgRmVlbCBmcmVlIHRvIHBheSBhIGhpZ2hlciBwcmljZSBpZiB5b3UKK3dpc2ggdG8gc3VwcG9ydCBHTlUgZGV2ZWxvcG1lbnQgbW9yZS4gIFRoZSBza3kncyB0aGUgbGltaXQ7IHdlIHdpbGwgYWNjZXB0IGFzCitoaWdoIGEgcHJpY2UgYXMgeW91IGNhbiBvZmZlci4gIE9yIHNpbXBseSBnaXZlIGEgZG9uYXRpb24gKHRheC1kZWR1Y3RpYmxlIGluCit0aGUgVS5TLikgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYSB0YXgtZXhlbXB0IHB1YmxpYyBjaGFyaXR5LgorCisgCisKK0phbnVhcnkgMTk5NyBDb21waWxlciBUb29scyBCaW5hcmllcyBDRC1ST00KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvdXJ0aCBlZGl0aW9uIG9mIG91ciBDRC1ST00gdGhhdCBoYXMgYmluYXJpZXMgYW5kIGNvbXBsZXRlIHNvdXJjZXMgZm9yCitHTlUgY29tcGlsZXIgdG9vbHMgZm9yIHNvbWUgc3lzdGVtcyB3aGljaCBsYWNrIGEgY29tcGlsZXIsIHdpbGwgYmUgYXZhaWxhYmxlCithdCB0aGUgZW5kIG9mIEphbnVhcnkgMTk5Ny4gIFRoaXMgZW5hYmxlcyB0aGUgcGVvcGxlIHdobyB1c2UgdGhlc2Ugc3lzdGVtcyB0bworY29tcGlsZSBHTlUgYW5kIG90aGVyIGZyZWUgc29mdHdhcmUgd2l0aG91dCBoYXZpbmcgdG8gYnV5IGEgcHJvcHJpZXRhcnkKK2NvbXBpbGVyLiAgWW91IGNhbiBhbHNvIHVzZSB0aGVzZSBHTlUgdG9vbHMgdG8gY29tcGlsZSB5b3VyIG93bgorQy9DKysvT2JqZWN0aXZlLUMgcHJvZ3JhbXMuICBPbGRlciBlZGl0aW9ucyBvZiB0aGlzIENEIGFyZSBhdmFpbGFibGUgd2hpbGUKK3N1cHBsaWVzIGxhc3QgYXQgYSByZWR1Y2VkIHByaWNlOyBzZWUgdGhlICpub3RlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorT3JkZXIgRm9ybTo6LgorCitXZSBob3BlIHRvIGhhdmUgbW9yZSBzeXN0ZW1zIG9uIGVhY2ggdXBkYXRlIG9mIHRoaXMgQ0QuICBJZiB5b3UgY2FuIGhlbHAKK2J1aWxkIGJpbmFyaWVzIGZvciBuZXcgc3lzdGVtcyAoZXNwZWNpYWxseSB0aG9zZSB0aGF0IGRvbid0IGNvbWUgd2l0aCBhIEMKK2NvbXBpbGVyKSwgb3IgaGF2ZSBvbmUgdG8gc3VnZ2VzdCwgcGxlYXNlIGNvbnRhY3QgdXMgYXQgdGhlIGFkZHJlc3NlcyBvbiB0aGUKK3RvcCBtZW51LgorCitUaGVzZSBwYWNrYWdlczoKKworICAgICAgICAqIERKR1BQCisgICAgICAgICogR0NDL0crKy9PYmplY3RpdmUtQworICAgICAgICAqIEdOVSBDIExpYnJhcnkKKyAgICAgICAgKiBHREIKKyAgICAgICAgKiBCaW51dGlscworICAgICAgICAqIEJpc29uCisgICAgICAgICogRW1hY3MgKE1TLURPUyBvbmx5KQorICAgICAgICAqIEZsZXgKKyAgICAgICAgKiBNYWtlCisgICAgICAgICogbGliZysrCisKK09uIHRoZXNlIHBsYXRmb3JtczoKKworICAgICAgICAqIGBpMzg2LW1zZG9zJworICAgICAgICAqIGBocHBhMS4xLWhwLWhwdXg5JworICAgICAgICAqIGBocHBhMS4xLWhwLWhwdXgxMCcKKyAgICAgICAgKiBgcG93ZXJwYy1pYm0tYWl4NC4yJworICAgICAgICAqIGBzcGFyYy1zdW4tc29sYXJpczIuNCcKKyAgICAgICAgKiBgc3BhcmMtc3VuLXNvbGFyaXMyLjUnCisgICAgICAgICogYHNwYXJjLXN1bi1zdW5vczQuMScKKworIAorCitTb3VyY2UgQ29kZSBDRC1ST01zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIGhhdmUgc2V2ZXJhbCB2ZXJzaW9ucyBvZiBvdXIgU291cmNlIENvZGUgQ0QtUk9NcyBhdmFpbGFibGUsIGluY2x1ZGluZzoKKworICAgKiAqTm90ZSBKYW51YXJ5IDE5OTcgU291cmNlIENvZGUgQ0QtUk9Nczo6LCB0aGUgbmV3ZXN0IHJlbGVhc2UsIGhhcworICAgICBwcm9ncmFtcywgYnVnIGZpeGVzLCAmIGltcHJvdmVtZW50cyBub3Qgb24gdGhlIG90aGVyIENEcy4KKworICAgKiAqTm90ZSBKdWx5IDE5OTYgU291cmNlIENvZGUgQ0QtUk9Nczo6LgorCisgICAqIERlY2VtYmVyIDE5OTUgU291cmNlIENvZGUgQ0QtUk9Ncywgc2VlIHRoZSAqbm90ZSBGcmVlIFNvZnR3YXJlCisgICAgIEZvdW5kYXRpb24gT3JkZXIgRm9ybTo6LgorCisgICAqIEp1bmUgMTk5NSBTb3VyY2UgQ29kZSBDRC1ST00sIHNlZSB0aGUgKm5vdGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgIE9yZGVyIEZvcm06Oi4KKworICAgKiBNYXkgMTk5NCBTb3VyY2UgQ29kZSBDRC1ST00sIHNlZSB0aGUgKm5vdGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgIE9yZGVyIEZvcm06Oi4KKworICAgKiBOb3ZlbWJlciAxOTkzIFNvdXJjZSBDb2RlIENELVJPTSwgc2VlIHRoZSAqbm90ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgICAgT3JkZXIgRm9ybTo6LgorCisgICAqIE1heSAxOTkzIFNvdXJjZSBDb2RlIENELVJPTSwgc2VlIHRoZSAqbm90ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgICAgT3JkZXIgRm9ybTo6LgorCisgICAqIE9jdG9iZXIgMTk5MiBTb3VyY2UgQ29kZSBDRC1ST00sIHNlZSB0aGUgKm5vdGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgIE9yZGVyIEZvcm06Oi4KKworVGhlIG9sZGVyIFNvdXJjZSBDRHMgYXJlIGF2YWlsYWJsZSB3aGlsZSBzdXBwbGllcyBsYXN0IGF0IGEgcmVkdWNlZCBwcmljZQorKHBsZWFzZSBub3RlIHRoYXQgdGhlIERlY2VtYmVyIDE5OTQgU291cmNlIENEIGlzIHBlcm1hbmVudGx5IG91dCBvZiBzdG9jaykuCitBbGwgdGhlIFNvdXJjZSBDRHMgaGF2ZSBUZXhpbmZvIHNvdXJjZSBmb3IgdGhlIEdOVSBtYW51YWxzIGxpc3RlZCBpbiAqTm90ZQorRG9jdW1lbnRhdGlvbjo6LgorCitNSVQgU2NoZW1lICYgbXVjaCBvZiBYMTEgaXMgKm5vdCogb24gdGhlIG9sZGVyIFNvdXJjZSBDRHMuCisKK1RoZXJlIGFyZSBubyBwcmVjb21waWxlZCBwcm9ncmFtcyBvbiB0aGVzZSBTb3VyY2UgQ0RzLiAgWW91IHdpbGwgbmVlZCBhIEMKK2NvbXBpbGVyIChwcm9ncmFtcyB3aGljaCBuZWVkIHNvbWUgb3RoZXIgaW50ZXJwcmV0ZXIgb3IgY29tcGlsZXIgbm9ybWFsbHkKK3Byb3ZpZGUgdGhlIEMgc291cmNlIGZvciBhIGJvb3RzdHJhcHBpbmcgcHJvZ3JhbSkuICBXZSBzaGlwIEMgY29tcGlsZXIKK2JpbmFyaWVzIGZvciBzb21lIHN5c3RlbXMgb24gdGhlICpOb3RlIENvbXBpbGVyIFRvb2xzIEJpbmFyaWVzIENELVJPTTo6LgorCisgCisKK0phbnVhcnkgMTk5NyBTb3VyY2UgQ29kZSBDRC1ST01zCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUaGUgOXRoIGVkaXRpb24gb2Ygb3VyIFNvdXJjZSBDb2RlIENEIHdpbGwgYmUgYXZhaWxhYmxlIGF0IHRoZSBlbmQgb2YgSmFudWFyeQorMTk5NyB3aXRoIHR3byBDRC1ST00gZGlza3MuICBJdCBoYXMgcHJvZ3JhbXMsIGJ1ZyBmaXhlcywgJiBpbXByb3ZlbWVudHMgbm90CitvbiB0aGUgb2xkZXIgU291cmNlIENEcy4gIEl0IGhhcyB0aGVzZSBwYWNrYWdlcywgJiBzb21lIG1hbnVhbHMgdGhhdCBhcmUgbm90CitwYXJ0IG9mIHBhY2thZ2VzLiAgVGhlIHZlcnNpb24gbnVtYmVyIG9mIGVhY2ggcGFja2FnZSBsaXN0ZWQgbWlnaHQgYmUgaGlnaGVyCitvbiB0aGUgOXRoIGVkaXRpb24gQ0QgZHVlIHRvIG5ldyByZWxlYXNlcyBiZWluZyBtYWRlIGJldHdlZW4gbm93IGFuZCB0aGVuLgorCisKKyAgICAgICAgKiBhY20gNC43CisgICAgICAgICogYXBhY2hlIDEuMmIyCisgICAgICAgICogQXV0b2NvbmYgMi4xMgorICAgICAgICAqIEF1dG9tYWtlIDEuMAorICAgICAgICAqIEJBU0ggMS4xNC43CisgICAgICAgICogYmMgMS4wMworICAgICAgICAqIEJpbnV0aWxzIDIuNworICAgICAgICAqIEJpc29uIDEuMjUKKyAgICAgICAgKiBDIExpYnJhcnkgMi4wCisgICAgICAgICogQ2FsYyAyLjAyZgorICAgICAgICAqIGNmZW5naW5lIDEuMy4xN2EKKyAgICAgICAgKiBDaGVzcyA0LjAucGw3NworICAgICAgICAqIENMSVNQIDE5OTYuMDUuMzAKKyAgICAgICAgKiBDb21tb24gTGlzcCAyLjIKKyAgICAgICAgKiBjcGVyZiAyLjFhCisgICAgICAgICogY3BpbyAyLjQuMgorICAgICAgICAqIENWUyAxLjkKKyAgICAgICAgKiBEZWphR251IDEuMworICAgICAgICAqIERpZmZ1dGlscyAyLjcKKyAgICAgICAgKiBkbGQgMy4zCisgICAgICAgICogZG9zY2hrIDEuMQorICAgICAgICAqIGVkIDAuMgorICAgICAgICAqIEVsaWIgMS4wCisgICAgICAgICogZWxpc3AgYXJjaGl2ZQorICAgICAgICAqIEVtYWNzIDE4LjU5CisgICAgICAgICogRW1hY3MgMTkuMzQKKyAgICAgICAgKiBlbnNjcmlwdCAxLjQuMAorICAgICAgICAqIGVzIDAuODQKKyAgICAgICAgKiBFeGltIDEuNTkKKyAgICAgICAgKiBmMmMgMTk5Ni4wOS4yNQorICAgICAgICAqIGZmY2FsbCAxLjEKKyAgICAgICAgKiBGaWxldXRpbHMgMy4xNAorICAgICAgICAqIEZpbmR1dGlscyA0LjEKKyAgICAgICAgKiBGaW5nZXIgMS4zNworICAgICAgICAqIGZsZXggMi41LjQKKyAgICAgICAgKiBGb250dXRpbHMgMC42CisgICAgICAgICogZzc3IDAuNS4xOQorICAgICAgICAqIEdBV0sgMy4wLjEKKyAgICAgICAgKiBnY2FsIDIuMTAKKyAgICAgICAgKiBHQ0MvRysrL09iamVjdGl2ZS1DIDIuNy4yLjEKKyAgICAgICAgKiBHREIgNC4xNgorICAgICAgICAqIGdkYm0gMS43LjMKKyAgICAgICAgKiBHZW5lcmljIE5RUyAzLjUwLjIKKyAgICAgICAgKiBnZW9tdmlldyAxLjYuMQorICAgICAgICAqIGdldHRleHQgMC4xMAorICAgICAgICAqIGdmb3J0aCAwLjIuMAorICAgICAgICAqIEdob3N0c2NyaXB0IDMuMzMKKyAgICAgICAgKiBHaG9zdHZpZXcgMS41CisgICAgICAgICogR2hvc3R2aWV3IGZvciBXaW5kb3dzIDEuMAorICAgICAgICAqIEdJVCA0LjMuMTQKKyAgICAgICAgKiBnbXAgMi4wLjIKKyAgICAgICAgKiBHTiAyLjI0CisgICAgICAgICogR25hbnMgMS41LjEKKyAgICAgICAgKiBnbmF0IDMuMDUKKyAgICAgICAgKiBHTkFUUyAzLjIKKyAgICAgICAgKiBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsIDEuMDMKKyAgICAgICAgKiBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsIDIuNC4yCisgICAgICAgICogR251R28gMS4yCisgICAgICAgICogZ251cGxvdCAzLjUKKyAgICAgICAgKiBnbnVzZXJ2IDIuMWFscGhhCisgICAgICAgICogZ251c3NsIDAuMi4xCisgICAgICAgICogR3JhcGhpY3MgMC4xNworICAgICAgICAqIGdyZXAgMi4wCisgICAgICAgICogR3JvZmYgMS4xMAorICAgICAgICAqIGd6aXAgMS4yLjQKKyAgICAgICAgKiBoZWxsbyAxLjMKKyAgICAgICAgKiBocDJ4eCAzLjEuNAorICAgICAgICAqIEh5bGFGQVggNC4wYjAxOAorICAgICAgICAqIEh5cGVyYm9sZSA0LjAxCisgICAgICAgICogSUQgVXRpbHMgMy4yCisgICAgICAgICogaW5kZW50IDEuOS4xCisgICAgICAgICogSW5ldHV0aWxzIDEuMgorICAgICAgICAqIElzcGVsbCAzLjEuMjAKKyAgICAgICAgKiBrYXJtYSAxLjYKKyAgICAgICAgKiBsZXNzIDMyMQorICAgICAgICAqIGxpYmcrKyAyLjcuMgorICAgICAgICAqIGxpYm9iamVjdHMgMC4xLjE5CisgICAgICAgICogbHlueCAyLjYKKyAgICAgICAgKiBtNCAxLjQKKyAgICAgICAgKiBtYWtlIDMuNzUKKyAgICAgICAgKiBNYW5kZWxTcGF3biAwLjA3CisgICAgICAgICogbWF4aW1hIDUuMgorICAgICAgICAqIG1jIDMuMi4xCisgICAgICAgICogPE1ldGEtSFRNTD4gNS4wMQorICAgICAgICAqIG1pc2NmaWxlcyAxLjAKKyAgICAgICAgKiBta2lzb2ZzIDEuMDVHTlUKKyAgICAgICAgKiBtbSAxLjA3CisgICAgICAgICogbXRvb2xzIDMuMAorICAgICAgICAqIE1VTEUgMi4zCisgICAgICAgICogbmN1cnNlcyAxLjkuOWUKKyAgICAgICAgKiBOZXRIYWNrIDMuMi4xCisgICAgICAgICogTklIQ0wgMy4xLjQKKyAgICAgICAgKiBudmkgMS43NgorICAgICAgICAqIE9ha2xpc3AgOTMwNzIwCisgICAgICAgICogT0JTVCAzLjQuMworICAgICAgICAqIE9jdGF2ZSAyLjAKKyAgICAgICAgKiBPbGVvIDEuNgorICAgICAgICAqIHAyYyAxLjIwCisgICAgICAgICogcGF0Y2ggMi4xCisgICAgICAgICogcGVybCA0LjAzNgorICAgICAgICAqIHBlcmwgNS4wMDMKKyAgICAgICAgKiBwaHR0cGQgMC45OS43Mi4xCisgICAgICAgICogcGluZSAzLjkxCisgICAgICAgICogUHJvZ3JhbW1pbmcgaW4gRW1hY3MgTGlzcCBhbiBJbnRyb2R1Y3Rpb24gMS4wNAorICAgICAgICAqIHB0eCAwLjQKKyAgICAgICAgKiByYyAxLjQKKyAgICAgICAgKiBSQ1MgNS43CisgICAgICAgICogcmVhZGxpbmUgMi4wCisgICAgICAgICogcmVjb2RlIDMuNAorICAgICAgICAqIHJlZ2V4IDAuMTIKKyAgICAgICAgKiByeCAxLjQKKyAgICAgICAgKiBTQU9pbWFnZSAxLjE5CisgICAgICAgICogc2NyZWVuIDMuNy4yCisgICAgICAgICogc2VkIDIuMDUKKyAgICAgICAgKiBTaGFydXRpbHMgNC4yCisgICAgICAgICogU2hlbGx1dGlscyAxLjE0CisgICAgICAgICogU2hvZ2kgMS4ycDAzCisgICAgICAgICogU0lQUCAzLjEKKyAgICAgICAgKiBzbWFpbCAzLjIKKyAgICAgICAgKiBTbWFsbHRhbGsgMS4xLjUKKyAgICAgICAgKiBSb3hlbiAxLjAKKyAgICAgICAgKiBzdG93IDEuMy4yCisgICAgICAgICogU3VwZXJvcHQgMi41CisgICAgICAgICogdGFyIDEuMTEuOAorICAgICAgICAqIFRlcm1jYXAgMS4zCisgICAgICAgICogVGVybXV0aWxzIDIuMAorICAgICAgICAqIFRlWCAzLjE0NQorICAgICAgICAqIFRleGluZm8gMy45CisgICAgICAgICogVGV4dHV0aWxzIDEuMjAKKyAgICAgICAgKiB0aWZmIDMuNGIwMzUKKyAgICAgICAgKiBUaWxlIEZvcnRoIDIuMQorICAgICAgICAqIHRpbWUgMS43CisgICAgICAgICogdWNibG9nbyAzLjQKKyAgICAgICAgKiBVVUNQIDEuMDYuMQorICAgICAgICAqIFczIDIuMi4yNgorICAgICAgICAqIHdkaWZmIDAuNQorICAgICAgICAqIHdnZXQgMS40LjIKKyAgICAgICAgKiB3aW5kb3dzMzJhcGkgMC4xLjIKKyAgICAgICAgKiBXTiAxLjE3LjEKKyAgICAgICAgKiBYMTFSNi4zCisgICAgICAgICogeGJvYXJkIDMuNC5wbDEKKyAgICAgICAgKiB4Z3JhYnNjIDIuNDEKKyAgICAgICAgKiB4aW5mbyAxLjAxLjAxCisgICAgICAgICogeHNob2dpIDEuMnAwMworICAgICAgICAqIFlnbCAzLjEKKworIAorCitKdWx5IDE5OTYgU291cmNlIENvZGUgQ0QtUk9NcworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworV2Ugc3RpbGwgaGF2ZSBjb3BpZXMgb2YgdGhlIDh0aCBlZGl0aW9uIG9mIG91ciBTb3VyY2UgQ0Qgd2l0aCB0d28gQ0QtUk9NCitkaXNrcy4gIEl0IGhhcyB0aGVzZSBwYWNrYWdlcywgJiBzb21lIG1hbnVhbHMgdGhhdCBhcmUgbm90IHBhcnQgb2YgcGFja2FnZXM6CisKKworICAgICAgICAqIGFjbSA0LjcKKyAgICAgICAgKiBhcGFjaGUgMS4xCisgICAgICAgICogQXV0b2NvbmYgMi4xMAorICAgICAgICAqIEF1dG9tYWtlIDEuMAorICAgICAgICAqIEJBU0ggMS4xNC42CisgICAgICAgICogYmMgMS4wMworICAgICAgICAqIEJpbnV0aWxzIDIuNworICAgICAgICAqIEJpc29uIDEuMjUKKyAgICAgICAgKiBDIExpYnJhcnkgMS45MworICAgICAgICAqIENhbGMgMi4wMmQKKyAgICAgICAgKiBjZmVuZ2luZSAxLjMuNworICAgICAgICAqIENoZXNzIDQuMC5wbDc3CisgICAgICAgICogQ0xJU1AgMTk5Ni4wNS4zMAorICAgICAgICAqIENvbW1vbiBMaXNwIDIuMgorICAgICAgICAqIGNwZXJmIDIuMWEKKyAgICAgICAgKiBjcGlvIDIuNC4yCisgICAgICAgICogQ1ZTIDEuOC4xCisgICAgICAgICogRGVqYUdudSAxLjMKKyAgICAgICAgKiBEaWZmdXRpbHMgMi43CisgICAgICAgICogZGxkIDMuMworICAgICAgICAqIGRvc2NoayAxLjEKKyAgICAgICAgKiBlZCAwLjIKKyAgICAgICAgKiBFbGliIDEuMAorICAgICAgICAqIGVsaXNwIGFyY2hpdmUKKyAgICAgICAgKiBFbWFjcyAxOC41OQorICAgICAgICAqIEVtYWNzIDE5LjMxCisgICAgICAgICogRW1hY3MgMTkuMzIKKyAgICAgICAgKiBlbnNjcmlwdCAxLjQuMAorICAgICAgICAqIGVzIDAuODQKKyAgICAgICAgKiBFeGltIDAuNTMKKyAgICAgICAgKiBmMmMgMTk5Ni4wNy4yMworICAgICAgICAqIGZmY2FsbCAxLjAKKyAgICAgICAgKiBGaWxldXRpbHMgMy4xMworICAgICAgICAqIEZpbmR1dGlscyA0LjEKKyAgICAgICAgKiBGaW5nZXIgMS4zNworICAgICAgICAqIGZsZXggMi41LjMKKyAgICAgICAgKiBGb250dXRpbHMgMC42CisgICAgICAgICogZzc3IDAuNS4xOAorICAgICAgICAqIEdBV0sgMy4wLjAKKyAgICAgICAgKiBnY2FsIDEuMDEKKyAgICAgICAgKiBHQ0MvRysrL09iamVjdGl2ZS1DIDIuNy4yCisgICAgICAgICogR0NDIDIuNy4yLjEKKyAgICAgICAgKiBHREIgNC4xNgorICAgICAgICAqIGdkYm0gMS43LjMKKyAgICAgICAgKiBHZW5lcmljIE5RUyAzLjUwLjAKKyAgICAgICAgKiBnZW9tdmlldyAxLjUuMAorICAgICAgICAqIGdldHRleHQgMC4xMAorICAgICAgICAqIEdob3N0c2NyaXB0IDMuMzMKKyAgICAgICAgKiBHaG9zdHZpZXcgMS41CisgICAgICAgICogR2hvc3R2aWV3IGZvciBXaW5kb3dzIDEuMAorICAgICAgICAqIEdJVCA0LjMuMTEKKyAgICAgICAgKiBnbXAgMi4wLjIKKyAgICAgICAgKiBHTiAyLjI0CisgICAgICAgICogR25hbnMgMS41LjEKKyAgICAgICAgKiBnbmF0IDMuMDUKKyAgICAgICAgKiBHTkFUUyAzLjIKKyAgICAgICAgKiBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsIDEuMDMKKyAgICAgICAgKiBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsIDIuNAorICAgICAgICAqIEdudUdvIDEuMgorICAgICAgICAqIGdudXBsb3QgMy41CisgICAgICAgICogZ251c2VydiAyLjFhbHBoYQorICAgICAgICAqIGdudXNzbCAwLjIKKyAgICAgICAgKiBHcmFwaGljcyAwLjE3CisgICAgICAgICogZ3JlcCAyLjAKKyAgICAgICAgKiBHcm9mZiAxLjEwCisgICAgICAgICogZ3ppcCAxLjIuNAorICAgICAgICAqIGhlbGxvIDEuMworICAgICAgICAqIGhwMnh4IDMuMS40CisgICAgICAgICogSHlsYUZBWCA0LjBiMDE4CisgICAgICAgICogSUQgVXRpbHMgMy4xCisgICAgICAgICogaW5kZW50IDEuOS4xCisgICAgICAgICogSW5ldHV0aWxzIDEuMAorICAgICAgICAqIElzcGVsbCAzLjEuMjAKKyAgICAgICAgKiBrYXJtYSAxLjQKKyAgICAgICAgKiBsZXNzIDMyMQorICAgICAgICAqIGxpYmcrKyAyLjcuMgorICAgICAgICAqIGxpYm9iamVjdHMgMC4xLjE5CisgICAgICAgICogbHlueCAyLjUKKyAgICAgICAgKiBtNCAxLjQKKyAgICAgICAgKiBtYWtlIDMuNzUKKyAgICAgICAgKiBNYW5kZWxTcGF3biAwLjA3CisgICAgICAgICogbWF4aW1hIDUuMgorICAgICAgICAqIG1jIDMuMi4xCisgICAgICAgICogbWlzY2ZpbGVzIDEuMAorICAgICAgICAqIG1raXNvZnMgMS4wNUdOVQorICAgICAgICAqIG1tIDEuMDcKKyAgICAgICAgKiBtdG9vbHMgMy4wCisgICAgICAgICogTVVMRSAyLjMKKyAgICAgICAgKiBuY3Vyc2VzIDEuOS45ZQorICAgICAgICAqIE5ldEhhY2sgMy4yLjEKKyAgICAgICAgKiBOSUhDTCAzLjEuNAorICAgICAgICAqIG52aSAxLjcxCisgICAgICAgICogT2FrbGlzcCA5MzA3MjAKKyAgICAgICAgKiBPQlNUIDMuNC4zCisgICAgICAgICogT2N0YXZlIDEuMS4xCisgICAgICAgICogT2xlbyAxLjYKKyAgICAgICAgKiBwMmMgMS4yMAorICAgICAgICAqIHBhdGNoIDIuMQorICAgICAgICAqIHBlcmwgNC4wMzYKKyAgICAgICAgKiBwZXJsIDUuMDAzCisgICAgICAgICogcGh0dHBkIDAuOTkuNzIuMQorICAgICAgICAqIHBpbmUgMy45MQorICAgICAgICAqIFByb2dyYW1taW5nIGluIEVtYWNzIExpc3AgYW4gSW50cm9kdWN0aW9uIDEuMDQKKyAgICAgICAgKiBwdHggMC40CisgICAgICAgICogcmMgMS40CisgICAgICAgICogUkNTIDUuNworICAgICAgICAqIHJlYWRsaW5lIDIuMAorICAgICAgICAqIHJlZ2V4IDAuMTIKKyAgICAgICAgKiByeCAxLjAKKyAgICAgICAgKiBTQU9pbWFnZSAxLjE4CisgICAgICAgICogc2NyZWVuIDMuNy4xCisgICAgICAgICogc2VkIDIuMDUKKyAgICAgICAgKiBTaGFydXRpbHMgNC4yCisgICAgICAgICogU2hlbGx1dGlscyAxLjEyCisgICAgICAgICogU2hvZ2kgMS4ycDAzCisgICAgICAgICogU0lQUCAzLjEKKyAgICAgICAgKiBzbWFpbCAzLjIKKyAgICAgICAgKiBTbWFsbHRhbGsgMS4xLjEKKyAgICAgICAgKiBTcGlubmVyIDEuMGIxNAorICAgICAgICAqIFN1cGVyb3B0IDIuNQorICAgICAgICAqIHRhciAxLjExLjgKKyAgICAgICAgKiBUZXJtY2FwIDEuMworICAgICAgICAqIFRlcm11dGlscyAyLjAKKyAgICAgICAgKiBUZVggMy4xNDUKKyAgICAgICAgKiBUZXhpbmZvIDMuNworICAgICAgICAqIFRleHR1dGlscyAxLjE5CisgICAgICAgICogdGlmZiAzLjRiMDM1CisgICAgICAgICogVGlsZSBGb3J0aCAyLjEKKyAgICAgICAgKiB0aW1lIDEuNworICAgICAgICAqIHVjYmxvZ28gMy4zCisgICAgICAgICogVVVDUCAxLjA2LjEKKyAgICAgICAgKiBXMyAyLjIuMjYKKyAgICAgICAgKiB3ZGlmZiAwLjUKKyAgICAgICAgKiBXTiAxLjE1LjMKKyAgICAgICAgKiBYMTFSNi4zCisgICAgICAgICogeGJvYXJkIDMuNC5wbDEKKyAgICAgICAgKiB4Z3JhYnNjIDIuNDEKKyAgICAgICAgKiB4c2hvZ2kgMS4ycDAzCisgICAgICAgICogWWdsIDMuMQorCisgCisKK0NELVJPTSBTdWJzY3JpcHRpb24gU2VydmljZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK091ciBzdWJzY3JpcHRpb24gc2VydmljZSBlbmFibGVzIHlvdSB0byBzdGF5IGN1cnJlbnQgd2l0aCB0aGUgbGF0ZXN0IEdOVQorZGV2ZWxvcG1lbnRzLiAgRm9yIGEgb25lLXRpbWUgY29zdCBlcXVpdmFsZW50IHRvIHRocmVlIFNvdXJjZSBDRC1ST01zIChwbHVzCitzaGlwcGluZyBpbiBzb21lIGNhc2VzKSwgd2Ugd2lsbCBzaGlwIHlvdSBmb3VyIG5ldyB2ZXJzaW9ucyBvZiB0aGUgKk5vdGUKK1NvdXJjZSBDb2RlIENELVJPTXM6Oi4gIFRoZSBDRC1ST01zIGFyZSBzZW50IGFzIHRoZXkgYXJlIGlzc3VlZCAoY3VycmVudGx5Cit0d2ljZSBhIHllYXIsIGJ1dCB3ZSBob3BlIHRvIG1ha2UgaXQgbW9yZSBmcmVxdWVudCkuICBXZSBkbyBub3QgeWV0IGtub3cgaWYKK3dlIHdpbGwgYmUgb2ZmZXJpbmcgc3Vic2NyaXB0aW9ucyB0byB0aGUgQ29tcGlsZXIgVG9vbHMgQmluYXJpZXMgQ0QuCisKK0Egc3Vic2NyaXB0aW9uIGlzIGFuIGVhc3kgd2F5IHRvIGtlZXAgdXAgd2l0aCB0aGUgcmVndWxhciBidWcgZml4ZXMgdG8gdGhlIFgKK1dpbmRvdyBTeXN0ZW0uICBFYWNoIGVkaXRpb24gb2YgdGhlICpOb3RlIFNvdXJjZSBDb2RlIENELVJPTXM6OiwgaGFzIHVwZGF0ZWQKK3NvdXJjZXMgZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0uCisKK1BsZWFzZSBub3RlOiBJbiB0d28gY2FzZXMsIHlvdSBtdXN0IHBheSA0IHRpbWVzIHRoZSBub3JtYWwgc2hpcHBpbmcgcmVxdWlyZWQKK2ZvciBhIHNpbmdsZSBvcmRlciB3aGVuIHlvdSBwYXkgZm9yIGVhY2ggc3Vic2NyaXB0aW9uLiAgSWYgeW91J3JlIGluIEFsYXNrYSwKK0hhd2FpaSwgb3IgUHVlcnRvIFJpY28geW91IG11c3QgYWRkICQyMC4wMCBmb3Igc2hpcHBpbmcgZm9yIGVhY2gKK3N1YnNjcmlwdGlvbi4gIElmIHlvdSdyZSBvdXRzaWRlIG9mIHRoZSBVLlMuLCBDYW5hZGEsIGFuZCBQdWVydG8gUmljbywgeW91CittdXN0IGFkZCAkODAuMDAgZm9yIGVhY2ggc3Vic2NyaXB0aW9uLiAgU2VlICJDRC1ST01zIiBhbmQgIlRheCBhbmQgU2hpcHBpbmcKK0Nvc3RzIiBvbiB0aGUgKm5vdGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIE9yZGVyIEZvcm06Oi4KKworIAorCitGU0YgVC1zaGlydAorKioqKioqKioqKioKKworVGhlIGZyb250IG9mIG91ciBULXNoaXJ0IGhhcyB0aGUgR05VIEVtYWNzIExpc3AgY29kZSBgKFVTRSAnR05VKScgd2l0aCAiYCgpJyIKK2JlaW5nIHRoZSBkYW5jaW5nIHBhcmVudGhlc2VzIGZyb20gdGhlIGNvdmVyIG9mIG91ciBgR05VIEVtYWNzIExpc3AgUmVmZXJlbmNlCitNYW51YWwnIChkcmF3biBieSBCZXJrZWxleSwgQ0EgYXJ0aXN0IEV0aWVubmUgU3V2YXNhKS4gIFRoZSBzaGlydCdzIGJhY2sgaGFzCit0aGUgUHJlYW1ibGUgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGVzZSBzaGlydHMgY29tZSBpbiBibGFjaywgcHVycGxlLCByZWQsIHBpbmssIGJ1cmd1bmR5LCBibHVlLCBhbmQgbmF0dXJhbAorKG9mZi13aGl0ZSkuICBXaGVuIHlvdSBvcmRlciwgcGxlYXNlIGdpdmUgMyBjaG9pY2VzLiAgQmxhY2sgYW5kIHB1cnBsZSBhcmUKK3ByaW50ZWQgaW4gd2hpdGU7IHRoZSBvdGhlciBjb2xvcnMgYXJlIHByaW50ZWQgaW4gYmxhY2suICBBbGwgc2hpcnRzIGFyZQordGhpY2sgMTAwJSBjb3R0b24sIGFuZCBjb21lIGluIHNpemVzIFMsIE0sIEwsIFhMLCBhbmQgWFhMIChidXQgdGhleSBydW4gc21hbGwKK3NvIHlvdSBtYXkgd2FudCBhIGxhcmdlciBzaXplIHRoYW4gdXN1YWwpLgorCitHTlUgVC1zaGlydHMgb2Z0ZW4gY3JlYXRlIHNwb250YW5lb3VzIGZyaWVuZHNoaXBzIGF0IGNvbmZlcmVuY2VzICYgb24KK3VuaXZlcnNpdHkgY2FtcHVzZXMuICBUaGV5IGFsc28gbWFrZSBncmVhdCBnaWZ0cyBmb3IgZnJpZW5kcyAmIGZhbWlseSwKK2luY2x1ZGluZyBjaGlsZHJlbiEKKworIAorCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gT3JkZXIgRm9ybQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQWxsIGl0ZW1zIGFyZSBkaXN0cmlidXRlZCB3aXRoIHBlcm1pc3Npb24gdG8gY29weSBhbmQgdG8gcmVkaXN0cmlidXRlLgorVGV4aW5mbyBzb3VyY2UgZm9yIGVhY2ggbWFudWFsIGFuZCBzb3VyY2UgZm9yIGVhY2ggcmVmZXJlbmNlIGNhcmQgaXMgb24gdGhlCithcHByb3ByaWF0ZSBDRC1ST007IHRoZSBwcmljZXMgZm9yIHRoZXNlIG1lZGlhIGRvIG5vdCBpbmNsdWRlIHByaW50ZWQKK2RvY3VtZW50YXRpb24uICBBbGwgaXRlbXMgYXJlIHByb3ZpZGVkIG9uIGFuIGBgYXMgaXMnJyBiYXNpcywgd2l0aCBubword2FycmFudHkgb2YgYW55IGtpbmQuICBQbGVhc2UgYWxsb3cgZm91ciB3ZWVrcyBmb3IgZGVsaXZlcnkgKHRob3VnaCBpdAord29uJ3QgdXN1YWxseSB0YWtlIHRoYXQgbG9uZykuCisKKworICAgICBQUklDRSBBTkQgQ09OVEVOVFMgTUFZIENIQU5HRSBXSVRIT1VUIE5PVElDRSBBRlRFUiBKdWx5IDMxLCAxOTk3LgorCisKK0EgcG9zc2libHkgbW9yZSBjdXJyZW50IHZlcnNpb24gb2YgdGhpcyBvcmRlciBmb3JtIGNhbiBiZSBmb3VuZCBvbiB0aGUKK1dvcmxkIFdpZGUgV2ViIGF0IGBodHRwOi8vd3d3LmdudS5haS5taXQuZWR1L29yZGVyL29yZGVyLmh0bWwnIG9yCitjYW4gYmUgZm91bmQgaW4gZmlsZSBgL3B1Yi9nbnUvR05VaW5mby9PUkRFUlMnIG9uIGEgR05VIEZUUCBob3N0CisobGlzdGVkIGluICpOb3RlIEhvdyB0byBHZXQgR05VIFNvZnR3YXJlOjopLgorCisKKworRlNGIERlbHV4ZSBEaXN0cmlidXRpb24KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisoUGxlYXNlIGNvbnRhY3QgdXMgd2l0aCBhbnkgcXVlc3Rpb25zLiAgKm5vdGUgRGVsdXhlIERpc3RyaWJ1dGlvbjo6LgorZm9yIG1hY2hpbmUsIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBtZWRpYSB0eXBlcy4pCisKKworX19fXyBAICQ1MDAwID0gJCBfX19fX18gICBUaGUgRGVsdXhlIERpc3RyaWJ1dGlvbiwgd2l0aCBtYW51YWxzLCBldGMuCisKK01hY2hpbmU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitPcGVyYXRpbmcgc3lzdGVtOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworTWVkaWEgdHlwZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1ZlcnNpb24gb2YgWCBXaW5kb3cgU3lzdGVtIHRvIGJ1aWxkOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworQ0QtUk9NcywgaW4gSVNPIDk2NjAgZm9ybWF0ICgqbm90ZSBDRC1ST01zOjouKToKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworCitHTlUgU291cmNlIENvZGUgQ0QtUk9NcywgVmVyc2lvbiA5IHdpdGggWDExUjYuMyAoKm5vdGUgSmFudWFyeSAxOTk3IFNvdXJjZSBDb2RlIENELVJPTXM6Oi4pOgorCitfX19fIEAgJDI0MCAgPSAkIF9fX19fXyAgIGZvciBjb3Jwb3JhdGlvbnMgYW5kIG90aGVyIG9yZ2FuaXphdGlvbnMuCisKK19fX18gQCAkIDYwICA9ICQgX19fX19fICAgZm9yIGluZGl2aWR1YWxzLgorCisKK1N1YnNjcmlwdGlvbnMsIG5leHQgNCB1cGRhdGVzLCBvZiB0aGUgU291cmNlIENvZGUgQ0QtUk9NLCBpbiBJU08gOTY2MCBmb3JtYXQKKygqbm90ZSBDRC1ST00gU3Vic2NyaXB0aW9uIFNlcnZpY2U6Oi4pOgorCitfX19fIEAgJDcyMCAgPSAkIF9fX19fXyAgIGZvciBjb3Jwb3JhdGlvbnMgYW5kIG90aGVyIG9yZ2FuaXphdGlvbnMuCisKK19fX18gQCAkMTgwICA9ICQgX19fX19fICAgZm9yIGluZGl2aWR1YWxzLgorCisKK0dOVSBDb21waWxlciBUb29scyBCaW5hcmllcyBDRC1ST00sIFZlcnNpb24gNCwgSmFudWFyeSAxOTk3IEVkaXRpb24KKygqbm90ZSBDb21waWxlciBUb29scyBCaW5hcmllcyBDRC1ST006Oi4pOgorCitfX19fIEAgJDIyMCAgPSAkIF9fX19fXyAgIGZvciBjb3Jwb3JhdGlvbnMgYW5kIG90aGVyIG9yZ2FuaXphdGlvbnMuCisKK19fX18gQCAgJDU1ICA9ICQgX19fX19fICAgZm9yIGluZGl2aWR1YWxzLgorCisKKworUHJvY2VlZGluZ3MKKy0tLS0tLS0tLS0tCisKK19fX18gQCAkIDI1ICA9ICQgX19fX19fICAgVGhlIFByb2NlZWRpbmdzIG9mIHRoZSBGaXJzdCBDb25mZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIEZyZWVseSBSZWRpc3RyaWJ1dGFibGUgU29mdHdhcmUgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB3aGlsZSBzdXBwbGllcyBsYXN0LgorCisKKworTWFudWFscworLS0tLS0tLQorCitUaGVzZSBtYW51YWxzICgqbm90ZSBEb2N1bWVudGF0aW9uOjouKS4gIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIG1hbnVhbAord2lsbCBiZSBzaGlwcGVkLiAgUGxlYXNlIGNvbnRhY3QgdXMgaWYgeW91IHdhbnQgYSBzcGVjaWZpYyB2ZXJzaW9uLgorCitfX19fIEAgJCAyNSAgPSAkIF9fX19fXyAgIEdOVSBFbWFjcyBtYW51YWwsIHdpdGggYSByZWZlcmVuY2UgY2FyZC4KKworX19fXyBAICQgNTAgID0gJCBfX19fX18gICBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgbWFudWFsLCBpbiB0d28gdm9sdW1lcy4KKworX19fXyBAICQgNjAgID0gJCBfX19fX18gICBHTlUgRW1hY3MgTGlzcCBSZWZlcmVuY2UsIEphcGFuZXNlIEVkaXRpb24uCisKK19fX18gQCAkIDUwICA9ICQgX19fX19fICAgVXNpbmcgYW5kIFBvcnRpbmcgR05VIENDLgorCitfX19fIEAgJCA1MCAgPSAkIF9fX19fXyAgIEdOVSBDIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbC4KKworX19fXyBAICQgNTAgID0gJCBfX19fX18gICBHTlUgRW1hY3MgQ2FsYyBtYW51YWwsIHdpdGggYSByZWZlcmVuY2UgY2FyZC4KKworX19fXyBAICQgMjAgID0gJCBfX19fX18gICBQcm9ncmFtbWluZyBpbiBFbWFjcyBMaXNwOiBBbiBJbnRyb2R1Y3Rpb24uCisKK19fX18gQCAkIDIwICA9ICQgX19fX19fICAgRGVidWdnaW5nIHdpdGggR0RCLCB3aXRoIGEgcmVmZXJlbmNlIGNhcmQuCisKK19fX18gQCAkIDI1ICA9ICQgX19fX19fICAgR05VIEF3ayBVc2VyJ3MgR3VpZGUuCisKK19fX18gQCAkIDIwICA9ICQgX19fX19fICAgTWFrZSBtYW51YWwuCisKK19fX18gQCAkIDIwICA9ICQgX19fX19fICAgQmlzb24gbWFudWFsLCB3aXRoIGEgcmVmZXJlbmNlIGNhcmQuCisKK19fX18gQCAkIDIwICA9ICQgX19fX19fICAgRmxleCBtYW51YWwsIHdpdGggYSByZWZlcmVuY2UgY2FyZC4KKworX19fXyBAICQgMjAgID0gJCBfX19fX18gICBUZXhpbmZvIG1hbnVhbC4KKworX19fXyBAICQgMTUgID0gJCBfX19fX18gICBUZXJtY2FwIG1hbnVhbC4KKworCisKK1JlZmVyZW5jZSBDYXJkcworLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIGNhcmRzLCBpbiBwYWNrZXRzIG9mIHRlbi4gIEZvciBzaW5nbGUgY29waWVzIHBsZWFzZQorY29udGFjdCB1cy4KKworX19fXyBAICQgMTAgID0gJCBfX19fX18gICBHTlUgRW1hY3MgdmVyc2lvbiAxOSByZWZlcmVuY2UgY2FyZHMuCisKK19fX18gQCAkIDEwICA9ICQgX19fX19fICAgR05VIEVtYWNzIENhbGMgcmVmZXJlbmNlIGNhcmRzLgorCitfX19fIEAgJCAxMCAgPSAkIF9fX19fXyAgIEdEQiByZWZlcmVuY2UgY2FyZHMuCisKK19fX18gQCAkIDEwICA9ICQgX19fX19fICAgQmlzb24gcmVmZXJlbmNlIGNhcmRzLgorCitfX19fIEAgJCAxMCAgPSAkIF9fX19fXyAgIEZsZXggcmVmZXJlbmNlIGNhcmRzLgorCisKKworVC1zaGlydHMKKy0tLS0tLS0tCisKK0dOVS9GU0YgVC1zaGlydHMsIHRoaWNrIDEwMCUgY290dG9uIGluIHNpemVzOiBNLCBMLCBYTCwgJiBYWEwgKHRoZXkgcnVuCitzbWFsbCk7IGFuZCBpbiBjb2xvcnM6IGJsYWNrLCBwdXJwbGUsIHJlZCwgcGluaywgYnVyZ3VuZHksIGJsdWUsICYKK25hdHVyYWwgKG9mZi13aGl0ZSk7IHBsZWFzZSBsaXN0IDFzdCwgMm5kLCBhbmQgM3JkIGNob2ljZSBvZiBjb2xvcgorKCpub3RlIEZTRiBULXNoaXJ0OjouKToKKworX19fXyBAICQgMTUgID0gJCBfX19fX18gICBTaXplIF9fX19fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgY2hvaWNlOiAxc3QgX19fX19fXyAybmQgX19fX19fXyAzcmQgX19fX19fXworCitfX19fIEAgJCAxNSAgPSAkIF9fX19fXyAgIFNpemUgX19fX18KKworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciBjaG9pY2U6IDFzdCBfX19fX19fIDJuZCBfX19fX19fIDNyZCBfX19fX19fCisKK19fX18gQCAkIDE1ICA9ICQgX19fX19fICAgU2l6ZSAgX19fX18KKworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciBjaG9pY2U6IDFzdCBfX19fX19fIDJuZCBfX19fX19fIDNyZCBfX19fX19fCisKK19fX18gQCAkIDE1ICA9ICQgX19fX19fICAgU2l6ZSBfX19fXworCisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGNob2ljZTogMXN0IF9fX19fX18gMm5kIF9fX19fX18gM3JkIF9fX19fX18KKworCitPbGRlciBJdGVtcworLS0tLS0tLS0tLS0KKworT2xkZXIgaXRlbXMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoaWxlIHN1cHBsaWVzIGxhc3QuCisKK19fX18gQCAkICA1ICA9ICQgX19fX19fICAgR05VIEVtYWNzIHZlcnNpb24gMTggcmVmZXJlbmNlIGNhcmRzLCBpbiBwYWNrZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0ZW4uCisKK19fX18gQCAkIDE1ICA9ICQgX19fX19fICAgR05VIEVtYWNzIE1hbnVhbCBmb3IgRW1hY3MgdmVyc2lvbiAxOS4yOS4KKworCitfX19fIEAgJCAxMCAgPSAkIF9fX19fXyAgIEdhd2sgTWFudWFsLCBFZGl0aW9uIDAuMTYgZm9yIHZlcnNpb24gMi4xNi4KKworCitfX19fIEAgJCA0MCAgPSAkIF9fX19fXyAgIFVzaW5nIGFuZCBQb3J0aW5nIEdDQywgOC41IHggMTEgaW5jaGVzLCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFzdGljIGJpbmRpbmcgKHNhbWUgdGV4dCBhcyBjdXJyZW50IGVkaXRpb24pCisKK19fX18gQCAkIDE1ICA9ICQgX19fX19fICAgRGVidWdnaW5nIHdpdGggR0RCIGZvciBWZXJzaW9uIDQuMTQKKworCitQbGVhc2UgZmlsbCBpbiB0aGUgbnVtYmVyIG9mIGVhY2ggb2xkZXIgQ0QtUk9NIHlvdSBvcmRlcjoKKworICAgICBHTlUgQ29tcGlsZXIgVG9vbHMgQmluYXJpZXMgQ0QtUk9NczoKKworVmVyc2lvbiAxIChEZWNlbWJlciAnOTMpICBfX19fX18gICAgVmVyc2lvbiAyIChEZWNlbWJlciAnOTQpIF9fX19fXworCitWZXJzaW9uIDMgKERlY2VtYmVyICc5NSkgIF9fX19fXworCisgICAgIEdOVSBTb3VyY2UgQ29kZSBDRC1ST01zOiAoVmVyc2lvbiA1IChEZWMuICc5NCkgaXMgbm90IGF2YWlsYWJsZS4pCisKK1ZlcnNpb24gMSAoT2N0b2JlciAnOTIpICAgX19fX19fICAgIFZlcnNpb24gMiAoTWF5ICc5MykgX19fX19fCisKK1ZlcnNpb24gMyAoTm92ZW1iZXIgJzkzIC0gbGFzdCBlZGl0aW9uIHdpdGggWDExUjUpICBfX19fX18KKworVmVyc2lvbiA0IChNYXkgJzk0IC0gZmlyc3QgZWRpdGlvbiB3aXRoIFgxMVI2KSAgX19fX19fCisKK1ZlcnNpb24gNiAoSnVuZSAnOTUpICBfX19fX18gICAgICAgIFZlcnNpb24gNyAoRGVjLiAnOTUpICBfX19fX18KKworVmVyc2lvbiA4IChKdW5lICc5NikgIF9fX19fXworCitQbGVhc2UgcHV0IHRoZSB0b3RhbCBjb3VudCBhbmQgY29zdCBvZiB0aGUgYWJvdmUgb2xkZXIgQ0QtUk9NcyBoZXJlOgorCitfX19fIEAgJCA4MCAgPSAkIF9fX19fXyAgIGZvciBjb3Jwb3JhdGlvbnMgYW5kIG90aGVyIG9yZ2FuaXphdGlvbnMuCisKK19fX18gQCAkIDIwICA9ICQgX19fX19fICAgZm9yIGluZGl2aWR1YWxzLgorCisgICAgICAgICAgICAgICAgID09PT09PQorCisgICAgICBTdWJ0b3RhbCAkIF9fX19fXworCisKKworVGF4IGFuZCBTaGlwcGluZyBDb3N0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgKyAkIF9fX19fXyAgIEZvciBhZGRyZXNzZXMgaW4gTWFzc2FjaHVzZXR0czogYWRkIDUlIHNhbGVzIHRheAorICAgICAgICAgICAgICAgICAgICAgICAgICBvciBnaXZlIHRheCBleGVtcHQgbnVtYmVyLiAgVGhlcmUgaXMgbm8gc2FsZXMgdGF4CisgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIFQtc2hpcnRzLgorICAgICAgICAgICAgICsgJCBfX19fX18gICBTaGlwcGluZyBmZWUgZm9yIGFkZHJlc3NlcyBpbiBBbGFza2EsIEhhd2FpaSwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHVlcnRvIFJpY286CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCAgNS4wMCBiYXNlIGNoYXJnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyAkICA1LjAwIGZvciAqZWFjaCogRW1hY3MgQ2FsYyBvciBFbWFjcyBMaXNwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIG1hbnVhbCAoJCA1LjAwICogI29mTWFucyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICsgJCAyMC4wMCBmb3IgKmVhY2gqIENELVJPTSBzdWJzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkMjAuMDAgKiAjb2ZTdWJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyAkICAxLjAwIGZvciAqZWFjaCogaXRlbSBvdGhlciB0aGVuIHRoZSBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGlwcGluZyBmb3IgYWxsIG90aGVyIGl0ZW1zID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCAxLjAwICogI29mT3RoZXJJdGVtcykuCisgICAgICAgICAgICAgKyAkIF9fX19fXyAgIFNoaXBwaW5nIGZlZSBmb3IgbW9zdCBGb3JlaWduIERlc3RpbmF0aW9uczogKFBsZWFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBkbyAqbm90KiB1c2UgdGhpcyBmb3JtdWxhIGZvciBhZGRyZXNzZXMgaW4gQ2hpbmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEd1YW0sIEluZG9uZXNpYSwgSXNyYWVsLCBNYWxheXNpYSwgTmV3IFplYWxhbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBpbmVzLCBhbmQgVGhhaWxhbmQuICBQbGVhc2UgZmF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBvciBjb250YWN0IHVzIGZvciBhbiBleGFjdCBzaGlwcGluZyBxdW90ZS4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCAyMC4wMCBiYXNlIGNoYXJnZSBmb3Igb3JkZXJzIHRvIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXMgb3V0c2lkZSBvZiBVLlMuLCBDYW5hZGEsICYgUHVlcnRvIFJpY286CisgICAgICAgICAgICAgICAgICAgICAgICAgICsgJCAxMC4wMCBmb3IgZWFjaCBpdGVtIG9yZGVyZWQsICgkIDEwLjAwICogI29mSXRlbXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgJCA4MC4wMCBmb3IgZWFjaCBDRC1ST00gc3Vic2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJCA4MC4wMCAqICNvZlN1YnMpIChkb24ndCBjb3VudCBhcyBhbiBpdGVtKS4KKyAgICAgICAgICAgICArICQgX19fX19fICAgT3B0aW9uYWwgKHRheC1kZWR1Y3RpYmxlIGluIHRoZSBVLlMuKSBkb25hdGlvbi4KKyAgICAgICAgICAgICAgICAgLS0tLS0tICAgV2Ugc3VnZ2VzdCA1JSBpZiBwYXlpbmcgYnkgY3JlZGl0IGNhcmQuCisKKyAgICAgICAgIFRPVEFMICQgX19fX19fICAgV2UgcGF5IGZvciBzaGlwcGluZyB2aWEgVVBTIGdyb3VuZCB0cmFuc3BvcnRhdGlvbiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udGlndW91cyA0OCBzdGF0ZXMgYW5kIENhbmFkYS4gIEZvciB2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIG9yZGVycywgYXNrIGFib3V0IGFjdHVhbCBzaGlwcGluZyBjb3N0cyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvcmRlci4KKworTm90ZTogIFRoZSBzaGlwcGluZyBmZWUgZm9yIGZvcmVpZ24gZGVzdGluYXRpb25zIGNvdmVycyBleHByZXNzIGNvdXJpZXIKKyAgICAgICBzaGlwcGluZy4gIElmIHlvdSB3b3VsZCBsaWtlIHNoaXBwaW5nIHZpYSBhaXIgbWFpbCwgcGxlYXNlIGNvbnRhY3QKKyAgICAgICBvdXIgZGlzdHJpYnV0aW9uIG9mZmZpY2UgZm9yIGEgcXVvdGUgb24geW91ciBvcmRlci4KKworU2hpcHBpbmcgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05hbWU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitNYWlsIFN0b3AvRGVwdC4gTmFtZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworT3JnYW5pemF0aW9uOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1N0cmVldCBBZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitDaXR5LCBTdGF0ZS9Qcm92aW5jZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworWmlwIENvZGUvUG9zdGFsIENvZGUgQ291bnRyeTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RlbGVwaG9uZSBudW1iZXIgaW4gY2FzZSBvZiBhIHByb2JsZW0gd2l0aCB5b3VyIG9yZGVyLgorRm9yIGludGVybmF0aW9uYWwgb3JkZXJzLCBwbGVhc2UgaW5jbHVkZSBhIEZheCBudW1iZXIuIF9fX19fX19fX19fX19fX19fX19fX19fCisKK0UtbWFpbCBBZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICBPcmRlcnMgZmlsbGVkIG9ubHkgdXBvbiByZWNlaXB0IG9mIGNoZWNrLCBtb25leSBvcmRlciwgb3IgY3JlZGl0IGNhcmQgICAgIHwKK3wgIG9yZGVyIGluIFUuUy4gZG9sbGFycy4gIFVucGFpZCBvcmRlcnMgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgc2VuZGVyLiAgICAgfAorfCAgV2UgZG8gbm90IGhhdmUgdGhlIHN0YWZmIHRvIGhhbmRsZSB0aGUgYmlsbGluZyBvZiB1bnBhaWQgb3JkZXJzLiAgUGxlYXNlICB8Cit8ICBoZWxwIGtlZXAgb3VyIGxpdmVzIHNpbXBsZSBieSBpbmNsdWRpbmcgeW91ciBwYXltZW50IHdpdGggeW91ciBvcmRlci4gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitGb3Igb3JkZXJzIGZyb20gb3V0c2lkZSB0aGUgVS5TLjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBwYXlpbmcgYWxsIGR1dGllcywgdGFyaWZmcywgYW5kIHRheGVzLiAgSWYgeW91CityZWZ1c2UgdG8gcGF5IHRoZSBjaGFyZ2VzLCB0aGUgc2hpcHBlciB3aWxsIHJldHVybiBvciBhYmFuZG9uIHRoZSBvcmRlci4KKworCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgIFBsZWFzZSBtYWtlIGNoZWNrcyBwYXlhYmxlIHRvIHRoZSBgYEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbicnLiAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgQ2hlY2tzIG11c3QgYmUgaW4gVS5TLiBkb2xsYXJzLCBkcmF3biBvbiBhIFUuUy4gYmFuay4gICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitGb3IgQ3JlZGl0IENhcmQgT3JkZXJzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB0YWtlcyB0aGVzZSBjcmVkaXQgY2FyZHM6IENhcnRlIEJsYW5jaGUsCitEaW5lcidzIENsdWIsIEpDQiwgTWFzdGVyQ2FyZCwgVmlzYSwgb3IgQW1lcmljYW4gRXhwcmVzcy4gIFBsZWFzZSBub3RlIHRoYXQKK3dlIGFyZSBjaGFyZ2VkIGFib3V0IDUlIG9mIGFuIG9yZGVyJ3MgdG90YWwgYW1vdW50IGluIGNyZWRpdCBjYXJkCitwcm9jZXNzaW5nIGZlZXMuICBQbGVhc2UgY29uc2lkZXIgcGF5aW5nIGJ5IGNoZWNrIGluc3RlYWQsIG9yIGFkZGluZyBvbiBhIDUlCitkb25hdGlvbiB0byBtYWtlIHVwIHRoZSBkaWZmZXJlbmNlLiAgVG8gcGxhY2UgYSBjcmVkaXQgY2FyZCBvcmRlciwgcGxlYXNlCitnaXZlIHVzIHRoaXMgaW5mb3JtYXRpb246CisKKworQ2FyZCB0eXBlOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK0FjY291bnQgTnVtYmVyOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitFeHBpcmF0aW9uIERhdGU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworQ2FyZGhvbGRlcidzIE5hbWU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK0NhcmRob2xkZXIncyBTaWduYXR1cmU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgIElmIHlvdSB3aXNoIHRvIHBheSBieSB3aXJlIHRyYW5zZmVyIG9yIHlvdSBhcmUgYSByZXNlbGxlciwgcGxlYXNlICAgICAgfAorfCAgICAgY29udGFjdCB1cyBvciB3cml0ZSB1cyBmb3IgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworQSBwb3NzaWJseSBtb3JlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIG9yZGVyIGZvcm0gY2FuIGJlIGZvdW5kIG9uIHRoZQorV29ybGQgV2lkZSBXZWIgYXQgYGh0dHA6Ly93d3cuZ251LmFpLm1pdC5lZHUvb3JkZXIvb3JkZXIuaHRtbCcgb3IKK2NhbiBiZSBmb3VuZCBpbiBmaWxlIGAvcHViL2dudS9HTlVpbmZvL09SREVSUycgb24gYSBHTlUgRlRQIGhvc3QKKyhsaXN0ZWQgaW4gKk5vdGUgSG93IHRvIEdldCBHTlUgU29mdHdhcmU6OikuCisKKworCisgICAgICAgICAgICAgICAgUGxlYXNlIG1haWwgb3JkZXJzIHRvOiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9zdG9uLCBNQSAgIDAyMTExCitQUklDRVMgQU5EIENPTlRFTlRTIE1BWSBDSEFOR0UgICAgICAgICAgKzEtNjE3LTU0Mi01OTQyCitXSVRIT1VUIE5PVElDRSBBRlRFUiBKdWx5IDMxLCAxOTk3ICAgICBGYXggKGluY2x1ZGluZyBKYXBhbik6ICsxLTYxNy01NDItMjY1MgorCitWZXJzaW9uOiBKYW51YXJ5IDE5OTcgQVNDSUkgZXRjL09SREVSUworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZ2NjL1JFQURNRSBiL2djYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlZDc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9SRUFETUUKQEAgLTAsMCArMSwyNiBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHZlcnNpb24gMi43LjIgcmVsZWFzZSBvZiB0aGUgR05VIEMKK2NvbXBpbGVyLiAgSXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBzdXBwb3J0IGZvciBjb21waWxpbmcgQysrIGFuZAorT2JqZWN0aXZlIEMsIGluY2x1ZGluZyBhIHJ1bi10aW1lIGxpYnJhcnkgZm9yIE9iamVjdGl2ZSBDLgorCitUaGUgR05VIEMgY29tcGlsZXIgaXMgZnJlZSBzb2Z0d2FyZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nCitwZXJtaXNzaW9uLgorCitTZWUgdGhlIGZpbGUgZ2NjLnRleGkgKHRvZ2V0aGVyIHdpdGggb3RoZXIgZmlsZXMgdGhhdCBpdCBpbmNsdWRlcykgZm9yCitpbnN0YWxsYXRpb24gYW5kIHBvcnRpbmcgaW5mb3JtYXRpb24uICBUaGUgZmlsZSBJTlNUQUxMIGNvbnRhaW5zIGEKK2NvcHkgb2YgdGhlIGluc3RhbGxhdGlvbiBpbmZvcm1hdGlvbiwgYXMgcGxhaW4gQVNDSUkuCisKK0luc3RhbGxpbmcgdGhpcyBwYWNrYWdlIHdpbGwgY3JlYXRlIHZhcmlvdXMgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgb2YKKy91c3IvbG9jYWwvbGliLCB3aGljaCBhcmUgcGFzc2VzIHVzZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBhIGxpYnJhcnkKK25hbWVkIGxpYmdjYy5hLiAgSXQgd2lsbCBhbHNvIGNyZWF0ZSAvdXNyL2xvY2FsL2Jpbi9nY2MsIHdoaWNoIGlzCit0aGUgdXNlci1sZXZlbCBjb21tYW5kIHRvIGRvIGEgY29tcGlsYXRpb24uCisKK1NlZSB0aGUgQnVncyBjaGFwdGVyIG9mIHRoZSBHQ0MgTWFudWFsIGZvciBob3cgdG8gcmVwb3J0IGJ1Z3MKK3VzZWZ1bGx5LiAgQW4gb25saW5lIHJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIG1hbnVhbCBpcyBpbiB0aGUgZmlsZXMKK2djYy5pbmZvKi4KKworVGhlIGZpbGVzIHBzZWxmLmMgYW5kIHBzZWxmMS5jIGFyZSBub3QgcGFydCBvZiBHQ0MuCitUaGV5IGFyZSBwcm9ncmFtcyB0aGF0IHByaW50IHRoZW1zZWx2ZXMgb24gc3RhbmRhcmQgb3V0cHV0LgorVGhleSB3ZXJlIHdyaXR0ZW4gYnkgRGFyaW8gRGFyaW9sIGFuZCBHaW92YW5uaSBDb3p6aSwgYW5kIGFyZQoraW5jbHVkZWQgZm9yIHlvdXIgaGFja2luZyBwbGVhc3VyZS4gIExpa2V3aXNlIHBzZWxmMi5jCisoV2hvIGlzIHRoZSBhdXRob3Igb2YgdGhhdD8pIGFuZCBwc2VsZjMuYyAoYnkgVmxhZCBUYWVlcm92IGFuZCBSYXNoaXQKK0Zha2hyZXlldikuCmRpZmYgLS1naXQgYS9nY2MvUkVBRE1FLWJ1Z3MgYi9nY2MvUkVBRE1FLWJ1Z3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlMTViYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9SRUFETUUtYnVncwpAQCAtMCwwICsxLDE0NCBAQAorVGhlIHB1cnBvc2Ugb2YgR0NDIHByZXRlc3RpbmcgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIG5ldyBHQ0MKK2Rpc3RyaWJ1dGlvbiwgYWJvdXQgdG8gYmUgcmVsZWFzZWQsIHdvcmtzIHByb3Blcmx5IG9uIHlvdXIgc3lzdGVtICp3aXRoCitubyBjaGFuZ2Ugd2hhdGV2ZXIqLCB3aGVuIGluc3RhbGxlZCBmb2xsb3dpbmcgdGhlIHByZWNpc2UKK3JlY29tbWVuZGF0aW9ucyB0aGF0IGNvbWUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitIZXJlIGFyZSBzb21lIGd1aWRlbGluZXMgb24gaG93IHRvIGRvIHByZXRlc3Rpbmcgc28gYXMgdG8gbWFrZSBpdAoraGVscGZ1bC4gIEFsbCBvZiB0aGVtIGZvbGxvdyBmcm9tIGNvbW1vbiBzZW5zZSB0b2dldGhlciB3aXRoIHRoZQorbmF0dXJlIG9mIHRoZSBwdXJwb3NlIGFuZCB0aGUgc2l0dWF0aW9uLgorCisqIEl0IGlzIGFic29sdXRlbHkgdml0YWwgdGhhdCB5b3UgbWVudGlvbiBldmVuIHRoZSBzbWFsbGVzdCBjaGFuZ2Ugb3IKK2RlcGFydHVyZSBmcm9tIHRoZSBzdGFuZGFyZCBzb3VyY2VzIGFuZCBpbnN0YWxsYXRpb24gcHJvY2VkdXJlLgorCitPdGhlcndpc2UsIHlvdSBhcmUgbm90IHRlc3RpbmcgdGhlIHNhbWUgcHJvZ3JhbSB0aGF0IEkgd3JvdGUuICBUZXN0aW5nCithIGRpZmZlcmVudCBwcm9ncmFtIGlzIHVzdWFsbHkgb2Ygbm8gdXNlIHdoYXRldmVyLiAgSXQgY2FuIGV2ZW4gY2F1c2UKK3Ryb3VibGUgaWYgeW91IGZhaWwgdG8gdGVsbCBtZSB0aGF0IHlvdSB0ZXN0ZWQgc29tZSBvdGhlciBwcm9ncmFtCitpbnN0ZWFkIG9mIHdoYXQgSSBrbm93IGFzIEdDQy4gIEkgbWlnaHQgdGhpbmsgdGhhdCBHQ0Mgd29ya3MsIHdoZW4gaW4KK2ZhY3QgaXQgaGFzIG5vdCBiZWVuIHByb3Blcmx5IHRyaWVkLCBhbmQgbWlnaHQgaGF2ZSBhIGdsYXJpbmcgZmF1bHQuCisKKyogRXZlbiBjaGFuZ2luZyB0aGUgY29tcGlsYXRpb24gb3B0aW9ucyBjb3VudHMgYXMgYSBjaGFuZ2UgaW4gdGhlCitwcm9ncmFtLiAgVGhlIEdDQyBzb3VyY2VzIHNwZWNpZnkgd2hpY2ggY29tcGlsYXRpb24gb3B0aW9ucyB0byB1c2UuCitTb21lIG9mIHRoZW0gYXJlIHNwZWNpZmllZCBpbiBtYWtlZmlsZXMsIGFuZCBzb21lIGluIG1hY2hpbmUtc3BlY2lmaWMKK2NvbmZpZ3VyYXRpb24gZmlsZXMuCisKK1lvdSBoYXZlIHdheXMgdG8gb3ZlcnJpZGUgdGhpcy0tYnV0IGlmIHlvdSBkbywgdGhlbiB5b3UgYXJlIG5vdAordGVzdGluZyB3aGF0IG9yZGluYXJ5IHVzZXJzIHdpbGwgZG8uICBUaGVyZWZvcmUsIHdoZW4gcHJldGVzdGluZywgaXQKK2lzIHZpdGFsIHRvIHRlc3Qgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBvcHRpb25zLgorCisoSXQgaXMgb2theSB0byB0ZXN0IHdpdGggbm9uc3RhbmRhcmQgb3B0aW9ucyBhcyB3ZWxsIGFzIHRlc3Rpbmcgd2l0aAordGhlIHN0YW5kYXJkIG9uZXMuKQorCisqIFRoZSBtYWNoaW5lIGFuZCBzeXN0ZW0gY29uZmlndXJhdGlvbiBmaWxlcyBvZiBHQ0MgYXJlIHBhcnRzIG9mCitHQ0MuICBTbyB3aGVuIHlvdSB0ZXN0IEdDQywgeW91IG5lZWQgdG8gZG8gaXQgd2l0aCB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBjb21lIHdpdGggR0NDLgorCitJZiBHQ0MgZG9lcyBub3QgY29tZSB3aXRoIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgY2VydGFpbiBtYWNoaW5lLAorYW5kIHlvdSB0ZXN0IGl0IHdpdGggY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGRvbid0IGNvbWUgd2l0aCBHQ0MsCit0aGlzIGlzIGVmZmVjdGl2ZWx5IGNoYW5naW5nIEdDQy4gIEJlY2F1c2UgdGhlIGNydWNpYWwgZmFjdCBhYm91dAordGhlIHBsYW5uZWQgcmVsZWFzZSBpcyB0aGF0LCB3aXRob3V0IGNoYW5nZXMsIGl0IGRvZXNuJ3Qgd29yayBvbiB0aGF0CittYWNoaW5lLgorCitUbyBtYWtlIEdDQyB3b3JrIG9uIHRoYXQgbWFjaGluZSwgSSB3b3VsZCBuZWVkIHRvIGluc3RhbGwgbmV3Citjb25maWd1cmF0aW9uIGZpbGVzLiAgVGhhdCBpcyBub3Qgb3V0IG9mIHRoZSBxdWVzdGlvbiwgc2luY2UgaXQgaXMKK3NhZmUtLWl0IGNlcnRhaW5seSB3b24ndCBicmVhayBhbnkgb3RoZXIgbWFjaGluZXMgdGhhdCBhbHJlYWR5IHdvcmsuCitCdXQgeW91IHdpbGwgaGF2ZSB0byBydXNoIG1lIHRoZSBsZWdhbCBwYXBlcnMgdG8gZ2l2ZSB0aGUgRlNGCitwZXJtaXNzaW9uIHRvIHVzZSBhIGxhcmdlIHBpZWNlIG9mIHRleHQuCisKKyogTG9vayBmb3IgcmVjb21tZW5kYXRpb25zIGZvciB5b3VyIHN5c3RlbS4KKworWW91IGNhbiBmaW5kIHRoZXNlIHJlY29tbWVuZGF0aW9ucyBpbiB0aGUgSW5zdGFsbGF0aW9uIG5vZGUgb2YgdGhlCittYW51YWwsIGFuZCBpbiB0aGUgZmlsZSBJTlNUQUxMLiAgKFRoZXNlIHR3byBmaWxlcyBoYXZlIHRoZSBzYW1lIHRleHQuKQorCitUaGVzZSBmaWxlcyBzYXkgd2hpY2ggY29uZmlndXJhdGlvbiBuYW1lIHRvIHVzZSBmb3IgeW91ciBtYWNoaW5lLCBzbwordXNlIHRoZSBvbmVzIHRoYXQgYXJlIHJlY29tbWVuZGVkLiAgSWYgeW91IGd1ZXNzLCB5b3UgbWlnaHQgZ3Vlc3MKK3dyb25nIGFuZCBlbmNvdW50ZXIgc3B1cmlvdXMgZGlmZmljdWx0aWVzLiAgV2hhdCdzIG1vcmUsIGlmIHlvdSBkb24ndAorZm9sbG93IHRoZSByZWNvbW1lbmRhdGlvbnMgdGhlbiB5b3UgYXJlbid0IGhlbHBpbmcgdG8gdGVzdCB0aGF0IGl0cworcmVjb21tZW5kYXRpb25zIGFyZSB2YWxpZC4KKworVGhlc2UgZmlsZXMgbWF5IGRlc2NyaWJlIG90aGVyIHRoaW5ncyB0aGF0IHlvdSBuZWVkIHRvIGRvIHRvIG1ha2UgR0NDCit3b3JrIG9uIHlvdXIgbWFjaGluZS4gIElmIHNvLCB5b3Ugc2hvdWxkIGZvbGxvdyB0aGVzZSByZWNvbW1lbmRhdGlvbnMKK2Fsc28sIGZvciB0aGUgc2FtZSByZWFzb24uCisKK0Fsc28gbG9vayBhdCB0aGUgVHJvdWJsZSBjaGFwdGVyIG9mIHRoZSBtYW51YWwgZm9yIGl0ZW1zIHRoYXQKK3BlcnRhaW4gdG8geW91ciBtYWNoaW5lLgorCisqIERvbid0IGRlbGF5IHNlbmRpbmcgaW5mb3JtYXRpb24uCisKK1doZW4geW91IGZpbmQgYSBwcm9ibGVtLCBwbGVhc2UgZG91YmxlIGNoZWNrIGl0IGlmIHlvdSBjYW4gZG8gc28KK3F1aWNrbHkuICBCdXQgZG9uJ3Qgc3BlbmQgYSBsb25nIHRpbWUgZG91YmxlLWNoZWNraW5nLiAgQSBnb29kIHJ1bGUgaXMKK2Fsd2F5cyB0byB0ZWxsIG1lIGFib3V0IGV2ZXJ5IHByb2JsZW0gb24gdGhlIHNhbWUgZGF5IHlvdSBlbmNvdW50ZXIKK2l0LCBldmVuIGlmIHRoYXQgbWVhbnMgeW91IGNhbid0IGZpbmQgYSBzb2x1dGlvbiBiZWZvcmUgeW91IHJlcG9ydCB0aGUKK3Byb2JsZW0uCisKK0knZCBtdWNoIHJhdGhlciBoZWFyIGFib3V0IGEgcHJvYmxlbSB0b2RheSBhbmQgYSBzb2x1dGlvbiB0b21vcnJvdwordGhhbiBnZXQgYm90aCBvZiB0aGVtIHRvbW9ycm93IGF0IHRoZSBzYW1lIHRpbWUuCisKKyogTWFrZSBlYWNoIGJ1ZyByZXBvcnQgc2VsZi1jb250YWluZWQuCisKK0lmIHlvdSByZWZlciBiYWNrIHRvIGFub3RoZXIgbWVzc2FnZSwgd2hldGhlciBmcm9tIHlvdSBvciBmcm9tIHNvbWVvbmUKK2Vsc2UsIHRoZW4gaXQgd2lsbCBiZSBuZWNlc3NhcnkgZm9yIGFueW9uZSB3aG8gd2FudHMgdG8gaW52ZXN0aWdhdGUKK3RoZSBidWcgdG8gZmluZCB0aGUgb3RoZXIgbWVzc2FnZS4gIFRoaXMgbWF5IGJlIGRpZmZpY3VsdCwgaXQgaXMKK3Byb2JhYmx5IHRpbWUtY29uc3VtaW5nLgorCitUbyBoZWxwIG1lIHNhdmUgdGltZSwgc2ltcGx5IGNvcHkgdGhlIHJlbGV2YW50IHBhcnRzIG9mIGFueSBwcmV2aW91cworbWVzc2FnZXMgaW50byB5b3VyIG93biBidWcgcmVwb3J0LgorCitJbiBwYXJ0aWN1bGFyLCBpZiBJIGFzayB5b3UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYmVjYXVzZSBhIGJ1ZyByZXBvcnQKK3dhcyBpbmNvbXBsZXRlLCBpdCBpcyBiZXN0IHRvIHNlbmQgbWUgdGhlICplbnRpcmUqIGNvbGxlY3Rpb24gb2YKK3JlbGV2YW50IGluZm9ybWF0aW9uLCBhbGwgdG9nZXRoZXIuICBJZiB5b3Ugc2VuZCBqdXN0IHRoZSBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiwgdGhhdCBtYWtlcyBtZSBkbyBleHRyYSB3b3JrLiAgVGhlcmUgaXMgZXZlbiBhIHJpc2sgdGhhdAorSSB3b24ndCByZW1lbWJlciB3aGF0IHF1ZXN0aW9uIHlvdSBhcmUgc2VuZGluZyBtZSB0aGUgYW5zd2VyIHRvLgorCisqIEFsd2F5cyBiZSBwcmVjaXNlIHdoZW4gdGFsa2luZyBhYm91dCBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUuICBTaG93Cit0aGluZ3MgcmF0aGVyIHRoYW4gZGVzY3JpYmluZyB0aGVtLiAgVXNlIGV4YWN0IGZpbGVuYW1lcyAocmVsYXRpdmUgdG8KK3RoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uKSwgbm90IHBhcnRpYWwgb25lcy4gIEZvcgorZXhhbXBsZSwgc2F5ICJJIGNoYW5nZWQgTWFrZWZpbGUiIHJhdGhlciB0aGFuICJJIGNoYW5nZWQgdGhlCittYWtlZmlsZSIuICBJbnN0ZWFkIG9mIHNheWluZyAiSSBkZWZpbmVkIHRoZSBNVU1CTEUgbWFjcm8iLCBzZW5kIGEKK2RpZmYgdGhhdCBzaG93cyB5b3VyIGNoYW5nZS4KKworKiBBbHdheXMgdXNlIGBkaWZmIC1jJyB0byBtYWtlIGRpZmZzLiAgSWYgeW91IGRvbid0IGluY2x1ZGUgY29udGV4dCwKK2l0IG1heSBiZSBoYXJkIGZvciBtZSB0byBmaWd1cmUgb3V0IHdoZXJlIHlvdSBwcm9wb3NlIHRvIG1ha2UgdGhlCitjaGFuZ2VzLiAgSSBtaWdodCBoYXZlIHRvIGlnbm9yZSB5b3VyIHBhdGNoIGJlY2F1c2UgSSBjYW4ndCB0ZWxsIHdoYXQKK2l0IG1lYW5zLgorCisqIFdoZW4geW91IHdyaXRlIGEgZml4LCBrZWVwIGluIG1pbmQgdGhhdCBJIGNhbid0IGluc3RhbGwgYSBjaGFuZ2UKK3RoYXQgd291bGQgYnJlYWsgb3RoZXIgc3lzdGVtcy4KKworUGVvcGxlIG9mdGVuIHN1Z2dlc3QgZml4aW5nIGEgcHJvYmxlbSBieSBjaGFuZ2luZyBtYWNoaW5lLWluZGVwZW5kZW50CitmaWxlcyBzdWNoIGFzIHRvcGxldi5jIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHRoYXQgYSBwYXJ0aWN1bGFyCitzeXN0ZW0gbmVlZHMuICBTb21ldGltZXMgaXQgaXMgdG90YWxseSBvYnZpb3VzIHRoYXQgc3VjaCBjaGFuZ2VzIHdvdWxkCiticmVhayBHQ0MgZm9yIGFsbW9zdCBhbGwgdXNlcnMuICBJIGNhbid0IHBvc3NpYmx5IG1ha2UgYSBjaGFuZ2UgbGlrZQordGhhdC4gIEFsbCBJIGNhbiBkbyBpcyBzZW5kIGl0IGJhY2sgdG8geW91IGFuZCBhc2sgeW91IHRvIGZpbmQgYSBmaXgKK3RoYXQgaXMgc2FmZSB0byBpbnN0YWxsLgorCitTb21ldGltZXMgcGVvcGxlIHNlbmQgZml4ZXMgdGhhdCAqbWlnaHQqIGJlIGFuIGltcHJvdmVtZW50IGluCitnZW5lcmFsLS1idXQgaXQgaXMgaGFyZCB0byBiZSBzdXJlIG9mIHRoaXMuICBJIGNhbiBpbnN0YWxsIHN1Y2gKK2NoYW5nZXMgc29tZSBvZiB0aGUgdGltZSwgYnV0IG5vdCBkdXJpbmcgcHJldGVzdCwgd2hlbiBJIGFtIHRyeWluZyB0bworZ2V0IGEgbmV3IHZlcnNpb24gdG8gd29yayByZWxpYWJseSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgorCitUaGUgc2FmZXN0IGNoYW5nZXMgZm9yIG1lIHRvIGluc3RhbGwgYXJlIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KK2ZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZS4gIEF0IGxlYXN0IEkga25vdyB0aG9zZSBjYW4ndCBjcmVhdGUKK2J1Z3Mgb24gb3RoZXIgbWFjaGluZXMuCisKKyogRG9uJ3QgdHJ5IGNoYW5naW5nIEdDQyB1bmxlc3MgaXQgZmFpbHMgdG8gd29yayBpZiB5b3UgZG9uJ3QgY2hhbmdlIGl0LgorCisqIERvbid0IGV2ZW4gc3VnZ2VzdCBjaGFuZ2VzIHRoYXQgd291bGQgb25seSBtYWtlIEdDQyBjbGVhbmVyLgorRXZlcnkgY2hhbmdlIEkgaW5zdGFsbCBjb3VsZCBpbnRyb2R1Y2UgYSBidWcsIHNvIEkgd29uJ3QgaW5zdGFsbAorYSBjaGFuZ2UgdW5sZXNzIEkgc2VlIGl0IGlzIG5lY2Vzc2FyeS4KKworKiBJZiB5b3Ugd291bGQgbGlrZSB0byBzdWdnZXN0IGNoYW5nZXMgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gZml4aW5nCitzZXJpb3VzIGJ1Z3MsIGRvbid0IHdhaXQgdGlsbCBwcmV0ZXN0IHRpbWUuICBJbnN0ZWFkLCBzZW5kIHRoZW0ganVzdAorYWZ0ZXIgSSBtYWtlIGEgcmVsZWFzZS4gIFRoYXQncyB0aGUgYmVzdCB0aW1lIGZvciBtZSB0byBpbnN0YWxsIHRoZW0uCisKKyogSW4gc29tZSBjYXNlcywgaWYgeW91IGRvbid0IGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzLCB5b3VyCitpbmZvcm1hdGlvbiBtaWdodCBzdGlsbCBiZSB1c2VmdWwsIGJ1dCBJIG1pZ2h0IGhhdmUgdG8gZG8gbW9yZSB3b3JrIHRvCittYWtlIHVzZSBvZiBpdC4gIFVuZm9ydHVuYXRlbHksIEkgYW0gc28gZmFyIGJlaGluZCBpbiBteSB3b3JrIHRoYXQgSQoranVzdCBjYW4ndCBnZXQgdGhlIGpvYiBkb25lIHVubGVzcyB5b3UgaGVscCBtZSB0byBkbyBpdCBlZmZpY2llbnRseS4KKworCisJCQkJVGhhbmsgeW91CisJCQkJICAgcm1zCisMCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiB0ZXh0CitFbmQ6CmRpZmYgLS1naXQgYS9nY2MvU0VSVklDRSBiL2djYy9TRVJWSUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmQ0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvU0VSVklDRQpAQCAtMCwwICsxLDE0NjAgQEAKKwkJCQkJCQktKi0gdGV4dCAtKi0KK0dOVSBTZXJ2aWNlIERpcmVjdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBsaXN0IG9mIHBlb3BsZSB3aG8gaGF2ZSBhc2tlZCB0byBiZSBsaXN0ZWQgYXMgb2ZmZXJpbmcKK3N1cHBvcnQgc2VydmljZXMgZm9yIEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIEdOVSBFbWFjcywgZm9yIGEgZmVlCitvciBpbiBzb21lIGNhc2VzIGF0IG5vIGNoYXJnZS4KKworVGhlIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gdGhlIHBlb3BsZSB3aG8gYXNrZWQgdG8gYmUgbGlzdGVkOword2UgZG8gbm90IGluY2x1ZGUgYW55IGluZm9ybWF0aW9uIHdlIGtub3cgdG8gYmUgZmFsc2UsIGJ1dCB3ZQorY2Fubm90IGNoZWNrIG91dCBhbnkgb2YgdGhlIGluZm9ybWF0aW9uOyB3ZSBhcmUgdHJhbnNtaXR0aW5nIGl0IHRvCit5b3UgYXMgaXQgd2FzIGdpdmVuIHRvIHVzIGFuZCBkbyBub3QgcHJvbWlzZSBpdCBpcyBjb3JyZWN0LgorQWxzbywgdGhpcyBpcyBub3QgYW4gZW5kb3JzZW1lbnQgb2YgdGhlIHBlb3BsZSBsaXN0ZWQgaGVyZS4KK1dlIGhhdmUgbm8gb3BpbmlvbnMgYW5kIHVzdWFsbHkgbm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFiaWxpdGllcyBvZgorYW55IHNwZWNpZmljIHBlcnNvbi4gIFdlIHByb3ZpZGUgdGhpcyBsaXN0IHRvIGVuYWJsZSB5b3UgdG8gY29udGFjdAorc2VydmljZSBwcm92aWRlcnMgYW5kIGRlY2lkZSBmb3IgeW91cnNlbGYgd2hldGhlciB0byBoaXJlIG9uZS4KKworQmVmb3JlIEZTRiB3aWxsIGxpc3QgeW91ciBuYW1lIGluIHRoZSBHTlUgU2VydmljZSBEaXJlY3RvcnksIHdlIGFzawordGhhdCB5b3UgYWdyZWUgaW5mb3JtYWxseSB0byB0aGUgZm9sbG93aW5nIHRlcm1zOgorCisxLiBZb3Ugd2lsbCBub3QgcmVzdHJpY3QgKGV4Y2VwdCBieSBjb3B5bGVmdCkgdGhlIHVzZSBvciBkaXN0cmlidXRpb24KK29mIGFueSBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgb3Igb3RoZXIgaW5mb3JtYXRpb24geW91IHN1cHBseSBhbnlvbmUKK2luIHRoZSBjb3Vyc2Ugb2YgbW9kaWZ5aW5nLCBleHRlbmRpbmcsIG9yIHN1cHBvcnRpbmcgR05VIHNvZnR3YXJlLgorVGhpcyBpbmNsdWRlcyBhbnkgaW5mb3JtYXRpb24gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFtZWxpb3JhdGUgdGhlCit1c2Ugb2YgR05VIHNvZnR3YXJlLgorCisyLiBZb3Ugd2lsbCBub3QgdGFrZSBhZHZhbnRhZ2Ugb2YgY29udGFjdCBtYWRlIHRocm91Z2ggdGhlIFNlcnZpY2UKK0RpcmVjdG9yeSB0byBhZHZlcnRpc2UgYW4gdW5yZWxhdGVkIGJ1c2luZXNzIChlLmcuLCBzYWxlcyBvZgorbm9uLUdOVS1yZWxhdGVkIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uKS4gIFlvdSBtYXkgc3BvbnRhbmVvdXNseQorbWVudGlvbiB5b3VyIGF2YWlsYWJpbGl0eSBmb3IgZ2VuZXJhbCBjb25zdWx0aW5nLCBidXQgeW91IHNob3VsZCBub3QKK3Byb21vdGUgYSBzcGVjaWZpYyB1bnJlbGF0ZWQgYnVzaW5lc3MgdW5sZXNzIHRoZSBjbGllbnQgYXNrcy4KKworUGxlYXNlIGluY2x1ZGUgc29tZSBpbmRpY2F0aW9uIG9mIHlvdXIgcmF0ZXMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHVzZXJzCitoYXZlIG5vdGhpbmcgdG8gZ28gYnkuCVBsZWFzZSBwdXQgZWFjaCBlLW1haWwgYWRkcmVzcyBpbnNpZGUgIjw+Ii4KK1BsZWFzZSBwdXQgbm90aGluZyBlbHNlIGluc2lkZSAiPD4iLiAgVGhhbmtzIQorCitGb3IgYSBjdXJyZW50IGNvcHkgb2YgdGhpcyBkaXJlY3RvcnksIG9yIHRvIGhhdmUgeW91cnNlbGYgbGlzdGVkLCBhc2s6CisJZ251QHByZXAuYWkubWl0LmVkdQorCisqKiBQbGVhc2Uga2VlcCB0aGUgZW50cmllcyBpbiB0aGlzIGZpbGUgYWxwaGFiZXRpY2FsICoqCisfCitBbHRyYXNvZnQJPGluZm9AYWx0cmFzb2Z0LmNvbT4KKzQ4ODAgU3RldmVucyBDcmVlayBCbHZkLiwgU3VpdGUgMjA1CitTYW4gSm9zZSwgQ0EgIDk1MTI5LTEwMzQKKysxIDQwOCAyNDMgMzMwMAoraHR0cDovL3d3dy5hbHRyYXNvZnQuY29tCisKK0FsdHJhc29mdCBwcm92aWRlcyBjb3Jwb3JhdGUtcXVhbGl0eSBzdXBwb3J0LCBkZXZlbG9wbWVudCBhbmQgdXNlcgorZG9jdW1lbnRhdGlvbiBmb3IgR05VIEVtYWNzLCBYRW1hY3MgYW5kIEluZm9Eb2NrLiAgKEluZm9Eb2NrIGlzIGEgdHVybmtleQoraW5mb3JtYXRpb24gbWFuYWdlbWVudCBhbmQgc29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHNldCBidWlsdCBhdG9wIGVtYWNzLAord3JpdHRlbiBieSBvbmUgb2Ygb3VyIGFzc29jaWF0ZXMuKSAgRW1hY3MgZGlzdHJpYnV0aW9ucyBmb3IgYSB2YXJpZXR5IG9mCitwbGF0Zm9ybXMgYXJlIGFsc28gYXZhaWxhYmxlLCBhcyBpcyBzdXBwb3J0IGZvciBvdGhlciBlbWFjcyB2YXJpYW50cywgc3VjaCBhcwordGhvc2Ugb2Z0ZW4gZm91bmQgb24gUENzLgorCitPdXIgdW5pcXVlIGZvY3VzIG9uIGVtYWNzLXJlbGF0ZWQgd29yayBhbGxvd3MgdXMgdG8gYXR0cmFjdCBleHBlcnQgdGFsZW50IGluCit0aGlzIGFyZWEgdG8ga2VlcCB5b3Ugb24gdGhlIGxlYWRpbmcgZWRnZSBvZiBwcm9kdWN0aXZpdHksIGVzcGVjaWFsbHkgaWYgeW91CitkbyBzb2Z0d2FyZSBkZXZlbG9wbWVudCB3b3JrLiAgV2UgZG8gdGhlIHBvcnRpbmcsIHBhdGNoaW5nLCBjb2RpbmcsCitpbnRlZ3JhdGluZywgZGVidWdnaW5nLCBkb2N1bWVudGluZyBhbmQgdGVzdGluZyBzbyB0aGF0IHlvdXIgcGVvcGxlIHNwZW5kCittdWNoIG1vcmUgcHJvZHVjdGl2ZSB0aW1lIG9uIHRoZWlyIG1haW5saW5lIHRhc2tzLgorCitTdGFuZGFyZCBzdXBwb3J0IHBhY2thZ2VzIGluY2x1ZGUgaGVscCBvbiBhbGwgYXNwZWN0cyBvZiB0aGUgcGFja2FnZXMKK3N1cHBvcnRlZCwgaW5jbHVkaW5nIGFsbCB0b29scyBzaGlwcGVkIGFzIGEgc3RhbmRhcmQgcGFydCBvZiB0aGUgb3JpZ2luYWwKK3BhY2thZ2UgZGlzdHJpYnV0aW9uLiAgSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBnaXZlIHlvdSBhbiB1bmJlbGlldmFibHkgc3Ryb25nCitsZXZlbCBvZiBzdXBwb3J0LCBzbyB3aGVyZSB3ZSBjYW4sIHdlIHdpbGwgYWxzbyBhbnN3ZXIgcXVlc3Rpb25zIGNvbmNlcm5pbmcKK2FueSBhZGQtb24gTGlzcCBjb2RlIHRoYXQgaXMgdXNlZCBhdCB5b3VyIHNpdGUuICBTZXR1cCBhbmQgY3VzdG9taXphdGlvbgoraGVscCwgYnVnIGZpeGVzLCBhbmQgYW5ub3VuY2VtZW50cyBvZiBuZXcgcmVsZWFzZXMgYXJlLCBvZiBjb3Vyc2UsIGluY2x1ZGVkLgorCitTdXBwb3J0IHJhdGVzIHN0YXJ0IGF0ICQxLDUwMCBVU0QsIGZvciBzaW5nbGUgdXNlciBzdXBwb3J0IGZvciBvbmUgeWVhci4KK0Rpc2NvdW50cyBhcmUgYXZhaWxhYmxlIGZvciBncm91cCBjb250cmFjdHMuICBXZSBhbHNvIG9mZmVyIEdvbGRlbiBTdXBwb3J0Citjb250cmFjdHMgZm9yIHRob3NlIHdobyBuZWVkIHRoZSBhYnNvbHV0ZSBiZXN0IGluIG1pc3Npb24tY3JpdGljYWwgc3VwcG9ydDsKK2NvbnRhY3QgdXMgZm9yIGRldGFpbHMuICBIb3VybHkgZGV2ZWxvcG1lbnQgcmF0ZXMgYW5kIGZpeGVkIGJpZCB3b3JrIGFyZQorYXZhaWxhYmxlLgorCitVcGRhdGVkOiAxOTk3LTA1LTEyCisfCitNYWdudXMgQWx2ZXN0YWQgPG1hZ251c0BpdGFuYWx5c2Uubm8+CisKK0dOVSBFbWFjcywgR0NDLCB0aGUgVW5peCB0b29scywgTGludXgsIEpvbHQuCisKK1JhdGVzOiBGcmVlLCBvciBmcm9tICQ1MC9ob3VyLgorCitVcGRhdGVkOiAgMTk5Ny0wNS0wOQorHworQU8gVXJiYW5Tb2Z0IDxpbmZvQHVzb2Z0LnNwYi5zdT4KK1N0LiBQZXRlcnNidXJnIFN0YXRlIFVuaXZlcnNpdHkgU2NpZW5jZSBDYW1wdXMKK1N0LiBQZXRlcnNidXJnLCBSdXNzaWEKK3d3dy51c29mdC5zcGIucnUKKworQU8gVXJiYW5Tb2Z0IHBhY2thZ2VzLCBtYXJrZXRzIGFuZCBzdXBwb3J0cworaW5kdXN0cnkgc3RhbmRhcmQgZnJlZSBzb2Z0d2FyZSBwcm9kdWN0cywKK2luY2x1ZGluZyB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSBhbmQKK1RlWCBkb2N1bWVudCBjb21waWxlci4KK1RoZSBjb21wYW55IGFsc28gcHJvdmlkZXMgcHJvZ3JhbW1pbmcgc2VydmljZXMgCitiYXNlZCBvbiBUZVgsIFRrLCBQeXRob24sIEhUTUwsIEphdmEsIFBlcmwgYW5kCitJbnRyYW5ldC4gCisKK1JhdGVzIGFwcHJveGltYXRlbHkgMTUgVVNEIHBlciBob3VyLgorCitVcGRhdGVkOiAxOTk3LTA1LTI1CisfCitKb3NlcGggQXJjZW5lYXV4ICAgICAgICAJPGpsYUBhaS5taXQuZWR1PgorUE8gQm94IDQ2MDYzMwkJCWh0dHA6Ly93d3cuc2Ftc2FyYS5jb20vfmpsYQorU2FuIEZyYW5jaXNjbywgQ0EgIDk0MTQ2LTA2MzMKKysxIDQxNSA2NDggOTk4OAorKzEgNDE1IDI4NSA5MDg4CisKK1JlY2VudGx5IGxlZCB0aGUgcHJvamVjdCBtYWtpbmcgV2VsbHMgRmFyZ28gQmFuayB0aGUgZmlyc3QgdG8gcHJvdmlkZQorc2VjdXJlIGN1c3RvbWVyIGFjY291bnQgYWNjZXNzIG92ZXIgdGhlIEludGVybmV0LgorCitGb3JtZXIgRlNGIHN0YWZmbWVtYmVyLiAgUGVyZm9ybWVkIFgxMSBpbXBsZW1lbnRhdGlvbiBvZiBFbWFjcyB2ZXJzaW9uCisxOSwgZGVzaWduZWQgYW5kIGltcGxlbWVudGVkIFdZU0lXWUcgRW1hY3MuICBJbnN0YWxsZWQgYW5kCithZG1pbmlzdGVyZWQgRlNGIG5ldHdvcmsuICBNYWludGFpbmVyIG9mIEdOVSBpbmRlbnQuICBPdmVyIDE1IHllYXJzCitleHBlcmllbmNlIHdpdGggVW5peCBhbmQgb3RoZXIgc3lzdGVtcywgZnJvbSB3cml0aW5nIFJPTSBtb25pdG9ycyB0bworVUkgZGVzaWduIGFuZCBzeXN0ZW0gYWRtaW5pc3RyYXRpb24uCisKK0kgcHJvdmlkZSBpbnN0YWxsYXRpb24sIHBvcnRpbmcsIGRlYnVnZ2luZyBhbmQgY3VzdG9taXphdGlvbiBvcgorZGV2ZWxvcG1lbnQgb2YgR05VIGFuZCBvdGhlciBVbml4IHNvZnR3YXJlLiAgSSBhbHNvIGRlc2lnbiBhbmQKK2ltcGxlbWVudCBmcmVlIHNvZnR3YXJlIHByb2plY3RzIGFuZCBjb25zdWx0IG9uIHNvZnR3YXJlIGVuZ2luZWVyaW5nCithbmQgc3lzdGVtcyBkZXNpZ24uICBIYW5kaG9sZGluZyBhbmQgIHRlYWNoaW5nIHNlcnZpY2VzIGFyZSBhbHNvCithdmFpbGFibGUgYXMgd2VsbCBhcyB0aGluZ3MgbGlrZSBMQU4gYW5kIGNvbXB1dGUtLWluZnJhc3RydWN0dXJlIGRlc2lnbi4KKworVGltZSBhbmQgbWF0ZXJpYWwgcmF0ZXMgYXJvdW5kICQxNTAgVVNEIHBlciBob3VyLCBkZXBlbmRpbmcgdXBvbiB0aGUKK3BhcnRpY3VsYXIgam9iLiAgSSBhbSBhbHNvIHZlcnkgaW50ZXJlc3RlZCBpbiBmaXhlZC1iaWQgam9icy4gIEZvcgorc2VsZWN0ZWQgbm9uLXByb2ZpdCBvcmdhbml6YXRpb25zIHdpdGggd29ydGh5IGdvYWxzLCBJIHdvcmsgZm9yIGZyZWUuCisKK1VwZGF0ZWQ6IDE5OTUtMTAtMTcKKx8KK0dlcmQgQXNjaGVtYW5uCQk8QXNjaGVtYW5uQEluZm9ybWF0aWsuVEgtRGFybXN0YWR0LmRlPgorT3Nhbm5zdHIuIDQ5CitELTY0Mjg1IERhcm1zdGFkdAorVGVsLjogKzQ5IDYxNTEgMTYgMjI1OQoraHR0cDovL3d3dy5pbmZvcm1hdGlrLnRoLWRhcm1zdGFkdC5kZS9+YXNjaGVtYW4vCisKKy0gU3lzdGVtIEFkbWluaXN0cmF0b3IgKFVOSVgpIGF0IENTIERlcGFydG1lbnQsIFRVIERhcm1zdGFkdCwgR2VybWFueQorLSAxNyB5ZWFycyBleHBlcmllbmNlIHdpdGggQ1MsIFN5c3RlbSBhZG1pbmlzdHJhdGlvbiBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zCistIDEwIHllYXJzIHdpdGggVU5JWC9OZXR3b3JraW5nL0ZyZWVXYXJlL0dOVS9YMTEKKy0gIDggeWVhcnMgb3JnYW5pemVyIG9mIE9wZXJhdGluZyBTeXN0ZW1zIGFuZCBEaXN0cmlidXRlZCBTeXN0ZW1zIGNvdXJzZXMKKy0gTGVjdHVyZXMgb24gU3lzdGVtIGFuZCBOZXR3b3JrIEFkbWluaXN0cmF0aW9uCistIFBsYXRmb3JtczogU29sYXJpcywgU3VuT1MsIFVsdHJpeCwgT1NGMSwgSFAtVVgsIExpbnV4LCBGcmVlQlNELCBBSVgsIFNDTworLSBEaXN0cmlidXRlZCBQbGF0Zm9ybXMgYW5kIEluZm9ybWF0aW9uIFN5c3RlbXMgKENPUkJBLCBXV1csIEphdmEsIEZUUCkKKy0gRXhwZXJpZW5jZSB3aXRoIHBhcmFsbGVsIGVudmlyb25tZW50cyAoQ29ubmVjdGlvbiBNYWNoaW5lLCBNZWlrbywgUGFyc3l0ZWMpCistIENvbnN1bHRhbnQKKworUmF0ZXMgYXJlIGF0IDEzMCwtLSBETSAofjgwIFVTJCkgcGVyIGhvdXIgbWluaW11bSwgZGVwZW5kaW5nIG9uIHRoZSBqb2IuCitJIGFtIHdpbGxpbmcgdG8gdHJhdmVsIGZvciBzdWZmaWNpZW50bHkgbGFyZ2Ugam9icy4KKworVXBkYXRlZDogMTk5Ny0wNS0wNworHworCisJCQlCYXNpcyBUZWNobm9sb2d5IENvcnAuCisJCSAgICAgT25lIEtlbmRhbGwgU3F1YXJlLCBCbGRnIDIwMAorCQkJIENhbWJyaWRnZSwgTUEgMDIxMzkKKwkJCQlVLlMuQS4KKworCQkJIFRlbDogKzEtNjE3LTI1Mi01NjM2CisJCQkgRmF4OiArMS02MTctMjUyLTkxNTAKKwkJICAgICAgRS1tYWlsOiA8aW5mb0BiYXNpc3RlY2guY29tPgorCQkgICAgV2ViOiBodHRwOi8vd3d3LmJhc2lzdGVjaC5jb20KKworVGVjaG5pY2FsIEV4cGVydGlzZToKKyAgTXVsdGlsaW5ndWFsIHNvZnR3YXJlIGRldmVsb3BtZW50CisgIEludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24gb2Ygc29mdHdhcmUgcHJvZHVjdHMKKyAgSW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBpbmNsdWRpbmcgVW5pY29kZSwgSVNPLTEwNjQ2LAorICAgIElTTy0yMDIyLCBJU08tODg1OS1uLCBKSVMsIEtTQzU2MDEsIEJJRzUsIEdCMjMxMgorICBUcmFuc2xhdGlvbiBvZiB0ZWNobmljYWwgbWF0ZXJpYWxzIGludG8gSmFwYW5lc2UsIEtvcmVhbiwgYW5kIENoaW5lc2UKKyAgICBpbmNsdWRpbmcgSFRNTCwgU0dNTCwgUlRGLCBNSUYsIGV0Yy4KKworR05VLXJlbGF0ZWQgU2VydmljZXM6CisgIEN1c3RvbSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uIG9mIEdOVSBzb2Z0d2FyZSwgb3IKKyAgICBhcHBsaWNhdGlvbnMgZGV2ZWxvcGVkIHVzaW5nIEdOVSB0b29scyAoR0NDLCBHKyssIEVtYWNzIExpc3AsIGV0Yy4pCisgIEN1c3RvbSBtdWx0aWxpbmd1YWwgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgYmFzZWQgb24gTVVMRS4KKworR05VIENvbnRyaWJ1dGlvbnM6CisgIE9yZ2FuaXplZCAxOTkyLCAxOTkzLCBhbmQgMTk5NCBmdW5kLXJhaXNpbmcgc2VtaW5hcnMgYW5kIGxlY3R1cmUKKyAgICB0b3VycyBmb3IgRlNGIGluIEphcGFuLgorICBOZWdvdGlhdGVkIGJvb2sgcm95YWx0eSBhZ3JlZW1lbnRzIHdpdGggSmFwYW5lc2UgcHVibGlzaGVycyBvbgorICAgIGJlaGFsZiBvZiB0aGUgRlNGLgorICBOZWdvdGlhdGVkIGhhcmR3YXJlIGNvbnRyaWJ1dGlvbnMgZnJvbSBKYXBhbmVzZSBQQyB2ZW5kb3JzIHRvCisgICAgdGhlIEZTRi4KKworQ29udGFjdHM6CisgIENhcmwgSG9mZm1hbiwgU3RldmUgQ29oZW4sIG9yIEthcmVuIFdhdHRzCisKK1VwZGF0ZWQ6ICAxOTk3LTA1LTA3CisfCitMYXVyZW50IEJlcm5hcmRpbgorMTYsIHJ1ZSBEaWNrcworTC02OTQ0IE5pZWRlcmFudmVuCitMdXhlbWJ1cmcKKzxiZXJuYXJkaW5AaW5mLmV0aHouY2g+CisrNDEgMSA2MzIgNzQ2OQorCitTdXBwb3J0IGFuZCBpbnN0YWxsYXRpb24gb2YgYWxsIEdOVSBzb2Z0d2FyZS4KKworRXhwZXJ0aXNlOiBDLCBDKyssIEphdmEsIE1vdGlmLCBYLCBVbml4IGFkbWluaXN0cmF0aW9uLCBuZXR3b3JrIHNlY3VyaXR5CisKK1JhdGVzOiB+NjAgVVMkIC8gaG91ciAoRmx1eCAyMDAwLi0pCisKK1VwZGF0ZWQ6ICAxOTk3LTA1LTA3CisfCitQYXVsIEJsYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF1bGJAdHJpb2RlLmFwYW5hLm9yZy5hdT4KK1N5ZG5leSwgQXVzdHJhbGlhCisKKyAgICAgSSBhbSBhdmFpbGFibGUgZm9yIGdlbmVyYWwgY29uc3VsdGluZyBvbiBHTlUgc29mdHdhcmUuICBNeSBzcGVjaWZpYworYXJlYXMgb2YgaW50ZXJlc3QgYXJlOgorCS0gZ2VuZXJhbCBDLCBDKyssIEFEQSBhbmQgQVBMIHByb2dyYW1taW5nCisJLSBHbnUvdW5peCB1dGlsaXRpZXMKKwktIFRyb2ZmCisJLSBSZWFsIFRpbWUgU29mdHdhcmUKKwktIExpbnV4CisJLSBJUCBDb21tcywgU01UUCwgTk5UUCwgSFRUUCBhbmQgV1dXCisJLSBTaW11bGF0aW9uCisKK0kgYW0gaGFwcHkgdG8gcHJvdmlkZSBmcmVlIGNvbnN1bHRpbmcvc2VydmljZXMgaWYgdGhlIHdvcmsgaXMgb2YgdGhlIG9yZGVyIG9mCithIGNvdXBsZSBvZiBob3Vycy4gSWYgbW9yZSB0aW1lIGlzIHJlcXVpcmVkLCBJIGFtIGhhcHB5IHRvIG5lZ290aWF0ZSBkZXBlbmRpbmcKK29uIHRoZSBuYXR1cmUgb2YgdGhlIHdvcmssIG15IGluZGljYXRpdmUgcmF0ZSBpcyAkNDAgcGVyIGhvdXIuCisKK0VudGVyZWQ6IDE5OTYtMDctMTAKKx8KK0tlaXRoIEJvc3RpYworCisJSSdtIGludGVyZXN0ZWQgaW4gc3VwcG9ydGluZy9leHRlbmRpbmcgdGhlIGV4L3ZpIGVkaXRvcnMsCisJd2hpY2ggSSB3cm90ZS4gIE9uLXNpdGUgb3IgYnkgZW1haWwsIHJhdGVzIGFyZSBiYXNlZCBvbiB0aGUKKwlwcm9qZWN0LiAgPGJvc3RpY0Bjcy5iZXJrZWxleS5lZHU+CisKK0VudGVyZWQ6ICAxOTk2LTA3LTE1CisfCitQaGlsaXAgQnJvd24KKzxwaGlsQG1pdHJlLm9yZz4KKyg3MDMpIDg5My04OTY3IChwcmVmZXIgZW1haWwpCitOb3J0aGVybi1WQSwgRC5DLiBBcmVhCitSYXRlczogJDQwL0hyOyBsZXNzIGZvciBlZHVjYXRpb25hbCBvciBjaGFyaXRhYmxlIG9yZ2FuaXphdGlvbnMKKworU3lzdGVtcyBTdXBwb3J0ZWQ6CisJIEhQOTAwMC83eHggcnVubmluZyBIUC9VWCA4LjA3IC0gMTAuWAorCSBJQk0gUlM2MDAwIHJ1bm5pbmcgQUlYIDMuMi5YCisJIEFsc28gU0dJL0luZHkgYW5kIFN1bi9TcGFyY3MKKworU29mdHdhcmUgU3VwcG9ydGVkOgorCSBNb3N0IGFsbCBGU0YgKEdudSkgc29mdHdhcmUKKwkgZXNwLiBHQ0MsIEVtYWNzLCBCaW51dGlscywgR1MsIGV0Yy4uLgorCitTdGF0ZW1lbnQ6CisgICAgICAgIEknZCBiZSBtb3JlIHRoYW4gaGFwcHkgdG8gYXNzaXN0IGFueW9uZSBpbiBteSBhcmVhIHdpdGggYWNxdWlyaW5nLAorICAgICAgICBpbnN0YWxsaW5nLCBhbmQgY29uZmlndXJpbmcgYW55IEZTRiB0b29scy91dGlsaXRpZXMgb24gYW55IG9mIHRoZQorICAgICAgICBhYm92ZSBzeXN0ZW1zLiAgSSdtIGFsc28gd2lsbGluZyB0byB3b3JrIHdpdGggb3RoZXIgVU5JWCBzeXN0ZW1zIG5vdAorICAgICAgICBsaXN0ZWQgYWJvdmUuIEluIGFkZGl0aW9uLCBJJ2QgYmUgaGFwcHkgdG8gc2hhcmUgbXkgbWFueSB5ZWFycyBvZgorICAgICAgICBleHBlcmllbmNlIHdpdGggYW55b25lIGhhdmluZyBkaWZmaWN1bHR5IHVzaW5nIG9yIGNvbmZpZ3VyaW5nIHRoZXNlCisgICAgICAgIHRvb2xzLiAgSSd2ZSBiZWVuIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZW0gZm9yIGFib3V0IDUgeWVhcnMgbm93CisgICAgICAgIGFuZCBJJ2xsIHN3ZWFyIGJ5IHRoZWlyIHF1YWxpdHkgYW5kIHRoZSBwZW9wbGUvcHJpbmNpcGxlcyB0aGF0IG1hZGUKKyAgICAgICAgdGhlbSBhdmFpbGFibGUuCisKKworCQkJUGhpbCBCcm93bgorCitVcGRhdGVkOiAgMTk5Ny0wNS0wNworHworSmFtZXMgQ3JhaWcgQnVybGV5Cis5NyBBcnJvd2hlYWQgQ2lyY2xlCitBc2hsYW5kLCBNQSAwMTcyMS0xOTg3Cis1MDggODgxLTYwODcsIC00NzQ1CisoUGxlYXNlIGNhbGwgb25seSBiZXR3ZWVuIDA5MDAtMTcwMCBFYXN0ZXJuIHRpbWUsIGFuZCBvbmx5IGlmIHlvdQorYXJlIHByZXBhcmVkIHRvIGhpcmUgbWUgLS0gYXNrIG1lIHRvIGhlbHAgeW91IGZvciBmcmVlIG9ubHkKK3ZpYSBlbWFpbCwgdG8gd2hpY2ggSSBtaWdodCBvciBtaWdodCBub3QgcmVzcG9uZC4pCitFbWFpbDogPGJ1cmxleUBnbnUuYWkubWl0LmVkdT4gLS1wcmVmZXJyZWQtLQorICAgICAgIDxidXJsZXlAY3lnbnVzLmNvbT4KKyAgICAgICA8YnVybGV5QHdvcmxkLnN0ZC5jb20+CisKK0V4cGVydGlzZToKKyAgICBDb21waWxlciBJbnRlcm5hbHMgKGF1dGhvciBvZiBHTlUgRm9ydHJhbiwgZm9yIGV4YW1wbGUpCisgICAgT3BlcmF0aW5nIFN5c3RlbXMgSW50ZXJuYWxzCisgICAgVG9vbHMvVXRpbGl0aWVzIERldmVsb3BtZW50IGFuZCBNYWludGVuYW5jZQorICAgIE1pY3JvY29kZSBEZXZlbG9wbWVudCBhbmQgTWFpbnRlbmFuY2UgKHByaW1hcmlseSBWTElXIG1hY2hpbmVzKQorICAgIFN5c3RlbSBEZXNpZ24gKGNvbXB1dGVycywgb3BlcmF0aW5nIHN5c3RlbXMsIHRvb2xzZXRzLCAmYykKKyAgICBEZWJ1Z2dpbmcgKG9mdGVuIGFza2VkIHRvIGhlbHAgZGVidWcgT3RoZXIgUGVvcGxlJ3MgQ29kZSkKKyAgICBEb2N1bWVudGF0aW9uIChhdXRob3JlZCBtYW55IGJvb2tzIGFuZCByYW4gYSBmZXcgZG9jIHByb2plY3RzKQorICAgIEV4dGVuc2l2ZSBleHBlcmllbmNlIHdpdGggYSB2YXJpZXR5IG9mIG9wZXJhdGluZyBzeXN0ZW1zLCBoYXJkd2FyZSwKKwlsYW5ndWFnZXMsIGFuZCBzbyBvbgorCitSYXRlOiAkMTAwL2hvdXIgLS0gd2lsbGluZyB0byBjb25zaWRlciBmbGF0LWZlZSBhcnJhbmdlbWVudHMKKworVXBkYXRlZDogMTk5Ny0wNS0wNworHworVGhvbWFzIEJ1c2huZWxsLCBuL0JTRwk8dGhvbWFzQGdudS5haS5taXQuZWR1PgorQmVja2V0IEhvdXNlCis2NiBIaWdobGFuZCBBdmUuIE5vLiA4CitTb21lcnZpbGxlLCBNQSAgMDIxNDMKKyg2MTcpIDYyMy0wNjU0CisKKworQWxsIEdOVSBzb2Z0d2FyZTogSW5zdGFsbGF0aW9uLCBjdXN0b21pemF0aW9uLCBhbnN3ZXJpbmcgc2ltcGxlIG9yCisJCSAgY29tcGxleCBxdWVzdGlvbnMsIGJ1ZyBmaXhpbmcsIGV4dGVuc2lvbi4KKworRXhwZXJpZW5jZTogIEkgaGF2ZSBkb25lIFVuaXggYW5kIEdOVSBwcm9ncmFtbWluZyBmb3Igc2V2ZXJhbCB5ZWFycywKKwkgICAgIEkgYW0gdGhlIHByaW1hcnkgYXV0aG9yIG9mIHRoZSBIdXJkICh3aGljaCBwcm92aWRlcyBtb3N0CisJICAgICBrZXJuZWwgcmVsYXRlZCBmYWNpbGl0aWVzIGZvciB0aGUgR05VIE9TKS4KKworSSBhbSBlYXNpbHkgYXZhaWxhYmxlIGluIHRoZSBDYW1icmlkZ2UvQm9zdG9uIGFyZWE7IHdvcmsgdmlhIGVtYWlsLgorSSBhbSB3aWxsaW5nIHRvIHRyYXZlbCBmb3Igc3VmZmljaWVudGx5IGxhcmdlIGpvYnMuCisKK1JhdGVzOiAkMTAwL2hyLCBuZWdvdGlhYmxlLCBsZXNzIGZvciBub24tcHJvZml0IG9yZ2FuaXphaW9ucy4KKworVXBkYXRlZDogMTk5Ny0wNS0wNworHworICAgQzJWCQkJCU1pY2hlbCBEZWx2YWwgPG1mZEBjY3YuZnI+CisgICA4MiBiZCBIYXVzc21hbm4JCUplYW4tQWxhaW4gTGUgQm9yZ25lIDxqYWxiQGNjdi5mcj4KKyAgIDc1MDA4IFBhcmlzCisgICBGcmFuY2UKKyAgIFRlbCAoMzMgMSkgNDAuMDguMDcuMDcKKyAgIEZheCAoMzMgMSkgNDMuODcuMzUuOTkKKyAgIENvbXB1c2VydmUgMTAwNDEzLDEwMTIKKyAgIGh0dHA6Ly9jMnYuY29tCisKKyAgIFdlIG9mZmVyIHNvdXJjZSBvciBzb3VyY2UrYmluYXJ5IGRpc3RyaWJ1dGlvbiwgaW5zdGFsbGF0aW9uLCB0cmFpbmluZywKKyAgIG1haW50ZW5hbmNlLCB0ZWNobmljYWwgc3VwcG9ydCwgY29uc3VsdGluZywgc3BlY2lmaWMgZGV2ZWxvcG1lbnQgYW5kCisgICBmb2xsb3d1cCBvbiB0aGUgR05VIHNvZnR3YXJlIGRldmVsb3BtZW50IGVudmlyb25tZW50OiBFbWFjcywgZ2NjL2crKywKKyAgIGJpbnV0aWxzLCBnYXMsIGdkYi4KKworICAgRXhwZXJpZW5jZTogYWRhcHRlZCBnY2MsIGdhcyBhbmQgYmludXRpbHMgdG8gd29yayBhcyBjcm9zcy1kZXZlbG9wbWVudAorICAgdG9vbHMgZm9yIHRoZSBUaG9tc29uIEQ5NTAgRFNQIGNoaXA6IEdDQyBwYXJzZXIgYW5kIHR5cGluZyBzeXN0ZW0KKyAgIGhhdmUgYmVlbiBhdWdtZW50ZWQgdG8gYWxsb3cgdGhlIG1hbmlwdWxhdGlvbiBvZiB2YXJpYWJsZXMgbG9jYXRlZCBpbgorICAgc2VwYXJhdGVkIG1lbW9yeSBzcGFjZXMuIFBvcnRpbmcgb24gbmV3IHBsYXRmb3JtcywgYW5kIHByb2Zlc3Npb25hbGx5CisgICBkZXZlbG9waW5nIHNvZnR3YXJlIHdpdGggdGhlIEdOVSB0b29scyBpbiB0aGUgVW5peC9YMTEgZW52aXJvbm1lbnQKKyAgIHNpbmNlIHRoZXkgd2VyZSBmaXJzdCBhdmFpbGFibGUuCisKKyAgIFJhdGVzOiBmcm9tIDIwMDAgRkYvZGF5IHRvIDE1MCAwMDAgRkYveWVhciwgNDAlIGRpc2NvdW50IGZvcgorICAgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb25zLCBhZGQgdGF4ZXMgYW5kIGV4cGVuc2VzLiAgQXNrIGZvciBsaXN0LgorCitVcGRhdGVkOiAxOTk3LTA1LTA5CisfCitCcnVjZSBEYXdzb24gICAgLSAgICA8amJkQGNvZGVtZXRhLmNvbT4KK0NvZGVNZXRhLCBJbmMuCitFcHBpbmcsIE5IICBVU0EKKzgwMC00NjgtODc1MAorCitTcGVjaWFsaXppbmcgaW4gR05VIHRvb2xzIHN1Y2ggYXMgZ3VpbGUsIENWUywgZ25hdHMsIGJhc2gsIGdhd2ssIGZpbGV1dGlscy4uLgorCitTZXJ2aWNlczoKKyAKKyBvIDgwMCBwaG9uZSBzdXBwb3J0LgorCisgbyBNb2RpZmljYXRpb24gYW5kIGRldmVsb3BtZW50LgorCisgbyBUcmFpbmluZy4KKworUmF0ZTogJDc1L2hvdXIgb3IgcGVyIHF1b3RlLgorCitodHRwOi8vd3d3LmNvZGVtZXRhLmNvbQorCitVcGRhdGVkOiAxOTk3LTA1LTA5CisfCitLZXZpbiBDb3Nncm92ZSAgCTxrZXZpbmNAZE9pbmsuQ09NPgorCisKKwlJIGNhbiBoZWxwIGZvbGtzIHdpdGggcG9ydGluZyAmIGluc3RhbGxhdGlvbiBvZiBtYW55IEdOVQorCWFuZCBYIHBhY2thZ2VzIG9uIGEgdmFyaWV0eSBvZiBVbml4IHBsYXRmb3Jtcy4KKworCisJTXkgcmF0ZXMgZGVwZW5kIG9uIHRoZSBzY29wZSBvZiBlYWNoIHByb2plY3QgYnV0IHJhbmdlCisJZnJvbSAkMzUgdG8gJDkwIHBlciBob3VyLgorCitVcGRhdGVkOiAgMTk5Ny0wNS0wNworHworQ291dmFyZXMgQ29uc3VsdGluZworMjExIFcuIEdpbG1hbiBTdC4sIFN1aXRlIDNXCitNYWRpc29uLCBXSSA1MzcwMyBVU0EKK1Bob25lOiAoNjA4KSAyNTYtNjIwMQorRU1haWw6IDxjb3V2YXJlc0BmYW1pbHkuaGFtcHNoaXJlLmVkdT4KK0NvbnRhY3Q6IFBldGVyIEYuIENvdXZhcmVzCisKK1R5cGUgb2Ygc3VwcG9ydDogV2Ugb2ZmZXIgcGhvbmUvZW1haWwgc3VwcG9ydCwgaW5zdGFsbGF0aW9uLCBvbmdvaW5nCisgICAgIGFkbWluaXN0cmF0aW9uLCB0cmFpbmluZywgcHJvZ3JhbW1pbmcsIGFuZCBzcGVjaWFsaXplZCBjb25zdWx0aW5nIGZvcgorICAgICBmcmVlIHNvZnR3YXJlIGFuZCBvdGhlciBVTklYIHN5c3RlbXMuCisKK1NhbXBsZSBwcmljZXM6IFVTRDc1L2hvdXIgY29tbWVyY2lhbCwgNDAvaG91ciBub25wcm9maXQsIHNsaWRpbmcgc2NhbGUKK2ZvciBpbmRpdmlkdWFscy4KKworVXBkYXRlZDogIDE5OTYtMTItMDQKKx8KK1N0dWFydCBDcmFjcmFmdAkJPGNyYWNyYWZ0QGFpLm1pdC5lZHU+CisyNTY4MiBDcmVzdGEgTG9tYQorTGFndW5hIE5pZ3VlbCwgQ0EsIDkyNjc3LCBVU0EKK0dOVWxpbmU6IDcxNC0zMDgtNzkwMAorV2Vic2l0ZTogaHR0cDovL3d3dy5lYXJ0aGxpbmsubmV0L35jcmFjcmFmdC9pbmRleC5odG1sCitSYXRlOiAkOTAvaG91cgorQ29uc3VsdGF0aW9uIHRvcGljczoKK0VudGlyZSBHTlUgc3VpdGUgLSBwb3J0aW5nLCBjb21waWxhdGlvbiwgaW5zdGFsbGF0aW9uLAordXNlci10cmFpbmluZywgYWRtaW5pc3RyYXRvci10cmFpbmluZworTWV0aG9kOiB0ZWxlcGhvbmUgbGluZSBzdXBwb3J0LCBjYWxsLWluIHZpYSBtb2RlbSB0byB5b3VyIHNpdGUsCit3b3JrIG92ZXIgdGhlIEludGVybmV0LCBvciBpbi1wZXJzb24gdmlzaXQuCisgCitFeHBlcmllbmNlOiBzdXBwb3J0aW5nIEdOVSBzaW5jZSB0aGUgbWlkLTE5ODAncywgY29vcmRpbmF0b3IKK29mIEdOVSBDaGVzcyAob3JpZ2luYWwgYXV0aG9yKSwgR05VIFNob2dpLCBHTlUgR28uIFBvcnRlZCBHTlUgRW1hY3MKK3RvIFNvbGFyaXMgKFN5c3RlbSBWIFJlbGVhc2UgNCkuIEV4cGVydGlzZSBpbiBDLCBFbWFjcyBMaXNwLCBQZXJsLAorRXhwZWN0LCBPcmFjbGUsIEluZm9ybWl4LCBTdW5PUywgU29sYXJpcywgTklTLCBORlMuCisKK0N1c3RvbWl6ZWQgcHJvZ3JhbW1pbmcgYWxzbyBhdmFpbGFibGUuCisKK1VwZGF0ZWQ6IDE5OTctMDUtMDcKKx8KK05vZWwgQ3JhZ2cgICAgICAgICAgICAgICAgICAgICAgPG5vZWxAY3ljbGljLmNvbT4KKzYyNDQgQWJlcmRlZW4gQXYKK0dvbGV0YSBDQSA5MzExNworODA1LTg5OS00Njk1CisKK0knbGwgZG8gaW5zdGFsbGF0aW9uLCBkZWJ1Z2dpbmcsIGFuZCBleHRlbnNpb24gb2YgR05VIHRvb2xzIG9uIGEKK2NvbnRyYWN0IGJhc2lzLiAgQ1ZTIGFuZCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgYXJlIG15IGN1cnJlbnQKK3NwZWNpYWx0aWVzLiAgUmF0ZTogJDc1L2hvdXIgb3IgcGVyLXByb2plY3QgbmVnb3RpYXRlZCBmZWUuCisKK1VwZGF0ZWQ6IDE5OTctMDUtMDcKKx8KK0N5Z251cyBTb2x1dGlvbnMKKzxpbmZvQGN5Z251cy5jb20+CisxMzI1IENoZXNhcGVha2UgVGVycmFjZQorU3Vubnl2YWxlLCBDQSA5NDA4OSBVU0EKKysxIDQwOCA1NDIgOTYwMCB2b2ljZQorKzEgNDA4IDU0MiA5Njk5IGZheAorV2ViIFNpdGU6IGh0dHA6Ly93d3cuY3lnbnVzLmNvbQorCisKK0N5Z251cyBTb2x1dGlvbnMgcHJvdmlkZXMgc3VwcG9ydGVkIGFuZCBtYWludGFpbmVkIHZlcnNpb25zIG9mIGdjYywgZysrLCBnZGIKK3dpdGggR1VJLCBHTlUgbGlua2VyIGFuZCBHTlUgbWFjcm8gYXNzZW1ibGVyLiAgSW4gYWRkaXRpb24sIEN5Z251cyBwcm92aWRlcwordGhlc2UgR05VIHNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIGZvciB3ZWxsIG92ZXIgMTAwIGhvc3QtdGFyZ2V0Citjb25maWd1cmF0aW9ucy4gIFN1cHBvcnQgaW5jbHVkZXMgYnVnIGZpeGVzIGFuZCBzZW1pLWFubnVhbCByZWxlYXNlcyBvZiB0aGUKK3Rvb2xzZXQuICBFYWNoIHJlbGVhc2UgaXMgcmVncmVzc2lvbiB0ZXN0ZWQgYW5kIGluY2x1ZGVzIHN1YnN0YW50aWFsCitpbXByb3ZlbWVudHMgYW5kIGFkZGl0aW9ucyB0byB0aGUgY3VycmVudCByZWxlYXNlLiAgU3VwcG9ydCBpcyBhdmFpbGFibGUgZm9yCitncm91cHMgb2YgNSBvciAyNSBvbiBhIHdpZGUgcmFuZ2Ugb2Ygc3RhbmRhcmQsIHNwZWNpYWwgYW5kIHZpbnRhZ2UKK3Rvb2xjaGFpbnMgZm9yIG5hdGl2ZSBhbmQgZW1iZWRkZWQgYXBwbGljYXRpb25zLiAgTmV3IHRhcmdldCBwcm9jZXNzb3JzIGFyZQorYmVpbmcgYWRkZWQgcmVndWxhcmx5LiAgUmF0ZXMgZm9yIHN1cHBvcnQgZm9yIHN0YW5kYXJkIHByb2R1Y3RzIHN0YXJ0IGF0ICQ3NDk1LgorCitDeWdudXMgU29sdXRpb25zIGNvbnRhY3RzOgorCisJS2F0aHkgUG93ZXJzCisJcGg6ICsxLTIwNi04ODgtNjAwMgorCWZ4OiArMS0yMDYtODg4LTYxNDUKKwllbWFpbDogPGtwb3dlcnNAY3lnbnVzLmNvbT4KKworCisgICAJRXJpayBXZXN0Y290dAorICAgCXBoOiArMSA0MDggNTQyIDk2MzcKKyAgIAlmeDogKzEgNDA4IDU0MiA5Njk5CisgICAJZW1haWw6ICA8d2VzdGNvdHRAY3lnbnVzLmNvbT4KK1VwZGF0ZWQ6IDE5OTctMDUtMjMKKx8KK01hcmN1cyBHLiBEYW5pZWxzICAgICAgICAgICAgICA8bWFyY3VzZEBnbnUuYWkubWl0LmVkdT4KKzMxMDYwIFMuIEthdWZtYW4gUmQuICAgICAgICAgICA8bWFyY3VzQHRkYi5jb20+CitDYW5ieSwgT1IgIDk3MDEzLTk1MjAgICAgICAgICAgPG1hcmN1c0BzeXNjLnBkeC5lZHU+CisoNTAzKSA2NTEtMjY5NCAgICAgICAgICAgICAgICAgCisKK0kgY2FuIGN1c3RvbWl6ZSwgZXh0ZW5kLCBwb3J0LCBhbmQgcmVwYWlyIG1hbnkgdHlwZXMgb2YgZnJlZSBzb2Z0d2FyZS4KK0kgbWFpbnRhaW4gdGhlIENMSVNQIENvbW1vbiBMaXNwIGltcGxlbWVudGF0aW9uIGFuZCBjb250cmlidXRlIHRvCitzZXZlcmFsIEdOVSBwYWNrYWdlcyAoZS5nLiBFbWFjcykuICBUZW4geWVhcnMgb2YgQyBhbmQgVW5peAorZXhwZXJpZW5jZS4gIENvbnN1bHRpbmcgcmF0ZXMgc3RhcnQgYXQgJDQwIFVTL2hyLgorCitVcGRhdGVkOiAxOTk3LTA1LTA3CisfCitFZGdhciBEZXItRGFuaWVsaWFudHogKERhbmllbHlhbikgPGVkZEBhY20ub3JnPgorUC5PLiBCb3ggMTAgICAgICAgICAgICAgRkFYICszNzQgMiAyOCA1MCA4MgorWWVyZXZhbiAzNzUwMDkKK0FSTUVOSUEKKworIFN1cHBvcnQgZm9yIEdDQywgWCBXaW5kb3cgU3lzdGVtLCBXV1csIFRjbC9UaywgbG9naWMgcHJvZ3JhbW1pbmcsCisgSW50ZXJuZXQgc2VjdXJpdHksIFRDUC9JUC4KKworIEV4cGVyaWVuY2U6CisgICAgT1MnczogNC40QlNELCBTVlI0LjIsIEZyZWVCU0QsIFNDTywgU29sYXJpcywgVW5peFdhcmUuCisgICAgTGFuZ3VhZ2VzOiBDLCBDKyssIE9iamVjdGl2ZSBDLCBQYXNjYWwsIFRjbC9UaywgUGVybCwgUHJvbG9nCisgICAgUGxhdGZvcm1zOiBJbnRlbCwgU1BBUkMsIE1hYywgVkFYLCBOZVhULgorCisgUmF0ZXM6IERlcGVuZGluZyBvbiB0eXBlIG9mIHdvcmssIGFwcHJveC4gJDIwL2hvdXIuIENvbnRhY3QgZm9yIG1vcmUKKyAgICAgICAgaW5mb3JtYXRpb24uCisgICAgTmVnb3RpYWJsZSBmb3IgaW5kaXZpZHVhbHMgYW5kIG5vbi1wcm9maXQgb3JnYW5pemF0aW9ucy4KKyAgICBGUkVFIGZvciBpbmRpdmlkdWFscyB3aG8gY2FuJ3QgcGF5LiBZb3VyICdUaGFua3MhJyBqdXN0IGVub3VnaCEgOi0pCisgICAgUGF5bWVudCBieSBpbnRlcm5hdGlvbmFsIHdpcmUgdHJhbnNmZXIgb3IgY2hlY2suCisKK1VwZGF0ZWQ6ICAxOTk3LTA1LTA3CisfCitFY2hvIExhYnMgICAgICAgICAgICAgICAgICA8ZWNob0BpaW5ldC5uZXQuYXU+CisyOSBXZWxkIFN0LCAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmlpbmV0Lm5ldC5hdS9+ZWNoby8KK05lZGxhbmRzLCBXQSA2MDA5CitQZXJ0aCwgQXVzdHJhbGlhCisrNjEgKDApIDQxIDk4NSA5NjAzCisKK0VjaG8gTGFicyBpcyBhIHNvZnR3YXJlIGNvbnN1bHRhbmN5IHRoYXQgYWxzbyBwcm92aWRlcyBzdXBwb3J0IGFuZAorZGV2ZWxvcG1lbnQgc2tpbGxzLiAgU3BlY2lhbGlzaW5nIGluIEdOVSBzb2Z0d2FyZSwgcGFydGljdWxhcmx5IFRjbC9UaworYW5kIExpbnV4LiBXZSBjYW4gZGVsaXZlciBzeXN0ZW1zIGF0IGEgZnJhY3Rpb24gb2YgdGhlIGNvc3Qgb2YgdGhvc2UKK2Jhc2VkIG9uIG1vcmUgdHJhZGl0aW9uYWwgdGVjaG5vbG9naWVzLiAgSW50ZXJuZXQvaW50cmFuZXQgYW5kIGRhdGEKK2NvbW11bmljYXRpb25zIHNvbHV0aW9ucywgZm9yIGFsbCBwbGF0Zm9ybXMgYXJlIHVuZGVydGFrZW4uICBHVUkKK2Zyb250LWVuZHMgZG9uZSBxdWlja2x5LgorCitXaGlsZSB0eXBpY2FsbHkgaW52b2x2ZWQgaW4gZW5naW5lZXJpbmcgYW5kIHRlY2huaWNhbCBhcmVhLCBhbnkKK0dOVS9mcmVld2FyZSBzb2Z0d2FyZSB3aWxsIGJlIHN1cHBvcnRlZC4KKworRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWU6IGh0dHA6Ly93d3cuaWluZXQubmV0LmF1L35lY2hvLworCitFeHBlcmllbmNlOiAxMisgeWVhcnMgQy9Vbml4LCBTdW4sIFNDTywgTGludXgsIFdpbi9OVC4KKyAgICAgICAgICAgIFN5c3RlbXMgcHJvZ3JhbW1pbmcsIGRldmljZSBkcml2ZXJzLCBoYXJkd2FyZSBpbnRlcmZhY2luZy4KKyAgICAgICAgICAgIEdOVSB0b29scy91dGlsaXRpZXMsCisgICAgICAgICAgICBFbWJlZGRlZCAmIHJlYWx0aW1lIHN5c3RlbXMsIHNvZnR3YXJlLCBmaXJtd2FyZSwgaGFyZHdhcmUuCisgICAgICAgICAgICBDb21tdW5pY2F0aW9ucyBwcm90b2NvbHMgYW5kIGltcGxlbWVudGF0aW9uLgorCitEZWdyZWVzOiAgICBCQXBwU2MgKENTKSwgQ3VydGluIFVuaXZlcnNpdHksIFBlcnRoCisKK1JhdGVzOiAgICAgIEFVUyAkNTAtNzUvaHIgbmVnLgorCitVcGRhdGVkOiAgICAxOTk3LTA1LTA5CisfCitGcmVlIFNvZnR3YXJlIEFzc29jaWF0aW9uIG9mIEdlcm1hbnkKK01pY2hhZWxhIE1lcnoKK0hlaW1hdHJpbmcgMTkKKzYwMDAgRnJhbmtmdXJ0L01haW4gNzAKK3Bob25lOgkgICgrNDkgNjkpIDYzMTIwODMpCitlcnQgIDoJICAoKzQ5LTE3Mi02OTg3MjQ2KQorZW1haWw6CSAgKGluZm9AZWxhcmEuZnNhZy5kZSkKKworU3VwcG9ydGluZyBhbGwga2luZHMgb2YgZnJlZXdhcmUgKGkuZS4gR05VKSwgZnJlZXdhcmUgZGV2ZWxvcG1lbnQsIGNvbnN1bHRpbmcsCit0cmFpbmluZywgaW5zdGFsbGF0aW9uLgkgU3BlY2lhbCBMSU5VWCBzdXBwb3J0IGdyb3VwLgorCitSQVRFUzoKKworQ29tcGFuaWVzIGFuZCBmb3IgcHJvZml0Citvcmdhbml6YXRpb25zCQkgICA6ICAxMDAgVVMkIC8gaG91cgorUHJpdmF0ZSBhbmQgbm90LWZvci1wcm9maXQKK29yZ2FuaXphdGlvbnMJCSAgIDogICA0MCBVUyQgLyBob3VyCitlcnQgKDI0aCBFbWVyZ2VuY3kKK3Jlc3BvbnNlIHRlYW0pCQkgICA6ICAzMDAgVVMkIC8gaG91cgorCitFbnRlcmVkOiAxOTk0LTA0LTE0CisfCitOb2FoIEZyaWVkbWFuICAgICAgICAgICAgIAk8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorMTExMSBXLiBFbCBDYW1pbm8gUmVhbCAjMTA5LTMzMQorU3Vubnl2YWxlLCBDQSA5NDA4NworKHBlcm1hbmVudCkKKworQXV0aG9yIG9mIHNldmVyYWwgRW1hY3MgTGlzcCBwYWNrYWdlcyBhbmQgcGFydHMgb2YgRW1hY3MsIGFzIHdlbGwgYXMKK251bWVyb3VzIG5ldHdvcmsgYW5kIHVuaXggc3lzdGVtIHV0aWxpdGllcy4gIENvLW1haW50YWluZWQgR05VIFRleGluZm8gYW5kCitBdXRvY29uZiBmb3IgYSBjb3VwbGUgb2YgeWVhcnMuICBFeHBlcmllbmNlZCB1bml4IHN5c3RlbXMgYWRtaW5pc3RyYXRvci4KK0ZTRiBlbXBsb3llZSBGZWIgMTk5MS0tU2VwIDE5OTQuCisKK0kgY2FuIHBlcmZvcm0gaW5zdGFsbGF0aW9uLCBwb3J0aW5nLCBhbmQgZW5oYW5jZW1lbnQgb2YgYWxsIEdOVSBzb2Z0d2FyZQorYW5kIGFueSBvdGhlciBmcmVlIHNvZnR3YXJlLCBpbmNsdWRpbmcgdGhlIExpbnV4IGtlcm5lbDsgc3lzdGVtIGRlc2lnbiBhbmQKK2FkbWluaXN0cmF0aW9uIGZvciB1bml4LXR5cGUgc3lzdGVtcyBhbmQgSVAgbmV0d29ya3M7IGFuZCBJIGFtIHdpbGxpbmcgdG8KK3Byb3ZpZGUgaGFuZGhvbGRpbmcgZm9yIHNoZWxsIHByb2dyYW1taW5nLCBFbWFjcyBMaXNwIGRldmVsb3BtZW50LCBhbmQKK3ZlcnNpb24gY29udHJvbCBzeXN0ZW1zIHN1Y2ggYXMgUkNTIGFuZCBDVlMuCisKK0ZlZXMgbmVnb3RpYWJsZSwgYXZlcmFnaW5nICQ3NS0kMTAwL2hvdXIuICBJIGNhbiB3b3JrIGluIHRoZSBDYWxpZm9ybmlhIGJheQorYXJlYSBvciBhbnl3aGVyZSBhY2Nlc3NpYmxlIG9uIHRoZSBJbnRlcm5ldC4gIEZvciBsYXJnZXIgam9icyBJIG1heSBiZQord2lsbGluZyB0byB0cmF2ZWwuCisKK1VwZGF0ZWQ6IDE5OTctMDUtMDgKKx8KK1JvbmFsZCBGLiBHdWlsbWV0dGUJPHJmZ0Btb25rZXlzLmNvbT4KK1JHIENvbnN1bHRpbmcKKzE3NTEgRWFzdCBSb3NldmlsbGUgUGt3eS4gIzE4MjgKK1Jvc2V2aWxsZSwgQ0EgOTU2NjEKK1RlbDogKzEgOTE2IDc4NiA3OTQ1CitGQVg6ICsxIDkxNiA3ODYgNTMxMQorCitTZXJ2aWNlczoJRGV2ZWxvcG1lbnQgJiBwb3J0aW5nIG9mIEdOVSBzb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29scy4KKworR05VIENvbnRyaWJ1dGlvbnM6CisJCUludmVudGVkLCBkZXNpZ25lZCwgYW5kIGltcGxlbWVudGVkIHRoZSBwcm90b2l6ZSBhbmQKKwkJdW5wcm90b2l6ZSB0b29scyBzdXBwbGllZCB3aXRoIEdDQzIuCisKKwkJRGVzaWduZWQgYW5kIGRldmVsb3BlZCBhbGwgY29kZSB0byBzdXBwb3J0IHRoZSBnZW5lcmF0aW9uCisJCW9mIER3YXJmIHN5bWJvbGljIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgU3lzdGVtIFYgUmVsZWFzZQorCQk0IGluIEdDQzIuCisKKwkJUGVyZm9ybWVkIG9yaWdpbmFsIHBvcnQgb2YgR05VIGNvbXBpbGVycyB0byBTVnI0IHN5c3RlbS4KKworCQlGaW5pc2hlZCBwb3J0IG9mIEdOVSBjb21waWxlcnMgdG8gSW50ZWwgaTg2MCBSSVNDCisJCXByb2Nlc3Nvci4KKworRXhwZXJpZW5jZToJMTMrIHllYXJzIFVOSVggc3lzdGVtcyBleHBlcmllbmNlLCBhbGwgd29ya2luZyBvbiBjb21waWxlcnMKKwkJYW5kIHJlbGF0ZWQgdG9vbHMuCisKKwkJNysgeWVhcnMgd29ya2luZyBwcm9mZXNzaW9uYWxseSBvbiBHQ0MsIEcrKywgYW5kIEdEQiB1bmRlcgorCQljb250cmFjdCB0byB2YXJpb3VzIGZpcm1zIGluY2x1ZGluZyB0aGUgTWljcm9lbGVjdHJvbmljcworCQlhbmQgQ29tcHV0ZXIgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAoTUNDKSwgRGF0YSBHZW5lcmFsIChERyksCisJCU5ldHdvcmsgQ29tcHV0aW5nIERldmljZXMgKE5DRCksIGFuZCBJbnRlbCBDb3JwLgorCitPdGhlciBxdWFsaWZpY2F0aW9uczoKKwkJRGV2ZWxvcGVyIG9mIHRoZSBSb2FkVGVzdCAodG0pIEMgYW5kIEMrKyBjb21tZXJjaWFsCisJCWNvbXBpbGVyIHRlc3Qgc3VpdGVzLgorCisJCUZvcm1lciB2aWNlLWNoYWlybWFuIG9mIFVOSVggSW50ZXJuYXRpb25hbCBQcm9ncmFtbWluZworCQlMYW5ndWFnZXMgU3BlY2lhbCBJbnRlcmVzdCBHcm91cCAoVUkvUExTSUcpLgorCisJCUJhY2hlbG9yJ3MgYW5kIGEgTWFzdGVyJ3MgZGVncmVlcywgYm90aCBpbiBDb21wdXRlciBTY2llbmNlLgorCitSYXRlczoJCVZhcmlhYmxlIGRlcGVuZGluZyB1cG9uIGNvbnRyYWN0IGR1cmF0aW9uLiAgQ2FsbCBmb3IgcXVvdGUuCisKK1VwZGF0ZWQ6IDE5OTctMDUtMDcKKx8KK01pY2hhZWwgUC4gRGVpZ25hbgorSWRlYW1hdGlvbiwgSW5jLgorMTM2IE5lbHNvbiBTdHJlZXQKK1Byb3ZpZGVuY2UsIFJJIDAyOTA4CisoNDAxKSAzMzEtMzcwOAorKDQwMSkgMjcyLTY0NDkgZmF4LgorCitSYXRlOglWYXJpZXMgZGVwZW5kaW5nIG9uIGNvbXBsZXhpdHkgb2YgdGFzay4KKwlIb3VybHkgYW5kIGZpeGVkLXJhdGUgY29udHJhY3RzIGFyZSBhdmFpbGFibGUuCitQcm9ncmFtcyBTdXBwb3J0ZWQ6CUFsbAorCitVcGRhdGVkOiAxOTk3LTA1LTA3CisfCitJbnRlcmFjdGl2ZSBJbmZvcm1hdGlvbiBMaW1pdGVkCisKK0ludGVyYWN0aXZlIEluZm9ybWF0aW9uIExpbWl0ZWQgaXMgYW4gRWRpbmJ1cmdoLWJhc2VkIGNvbXBhbnkgdGhhdAorc3BlY2lhbGlzZXMgaW4gV1dXIHNlcnZpY2VzIGFuZCBzdXBwb3J0IGZvciB1c2luZyB0aGUgSW50ZXJuZXQgZm9yCittYXJrZXRpbmcuCisKK091ciBzdGFmZiBoYXZlIG1hbnkgeWVhcnMgZXhwZXJpZW5jZSBpbiB1c2luZywgYW5kIGRldmVsb3BpbmcgbGlzcCBwYWNrYWdlcword2l0aGluLCBFbWFjcywgYW5kIGluIHVzaW5nIG90aGVyIEdOVS9Vbml4IHRvb2xzLCBwYXJ0aWN1bGFybHkgdW5kZXIgcHVibGljCitkb21haW4gVU5JWGVzLgorCitXZSBjYW4gcHJvdmlkZSBzZXJ2aWNlcyB0aHJvdWdob3V0IHRoZSBVSywgYXQgYW55IGxldmVsIGZyb20gZ2VuZXJhbAorY29uc3VsdGFuY3kgdGhyb3VnaCBmZXRjaGluZywgaW5zdGFsbGluZyBhbmQgY3VzdG9taXNpbmcgc29mdHdhcmUgdG8KK2Jlc3Bva2UgcHJvZ3JhbW1pbmcuICBGZWVzIHdvdWxkIGJlIGluIHRoZSByYW5nZSAjMzAwIC0gIzYwMCBwZXIgZGF5LAorZGVwZW5kaW5nIHByaW1hcmlseSBvbiB0aGUgc2l6ZSBvZiB0aGUgam9iLgorCitZb3UgY2FuIGNvbnRhY3QgdXMKKwlieSBlbWFpbDogPGVucXVpcmVAaW50ZXJhY3RpdmUuY28udWs+CisJYnkgcGhvbmU6IDAzNzAgMzAgNDAgNTIgKFVLKQorCQkgICgrNDQpIDM3MCAzMCA0MCA1MiAoSW50ZXJuYXRpb25hbCkKKwlieSBwb3N0OiAzLCBMYXVyaXN0b24gR2FyZGVucywKKwkJIEVkaW5idXJnaCBFSDMgOUhICisJCSBTY290bGFuZAorCitFbnRlcmVkOiAxOTk3LTA1LTA5CisfCitTY290dCBELiBLYWx0ZXIJCQk8c2RrQHR3aW5zdW4uY29tPgorMjAzMiBDb3JyYWwgQ2FueW9uCitNYWxpYnUsIENBIDkwMjY1LTk1MDMKK0hvbWU6ICgzMTApIDQ1Ni0wMjU0CisKK1ZlcnkgZmFtaWxpYXIgd2l0aCBhbGwgbGV2ZWxzIG9mIEVsaXNwIHByb2dyYW1taW5nLiAgVGF1Z2h0IEVtYWNzIHVzZQorYW5kIGN1c3RvbWl6YXRpb24gaW4gdW5pdmVyc2l0aWVzIGFuZCBpbmR1c3RyeS4gIEV4dGVuc2l2ZQordHJvdWJsZXNob290aW5nIGFuZCB1c2VyIHN1cHBvcnQgZXhwZXJpZW5jZS4gIENvLWRldmVsb3BlZCBhbgorb2JqZWN0LW9yaWVudGVkIGV4dGVuc2lvbiB0byBFbGlzcCAoRW9vcHMpIHRoYXQgY2FuIGJlIHVzZWQgZm9yCitwcm9qZWN0cy4gIEV4dGVuc2l2ZSBFbGlzcCBsZXZlbCBtb2RpZmljYXRpb24gZm9yIHJhcGlkIHByb3RvdHlwaW5nIG9mCitkZXNpZ25zIHVzZWQgaW4gZ3JvdXB3YXJlIHJlc2VhcmNoLiAgVGhpcyBpbmNsdWRlcyB0aGUgZGV2ZWxvcG1lbnQgb2YKK2FuIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgbXVsdGlwbGUsIGNvbW11bmljYXRpbmcgRW1hY3MgcHJvY2Vzc2VzLgorCitQcmVmZXIgZS1tYWlsIGNvbW11bmljYXRpb24gdG8gdGVsZXBob25lIGNhbGxzLgorCitVcGRhdGVkOiAgMTk5Ny0wNS0wNworHworS2FtYW4gU2NpZW5jZXMgQ29ycG9yYXRpb24KK0dyaWZmaXNzIEJ1c2luZXNzICYgVGVjaG5vbG9neSBQYXJrCis3NzUgRGFlZGFsaWFuIERyaXZlCitSb21lLCBOWSAxMzQ0MS00OTA5CisoMzE1KSAzMzQtNDkwMAorIAorQ09OVEFDVFM6IAorICAgICAgIERlbm5pcyBGaXR6Z2VyYWxkCTxkZml0emdlcmFsZEByb21lLmthbWFuLmNvbT4gCisgICAgICAgVG9tIFJvYmJpbnMJCTx0cm9iYmluc0Byb21lLmthbWFuLmNvbT4KKyAKK0thbWFuIFNjaWVuY2VzIGhhcyBwZXJmb3JtZWQgYSBHTlUgcG9ydCBmb3IgYSBjdXN0b20gUklTQyBwcm9jZXNzb3IuCitXZSBoYXZlIGV4cGVyaWVuY2UgaW4gdGhlIGRlZmluaXRpb24gYW5kIGRlc2NyaXB0aW9uIG9mIHRoZSBtYWNoaW5lCityZWdpc3RlciB0cmFuc2ZlciBsYW5ndWFnZSB0byB0aGUgR05VIHRvb2wtc2V0LiAgVGhpcyBpbmNsdWRlcyByZXdyaXRpbmcKK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIG5lY2Vzc2FyeSBkZXNjcmlwdGlvbiBhbmQgc291cmNlIGZpbGVzIG9mIGdjYywgZ2FzLAorYW5kIGdsZCBhbmQgb3RoZXIgYmludXRpbHMuICBLYW1hbiBhbHNvIGhhcyBzZXJ2aWNlcyBmb3IgaW5zdGFsbGF0aW9uIGFuZAorc2V0dXAgb2YgR05VIHRvb2xzLCAoR0FXSywgR0NDLCBFTUFDUywgZXRjLikgb24gU3VuIHdvcmtzdGF0aW9ucy4KKyAgCitXb3JrIGlzIG9uIGEgInNlcnZpY2UgY29udHJhY3QiIGJhc2lzIGFuZCBkZXZlbG9wbWVudCBpcyBjaGFyZ2VkIGVpdGhlcgoraG91cmx5IG9yIGFzIGEgZml4ZWQgcHJpY2UgY29udHJhY3QuCisgCitDb25zdWx0aW5nIHJhdGVzOiAkNzAgdG8gJDE3NSBwZXIgaG91ci4KKyAKK1VwZGF0ZWQ6ICAxOTk3LTA1LTA3CisfCitFaHVkIEthcm5pICAgICAgPGtlaHVkQHNpbW9ud2llc2VsLm5ldC5pbD4KKworSSBhbSBhbiBVTklYIHN5c3RlbSBwcm9ncmFtbWVyLiBNeSBza2lsbHMgaW5jbHVkZSB3cml0aW5nIGluIEMgYW5kIHNjcmlwdHMuCisKK0luIHRoZSBHTlUgZG9tYWluLCBJIGNvbnNpZGVyIG15c2VsZiBhbiBleHBlcnQgb24gRW1hY3MuICBJIGhhdmUgd3JpdHRlbiBzZXZlcmFsCitwYWNrYWdlcyBpbiBlbWFjcy1saXNwICguZWwpIGluY2x1ZGluZzogYmV0dGVyIEhlYnJldyBzdXBwb3J0LCBhbm90aGVyIG1hcmtpbmcKK3N5c3RlbSwgZW11bGF0aW9uIGZvciBDREMgZnVsbCBzY3JlZW4gZWRpdG9yIChGU0UpLCBDT0JPTCBtb2RlLCBtYXRoZW1hdGljYWwKK2V4cHJlc3Npb24gY29tcHV0aW5nLCBhbmQgZW5oYW5jZW1lbnRzIHRvIHZjLmVsIChjdXN0b21pemF0aW9uKSBhbmQgdG8gYW5nZS1mdHAKKyhhZGRlZCBOb3ZlbGwgYW5kIE5UIG9wZXJhdGluZyBzeXN0ZW1zKS4KKyAgICAgSSBoYXZlIGluc3RhbGxlZCBhbmQgdGVzdGVkIEVtYWNzIGFuZCBteSBlbCdzIG9uIHNldmVyYWwgbWFjaGluZXM6IERHLAorSFAsIEFscGhhIChPU0YpIGFuZCBQQyAoRE9TKS4KKyAgICAgSSBpbnN0YWxsZWQgYW5kIHdvcmtlZCB3aXRoIHNldmVyYWwgb3RoZXIgR05VIHBhY2thZ2VzIC0gUkNTLCBHbWFrZSwgR0NDCithbmQgbW9yZSwgYnV0IEknbSBub3QgYW4gZXhwZXJ0IGluIHRoZXNlIHBhY2thZ2VzLgorCitJIHdvcmsgaW4gSXNyYWVsIGFuZCBteSBub3JtYWwgcmF0ZSBpcyAkNDAgcGVyIGhvdXIuCisKK0VudGVyZWQ6ICAxOTk2LTA3LTE1CisfCitKb3NlcGggUi4gS2luaXJ5CQk8a2luaXJ5QGNzLmNhbHRlY2guZWR1PgorQ2FsdGVjaCBNYWlsc3RvcCAyNTYtODAJCWh0dHA6Ly93d3cuY3MuY2FsdGVjaC5lZHUvfmtpbmlyeS8KK1Bhc2FkZW5hLCBDQSA5MTEyNSAgICAgICAgICAgICAgPGpya0BtZXRhZ2VuZXNpcy5jb20+CitQaG9uZTogODE4LTM5NS00ODQwCitGYXg6IDgxOC03OTItNDI1NworCitMb25nLXRlcm0gaGlnaC1sZXZlbCBjb25zdWx0YW50IGluIGEgdmFyaWV0eSBvZiBkb21haW5zLiAgU2VlCitodHRwOi8vd3d3LmNzLmNhbHRlY2guZWR1L35raW5pcnkvcmVzdW1lLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KK3Byb2Zlc3Npb25hbCBhbmQgYWNhZGVtaWMgYmFja2dyb3VuZC4KKworSSBwcm92aWRlIGluc3RhbGxhdGlvbiwgcG9ydGluZywgZGVidWdnaW5nLCBjdXN0b21pemF0aW9uLCBkZXNpZ24sIGFuZAorZGV2ZWxvcG1lbnQgb2YgR05VIGFuZCBvdGhlciBVTklYIGFuZCBub24tVU5JWCBzb2Z0d2FyZS4gIEkgYW0gb3IgaGF2ZQorYmVlbiBhIGNlcnRpZmllZCBkZXZlbG9wZXIgd2l0aCBNaWNyb3NvZnQsIFN1blNvZnQsIE5lWFQsIGFuZCBBbWlnYS4KK0kgaGF2ZSBhIGdyZWF0IGRlYWwgb2YgZGV2ZWxvcG1lbnQgYW5kIG1hbmFnZW1lbnQgZXhwZXJpZW5jZSBhbmQgYW4KK2V4dHJlbWVseSBicm9hZCBiYWNrZ3JvdW5kIHdoaWNoIGNvbnRyaWJ1dGVzIHRvIG15IGV4Y2VsbGVudCBzeXN0ZW0KK2ludGVncmF0aW9uIGNhcGFiaWxpdGllcy4gIEkgaGF2ZSBhIHNwZWNpYWwgZXhwZXJ0aXNlIGFuZCBjb25kdWN0CityZXNlYXJjaCBpbiBkaXN0cmlidXRlZCBvYmplY3QgdGVjaG5vbG9naWVzLgorCitUaW1lIGFuZCBtYXRlcmlhbCByYXRlcyBmb3IgbG9jYWwgd29yayB2YXJ5IHJlZ2lvbmFsbHksIGJ1dCBhcmUKK2N1cnJlbnRseSAkMjUwIHBlciBob3VyIG9uIHRoZSB3ZXN0IGNvYXN0LiAgT3RoZXIgcmF0ZXMgYXBwbHkgZm9yCitsb25nLXRlcm0gam9icyAoZGF5IHJhdGVzLCB0cmF2ZWwsIGV0Yy4pIGFuZCByZW1vdGUgd29yayAodXN1YWxseSAxLzIKK2ZlZSkuICBJIGFtIGludGVyZXN0ZWQgaW4gZml4ZWQtYmlkIGpvYnMgYW5kIHdpbGwgd29yayBmb3IgbG93ZXIgcmF0ZXMKK2ZvciBub24tcHJvZml0IG9yZ2FuaXphdGlvbnMgYW5kIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9ucy4KKworVXBkYXRlZDogMTk5Ny0wNS0wNworHworQnJhZGxleSBNLiBLdWhuCis8Ymt1aG5AYWNtLm9yZz4KK2h0dHA6Ly93d3cuc21hcnQubmV0L35ia3VobgorCitJIGFtIGF2YWlsYWJsZSBmb3IgcHJpbWFyaWx5IFVuaXggc3lzdGVtIGFkbWluaXN0cmF0aW9uIGNvbnN1bHRpbmcsIGluY2x1ZGluZworYnV0IG5vdCBsaW1pdGVkIHRvIGluc3RhbGxhdGlvbiwgY29uZmlndXJhdGlvbiBhbmQgaW50ZWdyYXRpb24gb2YgR05VIHRvb2xzCithbmQgb3RoZXIgY29weS1sZWZ0ZWQgc29mdHdhcmUgc3VjaCBhcyBHTlUvTGludXguCisKK0kgYW0gcGFydGljdWxhcmx5IHNraWxsZWQgYXQgZW5kLXVzZXIgaGFuZC1ob2xkaW5nIGFuZCBhc3Npc3RpbmcgaW4gdGhlCitpbnRlZ3JhdGlvbiBvZiBHTlUgYW5kIG90aGVyIGNvcHktbGVmdGVkIHNvZnR3YXJlIGludG8gbmV3IGVudmlyb25tZW50cyB0aGF0CitoYXZlIG5vdCB1c2VkIHN1Y2ggdG9vbHMgaW4gdGhlIHBhc3QuCisKK1BsZWFzZSB2aXNpdCBteSBob21lcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBteSBiYWNrZ3JvdW5kIGFuZCBza2lsbHMuCisKK0kgYW0gYXZhaWxhYmxlIGZvciBib3RoIDEwOTkgKHByZWZlcnJlZCkgYW5kIFcyIG9uLXNpdGUgY29udHJhY3RpbmcgaW4gdGhlCitCYWx0aW1vcmUsIE1EIG1ldHJvcG9saXRhbiBhcmVhLCBhcyB3ZWxsIGFzIHJlbW90ZSBjb25zdWx0aW5nIHZpYSBkaWFsdXAgb3IKK0ludGVybmV0IGNvbm5lY3Rpb24gYW55d2hlcmUgaW4gdGhlIFVTLgorCitNeSByYXRlIGlzIGluIHRoZSAkNDAvaG91ciByYW5nZSwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzLiAgUmF0ZXMgZm9yCitub24tcHJvZml0IG9yZ2FuaXphdGlvbnMgYXJlIHN1YnN0YW50aWFsbHkgbG93ZXIsIGFuZCBwb3NzaWJseSBmcmVlLgorCitVcGRhdGVkOiAxOTk2LTEyLTMxCisfCitGZW4gTGFiYWxtZSAgICAgICAgICAgICAgICAgICAgICAgPGZlbkBjb21lZGlhLmNvbT4KK0NvTWVkaWEgQ29uc3VsdGluZyAgICAgICAgICAgaHR0cC8vd3d3LmNvbWVkaWEuY29tL2NvbWVkaWEvCis0MCBDYXJsIFN0cmVldCAjNCAgICAgICAgICAgICAgICAgV0UgQVJFIEVWRVJZV0hFUkUKK1NhbiBGcmFuY2lzY28gQ0EgOTQxMTcgICAgICAgICAgICAgSlVTVCBTQVkgIktOT1ciCisKK0NvbnN1bHRpbmcsIGluc3RhbGxhdGlvbiwgY3VzdG9taXphdGlvbiBhbmQgdHJhaW5pbmcgZm9yIEdOVSBFbWFjcywKK2FuZCBzZWxlY3RlZCBvdGhlciBHTlUgJiBuZXR3b3JrIHNvZnR3YXJlLiAgRGVzaWduICYgaW1wbGVtZW50YXRpb24KK29mIGZyZWUgc29mdHdhcmUgcHJvamVjdHMsIGFzIHdlbGwgYXMgc29mdHdhcmUgZW5naW5lZXJpbmcgJiBzeXN0ZW0KK2Rlc2lnbi4gIEkgaGF2ZSBiZWVuIGhhY2tpbmcgRW1hY3Mgc2luY2UgJzc2IHdoZW4gaXQgd2FzIFRFQ08gYW5kIF5SCittYWNyb3MgKGRvbid0IGFzayksIGFuZCBhbSBpbnRlci9pbnRyYS1uZXR3b3JrLCBVTklYICYgV2ViIGZyaWVuZGx5LgorCitSYXRlczoJJDc1IGhvdXIgJiB1cCwgZGVwZW5kaW5nOyAgZmxhdCByYXRlIGpvYnMgY29uc2lkZXJlZC4KKwlMb3dlciByYXRlcywgYmFydGVyIG9yIGZyZWUgZm9yIHNlbGVjdGVkIG5vbi1wcm9maXRzLgorCitVcGRhdGVkOiAxOTk3LTA1LTA3CisfCitHcmVnIExlaGV5CitMRU1JUworUE8gQm94IDQ2MAorRWNodW5nYSBTQSA1MTUzCitBdXN0cmFsaWEKKworUGhvbmU6CSs2MS04LTgzODgtODI1MAorRmF4OgkrNjEtOC04Mzg4LTgyNTAKK01vYmlsZToJKzYxLTQxLTczOS03MDYyCitNYWlsCTxncm9nQGxlbWlzLmNvbT4KKworU2VydmljZXM6IFN1cHBseSwgcG9ydGluZywgaW5zdGFsbGF0aW9uLCBjb25zdWx0YXRpb24gb24gYWxsIEdOVQorcHJvZHVjdHMuCisKK0V4cGVyaWVuY2U6IDIwIHllYXJzIE9TIGFuZCBjb21waWxlciBleHBlcmllbmNlLCBwb3J0cyBvZiBtb3N0IEdOVQorcHJvZHVjdHMuICBBdXRob3Igb2YgcG9ydGVkIHNvZnR3YXJlIENELVJPTSBmb3IgVU5JWCBTeXN0ZW0gVi40LjIsCisiUG9ydGluZyBVTklYIFNvZnR3YXJlIiAoTydSZWlsbHkpLCAiSW5zdGFsbGluZyBhbmQgUnVubmluZyBGcmVlQlNEIgorYW5kICJUaGUgQ29tcGxldGUgRnJlZUJTRCIgKGJvdGggV2FsbnV0IENyZWVrKS4KKworUmF0ZXM6IENob2ljZSBvZiBBVUQgMTIwIHBlciBob3VyIG9yIGhvdGxpbmUgcmF0ZXMgQVVEIDIuNTAgRE0gcGVyCittaW51dGUuICBPdXRzaWRlIEF1c3RyYWxpYSwgJFVTIDEwMCBwZXIgaG91ciBvciAkVVMgMiBwZXIgbWludXRlLgorUXVpY2sgcXVlc3Rpb25zIG1heSBiZSBmcmVlLiAgTGltaXRlZCBmcmVlIHN1cHBvcnQgYXZhaWxhYmxlIGZvcgorcHVyY2hhc2VycyBvZiBMRU1JUyBDRC1ST01zLgorCitVcGRhdGVkOiAxOTk3LTA1LTA5CisfCitSb2hhbiBMZW5hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJqbEB3ci5jb20uYXU+CiszMiBIb2x0ZXJtYW5uIFN0LgorQ3Jvd3MgTmVzdCwgTlNXIDIwNjUKK0FVU1RSQUxJQQorKzYxIDQxMTI1MDAyNAorCisqIFRoZSBodW1hbiBmYWNlIGJlaGluZCB0aGUgYnVnLWcrK0BwcmVwLmFpLm1pdC5lZHUgbWFpbGluZyBsaXN0IC0ga25vd24KKyAgaW4gdGhlIHBhc3QgYXMgPHJqbEBpYXNzZi5lYXNhbXMuY29tLmF1PiBhbmQgPHJqbEBvdC5jb20uYXU+IC0gbm93CisgIGtub3duIGFzIDxyamxAd3IuY29tLmF1Pi4KKworKiBJbnRlcmVzdGVkIGluIHByb3ZpZGluZyBmaXJzdCBsaW5lIHN1cHBvcnQgYW5kIGRldmVsb3BtZW50LgorCitFeHBlcmllbmNlOiAxMCsgeWVhcnMgQy9Vbml4LCA2KyB5ZWFycyBDKysKKyAgICAgICAgICAgIEV4dGVuc2l2ZSBleHBlcmllbmNlIHdpdGggR05VIHRvb2xzLCBjcm9zcy1jb21waWxlcnMsCisgICAgICAgICAgICBlbWJlZGRlZC9ob3N0ZWQgc3lzdGVtcywgcmVhbHRpbWUsIHNpbXVsYXRpb25zLAorICAgICAgICAgICAgYW5kIG1pbGl0YXJ5IHNvZnR3YXJlLgorCitEZWdyZWVzOiAgICBCU2MgKENTKSwgQkUgKENvbW1zKSwgVW5pdmVyc2l0eSBvZiBNZWxib3VybmUKKworUmF0ZXM6ICAgICAgQVVTICQ3NSsvaHIgbmVnLgorCitVcGRhdGVkOiAgMTk5Ny0wNS0xNworHworUmV1dmVuIE0uIExlcm5lcgkJPHJldXZlbkBuZXR2aXNpb24ubmV0LmlsPgorMTcgRGlzcmFlbGkgU3RyZWV0CitIYWlmYSAzNDMzMworSXNyYWVsCisKK1Bob25lOiAgICAgMDQtODI0LTIyNjUgKHdpdGhpbiBJc3JhZWwpCisgICAgICAgKzk3Mi00LTgyNC0yMjY1IChvdXRzaWRlIG9mIElzcmFlbCkKKworRmF4OiAgICAgICAwNC04MjYtMTIxOSAod2l0aGluIElzcmFlbCkKKyAgICAgICArOTcyLTQtODI2LTEyMTkgKG91dHNpZGUgb2YgSXNyYWVsKSAgICAKKworV1dXOiBodHRwOi8vd3d3Lm5ldHZpc2lvbi5uZXQuaWwvcGhwL3JldXZlbgorCistIFN5c3RlbSBhbmQgbmV0d29yayBhZG1pbmlzdHJhdGlvbiwgZXNwZWNpYWxseSBMaW51eC1iYXNlZCBzeXN0ZW1zCisgIGFuZCBuZXR3b3JrcworLSBBZG1pbmlzdHJhdGlvbiwgdHJhaW5pbmcsIGFuZCBwcm9ncmFtbWluZyBmb3IgSW50ZXJuZXQgbm9kZXMgYW5kCisgIFdvcmxkLVdpZGUgV2ViIHNpdGVzCistIEluc3RhbGxhdGlvbiwgc3VwcG9ydCBhbmQgdHJhaW5pbmcgaW4gdGhlIHVzZSBvZiBMaW51eCwgRW1hY3MsIFBlcmwsCisgIGFuZCBvdGhlciBmcmVlIHNvZnR3YXJlCistIEV4cGVydGlzZSBpbiBDLCBFbWFjcyBMaXNwLCBhbmQgUGVybAorCitDb25zdWx0aW5nIHJhdGVzOiAkNzUvaG91ciwgbGVzcyBmb3IgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb25zLgorCitVcGRhdGVkOiAxOTk3LTA1LTA3CisfCitSaWNoYXJkIExldml0dGUgICAgICAgICAgICAgKGluIFRlWDogUmljaGFyZCBMZXZpdHRlCitMZXZpdHRlIFByb2dyYW1taW5nICAgICAgICAgICAgICAgICAgTGV2aXR0ZSBQcm9ncmFtbWluZworU3Bhbm52YWdlbiAzOCwgSSAgICAgICAgICAgICAgICAgICAgIFNwYW5udlwiYWdlbiAyOCwgSQorUy0xNjggMzUgIEJyb21tYSAgICAgICAgICAgICAgICAgICAgIFMtMTY4IDM1ICBCcm9tbWEKK1N3ZWRlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2VkZW4pCitUZWwubnIuOiAgKzQ2ICg4KSAyNiA1MiA0NyAgICAgICh0aGVyZSBpcyBhbiBhbnN3ZXJpbmcgbWFjaGluZSkKK0NlbGx1bGFyOiArNDYgKDEwKSAyMjIgNjQgMDUKK2UtbWFpbDogICA8bGV2aXR0ZUBscC5zZT4KKworV2hhdCBJIGRvOgorCVByaW1hcmx5IEkgd29yayBvbiBHTlUgc29mdHdhcmUgZm9yIFZNUywgYm90aCBWQVggYW5kIEFYUC4gIEkndmUKKwliZWVuIHBvcnRpbmcgR05VIEVtYWNzIHRvIFZNUyBzaW5jZSBzcHJpbmcgMTk5MS4gIEkndmUgCXBvcnRlZCBhCisJYnVuY2ggb2Ygb3RoZXIgR05VIHByb2dyYW1zIGFzIHdlbGwuICBJIG1haW50YWluIEdOVSB2bXNsaWIuCisJRm9yIGZ1cnRoZXIgaW5mbywgc2VlIGh0dHA6Ly93d3cubHAuc2Uvfmxldml0dGUvcHJvZi9yZXN1bWUuaHRtbAorCitQcm9ncmFtcyBzdXBwb3J0ZWQ6CisJVG8gYSB2YXJ5aW5nIGRlZ3JlZSAocmFuZ2luZyBmcm9tIGV4dGVudGlvbiBhbmQgcG9ydGluZyB0bworCWluc3RhbGxhdGlvbiBhbmQgc2ltcGxlIHF1ZXN0aW9ucykgYXQgdGhlIHRpbWUgb2YgdXBkYXRpbmcgdGhpcworCWVudHJ5OgorCS0gR05VIHZtc2xpYiwgZW1hY3MsIGF1dG9jb25mLCB6aXAsIGRpZmZ1dGlscywgbTQsIHBhdGNoLCB0ZXhpbmZvLAorCSAgQy9DKys7IG9uIGJvdGggVk1TIGFuZCBVbml4LgorCS0gT3RoZXIgR05VIHByb2dyYW1zIHRvIGEgc21hbGwgZGVncmVlOyBvbiBVbml4LgorCUZvciBmdXJ0aGVyIGluZm8sIGxvb2sgYXQgaHR0cDovL3d3dy5scC5zZS9wcm9kdWN0cy9nbnUuaHRtbAorCitFeHBlcmllbmNlOgorCUZsdWVudCBpbiBUZVgvTGFUZVggYW5kIG1hbnkgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLgorCU1vZGlmaWVkIGtleSBlbGVtZW50cyBpbiBFbWFjcyAoZS5nLiwgbWVtb3J5IGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQpCisJdG8gd29yayB0cmFuc3BhcmVudGx5IG9uIFZNUy4gIEkgaGF2ZSB2ZXJ5IGdvb2Qga25vd2xlZGdlIGluIHRoZSBWTVMKKwlvcGVyYXRpbmcgc3lzdGVtLiAgSSdtIGFsc28ga25vd2xlZGdlZCBpbiB0aGUgYSBmZXcgVW5peCBmbGF2b3JzLgorCUZvciBmdXJ0aGVyIGluZm8sIHNlZSBodHRwOi8vd3d3LmxwLnNlL35sZXZpdHRlL3Byb2YvcmVzdW1lLmh0bWwKKworWW91ciBSYXRlOgorCSQ3MC0kMTAwL2hvdXIgKDUwMC04MDAgU0VLIGluIHN3ZWRlbiksIHBsdXMgZXhwZW5zZXMuICBNeSByYXRlcworCWFyZSBuZWdvdGlhYmxlLCBkZXBlbmRpbmcgb24gaG93IGludGVyZXN0aW5nIHRoZSBwcm9qZWN0IGlzIHRvIG1lLgorCitVcGRhdGVkOiAxOTk3LTA1LTA4CisfCitMZXhhIFNvZnR3YXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0BsZXhhLmNvbQorMTU5MCBUaGUgQWxhbWVkYSwgU3VpdGUgMTAyCitTYW4gSm9zZSwgQ0EgIDk1MTI2CisKKysxIDgwMCAyNzgtMjA0MAorKzEgNDA4IDI3OC0yMDQzICB2b2ljZQorKzEgNDA4IDI3OC0yMDQ1ICBmYXgKKworaHR0cDovL3d3dy5sZXhhLmNvbQorCitMZXhhIFNvZnR3YXJlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIEdOVSBDL0MrKyBpbmNsdWRpbmcgdGhlIEdOVSBkZWJ1Z2dlcgorYW5kIGxpbmtlci4gIExleGEgaGFzIGV4dGVuc2l2ZSBleHBlcmllbmNlIHN1cHBvcnRpbmcgR0NDL0crKyBvbiBTTkkKK2FuZCBQeXJhbWlkIGFzIHdlbGwgYXMgYWxsIG90aGVyIE1JUFMgQUJJIHBsYXRmb3Jtcy4gIFdlIG9mZmVyIHN1cHBvcnQKK3RvIDIsIDUsIDI1IGFuZCBsYXJnZXIgbnVtYmVyIG9mIHVzZXJzIHZpYSBwaG9uZSwgZW1haWwsIGZ0cC4KKworVXBkYXRlZDogIDE5OTctMDUtMDEKKx8KK0dvcmQgTWF0emlna2VpdCAgICAgICAgICAgICAgICAgICAgICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KKzIyMjAgQ2FwaXRvbCBIaWxsIENyZXNjZW50ICAgICAgICAgICBodHRwOi8vd3d3Lm0tdGVjaC5hYi5jYS9+Z29yZC8KK0NhbGdhcnksIEFsYmVydGEgICBUMk0gNEI5ICAgICAgICAgICBWb2ljZTogKDQwMykgMjgyLTEzODcKK0NBTkFEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVg6ICAgKDQwMykgMjg0LTAxMzcKKworSSB3aWxsIGhlbHAgaW5zdGFsbCBiYWRseS1iZWhhdmVkIHNvdXJjZSBjb2RlIHBhY2thZ2VzLCBhbmQgaGF2ZSBleHBlcmllbmNlCitmaXhpbmcgdGhlbSB0byBjb25mb3JtIHRvIEdOVSBzdGFuZGFyZHMuICBJIHdpbGwgZ2xhZGx5IGhlbHAgbm92aWNlcyBhbmQKK2ludGVybWVkaWF0ZSBjb21wdXRlciB1c2VycyB0byB1bmRlcnN0YW5kLCBpbnN0YWxsLCBhbmQgdXNlIGZyZWUgc29mdHdhcmUsCit3aGV0aGVyIG9yIG5vdCBJIGhhdmUgcHJpb3IgZXhwZXJpZW5jZSB3aXRoIHRoYXQgc29mdHdhcmUuICBJIGtub3cgbXkKK2xpbWl0YXRpb25zIHdlbGwsIGFuZCB3aWxsIGZyZWVseSBnaXZlIG90aGVyIGNvbnRhY3RzIGlmIEkgZG8gbm90IHdhbnQgdG8KK3NvbHZlIHlvdXIgcHJvYmxlbSBteXNlbGYuCisKK0kgaGF2ZSBpbnN0YWxsZWQgYW5kIGFkbWluaXN0ZXJlZCBmcmVlIGFuZCBwcm9wcmlldGFyeSBzeXN0ZW1zIGluIGhvbWUsCithY2FkZW1pYywgYW5kIGJ1c2luZXNzIGVudmlyb25tZW50cy4gIEkgaGF2ZSBwcmFjdGljYWwgZXhwZXJpZW5jZSBpbiBtb3N0Cithc3BlY3RzIG9mIFVuaXggYW5kIG5ldHdvcmsgc2VjdXJpdHkuICBJIGtub3cgaG93IHRvIGRpYWdub3NlIGEgY29tcGxleAorZXhpc3RpbmcgY29tcHV0ZXIgc3lzdGVtIGFuZCBpbmNyZW1lbnRhbGx5IHJlcGxhY2UgaXQgd2l0aCBhIHN1cGVyaW9yIGZyZWUKK3N5c3RlbSB3aXRob3V0IGRpc3J1cHRpbmcgc2VydmljZS4KKworSSBoYXZlIG92ZXIgMiB5ZWFycyBvZiBleHBlcmllbmNlIHdpdGggc2V2ZXJhbCBvZiB0aGUgbWFqb3IgZnJlZSBPU2VzOgorTGludXgvR05VIChSZWQgSGF0LCBEZWJpYW4sIFNsYWNrd2FyZSksIE5ldEJTRCwgRnJlZUJTRCwgYW5kIEdOVS9IdXJkLiAgSSBhbQordGhlIG1haW50YWluZXIgb2YgR05VIExpYnRvb2wgYW5kIEdOVSBETEQuICBTb21lIG9mIG15IHNwZWNpYWx0aWVzIGFyZToKK0VtYWNzLCBBdXRvbWFrZSwgQXV0b2NvbmYsIFNBTkUsIEMsIFBlcmwsIGFuZCBzaGVsbCBzY3JpcHQgcHJvZ3JhbW1pbmcuCisKK015IHJhdGVzIHN0YXJ0IGF0ICQxMCAoQ2FuYWRpYW4gZG9sbGFycykgcGVyIGhvdXIuICBXaGVuIEkgYW0gbm90IHN0YXJ2aW5nLCBJCitkbyBub3QgY2hhcmdlIHdvcnRoeSBub24tcHJvZml0IG9yZ2FuaXphdGlvbnMuCisKK1VwZGF0ZWQ6ICAxOTk3LTA1LTA4CisfCitBbmRyZXcgTWNDYWxsdW0KKzY2MjMgRGFsemVsbCBQbGFjZQorUGl0dHNidXJnaCwgUEEgIDE1MjE3CitIb21lOiAoNDEyKSA0MjItMDY4OAorPG1jY2FsbHVtQGNzLmNtdS5lZHU+CitodHRwOi8vd3d3LmNzLnJvY2hlc3Rlci5lZHUvdS9tY2NhbGx1bQorCitTZXJ2aWNlczogICAgIFN1cHBvcnQsIGVuaGFuY2VtZW50cywgbmV3IGRldmVsb3BtZW50IGluOgorCQlHTlUgT2JqZWN0aXZlIEMKKwkJR05Vc3RlcCwgYm90aCBncmFwaGljYWwgYW5kIG5vbi1ncmFwaGljYWwuCisJCUdOVXN0ZXAgQmFzZSBMaWJyYXJ5OiBsaWJnbnVzdGVwLWJhc2UKKwkJKGVzcGVjaWFsbHkgRGlzdHJpYnV0ZWQgT2JqZWN0cykKKwkJSW50ZXJmYWNlIGJldHdlZW4gT2JqZWN0aXZlLUMgYW5kIEd1aWxlIG9yIFRDTDogbGliZ3VpbGVvYmpjLgorCitFeHBlcmllbmNlOgkxMCsgeWVhcnMgb2YgVU5JWCBleHBlcmllbmNlLgorCQlQcm9ncmFtbWluZyBmb3IgTmVYVFNURVAgc2luY2UgdmVyc2lvbiAwLjgsIDE5ODguCisJCU1BIGFuZCBQaEQgaW4gQ29tcHV0ZXIgU2NpZW5jZS4KKwkJRXh0ZW5zaXZlIHdvcmsgb24gR05VIE9iamVjdGl2ZSBDIFJ1bnRpbWUuCisJCUF1dGhvciBvZiBHTlVzdGVwIEJhc2UgTGlicmFyeSwgaW5jbHVkaW5nIERpc3RyaWJ1dGVkIE9iamVjdHMKKwkJRlNGIENoaWVmIE1haW50YWluZXIgb2YgdGhlIEdOVXN0ZXAgUHJvamVjdC4KKwkJQ29udHJpYnV0b3IgdG8gR0NDLCBFbWFjcywgR3VpbGUuCisJCUMsIE9iamVjdGl2ZS1DLCBQb3N0c2NyaXB0LCBTY2hlbWUsIExpc3AsIEVMaXNwLCBMaW51eC4KKwkJRW5nbGlzaCBhbmQgRnJhbmNhaXMuCisKK1JhdGVzOgkJJDkwLSQxNTAgLyBob3VyLCBuZWdvdGlhYmxlLCBkZXBlbmRpbmcgb24gbWFueSB2YXJpYWJsZXMuCisKK1VwZGF0ZWQ6IDE5OTctMDUtMDcKKx8KK0VyaWsgTmFnZ3VtCQk8ZXJpa0BuYWdndW0ubm8+CitQLk8uIEJveCAxNTcwIFZpa2EJaHR0cDovL3d3dy5uYWdndW0ubm8KKzAxMTggT1NMTwkJcGhvbmU6ICs0NyA4ODAwIDg4NzkKK05PUldBWQkJCU5JQyBoYW5kbGU6IEVOOQorCitCYWNrZ3JvdW5kOiBJIGhhdmUgZXh0ZW5zaXZlIGV4cGVyaWVuY2Ugd2l0aCBwcm9ncmFtbWluZyB1bmRlciBVbml4LCBpbiBDCitpbiBwYXJ0aWN1bGFyIChzaW5jZSAxOTgzKSwgd2l0aCBzdGFuZGFyZHMgYW5kIHNwZWNpZmljYXRpb25zIGZvciBJbnRlcm5ldAorcHJvdG9jb2xzIChzaW5jZSAxOTg3KSwgSW50ZXJuYXRpb25hbCBTdGFuZGFyZHMgZm9yIGNoYXJhY3RlciBzZXRzIGFuZAorZW5jb2Rpbmcgc2NoZW1lcyAoc2luY2UgMTk4OCksIElTT6A4ODc5IFNHTUwgKHNpbmNlIDE5OTAsIG5hdGlvbmFsIGhlYWQgb2YKK2RlbGVnYXRpb24gdG8gSVNPL0lFQyBKVEMgMS9TQyAxOC9XRyA4IHNpbmNlIDE5OTEpLCBhbmQgQU5TSSBYMy4yMjYgQ29tbW9uCitMaXNwIChzaW5jZSBlYXJseSAxOTk0KS4gIEkgaGF2ZSBiZWVuIGFuIEVtYWNzIHVzZXIgYW5kIHByb2dyYW1tZXIgZnJvbQorMTk4NCB0byAxOTg3IChUT1BTLTIwKSBhbmQgZnJvbSAxOTkxIHRvIHByZXNlbnQgKFVuaXgpLiAgc2luY2UgZWFybHkgMTk5NCwKK0kgaGF2ZSB3b3JrZWQgb24gR05VIEVtYWNzIGRldmVsb3BtZW50LCBpbiBib3RoIExpc3AgYW5kIEMsIGFuZCBzaW5jZSBtaWQKKzE5OTUsIEkgaGF2ZSBiZWVuIHRyYWNraW5nIHRoZSBkZXZlbG9wbWVudCBjb2RlLgorCitTZXJ2aWNlcyBJIG9mZmVyIHRoZSBmcmVlIHNvZnR3YXJlIGNvbW11bml0eSBpbmNsdWRlIHN1cHBvcnRpbmcgRW1hY3MgdXNlcnMKK2FuZCBwcm9ncmFtbWVycyB3aXRoIGV4cGVydCBhZHZpY2UgKGdyYXRpcyBvbiBVU0VORVQgb3IgbWFpbGluZyBsaXN0cyB3aGVyZQorb3RoZXJzIG1heSBiZW5lZml0KSwgY3VzdG9taXppbmcgYW5kIHdyaXRpbmcgRW1hY3MgZnVuY3Rpb25zIGFuZCBwYWNrYWdlcywKK2RlbGl2ZXJpbmcgY291cnNlcyBhbmQgc2VtaW5hcnMgZnJvbSB0dXRvcmlhbHMgdG8gd3JpdGluZyBFbWFjcyBMaXNwIGFuZCBDCitleHRlbnNpb25zLCBhbmQgcHJvdmlkaW5nIGdlbmVyYWwgYWlkIHdpdGggYWxsIEdOVSBzb2Z0d2FyZS4KKworTXkgc3RhbmRhcmQgcmF0ZSBpcyBhIGZsYXQgVVNEIDgwIHBlciBob3VyIG9yIFVTRCAyIHBlciBtaW51dGUgKHlvdSBkZWNpZGUKK3doaWNoIHRpbWUgdW5pdCB0byBhcHBseSksIGJ1dCB0byBvZmZzZXQgdGhlIGNvc3Qgb2YgcHJvY2Vzc2luZyBtb25leSwgdGhlCittaW5pbXVtIGNyZWRpdCBjYXJkIGNoYXJnZSBpcyBVU0SgMTAwIGFuZCB0aGUgbWluaW11bSBpbnZvaWNlZCBhbW91bnQgaXMKK1VTRCAyNTAuICBEaXNjb3VudHMgYXJlIGF2YWlsYWJsZSB0byB3b3J0aHkgY2F1c2VzIC0tIHByZXNlbnQgeW91ciBjYXNlLgorVGltZSBhd2F5IGZyb20gaG9tZSBpcyBiaWxsZWQgYXQgVVNEIDQwIHBlciBob3VyIGFyb3VuZCB0aGUgY2xvY2sgdG8KK2VuY291cmFnZSByZW1vdGUgd29yay4gIChDb3Vyc2VzIGFuZCBzZW1pbmFycyBhcmUgbmVnb3RpYXRlZCBpbmRpdmlkdWFsbHkuKQorCitQbGVhc2UgY2FsbCBvbmx5IGFib3V0IGFjdHVhbCB3b3JrLCBJIHByZWZlciBtYWlsIGZvciBhbGwgb3RoZXIgcXVlc3Rpb25zLgorCitVcGRhdGVkOiAxOTk3LTA3LTE4CisfCitORVQtQ29tbXVuaXR5ICAgICAgICAgICAgICAgICAgIDxzYWxlc0BuZXQtY29tbXVuaXR5LmNvbT4KKzUyMiBTVyA1dGggQXZlbnVlICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uZXQtY29tbXVuaXR5LmNvbQorU3VpdGUgMTEwNQorUG9ydGxhbmQsIE9SIDk3MjA0IFVTQQorMS04MDAtOTE5LTAwNjAgdm9pY2UgIAorMS01MDMtMjc0LTQ0MjMgdm9pY2UgIAorMS01MDMtMjc0LTU0MDYgZmF4ICAgIAorCitORVQtQ29tbXVuaXR5IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBjb21wbGV0ZSBHTlVzdGVwIHRvb2xzZXQKK2luY2x1ZGluZyB0aGUgT2JqZWN0aXZlLUMgcnVudGltZSB3aXRoaW4gR0NDLCB0aGUgR05Vc3RlcCBCYXNlIExpYnJhcnksCit0aGUgRGlzcGxheSBHaG9zdHNjcmlwdCBzeXN0ZW0sIHRoZSBHTlVzdGVwIEdVSSBMaWJyYXJ5LCB0aGUgR05Vc3RlcAorWC9EUFMgR1VJIEJhY2tlbmQsIGFuZCB0aGUgR05Vc3RlcCBEYXRhYmFzZSBMaWJyYXJ5LiBORVQtQ29tbXVuaXR5IGFsc28KK3Byb3ZpZGVzIHN1cHBvcnQgZm9yIGl0cyBvd24gTWVkaWFCb29rIHNvZnR3YXJlIGluY2x1ZGluZyB0aGUgTWVkaWFCb29rCitSYW5kb20gTGlicmFyeSBhbmQgdGhlIE1lZGlhQm9vayBTcGVlY2ggU3ludGhlc2lzIExpYnJhcnkuIAorTkVULUNvbW11bml0eSBhY3RpdmVseSBzdXBwb3J0cyBhbmQgZGV2ZWxvcHMgZnJlZSBzb2Z0d2FyZSBvbiBhbGwKK0dOVXN0ZXAgcGxhdGZvcm1zOyBhIHBvcnRpb24gb2YgdGhlIHByb2NlZWRzLCB1c3VhbGx5IDIwJSwgZ2VuZXJhdGVkCitmcm9tIENELVJPTSBzYWxlcyBnbyB0b3dhcmRzIGFkZGl0aW9uYWwgZGV2ZWxvcG1lbnQgYW5kIGVuaGFuY2VtZW50IG9mCitHTlVzdGVwLgorCitVcGRhdGVkOiAxOTk3LTA1LTEyCisfCisgIE9wZW4gU3lzdGVtcyBDb25zdWx0YW50cyBhLnMKKyAgU3QuIE9sYXZzZ3QuIDI0CisgIE4tMDE2NiBPU0xPCisgIE5PUldBWQorCitQaG9uZTogICAgICAgICAgICAgICBGYXg6CisgICs0NyAyMiAyMCA0MCA1MCAgICArNDcgMjIgMjAgMDIgODUKKworV2ViOiAgICAgICAgICAgICAgICAgRS1tYWlsOgorICBodHRwOi8vd3d3Lm9zYy5ubyAgPGdudS1zdXBwb3J0QG9zYy5ubz4KKworT3BlbiBTeXN0ZW1zIENvbnN1bHRhbnRzIGEucyBjYW4gcHJvdmlkZSBwcm9ncmFtbWluZyBzdXBwb3J0IGZvciBhbGwKK0dOVSBzb2Z0d2FyZSAtLSBleHRlbmRpbmcgb3IgYWRvcHRpbmcgaXQgdG8gbWVldCBjdXN0b21lciBuZWVkcy4KK1ByaWNlcyB2YXJ5IHdpdGggc29mdHdhcmUgYW5kIHByb2plY3QuICBIb3VybHkgZmVlcyBhcmUgaW4gdGhlICQ4MC0xMjAKK3JhbmdlLiAgRml4ZWQtcHJpY2VkIHByb2plY3RzIGFyZSBhbHNvIGF2YWlsYWJsZS4gIE5vIHBob25lIHN1cHBvcnQuCisKK1VwZGF0ZWQ6ICAxOTk3LTA1LTA4CisfCitGcmFuY2VzY28gUG90b3J0aWAgPEYuUG90b3J0aUBjbnVjZS5jbnIuaXQ+CitWaWEgUy5TdGVmYW5vLCA4Cis1NjEyMyBQaXNhLCBJdGFseQorVGVsLiAoMDUwKTU2MDY3MQorCitFbWFjczoJaW5zdGFsbGF0aW9uIGFuZCBtYWludGVuYW5jZSwgdHJhaW5pbmcgYW5kIHR1dG9yaWFscywKKwljdXN0b21pc2F0aW9uLCBleHRlbnNpb25zLCB0cm91Ymxlc2hvb3RpbmcuICBBdXRob3Igb2Ygc29tZSBvZgorCXRoZSBwYWNrYWdlcyBpbiB0aGUgZW1hY3MgZGlzdHJpYnV0aW9uLCBoYXMgbWFkZSB0aGUgcG9ydGluZworCW9mIGVtYWNzIHRvIHRoZSBNb3Rvcm9sYSBEZWx0YSBhcmNoaXRlY3R1cmUuCisKK090aGVyOglpbnN0YWxsYXRpb24gYW5kIG1haW50ZW5hbmNlIG9mIEdOVSBzb2Z0d2FyZS4gIEV4cGVyaWVuY2Ugd2l0aAorCWh5bGFmYXgsIFJDUywgZ3BlcmYsIGV0YWdzLCBzbWFpbCwgaW5kZW50LCBkaWZmLCBnYXdrLCBnY2MsCisJc2NyZWVuLiAgSXMgdGhlIGN1cnJlbnQgbWFpbnRhaW5lciBvZiBldGFncy4KKworUmF0ZXM6CTMwLTgwIEtML2hyLCBkZXBlbmRpbmcgb24gZXhwZXJpZW5jZSBvbiB0aGUgcGFydGljdWxhciB0YXNrLgorCUF2ZXJhZ2UgaXMgNTAgS0wvaHIgJDUwL2hyLgorCVByZWZlciBlLW1haWwgY29tbXVuaWNhdGlvbiB0byB0ZWxlcGhvbmUuCisKK1F1YWxpZmljYXRpb25zOiBFbGVjdHJvbmljIEVuZ2luZWVyaW5nIGRlZ3JlZSwgUGlzYS4gIEZ1bGwgdGltZQorCXJlc2VhcmNoZXIgaW4gQ05VQ0UtQ05SLgorCUZhbWlsaWFyIHdpdGggZWxpc3AgcHJvZ3JhbW1pbmcgYW5kIHBvcnRpbmcgb2YgQyBwcm9ncmFtcy4KKworVXBkYXRlZDogIDE5OTctMDUtMDgKKx8KK0RpcGwuLUluZm9ybS4gS2xhdXMgS2FlbXBmCQk8a2thZW1wZkBwcm9naXMuZGU+Citwcm9HSVMgU29mdHdhcmUKK0pha29ic3RyLiAxMTcKK0QtNTIwNjQgQWFjaGVuCitHZXJtYW55CitodHRwOi8vd3d3LnByb2dpcy5kZQorVGVsICs0OSAyNDEgNDcwNjcwCitGYXggKzQ5IDI0MSA0NzA2NzI5CisKKy0gMTUgeWVhcnMgQy9Vbml4IGV4cGVyaWVuY2UKKy0gNiB5ZWFycyBWTVMgZXhwZXJpZW5jZQorLSBQb3J0ZWQgQkZEIGxpYnJhcnksIEJpbnV0aWxzLCBHTlUgQXNzZW1ibGVyLCBHTlUgQywgR05VIEMrKywKKyAgR05VIEMrKyBsaWJyYXJpZXMsIGFuZCBHTlUgTWFrZSB0byBvcGVuVk1TL0FscGhhLgorCitXZSBkbyBhIGxvdCBvZiBjcm9zcy1wbGF0Zm9ybSAoVW5peC1WTVMtV2luZG93c05UKSBkZXZlbG9wbWVudAorbW9zdGx5IHdpdGggdGhlIEdOVSBjb21waWxlciBlbnZpcm9ubWVudC4gV2UgYXJlIGFjdGl2ZWx5CitzdXBwb3J0aW5nIEdOVSBzb2Z0d2FyZSBvbiBvcGVuVk1TL0FscGhhLgorCitSYXRlcyBzdGFydCBhdCAxNjAuLSBETSAvIGhvdXIgZm9yIHN1cHBvcnQgYW5kCitpbnN0YWxsYXRpb24uIExhcmdlciBwcm9qZWN0cyBhcmUgbmVnb3RpYWJsZS4KKworVXBkYXRlZDogMTk5Ny0wNS0wOAorHworUXVpb3RpeCBDb3Jwb3JhdGlvbgorTWVubG8gUGFyaywgQ0EKKworQ29udGFjdDogSmVmZnJleSBTaWVnYWwKKyAgICAgICAgIGpic0BxdWlvdGl4LmNvbQorICAgICAgICAgNDE1IDMyNC0wNTM1CisKK0FyZWEgb2YgZm9jdXM6IEVtYmVkZGVkIHN5c3RlbXMtLXVzaW5nIEdOVSBzb2Z0d2FyZSB0byBkZXZlbG9wIGZvcgorZW1iZWRkZWQgc3lzdGVtcywgcG9ydGluZyBHTlUgc29mdHdhcmUgdG8gZW1iZWRkZWQgc3lzdGVtcywgZXh0ZW5kaW5nIEdOVQorc29mdHdhcmUgdG8gYmV0dGVyIHN1cHBvcnQgZW1iZWRkZWQgZW52aXJvbm1lbnRzLCBkZXZlbG9waW5nIG5ldyB0b29scyBhbmQKK3V0aWxpdGllcyBmb3IgZW1iZWRkZWQgZGV2ZWxvcG1lbnQgdXNpbmcgR05VIHNvZnR3YXJlLgorCitTZXJ2aWNlczogcG9ydGluZywgZGV2ZWxvcG1lbnQsIHN1cHBvcnQsIHByb2plY3QgbWFuYWdlbWVudCwgYWR2aXNvcnkKK2NvbnN1bHRpbmcuCisKK1JhdGVzOiAkMTI1LSQyNTAvaG91ciBvciBmaXhlZCBmZWVzIGRlcGVuZGluZyBvbiBzZXJ2aWNlcyBwcm92aWRlZC4KKworVXBkYXRlZDogIDE5OTctMDUtMTYKKx8KK1dvbGZnYW5nIFMuIFJ1cHByZWNodAkJPHdvbGZnYW5nQHdzcmNjLmNvbT4KKzQ3IEVzcGFyaXRvIEF2ZS4KK0ZyZW1vbnQsIENBIDk0NTM5LTM4MjcKKyg1MTApIDY1OS05NzU3CisKK0FueXRoaW5nLCAobGlzcCwgQywgY3VzdG9taXphdGlvbiwgcG9ydGluZywgaW5zdGFsbGluZykgSSBoYXZlCit3cml0dGVuIHRob3VzYW5kcyBvZiBsaW5lcyBvZiBHTlUgRW1hY3MgQyBhbmQgTGlzcCBjb2RlLiAgT3JpZ2luYWwKK2F1dGhvciBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgYWRkaXRpb25zIGluIEVtYWNzIDE5LgorCitSYXRlczoJJDk1L2hyLgorCitVcGRhdGVkOiAxOTk3LTA1LTA4CisfCitTdGFuaXNsYXYgU2hhbHVub3YKKworRW1haWw6IHNoYWx1bm92QG1jY21lLnJ1CitQaG9uZXM6IG9uIHJlcXVlc3QKKworSW5zdGFsbGluZywgY29uZmlndXJpbmcsIGhlbHBpbmcgbGVhcm4gYW55IGZyZWUgc29mdHdhcmUuICAKK0hhbmRob2xkaW5nLCB0cm91YmxlIHNob290aW5nLiAgTWFraW5nIGN1c3RvbSBjaGFuZ2VzIHRvIGZyZWUgCitzb2Z0d2FyZSB3cml0dGVuIGluIEMuICBUZWFjaGluZywgbGVjdHVyaW5nLCBjb25zdWx0aW5nLgorCitXYW50IHRvIGhhdmUgYSBmcmVlIE9TIHdpdGggZnJlZSBzb2Z0d2FyZSBzZXJ2aW5nIHlvdXIgbmVlZHMgYnV0IGRvIAorbm90IHdhbnQgdG8gc3BlbmQgdGltZSB5b3Vyc2VsZiBvciBub3QgdmVyeSBza2lsbGVkIHdpdGggdGhlIAorY29tcHV0ZXJzPyAgQ2Fubm90IGRlY2lkZSB3aGljaCBmcmVlIHNvZnR3YXJlIHN1aXRzIHlvdXIgbmVlZHMgCitiZXR0ZXI/ICBEcm9wIG1lIGEgbGluZS4KKworV2VsbCwgZXNzZW50aWFsbHksIGFueXRoaW5nIGVsc2Ugb24gc3BlY2lhbCByZXF1ZXN0LiAgOi0pCisKK1JhdGU6ICQzMC9ob3VyIGlmIHlvdSBhcmUgaW4gTW9zY293IGFuZCBJIGFtIHRoZXJlIHdoZW4geW91IHJlcXVlc3QgCitqb2IgZG9uZSwgJDUwIGlmIHRoZSBqb2IgbWF5IGJlIGRvbmUgcmVtb3RlbHkgKGxpa2UgY29uZmlndXJpbmcgdXNlciAKK2xldmVsIHByb2dyYW0pLCAkNjAvaG91ciArIHRyYXZlbCBleHBlbnNlcyBvdGhlcndpc2UuICAoTmVnb3RpYWJsZSwgCitzaWduaWZpY2FudCBkaXNjb3VudHMgbWF5IGFwcGx5LikKKworRW50ZXJlZCAxOTk3LTA3LTE3CisMCitWaW4gU2hlbHRvbgorRXRoZXJTb2Z0LCBJbmMKKzYxNy45MjQuNjQzNworPGFjc0BhY20ub3JnPgorCitJIGhhdmUgYmVlbiBhIHByb2Zlc3Npb25hbCBwcm9ncmFtbWVyIGZvciAyMCB5ZWFycywgd2l0aCBtb3N0IG9mIHRoYXQgdGltZQorc3BlbnQgZG9pbmcgVU5JWC9DL0MrKyBoYWNraW5nLiAgTXkgc3BlY2lhbHRpZXMgYXJlIChpbiBubyBwYXJ0aWN1bGFyCitvcmRlcik6IHN5c3RlbS9rZXJuZWwgaGFja2luZywgc3BlZWNoIHJlY29nbml0aW9uLCBwZXJsLCBvYmplY3Qtb3JpZW50ZWQKK2Rlc2lnbiBhbmQgYW5hbHlzaXMsIEZTRiBzb2Z0d2FyZSAoSSBoYXZlIGJ1aWx0IG5lYXJseSBldmVyeSBGU0YgcGFja2FnZSBvbgorc2V2ZXJhbCBkaWZmZXJlbnQgcGxhdGZvcm1zKSwgc21hbGwgbGFuZ3VhZ2UgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiwgYW5kCitIVE1ML3dlYiBwcm9ncmFtbWluZy4gIEN1cnJlbnRseSBJJ20gYSBtZW1iZXIgb2YgdGhlIFhFbWFjcyBiZXRhIHRlc3RpbmcKK3RlYW0gLSBJJ20gcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIHRoZSB2ZXJzaW9uIDE5LjE1IHBhdGNoZXMgYW5kIGhhdmUKK3dyaXR0ZW4gYSBmZXcgc21hbGwgcGFja2FnZXMvbGlzcCBoYWNrcy4gIE15IHJhdGVzIHZhcnkgZnJvbSAkNjAgLSAkMTAwIHBlcgoraG91ciwgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBwcm9qZWN0LgorCitVcGRhdGVkOiAxOTk3LTA1LTA5CisfCitTaWdudW0gU3VwcG9ydCBBQgkJPGluZm9Ac2lnbnVtLnNlPgorVGVrbmlrcmluZ2VuIDgKK1MtNTgzIDMwIExpbmtvcGluZywgU3dlZGVuCisrNDYgMTMgMjEgNDYgMDAgdm9pY2UKKys0NiAxMyAyMSA0NyAwMCBmYXgKK2h0dHA6Ly93d3cuc2lnbnVtLnNlLworCitTaWdudW0gU3VwcG9ydCBBQiBpcyBhIGNvbXBhbnkgZGVkaWNhdGVkIHRvIHN1cHBvcnRpbmcsIGRldmVsb3BpbmcgYW5kCitkaXN0cmlidXRpbmcgZnJlZSBzb2Z0d2FyZSBmb3IgbWFpbmx5IFVOSVggc3lzdGVtcy4gVGhlIHBlb3BsZSBiZWhpbmQKK1NpZ251bSBTdXBwb3J0IEFCIGhhdmUgbWFueSB5ZWFycyBvZiBnZW5lcmFsIFVOSVggYW5kIEludGVybmV0CitleHBlcmllbmNlLCBib3RoIGFzIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBhbmQgYXMgcHJvZ3JhbW1lcnMsIGFuZCBhbHNvCitleHRlbnNpdmUgZXhwZXJpZW5jZSBpbiBtYWludGFpbmluZyBhbmQgYWRtaW5pc3RyaW5nIHRoZSBHTlUgcHJvZ3JhbXMKK2FuZCBMaW51eC4KKworU2lnbnVtIFN1cHBvcnQgZGV2ZWxvcHMgYW5kIG1hcmtldHMgdGhlIGZyZWUgR1VJIGVxdWlwZWQgUmVhZHluZXQKK0ludGVybmV0IHNlcnZlciwgdGhlIGZyZWUgUEhUVFBEIGh0dHAgc2VydmVyIGFuZCB0aGUgZWFzeSB0byB1c2UgTGludXgKK2Jhc2VkIEZ1ZWdvIGZpcmV3YWxsLgorCitTZXJ2aWNlcyBvZmZlcmVkOgorCisgLSBTdXBwb3J0IG9uIEludGVybmV0IHNlcnZpY2Ugc29mdHdhcmUsIGVzcGVjaWFsbHkgdGhlIGZyZWUKKyAgIFJlYWR5bmV0IEludGVybmV0IHNlcnZlciB3ZSBoYXZlIGRldmVsb3BlZCBmb3IgTGludXguCisgLSBTdXBwb3J0IG9uIExpbnV4LgorIC0gQ3VzdG9taXphdGlvbiBvZiBMaW51eC4KKyAtIEluc3RhbGxhdGlvbiBhbmQgY3VzdG9taXppbmcgR05VIGFuZCBvdGhlciBmcmVlIHNvZnR3YXJlLiAgV2UgYXJlCisgICBtYWtpbmcgZnJlZSBzb2Z0d2FyZSBhcyBlYXN5IHRvIGluc3RhbGwgYW5kIHVzZSBhcyBzaHJpbmsgd3JhcHBlZAorICAgcHJvZ3JhbXMuCisgLSBXYXJyYW50eSBwcm90ZWN0aW9uLgorIC0gRmluZGluZywgUmVjb21tZW5kaW5nIGFuZCBJbnZlc3RpZ2F0aW9uIG9mIGZyZWUgc29mdHdhcmUgaW4gYW55CisgICBhcmVhIG9mIHRoZSBjdXN0b21lcnMgY2hvaXNlLgorIC0gUmVndWxhciBjb25zdWx0aW5nLgorCitSYXRlczogRm9yIHNvZnR3YXJlIGl0ZW1zLCByZXF1ZXN0IG91ciBwcmljZSBsaXN0LgorICAgICAgIEZvciBjb25zdWx0aW5nLCA3MDAtOTAwIFNFSy9ob3VyLgorCitVcGRhdGVkOiAxOTk3LTA1LTEyCisfCisgICBKb24gU29sb21vbiAgICAgICAgICAgICAgICAgICAgIDxqc29sQGdudS5haS5taXQuZWR1PgorICAgMjM1IE1haW4gU3QuLCBBcHQgM0MtMQorICAgRWFzdCBIYXJ0Zm9yZCwgQ29ubi4gMDYxMTgKKyAgICsxIDg2MCA4OTUtODI4OQorCisgICBNYWludGFpbnMgYWxsIEdOVSBzb2Z0d2FyZS4uLiBBdmFpbGFibGUgZm9yIEdlbmVyYWwgQ29uc3VsdGluZworICAgKGNvbnRhY3QgbWUgaWYgeW91IGFyZSBpbnRlcmVzdGVkKS4uLgorICAgU2VuZG1haWwgYSBzcGVjaWFsdHkuLi4gQ2FuIGFuc3dlciBxdWVzdGlvbnMgcGVydGFpbmluZyB0byB0aGUKKyAgIGluc3RhbGxhdGlvbiwgbWFpbnRhaW5lbmNlLCBidWcgcmVwb3J0aW5nIGFuZCBmaXhpbmcgZm9yCisgICBtb3N0IEdOVSBwcm9kdWN0cy4uLiBBZGhlcmluZyB0byB0aGUgRlNGL0dOVSBjb3B5bGVmdCBmb3IgYWxsCisgICB3b3JrLi4uIChJIG9ubHkgY2hhcmdlIGZvciB0aGUgdGltZSBpdCB0YWtlcyB0byBkbyB0aGUgYWJvdmUsCisgICB0aGUgc29mdHdhcmUgKGFuZCBtb3N0IEdOVSBjb3B5bGVmdCdkIHNvZnR3YXJlKSBpcyBmcmVlLgorICAgSSBjYW4gbWFrZSB0YXBlcyBmb3IgeW91IGlmIHlvdSBuZWVkIHRoYXQuLi4KKworVXBkYXRlZDogMTk5Ny0wNS0wOQorHworTmFtZTogICAgICAgICAgIEp1bGlhbiBTdGFjZXkgPGpoc0BmcmVlYnNkLm9yZz4KK0xvY2F0aW9uOglNdW5pY2ggR2VybWFueSwgJiBvbiB0aGUgSW50ZXJuZXQuCitRdWFsaWZpY2F0aW9uczogVW5pdmVyc2l0eSBEZWdyZWUsIEJTYyBIb25zIENvbXB1dGVyICYgQ3liZXJuZXRpY3MsIDE5ODAuCitQaG9uZTogICAgICAgICAgKzQ5Ljg5LjI2ODYxNiAgIEZheDogKzQ5Ljg5LjI2MDgxMiAgIERhdGE6ICs0OS44OS4yNjAyMzI3NgorUmVzdW1lOgkJaHR0cDovL3d3dy5mcmVlYnNkLm9yZy9+amhzLworVGltZSBab25lOiAgICAgICswMTowMAorUmF0ZTogICAgICAgICAgIDEzMC0xNzAgRE0vSG91ci4gIDIuNzg0NiBETSA9IDEgUG91bmQgPSBVUyAkMS42MzMyCitDb21tZXJjaWFsIEluZGVwZW5kZW50IEZyZWVsYW5jZSBDb25zdWx0YW5jeToKKyAgICAgICAgICAgICAgICBBbnkgVW5peCAoaW5jIEZyZWVCU0QsIExpbnV4IGV0YyksIEMsIFgtV2luZG93cywgRlNGIFRvb2xzLAorICAgICAgICAgICAgICAgIEludGVybmV0LCBTeXN0ZW1zIGVuZ2luZWVyaW5nLCBoYXJkd2FyZSBpbnRlcmZhY2luZywgCisgICAgICAgICAgICAgICAgcmVhbCB0aW1lLCBjb21tcyAmIHNjaWVudGlmaWMgaW5kdXN0cmlhbCwgZXZlbiBDeXJpbGxpYyAmCisgICAgICAgICAgICAgICAgQ2hpbmVzZSBpbnRlcmZhY2VzIGV0Yy4gIE5vIEVtYWNzLiBObyBDb2JvbC4KK0ZyZWUgU291cmNlczogICBGU0YsIEZyZWVCU0QgJiBOZXRCU0QgQ1ZTICYgY3VycmVudCAoZGFpbHkhKSAmIHJlbGVhc2VzLAorCQlYLVdpbmRvd3MsIFhGcmVlODYsIEZyZWUgZGlhbCBpbiBzb29uIChkZXRhaWxzIG9uIHdlYikuCisJCU1lZGlhIENvcHkgQ2hhcmdlIH5ETSAxMDAgUUlDIDEvNCIgNTI1TSwgMTUwTSwgJiA2ME07ICYgQ0FTLTYwTS4KK0ZyZWUgR0NDLTEuNDAJRm9yIFN5bW1ldHJpYyBDb21wdXRlciBTeXN0ZW1zIE1vZGVsIDM3NSAobmF0aXZlIGNjIGlzIGJyb2tlbikuCitMYW5ndWFnZXM6ICAgICAgRGV1dHNjaCAmIEZyYW5jYWlzCisgICAgICAgICAgICAgICAgTWFuIGthbm4gbWlyIGluIERldXRzY2ggc2NocmVpYmVuLCAob2RlciBtaWNoIGFucnVmZW4pLgorICAgICAgICAgICAgICAgIEplIGNvbXByZW5kIEZyYW5jYWlzLCBtYWlzIGplIG4nZWNyaXMgcGFzIGRlcyByZXNwb25zZXMgZW4gRnIuCishIE5PIEZSRUUgSEVMUCAhCisJLSBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGRvIG5vdCBwYXkgbWUuCisJLSBJIGVhcm4gbXkgbGl2aW5nIGZyb20gcHJvZmVzc2lvbmFsIGNvbnN1bHRhbmN5IGZlZXMuCisJLSBUaG91Z2ggSSB3cml0ZSBjb2RlIGZvciBwdWJsaWMgZG9tYWluIC4uLgorCS0gSSB3aWxsIE5vdCBzb2x2ZSBzdHJhbmdlcidzIGNvbXBsZXggcHJvYmxlbXMgZm9yIGZyZWUgIQorV0hFTiBDT05UQUNUSU5HIE1FLCAgRE8gVEhJUyA6LQorCSAgMSkgVGVsbCBtZSBJbW1lZGlhdGVseSwgIEFyZSBZb3U6CisJCUEpICBFeHBlY3RpbmcgdG8gcGF5IG15IGJpbGwgZm9yIHByb2Zlc3Npb25hbCBjb25zdWx0YW5jeS4KKwkJQikgIFNlZWtpbmcgYSBmZXcgbWludXRlcyBhZHZpY2UgZnJlZSBvZiBjaGFyZ2UuCisJICAyKSBHaXZlIG1lIHlvdXIgZW1haWwgYWRkZHJlc3MsIG9yIHRoYXQgb2YgYSBmcmllbmQuCisJICAgICBvciBWb2x1bnRlZXIgdG8gcGhvbmUgYmFjayB+IDUgZGF5cyBsYXRlciB0byBjb2xsZWN0IGZvbGxvdy11cAorCSAgICAgaW5mby4gIGZyb20gdGhlIG5ldC4gIChObyBJIHdpbGwgbm90IGluY3VyIGJpbGxzIHBob25pbmcgeW91IGJhY2spLgorCSAgMykgU3BlYWsgRW5nbGlzaCBpZiB5b3Ugd2FudCBmcmVlIGFkdmljZSAhICBJIHNwZWFrIEdlcm1hbiwgJgorCSAgICAgbGlzdGVuIGluIEZyZW5jaCwgYnV0IGlmIHlvdSdyZSBub3QgcGF5aW5nLCBtYWtlIHNvbWUgZWZmb3J0IHRvbyAhCisKK1VwZGF0ZWQ6IDE5OTctMDUtMTUKKx8KK1JpY2hhcmQgTS4gU3RhbGxtYW4JPHJtc0BnbnUuYWkubWl0LmVkdT4KKzU0NSBUZWNoIFNxLCBSbSA0MzAKK0NhbWJyaWRnZSwgTUEgMDIxMzkKKworRW1hY3M6IGFueXRoaW5nIHdoYXRldmVyCitJcyBhbnlvbmUgaW50ZXJlc3RlZCBpbiBjb3Vyc2VzIGluIHVzaW5nIG9yIGV4dGVuZGluZyBHTlUgRW1hY3M/CisKK09yaWdpbmFsIGludmVudG9yIG9mIEVtYWNzIGFuZCBtYWluIGF1dGhvciBvZiBHTlUgRW1hY3MgYW5kIEdDQy4KKworUmF0ZXM6ICQ2L21pbiBvciAkMjUwL2hyLgorCitVcGRhdGVkOiAxOTk3LTA1LTA5CisfCitLYXl2YW4gU3lsdmFuIDxrYXl2YW5Ac3lsdmFuLmNvbT4KK1N5bHZhbiBBc3NvY2lhdGVzCis4NzkgTGV3aXN0b24gRHJpdmUKK1NhbiBKb3NlLCBDQSA5NTEzNi0xNTE3CitQaG9uZTogKDQwOCkgOTc4LTE0MDcKK0ZheDogICAoNDA4KSA5NzgtMTQxNworCitJIHdpbGwgaGVscCB5b3UgcG9ydCwgaW5zdGFsbCBhbmQgY3VzdG9taXplIEdOVSBFbWFjcywgR0NDLCBHKyssCitiaXNvbiwgYW5kIG90aGVyIEdOVSB0b29scyBvbiBhbG1vc3QgYW55IGFyY2hpdGVjaHR1cmUgYW5kIG9wZXJhdGluZworc3lzdGVtLiBRdWVzdGlvbnMgYW5zd2VyZWQuIEdOVSBDIGFuZCBsaXNwIGhhY2tpbmcgYXZhaWxhYmxlLiBJIHdpbGwKK2Fsc28gZG8gb25nb2luZyBzdXBwb3J0IGFuZCBwZXJpb2RpYyB1cGdyYWRlcyBpZiB5b3UgZ2V0IG9uIG15IEdOVQorc29mdHdhcmUgc3Vic2NyaXB0aW9uIGxpc3QuCisKK1JhdGVzOiAkNzAtJDEwMC9ob3VyLCBkZXBlbmRpbmcgb24gdHlwZSBvZiB3b3JrLiBTdWJzdGFudGlhbCBkaXNjb3VudHMKK2ZvciBsb25nLXRlcm0gY29udHJhY3RzIGFuZCBhbHNvIGZvciBlZHVjYXRpb25hbCBvciBub24tcHJvZml0CitpbnN0aXR1dGlvbnMuCisKK0V4cGVyaWVuY2U6IE1hbnkgZGlmZmVyZW50IFVuaXggc3lzdGVtcyAoMi45QlNEIHRvIDQuNEJTRCwgWGVuaXgsIFNWUjMgYW5kCitTVlI0LCBMaW51eCwgRnJlZUJTRCkuIFN5c3RlbXMgcHJvZ3JhbW1pbmcgYW5kIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiBvbiBhbGwKK2JyYW5kcyBvZiBVbml4LiBLZXJuZWwgaGFja2luZyBleHBlcmllbmNlLiBMb3RzIG9mIHBvcnRpbmcgZXhwZXJpZW5jZS4KKworVXBkYXRlZDogMTk5Ny0wNS0wOQorHworVGVycmFUZWwgQUIgPGluZm9AbmV0Zy5zZT4KK1RhbmtlZz1FNW5nZW4gNAorUy00MTcgNTYgRz1GNnRlYm9yZywgU3dlZGVuCisrNDYgMzEgNTAgNzkgNDAgdm9pY2UKKys0NiAzMSA1MCA3OSAzOSBmYXgKK2h0dHA6Ly93d3cubmV0Zy5zZQorCitUZXJyYVRlbCBBQiBpcyBhIGNvbXBhbnkgdGhhdCBkb2VzIGNvbnN1bHRhbnQgam9icyBhbmQgaG9sZHMgY291cnNlcworaW4gdGhlIGZpZWxkcyBvZiBVbml4IHNvZnR3YXJlLCBUQ1AvSVAgbmV0d29ya2luZyBhbmQgSW50ZXJuZXQKK2FwcGxpY2F0aW9ucy4gVGhlIHBlb3BsZSBiZWhpbmQgVGVycmFUZWwgQUIgaGF2ZSBtYW55IHllYXJzCitvZiBnZW5lcmFsIFVOSVggZXhwZXJpZW5jZSwgYm90aCBhcyBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgYW5kIGFzCitwcm9ncmFtbWVycywgYW5kIGFsc28gZXh0ZW5zaXZlIGV4cGVyaWVuY2UgaW4gbWFpbnRhaW5pbmcgdGhlIEdOVQorcHJvZ3JhbXM7IGluIGFkbWluaXN0cmF0aW9uIGFzIHdlbGwgYXMgZmluZGluZyBhbmQgZml4aW5nIGJ1Z3MuCisKK1NlcnZpY2VzIG9mZmVyZWQ6CisKKy0gSW5zdGFsbGF0aW9uIGFuZCBjdXN0b21pemluZyBHTlUgYW5kIG90aGVyIGZyZWUgc29mdHdhcmUuICBXZSB3aWxsCisgIG1ha2UgZnJlZSBzb2Z0d2FyZSBhcyBlYXN5IHRvIGluc3RhbGwgYW5kIHVzZSBhcyBzaHJpbmsgd3JhcHBlZAorICBwcm9ncmFtcy4KKy0gU2VydmljZSBhbmQgc3VwcG9ydCBzdWJzY3JpcHRpb25zLgorLSBXYXJyYW50eSBwcm90ZWN0aW9uLgorLSBDdXN0b21pemF0aW9uIGFuZCBwb3J0aW5nLgorLSBTdWJzY3JpcHRpb25zIHRvIG5ldyB2ZXJzaW9ucyB3aGljaCB3ZSB3aWxsIHNlbmQgbW9udGhseSBvciB3aXRoCisgIGFueSBvdGhlciBpbnRlcnZhbC4KKy0gRmluZGluZywgcmVjb21tZW5kaW5nIGFuZCBpbnZlc3RpZ2F0aW5nIGZyZWUgc29mdHdhcmUgaW4gYW55CisgIGFyZWEgb2YgdGhlIGN1c3RvbWVycyBjaG9pY2UuCistIFJlZ3VsYXIgY29uc3VsdGluZy4KKy0gU3VwcG9ydCBvbiBJbnRlcm5ldCBzZXJ2aWNlIHNvZnR3YXJlLCBlc3BlY2lhbGx5IHRoZSBmcmVlCistIFN1cHBvcnQgb24gTGludXguCistIEZyZWV3YXJlIGJhc2VkIGNvdXJzZXMgaW4gVW5peCB1c2FnZSwgQywgQysrLCBvciBhbnkgR05VIHRvb2xzCisKK1JhdGVzOiBGb3IgY291cnNlcywgY29udGFjdCB1cyBmb3IgYSBxdW90ZSwKK0ZvciBjb25zdWx0aW5nLCAkNjAtMTIwL2hvdXIsIGRlcGVuZGluZyBvbiBjb250cmFjdCBsZW5ndGguCisKK0VudGVyZWQ6ICAxOTk3LTA1LTEyCisfCitKb25hdGhhbiBUaG9ybmJ1cmcgLyBCS0lTIENvbnN1bHRpbmcKK0UtbWFpbDogPGJraXNAaXNsYW5kLm5ldD4gICAgICAgKHByZWZlcnJlZCB3YXkgdG8gY29udGFjdCBtZSkKK1Bvc3RhbDogQm94IDgtNywgVGhldGlzIElzbGFuZCAgQkMgIFYwUiAyWTAsIENhbmFkYQorUGhvbmU6ICAoMjUwKSAyNDYtMzY0MCAgICAgICAgICAoc29tZXdoYXQgdW5yZWxpYWJsZSkKKworKiBCLlNjIChIb25vcnMgMXN0IENsYXNzKSBpbiBNYXRoK1BoeXNpY3MrQ1MsIE0uU2MgYW5kIFBoLkQgaW4gQXN0cm9ub215CisqIDIwKyB5ZWFycyBjb21wdXRpbmcgZXhwZXJpZW5jZSB1c2luZyBhIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgYW5kCisgIGhhcmR3YXJlIGVudmlyb25tZW50cworCisqIFZlcnkgZmx1ZW50IGluIEMgKDE1KyB5ZWFycyBleHBlcmllbmNlKQorKiBGbHVlbnQgaW4gQysrLCBQZXJsLCBzaCwgY3NoLCBBd2ssIEZvcnRyYW4sIFBML0ksIFBhc2NhbCwgQVBMLCBMaXNwLAorICAgICAgICAgICAgQmFzaWMsIE1hcGxlLCBSZWR1Y2UsIHZhcmlvdXMgbWFjaGluZSBsYW5ndWFnZXMKKyogVmVyeSBmbHVlbnQgKDEwKyB5ZWFycyBleHBlcmllbmNlKSBpbiBnZW5lcmFsIFVuaXggdG9vbHNldCBhbmQgcHJvZ3JhbW1pbmcKKyogR29vZCBrbm93bGVkZ2UgKDQrIHllYXJzIGV4cGVyaWVuY2UpIG9mIFVuaXggc3lzdGVtIGFkbWluaXN0cmF0aW9uCisgIChTdW5PUywgTGludXgsIFNHSSkKKyogU3Ryb25nIGJhY2tncm91bmQgKGJvdGggdGhlb3J5IGFuZCBwcmFjdGljYWwgZXhwZXJpZW5jZSkgaW4gVW5peC9uZXR3b3JrCisgIHNlY3VyaXR5LCBjb21wdXRlciBncmFwaGljcywgWCBhbmQgTW90aWYgR1VJIHByb2dyYW1taW5nCisqIEdvb2QgZ2VuZXJhbCBrbm93bGVkZ2Ugb2YgVW5peCAoa2VybmVsKSBpbnRlcm5hbHMgYW5kIGRldmljZSBkcml2ZXJzCisqIFZlcnkgZmx1ZW50IGluIExhVGVYLCBUZVgsIGFsc28gSFRNTCwgSFRUUCwgYW5kIENHSSBwcm9ncmFtbWluZworKiBNZW1iZXIgb2YgVXNlbml4IChwcm9mZXNzaW9uYWwgYW5kIHRlY2huaWNhbCBVbml4IGFzc29jaWF0aW9uKSBhbmQKKyAgU0FHRSAoc3lzdGVtIGFkbWluaXN0cmF0b3IncyBndWlsZCkKKworKiBWZXJ5IHN0cm9uZyBiYWNrZ3JvdW5kIChleHRlbnNpdmUgZXhwZXJpZW5jZSkgaW4gbnVtZXJpY2FsIGFuYWx5c2lzCisqIFN0cm9uZyBiYWNrZ3JvdW5kcyBpbiBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIG1pY3JvcHJvZ3JhbW1pbmcsCisgIHByb2dyYW1taW5nIGxhbmd1YWdlIGltcGxlbWVudGF0aW9uLCBjb21waWxlciB0aGVvcnksIGRhdGEgc3RydWN0dXJlcywKKyAgT1MgZGVzaWduIGFuZCBpbnRlcm5hbHMsIG5ldHdvcmtpbmcsIHN5bWJvbGljIG1hbmlwdWxhdGlvbiwgQUkKKworSSdtIGF2YWlsYWJsZSBmb3IgVW5peC1iYXNlZCBjb250cmFjdCBwcm9ncmFtbWluZywgc29mdHdhcmUgaW5zdGFsbGF0aW9uLAorYW5kL29yIGdlbmVyYWwgc3lzdGVtIGFkbWluaXN0cmF0aW9uLiAgTXkgcmVjZW50IHByb2plY3RzIGluY2x1ZGUgc2V2ZXJhbAorMjBLLTUwSyA1MEsgbGluZSBDL01hcGxlL0F3ayBzY2llbnRpZmljIGFwcGxpY2F0aW9ucywgc2V2ZXJhbCBzbWFsbCAoMUsgbGluZSkKK1BlcmwvQXdrIHRleHQgcHJvY2Vzc29ycyBhbmQgInN5c3RlbSBnbHVlIiBDR0kgcHJvZ3JhbXMsIGZpbmRpbmcgYW5kIGZpeGluZworYnVncyBpbiBhIChmcmVlKSA1MEsgbGluZSBncmFwaGljcyBwYWNrYWdlLCBhbmQgYSBwYXJ0aWFsbHkgY29tcGxldGVkIHByb2plY3QKK3RvIHBvcnQgKHJlYWxseSByZXdyaXRlKSB0aGUgR1VJIG9mIGEgNTBLIGxpbmUgQysrIE5ldHNjYXBlIHBsdWdpbiBmcm9tCitXaW4zMiB0byBVbml4L1gvTW90aWYuCisKK1VubGVzcyBvdGhlcndpc2UgcmVxdWlyZWQgYnkgYSBjbGllbnQsIGFsbCB0aGUgc29mdHdhcmUgSSB3cml0ZSBpcyBjb3ZlcmVkCitieSB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLiAgTXkgYmFzaWMgcmF0ZSBpcyBDYW4kNTAvaG91ciBmb3Igd29yayBJIGNhbiBkbworcmVtb3RlbHkgb3ZlciB0aGUgSW50ZXJuZXQsIG1vcmUgZm9yIG9uLXNpdGUgd29yaywgbGVzcyBmb3Igc2VsZWN0ZWQKK25vbi1wcm9maXQgb3JnYW5pemF0aW9ucy4KKworVXBkYXRlZDogIDE5OTctMDUtMTkKKx8KK0xlb25hcmQgSC4gVG93ZXIgSnIuCTx0b3dlckBwcmVwLmFpLm1pdC5lZHU+CiszNiBQb3J0ZXIgU3RyZWV0CitTb21lcnZpbGxlLCBNQQkwMjE0MworVVNBCisrMS02MTctNjIzLTc3MzkKKworV2lsbCB3b3JrIG9uIG1vc3QgR05VIHNvZnR3YXJlLgorSW5zdGFsbGF0aW9uLCBoYW5kaG9sZGluZywgdHJvdWJsZSBzaG9vdGluZywgZXh0ZW5zaW9ucywgdGVhY2hpbmcuCisKK1JhdGVzOiAkIDE1MC4wMC9ob3VyICsgdHJhdmVsIGV4cGVuc2VzLiAgTmVnb3RpYWJsZSBmb3Igbm9uLXByb2ZpdHMuCisKK0V4cGVyaWVuY2U6IEhhdmUgaGFja2VkIG9uIG92ZXIgYSBkb3plbiBhcmNoaXRlY3R1cmVzIGluIG1hbnkgbGFuZ3VhZ2VzLiAgSGF2ZQorc3lzdGVtIG1vdGhlcmVkIHRvbyBtYW55IHZhcmlldGllcyBvZiBVbml4ZXMuICBBc3Npc3RlZCBybXMgd2l0aCB0aGUgZnJvbnQgZW5kCitvZiBnY2MgYW5kIGl0cyBiYWNrLWVuZCBzdXBwb3J0LiAgUmVzdW1lIGF2YWlsYWJsZSBvbiByZXF1ZXN0LgorCitVcGRhdGVkOiAgMTk5Ny0wNS0yNAorHworbm9yaXMgbmV0d29yayBHbWJICitNYXR0aGlhcyBVcmxpY2hzCitTY2hsZWllcm1hY2hlcnN0cmFzc2UgMTIKKzkwNDkxIE51ZXJuYmVyZworR2VybWFueQorUGhvbmU6ICs0OSA5MTEgNTk4MTgtMAorRmF4OiArNDkgOTExIDU5ODE4LTExCis8aW5mb0Bub3Jpcy5kZT4KK2h0dHA6Ly9pbmZvLm5vcmlzLmRlLyAoR2VybWFuKQorCitFeHBlcnRpc2U6CisgIE9TIGludGVybmFscywgZXNwLiBMaW51eCBhbmQgQlNELCBlc3AuIGRldmljZSBkcml2ZXJzCisgIE5ldHdvcmsgcHJvdG9jb2wgLyBwcm9ncmFtIGRlc2lnbiBhbmQgY29kaW5nCisgIFV0aWxpdGllcyBjb2RpbmcgYW5kIG1haW50YWluYW5jZQorICBQcm9ncmFtIGRlYnVnZ2luZywgdGVzdGluZworICBVc2VyIGludGVyZmFjZSBkZXNpZ24gYW5kIHRlc3RpbmcKKyAgU2V2ZXJhbCBwcm9ncmFtbWluZyBhbmQgdG9vbCBsYW5ndWFnZXMKKworU2VydmljZXM6CisgIEluc3RhbGxhdGlvbiwgZGVidWdnaW5nLCBlbmhhbmNlbWVudCwgZGlzdHJpYnV0aW9uLAorICAgIGZvciBhbGwga2luZHMgb2YgZnJlZSBzb2Z0d2FyZS4KKyAgU3lzdGVtIGFkbWluaXN0cmF0aW9uIGZvciBtb3N0IFVuaXgtbGlrZSBzeXN0ZW1zLgorICBFbWFpbCwgRmF4LCBwaG9uZSwgYW5kIGluLXBlcnNvbiBjb25zdWx0aW5nIChhbmQvb3IgInF1ZXN0aW9uIGFuc3dlcmluZyIpLgorICBSZW1vdGUgc3VwcG9ydCBhbmQgc3lzdGVtIG1vbml0b3JpbmcgKG92ZXIgdGhlIEludGVybmV0KSwKKyAgVXBkYXRlIHNlcnZpY2UgKG5ldyB0b29scyB0ZXN0ZWQgYW5kIGluc3RhbGxlZCBhdXRvbWFnaWNhbGx5KQorICBJbnRlcm5ldCBhY2Nlc3MKKworUmF0ZXM6CisgIERNIDExMCAofiQ3MCkgcGVyIGhvdXIKKyAgU3VwcG9ydCBjb250cmFjdHMgc3RhcnQgYXQgRE0gMTcwL21vbnRoICsgRE0gMzAvc3VwcG9ydGVkIHN5c3RlbS4KKyAgV2lsbGluZyB0byB0cmF2ZWwgZm9yIHN1ZmZpY2llbnRseSBsYXJnZSBqb2JzLgorICBSYXRlcyBkb24ndCBpbmNsdWRlIHRheGVzLgorCitVcGRhdGVkOiAxOTk2LTA3LTA1CisfCitQYXVsIEMuQS4gdmFuIEdvb2wKKyAgICAgIDxQLnZhbkdvb2xATFIuVFVEZWxmdC5OTD4KKworQWRkcmVzczogRmFjdWx0eSBvZiBBZXJvc3BhY2UgRW5naW5lZXJpbmcKKyAgICAgICAgIERlbGZ0IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neQorICAgICAgICAgS2x1eXZlcndlZyAxLCAgMjYyOSBIUyBEZWxmdAorICAgICAgICAgVGhlIE5ldGhlcmxhbmRzCisKK1Bob25lOiArMzEtMTUtMjc4NTM3MAorRmF4ICA6ICszMS0xNS0yNzg2NDgwCisKK0kgd291bGQgbGlrZSB0byBwcm92aWRlIHVucGFpZCBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIHRoaW5nczoKKworLSBDCistIEMrKworLSBmMmMKKy0gY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBtb3N0IEdOVSBwYWNrYWdlcworCitVcGRhdGVkOiAgMTk5Ny0wNS0xMgorHworQXJuZSBXaWNobWFubgorCitFTWFpbDogPGF3QG1hdGgudW5pLXNiLmRlPgorVGVsZXBob25lIG9uIHJlcXVlc3QuCisKK0kgc3VwcG9ydCBHTlUgc29mdHdhcmUgb24gdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6CisKK0xpbnV4CitTdW5PUyA0LlggNS5YCitIUFVYIDkuWAorb3RoZXIgcGxhdGZvcm1zIG9uIHJlcXVlc3QuCisKK1VzdWFsIHJhdGVzOiAyMERNIHBlciBob3VyLiBGcmVlIHN1cHBvcnQgZm9yIHByaXZhdGUgcGVvcGxlIGFzIHRpbWUKK3Blcm1pdHMuCisKK1VwZGF0ZWQ6IDE5OTctMDUtMTYKKx8KK0pvZHkgV2luc3RvbgoreHBydCBDb21wdXRlciBDb25zdWx0aW5nLCBJbmMuCis3MzEgVm95YWdlcgorSG91c3RvbiwgVFgsIDc3MDU4CisoMjgxKSA0ODAtVU5JWCwgPGpvZHlAc2Njc2kuY29tPgorCitXZSBoYXZlIHN1cHBvcnRlZCwgaW5zdGFsbGVkLCBhbmQgdXNlZCB0aGUgZW50aXJlIEdOVSBzb2Z0d2FyZSBzdWl0ZQorZm9yIG92ZXIgOCB5ZWFycyBvbiBtYW55IGRpZmZlcmVudCBVbml4IHBsYXRmb3Jtcy4gIFdlIGhhdmUgd3JpdHRlbgorY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIGFuZCBwcm9jIGZpbGUgc3lzdGVtcyBmb3IgY3VzdG9tIGhhcmR3YXJlCitydW5uaW5nIG9uIExpbnV4LiAgSW4gYWRkaXRpb24sIHdlIGhhdmUgZGV2ZWxvcGVkIGEgY3VzdG9tIFgxMSBzZXJ2ZXIKK2FuZCBYIGlucHV0IGV4dGVuc2lvbnMuIE91ciBjb25zdWx0aW5nIHJhdGUgaXMgJDE1MC4wMCBVUyBkb2xsYXJzIHBlcgoraG91ciwgbmVnb3RpYWJsZSwgcGx1cyBhIHBlciBkaWVtIGZvciBvdXQgb2YgdG93biB3b3JrLgorCitVcGRhdGVkOiAgMTk5Ny0wNS0xMgorHworTGlnZSBaaG91CitDb25zdWx0YW50CitPcGVuIFRlY2hub2xvZ2llcyBDb3Jwb3JhdGlvbgorU3VuIExvdHVzIEJsZGcuIDJuZCBGbG9vcgorMi05LTEgQ2h1b3UsIE5ha2Fuby1rdSwgVG9reW8gMTY0IEphcGFuCitUZWw6ICs4MS0zLTMzNjUtMjkxMSBGYXg6ICs4MS0zLTMzNjUtMjkyMAorRS1tYWlsOiA8emhvdUBvcGVudGVjaC5jby5qcD4KKworTXkgcHJvZmlsZSBpcyBsaXN0ZWQgYXQ6ICBodHRwOi8vd3d3Lm9wZW50ZWNoLmNvLmpwL356aG91LworCitJIGhhdmUgdHdvIHllYXJzIG9mIGV4cGVyaWVuY2UgcG9ydGluZyBhbmQgc3VwcG9ydGluZyBHTlUgQyBDb21waWxlciBhbmQKK0dOVSBBc3NlbWJlciBhdCB0aGUgV2luZ251dCBwcm9qZWN0IG9mIFNSQSwgSW5jLiwgVG9reW8uCisKK0kgY2FuIHByb3ZpZGUgZnJlZSBjb25zdWx0YXRpb24gb24gdGhlc2UgcHJvZHVjdHMgaWYgdGhlIHByb2JsZW0gaXMgbm90Cit0aW1lLWNvbnN1bWluZy4KKworVXBkYXRlZDogIDE5OTYtMTItMDQKKx8KKworRm9yIGEgY3VycmVudCBjb3B5IG9mIHRoaXMgZGlyZWN0b3J5LCBvciB0byBoYXZlIHlvdXJzZWxmIGxpc3RlZCwgYXNrOgorCWdudUBwcmVwLmFpLm1pdC5lZHUKKworKiogUGxlYXNlIGtlZXAgdGhlIGVudHJpZXMgaW4gdGhpcyBmaWxlIGFscGhhYmV0aWNhbCAqKgpkaWZmIC0tZ2l0IGEvZ2NjL1RFU1RTLkZMVU5LIGIvZ2NjL1RFU1RTLkZMVU5LCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NjQxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvVEVTVFMuRkxVTksKQEAgLTAsMCArMSwzOSBAQAorVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgdGhpbmdzIHRoYXQgdGVzdCBzdWl0ZXMgaGF2ZQorc2FpZCB3ZXJlICJ3cm9uZyIgd2l0aCBHQ0MtLWJ1dCB0aGF0IEkgZG9uJ3QgYWdyZWUgd2l0aC4KKworRmlyc3QsIHRlc3Qgc3VpdGVzIHNvbWV0aW1lcyB0ZXN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGgKK3RyYWRpdGlvbmFsIEMuICBHQ0Mgd2l0aCAtdHJhZGl0aW9uYWwgaXMgbm90IGNvbXBsZXRlbHkKK2NvbXBhdGlibGUgd2l0aCB0cmFkaXRpb25hbCBDLCBhbmQgaW4gc29tZSB3YXlzIEkgdGhpbmsgaXQKK3Nob3VsZCBub3QgYmUuCisKKyogSyZSIEMgYWxsb3dlZCBceCB0byBhcHBlYXIgaW4gYSBzdHJpbmcgbGl0ZXJhbCAob3IgY2hhcmFjdGVyCitsaXRlcmFsPykgIGV2ZW4gaW4gY2FzZXMgd2hlcmUgaXQgaXMgKm5vdCogZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZgoraGV4IGRpZ2l0cy4gIEknbSBub3QgY29udmluY2VkIHRoaXMgaXMgZGVzaXJhYmxlLgorCisqIEsmUiBjb21waWxlcnMgYWxsb3cgY29tbWVudHMgdG8gY3Jvc3Mgb3ZlciBhbiBpbmNsdXNpb24gYm91bmRhcnkgKGkuZS4KK3N0YXJ0ZWQgaW4gYW4gaW5jbHVkZSBmaWxlIGFuZCBlbmRlZCBpbiB0aGUgaW5jbHVkaW5nIGZpbGUpLgorSSB0aGluayB0aGlzIHdvdWxkIGJlIHF1aXRlIHVnbHkgYW5kIGNhbid0IGltYWdpbmUgaXQgY291bGQKK2JlIG5lZWRlZC4KKworU29tZXRpbWVzIHRlc3RzIGRpc2FncmVlIHdpdGggR0NDJ3MgaW50ZXJwcmV0YXRpb24gb2YgdGhlIEFOU0kgc3RhbmRhcmQuCisKKyogT25lIHRlc3QgY2xhaW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDEuCisKKyAgICBlbnVtIHtBLCBCfSBmb287CisKKyAgICBmdW5jIChlbnVtIHtCLCBBfSBhcmcpCisgICAgeworICAgICAgcmV0dXJuIEI7CisgICAgfQorCitJIHRoaW5rIGl0IHNob3VsZCByZXR1cm4gMCwgYmVjYXVzZSB0aGUgZGVmaW5pdGlvbiBvZiBCIHRoYXQKK2FwcGxpZXMgaXMgdGhlIG9uZSBpbiBmdW5jLgorCisqIFNvbWUgdGVzdHMgcmVwb3J0IGZhaWx1cmUgd2hlbiB0aGUgY29tcGlsZXIgZG9lcyBub3QgcHJvZHVjZQorYW4gZXJyb3IgbWVzc2FnZSBmb3IgYSBjZXJ0YWluIHByb2dyYW0uCisKK0FOU0kgQyByZXF1aXJlcyBhICJkaWFnbm9zdGljIiBtZXNzYWdlIGZvciBjZXJ0YWluIGtpbmRzIG9mIGludmFsaWQKK3Byb2dyYW1zLCBidXQgYSB3YXJuaW5nIGNvdW50cyBhcyBhIGRpYWdub3N0aWMuICBJZiBHQ0MgcHJvZHVjZXMKK2Egd2FybmluZyBidXQgbm90IGFuIGVycm9yLCB0aGF0IGlzIGNvcnJlY3QgQU5TSSBzdXBwb3J0LgorV2hlbiB0ZXN0IHN1aXRlcyBjYWxsIHRoaXMgImZhaWx1cmUiLCB0aGUgdGVzdHMgYXJlIGJyb2tlbi4KKwpkaWZmIC0tZ2l0IGEvZ2NjL2JpLXBhcnNlci5jIGIvZ2NjL2JpLXBhcnNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNmYyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvYmktcGFyc2VyLmMKQEAgLTAsMCArMSw5ODAgQEAKKworLyogIEEgQmlzb24gcGFyc2VyLCBtYWRlIGZyb20gYmktcGFyc2VyLnkgd2l0aCBCaXNvbiB2ZXJzaW9uIEdOVSBCaXNvbiB2ZXJzaW9uIDEuMjQKKyAgKi8KKworI2RlZmluZSBZWUJJU09OIDEgIC8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisKKyNkZWZpbmUJREVGT1AJMjU4CisjZGVmaW5lCVNUUklORwkyNTkKKworI2xpbmUgMjIgImJpLXBhcnNlci55IgorCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImhjb25maWcuaCIKKyNpbmNsdWRlICJiaS1kZWZzLmgiCisKK2V4dGVybiBjaGFyIHl5dGV4dFtdOworZXh0ZXJuIGludCB5eWxlbmc7CisKKworLyogQ2hhaW4gb2YgYWxsIGRlZnMgYnVpbHQgYnkgdGhlIHBhcnNlci4gKi8KK3N0cnVjdCBkZWYgKmRlZnM7CitpbnQgbmRlZnM7CisKK3N0YXRpYyBzdHJ1Y3Qgbm9kZSAqbWFrZW5vZGUgKCk7CitzdGF0aWMgc3RydWN0IHZhcmlhdGlvbiAqbWFrZXZhciAoKTsKK3N0YXRpYyBzdHJ1Y3QgZGVmICptYWtlZGVmICgpOworCit2b2lkIHl5ZXJyb3IgKCk7CisKKworI2xpbmUgNDQgImJpLXBhcnNlci55IgordHlwZWRlZiB1bmlvbgoreworICBjaGFyICpzdHJpbmc7CisgIHN0cnVjdCBkZWYgKmRlZjsKKyAgc3RydWN0IHZhcmlhdGlvbiAqdmFyaWF0aW9uOworICBzdHJ1Y3Qgbm9kZSAqbm9kZTsKK30gWVlTVFlQRTsKKworI2lmbmRlZiBZWUxUWVBFCit0eXBlZGVmCisgIHN0cnVjdCB5eWx0eXBlCisgICAgeworICAgICAgaW50IHRpbWVzdGFtcDsKKyAgICAgIGludCBmaXJzdF9saW5lOworICAgICAgaW50IGZpcnN0X2NvbHVtbjsKKyAgICAgIGludCBsYXN0X2xpbmU7CisgICAgICBpbnQgbGFzdF9jb2x1bW47CisgICAgICBjaGFyICp0ZXh0OworICAgfQorICB5eWx0eXBlOworCisjZGVmaW5lIFlZTFRZUEUgeXlsdHlwZQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaWZuZGVmIF9fU1REQ19fCisjZGVmaW5lIGNvbnN0CisjZW5kaWYKKyNlbmRpZgorCisKKworI2RlZmluZQlZWUZJTkFMCQkzOQorI2RlZmluZQlZWUZMQUcJCS0zMjc2OAorI2RlZmluZQlZWU5UQkFTRQk4CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoeCkgKCh1bnNpZ25lZCkoeCkgPD0gMjU5ID8geXl0cmFuc2xhdGVbeF0gOiAxNykKKworc3RhdGljIGNvbnN0IGNoYXIgeXl0cmFuc2xhdGVbXSA9IHsgICAgIDAsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDUsCisgICAgIDcsICAgICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNAorfTsKKworI2lmIFlZREVCVUcgIT0gMAorc3RhdGljIGNvbnN0IHNob3J0IHl5cHJoc1tdID0geyAgICAgMCwKKyAgICAgMCwgICAgIDIsICAgICA0LCAgICAgNywgICAgMTgsICAgIDIwLCAgICAyNCwgICAgMjgsICAgIDM0LCAgICA0MiwKKyAgICA1MiwgICAgNTMsICAgIDU1LCAgICA1OSwgICAgNjAsICAgIDYyLCAgICA2NgorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cmhzW10gPSB7ICAgICA5LAorICAgICAwLCAgICAxMCwgICAgIDAsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDQsICAgICA2LAorICAgIDEzLCAgICAgNiwgICAgIDUsICAgIDExLCAgICAgNywgICAgIDcsICAgICAwLCAgICAxMiwgICAgIDAsICAgIDExLAorICAgICA2LCAgICAxMiwgICAgIDAsICAgICA1LCAgICAxMywgICAgIDcsICAgICAwLCAgICAgNSwgICAgMTMsICAgICA2LAorICAgIDE0LCAgICAgNywgICAgIDAsICAgICA1LCAgICAxMywgICAgIDYsICAgIDE0LCAgICAgNiwgICAgMTQsICAgICA3LAorICAgICAwLCAgICAgNSwgICAgMTMsICAgICA2LCAgICAxNCwgICAgIDYsICAgIDE0LCAgICAgNiwgICAgMTQsICAgICA3LAorICAgICAwLCAgICAgMCwgICAgIDQsICAgICAwLCAgICAgNSwgICAgMTUsICAgICA3LCAgICAgMCwgICAgIDAsICAgIDE2LAorICAgICAwLCAgICAxNiwgICAgIDYsICAgIDE1LCAgICAgMCwgICAgIDQsICAgICAwCit9OworCisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorc3RhdGljIGNvbnN0IHNob3J0IHl5cmxpbmVbXSA9IHsgMCwKKyAgICA2MCwgICAgNjUsICAgIDY3LCAgICA3MSwgICAgNzYsICAgIDc4LCAgICA4MiwgICAgODUsICAgIDg3LCAgICA4OSwKKyAgICA5MywgICAgOTUsICAgIDk4LCAgIDEwMSwgICAxMDUsICAgMTA4LCAgIDExMgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB5eXRuYW1lW10gPSB7ICAgIiQiLCJlcnJvciIsIiR1bmRlZmluZWQuIiwiREVGT1AiLAorIlNUUklORyIsIicoJyIsIicsJyIsIicpJyIsInRvcCIsImRlZnMiLCJkZWYiLCJ2YXJpYXRpb25zIiwidmFyaWF0aW9uIiwib3B0X3N0cmluZyIsCisibGlzdCIsIml0ZW1zIiwiaXRlbSIsIiIKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9IHsgICAgIDAsCisgICAgIDgsICAgICA5LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMSwgICAgMTIsICAgIDEyLCAgICAxMiwgICAgMTIsCisgICAgMTMsICAgIDEzLCAgICAxNCwgICAgMTQsICAgIDE1LCAgICAxNSwgICAgMTYKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIyW10gPSB7ICAgICAwLAorICAgICAxLCAgICAgMSwgICAgIDIsICAgIDEwLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LAorICAgICAwLCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDMsICAgICAxCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZhY3RbXSA9IHsgICAgIDAsCisgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAzLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDExLCAgICAgMCwgICAgIDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE0LCAgICAgNywgICAgIDYsCisgICAgIDQsICAgICAwLCAgICAgMCwgICAgMTcsICAgICAwLCAgICAxNSwgICAgMTQsICAgICA4LCAgICAxMywgICAgIDAsCisgICAgIDAsICAgIDE2LCAgICAxNCwgICAgIDksICAgICAwLCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmZ290b1tdID0geyAgICAzNywKKyAgICAgMiwgICAgIDMsICAgIDEzLCAgICAxNCwgICAgIDksICAgIDIzLCAgICAyNSwgICAgMjYKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXBhY3RbXSA9IHsgICAgIDIsCisgICAgIDYsICAgICAyLC0zMjc2OCwgICAgIDgsLTMyNzY4LCAgICAgNywgICAgMTAsLTMyNzY4LCAgICAgOSwgICAgMTEsCisgICAgMTIsICAgIDEwLCAgICAtNSwtMzI3NjgsICAgIC0zLCAgICAxMiwgICAgMTMsICAgIDE0LC0zMjc2OCwtMzI3NjgsCistMzI3NjgsICAgIDE3LCAgICAgMSwtMzI3NjgsICAgIDE1LCAgICAxOCwgICAgMTQsLTMyNzY4LC0zMjc2OCwgICAgMTcsCisgICAgIDMsLTMyNzY4LCAgICAxNCwtMzI3NjgsICAgIDE2LC0zMjc2OCwgICAgMjUsICAgIDI2LC0zMjc2OAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cGdvdG9bXSA9IHstMzI3NjgsCistMzI3NjgsICAgIDI3LC0zMjc2OCwgICAgMTksICAgIDIwLCAgIC0yNywgICAtMTIsLTMyNzY4Cit9OworCisKKyNkZWZpbmUJWVlMQVNUCQkzNQorCisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXRhYmxlW10gPSB7ICAgIDMxLAorICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAgMSwgICAgMzUsICAgIDI3LCAgICAyOCwgICAgMzMsICAgIDM0LAorICAgICA0LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAzMiwgICAgMjIsICAgIDIxLAorICAgIDI0LCAgICAyOSwgICAgMzYsICAgIDMwLCAgICAzOCwgICAgMzksICAgICAwLCAgICAgMCwgICAgIDUsICAgICAwLAorICAgICAwLCAgICAxNSwgICAgIDAsICAgICAwLCAgICAyMAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5Y2hlY2tbXSA9IHsgICAgMjcsCisgICAgIDYsICAgICA3LCAgICAgNiwgICAgIDcsICAgICAzLCAgICAzMywgICAgIDYsICAgICA3LCAgICAgNiwgICAgIDcsCisgICAgIDUsICAgICA0LCAgICAgNiwgICAgIDQsICAgICA2LCAgICAgNSwgICAgIDUsICAgIDMwLCAgICAgNSwgICAgIDcsCisgICAgIDQsICAgICA3LCAgICAgNywgICAgIDYsICAgICAwLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMiwgICAgLTEsCisgICAgLTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIDE2Cit9OworLyogLSotQy0qLSAgTm90ZSBzb21lIGNvbXBpbGVycyBjaG9rZSBvbiBjb21tZW50cyBvbiBgI2xpbmUnIGxpbmVzLiAgKi8KKyNsaW5lIDMgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24uc2ltcGxlIgorCisvKiBTa2VsZXRvbiBvdXRwdXQgcGFyc2VyIGZvciBiaXNvbiwKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKyAgIEJpc29uIG91dHB1dCBmaWxlLCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworCisjaWZuZGVmIGFsbG9jYQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZWxzZSAvKiBub3QgR05VIEMuICAqLworI2lmICghZGVmaW5lZCAoX19TVERDX18pICYmIGRlZmluZWQgKHNwYXJjKSkgfHwgZGVmaW5lZCAoX19zcGFyY19fKSB8fCBkZWZpbmVkIChfX3NwYXJjKSB8fCBkZWZpbmVkIChfX3NnaSkKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbHNlIC8qIG5vdCBzcGFyYyAqLworI2lmIGRlZmluZWQgKE1TRE9TKSAmJiAhZGVmaW5lZCAoX19UVVJCT0NfXykKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbHNlIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLworI2lmIGRlZmluZWQoX0FJWCkKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyAjcHJhZ21hIGFsbG9jYQorI2Vsc2UgLyogbm90IE1TRE9TLCBfX1RVUkJPQ19fLCBvciBfQUlYICovCisjaWZkZWYgX19ocHV4CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgewordm9pZCAqYWxsb2NhICh1bnNpZ25lZCBpbnQpOworfTsKKyNlbHNlIC8qIG5vdCBfX2NwbHVzcGx1cyAqLwordm9pZCAqYWxsb2NhICgpOworI2VuZGlmIC8qIG5vdCBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9faHB1eCAqLworI2VuZGlmIC8qIG5vdCBfQUlYICovCisjZW5kaWYgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjZW5kaWYgLyogbm90IHNwYXJjLiAgKi8KKyNlbmRpZiAvKiBub3QgR05VIEMuICAqLworI2VuZGlmIC8qIGFsbG9jYSBub3QgZGVmaW5lZC4gICovCisKKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyCisgIHdoZW4gdGhlICVzZW1hbnRpY19wYXJzZXIgZGVjbGFyYXRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci4KKyAgSXQgd2FzIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiBieSBzaW1wbGlmeWluZyB0aGUgaGFpcnkgcGFyc2VyCisgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisKKy8qIE5vdGU6IHRoZXJlIG11c3QgYmUgb25seSBvbmUgZG9sbGFyIHNpZ24gaW4gdGhpcyBmaWxlLgorICAgSXQgaXMgcmVwbGFjZWQgYnkgdGhlIGxpc3Qgb2YgYWN0aW9ucywgZWFjaCBhY3Rpb24KKyAgIGFzIG9uZSBjYXNlIG9mIHRoZSBzd2l0Y2guICAqLworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJLTIKKyNkZWZpbmUgWVlFT0YJCTAKKyNkZWZpbmUgWVlBQ0NFUFQJcmV0dXJuKDApCisjZGVmaW5lIFlZQUJPUlQgCXJldHVybigxKQorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJybGFiMQorLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuCisgICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseSB0byBlYXNlIHRoZQorICAgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKyNkZWZpbmUgWVlCQUNLVVAodG9rZW4sIHZhbHVlKSBcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsgeXljaGFyID0gKHRva2VuKSwgeXlsdmFsID0gKHZhbHVlKTsJCQlcCisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgeyB5eWVycm9yICgic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpOyBZWUVSUk9SOyB9CVwKK3doaWxlICgwKQorCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisjaWZuZGVmIFlZUFVSRQorI2RlZmluZSBZWUxFWAkJeXlsZXgoKQorI2VuZGlmCisKKyNpZmRlZiBZWVBVUkUKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgJnl5bGxvYykKKyNlbmRpZgorI2Vsc2UgLyogbm90IFlZTFNQX05FRURFRCAqLworI2lmZGVmIFlZTEVYX1BBUkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsKQorI2VuZGlmCisjZW5kaWYgLyogbm90IFlZTFNQX05FRURFRCAqLworI2VuZGlmCisKKy8qIElmIG5vbnJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlICovCisKKyNpZm5kZWYgWVlQVVJFCisKK2ludAl5eWNoYXI7CQkJLyogIHRoZSBsb29rYWhlYWQgc3ltYm9sCQkqLworWVlTVFlQRQl5eWx2YWw7CQkJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUJCSovCisJCQkJLyogIGxvb2thaGVhZCBzeW1ib2wJCQkqLworCisjaWZkZWYgWVlMU1BfTkVFREVECitZWUxUWVBFIHl5bGxvYzsJCQkvKiAgbG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZAkqLworCQkJCS8qICBzeW1ib2wJCQkJKi8KKyNlbmRpZgorCitpbnQgeXluZXJyczsJCQkvKiAgbnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIgICAgICAgKi8KKyNlbmRpZiAgLyogbm90IFlZUFVSRSAqLworCisjaWYgWVlERUJVRyAhPSAwCitpbnQgeXlkZWJ1ZzsJCQkvKiAgbm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZQkqLworLyogU2luY2UgdGhpcyBpcyB1bmluaXRpYWxpemVkLCBpdCBkb2VzIG5vdCBzdG9wIG11bHRpcGxlIHBhcnNlcnMKKyAgIGZyb20gY29leGlzdGluZy4gICovCisjZW5kaWYKKworLyogIFlZSU5JVERFUFRIIGluZGljYXRlcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MJKi8KKworI2lmbmRlZglZWUlOSVRERVBUSAorI2RlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiAgWVlNQVhERVBUSCBpcyB0aGUgbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8KKyAgICAoZWZmZWN0aXZlIG9ubHkgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuICAqLworCisjaWYgWVlNQVhERVBUSCA9PSAwCisjdW5kZWYgWVlNQVhERVBUSAorI2VuZGlmCisKKyNpZm5kZWYgWVlNQVhERVBUSAorI2RlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworLyogUHJldmVudCB3YXJuaW5nIGlmIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworI2lmZGVmIF9fR05VQ19fCitpbnQgeXlwYXJzZSAodm9pZCk7CisjZW5kaWYKKwwKKyNpZiBfX0dOVUNfXyA+IDEJCS8qIEdOVSBDIGFuZCBHTlUgQysrIGRlZmluZSB0aGlzLiAgKi8KKyNkZWZpbmUgX195eV9tZW1jcHkoRlJPTSxUTyxDT1VOVCkJX19idWlsdGluX21lbWNweShUTyxGUk9NLENPVU5UKQorI2Vsc2UJCQkJLyogbm90IEdOVSBDIG9yIEMrKyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChmcm9tLCB0bywgY291bnQpCisgICAgIGNoYXIgKmZyb207CisgICAgIGNoYXIgKnRvOworICAgICBpbnQgY291bnQ7Cit7CisgIHJlZ2lzdGVyIGNoYXIgKmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0gdG87CisgIHJlZ2lzdGVyIGludCBpID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisgICAgKnQrKyA9ICpmKys7Cit9CisKKyNlbHNlIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitzdGF0aWMgdm9pZAorX195eV9tZW1jcHkgKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBpbnQgY291bnQpCit7CisgIHJlZ2lzdGVyIGNoYXIgKmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0gdG87CisgIHJlZ2lzdGVyIGludCBpID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisgICAgKnQrKyA9ICpmKys7Cit9CisKKyNlbmRpZgorI2VuZGlmCisMCisjbGluZSAxOTIgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24uc2ltcGxlIgorCisvKiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZUEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gYmUgcGFzc2VkCisgICBpbnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhhdmUgdHlwZSB2b2lkICouCisgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgorICAgR3JhbW1hciBhY3Rpb25zIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGJ5IGNhc3RpbmcgaXQKKyAgIHRvIHRoZSBwcm9wZXIgcG9pbnRlciB0eXBlLiAgKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZWxzZQorI2RlZmluZSBZWVBBUlNFX1BBUkFNCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTAorI2VuZGlmCisKK2ludAoreXlwYXJzZShZWVBBUlNFX1BBUkFNKQorICAgICBZWVBBUlNFX1BBUkFNX0RFQ0wKK3sKKyAgcmVnaXN0ZXIgaW50IHl5c3RhdGU7CisgIHJlZ2lzdGVyIGludCB5eW47CisgIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisgIGludCB5eWVycnN0YXR1czsJLyogIG51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQgKi8KKyAgaW50IHl5Y2hhcjEgPSAwOwkJLyogIGxvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyICovCisKKyAgc2hvcnQJeXlzc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgc2VtYW50aWMgdmFsdWUgc3RhY2sJCSovCisKKyAgc2hvcnQgKnl5c3MgPSB5eXNzYTsJCS8qICByZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMgKi8KKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwkvKiAgdG8gYWxsb3cgeXlvdmVyZmxvdyB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlICovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgbG9jYXRpb24gc3RhY2sJCQkqLworICBZWUxUWVBFICp5eWxzID0geXlsc2E7CisgIFlZTFRZUEUgKnl5bHNwOworCisjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKyNlbHNlCisjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKKyNlbmRpZgorCisgIGludCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisjaWZkZWYgWVlQVVJFCisgIGludCB5eWNoYXI7CisgIFlZU1RZUEUgeXlsdmFsOworICBpbnQgeXluZXJyczsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxsb2M7CisjZW5kaWYKKyNlbmRpZgorCisgIFlZU1RZUEUgeXl2YWw7CQkvKiAgdGhlIHZhcmlhYmxlIHVzZWQgdG8gcmV0dXJuCQkqLworCQkJCS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0aGUgYWN0aW9uCSovCisJCQkJLyogIHJvdXRpbmVzCQkJCSovCisKKyAgaW50IHl5bGVuOworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpOworI2VuZGlmCisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9IHl5c3MgLSAxOworICB5eXZzcCA9IHl5dnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwID0geXlsczsKKyNlbmRpZgorCisvKiBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiAgeXlzdGF0ZSAgLiAgKi8KKy8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworeXluZXdzdGF0ZToKKworICAqKyt5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisgICAgeworICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrICovCisgICAgICAvKiBVc2UgY29waWVzIG9mIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8gbWVtb3J5LiAqLworICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOworICAgICAgc2hvcnQgKnl5c3MxID0geXlzczsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKyNlbmRpZgorCisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIGludCBzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mCisJIHRoZSBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICAvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisJIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworICAgICAgeXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICZ5eWxzMSwgc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICZ5eXN0YWNrc2l6ZSk7CisjZWxzZQorICAgICAgeXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICZ5eXN0YWNrc2l6ZSk7CisjZW5kaWYKKworICAgICAgeXlzcyA9IHl5c3MxOyB5eXZzID0geXl2czE7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzID0geXlsczE7CisjZW5kaWYKKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisJeworCSAgeXllcnJvcigicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisJICByZXR1cm4gMjsKKwl9CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKHl5c3RhY2tzaXplID4gWVlNQVhERVBUSCkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisgICAgICB5eXNzID0gKHNob3J0ICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlzczEsIChjaGFyICopeXlzcywgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAgICB5eXZzID0gKFlZU1RZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eXZzMSwgKGNoYXIgKil5eXZzLCBzaXplICogc2l6ZW9mICgqeXl2c3ApKTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSAoWVlMVFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5bHMxLCAoY2hhciAqKXl5bHMsIHNpemUgKiBzaXplb2YgKCp5eWxzcCkpOworI2VuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5c3MgKyBzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHNpemUgLSAxOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlsc3AgPSB5eWxzICsgc2l6ZSAtIDE7CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlZFxuIiwgeXlzdGFja3NpemUpOworI2VuZGlmCisKKyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorCVlZQUJPUlQ7CisgICAgfQorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpOworI2VuZGlmCisKKyAgZ290byB5eWJhY2t1cDsKKyB5eWJhY2t1cDoKKworLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gICovCisvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKy8qIHl5cmVzdW1lOiAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiB5eWNoYXIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0YKKyAgICAgb3IgYSB2YWxpZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpOworI2VuZGlmCisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgLyogQ29udmVydCB0b2tlbiB0byBpbnRlcm5hbCBmb3JtIChpbiB5eWNoYXIxKSBmb3IgaW5kZXhpbmcgdGFibGVzIHdpdGggKi8KKworICBpZiAoeXljaGFyIDw9IDApCQkvKiBUaGlzIG1lYW5zIGVuZCBvZiBpbnB1dC4gKi8KKyAgICB7CisgICAgICB5eWNoYXIxID0gMDsKKyAgICAgIHl5Y2hhciA9IFlZRU9GOwkJLyogRG9uJ3QgY2FsbCBZWUxFWCBhbnkgbW9yZSAqLworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSh5eWNoYXIpOworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJOZXh0IHRva2VuIGlzICVkICglcyIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisJICAvKiBHaXZlIHRoZSBpbmRpdmlkdWFsIHBhcnNlciBhIHdheSB0byBwcmludCB0aGUgcHJlY2lzZSBtZWFuaW5nCisJICAgICBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisjaWZkZWYgWVlQUklOVAorCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisjZW5kaWYKKwkgIGZwcmludGYgKHN0ZGVyciwgIilcbiIpOworCX0KKyNlbmRpZgorICAgIH0KKworICB5eW4gKz0geXljaGFyMTsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIxKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKworICAvKiB5eW4gaXMgd2hhdCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRoaXMgc3RhdGUuCisgICAgIE5lZ2F0aXZlID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4KKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisgICAgICAgTmV3IHN0YXRlIGlzIGZpbmFsIHN0YXRlID0+IGRvbid0IGJvdGhlciB0byBzaGlmdCwKKyAgICAgICBqdXN0IHJldHVybiBzdWNjZXNzLgorICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworI2VuZGlmCisKKyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmZGVmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIC8qIGNvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3Igc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKSB5eWVycnN0YXR1cy0tOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworLyogRG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gICovCit5eWRlZmF1bHQ6CisKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisvKiBEbyBhIHJlZHVjdGlvbi4gIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCit5eXJlZHVjZToKKyAgeXlsZW4gPSB5eXIyW3l5bl07CisgIGlmICh5eWxlbiA+IDApCisgICAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsgLyogaW1wbGVtZW50IGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbiAqLworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIGludCBpOworCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisJICAgICAgIHl5biwgeXlybGluZVt5eW5dKTsKKworICAgICAgLyogUHJpbnQgdGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCisgICAgICBmb3IgKGkgPSB5eXByaHNbeXluXTsgeXlyaHNbaV0gPiAwOyBpKyspCisJZnByaW50ZiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJoc1tpXV0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiIC0+ICVzXG4iLCB5eXRuYW1lW3l5cjFbeXluXV0pOworICAgIH0KKyNlbmRpZgorCisKKyAgc3dpdGNoICh5eW4pIHsKKworY2FzZSAxOgorI2xpbmUgNjIgImJpLXBhcnNlci55IgoreyBkZWZzID0geXl2c3BbMF0uZGVmOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOgorI2xpbmUgNjggImJpLXBhcnNlci55IgoreyB5eXZzcFswXS5kZWYtPm5leHQgPSB5eXZzcFstMV0uZGVmOyB5eXZhbC5kZWYgPSB5eXZzcFswXS5kZWY7IDsKKyAgICBicmVhazt9CitjYXNlIDQ6CisjbGluZSA3MyAiYmktcGFyc2VyLnkiCit7IHl5dmFsLmRlZiA9IG1ha2VkZWYgKHl5dnNwWy03XS5zdHJpbmcsIHl5dnNwWy01XS5zdHJpbmcsIHl5dnNwWy0yXS52YXJpYXRpb24pOyA7CisgICAgYnJlYWs7fQorY2FzZSA2OgorI2xpbmUgNzkgImJpLXBhcnNlci55IgoreyB5eXZzcFswXS52YXJpYXRpb24tPm5leHQgPSB5eXZzcFstMl0udmFyaWF0aW9uOyB5eXZhbC52YXJpYXRpb24gPSB5eXZzcFswXS52YXJpYXRpb247IDsKKyAgICBicmVhazt9CitjYXNlIDc6CisjbGluZSA4NCAiYmktcGFyc2VyLnkiCit7IHl5dmFsLnZhcmlhdGlvbiA9IG1ha2V2YXIgKHl5dnNwWy0xXS5zdHJpbmcsIChzdHJ1Y3Qgbm9kZSAqKSBOVUxMLCAoc3RydWN0IG5vZGUgKikgTlVMTCwgKHN0cnVjdCBub2RlICopIE5VTEwpOyA7CisgICAgYnJlYWs7fQorY2FzZSA4OgorI2xpbmUgODYgImJpLXBhcnNlci55IgoreyB5eXZhbC52YXJpYXRpb24gPSBtYWtldmFyICh5eXZzcFstM10uc3RyaW5nLCB5eXZzcFstMV0ubm9kZSwgKHN0cnVjdCBub2RlICopIE5VTEwsIChzdHJ1Y3Qgbm9kZSAqKSBOVUxMKTsgOworICAgIGJyZWFrO30KK2Nhc2UgOToKKyNsaW5lIDg4ICJiaS1wYXJzZXIueSIKK3sgeXl2YWwudmFyaWF0aW9uID0gbWFrZXZhciAoeXl2c3BbLTVdLnN0cmluZywgeXl2c3BbLTNdLm5vZGUsIHl5dnNwWy0xXS5ub2RlLCAoc3RydWN0IG5vZGUgKikgTlVMTCk7IDsKKyAgICBicmVhazt9CitjYXNlIDEwOgorI2xpbmUgOTAgImJpLXBhcnNlci55IgoreyB5eXZhbC52YXJpYXRpb24gPSBtYWtldmFyICh5eXZzcFstN10uc3RyaW5nLCB5eXZzcFstNV0ubm9kZSwgeXl2c3BbLTNdLm5vZGUsIHl5dnNwWy0xXS5ub2RlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTE6CisjbGluZSA5NCAiYmktcGFyc2VyLnkiCit7IHl5dmFsLnN0cmluZyA9ICIiOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMjoKKyNsaW5lIDk1ICJiaS1wYXJzZXIueSIKK3sgeXl2YWwuc3RyaW5nID0geXl2c3BbMF0uc3RyaW5nOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzoKKyNsaW5lIDEwMCAiYmktcGFyc2VyLnkiCit7IHl5dmFsLm5vZGUgPSB5eXZzcFstMV0ubm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQ6CisjbGluZSAxMDIgImJpLXBhcnNlci55IgoreyB5eXZhbC5ub2RlID0gTlVMTDsgOworICAgIGJyZWFrO30KK2Nhc2UgMTY6CisjbGluZSAxMDkgImJpLXBhcnNlci55IgoreyB5eXZzcFstMl0ubm9kZS0+bmV4dCA9IHl5dnNwWzBdLm5vZGU7IHl5dmFsLm5vZGUgPSB5eXZzcFstMl0ubm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc6CisjbGluZSAxMTQgImJpLXBhcnNlci55IgoreyB5eXZhbC5ub2RlID0gbWFrZW5vZGUgKHl5dnNwWzBdLnN0cmluZyk7IDsKKyAgICBicmVhazt9Cit9CisgICAvKiB0aGUgYWN0aW9uIGZpbGUgZ2V0cyBjb3BpZWQgaW4gaW4gcGxhY2Ugb2YgdGhpcyBkb2xsYXJzaWduICovCisjbGluZSA0ODcgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24uc2ltcGxlIgorDAorICB5eXZzcCAtPSB5eWxlbjsKKyAgeXlzc3AgLT0geXlsZW47CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwIC09IHl5bGVuOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7CisKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3ArKzsKKyAgaWYgKHl5bGVuID09IDApCisgICAgeworICAgICAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eWxsb2MuZmlyc3RfbGluZTsKKyAgICAgIHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5eWxsb2MuZmlyc3RfY29sdW1uOworICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwLTEpLT5sYXN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT50ZXh0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2xpbmU7CisgICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfY29sdW1uOworICAgIH0KKyNlbmRpZgorCisgIC8qIE5vdyAic2hpZnQiIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4KKyAgICAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUgdGhhdCBnb2VzIHRvLAorICAgICBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8KKyAgICAgYW5kIHRoZSBydWxlIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBpZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWVycmxhYjogICAvKiBoZXJlIG9uIGRldGVjdGluZyBlcnJvciAqLworCisgIGlmICghIHl5ZXJyc3RhdHVzKQorICAgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAgICBpZiAoeXluID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKwl7CisJICBpbnQgc2l6ZSA9IDA7CisJICBjaGFyICptc2c7CisJICBpbnQgeCwgY291bnQ7CisKKwkgIGNvdW50ID0gMDsKKwkgIC8qIFN0YXJ0IFggYXQgLXl5biBpZiBuZWMgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbiB5eWNoZWNrLiAgKi8KKwkgIGZvciAoeCA9ICh5eW4gPCAwID8gLXl5biA6IDApOworCSAgICAgICB4IDwgKHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCSAgICAgIHNpemUgKz0gc3RybGVuKHl5dG5hbWVbeF0pICsgMTUsIGNvdW50Kys7CisJICBtc2cgPSAoY2hhciAqKSBtYWxsb2Moc2l6ZSArIDE1KTsKKwkgIGlmIChtc2cgIT0gMCkKKwkgICAgeworCSAgICAgIHN0cmNweShtc2csICJwYXJzZSBlcnJvciIpOworCisJICAgICAgaWYgKGNvdW50IDwgNSkKKwkJeworCQkgIGNvdW50ID0gMDsKKwkJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKKwkJICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCisJCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCQkgICAgICB7CisJCQlzdHJjYXQobXNnLCBjb3VudCA9PSAwID8gIiwgZXhwZWN0aW5nIGAiIDogIiBvciBgIik7CisJCQlzdHJjYXQobXNnLCB5eXRuYW1lW3hdKTsKKwkJCXN0cmNhdChtc2csICInIik7CisJCQljb3VudCsrOworCQkgICAgICB9CisJCX0KKwkgICAgICB5eWVycm9yKG1zZyk7CisJICAgICAgZnJlZShtc2cpOworCSAgICB9CisJICBlbHNlCisJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGNlZWRlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwl5eWVycm9yKCJwYXJzZSBlcnJvciIpOworICAgIH0KKworICBnb3RvIHl5ZXJybGFiMTsKK3l5ZXJybGFiMTogICAvKiBoZXJlIG9uIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlvbiAqLworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIGlmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4gZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJWVlBQk9SVDsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworI2VuZGlmCisKKyAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuCisgICAgIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvciB0b2tlbi4gICovCisKKyAgeXllcnJzdGF0dXMgPSAzOwkJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzICovCisKKyAgZ290byB5eWVycmhhbmRsZTsKKworeXllcnJkZWZhdWx0OiAgLyogY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgZXJyb3IgdG9rZW4uICovCisKKyNpZiAwCisgIC8qIFRoaXMgaXMgd3Jvbmc7IG9ubHkgc3RhdGVzIHRoYXQgZXhwbGljaXRseSB3YW50IGVycm9yIHRva2VucworICAgICBzaG91bGQgc2hpZnQgdGhlbS4gICovCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOyAgLyogSWYgaXRzIGRlZmF1bHQgaXMgdG8gYWNjZXB0IGFueSB0b2tlbiwgb2suICBPdGhlcndpc2UgcG9wIGl0LiovCisgIGlmICh5eW4pIGdvdG8geXlkZWZhdWx0OworI2VuZGlmCisKK3l5ZXJycG9wOiAgIC8qIHBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuICovCisKKyAgaWYgKHl5c3NwID09IHl5c3MpIFlZQUJPUlQ7CisgIHl5dnNwLS07CisgIHl5c3RhdGUgPSAqLS15eXNzcDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AtLTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjogc3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkKKwlmcHJpbnRmIChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKK3l5ZXJyaGFuZGxlOgorCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluICs9IFlZVEVSUk9SOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IFlZVEVSUk9SKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycnBvcDsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycnBvcDsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIik7CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7Cit9CisjbGluZSAxMTcgImJpLXBhcnNlci55IgorCisKK3N0YXRpYyBzdHJ1Y3Qgbm9kZSAqCittYWtlbm9kZSAocykKKyAgICAgY2hhciAqczsKK3sKKyAgc3RydWN0IG5vZGUgKm47CisKKyAgbiA9IChzdHJ1Y3Qgbm9kZSAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IG5vZGUpKTsKKyAgbi0+dGV4dCA9IHM7CisgIG4tPm5leHQgPSBOVUxMOworICByZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCB2YXJpYXRpb24gKgorbWFrZXZhciAobmFtZSwgaW5wdXRzLCBvdXRwdXRzLCBsaXRlcmFscykKKyAgICAgY2hhciAqbmFtZTsKKyAgICAgc3RydWN0IG5vZGUgKmlucHV0cywgKm91dHB1dHMsICpsaXRlcmFsczsKK3sKKyAgc3RydWN0IHZhcmlhdGlvbiAqdjsKKworICB2ID0gKHN0cnVjdCB2YXJpYXRpb24gKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCB2YXJpYXRpb24pKTsKKyAgdi0+bmFtZSA9IG5hbWU7CisgIHYtPmNvZGUgPSBuZGVmcysrOworICB2LT5pbnB1dHMgPSBpbnB1dHM7CisgIHYtPm91dHB1dHMgPSBvdXRwdXRzOworICB2LT5saXRlcmFscyA9IGxpdGVyYWxzOworICB2LT5uZXh0ID0gTlVMTDsKKyAgcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVmICoKK21ha2VkZWYgKG5hbWUsIHRlbXBsYXRlLCB2YXJzKQorICAgICBjaGFyICpuYW1lLCAqdGVtcGxhdGU7CisgICAgIHN0cnVjdCB2YXJpYXRpb24gKnZhcnM7Cit7CisgIHN0cnVjdCBkZWYgKmQ7CisKKyAgZCA9IChzdHJ1Y3QgZGVmICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZGVmKSk7CisgIGQtPmJhc2VuYW1lID0gbmFtZTsKKyAgZC0+dGVtcGxhdGUgPSB0ZW1wbGF0ZTsKKyAgZC0+dmFyaWF0aW9ucyA9IHZhcnM7CisgIGQtPm5leHQgPSBOVUxMOworICByZXR1cm4gZDsKK30KKwordm9pZAoreXllcnJvciAocykKKyAgICAgY2hhciAqczsKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAic3ludGF4IGVycm9yIGluIGlucHV0XG4iKTsKKyAgZXhpdCAoRkFUQUxfRVhJVF9DT0RFKTsKK30KZGlmZiAtLWdpdCBhL2djYy9iaS1wYXJzZXIuaCBiL2djYy9iaS1wYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmViODYyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2JpLXBhcnNlci5oCkBAIC0wLDAgKzEsMTIgQEAKK3R5cGVkZWYgdW5pb24KK3sKKyAgY2hhciAqc3RyaW5nOworICBzdHJ1Y3QgZGVmICpkZWY7CisgIHN0cnVjdCB2YXJpYXRpb24gKnZhcmlhdGlvbjsKKyAgc3RydWN0IG5vZGUgKm5vZGU7Cit9IFlZU1RZUEU7CisjZGVmaW5lCURFRk9QCTI1OAorI2RlZmluZQlTVFJJTkcJMjU5CisKKworZXh0ZXJuIFlZU1RZUEUgeXlsdmFsOwpkaWZmIC0tZ2l0IGEvZ2NjL2MtZGVjbC5jIGIvZ2NjL2MtZGVjbC5jCmluZGV4IDEyNWYwZjQuLmI1NTZkMDggMTAwNjQ0Ci0tLSBhL2djYy9jLWRlY2wuYworKysgYi9nY2MvYy1kZWNsLmMKQEAgLTQzMzksNyArNDMzOSw3IEBACiAKICAgLyogTG9uZyBkb3VibGUgaXMgYSBzcGVjaWFsIGNvbWJpbmF0aW9uLiAgKi8KIAotICBpZiAoKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfTE9ORykKKyAgaWYgKChzcGVjYml0cyAmIDEgPDwgKGludCkgUklEX0xPTkcpICYmICEgbG9uZ2xvbmcKICAgICAgICYmIFRZUEVfTUFJTl9WQVJJQU5UICh0eXBlKSA9PSBkb3VibGVfdHlwZV9ub2RlKQogICAgIHsKICAgICAgIHNwZWNiaXRzICY9IH4gKDEgPDwgKGludCkgUklEX0xPTkcpOwpAQCAtNDM1MywxMSArNDM1Myw5IEBACiAgICAgewogICAgICAgaW50IG9rID0gMDsKIAotICAgICAgaWYgKFRSRUVfQ09ERSAodHlwZSkgIT0gSU5URUdFUl9UWVBFKQotCWVycm9yICgibG9uZywgc2hvcnQsIHNpZ25lZCBvciB1bnNpZ25lZCBpbnZhbGlkIGZvciBgJXMnIiwgbmFtZSk7Ci0gICAgICBlbHNlIGlmICgoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9MT05HKQotCSAgICAgICAmJiAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9TSE9SVCkpCi0JZXJyb3IgKCJsb25nIGFuZCBzaG9ydCBzcGVjaWZpZWQgdG9nZXRoZXIgZm9yIGAlcyciLCBuYW1lKTsKKyAgICAgIGlmICgoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9MT05HKQorCSAgJiYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfU0hPUlQpKQorCWVycm9yICgiYm90aCBsb25nIGFuZCBzaG9ydCBzcGVjaWZpZWQgZm9yIGAlcyciLCBuYW1lKTsKICAgICAgIGVsc2UgaWYgKCgoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9MT05HKQogCQl8fCAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9TSE9SVCkpCiAJICAgICAgICYmIGV4cGxpY2l0X2NoYXIpCkBAIC00MzY1LDEwICs0MzYzLDIxIEBACiAgICAgICBlbHNlIGlmICgoKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfTE9ORykKIAkJfHwgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfU0hPUlQpKQogCSAgICAgICAmJiBUUkVFX0NPREUgKHR5cGUpID09IFJFQUxfVFlQRSkKLQllcnJvciAoImxvbmcgb3Igc2hvcnQgc3BlY2lmaWVkIHdpdGggZmxvYXRpbmcgdHlwZSBmb3IgYCVzJyIsIG5hbWUpOworCXsKKwkgIHN0YXRpYyBpbnQgYWxyZWFkeSA9IDA7CisKKwkgIGVycm9yICgibG9uZyBvciBzaG9ydCBzcGVjaWZpZWQgd2l0aCBmbG9hdGluZyB0eXBlIGZvciBgJXMnIiwgbmFtZSk7CisJICBpZiAoISBhbHJlYWR5ICYmICEgcGVkYW50aWMpCisJICAgIHsKKwkgICAgICBlcnJvciAoInRoZSBvbmx5IHZhbGlkIGNvbWJpbmF0aW9uIGlzIGBsb25nIGRvdWJsZSciKTsKKwkgICAgICBhbHJlYWR5ID0gMTsKKwkgICAgfQorCX0KICAgICAgIGVsc2UgaWYgKChzcGVjYml0cyAmIDEgPDwgKGludCkgUklEX1NJR05FRCkKIAkgICAgICAgJiYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfVU5TSUdORUQpKQotCWVycm9yICgic2lnbmVkIGFuZCB1bnNpZ25lZCBnaXZlbiB0b2dldGhlciBmb3IgYCVzJyIsIG5hbWUpOworCWVycm9yICgiYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkIHNwZWNpZmllZCBmb3IgYCVzJyIsIG5hbWUpOworICAgICAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBlKSAhPSBJTlRFR0VSX1RZUEUpCisJZXJyb3IgKCJsb25nLCBzaG9ydCwgc2lnbmVkIG9yIHVuc2lnbmVkIGludmFsaWQgZm9yIGAlcyciLCBuYW1lKTsKICAgICAgIGVsc2UKIAl7CiAJICBvayA9IDE7CmRpZmYgLS1naXQgYS9nY2MvYy1ncGVyZi5oIGIvZ2NjL2MtZ3BlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjFiOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2MtZ3BlcmYuaApAQCAtMCwwICsxLDE4NiBAQAorLyogQyBjb2RlIHByb2R1Y2VkIGJ5IGdwZXJmIHZlcnNpb24gMi41IChHTlUgQysrIHZlcnNpb24pICovCisvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1wIC1qMSAtaSAxIC1nIC1vIC10IC1HIC1OIGlzX3Jlc2VydmVkX3dvcmQgLWsxLDMsJCAuL2MtcGFyc2UuZ3BlcmYgICovCisvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1wIC1qMSAtaSAxIC1nIC1vIC10IC1OIGlzX3Jlc2VydmVkX3dvcmQgLWsxLDMsJCBjLXBhcnNlLmdwZXJmICAqLyAKK3N0cnVjdCByZXN3b3JkIHsgY2hhciAqbmFtZTsgc2hvcnQgdG9rZW47IGVudW0gcmlkIHJpZDsgfTsKKworI2RlZmluZSBUT1RBTF9LRVlXT1JEUyA3OQorI2RlZmluZSBNSU5fV09SRF9MRU5HVEggMgorI2RlZmluZSBNQVhfV09SRF9MRU5HVEggMjAKKyNkZWZpbmUgTUlOX0hBU0hfVkFMVUUgMTAKKyNkZWZpbmUgTUFYX0hBU0hfVkFMVUUgMTQ0CisvKiBtYXhpbXVtIGtleSByYW5nZSA9IDEzNSwgZHVwbGljYXRlcyA9IDAgKi8KKworI2lmZGVmIF9fR05VQ19fCitpbmxpbmUKKyNlbmRpZgorc3RhdGljIHVuc2lnbmVkIGludAoraGFzaCAoc3RyLCBsZW4pCisgICAgIHJlZ2lzdGVyIGNoYXIgKnN0cjsKKyAgICAgcmVnaXN0ZXIgaW50IHVuc2lnbmVkIGxlbjsKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNzb192YWx1ZXNbXSA9CisgICAgeworICAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsCisgICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwKKyAgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LAorICAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsCisgICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwKKyAgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LAorICAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsICAyNSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsCisgICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwKKyAgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LAorICAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgICAxLCAxNDUsICA0NiwgICA4LCAgMTUsCisgICAgICA2MSwgICA2LCAgMzYsICA0OCwgICAzLCAgIDUsIDE0NSwgIDE4LCAgNjMsICAyNSwKKyAgICAgIDI5LCAgNzYsICAgMSwgMTQ1LCAgMTMsICAgMiwgICAxLCAgNTEsICAzNywgICA5LAorICAgICAgIDksICAgMSwgICAzLCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwKKyAgICB9OworICByZWdpc3RlciBpbnQgaHZhbCA9IGxlbjsKKworICBzd2l0Y2ggKGh2YWwpCisgICAgeworICAgICAgZGVmYXVsdDoKKyAgICAgIGNhc2UgMzoKKyAgICAgICAgaHZhbCArPSBhc3NvX3ZhbHVlc1tzdHJbMl1dOworICAgICAgY2FzZSAyOgorICAgICAgY2FzZSAxOgorICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzW3N0clswXV07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIGh2YWwgKyBhc3NvX3ZhbHVlc1tzdHJbbGVuIC0gMV1dOworfQorCitzdGF0aWMgc3RydWN0IHJlc3dvcmQgd29yZGxpc3RbXSA9Cit7CisgICAgICB7IiIsfSwgeyIiLH0sIHsiIix9LCB7IiIsfSwgeyIiLH0sIHsiIix9LCB7IiIsfSwgeyIiLH0sIHsiIix9LCAKKyAgICAgIHsiIix9LCAKKyAgICAgIHsiaW50IiwgIFRZUEVTUEVDLCBSSURfSU5UfSwKKyAgICAgIHsiIix9LCB7IiIsfSwgCisgICAgICB7Il9fdHlwZW9mX18iLCAgVFlQRU9GLCBOT1JJRH0sCisgICAgICB7Il9fc2lnbmVkX18iLCAgVFlQRVNQRUMsIFJJRF9TSUdORUR9LAorICAgICAgeyJfX2ltYWdfXyIsICBJTUFHUEFSVCwgTk9SSUR9LAorICAgICAgeyJzd2l0Y2giLCAgU1dJVENILCBOT1JJRH0sCisgICAgICB7Il9faW5saW5lX18iLCAgU0NTUEVDLCBSSURfSU5MSU5FfSwKKyAgICAgIHsiZWxzZSIsICBFTFNFLCBOT1JJRH0sCisgICAgICB7Il9faXRlcmF0b3JfXyIsICBTQ1NQRUMsIFJJRF9JVEVSQVRPUn0sCisgICAgICB7Il9faW5saW5lIiwgIFNDU1BFQywgUklEX0lOTElORX0sCisgICAgICB7Il9fZXh0ZW5zaW9uX18iLCAgRVhURU5TSU9OLCBOT1JJRH0sCisgICAgICB7InN0cnVjdCIsICBTVFJVQ1QsIE5PUklEfSwKKyAgICAgIHsiX19yZWFsX18iLCAgUkVBTFBBUlQsIE5PUklEfSwKKyAgICAgIHsiX19jb25zdCIsICBUWVBFX1FVQUwsIFJJRF9DT05TVH0sCisgICAgICB7IndoaWxlIiwgIFdISUxFLCBOT1JJRH0sCisgICAgICB7Il9fY29uc3RfXyIsICBUWVBFX1FVQUwsIFJJRF9DT05TVH0sCisgICAgICB7ImNhc2UiLCAgQ0FTRSwgTk9SSUR9LAorICAgICAgeyJfX2NvbXBsZXhfXyIsICBUWVBFU1BFQywgUklEX0NPTVBMRVh9LAorICAgICAgeyJfX2l0ZXJhdG9yIiwgIFNDU1BFQywgUklEX0lURVJBVE9SfSwKKyAgICAgIHsiYnljb3B5IiwgIFRZUEVfUVVBTCwgUklEX0JZQ09QWX0sCisgICAgICB7IiIsfSwgeyIiLH0sIHsiIix9LCAKKyAgICAgIHsiX19jb21wbGV4IiwgIFRZUEVTUEVDLCBSSURfQ09NUExFWH0sCisgICAgICB7IiIsfSwgCisgICAgICB7ImluIiwgIFRZUEVfUVVBTCwgUklEX0lOfSwKKyAgICAgIHsiYnJlYWsiLCAgQlJFQUssIE5PUklEfSwKKyAgICAgIHsiQGRlZnMiLCAgREVGUywgTk9SSUR9LAorICAgICAgeyIiLH0sIHsiIix9LCB7IiIsfSwgCisgICAgICB7ImV4dGVybiIsICBTQ1NQRUMsIFJJRF9FWFRFUk59LAorICAgICAgeyJpZiIsICBJRiwgTk9SSUR9LAorICAgICAgeyJ0eXBlb2YiLCAgVFlQRU9GLCBOT1JJRH0sCisgICAgICB7InR5cGVkZWYiLCAgU0NTUEVDLCBSSURfVFlQRURFRn0sCisgICAgICB7Il9fdHlwZW9mIiwgIFRZUEVPRiwgTk9SSUR9LAorICAgICAgeyJzaXplb2YiLCAgU0laRU9GLCBOT1JJRH0sCisgICAgICB7IiIsfSwgCisgICAgICB7InJldHVybiIsICBSRVRVUk4sIE5PUklEfSwKKyAgICAgIHsiY29uc3QiLCAgVFlQRV9RVUFMLCBSSURfQ09OU1R9LAorICAgICAgeyJfX3ZvbGF0aWxlX18iLCAgVFlQRV9RVUFMLCBSSURfVk9MQVRJTEV9LAorICAgICAgeyJAcHJpdmF0ZSIsICBQUklWQVRFLCBOT1JJRH0sCisgICAgICB7IkBzZWxlY3RvciIsICBTRUxFQ1RPUiwgTk9SSUR9LAorICAgICAgeyJfX3ZvbGF0aWxlIiwgIFRZUEVfUVVBTCwgUklEX1ZPTEFUSUxFfSwKKyAgICAgIHsiX19hc21fXyIsICBBU01fS0VZV09SRCwgTk9SSUR9LAorICAgICAgeyIiLH0sIHsiIix9LCAKKyAgICAgIHsiY29udGludWUiLCAgQ09OVElOVUUsIE5PUklEfSwKKyAgICAgIHsiX19hbGlnbm9mX18iLCAgQUxJR05PRiwgTk9SSUR9LAorICAgICAgeyJfX2ltYWciLCAgSU1BR1BBUlQsIE5PUklEfSwKKyAgICAgIHsiX19hdHRyaWJ1dGVfXyIsICBBVFRSSUJVVEUsIE5PUklEfSwKKyAgICAgIHsiIix9LCB7IiIsfSwgCisgICAgICB7Il9fYXR0cmlidXRlIiwgIEFUVFJJQlVURSwgTk9SSUR9LAorICAgICAgeyJmb3IiLCAgRk9SLCBOT1JJRH0sCisgICAgICB7IiIsfSwgCisgICAgICB7IkBlbmNvZGUiLCAgRU5DT0RFLCBOT1JJRH0sCisgICAgICB7ImlkIiwgIE9CSkVDVE5BTUUsIFJJRF9JRH0sCisgICAgICB7InN0YXRpYyIsICBTQ1NQRUMsIFJJRF9TVEFUSUN9LAorICAgICAgeyJAaW50ZXJmYWNlIiwgIElOVEVSRkFDRSwgTk9SSUR9LAorICAgICAgeyIiLH0sIAorICAgICAgeyJfX3NpZ25lZCIsICBUWVBFU1BFQywgUklEX1NJR05FRH0sCisgICAgICB7IiIsfSwgCisgICAgICB7Il9fbGFiZWxfXyIsICBMQUJFTCwgTk9SSUR9LAorICAgICAgeyIiLH0sIHsiIix9LCAKKyAgICAgIHsiX19hc20iLCAgQVNNX0tFWVdPUkQsIE5PUklEfSwKKyAgICAgIHsiY2hhciIsICBUWVBFU1BFQywgUklEX0NIQVJ9LAorICAgICAgeyIiLH0sIAorICAgICAgeyJpbmxpbmUiLCAgU0NTUEVDLCBSSURfSU5MSU5FfSwKKyAgICAgIHsib3V0IiwgIFRZUEVfUVVBTCwgUklEX09VVH0sCisgICAgICB7InJlZ2lzdGVyIiwgIFNDU1BFQywgUklEX1JFR0lTVEVSfSwKKyAgICAgIHsiX19yZWFsIiwgIFJFQUxQQVJULCBOT1JJRH0sCisgICAgICB7InNob3J0IiwgIFRZUEVTUEVDLCBSSURfU0hPUlR9LAorICAgICAgeyIiLH0sIAorICAgICAgeyJlbnVtIiwgIEVOVU0sIE5PUklEfSwKKyAgICAgIHsiaW5vdXQiLCAgVFlQRV9RVUFMLCBSSURfSU5PVVR9LAorICAgICAgeyIiLH0sIAorICAgICAgeyJvbmV3YXkiLCAgVFlQRV9RVUFMLCBSSURfT05FV0FZfSwKKyAgICAgIHsidW5pb24iLCAgVU5JT04sIE5PUklEfSwKKyAgICAgIHsiIix9LCAKKyAgICAgIHsiX19hbGlnbm9mIiwgIEFMSUdOT0YsIE5PUklEfSwKKyAgICAgIHsiIix9LCAKKyAgICAgIHsiQGltcGxlbWVudGF0aW9uIiwgIElNUExFTUVOVEFUSU9OLCBOT1JJRH0sCisgICAgICB7IiIsfSwgCisgICAgICB7IkBjbGFzcyIsICBDTEFTUywgTk9SSUR9LAorICAgICAgeyIiLH0sIAorICAgICAgeyJAcHVibGljIiwgIFBVQkxJQywgTk9SSUR9LAorICAgICAgeyJhc20iLCAgQVNNX0tFWVdPUkQsIE5PUklEfSwKKyAgICAgIHsiIix9LCB7IiIsfSwgeyIiLH0sIHsiIix9LCB7IiIsfSwgCisgICAgICB7ImRlZmF1bHQiLCAgREVGQVVMVCwgTk9SSUR9LAorICAgICAgeyIiLH0sIAorICAgICAgeyJ2b2lkIiwgIFRZUEVTUEVDLCBSSURfVk9JRH0sCisgICAgICB7IiIsfSwgCisgICAgICB7IkBwcm90ZWN0ZWQiLCAgUFJPVEVDVEVELCBOT1JJRH0sCisgICAgICB7IkBwcm90b2NvbCIsICBQUk9UT0NPTCwgTk9SSUR9LAorICAgICAgeyIiLH0sIHsiIix9LCB7IiIsfSwgCisgICAgICB7InZvbGF0aWxlIiwgIFRZUEVfUVVBTCwgUklEX1ZPTEFUSUxFfSwKKyAgICAgIHsiIix9LCB7IiIsfSwgCisgICAgICB7InNpZ25lZCIsICBUWVBFU1BFQywgUklEX1NJR05FRH0sCisgICAgICB7ImZsb2F0IiwgIFRZUEVTUEVDLCBSSURfRkxPQVR9LAorICAgICAgeyJAZW5kIiwgIEVORCwgTk9SSUR9LAorICAgICAgeyIiLH0sIHsiIix9LCAKKyAgICAgIHsidW5zaWduZWQiLCAgVFlQRVNQRUMsIFJJRF9VTlNJR05FRH0sCisgICAgICB7IkBjb21wYXRpYmlsaXR5X2FsaWFzIiwgIEFMSUFTLCBOT1JJRH0sCisgICAgICB7ImRvdWJsZSIsICBUWVBFU1BFQywgUklEX0RPVUJMRX0sCisgICAgICB7IiIsfSwgeyIiLH0sIAorICAgICAgeyJhdXRvIiwgIFNDU1BFQywgUklEX0FVVE99LAorICAgICAgeyIiLH0sIAorICAgICAgeyJnb3RvIiwgIEdPVE8sIE5PUklEfSwKKyAgICAgIHsiIix9LCB7IiIsfSwgeyIiLH0sIHsiIix9LCB7IiIsfSwgeyIiLH0sIHsiIix9LCB7IiIsfSwgeyIiLH0sIAorICAgICAgeyJkbyIsICBETywgTk9SSUR9LAorICAgICAgeyIiLH0sIHsiIix9LCB7IiIsfSwgeyIiLH0sIAorICAgICAgeyJsb25nIiwgIFRZUEVTUEVDLCBSSURfTE9OR30sCit9OworCisjaWZkZWYgX19HTlVDX18KK2lubGluZQorI2VuZGlmCitzdHJ1Y3QgcmVzd29yZCAqCitpc19yZXNlcnZlZF93b3JkIChzdHIsIGxlbikKKyAgICAgcmVnaXN0ZXIgY2hhciAqc3RyOworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuOworeworICBpZiAobGVuIDw9IE1BWF9XT1JEX0xFTkdUSCAmJiBsZW4gPj0gTUlOX1dPUkRfTEVOR1RIKQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBrZXkgPSBoYXNoIChzdHIsIGxlbik7CisKKyAgICAgIGlmIChrZXkgPD0gTUFYX0hBU0hfVkFMVUUgJiYga2V5ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICByZWdpc3RlciBjaGFyICpzID0gd29yZGxpc3Rba2V5XS5uYW1lOworCisgICAgICAgICAgaWYgKCpzID09ICpzdHIgJiYgIXN0cmNtcCAoc3RyICsgMSwgcyArIDEpKQorICAgICAgICAgICAgcmV0dXJuICZ3b3JkbGlzdFtrZXldOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy9jLXBhcnNlLmMgYi9nY2MvYy1wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmYzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvYy1wYXJzZS5jCkBAIC0wLDAgKzEsMzg1OSBAQAorCisvKiAgQSBCaXNvbiBwYXJzZXIsIG1hZGUgZnJvbSBjLXBhcnNlLnkgd2l0aCBCaXNvbiB2ZXJzaW9uIEdOVSBCaXNvbiB2ZXJzaW9uIDEuMjQKKyAgKi8KKworI2RlZmluZSBZWUJJU09OIDEgIC8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisKKyNkZWZpbmUJSURFTlRJRklFUgkyNTgKKyNkZWZpbmUJVFlQRU5BTUUJMjU5CisjZGVmaW5lCVNDU1BFQwkyNjAKKyNkZWZpbmUJVFlQRVNQRUMJMjYxCisjZGVmaW5lCVRZUEVfUVVBTAkyNjIKKyNkZWZpbmUJQ09OU1RBTlQJMjYzCisjZGVmaW5lCVNUUklORwkyNjQKKyNkZWZpbmUJRUxMSVBTSVMJMjY1CisjZGVmaW5lCVNJWkVPRgkyNjYKKyNkZWZpbmUJRU5VTQkyNjcKKyNkZWZpbmUJU1RSVUNUCTI2OAorI2RlZmluZQlVTklPTgkyNjkKKyNkZWZpbmUJSUYJMjcwCisjZGVmaW5lCUVMU0UJMjcxCisjZGVmaW5lCVdISUxFCTI3MgorI2RlZmluZQlETwkyNzMKKyNkZWZpbmUJRk9SCTI3NAorI2RlZmluZQlTV0lUQ0gJMjc1CisjZGVmaW5lCUNBU0UJMjc2CisjZGVmaW5lCURFRkFVTFQJMjc3CisjZGVmaW5lCUJSRUFLCTI3OAorI2RlZmluZQlDT05USU5VRQkyNzkKKyNkZWZpbmUJUkVUVVJOCTI4MAorI2RlZmluZQlHT1RPCTI4MQorI2RlZmluZQlBU01fS0VZV09SRAkyODIKKyNkZWZpbmUJVFlQRU9GCTI4MworI2RlZmluZQlBTElHTk9GCTI4NAorI2RlZmluZQlBVFRSSUJVVEUJMjg1CisjZGVmaW5lCUVYVEVOU0lPTgkyODYKKyNkZWZpbmUJTEFCRUwJMjg3CisjZGVmaW5lCVJFQUxQQVJUCTI4OAorI2RlZmluZQlJTUFHUEFSVAkyODkKKyNkZWZpbmUJQVNTSUdOCTI5MAorI2RlZmluZQlPUk9SCTI5MQorI2RlZmluZQlBTkRBTkQJMjkyCisjZGVmaW5lCUVRQ09NUEFSRQkyOTMKKyNkZWZpbmUJQVJJVEhDT01QQVJFCTI5NAorI2RlZmluZQlMU0hJRlQJMjk1CisjZGVmaW5lCVJTSElGVAkyOTYKKyNkZWZpbmUJVU5BUlkJMjk3CisjZGVmaW5lCVBMVVNQTFVTCTI5OAorI2RlZmluZQlNSU5VU01JTlVTCTI5OQorI2RlZmluZQlIWVBFUlVOQVJZCTMwMAorI2RlZmluZQlQT0lOVFNBVAkzMDEKKyNkZWZpbmUJSU5URVJGQUNFCTMwMgorI2RlZmluZQlJTVBMRU1FTlRBVElPTgkzMDMKKyNkZWZpbmUJRU5ECTMwNAorI2RlZmluZQlTRUxFQ1RPUgkzMDUKKyNkZWZpbmUJREVGUwkzMDYKKyNkZWZpbmUJRU5DT0RFCTMwNworI2RlZmluZQlDTEFTU05BTUUJMzA4CisjZGVmaW5lCVBVQkxJQwkzMDkKKyNkZWZpbmUJUFJJVkFURQkzMTAKKyNkZWZpbmUJUFJPVEVDVEVECTMxMQorI2RlZmluZQlQUk9UT0NPTAkzMTIKKyNkZWZpbmUJT0JKRUNUTkFNRQkzMTMKKyNkZWZpbmUJQ0xBU1MJMzE0CisjZGVmaW5lCUFMSUFTCTMxNQorI2RlZmluZQlPQkpDX1NUUklORwkzMTYKKworI2xpbmUgNTYgImMtcGFyc2UueSIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJpbnB1dC5oIgorI2luY2x1ZGUgImMtbGV4LmgiCisjaW5jbHVkZSAiYy10cmVlLmgiCisjaW5jbHVkZSAiZmxhZ3MuaCIKKworI2lmZGVmIE1VTFRJQllURV9DSEFSUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmCisKKworLyogU2luY2UgcGFyc2VycyBhcmUgZGlzdGluY3QgZm9yIGVhY2ggbGFuZ3VhZ2UsIHB1dCB0aGUgbGFuZ3VhZ2Ugc3RyaW5nCisgICBkZWZpbml0aW9uIGhlcmUuICAqLworY2hhciAqbGFuZ3VhZ2Vfc3RyaW5nID0gIkdOVSBDIjsKKworI2lmbmRlZiBlcnJubworZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorCit2b2lkIHl5ZXJyb3IgKCk7CisKKy8qIExpa2UgWVlFUlJPUiBidXQgZG8gY2FsbCB5eWVycm9yLiAgKi8KKyNkZWZpbmUgWVlFUlJPUjEgeyB5eWVycm9yICgic3ludGF4IGVycm9yIik7IFlZRVJST1I7IH0KKworLyogQ2F1c2UgdGhlIGB5eWRlYnVnJyB2YXJpYWJsZSB0byBiZSBkZWZpbmVkLiAgKi8KKyNkZWZpbmUgWVlERUJVRyAxCisKKyNsaW5lIDkzICJjLXBhcnNlLnkiCit0eXBlZGVmIHVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOworCWNoYXIgKmZpbGVuYW1lOyBpbnQgbGluZW5vOyBpbnQgZW5kc19pbl9sYWJlbDsgfSBZWVNUWVBFOworI2xpbmUgMjA5ICJjLXBhcnNlLnkiCisKKy8qIE51bWJlciBvZiBzdGF0ZW1lbnRzIChsb29zZWx5IHNwZWFraW5nKSBzZWVuIHNvIGZhci4gICovCitzdGF0aWMgaW50IHN0bXRfY291bnQ7CisKKy8qIElucHV0IGZpbGUgYW5kIGxpbmUgbnVtYmVyIG9mIHRoZSBlbmQgb2YgdGhlIGJvZHkgb2YgbGFzdCBzaW1wbGVfaWY7CisgICB1c2VkIGJ5IHRoZSBzdG10LXJ1bGUgaW1tZWRpYXRlbHkgYWZ0ZXIgc2ltcGxlX2lmIHJldHVybnMuICAqLworc3RhdGljIGNoYXIgKmlmX3N0bXRfZmlsZTsKK3N0YXRpYyBpbnQgaWZfc3RtdF9saW5lOworCisvKiBMaXN0IG9mIHR5cGVzIGFuZCBzdHJ1Y3R1cmUgY2xhc3NlcyBvZiB0aGUgY3VycmVudCBkZWNsYXJhdGlvbi4gICovCitzdGF0aWMgdHJlZSBjdXJyZW50X2RlY2xzcGVjcyA9IE5VTExfVFJFRTsKK3N0YXRpYyB0cmVlIHByZWZpeF9hdHRyaWJ1dGVzID0gTlVMTF9UUkVFOworCisvKiBTdGFjayBvZiBzYXZlZCB2YWx1ZXMgb2YgY3VycmVudF9kZWNsc3BlY3MgYW5kIHByZWZpeF9hdHRyaWJ1dGVzLiAgKi8KK3N0YXRpYyB0cmVlIGRlY2xzcGVjX3N0YWNrOworCisvKiAxIGlmIHdlIGV4cGxhaW5lZCB1bmRlY2xhcmVkIHZhciBlcnJvcnMuICAqLworc3RhdGljIGludCB1bmRlY2xhcmVkX3ZhcmlhYmxlX25vdGljZTsKKworCisvKiBUZWxsIHl5cGFyc2UgaG93IHRvIHByaW50IGEgdG9rZW4ncyB2YWx1ZSwgaWYgeXlkZWJ1ZyBpcyBzZXQuICAqLworCisjZGVmaW5lIFlZUFJJTlQoRklMRSxZWUNIQVIsWVlMVkFMKSB5eXByaW50KEZJTEUsWVlDSEFSLFlZTFZBTCkKK2V4dGVybiB2b2lkIHl5cHJpbnQgKCk7CisKKyNpZm5kZWYgWVlMVFlQRQordHlwZWRlZgorICBzdHJ1Y3QgeXlsdHlwZQorICAgIHsKKyAgICAgIGludCB0aW1lc3RhbXA7CisgICAgICBpbnQgZmlyc3RfbGluZTsKKyAgICAgIGludCBmaXJzdF9jb2x1bW47CisgICAgICBpbnQgbGFzdF9saW5lOworICAgICAgaW50IGxhc3RfY29sdW1uOworICAgICAgY2hhciAqdGV4dDsKKyAgIH0KKyAgeXlsdHlwZTsKKworI2RlZmluZSBZWUxUWVBFIHl5bHR5cGUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZiBfX2NwbHVzcGx1cworI2lmbmRlZiBfX1NURENfXworI2RlZmluZSBjb25zdAorI2VuZGlmCisjZW5kaWYKKworCisKKyNkZWZpbmUJWVlGSU5BTAkJNjgxCisjZGVmaW5lCVlZRkxBRwkJLTMyNzY4CisjZGVmaW5lCVlZTlRCQVNFCTg0CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoeCkgKCh1bnNpZ25lZCkoeCkgPD0gMzE2ID8geXl0cmFuc2xhdGVbeF0gOiAyMzgpCisKK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPSB7ICAgICAwLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgODAsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDUyLCAgICA0MywgICAgIDIsICAgIDU5LAorICAgIDc2LCAgICA1MCwgICAgNDgsICAgIDgxLCAgICA0OSwgICAgNTgsICAgIDUxLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAzOCwgICAgNzcsICAgICAyLAorICAgIDM2LCAgICAgMiwgICAgMzcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgIDYwLCAgICAgMiwgICAgODMsICAgIDQyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgODIsICAgIDQxLCAgICA3OCwgICAgNzksICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgIDM5LCAgICA0MCwgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LAorICAgIDU3LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUKK307CisKKyNpZiBZWURFQlVHICE9IDAKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9IHsgICAgIDAsCisgICAgIDAsICAgICAxLCAgICAgMywgICAgIDQsICAgICA3LCAgICAgOCwgICAgMTIsICAgIDE0LCAgICAxNiwgICAgMjIsCisgICAgMjUsICAgIDI5LCAgICAzNCwgICAgMzksICAgIDQyLCAgICA0NSwgICAgNDgsICAgIDUxLCAgICA1MywgICAgNTQsCisgICAgNTUsICAgIDYzLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3OCwgICAgODMsICAgIDg0LCAgICA4NSwgICAgOTIsCisgICAgOTYsICAgIDk4LCAgIDEwMCwgICAxMDIsICAgMTA0LCAgIDEwNiwgICAxMDgsICAgMTEwLCAgIDExMiwgICAxMTQsCisgICAxMTYsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTI1LCAgIDEyNywgICAxMzAsICAgMTMzLCAgIDEzNiwgICAxMzksCisgICAxNDIsICAgMTQ3LCAgIDE1MCwgICAxNTUsICAgMTU4LCAgIDE2MSwgICAxNjMsICAgMTY1LCAgIDE2NywgICAxNzIsCisgICAxNzMsICAgMTgxLCAgIDE4MywgICAxODcsICAgMTkxLCAgIDE5NSwgICAxOTksICAgMjAzLCAgIDIwNywgICAyMTEsCisgICAyMTUsICAgMjE5LCAgIDIyMywgICAyMjcsICAgMjMxLCAgIDIzMiwgICAyMzcsICAgMjM4LCAgIDI0MywgICAyNDQsCisgICAyNDUsICAgMjUzLCAgIDI1NCwgICAyNjAsICAgMjY0LCAgIDI2OCwgICAyNzAsICAgMjcyLCAgIDI3NCwgICAyNzgsCisgICAyODIsICAgMjgzLCAgIDI4OCwgICAyOTMsICAgMjk4LCAgIDMwMiwgICAzMDYsICAgMzA5LCAgIDMxMiwgICAzMTQsCisgICAzMTcsICAgMzE4LCAgIDMyMCwgICAzMjMsICAgMzI3LCAgIDMyOSwgICAzMzEsICAgMzM0LCAgIDMzNywgICAzNDIsCisgICAzNDcsICAgMzUwLCAgIDM1MywgICAzNTcsICAgMzU5LCAgIDM2MSwgICAzNjQsICAgMzY3LCAgIDM2OCwgICAzNjksCisgICAzNzQsICAgMzc5LCAgIDM4MywgICAzODcsICAgMzkwLCAgIDM5MywgICAzOTYsICAgMzk5LCAgIDQwMywgICA0MDQsCisgICA0MDcsICAgNDEwLCAgIDQxMywgICA0MTYsICAgNDIwLCAgIDQyMSwgICA0MjQsICAgNDI3LCAgIDQyOSwgICA0MzEsCisgICA0MzQsICAgNDM3LCAgIDQzOSwgICA0NDEsICAgNDQ0LCAgIDQ0NywgICA0NTAsICAgNDU0LCAgIDQ1NSwgICA0NTgsCisgICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjksICAgNDc0LCAgIDQ3NiwgICA0NzgsICAgNDgwLCAgIDQ4MiwgICA0ODYsCisgICA0ODgsICAgNDkyLCAgIDQ5MywgICA0OTgsICAgNDk5LCAgIDUwNiwgICA1MTAsICAgNTExLCAgIDUxOCwgICA1MjIsCisgICA1MjMsICAgNTI1LCAgIDUyNywgICA1MzAsICAgNTM3LCAgIDUzOSwgICA1NDMsICAgNTQ0LCAgIDU0NiwgICA1NTEsCisgICA1NTgsICAgNTYzLCAgIDU2NSwgICA1NjcsICAgNTY5LCAgIDU3MSwgICA1NzMsICAgNTc0LCAgIDU3OSwgICA1ODEsCisgICA1ODIsICAgNTg1LCAgIDU4NywgICA1OTEsICAgNTkzLCAgIDU5NCwgICA1OTksICAgNjAxLCAgIDYwMiwgICA2MTEsCisgICA2MTIsICAgNjE5LCAgIDYyMCwgICA2MjYsICAgNjI3LCAgIDYzMiwgICA2MzMsICAgNjM5LCAgIDY0MCwgICA2NDEsCisgICA2NDcsICAgNjQ4LCAgIDY0OSwgICA2NTUsICAgNjU3LCAgIDY1OSwgICA2NjMsICAgNjY3LCAgIDY3MiwgICA2NzYsCisgICA2ODAsICAgNjg0LCAgIDY4NiwgICA2OTAsICAgNjk1LCAgIDY5OSwgICA3MDMsICAgNzA3LCAgIDcwOSwgICA3MTMsCisgICA3MTcsICAgNzIxLCAgIDcyNiwgICA3MzAsICAgNzM0LCAgIDczNiwgICA3MzcsICAgNzQ1LCAgIDc1MSwgICA3NTQsCisgICA3NTUsICAgNzYzLCAgIDc2OSwgICA3NzIsICAgNzczLCAgIDc4MiwgICA3ODMsICAgNzkxLCAgIDc5NCwgICA3OTUsCisgICA3OTcsICAgNzk4LCAgIDgwMCwgICA4MDIsICAgODA1LCAgIDgwNiwgICA4MTAsICAgODEzLCAgIDgxNywgICA4MTksCisgICA4MjMsICAgODI1LCAgIDgyNywgICA4MzAsICAgODMyLCAgIDgzNiwgICA4NDEsICAgODQ4LCAgIDg1NCwgICA4NTYsCisgICA4NjAsICAgODYyLCAgIDg2NCwgICA4NjgsICAgODcxLCAgIDg3NCwgICA4NzUsICAgODc3LCAgIDg3OSwgICA4ODIsCisgICA4ODMsICAgODg2LCAgIDg5MCwgICA4OTQsICAgODk3LCAgIDkwMSwgICA5MDYsICAgOTEwLCAgIDkxMywgICA5MTcsCisgICA5MjAsICAgOTIyLCAgIDkyNCwgICA5MjcsICAgOTMwLCAgIDkzMSwgICA5MzMsICAgOTM2LCAgIDkzNywgICA5MzgsCisgICA5NDAsICAgOTQyLCAgIDk0NSwgICA5NDksICAgOTUxLCAgIDk1NCwgICA5NTcsICAgOTY0LCAgIDk3MCwgICA5NzYsCisgICA5NzksICAgOTgyLCAgIDk4NywgICA5ODgsICAgOTkzLCAgIDk5NCwgICA5OTUsICAgOTk5LCAgMTAwNCwgIDEwMDgsCisgIDEwMTAsICAxMDEyLCAgMTAxNCwgIDEwMTYsICAxMDE5LCAgMTAyMCwgIDEwMjUsICAxMDI3LCAgMTAzMSwgIDEwMzIsCisgIDEwMzMsICAxMDQxLCAgMTA0NywgIDEwNTAsICAxMDUxLCAgMTA1MiwgIDEwNTMsICAxMDY2LCAgMTA2NywgIDEwNzQsCisgIDEwNzcsICAxMDgwLCAgMTA4MywgIDEwODcsICAxMDk0LCAgMTEwMywgIDExMTQsICAxMTI3LCAgMTEzMSwgIDExMzYsCisgIDExMzgsICAxMTQwLCAgMTE0MSwgIDExNDgsICAxMTUyLCAgMTE1OCwgIDExNjEsICAxMTY0LCAgMTE2NSwgIDExNjcsCisgIDExNjgsICAxMTcwLCAgMTE3MSwgIDExNzMsICAxMTc1LCAgMTE3OSwgIDExODQsICAxMTg2LCAgMTE5MCwgIDExOTEsCisgIDExOTQsICAxMTk3LCAgMTE5OCwgIDEyMDMsICAxMjA2LCAgMTIwNywgIDEyMDksICAxMjExLCAgMTIxNSwgIDEyMTcsCisgIDEyMjEsICAxMjI2LCAgMTIzMSwgIDEyMzYsICAxMjQxLCAgMTI0NiwgIDEyNDcsICAxMjUwLCAgMTI1MiwgIDEyNTUsCisgIDEyNTcsICAxMjYxLCAgMTI2MywgIDEyNjcKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXJoc1tdID0geyAgICAtMSwKKyAgICA4NSwgICAgIDAsICAgICAwLCAgICA4NiwgICAgODgsICAgICAwLCAgICAgMCwgICAgODUsICAgIDg3LCAgICA4OCwKKyAgICAgMCwgICAgOTAsICAgICAwLCAgICA4OSwgICAgIDAsICAgIDI3LCAgICA1OSwgICAgOTksICAgIDc2LCAgICA3NywKKyAgICAgMCwgICAyMzcsICAgIDg4LCAgICAgMCwgICAxMjIsICAgMTM2LCAgICA3NywgICAgIDAsICAgMTI5LCAgIDEyMiwKKyAgIDEzNiwgICAgNzcsICAgICAwLCAgIDEyNSwgICAxMjIsICAgMTM1LCAgICA3NywgICAgIDAsICAgMTI5LCAgICA3NywKKyAgICAgMCwgICAxMjUsICAgIDc3LCAgICAgMCwgICAgIDEsICAgIDc3LCAgICAgMCwgICAgIDEsICAgIDc4LCAgICAgMCwKKyAgICA3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjUsICAgMTIyLCAgIDE2NSwgICAgOTEsICAgMTE2LCAgICA5MiwKKyAgIDE5NiwgICAgIDAsICAgMTI1LCAgIDEyMiwgICAxNjUsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyOSwKKyAgIDEyMiwgICAxNjgsICAgIDkzLCAgIDExNiwgICAgOTQsICAgMTk2LCAgICAgMCwgICAxMjksICAgMTIyLCAgIDE2OCwKKyAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjIsICAgMTY4LCAgICA5NSwgICAxMTYsICAgIDk2LCAgIDE5NiwKKyAgICAgMCwgICAxMjIsICAgMTY4LCAgICAgMSwgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDQsICAgICAwLCAgICA0MywKKyAgICAgMCwgICAgNDksICAgICAwLCAgICA0OCwgICAgIDAsICAgIDU0LCAgICAgMCwgICAgNTUsICAgICAwLCAgICA3OSwKKyAgICAgMCwgICAgODAsICAgICAwLCAgIDEwMSwgICAgIDAsICAgICAwLCAgIDEwMSwgICAgIDAsICAgMTA3LCAgICAgMCwKKyAgIDEwMSwgICAgODEsICAgMTA3LCAgICAgMCwgICAxMTMsICAgICAwLCAgICA1MCwgICAxMDUsICAgICAwLCAgIDIzNywKKyAgIDEwNSwgICAgIDAsICAgIDk4LCAgIDEwNSwgICAgIDAsICAgIDQwLCAgICA5NywgICAgIDAsICAgMTAzLCAgIDEwMiwKKyAgICAgMCwgICAxMDMsICAgIDU5LCAgIDE4MywgICAgNzYsICAgICAwLCAgIDEwNCwgICAxMDIsICAgICAwLCAgIDEwNCwKKyAgICA1OSwgICAxODMsICAgIDc2LCAgICAgMCwgICAgMzMsICAgMTA1LCAgICAgMCwgICAgMzQsICAgMTA1LCAgICAgMCwKKyAgICAxMSwgICAgIDAsICAgIDI5LCAgICAgMCwgICAxMDIsICAgICAwLCAgICA1OSwgICAxODMsICAgIDc2LCAgIDEwNSwKKyAgICAgMCwgICAgIDAsICAgIDU5LCAgIDE4MywgICAgNzYsICAgIDgyLCAgIDEwNiwgICAxNTAsICAgIDc4LCAgICAgMCwKKyAgIDEwNSwgICAgIDAsICAgMTA3LCAgICA0OCwgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDksICAgMTA3LCAgICAgMCwKKyAgIDEwNywgICAgNTAsICAgMTA3LCAgICAgMCwgICAxMDcsICAgIDUxLCAgIDEwNywgICAgIDAsICAgMTA3LCAgICA1MiwKKyAgIDEwNywgICAgIDAsICAgMTA3LCAgICA0NiwgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDcsICAgMTA3LCAgICAgMCwKKyAgIDEwNywgICAgNDUsICAgMTA3LCAgICAgMCwgICAxMDcsICAgIDQ0LCAgIDEwNywgICAgIDAsICAgMTA3LCAgICA0MywKKyAgIDEwNywgICAgIDAsICAgMTA3LCAgICA0MSwgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDIsICAgMTA3LCAgICAgMCwKKyAgICAgMCwgICAxMDcsICAgIDQwLCAgIDEwOCwgICAxMDcsICAgICAwLCAgICAgMCwgICAxMDcsICAgIDM5LCAgIDEwOSwKKyAgIDEwNywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDcsICAgIDM3LCAgIDExMCwgICAgOTksICAgIDM4LCAgIDExMSwKKyAgIDEwNywgICAgIDAsICAgICAwLCAgIDEwNywgICAgMzcsICAgMTEyLCAgICAzOCwgICAxMDcsICAgICAwLCAgIDEwNywKKyAgICAzNiwgICAxMDcsICAgICAwLCAgIDEwNywgICAgMzUsICAgMTA3LCAgICAgMCwgICAgIDMsICAgICAwLCAgICAgOCwKKyAgICAgMCwgICAxMTUsICAgICAwLCAgICA1OSwgICAgOTksICAgIDc2LCAgICAgMCwgICAgNTksICAgICAxLCAgICA3NiwKKyAgICAgMCwgICAgIDAsICAgIDU5LCAgIDExNCwgICAxOTcsICAgIDc2LCAgICAgMCwgICAxMTMsICAgIDU5LCAgIDEwMCwKKyAgICA3NiwgICAgIDAsICAgMTEzLCAgICA2MCwgICAgOTksICAgIDgzLCAgICAgMCwgICAxMTMsICAgIDU4LCAgICA5NywKKyAgICAgMCwgICAxMTMsICAgIDU3LCAgICA5NywgICAgIDAsICAgMTEzLCAgICA1NCwgICAgIDAsICAgMTEzLCAgICA1NSwKKyAgICAgMCwgICAgIDksICAgICAwLCAgIDExNSwgICAgIDksICAgICAwLCAgICAgMCwgICAxMTgsICAgICAwLCAgIDExOCwKKyAgICAxMCwgICAgIDAsICAgMjAyLCAgIDIwMywgICAxMTksICAgICAwLCAgIDExNywgICAgIDAsICAgMTkxLCAgICAgMCwKKyAgIDExOCwgICAxMTcsICAgICAwLCAgIDExNywgICAxOTEsICAgICAwLCAgIDEyNywgICAxMjIsICAgMTM1LCAgICA3NywKKyAgICAgMCwgICAxMzAsICAgMTIyLCAgIDEzNiwgICAgNzcsICAgICAwLCAgIDEyNywgICAgNzcsICAgICAwLCAgIDEzMCwKKyAgICA3NywgICAgIDAsICAgMjAyLCAgIDIwMywgICAxMjQsICAgICAwLCAgIDEyMCwgICAgIDAsICAgMTkxLCAgICAgMCwKKyAgIDEyMSwgICAxMjAsICAgICAwLCAgIDEyMCwgICAxOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTI1LCAgIDEyMiwKKyAgIDEzNSwgICAgNzcsICAgICAwLCAgIDEyOSwgICAxMjIsICAgMTM2LCAgICA3NywgICAgIDAsICAgMTI1LCAgIDEyMiwKKyAgIDE1OSwgICAgIDAsICAgMTI5LCAgIDEyMiwgICAxNjIsICAgICAwLCAgIDEyNSwgICAgNzcsICAgICAwLCAgIDEyOSwKKyAgICA3NywgICAgIDAsICAgMjM3LCAgIDEyNCwgICAgIDAsICAgMTMzLCAgIDEyNiwgICAgIDAsICAgMTI5LCAgIDEzMywKKyAgIDEyNiwgICAgIDAsICAgICAwLCAgIDEyNiwgICAxMzQsICAgICAwLCAgIDEyNiwgICAgIDUsICAgICAwLCAgIDEyNiwKKyAgIDE0MywgICAgIDAsICAgMTMzLCAgIDEyOCwgICAgIDAsICAgMTMwLCAgIDEzMywgICAxMjgsICAgICAwLCAgICAgMCwKKyAgIDEyOCwgICAxMzQsICAgICAwLCAgIDEyOCwgICAgIDUsICAgICAwLCAgIDEzMCwgICAgIDAsICAgMTQzLCAgICAgMCwKKyAgIDEyOSwgICAxMzAsICAgICAwLCAgIDEyOSwgICAxNDMsICAgICAwLCAgICAgNywgICAgIDAsICAgICA1LCAgICAgMCwKKyAgIDEzMCwgICAgIDcsICAgICAwLCAgIDEzMCwgICAgIDUsICAgICAwLCAgIDEzMywgICAxMzIsICAgICAwLCAgIDE4NSwKKyAgIDEzMywgICAxMzIsICAgICAwLCAgICAgMCwgICAxMzIsICAgMTM0LCAgICAgMCwgICAgIDYsICAgICAwLCAgIDE2OSwKKyAgICAgMCwgICAgIDQsICAgICAwLCAgICAyOCwgICAgNTksICAgIDk5LCAgICA3NiwgICAgIDAsICAgIDI4LCAgICA1OSwKKyAgIDE4MywgICAgNzYsICAgICAwLCAgICAgNiwgICAgIDAsICAgICA3LCAgICAgMCwgICAxNjksICAgICAwLCAgIDEzOCwKKyAgICAgMCwgICAxMzUsICAgIDgxLCAgIDEzOCwgICAgIDAsICAgMTQwLCAgICAgMCwgICAxMzYsICAgIDgxLCAgIDEzOCwKKyAgICAgMCwgICAgIDAsICAgIDI3LCAgICA1OSwgICAxMTUsICAgIDc2LCAgICAgMCwgICAgIDAsICAgMTY1LCAgIDEzNywKKyAgIDE0MiwgICAgMzYsICAgMTM5LCAgIDE0OCwgICAgIDAsICAgMTY1LCAgIDEzNywgICAxNDIsICAgICAwLCAgICAgMCwKKyAgIDE2OCwgICAxMzcsICAgMTQyLCAgICAzNiwgICAxNDEsICAgMTQ4LCAgICAgMCwgICAxNjgsICAgMTM3LCAgIDE0MiwKKyAgICAgMCwgICAgIDAsICAgMTQzLCAgICAgMCwgICAxNDQsICAgICAwLCAgIDE0MywgICAxNDQsICAgICAwLCAgICAzMCwKKyAgICA1OSwgICAgNTksICAgMTQ1LCAgICA3NiwgICAgNzYsICAgICAwLCAgIDE0NiwgICAgIDAsICAgMTQ1LCAgICA4MSwKKyAgIDE0NiwgICAgIDAsICAgICAwLCAgIDE0NywgICAgIDAsICAgMTQ3LCAgICA1OSwgICAgIDMsICAgIDc2LCAgICAgMCwKKyAgIDE0NywgICAgNTksICAgICAzLCAgICA4MSwgICAxMDEsICAgIDc2LCAgICAgMCwgICAxNDcsICAgIDU5LCAgIDEwMCwKKyAgICA3NiwgICAgIDAsICAgIDk3LCAgICAgMCwgICAgIDUsICAgICAwLCAgICAgNiwgICAgIDAsICAgICA3LCAgICAgMCwKKyAgIDEwNywgICAgIDAsICAgICAwLCAgICA4MiwgICAxNDksICAgMTUwLCAgICA3OCwgICAgIDAsICAgICAxLCAgICAgMCwKKyAgICAgMCwgICAxNTEsICAgMTc0LCAgICAgMCwgICAxNTIsICAgICAwLCAgIDE1MSwgICAgODEsICAgMTUyLCAgICAgMCwKKyAgIDEwNywgICAgIDAsICAgICAwLCAgICA4MiwgICAxNTMsICAgMTUwLCAgICA3OCwgICAgIDAsICAgICAxLCAgICAgMCwKKyAgICAgMCwgICAgNjAsICAgMTA3LCAgICAxMCwgICAxMDcsICAgIDgzLCAgICAzNiwgICAxNTQsICAgMTUyLCAgICAgMCwKKyAgICAgMCwgICAgNjAsICAgMTA3LCAgICA4MywgICAgMzYsICAgMTU1LCAgIDE1MiwgICAgIDAsICAgICAwLCAgICA2MCwKKyAgIDEwNywgICAgODMsICAgMTU2LCAgIDE1MiwgICAgIDAsICAgICAwLCAgICA5NywgICAgMzgsICAgMTU3LCAgIDE1MiwKKyAgICAgMCwgICAgIDAsICAgIDU4LCAgICA5NywgICAgMzYsICAgMTU4LCAgIDE1MiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDE2NSwgICAxNjAsICAgMTE2LCAgIDE2MSwgICAxOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTY4LCAgIDE2MywKKyAgIDExNiwgICAxNjQsICAgMTk3LCAgICAgMCwgICAxNjYsICAgICAwLCAgIDE2OCwgICAgIDAsICAgIDU5LCAgIDE2NiwKKyAgICA3NiwgICAgIDAsICAgMTY2LCAgICA1OSwgICAyMzIsICAgICAwLCAgIDE2NiwgICAgNjAsICAgIDk5LCAgICA4MywKKyAgICAgMCwgICAxNjYsICAgIDYwLCAgICA4MywgICAgIDAsICAgIDUwLCAgIDE4NiwgICAxNjYsICAgICAwLCAgIDE0MywKKyAgIDEyMywgICAxNjYsICAgICAwLCAgICAgNCwgICAgIDAsICAgMTY3LCAgICA1OSwgICAyMzIsICAgICAwLCAgIDE2NywKKyAgICA2MCwgICAgOTksICAgIDgzLCAgICAgMCwgICAxNjcsICAgIDYwLCAgICA4MywgICAgIDAsICAgIDUwLCAgIDE4NiwKKyAgIDE2NywgICAgIDAsICAgMTQzLCAgIDEyMywgICAxNjcsICAgICAwLCAgICAgNCwgICAgIDAsICAgMTY4LCAgICA1OSwKKyAgIDIzMiwgICAgIDAsICAgIDU5LCAgIDE2OCwgICAgNzYsICAgICAwLCAgICA1MCwgICAxODYsICAgMTY4LCAgICAgMCwKKyAgIDE2OCwgICAgNjAsICAgIDk5LCAgICA4MywgICAgIDAsICAgMTY4LCAgICA2MCwgICAgODMsICAgICAwLCAgIDE0MywKKyAgIDEyMywgICAxNjgsICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAxMywgICAgOTcsICAgIDgyLCAgIDE3MCwKKyAgIDE3NiwgICAgNzgsICAgMTQyLCAgICAgMCwgICAgMTMsICAgIDgyLCAgIDE3NiwgICAgNzgsICAgMTQyLCAgICAgMCwKKyAgICAxMywgICAgOTcsICAgICAwLCAgICAgMCwgICAgMTQsICAgIDk3LCAgICA4MiwgICAxNzEsICAgMTc2LCAgICA3OCwKKyAgIDE0MiwgICAgIDAsICAgIDE0LCAgICA4MiwgICAxNzYsICAgIDc4LCAgIDE0MiwgICAgIDAsICAgIDE0LCAgICA5NywKKyAgICAgMCwgICAgIDAsICAgIDEyLCAgICA5NywgICAgODIsICAgMTcyLCAgIDE4MSwgICAxNzUsICAgIDc4LCAgIDE0MiwKKyAgICAgMCwgICAgIDAsICAgIDEyLCAgICA4MiwgICAxNzMsICAgMTgxLCAgIDE3NSwgICAgNzgsICAgMTQyLCAgICAgMCwKKyAgICAxMiwgICAgOTcsICAgICAwLCAgICAgMCwgICAgODEsICAgICAwLCAgICAgMCwgICAgODEsICAgICAwLCAgIDE3NywKKyAgICAgMCwgICAxNzcsICAgMTc4LCAgICAgMCwgICAgIDAsICAgMTc3LCAgIDE3OCwgICAgNzcsICAgICAwLCAgIDE3NywKKyAgICA3NywgICAgIDAsICAgMTMxLCAgIDEyMiwgICAxNzksICAgICAwLCAgIDEzMSwgICAgIDAsICAgMTg1LCAgIDEyMiwKKyAgIDE3OSwgICAgIDAsICAgMTg1LCAgICAgMCwgICAgIDEsICAgICAwLCAgIDIzNywgICAxNzgsICAgICAwLCAgIDE4MCwKKyAgICAgMCwgICAxNzksICAgIDgxLCAgIDE4MCwgICAgIDAsICAgMjAyLCAgIDIwMywgICAxNjUsICAgMTQyLCAgICAgMCwKKyAgIDIwMiwgICAyMDMsICAgMTY1LCAgICAzOCwgICAxMDcsICAgMTQyLCAgICAgMCwgICAyMDIsICAgMjAzLCAgICAzOCwKKyAgIDEwNywgICAxNDIsICAgICAwLCAgIDE4MiwgICAgIDAsICAgMTgxLCAgICA4MSwgICAxODIsICAgICAwLCAgICAgMSwKKyAgICAgMCwgICAgOTcsICAgICAwLCAgICA5NywgICAgMzYsICAgMTA3LCAgICAgMCwgICAxMzEsICAgMTg0LCAgICAgMCwKKyAgIDE4NSwgICAxODQsICAgICAwLCAgICAgMCwgICAxODcsICAgICAwLCAgICAgNywgICAgIDAsICAgMTg1LCAgICAgNywKKyAgICAgMCwgICAgIDAsICAgMTg2LCAgICAgNywgICAgIDAsICAgIDU5LCAgIDE4NywgICAgNzYsICAgICAwLCAgICA1MCwKKyAgIDE4NiwgICAxODcsICAgICAwLCAgICA1MCwgICAxODYsICAgICAwLCAgIDE4NywgICAgNTksICAgMjI1LCAgICAgMCwKKyAgIDE4NywgICAgNjAsICAgIDk5LCAgICA4MywgICAgIDAsICAgMTg3LCAgICA2MCwgICAgODMsICAgICAwLCAgICA1OSwKKyAgIDIyNSwgICAgIDAsICAgIDYwLCAgICA5OSwgICAgODMsICAgICAwLCAgICA2MCwgICAgODMsICAgICAwLCAgIDE4OSwKKyAgICAgMCwgICAyMDUsICAgICAwLCAgIDE4OSwgICAyMDUsICAgICAwLCAgIDE4OSwgICAxOTEsICAgICAwLCAgICAgMCwKKyAgIDE4OCwgICAgIDAsICAgICAxLCAgICA3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTQsICAgICAwLCAgIDE5NSwKKyAgICAgMCwgICAxOTQsICAgMTk1LCAgICAgMCwgICAgMzIsICAgMjM2LCAgICA3NywgICAgIDAsICAgMTk3LCAgICAgMCwKKyAgICAgMSwgICAxOTcsICAgICAwLCAgICA4MiwgICAgNzgsICAgICAwLCAgICA4MiwgICAxOTIsICAgMTkzLCAgIDEyMSwKKyAgIDE5MCwgICAgNzgsICAgICAwLCAgICA4MiwgICAxOTIsICAgMTkzLCAgICAgMSwgICAgNzgsICAgICAwLCAgICA4MiwKKyAgIDE5MiwgICAxOTMsICAgMTg4LCAgICA3OCwgICAgIDAsICAgMTk5LCAgIDIwNCwgICAgIDAsICAgMTk5LCAgICAgMSwKKyAgICAgMCwgICAgMTUsICAgIDU5LCAgICA5OSwgICAgNzYsICAgICAwLCAgICAgMCwgICAgMTgsICAgMjAxLCAgIDIwNCwKKyAgICAxNywgICAgIDAsICAgICAwLCAgICAgMCwgICAyMDIsICAgMjAzLCAgIDIwNywgICAgIDAsICAgMjAyLCAgIDIwMywKKyAgIDIxOCwgICAyMDQsICAgICAwLCAgIDIwMiwgICAyMDMsICAgMjA2LCAgICAgMCwgICAyMDcsICAgICAwLCAgIDIxOCwKKyAgICAgMCwgICAxOTcsICAgICAwLCAgIDIxNSwgICAgIDAsICAgIDk5LCAgICA3NywgICAgIDAsICAgICAwLCAgIDE5OCwKKyAgICAxNiwgICAyMDgsICAgMjA0LCAgICAgMCwgICAxOTgsICAgICAwLCAgIDE5OCwgICAgMTYsICAgICAxLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgIDE3LCAgIDIwOSwgICAgNTksICAgIDk5LCAgICA3NiwgICAyMTAsICAgMjA0LCAgICAgMCwKKyAgIDIwMCwgICAgNTksICAgIDk5LCAgICA3NiwgICAgNzcsICAgICAwLCAgIDIwMCwgICAgIDEsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgIDE5LCAgICA1OSwgICAyMjAsICAgIDc3LCAgIDIxMSwgICAyMjAsICAgIDc3LCAgIDIxMiwKKyAgIDIyMCwgICAgNzYsICAgMjEzLCAgIDIwNCwgICAgIDAsICAgICAwLCAgICAyMCwgICAgNTksICAgIDk5LCAgICA3NiwKKyAgIDIxNCwgICAyMDQsICAgICAwLCAgICAyMywgICAgNzcsICAgICAwLCAgICAyNCwgICAgNzcsICAgICAwLCAgICAyNSwKKyAgICA3NywgICAgIDAsICAgIDI1LCAgICA5OSwgICAgNzcsICAgICAwLCAgICAyNywgICAyMTksICAgIDU5LCAgICA5OSwKKyAgICA3NiwgICAgNzcsICAgICAwLCAgICAyNywgICAyMTksICAgIDU5LCAgICA5OSwgICAgMzgsICAgMjIxLCAgICA3NiwKKyAgICA3NywgICAgIDAsICAgIDI3LCAgIDIxOSwgICAgNTksICAgIDk5LCAgICAzOCwgICAyMjEsICAgIDM4LCAgIDIyMSwKKyAgICA3NiwgICAgNzcsICAgICAwLCAgICAyNywgICAyMTksICAgIDU5LCAgICA5OSwgICAgMzgsICAgMjIxLCAgICAzOCwKKyAgIDIyMSwgICAgMzgsICAgMjI0LCAgICA3NiwgICAgNzcsICAgICAwLCAgICAyNiwgICAgOTcsICAgIDc3LCAgICAgMCwKKyAgICAyNiwgICAgNTAsICAgIDk5LCAgICA3NywgICAgIDAsICAgIDc3LCAgICAgMCwgICAyMTYsICAgICAwLCAgICAgMCwKKyAgICAxOSwgICAgNTksICAgMTEzLCAgICA3NiwgICAyMTcsICAgMjA0LCAgICAgMCwgICAgMjEsICAgMTA3LCAgICAzOCwKKyAgICAgMCwgICAgMjEsICAgMTA3LCAgICAxMCwgICAxMDcsICAgIDM4LCAgICAgMCwgICAgMjIsICAgIDM4LCAgICAgMCwKKyAgICA5NywgICAgMzgsICAgICAwLCAgICAgMCwgICAgIDcsICAgICAwLCAgICAgMCwgICAgOTksICAgICAwLCAgICAgMCwKKyAgIDIyMiwgICAgIDAsICAgMjIzLCAgICAgMCwgICAyMjIsICAgIDgxLCAgIDIyMywgICAgIDAsICAgICA5LCAgICA1OSwKKyAgICA5OSwgICAgNzYsICAgICAwLCAgIDExNSwgICAgIDAsICAgMjI0LCAgICA4MSwgICAxMTUsICAgICAwLCAgICAgMCwKKyAgIDIyNiwgICAyMjcsICAgICAwLCAgIDIyOSwgICAgNzYsICAgICAwLCAgICAgMCwgICAyMzAsICAgIDc3LCAgIDIyOCwKKyAgIDIyNywgICAgIDAsICAgICAxLCAgICA3NiwgICAgIDAsICAgICAwLCAgICAxMCwgICAgIDAsICAgMjMwLCAgICAgMCwKKyAgIDIzMCwgICAgODEsICAgIDEwLCAgICAgMCwgICAyMzEsICAgICAwLCAgIDIzMCwgICAgODEsICAgMjMxLCAgICAgMCwKKyAgIDEyNSwgICAxMjIsICAgMTY3LCAgIDE0MiwgICAgIDAsICAgMTI1LCAgIDEyMiwgICAxNjgsICAgMTQyLCAgICAgMCwKKyAgIDEyNSwgICAxMjIsICAgMTg0LCAgIDE0MiwgICAgIDAsICAgMTI5LCAgIDEyMiwgICAxNjgsICAgMTQyLCAgICAgMCwKKyAgIDEyOSwgICAxMjIsICAgMTg0LCAgIDE0MiwgICAgIDAsICAgICAwLCAgIDIzMywgICAyMzQsICAgICAwLCAgIDIyNywKKyAgICAgMCwgICAyMzUsICAgIDc2LCAgICAgMCwgICAgIDMsICAgICAwLCAgIDIzNSwgICAgODEsICAgICAzLCAgICAgMCwKKyAgICA5NywgICAgIDAsICAgMjM2LCAgICA4MSwgICAgOTcsICAgICAwLCAgICAzMSwgICAgIDAKK307CisKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlybGluZVtdID0geyAwLAorICAgMjM2LCAgIDI0MSwgICAyNTUsICAgMjU3LCAgIDI1NywgICAyNTgsICAgMjYwLCAgIDI2MiwgICAyNjMsICAgMjcxLAorICAgMjc1LCAgIDI4NiwgICAyOTEsICAgMjk2LCAgIDI5OCwgICAzMDAsICAgMzAxLCAgIDMwMiwgICAzMDcsICAgMzE0LAorICAgMzE2LCAgIDMyMSwgICAzMjYsICAgMzMyLCAgIDMzNCwgICAzMzksICAgMzQ0LCAgIDM1MCwgICAzNTIsICAgMzU3LAorICAgMzY0LCAgIDM2NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc3LCAgIDM3OSwgICAzODEsICAgMzg1LAorICAgMzg5LCAgIDM5MiwgICAzOTUsICAgMzk4LCAgIDQwMiwgICA0MDQsICAgNDA3LCAgIDQxMCwgICA0MTQsICAgNDQyLAorICAgNDQ4LCAgIDQ1MSwgICA0NTQsICAgNDU3LCAgIDQ1OSwgICA0NjMsICAgNDY3LCAgIDQ3MSwgICA0NzMsICAgNDc2LAorICAgNDgwLCAgIDUwNywgICA1MDksICAgNTExLCAgIDUxMywgICA1MTUsICAgNTE3LCAgIDUxOSwgICA1MjEsICAgNTIzLAorICAgNTI1LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywgICA1MzcsICAgNTM5LCAgIDU0MywgICA1NDUsICAgNTQ4LAorICAgNTUyLCAgIDU1NCwgICA1NjEsICAgNTY0LCAgIDU2NywgICA1NzMsICAgNjcyLCAgIDY3MywgICA2NzUsICAgNjgxLAorICAgNjgzLCAgIDY5NywgICA3MjAsICAgNzIyLCAgIDcyNCwgICA3MjgsICAgNzM0LCAgIDczNiwgICA3NDEsICAgNzQzLAorICAgNzQ4LCAgIDc1MCwgICA3NTEsICAgNzYxLCAgIDc2NiwgICA3NjgsICAgNzY5LCAgIDc3MCwgICA3NzcsICAgNzgzLAorICAgNzg4LCAgIDc5MSwgICA3OTksICAgODA0LCAgIDgwNiwgICA4MDcsICAgODA4LCAgIDgxNSwgICA4MjYsICAgODMwLAorICAgODM2LCAgIDg0MSwgICA4NDYsICAgODUxLCAgIDg1MywgICA4NTUsICAgODY0LCAgIDg2NywgICA4NzEsICAgODczLAorICAgODc1LCAgIDg4MCwgICA4ODQsICAgODg3LCAgIDg5MSwgICA4OTQsICAgODk2LCAgIDkwOCwgICA5MTEsICAgOTEzLAorICAgOTE1LCAgIDkxOSwgICA5MjMsICAgOTI1LCAgIDkyOCwgICA5NDEsICAgOTQ0LCAgIDk0OCwgICA5NTAsICAgOTU4LAorICAgOTU5LCAgIDk2MCwgICA5NjQsICAgOTY2LCAgIDk3MiwgICA5NzMsICAgOTc0LCAgIDk3NywgICA5NzksICAgOTgyLAorICAgOTg0LCAgIDk4NywgICA5OTAsICAgOTk2LCAgMTAwMywgIDEwMDUsICAxMDEyLCAgMTAxOSwgIDEwMjIsICAxMDI5LAorICAxMDMyLCAgMTAzNiwgIDEwMzksICAxMDQzLCAgMTA0OCwgIDEwNTEsICAxMDU1LCAgMTA1OCwgIDEwNjAsICAxMDYyLAorICAxMDY0LCAgMTA3MSwgIDEwNzMsICAxMDc0LCAgMTA3NSwgIDEwODAsICAxMDgyLCAgMTA4NywgIDEwOTUsICAxMTAwLAorICAxMTA0LCAgMTEwNywgIDExMDksICAxMTE0LCAgMTExNywgIDExMTksICAxMTIxLCAgMTEyNSwgIDExMjgsICAxMTI4LAorICAxMTMxLCAgMTEzMSwgIDExMzQsICAxMTM0LCAgMTEzNywgIDExMzcsICAxMTQwLCAgMTE0MiwgIDExNTMsICAxMTYxLAorICAxMTY1LCAgMTE3NiwgIDExODQsICAxMTkxLCAgMTE5MywgIDExOTgsICAxMjAxLCAgMTIwNiwgIDEyMDgsICAxMjEwLAorICAxMjE3LCAgMTIxOSwgIDEyMjcsICAxMjMzLCAgMTIzNSwgIDEyMzcsICAxMjQ0LCAgMTI0NiwgIDEyNTIsICAxMjU4LAorICAxMjYwLCAgMTI2MiwgIDEyNjQsICAxMjcxLCAgMTI3MywgIDEyNzYsICAxMjgxLCAgMTI4MywgIDEyODcsICAxMjg5LAorICAxMjkxLCAgMTI5MywgIDEyOTcsICAxMjk5LCAgMTMwMiwgIDEzMDUsICAxMzA4LCAgMTMxMSwgIDEzMTUsICAxMzE3LAorICAxMzIwLCAgMTMyMiwgIDEzMjYsICAxMzI5LCAgMTMzNCwgIDEzMzYsICAxMzM4LCAgMTM1MiwgIDEzNTksICAxMzY0LAorICAxMzcwLCAgMTM3NSwgIDEzNzcsICAxMzgyLCAgMTM4NCwgIDEzODgsICAxMzkyLCAgMTM5NiwgIDE0MDYsICAxNDA4LAorICAxNDEzLCAgMTQxOCwgIDE0MjEsICAxNDI1LCAgMTQyOCwgIDE0MzIsICAxNDM1LCAgMTQzOCwgIDE0NDEsICAxNDQ1LAorICAxNDQ4LCAgMTQ1MiwgIDE0NTYsICAxNDU4LCAgMTQ2MCwgIDE0NjIsICAxNDY0LCAgMTQ2NiwgIDE0NjgsICAxNDcwLAorICAxNDgwLCAgMTQ4OCwgIDE0OTAsICAxNDkyLCAgMTQ5NiwgIDE0OTgsICAxNTAxLCAgMTUwNCwgIDE1MTUsICAxNTE3LAorICAxNTIyLCAgMTUyNCwgIDE1MjcsICAxNTQxLCAgMTU0NCwgIDE1NDcsICAxNTQ5LCAgMTU1NywgIDE1NjUsICAxNTc2LAorICAxNTgxLCAgMTU4NCwgIDE1OTcsICAxNjA1LCAgMTYwOSwgIDE2MTMsICAxNjE3LCAgMTYyMywgIDE2MjcsICAxNjMyLAorICAxNjM1LCAgMTY0MCwgIDE2NDMsICAxNjQ0LCAgMTY2MSwgIDE2NjYsICAxNjY5LCAgMTY4MSwgIDE2ODMsICAxNjkzLAorICAxNzAzLCAgMTcwNCwgIDE3MTIsICAxNzE1LCAgMTcyNywgIDE3MzEsICAxNzQ4LCAgMTc1OCwgIDE3NjcsICAxNzcyLAorICAxNzc3LCAgMTc4MiwgIDE3ODYsICAxNzkwLCAgMTgwMSwgIDE4MDgsICAxODE1LCAgMTgyMiwgIDE4MzMsICAxODM5LAorICAxODQyLCAgMTg0NywgIDE4NzAsICAxOTA0LCAgMTkyOSwgIDE5NjAsICAxOTc1LCAgMTk4NiwgIDE5OTAsICAxOTk0LAorICAxOTk3LCAgMjAwMiwgIDIwMDQsICAyMDA3LCAgMjAwOSwgIDIwMTMsICAyMDE4LCAgMjAyMSwgIDIwMjcsICAyMDMyLAorICAyMDM3LCAgMjAzOSwgIDIwNDgsICAyMDQ5LCAgMjA1NSwgIDIwNTcsICAyMDY3LCAgMjA2OSwgIDIwNzMsICAyMDc2LAorICAyMDgyLCAgMjA5MiwgIDIxMDEsICAyMTEwLCAgMjEyMCwgIDIxMzQsICAyMTM5LCAgMjE0NCwgIDIxNDYsICAyMTU1LAorICAyMTU4LCAgMjE2MywgIDIxNjYsICAyMTcwCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHl5dG5hbWVbXSA9IHsgICAiJCIsImVycm9yIiwiJHVuZGVmaW5lZC4iLCJJREVOVElGSUVSIiwKKyJUWVBFTkFNRSIsIlNDU1BFQyIsIlRZUEVTUEVDIiwiVFlQRV9RVUFMIiwiQ09OU1RBTlQiLCJTVFJJTkciLCJFTExJUFNJUyIsIlNJWkVPRiIsCisiRU5VTSIsIlNUUlVDVCIsIlVOSU9OIiwiSUYiLCJFTFNFIiwiV0hJTEUiLCJETyIsIkZPUiIsIlNXSVRDSCIsIkNBU0UiLCJERUZBVUxUIiwKKyJCUkVBSyIsIkNPTlRJTlVFIiwiUkVUVVJOIiwiR09UTyIsIkFTTV9LRVlXT1JEIiwiVFlQRU9GIiwiQUxJR05PRiIsIkFUVFJJQlVURSIsCisiRVhURU5TSU9OIiwiTEFCRUwiLCJSRUFMUEFSVCIsIklNQUdQQVJUIiwiQVNTSUdOIiwiJz0nIiwiJz8nIiwiJzonIiwiT1JPUiIsCisiQU5EQU5EIiwiJ3wnIiwiJ14nIiwiJyYnIiwiRVFDT01QQVJFIiwiQVJJVEhDT01QQVJFIiwiTFNISUZUIiwiUlNISUZUIiwiJysnIiwKKyInLSciLCInKiciLCInLyciLCInJSciLCJVTkFSWSIsIlBMVVNQTFVTIiwiTUlOVVNNSU5VUyIsIkhZUEVSVU5BUlkiLCJQT0lOVFNBVCIsCisiJy4nIiwiJygnIiwiJ1snIiwiSU5URVJGQUNFIiwiSU1QTEVNRU5UQVRJT04iLCJFTkQiLCJTRUxFQ1RPUiIsIkRFRlMiLCJFTkNPREUiLAorIkNMQVNTTkFNRSIsIlBVQkxJQyIsIlBSSVZBVEUiLCJQUk9URUNURUQiLCJQUk9UT0NPTCIsIk9CSkVDVE5BTUUiLCJDTEFTUyIsIkFMSUFTIiwKKyJPQkpDX1NUUklORyIsIicpJyIsIic7JyIsIid9JyIsIid+JyIsIichJyIsIicsJyIsIid7JyIsIiddJyIsInByb2dyYW0iLCJleHRkZWZzIiwKKyJAMSIsIkAyIiwiZXh0ZGVmIiwiZGF0YWRlZiIsImZuZGVmIiwiQDMiLCJANCIsIkA1IiwiQDYiLCJANyIsIkA4IiwiaWRlbnRpZmllciIsCisidW5vcCIsImV4cHIiLCJleHBybGlzdCIsIm5vbm51bGxfZXhwcmxpc3QiLCJ1bmFyeV9leHByIiwic2l6ZW9mIiwiYWxpZ25vZiIsCisiY2FzdF9leHByIiwiQDkiLCJleHByX25vX2NvbW1hcyIsIkAxMCIsIkAxMSIsIkAxMiIsIkAxMyIsIkAxNCIsInByaW1hcnkiLCJAMTUiLAorInN0cmluZyIsIm9sZF9zdHlsZV9wYXJtX2RlY2xzIiwibGluZW5vX2RhdGFkZWNsIiwiZGF0YWRlY2xzIiwiZGF0YWRlY2wiLCJsaW5lbm9fZGVjbCIsCisiZGVjbHMiLCJzZXRzcGVjcyIsInNldGF0dHJzIiwiZGVjbCIsInR5cGVkX2RlY2xzcGVjcyIsInJlc2VydmVkX2RlY2xzcGVjcyIsCisidHlwZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyIiwicmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyIiwiZGVjbG1vZHMiLAorImRlY2xtb2RzX25vX3ByZWZpeF9hdHRyIiwidHlwZWRfdHlwZXNwZWNzIiwicmVzZXJ2ZWRfdHlwZXNwZWNxdWFscyIsInR5cGVzcGVjIiwKKyJ0eXBlc3BlY3F1YWxfcmVzZXJ2ZWQiLCJpbml0ZGVjbHMiLCJub3R5cGVfaW5pdGRlY2xzIiwibWF5YmVhc20iLCJpbml0ZGNsIiwKKyJAMTYiLCJub3R5cGVfaW5pdGRjbCIsIkAxNyIsIm1heWJlX2F0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGUiLCJhdHRyaWJ1dGVfbGlzdCIsCisiYXR0cmliIiwiYW55X3dvcmQiLCJpbml0IiwiQDE4IiwiaW5pdGxpc3RfbWF5YmVfY29tbWEiLCJpbml0bGlzdDEiLCJpbml0ZWx0IiwKKyJAMTkiLCJAMjAiLCJAMjEiLCJAMjIiLCJAMjMiLCJAMjQiLCJuZXN0ZWRfZnVuY3Rpb24iLCJAMjUiLCJAMjYiLCJub3R5cGVfbmVzdGVkX2Z1bmN0aW9uIiwKKyJAMjciLCJAMjgiLCJkZWNsYXJhdG9yIiwiYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yIiwicGFybV9kZWNsYXJhdG9yIiwibm90eXBlX2RlY2xhcmF0b3IiLAorInN0cnVjdHNwIiwiQDI5IiwiQDMwIiwiQDMxIiwiQDMyIiwibWF5YmVjb21tYSIsIm1heWJlY29tbWFfd2FybiIsImNvbXBvbmVudF9kZWNsX2xpc3QiLAorImNvbXBvbmVudF9kZWNsX2xpc3QyIiwiY29tcG9uZW50X2RlY2wiLCJjb21wb25lbnRzIiwiY29tcG9uZW50X2RlY2xhcmF0b3IiLAorImVudW1saXN0IiwiZW51bWVyYXRvciIsInR5cGVuYW1lIiwiYWJzZGNsIiwibm9uZW1wdHlfdHlwZV9xdWFscyIsInR5cGVfcXVhbHMiLAorImFic2RjbDEiLCJzdG10cyIsImxpbmVub19zdG10X29yX2xhYmVscyIsInhzdG10cyIsImVycnN0bXQiLCJwdXNobGV2ZWwiLCJtYXliZV9sYWJlbF9kZWNscyIsCisibGFiZWxfZGVjbHMiLCJsYWJlbF9kZWNsIiwiY29tcHN0bXRfb3JfZXJyb3IiLCJjb21wc3RtdCIsInNpbXBsZV9pZiIsImlmX3ByZWZpeCIsCisiZG9fc3RtdF9zdGFydCIsIkAzMyIsInNhdmVfZmlsZW5hbWUiLCJzYXZlX2xpbmVubyIsImxpbmVub19sYWJlbGVkX3N0bXQiLCJsaW5lbm9fc3RtdF9vcl9sYWJlbCIsCisic3RtdF9vcl9sYWJlbCIsInN0bXQiLCJAMzQiLCJAMzUiLCJAMzYiLCJAMzciLCJAMzgiLCJAMzkiLCJANDAiLCJhbGxfaXRlcl9zdG10IiwKKyJhbGxfaXRlcl9zdG10X3NpbXBsZSIsIkA0MSIsImxhYmVsIiwibWF5YmVfdHlwZV9xdWFsIiwieGV4cHIiLCJhc21fb3BlcmFuZHMiLAorIm5vbm51bGxfYXNtX29wZXJhbmRzIiwiYXNtX29wZXJhbmQiLCJhc21fY2xvYmJlcnMiLCJwYXJtbGlzdCIsIkA0MiIsInBhcm1saXN0XzEiLAorIkA0MyIsInBhcm1saXN0XzIiLCJwYXJtcyIsInBhcm0iLCJwYXJtbGlzdF9vcl9pZGVudGlmaWVycyIsIkA0NCIsInBhcm1saXN0X29yX2lkZW50aWZpZXJzXzEiLAorImlkZW50aWZpZXJzIiwiaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzIiwiZXh0ZW5zaW9uIiwiIgorfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyMVtdID0geyAgICAgMCwKKyAgICA4NCwgICAgODQsICAgIDg2LCAgICA4NSwgICAgODcsICAgIDg1LCAgICA4OCwgICAgODgsICAgIDg4LCAgICA4OCwKKyAgICA4OSwgICAgODksICAgIDg5LCAgICA4OSwgICAgODksICAgIDg5LCAgICA4OSwgICAgODksICAgIDkxLCAgICA5MiwKKyAgICA5MCwgICAgOTAsICAgIDkzLCAgICA5NCwgICAgOTAsICAgIDkwLCAgICA5NSwgICAgOTYsICAgIDkwLCAgICA5MCwKKyAgICA5NywgICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OSwKKyAgIDEwMCwgICAxMDAsICAgMTAxLCAgIDEwMSwgICAxMDIsICAgMTAyLCAgIDEwMiwgICAxMDIsICAgMTAyLCAgIDEwMiwKKyAgIDEwMiwgICAxMDIsICAgMTAyLCAgIDEwMiwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEwNiwKKyAgIDEwNSwgICAxMDcsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwNywKKyAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwNywgICAxMDgsICAgMTA3LCAgIDEwOSwgICAxMDcsICAgMTEwLCAgIDExMSwKKyAgIDEwNywgICAxMTIsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywKKyAgIDExNCwgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTE1LCAgIDExNSwKKyAgIDExNiwgICAxMTYsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE4LCAgIDExOCwgICAxMTgsICAgMTE5LCAgIDExOSwKKyAgIDExOSwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjIsICAgMTIzLCAgIDEyNCwKKyAgIDEyNCwgICAxMjQsICAgMTI0LCAgIDEyNCwgICAxMjQsICAgMTI0LCAgIDEyNSwgICAxMjUsICAgMTI2LCAgIDEyNiwKKyAgIDEyNiwgICAxMjYsICAgMTI3LCAgIDEyNywgICAxMjgsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LCAgIDEyOSwKKyAgIDEyOSwgICAxMzAsICAgMTMwLCAgIDEzMCwgICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMywKKyAgIDEzMywgICAxMzMsICAgMTMzLCAgIDEzMywgICAxMzQsICAgMTM0LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNiwKKyAgIDEzNiwgICAxMzcsICAgMTM3LCAgIDEzOSwgICAxMzgsICAgMTM4LCAgIDE0MSwgICAxNDAsICAgMTQwLCAgIDE0MiwKKyAgIDE0MiwgICAxNDMsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgMTQ1LCAgIDE0NiwgICAxNDYsICAgMTQ2LCAgIDE0NiwKKyAgIDE0NiwgICAxNDcsICAgMTQ3LCAgIDE0NywgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNDgsICAgMTQ4LCAgIDE1MCwKKyAgIDE1MCwgICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTUyLCAgIDE1MiwgICAxNTQsICAgMTUyLCAgIDE1NSwKKyAgIDE1MiwgICAxNTYsICAgMTUyLCAgIDE1NywgICAxNTIsICAgMTU4LCAgIDE1MiwgICAxNjAsICAgMTYxLCAgIDE1OSwKKyAgIDE2MywgICAxNjQsICAgMTYyLCAgIDE2NSwgICAxNjUsICAgMTY2LCAgIDE2NiwgICAxNjYsICAgMTY2LCAgIDE2NiwKKyAgIDE2NiwgICAxNjYsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OCwKKyAgIDE2OCwgICAxNjgsICAgMTY4LCAgIDE2OCwgICAxNjgsICAgMTcwLCAgIDE2OSwgICAxNjksICAgMTY5LCAgIDE3MSwKKyAgIDE2OSwgICAxNjksICAgMTY5LCAgIDE3MiwgICAxNjksICAgMTczLCAgIDE2OSwgICAxNjksICAgMTc0LCAgIDE3NCwKKyAgIDE3NSwgICAxNzUsICAgMTc2LCAgIDE3NiwgICAxNzcsICAgMTc3LCAgIDE3NywgICAxNzgsICAgMTc4LCAgIDE3OCwKKyAgIDE3OCwgICAxNzgsICAgMTc4LCAgIDE3OSwgICAxNzksICAgMTgwLCAgIDE4MCwgICAxODAsICAgMTgxLCAgIDE4MSwKKyAgIDE4MSwgICAxODIsICAgMTgyLCAgIDE4MywgICAxODMsICAgMTg0LCAgIDE4NCwgICAxODUsICAgMTg1LCAgIDE4NiwKKyAgIDE4NiwgICAxODcsICAgMTg3LCAgIDE4NywgICAxODcsICAgMTg3LCAgIDE4NywgICAxODcsICAgMTg3LCAgIDE4NywKKyAgIDE4OCwgICAxODksICAgMTg5LCAgIDE4OSwgICAxOTAsICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5MywKKyAgIDE5NCwgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTYsICAgMTk3LCAgIDE5NywgICAxOTcsICAgMTk3LCAgIDE5OCwKKyAgIDE5OCwgICAxOTksICAgMjAxLCAgIDIwMCwgICAyMDIsICAgMjAzLCAgIDIwNCwgICAyMDQsICAgMjA1LCAgIDIwNiwKKyAgIDIwNiwgICAyMDcsICAgMjA3LCAgIDIwNywgICAyMDgsICAgMjA3LCAgIDIwNywgICAyMDcsICAgMjA5LCAgIDIxMCwKKyAgIDIwNywgICAyMDcsICAgMjA3LCAgIDIxMSwgICAyMTIsICAgMjEzLCAgIDIwNywgICAyMTQsICAgMjA3LCAgIDIwNywKKyAgIDIwNywgICAyMDcsICAgMjA3LCAgIDIwNywgICAyMDcsICAgMjA3LCAgIDIwNywgICAyMDcsICAgMjA3LCAgIDIwNywKKyAgIDIxNSwgICAyMTcsICAgMjE2LCAgIDIxOCwgICAyMTgsICAgMjE4LCAgIDIxOCwgICAyMTksICAgMjE5LCAgIDIyMCwKKyAgIDIyMCwgICAyMjEsICAgMjIxLCAgIDIyMiwgICAyMjIsICAgMjIzLCAgIDIyNCwgICAyMjQsICAgMjI2LCAgIDIyNSwKKyAgIDIyNywgICAyMjgsICAgMjI3LCAgIDIyNywgICAyMjksICAgMjI5LCAgIDIyOSwgICAyMjksICAgMjMwLCAgIDIzMCwKKyAgIDIzMSwgICAyMzEsICAgMjMxLCAgIDIzMSwgICAyMzEsICAgMjMzLCAgIDIzMiwgICAyMzQsICAgMjM0LCAgIDIzNSwKKyAgIDIzNSwgICAyMzYsICAgMjM2LCAgIDIzNworfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cjJbXSA9IHsgICAgIDAsCisgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgNSwgICAgIDIsCisgICAgIDMsICAgICA0LCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMCwgICAgIDAsCisgICAgIDcsICAgICA0LCAgICAgMCwgICAgIDAsICAgICA3LCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgNiwgICAgIDMsCisgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgIDQsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDAsCisgICAgIDcsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAwLCAgICAgNCwgICAgIDAsICAgICA0LCAgICAgMCwgICAgIDAsCisgICAgIDcsICAgICAwLCAgICAgNSwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsCisgICAgIDAsICAgICA0LCAgICAgNCwgICAgIDQsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsCisgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDQsCisgICAgIDIsICAgICAyLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDQsCisgICAgIDQsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsCisgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDEsCisgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsCisgICAgIDMsICAgICAwLCAgICAgNCwgICAgIDAsICAgICA2LCAgICAgMywgICAgIDAsICAgICA2LCAgICAgMywgICAgIDAsCisgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDYsICAgICAxLCAgICAgMywgICAgIDAsICAgICAxLCAgICAgNCwgICAgIDYsCisgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICA0LCAgICAgMSwgICAgIDAsCisgICAgIDIsICAgICAxLCAgICAgMywgICAgIDEsICAgICAwLCAgICAgNCwgICAgIDEsICAgICAwLCAgICAgOCwgICAgIDAsCisgICAgIDYsICAgICAwLCAgICAgNSwgICAgIDAsICAgICA0LCAgICAgMCwgICAgIDUsICAgICAwLCAgICAgMCwgICAgIDUsCisgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICA0LCAgICAgMywgICAgIDMsCisgICAgIDMsICAgICAxLCAgICAgMywgICAgIDQsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywgICAgIDMsCisgICAgIDMsICAgICA0LCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMCwgICAgIDcsICAgICA1LCAgICAgMiwgICAgIDAsCisgICAgIDcsICAgICA1LCAgICAgMiwgICAgIDAsICAgICA4LCAgICAgMCwgICAgIDcsICAgICAyLCAgICAgMCwgICAgIDEsCisgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsCisgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDMsCisgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsCisgICAgIDIsICAgICAzLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsCisgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDEsCisgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDYsICAgICA1LCAgICAgNSwgICAgIDIsCisgICAgIDIsICAgICA0LCAgICAgMCwgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgMywgICAgIDEsCisgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDAsCisgICAgIDcsICAgICA1LCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgICAwLCAgICAgNiwgICAgIDIsCisgICAgIDIsICAgICAyLCAgICAgMywgICAgIDYsICAgICA4LCAgICAxMCwgICAgMTIsICAgICAzLCAgICAgNCwgICAgIDEsCisgICAgIDEsICAgICAwLCAgICAgNiwgICAgIDMsICAgICA1LCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsCisgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDIsCisgICAgIDIsICAgICAwLCAgICAgNCwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsCisgICAgIDQsICAgICA0LCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsCisgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmFjdFtdID0geyAgICAgMywKKyAgICAgNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNTIsICAgMTQzLCAgIDE1MCwgICAxNDIsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAzOTQsICAgIDE4LCAgICAgNCwgICAgIDgsICAgICA3LCAgICAgMCwKKyAgIDExOCwgICAxMTgsICAgMTM4LCAgIDEyOSwgICAxMzksICAgMTcyLCAgIDE1MSwgICAgIDAsICAgICA2LCAgICAxNiwKKyAgICAxNywgICAgMzEsICAgIDMyLCAgIDI0NiwgICAyNDgsICAgMjU1LCAgIDIzOSwgICAyNTUsICAgMjQzLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgMjM1LCAgIDI4MCwgICAgIDAsICAgICAwLCAgIDE2MCwgICAxMTksICAgICAwLCAgICAxNSwKKyAgICAgMCwgICAgMTQsICAgICAwLCAgIDE0MCwgICAxMjksICAgMTQxLCAgIDE0NSwgICAxNDQsICAgMTI3LCAgIDE3MywKKyAgICAxMCwgICAgIDAsICAgMjQ0LCAgICAgMCwgICAgIDAsICAgMjM2LCAgICAgMCwgICAyNDAsICAgIDg2LCAgICA4NywKKyAgICA5OSwgICAgNTYsICAgIDU3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMywgICAgMzUsICAgIDM0LCAgICAgMCwKKyAgICAzNiwgICAgMzcsICAgICAwLCAgICAzOCwgICAgMzksICAgICAwLCAgICAgMCwgICAgNDAsICAgIDU4LCAgICAgMCwKKyAgICAgMCwgICAgNjIsICAgIDQzLCAgICA0NSwgICAgODgsICAgICAwLCAgIDI3OCwgICAgIDAsICAgMjc2LCAgIDE0OCwKKyAgICAgMCwgICAyNzYsICAgMTc3LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAgMCwgICAgIDAsICAgIDMwLCAgICAgMCwKKyAgIDM4NiwgICAgIDAsICAgICAwLCAgIDE3MCwgICAyMjIsICAgMjgwLCAgICAgMCwgICAgIDAsICAgMTU4LCAgIDExOSwKKyAgICAgMCwgICAyMTQsICAgMjE1LCAgICAgMCwgICAgIDAsICAgMTI4LCAgIDEzMSwgICAxNTUsICAgMTU2LCAgIDEzMCwKKyAgIDEzMiwgICAxNTcsICAgMjcxLCAgIDI3MiwgICAyNTEsICAgMjY5LCAgICAgMCwgICAxNzAsICAgMjYyLCAgIDI1NywKKyAgIDExOCwgICAyNTQsICAgMTE4LCAgICAgMCwgICAyNTUsICAgMTcwLCAgIDI1NSwgICAgNTQsICAgIDU1LCAgICA0OSwKKyAgICA0NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA1MCwKKyAgICAgMCwgICAgNTIsICAgICAwLCAgICAgMCwgICAgNzksICAgIDc3LCAgICA3NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywKKyAgICA5OCwgICAgIDAsICAgICAwLCAgICA0MSwgICAgIDAsICAgMTAwLCAgICA0NywgICAxNTMsICAgMjgwLCAgIDM2OSwKKyAgICAgMCwgICAyNzQsICAgMjc3LCAgIDE0NiwgICAxNTQsICAgMjc5LCAgIDE0OCwgICAyNzUsICAgMTgzLCAgIDE4NCwKKyAgIDE4NSwgICAxODIsICAgICAwLCAgIDE3NSwgICAxNzgsICAgMjgxLCAgIDIzMSwgICAyMzAsICAgMTYxLCAgIDE2MiwKKyAgIDIzNCwgICAgIDAsICAgMjI5LCAgICAgMCwgICAyMzMsICAgICAwLCAgICAgMCwgICAgMjgsICAgICAwLCAgIDMxNSwKKyAgIDEwNiwgICAzMTYsICAgMTY5LCAgIDE3MSwgICAgIDAsICAgICAwLCAgICAxMywgICAgIDAsICAgICAwLCAgICAyMiwKKyAgICAgMCwgICAxNzAsICAgMzg2LCAgICAgMCwgICAgMTIsICAgIDI2LCAgICAgMCwgICAgIDAsICAgMjUyLCAgICAgMCwKKyAgIDI1MSwgICAyMzgsICAgMzE1LCAgIDI1NiwgICAzMTUsICAgMjYzLCAgICAgMCwgICAyNDIsICAgICAwLCAgICA5MCwKKyAgICA4OSwgICAyOTgsICAgICAwLCAgICAgMCwgICAgIDksICAgIDQ0LCAgICAgMCwgICAgIDAsICAgIDg1LCAgICA4NCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsICAgIDc0LCAgICA3MiwgICAgNzEsICAgIDcwLCAgICA2OCwKKyAgICA2OSwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA5NiwgICAgOTUsICAgICAwLCAgICA0MiwKKyAgICAgMCwgICAyODQsICAgICAwLCAgIDI4OCwgICAgIDAsICAgMjkwLCAgICAgMCwgICAzNjksICAgICAwLCAgIDE0OSwKKyAgIDE0NywgICAgIDAsICAgMTc3LCAgICA0MSwgICAgIDAsICAgICAwLCAgIDM5MCwgICAzNzYsICAgMTE4LCAgIDExOCwKKyAgIDM4OCwgICAgIDAsICAgMzc3LCAgIDM3OSwgICAzODcsICAgICAwLCAgIDIzMiwgICAyOTcsICAgICAwLCAgIDEwOCwKKyAgIDEwMywgICAxMDcsICAgICAwLCAgIDE2NywgICAyMjAsICAgMjE2LCAgIDE1OSwgICAyMjEsICAgIDIwLCAgIDE2NiwKKyAgIDIxNywgICAyMTksICAgICAwLCAgICAyNCwgICAyNzMsICAgMjcwLCAgIDE3MCwgICAgIDAsICAgMjU4LCAgIDI2NCwKKyAgIDMxNiwgICAyNjAsICAgMTcwLCAgIDE3MCwgICAzMDYsICAgMjk5LCAgICA5MiwgICAgNjAsICAgIDU5LCAgICA1MSwKKyAgICA1MywgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzYsICAgIDkzLCAgICA5NCwgICAyODMsICAgMjgyLCAgIDM3MCwKKyAgIDI4OSwgICAyODUsICAgMjg3LCAgICAgMCwgICAxNzQsICAgMTc2LCAgICA4NiwgICAgIDAsICAgMTYzLCAgIDM3NCwKKyAgIDI3NiwgICAyNzYsICAgMzcxLCAgIDM3MiwgICAgIDAsICAgMzg5LCAgICAgMCwgICAgIDAsICAgIDI5LCAgIDMwNCwKKyAgIDEwNCwgICAxMTgsICAgMTE4LCAgIDEzNSwgICAgIDAsICAgICAwLCAgIDE2NCwgICAyMTgsICAgICAwLCAgIDI0NywKKyAgIDE3MCwgICAzMTUsICAgICAwLCAgIDIzNywgICAyNDEsICAgICAwLCAgICAgMCwgICAzMDAsICAgMzAxLCAgICAgMCwKKyAgICA4MCwgICAgODMsICAgMjg2LCAgIDE3OSwgICAgIDAsICAgMTgxLCAgIDIyOCwgICAyODAsICAgMzY5LCAgIDExOSwKKyAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDI4MCwgICAxNzAsICAgMTcwLCAgICAgMCwgICAzNzgsICAgMzgwLCAgIDM5MSwKKyAgIDMwNSwgICAxMTEsICAgICAwLCAgIDExMiwgICAgIDAsICAgMTM1LCAgIDEzMywgICAxODksICAgMTg3LCAgIDE4NiwKKyAgIDE2OCwgICAgMjEsICAgICAwLCAgICAyNSwgICAyNDUsICAgMjY1LCAgICAgMCwgICAxNzAsICAgMzkyLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgMzE1LCAgICAgMCwgICAgIDAsICAgMTE1LCAgIDMxNiwgICAyOTIsICAgMzAyLCAgIDE5NywKKyAgICA4NiwgICAgIDAsICAgICAwLCAgIDE5NSwgICAgIDAsICAgMTk0LCAgICAgMCwgICAyNDksICAgMTkyLCAgICAgMCwKKyAgICAgMCwgICAyODQsICAgICAwLCAgIDM4NiwgICAgIDAsICAgMzgxLCAgIDM4MiwgICAzODMsICAgMjg0LCAgIDM4NCwKKyAgIDM4NSwgICAzNzMsICAgICAwLCAgICAgMCwgICAxNjIsICAgMTM0LCAgIDEzNywgICAxMzYsICAgICAwLCAgIDE2NSwKKyAgIDE3MCwgICAgIDAsICAgMjY2LCAgIDMwMywgICAgIDAsICAgMzA4LCAgIDExNywgICAxMTYsICAgMjk2LCAgICAgMCwKKyAgIDMwOSwgICAyOTQsICAgMzE2LCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjA0LCAgICA2MSwKKyAgICAgMCwgICAxOTEsICAgIDgxLCAgIDE4MCwgICAyMjYsICAgMjgwLCAgIDIyNywgICAyMjMsICAgMjI1LCAgICAgMCwKKyAgIDEwOSwgICAxMTAsICAgICAwLCAgIDI2OCwgICAxNzAsICAgMzkzLCAgIDMwNywgICAgIDAsICAgMTUyLCAgICAgMCwKKyAgIDMyOSwgICAzMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDM1OCwgICAzNTAsICAgICAwLCAgICAgMCwgICAxMTMsICAgMTE4LCAgIDExOCwgICAzMjIsICAgMzI3LCAgICAgMCwKKyAgICAgMCwgICAzMTksICAgMzIwLCAgIDMyMywgICAzNTEsICAgMzIxLCAgICAgMCwgICAyMDYsICAgICAwLCAgIDIwMiwKKyAgICAgMCwgICAgIDAsICAgMTkzLCAgICAgMCwgICAyMjQsICAgMTg4LCAgIDI2NywgICAgIDAsICAgICAwLCAgIDMxNSwKKyAgIDM2MCwgICAgIDAsICAgICAwLCAgIDM1NiwgICAzNDAsICAgMzQxLCAgIDM0MiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDM1OSwgICAgIDAsICAgMzU3LCAgIDMyNCwgICAxMjQsICAgICAwLCAgIDEyNSwgICAgIDAsICAgICAwLCAgIDMxMSwKKyAgIDMxNiwgICAzMTAsICAgMzMzLCAgICAgMCwgICAxMjYsICAgICAwLCAgICAgMCwgICAyMDAsICAgICAwLCAgIDE5NiwKKyAgIDIwNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAzNjEsICAgIDQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDM1NCwKKyAgIDM0MywgICAgIDAsICAgMzQ4LCAgICAgMCwgICAgIDAsICAgMTIyLCAgIDIwOCwgICAgIDAsICAgMTIzLCAgIDIxMSwKKyAgIDMyOCwgICAzMTUsICAgICAwLCAgICAgMCwgICAyMDcsICAgICAwLCAgICAgMCwgICAyMDMsICAgMzEyLCAgICAgMCwKKyAgIDMxNCwgICAzNTIsICAgMzM0LCAgIDMzOCwgICAgIDAsICAgMzQ5LCAgICAgMCwgICAxMjAsICAgICAwLCAgIDEyMSwKKyAgICAgMCwgICAzMjYsICAgMzE3LCAgIDMxNSwgICAgIDAsICAgMTk4LCAgIDIwMSwgICAzMzAsICAgMzE1LCAgIDM2MCwKKyAgIDMxNSwgICAzNTUsICAgMzYyLCAgICAgMCwgICAyMDksICAgMjEyLCAgIDMxOCwgICAzMzIsICAgICAwLCAgIDMxNSwKKyAgIDM1MywgICAgIDAsICAgMzM5LCAgICAgMCwgICAgIDAsICAgMzYzLCAgIDM2NCwgICAzNDQsICAgICAwLCAgICAgMCwKKyAgIDE5OSwgICAzMzEsICAgMzM1LCAgICAgMCwgICAzNjIsICAgICAwLCAgICAgMCwgICAyMTAsICAgMjEzLCAgIDM2MCwKKyAgICAgMCwgICAgIDAsICAgMzQ1LCAgIDM2NSwgICAgIDAsICAgMzY2LCAgICAgMCwgICAgIDAsICAgMzM2LCAgIDM2NywKKyAgICAgMCwgICAzNDYsICAgMzE1LCAgICAgMCwgICAgIDAsICAgMzM3LCAgIDM0NywgICAzNjgsICAgICAwLCAgICAgMCwKKyAgICAgMAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmZ290b1tdID0geyAgIDY3OSwKKyAgICAgMSwgICAgIDIsICAgICAzLCAgICAxNywgICAgMTgsICAgIDE5LCAgIDIzMSwgICAzNzYsICAgMjM3LCAgIDM3OSwKKyAgIDExMywgICAzMDksICAgNDQ1LCAgICA4NiwgICAxNTMsICAgMjc5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwKKyAgICA5MiwgICAzOTAsICAgIDkzLCAgIDI2NCwgICAyNjMsICAgMjYxLCAgIDQ1MCwgICAyNjIsICAgIDk0LCAgIDE1NCwKKyAgICA5NSwgICAyMTgsICAgMjE5LCAgIDIyMCwgICAzNzEsICAgNDMyLCAgIDQzMywgICAgMjAsICAgMTA4LCAgIDUyNSwKKyAgIDI5OSwgICAgNTksICAgMzcyLCAgIDQxNywgICAzMDAsICAgIDIzLCAgICA5OSwgICAxOTQsICAgIDI0LCAgIDEzMCwKKyAgIDExOCwgICAgNDYsICAgMTE0LCAgIDExOSwgICA0MjMsICAgIDQ3LCAgIDM3NSwgICAyMjMsICAgMjI0LCAgICAyNiwKKyAgIDIwMywgICAyMDQsICAgMjA1LCAgIDQyMSwgICA0NjksICAgNDQ3LCAgIDQ0OCwgICA0NDksICAgNDg4LCAgIDYzOSwKKyAgIDYwNywgICA1NzksICAgNTQyLCAgIDU3NiwgICA1OTYsICAgNjE5LCAgIDY0OSwgICA1OTksICAgNjIxLCAgIDY1MCwKKyAgIDIxMCwgICAxMjIsICAgNDk1LCAgIDEyMywgICAgMjcsICAgMTQ1LCAgIDE0NywgICAxMzcsICAgIDYyLCAgIDQ5MiwKKyAgIDI0MCwgICAgNjQsICAgIDY1LCAgIDE0MiwgICAzMjksICAgMzMwLCAgIDEzNSwgICAxMzYsICAgMTAxLCAgIDE5MiwKKyAgIDEwMiwgICAxMDQsICAgMTkzLCAgIDQzNCwgICA0MzUsICAgNDgwLCAgIDIyMSwgICAzMzYsICAgMzg3LCAgIDM4OCwKKyAgIDM4OSwgICAzNjksICAgMzcwLCAgIDUyOSwgICA1MzAsICAgNTMxLCAgIDU1MCwgICA1NzEsICAgMzEzLCAgIDU3MiwKKyAgIDQzOCwgICA1MzIsICAgNTMzLCAgIDYwMiwgICA1NDksICAgNjQwLCAgIDYzMCwgICA2NjAsICAgNjczLCAgIDYzMSwKKyAgIDUzNCwgICA1MzUsICAgNjI5LCAgIDUzNiwgICA1NjIsICAgNTg3LCAgIDY0NSwgICA2NDYsICAgNjQ3LCAgIDY3MSwKKyAgIDI4NCwgICAyODUsICAgMzAxLCAgIDQwNywgICAzMDIsICAgMzAzLCAgIDMwNCwgICAyMTMsICAgMjE0LCAgIDMwNSwKKyAgIDMwNiwgICA0MzAsICAgIDk2Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwYWN0W10gPSB7ICAgIDkwLAorICAgIDk5LCAgIDU4OCwgICA1ODgsICAgMzIxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgNzcsICAgIDc5LAorICAgIDg1LCAgICA0OSwgICAgNzUsICAgIDg3LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMTk0LAorICAgIDM3LCAgMjExNiwgICAyNDUsLTMyNzY4LCAgIDExOSwtMzI3NjgsLTMyNzY4LCAgIDU4OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDExMSwtMzI3NjgsICAgMTMzLC0zMjc2OCwgICAxNDMsICAxOTU4LAorICAxODkyLCAgIDE3OSwtMzI3NjgsLTMyNzY4LCAgIDE5NCwgICAxNjQsLTMyNzY4LCAgIDExOSwgIDEzNTIsLTMyNzY4LAorICAgNDU3LC0zMjc2OCwgICAxOTQsICAgMjQ1LC0zMjc2OCwgICAxMTksLTMyNzY4LC0zMjc2OCwgICA0MDQsLTMyNzY4LAorLTMyNzY4LCAgIDI2NywtMzI3NjgsICAgMTgxLCAgIDQxOSwtMzI3NjgsICAgMjAxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxOTU4LCAgMTk1OCwgICAzOTcsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxOTU4LAorLTMyNzY4LC0zMjc2OCwgICA4NDgsLTMyNzY4LC0zMjc2OCwgIDE5NTgsICAgMjI3LCAgIDIyOSwtMzI3NjgsICAxOTg1LAorICAyMDEyLC0zMjc2OCwgIDIyMDIsICAxMDkxLCAgIDI5OSwgIDE5NTgsLTMyNzY4LCAgIDI0MCwgICAyMDQsLTMyNzY4LAorICAgMjQyLCAgMTAwMiwgICA2OTksICAgNDQxLCAgIDE3MiwtMzI3NjgsICAgNDU3LCAgIDE5NCwtMzI3NjgsICAgMjY0LAorLTMyNzY4LCAgMTQyNywgICAzNjAsICAgMTE5LC0zMjc2OCwtMzI3NjgsICAgNDU3LCAgIDIxNywtMzI3NjgsICAgMTE5LAorICAgNzI0LCAgIDM0NCwgICAzOTIsICAgMjIwLCAgMTQxMiwgICA0MDQsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgMTE5LC0zMjc2OCwtMzI3NjgsICAgMjkyLCAgIDI1MCwtMzI3NjgsICAgMjY3LCAgIDExOSwtMzI3NjgsLTMyNzY4LAorICAgMzgxLCAgIDMwMCwgICAzMTMsICAgODIyLC0zMjc2OCwgICAxMTksLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDMxNywgICAzMjAsICAgMzI2LCAgIDM0MywtMzI3NjgsICAgMzQ3LCAgMTk1OCwgICA4NDgsLTMyNzY4LAorICAgODQ4LC0zMjc2OCwgIDE5NTgsICAxOTU4LCAgIDM5MCwtMzI3NjgsLTMyNzY4LCAgMTk1OCwgIDE5NTgsICAxOTU4LAorICAxOTU4LCAgMTk1OCwgIDE5NTgsICAxOTU4LCAgMTk1OCwgIDE5NTgsICAxOTU4LCAgMTk1OCwgIDE5NTgsLTMyNzY4LAorLTMyNzY4LCAgIDM5NywgICAzOTcsICAxOTU4LCAgMTk1OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMjA0LAorICAxNDg3LC0zMjc2OCwgICA0NDIsICAgMjc3LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICAxMDYsLTMyNzY4LCAgIDM3MSwtMzI3NjgsICAgMzkyLC0zMjc2OCwtMzI3NjgsICAgNDA4LAorICAgMzkyLCAgIDQzNCwtMzI3NjgsICAgNjM2LC0zMjc2OCwgICAzNTgsICAgMzcyLC0zMjc2OCwgICAyNjgsICAgIDU5LAorLTMyNzY4LC0zMjc2OCwgICA0MzMsICAgMTE5LCAgIDIyNiwgICAzNDYsLTMyNzY4LCAgIDQ1NywgICA0NTcsLTMyNzY4LAorICAgMzYwLCAgIDExOSwtMzI3NjgsICAxNTAwLC0zMjc2OCwtMzI3NjgsICAgMzYwLCAgMTk1OCwgICAzOTcsICAgMzg3LAorICAgMjUwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMzk0LC0zMjc2OCwgICAzOTYsLTMyNzY4LAorLTMyNzY4LCAgIDM5OSwgICA0MDUsICAxNzgxLC0zMjc2OCwgIDIyMDIsICAgNDA3LCAgIDQxMCwgIDIyMDIsICAyMjAyLAorICAxOTU4LCAgIDQ1NSwgIDE5NTgsICAxOTU4LCAgMTc1MSwgICA1NzgsICAxMzU3LCAgIDYwNywgICA4NzMsICAgNzA3LAorICAgNzA3LCAgIDMwMywgICAzMDMsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA0MjIsICAgMjI5LAorICAgNDEyLCAgICA1NiwgICA0MjksLTMyNzY4LCAgIDkwNCwtMzI3NjgsICAgNDIxLC0zMjc2OCwgIDE1NTMsLTMyNzY4LAorICAgMjc3LCAgIDQzMCwgICA2OTksICAyMDM5LCAgICA1NywgICA0NDksLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxNzA5LAorLTMyNzY4LCAgIDQ1MywgICAyNjUsLTMyNzY4LC0zMjc2OCwgICAxMTUsLTMyNzY4LC0zMjc2OCwgICAgNTUsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgIDEwODMsLTMyNzY4LCAgIDM0NCwtMzI3NjgsLTMyNzY4LCAgIDM0NCwtMzI3NjgsICAgNDk0LAorLTMyNzY4LC0zMjc2OCwgICA0NTIsLTMyNzY4LCAgMjIwMiwtMzI3NjgsICAgMTE5LCAgIDQ1OCwgICA0NTEsLTMyNzY4LAorLTMyNzY4LCAgIDQ1MSwgICAxMTksICAgMTE5LC0zMjc2OCwgICA1MTAsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDUwNywgIDE5NTgsICAyMjMxLCAgMjI0MywtMzI3NjgsLTMyNzY4LCAgIDQ0MiwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNDY0LC0zMjc2OCwtMzI3NjgsICAgMTI0LCAgIDQ3NCwtMzI3NjgsLTMyNzY4LAorICAgMzA5LCAgICA2NywtMzI3NjgsLTMyNzY4LCAgMTY3OSwtMzI3NjgsICAgNTQ5LCAgIDMyNiwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDQ3NiwgICA0NTAsLTMyNzY4LCAgMTM0MSwgICAgNTUsLTMyNzY4LC0zMjc2OCwgICAgNTUsLTMyNzY4LAorICAgMTE5LC0zMjc2OCwgICAzMzMsLTMyNzY4LC0zMjc2OCwgICAzOTcsICAgOTQyLCAgIDUxMCwtMzI3NjgsICAxMTYxLAorLTMyNzY4LCAgMjIxOCwtMzI3NjgsLTMyNzY4LCAgMTk1OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgNjcsICAgMTE5LAorICAgMTQ0LCAgIDE2MCwgICAxMTksLTMyNzY4LCAgIDE2MCwgICAxMTksICAgOTA0LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICA0NTcsLTMyNzY4LCAgIDE5NCwtMzI3NjgsICAgODg3LC0zMjc2OCwtMzI3NjgsICAyMjAyLAorLTMyNzY4LC0zMjc2OCwgIDEzNDEsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxOTU4LCAgIDEzMCwtMzI3NjgsICAgMjY2LAorICAgNDMyLCAgIDY2NywgICA0NzksICAgNDgxLCAgIDc2MCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgNTIyLCAgIDM5NywgIDE5NTgsLTMyNzY4LCAgIDUyNiwgIDIyMDIsICAgNDg3LCAgIDQ5NywtMzI3NjgsICAxOTU4LAorICAgMTMyLCAgIDIwNywgICA2MDEsLTMyNzY4LCAgMTU2NiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAxNzYsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICAyNzksICAgMjgxLCAgICA1MiwgICA4ODcsLTMyNzY4LC0zMjc2OCwgIDExNjEsLTMyNzY4LAorICAyMTY2LCAgMTk1OCwtMzI3NjgsLTMyNzY4LCAgIDM5NywtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNTAxLAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTY0NywgICA1NDUsICAyMDY0LCAgMTE2MSwtMzI3NjgsLTMyNzY4LAorICAxMjIxLC0zMjc2OCwgIDIyMTgsLTMyNzY4LCAgIDQ1NCwtMzI3NjgsICAgNDU0LC0zMjc2OCwtMzI3NjgsICAgNTAwLAorLTMyNzY4LC0zMjc2OCwgICA1MDYsLTMyNzY4LCAgMjE2NiwtMzI3NjgsLTMyNzY4LCAgMTcyNywgICA1NDcsICAgNTI3LAorLTMyNzY4LC0zMjc2OCwgICA1MjksICAgNTM3LCAgMTk1OCwgICA1NTksICAgNTMzLCAgIDUzNiwgIDE5MDUsICAgIDg5LAorICAgNTkyLC0zMjc2OCwgICA1NjUsICAgNTQwLC0zMjc2OCwgICA1NTUsICAyMTIwLC0zMjc2OCwgICA1OTAsICAxMDI0LAorICAgIDYwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxODM4LC0zMjc2OCwgIDE5NTgsICAgNTk3LAorICAgNTU3LCAgMTI4MSwtMzI3NjgsICAgODEzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTk1OCwgICA1ODUsLTMyNzY4LAorICAxOTU4LCAgMTk1OCwgIDIxMzUsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDU2OCwgIDE5NTgsICAgNTg2LAorLTMyNzY4LCAgIDYwOCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA0NTcsLTMyNzY4LCAgIDE5NCwgIDExMDQsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxOTU4LC0zMjc2OCwgIDEyODEsICAyMTE3LC0zMjc2OCwgIDEyODEsLTMyNzY4LAorLTMyNzY4LCAgIDU5MywgIDE5NTgsICAgNjY2LC0zMjc2OCwgICAyNzUsICAgNjIyLCAgIDYzMiwgIDE5NTgsLTMyNzY4LAorLTMyNzY4LCAgIDYzNywtMzI3NjgsICAxOTU4LCAgIDMwMSwtMzI3NjgsICAgMTA4LCAgIDMwOCwtMzI3NjgsICAxMDMzLAorLTMyNzY4LC0zMjc2OCwgIDE3MjcsICAgNjMzLC0zMjc2OCwgICA2NzcsICAxMjgxLC0zMjc2OCwtMzI3NjgsICAgNjQyLAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMjE4NCwtMzI3NjgsICAgIDI2LC0zMjc2OCwgICAzNjAsLTMyNzY4LAorICAgMzYwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDY0MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxOTU4LAorLTMyNzY4LC0zMjc2OCwgICA3MTAsICAgNjQ2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDEyODEsLTMyNzY4LAorLTMyNzY4LCAgIDY0NywtMzI3NjgsICAgNjY4LCAgICA0NywgICA2NTEsLTMyNzY4LC0zMjc2OCwgICAzMjYsICAgMzI2LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxOTU4LCAgIDcxMCwgICA2NTYsICAgNzEwLC0zMjc2OCwtMzI3NjgsICAxOTU4LAorICAgNjU4LCAgICA0OCwtMzI3NjgsLTMyNzY4LCAgIDY1OSwtMzI3NjgsICAgNDM0LCAgIDY2MiwtMzI3NjgsICAgMjk5LAorICAgMTQ2LC0zMjc2OCwtMzI3NjgsICAgNjYzLCAgIDQzNCwtMzI3NjgsLTMyNzY4LCAgIDI5OSwgICA3NDIsICAgNzQzLAorLTMyNzY4Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0gey0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDE1MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgIC01LC0zMjc2OCwgICAtNDAsICAgNDU2LCAgLTEzNywgICA0MjcsLTMyNzY4LC0zMjc2OCwKKyAgIC01NSwtMzI3NjgsICAgMzk4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMTk3LC0zMjc2OCwKKyAgLTE5MSwgIC0yMDcsICAgNTQyLC0zMjc2OCwtMzI3NjgsICAgMzMyLC0zMjc2OCwgICAgMjIsICAgLTk4LCAgIDIxNiwKKyAgICAgMCwgICA3MTEsLTMyNzY4LCAgIDM1MSwgICAgIDcsICAgIC03LCAgIC0xNSwgICA1NzMsICAgIDExLCAgLTE3MSwKKyAgLTM2NSwgICAtNDUsICAtMTA3LCAgIC01MiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAyMDYsICAgIDE0LCAgICA1MywKKy0zMjc2OCwgICA0ODMsLTMyNzY4LCAgIDM0OSwtMzI3NjgsICAtNDExLC0zMjc2OCwgIC0zODQsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgIC0zOCwgICAtNjMsICAtMzEwLCAgIC0xMywgICAtMzAsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgIDU1MSwgICAgMjQsLTMyNzY4LCAgIDYzMCwgICA1NTAsICAgNDE0LCAgIDY1MywgICA1NTgsICAgIDI3LCAgIC01NywKKyAgICAgMywgICAtODksICAtMTUyLCAgIDM2NSwtMzI3NjgsLTMyNzY4LCAgLTE3MCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgIDQxMSwgIC0yOTIsICAtMTI4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAtOTUsICAtMjg1LCAgLTQyMiwKKyAgIDM2NywtMzI3NjgsICAgMjA4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDIwOSwtMzI3NjgsICAtNTU1LCAgIDE0OSwtMzI3NjgsICAgMTUwLC0zMjc2OCwKKyAgIDUyNSwtMzI3NjgsICAtMjMyLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDQ1OSwgIC0xOTQsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgICA5Cit9OworCisKKyNkZWZpbmUJWVlMQVNUCQkyMjk1CisKKworc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9IHsgICAgODcsCisgICAgOTgsICAgIDIxLCAgICAyMSwgICAgMzUsICAgIDM3LCAgICAzOSwgICAgNDksICAgMTI0LCAgICAyMiwgICAgMjIsCisgICAgMjgsICAgIDI4LCAgIDEyMSwgICAyMzIsICAgIDU0LCAgICAyNSwgICAgMjUsICAgMjIyLCAgIDE0OCwgICAxNDksCisgICAyOTUsICAgMjI5LCAgIDI5MCwgICAzMTksICAgMTUxLCAgIDI1MywgICAyMjUsICAgIDIxLCAgIDEzMiwgICAzMjQsCisgICAxNTYsICAgMTA1LCAgICA1NSwgICAgNDgsICAgIDIyLCAgICA1NiwgICAgMjgsICAgMjgzLCAgIDMyMSwgICAxMjUsCisgICAxODcsICAgIDI1LCAgICA1MSwgICAgNTMsICAgMTk4LCAgIDM4MywgICAyODAsICAgNDYzLCAgIDMxMCwgICAxNDEsCisgICA0MDEsICAgMTAwLCAgIDM1MCwgICAyMjYsICAgMjA5LCAgIDM2OCwgICAxMzQsICAgNTAzLCAgICA0OCwgIC0xMDIsCisgICA1NzMsICAgIDY3LCAgIDIwNiwgICA2MzMsICAgMTIwLCAgIDE4NiwgICAgNDgsICAgMTQzLCAgIDMxMSwgICAgNDMsCisgICAxNTAsICAgMjE2LCAgIDEzMSwgICAxNDQsICAgNjQyLCAgIDEwMCwgICA1NDEsICAgIDYwLCAgIDExMCwgICAgMzIsCisgICAgMzMsICAgIDMyLCAgICAzMywgICA0MjIsICAgNjU1LCAgIDY2NywgICA0MjQsICAgIDMyLCAgICAzMywgICAgLTEsCisgICAyMDcsICAgIDMyLCAgICAzMywgICAxMDAsICAgMjExLCAgIDEzMiwgICAgMTQsICAgMjAyLCAgICAtMiwgICAyODIsCisgICAgNjAsICAgNjM0LCAgIDIzMiwgICAxMDUsICAgNjY1LCAgIDE4OSwgICA1NDMsICAgIDQwLCAgICA2MCwgICAxNTUsCisgICAxMTEsICAgMTEyLCAgIDE5NywgICAgNTAsICAgMTkwLCAgIDE5MSwgICA0MDQsICAgIDQ4LCAgIDU3NCwgICAyOTAsCisgICAxMjAsICAgIDQ4LCAgIDY1NiwgICA2NjgsICAgMjIyLCAgIDM5OSwgICAxOTEsICAgNTg0LCAgIDE0MSwgICAzNDgsCisgICAxMjAsICAgMTM0LCAgIDM1OSwgICAgNDEsICAgMTEwLCAgIDIyMiwgICAyNTIsICAtMTYyLCAgIDU1OSwgICAxMzEsCisgIC0xMDIsICAgMjIyLCAgIDQ5NywgIC0xNjIsICAgMjgxLCAgICA0MiwgICAxNDMsICAgMzMxLCAgICAxNCwgICAzMzEsCisgICAyODcsICAgNDg1LCAgIDE0NCwgICAxOTcsICAgMTAwLCAgICAyOSwgICAyODAsICAgNTgxLCAgICAzNCwgICAgMTQsCisgICAgMzYsICAgMzE1LCAgIDI0MywgICAxMzIsICAgMjQ1LCAgIDMxOCwgICAgMzgsICAgNDcyLCAgIDI0NywgICAxMDAsCisgICAyNDksICAgMTAwLCAgICA2MCwgICAgMTQsICAgNDYyLCAgIDMxNywgICAyNzcsICAgMjc4LCAgICA0MywgICA2MjIsCisgICAgNjEsICAgMjkyLCAgIDIwNiwgICAgNjAsICAtMTYyLCAgIDI1NywgICAyOTMsICAgMjU4LCAgLTE2MiwgICAgMTQsCisgICAzNjYsICAgNjA1LCAgICA2MywgICAzMjMsICAgNjA4LCAgIDM2NywgICAgNDMsICAgNTA4LCAgIDMzOSwgICAzOTQsCisgICA1OTUsICAgNjM3LCAgIDQ1NCwgICA0NTUsICAgMzk1LCAgICAxNCwgICA2NDEsICAgNDk0LCAgIDY0MywgICAgNDMsCisgICAzOTcsICAgMjA3LCAgIDE1OCwgICAyMDYsICAgIDY2LCAgIDIxMSwgICA0MzYsICAgNjUyLCAgIDExMSwgICAxMTIsCisgICAzNDIsICAgNjc0LCAgIDYyNywgICAgMTQsICAgIDY4LCAgIDQwNCwgICA2NzUsICAgIDI1LCAgICA0MywgICAxMTUsCisgICAxMTEsICAgMTEyLCAgIDIwNiwgICAxMzQsICAgMzk5LCAgIDE5MSwgICAgMTQsICAgMTAzLCAgIDEyMCwgICA0MTEsCisgICAxMDYsICAgMTIwLCAgIDEyMCwgICAgNDQsICAgMTA3LCAgIDQ2OCwgICAyODMsICAgMjA4LCAgIDM1NCwgICAgNTcsCisgICA2NzYsICAgIDU4LCAgICA0NSwgICAxODksICAgNjUxLCAgICAxNCwgICAzOTgsICAgNDUxLCAgIDEzOCwgICA0OTgsCisgICAxMzIsICAgNDc3LCAgIDE5MCwgICAxOTEsICAgNDgyLCAgIDM5OSwgICAxOTEsICAgMTMzLCAgIDIxNywgICAgMzIsCisgICAgMzMsICAtMTA1LCAgLTEwNSwgIC0xMDUsICAtMTA1LCAgIDExNiwgICAgNjAsICAtMTA1LCAgIDE0NiwgIC0xMDUsCisgIC0xMDUsICAtMTA1LCAgIDEyOCwgICAxMjksICAgMTE3LCAgIDYwMywgICAzMzEsICAgMjAyLCAgICAgOSwgICAgMTAsCisgICAgMTEsICAgNDM3LCAgICA1NCwgICAyMjcsICAgNDY4LCAgLTEwNSwgICAyMzUsICAgMjI4LCAgICAyNSwgICAzNDgsCisgICAxMDcsICAgNDUzLCAgIDE1NywgICA0MDMsICAgNDA2LCAgIDM3MywgICAzNDgsICAgMTg2LCAgIDQ1MiwgICAxNTgsCisgICAgNTUsICAgIDQzLCAgIDM5NywgICAgNTYsICAgNDU5LCAgIDE4OCwgICAgIDUsICAgMTk1LCAgICAgNywgICAxOTYsCisgICAzNjEsICAgMzYyLCAgIDIxMiwgICAzNzQsICAgICA5LCAgICAxMCwgICAgMTEsICAgMjM4LCAgIDE4MCwgICAxODEsCisgICAyMzksICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgICA0MywgICAxMTUsICAgNDM3LCAgICAxNCwgICA0ODMsCisgICAgMTMsICAgMzY0LCAgIDQ3NCwgICAyNDIsICAgNDI4LCAgIDM2NSwgICA0NzUsICAgNDAyLCAgIDQwNSwgIC0xMDUsCisgICA2MTIsICAgMjQ4LCAgIDE3NywgICAxNzgsICAgMTc5LCAgIDUwMSwgICA1MjgsICAgNTAyLCAgIDM5OCwgICAyMjgsCisgICAyMTcsICAgMTA3LCAgICAxNCwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAgMzk5LCAgIDE5MSwgICA0NjQsCisgICA0MjcsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAgNDAwLCAgICA0OCwgICAyNDQsICAgNjE4LCAgICAyNSwgICA1MjgsCisgICA0MjksICAgMjI4LCAgIDExNiwgICA0MTYsICAgNjIwLCAgIDEwNSwgICAxMzIsICAtMzE1LCAgIDEwNywgIC0yNjEsCisgIC0yNjEsICAgMTE3LCAgIDI1MCwgICA0MTMsICAgNDE1LCAgIDI1MSwgICAxMjAsICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgMzMsICAgNDY1LCAgIDIzMywgICAyMzQsICAgMjMzLCAgIDIzNCwgICA1NDQsICAgMjUyLCAgIDEyNywgICAxMjgsCisgICAxMjksICAgNjM1LCAgICA0OCwgICA2MzYsICAgNTAwLCAgICAgOSwgICAgMTAsICAgIDExLCAgIDI1NCwgICAxMzksCisgICAgMjUsICAgMzE2LCAgICAgNSwgICAyNTUsICAgICA3LCAgICA5NywgICAxMjAsICAgLTgyLCAgICA0OCwgICAyOTQsCisgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTQsICAgMTEwLCAgIDEzMiwgICA0ODYsICAgMzIwLCAgIDIwNywgICAyMTEsCisgICAzMDcsICAtMTAxLCAgICA3MSwgICAgNDMsICAgNTI0LCAgIDIwNywgICAgMTMsICAgMjA2LCAgIDMwOCwgICAgMTUsCisgICAxMTEsICAgMTEyLCAgICA2MCwgICAgIDUsICAgIDU3LCAgICAgNywgICAgNTgsICAtMjU5LCAgLTI1OSwgICAgNDMsCisgICAxMTUsICAgICA5LCAgICAxMCwgICAgMTEsICAgMzI3LCAgIDQwMCwgICA0MDAsICAgNTI0LCAgIDMxNCwgICA1MDYsCisgICAgMTQsICAgMzMzLCAgICA0OCwgICAzMzQsICAgNTI4LCAgIDY3MCwgICAzMzUsICAgIDEzLCAgIDU1OCwgICA1MjMsCisgICAzMzcsICAgMTg3LCAgIDM0MCwgICA2NzgsICAgNTI2LCAgIDM0MSwgICAgMTQsICAgMjg4LCAgIDI4OSwgICAyMzIsCisgICAgNDQsICAgNTI3LCAgIDM0MywgICA1MzcsICAgMzQ3LCAgIDE0MCwgIC0yNTMsICAgMzQ2LCAgICAyNSwgICAgNDUsCisgICAyODgsICAgMjg5LCAgIDUyMywgICAzNTEsICAgMzQ5LCAgIDM1NSwgICAxMTYsICAgNTgyLCAgIDMwOCwgICA0NzYsCisgICA1ODUsICAgNTg4LCAgIDQ1NCwgICA0NTUsICAgNTYwLCAgIDExNywgICAxNjAsICAgMTYyLCAgIDU5MiwgICAgNTQsCisgICA2NTgsICAgNjU5LCAgIDU5OCwgICAyMjIsICAgMzYwLCAgIDIyMiwgICA0MTQsICAgNTk3LCAgIDM2MywgICAzNzcsCisgICAyMDcsICAgMzgyLCAgIDM4MCwgICA2MDQsICAgMzc4LCAgIDM4MSwgICA1MjYsICAgIDU1LCAgIDM4NCwgICAzODUsCisgICAgNTYsICAgMzg2LCAgIDYxMCwgICA1MjcsICAgMzkxLCAgIDUzNywgICAzOTMsICAgNTY2LCAgIDU2OCwgICAzOTYsCisgICAgMjUsICAgNDEwLCAgIDQxMiwgICA2MTcsICAgNjAwLCAgIDI1NiwgIC0yOTUsICAgNDAwLCAgIDQ4MSwgICAtMzEsCisgICAyNTksICAgMjYwLCAgIDUyNCwgICA0ODksICAgNDkwLCAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksCisgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LCAgIDI3NSwgICAyNzYsICAgNDkxLCAgIDUwNywgICAxMjAsCisgICA1MzgsICAgIDQ4LCAgIDU0NSwgICA1NDYsICAgLTMyLCAgIDU0OCwgICA0MjUsICAgNTUxLCAgICAgNCwgICA1ODUsCisgIC0xMTgsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgIDU1MiwgICA1NTQsICAgNTIzLCAgIDU2MSwgICAgIDksCisgICAgMTAsICAgIDExLCAgIDU2MywgICAgNDMsICAgMzk3LCAgIDU2OSwgICA0NTYsICAgNDU3LCAgIDQ1OCwgICA1NTUsCisgICA0NjAsICAgNDYxLCAgIDU1NiwgICA2NjEsICAgIDEyLCAgICAxMywgICA1NjQsICAgIDE0LCAgICAxNSwgICA1ODUsCisgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsICAgMTc0LCAgIDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksCisgICAgMTQsICAgNTY1LCAgIDU3OCwgICA0NzMsICAgNTgwLCAgIDMyNSwgICAyOTYsICAtMTE4LCAgIDI5NywgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICA1ODMsICAgNTkxLCAgIDI5OCwgIC0xMTgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICA0OTYsICAgMTcyLCAgIDE3MywgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAgNDUsCisgICAzNDQsICAgMzQ1LCAgIDU5MywgICAgMTMsICAgIDE2LCAgICAxNCwgICA1OTQsICAgMjE3LCAgIDYwOSwgIC0xMTQsCisgIC0xMTQsICAtMTE0LCAgLTExNCwgIC0xMTQsICAtMTE0LCAgLTExNCwgICA1MDQsICAtMTE0LCAgLTExNCwgIC0xMTQsCisgIC0xMTQsICAtMTE0LCAgIDYxMSwgIC0xMTQsICAtMTE0LCAgLTExNCwgIC0xMTQsICAtMTE0LCAgLTExNCwgIC0xMTQsCisgIC0xMTQsICAtMTE0LCAgLTExNCwgIC0xMTQsICAtMTE0LCAgLTExNCwgIC0xMTQsICAtMTE0LCAgIDYxMywgIC0xMTQsCisgIC0xMTQsICAgIDMyLCAgICAzMywgICAxOTksICAgMjAwLCAgIDIwMSwgIC0xMTQsICAgNjE0LCAgIDYyNSwgIC0xMTQsCisgICA1NDcsICAtMzc1LCAgIDYyNiwgICA2MTYsICAtMTE0LCAgLTExNCwgIC0xMTQsICAgNjI4LCAgIDY0NCwgICA2MzgsCisgIC0xMTQsICAtMTE0LCAgIDY0OCwgICA2NTMsICAgMjMwLCAgLTExNCwgICA2NTQsICAgLTE5LCAgIC0xOSwgICAtMTksCisgICAtMTksICAgNjU3LCAgIDY2MywgICA2NjYsICAgNjY5LCAgIC0xOSwgICAtMTksICAgLTE5LCAgIDY3MiwgICA2NzcsCisgICAzOTIsICAgNjgwLCAgIDY4MSwgIC0xMTQsICAtMTE0LCAgLTExNCwgIC0xMTQsICAgNTg2LCAgLTExNCwgICAzNTgsCisgICAxMTAsICAgLTE5LCAgIDU3NSwgIC0xNjIsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgIC0xNjIsCisgICAyMTcsICAgMzEyLCAgLTMxNSwgIC0zMTUsICAgNDc4LCAgIDEyNiwgICA0NjYsICAtMzE1LCAgLTMxNSwgICAyOTEsCisgIC0zMTUsICAgNDcwLCAgIDQyMCwgICAyNDYsICAtMzE1LCAgIDM1NiwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsCisgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAgNDQ2LCAgLTMxNSwgICAyNDEsCisgIC0zMTUsICAgMzI4LCAgLTMxNSwgIC0zMTUsICAgMzMyLCAgIDQyNiwgICAzMjYsICAgNDc5LCAgIDQzOSwgIC0zMTUsCisgIC0xNjIsICAgNDg0LCAgLTMxNSwgICA2NjIsICAtMTYyLCAgIC0xOSwgICA2NjQsICAtMzE1LCAgLTMxNSwgIC0zMTUsCisgICA2MjMsICAgNjI0LCAgIDM1MiwgIC0zMTUsICAtMzE1LCAgICA0MywgICAzOTcsICAgICAwLCAgLTMxNSwgICAyMDYsCisgICA0MjAsICAgICAwLCAgIDEzOSwgICA0MDksICAgNDcxLCAgICAgNSwgICAgIDAsICAgICA3LCAgICA5NywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDksICAgIDEwLCAgICAxMSwgIC0zMTUsICAtMjkxLCAgLTMxNSwgIC0zMTUsCisgICA0ODcsICAtMzE1LCAgICAxNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDkzLCAgIDE1MiwgICAgMTMsCisgICAgNjksICAgICA1LCAgICAxNSwgICAgIDcsICAgIDk3LCAgICA3MCwgICAgNzEsICAgICAwLCAgICA3MiwgICAgIDksCisgICAgMTAsICAgIDExLCAgIDQ5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICA0NDYsICAgICAwLCAgICAgMCwgICA1MDUsCisgICAgIDAsICAgIDQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMywgICAgNzMsICAgICAwLCAgICAxNSwgICAgIDAsCisgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQ0NiwgICAgIDAsICAgIDc2LCAgIDQ0NiwgICAgIDAsCisgICAgNzcsICAgNDY3LCAgIDEyOCwgICAxMjksICAgICAwLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAgOSwgICAgMTAsCisgICAgMTEsICAgIDgxLCAgICA4MiwgICAgIDAsICAgMjk2LCAgICAgMCwgICAgODMsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgIDgsICAgICAwLCAgIDU1MywgICAyOTgsICAgICAwLCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE3MywgICAxNzQsCisgICAxNzUsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTc5LCAgICAgMCwgICAgODQsICAgIDg1LCAgICAgMCwgICAtOTEsCisgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTQsICAgICAwLCAgICAgMCwgICA1NzcsICAgICAwLCAgICAgMCwgICA0NDYsCisgICAgIDAsICAgICAwLCAgIDQzMSwgICAgIDAsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsCisgIC0zMTUsICAgICAwLCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAgICAwLCAgLTMxNSwgIC0zMTUsCisgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsCisgIC0zMTUsICAtMzE1LCAgLTMxNSwgICA0NDYsICAtMzE1LCAgLTMxNSwgICA0NDYsICAgICAwLCAgICAgMCwgIC0zNzUsCisgICAgIDAsICAtMzE1LCAgICAgMCwgICAgIDAsICAtMzE1LCAgICAgMCwgICA2MTUsICAgICAwLCAgICAgMCwgIC0zMTUsCisgIC0zMTUsICAtMzE1LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMxNSwgIC0zMTUsICAgICAwLCAgICAgMCwgICAgIDAsCisgIC0zMTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDQ2LCAgICAgNSwgICAgIDAsICAgICA3LCAgIDE5NiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgLTMxNSwgICAgIDAsCisgIC0zMTUsICAtMzE1LCAgICAgMCwgIC0zMTUsICAgNTcwLCAgICAgMCwgIC0zMTUsICAtMzE1LCAgICAgMCwgICAgMTMsCisgICAgIDAsICAtMzE1LCAgLTMxNSwgICAgIDAsICAtMzE1LCAgICAgMCwgICA0NDYsICAgICAwLCAgLTMxNSwgICAgIDAsCisgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAtMzE1LCAgLTMxNSwgIC0zMTUsCisgIC0zMTUsICAgMTg5LCAgLTMxNSwgICAgIDAsICAtMzE1LCAgICAgMCwgIC0zMTUsICAtMzE1LCAgICAgMCwgICAxMTAsCisgICAxOTAsICAgMTkxLCAgLTE2MiwgIC0zMTUsICAgICAwLCAgICAgMCwgIC0zMTUsICAgICAwLCAgLTE2MiwgICAgIDAsCisgICAgIDAsICAtMzE1LCAgLTMxNSwgIC0zMTUsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzE1LCAgLTMxNSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgLTMxNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgIDAsICAgMTExLCAgIDExMiwgICAgIDAsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgIC0zMTUsICAgICAwLCAgLTMxNSwgIC0zMTUsICAgNjAxLCAgLTMxNSwgIC0zMjUsICAtMzI1LCAgICAgMCwgIC0xNjIsCisgICAgMTMsICAtMzI1LCAgLTMyNSwgIC0xNjIsICAtMzI1LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNSwgICAgIDAsCisgIC0zMjUsICAtMzI1LCAgLTMyNSwgIC0zMjUsICAtMzI1LCAgLTMyNSwgIC0zMjUsICAtMzI1LCAgLTMyNSwgIC0zMjUsCisgIC0zMjUsICAgICAwLCAgLTMyNSwgICAgIDAsICAtMzI1LCAgICAgMCwgIC0zMjUsICAtMzI1LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjUsICAgMTgwLCAgIDE4MSwgIC0zMjUsICAgMTgyLCAgIDE4MywgICAxODQsCisgICAxODUsICAtMzI1LCAgLTMyNSwgIC0zMjUsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzI1LCAgLTMyNSwgICAgIDAsCisgICAgIDAsICAgNDQwLCAgLTMyNSwgICA0NDEsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MCwgICAgNzEsCisgICAgIDAsICAgIDcyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgIC0zMjUsICAgICAwLCAgLTMyNSwgIC0zMjUsICAgICAwLCAgLTMyNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksCisgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgxLCAgICA4MiwgICAgIDAsICAgICAwLCAgIDQ0MiwgICAgODMsCisgICA0NDMsICAgNDQwLCAgICAgMCwgICA0NDEsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MCwgICAgNzEsCisgICAgIDAsICAgIDcyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgLTE5MCwgICAgODQsCisgICAgODUsICAgICAwLCAgIDQ0NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksCisgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgxLCAgICA4MiwgICAgIDAsICAgICAwLCAgIDQ0MiwgICAgODMsCisgICA0NDMsICAgNDQwLCAgICAgMCwgICA0NDEsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MCwgICAgNzEsCisgICAgIDAsICAgIDcyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgLTI1MCwgICAgODQsCisgICAgODUsICAgICAwLCAgIDQ0NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksCisgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgxLCAgICA4MiwgICAgIDAsICAgICAwLCAgIDQ0MiwgICAgODMsCisgICA0NDMsICAgNDE4LCAgICAgMCwgICAgNjksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MCwgICAgNzEsCisgICAgIDAsICAgIDcyLCAgIDEwOSwgICAgIDAsICAgICAwLCAgIC0yNywgICAtMjcsICAgLTI3LCAgIC0yNywgICAgODQsCisgICAgODUsICAgICAwLCAgIDQ0NCwgICAtMjcsICAgLTI3LCAgIC0yNywgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMCwgICAtMjcsCisgICAgNzYsICAtMTYyLCAgICAgMCwgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAtMTYyLCAgICA3OCwgICAgNzksCisgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgxLCAgICA4MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODMsCisgICAxNzEsICAgMTcyLCAgIDE3MywgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAgIDAsCisgICAxMTEsICAgMTEyLCAgIDIzNiwgICAgIDAsICAgICAwLCAgIC0yMywgICAtMjMsICAgLTIzLCAgIC0yMywgICAgODQsCisgICAgODUsICAgICAwLCAgIDQxOSwgICAtMjMsICAgLTIzLCAgIC0yMywgICAgIDAsICAgICAwLCAgLTE2MiwgICAgNjksCisgICAgIDAsICAgICAwLCAgLTE2MiwgICAtMjcsICAgIDcwLCAgICA3MSwgICAgIDAsICAgIDcyLCAgIDExMCwgICAtMjMsCisgICAgIDAsICAtMTYyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtMTYyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsCisgICAgNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzcsCisgICAxMTEsICAgMTEyLCAgICAgMCwgICAgIDAsICAgIDc4LCAgICA3OSwgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgODEsICAgIDgyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4MywgICAgIDAsICAgICAwLCAgLTE2MiwgICAgNjksCisgICAgIDAsICAgICAwLCAgLTE2MiwgICAtMjMsICAgIDcwLCAgICA3MSwgICAgIDAsICAgIDcyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA2OSwgICAgIDAsICAgICAwLCAgICA4NCwgICAgODUsICAgIDcwLCAgICA3MSwgICAyMTUsCisgICAgNzIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsCisgICAgNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzYsICAgICAwLCAgICA3MywgICAgNzcsCisgICAgMTUsICAgICAwLCAgICA3NCwgICAgNzUsICAgIDc4LCAgICA3OSwgICAgODAsICAgICAwLCAgICAgMCwgICAgNzYsCisgICAgODEsICAgIDgyLCAgICA3NywgICAgIDAsICAgICAwLCAgICA4MywgICAgIDAsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgODEsICAgIDgyLCAgICA2OSwgICAgIDAsICAgICAwLCAgICA4MywgICAgIDAsCisgICAgNzAsICAgIDcxLCAgICAgMCwgICAgNzIsICAgICAwLCAgICA4NCwgICAgODUsICAgICAwLCAgICA2OSwgICAyODYsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzAsICAgIDcxLCAgICAgMCwgICAgNzIsICAgICAwLCAgICA4NCwgICAgODUsCisgICAgIDAsICAgIDczLCAgIDMyMiwgICAgMTUsICAgICAwLCAgICA3NCwgICAgNzUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA3NiwgICAgIDAsICAgIDczLCAgICA3NywgICAgMTUsICAgICAwLCAgICA3NCwgICAgNzUsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgIDAsICAgICAwLCAgICA3NiwgICAgODEsICAgIDgyLCAgICA3NywgICAgIDAsCisgICAgIDAsICAgIDgzLCAgICAgMCwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODEsCisgICAgODIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDg0LCAgICA4NSwgICAgIDAsICAgICAwLCAgIDM1MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDg0LCAgICA4NSwgICAgIDAsICAgICAwLCAgIDQ5OSwgICA0NDEsCisgICA1MDksICAgICA2LCAgICAgNywgICAgIDgsICAgIDcwLCAgICA3MSwgICAgIDAsICAgIDcyLCAgICAgOSwgICAgMTAsCisgICAgMTEsICAgNTEwLCAgICAgMCwgICA1MTEsICAgNTEyLCAgIDUxMywgICA1MTQsICAgNTE1LCAgIDUxNiwgICA1MTcsCisgICA1MTgsICAgNTE5LCAgIDUyMCwgICA1MjEsICAgIDEzLCAgICA3MywgICAgMTQsICAgIDE1LCAgICAgMCwgICAgNzQsCisgICAgNzUsICAgICAwLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgNzYsICAgICAwLCAgIDQwOCwgICAgNzcsCisgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgIDc4LCAgICA3OSwgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgODEsICAgIDgyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4MywgICAgMTMsICAgICAwLCAgICAxNCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDksICAgIDEwLCAgICAxMSwgICA1MjIsICAgICAwLCAgICA4NCwgICAgODUsICAgICAwLCAgIDI1MiwgICA0NDEsCisgICAgMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDcwLCAgICA3MSwgICAgMTMsICAgIDcyLCAgICAxNCwgICAgIDAsCisgICAgIDAsICAgNTEwLCAgICAgMCwgICA1MTEsICAgNTEyLCAgIDUxMywgICA1MTQsICAgNTE1LCAgIDUxNiwgICA1MTcsCisgICA1MTgsICAgNTE5LCAgIDUyMCwgICA1MjEsICAgICAwLCAgICA3MywgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsCisgICAgNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzcsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc4LCAgICA3OSwgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgODEsICAgIDgyLCAgICAgMCwgICAgNjksICAgICAwLCAgICA4MywgICAgIDAsICAgICAwLCAgICA3MCwgICAgNzEsCisgICAgIDAsICAgIDcyLCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsICAgMTc0LCAgIDE3NSwgICAxNzYsCisgICAxNzcsICAgMTc4LCAgIDE3OSwgICA1MjIsICAgICAwLCAgICA4NCwgICAgODUsICAgICAwLCAgIDI1MiwgICAgNzMsCisgICAgIDAsICAgIDE1LCAgICAgMCwgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksCisgICAgODAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgxLCAgICA4MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODMsCisgICAgNjksICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICA3MCwgICAgNzEsICAgICAwLCAgICA3MiwgICAgIDksCisgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODQsCisgICAgODUsICAgICAwLCAgIDMzOCwgICAgIDAsICAgICAwLCAgICAxMywgICAgNzMsICAgIDE0LCAgICAxNSwgICAgIDAsCisgICAgNzQsICAgIDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsCisgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDgxLCAgICA4MiwgICAgIDAsICAgIDY5LCAgICAgNSwgICAgODMsICAgICA3LCAgICA5NywgICAgNzAsCisgICAgNzEsICAgICAwLCAgICA3MiwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgIDY5LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA3MCwgICAgNzEsICAgICAwLCAgICA3MiwgICAgODQsICAgIDg1LCAgICAgMCwgICAgMTMsCisgICAgNzMsICAgICAwLCAgICAxNSwgICAgIDAsICAgIDc0LCAgICA3NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDc2LCAgICAgMCwgICAgNzMsICAgIDc3LCAgICAxNSwgICAgIDAsICAgIDc0LCAgICA3NSwgICAgNzgsCisgICAgNzksICAgIDgwLCAgICAgMCwgICAgIDAsICAgIDc2LCAgICA4MSwgICAgODIsICAgIDc3LCAgICAgMCwgICAgIDAsCisgICAgODMsICAgICAwLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4MSwgICAgODIsCisgICAgNjksICAgICAwLCAgICAgMCwgICAgODMsICAgICAwLCAgICA3MCwgICAgNzEsICAgICAwLCAgICA3MiwgICAgIDAsCisgICAgODQsICAgIDg1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNTU3LCAgICAgMCwgICAgODQsICAgIDg1LCAgICAgMCwgICAgNzMsICAgIDY5LCAgICAxNSwgICAgIDAsCisgICAgNzQsICAgIDc1LCAgICA3MCwgICAgNzEsICAgICAwLCAgICA3MiwgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsCisgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDgxLCAgICA4MiwgICAgNzMsICAgIDY5LCAgICAxNSwgICAgODMsICAgIDc0LCAgICA3NSwgICAgNzAsCisgICAgNzEsICAgICAwLCAgICA3MiwgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsICAgIDc3LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAgMCwgICAgODQsICAgIDg1LCAgICA4MSwgICAgODIsCisgICAgNzMsICAgMzU3LCAgICAxNSwgICAxNTksICAgIDc0LCAgICA3NSwgICAgNzAsICAgIDcxLCAgICAgMCwgICAgNzIsCisgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsICAgIDc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzgsCisgICAgNzksICAgIDgwLCAgICAgMCwgICAgODQsICAgIDg1LCAgICA4MSwgICAgODIsICAgIDczLCAgICAgMCwgICAgMTUsCisgICAxNjEsICAgIDc0LCAgICA3NSwgICA1MzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3NiwgICAgIDAsCisgICAgIDAsICAgIDc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgIDAsCisgICAgODQsICAgIDg1LCAgICA4MSwgICAgODIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDgzLCAgIDE2MywgICAxNjQsCisgICAxNjUsICAgICAwLCAgIDE2NiwgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsCisgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAgIDAsICAgIDg0LCAgICA4NSwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgIDAsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTMsICAgNTg5LCAgICAxNCwgICA1NDAsICAgIDEzLCAgICAgMCwgICAgMTQsCisgICAgIDAsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgICAwLCAgIDE2NiwgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNzAsCisgICAxNzEsICAgMTcyLCAgIDE3MywgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAxNjMsCisgICAxNjQsICAgMTY1LCAgIDU5MCwgICAxNjYsICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAxNzMsICAgMTc0LCAgIDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA1MiwgICAgIDAsICAgICAwLCAgICAxNCwgICA1NjcsICAgICAwLCAgICAgMCwgICA2MDYsCisgICAxNjMsICAgMTY0LCAgIDE2NSwgICAgIDAsICAgMTY2LCAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzEsCisgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTc5LCAgIDE2MywgICAxNjQsCisgICAxNjUsICAgNjMyLCAgIDE2NiwgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsCisgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAxNjMsICAgMTY0LCAgIDE2NSwgICAgIDAsCisgICAxNjYsICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzUsCisgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTY1LCAgICAgMCwgICAxNjYsICAgMTY3LCAgIDE2OCwgICAxNjksCisgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsICAgMTc0LCAgIDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksCisgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsICAgMTc0LCAgIDE3NSwgICAxNzYsCisgICAxNzcsICAgMTc4LCAgIDE3OSwgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgMTcyLCAgIDE3MywgICAxNzQsCisgICAxNzUsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTc5Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXljaGVja1tdID0geyAgICA0MCwKKyAgICA0MSwgICAgIDIsICAgICAzLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAyMCwgICAgNTMsICAgICAyLCAgICAgMywKKyAgICAgMiwgICAgIDMsICAgIDUxLCAgIDEyMSwgICAgMjIsICAgICAyLCAgICAgMywgICAxMTMsICAgIDc0LCAgICA3NSwKKyAgIDIxMiwgICAxMjAsICAgMTk0LCAgIDIzMSwgICAgODAsICAgMTU0LCAgIDExNiwgICAgMjgsICAgIDU5LCAgIDIzNywKKyAgICA4NiwgICAgNDUsICAgIDIyLCAgICAyMCwgICAgMjgsICAgIDIyLCAgICAyOCwgICAxOTAsICAgMjMzLCAgICA1MywKKyAgICA5NiwgICAgMjgsICAgIDIxLCAgICAyMiwgICAxMDIsICAgMzMxLCAgIDE4NCwgICA0MTMsICAgMjE5LCAgICA2NSwKKyAgIDM2MSwgICAgNDEsICAgMjg1LCAgIDExNywgICAxMDcsICAgICAxLCAgICA2MiwgICA0NjksICAgIDQ1LCAgICAgMSwKKyAgICAgMSwgICAgMzgsICAgICA3LCAgICAzOCwgICAgNTEsICAgICA5LCAgICA1MywgICAgNjUsICAgIDEwLCAgICAgMywKKyAgICA3NiwgICAxMTIsICAgIDU5LCAgICA2NSwgICA2MzAsICAgIDY1LCAgIDQ4OCwgICAgMjUsICAgIDI3LCAgICAgMywKKyAgICAgNCwgICAgIDMsICAgICA0LCAgIDM3NiwgICAgMzgsICAgIDM4LCAgIDM3OSwgICAgIDMsICAgICA0LCAgICAgMCwKKyAgIDEwNCwgICAgIDMsICAgICA0LCAgICA4MywgICAxMDgsICAgMTI2LCAgICAzMCwgICAxMDMsICAgICAwLCAgIDE4OSwKKyAgICA0OCwgICAgNzYsICAgMjEwLCAgIDExNywgICA2NjAsICAgIDUwLCAgIDQ5MSwgICAgNTksICAgIDU2LCAgICA4MywKKyAgICA1OSwgICAgNjAsICAgMTAyLCAgICA3NywgICAgNTksICAgIDYwLCAgICA1MCwgICAxMDQsICAgIDU5LCAgIDI5MSwKKyAgIDEwNywgICAxMDgsICAgIDc2LCAgICA3NiwgICAyMjAsICAgIDU5LCAgICA2MCwgICA1NTAsICAgMTQ0LCAgIDI4MiwKKyAgIDExNywgICAxMzcsICAgIDc2LCAgICA1OSwgICAgMjcsICAgMjMxLCAgICA4MiwgICAgMzAsICAgIDUwLCAgIDEyNiwKKyAgICA4MiwgICAyMzcsICAgNDUzLCAgICAzNiwgICAxODUsICAgIDU5LCAgIDE0NCwgICAyNDMsICAgIDMwLCAgIDI0NSwKKyAgIDE5MSwgICA0MzcsICAgMTQ0LCAgIDE0MywgICAxNDQsICAgICAzLCAgIDI5NCwgICA1NDIsICAgIDgyLCAgICAzMCwKKyAgICA4MiwgICAyMjUsICAgMTQxLCAgIDE5NCwgICAxNDMsICAgMjI5LCAgICA4MiwgICAgMzgsICAgMTQ1LCAgIDE1OSwKKyAgIDE0NywgICAxNjEsICAgMTIwLCAgICAzMCwgICA0MDcsICAgMjI4LCAgIDE4MiwgICAxODMsICAgICAzLCAgIDYwMiwKKyAgICAyOCwgICAgNzYsICAgICA3LCAgIDEzMSwgICAgNzcsICAgMTU5LCAgICA4MSwgICAxNjEsICAgIDgxLCAgICAzMCwKKyAgICA3NiwgICA1NzYsICAgIDgyLCAgIDIzNCwgICA1NzksICAgIDgxLCAgICAgMywgICA0ODMsICAgMjU0LCAgICA3NiwKKyAgIDU2NiwgICA2MjQsICAgIDU5LCAgICA2MCwgICAgODEsICAgIDMwLCAgIDYyOSwgICAgNzYsICAgNjMxLCAgICAgMywKKyAgICAgNCwgICAyMjUsICAgIDgxLCAgICAgNywgICAgODIsICAgMjI5LCAgIDM4NywgICA2NDAsICAgIDU5LCAgICA2MCwKKyAgIDI2MSwgICAgNzYsICAgNjA3LCAgICAzMCwgICAgODIsICAgIDUwLCAgICA4MSwgICAyMTQsICAgICAzLCAgICAgNCwKKyAgICA1OSwgICAgNjAsICAgICA3LCAgIDIzOSwgICAgNTksICAgIDYwLCAgICAzMCwgICAgNTksICAgMjI1LCAgIDM2OCwKKyAgICA3NywgICAyMjgsICAgMjI5LCAgICA1MCwgICAgODEsICAgNDE3LCAgIDM5OSwgICAgNzYsICAgMjg5LCAgICAgNSwKKyAgIDY3MywgICAgIDcsICAgIDU5LCAgICA1MCwgICA2MzksICAgIDMwLCAgICA1MCwgICAzOTUsICAgIDc4LCAgIDQ1NCwKKyAgIDI5MSwgICA0MzIsICAgIDU5LCAgICA2MCwgICA0MzUsICAgIDU5LCAgICA2MCwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgNCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIDUwLCAgIDIyNCwgICAgMTAsICAgIDc4LCAgICAxMiwKKyAgICAxMywgICAgMTQsICAgICA2LCAgICAgNywgICAgNTksICAgNTcxLCAgIDM4MiwgICAyOTMsICAgIDEyLCAgICAxMywKKyAgICAxNCwgICAzODcsICAgMzAwLCAgICA3NywgICA0NjYsICAgIDI4LCAgICA3NywgICAgODEsICAgMjg1LCAgIDQ1MiwKKyAgICA4MSwgICA0MDAsICAgIDc2LCAgIDM2MSwgICAzNjIsICAgMzEzLCAgIDQ1OSwgICAgIDksICAgMzk4LCAgICA4MSwKKyAgIDMwMCwgICAgIDMsICAgICA0LCAgIDMwMCwgICA0MDQsICAgIDc2LCAgICAgNCwgICAgNzYsICAgICA2LCAgICAgNywKKyAgIDI5OSwgICAzMDAsICAgIDU5LCAgIDMxMywgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMzYsICAgIDU0LCAgICA1NSwKKyAgICA4MSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgICAzLCAgICAgNCwgICA0MzMsICAgIDMwLCAgIDQzNSwKKyAgICAyOCwgICAgNzcsICAgIDc3LCAgIDEzOCwgICAzODMsICAgIDgxLCAgICA4MSwgICAzNjEsICAgMzYyLCAgICA4MiwKKyAgICA3NiwgICAxNDYsICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDc3LCAgIDQ4NSwgICAgNzcsICAgIDUwLCAgICA4MSwKKyAgICAgMSwgICAgODEsICAgIDMwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgNTksICAgIDYwLCAgIDQxNSwKKyAgICAzOCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAzNjEsICAgMzYyLCAgICA3NywgICAgNzcsICAgMzY1LCAgIDUwOCwKKyAgIDM4NiwgICAgODEsICAgIDUwLCAgIDM3MywgICAgNzcsICAgMzk5LCAgIDQxNywgICAgMjgsICAgIDgxLCAgICA3NywKKyAgICA3OCwgICAgNTksICAgIDc2LCAgIDM3MiwgICAzNzMsICAgIDc2LCAgIDM4MywgICAgNzcsICAgIDc4LCAgICAgMywKKyAgICAgNCwgICA0MTUsICAgIDU5LCAgICA2MCwgICAgNTksICAgIDYwLCAgIDQ5NiwgICAgODIsICAgICA1LCAgICAgNiwKKyAgICAgNywgICA2MTksICAgMzk5LCAgIDYyMSwgICA0NTUsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDc2LCAgICAgMSwKKyAgIDQwNywgICAgNzYsICAgICA0LCAgICA3NywgICAgIDYsICAgICA3LCAgIDQxMywgICAgMzgsICAgNDE1LCAgICA1OSwKKyAgICAxMiwgICAgMTMsICAgIDE0LCAgICAzMCwgICAgMjcsICAgNDY2LCAgIDQ0MiwgICAyMzIsICAgNDUyLCAgIDQ1MywKKyAgICA4MywgICAgODIsICAgICA5LCAgICAgMywgICA0ODUsICAgNDU5LCAgICAyOCwgICAgIDcsICAgIDc3LCAgICAzMSwKKyAgICA1OSwgICAgNjAsICAgNDAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgNzcsICAgIDc4LCAgICAgMywKKyAgICAgNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgNzgsICAgNDUyLCAgIDQ1MywgICA1MDgsICAgIDM2LCAgIDQ3NSwKKyAgICAzMCwgICAgNzgsICAgNDU5LCAgICA3OCwgICA2MDMsICAgNjY3LCAgICA3OCwgICAgMjgsICAgNTE5LCAgIDQ4NSwKKyAgICA3NiwgICA1MzcsICAgIDc2LCAgIDY3NSwgICA0ODUsICAgIDc2LCAgICAzMCwgICAgNTksICAgIDYwLCAgIDU5NywKKyAgICA1MCwgICA0ODUsICAgIDM4LCAgIDQ4NSwgICAgODMsICAgIDc3LCAgICA3OCwgICAgNzYsICAgNDg1LCAgICA1OSwKKyAgICA1OSwgICAgNjAsICAgNTA4LCAgICA4MywgICAgNzYsICAgIDc2LCAgICA1MCwgICA1NDgsICAgIDc3LCAgICA3OCwKKyAgIDU1MSwgICA1NTIsICAgIDU5LCAgICA2MCwgICA1MjAsICAgIDU5LCAgICA5MCwgICAgOTEsICAgNTU5LCAgIDUyNywKKyAgIDY0OSwgICA2NTAsICAgNTY4LCAgIDYxOSwgICAgNzYsICAgNjIxLCAgICA3NywgICA1NjYsICAgIDc2LCAgICAzNiwKKyAgIDU0NCwgICAgODEsICAgMzI3LCAgIDU3NCwgICAgODMsICAgIDc4LCAgIDUzNywgICA1MjcsICAgMzMzLCAgIDMzNCwKKyAgIDUyNywgICAgMzIsICAgNTgzLCAgIDUzNywgICAgMzgsICAgNTM3LCAgICA4MywgICA1MjYsICAgNTI3LCAgICA3NiwKKyAgIDUzNywgICAgIDMsICAgIDc3LCAgIDU5NCwgICA1NjgsICAgMTU4LCAgICA3OCwgICA1NDQsICAgIDc4LCAgICAzOCwKKyAgIDE2MywgICAxNjQsICAgNjAzLCAgICAzOCwgICAgNzgsICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwKKyAgIDE3MywgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAgODEsICAgIDc4LCAgIDU2NiwKKyAgICAzNiwgICA1NjgsICAgIDgzLCAgICA3OCwgICAgMzgsICAgIDU5LCAgIDM4MSwgICAgNTksICAgICAxLCAgIDYzMCwKKyAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIDU5LCAgICAzOCwgICA2MDMsICAgICA3LCAgICAxMiwKKyAgICAxMywgICAgMTQsICAgIDM4LCAgICAgMywgICAgIDQsICAgIDE2LCAgIDQwMSwgICA0MDIsICAgNDAzLCAgICA3NywKKyAgIDQwNSwgICA0MDYsICAgIDc3LCAgIDY1NCwgICAgMjcsICAgIDI4LCAgICA3NywgICAgMzAsICAgIDMxLCAgIDY2MCwKKyAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAzMCwgICAgNzcsICAgIDM2LCAgIDQyOCwgICAgNzgsICAgMjM4LCAgICAgMSwgICAgNTAsICAgICAzLCAgICAgNCwKKyAgICAgNSwgICAgIDYsICAgICA3LCAgICA1OSwgICAgNzcsICAgIDEwLCAgICA1OSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICA1MCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1OSwKKyAgIDI2MywgICAyNjQsICAgIDc3LCAgICAyOCwgICAgNzcsICAgIDMwLCAgICA1OSwgICAgIDEsICAgIDc2LCAgICAgMywKKyAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgIDQ3MSwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAxNCwgICAgMTUsICAgIDE3LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDc3LCAgICAzMywKKyAgICAzNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICA0MCwgICAgNzYsICAgIDc2LCAgICA0MywKKyAgIDUwNSwgICAgNzYsICAgIDM2LCAgICA3NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNzYsICAgICA5LCAgICA3NywKKyAgICA1NCwgICAgNTUsICAgIDc3LCAgICA3NywgICAgIDEsICAgIDU5LCAgICA1OSwgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgNywgICAgODEsICAgIDc3LCAgICA3NiwgICAgNzYsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDc3LCAgICA3NywKKyAgIDM0MywgICAgIDAsICAgICAwLCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICA1NTEsICAgIDgyLCAgIDI5NCwKKyAgICAyNywgICAgMjgsICAgNTM3LCAgICAzMCwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICAzNiwKKyAgICAgMSwgICAyMjAsICAgICAzLCAgICAgNCwgICA0MzMsICAgIDU1LCAgIDQxNiwgICAgIDgsICAgICA5LCAgIDE5NywKKyAgICAxMSwgICA0MjMsICAgMzc1LCAgIDE0NCwgICAgMTUsICAgMjkzLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAzOTAsICAgIDI5LCAgIDEzNywKKyAgICAzMSwgICAyNDEsICAgIDMzLCAgICAzNCwgICAyNDUsICAgMzgyLCAgIDIzOSwgICA0MzMsICAgMzg4LCAgICA0MCwKKyAgICA3NywgICA0MzUsICAgIDQzLCAgIDY1NSwgICAgODEsICAgIDgyLCAgIDY1NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgIDYwMywgICA2MDMsICAgMjg4LCAgICA1NCwgICAgNTUsICAgICAzLCAgICAgNCwgICAgLTEsICAgIDU5LCAgICAgNywKKyAgIDQyMywgICAgLTEsICAgICAxLCAgIDM2NSwgICA0MjcsICAgICA0LCAgICAtMSwgICAgIDYsICAgICA3LCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKKyAgIDQ0MywgICAgODIsICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA0NTAsICAgICAxLCAgICAyOCwKKyAgICAgMywgICAgIDQsICAgIDMxLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAxMiwKKyAgICAxMywgICAgMTQsICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQ2OSwgICAgLTEsICAgIC0xLCAgIDQ3MiwKKyAgICAtMSwgICAgNTksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgLTEsICAgIDMxLCAgICAtMSwKKyAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNDg4LCAgICAtMSwgICAgNDAsICAgNDkxLCAgICAtMSwKKyAgICA0MywgICAgIDUsICAgICA2LCAgICAgNywgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDEyLCAgICAxMywKKyAgICAxNCwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgIDEsICAgIC0xLCAgICA1OSwgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgNywgICAgLTEsICAgNTE1LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDQ2LCAgICA0NywKKyAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICA4MiwKKyAgICAtMSwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIC0xLCAgIDUzOSwgICAgLTEsICAgIC0xLCAgIDU0MiwKKyAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgOSwgICAgLTEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwKKyAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAyOSwgICAgMzAsICAgIDMxLCAgIDU3NiwgICAgMzMsICAgIDM0LCAgIDU3OSwgICAgLTEsICAgIC0xLCAgICA3NiwKKyAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgIDU4OSwgICAgLTEsICAgIC0xLCAgICA0OCwKKyAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA1OSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2MDcsICAgICA0LCAgICAtMSwgICAgIDYsICAgICA3LCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgLTEsICAgIDc3LCAgICAtMSwKKyAgICA3OSwgICAgODAsICAgIC0xLCAgICA4MiwgICAgIDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgIC0xLCAgICAyOCwKKyAgICAtMSwgICAgIDgsICAgICA5LCAgICAtMSwgICAgMTEsICAgIC0xLCAgIDYzOSwgICAgLTEsICAgIDE1LCAgICAtMSwKKyAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAyNywgICAgNTAsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAyNywKKyAgICA1OSwgICAgNjAsICAgIDMwLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDM2LCAgICAtMSwKKyAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIDU5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAgICAtMSwgICAgNTksICAgIDYwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA3NywgICAgLTEsICAgIDc5LCAgICA4MCwgICAgIDEsICAgIDgyLCAgICAgMywgICAgIDQsICAgIC0xLCAgICA3NywKKyAgICAyOCwgICAgIDgsICAgICA5LCAgICA4MSwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE1LCAgICAtMSwKKyAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAyNywgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgNTQsICAgIDU1LCAgICA0MywgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICA2MCwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAtMSwgICAgIDEsICAgIDU5LCAgICAgMywgICAgIDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwKKyAgICAtMSwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA3NywgICAgLTEsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIDgyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOSwKKyAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDU4LCAgICA1OSwKKyAgICA2MCwgICAgIDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwKKyAgICAtMSwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwKKyAgICA4MCwgICAgLTEsICAgIDgyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOSwKKyAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDU4LCAgICA1OSwKKyAgICA2MCwgICAgIDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwKKyAgICAtMSwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwKKyAgICA4MCwgICAgLTEsICAgIDgyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOSwKKyAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDU4LCAgICA1OSwKKyAgICA2MCwgICAgIDEsICAgIC0xLCAgICAgMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwKKyAgICAtMSwgICAgMTEsICAgICAxLCAgICAtMSwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICA3OSwKKyAgICA4MCwgICAgLTEsICAgIDgyLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOSwKKyAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI3LCAgICAyOCwKKyAgICA0MCwgICAgMzAsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1OSwKKyAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICAtMSwKKyAgICA1OSwgICAgNjAsICAgICAxLCAgICAtMSwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICA3OSwKKyAgICA4MCwgICAgLTEsICAgIDgyLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgLTEsICAgIDc3LCAgICAgMywKKyAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgIDgsICAgICA5LCAgICAtMSwgICAgMTEsICAgIDI3LCAgICAyOCwKKyAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywKKyAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywKKyAgICA1OSwgICAgNjAsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LCAgICAtMSwgICAgLTEsICAgIDc3LCAgICAgMywKKyAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgIDgsICAgICA5LCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgICAzLCAgICAtMSwgICAgLTEsICAgIDc5LCAgICA4MCwgICAgIDgsICAgICA5LCAgICA4MywKKyAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywKKyAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDI5LCAgICA0MywKKyAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICA0MCwKKyAgICA1NCwgICAgNTUsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIDU5LCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgICAzLCAgICAtMSwgICAgLTEsICAgIDU5LCAgICAtMSwKKyAgICAgOCwgICAgIDksICAgIC0xLCAgICAxMSwgICAgLTEsICAgIDc5LCAgICA4MCwgICAgLTEsICAgICAzLCAgICA4MywKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgOCwgICAgIDksICAgIC0xLCAgICAxMSwgICAgLTEsICAgIDc5LCAgICA4MCwKKyAgICAtMSwgICAgMjksICAgIDgzLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgMjksICAgIDQzLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwKKyAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICA1NCwgICAgNTUsICAgIDQzLCAgICAtMSwKKyAgICAtMSwgICAgNTksICAgIC0xLCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwKKyAgICA1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIDgzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIDgzLCAgICAgMywKKyAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAtMSwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIC0xLCAgICAzMywKKyAgICAzNCwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICA0MCwgICAgLTEsICAgIDEwLCAgICA0MywKKyAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LCAgICAyOCwgICAgLTEsICAgIDMwLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAxMiwgICAgMTMsICAgIDE0LCAgICA3NywgICAgLTEsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIDgyLCAgICAgMywKKyAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LCAgICAyOCwgICAgMTEsICAgIDMwLCAgICAtMSwKKyAgICAtMSwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywKKyAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA1NCwgICAgNTUsICAgIC0xLCAgICAgMywgICAgLTEsICAgIDU5LCAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwKKyAgICAtMSwgICAgMTEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgNTEsICAgIDUyLCAgICA3NywgICAgLTEsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIDgyLCAgICAyOSwKKyAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1OSwKKyAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAxMiwKKyAgICAxMywgICAgMTQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OSwKKyAgICA4MCwgICAgLTEsICAgIDgyLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAtMSwKKyAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwKKyAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgIDMsICAgICA0LCAgICA1OSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgOSwgICAgLTEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICA3OSwgICAgODAsICAgIC0xLCAgICAyOCwKKyAgICAyOSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgNDAsICAgIC0xLCAgICAyOSwgICAgNDMsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICA0OCwKKyAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgNDAsICAgIDU0LCAgICA1NSwgICAgNDMsICAgIC0xLCAgICAtMSwKKyAgICA1OSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwKKyAgICAgMywgICAgLTEsICAgIC0xLCAgICA1OSwgICAgLTEsICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAtMSwKKyAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICAyOSwgICAgIDMsICAgIDMxLCAgICAtMSwKKyAgICAzMywgICAgMzQsICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwKKyAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgNTQsICAgIDU1LCAgICAyOSwgICAgIDMsICAgIDMxLCAgICA1OSwgICAgMzMsICAgIDM0LCAgICAgOCwKKyAgICAgOSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICA3OSwgICAgODAsICAgIDU0LCAgICA1NSwKKyAgICAyOSwgICAgIDMsICAgIDMxLCAgICA1OSwgICAgMzMsICAgIDM0LCAgICAgOCwgICAgIDksICAgIC0xLCAgICAxMSwKKyAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OCwKKyAgICA0OSwgICAgNTAsICAgIC0xLCAgICA3OSwgICAgODAsICAgIDU0LCAgICA1NSwgICAgMjksICAgIC0xLCAgICAzMSwKKyAgICA1OSwgICAgMzMsICAgIDM0LCAgICAxMCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwKKyAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwKKyAgICA3OSwgICAgODAsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTksICAgIDM1LCAgICAzNiwKKyAgICAzNywgICAgLTEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgNzksICAgIDgwLCAgICAgNCwKKyAgICAgNSwgICAgIDYsICAgICA3LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMTAsICAgIDMwLCAgICA4MywgICAgMjgsICAgIC0xLCAgICAzMCwKKyAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgLTEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKKyAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICAzNSwKKyAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKKyAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAtMSwgICAgLTEsICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDMwLCAgICA3NywgICAgLTEsICAgIC0xLCAgICA4MywKKyAgICAzNSwgICAgMzYsICAgIDM3LCAgICAtMSwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDM1LCAgICAzNiwKKyAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAtMSwKKyAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgMzcsICAgIC0xLCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwKKyAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICA1MCwgICAgNTEsICAgIDUyLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIKK307CisvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLworI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi5zaW1wbGUiCisKKy8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQorICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCisKKyNpZm5kZWYgYWxsb2NhCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlIC8qIG5vdCBHTlUgQy4gICovCisjaWYgKCFkZWZpbmVkIChfX1NURENfXykgJiYgZGVmaW5lZCAoc3BhcmMpKSB8fCBkZWZpbmVkIChfX3NwYXJjX18pIHx8IGRlZmluZWQgKF9fc3BhcmMpIHx8IGRlZmluZWQgKF9fc2dpKQorI2luY2x1ZGUgPGFsbG9jYS5oPgorI2Vsc2UgLyogbm90IHNwYXJjICovCisjaWYgZGVmaW5lZCAoTVNET1MpICYmICFkZWZpbmVkIChfX1RVUkJPQ19fKQorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2Vsc2UgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjaWYgZGVmaW5lZChfQUlYKQorI2luY2x1ZGUgPG1hbGxvYy5oPgorICNwcmFnbWEgYWxsb2NhCisjZWxzZSAvKiBub3QgTVNET1MsIF9fVFVSQk9DX18sIG9yIF9BSVggKi8KKyNpZmRlZiBfX2hwdXgKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cit2b2lkICphbGxvY2EgKHVuc2lnbmVkIGludCk7Cit9OworI2Vsc2UgLyogbm90IF9fY3BsdXNwbHVzICovCit2b2lkICphbGxvY2EgKCk7CisjZW5kaWYgLyogbm90IF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19ocHV4ICovCisjZW5kaWYgLyogbm90IF9BSVggKi8KKyNlbmRpZiAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNlbmRpZiAvKiBub3Qgc3BhcmMuICAqLworI2VuZGlmIC8qIG5vdCBHTlUgQy4gICovCisjZW5kaWYgLyogYWxsb2NhIG5vdCBkZWZpbmVkLiAgKi8KKworLyogVGhpcyBpcyB0aGUgcGFyc2VyIGNvZGUgdGhhdCBpcyB3cml0dGVuIGludG8gZWFjaCBiaXNvbiBwYXJzZXIKKyAgd2hlbiB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorICBJdCB3YXMgd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBoYWlyeSBwYXJzZXIKKyAgdXNlZCB3aGVuICVzZW1hbnRpY19wYXJzZXIgaXMgc3BlY2lmaWVkLiAgKi8KKworLyogTm90ZTogdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBkb2xsYXIgc2lnbiBpbiB0aGlzIGZpbGUuCisgICBJdCBpcyByZXBsYWNlZCBieSB0aGUgbGlzdCBvZiBhY3Rpb25zLCBlYWNoIGFjdGlvbgorICAgYXMgb25lIGNhc2Ugb2YgdGhlIHN3aXRjaC4gICovCisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQktMgorI2RlZmluZSBZWUVPRgkJMAorI2RlZmluZSBZWUFDQ0VQVAlyZXR1cm4oMCkKKyNkZWZpbmUgWVlBQk9SVCAJcmV0dXJuKDEpCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4KKyAgIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5IHRvIGVhc2UgdGhlCisgICB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorI2RlZmluZSBZWUJBQ0tVUCh0b2tlbiwgdmFsdWUpIFwKK2RvCQkJCQkJCQlcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgeyB5eWNoYXIgPSAodG9rZW4pLCB5eWx2YWwgPSAodmFsdWUpOwkJCVwKKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgICAgWVlQT1BTVEFDSzsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7IHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7IFlZRVJST1I7IH0JXAord2hpbGUgKDApCisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKyNpZm5kZWYgWVlQVVJFCisjZGVmaW5lIFlZTEVYCQl5eWxleCgpCisjZW5kaWYKKworI2lmZGVmIFlZUFVSRQorI2lmZGVmIFlZTFNQX05FRURFRAorI2lmZGVmIFlZTEVYX1BBUkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCAmeXlsbG9jKQorI2VuZGlmCisjZWxzZSAvKiBub3QgWVlMU1BfTkVFREVEICovCisjaWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwpCisjZW5kaWYKKyNlbmRpZiAvKiBub3QgWVlMU1BfTkVFREVEICovCisjZW5kaWYKKworLyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUgKi8KKworI2lmbmRlZiBZWVBVUkUKKworaW50CXl5Y2hhcjsJCQkvKiAgdGhlIGxvb2thaGVhZCBzeW1ib2wJCSovCitZWVNUWVBFCXl5bHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZQkJKi8KKwkJCQkvKiAgbG9va2FoZWFkIHN5bWJvbAkJCSovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKK1lZTFRZUEUgeXlsbG9jOwkJCS8qICBsb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkCSovCisJCQkJLyogIHN5bWJvbAkJCQkqLworI2VuZGlmCisKK2ludCB5eW5lcnJzOwkJCS8qICBudW1iZXIgb2YgcGFyc2UgZXJyb3JzIHNvIGZhciAgICAgICAqLworI2VuZGlmICAvKiBub3QgWVlQVVJFICovCisKKyNpZiBZWURFQlVHICE9IDAKK2ludCB5eWRlYnVnOwkJCS8qICBub256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlCSovCisvKiBTaW5jZSB0aGlzIGlzIHVuaW5pdGlhbGl6ZWQsIGl0IGRvZXMgbm90IHN0b3AgbXVsdGlwbGUgcGFyc2VycworICAgZnJvbSBjb2V4aXN0aW5nLiAgKi8KKyNlbmRpZgorCisvKiAgWVlJTklUREVQVEggaW5kaWNhdGVzIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcwkqLworCisjaWZuZGVmCVlZSU5JVERFUFRICisjZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8qICBZWU1BWERFUFRIIGlzIHRoZSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0bworICAgIChlZmZlY3RpdmUgb25seSBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4gICovCisKKyNpZiBZWU1BWERFUFRIID09IDAKKyN1bmRlZiBZWU1BWERFUFRICisjZW5kaWYKKworI2lmbmRlZiBZWU1BWERFUFRICisjZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisjaWZkZWYgX19HTlVDX18KK2ludCB5eXBhcnNlICh2b2lkKTsKKyNlbmRpZgorDAorI2lmIF9fR05VQ19fID4gMQkJLyogR05VIEMgYW5kIEdOVSBDKysgZGVmaW5lIHRoaXMuICAqLworI2RlZmluZSBfX3l5X21lbWNweShGUk9NLFRPLENPVU5UKQlfX2J1aWx0aW5fbWVtY3B5KFRPLEZST00sQ09VTlQpCisjZWxzZQkJCQkvKiBub3QgR05VIEMgb3IgQysrICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitzdGF0aWMgdm9pZAorX195eV9tZW1jcHkgKGZyb20sIHRvLCBjb3VudCkKKyAgICAgY2hhciAqZnJvbTsKKyAgICAgY2hhciAqdG87CisgICAgIGludCBjb3VudDsKK3sKKyAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKKyAgcmVnaXN0ZXIgaW50IGkgPSBjb3VudDsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICAqdCsrID0gKmYrKzsKK30KKworI2Vsc2UgLyogX19jcGx1c3BsdXMgKi8KKworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5X21lbWNweSAoY2hhciAqZnJvbSwgY2hhciAqdG8sIGludCBjb3VudCkKK3sKKyAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKKyAgcmVnaXN0ZXIgaW50IGkgPSBjb3VudDsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICAqdCsrID0gKmYrKzsKK30KKworI2VuZGlmCisjZW5kaWYKKwwKKyNsaW5lIDE5MiAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi5zaW1wbGUiCisKKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgWVlQQVJTRV9QQVJBTSBhcyB0aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBiZSBwYXNzZWQKKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKyAgIEl0IHNob3VsZCBhY3R1YWxseSBwb2ludCB0byBhbiBvYmplY3QuCisgICBHcmFtbWFyIGFjdGlvbnMgY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUgYnkgY2FzdGluZyBpdAorICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAqLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbHNlCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0KKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisjZW5kaWYKKworaW50Cit5eXBhcnNlKFlZUEFSU0VfUEFSQU0pCisgICAgIFlZUEFSU0VfUEFSQU1fREVDTAoreworICByZWdpc3RlciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworICByZWdpc3RlciBZWVNUWVBFICp5eXZzcDsKKyAgaW50IHl5ZXJyc3RhdHVzOwkvKiAgbnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZCAqLworICBpbnQgeXljaGFyMSA9IDA7CQkvKiAgbG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIgKi8KKworICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgc3RhdGUgc3RhY2sJCQkqLworICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjawkJKi8KKworICBzaG9ydCAqeXlzcyA9IHl5c3NhOwkJLyogIHJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycyAqLworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CS8qICB0byBhbGxvdyB5eW92ZXJmbG93IHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUgKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAorICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSovCisgIFlZTFRZUEUgKnl5bHMgPSB5eWxzYTsKKyAgWVlMVFlQRSAqeXlsc3A7CisKKyNkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tLCB5eWxzcC0tKQorI2Vsc2UKKyNkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tKQorI2VuZGlmCisKKyAgaW50IHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyNpZmRlZiBZWVBVUkUKKyAgaW50IHl5Y2hhcjsKKyAgWVlTVFlQRSB5eWx2YWw7CisgIGludCB5eW5lcnJzOworI2lmZGVmIFlZTFNQX05FRURFRAorICBZWUxUWVBFIHl5bGxvYzsKKyNlbmRpZgorI2VuZGlmCisKKyAgWVlTVFlQRSB5eXZhbDsJCS8qICB0aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCisJCQkJLyogIHNlbWFudGljIHZhbHVlcyBmcm9tIHRoZSBhY3Rpb24JKi8KKwkJCQkvKiAgcm91dGluZXMJCQkJKi8KKworICBpbnQgeXlsZW47CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIik7CisjZW5kaWYKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5c3NwID0geXlzcyAtIDE7CisgIHl5dnNwID0geXl2czsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgPSB5eWxzOworI2VuZGlmCisKKy8qIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluICB5eXN0YXRlICAuICAqLworLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gc28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCit5eW5ld3N0YXRlOgorCisgICorK3l5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKyAgICB7CisgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2sgKi8KKyAgICAgIC8qIFVzZSBjb3BpZXMgb2YgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50byBtZW1vcnkuICovCisgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisgICAgICBzaG9ydCAqeXlzczEgPSB5eXNzOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOworI2VuZGlmCisKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgaW50IHNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YKKwkgdGhlIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgKi8KKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIC8qIFRoaXMgdXNlZCB0byBiZSBhIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywKKwkgYnV0IHRoYXQgbWlnaHQgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisgICAgICB5eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5c3MxLCBzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgJnl5bHMxLCBzaXplICogc2l6ZW9mICgqeXlsc3ApLAorCQkgJnl5c3RhY2tzaXplKTsKKyNlbHNlCisgICAgICB5eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5c3MxLCBzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgJnl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICB5eXNzID0geXlzczE7IHl5dnMgPSB5eXZzMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSB5eWxzMTsKKyNlbmRpZgorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoeXlzdGFja3NpemUgPj0gWVlNQVhERVBUSCkKKwl7CisJICB5eWVycm9yKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKwkgIHJldHVybiAyOworCX0KKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKyAgICAgIHl5c3MgPSAoc2hvcnQgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eXNzMSwgKGNoYXIgKil5eXNzLCBzaXplICogc2l6ZW9mICgqeXlzc3ApKTsKKyAgICAgIHl5dnMgPSAoWVlTVFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXl2c3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5dnMxLCAoY2hhciAqKXl5dnMsIHNpemUgKiBzaXplb2YgKCp5eXZzcCkpOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlscyA9IChZWUxUWVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eWxzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlsczEsIChjaGFyICopeXlscywgc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisjZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgc2l6ZSAtIDE7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzcCA9IHl5bHMgKyBzaXplIC0gMTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVkXG4iLCB5eXN0YWNrc2l6ZSk7CisjZW5kaWYKKworICAgICAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisJWVlBQk9SVDsKKyAgICB9CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSk7CisjZW5kaWYKKworICBnb3RvIHl5YmFja3VwOworIHl5YmFja3VwOgorCisvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKy8qIFJlYWQgYSBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworLyogeXlyZXN1bWU6ICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisKKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorICAgICBvciBhIHZhbGlkIHRva2VuIGluIGV4dGVybmFsIGZvcm0uICAqLworCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIik7CisjZW5kaWYKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworCisgIGlmICh5eWNoYXIgPD0gMCkJCS8qIFRoaXMgbWVhbnMgZW5kIG9mIGlucHV0LiAqLworICAgIHsKKyAgICAgIHl5Y2hhcjEgPSAwOworICAgICAgeXljaGFyID0gWVlFT0Y7CQkvKiBEb24ndCBjYWxsIFlZTEVYIGFueSBtb3JlICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIk5leHQgdG9rZW4gaXMgJWQgKCVzIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlIG1lYW5pbmcKKwkgICAgIG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyNpZmRlZiBZWVBSSU5UCisJICBZWVBSSU5UIChzdGRlcnIsIHl5Y2hhciwgeXlsdmFsKTsKKyNlbmRpZgorCSAgZnByaW50ZiAoc3RkZXJyLCAiKVxuIik7CisJfQorI2VuZGlmCisgICAgfQorCisgIHl5biArPSB5eWNoYXIxOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworCisgIC8qIHl5biBpcyB3aGF0IHRvIGRvIGZvciB0aGlzIHRva2VuIHR5cGUgaW4gdGhpcyBzdGF0ZS4KKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorICAgICBQb3NpdGl2ZSA9PiBzaGlmdCwgeXluIGlzIG5ldyBzdGF0ZS4KKyAgICAgICBOZXcgc3RhdGUgaXMgZmluYWwgc3RhdGUgPT4gZG9uJ3QgYm90aGVyIHRvIHNoaWZ0LAorICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisgICAgIDAsIG9yIG1vc3QgbmVnYXRpdmUgbnVtYmVyID0+IGVycm9yLiAgKi8KKworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisjZW5kaWYKKworICAvKiBEaXNjYXJkIHRoZSB0b2tlbiBiZWluZyBzaGlmdGVkIHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAoeXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgLyogY291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvciBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpIHl5ZXJyc3RhdHVzLS07CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisvKiBEbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KK3l5ZGVmYXVsdDoKKworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKy8qIERvIGEgcmVkdWN0aW9uLiAgeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KK3l5cmVkdWNlOgorICB5eWxlbiA9IHl5cjJbeXluXTsKKyAgaWYgKHl5bGVuID4gMCkKKyAgICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOyAvKiBpbXBsZW1lbnQgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJlZHVjaW5nIHZpYSBydWxlICVkIChsaW5lICVkKSwgIiwKKwkgICAgICAgeXluLCB5eXJsaW5lW3l5bl0pOworCisgICAgICAvKiBQcmludCB0aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0LiAgKi8KKyAgICAgIGZvciAoaSA9IHl5cHJoc1t5eW5dOyB5eXJoc1tpXSA+IDA7IGkrKykKKwlmcHJpbnRmIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW2ldXSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgLT4gJXNcbiIsIHl5dG5hbWVbeXlyMVt5eW5dXSk7CisgICAgfQorI2VuZGlmCisKKworICBzd2l0Y2ggKHl5bikgeworCitjYXNlIDE6CisjbGluZSAyMzcgImMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGFuIGVtcHR5IHNvdXJjZSBmaWxlIik7CisJCSAgZmluaXNoX2ZpbGUgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI6CisjbGluZSAyNDIgImMtcGFyc2UueSIKK3sKKwkJICAvKiBJbiBjYXNlIHRoZXJlIHdlcmUgbWlzc2luZyBjbG9zZWJyYWNlcywKKwkJICAgICBnZXQgdXMgYmFjayB0byB0aGUgZ2xvYmFsIGJpbmRpbmcgbGV2ZWwuICAqLworCQkgIHdoaWxlICghIGdsb2JhbF9iaW5kaW5nc19wICgpKQorCQkgICAgcG9wbGV2ZWwgKDAsIDAsIDApOworCQkgIGZpbmlzaF9maWxlICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAzOgorI2xpbmUgMjU2ICJjLXBhcnNlLnkiCit7eXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDU6CisjbGluZSAyNTcgImMtcGFyc2UueSIKK3t5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgOToKKyNsaW5lIDI2NCAiYy1wYXJzZS55IgoreyBTVFJJUF9OT1BTICh5eXZzcFstMl0udHR5cGUpOworCQkgIGlmICgoVFJFRV9DT0RFICh5eXZzcFstMl0udHR5cGUpID09IEFERFJfRVhQUgorCQkgICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKHl5dnNwWy0yXS50dHlwZSwgMCkpID09IFNUUklOR19DU1QpCisJCSAgICAgIHx8IFRSRUVfQ09ERSAoeXl2c3BbLTJdLnR0eXBlKSA9PSBTVFJJTkdfQ1NUKQorCQkgICAgYXNzZW1ibGVfYXNtICh5eXZzcFstMl0udHR5cGUpOworCQkgIGVsc2UKKwkJICAgIGVycm9yICgiYXJndW1lbnQgb2YgYGFzbScgaXMgbm90IGEgY29uc3RhbnQgc3RyaW5nIik7IDsKKyAgICBicmVhazt9CitjYXNlIDEwOgorI2xpbmUgMjcyICJjLXBhcnNlLnkiCit7IHBlZGFudGljID0geXl2c3BbLTFdLml0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMToKKyNsaW5lIDI3NyAiYy1wYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBlcnJvciAoIkFOU0kgQyBmb3JiaWRzIGRhdGEgZGVmaW5pdGlvbiB3aXRoIG5vIHR5cGUgb3Igc3RvcmFnZSBjbGFzcyIpOworCQkgIGVsc2UgaWYgKCFmbGFnX3RyYWRpdGlvbmFsKQorCQkgICAgd2FybmluZyAoImRhdGEgZGVmaW5pdGlvbiBoYXMgbm8gdHlwZSBvciBzdG9yYWdlIGNsYXNzIik7IAorCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMl0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMjoKKyNsaW5lIDI4NyAiYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzOgorI2xpbmUgMjkyICJjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgIDsKKyAgICBicmVhazt9CitjYXNlIDE0OgorI2xpbmUgMjk3ICJjLXBhcnNlLnkiCit7IHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNToKKyNsaW5lIDI5OSAiYy1wYXJzZS55IgoreyBzaGFkb3dfdGFnICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODoKKyNsaW5lIDMwMyAiYy1wYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGRvZXMgbm90IGFsbG93IGV4dHJhIGA7JyBvdXRzaWRlIG9mIGEgZnVuY3Rpb24iKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk6CisjbGluZSAzMDkgImMtcGFyc2UueSIKK3sgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFswXS50dHlwZSwKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDoKKyNsaW5lIDMxNCAiYy1wYXJzZS55IgoreyBzdG9yZV9wYXJtX2RlY2xzICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMToKKyNsaW5lIDMxNiAiYy1wYXJzZS55IgoreyBmaW5pc2hfZnVuY3Rpb24gKDApOyAKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy01XS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyOgorI2xpbmUgMzIyICJjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjM6CisjbGluZSAzMjcgImMtcGFyc2UueSIKK3sgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFswXS50dHlwZSwKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDoKKyNsaW5lIDMzMiAiYy1wYXJzZS55IgoreyBzdG9yZV9wYXJtX2RlY2xzICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNToKKyNsaW5lIDMzNCAiYy1wYXJzZS55IgoreyBmaW5pc2hfZnVuY3Rpb24gKDApOyAKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy01XS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2OgorI2xpbmUgMzQwICJjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc6CisjbGluZSAzNDUgImMtcGFyc2UueSIKK3sgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDApKQorCQkgICAgWVlFUlJPUjE7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbiAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg6CisjbGluZSAzNTAgImMtcGFyc2UueSIKK3sgc3RvcmVfcGFybV9kZWNscyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjk6CisjbGluZSAzNTIgImMtcGFyc2UueSIKK3sgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstNV0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMDoKKyNsaW5lIDM1OCAiYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzOgorI2xpbmUgMzcwICJjLXBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBBRERSX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDM0OgorI2xpbmUgMzcyICJjLXBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBORUdBVEVfRVhQUjsgOworICAgIGJyZWFrO30KK2Nhc2UgMzU6CisjbGluZSAzNzQgImMtcGFyc2UueSIKK3sgeXl2YWwuY29kZSA9IENPTlZFUlRfRVhQUjsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY6CisjbGluZSAzNzYgImMtcGFyc2UueSIKK3sgeXl2YWwuY29kZSA9IFBSRUlOQ1JFTUVOVF9FWFBSOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzoKKyNsaW5lIDM3OCAiYy1wYXJzZS55IgoreyB5eXZhbC5jb2RlID0gUFJFREVDUkVNRU5UX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDM4OgorI2xpbmUgMzgwICJjLXBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBCSVRfTk9UX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDM5OgorI2xpbmUgMzgyICJjLXBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBUUlVUSF9OT1RfRVhQUjsgOworICAgIGJyZWFrO30KK2Nhc2UgNDA6CisjbGluZSAzODYgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9jb21wb3VuZF9leHByICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQxOgorI2xpbmUgMzkxICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MzoKKyNsaW5lIDM5NyAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ0OgorI2xpbmUgMzk5ICJjLXBhcnNlLnkiCit7IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ2OgorI2xpbmUgNDA1ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfaW5kaXJlY3RfcmVmICh5eXZzcFswXS50dHlwZSwgInVuYXJ5ICoiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDc6CisjbGluZSA0MDggImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDg6CisjbGluZSA0MTEgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF91bmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWzBdLnR0eXBlLCAwKTsKKwkJICBvdmVyZmxvd193YXJuaW5nICh5eXZhbC50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5OgorI2xpbmUgNDE1ICJjLXBhcnNlLnkiCit7IHRyZWUgbGFiZWwgPSBsb29rdXBfbGFiZWwgKHl5dnNwWzBdLnR0eXBlKTsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYCYmJyIpOworCQkgIGlmIChsYWJlbCA9PSAwKQorCQkgICAgeXl2YWwudHR5cGUgPSBudWxsX3BvaW50ZXJfbm9kZTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIFRSRUVfVVNFRCAobGFiZWwpID0gMTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBidWlsZDEgKEFERFJfRVhQUiwgcHRyX3R5cGVfbm9kZSwgbGFiZWwpOworCQkgICAgICBUUkVFX0NPTlNUQU5UICh5eXZhbC50dHlwZSkgPSAxOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA1MDoKKyNsaW5lIDQ0MyAiYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICBpZiAoVFJFRV9DT0RFICh5eXZzcFswXS50dHlwZSkgPT0gQ09NUE9ORU5UX1JFRgorCQkgICAgICAmJiBERUNMX0JJVF9GSUVMRCAoVFJFRV9PUEVSQU5EICh5eXZzcFswXS50dHlwZSwgMSkpKQorCQkgICAgZXJyb3IgKCJgc2l6ZW9mJyBhcHBsaWVkIHRvIGEgYml0LWZpZWxkIik7CisJCSAgeXl2YWwudHR5cGUgPSBjX3NpemVvZiAoVFJFRV9UWVBFICh5eXZzcFswXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MToKKyNsaW5lIDQ0OSAiYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICB5eXZhbC50dHlwZSA9IGNfc2l6ZW9mIChncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MjoKKyNsaW5lIDQ1MiAiYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICB5eXZhbC50dHlwZSA9IGNfYWxpZ25vZl9leHByICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDUzOgorI2xpbmUgNDU1ICJjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbi0tOworCQkgIHl5dmFsLnR0eXBlID0gY19hbGlnbm9mIChncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NDoKKyNsaW5lIDQ1OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3VuYXJ5X29wIChSRUFMUEFSVF9FWFBSLCB5eXZzcFswXS50dHlwZSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDU1OgorI2xpbmUgNDYwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdW5hcnlfb3AgKElNQUdQQVJUX0VYUFIsIHl5dnNwWzBdLnR0eXBlLCAwKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTY6CisjbGluZSA0NjQgImMtcGFyc2UueSIKK3sgc2tpcF9ldmFsdWF0aW9uKys7IDsKKyAgICBicmVhazt9CitjYXNlIDU3OgorI2xpbmUgNDY4ICJjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbisrOyA7CisgICAgYnJlYWs7fQorY2FzZSA1OToKKyNsaW5lIDQ3NCAiYy1wYXJzZS55IgoreyB0cmVlIHR5cGUgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy0yXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9jX2Nhc3QgKHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjA6CisjbGluZSA0NzcgImMtcGFyc2UueSIKK3sgc3RhcnRfaW5pdCAoTlVMTF9UUkVFLCBOVUxMLCAwKTsKKwkJICB5eXZzcFstMl0udHR5cGUgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy0yXS50dHlwZSk7CisJCSAgcmVhbGx5X3N0YXJ0X2luY3JlbWVudGFsX2luaXQgKHl5dnNwWy0yXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDYxOgorI2xpbmUgNDgxICJjLXBhcnNlLnkiCit7IGNoYXIgKm5hbWU7CisJCSAgdHJlZSByZXN1bHQgPSBwb3BfaW5pdF9sZXZlbCAoMCk7CisJCSAgdHJlZSB0eXBlID0geXl2c3BbLTVdLnR0eXBlOworCQkgIGZpbmlzaF9pbml0ICgpOworCisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb25zIik7CisJCSAgaWYgKFRZUEVfTkFNRSAodHlwZSkgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgaWYgKFRSRUVfQ09ERSAoVFlQRV9OQU1FICh0eXBlKSkgPT0gSURFTlRJRklFUl9OT0RFKQorCQkJbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9OQU1FICh0eXBlKSk7CisJCSAgICAgIGVsc2UKKwkJCW5hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoVFlQRV9OQU1FICh0eXBlKSkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIG5hbWUgPSAiIjsKKwkJICB5eXZhbC50dHlwZSA9IHJlc3VsdDsKKwkJICBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFICYmIFRZUEVfU0laRSAodHlwZSkgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgaW50IGZhaWx1cmUgPSBjb21wbGV0ZV9hcnJheV90eXBlICh0eXBlLCB5eXZhbC50dHlwZSwgMSk7CisJCSAgICAgIGlmIChmYWlsdXJlKQorCQkJYWJvcnQgKCk7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDYzOgorI2xpbmUgNTEwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NDoKKyNsaW5lIDUxMiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjU6CisjbGluZSA1MTQgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDY2OgorI2xpbmUgNTE2ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NzoKKyNsaW5lIDUxOCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjg6CisjbGluZSA1MjAgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDY5OgorI2xpbmUgNTIyICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MDoKKyNsaW5lIDUyNCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzE6CisjbGluZSA1MjYgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDcyOgorI2xpbmUgNTI4ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MzoKKyNsaW5lIDUzMCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzQ6CisjbGluZSA1MzIgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDc1OgorI2xpbmUgNTM0ICJjLXBhcnNlLnkiCit7IHl5dnNwWy0xXS50dHlwZSA9IHRydXRodmFsdWVfY29udmVyc2lvbiAoZGVmYXVsdF9jb252ZXJzaW9uICh5eXZzcFstMV0udHR5cGUpKTsKKwkJICBza2lwX2V2YWx1YXRpb24gKz0geXl2c3BbLTFdLnR0eXBlID09IGJvb2xlYW5fZmFsc2Vfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzY6CisjbGluZSA1MzcgImMtcGFyc2UueSIKK3sgc2tpcF9ldmFsdWF0aW9uIC09IHl5dnNwWy0zXS50dHlwZSA9PSBib29sZWFuX2ZhbHNlX25vZGU7CisJCSAgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wIChUUlVUSF9BTkRJRl9FWFBSLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc6CisjbGluZSA1NDAgImMtcGFyc2UueSIKK3sgeXl2c3BbLTFdLnR0eXBlID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKHl5dnNwWy0xXS50dHlwZSkpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSB5eXZzcFstMV0udHR5cGUgPT0gYm9vbGVhbl90cnVlX25vZGU7IDsKKyAgICBicmVhazt9CitjYXNlIDc4OgorI2xpbmUgNTQzICJjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbiAtPSB5eXZzcFstM10udHR5cGUgPT0gYm9vbGVhbl90cnVlX25vZGU7CisJCSAgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wIChUUlVUSF9PUklGX0VYUFIsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3OToKKyNsaW5lIDU0NiAiYy1wYXJzZS55IgoreyB5eXZzcFstMV0udHR5cGUgPSB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKGRlZmF1bHRfY29udmVyc2lvbiAoeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgc2tpcF9ldmFsdWF0aW9uICs9IHl5dnNwWy0xXS50dHlwZSA9PSBib29sZWFuX2ZhbHNlX25vZGU7IDsKKyAgICBicmVhazt9CitjYXNlIDgwOgorI2xpbmUgNTQ5ICJjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbiArPSAoKHl5dnNwWy00XS50dHlwZSA9PSBib29sZWFuX3RydWVfbm9kZSkKKwkJCQkgICAgICAtICh5eXZzcFstNF0udHR5cGUgPT0gYm9vbGVhbl9mYWxzZV9ub2RlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDgxOgorI2xpbmUgNTUyICJjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbiAtPSB5eXZzcFstNl0udHR5cGUgPT0gYm9vbGVhbl90cnVlX25vZGU7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9jb25kaXRpb25hbF9leHByICh5eXZzcFstNl0udHR5cGUsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA4MjoKKyNsaW5lIDU1NSAiYy1wYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgb21pdHRpbmcgdGhlIG1pZGRsZSB0ZXJtIG9mIGEgPzogZXhwcmVzc2lvbiIpOworCQkgIC8qIE1ha2Ugc3VyZSBmaXJzdCBvcGVyYW5kIGlzIGNhbGN1bGF0ZWQgb25seSBvbmNlLiAgKi8KKwkJICB5eXZzcFswXS50dHlwZSA9IHNhdmVfZXhwciAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICB5eXZzcFstMV0udHR5cGUgPSB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKGRlZmF1bHRfY29udmVyc2lvbiAoeXl2c3BbMF0udHR5cGUpKTsKKwkJICBza2lwX2V2YWx1YXRpb24gKz0geXl2c3BbLTFdLnR0eXBlID09IGJvb2xlYW5fdHJ1ZV9ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSA4MzoKKyNsaW5lIDU2MiAiYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24gLT0geXl2c3BbLTRdLnR0eXBlID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwciAoeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgODQ6CisjbGluZSA1NjUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9tb2RpZnlfZXhwciAoeXl2c3BbLTJdLnR0eXBlLCBOT1BfRVhQUiwgeXl2c3BbMF0udHR5cGUpOworCQkgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICh5eXZhbC50dHlwZSwgTU9ESUZZX0VYUFIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA4NToKKyNsaW5lIDU2OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX21vZGlmeV9leHByICh5eXZzcFstMl0udHR5cGUsIHl5dnNwWy0xXS5jb2RlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgLyogVGhpcyBpbmhpYml0cyB3YXJuaW5ncyBpbiB0cnV0aHZhbHVlX2NvbnZlcnNpb24uICAqLworCQkgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICh5eXZhbC50dHlwZSwgRVJST1JfTUFSSyk7IDsKKyAgICBicmVhazt9CitjYXNlIDg2OgorI2xpbmUgNTc1ICJjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBsYXN0aWRkZWNsOworCQkgIGlmICgheXl2YWwudHR5cGUgfHwgeXl2YWwudHR5cGUgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeworCQkgICAgICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisJCQl5eWNoYXIgPSBZWUxFWDsKKwkJICAgICAgaWYgKHl5Y2hhciA9PSAnKCcpCisJCQl7CisJCQkgICAgeworCQkJICAgICAgLyogT3JkaW5hcnkgaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb24uICAqLworCQkJICAgICAgeXl2YWwudHR5cGUgPSBpbXBsaWNpdGx5X2RlY2xhcmUgKHl5dnNwWzBdLnR0eXBlKTsKKwkJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICh5eXZhbC50dHlwZSk7CisJCQkgICAgICBUUkVFX1VTRUQgKHl5dmFsLnR0eXBlKSA9IDE7CisJCQkgICAgfQorCQkJfQorCQkgICAgICBlbHNlIGlmIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPT0gMCkKKwkJCXsKKwkJCSAgZXJyb3IgKCJgJXMnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pIiwKKwkJCQkgSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFswXS50dHlwZSkpOworCQkJICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJeworCQkJICAgIHsKKwkJCSAgICAgIGlmIChJREVOVElGSUVSX0dMT0JBTF9WQUxVRSAoeXl2c3BbMF0udHR5cGUpICE9IGVycm9yX21hcmtfbm9kZQorCQkJCSAgfHwgSURFTlRJRklFUl9FUlJPUl9MT0NVUyAoeXl2c3BbMF0udHR5cGUpICE9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkKKwkJCQl7CisJCQkJICBlcnJvciAoImAlcycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIHRoaXMgZnVuY3Rpb24pIiwKKwkJCQkJIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsKKworCQkJCSAgaWYgKCEgdW5kZWNsYXJlZF92YXJpYWJsZV9ub3RpY2UpCisJCQkJICAgIHsKKwkJCQkgICAgICBlcnJvciAoIihFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UiKTsKKwkJCQkgICAgICBlcnJvciAoImZvciBlYWNoIGZ1bmN0aW9uIGl0IGFwcGVhcnMgaW4uKSIpOworCQkJCSAgICAgIHVuZGVjbGFyZWRfdmFyaWFibGVfbm90aWNlID0gMTsKKwkJCQkgICAgfQorCQkJCX0KKwkJCSAgICAgIHl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgLyogUHJldmVudCByZXBlYXRlZCBlcnJvciBtZXNzYWdlcy4gICovCisJCQkgICAgICBJREVOVElGSUVSX0dMT0JBTF9WQUxVRSAoeXl2c3BbMF0udHR5cGUpID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgSURFTlRJRklFUl9FUlJPUl9MT0NVUyAoeXl2c3BbMF0udHR5cGUpID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlIGlmIChUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKSA9PSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJICBlbHNlIGlmIChDX0RFQ0xfQU5USUNJUEFURUQgKHl5dmFsLnR0eXBlKSkKKwkJICAgIHsKKwkJICAgICAgLyogVGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGEgYnVpbGQtaW4gZnVuY3Rpb24gdXNlZCwKKwkJCSBpZiBpdCBoYXMgbm90IGJlZW4gZGVjbGFyZWQuICAqLworCQkgICAgICBDX0RFQ0xfQU5USUNJUEFURUQgKHl5dmFsLnR0eXBlKSA9IDA7CisJCSAgICAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKwkJCXl5Y2hhciA9IFlZTEVYOworCQkgICAgICBpZiAoeXljaGFyID09ICcoJykKKwkJCXsKKwkJCSAgLyogT21pdCB0aGUgaW1wbGljaXQgZGVjbGFyYXRpb24gd2UKKwkJCSAgICAgd291bGQgb3JkaW5hcmlseSBkbywgc28gd2UgZG9uJ3QgbG9zZQorCQkJICAgICB0aGUgYWN0dWFsIGJ1aWx0IGluIHR5cGUuCisJCQkgICAgIEJ1dCBwcmludCBhIGRpYWdub3N0aWMgZm9yIHRoZSBtaXNtYXRjaC4gICovCisJCQkgICAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpICE9IEZVTkNUSU9OX0RFQ0wpCisJCQkgICAgICBlcnJvciAoImAlcycgaW1wbGljaXRseSBkZWNsYXJlZCBhcyBmdW5jdGlvbiIsCisJCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoeXl2YWwudHR5cGUpKSk7CisJCQkgIGVsc2UgaWYgKChUWVBFX01PREUgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICh5eXZhbC50dHlwZSkpKQorCQkJCSAgICAhPSBUWVBFX01PREUgKGludGVnZXJfdHlwZV9ub2RlKSkKKwkJCQkgICAmJiAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKSkKKwkJCQkgICAgICAgIT0gdm9pZF90eXBlX25vZGUpKQorCQkJICAgIHBlZHdhcm4gKCJ0eXBlIG1pc21hdGNoIGluIGltcGxpY2l0IGRlY2xhcmF0aW9uIGZvciBidWlsdC1pbiBmdW5jdGlvbiBgJXMnIiwKKwkJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICh5eXZhbC50dHlwZSkpKTsKKwkJCSAgLyogSWYgaXQgcmVhbGx5IHJldHVybnMgdm9pZCwgY2hhbmdlIHRoYXQgdG8gaW50LiAgKi8KKwkJCSAgaWYgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICh5eXZhbC50dHlwZSkpID09IHZvaWRfdHlwZV9ub2RlKQorCQkJICAgIFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpCisJCQkgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkJICAgICBUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFICh5eXZhbC50dHlwZSkpKTsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJcGVkd2FybiAoImJ1aWx0LWluIGZ1bmN0aW9uIGAlcycgdXNlZCB3aXRob3V0IGRlY2xhcmF0aW9uIiwKKwkJCQkgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKHl5dmFsLnR0eXBlKSkpOworCisJCSAgICAgIC8qIERvIHdoYXQgd2Ugd291bGQgb3JkaW5hcmlseSBkbyB3aGVuIGEgZm4gaXMgdXNlZC4gICovCisJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICh5eXZhbC50dHlwZSk7CisJCSAgICAgIFRSRUVfVVNFRCAoeXl2YWwudHR5cGUpID0gMTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICh5eXZhbC50dHlwZSk7CisJCSAgICAgIFRSRUVfVVNFRCAoeXl2YWwudHR5cGUpID0gMTsKKwkJICAgIH0KKworCQkgIGlmIChUUkVFX0NPREUgKHl5dmFsLnR0eXBlKSA9PSBDT05TVF9ERUNMKQorCQkgICAgeworCQkgICAgICB5eXZhbC50dHlwZSA9IERFQ0xfSU5JVElBTCAoeXl2YWwudHR5cGUpOworCQkgICAgICAvKiBUaGlzIGlzIHRvIHByZXZlbnQgYW4gZW51bSB3aG9zZSB2YWx1ZSBpcyAwCisJCQkgZnJvbSBiZWluZyBjb25zaWRlcmVkIGEgbnVsbCBwb2ludGVyIGNvbnN0YW50LiAgKi8KKwkJICAgICAgeXl2YWwudHR5cGUgPSBidWlsZDEgKE5PUF9FWFBSLCBUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKSwgeXl2YWwudHR5cGUpOworCQkgICAgICBUUkVFX0NPTlNUQU5UICh5eXZhbC50dHlwZSkgPSAxOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA4ODoKKyNsaW5lIDY3NCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNvbWJpbmVfc3RyaW5ncyAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA4OToKKyNsaW5lIDY3NiAiYy1wYXJzZS55IgoreyBjaGFyIGNsYXNzID0gVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKHl5dnNwWy0xXS50dHlwZSkpOworCQkgIGlmIChjbGFzcyA9PSAnZScgfHwgY2xhc3MgPT0gJzEnCisJCSAgICAgIHx8IGNsYXNzID09ICcyJyB8fCBjbGFzcyA9PSAnPCcpCisJCSAgICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoeXl2c3BbLTFdLnR0eXBlLCBFUlJPUl9NQVJLKTsKKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTA6CisjbGluZSA2ODIgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7IDsKKyAgICBicmVhazt9CitjYXNlIDkxOgorI2xpbmUgNjg0ICJjLXBhcnNlLnkiCit7IGlmIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJicmFjZWQtZ3JvdXAgd2l0aGluIGV4cHJlc3Npb24gYWxsb3dlZCBvbmx5IGluc2lkZSBhIGZ1bmN0aW9uIik7CisJCSAgICAgIFlZRVJST1I7CisJCSAgICB9CisJCSAgLyogV2UgbXVzdCBmb3JjZSBhIEJMT0NLIGZvciB0aGlzIGxldmVsCisJCSAgICAgc28gdGhhdCwgaWYgaXQgaXMgbm90IGV4cGFuZGVkIGxhdGVyLAorCQkgICAgIHRoZXJlIGlzIGEgd2F5IHRvIHR1cm4gb2ZmIHRoZSBlbnRpcmUgc3VidHJlZSBvZiBibG9ja3MKKwkJICAgICB0aGF0IGFyZSBjb250YWluZWQgaW4gaXQuICAqLworCQkgIGtlZXBfbmV4dF9sZXZlbCAoKTsKKwkJICBwdXNoX2l0ZXJhdG9yX3N0YWNrICgpOworCQkgIHB1c2hfbGFiZWxfbGV2ZWwgKCk7CisJCSAgeXl2YWwudHR5cGUgPSBleHBhbmRfc3RhcnRfc3RtdF9leHByICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA5MjoKKyNsaW5lIDY5OCAiYy1wYXJzZS55IgoreyB0cmVlIHJ0bF9leHA7CisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGJyYWNlZC1ncm91cHMgd2l0aGluIGV4cHJlc3Npb25zIik7CisJCSAgcG9wX2l0ZXJhdG9yX3N0YWNrICgpOworCQkgIHBvcF9sYWJlbF9sZXZlbCAoKTsKKwkJICBydGxfZXhwID0gZXhwYW5kX2VuZF9zdG10X2V4cHIgKHl5dnNwWy0yXS50dHlwZSk7CisJCSAgLyogVGhlIHN0YXRlbWVudHMgaGF2ZSBzaWRlIGVmZmVjdHMsIHNvIHRoZSBncm91cCBkb2VzLiAgKi8KKwkJICBUUkVFX1NJREVfRUZGRUNUUyAocnRsX2V4cCkgPSAxOworCisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2c3BbLTFdLnR0eXBlKSA9PSBCTE9DSykKKwkJICAgIHsKKwkJICAgICAgLyogTWFrZSBhIEJJTkRfRVhQUiBmb3IgdGhlIEJMT0NLIGFscmVhZHkgbWFkZS4gICovCisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGQgKEJJTkRfRVhQUiwgVFJFRV9UWVBFIChydGxfZXhwKSwKKwkJCQkgIE5VTExfVFJFRSwgcnRsX2V4cCwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICAgICAgLyogUmVtb3ZlIHRoZSBibG9jayBmcm9tIHRoZSB0cmVlIGF0IHRoaXMgcG9pbnQuCisJCQkgSXQgZ2V0cyBwdXQgYmFjayBhdCB0aGUgcHJvcGVyIHBsYWNlCisJCQkgd2hlbiB0aGUgQklORF9FWFBSIGlzIGV4cGFuZGVkLiAgKi8KKwkJICAgICAgZGVsZXRlX2Jsb2NrICh5eXZzcFstMV0udHR5cGUpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA5MzoKKyNsaW5lIDcyMSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX2NhbGwgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTQ6CisjbGluZSA3MjMgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9hcnJheV9yZWYgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTU6CisjbGluZSA3MjUgImMtcGFyc2UueSIKK3sKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfY29tcG9uZW50X3JlZiAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDk2OgorI2xpbmUgNzI5ICJjLXBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICB0cmVlIGV4cHIgPSBidWlsZF9pbmRpcmVjdF9yZWYgKHl5dnNwWy0yXS50dHlwZSwgIi0+Iik7CisKKyAgICAgICAgICAgICAgICAgICAgeXl2YWwudHR5cGUgPSBidWlsZF9jb21wb25lbnRfcmVmIChleHByLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDk3OgorI2xpbmUgNzM1ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdW5hcnlfb3AgKFBPU1RJTkNSRU1FTlRfRVhQUiwgeXl2c3BbLTFdLnR0eXBlLCAwKTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTg6CisjbGluZSA3MzcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF91bmFyeV9vcCAoUE9TVERFQ1JFTUVOVF9FWFBSLCB5eXZzcFstMV0udHR5cGUsIDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDA6CisjbGluZSA3NDQgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTAzOgorI2xpbmUgNzUzICJjLXBhcnNlLnkiCit7IGNfbWFya192YXJhcmdzICgpOworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZG9lcyBub3QgcGVybWl0IHVzZSBvZiBgdmFyYXJncy5oJyIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDQ6CisjbGluZSA3NjMgImMtcGFyc2UueSIKK3sgOworICAgIGJyZWFrO30KK2Nhc2UgMTA5OgorI2xpbmUgNzc5ICJjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTEwOgorI2xpbmUgNzg0ICJjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOwkKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDExMToKKyNsaW5lIDc4OSAiYy1wYXJzZS55IgoreyBzaGFkb3dfdGFnX3dhcm5lZCAoeXl2c3BbLTFdLnR0eXBlLCAxKTsKKwkJICBwZWR3YXJuICgiZW1wdHkgZGVjbGFyYXRpb24iKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTEyOgorI2xpbmUgNzkyICJjLXBhcnNlLnkiCit7IHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMTM6CisjbGluZSA4MDEgImMtcGFyc2UueSIKK3sgOworICAgIGJyZWFrO30KK2Nhc2UgMTE4OgorI2xpbmUgODE2ICJjLXBhcnNlLnkiCit7IHl5dmFsLml0eXBlID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgcGVuZGluZ194cmVmX2Vycm9yICgpOworCQkgIGRlY2xzcGVjX3N0YWNrID0gdHJlZV9jb25zIChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJICAgICAgY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCSAgICAgIGRlY2xzcGVjX3N0YWNrKTsKKwkJICBzcGxpdF9zcGVjc19hdHRycyAoeXl2c3BbMF0udHR5cGUsCisJCQkJICAgICAmY3VycmVudF9kZWNsc3BlY3MsICZwcmVmaXhfYXR0cmlidXRlcyk7IDsKKyAgICBicmVhazt9CitjYXNlIDExOToKKyNsaW5lIDgyNyAiYy1wYXJzZS55IgoreyBwcmVmaXhfYXR0cmlidXRlcyA9IGNoYWlub24gKHByZWZpeF9hdHRyaWJ1dGVzLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyMDoKKyNsaW5lIDgzMiAiYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyMToKKyNsaW5lIDgzNyAiYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyMjoKKyNsaW5lIDg0MiAiYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyMzoKKyNsaW5lIDg0NyAiYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyNDoKKyNsaW5lIDg1MiAiYy1wYXJzZS55IgoreyBzaGFkb3dfdGFnICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMjU6CisjbGluZSA4NTQgImMtcGFyc2UueSIKK3sgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IDsKKyAgICBicmVhazt9CitjYXNlIDEyNjoKKyNsaW5lIDg1NiAiYy1wYXJzZS55IgoreyBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTI3OgorI2xpbmUgODY2ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMjg6CisjbGluZSA4NjggImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyOToKKyNsaW5lIDg3MiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTMwOgorI2xpbmUgODc0ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzE6CisjbGluZSA4NzYgImMtcGFyc2UueSIKK3sgaWYgKGV4dHJhX3dhcm5pbmdzKQorCQkgICAgd2FybmluZyAoImAlcycgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiIsCisJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsKKwkJICB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTMyOgorI2xpbmUgODgxICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzM6CisjbGluZSA4ODYgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzNDoKKyNsaW5lIDg4OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWzBdLnR0eXBlLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM1OgorI2xpbmUgODkzICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzY6CisjbGluZSA4OTUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzNzoKKyNsaW5lIDg5NyAiYy1wYXJzZS55IgoreyBpZiAoZXh0cmFfd2FybmluZ3MpCisJCSAgICB3YXJuaW5nICgiYCVzJyBpcyBub3QgYXQgYmVnaW5uaW5nIG9mIGRlY2xhcmF0aW9uIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFswXS50dHlwZSkpOworCQkgIHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzg6CisjbGluZSA5MTAgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM5OgorI2xpbmUgOTEyICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDA6CisjbGluZSA5MTQgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQxOgorI2xpbmUgOTE2ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDI6CisjbGluZSA5MjEgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSk7CisJCSAgVFJFRV9TVEFUSUMgKHl5dmFsLnR0eXBlKSA9IDE7IDsKKyAgICBicmVhazt9CitjYXNlIDE0MzoKKyNsaW5lIDkyNCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQ0OgorI2xpbmUgOTI2ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOworCQkgIFRSRUVfU1RBVElDICh5eXZhbC50dHlwZSkgPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDU6CisjbGluZSA5MjkgImMtcGFyc2UueSIKK3sgaWYgKGV4dHJhX3dhcm5pbmdzICYmIFRSRUVfU1RBVElDICh5eXZzcFstMV0udHR5cGUpKQorCQkgICAgd2FybmluZyAoImAlcycgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiIsCisJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsKKwkJICB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBUUkVFX1NUQVRJQyAoeXl2YWwudHR5cGUpID0gVFJFRV9TVEFUSUMgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE0NjoKKyNsaW5lIDk0MyAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQ3OgorI2xpbmUgOTQ1ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbMF0udHR5cGUsIHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDg6CisjbGluZSA5NDkgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDE0OToKKyNsaW5lIDk1MSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTUyOgorI2xpbmUgOTYxICJjLXBhcnNlLnkiCit7IC8qIEZvciBhIHR5cGVkZWYgbmFtZSwgcmVjb3JkIHRoZSBtZWFuaW5nLCBub3QgdGhlIG5hbWUuCisJCSAgICAgSW4gY2FzZSBvZiBgZm9vIGZvbywgYmFyOycuICAqLworCQkgIHl5dmFsLnR0eXBlID0gbG9va3VwX25hbWUgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTUzOgorI2xpbmUgOTY1ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gVFJFRV9UWVBFICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNTQ6CisjbGluZSA5NjcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE2MjoKKyNsaW5lIDk4OSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTYzOgorI2xpbmUgOTkxICJjLXBhcnNlLnkiCit7IGlmIChUUkVFX0NIQUlOICh5eXZzcFstMV0udHR5cGUpKSB5eXZzcFstMV0udHR5cGUgPSBjb21iaW5lX3N0cmluZ3MgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDE2NDoKKyNsaW5lIDk5OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0zXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDEsCisJCQkJCSAgeXl2c3BbLTFdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgc3RhcnRfaW5pdCAoeXl2YWwudHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgZ2xvYmFsX2JpbmRpbmdzX3AgKCkpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjU6CisjbGluZSAxMDAzICJjLXBhcnNlLnkiCit7IGZpbmlzaF9pbml0ICgpOworCQkgIGZpbmlzaF9kZWNsICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstNF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjY6CisjbGluZSAxMDA2ICJjLXBhcnNlLnkiCit7IHRyZWUgZCA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0yXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDAsCisJCQkJICAgICAgIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKTsgCisgICAgICAgICAgICAgICAgOworICAgIGJyZWFrO30KK2Nhc2UgMTY3OgorI2xpbmUgMTAxNCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0zXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDEsCisJCQkJCSAgeXl2c3BbLTFdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgc3RhcnRfaW5pdCAoeXl2YWwudHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgZ2xvYmFsX2JpbmRpbmdzX3AgKCkpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjg6CisjbGluZSAxMDE5ICJjLXBhcnNlLnkiCit7IGZpbmlzaF9pbml0ICgpOworCQkgIGRlY2xfYXR0cmlidXRlcyAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFstM10udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBmaW5pc2hfZGVjbCAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTRdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTY5OgorI2xpbmUgMTAyMyAiYy1wYXJzZS55IgoreyB0cmVlIGQgPSBzdGFydF9kZWNsICh5eXZzcFstMl0udHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCAwLAorCQkJCSAgICAgICB5eXZzcFswXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOworCQkgIGZpbmlzaF9kZWNsIChkLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3MDoKKyNsaW5lIDEwMzEgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDE3MToKKyNsaW5lIDEwMzMgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTcyOgorI2xpbmUgMTAzOCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNzM6CisjbGluZSAxMDQwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3NDoKKyNsaW5lIDEwNDUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFstMl0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDE3NToKKyNsaW5lIDEwNTAgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc2OgorI2xpbmUgMTA1MiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNzc6CisjbGluZSAxMDU3ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNzg6CisjbGluZSAxMDU5ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc5OgorI2xpbmUgMTA2MSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTNdLnR0eXBlLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE4MDoKKyNsaW5lIDEwNjMgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy01XS50dHlwZSwgdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE4MToKKyNsaW5lIDEwNjUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg3OgorI2xpbmUgMTA4MyAiYy1wYXJzZS55IgoreyByZWFsbHlfc3RhcnRfaW5jcmVtZW50YWxfaW5pdCAoTlVMTF9UUkVFKTsKKwkJICAvKiBOb3RlIHRoYXQgdGhlIGNhbGwgdG8gY2xlYXJfbW9tZW50YXJ5CisJCSAgICAgaXMgaW4gcHJvY2Vzc19pbml0X2VsZW1lbnQuICAqLworCQkgIHB1c2hfbW9tZW50YXJ5ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODg6CisjbGluZSAxMDg4ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcG9wX2luaXRfbGV2ZWwgKDApOworCQkgIGlmICh5eXZhbC50dHlwZSA9PSBlcnJvcl9tYXJrX25vZGUKKwkJICAgICAgJiYgISAoeXljaGFyID09IFNUUklORyB8fCB5eWNoYXIgPT0gQ09OU1RBTlQpKQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg5OgorI2xpbmUgMTA5NiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTkwOgorI2xpbmUgMTEwMiAiYy1wYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgZW1wdHkgaW5pdGlhbGl6ZXIgYnJhY2VzIik7IDsKKyAgICBicmVhazt9CitjYXNlIDE5NDoKKyNsaW5lIDExMTYgImMtcGFyc2UueSIKK3sgcHJvY2Vzc19pbml0X2VsZW1lbnQgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk1OgorI2xpbmUgMTExOCAiYy1wYXJzZS55IgoreyBwdXNoX2luaXRfbGV2ZWwgKDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTY6CisjbGluZSAxMTIwICJjLXBhcnNlLnkiCit7IHByb2Nlc3NfaW5pdF9lbGVtZW50IChwb3BfaW5pdF9sZXZlbCAoMCkpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTg6CisjbGluZSAxMTI2ICJjLXBhcnNlLnkiCit7IHNldF9pbml0X2luZGV4ICh5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIwMDoKKyNsaW5lIDExMjkgImMtcGFyc2UueSIKK3sgc2V0X2luaXRfaW5kZXggKHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjAyOgorI2xpbmUgMTEzMiAiYy1wYXJzZS55IgoreyBzZXRfaW5pdF9pbmRleCAoeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDQ6CisjbGluZSAxMTM1ICJjLXBhcnNlLnkiCit7IHNldF9pbml0X2xhYmVsICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDY6CisjbGluZSAxMTM4ICJjLXBhcnNlLnkiCit7IHNldF9pbml0X2xhYmVsICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDg6CisjbGluZSAxMTQ0ICJjLXBhcnNlLnkiCit7IHB1c2hfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgIGlmICghIHN0YXJ0X2Z1bmN0aW9uIChjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDEpKQorCQkgICAgeworCQkgICAgICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgICAgICBZWUVSUk9SMTsKKwkJICAgIH0KKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDk6CisjbGluZSAxMTUzICJjLXBhcnNlLnkiCit7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxMDoKKyNsaW5lIDExNjEgImMtcGFyc2UueSIKK3sgZmluaXNoX2Z1bmN0aW9uICgxKTsKKwkJICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMTE6CisjbGluZSAxMTY3ICJjLXBhcnNlLnkiCit7IHB1c2hfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgIGlmICghIHN0YXJ0X2Z1bmN0aW9uIChjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDEpKQorCQkgICAgeworCQkgICAgICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgICAgICBZWUVSUk9SMTsKKwkJICAgIH0KKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMTI6CisjbGluZSAxMTc2ICJjLXBhcnNlLnkiCit7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxMzoKKyNsaW5lIDExODQgImMtcGFyc2UueSIKK3sgZmluaXNoX2Z1bmN0aW9uICgxKTsKKwkJICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMTY6CisjbGluZSAxMjAwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMTc6CisjbGluZSAxMjAyICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKENBTExfRVhQUiwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjE4OgorI2xpbmUgMTIwNyAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChBUlJBWV9SRUYsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjE5OgorI2xpbmUgMTIwOSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChBUlJBWV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjIwOgorI2xpbmUgMTIxMSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjIxOgorI2xpbmUgMTIxOCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjM6CisjbGluZSAxMjI5ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKENBTExfRVhQUiwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjI0OgorI2xpbmUgMTIzNCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChBUlJBWV9SRUYsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjI1OgorI2xpbmUgMTIzNiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChBUlJBWV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjI2OgorI2xpbmUgMTIzOCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjI3OgorI2xpbmUgMTI0NSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjk6CisjbGluZSAxMjU0ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKENBTExfRVhQUiwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjMwOgorI2xpbmUgMTI1OSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjMxOgorI2xpbmUgMTI2MSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjMyOgorI2xpbmUgMTI2MyAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChBUlJBWV9SRUYsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjMzOgorI2xpbmUgMTI2NSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChBUlJBWV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjM0OgorI2xpbmUgMTI3MiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzY6CisjbGluZSAxMjc4ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gc3RhcnRfc3RydWN0IChSRUNPUkRfVFlQRSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICAvKiBTdGFydCBzY29wZSBvZiB0YWcgYmVmb3JlIHBhcnNpbmcgY29tcG9uZW50cy4gICovCisJCTsKKyAgICBicmVhazt9CitjYXNlIDIzNzoKKyNsaW5lIDEyODIgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBmaW5pc2hfc3RydWN0ICh5eXZzcFstM10udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzg6CisjbGluZSAxMjg0ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZmluaXNoX3N0cnVjdCAoc3RhcnRfc3RydWN0IChSRUNPUkRfVFlQRSwgTlVMTF9UUkVFKSwKKwkJCQkgICAgICB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMjM5OgorI2xpbmUgMTI4OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHhyZWZfdGFnIChSRUNPUkRfVFlQRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDA6CisjbGluZSAxMjkwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gc3RhcnRfc3RydWN0IChVTklPTl9UWVBFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDE6CisjbGluZSAxMjkyICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZmluaXNoX3N0cnVjdCAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjQyOgorI2xpbmUgMTI5NCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGZpbmlzaF9zdHJ1Y3QgKHN0YXJ0X3N0cnVjdCAoVU5JT05fVFlQRSwgTlVMTF9UUkVFKSwKKwkJCQkgICAgICB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMjQzOgorI2xpbmUgMTI5OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHhyZWZfdGFnIChVTklPTl9UWVBFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0NDoKKyNsaW5lIDEzMDAgImMtcGFyc2UueSIKK3sgeXl2c3BbMF0uaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X2VudW0gKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0NToKKyNsaW5lIDEzMDMgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBmaW5pc2hfZW51bSAoeXl2c3BbLTRdLnR0eXBlLCBucmV2ZXJzZSAoeXl2c3BbLTNdLnR0eXBlKSwgeXl2c3BbMF0udHR5cGUpOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy01XS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0NjoKKyNsaW5lIDEzMDYgImMtcGFyc2UueSIKK3sgeXl2c3BbMF0uaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X2VudW0gKE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0NzoKKyNsaW5lIDEzMDkgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBmaW5pc2hfZW51bSAoeXl2c3BbLTRdLnR0eXBlLCBucmV2ZXJzZSAoeXl2c3BbLTNdLnR0eXBlKSwgeXl2c3BbMF0udHR5cGUpOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy01XS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0ODoKKyNsaW5lIDEzMTIgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB4cmVmX3RhZyAoRU5VTUVSQUxfVFlQRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNTI6CisjbGluZSAxMzIzICJjLXBhcnNlLnkiCit7IGlmIChwZWRhbnRpYykgcGVkd2FybiAoImNvbW1hIGF0IGVuZCBvZiBlbnVtZXJhdG9yIGxpc3QiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjUzOgorI2xpbmUgMTMyOCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNTQ6CisjbGluZSAxMzMwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgcGVkd2FybiAoIm5vIHNlbWljb2xvbiBhdCBlbmQgb2Ygc3RydWN0IG9yIHVuaW9uIik7IDsKKyAgICBicmVhazt9CitjYXNlIDI1NToKKyNsaW5lIDEzMzUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI1NjoKKyNsaW5lIDEzMzcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMl0udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1NzoKKyNsaW5lIDEzMzkgImMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoImV4dHJhIHNlbWljb2xvbiBpbiBzdHJ1Y3Qgb3IgdW5pb24gc3BlY2lmaWVkIik7IDsKKyAgICBicmVhazt9CitjYXNlIDI1ODoKKyNsaW5lIDEzNTQgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1OToKKyNsaW5lIDEzNjAgImMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG1lbWJlciBkZWNsYXJhdGlvbnMgd2l0aCBubyBtZW1iZXJzIik7CisJCSAgc2hhZG93X3RhZyh5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MDoKKyNsaW5lIDEzNjUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MToKKyNsaW5lIDEzNzEgImMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG1lbWJlciBkZWNsYXJhdGlvbnMgd2l0aCBubyBtZW1iZXJzIik7CisJCSAgc2hhZG93X3RhZyh5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MjoKKyNsaW5lIDEzNzYgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MzoKKyNsaW5lIDEzNzggImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjY1OgorI2xpbmUgMTM4NSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNjY6CisjbGluZSAxMzkwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ3Jva2ZpZWxkICh5eXZzcFstM10uZmlsZW5hbWUsIHl5dnNwWy0yXS5saW5lbm8sIHl5dnNwWy0xXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIE5VTExfVFJFRSk7CisJCSAgZGVjbF9hdHRyaWJ1dGVzICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjY3OgorI2xpbmUgMTM5NCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2tmaWVsZCAoeXl2c3BbLTVdLmZpbGVuYW1lLCB5eXZzcFstNF0ubGluZW5vLCB5eXZzcFstM10udHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGRlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2ODoKKyNsaW5lIDEzOTcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dnNwWy00XS5maWxlbmFtZSwgeXl2c3BbLTNdLmxpbmVubywgTlVMTF9UUkVFLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzA6CisjbGluZSAxNDA5ICJjLXBhcnNlLnkiCit7IGlmICh5eXZzcFstMl0udHR5cGUgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeXl2YWwudHR5cGUgPSB5eXZzcFstMl0udHR5cGU7CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjcxOgorI2xpbmUgMTQxNCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjcyOgorI2xpbmUgMTQyMCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2VudW1lcmF0b3IgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzM6CisjbGluZSAxNDIyICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZW51bWVyYXRvciAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3NDoKKyNsaW5lIDE0MjcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzU6CisjbGluZSAxNDI5ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc2OgorI2xpbmUgMTQzNCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc4OgorI2xpbmUgMTQ0MCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc5OgorI2xpbmUgMTQ0MiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgwOgorI2xpbmUgMTQ0NyAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgxOgorI2xpbmUgMTQ0OSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgyOgorI2xpbmUgMTQ1NCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgzOgorI2xpbmUgMTQ1NyAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg0OgorI2xpbmUgMTQ1OSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg1OgorI2xpbmUgMTQ2MSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChDQUxMX0VYUFIsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI4NjoKKyNsaW5lIDE0NjMgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQVJSQVlfUkVGLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI4NzoKKyNsaW5lIDE0NjUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQVJSQVlfUkVGLCB5eXZzcFstMl0udHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI4ODoKKyNsaW5lIDE0NjcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCBOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODk6CisjbGluZSAxNDY5ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTA6CisjbGluZSAxNDcxICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTE6CisjbGluZSAxNDgyICJjLXBhcnNlLnkiCit7CisJCSAgaWYgKHBlZGFudGljICYmIHl5dnNwWzBdLmVuZHNfaW5fbGFiZWwpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyOTM6CisjbGluZSAxNDkxICJjLXBhcnNlLnkiCit7IHl5dmFsLmVuZHNfaW5fbGFiZWwgPSB5eXZzcFswXS5lbmRzX2luX2xhYmVsOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTQ6CisjbGluZSAxNDkzICJjLXBhcnNlLnkiCit7IHl5dmFsLmVuZHNfaW5fbGFiZWwgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTg6CisjbGluZSAxNTA1ICJjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBwdXNobGV2ZWwgKDApOworCQkgIGNsZWFyX2xhc3RfZXhwciAoKTsKKwkJICBwdXNoX21vbWVudGFyeSAoKTsKKwkJICBleHBhbmRfc3RhcnRfYmluZGluZ3MgKDApOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAzMDA6CisjbGluZSAxNTE4ICJjLXBhcnNlLnkiCit7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBsYWJlbCBkZWNsYXJhdGlvbnMiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzAzOgorI2xpbmUgMTUyOSAiYy1wYXJzZS55IgoreyB0cmVlIGxpbms7CisJCSAgZm9yIChsaW5rID0geXl2c3BbLTFdLnR0eXBlOyBsaW5rOyBsaW5rID0gVFJFRV9DSEFJTiAobGluaykpCisJCSAgICB7CisJCSAgICAgIHRyZWUgbGFiZWwgPSBzaGFkb3dfbGFiZWwgKFRSRUVfVkFMVUUgKGxpbmspKTsKKwkJICAgICAgQ19ERUNMQVJFRF9MQUJFTF9GTEFHIChsYWJlbCkgPSAxOworCQkgICAgICBkZWNsYXJlX25vbmxvY2FsX2xhYmVsIChsYWJlbCk7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDMwNDoKKyNsaW5lIDE1NDMgImMtcGFyc2UueSIKK3s7CisgICAgYnJlYWs7fQorY2FzZSAzMDY6CisjbGluZSAxNTQ4ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY29udmVydCAodm9pZF90eXBlX25vZGUsIGludGVnZXJfemVyb19ub2RlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzA3OgorI2xpbmUgMTU1MCAiYy1wYXJzZS55IgoreyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2VuZF9iaW5kaW5ncyAoZ2V0ZGVjbHMgKCksIDEsIDApOworCQkgIHl5dmFsLnR0eXBlID0gcG9wbGV2ZWwgKDEsIDEsIDApOworCQkgIGlmICh5eWNoYXIgPT0gQ09OU1RBTlQgfHwgeXljaGFyID09IFNUUklORykKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnkgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMwODoKKyNsaW5lIDE1NTggImMtcGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGV4cGFuZF9lbmRfYmluZGluZ3MgKGdldGRlY2xzICgpLCBrZXB0X2xldmVsX3AgKCksIDApOworCQkgIHl5dmFsLnR0eXBlID0gcG9wbGV2ZWwgKGtlcHRfbGV2ZWxfcCAoKSwgMCwgMCk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzA5OgorI2xpbmUgMTU2NiAiYy1wYXJzZS55IgoreyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2VuZF9iaW5kaW5ncyAoZ2V0ZGVjbHMgKCksIGtlcHRfbGV2ZWxfcCAoKSwgMCk7CisJCSAgeXl2YWwudHR5cGUgPSBwb3BsZXZlbCAoa2VwdF9sZXZlbF9wICgpLCAwLCAwKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTI6CisjbGluZSAxNTg2ICJjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlICh5eXZzcFstNV0uZmlsZW5hbWUsIHl5dnNwWy00XS5saW5lbm8pOworCQkgIGV4cGFuZF9zdGFydF9jb25kICh0cnV0aHZhbHVlX2NvbnZlcnNpb24gKHl5dnNwWy0xXS50dHlwZSksIDApOworCQkgIHl5dmFsLml0eXBlID0gc3RtdF9jb3VudDsKKwkJICBpZl9zdG10X2ZpbGUgPSB5eXZzcFstNV0uZmlsZW5hbWU7CisJCSAgaWZfc3RtdF9saW5lID0geXl2c3BbLTRdLmxpbmVubzsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzEzOgorI2xpbmUgMTU5OSAiYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy0yXS5maWxlbmFtZSwgeXl2c3BbLTFdLmxpbmVubyk7CisJCSAgLyogU2VlIGNvbW1lbnQgaW4gYHdoaWxlJyBhbHRlcm5hdGl2ZSwgYWJvdmUuICAqLworCQkgIGVtaXRfbm9wICgpOworCQkgIGV4cGFuZF9zdGFydF9sb29wX2NvbnRpbnVlX2Vsc2V3aGVyZSAoMSk7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMxNDoKKyNsaW5lIDE2MDYgImMtcGFyc2UueSIKK3sgZXhwYW5kX2xvb3BfY29udGludWVfaGVyZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzE1OgorI2xpbmUgMTYxMCAiYy1wYXJzZS55IgoreyB5eXZhbC5maWxlbmFtZSA9IGlucHV0X2ZpbGVuYW1lOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTY6CisjbGluZSAxNjE0ICJjLXBhcnNlLnkiCit7IHl5dmFsLmxpbmVubyA9IGxpbmVubzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzE3OgorI2xpbmUgMTYxOSAiYy1wYXJzZS55IgoreyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTg6CisjbGluZSAxNjI0ICJjLXBhcnNlLnkiCit7IDsKKyAgICBicmVhazt9CitjYXNlIDMxOToKKyNsaW5lIDE2MjkgImMtcGFyc2UueSIKK3sgeXl2YWwuZW5kc19pbl9sYWJlbCA9IHl5dnNwWzBdLmVuZHNfaW5fbGFiZWw7IDsKKyAgICBicmVhazt9CitjYXNlIDMyMDoKKyNsaW5lIDE2MzQgImMtcGFyc2UueSIKK3sgeXl2YWwuZW5kc19pbl9sYWJlbCA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDMyMToKKyNsaW5lIDE2MzYgImMtcGFyc2UueSIKK3sgeXl2YWwuZW5kc19pbl9sYWJlbCA9IDE7IDsKKyAgICBicmVhazt9CitjYXNlIDMyMjoKKyNsaW5lIDE2NDIgImMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjQ6CisjbGluZSAxNjQ1ICJjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTNdLmZpbGVuYW1lLCB5eXZzcFstMl0ubGluZW5vKTsKKy8qIEl0IGFwcGVhcnMgdGhhdCB0aGlzIHNob3VsZCBub3QgYmUgZG9uZS0tdGhhdCBhIG5vbi1sdmFsdWUgYXJyYXkKKyAgIHNob3VsZG4ndCBnZXQgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIGlzbid0IHVzZWQuCisgICBTZWN0aW9uIDMuMi4yLjEgc2F5cyB0aGF0IGFuIGFycmF5IGx2YWx1ZSBnZXRzIGNvbnZlcnRlZCB0byBhIHBvaW50ZXIKKyAgIGlmIGl0IGFwcGVhcnMgYXMgYSB0b3AtbGV2ZWwgZXhwcmVzc2lvbiwKKyAgIGJ1dCBzYXlzIG5vdGhpbmcgYWJvdXQgbm9uLWx2YWx1ZSBhcnJheXMuICAqLworI2lmIDAKKwkJICAvKiBDYWxsIGRlZmF1bHRfY29udmVyc2lvbiB0byBnZXQgYW4gZXJyb3IKKwkJICAgICBvbiByZWZlcnJpbmcgdG8gYSByZWdpc3RlciBhcnJheSBpZiBwZWRhbnRpYy4gICovCisJCSAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFICh5eXZzcFstMV0udHR5cGUpKSA9PSBBUlJBWV9UWVBFCisJCSAgICAgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFICh5eXZzcFstMV0udHR5cGUpKSA9PSBGVU5DVElPTl9UWVBFKQorCQkgICAgeXl2c3BbLTFdLnR0eXBlID0gZGVmYXVsdF9jb252ZXJzaW9uICh5eXZzcFstMV0udHR5cGUpOworI2VuZGlmCisJCSAgaXRlcmF0b3JfZXhwYW5kICh5eXZzcFstMV0udHR5cGUpOworCQkgIGNsZWFyX21vbWVudGFyeSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI1OgorI2xpbmUgMTY2MiAiYy1wYXJzZS55IgoreyBleHBhbmRfc3RhcnRfZWxzZSAoKTsKKwkJICB5eXZzcFstMV0uaXR5cGUgPSBzdG10X2NvdW50OworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjY6CisjbGluZSAxNjY2ICJjLXBhcnNlLnkiCit7IGV4cGFuZF9lbmRfY29uZCAoKTsKKwkJICBpZiAoZXh0cmFfd2FybmluZ3MgJiYgc3RtdF9jb3VudCA9PSB5eXZzcFstM10uaXR5cGUpCisJCSAgICB3YXJuaW5nICgiZW1wdHkgYm9keSBpbiBhbiBlbHNlLXN0YXRlbWVudCIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjc6CisjbGluZSAxNjcwICJjLXBhcnNlLnkiCit7IGV4cGFuZF9lbmRfY29uZCAoKTsKKwkJICAvKiBUaGlzIHdhcm5pbmcgaXMgaGVyZSBpbnN0ZWFkIG9mIGluIHNpbXBsZV9pZiwgYmVjYXVzZSB3ZQorCQkgICAgIGRvIG5vdCB3YW50IGEgd2FybmluZyBpZiBhbiBlbXB0eSBpZiBpcyBmb2xsb3dlZCBieSBhbgorCQkgICAgIGVsc2Ugc3RhdGVtZW50LiAgSW5jcmVtZW50IHN0bXRfY291bnQgc28gd2UgZG9uJ3QKKwkJICAgICBnaXZlIGEgc2Vjb25kIGVycm9yIGlmIHRoaXMgaXMgYSBuZXN0ZWQgYGlmJy4gICovCisJCSAgaWYgKGV4dHJhX3dhcm5pbmdzICYmIHN0bXRfY291bnQrKyA9PSB5eXZzcFswXS5pdHlwZSkKKwkJICAgIHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lIChpZl9zdG10X2ZpbGUsIGlmX3N0bXRfbGluZSwKKwkJCQkJCSJlbXB0eSBib2R5IGluIGFuIGlmLXN0YXRlbWVudCIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjg6CisjbGluZSAxNjgyICJjLXBhcnNlLnkiCit7IGV4cGFuZF9lbmRfY29uZCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI5OgorI2xpbmUgMTY4NCAiYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy0yXS5maWxlbmFtZSwgeXl2c3BbLTFdLmxpbmVubyk7CisJCSAgLyogVGhlIGVtaXRfbm9wIHVzZWQgdG8gY29tZSBiZWZvcmUgZW1pdF9saW5lX25vdGUsCisJCSAgICAgYnV0IHRoYXQgbWFkZSB0aGUgbm9wIHNlZW0gbGlrZSBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgbGluZS4KKwkJICAgICBBbmQgdGhhdCB3YXMgY29uZnVzaW5nIHdoZW4gdGhlIHByZWNlZGluZyBsaW5lIHdhcworCQkgICAgIGluc2lkZSBvZiBhbiBpZiBzdGF0ZW1lbnQgYW5kIHdhcyBub3QgcmVhbGx5IGV4ZWN1dGVkLgorCQkgICAgIEkgdGhpbmsgaXQgb3VnaHQgdG8gd29yayB0byBwdXQgdGhlIG5vcCBhZnRlciB0aGUgbGluZSBudW1iZXIuCisJCSAgICAgV2Ugd2lsbCBzZWUuICAtLXJtcywgSnVseSAxNSwgMTk5MS4gICovCisJCSAgZW1pdF9ub3AgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMDoKKyNsaW5lIDE2OTQgImMtcGFyc2UueSIKK3sgLyogRG9uJ3Qgc3RhcnQgdGhlIGxvb3AgdGlsbCB3ZSBoYXZlIHN1Y2NlZWRlZAorCQkgICAgIGluIHBhcnNpbmcgdGhlIGVuZCB0ZXN0LiAgVGhpcyBpcyB0byBtYWtlIHN1cmUKKwkJICAgICB0aGF0IHdlIGVuZCBldmVyeSBsb29wIHdlIHN0YXJ0LiAgKi8KKwkJICBleHBhbmRfc3RhcnRfbG9vcCAoMSk7CisJCSAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UgKE5VTExfUFRSLAorCQkJCQkgICAgIHRydXRodmFsdWVfY29udmVyc2lvbiAoeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMToKKyNsaW5lIDE3MDMgImMtcGFyc2UueSIKK3sgZXhwYW5kX2VuZF9sb29wICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMzI6CisjbGluZSAxNzA2ICJjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlIChOVUxMX1BUUiwKKwkJCQkJICAgICB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKHl5dnNwWy0yXS50dHlwZSkpOworCQkgIGV4cGFuZF9lbmRfbG9vcCAoKTsKKwkJICBjbGVhcl9tb21lbnRhcnkgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMzoKKyNsaW5lIDE3MTMgImMtcGFyc2UueSIKK3sgZXhwYW5kX2VuZF9sb29wICgpOworCQkgIGNsZWFyX21vbWVudGFyeSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzM0OgorI2xpbmUgMTcxNyAiYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy01XS5maWxlbmFtZSwgeXl2c3BbLTRdLmxpbmVubyk7CisJCSAgLyogU2VlIGNvbW1lbnQgaW4gYHdoaWxlJyBhbHRlcm5hdGl2ZSwgYWJvdmUuICAqLworCQkgIGVtaXRfbm9wICgpOworCQkgIGlmICh5eXZzcFstMV0udHR5cGUpIGNfZXhwYW5kX2V4cHJfc3RtdCAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICAvKiBOZXh0IHN0ZXAgaXMgdG8gY2FsbCBleHBhbmRfc3RhcnRfbG9vcF9jb250aW51ZV9lbHNld2hlcmUsCisJCSAgICAgYnV0IHdhaXQgdGlsbCBhZnRlciB3ZSBwYXJzZSB0aGUgZW50aXJlIGZvciAoLi4uKS4KKwkJICAgICBPdGhlcndpc2UsIGludmFsaWQgaW5wdXQgbWlnaHQgY2F1c2UgdXMgdG8gY2FsbCB0aGF0CisJCSAgICAgZm4gd2l0aG91dCBjYWxsaW5nIGV4cGFuZF9lbmRfbG9vcC4gICovCisJCTsKKyAgICBicmVhazt9CitjYXNlIDMzNToKKyNsaW5lIDE3MjkgImMtcGFyc2UueSIKK3sgeXl2c3BbMF0ubGluZW5vID0gbGluZW5vOworCQkgIHl5dmFsLmZpbGVuYW1lID0gaW5wdXRfZmlsZW5hbWU7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNjoKKyNsaW5lIDE3MzIgImMtcGFyc2UueSIKK3sgCisJCSAgLyogU3RhcnQgdGhlIGxvb3AuICBEb2luZyB0aGlzIGFmdGVyIHBhcnNpbmcKKwkJICAgICBhbGwgdGhlIGV4cHJlc3Npb25zIGVuc3VyZXMgd2Ugd2lsbCBlbmQgdGhlIGxvb3AuICAqLworCQkgIGV4cGFuZF9zdGFydF9sb29wX2NvbnRpbnVlX2Vsc2V3aGVyZSAoMSk7CisJCSAgLyogRW1pdCB0aGUgZW5kLXRlc3QsIHdpdGggYSBsaW5lIG51bWJlci4gICovCisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy0yXS5maWxlbmFtZSwgeXl2c3BbLTNdLmxpbmVubyk7CisJCSAgaWYgKHl5dnNwWy00XS50dHlwZSkKKwkJICAgIGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UgKE5VTExfUFRSLAorCQkJCQkgICAgICAgdHJ1dGh2YWx1ZV9jb252ZXJzaW9uICh5eXZzcFstNF0udHR5cGUpKTsKKwkJICAvKiBEb24ndCBsZXQgdGhlIHRyZWUgbm9kZXMgZm9yICQ5IGJlIGRpc2NhcmRlZCBieQorCQkgICAgIGNsZWFyX21vbWVudGFyeSBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgdGhlIG5leHQgc3RtdC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7CisJCSAgeXl2c3BbLTNdLmxpbmVubyA9IGxpbmVubzsKKwkJICB5eXZzcFstMl0uZmlsZW5hbWUgPSBpbnB1dF9maWxlbmFtZTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzM3OgorI2xpbmUgMTc0OCAiYy1wYXJzZS55IgoreyAvKiBFbWl0IHRoZSBpbmNyZW1lbnQgZXhwcmVzc2lvbiwgd2l0aCBhIGxpbmUgbnVtYmVyLiAgKi8KKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTRdLmZpbGVuYW1lLCB5eXZzcFstNV0ubGluZW5vKTsKKwkJICBleHBhbmRfbG9vcF9jb250aW51ZV9oZXJlICgpOworCQkgIGlmICh5eXZzcFstM10udHR5cGUpCisJCSAgICBjX2V4cGFuZF9leHByX3N0bXQgKHl5dnNwWy0zXS50dHlwZSk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsKKwkJICBleHBhbmRfZW5kX2xvb3AgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzODoKKyNsaW5lIDE3NTkgImMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstNV0uZmlsZW5hbWUsIHl5dnNwWy00XS5saW5lbm8pOworCQkgIGNfZXhwYW5kX3N0YXJ0X2Nhc2UgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgLyogRG9uJ3QgbGV0IHRoZSB0cmVlIG5vZGVzIGZvciAkMyBiZSBkaXNjYXJkZWQgYnkKKwkJICAgICBjbGVhcl9tb21lbnRhcnkgZHVyaW5nIHRoZSBwYXJzaW5nIG9mIHRoZSBuZXh0IHN0bXQuICAqLworCQkgIHB1c2hfbW9tZW50YXJ5ICgpOworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMzk6CisjbGluZSAxNzY3ICJjLXBhcnNlLnkiCit7IGV4cGFuZF9lbmRfY2FzZSAoeXl2c3BbLTNdLnR0eXBlKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDA6CisjbGluZSAxNzczICJjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTNdLmZpbGVuYW1lLCB5eXZzcFstMl0ubGluZW5vKTsKKwkJICBpZiAoICEgZXhwYW5kX2V4aXRfc29tZXRoaW5nICgpKQorCQkgICAgZXJyb3IgKCJicmVhayBzdGF0ZW1lbnQgbm90IHdpdGhpbiBsb29wIG9yIHN3aXRjaCIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDE6CisjbGluZSAxNzc4ICJjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTNdLmZpbGVuYW1lLCB5eXZzcFstMl0ubGluZW5vKTsKKwkJICBpZiAoISBleHBhbmRfY29udGludWVfbG9vcCAoTlVMTF9QVFIpKQorCQkgICAgZXJyb3IgKCJjb250aW51ZSBzdGF0ZW1lbnQgbm90IHdpdGhpbiBhIGxvb3AiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQyOgorI2xpbmUgMTc4MyAiYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy0zXS5maWxlbmFtZSwgeXl2c3BbLTJdLmxpbmVubyk7CisJCSAgY19leHBhbmRfcmV0dXJuIChOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDM6CisjbGluZSAxNzg3ICJjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTRdLmZpbGVuYW1lLCB5eXZzcFstM10ubGluZW5vKTsKKwkJICBjX2V4cGFuZF9yZXR1cm4gKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM0NDoKKyNsaW5lIDE3OTEgImMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstN10uZmlsZW5hbWUsIHl5dnNwWy02XS5saW5lbm8pOworCQkgIFNUUklQX05PUFMgKHl5dnNwWy0yXS50dHlwZSk7CisJCSAgaWYgKChUUkVFX0NPREUgKHl5dnNwWy0yXS50dHlwZSkgPT0gQUREUl9FWFBSCisJCSAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoeXl2c3BbLTJdLnR0eXBlLCAwKSkgPT0gU1RSSU5HX0NTVCkKKwkJICAgICAgfHwgVFJFRV9DT0RFICh5eXZzcFstMl0udHR5cGUpID09IFNUUklOR19DU1QpCisJCSAgICBleHBhbmRfYXNtICh5eXZzcFstMl0udHR5cGUpOworCQkgIGVsc2UKKwkJICAgIGVycm9yICgiYXJndW1lbnQgb2YgYGFzbScgaXMgbm90IGEgY29uc3RhbnQgc3RyaW5nIik7IDsKKyAgICBicmVhazt9CitjYXNlIDM0NToKKyNsaW5lIDE4MDIgImMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstOV0uZmlsZW5hbWUsIHl5dnNwWy04XS5saW5lbm8pOworCQkgIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsIE5VTExfVFJFRSwgTlVMTF9UUkVFLAorCQkJCQkgeXl2c3BbLTZdLnR0eXBlID09IHJpZHBvaW50ZXJzWyhpbnQpUklEX1ZPTEFUSUxFXSwKKwkJCQkJIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDY6CisjbGluZSAxODA5ICJjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTExXS5maWxlbmFtZSwgeXl2c3BbLTEwXS5saW5lbm8pOworCQkgIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoeXl2c3BbLTZdLnR0eXBlLCB5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFLAorCQkJCQkgeXl2c3BbLThdLnR0eXBlID09IHJpZHBvaW50ZXJzWyhpbnQpUklEX1ZPTEFUSUxFXSwKKwkJCQkJIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDc6CisjbGluZSAxODE3ICJjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTEzXS5maWxlbmFtZSwgeXl2c3BbLTEyXS5saW5lbm8pOworCQkgIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoeXl2c3BbLThdLnR0eXBlLCB5eXZzcFstNl0udHR5cGUsIHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLAorCQkJCQkgeXl2c3BbLTEwXS50dHlwZSA9PSByaWRwb2ludGVyc1soaW50KVJJRF9WT0xBVElMRV0sCisJCQkJCSBpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQ4OgorI2xpbmUgMTgyMyAiYy1wYXJzZS55IgoreyB0cmVlIGRlY2w7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstNF0uZmlsZW5hbWUsIHl5dnNwWy0zXS5saW5lbm8pOworCQkgIGRlY2wgPSBsb29rdXBfbGFiZWwgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgaWYgKGRlY2wgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9VU0VEIChkZWNsKSA9IDE7CisJCSAgICAgIGV4cGFuZF9nb3RvIChkZWNsKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMzQ5OgorI2xpbmUgMTgzNCAiYy1wYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYGdvdG8gKmV4cHI7JyIpOworCQkgIHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTVdLmZpbGVuYW1lLCB5eXZzcFstNF0ubGluZW5vKTsKKwkJICBleHBhbmRfY29tcHV0ZWRfZ290byAoY29udmVydCAocHRyX3R5cGVfbm9kZSwgeXl2c3BbLTFdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM1MjoKKyNsaW5lIDE4NDkgImMtcGFyc2UueSIKK3sKKwkgICAgLyogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgYWN0aW9uIGlzICAqLworCSAgICAvKiAgICAgIDEgaWYgZXZlcnl0aGluZyBpcyBPSyAqLyAKKwkgICAgLyogICAgICAwIGluIGNhc2Ugb2YgZXJyb3Igb3IgYWxyZWFkeSBib3VuZCBpdGVyYXRvciAqLworCisJICAgIHl5dmFsLml0eXBlID0gMDsKKwkgICAgaWYgKFRSRUVfQ09ERSAoeXl2c3BbLTFdLnR0eXBlKSAhPSBWQVJfREVDTCkKKwkgICAgICBlcnJvciAoImludmFsaWQgYGZvciAoSVRFUkFUT1IpJyBzeW50YXgiKTsKKwkgICAgZWxzZSBpZiAoISBJVEVSQVRPUl9QICh5eXZzcFstMV0udHR5cGUpKQorCSAgICAgIGVycm9yICgiYCVzJyBpcyBub3QgYW4gaXRlcmF0b3IiLAorCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICh5eXZzcFstMV0udHR5cGUpKSk7CisJICAgIGVsc2UgaWYgKElURVJBVE9SX0JPVU5EX1AgKHl5dnNwWy0xXS50dHlwZSkpCisJICAgICAgZXJyb3IgKCJgZm9yICglcyknIGluc2lkZSBleHBhbnNpb24gb2Ygc2FtZSBpdGVyYXRvciIsCisJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKHl5dnNwWy0xXS50dHlwZSkpKTsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJeXl2YWwuaXR5cGUgPSAxOworCQlpdGVyYXRvcl9mb3JfbG9vcF9zdGFydCAoeXl2c3BbLTFdLnR0eXBlKTsKKwkgICAgICB9CisJICA7CisgICAgYnJlYWs7fQorY2FzZSAzNTM6CisjbGluZSAxODcwICJjLXBhcnNlLnkiCit7CisJICAgIGlmICh5eXZzcFstMV0uaXR5cGUpCisJICAgICAgaXRlcmF0b3JfZm9yX2xvb3BfZW5kICh5eXZzcFstM10udHR5cGUpOworCSAgOworICAgIGJyZWFrO30KK2Nhc2UgMzU0OgorI2xpbmUgMTkwNSAiYy1wYXJzZS55IgoreyByZWdpc3RlciB0cmVlIHZhbHVlID0gY2hlY2tfY2FzZV92YWx1ZSAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICByZWdpc3RlciB0cmVlIGxhYmVsCisJCSAgICA9IGJ1aWxkX2RlY2wgKExBQkVMX0RFQ0wsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKworCQkgIHN0bXRfY291bnQrKzsKKworCQkgIGlmICh2YWx1ZSAhPSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB7CisJCSAgICAgIHRyZWUgZHVwbGljYXRlOworCQkgICAgICBpbnQgc3VjY2VzcyA9IHB1c2hjYXNlICh2YWx1ZSwgY29udmVydF9hbmRfY2hlY2ssCisJCQkJCSAgICAgIGxhYmVsLCAmZHVwbGljYXRlKTsKKwkJICAgICAgaWYgKHN1Y2Nlc3MgPT0gMSkKKwkJCWVycm9yICgiY2FzZSBsYWJlbCBub3Qgd2l0aGluIGEgc3dpdGNoIHN0YXRlbWVudCIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDIpCisJCQl7CisJCQkgIGVycm9yICgiZHVwbGljYXRlIGNhc2UgdmFsdWUiKTsKKwkJCSAgZXJyb3Jfd2l0aF9kZWNsIChkdXBsaWNhdGUsICJ0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSBmb3IgdGhhdCB2YWx1ZSIpOworCQkJfQorCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDMpCisJCQl3YXJuaW5nICgiY2FzZSB2YWx1ZSBvdXQgb2YgcmFuZ2UiKTsKKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSA1KQorCQkJZXJyb3IgKCJjYXNlIGxhYmVsIHdpdGhpbiBzY29wZSBvZiBjbGVhbnVwIG9yIHZhcmlhYmxlIGFycmF5Iik7CisJCSAgICB9CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM1NToKKyNsaW5lIDE5MzAgImMtcGFyc2UueSIKK3sgcmVnaXN0ZXIgdHJlZSB2YWx1ZTEgPSBjaGVja19jYXNlX3ZhbHVlICh5eXZzcFstM10udHR5cGUpOworCQkgIHJlZ2lzdGVyIHRyZWUgdmFsdWUyID0gY2hlY2tfY2FzZV92YWx1ZSAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICByZWdpc3RlciB0cmVlIGxhYmVsCisJCSAgICA9IGJ1aWxkX2RlY2wgKExBQkVMX0RFQ0wsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBjYXNlIHJhbmdlcyIpOworCQkgIHN0bXRfY291bnQrKzsKKworCQkgIGlmICh2YWx1ZTEgIT0gZXJyb3JfbWFya19ub2RlICYmIHZhbHVlMiAhPSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB7CisJCSAgICAgIHRyZWUgZHVwbGljYXRlOworCQkgICAgICBpbnQgc3VjY2VzcyA9IHB1c2hjYXNlX3JhbmdlICh2YWx1ZTEsIHZhbHVlMiwKKwkJCQkJCSAgICBjb252ZXJ0X2FuZF9jaGVjaywgbGFiZWwsCisJCQkJCQkgICAgJmR1cGxpY2F0ZSk7CisJCSAgICAgIGlmIChzdWNjZXNzID09IDEpCisJCQllcnJvciAoImNhc2UgbGFiZWwgbm90IHdpdGhpbiBhIHN3aXRjaCBzdGF0ZW1lbnQiKTsKKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSAyKQorCQkJeworCQkJICBlcnJvciAoImR1cGxpY2F0ZSBjYXNlIHZhbHVlIik7CisJCQkgIGVycm9yX3dpdGhfZGVjbCAoZHVwbGljYXRlLCAidGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgZm9yIHRoYXQgdmFsdWUiKTsKKwkJCX0KKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSAzKQorCQkJd2FybmluZyAoImNhc2UgdmFsdWUgb3V0IG9mIHJhbmdlIik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gNCkKKwkJCXdhcm5pbmcgKCJlbXB0eSBjYXNlIHJhbmdlIik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gNSkKKwkJCWVycm9yICgiY2FzZSBsYWJlbCB3aXRoaW4gc2NvcGUgb2YgY2xlYW51cCBvciB2YXJpYWJsZSBhcnJheSIpOworCQkgICAgfQorCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNTY6CisjbGluZSAxOTYxICJjLXBhcnNlLnkiCit7CisJCSAgdHJlZSBkdXBsaWNhdGU7CisJCSAgcmVnaXN0ZXIgdHJlZSBsYWJlbAorCQkgICAgPSBidWlsZF9kZWNsIChMQUJFTF9ERUNMLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgaW50IHN1Y2Nlc3MgPSBwdXNoY2FzZSAoTlVMTF9UUkVFLCAwLCBsYWJlbCwgJmR1cGxpY2F0ZSk7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGlmIChzdWNjZXNzID09IDEpCisJCSAgICBlcnJvciAoImRlZmF1bHQgbGFiZWwgbm90IHdpdGhpbiBhIHN3aXRjaCBzdGF0ZW1lbnQiKTsKKwkJICBlbHNlIGlmIChzdWNjZXNzID09IDIpCisJCSAgICB7CisJCSAgICAgIGVycm9yICgibXVsdGlwbGUgZGVmYXVsdCBsYWJlbHMgaW4gb25lIHN3aXRjaCIpOworCQkgICAgICBlcnJvcl93aXRoX2RlY2wgKGR1cGxpY2F0ZSwgInRoaXMgaXMgdGhlIGZpcnN0IGRlZmF1bHQgbGFiZWwiKTsKKwkJICAgIH0KKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzU3OgorI2xpbmUgMTk3NiAiYy1wYXJzZS55IgoreyB0cmVlIGxhYmVsID0gZGVmaW5lX2xhYmVsIChpbnB1dF9maWxlbmFtZSwgbGluZW5vLCB5eXZzcFstMV0udHR5cGUpOworCQkgIHN0bXRfY291bnQrKzsKKwkJICBlbWl0X25vcCAoKTsKKwkJICBpZiAobGFiZWwpCisJCSAgICBleHBhbmRfbGFiZWwgKGxhYmVsKTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzU4OgorI2xpbmUgMTk4OCAiYy1wYXJzZS55IgoreyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDM1OToKKyNsaW5lIDE5OTEgImMtcGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjA6CisjbGluZSAxOTk2ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjI6CisjbGluZSAyMDAzICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjU6CisjbGluZSAyMDEwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM2NjoKKyNsaW5lIDIwMTUgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY3OgorI2xpbmUgMjAyMCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBjb21iaW5lX3N0cmluZ3MgKHl5dnNwWzBdLnR0eXBlKSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY4OgorI2xpbmUgMjAyMiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBjb21iaW5lX3N0cmluZ3MgKHl5dnNwWzBdLnR0eXBlKSwgeXl2c3BbLTJdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY5OgorI2xpbmUgMjAyOCAiYy1wYXJzZS55IgoreyBwdXNobGV2ZWwgKDApOworCQkgIGNsZWFyX3Bhcm1fb3JkZXIgKCk7CisJCSAgZGVjbGFyZV9wYXJtX2xldmVsICgwKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzcwOgorI2xpbmUgMjAzMiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQkgIHBhcm1saXN0X3RhZ3Nfd2FybmluZyAoKTsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM3MjoKKyNsaW5lIDIwNDAgImMtcGFyc2UueSIKK3sgdHJlZSBwYXJtOworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBmb3J3YXJkIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMiKTsKKwkJICAvKiBNYXJrIHRoZSBmb3J3YXJkIGRlY2xzIGFzIHN1Y2guICAqLworCQkgIGZvciAocGFybSA9IGdldGRlY2xzICgpOyBwYXJtOyBwYXJtID0gVFJFRV9DSEFJTiAocGFybSkpCisJCSAgICBUUkVFX0FTTV9XUklUVEVOIChwYXJtKSA9IDE7CisJCSAgY2xlYXJfcGFybV9vcmRlciAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzczOgorI2xpbmUgMjA0OCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzQ6CisjbGluZSAyMDUwICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzc1OgorI2xpbmUgMjA1NiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9wYXJtX2luZm8gKDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzY6CisjbGluZSAyMDU4ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X3Bhcm1faW5mbyAoMCk7CisJCSAgLyogR2NjIHVzZWQgdG8gYWxsb3cgdGhpcyBhcyBhbiBleHRlbnNpb24uICBIb3dldmVyLCBpdCBkb2VzCisJCSAgICAgbm90IHdvcmsgZm9yIGFsbCB0YXJnZXRzLCBhbmQgdGh1cyBoYXMgYmVlbiBkaXNhYmxlZC4KKwkJICAgICBBbHNvLCBzaW5jZSBmdW5jICguLi4pIGFuZCBmdW5jICgpIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSwKKwkJICAgICBpdCBjYXVzZWQgcHJvYmxlbXMgd2l0aCB0aGUgY29kZSBpbiBleHBhbmRfYnVpbHRpbiB3aGljaAorCQkgICAgIHRyaWVzIHRvIHZlcmlmeSB0aGF0IEJVSUxUX0lOX05FWFRfQVJHIGlzIGJlaW5nIHVzZWQKKwkJICAgICBjb3JyZWN0bHkuICAqLworCQkgIGVycm9yICgiQU5TSSBDIHJlcXVpcmVzIGEgbmFtZWQgYXJndW1lbnQgYmVmb3JlIGAuLi4nIik7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDM3NzoKKyNsaW5lIDIwNjggImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfcGFybV9pbmZvICgxKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzc4OgorI2xpbmUgMjA3MCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9wYXJtX2luZm8gKDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzk6CisjbGluZSAyMDc1ICJjLXBhcnNlLnkiCit7IHB1c2hfcGFybV9kZWNsICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM4MDoKKyNsaW5lIDIwNzcgImMtcGFyc2UueSIKK3sgcHVzaF9wYXJtX2RlY2wgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzgxOgorI2xpbmUgMjA4NCAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgeXl2c3BbLTFdLnR0eXBlKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgeXl2c3BbMF0udHR5cGUpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM4MjoKKyNsaW5lIDIwOTMgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJIHl5dnNwWy0xXS50dHlwZSksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJIHl5dnNwWzBdLnR0eXBlKSk7IAorCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzgzOgorI2xpbmUgMjEwMiAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgeXl2c3BbLTFdLnR0eXBlKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgeXl2c3BbMF0udHR5cGUpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM4NDoKKyNsaW5lIDIxMTEgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJIHl5dnNwWy0xXS50dHlwZSksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJIHl5dnNwWzBdLnR0eXBlKSk7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMl0uaXR5cGUpOyAgOworICAgIGJyZWFrO30KK2Nhc2UgMzg1OgorI2xpbmUgMjEyMSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgeXl2c3BbLTFdLnR0eXBlKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgeXl2c3BbMF0udHR5cGUpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7ICA7CisgICAgYnJlYWs7fQorY2FzZSAzODY6CisjbGluZSAyMTM1ICJjLXBhcnNlLnkiCit7IHB1c2hsZXZlbCAoMCk7CisJCSAgY2xlYXJfcGFybV9vcmRlciAoKTsKKwkJICBkZWNsYXJlX3Bhcm1fbGV2ZWwgKDEpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzODc6CisjbGluZSAyMTM5ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgcGFybWxpc3RfdGFnc193YXJuaW5nICgpOworCQkgIHBvcGxldmVsICgwLCAwLCAwKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzg5OgorI2xpbmUgMjE0NyAiYy1wYXJzZS55IgoreyB0cmVlIHQ7CisJCSAgZm9yICh0ID0geXl2c3BbLTFdLnR0eXBlOyB0OyB0ID0gVFJFRV9DSEFJTiAodCkpCisJCSAgICBpZiAoVFJFRV9WQUxVRSAodCkgPT0gTlVMTF9UUkVFKQorCQkgICAgICBlcnJvciAoImAuLi4nIGluIG9sZC1zdHlsZSBpZGVudGlmaWVyIGxpc3QiKTsKKwkJICB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM5MDoKKyNsaW5lIDIxNTcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTE6CisjbGluZSAyMTU5ICJjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbLTJdLnR0eXBlLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzkyOgorI2xpbmUgMjE2NSAiYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM5MzoKKyNsaW5lIDIxNjcgImMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMl0udHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTQ6CisjbGluZSAyMTcyICJjLXBhcnNlLnkiCit7IHl5dmFsLml0eXBlID0gcGVkYW50aWM7CisJCSAgcGVkYW50aWMgPSAwOyA7CisgICAgYnJlYWs7fQorfQorICAgLyogdGhlIGFjdGlvbiBmaWxlIGdldHMgY29waWVkIGluIGluIHBsYWNlIG9mIHRoaXMgZG9sbGFyc2lnbiAqLworI2xpbmUgNDg3ICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uLnNpbXBsZSIKKwwKKyAgeXl2c3AgLT0geXlsZW47CisgIHl5c3NwIC09IHl5bGVuOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCAtPSB5eWxlbjsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwKys7CisgIGlmICh5eWxlbiA9PSAwKQorICAgIHsKKyAgICAgIHl5bHNwLT5maXJzdF9saW5lID0geXlsbG9jLmZpcnN0X2xpbmU7CisgICAgICB5eWxzcC0+Zmlyc3RfY29sdW1uID0geXlsbG9jLmZpcnN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AtMSktPmxhc3RfbGluZTsKKyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9jb2x1bW47CisgICAgICB5eWxzcC0+dGV4dCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2NvbHVtbjsKKyAgICB9CisjZW5kaWYKKworICAvKiBOb3cgInNoaWZ0IiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uCisgICAgIERldGVybWluZSB3aGF0IHN0YXRlIHRoYXQgZ29lcyB0bywKKyAgICAgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvCisgICAgIGFuZCB0aGUgcnVsZSBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRCQVNFXSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworeXllcnJsYWI6ICAgLyogaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgKi8KKworICBpZiAoISB5eWVycnN0YXR1cykKKyAgICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgICB7CisgICAgICArK3l5bmVycnM7CisKKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisJeworCSAgaW50IHNpemUgPSAwOworCSAgY2hhciAqbXNnOworCSAgaW50IHgsIGNvdW50OworCisJICBjb3VudCA9IDA7CisJICAvKiBTdGFydCBYIGF0IC15eW4gaWYgbmVjIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4geXljaGVjay4gICovCisJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKKwkgICAgICAgeCA8IChzaXplb2YoeXl0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7IHgrKykKKwkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkgICAgICBzaXplICs9IHN0cmxlbih5eXRuYW1lW3hdKSArIDE1LCBjb3VudCsrOworCSAgbXNnID0gKGNoYXIgKikgbWFsbG9jKHNpemUgKyAxNSk7CisJICBpZiAobXNnICE9IDApCisJICAgIHsKKwkgICAgICBzdHJjcHkobXNnLCAicGFyc2UgZXJyb3IiKTsKKworCSAgICAgIGlmIChjb3VudCA8IDUpCisJCXsKKwkJICBjb3VudCA9IDA7CisJCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJCSAgICAgICB4IDwgKHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCQkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkJICAgICAgeworCQkJc3RyY2F0KG1zZywgY291bnQgPT0gMCA/ICIsIGV4cGVjdGluZyBgIiA6ICIgb3IgYCIpOworCQkJc3RyY2F0KG1zZywgeXl0bmFtZVt4XSk7CisJCQlzdHJjYXQobXNnLCAiJyIpOworCQkJY291bnQrKzsKKwkJICAgICAgfQorCQl9CisJICAgICAgeXllcnJvcihtc2cpOworCSAgICAgIGZyZWUobXNnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB5eWVycm9yICgicGFyc2UgZXJyb3I7IGFsc28gdmlydHVhbCBtZW1vcnkgZXhjZWVkZWQiKTsKKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisJeXllcnJvcigicGFyc2UgZXJyb3IiKTsKKyAgICB9CisKKyAgZ290byB5eWVycmxhYjE7Cit5eWVycmxhYjE6ICAgLyogaGVyZSBvbiBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gKi8KKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBpZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQorCVlZQUJPUlQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiRGlzY2FyZGluZyB0b2tlbiAlZCAoJXMpLlxuIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgICAgICB5eWNoYXIgPSBZWUVNUFRZOworICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbgorICAgICBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uICAqLworCisgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworCisgIGdvdG8geXllcnJoYW5kbGU7CisKK3l5ZXJyZGVmYXVsdDogIC8qIGN1cnJlbnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgdGhlIGVycm9yIHRva2VuLiAqLworCisjaWYgMAorICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKyAgICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4qLworICBpZiAoeXluKSBnb3RvIHl5ZGVmYXVsdDsKKyNlbmRpZgorCit5eWVycnBvcDogICAvKiBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbiAqLworCisgIGlmICh5eXNzcCA9PSB5eXNzKSBZWUFCT1JUOworICB5eXZzcC0tOworICB5eXN0YXRlID0gKi0teXlzc3A7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwLS07CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCit5eWVycmhhbmRsZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biArPSBZWVRFUlJPUjsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSBZWVRFUlJPUikKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJwb3A7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJwb3A7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4sICIpOworI2VuZGlmCisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworfQorI2xpbmUgMjE3NiAiYy1wYXJzZS55IgorCmRpZmYgLS1naXQgYS9nY2MvYy1wYXJzZS5oIGIvZ2NjL2MtcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWIzZDBjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2MtcGFyc2UuaApAQCAtMCwwICsxLDY0IEBACit0eXBlZGVmIHVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOworCWNoYXIgKmZpbGVuYW1lOyBpbnQgbGluZW5vOyBpbnQgZW5kc19pbl9sYWJlbDsgfSBZWVNUWVBFOworI2RlZmluZQlJREVOVElGSUVSCTI1OAorI2RlZmluZQlUWVBFTkFNRQkyNTkKKyNkZWZpbmUJU0NTUEVDCTI2MAorI2RlZmluZQlUWVBFU1BFQwkyNjEKKyNkZWZpbmUJVFlQRV9RVUFMCTI2MgorI2RlZmluZQlDT05TVEFOVAkyNjMKKyNkZWZpbmUJU1RSSU5HCTI2NAorI2RlZmluZQlFTExJUFNJUwkyNjUKKyNkZWZpbmUJU0laRU9GCTI2NgorI2RlZmluZQlFTlVNCTI2NworI2RlZmluZQlTVFJVQ1QJMjY4CisjZGVmaW5lCVVOSU9OCTI2OQorI2RlZmluZQlJRgkyNzAKKyNkZWZpbmUJRUxTRQkyNzEKKyNkZWZpbmUJV0hJTEUJMjcyCisjZGVmaW5lCURPCTI3MworI2RlZmluZQlGT1IJMjc0CisjZGVmaW5lCVNXSVRDSAkyNzUKKyNkZWZpbmUJQ0FTRQkyNzYKKyNkZWZpbmUJREVGQVVMVAkyNzcKKyNkZWZpbmUJQlJFQUsJMjc4CisjZGVmaW5lCUNPTlRJTlVFCTI3OQorI2RlZmluZQlSRVRVUk4JMjgwCisjZGVmaW5lCUdPVE8JMjgxCisjZGVmaW5lCUFTTV9LRVlXT1JECTI4MgorI2RlZmluZQlUWVBFT0YJMjgzCisjZGVmaW5lCUFMSUdOT0YJMjg0CisjZGVmaW5lCUFUVFJJQlVURQkyODUKKyNkZWZpbmUJRVhURU5TSU9OCTI4NgorI2RlZmluZQlMQUJFTAkyODcKKyNkZWZpbmUJUkVBTFBBUlQJMjg4CisjZGVmaW5lCUlNQUdQQVJUCTI4OQorI2RlZmluZQlBU1NJR04JMjkwCisjZGVmaW5lCU9ST1IJMjkxCisjZGVmaW5lCUFOREFORAkyOTIKKyNkZWZpbmUJRVFDT01QQVJFCTI5MworI2RlZmluZQlBUklUSENPTVBBUkUJMjk0CisjZGVmaW5lCUxTSElGVAkyOTUKKyNkZWZpbmUJUlNISUZUCTI5NgorI2RlZmluZQlVTkFSWQkyOTcKKyNkZWZpbmUJUExVU1BMVVMJMjk4CisjZGVmaW5lCU1JTlVTTUlOVVMJMjk5CisjZGVmaW5lCUhZUEVSVU5BUlkJMzAwCisjZGVmaW5lCVBPSU5UU0FUCTMwMQorI2RlZmluZQlJTlRFUkZBQ0UJMzAyCisjZGVmaW5lCUlNUExFTUVOVEFUSU9OCTMwMworI2RlZmluZQlFTkQJMzA0CisjZGVmaW5lCVNFTEVDVE9SCTMwNQorI2RlZmluZQlERUZTCTMwNgorI2RlZmluZQlFTkNPREUJMzA3CisjZGVmaW5lCUNMQVNTTkFNRQkzMDgKKyNkZWZpbmUJUFVCTElDCTMwOQorI2RlZmluZQlQUklWQVRFCTMxMAorI2RlZmluZQlQUk9URUNURUQJMzExCisjZGVmaW5lCVBST1RPQ09MCTMxMgorI2RlZmluZQlPQkpFQ1ROQU1FCTMxMworI2RlZmluZQlDTEFTUwkzMTQKKyNkZWZpbmUJQUxJQVMJMzE1CisjZGVmaW5lCU9CSkNfU1RSSU5HCTMxNgorCisKK2V4dGVybiBZWVNUWVBFIHl5bHZhbDsKZGlmZiAtLWdpdCBhL2djYy9jLXBhcnNlLnkgYi9nY2MvYy1wYXJzZS55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMmIwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvYy1wYXJzZS55CkBAIC0wLDAgKzEsMjE3NiBAQAorLypXQVJOSU5HOiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQhKi8KKy8qIFlBQ0MgcGFyc2VyIGZvciBDIHN5bnRheCBhbmQgZm9yIE9iamVjdGl2ZSBDLiAgLSotYy0qLQorICAgQ29weXJpZ2h0IChDKSAxOTg3LCA4OCwgODksIDkyLTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGdyYW1tYXIgb2YgQyBhbmQgdGhhdCBvZiBPYmplY3RpdmUgQy4KKyAgIGlmb2JqYyAuLi4gZW5kIGlmb2JqYyAgY29uZGl0aW9uYWxzIGNvbnRhaW4gY29kZSBmb3IgT2JqZWN0aXZlIEMgb25seS4KKyAgIGlmYyAuLi4gZW5kIGlmYyAgY29uZGl0aW9uYWxzIGNvbnRhaW4gY29kZSBmb3IgQyBvbmx5LgorICAgU2VkIGNvbW1hbmRzIGluIE1ha2VmaWxlLmluIGFyZSB1c2VkIHRvIGNvbnZlcnQgdGhpcyBmaWxlIGludG8KKyAgIGMtcGFyc2UueSBhbmQgaW50byBvYmpjLXBhcnNlLnkuICAqLworCisvKiBUbyB3aG9tZXZlciBpdCBtYXkgY29uY2VybjogSSBoYXZlIGhlYXJkIHRoYXQgc3VjaCBhIHRoaW5nIHdhcyBvbmNlCisgICB3cml0dGVuIGJ5IEFUJlQsIGJ1dCBJIGhhdmUgbmV2ZXIgc2VlbiBpdC4gICovCisKKyVleHBlY3QgNDYKKworLyogVGhlc2UgYXJlIHRoZSAyMyBjb25mbGljdHMgeW91IHNob3VsZCBnZXQgaW4gcGFyc2Uub3V0cHV0OworICAgdGhlIHN0YXRlIG51bWJlcnMgbWF5IHZhcnkgaWYgbWlub3IgY2hhbmdlcyBpbiB0aGUgZ3JhbW1hciBhcmUgbWFkZS4KKworU3RhdGUgNDIgY29udGFpbnMgMSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QuICAoVHdvIHdheXMgdG8gcGFyc2UgQVRUUklCVVRFLikKK1N0YXRlIDQ0IGNvbnRhaW5zIDEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0LiAgKFR3byB3YXlzIHRvIHJlY292ZXIgZnJvbSBlcnJvci4pCitTdGF0ZSAxMDMgY29udGFpbnMgMSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QuICAoVHdvIHdheXMgdG8gcmVjb3ZlciBmcm9tIGVycm9yLikKK1N0YXRlIDExMCBjb250YWlucyAxIHNoaWZ0L3JlZHVjZSBjb25mbGljdC4gIChUd28gd2F5cyB0byBwYXJzZSBBVFRSSUJVVEUuKQorU3RhdGUgMTExIGNvbnRhaW5zIDEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0LiAgKFR3byB3YXlzIHRvIHJlY292ZXIgZnJvbSBlcnJvci4pCitTdGF0ZSAxMTUgY29udGFpbnMgMSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QuICAoVHdvIHdheXMgdG8gcmVjb3ZlciBmcm9tIGVycm9yLikKK1N0YXRlIDEzMiBjb250YWlucyAxIHNoaWZ0L3JlZHVjZSBjb25mbGljdC4gIChTZWUgY29tbWVudCBhdCBjb21wb25lbnRfZGVjbC4pCitTdGF0ZSAxODAgY29udGFpbnMgMSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QuICAoVHdvIHdheXMgdG8gcGFyc2UgQVRUUklCVVRFLikKK1N0YXRlIDE5NCBjb250YWlucyAyIHNoaWZ0L3JlZHVjZSBjb25mbGljdC4gIChGb3VyIHdheXMgdG8gcGFyc2UgdGhpcy4pCitTdGF0ZSAyMDIgY29udGFpbnMgMSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QuICAoVHdvIHdheXMgdG8gcmVjb3ZlciBmcm9tIGVycm9yLikKK1N0YXRlIDIxNCBjb250YWlucyAxIHNoaWZ0L3JlZHVjZSBjb25mbGljdC4gIChUd28gd2F5cyB0byByZWNvdmVyIGZyb20gZXJyb3IuKQorU3RhdGUgMjIwIGNvbnRhaW5zIDEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0LiAgKFR3byB3YXlzIHRvIHJlY292ZXIgZnJvbSBlcnJvci4pCitTdGF0ZSAzMDQgY29udGFpbnMgMiBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzLiAgKEZvdXIgd2F5cyB0byBwYXJzZSB0aGlzLikKK1N0YXRlIDMzNSBjb250YWlucyAyIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMuICAoRm91ciB3YXlzIHRvIHBhcnNlIHRoaXMuKQorU3RhdGUgMzQ3IGNvbnRhaW5zIDEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0LiAgKFR3byB3YXlzIHRvIHBhcnNlIEFUVFJJQlVURVMuKQorU3RhdGUgMzUyIGNvbnRhaW5zIDEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0LiAgKFR3byB3YXlzIHRvIHBhcnNlIEFUVFJJQlVURVMuKQorU3RhdGUgMzgzIGNvbnRhaW5zIDIgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cy4gIChGb3VyIHdheXMgdG8gcGFyc2UgdGhpcy4pCitTdGF0ZSA0MzQgY29udGFpbnMgMiBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzLiAgKEZvdXIgd2F5cyB0byBwYXJzZSB0aGlzLikgICovCisKKworJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiaW5wdXQuaCIKKyNpbmNsdWRlICJjLWxleC5oIgorI2luY2x1ZGUgImMtdHJlZS5oIgorI2luY2x1ZGUgImZsYWdzLmgiCisKKyNpZmRlZiBNVUxUSUJZVEVfQ0hBUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbmRpZgorCisKKy8qIFNpbmNlIHBhcnNlcnMgYXJlIGRpc3RpbmN0IGZvciBlYWNoIGxhbmd1YWdlLCBwdXQgdGhlIGxhbmd1YWdlIHN0cmluZworICAgZGVmaW5pdGlvbiBoZXJlLiAgKi8KK2NoYXIgKmxhbmd1YWdlX3N0cmluZyA9ICJHTlUgQyI7CisKKyNpZm5kZWYgZXJybm8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKwordm9pZCB5eWVycm9yICgpOworCisvKiBMaWtlIFlZRVJST1IgYnV0IGRvIGNhbGwgeXllcnJvci4gICovCisjZGVmaW5lIFlZRVJST1IxIHsgeXllcnJvciAoInN5bnRheCBlcnJvciIpOyBZWUVSUk9SOyB9CisKKy8qIENhdXNlIHRoZSBgeXlkZWJ1ZycgdmFyaWFibGUgdG8gYmUgZGVmaW5lZC4gICovCisjZGVmaW5lIFlZREVCVUcgMQorJX0KKworJXN0YXJ0IHByb2dyYW0KKworJXVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOworCWNoYXIgKmZpbGVuYW1lOyBpbnQgbGluZW5vOyBpbnQgZW5kc19pbl9sYWJlbDsgfQorCisvKiBBbGwgaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlc2VydmVkIHdvcmRzCisgICBhbmQgYXJlIG5vdCBkZWNsYXJlZCB0eXBlZGVmcyBpbiB0aGUgY3VycmVudCBibG9jayAqLworJXRva2VuIElERU5USUZJRVIKKworLyogQWxsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGRlY2xhcmVkIHR5cGVkZWZzIGluIHRoZSBjdXJyZW50IGJsb2NrLgorICAgSW4gc29tZSBjb250ZXh0cywgdGhleSBhcmUgdHJlYXRlZCBqdXN0IGxpa2UgSURFTlRJRklFUiwKKyAgIGJ1dCB0aGV5IGNhbiBhbHNvIHNlcnZlIGFzIHR5cGVzcGVjcyBpbiBkZWNsYXJhdGlvbnMuICAqLworJXRva2VuIFRZUEVOQU1FCisKKy8qIFJlc2VydmVkIHdvcmRzIHRoYXQgc3BlY2lmeSBzdG9yYWdlIGNsYXNzLgorICAgeXlsdmFsIGNvbnRhaW5zIGFuIElERU5USUZJRVJfTk9ERSB3aGljaCBpbmRpY2F0ZXMgd2hpY2ggb25lLiAgKi8KKyV0b2tlbiBTQ1NQRUMKKworLyogUmVzZXJ2ZWQgd29yZHMgdGhhdCBzcGVjaWZ5IHR5cGUuCisgICB5eWx2YWwgY29udGFpbnMgYW4gSURFTlRJRklFUl9OT0RFIHdoaWNoIGluZGljYXRlcyB3aGljaCBvbmUuICAqLworJXRva2VuIFRZUEVTUEVDCisKKy8qIFJlc2VydmVkIHdvcmRzIHRoYXQgcXVhbGlmeSB0eXBlOiAiY29uc3QiIG9yICJ2b2xhdGlsZSIuCisgICB5eWx2YWwgY29udGFpbnMgYW4gSURFTlRJRklFUl9OT0RFIHdoaWNoIGluZGljYXRlcyB3aGljaCBvbmUuICAqLworJXRva2VuIFRZUEVfUVVBTAorCisvKiBDaGFyYWN0ZXIgb3IgbnVtZXJpYyBjb25zdGFudHMuCisgICB5eWx2YWwgaXMgdGhlIG5vZGUgZm9yIHRoZSBjb25zdGFudC4gICovCisldG9rZW4gQ09OU1RBTlQKKworLyogU3RyaW5nIGNvbnN0YW50cyBpbiByYXcgZm9ybS4KKyAgIHl5bHZhbCBpcyBhIFNUUklOR19DU1Qgbm9kZS4gICovCisldG9rZW4gU1RSSU5HCisKKy8qICIuLi4iLCB1c2VkIGZvciBmdW5jdGlvbnMgd2l0aCB2YXJpYWJsZSBhcmdsaXN0cy4gICovCisldG9rZW4gRUxMSVBTSVMKKworLyogdGhlIHJlc2VydmVkIHdvcmRzICovCisvKiBTQ08gaW5jbHVkZSBmaWxlcyB0ZXN0ICJBU00iLCBzbyB1c2Ugc29tZXRoaW5nIGVsc2UuICovCisldG9rZW4gU0laRU9GIEVOVU0gU1RSVUNUIFVOSU9OIElGIEVMU0UgV0hJTEUgRE8gRk9SIFNXSVRDSCBDQVNFIERFRkFVTFQKKyV0b2tlbiBCUkVBSyBDT05USU5VRSBSRVRVUk4gR09UTyBBU01fS0VZV09SRCBUWVBFT0YgQUxJR05PRgorJXRva2VuIEFUVFJJQlVURSBFWFRFTlNJT04gTEFCRUwKKyV0b2tlbiBSRUFMUEFSVCBJTUFHUEFSVAorCisvKiBBZGQgcHJlY2VkZW5jZSBydWxlcyB0byBzb2x2ZSBkYW5nbGluZyBlbHNlIHMvciBjb25mbGljdCAqLworJW5vbmFzc29jIElGCislbm9uYXNzb2MgRUxTRQorCisvKiBEZWZpbmUgdGhlIG9wZXJhdG9yIHRva2VucyBhbmQgdGhlaXIgcHJlY2VkZW5jZXMuCisgICBUaGUgdmFsdWUgaXMgYW4gaW50ZWdlciBiZWNhdXNlLCBpZiB1c2VkLCBpdCBpcyB0aGUgdHJlZSBjb2RlCisgICB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24gbWFkZSBmcm9tIHRoZSBvcGVyYXRvci4gICovCisKKyVyaWdodCA8Y29kZT4gQVNTSUdOICc9JworJXJpZ2h0IDxjb2RlPiAnPycgJzonCislbGVmdCA8Y29kZT4gT1JPUgorJWxlZnQgPGNvZGU+IEFOREFORAorJWxlZnQgPGNvZGU+ICd8JworJWxlZnQgPGNvZGU+ICdeJworJWxlZnQgPGNvZGU+ICcmJworJWxlZnQgPGNvZGU+IEVRQ09NUEFSRQorJWxlZnQgPGNvZGU+IEFSSVRIQ09NUEFSRQorJWxlZnQgPGNvZGU+IExTSElGVCBSU0hJRlQKKyVsZWZ0IDxjb2RlPiAnKycgJy0nCislbGVmdCA8Y29kZT4gJyonICcvJyAnJScKKyVyaWdodCA8Y29kZT4gVU5BUlkgUExVU1BMVVMgTUlOVVNNSU5VUworJWxlZnQgSFlQRVJVTkFSWQorJWxlZnQgPGNvZGU+IFBPSU5UU0FUICcuJyAnKCcgJ1snCisKKy8qIFRoZSBPYmplY3RpdmUtQyBrZXl3b3Jkcy4gIFRoZXNlIGFyZSBpbmNsdWRlZCBpbiBDIGFuZCBpbgorICAgT2JqZWN0aXZlIEMsIHNvIHRoYXQgdGhlIHRva2VuIGNvZGVzIGFyZSB0aGUgc2FtZSBpbiBib3RoLiAgKi8KKyV0b2tlbiBJTlRFUkZBQ0UgSU1QTEVNRU5UQVRJT04gRU5EIFNFTEVDVE9SIERFRlMgRU5DT0RFCisldG9rZW4gQ0xBU1NOQU1FIFBVQkxJQyBQUklWQVRFIFBST1RFQ1RFRCBQUk9UT0NPTCBPQkpFQ1ROQU1FIENMQVNTIEFMSUFTCisKKy8qIE9iamVjdGl2ZS1DIHN0cmluZyBjb25zdGFudHMgaW4gcmF3IGZvcm0uCisgICB5eWx2YWwgaXMgYW4gT0JKQ19TVFJJTkdfQ1NUIG5vZGUuICAqLworJXRva2VuIE9CSkNfU1RSSU5HCisKKworJXR5cGUgPGNvZGU+IHVub3AKKworJXR5cGUgPHR0eXBlPiBpZGVudGlmaWVyIElERU5USUZJRVIgVFlQRU5BTUUgQ09OU1RBTlQgZXhwciBub25udWxsX2V4cHJsaXN0IGV4cHJsaXN0CisldHlwZSA8dHR5cGU+IGV4cHJfbm9fY29tbWFzIGNhc3RfZXhwciB1bmFyeV9leHByIHByaW1hcnkgc3RyaW5nIFNUUklORworJXR5cGUgPHR0eXBlPiB0eXBlZF9kZWNsc3BlY3MgcmVzZXJ2ZWRfZGVjbHNwZWNzCisldHlwZSA8dHR5cGU+IHR5cGVkX3R5cGVzcGVjcyByZXNlcnZlZF90eXBlc3BlY3F1YWxzCisldHlwZSA8dHR5cGU+IGRlY2xtb2RzIHR5cGVzcGVjIHR5cGVzcGVjcXVhbF9yZXNlcnZlZAorJXR5cGUgPHR0eXBlPiB0eXBlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIgcmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyCisldHlwZSA8dHR5cGU+IGRlY2xtb2RzX25vX3ByZWZpeF9hdHRyCisldHlwZSA8dHR5cGU+IFNDU1BFQyBUWVBFU1BFQyBUWVBFX1FVQUwgbm9uZW1wdHlfdHlwZV9xdWFscyBtYXliZV90eXBlX3F1YWwKKyV0eXBlIDx0dHlwZT4gaW5pdGRlY2xzIG5vdHlwZV9pbml0ZGVjbHMgaW5pdGRjbCBub3R5cGVfaW5pdGRjbAorJXR5cGUgPHR0eXBlPiBpbml0IG1heWJlYXNtCisldHlwZSA8dHR5cGU+IGFzbV9vcGVyYW5kcyBub25udWxsX2FzbV9vcGVyYW5kcyBhc21fb3BlcmFuZCBhc21fY2xvYmJlcnMKKyV0eXBlIDx0dHlwZT4gbWF5YmVfYXR0cmlidXRlIGF0dHJpYnV0ZXMgYXR0cmlidXRlIGF0dHJpYnV0ZV9saXN0IGF0dHJpYgorJXR5cGUgPHR0eXBlPiBhbnlfd29yZAorCisldHlwZSA8dHR5cGU+IGNvbXBzdG10CisKKyV0eXBlIDx0dHlwZT4gZGVjbGFyYXRvcgorJXR5cGUgPHR0eXBlPiBub3R5cGVfZGVjbGFyYXRvciBhZnRlcl90eXBlX2RlY2xhcmF0b3IKKyV0eXBlIDx0dHlwZT4gcGFybV9kZWNsYXJhdG9yCisKKyV0eXBlIDx0dHlwZT4gc3RydWN0c3AgY29tcG9uZW50X2RlY2xfbGlzdCBjb21wb25lbnRfZGVjbF9saXN0MgorJXR5cGUgPHR0eXBlPiBjb21wb25lbnRfZGVjbCBjb21wb25lbnRzIGNvbXBvbmVudF9kZWNsYXJhdG9yCisldHlwZSA8dHR5cGU+IGVudW1saXN0IGVudW1lcmF0b3IKKyV0eXBlIDx0dHlwZT4gdHlwZW5hbWUgYWJzZGNsIGFic2RjbDEgdHlwZV9xdWFscworJXR5cGUgPHR0eXBlPiB4ZXhwciBwYXJtcyBwYXJtIGlkZW50aWZpZXJzCisKKyV0eXBlIDx0dHlwZT4gcGFybWxpc3QgcGFybWxpc3RfMSBwYXJtbGlzdF8yCisldHlwZSA8dHR5cGU+IHBhcm1saXN0X29yX2lkZW50aWZpZXJzIHBhcm1saXN0X29yX2lkZW50aWZpZXJzXzEKKyV0eXBlIDx0dHlwZT4gaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzCisKKyV0eXBlIDxpdHlwZT4gc2V0c3BlY3MKKworJXR5cGUgPGVuZHNfaW5fbGFiZWw+IGxpbmVub19zdG10X29yX2xhYmVsIGxpbmVub19zdG10X29yX2xhYmVscyBzdG10X29yX2xhYmVsCisKKyV0eXBlIDxmaWxlbmFtZT4gc2F2ZV9maWxlbmFtZQorJXR5cGUgPGxpbmVubz4gc2F2ZV9saW5lbm8KKwwKKwwKKyV7CisvKiBOdW1iZXIgb2Ygc3RhdGVtZW50cyAobG9vc2VseSBzcGVha2luZykgc2VlbiBzbyBmYXIuICAqLworc3RhdGljIGludCBzdG10X2NvdW50OworCisvKiBJbnB1dCBmaWxlIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgZW5kIG9mIHRoZSBib2R5IG9mIGxhc3Qgc2ltcGxlX2lmOworICAgdXNlZCBieSB0aGUgc3RtdC1ydWxlIGltbWVkaWF0ZWx5IGFmdGVyIHNpbXBsZV9pZiByZXR1cm5zLiAgKi8KK3N0YXRpYyBjaGFyICppZl9zdG10X2ZpbGU7CitzdGF0aWMgaW50IGlmX3N0bXRfbGluZTsKKworLyogTGlzdCBvZiB0eXBlcyBhbmQgc3RydWN0dXJlIGNsYXNzZXMgb2YgdGhlIGN1cnJlbnQgZGVjbGFyYXRpb24uICAqLworc3RhdGljIHRyZWUgY3VycmVudF9kZWNsc3BlY3MgPSBOVUxMX1RSRUU7CitzdGF0aWMgdHJlZSBwcmVmaXhfYXR0cmlidXRlcyA9IE5VTExfVFJFRTsKKworLyogU3RhY2sgb2Ygc2F2ZWQgdmFsdWVzIG9mIGN1cnJlbnRfZGVjbHNwZWNzIGFuZCBwcmVmaXhfYXR0cmlidXRlcy4gICovCitzdGF0aWMgdHJlZSBkZWNsc3BlY19zdGFjazsKKworLyogMSBpZiB3ZSBleHBsYWluZWQgdW5kZWNsYXJlZCB2YXIgZXJyb3JzLiAgKi8KK3N0YXRpYyBpbnQgdW5kZWNsYXJlZF92YXJpYWJsZV9ub3RpY2U7CisKKworLyogVGVsbCB5eXBhcnNlIGhvdyB0byBwcmludCBhIHRva2VuJ3MgdmFsdWUsIGlmIHl5ZGVidWcgaXMgc2V0LiAgKi8KKworI2RlZmluZSBZWVBSSU5UKEZJTEUsWVlDSEFSLFlZTFZBTCkgeXlwcmludChGSUxFLFlZQ0hBUixZWUxWQUwpCitleHRlcm4gdm9pZCB5eXByaW50ICgpOworJX0KKwwKKyUlCitwcm9ncmFtOiAvKiBlbXB0eSAqLworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBhbiBlbXB0eSBzb3VyY2UgZmlsZSIpOworCQkgIGZpbmlzaF9maWxlICgpOworCQl9CisJfCBleHRkZWZzCisJCXsKKwkJICAvKiBJbiBjYXNlIHRoZXJlIHdlcmUgbWlzc2luZyBjbG9zZWJyYWNlcywKKwkJICAgICBnZXQgdXMgYmFjayB0byB0aGUgZ2xvYmFsIGJpbmRpbmcgbGV2ZWwuICAqLworCQkgIHdoaWxlICghIGdsb2JhbF9iaW5kaW5nc19wICgpKQorCQkgICAgcG9wbGV2ZWwgKDAsIDAsIDApOworCQkgIGZpbmlzaF9maWxlICgpOworCQl9CisJOworCisvKiB0aGUgcmVhc29uIGZvciB0aGUgc3RyYW5nZSBhY3Rpb25zIGluIHRoaXMgcnVsZQorIGlzIHNvIHRoYXQgbm90eXBlX2luaXRkZWNscyB3aGVuIHJlYWNoZWQgdmlhIGRhdGFkZWYKKyBjYW4gZmluZCBhIHZhbGlkIGxpc3Qgb2YgdHlwZSBhbmQgc2Mgc3BlY3MgaW4gJDAuICovCisKK2V4dGRlZnM6CisJeyQ8dHR5cGU+JCA9IE5VTExfVFJFRTsgfSBleHRkZWYKKwl8IGV4dGRlZnMgeyQ8dHR5cGU+JCA9IE5VTExfVFJFRTsgfSBleHRkZWYKKwk7CisKK2V4dGRlZjoKKwlmbmRlZgorCXwgZGF0YWRlZgorCXwgQVNNX0tFWVdPUkQgJygnIGV4cHIgJyknICc7JworCQl7IFNUUklQX05PUFMgKCQzKTsKKwkJICBpZiAoKFRSRUVfQ09ERSAoJDMpID09IEFERFJfRVhQUgorCQkgICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKCQzLCAwKSkgPT0gU1RSSU5HX0NTVCkKKwkJICAgICAgfHwgVFJFRV9DT0RFICgkMykgPT0gU1RSSU5HX0NTVCkKKwkJICAgIGFzc2VtYmxlX2FzbSAoJDMpOworCQkgIGVsc2UKKwkJICAgIGVycm9yICgiYXJndW1lbnQgb2YgYGFzbScgaXMgbm90IGEgY29uc3RhbnQgc3RyaW5nIik7IH0KKwl8IGV4dGVuc2lvbiBleHRkZWYKKwkJeyBwZWRhbnRpYyA9ICQ8aXR5cGU+MTsgfQorCTsKKworZGF0YWRlZjoKKwkgIHNldHNwZWNzIG5vdHlwZV9pbml0ZGVjbHMgJzsnCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgZXJyb3IgKCJBTlNJIEMgZm9yYmlkcyBkYXRhIGRlZmluaXRpb24gd2l0aCBubyB0eXBlIG9yIHN0b3JhZ2UgY2xhc3MiKTsKKwkJICBlbHNlIGlmICghZmxhZ190cmFkaXRpb25hbCkKKwkJICAgIHdhcm5pbmcgKCJkYXRhIGRlZmluaXRpb24gaGFzIG5vIHR5cGUgb3Igc3RvcmFnZSBjbGFzcyIpOyAKKworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDEpOyB9CisgICAgICAgIHwgZGVjbG1vZHMgc2V0c3BlY3Mgbm90eXBlX2luaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgdHlwZWRfZGVjbHNwZWNzIHNldHNwZWNzIGluaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgIH0KKyAgICAgICAgfCBkZWNsbW9kcyAnOycKKwkgIHsgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjcyAnOycKKwkgIHsgc2hhZG93X3RhZyAoJDEpOyB9CisJfCBlcnJvciAnOycKKwl8IGVycm9yICd9JworCXwgJzsnCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBkb2VzIG5vdCBhbGxvdyBleHRyYSBgOycgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIik7IH0KKwk7CisMCitmbmRlZjoKKwkgIHR5cGVkX2RlY2xzcGVjcyBzZXRzcGVjcyBkZWNsYXJhdG9yCisJCXsgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCAkMywKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyB9CisJICBvbGRfc3R5bGVfcGFybV9kZWNscworCQl7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IH0KKwkgIGNvbXBzdG10X29yX2Vycm9yCisJCXsgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjcyBzZXRzcGVjcyBkZWNsYXJhdG9yIGVycm9yCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzIHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yCisJCXsgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCAkMywKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyB9CisJICBvbGRfc3R5bGVfcGFybV9kZWNscworCQl7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IH0KKwkgIGNvbXBzdG10X29yX2Vycm9yCisJCXsgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzIHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yIGVycm9yCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yCisJCXsgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKE5VTExfVFJFRSwgJDIsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDApKQorCQkgICAgWVlFUlJPUjE7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbiAoKTsgfQorCSAgb2xkX3N0eWxlX3Bhcm1fZGVjbHMKKwkJeyBzdG9yZV9wYXJtX2RlY2xzICgpOyB9CisJICBjb21wc3RtdF9vcl9lcnJvcgorCQl7IGZpbmlzaF9mdW5jdGlvbiAoMCk7IAorCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDEpOyB9CisJfCBzZXRzcGVjcyBub3R5cGVfZGVjbGFyYXRvciBlcnJvcgorCQl7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDEpOyB9CisJOworCitpZGVudGlmaWVyOgorCUlERU5USUZJRVIKKwl8IFRZUEVOQU1FCisJOworCit1bm9wOiAgICAgJyYnCisJCXsgJCQgPSBBRERSX0VYUFI7IH0KKwl8ICctJworCQl7ICQkID0gTkVHQVRFX0VYUFI7IH0KKwl8ICcrJworCQl7ICQkID0gQ09OVkVSVF9FWFBSOyB9CisJfCBQTFVTUExVUworCQl7ICQkID0gUFJFSU5DUkVNRU5UX0VYUFI7IH0KKwl8IE1JTlVTTUlOVVMKKwkJeyAkJCA9IFBSRURFQ1JFTUVOVF9FWFBSOyB9CisJfCAnficKKwkJeyAkJCA9IEJJVF9OT1RfRVhQUjsgfQorCXwgJyEnCisJCXsgJCQgPSBUUlVUSF9OT1RfRVhQUjsgfQorCTsKKworZXhwcjoJbm9ubnVsbF9leHBybGlzdAorCQl7ICQkID0gYnVpbGRfY29tcG91bmRfZXhwciAoJDEpOyB9CisJOworCitleHBybGlzdDoKKwkgIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IG5vbm51bGxfZXhwcmxpc3QKKwk7CisKK25vbm51bGxfZXhwcmxpc3Q6CisJZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMSk7IH0KKwl8IG5vbm51bGxfZXhwcmxpc3QgJywnIGV4cHJfbm9fY29tbWFzCisJCXsgY2hhaW5vbiAoJDEsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMykpOyB9CisJOworCit1bmFyeV9leHByOgorCXByaW1hcnkKKwl8ICcqJyBjYXN0X2V4cHIgICAlcHJlYyBVTkFSWQorCQl7ICQkID0gYnVpbGRfaW5kaXJlY3RfcmVmICgkMiwgInVuYXJ5ICoiKTsgfQorCS8qIF9fZXh0ZW5zaW9uX18gdHVybnMgb2ZmIC1wZWRhbnRpYyBmb3IgZm9sbG93aW5nIHByaW1hcnkuICAqLworCXwgZXh0ZW5zaW9uIGNhc3RfZXhwcgkgICVwcmVjIFVOQVJZCisJCXsgJCQgPSAkMjsKKwkJICBwZWRhbnRpYyA9ICQ8aXR5cGU+MTsgfQorCXwgdW5vcCBjYXN0X2V4cHIgICVwcmVjIFVOQVJZCisJCXsgJCQgPSBidWlsZF91bmFyeV9vcCAoJDEsICQyLCAwKTsKKwkJICBvdmVyZmxvd193YXJuaW5nICgkJCk7IH0KKwkvKiBSZWZlciB0byB0aGUgYWRkcmVzcyBvZiBhIGxhYmVsIGFzIGEgcG9pbnRlci4gICovCisJfCBBTkRBTkQgaWRlbnRpZmllcgorCQl7IHRyZWUgbGFiZWwgPSBsb29rdXBfbGFiZWwgKCQyKTsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYCYmJyIpOworCQkgIGlmIChsYWJlbCA9PSAwKQorCQkgICAgJCQgPSBudWxsX3BvaW50ZXJfbm9kZTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIFRSRUVfVVNFRCAobGFiZWwpID0gMTsKKwkJICAgICAgJCQgPSBidWlsZDEgKEFERFJfRVhQUiwgcHRyX3R5cGVfbm9kZSwgbGFiZWwpOworCQkgICAgICBUUkVFX0NPTlNUQU5UICgkJCkgPSAxOworCQkgICAgfQorCQl9CisvKiBUaGlzIHNlZW1zIHRvIGJlIGltcG9zc2libGUgb24gc29tZSBtYWNoaW5lcywgc28gbGV0J3MgdHVybiBpdCBvZmYuCisgICBZb3UgY2FuIHVzZSBfX2J1aWx0aW5fbmV4dF9hcmcgdG8gZmluZCB0aGUgYW5vbnltb3VzIHN0YWNrIGFyZ3MuCisJfCAnJicgRUxMSVBTSVMKKwkJeyB0cmVlIHR5cGVzID0gVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSk7CisJCSAgJCQgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgaWYgKFRSRUVfVkFMVUUgKHRyZWVfbGFzdCAodHlwZXMpKSA9PSB2b2lkX3R5cGVfbm9kZSkKKwkJICAgIGVycm9yICgiYCYuLi4nIHVzZWQgaW4gZnVuY3Rpb24gd2l0aCBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAocGVkYW50aWMpCisJCQlwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYCYuLi4nIik7CisJCSAgICAgICQkID0gdHJlZV9sYXN0IChERUNMX0FSR1VNRU5UUyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSk7CisJCSAgICAgICQkID0gYnVpbGRfdW5hcnlfb3AgKEFERFJfRVhQUiwgJCQsIDApOworCQkgICAgfSB9CisqLworCXwgc2l6ZW9mIHVuYXJ5X2V4cHIgICVwcmVjIFVOQVJZCisJCXsgc2tpcF9ldmFsdWF0aW9uLS07CisJCSAgaWYgKFRSRUVfQ09ERSAoJDIpID09IENPTVBPTkVOVF9SRUYKKwkJICAgICAgJiYgREVDTF9CSVRfRklFTEQgKFRSRUVfT1BFUkFORCAoJDIsIDEpKSkKKwkJICAgIGVycm9yICgiYHNpemVvZicgYXBwbGllZCB0byBhIGJpdC1maWVsZCIpOworCQkgICQkID0gY19zaXplb2YgKFRSRUVfVFlQRSAoJDIpKTsgfQorCXwgc2l6ZW9mICcoJyB0eXBlbmFtZSAnKScgICVwcmVjIEhZUEVSVU5BUlkKKwkJeyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICAkJCA9IGNfc2l6ZW9mIChncm9rdHlwZW5hbWUgKCQzKSk7IH0KKwl8IGFsaWdub2YgdW5hcnlfZXhwciAgJXByZWMgVU5BUlkKKwkJeyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICAkJCA9IGNfYWxpZ25vZl9leHByICgkMik7IH0KKwl8IGFsaWdub2YgJygnIHR5cGVuYW1lICcpJyAgJXByZWMgSFlQRVJVTkFSWQorCQl7IHNraXBfZXZhbHVhdGlvbi0tOworCQkgICQkID0gY19hbGlnbm9mIChncm9rdHlwZW5hbWUgKCQzKSk7IH0KKwl8IFJFQUxQQVJUIGNhc3RfZXhwciAlcHJlYyBVTkFSWQorCQl7ICQkID0gYnVpbGRfdW5hcnlfb3AgKFJFQUxQQVJUX0VYUFIsICQyLCAwKTsgfQorCXwgSU1BR1BBUlQgY2FzdF9leHByICVwcmVjIFVOQVJZCisJCXsgJCQgPSBidWlsZF91bmFyeV9vcCAoSU1BR1BBUlRfRVhQUiwgJDIsIDApOyB9CisJOworCitzaXplb2Y6CisJU0laRU9GIHsgc2tpcF9ldmFsdWF0aW9uKys7IH0KKwk7CisKK2FsaWdub2Y6CisJQUxJR05PRiB7IHNraXBfZXZhbHVhdGlvbisrOyB9CisJOworCitjYXN0X2V4cHI6CisJdW5hcnlfZXhwcgorCXwgJygnIHR5cGVuYW1lICcpJyBjYXN0X2V4cHIgICVwcmVjIFVOQVJZCisJCXsgdHJlZSB0eXBlID0gZ3Jva3R5cGVuYW1lICgkMik7CisJCSAgJCQgPSBidWlsZF9jX2Nhc3QgKHR5cGUsICQ0KTsgfQorCXwgJygnIHR5cGVuYW1lICcpJyAneycgCisJCXsgc3RhcnRfaW5pdCAoTlVMTF9UUkVFLCBOVUxMLCAwKTsKKwkJICAkMiA9IGdyb2t0eXBlbmFtZSAoJDIpOworCQkgIHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0ICgkMik7IH0KKwkgIGluaXRsaXN0X21heWJlX2NvbW1hICd9JyAgJXByZWMgVU5BUlkKKwkJeyBjaGFyICpuYW1lOworCQkgIHRyZWUgcmVzdWx0ID0gcG9wX2luaXRfbGV2ZWwgKDApOworCQkgIHRyZWUgdHlwZSA9ICQyOworCQkgIGZpbmlzaF9pbml0ICgpOworCisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb25zIik7CisJCSAgaWYgKFRZUEVfTkFNRSAodHlwZSkgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgaWYgKFRSRUVfQ09ERSAoVFlQRV9OQU1FICh0eXBlKSkgPT0gSURFTlRJRklFUl9OT0RFKQorCQkJbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9OQU1FICh0eXBlKSk7CisJCSAgICAgIGVsc2UKKwkJCW5hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoVFlQRV9OQU1FICh0eXBlKSkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIG5hbWUgPSAiIjsKKwkJICAkJCA9IHJlc3VsdDsKKwkJICBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFICYmIFRZUEVfU0laRSAodHlwZSkgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgaW50IGZhaWx1cmUgPSBjb21wbGV0ZV9hcnJheV90eXBlICh0eXBlLCAkJCwgMSk7CisJCSAgICAgIGlmIChmYWlsdXJlKQorCQkJYWJvcnQgKCk7CisJCSAgICB9CisJCX0KKwk7CisKK2V4cHJfbm9fY29tbWFzOgorCSAgY2FzdF9leHByCisJfCBleHByX25vX2NvbW1hcyAnKycgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnLScgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnKicgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnLycgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnJScgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBMU0hJRlQgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBSU0hJRlQgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBBUklUSENPTVBBUkUgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBFUUNPTVBBUkUgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnJicgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnfCcgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnXicgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBBTkRBTkQKKwkJeyAkMSA9IHRydXRodmFsdWVfY29udmVyc2lvbiAoZGVmYXVsdF9jb252ZXJzaW9uICgkMSkpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSAkMSA9PSBib29sZWFuX2ZhbHNlX25vZGU7IH0KKwkgIGV4cHJfbm9fY29tbWFzCisJCXsgc2tpcF9ldmFsdWF0aW9uIC09ICQxID09IGJvb2xlYW5fZmFsc2Vfbm9kZTsKKwkJICAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKFRSVVRIX0FORElGX0VYUFIsICQxLCAkNCk7IH0KKwl8IGV4cHJfbm9fY29tbWFzIE9ST1IKKwkJeyAkMSA9IHRydXRodmFsdWVfY29udmVyc2lvbiAoZGVmYXVsdF9jb252ZXJzaW9uICgkMSkpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSAkMSA9PSBib29sZWFuX3RydWVfbm9kZTsgfQorCSAgZXhwcl9ub19jb21tYXMKKwkJeyBza2lwX2V2YWx1YXRpb24gLT0gJDEgPT0gYm9vbGVhbl90cnVlX25vZGU7CisJCSAgJCQgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wIChUUlVUSF9PUklGX0VYUFIsICQxLCAkNCk7IH0KKwl8IGV4cHJfbm9fY29tbWFzICc/JworCQl7ICQxID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKCQxKSk7CisJCSAgc2tpcF9ldmFsdWF0aW9uICs9ICQxID09IGJvb2xlYW5fZmFsc2Vfbm9kZTsgfQorICAgICAgICAgIGV4cHIgJzonCisJCXsgc2tpcF9ldmFsdWF0aW9uICs9ICgoJDEgPT0gYm9vbGVhbl90cnVlX25vZGUpCisJCQkJICAgICAgLSAoJDEgPT0gYm9vbGVhbl9mYWxzZV9ub2RlKSk7IH0KKwkgIGV4cHJfbm9fY29tbWFzCisJCXsgc2tpcF9ldmFsdWF0aW9uIC09ICQxID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgICQkID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwciAoJDEsICQ0LCAkNyk7IH0KKwl8IGV4cHJfbm9fY29tbWFzICc/JworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBvbWl0dGluZyB0aGUgbWlkZGxlIHRlcm0gb2YgYSA/OiBleHByZXNzaW9uIik7CisJCSAgLyogTWFrZSBzdXJlIGZpcnN0IG9wZXJhbmQgaXMgY2FsY3VsYXRlZCBvbmx5IG9uY2UuICAqLworCQkgICQ8dHR5cGU+MiA9IHNhdmVfZXhwciAoJDEpOworCQkgICQxID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKCQ8dHR5cGU+MikpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSAkMSA9PSBib29sZWFuX3RydWVfbm9kZTsgfQorCSAgJzonIGV4cHJfbm9fY29tbWFzCisJCXsgc2tpcF9ldmFsdWF0aW9uIC09ICQxID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgICQkID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwciAoJDEsICQ8dHR5cGU+MiwgJDUpOyB9CisJfCBleHByX25vX2NvbW1hcyAnPScgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IGJ1aWxkX21vZGlmeV9leHByICgkMSwgTk9QX0VYUFIsICQzKTsKKwkJICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoJCQsIE1PRElGWV9FWFBSKTsgfQorCXwgZXhwcl9ub19jb21tYXMgQVNTSUdOIGV4cHJfbm9fY29tbWFzCisJCXsgJCQgPSBidWlsZF9tb2RpZnlfZXhwciAoJDEsICQyLCAkMyk7CisJCSAgLyogVGhpcyBpbmhpYml0cyB3YXJuaW5ncyBpbiB0cnV0aHZhbHVlX2NvbnZlcnNpb24uICAqLworCQkgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICgkJCwgRVJST1JfTUFSSyk7IH0KKwk7CisKK3ByaW1hcnk6CisJSURFTlRJRklFUgorCQl7CisJCSAgJCQgPSBsYXN0aWRkZWNsOworCQkgIGlmICghJCQgfHwgJCQgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeworCQkgICAgICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisJCQl5eWNoYXIgPSBZWUxFWDsKKwkJICAgICAgaWYgKHl5Y2hhciA9PSAnKCcpCisJCQl7CisJCQkgICAgeworCQkJICAgICAgLyogT3JkaW5hcnkgaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb24uICAqLworCQkJICAgICAgJCQgPSBpbXBsaWNpdGx5X2RlY2xhcmUgKCQxKTsKKwkJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICgkJCk7CisJCQkgICAgICBUUkVFX1VTRUQgKCQkKSA9IDE7CisJCQkgICAgfQorCQkJfQorCQkgICAgICBlbHNlIGlmIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPT0gMCkKKwkJCXsKKwkJCSAgZXJyb3IgKCJgJXMnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pIiwKKwkJCQkgSURFTlRJRklFUl9QT0lOVEVSICgkMSkpOworCQkJICAkJCA9IGVycm9yX21hcmtfbm9kZTsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJeworCQkJICAgIHsKKwkJCSAgICAgIGlmIChJREVOVElGSUVSX0dMT0JBTF9WQUxVRSAoJDEpICE9IGVycm9yX21hcmtfbm9kZQorCQkJCSAgfHwgSURFTlRJRklFUl9FUlJPUl9MT0NVUyAoJDEpICE9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkKKwkJCQl7CisJCQkJICBlcnJvciAoImAlcycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIHRoaXMgZnVuY3Rpb24pIiwKKwkJCQkJIElERU5USUZJRVJfUE9JTlRFUiAoJDEpKTsKKworCQkJCSAgaWYgKCEgdW5kZWNsYXJlZF92YXJpYWJsZV9ub3RpY2UpCisJCQkJICAgIHsKKwkJCQkgICAgICBlcnJvciAoIihFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UiKTsKKwkJCQkgICAgICBlcnJvciAoImZvciBlYWNoIGZ1bmN0aW9uIGl0IGFwcGVhcnMgaW4uKSIpOworCQkJCSAgICAgIHVuZGVjbGFyZWRfdmFyaWFibGVfbm90aWNlID0gMTsKKwkJCQkgICAgfQorCQkJCX0KKwkJCSAgICAgICQkID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgLyogUHJldmVudCByZXBlYXRlZCBlcnJvciBtZXNzYWdlcy4gICovCisJCQkgICAgICBJREVOVElGSUVSX0dMT0JBTF9WQUxVRSAoJDEpID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgSURFTlRJRklFUl9FUlJPUl9MT0NVUyAoJDEpID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlIGlmIChUUkVFX1RZUEUgKCQkKSA9PSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICAkJCA9IGVycm9yX21hcmtfbm9kZTsKKwkJICBlbHNlIGlmIChDX0RFQ0xfQU5USUNJUEFURUQgKCQkKSkKKwkJICAgIHsKKwkJICAgICAgLyogVGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGEgYnVpbGQtaW4gZnVuY3Rpb24gdXNlZCwKKwkJCSBpZiBpdCBoYXMgbm90IGJlZW4gZGVjbGFyZWQuICAqLworCQkgICAgICBDX0RFQ0xfQU5USUNJUEFURUQgKCQkKSA9IDA7CisJCSAgICAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKwkJCXl5Y2hhciA9IFlZTEVYOworCQkgICAgICBpZiAoeXljaGFyID09ICcoJykKKwkJCXsKKwkJCSAgLyogT21pdCB0aGUgaW1wbGljaXQgZGVjbGFyYXRpb24gd2UKKwkJCSAgICAgd291bGQgb3JkaW5hcmlseSBkbywgc28gd2UgZG9uJ3QgbG9zZQorCQkJICAgICB0aGUgYWN0dWFsIGJ1aWx0IGluIHR5cGUuCisJCQkgICAgIEJ1dCBwcmludCBhIGRpYWdub3N0aWMgZm9yIHRoZSBtaXNtYXRjaC4gICovCisJCQkgICAgaWYgKFRSRUVfQ09ERSAoJCQpICE9IEZVTkNUSU9OX0RFQ0wpCisJCQkgICAgICBlcnJvciAoImAlcycgaW1wbGljaXRseSBkZWNsYXJlZCBhcyBmdW5jdGlvbiIsCisJCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoJCQpKSk7CisJCQkgIGVsc2UgaWYgKChUWVBFX01PREUgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICgkJCkpKQorCQkJCSAgICAhPSBUWVBFX01PREUgKGludGVnZXJfdHlwZV9ub2RlKSkKKwkJCQkgICAmJiAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKCQkKSkKKwkJCQkgICAgICAgIT0gdm9pZF90eXBlX25vZGUpKQorCQkJICAgIHBlZHdhcm4gKCJ0eXBlIG1pc21hdGNoIGluIGltcGxpY2l0IGRlY2xhcmF0aW9uIGZvciBidWlsdC1pbiBmdW5jdGlvbiBgJXMnIiwKKwkJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICgkJCkpKTsKKwkJCSAgLyogSWYgaXQgcmVhbGx5IHJldHVybnMgdm9pZCwgY2hhbmdlIHRoYXQgdG8gaW50LiAgKi8KKwkJCSAgaWYgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICgkJCkpID09IHZvaWRfdHlwZV9ub2RlKQorCQkJICAgIFRSRUVfVFlQRSAoJCQpCisJCQkgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkJICAgICBUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFICgkJCkpKTsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJcGVkd2FybiAoImJ1aWx0LWluIGZ1bmN0aW9uIGAlcycgdXNlZCB3aXRob3V0IGRlY2xhcmF0aW9uIiwKKwkJCQkgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKCQkKSkpOworCisJCSAgICAgIC8qIERvIHdoYXQgd2Ugd291bGQgb3JkaW5hcmlseSBkbyB3aGVuIGEgZm4gaXMgdXNlZC4gICovCisJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICgkJCk7CisJCSAgICAgIFRSRUVfVVNFRCAoJCQpID0gMTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICgkJCk7CisJCSAgICAgIFRSRUVfVVNFRCAoJCQpID0gMTsKKwkJICAgIH0KKworCQkgIGlmIChUUkVFX0NPREUgKCQkKSA9PSBDT05TVF9ERUNMKQorCQkgICAgeworCQkgICAgICAkJCA9IERFQ0xfSU5JVElBTCAoJCQpOworCQkgICAgICAvKiBUaGlzIGlzIHRvIHByZXZlbnQgYW4gZW51bSB3aG9zZSB2YWx1ZSBpcyAwCisJCQkgZnJvbSBiZWluZyBjb25zaWRlcmVkIGEgbnVsbCBwb2ludGVyIGNvbnN0YW50LiAgKi8KKwkJICAgICAgJCQgPSBidWlsZDEgKE5PUF9FWFBSLCBUUkVFX1RZUEUgKCQkKSwgJCQpOworCQkgICAgICBUUkVFX0NPTlNUQU5UICgkJCkgPSAxOworCQkgICAgfQorCQl9CisJfCBDT05TVEFOVAorCXwgc3RyaW5nCisJCXsgJCQgPSBjb21iaW5lX3N0cmluZ3MgKCQxKTsgfQorCXwgJygnIGV4cHIgJyknCisJCXsgY2hhciBjbGFzcyA9IFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFICgkMikpOworCQkgIGlmIChjbGFzcyA9PSAnZScgfHwgY2xhc3MgPT0gJzEnCisJCSAgICAgIHx8IGNsYXNzID09ICcyJyB8fCBjbGFzcyA9PSAnPCcpCisJCSAgICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoJDIsIEVSUk9SX01BUkspOworCQkgICQkID0gJDI7IH0KKwl8ICcoJyBlcnJvciAnKScKKwkJeyAkJCA9IGVycm9yX21hcmtfbm9kZTsgfQorCXwgJygnCisJCXsgaWYgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9PSAwKQorCQkgICAgeworCQkgICAgICBlcnJvciAoImJyYWNlZC1ncm91cCB3aXRoaW4gZXhwcmVzc2lvbiBhbGxvd2VkIG9ubHkgaW5zaWRlIGEgZnVuY3Rpb24iKTsKKwkJICAgICAgWVlFUlJPUjsKKwkJICAgIH0KKwkJICAvKiBXZSBtdXN0IGZvcmNlIGEgQkxPQ0sgZm9yIHRoaXMgbGV2ZWwKKwkJICAgICBzbyB0aGF0LCBpZiBpdCBpcyBub3QgZXhwYW5kZWQgbGF0ZXIsCisJCSAgICAgdGhlcmUgaXMgYSB3YXkgdG8gdHVybiBvZmYgdGhlIGVudGlyZSBzdWJ0cmVlIG9mIGJsb2NrcworCQkgICAgIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiBpdC4gICovCisJCSAga2VlcF9uZXh0X2xldmVsICgpOworCQkgIHB1c2hfaXRlcmF0b3Jfc3RhY2sgKCk7CisJCSAgcHVzaF9sYWJlbF9sZXZlbCAoKTsKKwkJICAkPHR0eXBlPiQgPSBleHBhbmRfc3RhcnRfc3RtdF9leHByICgpOyB9CisJICBjb21wc3RtdCAnKScKKwkJeyB0cmVlIHJ0bF9leHA7CisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGJyYWNlZC1ncm91cHMgd2l0aGluIGV4cHJlc3Npb25zIik7CisJCSAgcG9wX2l0ZXJhdG9yX3N0YWNrICgpOworCQkgIHBvcF9sYWJlbF9sZXZlbCAoKTsKKwkJICBydGxfZXhwID0gZXhwYW5kX2VuZF9zdG10X2V4cHIgKCQ8dHR5cGU+Mik7CisJCSAgLyogVGhlIHN0YXRlbWVudHMgaGF2ZSBzaWRlIGVmZmVjdHMsIHNvIHRoZSBncm91cCBkb2VzLiAgKi8KKwkJICBUUkVFX1NJREVfRUZGRUNUUyAocnRsX2V4cCkgPSAxOworCisJCSAgaWYgKFRSRUVfQ09ERSAoJDMpID09IEJMT0NLKQorCQkgICAgeworCQkgICAgICAvKiBNYWtlIGEgQklORF9FWFBSIGZvciB0aGUgQkxPQ0sgYWxyZWFkeSBtYWRlLiAgKi8KKwkJICAgICAgJCQgPSBidWlsZCAoQklORF9FWFBSLCBUUkVFX1RZUEUgKHJ0bF9leHApLAorCQkJCSAgTlVMTF9UUkVFLCBydGxfZXhwLCAkMyk7CisJCSAgICAgIC8qIFJlbW92ZSB0aGUgYmxvY2sgZnJvbSB0aGUgdHJlZSBhdCB0aGlzIHBvaW50LgorCQkJIEl0IGdldHMgcHV0IGJhY2sgYXQgdGhlIHByb3BlciBwbGFjZQorCQkJIHdoZW4gdGhlIEJJTkRfRVhQUiBpcyBleHBhbmRlZC4gICovCisJCSAgICAgIGRlbGV0ZV9ibG9jayAoJDMpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgICQkID0gJDM7CisJCX0KKwl8IHByaW1hcnkgJygnIGV4cHJsaXN0ICcpJyAgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfZnVuY3Rpb25fY2FsbCAoJDEsICQzKTsgfQorCXwgcHJpbWFyeSAnWycgZXhwciAnXScgICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX2FycmF5X3JlZiAoJDEsICQzKTsgfQorCXwgcHJpbWFyeSAnLicgaWRlbnRpZmllcgorCQl7CisJCSAgICAkJCA9IGJ1aWxkX2NvbXBvbmVudF9yZWYgKCQxLCAkMyk7CisJCX0KKwl8IHByaW1hcnkgUE9JTlRTQVQgaWRlbnRpZmllcgorCQl7CisgICAgICAgICAgICAgICAgICB0cmVlIGV4cHIgPSBidWlsZF9pbmRpcmVjdF9yZWYgKCQxLCAiLT4iKTsKKworICAgICAgICAgICAgICAgICAgICAkJCA9IGJ1aWxkX2NvbXBvbmVudF9yZWYgKGV4cHIsICQzKTsKKwkJfQorCXwgcHJpbWFyeSBQTFVTUExVUworCQl7ICQkID0gYnVpbGRfdW5hcnlfb3AgKFBPU1RJTkNSRU1FTlRfRVhQUiwgJDEsIDApOyB9CisJfCBwcmltYXJ5IE1JTlVTTUlOVVMKKwkJeyAkJCA9IGJ1aWxkX3VuYXJ5X29wIChQT1NUREVDUkVNRU5UX0VYUFIsICQxLCAwKTsgfQorCTsKKworLyogUHJvZHVjZXMgYSBTVFJJTkdfQ1NUIHdpdGggcGVyaGFwcyBtb3JlIFNUUklOR19DU1RzIGNoYWluZWQgb250byBpdC4gICovCitzdHJpbmc6CisJICBTVFJJTkcKKwl8IHN0cmluZyBTVFJJTkcKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMik7IH0KKwk7CisKKworb2xkX3N0eWxlX3Bhcm1fZGVjbHM6CisJLyogZW1wdHkgKi8KKwl8IGRhdGFkZWNscworCXwgZGF0YWRlY2xzIEVMTElQU0lTCisJCS8qIC4uLiBpcyB1c2VkIGhlcmUgdG8gaW5kaWNhdGUgYSB2YXJhcmdzIGZ1bmN0aW9uLiAgKi8KKwkJeyBjX21hcmtfdmFyYXJncyAoKTsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGRvZXMgbm90IHBlcm1pdCB1c2Ugb2YgYHZhcmFyZ3MuaCciKTsgfQorCTsKKworLyogVGhlIGZvbGxvd2luZyBhcmUgYW5hbG9nb3VzIHRvIGxpbmVub19kZWNsLCBkZWNscyBhbmQgZGVjbAorICAgZXhjZXB0IHRoYXQgdGhleSBkbyBub3QgYWxsb3cgbmVzdGVkIGZ1bmN0aW9ucy4KKyAgIFRoZXkgYXJlIHVzZWQgZm9yIG9sZC1zdHlsZSBwYXJtIGRlY2xzLiAgKi8KK2xpbmVub19kYXRhZGVjbDoKKwkgIHNhdmVfZmlsZW5hbWUgc2F2ZV9saW5lbm8gZGF0YWRlY2wKKwkJeyB9CisJOworCitkYXRhZGVjbHM6CisJbGluZW5vX2RhdGFkZWNsCisJfCBlcnJzdG10CisJfCBkYXRhZGVjbHMgbGluZW5vX2RhdGFkZWNsCisJfCBsaW5lbm9fZGF0YWRlY2wgZXJyc3RtdAorCTsKKworLyogV2UgZG9uJ3QgYWxsb3cgcHJlZml4IGF0dHJpYnV0ZXMgaGVyZSBiZWNhdXNlIHRoZXkgY2F1c2UgcmVkdWNlL3JlZHVjZQorICAgY29uZmxpY3RzOiB3ZSBjYW4ndCBrbm93IHdoZXRoZXIgd2UncmUgcGFyc2luZyBhIGZ1bmN0aW9uIGRlY2wgd2l0aAorICAgYXR0cmlidXRlIHN1ZmZpeCwgb3IgZnVuY3Rpb24gZGVmbiB3aXRoIGF0dHJpYnV0ZSBwcmVmaXggb24gZmlyc3Qgb2xkCisgICBzdHlsZSBwYXJtLiAgKi8KK2RhdGFkZWNsOgorCXR5cGVkX2RlY2xzcGVjc19ub19wcmVmaXhfYXR0ciBzZXRzcGVjcyBpbml0ZGVjbHMgJzsnCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzX25vX3ByZWZpeF9hdHRyIHNldHNwZWNzIG5vdHlwZV9pbml0ZGVjbHMgJzsnCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CQorCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCB0eXBlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIgJzsnCisJCXsgc2hhZG93X3RhZ193YXJuZWQgKCQxLCAxKTsKKwkJICBwZWR3YXJuICgiZW1wdHkgZGVjbGFyYXRpb24iKTsgfQorCXwgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIgJzsnCisJCXsgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IH0KKwk7CisKKy8qIFRoaXMgY29tYmluYXRpb24gd2hpY2ggc2F2ZXMgYSBsaW5lbm8gYmVmb3JlIGEgZGVjbAorICAgaXMgdGhlIG5vcm1hbCB0aGluZyB0byB1c2UsIHJhdGhlciB0aGFuIGRlY2wgaXRzZWxmLgorICAgVGhpcyBpcyB0byBhdm9pZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIGluIGNvbnRleHRzCisgICB3aGVyZSBzdGF0ZW1lbnQgbGFiZWxzIGFyZSBhbGxvd2VkLiAgKi8KK2xpbmVub19kZWNsOgorCSAgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBkZWNsCisJCXsgfQorCTsKKworZGVjbHM6CisJbGluZW5vX2RlY2wKKwl8IGVycnN0bXQKKwl8IGRlY2xzIGxpbmVub19kZWNsCisJfCBsaW5lbm9fZGVjbCBlcnJzdG10CisJOworCisvKiByZWNvcmRzIHRoZSB0eXBlIGFuZCBzdG9yYWdlIGNsYXNzIHNwZWNzIHRvIHVzZSBmb3IgcHJvY2Vzc2luZworICAgdGhlIGRlY2xhcmF0b3JzIHRoYXQgZm9sbG93LgorICAgTWFpbnRhaW5zIGEgc3RhY2sgb2Ygb3V0ZXItbGV2ZWwgdmFsdWVzIG9mIGN1cnJlbnRfZGVjbHNwZWNzLAorICAgZm9yIHRoZSBzYWtlIG9mIHBhcm0gZGVjbGFyYXRpb25zIG5lc3RlZCBpbiBmdW5jdGlvbiBkZWNsYXJhdG9ycy4gICovCitzZXRzcGVjczogLyogZW1wdHkgKi8KKwkJeyAkJCA9IHN1c3BlbmRfbW9tZW50YXJ5ICgpOworCQkgIHBlbmRpbmdfeHJlZl9lcnJvciAoKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IHRyZWVfY29ucyAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCSAgICAgIGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkgICAgICBkZWNsc3BlY19zdGFjayk7CisJCSAgc3BsaXRfc3BlY3NfYXR0cnMgKCQ8dHR5cGU+MCwKKwkJCQkgICAgICZjdXJyZW50X2RlY2xzcGVjcywgJnByZWZpeF9hdHRyaWJ1dGVzKTsgfQorCTsKKworLyogPz8/IFl1Y2suICBTZWUgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yLiAgKi8KK3NldGF0dHJzOiAvKiBlbXB0eSAqLworCQl7IHByZWZpeF9hdHRyaWJ1dGVzID0gY2hhaW5vbiAocHJlZml4X2F0dHJpYnV0ZXMsICQ8dHR5cGU+MCk7IH0KKwk7CisKK2RlY2w6CisJdHlwZWRfZGVjbHNwZWNzIHNldHNwZWNzIGluaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgZGVjbG1vZHMgc2V0c3BlY3Mgbm90eXBlX2luaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgdHlwZWRfZGVjbHNwZWNzIHNldHNwZWNzIG5lc3RlZF9mdW5jdGlvbgorCQl7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCBkZWNsbW9kcyBzZXRzcGVjcyBub3R5cGVfbmVzdGVkX2Z1bmN0aW9uCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjcyAnOycKKwkJeyBzaGFkb3dfdGFnICgkMSk7IH0KKwl8IGRlY2xtb2RzICc7JworCQl7IHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyB9CisJfCBleHRlbnNpb24gZGVjbAorCQl7IHBlZGFudGljID0gJDxpdHlwZT4xOyB9CisJOworCisvKiBEZWNsc3BlY3Mgd2hpY2ggY29udGFpbiBhdCBsZWFzdCBvbmUgdHlwZSBzcGVjaWZpZXIgb3IgdHlwZWRlZiBuYW1lLgorICAgKEp1c3QgYGNvbnN0JyBvciBgdm9sYXRpbGUnIGlzIG5vdCBlbm91Z2guKQorICAgQSB0eXBlZGVmJ2QgbmFtZSBmb2xsb3dpbmcgdGhlc2UgaXMgdGFrZW4gYXMgYSBuYW1lIHRvIGJlIGRlY2xhcmVkLgorICAgRGVjbHNwZWNzIGhhdmUgYSBub24tTlVMTCBUUkVFX1ZBTFVFLCBhdHRyaWJ1dGVzIGRvIG5vdC4gICovCisKK3R5cGVkX2RlY2xzcGVjczoKKwkgIHR5cGVzcGVjIHJlc2VydmVkX2RlY2xzcGVjcworCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQxLCAkMik7IH0KKwl8IGRlY2xtb2RzIHR5cGVzcGVjIHJlc2VydmVkX2RlY2xzcGVjcworCQl7ICQkID0gY2hhaW5vbiAoJDMsIHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpKTsgfQorCTsKKworcmVzZXJ2ZWRfZGVjbHNwZWNzOiAgLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgcmVzZXJ2ZWRfZGVjbHNwZWNzIHR5cGVzcGVjcXVhbF9yZXNlcnZlZAorCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSk7IH0KKwl8IHJlc2VydmVkX2RlY2xzcGVjcyBTQ1NQRUMKKwkJeyBpZiAoZXh0cmFfd2FybmluZ3MpCisJCSAgICB3YXJuaW5nICgiYCVzJyBpcyBub3QgYXQgYmVnaW5uaW5nIG9mIGRlY2xhcmF0aW9uIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICgkMikpOworCQkgICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSk7IH0KKwl8IHJlc2VydmVkX2RlY2xzcGVjcyBhdHRyaWJ1dGVzCisJCXsgJCQgPSB0cmVlX2NvbnMgKCQyLCBOVUxMX1RSRUUsICQxKTsgfQorCTsKKwordHlwZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyOgorCSAgdHlwZXNwZWMgcmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDEsICQyKTsgfQorCXwgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIgdHlwZXNwZWMgcmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyCisJCXsgJCQgPSBjaGFpbm9uICgkMywgdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSkpOyB9CisJOworCityZXNlcnZlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHI6CisJICAvKiBlbXB0eSAqLworCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJfCByZXNlcnZlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIgdHlwZXNwZWNxdWFsX3Jlc2VydmVkCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKTsgfQorCXwgcmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyIFNDU1BFQworCQl7IGlmIChleHRyYV93YXJuaW5ncykKKwkJICAgIHdhcm5pbmcgKCJgJXMnIGlzIG5vdCBhdCBiZWdpbm5pbmcgb2YgZGVjbGFyYXRpb24iLAorCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKCQyKSk7CisJCSAgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKTsgfQorCTsKKworLyogTGlzdCBvZiBqdXN0IHN0b3JhZ2UgY2xhc3NlcywgdHlwZSBtb2RpZmllcnMsIGFuZCBwcmVmaXggYXR0cmlidXRlcy4KKyAgIEEgZGVjbGFyYXRpb24gY2FuIHN0YXJ0IHdpdGgganVzdCB0aGlzLCBidXQgdGhlbiBpdCBjYW5ub3QgYmUgdXNlZAorICAgdG8gcmVkZWNsYXJlIGEgdHlwZWRlZi1uYW1lLgorICAgRGVjbHNwZWNzIGhhdmUgYSBub24tTlVMTCBUUkVFX1ZBTFVFLCBhdHRyaWJ1dGVzIGRvIG5vdC4gICovCisKK2RlY2xtb2RzOgorCSAgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIKKwkJeyAkJCA9ICQxOyB9CisJfCBhdHRyaWJ1dGVzCisJCXsgJCQgPSB0cmVlX2NvbnMgKCQxLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IH0KKwl8IGRlY2xtb2RzIGRlY2xtb2RzX25vX3ByZWZpeF9hdHRyCisJCXsgJCQgPSBjaGFpbm9uICgkMiwgJDEpOyB9CisJfCBkZWNsbW9kcyBhdHRyaWJ1dGVzCisJCXsgJCQgPSB0cmVlX2NvbnMgKCQyLCBOVUxMX1RSRUUsICQxKTsgfQorCTsKKworZGVjbG1vZHNfbm9fcHJlZml4X2F0dHI6CisJICBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMSwgTlVMTF9UUkVFKTsKKwkJICBUUkVFX1NUQVRJQyAoJCQpID0gMTsgfQorCXwgU0NTUEVDCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDEsIE5VTExfVFJFRSk7IH0KKwl8IGRlY2xtb2RzX25vX3ByZWZpeF9hdHRyIFRZUEVfUVVBTAorCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSk7CisJCSAgVFJFRV9TVEFUSUMgKCQkKSA9IDE7IH0KKwl8IGRlY2xtb2RzX25vX3ByZWZpeF9hdHRyIFNDU1BFQworCQl7IGlmIChleHRyYV93YXJuaW5ncyAmJiBUUkVFX1NUQVRJQyAoJDEpKQorCQkgICAgd2FybmluZyAoImAlcycgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiIsCisJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoJDIpKTsKKwkJICAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOworCQkgIFRSRUVfU1RBVElDICgkJCkgPSBUUkVFX1NUQVRJQyAoJDEpOyB9CisJOworCisKKy8qIFVzZWQgaW5zdGVhZCBvZiBkZWNsc3BlY3Mgd2hlcmUgc3RvcmFnZSBjbGFzc2VzIGFyZSBub3QgYWxsb3dlZAorICAgKHRoYXQgaXMsIGZvciB0eXBlbmFtZXMgYW5kIHN0cnVjdHVyZSBjb21wb25lbnRzKS4KKyAgIERvbid0IGFjY2VwdCBhIHR5cGVkZWYtbmFtZSBpZiBhbnl0aGluZyBidXQgYSBtb2RpZmllciBwcmVjZWRlcyBpdC4gICovCisKK3R5cGVkX3R5cGVzcGVjczoKKwkgIHR5cGVzcGVjIHJlc2VydmVkX3R5cGVzcGVjcXVhbHMKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMSwgJDIpOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzIHR5cGVzcGVjIHJlc2VydmVkX3R5cGVzcGVjcXVhbHMKKwkJeyAkJCA9IGNoYWlub24gKCQzLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKSk7IH0KKwk7CisKK3Jlc2VydmVkX3R5cGVzcGVjcXVhbHM6ICAvKiBlbXB0eSAqLworCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJfCByZXNlcnZlZF90eXBlc3BlY3F1YWxzIHR5cGVzcGVjcXVhbF9yZXNlcnZlZAorCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSk7IH0KKwk7CisKKy8qIEEgdHlwZXNwZWMgKGJ1dCBub3QgYSB0eXBlIHF1YWxpZmllcikuCisgICBPbmNlIHdlIGhhdmUgc2VlbiBvbmUgb2YgdGhlc2UgaW4gYSBkZWNsYXJhdGlvbiwKKyAgIGlmIGEgdHlwZWRlZiBuYW1lIGFwcGVhcnMgdGhlbiBpdCBpcyBiZWluZyByZWRlY2xhcmVkLiAgKi8KKwordHlwZXNwZWM6IFRZUEVTUEVDCisJfCBzdHJ1Y3RzcAorCXwgVFlQRU5BTUUKKwkJeyAvKiBGb3IgYSB0eXBlZGVmIG5hbWUsIHJlY29yZCB0aGUgbWVhbmluZywgbm90IHRoZSBuYW1lLgorCQkgICAgIEluIGNhc2Ugb2YgYGZvbyBmb28sIGJhcjsnLiAgKi8KKwkJICAkJCA9IGxvb2t1cF9uYW1lICgkMSk7IH0KKwl8IFRZUEVPRiAnKCcgZXhwciAnKScKKwkJeyAkJCA9IFRSRUVfVFlQRSAoJDMpOyB9CisJfCBUWVBFT0YgJygnIHR5cGVuYW1lICcpJworCQl7ICQkID0gZ3Jva3R5cGVuYW1lICgkMyk7IH0KKwk7CisKKy8qIEEgdHlwZXNwZWMgdGhhdCBpcyBhIHJlc2VydmVkIHdvcmQsIG9yIGEgdHlwZSBxdWFsaWZpZXIuICAqLworCit0eXBlc3BlY3F1YWxfcmVzZXJ2ZWQ6IFRZUEVTUEVDCisJfCBUWVBFX1FVQUwKKwl8IHN0cnVjdHNwCisJOworCitpbml0ZGVjbHM6CisJaW5pdGRjbAorCXwgaW5pdGRlY2xzICcsJyBpbml0ZGNsCisJOworCitub3R5cGVfaW5pdGRlY2xzOgorCW5vdHlwZV9pbml0ZGNsCisJfCBub3R5cGVfaW5pdGRlY2xzICcsJyBpbml0ZGNsCisJOworCittYXliZWFzbToKKwkgIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IEFTTV9LRVlXT1JEICcoJyBzdHJpbmcgJyknCisJCXsgaWYgKFRSRUVfQ0hBSU4gKCQzKSkgJDMgPSBjb21iaW5lX3N0cmluZ3MgKCQzKTsKKwkJICAkJCA9ICQzOworCQl9CisJOworCitpbml0ZGNsOgorCSAgZGVjbGFyYXRvciBtYXliZWFzbSBtYXliZV9hdHRyaWJ1dGUgJz0nCisJCXsgJDx0dHlwZT4kID0gc3RhcnRfZGVjbCAoJDEsIGN1cnJlbnRfZGVjbHNwZWNzLCAxLAorCQkJCQkgICQzLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgc3RhcnRfaW5pdCAoJDx0dHlwZT4kLCAkMiwgZ2xvYmFsX2JpbmRpbmdzX3AgKCkpOyB9CisJICBpbml0CisvKiBOb3RlIGhvdyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlIGlzIGluIGVmZmVjdCB3aGlsZSBpdHMgaW5pdCBpcyBwYXJzZWQhICovCisJCXsgZmluaXNoX2luaXQgKCk7CisJCSAgZmluaXNoX2RlY2wgKCQ8dHR5cGU+NSwgJDYsICQyKTsgfQorCXwgZGVjbGFyYXRvciBtYXliZWFzbSBtYXliZV9hdHRyaWJ1dGUKKwkJeyB0cmVlIGQgPSBzdGFydF9kZWNsICgkMSwgY3VycmVudF9kZWNsc3BlY3MsIDAsCisJCQkJICAgICAgICQzLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgJDIpOyAKKyAgICAgICAgICAgICAgICB9CisJOworCitub3R5cGVfaW5pdGRjbDoKKwkgIG5vdHlwZV9kZWNsYXJhdG9yIG1heWJlYXNtIG1heWJlX2F0dHJpYnV0ZSAnPScKKwkJeyAkPHR0eXBlPiQgPSBzdGFydF9kZWNsICgkMSwgY3VycmVudF9kZWNsc3BlY3MsIDEsCisJCQkJCSAgJDMsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBzdGFydF9pbml0ICgkPHR0eXBlPiQsICQyLCBnbG9iYWxfYmluZGluZ3NfcCAoKSk7IH0KKwkgIGluaXQKKy8qIE5vdGUgaG93IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUgaXMgaW4gZWZmZWN0IHdoaWxlIGl0cyBpbml0IGlzIHBhcnNlZCEgKi8KKwkJeyBmaW5pc2hfaW5pdCAoKTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKCQ8dHR5cGU+NSwgJDMsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBmaW5pc2hfZGVjbCAoJDx0dHlwZT41LCAkNiwgJDIpOyB9CisJfCBub3R5cGVfZGVjbGFyYXRvciBtYXliZWFzbSBtYXliZV9hdHRyaWJ1dGUKKwkJeyB0cmVlIGQgPSBzdGFydF9kZWNsICgkMSwgY3VycmVudF9kZWNsc3BlY3MsIDAsCisJCQkJICAgICAgICQzLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgJDIpOyB9CisJOworLyogdGhlICogcnVsZXMgYXJlIGR1bW1pZXMgdG8gYWNjZXB0IHRoZSBBcG9sbG8gZXh0ZW5kZWQgc3ludGF4CisgICBzbyB0aGF0IHRoZSBoZWFkZXIgZmlsZXMgY29tcGlsZS4gKi8KK21heWJlX2F0dHJpYnV0ZToKKyAgICAgIC8qIGVtcHR5ICovCisgIAkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgYXR0cmlidXRlcworCQl7ICQkID0gJDE7IH0KKwk7CisgCithdHRyaWJ1dGVzOgorICAgICAgYXR0cmlidXRlCisJCXsgJCQgPSAkMTsgfQorCXwgYXR0cmlidXRlcyBhdHRyaWJ1dGUKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMik7IH0KKwk7CisKK2F0dHJpYnV0ZToKKyAgICAgIEFUVFJJQlVURSAnKCcgJygnIGF0dHJpYnV0ZV9saXN0ICcpJyAnKScKKwkJeyAkJCA9ICQ0OyB9CisJOworCithdHRyaWJ1dGVfbGlzdDoKKyAgICAgIGF0dHJpYgorCQl7ICQkID0gJDE7IH0KKwl8IGF0dHJpYnV0ZV9saXN0ICcsJyBhdHRyaWIKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMyk7IH0KKwk7CisgCithdHRyaWI6CisgICAgLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgYW55X3dvcmQKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoJDEsIE5VTExfVFJFRSk7IH0KKwl8IGFueV93b3JkICcoJyBJREVOVElGSUVSICcpJworCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsICQzKSk7IH0KKwl8IGFueV93b3JkICcoJyBJREVOVElGSUVSICcsJyBub25udWxsX2V4cHJsaXN0ICcpJworCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgdHJlZV9jb25zIChOVUxMX1RSRUUsICQzLCAkNSkpOyB9CisJfCBhbnlfd29yZCAnKCcgZXhwcmxpc3QgJyknCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKCQxLCAkMyk7IH0KKwk7CisKKy8qIFRoaXMgc3RpbGwgbGVhdmVzIG91dCBtb3N0IHJlc2VydmVkIGtleXdvcmRzLAorICAgc2hvdWxkbid0IHdlIGluY2x1ZGUgdGhlbT8gICovCisKK2FueV93b3JkOgorCSAgaWRlbnRpZmllcgorCXwgU0NTUEVDCisJfCBUWVBFU1BFQworCXwgVFlQRV9RVUFMCisJOworDAorLyogSW5pdGlhbGl6ZXJzLiAgYGluaXQnIGlzIHRoZSBlbnRyeSBwb2ludC4gICovCisKK2luaXQ6CisJZXhwcl9ub19jb21tYXMKKwl8ICd7JworCQl7IHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0IChOVUxMX1RSRUUpOworCQkgIC8qIE5vdGUgdGhhdCB0aGUgY2FsbCB0byBjbGVhcl9tb21lbnRhcnkKKwkJICAgICBpcyBpbiBwcm9jZXNzX2luaXRfZWxlbWVudC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7IH0KKwkgIGluaXRsaXN0X21heWJlX2NvbW1hICd9JworCQl7ICQkID0gcG9wX2luaXRfbGV2ZWwgKDApOworCQkgIGlmICgkJCA9PSBlcnJvcl9tYXJrX25vZGUKKwkJICAgICAgJiYgISAoeXljaGFyID09IFNUUklORyB8fCB5eWNoYXIgPT0gQ09OU1RBTlQpKQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsgfQorCisJfCBlcnJvcgorCQl7ICQkID0gZXJyb3JfbWFya19ub2RlOyB9CisJOworCisvKiBgaW5pdGxpc3RfbWF5YmVfY29tbWEnIGlzIHRoZSBndXRzIG9mIGFuIGluaXRpYWxpemVyIGluIGJyYWNlcy4gICovCitpbml0bGlzdF9tYXliZV9jb21tYToKKwkgIC8qIGVtcHR5ICovCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGVtcHR5IGluaXRpYWxpemVyIGJyYWNlcyIpOyB9CisJfCBpbml0bGlzdDEgbWF5YmVjb21tYQorCTsKKworaW5pdGxpc3QxOgorCSAgaW5pdGVsdAorCXwgaW5pdGxpc3QxICcsJyBpbml0ZWx0CisJOworCisvKiBgaW5pdGVsdCcgaXMgYSBzaW5nbGUgZWxlbWVudCBvZiBhbiBpbml0aWFsaXplci4KKyAgIEl0IG1heSB1c2UgYnJhY2VzLiAgKi8KK2luaXRlbHQ6CisJZXhwcl9ub19jb21tYXMKKwkJeyBwcm9jZXNzX2luaXRfZWxlbWVudCAoJDEpOyB9CisJfCAneycgCisJCXsgcHVzaF9pbml0X2xldmVsICgwKTsgfQorCSAgaW5pdGxpc3RfbWF5YmVfY29tbWEgJ30nCisJCXsgcHJvY2Vzc19pbml0X2VsZW1lbnQgKHBvcF9pbml0X2xldmVsICgwKSk7IH0KKwl8IGVycm9yCisJLyogVGhlc2UgYXJlIGZvciBsYWJlbGVkIGVsZW1lbnRzLiAgVGhlIHN5bnRheCBmb3IgYW4gYXJyYXkgZWxlbWVudAorCSAgIGluaXRpYWxpemVyIGNvbmZsaWN0cyB3aXRoIHRoZSBzeW50YXggZm9yIGFuIE9iamVjdGl2ZS1DIG1lc3NhZ2UsCisJICAgc28gZG9uJ3QgaW5jbHVkZSB0aGVzZSBwcm9kdWN0aW9ucyBpbiB0aGUgT2JqZWN0aXZlLUMgZ3JhbW1hci4gICovCisJfCAnWycgZXhwcl9ub19jb21tYXMgRUxMSVBTSVMgZXhwcl9ub19jb21tYXMgJ10nICc9JworCQl7IHNldF9pbml0X2luZGV4ICgkMiwgJDQpOyB9CisJICBpbml0ZWx0CisJfCAnWycgZXhwcl9ub19jb21tYXMgJ10nICc9JworCQl7IHNldF9pbml0X2luZGV4ICgkMiwgTlVMTF9UUkVFKTsgfQorCSAgaW5pdGVsdAorCXwgJ1snIGV4cHJfbm9fY29tbWFzICddJworCQl7IHNldF9pbml0X2luZGV4ICgkMiwgTlVMTF9UUkVFKTsgfQorCSAgaW5pdGVsdAorCXwgaWRlbnRpZmllciAnOicKKwkJeyBzZXRfaW5pdF9sYWJlbCAoJDEpOyB9CisJICBpbml0ZWx0CisJfCAnLicgaWRlbnRpZmllciAnPScKKwkJeyBzZXRfaW5pdF9sYWJlbCAoJDIpOyB9CisJICBpbml0ZWx0CisJOworDAorbmVzdGVkX2Z1bmN0aW9uOgorCSAgZGVjbGFyYXRvcgorCQl7IHB1c2hfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgIGlmICghIHN0YXJ0X2Z1bmN0aW9uIChjdXJyZW50X2RlY2xzcGVjcywgJDEsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDEpKQorCQkgICAgeworCQkgICAgICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgICAgICBZWUVSUk9SMTsKKwkJICAgIH0KKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyB9CisJICAgb2xkX3N0eWxlX3Bhcm1fZGVjbHMKKwkJeyBzdG9yZV9wYXJtX2RlY2xzICgpOyB9CisvKiBUaGlzIHVzZWQgdG8gdXNlIGNvbXBzdG10X29yX2Vycm9yLgorICAgVGhhdCBjYXVzZWQgYSBidWcgd2l0aCBpbnB1dCBgZihnKSBpbnQgZyB7fScsCisgICB3aGVyZSB0aGUgdXNlIG9mIFlZRVJST1IxIGFib3ZlIGNhdXNlZCBhbiBlcnJvcgorICAgd2hpY2ggdGhlbiB3YXMgaGFuZGxlZCBieSBjb21wc3RtdF9vcl9lcnJvci4KKyAgIFRoZXJlIGZvbGxvd2VkIGEgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIHRoYXQgc2FtZSBydWxlLAorICAgd2hpY2ggY2FsbGVkIFlZRVJST1IxIGFnYWluLCBhbmQgc28gb24uICAqLworCSAgY29tcHN0bXQKKwkJeyBmaW5pc2hfZnVuY3Rpb24gKDEpOworCQkgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7IH0KKwk7CisKK25vdHlwZV9uZXN0ZWRfZnVuY3Rpb246CisJICBub3R5cGVfZGVjbGFyYXRvcgorCQl7IHB1c2hfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgIGlmICghIHN0YXJ0X2Z1bmN0aW9uIChjdXJyZW50X2RlY2xzcGVjcywgJDEsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDEpKQorCQkgICAgeworCQkgICAgICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOworCQkgICAgICBZWUVSUk9SMTsKKwkJICAgIH0KKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyB9CisJICBvbGRfc3R5bGVfcGFybV9kZWNscworCQl7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IH0KKy8qIFRoaXMgdXNlZCB0byB1c2UgY29tcHN0bXRfb3JfZXJyb3IuCisgICBUaGF0IGNhdXNlZCBhIGJ1ZyB3aXRoIGlucHV0IGBmKGcpIGludCBnIHt9JywKKyAgIHdoZXJlIHRoZSB1c2Ugb2YgWVlFUlJPUjEgYWJvdmUgY2F1c2VkIGFuIGVycm9yCisgICB3aGljaCB0aGVuIHdhcyBoYW5kbGVkIGJ5IGNvbXBzdG10X29yX2Vycm9yLgorICAgVGhlcmUgZm9sbG93ZWQgYSByZXBlYXRlZCBleGVjdXRpb24gb2YgdGhhdCBzYW1lIHJ1bGUsCisgICB3aGljaCBjYWxsZWQgWVlFUlJPUjEgYWdhaW4sIGFuZCBzbyBvbi4gICovCisJICBjb21wc3RtdAorCQl7IGZpbmlzaF9mdW5jdGlvbiAoMSk7CisJCSAgcG9wX2NfZnVuY3Rpb25fY29udGV4dCAoKTsgfQorCTsKKworLyogQW55IGtpbmQgb2YgZGVjbGFyYXRvciAodGh1cywgYWxsIGRlY2xhcmF0b3JzIGFsbG93ZWQKKyAgIGFmdGVyIGFuIGV4cGxpY2l0IHR5cGVzcGVjKS4gICovCisKK2RlY2xhcmF0b3I6CisJICBhZnRlcl90eXBlX2RlY2xhcmF0b3IKKwl8IG5vdHlwZV9kZWNsYXJhdG9yCisJOworCisvKiBBIGRlY2xhcmF0b3IgdGhhdCBpcyBhbGxvd2VkIG9ubHkgYWZ0ZXIgYW4gZXhwbGljaXQgdHlwZXNwZWMuICAqLworCithZnRlcl90eXBlX2RlY2xhcmF0b3I6CisJICAnKCcgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yICcpJworCQl7ICQkID0gJDI7IH0KKwl8IGFmdGVyX3R5cGVfZGVjbGFyYXRvciAnKCcgcGFybWxpc3Rfb3JfaWRlbnRpZmllcnMgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsICQzLCBOVUxMX1RSRUUpOyB9CisvKgl8IGFmdGVyX3R5cGVfZGVjbGFyYXRvciAnKCcgZXJyb3IgJyknICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChDQUxMX0VYUFIsICQxLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgcG9wbGV2ZWwgKDAsIDAsIDApOyB9ICAqLworCXwgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yICdbJyBleHByICddJyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQVJSQVlfUkVGLCAkMSwgJDMpOyB9CisJfCBhZnRlcl90eXBlX2RlY2xhcmF0b3IgJ1snICddJyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQVJSQVlfUkVGLCAkMSwgTlVMTF9UUkVFKTsgfQorCXwgJyonIHR5cGVfcXVhbHMgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yICAlcHJlYyBVTkFSWQorCQl7ICQkID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKCQyLCAkMyk7IH0KKwkvKiA/Pz8gWXVjay4gIHNldGF0dHJzIGlzIGEgcXVpY2sgaGFjay4gIFdlIGNhbid0IHVzZQorCSAgIHByZWZpeF9hdHRyaWJ1dGVzIGJlY2F1c2UgJDEgb25seSBhcHBsaWVzIHRvIHRoaXMKKwkgICBkZWNsYXJhdG9yLiAgV2UgYXNzdW1lIHNldHNwZWNzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4KKwkgICBzZXRhdHRycyBhbHNvIGF2b2lkcyA1IHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIChvdGhlcndpc2UgbXVsdGlwbGUKKwkgICBhdHRyaWJ1dGVzIGNvdWxkIGJlIHJlY29nbml6ZWQgaGVyZSBvciBpbiBgYXR0cmlidXRlcycpLiAgKi8KKwl8IGF0dHJpYnV0ZXMgc2V0YXR0cnMgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yCisJCXsgJCQgPSAkMzsgfQorCXwgVFlQRU5BTUUKKwk7CisKKy8qIEtpbmRzIG9mIGRlY2xhcmF0b3IgdGhhdCBjYW4gYXBwZWFyIGluIGEgcGFyYW1ldGVyIGxpc3QKKyAgIGluIGFkZGl0aW9uIHRvIG5vdHlwZV9kZWNsYXJhdG9yLiAgVGhpcyBpcyBsaWtlIGFmdGVyX3R5cGVfZGVjbGFyYXRvcgorICAgYnV0IGRvZXMgbm90IGFsbG93IGEgdHlwZWRlZiBuYW1lIGluIHBhcmVudGhlc2VzIGFzIGFuIGlkZW50aWZpZXIKKyAgIChiZWNhdXNlIGl0IHdvdWxkIGNvbmZsaWN0IHdpdGggYSBmdW5jdGlvbiB3aXRoIHRoYXQgdHlwZWRlZiBhcyBhcmcpLiAgKi8KKworcGFybV9kZWNsYXJhdG9yOgorCSAgcGFybV9kZWNsYXJhdG9yICcoJyBwYXJtbGlzdF9vcl9pZGVudGlmaWVycyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCAkMSwgJDMsIE5VTExfVFJFRSk7IH0KKy8qCXwgcGFybV9kZWNsYXJhdG9yICcoJyBlcnJvciAnKScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7IH0gICovCisJfCBwYXJtX2RlY2xhcmF0b3IgJ1snIGV4cHIgJ10nICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChBUlJBWV9SRUYsICQxLCAkMyk7IH0KKwl8IHBhcm1fZGVjbGFyYXRvciAnWycgJ10nICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChBUlJBWV9SRUYsICQxLCBOVUxMX1RSRUUpOyB9CisJfCAnKicgdHlwZV9xdWFscyBwYXJtX2RlY2xhcmF0b3IgICVwcmVjIFVOQVJZCisJCXsgJCQgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoJDIsICQzKTsgfQorCS8qID8/PyBZdWNrLiAgc2V0YXR0cnMgaXMgYSBxdWljayBoYWNrLiAgV2UgY2FuJ3QgdXNlCisJICAgcHJlZml4X2F0dHJpYnV0ZXMgYmVjYXVzZSAkMSBvbmx5IGFwcGxpZXMgdG8gdGhpcworCSAgIGRlY2xhcmF0b3IuICBXZSBhc3N1bWUgc2V0c3BlY3MgaGFzIGFscmVhZHkgYmVlbiBkb25lLgorCSAgIHNldGF0dHJzIGFsc28gYXZvaWRzIDUgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMgKG90aGVyd2lzZSBtdWx0aXBsZQorCSAgIGF0dHJpYnV0ZXMgY291bGQgYmUgcmVjb2duaXplZCBoZXJlIG9yIGluIGBhdHRyaWJ1dGVzJykuICAqLworCXwgYXR0cmlidXRlcyBzZXRhdHRycyBwYXJtX2RlY2xhcmF0b3IKKwkJeyAkJCA9ICQzOyB9CisJfCBUWVBFTkFNRQorCTsKKworLyogQSBkZWNsYXJhdG9yIGFsbG93ZWQgd2hldGhlciBvciBub3QgdGhlcmUgaGFzIGJlZW4KKyAgIGFuIGV4cGxpY2l0IHR5cGVzcGVjLiAgVGhlc2UgY2Fubm90IHJlZGVjbGFyZSBhIHR5cGVkZWYtbmFtZS4gICovCisKK25vdHlwZV9kZWNsYXJhdG9yOgorCSAgbm90eXBlX2RlY2xhcmF0b3IgJygnIHBhcm1saXN0X29yX2lkZW50aWZpZXJzICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChDQUxMX0VYUFIsICQxLCAkMywgTlVMTF9UUkVFKTsgfQorLyoJfCBub3R5cGVfZGVjbGFyYXRvciAnKCcgZXJyb3IgJyknICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChDQUxMX0VYUFIsICQxLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgcG9wbGV2ZWwgKDAsIDAsIDApOyB9ICAqLworCXwgJygnIG5vdHlwZV9kZWNsYXJhdG9yICcpJworCQl7ICQkID0gJDI7IH0KKwl8ICcqJyB0eXBlX3F1YWxzIG5vdHlwZV9kZWNsYXJhdG9yICAlcHJlYyBVTkFSWQorCQl7ICQkID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKCQyLCAkMyk7IH0KKwl8IG5vdHlwZV9kZWNsYXJhdG9yICdbJyBleHByICddJyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQVJSQVlfUkVGLCAkMSwgJDMpOyB9CisJfCBub3R5cGVfZGVjbGFyYXRvciAnWycgJ10nICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChBUlJBWV9SRUYsICQxLCBOVUxMX1RSRUUpOyB9CisJLyogPz8/IFl1Y2suICBzZXRhdHRycyBpcyBhIHF1aWNrIGhhY2suICBXZSBjYW4ndCB1c2UKKwkgICBwcmVmaXhfYXR0cmlidXRlcyBiZWNhdXNlICQxIG9ubHkgYXBwbGllcyB0byB0aGlzCisJICAgZGVjbGFyYXRvci4gIFdlIGFzc3VtZSBzZXRzcGVjcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuCisJICAgc2V0YXR0cnMgYWxzbyBhdm9pZHMgNSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyAob3RoZXJ3aXNlIG11bHRpcGxlCisJICAgYXR0cmlidXRlcyBjb3VsZCBiZSByZWNvZ25pemVkIGhlcmUgb3IgaW4gYGF0dHJpYnV0ZXMnKS4gICovCisJfCBhdHRyaWJ1dGVzIHNldGF0dHJzIG5vdHlwZV9kZWNsYXJhdG9yCisJCXsgJCQgPSAkMzsgfQorCXwgSURFTlRJRklFUgorCTsKKworc3RydWN0c3A6CisJICBTVFJVQ1QgaWRlbnRpZmllciAneycKKwkJeyAkJCA9IHN0YXJ0X3N0cnVjdCAoUkVDT1JEX1RZUEUsICQyKTsKKwkJICAvKiBTdGFydCBzY29wZSBvZiB0YWcgYmVmb3JlIHBhcnNpbmcgY29tcG9uZW50cy4gICovCisJCX0KKwkgIGNvbXBvbmVudF9kZWNsX2xpc3QgJ30nIG1heWJlX2F0dHJpYnV0ZSAKKwkJeyAkJCA9IGZpbmlzaF9zdHJ1Y3QgKCQ8dHR5cGU+NCwgJDUsICQ3KTsgfQorCXwgU1RSVUNUICd7JyBjb21wb25lbnRfZGVjbF9saXN0ICd9JyBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGZpbmlzaF9zdHJ1Y3QgKHN0YXJ0X3N0cnVjdCAoUkVDT1JEX1RZUEUsIE5VTExfVFJFRSksCisJCQkJICAgICAgJDMsICQ1KTsKKwkJfQorCXwgU1RSVUNUIGlkZW50aWZpZXIKKwkJeyAkJCA9IHhyZWZfdGFnIChSRUNPUkRfVFlQRSwgJDIpOyB9CisJfCBVTklPTiBpZGVudGlmaWVyICd7JworCQl7ICQkID0gc3RhcnRfc3RydWN0IChVTklPTl9UWVBFLCAkMik7IH0KKwkgIGNvbXBvbmVudF9kZWNsX2xpc3QgJ30nIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gZmluaXNoX3N0cnVjdCAoJDx0dHlwZT40LCAkNSwgJDcpOyB9CisJfCBVTklPTiAneycgY29tcG9uZW50X2RlY2xfbGlzdCAnfScgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBmaW5pc2hfc3RydWN0IChzdGFydF9zdHJ1Y3QgKFVOSU9OX1RZUEUsIE5VTExfVFJFRSksCisJCQkJICAgICAgJDMsICQ1KTsKKwkJfQorCXwgVU5JT04gaWRlbnRpZmllcgorCQl7ICQkID0geHJlZl90YWcgKFVOSU9OX1RZUEUsICQyKTsgfQorCXwgRU5VTSBpZGVudGlmaWVyICd7JworCQl7ICQ8aXR5cGU+MyA9IHN1c3BlbmRfbW9tZW50YXJ5ICgpOworCQkgICQkID0gc3RhcnRfZW51bSAoJDIpOyB9CisJICBlbnVtbGlzdCBtYXliZWNvbW1hX3dhcm4gJ30nIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gZmluaXNoX2VudW0gKCQ8dHR5cGU+NCwgbnJldmVyc2UgKCQ1KSwgJDgpOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQ8aXR5cGU+Myk7IH0KKwl8IEVOVU0gJ3snCisJCXsgJDxpdHlwZT4yID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgJCQgPSBzdGFydF9lbnVtIChOVUxMX1RSRUUpOyB9CisJICBlbnVtbGlzdCBtYXliZWNvbW1hX3dhcm4gJ30nIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gZmluaXNoX2VudW0gKCQ8dHR5cGU+MywgbnJldmVyc2UgKCQ0KSwgJDcpOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQ8aXR5cGU+Mik7IH0KKwl8IEVOVU0gaWRlbnRpZmllcgorCQl7ICQkID0geHJlZl90YWcgKEVOVU1FUkFMX1RZUEUsICQyKTsgfQorCTsKKworbWF5YmVjb21tYToKKwkgIC8qIGVtcHR5ICovCisJfCAnLCcKKwk7CisKK21heWJlY29tbWFfd2FybjoKKwkgIC8qIGVtcHR5ICovCisJfCAnLCcKKwkJeyBpZiAocGVkYW50aWMpIHBlZHdhcm4gKCJjb21tYSBhdCBlbmQgb2YgZW51bWVyYXRvciBsaXN0Iik7IH0KKwk7CisKK2NvbXBvbmVudF9kZWNsX2xpc3Q6CisJICBjb21wb25lbnRfZGVjbF9saXN0MgorCQl7ICQkID0gJDE7IH0KKwl8IGNvbXBvbmVudF9kZWNsX2xpc3QyIGNvbXBvbmVudF9kZWNsCisJCXsgJCQgPSBjaGFpbm9uICgkMSwgJDIpOworCQkgIHBlZHdhcm4gKCJubyBzZW1pY29sb24gYXQgZW5kIG9mIHN0cnVjdCBvciB1bmlvbiIpOyB9CisJOworCitjb21wb25lbnRfZGVjbF9saXN0MjoJLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgY29tcG9uZW50X2RlY2xfbGlzdDIgY29tcG9uZW50X2RlY2wgJzsnCisJCXsgJCQgPSBjaGFpbm9uICgkMSwgJDIpOyB9CisJfCBjb21wb25lbnRfZGVjbF9saXN0MiAnOycKKwkJeyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiZXh0cmEgc2VtaWNvbG9uIGluIHN0cnVjdCBvciB1bmlvbiBzcGVjaWZpZWQiKTsgfQorCTsKKworLyogVGhlcmUgaXMgYSBzaGlmdC1yZWR1Y2UgY29uZmxpY3QgaGVyZSwgYmVjYXVzZSBgY29tcG9uZW50cycgbWF5CisgICBzdGFydCB3aXRoIGEgYHR5cGVuYW1lJy4gIEl0IGhhcHBlbnMgdGhhdCBzaGlmdGluZyAodGhlIGRlZmF1bHQgcmVzb2x1dGlvbikKKyAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLCBiZWNhdXNlIGl0IHRyZWF0cyB0aGUgYHR5cGVuYW1lJyBhcyBwYXJ0IG9mCisgICBhIGB0eXBlZF90eXBlc3BlY3MnLgorCisgICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgc2FtZSB0ZWNobmlxdWUgd291bGQgYWxsb3cgdGhlIGRpc3RpbmN0aW9uCisgICBiZXR3ZWVuIGBub3R5cGVfaW5pdGRlY2xzJyBhbmQgYGluaXRkZWNscycgdG8gYmUgZWxpbWluYXRlZC4KKyAgIEJ1dCBJIGFtIGJlaW5nIGNhdXRpb3VzIGFuZCBub3QgdHJ5aW5nIGl0LiAgKi8KKworY29tcG9uZW50X2RlY2w6CisJICB0eXBlZF90eXBlc3BlY3Mgc2V0c3BlY3MgY29tcG9uZW50cworCQl7ICQkID0gJDM7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX3R5cGVzcGVjcworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBtZW1iZXIgZGVjbGFyYXRpb25zIHdpdGggbm8gbWVtYmVycyIpOworCQkgIHNoYWRvd190YWcoJDEpOworCQkgICQkID0gTlVMTF9UUkVFOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzIHNldHNwZWNzIGNvbXBvbmVudHMKKwkJeyAkJCA9ICQzOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG1lbWJlciBkZWNsYXJhdGlvbnMgd2l0aCBubyBtZW1iZXJzIik7CisJCSAgc2hhZG93X3RhZygkMSk7CisJCSAgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGVycm9yCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGV4dGVuc2lvbiBjb21wb25lbnRfZGVjbAorCQl7ICQkID0gJDI7CisJCSAgcGVkYW50aWMgPSAkPGl0eXBlPjE7IH0KKwk7CisKK2NvbXBvbmVudHM6CisJICBjb21wb25lbnRfZGVjbGFyYXRvcgorCXwgY29tcG9uZW50cyAnLCcgY29tcG9uZW50X2RlY2xhcmF0b3IKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMyk7IH0KKwk7CisKK2NvbXBvbmVudF9kZWNsYXJhdG9yOgorCSAgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBkZWNsYXJhdG9yIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gZ3Jva2ZpZWxkICgkMSwgJDIsICQzLCBjdXJyZW50X2RlY2xzcGVjcywgTlVMTF9UUkVFKTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKCQkLCAkNCwgcHJlZml4X2F0dHJpYnV0ZXMpOyB9CisJfCBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vCisJICBkZWNsYXJhdG9yICc6JyBleHByX25vX2NvbW1hcyBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGdyb2tmaWVsZCAoJDEsICQyLCAkMywgY3VycmVudF9kZWNsc3BlY3MsICQ1KTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKCQkLCAkNiwgcHJlZml4X2F0dHJpYnV0ZXMpOyB9CisJfCBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vICc6JyBleHByX25vX2NvbW1hcyBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGdyb2tmaWVsZCAoJDEsICQyLCBOVUxMX1RSRUUsIGN1cnJlbnRfZGVjbHNwZWNzLCAkNCk7CisJCSAgZGVjbF9hdHRyaWJ1dGVzICgkJCwgJDUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgfQorCTsKKworLyogV2UgY2hhaW4gdGhlIGVudW1lcmF0b3JzIGluIHJldmVyc2Ugb3JkZXIuCisgICBUaGV5IGFyZSBwdXQgaW4gZm9yd2FyZCBvcmRlciB3aGVyZSBlbnVtbGlzdCBpcyB1c2VkLgorICAgKFRoZSBvcmRlciB1c2VkIHRvIGJlIHNpZ25pZmljYW50LCBidXQgbm8gbG9uZ2VyIGlzIHNvLgorICAgSG93ZXZlciwgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlIG9yZGVyLCBqdXN0IHRvIGJlIGNsZWFuLikgICovCisKK2VudW1saXN0OgorCSAgZW51bWVyYXRvcgorCXwgZW51bWxpc3QgJywnIGVudW1lcmF0b3IKKwkJeyBpZiAoJDEgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgJCQgPSAkMTsKKwkJICBlbHNlCisJCSAgICAkJCA9IGNoYWlub24gKCQzLCAkMSk7IH0KKwl8IGVycm9yCisJCXsgJCQgPSBlcnJvcl9tYXJrX25vZGU7IH0KKwk7CisKKworZW51bWVyYXRvcjoKKwkgIGlkZW50aWZpZXIKKwkJeyAkJCA9IGJ1aWxkX2VudW1lcmF0b3IgKCQxLCBOVUxMX1RSRUUpOyB9CisJfCBpZGVudGlmaWVyICc9JyBleHByX25vX2NvbW1hcworCQl7ICQkID0gYnVpbGRfZW51bWVyYXRvciAoJDEsICQzKTsgfQorCTsKKwordHlwZW5hbWU6CisJdHlwZWRfdHlwZXNwZWNzIGFic2RjbAorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgJDIpOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzIGFic2RjbAorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgJDIpOyB9CisJOworCithYnNkY2w6ICAgLyogYW4gYWJzb2x1dGUgZGVjbGFyYXRvciAqLworCS8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGFic2RjbDEKKwk7CisKK25vbmVtcHR5X3R5cGVfcXVhbHM6CisJICBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMSwgTlVMTF9UUkVFKTsgfQorCXwgbm9uZW1wdHlfdHlwZV9xdWFscyBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOyB9CisJOworCit0eXBlX3F1YWxzOgorCSAgLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgdHlwZV9xdWFscyBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOyB9CisJOworCithYnNkY2wxOiAgLyogYSBub25lbXB0eSBhYnNvbHV0ZSBkZWNsYXJhdG9yICovCisJICAnKCcgYWJzZGNsMSAnKScKKwkJeyAkJCA9ICQyOyB9CisJICAvKiBgKHR5cGVkZWYpMScgaXMgYGludCcuICAqLworCXwgJyonIHR5cGVfcXVhbHMgYWJzZGNsMSAgJXByZWMgVU5BUlkKKwkJeyAkJCA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICgkMiwgJDMpOyB9CisJfCAnKicgdHlwZV9xdWFscyAgJXByZWMgVU5BUlkKKwkJeyAkJCA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICgkMiwgTlVMTF9UUkVFKTsgfQorCXwgYWJzZGNsMSAnKCcgcGFybWxpc3QgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsICQzLCBOVUxMX1RSRUUpOyB9CisJfCBhYnNkY2wxICdbJyBleHByICddJyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQVJSQVlfUkVGLCAkMSwgJDMpOyB9CisJfCBhYnNkY2wxICdbJyAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgJDEsIE5VTExfVFJFRSk7IH0KKwl8ICcoJyBwYXJtbGlzdCAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCBOVUxMX1RSRUUsICQyLCBOVUxMX1RSRUUpOyB9CisJfCAnWycgZXhwciAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCAkMik7IH0KKwl8ICdbJyAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyB9CisJLyogPz8/IEl0IGFwcGVhcnMgd2UgaGF2ZSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgaGVyZSwgaG93ZXZlcgorCSAgIHVzaW5nIHByZWZpeF9hdHRyaWJ1dGVzIGlzIHdyb25nLiAgKi8KKwk7CisKKy8qIGF0IGxlYXN0IG9uZSBzdGF0ZW1lbnQsIHRoZSBmaXJzdCBvZiB3aGljaCBwYXJzZXMgd2l0aG91dCBlcnJvci4gICovCisvKiBzdG10cyBpcyB1c2VkIG9ubHkgYWZ0ZXIgZGVjbHMsIHNvIGFuIGludmFsaWQgZmlyc3Qgc3RhdGVtZW50CisgICBpcyBhY3R1YWxseSByZWdhcmRlZCBhcyBhbiBpbnZhbGlkIGRlY2wgYW5kIHBhcnQgb2YgdGhlIGRlY2xzLiAgKi8KKworc3RtdHM6CisJbGluZW5vX3N0bXRfb3JfbGFiZWxzCisJCXsKKwkJICBpZiAocGVkYW50aWMgJiYgJDEpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIpOworCQl9CisJOworCitsaW5lbm9fc3RtdF9vcl9sYWJlbHM6CisJICBsaW5lbm9fc3RtdF9vcl9sYWJlbAorCXwgbGluZW5vX3N0bXRfb3JfbGFiZWxzIGxpbmVub19zdG10X29yX2xhYmVsCisJCXsgJCQgPSAkMjsgfQorCXwgbGluZW5vX3N0bXRfb3JfbGFiZWxzIGVycnN0bXQKKwkJeyAkJCA9IDA7IH0KKwk7CisKK3hzdG10czoKKwkvKiBlbXB0eSAqLworCXwgc3RtdHMKKwk7CisKK2VycnN0bXQ6ICBlcnJvciAnOycKKwk7CisKK3B1c2hsZXZlbDogIC8qIGVtcHR5ICovCisJCXsgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIHB1c2hsZXZlbCAoMCk7CisJCSAgY2xlYXJfbGFzdF9leHByICgpOworCQkgIHB1c2hfbW9tZW50YXJ5ICgpOworCQkgIGV4cGFuZF9zdGFydF9iaW5kaW5ncyAoMCk7CisJCX0KKwk7CisKKy8qIFJlYWQgemVybyBvciBtb3JlIGZvcndhcmQtZGVjbGFyYXRpb25zIGZvciBsYWJlbHMKKyAgIHRoYXQgbmVzdGVkIGZ1bmN0aW9ucyBjYW4ganVtcCB0by4gICovCittYXliZV9sYWJlbF9kZWNsczoKKwkgIC8qIGVtcHR5ICovCisJfCBsYWJlbF9kZWNscworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBsYWJlbCBkZWNsYXJhdGlvbnMiKTsgfQorCTsKKworbGFiZWxfZGVjbHM6CisJICBsYWJlbF9kZWNsCisJfCBsYWJlbF9kZWNscyBsYWJlbF9kZWNsCisJOworCitsYWJlbF9kZWNsOgorCSAgTEFCRUwgaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzICc7JworCQl7IHRyZWUgbGluazsKKwkJICBmb3IgKGxpbmsgPSAkMjsgbGluazsgbGluayA9IFRSRUVfQ0hBSU4gKGxpbmspKQorCQkgICAgeworCQkgICAgICB0cmVlIGxhYmVsID0gc2hhZG93X2xhYmVsIChUUkVFX1ZBTFVFIChsaW5rKSk7CisJCSAgICAgIENfREVDTEFSRURfTEFCRUxfRkxBRyAobGFiZWwpID0gMTsKKwkJICAgICAgZGVjbGFyZV9ub25sb2NhbF9sYWJlbCAobGFiZWwpOworCQkgICAgfQorCQl9CisJOworCisvKiBUaGlzIGlzIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgIEl0IGNhdXNlcyBzeW50YXggZXJyb3JzIHRvIGlnbm9yZSB0byB0aGUgbmV4dCBvcGVuYnJhY2UuICAqLworY29tcHN0bXRfb3JfZXJyb3I6CisJICBjb21wc3RtdAorCQl7fQorCXwgZXJyb3IgY29tcHN0bXQKKwk7CisKK2NvbXBzdG10OiAneycgJ30nCisJCXsgJCQgPSBjb252ZXJ0ICh2b2lkX3R5cGVfbm9kZSwgaW50ZWdlcl96ZXJvX25vZGUpOyB9CisJfCAneycgcHVzaGxldmVsIG1heWJlX2xhYmVsX2RlY2xzIGRlY2xzIHhzdG10cyAnfScKKwkJeyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2VuZF9iaW5kaW5ncyAoZ2V0ZGVjbHMgKCksIDEsIDApOworCQkgICQkID0gcG9wbGV2ZWwgKDEsIDEsIDApOworCQkgIGlmICh5eWNoYXIgPT0gQ09OU1RBTlQgfHwgeXljaGFyID09IFNUUklORykKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnkgKCk7IH0KKwl8ICd7JyBwdXNobGV2ZWwgbWF5YmVfbGFiZWxfZGVjbHMgZXJyb3IgJ30nCisJCXsgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGV4cGFuZF9lbmRfYmluZGluZ3MgKGdldGRlY2xzICgpLCBrZXB0X2xldmVsX3AgKCksIDApOworCQkgICQkID0gcG9wbGV2ZWwgKGtlcHRfbGV2ZWxfcCAoKSwgMCwgMCk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsgfQorCXwgJ3snIHB1c2hsZXZlbCBtYXliZV9sYWJlbF9kZWNscyBzdG10cyAnfScKKwkJeyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2VuZF9iaW5kaW5ncyAoZ2V0ZGVjbHMgKCksIGtlcHRfbGV2ZWxfcCAoKSwgMCk7CisJCSAgJCQgPSBwb3BsZXZlbCAoa2VwdF9sZXZlbF9wICgpLCAwLCAwKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOyB9CisJOworCisvKiBWYWx1ZSBpcyBudW1iZXIgb2Ygc3RhdGVtZW50cyBjb3VudGVkIGFzIG9mIHRoZSBjbG9zZXBhcmVuLiAgKi8KK3NpbXBsZV9pZjoKKwkgIGlmX3ByZWZpeCBsaW5lbm9fbGFiZWxlZF9zdG10CisvKiBNYWtlIHN1cmUgZXhwYW5kX2VuZF9jb25kIGlzIHJ1biBvbmNlCisgICBmb3IgZWFjaCBjYWxsIHRvIGV4cGFuZF9zdGFydF9jb25kLgorICAgT3RoZXJ3aXNlIGEgY3Jhc2ggaXMgbGlrZWx5LiAgKi8KKwl8IGlmX3ByZWZpeCBlcnJvcgorCTsKKworaWZfcHJlZml4OgorCSAgSUYgJygnIGV4cHIgJyknCisJCXsgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGV4cGFuZF9zdGFydF9jb25kICh0cnV0aHZhbHVlX2NvbnZlcnNpb24gKCQzKSwgMCk7CisJCSAgJDxpdHlwZT4kID0gc3RtdF9jb3VudDsKKwkJICBpZl9zdG10X2ZpbGUgPSAkPGZpbGVuYW1lPi0xOworCQkgIGlmX3N0bXRfbGluZSA9ICQ8bGluZW5vPjA7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwk7CisKKy8qIFRoaXMgaXMgYSBzdWJyb3V0aW5lIG9mIHN0bXQuCisgICBJdCBpcyB1c2VkIHR3aWNlLCBvbmNlIGZvciB2YWxpZCBETyBzdGF0ZW1lbnRzCisgICBhbmQgb25jZSBmb3IgY2F0Y2hpbmcgZXJyb3JzIGluIHBhcnNpbmcgdGhlIGVuZCB0ZXN0LiAgKi8KK2RvX3N0bXRfc3RhcnQ6CisJICBETworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgLyogU2VlIGNvbW1lbnQgaW4gYHdoaWxlJyBhbHRlcm5hdGl2ZSwgYWJvdmUuICAqLworCQkgIGVtaXRfbm9wICgpOworCQkgIGV4cGFuZF9zdGFydF9sb29wX2NvbnRpbnVlX2Vsc2V3aGVyZSAoMSk7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwkgIGxpbmVub19sYWJlbGVkX3N0bXQgV0hJTEUKKwkJeyBleHBhbmRfbG9vcF9jb250aW51ZV9oZXJlICgpOyB9CisJOworCitzYXZlX2ZpbGVuYW1lOgorCQl7ICQkID0gaW5wdXRfZmlsZW5hbWU7IH0KKwk7CisKK3NhdmVfbGluZW5vOgorCQl7ICQkID0gbGluZW5vOyB9CisJOworCitsaW5lbm9fbGFiZWxlZF9zdG10OgorCSAgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBzdG10CisJCXsgfQorLyoJfCBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vIGVycm9yCisJCXsgfQorKi8KKwl8IHNhdmVfZmlsZW5hbWUgc2F2ZV9saW5lbm8gbGFiZWwgbGluZW5vX2xhYmVsZWRfc3RtdAorCQl7IH0KKwk7CisKK2xpbmVub19zdG10X29yX2xhYmVsOgorCSAgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBzdG10X29yX2xhYmVsCisJCXsgJCQgPSAkMzsgfQorCTsKKworc3RtdF9vcl9sYWJlbDoKKwkgIHN0bXQKKwkJeyAkJCA9IDA7IH0KKwl8IGxhYmVsCisJCXsgJCQgPSAxOyB9CisJOworCisvKiBQYXJzZSBhIHNpbmdsZSByZWFsIHN0YXRlbWVudCwgbm90IGluY2x1ZGluZyBhbnkgbGFiZWxzLiAgKi8KK3N0bXQ6CisJICBjb21wc3RtdAorCQl7IHN0bXRfY291bnQrKzsgfQorICAgICAgICB8IGFsbF9pdGVyX3N0bXQgCisJfCBleHByICc7JworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisvKiBJdCBhcHBlYXJzIHRoYXQgdGhpcyBzaG91bGQgbm90IGJlIGRvbmUtLXRoYXQgYSBub24tbHZhbHVlIGFycmF5CisgICBzaG91bGRuJ3QgZ2V0IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBpc24ndCB1c2VkLgorICAgU2VjdGlvbiAzLjIuMi4xIHNheXMgdGhhdCBhbiBhcnJheSBsdmFsdWUgZ2V0cyBjb252ZXJ0ZWQgdG8gYSBwb2ludGVyCisgICBpZiBpdCBhcHBlYXJzIGFzIGEgdG9wLWxldmVsIGV4cHJlc3Npb24sCisgICBidXQgc2F5cyBub3RoaW5nIGFib3V0IG5vbi1sdmFsdWUgYXJyYXlzLiAgKi8KKyNpZiAwCisJCSAgLyogQ2FsbCBkZWZhdWx0X2NvbnZlcnNpb24gdG8gZ2V0IGFuIGVycm9yCisJCSAgICAgb24gcmVmZXJyaW5nIHRvIGEgcmVnaXN0ZXIgYXJyYXkgaWYgcGVkYW50aWMuICAqLworCQkgIGlmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAoJDEpKSA9PSBBUlJBWV9UWVBFCisJCSAgICAgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFICgkMSkpID09IEZVTkNUSU9OX1RZUEUpCisJCSAgICAkMSA9IGRlZmF1bHRfY29udmVyc2lvbiAoJDEpOworI2VuZGlmCisJCSAgaXRlcmF0b3JfZXhwYW5kICgkMSk7CisJCSAgY2xlYXJfbW9tZW50YXJ5ICgpOyB9CisJfCBzaW1wbGVfaWYgRUxTRQorCQl7IGV4cGFuZF9zdGFydF9lbHNlICgpOworCQkgICQ8aXR5cGU+MSA9IHN0bXRfY291bnQ7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwkgIGxpbmVub19sYWJlbGVkX3N0bXQKKwkJeyBleHBhbmRfZW5kX2NvbmQgKCk7CisJCSAgaWYgKGV4dHJhX3dhcm5pbmdzICYmIHN0bXRfY291bnQgPT0gJDxpdHlwZT4xKQorCQkgICAgd2FybmluZyAoImVtcHR5IGJvZHkgaW4gYW4gZWxzZS1zdGF0ZW1lbnQiKTsgfQorCXwgc2ltcGxlX2lmICVwcmVjIElGCisJCXsgZXhwYW5kX2VuZF9jb25kICgpOworCQkgIC8qIFRoaXMgd2FybmluZyBpcyBoZXJlIGluc3RlYWQgb2YgaW4gc2ltcGxlX2lmLCBiZWNhdXNlIHdlCisJCSAgICAgZG8gbm90IHdhbnQgYSB3YXJuaW5nIGlmIGFuIGVtcHR5IGlmIGlzIGZvbGxvd2VkIGJ5IGFuCisJCSAgICAgZWxzZSBzdGF0ZW1lbnQuICBJbmNyZW1lbnQgc3RtdF9jb3VudCBzbyB3ZSBkb24ndAorCQkgICAgIGdpdmUgYSBzZWNvbmQgZXJyb3IgaWYgdGhpcyBpcyBhIG5lc3RlZCBgaWYnLiAgKi8KKwkJICBpZiAoZXh0cmFfd2FybmluZ3MgJiYgc3RtdF9jb3VudCsrID09ICQ8aXR5cGU+MSkKKwkJICAgIHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lIChpZl9zdG10X2ZpbGUsIGlmX3N0bXRfbGluZSwKKwkJCQkJCSJlbXB0eSBib2R5IGluIGFuIGlmLXN0YXRlbWVudCIpOyB9CisvKiBNYWtlIHN1cmUgZXhwYW5kX2VuZF9jb25kIGlzIHJ1biBvbmNlCisgICBmb3IgZWFjaCBjYWxsIHRvIGV4cGFuZF9zdGFydF9jb25kLgorICAgT3RoZXJ3aXNlIGEgY3Jhc2ggaXMgbGlrZWx5LiAgKi8KKwl8IHNpbXBsZV9pZiBFTFNFIGVycm9yCisJCXsgZXhwYW5kX2VuZF9jb25kICgpOyB9CisJfCBXSElMRQorCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgLyogVGhlIGVtaXRfbm9wIHVzZWQgdG8gY29tZSBiZWZvcmUgZW1pdF9saW5lX25vdGUsCisJCSAgICAgYnV0IHRoYXQgbWFkZSB0aGUgbm9wIHNlZW0gbGlrZSBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgbGluZS4KKwkJICAgICBBbmQgdGhhdCB3YXMgY29uZnVzaW5nIHdoZW4gdGhlIHByZWNlZGluZyBsaW5lIHdhcworCQkgICAgIGluc2lkZSBvZiBhbiBpZiBzdGF0ZW1lbnQgYW5kIHdhcyBub3QgcmVhbGx5IGV4ZWN1dGVkLgorCQkgICAgIEkgdGhpbmsgaXQgb3VnaHQgdG8gd29yayB0byBwdXQgdGhlIG5vcCBhZnRlciB0aGUgbGluZSBudW1iZXIuCisJCSAgICAgV2Ugd2lsbCBzZWUuICAtLXJtcywgSnVseSAxNSwgMTk5MS4gICovCisJCSAgZW1pdF9ub3AgKCk7IH0KKwkgICcoJyBleHByICcpJworCQl7IC8qIERvbid0IHN0YXJ0IHRoZSBsb29wIHRpbGwgd2UgaGF2ZSBzdWNjZWVkZWQKKwkJICAgICBpbiBwYXJzaW5nIHRoZSBlbmQgdGVzdC4gIFRoaXMgaXMgdG8gbWFrZSBzdXJlCisJCSAgICAgdGhhdCB3ZSBlbmQgZXZlcnkgbG9vcCB3ZSBzdGFydC4gICovCisJCSAgZXhwYW5kX3N0YXJ0X2xvb3AgKDEpOworCQkgIGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlIChOVUxMX1BUUiwKKwkJCQkJICAgICB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKCQ0KSk7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwkgIGxpbmVub19sYWJlbGVkX3N0bXQKKwkJeyBleHBhbmRfZW5kX2xvb3AgKCk7IH0KKwl8IGRvX3N0bXRfc3RhcnQKKwkgICcoJyBleHByICcpJyAnOycKKwkJeyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZSAoTlVMTF9QVFIsCisJCQkJCSAgICAgdHJ1dGh2YWx1ZV9jb252ZXJzaW9uICgkMykpOworCQkgIGV4cGFuZF9lbmRfbG9vcCAoKTsKKwkJICBjbGVhcl9tb21lbnRhcnkgKCk7IH0KKy8qIFRoaXMgcnVsZSBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHdlIGVuZCBldmVyeSBsb29wIHdlIHN0YXJ0LiAgKi8KKwl8IGRvX3N0bXRfc3RhcnQgZXJyb3IKKwkJeyBleHBhbmRfZW5kX2xvb3AgKCk7CisJCSAgY2xlYXJfbW9tZW50YXJ5ICgpOyB9CisJfCBGT1IKKwkgICcoJyB4ZXhwciAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIC8qIFNlZSBjb21tZW50IGluIGB3aGlsZScgYWx0ZXJuYXRpdmUsIGFib3ZlLiAgKi8KKwkJICBlbWl0X25vcCAoKTsKKwkJICBpZiAoJDMpIGNfZXhwYW5kX2V4cHJfc3RtdCAoJDMpOworCQkgIC8qIE5leHQgc3RlcCBpcyB0byBjYWxsIGV4cGFuZF9zdGFydF9sb29wX2NvbnRpbnVlX2Vsc2V3aGVyZSwKKwkJICAgICBidXQgd2FpdCB0aWxsIGFmdGVyIHdlIHBhcnNlIHRoZSBlbnRpcmUgZm9yICguLi4pLgorCQkgICAgIE90aGVyd2lzZSwgaW52YWxpZCBpbnB1dCBtaWdodCBjYXVzZSB1cyB0byBjYWxsIHRoYXQKKwkJICAgICBmbiB3aXRob3V0IGNhbGxpbmcgZXhwYW5kX2VuZF9sb29wLiAgKi8KKwkJfQorCSAgeGV4cHIgJzsnCisJCS8qIENhbid0IGVtaXQgbm93OyB3YWl0IHRpbGwgYWZ0ZXIgZXhwYW5kX3N0YXJ0X2xvb3AuLi4gICovCisJCXsgJDxsaW5lbm8+NyA9IGxpbmVubzsKKwkJICAkPGZpbGVuYW1lPiQgPSBpbnB1dF9maWxlbmFtZTsgfQorCSAgeGV4cHIgJyknCisJCXsgCisJCSAgLyogU3RhcnQgdGhlIGxvb3AuICBEb2luZyB0aGlzIGFmdGVyIHBhcnNpbmcKKwkJICAgICBhbGwgdGhlIGV4cHJlc3Npb25zIGVuc3VyZXMgd2Ugd2lsbCBlbmQgdGhlIGxvb3AuICAqLworCQkgIGV4cGFuZF9zdGFydF9sb29wX2NvbnRpbnVlX2Vsc2V3aGVyZSAoMSk7CisJCSAgLyogRW1pdCB0aGUgZW5kLXRlc3QsIHdpdGggYSBsaW5lIG51bWJlci4gICovCisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+OCwgJDxsaW5lbm8+Nyk7CisJCSAgaWYgKCQ2KQorCQkgICAgZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZSAoTlVMTF9QVFIsCisJCQkJCSAgICAgICB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKCQ2KSk7CisJCSAgLyogRG9uJ3QgbGV0IHRoZSB0cmVlIG5vZGVzIGZvciAkOSBiZSBkaXNjYXJkZWQgYnkKKwkJICAgICBjbGVhcl9tb21lbnRhcnkgZHVyaW5nIHRoZSBwYXJzaW5nIG9mIHRoZSBuZXh0IHN0bXQuICAqLworCQkgIHB1c2hfbW9tZW50YXJ5ICgpOworCQkgICQ8bGluZW5vPjcgPSBsaW5lbm87CisJCSAgJDxmaWxlbmFtZT44ID0gaW5wdXRfZmlsZW5hbWU7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwkgIGxpbmVub19sYWJlbGVkX3N0bXQKKwkJeyAvKiBFbWl0IHRoZSBpbmNyZW1lbnQgZXhwcmVzc2lvbiwgd2l0aCBhIGxpbmUgbnVtYmVyLiAgKi8KKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT44LCAkPGxpbmVubz43KTsKKwkJICBleHBhbmRfbG9vcF9jb250aW51ZV9oZXJlICgpOworCQkgIGlmICgkOSkKKwkJICAgIGNfZXhwYW5kX2V4cHJfc3RtdCAoJDkpOworCQkgIGlmICh5eWNoYXIgPT0gQ09OU1RBTlQgfHwgeXljaGFyID09IFNUUklORykKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnkgKCk7CisJCSAgZXhwYW5kX2VuZF9sb29wICgpOyB9CisJfCBTV0lUQ0ggJygnIGV4cHIgJyknCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBjX2V4cGFuZF9zdGFydF9jYXNlICgkMyk7CisJCSAgLyogRG9uJ3QgbGV0IHRoZSB0cmVlIG5vZGVzIGZvciAkMyBiZSBkaXNjYXJkZWQgYnkKKwkJICAgICBjbGVhcl9tb21lbnRhcnkgZHVyaW5nIHRoZSBwYXJzaW5nIG9mIHRoZSBuZXh0IHN0bXQuICAqLworCQkgIHB1c2hfbW9tZW50YXJ5ICgpOworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyB9CisJICBsaW5lbm9fbGFiZWxlZF9zdG10CisJCXsgZXhwYW5kX2VuZF9jYXNlICgkMyk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsgfQorCXwgQlJFQUsgJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBpZiAoICEgZXhwYW5kX2V4aXRfc29tZXRoaW5nICgpKQorCQkgICAgZXJyb3IgKCJicmVhayBzdGF0ZW1lbnQgbm90IHdpdGhpbiBsb29wIG9yIHN3aXRjaCIpOyB9CisJfCBDT05USU5VRSAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGlmICghIGV4cGFuZF9jb250aW51ZV9sb29wIChOVUxMX1BUUikpCisJCSAgICBlcnJvciAoImNvbnRpbnVlIHN0YXRlbWVudCBub3Qgd2l0aGluIGEgbG9vcCIpOyB9CisJfCBSRVRVUk4gJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBjX2V4cGFuZF9yZXR1cm4gKE5VTExfVFJFRSk7IH0KKwl8IFJFVFVSTiBleHByICc7JworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgY19leHBhbmRfcmV0dXJuICgkMik7IH0KKwl8IEFTTV9LRVlXT1JEIG1heWJlX3R5cGVfcXVhbCAnKCcgZXhwciAnKScgJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBTVFJJUF9OT1BTICgkNCk7CisJCSAgaWYgKChUUkVFX0NPREUgKCQ0KSA9PSBBRERSX0VYUFIKKwkJICAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICgkNCwgMCkpID09IFNUUklOR19DU1QpCisJCSAgICAgIHx8IFRSRUVfQ09ERSAoJDQpID09IFNUUklOR19DU1QpCisJCSAgICBleHBhbmRfYXNtICgkNCk7CisJCSAgZWxzZQorCQkgICAgZXJyb3IgKCJhcmd1bWVudCBvZiBgYXNtJyBpcyBub3QgYSBjb25zdGFudCBzdHJpbmciKTsgfQorCS8qIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aCBqdXN0IG91dHB1dCBvcGVyYW5kcy4gICovCisJfCBBU01fS0VZV09SRCBtYXliZV90eXBlX3F1YWwgJygnIGV4cHIgJzonIGFzbV9vcGVyYW5kcyAnKScgJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBjX2V4cGFuZF9hc21fb3BlcmFuZHMgKCQ0LCAkNiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsCisJCQkJCSAkMiA9PSByaWRwb2ludGVyc1soaW50KVJJRF9WT0xBVElMRV0sCisJCQkJCSBpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsgfQorCS8qIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aCBpbnB1dCBvcGVyYW5kcyBhcyB3ZWxsLiAgKi8KKwl8IEFTTV9LRVlXT1JEIG1heWJlX3R5cGVfcXVhbCAnKCcgZXhwciAnOicgYXNtX29wZXJhbmRzICc6JyBhc21fb3BlcmFuZHMgJyknICc7JworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgY19leHBhbmRfYXNtX29wZXJhbmRzICgkNCwgJDYsICQ4LCBOVUxMX1RSRUUsCisJCQkJCSAkMiA9PSByaWRwb2ludGVyc1soaW50KVJJRF9WT0xBVElMRV0sCisJCQkJCSBpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsgfQorCS8qIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aCBjbG9iYmVyZWQgcmVnaXN0ZXJzIGFzIHdlbGwuICAqLworCXwgQVNNX0tFWVdPUkQgbWF5YmVfdHlwZV9xdWFsICcoJyBleHByICc6JyBhc21fb3BlcmFuZHMgJzonCisgIAkgIGFzbV9vcGVyYW5kcyAnOicgYXNtX2Nsb2JiZXJzICcpJyAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoJDQsICQ2LCAkOCwgJDEwLAorCQkJCQkgJDIgPT0gcmlkcG9pbnRlcnNbKGludClSSURfVk9MQVRJTEVdLAorCQkJCQkgaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7IH0KKwl8IEdPVE8gaWRlbnRpZmllciAnOycKKwkJeyB0cmVlIGRlY2w7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBkZWNsID0gbG9va3VwX2xhYmVsICgkMik7CisJCSAgaWYgKGRlY2wgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9VU0VEIChkZWNsKSA9IDE7CisJCSAgICAgIGV4cGFuZF9nb3RvIChkZWNsKTsKKwkJICAgIH0KKwkJfQorCXwgR09UTyAnKicgZXhwciAnOycKKwkJeyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYGdvdG8gKmV4cHI7JyIpOworCQkgIHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgZXhwYW5kX2NvbXB1dGVkX2dvdG8gKGNvbnZlcnQgKHB0cl90eXBlX25vZGUsICQzKSk7IH0KKwl8ICc7JworCTsKKworYWxsX2l0ZXJfc3RtdDoKKwkgIGFsbF9pdGVyX3N0bXRfc2ltcGxlCisvKgl8IGFsbF9pdGVyX3N0bXRfd2l0aF9kZWNsICovCisJOworCithbGxfaXRlcl9zdG10X3NpbXBsZToKKwkgIEZPUiAnKCcgcHJpbWFyeSAnKScgCisJICB7CisJICAgIC8qIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGFjdGlvbiBpcyAgKi8KKwkgICAgLyogICAgICAxIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgKi8gCisJICAgIC8qICAgICAgMCBpbiBjYXNlIG9mIGVycm9yIG9yIGFscmVhZHkgYm91bmQgaXRlcmF0b3IgKi8KKworCSAgICAkPGl0eXBlPiQgPSAwOworCSAgICBpZiAoVFJFRV9DT0RFICgkMykgIT0gVkFSX0RFQ0wpCisJICAgICAgZXJyb3IgKCJpbnZhbGlkIGBmb3IgKElURVJBVE9SKScgc3ludGF4Iik7CisJICAgIGVsc2UgaWYgKCEgSVRFUkFUT1JfUCAoJDMpKQorCSAgICAgIGVycm9yICgiYCVzJyBpcyBub3QgYW4gaXRlcmF0b3IiLAorCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICgkMykpKTsKKwkgICAgZWxzZSBpZiAoSVRFUkFUT1JfQk9VTkRfUCAoJDMpKQorCSAgICAgIGVycm9yICgiYGZvciAoJXMpJyBpbnNpZGUgZXhwYW5zaW9uIG9mIHNhbWUgaXRlcmF0b3IiLAorCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICgkMykpKTsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJJDxpdHlwZT4kID0gMTsKKwkJaXRlcmF0b3JfZm9yX2xvb3Bfc3RhcnQgKCQzKTsKKwkgICAgICB9CisJICB9CisJICBsaW5lbm9fbGFiZWxlZF9zdG10CisJICB7CisJICAgIGlmICgkPGl0eXBlPjUpCisJICAgICAgaXRlcmF0b3JfZm9yX2xvb3BfZW5kICgkMyk7CisJICB9CisKKy8qICBUaGlzIHJlYWxseSBzaG91bGQgYWxsb3cgYW55IGtpbmQgb2YgZGVjbGFyYXRpb24sCisgICAgZm9yIGdlbmVyYWxpdHkuICBGaXggaXQgYmVmb3JlIHR1cm5pbmcgaXQgYmFjayBvbi4KKworYWxsX2l0ZXJfc3RtdF93aXRoX2RlY2w6CisJICBGT1IgJygnIElURVJBVE9SIHB1c2hsZXZlbCBzZXRzcGVjcyBpdGVyYXRvcl9zcGVjICcpJyAKKwkgIHsKKyovCSAgICAvKiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBhY3Rpb24gaXMgICovCisJICAgIC8qICAgICAgMSBpZiBldmVyeXRoaW5nIGlzIE9LICovIAorCSAgICAvKiAgICAgIDAgaW4gY2FzZSBvZiBlcnJvciBvciBhbHJlYWR5IGJvdW5kIGl0ZXJhdG9yICovCisvKgorCSAgICBpdGVyYXRvcl9mb3JfbG9vcF9zdGFydCAoJDYpOworCSAgfQorCSAgbGluZW5vX2xhYmVsZWRfc3RtdAorCSAgeworCSAgICBpdGVyYXRvcl9mb3JfbG9vcF9lbmQgKCQ2KTsKKwkgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCSAgICBleHBhbmRfZW5kX2JpbmRpbmdzIChnZXRkZWNscyAoKSwgMSwgMCk7CisJICAgICQ8dHR5cGU+JCA9IHBvcGxldmVsICgxLCAxLCAwKTsKKwkgICAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCSAgICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCSAgICBlbHNlCisJICAgICAgcG9wX21vbWVudGFyeSAoKTsJICAgIAorCSAgfQorKi8KKworLyogQW55IGtpbmQgb2YgbGFiZWwsIGluY2x1ZGluZyBqdW1wIGxhYmVscyBhbmQgY2FzZSBsYWJlbHMuCisgICBBTlNJIEMgYWNjZXB0cyBsYWJlbHMgb25seSBiZWZvcmUgc3RhdGVtZW50cywgYnV0IHdlIGFsbG93IHRoZW0KKyAgIGFsc28gYXQgdGhlIGVuZCBvZiBhIGNvbXBvdW5kIHN0YXRlbWVudC4gICovCisKK2xhYmVsOgkgIENBU0UgZXhwcl9ub19jb21tYXMgJzonCisJCXsgcmVnaXN0ZXIgdHJlZSB2YWx1ZSA9IGNoZWNrX2Nhc2VfdmFsdWUgKCQyKTsKKwkJICByZWdpc3RlciB0cmVlIGxhYmVsCisJCSAgICA9IGJ1aWxkX2RlY2wgKExBQkVMX0RFQ0wsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKworCQkgIHN0bXRfY291bnQrKzsKKworCQkgIGlmICh2YWx1ZSAhPSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB7CisJCSAgICAgIHRyZWUgZHVwbGljYXRlOworCQkgICAgICBpbnQgc3VjY2VzcyA9IHB1c2hjYXNlICh2YWx1ZSwgY29udmVydF9hbmRfY2hlY2ssCisJCQkJCSAgICAgIGxhYmVsLCAmZHVwbGljYXRlKTsKKwkJICAgICAgaWYgKHN1Y2Nlc3MgPT0gMSkKKwkJCWVycm9yICgiY2FzZSBsYWJlbCBub3Qgd2l0aGluIGEgc3dpdGNoIHN0YXRlbWVudCIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDIpCisJCQl7CisJCQkgIGVycm9yICgiZHVwbGljYXRlIGNhc2UgdmFsdWUiKTsKKwkJCSAgZXJyb3Jfd2l0aF9kZWNsIChkdXBsaWNhdGUsICJ0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSBmb3IgdGhhdCB2YWx1ZSIpOworCQkJfQorCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDMpCisJCQl3YXJuaW5nICgiY2FzZSB2YWx1ZSBvdXQgb2YgcmFuZ2UiKTsKKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSA1KQorCQkJZXJyb3IgKCJjYXNlIGxhYmVsIHdpdGhpbiBzY29wZSBvZiBjbGVhbnVwIG9yIHZhcmlhYmxlIGFycmF5Iik7CisJCSAgICB9CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwl8IENBU0UgZXhwcl9ub19jb21tYXMgRUxMSVBTSVMgZXhwcl9ub19jb21tYXMgJzonCisJCXsgcmVnaXN0ZXIgdHJlZSB2YWx1ZTEgPSBjaGVja19jYXNlX3ZhbHVlICgkMik7CisJCSAgcmVnaXN0ZXIgdHJlZSB2YWx1ZTIgPSBjaGVja19jYXNlX3ZhbHVlICgkNCk7CisJCSAgcmVnaXN0ZXIgdHJlZSBsYWJlbAorCQkgICAgPSBidWlsZF9kZWNsIChMQUJFTF9ERUNMLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgY2FzZSByYW5nZXMiKTsKKwkJICBzdG10X2NvdW50Kys7CisKKwkJICBpZiAodmFsdWUxICE9IGVycm9yX21hcmtfbm9kZSAmJiB2YWx1ZTIgIT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeworCQkgICAgICB0cmVlIGR1cGxpY2F0ZTsKKwkJICAgICAgaW50IHN1Y2Nlc3MgPSBwdXNoY2FzZV9yYW5nZSAodmFsdWUxLCB2YWx1ZTIsCisJCQkJCQkgICAgY29udmVydF9hbmRfY2hlY2ssIGxhYmVsLAorCQkJCQkJICAgICZkdXBsaWNhdGUpOworCQkgICAgICBpZiAoc3VjY2VzcyA9PSAxKQorCQkJZXJyb3IgKCJjYXNlIGxhYmVsIG5vdCB3aXRoaW4gYSBzd2l0Y2ggc3RhdGVtZW50Iik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMikKKwkJCXsKKwkJCSAgZXJyb3IgKCJkdXBsaWNhdGUgY2FzZSB2YWx1ZSIpOworCQkJICBlcnJvcl93aXRoX2RlY2wgKGR1cGxpY2F0ZSwgInRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IGZvciB0aGF0IHZhbHVlIik7CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMykKKwkJCXdhcm5pbmcgKCJjYXNlIHZhbHVlIG91dCBvZiByYW5nZSIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDQpCisJCQl3YXJuaW5nICgiZW1wdHkgY2FzZSByYW5nZSIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDUpCisJCQllcnJvciAoImNhc2UgbGFiZWwgd2l0aGluIHNjb3BlIG9mIGNsZWFudXAgb3IgdmFyaWFibGUgYXJyYXkiKTsKKwkJICAgIH0KKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCXwgREVGQVVMVCAnOicKKwkJeworCQkgIHRyZWUgZHVwbGljYXRlOworCQkgIHJlZ2lzdGVyIHRyZWUgbGFiZWwKKwkJICAgID0gYnVpbGRfZGVjbCAoTEFCRUxfREVDTCwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCQkgIGludCBzdWNjZXNzID0gcHVzaGNhc2UgKE5VTExfVFJFRSwgMCwgbGFiZWwsICZkdXBsaWNhdGUpOworCQkgIHN0bXRfY291bnQrKzsKKwkJICBpZiAoc3VjY2VzcyA9PSAxKQorCQkgICAgZXJyb3IgKCJkZWZhdWx0IGxhYmVsIG5vdCB3aXRoaW4gYSBzd2l0Y2ggc3RhdGVtZW50Iik7CisJCSAgZWxzZSBpZiAoc3VjY2VzcyA9PSAyKQorCQkgICAgeworCQkgICAgICBlcnJvciAoIm11bHRpcGxlIGRlZmF1bHQgbGFiZWxzIGluIG9uZSBzd2l0Y2giKTsKKwkJICAgICAgZXJyb3Jfd2l0aF9kZWNsIChkdXBsaWNhdGUsICJ0aGlzIGlzIHRoZSBmaXJzdCBkZWZhdWx0IGxhYmVsIik7CisJCSAgICB9CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwl8IGlkZW50aWZpZXIgJzonCisJCXsgdHJlZSBsYWJlbCA9IGRlZmluZV9sYWJlbCAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubywgJDEpOworCQkgIHN0bXRfY291bnQrKzsKKwkJICBlbWl0X25vcCAoKTsKKwkJICBpZiAobGFiZWwpCisJCSAgICBleHBhbmRfbGFiZWwgKGxhYmVsKTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCTsKKworLyogRWl0aGVyIGEgdHlwZS1xdWFsaWZpZXIgb3Igbm90aGluZy4gIEZpcnN0IHRoaW5nIGluIGFuIGBhc20nIHN0YXRlbWVudC4gICovCisKK21heWJlX3R5cGVfcXVhbDoKKwkvKiBlbXB0eSAqLworCQl7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICAkJCA9IE5VTExfVFJFRTsgfQorCXwgVFlQRV9RVUFMCisJCXsgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyB9CisJOworCit4ZXhwcjoKKwkvKiBlbXB0eSAqLworCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJfCBleHByCisJOworCisvKiBUaGVzZSBhcmUgdGhlIG9wZXJhbmRzIG90aGVyIHRoYW4gdGhlIGZpcnN0IHN0cmluZyBhbmQgY29sb24KKyAgIGluICBhc20gKCJhZGRleHRlbmQgJTIsJTEiOiAiPWRtIiAoeCksICIwIiAoeSksICJnIiAoKngpKSAgKi8KK2FzbV9vcGVyYW5kczogLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgbm9ubnVsbF9hc21fb3BlcmFuZHMKKwk7CisKK25vbm51bGxfYXNtX29wZXJhbmRzOgorCSAgYXNtX29wZXJhbmQKKwl8IG5vbm51bGxfYXNtX29wZXJhbmRzICcsJyBhc21fb3BlcmFuZAorCQl7ICQkID0gY2hhaW5vbiAoJDEsICQzKTsgfQorCTsKKworYXNtX29wZXJhbmQ6CisJICBTVFJJTkcgJygnIGV4cHIgJyknCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKCQxLCAkMyk7IH0KKwk7CisKK2FzbV9jbG9iYmVyczoKKwkgIHN0cmluZworCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGNvbWJpbmVfc3RyaW5ncyAoJDEpLCBOVUxMX1RSRUUpOyB9CisJfCBhc21fY2xvYmJlcnMgJywnIHN0cmluZworCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGNvbWJpbmVfc3RyaW5ncyAoJDMpLCAkMSk7IH0KKwk7CisMCisvKiBUaGlzIGlzIHdoYXQgYXBwZWFycyBpbnNpZGUgdGhlIHBhcmVucyBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0b3IuCisgICBJdHMgdmFsdWUgaXMgYSBsaXN0IG9mIC4uLl9UWVBFIG5vZGVzLiAgKi8KK3Bhcm1saXN0OgorCQl7IHB1c2hsZXZlbCAoMCk7CisJCSAgY2xlYXJfcGFybV9vcmRlciAoKTsKKwkJICBkZWNsYXJlX3Bhcm1fbGV2ZWwgKDApOyB9CisJICBwYXJtbGlzdF8xCisJCXsgJCQgPSAkMjsKKwkJICBwYXJtbGlzdF90YWdzX3dhcm5pbmcgKCk7CisJCSAgcG9wbGV2ZWwgKDAsIDAsIDApOyB9CisJOworCitwYXJtbGlzdF8xOgorCSAgcGFybWxpc3RfMiAnKScKKwl8IHBhcm1zICc7JworCQl7IHRyZWUgcGFybTsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgZm9yd2FyZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIik7CisJCSAgLyogTWFyayB0aGUgZm9yd2FyZCBkZWNscyBhcyBzdWNoLiAgKi8KKwkJICBmb3IgKHBhcm0gPSBnZXRkZWNscyAoKTsgcGFybTsgcGFybSA9IFRSRUVfQ0hBSU4gKHBhcm0pKQorCQkgICAgVFJFRV9BU01fV1JJVFRFTiAocGFybSkgPSAxOworCQkgIGNsZWFyX3Bhcm1fb3JkZXIgKCk7IH0KKwkgIHBhcm1saXN0XzEKKwkJeyAkJCA9ICQ0OyB9CisJfCBlcnJvciAnKScKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IH0KKwk7CisKKy8qIFRoaXMgaXMgd2hhdCBhcHBlYXJzIGluc2lkZSB0aGUgcGFyZW5zIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRvci4KKyAgIElzIHZhbHVlIGlzIHJlcHJlc2VudGVkIGluIHRoZSBmb3JtYXQgdGhhdCBncm9rZGVjbGFyYXRvciBleHBlY3RzLiAgKi8KK3Bhcm1saXN0XzI6ICAvKiBlbXB0eSAqLworCQl7ICQkID0gZ2V0X3Bhcm1faW5mbyAoMCk7IH0KKwl8IEVMTElQU0lTCisJCXsgJCQgPSBnZXRfcGFybV9pbmZvICgwKTsKKwkJICAvKiBHY2MgdXNlZCB0byBhbGxvdyB0aGlzIGFzIGFuIGV4dGVuc2lvbi4gIEhvd2V2ZXIsIGl0IGRvZXMKKwkJICAgICBub3Qgd29yayBmb3IgYWxsIHRhcmdldHMsIGFuZCB0aHVzIGhhcyBiZWVuIGRpc2FibGVkLgorCQkgICAgIEFsc28sIHNpbmNlIGZ1bmMgKC4uLikgYW5kIGZ1bmMgKCkgYXJlIGluZGlzdGluZ3Vpc2hhYmxlLAorCQkgICAgIGl0IGNhdXNlZCBwcm9ibGVtcyB3aXRoIHRoZSBjb2RlIGluIGV4cGFuZF9idWlsdGluIHdoaWNoCisJCSAgICAgdHJpZXMgdG8gdmVyaWZ5IHRoYXQgQlVJTFRfSU5fTkVYVF9BUkcgaXMgYmVpbmcgdXNlZAorCQkgICAgIGNvcnJlY3RseS4gICovCisJCSAgZXJyb3IgKCJBTlNJIEMgcmVxdWlyZXMgYSBuYW1lZCBhcmd1bWVudCBiZWZvcmUgYC4uLiciKTsKKwkJfQorCXwgcGFybXMKKwkJeyAkJCA9IGdldF9wYXJtX2luZm8gKDEpOyB9CisJfCBwYXJtcyAnLCcgRUxMSVBTSVMKKwkJeyAkJCA9IGdldF9wYXJtX2luZm8gKDApOyB9CisJOworCitwYXJtczoKKwlwYXJtCisJCXsgcHVzaF9wYXJtX2RlY2wgKCQxKTsgfQorCXwgcGFybXMgJywnIHBhcm0KKwkJeyBwdXNoX3Bhcm1fZGVjbCAoJDMpOyB9CisJOworCisvKiBBIHNpbmdsZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24gb3IgcGFyYW1ldGVyIHR5cGUgbmFtZSwKKyAgIGFzIGZvdW5kIGluIGEgcGFybWxpc3QuICAqLworcGFybToKKwkgIHR5cGVkX2RlY2xzcGVjcyBzZXRzcGVjcyBwYXJtX2RlY2xhcmF0b3IgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJICQzKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgJDQpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgdHlwZWRfZGVjbHNwZWNzIHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSAkMyksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJICQ0KSk7IAorCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCB0eXBlZF9kZWNsc3BlY3Mgc2V0c3BlY3MgYWJzZGNsIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSAkMyksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJICQ0KSk7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzIHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSAkMyksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJICQ0KSk7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7ICB9CisKKwl8IGRlY2xtb2RzIHNldHNwZWNzIGFic2RjbCBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgJDMpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSAkNCkpOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyAgfQorCTsKKworLyogVGhpcyBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbgorICAgd2hlcmUgZWl0aGVyIGEgcGFybWxpc3Qgb3IgYW4gaWRlbnRpZmllciBsaXN0IGlzIG9rLgorICAgSXRzIHZhbHVlIGlzIGEgbGlzdCBvZiAuLi5fVFlQRSBub2RlcyBvciBhIGxpc3Qgb2YgaWRlbnRpZmllcnMuICAqLworcGFybWxpc3Rfb3JfaWRlbnRpZmllcnM6CisJCXsgcHVzaGxldmVsICgwKTsKKwkJICBjbGVhcl9wYXJtX29yZGVyICgpOworCQkgIGRlY2xhcmVfcGFybV9sZXZlbCAoMSk7IH0KKwkgIHBhcm1saXN0X29yX2lkZW50aWZpZXJzXzEKKwkJeyAkJCA9ICQyOworCQkgIHBhcm1saXN0X3RhZ3Nfd2FybmluZyAoKTsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7IH0KKwk7CisKK3Bhcm1saXN0X29yX2lkZW50aWZpZXJzXzE6CisJICBwYXJtbGlzdF8xCisJfCBpZGVudGlmaWVycyAnKScKKwkJeyB0cmVlIHQ7CisJCSAgZm9yICh0ID0gJDE7IHQ7IHQgPSBUUkVFX0NIQUlOICh0KSkKKwkJICAgIGlmIChUUkVFX1ZBTFVFICh0KSA9PSBOVUxMX1RSRUUpCisJCSAgICAgIGVycm9yICgiYC4uLicgaW4gb2xkLXN0eWxlIGlkZW50aWZpZXIgbGlzdCIpOworCQkgICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIE5VTExfVFJFRSwgJDEpOyB9CisJOworCisvKiBBIG5vbmVtcHR5IGxpc3Qgb2YgaWRlbnRpZmllcnMuICAqLworaWRlbnRpZmllcnM6CisJSURFTlRJRklFUgorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsICQxKTsgfQorCXwgaWRlbnRpZmllcnMgJywnIElERU5USUZJRVIKKwkJeyAkJCA9IGNoYWlub24gKCQxLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDMpKTsgfQorCTsKKworLyogQSBub25lbXB0eSBsaXN0IG9mIGlkZW50aWZpZXJzLCBpbmNsdWRpbmcgdHlwZW5hbWVzLiAgKi8KK2lkZW50aWZpZXJzX29yX3R5cGVuYW1lczoKKwlpZGVudGlmaWVyCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDEpOyB9CisJfCBpZGVudGlmaWVyc19vcl90eXBlbmFtZXMgJywnIGlkZW50aWZpZXIKKwkJeyAkJCA9IGNoYWlub24gKCQxLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDMpKTsgfQorCTsKKworZXh0ZW5zaW9uOgorCUVYVEVOU0lPTgorCQl7ICQ8aXR5cGU+JCA9IHBlZGFudGljOworCQkgIHBlZGFudGljID0gMDsgfQorCTsKKwwKKyUlCmRpZmYgLS1naXQgYS9nY2MvY2NjcC4xIGIvZ2NjL2NjY3AuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGViMTllCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NjY3AuMQpAQCAtMCwwICsxLDY3NCBAQAorLlwiIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gICAgICAgXC0qLVRleHQtKi0KKy5cIiBTZWUgc2VjdGlvbiBDT1BZSU5HIGZvciBjb25kaXRpb25zIGZvciByZWRpc3RyaWJ1dGlvbgorLlRIIGNwcCAxICIzMGFwcjE5OTMiICJHTlUgVG9vbHMiICJHTlUgVG9vbHMiCisuU0ggTkFNRQorY2NjcCwgY3BwIFwtIFRoZSBHTlUgQy1Db21wYXRpYmxlIENvbXBpbGVyIFByZXByb2Nlc3Nvci4KKy5TSCBTWU5PUFNJUworLmh5IDAKKy5uYQorLlRQCisuQiBjY2NwCisuUkIgIltcfCIgXC0kICJcfF0iCisuUkIgIltcfCIgXC1BIFxjCisuSSBwcmVkaWNhdGVcYworLlJCIFsgKFxjCisuSSB2YWx1ZVxjCisuQlIgKSBdXHxdCisuUkIgIltcfCIgXC1DICJcfF0iIAorLlJCICJbXHwiIFwtRCBcYworLkkgbmFtZVxjCisuUkIgWyA9XGMKKy5JIGRlZmluaXRpb25cYworXCZdXHxdCisuUkIgIltcfCIgXC1kRCAiXHxdIgorLlJCICJbXHwiIFwtZE0gIlx8XSIKKy5SQiAiW1x8IiAiXC1JXCAiXGMKKy5JIGRpcmVjdG9yeVxjCitcJlx8XQorLlJCICJbXHwiIFwtSCAiXHxdIgorLlJCICJbXHwiIFwtSVwtICJcfF0iIAorLlJCICJbXHwiICJcLWltYWNyb3NcICJcYworLkkgZmlsZVxjCitcJlx8XQorLlJCICJbXHwiICJcLWluY2x1ZGVcICJcYworLkkgZmlsZVxjCitcJlx8XQorLlJCICJbXHwiICJcLWlkaXJhZnRlclwgIlxjCisuSSBkaXJcYworXCZcfF0KKy5SQiAiW1x8IiAiXC1pcHJlZml4XCAiXGMKKy5JIHByZWZpeFxjCitcJlx8XQorLlJCICJbXHwiICJcLWl3aXRocHJlZml4XCAiXGMKKy5JIGRpclxjCitcJlx8XQorLlJCICJbXHwiIFwtbGFuZ1wtYyAiXHxdIgorLlJCICJbXHwiIFwtbGFuZ1wtYysrICJcfF0iCisuUkIgIltcfCIgXC1sYW5nXC1vYmpjICJcfF0iCisuUkIgIltcfCIgXC1sYW5nXC1vYmpjKysgIlx8XSIKKy5SQiAiW1x8IiBcLWxpbnQgIlx8XSIKKy5SQiAiW1x8IiBcLU1cICBbIFwtTUcgIlx8XV0iCisuUkIgIltcfCIgXC1NTVwgIFsgXC1NRyAiXHxdXSIKKy5SQiAiW1x8IiBcLU1EXCAgXGMKKy5JIGZpbGVcIFxjCitcJlx8XQorLlJCICJbXHwiIFwtTU1EXCAgXGMKKy5JIGZpbGVcIFxjCitcJlx8XQorLlJCICJbXHwiIFwtbm9zdGRpbmMgIlx8XSIgCisuUkIgIltcfCIgXC1ub3N0ZGluYysrICJcfF0iIAorLlJCICJbXHwiIFwtUCAiXHxdIiAKKy5SQiAiW1x8IiBcLXBlZGFudGljICJcfF0iCisuUkIgIltcfCIgXC1wZWRhbnRpY1wtZXJyb3JzICJcfF0iCisuUkIgIltcfCIgXC10cmFkaXRpb25hbCAiXHxdIiAKKy5SQiAiW1x8IiBcLXRyaWdyYXBocyAiXHxdIiAKKy5SQiAiW1x8IiBcLVUgXGMKKy5JIG5hbWVcYworXCZcfF0KKy5SQiAiW1x8IiBcLXVuZGVmICJcfF0iCisuUkIgIltcfCIgXC1XdHJpZ3JhcGhzICJcfF0iCisuUkIgIltcfCIgXC1XY29tbWVudCAiXHxdIgorLlJCICJbXHwiIFwtV2FsbCAiXHxdIgorLlJCICJbXHwiIFwtV3RyYWRpdGlvbmFsICJcfF0iCisuYnIKKy5SQiAiW1x8IiBcYworLkkgaW5maWxlXGMKKy5SQiB8IFwtICJcfF0iIAorLlJCICJbXHwiIFxjCisuSSBvdXRmaWxlXGMKKy5SQiB8IFwtICJcfF0iICAKKy5hZCBiCisuaHkgMQorLlNIIERFU0NSSVBUSU9OCitUaGUgQyBwcmVwcm9jZXNzb3IgaXMgYSBcYworLkkgbWFjcm8gcHJvY2Vzc29yXGMKK1wmIHRoYXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IGJ5Cit0aGUgQyBjb21waWxlciB0byB0cmFuc2Zvcm0geW91ciBwcm9ncmFtIGJlZm9yZSBhY3R1YWwgY29tcGlsYXRpb24uICBJdCBpcworY2FsbGVkIGEgbWFjcm8gcHJvY2Vzc29yIGJlY2F1c2UgaXQgYWxsb3dzIHlvdSB0byBkZWZpbmUgXGMKKy5JIG1hY3Jvc1xjCitcJiwKK3doaWNoIGFyZSBicmllZiBhYmJyZXZpYXRpb25zIGZvciBsb25nZXIgY29uc3RydWN0cy4KKworVGhlIEMgcHJlcHJvY2Vzc29yIHByb3ZpZGVzIGZvdXIgc2VwYXJhdGUgZmFjaWxpdGllcyB0aGF0IHlvdSBjYW4gdXNlIGFzCit5b3Ugc2VlIGZpdDoKKy5UUAorXChidQorSW5jbHVzaW9uIG9mIGhlYWRlciBmaWxlcy4gIFRoZXNlIGFyZSBmaWxlcyBvZiBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gYmUKK3N1YnN0aXR1dGVkIGludG8geW91ciBwcm9ncmFtLgorLlRQCitcKGJ1CitNYWNybyBleHBhbnNpb24uICBZb3UgY2FuIGRlZmluZSBcYworLkkgbWFjcm9zXGMKK1wmLCB3aGljaCBhcmUgYWJicmV2aWF0aW9ucworZm9yIGFyYml0cmFyeSBmcmFnbWVudHMgb2YgQyBjb2RlLCBhbmQgdGhlbiB0aGUgQyBwcmVwcm9jZXNzb3Igd2lsbAorcmVwbGFjZSB0aGUgbWFjcm9zIHdpdGggdGhlaXIgZGVmaW5pdGlvbnMgdGhyb3VnaG91dCB0aGUgcHJvZ3JhbS4KKy5UUAorXChidQorQ29uZGl0aW9uYWwgY29tcGlsYXRpb24uICBVc2luZyBzcGVjaWFsIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcywgeW91CitjYW4gaW5jbHVkZSBvciBleGNsdWRlIHBhcnRzIG9mIHRoZSBwcm9ncmFtIGFjY29yZGluZyB0byB2YXJpb3VzCitjb25kaXRpb25zLgorLlRQCitcKGJ1CitMaW5lIGNvbnRyb2wuICBJZiB5b3UgdXNlIGEgcHJvZ3JhbSB0byBjb21iaW5lIG9yIHJlYXJyYW5nZSBzb3VyY2UgZmlsZXMgaW50bworYW4gaW50ZXJtZWRpYXRlIGZpbGUgd2hpY2ggaXMgdGhlbiBjb21waWxlZCwgeW91IGNhbiB1c2UgbGluZSBjb250cm9sCit0byBpbmZvcm0gdGhlIGNvbXBpbGVyIG9mIHdoZXJlIGVhY2ggc291cmNlIGxpbmUgb3JpZ2luYWxseSBjYW1lIGZyb20uCisuUFAKK0MgcHJlcHJvY2Vzc29ycyB2YXJ5IGluIHNvbWUgZGV0YWlscy4gIEZvciBhIGZ1bGwgZXhwbGFuYXRpb24gb2YgdGhlCitHTlUgQyBwcmVwcm9jZXNzb3IsIHNlZSB0aGUKKy5CIGluZm8KK2ZpbGUgYFx8XGMKKy5CIGNwcC5pbmZvXGMKK1wmXHwnLCBvciB0aGUgbWFudWFsCisuSSBUaGUgQyBQcmVwcm9jZXNzb3JcYworXCYuICBCb3RoIG9mIHRoZXNlIGFyZSBidWlsdCBmcm9tIHRoZSBzYW1lIGRvY3VtZW50YXRpb24gc291cmNlIGZpbGUsIGBcfFxjCisuQiBjcHAudGV4aW5mb1xjCitcJlx8Jy4gIFRoZSBHTlUgQworcHJlcHJvY2Vzc29yIHByb3ZpZGVzIGEgc3VwZXJzZXQgb2YgdGhlIGZlYXR1cmVzIG9mIEFOU0kgU3RhbmRhcmQgQy4KKworQU5TSSBTdGFuZGFyZCBDIHJlcXVpcmVzIHRoZSByZWplY3Rpb24gb2YgbWFueSBoYXJtbGVzcyBjb25zdHJ1Y3RzIGNvbW1vbmx5Cit1c2VkIGJ5IHRvZGF5J3MgQyBwcm9ncmFtcy4gIFN1Y2ggaW5jb21wYXRpYmlsaXR5IHdvdWxkIGJlIGluY29udmVuaWVudCBmb3IKK3VzZXJzLCBzbyB0aGUgR05VIEMgcHJlcHJvY2Vzc29yIGlzIGNvbmZpZ3VyZWQgdG8gYWNjZXB0IHRoZXNlIGNvbnN0cnVjdHMKK2J5IGRlZmF1bHQuICBTdHJpY3RseSBzcGVha2luZywgdG8gZ2V0IEFOU0kgU3RhbmRhcmQgQywgeW91IG11c3QgdXNlIHRoZQorb3B0aW9ucyBgXHxcYworLkIgXC10cmlncmFwaHNcYworXCZcfCcsIGBcfFxjCisuQiBcLXVuZGVmXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1wZWRhbnRpY1xjCitcJlx8JywgYnV0IGluCitwcmFjdGljZSB0aGUgY29uc2VxdWVuY2VzIG9mIGhhdmluZyBzdHJpY3QgQU5TSSBTdGFuZGFyZCBDIG1ha2UgaXQKK3VuZGVzaXJhYmxlIHRvIGRvIHRoaXMuICAKKworTW9zdCBvZnRlbiB3aGVuIHlvdSB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yIHlvdSB3aWxsIG5vdCBoYXZlIHRvIGludm9rZSBpdAorZXhwbGljaXRseTogdGhlIEMgY29tcGlsZXIgd2lsbCBkbyBzbyBhdXRvbWF0aWNhbGx5LiAgSG93ZXZlciwgdGhlCitwcmVwcm9jZXNzb3IgaXMgc29tZXRpbWVzIHVzZWZ1bCBpbmRpdmlkdWFsbHkuCisKK1doZW4geW91IGNhbGwgdGhlIHByZXByb2Nlc3NvciBpbmRpdmlkdWFsbHksIGVpdGhlciBuYW1lCisoXGMKKy5CIGNwcFxjCitcJiBvciBcYworLkIgY2NjcFxjCitcJikgd2lsbCBkb1woZW1cJnRoZXkgYXJlIGNvbXBsZXRlbHkgc3lub255bW91cy4KKworVGhlIEMgcHJlcHJvY2Vzc29yIGV4cGVjdHMgdHdvIGZpbGUgbmFtZXMgYXMgYXJndW1lbnRzLCBcYworLkkgaW5maWxlXGMKK1wmIGFuZAorXGMKKy5JIG91dGZpbGVcYworXCYuICBUaGUgcHJlcHJvY2Vzc29yIHJlYWRzIFxjCisuSSBpbmZpbGVcYworXCYgdG9nZXRoZXIgd2l0aCBhbnkgb3RoZXIKK2ZpbGVzIGl0IHNwZWNpZmllcyB3aXRoIGBcfFxjCisuQiAjaW5jbHVkZVxjCitcJlx8Jy4gIEFsbCB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUKK2NvbWJpbmVkIGlucHV0IGZpbGVzIGlzIHdyaXR0ZW4gaW4gXGMKKy5JIG91dGZpbGVcYworXCYuCisKK0VpdGhlciBcYworLkkgaW5maWxlXGMKK1wmIG9yIFxjCisuSSBvdXRmaWxlXGMKK1wmIG1heSBiZSBgXHxcYworLkIgXC1cYworXCZcfCcsIHdoaWNoIGFzIFxjCisuSSBpbmZpbGVcYworXCYKK21lYW5zIHRvIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dCBhbmQgYXMgXGMKKy5JIG91dGZpbGVcYworXCYgbWVhbnMgdG8gd3JpdGUgdG8KK3N0YW5kYXJkIG91dHB1dC4gIEFsc28sIGlmIFxjCisuSSBvdXRmaWxlXGMKK1wmIG9yIGJvdGggZmlsZSBuYW1lcyBhcmUgb21pdHRlZCwKK3RoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGlucHV0IGFyZSB1c2VkIGZvciB0aGUgb21pdHRlZCBmaWxlIG5hbWVzLgorLlNIIE9QVElPTlMKK0hlcmUgaXMgYSB0YWJsZSBvZiBjb21tYW5kIG9wdGlvbnMgYWNjZXB0ZWQgYnkgdGhlIEMgcHJlcHJvY2Vzc29yLiAgCitUaGVzZSBvcHRpb25zIGNhbiBhbHNvIGJlIGdpdmVuIHdoZW4gY29tcGlsaW5nIGEgQyBwcm9ncmFtOyB0aGV5IGFyZQorcGFzc2VkIGFsb25nIGF1dG9tYXRpY2FsbHkgdG8gdGhlIHByZXByb2Nlc3NvciB3aGVuIGl0IGlzIGludm9rZWQgYnkKK3RoZSBjb21waWxlci4gCisuVFAKKy5CIFwtUAorSW5oaWJpdCBnZW5lcmF0aW9uIG9mIGBcfFxjCisuQiAjXGMKK1wmXHwnLWxpbmVzIHdpdGggbGluZS1udW1iZXIgaW5mb3JtYXRpb24gaW4KK3RoZSBvdXRwdXQgZnJvbSB0aGUgcHJlcHJvY2Vzc29yLiAgVGhpcyBtaWdodCBiZQordXNlZnVsIHdoZW4gcnVubmluZyB0aGUgcHJlcHJvY2Vzc29yIG9uIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBDIGNvZGUKK2FuZCB3aWxsIGJlIHNlbnQgdG8gYSBwcm9ncmFtIHdoaWNoIG1pZ2h0IGJlIGNvbmZ1c2VkIGJ5IHRoZQorYFx8XGMKKy5CICNcYworXCZcfCctbGluZXMuCisuVFAKKy5CIFwtQworRG8gbm90IGRpc2NhcmQgY29tbWVudHM6IHBhc3MgdGhlbSB0aHJvdWdoIHRvIHRoZSBvdXRwdXQgZmlsZS4KK0NvbW1lbnRzIGFwcGVhcmluZyBpbiBhcmd1bWVudHMgb2YgYSBtYWNybyBjYWxsIHdpbGwgYmUgY29waWVkIHRvIHRoZQorb3V0cHV0IGJlZm9yZSB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNybyBjYWxsLgorLlRQCisuQiBcLXRyYWRpdGlvbmFsCitUcnkgdG8gaW1pdGF0ZSB0aGUgYmVoYXZpb3Igb2Ygb2xkLWZhc2hpb25lZCBDLCBhcyBvcHBvc2VkIHRvIEFOU0kgQy4KKy5UUAorLkIgXC10cmlncmFwaHMKK1Byb2Nlc3MgQU5TSSBzdGFuZGFyZCB0cmlncmFwaCBzZXF1ZW5jZXMuICBUaGVzZSBhcmUgdGhyZWUtY2hhcmFjdGVyCitzZXF1ZW5jZXMsIGFsbCBzdGFydGluZyB3aXRoIGBcfFxjCisuQiA/P1xjCitcJlx8JywgdGhhdCBhcmUgZGVmaW5lZCBieSBBTlNJIEMgdG8KK3N0YW5kIGZvciBzaW5nbGUgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCBgXHxcYworLkIgPz8vXGMKK1wmXHwnIHN0YW5kcyBmb3IKK2BcfFxjCisuQlIgIlxlIiAiXHwnLCIKK3NvIGBcfFxjCisuQiAnPz8vbidcYworXCZcfCcgaXMgYSBjaGFyYWN0ZXIgY29uc3RhbnQgZm9yIGEgbmV3bGluZS4KK1N0cmljdGx5IHNwZWFraW5nLCB0aGUgR05VIEMgcHJlcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgYWxsCitwcm9ncmFtcyBpbiBBTlNJIFN0YW5kYXJkIEMgdW5sZXNzIGBcfFxjCisuQiBcLXRyaWdyYXBoc1xjCitcJlx8JyBpcyB1c2VkLCBidXQgaWYKK3lvdSBldmVyIG5vdGljZSB0aGUgZGlmZmVyZW5jZSBpdCB3aWxsIGJlIHdpdGggcmVsaWVmLgorCitZb3UgZG9uJ3Qgd2FudCB0byBrbm93IGFueSBtb3JlIGFib3V0IHRyaWdyYXBocy4KKy5UUAorLkIgXC1wZWRhbnRpYworSXNzdWUgd2FybmluZ3MgcmVxdWlyZWQgYnkgdGhlIEFOU0kgQyBzdGFuZGFyZCBpbiBjZXJ0YWluIGNhc2VzIHN1Y2gKK2FzIHdoZW4gdGV4dCBvdGhlciB0aGFuIGEgY29tbWVudCBmb2xsb3dzIGBcfFxjCisuQiAjZWxzZVxjCitcJlx8JyBvciBgXHxcYworLkIgI2VuZGlmXGMKK1wmXHwnLgorLlRQCisuQiBcLXBlZGFudGljXC1lcnJvcnMKK0xpa2UgYFx8XGMKKy5CIFwtcGVkYW50aWNcYworXCZcfCcsIGV4Y2VwdCB0aGF0IGVycm9ycyBhcmUgcHJvZHVjZWQgcmF0aGVyIHRoYW4KK3dhcm5pbmdzLgorLlRQCisuQiBcLVd0cmlncmFwaHMKK1dhcm4gaWYgYW55IHRyaWdyYXBocyBhcmUgZW5jb3VudGVyZWQgKGFzc3VtaW5nIHRoZXkgYXJlIGVuYWJsZWQpLgorLlRQCisuQiBcLVdjb21tZW50CisuVFAKKy5CIFwtV2NvbW1lbnRzCitXYXJuIHdoZW5ldmVyIGEgY29tbWVudC1zdGFydCBzZXF1ZW5jZSBgXHxcYworLkIgLypcYworXCZcfCcgYXBwZWFycyBpbiBhIGNvbW1lbnQuCisoQm90aCBmb3JtcyBoYXZlIHRoZSBzYW1lIGVmZmVjdCkuCisuVFAKKy5CIFwtV2FsbAorUmVxdWVzdHMgYm90aCBgXHxcYworLkIgXC1XdHJpZ3JhcGhzXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1XY29tbWVudFxjCitcJlx8JyAoYnV0IG5vdAorYFx8XGMKKy5CIFwtV3RyYWRpdGlvbmFsXGMKK1wmXHwnKS4gCisuVFAKKy5CIFwtV3RyYWRpdGlvbmFsCitXYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK0FOU0kgQy4KKy5UUAorLkJJICJcLUkgIiBkaXJlY3RvcnlcYworXCYKK0FkZCB0aGUgZGlyZWN0b3J5IFxjCisuSSBkaXJlY3RvcnlcYworXCYgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBvZgorZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgZm9yIGhlYWRlciBmaWxlcy4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYSBzeXN0ZW0gaGVhZGVyIGZpbGUsIHN1YnN0aXR1dGluZyB5b3VyCitvd24gdmVyc2lvbiwgc2luY2UgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgc3lzdGVtCitoZWFkZXIgZmlsZSBkaXJlY3Rvcmllcy4gIElmIHlvdSB1c2UgbW9yZSB0aGFuIG9uZSBgXHxcYworLkIgXC1JXGMKK1wmXHwnIG9wdGlvbiwKK3RoZSBkaXJlY3RvcmllcyBhcmUgc2Nhbm5lZCBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyOyB0aGUgc3RhbmRhcmQKK3N5c3RlbSBkaXJlY3RvcmllcyBjb21lIGFmdGVyLgorLlRQCisuQiBcLUlcLQorQW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIGBcfFxjCisuQiBcLUlcYworXCZcfCcgb3B0aW9ucyBiZWZvcmUgdGhlIGBcfFxjCisuQiBcLUlcLVxjCitcJlx8Jworb3B0aW9uIGFyZSBzZWFyY2hlZCBvbmx5IGZvciB0aGUgY2FzZSBvZiBgXHxcYworLkIgI2luY2x1ZGUgIlxjCisuSSBmaWxlXGMKK1wmIlxjCitcJlx8JzsKK3RoZXkgYXJlIG5vdCBzZWFyY2hlZCBmb3IgYFx8XGMKKy5CICNpbmNsdWRlIDxcYworLkkgZmlsZVxjCitcJj5cYworXCZcfCcuCisKK0lmIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgYXJlIHNwZWNpZmllZCB3aXRoIGBcfFxjCisuQiBcLUlcYworXCZcfCcgb3B0aW9ucyBhZnRlcgordGhlIGBcfFxjCisuQiBcLUlcLVxjCitcJlx8JywgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGZvciBhbGwgYFx8XGMKKy5CICNpbmNsdWRlXGMKK1wmXHwnCitkaXJlY3RpdmVzLgorCitJbiBhZGRpdGlvbiwgdGhlIGBcfFxjCisuQiBcLUlcLVxjCitcJlx8JyBvcHRpb24gaW5oaWJpdHMgdGhlIHVzZSBvZiB0aGUgY3VycmVudAorZGlyZWN0b3J5IGFzIHRoZSBmaXJzdCBzZWFyY2ggZGlyZWN0b3J5IGZvciBgXHxcYworLkIgI2luY2x1ZGUgIlxjCisuSSBmaWxlXGMKK1wmIlxjCitcJlx8Jy4KK1RoZXJlZm9yZSwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNlYXJjaGVkIG9ubHkgaWYgaXQgaXMgcmVxdWVzdGVkCitleHBsaWNpdGx5IHdpdGggYFx8XGMKKy5CIFwtSS5cYworXCZcfCcuICBTcGVjaWZ5aW5nIGJvdGggYFx8XGMKKy5CIFwtSVwtXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1JLlxjCitcJlx8JworYWxsb3dzIHlvdSB0byBjb250cm9sIHByZWNpc2VseSB3aGljaCBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgYmVmb3JlCit0aGUgY3VycmVudCBvbmUgYW5kIHdoaWNoIGFyZSBzZWFyY2hlZCBhZnRlci4KKy5UUAorLkIgXC1ub3N0ZGluYworRG8gbm90IHNlYXJjaCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzIGZvciBoZWFkZXIgZmlsZXMuCitPbmx5IHRoZSBkaXJlY3RvcmllcyB5b3UgaGF2ZSBzcGVjaWZpZWQgd2l0aCBgXHxcYworLkIgXC1JXGMKK1wmXHwnIG9wdGlvbnMKKyhhbmQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBpZiBhcHByb3ByaWF0ZSkgYXJlIHNlYXJjaGVkLgorLlRQCisuQiBcLW5vc3RkaW5jKysKK0RvIG5vdCBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcyBpbiB0aGUgQysrIHNwZWNpZmljIHN0YW5kYXJkCitkaXJlY3RvcmllcywgYnV0IGRvIHN0aWxsIHNlYXJjaCB0aGUgb3RoZXIgc3RhbmRhcmQgZGlyZWN0b3JpZXMuCisoVGhpcyBvcHRpb24gaXMgdXNlZCB3aGVuIGJ1aWxkaW5nIGxpYmcrKy4pCisuVFAKKy5CSSAiXC1EICIgIm5hbWUiXGMKK1wmCitQcmVkZWZpbmUgXGMKKy5JIG5hbWVcYworXCYgYXMgYSBtYWNybywgd2l0aCBkZWZpbml0aW9uIGBcfFxjCisuQiAxXGMKK1wmXHwnLgorLlRQCisuQkkgIlwtRCAiICJuYW1lIiA9IGRlZmluaXRpb24KK1wmCitQcmVkZWZpbmUgXGMKKy5JIG5hbWVcYworXCYgYXMgYSBtYWNybywgd2l0aCBkZWZpbml0aW9uIFxjCisuSSBkZWZpbml0aW9uXGMKK1wmLgorVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB0aGUgY29udGVudHMgb2YgXGMKKy5JIGRlZmluaXRpb25cYworXCYsIGJ1dCBpZgoreW91IGFyZSBpbnZva2luZyB0aGUgcHJlcHJvY2Vzc29yIGZyb20gYSBzaGVsbCBvciBzaGVsbC1saWtlIHByb2dyYW0KK3lvdSBtYXkgbmVlZCB0byB1c2UgdGhlIHNoZWxsJ3MgcXVvdGluZyBzeW50YXggdG8gcHJvdGVjdCBjaGFyYWN0ZXJzCitzdWNoIGFzIHNwYWNlcyB0aGF0IGhhdmUgYSBtZWFuaW5nIGluIHRoZSBzaGVsbCBzeW50YXguICBJZiB5b3UgdXNlIG1vcmUgdGhhbgorb25lIGBcfFxjCisuQiBcLURcYworXCZcfCcgZm9yIHRoZSBzYW1lCisuSSBuYW1lXGMKK1wmLCB0aGUgcmlnaHRtb3N0IGRlZmluaXRpb24gdGFrZXMgZWZmZWN0LgorLlRQCisuQkkgIlwtVSAiICJuYW1lIlxjCitcJgorRG8gbm90IHByZWRlZmluZSBcYworLkkgbmFtZVxjCitcJi4gIElmIGJvdGggYFx8XGMKKy5CIFwtVVxjCitcJlx8JyBhbmQgYFx8XGMKKy5CIFwtRFxjCitcJlx8JyBhcmUKK3NwZWNpZmllZCBmb3Igb25lIG5hbWUsIHRoZSBgXHxcYworLkIgXC1VXGMKK1wmXHwnIGJlYXRzIHRoZSBgXHxcYworLkIgXC1EXGMKK1wmXHwnIGFuZCB0aGUgbmFtZQoraXMgbm90IHByZWRlZmluZWQuCisuVFAKKy5CIFwtdW5kZWYKK0RvIG5vdCBwcmVkZWZpbmUgYW55IG5vbnN0YW5kYXJkIG1hY3Jvcy4KKy5UUAorLkJJICJcLUEgIiAibmFtZSgiIHZhbHVlICkKK0Fzc2VydCAoaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBcYworLkIgI2Fzc2VydFxjCitcJiBkaXJlY3RpdmUpCit0aGUgcHJlZGljYXRlIFxjCisuSSBuYW1lXGMKK1wmIHdpdGggdG9rZW5saXN0IFxjCisuSSB2YWx1ZVxjCitcJi4gIFJlbWVtYmVyIHRvIGVzY2FwZSBvciBxdW90ZSB0aGUgcGFyZW50aGVzZXMgb24KK3NoZWxsIGNvbW1hbmQgbGluZXMuCisKK1lvdSBjYW4gdXNlIGBcfFxjCisuQiBcLUEtXGMKK1wmXHwnIHRvIGRpc2FibGUgYWxsIHByZWRlZmluZWQgYXNzZXJ0aW9uczsgaXQgYWxzbwordW5kZWZpbmVzIGFsbCBwcmVkZWZpbmVkIG1hY3Jvcy4KKy5UUAorLkIgXC1kTQorSW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZywgb3V0cHV0IGEgbGlzdCBvZgorYFx8XGMKKy5CICNkZWZpbmVcYworXCZcfCcgZGlyZWN0aXZlcyBmb3IgYWxsIHRoZSBtYWNyb3MgZGVmaW5lZCBkdXJpbmcgdGhlCitleGVjdXRpb24gb2YgdGhlIHByZXByb2Nlc3NvciwgaW5jbHVkaW5nIHByZWRlZmluZWQgbWFjcm9zLiAgVGhpcyBnaXZlcworeW91IGEgd2F5IG9mIGZpbmRpbmcgb3V0IHdoYXQgaXMgcHJlZGVmaW5lZCBpbiB5b3VyIHZlcnNpb24gb2YgdGhlCitwcmVwcm9jZXNzb3I7IGFzc3VtaW5nIHlvdSBoYXZlIG5vIGZpbGUgYFx8XGMKKy5CIGZvby5oXGMKK1wmXHwnLCB0aGUgY29tbWFuZAorLnNwCisuYnIKK3RvdWNoXCBmb28uaDtcIGNwcFwgXC1kTVwgZm9vLmgKKy5icgorLnNwCit3aWxsIHNob3cgdGhlIHZhbHVlcyBvZiBhbnkgcHJlZGVmaW5lZCBtYWNyb3MuCisuVFAKKy5CIFwtZEQKK0xpa2UgYFx8XGMKKy5CIFwtZE1cYworXCZcfCcgZXhjZXB0IGluIHR3byByZXNwZWN0czogaXQgZG9lcyBcYworLkkgbm90XGMKK1wmIGluY2x1ZGUgdGhlCitwcmVkZWZpbmVkIG1hY3JvcywgYW5kIGl0IG91dHB1dHMgXGMKKy5JIGJvdGhcYworXCYgdGhlIGBcfFxjCisuQiAjZGVmaW5lXGMKK1wmXHwnCitkaXJlY3RpdmVzIGFuZCB0aGUgcmVzdWx0IG9mIHByZXByb2Nlc3NpbmcuICBCb3RoIGtpbmRzIG9mIG91dHB1dCBnbyB0bwordGhlIHN0YW5kYXJkIG91dHB1dCBmaWxlLgorLlBQCisuVFAKKy5CUiBcLU1cICBbIFwtTUcgXQorSW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZywgb3V0cHV0IGEgcnVsZQorc3VpdGFibGUgZm9yIFxjCisuQiBtYWtlXGMKK1wmIGRlc2NyaWJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbWFpbgorc291cmNlIGZpbGUuICBUaGUgcHJlcHJvY2Vzc29yIG91dHB1dHMgb25lIFxjCisuQiBtYWtlXGMKK1wmIHJ1bGUgY29udGFpbmluZwordGhlIG9iamVjdCBmaWxlIG5hbWUgZm9yIHRoYXQgc291cmNlIGZpbGUsIGEgY29sb24sIGFuZCB0aGUgbmFtZXMgb2YKK2FsbCB0aGUgaW5jbHVkZWQgZmlsZXMuICBJZiB0aGVyZSBhcmUgbWFueSBpbmNsdWRlZCBmaWxlcyB0aGVuIHRoZQorcnVsZSBpcyBzcGxpdCBpbnRvIHNldmVyYWwgbGluZXMgdXNpbmcgYFx8XGMKKy5CIFxcXFxcYworXCZcfCctbmV3bGluZS4KKworYFx8XGMKKy5CIFwtTUdcYworXCZcfCcgc2F5cyB0byB0cmVhdCBtaXNzaW5nIGhlYWRlciBmaWxlcyBhcyBnZW5lcmF0ZWQgZmlsZXMgYW5kIGFzc3VtZSBcYwordGhleSBsaXZlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgc291cmNlIGZpbGUuICBJdCBtdXN0IGJlIHNwZWNpZmllZCBcYworaW4gYWRkaXRpb24gdG8gYFx8XGMKKy5CIFwtTVxjCitcJlx8Jy4KKworVGhpcyBmZWF0dXJlIGlzIHVzZWQgaW4gYXV0b21hdGljIHVwZGF0aW5nIG9mIG1ha2VmaWxlcy4KKy5UUAorLkJSIFwtTU1cICBbIFwtTUcgXQorTGlrZSBgXHxcYworLkIgXC1NXGMKK1wmXHwnIGJ1dCBtZW50aW9uIG9ubHkgdGhlIGZpbGVzIGluY2x1ZGVkIHdpdGggYFx8XGMKKy5CICNpbmNsdWRlCisiXGMKKy5JIGZpbGVcYworXCYiXGMKK1wmXHwnLiAgU3lzdGVtIGhlYWRlciBmaWxlcyBpbmNsdWRlZCB3aXRoIGBcfFxjCisuQiAjaW5jbHVkZQorPFxjCisuSSBmaWxlXGMKK1wmPlxjCitcJlx8JyBhcmUgb21pdHRlZC4KKy5UUAorLkJJIFwtTURcICBmaWxlCitMaWtlIGBcfFxjCisuQiBcLU1cYworXCZcfCcgYnV0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gYFx8XGMKKy5JIGZpbGVcYworXCZcfCcuICBUaGlzIGlzIGluIGFkZGl0aW9uIHRvIGNvbXBpbGluZyB0aGUgZmlsZSBhcworc3BlY2lmaWVkXChlbVwmYFx8XGMKKy5CIFwtTURcYworXCZcfCcgZG9lcyBub3QgaW5oaWJpdCBvcmRpbmFyeSBjb21waWxhdGlvbiB0aGUgd2F5CitgXHxcYworLkIgXC1NXGMKK1wmXHwnIGRvZXMuCisKK1doZW4gaW52b2tpbmcgZ2NjLCBkbyBub3Qgc3BlY2lmeSB0aGUgYFx8XGMKKy5JIGZpbGVcYworXCZcfCcgYXJndW1lbnQuICBHY2Mgd2lsbCBjcmVhdGUgZmlsZSBuYW1lcyBtYWRlIGJ5IHJlcGxhY2luZyBgXHxcYworLkIgLmNcYworXCZcfCcgd2l0aCBgXHxcYworLkIgLmRcYworXCZcfCcgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBuYW1lcy4KKworSW4gTWFjaCwgeW91IGNhbiB1c2UgdGhlIHV0aWxpdHkgXGMKKy5CIG1kXGMKK1wmIHRvIG1lcmdlIG11bHRpcGxlIGZpbGVzCitpbnRvIGEgc2luZ2xlIGRlcGVuZGVuY3kgZmlsZSBzdWl0YWJsZSBmb3IgdXNpbmcgd2l0aCB0aGUgYFx8XGMKKy5CIG1ha2VcYworXCZcfCcKK2NvbW1hbmQuCisuVFAKKy5CSSBcLU1NRFwgIGZpbGUKK0xpa2UgYFx8XGMKKy5CIFwtTURcYworXCZcfCcgZXhjZXB0IG1lbnRpb24gb25seSB1c2VyIGhlYWRlciBmaWxlcywgbm90IHN5c3RlbQoraGVhZGVyIGZpbGVzLgorLlRQCisuQiBcLUgKK1ByaW50IHRoZSBuYW1lIG9mIGVhY2ggaGVhZGVyIGZpbGUgdXNlZCwgaW4gYWRkaXRpb24gdG8gb3RoZXIgbm9ybWFsCithY3Rpdml0aWVzLgorLlRQCisuQkkgIlwtaW1hY3JvcyAiICJmaWxlIlxjCitcJgorUHJvY2VzcyBcYworLkkgZmlsZVxjCitcJiBhcyBpbnB1dCwgZGlzY2FyZGluZyB0aGUgcmVzdWx0aW5nIG91dHB1dCwgYmVmb3JlCitwcm9jZXNzaW5nIHRoZSByZWd1bGFyIGlucHV0IGZpbGUuICBCZWNhdXNlIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGZyb20KK1xjCisuSSBmaWxlXGMKK1wmIGlzIGRpc2NhcmRlZCwgdGhlIG9ubHkgZWZmZWN0IG9mIGBcfFxjCisuQiBcLWltYWNyb3MgXGMKKy5JIGZpbGVcYworXCZcYworXCZcfCcgaXMgdG8KK21ha2UgdGhlIG1hY3JvcyBkZWZpbmVkIGluIFxjCisuSSBmaWxlXGMKK1wmIGF2YWlsYWJsZSBmb3IgdXNlIGluIHRoZSBtYWluCitpbnB1dC4gIFRoZSBwcmVwcm9jZXNzb3IgZXZhbHVhdGVzIGFueSBgXHxcYworLkIgXC1EXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1VXGMKK1wmXHwnIG9wdGlvbnMKK29uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIHByb2Nlc3NpbmcgYFx8XGMKKy5CIFwtaW1hY3JvcyBcYworLkkgZmlsZVxjCitcJlx8JyBcYworXCYuCisuVFAKKy5CSSAiXC1pbmNsdWRlICIgImZpbGUiCitQcm9jZXNzIAorLkkgZmlsZQorYXMgaW5wdXQsIGFuZCBpbmNsdWRlIGFsbCB0aGUgcmVzdWx0aW5nIG91dHB1dCwKK2JlZm9yZSBwcm9jZXNzaW5nIHRoZSByZWd1bGFyIGlucHV0IGZpbGUuICAKKy5UUAorLkJJICItaWRpcmFmdGVyICIgImRpciJcYworXCYKK0FkZCB0aGUgZGlyZWN0b3J5IFxjCisuSSBkaXJcYworXCYgdG8gdGhlIHNlY29uZCBpbmNsdWRlIHBhdGguICBUaGUgZGlyZWN0b3JpZXMKK29uIHRoZSBzZWNvbmQgaW5jbHVkZSBwYXRoIGFyZSBzZWFyY2hlZCB3aGVuIGEgaGVhZGVyIGZpbGUgaXMgbm90IGZvdW5kCitpbiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSBtYWluIGluY2x1ZGUgcGF0aCAodGhlIG9uZSB0aGF0CitgXHxcYworLkIgXC1JXGMKK1wmXHwnIGFkZHMgdG8pLgorLlRQCisuQkkgIi1pcHJlZml4ICIgInByZWZpeCJcYworXCYKK1NwZWNpZnkgXGMKKy5JIHByZWZpeFxjCitcJiBhcyB0aGUgcHJlZml4IGZvciBzdWJzZXF1ZW50IGBcfFxjCisuQiBcLWl3aXRocHJlZml4XGMKK1wmXHwnCitvcHRpb25zLgorLlRQCisuQkkgIi1pd2l0aHByZWZpeCAiICJkaXIiXGMKK1wmCitBZGQgYSBkaXJlY3RvcnkgdG8gdGhlIHNlY29uZCBpbmNsdWRlIHBhdGguICBUaGUgZGlyZWN0b3J5J3MgbmFtZSBpcworbWFkZSBieSBjb25jYXRlbmF0aW5nIFxjCisuSSBwcmVmaXhcYworXCYgYW5kIFxjCisuSSBkaXJcYworXCYsIHdoZXJlIFxjCisuSSBwcmVmaXhcYworXCYKK3dhcyBzcGVjaWZpZWQgcHJldmlvdXNseSB3aXRoIGBcfFxjCisuQiBcLWlwcmVmaXhcYworXCZcfCcuCisuVFAKKy5CIFwtbGFuZy1jCisuVFAKKy5CIFwtbGFuZy1jKysKKy5UUAorLkIgXC1sYW5nLW9iamMKKy5UUAorLkIgXC1sYW5nLW9iamMrKworU3BlY2lmeSB0aGUgc291cmNlIGxhbmd1YWdlLiAgYFx8XGMKKy5CIFwtbGFuZy1jKytcYworXCZcfCcgbWFrZXMgdGhlIHByZXByb2Nlc3NvcgoraGFuZGxlIEMrKyBjb21tZW50IHN5bnRheCwgYW5kIGluY2x1ZGVzIGV4dHJhIGRlZmF1bHQgaW5jbHVkZQorZGlyZWN0b3JpZXMgZm9yIEMrKywgYW5kIGBcfFxjCisuQiBcLWxhbmctb2JqY1xjCitcJlx8JyBlbmFibGVzIHRoZSBPYmplY3RpdmUgQworYFx8XGMKKy5CICNpbXBvcnRcYworXCZcfCcgZGlyZWN0aXZlLiAgYFx8XGMKKy5CIFwtbGFuZy1jXGMKK1wmXHwnIGV4cGxpY2l0bHkgdHVybnMgb2ZmIGJvdGggb2YKK3RoZXNlIGV4dGVuc2lvbnMsIGFuZCBgXHxcYworLkIgXC1sYW5nLW9iamMrK1xjCitcJlx8JyBlbmFibGVzIGJvdGguCisKK1RoZXNlIG9wdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgZHJpdmVyIFxjCisuQiBnY2NcYworXCYsIGJ1dCBub3QKK3Bhc3NlZCBmcm9tIHRoZSBgXHxcYworLkIgZ2NjXGMKK1wmXHwnIGNvbW1hbmQgbGluZS4KKy5UUAorLkIgXC1saW50CitMb29rIGZvciBjb21tYW5kcyB0byB0aGUgcHJvZ3JhbSBjaGVja2VyIFxjCisuQiBsaW50XGMKK1wmIGVtYmVkZGVkIGluCitjb21tZW50cywgYW5kIGVtaXQgdGhlbSBwcmVjZWRlZCBieSBgXHxcYworLkIgI3ByYWdtYSBsaW50XGMKK1wmXHwnLiAgRm9yIGV4YW1wbGUsCit0aGUgY29tbWVudCBgXHxcYworLkIgLyogTk9UUkVBQ0hFRCAqL1xjCitcJlx8JyBiZWNvbWVzIGBcfFxjCisuQiAjcHJhZ21hIGxpbnQKK05PVFJFQUNIRURcYworXCZcfCcuCisKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IHdoZW4geW91IGNhbGwgXGMKKy5CIGNwcFxjCitcJiBkaXJlY3RseTsKK1xjCisuQiBnY2NcYworXCYgd2lsbCBub3QgcGFzcyBpdCBmcm9tIGl0cyBjb21tYW5kIGxpbmUuCisuVFAKKy5CIFwtJAorRm9yYmlkIHRoZSB1c2Ugb2YgYFx8XGMKKy5CICRcYworXCZcfCcgaW4gaWRlbnRpZmllcnMuICBUaGlzIHdhcyBmb3JtZXJseSByZXF1aXJlZCBmb3Igc3RyaWN0IGNvbmZvcm1hbmNlCit0byB0aGUgQyBTdGFuZGFyZCBiZWZvcmUgdGhlIHN0YW5kYXJkIHdhcyBjb3JyZWN0ZWQuICBcYworCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb25seSB3aGVuIHlvdSBjYWxsIFxjCisuQiBjcHBcYworXCYgZGlyZWN0bHk7CisuQiBnY2NcYworXCYgd2lsbCBub3QgcGFzcyBpdCBmcm9tIGl0cyBjb21tYW5kIGxpbmUuCisuU0ggIlNFRSBBTFNPIgorLlJCICJgXHwiIENwcCAiXHwnIgorZW50cnkgaW4KKy5CIGluZm9cYworXCY7CisuSSBUaGUgQyBQcmVwcm9jZXNzb3JcYworLCBSaWNoYXJkIE0uIFN0YWxsbWFuLgorLmJyCisuQlIgZ2NjICIoIiAxICIpOyIKKy5SQiAiYFx8IiBHY2MgIlx8JyIKK2VudHJ5IGluIAorLkIgaW5mb1xjCitcJjsKKy5JIAorVXNpbmcgYW5kIFBvcnRpbmcgR05VIENDIChmb3IgdmVyc2lvbiAyLjApXGMKKywgUmljaGFyZCBNLiBTdGFsbG1hbi4KKy5TSCBDT1BZSU5HCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBtYWtlIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZgordGhpcyBtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKK2FyZSBwcmVzZXJ2ZWQgb24gYWxsIGNvcGllcy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciB2ZXJiYXRpbSBjb3B5aW5nLCBwcm92aWRlZCB0aGF0IHRoZQorZW50aXJlIHJlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEKK3Blcm1pc3Npb24gbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMKK21hbnVhbCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZAordmVyc2lvbnMsIGV4Y2VwdCB0aGF0IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgbWF5IGJlIGluY2x1ZGVkIGluCit0cmFuc2xhdGlvbnMgYXBwcm92ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbnN0ZWFkIG9mIGluCit0aGUgb3JpZ2luYWwgRW5nbGlzaC4KZGlmZiAtLWdpdCBhL2djYy9jZXhwLmMgYi9nY2MvY2V4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjJjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY2V4cC5jCkBAIC0wLDAgKzEsMjE0MiBAQAorCisvKiAgQSBCaXNvbiBwYXJzZXIsIG1hZGUgZnJvbSBjZXhwLnkgd2l0aCBCaXNvbiB2ZXJzaW9uIEdOVSBCaXNvbiB2ZXJzaW9uIDEuMjQKKyAgKi8KKworI2RlZmluZSBZWUJJU09OIDEgIC8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisKKyNkZWZpbmUJSU5UCTI1OAorI2RlZmluZQlDSEFSCTI1OQorI2RlZmluZQlOQU1FCTI2MAorI2RlZmluZQlFUlJPUgkyNjEKKyNkZWZpbmUJT1IJMjYyCisjZGVmaW5lCUFORAkyNjMKKyNkZWZpbmUJRVFVQUwJMjY0CisjZGVmaW5lCU5PVEVRVUFMCTI2NQorI2RlZmluZQlMRVEJMjY2CisjZGVmaW5lCUdFUQkyNjcKKyNkZWZpbmUJTFNICTI2OAorI2RlZmluZQlSU0gJMjY5CisjZGVmaW5lCVVOQVJZCTI3MAorCisjbGluZSAyNyAiY2V4cC55IgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c2V0am1wLmg+CisvKiAjZGVmaW5lIFlZREVCVUcgMSAqLworCisvKiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgc2hvdWxkIGJlIGF1dG9jb25maWd1cmVkOgorCUhBVkVfU1RETElCX0gKKwlTVERDX0hFQURFUlMKKyAgIEluIHRoZSBtZWFuIHRpbWUsIHdlJ2xsIGdldCBieSB3aXRoIGFwcHJveGltYXRpb25zIGJhc2VkCisgICBvbiBleGlzdGluZyBHQ0MgY29uZmlndXJhdGlvbiBzeW1ib2xzLiAgKi8KKworI2lmZGVmIFBPU0lYCisjIGlmbmRlZiBIQVZFX1NURExJQl9ICisjIGRlZmluZSBIQVZFX1NURExJQl9IIDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNURENfSEVBREVSUworIyBkZWZpbmUgU1REQ19IRUFERVJTIDEKKyMgZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkIChQT1NJWCkgKi8KKworI2lmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9TVERMSUJfSCB8fCBkZWZpbmVkIChNVUxUSUJZVEVfQ0hBUlMpCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpZmRlZiBNVUxUSUJZVEVfQ0hBUlMKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVfQ0hBUjsKKworLyogVGhpcyBpcyB1c2VkIGZvciBjb21tdW5pY2F0aW5nIGxpc3RzIG9mIGtleXdvcmRzIHdpdGggY2NjcC5jLiAgKi8KK3N0cnVjdCBhcmdsaXN0IHsKKyAgc3RydWN0IGFyZ2xpc3QgKm5leHQ7CisgIFVfQ0hBUiAqbmFtZTsKKyAgaW50IGxlbmd0aDsKKyAgaW50IGFyZ25vOworfTsKKworLyogRGVmaW5lIGEgZ2VuZXJpYyBOVUxMIGlmIG9uZSBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRlZmluZWQuICAqLworCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2lmbmRlZiBHRU5FUklDX1BUUgorI2lmIGRlZmluZWQgKFVTRV9QUk9UT1RZUEVTKSA/IFVTRV9QUk9UT1RZUEVTIDogZGVmaW5lZCAoX19TVERDX18pCisjZGVmaW5lIEdFTkVSSUNfUFRSIHZvaWQgKgorI2Vsc2UKKyNkZWZpbmUgR0VORVJJQ19QVFIgY2hhciAqCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5VTExfUFRSCisjZGVmaW5lIE5VTExfUFRSICgoR0VORVJJQ19QVFIpIDApCisjZW5kaWYKKworLyogRmluZCB0aGUgbGFyZ2VzdCBob3N0IGludGVnZXIgdHlwZSBhbmQgc2V0IGl0cyBzaXplIGFuZCB0eXBlLgorICAgRG9uJ3QgYmxpbmRseSB1c2UgYGxvbmcnOyBvbiBzb21lIGNyYXp5IGhvc3RzIGl0IGlzIHNob3J0ZXIgdGhhbiBgaW50Jy4gICovCisKKyNpZm5kZWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVAorCisjaWYgSE9TVF9CSVRTX1BFUl9MT05HID4gSE9TVF9CSVRTX1BFUl9JTlQKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBIT1NUX0JJVFNfUEVSX0xPTkcKKyNkZWZpbmUgSE9TVF9XSURFX0lOVCBsb25nCisjZWxzZQorI2RlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIEhPU1RfQklUU19QRVJfSU5UCisjZGVmaW5lIEhPU1RfV0lERV9JTlQgaW50CisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQorI2VuZGlmCisKKyNpZm5kZWYgUFJPVE8KKyMgaWYgZGVmaW5lZCAoVVNFX1BST1RPVFlQRVMpID8gVVNFX1BST1RPVFlQRVMgOiBkZWZpbmVkIChfX1NURENfXykKKyMgIGRlZmluZSBQUk9UTyhBUkdTKSBBUkdTCisjIGVsc2UKKyMgIGRlZmluZSBQUk9UTyhBUkdTKSAoKQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgZGVmaW5lZCAoSEFWRV9WUFJJTlRGKQorIyBpbmNsdWRlIDxzdGRhcmcuaD4KKyMgZGVmaW5lIFZBX1NUQVJUKHZhX2xpc3QsIHZhcikgdmFfc3RhcnQgKHZhX2xpc3QsIHZhcikKKyMgZGVmaW5lIFBSSU5URl9BTElTVChtc2cpIGNoYXIgKm1zZywgLi4uCisjIGRlZmluZSBQUklOVEZfRENMKG1zZykKKyMgZGVmaW5lIFBSSU5URl9QUk9UTyhBUkdTLCBtLCBuKSBQUk9UTyAoQVJHUykgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAoX19wcmludGZfXywgbSwgbikpKQorI2Vsc2UKKyMgaW5jbHVkZSA8dmFyYXJncy5oPgorIyBkZWZpbmUgVkFfU1RBUlQodmFfbGlzdCwgdmFyKSB2YV9zdGFydCAodmFfbGlzdCkKKyMgZGVmaW5lIFBSSU5URl9BTElTVChtc2cpIG1zZywgdmFfYWxpc3QKKyMgZGVmaW5lIFBSSU5URl9EQ0wobXNnKSBjaGFyICptc2c7IHZhX2RjbAorIyBkZWZpbmUgUFJJTlRGX1BST1RPKEFSR1MsIG0sIG4pICgpIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKF9fcHJpbnRmX18sIG0sIG4pKSkKKyMgZGVmaW5lIHZmcHJpbnRmKGZpbGUsIG1zZywgYXJncykgXAorICAgIHsgXAorICAgICAgY2hhciAqYTAgPSB2YV9hcmcoYXJncywgY2hhciAqKTsgXAorICAgICAgY2hhciAqYTEgPSB2YV9hcmcoYXJncywgY2hhciAqKTsgXAorICAgICAgY2hhciAqYTIgPSB2YV9hcmcoYXJncywgY2hhciAqKTsgXAorICAgICAgY2hhciAqYTMgPSB2YV9hcmcoYXJncywgY2hhciAqKTsgXAorICAgICAgZnByaW50ZiAoZmlsZSwgbXNnLCBhMCwgYTEsIGEyLCBhMyk7IFwKKyAgICB9CisjZW5kaWYKKworI2RlZmluZSBQUklOVEZfUFJPVE9fMShBUkdTKSBQUklOVEZfUFJPVE8oQVJHUywgMSwgMikKKworSE9TVF9XSURFX0lOVCBwYXJzZV9jX2V4cHJlc3Npb24gUFJPVE8oKGNoYXIgKikpOworCitzdGF0aWMgaW50IHl5bGV4IFBST1RPKCh2b2lkKSk7CitzdGF0aWMgdm9pZCB5eWVycm9yIFBST1RPKChjaGFyICopKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK3N0YXRpYyBIT1NUX1dJREVfSU5UIGV4cHJlc3Npb25fdmFsdWU7CisKK3N0YXRpYyBqbXBfYnVmIHBhcnNlX3JldHVybl9lcnJvcjsKKworLyogTm9uemVybyBtZWFucyBjb3VudCBtb3N0IHB1bmN0dWF0aW9uIGFzIHBhcnQgb2YgYSBuYW1lLiAgKi8KK3N0YXRpYyBpbnQga2V5d29yZF9wYXJzaW5nID0gMDsKKworLyogTm9uemVybyBtZWFucyBkbyBub3QgZXZhbHVhdGUgdGhpcyBleHByZXNzaW9uLgorICAgVGhpcyBpcyBhIGNvdW50LCBzaW5jZSB1bmV2YWx1YXRlZCBleHByZXNzaW9ucyBjYW4gbmVzdC4gICovCitzdGF0aWMgaW50IHNraXBfZXZhbHVhdGlvbjsKKworLyogc29tZSBleHRlcm5hbCB0YWJsZXMgb2YgY2hhcmFjdGVyIHR5cGVzICovCitleHRlcm4gdW5zaWduZWQgY2hhciBpc19pZHN0YXJ0W10sIGlzX2lkY2hhcltdLCBpc19zcGFjZVtdOworCisvKiBGbGFnIGZvciAtcGVkYW50aWMuICAqLworZXh0ZXJuIGludCBwZWRhbnRpYzsKKworLyogRmxhZyBmb3IgLXRyYWRpdGlvbmFsLiAgKi8KK2V4dGVybiBpbnQgdHJhZGl0aW9uYWw7CisKKy8qIEZsYWcgZm9yIC1sYW5nLWM4OS4gICovCitleHRlcm4gaW50IGM4OTsKKworLyogRmxhZyBmb3IgLVd1bmRlZi4gICovCitleHRlcm4gaW50IHdhcm5fdW5kZWY7CisKKyNpZm5kZWYgQ0hBUl9UWVBFX1NJWkUKKyNkZWZpbmUgQ0hBUl9UWVBFX1NJWkUgQklUU19QRVJfVU5JVAorI2VuZGlmCisKKyNpZm5kZWYgSU5UX1RZUEVfU0laRQorI2RlZmluZSBJTlRfVFlQRV9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfVFlQRV9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIFdDSEFSX1RZUEVfU0laRQorI2RlZmluZSBXQ0hBUl9UWVBFX1NJWkUgSU5UX1RZUEVfU0laRQorI2VuZGlmCisKKyNpZm5kZWYgTUFYX0NIQVJfVFlQRV9TSVpFCisjZGVmaW5lIE1BWF9DSEFSX1RZUEVfU0laRSBDSEFSX1RZUEVfU0laRQorI2VuZGlmCisKKyNpZm5kZWYgTUFYX0lOVF9UWVBFX1NJWkUKKyNkZWZpbmUgTUFYX0lOVF9UWVBFX1NJWkUgSU5UX1RZUEVfU0laRQorI2VuZGlmCisKKyNpZm5kZWYgTUFYX0xPTkdfVFlQRV9TSVpFCisjZGVmaW5lIE1BWF9MT05HX1RZUEVfU0laRSBMT05HX1RZUEVfU0laRQorI2VuZGlmCisKKyNpZm5kZWYgTUFYX1dDSEFSX1RZUEVfU0laRQorI2RlZmluZSBNQVhfV0NIQVJfVFlQRV9TSVpFIFdDSEFSX1RZUEVfU0laRQorI2VuZGlmCisKKyNpZiBNQVhfQ0hBUl9UWVBFX1NJWkUgPCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UCisjZGVmaW5lIE1BWF9DSEFSX1RZUEVfTUFTSyAofiAofiAoSE9TVF9XSURFX0lOVCkgMCA8PCBNQVhfQ0hBUl9UWVBFX1NJWkUpKQorI2Vsc2UKKyNkZWZpbmUgTUFYX0NIQVJfVFlQRV9NQVNLICh+IChIT1NUX1dJREVfSU5UKSAwKQorI2VuZGlmCisKKyNpZiBNQVhfV0NIQVJfVFlQRV9TSVpFIDwgSE9TVF9CSVRTX1BFUl9XSURFX0lOVAorI2RlZmluZSBNQVhfV0NIQVJfVFlQRV9NQVNLICh+ICh+IChIT1NUX1dJREVfSU5UKSAwIDw8IE1BWF9XQ0hBUl9UWVBFX1NJWkUpKQorI2Vsc2UKKyNkZWZpbmUgTUFYX1dDSEFSX1RZUEVfTUFTSyAofiAoSE9TVF9XSURFX0lOVCkgMCkKKyNlbmRpZgorCisvKiBTdXBwb3NlIEExICsgQjEgPSBTVU0xLCB1c2luZyAyJ3MgY29tcGxlbWVudCBhcml0aG1ldGljIGlnbm9yaW5nIG92ZXJmbG93LgorICAgU3VwcG9zZSBBLCBCIGFuZCBTVU0gaGF2ZSB0aGUgc2FtZSByZXNwZWN0aXZlIHNpZ25zIGFzIEExLCBCMSwgYW5kIFNVTTEuCisgICBTdXBwb3NlIFNJR05FRFAgaXMgbmVnYXRpdmUgaWYgdGhlIHJlc3VsdCBpcyBzaWduZWQsIHplcm8gaWYgdW5zaWduZWQuCisgICBUaGVuIHRoaXMgeWllbGRzIG5vbnplcm8gaWYgb3ZlcmZsb3cgb2NjdXJyZWQgZHVyaW5nIHRoZSBhZGRpdGlvbi4KKyAgIE92ZXJmbG93IG9jY3VycyBpZiBBIGFuZCBCIGhhdmUgdGhlIHNhbWUgc2lnbiwgYnV0IEEgYW5kIFNVTSBkaWZmZXIgaW4gc2lnbiwKKyAgIGFuZCBTSUdORURQIGlzIG5lZ2F0aXZlLgorICAgVXNlIGBeJyB0byB0ZXN0IHdoZXRoZXIgc2lnbnMgZGlmZmVyLCBhbmQgYDwgMCcgdG8gaXNvbGF0ZSB0aGUgc2lnbi4gICovCisjZGVmaW5lIG92ZXJmbG93X3N1bV9zaWduKGEsIGIsIHN1bSwgc2lnbmVkcCkgXAorCSgofigoYSkgXiAoYikpICYgKChhKSBeIChzdW0pKSAmIChzaWduZWRwKSkgPCAwKQorCitzdHJ1Y3QgY29uc3RhbnQ7CisKK0dFTkVSSUNfUFRSIHhtYWxsb2MgUFJPVE8oKHNpemVfdCkpOworSE9TVF9XSURFX0lOVCBwYXJzZV9lc2NhcGUgUFJPVE8oKGNoYXIgKiosIEhPU1RfV0lERV9JTlQpKTsKK2ludCBjaGVja19hc3NlcnRpb24gUFJPVE8oKFVfQ0hBUiAqLCBpbnQsIGludCwgc3RydWN0IGFyZ2xpc3QgKikpOworc3RydWN0IGhhc2hub2RlICpsb29rdXAgUFJPVE8oKFVfQ0hBUiAqLCBpbnQsIGludCkpOwordm9pZCBlcnJvciBQUklOVEZfUFJPVE9fMSgoY2hhciAqLCAuLi4pKTsKK3ZvaWQgcGVkd2FybiBQUklOVEZfUFJPVE9fMSgoY2hhciAqLCAuLi4pKTsKK3ZvaWQgd2FybmluZyBQUklOVEZfUFJPVE9fMSgoY2hhciAqLCAuLi4pKTsKKworc3RhdGljIGludCBwYXJzZV9udW1iZXIgUFJPVE8oKGludCkpOworc3RhdGljIEhPU1RfV0lERV9JTlQgbGVmdF9zaGlmdCBQUk9UTygoc3RydWN0IGNvbnN0YW50ICosIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpKTsKK3N0YXRpYyBIT1NUX1dJREVfSU5UIHJpZ2h0X3NoaWZ0IFBST1RPKChzdHJ1Y3QgY29uc3RhbnQgKiwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCkpOworc3RhdGljIHZvaWQgaW50ZWdlcl9vdmVyZmxvdyBQUk9UTygodm9pZCkpOworCisvKiBgc2lnbmVkcCcgdmFsdWVzICovCisjZGVmaW5lIFNJR05FRCAofjApCisjZGVmaW5lIFVOU0lHTkVEIDAKKworI2xpbmUgMjQ0ICJjZXhwLnkiCit0eXBlZGVmIHVuaW9uIHsKKyAgc3RydWN0IGNvbnN0YW50IHtIT1NUX1dJREVfSU5UIHZhbHVlOyBpbnQgc2lnbmVkcDt9IGludGVnZXI7CisgIHN0cnVjdCBuYW1lIHtVX0NIQVIgKmFkZHJlc3M7IGludCBsZW5ndGg7fSBuYW1lOworICBzdHJ1Y3QgYXJnbGlzdCAqa2V5d29yZHM7Cit9IFlZU1RZUEU7CisKKyNpZm5kZWYgWVlMVFlQRQordHlwZWRlZgorICBzdHJ1Y3QgeXlsdHlwZQorICAgIHsKKyAgICAgIGludCB0aW1lc3RhbXA7CisgICAgICBpbnQgZmlyc3RfbGluZTsKKyAgICAgIGludCBmaXJzdF9jb2x1bW47CisgICAgICBpbnQgbGFzdF9saW5lOworICAgICAgaW50IGxhc3RfY29sdW1uOworICAgICAgY2hhciAqdGV4dDsKKyAgIH0KKyAgeXlsdHlwZTsKKworI2RlZmluZSBZWUxUWVBFIHl5bHR5cGUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZiBfX2NwbHVzcGx1cworI2lmbmRlZiBfX1NURENfXworI2RlZmluZSBjb25zdAorI2VuZGlmCisjZW5kaWYKKworCisKKyNkZWZpbmUJWVlGSU5BTAkJNzcKKyNkZWZpbmUJWVlGTEFHCQktMzI3NjgKKyNkZWZpbmUJWVlOVEJBU0UJMzQKKworI2RlZmluZSBZWVRSQU5TTEFURSh4KSAoKHVuc2lnbmVkKSh4KSA8PSAyNzAgPyB5eXRyYW5zbGF0ZVt4XSA6IDQzKQorCitzdGF0aWMgY29uc3QgY2hhciB5eXRyYW5zbGF0ZVtdID0geyAgICAgMCwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgIDI5LCAgICAgMiwgICAgMzEsICAgICAyLCAgICAyNywgICAgMTQsICAgICAyLCAgICAzMiwKKyAgICAzMywgICAgMjUsICAgIDIzLCAgICAgOSwgICAgMjQsICAgICAyLCAgICAyNiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDgsICAgICAyLCAgICAxNywKKyAgICAgMiwgICAgMTgsICAgICA3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMiwgICAgIDIsICAgIDMwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgNiwgICAgMTAsICAgIDExLCAgICAxNSwgICAgMTYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyOAorfTsKKworI2lmIFlZREVCVUcgIT0gMAorc3RhdGljIGNvbnN0IHNob3J0IHl5cHJoc1tdID0geyAgICAgMCwKKyAgICAgMCwgICAgIDIsICAgICA0LCAgICAgOCwgICAgMTEsICAgIDE0LCAgICAxNywgICAgMjAsICAgIDIzLCAgICAyNCwKKyAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAgNTksICAgIDYzLCAgICA2NywKKyAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4MywgICAgODcsICAgIDkxLCAgICA5NSwgICAgOTksICAgMTAwLCAgIDEwNSwKKyAgIDEwNiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI4LCAgIDEzMworfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cmhzW10gPSB7ICAgIDM1LAorICAgICAwLCAgICAzNiwgICAgIDAsICAgIDM1LCAgICAgOSwgICAgMzYsICAgICAwLCAgICAyNCwgICAgMzYsICAgICAwLAorICAgIDI5LCAgICAzNiwgICAgIDAsICAgIDIzLCAgICAzNiwgICAgIDAsICAgIDMwLCAgICAzNiwgICAgIDAsICAgIDMxLAorICAgICA1LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAgNSwgICAgMzcsICAgIDMyLCAgICA0MiwgICAgMzMsICAgICAwLAorICAgIDMyLCAgICAzNSwgICAgMzMsICAgICAwLCAgICAzNiwgICAgMjUsICAgIDM2LCAgICAgMCwgICAgMzYsICAgIDI2LAorICAgIDM2LCAgICAgMCwgICAgMzYsICAgIDI3LCAgICAzNiwgICAgIDAsICAgIDM2LCAgICAyMywgICAgMzYsICAgICAwLAorICAgIDM2LCAgICAyNCwgICAgMzYsICAgICAwLCAgICAzNiwgICAgMjEsICAgIDM2LCAgICAgMCwgICAgMzYsICAgIDIyLAorICAgIDM2LCAgICAgMCwgICAgMzYsICAgIDE1LCAgICAzNiwgICAgIDAsICAgIDM2LCAgICAxNiwgICAgMzYsICAgICAwLAorICAgIDM2LCAgICAxOSwgICAgMzYsICAgICAwLCAgICAzNiwgICAgMjAsICAgIDM2LCAgICAgMCwgICAgMzYsICAgIDE3LAorICAgIDM2LCAgICAgMCwgICAgMzYsICAgIDE4LCAgICAzNiwgICAgIDAsICAgIDM2LCAgICAxNCwgICAgMzYsICAgICAwLAorICAgIDM2LCAgICAxMywgICAgMzYsICAgICAwLCAgICAzNiwgICAgMTIsICAgIDM2LCAgICAgMCwgICAgIDAsICAgIDM2LAorICAgIDExLCAgICAzOCwgICAgMzYsICAgICAwLCAgICAgMCwgICAgMzYsICAgIDEwLCAgICAzOSwgICAgMzYsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMzYsICAgICA3LCAgICA0MCwgICAgMzYsICAgICA4LCAgICA0MSwgICAgMzYsICAgICAwLAorICAgICAzLCAgICAgMCwgICAgIDQsICAgICAwLCAgICAgNSwgICAgIDAsICAgICAwLCAgICAzMiwgICAgNDIsICAgIDMzLAorICAgIDQyLCAgICAgMCwgICAgIDUsICAgIDQyLCAgICAgMAorfTsKKworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXJsaW5lW10gPSB7IDAsCisgICAyNzQsICAgMjc5LCAgIDI4MCwgICAyODcsICAgMjkyLCAgIDI5NSwgICAyOTcsICAgMzAwLCAgIDMwNCwgICAzMDYsCisgICAzMTEsICAgMzE2LCAgIDMyOSwgICAzNDYsICAgMzU5LCAgIDM2NSwgICAzNzEsICAgMzc3LCAgIDM4MywgICAzODYsCisgICAzODksICAgMzk2LCAgIDQwMywgICA0MTAsICAgNDE3LCAgIDQyMCwgICA0MjMsICAgNDI2LCAgIDQyOSwgICA0MzIsCisgICA0MzUsICAgNDM4LCAgIDQ0MCwgICA0NDMsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDU4LCAgIDQ2MCwgICA0NzMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgeXl0bmFtZVtdID0geyAgICIkIiwiZXJyb3IiLCIkdW5kZWZpbmVkLiIsIklOVCIsIkNIQVIiLAorIk5BTUUiLCJFUlJPUiIsIic/JyIsIic6JyIsIicsJyIsIk9SIiwiQU5EIiwiJ3wnIiwiJ14nIiwiJyYnIiwiRVFVQUwiLCJOT1RFUVVBTCIsCisiJzwnIiwiJz4nIiwiTEVRIiwiR0VRIiwiTFNIIiwiUlNIIiwiJysnIiwiJy0nIiwiJyonIiwiJy8nIiwiJyUnIiwiVU5BUlkiLCInISciLAorIid+JyIsIicjJyIsIicoJyIsIicpJyIsInN0YXJ0IiwiZXhwMSIsImV4cCIsIkAxIiwiQDIiLCJAMyIsIkA0IiwiQDUiLCJrZXl3b3JkcyIsCisiIgorfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyMVtdID0geyAgICAgMCwKKyAgICAzNCwgICAgMzUsICAgIDM1LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM3LCAgICAzNiwKKyAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwKKyAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzgsICAgIDM2LCAgICAzOSwKKyAgICAzNiwgICAgNDAsICAgIDQxLCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgNDIsICAgIDQyLCAgICA0MgorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cjJbXSA9IHsgICAgIDAsCisgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDYsCisgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAwLCAgICAgNCwgICAgIDAsCisgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgNCwgICAgIDIKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmFjdFtdID0geyAgICAgMCwKKyAgICAzNSwgICAgMzYsICAgIDM3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMSwKKyAgICAgMiwgICAgIDYsICAgICA0LCAgICAgNSwgICAgIDcsICAgICA4LCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAzMCwKKyAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAgMywKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNywgICAgMjYsICAgIDI1LCAgICAxOSwgICAgMjAsICAgIDIzLCAgICAyNCwKKyAgICAyMSwgICAgMjIsICAgIDE3LCAgICAxOCwgICAgMTUsICAgIDE2LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAzOCwKKyAgICAgMCwgICAgMzEsICAgIDI5LCAgICAzOCwgICAgMzgsICAgICAwLCAgICAzMywgICAgNDAsICAgICAwLCAgICAxMCwKKyAgICAgMCwgICAgMzgsICAgIDM0LCAgICAzOSwgICAgIDAsICAgICAwLCAgICAgMAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmZ290b1tdID0geyAgICA3NSwKKyAgICAxMCwgICAgMTEsICAgIDM4LCAgICA0MywgICAgNDIsICAgIDQxLCAgICA3MSwgICAgNjYKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXBhY3RbXSA9IHsgICAgMTIsCistMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgMTIsICAgIDEyLCAgICAxMiwgICAgMTIsICAgICAxLCAgICAxMiwgICAgIDQsCisgICAgNzksLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIC0yMSwgICAgMzEsICAgIDEyLC0zMjc2OCwtMzI3NjgsCistMzI3NjgsICAgIDEyLCAgICAxMiwgICAgMTIsICAgIDEyLCAgICAxMiwgICAgMTIsICAgIDEyLCAgICAxMiwgICAgMTIsCisgICAgMTIsICAgIDEyLCAgICAxMiwgICAgMTIsICAgIDEyLCAgICAxMiwgICAgMTIsICAgIDMwLC0zMjc2OCwgICAgNzksCisgICAgMTIsICAgIDEyLCAgICAxMiwgICAxMTAsICAgMTI0LCAgIDEzNywgICAxNDgsICAgMTQ4LCAgIDE1NSwgICAxNTUsCisgICAxNTUsICAgMTU1LCAgIDE2MCwgICAxNjAsICAgLTE3LCAgIC0xNywtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgIDIsCisgICAgNTgsICAgIDM0LCAgICA5NSwgICAgIDIsICAgICAyLCAgICA1NCwtMzI3NjgsLTMyNzY4LCAgICA1NSwtMzI3NjgsCisgICAgMTIsICAgICAyLCAgICA3OSwtMzI3NjgsICAgIDYzLCAgIDE4OCwtMzI3NjgKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXBnb3RvW10gPSB7LTMyNzY4LAorICAgMTgwLCAgICAtNCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIC02MAorfTsKKworCisjZGVmaW5lCVlZTEFTVAkJMTg5CisKKworc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9IHsgICAgMTIsCisgICAgMTMsICAgIDE0LCAgICAxNSwgICAgNjgsICAgIDY5LCAgICAxNiwgICAgNjQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgLTksICAgIDc0LCAgICAxOCwgICAgNDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsCisgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjUsICAgICA0LCAgICAgNSwgICAgNjEsICAgIDYyLCAgICA2MywgICAgMTgsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgMzcsICAgIDYwLCAgICA3NiwgICAgMzksICAgIDE5LCAgICA2NywgICAgNzMsICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAxOSwgICAgNzAsICAgIDcyLCAgICAyMCwgICAgMjEsCisgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgMzYsICAgIDM3LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgMzcsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgMzYsICAgIDM3LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDc3LCAgICAxNworfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5Y2hlY2tbXSA9IHsgICAgIDQsCisgICAgIDUsICAgICA2LCAgICAgNywgICAgNjQsICAgIDY1LCAgICAgNSwgICAgIDUsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgMzIsICAgIDcyLCAgICAgOSwgICAgMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzIsICAgIDIzLCAgICAyNCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgIDksCisgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgMjcsICAgIDMyLCAgICAgMCwgICAgMzMsICAgICA3LCAgICAgOCwgICAgNzEsICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAgNywgICAgMzMsICAgIDMzLCAgICAxMCwgICAgMTEsCisgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgMjYsICAgIDI3LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgMjcsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgMjYsICAgIDI3LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgICAwLCAgICAgOQorfTsKKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisjbGluZSAzICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uLnNpbXBsZSIKKworLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyBjb3BpZWQgYnkgQmlzb24gaW50byBhCisgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICAgaW4gdmVyc2lvbiAxLjI0IG9mIEJpc29uLiAgKi8KKworI2lmbmRlZiBhbGxvY2EKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorI2Vsc2UgLyogbm90IEdOVSBDLiAgKi8KKyNpZiAoIWRlZmluZWQgKF9fU1REQ19fKSAmJiBkZWZpbmVkIChzcGFyYykpIHx8IGRlZmluZWQgKF9fc3BhcmNfXykgfHwgZGVmaW5lZCAoX19zcGFyYykgfHwgZGVmaW5lZCAoX19zZ2kpCisjaW5jbHVkZSA8YWxsb2NhLmg+CisjZWxzZSAvKiBub3Qgc3BhcmMgKi8KKyNpZiBkZWZpbmVkIChNU0RPUykgJiYgIWRlZmluZWQgKF9fVFVSQk9DX18pCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxzZSAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNpZiBkZWZpbmVkKF9BSVgpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisgI3ByYWdtYSBhbGxvY2EKKyNlbHNlIC8qIG5vdCBNU0RPUywgX19UVVJCT0NfXywgb3IgX0FJWCAqLworI2lmZGVmIF9faHB1eAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK3ZvaWQgKmFsbG9jYSAodW5zaWduZWQgaW50KTsKK307CisjZWxzZSAvKiBub3QgX19jcGx1c3BsdXMgKi8KK3ZvaWQgKmFsbG9jYSAoKTsKKyNlbmRpZiAvKiBub3QgX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX2hwdXggKi8KKyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2VuZGlmIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLworI2VuZGlmIC8qIG5vdCBzcGFyYy4gICovCisjZW5kaWYgLyogbm90IEdOVSBDLiAgKi8KKyNlbmRpZiAvKiBhbGxvY2Egbm90IGRlZmluZWQuICAqLworCisvKiBUaGlzIGlzIHRoZSBwYXJzZXIgY29kZSB0aGF0IGlzIHdyaXR0ZW4gaW50byBlYWNoIGJpc29uIHBhcnNlcgorICB3aGVuIHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIuCisgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorICB1c2VkIHdoZW4gJXNlbWFudGljX3BhcnNlciBpcyBzcGVjaWZpZWQuICAqLworCisvKiBOb3RlOiB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGRvbGxhciBzaWduIGluIHRoaXMgZmlsZS4KKyAgIEl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBsaXN0IG9mIGFjdGlvbnMsIGVhY2ggYWN0aW9uCisgICBhcyBvbmUgY2FzZSBvZiB0aGUgc3dpdGNoLiAgKi8KKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVmaW5lIFlZQUNDRVBUCXJldHVybigwKQorI2RlZmluZSBZWUFCT1JUIAlyZXR1cm4oMSkKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycmxhYjEKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLgorICAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkgdG8gZWFzZSB0aGUKKyAgIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisjZGVmaW5lIFlZQkFDS1VQKHRva2VuLCB2YWx1ZSkgXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7IHl5Y2hhciA9ICh0b2tlbiksIHl5bHZhbCA9ICh2YWx1ZSk7CQkJXAorICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsgeXllcnJvciAoInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTsgWVlFUlJPUjsgfQlcCit3aGlsZSAoMCkKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKworI2lmbmRlZiBZWVBVUkUKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCkKKyNlbmRpZgorCisjaWZkZWYgWVlQVVJFCisjaWZkZWYgWVlMU1BfTkVFREVECisjaWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MpCisjZW5kaWYKKyNlbHNlIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCkKKyNlbmRpZgorI2VuZGlmIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNlbmRpZgorCisvKiBJZiBub25yZWVudHJhbnQsIGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVyZSAqLworCisjaWZuZGVmIFlZUFVSRQorCitpbnQJeXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFkIHN5bWJvbAkJKi8KK1lZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAorWVlMVFlQRSB5eWxsb2M7CQkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisjZW5kaWYKKworaW50IHl5bmVycnM7CQkJLyogIG51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyICAgICAgICovCisjZW5kaWYgIC8qIG5vdCBZWVBVUkUgKi8KKworI2lmIFlZREVCVUcgIT0gMAoraW50IHl5ZGVidWc7CQkJLyogIG5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UJKi8KKy8qIFNpbmNlIHRoaXMgaXMgdW5pbml0aWFsaXplZCwgaXQgZG9lcyBub3Qgc3RvcCBtdWx0aXBsZSBwYXJzZXJzCisgICBmcm9tIGNvZXhpc3RpbmcuICAqLworI2VuZGlmCisKKy8qICBZWUlOSVRERVBUSCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzCSovCisKKyNpZm5kZWYJWVlJTklUREVQVEgKKyNkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogIFlZTUFYREVQVEggaXMgdGhlIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvCisgICAgKGVmZmVjdGl2ZSBvbmx5IGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLiAgKi8KKworI2lmIFlZTUFYREVQVEggPT0gMAorI3VuZGVmIFlZTUFYREVQVEgKKyNlbmRpZgorCisjaWZuZGVmIFlZTUFYREVQVEgKKyNkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKy8qIFByZXZlbnQgd2FybmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworaW50IHl5cGFyc2UgKHZvaWQpOworI2VuZGlmCisMCisjaWYgX19HTlVDX18gPiAxCQkvKiBHTlUgQyBhbmQgR05VIEMrKyBkZWZpbmUgdGhpcy4gICovCisjZGVmaW5lIF9feXlfbWVtY3B5KEZST00sVE8sQ09VTlQpCV9fYnVpbHRpbl9tZW1jcHkoVE8sRlJPTSxDT1VOVCkKKyNlbHNlCQkJCS8qIG5vdCBHTlUgQyBvciBDKysgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5X21lbWNweSAoZnJvbSwgdG8sIGNvdW50KQorICAgICBjaGFyICpmcm9tOworICAgICBjaGFyICp0bzsKKyAgICAgaW50IGNvdW50OworeworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBpbnQgaSA9IGNvdW50OworCisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZWxzZSAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChjaGFyICpmcm9tLCBjaGFyICp0bywgaW50IGNvdW50KQoreworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBpbnQgaSA9IGNvdW50OworCisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZW5kaWYKKyNlbmRpZgorDAorI2xpbmUgMTkyICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uLnNpbXBsZSIKKworLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorICAgaW50byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZlIHR5cGUgdm9pZCAqLgorICAgSXQgc2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4KKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisgICB0byB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZS4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BBUkFNOworI2Vsc2UKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKyNlbmRpZgorCitpbnQKK3l5cGFyc2UoWVlQQVJTRV9QQVJBTSkKKyAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCit7CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdpc3RlciBpbnQgeXluOworICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworICBpbnQgeXllcnJzdGF0dXM7CS8qICBudW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkICovCisgIGludCB5eWNoYXIxID0gMDsJCS8qICBsb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlciAqLworCisgIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBzdGF0ZSBzdGFjawkJCSovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHNlbWFudGljIHZhbHVlIHN0YWNrCQkqLworCisgIHNob3J0ICp5eXNzID0geXlzc2E7CQkvKiAgcmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzICovCisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsJLyogIHRvIGFsbG93IHl5b3ZlcmZsb3cgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZSAqLworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9uIHN0YWNrCQkJKi8KKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworICBZWUxUWVBFICp5eWxzcDsKKworI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0sIHl5bHNwLS0pCisjZWxzZQorI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBpbnQgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworI2lmZGVmIFlZUFVSRQorICBpbnQgeXljaGFyOworICBZWVNUWVBFIHl5bHZhbDsKKyAgaW50IHl5bmVycnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIFlZTFRZUEUgeXlsbG9jOworI2VuZGlmCisjZW5kaWYKKworICBZWVNUWVBFIHl5dmFsOwkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRvIHJldHVybgkJKi8KKwkJCQkvKiAgc2VtYW50aWMgdmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLworCQkJCS8qICByb3V0aW5lcwkJCQkqLworCisgIGludCB5eWxlbjsKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKTsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzIC0gMTsKKyAgeXl2c3AgPSB5eXZzOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCA9IHl5bHM7CisjZW5kaWYKKworLyogUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4gIHl5c3RhdGUgIC4gICovCisvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KK3l5bmV3c3RhdGU6CisKKyAgKisreXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorICAgIHsKKyAgICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjayAqLworICAgICAgLyogVXNlIGNvcGllcyBvZiB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvIG1lbW9yeS4gKi8KKyAgICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKKyAgICAgIHNob3J0ICp5eXNzMSA9IHl5c3M7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7CisjZW5kaWYKKworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBpbnQgc2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZgorCSB0aGUgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICAqLworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgLyogVGhpcyB1c2VkIHRvIGJlIGEgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLAorCSBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlsczEsIHNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAmeXlzdGFja3NpemUpOworI2Vsc2UKKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlzdGFja3NpemUpOworI2VuZGlmCisKKyAgICAgIHl5c3MgPSB5eXNzMTsgeXl2cyA9IHl5dnMxOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlscyA9IHl5bHMxOworI2VuZGlmCisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+PSBZWU1BWERFUFRIKQorCXsKKwkgIHl5ZXJyb3IoInBhcnNlciBzdGFjayBvdmVyZmxvdyIpOworCSAgcmV0dXJuIDI7CisJfQorICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworICAgICAgeXlzcyA9IChzaG9ydCAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlzc3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5c3MxLCAoY2hhciAqKXl5c3MsIHNpemUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgeXl2cyA9IChZWVNUWVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXZzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXl2czEsIChjaGFyICopeXl2cywgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzID0gKFlZTFRZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eWxzMSwgKGNoYXIgKil5eWxzLCBzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyNlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgc2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyBzaXplIC0gMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHNwID0geXlscyArIHNpemUgLSAxOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWRcbiIsIHl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOworICAgIH0KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKTsKKyNlbmRpZgorCisgIGdvdG8geXliYWNrdXA7CisgeXliYWNrdXA6CisKKy8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTogKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKTsKKyNlbmRpZgorICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRoICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisgICAgeworICAgICAgeXljaGFyMSA9IDA7CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIik7CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworCSAgLyogR2l2ZSB0aGUgaW5kaXZpZHVhbCBwYXJzZXIgYSB3YXkgdG8gcHJpbnQgdGhlIHByZWNpc2UgbWVhbmluZworCSAgICAgb2YgYSB0b2tlbiwgZm9yIGZ1cnRoZXIgZGVidWdnaW5nIGluZm8uICAqLworI2lmZGVmIFlZUFJJTlQKKwkgIFlZUFJJTlQgKHN0ZGVyciwgeXljaGFyLCB5eWx2YWwpOworI2VuZGlmCisJICBmcHJpbnRmIChzdGRlcnIsICIpXG4iKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgeXluICs9IHl5Y2hhcjE7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyMSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisKKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorICAgICBOZWdhdGl2ZSA9PiByZWR1Y2UsIC15eW4gaXMgcnVsZSBudW1iZXIuCisgICAgIFBvc2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3IHN0YXRlLgorICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisgICAgICAganVzdCByZXR1cm4gc3VjY2Vzcy4KKyAgICAgMCwgb3IgbW9zdCBuZWdhdGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLworCisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJWQgKCVzKSwgIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICAvKiBjb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykgeXllcnJzdGF0dXMtLTsKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKy8qIERvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICAqLworeXlkZWZhdWx0OgorCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworLyogRG8gYSByZWR1Y3Rpb24uICB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworeXlyZWR1Y2U6CisgIHl5bGVuID0geXlyMlt5eW5dOworICBpZiAoeXlsZW4gPiAwKQorICAgIHl5dmFsID0geXl2c3BbMS15eWxlbl07IC8qIGltcGxlbWVudCBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb24gKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBpbnQgaTsKKworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiUmVkdWNpbmcgdmlhIHJ1bGUgJWQgKGxpbmUgJWQpLCAiLAorCSAgICAgICB5eW4sIHl5cmxpbmVbeXluXSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworICAgICAgZm9yIChpID0geXlwcmhzW3l5bl07IHl5cmhzW2ldID4gMDsgaSsrKQorCWZwcmludGYgKHN0ZGVyciwgIiVzICIsIHl5dG5hbWVbeXlyaHNbaV1dKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAgICB9CisjZW5kaWYKKworCisgIHN3aXRjaCAoeXluKSB7CisKK2Nhc2UgMToKKyNsaW5lIDI3NSAiY2V4cC55IgoreyBleHByZXNzaW9uX3ZhbHVlID0geXl2c3BbMF0uaW50ZWdlci52YWx1ZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzoKKyNsaW5lIDI4MSAiY2V4cC55IgoreyBpZiAocGVkYW50aWMpCisJCQkgICAgcGVkd2FybiAoImNvbW1hIG9wZXJhdG9yIGluIG9wZXJhbmQgb2YgYCNpZiciKTsKKwkJCSAgeXl2YWwuaW50ZWdlciA9IHl5dnNwWzBdLmludGVnZXI7IDsKKyAgICBicmVhazt9CitjYXNlIDQ6CisjbGluZSAyODggImNleHAueSIKK3sgeXl2YWwuaW50ZWdlci52YWx1ZSA9IC0geXl2c3BbMF0uaW50ZWdlci52YWx1ZTsKKwkJCSAgeXl2YWwuaW50ZWdlci5zaWduZWRwID0geXl2c3BbMF0uaW50ZWdlci5zaWduZWRwOworCQkJICBpZiAoKHl5dmFsLmludGVnZXIudmFsdWUgJiB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlICYgeXl2YWwuaW50ZWdlci5zaWduZWRwKSA8IDApCisJCQkgICAgaW50ZWdlcl9vdmVyZmxvdyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNToKKyNsaW5lIDI5MyAiY2V4cC55IgoreyB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gISB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlOworCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSBTSUdORUQ7IDsKKyAgICBicmVhazt9CitjYXNlIDY6CisjbGluZSAyOTYgImNleHAueSIKK3sgeXl2YWwuaW50ZWdlciA9IHl5dnNwWzBdLmludGVnZXI7IDsKKyAgICBicmVhazt9CitjYXNlIDc6CisjbGluZSAyOTggImNleHAueSIKK3sgeXl2YWwuaW50ZWdlci52YWx1ZSA9IH4geXl2c3BbMF0uaW50ZWdlci52YWx1ZTsKKwkJCSAgeXl2YWwuaW50ZWdlci5zaWduZWRwID0geXl2c3BbMF0uaW50ZWdlci5zaWduZWRwOyA7CisgICAgYnJlYWs7fQorY2FzZSA4OgorI2xpbmUgMzAxICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIudmFsdWUgPSBjaGVja19hc3NlcnRpb24gKHl5dnNwWzBdLm5hbWUuYWRkcmVzcywgeXl2c3BbMF0ubmFtZS5sZW5ndGgsCisJCQkJCQkgICAgICAwLCBOVUxMX1BUUik7CisJCQkgIHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsgOworICAgIGJyZWFrO30KK2Nhc2UgOToKKyNsaW5lIDMwNSAiY2V4cC55IgoreyBrZXl3b3JkX3BhcnNpbmcgPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDoKKyNsaW5lIDMwNyAiY2V4cC55IgoreyB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gY2hlY2tfYXNzZXJ0aW9uICh5eXZzcFstNF0ubmFtZS5hZGRyZXNzLCB5eXZzcFstNF0ubmFtZS5sZW5ndGgsCisJCQkJCQkgICAgICAxLCB5eXZzcFstMV0ua2V5d29yZHMpOworCQkJICBrZXl3b3JkX3BhcnNpbmcgPSAwOworCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSBTSUdORUQ7IDsKKyAgICBicmVhazt9CitjYXNlIDExOgorI2xpbmUgMzEyICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIgPSB5eXZzcFstMV0uaW50ZWdlcjsgOworICAgIGJyZWFrO30KK2Nhc2UgMTI6CisjbGluZSAzMTcgImNleHAueSIKK3sgeXl2YWwuaW50ZWdlci5zaWduZWRwID0geXl2c3BbLTJdLmludGVnZXIuc2lnbmVkcCAmIHl5dnNwWzBdLmludGVnZXIuc2lnbmVkcDsKKwkJCSAgaWYgKHl5dmFsLmludGVnZXIuc2lnbmVkcCkKKwkJCSAgICB7CisJCQkgICAgICB5eXZhbC5pbnRlZ2VyLnZhbHVlID0geXl2c3BbLTJdLmludGVnZXIudmFsdWUgKiB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlOworCQkJICAgICAgaWYgKHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlCisJCQkJICAmJiAoeXl2YWwuaW50ZWdlci52YWx1ZSAvIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlICE9IHl5dnNwWzBdLmludGVnZXIudmFsdWUKKwkJCQkgICAgICB8fCAoeXl2YWwuaW50ZWdlci52YWx1ZSAmIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlICYgeXl2c3BbMF0uaW50ZWdlci52YWx1ZSkgPCAwKSkKKwkJCQlpbnRlZ2VyX292ZXJmbG93ICgpOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlCisJCQkJCSogeXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzOgorI2xpbmUgMzMwICJjZXhwLnkiCit7IGlmICh5eXZzcFswXS5pbnRlZ2VyLnZhbHVlID09IDApCisJCQkgICAgeworCQkJICAgICAgaWYgKCFza2lwX2V2YWx1YXRpb24pCisJCQkJZXJyb3IgKCJkaXZpc2lvbiBieSB6ZXJvIGluICNpZiIpOworCQkJICAgICAgeXl2c3BbMF0uaW50ZWdlci52YWx1ZSA9IDE7CisJCQkgICAgfQorCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSB5eXZzcFstMl0uaW50ZWdlci5zaWduZWRwICYgeXl2c3BbMF0uaW50ZWdlci5zaWduZWRwOworCQkJICBpZiAoeXl2YWwuaW50ZWdlci5zaWduZWRwKQorCQkJICAgIHsKKwkJCSAgICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSAvIHl5dnNwWzBdLmludGVnZXIudmFsdWU7CisJCQkgICAgICBpZiAoKHl5dmFsLmludGVnZXIudmFsdWUgJiB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSAmIHl5dnNwWzBdLmludGVnZXIudmFsdWUpIDwgMCkKKwkJCQlpbnRlZ2VyX292ZXJmbG93ICgpOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlCisJCQkJCS8geXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE0OgorI2xpbmUgMzQ3ICJjZXhwLnkiCit7IGlmICh5eXZzcFswXS5pbnRlZ2VyLnZhbHVlID09IDApCisJCQkgICAgeworCQkJICAgICAgaWYgKCFza2lwX2V2YWx1YXRpb24pCisJCQkJZXJyb3IgKCJkaXZpc2lvbiBieSB6ZXJvIGluICNpZiIpOworCQkJICAgICAgeXl2c3BbMF0uaW50ZWdlci52YWx1ZSA9IDE7CisJCQkgICAgfQorCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSB5eXZzcFstMl0uaW50ZWdlci5zaWduZWRwICYgeXl2c3BbMF0uaW50ZWdlci5zaWduZWRwOworCQkJICBpZiAoeXl2YWwuaW50ZWdlci5zaWduZWRwKQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSAlIHl5dnNwWzBdLmludGVnZXIudmFsdWU7CisJCQkgIGVsc2UKKwkJCSAgICB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZQorCQkJCQklIHl5dnNwWzBdLmludGVnZXIudmFsdWUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNToKKyNsaW5lIDM2MCAiY2V4cC55IgoreyB5eXZhbC5pbnRlZ2VyLnZhbHVlID0geXl2c3BbLTJdLmludGVnZXIudmFsdWUgKyB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlOworCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSB5eXZzcFstMl0uaW50ZWdlci5zaWduZWRwICYgeXl2c3BbMF0uaW50ZWdlci5zaWduZWRwOworCQkJICBpZiAob3ZlcmZsb3dfc3VtX3NpZ24gKHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlLCB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlLAorCQkJCQkJIHl5dmFsLmludGVnZXIudmFsdWUsIHl5dmFsLmludGVnZXIuc2lnbmVkcCkpCisJCQkgICAgaW50ZWdlcl9vdmVyZmxvdyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTY6CisjbGluZSAzNjYgImNleHAueSIKK3sgeXl2YWwuaW50ZWdlci52YWx1ZSA9IHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlIC0geXl2c3BbMF0uaW50ZWdlci52YWx1ZTsKKwkJCSAgeXl2YWwuaW50ZWdlci5zaWduZWRwID0geXl2c3BbLTJdLmludGVnZXIuc2lnbmVkcCAmIHl5dnNwWzBdLmludGVnZXIuc2lnbmVkcDsKKwkJCSAgaWYgKG92ZXJmbG93X3N1bV9zaWduICh5eXZhbC5pbnRlZ2VyLnZhbHVlLCB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlLAorCQkJCQkJIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlLCB5eXZhbC5pbnRlZ2VyLnNpZ25lZHApKQorCQkJICAgIGludGVnZXJfb3ZlcmZsb3cgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3OgorI2xpbmUgMzcyICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IHl5dnNwWy0yXS5pbnRlZ2VyLnNpZ25lZHA7CisJCQkgIGlmICgoeXl2c3BbMF0uaW50ZWdlci52YWx1ZSAmIHl5dnNwWzBdLmludGVnZXIuc2lnbmVkcCkgPCAwKQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSByaWdodF9zaGlmdCAoJnl5dnNwWy0yXS5pbnRlZ2VyLCAteXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7CisJCQkgIGVsc2UKKwkJCSAgICB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gbGVmdF9zaGlmdCAoJnl5dnNwWy0yXS5pbnRlZ2VyLCB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg6CisjbGluZSAzNzggImNleHAueSIKK3sgeXl2YWwuaW50ZWdlci5zaWduZWRwID0geXl2c3BbLTJdLmludGVnZXIuc2lnbmVkcDsKKwkJCSAgaWYgKCh5eXZzcFswXS5pbnRlZ2VyLnZhbHVlICYgeXl2c3BbMF0uaW50ZWdlci5zaWduZWRwKSA8IDApCisJCQkgICAgeXl2YWwuaW50ZWdlci52YWx1ZSA9IGxlZnRfc2hpZnQgKCZ5eXZzcFstMl0uaW50ZWdlciwgLXl5dnNwWzBdLmludGVnZXIudmFsdWUpOworCQkJICBlbHNlCisJCQkgICAgeXl2YWwuaW50ZWdlci52YWx1ZSA9IHJpZ2h0X3NoaWZ0ICgmeXl2c3BbLTJdLmludGVnZXIsIHl5dnNwWzBdLmludGVnZXIudmFsdWUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOToKKyNsaW5lIDM4NCAiY2V4cC55IgoreyB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gKHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlID09IHl5dnNwWzBdLmludGVnZXIudmFsdWUpOworCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSBTSUdORUQ7IDsKKyAgICBicmVhazt9CitjYXNlIDIwOgorI2xpbmUgMzg3ICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIudmFsdWUgPSAoeXl2c3BbLTJdLmludGVnZXIudmFsdWUgIT0geXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7CisJCQkgIHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsgOworICAgIGJyZWFrO30KK2Nhc2UgMjE6CisjbGluZSAzOTAgImNleHAueSIKK3sgeXl2YWwuaW50ZWdlci5zaWduZWRwID0gU0lHTkVEOworCQkJICBpZiAoeXl2c3BbLTJdLmludGVnZXIuc2lnbmVkcCAmIHl5dnNwWzBdLmludGVnZXIuc2lnbmVkcCkKKwkJCSAgICB5eXZhbC5pbnRlZ2VyLnZhbHVlID0geXl2c3BbLTJdLmludGVnZXIudmFsdWUgPD0geXl2c3BbMF0uaW50ZWdlci52YWx1ZTsKKwkJCSAgZWxzZQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlCisJCQkJCTw9IHl5dnNwWzBdLmludGVnZXIudmFsdWUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjoKKyNsaW5lIDM5NyAiY2V4cC55IgoreyB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSBTSUdORUQ7CisJCQkgIGlmICh5eXZzcFstMl0uaW50ZWdlci5zaWduZWRwICYgeXl2c3BbMF0uaW50ZWdlci5zaWduZWRwKQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSA+PSB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlOworCQkJICBlbHNlCisJCQkgICAgeXl2YWwuaW50ZWdlci52YWx1ZSA9ICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgeXl2c3BbLTJdLmludGVnZXIudmFsdWUKKwkJCQkJPj0geXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIzOgorI2xpbmUgNDA0ICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsKKwkJCSAgaWYgKHl5dnNwWy0yXS5pbnRlZ2VyLnNpZ25lZHAgJiB5eXZzcFswXS5pbnRlZ2VyLnNpZ25lZHApCisJCQkgICAgeXl2YWwuaW50ZWdlci52YWx1ZSA9IHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlIDwgeXl2c3BbMF0uaW50ZWdlci52YWx1ZTsKKwkJCSAgZWxzZQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlCisJCQkJCTwgeXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0OgorI2xpbmUgNDExICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsKKwkJCSAgaWYgKHl5dnNwWy0yXS5pbnRlZ2VyLnNpZ25lZHAgJiB5eXZzcFswXS5pbnRlZ2VyLnNpZ25lZHApCisJCQkgICAgeXl2YWwuaW50ZWdlci52YWx1ZSA9IHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlID4geXl2c3BbMF0uaW50ZWdlci52YWx1ZTsKKwkJCSAgZWxzZQorCQkJICAgIHl5dmFsLmludGVnZXIudmFsdWUgPSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIHl5dnNwWy0yXS5pbnRlZ2VyLnZhbHVlCisJCQkJCT4geXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1OgorI2xpbmUgNDE4ICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIudmFsdWUgPSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSAmIHl5dnNwWzBdLmludGVnZXIudmFsdWU7CisJCQkgIHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IHl5dnNwWy0yXS5pbnRlZ2VyLnNpZ25lZHAgJiB5eXZzcFswXS5pbnRlZ2VyLnNpZ25lZHA7IDsKKyAgICBicmVhazt9CitjYXNlIDI2OgorI2xpbmUgNDIxICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIudmFsdWUgPSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSBeIHl5dnNwWzBdLmludGVnZXIudmFsdWU7CisJCQkgIHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IHl5dnNwWy0yXS5pbnRlZ2VyLnNpZ25lZHAgJiB5eXZzcFswXS5pbnRlZ2VyLnNpZ25lZHA7IDsKKyAgICBicmVhazt9CitjYXNlIDI3OgorI2xpbmUgNDI0ICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIudmFsdWUgPSB5eXZzcFstMl0uaW50ZWdlci52YWx1ZSB8IHl5dnNwWzBdLmludGVnZXIudmFsdWU7CisJCQkgIHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IHl5dnNwWy0yXS5pbnRlZ2VyLnNpZ25lZHAgJiB5eXZzcFswXS5pbnRlZ2VyLnNpZ25lZHA7IDsKKyAgICBicmVhazt9CitjYXNlIDI4OgorI2xpbmUgNDI3ICJjZXhwLnkiCit7IHNraXBfZXZhbHVhdGlvbiArPSAheXl2c3BbLTFdLmludGVnZXIudmFsdWU7IDsKKyAgICBicmVhazt9CitjYXNlIDI5OgorI2xpbmUgNDI5ICJjZXhwLnkiCit7IHNraXBfZXZhbHVhdGlvbiAtPSAheXl2c3BbLTNdLmludGVnZXIudmFsdWU7CisJCQkgIHl5dmFsLmludGVnZXIudmFsdWUgPSAoeXl2c3BbLTNdLmludGVnZXIudmFsdWUgJiYgeXl2c3BbMF0uaW50ZWdlci52YWx1ZSk7CisJCQkgIHl5dmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsgOworICAgIGJyZWFrO30KK2Nhc2UgMzA6CisjbGluZSA0MzMgImNleHAueSIKK3sgc2tpcF9ldmFsdWF0aW9uICs9ICEheXl2c3BbLTFdLmludGVnZXIudmFsdWU7IDsKKyAgICBicmVhazt9CitjYXNlIDMxOgorI2xpbmUgNDM1ICJjZXhwLnkiCit7IHNraXBfZXZhbHVhdGlvbiAtPSAhIXl5dnNwWy0zXS5pbnRlZ2VyLnZhbHVlOworCQkJICB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gKHl5dnNwWy0zXS5pbnRlZ2VyLnZhbHVlIHx8IHl5dnNwWzBdLmludGVnZXIudmFsdWUpOworCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSBTSUdORUQ7IDsKKyAgICBicmVhazt9CitjYXNlIDMyOgorI2xpbmUgNDM5ICJjZXhwLnkiCit7IHNraXBfZXZhbHVhdGlvbiArPSAheXl2c3BbLTFdLmludGVnZXIudmFsdWU7IDsKKyAgICBicmVhazt9CitjYXNlIDMzOgorI2xpbmUgNDQxICJjZXhwLnkiCit7IHNraXBfZXZhbHVhdGlvbiArPSAhIXl5dnNwWy00XS5pbnRlZ2VyLnZhbHVlIC0gIXl5dnNwWy00XS5pbnRlZ2VyLnZhbHVlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDoKKyNsaW5lIDQ0MyAiY2V4cC55IgoreyBza2lwX2V2YWx1YXRpb24gLT0gISF5eXZzcFstNl0uaW50ZWdlci52YWx1ZTsKKwkJCSAgeXl2YWwuaW50ZWdlci52YWx1ZSA9IHl5dnNwWy02XS5pbnRlZ2VyLnZhbHVlID8geXl2c3BbLTNdLmludGVnZXIudmFsdWUgOiB5eXZzcFswXS5pbnRlZ2VyLnZhbHVlOworCQkJICB5eXZhbC5pbnRlZ2VyLnNpZ25lZHAgPSB5eXZzcFstM10uaW50ZWdlci5zaWduZWRwICYgeXl2c3BbMF0uaW50ZWdlci5zaWduZWRwOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNToKKyNsaW5lIDQ0NyAiY2V4cC55IgoreyB5eXZhbC5pbnRlZ2VyID0geXlsdmFsLmludGVnZXI7IDsKKyAgICBicmVhazt9CitjYXNlIDM2OgorI2xpbmUgNDQ5ICJjZXhwLnkiCit7IHl5dmFsLmludGVnZXIgPSB5eWx2YWwuaW50ZWdlcjsgOworICAgIGJyZWFrO30KK2Nhc2UgMzc6CisjbGluZSA0NTEgImNleHAueSIKK3sgaWYgKHdhcm5fdW5kZWYgJiYgIXNraXBfZXZhbHVhdGlvbikKKwkJCSAgICB3YXJuaW5nICgiYCUuKnMnIGlzIG5vdCBkZWZpbmVkIiwKKwkJCQkgICAgIHl5dnNwWzBdLm5hbWUubGVuZ3RoLCB5eXZzcFswXS5uYW1lLmFkZHJlc3MpOworCQkJICB5eXZhbC5pbnRlZ2VyLnZhbHVlID0gMDsKKwkJCSAgeXl2YWwuaW50ZWdlci5zaWduZWRwID0gU0lHTkVEOyA7CisgICAgYnJlYWs7fQorY2FzZSAzODoKKyNsaW5lIDQ1OSAiY2V4cC55IgoreyB5eXZhbC5rZXl3b3JkcyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDM5OgorI2xpbmUgNDYxICJjZXhwLnkiCit7IHN0cnVjdCBhcmdsaXN0ICp0ZW1wOworCQkJICB5eXZhbC5rZXl3b3JkcyA9IChzdHJ1Y3QgYXJnbGlzdCAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBhcmdsaXN0KSk7CisJCQkgIHl5dmFsLmtleXdvcmRzLT5uZXh0ID0geXl2c3BbLTJdLmtleXdvcmRzOworCQkJICB5eXZhbC5rZXl3b3Jkcy0+bmFtZSA9IChVX0NIQVIgKikgIigiOworCQkJICB5eXZhbC5rZXl3b3Jkcy0+bGVuZ3RoID0gMTsKKwkJCSAgdGVtcCA9IHl5dmFsLmtleXdvcmRzOworCQkJICB3aGlsZSAodGVtcCAhPSAwICYmIHRlbXAtPm5leHQgIT0gMCkKKwkJCSAgICB0ZW1wID0gdGVtcC0+bmV4dDsKKwkJCSAgdGVtcC0+bmV4dCA9IChzdHJ1Y3QgYXJnbGlzdCAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBhcmdsaXN0KSk7CisJCQkgIHRlbXAtPm5leHQtPm5leHQgPSB5eXZzcFswXS5rZXl3b3JkczsKKwkJCSAgdGVtcC0+bmV4dC0+bmFtZSA9IChVX0NIQVIgKikgIikiOworCQkJICB0ZW1wLT5uZXh0LT5sZW5ndGggPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MDoKKyNsaW5lIDQ3NCAiY2V4cC55IgoreyB5eXZhbC5rZXl3b3JkcyA9IChzdHJ1Y3QgYXJnbGlzdCAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBhcmdsaXN0KSk7CisJCQkgIHl5dmFsLmtleXdvcmRzLT5uYW1lID0geXl2c3BbLTFdLm5hbWUuYWRkcmVzczsKKwkJCSAgeXl2YWwua2V5d29yZHMtPmxlbmd0aCA9IHl5dnNwWy0xXS5uYW1lLmxlbmd0aDsKKwkJCSAgeXl2YWwua2V5d29yZHMtPm5leHQgPSB5eXZzcFswXS5rZXl3b3JkczsgOworICAgIGJyZWFrO30KK30KKyAgIC8qIHRoZSBhY3Rpb24gZmlsZSBnZXRzIGNvcGllZCBpbiBpbiBwbGFjZSBvZiB0aGlzIGRvbGxhcnNpZ24gKi8KKyNsaW5lIDQ4NyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi5zaW1wbGUiCisMCisgIHl5dnNwIC09IHl5bGVuOworICB5eXNzcCAtPSB5eWxlbjsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgLT0geXlsZW47CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkKKwlmcHJpbnRmIChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKKyAgKisreXl2c3AgPSB5eXZhbDsKKworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCsrOworICBpZiAoeXlsZW4gPT0gMCkKKyAgICB7CisgICAgICB5eWxzcC0+Zmlyc3RfbGluZSA9IHl5bGxvYy5maXJzdF9saW5lOworICAgICAgeXlsc3AtPmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5maXJzdF9jb2x1bW47CisgICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwLTEpLT5sYXN0X2xpbmU7CisgICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AtMSktPmxhc3RfY29sdW1uOworICAgICAgeXlsc3AtPnRleHQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfbGluZTsKKyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9jb2x1bW47CisgICAgfQorI2VuZGlmCisKKyAgLyogTm93ICJzaGlmdCIgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLgorICAgICBEZXRlcm1pbmUgd2hhdCBzdGF0ZSB0aGF0IGdvZXMgdG8sCisgICAgIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0bworICAgICBhbmQgdGhlIHJ1bGUgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlzc3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKK3l5ZXJybGFiOiAgIC8qIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yICovCisKKyAgaWYgKCEgeXllcnJzdGF0dXMpCisgICAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgICAgeworICAgICAgKyt5eW5lcnJzOworCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgICAgIGlmICh5eW4gPiBZWUZMQUcgJiYgeXluIDwgWVlMQVNUKQorCXsKKwkgIGludCBzaXplID0gMDsKKwkgIGNoYXIgKm1zZzsKKwkgIGludCB4LCBjb3VudDsKKworCSAgY291bnQgPSAwOworCSAgLyogU3RhcnQgWCBhdCAteXluIGlmIG5lYyB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluIHl5Y2hlY2suICAqLworCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCisJICAgIGlmICh5eWNoZWNrW3ggKyB5eW5dID09IHgpCisJICAgICAgc2l6ZSArPSBzdHJsZW4oeXl0bmFtZVt4XSkgKyAxNSwgY291bnQrKzsKKwkgIG1zZyA9IChjaGFyICopIG1hbGxvYyhzaXplICsgMTUpOworCSAgaWYgKG1zZyAhPSAwKQorCSAgICB7CisJICAgICAgc3RyY3B5KG1zZywgInBhcnNlIGVycm9yIik7CisKKwkgICAgICBpZiAoY291bnQgPCA1KQorCQl7CisJCSAgY291bnQgPSAwOworCQkgIGZvciAoeCA9ICh5eW4gPCAwID8gLXl5biA6IDApOworCQkgICAgICAgeCA8IChzaXplb2YoeXl0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7IHgrKykKKwkJICAgIGlmICh5eWNoZWNrW3ggKyB5eW5dID09IHgpCisJCSAgICAgIHsKKwkJCXN0cmNhdChtc2csIGNvdW50ID09IDAgPyAiLCBleHBlY3RpbmcgYCIgOiAiIG9yIGAiKTsKKwkJCXN0cmNhdChtc2csIHl5dG5hbWVbeF0pOworCQkJc3RyY2F0KG1zZywgIiciKTsKKwkJCWNvdW50Kys7CisJCSAgICAgIH0KKwkJfQorCSAgICAgIHl5ZXJyb3IobXNnKTsKKwkgICAgICBmcmVlKG1zZyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeXllcnJvciAoInBhcnNlIGVycm9yOyBhbHNvIHZpcnR1YWwgbWVtb3J5IGV4Y2VlZGVkIik7CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworCXl5ZXJyb3IoInBhcnNlIGVycm9yIik7CisgICAgfQorCisgIGdvdG8geXllcnJsYWIxOworeXllcnJsYWIxOiAgIC8qIGhlcmUgb24gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgYW4gYWN0aW9uICovCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAgLyogaWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbiBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIC8qIHJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dCAqLworICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwlZWUFCT1JUOworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisjZW5kaWYKKworICAgICAgeXljaGFyID0gWVlFTVBUWTsKKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4KKyAgICAgYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yIHRva2VuLiAgKi8KKworICB5eWVycnN0YXR1cyA9IDM7CQkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMgKi8KKworICBnb3RvIHl5ZXJyaGFuZGxlOworCit5eWVycmRlZmF1bHQ6ICAvKiBjdXJyZW50IHN0YXRlIGRvZXMgbm90IGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIHRoZSBlcnJvciB0b2tlbi4gKi8KKworI2lmIDAKKyAgLyogVGhpcyBpcyB3cm9uZzsgb25seSBzdGF0ZXMgdGhhdCBleHBsaWNpdGx5IHdhbnQgZXJyb3IgdG9rZW5zCisgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07ICAvKiBJZiBpdHMgZGVmYXVsdCBpcyB0byBhY2NlcHQgYW55IHRva2VuLCBvay4gIE90aGVyd2lzZSBwb3AgaXQuKi8KKyAgaWYgKHl5bikgZ290byB5eWRlZmF1bHQ7CisjZW5kaWYKKworeXllcnJwb3A6ICAgLyogcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4gKi8KKworICBpZiAoeXlzc3AgPT0geXlzcykgWVlBQk9SVDsKKyAgeXl2c3AtLTsKKyAgeXlzdGF0ZSA9ICotLXl5c3NwOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcC0tOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkVycm9yOiBzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKworeXllcnJoYW5kbGU6CisKKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4gKz0gWVlURVJST1I7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5ZXJycG9wOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJycG9wOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAiKTsKKyNlbmRpZgorCisgICorK3l5dnNwID0geXlsdmFsOworI2lmZGVmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKK30KKyNsaW5lIDQ3OSAiY2V4cC55IgorCisMCisvKiBEdXJpbmcgcGFyc2luZyBvZiBhIEMgZXhwcmVzc2lvbiwgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgY2hhcmFjdGVyCisgICBpcyBpbiB0aGlzIHZhcmlhYmxlLiAgKi8KKworc3RhdGljIGNoYXIgKmxleHB0cjsKKworLyogVGFrZSBjYXJlIG9mIHBhcnNpbmcgYSBudW1iZXIgKGFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSBkaWdpdCkuCisgICBTZXQgeXlsdmFsIGFuZCByZXR1cm4gdGhlIHRva2VuIHR5cGU7IHVwZGF0ZSBsZXhwdHIuCisgICBMRU4gaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGl0LiAgKi8KKworLyogbWF5YmUgbmVlZHMgdG8gYWN0dWFsbHkgZGVhbCB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgKi8KKworc3RhdGljIGludAorcGFyc2VfbnVtYmVyIChvbGVuKQorICAgICBpbnQgb2xlbjsKK3sKKyAgcmVnaXN0ZXIgY2hhciAqcCA9IGxleHB0cjsKKyAgcmVnaXN0ZXIgaW50IGM7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbiA9IDAsIG5kLCBtYXhfb3Zlcl9iYXNlOworICByZWdpc3RlciBpbnQgYmFzZSA9IDEwOworICByZWdpc3RlciBpbnQgbGVuID0gb2xlbjsKKyAgcmVnaXN0ZXIgaW50IG92ZXJmbG93ID0gMDsKKyAgcmVnaXN0ZXIgaW50IGRpZ2l0LCBsYXJnZXN0X2RpZ2l0ID0gMDsKKyAgaW50IHNwZWNfbG9uZyA9IDA7CisKKyAgeXlsdmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsKKworICBpZiAoKnAgPT0gJzAnKSB7CisgICAgYmFzZSA9IDg7CisgICAgaWYgKGxlbiA+PSAzICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykpIHsKKyAgICAgIHAgKz0gMjsKKyAgICAgIGJhc2UgPSAxNjsKKyAgICAgIGxlbiAtPSAyOworICAgIH0KKyAgfQorCisgIG1heF9vdmVyX2Jhc2UgPSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgLTEgLyBiYXNlOworCisgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkgeworICAgIGMgPSAqcCsrOworCisgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorICAgICAgZGlnaXQgPSBjIC0gJzAnOworICAgIGVsc2UgaWYgKGJhc2UgPT0gMTYgJiYgYyA+PSAnYScgJiYgYyA8PSAnZicpCisgICAgICBkaWdpdCA9IGMgLSAnYScgKyAxMDsKKyAgICBlbHNlIGlmIChiYXNlID09IDE2ICYmIGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQorICAgICAgZGlnaXQgPSBjIC0gJ0EnICsgMTA7CisgICAgZWxzZSB7CisgICAgICAvKiBgbCcgbWVhbnMgbG9uZywgYW5kIGB1JyBtZWFucyB1bnNpZ25lZC4gICovCisgICAgICB3aGlsZSAoMSkgeworCWlmIChjID09ICdsJyB8fCBjID09ICdMJykKKwkgIHsKKwkgICAgaWYgKCFwZWRhbnRpYyA8IHNwZWNfbG9uZykKKwkgICAgICB5eWVycm9yICgidG9vIG1hbnkgYGwncyBpbiBpbnRlZ2VyIGNvbnN0YW50Iik7CisJICAgIHNwZWNfbG9uZysrOworCSAgfQorCWVsc2UgaWYgKGMgPT0gJ3UnIHx8IGMgPT0gJ1UnKQorCSAgeworCSAgICBpZiAoISB5eWx2YWwuaW50ZWdlci5zaWduZWRwKQorCSAgICAgIHl5ZXJyb3IgKCJ0d28gYHUncyBpbiBpbnRlZ2VyIGNvbnN0YW50Iik7CisJICAgIHl5bHZhbC5pbnRlZ2VyLnNpZ25lZHAgPSBVTlNJR05FRDsKKwkgIH0KKwllbHNlIHsKKwkgIGlmIChjID09ICcuJyB8fCBjID09ICdlJyB8fCBjID09ICdFJyB8fCBjID09ICdwJyB8fCBjID09ICdQJykKKwkgICAgeXllcnJvciAoIkZsb2F0aW5nIHBvaW50IG51bWJlcnMgbm90IGFsbG93ZWQgaW4gI2lmIGV4cHJlc3Npb25zIik7CisJICBlbHNlIHsKKwkgICAgY2hhciAqYnVmID0gKGNoYXIgKikgYWxsb2NhIChwIC0gbGV4cHRyICsgNDApOworCSAgICBzcHJpbnRmIChidWYsICJtaXNzaW5nIHdoaXRlIHNwYWNlIGFmdGVyIG51bWJlciBgJS4qcyciLAorCQkgICAgIChpbnQpIChwIC0gbGV4cHRyIC0gMSksIGxleHB0cik7CisJICAgIHl5ZXJyb3IgKGJ1Zik7CisJICB9CisJfQorCisJaWYgKC0tbGVuID09IDApCisJICBicmVhazsKKwljID0gKnArKzsKKyAgICAgIH0KKyAgICAgIC8qIERvbid0IGxvb2sgZm9yIGFueSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgc3VmZml4ZXMuICAqLworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChsYXJnZXN0X2RpZ2l0IDwgZGlnaXQpCisgICAgICBsYXJnZXN0X2RpZ2l0ID0gZGlnaXQ7CisgICAgbmQgPSBuICogYmFzZSArIGRpZ2l0OworICAgIG92ZXJmbG93IHw9IChtYXhfb3Zlcl9iYXNlIDwgbikgfCAobmQgPCBuKTsKKyAgICBuID0gbmQ7CisgIH0KKworICBpZiAoYmFzZSA8PSBsYXJnZXN0X2RpZ2l0KQorICAgIHBlZHdhcm4gKCJpbnRlZ2VyIGNvbnN0YW50IGNvbnRhaW5zIGRpZ2l0cyBiZXlvbmQgdGhlIHJhZGl4Iik7CisKKyAgaWYgKG92ZXJmbG93KQorICAgIHBlZHdhcm4gKCJpbnRlZ2VyIGNvbnN0YW50IG91dCBvZiByYW5nZSIpOworCisgIC8qIElmIHRvbyBiaWcgdG8gYmUgc2lnbmVkLCBjb25zaWRlciBpdCB1bnNpZ25lZC4gICovCisgIGlmICgoKEhPU1RfV0lERV9JTlQpIG4gJiB5eWx2YWwuaW50ZWdlci5zaWduZWRwKSA8IDApCisgICAgeworICAgICAgaWYgKGJhc2UgPT0gMTApCisJd2FybmluZyAoImludGVnZXIgY29uc3RhbnQgaXMgc28gbGFyZ2UgdGhhdCBpdCBpcyB1bnNpZ25lZCIpOworICAgICAgeXlsdmFsLmludGVnZXIuc2lnbmVkcCA9IFVOU0lHTkVEOworICAgIH0KKworICBsZXhwdHIgPSBwOworICB5eWx2YWwuaW50ZWdlci52YWx1ZSA9IG47CisgIHJldHVybiBJTlQ7Cit9CisKK3N0cnVjdCB0b2tlbiB7CisgIGNoYXIgKm9wZXJhdG9yOworICBpbnQgdG9rZW47Cit9OworCitzdGF0aWMgc3RydWN0IHRva2VuIHRva2VudGFiMltdID0geworICB7IiYmIiwgQU5EfSwKKyAgeyJ8fCIsIE9SfSwKKyAgeyI8PCIsIExTSH0sCisgIHsiPj4iLCBSU0h9LAorICB7Ij09IiwgRVFVQUx9LAorICB7IiE9IiwgTk9URVFVQUx9LAorICB7Ijw9IiwgTEVRfSwKKyAgeyI+PSIsIEdFUX0sCisgIHsiKysiLCBFUlJPUn0sCisgIHsiLS0iLCBFUlJPUn0sCisgIHtOVUxMLCBFUlJPUn0KK307CisKKy8qIFJlYWQgb25lIHRva2VuLCBnZXR0aW5nIGNoYXJhY3RlcnMgdGhyb3VnaCBsZXhwdHIuICAqLworCitzdGF0aWMgaW50Cit5eWxleCAoKQoreworICByZWdpc3RlciBpbnQgYzsKKyAgcmVnaXN0ZXIgaW50IG5hbWVsZW47CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnRva3N0YXJ0OworICByZWdpc3RlciBzdHJ1Y3QgdG9rZW4gKnRva3RhYjsKKyAgaW50IHdpZGVfZmxhZzsKKyAgSE9TVF9XSURFX0lOVCBtYXNrOworCisgcmV0cnk6CisKKyAgdG9rc3RhcnQgPSAodW5zaWduZWQgY2hhciAqKSBsZXhwdHI7CisgIGMgPSAqdG9rc3RhcnQ7CisgIC8qIFNlZSBpZiBpdCBpcyBhIHNwZWNpYWwgdG9rZW4gb2YgbGVuZ3RoIDIuICAqLworICBpZiAoISBrZXl3b3JkX3BhcnNpbmcpCisgICAgZm9yICh0b2t0YWIgPSB0b2tlbnRhYjI7IHRva3RhYi0+b3BlcmF0b3IgIT0gTlVMTDsgdG9rdGFiKyspCisgICAgICBpZiAoYyA9PSAqdG9rdGFiLT5vcGVyYXRvciAmJiB0b2tzdGFydFsxXSA9PSB0b2t0YWItPm9wZXJhdG9yWzFdKSB7CisJbGV4cHRyICs9IDI7CisJaWYgKHRva3RhYi0+dG9rZW4gPT0gRVJST1IpCisJICB7CisJICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopIGFsbG9jYSAoNDApOworCSAgICBzcHJpbnRmIChidWYsICJgJXMnIG5vdCBhbGxvd2VkIGluIG9wZXJhbmQgb2YgYCNpZiciLCB0b2t0YWItPm9wZXJhdG9yKTsKKwkgICAgeXllcnJvciAoYnVmKTsKKwkgIH0KKwlyZXR1cm4gdG9rdGFiLT50b2tlbjsKKyAgICAgIH0KKworICBzd2l0Y2ggKGMpIHsKKyAgY2FzZSAnXG4nOgorICAgIHJldHVybiAwOworICAgIAorICBjYXNlICcgJzoKKyAgY2FzZSAnXHQnOgorICBjYXNlICdccic6CisgICAgbGV4cHRyKys7CisgICAgZ290byByZXRyeTsKKyAgICAKKyAgY2FzZSAnTCc6CisgICAgLyogQ2FwaXRhbCBMIG1heSBzdGFydCBhIHdpZGUtc3RyaW5nIG9yIHdpZGUtY2hhcmFjdGVyIGNvbnN0YW50LiAgKi8KKyAgICBpZiAobGV4cHRyWzFdID09ICdcJycpCisgICAgICB7CisJbGV4cHRyKys7CisJd2lkZV9mbGFnID0gMTsKKwltYXNrID0gTUFYX1dDSEFSX1RZUEVfTUFTSzsKKwlnb3RvIGNoYXJfY29uc3RhbnQ7CisgICAgICB9CisgICAgaWYgKGxleHB0clsxXSA9PSAnIicpCisgICAgICB7CisJbGV4cHRyKys7CisJd2lkZV9mbGFnID0gMTsKKwltYXNrID0gTUFYX1dDSEFSX1RZUEVfTUFTSzsKKwlnb3RvIHN0cmluZ19jb25zdGFudDsKKyAgICAgIH0KKyAgICBicmVhazsKKworICBjYXNlICdcJyc6CisgICAgd2lkZV9mbGFnID0gMDsKKyAgICBtYXNrID0gTUFYX0NIQVJfVFlQRV9NQVNLOworICBjaGFyX2NvbnN0YW50OgorICAgIGxleHB0cisrOworICAgIGlmIChrZXl3b3JkX3BhcnNpbmcpIHsKKyAgICAgIGNoYXIgKnN0YXJ0X3B0ciA9IGxleHB0ciAtIDE7CisgICAgICB3aGlsZSAoMSkgeworCWMgPSAqbGV4cHRyKys7CisJaWYgKGMgPT0gJ1xcJykKKwkgIGMgPSBwYXJzZV9lc2NhcGUgKCZsZXhwdHIsIG1hc2spOworCWVsc2UgaWYgKGMgPT0gJ1wnJykKKwkgIGJyZWFrOworICAgICAgfQorICAgICAgeXlsdmFsLm5hbWUuYWRkcmVzcyA9IHRva3N0YXJ0OworICAgICAgeXlsdmFsLm5hbWUubGVuZ3RoID0gbGV4cHRyIC0gc3RhcnRfcHRyOworICAgICAgcmV0dXJuIE5BTUU7CisgICAgfQorCisgICAgLyogVGhpcyBjb2RlIGZvciByZWFkaW5nIGEgY2hhcmFjdGVyIGNvbnN0YW50CisgICAgICAgaGFuZGxlcyBtdWx0aWNoYXJhY3RlciBjb25zdGFudHMgYW5kIHdpZGUgY2hhcmFjdGVycy4KKyAgICAgICBJdCBpcyBtb3N0bHkgY29waWVkIGZyb20gYy1sZXguYy4gICovCisgICAgeworICAgICAgcmVnaXN0ZXIgSE9TVF9XSURFX0lOVCByZXN1bHQgPSAwOworICAgICAgcmVnaXN0ZXIgbnVtX2NoYXJzID0gMDsKKyAgICAgIHVuc2lnbmVkIHdpZHRoID0gTUFYX0NIQVJfVFlQRV9TSVpFOworICAgICAgaW50IG1heF9jaGFyczsKKyAgICAgIGNoYXIgKnRva2VuX2J1ZmZlcjsKKworICAgICAgaWYgKHdpZGVfZmxhZykKKwl7CisJICB3aWR0aCA9IE1BWF9XQ0hBUl9UWVBFX1NJWkU7CisjaWZkZWYgTVVMVElCWVRFX0NIQVJTCisJICBtYXhfY2hhcnMgPSBNQl9DVVJfTUFYOworI2Vsc2UKKwkgIG1heF9jaGFycyA9IDE7CisjZW5kaWYKKwl9CisgICAgICBlbHNlCisJbWF4X2NoYXJzID0gTUFYX0xPTkdfVFlQRV9TSVpFIC8gd2lkdGg7CisKKyAgICAgIHRva2VuX2J1ZmZlciA9IChjaGFyICopIGFsbG9jYSAobWF4X2NoYXJzICsgMSk7CisKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIGMgPSAqbGV4cHRyKys7CisKKwkgIGlmIChjID09ICdcJycgfHwgYyA9PSBFT0YpCisJICAgIGJyZWFrOworCisJICBpZiAoYyA9PSAnXFwnKQorCSAgICB7CisJICAgICAgYyA9IHBhcnNlX2VzY2FwZSAoJmxleHB0ciwgbWFzayk7CisJICAgIH0KKworCSAgbnVtX2NoYXJzKys7CisKKwkgIC8qIE1lcmdlIGNoYXJhY3RlciBpbnRvIHJlc3VsdDsgaWdub3JlIGV4Y2VzcyBjaGFycy4gICovCisJICBpZiAobnVtX2NoYXJzIDw9IG1heF9jaGFycykKKwkgICAgeworCSAgICAgIGlmICh3aWR0aCA8IEhPU1RfQklUU19QRVJfV0lERV9JTlQpCisJCXJlc3VsdCA9IChyZXN1bHQgPDwgd2lkdGgpIHwgYzsKKwkgICAgICBlbHNlCisJCXJlc3VsdCA9IGM7CisJICAgICAgdG9rZW5fYnVmZmVyW251bV9jaGFycyAtIDFdID0gYzsKKwkgICAgfQorCX0KKworICAgICAgdG9rZW5fYnVmZmVyW251bV9jaGFyc10gPSAwOworCisgICAgICBpZiAoYyAhPSAnXCcnKQorCWVycm9yICgibWFsZm9ybWF0dGVkIGNoYXJhY3RlciBjb25zdGFudCIpOworICAgICAgZWxzZSBpZiAobnVtX2NoYXJzID09IDApCisJZXJyb3IgKCJlbXB0eSBjaGFyYWN0ZXIgY29uc3RhbnQiKTsKKyAgICAgIGVsc2UgaWYgKG51bV9jaGFycyA+IG1heF9jaGFycykKKwl7CisJICBudW1fY2hhcnMgPSBtYXhfY2hhcnM7CisJICBlcnJvciAoImNoYXJhY3RlciBjb25zdGFudCB0b28gbG9uZyIpOworCX0KKyAgICAgIGVsc2UgaWYgKG51bV9jaGFycyAhPSAxICYmICEgdHJhZGl0aW9uYWwpCisJd2FybmluZyAoIm11bHRpLWNoYXJhY3RlciBjaGFyYWN0ZXIgY29uc3RhbnQiKTsKKworICAgICAgLyogSWYgY2hhciB0eXBlIGlzIHNpZ25lZCwgc2lnbi1leHRlbmQgdGhlIGNvbnN0YW50LiAgKi8KKyAgICAgIGlmICghIHdpZGVfZmxhZykKKwl7CisJICBpbnQgbnVtX2JpdHMgPSBudW1fY2hhcnMgKiB3aWR0aDsKKworCSAgaWYgKGxvb2t1cCAoKFVfQ0hBUiAqKSAiX19DSEFSX1VOU0lHTkVEX18iLAorCQkgICAgICBzaXplb2YgKCJfX0NIQVJfVU5TSUdORURfXyIpIC0gMSwgLTEpCisJICAgICAgfHwgKChyZXN1bHQgPj4gKG51bV9iaXRzIC0gMSkpICYgMSkgPT0gMCkKKwkgICAgeXlsdmFsLmludGVnZXIudmFsdWUKKwkgICAgICA9IHJlc3VsdCAmICh+ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAwCisJCQkgID4+IChIT1NUX0JJVFNfUEVSX1dJREVfSU5UIC0gbnVtX2JpdHMpKTsKKwkgIGVsc2UKKwkgICAgeXlsdmFsLmludGVnZXIudmFsdWUKKwkgICAgICA9IHJlc3VsdCB8IH4ofiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMAorCQkJICAgPj4gKEhPU1RfQklUU19QRVJfV0lERV9JTlQgLSBudW1fYml0cykpOworCX0KKyAgICAgIGVsc2UKKwl7CisjaWZkZWYgTVVMVElCWVRFX0NIQVJTCisJICAvKiBTZXQgdGhlIGluaXRpYWwgc2hpZnQgc3RhdGUgYW5kIGNvbnZlcnQgdGhlIG5leHQgc2VxdWVuY2UuICAqLworCSAgcmVzdWx0ID0gMDsKKwkgIC8qIEluIGFsbCBsb2NhbGVzIEwnXDAnIGlzIHplcm8gYW5kIG1idG93YyB3aWxsIHJldHVybiB6ZXJvLAorCSAgICAgc28gZG9uJ3QgdXNlIGl0LiAgKi8KKwkgIGlmIChudW1fY2hhcnMgPiAxCisJICAgICAgfHwgKG51bV9jaGFycyA9PSAxICYmIHRva2VuX2J1ZmZlclswXSAhPSAnXDAnKSkKKwkgICAgeworCSAgICAgIHdjaGFyX3Qgd2M7CisJICAgICAgKHZvaWQpIG1idG93YyAoTlVMTF9QVFIsIE5VTExfUFRSLCAwKTsKKwkgICAgICBpZiAobWJ0b3djICgmIHdjLCB0b2tlbl9idWZmZXIsIG51bV9jaGFycykgPT0gbnVtX2NoYXJzKQorCQlyZXN1bHQgPSB3YzsKKwkgICAgICBlbHNlCisJCXBlZHdhcm4gKCJJZ25vcmluZyBpbnZhbGlkIG11bHRpYnl0ZSBjaGFyYWN0ZXIiKTsKKwkgICAgfQorI2VuZGlmCisJICB5eWx2YWwuaW50ZWdlci52YWx1ZSA9IHJlc3VsdDsKKwl9CisgICAgfQorCisgICAgLyogVGhpcyBpcyBhbHdheXMgYSBzaWduZWQgdHlwZS4gICovCisgICAgeXlsdmFsLmludGVnZXIuc2lnbmVkcCA9IFNJR05FRDsKKyAgICAKKyAgICByZXR1cm4gQ0hBUjsKKworICAgIC8qIHNvbWUgb2YgdGhlc2UgY2hhcnMgYXJlIGludmFsaWQgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnM7CisgICAgICAgbWF5YmUgZG8gc29tZXRoaW5nIGFib3V0IHRoZW0gbGF0ZXIgKi8KKyAgY2FzZSAnLyc6CisgIGNhc2UgJysnOgorICBjYXNlICctJzoKKyAgY2FzZSAnKic6CisgIGNhc2UgJyUnOgorICBjYXNlICd8JzoKKyAgY2FzZSAnJic6CisgIGNhc2UgJ14nOgorICBjYXNlICd+JzoKKyAgY2FzZSAnISc6CisgIGNhc2UgJ0AnOgorICBjYXNlICc8JzoKKyAgY2FzZSAnPic6CisgIGNhc2UgJ1snOgorICBjYXNlICddJzoKKyAgY2FzZSAnLic6CisgIGNhc2UgJz8nOgorICBjYXNlICc6JzoKKyAgY2FzZSAnPSc6CisgIGNhc2UgJ3snOgorICBjYXNlICd9JzoKKyAgY2FzZSAnLCc6CisgIGNhc2UgJyMnOgorICAgIGlmIChrZXl3b3JkX3BhcnNpbmcpCisgICAgICBicmVhazsKKyAgY2FzZSAnKCc6CisgIGNhc2UgJyknOgorICAgIGxleHB0cisrOworICAgIHJldHVybiBjOworCisgIGNhc2UgJyInOgorICAgIG1hc2sgPSBNQVhfQ0hBUl9UWVBFX01BU0s7CisgIHN0cmluZ19jb25zdGFudDoKKyAgICBpZiAoa2V5d29yZF9wYXJzaW5nKSB7CisgICAgICBjaGFyICpzdGFydF9wdHIgPSBsZXhwdHI7CisgICAgICBsZXhwdHIrKzsKKyAgICAgIHdoaWxlICgxKSB7CisJYyA9ICpsZXhwdHIrKzsKKwlpZiAoYyA9PSAnXFwnKQorCSAgYyA9IHBhcnNlX2VzY2FwZSAoJmxleHB0ciwgbWFzayk7CisJZWxzZSBpZiAoYyA9PSAnIicpCisJICBicmVhazsKKyAgICAgIH0KKyAgICAgIHl5bHZhbC5uYW1lLmFkZHJlc3MgPSB0b2tzdGFydDsKKyAgICAgIHl5bHZhbC5uYW1lLmxlbmd0aCA9IGxleHB0ciAtIHN0YXJ0X3B0cjsKKyAgICAgIHJldHVybiBOQU1FOworICAgIH0KKyAgICB5eWVycm9yICgic3RyaW5nIGNvbnN0YW50cyBub3QgYWxsb3dlZCBpbiAjaWYgZXhwcmVzc2lvbnMiKTsKKyAgICByZXR1cm4gRVJST1I7CisgIH0KKworICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScgJiYgIWtleXdvcmRfcGFyc2luZykgeworICAgIC8qIEl0J3MgYSBudW1iZXIgKi8KKyAgICBmb3IgKG5hbWVsZW4gPSAxOyA7IG5hbWVsZW4rKykgeworICAgICAgaW50IGQgPSB0b2tzdGFydFtuYW1lbGVuXTsKKyAgICAgIGlmICghICgoaXNfaWRjaGFyW2RdIHx8IGQgPT0gJy4nKQorCSAgICAgfHwgKChkID09ICctJyB8fCBkID09ICcrJykKKwkJICYmIChjID09ICdlJyB8fCBjID09ICdFJworCQkgICAgIHx8ICgoYyA9PSAncCcgfHwgYyA9PSAnUCcpICYmICEgYzg5KSkKKwkJICYmICEgdHJhZGl0aW9uYWwpKSkKKwlicmVhazsKKyAgICAgIGMgPSBkOworICAgIH0KKyAgICByZXR1cm4gcGFyc2VfbnVtYmVyIChuYW1lbGVuKTsKKyAgfQorCisgIC8qIEl0IGlzIGEgbmFtZS4gIFNlZSBob3cgbG9uZyBpdCBpcy4gICovCisKKyAgaWYgKGtleXdvcmRfcGFyc2luZykgeworICAgIGZvciAobmFtZWxlbiA9IDA7OyBuYW1lbGVuKyspIHsKKyAgICAgIGlmIChpc19zcGFjZVt0b2tzdGFydFtuYW1lbGVuXV0pCisJYnJlYWs7CisgICAgICBpZiAodG9rc3RhcnRbbmFtZWxlbl0gPT0gJygnIHx8IHRva3N0YXJ0W25hbWVsZW5dID09ICcpJykKKwlicmVhazsKKyAgICAgIGlmICh0b2tzdGFydFtuYW1lbGVuXSA9PSAnIicgfHwgdG9rc3RhcnRbbmFtZWxlbl0gPT0gJ1wnJykKKwlicmVhazsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKCFpc19pZHN0YXJ0W2NdKSB7CisgICAgICB5eWVycm9yICgiSW52YWxpZCB0b2tlbiBpbiBleHByZXNzaW9uIik7CisgICAgICByZXR1cm4gRVJST1I7CisgICAgfQorCisgICAgZm9yIChuYW1lbGVuID0gMDsgaXNfaWRjaGFyW3Rva3N0YXJ0W25hbWVsZW5dXTsgbmFtZWxlbisrKQorICAgICAgOworICB9CisgIAorICBsZXhwdHIgKz0gbmFtZWxlbjsKKyAgeXlsdmFsLm5hbWUuYWRkcmVzcyA9IHRva3N0YXJ0OworICB5eWx2YWwubmFtZS5sZW5ndGggPSBuYW1lbGVuOworICByZXR1cm4gTkFNRTsKK30KKworCisvKiBQYXJzZSBhIEMgZXNjYXBlIHNlcXVlbmNlLiAgU1RSSU5HX1BUUiBwb2ludHMgdG8gYSB2YXJpYWJsZQorICAgY29udGFpbmluZyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyB0byBwYXJzZS4gIFRoYXQgcG9pbnRlcgorICAgaXMgdXBkYXRlZCBwYXN0IHRoZSBjaGFyYWN0ZXJzIHdlIHVzZS4gIFRoZSB2YWx1ZSBvZiB0aGUKKyAgIGVzY2FwZSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KKworICAgUkVTVUxUX01BU0sgaXMgdXNlZCB0byBtYXNrIG91dCB0aGUgcmVzdWx0OworICAgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgYml0cyBhcmUgbG9zdCB0aGVyZWJ5LgorCisgICBBIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRoZSBzZXF1ZW5jZSBcIG5ld2xpbmUgd2FzIHNlZW4sCisgICB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBlcXVpdmFsZW50IHRvIG5vdGhpbmcgYXQgYWxsLgorCisgICBJZiBcIGlzIGZvbGxvd2VkIGJ5IGEgbnVsbCBjaGFyYWN0ZXIsIHdlIHJldHVybiBhIG5lZ2F0aXZlCisgICB2YWx1ZSBhbmQgbGVhdmUgdGhlIHN0cmluZyBwb2ludGVyIHBvaW50aW5nIGF0IHRoZSBudWxsIGNoYXJhY3Rlci4KKworICAgSWYgXCBpcyBmb2xsb3dlZCBieSAwMDAsIHdlIHJldHVybiAwIGFuZCBsZWF2ZSB0aGUgc3RyaW5nIHBvaW50ZXIKKyAgIGFmdGVyIHRoZSB6ZXJvcy4gIEEgdmFsdWUgb2YgMCBkb2VzIG5vdCBtZWFuIGVuZCBvZiBzdHJpbmcuICAqLworCitIT1NUX1dJREVfSU5UCitwYXJzZV9lc2NhcGUgKHN0cmluZ19wdHIsIHJlc3VsdF9tYXNrKQorICAgICBjaGFyICoqc3RyaW5nX3B0cjsKKyAgICAgSE9TVF9XSURFX0lOVCByZXN1bHRfbWFzazsKK3sKKyAgcmVnaXN0ZXIgaW50IGMgPSAqKCpzdHJpbmdfcHRyKSsrOworICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJ2EnOgorICAgICAgcmV0dXJuIFRBUkdFVF9CRUxMOworICAgIGNhc2UgJ2InOgorICAgICAgcmV0dXJuIFRBUkdFVF9CUzsKKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdFJzoKKyAgICAgIGlmIChwZWRhbnRpYykKKwlwZWR3YXJuICgibm9uLUFOU0ktc3RhbmRhcmQgZXNjYXBlIHNlcXVlbmNlLCBgXFwlYyciLCBjKTsKKyAgICAgIHJldHVybiAwMzM7CisgICAgY2FzZSAnZic6CisgICAgICByZXR1cm4gVEFSR0VUX0ZGOworICAgIGNhc2UgJ24nOgorICAgICAgcmV0dXJuIFRBUkdFVF9ORVdMSU5FOworICAgIGNhc2UgJ3InOgorICAgICAgcmV0dXJuIFRBUkdFVF9DUjsKKyAgICBjYXNlICd0JzoKKyAgICAgIHJldHVybiBUQVJHRVRfVEFCOworICAgIGNhc2UgJ3YnOgorICAgICAgcmV0dXJuIFRBUkdFVF9WVDsKKyAgICBjYXNlICdcbic6CisgICAgICByZXR1cm4gLTI7CisgICAgY2FzZSAwOgorICAgICAgKCpzdHJpbmdfcHRyKS0tOworICAgICAgcmV0dXJuIDA7CisgICAgICAKKyAgICBjYXNlICcwJzoKKyAgICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAgICAgIHsKKwlyZWdpc3RlciBIT1NUX1dJREVfSU5UIGkgPSBjIC0gJzAnOworCXJlZ2lzdGVyIGludCBjb3VudCA9IDA7CisJd2hpbGUgKCsrY291bnQgPCAzKQorCSAgeworCSAgICBjID0gKigqc3RyaW5nX3B0cikrKzsKKwkgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzcnKQorCSAgICAgIGkgPSAoaSA8PCAzKSArIGMgLSAnMCc7CisJICAgIGVsc2UKKwkgICAgICB7CisJCSgqc3RyaW5nX3B0ciktLTsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgfQorCWlmIChpICE9IChpICYgcmVzdWx0X21hc2spKQorCSAgeworCSAgICBpICY9IHJlc3VsdF9tYXNrOworCSAgICBwZWR3YXJuICgib2N0YWwgZXNjYXBlIHNlcXVlbmNlIG91dCBvZiByYW5nZSIpOworCSAgfQorCXJldHVybiBpOworICAgICAgfQorICAgIGNhc2UgJ3gnOgorICAgICAgeworCXJlZ2lzdGVyIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgaSA9IDAsIG92ZXJmbG93ID0gMDsKKwlyZWdpc3RlciBpbnQgZGlnaXRzX2ZvdW5kID0gMCwgZGlnaXQ7CisJZm9yICg7OykKKwkgIHsKKwkgICAgYyA9ICooKnN0cmluZ19wdHIpKys7CisJICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKwkgICAgICBkaWdpdCA9IGMgLSAnMCc7CisJICAgIGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQorCSAgICAgIGRpZ2l0ID0gYyAtICdhJyArIDEwOworCSAgICBlbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKKwkgICAgICBkaWdpdCA9IGMgLSAnQScgKyAxMDsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJKCpzdHJpbmdfcHRyKS0tOworCQlicmVhazsKKwkgICAgICB9CisJICAgIG92ZXJmbG93IHw9IGkgXiAoaSA8PCA0ID4+IDQpOworCSAgICBpID0gKGkgPDwgNCkgKyBkaWdpdDsKKwkgICAgZGlnaXRzX2ZvdW5kID0gMTsKKwkgIH0KKwlpZiAoIWRpZ2l0c19mb3VuZCkKKwkgIHl5ZXJyb3IgKCJcXHggdXNlZCB3aXRoIG5vIGZvbGxvd2luZyBoZXggZGlnaXRzIik7CisJaWYgKG92ZXJmbG93IHwgKGkgIT0gKGkgJiByZXN1bHRfbWFzaykpKQorCSAgeworCSAgICBpICY9IHJlc3VsdF9tYXNrOworCSAgICBwZWR3YXJuICgiaGV4IGVzY2FwZSBzZXF1ZW5jZSBvdXQgb2YgcmFuZ2UiKTsKKwkgIH0KKwlyZXR1cm4gaTsKKyAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGM7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAoreXllcnJvciAocykKKyAgICAgY2hhciAqczsKK3sKKyAgZXJyb3IgKCIlcyIsIHMpOworICBza2lwX2V2YWx1YXRpb24gPSAwOworICBsb25nam1wIChwYXJzZV9yZXR1cm5fZXJyb3IsIDEpOworfQorCitzdGF0aWMgdm9pZAoraW50ZWdlcl9vdmVyZmxvdyAoKQoreworICBpZiAoIXNraXBfZXZhbHVhdGlvbiAmJiBwZWRhbnRpYykKKyAgICBwZWR3YXJuICgiaW50ZWdlciBvdmVyZmxvdyBpbiBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiIpOworfQorCitzdGF0aWMgSE9TVF9XSURFX0lOVAorbGVmdF9zaGlmdCAoYSwgYikKKyAgICAgc3RydWN0IGNvbnN0YW50ICphOworICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGI7Cit7CisgICAvKiBJdCdzIHVuY2xlYXIgZnJvbSB0aGUgQyBzdGFuZGFyZCB3aGV0aGVyIHNoaWZ0cyBjYW4gb3ZlcmZsb3cuCisgICAgICBUaGUgZm9sbG93aW5nIGNvZGUgaWdub3JlcyBvdmVyZmxvdzsgcGVyaGFwcyBhIEMgc3RhbmRhcmQKKyAgICAgIGludGVycHJldGF0aW9uIHJ1bGluZyBpcyBuZWVkZWQuICAqLworICBpZiAoYiA+PSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBhLT52YWx1ZSA8PCBiOworfQorCitzdGF0aWMgSE9TVF9XSURFX0lOVAorcmlnaHRfc2hpZnQgKGEsIGIpCisgICAgIHN0cnVjdCBjb25zdGFudCAqYTsKKyAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBiOworeworICBpZiAoYiA+PSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UKQorICAgIHJldHVybiBhLT5zaWduZWRwID8gYS0+dmFsdWUgPj4gKEhPU1RfQklUU19QRVJfV0lERV9JTlQgLSAxKSA6IDA7CisgIGVsc2UgaWYgKGEtPnNpZ25lZHApCisgICAgcmV0dXJuIGEtPnZhbHVlID4+IGI7CisgIGVsc2UKKyAgICByZXR1cm4gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIGEtPnZhbHVlID4+IGI7Cit9CisMCisvKiBUaGlzIHBhZ2UgY29udGFpbnMgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgZmlsZS4gICovCisKKy8qIFBhcnNlIFNUUklORyBhcyBhbiBleHByZXNzaW9uLCBhbmQgY29tcGxhaW4gaWYgdGhpcyBmYWlscworICAgdG8gdXNlIHVwIGFsbCBvZiB0aGUgY29udGVudHMgb2YgU1RSSU5HLiAgKi8KKy8qIFNUUklORyBtYXkgY29udGFpbiAnXDAnIGJ5dGVzOyBpdCBpcyB0ZXJtaW5hdGVkIGJ5IHRoZSBmaXJzdCAnXG4nCisgICBvdXRzaWRlIGEgc3RyaW5nIGNvbnN0YW50LCBzbyB0aGF0IHdlIGNhbiBkaWFnbm9zZSAnXDAnIHByb3Blcmx5LiAgKi8KKy8qIFdlIGRvIG5vdCBzdXBwb3J0IEMgY29tbWVudHMuICBUaGV5IHNob3VsZCBiZSByZW1vdmVkIGJlZm9yZQorICAgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICAqLworCitIT1NUX1dJREVfSU5UCitwYXJzZV9jX2V4cHJlc3Npb24gKHN0cmluZykKKyAgICAgY2hhciAqc3RyaW5nOworeworICBsZXhwdHIgPSBzdHJpbmc7CisKKyAgLyogaWYgdGhlcmUgaXMgc29tZSBzb3J0IG9mIHNjYW5uaW5nIGVycm9yLCBqdXN0IHJldHVybiAwIGFuZCBhc3N1bWUKKyAgICAgdGhlIHBhcnNpbmcgcm91dGluZSBoYXMgcHJpbnRlZCBhbiBlcnJvciBtZXNzYWdlIHNvbWV3aGVyZS4KKyAgICAgdGhlcmUgaXMgc3VyZWx5IGEgYmV0dGVyIHRoaW5nIHRvIGRvIHRoYW4gdGhpcy4gICAgICovCisgIGlmIChzZXRqbXAgKHBhcnNlX3JldHVybl9lcnJvcikpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHl5cGFyc2UgKCkgIT0gMCkKKyAgICBhYm9ydCAoKTsKKworICBpZiAoKmxleHB0ciAhPSAnXG4nKQorICAgIGVycm9yICgiSnVuayBhZnRlciBlbmQgb2YgZXhwcmVzc2lvbi4iKTsKKworICByZXR1cm4gZXhwcmVzc2lvbl92YWx1ZTsJLyogc2V0IGJ5IHl5cGFyc2UgKCkgKi8KK30KKwwKKyNpZmRlZiBURVNUX0VYUF9SRUFERVIKKworI2lmIFlZREVCVUcKK2V4dGVybiBpbnQgeXlkZWJ1ZzsKKyNlbmRpZgorCitpbnQgcGVkYW50aWM7CitpbnQgdHJhZGl0aW9uYWw7CisKK2ludCBtYWluIFBST1RPKChpbnQsIGNoYXIgKiopKTsKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfcmFuZG9tX2p1bmsgUFJPVE8oKHZvaWQpKTsKKworLyogTWFpbiBwcm9ncmFtIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgKi8KK2ludAorbWFpbiAoYXJnYywgYXJndikKKyAgICAgaW50IGFyZ2M7CisgICAgIGNoYXIgKiphcmd2OworeworICBpbnQgbiwgYzsKKyAgY2hhciBidWZbMTAyNF07CisKKyAgcGVkYW50aWMgPSAxIDwgYXJnYzsKKyAgdHJhZGl0aW9uYWwgPSAyIDwgYXJnYzsKKyNpZiBZWURFQlVHCisgIHl5ZGVidWcgPSAzIDwgYXJnYzsKKyNlbmRpZgorICBpbml0aWFsaXplX3JhbmRvbV9qdW5rICgpOworCisgIGZvciAoOzspIHsKKyAgICBwcmludGYgKCJlbnRlciBleHByZXNzaW9uOiAiKTsKKyAgICBuID0gMDsKKyAgICB3aGlsZSAoKGJ1ZltuXSA9IGMgPSBnZXRjaGFyICgpKSAhPSAnXG4nICYmIGMgIT0gRU9GKQorICAgICAgbisrOworICAgIGlmIChjID09IEVPRikKKyAgICAgIGJyZWFrOworICAgIHByaW50ZiAoInBhcnNlciByZXR1cm5lZCAlbGRcbiIsIChsb25nKSBwYXJzZV9jX2V4cHJlc3Npb24gKGJ1ZikpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHRhYmxlIHRvIHRlbGwgaWYgY2hhciBjYW4gYmUgcGFydCBvZiBhIEMgaWRlbnRpZmllci4gKi8KK3Vuc2lnbmVkIGNoYXIgaXNfaWRjaGFyWzI1Nl07CisvKiB0YWJsZSB0byB0ZWxsIGlmIGNoYXIgY2FuIGJlIGZpcnN0IGNoYXIgb2YgYSBjIGlkZW50aWZpZXIuICovCit1bnNpZ25lZCBjaGFyIGlzX2lkc3RhcnRbMjU2XTsKKy8qIHRhYmxlIHRvIHRlbGwgaWYgYyBpcyBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNwYWNlLiAgKi8KK3Vuc2lnbmVkIGNoYXIgaXNfc3BhY2VbMjU2XTsKKworLyoKKyAqIGluaXRpYWxpemUgcmFuZG9tIGp1bmsgaW4gdGhlIGhhc2ggdGFibGUgYW5kIG1heWJlIG90aGVyIHBsYWNlcworICovCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9yYW5kb21fanVuayAoKQoreworICByZWdpc3RlciBpbnQgaTsKKworICAvKgorICAgKiBTZXQgdXAgaXNfaWRjaGFyIGFuZCBpc19pZHN0YXJ0IHRhYmxlcy4gIFRoZXNlIHNob3VsZCBiZQorICAgKiBmYXN0ZXIgdGhhbiBzYXlpbmcgKGlzX2FscGhhIChjKSB8fCBjID09ICdfJyksIGV0Yy4KKyAgICogTXVzdCBkbyBzZXQgdXAgdGhlc2UgdGhpbmdzIGJlZm9yZSBjYWxsaW5nIGFueSByb3V0aW5lcyB0dGhhdAorICAgKiByZWZlciB0byB0aGVtLgorICAgKi8KKyAgZm9yIChpID0gJ2EnOyBpIDw9ICd6JzsgaSsrKSB7CisgICAgKytpc19pZGNoYXJbaSAtICdhJyArICdBJ107CisgICAgKytpc19pZGNoYXJbaV07CisgICAgKytpc19pZHN0YXJ0W2kgLSAnYScgKyAnQSddOworICAgICsraXNfaWRzdGFydFtpXTsKKyAgfQorICBmb3IgKGkgPSAnMCc7IGkgPD0gJzknOyBpKyspCisgICAgKytpc19pZGNoYXJbaV07CisgICsraXNfaWRjaGFyWydfJ107CisgICsraXNfaWRzdGFydFsnXyddOworICArK2lzX2lkY2hhclsnJCddOworICArK2lzX2lkc3RhcnRbJyQnXTsKKworICArK2lzX3NwYWNlWycgJ107CisgICsraXNfc3BhY2VbJ1x0J107CisgICsraXNfc3BhY2VbJ1x2J107CisgICsraXNfc3BhY2VbJ1xmJ107CisgICsraXNfc3BhY2VbJ1xuJ107CisgICsraXNfc3BhY2VbJ1xyJ107Cit9CisKK3ZvaWQKK2Vycm9yIChQUklOVEZfQUxJU1QgKG1zZykpCisgICAgIFBSSU5URl9EQ0wgKG1zZykKK3sKKyAgdmFfbGlzdCBhcmdzOworCisgIFZBX1NUQVJUIChhcmdzLCBtc2cpOworICBmcHJpbnRmIChzdGRlcnIsICJlcnJvcjogIik7CisgIHZmcHJpbnRmIChzdGRlcnIsIG1zZywgYXJncyk7CisgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgIHZhX2VuZCAoYXJncyk7Cit9CisKK3ZvaWQKK3BlZHdhcm4gKFBSSU5URl9BTElTVCAobXNnKSkKKyAgICAgUFJJTlRGX0RDTCAobXNnKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgVkFfU1RBUlQgKGFyZ3MsIG1zZyk7CisgIGZwcmludGYgKHN0ZGVyciwgInBlZHdhcm46ICIpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtc2csIGFyZ3MpOworICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICB2YV9lbmQgKGFyZ3MpOworfQorCit2b2lkCit3YXJuaW5nIChQUklOVEZfQUxJU1QgKG1zZykpCisgICAgIFBSSU5URl9EQ0wgKG1zZykKK3sKKyAgdmFfbGlzdCBhcmdzOworCisgIFZBX1NUQVJUIChhcmdzLCBtc2cpOworICBmcHJpbnRmIChzdGRlcnIsICJ3YXJuaW5nOiAiKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbXNnLCBhcmdzKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgdmFfZW5kIChhcmdzKTsKK30KKworaW50CitjaGVja19hc3NlcnRpb24gKG5hbWUsIHN5bV9sZW5ndGgsIHRva2Vuc19zcGVjaWZpZWQsIHRva2VucykKKyAgICAgVV9DSEFSICpuYW1lOworICAgICBpbnQgc3ltX2xlbmd0aDsKKyAgICAgaW50IHRva2Vuc19zcGVjaWZpZWQ7CisgICAgIHN0cnVjdCBhcmdsaXN0ICp0b2tlbnM7Cit7CisgIHJldHVybiAwOworfQorCitzdHJ1Y3QgaGFzaG5vZGUgKgorbG9va3VwIChuYW1lLCBsZW4sIGhhc2gpCisgICAgIFVfQ0hBUiAqbmFtZTsKKyAgICAgaW50IGxlbjsKKyAgICAgaW50IGhhc2g7Cit7CisgIHJldHVybiAoREVGQVVMVF9TSUdORURfQ0hBUikgPyAwIDogKChzdHJ1Y3QgaGFzaG5vZGUgKikgLTEpOworfQorCitHRU5FUklDX1BUUgoreG1hbGxvYyAoc2l6ZSkKKyAgICAgc2l6ZV90IHNpemU7Cit7CisgIHJldHVybiAoR0VORVJJQ19QVFIpIG1hbGxvYyAoc2l6ZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2djYy9jb25maWcuaW4gYi9nY2MvY29uZmlnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDRlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnLmluCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGNvbmZpZy5pbi4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBJbmNsdWRlIHRoZSBvbGQgY29uZmlnLmggYXMgY29uZmlnMi5oIHRvIHNpbXBsaWZ5IHRoZSB0cmFuc2l0aW9uCisgICB0byBhdXRvY29uZi4gICovCisjaW5jbHVkZSAiY29uZmlnMi5oIgorCisvKiBXaGV0aGVyIG1hbGxvYyBtdXN0IGJlIGRlY2xhcmVkIGV2ZW4gaWYgPHN0ZGxpYi5oPiBpcyBpbmNsdWRlZC4gICovCisjdW5kZWYgTkVFRF9ERUNMQVJBVElPTl9NQUxMT0MKKworLyogV2hldGhlciByZWFsbG9jIG11c3QgYmUgZGVjbGFyZWQgZXZlbiBpZiA8c3RkbGliLmg+IGlzIGluY2x1ZGVkLiAgKi8KKyN1bmRlZiBORUVEX0RFQ0xBUkFUSU9OX1JFQUxMT0MKKworLyogV2hldGhlciBmcmVlIG11c3QgYmUgZGVjbGFyZWQgZXZlbiBpZiA8c3RkbGliLmg+IGlzIGluY2x1ZGVkLiAgKi8KKyN1bmRlZiBORUVEX0RFQ0xBUkFUSU9OX0ZSRUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkZGVmLmg+IGhlYWRlciBmaWxlLiAgKi8KKyN1bmRlZiBIQVZFX1NURERFRl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gICovCisjdW5kZWYgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gICovCisjdW5kZWYgSEFWRV9USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAgKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2EyOWsveG0tdW5peC5oIGIvZ2NjL2NvbmZpZy9hMjlrL3htLXVuaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZkOGZkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9hMjlrL3htLXVuaXguaApAQCAtMCwwICsxLDQzIEBACisvKiBDb25maWd1cmF0aW9uIGZvciBHTlUgQy1jb21waWxlciBmb3IgQU1EIEFtMjkwMDAgcHJvY2Vzc29yLiAKKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk4OCwgMTk5MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisvKiAjZGVmaW5lcyB0aGF0IG5lZWQgdmlzaWJpbGl0eSBldmVyeXdoZXJlLiAgKi8KKyNkZWZpbmUgRkFMU0UgMAorI2RlZmluZSBUUlVFIDEKKworLyogVGhpcyBkZXNjcmliZXMgdGhlIG1hY2hpbmUgdGhlIGNvbXBpbGVyIGlzIGhvc3RlZCBvbi4gICovCisjZGVmaW5lIEhPU1RfQklUU19QRVJfQ0hBUiA4CisjZGVmaW5lIEhPU1RfQklUU19QRVJfU0hPUlQgMTYKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9JTlQgMzIKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9MT05HIDMyCisjZGVmaW5lIEhPU1RfQklUU19QRVJfTE9OR0xPTkcgNjQKKworI2RlZmluZSBIT1NUX1dPUkRTX0JJR19FTkRJQU4KKworLyogdGFyZ2V0IG1hY2hpbmUgZGVwZW5kZW5jaWVzLgorICAgdG0uaCBpcyBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIGFjdHVhbCB0YXJnZXQgc3BlY2lmaWMgZmlsZS4gICAqLworI2luY2x1ZGUgInRtLmgiCisKKy8qIEFyZ3VtZW50cyB0byB1c2Ugd2l0aCBgZXhpdCcuICAqLworI2RlZmluZSBTVUNDRVNTX0VYSVRfQ09ERSAwCisjZGVmaW5lIEZBVEFMX0VYSVRfQ09ERSAzMworCisvKiBVbHRyYSBpcyBWNywgd2hpY2ggaXMgY2xvc2VzdCB0byBVU0cuICAqLworI2RlZmluZSBVU0cKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaCBiL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAppbmRleCA4MzExMDFlLi4zMTA5YjVjIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKysrIGIvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCkBAIC0yNjcsNiArMjY3LDIzIEBACiAvKiBEZWZpbmUgdG8gZW5hYmxlIHNvZnR3YXJlIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbi4gKi8KICNkZWZpbmUgUkVBTF9BUklUSE1FVElDCiAKKy8qIFRoZSBmb2xsb3dpbmcgI2RlZmluZXMgYXJlIHVzZWQgd2hlbiBjb21waWxpbmcgdGhlIHJvdXRpbmVzIGluCisgICBsaWJnY2MxLmMuICBTaW5jZSB0aGUgQWxwaGEgY2FsbGluZyBjb252ZW50aW9ucyByZXF1aXJlIHNpbmdsZQorICAgcHJlY2lzaW9uIGZsb2F0cyB0byBiZSBwYXNzZWQgaW4gdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycworICAgKHJhdGhlciB0aGFuIGluIHRoZSBnZW5lcmFsIHJlZ2lzdGVycykgd2UgaGF2ZSB0byBidWlsZCB0aGUKKyAgIGxpYmdjYzEuYyByb3V0aW5lcyBpbiBzdWNoIGEgd2F5IHRoYXQgdGhleSBrbm93IHRoZSBhY3R1YWwgdHlwZXMKKyAgIG9mIHRoZWlyIGZvcm1hbCBhcmd1bWVudHMgYW5kIHRoZSBhY3R1YWwgdHlwZXMgb2YgdGhlaXIgcmV0dXJuCisgICB2YWx1ZXMuICBPdGhlcndpc2UsIGdjYyB3aWxsIGdlbmVyYXRlIGNhbGxzIHRvIHRoZSBsaWJnY2MxLmMKKyAgIHJvdXRpbmVzLCBwYXNzaW5nIGFyZ3VtZW50cyBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLAorICAgYnV0IHRoZSBsaWJnY2MxLmMgcm91dGluZXMgd2lsbCBleHBlY3QgdGhlaXIgYXJndW1lbnRzIG9uIHRoZQorICAgc3RhY2sgKHdoZXJlIHRoZSBBbHBoYSBjYWxsaW5nIGNvbnZlbnRpb25zIHJlcXVpcmUgc3RydWN0cyAmCisgICB1bmlvbnMgdG8gYmUgcGFzc2VkKS4gICovCisKKyNkZWZpbmUgRkxPQVRfVkFMVUVfVFlQRQlkb3VibGUKKyNkZWZpbmUgSU5USUZZKEZMT0FUVkFMKQkoRkxPQVRWQUwpCisjZGVmaW5lIEZMT0FUSUZZKElOVFZBTCkJKElOVFZBTCkKKyNkZWZpbmUgRkxPQVRfQVJHX1RZUEUJCWRvdWJsZQorCiAvKiBEZWZpbmUgdGhlIHNpemUgb2YgYGludCcuICBUaGUgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yZCBzaXplLiAgKi8KICNkZWZpbmUgSU5UX1RZUEVfU0laRSAzMgogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FscGhhL3htLWxpbnV4LmggYi9nY2MvY29uZmlnL2FscGhhL3htLWxpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyNmM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvYWxwaGEveG0tbGludXguaApAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgSEFWRV9TVFJFUlJPUgorI2RlZmluZSBET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QKKyNkZWZpbmUgVVNFX0JGRApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0veG0tbGludXguaCBiL2djYy9jb25maWcvYXJtL3htLWxpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1Mzc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvYXJtL3htLWxpbnV4LmgKQEAgLTAsMCArMSwyNCBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBJbnRlbCBpMzg2IHJ1bm5pbmcgTGludXguCisgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBILkouIEx1IChoamxAbnluZXhzdC5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2luY2x1ZGUgPGFybS94bS1hcm0uaD4KKyNpbmNsdWRlIDx4bS1saW51eC5oPgorCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS94bS1uZXRic2QuaCBiL2djYy9jb25maWcvYXJtL3htLW5ldGJzZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjN2E2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2FybS94bS1uZXRic2QuaApAQCAtMCwwICsxLDEwIEBACisvKiBDb25maWd1cmF0aW9uIGZvciBHQ0MgZm9yIEFSTSBydW5uaW5nIE5ldEJTRCBhcyBob3N0LiAgKi8KKworI2luY2x1ZGUgPGFybS94bS1hcm0uaD4KKworLyogeG0tbmV0YnNkLmggZGVmaW5lcyB0aGlzICovCisjaWZkZWYgSEFWRV9WUFJJTlRGCisjdW5kZWYgSEFWRV9WUFJJTlRGCisjZW5kaWYKKworI2luY2x1ZGUgPHhtLW5ldGJzZC5oPgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2RndXguaCBiL2djYy9jb25maWcvaTM4Ni9kZ3V4LmgKaW5kZXggNDY5Y2UxNC4uNGE5MjNmYyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2RndXguaAorKysgYi9nY2MvY29uZmlnL2kzODYvZGd1eC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiaTM4Ni9zeXN2NC5oIgogCiAjaWZuZGVmIFZFUlNJT05fSU5GTzIKLSNkZWZpbmUgVkVSU0lPTl9JTkZPMiAgICIkUmV2aXNpb246IDEuNSAkIgorI2RlZmluZSBWRVJTSU9OX0lORk8yICAgIiRSZXZpc2lvbjogMS4xICQiCiAjZW5kaWYKIAogI2lmbmRlZiBWRVJTSU9OX1NUUklORwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3htLWJzZDM4Ni5oIGIvZ2NjL2NvbmZpZy9pMzg2L3htLWJzZDM4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODIzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2kzODYveG0tYnNkMzg2LmgKQEAgLTAsMCArMSwxMSBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBJbnRlbCBpMzg2IHJ1bm5pbmcgQlNESSdzIEJTRC8zODYgYXMgaG9zdC4gICovCisKKyNpbmNsdWRlICJpMzg2L3htLWkzODYuaCIKKworI2RlZmluZSBIQVZFX1NUUkVSUk9SCisKKy8qIFdlIGhhdmUgX3N5c19zaWdsaXN0LCBidXQgdGhlIGRlY2xhcmF0aW9uIGluIDxzaWduYWwuaD4gY29uZmxpY3RzIHdpdGgKKyAgIHRoZSBkZWNsYXJhdGlvbnMgaW4gY29sbGVjdDIuYyBzbyBkaXNhYmxlIHRoZSBkZWNsYXJhdGlvbnMKKyAgIGluIHRob3NlIGZpbGVzLiAgKi8KKworI2RlZmluZSBET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni94bS1kZ3V4LmggYi9nY2MvY29uZmlnL2kzODYveG0tZGd1eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGI5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2kzODYveG0tZGd1eC5oCkBAIC0wLDAgKzEsMTIgQEAKKworLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBJbnRlbCBpMzg2IHJ1bm5pbmcgREcvdXggKi8KKworLyogbG9va3MganVzdCBsaWtlIHN5c3Y0IGZvciBub3cgKi8KKworI2luY2x1ZGUgImkzODYveG0taTM4Ni5oIgorI2luY2x1ZGUgInhtLXN2cjQuaCIKKworLyogSWYgbm90IGNvbXBpbGVkIHdpdGggR05VIEMsIHVzZSB0aGUgcG9ydGFibGUgYWxsb2NhLiAgKi8KKyNpZm5kZWYgX19HTlVDX18KKyNkZWZpbmUgVVNFX0NfQUxMT0NBCisjZW5kaWYKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni94bS1mcmVlYnNkLmggYi9nY2MvY29uZmlnL2kzODYveG0tZnJlZWJzZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwN2E2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2kzODYveG0tZnJlZWJzZC5oCkBAIC0wLDAgKzEsNCBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBJbnRlbCBpMzg2IHJ1bm5pbmcgRnJlZUJTRCBhcyBob3N0LiAgKi8KKworI2luY2x1ZGUgPGkzODYveG0taTM4Ni5oPgorI2luY2x1ZGUgPHhtLWZyZWVic2QuaD4KZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni94bS1nbnUuaCBiL2djYy9jb25maWcvaTM4Ni94bS1nbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjU5ODVmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3htLWdudS5oCkBAIC0wLDAgKzEsNSBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBJbnRlbCBpMzg2IHJ1bm5pbmcgR05VIGFzIGhvc3QuICAqLworCisjaW5jbHVkZSA8aTM4Ni94bS1pMzg2Lmg+CisjaW5jbHVkZSA8eG0tZ251Lmg+CisKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni94bS1saW51eC5oIGIvZ2NjL2NvbmZpZy9pMzg2L3htLWxpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmMDk3ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvaTM4Ni94bS1saW51eC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdDQyBmb3IgSW50ZWwgaTM4NiBydW5uaW5nIExpbnV4LgorICAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgSC5KLiBMdSAoaGpsQG55bmV4c3QuY29tKQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpbmNsdWRlIDxpMzg2L3htLWkzODYuaD4KKyNpbmNsdWRlIDx4bS1saW51eC5oPgorCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYveG0tbmV0YnNkLmggYi9nY2MvY29uZmlnL2kzODYveG0tbmV0YnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5ZjMyNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvaTM4Ni94bS1uZXRic2QuaApAQCAtMCwwICsxLDQgQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdDQyBmb3IgSW50ZWwgaTM4NiBydW5uaW5nIE5ldEJTRCBhcyBob3N0LiAgKi8KKworI2luY2x1ZGUgPGkzODYveG0taTM4Ni5oPgorI2luY2x1ZGUgPHhtLW5ldGJzZC5oPgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3htLXN1bi5oIGIvZ2NjL2NvbmZpZy9pMzg2L3htLXN1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTcxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2kzODYveG0tc3VuLmgKQEAgLTAsMCArMSwyNyBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR05VIEMtY29tcGlsZXIgZm9yIEludGVsIDgwMzg2IHJ1bm5pbmcgU3VuT1MgNC4wLgorICAgQ29weXJpZ2h0IChDKSAxOTg4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgVVNHCisKKyNpbmNsdWRlICJpMzg2L3htLWkzODYuaCIKKworI2RlZmluZSBiY29weShhLGIsYykgbWVtY3B5IChiLGEsYykKKyNkZWZpbmUgYnplcm8oYSxiKSBtZW1zZXQgKGEsMCxiKQorI2RlZmluZSBiY21wKGEsYixjKSBtZW1jbXAgKGEsYixjKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3htLXN5c3YzLmggYi9nY2MvY29uZmlnL2kzODYveG0tc3lzdjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjA3OGJiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3htLXN5c3YzLmgKQEAgLTAsMCArMSw0IEBACisvKiBDb25maWd1cmF0aW9uIGZvciBHQ0MgZm9yIEludGVsIGkzODYgcnVubmluZyBTeXN0ZW0gViBSZWxlYXNlIDMuICAqLworCisjaW5jbHVkZSAiaTM4Ni94bS1pMzg2LmgiCisjaW5jbHVkZSAieG0tc3ZyMy5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3htLXdpbm50LmggYi9nY2MvY29uZmlnL2kzODYveG0td2lubnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZkMmNkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3htLXdpbm50LmgKQEAgLTAsMCArMSwyNCBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR05VIGNvbXBpbGVyCisgICBmb3IgYW4gSW50ZWwgaTM4NiBvciBsYXRlciBwcm9jZXNzb3IgcnVubmluZyBXaW5kb3dzIE5UIDMueC4KKyAgIENvcHlyaWdodCAoQykgMTk5NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IERvdWdsYXMgQi4gUnVwcCAoZHJ1cHBAY3Mud2FzaGluZ3Rvbi5lZHUpCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2luY2x1ZGUgIndpbm50L3htLXdpbm50LmgiCisjaW5jbHVkZSAiaTM4Ni94bS1pMzg2LmgiCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2k4NjAvaTg2MC5oIGIvZ2NjL2NvbmZpZy9pODYwL2k4NjAuaAppbmRleCAyOWE0MmNjLi40N2ViN2RjIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2k4NjAvaTg2MC5oCisrKyBiL2djYy9jb25maWcvaTg2MC9pODYwLmgKQEAgLTEsNiArMSw2IEBACiAvKiBEZWZpbml0aW9ucyBvZiB0YXJnZXQgbWFjaGluZSBmb3IgR05VIGNvbXBpbGVyLCBmb3IgSW50ZWwgODYwLgotICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxLCAxOTkzLCAxOTk1LCAxOTk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgSGFja2VkIHN1YnN0YW50aWFsbHkgYnkgUm9uIEd1aWxtZXR0ZSAocmZnQHNlZ2ZhdWx0LnVzLmNvbSkgdG8gY2F0ZXIgdG8KKyAgIENvcHlyaWdodCAoQykgMTk4OSwgOTEsIDkzLCA5NSwgOTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBIYWNrZWQgc3Vic3RhbnRpYWxseSBieSBSb24gR3VpbG1ldHRlIChyZmdAbW9ua2V5cy5jb20pIHRvIGNhdGVyIHRvCiAgICB0aGUgd2hpbXMgb2YgdGhlIFN5c3RlbSBWIFJlbGVhc2UgNCBhc3NlbWJsZXIuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KQEAgLTEzNjksNyArMTM2OSw3IEBACiAgICBzdGFjayAod2hlcmUgdGhlIGk4NjAgY2FsbGluZyBjb252ZW50aW9ucyByZXF1aXJlIHN0cnVjdHMgJgogICAgdW5pb25zIHRvIGJlIHBhc3NlZCkuICAqLwogCi0jZGVmaW5lIEZMT0FUX1RZUEVfVkFMVUUJZmxvYXQKKyNkZWZpbmUgRkxPQVRfVkFMVUVfVFlQRQlmbG9hdAogI2RlZmluZSBJTlRJRlkoRkxPQVRWQUwpCShGTE9BVFZBTCkKICNkZWZpbmUgRkxPQVRJRlkoSU5UVkFMKQkoSU5UVkFMKQogI2RlZmluZSBGTE9BVF9BUkdfVFlQRQkJZmxvYXQKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTg2MC94bS1meDI4MDAuaCBiL2djYy9jb25maWcvaTg2MC94bS1meDI4MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWFiNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9pODYwL3htLWZ4MjgwMC5oCkBAIC0wLDAgKzEsNyBAQAorLyogQWxsaWFudCBGWC8yODAwIHJ1bm5pbmcgQ29uY2VudHJpeCAyLnguICovCisKKy8qIHZmcHJpbnRmIGlzIG5vdCBwcmVzZW50IHByaW9yIHRvIENvbmNlbnRyaXggMi4yLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZQorICAgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGNwcCBzeW1ib2wgdGhhdCBpZGVudGlmaWVzIE9TIHJldmlzaW9uLiBVbmRlZmluZQorICAgdGhlIGZvbGxvd2luZyBpZiBydW5uaW5nIDIuMSBvciBvbGRlci4gICovCisKKyNkZWZpbmUgSEFWRV9WUFJJTlRGCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL202OGsvbW90MzMwMC1jcnQwLlMgYi9nY2MvY29uZmlnL202OGsvbW90MzMwMC1jcnQwLlMKaW5kZXggYzg2ZTU2Yi4uZTlmYzFkNCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9tNjhrL21vdDMzMDAtY3J0MC5TCisrKyBiL2djYy9jb25maWcvbTY4ay9tb3QzMzAwLWNydDAuUwpAQCAtOTcsNyArOTcsNyBAQAogCiAjaWZkZWYgU1RSSU5HCiAJU0VDVElPTiAoLmNvbW1lbnQpCi0JU1RSSU5HICgiJElkOiBjcnQwLlMsdiAxLjYgMTk5NS8xMi8wNyAxNzoxNzo0NyBtYW5mcmVkIEV4cCAkXG4iKQorCVNUUklORyAoIiRJZDogbW90MzMwMC1jcnQwLlMsdiAxLjEgMTk5Ny8wOC8xMSAxNTo1NzozMiBsYXcgRXhwICRcbiIpCiAJU1RSSU5HICgiQ29udHJpYnV0ZWQgYnkgbWFuZnJlZEBsdHMuc2VsLmFsY2F0ZWwuZGUgKE1hbmZyZWQgSG9sbHN0ZWluLCBHZXJtYW55KVxuIikKICNlbHNlCiAJYnl0ZQknQywnbywnbiwndCwnciwnaSwnYiwndSwndCwnZSwnZCwnICwnYiwneQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9tNjhrL21vdDMzMDBNY3J0MC5TIGIvZ2NjL2NvbmZpZy9tNjhrL21vdDMzMDBNY3J0MC5TCmluZGV4IDUyNTYxZTYuLmFjYjMxN2MgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvbTY4ay9tb3QzMzAwTWNydDAuUworKysgYi9nY2MvY29uZmlnL202OGsvbW90MzMwME1jcnQwLlMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAjaWZkZWYgU1RSSU5HCiAJU0VDVElPTiAoLmNvbW1lbnQpCi0JU1RSSU5HICgiJElkOiBtY3J0MC5TLHYgMS41IDE5OTUvMTIvMDcgMTc6MjM6MzkgbWFuZnJlZCBFeHAgJFxuIikKKwlTVFJJTkcgKCIkSWQ6IG1vdDMzMDBNY3J0MC5TLHYgMS4xIDE5OTcvMDgvMTEgMTU6NTc6MzIgbGF3IEV4cCAkXG4iKQogCVNUUklORyAoIkNvbnRyaWJ1dGVkIGJ5IG1hbmZyZWRAbHRzLnNlbC5hbGNhdGVsLmRlIChNYW5mcmVkIEhvbGxzdGVpbiwgR2VybWFueSlcbiIpCiAjZWxzZQogCWJ5dGUJJ0MsJ28sJ24sJ3QsJ3IsJ2ksJ2IsJ3UsJ3QsJ2UsJ2QsJyAsJ2IsJ3kKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbTY4ay94bS1hbHRvczMwNjguaCBiL2djYy9jb25maWcvbTY4ay94bS1hbHRvczMwNjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRmNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9tNjhrL3htLWFsdG9zMzA2OC5oCkBAIC0wLDAgKzEsNyBAQAorI2RlZmluZSBVU0cKKworI2luY2x1ZGUgIm02OGsveG0tbTY4ay5oIgorCisjZGVmaW5lIGJjb3B5KGEsYixjKSBtZW1jcHkgKGIsYSxjKQorI2RlZmluZSBiemVybyhhLGIpIG1lbXNldCAoYSwwLGIpCisjZGVmaW5lIGJjbXAoYSxiLGMpIG1lbWNtcCAoYSxiLGMpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL202OGsveG0tYW1peC5oIGIvZ2NjL2NvbmZpZy9tNjhrL3htLWFtaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI0YmQxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9tNjhrL3htLWFtaXguaApAQCAtMCwwICsxLDQ3IEBACisvKiBEZWZpbml0aW9ucyBvZiBob3N0IG1hY2hpbmUgZm9yIEdOVSBjb21waWxlci4KKyAgIENvbW1vZG9yZSBBbWlnYSBBMzAwMFVYIHZlcnNpb24uCisKKyAgIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDEsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaW5jbHVkZSAibTY4ay94bS1tNjhrdi5oIgkvKiBVc2UgdGhlIFN5c3RlbSBWIGZsYXZvciBvZiBtNjhrIGhvc3QgKi8KKworI2RlZmluZSBIQVZFX1ZQUklOVEYJCS8qIEhvc3QgaGFzIHZwcmludGYoKSBpbiBsaWJyYXJ5ICovCisjZGVmaW5lIHJpbmRleCBzdHJyY2hyCisjZGVmaW5lIGluZGV4IHN0cmNocgorCisvKiBEZWZpbmUgRlVMTF9QUk9UT1RZUEVTIGZvciBwcm90b2l6ZS5jLCB0byBnZXQgPHVuaXN0ZC5oPiBpbmNsdWRlZC4KKyAgIFdlIG5lZWQgdGhpcyBmaWxlIGZvciB0aGluZ3MgbGlrZSBSX09LLCBub3QgbmVjZXNzYXJpbHkgcHJvdG90eXBlcy4gKi8KKworI2RlZmluZSBGVUxMX1BST1RPVFlQRVMKKworI2lmIGRlZmluZWQgKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA9PSAxCisjZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZW5kaWYKKworI2lmIDAgLyogSSBkb24ndCB3YW50IGluZGl2aWR1YWwgcG9ydHMgdG8gYmUgaW5jb25zaXN0ZW50IGFib3V0IHRoaXMuCisJIEkgcmVnYXJkIGZhbmN5X2Fib3J0IGFzIGEgaGFsZi1zb2x1dGlvbiBhbmQgbm90IHRoZSByaWdodCB3YXkKKwkgdG8gZG8gdGhpbmdzLiAtLXJtcy4gICovCisvKiBUaGUgbTg4ayBhbmQgbWlwcyBwb3J0cyBtYWtlIHVzZSBvZiBmYW5jeV9hYm9ydCB0byBnaXZlIHBvc3NpYmx5IGhlbHBmdWwKKyAgIGFib3J0IGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIGp1c3QgZHVtcGluZyBjb3JlLiAgVGhleSBkbyBpdCBpbiB0aGVpcgorICAgdG0tKiBmaWxlcy4gIEl0IHNlZW1zIG1vcmUgbG9naWNhbCB0aGF0IHRoaXMgaXMgYSBjaGFyYWN0ZXJpc3RpYyBvZgorICAgdGhlIGhvc3QgbWFjaGluZSBhbmQgbm90IHRoZSB0YXJnZXQgbWFjaGluZSwgc28gd2UgZG8gaXQgaGVyZS4gKi8KKworI2RlZmluZSBhYm9ydCBmYW5jeV9hYm9ydAkvKiBnaXZlIHBvc3NpYmx5IGhlbHBmdWwgYWJvcnQgaW5mbyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL202OGsveG0tYXV4LmggYi9nY2MvY29uZmlnL202OGsveG0tYXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbTY4ay94bS1hdXguaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgVVNHCisjZGVmaW5lIFVTRworI2VuZGlmCisKKyNpZm5kZWYgQVVYCisjZGVmaW5lIEFVWAorI2VuZGlmCisKKyNpbmNsdWRlICJtNjhrL3htLW02OGsuaCIKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbTY4ay94bS1ocDMyMC5oIGIvZ2NjL2NvbmZpZy9tNjhrL3htLWhwMzIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyNGMzYQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbTY4ay94bS1ocDMyMC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFVTRyBpcyBuZWVkZWQgdG8gcHJldmVudCB0cnlpbmcgdG8gdXNlIGdldHJ1c2FnZSBhbmQgZ2V0d2QuICAqLworI2RlZmluZSBVU0cKKworI2luY2x1ZGUgIm02OGsveG0tbTY4ay5oIgorCisjZGVmaW5lIGJjb3B5KGEsYixjKSBtZW1jcHkgKGIsYSxjKQorI2RlZmluZSBiemVybyhhLGIpIG1lbXNldCAoYSwwLGIpCisjZGVmaW5lIGJjbXAoYSxiLGMpIG1lbWNtcCAoYSxiLGMpCisjZGVmaW5lIHJpbmRleCBzdHJyY2hyCisjZGVmaW5lIGluZGV4IHN0cmNocgorCisvKiBJZiBjb21waWxpbmcgd2l0aCBIUFVYIGNvbXBpbGVyLCB3ZSBhcmUgcHJvYmFibHkgdXNpbmcgYWxsb2NhLmMsCisgICBzbyBoZWxwIGl0IHdvcmsgcmlnaHQuICAqLworI2lmbmRlZiBfX0dOVUNfXworI2RlZmluZSBVU0VfQ19BTExPQ0EKKyNlbmRpZgorCisvKiBEb24ndCB0cnkgdG8gdXNlIHN5c19zaWdsaXN0LiAgKi8KKyNkZWZpbmUgTk9fU1lTX1NJR0xJU1QKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbTY4ay94bS1saW51eC5oIGIvZ2NjL2NvbmZpZy9tNjhrL3htLWxpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMDUwNgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbTY4ay94bS1saW51eC5oCkBAIC0wLDAgKzEsNCBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBNb3Rvcm9sYSBtNjhrIHJ1bm5pbmcgTGludXguICovCisKKyNpbmNsdWRlIDxtNjhrL3htLW02OGsuaD4KKyNpbmNsdWRlIDx4bS1saW51eC5oPgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9tNjhrL3htLW02OGt2LmggYi9nY2MvY29uZmlnL202OGsveG0tbTY4a3YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNjZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9tNjhrL3htLW02OGt2LmgKQEAgLTAsMCArMSwxNSBAQAorLyogSG9zdCBlbnZpcm9ubWVudCBmb3IgNjgwMDAncyBydW5uaW5nIFN5c3RlbSBWLiAgKi8KKworI2luY2x1ZGUgIm02OGsveG0tbTY4ay5oIgorCisjZGVmaW5lIFVTRworI2RlZmluZSBiY29weShhLGIsYykgbWVtY3B5IChiLGEsYykKKyNkZWZpbmUgYnplcm8oYSxiKSBtZW1zZXQgKGEsMCxiKQorI2RlZmluZSBiY21wKGEsYixjKSBtZW1jbXAgKGEsYixjKQorCisjZGVmaW5lIHJpbmRleCBzdHJyY2hyCisjZGVmaW5lIGluZGV4IHN0cmNocgorCisjaWZuZGVmIF9fR05VQ19fCisjZGVmaW5lIFVTRV9DX0FMTE9DQQorI2VuZGlmCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL202OGsveG0tbmV0YnNkLmggYi9nY2MvY29uZmlnL202OGsveG0tbmV0YnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhMzNjZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbTY4ay94bS1uZXRic2QuaApAQCAtMCwwICsxLDQgQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdDQyBmb3IgTW90b3JvbGEgNjhrIHJ1bm5pbmcgTmV0QlNEIGFzIGhvc3QuICAqLworCisjaW5jbHVkZSA8bTY4ay94bS1tNjhrLmg+CisjaW5jbHVkZSA8eG0tbmV0YnNkLmg+CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL202OGsveG0tc3VuMy5oIGIvZ2NjL2NvbmZpZy9tNjhrL3htLXN1bjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWZlNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9tNjhrL3htLXN1bjMuaApAQCAtMCwwICsxLDUgQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdDQyBmb3IgTW90b3JvbGEgbTY4ayBvbiBzdW4zLiAqLworCisjZGVmaW5lIEhBVkVfUE9QRU4KKworI2luY2x1ZGUgIm02OGsveG0tbTY4ay5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9tNjhrL3htLXRvd2VyLmggYi9nY2MvY29uZmlnL202OGsveG0tdG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2I0NTZmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9tNjhrL3htLXRvd2VyLmgKQEAgLTAsMCArMSw0IEBACisjaW5jbHVkZSAibTY4ay94bS1tNjhrLmgiCisjaW5jbHVkZSAieG0tc3ZyMy5oIgorCisjZGVmaW5lIEhBVkVfVlBSSU5URgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9tODhrL2RndXguaCBiL2djYy9jb25maWcvbTg4ay9kZ3V4LmgKaW5kZXggZWRlZmZkZi4uNmEzYzQxMDIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvbTg4ay9kZ3V4LmgKKysrIGIvZ2NjL2NvbmZpZy9tODhrL2RndXguaApAQCAtMzAsNyArMzAsNyBAQAogICAoVEFSR0VUX1NWUjQgPyBEV0FSRl9ERUJVRyA6IFNEQl9ERUJVRykKIAogI2lmbmRlZiBWRVJTSU9OX0lORk8yCi0jZGVmaW5lIFZFUlNJT05fSU5GTzIgICAiJFJldmlzaW9uOiAxLjIzICQiCisjZGVmaW5lIFZFUlNJT05fSU5GTzIgICAiJFJldmlzaW9uOiAxLjI0ICQiCiAjZW5kaWYKICNpZm5kZWYgTk9fQlVHUwogI2RlZmluZSBBU19CVUdfSU1NRURJQVRFX0xBQkVMCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL204OGsvbTg4ay5oIGIvZ2NjL2NvbmZpZy9tODhrL204OGsuaAppbmRleCA4YTQ1NjEwLi43ZmM4ZWQ5IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL204OGsvbTg4ay5oCisrKyBiL2djYy9jb25maWcvbTg4ay9tODhrLmgKQEAgLTE5OCwxMyArMTk4LDEzIEBACiAgICBSZWRlZmluZWQgaW4gc3lzdjQuaCwgYW5kIGx1bmEuaC4gICovCiAjZGVmaW5lIFZFUlNJT05fSU5GTzEJIm04OGssICIKICNpZm5kZWYgVkVSU0lPTl9JTkZPMgotI2RlZmluZSBWRVJTSU9OX0lORk8yICAgIiRSZXZpc2lvbjogMS43MiAkIgorI2RlZmluZSBWRVJTSU9OX0lORk8yICAgIiRSZXZpc2lvbjogMS4xICQiCiAjZW5kaWYKIAogI2lmbmRlZiBWRVJTSU9OX1NUUklORwogI2RlZmluZSBWRVJTSU9OX1NUUklORyAgdmVyc2lvbl9zdHJpbmcKICNpZmRlZiBfX1NURENfXwotI2RlZmluZSBUTV9SQ1NfSUQgICAgICAiQCgjKSIgX19GSUxFX18gIiAkUmV2aXNpb246IDEuNzIgJCAiIF9fREFURV9fCisjZGVmaW5lIFRNX1JDU19JRCAgICAgICJAKCMpIiBfX0ZJTEVfXyAiICRSZXZpc2lvbjogMS4xICQgIiBfX0RBVEVfXwogI2Vsc2UKICNkZWZpbmUgVE1fUkNTX0lEICAgICAgIiRXaGF0OiA8QCgjKSBtODhrLmgsdgkxLjEuMS4yLjIuMj4gJCIKICNlbmRpZiAgLyogX19TVERDX18gKi8KZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9lbGZsb3Jpb24uaCBiL2djYy9jb25maWcvbWlwcy9lbGZsb3Jpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdmMTExCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9taXBzL2VsZmxvcmlvbi5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIERlZmluaXRpb25zIG9mIHRhcmdldCBtYWNoaW5lIGZvciBHTlUgY29tcGlsZXIuICBNSVBTIE9SSU9OIHZlcnNpb24gd2l0aAorICAgR09GQVNUIGZsb2F0aW5nIHBvaW50IGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2RlZmluZSBNSVBTX0NQVV9TVFJJTkdfREVGQVVMVCAib3Jpb24iCisKKyNpbmNsdWRlICJtaXBzL2VsZmw2NC5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL253czMyNTB2NC5oIGIvZ2NjL2NvbmZpZy9taXBzL253czMyNTB2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMWVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL21pcHMvbndzMzI1MHY0LmgKQEAgLTAsMCArMSwzNiBAQAorLyogRGVmaW5pdGlvbnMgb2YgdGFyZ2V0IG1hY2hpbmUgZm9yIEdOVSBjb21waWxlci4gIFNvbnkgUklTQyBORVdTIChtaXBzKQorICAgQ29weXJpZ2h0IChDKSAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgTUlQU19ORVdTCisKKyNkZWZpbmUgQ1BQX1BSRURFRklORVMgIlwKKy1EbWlwcyAtRGhvc3RfbWlwcyAtRHNvbnkgLURzb255cmlzYyAtRHVuaXggXAorLURMQU5HVUFHRV9DIC1ETUlQU0VCIC1EU1lTVFlQRV9TWVNWIFwKKy1Bc3lzdGVtKHVuaXgpIC1Bc3lzdGVtKHN2cjMpIC1BY3B1KG1pcHMpIC1BbWFjaGluZShtaXBzKSIKKworI2RlZmluZSBNRF9TVEFSVEZJTEVfUFJFRklYICIvdXNyL2Njcy9saWIvIgorCisjZGVmaW5lIExJQl9TUEVDICIle3A6LWxwcm9mMX0gJXtwZzotbHByb2YxfSAtbGMgY3J0bi5vJXMgdmFsdWVzLVh0Lm8lcyIKKworI2RlZmluZSBTVEFSVEZJTEVfU1BFQyAiJXtwZzpnY3J0MC5vJXN9JXshcGc6JXtwOm1jcnQwLm8lc30leyFwOmNydDEubyVzfX0iCisKKyNkZWZpbmUgTUFDSElORV9UWVBFICJSSVNDIE5FV1MtT1MgU1ZyNCIKKworI2luY2x1ZGUgIm1pcHMvbWlwcy5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3htLWlyaXMzLmggYi9nY2MvY29uZmlnL21pcHMveG0taXJpczMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDJhNTlhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9taXBzL3htLWlyaXMzLmgKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSAibWlwcy94bS1taXBzLmgiCisKKyNkZWZpbmUgVVNHCisKKyNkZWZpbmUgYmNvcHkoYSxiLGMpIG1lbWNweSAoYixhLGMpCisjZGVmaW5lIGJ6ZXJvKGEsYikgbWVtc2V0IChhLDAsYikKKyNkZWZpbmUgYmNtcChhLGIsYykgbWVtY21wIChhLGIsYykKKwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3htLWlyaXM0LmggYi9nY2MvY29uZmlnL21pcHMveG0taXJpczQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTJjMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9taXBzL3htLWlyaXM0LmgKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUgIm1pcHMveG0tbWlwcy5oIgorCisjZGVmaW5lIFVTRworI2RlZmluZSBIQVZFX1ZQUklOVEYKKworI2RlZmluZSBiY29weShhLGIsYykgbWVtY3B5IChiLGEsYykKKyNkZWZpbmUgYnplcm8oYSxiKSBtZW1zZXQgKGEsMCxiKQorI2RlZmluZSBiY21wKGEsYixjKSBtZW1jbXAgKGEsYixjKQorCisjaWYgMAorI2lmZGVmIF9fR05VQ19fCisvKiBUaGUgbm9ybWFsIGlyaXggY29tcGlsZXIgcmVxdWlyZXMgYWxsb2NhLmggb3IgYWxsb2NhIGRvZXNuJ3Qgd29yay4KKyAgIEhvd2V2ZXIsIHRoZSBJUklYIGNvbXBpbGVyIGRvZXNuJ3QgYWxsb3cgYWxsb2NhIHRvIGJlIHN0b3JlZCBpbgorICAgc29tZXRoaW5nIGxpa2UgcHRyLT5maWVsZCA9IGFsbG9jYSgpLCBzbyB3ZSBqdXN0IHVzZSB0aGUgbm9ybWFsCisgICBDIGFsbG9jYS4gICovCisjaW5jbHVkZSA8YWxsb2NhLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3htLW5ldGJzZC5oIGIvZ2NjL2NvbmZpZy9taXBzL3htLW5ldGJzZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDNjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL21pcHMveG0tbmV0YnNkLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAibWlwcy94bS1taXBzLmgiCisjaW5jbHVkZSAiY29uZmlnL3htLW5ldGJzZC5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3htLW5ld3MuaCBiL2djYy9jb25maWcvbWlwcy94bS1uZXdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwOWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbWlwcy94bS1uZXdzLmgKQEAgLTAsMCArMSw2IEBACisvKiBUaGlzIGZpbGUgaXMgZm9yIHRoZSBTb255IE1pcHMgTmV3cyBydW5uaW5nICJOZXdzT1MgVmVyc2lvbiA1IiwKKyAgIHdoaWNoIGlzIHJlYWxseSBTeXN0ZW0gVi4gICovCisjaW5jbHVkZSAibWlwcy94bS1zeXN2LmgiCisKKy8qIFNvbnkgaGFzIGEgZnVubnkgbmFtZSBmb3IgdGhpcyBzeW1ib2wuICAqLworI2RlZmluZSBzeXNfc2lnbGlzdCBfc3lzX3NpZ2xpc3QKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy94bS1ud3MzMjUwdjQuaCBiL2djYy9jb25maWcvbWlwcy94bS1ud3MzMjUwdjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGFiNjMxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9taXBzL3htLW53czMyNTB2NC5oCkBAIC0wLDAgKzEsOSBAQAorI2RlZmluZSBVU0cKKworI2luY2x1ZGUgInhtLW1pcHMuaCIKKworLyogSWYgY29tcGlsaW5nIHdpdGggbWlwcyBjb21waWxlciwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGFsbG9jYS5jLAorICAgc28gaGVscCBpdCB3b3JrIHJpZ2h0LiAgKi8KKyNpZm5kZWYgX19HTlVDX18KKyNkZWZpbmUgVVNFX0NfQUxMT0NBCisjZW5kaWYKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy94bS1zeXN2LmggYi9nY2MvY29uZmlnL21pcHMveG0tc3lzdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDUzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL21pcHMveG0tc3lzdi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdOVSBDLWNvbXBpbGVyIGZvciBVTUlQUyBvcGVyYXRpbmcgc3lzdGVtCisgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTAsIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyoKKyAqICBOb3RlcyBmb3IgY29tcGlsaW5nIGdjYyBvbiB1bWlwcyAodjMuMCkKKyAqCS0gY2hhbmdlIHRoZSAtZyBpbiB0aGUgQ0ZMQUdTIHRvIGEgLWczIG9yIHRha2UgaXQgb3V0IGFsbCB0b2dldGhlci4KKyAqCS0gZG8gbm90IGRlZmluZSBEQlhfREVCVUdHSU5HX0lORk8gaW4gdG0uaCwgaXQgZG9lc24ndCBleGlzdCAodW5sZXNzCisgKgl5b3UgZ2V0IG9uZSBmcm9tIGEgYnNkIHN5c3RlbSkKKyAqLworCisjZGVmaW5lIFVTRworCisjaW5jbHVkZSAibWlwcy94bS1taXBzLmgiCisKKyNkZWZpbmUgYmNvcHkoYSxiLGMpCW1lbWNweSgoYiksKGEpLChjKSkKKyNkZWZpbmUgYnplcm8oYSxiKQltZW1zZXQoKGEpLDAsKGIpKQorI2RlZmluZSBiY21wKGEsYixjKQltZW1jbXAoKGEpLChiKSwoYykpCisKKyNkZWZpbmUgcmluZGV4IHN0cnJjaHIKKyNkZWZpbmUgaW5kZXggc3RyY2hyCisKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy94bS1zeXN2NC5oIGIvZ2NjL2NvbmZpZy9taXBzL3htLXN5c3Y0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwYTc3MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbWlwcy94bS1zeXN2NC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlICJtaXBzL3htLXN5c3YuaCIKKworLyogU1ZSNCBwcm92aWRlcyBubyBzeXNfc2lnbGlzdCwKKyAgIGJ1dCBkb2VzIG9mZmVyIHRoZSBzYW1lIGRhdGEgdW5kZXIgYW5vdGhlciBuYW1lLiAgKi8KKyNkZWZpbmUgc3lzX3NpZ2xpc3QgX3N5c19zaWdsaXN0CisKKy8qIFRoZXJlIGlzIGEgZGVjbGFyYXRpb24gaW4gL3Vzci9pbmNsdWRlL3NpZ25hbC5oIHRoYXQgY29uZmxpY3RzIHdpdGggdGhlCisgICBkZWNsYXJhdGlvbnMgaW4gY29sbGVjdDIuYyBhbmQgbWlwcy10ZmlsZS5jLCBzbyBkaXNhYmxlIGdjYydzIGRlY2xhcmF0aW9ucy4KKyAgIFRoaXMgaXMgYXQgbGVhc3QgdHJ1ZSBmb3IgQ0RDJ3MgRVAvSVggMi4xLjEuICBJdCBpcyBzdXNwZWN0ZWQgdG8gYmUgdHJ1ZQorICAgZm9yIFJJU0MvT1MgNS54IGFsc28uICAqLworI2RlZmluZSBET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbnMzMmsveG0tZ2VuaXguaCBiL2djYy9jb25maWcvbnMzMmsveG0tZ2VuaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmJlM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9uczMyay94bS1nZW5peC5oCkBAIC0wLDAgKzEsOSBAQAorLyogQ29uZmlnIGZpbGUgZm9yIG5zMzJrIHJ1bm5pbmcgc3lzdGVtIFYuICAqLworCisjaW5jbHVkZSAibnMzMmsveG0tbnMzMmsuaCIKKworI2RlZmluZSBVU0cKKworI2RlZmluZSBiY29weShhLGIsYykgbWVtY3B5IChiLGEsYykKKyNkZWZpbmUgYnplcm8oYSxiKSBtZW1zZXQgKGEsMCxiKQorI2RlZmluZSBiY21wKGEsYixjKSBtZW1jbXAgKGEsYixjKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9uczMyay94bS1uZXRic2QuaCBiL2djYy9jb25maWcvbnMzMmsveG0tbmV0YnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0MDc1MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvbnMzMmsveG0tbmV0YnNkLmgKQEAgLTAsMCArMSwxMCBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBuczMyayBydW5uaW5nIE5ldEJTRCBhcyBob3N0LiAgKi8KKworI2luY2x1ZGUgPG5zMzJrL3htLW5zMzJrLmg+CisKKy8qIG5zMzJrL3htLW5zMzJrLmggZGVmaW5lcyB0aGVzZSBtYWNyb3MsIGJ1dCB3ZSBkb24ndCBuZWVkIHRoZW0gKi8KKyN1bmRlZiBtZW1jbXAKKyN1bmRlZiBtZW1jcHkKKyN1bmRlZiBtZW1zZXQKKworI2luY2x1ZGUgPHhtLW5ldGJzZC5oPgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zcGFyYy94bS1uZXRic2QuaCBiL2djYy9jb25maWcvc3BhcmMveG0tbmV0YnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxMWI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcvc3BhcmMveG0tbmV0YnNkLmgKQEAgLTAsMCArMSw0IEBACisvKiBDb25maWd1cmF0aW9uIGZvciBHQ0MgZm9yIFN1biBTUEFSQyBydW5uaW5nIE5ldEJTRCBhcyBob3N0LiAgKi8KKworI2luY2x1ZGUgPHNwYXJjL3htLXNwYXJjLmg+CisjaW5jbHVkZSA8eG0tbmV0YnNkLmg+CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL3htLXBiZC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy94bS1wYmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ5ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy94bS1wYmQuaApAQCAtMCwwICsxLDEzIEBACisvKiBIb3N0IGVudmlyb25tZW50IGZvciB0aGUgdHRpICJVbmljb20iIFBCQiA2ODAyMCBib2FyZHMgKi8KKworI2luY2x1ZGUgInNwYXJjL3htLXNwYXJjLmgiCisKKyNkZWZpbmUgVVNHCisjZGVmaW5lIGJjb3B5KGEsYixjKSBtZW1jcHkgKGIsYSxjKQorI2RlZmluZSBiemVybyhhLGIpIG1lbXNldCAoYSwwLGIpCisjZGVmaW5lIGJjbXAoYSxiLGMpIG1lbWNtcCAoYSxiLGMpCisKKyNpZm5kZWYgX19HTlVDX18KKyNkZWZpbmUgVVNFX0NfQUxMT0NBCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy92YXgveC12YXggYi9nY2MvY29uZmlnL3ZheC94LXZheApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjU4YTZhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy92YXgveC12YXgKQEAgLTAsMCArMSwzIEBACisjIElmIGNvbXBpbGluZyBHQ0Mgd2l0aCB0aGUgVW5peCBhc3NlbWJsZXIsIC1KIHdpbGwgaGFuZGxlIGEgbGFyZ2UgZnVuY3Rpb24uCisjIFdpdGggR0FTLCBpdCBzaG91bGQgaGF2ZSBubyBlZmZlY3QuCitYX0NQUEZMQUdTID0gLUoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvdmF4L3htLXZheHYuaCBiL2djYy9jb25maWcvdmF4L3htLXZheHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGExZDczCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy92YXgveG0tdmF4di5oCkBAIC0wLDAgKzEsNyBAQAorLyogQ29uZmlnIGZpbGUgZm9yIFZheCBydW5uaW5nIHN5c3RlbSBWLiAgKi8KKworI2RlZmluZSBVU0cKKworI2RlZmluZSBiY29weShhLGIsYykgbWVtY3B5IChiLGEsYykKKyNkZWZpbmUgYnplcm8oYSxiKSBtZW1zZXQgKGEsMCxiKQorI2RlZmluZSBiY21wKGEsYixjKSBtZW1jbXAgKGEsYixjKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy94bS1mcmVlYnNkLmggYi9nY2MvY29uZmlnL3htLWZyZWVic2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNjOWFhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZy94bS1mcmVlYnNkLmgKQEAgLTAsMCArMSwzMyBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR05VIEMtY29tcGlsZXIgZm9yIGhvc3RzIHJ1bm5pbmcgRnJlZUJTRC4KKyAgIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBtYWNoaW5lLWluZGVwZW5kZW50IHRoaW5ncyBzcGVjaWZpYyB0byBhIGhvc3QKKyAgIHJ1bm5pbmcgRnJlZUJTRC4gIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBhcyAkeG1fZmlsZSBpdHNlbGY7CisgICBpbnN0ZWFkICR4bV9maWxlIHNob3VsZCBiZSBDUFUveG0tZnJlZWJzZC5oLCB3aGljaCBzaG91bGQgaW5jbHVkZSBib3RoCisgICBDUFUveG0tQ1BVLmggYW5kIHRoaXMgZmlsZSB4bS1mcmVlYnNkLmguICAqLworICAgCisvKiBGcmVlQlNEIGhhcyBzdHJlcnJvci4gICovCisjZGVmaW5lIEhBVkVfU1RSRVJST1IKKworLyogV2UgaGF2ZSBfc3lzX3NpZ2xpc3QsIGJ1dCB0aGUgZGVjbGFyYXRpb24gaW4gPHNpZ25hbC5oPiBjb25mbGljdHMgd2l0aAorICAgdGhlIGRlY2xhcmF0aW9ucyBpbiBjb2xsZWN0Mi5jIGFuZCBtaXBzLXRmaWxlLmMsIHNvIGRpc2FibGUgdGhlIGRlY2xhcmF0aW9ucworICAgaW4gdGhvc2UgZmlsZXMuICAqLworCisjZGVmaW5lIERPTlRfREVDTEFSRV9TWVNfU0lHTElTVApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy94bS1saW51eC5oIGIvZ2NjL2NvbmZpZy94bS1saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjU1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL3htLWxpbnV4LmgKQEAgLTAsMCArMSw0NyBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR0NDIGZvciBJbnRlbCBpMzg2IHJ1bm5pbmcgTGludXguCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBILkouIEx1IChoamxAbnluZXhzdC5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI3VuZGVmICBIQVZFX1ZQUklOVEYKKyNkZWZpbmUgSEFWRV9WUFJJTlRGCisKKyN1bmRlZiAgSEFWRV9TVFJFUlJPUgorI2RlZmluZSBIQVZFX1NUUkVSUk9SCisKKyN1bmRlZiAgSEFWRV9QT1BFTgorI2RlZmluZSBIQVZFX1BPUEVOCisKKyN1bmRlZiAgUE9TSVgKKyNkZWZpbmUgUE9TSVgKKworI3VuZGVmICBET05UX0RFQ0xBUkVfU1lTX1NJR0xJU1QKKyNkZWZpbmUgRE9OVF9ERUNMQVJFX1NZU19TSUdMSVNUCisKKy8qIFdlIGRvIGhhdmUgb25lLCBidXQgSSdkIGxpa2UgdG8gdXNlIHRoZSBvbmUgY29tZSB3aXRoIGdjYyBzaW5jZQorICAgd2UgaGF2ZSBiZWVuIGRvaW5nIHRoYXQgZm9yIGEgbG9uZyB0aW1lIHdpdGggVVNHIGRlZmluZWQuICBILkouICovCisjZGVmaW5lIE5PX1NUQUJfSAorCisjdW5kZWYgQlNUUklORworI2RlZmluZSBCU1RSSU5HCisjdW5kZWYgYmNtcAorI3VuZGVmIGJjb3B5CisjdW5kZWYgYnplcm8KKyN1bmRlZiBpbmRleAorI3VuZGVmIHJpbmRleApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy94bS1uZXRic2QuaCBiL2djYy9jb25maWcveG0tbmV0YnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMDBjZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcveG0tbmV0YnNkLmgKQEAgLTAsMCArMSwyNyBAQAorLyogQ29uZmlndXJhdGlvbiBmb3IgR05VIEMtY29tcGlsZXIgZm9yIGhvc3RzIHJ1bm5pbmcgTmV0QlNELgorICAgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIFRoaXMgZmlsZSBkZWZpbmVzIG1hY2hpbmUtaW5kZXBlbmRlbnQgdGhpbmdzIHNwZWNpZmljIHRvIGEgaG9zdAorICAgcnVubmluZyBOZXRCU0QuICBUaGlzIGZpbGUgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgYXMgJHhtX2ZpbGUgaXRzZWxmOworICAgaW5zdGVhZCAkeG1fZmlsZSBzaG91bGQgYmUgQ1BVL3htLW5ldGJzZC5oLCB3aGljaCBzaG91bGQgaW5jbHVkZSBib3RoCisgICBDUFUveG0tQ1BVLmggYW5kIHRoaXMgZmlsZSB4bS1uZXRic2QuaC4gICovCisgICAKKyNkZWZpbmUgSEFWRV9TVFJFUlJPUgorI2RlZmluZSBIQVZFX1ZQUklOVEYKZGlmZiAtLWdpdCBhL2djYy9jb25maWcveG0tc3ZyMy5oIGIvZ2NjL2NvbmZpZy94bS1zdnIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMDAwZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcveG0tc3ZyMy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdOVSBDLWNvbXBpbGVyIGZvciBob3N0cyBydW5uaW5nIFN5c3RlbSBWIFJlbGVhc2UgMworICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgYmNvcHkoc3JjLGRzdCxsZW4pIG1lbWNweSAoKGRzdCksKHNyYyksKGxlbikpCisjZGVmaW5lIGJ6ZXJvKGRzdCxsZW4pIG1lbXNldCAoKGRzdCksMCwobGVuKSkKKyNkZWZpbmUgYmNtcChsZWZ0LHJpZ2h0LGxlbikgbWVtY21wICgobGVmdCksKHJpZ2h0KSwobGVuKSkKKworI2RlZmluZSByaW5kZXggc3RycmNocgorI2RlZmluZSBpbmRleCBzdHJjaHIKKworI2RlZmluZSBVU0cKKyNkZWZpbmUgSEFWRV9WUFJJTlRGCisKKyNpZm5kZWYgU1ZSMworI2RlZmluZSBTVlIzCisjZW5kaWYKZGlmZiAtLWdpdCBhL2djYy9jb25maWcveG0tc3ZyNC5oIGIvZ2NjL2NvbmZpZy94bS1zdnI0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwODQzMgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jb25maWcveG0tc3ZyNC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qIENvbmZpZ3VyYXRpb24gZm9yIEdOVSBDLWNvbXBpbGVyIGZvciBob3N0cyBydW5uaW5nIFN5c3RlbSBWIFJlbGVhc2UgNAorICAgQ29weXJpZ2h0IChDKSAxOTg4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgYmNvcHkoc3JjLGRzdCxsZW4pIG1lbWNweSAoKGRzdCksKHNyYyksKGxlbikpCisjZGVmaW5lIGJ6ZXJvKGRzdCxsZW4pIG1lbXNldCAoKGRzdCksMCwobGVuKSkKKyNkZWZpbmUgYmNtcChsZWZ0LHJpZ2h0LGxlbikgbWVtY21wICgobGVmdCksKHJpZ2h0KSwobGVuKSkKKworI2RlZmluZSByaW5kZXggc3RycmNocgorI2RlZmluZSBpbmRleCBzdHJjaHIKKworI2RlZmluZSBVU0cKKyNkZWZpbmUgSEFWRV9WUFJJTlRGCisKKyNkZWZpbmUgUE9TSVgKKworLyogU1ZSNCBwcm92aWRlcyBubyBzeXNfc2lnbGlzdCwKKyAgIGJ1dCBkb2VzIG9mZmVyIHRoZSBzYW1lIGRhdGEgdW5kZXIgYW5vdGhlciBuYW1lLiAgKi8KKyNkZWZpbmUgc3lzX3NpZ2xpc3QgX3N5c19zaWdsaXN0CmRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzE4MTUyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NvbmZpZ3VyZQpAQCAtMCwwICsxLDQ5MTEgQEAKKyMhIC9iaW4vc2gKKworIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSB1c2luZyBhdXRvY29uZiB2ZXJzaW9uIDIuMTIgCisjIENvcHlyaWdodCAoQykgMTk5MiwgOTMsIDk0LCA5NSwgOTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKworIyBEZWZhdWx0czoKK2FjX2hlbHA9CithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCisjIEFueSBhZGRpdGlvbnMgZnJvbSBjb25maWd1cmUuaW46CithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhcnJhbmdlIHRvIHdvcmsgd2l0aCBHTlUgbGQuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLWdudS1hcyAgICAgICAgICAgYXJyYW5nZSB0byB3b3JrIHdpdGggR05VIGFzLiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC1zdGFicyAgICAgICAgICAgIGFycmFuZ2UgdG8gdXNlIHN0YWJzIGluc3RlYWQgb2YgaG9zdCBkZWJ1ZyBmb3JtYXQuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLWVsZiAgICAgICAgICAgICAgYXJyYW5nZSB0byB1c2UgRUxGIGluc3RlYWQgb2YgaG9zdCBkZWJ1ZyBmb3JtYXQuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLWxvY2FsLXByZWZpeD1ESVIgc3BlY2lmaWVzIGRpcmVjdG9yeSB0byBwdXQgbG9jYWwgaW5jbHVkZS4iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPURJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgZGlyZWN0b3J5IHRvIHB1dCBnKysgaGVhZGVyIGZpbGVzLiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLWMtY3BwbGliICAgICAgIFVzZSBjcHBsaWIgZm9yIEMuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtdGhyZWFkcyAgICAgICAgZW5hYmxlIHRocmVhZCB1c2FnZSBmb3IgdGFyZ2V0IEdDQy4KKyAgLS1lbmFibGUtdGhyZWFkcz1MSUIgICAgdXNlIExJQiB0aHJlYWQgcGFja2FnZSBmb3IgdGFyZ2V0IEdDQy4iCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitidWlsZD1OT05FCitjYWNoZV9maWxlPS4vY29uZmlnLmNhY2hlCitleGVjX3ByZWZpeD1OT05FCitob3N0PU5PTkUKK25vX2NyZWF0ZT0KK25vbm9wdD1OT05FCitub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit0YXJnZXQ9Tk9ORQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFkaXI9JyR7cHJlZml4fS9zaGFyZScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworaW5mb2Rpcj0nJHtwcmVmaXh9L2luZm8nCittYW5kaXI9JyR7cHJlZml4fS9tYW4nCisKKyMgSW5pdGlhbGl6ZSBzb21lIG90aGVyIHZhcmlhYmxlcy4KK3N1YmRpcnM9CitNRkxBR1M9IE1BS0VGTEFHUz0KKyMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KK2FjX21heF9oZXJlX2xpbmVzPTEyCisKK2FjX3ByZXY9Citmb3IgYWNfb3B0aW9uCitkbworCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKyAgLSo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0aW9uIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7CisgICopIGFjX29wdGFyZz0gOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisgICAgYWNfcHJldj1idWlsZCA7OworICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKyAgICBidWlsZD0iJGFjX29wdGFyZyIgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorICAgIGFjX3ByZXY9ZGF0YWRpciA7OworICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qIHwgLS1kYXRhPSogfCAtLWRhdD0qIFwKKyAgfCAtLWRhPSopCisgICAgZGF0YWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmRpc2FibGUtLy8nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX2ZlYXR1cmU6IGludmFsaWQgZmVhdHVyZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCisgICAgZXZhbCAiZW5hYmxlXyR7YWNfZmVhdHVyZX09bm8iIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZW5hYmxlLS8vJyAtZSAncy89LiovLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorICAgICAgKj0qKSA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT0nJGFjX29wdGFyZyciIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgd2l0aF9nYXM9eWVzIDs7CisKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUpCisgICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICAgIGNhdCA8PCBFT0YKK1VzYWdlOiBjb25maWd1cmUgW29wdGlvbnNdIFtob3N0XQorT3B0aW9uczogW2RlZmF1bHRzIGluIGJyYWNrZXRzIGFmdGVyIGRlc2NyaXB0aW9uc10KK0NvbmZpZ3VyYXRpb246CisgIC0tY2FjaGUtZmlsZT1GSUxFICAgICAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFCisgIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQorICAtLW5vLWNyZWF0ZSAgICAgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAtLXF1aWV0LCAtLXNpbGVudCAgICAgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgLS12ZXJzaW9uICAgICAgICAgICAgICAgcHJpbnQgdGhlIHZlcnNpb24gb2YgYXV0b2NvbmYgdGhhdCBjcmVhdGVkIGNvbmZpZ3VyZQorRGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3NhbWUgYXMgcHJlZml4XQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYL3NoYXJlXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBpbiBESVIgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgaW4gRElSIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgaW4gRElSIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgaW4gRElSIFsvdXNyL2luY2x1ZGVdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9pbmZvXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9tYW5dCisgIC0tc3JjZGlyPURJUiAgICAgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIC4uXQorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworRU9GCisgICAgY2F0IDw8IEVPRgorSG9zdCB0eXBlOgorICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtCVUlMRD1IT1NUXQorICAtLWhvc3Q9SE9TVCAgICAgICAgICAgICBjb25maWd1cmUgZm9yIEhPU1QgW2d1ZXNzZWRdCisgIC0tdGFyZ2V0PVRBUkdFVCAgICAgICAgIGNvbmZpZ3VyZSBmb3IgVEFSR0VUIFtUQVJHRVQ9SE9TVF0KK0ZlYXR1cmVzIGFuZCBwYWNrYWdlczoKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0teC1pbmNsdWRlcz1ESVIgICAgICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCisgIC0teC1saWJyYXJpZXM9RElSICAgICAgIFggbGlicmFyeSBmaWxlcyBhcmUgaW4gRElSCitFT0YKKyAgICBpZiB0ZXN0IC1uICIkYWNfaGVscCI7IHRoZW4KKyAgICAgIGVjaG8gIi0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucyByZWNvZ25pemVkOiRhY19oZWxwIgorICAgIGZpCisgICAgZXhpdCAwIDs7CisKKyAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCisgICAgYWNfcHJldj1ob3N0IDs7CisgIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCisgICAgaG9zdD0iJGFjX29wdGFyZyIgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKKyAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKyAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgIHByZWZpeD0iJGFjX29wdGFyZyIgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9IiRhY19vcHRhcmciIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSIkYWNfb3B0YXJnIiA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0iJGFjX29wdGFyZyIgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXQgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldD0iJGFjX29wdGFyZyIgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMpCisgICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTIiCisgICAgZXhpdCAwIDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRoLS8vJyAtZSAncy89LiovLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorICAgICAgKj0qKSA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09JyRhY19vcHRhcmcnIiA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aG91dC0vLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1hLXpBLVowLTlfXS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09bm8iIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0iJGFjX29wdGFyZyIgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7CisKKyAgLSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX29wdGlvbjogaW52YWxpZCBvcHRpb247IHVzZSAtLWhlbHAgdG8gc2hvdyB1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19vcHRpb258IHNlZCAncy9bLWEtejAtOS5dLy9nJ2AiOyB0aGVuCisgICAgICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6ICRhY19vcHRpb246IGludmFsaWQgaG9zdCB0eXBlIiAxPiYyCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JG5vbm9wdCIgIT0geE5PTkU7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG9ubHkgY29uZmlndXJlIGZvciBvbmUgaG9zdCBhbmQgb25lIHRhcmdldCBhdCBhIHRpbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgbm9ub3B0PSIkYWNfb3B0aW9uIgorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvIC0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYCIgMT4mMjsgZXhpdCAxOyB9CitmaQorCit0cmFwICdybSAtZnIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb3JlIGNvcmUuKiAqLmNvcmUgJGFjX2NsZWFuX2ZpbGVzOyBleGl0IDEnIDEgMiAxNQorCisjIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKyMgMCBzdGFuZGFyZCBpbnB1dAorIyAxIGZpbGUgY3JlYXRpb24KKyMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCisjIDMgc29tZSBzeXN0ZW1zIG1heSBvcGVuIGl0IHRvIC9kZXYvdHR5CisjIDQgdXNlZCBvbiB0aGUgS3Vib3RhIFRpdGFuCisjIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCisjIDUgY29tcGlsZXIgbWVzc2FnZXMgc2F2ZWQgaW4gY29uZmlnLmxvZworaWYgdGVzdCAiJHNpbGVudCIgPSB5ZXM7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorZWxzZQorICBleGVjIDY+JjEKK2ZpCitleGVjIDU+Li9jb25maWcubG9nCisKK2VjaG8gIlwKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorIiAxPiY1CisKKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCithY19jb25maWd1cmVfYXJncz0KK2ZvciBhY19hcmcKK2RvCisgIGNhc2UgIiRhY19hcmciIGluCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYykgOzsKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKSA7OworICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP10qKQorICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgKikgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAkYWNfYXJnIiA7OworICBlc2FjCitkb25lCisKKyMgTkxTIG51aXNhbmNlcy4KKyMgT25seSBzZXQgdGhlc2UgdG8gQyBpZiBhbHJlYWR5IHNldC4gIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkKKyMgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZCBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgorIyBGaXhpbmcgTENfTUVTU0FHRVMgcHJldmVudHMgU29sYXJpcyBzaCBmcm9tIHRyYW5zbGF0aW5nIHZhciB2YWx1ZXMgaW4gYHNldCchCisjIE5vbi1DIExDX0NUWVBFIHZhbHVlcyBicmVhayB0aGUgY3R5cGUgY2hlY2suCitpZiB0ZXN0ICIke0xBTkcrc2V0fSIgICA9IHNldDsgdGhlbiBMQU5HPUM7ICAgZXhwb3J0IExBTkc7ICAgZmkKK2lmIHRlc3QgIiR7TENfQUxMK3NldH0iID0gc2V0OyB0aGVuIExDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBmaQoraWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCitpZiB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAgZmkKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1yZiBjb25mdGVzdCogY29uZmRlZnMuaAorIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCitlY2hvID4gY29uZmRlZnMuaAorCisjIEEgZmlsZW5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CisjIGNvbmZpZ3VyZSBpcyBpbiwgd2hpY2ggd2UgY2FuIGxvb2sgZm9yIHRvIGZpbmQgb3V0IGlmIHNyY2RpciBpcyBjb3JyZWN0LgorYWNfdW5pcXVlX2ZpbGU9dHJlZS5jCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorICBhY19wcm9nPSQwCisgIGFjX2NvbmZkaXI9YGVjaG8gJGFjX3Byb2d8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICB0ZXN0ICJ4JGFjX2NvbmZkaXIiID0gIngkYWNfcHJvZyIgJiYgYWNfY29uZmRpcj0uCisgIHNyY2Rpcj0kYWNfY29uZmRpcgorICBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KKyAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgZmluZCBzb3VyY2VzIGluICRhY19jb25mZGlyIG9yIC4uIiAxPiYyOyBleGl0IDE7IH0KKyAgZWxzZQorICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJHNyY2RpciIgMT4mMjsgZXhpdCAxOyB9CisgIGZpCitmaQorc3JjZGlyPWBlY2hvICIke3NyY2Rpcn0iIHwgc2VkICdzJVwoW14vXVwpLyokJVwxJSdgCisKKyMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCitpZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCisgIGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICAgIENPTkZJR19TSVRFPSIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorICBlbHNlCisgICAgQ09ORklHX1NJVEU9IiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorICBmaQorZmkKK2ZvciBhY19zaXRlX2ZpbGUgaW4gJENPTkZJR19TSVRFOyBkbworICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIGVjaG8gImxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIKKyAgICAuICIkYWNfc2l0ZV9maWxlIgorICBmaQorZG9uZQorCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgZWNobyAibG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgLiAkY2FjaGVfZmlsZQorZWxzZQorICBlY2hvICJjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgPiAkY2FjaGVfZmlsZQorZmkKKworYWNfZXh0PWMKKyMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCithY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCitjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KKyAgIyBTdGFyZGVudCBWaXN0cmEgU1ZSNCBncmVwIGxhY2tzIC1lLCBzYXlzIGdoYXppQGNhaXAucnV0Z2Vycy5lZHUuCisgIGlmIChlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDMpIHwgc2VkIHMvLW4veG4vIHwgZ3JlcCB4biA+L2Rldi9udWxsOyB0aGVuCisgICAgYWNfbj0gYWNfYz0nCisnIGFjX3Q9JwknCisgIGVsc2UKKyAgICBhY19uPS1uIGFjX2M9IGFjX3Q9CisgIGZpCitlbHNlCisgIGFjX249IGFjX2M9J1xjJyBhY190PQorZmkKKworCisKKworbmF0aXZlX3ByZWZpeD0vdXNyCityZW1vdmU9cm0KK2hhcmRfbGluaz1sbgorc3ltYm9saWNfbGluaz0nbG4gLXMnCitjb3B5PWNwCisKKyMgQ2hlY2sgZm9yIGFkZGl0aW9uYWwgcGFyYW1ldGVycworCisjIFdpdGggR05VIGxkCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgorICBnbnVfbGQ9eWVzCitlbHNlCisgIGdudV9sZD1ubworZmkKKworCisjIFdpdGggR05VIGFzCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1hcyBvciAtLXdpdGhvdXQtZ251LWFzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfYXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ251X2FzIgorICBnYXM9eWVzCitlbHNlCisgIGdhcz1ubworZmkKKworCisjIFdpdGggc3RhYnMKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3RhYnMgb3IgLS13aXRob3V0LXN0YWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zdGFicytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9zdGFicyIKKyAgc3RhYnM9eWVzCitlbHNlCisgIHN0YWJzPW5vCitmaQorCisKKyMgV2l0aCBFTEYKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWxmIG9yIC0td2l0aG91dC1lbGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VsZitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9lbGYiCisgIGVsZj15ZXMKK2Vsc2UKKyAgZWxmPW5vCitmaQorCisKKyMgU3BlY2lmeSB0aGUgbG9jYWwgcHJlZml4CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvY2FsLXByZWZpeCBvciAtLXdpdGhvdXQtbG9jYWwtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9sb2NhbF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbG9jYWxfcHJlZml4IgorICBsb2NhbF9wcmVmaXg9JHdpdGhfbG9jYWxfcHJlZml4CitlbHNlCisgIGxvY2FsX3ByZWZpeD0vdXNyL2xvY2FsCitmaQorCisKKyMgRGVmYXVsdCBsb2NhbCBwcmVmaXggaWYgaXQgaXMgZW1wdHkKK2lmIFsgeCRsb2NhbF9wcmVmaXggPSB4IF07IHRoZW4KKwlsb2NhbF9wcmVmaXg9L3Vzci9sb2NhbAorZmkKKworIyBTcGVjaWZ5IHRoZSBnKysgaGVhZGVyIGZpbGUgZGlyZWN0b3J5CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWd4eC1pbmNsdWRlLWRpciBvciAtLXdpdGhvdXQtZ3h4LWluY2x1ZGUtZGlyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9neHhfaW5jbHVkZV9kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ3h4X2luY2x1ZGVfZGlyIgorICBneHhfaW5jbHVkZV9kaXI9JHdpdGhfZ3h4X2luY2x1ZGVfZGlyCitlbHNlCisgIGd4eF9pbmNsdWRlX2Rpcj0nJHtwcmVmaXh9L2luY2x1ZGUvZysrJworZmkKKworCisjIERlZmF1bHQgZysrIGhlYWRlciBmaWxlIGRpcmVjdG9yeSBpZiBpdCBpcyBlbXB0eQoraWYgWyB4JGd4eF9pbmNsdWRlX2RpciA9IHggXTsgdGhlbgorCWd4eF9pbmNsdWRlX2Rpcj0nJHtwcmVmaXh9L2luY2x1ZGUvZysrJworZmkKKworIyBFbmFibGUgdXNlIG9mIGNwcGxpYiBmb3IgQy4KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jLWNwcGxpYiBvciAtLWRpc2FibGUtYy1jcHBsaWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY19jcHBsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2NfY3BwbGliIgorICBpZiBbIHgkZW5hYmxlX2NfY3BwbGliICE9IHhubyBdOyB0aGVuCisgIGV4dHJhX2Nfb2Jqcz0iJHtleHRyYV9jX29ianN9IGNwcGxpYi5vIGNwcGV4cC5vIGNwcGhhc2gubyBjcHBlcnJvci5vIgorICBleHRyYV9jX2ZsYWdzPS1EVVNFX0NQUExJQj0xCitmaQorZmkKKworCisjIEVuYWJsZSB0aHJlYWRzCisjIFBhc3Mgd2l0aCBubyB2YWx1ZSB0byB0YWtlIHRoZSBkZWZhdWx0CisjIFBhc3Mgd2l0aCBhIHZhbHVlIHRvIHNwZWNpZnkgYSB0aHJlYWQgcGFja2FnZQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRocmVhZHMgb3IgLS1kaXNhYmxlLXRocmVhZHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGhyZWFkcytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfdGhyZWFkcyIKKyAgaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geG5vIF07IHRoZW4KKwllbmFibGVfdGhyZWFkcz0nJworZmkKK2Vsc2UKKyAgZW5hYmxlX3RocmVhZHM9JycKK2ZpCisKKworIyBDaGVjayBpZiBhIHZhbGlkIHRocmVhZCBwYWNrYWdlCitjYXNlIHgke2VuYWJsZV90aHJlYWRzfSBpbgorCXggfCB4bm8pCisJCSMgTm8gdGhyZWFkcworCQl0aHJlYWRfZmlsZT0nc2luZ2xlJworCQk7OworCXh5ZXMpCisJCSMgZGVmYXVsdAorCQl0aHJlYWRfZmlsZT0nJworCQk7OworCXhkZWNvc2YxIHwgeGlyaXggfCB4bWFjaCB8IHhvczIgfCB4cG9zaXggfCB4cHRocmVhZHMgfCB4c2luZ2xlIHwgXAorCXhzb2xhcmlzIHwgeHdpbjMyKQorCQl0aHJlYWRfZmlsZT0kZW5hYmxlX3RocmVhZHMKKwkJOzsKKwkqKQorCQllY2hvICIkZW5hYmxlX3RocmVhZHMgaXMgYW4gdW5rbm93biB0aHJlYWQgcGFja2FnZSIgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBEZXRlcm1pbmUgdGhlIGhvc3QsIGJ1aWxkLCBhbmQgdGFyZ2V0IHN5c3RlbXMKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbworICBpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC1zaDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC5zaDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iIDE+JjI7IGV4aXQgMTsgfQorZmkKK2FjX2NvbmZpZ19ndWVzcz0kYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MKK2FjX2NvbmZpZ19zdWI9JGFjX2F1eF9kaXIvY29uZmlnLnN1YgorYWNfY29uZmlndXJlPSRhY19hdXhfZGlyL2NvbmZpZ3VyZSAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisKKworIyBEbyBzb21lIGVycm9yIGNoZWNraW5nIGFuZCBkZWZhdWx0aW5nIGZvciB0aGUgaG9zdCBhbmQgdGFyZ2V0IHR5cGUuCisjIFRoZSBpbnB1dHMgYXJlOgorIyAgICBjb25maWd1cmUgLS1ob3N0PUhPU1QgLS10YXJnZXQ9VEFSR0VUIC0tYnVpbGQ9QlVJTEQgTk9OT1BUCisjCisjIFRoZSBydWxlcyBhcmU6CisjIDEuIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gc3BlY2lmeSAtLWhvc3QsIC0tdGFyZ2V0LCBhbmQgbm9ub3B0IGF0IHRoZQorIyAgICBzYW1lIHRpbWUuCisjIDIuIEhvc3QgZGVmYXVsdHMgdG8gbm9ub3B0LgorIyAzLiBJZiBub25vcHQgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBob3N0IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGhvc3QsCisjICAgIGFzIGRldGVybWluZWQgYnkgY29uZmlnLmd1ZXNzLgorIyA0LiBUYXJnZXQgYW5kIGJ1aWxkIGRlZmF1bHQgdG8gbm9ub3B0LgorIyA1LiBJZiBub25vcHQgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0YXJnZXQgYW5kIGJ1aWxkIGRlZmF1bHQgdG8gaG9zdC4KKworIyBUaGUgYWxpYXNlcyBzYXZlIHRoZSBuYW1lcyB0aGUgdXNlciBzdXBwbGllZCwgd2hpbGUgJGhvc3QgZXRjLgorIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgorY2FzZSAkaG9zdC0tLSR0YXJnZXQtLS0kbm9ub3B0IGluCitOT05FLS0tKi0tLSogfCAqLS0tTk9ORS0tLSogfCAqLS0tKi0tLU5PTkUpIDs7CisqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBvbmx5IGNvbmZpZ3VyZSBmb3Igb25lIGhvc3QgYW5kIG9uZSB0YXJnZXQgYXQgYSB0aW1lIiAxPiYyOyBleGl0IDE7IH0gOzsKK2VzYWMKKworCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCitpZiAkYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CitlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBydW4gJGFjX2NvbmZpZ19zdWIiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzEzOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKworaG9zdF9hbGlhcz0kaG9zdAorY2FzZSAiJGhvc3RfYWxpYXMiIGluCitOT05FKQorICBjYXNlICRub25vcHQgaW4KKyAgTk9ORSkKKyAgICBpZiBob3N0X2FsaWFzPWAkYWNfY29uZmlnX2d1ZXNzYDsgdGhlbiA6CisgICAgZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgZ3Vlc3MgaG9zdCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgZmkgOzsKKyAgKikgaG9zdF9hbGlhcz0kbm9ub3B0IDs7CisgIGVzYWMgOzsKK2VzYWMKKworaG9zdD1gJGFjX2NvbmZpZ19zdWIgJGhvc3RfYWxpYXNgCitob3N0X2NwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKK2VjaG8gIiRhY190IiIkaG9zdCIgMT4mNgorCitlY2hvICRhY19uICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjczNDogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKKwordGFyZ2V0X2FsaWFzPSR0YXJnZXQKK2Nhc2UgIiR0YXJnZXRfYWxpYXMiIGluCitOT05FKQorICBjYXNlICRub25vcHQgaW4KKyAgTk9ORSkgdGFyZ2V0X2FsaWFzPSRob3N0X2FsaWFzIDs7CisgICopIHRhcmdldF9hbGlhcz0kbm9ub3B0IDs7CisgIGVzYWMgOzsKK2VzYWMKKwordGFyZ2V0PWAkYWNfY29uZmlnX3N1YiAkdGFyZ2V0X2FsaWFzYAordGFyZ2V0X2NwdT1gZWNobyAkdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK3RhcmdldF92ZW5kb3I9YGVjaG8gJHRhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCit0YXJnZXRfb3M9YGVjaG8gJHRhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCitlY2hvICIkYWNfdCIiJHRhcmdldCIgMT4mNgorCitlY2hvICRhY19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzUyOiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CisKK2J1aWxkX2FsaWFzPSRidWlsZAorY2FzZSAiJGJ1aWxkX2FsaWFzIiBpbgorTk9ORSkKKyAgY2FzZSAkbm9ub3B0IGluCisgIE5PTkUpIGJ1aWxkX2FsaWFzPSRob3N0X2FsaWFzIDs7CisgICopIGJ1aWxkX2FsaWFzPSRub25vcHQgOzsKKyAgZXNhYyA7OworZXNhYworCitidWlsZD1gJGFjX2NvbmZpZ19zdWIgJGJ1aWxkX2FsaWFzYAorYnVpbGRfY3B1PWBlY2hvICRidWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitidWlsZF92ZW5kb3I9YGVjaG8gJGJ1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2J1aWxkX29zPWBlY2hvICRidWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCitlY2hvICIkYWNfdCIiJGJ1aWxkIiAxPiY2CisKK3Rlc3QgIiRob3N0X2FsaWFzIiAhPSAiJHRhcmdldF9hbGlhcyIgJiYKKyAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAorICAgIE5PTkVOT05Fcyx4LHgsICYmCisgIHByb2dyYW1fcHJlZml4PSR7dGFyZ2V0X2FsaWFzfS0KKworCisjIEZpbmQgc29tZSB1c2VmdWwgdG9vbHMKK2ZvciBhY19wcm9nIGluIG1hd2sgZ2F3ayBuYXdrIGF3aworZG8KKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc4MTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0FXSycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZmkKK2ZpCitBV0s9IiRhY19jdl9wcm9nX0FXSyIKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGVjaG8gIiRhY190IiIkQVdLIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKwordGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJmbGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBmbGV4OyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgxMjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0xFWCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMRVgiOyB0aGVuCisgIGFjX2N2X3Byb2dfTEVYPSIkTEVYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19MRVg9ImZsZXgiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX0xFWCIgJiYgYWNfY3ZfcHJvZ19MRVg9ImxleCIKK2ZpCitmaQorTEVYPSIkYWNfY3ZfcHJvZ19MRVgiCitpZiB0ZXN0IC1uICIkTEVYIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJExFWCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2lmIHRlc3QgLXogIiRMRVhMSUIiCit0aGVuCisgIGNhc2UgIiRMRVgiIGluCisgIGZsZXgqKSBhY19saWI9ZmwgOzsKKyAgKikgYWNfbGliPWwgOzsKKyAgZXNhYworICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgeXl3cmFwIGluIC1sJGFjX2xpYiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODQ1OiBjaGVja2luZyBmb3IgeXl3cmFwIGluIC1sJGFjX2xpYiIgPiY1CithY19saWJfdmFyPWBlY2hvICRhY19saWInXyd5eXdyYXAgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sJGFjX2xpYiAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA4NTMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB5eXdyYXAoKTsKKworaW50IG1haW4oKSB7Cit5eXdyYXAoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg2NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTEVYTElCPSItbCRhY19saWIiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODg3OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0xOX1MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBybSAtZiBjb25mdGVzdGRhdGEKK2lmIGxuIC1zIFggY29uZnRlc3RkYXRhIDI+L2Rldi9udWxsCit0aGVuCisgIHJtIC1mIGNvbmZ0ZXN0ZGF0YQorICBhY19jdl9wcm9nX0xOX1M9ImxuIC1zIgorZWxzZQorICBhY19jdl9wcm9nX0xOX1M9bG4KK2ZpCitmaQorTE5fUz0iJGFjX2N2X3Byb2dfTE5fUyIKK2lmIHRlc3QgIiRhY19jdl9wcm9nX0xOX1MiID0gImxuIC1zIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo5MTA6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19SQU5MSUInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfToiCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfUkFOTElCPSJyYW5saWIiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19SQU5MSUI9IjoiCitmaQorZmkKK1JBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRSQU5MSUIiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitmb3IgYWNfcHJvZyBpbiAnYmlzb24gLXknIGJ5YWNjCitkbworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTQxOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfWUFDQycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRZQUNDIjsgdGhlbgorICBhY19jdl9wcm9nX1lBQ0M9IiRZQUNDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19ZQUNDPSIkYWNfcHJvZyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2ZpCitmaQorWUFDQz0iJGFjX2N2X3Byb2dfWUFDQyIKK2lmIHRlc3QgLW4gIiRZQUNDIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJFlBQ0MiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCit0ZXN0IC1uICIkWUFDQyIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRZQUNDIiB8fCBZQUNDPSJ5YWNjIgorCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTgxOiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfaW5zdGFsbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKyAgICBjYXNlICIkYWNfZGlyLyIgaW4KKyAgICAvfC4vfC4vL3wvZXRjLyp8L3Vzci9zYmluLyp8L3Vzci9ldGMvKnwvc2Jpbi8qfC91c3IvYWZzd3MvYmluLyp8L3Vzci91Y2IvKikgOzsKKyAgICAqKQorICAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIGluc3RhbGxic2Qgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3Byb2c7IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisgICAgICAgICAgICBncmVwIGRzcG1zZyAkYWNfZGlyLyRhY19wcm9nID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgICMgT1NGLzEgaW5zdGFsbGJzZCBhbHNvIHVzZXMgZHNwbXNnLCBidXQgaXMgdXNhYmxlLgorCSAgICA6CisJICBlbHNlCisJICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFjX2Rpci8kYWNfcHJvZyAtYyIKKwkgICAgYnJlYWsgMgorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9JRlMiCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0iJGFjX2N2X3BhdGhfaW5zdGFsbCIKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIFdlIGRvbid0IGNhY2hlIGEKKyAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHBhdGggaXMgcmVsYXRpdmUuCisgICAgSU5TVEFMTD0iJGFjX2luc3RhbGxfc2giCisgIGZpCitmaQorZWNobyAiJGFjX3QiIiRJTlNUQUxMIiAxPiY2CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKKworIyBGaW5kIHRoZSBuYXRpdmUgY29tcGlsZXIKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTAzNTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX0NDPSJnY2MiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTA2NDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgorICBhY19wcm9nX3JlamVjdGVkPW5vCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworCWNvbnRpbnVlCisgICAgICBmaQorICAgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgLWd0IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBzZXQgZHVtbXkgIiRhY19kaXIvJGFjX3dvcmQiICIkQCIKKyAgICBzaGlmdAorICAgIGFjX2N2X3Byb2dfQ0M9IiRAIgorICBmaQorZmkKK2ZpCitmaQorQ0M9IiRhY19jdl9wcm9nX0NDIgoraWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICB0ZXN0IC16ICIkQ0MiICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTEyOiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiID4mNQorCithY19leHQ9YworIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKK2FjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKK2Nyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMTIyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKK21haW4oKXtyZXR1cm4oMCk7fQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjExMjY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgorICBhY19jdl9wcm9nX2NjX3dvcmtzPXllcworICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJvZ3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuCisgIGlmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9bm8KKyAgZWxzZQorICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9eWVzCisgIGZpCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9wcm9nX2NjX3dvcmtzPW5vCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCitlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2Nfd29ya3MiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X3Byb2dfY2Nfd29ya3MgPSBubzsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQorZmkKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTQ2OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIgPiY1CitlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2NfY3Jvc3MiIDE+JjYKK2Nyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTE1MTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorI2lmZGVmIF9fR05VQ19fCisgIHllczsKKyNlbmRpZgorRU9GCitpZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRlc3QuYyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTE2MDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH07IH0gfCBlZ3JlcCB5ZXMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2N2X3Byb2dfZ2NjPXllcworZWxzZQorICBhY19jdl9wcm9nX2djYz1ubworZmkKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19nY2MiIDE+JjYKKworaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworICBhY190ZXN0X0NGTEFHUz0iJHtDRkxBR1Mrc2V0fSIKKyAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTc1OiBjaGVja2luZyB3aGV0aGVyICR7Q0MtY2N9IGFjY2VwdHMgLWciID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfY2NfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGVjaG8gJ3ZvaWQgZigpe30nID4gY29uZnRlc3QuYworaWYgdGVzdCAteiAiYCR7Q0MtY2N9IC1nIC1jIGNvbmZ0ZXN0LmMgMj4mMWAiOyB0aGVuCisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19nPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2CisgIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLU8yIgorICBmaQorZWxzZQorICBHQ0M9CisgIHRlc3QgIiR7Q0ZMQUdTK3NldH0iID0gc2V0IHx8IENGTEFHUz0iLWciCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMjAzOiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9IiA+JjUKK3NldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdG1ha2UgPDxcRU9GCithbGw6CisJQGVjaG8gJ2FjX21ha2V0ZW1wPSIke01BS0V9IicKK0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitldmFsIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3RtYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKK2lmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KKyAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzCitlbHNlCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3RtYWtlCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19tYWtlXycke2FjX21ha2V9X3NldGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBTRVRfTUFLRT0KK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEyMzE6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NQUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICAgIyBUaGlzIG11c3QgYmUgaW4gZG91YmxlIHF1b3Rlcywgbm90IHNpbmdsZSBxdW90ZXMsIGJlY2F1c2UgQ1BQIG1heSBnZXQKKyAgIyBzdWJzdGl0dXRlZCBpbnRvIHRoZSBNYWtlZmlsZSBhbmQgIiR7Q0MtY2N9IiB3aWxsIGNvbmZ1c2UgbWFrZS4KKyAgQ1BQPSIke0NDLWNjfSAtRSIKKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI0NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitTeW50YXggRXJyb3IKK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTI1MjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0YAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMjYzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK1N5bnRheCBFcnJvcgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjY5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBDUFA9L2xpYi9jcHAKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCitmaQorICBDUFA9IiRhY19jdl9wcm9nX0NQUCIKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCitmaQorZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKworZm9yIGFjX2hkciBpbiBzdGRkZWYuaCBzdHJpbmcuaCBzdHJpbmdzLmggc3RkbGliLmggdGltZS5oIHVuaXN0ZC5oCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTI5NTogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEzMDAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjEzMDU6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dGAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBtYWxsb2MgbXVzdCBiZSBkZWNsYXJlZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTMzMzogY2hlY2tpbmcgd2hldGhlciBtYWxsb2MgbXVzdCBiZSBkZWNsYXJlZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snZ2NjX2N2X2RlY2xfbmVlZGVkX21hbGxvYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEzMzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKK2ludCBtYWluKCkgeworY2hhciAqKCpwZm4pID0gKGNoYXIgKigqKSkgbWFsbG9jCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTM1OTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGdjY19jdl9kZWNsX25lZWRlZF9tYWxsb2M9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZ2NjX2N2X2RlY2xfbmVlZGVkX21hbGxvYz15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkZ2NjX2N2X2RlY2xfbmVlZGVkX21hbGxvYyIgMT4mNgoraWYgdGVzdCAkZ2NjX2N2X2RlY2xfbmVlZGVkX21hbGxvYyA9IHllczsgdGhlbgorICBnY2NfdHJfZGVjbD1ORUVEX0RFQ0xBUkFUSU9OX2BlY2hvIG1hbGxvYyB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGdjY190cl9kZWNsIDEKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHJlYWxsb2MgbXVzdCBiZSBkZWNsYXJlZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTM4MTogY2hlY2tpbmcgd2hldGhlciByZWFsbG9jIG11c3QgYmUgZGVjbGFyZWQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2djY19jdl9kZWNsX25lZWRlZF9yZWFsbG9jJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTM4NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgoraW50IG1haW4oKSB7CitjaGFyICooKnBmbikgPSAoY2hhciAqKCopKSByZWFsbG9jCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQwNzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGdjY19jdl9kZWNsX25lZWRlZF9yZWFsbG9jPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGdjY19jdl9kZWNsX25lZWRlZF9yZWFsbG9jPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRnY2NfY3ZfZGVjbF9uZWVkZWRfcmVhbGxvYyIgMT4mNgoraWYgdGVzdCAkZ2NjX2N2X2RlY2xfbmVlZGVkX3JlYWxsb2MgPSB5ZXM7IHRoZW4KKyAgZ2NjX3RyX2RlY2w9TkVFRF9ERUNMQVJBVElPTl9gZWNobyByZWFsbG9jIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkZ2NjX3RyX2RlY2wgMQorRU9GCisKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgZnJlZSBtdXN0IGJlIGRlY2xhcmVkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNDI5OiBjaGVja2luZyB3aGV0aGVyIGZyZWUgbXVzdCBiZSBkZWNsYXJlZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snZ2NjX2N2X2RlY2xfbmVlZGVkX2ZyZWUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxNDM0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCitpbnQgbWFpbigpIHsKK2NoYXIgKigqcGZuKSA9IChjaGFyICooKikpIGZyZWUKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNDU1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZ2NjX2N2X2RlY2xfbmVlZGVkX2ZyZWU9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZ2NjX2N2X2RlY2xfbmVlZGVkX2ZyZWU9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGdjY19jdl9kZWNsX25lZWRlZF9mcmVlIiAxPiY2CitpZiB0ZXN0ICRnY2NfY3ZfZGVjbF9uZWVkZWRfZnJlZSA9IHllczsgdGhlbgorICBnY2NfdHJfZGVjbD1ORUVEX0RFQ0xBUkFUSU9OX2BlY2hvIGZyZWUgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRnY2NfdHJfZGVjbCAxCitFT0YKKworZmkKKworCisjIEZpbGUgZXh0ZW5zaW9ucworbWFuZXh0PScuMScKK29iamV4dD0nLm8nCisKKworCitidWlsZF94bV9maWxlPQorYnVpbGRfYnJva2VuX2luc3RhbGw9CitidWlsZF9pbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy10YXIKK2J1aWxkX2V4ZWV4dD0KK2hvc3RfeG1fZmlsZT0KK2hvc3RfeG1ha2VfZmlsZT0KK2hvc3RfdHJ1bmNhdGVfdGFyZ2V0PQorCisjIERlY29kZSB0aGUgaG9zdCBtYWNoaW5lLCB0aGVuIHRoZSB0YXJnZXQgbWFjaGluZS4KKyMgRm9yIHRoZSBob3N0IG1hY2hpbmUsIHdlIHNhdmUgdGhlIHhtX2ZpbGUgdmFyaWFibGUgYXMgaG9zdF94bV9maWxlOworIyB0aGVuIHdlIGRlY29kZSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kIGZvcmdldCBldmVyeXRoaW5nIGVsc2UKKyMgdGhhdCBjYW1lIGZyb20gdGhlIGhvc3QgbWFjaGluZS4KK2ZvciBtYWNoaW5lIGluICRidWlsZCAkaG9zdCAkdGFyZ2V0OyBkbworCisJb3V0X2ZpbGU9CisJeG1ha2VfZmlsZT0KKwl0bWFrZV9maWxlPQorCWV4dHJhX2hlYWRlcnM9CisJZXh0cmFfcGFzc2VzPQorCWV4dHJhX3BhcnRzPQorCWV4dHJhX3Byb2dyYW1zPQorCWV4dHJhX29ianM9CisJZXh0cmFfaG9zdF9vYmpzPQorCWV4dHJhX2djY19vYmpzPQorCWZsb2F0X2Zvcm1hdD0KKwkjIFNldCB0aGlzIHRvIGZvcmNlIGluc3RhbGxhdGlvbiBhbmQgdXNlIG9mIGNvbGxlY3QyLgorCXVzZV9jb2xsZWN0Mj0KKwkjIFNldCB0aGlzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHRhcmdldCBtb2RlbC4KKwl0YXJnZXRfY3B1X2RlZmF1bHQ9CisJIyBTZXQgdGhpcyB0byBmb3JjZSB1c2Ugb2YgaW5zdGFsbC5zaC4KKwlicm9rZW5faW5zdGFsbD0KKwkjIFNldCB0aGlzIHRvIGNvbnRyb2wgd2hpY2ggZml4aW5jbHVkZXMgcHJvZ3JhbSB0byB1c2UuCisJZml4aW5jbHVkZXM9Zml4aW5jbHVkZXMKKwkjIFNldCB0aGlzIHRvIGNvbnRyb2wgaG93IHRoZSBoZWFkZXIgZmlsZSBkaXJlY3RvcnkgaXMgaW5zdGFsbGVkLgorCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLXRhcgorCSMgU2V0IHRoaXMgdG8gYSBub24tZW1wdHkgbGlzdCBvZiBhcmdzIHRvIHBhc3MgdG8gY3BwIGlmIHRoZSB0YXJnZXQKKwkjIHdhbnRzIGl0cyAubWQgZmlsZSBwYXNzZWQgdGhyb3VnaCBjcHAuCisJbWRfY3BwZmxhZ3M9CisJIyBTZXQgdGhpcyBpZiBkaXJlY3RvcnkgbmFtZXMgc2hvdWxkIGJlIHRydW5jYXRlZCB0byAxNCBjaGFyYWN0ZXJzLgorCXRydW5jYXRlX3RhcmdldD0KKwkjIFNldCB0aGlzIGlmIGdkYiBuZWVkcyBhIGRpciBjb21tYW5kIHdpdGggYGRpcm5hbWUgJG91dF9maWxlYAorCWdkYl9uZWVkc19vdXRfZmlsZV9wYXRoPQorCSMgU2V0IHRoaXMgaWYgdGhlIGJ1aWxkIG1hY2hpbmUgcmVxdWlyZXMgZXhlY3V0YWJsZXMgdG8gaGF2ZSBhCisJIyBmaWxlIG5hbWUgc3VmZml4LgorCWV4ZWV4dD0KKworCSMgU2V0IGRlZmF1bHQgY3B1X3R5cGUsIHRtX2ZpbGUgYW5kIHhtX2ZpbGUgc28gaXQgY2FuIGJlIHVwZGF0ZWQgaW4KKwkjIGVhY2ggbWFjaGluZSBlbnRyeS4KKwljcHVfdHlwZT1gZWNobyAkbWFjaGluZSB8IHNlZCAncy8tLiokLy8nYAorCWNhc2UgJG1hY2hpbmUgaW4KKwlhbHBoYSotKi0qKQorCQljcHVfdHlwZT1hbHBoYQorCQk7OworCWFybSotKi0qKQorCQljcHVfdHlwZT1hcm0KKwkJOzsKKwljKi1jb252ZXgtKikKKwkJY3B1X3R5cGU9Y29udmV4CisJCTs7CisJaVszNDU2XTg2LSotKikKKwkJY3B1X3R5cGU9aTM4NgorCQk7OworCWhwcGEqLSotKikKKwkJY3B1X3R5cGU9cGEKKwkJOzsKKwltNjgwMDAtKi0qKQorCQljcHVfdHlwZT1tNjhrCisJCTs7CisJbWlwcyotKi0qKQorCQljcHVfdHlwZT1taXBzCisJCTs7CisJcG93ZXJwYyotKi0qKQorCQljcHVfdHlwZT1yczYwMDAKKwkJOzsKKwlweXJhbWlkLSotKikKKwkJY3B1X3R5cGU9cHlyCisJCTs7CisJc3BhcmMqLSotKikKKwkJY3B1X3R5cGU9c3BhcmMKKwkJOzsKKwllc2FjCisKKwl0bV9maWxlPSR7Y3B1X3R5cGV9LyR7Y3B1X3R5cGV9LmgKKwl4bV9maWxlPSR7Y3B1X3R5cGV9L3htLSR7Y3B1X3R5cGV9LmgKKwkKKwljYXNlICRtYWNoaW5lIGluCisJIyBTdXBwb3J0IHNpdGUtc3BlY2lmaWMgbWFjaGluZSB0eXBlcy4KKwkqbG9jYWwqKQorCQljcHVfdHlwZT1gZWNobyAkbWFjaGluZSB8IHNlZCAtZSAncy8tLiovLydgCisJCXJlc3Q9YGVjaG8gJG1hY2hpbmUgfCBzZWQgLWUgInMvJGNwdV90eXBlLS8vImAKKwkJeG1fZmlsZT0ke2NwdV90eXBlfS94bS0kcmVzdC5oCisJCXRtX2ZpbGU9JHtjcHVfdHlwZX0vJHJlc3QuaAorCQlpZiBbIC1mICRzcmNkaXIvY29uZmlnLyR7Y3B1X3R5cGV9L3gtJHJlc3QgXSA7IFwKKwkJdGhlbiB4bWFrZV9maWxlPSR7Y3B1X3R5cGV9L3gtJHJlc3Q7IFwKKwkJZWxzZSB0cnVlOyBcCisJCWZpCisJCWlmIFsgLWYgJHNyY2Rpci9jb25maWcvJHtjcHVfdHlwZX0vdC0kcmVzdCBdIDsgXAorCQl0aGVuIHRtYWtlX2ZpbGU9JHtjcHVfdHlwZX0vdC0kcmVzdDsgXAorCQllbHNlIHRydWU7IFwKKwkJZmkKKwkJOzsKKwkxNzUwYS0qLSopCisJCTs7CisJYTI5ay0qLWJzZCogfCBhMjlrLSotc3ltMSopCisJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gYTI5ay91bml4LmgiCisJCXhtX2ZpbGU9YTI5ay94bS11bml4LmgKKwkJeG1ha2VfZmlsZT1hMjlrL3gtdW5peAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJYTI5ay0qLXVkaSB8IGEyOWstKi1jb2ZmKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGNvZmYuaCBhMjlrL3VkaS5oIgorCQl0bWFrZV9maWxlPWEyOWsvdC1hMjlrYmFyZQorCQk7OworCWEyOWstKi12eHdvcmtzKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhjb2ZmLmggYTI5ay91ZGkuaCBhMjlrL3Z4MjlrLmgiCisJCXRtYWtlX2ZpbGU9YTI5ay90LXZ4MjlrCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQk7OworCWEyOWstKi0qKQkJCSMgRGVmYXVsdCBhMjlrIGVudmlyb25tZW50LgorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJYWxwaGEqLSotbGludXgtZ251ZWNvZmYqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGFscGhhL2xpbnV4LmgiCisJCXhtX2ZpbGU9IiR7eG1fZmlsZX0gYWxwaGEveG0tbGludXguaCIKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PSJNQVNLX0dBUyIKKwkJZ2FzPW5vCisJCXhtYWtlX2ZpbGU9bm9uZQorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQlnYXM9eWVzIGdudV9sZD15ZXMKKwkJOzsKKwlhbHBoYSotKi1saW51eC1nbnUqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGFscGhhL2xpbnV4LmggYWxwaGEvZWxmLmgiCisJCXhtX2ZpbGU9IiR7eG1fZmlsZX0gYWxwaGEveG0tbGludXguaCIKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PSJNQVNLX0dBUyIKKwkJZ2FzPW5vCisJCXRtYWtlX2ZpbGU9InQtbGludXggYWxwaGEvdC1saW51eCIKKwkJeG1ha2VfZmlsZT1ub25lCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGJlZ2luUy5vIGNydGVuZC5vIGNydGVuZFMubyIKKwkJZ2FzPXllcyBnbnVfbGQ9eWVzCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKyAJCQl0aHJlYWRfZmlsZT0ncG9zaXgnCisgCQlmaQorCQk7OworCWFscGhhKi1kZWMtb3NmWzQ1Njc4OV0qKQorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJaWYgWyB4JGdhcyAhPSB4eWVzIF0KKwkJdGhlbgorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQl1c2VfY29sbGVjdDI9eWVzCisJCSMgU29tZSB2ZXJzaW9ucyBvZiBPU0Y0IChzcGVjaWZpY2FsbHkgWDQuMC05IDI5Ni43KSBoYXZlCisJCSMgYSBicm9rZW4gdGFyLCBzbyB3ZSB1c2UgY3BpbyBpbnN0ZWFkLgorCQljYXNlICRtYWNoaW5lIGluCisJCSAgYWxwaGEqLWRlYy1vc2Y0KikKKwkJICAgIGluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJICAgIDs7CisJCWVzYWMKKwkJOzsKKwlhbHBoYSotZGVjLW9zZlsyM10qKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGFscGhhL29zZjJvcjMuaCIKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCWlmIFsgeCRnYXMgIT0geHllcyBdCisJCXRoZW4KKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCWFscGhhKi1kZWMtb3NmMS4yKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGFscGhhL29zZjEyLmgiCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQlpZiBbIHgkZ2FzICE9IHh5ZXMgXQorCQl0aGVuCisJCQlleHRyYV9wYXNzZXM9Im1pcHMtdGZpbGUgbWlwcy10ZHVtcCIKKwkJZmkKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlhbHBoYSotKi1vc2YqKQorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJaWYgWyB4JGdhcyAhPSB4eWVzIF0KKwkJdGhlbgorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJYWxwaGEqLSotd2lubnQzKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBhbHBoYS93aW4tbnQuaCIKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfV0lORE9XU19OVAorCQl4bV9maWxlPSIke3htX2ZpbGV9IGNvbmZpZy93aW5udC94bS13aW5udC5oIGFscGhhL3htLXdpbm50LmgiCisJCXRtYWtlX2ZpbGU9dC1saWJjLW9rCisJCXhtYWtlX2ZpbGU9d2lubnQveC13aW5udAorCQlleHRyYV9ob3N0X29ianM9b2xkbmFtZXMubworCQlleHRyYV9nY2Nfb2Jqcz0ic3Bhd252Lm8gb2xkbmFtZXMubyIKKwkJZml4aW5jbHVkZXM9Zml4aW5jLndpbm50CisJCWlmIFsgeCRnbnVfbGQgIT0geHllcyBdCisJCXRoZW4KKwkJCWV4dHJhX3Byb2dyYW1zPWxkLmV4ZQorCQlmaQorIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0nd2luMzInCisJCWZpCisJCTs7CisJYWxwaGEqLWRlYy12bXMqKQorCQl0bV9maWxlPWFscGhhL3Ztcy5oCisJCXhtX2ZpbGU9IiR7eG1fZmlsZX0gYWxwaGEveG0tdm1zLmgiCisJCXRtYWtlX2ZpbGU9YWxwaGEvdC12bXMKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJOzsKKwlhcm0tKi1jb2ZmKiB8IGFybWVsLSotY29mZiopCisJCXRtX2ZpbGU9YXJtL2NvZmYuaAorCQl0bWFrZV9maWxlPWFybS90LWJhcmUKKwkJOzsKKwlhcm0tKi1yaXNjaXgxLlswMV0qKQkJIyBBY29ybiBSSVNDIG1hY2hpbmUgKGVhcmx5IHZlcnNpb25zKQorCQl0bV9maWxlPWFybS9yaXNjaXgxLTEuaAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJYXJtLSotcmlzY2l4KikJCQkjIEFjb3JuIFJJU0MgbWFjaGluZQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJICAgIHRtX2ZpbGU9YXJtL3JpeC1nYXMuaAorCQllbHNlCisJCSAgICB0bV9maWxlPWFybS9yaXNjaXguaAorCQlmaQorCQl4bWFrZV9maWxlPWFybS94LXJpc2NpeAorCQl0bWFrZV9maWxlPWFybS90LXJpc2NpeAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJYXJtLXNlbWktYW91dCB8IGFybWVsLXNlbWktYW91dCkKKwkJdG1fZmlsZT1hcm0vc2VtaS5oCisJCXRtYWtlX2ZpbGU9YXJtL3Qtc2VtaQorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbiAjIFRoZXJlIGlzIG5vdGhpbmcgdG8gZml4CisJCTs7CisJYXJtLXNlbWktYW9mIHwgYXJtZWwtc2VtaS1hb2YpCisJCXRtX2ZpbGU9YXJtL3NlbWlhb2YuaAorCQl0bWFrZV9maWxlPWFybS90LXNlbWlhb2YKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4gIyBUaGVyZSBpcyBub3RoaW5nIHRvIGZpeAorCQk7OworCWFybS0qLW5ldGJzZCopCisJCXRtX2ZpbGU9YXJtL25ldGJzZC5oCisJCXhtX2ZpbGU9YXJtL3htLW5ldGJzZC5oCisJCXRtYWtlX2ZpbGU9YXJtL3QtbmV0YnNkCisJCSMgT24gTmV0QlNELCB0aGUgaGVhZGVycyBhcmUgYWxyZWFkeSBva2F5LgorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJYXJtLSotbGludXgtZ251YW91dCopCQkjIEFSTSBMaW51eAorCQljcHVfdHlwZT1hcm0KKwkJeG1fZmlsZT1hcm0veG0tbGludXguaAorCQl4bWFrZV9maWxlPXgtbGludXgKKwkJdG1fZmlsZT1hcm0vbGludXgtZ2FzLmgKKwkJdG1ha2VfZmlsZT1hcm0vdC1saW51eAorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJZ251X2xkPXllcworCQk7OworCWFybS0qLWFvdXQpCisJCXRtX2ZpbGU9YXJtL2FvdXQuaAorCQk7OworCWMxLWNvbnZleC0qKQkJCSMgQ29udmV4IEMxCisJCXRhcmdldF9jcHVfZGVmYXVsdD0xCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJOzsKKwljMi1jb252ZXgtKikJCQkjIENvbnZleCBDMgorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9MgorCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCTs7CisJYzMyLWNvbnZleC0qKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9NAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCTs7CisJYzM0LWNvbnZleC0qKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9OAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCTs7CisJYzM4LWNvbnZleC0qKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9MTYJCQorCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCTs7CisJY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHN2cjMuaCBjbGlwcGVyL2NsaXguaCIKKwkJeG1fZmlsZT1jbGlwcGVyL3htLWNsaXguaAorCQl4bWFrZV9maWxlPWNsaXBwZXIveC1jbGl4CisJCWV4dHJhX2hlYWRlcnM9dmEtY2xpcHBlci5oCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQk7OworCWRzcDE2eHgtKikKKwkJOzsKKwllbHhzaS1lbHhzaS0qKQorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisjIFRoaXMgaGFzbid0IGJlZW4gdXBncmFkZWQgdG8gR0NDIDIuCisjCWZ4ODAtYWxsaWFudC0qKQkJCSMgQWxsaWFudCBGWC84MAorIwkJOzsKKwloODMwMC0qLSopCisJCWZsb2F0X2Zvcm1hdD1pMzIKKwkJOzsKKwlocHBhMS4xLSotcHJvKikKKwkJdG1fZmlsZT0icGEvcGEtcHJvLmggJHt0bV9maWxlfSBwYS9wYS1wcm8tZW5kLmggbGliZ2xvc3MuaCIKKwkJeG1fZmlsZT1wYS94bS1wYXByby5oCisJCXRtYWtlX2ZpbGU9cGEvdC1wcm8KKwkJOzsKKwlocHBhMS4xLSotb3NmKikKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PTEKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1vc2YuaCIKKwkJdXNlX2NvbGxlY3QyPXllcworCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQk7OworCWhwcGExLjEtKi1ydGVtcyopCisJCXRtX2ZpbGU9InBhL3BhLXByby5oICR7dG1fZmlsZX0gcGEvcGEtcHJvLWVuZC5oIGxpYmdsb3NzLmggcGEvcnRlbXMuaCIKKwkJeG1fZmlsZT1wYS94bS1wYXByby5oCisJCXRtYWtlX2ZpbGU9cGEvdC1wcm8KKwkJOzsKKwlocHBhMS4wLSotb3NmKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1vc2YuaCIKKwkJdXNlX2NvbGxlY3QyPXllcworCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQk7OworCWhwcGExLjEtKi1ic2QqKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9MQorCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCTs7CisJaHBwYTEuMC0qLWJzZCopCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJOzsKKwlocHBhMS4wLSotaHB1eDcqKQorCQl0bV9maWxlPSJwYS9wYS1vbGRhcy5oICR7dG1fZmlsZX0gcGEvcGEtaHB1eDcuaCIKKwkJeG1fZmlsZT1wYS94bS1wYWhwdXguaAorCQl4bWFrZV9maWxlPXBhL3gtcGEtaHB1eAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcGEvZ2FzLmgiCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlocHBhMS4wLSotaHB1eDguMFswLTJdKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1ocHV4LmgiCisJCXhtX2ZpbGU9cGEveG0tcGFocHV4LmgKKwkJeG1ha2VfZmlsZT1wYS94LXBhLWhwdXgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWdhcy5oIgorCQllbHNlCisJCQl0bV9maWxlPSJwYS9wYS1vbGRhcy5oICR7dG1fZmlsZX0iCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlocHBhMS4xLSotaHB1eDguMFswLTJdKikKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PTEKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1ocHV4LmgiCisJCXhtX2ZpbGU9cGEveG0tcGFocHV4LmgKKwkJeG1ha2VfZmlsZT1wYS94LXBhLWhwdXgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWdhcy5oIgorCQllbHNlCisJCQl0bV9maWxlPSJwYS9wYS1vbGRhcy5oICR7dG1fZmlsZX0iCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlocHBhMS4xLSotaHB1eDgqKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9MQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWhwdXguaCIKKwkJeG1fZmlsZT1wYS94bS1wYWhwdXguaAorCQl4bWFrZV9maWxlPXBhL3gtcGEtaHB1eAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcGEvcGEtZ2FzLmgiCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlocHBhMS4wLSotaHB1eDgqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWhwdXguaCIKKwkJeG1fZmlsZT1wYS94bS1wYWhwdXguaAorCQl4bWFrZV9maWxlPXBhL3gtcGEtaHB1eAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcGEvcGEtZ2FzLmgiCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlocHBhMS4xLSotaHB1eDEwKikKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PTEKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1ocHV4LmggcGEvcGEtaHB1eDEwLmgiCisJCXhtX2ZpbGU9cGEveG0tcGFocHV4LmgKKwkJeG1ha2VfZmlsZT1wYS94LXBhLWhwdXgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWdhcy5oIgorCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaHBwYTEuMC0qLWhwdXgxMCopCisJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcGEvcGEtaHB1eC5oIHBhL3BhLWhwdXgxMC5oIgorCQl4bV9maWxlPXBhL3htLXBhaHB1eC5oCisJCXhtYWtlX2ZpbGU9cGEveC1wYS1ocHV4CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1nYXMuaCIKKwkJZmkKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCWhwcGExLjEtKi1ocHV4KikKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0PTEKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwYS9wYS1ocHV4LmggcGEvcGEtaHB1eDkuaCIKKwkJeG1fZmlsZT1wYS94bS1wYWhwdXguaAorCQl4bWFrZV9maWxlPXBhL3gtcGEtaHB1eAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcGEvcGEtZ2FzLmgiCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlocHBhMS4wLSotaHB1eCopCisJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcGEvcGEtaHB1eC5oIHBhL3BhLWhwdXg5LmgiCisJCXhtX2ZpbGU9cGEveG0tcGFocHV4LmgKKwkJeG1ha2VfZmlsZT1wYS94LXBhLWhwdXgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWdhcy5oIgorCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaHBwYTEuMS0qLWhpdXgqKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQ9MQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWhwdXguaCBwYS9wYS1oaXV4LmgiCisJCXhtX2ZpbGU9cGEveG0tcGFocHV4LmgKKwkJeG1ha2VfZmlsZT1wYS94LXBhLWhwdXgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWdhcy5oIgorCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaHBwYTEuMC0qLWhpdXgqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWhwdXguaCBwYS9wYS1oaXV4LmgiCisJCXhtX2ZpbGU9cGEveG0tcGFocHV4LmgKKwkJeG1ha2VfZmlsZT1wYS94LXBhLWhwdXgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IHBhL3BhLWdhcy5oIgorCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaHBwYSotKi1saXRlcyopCisJCXRhcmdldF9jcHVfZGVmYXVsdD0xCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJOzsKKwlpMzcwLSotbXZzKikKKwkJOzsKKwlpWzM0NTZdODYtaWJtLWFpeCopCQkjIElCTSBQUy8yIHJ1bm5pbmcgQUlYCisgICAgICAgICAgICAgICAgaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPWkzODYvYWl4Mzg2LmgKKwkJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQkJdG1ha2VfZmlsZT1pMzg2L3QtY3J0c3R1ZmYKKwkJZWxzZQorCQkJdG1fZmlsZT1pMzg2L2FpeDM4Nm5nLmgKKwkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZmkKKwkJeG1fZmlsZT1pMzg2L3htLWFpeC5oCisJCXhtYWtlX2ZpbGU9aTM4Ni94LWFpeAorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJOzsKKwlpNDg2LW5jci1zeXN2NCopCQkjIE5DUiAzMDAwIC0gaTQ4NiBydW5uaW5nIHN5c3RlbSBWLjQKKwkJeG1fZmlsZT1pMzg2L3htLXN5c3Y0LmgKKwkJeG1ha2VfZmlsZT1pMzg2L3gtbmNyMzAwMAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIC1hIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9aTM4Ni9zeXN2NGdkYi5oCisJCWVsc2UKKwkJCXRtX2ZpbGU9aTM4Ni9zeXN2NC5oCisJCWZpCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQl0bWFrZV9maWxlPWkzODYvdC1jcnRwaWMKKwkJOzsKKwlpWzM0NTZdODYtbmV4dC0qKQorCQl0bV9maWxlPWkzODYvbmV4dC5oCisJCXhtX2ZpbGU9aTM4Ni94bS1uZXh0LmgKKwkJdG1ha2VfZmlsZT1pMzg2L3QtbmV4dAorCQl4bWFrZV9maWxlPWkzODYveC1uZXh0CisJCWV4dHJhX29ianM9bmV4dHN0ZXAubworIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0nbWFjaCcKKwkJZmkKKwkJOzsKKwlpWzM0NTZdODYtc2VxdWVudC1ic2QqKSAJCSMgODAzODYgZnJvbSBTZXF1ZW50CisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPWkzODYvc2VxLWdhcy5oCisJCWVsc2UKKwkJCXRtX2ZpbGU9aTM4Ni9zZXF1ZW50LmgKKwkJZmkKKwkJOzsKKwlpWzM0NTZdODYtc2VxdWVudC1wdHgxKikKKwkJeG1fZmlsZT1pMzg2L3htLXN5c3YzLmgKKwkJeG1ha2VfZmlsZT1pMzg2L3gtc3lzdjMKKwkJdG1fZmlsZT1pMzg2L3NlcS1zeXN2My5oCisJCXRtYWtlX2ZpbGU9aTM4Ni90LWNydHN0dWZmCisJCWZpeGluY2x1ZGVzPWZpeGluYy5wdHgKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCTs7CisJaVszNDU2XTg2LXNlcXVlbnQtcHR4MiogfCBpWzM0NTZdODYtc2VxdWVudC1zeXN2MyopCisJCXhtX2ZpbGU9aTM4Ni94bS1zeXN2My5oCisJCXhtYWtlX2ZpbGU9aTM4Ni94LXN5c3YzCisJCXRtX2ZpbGU9aTM4Ni9zZXEyLXN5c3YzLmgKKwkJdG1ha2VfZmlsZT1pMzg2L3QtY3J0c3R1ZmYKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWZpeGluY2x1ZGVzPWZpeGluYy5wdHgKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJOzsKKwlpWzM0NTZdODYtc2VxdWVudC1wdHg0KiB8IGlbMzQ1Nl04Ni1zZXF1ZW50LXN5c3Y0KikKKwkJeG1fZmlsZT1pMzg2L3htLXN5c3Y0LmgKKwkJeG1ha2VfZmlsZT14LXN2cjQKKwkJdG1fZmlsZT1pMzg2L3B0eDQtaS5oCisJCXRtYWtlX2ZpbGU9dC1zdnI0CisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQlmaXhpbmNsdWRlcz1maXhpbmMucHR4CisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCTs7CisJaTM4Ni1zdW4tc3Vub3MqKQkJIyBTdW4gaTM4NiByb2FkcnVubmVyCisJCXhtX2ZpbGU9aTM4Ni94bS1zdW4uaAorCQl0bV9maWxlPWkzODYvc3VuLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCWlbMzQ1Nl04Ni0qLWFvdXQqKQorCQl0bV9maWxlPWkzODYvaTM4Ni1hb3V0LmgKKwkJdG1ha2VfZmlsZT1pMzg2L3QtaTM4NmJhcmUKKwkJOzsKKwlpWzM0NTZdODYtKi1ic2RpKiB8IGlbMzQ1XTg2LSotYnNkMzg2KikKKwkJdG1fZmlsZT1pMzg2L2JzZDM4Ni5oCisJCXhtX2ZpbGU9aTM4Ni94bS1ic2QzODYuaAorIwkJdG1ha2VfZmlsZT10LWxpYmMtb2sKKwkJOzsKKwlpWzM0NTZdODYtKi1ic2QqKQorCQl0bV9maWxlPWkzODYvMzg2YnNkLmgKKwkJeG1fZmlsZT1pMzg2L3htLWJzZDM4Ni5oCisjCQl0bWFrZV9maWxlPXQtbGliYy1vaworIyBOZXh0IGxpbmUgdHVybmVkIG9mZiBiZWNhdXNlIGJvdGggMzg2QlNEIGFuZCBCU0QvMzg2IHVzZSBHTlUgbGQuCisjCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaVszNDU2XTg2LSotZnJlZWJzZGVsZiopCisJCXRtX2ZpbGU9ImkzODYvaTM4Ni5oIGkzODYvYXR0LmggbGludXguaCBpMzg2L2ZyZWVic2QtZWxmLmggaTM4Ni9wZXJmb3JtLmgiCisJCXhtX2ZpbGU9aTM4Ni94bS1mcmVlYnNkLmgKKwkJIyBPbiBGcmVlQlNELCB0aGUgaGVhZGVycyBhcmUgYWxyZWFkeSBvay4KKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJdG1ha2VfZmlsZT1pMzg2L3QtZnJlZWJzZAorCQlnYXM9eWVzCisJCWdudV9sZD15ZXMKKwkJc3RhYnM9eWVzCisJCTs7CisJaVszNDU2XTg2LSotZnJlZWJzZCopCisJCXRtX2ZpbGU9aTM4Ni9mcmVlYnNkLmgKKwkJeG1fZmlsZT1pMzg2L3htLWZyZWVic2QuaAorCQkjIE9uIEZyZWVCU0QsIHRoZSBoZWFkZXJzIGFyZSBhbHJlYWR5IG9rLgorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQl0bWFrZV9maWxlPWkzODYvdC1mcmVlYnNkCisJCTs7CisJaVszNDU2XTg2LSotbmV0YnNkKikKKwkJdG1fZmlsZT1pMzg2L25ldGJzZC5oCisJCXhtX2ZpbGU9aTM4Ni94bS1uZXRic2QuaAorCQkjIE9uIE5ldEJTRCwgdGhlIGhlYWRlcnMgYXJlIGFscmVhZHkgb2theS4KKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJdG1ha2VfZmlsZT10LW5ldGJzZAorCQk7OworCWlbMzQ1Nl04Ni0qLWNvZmYqKQorCQl0bV9maWxlPWkzODYvaTM4Ni1jb2ZmLmgKKwkJdG1ha2VfZmlsZT1pMzg2L3QtaTM4NmJhcmUKKwkJOzsKKwlpWzM0NTZdODYtKi1pc2MqKQkJIyA4MDM4NiBydW5uaW5nIElTQyBzeXN0ZW0KKwkJeG1fZmlsZT1pMzg2L3htLWlzYy5oCisJCWNhc2UgJG1hY2hpbmUgaW4KKwkJICBpWzM0NV04Ni0qLWlzY1szNF0qKQorCQkgICAgeG1ha2VfZmlsZT1pMzg2L3gtaXNjMworCQkgICAgOzsKKwkJICAqKQorCQkgICAgeG1ha2VfZmlsZT1pMzg2L3gtaXNjCisJCSAgICA7OworCQllc2FjCisgICAgICAgICAgICAgICAgaWYgWyB4JGdhcyA9IHh5ZXMgLWEgeCRzdGFicyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPWkzODYvaXNjZGJ4LmgKKwkJCXRtYWtlX2ZpbGU9aTM4Ni90LXN2cjNkYngKKwkJCWV4dHJhX3BhcnRzPSJzdnIzLmlmaWxlIHN2cjN6LmlmaWxlIgorCQllbHNlCisJCQl0bV9maWxlPWkzODYvaXNjY29mZi5oCisJCQl0bWFrZV9maWxlPWkzODYvdC1jcnRzdHVmZgorCQkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWZpCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCTs7CisJaVszNDU2XTg2LSotbGludXgtZ251b2xkbGQqKQkjIEludGVsIDgwMzg2J3MgcnVubmluZyBMaW51eAorCQl4bV9maWxlPWkzODYveG0tbGludXguaCAjIHdpdGggYS5vdXQgZm9ybWF0IHVzaW5nIHByZSBCRkQgbGlua2VycworCQl4bWFrZV9maWxlPXgtbGludXgtYW91dAorCQl0bWFrZV9maWxlPSJ0LWxpbnV4LWFvdXQgaTM4Ni90LWNydHN0dWZmIgorCQl0bV9maWxlPWkzODYvbGludXgtb2xkbGQuaAorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbiAjT24gTGludXgsIHRoZSBoZWFkZXJzIGFyZSBvayBhbHJlYWR5LgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJZ251X2xkPXllcworCQk7OworCWlbMzQ1Nl04Ni0qLWxpbnV4LWdudWFvdXQqKQkJIyBJbnRlbCA4MDM4NidzIHJ1bm5pbmcgTGludXgKKwkJeG1fZmlsZT1pMzg2L3htLWxpbnV4LmgJCSMgd2l0aCBhLm91dCBmb3JtYXQKKwkJeG1ha2VfZmlsZT14LWxpbnV4LWFvdXQKKwkJdG1ha2VfZmlsZT0idC1saW51eC1hb3V0IGkzODYvdC1jcnRzdHVmZiIKKwkJdG1fZmlsZT1pMzg2L2xpbnV4LWFvdXQuaAorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbiAjT24gTGludXgsIHRoZSBoZWFkZXJzIGFyZSBvayBhbHJlYWR5LgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJZ251X2xkPXllcworCQk7OworCWlbMzQ1Nl04Ni0qLWxpbnV4LWdudWxpYmMxKQorCQl4bV9maWxlPWkzODYveG0tbGludXguaAkjIEludGVsIDgwMzg2J3MgcnVubmluZyBMaW51eAorCQl4bWFrZV9maWxlPXgtbGludXgJIyB3aXRoIEVMRiBmb3JtYXQgdXNpbmcgdGhlCisJCXRtX2ZpbGU9aTM4Ni9saW51eC5oCSMgTGludXggQyBsaWJyYXJ5IDUKKwkJdG1ha2VfZmlsZT0idC1saW51eCB0LWxpbnV4LWdudWxpYmMxIGkzODYvdC1jcnRzdHVmZiIKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0YmVnaW5TLm8gY3J0ZW5kLm8gY3J0ZW5kUy5vIgorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbiAjT24gTGludXgsIHRoZSBoZWFkZXJzIGFyZSBvayBhbHJlYWR5LgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJZ251X2xkPXllcworIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisgCQkJdGhyZWFkX2ZpbGU9J3NpbmdsZScKKyAJCWZpCisJCTs7CisJaVszNDU2XTg2LSotbGludXgtZ251KikJCSMgSW50ZWwgODAzODYncyBydW5uaW5nIExpbnV4CisJCXhtX2ZpbGU9aTM4Ni94bS1saW51eC5oICMgd2l0aCBFTEYgZm9ybWF0IHVzaW5nIGdsaWJjIDIKKwkJeG1ha2VfZmlsZT14LWxpbnV4CSMgYWthIExpbnV4IEMgbGlicmFyeSA2CisJCXRtX2ZpbGU9aTM4Ni9saW51eC5oCisJCXRtYWtlX2ZpbGU9InQtbGludXggaTM4Ni90LWNydHN0dWZmIgorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRiZWdpblMubyBjcnRlbmQubyBjcnRlbmRTLm8iCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluICNPbiBMaW51eCwgdGhlIGhlYWRlcnMgYXJlIG9rIGFscmVhZHkuCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlnbnVfbGQ9eWVzCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKyAJCQl0aHJlYWRfZmlsZT0ncG9zaXgnCisgCQlmaQorCQk7OworCWlbMzQ1Nl04Ni0qLWdudSopCisJCTs7CisJaVszNDU2XTg2LWdvMzItbXNkb3MgfCBpWzM0NTZdODYtKi1nbzMyKikKKwkJeG1fZmlsZT1pMzg2L3htLWdvMzIuaAorCQl0bV9maWxlPWkzODYvZ28zMi5oCisJCXRtYWtlX2ZpbGU9aTM4Ni90LWdvMzIKKwkJOzsKKwlpWzM0NTZdODYtbW9zcy1tc2RvcyogfCBpWzM0NTZdODYtKi1tb3NzKikKKwkJdG1fZmlsZT1pMzg2L21vc3MuaAorCQl0bWFrZV9maWxlPXQtbGliYy1vaworCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQlnbnVfbGQ9eWVzCisJCWdhcz15ZXMKKwkJOzsKKwlpWzM0NTZdODYtKi1seW54b3MqKQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9aTM4Ni9seW54LmgKKwkJZWxzZQorCQkJdG1fZmlsZT1pMzg2L2x5bngtbmcuaAorCQlmaQorCQl4bV9maWxlPWkzODYveG0tbHlueC5oCisJCXRtYWtlX2ZpbGU9aTM4Ni90LWkzODZiYXJlCisJCXhtYWtlX2ZpbGU9eC1seW54CisJCTs7CisJaVszNDU2XTg2LSotbWFjaCopCisJCXRtX2ZpbGU9aTM4Ni9tYWNoLmgKKyMJCXRtYWtlX2ZpbGU9dC1saWJjLW9rCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlpWzM0NTZdODYtKi1vc2Zyb3NlKikJCSMgMzg2IHVzaW5nIE9TRi9yb3NlCisgICAgICAgICAgICAgICAgaWYgWyB4JGVsZiA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPWkzODYvb3NmZWxmLmgKKwkJCXVzZV9jb2xsZWN0Mj0KKwkJZWxzZQorCQkJdG1fZmlsZT1pMzg2L29zZnJvc2UuaAorCQkJdXNlX2NvbGxlY3QyPXllcworCQlmaQorCQl4bV9maWxlPWkzODYveG0tb3NmLmgKKwkJeG1ha2VfZmlsZT1pMzg2L3gtb3Nmcm9zZQorCQl0bWFrZV9maWxlPWkzODYvdC1vc2YKKwkJZXh0cmFfb2Jqcz1oYWxmcGljLm8KKwkJOzsKKwlpWzM0NV04Ni1nbzMyLXJ0ZW1zKikKKwkJY3B1X3R5cGU9aTM4NgorCQl4bV9maWxlPWkzODYveG0tZ28zMi5oCisJCXRtX2ZpbGU9aTM4Ni9nbzMyLXJ0ZW1zLmgKKwkJdG1ha2VfZmlsZT0iaTM4Ni90LWdvMzIgdC1ydGVtcyIKKwkJOzsKKwlpWzM0NV04Ni0qLXJ0ZW1zKikKKwkJY3B1X3R5cGU9aTM4NgorCQl0bV9maWxlPWkzODYvcnRlbXMuaAorCQl0bWFrZV9maWxlPSJpMzg2L3QtaTM4NmJhcmUgdC1ydGVtcyIKKwkJOzsKKwlpWzM0NTZdODYtKi1zY28zLjJ2NSopCQkjIDgwMzg2IHJ1bm5pbmcgU0NPIE9wZW4gU2VydmVyIDUKKwkJeG1fZmlsZT1pMzg2L3htLXNjbzUuaAorCQl4bWFrZV9maWxlPWkzODYveC1zY281CisJCWZpeGluY2x1ZGVzPWZpeGluYy5zY28KKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCXRtX2ZpbGU9aTM4Ni9zY281LmgKKwkJdG1ha2VfZmlsZT1pMzg2L3Qtc2NvNQorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisJCTs7CisJaVszNDU2XTg2LSotc2NvMy4ydjQqKQkgCSMgODAzODYgcnVubmluZyBTQ08gMy4ydjQgc3lzdGVtCisJCXhtX2ZpbGU9aTM4Ni94bS1zY28uaAorCQl4bWFrZV9maWxlPWkzODYveC1zY280CisJCWZpeGluY2x1ZGVzPWZpeGluYy5zY28KKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKyAgICAgICAgICAgICAgICBpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT1pMzg2L3NjbzRkYnguaAorCQkJdG1ha2VfZmlsZT1pMzg2L3Qtc3ZyM2RieAorCQkJZXh0cmFfcGFydHM9InN2cjMuaWZpbGUgc3ZyM3oucmZpbGUiCisJCWVsc2UKKwkJCXRtX2ZpbGU9aTM4Ni9zY280LmgKKwkJCXRtYWtlX2ZpbGU9aTM4Ni90LWNydHN0dWZmCisJCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJZmkKKwkJdHJ1bmNhdGVfdGFyZ2V0PXllcworCQk7OworCWlbMzQ1Nl04Ni0qLXNjbyopCSAJIyA4MDM4NiBydW5uaW5nIFNDTyBzeXN0ZW0KKwkJeG1fZmlsZT1pMzg2L3htLXNjby5oCisJCXhtYWtlX2ZpbGU9aTM4Ni94LXNjbworCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworICAgICAgICAgICAgICAgIGlmIFsgeCRzdGFicyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPWkzODYvc2NvZGJ4LmgKKwkJCXRtYWtlX2ZpbGU9aTM4Ni90LXN2cjNkYngKKwkJCWV4dHJhX3BhcnRzPSJzdnIzLmlmaWxlIHN2cjN6LnJmaWxlIgorCQllbHNlCisJCQl0bV9maWxlPWkzODYvc2NvLmgKKwkJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQkJdG1ha2VfZmlsZT1pMzg2L3QtY3J0c3R1ZmYKKwkJZmkKKwkJdHJ1bmNhdGVfdGFyZ2V0PXllcworCQk7OworCWlbMzQ1Nl04Ni0qLXNvbGFyaXMyKikKKwkJeG1fZmlsZT1pMzg2L3htLXN5c3Y0LmgKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9aTM4Ni9zb2wyZGJnLmgKKwkJZWxzZQorCQkJdG1fZmlsZT1pMzg2L3NvbDIuaAorCQlmaQorCQl0bWFrZV9maWxlPWkzODYvdC1zb2wyCisJCWV4dHJhX3BhcnRzPSJjcnQxLm8gY3J0aS5vIGNydG4ubyBjcnRiZWdpbi5vIGNydGVuZC5vIgorCQl4bWFrZV9maWxlPXgtc3ZyNAorCQlmaXhpbmNsdWRlcz1maXhpbmMuc3ZyNAorCQlicm9rZW5faW5zdGFsbD15ZXMKKyAJCWlmIFsgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgXTsgdGhlbgorCQkJdGhyZWFkX2ZpbGU9J3NvbGFyaXMnCisJCWZpCisJCTs7CisJaVszNDU2XTg2LSotc3lzdjQqKQkJIyBJbnRlbCA4MDM4NidzIHJ1bm5pbmcgc3lzdGVtIFYuNAorCQl4bV9maWxlPWkzODYveG0tc3lzdjQuaAorCQl0bV9maWxlPWkzODYvc3lzdjQuaAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJdG1ha2VfZmlsZT1pMzg2L3QtY3J0cGljCisJCXhtYWtlX2ZpbGU9eC1zdnI0CisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQk7OworCWlbMzQ1Nl04Ni0qLXN5c3YqKQkJIyBJbnRlbCA4MDM4NidzIHJ1bm5pbmcgc3lzdGVtIFYKKwkJeG1fZmlsZT1pMzg2L3htLXN5c3YzLmgKKwkJeG1ha2VfZmlsZT1pMzg2L3gtc3lzdjMKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJCXRoZW4KKwkJCQl0bV9maWxlPWkzODYvc3ZyM2RieC5oCisJCQkJdG1ha2VfZmlsZT1pMzg2L3Qtc3ZyM2RieAorCQkJCWV4dHJhX3BhcnRzPSJzdnIzLmlmaWxlIHN2cjN6LnJmaWxlIgorCQkJZWxzZQorCQkJCXRtX2ZpbGU9aTM4Ni9zdnIzZ2FzLmgKKwkJCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJCQl0bWFrZV9maWxlPWkzODYvdC1jcnRzdHVmZgorCQkJZmkKKwkJZWxzZQorCQkJdG1fZmlsZT1pMzg2L3N5c3YzLmgKKwkJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQkJdG1ha2VfZmlsZT1pMzg2L3QtY3J0c3R1ZmYKKwkJZmkKKwkJOzsKKwlpMzg2LSotdnN0YSkJCQkjIEludGVsIDgwMzg2J3MgcnVubmluZyBWU1RhIGtlcm5lbAorCQl4bV9maWxlPWkzODYveG0tdnN0YS5oCisJCXRtX2ZpbGU9aTM4Ni92c3RhLmgKKwkJdG1ha2VfZmlsZT1pMzg2L3QtdnN0YQorCQl4bWFrZV9maWxlPWkzODYveC12c3RhCisJCTs7CisJaVszNDU2XTg2LSotcGUgfCBpWzM0NTZdODYtKi1jeWd3aW4zMikKKwkJeG1fZmlsZT0iJHt4bV9maWxlfSBpMzg2L3htLWN5Z3dpbjMyLmgiCisJCXRtYWtlX2ZpbGU9aTM4Ni90LWN5Z3dpbjMyCisJCXRtX2ZpbGU9aTM4Ni9jeWd3aW4zMi5oCisJCXhtYWtlX2ZpbGU9aTM4Ni94LWN5Z3dpbjMyCisJCWV4dHJhX29ianM9d2lubnQubworCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0nd2luMzInCisJCWZpCisJCWV4ZWV4dD0uZXhlCisJCTs7CisJaVszNDU2XTg2LSotbWluZ3czMikKKwkJdG1fZmlsZT1pMzg2L21pbmd3MzIuaAorCQl4bV9maWxlPSIke3htX2ZpbGV9IGkzODYveG0tbWluZ3czMi5oIgorCQl0bWFrZV9maWxlPWkzODYvdC1jeWd3aW4zMgorCQlleHRyYV9vYmpzPXdpbm50Lm8KKwkJeG1ha2VfZmlsZT1pMzg2L3gtY3lnd2luMzIKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKyAJCWlmIFsgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgXTsgdGhlbgorCQkJdGhyZWFkX2ZpbGU9J3dpbjMyJworCQlmaQorCQlleGVleHQ9LmV4ZQorCQk7OworCWlbMzQ1Nl04Ni0qLXdpbm50MyopCisJCXRtX2ZpbGU9aTM4Ni93aW4tbnQuaAorCQlvdXRfZmlsZT1pMzg2L2kzODYuYworCQl4bV9maWxlPWkzODYveG0td2lubnQuaAorCQl4bWFrZV9maWxlPXdpbm50L3gtd2lubnQKKwkJdG1ha2VfZmlsZT1pMzg2L3Qtd2lubnQKKwkJZXh0cmFfaG9zdF9vYmpzPSJ3aW5udC5vIG9sZG5hbWVzLm8iCisJCWV4dHJhX2djY19vYmpzPSJzcGF3bnYubyBvbGRuYW1lcy5vIgorCQlmaXhpbmNsdWRlcz1maXhpbmMud2lubnQKKwkJaWYgWyB4JGdudV9sZCAhPSB4eWVzIF0KKwkJdGhlbgorCQkJZXh0cmFfcHJvZ3JhbXM9bGQuZXhlCisJCWZpCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSd3aW4zMicKKwkJZmkKKwkJOzsKKwlpWzM0NTZdODYtZGctZGd1eCkKKwkJeG1fZmlsZT1pMzg2L3htLWRndXguaAorCQlvdXRfZmlsZT1pMzg2L2RndXguYworCQl0bV9maWxlPWkzODYvZGd1eC5oCisJCXRtYWtlX2ZpbGU9aTM4Ni90LWRndXgKKwkJeG1ha2VfZmlsZT1pMzg2L3gtZGd1eAorCQlmaXhpbmNsdWRlcz1maXhpbmMuZGd1eAorCQlpbnN0YWxsX2hlYWRlcnNfZGlyPWluc3RhbGwtaGVhZGVycy1jcGlvCisgICAgICAgICAgICAgIDs7CisJaTg2MC1hbGxpYW50LSopCQkjIEFsbGlhbnQgRlgvMjgwMAorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHN2cjQuaCBpODYwL3N5c3Y0LmggaTg2MC9meDI4MDAuaCIKKwkJeG1fZmlsZT0iJHt4bV9maWxlfSBpODYwL3htLWZ4MjgwMC5oIgorCQl4bWFrZV9maWxlPWk4NjAveC1meDI4MDAKKwkJdG1ha2VfZmlsZT1pODYwL3QtZngyODAwCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQk7OworCWk4NjAtKi1ic2QqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGk4NjAvYnNkLmgiCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBpODYwL2JzZC1nYXMuaCIKKwkJZmkKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCWk4NjAtKi1tYWNoKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBpODYwL21hY2guaCIKKwkJdG1ha2VfZmlsZT10LWxpYmMtb2sKKwkJOzsKKwlpODYwLSotb3NmKikJCQkjIEludGVsIFBhcmFnb24gWFAvUywgT1NGLzFBRAorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHN2cjMuaCBpODYwL3BhcmFnb24uaCIKKwkJeG1fZmlsZT0iJHt4bV9maWxlfSB4bS1zdnIzLmgiCisJCXRtYWtlX2ZpbGU9dC1vc2YKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCTs7CisJaTg2MC0qLXN5c3YzKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBzdnIzLmggaTg2MC9zeXN2My5oIgorCQl4bV9maWxlPSIke3RtX2ZpbGV9IHhtLXN2cjMuaCIKKwkJeG1ha2VfZmlsZT1pODYwL3gtc3lzdjMKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCTs7CisJaTg2MC0qLXN5c3Y0KikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBzdnI0LmggaTg2MC9zeXN2NC5oIgorCQl4bV9maWxlPSIke3htX2ZpbGV9IHhtLXN2cjMuaCIKKwkJeG1ha2VfZmlsZT1pODYwL3gtc3lzdjQKKwkJdG1ha2VfZmlsZT10LXN2cjQKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCTs7CisJaTk2MC13cnMtdnh3b3JrczUgfCBpOTYwLXdycy12eHdvcmtzNS4wKikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBpOTYwL3Z4OTYwLmgiCisJCXRtYWtlX2ZpbGU9aTk2MC90LXZ4d29ya3M5NjAKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCWk5NjAtd3JzLXZ4d29ya3M1KikKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhjb2ZmLmggaTk2MC9pOTYwLWNvZmYuaCBpOTYwL3Z4OTYwLWNvZmYuaCIKKwkJdG1ha2VfZmlsZT1pOTYwL3Qtdnh3b3Jrczk2MAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaTk2MC13cnMtdnh3b3JrcyopCisJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTk2MC92eDk2MC5oIgorCQl0bWFrZV9maWxlPWk5NjAvdC12eHdvcmtzOTYwCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlpOTYwLSotY29mZiopCisJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4Y29mZi5oIGk5NjAvaTk2MC1jb2ZmLmggbGliZ2xvc3MuaCIKKwkJdG1ha2VfZmlsZT1pOTYwL3QtOTYwYmFyZQorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJaTk2MC0qLXJ0ZW1zKQorCQl0bWFrZV9maWxlPSJpOTYwL3QtOTYwYmFyZSB0LXJ0ZW1zIgorCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGNvZmYuaCBpOTYwL3J0ZW1zLmgiCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlpOTYwLSotKikJCQkjIERlZmF1bHQgaTk2MCBlbnZpcm9ubWVudC4KKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCW0zMnItKi1lbGYqKQorCQlleHRyYV9wYXJ0cz0iY3J0aW5pdC5vIGNydGZpbmkubyIKKwkJOzsKKwltNjgwMDAtY29udmVyZ2VudC1zeXN2KikKKwkJdG1fZmlsZT1tNjhrL2N0aXguaAorCQl4bV9maWxlPW02OGsveG0tM2IxLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02ODAwMC1ocC1ic2QqKQkJCSMgSFAgOTAwMC8yMDAgcnVubmluZyBCU0QKKwkJdG1fZmlsZT1tNjhrL2hwMmJzZC5oCisJCXhtYWtlX2ZpbGU9bTY4ay94LWhwMmJzZAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4MDAwLWhwLWhwdXgqKQkJIyBIUCA5MDAwIHNlcmllcyAzMDAKKwkJeG1fZmlsZT1tNjhrL3htLWhwMzIwLmgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl4bWFrZV9maWxlPW02OGsveC1ocDMyMGcKKwkJCXRtX2ZpbGU9bTY4ay9ocDMxMGcuaAorCQllbHNlCisJCQl4bWFrZV9maWxlPW02OGsveC1ocDMyMAorCQkJdG1fZmlsZT1tNjhrL2hwMzEwLmgKKwkJZmkKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02ODAwMC1zdW4tc3Vub3MzKikKKwkJdG1fZmlsZT1tNjhrL3N1bjIuaAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4MDAwLXN1bi1zdW5vczQqKQorCQl0bV9maWxlPW02OGsvc3VuMm80LmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02ODAwMC1hdHQtc3lzdiopCisJCXhtX2ZpbGU9bTY4ay94bS0zYjEuaAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9bTY4ay8zYjFnLmgKKwkJZWxzZQorCQkJdG1fZmlsZT1tNjhrLzNiMS5oCisJCWZpCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJOzsKKwltNjhrLWFwcGxlLWF1eCopCQkjIEFwcGxlIE1hY2ludG9zaCBydW5uaW5nIEEvVVgKKwkJeG1fZmlsZT1tNjhrL3htLWF1eC5oCisJCXRtYWtlX2ZpbGU9bTY4ay90LWF1eAorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQlleHRyYV9wYXJ0cz0iY3J0MS5vIG1jcnQxLm8gbWFjY3J0MS5vIGNydDIubyBjcnRuLm8iCisJCXRtX2ZpbGU9CisJCWlmIFsgIiRnbnVfbGQiID0geWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtNjhrL2F1eGdsZC5oIgorCQllbHNlCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG02OGsvYXV4bGQuaCIKKwkJZmkKKwkJaWYgWyAiJGdhcyIgPSB5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG02OGsvYXV4Z2FzLmgiCisJCWVsc2UKKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbTY4ay9hdXhhcy5oIgorCQlmaQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IG02OGsvYS11eC5oIgorCQk7OworCW02OGstYXBvbGxvLSopCisJCXRtX2ZpbGU9bTY4ay9hcG9sbG82OC5oCisJCXhtYWtlX2ZpbGU9bTY4ay94LWFwb2xsbzY4CisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJOzsKKwltNjhrLWFsdG9zLXN5c3YqKQkJICAgIyBBbHRvcyAzMDY4CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkgICAgICAgIHRtX2ZpbGU9bTY4ay9hbHRvczMwNjguaAorCQkgICAgICAgIHhtX2ZpbGU9bTY4ay94bS1hbHRvczMwNjguaAorCQllbHNlCisJCQllY2hvICJUaGUgQWx0b3MgaXMgc3VwcG9ydGVkIG9ubHkgd2l0aCB0aGUgR05VIGFzc2VtYmxlciIgMT4mMgorCQkJZXhpdCAxCisJCWZpCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJICAgICAgICA7OworCW02OGstYnVsbC1zeXN2KikJCSMgQnVsbCBEUFgvMgorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXQorCQkJdGhlbgorCQkJCXRtX2ZpbGU9bTY4ay9kcHgyY2RieC5oCisJCQllbHNlCisJCQkJdG1fZmlsZT1tNjhrL2RweDJnLmgKKwkJCWZpCisJCWVsc2UKKwkJCXRtX2ZpbGU9bTY4ay9kcHgyLmgKKwkJZmkKKwkJeG1fZmlsZT1tNjhrL3htLW02OGt2LmgKKwkJeG1ha2VfZmlsZT1tNjhrL3gtZHB4MgorCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1hdGFyaS1zeXN2NCopICAgICAgICAgICAgICAjIEF0YXJpIHZhcmlhbnQgb2YgVi40LgorCQl0bV9maWxlPW02OGsvYXRhcmkuaAorCQl4bV9maWxlPW02OGsveG0tYXRhcmkuaAorCQl0bWFrZV9maWxlPXQtc3ZyNAorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJOzsKKwltNjhrLW1vdG9yb2xhLXN5c3YqKQorCQl0bV9maWxlPW02OGsvbW90MzMwMC5oCisJCXhtX2ZpbGU9bTY4ay94bS1tb3QzMzAwLmgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl4bWFrZV9maWxlPW02OGsveC1tb3QzMzAwLWdhcworCQkJaWYgWyB4JGdudV9sZCA9IHh5ZXMgXQorCQkJdGhlbgorCQkJCXRtYWtlX2ZpbGU9bTY4ay90LW1vdDMzMDAtZ2FsZAorCQkJZWxzZQorCQkJCXRtYWtlX2ZpbGU9bTY4ay90LW1vdDMzMDAtZ2FzCisJCQkJdXNlX2NvbGxlY3QyPXllcworCQkJZmkKKwkJZWxzZQorCQkJeG1ha2VfZmlsZT1tNjhrL3gtbW90MzMwMAorCQkJaWYgWyB4JGdudV9sZCA9IHh5ZXMgXQorCQkJdGhlbgorCQkJCXRtYWtlX2ZpbGU9bTY4ay90LW1vdDMzMDAtZ2xkCisJCQllbHNlCisJCQkJdG1ha2VfZmlsZT1tNjhrL3QtbW90MzMwMAorCQkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJCWZpCisJCWZpCisJCWdkYl9uZWVkc19vdXRfZmlsZV9wYXRoPXllcworCQlleHRyYV9wYXJ0cz0iY3J0MC5vIG1jcnQwLm8iCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1uY3Itc3lzdiopCQkJIyBOQ1IgVG93ZXIgMzIgU1ZSMworCQl0bV9maWxlPW02OGsvdG93ZXItYXMuaAorCQl4bV9maWxlPW02OGsveG0tdG93ZXIuaAorCQl4bWFrZV9maWxlPW02OGsveC10b3dlcgorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJOzsKKyAgICAgICAgbTY4ay1wbGV4dXMtc3lzdiopCisJCXRtX2ZpbGU9bTY4ay9wbGV4dXMuaAorCQl4bV9maWxlPW02OGsveG0tcGxleHVzLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstdHRpLSopCisJCXRtX2ZpbGU9bTY4ay9wYmIuaAorCQl4bV9maWxlPW02OGsveG0tbTY4a3YuaAorCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstY3Jkcy11bm9zKikKKwkJeG1fZmlsZT1tNjhrL3htLWNyZHMuaAorCQl4bWFrZV9maWxlPW02OGsveC1jcmRzCisJCXRtX2ZpbGU9bTY4ay9jcmRzLmgKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJOzsKKwltNjhrLWNibS1zeXN2NCopCQkjIENvbW1vZG9yZSB2YXJpYW50IG9mIFYuNC4KKwkJdG1fZmlsZT1tNjhrL2FtaXguaAorCQl4bV9maWxlPW02OGsveG0tYW1peC5oCisJCXhtYWtlX2ZpbGU9bTY4ay94LWFtaXgKKwkJdG1ha2VfZmlsZT10LXN2cjQKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1jY3VyLXJ0dSkKKwkJdG1fZmlsZT1tNjhrL2NjdXItR0FTLmgKKwkJeG1ha2VfZmlsZT1tNjhrL3gtY2N1cgorCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQk7OworCW02OGstaHAtYnNkNC40KikJCSMgSFAgOTAwMC8zeHggcnVubmluZyA0LjRic2QKKwkJdG1fZmlsZT1tNjhrL2hwM2JzZDQ0LmgKKwkJeG1ha2VfZmlsZT1tNjhrL3gtaHAzYnNkNDQKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstaHAtYnNkKikJCQkjIEhQIDkwMDAvM3h4IHJ1bm5pbmcgQmVya2VsZXkgVW5peAorCQl0bV9maWxlPW02OGsvaHAzYnNkLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstaXNpLWJzZCopCisJCWlmIFsgeCR3aXRoX2ZwID0geG5vIF0KKwkJdGhlbgorCQkJdG1fZmlsZT1tNjhrL2lzaS1uZnAuaAorCQllbHNlCisJCQl0bV9maWxlPW02OGsvaXNpLmgKKwkJZmkKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstaHAtaHB1eDcqKQkjIEhQIDkwMDAgc2VyaWVzIDMwMCBydW5uaW5nIEhQVVggdmVyc2lvbiA3LgorCQl4bV9maWxlPW02OGsveG0taHAzMjAuaAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXhtYWtlX2ZpbGU9bTY4ay94LWhwMzIwZworCQkJdG1fZmlsZT1tNjhrL2hwMzIwZy5oCisJCWVsc2UKKwkJCXhtYWtlX2ZpbGU9bTY4ay94LWhwMzIwCisJCQl0bV9maWxlPW02OGsvaHB1eDcuaAorCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1ocC1ocHV4KikJIyBIUCA5MDAwIHNlcmllcyAzMDAKKwkJeG1fZmlsZT1tNjhrL3htLWhwMzIwLmgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl4bWFrZV9maWxlPW02OGsveC1ocDMyMGcKKwkJCXRtX2ZpbGU9bTY4ay9ocDMyMGcuaAorCQllbHNlCisJCQl4bWFrZV9maWxlPW02OGsveC1ocDMyMAorCQkJdG1fZmlsZT1tNjhrL2hwMzIwLmgKKwkJZmkKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstc3VuLW1hY2gqKQorCQl0bV9maWxlPW02OGsvc3VuM21hY2guaAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1zb255LW5ld3NvczMqKQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9bTY4ay9uZXdzM2dhcy5oCisJCWVsc2UKKwkJCXRtX2ZpbGU9bTY4ay9uZXdzMy5oCisJCWZpCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJOzsKKwltNjhrLXNvbnktYnNkKiB8IG02OGstc29ueS1uZXdzb3MqKQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9bTY4ay9uZXdzZ2FzLmgKKwkJZWxzZQorCQkJdG1fZmlsZT1tNjhrL25ld3MuaAorCQlmaQorCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1uZXh0LW5leHRzdGVwMiopCisJCXRtX2ZpbGU9bTY4ay9uZXh0MjEuaAorCQl4bV9maWxlPW02OGsveG0tbmV4dC5oCisJCXRtYWtlX2ZpbGU9bTY4ay90LW5leHQKKwkJeG1ha2VfZmlsZT1tNjhrL3gtbmV4dAorCQlleHRyYV9vYmpzPW5leHRzdGVwLm8KKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJdXNlX2NvbGxlY3QyPXllcworICAgICAgICAgICAgICAgIDs7CisJbTY4ay1uZXh0LW5leHRzdGVwMyopCisJCXRtX2ZpbGU9bTY4ay9uZXh0LmgKKwkJeG1fZmlsZT1tNjhrL3htLW5leHQuaAorCQl0bWFrZV9maWxlPW02OGsvdC1uZXh0CisJCXhtYWtlX2ZpbGU9bTY4ay94LW5leHQKKwkJZXh0cmFfb2Jqcz1uZXh0c3RlcC5vCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSdtYWNoJworCQlmaQorCQk7OworCW02OGstc3VuLXN1bm9zMyopCisJCWlmIFsgeCR3aXRoX2ZwID0geG5vIF0KKwkJdGhlbgorCQkJdG1fZmlsZT1tNjhrL3N1bjNuMy5oCisJCWVsc2UKKwkJCXRtX2ZpbGU9bTY4ay9zdW4zbzMuaAorCQlmaQorCQl1c2VfY29sbGVjdDI9eWVzCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay1zdW4tc3Vub3MqKQkJCSMgRm9yIFN1bk9TIDQgKHRoZSBkZWZhdWx0KS4KKwkJaWYgWyB4JHdpdGhfZnAgPSB4bm8gXQorCQl0aGVuCisJCQl0bV9maWxlPW02OGsvc3VuM24uaAorCQllbHNlCisJCQl0bV9maWxlPW02OGsvc3VuMy5oCisJCWZpCisJCXhtX2ZpbGU9bTY4ay94bS1zdW4zLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstd3JzLXZ4d29ya3MqKQorCQl0bV9maWxlPW02OGsvdnhtNjhrLmgKKwkJdG1ha2VfZmlsZT1tNjhrL3Qtdnh3b3JrczY4CisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay0qLWFvdXQqKQorCQl0bWFrZV9maWxlPW02OGsvdC1tNjhrYmFyZQorCQl0bV9maWxlPSJtNjhrL202OGstYW91dC5oIGxpYmdsb3NzLmgiCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay0qLWNvZmYqKQorCQl0bWFrZV9maWxlPW02OGsvdC1tNjhrYmFyZQorCQl0bV9maWxlPSJtNjhrL202OGstY29mZi5oIGRieC5oIGxpYmdsb3NzLmgiCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay0qLWx5bnhvcyopCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1fZmlsZT1tNjhrL2x5bnguaAorCQllbHNlCisJCQl0bV9maWxlPW02OGsvbHlueC1uZy5oCisJCWZpCisJCXhtX2ZpbGU9bTY4ay94bS1seW54LmgKKwkJeG1ha2VfZmlsZT14LWx5bngKKwkJdG1ha2VfZmlsZT1tNjhrL3QtbHlueAorCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstKi1uZXRic2QqKQorCQl0bV9maWxlPW02OGsvbmV0YnNkLmgKKwkJeG1fZmlsZT1tNjhrL3htLW5ldGJzZC5oCisJCSMgT24gTmV0QlNELCB0aGUgaGVhZGVycyBhcmUgYWxyZWFkeSBva2F5LgorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQl0bWFrZV9maWxlPXQtbmV0YnNkCisJCTs7CisJbTY4ay0qLXN5c3YzKikJCQkjIE1vdG9yb2xhIG02OGsncyBydW5uaW5nIHN5c3RlbSBWLjMKKwkJeG1fZmlsZT1tNjhrL3htLW02OGt2LmgKKwkJeG1ha2VfZmlsZT1tNjhrL3gtbTY4a3YKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCTs7CisJbTY4ay0qLXN5c3Y0KikJCQkjIE1vdG9yb2xhIG02OGsncyBydW5uaW5nIHN5c3RlbSBWLjQKKwkJdG1fZmlsZT1tNjhrL202OGt2NC5oCisJCXhtX2ZpbGU9bTY4ay94bS1tNjhrdi5oCisJCXRtYWtlX2ZpbGU9dC1zdnI0CisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstKi1saW51eC1nbnVhb3V0KikJCSMgTW90b3JvbGEgbTY4aydzIHJ1bm5pbmcgTGludXgKKwkJeG1fZmlsZT1tNjhrL3htLWxpbnV4LmgJIyB3aXRoIGEub3V0IGZvcm1hdAorCQl4bWFrZV9maWxlPXgtbGludXgKKwkJdG1fZmlsZT1tNjhrL2xpbnV4LWFvdXQuaAorCQl0bWFrZV9maWxlPSJ0LWxpbnV4LWFvdXQgbTY4ay90LWxpbnV4LWFvdXQiCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluICNPbiBMaW51eCwgdGhlIGhlYWRlcnMgYXJlIG9rIGFscmVhZHkuCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCWdudV9sZD15ZXMKKwkJOzsKKwltNjhrLSotbGludXgtZ251bGliYzEpCQkjIE1vdG9yb2xhIG02OGsncyBydW5uaW5nIExpbnV4CisJCXhtX2ZpbGU9bTY4ay94bS1saW51eC5oCSMgd2l0aCBFTEYgZm9ybWF0IHVzaW5nIHRoZQorCQl4bWFrZV9maWxlPXgtbGludXgJIyBMaW51eCBDIGxpYnJhcnkgNQorCQl0bV9maWxlPW02OGsvbGludXguaAorCQl0bWFrZV9maWxlPSJ0LWxpbnV4IHQtbGludXgtZ251bGliYzEgbTY4ay90LWxpbnV4IgorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRiZWdpblMubyBjcnRlbmQubyBjcnRlbmRTLm8iCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluICNPbiBMaW51eCwgdGhlIGhlYWRlcnMgYXJlIG9rIGFscmVhZHkuCisJCWV4dHJhX2hlYWRlcnM9bWF0aC02ODg4MS5oCisJCWdudV9sZD15ZXMKKwkJOzsKKwltNjhrLSotbGludXgtZ251KikJCQkjIE1vdG9yb2xhIG02OGsncyBydW5uaW5nIExpbnV4CisJCXhtX2ZpbGU9bTY4ay94bS1saW51eC5oCSMgd2l0aCBFTEYgZm9ybWF0IHVzaW5nIGdsaWJjIDIKKwkJeG1ha2VfZmlsZT14LWxpbnV4CSMgYWthIHRoZSBMaW51eCBDIGxpYnJhcnkgNi4KKwkJdG1fZmlsZT1tNjhrL2xpbnV4LmgKKwkJdG1ha2VfZmlsZT0idC1saW51eCBtNjhrL3QtbGludXgiCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGJlZ2luUy5vIGNydGVuZC5vIGNydGVuZFMubyIKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4gI09uIExpbnV4LCB0aGUgaGVhZGVycyBhcmUgb2sgYWxyZWFkeS4KKwkJZXh0cmFfaGVhZGVycz1tYXRoLTY4ODgxLmgKKwkJZ251X2xkPXllcworCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSdwb3NpeCcKKwkJZmkKKwkJOzsKKwltNjhrLSotcHNvcyopCisJCXRtYWtlX2ZpbGU9bTY4ay90LW02OGtiYXJlCisJCXRtX2ZpbGU9bTY4ay9tNjhrLXBzb3MuaAorCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCW02OGstKi1ydGVtcyopCisJCXRtYWtlX2ZpbGU9Im02OGsvdC1tNjhrYmFyZSB0LXJ0ZW1zIgorCQl0bV9maWxlPW02OGsvcnRlbXMuaAorCQlleHRyYV9oZWFkZXJzPW1hdGgtNjg4ODEuaAorCQk7OworCisJbTg4ay1kZy1kZ3V4KikKKwkJY2FzZSAkbWFjaGluZSBpbgorCQkgIG04OGstZGctZGd1eGJjcyopCisJCSAgICB0bV9maWxlPW04OGsvZGd1eGJjcy5oCisJCSAgICB0bWFrZV9maWxlPW04OGsvdC1kZ3V4YmNzCisJCSAgICA7OworCQkgICopCisJCSAgICB0bV9maWxlPW04OGsvZGd1eC5oCisJCSAgICB0bWFrZV9maWxlPW04OGsvdC1kZ3V4CisJCSAgICA7OworCQllc2FjCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGJjc2NydGJlZ2luLm8gY3J0ZW5kLm8gbTg4a2RndXgubGQiCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQl4bWFrZV9maWxlPW04OGsveC1kZ3V4CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1tODhrL3QtZGd1eC1nYXMKKwkJZmkKKwkJZml4aW5jbHVkZXM9Zml4aW5jLmRndXgKKwkJOzsKKwltODhrLWRvbHBoaW4tc3lzdjMqKQorCQl0bV9maWxlPW04OGsvZG9scGguaAorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJeG1fZmlsZT1tODhrL3htLXN5c3YzLmgKKwkJeG1ha2VfZmlsZT1tODhrL3gtZG9scGgKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPW04OGsvdC1tODhrLWdhcworCQlmaQorCQk7OworCW04OGstdGVrdHJvbml4LXN5c3YzKQorCQl0bV9maWxlPW04OGsvdGVrWEQ4OC5oCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgorCQl4bV9maWxlPW04OGsveG0tc3lzdjMuaAorCQl4bWFrZV9maWxlPW04OGsveC10ZWtYRDg4CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1tODhrL3QtbTg4ay1nYXMKKwkJZmkKKwkJOzsKKwltODhrLSotYW91dCopCisJCXRtX2ZpbGU9bTg4ay9tODhrLWFvdXQuaAorCQk7OworCW04OGstKi1jb2ZmKikKKwkJdG1fZmlsZT1tODhrL204OGstY29mZi5oCisJCXRtYWtlX2ZpbGU9bTg4ay90LWJ1ZworCQk7OworCW04OGstKi1sdW5hKikKKwkJdG1fZmlsZT1tODhrL2x1bmEuaAorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPW04OGsvdC1sdW5hLWdhcworCQllbHNlCisJCQl0bWFrZV9maWxlPW04OGsvdC1sdW5hCisJCWZpCisJCTs7CisJbTg4ay0qLXN5c3YzKikKKwkJdG1fZmlsZT1tODhrL3N5c3YzLmgKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCXhtX2ZpbGU9bTg4ay94bS1zeXN2My5oCisJCXhtYWtlX2ZpbGU9bTg4ay94LXN5c3YzCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1tODhrL3QtbTg4ay1nYXMKKwkJZmkKKwkJOzsKKwltODhrLSotc3lzdjQqKQorCQl0bV9maWxlPW04OGsvc3lzdjQuaAorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJeG1ha2VfZmlsZT1tODhrL3gtc3lzdjQKKwkJdG1ha2VfZmlsZT1tODhrL3Qtc3lzdjQKKwkJOzsKKwltaXBzLXNnaS1pcml4NiopCQkjIFNHSSBTeXN0ZW0gVi40LiwgSVJJWCA2CisJCXRtX2ZpbGU9bWlwcy9pcmlzNi5oCisJCXhtX2ZpbGU9bWlwcy94bS1pcmlzNi5oCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlmaXhpbmNsdWRlcz1maXhpbmMuaXJpeAorCQl4bWFrZV9maWxlPW1pcHMveC1pcmlzNgorCQl0bWFrZV9maWxlPW1pcHMvdC1pcmlzNgorIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0naXJpeCcKKwkJZmkKKwkJOzsKKwltaXBzLXNnaS1pcml4NWNyb3NzNjQpCQkjIElyaXg1IGhvc3QsIElyaXggNiB0YXJnZXQsIGNyb3NzNjQKKwkJdG1fZmlsZT1taXBzL2Nyb3NzNjQuaAorCQl4bV9maWxlPW1pcHMveG0taXJpczUuaAorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJeG1ha2VfZmlsZT1taXBzL3gtaXJpcworCQl0bWFrZV9maWxlPW1pcHMvdC1jcm9zczY0CisJCSMgU2VlIGNvbW1lbnQgaW4gbWlwcy9pcmlzWzU2XS5oIGZpbGVzLgorCQl1c2VfY29sbGVjdDI9eWVzCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSdpcml4JworCQlmaQorCQk7OworICAgICAgICBtaXBzLXNuaS1zeXN2NCkKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJCXRoZW4KKwkJCQl0bV9maWxlPW1pcHMvaXJpczVnZGIuaAorCQkJZWxzZQorCQkJCXRtX2ZpbGU9bWlwcy9zbmktZ2FzLmgKKwkJCWZpCisJCWVsc2UKKwkJCXRtX2ZpbGU9bWlwcy9zbmktc3ZyNC5oCisJCWZpCisgICAgICAgICAgICAgICAgeG1fZmlsZT1taXBzL3htLXN5c3YuaAorICAgICAgICAgICAgICAgIHhtYWtlX2ZpbGU9bWlwcy94LXNuaS1zdnI0CisgICAgICAgICAgICAgICAgdG1ha2VfZmlsZT1taXBzL3QtbWlwcy1nYXMKKyAgICAgICAgICAgICAgICBpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9jb2xsZWN0Mj15ZXMKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGJyb2tlbl9pbnN0YWxsPXllcworICAgICAgICAgICAgICAgIDs7CisJbWlwcy1zZ2ktaXJpeDUqKQkJIyBTR0kgU3lzdGVtIFYuNC4sIElSSVggNQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9bWlwcy9pcmlzNWdhcy5oCisJCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF0KKwkJCXRoZW4KKwkJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQkJZmkKKwkJZWxzZQorCQkJdG1fZmlsZT1taXBzL2lyaXM1LmgKKwkJZmkKKwkJeG1fZmlsZT1taXBzL3htLWlyaXM1LmgKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWZpeGluY2x1ZGVzPWZpeGluYy5pcml4CisJCXhtYWtlX2ZpbGU9bWlwcy94LWlyaXMKKwkJIyBtaXBzLXRmaWxlIGRvZXNuJ3Qgd29yayB5ZXQKKwkJdG1ha2VfZmlsZT1taXBzL3QtbWlwcy1nYXMKKwkJIyBTZWUgY29tbWVudCBpbiBtaXBzL2lyaXM1LmggZmlsZS4KKwkJdXNlX2NvbGxlY3QyPXllcworIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0naXJpeCcKKwkJZmkKKwkJOzsKKwltaXBzLXNnaS1pcml4NGxvc2VyKikJCSMgTW9zdGx5IGxpa2UgYSBNSVBTLgorCQl0bV9maWxlPW1pcHMvaXJpczRsb3Nlci5oCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXTsgdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJeG1fZmlsZT1taXBzL3htLWlyaXM0LmgKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCXhtYWtlX2ZpbGU9bWlwcy94LWlyaXMKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPW1pcHMvdC1taXBzLWdhcworCQllbHNlCisJCQlleHRyYV9wYXNzZXM9Im1pcHMtdGZpbGUgbWlwcy10ZHVtcCIKKwkJZmkKKwkJaWYgWyB4JGdudV9sZCAhPSB4eWVzIF0KKwkJdGhlbgorCQkJdXNlX2NvbGxlY3QyPXllcworCQlmaQorIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0naXJpeCcKKwkJZmkKKwkJOzsKKwltaXBzLXNnaS1pcml4NCopCQkjIE1vc3RseSBsaWtlIGEgTUlQUy4KKwkJdG1fZmlsZT1taXBzL2lyaXM0LmgKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdOyB0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQl4bV9maWxlPW1pcHMveG0taXJpczQuaAorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJeG1ha2VfZmlsZT1taXBzL3gtaXJpcworCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtYWtlX2ZpbGU9bWlwcy90LW1pcHMtZ2FzCisJCWVsc2UKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSdpcml4JworCQlmaQorCQk7OworCW1pcHMtc2dpLSopCQkJIyBNb3N0bHkgbGlrZSBhIE1JUFMuCisJCXRtX2ZpbGU9bWlwcy9pcmlzMy5oCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXTsgdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJeG1fZmlsZT1taXBzL3htLWlyaXMzLmgKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCXhtYWtlX2ZpbGU9bWlwcy94LWlyaXMzCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3QtbWlwcy1nYXMKKwkJZWxzZQorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJCWZpCisJCWlmIFsgeCRnbnVfbGQgIT0geHllcyBdCisJCXRoZW4KKwkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZmkKKwkJOzsKKwltaXBzLWRlYy1vc2Zyb3NlKikJCSMgRGVjc3RhdGlvbiBydW5uaW5nIE9TRi8xIHJlZmVyZW5jZSBwb3J0IHdpdGggT1NGL3Jvc2UuCisJCXRtX2ZpbGU9bWlwcy9vc2Zyb3NlLmgKKwkJeG1ha2VfZmlsZT1taXBzL3gtb3Nmcm9zZQorCQl0bWFrZV9maWxlPW1pcHMvdC1vc2Zyb3NlCisJCWV4dHJhX29ianM9aGFsZnBpYy5vCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwltaXBzLWRlYy1vc2YqKQkJCSMgRGVjc3RhdGlvbiBydW5uaW5nIE9TRi8xIGFzIHNoaXBwZWQgYnkgRElHSVRBTAorCQl0bV9maWxlPW1pcHMvZGVjLW9zZjEuaAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCXhtYWtlX2ZpbGU9bWlwcy94LWRlYy1vc2YxCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3QtbWlwcy1nYXMKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT1taXBzL3QtdWx0cml4CisJCQlleHRyYV9wYXNzZXM9Im1pcHMtdGZpbGUgbWlwcy10ZHVtcCIKKwkJZmkKKwkJaWYgWyB4JGdudV9sZCAhPSB4eWVzIF0KKwkJdGhlbgorCQkJdXNlX2NvbGxlY3QyPXllcworCQlmaQorCQk7OworCW1pcHMtZGVjLWJzZCopICAgICAgICAgICAgICAgICAgIyBEZWNzdGF0aW9uIHJ1bm5pbmcgNC40IEJTRAorICAgICAgICAgICAgICB0bV9maWxlPW1pcHMvZGVjLWJzZC5oCisgICAgICAgICAgICAgIGZpeGluY2x1ZGVzPQorCSAgICAgIGlmIFsgeCRnYXMgPSB4eWVzIF0KKwkgICAgICB0aGVuCisJCSAgIAl0bWFrZV9maWxlPW1pcHMvdC1taXBzLWdhcworCSAgICAgIGVsc2UKKwkJCXRtYWtlX2ZpbGU9bWlwcy90LXVsdHJpeAorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJICAgICAgZmkKKwkgICAgICBpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCSAgICAgIHRoZW4KKwkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkgICAgICBmaQorCSAgICAgIDs7CisJbWlwcy1kZWMtbmV0YnNkKikgICAgICAgICAgICAgICAgICAjIERlY3N0YXRpb24gcnVubmluZyBOZXRCU0QKKwkJdG1fZmlsZT1taXBzL25ldGJzZC5oCisJCXhtX2ZpbGU9bWlwcy94bS1uZXRic2QuaAorCQkjIE9uIE5ldEJTRCwgdGhlIGhlYWRlcnMgYXJlIGFscmVhZHkgb2theS4KKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJdG1ha2VfZmlsZT10LW5ldGJzZAorCQlpZiBbIHgkcHJlZml4ID0geE5PTkUgXTsgdGhlbgorCQkJcHJlZml4PSRuYXRpdmVfcHJlZml4CisJCWZpCisJCXByZWZpeD0kbmF0aXZlX3ByZWZpeAorCQk7OworCW1pcHMtc29ueS1ic2QqIHwgbWlwcy1zb255LW5ld3NvcyopCSMgU29ueSBORVdTIDM2MDAgb3IgcmlzYy9uZXdzLgorCQl0bV9maWxlPW1pcHMvbmV3czQuaAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3QtbWlwcy1nYXMKKwkJZWxzZQorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJCWZpCisJCWlmIFsgeCRnbnVfbGQgIT0geHllcyBdCisJCXRoZW4KKwkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZmkKKwkJeG1ha2VfZmlsZT1taXBzL3gtc29ueQorCQk7OworCW1pcHMtc29ueS1zeXN2KikJCSMgU29ueSBORVdTIDM4MDAgd2l0aCBORVdTT1M1LjAuCisJCQkJCSMgVGhhdCBpcyBiYXNlZCBvbiBzdnI0LgorCQkjIHQtc3ZyNCBpcyBub3QgcmlnaHQgYmVjYXVzZSB0aGlzIHN5c3RlbSBkb2Vzbid0IHVzZSBFTEYuCisJCXRtX2ZpbGU9bWlwcy9uZXdzNS5oCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXTsgdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJeG1fZmlsZT1taXBzL3htLW5ld3MuaAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtYWtlX2ZpbGU9bWlwcy90LW1pcHMtZ2FzCisJCWVsc2UKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisJCTs7CisJbWlwcy10YW5kZW0tc3lzdjQqKQkJIyBUYW5kZW0gUzIgcnVubmluZyBOb25TdG9wIFVYCisJCXRtX2ZpbGU9bWlwcy9zdnI0LXQuaAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCXhtX2ZpbGU9bWlwcy94bS1zeXN2NC5oCisJCXhtYWtlX2ZpbGU9bWlwcy94LXN5c3YKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPW1pcHMvdC1taXBzLWdhcworCQkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWVsc2UKKwkJCXRtYWtlX2ZpbGU9bWlwcy90LW1pcHMKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQk7OworCW1pcHMtKi11bHRyaXgqIHwgbWlwcy1kZWMtbWFjaDMpCSMgRGVjc3RhdGlvbi4KKwkJdG1fZmlsZT1taXBzL3VsdHJpeC5oCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXTsgdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJeG1ha2VfZmlsZT1taXBzL3gtdWx0cml4CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3QtbWlwcy1nYXMKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT1taXBzL3QtdWx0cml4CisJCQlleHRyYV9wYXNzZXM9Im1pcHMtdGZpbGUgbWlwcy10ZHVtcCIKKwkJZmkKKwkJaWYgWyB4JGdudV9sZCAhPSB4eWVzIF0KKwkJdGhlbgorCQkJdXNlX2NvbGxlY3QyPXllcworCQlmaQorCSAgICAgICAgOzsKKwltaXBzLSotcmlzY29zWzU2Nzg5XWJzZCopCisJCXRtX2ZpbGU9bWlwcy9ic2QtNS5oCSMgTUlQUyBCU0QgNC4zLCBSSVNDLU9TIDUuMAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3QtYnNkLWdhcworCQllbHNlCisJCQl0bWFrZV9maWxlPW1pcHMvdC1ic2QKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCSAgICAgICAgOzsKKwltaXBzLSotYnNkKiB8IG1pcHMtKi1yaXNjb3Nic2QqIHwgbWlwcy0qLXJpc2Nvc1sxMjM0XWJzZCopCisJCXRtX2ZpbGU9bWlwcy9ic2QtNC5oCSMgTUlQUyBCU0QgNC4zLCBSSVNDLU9TIDQuMAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3QtYnNkLWdhcworCQllbHNlCisJCQl0bWFrZV9maWxlPW1pcHMvdC1ic2QKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCSAgICAgICAgOzsKKwltaXBzLSotcmlzY29zWzU2Nzg5XXN5c3Y0KikKKwkJdG1fZmlsZT1taXBzL3N2cjQtNS5oCSMgTUlQUyBTeXN0ZW0gVi40LiwgUklTQy1PUyA1LjAKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdOyB0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQl4bV9maWxlPW1pcHMveG0tc3lzdjQuaAorCQl4bWFrZV9maWxlPW1pcHMveC1zeXN2CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3Qtc3ZyNC1nYXMKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT1taXBzL3Qtc3ZyNAorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJCWZpCisJCWlmIFsgeCRnbnVfbGQgIT0geHllcyBdCisJCXRoZW4KKwkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZmkKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCTs7CisJbWlwcy0qLXN5c3Y0KiB8IG1pcHMtKi1yaXNjb3NbMTIzNF1zeXN2NCogfCBtaXBzLSotcmlzY29zc3lzdjQqKQorCQl0bV9maWxlPW1pcHMvc3ZyNC00LmgJIyBNSVBTIFN5c3RlbSBWLjQuIFJJU0MtT1MgNC4wCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXTsgdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJeG1fZmlsZT1taXBzL3htLXN5c3YuaAorCQl4bWFrZV9maWxlPW1pcHMveC1zeXN2CisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1taXBzL3Qtc3ZyNC1nYXMKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT1taXBzL3Qtc3ZyNAorCQkJZXh0cmFfcGFzc2VzPSJtaXBzLXRmaWxlIG1pcHMtdGR1bXAiCisJCWZpCisJCWlmIFsgeCRnbnVfbGQgIT0geHllcyBdCisJCXRoZW4KKwkJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJZmkKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCTs7CisJbWlwcy0qLXJpc2Nvc1s1Njc4OV1zeXN2KikKKwkJdG1fZmlsZT1taXBzL3N2cjMtNS5oCSMgTUlQUyBTeXN0ZW0gVi4zLCBSSVNDLU9TIDUuMAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCXhtX2ZpbGU9bWlwcy94bS1zeXN2LmgKKwkJeG1ha2VfZmlsZT1taXBzL3gtc3lzdgorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtYWtlX2ZpbGU9bWlwcy90LXN2cjMtZ2FzCisJCWVsc2UKKwkJCXRtYWtlX2ZpbGU9bWlwcy90LXN2cjMKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQk7OworCW1pcHMtKi1zeXN2KiB8IG1pcHMtKi1yaXNjb3Mqc3lzdiopCisJCXRtX2ZpbGU9bWlwcy9zdnIzLTQuaAkjIE1JUFMgU3lzdGVtIFYuMywgUklTQy1PUyA0LjAKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdOyB0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQl4bV9maWxlPW1pcHMveG0tc3lzdi5oCisJCXhtYWtlX2ZpbGU9bWlwcy94LXN5c3YKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPW1pcHMvdC1zdnIzLWdhcworCQllbHNlCisJCQl0bWFrZV9maWxlPW1pcHMvdC1zdnIzCisJCQlleHRyYV9wYXNzZXM9Im1pcHMtdGZpbGUgbWlwcy10ZHVtcCIKKwkJZmkKKwkJaWYgWyB4JGdudV9sZCAhPSB4eWVzIF0KKwkJdGhlbgorCQkJdXNlX2NvbGxlY3QyPXllcworCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJOzsKKwltaXBzLSotcmlzY29zWzU2Nzg5XSopCQkjIERlZmF1bHQgTUlQUyBSSVNDLU9TIDUuMC4KKwkJdG1fZmlsZT1taXBzL21pcHMtNS5oCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXTsgdGhlbgorCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnguaCIKKwkJZmkKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPW1pcHMvdC1taXBzLWdhcworCQllbHNlCisJCQlleHRyYV9wYXNzZXM9Im1pcHMtdGZpbGUgbWlwcy10ZHVtcCIKKwkJZmkKKwkJaWYgWyB4JGdudV9sZCAhPSB4eWVzIF0KKwkJdGhlbgorCQkJdXNlX2NvbGxlY3QyPXllcworCQlmaQorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJOzsKKwltaXBzLSotZ251KikKKwkJOzsKKwltaXBzZWwtKi1lY29mZiopCisJCXRtX2ZpbGU9bWlwcy9lY29mZmwuaAorCQlpZiBbIHgkc3RhYnMgPSB4eWVzIF07IHRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCXRtYWtlX2ZpbGU9bWlwcy90LWVjb2ZmCisJCTs7CisJbWlwcy0qLWVjb2ZmKikKKwkJdG1fZmlsZT1taXBzL2Vjb2ZmLmgKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdOyB0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQl0bWFrZV9maWxlPW1pcHMvdC1lY29mZgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJOzsKKwltaXBzZWwtKi1lbGYqKQorCQl0bV9maWxlPSJtaXBzL2VsZmwuaCBsaWJnbG9zcy5oIgorCQl0bWFrZV9maWxlPW1pcHMvdC1lY29mZgorCQk7OworCW1pcHMtKi1lbGYqKQorCQl0bV9maWxlPSJtaXBzL2VsZi5oIGxpYmdsb3NzLmgiCisJCXRtYWtlX2ZpbGU9bWlwcy90LWVjb2ZmCisJCTs7CisJbWlwczY0ZWwtKi1lbGYqKQorCQl0bV9maWxlPSJtaXBzL2VsZmw2NC5oIGxpYmdsb3NzLmgiCisJCXRtYWtlX2ZpbGU9bWlwcy90LWVjb2ZmCisJCTs7CisJbWlwczY0b3Jpb25lbC0qLWVsZiopCisJCXRtX2ZpbGU9Im1pcHMvZWxmbG9yaW9uLmggbGliZ2xvc3MuaCIKKwkJdG1ha2VfZmlsZT1taXBzL3QtZWNvZmYKKwkJOzsKKwltaXBzNjQtKi1lbGYqKQorCQl0bV9maWxlPSJtaXBzL2VsZjY0LmggbGliZ2xvc3MuaCIKKwkJdG1ha2VfZmlsZT1taXBzL3QtZWNvZmYKKwkJOzsKKwltaXBzNjRvcmlvbi0qLWVsZiopCisJCXRtX2ZpbGU9Im1pcHMvZWxmb3Jpb24uaCBsaWJnbG9zcy5oIgorCQl0bWFrZV9maWxlPW1pcHMvdC1lY29mZgorCQk7OworCW1pcHM2NG9yaW9uLSotcnRlbXMqKQorCQl0bV9maWxlPW1pcHMvcnRlbXM2NC5oCisJCXRtYWtlX2ZpbGU9Im1pcHMvdC1lY29mZiB0LXJ0ZW1zIgorCQk7OworCW1pcHMtKi0qKQkJCQkjIERlZmF1bHQgTUlQUyBSSVNDLU9TIDQuMC4KKwkJaWYgWyB4JHN0YWJzID0geHllcyBdOyB0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtYWtlX2ZpbGU9bWlwcy90LW1pcHMtZ2FzCisJCWVsc2UKKwkJCWV4dHJhX3Bhc3Nlcz0ibWlwcy10ZmlsZSBtaXBzLXRkdW1wIgorCQlmaQorCQlpZiBbIHgkZ251X2xkICE9IHh5ZXMgXQorCQl0aGVuCisJCQl1c2VfY29sbGVjdDI9eWVzCisJCWZpCisJCTs7CisJbW4xMDIwMC0qLSopCisJCWNwdV90eXBlPW1uMTAyMDAKKwkJdG1fZmlsZT0ibW4xMDIwMC9tbjEwMjAwLmgiCisJCWlmIFsgeCRzdGFicyA9IHh5ZXMgXQorCQl0aGVuCisJCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieC5oIgorCQlmaQorCQl1c2VfY29sbGVjdDI9bm8KKwkJOzsKKwltbjEwMzAwLSotKikKKwkJY3B1X3R5cGU9bW4xMDMwMAorCQl0bV9maWxlPSJtbjEwMzAwL21uMTAzMDAuaCIKKwkJaWYgWyB4JHN0YWJzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4LmgiCisJCWZpCisJCXVzZV9jb2xsZWN0Mj1ubworCQk7OworCW5zMzJrLWVuY29yZS1ic2QqKQorCQl0bV9maWxlPW5zMzJrL2VuY29yZS5oCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwluczMyay1zZXF1ZW50LWJzZCopCisJCXRtX2ZpbGU9bnMzMmsvc2VxdWVudC5oCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwluczMyay10ZWs2MTAwLWJzZCopCisJCXRtX2ZpbGU9bnMzMmsvdGVrNjEwMC5oCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJbnMzMmstdGVrNjIwMC1ic2QqKQorCQl0bV9maWxlPW5zMzJrL3RlazYyMDAuaAorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworIyBUaGlzIGhhcyBub3QgYmVlbiB1cGRhdGVkIHRvIEdDQyAyLgorIwluczMyay1ucy1nZW5peCopCisjCQl4bV9maWxlPW5zMzJrL3htLWdlbml4LmgKKyMJCXhtYWtlX2ZpbGU9bnMzMmsveC1nZW5peAorIwkJdG1fZmlsZT1uczMyay9nZW5peC5oCisjCQlicm9rZW5faW5zdGFsbD15ZXMKKyMJCXVzZV9jb2xsZWN0Mj15ZXMKKyMJCTs7CisJbnMzMmstbWVybGluLSopCisJCXRtX2ZpbGU9bnMzMmsvbWVybGluLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCW5zMzJrLXBjNTMyLW1hY2gqKQorCQl0bV9maWxlPW5zMzJrL3BjNTMyLW1hY2guaAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJbnMzMmstcGM1MzItbWluaXgqKQorCQl0bV9maWxlPW5zMzJrL3BjNTMyLW1pbi5oCisJCXhtX2ZpbGU9bnMzMmsveG0tcGM1MzItbWluLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCW5zMzJrLXBjNTMyLW5ldGJzZCopCisJCXRtX2ZpbGU9bnMzMmsvbmV0YnNkLmgKKwkJeG1fZmlsZT1uczMyay94bS1uZXRic2QuaAorCQkjIE9uIE5ldEJTRCwgdGhlIGhlYWRlcnMgYXJlIGFscmVhZHkgb2theS4KKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJdG1ha2VfZmlsZT10LW5ldGJzZAorCQk7OworICAgICAgICBwZHAxMS0qLWJzZCkKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBwZHAxMS8yYnNkLmgiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgcGRwMTEtKi0qKQorCQk7OworCXB5cmFtaWQtKi0qKQorCQljcHVfdHlwZT1weXIKKwkJeG1ha2VfZmlsZT1weXIveC1weXIKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCXJvbXAtKi1hb3MqKQorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJcm9tcC0qLW1hY2gqKQorCQl4bWFrZV9maWxlPXJvbXAveC1tYWNoCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlwb3dlcnBjLSotc3lzdiogfCBwb3dlcnBjLSotZWxmKikKKwkJdG1fZmlsZT1yczYwMDAvc3lzdjQuaAorCQl4bV9maWxlPXJzNjAwMC94bS1zeXN2NC5oCisJCWV4dHJhX2hlYWRlcnM9cHBjLWFzbS5oCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjb3MgcnM2MDAwL3QtcHBjY29tbSIKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjIHJzNjAwMC90LXBwY2NvbW0iCisJCWZpCisJCXhtYWtlX2ZpbGU9cnM2MDAwL3gtc3lzdjQKKwkJOzsKKwlwb3dlcnBjLSotZWFiaWFpeCopCisJCXRtX2ZpbGU9cnM2MDAwL2VhYmlhaXguaAorCQl0bWFrZV9maWxlPSJyczYwMDAvdC1wcGNnYXMgcnM2MDAwL3QtcHBjY29tbSIKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJZXh0cmFfaGVhZGVycz1wcGMtYXNtLmgKKwkJOzsKKwlwb3dlcnBjLSotZWFiaXNpbSopCisJCXRtX2ZpbGU9cnM2MDAwL2VhYmlzaW0uaAorCQl0bWFrZV9maWxlPSJyczYwMDAvdC1wcGNnYXMgcnM2MDAwL3QtcHBjY29tbSIKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJZXh0cmFfaGVhZGVycz1wcGMtYXNtLmgKKwkJOzsKKwlwb3dlcnBjLSotZWFiaSopCisJCXRtX2ZpbGU9cnM2MDAwL2VhYmkuaAorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtYWtlX2ZpbGU9InJzNjAwMC90LXBwY2dhcyByczYwMDAvdC1wcGNjb21tIgorCQllbHNlCisJCQl0bWFrZV9maWxlPSJyczYwMDAvdC1wcGMgcnM2MDAwL3QtcHBjY29tbSIKKwkJZmkKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJZXh0cmFfaGVhZGVycz1wcGMtYXNtLmgKKwkJOzsKKwlwb3dlcnBjLSotcnRlbXMqKQorCQl0bV9maWxlPXJzNjAwMC9ydGVtcy5oCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkgICAgIHRtYWtlX2ZpbGU9InJzNjAwMC90LXBwY2dhcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisJCWVsc2UKKwkJICAgICB0bWFrZV9maWxlPSJyczYwMDAvdC1wcGMgdC1ydGVtcyByczYwMDAvdC1wcGNjb21tIgorCQlmaQorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQlleHRyYV9oZWFkZXJzPXBwYy1hc20uaAorCQk7OworCXBvd2VycGMtKi1saW51eC1nbnUqKQorCQl0bV9maWxlPXJzNjAwMC9saW51eC5oCisJCXhtX2ZpbGU9cnM2MDAwL3htLXN5c3Y0LmgKKwkJb3V0X2ZpbGU9cnM2MDAwL3JzNjAwMC5jCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjb3MgdC1saW51eCByczYwMDAvdC1wcGNjb21tIgorCQllbHNlCisJCQl0bWFrZV9maWxlPSJyczYwMDAvdC1wcGMgdC1saW51eCByczYwMDAvdC1wcGNjb21tIgorCQlmaQorCQl4bWFrZV9maWxlPXgtbGludXgKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0YmVnaW5TLm8gY3J0ZW5kLm8gY3J0ZW5kUy5vIgorCQlleHRyYV9oZWFkZXJzPXBwYy1hc20uaAorCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSdwb3NpeCcKKwkJZmkKKwkJOzsKKyAgICAgICAgcG93ZXJwYy0qLXZ4d29ya3MqKQorICAgICAgICAgICAgICAgIGNwdV90eXBlPXJzNjAwMAorICAgICAgICAgICAgICAgIHhtX2ZpbGU9cnM2MDAwL3htLXN5c3Y0LmgKKyAgICAgICAgICAgICAgICB0bV9maWxlPXJzNjAwMC92eHBwYy5oCisgICAgICAgICAgICAgICAgdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjZ2FzIHJzNjAwMC90LXBwY2NvbW0iCisJCWV4dHJhX2hlYWRlcnM9cHBjLWFzbS5oCisgICAgICAgICAgICAgICAgOzsKKwlwb3dlcnBjbGUtKi1zeXN2KiB8IHBvd2VycGNsZS0qLWVsZiopCisJCXRtX2ZpbGU9cnM2MDAwL3N5c3Y0bGUuaAorCQl4bV9maWxlPXJzNjAwMC94bS1zeXN2NC5oCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjb3MgcnM2MDAwL3QtcHBjY29tbSIKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjIHJzNjAwMC90LXBwY2NvbW0iCisJCWZpCisJCXhtYWtlX2ZpbGU9cnM2MDAwL3gtc3lzdjQKKwkJZXh0cmFfaGVhZGVycz1wcGMtYXNtLmgKKwkJOzsKKwlwb3dlcnBjbGUtKi1lYWJpc2ltKikKKwkJdG1fZmlsZT1yczYwMDAvZWFiaWxlc2ltLmgKKwkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjZ2FzIHJzNjAwMC90LXBwY2NvbW0iCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCWV4dHJhX2hlYWRlcnM9cHBjLWFzbS5oCisJCTs7CisJcG93ZXJwY2xlLSotZWFiaSopCisJCXRtX2ZpbGU9cnM2MDAwL2VhYmlsZS5oCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjZ2FzIHJzNjAwMC90LXBwY2NvbW0iCisJCWVsc2UKKwkJCXRtYWtlX2ZpbGU9InJzNjAwMC90LXBwYyByczYwMDAvdC1wcGNjb21tIgorCQlmaQorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQlleHRyYV9oZWFkZXJzPXBwYy1hc20uaAorCQk7OworICAgICAgICBwb3dlcnBjbGUtKi13aW5udCogKQorICAgICAgICAgICAgICAgIHRtX2ZpbGU9cnM2MDAwL3dpbi1udC5oCisgICAgICAgICAgICAgICAgdG1ha2VfZmlsZT1yczYwMDAvdC13aW5udAorIyAgICAgICAgICAgICAgIGV4dHJhX29ianM9cGUubworCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0nd2luMzInCisJCWZpCisJCWV4dHJhX2hlYWRlcnM9cHBjLWFzbS5oCisJCTs7CisJcG93ZXJwY2xlLSotcGUgfCBwb3dlcnBjbGUtKi1jeWd3aW4zMikKKwkJdG1fZmlsZT1yczYwMDAvY3lnd2luMzIuaAorCQl4bV9maWxlPXJzNjAwMC94bS1jeWd3aW4zMi5oCisJCXRtYWtlX2ZpbGU9cnM2MDAwL3Qtd2lubnQKKwkJeG1ha2VfZmlsZT1yczYwMDAveC1jeWd3aW4zMgorIwkJZXh0cmFfb2Jqcz1wZS5vCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisgCQlpZiBbIHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIF07IHRoZW4KKwkJCXRocmVhZF9maWxlPSd3aW4zMicKKwkJZmkKKwkJZXhlZXh0PS5leGUKKwkJZXh0cmFfaGVhZGVycz1wcGMtYXNtLmgKKwkJOzsKKwlwb3dlcnBjbGUtKi1zb2xhcmlzMiopCisJCXRtX2ZpbGU9cnM2MDAwL3NvbDIuaAorCQl4bV9maWxlPXJzNjAwMC94bS1zeXN2NC5oCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjb3MgcnM2MDAwL3QtcHBjY29tbSIKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT0icnM2MDAwL3QtcHBjIHJzNjAwMC90LXBwY2NvbW0iCisJCWZpCisJCXhtYWtlX2ZpbGU9cnM2MDAwL3gtc3lzdjQKKwkJZml4aW5jbHVkZXM9Zml4aW5jLnN2cjQKKwkJZXh0cmFfaGVhZGVycz1wcGMtYXNtLmgKKwkJOzsKKwlyczYwMDAtaWJtLWFpeDMuWzAxXSopCisJCXRtX2ZpbGU9cnM2MDAwL2FpeDMxLmgKKwkJeG1ha2VfZmlsZT1yczYwMDAveC1haXgzMQorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJcnM2MDAwLWlibS1haXgzLjIuWzQ1Njc4OV0qIHwgcG93ZXJwYy1pYm0tYWl4My4yLls0NTY3ODldKikKKwkJdG1fZmlsZT1yczYwMDAvYWl4M25ld2FzLmgKKwkJaWYgWyB4JGhvc3QgIT0geCR0YXJnZXQgXQorCQl0aGVuCisJCQl0bWFrZV9maWxlPXJzNjAwMC90LXhuZXdhcworCQllbHNlCisJCQl0bWFrZV9maWxlPXJzNjAwMC90LW5ld2FzCisJCWZpCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlyczYwMDAtaWJtLWFpeFs0NTY3ODldLiogfCBwb3dlcnBjLWlibS1haXhbNDU2Nzg5XS4qKQorCQl0bV9maWxlPXJzNjAwMC9haXg0MS5oCisJCWlmIFsgeCRob3N0ICE9IHgkdGFyZ2V0IF0KKwkJdGhlbgorCQkJdG1ha2VfZmlsZT1yczYwMDAvdC14bmV3YXMKKwkJZWxzZQorCQkJdG1ha2VfZmlsZT1yczYwMDAvdC1uZXdhcworCQlmaQorCQl4bWFrZV9maWxlPXJzNjAwMC94LWFpeDMxCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlyczYwMDAtaWJtLWFpeCopCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlyczYwMDAtYnVsbC1ib3N4KQorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJcnM2MDAwLSotbWFjaCopCisJCXRtX2ZpbGU9cnM2MDAwL21hY2guaAorCQl4bV9maWxlPXJzNjAwMC94bS1tYWNoLmgKKwkJeG1ha2VfZmlsZT1yczYwMDAveC1tYWNoCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlyczYwMDAtKi1seW54b3MqKQorCQl0bV9maWxlPXJzNjAwMC9seW54LmgKKwkJeG1fZmlsZT1yczYwMDAveG0tbHlueC5oCisJCXRtYWtlX2ZpbGU9cnM2MDAwL3QtcnM2MDAwCisJCXhtYWtlX2ZpbGU9cnM2MDAwL3gtbHlueAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJc2gtKi1lbGYqKQorCQl0bV9maWxlPXNoL2VsZi5oCisJCWZsb2F0X2Zvcm1hdD1zaAorCQk7OworCXNoLSotKikKKwkJZmxvYXRfZm9ybWF0PXNoCisJCTs7CisJc3BhcmMtdHRpLSopCisJCXRtX2ZpbGU9c3BhcmMvcGJkLmgKKwkJeG1fZmlsZT1zcGFyYy94bS1wYmQuaAorCQk7OworCXNwYXJjLXdycy12eHdvcmtzKiB8IHNwYXJjbGl0ZS13cnMtdnh3b3JrcyopCisJCXRtX2ZpbGU9c3BhcmMvdnhzcGFyYy5oCisJCXRtYWtlX2ZpbGU9c3BhcmMvdC12eHNwYXJjCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlzcGFyYy0qLWFvdXQqKQorCQl0bWFrZV9maWxlPXNwYXJjL3Qtc3BhcmNiYXJlCisJCXRtX2ZpbGU9InNwYXJjL2FvdXQuaCBsaWJnbG9zcy5oIgorCQk7OworCXNwYXJjLSotbmV0YnNkKikKKwkJdG1fZmlsZT1zcGFyYy9uZXRic2QuaAorCQl4bV9maWxlPXNwYXJjL3htLW5ldGJzZC5oCisJCSMgT24gTmV0QlNELCB0aGUgaGVhZGVycyBhcmUgYWxyZWFkeSBva2F5LgorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbgorCQl0bWFrZV9maWxlPXQtbmV0YnNkCisJCTs7CisJc3BhcmMtKi1ic2QqKQorCQl0bV9maWxlPXNwYXJjL2JzZC5oCisJCTs7CisJc3BhcmMtKi1saW51eC1nbnVhb3V0KikJCSMgU3BhcmMncyBydW5uaW5nIExpbnV4LCBhLm91dAorCQl4bV9maWxlPXNwYXJjL3htLWxpbnV4LmgKKwkJdG1fZmlsZT1zcGFyYy9saW51eC1hb3V0LmgKKwkJeG1ha2VfZmlsZT14LWxpbnV4CisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluICNPbiBMaW51eCwgdGhlIGhlYWRlcnMgYXJlIG9rIGFscmVhZHkuCisJCWJyb2tlbl9pbnN0YWxsPXllcworCQlnbnVfbGQ9eWVzCisJCTs7CisJc3BhcmMtKi1saW51eC1nbnVsaWJjMSopCQkgIyBTcGFyYydzIHJ1bm5pbmcgTGludXgKKwkJeG1fZmlsZT1zcGFyYy94bS1saW51eC5oICMgd2l0aCBFTEYgZm9ybWF0IHVzaW5nIHRoZQorCQl4bWFrZV9maWxlPXgtbGludXgJICMgTGludXggQyBsaWJyYXJ5IDUuCisJCXRtX2ZpbGU9c3BhcmMvbGludXguaAorCQl0bWFrZV9maWxlPSJ0LWxpbnV4IHQtbGludXgtZ251bGliYzEgc3BhcmMvdC1saW51eCIKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0YmVnaW5TLm8gY3J0ZW5kLm8gY3J0ZW5kUy5vIgorCQlmaXhpbmNsdWRlcz1NYWtlZmlsZS5pbiAjT24gTGludXgsIHRoZSBoZWFkZXJzIGFyZSBvayBhbHJlYWR5LgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJZ251X2xkPXllcworCQk7OworCXNwYXJjLSotbGludXgtZ251KikJCQkgIyBTcGFyYydzIHJ1bm5pbmcgTGludXgKKwkJeG1fZmlsZT1zcGFyYy94bS1saW51eC5oICMgd2l0aCBFTEYgZm9ybWF0IHVzaW5nIGdsaWJjIDIKKwkJeG1ha2VfZmlsZT14LWxpbnV4CSAjIGFrYSB0aGUgTGludXggQyBsaWJyYXJ5IDYuCisJCXRtX2ZpbGU9c3BhcmMvbGludXguaAorCQl0bWFrZV9maWxlPSJ0LWxpbnV4IHNwYXJjL3QtbGludXgiCisJCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGJlZ2luUy5vIGNydGVuZC5vIGNydGVuZFMubyIKKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4gI09uIExpbnV4LCB0aGUgaGVhZGVycyBhcmUgb2sgYWxyZWFkeS4KKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWdudV9sZD15ZXMKKyAJCWlmIFsgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgXTsgdGhlbgorIAkJCXRocmVhZF9maWxlPSdwb3NpeCcKKyAJCWZpCisJCTs7CisJc3BhcmMtKi1seW54b3MqKQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCXRtX2ZpbGU9c3BhcmMvbHlueC5oCisJCWVsc2UKKwkJCXRtX2ZpbGU9c3BhcmMvbHlueC1uZy5oCisJCWZpCisJCXhtX2ZpbGU9c3BhcmMveG0tbHlueC5oCisJCXRtYWtlX2ZpbGU9c3BhcmMvdC1zdW5vczQxCisJCXhtYWtlX2ZpbGU9eC1seW54CisJCTs7CisJc3BhcmMtKi1ydGVtcyopCisJCXRtYWtlX2ZpbGU9InNwYXJjL3Qtc3BhcmNiYXJlIHQtcnRlbXMiCisJCXRtX2ZpbGU9c3BhcmMvcnRlbXMuaAorCQk7OworCXNwYXJjLSotc29sYXJpczIqKQorCQl0bV9maWxlPXNwYXJjL3NvbDIuaAorCQl4bV9maWxlPXNwYXJjL3htLXNvbDIuaAorCQl0bWFrZV9maWxlPXNwYXJjL3Qtc29sMgorCQl4bWFrZV9maWxlPXNwYXJjL3gtc3lzdjQKKwkJZXh0cmFfcGFydHM9ImNydDEubyBjcnRpLm8gY3J0bi5vIGdjcnQxLm8gZ21vbi5vIGNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCWZpeGluY2x1ZGVzPWZpeGluYy5zdnI0CisJCWJyb2tlbl9pbnN0YWxsPXllcworIAkJaWYgWyB4JGVuYWJsZV90aHJlYWRzID0geHllcyBdOyB0aGVuCisJCQl0aHJlYWRfZmlsZT0nc29sYXJpcycKKwkJZmkKKwkJOzsKKwlzcGFyYy0qLXN1bm9zNC4wKikKKwkJdG1fZmlsZT1zcGFyYy9zdW5vczQuaAorCQl0bWFrZV9maWxlPXNwYXJjL3Qtc3Vub3M0MAorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJc3BhcmMtKi1zdW5vczQqKQorCQl0bV9maWxlPXNwYXJjL3N1bm9zNC5oCisJCXRtYWtlX2ZpbGU9c3BhcmMvdC1zdW5vczQxCisJCXVzZV9jb2xsZWN0Mj15ZXMKKwkJOzsKKwlzcGFyYy0qLXN1bm9zMyopCisJCXRtX2ZpbGU9c3BhcmMvc3VuNG8zLmgKKwkJdXNlX2NvbGxlY3QyPXllcworCQk7OworCXNwYXJjLSotc3lzdjQqKQorCQl0bV9maWxlPXNwYXJjL3N5c3Y0LmgKKwkJeG1fZmlsZT1zcGFyYy94bS1zeXN2NC5oCisJCXRtYWtlX2ZpbGU9dC1zdnI0CisJCXhtYWtlX2ZpbGU9c3BhcmMveC1zeXN2NAorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyIKKwkJOzsKKwlzcGFyYy0qLXZ4c2ltKikKKwkJeG1fZmlsZT1zcGFyYy94bS1zb2wyLmgKKwkJdG1fZmlsZT1zcGFyYy92eHNpbS5oCisJCXRtYWtlX2ZpbGU9c3BhcmMvdC12eHNwYXJjCisJCXhtYWtlX2ZpbGU9c3BhcmMveC1zeXN2NAorCQk7OworCXNwYXJjbGV0LSotYW91dCopCisJCXRtX2ZpbGU9InNwYXJjL3NwbGV0LmggbGliZ2xvc3MuaCIKKwkJdG1ha2VfZmlsZT1zcGFyYy90LXNwbGV0CisJCTs7CisJc3BhcmNsaXRlLSotY29mZiopCisJCXRtX2ZpbGU9InNwYXJjL2xpdGVjb2ZmLmggbGliZ2xvc3MuaCIKKwkJdG1ha2VfZmlsZT1zcGFyYy90LXNwYXJjbGl0ZQorCQk7OworCXNwYXJjbGl0ZS0qLWFvdXQqKQorCQl0bV9maWxlPSJzcGFyYy9saXRlLmggYW91dG9zLmggbGliZ2xvc3MuaCIKKwkJdG1ha2VfZmlsZT1zcGFyYy90LXNwYXJjbGl0ZQorCQk7OworCXNwYXJjNjQtKi1hb3V0KikKKwkJdG1ha2VfZmlsZT1zcGFyYy90LXNwNjQKKwkJdG1fZmlsZT1zcGFyYy9zcDY0LWFvdXQuaAorCQk7OworCXNwYXJjNjQtKi1lbGYqKQorCQl0bWFrZV9maWxlPXNwYXJjL3Qtc3A2NAorCQl0bV9maWxlPXNwYXJjL3NwNjQtZWxmLmgKKwkJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8iCisJCTs7CisjIFRoaXMgaGFzbid0IGJlZW4gdXBncmFkZWQgdG8gR0NDIDIuCisjCXRhaG9lLWhhcnJpcy0qKQkJCSMgSGFycmlzIHRhaG9lLCB1c2luZyBDT0ZGLgorIwkJdG1fZmlsZT10YWhvZS9oYXJyaXMuaAorIwkJOzsKKyMJdGFob2UtKi1ic2QqKQkJCSMgdGFob2UgcnVubmluZyBCU0QKKyMJCTs7CisjIFRoaXMgaGFzbid0IGJlZW4gdXBncmFkZWQgdG8gR0NDIDIuCisjCXRyb24tKi0qKQorIwkJY3B1X3R5cGU9Z21pY3JvCisjCQl1c2VfY29sbGVjdDI9eWVzCisjCQk7OworCXZheC0qLWJzZCopCQkJIyB2YXhlbiBydW5uaW5nIEJTRAorCQl1c2VfY29sbGVjdDI9eWVzCisJCWZsb2F0X2Zvcm1hdD12YXgKKwkJOzsKKwl2YXgtKi1zeXN2KikJCQkjIHZheGVuIHJ1bm5pbmcgc3lzdGVtIFYKKwkJdG1fZmlsZT0iJHt0bV9maWxlfSB2YXgvdmF4di5oIgorCQl4bV9maWxlPSIke3RtX2ZpbGV9IHZheC94bS12YXh2LmgiCisJCWZsb2F0X2Zvcm1hdD12YXgKKwkJOzsKKwl2YXgtKi1uZXRic2QqKQorCQl0bV9maWxlPSIke3RtX2ZpbGV9IG5ldGJzZC5oIHZheC9uZXRic2QuaCIKKwkJeG1fZmlsZT0iJHt4bV9maWxlfSB4bS1uZXRic2QuaCIKKwkJIyBPbiBOZXRCU0QsIHRoZSBoZWFkZXJzIGFyZSBhbHJlYWR5IG9rYXkuCisJCWZpeGluY2x1ZGVzPU1ha2VmaWxlLmluCisJCXRtYWtlX2ZpbGU9dC1uZXRic2QKKwkJZmxvYXRfZm9ybWF0PXZheAorCQk7OworCXZheC0qLXVsdHJpeCopCQkJIyB2YXhlbiBydW5uaW5nIHVsdHJpeAorCQl0bV9maWxlPSIke3RtX2ZpbGV9IHZheC91bHRyaXguaCIKKwkJdXNlX2NvbGxlY3QyPXllcworCQlmbG9hdF9mb3JtYXQ9dmF4CisJCTs7CisJdmF4LSotdm1zKikJCQkjIHZheGVuIHJ1bm5pbmcgVk1TCisJCXhtX2ZpbGU9dmF4L3htLXZtcy5oCisJCXRtX2ZpbGU9dmF4L3Ztcy5oCisJCWZsb2F0X2Zvcm1hdD12YXgKKwkJOzsKKwl2YXgtKi0qKQkJCSMgdmF4IGRlZmF1bHQgZW50cnkKKwkJZmxvYXRfZm9ybWF0PXZheAorCQk7OworCXdlMzJrLWF0dC1zeXN2KikKKwkJeG1fZmlsZT0iJHt4bV9maWxlfSB4bS1zdnIzIgorCQl1c2VfY29sbGVjdDI9eWVzCisJCTs7CisJKikKKwkJZWNobyAiQ29uZmlndXJhdGlvbiAkbWFjaGluZSBub3Qgc3VwcG9ydGVkIiAxPiYyCisJCWV4aXQgMQorCQk7OworCWVzYWMKKworCWNhc2UgJG1hY2hpbmUgaW4KKwkqLSotbGludXgtZ251KikKKwkgICAgICAgIDs7ICMgRXhpc3RpbmcgTGludXgvR05VIHN5c3RlbXMgZG8gbm90IHVzZSB0aGUgR05VIHNldHVwLgorCSotKi1nbnUqKQorCQkjIE9uIHRoZSBHTlUgc3lzdGVtLCB0aGUgc2V0dXAgaXMganVzdCBhYm91dCB0aGUgc2FtZSBvbgorCQkjIGVhY2ggZGlmZmVyZW50IENQVS4gIFRoZSBzcGVjaWZpYyBtYWNoaW5lcyB0aGF0IEdOVQorCQkjIHN1cHBvcnRzIGFyZSBtYXRjaGVkIGFib3ZlIGFuZCBqdXN0IHNldCAkY3B1X3R5cGUuCisJCXhtX2ZpbGU9JHtjcHVfdHlwZX0veG0tZ251LmgKKwkJdG1fZmlsZT0ke2NwdV90eXBlfS9nbnUuaAorCQlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisJCSMgR05VIGFsd2F5cyB1c2VzIEVMRi4KKwkJZWxmPXllcworCQkjIEdOVSB0b29scyBhcmUgdGhlIG9ubHkgdG9vbHMuCisJCWdudV9sZD15ZXMKKwkJZ2FzPXllcworCQkjIE9uIEdOVSwgdGhlIGhlYWRlcnMgYXJlIGFscmVhZHkgb2theS4KKwkJZml4aW5jbHVkZXM9TWFrZWZpbGUuaW4KKwkJeG1ha2VfZmlsZT14LWxpbnV4CSMgVGhlc2UgZGV0YWlscyBhcmUgdGhlIHNhbWUgYXMgTGludXguCisJCXRtYWtlX2ZpbGU9dC1nbnUJIyBUaGVzZSBhcmUgbm90LgorCQk7OworCSotKi1zeXN2NCopCisJCWZpeGluY2x1ZGVzPWZpeGluYy5zdnI0CisJCXhtYWtlX3RyeV9zeXN2PXgtc3lzdgorCQlicm9rZW5faW5zdGFsbD15ZXMKKwkJaW5zdGFsbF9oZWFkZXJzX2Rpcj1pbnN0YWxsLWhlYWRlcnMtY3BpbworCQk7OworCSotKi1zeXN2KikKKwkJYnJva2VuX2luc3RhbGw9eWVzCisJCWluc3RhbGxfaGVhZGVyc19kaXI9aW5zdGFsbC1oZWFkZXJzLWNwaW8KKwkJOzsKKwllc2FjCisKKwkjIERpc3Rpbmd1aXNoIGlbMzQ1Nl04NgorCSMgQWxzbywgZG8gbm90IHJ1biBtaXBzLXRmaWxlIG9uIE1JUFMgaWYgdXNpbmcgZ2FzLgorCSMgUHJvY2VzcyAtLXdpdGgtY3B1PSBmb3IgUG93ZXJQQy9yczYwMDAKKwl0YXJnZXRfY3B1X2RlZmF1bHQyPQorCWNhc2UgJG1hY2hpbmUgaW4KKwlpNDg2LSotKikKKwkJdGFyZ2V0X2NwdV9kZWZhdWx0Mj0xCisJCTs7CisJaTU4Ni0qLSopCisJCXRhcmdldF9jcHVfZGVmYXVsdDI9MgorCQk7OworCWk2ODYtKi0qKQorCQl0YXJnZXRfY3B1X2RlZmF1bHQyPTMKKwkJOzsKKwlhbHBoYSotKi0qKQorCQljYXNlICRtYWNoaW5lIGluCisJCQlhbHBoYWV2NTYqKQorCQkJCXRhcmdldF9jcHVfZGVmYXVsdDI9Ik1BU0tfQ1BVX0VWNXxNQVNLX0JZVEVfT1BTIgorCQkJCTs7CisJCQlhbHBoYWV2NSopCisJCQkJdGFyZ2V0X2NwdV9kZWZhdWx0Mj0iTUFTS19DUFVfRVY1IgorCQkJCTs7CisJCWVzYWMKKwkJCQkKKwkJaWYgWyB4JGdhcyA9IHh5ZXMgXQorCQl0aGVuCisJCQlpZiBbIHgkdGFyZ2V0X2NwdV9kZWZhdWx0MiA9IHggXQorCQkJdGhlbgorCQkJCXRhcmdldF9jcHVfZGVmYXVsdDI9Ik1BU0tfR0FTIgorCQkJZWxzZQorCQkJCXRhcmdldF9jcHVfZGVmYXVsdDI9IiR7dGFyZ2V0X2NwdV9kZWZhdWx0Mn18TUFTS19HQVMiCisJCQlmaQorCQlmaQorCQk7OworCW1pcHMqLSotZWNvZmYqIHwgbWlwcyotKi1lbGYqKQorCQlpZiBbIHgkZ2FzID0geHllcyBdCisJCXRoZW4KKwkJCWlmIFsgeCRnbnVfbGQgPSB4eWVzIF0KKwkJCXRoZW4KKwkJCQl0YXJnZXRfY3B1X2RlZmF1bHQyPTIwCisJCQllbHNlCisJCQkJdGFyZ2V0X2NwdV9kZWZhdWx0Mj0xNgorCQkJZmkKKwkJZmkKKwkJOzsKKwltaXBzKi0qLSopCisJCWlmIFsgeCRnYXMgPSB4eWVzIF0KKwkJdGhlbgorCQkJdGFyZ2V0X2NwdV9kZWZhdWx0Mj0xNgorCQlmaQorCQk7OworCXBvd2VycGMqLSotKiB8IHJzNjAwMC0qLSopCisJCWNhc2UgIngkd2l0aF9jcHUiIGluCisJCQl4KQorCQkJCTs7CisKKwkJCXhjb21tb24gfCB4cG93ZXIgfCB4cG93ZXIyIHwgeHBvd2VycGMgfCB4cmlvcyBcCisJCQkgIHwgeHJpb3MxIHwgeHJpb3MyIHwgeHJzYyB8IHhyc2MxIFwKKwkJCSAgfCB4NjAxIHwgeDYwMiB8IHg2MDMgfCB4NjAzZSB8IHg2MDQgfCB4NjA0ZSB8IHg2MjAgXAorCQkJICB8IHg0MDMgfCB4NTA1IHwgeDgwMSB8IHg4MjEgfCB4ODIzIHwgeDg2MCkKKwkJCQl0YXJnZXRfY3B1X2RlZmF1bHQyPSInXCIkd2l0aF9jcHVcIiciCisJCQkJOzsKKworCQkJeHllcyB8IHhubykKKwkJCQllY2hvICItLXdpdGgtY3B1IG11c3QgYmUgcGFzc2VkIGEgdmFsdWUiIDE+JjIKKwkJCQlleGl0IDEKKwkJCQk7OworCisJCQkqKQorCQkJCWVjaG8gIlVua25vd24gY3B1IHVzZWQgd2l0aCAtLXdpdGgtY3B1PSR3aXRoX2NwdSIgMT4mMgorCQkJCWV4aXQgMQorCQkJCTs7CisJCWVzYWMKKwkJOzsKKwlzcGFyYyotKi0qKQorCQljYXNlICIuJHdpdGhfY3B1IiBpbgorCQkJLikKKwkJCQl0YXJnZXRfY3B1X2RlZmF1bHQyPVRBUkdFVF9DUFVfImBlY2hvICRtYWNoaW5lIHwgc2VkICdzLy0uKiQvLydgIgorCQkJCTs7CisJCQkuc3VwZXJzcGFyYyB8IC51bHRyYXNwYXJjIHwgLnY3IHwgLnY4KQorCQkJCXRhcmdldF9jcHVfZGVmYXVsdDI9IlRBUkdFVF9DUFVfJHdpdGhfY3B1IgorCQkJCTs7CisJCQkqKQorCQkJCWVjaG8gIlVua25vd24gY3B1IHVzZWQgd2l0aCAtLXdpdGgtY3B1PSR3aXRoX2NwdSIgMT4mMgorCQkJCWV4aXQgMQorCQkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCisKKwlpZiBbIHgkdGFyZ2V0X2NwdV9kZWZhdWx0MiAhPSB4IF0KKwl0aGVuCisJCWlmIFsgeCR0YXJnZXRfY3B1X2RlZmF1bHQgIT0geCBdCisJCXRoZW4KKwkJCXRhcmdldF9jcHVfZGVmYXVsdD0iKCR7dGFyZ2V0X2NwdV9kZWZhdWx0fXwke3RhcmdldF9jcHVfZGVmYXVsdDJ9KSIKKwkJZWxzZQorCQkJdGFyZ2V0X2NwdV9kZWZhdWx0PSR0YXJnZXRfY3B1X2RlZmF1bHQyCisJCWZpCisJZmkKKworCSMgTm8gbmVlZCBmb3IgY29sbGVjdDIgaWYgd2UgaGF2ZSB0aGUgR05VIGxpbmtlci4KKwljYXNlIHgkZ251X2xkIGluCisJeHllcykKKwkJdXNlX2NvbGxlY3QyPQorCQk7OworCWVzYWMKKworIyBTYXZlIGRhdGEgb24gbWFjaGluZSBiZWluZyB1c2VkIHRvIGNvbXBpbGUgR0NDIGluIGJ1aWxkX3htX2ZpbGUuCisjIFNhdmUgZGF0YSBvbiBob3N0IG1hY2hpbmUgaW4gdmFycyBob3N0X3htX2ZpbGUgYW5kIGhvc3RfeG1ha2VfZmlsZS4KKwlpZiBbIHgkcGFzczFkb25lID0geCBdCisJdGhlbgorCQlpZiBbIHgiJHhtX2ZpbGUiID0geCBdCisJCXRoZW4gYnVpbGRfeG1fZmlsZT0kY3B1X3R5cGUveG0tJGNwdV90eXBlLmgKKwkJZWxzZSBidWlsZF94bV9maWxlPSR4bV9maWxlCisJCWZpCisJCWJ1aWxkX2Jyb2tlbl9pbnN0YWxsPSRicm9rZW5faW5zdGFsbAorCQlidWlsZF9pbnN0YWxsX2hlYWRlcnNfZGlyPSRpbnN0YWxsX2hlYWRlcnNfZGlyCisJCWJ1aWxkX2V4ZWV4dD0kZXhlZXh0CisJCXBhc3MxZG9uZT15ZXMKKwllbHNlCisJCWlmIFsgeCRwYXNzMmRvbmUgPSB4IF0KKwkJdGhlbgorCQkJaWYgWyB4IiR4bV9maWxlIiA9IHggXQorCQkJdGhlbiBob3N0X3htX2ZpbGU9JGNwdV90eXBlL3htLSRjcHVfdHlwZS5oCisJCQllbHNlIGhvc3RfeG1fZmlsZT0keG1fZmlsZQorCQkJZmkKKwkJCWlmIFsgeCIkeG1ha2VfZmlsZSIgPSB4IF0KKwkJCXRoZW4geG1ha2VfZmlsZT0kY3B1X3R5cGUveC0kY3B1X3R5cGUKKwkJCWZpCisJCQlob3N0X3htYWtlX2ZpbGU9IiR4bWFrZV9maWxlIgorCQkJaG9zdF90cnVuY2F0ZV90YXJnZXQ9JHRydW5jYXRlX3RhcmdldAorCQkJaG9zdF9leHRyYV9nY2Nfb2Jqcz0kZXh0cmFfZ2NjX29ianMKKwkJCWhvc3RfZXh0cmFfb2Jqcz0kZXh0cmFfaG9zdF9vYmpzCisJCQlwYXNzMmRvbmU9eWVzCisJCWZpCisJZmkKK2RvbmUKKworZXh0cmFfb2Jqcz0iJHtob3N0X2V4dHJhX29ianN9ICR7ZXh0cmFfb2Jqc30iCisKKyMgRGVmYXVsdCB0aGUgdGFyZ2V0LW1hY2hpbmUgdmFyaWFibGVzIHRoYXQgd2VyZSBub3QgZXhwbGljaXRseSBzZXQuCitpZiBbIHgiJHRtX2ZpbGUiID0geCBdCit0aGVuIHRtX2ZpbGU9JGNwdV90eXBlLyRjcHVfdHlwZS5oOyBmaQorCitpZiBbIHgkZXh0cmFfaGVhZGVycyA9IHggXQordGhlbiBleHRyYV9oZWFkZXJzPTsgZmkKKworaWYgWyB4IiR4bV9maWxlIiA9IHggXQordGhlbiB4bV9maWxlPSRjcHVfdHlwZS94bS0kY3B1X3R5cGUuaDsgZmkKKworbWRfZmlsZT0kY3B1X3R5cGUvJGNwdV90eXBlLm1kCisKK2lmIFsgeCRvdXRfZmlsZSA9IHggXQordGhlbiBvdXRfZmlsZT0kY3B1X3R5cGUvJGNwdV90eXBlLmM7IGZpCisKK2lmIFsgeCIkdG1ha2VfZmlsZSIgPSB4IF0KK3RoZW4gdG1ha2VfZmlsZT0kY3B1X3R5cGUvdC0kY3B1X3R5cGUKK2ZpCisKK2lmIFsgeCRmbG9hdF9mb3JtYXQgPSB4IF0KK3RoZW4gZmxvYXRfZm9ybWF0PWk2NAorZmkKKworIyBTYXkgd2hhdCBmaWxlcyBhcmUgYmVpbmcgdXNlZCBmb3IgdGhlIG91dHB1dCBjb2RlIGFuZCBNRCBmaWxlLgorZWNobyAiVXNpbmcgXGAkc3JjZGlyL2NvbmZpZy8kb3V0X2ZpbGUnIHRvIG91dHB1dCBpbnNucy4iCitlY2hvICJVc2luZyBcYCRzcmNkaXIvY29uZmlnLyRtZF9maWxlJyBhcyBtYWNoaW5lIGRlc2NyaXB0aW9uIGZpbGUuIgorCitjb3VudD1hCitmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKwljb3VudD0ke2NvdW50fXgKK2RvbmUKK2lmIFsgJGNvdW50ID0gYXggXTsgdGhlbgorCWVjaG8gIlVzaW5nIFxgJHNyY2Rpci9jb25maWcvJHRtX2ZpbGUnIGFzIHRhcmdldCBtYWNoaW5lIG1hY3JvIGZpbGUuIgorZWxzZQorCWVjaG8gIlVzaW5nIHRoZSBmb2xsb3dpbmcgdGFyZ2V0IG1hY2hpbmUgbWFjcm8gZmlsZXM6IgorCWZvciBmIGluICR0bV9maWxlOyBkbworCQllY2hvICIJJHNyY2Rpci9jb25maWcvJGYiCisJZG9uZQorZmkKKworY291bnQ9YQorZm9yIGYgaW4gJGhvc3RfeG1fZmlsZTsgZG8KKwljb3VudD0ke2NvdW50fXgKK2RvbmUKK2lmIFsgJGNvdW50ID0gYXggXTsgdGhlbgorCWVjaG8gIlVzaW5nIFxgJHNyY2Rpci9jb25maWcvJGhvc3RfeG1fZmlsZScgYXMgaG9zdCBtYWNoaW5lIG1hY3JvIGZpbGUuIgorZWxzZQorCWVjaG8gIlVzaW5nIHRoZSBmb2xsb3dpbmcgaG9zdCBtYWNoaW5lIG1hY3JvIGZpbGVzOiIKKwlmb3IgZiBpbiAkaG9zdF94bV9maWxlOyBkbworCQllY2hvICIJJHNyY2Rpci9jb25maWcvJGYiCisJZG9uZQorZmkKKworaWYgWyAiJGhvc3RfeG1fZmlsZSIgIT0gIiRidWlsZF94bV9maWxlIiBdOyB0aGVuCisJY291bnQ9YQorCWZvciBmIGluICRidWlsZF94bV9maWxlOyBkbworCQljb3VudD0ke2NvdW50fXgKKwlkb25lCisJaWYgWyAkY291bnQgPSBheCBdOyB0aGVuCisJCWVjaG8gIlVzaW5nIFxgJHNyY2Rpci9jb25maWcvJGJ1aWxkX3htX2ZpbGUnIGFzIGJ1aWxkIG1hY2hpbmUgbWFjcm8gZmlsZS4iCisJZWxzZQorCQllY2hvICJVc2luZyB0aGUgZm9sbG93aW5nIGJ1aWxkIG1hY2hpbmUgbWFjcm8gZmlsZXM6IgorCQlmb3IgZiBpbiAkYnVpbGRfeG1fZmlsZTsgZG8KKwkJCWVjaG8gIgkkc3JjZGlyL2NvbmZpZy8kZiIKKwkJZG9uZQorCWZpCitmaQorCitpZiBbIHgkdGhyZWFkX2ZpbGUgPSB4IF0KK3RoZW4gdGhyZWFkX2ZpbGU9J3NpbmdsZScKK2ZpCisKKyMgU2V0IHVwIHRoZSBoZWFkZXIgZmlsZXMuCisjICRsaW5rcyBpcyB0aGUgbGlzdCBvZiBoZWFkZXIgZmlsZXMgdG8gY3JlYXRlLgorIyAkdmFycyBpcyB0aGUgbGlzdCBvZiBzaGVsbCB2YXJpYWJsZXMgd2l0aCBmaWxlIG5hbWVzIHRvIGluY2x1ZGUuCisjIGNvbmZpZzIuaCBpcyB0aGUgb2xkIGNvbmZpZy5oLiAgSXQgaXMgaW5jbHVkZWQgYnkgdGhlIG5ldyBjb25maWcuaCB3aGljaAorIyBjcmVhdGVkIGZyb20gY29uZmlnLmluLiAgVGhlIGdvYWwgaXMgdG8gc2ltcGxpZnkgdGhlIHRyYW5zaXRpb24gdG8gYXV0b2NvbmYuCit2YXJzPSJob3N0X3htX2ZpbGUgdG1fZmlsZSB4bV9maWxlIGJ1aWxkX3htX2ZpbGUiCitsaW5rcz0iY29uZmlnMi5oIHRtLmggdGNvbmZpZy5oIGhjb25maWcuaCIKKworcm0gLWYgY29uZmlnLmJhaworaWYgWyAtZiBjb25maWcuc3RhdHVzIF07IHRoZW4gbXYgLWYgY29uZmlnLnN0YXR1cyBjb25maWcuYmFrOyBmaQorCisjIE1ha2UgdGhlIGxpbmtzLgord2hpbGUgWyAtbiAiJHZhcnMiIF0KK2RvCisJIyBzZXQgZmlsZSB0byBjYXIgb2YgZmlsZXMsIGZpbGVzIHRvIGNkciBvZiBmaWxlcworCXNldCAkdmFyczsgdmFyPSQxOyBzaGlmdDsgdmFycz0kKgorCXNldCAkbGlua3M7IGxpbms9JDE7IHNoaWZ0OyBsaW5rcz0kKgorCisJcm0gLWYgJGxpbmsKKworCSMgRGVmaW5lIFRBUkdFVF9DUFVfREVGQVVMVCBpZiB0aGUgc3lzdGVtIHdhbnRzIG9uZS4KKwkjIFRoaXMgc3Vic3RpdHV0ZXMgZm9yIGxvdHMgb2YgKi5oIGZpbGVzLgorCWlmIFsgeCR0YXJnZXRfY3B1X2RlZmF1bHQgIT0geCAtYSAkbGluayA9IHRtLmggXQorCXRoZW4KKwkJZWNobyAiI2RlZmluZSBUQVJHRVRfQ1BVX0RFRkFVTFQgJHRhcmdldF9jcHVfZGVmYXVsdCIgPj4kbGluaworCWZpCisKKwlmb3IgZmlsZSBpbiBgZXZhbCBlY2hvICckJyR2YXJgOyBkbworCQllY2hvICIjaW5jbHVkZSBcIiRmaWxlXCIiID4+JGxpbmsKKwlkb25lCitkb25lCisKKyMgVHJ1bmNhdGUgdGhlIHRhcmdldCBpZiBuZWNlc3NhcnkKK2lmIFsgeCRob3N0X3RydW5jYXRlX3RhcmdldCAhPSB4IF07IHRoZW4KKwl0YXJnZXQ9YGVjaG8gJHRhcmdldCB8IHNlZCAtZSAncy9cKC4uLi4uLi4uLi4uLi4uXCkuKi9cMS8nYAorZmkKKworIyBHZXQgdGhlIHZlcnNpb24gbnVtYmVyIGZyb20gdGhlIHRvcGxldmVsCit2ZXJzaW9uPWBzZWQgLWUgJ3MvLipcIlwoW14gXCJdKlwpWyBcIl0uKi9cMS8nIDwgJHtzcmNkaXJ9L3ZlcnNpb24uY2AKKworIyBBcmUgd2UgdXNpbmcgZ2NjIGFzIHRoZSBuYXRpdmUgY29tcGlsZXI/CitjYXNlICRob3N0IGluCisqbGludXgqKQkjIEFsbCBMaW51eCdzIHVzZSBnY2MgYXMgdGhlIG5hdGl2ZSBjb21waWxlci4KKwlpZiBbIHgkcHJlZml4ID0geE5PTkUgXTsgdGhlbgorCQlwcmVmaXg9JG5hdGl2ZV9wcmVmaXgKKwlmaQorCTs7Citlc2FjCisKKyMgR2V0IGFuIGFic29sdXRlIHBhdGggdG8gdGhlIEdDQyB0b3AtbGV2ZWwgc291cmNlIGRpcmVjdG9yeQoraG9sZGRpcj1gcHdkYAorY2QgJHNyY2RpcgordG9wZGlyPWBwd2RgCitjZCAkaG9sZGRpcgorCisjIENvbmRpdGlvbmFsaXplIHRoZSBtYWtlZmlsZSBmb3IgdGhpcyBob3N0IG1hY2hpbmUuCisjIE1ha2UtaG9zdCBjb250YWlucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgaG9zdCBtYWtlZmlsZSBmcmFnbWVudHMKKyMgW3RoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lXS4gIFRoaXMgZmlsZSBpcyBidWlsdCBieSBjb25maWd1cmUuZnJhZy4KK2hvc3Rfb3ZlcnJpZGVzPU1ha2UtaG9zdAorZGVwX2hvc3RfeG1ha2VfZmlsZT0KK2ZvciBmIGluIC4uICR7aG9zdF94bWFrZV9maWxlfQorZG8KKwlpZiBbIC1mICR7c3JjZGlyfS9jb25maWcvJGYgXQorCXRoZW4KKwkJZGVwX2hvc3RfeG1ha2VfZmlsZT0iJHtkZXBfaG9zdF94bWFrZV9maWxlfSAke3NyY2Rpcn0vY29uZmlnLyRmIgorCWZpCitkb25lCisKKyMgQ29uZGl0aW9uYWxpemUgdGhlIG1ha2VmaWxlIGZvciB0aGlzIHRhcmdldCBtYWNoaW5lLgorIyBNYWtlLXRhcmdldCBjb250YWlucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgaG9zdCBtYWtlZmlsZSBmcmFnbWVudHMKKyMgW3RoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lXS4gIFRoaXMgZmlsZSBpcyBidWlsdCBieSBjb25maWd1cmUuZnJhZy4KK3RhcmdldF9vdmVycmlkZXM9TWFrZS10YXJnZXQKK2RlcF90bWFrZV9maWxlPQorZm9yIGYgaW4gLi4gJHt0bWFrZV9maWxlfQorZG8KKwlpZiBbIC1mICR7c3JjZGlyfS9jb25maWcvJGYgXQorCXRoZW4KKwkJZGVwX3RtYWtlX2ZpbGU9IiR7ZGVwX3RtYWtlX2ZpbGV9ICR7c3JjZGlyfS9jb25maWcvJGYiCisJZmkKK2RvbmUKKworIyBJZiB0aGUgaG9zdCBkb2Vzbid0IHN1cHBvcnQgc3ltbGlua3MsIG1vZGlmeSBDQyBpbgorIyBGTEFHU19UT19QQVNTIHNvIENDPSJzdGFnZTEveGdjYyAtQnN0YWdlMS8iIHdvcmtzLgorIyBPdGhlcndpc2UsIHdlIGNhbiB1c2UgIkNDPSQoQ0MpIi4KK3JtIC1mIHN5bXRlc3QudGVtCitpZiAkc3ltYm9saWNfbGluayBzeW10ZXN0MS50ZW0gc3ltdGVzdC50ZW0gMj4vZGV2L251bGwKK3RoZW4KKwljY19zZXRfYnlfY29uZmlndXJlPSJcJChDQykiCisJc3RhZ2VfcHJlZml4X3NldF9ieV9jb25maWd1cmU9IlwkKFNUQUdFX1BSRUZJWCkiCitlbHNlCisJY2Nfc2V0X2J5X2NvbmZpZ3VyZT0iXGBjYXNlICdcJChDQyknIGluIHN0YWdlKikgZWNobyAnXCQoQ0MpJyB8IHNlZCAtZSAnc3xzdGFnZXwuLi9zdGFnZXxnJzs7ICopIGVjaG8gJ1wkKENDKSc7OyBlc2FjXGAiCisJc3RhZ2VfcHJlZml4X3NldF9ieV9jb25maWd1cmU9IlxgY2FzZSAnXCQoU1RBR0VfUFJFRklYKScgaW4gc3RhZ2UqKSBlY2hvICdcJChTVEFHRV9QUkVGSVgpJyB8IHNlZCAtZSAnc3xzdGFnZXwuLi9zdGFnZXxnJzs7ICopIGVjaG8gJ1wkKFNUQUdFX1BSRUZJWCknOzsgZXNhY1xgIgorZmkKK3JtIC1mIHN5bXRlc3QudGVtCisKK291dF9vYmplY3RfZmlsZT1gYmFzZW5hbWUgJG91dF9maWxlIC5jYC5vCisKK3RtX2ZpbGVfbGlzdD0KK2ZvciBmIGluICR0bV9maWxlOyBkbworCXRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZG9uZQorCitob3N0X3htX2ZpbGVfbGlzdD0KK2ZvciBmIGluICRob3N0X3htX2ZpbGU7IGRvCisJaG9zdF94bV9maWxlX2xpc3Q9IiR7aG9zdF94bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZG9uZQorCitidWlsZF94bV9maWxlX2xpc3Q9Citmb3IgZiBpbiAkYnVpbGRfeG1fZmlsZTsgZG8KKwlidWlsZF94bV9maWxlX2xpc3Q9IiR7YnVpbGRfeG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RvbmUKKworIyBEZWZpbmUgbWFjcm8gQ1JPU1NfQ09NUElMRSBpbiBjb21waWxhdGlvbgorIyBpZiB0aGlzIGlzIGEgY3Jvc3MtY29tcGlsZXIuCisjIEFsc28gdXNlIGFsbC5jcm9zcyBpbnN0ZWFkIG9mIGFsbC5pbnRlcm5hbAorIyBhbmQgYWRkIGNyb3NzLW1ha2UgdG8gTWFrZWZpbGUuCitjcm9zc19vdmVycmlkZXM9Ii9kZXYvbnVsbCIKK2lmIFsgeCRob3N0ICE9IHgkdGFyZ2V0IF0KK3RoZW4KKwljcm9zc19kZWZpbmVzPSJDUk9TUz0tRENST1NTX0NPTVBJTEUiCisJY3Jvc3Nfb3ZlcnJpZGVzPSIke3RvcGRpcn0vY3Jvc3MtbWFrZSIKK2ZpCisKKyMgV2hlbiBidWlsZGluZyBnY2Mgd2l0aCBhIGNyb3NzLWNvbXBpbGVyLCB3ZSBuZWVkIHRvIGZpeCBhIGZldyB0aGluZ3MuCisjIFRoaXMgbXVzdCBjb21lIGFmdGVyIGNyb3NzLW1ha2UgYXMgd2Ugd2FudCBhbGwuYnVpbGQgdG8gb3ZlcnJpZGUKKyMgYWxsLmNyb3NzLgorYnVpbGRfb3ZlcnJpZGVzPSIvZGV2L251bGwiCitpZiBbIHgkYnVpbGQgIT0geCRob3N0IF0KK3RoZW4KKwlidWlsZF9vdmVycmlkZXM9IiR7dG9wZGlyfS9idWlsZC1tYWtlIgorZmkKKworIyBFeHBhbmQgZXh0cmFfaGVhZGVycyB0byBpbmNsdWRlIGNvbXBsZXRlIHBhdGguCisjIFRoaXMgc3Vic3RpdHV0ZXMgZm9yIGxvdHMgb2YgdC0qIGZpbGVzLgorZXh0cmFfaGVhZGVyc19saXN0PQoraWYgWyAieCRleHRyYV9oZWFkZXJzIiA9IHggXQordGhlbiB0cnVlCitlbHNlCisJIyBQcmVwZW5kICR7c3JjZGlyfS9naW5jbHVkZS8gdG8gZXZlcnkgZW50cnkgaW4gZXh0cmFfaGVhZGVycy4KKwlmb3IgZmlsZSBpbiAkZXh0cmFfaGVhZGVyczsKKwlkbworCQlleHRyYV9oZWFkZXJzX2xpc3Q9IiR7ZXh0cmFfaGVhZGVyc19saXN0fSBcJChzcmNkaXIpL2dpbmNsdWRlLyR7ZmlsZX0iCisJZG9uZQorZmkKKworIyBBZGQgYSBkZWZpbml0aW9uIG9mIFVTRV9DT0xMRUNUMiBpZiBzeXN0ZW0gd2FudHMgb25lLgorIyBBbHNvIHRlbGwgdG9wbGV2LmMgd2hhdCB0byBkby4KKyMgVGhpcyBzdWJzdGl0dXRlcyBmb3IgbG90cyBvZiB0LSogZmlsZXMuCitpZiBbIHgkdXNlX2NvbGxlY3QyID0geCBdCit0aGVuCisJd2lsbF91c2VfY29sbGVjdDI9CisJbWF5YmVfdXNlX2NvbGxlY3QyPQorZWxzZQorCXdpbGxfdXNlX2NvbGxlY3QyPSJsZCIKKwltYXliZV91c2VfY29sbGVjdDI9Ii1EVVNFX0NPTExFQ1QyIgorZmkKKworIyBORUVEIFRPIENPTlZFUlQKKyMgU2V0IE1EX0RFUFMgaWYgdGhlIHJlYWwgbWQgZmlsZSBpcyBpbiBtZC5wcmUtY3BwLgorIyBTZXQgTURfQ1BQIHRvIHRoZSBjcHAgdG8gcGFzcyB0aGUgbWQgZmlsZSB0aHJvdWdoLiAgTWQgZmlsZXMgdXNlICc7JworIyBmb3IgbGluZSBvcmllbnRlZCBjb21tZW50cywgc28gd2UgbXVzdCBhbHdheXMgdXNlIGEgR05VIGNwcC4gIElmCisjIGJ1aWxkaW5nIGdjYyB3aXRoIGEgY3Jvc3MgY29tcGlsZXIsIHVzZSB0aGUgY3Jvc3MgY29tcGlsZXIganVzdAorIyBidWlsdC4gIE90aGVyd2lzZSwgd2UgY2FuIHVzZSB0aGUgY3BwIGp1c3QgYnVpbHQuCittZF9maWxlX3N1Yj0KK2lmIFsgIngkbWRfY3BwZmxhZ3MiID0geCBdCit0aGVuCisJbWRfZmlsZV9zdWI9JHNyY2Rpci9jb25maWcvJG1kX2ZpbGUKK2Vsc2UKKwltZF9maWxlPW1kCitmaQorCisjIElmIHdlIGhhdmUgZ2FzIGluIHRoZSBidWlsZCB0cmVlLCBtYWtlIGEgbGluayB0byBpdC4KK2lmIFsgLWYgLi4vZ2FzL01ha2VmaWxlIF07IHRoZW4KKwlybSAtZiBhczsgJHN5bWJvbGljX2xpbmsgLi4vZ2FzL2FzLm5ldyBhcyAyPi9kZXYvbnVsbAorZmkKKworIyBJZiB3ZSBoYXZlIGxkIGluIHRoZSBidWlsZCB0cmVlLCBtYWtlIGEgbGluayB0byBpdC4KK2lmIFsgLWYgLi4vbGQvTWFrZWZpbGUgXTsgdGhlbgorCWlmIFsgeCR1c2VfY29sbGVjdDIgPSB4IF07IHRoZW4KKwkJcm0gLWYgbGQ7ICRzeW1ib2xpY19saW5rIC4uL2xkL2xkLm5ldyBsZCAyPi9kZXYvbnVsbAorCWVsc2UKKwkJcm0gLWYgY29sbGVjdC1sZDsgJHN5bWJvbGljX2xpbmsgLi4vbGQvbGQubmV3IGNvbGxlY3QtbGQgMj4vZGV2L251bGwKKwlmaQorZmkKKworIyBGaWd1cmUgb3V0IHdoYXQgbGFuZ3VhZ2Ugc3ViZGlyZWN0b3JpZXMgYXJlIHByZXNlbnQuCitzdWJkaXJzPQorZm9yIGxhbmcgaW4gJHtzcmNkaXJ9LyovY29uZmlnLWxhbmcuaW4gLi4KK2RvCisJY2FzZSAkbGFuZyBpbgorCS4uKSA7OworCSMgVGhlIG9kZCBxdW90aW5nIGluIHRoZSBuZXh0IGxpbmUgd29ya3MgYXJvdW5kCisJIyBhbiBhcHBhcmVudCBidWcgaW4gYmFzaCAxLjEyIG9uIGxpbnV4LgorCSR7c3JjZGlyfS9bKl0vY29uZmlnLWxhbmcuaW4pIDs7CisJKikgc3ViZGlycz0iJHN1YmRpcnMgYGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MsXi4qL1woW14vXSpcKS9jb25maWctbGFuZy5pbiQsXDEsJ2AiIDs7CisJZXNhYworZG9uZQorCisjIE1ha2UgZW1wdHkgZmlsZXMgdG8gY29udGFpbiB0aGUgc3BlY3MgYW5kIG9wdGlvbnMgZm9yIGVhY2ggbGFuZ3VhZ2UuCisjIFRoZW4gYWRkICNpbmNsdWRlIGxpbmVzIHRvIGZvciBhIGNvbXBpbGVyIHRoYXQgaGFzIHNwZWNzIGFuZC9vciBvcHRpb25zLgorCitsYW5nX3NwZWNzX2ZpbGVzPQorbGFuZ19vcHRpb25zX2ZpbGVzPQorcm0gLWYgc3BlY3MuaCBvcHRpb25zLmgKK3RvdWNoIHNwZWNzLmggb3B0aW9ucy5oCitmb3Igc3ViZGlyIGluIC4gJHN1YmRpcnMKK2RvCisJaWYgWyAtZiAkc3JjZGlyLyRzdWJkaXIvbGFuZy1zcGVjcy5oIF07IHRoZW4KKwkJZWNobyAiI2luY2x1ZGUgXCIkc3ViZGlyL2xhbmctc3BlY3MuaFwiIiA+PnNwZWNzLmgKKwkJbGFuZ19zcGVjc19maWxlcz0iJGxhbmdfc3BlY3NfZmlsZXMgJHNyY2Rpci8kc3ViZGlyL2xhbmctc3BlY3MuaCIKKwlmaQorCWlmIFsgLWYgJHNyY2Rpci8kc3ViZGlyL2xhbmctb3B0aW9ucy5oIF07IHRoZW4KKwkJZWNobyAiI2luY2x1ZGUgXCIkc3ViZGlyL2xhbmctb3B0aW9ucy5oXCIiID4+b3B0aW9ucy5oCisJCWxhbmdfb3B0aW9uc19maWxlcz0iJGxhbmdfb3B0aW9uc19maWxlcyAkc3JjZGlyLyRzdWJkaXIvbGFuZy1vcHRpb25zLmgiCisJZmkKK2RvbmUKKworIyBUaGVzZSAod2l0aG91dCAiYWxsXyIpIGFyZSBzZXQgaW4gZWFjaCBjb25maWctbGFuZy5pbi4KKyMgYGxhbmd1YWdlJyBtdXN0IGJlIGEgc2luZ2xlIHdvcmQgc28gaXMgc3BlbGxlZCBzaW5ndWxhcmx5LgorYWxsX2xhbmd1YWdlcz0KK2FsbF9ib290X2xhbmd1YWdlcz0KK2FsbF9jb21waWxlcnM9CithbGxfc3RhZ2VzdHVmZj0KK2FsbF9kaWZmX2V4Y2x1ZGVzPQorYWxsX291dHB1dHM9TWFrZWZpbGUKKyMgTGlzdCBvZiBsYW5ndWFnZSBtYWtlZmlsZSBmcmFnbWVudHMuCithbGxfbGFuZ19tYWtlZmlsZXM9CithbGxfaGVhZGVycz0KK2FsbF9saWIyZnVuY3M9CisKKyMgQWRkIHRoZSBsYW5ndWFnZSBmcmFnbWVudHMuCisjIExhbmd1YWdlcyBhcmUgYWRkZWQgdmlhIHR3byBtZWNoYW5pc21zLiAgU29tZSBpbmZvcm1hdGlvbiBtdXN0IGJlCisjIHJlY29yZGVkIGluIG1ha2VmaWxlIHZhcmlhYmxlcywgdGhlc2UgYXJlIGRlZmluZWQgaW4gY29uZmlnLWxhbmcuaW4uCisjIFdlIGFjY3VtdWxhdGUgdGhlbSBhbmQgcGx1ZyB0aGVtIGludG8gdGhlIG1haW4gTWFrZWZpbGUuCisjIFRoZSBvdGhlciBtZWNoYW5pc20gaXMgYSBzZXQgb2YgaG9va3MgZm9yIGVhY2ggb2YgdGhlIG1haW4gdGFyZ2V0cworIyBsaWtlIGBjbGVhbicsIGBpbnN0YWxsJywgZXRjLgorCitsYW5ndWFnZV9mcmFnbWVudHM9Ik1ha2UtbGFuZyIKK2xhbmd1YWdlX2hvb2tzPSJNYWtlLWhvb2tzIgorb2xkc3R5bGVfc3ViZGlycz0KKworZm9yIHMgaW4gLi4gJHN1YmRpcnMKK2RvCisJaWYgWyAkcyAhPSAiLi4iIF0KKwl0aGVuCisJCWxhbmd1YWdlPQorCQlib290X2xhbmd1YWdlPQorCQljb21waWxlcnM9CisJCXN0YWdlc3R1ZmY9CisJCWRpZmZfZXhjbHVkZXM9CisJCWhlYWRlcnM9CisJCW91dHB1dHM9CisJCWxpYjJmdW5jcz0KKwkJLiAke3NyY2Rpcn0vJHMvY29uZmlnLWxhbmcuaW4KKwkJaWYgWyAieCRsYW5ndWFnZSIgPSB4IF0KKwkJdGhlbgorCQkJZWNobyAiJHtzcmNkaXJ9LyRzL2NvbmZpZy1sYW5nLmluIGRvZXNuJ3Qgc2V0IFwkbGFuZ3VhZ2UuIiAxPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJYWxsX2xhbmdfbWFrZWZpbGVzPSIkYWxsX2xhbmdfbWFrZWZpbGVzICR7c3JjZGlyfS8kcy9NYWtlLWxhbmcuaW4gJHtzcmNkaXJ9LyRzL01ha2VmaWxlLmluIgorCQlhbGxfbGFuZ3VhZ2VzPSIkYWxsX2xhbmd1YWdlcyAkbGFuZ3VhZ2UiCisJCWlmIFsgIngkYm9vdF9sYW5ndWFnZSIgPSB4eWVzIF0KKwkJdGhlbgorCQkJYWxsX2Jvb3RfbGFuZ3VhZ2VzPSIkYWxsX2Jvb3RfbGFuZ3VhZ2VzICRsYW5ndWFnZSIKKwkJZmkKKwkJYWxsX2NvbXBpbGVycz0iJGFsbF9jb21waWxlcnMgJGNvbXBpbGVycyIKKwkJYWxsX3N0YWdlc3R1ZmY9IiRhbGxfc3RhZ2VzdHVmZiAkc3RhZ2VzdHVmZiIKKwkJYWxsX2RpZmZfZXhjbHVkZXM9IiRhbGxfZGlmZl9leGNsdWRlcyAkZGlmZl9leGNsdWRlcyIKKwkJYWxsX2hlYWRlcnM9IiRhbGxfaGVhZGVycyAkaGVhZGVycyIKKwkJYWxsX291dHB1dHM9IiRhbGxfb3V0cHV0cyAkb3V0cHV0cyIKKwkJaWYgWyB4JG91dHB1dHMgPSB4IF0KKwkJdGhlbgorCQkJb2xkc3R5bGVfc3ViZGlycz0iJG9sZHN0eWxlX3N1YmRpcnMgJHMiCisJCWZpCisJCWFsbF9saWIyZnVuY3M9IiRhbGxfbGliMmZ1bmNzICRsaWIyZnVuY3MiCisJZmkKK2RvbmUKKworIyBTaW5jZSB3ZSBjYW4ndCB1c2UgYDo6JyB0YXJnZXRzLCB3ZSBsaW5rIGVhY2ggbGFuZ3VhZ2UgaW4KKyMgd2l0aCBhIHNldCBvZiBob29rcywgcmVhY2hlZCBpbmRpcmVjdGx5IHZpYSBsYW5nLiR7dGFyZ2V0fS4KKworcm0gLWYgTWFrZS1ob29rcwordG91Y2ggTWFrZS1ob29rcwordGFyZ2V0X2xpc3Q9ImFsbC5idWlsZCBhbGwuY3Jvc3Mgc3RhcnQuZW5jYXAgcmVzdC5lbmNhcCBcCisJaW5mbyBkdmkgXAorCWluc3RhbGwtbm9ybWFsIGluc3RhbGwtY29tbW9uIGluc3RhbGwtaW5mbyBpbnN0YWxsLW1hbiBcCisJdW5pbnN0YWxsIGRpc3RkaXIgXAorCW1vc3RseWNsZWFuIGNsZWFuIGRpc3RjbGVhbiBleHRyYWNsZWFuIG1haW50YWluZXItY2xlYW4gXAorCXN0YWdlMSBzdGFnZTIgc3RhZ2UzIHN0YWdlNCIKK2ZvciB0IGluICR0YXJnZXRfbGlzdAorZG8KKwl4PQorCWZvciBsIGluIC4uICRhbGxfbGFuZ3VhZ2VzCisJZG8KKwkJaWYgWyAkbCAhPSAiLi4iIF07IHRoZW4KKwkJCXg9IiR4ICRsLiR0IgorCQlmaQorCWRvbmUKKwllY2hvICJsYW5nLiR0OiAkeCIgPj4gTWFrZS1ob29rcworZG9uZQorCisjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBpbiBzcmNkaXIsIGNyZWF0ZSAuZ2RiaW5pdC4KKworaWYgWyAhIC1mIE1ha2VmaWxlLmluIF07IHRoZW4KKwllY2hvICJkaXIgLiIgPiAuZ2RiaW5pdAorCWVjaG8gImRpciAke3NyY2Rpcn0iID4+IC5nZGJpbml0CisJaWYgWyB4JGdkYl9uZWVkc19vdXRfZmlsZV9wYXRoID0geHllcyBdCisJdGhlbgorCQllY2hvICJkaXIgJHtzcmNkaXJ9L2NvbmZpZy8iYGRpcm5hbWUgJHtvdXRfZmlsZX1gID4+IC5nZGJpbml0CisJZmkKKwlpZiBbICJ4JHN1YmRpcnMiICE9IHggXTsgdGhlbgorCQlmb3IgcyBpbiAkc3ViZGlycworCQlkbworCQkJZWNobyAiZGlyICR7c3JjZGlyfS8kcyIgPj4gLmdkYmluaXQKKwkJZG9uZQorCWZpCisJZWNobyAic291cmNlICR7c3JjZGlyfS8uZ2RiaW5pdCIgPj4gLmdkYmluaXQKK2ZpCisKKyMgUHJvY2VzcyB0aGUgbGFuZ3VhZ2UgYW5kIGhvc3QvdGFyZ2V0IG1ha2VmaWxlIGZyYWdtZW50cy4KKyR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRzcmNkaXIvY29uZmlndXJlLmZyYWcgJHNyY2RpciAiJHN1YmRpcnMiICIkZGVwX2hvc3RfeG1ha2VfZmlsZSIgIiRkZXBfdG1ha2VfZmlsZSIKKworIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIEVjaG8gdGhhdCBsaW5rcyBhcmUgYnVpbHQKK2lmIFsgeCRob3N0ID0geCR0YXJnZXQgXQordGhlbgorCXN0cjE9Im5hdGl2ZSAiCitlbHNlCisJc3RyMT0iY3Jvc3MtIgorCXN0cjI9IiBmcm9tICRob3N0IgorZmkKKworaWYgWyB4JGhvc3QgIT0geCRidWlsZCBdCit0aGVuCisJc3RyMz0iIG9uIGEgJGJ1aWxkIHN5c3RlbSIKK2ZpCisKK2lmIFsgIngkc3RyMiIgIT0geCBdIHx8IFsgIngkc3RyMyIgIT0geCBdCit0aGVuCisJc3RyND0KK2ZpCisKK2VjaG8gIkxpbmtzIGFyZSBub3cgc2V0IHVwIHRvIGJ1aWxkIGEgJHtzdHIxfWNvbXBpbGVyIGZvciAke3RhcmdldH0kc3RyNCIgMT4mMgorCitpZiBbICJ4JHN0cjIiICE9IHggXSB8fCBbICJ4JHN0cjMiICE9IHggXQordGhlbgorCWVjaG8gIiAke3N0cjJ9JHtzdHIzfS4iIDE+JjIKK2ZpCisKKyMgQ29uZmlndXJlIHRoZSBzdWJkaXJlY3RvcmllcworIyBBQ19DT05GSUdfU1VCRElSUygkc3ViZGlycykKKworIyBDcmVhdGUgdGhlIE1ha2VmaWxlCisjIGFuZCBjb25maWd1cmUgbGFuZ3VhZ2Ugc3ViZGlyZWN0b3JpZXMKK3RyYXAgJycgMSAyIDE1CitjYXQgPiBjb25mY2FjaGUgPDxcRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucy4gIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4KKyMgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBCeSBkZWZhdWx0LCBjb25maWd1cmUgdXNlcyAuL2NvbmZpZy5jYWNoZSBhcyB0aGUgY2FjaGUgZmlsZSwKKyMgY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4gIFlvdSBjYW4gZ2l2ZSBjb25maWd1cmUKKyMgdGhlIC0tY2FjaGUtZmlsZT1GSUxFIG9wdGlvbiB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUgZmlsZTsgdGhhdCBpcworIyB3aGF0IGNvbmZpZ3VyZSBkb2VzIHdoZW4gaXQgY2FsbHMgY29uZmlndXJlIHNjcmlwdHMgaW4KKyMgc3ViZGlyZWN0b3JpZXMsIHNvIHRoZXkgc2hhcmUgdGhlIGNhY2hlLgorIyBHaXZpbmcgLS1jYWNoZS1maWxlPS9kZXYvbnVsbCBkaXNhYmxlcyBjYWNoaW5nLCBmb3IgZGVidWdnaW5nIGNvbmZpZ3VyZS4KKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0IHRoZQorIyAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKK0VPRgorIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoc2V0KSAyPiYxIHwKKyAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbgorICAqYWNfc3BhY2U9XCAqKQorICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUgc3Vic3RpdHV0aW9uCisgICAgIyB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICBzZWQgLW4gXAorICAgICAgLWUgInMvJy8nXFxcXCcnL2ciIFwKKyAgICAgIC1lICJzL15cXChbYS16QS1aMC05X10qX2N2X1thLXpBLVowLTlfXSpcXCk9XFwoLipcXCkvXFwxPVwke1xcMT0nXFwyJ30vcCIKKyAgICA7OworICAqKQorICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgc2VkIC1uIC1lICdzL15cKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlwpPVwoLipcKS9cMT0ke1wxPVwyfS9wJworICAgIDs7CisgIGVzYWMgPj4gY29uZmNhY2hlCitpZiBjbXAgLXMgJGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuCisgIDoKK2Vsc2UKKyAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorICAgIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAgIGNhdCBjb25mY2FjaGUgPiAkY2FjaGVfZmlsZQorICBlbHNlCisgICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3RyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1CisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCisjIEFueSBhc3NpZ25tZW50IHRvIFZQQVRIIGNhdXNlcyBTdW4gbWFrZSB0byBvbmx5IGV4ZWN1dGUKKyMgdGhlIGZpcnN0IHNldCBvZiBkb3VibGUtY29sb24gcnVsZXMsIHNvIHJlbW92ZSBpdCBpZiBub3QgbmVlZGVkLgorIyBJZiB0aGVyZSBpcyBhIGNvbG9uIGluIHRoZSBwYXRoLCB3ZSBuZWVkIHRvIGtlZXAgaXQuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9W146XSokL2QnCitmaQorCit0cmFwICdybSAtZiAkQ09ORklHX1NUQVRVUyBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1CisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKKyMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorCitlY2hvIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTCitybSAtZiAkQ09ORklHX1NUQVRVUworY2F0ID4gJENPTkZJR19TVEFUVVMgPDxFT0YKKyMhIC9iaW4vc2gKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIFRoaXMgZGlyZWN0b3J5IHdhcyBjb25maWd1cmVkIGFzIGZvbGxvd3MsCisjIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIworIyAkMCAkYWNfY29uZmlndXJlX2FyZ3MKKyMKKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiAuL2NvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCithY19jc191c2FnZT0iVXNhZ2U6ICRDT05GSUdfU1RBVFVTIFstLXJlY2hlY2tdIFstLXZlcnNpb25dIFstLWhlbHBdIgorZm9yIGFjX29wdGlvbgorZG8KKyAgY2FzZSAiXCRhY19vcHRpb24iIGluCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGVjaG8gInJ1bm5pbmcgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIKKyAgICBleGVjIFwke0NPTkZJR19TSEVMTC0vYmluL3NofSAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24gOzsKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYpCisgICAgZWNobyAiJENPTkZJR19TVEFUVVMgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMiIKKyAgICBleGl0IDAgOzsKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtLWgpCisgICAgZWNobyAiXCRhY19jc191c2FnZSI7IGV4aXQgMCA7OworICAqKSBlY2hvICJcJGFjX2NzX3VzYWdlIjsgZXhpdCAxIDs7CisgIGVzYWMKK2RvbmUKKworYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKK2FjX2dpdmVuX0lOU1RBTEw9IiRJTlNUQUxMIgorCit0cmFwICdybSAtZnIgYGVjaG8gIiRhbGxfb3V0cHV0cyBjb25maWcuaDpjb25maWcuaW4iIHwgc2VkICJzLzpbXiBdKi8vZyJgIGNvbmZ0ZXN0KjsgZXhpdCAxJyAxIDIgMTUKK0VPRgorY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCisKKyMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluIGNvbmZpZy5zdGF0dXMuCitzZWQgJ3MvJUAvQEAvOyBzL0AlL0BALzsgcy8lZ1wkL0BnLzsgL0BnXCQvcy9bXFxcXCYlXS9cXFxcJi9nOworIHMvQEAvJUAvOyBzL0BAL0AlLzsgcy9AZ1wkLyVnLycgPiBjb25mdGVzdC5zdWJzIDw8XFxDRU9GCiskYWNfdnBzdWIKKyRleHRyYXN1YgorcyVAQ0ZMQUdTQCUkQ0ZMQUdTJWcKK3MlQENQUEZMQUdTQCUkQ1BQRkxBR1MlZworcyVAQ1hYRkxBR1NAJSRDWFhGTEFHUyVnCitzJUBERUZTQCUkREVGUyVnCitzJUBMREZMQUdTQCUkTERGTEFHUyVnCitzJUBMSUJTQCUkTElCUyVnCitzJUBleGVjX3ByZWZpeEAlJGV4ZWNfcHJlZml4JWcKK3MlQHByZWZpeEAlJHByZWZpeCVnCitzJUBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQCUkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSVnCitzJUBiaW5kaXJAJSRiaW5kaXIlZworcyVAc2JpbmRpckAlJHNiaW5kaXIlZworcyVAbGliZXhlY2RpckAlJGxpYmV4ZWNkaXIlZworcyVAZGF0YWRpckAlJGRhdGFkaXIlZworcyVAc3lzY29uZmRpckAlJHN5c2NvbmZkaXIlZworcyVAc2hhcmVkc3RhdGVkaXJAJSRzaGFyZWRzdGF0ZWRpciVnCitzJUBsb2NhbHN0YXRlZGlyQCUkbG9jYWxzdGF0ZWRpciVnCitzJUBsaWJkaXJAJSRsaWJkaXIlZworcyVAaW5jbHVkZWRpckAlJGluY2x1ZGVkaXIlZworcyVAb2xkaW5jbHVkZWRpckAlJG9sZGluY2x1ZGVkaXIlZworcyVAaW5mb2RpckAlJGluZm9kaXIlZworcyVAbWFuZGlyQCUkbWFuZGlyJWcKK3MlQGhvc3RAJSRob3N0JWcKK3MlQGhvc3RfYWxpYXNAJSRob3N0X2FsaWFzJWcKK3MlQGhvc3RfY3B1QCUkaG9zdF9jcHUlZworcyVAaG9zdF92ZW5kb3JAJSRob3N0X3ZlbmRvciVnCitzJUBob3N0X29zQCUkaG9zdF9vcyVnCitzJUB0YXJnZXRAJSR0YXJnZXQlZworcyVAdGFyZ2V0X2FsaWFzQCUkdGFyZ2V0X2FsaWFzJWcKK3MlQHRhcmdldF9jcHVAJSR0YXJnZXRfY3B1JWcKK3MlQHRhcmdldF92ZW5kb3JAJSR0YXJnZXRfdmVuZG9yJWcKK3MlQHRhcmdldF9vc0AlJHRhcmdldF9vcyVnCitzJUBidWlsZEAlJGJ1aWxkJWcKK3MlQGJ1aWxkX2FsaWFzQCUkYnVpbGRfYWxpYXMlZworcyVAYnVpbGRfY3B1QCUkYnVpbGRfY3B1JWcKK3MlQGJ1aWxkX3ZlbmRvckAlJGJ1aWxkX3ZlbmRvciVnCitzJUBidWlsZF9vc0AlJGJ1aWxkX29zJWcKK3MlQEFXS0AlJEFXSyVnCitzJUBMRVhAJSRMRVglZworcyVATEVYTElCQCUkTEVYTElCJWcKK3MlQExOX1NAJSRMTl9TJWcKK3MlQFJBTkxJQkAlJFJBTkxJQiVnCitzJUBZQUNDQCUkWUFDQyVnCitzJUBJTlNUQUxMX1BST0dSQU1AJSRJTlNUQUxMX1BST0dSQU0lZworcyVASU5TVEFMTF9EQVRBQCUkSU5TVEFMTF9EQVRBJWcKK3MlQENDQCUkQ0MlZworcyVAU0VUX01BS0VAJSRTRVRfTUFLRSVnCitzJUBDUFBAJSRDUFAlZworcyVAbWFuZXh0QCUkbWFuZXh0JWcKK3MlQG9iamV4dEAlJG9iamV4dCVnCitzJUBzdWJkaXJzQCUkc3ViZGlycyVnCitzJUBhbGxfbGFuZ3VhZ2VzQCUkYWxsX2xhbmd1YWdlcyVnCitzJUBhbGxfYm9vdF9sYW5ndWFnZXNAJSRhbGxfYm9vdF9sYW5ndWFnZXMlZworcyVAYWxsX2NvbXBpbGVyc0AlJGFsbF9jb21waWxlcnMlZworcyVAYWxsX2xhbmdfbWFrZWZpbGVzQCUkYWxsX2xhbmdfbWFrZWZpbGVzJWcKK3MlQGFsbF9zdGFnZXN0dWZmQCUkYWxsX3N0YWdlc3R1ZmYlZworcyVAYWxsX2RpZmZfZXhjbHVkZXNAJSRhbGxfZGlmZl9leGNsdWRlcyVnCitzJUBhbGxfbGliMmZ1bmNzQCUkYWxsX2xpYjJmdW5jcyVnCitzJUBhbGxfaGVhZGVyc0AlJGFsbF9oZWFkZXJzJWcKK3MlQGV4dHJhX3Bhc3Nlc0AlJGV4dHJhX3Bhc3NlcyVnCitzJUBleHRyYV9wcm9ncmFtc0AlJGV4dHJhX3Byb2dyYW1zJWcKK3MlQGV4dHJhX3BhcnRzQCUkZXh0cmFfcGFydHMlZworcyVAZXh0cmFfY19vYmpzQCUkZXh0cmFfY19vYmpzJWcKK3MlQGV4dHJhX2NfZmxhZ3NAJSRleHRyYV9jX2ZsYWdzJWcKK3MlQGV4dHJhX29ianNAJSRleHRyYV9vYmpzJWcKK3MlQGhvc3RfZXh0cmFfZ2NjX29ianNAJSRob3N0X2V4dHJhX2djY19vYmpzJWcKK3MlQGV4dHJhX2hlYWRlcnNfbGlzdEAlJGV4dHJhX2hlYWRlcnNfbGlzdCVnCitzJUBkZXBfaG9zdF94bWFrZV9maWxlQCUkZGVwX2hvc3RfeG1ha2VfZmlsZSVnCitzJUBkZXBfdG1ha2VfZmlsZUAlJGRlcF90bWFrZV9maWxlJWcKK3MlQG91dF9maWxlQCUkb3V0X2ZpbGUlZworcyVAb3V0X29iamVjdF9maWxlQCUkb3V0X29iamVjdF9maWxlJWcKK3MlQG1kX2ZpbGVAJSRtZF9maWxlJWcKK3MlQHRtX2ZpbGVfbGlzdEAlJHRtX2ZpbGVfbGlzdCVnCitzJUBidWlsZF94bV9maWxlX2xpc3RAJSRidWlsZF94bV9maWxlX2xpc3QlZworcyVAaG9zdF94bV9maWxlX2xpc3RAJSRob3N0X3htX2ZpbGVfbGlzdCVnCitzJUBsYW5nX3NwZWNzX2ZpbGVzQCUkbGFuZ19zcGVjc19maWxlcyVnCitzJUBsYW5nX29wdGlvbnNfZmlsZXNAJSRsYW5nX29wdGlvbnNfZmlsZXMlZworcyVAdGhyZWFkX2ZpbGVAJSR0aHJlYWRfZmlsZSVnCitzJUB2ZXJzaW9uQCUkdmVyc2lvbiVnCitzJUBsb2NhbF9wcmVmaXhAJSRsb2NhbF9wcmVmaXglZworcyVAZ3h4X2luY2x1ZGVfZGlyQCUkZ3h4X2luY2x1ZGVfZGlyJWcKK3MlQGZpeGluY2x1ZGVzQCUkZml4aW5jbHVkZXMlZworcyVAYnVpbGRfaW5zdGFsbF9oZWFkZXJzX2RpckAlJGJ1aWxkX2luc3RhbGxfaGVhZGVyc19kaXIlZworcyVAYnVpbGRfZXhlZXh0QCUkYnVpbGRfZXhlZXh0JWcKK3MlQGZsb2F0X2Zvcm1hdEAlJGZsb2F0X2Zvcm1hdCVnCitzJUB3aWxsX3VzZV9jb2xsZWN0MkAlJHdpbGxfdXNlX2NvbGxlY3QyJWcKK3MlQG1heWJlX3VzZV9jb2xsZWN0MkAlJG1heWJlX3VzZV9jb2xsZWN0MiVnCitzJUBjY19zZXRfYnlfY29uZmlndXJlQCUkY2Nfc2V0X2J5X2NvbmZpZ3VyZSVnCitzJUBzdGFnZV9wcmVmaXhfc2V0X2J5X2NvbmZpZ3VyZUAlJHN0YWdlX3ByZWZpeF9zZXRfYnlfY29uZmlndXJlJWcKKy9AdGFyZ2V0X292ZXJyaWRlc0AvciAkdGFyZ2V0X292ZXJyaWRlcworcyVAdGFyZ2V0X292ZXJyaWRlc0AlJWcKKy9AaG9zdF9vdmVycmlkZXNAL3IgJGhvc3Rfb3ZlcnJpZGVzCitzJUBob3N0X292ZXJyaWRlc0AlJWcKK3MlQGNyb3NzX2RlZmluZXNAJSRjcm9zc19kZWZpbmVzJWcKKy9AY3Jvc3Nfb3ZlcnJpZGVzQC9yICRjcm9zc19vdmVycmlkZXMKK3MlQGNyb3NzX292ZXJyaWRlc0AlJWcKKy9AYnVpbGRfb3ZlcnJpZGVzQC9yICRidWlsZF9vdmVycmlkZXMKK3MlQGJ1aWxkX292ZXJyaWRlc0AlJWcKKy9AbGFuZ3VhZ2VfZnJhZ21lbnRzQC9yICRsYW5ndWFnZV9mcmFnbWVudHMKK3MlQGxhbmd1YWdlX2ZyYWdtZW50c0AlJWcKKy9AbGFuZ3VhZ2VfaG9va3NAL3IgJGxhbmd1YWdlX2hvb2tzCitzJUBsYW5ndWFnZV9ob29rc0AlJWcKKworQ0VPRgorRU9GCisKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKworIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKKyMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgorYWNfbWF4X3NlZF9jbWRzPTkwICMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2VkIHNjcmlwdC4KK2FjX2ZpbGU9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCithY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KK2FjX2VuZD0kYWNfbWF4X3NlZF9jbWRzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KK2FjX21vcmVfbGluZXM9OgorYWNfc2VkX2NtZHM9IiIKK3doaWxlICRhY19tb3JlX2xpbmVzOyBkbworICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KKyAgICBzZWQgIjEsJHthY19iZWd9ZDsgJHthY19lbmR9cSIgY29uZnRlc3Quc3VicyA+IGNvbmZ0ZXN0LnMkYWNfZmlsZQorICBlbHNlCisgICAgc2VkICIke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4gY29uZnRlc3QucyRhY19maWxlCisgIGZpCisgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5zJGFjX2ZpbGU7IHRoZW4KKyAgICBhY19tb3JlX2xpbmVzPWZhbHNlCisgICAgcm0gLWYgY29uZnRlc3QucyRhY19maWxlCisgIGVsc2UKKyAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisgICAgICBhY19zZWRfY21kcz0ic2VkIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZSIKKyAgICBlbHNlCisgICAgICBhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZSIKKyAgICBmaQorICAgIGFjX2ZpbGU9YGV4cHIgJGFjX2ZpbGUgKyAxYAorICAgIGFjX2JlZz0kYWNfZW5kCisgICAgYWNfZW5kPWBleHByICRhY19lbmQgKyAkYWNfbWF4X3NlZF9jbWRzYAorICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorICBhY19zZWRfY21kcz1jYXQKK2ZpCitFT0YKKworY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCisKK0NPTkZJR19GSUxFUz1cJHtDT05GSUdfRklMRVMtIiRhbGxfb3V0cHV0cyJ9CitFT0YKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKK2ZvciBhY19maWxlIGluIC4uICRDT05GSUdfRklMRVM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCisgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgY2FzZSAiJGFjX2ZpbGUiIGluCisgICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpdKjolJSdgCisgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CisgICopIGFjX2ZpbGVfaW49IiR7YWNfZmlsZX0uaW4iIDs7CisgIGVzYWMKKworICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2RpciwgdG9wX3NyY2RpciwgYW5kIElOU1RBTEwgZm9yIHN1YmRpcmVjdG9yaWVzLgorCisgICMgUmVtb3ZlIGxhc3Qgc2xhc2ggYW5kIGFsbCB0aGF0IGZvbGxvd3MgaXQuICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSBkaXJuYW1lLgorICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICBpZiB0ZXN0ICIkYWNfZGlyIiAhPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorICAgIHRlc3QgISAtZCAiJGFjX2RpciIgJiYgbWtkaXIgIiRhY19kaXIiCisgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICRhY19kaXJ8c2VkICdzJV5cLi8lJSdgIgorICAgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgICAgYWNfZG90cz1gZWNobyAkYWNfZGlyX3N1ZmZpeHxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgZWxzZQorICAgIGFjX2Rpcl9zdWZmaXg9IGFjX2RvdHM9CisgIGZpCisKKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgLikgIHNyY2Rpcj0uCisgICAgICBpZiB0ZXN0IC16ICIkYWNfZG90cyI7IHRoZW4gdG9wX3NyY2Rpcj0uCisgICAgICBlbHNlIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYDsgZmkgOzsKKyAgLyopIHNyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3VmZml4IjsgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIHNyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgiCisgICAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICBlc2FjCisKKyAgY2FzZSAiJGFjX2dpdmVuX0lOU1RBTEwiIGluCisgIFsvJF0qKSBJTlNUQUxMPSIkYWNfZ2l2ZW5fSU5TVEFMTCIgOzsKKyAgKikgSU5TVEFMTD0iJGFjX2RvdHMkYWNfZ2l2ZW5fSU5TVEFMTCIgOzsKKyAgZXNhYworCisgIGVjaG8gY3JlYXRpbmcgIiRhY19maWxlIgorICBybSAtZiAiJGFjX2ZpbGUiCisgIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBgZWNobyAkYWNfZmlsZV9pbnxzZWQgJ3MlLiovJSUnYCBieSBjb25maWd1cmUuIgorICBjYXNlICIkYWNfZmlsZSIgaW4KKyAgKk1ha2VmaWxlKikgYWNfY29tc3ViPSIxaVxcCisjICRjb25maWd1cmVfaW5wdXQiIDs7CisgICopIGFjX2NvbXN1Yj0gOzsKKyAgZXNhYworCisgIGFjX2ZpbGVfaW5wdXRzPWBlY2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUgJGFjX2dpdmVuX3NyY2Rpci8lZyJgCisgIHNlZCAtZSAiJGFjX2NvbXN1YgorcyVAY29uZmlndXJlX2lucHV0QCUkY29uZmlndXJlX2lucHV0JWcKK3MlQHNyY2RpckAlJHNyY2RpciVnCitzJUB0b3Bfc3JjZGlyQCUkdG9wX3NyY2RpciVnCitzJUBJTlNUQUxMQCUkSU5TVEFMTCVnCisiICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+ICRhY19maWxlCitmaTsgZG9uZQorcm0gLWYgY29uZnRlc3QucyoKKworIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKyMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyMKKyMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KK2FjX2RBPSdzJV5cKFsgCV0qXCkjXChbIAldKmRlZmluZVsgCV1bIAldKlwpJworYWNfZEI9J1woWyAJXVsgCV0qXClbXiAJXSolXDEjXDInCithY19kQz0nXDMnCithY19kRD0nJWcnCisjIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRoIHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgorYWNfdUE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCithY191Qj0nXChbIAldXCklXDEjXDJkZWZpbmVcMycKK2FjX3VDPScgJworYWNfdUQ9J1w0JWcnCisjIGFjX2UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgorYWNfZUE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCithY19lQj0nJCVcMSNcMmRlZmluZVwzJworYWNfZUM9JyAnCithY19lRD0nJWcnCisKK2lmIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgIT0gc2V0OyB0aGVuCitFT0YKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorICBDT05GSUdfSEVBREVSUz0iY29uZmlnLmg6Y29uZmlnLmluIgorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCitmaQorZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19IRUFERVJTOyBkbyBpZiB0ZXN0ICJ4JGFjX2ZpbGUiICE9IHguLjsgdGhlbgorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqOiopIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlW146XSo6JSUnYAorICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworICBlc2FjCisKKyAgZWNobyBjcmVhdGluZyAkYWNfZmlsZQorCisgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gY29uZnRlc3Qub3V0CisgIGFjX2ZpbGVfaW5wdXRzPWBlY2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUgJGFjX2dpdmVuX3NyY2Rpci8lZyJgCisgIGNhdCAkYWNfZmlsZV9pbnB1dHMgPiBjb25mdGVzdC5pbgorCitFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBjb25mdGVzdC52YWxzIHRoYXQgc3Vic3RpdHV0ZXMKKyMgdGhlIHByb3BlciB2YWx1ZXMgaW50byBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLiAgQW5kIGZpcnN0OgorIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKyMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGluIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cy4KK3JtIC1mIGNvbmZ0ZXN0LnZhbHMKK2NhdCA+IGNvbmZ0ZXN0LmhkciA8PFxFT0YKK3MvW1xcJiVdL1xcJi9nCitzJVtcXCRgXSVcXCYlZworcyUjZGVmaW5lIFwoW0EtWmEtel9dW0EtWmEtejAtOV9dKlwpICpcKC4qXCklJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0lZ3AKK3MlYWNfZCVhY191JWdwCitzJWFjX3UlYWNfZSVncAorRU9GCitzZWQgLW4gLWYgY29uZnRlc3QuaGRyIGNvbmZkZWZzLmggPiBjb25mdGVzdC52YWxzCitybSAtZiBjb25mdGVzdC5oZHIKKworIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCitjYXQgPj4gY29uZnRlc3QudmFscyA8PFxFT0YKK3MlXlsgCV0qI1sgCV0qdW5kZWZbIAldWyAJXSpbYS16QS1aX11bYS16QS1aXzAtOV0qJS8qICYgKi8lCitFT0YKKworIyBCcmVhayB1cCBjb25mdGVzdC52YWxzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uCisjIHRoZSBzaXplIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vLgorCitybSAtZiBjb25mdGVzdC50YWlsCit3aGlsZSA6CitkbworICBhY19saW5lcz1gZ3JlcCAtYyAuIGNvbmZ0ZXN0LnZhbHNgCisgICMgZ3JlcCAtYyBnaXZlcyBlbXB0eSBvdXRwdXQgZm9yIGFuIGVtcHR5IGZpbGUgb24gc29tZSBBSVggc3lzdGVtcy4KKyAgaWYgdGVzdCAteiAiJGFjX2xpbmVzIiB8fCB0ZXN0ICIkYWNfbGluZXMiIC1lcSAwOyB0aGVuIGJyZWFrOyBmaQorICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gY29uZnRlc3QuZnJhZy4KKyAgZWNobyAnICBjYXQgPiBjb25mdGVzdC5mcmFnIDw8Q0VPRicgPj4gJENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC52YWxzID4+ICRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YKKyAgc2VkIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gPiBjb25mdGVzdC5vdXQKKyAgcm0gLWYgY29uZnRlc3QuaW4KKyAgbXYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0LmluCisnID4+ICRDT05GSUdfU1RBVFVTCisgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC52YWxzID4gY29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC52YWxzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudmFscworZG9uZQorcm0gLWYgY29uZnRlc3QudmFscworCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaAorICBlY2hvICIvKiAkYWNfZmlsZS4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4gICovIiA+IGNvbmZ0ZXN0LmgKKyAgY2F0IGNvbmZ0ZXN0LmluID4+IGNvbmZ0ZXN0LmgKKyAgcm0gLWYgY29uZnRlc3QuaW4KKyAgaWYgY21wIC1zICRhY19maWxlIGNvbmZ0ZXN0LmggMj4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICIkYWNfZmlsZSBpcyB1bmNoYW5nZWQiCisgICAgcm0gLWYgY29uZnRlc3QuaAorICBlbHNlCisgICAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCisgICAgICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICAgICAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorICAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKyAgICBmaQorICAgIHJtIC1mICRhY19maWxlCisgICAgbXYgY29uZnRlc3QuaCAkYWNfZmlsZQorICBmaQorZmk7IGRvbmUKKworRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKworaG9zdD0nJHtob3N0fScKK2J1aWxkPScke2J1aWxkfScKK3RhcmdldD0nJHt0YXJnZXR9JwordGFyZ2V0X2FsaWFzPScke3RhcmdldF9hbGlhc30nCitzcmNkaXI9JyR7c3JjZGlyfScKK3N1YmRpcnM9JyR7c3ViZGlyc30nCitvbGRzdHlsZV9zdWJkaXJzPScke29sZHN0eWxlX3N1YmRpcnN9Jworc3ltYm9saWNfbGluaz0nJHtzeW1ib2xpY19saW5rfScKK3Byb2dyYW1fdHJhbnNmb3JtX3NldD0nJHtwcm9ncmFtX3RyYW5zZm9ybV9zZXR9JworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0nJHtwcm9ncmFtX3RyYW5zZm9ybV9uYW1lfScKK2RlcF9ob3N0X3htYWtlX2ZpbGU9JyR7ZGVwX2hvc3RfeG1ha2VfZmlsZX0nCitob3N0X3htYWtlX2ZpbGU9JyR7aG9zdF94bWFrZV9maWxlfScKK2RlcF90bWFrZV9maWxlPScke2RlcF90bWFrZV9maWxlfScKK3RtYWtlX2ZpbGU9JyR7dG1ha2VfZmlsZX0nCit0aHJlYWRfZmlsZT0nJHt0aHJlYWRfZmlsZX0nCit2ZXJzaW9uPScke3ZlcnNpb259JworbG9jYWxfcHJlZml4PScke2xvY2FsX3ByZWZpeH0nCitidWlsZF9pbnN0YWxsX2hlYWRlcnNfZGlyPScke2J1aWxkX2luc3RhbGxfaGVhZGVyc19kaXJ9JworYnVpbGRfZXhlZXh0PScke2J1aWxkX2V4ZWV4dH0nCitnZGJfbmVlZHNfb3V0X2ZpbGVfcGF0aD0nJHtnZGJfbmVlZHNfb3V0X2ZpbGVfcGF0aH0nCitTRVRfTUFLRT0nJHtTRVRfTUFLRX0nCitidWlsZF9icm9rZW5faW5zdGFsbD0nJHtidWlsZF9icm9rZW5faW5zdGFsbH0nCit0YXJnZXRfbGlzdD0nJHt0YXJnZXRfbGlzdH0nCit0YXJnZXRfb3ZlcnJpZGVzPScke3RhcmdldF9vdmVycmlkZXN9JworaG9zdF9vdmVycmlkZXM9JyR7aG9zdF9vdmVycmlkZXN9JworY3Jvc3NfZGVmaW5lcz0nJHtjcm9zc19kZWZpbmVzfScKK2Nyb3NzX292ZXJyaWRlcz0nJHtjcm9zc19vdmVycmlkZXN9JworYnVpbGRfb3ZlcnJpZGVzPScke2J1aWxkX292ZXJyaWRlc30nCisKK0VPRgorY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgorCisuICRzcmNkaXIvY29uZmlndXJlLmxhbmcKK2Nhc2UgeCRDT05GSUdfSEVBREVSUyBpbgoreGNvbmZpZy5oOmNvbmZpZy5pbikKK2VjaG8gPiBjc3RhbXAtaCA7OworZXNhYworCitleGl0IDAKK0VPRgorY2htb2QgK3ggJENPTkZJR19TVEFUVVMKK3JtIC1mciBjb25mZGVmcyogJGFjX2NsZWFuX2ZpbGVzCit0ZXN0ICIkbm9fY3JlYXRlIiA9IHllcyB8fCAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkQ09ORklHX1NUQVRVUyB8fCBleGl0IDEKKwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3BhcnNlLmMgYi9nY2MvY3AvcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE5ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2NwL3BhcnNlLmMKQEAgLTAsMCArMSw4MzM4IEBACisKKy8qICBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBhcnNlLnkgd2l0aCBCaXNvbiB2ZXJzaW9uIEdOVSBCaXNvbiB2ZXJzaW9uIDEuMjQKKyAgKi8KKworI2RlZmluZSBZWUJJU09OIDEgIC8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisKKyNkZWZpbmUJSURFTlRJRklFUgkyNTgKKyNkZWZpbmUJVFlQRU5BTUUJMjU5CisjZGVmaW5lCVNFTEZOQU1FCTI2MAorI2RlZmluZQlTQ1NQRUMJMjYxCisjZGVmaW5lCVRZUEVTUEVDCTI2MgorI2RlZmluZQlDVl9RVUFMSUZJRVIJMjYzCisjZGVmaW5lCUNPTlNUQU5UCTI2NAorI2RlZmluZQlTVFJJTkcJMjY1CisjZGVmaW5lCUVMTElQU0lTCTI2NgorI2RlZmluZQlTSVpFT0YJMjY3CisjZGVmaW5lCUVOVU0JMjY4CisjZGVmaW5lCUlGCTI2OQorI2RlZmluZQlFTFNFCTI3MAorI2RlZmluZQlXSElMRQkyNzEKKyNkZWZpbmUJRE8JMjcyCisjZGVmaW5lCUZPUgkyNzMKKyNkZWZpbmUJU1dJVENICTI3NAorI2RlZmluZQlDQVNFCTI3NQorI2RlZmluZQlERUZBVUxUCTI3NgorI2RlZmluZQlCUkVBSwkyNzcKKyNkZWZpbmUJQ09OVElOVUUJMjc4CisjZGVmaW5lCVJFVFVSTgkyNzkKKyNkZWZpbmUJR09UTwkyODAKKyNkZWZpbmUJQVNNX0tFWVdPUkQJMjgxCisjZGVmaW5lCUdDQ19BU01fS0VZV09SRAkyODIKKyNkZWZpbmUJVFlQRU9GCTI4MworI2RlZmluZQlBTElHTk9GCTI4NAorI2RlZmluZQlTSUdPRgkyODUKKyNkZWZpbmUJQVRUUklCVVRFCTI4NgorI2RlZmluZQlFWFRFTlNJT04JMjg3CisjZGVmaW5lCUxBQkVMCTI4OAorI2RlZmluZQlSRUFMUEFSVAkyODkKKyNkZWZpbmUJSU1BR1BBUlQJMjkwCisjZGVmaW5lCUFHR1IJMjkxCisjZGVmaW5lCVZJU1NQRUMJMjkyCisjZGVmaW5lCURFTEVURQkyOTMKKyNkZWZpbmUJTkVXCTI5NAorI2RlZmluZQlUSElTCTI5NQorI2RlZmluZQlPUEVSQVRPUgkyOTYKKyNkZWZpbmUJQ1hYX1RSVUUJMjk3CisjZGVmaW5lCUNYWF9GQUxTRQkyOTgKKyNkZWZpbmUJTkFNRVNQQUNFCTI5OQorI2RlZmluZQlUWVBFTkFNRV9LRVlXT1JECTMwMAorI2RlZmluZQlVU0lORwkzMDEKKyNkZWZpbmUJTEVGVF9SSUdIVAkzMDIKKyNkZWZpbmUJVEVNUExBVEUJMzAzCisjZGVmaW5lCVRZUEVJRAkzMDQKKyNkZWZpbmUJRFlOQU1JQ19DQVNUCTMwNQorI2RlZmluZQlTVEFUSUNfQ0FTVAkzMDYKKyNkZWZpbmUJUkVJTlRFUlBSRVRfQ0FTVAkzMDcKKyNkZWZpbmUJQ09OU1RfQ0FTVAkzMDgKKyNkZWZpbmUJU0NPUEUJMzA5CisjZGVmaW5lCUVNUFRZCTMxMAorI2RlZmluZQlQVFlQRU5BTUUJMzExCisjZGVmaW5lCU5TTkFNRQkzMTIKKyNkZWZpbmUJVEhST1cJMzEzCisjZGVmaW5lCUFTU0lHTgkzMTQKKyNkZWZpbmUJT1JPUgkzMTUKKyNkZWZpbmUJQU5EQU5ECTMxNgorI2RlZmluZQlNSU5fTUFYCTMxNworI2RlZmluZQlFUUNPTVBBUkUJMzE4CisjZGVmaW5lCUFSSVRIQ09NUEFSRQkzMTkKKyNkZWZpbmUJTFNISUZUCTMyMAorI2RlZmluZQlSU0hJRlQJMzIxCisjZGVmaW5lCVBPSU5UU0FUX1NUQVIJMzIyCisjZGVmaW5lCURPVF9TVEFSCTMyMworI2RlZmluZQlVTkFSWQkzMjQKKyNkZWZpbmUJUExVU1BMVVMJMzI1CisjZGVmaW5lCU1JTlVTTUlOVVMJMzI2CisjZGVmaW5lCUhZUEVSVU5BUlkJMzI3CisjZGVmaW5lCVBBUkVOX1NUQVJfUEFSRU4JMzI4CisjZGVmaW5lCVBPSU5UU0FUCTMyOQorI2RlZmluZQlUUlkJMzMwCisjZGVmaW5lCUNBVENICTMzMQorI2RlZmluZQlUWVBFTkFNRV9FTExJUFNJUwkzMzIKKyNkZWZpbmUJUFJFX1BBUlNFRF9GVU5DVElPTl9ERUNMCTMzMworI2RlZmluZQlFWFRFUk5fTEFOR19TVFJJTkcJMzM0CisjZGVmaW5lCUFMTAkzMzUKKyNkZWZpbmUJUFJFX1BBUlNFRF9DTEFTU19ERUNMCTMzNgorI2RlZmluZQlERUZBUkcJMzM3CisjZGVmaW5lCURFRkFSR19NQVJLRVIJMzM4CisjZGVmaW5lCVRZUEVOQU1FX0RFRk4JMzM5CisjZGVmaW5lCUlERU5USUZJRVJfREVGTgkzNDAKKyNkZWZpbmUJUFRZUEVOQU1FX0RFRk4JMzQxCisjZGVmaW5lCUVORF9PRl9MSU5FCTM0MgorI2RlZmluZQlFTkRfT0ZfU0FWRURfSU5QVVQJMzQzCisKKyNsaW5lIDI5ICJwYXJzZS55IgorCisvKiBDYXVzZSB0aGUgYHl5ZGVidWcnIHZhcmlhYmxlIHRvIGJlIGRlZmluZWQuICAqLworI2RlZmluZSBZWURFQlVHIDEKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImlucHV0LmgiCisjaW5jbHVkZSAiZmxhZ3MuaCIKKyNpbmNsdWRlICJsZXguaCIKKyNpbmNsdWRlICJjcC10cmVlLmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisKKy8qIFNpbmNlIHBhcnNlcnMgYXJlIGRpc3RpbmN0IGZvciBlYWNoIGxhbmd1YWdlLCBwdXQgdGhlIGxhbmd1YWdlIHN0cmluZworICAgZGVmaW5pdGlvbiBoZXJlLiAgKGZuZikgKi8KK2NoYXIgKmxhbmd1YWdlX3N0cmluZyA9ICJHTlUgQysrIjsKKworZXh0ZXJuIHRyZWUgdm9pZF9saXN0X25vZGU7CitleHRlcm4gc3RydWN0IG9ic3RhY2sgcGVybWFuZW50X29ic3RhY2s7CisKKyNpZm5kZWYgZXJybm8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKworZXh0ZXJuIGludCBlbmRfb2ZfZmlsZTsKK2V4dGVybiBpbnQgY3VycmVudF9jbGFzc19kZXB0aDsKK2V4dGVybiB0cmVlIGxhc3RfdHJlZTsKKworLyogRlNGIExPQ0FMIGRqZSBwcmVmaXggYXR0cmlidXRlcyAqLworZXh0ZXJuIHRyZWUgc3RyaXBfYXR0cnMJCVBST1RPKCh0cmVlKSk7CisvKiBFTkQgRlNGIExPQ0FMICovCisKK3ZvaWQgeXllcnJvciAoKTsKKworLyogTGlrZSBZWUVSUk9SIGJ1dCBkbyBjYWxsIHl5ZXJyb3IuICAqLworI2RlZmluZSBZWUVSUk9SMSB7IHl5ZXJyb3IgKCJzeW50YXggZXJyb3IiKTsgWVlFUlJPUjsgfQorCisjZGVmaW5lIE9QMChOT0RFKSAoVFJFRV9PUEVSQU5EIChOT0RFLCAwKSkKKyNkZWZpbmUgT1AxKE5PREUpIChUUkVFX09QRVJBTkQgKE5PREUsIDEpKQorCisvKiBDb250YWlucyB0aGUgc3RhdGVtZW50IGtleXdvcmQgKGlmL3doaWxlL2RvKSB0byBpbmNsdWRlIGluIGFuCisgICBlcnJvciBtZXNzYWdlIGlmIHRoZSB1c2VyIHN1cHBsaWVzIGFuIGVtcHR5IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uICAqLworc3RhdGljIGNoYXIgKmNvbmRfc3RtdF9rZXl3b3JkOworCisvKiBOb256ZXJvIGlmIHdlIGhhdmUgYW4gYGV4dGVybiAiQyInIGFjdGluZyBhcyBhbiBleHRlcm4gc3BlY2lmaWVyLiAgKi8KK2ludCBoYXZlX2V4dGVybl9zcGVjOworaW50IHVzZWRfZXh0ZXJuX3NwZWM7CisKK3ZvaWQgeXlob29rICgpOworCisvKiBDb25zIHVwIGFuIGVtcHR5IHBhcmFtZXRlciBsaXN0LiAgKi8KKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbmRpZgorc3RhdGljIHRyZWUKK2VtcHR5X3Bhcm1zICgpCit7CisgIHRyZWUgcGFybXM7CisKKyAgaWYgKHN0cmljdF9wcm90b3R5cGUKKyAgICAgIC8qIE9ubHkgZ28gYWhlYWQgd2l0aCB1c2luZyB0aGUgdm9pZCBsaXN0IG5vZGUgaWYgd2UncmUgYWN0dWFsbHkKKwkgcGFyc2luZyBhIGNsYXNzIGluIEMrKywgbm90IGEgc3RydWN0IGluIGV4dGVybiAiQyIgbW9kZS4gICovCisgICAgICB8fCAoY3VycmVudF9jbGFzc190eXBlICE9IE5VTEwKKwkgICYmIGN1cnJlbnRfbGFuZ19uYW1lID09IGxhbmdfbmFtZV9jcGx1c3BsdXMpKQorICAgIHBhcm1zID0gdm9pZF9saXN0X25vZGU7CisgIGVsc2UKKyAgICBwYXJtcyA9IE5VTExfVFJFRTsKKyAgcmV0dXJuIHBhcm1zOworfQorCisjbGluZSAxMDUgInBhcnNlLnkiCit0eXBlZGVmIHVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBjaGFyICpzdHJ0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOyBmbGFnZ2VkX3R5cGVfdHJlZSBmdHlwZTsgfSBZWVNUWVBFOworI2xpbmUgMjg4ICJwYXJzZS55IgorCisvKiBMaXN0IG9mIHR5cGVzIGFuZCBzdHJ1Y3R1cmUgY2xhc3NlcyBvZiB0aGUgY3VycmVudCBkZWNsYXJhdGlvbi4gICovCitzdGF0aWMgdHJlZSBjdXJyZW50X2RlY2xzcGVjcyA9IE5VTExfVFJFRTsKKy8qIExpc3Qgb2YgcHJlZml4IGF0dHJpYnV0ZXMgaW4gZWZmZWN0LgorICAgUHJlZml4IGF0dHJpYnV0ZXMgYXJlIHBhcnNlZCBieSB0aGUgcmVzZXJ2ZWRfZGVjbHNwZWNzIGFuZCBkZWNsbW9kcworICAgcnVsZXMuICBUaGV5IGNyZWF0ZSBhIGxpc3QgdGhhdCBjb250YWlucyAqYm90aCogZGVjbHNwZWNzIGFuZCBhdHRycy4gICovCisvKiA/Pz8gSXQgaXMgbm90IGNsZWFyIHlldCB0aGF0IGFsbCBjYXNlcyB3aGVyZSBhbiBhdHRyaWJ1dGUgY2FuIG5vdyBhcHBlYXIgaW4KKyAgIGEgZGVjbHNwZWMgbGlzdCBoYXZlIGJlZW4gdXBkYXRlZC4gICovCitzdGF0aWMgdHJlZSBwcmVmaXhfYXR0cmlidXRlcyA9IE5VTExfVFJFRTsKKworLyogV2hlbiBkZWZpbmluZyBhbiBhZ2dyZWdhdGUsIHRoaXMgaXMgdGhlIG1vc3QgcmVjZW50IG9uZSBiZWluZyBkZWZpbmVkLiAgKi8KK3N0YXRpYyB0cmVlIGN1cnJlbnRfYWdncjsKKworLyogVGVsbCB5eXBhcnNlIGhvdyB0byBwcmludCBhIHRva2VuJ3MgdmFsdWUsIGlmIHl5ZGVidWcgaXMgc2V0LiAgKi8KKworI2RlZmluZSBZWVBSSU5UKEZJTEUsWVlDSEFSLFlZTFZBTCkgeXlwcmludChGSUxFLFlZQ0hBUixZWUxWQUwpCitleHRlcm4gdm9pZCB5eXByaW50ICgpOworZXh0ZXJuIHRyZWUgY29tYmluZV9zdHJpbmdzCQlQUk9UTygodHJlZSkpOworCisjaWZuZGVmIFlZTFRZUEUKK3R5cGVkZWYKKyAgc3RydWN0IHl5bHR5cGUKKyAgICB7CisgICAgICBpbnQgdGltZXN0YW1wOworICAgICAgaW50IGZpcnN0X2xpbmU7CisgICAgICBpbnQgZmlyc3RfY29sdW1uOworICAgICAgaW50IGxhc3RfbGluZTsKKyAgICAgIGludCBsYXN0X2NvbHVtbjsKKyAgICAgIGNoYXIgKnRleHQ7CisgICB9CisgIHl5bHR5cGU7CisKKyNkZWZpbmUgWVlMVFlQRSB5eWx0eXBlCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNpZm5kZWYgX19TVERDX18KKyNkZWZpbmUgY29uc3QKKyNlbmRpZgorI2VuZGlmCisKKworCisjZGVmaW5lCVlZRklOQUwJCTE0NTkKKyNkZWZpbmUJWVlGTEFHCQktMzI3NjgKKyNkZWZpbmUJWVlOVEJBU0UJMTEzCisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoeCkgKCh1bnNpZ25lZCkoeCkgPD0gMzQzID8geXl0cmFuc2xhdGVbeF0gOiAzNjYpCisKK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPSB7ICAgICAwLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAxMTEsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDgyLCAgICA3MCwgICAgIDIsICAgIDkzLAorICAgMTA5LCAgICA4MCwgICAgNzgsICAgIDU5LCAgICA3OSwgICAgOTIsICAgIDgxLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA2MiwgICAgNjAsICAgIDc0LAorICAgIDY0LCAgICA3NSwgICAgNjUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgIDk0LCAgICAgMiwgICAxMTIsICAgIDY5LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgNTgsICAgIDY4LCAgIDExMCwgICAgODgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgIDU2LCAgICA1NywgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNjcsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc2LAorICAgIDc3LCAgICA4MywgICAgODQsICAgIDg1LCAgICA4NiwgICAgODcsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDk1LAorICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LAorICAgMTA2LCAgIDEwNywgICAxMDgKK307CisKKyNpZiBZWURFQlVHICE9IDAKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9IHsgICAgIDAsCisgICAgIDAsICAgICAxLCAgICAgMywgICAgIDQsICAgICA3LCAgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgMTcsICAgIDE5LCAgICAyMSwgICAgMjIsICAgIDI1LCAgICAyOCwgICAgMzAsICAgIDMyLCAgICAzOCwgICAgNDMsCisgICAgNDksICAgIDU0LCAgICA1NSwgICAgNjIsICAgIDYzLCAgICA2OSwgICAgNzUsICAgIDc4LCAgICA4MywgICAgODYsCisgICAgODksICAgIDkzLCAgICA5NywgICAgOTksICAgMTAxLCAgIDEwNCwgICAxMDcsICAgMTA5LCAgIDExMiwgICAxMTMsCisgICAxMTksICAgMTIzLCAgIDEyNSwgICAxMjksICAgMTMxLCAgIDEzNCwgICAxMzYsICAgMTM5LCAgIDE0MSwgICAxNDUsCisgICAxNDcsICAgMTUxLCAgIDE1NCwgICAxNTcsICAgMTYwLCAgIDE2NCwgICAxNjgsICAgMTcxLCAgIDE3NCwgICAxNzcsCisgICAxODAsICAgMTgzLCAgIDE4NSwgICAxODcsICAgMTg5LCAgIDE5MCwgICAxOTIsICAgMTk1LCAgIDE5NiwgICAxOTgsCisgICAyMDMsICAgMjA3LCAgIDIxMSwgICAyMTIsICAgMjIxLCAgIDIyNywgICAyMjgsICAgMjM4LCAgIDI0NSwgICAyNDYsCisgICAyNTUsICAgMjYxLCAgIDI2MiwgICAyNzIsICAgMjc5LCAgIDI4MiwgICAyODUsICAgMjg3LCAgIDI5MCwgICAyOTIsCisgICAyOTksICAgMzA0LCAgIDMxMSwgICAzMTYsICAgMzE5LCAgIDMyMSwgICAzMjQsICAgMzI3LCAgIDMyOSwgICAzMzIsCisgICAzMzQsICAgMzM3LCAgIDM0MCwgICAzNDUsICAgMzQ4LCAgIDM1MiwgICAzNTMsICAgMzU0LCAgIDM1NiwgICAzNjAsCisgICAzNjMsICAgMzY3LCAgIDM2OSwgICAzNzQsICAgMzc3LCAgIDM4MiwgICAzODUsICAgMzkwLCAgIDM5MywgICAzOTUsCisgICAzOTcsICAgMzk5LCAgIDQwMSwgICA0MDMsICAgNDA1LCAgIDQwNywgICA0MDksICAgNDExLCAgIDQxMywgICA0MTUsCisgICA0MTksICAgNDIzLCAgIDQyNiwgICA0MjksICAgNDM0LCAgIDQzOSwgICA0NDMsICAgNDQ3LCAgIDQ1MiwgICA0NTYsCisgICA0NjEsICAgNDY1LCAgIDQ2NywgICA0NzIsICAgNDc2LCAgIDQ3OCwgICA0ODAsICAgNDgyLCAgIDQ4NiwgICA0ODgsCisgICA0OTAsICAgNDkyLCAgIDQ5NCwgICA0OTYsICAgNDk4LCAgIDUwMCwgICA1MDIsICAgNTA0LCAgIDUwNiwgICA1MTAsCisgICA1MTIsICAgNTE2LCAgIDUxNywgICA1MTksICAgNTIxLCAgIDUyMiwgICA1MzAsICAgNTMyLCAgIDUzNCwgICA1MzgsCisgICA1NDMsICAgNTQ3LCAgIDU0OCwgICA1NTIsICAgNTU0LCAgIDU1OCwgICA1NjIsICAgNTY2LCAgIDU3MCwgICA1NzIsCisgICA1NzQsICAgNTc2LCAgIDU3OSwgICA1ODIsICAgNTg1LCAgIDU4OCwgICA1OTEsICAgNTk0LCAgIDU5NywgICA2MDIsCisgICA2MDUsICAgNjEwLCAgIDYxMywgICA2MTcsICAgNjIxLCAgIDYyNiwgICA2MzEsICAgNjM3LCAgIDY0MywgICA2NTAsCisgICA2NTMsICAgNjU4LCAgIDY2NCwgICA2NjcsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjgyLCAgIDY4NCwgICA2ODgsCisgICA2OTEsICAgNjk1LCAgIDcwMCwgICA3MDIsICAgNzA1LCAgIDcxMSwgICA3MTMsICAgNzE3LCAgIDcyMSwgICA3MjUsCisgICA3MjksICAgNzMzLCAgIDczNywgICA3NDEsICAgNzQ1LCAgIDc0OSwgICA3NTMsICAgNzU3LCAgIDc2MSwgICA3NjUsCisgICA3NjksICAgNzczLCAgIDc3NywgICA3ODEsICAgNzg1LCAgIDc4OSwgICA3OTUsICAgNzk5LCAgIDgwMywgICA4MDUsCisgICA4MDgsICAgODEyLCAgIDgxNCwgICA4MTYsICAgODE4LCAgIDgyMCwgICA4MjIsICAgODI0LCAgIDgyNiwgICA4MjgsCisgICA4MzEsICAgODM0LCAgIDgzOCwgICA4NDAsICAgODQyLCAgIDg0NiwgICA4NDgsICAgODUwLCAgIDg1MiwgICA4NTQsCisgICA4NTgsICAgODYyLCAgIDg2NiwgICA4NjcsICAgODcyLCAgIDg3NywgICA4ODAsICAgODg1LCAgIDg4OCwgICA4OTEsCisgICA4OTMsICAgODk4LCAgIDkwMCwgICA5MDgsICAgOTE2LCAgIDkyNCwgICA5MzIsICAgOTM3LCAgIDk0MiwgICA5NDUsCisgICA5NDgsICAgOTUwLCAgIDk1NSwgICA5NTgsICAgOTYxLCAgIDk2NCwgICA5NzAsICAgOTc0LCAgIDk4MCwgICA5ODQsCisgICA5ODksICAgOTk2LCAgIDk5OSwgIDEwMDEsICAxMDA0LCAgMTAwNiwgIDEwMDksICAxMDExLCAgMTAxMywgIDEwMTUsCisgIDEwMTgsICAxMDE5LCAgMTAyMiwgIDEwMjUsICAxMDI5LCAgMTAzMywgIDEwMzcsICAxMDQwLCAgMTA0MywgIDEwNDYsCisgIDEwNDgsICAxMDUwLCAgMTA1MiwgIDEwNTUsICAxMDU4LCAgMTA2MSwgIDEwNjQsICAxMDY2LCAgMTA2OCwgIDEwNzAsCisgIDEwNzIsICAxMDc1LCAgMTA3OCwgIDEwODIsICAxMDg2LCAgMTA5MCwgIDEwOTUsICAxMDk3LCAgMTEwMCwgIDExMDMsCisgIDExMDYsICAxMTA4LCAgMTExMCwgIDExMTIsICAxMTE1LCAgMTExOCwgIDExMjEsICAxMTIzLCAgMTEyNSwgIDExMjgsCisgIDExMzEsICAxMTM1LCAgMTEzNywgIDExNDAsICAxMTQyLCAgMTE0NCwgIDExNDYsICAxMTUxLCAgMTE1NiwgIDExNjEsCisgIDExNjYsICAxMTY4LCAgMTE3MCwgIDExNzIsICAxMTc0LCAgMTE3OCwgIDExODAsICAxMTg0LCAgMTE4NiwgIDExOTAsCisgIDExOTEsICAxMTk2LCAgMTE5NywgIDEyMDQsICAxMjA4LCAgMTIwOSwgIDEyMTYsICAxMjIwLCAgMTIyMSwgIDEyMjgsCisgIDEyMzIsICAxMjMzLCAgMTI0MCwgIDEyNDQsICAxMjQ1LCAgMTI0NywgIDEyNDksICAxMjUyLCAgMTI1OSwgIDEyNjEsCisgIDEyNjUsICAxMjY2LCAgMTI2OCwgIDEyNzMsICAxMjgwLCAgMTI4NSwgIDEyODcsICAxMjg5LCAgMTI5MSwgIDEyOTMsCisgIDEyOTUsICAxMjk5LCAgMTMwMCwgIDEzMDMsICAxMzA1LCAgMTMwOCwgIDEzMTIsICAxMzE3LCAgMTMxOSwgIDEzMjEsCisgIDEzMjUsICAxMzMwLCAgMTMzNywgIDEzNDEsICAxMzQ3LCAgMTM0OSwgIDEzNTQsICAxMzU4LCAgMTM2MiwgIDEzNjMsCisgIDEzNjcsICAxMzcxLCAgMTM3NSwgIDEzNzYsICAxMzc5LCAgMTM4MiwgIDEzODMsICAxMzkxLCAgMTM5NiwgIDEzOTcsCisgIDE0MDQsICAxNDA4LCAgMTQxMSwgIDE0MTQsICAxNDE4LCAgMTQyMywgIDE0MjQsICAxNDI1LCAgMTQzNSwgIDE0MzcsCisgIDE0MzgsICAxNDQwLCAgMTQ0MSwgIDE0NDMsICAxNDQ1LCAgMTQ0OCwgIDE0NTEsICAxNDU0LCAgMTQ1NywgIDE0NjAsCisgIDE0NjMsICAxNDY3LCAgMTQ3MCwgIDE0NzQsICAxNDc1LCAgMTQ3NywgIDE0ODEsICAxNDg0LCAgMTQ4NywgIDE0ODksCisgIDE0OTEsICAxNDkyLCAgMTQ5NSwgIDE0OTksICAxNTAxLCAgMTUwNiwgIDE1MDgsICAxNTEyLCAgMTUxNCwgIDE1MTgsCisgIDE1MjMsICAxNTI4LCAgMTUzMywgIDE1MzYsICAxNTM5LCAgMTU0MywgIDE1NDcsICAxNTQ5LCAgMTU1MCwgIDE1NTIsCisgIDE1NTUsICAxNTYwLCAgMTU2NCwgIDE1NjYsICAxNTY5LCAgMTU3MiwgIDE1NzUsICAxNTc4LCAgMTU4MSwgIDE1ODQsCisgIDE1ODcsICAxNTg5LCAgMTU5MiwgIDE1OTUsICAxNTk4LCAgMTYwMywgIDE2MDgsICAxNjExLCAgMTYxMywgIDE2MTksCisgIDE2MjQsICAxNjI2LCAgMTYyNywgIDE2MjksICAxNjMzLCAgMTYzNCwgIDE2MzYsICAxNjQwLCAgMTY0MiwgIDE2NDQsCisgIDE2NDYsICAxNjQ4LCAgMTY1MywgIDE2NTgsICAxNjYzLCAgMTY2OCwgIDE2NzMsICAxNjc3LCAgMTY4MiwgIDE2ODcsCisgIDE2OTIsICAxNjk3LCAgMTcwMSwgIDE3MDMsICAxNzA3LCAgMTcwOSwgIDE3MTMsICAxNzE2LCAgMTcxOCwgIDE3MjUsCisgIDE3MjYsICAxNzI5LCAgMTczMSwgIDE3MzQsICAxNzM1LCAgMTczOCwgIDE3NDMsICAxNzQ4LCAgMTc1MSwgIDE3NTYsCisgIDE3NjAsICAxNzY0LCAgMTc2NywgIDE3NzAsICAxNzc0LCAgMTc3NiwgIDE3NzgsICAxNzgxLCAgMTc4MywgIDE3ODYsCisgIDE3ODksICAxNzk0LCAgMTc5OSwgIDE4MDMsICAxODA3LCAgMTgxMCwgIDE4MTIsICAxODE2LCAgMTgyMCwgIDE4MjMsCisgIDE4MjYsICAxODMwLCAgMTgzMiwgIDE4MzYsICAxODQwLCAgMTg0MywgIDE4NDYsICAxODUwLCAgMTg1MiwgIDE4NTcsCisgIDE4NjEsICAxODY2LCAgMTg3MCwgIDE4NzIsICAxODc1LCAgMTg3OCwgIDE4ODAsICAxODgzLCAgMTg4OCwgIDE4OTMsCisgIDE4OTYsICAxODk4LCAgMTkwMCwgIDE5MDIsICAxOTA0LCAgMTkwNywgIDE5MTAsICAxOTEzLCAgMTkxNiwgIDE5MTksCisgIDE5MjIsICAxOTI0LCAgMTkyNywgIDE5MzAsICAxOTM0LCAgMTkzNiwgIDE5NDAsICAxOTQzLCAgMTk0NywgIDE5NTAsCisgIDE5NTMsICAxOTU3LCAgMTk1OSwgIDE5NjMsICAxOTY4LCAgMTk3MiwgIDE5NzUsICAxOTc4LCAgMTk4MCwgIDE5ODQsCisgIDE5ODcsICAxOTkwLCAgMTk5MiwgIDE5OTUsICAxOTk5LCAgMjAwMSwgIDIwMDUsICAyMDA3LCAgMjAxNCwgIDIwMTksCisgIDIwMjQsICAyMDI4LCAgMjAzNCwgIDIwMzgsICAyMDQyLCAgMjA0NiwgIDIwNDksICAyMDUxLCAgMjA1MywgIDIwNTYsCisgIDIwNTksICAyMDYyLCAgMjA2MywgIDIwNjQsICAyMDY1LCAgMjA2NywgIDIwNjksICAyMDcyLCAgMjA3NiwgIDIwNzgsCisgIDIwODEsICAyMDgyLCAgMjA4OCwgIDIwODksICAyMDkwLCAgMjA5NywgIDIwOTksICAyMTAwLCAgMjEwNSwgIDIxMDcsCisgIDIxMDksICAyMTExLCAgMjExNCwgIDIxMTUsICAyMTE2LCAgMjEyMywgIDIxMjUsICAyMTI2LCAgMjEyNywgIDIxMzUsCisgIDIxMzYsICAyMTM3LCAgMjE0NSwgIDIxNDYsICAyMTQ3LCAgMjE0OCwgIDIxNDksICAyMTY0LCAgMjE2NSwgIDIxNjYsCisgIDIxNzYsICAyMTc3LCAgMjE4MywgIDIxODQsICAyMTkyLCAgMjE5MywgIDIxOTgsICAyMjAxLCAgMjIwNCwgIDIyMDcsCisgIDIyMTEsICAyMjE4LCAgMjIyNywgIDIyMzgsICAyMjUxLCAgMjI1NiwgIDIyNjAsICAyMjYzLCAgMjI2NiwgIDIyNjgsCisgIDIyNzAsICAyMjcxLCAgMjI3MiwgIDIyNzksICAyMjgwLCAgMjI4MSwgIDIyODcsICAyMjg5LCAgMjI5MiwgIDIyOTMsCisgIDIyOTQsICAyMjk1LCAgMjMwNCwgIDIzMDYsICAyMzA4LCAgMjMxMiwgIDIzMTYsICAyMzE5LCAgMjMyMiwgIDIzMjUsCisgIDIzMjgsICAyMzMxLCAgMjMzMywgIDIzMzYsICAyMzM3LCAgMjMzOSwgIDIzNDAsICAyMzQyLCAgMjM0NCwgIDIzNDUsCisgIDIzNDcsICAyMzQ5LCAgMjM1MywgIDIzNTgsICAyMzYwLCAgMjM2NCwgIDIzNjUsICAyMzY3LCAgMjM2OSwgIDIzNzEsCisgIDIzNzQsICAyMzc3LCAgMjM4MCwgIDIzODIsICAyMzg0LCAgMjM4NywgIDIzOTAsICAyMzkzLCAgMjM5NiwgIDIzOTcsCisgIDI0MDEsICAyNDAzLCAgMjQwNSwgIDI0MDcsICAyNDEwLCAgMjQxMywgIDI0MTYsICAyNDIxLCAgMjQyNCwgIDI0MjcsCisgIDI0MzAsICAyNDMzLCAgMjQzNiwgIDI0MzksICAyNDQxLCAgMjQ0NCwgIDI0NDYsICAyNDQ5LCAgMjQ1MSwgIDI0NTMsCisgIDI0NTQsICAyNDU1LCAgMjQ1NywgIDI0NTgsICAyNDYzLCAgMjQ2NiwgIDI0NjgsICAyNDcwLCAgMjQ3NCwgIDI0NzUsCisgIDI0NzksICAyNDgzLCAgMjQ4NywgIDI0ODksICAyNDkyLCAgMjQ5NSwgIDI0OTgsICAyNTAxLCAgMjUwNCwgIDI1MDcsCisgIDI1MTAsICAyNTEzLCAgMjUxNiwgIDI1MTksICAyNTIyLCAgMjUyNSwgIDI1MjgsICAyNTMxLCAgMjUzNCwgIDI1MzcsCisgIDI1NDAsICAyNTQzLCAgMjU0NiwgIDI1NDksICAyNTUyLCAgMjU1NSwgIDI1NTgsICAyNTYyLCAgMjU2NSwgIDI1NjgsCisgIDI1NzEsICAyNTc0LCAgMjU3OCwgIDI1ODEsICAyNTg0LCAgMjU4OSwgIDI1OTQsICAyNTk4Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyaHNbXSA9IHsgICAgLTEsCisgICAxMTQsICAgICAwLCAgICAgMCwgICAxMTUsICAgMTIxLCAgICAgMCwgICAxMTQsICAgMTIxLCAgICAgMCwgICAxMTQsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgIDAsCisgICAgIDAsICAgMTIyLCAgIDEyMywgICAgIDAsICAgMTM5LCAgIDEzOCwgICAgIDAsICAgMTM1LCAgICAgMCwgICAxMzQsCisgICAgIDAsICAgMTIwLCAgICA5MywgICAxOTAsICAgMTA5LCAgICA2MCwgICAgIDAsICAgMTI4LCAgICA1OCwgICAxMTYsCisgICAxMTAsICAgICAwLCAgIDEyOCwgICAxMTcsICAgMTM5LCAgIDExOCwgICAxMzgsICAgICAwLCAgIDEyOCwgICAxMTcsCisgICAxMzUsICAgMTE4LCAgICAgMCwgICAgIDAsICAgIDQ0LCAgIDE1NCwgICAgNTgsICAgMTI0LCAgIDExNiwgICAxMTAsCisgICAgIDAsICAgICAwLCAgICA0NCwgICAgNTgsICAgMTI1LCAgIDExNiwgICAxMTAsICAgICAwLCAgICA0NCwgICAxNTQsCisgICAgNjQsICAgMTI3LCAgICA2MCwgICAgIDAsICAgMTI2LCAgICA2MCwgICAgIDAsICAgIDQ2LCAgICA0NCwgICAxMjcsCisgICAgNjAsICAgICAwLCAgIDExOSwgICAxMjMsICAgICAwLCAgICA0NiwgICAyODEsICAgICAwLCAgICA0NiwgICAyOTAsCisgICAyODEsICAgICAwLCAgICA0NiwgICAyOTAsICAgMTgyLCAgICAgMCwgICAxODIsICAgICAwLCAgIDI4MSwgICAgIDAsCisgICAyOTAsICAgMjgxLCAgICAgMCwgICAyOTAsICAgMTgyLCAgICAgMCwgICAgOTksICAgICAwLCAgIDEyOCwgICAgOTksCisgICAgIDAsICAgICAwLCAgICA0OCwgICAgNzQsICAgMTMwLCAgIDEzMSwgICAgNzUsICAgICAwLCAgICA0OCwgICAgNzQsCisgICAgNzUsICAgICAwLCAgIDEzMywgICAgIDAsICAgMTMxLCAgICA1OSwgICAxMzMsICAgICAwLCAgIDIzOSwgICAgIDAsCisgICAyMzksICAgMTU0LCAgICAgMCwgICAgNDUsICAgICAwLCAgICA0NSwgICAxNTQsICAgICAwLCAgIDEzMiwgICAgIDAsCisgICAxMzIsICAgIDY0LCAgIDE5NiwgICAgIDAsICAgMzU3LCAgICAgMCwgICAzNTcsICAgIDY0LCAgIDE4MCwgICAgIDAsCisgICAxMjksICAgMTIzLCAgICAgMCwgICAxMjksICAgICAxLCAgICAgMCwgICAyMDcsICAgIDYwLCAgICAgMCwgICAyMDAsCisgICAyMDYsICAgIDYwLCAgICAgMCwgICAxOTcsICAgMjA1LCAgICA2MCwgICAgIDAsICAgMjAwLCAgICA2MCwgICAgIDAsCisgICAxNTcsICAgIDYwLCAgICAgMCwgICAxOTcsICAgIDYwLCAgICAgMCwgICAgIDEsICAgIDYwLCAgICAgMCwgICAgIDEsCisgICAxMTAsICAgICAwLCAgICA2MCwgICAgIDAsICAgMTkxLCAgICAgMCwgICAxNTAsICAgICAwLCAgICAgMCwgICAxNDksCisgICAgIDAsICAgMTQ5LCAgICA2MCwgICAgIDAsICAgICAwLCAgIDEwOCwgICAgIDAsICAgMTQ1LCAgIDEzNywgICAxMzYsCisgICAzMDIsICAgICAwLCAgIDE0NSwgICAxMzcsICAgMzI3LCAgICAgMCwgICAxNDUsICAgMTM3LCAgICAgMSwgICAgIDAsCisgICAgIDAsICAgMjg2LCAgICAgNSwgICAgOTMsICAgMTQxLCAgIDM0OCwgICAxMDksICAgMjY5LCAgIDM2MCwgICAgIDAsCisgICAyODYsICAgICA1LCAgICA0NywgICAyNjksICAgMzYwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDI4NiwgICAgIDUsCisgICAgOTMsICAgMTQyLCAgIDM0OCwgICAxMDksICAgMjY5LCAgIDM2MCwgICAgIDAsICAgMjkwLCAgIDI4NiwgICAgIDUsCisgICAgNDcsICAgMjY5LCAgIDM2MCwgICAgIDAsICAgICAwLCAgIDI4NiwgICAxNTksICAgIDkzLCAgIDE0MywgICAzNDgsCisgICAxMDksICAgMjY5LCAgIDM2MCwgICAgIDAsICAgMjg2LCAgIDE1OSwgICAgNDcsICAgMjY5LCAgIDM2MCwgICAgIDAsCisgICAgIDAsICAgMjkwLCAgIDI4NiwgICAxNTksICAgIDkzLCAgIDE0NCwgICAzNDgsICAgMTA5LCAgIDI2OSwgICAzNjAsCisgICAgIDAsICAgMjkwLCAgIDI4NiwgICAxNTksICAgIDQ3LCAgIDI2OSwgICAzNjAsICAgICAwLCAgIDE5NywgICAxOTQsCisgICAgIDAsICAgMjAwLCAgIDI3OCwgICAgIDAsICAgMjc4LCAgICAgMCwgICAyMDAsICAgMTQwLCAgICAgMCwgICAxNDAsCisgICAgIDAsICAgICA1LCAgICA5MywgICAzNDgsICAgMTA5LCAgIDI2OSwgICAzNjAsICAgICAwLCAgICAgNSwgICAgNDcsCisgICAyNjksICAgMzYwLCAgICAgMCwgICAxNTksICAgIDkzLCAgIDM0OCwgICAxMDksICAgMjY5LCAgIDM2MCwgICAgIDAsCisgICAxNTksICAgIDQ3LCAgIDI2OSwgICAzNjAsICAgICAwLCAgIDIwMCwgICAxNDYsICAgICAwLCAgIDE0NiwgICAgIDAsCisgICAxOTcsICAgMTk0LCAgICAgMCwgICAyMDAsICAgMjc4LCAgICAgMCwgICAyNzgsICAgICAwLCAgIDIwMCwgICAxNDAsCisgICAgIDAsICAgMTQwLCAgICAgMCwgICAgMjQsICAgICAzLCAgICAgMCwgICAxNDgsICAgMjI0LCAgICAgMCwgICAxNDgsCisgICAgOTMsICAgMTc0LCAgIDEwOSwgICAgIDAsICAgMTQ4LCAgICA0NywgICAgIDAsICAgIDYyLCAgIDE1MSwgICAxNTIsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAxNTMsICAgICAwLCAgIDE1MiwgICAgNTksICAgMTUzLCAgICAgMCwgICAxNTIsCisgICAgIDEsICAgICAwLCAgICA5MywgICAxNzQsICAgMTA5LCAgICAgMCwgICAgNDcsICAgICAwLCAgIDE1NSwgICAgOTMsCisgICAxNzQsICAgMTA5LCAgICAgMCwgICAxNTUsICAgIDQ3LCAgICAgMCwgICAyNzUsICAgIDkzLCAgIDE3NCwgICAxMDksCisgICAgIDAsICAgMjc1LCAgICA0NywgICAgIDAsICAgMjgyLCAgICA5MywgICAxNzQsICAgMTA5LCAgICAgMCwgICAyODIsCisgICAgNDcsICAgICAwLCAgICAgMywgICAgIDAsICAgICA0LCAgICAgMCwgICAgIDUsICAgICAwLCAgICA1NiwgICAgIDAsCisgICAgNTcsICAgICAwLCAgICAgMywgICAgIDAsICAgIDU2LCAgICAgMCwgICAgNTcsICAgICAwLCAgIDEwNSwgICAgIDAsCisgICAxMDQsICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDQ4LCAgIDIzOSwgICAxNTgsICAgICAwLCAgICA0OCwgICAxOTcsCisgICAxOTQsICAgICAwLCAgICA0OCwgICAyNzgsICAgICAwLCAgICA0OCwgICAxNDAsICAgICAwLCAgICAgNiwgICAgNDgsCisgICAyMzksICAgMTU4LCAgICAgMCwgICAgIDYsICAgIDQ4LCAgIDE5NywgICAxOTQsICAgICAwLCAgICAgNiwgICAgNDgsCisgICAyNzgsICAgICAwLCAgICAgNiwgICAgNDgsICAgMTQwLCAgICAgMCwgICAgNTYsICAgIDc0LCAgIDE2MSwgICAxNjAsCisgICAgIDAsICAgIDU2LCAgICA3NCwgICAxNjAsICAgICAwLCAgICAgNCwgICAgNzQsICAgMTYxLCAgIDE2MCwgICAgIDAsCisgICAgIDQsICAgIDc0LCAgIDE2MCwgICAgIDAsICAgMTU5LCAgICAgMCwgICAgIDUsICAgIDc0LCAgIDE2MSwgICAxNjAsCisgICAgIDAsICAgICA1LCAgICA3NCwgICAxNjAsICAgICAwLCAgICA3NSwgICAgIDAsICAgIDc3LCAgICAgMCwgICAxNjIsCisgICAgIDAsICAgMTYxLCAgICA1OSwgICAxNjIsICAgICAwLCAgIDE5NiwgICAgIDAsICAgMTgwLCAgICAgMCwgICAgNzksCisgICAgIDAsICAgIDc4LCAgICAgMCwgICAgODYsICAgICAwLCAgICA4NywgICAgIDAsICAgMTExLCAgICAgMCwgICAxNzMsCisgICAgIDAsICAgMTgwLCAgICAgMCwgICAgNDcsICAgICAwLCAgICA5MywgICAxNjQsICAgMTA5LCAgICAgMCwgICAgNDcsCisgICAgIDAsICAgIDkzLCAgIDE2OCwgICAxMDksICAgICAwLCAgICAgMCwgICAxNjgsICAgICAwLCAgICAgMSwgICAgIDAsCisgICAgIDAsICAgMzM4LCAgIDE5NCwgICAyMDgsICAgMjE3LCAgICA2NCwgICAxNjksICAgMjI1LCAgICAgMCwgICAxNjQsCisgICAgIDAsICAgMTEwLCAgICAgMCwgICAyOTksICAgMjk1LCAgIDExMCwgICAgIDAsICAgMjk5LCAgIDI5NSwgICAgIDEsCisgICAxMTAsICAgICAwLCAgIDI5OSwgICAgIDEsICAgMTEwLCAgICAgMCwgICAgIDAsICAgIDU4LCAgIDE3MiwgICAxNzAsCisgICAgIDAsICAgMzExLCAgICAgMCwgICAxODAsICAgIDU5LCAgIDE4MCwgICAgIDAsICAgMTgwLCAgICA1OSwgICAgIDEsCisgICAgIDAsICAgMTczLCAgICA1OSwgICAxODAsICAgICAwLCAgIDE3MywgICAgNTksICAgICAxLCAgICAgMCwgICAxODAsCisgICAgIDAsICAgMTczLCAgICAgMCwgICAxODUsICAgICAwLCAgIDExOSwgICAxNzksICAgICAwLCAgICA4MCwgICAxNzksCisgICAgIDAsICAgIDcwLCAgIDE3OSwgICAgIDAsICAgIDg4LCAgIDE3OSwgICAgIDAsICAgMTYzLCAgIDE3OSwgICAgIDAsCisgICAgNjcsICAgMTU0LCAgICAgMCwgICAgMTIsICAgMTc1LCAgICAgMCwgICAgMTIsICAgIDkzLCAgIDE5NiwgICAxMDksCisgICAgIDAsICAgIDI5LCAgIDE3NSwgICAgIDAsICAgIDI5LCAgICA5MywgICAxOTYsICAgMTA5LCAgICAgMCwgICAxODcsCisgICAyNjgsICAgICAwLCAgIDE4NywgICAyNjgsICAgMTc3LCAgICAgMCwgICAxODcsICAgMTc2LCAgIDI2OCwgICAgIDAsCisgICAxODcsICAgMTc2LCAgIDI2OCwgICAxNzcsICAgICAwLCAgIDE4NywgICAgOTMsICAgMTk2LCAgIDEwOSwgICAgIDAsCisgICAxODcsICAgIDkzLCAgIDE5NiwgICAxMDksICAgMTc3LCAgICAgMCwgICAxODcsICAgMTc2LCAgICA5MywgICAxOTYsCisgICAxMDksICAgICAwLCAgIDE4NywgICAxNzYsICAgIDkzLCAgIDE5NiwgICAxMDksICAgMTc3LCAgICAgMCwgICAxODgsCisgICAxNzksICAgICAwLCAgIDE4OCwgICAgOTQsICAgMTEyLCAgIDE3OSwgICAgIDAsICAgMTg4LCAgICA5NCwgICAxNjQsCisgICAxMTIsICAgMTc5LCAgICAgMCwgICAgMzQsICAgMTc5LCAgICAgMCwgICAgMzUsICAgMTc5LCAgICAgMCwgICAgOTMsCisgICAxNzQsICAgMTA5LCAgICAgMCwgICAgNTgsICAgMTc0LCAgIDExMCwgICAgIDAsICAgIDkzLCAgIDE3NCwgICAxMDksCisgICAgIDAsICAgIDQ3LCAgICAgMCwgICAgOTMsICAgMjAzLCAgIDEwOSwgICAgIDAsICAgIDY0LCAgIDIyNSwgICAgIDAsCisgICAgOTMsICAgMTk2LCAgIDEwOSwgICAgIDAsICAgMTc4LCAgICA5MywgICAxOTYsICAgMTA5LCAgICAgMCwgICAxNzUsCisgICAgIDAsICAgMTc4LCAgIDE3NSwgICAgIDAsICAgMTc4LCAgICA1OCwgICAyMjYsICAgMjM3LCAgIDExMCwgICAgIDAsCisgICAxNzksICAgICAwLCAgIDE4MCwgICAgODMsICAgMTgwLCAgICAgMCwgICAxODAsICAgIDg0LCAgIDE4MCwgICAgIDAsCisgICAxODAsICAgIDc4LCAgIDE4MCwgICAgIDAsICAgMTgwLCAgICA3OSwgICAxODAsICAgICAwLCAgIDE4MCwgICAgODAsCisgICAxODAsICAgICAwLCAgIDE4MCwgICAgODEsICAgMTgwLCAgICAgMCwgICAxODAsICAgIDgyLCAgIDE4MCwgICAgIDAsCisgICAxODAsICAgIDc2LCAgIDE4MCwgICAgIDAsICAgMTgwLCAgICA3NywgICAxODAsICAgICAwLCAgIDE4MCwgICAgNzMsCisgICAxODAsICAgICAwLCAgIDE4MCwgICAgNzQsICAgMTgwLCAgICAgMCwgICAxODAsICAgIDc1LCAgIDE4MCwgICAgIDAsCisgICAxODAsICAgIDcyLCAgIDE4MCwgICAgIDAsICAgMTgwLCAgICA3MSwgICAxODAsICAgICAwLCAgIDE4MCwgICAgNzAsCisgICAxODAsICAgICAwLCAgIDE4MCwgICAgNjgsICAgMTgwLCAgICAgMCwgICAxODAsICAgIDY5LCAgIDE4MCwgICAgIDAsCisgICAxODAsICAgIDY3LCAgIDE4MCwgICAgIDAsICAgMTgwLCAgICA2NiwgICAxODAsICAgICAwLCAgIDE4MCwgICAgNjUsCisgICAzNDMsICAgIDYyLCAgIDE4MCwgICAgIDAsICAgMTgwLCAgICA2NCwgICAxODAsICAgICAwLCAgIDE4MCwgICAgNjMsCisgICAxODAsICAgICAwLCAgICA2MSwgICAgIDAsICAgIDYxLCAgIDE4MCwgICAgIDAsICAgIDg4LCAgIDM1OCwgICAxNTQsCisgICAgIDAsICAgMzY1LCAgICAgMCwgICAgIDMsICAgICAwLCAgICA1NiwgICAgIDAsICAgIDU3LCAgICAgMCwgICAxODEsCisgICAgIDAsICAgICA0LCAgICAgMCwgICAgIDUsICAgICAwLCAgIDE4MSwgICAgIDAsICAgIDgwLCAgIDE4MywgICAgIDAsCisgICAgNzAsICAgMTgzLCAgICAgMCwgICAgOTMsICAgMTgzLCAgIDEwOSwgICAgIDAsICAgMjgwLCAgICAgMCwgICAxODEsCisgICAgIDAsICAgIDkzLCAgIDE4MywgICAxMDksICAgICAwLCAgIDE4MSwgICAgIDAsICAgICA5LCAgICAgMCwgICAxODksCisgICAgIDAsICAgMTkwLCAgICAgMCwgICAgOTMsICAgMTY0LCAgIDEwOSwgICAgIDAsICAgIDkzLCAgIDE4MywgICAxMDksCisgICAgIDAsICAgIDkzLCAgICAgMSwgICAxMDksICAgICAwLCAgICAgMCwgICAgOTMsICAgMTg2LCAgIDMwMywgICAxMDksCisgICAgIDAsICAgMTg1LCAgICA5MywgICAxNzQsICAgMTA5LCAgICAgMCwgICAxODUsICAgIDQ3LCAgICAgMCwgICAxODUsCisgICAgOTQsICAgMTY0LCAgIDExMiwgICAgIDAsICAgMTg1LCAgICA4NiwgICAgIDAsICAgMTg1LCAgICA4NywgICAgIDAsCisgICAgNDAsICAgICAwLCAgICAgOCwgICAgOTMsICAgMTc0LCAgIDEwOSwgICAgIDAsICAgMjg0LCAgICAgMCwgICAgNTAsCisgICAgNzQsICAgMTk2LCAgICA3NSwgICAgOTMsICAgMTY0LCAgIDEwOSwgICAgIDAsICAgIDUxLCAgICA3NCwgICAxOTYsCisgICAgNzUsICAgIDkzLCAgIDE2NCwgICAxMDksICAgICAwLCAgICA1MiwgICAgNzQsICAgMTk2LCAgICA3NSwgICAgOTMsCisgICAxNjQsICAgMTA5LCAgICAgMCwgICAgNTMsICAgIDc0LCAgIDE5NiwgICAgNzUsICAgIDkzLCAgIDE2NCwgICAxMDksCisgICAgIDAsICAgIDQ5LCAgICA5MywgICAxNjQsICAgMTA5LCAgICAgMCwgICAgNDksICAgIDkzLCAgIDE5NiwgICAxMDksCisgICAgIDAsICAgMjkwLCAgICAgMywgICAgIDAsICAgMjkwLCAgIDM2NSwgICAgIDAsICAgMjgzLCAgICAgMCwgICAyODMsCisgICAgOTMsICAgMTc0LCAgIDEwOSwgICAgIDAsICAgMjgzLCAgICA0NywgICAgIDAsICAgMTkyLCAgIDE4MiwgICAgIDAsCisgICAxOTIsICAgMjgzLCAgICAgMCwgICAxOTIsICAgMTgyLCAgICA5MywgICAxNzQsICAgMTA5LCAgICAgMCwgICAxOTIsCisgICAxODIsICAgIDQ3LCAgICAgMCwgICAxOTIsICAgMjgzLCAgICA5MywgICAxNzQsICAgMTA5LCAgICAgMCwgICAxOTIsCisgICAyODMsICAgIDQ3LCAgICAgMCwgICAxOTIsICAgIDg4LCAgICAgNywgICAgNDcsICAgICAwLCAgIDE5MiwgICAgIDcsCisgICAgNTQsICAgIDg4LCAgICAgNywgICAgNDcsICAgICAwLCAgIDE5MiwgICAgIDEsICAgICAwLCAgICAzOSwgICAgIDAsCisgICAyOTAsICAgIDM5LCAgICAgMCwgICAgMzgsICAgICAwLCAgIDI5MCwgICAxODgsICAgICAwLCAgICA0MiwgICAgIDAsCisgICAgNDMsICAgICAwLCAgICAxMCwgICAgIDAsICAgMTkwLCAgICAxMCwgICAgIDAsICAgICAwLCAgIDE4NSwgICAgOTIsCisgICAgIDAsICAgMTg1LCAgICA5MSwgICAgIDAsICAgMjAzLCAgIDIwNSwgICAgNjAsICAgICAwLCAgIDE5NywgICAyMDUsCisgICAgNjAsICAgICAwLCAgIDIwMCwgICAyMDYsICAgIDYwLCAgICAgMCwgICAxOTcsICAgIDYwLCAgICAgMCwgICAyMDAsCisgICAgNjAsICAgICAwLCAgIDExOSwgICAxOTMsICAgICAwLCAgIDI3NCwgICAgIDAsICAgMjc4LCAgICAgMCwgICAgNDcsCisgICAgIDAsICAgMTk1LCAgICA0NywgICAgIDAsICAgMjAxLCAgIDI5MywgICAgIDAsICAgMjcwLCAgIDI5MywgICAgIDAsCisgICAyMDMsICAgMjkzLCAgICAgMCwgICAyMDEsICAgICAwLCAgIDI3MCwgICAgIDAsICAgMjAxLCAgICAgMCwgICAxOTgsCisgICAgIDAsICAgMjAwLCAgIDIwMywgICAgIDAsICAgMjAzLCAgIDE5OSwgICAgIDAsICAgMjAzLCAgIDIwMiwgICAxOTksCisgICAgIDAsICAgMjAwLCAgIDIwMywgICAxOTksICAgICAwLCAgIDIwMCwgICAyMDMsICAgMjAyLCAgICAgMCwgICAyMDAsCisgICAyMDMsICAgMjAyLCAgIDE5OSwgICAgIDAsICAgICA2LCAgICAgMCwgICAxOTksICAgMjA0LCAgICAgMCwgICAxOTksCisgICAgIDYsICAgICAwLCAgIDE5OSwgICAyMTgsICAgICAwLCAgIDIxOCwgICAgIDAsICAgMjcwLCAgICAgMCwgICAgIDYsCisgICAgIDAsICAgMjAwLCAgICAgOCwgICAgIDAsICAgMjAwLCAgICAgNiwgICAgIDAsICAgMjAwLCAgIDIxOCwgICAgIDAsCisgICAyMTgsICAgICAwLCAgIDIwMywgICAgIDAsICAgMjcwLCAgIDIwMywgICAgIDAsICAgMjAzLCAgIDIwMiwgICAgIDAsCisgICAyNzAsICAgMjAzLCAgIDIwMiwgICAgIDAsICAgMjA0LCAgICAgMCwgICAyMDIsICAgMjA0LCAgICAgMCwgICAyMzIsCisgICAgIDAsICAgICA3LCAgICAgMCwgICAyNzUsICAgICAwLCAgICAyOCwgICAgOTMsICAgMTY0LCAgIDEwOSwgICAgIDAsCisgICAgMjgsICAgIDkzLCAgIDE5NiwgICAxMDksICAgICAwLCAgICAzMCwgICAgOTMsICAgMTY0LCAgIDEwOSwgICAgIDAsCisgICAgMzAsICAgIDkzLCAgIDE5NiwgICAxMDksICAgICAwLCAgICAgNywgICAgIDAsICAgICA4LCAgICAgMCwgICAyMzIsCisgICAgIDAsICAgMjA5LCAgICAgMCwgICAyMDUsICAgIDU5LCAgIDIxMSwgICAgIDAsICAgMjEzLCAgICAgMCwgICAyMDYsCisgICAgNTksICAgMjExLCAgICAgMCwgICAyMTUsICAgICAwLCAgIDIwNywgICAgNTksICAgMjExLCAgICAgMCwgICAgIDAsCisgICAxMjAsICAgIDkzLCAgIDE5MCwgICAxMDksICAgICAwLCAgICAgMCwgICAxOTQsICAgMjA4LCAgIDIxNywgICAgNjQsCisgICAyMTAsICAgMjI1LCAgICAgMCwgICAxOTQsICAgMjA4LCAgIDIxNywgICAgIDAsICAgICAwLCAgIDE5NCwgICAyMDgsCisgICAyMTcsICAgIDY0LCAgIDIxMiwgICAyMjUsICAgICAwLCAgIDE5NCwgICAyMDgsICAgMjE3LCAgICAgMCwgICAgIDAsCisgICAyNzgsICAgMjA4LCAgIDIxNywgICAgNjQsICAgMjE0LCAgIDIyNSwgICAgIDAsICAgMjc4LCAgIDIwOCwgICAyMTcsCisgICAgIDAsICAgICAwLCAgIDI3OCwgICAyMDgsICAgMjE3LCAgICA2NCwgICAyMTYsICAgMjI1LCAgICAgMCwgICAyNzgsCisgICAyMDgsICAgMjE3LCAgICAgMCwgICAgIDAsICAgMjE4LCAgICAgMCwgICAyMTksICAgICAwLCAgIDIxOCwgICAyMTksCisgICAgIDAsICAgIDMxLCAgICA5MywgICAgOTMsICAgMjIwLCAgIDEwOSwgICAxMDksICAgICAwLCAgIDIyMSwgICAgIDAsCisgICAyMjAsICAgIDU5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgIDIyMiwgICAgIDAsICAgMjIyLCAgICA5MywgICAgIDMsCisgICAxMDksICAgICAwLCAgIDIyMiwgICAgOTMsICAgICAzLCAgICA1OSwgICAxNzQsICAgMTA5LCAgICAgMCwgICAyMjIsCisgICAgOTMsICAgMTc0LCAgIDEwOSwgICAgIDAsICAgMTU0LCAgICAgMCwgICAgIDYsICAgICAwLCAgICAgNywgICAgIDAsCisgICAgIDgsICAgICAwLCAgIDE1NCwgICAgIDAsICAgMjIzLCAgICA1OSwgICAxNTQsICAgICAwLCAgICAgMCwgICAgNjQsCisgICAyMjUsICAgICAwLCAgIDE4MCwgICAgIDAsICAgIDU4LCAgIDExMCwgICAgIDAsICAgIDU4LCAgIDIyNiwgICAxMTAsCisgICAgIDAsICAgIDU4LCAgIDIyNiwgICAgNTksICAgMTEwLCAgICAgMCwgICAgIDEsICAgICAwLCAgIDIyNSwgICAgIDAsCisgICAyMjYsICAgIDU5LCAgIDIyNSwgICAgIDAsICAgIDk0LCAgIDE4MCwgICAxMTIsICAgMjI1LCAgICAgMCwgICAyMjYsCisgICAgNTksICAgIDIwLCAgIDE4MCwgICAgNjIsICAgMjI1LCAgICAgMCwgICAxNTQsICAgIDYyLCAgIDIyNSwgICAgIDAsCisgICAyMjYsICAgIDU5LCAgIDE1NCwgICAgNjIsICAgMjI1LCAgICAgMCwgICAgOTgsICAgICAwLCAgIDIyNywgICAxMzcsCisgICAxMzYsICAgMzAyLCAgICAgMCwgICAyMjcsICAgMTM3LCAgIDMyNywgICAgIDAsICAgMjI3LCAgIDEzNywgICAgIDEsCisgICAgIDAsICAgICAwLCAgIDIyOSwgICAyMjgsICAgMTM4LCAgICAgMCwgICAxMDMsICAgMTgwLCAgIDEwOCwgICAgIDAsCisgICAxMDMsICAgICAxLCAgIDEwOCwgICAgIDAsICAgICAwLCAgIDIzMSwgICAyMzAsICAgICAwLCAgIDIzMSwgICAgIDEsCisgICAgIDAsICAgICAwLCAgICAxMywgICAxNTQsICAgIDU4LCAgIDIzMywgICAyNjYsICAgMjM4LCAgIDExMCwgICAgIDAsCisgICAgMTMsICAgMTU0LCAgICA1OCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgMTMsICAgIDU4LCAgIDIzNCwgICAyNjYsCisgICAyMzgsICAgMTEwLCAgICAgMCwgICAgMTMsICAgIDU4LCAgIDExMCwgICAgIDAsICAgIDEzLCAgIDE1NCwgICAgIDAsCisgICAgMTMsICAgMjg4LCAgICAgMCwgICAgNDUsICAgMjg2LCAgIDE1NCwgICAgIDAsICAgIDQ1LCAgIDI5MCwgICAyODYsCisgICAxNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjQ2LCAgIDI1MiwgICAyNTQsICAgMTEwLCAgIDIxNywgICAyMzUsCisgICAyMzEsICAgMjM2LCAgIDIyOSwgICAgIDAsICAgMjQ2LCAgICAgMCwgICAgIDAsICAgIDU5LCAgICAgMCwgICAgIDAsCisgICAgNTksICAgICAwLCAgICAzNiwgICAgIDAsICAgMjM5LCAgICAgNiwgICAgIDAsICAgMjM5LCAgICAgNywgICAgIDAsCisgICAyMzksICAgICA4LCAgICAgMCwgICAyMzksICAgIDM2LCAgICAgMCwgICAyMzksICAgMTU0LCAgICAgMCwgICAyMzksCisgICAxNTYsICAgICAwLCAgIDIzOSwgICAyODYsICAgMTU0LCAgICAgMCwgICAyMzksICAgMTU4LCAgICAgMCwgICAyMzksCisgICAyODYsICAgMTU4LCAgICAgMCwgICAgIDAsICAgMjQwLCAgICAgMCwgICAyNDEsICAgMjQzLCAgIDI0NywgICAgIDAsCisgICAyNDIsICAgMjQ3LCAgICAgMCwgICAyMzksICAgIDU4LCAgICAgMCwgICAyNDUsICAgICAwLCAgIDI0NCwgICAgIDAsCisgICAgIDAsICAgIDYyLCAgIDM1OCwgICAgIDAsICAgIDYyLCAgIDM1OCwgICAyNDgsICAgICAwLCAgIDI0OSwgICAgIDAsCisgICAyNDgsICAgIDU5LCAgIDM1OCwgICAyNDksICAgICAwLCAgIDI1MCwgICAgIDAsICAgMjUxLCAgIDM1OCwgICAyNTAsCisgICAgIDAsICAgMjc1LCAgICAgMCwgICAgNDUsICAgMjg2LCAgIDE1NCwgICAgIDAsICAgIDQ1LCAgIDI5MCwgICAyODYsCisgICAxNTQsICAgICAwLCAgICAzMCwgICAgOTMsICAgMTY0LCAgIDEwOSwgICAgIDAsICAgIDMwLCAgICA5MywgICAxOTYsCisgICAxMDksICAgICAwLCAgICAzNywgICAzNTgsICAgICAwLCAgICAgNiwgICAzNTgsICAgICAwLCAgIDI1MSwgICAgMzcsCisgICAzNTgsICAgICAwLCAgIDI1MSwgICAgIDYsICAgMzU4LCAgICAgMCwgICAgNTgsICAgICAwLCAgICAgMCwgICAyNTMsCisgICAgIDAsICAgMjUzLCAgIDI1NSwgICAgIDAsICAgMjU0LCAgICAzNywgICAgNjIsICAgMjU1LCAgICAgMCwgICAyNTQsCisgICAgMzcsICAgIDYyLCAgICAgMCwgICAyNTYsICAgICAwLCAgIDI1NSwgICAyNTYsICAgICAwLCAgIDI1NywgICAgNjAsCisgICAgIDAsICAgMjU3LCAgIDExMCwgICAgIDAsICAgMTQ3LCAgICA2MiwgICAgIDAsICAgMTQ3LCAgICA5NSwgICAgIDAsCisgICAxNDcsICAgIDI0LCAgICAgMCwgICAxNDcsICAgIDU4LCAgICAgMCwgICAgNjAsICAgICAwLCAgIDExOSwgICAyNTYsCisgICAgIDAsICAgMTk3LCAgIDI1OCwgICAgIDAsICAgMjAwLCAgIDI1OSwgICAgIDAsICAgMjc4LCAgIDIwOCwgICAyMTcsCisgICAyMjQsICAgICAwLCAgIDE0MCwgICAyMDgsICAgMjE3LCAgIDIyNCwgICAgIDAsICAgIDYyLCAgIDE4MCwgICAgIDAsCisgICAgIDEsICAgICAwLCAgIDIwMCwgICAxNDYsICAgMjA4LCAgIDIxNywgICAyMjQsICAgICAwLCAgIDE0NiwgICAyMDgsCisgICAyMTcsICAgMjI0LCAgICAgMCwgICAxMjYsICAgICAwLCAgICAgMCwgICAyNjAsICAgICAwLCAgIDI1OCwgICAgNTksCisgICAyNjEsICAgICAwLCAgICAgMCwgICAyNjMsICAgICAwLCAgIDI1OSwgICAgNTksICAgMjY1LCAgICAgMCwgICAyNjIsCisgICAgIDAsICAgMjYzLCAgICAgMCwgICAyNjQsICAgICAwLCAgIDI2NSwgICAgIDAsICAgMjc0LCAgIDIwOCwgICAyMTcsCisgICAyMjQsICAgICAwLCAgICAgNCwgICAgNjIsICAgMTgwLCAgIDIxNywgICAgIDAsICAgMjc4LCAgIDIwOCwgICAyMTcsCisgICAyMjQsICAgICAwLCAgIDE0MCwgICAyMDgsICAgMjE3LCAgIDIyNCwgICAgIDAsICAgICAzLCAgICA2MiwgICAxODAsCisgICAyMTcsICAgICAwLCAgICA2MiwgICAxODAsICAgMjE3LCAgICAgMCwgICAyNzQsICAgMjA4LCAgIDIxNywgICAyMjQsCisgICAgIDAsICAgICA0LCAgICA2MiwgICAxODAsICAgMjE3LCAgICAgMCwgICAyNzgsICAgMjA4LCAgIDIxNywgICAyMjQsCisgICAgIDAsICAgICAzLCAgICA2MiwgICAxODAsICAgMjE3LCAgICAgMCwgICAgNjIsICAgMTgwLCAgIDIxNywgICAgIDAsCisgICAyNjcsICAgICAwLCAgIDI2NiwgICAgNTksICAgMjY3LCAgICAgMCwgICAxNTQsICAgICAwLCAgIDE1NCwgICAgNjQsCisgICAxODAsICAgICAwLCAgIDMzOCwgICAyOTEsICAgICAwLCAgIDMzOCwgICAgIDAsICAgIDkzLCAgIDE5NiwgICAxMDksCisgICAgOTQsICAgMTY0LCAgIDExMiwgICAgIDAsICAgICAwLCAgIDI2OSwgICAgIDgsICAgICAwLCAgICAgOCwgICAgIDAsCisgICAyNzAsICAgICA4LCAgICAgMCwgICAgIDAsICAgMjcxLCAgIDE2NCwgICAgIDAsICAgMjcxLCAgICA5MywgICAxNzQsCisgICAxMDksICAgICAwLCAgIDI3MSwgICAgOTMsICAgMzQ4LCAgIDEwOSwgICAgIDAsICAgMjcxLCAgICA0NywgICAgIDAsCisgICAyNzEsICAgIDkzLCAgICAgMSwgICAxMDksICAgICAwLCAgICA4MCwgICAyNzAsICAgMjc0LCAgICAgMCwgICAgNzAsCisgICAyNzAsICAgMjc0LCAgICAgMCwgICAgODAsICAgMjc0LCAgICAgMCwgICAgNzAsICAgMjc0LCAgICAgMCwgICAyODksCisgICAyNjksICAgMjc0LCAgICAgMCwgICAyNzcsICAgICAwLCAgIDI4NSwgICAgIDAsICAgMjkwLCAgIDI4NSwgICAgIDAsCisgICAyNzYsICAgICAwLCAgIDI5MCwgICAyNzYsICAgICAwLCAgIDI4NiwgICAyODUsICAgICAwLCAgIDI3NywgICAyNzMsCisgICAyNjksICAgMzYwLCAgICAgMCwgICAyNzcsICAgIDk0LCAgIDI3MiwgICAxMTIsICAgICAwLCAgIDI3NywgICAgOTQsCisgICAxMTIsICAgICAwLCAgICA5MywgICAyNzQsICAgMTA5LCAgICAgMCwgICAyODYsICAgMjg1LCAgICAgMCwgICAyODUsCisgICAgIDAsICAgIDgwLCAgIDI3MCwgICAyNzgsICAgICAwLCAgICA3MCwgICAyNzAsICAgMjc4LCAgICAgMCwgICAgODAsCisgICAyNzgsICAgICAwLCAgICA3MCwgICAyNzgsICAgICAwLCAgIDI4OSwgICAyNjksICAgMjc4LCAgICAgMCwgICAxODQsCisgICAgIDAsICAgIDgwLCAgIDI3MCwgICAyNzgsICAgICAwLCAgICA3MCwgICAyNzAsICAgMjc4LCAgICAgMCwgICAgODAsCisgICAyNzksICAgICAwLCAgICA3MCwgICAyNzksICAgICAwLCAgIDI4OSwgICAyNjksICAgMjc4LCAgICAgMCwgICAyODAsCisgICAgIDAsICAgMTg0LCAgIDI3MywgICAyNjksICAgMzYwLCAgICAgMCwgICAgOTMsICAgMjc5LCAgIDEwOSwgICAgIDAsCisgICAxODQsICAgIDk0LCAgIDI3MiwgICAxMTIsICAgICAwLCAgIDE4NCwgICAgOTQsICAgMTEyLCAgICAgMCwgICAyODIsCisgICAgIDAsICAgMjg2LCAgIDE4MiwgICAgIDAsICAgMjg2LCAgIDE4MSwgICAgIDAsICAgMjgyLCAgICAgMCwgICAyOTAsCisgICAyODIsICAgICAwLCAgIDIwMywgICAgOTMsICAgMTc0LCAgIDEwOSwgICAgIDAsICAgMjAzLCAgICA5MywgICAxODMsCisgICAxMDksICAgICAwLCAgIDIwMywgICAxOTUsICAgICAwLCAgICAgNCwgICAgIDAsICAgICA1LCAgICAgMCwgICAxNTgsCisgICAgIDAsICAgMjg3LCAgICAgMCwgICAyODYsICAgMjg3LCAgICAgMCwgICAgIDQsICAgIDU0LCAgICAgMCwgICAgIDUsCisgICAgNTQsICAgICAwLCAgICA1NywgICAgNTQsICAgICAwLCAgIDE1OCwgICAgNTQsICAgICAwLCAgIDI5MCwgICAyODUsCisgICAgIDAsICAgMjc2LCAgICAgMCwgICAyOTAsICAgMjc2LCAgICAgMCwgICAyODYsICAgIDgwLCAgICAgMCwgICAyOTAsCisgICAyODYsICAgIDgwLCAgICAgMCwgICAgNTQsICAgICAwLCAgICA4MCwgICAyNjksICAgMjkxLCAgICAgMCwgICAgODAsCisgICAyNjksICAgICAwLCAgICA3MCwgICAyNjksICAgMjkxLCAgICAgMCwgICAgNzAsICAgMjY5LCAgICAgMCwgICAyODksCisgICAyNjksICAgICAwLCAgIDI4OSwgICAyNjksICAgMjkxLCAgICAgMCwgICAyOTIsICAgICAwLCAgICA5NCwgICAxNjQsCisgICAxMTIsICAgICAwLCAgIDI5MiwgICAgOTQsICAgMjcyLCAgIDExMiwgICAgIDAsICAgIDgwLCAgIDI3MCwgICAyOTMsCisgICAgIDAsICAgIDgwLCAgIDI5MywgICAgIDAsICAgIDgwLCAgIDI3MCwgICAgIDAsICAgIDgwLCAgICAgMCwgICAgNzAsCisgICAyNzAsICAgMjkzLCAgICAgMCwgICAgNzAsICAgMjkzLCAgICAgMCwgICAgNzAsICAgMjcwLCAgICAgMCwgICAgNzAsCisgICAgIDAsICAgMjg5LCAgIDI2OSwgICAgIDAsICAgMjg5LCAgIDI2OSwgICAyOTMsICAgICAwLCAgIDI5NCwgICAgIDAsCisgICAgOTMsICAgMjkzLCAgIDEwOSwgICAgIDAsICAgIDkwLCAgICAgMCwgICAyOTQsICAgIDkzLCAgIDM0OCwgICAxMDksCisgICAyNjksICAgMzYwLCAgICAgMCwgICAyOTQsICAgIDQ3LCAgIDI2OSwgICAzNjAsICAgICAwLCAgIDI5NCwgICAgOTQsCisgICAyNzIsICAgMTEyLCAgICAgMCwgICAyOTQsICAgIDk0LCAgIDExMiwgICAgIDAsICAgIDkzLCAgIDM0OSwgICAxMDksCisgICAyNjksICAgMzYwLCAgICAgMCwgICAxNzgsICAgMjY5LCAgIDM2MCwgICAgIDAsICAgMTk1LCAgIDI2OSwgICAzNjAsCisgICAgIDAsICAgIDk0LCAgIDI3MiwgICAxMTIsICAgICAwLCAgICA5NCwgICAxMTIsICAgICAwLCAgIDMxMCwgICAgIDAsCisgICAyOTYsICAgICAwLCAgIDI5NSwgICAzMTAsICAgICAwLCAgIDI5NSwgICAyOTYsICAgICAwLCAgICAgMSwgICAgNjAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMzAwLCAgICAgMCwgICAzMDEsICAgICAwLCAgIDMwMCwgICAzMDEsCisgICAgIDAsICAgIDMzLCAgIDIyMywgICAgNjAsICAgICAwLCAgIDMwMywgICAgIDAsICAgICAxLCAgIDMwMywgICAgIDAsCisgICAgIDAsICAgIDU4LCAgIDMwNCwgICAyOTcsICAgMTcwLCAgIDI5OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTQsCisgICAzMDYsICAgMjk3LCAgIDE2NiwgICAzMDcsICAgMzA4LCAgICAgMCwgICAzMDMsICAgICAwLCAgICAgMCwgICAyOTcsCisgICAzMDksICAgMzExLCAgIDI5OCwgICAgIDAsICAgMzAzLCAgICAgMCwgICAzMTEsICAgICAwLCAgIDE5MywgICAgIDAsCisgICAxNjQsICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDMwNSwgICAgMTUsICAgMzEyLCAgIDMwOCwgICAzMTMsCisgICAyOTgsICAgICAwLCAgIDMwNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMzE0LCAgIDI5NywgICAxNjYsCisgICAzMTUsICAgMTcxLCAgIDI5OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTcsICAgMzE2LCAgIDMwOCwgICAgMTYsCisgICAzMTcsICAgMTY1LCAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAzMTgsCisgICAgOTMsICAgMzQxLCAgIDMxOSwgICAyOTcsICAgMTY3LCAgICA2MCwgICAzMjAsICAgMzQzLCAgIDEwOSwgICAzMjEsCisgICAxNzEsICAgMjk4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOSwgICAyOTcsICAgIDkzLCAgIDE2OCwgICAxMDksCisgICAzMjIsICAgMzA4LCAgIDMyMywgICAyOTgsICAgICAwLCAgICAgMCwgICAgMjAsICAgMTgwLCAgICA2MiwgICAzMjQsCisgICAzMTAsICAgICAwLCAgICAgMCwgICAgMjAsICAgMTgwLCAgICAxMSwgICAxODAsICAgIDYyLCAgIDMyNSwgICAzMTAsCisgICAgIDAsICAgICAwLCAgICAyMSwgICAgNjIsICAgMzI2LCAgIDMxMCwgICAgIDAsICAgIDIyLCAgICA2MCwgICAgIDAsCisgICAgMjMsICAgIDYwLCAgICAgMCwgICAgMjQsICAgIDYwLCAgICAgMCwgICAgMjQsICAgMTY0LCAgICA2MCwgICAgIDAsCisgICAxMjAsICAgMzQyLCAgICA5MywgICAxOTAsICAgMTA5LCAgICA2MCwgICAgIDAsICAgMTIwLCAgIDM0MiwgICAgOTMsCisgICAxOTAsICAgIDYyLCAgIDM0NCwgICAxMDksICAgIDYwLCAgICAgMCwgICAxMjAsICAgMzQyLCAgICA5MywgICAxOTAsCisgICAgNjIsICAgMzQ0LCAgICA2MiwgICAzNDQsICAgMTA5LCAgICA2MCwgICAgIDAsICAgMTIwLCAgIDM0MiwgICAgOTMsCisgICAxOTAsICAgIDYyLCAgIDM0NCwgICAgNjIsICAgMzQ0LCAgICA2MiwgICAzNDcsICAgMTA5LCAgICA2MCwgICAgIDAsCisgICAgMjUsICAgIDgwLCAgIDE2NCwgICAgNjAsICAgICAwLCAgICAyNSwgICAxNTQsICAgIDYwLCAgICAgMCwgICAzNDAsCisgICAzMTAsICAgICAwLCAgIDM0MCwgICAxMTAsICAgICAwLCAgICA2MCwgICAgIDAsICAgMzMwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDk1LCAgIDMyOCwgICAxMzYsICAgMzAyLCAgIDMyOSwgICAzMzMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgOTUsICAgMzMxLCAgIDMwMywgICAzMzIsICAgMzMzLCAgICAgMCwgICAzMzQsICAgICAwLCAgIDMzMywgICAzMzQsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgIDMzNSwgICAyOTcsICAgMzM5LCAgIDMzNiwgICAzMDMsCisgICAzMzcsICAgMjk4LCAgICAgMCwgICAyMDEsICAgICAwLCAgIDI3MCwgICAgIDAsICAgIDkzLCAgICAxMSwgICAxMDksCisgICAgIDAsICAgIDkzLCAgIDM1NywgICAxMDksICAgICAwLCAgICAgMywgICAgNjIsICAgICAwLCAgICA1NiwgICAgNjIsCisgICAgIDAsICAgICA0LCAgICA2MiwgICAgIDAsICAgICA1LCAgICA2MiwgICAgIDAsICAgMzQzLCAgICA2MCwgICAgIDAsCisgICAxOTMsICAgICAwLCAgICA1OCwgICAxNzAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgMCwgICAxNjQsCisgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgMzQ1LCAgICAgMCwgICAzNDYsICAgICAwLCAgIDM0NSwgICAgNTksCisgICAzNDYsICAgICAwLCAgICAxMCwgICAgOTMsICAgMTY0LCAgIDEwOSwgICAgIDAsICAgIDEwLCAgICAgMCwgICAzNDcsCisgICAgNTksICAgIDEwLCAgICAgMCwgICAgIDAsICAgMzQ5LCAgICAgMCwgICAxOTYsICAgICAwLCAgIDM1MywgICAgIDAsCisgICAzNTQsICAgIDExLCAgICAgMCwgICAzNTMsICAgIDExLCAgICAgMCwgICAxOTYsICAgIDExLCAgICAgMCwgICAgMTEsCisgICAgIDAsICAgIDk3LCAgICAgMCwgICAzNTMsICAgIDk3LCAgICAgMCwgICAxOTYsICAgIDk3LCAgICAgMCwgICAzNTMsCisgICAgNjIsICAgICAwLCAgIDE5NiwgICAgNjIsICAgICAwLCAgICAgMCwgICAgNjQsICAgMzUxLCAgIDM1MiwgICAgIDAsCisgICAxMDIsICAgICAwLCAgIDIyNSwgICAgIDAsICAgMzU1LCAgICAgMCwgICAzNTcsICAgMzUwLCAgICAgMCwgICAzNTQsCisgICAzNTYsICAgICAwLCAgIDM1NCwgICAzNTksICAgICAwLCAgIDM1NCwgICAzNTksICAgIDY0LCAgIDIyNSwgICAgIDAsCisgICAzNTMsICAgIDU5LCAgICAgMCwgICAxOTYsICAgIDU5LCAgICAgMCwgICAxOTgsICAgMTk0LCAgICAgMCwgICAyMDEsCisgICAxOTQsICAgICAwLCAgIDIwMywgICAxOTQsICAgICAwLCAgIDE5OCwgICAyOTMsICAgICAwLCAgIDE5OCwgICAgIDAsCisgICAyMDAsICAgMjc4LCAgICAgMCwgICAzNTcsICAgICAwLCAgIDM1NywgICAzNTAsICAgICAwLCAgIDM1NSwgICAgIDAsCisgICAxOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc4LCAgICAgMCwgICAgIDAsICAgIDYxLCAgICA5MywgICAzNjIsCisgICAxMDksICAgICAwLCAgICA2MSwgICAgNDcsICAgICAwLCAgIDE5NiwgICAgIDAsICAgMzYxLCAgICAgMCwgICAzNjIsCisgICAgNTksICAgMzYxLCAgICAgMCwgICAgIDAsICAgIDgwLCAgIDI2OSwgICAzNjMsICAgICAwLCAgICA3MCwgICAyNjksCisgICAzNjMsICAgICAwLCAgIDI4OSwgICAyNjksICAgMzYzLCAgICAgMCwgICAgNDEsICAgICAwLCAgIDM2NCwgICAgODAsCisgICAgIDAsICAgMzY0LCAgICA4MSwgICAgIDAsICAgMzY0LCAgICA4MiwgICAgIDAsICAgMzY0LCAgICA3OCwgICAgIDAsCisgICAzNjQsICAgIDc5LCAgICAgMCwgICAzNjQsICAgIDcwLCAgICAgMCwgICAzNjQsICAgIDY4LCAgICAgMCwgICAzNjQsCisgICAgNjksICAgICAwLCAgIDM2NCwgICAgODgsICAgICAwLCAgIDM2NCwgICAgNTksICAgICAwLCAgIDM2NCwgICAgNzMsCisgICAgIDAsICAgMzY0LCAgICA3NCwgICAgIDAsICAgMzY0LCAgICA3NSwgICAgIDAsICAgMzY0LCAgICA3MiwgICAgIDAsCisgICAzNjQsICAgIDYzLCAgICAgMCwgICAzNjQsICAgIDY0LCAgICAgMCwgICAzNjQsICAgIDc2LCAgICAgMCwgICAzNjQsCisgICAgNzcsICAgICAwLCAgIDM2NCwgICAgODYsICAgICAwLCAgIDM2NCwgICAgODcsICAgICAwLCAgIDM2NCwgICAgNjcsCisgICAgIDAsICAgMzY0LCAgICA2NiwgICAgIDAsICAgMzY0LCAgIDExMSwgICAgIDAsICAgMzY0LCAgICA2NSwgICAgNjIsCisgICAgIDAsICAgMzY0LCAgICA3MSwgICAgIDAsICAgMzY0LCAgICA5MSwgICAgIDAsICAgMzY0LCAgICA4MywgICAgIDAsCisgICAzNjQsICAgIDQ3LCAgICAgMCwgICAzNjQsICAgIDk0LCAgIDExMiwgICAgIDAsICAgMzY0LCAgICAzOSwgICAgIDAsCisgICAzNjQsICAgIDM4LCAgICAgMCwgICAzNjQsICAgIDM5LCAgICA5NCwgICAxMTIsICAgICAwLCAgIDM2NCwgICAgMzgsCisgICAgOTQsICAgMTEyLCAgICAgMCwgICAzNjQsICAgMzM4LCAgIDM2MywgICAgIDAsICAgMzY0LCAgICAgMSwgICAgIDAKK307CisKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlybGluZVtdID0geyAwLAorICAgMzA5LCAgIDMxMSwgICAzMjUsICAgMzI4LCAgIDMyOSwgICAzMzMsICAgMzM1LCAgIDMzOCwgICAzNDMsICAgMzQ3LAorICAgMzUzLCAgIDM1NSwgICAzNTgsICAgMzYxLCAgIDM2NSwgICAzNjgsICAgMzcwLCAgIDM3MiwgICAzNzUsICAgMzc3LAorICAgMzgwLCAgIDM4MywgICAzODUsICAgMzg3LCAgIDM4OSwgICAzOTEsICAgMzkzLCAgIDM5NSwgICA0MDEsICAgNDA1LAorICAgNDA4LCAgIDQxMCwgICA0MTQsICAgNDE2LCAgIDQxNywgICA0MTksICAgNDIzLCAgIDQyNiwgICA0MzIsICAgNDM1LAorICAgNDM3LCAgIDQ0MSwgICA0NDQsICAgNDQ4LCAgIDQ2MSwgICA0NjMsICAgNDY1LCAgIDQ2OSwgICA0NzksICAgNDgxLAorICAgNDgzLCAgIDQ4NywgICA0OTEsICAgNDk2LCAgIDQ5OSwgICA1MDEsICAgNTA1LCAgIDUwNywgICA1MDgsICAgNTE1LAorICAgNTE2LCAgIDUxNywgICA1MjAsICAgNTIzLCAgIDUyNywgICA1MjksICAgNTMwLCAgIDUzMywgICA1MzUsICAgNTM4LAorICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTU3LCAgIDU1OSwgICA1NjksICAgNTc4LCAgIDU4MCwgICA1OTAsICAgNTk5LAorICAgNjAxLCAgIDYxMSwgICA2MjAsICAgNjIyLCAgIDYzNCwgICA2NDIsICAgNjQ5LCAgIDY1NCwgICA2NjEsICAgNjY4LAorICAgNjcxLCAgIDY3MywgICA2NzUsICAgNjgxLCAgIDY5MSwgICA2OTMsICAgNjk2LCAgIDY5OSwgICA3MDEsICAgNzA0LAorICAgNzA4LCAgIDcxNywgICA3MjAsICAgNzIyLCAgIDcyNiwgICA3MzksICAgNzU5LCAgIDc2MiwgICA3NjQsICAgNzY1LAorICAgNzY4LCAgIDc3NSwgICA3ODEsICAgNzgzLCAgIDc4NSwgICA3ODcsICAgNzkwLCAgIDc5NCwgICA4MDAsICAgODAyLAorICAgODAzLCAgIDgwNCwgICA4MDUsICAgODA4LCAgIDgxMCwgICA4MTEsICAgODE0LCAgIDgxNiwgICA4MTcsICAgODIwLAorICAgODIzLCAgIDgyNiwgICA4MjgsICAgODMwLCAgIDgzMiwgICA4MzUsICAgODM3LCAgIDg0NSwgICA4NTIsICAgODU4LAorICAgODY0LCAgIDg3MCwgICA4NzMsICAgODgwLCAgIDg4OCwgICA4OTAsICAgODk4LCAgIDkwMSwgICA5MDUsICAgOTA4LAorICAgOTExLCAgIDkxNCwgICA5MTYsICAgOTE4LCAgIDkyMCwgICA5MjQsICAgOTI3LCAgIDkzMCwgICA5MzUsICAgOTM5LAorICAgOTQ0LCAgIDk0OCwgICA5NTEsICAgOTUzLCAgIDk1NywgICA5NzcsICAgOTg0LCAgIDk4NywgICA5ODksICAgOTkwLAorICAgOTkxLCAgIDk5NCwgIDEwMDUsICAxMDE0LCAgMTAxOCwgIDEwMjIsICAxMDI1LCAgMTAyNywgIDEwMzEsICAxMDM0LAorICAxMDM3LCAgMTA0MSwgIDEwNDQsICAxMDQ2LCAgMTA0OCwgIDEwNTAsICAxMDU3LCAgMTA2OCwgIDEwNzAsICAxMDcyLAorICAxMDc0LCAgMTA4MCwgIDEwODMsICAxMDg2LCAgMTA4OSwgIDEwOTIsICAxMDk2LCAgMTA5OSwgIDExMDIsICAxMTA2LAorICAxMTA4LCAgMTExMiwgIDExMTYsICAxMTE4LCAgMTEyMiwgIDExMjUsICAxMTMyLCAgMTEzNSwgIDExMzcsICAxMTQ1LAorICAxMTU0LCAgMTE2MCwgIDExNjcsICAxMTY5LCAgMTE3MSwgIDExODQsICAxMTg3LCAgMTE4OSwgIDExOTEsICAxMTkzLAorICAxMTk1LCAgMTE5NywgIDExOTksICAxMjAxLCAgMTIwMywgIDEyMDUsICAxMjA3LCAgMTIwOSwgIDEyMTEsICAxMjEzLAorICAxMjE1LCAgMTIxNywgIDEyMTksICAxMjIxLCAgMTIyMywgIDEyMjUsICAxMjI3LCAgMTIzMSwgIDEyMzMsICAxMjM1LAorICAxMjUyLCAgMTI1NSwgIDEyNTYsICAxMjU3LCAgMTI1OCwgIDEyNjEsICAxMjYzLCAgMTI2NCwgIDEyNjcsICAxMjY5LAorICAxMjcxLCAgMTI3MywgIDEyNzcsICAxMjc5LCAgMTI4MCwgIDEyODQsICAxMjkyLCAgMTI5MywgIDEyOTQsICAxMzAyLAorICAxMzEwLCAgMTMxOCwgIDEzMjAsICAxMzI4LCAgMTM0OSwgIDEzNTYsICAxMzYzLCAgMTM2NSwgIDEzNzQsICAxMzc5LAorICAxNDAyLCAgMTQ0NiwgIDE0NDcsICAxNDUxLCAgMTQ1NSwgIDE0NTksICAxNDYzLCAgMTQ2NSwgIDE0NjksICAxNDcxLAorICAxNDc5LCAgMTQ4MSwgIDE0ODYsICAxNDkyLCAgMTQ5NCwgIDE0OTksICAxNTE0LCAgMTUyOSwgIDE1NDAsICAxNTUyLAorICAxNTYwLCAgMTU2OSwgIDE2MTMsICAxNjE2LCAgMTYyMCwgIDE2MjMsICAxNjI3LCAgMTYzMCwgIDE2MzUsICAxNjM3LAorICAxNjQxLCAgMTY1NCwgIDE2NTcsICAxNjY0LCAgMTY3MSwgIDE2NzYsICAxNjc4LCAgMTY4MywgIDE2ODUsICAxNjkyLAorICAxNjk0LCAgMTY5OCwgIDE3MDIsICAxNzA4LCAgMTcxMiwgIDE3MTUsICAxNzE4LCAgMTcyMSwgIDE3MzEsICAxNzMzLAorICAxNzM2LCAgMTc0MCwgIDE3NDMsICAxNzQ2LCAgMTc0OSwgIDE3NTIsICAxNzU4LCAgMTc2NCwgIDE3NjYsICAxNzcxLAorICAxNzczLCAgMTc4MiwgIDE3ODUsICAxNzg3LCAgMTc5MCwgIDE3OTYsICAxNzk4LCAgMTgwOCwgIDE4MTIsICAxODE1LAorICAxODE4LCAgMTgyMywgIDE4MjYsICAxODM0LCAgMTgzNiwgIDE4MzgsICAxODQwLCAgMTg0MywgIDE4NDYsICAxODYxLAorICAxODgwLCAgMTg4MywgIDE4ODUsICAxODg4LCAgMTg5MCwgIDE4OTMsICAxODk1LCAgMTg5OCwgIDE5MDAsICAxOTAzLAorICAxOTA2LCAgMTkxMCwgIDE5MjksICAxOTMxLCAgMTk1MSwgIDE5NTcsICAxOTU4LCAgMTk2NCwgIDE5NzMsICAxOTc1LAorICAxOTg1LCAgMTk5NCwgIDE5OTYsICAyMDA4LCAgMjAxMSwgIDIwMTUsICAyMDE4LCAgMjAyMiwgIDIwMjcsICAyMDMwLAorICAyMDM0LCAgMjAzNywgIDIwMzksICAyMDQxLCAgMjA0MywgIDIwNTAsICAyMDUyLCAgMjA1MywgIDIwNTQsICAyMDU4LAorICAyMDYxLCAgMjA2NSwgIDIwNjgsICAyMDc0LCAgMjA3NiwgIDIwNzksICAyMDgyLCAgMjA4NSwgIDIwOTEsICAyMDk0LAorICAyMDk3LCAgMjA5OSwgIDIxMDEsICAyMTAzLCAgMjEwNywgIDIxMTMsICAyMTIxLCAgMjEyMywgIDIxMjcsICAyMTI5LAorICAyMTM0LCAgMjEzNywgIDIxNDAsICAyMTQyLCAgMjE0NCwgIDIxNDgsICAyMTUyLCAgMjE1NywgIDIxNjEsICAyMTY0LAorICAyMTY5LCAgMjE3MywgIDIxNzYsICAyMTc5LCAgMjE4MiwgIDIxODYsICAyMjIxLCAgMjIyNywgIDIyMzMsICAyMjQ1LAorICAyMjQ3LCAgMjI1MCwgIDIyNTIsICAyMjU3LCAgMjI1OSwgIDIyNjEsICAyMjYzLCAgMjI2NSwgIDIyNjksICAyMjc0LAorICAyMjc5LCAgMjI5NCwgIDIyOTYsICAyMzAwLCAgMjMwNSwgIDIzMDgsICAyMzE1LCAgMjM0MywgIDIzNDksICAyMzUxLAorICAyMzU0LCAgMjM1NywgIDIzNTksICAyMzYzLCAgMjM2NSwgIDIzNjksICAyMzk1LCAgMjQyNCwgIDI0MjYsICAyNDI4LAorICAyNDMwLCAgMjQ1MSwgIDI0NzQsICAyNDc2LCAgMjQ4MCwgIDI1MDYsICAyNTE1LCAgMjU5OCwgIDI2MDUsICAyNjA4LAorICAyNjE2LCAgMjYyNywgIDI2MzYsICAyNjQwLCAgMjY1NSwgIDI2NTgsICAyNjYzLCAgMjY2NSwgIDI2NjcsICAyNjY5LAorICAyNjcxLCAgMjY3MywgIDI2NzgsICAyNjg0LCAgMjY4NiwgIDI2ODksICAyNjkyLCAgMjY5NCwgIDI3MDUsICAyNzEwLAorICAyNzEzLCAgMjcxOSwgIDI3MjIsICAyNzIzLCAgMjczNCwgIDI3MzcsICAyNzM4LCAgMjc0OSwgIDI3NTEsICAyNzU0LAorICAyNzU2LCAgMjc1OSwgIDI3NjYsICAyNzc0LCAgMjc4MSwgIDI3ODcsICAyNzkzLCAgMjgwMSwgIDI4MDUsICAyODEwLAorICAyODE0LCAgMjgxNywgIDI4MjYsICAyODI4LCAgMjgzMiwgIDI4MzUsICAyODQwLCAgMjg0NCwgIDI4NDksICAyODU5LAorICAyODYyLCAgMjg2NiwgIDI4NzAsICAyODc4LCAgMjg4MywgIDI4ODksICAyODkyLCAgMjg5NCwgIDI4OTYsICAyOTAyLAorICAyOTA1LCAgMjkwNywgIDI5MDksICAyOTExLCAgMjkxNSwgIDI5MTgsICAyOTM5LCAgMjk0NywgIDI5NDgsICAyOTUyLAorICAyOTU3LCAgMjk2MCwgIDI5NjIsICAyOTY0LCAgMjk2NiwgIDI5NzAsICAyOTc2LCAgMjk3OSwgIDI5ODEsICAyOTgzLAorICAyOTg1LCAgMjk4OSwgIDI5OTIsICAyOTk1LCAgMjk5NywgIDI5OTksICAzMDAxLCAgMzAwNSwgIDMwMDgsICAzMDExLAorICAzMDEzLCAgMzAxNSwgIDMwMTcsICAzMDI2LCAgMzAzMiwgIDMwMzgsICAzMDQwLCAgMzA0NCwgIDMwNDcsICAzMDQ5LAorICAzMDUzLCAgMzA1NSwgIDMwNTYsICAzMDU5LCAgMzA2MSwgIDMwNjcsICAzMDgyLCAgMzA4OCwgIDMwOTgsICAzMTEyLAorICAzMTIxLCAgMzEyMiwgIDMxMjYsICAzMTI5LCAgMzEzNSwgIDMxNDEsICAzMTQ0LCAgMzE0NiwgIDMxNDgsICAzMTUwLAorICAzMTU0LCAgMzE1OCwgIDMxNjIsICAzMTY1LCAgMzE3MCwgIDMxNzMsICAzMTc1LCAgMzE3NywgIDMxNzksICAzMTgxLAorICAzMTgzLCAgMzE4NSwgIDMxODcsICAzMTkxLCAgMzE5NSwgIDMxOTksICAzMjAzLCAgMzIwNCwgIDMyMDYsICAzMjA4LAorICAzMjEwLCAgMzIxMiwgIDMyMTQsICAzMjE2LCAgMzIxOCwgIDMyMjAsICAzMjI4LCAgMzIzMCwgIDMyMzEsICAzMjMyLAorICAzMjM1LCAgMzI0MywgIDMyNDgsICAzMjU1LCAgMzI1NywgIDMyNjIsICAzMjY0LCAgMzI2NywgIDMyODEsICAzMjg0LAorICAzMjg3LCAgMzI5NiwgIDMzMDgsICAzMzE5LCAgMzMzOSwgIDMzNDksICAzMzUyLCAgMzM2MCwgIDMzNzIsICAzMzc1LAorICAzMzc4LCAgMzM4MSwgIDMzOTcsICAzNDAwLCAgMzQxMSwgIDM0MTIsICAzNDE2LCAgMzQzMSwgIDM0NTAsICAzNDYyLAorICAzNDc2LCAgMzQ5MCwgIDM1MDMsICAzNTIyLCAgMzU0MCwgIDM1NTksICAzNTY3LCAgMzU4OCwgIDM2MDYsICAzNjE5LAorICAzNjIwLCAgMzYyMywgIDM2MjMsICAzNjI2LCAgMzYyNiwgIDM2MjksICAzNjI5LCAgMzYzNSwgIDM2NDEsICAzNjQ0LAorICAzNjQ5LCAgMzY1NiwgIDM2NjUsICAzNjc0LCAgMzY4MywgIDM2OTEsICAzNzA0LCAgMzcwNiwgIDM3MTAsICAzNzEyLAorICAzNzE1LCAgMzcyMiwgIDM3MjUsICAzNzMzLCAgMzc0OSwgIDM3NjAsICAzNzcyLCAgMzc3NCwgIDM3NzcsICAzNzg3LAorICAzNzk3LCAgMzgwOCwgIDM4MTAsICAzODEyLCAgMzgxNSwgIDM4MzIsICAzODM4LCAgMzg0NiwgIDM4NDgsICAzODUwLAorICAzODU0LCAgMzg1NywgIDM4NTgsICAzODY2LCAgMzg3MCwgIDM4NzQsICAzODc3LCAgMzg3OCwgIDM4ODQsICAzODg3LAorICAzODkwLCAgMzg5MiwgIDM4OTYsICAzOTAxLCAgMzkwNCwgIDM5MTQsICAzOTE5LCAgMzkyMCwgIDM5MjgsICAzOTM0LAorICAzOTM5LCAgMzk0MywgIDM5NDgsICAzOTUyLCAgMzk1NiwgIDM5NjAsICAzOTY1LCAgMzk3NiwgIDM5OTAsICAzOTk0LAorICAzOTk3LCAgMzk5OSwgIDQwMDMsICA0MDA3LCAgNDAxMCwgIDQwMTMsICA0MDE1LCAgNDAxOSwgIDQwMjEsICA0MDI4LAorICA0MDM1LCAgNDAzOCwgIDQwNDEsICA0MDQ1LCAgNDA0OSwgIDQwNTUsICA0MDU5LCAgNDA2NCwgIDQwNjYsICA0MDY5LAorICA0MDc0LCAgNDA4MCwgIDQwOTAsICA0MDkzLCAgNDA5NSwgIDQwOTksICA0MTA0LCAgNDEwNiwgIDQxMTMsICA0MTE2LAorICA0MTE4LCAgNDEyMCwgIDQxMjYsICA0MTMxLCAgNDEzNCwgIDQxMzYsICA0MTM4LCAgNDE0MCwgIDQxNDIsICA0MTQ0LAorICA0MTQ2LCAgNDE0OCwgIDQxNTAsICA0MTUyLCAgNDE1NCwgIDQxNTYsICA0MTU4LCAgNDE2MCwgIDQxNjIsICA0MTY0LAorICA0MTY2LCAgNDE2OCwgIDQxNzAsICA0MTcyLCAgNDE3NCwgIDQxNzYsICA0MTc4LCAgNDE4MCwgIDQxODIsICA0MTg0LAorICA0MTg2LCAgNDE4OCwgIDQxOTAsICA0MTkyLCAgNDE5NCwgIDQxOTYsICA0MTk5LCAgNDIwMQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB5eXRuYW1lW10gPSB7ICAgIiQiLCJlcnJvciIsIiR1bmRlZmluZWQuIiwiSURFTlRJRklFUiIsCisiVFlQRU5BTUUiLCJTRUxGTkFNRSIsIlNDU1BFQyIsIlRZUEVTUEVDIiwiQ1ZfUVVBTElGSUVSIiwiQ09OU1RBTlQiLCJTVFJJTkciLAorIkVMTElQU0lTIiwiU0laRU9GIiwiRU5VTSIsIklGIiwiRUxTRSIsIldISUxFIiwiRE8iLCJGT1IiLCJTV0lUQ0giLCJDQVNFIiwiREVGQVVMVCIsCisiQlJFQUsiLCJDT05USU5VRSIsIlJFVFVSTiIsIkdPVE8iLCJBU01fS0VZV09SRCIsIkdDQ19BU01fS0VZV09SRCIsIlRZUEVPRiIsCisiQUxJR05PRiIsIlNJR09GIiwiQVRUUklCVVRFIiwiRVhURU5TSU9OIiwiTEFCRUwiLCJSRUFMUEFSVCIsIklNQUdQQVJUIiwiQUdHUiIsCisiVklTU1BFQyIsIkRFTEVURSIsIk5FVyIsIlRISVMiLCJPUEVSQVRPUiIsIkNYWF9UUlVFIiwiQ1hYX0ZBTFNFIiwiTkFNRVNQQUNFIiwKKyJUWVBFTkFNRV9LRVlXT1JEIiwiVVNJTkciLCJMRUZUX1JJR0hUIiwiVEVNUExBVEUiLCJUWVBFSUQiLCJEWU5BTUlDX0NBU1QiLCJTVEFUSUNfQ0FTVCIsCisiUkVJTlRFUlBSRVRfQ0FTVCIsIkNPTlNUX0NBU1QiLCJTQ09QRSIsIkVNUFRZIiwiUFRZUEVOQU1FIiwiTlNOQU1FIiwiJ3snIiwiJywnIiwKKyInOyciLCJUSFJPVyIsIic6JyIsIkFTU0lHTiIsIic9JyIsIic/JyIsIk9ST1IiLCJBTkRBTkQiLCInfCciLCInXiciLCInJiciLCJNSU5fTUFYIiwKKyJFUUNPTVBBUkUiLCJBUklUSENPTVBBUkUiLCInPCciLCInPiciLCJMU0hJRlQiLCJSU0hJRlQiLCInKyciLCInLSciLCInKiciLCInLyciLAorIiclJyIsIlBPSU5UU0FUX1NUQVIiLCJET1RfU1RBUiIsIlVOQVJZIiwiUExVU1BMVVMiLCJNSU5VU01JTlVTIiwiJ34nIiwiSFlQRVJVTkFSWSIsCisiUEFSRU5fU1RBUl9QQVJFTiIsIlBPSU5UU0FUIiwiJy4nIiwiJygnIiwiJ1snIiwiVFJZIiwiQ0FUQ0giLCJUWVBFTkFNRV9FTExJUFNJUyIsCisiUFJFX1BBUlNFRF9GVU5DVElPTl9ERUNMIiwiRVhURVJOX0xBTkdfU1RSSU5HIiwiQUxMIiwiUFJFX1BBUlNFRF9DTEFTU19ERUNMIiwKKyJERUZBUkciLCJERUZBUkdfTUFSS0VSIiwiVFlQRU5BTUVfREVGTiIsIklERU5USUZJRVJfREVGTiIsIlBUWVBFTkFNRV9ERUZOIiwKKyJFTkRfT0ZfTElORSIsIkVORF9PRl9TQVZFRF9JTlBVVCIsIicpJyIsIid9JyIsIichJyIsIiddJyIsInByb2dyYW0iLCJleHRkZWZzIiwKKyJAMSIsImV4dGRlZnNfb3B0IiwiLmh1c2hfd2FybmluZyIsIi53YXJuaW5nX29rIiwiZXh0ZW5zaW9uIiwiYXNtX2tleXdvcmQiLCJsYW5nX2V4dGRlZiIsCisiQDIiLCJleHRkZWYiLCJAMyIsIkA0IiwidXNpbmdfZGVjbCIsImFueV9pZCIsImV4dGVybl9sYW5nX3N0cmluZyIsInRlbXBsYXRlX2hlYWRlciIsCisiQDUiLCJ0ZW1wbGF0ZV9wYXJtX2xpc3QiLCJ0ZW1wbGF0ZV90eXBlX3Bhcm0iLCJ0ZW1wbGF0ZV9wYXJtIiwidGVtcGxhdGVfZGVmIiwKKyJkYXRhZGVmIiwiY3Rvcl9pbml0aWFsaXplcl9vcHQiLCJtYXliZV9yZXR1cm5faW5pdCIsImVhdF9zYXZlZF9pbnB1dCIsImZuZGVmIiwKKyJjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yIiwiQDYiLCJANyIsIkA4IiwiQDkiLCJmbi5kZWYxIiwiY29tcG9uZW50X2NvbnN0cnVjdG9yX2RlY2xhcmF0b3IiLAorImZuLmRlZjIiLCJyZXR1cm5faWQiLCJyZXR1cm5faW5pdCIsImJhc2VfaW5pdCIsIi5zZXRfYmFzZV9pbml0IiwibWVtYmVyX2luaXRfbGlzdCIsCisibWVtYmVyX2luaXQiLCJpZGVudGlmaWVyIiwibm90eXBlX2lkZW50aWZpZXIiLCJpZGVudGlmaWVyX2RlZm4iLCJleHBsaWNpdF9pbnN0YW50aWF0aW9uIiwKKyJ0ZW1wbGF0ZV90eXBlIiwic2VsZl90ZW1wbGF0ZV90eXBlIiwidGVtcGxhdGVfY2xvc2VfYnJhY2tldCIsInRlbXBsYXRlX2FyZ19saXN0IiwKKyJ0ZW1wbGF0ZV9hcmciLCJ1bm9wIiwiZXhwciIsInBhcmVuX2V4cHJfb3JfbnVsbCIsInBhcmVuX2NvbmRfb3JfbnVsbCIsInhjb25kIiwKKyJjb25kaXRpb24iLCJAMTAiLCJjb21wc3RtdGVuZCIsImFscmVhZHlfc2NvcGVkX3N0bXQiLCJAMTEiLCJub250cml2aWFsX2V4cHJsaXN0IiwKKyJub25udWxsX2V4cHJsaXN0IiwidW5hcnlfZXhwciIsIm5ld19wbGFjZW1lbnQiLCJuZXdfaW5pdGlhbGl6ZXIiLCJyZWdjYXN0X29yX2Fic2RjbCIsCisiY2FzdF9leHByIiwiZXhwcl9ub19jb21tYXMiLCJub3R5cGVfdW5xdWFsaWZpZWRfaWQiLCJ1bnF1YWxpZmllZF9pZCIsImV4cHJfb3JfZGVjbGFyYXRvciIsCisiZGlyZWN0X25vdHlwZV9kZWNsYXJhdG9yIiwicHJpbWFyeSIsIkAxMiIsIm5ldyIsImRlbGV0ZSIsImJvb2xlYW4ubGl0ZXJhbCIsCisic3RyaW5nIiwibm9kZWNscyIsIm9iamVjdCIsImRlY2wiLCJkZWNsYXJhdG9yIiwiZmNhc3Rfb3JfYWJzZGNsIiwidHlwZV9pZCIsCisidHlwZWRfZGVjbHNwZWNzIiwidHlwZWRfZGVjbHNwZWNzMSIsInJlc2VydmVkX2RlY2xzcGVjcyIsImRlY2xtb2RzIiwidHlwZWRfdHlwZXNwZWNzIiwKKyJyZXNlcnZlZF90eXBlc3BlY3F1YWxzIiwidHlwZXNwZWMiLCJ0eXBlc3BlY3F1YWxfcmVzZXJ2ZWQiLCJpbml0ZGVjbHMiLCJub3R5cGVfaW5pdGRlY2xzIiwKKyJub21vZHNfaW5pdGRlY2xzIiwibWF5YmVhc20iLCJpbml0ZGNsMCIsIkAxMyIsImluaXRkY2wiLCJAMTQiLCJub3R5cGVfaW5pdGRjbDAiLAorIkAxNSIsIm5vbW9kc19pbml0ZGNsMCIsIkAxNiIsIm1heWJlX2F0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGUiLCJhdHRyaWJ1dGVfbGlzdCIsCisiYXR0cmliIiwiYW55X3dvcmQiLCJpZGVudGlmaWVyc19vcl90eXBlbmFtZXMiLCJtYXliZV9pbml0IiwiaW5pdCIsImluaXRsaXN0IiwKKyJmbi5kZWZwZW4iLCJwZW5kaW5nX2lubGluZSIsInBlbmRpbmdfaW5saW5lcyIsImRlZmFyZ19hZ2FpbiIsInBlbmRpbmdfZGVmYXJncyIsCisic3RydWN0c3AiLCJAMTciLCJAMTgiLCJAMTkiLCJAMjAiLCJtYXliZWNvbW1hIiwibWF5YmVjb21tYV93YXJuIiwiYWdnciIsIm5hbWVkX2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSIsCisibmFtZWRfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlX2RlZm4iLCJuYW1lZF9jb21wbGV4X2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSIsCisiZG9feHJlZl9kZWZuIiwibmFtZWRfY2xhc3NfaGVhZCIsInVubmFtZWRfY2xhc3NfaGVhZCIsImNsYXNzX2hlYWQiLCJtYXliZV9iYXNlX2NsYXNzX2xpc3QiLAorImJhc2VfY2xhc3NfbGlzdCIsImJhc2VfY2xhc3MiLCJiYXNlX2NsYXNzLjEiLCJiYXNlX2NsYXNzX2FjY2Vzc19saXN0IiwibGVmdF9jdXJseSIsCisic2VsZl9yZWZlcmVuY2UiLCJvcHQuY29tcG9uZW50X2RlY2xfbGlzdCIsImNvbXBvbmVudF9kZWNsX2xpc3QiLCJjb21wb25lbnRfZGVjbCIsCisiY29tcG9uZW50X2RlY2xfMSIsImNvbXBvbmVudHMiLCJub3R5cGVfY29tcG9uZW50cyIsImNvbXBvbmVudF9kZWNsYXJhdG9yMCIsCisiY29tcG9uZW50X2RlY2xhcmF0b3IiLCJhZnRlcl90eXBlX2NvbXBvbmVudF9kZWNsYXJhdG9yMCIsIm5vdHlwZV9jb21wb25lbnRfZGVjbGFyYXRvcjAiLAorImFmdGVyX3R5cGVfY29tcG9uZW50X2RlY2xhcmF0b3IiLCJub3R5cGVfY29tcG9uZW50X2RlY2xhcmF0b3IiLCJlbnVtbGlzdCIsImVudW1lcmF0b3IiLAorIm5ld190eXBlX2lkIiwiY3ZfcXVhbGlmaWVycyIsIm5vbmVtcHR5X2N2X3F1YWxpZmllcnMiLCJzdXNwZW5kX21vbSIsIm5vbm1vbWVudGFyeV9leHByIiwKKyJtYXliZV9wYXJtbGlzdCIsImFmdGVyX3R5cGVfZGVjbGFyYXRvciIsImNvbXBsZXRlX3R5cGVfbmFtZSIsIm5lc3RlZF90eXBlIiwKKyJkaXJlY3RfYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yIiwibm90eXBlX2RlY2xhcmF0b3IiLCJjb21wbGV4X25vdHlwZV9kZWNsYXJhdG9yIiwKKyJjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvciIsInF1YWxpZmllZF9pZCIsIm5vdHlwZV9xdWFsaWZpZWRfaWQiLCJvdmVycXVhbGlmaWVkX2lkIiwKKyJmdW5jdGlvbmFsX2Nhc3QiLCJ0eXBlX25hbWUiLCJuZXN0ZWRfbmFtZV9zcGVjaWZpZXIiLCJuZXN0ZWRfbmFtZV9zcGVjaWZpZXJfMSIsCisiY29tcGxleF90eXBlX25hbWUiLCJwdHJfdG9fbWVtIiwiZ2xvYmFsX3Njb3BlIiwibmV3X2RlY2xhcmF0b3IiLCJkaXJlY3RfbmV3X2RlY2xhcmF0b3IiLAorImFic2RjbCIsImRpcmVjdF9hYnN0cmFjdF9kZWNsYXJhdG9yIiwic3RtdHMiLCJlcnJzdG10IiwiLnB1c2hsZXZlbCIsIi5wb3BsZXZlbCIsCisibWF5YmVfbGFiZWxfZGVjbHMiLCJsYWJlbF9kZWNscyIsImxhYmVsX2RlY2wiLCJjb21wc3RtdF9vcl9lcnJvciIsImNvbXBzdG10IiwKKyJAMjEiLCJzaW1wbGVfaWYiLCJAMjIiLCJAMjMiLCJpbXBsaWNpdGx5X3Njb3BlZF9zdG10IiwiQDI0Iiwic3RtdCIsInNpbXBsZV9zdG10IiwKKyJAMjUiLCJAMjYiLCJAMjciLCJAMjgiLCJAMjkiLCJAMzAiLCJAMzEiLCJAMzIiLCJAMzMiLCJAMzQiLCJAMzUiLCJAMzYiLCJAMzciLAorIkAzOCIsIkAzOSIsImZ1bmN0aW9uX3RyeV9ibG9jayIsIkA0MCIsIkA0MSIsInRyeV9ibG9jayIsIkA0MiIsIkA0MyIsImhhbmRsZXJfc2VxIiwKKyJoYW5kbGVyIiwiQDQ0IiwiQDQ1IiwiQDQ2IiwidHlwZV9zcGVjaWZpZXJfc2VxIiwiaGFuZGxlcl9hcmdzIiwibGFiZWxfY29sb24iLAorImZvci5pbml0LnN0YXRlbWVudCIsIm1heWJlX2N2X3F1YWxpZmllciIsInhleHByIiwiYXNtX29wZXJhbmRzIiwibm9ubnVsbF9hc21fb3BlcmFuZHMiLAorImFzbV9vcGVyYW5kIiwiYXNtX2Nsb2JiZXJzIiwicGFybWxpc3QiLCJjb21wbGV4X3Bhcm1saXN0IiwiZGVmYXJnIiwiQDQ3IiwiZGVmYXJnMSIsCisicGFybXMiLCJwYXJtc19jb21tYSIsIm5hbWVkX3Bhcm0iLCJmdWxsX3Bhcm0iLCJwYXJtIiwic2VlX3R5cGVuYW1lIiwiYmFkX3Bhcm0iLAorImV4Y2VwdGlvbl9zcGVjaWZpY2F0aW9uX29wdCIsImFuc2lfcmFpc2VfaWRlbnRpZmllciIsImFuc2lfcmFpc2VfaWRlbnRpZmllcnMiLAorImNvbnZlcnNpb25fZGVjbGFyYXRvciIsIm9wZXJhdG9yIiwib3BlcmF0b3JfbmFtZSIsIiIKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9IHsgICAgIDAsCisgICAxMTMsICAgMTEzLCAgIDExNSwgICAxMTQsICAgMTE0LCAgIDExNiwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksCisgICAxMjAsICAgMTIwLCAgIDEyMiwgICAxMjEsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjMsCisgICAxMjMsICAgMTI0LCAgIDEyMywgICAxMjUsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjYsCisgICAxMjYsICAgMTI2LCAgIDEyNywgICAxMjcsICAgMTI3LCAgIDEyNywgICAxMjgsICAgMTI4LCAgIDEzMCwgICAxMjksCisgICAxMjksICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsCisgICAxMzMsICAgMTM0LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUsCisgICAxMzUsICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzcsICAgMTM4LCAgIDEzOCwgICAxMzksCisgICAxMzksICAgMTM5LCAgIDE0MSwgICAxNDAsICAgMTQwLCAgIDE0MiwgICAxNDAsICAgMTQwLCAgIDE0MywgICAxNDAsCisgICAxNDAsICAgMTQ0LCAgIDE0MCwgICAxNDAsICAgMTQ1LCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0NSwgICAxNDYsCisgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ3LCAgIDE0NywgICAxNDcsICAgMTQ3LCAgIDE0NywgICAxNDcsCisgICAxNDgsICAgMTQ5LCAgIDE0OSwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MiwgICAxNTIsCisgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1NCwgICAxNTQsCisgICAxNTQsICAgMTU0LCAgIDE1NCwgICAxNTUsICAgMTU1LCAgIDE1NSwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTcsCisgICAxNTcsICAgMTU3LCAgIDE1NywgICAxNTcsICAgMTU3LCAgIDE1NywgICAxNTcsICAgMTU4LCAgIDE1OCwgICAxNTgsCisgICAxNTgsICAgMTU4LCAgIDE1OSwgICAxNTksICAgMTYwLCAgIDE2MCwgICAxNjEsICAgMTYxLCAgIDE2MiwgICAxNjIsCisgICAxNjMsICAgMTYzLCAgIDE2MywgICAxNjMsICAgMTYzLCAgIDE2NCwgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsCisgICAxNjYsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY5LCAgIDE2OCwgICAxNjgsICAgMTcwLCAgIDE3MCwgICAxNzAsCisgICAxNzAsICAgMTcyLCAgIDE3MSwgICAxNzEsICAgMTczLCAgIDE3MywgICAxNzMsICAgMTczLCAgIDE3NCwgICAxNzQsCisgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsCisgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsCisgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc2LCAgIDE3NiwgICAxNzcsICAgMTc3LCAgIDE3NywgICAxNzcsCisgICAxNzgsICAgMTc4LCAgIDE3OSwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsCisgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsCisgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODAsCisgICAxODEsICAgMTgxLCAgIDE4MSwgICAxODEsICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MywgICAxODMsCisgICAxODMsICAgMTgzLCAgIDE4NCwgICAxODQsICAgMTg0LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsCisgICAxODUsICAgMTg1LCAgIDE4NiwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsCisgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsCisgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsCisgICAxODUsICAgMTg1LCAgIDE4NywgICAxODcsICAgMTg4LCAgIDE4OCwgICAxODksICAgMTg5LCAgIDE5MCwgICAxOTAsCisgICAxOTEsICAgMTkyLCAgIDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTQsCisgICAxOTQsICAgMTk1LCAgIDE5NSwgICAxOTYsICAgMTk2LCAgIDE5NiwgICAxOTYsICAgMTk2LCAgIDE5NywgICAxOTcsCisgICAxOTgsICAgMTk4LCAgIDE5OCwgICAxOTgsICAgMTk4LCAgIDE5OCwgICAxOTksICAgMTk5LCAgIDE5OSwgICAxOTksCisgICAxOTksICAgMjAwLCAgIDIwMCwgICAyMDAsICAgMjAwLCAgIDIwMCwgICAyMDAsICAgMjAxLCAgIDIwMSwgICAyMDEsCisgICAyMDEsICAgMjAyLCAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwMywgICAyMDMsICAgMjAzLCAgIDIwMywgICAyMDMsCisgICAyMDQsICAgMjA0LCAgIDIwNCwgICAyMDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA3LCAgIDIwNywgICAyMDgsCisgICAyMDgsICAgMjEwLCAgIDIwOSwgICAyMDksICAgMjEyLCAgIDIxMSwgICAyMTEsICAgMjE0LCAgIDIxMywgICAyMTMsCisgICAyMTYsICAgMjE1LCAgIDIxNSwgICAyMTcsICAgMjE3LCAgIDIxOCwgICAyMTgsICAgMjE5LCAgIDIyMCwgICAyMjAsCisgICAyMjEsICAgMjIxLCAgIDIyMSwgICAyMjEsICAgMjIxLCAgIDIyMiwgICAyMjIsICAgMjIyLCAgIDIyMiwgICAyMjMsCisgICAyMjMsICAgMjI0LCAgIDIyNCwgICAyMjUsICAgMjI1LCAgIDIyNSwgICAyMjUsICAgMjI1LCAgIDIyNiwgICAyMjYsCisgICAyMjYsICAgMjI2LCAgIDIyNiwgICAyMjYsICAgMjI3LCAgIDIyOCwgICAyMjgsICAgMjI4LCAgIDIyOSwgICAyMjksCisgICAyMzAsICAgMjMwLCAgIDIzMSwgICAyMzEsICAgMjMxLCAgIDIzMywgICAyMzIsICAgMjMyLCAgIDIzNCwgICAyMzIsCisgICAyMzIsICAgMjMyLCAgIDIzMiwgICAyMzIsICAgMjMyLCAgIDIzNSwgICAyMzYsICAgMjMyLCAgIDIzMiwgICAyMzcsCisgICAyMzcsICAgMjM4LCAgIDIzOCwgICAyMzksICAgMjM5LCAgIDIzOSwgICAyMzksICAgMjM5LCAgIDI0MCwgICAyNDEsCisgICAyNDIsICAgMjQyLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0NCwgICAyNDQsICAgMjQ1LCAgIDI0NiwgICAyNDYsCisgICAyNDcsICAgMjQ3LCAgIDI0NywgICAyNDgsICAgMjQ4LCAgIDI0OSwgICAyNDksICAgMjUwLCAgIDI1MCwgICAyNTAsCisgICAyNTAsICAgMjUwLCAgIDI1MSwgICAyNTEsICAgMjUxLCAgIDI1MSwgICAyNTIsICAgMjUzLCAgIDI1NCwgICAyNTQsCisgICAyNTQsICAgMjU0LCAgIDI1NSwgICAyNTUsICAgMjU2LCAgIDI1NiwgICAyNTYsICAgMjU2LCAgIDI1NiwgICAyNTYsCisgICAyNTYsICAgMjU2LCAgIDI1NywgICAyNTcsICAgMjU3LCAgIDI1NywgICAyNTcsICAgMjU3LCAgIDI1NywgICAyNTcsCisgICAyNTcsICAgMjU4LCAgIDI1OCwgICAyNTgsICAgMjU5LCAgIDI1OSwgICAyNTksICAgMjYwLCAgIDI2MCwgICAyNjEsCisgICAyNjEsICAgMjYyLCAgIDI2MiwgICAyNjMsICAgMjYzLCAgIDI2MywgICAyNjMsICAgMjY0LCAgIDI2NCwgICAyNjUsCisgICAyNjUsICAgMjY1LCAgIDI2NiwgICAyNjYsICAgMjY3LCAgIDI2NywgICAyNjgsICAgMjY4LCAgIDI2OCwgICAyNjksCisgICAyNjksICAgMjcwLCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzMsICAgMjczLCAgIDI3MywgICAyNzQsCisgICAyNzQsICAgMjc0LCAgIDI3NCwgICAyNzQsICAgMjc0LCAgIDI3NSwgICAyNzUsICAgMjc1LCAgIDI3NSwgICAyNzYsCisgICAyNzcsICAgMjc3LCAgIDI3NywgICAyNzcsICAgMjc3LCAgIDI3NywgICAyNzgsICAgMjc4LCAgIDI3OCwgICAyNzgsCisgICAyNzgsICAgMjc4LCAgIDI3OSwgICAyNzksICAgMjc5LCAgIDI3OSwgICAyNzksICAgMjc5LCAgIDI4MCwgICAyODAsCisgICAyODAsICAgMjgwLCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODMsICAgMjg0LCAgIDI4NCwgICAyODQsCisgICAyODUsICAgMjg1LCAgIDI4NSwgICAyODYsICAgMjg2LCAgIDI4NywgICAyODcsICAgMjg3LCAgIDI4NywgICAyODgsCisgICAyODgsICAgMjg4LCAgIDI4OSwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTEsICAgMjkxLCAgIDI5MSwgICAyOTEsCisgICAyOTEsICAgMjkxLCAgIDI5MiwgICAyOTIsICAgMjkzLCAgIDI5MywgICAyOTMsICAgMjkzLCAgIDI5MywgICAyOTMsCisgICAyOTMsICAgMjkzLCAgIDI5MywgICAyOTMsICAgMjkzLCAgIDI5NCwgICAyOTQsICAgMjk0LCAgIDI5NCwgICAyOTQsCisgICAyOTQsICAgMjk0LCAgIDI5NCwgICAyOTQsICAgMjk0LCAgIDI5NCwgICAyOTUsICAgMjk1LCAgIDI5NSwgICAyOTUsCisgICAyOTYsICAgMjk3LCAgIDI5OCwgICAyOTksICAgMjk5LCAgIDMwMCwgICAzMDAsICAgMzAxLCAgIDMwMiwgICAzMDIsCisgICAzMDQsICAgMzAzLCAgIDMwNiwgICAzMDcsICAgMzA1LCAgIDMwOCwgICAzMDksICAgMzA4LCAgIDMxMCwgICAzMTAsCisgICAzMTEsICAgMzExLCAgIDMxMiwgICAzMTMsICAgMzExLCAgIDMxMSwgICAzMTQsICAgMzE1LCAgIDMxMSwgICAzMTYsCisgICAzMTcsICAgMzExLCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMTEsICAgMzIyLCAgIDMyMywgICAzMTEsCisgICAzMjQsICAgMzExLCAgIDMyNSwgICAzMTEsICAgMzI2LCAgIDMxMSwgICAzMTEsICAgMzExLCAgIDMxMSwgICAzMTEsCisgICAzMTEsICAgMzExLCAgIDMxMSwgICAzMTEsICAgMzExLCAgIDMxMSwgICAzMTEsICAgMzExLCAgIDMxMSwgICAzMTEsCisgICAzMjgsICAgMzI5LCAgIDMyNywgICAzMzEsICAgMzMyLCAgIDMzMCwgICAzMzMsICAgMzMzLCAgIDMzNSwgICAzMzYsCisgICAzMzcsICAgMzM0LCAgIDMzOCwgICAzMzgsICAgMzM5LCAgIDMzOSwgICAzNDAsICAgMzQwLCAgIDM0MCwgICAzNDAsCisgICAzNDEsICAgMzQxLCAgIDM0MSwgICAzNDIsICAgMzQyLCAgIDM0MywgICAzNDMsICAgMzQzLCAgIDM0NCwgICAzNDQsCisgICAzNDUsICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ3LCAgIDM0OCwgICAzNDgsICAgMzQ4LCAgIDM0OSwgICAzNDksCisgICAzNDksICAgMzQ5LCAgIDM0OSwgICAzNDksICAgMzQ5LCAgIDM0OSwgICAzNDksICAgMzQ5LCAgIDM1MSwgICAzNTAsCisgICAzNTIsICAgMzUyLCAgIDM1MywgICAzNTMsICAgMzUzLCAgIDM1MywgICAzNTMsICAgMzU0LCAgIDM1NCwgICAzNTUsCisgICAzNTUsICAgMzU1LCAgIDM1NSwgICAzNTUsICAgMzU1LCAgIDM1NiwgICAzNTYsICAgMzU3LCAgIDM1NywgICAzNTgsCisgICAzNTksICAgMzU5LCAgIDM2MCwgICAzNjAsICAgMzYwLCAgIDM2MSwgICAzNjIsICAgMzYyLCAgIDM2MywgICAzNjMsCisgICAzNjMsICAgMzYzLCAgIDM2NCwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsCisgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsCisgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsCisgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1LCAgIDM2NSwgICAzNjUsICAgMzY1Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyMltdID0geyAgICAgMCwKKyAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMSwKKyAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDUsICAgICA0LCAgICAgNSwKKyAgICAgNCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDUsICAgICA1LCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMiwKKyAgICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgNSwKKyAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMSwKKyAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgNCwKKyAgICAgMywgICAgIDMsICAgICAwLCAgICAgOCwgICAgIDUsICAgICAwLCAgICAgOSwgICAgIDYsICAgICAwLCAgICAgOCwKKyAgICAgNSwgICAgIDAsICAgICA5LCAgICAgNiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgNiwKKyAgICAgNCwgICAgIDYsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMiwKKyAgICAgMywgICAgIDEsICAgICA0LCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMSwKKyAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgMywgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDQsICAgICAzLCAgICAgMywgICAgIDQsICAgICAzLCAgICAgNCwKKyAgICAgMywgICAgIDEsICAgICA0LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwKKyAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwKKyAgICAgMywgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNCwKKyAgICAgMywgICAgIDAsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMSwKKyAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwKKyAgICAgNCwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDQsICAgICA0LCAgICAgNSwgICAgIDUsICAgICA2LCAgICAgMiwKKyAgICAgNCwgICAgIDUsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMiwKKyAgICAgMywgICAgIDQsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICA1LCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMiwKKyAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwKKyAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgMywgICAgIDMsICAgICAwLCAgICAgNCwgICAgIDQsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMSwKKyAgICAgNCwgICAgIDEsICAgICA3LCAgICAgNywgICAgIDcsICAgICA3LCAgICAgNCwgICAgIDQsICAgICAyLCAgICAgMiwKKyAgICAgMSwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA1LCAgICAgMywgICAgIDUsICAgICAzLCAgICAgNCwKKyAgICAgNiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwKKyAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwKKyAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDMsICAgICA0LCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwKKyAgICAgMywgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgNCwKKyAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMCwKKyAgICAgNCwgICAgIDAsICAgICA2LCAgICAgMywgICAgIDAsICAgICA2LCAgICAgMywgICAgIDAsICAgICA2LCAgICAgMywKKyAgICAgMCwgICAgIDYsICAgICAzLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDYsICAgICAxLCAgICAgMywKKyAgICAgMCwgICAgIDEsICAgICA0LCAgICAgNiwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgMywgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgNCwgICAgIDYsICAgICAzLCAgICAgNSwgICAgIDEsICAgICA0LCAgICAgMywgICAgIDMsICAgICAwLCAgICAgMywKKyAgICAgMywgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgNywgICAgIDQsICAgICAwLCAgICAgNiwKKyAgICAgMywgICAgIDIsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDksICAgICAxLCAgICAgMCwKKyAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMywgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwKKyAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgNCwKKyAgICAgNCwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMiwKKyAgICAgNCwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDEsICAgICA1LCAgICAgNCwKKyAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMywgICAgIDAsICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgMSwgICAgIDQsICAgICA0LCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgMywgICAgIDQsICAgICA0LCAgICAgNCwKKyAgICAgNCwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDEsICAgICA2LCAgICAgMCwKKyAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICA0LCAgICAgNCwgICAgIDIsICAgICA0LCAgICAgMywKKyAgICAgMywgICAgIDIsICAgICAyLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMiwKKyAgICAgNCwgICAgIDQsICAgICAzLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwKKyAgICAgMywgICAgIDEsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMywgICAgIDEsICAgICA0LCAgICAgMywKKyAgICAgNCwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMiwKKyAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwKKyAgICAgMywgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMiwKKyAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDYsICAgICA0LCAgICAgNCwKKyAgICAgMywgICAgIDUsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMiwKKyAgICAgMCwgICAgIDUsICAgICAwLCAgICAgMCwgICAgIDYsICAgICAxLCAgICAgMCwgICAgIDQsICAgICAxLCAgICAgMSwKKyAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDYsICAgICAxLCAgICAgMCwgICAgIDAsICAgICA3LCAgICAgMCwKKyAgICAgMCwgICAgIDcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNCwgICAgIDAsICAgICAwLCAgICAgOSwKKyAgICAgMCwgICAgIDUsICAgICAwLCAgICAgNywgICAgIDAsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywKKyAgICAgNiwgICAgIDgsICAgIDEwLCAgICAxMiwgICAgIDQsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwKKyAgICAgMCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDgsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMSwKKyAgICAgMSwgICAgIDMsICAgICA0LCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMywKKyAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMCwKKyAgICAgMCwgICAgIDEsICAgICAwLCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMywKKyAgICAgMywgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMywgICAgIDIKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmFjdFtdID0geyAgICAgMywKKyAgICAxMywgICAgMTMsICAgICA1LCAgICAgMCwgICAgIDQsICAgICAwLCAgIDI0MywgICA1NzEsICAgNTcyLCAgIDMzMywKKyAgIDM0NSwgICA1MjIsICAgICAwLCAgICAxMSwgICAgMTIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEwLCAgIDQzNCwKKyAgIDc2MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTg1LCAgIDI0NCwgICAyNDUsICAgIDYyLCAgICAgMCwKKyAgICAgMCwgICA3NTAsICAgICAwLCAgICAzNywgICAgIDAsICAgICAwLCAgICAxNCwgICAgIDAsICAgICA4LCAgICAgMCwKKyAgICAxNywgICAgMTYsICAgIDY4LCAgICA4OSwgICAgNjUsICAgICAwLCAgIDU3MywgICAxNDIsICAgMjU0LCAgIDU1MiwKKyAgICAgMCwgICAzMjAsICAgICAwLCAgIDMxOSwgICAzMzgsICAgICAwLCAgIDM1OCwgICAzMzcsICAgMzc2LCAgIDM0NCwKKyAgICAgMCwgICA0NDUsICAgNDQ0LCAgIDQ1MSwgICA0NTAsICAgNDQ5LCAgIDQyOSwgICAzMzIsICAgMzQ2LCAgIDUzOCwKKyAgICA4NywgICAyNTMsICAgNTYzLCAgIDUzNiwgICAgIDAsICAgNTc0LCAgIDUyMCwgICAgIDAsICAgICAwLCAgIDI0MiwKKyAgICA2MCwgICAgNjEsICAgNTc2LCAgICAgMCwgICA1NzcsICAgICAwLCAgICAgMCwgICAxMTksICAgMTIwLCAgIDEyMSwKKyAgIDEyMiwgICAxMjMsICAgNDE5LCAgIDQyMiwgICAgIDAsICAgNTgxLCAgICAgMCwgICA0MjMsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIzLCAgICAyNCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMwLCAgICAgMCwgICAgIDAsICAgMzMzLCAgICAzOSwKKyAgIDEzMywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzIsICAgICAwLCAgIDU3OCwgICAgIDAsICAgNTUwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgNTQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTQsICAgICAwLCAgIDUyNCwKKyAgICAgMCwgICAyNTMsICAgNTIwLCAgICAyOSwgICAgIDAsICAgIDI3LCAgICAgMywgICAgMzgsICAgICAwLCAgICA1MywKKyAgICA1MiwgICAgNjksICAgIDE1LCAgICAgMCwgICAgIDAsICAgMzkyLCAgICA2NiwgICAgNTgsICAgNTc5LCAgIDUyNCwKKyAgICAgMCwgICA1MjAsICAgIDU5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4NSwgICAgIDAsICAgMzU0LCAgIDMxMCwKKyAgIDUzNSwgICAzMTEsICAgNTQ2LCAgICAgMCwgICA1MjAsICAgMzM1LCAgIDMzNCwgICAgNTcsICAgIDg4LCAgIDMyMSwKKyAgICAgMCwgICAzNTYsICAgMzM2LCAgICA4NiwgICAzMjcsICAgMzUxLCAgIDM1MiwgICAzMjIsICAgMzQwLCAgIDM0MiwKKyAgIDMzMSwgICAzNTMsICAgICAwLCAgICA1NCwgICAzNzcsICAgNDM1LCAgIDQzNiwgICA0MzcsICAgNDM4LCAgIDQ0OCwKKyAgIDEyOCwgICAxMjcsICAgMTI5LCAgIDQzOSwgICA0NDAsICAgNDQyLCAgICAgMCwgICA0NTEsICAgNzUwLCAgIDQ0NywKKyAgIDQ2NywgICA0NjgsICAgNTIzLCAgIDMzOSwgICAgIDAsICAgICAwLCAgIDM3NCwgICA1NzIsICAgNTgzLCAgIDE0MiwKKyAgIDU2NSwgICA1NDAsICAgNTc1LCAgICAgMCwgICA1MzksICAgNTM3LCAgICAgMCwgICA3OTgsICAgNzk0LCAgIDc5MywKKyAgIDc5MSwgICA3NzMsICAgNzc4LCAgIDc3OSwgICAgIDAsICAgNzg1LCAgIDc4NCwgICA3NzAsICAgNzcxLCAgIDc2OSwKKyAgIDc4OCwgICA3NzcsICAgNzc0LCAgIDc3NSwgICA3NzYsICAgNzgwLCAgIDc4MSwgICA3NjcsICAgNzY4LCAgIDc2NCwKKyAgIDc2NSwgICA3NjYsICAgNzkwLCAgIDc4MiwgICA3ODMsICAgNzcyLCAgIDc4OSwgICAgIDAsICAgNzg2LCAgIDY5MywKKyAgIDMzOCwgICA2OTQsICAgNzU5LCAgIDUyMiwgICAyNTcsICAgMjk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDI5NSwgICAyOTMsICAgMjcwLCAgIDI5NywgICAyOTgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDIzOSwgICAgIDAsICAgICAwLCAgIDE0NSwgICAxNDYsICAgMTUyLCAgIDE1MSwgICAgIDAsICAgMTUzLCAgIDE1NCwKKyAgICAgMCwgICAgIDAsICAgMTU1LCAgICAgMCwgICAxNDEsICAgICAwLCAgIDE0NywgICAgIDAsICAgMjEzLCAgICAgMCwKKyAgIDIxNiwgICAxNTAsICAgMjU2LCAgIDE4MSwgICAgIDAsICAgICAwLCAgIDI1OCwgICAyNTksICAgICAwLCAgIDE0OSwKKyAgIDMxNywgICAzMzgsICAgMzE4LCAgIDU2NiwgICAyODEsICAgMjcyLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgICAgMCwKKyAgIDEzNywgICAgIDAsICAgICAwLCAgIDEzNiwgICA0MjEsICAgICAwLCAgIDQxNiwgICA1ODIsICAgNTgwLCAgICAgMCwKKyAgIDE1NiwgICAxNTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgMzgxLCAgICAgMywgICAgMjIsICAgICAwLCAgIDQyNCwKKyAgICAgMCwgICAyNDcsICAgMjQ4LCAgICAgMCwgICAyNDYsICAgIDMzLCAgICAzNCwgICAgIDAsICAgNTY0LCAgICAzMiwKKyAgICAzMSwgICAgNDEsICAgICAwLCAgIDEzMSwgICA0NDIsICAgMTM5LCAgICAgMCwgICA1NDgsICAgICAwLCAgIDU0NywKKyAgIDI0MSwgICAyNTEsICAgICAwLCAgIDU1NiwgICAyNTAsICAgICAwLCAgIDU1NSwgICAgIDAsICAgMjU1LCAgIDU2MCwKKyAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICA5LCAgICAgOSwgICAxMDEsICAgIDcyLCAgIDEwNiwKKyAgIDY4MSwgICAgIDAsICAgIDY0LCAgICA2MywgICAgNzEsICAgMTA0LCAgICAgMCwgICAgIDAsICAgMTAyLCAgICA2NywKKyAgIDU2MiwgICAgIDAsICAgICAwLCAgIDUyOCwgICAgIDAsICAgNzUzLCAgICAgMCwgICA1MzMsICAgICAwLCAgIDUzMiwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA1MjAsICAgMzc0LCAgICAgMCwgICAgNTYsICAgNTI0LCAgIDUyMCwKKyAgIDU0NSwgICAgIDAsICAgMzI0LCAgIDMyNSwgICAgIDAsICAgIDU1LCAgIDM3NCwgICAzMjksICAgMzI4LCAgIDMzMCwKKyAgIDMyMywgICAzNDMsICAgMzYwLCAgIDM1OSwgICA0NDEsICAgNDQzLCAgIDQ0NiwgICA0NTIsICAgICAwLCAgICAgMCwKKyAgIDM0MSwgICAgIDAsICAgMzczLCAgIDM3NSwgICA1MjAsICAgIDczLCAgIDUyMCwgICAgNzksICAgNTIxLCAgIDU1MSwKKyAgIDU3MiwgICA1ODQsICAgMTQyLCAgICAgMCwgICAgIDAsICAgNzg3LCAgIDc5MiwgICAzNDAsICAgNTIwLCAgIDUyMCwKKyAgICAgMCwgICA1MjAsICAgNzk3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAgIDE5MCwKKyAgIDIwMywgICAyMDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNDAsICAgMTg3LCAgIDE4NCwKKyAgIDE4MywgICAxODUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAxODIsICAgICAwLCAgIDE0MCwgICAxODYsICAgICAwLCAgICAgMCwgICAyMTQsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDI2NiwgICAyNjgsICAgMjY5LCAgIDMwMywgICAzMDIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDE5MiwgICA1MTgsICAgICAwLCAgIDIwMCwgICAzMDAsICAgMjkyLCAgICAgMCwgICA3NTAsICAgMjg0LCAgIDI4NSwKKyAgICAgMCwgICAgIDAsICAgMzEyLCAgIDYwMiwgICA1OTgsICAgNjA3LCAgICAgMCwgICA1MjQsICAgNTIwLCAgIDUyMCwKKyAgIDUyMCwgICAzMTQsICAgNjA1LCAgICAgMCwgICA1NzAsICAgMzE2LCAgICAgMCwgICAgIDAsICAgMzE1LCAgIDI4MywKKyAgICAgMCwgICAyNzksICAgMjk0LCAgIDI5NiwgICA1NjcsICAgICAwLCAgIDI4MCwgICAxNDMsICAgMTM1LCAgIDQ0MiwKKyAgIDUxNSwgICA0MzIsICAgNTEzLCAgIDQxOCwgICAgIDAsICAgMzQ3LCAgICAgMCwgICAgIDAsICAgMzQ4LCAgIDM0OSwKKyAgIDM1MCwgICAzODcsICAgMzg4LCAgIDM4OSwgICAzODYsICAgICAwLCAgIDM3OSwgICAzODIsICAgICAwLCAgICAgMywKKyAgICAgMCwgICA0MjUsICAgIDI4LCAgICAzNiwgICAgMzUsICAgIDQ2LCAgICAgMCwgICAgNDgsICAgIDQyLCAgIDc0OSwKKyAgIDc0NCwgICAgIDAsICAgMzE3LCAgIDMzOCwgICAgNDQsICAgMzE4LCAgIDc0OCwgICAgNTAsICAgMTM4LCAgIDU1NCwKKyAgIDU1MywgICAyNTUsICAgNTU3LCAgICAgMCwgICAgMTksICAgIDIxLCAgICA2OCwgICAxMDcsICAgMzAxLCAgICAgMCwKKyAgIDYzMSwgICAgNzAsICAgNjI5LCAgIDM5OCwgICAgIDAsICAgMzk0LCAgIDM5MywgICAxODAsICAgICAwLCAgIDE3OSwKKyAgIDUyNSwgICA1NjEsICAgICAwLCAgIDcyMywgICA3MjQsICAgICAwLCAgIDcxOCwgICAzMzgsICAgICAwLCAgIDcxNywKKyAgIDcxOSwgICA3NTEsICAgNzMzLCAgICAgMCwgICAgIDAsICAgNTU5LCAgIDUzMSwgICA1MzAsICAgICAwLCAgICAgMCwKKyAgIDU0NCwgICAgIDAsICAgMzY0LCAgIDM1NSwgICA1NDMsICAgICAwLCAgIDc1MywgICA1MzQsICAgMzI2LCAgIDM1NywKKyAgIDM3MCwgICAzNzQsICAgNzUwLCAgICAgMCwgICA3NTAsICAgICAwLCAgIDQ1MywgICA0NTQsICAgNDU2LCAgIDc1MCwKKyAgIDQ1OCwgICA0ODgsICAgNTcyLCAgICAgMCwgICA0ODEsICAgICAwLCAgICAgMCwgICA0OTEsICAgMTAwLCAgICA5NSwKKyAgICAgMCwgICAxNDIsICAgNDkyLCAgIDQ5NSwgICAgIDAsICAgNDczLCAgICAgMCwgICAgOTgsICAgICAwLCAgIDM3NCwKKyAgICAgMCwgICAzNzEsICAgNzUzLCAgIDcxNiwgICA3NTMsICAgNzE2LCAgIDUyMCwgICAgNzYsICAgNTIwLCAgICA4MiwKKyAgIDc5NiwgICA3OTUsICAgNzU5LCAgIDc1OSwgICA3NTksICAgICAwLCAgICAgMCwgICAgIDAsICAgNTcwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgIDMzOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNjIsICAgICAwLCAgIDI2MCwKKyAgIDI2MSwgICAgIDAsICAgMjExLCAgIDE0OCwgICAyNDMsICAgNTcxLCAgIDU3MiwgICAyNDQsICAgMjQ1LCAgICAgMCwKKyAgICAgMCwgICAzOTksICAgNDMwLCAgICAgMCwgICAyMzgsICAgMjM3LCAgIDcwOCwgICA3MDcsICAgICAwLCAgIDIzNSwKKyAgIDIzNCwgICAyMzIsICAgMjMzLCAgIDIzMSwgICAyMzAsICAgMjI5LCAgIDIyNiwgICAyMjcsICAgMjI4LCAgIDIyNCwKKyAgIDIyNSwgICAyMTksICAgMjIwLCAgIDIyMSwgICAyMjIsICAgMjIzLCAgIDIxNywgICAyMTgsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTQsICAgMjA4LCAgICAgMCwgICAgIDAsICAgMTkzLCAgIDUyMCwKKyAgIDUyMCwgICAgIDAsICAgNTIwLCAgIDUxNywgICA1OTIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4NywKKyAgICAgMCwgICAyODksICAgICAwLCAgIDYwMSwgICA2MDAsICAgNTk3LCAgIDU5NiwgICA3NDksICAgICAwLCAgICAgMCwKKyAgIDYxNiwgICAgIDAsICAgICAwLCAgIDc1MywgICAzMTMsICAgNzUzLCAgIDYwMywgICA1MjAsICAgNzE2LCAgIDUyNCwKKyAgIDYwMiwgICA1OTgsICAgICAwLCAgICAgMCwgICA1MjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICA0MzMsICAgICAwLCAgIDQzMiwgICAxNzgsICAgMTc3LCAgIDE3NiwgICAxNzUsICAgMzgxLCAgICAgMCwKKyAgICAgMCwgICAgMjUsICAgICAwLCAgICAyNiwgICAgNDcsICAgICAwLCAgICA0MCwgICAgIDAsICAgNjAyLCAgIDU5OCwKKyAgICAgMCwgICA3NDAsICAgNTIwLCAgIDc0MywgICA3NDUsICAgNzQxLCAgIDc0MiwgICA0MzksICAgICAwLCAgICAxOCwKKyAgICAyMCwgICAxMjQsICAgMTEyLCAgIDEyNSwgICAxMjYsICAgICAwLCAgIDEwNSwgICAxMDgsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgNjMwLCAgIDYyMiwgICAzOTUsICAgICAwLCAgIDEwMywgICA1MjksICAgNTI2LCAgIDcyMiwKKyAgIDczOSwgICA3MjgsICAgNzI2LCAgICAgMCwgICA1MjcsICAgNzIxLCAgIDczOCwgICA3MjcsICAgNzI1LCAgIDcyMCwKKyAgIDc1MiwgICA3MzUsICAgNzQ2LCAgIDczNiwgICA3MjksICAgNzM0LCAgIDc1NSwgICAgIDAsICAgMzYyLCAgIDU0MiwKKyAgIDU0MSwgICAzNjgsICAgMzY3LCAgIDQ2NCwgICAgIDAsICAgNDYzLCAgICAgMCwgICAgIDAsICAgNzUwLCAgIDc1MCwKKyAgIDc1MCwgICAgIDAsICAgNTIwLCAgIDcxNiwgICA0ODcsICAgNDgyLCAgIDM3NCwgICAzNzQsICAgNDc5LCAgIDQ4MCwKKyAgIDQ3NywgICA0NzgsICAgNTIwLCAgIDcxNiwgICAyNDMsICAgNTcxLCAgICAgMCwgICAzNjAsICAgIDk2LCAgIDQ4MywKKyAgIDQ5MywgICA0OTgsICAgNDk5LCAgIDM2MCwgICAzNjAsICAgICAwLCAgICAgMCwgICAzNjAsICAgIDk0LCAgIDQ4NCwKKyAgIDQ5NiwgICAzNjAsICAgNDc0LCAgIDQ3NSwgICA0NzYsICAgMzc0LCAgICAgMCwgICA0MjYsICAgMzYxLCAgICAgMCwKKyAgICA3NSwgICAgIDAsICAgIDgxLCAgICAgMCwgICA3NTMsICAgNzE2LCAgIDc1MywgICA3MTYsICAgNzYxLCAgIDc2MCwKKyAgIDc2MiwgICAyNzEsICAgMTg5LCAgIDE5MSwgICAyNzcsICAgMjc4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDI2MSwgICAyNjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIxMiwgICAgIDAsICAgMjY1LCAgIDI2NywKKyAgIDIwNiwgICAyMDUsICAgMTk2LCAgICAgMCwgICAxOTUsICAgMjEwLCAgICAgMCwgICAgIDAsICAgNTg5LCAgIDU4NywKKyAgICAgMCwgICA1OTAsICAgNTI0LCAgIDIwMSwgICAgIDAsICAgICAwLCAgIDI5MCwgICAgIDAsICAgICAwLCAgIDU5OSwKKyAgIDU5NSwgICA2MDYsICAgNTIwLCAgIDYxNSwgICA2MTMsICAgNjE0LCAgIDYwNCwgICA3NTMsICAgICAwLCAgIDYxMSwKKyAgICAgMCwgICA1NjgsICAgNTY5LCAgICAgMCwgICAyODIsICAgNTE2LCAgIDUxNCwgICA0MjAsICAgICAwLCAgIDM4MCwKKyAgIDM3OCwgICAyNDMsICAgICAwLCAgICAyMywgICAgNDMsICAgIDQ5LCAgIDYwMSwgICA1OTcsICAgNjAyLCAgIDU5OCwKKyAgICAgMCwgICA1MzYsICAgICAwLCAgIDUyMCwgICA2MDMsICAgIDUxLCAgICAgMCwgICAxMTAsICAgICAwLCAgIDExNCwKKyAgICAgMCwgICAxMTYsICAgICAwLCAgIDExOCwgICAgIDAsICAgNjgyLCAgIDYyNCwgICAgIDAsICAgMzk2LCAgIDYwMiwKKyAgIDU5OCwgICAgIDAsICAgMjU2LCAgICAgMCwgICA1NjYsICAgNzQ3LCAgICAgMCwgICAgIDAsICAgNzU2LCAgIDc1NywKKyAgICAgMCwgICAgIDAsICAgICAwLCAgIDM2NSwgICAgIDAsICAgICAwLCAgIDQ1OSwgICAgIDAsICAgICAwLCAgIDQ2NiwKKyAgIDQ2NSwgICA0NTcsICAgNzUzLCAgICAgMCwgICAzOTIsICAgMzkyLCAgIDc1MywgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDM3NCwgICAzNzQsICAgICAwLCAgIDM3NCwgICAzNzQsICAgICAwLCAgIDM3NCwgICAgIDAsICAgMzkyLCAgICAgMCwKKyAgIDQxMywgICAzNzIsICAgNTIwLCAgIDUyMCwgICAgNzgsICAgICAwLCAgICA4NCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgICAwLCAgIDQwMywgICAgIDAsICAgICAwLCAgIDQwMCwgICAyMTUsICAgMjM2LCAgICAgMCwKKyAgIDE5NywgICAxOTgsICAgMjA3LCAgIDIwOSwgICA1ODgsICAgNTg2LCAgIDU5MywgICA1OTEsICAgICAwLCAgIDIwMiwKKyAgICAgMCwgICAyODYsICAgMjg4LCAgIDc1MywgICA2MDksICAgNTIwLCAgIDYxMCwgICA0MTcsICAgICAwLCAgIDM4MywKKyAgIDM4NSwgICA2MDEsICAgNTk3LCAgIDU0MCwgICA2MDMsICAgMTExLCAgIDEwOSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgMTY4LCAgIDYyMywgICAgIDAsICAgNjI1LCAgIDYyNiwgICAzOTcsICAgICAwLCAgIDU2OSwKKyAgIDczNywgICA3MzEsICAgNzMyLCAgIDczMCwgICAgIDAsICAgNzU0LCAgIDM2MywgICAzNjksICAgICAwLCAgIDQ2MSwKKyAgIDQ2MiwgICA0NjAsICAgNDU1LCAgICA5MSwgICA1MjAsICAgNDg2LCAgIDQ5MCwgICAgOTMsICAgNTIwLCAgIDM3NCwKKyAgIDM3NCwgICA1MDcsICAgMzkyLCAgIDI0MywgICA1NzEsICAgICAwLCAgIDQ5NCwgICA1MDAsICAgNTAxLCAgIDM2MCwKKyAgIDM2MCwgICAzOTIsICAgMzkyLCAgICAgMCwgICAzOTIsICAgNDk3LCAgIDQ4NSwgICAgIDAsICAgNzUzLCAgIDc1MywKKyAgIDUyMCwgICA1MjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQwMSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDE5OSwgICA1OTQsICAgMjkxLCAgIDYxMiwgICA3NTMsICAgICAwLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDY4OSwKKyAgIDY4MywgICA2ODcsICAgMzkwLCAgICAgMCwgICA2MzIsICAgICAwLCAgIDI0MywgICA1NzEsICAgNTcyLCAgIDYzMywKKyAgIDY0NywgICA2NTAsICAgNjUzLCAgIDYyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDI0NCwgICA2NzksICAgNjg0LCAgICAgMCwgICA3MDQsICAgICAwLCAgIDY0MSwgICAgIDAsICAgICAwLCAgIDMzOCwKKyAgICAgMCwgICA2MTgsICAgNjM5LCAgIDY0NiwgICA2MTcsICAgNjQwLCAgIDY4MCwgICAgIDAsICAgNjI3LCAgIDI2MSwKKyAgIDc1OCwgICAzNjYsICAgNzUzLCAgIDc1MywgICA1MDYsICAgNTAzLCAgIDUwNSwgICAgIDAsICAgICAwLCAgIDM3NCwKKyAgIDM3NCwgICAzNzQsICAgNTAyLCAgIDUwNCwgICA0ODksICAgNDE1LCAgICAgMCwgICA0MTQsICAgNDA5LCAgICA3NCwKKyAgICA4MCwgICA3NTMsICAgNzUzLCAgIDI3MywgICAyNzQsICAgMjc1LCAgIDI3NiwgICAgIDAsICAgNDA0LCAgIDUxOSwKKyAgIDYwOCwgICAzODQsICAgNjIyLCAgIDY4OCwgICAgIDAsICAgNjI4LCAgIDYyMSwgICAxNzEsICAgNjk3LCAgIDY5OSwKKyAgIDcwMCwgICA2MjIsICAgNjIyLCAgIDYyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICA2NjUsICAgNjY3LCAgIDY2OCwKKyAgIDY2OSwgICAgIDAsICAgICAwLCAgICAgMCwgICA2OTgsICAgICAwLCAgIDMwOSwgICA3MDUsICAgICAwLCAgIDY0MiwKKyAgIDMwNywgICAzNjAsICAgICAwLCAgIDMwOCwgICAgIDAsICAgMzYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2OSwKKyAgIDYyMCwgICA2MTksICAgNjQzLCAgIDY3OCwgICA2NzcsICAgIDkwLCAgICA5MiwgICAzNzQsICAgMzc0LCAgIDUxMiwKKyAgIDM5MiwgICAzOTIsICAgICAwLCAgICAgMCwgICA0MjgsICAgIDc3LCAgICA4MywgICA0MDIsICAgICAwLCAgIDM5MSwKKyAgICAgMCwgICAgIDAsICAgNjM3LCAgIDYzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNjYxLCAgICAgMCwKKyAgIDY3MCwgICAgIDAsICAgNjc2LCAgIDY4NSwgICAgIDAsICAgMzA1LCAgIDMwNiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDMwNCwgICAxNzAsICAgNjIyLCAgIDUxMSwgICA1MDksICAgNTA4LCAgIDUxMCwgICA0MTIsICAgNDExLCAgIDQwNSwKKyAgICA2NSwgICAgNjgsICAgICAwLCAgIDY5MCwgICAxNjAsICAgICAwLCAgIDYzNCwgICA2NDgsICAgICAwLCAgIDY1MSwKKyAgIDYyNCwgICA3MDIsICAgNjU0LCAgICAgMCwgICAxNjcsICAgICAwLCAgIDMzOCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgIDY2NiwgICA2NzUsICAgICAwLCAgICAgMCwgICA2NDQsICAgICAwLCAgIDQxMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMCwgICA2MjIsICAgICAwLCAgIDYyMywgICAgIDAsICAgNzAzLCAgIDYyMiwgICA3MDEsICAgNjU4LCAgIDM2MCwKKyAgIDY2MywgICA2NjIsICAgNjg2LCAgIDcwOSwgICAgIDAsICAgNjIzLCAgIDQwOCwgICAgIDAsICAgNDA3LCAgIDY5NSwKKyAgIDY5NiwgICA2OTEsICAgMTYxLCAgIDYzNSwgICAxNzIsICAgNjIzLCAgIDE3NCwgICA2MzgsICAgMTU4LCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgNjIyLCAgIDM3NCwgICAgIDAsICAgICAwLCAgICAgMCwgICA3MTAsICAgNzExLCAgIDY3MSwKKyAgIDY0NSwgICA0MDYsICAgNjIzLCAgIDYyNCwgICA2NDksICAgICAwLCAgIDY1MiwgICAxNjQsICAgICAwLCAgIDE2MywKKyAgIDY1OSwgICAgIDAsICAgNjY0LCAgICAgMCwgICA3MDksICAgICAwLCAgICAgMCwgICA2OTIsICAgMTczLCAgIDE1OSwKKyAgIDY1NSwgICA2MjMsICAgMTY1LCAgICAgMCwgICAgIDAsICAgNjcyLCAgIDcxMiwgICAgIDAsICAgNjYwLCAgICAgMCwKKyAgIDcxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjYsICAgNzE0LCAgICAgMCwgICA2NzMsICAgNjU2LCAgICAgMCwKKyAgICAgMCwgICAgIDAsICAgNzE1LCAgIDY3NCwgICA2MjMsICAgNjU3LCAgICAgMCwgICAgIDAsICAgICAwCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZnb3RvW10gPSB7ICAxNDU3LAorICAgMzczLCAgICAgMiwgICAzNzQsICAgMTQ5LCAgIDYwNiwgICAyOTQsICAgMjE2LCAgICAgMywgICAgIDQsICAgIDM3LAorICAgNTgwLCAgIDMzNywgICA2NjgsICAgMzQ0LCAgICAzOSwgICAgNDAsICAgMzUzLCAgIDU4NywgICA1ODgsICAgNTg5LAorICAgIDQxLCAgICA0MiwgICAzODIsICAgMTU1LCAgIDE1MywgICAgNDMsICAgNjY5LCAgIDY4NCwgICA5MjYsICAgNjg2LAorICAgOTI4LCAgICA0NSwgICA2NzAsICAgNjcxLCAgIDE1NiwgICAxNTcsICAgMzgzLCAgIDYwOCwgICA4MzcsICAgODM4LAorICAgMjA0LCAgIDgzOSwgICAyMDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4LAorICAxMjA2LCAgMTQwMSwgIDEzNDcsICAxNDE5LCAgMTM1NiwgIDE0NDAsICAxMTE0LCAgMTM5NiwgIDE0MTQsICAgMzMxLAorICAgNzk0LCAgIDI5OSwgICA1MjAsICAgNzU5LCAgIDMwMCwgICAzMDEsICAgMzMyLCAgIDMwMywgICAzNDYsICAgMzYyLAorICAgIDUwLCAgIDMwNCwgICA0ODAsICAgMzA1LCAgIDMwNiwgICAzMDcsICAgMzA4LCAgIDM4NCwgICAzMDksICAxMjA3LAorICAgNDIzLCAgIDU0MCwgICA2MjcsICAxMjA4LCAgICA1MiwgICAxODgsICAgNTkyLCAgIDMxMSwgICAxODksICAgNDU4LAorICAgMTkwLCAgIDE2OCwgICAxODEsICAgIDU2LCAgIDQwNiwgICAxNjksICAxMDMyLCAgIDQyNCwgIDExMjksICAgMTgyLAorICAxMDMzLCAgICA1NywgICA5MjAsICAgNDMzLCAgICA1OCwgICAgNTksICAgNTc2LCAgIDU3NywgICA1NzgsICAxMTg0LAorICAgMzg5LCAgIDcyMiwgICA3MjMsICAxMzQxLCAgMTM0MiwgIDEzMDUsICAxMjM4LCAgMTE1OCwgICAgNjAsICAgNTY1LAorICAgMzI2LCAgMTA2MSwgIDEyMzksICAgOTQ2LCAgIDgwMywgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgMjA4LAorICAgIDY1LCAgICA2NiwgICAgNjcsICAgMjEwLCAgIDY1NywgICA2NTgsICAgNjU5LCAgIDY2MCwgICAyMTIsICAgNDI5LAorICAgNDMwLCAgIDY3NSwgICA2NzYsICAgNjc3LCAgIDkwMCwgICA5MTAsICAgOTAxLCAgMTE0NywgICA5MDIsICAgOTAzLAorICAxMTQ4LCAgMTE0OSwgICA1NjIsICAgNTYzLCAgIDUyMSwgICA3ODQsICAgMzEzLCAgIDM5MiwgICAzOTMsICAgMTYyLAorICAgMTcwLCAgICA2OSwgICAgNzAsICAgMTcxLCAgIDE3MiwgICAxNDEsICAgIDcyLCAgIDExNiwgICAzMTQsICAgMzE1LAorICAgMzE2LCAgICA3NCwgICAzMTcsICAgIDc2LCAgICA5OCwgICAgNzcsICAgMzE4LCAgIDc2NCwgICA3NjUsICAgNzc5LAorICAgNTQzLCAgMTIxMSwgIDEyMTIsICAxMzEzLCAgMTE4NSwgIDExMTUsICAxMTE2LCAgMTExNywgICA2MTIsICAxMjEzLAorICAgODQ0LCAgMTIxNCwgIDEyNjIsICAxMzcyLCAgMTMxNSwgIDEzNDksICAxMjE1LCAgMTIxNiwgIDEzMzMsICAxMzg2LAorICAxMjYzLCAgMTM3MywgIDEyNjQsICAxMzc1LCAgMTI2NSwgIDEzNzcsICAxNDM4LCAgMTQ1MiwgIDE0MDMsICAxNDMyLAorICAxMzYwLCAgMTQwNSwgIDEzMjAsICAgMzg1LCAgIDYwOSwgIDExMTEsICAxMjE3LCAgMTI3NiwgIDEzNjMsICAxMTgxLAorICAxMTgyLCAgMTI1MywgIDEzNzAsICAxNDEzLCAgMTM1OCwgIDEzNDQsICAxMjE4LCAgMTM1MywgIDEyNzksICAgNzI5LAorICAxNDA3LCAgMTQwOCwgIDE0MDksICAxNDQ3LCAgIDYyOSwgICA2MzAsICAgODY2LCAgMTAyOCwgIDExMjQsICAgNjMxLAorICAgNjMyLCAgIDYzMywgICA4NjIsICAgNjM0LCAgIDEzNCwgICA4NjQsICAgNjM2LCAgMTAzMCwgIDEwMzEsICAgNDUzLAorICAgIDc5LCAgICA4MAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0geyAgICA0NSwKKyAgIDEwOSwtMzI3NjgsLTMyNzY4LCAgOTg2OSwtMzI3NjgsICAgIDQ0LC0zMjc2OCwgICAyOTQsICAgNDE0LCAgICA3NiwKKy0zMjc2OCwtMzI3NjgsICAgMzkyLC0zMjc2OCwtMzI3NjgsICAgIDQyLCAgICA1OSwgICAgOTQsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgICA1NzMsICAgNzA3LCAgMTMzNiwgMTAwNTQsLTMyNzY4LCAgIDE1NCwgICAxNzAsLTMyNzY4LCAgMTQ4MCwKKyAgMTQ4MCwtMzI3NjgsICAzNzY4LC0zMjc2OCwgIDk4NjksICAgMTQyLC0zMjc2OCwgICAyMDMsICAgMTI2LCAgOTkzOSwKKy0zMjc2OCwtMzI3NjgsICAgMjEzLC0zMjc2OCwgICAyNjAsICAgMjM2LCAgIDI3MSwtMzI3NjgsLTMyNzY4LCAgIDQyNiwKKyAgMTc5MCwtMzI3NjgsICA1MDk4LC0zMjc2OCwgIDE1MTgsICAgNTU4LC0zMjc2OCwgICAzMDEsLTMyNzY4LC0zMjc2OCwKKyAgIDg4MSwtMzI3NjgsLTMyNzY4LCAgIDI4NSwtMzI3NjgsLTMyNzY4LCAgIDMwMiwgIDQ0NDksLTMyNzY4LC0zMjc2OCwKKyAgMTM3MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAzMjQsLTMyNzY4LC0zMjc2OCwgICAzNTgsICA2Nzg5LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgODM5MCwtMzI3NjgsICA4MzkwLCAxMDI2MCwtMzI3NjgsICAgMjk0LCAgIDQxNCwKKyAgIDE1NCwgICAxNzAsICAgMjU5LCAgIDM0NCwgICAyNzEsLTMyNzY4LCAgIDM1OCwtMzI3NjgsICAgMzU4LCAgODgzOSwKKyAgODgzOSwgICAzMjAsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgNDksICAgMjk0LCAgIDQxNCwKKyAgIDE1NCwgICAxNzAsICAgOTM5LCAgIDQwMSwgICA1NTMsLTMyNzY4LCAgIDY0NiwgICA2NDYsLTMyNzY4LCAgIDM2MCwKKy0zMjc2OCwgIDQwNTEsICAzMDEzLCAgIDg4MSwtMzI3NjgsICA4MzkwLC0zMjc2OCwgIDI2NzAsLTMyNzY4LCAgIDk0MywKKyAgIDQwMSwgIDI2NzAsLTMyNzY4LCAgMTA3NiwgIDI4MjAsICAyODIwLCAgMzc2OCwgICAzMzQsICAgMzU2LCAgIDM5OSwKKyAgIDM5NywgICA0MzUsLTMyNzY4LC0zMjc2OCwgICA1MDAsLTMyNzY4LCAgIDQxMywtMzI3NjgsICAxNjkxLCAgICA0NCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDU0NywgICAgNzIsICAgMjUwLCAgIDUyMSwtMzI3NjgsLTMyNzY4LCAgIDQ4MSwKKyAgIDE0MywtMzI3NjgsLTMyNzY4LCAgMjkxMSwgIDI5MTEsICA0MTkzLCAgMTM3MywgICA2MDgsLTMyNzY4LC0zMjc2OCwKKyAgIDUwMiwtMzI3NjgsLTMyNzY4LCAgMTI0MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTUxOCwKKyAgIDY3MiwtMzI3NjgsICAgMzAxLCAgMTM3MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDE4MjEsICAxNTE4LC0zMjc2OCwKKyAgIDMwMSwtMzI3NjgsICA0MDUxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMjcxLCAgIDkzOSwgICAyODUsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTIyNywgICAzNTgsICAgNTA1LCAgIDMwMSwgICAzOTMsLTMyNzY4LCAgIDE3NiwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMzExMiwtMzI3NjgsLTMyNzY4LCAgIDY5NSwtMzI3NjgsICAgNTEyLCAgIDUxNywKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA1NTksLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA1MDMsLTMyNzY4LC0zMjc2OCwKKyAgMTIyNywgIDQ0NDksICAxMDA3LCAgIDUzMywtMzI3NjgsLTMyNzY4LCAgOTQ1MywgIDk1NDAsICA5NjI3LCAgOTYyNywKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNTY4LCAgIDYwMCwgICA2MTUsICAgNjIxLCAgIDYzMCwKKyAgODkyNiwgIDEwNzYsICA5NjI3LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDk2MjcsLTMyNzY4LC0zMjc2OCwKKyAgOTYyNywgIDY4ODEsLTMyNzY4LCAgOTYyNywtMzI3NjgsICAgNTU3LC0zMjc2OCwgIDk2MjcsLTMyNzY4LCAgOTAxMywKKy0zMjc2OCwgIDU5NjMsLTMyNzY4LCAgMTU4NSwgIDIzMDUsICA5MTAwLC0zMjc2OCwgICA2NjIsICAxNDQwLC0zMjc2OCwKKyAgIDU2NiwgIDIyOTUsICAyMDU2LC0zMjc2OCwgICAyNDAsLTMyNzY4LCAgIDczNywgIDE5ODksLTMyNzY4LCAgIDU1NywKKy0zMjc2OCwgIDQwNTEsICAgODgxLC0zMjc2OCwtMzI3NjgsICAxMDc2LCAgIDYwNiwtMzI3NjgsLTMyNzY4LCAgIDU5OSwKKyAgIDY3NywgMTA0MTQsICAgNjExLCAgIDYzNywgICA2NDgsICAxMzAyLCAgIDQxMywtMzI3NjgsICAgNTUzLC0zMjc2OCwKKyAgIDkzOSwgICAyOTQsICAgNDE0LCAgIDcxMSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA2NDYsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICA0Mzc0LC0zMjc2OCwgICAyNTcsLTMyNzY4LCAgIDU1NywtMzI3NjgsICAgODE4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAyNjcwLC0zMjc2OCwtMzI3NjgsICAyNjcwLC0zMjc2OCwgICA2NTMsLTMyNzY4LC0zMjc2OCwKKyAgMzExMiwgICAgNTUsICAgNjY3LCAgIDY3OCwgMTAyNjAsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgICAxMDIsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgNjk3MiwgIDg5MjYsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgIDg5MjYsICAgNjg2LC0zMjc2OCwgIDUzNzksICAgMTIxLCAgMzI5MCwtMzI3NjgsICAzMjkwLC0zMjc2OCwKKyAgMzUzOCwgIDM1MzgsICA0MTkzLCAgIDcwOSwtMzI3NjgsICAgMzAxLCAgNDA1MSwtMzI3NjgsICAgNjkwLC0zMjc2OCwKKy0zMjc2OCwgIDM2MjksICAxODIxLCAgMTUxOCwgIDQwNTEsLTMyNzY4LCAgIDMwMSwtMzI3NjgsLTMyNzY4LCAgIDMwMSwKKyAgMTgyMSwtMzI3NjgsICAgMzQ4LC0zMjc2OCwtMzI3NjgsICAgMjcxLC0zMjc2OCwgIDMwNjksICAzOTY0LCAgICA0OCwKKyAgMTIyNywgICA1MDAsICAgNzQ3LCAgIDMwMSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgIDQ1MywtMzI3NjgsICAgMjg5LCAgIDcwNCwgICA3MTQsLTMyNzY4LC0zMjc2OCwgIDEyMjcsLTMyNzY4LC0zMjc2OCwKKyAgIDgyNiwtMzI3NjgsLTMyNzY4LCAgODkyNiwgICA1MzMsICA2ODgxLC0zMjc2OCwgICAzNDAsICA2ODgxLC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICA4ODM5LCAgNDg0NiwgIDQ4NDYsICA0ODQ2LCAgNDg0NiwgMTA0ODIsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgNzMyLCAgOTcxNCwgIDk3MTQsICA2ODgxLCAgIDczOCwgICAzMzQsICAgNzQwLCAgIDc5OCwKKyAgIDc1OCwtMzI3NjgsICA4ODM5LC0zMjc2OCwtMzI3NjgsICA2NjM0LCAgNjg4MSwtMzI3NjgsICA4OTI2LCAgODkyNiwKKyAgNzA2MywgIDg5MjYsICA4OTI2LCAgODkyNiwgIDg5MjYsICA4OTI2LCAgODkyNiwgIDg5MjYsICA4OTI2LCAgODkyNiwKKyAgODkyNiwgIDg5MjYsICA4OTI2LCAgODkyNiwgIDg5MjYsICA4OTI2LCAgODkyNiwgIDg5MjYsICA4OTI2LCAgODkyNiwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICA4OTI2LCAgODkyNiwgIDg5MjYsICA4ODM5LCAgMjY4OSwKKyAgIDM4MSwgICAzNjIsICA3Njk2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDgxNCwgICA4NjIsICAgMzQzLCAgIDM2MSwKKyAgMTYxMiwgICA0MDEsLTMyNzY4LCAgMTU1NywgIDE1NTcsLTMyNzY4LCAgMjkxNywgICA3NjQsICAgNzc3LCAgIDg0NCwKKy0zMjc2OCwtMzI3NjgsICAgNTYxLCAgODIwMCwgIDExNzcsLTMyNzY4LCAgIDg0NywgICAzNTgsLTMyNzY4LC0zMjc2OCwKKyAgODkyNiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNTUxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDQ3NiwKKyAgIDgzMSwgICA4MzcsLTMyNzY4LC0zMjc2OCwgIDEwNzYsLTMyNzY4LCAgNzQyNywgIDc1MTgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgIDUyLC0zMjc2OCwgICA4MDcsICAgNzg5LCAgIDQxMywKKyAgIDg0MSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgODA0LCAgIDU5OCwgICA4NDgsLTMyNzY4LC0zMjc2OCwKKyAgIDcwMiwgMTAzMTUsICAgNzAyLCAgMTkxMSwgICA4ODEsICAzNjE3LC0zMjc2OCwgICA4NTAsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgICA4MDksLTMyNzY4LCAgIDg1NSwtMzI3NjgsLTMyNzY4LCAgIDIxMywgICA4NzQsICAgODU0LCAgIDc5OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDYzNTYsIDEwNDgyLC0zMjc2OCwgICA2NzcsICAgODE3LCAxMDQxNCwKKy0zMjc2OCwtMzI3NjgsICAgODIwLC0zMjc2OCwtMzI3NjgsICAgODIzLCAgIDMzMCwgIDQ5ODUsICAgODI0LC0zMjc2OCwKKyAgICA2NiwgMTAxMDksICAgODcxLCAgIDg3NiwgICAzODMsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAzMjkwLCAgMzI5MCwKKy0zMjc2OCwgIDM2MjksICAgODg4LC0zMjc2OCwtMzI3NjgsICAgODQzLCAgIDEyMSwtMzI3NjgsICAxODIxLC0zMjc2OCwKKyAgIDg5NCwgICAzMDEsLTMyNzY4LCAgIDg2OCwtMzI3NjgsICAgNzA3LCAgIDkwNSwtMzI3NjgsLTMyNzY4LCAgIDI2MiwKKy0zMjc2OCwtMzI3NjgsICAgNTA4LCAgIDcwNywtMzI3NjgsICA4OTI2LCAxMDAwOSwtMzI3NjgsICAgNDY1LCAgIDQ2NSwKKyAgIDE4OCwgICA0MDQsICAzMzM2LCAxMDE1NCwgIDQ3NjcsLTMyNzY4LCAgIDEyOSwgICA0NjUsICAgOTAzLCAgIDMwMSwKKyAgICA2MiwtMzI3NjgsICAgMTIxLCAgMTA4OSwgICAxMjEsICAxMDg5LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAxNDg3LCAgMTQ4NywgIDE0ODcsICAgODYxLCAgIDg2MywgIDkxOTIsICAgODQ0LCAgIDg2NCwKKyAgIDg2NSwgICA4NjcsICAgODk2LCAgMzgzOSwgICA5MDQsICAgOTA2LCAgIDkwNywtMzI3NjgsICAgODc5LC0zMjc2OCwKKy0zMjc2OCwgICA4ODQsLTMyNzY4LC0zMjc2OCwgICA5MjEsICAgNTkwLCAgIDYyMiwgICAzNzksICAgMTQ3LCAgODkyNiwKKyAgIDkzNiwtMzI3NjgsICAgOTQyLCAgIDg5NywgMTA0ODIsIDEwNDgyLC0zMjc2OCwtMzI3NjgsICAgOTQ4LCAgNTIzNSwKKyAgNzcyMiwgIDIxOTMsICA1MTM2LCAgNTI4NiwgIDQ2ODMsICAyNTYyLCAgMjQwNiwgIDI0MDYsICAyNDA2LCAgMTE5OSwKKyAgMTE5OSwgICA3NTMsICAgNzUzLCAgIDY5NywgICA2OTcsICAgNjk3LC0zMjc2OCwtMzI3NjgsICAgOTE1LCAgIDg5MywKKyAgIDkxNiwgICA5MjMsICAgOTI0LCAgNDg0NiwgICAzODEsLTMyNzY4LCAgNjk3MiwgIDg5MjYsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgIDg5MjYsLTMyNzY4LC0zMjc2OCwgICA5MTksICA5NjI3LCAgIDkyMiwgICA5MjgsICAgOTkxLC0zMjc2OCwKKyAgODkyNiwtMzI3NjgsICA4OTI2LCAgMzQyOSwtMzI3NjgsICAzNDI5LC0zMjc2OCwgICAxNTcsICAgOTMyLCAgIDkzNywKKy0zMjc2OCwgICA5MzMsICA0ODQ2LCAgIDEyMSwtMzI3NjgsICAgMTIxLCAgMzg0NSwtMzI3NjgsICAxMDg5LCAgIDk0MSwKKyAgODQ3NywgIDg0NzcsICA2MDQ5LCAgIDk0MCwgIDkwMTMsICAgOTQ1LCAgMTI0MywgIDE5ODksICAgOTY0LCAgIDk0OSwKKyAgODkyNiwgIDEwNzYsICAgOTM4LCAgIDgzNywtMzI3NjgsIDEwNDgyLC0zMjc2OCwgMTA0ODIsICAxMzAyLCAgIDk1MCwKKyAgOTI3OSwtMzI3NjgsICAgOTU1LC0zMjc2OCwtMzI3NjgsICA0Mzc0LC0zMjc2OCwgIDQ4NDYsICAyMTM5LCAgMjEzOSwKKyAgMzE4MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA2NTUsICA4OTI2LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDE1NCwgICAxNzAsICA4OTI2LCAgMTAwMSwtMzI3NjgsICAgNDM4LCAgIDQ0OCwKKyAgIDQ3MSwgICAxMDIsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgIDgyLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgODI5NSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgODc2LCAgMTAwMiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDQ4NDYsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAxMDA1LC0zMjc2OCwgIDg4MzksLTMyNzY4LCAgIDkzOSwgICA0MDEsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgIDExMDksLTMyNzY4LCAgMTA4OSwgMTA0ODIsLTMyNzY4LCAgIDMwMSwgICAzMDEsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTA4OSwgIDEwMDksICAgNjYxLCAgODkyNiwgICAzNDgsLTMyNzY4LCAgMTAyMywKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDg4MywgIDEwNDYsICAgMzI0LCAgIDQwMSwgIDEyMDMsICAgNDY1LCAgMTAyNCwKKy0zMjc2OCwgIDEzNTksLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMzAxLCAgNDkxNSwtMzI3NjgsLTMyNzY4LCAgNjk3MiwKKy0zMjc2OCwgICA5NzcsLTMyNzY4LCAgIDk4MiwgICAxMjEsICAxMDg5LCAgIDEyMSwgIDEwODksLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDk5OSwgIDEwMTAsICAxMDEyLCAgMTAxNCwKKyAgIDgwOSwtMzI3NjgsIDEwMzQ2LCAgNjk3MiwgIDY0NTAsICAgOTg4LC0zMjc2OCwgIDg5MjYsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgMzI5LCAgMTAwMCwtMzI3NjgsLTMyNzY4LCAgMTAxMywgICAxNTAsICAxMDcwLCAgMTA3MCwKKyAgIDk5OCwgIDEwNzAsLTMyNzY4LC0zMjc2OCwgIDk2MjcsICAxMTIxLC0zMjc2OCwgIDEwMjksICAxMDMzLC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAxMjEsICAxMDM1LC0zMjc2OCwKKyAgMTAzNiwtMzI3NjgsLTMyNzY4LCAgMTI5MSwtMzI3NjgsIDEwNDgyLC0zMjc2OCwtMzI3NjgsICAxMDM3LC0zMjc2OCwKKy0zMjc2OCwgICAxNTgsICAxMDQwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMjM2NCwgIDIzNjQsICAyNDkyLCAgMjQ5MiwKKyAgMzE4MywtMzI3NjgsICAxMjQzLC0zMjc2OCwgIDI2MTEsICA1OTYzLCAgMTA0MywtMzI3NjgsICAgODc0LC0zMjc2OCwKKyAgODkyNiwtMzI3NjgsICA4OTI2LC0zMjc2OCwgIDg5MjYsLTMyNzY4LCAgICA2OCwgIDY1NDMsLTMyNzY4LCAgODU2OSwKKyAgODU2OSwgIDYxNzAsICAgMTQ0LCAgMTA0NCwgICAxNTUsLTMyNzY4LCAgNjk3MiwgIDY3MjgsLTMyNzY4LC0zMjc2OCwKKyAgIDE2MSwgIDY5NzIsICA2OTcyLC0zMjc2OCwgIDEwNTAsICAxMDUxLC0zMjc2OCwgICA5MzksICAzMDY5LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgMTIxLCAgMTA1MywgIDExMDMsICAxMTAzLCAgIDEyMSwgIDEwNTksICA4OTI2LCAgODkyNiwKKyAgNTcxOSwgICAzMDEsICAzNjg3LCAgIDMwMSwgICAzMDEsICAxMDMyLCAgIDMwMSwgIDM5MTksICAxMTAzLCAgNTQ5MywKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxMDYwLC0zMjc2OCwgIDEwNjksICA4OTI2LCAgODkyNiwKKyAgODkyNiwgIDg5MjYsICA2OTcyLC0zMjc2OCwgIDg5MjYsICAxMDkzLC0zMjc2OCwtMzI3NjgsIDEwNDgyLCAgODkyNiwKKy0zMjc2OCwgICAzMjksLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxMDY3LC0zMjc2OCwKKyAgMTEzNCwtMzI3NjgsLTMyNzY4LCAgIDEyMSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICA4OTI2LC0zMjc2OCwKKy0zMjc2OCwgIDIzNjQsICAyMzY0LC0zMjc2OCwgIDI2MTEsLTMyNzY4LC0zMjc2OCwgIDEwNzUsICAxMDgwLCAgMTA4MSwKKyAgMTA5OCwgIDEwNzYsLTMyNzY4LC0zMjc2OCwgIDU5MjcsICAxMTY2LC0zMjc2OCwtMzI3NjgsICAxMDk0LCAgMTQwOSwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDQ4NDYsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICA2OTcyLC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgNTcxOSwKKyAgNTcxOSwtMzI3NjgsICAxMTAzLCAgMTE0NCwgICA2OTEsICA4OTI2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDM0OCwKKyAgIDM0OCwgIDExMDMsICAxMTAzLCAgIDQ1MywgIDExMDMsLTMyNzY4LC0zMjc2OCwgIDU2NTQsICAgMTIxLCAgIDEyMSwKKy0zMjc2OCwtMzI3NjgsICAxMDk5LCAgMTEwMCwgIDExMDEsICAxMTA0LC0zMjc2OCwgMTA0MzcsICA2OTcyLCAgMTExNiwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAxMjEsICAxMTA2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgMTA5OCwtMzI3NjgsLTMyNzY4LCAgIDY3OSwtMzI3NjgsICAgMTY2LCAgMTE1NCwgICA2OTMsICAgNzI5LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDg5MjYsICAxMTU5LCAgMTE4MiwgIDExODUsICA4NjYxLCAgIDU4MiwKKyAgIDQ1MCwtMzI3NjgsLTMyNzY4LCAgODc1MiwgIDEyMjksICAxMTg5LC0zMjc2OCwgIDI0NzAsIDEwMjE1LCAgMzQwNCwKKyAgNTgxNiwtMzI3NjgsLTMyNzY4LCAgMTIzOCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDc4MDYsLTMyNzY4LCAgIDI5MiwKKy0zMjc2OCwtMzI3NjgsICAgMTIxLCAgIDEyMSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDg5MjYsICA4OTI2LCAgNTcxOSwKKyAgIDMwMSwgICAzMDEsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgNzYwOSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgICAxMjEsICAgMTIxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDY5NzIsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDEwNzYsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDc5OCwgIDExNjIsICAxMTYzLCAgNTU0MywtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgIDExOTgsICA4OTI2LCAgMTIwMCwtMzI3NjgsICAgNzk4LC0zMjc2OCwtMzI3NjgsICAxMTczLC0zMjc2OCwKKy0zMjc2OCwgICAzNDgsICAgNzYxLC0zMjc2OCwgICA3ODUsICAgMzQ4LCAgOTM2NiwgICA4MDYsICAgMTcyLC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDU3MTksICA1NzE5LC0zMjc2OCwKKyAgMTEwMywgIDExMDMsICAxMTYwLCAxMDM2OCwgIDExNzUsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAxMTkyLC0zMjc2OCwKKyAgIDQ3NCwgICA0NzQsLTMyNzY4LC0zMjc2OCwgIDEyNTksICA2MjY1LCAgODgzOSwgIDg5MjYsLTMyNzY4LCAgNzkxNSwKKy0zMjc2OCwgIDEyMzAsLTMyNzY4LC0zMjc2OCwgICA1MDAsLTMyNzY4LC0zMjc2OCwgIDk4MDEsICA5ODAxLCAgNzE1NCwKKy0zMjc2OCwtMzI3NjgsICAgNzk4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgIDI2MCwgICAyMTMsICAzMDczLC0zMjc2OCwtMzI3NjgsICA4ODM5LC0zMjc2OCwtMzI3NjgsICA4MTA3LC0zMjc2OCwKKyAgICA2OCwtMzI3NjgsLTMyNzY4LCAgMTIzMiwtMzI3NjgsICAxMTc4LCAgIDE4NiwgIDQwNTEsIDEwNDYwLCAgNzkxNSwKKy0zMjc2OCwtMzI3NjgsICAxMDk4LCAgICA1MywtMzI3NjgsICAgMTQ1LC0zMjc2OCwgIDExODAsICAxMTg0LCAgIDc5OCwKKyAgMTE4OCwgICA3OTgsICA4MDExLC0zMjc2OCwgICA1NDQsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDM0OCwKKy0zMjc2OCwtMzI3NjgsICAxMDk4LCAgMTI5MiwgIDEyNDEsLTMyNzY4LC0zMjc2OCwgICAxMDIsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgODkyNiwKKyAgMTI0NCwgIDcyNDUsICAgNzk4LCAgIDMwMSwgIDc5MTUsICAxMjE4LCAgIDE4MCwgIDEyNTgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA2OCwtMzI3NjgsICAxMjEwLC0zMjc2OCwtMzI3NjgsICAxMjYxLC0zMjc2OCwKKy0zMjc2OCwgIDEyNjksLTMyNzY4LCAgODkyNiwgIDEyOTIsICAxMjc0LCAgMTI5MiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTIzNSwgICAyMjksLTMyNzY4LC0zMjc2OCwgIDczMzYsLTMyNzY4LCAgNjk3MiwKKy0zMjc2OCwgIDEzMjgsICAxMjkzLCAgMTI0NiwtMzI3NjgsLTMyNzY4LCAgIDIwNiwtMzI3NjgsLTMyNzY4LCAgMTM0MiwKKyAgMTMwMSwgIDgwMTEsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTM2MywgIDEzNjQsLTMyNzY4Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0gey0zMjc2OCwKKyAgMTM2NSwtMzI3NjgsICAtMjc2LC0zMjc2OCwgICA5OTAsICAgIDU4LCAgICAgMCwgIDEzNjgsLTMyNzY4LCAgIDMxMSwKKy0zMjc2OCwtMzI3NjgsICAgMzE1LCAgMTA0OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDU3MiwKKy0zMjc2OCwgIDEyMjYsICAtNTk4LCAgICA1NiwgIC01OTQsICAxMjQwLCAgICA5NiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgNzIwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDM4NywKKyAgICAgNCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDUxMTQsICAgIC05LCAgICAyMiwgICAtMTAsICAgOTIwLC0zMjc2OCwKKyAgIDg1OSwtMzI3NjgsICAgIDkwLC0zMjc2OCwgLTEyMzIsLTMyNzY4LCAtMTI3NywgICAtNDQsLTMyNzY4LCAgMTcwNSwKKyAgLTI4OSwgIC0yMTIsLTMyNzY4LCAgLTcwOSwgIDM2OTEsICAgMjExLCAgMTA5MSwgIDMyMzksICAgLTQ4LCAgIDIyMiwKKyAgIDEzNiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIC0zMDAsLTMyNzY4LCAgLTE0MiwtMzI3NjgsLTMyNzY4LCAtMTEzNiwKKyAgIC0yOCwgIC0zMDUsICAyMzI5LCAgICAgMiwgICA4NzIsICAtMTIyLCAgICA0NiwgICAxNzMsICAtMTcwLCAgICAtNCwKKyAgLTEzNiwgIC03ODQsICAgMjAyLC0zMjc2OCwgICAtNjYsLTMyNzY4LC0zMjc2OCwgIC0yMDEsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgLTEwMSwgIDI5MDIsICAgLTM2LC0zMjc2OCwgICA2MDMsLTMyNzY4LC0zMjc2OCwKKyAgLTk2NywgIC0zODUsICAgNzk5LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgLTE0LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA2MTgsICAgICAzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMTIxNiwtMzI3NjgsICAgMzg2LCAgIDU0NSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgICA1MDksICAtNjE2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDc1NSwKKy0zMjc2OCwgICAzNzYsICAgODczLCAgIDY0MCwgICA5MjYsICA0MTk0LCAgICAgOCwgICAgMTAsICAtMzc5LCAgMTI2OCwKKyAgMzE2MywgIC00MTIsICAgICA2LC0zMjc2OCwgIDQ1MzAsICAtMTI3LCAgIDE3MSwgICAgIDUsICAzNzIzLCAgMTE0MCwKKy0zMjc2OCwgIDQyNzEsICAxNjUwLCAgMTc4MCwtMzI3NjgsICA0MDE0LCAgMjQ2OCwgIC0xODYsLTMyNzY4LCAgMjAzNSwKKy0zMjc2OCwtMzI3NjgsICAgMjM5LCAgLTgyNCwgIC02OTUsLTMyNzY4LC0zMjc2OCwgICAzMzcsICAtODI3LCAgLTM1MywKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgLTExOTMsLTMyNzY4LCAtMTA3OSwgLTEyNDcsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA4OSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA5OCwKKyAtMTE0OSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAtNTQsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAtMTI4MiwKKyAgICAzMiwtMzI3NjgsICAgIDM1LC0zMjc2OCwgIC01NzQsICAtNDkwLCAgIDU5NiwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgIC0zNTIsLTMyNzY4LCAgLTMzOSwgIC0xNTIsLTMyNzY4LCAgIDY0NCwgICAzNDIsLTMyNzY4LCAgIDE2MCwKKy0zMjc2OCwgIC0yOTQKK307CisKKworI2RlZmluZQlZWUxBU1QJCTEwNTY2CisKKworc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9IHsgICAgNTUsCisgICA1OTcsICAgNjE3LCAgIDM3MiwgICAgMzYsICAgMjE3LCAgICA1MSwgICA1NDUsICAgMzY0LCAgIDM2NywgICA0MTQsCisgICA4NDIsICAgIDY4LCAgIDgzMSwgICA1OTgsICAxMDE2LCAgIDY2MSwgICAgOTQsICAgNTU0LCAgICA5NiwgIDEwMTcsCisgICAgNTUsICAgMTk1LCAgIDE2NywgICA1NTcsICAgMjYzLCAgIDEwOCwgICAxMjIsICAgMTI0LCAgIDYxMywgICA2NDYsCisgICAgNTUsICAxMjU0LCAgICA2OCwgIDEzNTQsICAgIDM2LCAgICA1NSwgICAgNTEsICAgMTI4LCAgIDEzMiwgICAgMzYsCisgICAxOTIsICAgIDUxLCAgICA2OCwgICA0MzEsICAgIC0xLCAgIDk1NSwgICA3ODAsICAgIDY4LCAgIDE4MCwgICAgNTMsCisgICA4ODYsICAgNDE5LCAgIDQyMiwgICA3ODAsICAgNDU3LCAgIDQ2MCwgICA0MjgsICAgNDEzLCAgIDkxMywgICAxNjEsCisgICA1NzksICAgIDM1LCAgIDUyNSwgICAyMTQsICAgNTI1LCAgIDIyMCwgICA0MjEsICAxMjc3LCAgIDM0OSwgICAzNTAsCisgICAxMjMsICAgNTI1LCAgIDM3OSwgIDEzNzYsICAgMjYxLCAgIDMyMCwgICA4NTYsICAxMTM2LCAgMTEzNywgICAzMTIsCisgICAgNTMsICAgMzEyLCAgICA1NSwgICAyMjUsICAgNjc5LCAgICA1MywgICAyNjIsICAgNDg4LCAgIDMyMiwgICAzMjMsCisgICA0NDgsICAxMTU3LCAgICAzNSwgICAzNTQsICAgIDY4LCAgIDMxMiwgICAzMTIsICAgIDM1LCAgIDYxOSwgICAgNDQsCisgIDExMTIsICAxMzc0LCAgIDYxMCwgICAgODEsICAgMzI4LCAgIDYyNiwgICAzMzgsICAgMzE5LCAgICAtMiwgICA5MjIsCisgICA4MDksICAgOTI0LCAgIDMzOSwgIDEzNzEsICAxMzg0LCAgIDM1NywgICAzNDAsICAgNDE3LCAgIDE4MCwgICAzNDcsCisgICAxMjEsICAgMzEyLCAgIDM1MSwgICAgODcsICAgODU3LCAgMTM5NywgICA3MTIsICAgODU4LCAgIDQzOSwgIC0zMDEsCisgICAgNDQsICAxMjkyLCAgIDEyMywgICAzODAsICAgMTAwLCAgICA0NCwgIDE0MjksICAgMzYxLCAgMTI5NSwgIDEzNjUsCisgIDEwMTgsICAgNDQ4LCAgIDM2MywgICAzNjYsICAgIDU1LCAgMTM4NywgICAxOTUsICAgMzU2LCAgIDE3OSwgICAxNjEsCisgICAgNTEsICAgMTAxLCAgIDY5OSwgICAgODIsICAgMTk1LCAgMTQ0NCwgICAgNjgsICAgNjgwLCAgIDc4MiwgICA2MTEsCisgICA4MTAsICAxMzg1LCAgIDg1OSwgICA2MDQsICAgNjk2LCAgIDE5MiwgICAzODEsICAgODUwLCAgIDE0MCwgIDE0MjAsCisgICA5MTksICAgMzk3LCAgIDM5OSwgICAxOTIsICAgMTkyLCAgMTIyNywgICAgNTQsICAxMTEzLCAgMTM5NCwgIDEzNTIsCisgICAxNjEsICAgNjM1LCAgIDMyMSwgICAxNDcsICAxMjMzLCAgMTIzNCwgICAxMDIsICAxMjM1LCAgIDkxNCwgICAzOTQsCisgIC0yNTQsICAxMDE5LCAgIDE4NiwgICAxODcsICAgIDUzLCAgIDg0MCwgICA1MzMsICAgIDU0LCAgICAxMywgICAxOTIsCisgICAxMjcsICAtNTYzLCAgLTMwMSwgICAxNDIsICAxMzk3LCAgIDY0NCwgICAzODAsICAgIDU0LCAgLTEyMywgIDE0MjEsCisgICA0MjUsICAgODg5LCAgICA1NCwgICA2NTAsICAgOTc5LCAgIDg1MSwgIDEwOTksICAgNDQzLCAgIDg1MiwgIDExMjUsCisgICAyMjUsICAgIDIwLCAgIDQzNywgICAxMjcsICAgMTQ4LCAgMTI1NywgICA3NDksICAgMTI2LCAgIDc1MSwgICA3NTIsCisgICAgMjMsICAxMjU3LCAgIDUzMywgIDEyNTQsICAgMTQ1LCAgIDM5NSwgIC0yNTQsICAtMjU0LCAgIDkxNSwgICAzODEsCisgIDEzNjEsICAxNDI1LCAgIDY5OCwgIDEwODEsICAgIDQ0LCAgIDg5MCwgICAxOTIsICAtNTYzLCAgLTU2MywgICA4OTEsCisgICA1MjIsICAgMjYwLCAgLTI0OSwgICA4NTMsICAgMTM5LCAgIDU1NCwgICA4NDMsICAgMjE0LCAgMTA4NCwgICAgNTQsCisgICA1MjksICAgODAwLCAgIDE0NiwgIC01NjMsICAxNDUwLCAgIDcxMywgIDExMDAsICAgODgwLCAgIDQzOCwgIDExMjYsCisgICAxNDAsICAgMTQwLCAgIDE0MCwgICAzNjQsICAgMzY3LCAgMTI1OCwgICA0MTksICAgNDIyLCAgIDY5OCwgICA1OTcsCisgIDEzODIsICAxMzMyLCAgIDg5MiwgICAxNTQsICAgNDE5LCAgIDQ2OSwgICA1NTAsICAgMzEyLCAgMTQyNiwgICA2ODEsCisgIDE0NDIsICAgNjQ5LCAgIDg2MywgICA1NTksICAgNDIyLCAgIDE1OCwgICAzODYsICAgMTkyLCAgIDg4MSwgICA1ODQsCisgICAyNjEsICAgMTQwLCAgIDc4MCwgICA4MTMsICAgNjQzLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDIxNCwgIDEwNDQsCisgICAxNTksICAgNDIyLCAgIDI2MiwgICAzODcsICAxNDUxLCAgIDY1MSwgIC0xMzAsICAgNDg0LCAgICAzOCwgIDEwNDgsCisgICAxNTIsICAgIDU0LCAgIDU0NSwgICAyMjUsICAgMTU5LCAgMTQyMywgICAgIDcsICAgICA4LCAgIDIxOCwgICA1NjEsCisgICA3ODAsICAgIDE4LCAgIDU1MSwgIDEzMzYsICAxMzM3LCAgIDY4OSwgICAxNDIsICAxNDQzLCAgLTI1NSwgICA1NzUsCisgICA4NTAsICAgNTU4LCAgIDM4OCwgICAzNDcsICAgNTgyLCAgIDE0NCwgICAyMDksICAgIDgzLCAgIDU5NCwgICAgMzgsCisgICAxNTEsICAxMDY2LCAgIDU4NSwgIDEwNjgsICAgIDM4LCAgIDU5NSwgICA2NTIsICAgMzY1LCAgIDM2OCwgICAyMTEsCisgICA1OTYsICAgICA4LCAgICAgOSwgICA3ODAsICAgIDIxLCAgIDEwOSwgICAxMTAsICAgIDg0LCAgIDMyNSwgIDEyNjYsCisgICAgNTUsICAgOTU2LCAgMTE3MSwgICAgMTQsICAgIDE1LCAgIDc1NiwgICAxMjIsICAgMTI0LCAgIDU5OSwgICAgMjcsCisgICAgMjgsICAgNjkwLCAgICA2OCwgICAxOTUsICAtMjU1LCAgLTI1NSwgICA1MzMsICAgMTM5LCAgIDg1MSwgICA3NzAsCisgICA2MjgsICAgODUyLCAgIDc1NywgIC03NDksICAgIDg4LCAgICA4OSwgICAgOTAsICAgMTk1LCAgIDE5MiwgICAxOTIsCisgIC0yNTIsICAgMzI3LCAgIDU5NiwgICAyMTksICAgMTA5LCAgIDExMCwgICAxOTIsICAgNzcyLCAgIDYzOSwgICA2NDAsCisgICA5ODEsICAgIDMyLCAgIDMzNiwgICAxMTEsICAgMTEyLCAgICAyNiwgICAxOTIsICAgMTExLCAgIDExMiwgICA2NzIsCisgICAxMjMsICAgNzU4LCAgMTA4MCwgIDEyODMsICAgIDU1LCAgMTI4OCwgICA4NTMsICAgNzU2LCAgMTMwOSwgICA4NjcsCisgICA2NzMsICAgNzYwLCAgIDY5OCwgICAxOTIsICAgMzUyLCAgIDc3MSwgICAgNjgsICAxMzExLCAgMTMxMiwgICA0MzUsCisgIC0xMjIsICAgNzYxLCAgLTI0OSwgICA5MTMsICAgNzU3LCAgICAyNiwgICAgODUsICAgIDkxLCAgICA5MiwgICAgOTMsCisgICA4OTMsICAgMzEyLCAgIDEyNiwgICA3NzMsICAgMzEyLCAgIDc2MiwgICAxMTEsICAgMTEyLCAgIDMxMiwgICA3MDQsCisgICA3MDQsICAgNzA0LCAgIDcwNCwgICA1OTcsICAgMzY5LCAgIDUyMiwgICAgODYsICAgIDg1LCAgIDk1NywgICA2NjEsCisgICAxMjEsICAgMzEyLCAgLTUyNCwgICA3NTgsICAgNjc0LCAgIDg2OCwgICA1OTgsICAgMjYwLCAgIDMxMiwgICA0NjEsCisgICA0NjIsICAgOTY4LCAgIDMxMiwgICA5NjksICAxMDEwLCAgIDQzNiwgICA2NjcsICAgIDg2LCAgIDYxMywgICA3MjEsCisgICAgMTQsICAgIDE1LCAgIDE2MCwgICA0NzAsICAxMDEyLCAgLTM2MCwgICA4OTQsICAgNTU0LCAgIDQ3MSwgICA2ODcsCisgICA4NzQsICAgNDcyLCAgIDg3NiwgICA1NTcsICAgNDgyLCAgIDM3MCwgICAgODUsICAgODgyLCAgIDQ4NSwgICAyNjYsCisgICA3ODAsICAxMjc1LCAgIDQxOSwgICA0NzksICAgMzEyLCAgIDI2MSwgICA1MjQsICAxMDE0LCAgLTUyNCwgICAxNjAsCisgIDEzNDUsICAgOTkzLCAgICAtNywgICAxMjYsICAtMzYwLCAgIDU5MywgICAgODYsICAgMjYyLCAgLTM2MCwgICAxNTksCisgIDEwMTEsICAgNzgwLCAgIDU5NCwgICA0NDgsICAxMDYyLCAgLTEzNCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICA2MjgsCisgIDEwMTMsICAgNzc0LCAgIDc3NiwgIC01NTgsICAgNTk2LCAgIDY4OCwgIDEwMDcsICAgIDU0LCAgLTUyNCwgICAzNzgsCisgICA4NzMsICAgNTk2LCAgMTQwMiwgICAyMjUsICAgODgzLCAgICAgNywgICAzNDIsICAgMzQzLCAgMTA3NCwgIDEwNzcsCisgIDE0MTIsICAgIDg1LCAgIDgyMiwgIDEwMTUsICAgODI2LCAgIDgyNywgIDEzNDYsICAgNTkzLCAgIDU2MSwgICAxMDksCisgICAxMTAsICAgMTQyLCAgIDE0MiwgICAxNDIsICAtMzYwLCAgICA4OCwgICAxMDMsICAgMTA0LCAgIDkxOCwgICAxOTIsCisgICAzOTAsICAgIDg2LCAgIDQ4OCwgIDEwODksICAgIDg4LCAgIDEwMywgICAxMDQsICAgMTgwLCAgIDI3MSwgICA4MTUsCisgIDEzOTksICAgMjE0LCAgIDM5MSwgICAgMjEsICAtNTI0LCAgIDQwOSwgICA4NDAsICAgNDMyLCAgIDgyOCwgICA4MjcsCisgICA4ODQsICAgIDU0LCAgIDg4NywgICA4ODgsICAgIDI2LCAgIDQ0NCwgICAgMjYsICAgNzg4LCAgICAyNywgICAgMjgsCisgICA0NDUsICAgOTE2LCAgIDUzMywgICAxOTIsICAgNDQ3LCAgIDQ4MywgICAxOTMsICAgMTk0LCAgIDcyMSwgICAgMjYsCisgICA0NDYsICAgMTExLCAgIDExMiwgICAzNjUsICAgMzY4LCAgIDQ1NCwgICA2NjEsICAgNTk0LCAgIDEwNSwgICAxMDYsCisgICAxMDcsICAgMjg0LCAgMTA3NywgICAyODUsICAgMTkyLCAgIDUzNCwgIDE0MDAsICAgMTA1LCAgIDEwNiwgICA1OTYsCisgICAgMzIsICAxMTIxLCAgMTEyMywgICAgODMsICAgODk5LCAgIDUzNSwgIDExMjcsICAxMTI4LCAgICAgNywgICAzNDIsCisgICAzNDMsICAtMTIwLCAgIDY5OSwgICA3ODksICAgNzkwLCAgIDUzNiwgICA4MTYsICAgNjcyLCAgIDUzNywgICA1MzgsCisgICA0NjMsICAxMjczLCAgICA1NSwgICAgODQsICAgNjcyLCAgIDY3MiwgICA0MDcsICAgNDA4LCAgIDY3MywgICAxODAsCisgICAgNTUsICAgNTI1LCAgIDgxNywgICA0NjQsICAgIDY4LCAgICA4NSwgICA2NzMsICAgNDc5LCAgMTM5OCwgICA1OTQsCisgICA0NzksICAgNTk0LCAgICA2OCwgIC0xMjEsICAgNDcwLCAgIDQ3MSwgICAgMjEsICAxMTY3LCAgIDQ2NSwgICAxOTIsCisgIDE0MTEsICAgNTk2LCAgIDI2MCwgICA1OTYsICAgNDY2LCAgICA4NiwgICAzNjUsICAgNzA5LCAgICAgOCwgICA0NDEsCisgIDE0MTUsICAgIDI3LCAgICAyOCwgICA0NjcsICAgICA3LCAgICAgOCwgICAgIDksICAgNTY2LCAgIDQ3OSwgICA1OTMsCisgICAxMDksICAgMTEwLCAgIDY3NCwgICAtNDUsICAgIDgzLCAgIDU2NCwgICA1OTMsICAxNDI4LCAgIC00NSwgICA1NjksCisgICA2NzQsICAxMTA4LCAgMTA1MCwgIDExMDksICAgNjY3LCAgMTExMCwgIDEwMzksICAxMDQwLCAgMTA0MSwgICAtNDUsCisgICA0MTUsICAgNDE2LCAgIDY2NywgICAgMzIsICAgIDg0LCAgIDU2NywgIDE0MzksICAxMjU1LCAgMTI1NiwgICAgIDcsCisgICAgIDgsICAgICA5LCAgICAyMSwgIDEyMjIsICAgIDgzLCAgIDU3MCwgICAgODMsICAxMzY3LCAgIDUzMywgICA3MDQsCisgICAxMTEsICAgMTEyLCAgMTIyOSwgICA5NTgsICAxMjYwLCAgICAyNiwgICA1NzEsICAgIDI3LCAgICAyOCwgIDE0NTYsCisgICAgMjYsICAgNjAyLCAgIDExMSwgICAxMTIsICAgIDg0LCAgIDc5NiwgICAgODQsICAxMzg4LCAgIDg5OCwgICA5MDgsCisgICA1ODMsICAgODE5LCAgMTA4NSwgIDEwODYsICAgNDQyLCAgMTA4OCwgICAgLTYsICAgIDIxLCAgIDcwNCwgICA1MDksCisgICA1MTAsICAgODIwLCAgICA4NSwgIDEyNDksICAgNTk0LCAgMTA0NSwgIDEwNDYsICAgNjA1LCAgIDYyOCwgICAgMzIsCisgIDEyNjEsICAgNTM2LCAgICAyNywgICAgMjgsICAgODIxLCAgIDUzOCwgICA1OTYsICAgNjIyLCAgIDc3NCwgICA3NzYsCisgICA1OTYsICAgNjQ1LCAgICA4NiwgICAyMjUsICAgNTkzLCAgIDU2MSwgICAgODgsICAgIDg5LCAgICA5MCwgIDExNzYsCisgICA2ODIsICAgNTk0LCAgIDU3NSwgICA3MDQsICAxMDU5LCAgIDY5MSwgICA1OTQsICAgNjQxLCAgIDU5NSwgICA0MDcsCisgIDEzMjYsICAgMTA5LCAgIDExMCwgICA1OTYsICAgIDMyLCAgIDY5MiwgICA5OTcsICAgOTk4LCAgIDU5NiwgICAxMDksCisgICAxMTAsICAxMDUyLCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsICAxMDU0LCAgMTA1NSwgICAgNTQsCisgICA3MDgsICAxMDUyLCAgMTA1NywgICA0MTUsICAxMzI3LCAgMTA1NSwgICA3MTAsICAgIDU0LCAgIDcxMSwgICA2MjgsCisgICAgIDgsICAgICA5LCAgIDkyOSwgICA5MzAsICAgOTMxLCAgIDYxMSwgICA1OTMsICAgIDI2LCAgIDU5MywgICAgOTEsCisgICAgOTIsICAgNTk2LCAgMTMwOCwgICA3MDQsICAgNDA3LCAgMTMzMSwgICA3MTMsICAgNzY4LCAgIDc2OSwgICA3ODMsCisgICAzMTIsICAgMzY0LCAgIDM2NywgICAxMTEsICAgMTEyLCAgIDc4MSwgICA4MzIsICAgICA4LCAgICAgOSwgICA1OTQsCisgIDEwMzcsICAgMTExLCAgIDExMiwgICAgODgsICAgIDg5LCAgICA5MCwgICAxOTYsICAgMTk3LCAgIDE5OCwgICA1OTQsCisgICA3ODUsICAgNTk2LCAgIDM2NCwgICAzNjcsICAgODAxLCAgIDgwMiwgICAyMjAsICAgNDQyLCAgIDgxMiwgICA4MTEsCisgICA4MTQsICAgNTk2LCAgIDExMSwgICAxMTIsICAgNjk5LCAgIDIxOSwgIC0zMTAsICAgNjcyLCAgICAxNCwgICAgMTUsCisgIDEzMTQsICAgODE4LCAgICA1NSwgICA4MjksICAgODMwLCAgIDM4MCwgICAxOTksICAtMjUyLCAgIDY3MywgICA3OTYsCisgICA4MzMsICAgNTk0LCAgMTMyNCwgICA1OTQsICAgIDY4LCAgIDg0NywgICAyMTksICAgIDI2LCAgIDg0OCwgICA4MzQsCisgICA4MzUsICAgODQ5LCAgIDg1NSwgICA1OTYsICAtNzQ4LCAgIDU5NiwgICAgOTEsICAgIDkyLCAgIDIwMCwgICA4NjUsCisgIC0zMTAsICAgIDg4LCAgICA4OSwgICAgOTAsICAtMzEwLCAgICAgNywgICAxMDksICAgMTEwLCAgMTA3NiwgIDExNDIsCisgIDExNDMsICAgODY5LCAgMTE1MiwgIDExNTMsICAgODcwLCAgMTE1NSwgICAxNDAsICAgODcyLCAgIDMzMCwgICAzMzQsCisgICA4NzUsICAgNTkzLCAgIDY3NCwgICA4NzksICAgOTE3LCAgIDU5MywgICA4MzYsICAgICA4LCAgICAgOSwgICA5MzIsCisgICA5MzcsICAgOTMzLCAgIDkzNCwgICA5MzUsICAgNjY3LCAgIDkzNiwgICA5NjQsICAtMzEwLCAgIDkzOCwgIDEzMTQsCisgICA5MzksICAgOTQwLCAgLTExOSwgICAgMjEsICAgMjAxLCAgIDIwMiwgICAyMDMsICAgOTQxLCAgIDU5MywgICAxNDAsCisgICA1OTcsICAgMTQyLCAgIDk0MiwgICA1OTMsICAgIDkxLCAgICA5MiwgICA1OTQsICAgOTQ0LCAgICAyNywgICAgMjgsCisgICA5NDUsICAgNDcwLCAgIDQ3MSwgIDEzNjksICAgOTUwLCAgIDk0NywgIDExMDIsICAxMTAzLCAgIDU5NiwgICA5NDgsCisgICAxMDksICAgMTEwLCAgIDk2MywgICAzNjUsICAgNzA5LCAgIDk2NiwgIDEzOTIsICAgNjI4LCAgMTMxNCwgICAxMTEsCisgICAxMTIsICAxMDc2LCAgIDIxOSwgICA5NDksICAgMTQyLCAgIDk1MSwgICA1OTMsICAxMTAyLCAgMTEwMywgICA1OTYsCisgICAgMzIsICAgOTUyLCAgIDk1MywgICA5NjUsICAgNjEzLCAgIDEwOSwgIDExNTQsICAgOTY3LCAgMTIyNSwgIDEyMjYsCisgICA5NzIsICAxMTMyLCAgIDEzOSwgICA0NDIsICAgOTc0LCAgIDk3MywgICA0NDMsICAgOTg4LCAgIDk4MiwgIDEzMTQsCisgICA2NzIsICAgNjk5LCAgIDk4MCwgICA5ODMsICAxNDQ1LCAgICA1NSwgICA1OTMsICAgOTg1LCAgIDk5MSwgIDEwMDksCisgICAgMjYsICAgNjczLCAgIDExMSwgICAxMTIsICAgOTk0LCAgMTAyNywgICA1OTMsICAgIDY4LCAgMTAzNCwgIC0zMTEsCisgIDEwNDksICAgIDE0LCAgICAxNSwgICAxMDksICAgMTEwLCAgMTAyNCwgICA0NDksICAgNDM5LCAgICA4OCwgICAxMDMsCisgICAxMDQsICAxMDUzLCAgMTA1OCwgIDEyMzEsICAxMjMyLCAgMTA2MywgICA0NTAsICAgMTExLCAgIDExMiwgICAgNTQsCisgIDEwNjQsICAxMDY5LCAgICAgOCwgICAgIDksICAgMTE5LCAgICAxMSwgICAgMTIsICAxMDc4LCAgIDU5MywgICA2MjQsCisgICA1OTMsICAgIDEzLCAgMTA3MCwgIC0zMTEsICAxMDcxLCAgIDY3NCwgIDEwNzIsICAtMzExLCAgMTA4MiwgIDEwODcsCisgIDEyMTAsICAgNDQyLCAgICAgOCwgICAgIDksICAxMjA1LCAgMTE4MywgICAgMTYsICAgNjY3LCAgICAxNywgICAgMTgsCisgICA3MDQsICAxMDgzLCAgICA2OCwgICAgMjYsICAgIDIwLCAgIDExMSwgICAxMTIsICAxMDkxLCAgMTMwMCwgIDEzMDEsCisgIDEzMDIsICAgMTA1LCAgIDEwNiwgICAgMjMsICAgMTQwLCAgIDE0MCwgICAxNDAsICAxMDkyLCAgIDY1NCwgICA3NjAsCisgIC0zMTEsICAxMDkzLCAgICAyNiwgIDEwOTYsICAgMTExLCAgIDExMiwgIDEwOTgsICAxMDk3LCAgMTEwMSwgICA3NjEsCisgICA0NzcsICAxMTA2LCAgMTEyMCwgICA2NTYsICAxMTY5LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgMTEzMCwgIDExMzEsCisgIDEyMDksICAxMTM1LCAgICAyNiwgICA3NjIsICAgMTExLCAgIDExMiwgICAzODcsICAxMTM5LCAgMTE2MSwgICAxNDIsCisgICAxNDIsICAgMTQyLCAgMTIwNCwgICA1OTMsICAgMzAyLCAgMTA5MCwgICAzMDIsICAxMTYyLCAgMTE3MiwgIDEyODIsCisgIDExNzMsICAxMjgyLCAgMTM2NCwgIDExNzcsICAtNTIwLCAgIDYyNSwgICA0NDgsICAtNTIwLCAgMTE3OCwgIDExNzksCisgICAxNDIsICAgMTQyLCAgIDE0MiwgIDExODAsICAgNTkzLCAgIDE5MiwgIDEzMzQsICAxMzM1LCAgMTExMiwgIDEyMTAsCisgICAzNjQsICAgMzY3LCAgMTIyMCwgIDEyNzQsICAgMTgwLCAgMTIyOCwgIDEyMTAsICAxMjQ0LCAgMTI0NSwgIDEyNDYsCisgIDEyMDUsICAgIDY4LCAgMTI0NywgIDEyMTAsICAxMjUyLCAgMTI1OSwgICAzMDIsICAxMjA1LCAgICA2OCwgICA0MTcsCisgIDEyNjgsICAgMzY1LCAgIDM2OCwgICA3ODUsICAgNTkxLCAgICA2OCwgICAtOTksICAxMjUwLCAgICAxNCwgICAgMTUsCisgICA0NzAsICAgNDcxLCAgICA1NCwgICAxODYsICAgMTg3LCAgLTUyMCwgIDEyNzgsICAtNTIwLCAgLTUyMCwgICAgMTMsCisgIC01MjAsICAxMjY5LCAgIDM2NSwgIDExMTksICAxMjcwLCAgICAgNywgICAgIDgsICAgICA5LCAgMTI4MCwgIDEyMDksCisgICA2MjEsICAtNTIwLCAgMTI5MywgIC01MjAsICAxMzE2LCAgMTMxNywgIDEyMDksICAxMzIxLCAgMTMxMCwgIDEzMjMsCisgICAtOTksICAxMjA0LCAgICAyMCwgIDEyMDksICAgLTk5LCAgMTMyNSwgICA1OTEsICAxMzM4LCAgMTIwNCwgIC01MjAsCisgIC01MjAsICAgIDIzLCAgMTM0MCwgIC01MjAsICAxMzUwLCAgMTIwNCwgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsCisgICA1MDgsICAgNTA5LCAgIDUxMCwgICAgMjEsICAxMzQzLCAgLTUyMCwgIDEzNzksICAgIDU0LCAgMTM5MCwgIDEzNjIsCisgICA4NzEsICAxMzc4LCAgMTM5MSwgICAgIDcsICAgICA4LCAgICAgOSwgIDEzOTMsICAgLTk5LCAgICAyNywgICAgMjgsCisgIDE0MTAsICAxNDA2LCAgMTQyMiwgIDE0MTcsICAgIDg4LCAgIDEwMywgICAxMDQsICAgNTcyLCAgIDU3MywgICA1NzQsCisgIDE0MjQsICAxMjEwLCAgMTM1NywgIDE0MDQsICAgNDc3LCAgMTIxMCwgIDE0MjcsICAgNDc3LCAgMTQzMCwgIDEyMDUsCisgIDE0MzEsICAgNzAxLCAgIDIxOSwgICAgNjgsICAgMjYyLCAgIDMxMiwgICA5MjEsICAgIDY4LCAgIDkyMywgIDEzODAsCisgICAgMzIsICAgIDIxLCAgMTQzMywgIDE0MzYsICAgNDc3LCAgIDYzOSwgICA2NDAsICAxNDQ2LCAgIDU5NCwgICAxMDksCisgICAxMTAsICAxMzU3LCAgIDE5MiwgIDE0NDEsICAxMjEwLCAgIDQ3NywgICAgMjcsICAgIDI4LCAgMTIwNSwgICA3MjgsCisgICA1OTYsICAxNDUzLCAgMTQ0OCwgICAyNjIsICAxNDQ5LCAgMTIxMCwgICAgNjgsICAgMTA1LCAgIDEwNiwgIDEyMDUsCisgIDE0NTQsICAxMjA5LCAgMTQ1OCwgIDE0NTksICAgICAxLCAgMTIwOSwgICA2MDcsICAgIDY4LCAgMTIxMCwgICAgIDUsCisgICA0NDIsICAgNDY4LCAgMTIwNSwgIDEyMDQsICAgMzc2LCAgIDc1MCwgICAgNTQsICAxMjA0LCAgICAzMiwgICAxMTUsCisgICAgNjgsICAgNzY3LCAgIC05NywgICAgNTQsICAgIDE0LCAgICAxNSwgICA1ODEsICAgOTk1LCAgIDM3NywgICAgMjYsCisgICAgNTQsICAgMTExLCAgIDExMiwgICA5MDksICAxMjA5LCAgMTEwNywgIDEzNjYsICAxMzU3LCAgICAxNCwgICAgMTUsCisgIDEyMTAsICAxMzQ4LCAgIDcxNCwgIC0zNjAsICAxMjA1LCAgMTIwOSwgIDEyMDQsICAxNDU1LCAgIDU5MSwgICAyNjIsCisgIDEyODUsICAgOTkwLCAgICA2OCwgICA4NDYsICAgNDgyLCAgIDU5MSwgICAtOTcsICAxMjA0LCAgMTIwOSwgIC0yNTUsCisgICAtOTcsICAgOTg5LCAgIDE0MCwgICA0MjcsICAxMTMzLCAgMTA2MCwgIDEwNDIsICAgOTc1LCAgIDkxMSwgICA5NzYsCisgIDEyMDQsICAtMzYwLCAgLTM2MCwgIDExNTYsICAtMjU1LCAgLTI1NSwgIC0zNjAsICAgODA0LCAgIDQxMCwgIC0yNTUsCisgICA1MjYsICAgOTg3LCAgICAgNywgICAzNDIsICAgMzQzLCAgIDc1NSwgICA1MjcsICAxMjEwLCAgIDUzMCwgIDEyOTEsCisgIDEyMDksICAxMjA1LCAgMTIxOSwgICAtOTcsICAxMzg5LCAgLTI1NSwgIDE0MzUsICAgMTQyLCAgMTAyNiwgICAgNjgsCisgIDEzODMsICAxNDM3LCAgMTIwNCwgICAxNDAsICAgMTQwLCAgIDE0MCwgIDEyMjEsICAtMjU1LCAgLTI1NSwgICAgIDAsCisgIC0yNTUsICAgICAwLCAgLTI1NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNjE2LCAgIDYyMCwgICAgIDAsCisgICAgMjEsICAgICAwLCAgICAgNywgICAxMDksICAgMTEwLCAgIDYyMCwgICAgIDAsICAgIDEyLCAgICA1NCwgICAyNjAsCisgICAxMDksICAgMTEwLCAgICA1NCwgICAgMjYsICAgNDM5LCAgICAyNywgICAgMjgsICAxMjA5LCAgIDE0MiwgICAxNDIsCisgICAxNDIsICAtMjU1LCAgLTI1NSwgICA1OTEsICAgICAwLCAgLTI1NSwgICAgIDAsICAgICAwLCAgMTAyNCwgIDEyMDQsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDU5MywgICAgIDAsICAtMjU1LCAgIDI2MCwgICAgIDAsCisgICAgMjEsICAgIDU0LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4NywgICAgIDAsICAgNTI4LCAgICAgMCwgICAgIDAsCisgICAgMTMsICAgICAwLCAgICA1NCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgIDQ3MCwgICA0NzEsCisgICAgMjYsICAgICAwLCAgIDExMSwgICAxMTIsICAgNjIwLCAgICA1NCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMzAsCisgICAzNjUsICAxMTE5LCAgICAgMCwgICAgMjAsICAgICAwLCAgIDU5MSwgICA0NDksICAgNTkxLCAgICAgMCwgICAgMzEsCisgICAxMDksICAgMTEwLCAgICAyMywgICAgIDAsICAgIDEyLCAgICAgMCwgICA0NTAsICAgIDMyLCAgMTA2NSwgICAgIDAsCisgIDEwNjcsICAgICAwLCAgICAzMywgICAzMDIsICAgMjYwLCAgICAgMCwgICA2MTYsICAgIDU0LCAgICAgMCwgICA3MjUsCisgICA3MjYsICAgICAwLCAgIDczMCwgICA3MzEsICAgNzMyLCAgIDczMywgICA3MzQsICAgNzM1LCAgIDczNiwgICA3MzcsCisgICA3MzgsICAgNzM5LCAgIDc0MCwgICA3NDEsICAgNzQyLCAgIDc0MywgICA3NDQsICAgNzQ1LCAgIDc0NiwgICA3NDcsCisgICA3NDgsICAgICAwLCAgICAgMCwgICA1MzMsICAgICAwLCAgICAgMCwgICA2MjAsICAgICAwLCAgIDYyMCwgICA2MjAsCisgICAgMjYsICAgICAwLCAgIDExMSwgICAxMTIsICAgICA3LCAgIDEwOSwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA5NjEsICAxMDk1LCAgICAgMCwgICAgIDAsICAgIDU0LCAgICAgMCwgICA1MzQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNTExLCAgICAgMCwgICAgIDAsICAgNjIwLCAgICAgMCwgICA1MzUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNjIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA1MzYsICAgICAwLCAgICAgMCwgICA1MzcsCisgICA1MzgsICAgNDc3LCAgICAyMSwgICAgNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgODA2LCAgIDgwOCwgICAgIDAsCisgICA1OTEsICAgICAwLCAgICA5NywgICAgIDAsICAgNTkxLCAgICAgMCwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsCisgICA1MTIsICAgNTEzLCAgIDExMywgICAxMTcsICAgIDc1LCAgIDUxNCwgICA1MTUsICAgNTE2LCAgIDUxNywgICAxMzAsCisgICAxMzAsICAgICAwLCAgIDEzMCwgICAgIDAsICAgIDc1LCAgICAgMCwgIDExMzQsICAgNTkxLCAgICAgMCwgICAgNzUsCisgIDExMzgsICAgICA2LCAgIDU5MSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMzIsCisgICAxNzQsICAgICAwLCAgICA3NSwgICAgMTMsICAgICAwLCAgIDYxNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyMDcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICAxNiwgICAgIDAsCisgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDU5MSwgICAgMjAsICAgMjI3LCAgICA5NywgICAgIDAsCisgICAgIDAsICAgIDIxLCAgICAgMCwgIDEwMzUsICAgICAwLCAgICAyMywgICAgNzUsICAxMTc0LCAgIDM3NSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICA5NywgICAgIDAsCisgICAgMjksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDU5MSwgICA4ODUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMzAsICAgICAwLCAgICAgMCwgICAzNDEsICAgMTE3LCAgIDU5MSwgICAgIDAsICAgMTE3LCAgICAgMCwgICAgIDAsCisgICAgMzEsICAgMTc0LCAgICA5NywgICAyMDcsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTMwLCAgICAzMiwgICAgIDAsCisgICAzNTksICAgMTMwLCAgICAgMCwgICAgMzMsICAgMTMwLCAgIDEzMCwgICAxMzAsICAgICAwLCAgIDYyMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgICAgMCwgICAgIDAsICAgNTkxLCAgICA3NSwgICA1OTEsCisgICAgIDAsICAgICAwLCAgMTI0MCwgIDEyNDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA5NDMsICAgICAwLCAgICAgMCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAgIDAsICAgICAwLCAgMTI1MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA0MTgsICAgMTg2LCAgIDE4NywgICAgIDAsCisgICAgMjEsICAgICAwLCAgICAgMCwgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE3NCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgNjE2LCAgIDYyMCwgICAxNjMsCisgICAgIDAsICAgIDE4LCAgICAgMCwgICAgIDAsICAgMjIzLCAgICAgMCwgICAgMjAsICAgICAwLCAgICAgMCwgICAxNjQsCisgICAgIDAsICAgNjIwLCAgICAgMCwgICA2MjAsICAgIDk3LCAgICAyMywgIDEyOTYsICAxMjk3LCAgICAgMCwgICAxNjUsCisgICAgIDAsICAgICAwLCAgIDU5MSwgICAxMzAsICAgICAwLCAgICAgMCwgICAyMjMsICAgIDMyLCAgICAgMCwgICAgIDAsCisgICA0NzcsICAgICAwLCAgIDE2NiwgICAgIDAsICAgICAwLCAgMTMwNiwgIDEzMDcsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgOTg2LCAgIDIyMywgICA1OTEsICAgICAwLCAgICAgMCwgICAyMjMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNjIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyMjMsCisgICAgIDAsICAgIDk3LCAgIDQ1MSwgICAgIDcsICAgICA4LCAgICAgOSwgICAxODUsICAgMTg2LCAgIDE4NywgIDEwMDYsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTMsICAgICAwLCAgICAgMCwgICA2MjAsICAxMTYzLCAgMTE2NCwgIDExNjUsCisgIDExNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTE3MCwgICAgIDAsCisgICAgIDAsICAgIDE4LCAgICAgMCwgICAgIDAsICAgNjIwLCAgICAgMCwgICAgMjAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDIxLCAgICAgMCwgICAyMjMsICAgIDk3LCAgICAyMywgICAgIDAsICAgNTMzLCAgIDUzMSwgICAgIDAsCisgICA0NTEsICAgNDUxLCAgIDU0NywgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMTc0LCAgIDIwNywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA4MTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyMjMsICAxMDUxLCAgIDExNywgICAgIDAsCisgICA4MjAsICAgNTUyLCAgICAgOCwgICAgIDksICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE3LCAgICAzMiwgICAgIDAsCisgICA1MzYsICAgICAwLCAgICA5NywgICA4MjEsICAgNTM4LCAgICAgMCwgICAyMjMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA2MTYsICAgICAwLCAgIDEzMCwgICAgIDAsICAgICAwLCAgIDEzMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAxMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc1LCAgICAgMCwgICAyNzEsICAgNTUzLCAgICAgMCwgICAgMjEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNjE2LCAgIDYxNiwgICAgIDAsICAgICAwLCAgMTA3OSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgMTExLCAgIDExMiwgICAxNzQsICAgICAwLCAgIDE3NCwgICAgIDAsCisgICAxNzQsICAgMTc0LCAgIDE3NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNzQsICAxMjcyLCAgICAgMCwgICAgIDgsCisgICAgIDksICAgMTc0LCAgICAxMSwgICAyMTMsICAgMTc0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA3NSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgICAwLCAgICAxNywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDIwLCAgIDYxOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyMjMsICAgICAwLCAgICAgMCwgICA2MTgsCisgICAgMjMsICAgNjIwLCAgIDUzMywgICA2MjAsICAgICAwLCAgIDYyMCwgICAgIDAsICAgICAwLCAgIDYxNiwgICAgMjYsCisgICAgIDAsICAgMTExLCAgIDExMiwgICAgOTcsICAgIDk3LCAgICA5NywgICAgOTcsICAgNjE2LCAgIDYxNiwgICAgIDAsCisgICAyMjMsICAgICAwLCAgIDYxNiwgICA2MTYsICAgICAwLCAgIDUzNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAxMzIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDUzNSwgICAgIDAsICAgICAwLCAgIDIyMywgIDExNDAsCisgIDExNDEsICAgICA3LCAgICAgOCwgICAgIDksICAgICAwLCAgIDUzNiwgICAgMTIsICAgICAwLCAgIDUzNywgICA1MzgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDYxOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA2MTYsICAgICAwLCAgMTE2OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsCisgICAgIDAsICAgNDUxLCAgICAgMCwgICAgIDAsICAgNzI4LCAgMTM1NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsCisgICAgIDAsICAgNTMxLCAgICAgMCwgICA0NTEsICAgNDUxLCAgIDUzMywgICA1NDcsICAgICAwLCAgIDQ3NywgICA2MjAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICA3OTcsICAgIDI3LCAgICAyOCwgICAgIDAsICAgNzk5LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAxMzU1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDgxOSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDgyMCwgICA2MTYsCisgICA2MTgsICAgICAwLCAgIDYxOCwgICA2MTgsICAgICAwLCAgICAgMCwgICAgMzIsICAgICAwLCAgIDUzNiwgICAgIDAsCisgICAyMjMsICAgODIxLCAgIDUzOCwgICAgIDAsICAgICAwLCAgIDExMywgIDEyMzAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAxNzQsICAgNzk3LCAgIDE3NCwgICAxNzQsICAgMjA3LCAgIDU0NywgICAgIDAsICAgICAwLCAgIDYxOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDYxOCwgICAgIDAsICAgICAwLCAgMTQxNiwgICA2MTYsCisgIDEzNTUsICAgNDk1LCAgIDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsCisgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsICAgMTc0LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNzk3LCAgMTQzNCwgICAgIDAsICAgICAwLCAgMTI2NywgICAgIDAsICAgICAwLCAgIDE3NCwgICAxNzQsCisgICAgIDAsICAgMTc0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA3MjgsICAgICAwLCAgIDEwOSwgICAxMTAsCisgICAgIDAsICAgMTg2LCAgIDE4NywgICAgIDAsICAgICAwLCAgIDg3NywgICAgIDAsICAgIDEzLCAgICAgOCwgICAgIDksCisgICAyMjMsICAgIDExLCAgICAxMiwgICAxMTcsICAgICAwLCAgICAgMCwgICAgNzUsICAgIDEzLCAgMTI5OCwgIDEyOTksCisgICAgIDAsICAgICAwLCAgIDkwNiwgICAgNzUsICAgIDc1LCAgICAgMCwgICAyMjMsICAxMzA0LCAgICAgMCwgICAgIDAsCisgICAgMjAsICAgICAwLCAgICAxNiwgICAgOTcsICAgIDE3LCAgICA5NywgICAgIDAsICAgICAwLCAgIDYxNiwgICAgMjMsCisgICAgMjAsICAgNTMzLCAgIDQ1MSwgICA0NTEsICAgNDUxLCAgIDU0MiwgICA1NDYsICAgNTQ5LCAgICAyNiwgICAgMjMsCisgICAxMTEsICAgMTEyLCAgICAgMCwgICA0NTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsCisgICAxMTEsICAgMTEyLCAgIDUxOCwgICAgIDAsICAgNTM0LCAgICAgMCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsCisgICAgIDAsICAgMjEzLCAgICAgMCwgICAgIDAsICAgNTM1LCAgICAgMCwgICAgIDAsICAgNjIwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTM2LCAgICAgMCwgICAgIDAsICAgNTQ0LCAgIDUzOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTE5LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDYxOCwgICAgOTcsICAgIDIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTM1OSwgICAgIDAsCisgICA1MzMsICAgICAwLCAgIDMxMCwgICAgIDAsICAgMzEwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAgICAwLCAgICAgMCwgICA0NTEsICAgICAwLCAgIDQ1MSwgICAgIDAsICAgICAwLCAgIDMzMywgICAzMzUsCisgICAgIDAsICAgICAwLCAgICA5NywgICA4MTksICAgICAwLCAgICAgMCwgICA0NTEsICAgICAwLCAgICA5NywgICAgIDAsCisgICA3OTcsICAgNzk3LCAgIDc5NywgICA4MjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgOTg0LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDMyLCAgICAgMCwgICA1MzYsICAgMzEwLCAgICAgMCwgICA4MjEsICAgNTM4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDYxOCwgICAgIDAsICAgICAwLCAgICA5NywgICAgIDAsICAgIDk3LCAgIDE3NCwgICAxNzQsCisgIDEwMDMsICAgIDc4LCAgICAgNywgICAgIDgsICAgICA5LCAgIDYxOCwgICAgIDAsICAgNjE4LCAgICAgMCwgICAgIDAsCisgICAgOTksICAgNTAyLCAgIDUwMywgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsCisgICAxMTQsICAgMTE4LCAgICA3OCwgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksICAgMTMxLCAgIDEzMSwgICAgMTIsCisgICAxMzEsICAgICAwLCAgICA3OCwgIDEwMDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc4LCAgICAgMCwgICAgIDAsCisgICAgMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDYxOCwgICAgIDAsICAgIDk3LCAgIDEzMSwgICAgIDAsCisgICAgNzgsICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAxMDM4LCAgICAgMCwgIDEyODEsCisgICA2MTYsICAgIDk3LCAgICAyMSwgICAgOTcsICAgICAwLCAgIDIxNSwgICAgIDAsICAgICAwLCAgIDUzMywgICAxNjQsCisgICA2MTgsICAgICAwLCAgICAgMCwgICAgOTcsICAgICAwLCAgICAyNiwgICAyMTUsICAgIDI3LCAgICAyOCwgICAxNjUsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc4LCAgICAgMCwgIDEwNTYsICAgIDMyLCAgIDYxOCwgICAgIDAsCisgICAgIDAsICAgOTk5LCAgIDE2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzUsICAgICAwLCAgIDc3NSwgICA3NzcsCisgICAgIDAsICAxMDAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAyMjMsICAgIDk3LCAgIDIyMywgICAgMzIsCisgICAgIDAsICAgNTM2LCAgIDM0OCwgICAgIDAsICAxMDAxLCAgIDUzOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzEsCisgICAyMTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzEsCisgICAgIDAsICAgICAwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQ1MSwgICA0NTEsCisgICAgIDAsICAgNDUxLCAgICAgMCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgNzgsICAgICAwLCAgIDQzOSwgICAgIDAsCisgICA0ODEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDgyNCwgICAgIDAsICAgNTQyLCAgIDU0NiwgICAgIDAsCisgICA1NDksICAgMTMxLCAgIDEzMSwgICAxMzEsICAgNDk5LCAgIDUwMCwgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsCisgICA1MDUsICAgNTA2LCAgIDUwNywgICA1MDgsICAgNTA5LCAgIDUxMCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsCisgIDEwMDMsICAgIDIxLCAgICAgMCwgICAgIDAsICAgMTc0LCAgICAgMCwgICAyMjMsICAgNTMzLCAgICAgMCwgICAgIDAsCisgICAxMzEsICAgICAwLCAgIDU0NiwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgIDEwMDMsCisgIDEwMDMsICAxMDAzLCAgICAgNywgICAxMDksICAgMTEwLCAgICAgMCwgICAgIDAsICAgMjEzLCAgICAgMCwgICAgIDAsCisgICA4MTksICAgNTkwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIyMywgICAgIDAsICAgICAwLCAgICA5NywgICAgIDAsCisgICA4MjAsICAgMTMxLCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMSwgICAgMTIsICAgICAwLCAgICAzMiwgICAgIDAsCisgICA1MzYsICAgIDEzLCAgIDE3NCwgICA4MjEsICAgNTM4LCAgICAgMCwgICAgIDAsICAgMTMwLCAgICAgMCwgICAgNzUsCisgICAgMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDYxOCwgICAgMTYsICAgNjE4LCAgICAxNywgICA2MTgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgIDIwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAyMTUsCisgICAxMzEsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDU0NiwgICAgMzAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgMTExLCAgIDExMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsCisgICAgIDAsICAgMTc0LCAgIDE3NCwgICAgIDAsICAgMTc0LCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAzMywgICAyMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDIxNSwgICAgIDAsICAgIDk3LCAgICAgMCwgICA1MzIsICAgICAwLCAgIDEzMSwgICAxMzEsCisgICA1NDgsICAgNzU0LCAgIDIyMywgICAgIDAsICAgNjk3LCAgIDU1NiwgICAgIDAsICAgNzAwLCAgICAgMCwgICAxMzEsCisgICAgIDAsICAgNzAyLCAgIDcwMywgICA3MDUsICAgNzA2LCAgIDcwNywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA2MTgsICAgNDgxLCAgICAgMCwgICAzNDgsICAgICAwLCAgIDk3MCwgICAgIDAsCisgICA5NzEsICAgMzEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDcyNCwgICAgIDAsICAgMjIzLCAgICAgMCwgICAgIDAsCisgICAyMTUsICAgOTc3LCAgICAgNywgICAxMDksICAgMTEwLCAgIDc3NSwgICA3NzcsICAgIDEyLCAgICAgMCwgICAgIDAsCisgICAxMzEsICAgICAwLCAgICAgMCwgICAxMzEsICAgICAwLCAgIDIyMywgICAgIDAsICAgICAwLCAgIDEzMSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA3OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNzUzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA3NzUsICAgNzc3LCAgICAgMCwgICAgIDAsICAgMTc0LCAgIDc5NywgICAxNzQsCisgICAgMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTMxLCAgIDc3OCwgICAxMzEsICAgICAwLCAgIDEzMSwgICAxMzEsCisgICAxMzEsICAgICAwLCAgIDc3OCwgICAgMjYsICAgMTMxLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAxMzEsCisgICAgIDAsICAgICAwLCAgIDEzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzUsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIxNSwgICAgNzgsICAgICAwLCAgICAgMCwgICAxMzYsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDEzNywgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsICAgICAwLCAgICAxMiwgICAgIDAsCisgICAgIDgsICAgICA5LCAgIDExOSwgICAgMTEsICAgIDEyLCAgICAgMCwgICAgIDAsICAgNjI0LCAgICAgMCwgICAgMTMsCisgICAgIDAsICAgMjE1LCAgIDIxNSwgICAyMTUsICAgMjE1LCAgICAgMCwgIDEwMDMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDIxLCAgICAyMCwgICAgIDAsICAgMTgzLCAgICAgMCwgICAxOTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA1OTAsICAgIDIzLCAgICAgMCwgICA1MzMsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsCisgICAgMjYsICAgICAwLCAgIDExMSwgICAxMTIsICAgICAwLCAgICAgMCwgICAgIDAsICAxMDAzLCAgMTAwMywgIDEwMDMsCisgICAxNjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA1MzQsICAgMjE1LCAgICAgMCwgICAxMzEsCisgICAxNjUsICAgNjE4LCAgICA5NywgICAgIDAsICAgICAwLCAgICAgMCwgICA1MzUsICAgICAwLCAgICAzMiwgICAgIDAsCisgICAgIDAsICAgMTMxLCAgIDEzMSwgICAxNjYsICAgNTQ4LCAgICAgMCwgICA1MzYsICAgMTc0LCAgICAgMCwgICA1MzcsCisgICA1MzgsICAgNzk4LCAgICAgMCwgICA2MjUsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgIDE3NiwgICAgMTEsCisgICAxNzcsICAgICAwLCAgICAgMCwgICA1NTYsICAgMTgzLCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgOTcwLCAgIDk3MSwgICA3NzUsICAgNzc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA5NzcsCisgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTQsICAgNzc1LCAgIDc3NywgICAgIDAsICAgIDIzLCAgIDEzMSwgICA1NDgsCisgICAxMzEsICAgMTMxLCAgICAgMCwgICA1NDgsICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgIDExMSwgICAxMTIsCisgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgNjUzLCAgIDIxNSwgICAgIDgsICAgICA5LCAgIDExOSwgICAgMTEsCisgICAgMTIsICAgMTkxLCAgIDk1NCwgIDEzNjgsICAgICAwLCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICA0MjAsCisgICAxOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzMSwgICAgIDAsICAgICAwLCAgIDY1NCwgICA1NDgsCisgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAgICAwLCAgIDY1NSwgICAxMzEsICAgMTMxLCAgICAyMCwgICAxMzEsCisgICAgIDAsICAgNzI0LCAgICAgMCwgICA2NTYsICAgICA3LCAgIDEwOSwgICAxMTAsICAgIDIzLCAgIDQzNCwgICA0MzksCisgICAgIDAsICAgNzc4LCAgICAyNiwgICA4NzgsICAgMTExLCAgIDExMiwgICAgMjYsICAgICAwLCAgIDExMSwgICAxMTIsCisgICAgIDAsICAgMTE4LCAgICAgMCwgICAgIDAsICAgIDc4LCAgICAgMCwgICA5NzAsICAgOTcxLCAgICAgMCwgICA5NzcsCisgICA5MDcsICAgIDc4LCAgICA3OCwgICAgIDAsICAgNTkwLCAgICAgMCwgICA5OTYsICAgICAwLCAgICAgMCwgICA3NzgsCisgICAgIDAsICAgMjE1LCAgICAyMSwgICAyMTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAxMzEsICAgMTMxLCAgIDEzMSwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsCisgICAgIDAsICAgMTMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDMwLCAgIDc3OCwgICAgIDAsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgIDExOSwgICAgMTEsCisgICAgMTIsICAgIDMxLCAgICAgMCwgICA2MjQsICAgICAwLCAgICAxMywgIDEwMjksICAgICAwLCAgICAgMCwgICAgMzIsCisgICAgIDAsICAgICAwLCAgICAgMCwgIDEwMzYsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMCwgICAgIDAsCisgICAgIDAsICAgMjE1LCAgICAgMCwgICAgMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICA1MzMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgIDAsICAgMTMxLCAgICA0OSwgICAxMzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyMTUsICAgICAwLCAgIDk5OSwgICAgIDAsICAgMTMxLCAgICAgMCwgICAyMTUsICAgICAwLCAgIDc5OCwgICA3OTgsCisgICA3OTgsICAgICAwLCAgMTAwMCwgICAgNDksICAgICAwLCAgIDU1NiwgICAgIDAsICAgICAwLCAgICA0OSwgICAgNDksCisgICAgMzIsICAgMTM4LCAgIDUzNiwgICAgNDksICAgICAwLCAgMTAwMSwgICA1MzgsICAgICAwLCAgICA0OSwgICA2MjUsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyMTUsICAgICAwLCAgIDIxNSwgICAxMzEsICAgMTMxLCAgIDU0OCwgICAgNDksCisgICAgIDAsICAgIDQ5LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgMCwgICAgIDAsICAgMjEzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDM0LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyMjEsICAgNDIwLCAgIDE5MSwgICAgIDAsICAgICAwLCAgIDQzNCwgICAgIDAsCisgICAgIDAsICAgNzk4LCAgIDQyMCwgICAgIDAsICAgICAwLCAgICA0OSwgICAzOTgsICAgNDAwLCAgIDQwNCwgICA3NzgsCisgICAgMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIxNSwgICAgIDAsICAgICAwLCAgIDg5NSwgICA4OTYsCisgICAgIDksICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAyMTUsCisgICA3NzgsICAgMjE1LCAgICAgMCwgICAzNDUsICAgICAwLCAgIDM0NSwgICAzNDUsICAgICAwLCAgICAgMCwgICAxNjQsCisgICAgNDksICAgMjE1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksICAgICAwLCAgIDIyMSwgICAxNjUsCisgICAgNDksICAgICAwLCAgICAgMCwgICAxMzgsICAgMTM4LCAgIDEzOCwgICAgMjEsICAgIDMyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE2NiwgICAgIDAsICAgIDc4LCAgICAgMCwgICAgIDAsICAgIDQ5LCAgICAgMCwgICAgMjYsCisgICAgIDAsICAgIDI3LCAgICAyOCwgICAyMTUsICAgICAwLCAgIDIxNSwgICAgIDAsICAgODk3LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA0OSwgICAgNDksICAgMTM4LCAgIDE2NCwgICAgIDcsICAgICA4LCAgICAgOSwgICAxODUsCisgICAxODYsICAgMTg3LCAgIDIyMSwgICAgIDAsICAgICAwLCAgIDE2NSwgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzIsICAgICAwLCAgICAgMCwgICAxMzEsICAgMTMxLCAgIDE2NiwgICAxMzEsCisgICAgIDAsICAgIDQ5LCAgIDEwOSwgICAxMTAsICAgIDE4LCAgICAgMCwgICAyMTMsICAgICAwLCAgICAgMCwgICAgMjAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCisgICA1MzMsICAgICAwLCAgICAgMCwgIDEwMjksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAgICAwLCAgICA0OSwgICAgIDAsICAgMTMxLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDU0OCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDEzMSwgICAxNjQsICAgICAwLCAgIDUzMywgICAyMTUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAxNjUsICAgMTExLCAgIDExMiwgICAgIDAsICAgNzk4LCAgIDc5OCwgICA3OTgsCisgICAgIDAsICAgIDMyLCAgICAgMCwgICAxODMsICAgICAwLCAgIDE5MSwgIDEyODcsICAgICAwLCAgIDUzNCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyMTUsICAgICAwLCAgIDUzNSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDUzNiwgICAgIDAsCisgICAxMzEsICAgNTM3LCAgIDUzOCwgICAgIDAsICAgICAwLCAgIDEzMSwgICAgIDAsICAgIDc4LCAgICAgMCwgICAxOTEsCisgICA0NzgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsICAgICAwLCAgICAxMiwgICAgIDAsICAgMzQ1LCAgICAgMCwgICAgIDAsCisgICA0MjAsICAgICAwLCAgICAgMCwgICA0MzQsICAgICAwLCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICA2MzcsCisgICAgNDksICAgNjM4LCAgICAgMCwgICAzOTgsICAgNDAwLCAgIDQwNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzEsCisgICAxMzEsICAgICAwLCAgIDEzMSwgICAgIDAsICAgNjQ4LCAgIDE4MywgICAgIDAsICAgMzQ1LCAgICAyMSwgICAgIDAsCisgICAgIDAsICAgNDM0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAzNDUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDI2LCAgIDIxNSwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgNDAxLCAgICAgMCwgICAgNDksCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAsICAgNDAyLCAgICAgMCwgIC0zMzIsCisgICAgIDgsICAgICA5LCAgLTMzMiwgICAgMTEsICAgMjEzLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTMsCisgICA0MDMsICAgICA3LCAgICAgOCwgICAgIDksICAgICAwLCAgICA0OSwgICA0MzksICAgIDQ5LCAgICAgMCwgICAxMzgsCisgICAxMzgsICAgMTM4LCAgICAgMCwgICAgIDAsICAgIDE2LCAgICA0OSwgICAgMTcsICAtMzMyLCAgICAgMCwgICAgIDAsCisgICAgNDksICAgICAwLCAgICAyMCwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAsICAtMzMyLCAgIDQ4MSwgICAgIDAsCisgICAgIDAsICAgIDIzLCAgICAgMCwgICA1MzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ5LCAgICAgMCwgICAgMjEsCisgICAgMjYsICAgNTkwLCAgIDExMSwgICAxMTIsICAgICAwLCAgIDEzMSwgICA1NDgsICAgMTMxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICA1MzQsICAgICAwLCAgICAgMCwgIDExNDQsCisgIDExNDUsICAgICA5LCAgICAgMCwgICAgIDAsICAgNDc4LCAgICAgMCwgICA1MzUsICAgNDc4LCAgIDE2NCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzMyLCAgICAgMCwgICA1MzYsICAgICAwLCAgIDE2NSwgICA1MzcsCisgICA1MzgsICAgICAwLCAgIDQ3OCwgICA0NzgsICAgNDc4LCAgICAgMCwgICAgMzIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMTY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQ3OCwgICAgNzMsICAgIDIxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDczLCAgMTE0NiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA3MywgICAgNzMsICAgNzk4LCAgICA3MywgICAxNjQsICAgIDczLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjUsICAgICAwLCAgICAgMCwgICAyMjEsCisgICAgIDcsICAgMTA5LCAgIDExMCwgICAgNzMsICAgIDMyLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjYsCisgICAgIDAsICAgICAwLCAgIDQ3OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQzNCwgICA0MzQsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDc5OCwgICA3OTgsICAgNzk4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNjM3LCAgIDYzOCwgICAgIDAsICAgNjQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMSwgICAgNzMsCisgICAyMTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDM0LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgIDEzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksCisgICAgNDksICAgIDQ5LCAgICA0OSwgICAgIDAsICAgICAwLCAgIDkwNCwgICAgIDAsICAgMTM1LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDEwOSwgICAxMTAsICAgIDczLCAgIDE4NiwgICAxODcsICAgMTM2LCAgIDEwOSwgICAxMTAsCisgICAgNzMsICAgIDEzLCAgIDQzOSwgICAgIDAsICAgIDczLCAgICAzMiwgICAgIDAsICAgIDczLCAgICA3MywgICAgNzMsCisgICAxMzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNDksICAgIDczLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgIDAsICAgIDQ5LCAgICA0OSwgICAgIDAsCisgICAgNDksICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgIDUzMywgICAgNzMsICAgIDczLCAgICA3MywgICAgIDAsCisgICAgIDAsICAgNTMzLCAgICAyNiwgICAgIDAsICAgMTExLCAgIDExMiwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsCisgICAxMTEsICAgMTEyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0OSwgICAgIDAsICAgICAwLCAgIDUzNCwgICAgIDAsCisgICAgIDAsICAgIDQ5LCAgICA0OSwgICAgNDksICAgNTM0LCAgICA3MywgICAgIDAsICAgICAwLCAgIDUzNSwgICAgIDAsCisgICAgIDAsICAxMTQ0LCAgIDEwOSwgICAxMTAsICAgNTM1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDUzNiwgICAgIDAsCisgICAgIDAsICAgNTM3LCAgIDUzOCwgICAgIDAsICAgNTM2LCAgICAgMCwgICA0NzgsICAgNTM3LCAgIDUzOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDQzNCwgICA0MzQsICAgICAwLCAgIDQzNCwgICA0MzQsICAgICAwLCAgIDQzNCwgICAgMjEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNjYyLCAgICAgMCwgICAgIDcsICAgICA4LCAgIDY2MywgICAxMTksCisgICAgMTEsICAgIDEyLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgIDExNDYsICAgMzk4LCAgIDQwMCwgICA0MDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMjAsCisgIC00NjksICAgNTM5LCAgIDUzOSwgICA1MzksICAgIDIxLCAgICAgMCwgICAgMzIsICAgICAwLCAgICAyMywgICA2NjQsCisgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA0MDQsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAgICAwLCAgICAgMCwgICA2NjUsICAgICAwLCAgIDY2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICA0NzgsCisgICA0NzgsICAgNDc4LCAgICAgMCwgICAgMzAsICAgICAwLCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA1NTUsICAgNDM0LCAgIDQzNCwgICAgMzEsICAgIDczLCAgICAgMCwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMzMsICAgIDQ5LCAgICA0OSwgICAxMzgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgIC00NjksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsCisgICAgIDAsICAgIDIxLCAgMTAyMywgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDczLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsCisgICAxODMsICAgMTkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAxNjQsICAgIDczLCAgICAgMCwgICAgNzMsICAgIDczLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAxNjUsICAgNDM0LCAgIDQzNCwgICA0MzQsICAgIDczLCAgIDE3NSwgICAgIDAsICAgIDczLCAgICAzMiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjYsICAgMjIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MywgICAxNDMsCisgICAxNDMsICAgIDczLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICA2MzcsCisgICA2MzgsICAgMzk4LCAgIDQwMCwgICA0MDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgNjQ4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTc1LCAgIDE3NSwgICA0MDUsCisgICAgIDAsICAgICAwLCAgIDM5OCwgICA0MDAsICAgNDA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgICAgMCwgICA0MzQsCisgICA0MzQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNzUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTE1MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDIyMSwgICAgIDAsICAgNTM5LCAgIDUzOSwgICAgIDAsICAgNTM5LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsICAgNzk1LCAgICA0OSwgICAgNDksICAgMTM4LCAgIDEzOCwgICAxMzgsCisgICAgIDAsICAgMjIxLCAgICAgMCwgICAgNDksICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTU1LCAgICAgMCwgICAgIDAsICAgICAwLCAgMTAyMywgIDEwMjMsCisgIDEwMjMsICAgICAwLCAgIDQwMSwgICAgIDAsICAgNjM3LCAgIDYzOCwgICAgIDAsICAgNjQ4LCAgICAgMCwgICAgIDAsCisgICAyMjQsICAgICAwLCAgIDQwMiwgICAgIDAsICAgICAwLCAgICAgMCwgICA0NTIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMzIsICAgNTM5LCAgICAgMCwgICA1MzksICAgNTM5LCAgIDQwMywgICA1MzksICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksICAgICAwLCAgICA0OSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQzNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsICAgIDczLCAgICA3MywgICAgNzMsICAgICAwLCAgIDUzOSwgICAgIDAsCisgICAgIDAsICAgMTczLCAgICAgMCwgICAgIDAsICAgNTQxLCAgIDU0MSwgICA1NDEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA4NDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE3NSwgICAzNzEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNDksICAgIDQ5LCAgICAgMCwgICAgNDksICAgICAwLCAgIDIyMiwgICAgIDAsICAgICAwLCAgIDIyNiwgICAgIDAsCisgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDczLCAgIDM5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDczLCAgICA3MywgICAgIDAsICAgIDczLCAgICAgMCwgICAgIDAsICAgMjIyLCAgIDQxMiwgICAzMjksCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAxMTksCisgICAgMTEsICAgIDEyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTMsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAgIDAsICAgICAwLCAgIDE3MywgICAgIDAsICAgNTM5LCAgICA3MywgICAgNzMsICAgIDczLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjAsCisgICAxNzUsICAgICAwLCAgIDE3NSwgICAgIDAsICAgNDA1LCAgIDQwNSwgICA0MDUsICAgICAwLCAgIDU4NiwgICAgIDAsCisgICAxNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE3NSwgICAgIDAsICAgIDI2LCAgIDE3NSwgICAxMTEsCisgICAxMTIsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTczLCAgIDE3MywgICAxNzMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDExLCAgICAgMCwgICAgNDksICAgIDQ5LCAgICA0OSwgICA0MDQsCisgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMSwgICAyMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDEzLCAgICAgMCwgICAxNzMsICAgNTM5LCAgICAgMCwgICA1MzksICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgNTM5LCAgICAxNywgICAgIDAsCisgICAgIDAsICAgNzk1LCAgIDc5NSwgICA3OTUsICAgIDIwLCAgIDIyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAzOTgsICAgNDAwLCAgIDQwNCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjIyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgMTExLCAgIDExMiwgICAgIDAsICAgICAwLCAgICAgMCwgICA1MzksCisgICA1MzksICAgNTM5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA1NTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzEsICAgICAwLCAgIDc2MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDczLCAgICA3MywgICAgNzMsICAgNzk1LCAgICAgMCwgICAgIDAsICAgNTQxLCAgIDU0MSwgICAgIDAsCisgICA1NDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTI1LCAgICAgMCwgICAgIDAsICAgNTQxLCAgICAgMCwgICAxMjksCisgICAxMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDcxLCAgICAgMCwgIDEwMjMsICAxMDIzLCAgMTAyMywgICAgNzEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIDEwMjUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE4NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjIyLCAgIDIyNiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksICAgICAwLCAgIDY0MiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA2NDcsICAgODIzLCAgICAgMCwgICA4MjMsICAgODIzLCAgICAgMCwgICA1NDEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAzMjQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDY4MywgICAgIDAsCisgICA2ODUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzMsCisgICAgIDAsICAgODIzLCAgIDY5MywgICA2OTQsICAgICAwLCAgIDY5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE3NSwgICAxNzUsICAgICAwLCAgIDE3NSwgICAgIDAsICAgMzU4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMzYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTczLCAgICAgMCwgICAxNzMsCisgICAgIDAsICAgMTczLCAgIDE3MywgICAxNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTczLCAgICA3MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE3MywgICAgIDAsICAgICAwLCAgIDE3MywgICAxNzUsICAgNTM5LCAgIDUzOSwgICA1MzksCisgICA1MzksICAgNTM5LCAgICAgMCwgICAxMjksICAgMTMzLCAgIDUzOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA0NTIsICAgNDUyLCAgIDQ1MiwgICAgIDAsCisgICA3OTUsICAgNzk1LCAgIDc5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTQxLCAgICAgMCwgICAgNzMsCisgICAgNzMsICAgIDczLCAgICA3MywgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDczLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgODQxLCAgICAgMCwgICA3ODYsICAgNzg3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDc4NiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgMTAyNSwgIDEwMjUsICAxMDI1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA0NDAsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsCisgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsICAgNjYyLCAgICAgMCwgICAgIDcsCisgICAgIDgsICAgNjYzLCAgIDExOSwgICAgMTEsICAgIDEyLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTMsCisgICAgNzMsICAgICAwLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNTQxLCAgICAgMCwgICA1NDEsCisgICAgIDAsICAgICAwLCAgIDUzOSwgICA1MzksICAgIDE2LCAgIDUzOSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgIDAsCisgICA1NDEsICAgICAwLCAgICAyMCwgIC00NzAsICAgNTQxLCAgIDU0MSwgICA1NDEsICAgIDIxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDIzLCAgIDY2NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjIyLCAgIDIyNiwgICAgIDAsCisgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDczLCAgICA3MywgICA2NjUsICAgIDczLCAgIDY2NiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDgyMywgICA4MjMsICAxMDA0LCAgICAgMCwgICAgMzAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgICAwLCAgICAgMCwgICAgIDgsCisgICAgIDksICAgICAwLCAgICAxMSwgICAgMTIsICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMywgICAgMzMsCisgICAgIDAsICAgMTczLCAgICAgMCwgICAxNzMsICAgMTczLCAgICAgMCwgICAgIDAsICAxMDA0LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgICAwLCAgICAxNywgIC00NzAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA5MjUsICAgIDIwLCAgIDkyNywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMjMsICAgICAwLCAgIDYwMCwgICAgIDAsICAgICAwLCAgIDYwMSwgICAgIDAsICAgICAwLCAgIDE3MywgICAgMjYsCisgICA2MDMsICAgMTExLCAgIDExMiwgICAgIDAsICAgMTI1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNzMsCisgICAxNzMsICAgICAwLCAgIDE3MywgICAgIDAsICAgICAwLCAgIDY2MiwgICAgIDAsICAgICA3LCAgICAgOCwgICA2NjMsCisgICAxMTksICAgIDExLCAgICAxMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAzNTgsICAgIDEzLCAgIDM2MCwgICAgIDAsCisgICAgNzMsICAgIDczLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNDQwLCAgICAxNiwgICAxNzMsICAgIDE3LCAgICAxOCwgICAgMTksICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMjAsICAtNDcyLCAgICAgMCwgICA5NTksICAgOTYwLCAgICAyMSwgICA5NjIsICAgICAwLCAgIDY3OCwgICAgMjMsCisgICA2NjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgIDc2MywgICA3NjMsICAgNjY1LCAgIDc2MywgICA2NjYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgOTc4LCAgICAgMCwgICAgIDAsICAgIDMwLCAgICAgMCwgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksCisgICAxODUsICAgMTg2LCAgIDE4NywgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMzLCAgICAgMCwgIDEwMjUsCisgICA4MjMsICAgODIzLCAgMTAwNCwgIDEwMDQsICAxMDA0LCAgICAxOCwgIDEwMDUsICAgICAwLCAgIDgyMywgICAgIDAsCisgICAgMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAtNDcyLCAgICAyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgNTMzLCAgICAgMCwgIDEwMDQsICAxMDA0LCAgMTAwNCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgIDEwMjUsICAxMDI1LCAgMTAyNSwgICAgIDAsICAgODE5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgODIwLCAgICAgMCwgICAxNzUsICAgMjIyLCAgIDIyNiwgICAyMjIsCisgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgNTM2LCAgICAgMCwgIDEwNDMsICAgODU0LCAgIDUzOCwgICAgIDAsCisgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIDEwNDcsICAgICAwLCAgICAgMCwgICAxNzMsCisgICAxNzMsICAxMDAyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAxNzYsICAgIDExLCAgIDE3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDgyMywgICA4MjMsICAgICAwLCAgIDgyMywgICAgIDAsCisgICAgIDAsICAgODI1LCAgICAgMCwgICAgIDAsICAxMDAyLCAgICAxNiwgICAgOTUsICAgIDE3LCAgICAxOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjAsICAgICAwLCAgICAgMCwgICAgOTUsICAgIDk1LCAgICAyMSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyMywgICAgOTUsICAgIDk1LCAgICAgMCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgMTc4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgODYxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIDEwOTQsICAgIDMwLCAgIDYwMCwgICA2MDEsCisgICAgIDAsICAgNjAzLCAgICAgMCwgICAgIDAsICAgMjA2LCAgICAgMCwgICA0MTEsICAgIDMxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA2NzgsICAxMTA1LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDkwNSwgICA5MTIsICAgNjc4LCAgIDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsCisgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsCisgICAgIDAsICAgMTc1LCAgICAgMCwgICAxNzUsICAgICAwLCAgICAgMCwgICAgOTUsICAgIDk1LCAgICA5NSwgICAgIDAsCisgICAgOTUsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMzU1LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDk1LCAgICAgMCwgICAgOTUsICAgIDk1LCAgICA5NSwgICAgIDAsICAgICAwLCAgICA5NSwgICAgOTUsCisgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjIyLCAgICAgMCwgIDExNTksICAxMTYwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTczLCAgIDE3MywgICAxNzMsCisgICAxNzMsICAxMDAyLCAgICAgMCwgIDExMDQsICAgICAwLCAgIDE3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIDExNzUsCisgIDEwMDIsICAxMDAyLCAgMTAwMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICA0MDUsICAgNDkzLCAgIDQ5NCwgICA0OTUsICAgNDk2LCAgIDQ5NywgICA0OTgsICAgNDk5LCAgIDUwMCwgICA1MDEsCisgICA1MDIsICAgNTAzLCAgIDUwNCwgICA1MDUsICAgNTA2LCAgIDUwNywgICA1MDgsICAgNTA5LCAgIDUxMCwgICAgIDAsCisgICA0MjYsICAgICAwLCAgICAgMCwgICAxNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTIyMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgMTIyNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNDA1LCAgIDQwNSwgICA0MDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyOSwgICAxMzMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAxMjQyLCAgMTI0MywgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsCisgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsCisgICAgIDAsICAgMTc1LCAgIDE3MywgICAxNzMsICAgICAwLCAgIDE3MywgICAgOTUsICAgICAwLCAgICAgMCwgICA2MjMsCisgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksICAgMTE5LCAgICAxMSwgICAyNjQsICAgMjY1LCAgIDI2NiwgICA2MjQsCisgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgMTgsCisgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsCisgICAyNzQsICAgMjc1LCAgICA5NSwgICAgMjMsICAgIDk1LCAgICA5NSwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsCisgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICA1NjAsICAgICAwLCAgICAgMCwgICAyODEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICA2NzgsICAgICAwLCAgIDI4MywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA5NSwgICAgIDAsICAgIDk1LCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsCisgICAgIDAsICAgIDk1LCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjkyLCAgICA5NSwgICAgIDAsICAgICAwLCAgIDYyNSwgICAgOTUsICAgICAwLCAgIDE3MywgICAgOTUsCisgICAxNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICAgMCwgICAgIDAsICAtNzE2LCAgICAgMCwgICAyOTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA2NjIsICAgICAwLCAgICAgNywgICAgIDgsICAgNjYzLCAgIDExOSwgICAgMTEsCisgICAgMTIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAgMCwgICAzNTgsICAgMzYwLCAgICAyMCwgIC00NzEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsICAgNDQwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgIDY2NCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgIDAsICAgICAwLCAgIDY2NSwgIDEzMTgsICAgNjY2LCAgICAgMCwgICAgIDAsICAxMDAyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAzMCwgICAgIDAsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMzIsICAgICAwLCAgMTE1MSwgICAgIDAsICAgICAwLCAgICAzMywgICAgIDAsICAxMTUxLCAgICAgMCwgICA2NzgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTAwMiwgIDEwMDIsCisgIDEwMDIsICAgICAwLCAgLTQ3MSwgICAgIDAsICAxMzE5LCAgIDQ4OSwgICA0OTAsICAgNDkxLCAgIDQ5MiwgICA0OTMsCisgICA0OTQsICAgNDk1LCAgIDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsCisgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsICAgICAwLCAgIDE3MywgICAgIDAsCisgICAgIDAsICAgNjAwLCAgIDYwMSwgICAgIDAsICAgNjAzLCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5NSwgICAgIDAsICAgIDk1LCAgICA5NSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAxMjM2LCAgICAgMCwgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsCisgIC00MjcsICAtNDI3LCAgICAgMCwgICAgIDAsICAtNDI3LCAgICAgMCwgIC00MjcsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtNDI3LCAgICAgMCwgIC00MjcsCisgIC00MjcsICAgICAwLCAgICAgMCwgICAgIDAsICAtNDI3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIC00MjcsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtNDI3LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTQyNywgICAgOTUsCisgIC00MjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtNDI3LCAgIDIwNiwgIC00MjcsCisgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsICAgICAwLCAgLTQyNywgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsCisgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsCisgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsICAtNDI3LCAgMTI4NiwgIC00MjcsCisgIC00MjcsICAtNDI3LCAgICAgMCwgIC00MjcsICAtNDI3LCAgLTQyNywgIC00MjcsICAtNDI3LCAgLTQyNywgICAgMTgsCisgIC00MjcsICAtNDI3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIDEyMzcsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAtNDI3LCAgLTQyNywgIC00MjcsICAgICAwLCAgLTQyNywgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTUsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgNDg5LCAgIDQ5MCwgICA0OTEsICAgNDkyLCAgIDQ5MywgICA0OTQsICAgNDk1LCAgIDQ5NiwgICA0OTcsCisgICA0OTgsICAgNDk5LCAgIDUwMCwgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsCisgICA1MDgsICAgNTA5LCAgIDUxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTUsICAgIDk1LCAgICA5NSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIDEyODksICAgIDk1LCAgMTE4NywgIDExODgsCisgIDExODksICAgMTE5LCAgICAxMSwgICAyNjQsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgIDExOTAsCisgICAgIDAsICAxMTkxLCAgMTE5MiwgIDExOTMsICAxMTk0LCAgMTE5NSwgIDExOTYsICAxMTk3LCAgMTE5OCwgIDExOTksCisgIDEyMDAsICAgIDE0LCAgICAxNSwgICAgMTYsICAgMjY4LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAxMjAxLCAgICAyOCwgICA2MTEsICAgICAwLCAgMTIwMiwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgIDk1LCAgICAgMCwgICAgOTUsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgOTUsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MiwgICAgIDAsCisgIDEyMDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTI5MCwgICAyOTMsICAxMTg2LCAgICAgMCwgIDExODcsCisgIDExODgsICAxMTg5LCAgIDExOSwgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsCisgIDExOTAsICAgICAwLCAgMTE5MSwgIDExOTIsICAxMTkzLCAgMTE5NCwgIDExOTUsICAxMTk2LCAgMTE5NywgIDExOTgsCisgIDExOTksICAxMjAwLCAgICAxNCwgICAgMTUsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgIDAsCisgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsCisgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsCisgICAgMjYsICAgICAwLCAgMTIwMSwgICAgMjgsICAgNjExLCAgICAgMCwgIDEyMDIsICAgMjgxLCAgICAgMCwgICAgIDAsCisgICAgOTUsICAgIDk1LCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTIsCisgICAgOTUsICAxMjAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQ4OSwgICA0OTAsICAgNDkxLCAgIDQ5MiwgICA0OTMsCisgICA0OTQsICAgNDk1LCAgIDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgMjkzLCAgIDUwMiwgICA1MDMsCisgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsICAgICAwLCAgICAgMCwgICA0NzMsCisgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksICAgMTE5LCAgICAxMSwgICAyNjQsICAgMjY1LCAgIDI2NiwgICA2MjQsCisgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICA5NSwgICAgOTUsICAgICAwLCAgICA5NSwgICAgMTYsICAgMjY4LCAgICAxNywgICAgMTgsCisgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsCisgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgIDUzMywgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsCisgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgIC0yNjMsICAgICAwLCAgICAgMCwgICAyODEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDc5MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDc5MiwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgIDUzNiwgICAgIDAsCisgICAgIDAsICAgNzkzLCAgIDUzOCwgICAgIDAsICAgICAwLCAgIDYyNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTUsCisgICA0NzMsICAgIDk1LCAgICAgNywgICAgIDgsICAgICA5LCAgIDExOSwgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsCisgICA2MjQsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsCisgICAgMTgsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsCisgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICA1MzMsICAgICAwLCAgIDI3NiwgICAyNzcsCisgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAtMjYzLCAgICAgMCwgICAgIDAsCisgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgIDEwMjAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgIDEwMjEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICA1MzYsCisgICAgIDAsICAgICAwLCAgMTAyMiwgICA1MzgsICAgICAwLCAgIDcyNywgICA2MjUsICAgICA3LCAgICAgOCwgICAgIDksCisgICAxMTksICAgIDExLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsCisgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsICAgIDE3LCAgICAxOCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsCisgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgMTM1MSwgICAgIDAsICAtNzA2LCAgIDI4MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsICAgICAwLCAgICAgMCwgICA2MTQsICAgMjkyLCAgIDcxNSwgICA3MTYsCisgICA3MTcsICAgICAwLCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAgNzE4LCAgIDcxOSwgICA2MTUsICAgICAwLCAgICAgMCwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MiwgICA3MjAsCisgICA2MTQsICAgICAwLCAgIDcxNSwgICA3MTYsICAgNzE3LCAgICAgMCwgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsCisgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgIDg0NSwgICAyOTMsICAgICAwLCAgICAgMCwgIDEwNzUsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsCisgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsCisgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsCisgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgIDcxOCwgICA3MTksICAgNjE1LCAgICAgMCwgICAgIDAsCisgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI5MiwgICA2MTQsICAgICAwLCAgIDcxNSwgICA3MTYsICAgNzE3LCAgICAgMCwgICAgMTEsCisgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgIC00MzEsCisgICAyOTMsICAgICAwLCAgMTA3NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsCisgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgIDcxOCwgICA3MTksCisgICA2MTUsICAgICAwLCAgICAgMCwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsCisgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsCisgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgNjE0LCAgIDI5MiwgICA3MTUsICAgNzE2LCAgIDcxNywgICAgIDAsCisgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgMTExOCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsCisgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgICA3MTgsCisgICA3MTksICAgNjE1LCAgICAgMCwgICAgIDAsICAgMjgxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksCisgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTIsICAgNzIwLCAgIDYxNCwgICAgIDAsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsICAgIDExLCAgIDQ1NSwgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsCisgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsICAgIDE3LCAgICAgMCwgICAgMTksCisgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsCisgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksCisgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgIDYxNSwgICAgIDAsICAgICAwLCAgIDI4MSwgICAyMjgsCisgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgMjgyLCAgICAxMSwgICAgMTIsICAgMjgzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksICAgMjkwLCAgIDI5MSwgICAgMTYsICAgICAwLCAgICAxNywgICAgIDAsCisgICAyOTIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAyMjksICAgMjMwLCAgICAgMCwgIDExMjIsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgIDIzMSwgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgMTExLCAgIDExMiwgICAgIDAsICAgMjMyLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjMzLCAgIDIzNCwgICAyMzUsICAgMjM2LCAgIDIzNywgICAyMzgsICAgMjM5LCAgIDI0MCwgICAyNDEsCisgICAyNDIsICAgMjQzLCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NywgICAyNDgsICAgMjQ5LCAgIDI1MCwgICAyNTEsCisgICAyNTIsICAgMjUzLCAgICAgMCwgICAgIDAsICAgMjU0LCAgIDI1NSwgICAyNTYsICAgICAwLCAgICAgMCwgICAyNTcsCisgICAgIDAsICAgNDczLCAgIDI1OCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsICAgIDExLCAgIDI2NCwgICAyNjUsCisgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTksCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsCisgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsCisgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsCisgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgLTI2MywgICAgIDAsCisgICAgIDAsICAgMjgxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsCisgICA0NzQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsCisgICA0NzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDYxNCwgICA0NzYsICAgICA3LCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMSwgICA0NTUsCisgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsCisgICAyNjgsICAgIDE3LCAgICAgMCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsCisgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICA2MTUsCisgICAgIDAsICAgICAwLCAgIDI4MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsCisgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsCisgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICA3MjcsICAgMjkyLCAgICAgNywgICAgIDgsICAgICA5LCAgICAgMCwgICAgMTEsCisgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsCisgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsICAtNzA2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsCisgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsCisgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDczLCAgIDI5MiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsCisgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsCisgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAtMjYzLCAgICAgMCwgICAgIDAsICAgMjgxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODIsICAgICAwLCAgICAgMCwgIDEzMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg2LCAgIDI4NywgIDEzMjksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksCisgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTQxOCwgIDEzMzAsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgIDAsICAgIDExLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsICAgIDE3LCAgICAgMCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsCisgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAtMTYyLCAgIDI4MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsICAgICAwLCAgICAgMCwgICA3MjcsICAgMjkyLCAgICAgNywgICAgIDgsCisgICAgIDksICAgICAwLCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgODA1LCAgIDI5MiwgICAgIDcsCisgICAgIDgsICAgICA5LCAgICAgMCwgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtNzA2LCAgICAgMCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsCisgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsCisgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsCisgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDgwNywgICAyOTIsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsICAgIDExLCAgIDQ1NSwgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsCisgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsICAgIDE3LCAgICAgMCwgICAgMTksCisgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsCisgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksCisgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsICAgICAwLCAgICAgMCwgIDEzMDMsCisgICAyOTIsICAgICA3LCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsCisgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsCisgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsCisgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsCisgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsCisgICAgIDksICAgMjkyLCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MiwgICA0OTQsCisgICA0OTUsICAgNDk2LCAgIDQ5NywgICA0OTgsICAgNDk5LCAgIDUwMCwgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsCisgICA1MDUsICAgNTA2LCAgIDUwNywgICA1MDgsICAgNTA5LCAgIDUxMCwgICAyOTMsICAgNzY2LCAgMTE4NywgIDExODgsCisgIDExODksICAgMTE5LCAgICAxMSwgICAyNjQsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgIDExOTAsCisgICAgIDAsICAxMTkxLCAgMTE5MiwgIDExOTMsICAxMTk0LCAgMTE5NSwgIDExOTYsICAxMTk3LCAgMTE5OCwgIDExOTksCisgIDEyMDAsICAgIDE0LCAgICAxNSwgICAgMTYsICAgMjY4LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAxMjAxLCAgICAyOCwgICA2MTEsICAgICAwLCAgMTIwMiwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MiwgICAgIDAsCisgIDEyMDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgMTI5NCwgICAyOTMsICAxMTg3LCAgMTE4OCwgIDExODksCisgICAxMTksICAgIDExLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsICAgIDEzLCAgMTE5MCwgICAgIDAsCisgIDExOTEsICAxMTkyLCAgMTE5MywgIDExOTQsICAxMTk1LCAgMTE5NiwgIDExOTcsICAxMTk4LCAgMTE5OSwgIDEyMDAsCisgICAgMTQsICAgIDE1LCAgICAxNiwgICAyNjgsICAgIDE3LCAgICAxOCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsCisgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsCisgIDEyMDEsICAgIDI4LCAgIDYxMSwgICAgIDAsICAxMjAyLCAgIDI4MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkyLCAgICAgMCwgIDEyMDMsCisgICAgIDAsICAgICAwLCAgICAgMCwgIDExODcsICAxMTg4LCAgMTE4OSwgICAxMTksICAgIDExLCAgIDI2NCwgICAyNjUsCisgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAxMTkwLCAgIDI5MywgIDExOTEsICAxMTkyLCAgMTE5MywgIDExOTQsCisgIDExOTUsICAxMTk2LCAgMTE5NywgIDExOTgsICAxMTk5LCAgMTIwMCwgICAgMTQsICAgIDE1LCAgICAxNiwgICAyNjgsCisgICAgMTcsICAgIDE4LCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsCisgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsCisgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgIDEyMDEsICAgIDI4LCAgMTM5NSwgICAgIDAsCisgIDEyMDIsICAgMjgxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsCisgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsCisgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTIsICAgICAwLCAgMTIwMywgICAgIDAsICAgICAwLCAgICAgMCwgIDExODcsCisgIDExODgsICAxMTg5LCAgIDExOSwgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsCisgIDExOTAsICAgMjkzLCAgMTE5MSwgIDExOTIsICAxMTkzLCAgMTE5NCwgIDExOTUsICAxMTk2LCAgMTE5NywgIDExOTgsCisgIDExOTksICAxMjAwLCAgICAxNCwgICAgMTUsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgIDAsCisgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsCisgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsCisgICAgMjYsICAgICAwLCAgMTIwMSwgICAgMjgsICAgICAwLCAgICAgMCwgIDEyMDIsICAgMjgxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTIsCisgICAgIDAsICAxMjAzLCAgICAgNywgICAgIDgsICAgICA5LCAgIDExOSwgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsCisgICA2MjQsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsCisgICAgMTgsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsCisgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICA1MzMsICAgICAwLCAgIDI3NiwgICAyNzcsCisgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICA3OTEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICA3OTIsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICA1MzYsCisgICAgIDAsICAgICAwLCAgIDc5MywgICA1MzgsICAgICAwLCAgICAgMCwgICA2MjUsICAgICA3LCAgICAgOCwgICAgIDksCisgICAxMTksICAgIDExLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgIDYyNCwgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsCisgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsICAgIDE3LCAgICAxOCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsCisgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgNTMzLCAgICAgMCwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsICAxMDIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsICAxMDIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsICAgNTM2LCAgICAgMCwgICAgIDAsICAxMDIyLCAgIDUzOCwgICAgIDAsCisgICAgIDAsICAgNjI1LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgMCwgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsCisgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsCisgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsCisgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsCisgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg0LCAgICAgMCwgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDcsCisgICAgIDgsICAgICA5LCAgIDI5MiwgICAgMTEsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsCisgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsCisgICAgIDAsICAgIDIzLCAgICAgMCwgICA1MzMsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsCisgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICA3OTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICA3OTIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICA1MzYsICAgICAwLCAgICAgMCwgICA3OTMsCisgICA1MzgsICAgICA3LCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMSwgICAyNjQsICAgMjY1LCAgIDI2NiwgICAgIDAsCisgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsCisgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsCisgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgIDUzMywgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsCisgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgMTAyMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgMTAyMSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgIDUzNiwgICAgIDAsCisgICAgIDAsICAxMDIyLCAgIDUzOCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAsICAgIDExLCAgIDQ1NSwgICAyNjUsCisgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsCisgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsCisgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsCisgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsCisgIDEyNzEsICAgMjgxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDAsCisgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4NiwgICAyODcsCisgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTIsICAgICA3LCAgICAgOCwgICAgIDksICAgMTE5LCAgICAxMSwgICAyNjQsCisgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsCisgICAyNjgsICAgIDE3LCAgICAxOCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsCisgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsCisgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsCisgICAyODcsICAgMjg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsCisgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksICAgMjkyLCAgICAxMSwgICAyNjQsICAgMjY1LCAgIDI2NiwgICAgIDAsCisgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsCisgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsCisgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsCisgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsCisgICAgIDksICAgMjkyLCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgIDI5MiwgICAgMTEsCisgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsCisgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICA0ODYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsCisgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsCisgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgIDQ4NywgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsCisgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsCisgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsCisgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsCisgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI5MiwgICA1MjMsICAgICA3LCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMSwgICA0NTUsCisgICAyNjUsICAgMjY2LCAgICAgMCwgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsCisgICAyNjgsICAgIDE3LCAgICAgMCwgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsCisgICAyNzIsICAgMjczLCAgICAyMSwgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsCisgICAgIDAsICAgNDc0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsCisgICAyODcsICAgNDc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsCisgICAgIDAsICAgOTkyLCAgICAgOCwgICAgIDksICAgNDc2LCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsCisgICAyNjcsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsCisgICAgMTksICAgICAwLCAgIDI2OSwgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsCisgICAyNzQsICAgMjc1LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsCisgICAyNzksICAgMjgwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsCisgICAgIDksICAgMjkyLCAgICAxMSwgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksCisgICAyNzAsICAgIDIwLCAgICAgMCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsCisgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4MiwgICAgIDAsICAgICAwLCAgMTMyOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODYsICAgMjg3LCAgMTMyOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgMTMzMCwgICAgMTEsCisgICA0NTUsICAgMjY1LCAgIDI2NiwgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMTYsICAgMjY4LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsCisgICAyNzEsICAgMjcyLCAgIDI3MywgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsCisgICAgIDAsICAgICAwLCAgIDI4MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODYsICAgMjg3LCAgIDI4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsCisgICAyOTEsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgIDQ1NiwgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsCisgICAgIDAsICAgMjY3LCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsCisgICAgIDAsICAgIDE5LCAgICAgMCwgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsCisgICAgMjEsICAgMjc0LCAgIDI3NSwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsCisgICAyNzgsICAgMjc5LCAgIDI4MCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDcsCisgICAgIDgsICAgICA5LCAgIDQ1OSwgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsCisgICAyNjksICAgMjcwLCAgICAyMCwgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsCisgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsCisgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAyODIsICAgICAwLCAgICAgMCwgICAyODMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjg2LCAgIDI4NywgICAyODgsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI4OSwgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDcsICAgICA4LCAgICAgOSwgICAyOTIsCisgICAgMTEsICAgNDU1LCAgIDI2NSwgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgIDI2OCwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsCisgICAgIDAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyODIsICAgICAwLCAgICAgMCwgICA0NzQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMjg2LCAgIDI4NywgICA0NzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksCisgICAyOTAsICAgMjkxLCAgICAgMCwgICAgIDcsICAgICA4LCAgICAgOSwgICA0NzYsICAgIDExLCAgIDI2NCwgICAyNjUsCisgICAyNjYsICAgICAwLCAgIDI2NywgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwgICAyNjgsCisgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgMjAsICAgICAwLCAgIDI3MSwgICAyNzIsCisgICAyNzMsICAgIDIxLCAgIDI3NCwgICAyNzUsICAgICAwLCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAyNzYsCisgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgyLCAgICAgMCwgICAgIDYsCisgIDEzMjgsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgICAwLCAgIDI4NiwgICAyODcsCisgIDEzMjksICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyODksICAgMjkwLCAgIDI5MSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgIDEzMzAsICAgIDE0LCAgICAxNSwgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsCisgICAgMTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsCisgICAgIDAsICAgMjkzLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwgICAgMjUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAyOSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMCwgICAxNTAsCisgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgICAwLCAgICAzMSwgICAgIDAsCisgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDM0LCAgICAxNywgICAgMTgsCisgICAgMTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsCisgICAgIDAsICAgICAwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwgICAgMjUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLCAgICAyOSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMCwgICA2NjIsCisgICAgIDAsICAgICA3LCAgICAgOCwgICA2NjMsICAgMTE5LCAgICAxMSwgICAgMTIsICAgICAwLCAgICAzMSwgICAgIDAsCisgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgIDM0LCAgICAxNywgICAgMTgsCisgICAgMTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgNjY0LCAgICAgMCwgICAgIDcsICAgICA4LCAgICAgOSwgICAxMTksCisgICAgMTEsICAgIDEyLCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMTMsICAgICAwLCAgIDY2NSwgICAgIDAsCisgICA2NjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMjAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAgMCwgICAgMzIsICAgICAwLCAgICAyMywgICAgIDAsCisgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAgICA3LCAgICAgOCwgICAgIDksICAgMTE5LCAgICAxMSwgICAgMTIsICAgICAwLCAgICAgMCwgICA4NjAsCisgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgICAwLCAgICAgMCwgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsCisgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAgMCwgICAgMjEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAgMCwgICA4OTUsICAgICA4LCAgIDY2MywgICAxNzYsCisgICAgMTEsICAgMTc3LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMTMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMCwgICAgIDAsCisgICAgIDAsICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMjAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAgMCwgICAgMzIsICAgICAwLCAgICAyMywgICAgIDAsCisgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgMCwgICAgMjcsCisgICAgMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDg5NywgICAgIDAsICAgICA3LCAgICAgOCwgICAgIDksCisgICAxNzYsICAgIDExLCAgIDE3NywgICAgMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDMyLCAgICAxNiwgICAgIDAsICAgIDE3LCAgICAxOCwgICAgMzMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgICAwLCAgICAgNywgICAgIDgsICAgICA5LCAgIDExOSwgICAgMTEsICAgIDEyLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgICAxMywgICAgIDAsICAxMjg0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgICAgMCwgICAgMTcsCisgICAgMTgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAyMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgMjEsICAgICAwLCAgICAzMiwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICA3LCAgICAgOCwgICAgIDksCisgICAxNzYsICAgIDExLCAgIDE3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMzAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsCisgICAgIDAsICAgICAwLCAgICAxNiwgICAgIDAsICAgIDE3LCAgICAxOCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsCisgICAgMjAsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLCAgICAyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDAsCisgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMzLCAgIDQ4OSwgICA0OTAsCisgICA0OTEsICAgNDkyLCAgIDQ5MywgICA0OTQsICAgNDk1LCAgIDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsCisgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsICAgNTA1LCAgIDUwNiwgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsCisgICA0ODksICAgNDkwLCAgIDQ5MSwgICA0OTIsICAgNDkzLCAgIDQ5NCwgICA0OTUsICAgNDk2LCAgIDQ5NywgICA0OTgsCisgICA0OTksICAgNTAwLCAgIDUwMSwgICA1MDIsICAgNTAzLCAgIDUwNCwgICA1MDUsICAgNTA2LCAgIDUwNywgICA1MDgsCisgICA1MDksICAgNTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAxMDczLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDU2OCwgICAgIDAsICAgICAwLCAgMTMzOSwgICA0ODksICAgNDkwLCAgIDQ5MSwgICA0OTIsCisgICA0OTMsICAgNDk0LCAgIDQ5NSwgICA0OTYsICAgNDk3LCAgIDQ5OCwgICA0OTksICAgNTAwLCAgIDUwMSwgICA1MDIsCisgICA1MDMsICAgNTA0LCAgIDUwNSwgICA1MDYsICAgNTA3LCAgIDUwOCwgICA1MDksICAgNTEwLCAgMTI0OCwgICA0ODksCisgICA0OTAsICAgNDkxLCAgIDQ5MiwgICA0OTMsICAgNDk0LCAgIDQ5NSwgICA0OTYsICAgNDk3LCAgIDQ5OCwgICA0OTksCisgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsICAgNTA0LCAgIDUwNSwgICA1MDYsICAgNTA3LCAgIDUwOCwgICA1MDksCisgICA1MTAsICAxMzgxLCAgIDQ4OSwgICA0OTAsICAgNDkxLCAgIDQ5MiwgICA0OTMsICAgNDk0LCAgIDQ5NSwgICA0OTYsCisgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsICAgNTA0LCAgIDUwNSwgICA1MDYsCisgICA1MDcsICAgNTA4LCAgIDUwOSwgICA1MTAsICAgNDg5LCAgIDQ5MCwgICA0OTEsICAgNDkyLCAgIDQ5MywgICA0OTQsCisgICA0OTUsICAgNDk2LCAgIDQ5NywgICA0OTgsICAgNDk5LCAgIDUwMCwgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsCisgICA1MDUsICAgNTA2LCAgIDUwNywgICA1MDgsICAgNTA5LCAgIDUxMAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5Y2hlY2tbXSA9IHsgICAgIDQsCisgICAzNTMsICAgMzg3LCAgIDE0NSwgICAgIDQsICAgIDcxLCAgICAgNCwgICAzMTIsICAgMTM1LCAgIDEzNiwgICAxODAsCisgICA2MDksICAgICA0LCAgIDYwNywgICAzNTMsICAgODQyLCAgIDQyOCwgICAgMTMsICAgMzE4LCAgICAxMywgICA4NDQsCisgICAgMjUsICAgIDU4LCAgICA1MSwgICAzMTgsICAgIDc5LCAgICAyMiwgICAgMjUsICAgIDI1LCAgIDM4MiwgICA0MDksCisgICAgMzUsICAxMTgxLCAgICAyNSwgIDEzMTYsICAgIDM1LCAgICA0MCwgICAgMzUsICAgIDMwLCAgICAzMSwgICAgNDAsCisgICAgNTUsICAgIDQwLCAgICAzNSwgICAyMTQsICAgICAwLCAgIDc1NSwgICA1MzcsICAgIDQwLCAgICA1MywgICAgIDQsCisgICA2NjcsICAgMTg4LCAgIDE4OSwgICA1NDQsICAgMjY3LCAgIDI2OCwgICAyMDksICAgMTgwLCAgIDY3NSwgICAgNTAsCisgICAzMzcsICAgICA0LCAgICAxMCwgICAgNjgsICAgIDEwLCAgICA3NSwgICAxODksICAxMjA0LCAgIDExNywgICAxMTgsCisgICAgMjUsICAgIDEwLCAgICAgMSwgIDEzNTEsICAgIDc5LCAgICA4NiwgICAgMTEsICAxMDQ1LCAgMTA0NiwgICAgODQsCisgICAgMzUsICAgIDg2LCAgICA4NywgICAgNzgsICAgIDM3LCAgICA0MCwgICAgNzksICAgMzAwLCAgICA4NywgICAgODcsCisgICAyNjEsICAxMDU5LCAgICAzNSwgICAxMjIsICAgIDg3LCAgIDEwMCwgICAxMDEsICAgIDQwLCAgIDM4OCwgICAgIDQsCisgICAgMzMsICAxMzQ5LCAgICAgMSwgICAgNjAsICAgIDk5LCAgIDM5NSwgICAgNTgsICAgIDg2LCAgICAgMCwgICA2ODQsCisgICAgNTksICAgNjg2LCAgICA2NCwgIDEzNDYsICAgIDYyLCAgIDEyNiwgICAxMTMsICAgMTg0LCAgIDEyMywgICAxMTUsCisgICAgMjUsICAgMTI2LCAgIDExOCwgICAgNDgsICAgIDU5LCAgMTM3MywgICA0ODAsICAgIDYyLCAgICAgOCwgICAgNTgsCisgICAgMzUsICAxMjExLCAgICA4NywgICAgNjIsICAgIDkzLCAgICA0MCwgIDE0MTQsICAgMTM0LCAgMTIxOCwgIDEzMzMsCisgICAgNTksICAgMzEyLCAgIDEzNSwgICAxMzYsICAgMTQ5LCAgICAgMSwgICAxODMsICAgMTI2LCAgICA1MywgICAxNDAsCisgICAxNDksICAgIDkzLCAgIDQ1OCwgICAxMTAsICAgMTkxLCAgMTQzOCwgICAxNDksICAgMTEwLCAgIDUzOCwgICAgNTgsCisgICAxMDksICAgMTA5LCAgICA5NywgICAxMDksICAgNDU0LCAgIDE4MCwgICAgOTUsICAgIDExLCAgICAzMywgIDE0MDIsCisgICAxMDksICAgMTY0LCAgIDE2NSwgICAxODgsICAgMTg5LCAgMTE0MywgICAgIDQsICAgMTEwLCAgMTM3MiwgIDEzMTYsCisgICAxNzEsICAgIDYxLCAgICA4NywgICAgNTgsICAxMTUyLCAgMTE1MywgICAgOTMsICAxMTU1LCAgICA2MCwgICAgNDcsCisgICAgNDcsICAgMTEwLCAgICAgNywgICAgIDgsICAgMTQ5LCAgIDYwOCwgICAgNDcsICAgIDI1LCAgICAxMywgICAyMTQsCisgICAgNTQsICAgIDQ3LCAgICA1OCwgICAgMzMsICAxNDUyLCAgIDQwNywgICAgNjIsICAgIDM1LCAgICA2MiwgIDE0MDMsCisgICAyMDcsICAgIDI0LCAgICA0MCwgICA0MTUsICAgNzg5LCAgICA1OSwgICAgNTksICAgMjI3LCAgICA2MiwgICAgNTksCisgICAyMTUsICAgIDM2LCAgICA0NywgICAgNTQsICAgIDk5LCAgICA2MCwgICA1MTYsICAgIDc0LCAgIDUxOCwgICA1MTksCisgICAgNDUsICAgIDYwLCAgICA0NywgIDEzODMsICAgIDkzLCAgICA5MywgICAgOTMsICAgIDk0LCAgIDExMCwgICAgOTUsCisgIDEzMjAsICAgIDYyLCAgICA5MywgICA5NTMsICAgMTQ5LCAgICA1OCwgICAyNjEsICAgIDkzLCAgICA5NCwgICAgNjIsCisgICAzMDUsICAgIDc5LCAgIDEwOSwgICAgOTcsICAgIDMzLCAgIDU1NiwgICA2MTAsICAgMjYyLCAgIDEwOSwgICAgODcsCisgICAzMDksICAgNTUxLCAgICA2MCwgICAxMDksICAgIDU5LCAgIDEwOSwgICAxMDksICAgICA2LCAgICA5MywgICAxMDksCisgICAxMzUsICAgMTM2LCAgIDEzNywgICA0MDEsICAgNDAyLCAgIDExMCwgICA0MTMsICAgNDE0LCAgICA5MywgICA2MzIsCisgIDEzNjAsICAgMTEwLCAgICA5NSwgICAgMjQsICAgNDIxLCAgIDI4MiwgICAgNDcsICAgMjkyLCAgIDEwOSwgICA0MzIsCisgICAgNjIsICAgNDE0LCAgIDYzMiwgICAzMjIsICAgNDMxLCAgICA2MCwgICAgNDcsICAgMzEyLCAgICAzNywgICAzNDgsCisgICAzMDUsICAgMTY2LCAgIDc5MywgICA1ODAsICAgNDA2LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgIDMxMywgICA4ODQsCisgICAgNTQsICAgNDQ4LCAgIDMwNSwgICAgNjQsICAgMTA5LCAgIDQxNywgICAgNjAsICAgMjk2LCAgICAgNCwgICA4OTQsCisgICAxMDgsICAgMTQ5LCAgIDYyOCwgICAzMTgsICAgIDU0LCAgMTQwNSwgICAgIDMsICAgICA0LCAgICAgNSwgICAzMjYsCisgICA4MjEsICAgIDMxLCAgICA5MywgIDEzMDEsICAxMzAyLCAgICA0NywgICAxNjYsICAgMTA5LCAgICA0NywgICAzMzYsCisgICAgMTEsICAgMzIwLCAgICA5MywgICAzMzksICAgMzQxLCAgICAzNSwgICAgNjIsICAgIDU0LCAgIDM1MywgICAgMzUsCisgICAgNDAsICAgOTI2LCAgIDM0OCwgICA5MjgsICAgIDQwLCAgIDM1MywgICA0MjMsICAgMTM2LCAgIDEzNywgICAgNTgsCisgICAzNTMsICAgICA0LCAgICAgNSwgICA4NTQsICAgIDQxLCAgICAgNCwgICAgIDUsICAgIDc0LCAgIDExMCwgIDExOTQsCisgICAzNzUsICAgNzU3LCAgMTA4MiwgICAgMjYsICAgIDI3LCAgICA0NywgICAzNzUsICAgMzc1LCAgIDM1NywgICAgNTYsCisgICAgNTcsICAgIDkzLCAgIDM3NSwgICA0MjAsICAgIDkzLCAgICA5NCwgICAgNDcsICAgMTY2LCAgICA1OSwgICAgNDcsCisgICAzOTUsICAgIDYyLCAgICA2NCwgICAgNjQsICAgICAzLCAgICAgNCwgICAgIDUsICAgNDM0LCAgIDQxMywgICA0MTQsCisgICAxMDksICAgIDU4LCAgIDM5NSwgICAgODAsICAgICA0LCAgICAgNSwgICA0MjEsICAgIDQ3LCAgIDQwMSwgICA0MDIsCisgICA3OTAsICAgIDg4LCAgICA5MywgICAgNTYsICAgIDU3LCAgICA1NCwgICA0MzEsICAgIDU2LCAgICA1NywgICA0MjksCisgICAzNzUsICAgIDkzLCAgICA5NCwgIDEyMDgsICAgNDI5LCAgMTIxMCwgICAgOTcsICAgIDQ3LCAgMTI1MywgICAgNDcsCisgICA0MjksICAgIDcwLCAgICA5MywgICA0NDgsICAgIDc1LCAgICA5MywgICA0MjksICAxMjYyLCAgMTI2MywgICAgNDcsCisgICAgNjIsICAgIDgwLCAgIDEwOSwgIDEwNjAsICAgIDY0LCAgICA1NCwgICAgNTQsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgNDcsICAgNDU2LCAgICA3NCwgICAgOTMsICAgNDU5LCAgICA5NCwgICAgNTYsICAgIDU3LCAgIDQ2MywgICA0NjQsCisgICA0NjUsICAgNDY2LCAgIDQ2NywgICA4MTYsICAgMTA5LCAgIDUyMCwgICAgNzQsICAgIDU0LCAgIDc1OCwgICA4ODIsCisgICAzNzUsICAgNDc2LCAgICA0NywgICAgOTMsICAgNDI5LCAgICA5MywgICA4MTYsICAgMzA1LCAgIDQ4MywgICAyNjksCisgICAyNzAsICAgNzcxLCAgIDQ4NywgICA3NzMsICAgIDQ3LCAgICA5MywgICA0MjksICAgIDc0LCAgIDg0MiwgICA0ODYsCisgICAgMjYsICAgIDI3LCAgICA5NCwgICAyODMsICAgIDQ3LCAgICAzMSwgICAgOTMsICAgNzk4LCAgIDI4OCwgICAgNDcsCisgICA2NTMsICAgMjkxLCAgIDY1NSwgICA3OTgsICAgMjk0LCAgIDEwOSwgICAgNTQsICAgNjYwLCAgIDI5OCwgICAgMTAsCisgIDEwMDEsICAgIDYyLCAgIDY0OSwgICAyOTIsICAgNTE5LCAgIDUyMCwgICAzMDYsICAgIDQ3LCAgICA5MywgICAgOTQsCisgICAgNDcsICAgODExLCAgIDExMCwgICAgNzQsICAgIDYwLCAgIDM1MywgICAgNzQsICAgNTIwLCAgICA2NCwgICAgNTQsCisgICAgOTMsICAxMDIyLCAgIDUzNywgICA3MDQsICAgOTIwLCAgICA2MCwgICA0MDEsICAgNDAyLCAgIDQwMywgICA1NDQsCisgICAgOTMsICAgNTM0LCAgIDUzNSwgICAxMDksICAgNTM3LCAgICA5MywgICA4MzYsICAgMzc1LCAgICA0NywgICAgIDMsCisgICA2NTIsICAgNTQ0LCAgMTM3NywgICA1NDgsICAgIDQ3LCAgICAgMywgICAgIDQsICAgICA1LCAgIDk0NCwgICA5NDUsCisgIDEzODgsICAgIDU0LCAgIDU5MSwgICAgOTMsICAgNTkzLCAgIDU5NCwgICAgOTMsICAgMzk1LCAgIDU2NSwgICAgIDQsCisgICAgIDUsICAgNDAxLCAgIDQwMiwgICA0MDMsICAgMTEwLCAgICAgMywgICAgIDQsICAgICA1LCAgIDY4MCwgICA1OTQsCisgICAgNjAsICAgIDc0LCAgIDc5NSwgICA5NjMsICAgICAzLCAgICAgNCwgICAgIDUsICAgNTkyLCAgICAzOCwgICA1ODYsCisgICAgNDcsICAgNTk2LCAgIDExMiwgICAgNDEsICAgIDkzLCAgICA5NCwgIDEwMDksICAgIDkzLCAgIDU5NSwgICA2MjgsCisgICAgOTMsICAgNDI5LCAgIDY2OSwgICA2NzAsICAgIDU0LCAgICA5NCwgICAgNTQsICAgIDQ3LCAgICA1NiwgICAgNTcsCisgICAgOTQsICAgNjc4LCAgICA0NywgICA2MjgsICAgMTEyLCAgICA1OSwgICAgNTksICAgIDYwLCAgIDYxNSwgICAgNTQsCisgICAgNjIsICAgIDU2LCAgICA1NywgICA0MDIsICAgNDAzLCAgICA5MywgIDEwMzksICAgNjMyLCAgICA1NiwgICAgNTcsCisgICAgNTgsICAgIDc1LCAgMTAxOCwgICAgNzcsICAgNjQ5LCAgICA3MCwgICAgOTMsICAgIDU2LCAgICA1NywgICA2MzIsCisgICAgODgsICAxMDI3LCAgMTAyOCwgICAgNTQsICAgNjczLCAgICA4MCwgIDEwMzIsICAxMDMzLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIDYyLCAgIDk1OCwgICAgOTMsICAgIDk0LCAgICA5MCwgICAgNTksICAgNjY3LCAgICA5MywgICAgOTQsCisgICAgOTMsICAgIDgwLCAgIDY2NywgICAgNzQsICAgNjc0LCAgIDY3NSwgICAgNTksICAgIDYwLCAgIDY2NywgICA2NzQsCisgICA2NzUsICAgIDEwLCAgICA3NSwgICAgNzQsICAgNjY3LCAgICA1NCwgICA2NzUsICAgNDU2LCAgMTM3NCwgICA2ODQsCisgICA0NTksICAgNjg2LCAgIDY3NSwgICAgNjIsICAgNDc0LCAgIDQ3NSwgICAgNDEsICAxMDczLCAgICA3NCwgICA3MDQsCisgIDEzODYsICAgNjg0LCAgIDUyMCwgICA2ODYsICAgIDc0LCAgICA3NCwgICA0NzUsICAgNDc2LCAgICAgNCwgICAgIDUsCisgIDEzOTYsICAgIDU2LCAgICA1NywgICAgNzQsICAgICAzLCAgICAgNCwgICAgIDUsICAgMTA5LCAgIDQ4NywgICA1MzcsCisgICAgIDQsICAgICA1LCAgIDY2NywgICAgNTksICAgIDU0LCAgIDExMCwgICA1NDQsICAxNDEzLCAgICA2NCwgICAxMDksCisgICA2NzUsICAxMDExLCAgICA2MiwgIDEwMTMsICAgNjY3LCAgMTAxNSwgICA4NzksICAgODgwLCAgIDg4MSwgICAgNzUsCisgICAgNTksICAgIDYwLCAgIDY3NSwgICAgODgsICAgIDc0LCAgICA1OSwgIDE0MzIsICAgIDU5LCAgICA2MCwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICA0MSwgIDExMjksICAgIDU0LCAgIDEwOSwgICAgNTQsICAxMzQyLCAgICA0NywgICA3NTQsCisgICAgNTYsICAgIDU3LCAgICA2MiwgICA3NTgsICAgIDYyLCAgICA1NCwgICAxMDksICAgIDU2LCAgICA1NywgIDE0NTUsCisgICAgNTQsICAgMTA5LCAgICA1NiwgICAgNTcsICAgIDc0LCAgIDU0NCwgICAgNzQsICAxMzY2LCAgIDY3MywgICA2NzQsCisgICAgNjAsICAgIDcwLCAgIDk1OSwgICA5NjAsICAgIDgwLCAgIDk2MiwgICAxMTAsICAgIDQxLCAgIDc4MywgICAgODMsCisgICAgODQsICAgIDgwLCAgICA1NCwgIDExNjksICAgNzg5LCAgIDg4NywgICA4ODgsICAgMTEwLCAgIDc5MywgICAgODgsCisgICAgNjIsICAgIDkwLCAgICA1NiwgICAgNTcsICAgIDkzLCAgICA5NCwgICA3ODksICAgMTEyLCAgIDc5MSwgICA3OTIsCisgICA3OTMsICAgMTEyLCAgICA3NCwgICA3OTgsICAgNjMyLCAgIDgwMiwgICAgIDMsICAgICA0LCAgICAgNSwgIDEwOTksCisgICAgNjQsICAgODE2LCAgIDgwOSwgICA4MTgsICAgOTE2LCAgIDExMiwgICA4MjEsICAgMTA5LCAgIDgxNiwgICAgNTksCisgICAgNjAsICAgICA0LCAgICAgNSwgICA4MTYsICAgIDg4LCAgIDExMiwgICA4MTksICAgODIwLCAgIDgyMSwgICAgIDQsCisgICAgIDUsICAgODk4LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgOTA0LCAgIDkwNSwgICA2NjcsCisgICAxMDksICAgOTA4LCAgIDkwOSwgICAgNTksICAgIDYwLCAgIDkxMiwgICAxMDksICAgNjc1LCAgIDEwOSwgICA4NTQsCisgICAgIDQsICAgICA1LCAgIDY5MywgICA2OTQsICAgNjk1LCAgICA1OCwgICA2ODQsICAgIDU0LCAgIDY4NiwgICAgNTYsCisgICAgNTcsICAgODU0LCAgMTI0OCwgICA4NjgsICAgIDU5LCAgICA2MCwgICAxMDksICAgIDU0LCAgICAgNywgICAgOTMsCisgICA4NzUsICAgOTk5LCAgMTAwMCwgICAgNTYsICAgIDU3LCAgIDExMiwgICAgIDMsICAgICA0LCAgICAgNSwgICA4ODQsCisgICA4NzcsICAgIDU2LCAgICA1NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICA4OTQsCisgICAgNDcsICAgODg0LCAgMTAyMCwgIDEwMjEsICAgIDY0LCAgICA1OSwgICA5MDYsICAgIDgwLCAgIDExMCwgICAgOTMsCisgICAgNjAsICAgODk0LCAgICA1NiwgICAgNTcsICAxMjEwLCAgICA4MCwgICAgMjQsICAgOTE3LCAgICAyNiwgICAgMjcsCisgIDEyNjQsICAgIDY0LCAgIDkxNywgICAgNjQsICAgIDYwLCAgICA2MiwgICAgMzYsICAgMTA5LCAgIDkxNywgICA2OTgsCisgICAgNDcsICAgOTI2LCAgMTI3NiwgICA5MjgsICAgOTE3LCAgIDEwOSwgICAgODAsICAgIDU0LCAgIDEwOSwgICAgNTYsCisgICAgNTcsICAgMTA5LCAgIDEwOSwgICA5MjYsICAgIDY0LCAgIDkyOCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNjQsCisgICAgNTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDYyLCAgICAgMywgICAgIDQsICAgICA1LCAgIDk0NSwgIDEwNTEsCisgIDEwNTIsICAgIDY0LCAgMTA1NCwgIDEwNTUsICAgMTEyLCAgMTA1NywgICA4MjEsICAgIDY0LCAgIDEwMCwgICAxMDEsCisgICAgOTMsICAgNzg5LCAgIDkxNywgICAgNTksICAgIDYyLCAgIDc5MywgICAgOTMsICAgICA0LCAgICAgNSwgICAxMDksCisgICAgNzUsICAgMTA5LCAgIDEwOSwgICAxMDksICAgOTE3LCAgIDEwOSwgICA3NjYsICAgIDk1LCAgICA3NSwgIDEzMzMsCisgICAgNzUsICAgIDc1LCAgICA2MiwgICAgNDEsICAgMTA0LCAgIDEwNSwgICAxMDYsICAgMTA5LCAgIDgxNiwgICA4NTQsCisgIDEzNDMsICAgODIxLCAgIDEwOSwgICA4MjEsICAgIDU2LCAgICA1NywgIDEwMDEsICAgIDYyLCAgICA1NiwgICAgNTcsCisgICAgNTksICAgNzkxLCAgIDc5MiwgIDEzNDMsICAgMTEyLCAgIDEwOSwgICA5OTksICAxMDAwLCAgMTAwMSwgICAgNjIsCisgICAgIDQsICAgICA1LCAgICA5NCwgICA3OTIsICAgNzkzLCAgICA4OCwgIDEzNzAsICAxMDIyLCAgMTM3MiwgICAgNTYsCisgICAgNTcsICAxMDE4LCAgICA4MCwgICAxMDksICAgODU0LCAgIDExMCwgICA4NTQsICAxMDIwLCAgMTAyMSwgIDEwMjIsCisgICAgODgsICAgMTA5LCAgIDEwOSwgICAxMTIsICAxMzg4LCAgICAgNCwgICAgIDUsICAgIDQ3LCAgMTE0MCwgIDExNDEsCisgICAxMDksICAxMDM4LCAgIDgyMSwgICAgODAsICAgMTEyLCAgIDEwOSwgIDEwNTYsICAgMTEwLCAgIDEwOSwgIDE0MDMsCisgIDEwNjAsICAxMzU3LCAgIDExMiwgICAxMDksICAxNDQwLCAgMTA2MCwgICA4ODQsICAgMTA5LCAgIDEwOSwgICAgNTksCisgICAgNTQsICAxMDYwLCAgICA1NiwgICAgNTcsICAgMTEwLCAgICA2NCwgICA4OTQsICAxMDYwLCAgICA2NCwgICAgMjQsCisgICAgNjIsICAgIDI2LCAgICAyNywgICAgIDQsICAgICA1LCAgIDg1NCwgICAgNzAsICAgICA4LCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIDU5LCAgICA1OSwgIDExNTAsICAxMTUxLCAgIDEwOSwgICAgODAsICAgIDU2LCAgICA1NywgICA5MTcsCisgICAxMDksICAgIDkzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgMTEwLCAgIDkyNiwgICAgMTEsCisgICA5MjgsICAgIDEzLCAgICA5MywgICAgNTgsICAgIDkzLCAgMTA2MCwgICAgOTMsICAgIDYyLCAgIDEwOSwgICAxMTIsCisgIDExMTUsICAgIDgwLCAgICAgNCwgICAgIDUsICAxMTE1LCAgMTExMiwgICAgMjgsICAxMDYwLCAgICAzMCwgICAgMzEsCisgIDExMjUsICAgMTA5LCAgMTExNSwgICAgNTQsICAgIDM2LCAgICA1NiwgICAgNTcsICAgICA3LCAgMTIzMCwgIDEyMzEsCisgIDEyMzIsICAgIDU2LCAgICA1NywgICAgNDUsICAgOTk5LCAgMTAwMCwgIDEwMDEsICAgMTA5LCAgICAzMCwgICAgNzAsCisgICAgOTUsICAgMTA5LCAgICA1NCwgICAxMDksICAgIDU2LCAgICA1NywgICAxMTAsICAgMTEyLCAgIDEwOSwgICAgODAsCisgICAyOTIsICAgMTA5LCAgIDEwOSwgICAgNDUsICAgIDYyLCAgMTAyMCwgIDEwMjEsICAxMDIyLCAgIDEwOSwgICAxMDksCisgIDExMTUsICAgMTA5LCAgICA1NCwgICAgOTQsICAgIDU2LCAgICA1NywgICAgNjQsICAgMTA5LCAgIDEwOSwgICA5OTksCisgIDEwMDAsICAxMDAxLCAgMTExNSwgIDEwMDEsICAgIDg0LCAgIDk2NSwgICAgODYsICAgMTA5LCAgIDExMiwgIDEyMDgsCisgICAgNDcsICAxMjEwLCAgMTMyNSwgICAxMDksICAgICA4LCAgICA5NywgIDEzNTcsICAgIDExLCAgIDEwOSwgICAxMDksCisgIDEwMjAsICAxMDIxLCAgMTAyMiwgICAgOTYsICAxMDIyLCAgMTIxMCwgIDEyOTgsICAxMjk5LCAgICAzMywgIDEyMDQsCisgIDEzMjgsICAxMzI5LCAgIDEwOSwgIDEyMDAsICAxMjA5LCAgICA2MiwgIDEyMTEsICAgMTA5LCAgIDEwOSwgICAxMDksCisgIDEyMTEsICAxMjA0LCAgIDEwOSwgIDEyMTgsICAgMTA5LCAgICA2MiwgICAxMjYsICAxMjE4LCAgMTIxMSwgIDEyODYsCisgICAgNjIsICAxMDAwLCAgMTAwMSwgICAgNDcsICAgMzUzLCAgMTIxOCwgICAgMjQsICAgMTEyLCAgICAyNiwgICAgMjcsCisgIDEwMjAsICAxMDIxLCAgMTA2MCwgICAgIDcsICAgICA4LCAgICA1OSwgICAgIDgsICAgIDYxLCAgICA2MiwgICAgMTMsCisgICAgNjQsICAgIDYwLCAgMTAyMSwgIDEwMjIsICAgIDYwLCAgICAgMywgICAgIDQsICAgICA1LCAgICA2MCwgIDEyMDQsCisgICAzOTIsICAgIDc1LCAgICAxNSwgICAgNzcsICAgIDkzLCAgICA5MywgIDEyMTEsICAgIDYwLCAgMTI1NSwgICAgNjAsCisgICAgNTgsICAxMjA0LCAgICAzNiwgIDEyMTgsICAgIDYyLCAgICA5MywgICAzOTUsICAgMTA4LCAgMTIxMSwgICAgOTMsCisgICAgOTQsICAgIDQ1LCAgICA5OCwgICAgOTcsICAgIDE2LCAgMTIxOCwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgODIsICAgIDgzLCAgICA4NCwgICAgNDEsICAgIDkzLCAgIDEwOSwgICAxMDksICAxMTE1LCAgIDEwOSwgICAgNjAsCisgICA2NDcsICAgIDYwLCAgIDEwOSwgICAgIDMsICAgICA0LCAgICAgNSwgICAxMDksICAgIDk1LCAgICA1NiwgICAgNTcsCisgICAgNjAsICAgIDEwLCAgMTQwNCwgICAgNjAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgOTMsICAxMzE2LCAgMTMxNywgIDEzODAsICAgNDU2LCAgMTMyMCwgICAgNTksICAgNDU5LCAgIDEwOSwgIDEzMjAsCisgICAgNjAsICAgNDYzLCAgICA4MCwgIDEzMTYsICAxMzE3LCAgMTMzMCwgICA2ODMsICAxMzIwLCAgIDY4NSwgIDEzNTgsCisgICAgODgsICAgIDQxLCAgICA2NCwgICAgNjAsICAgNDc2LCAgMTMyOCwgIDEzMjksICAgIDEwLCAgMTM0MywgICAgIDQsCisgICAgIDUsICAxMzQ2LCAgMTM1NywgICAxMDksICAxMzQ5LCAgIDQ4NywgICAgNTYsICAgIDU3LCAgMTM0OSwgICA0OTEsCisgIDEzNDMsICAgIDEwLCAgICA2MCwgIDEzNDYsICAgMTA5LCAgMTM2MCwgIDEzNDksICAgIDU2LCAgICA1NywgIDEzNjAsCisgICAgNjAsICAxMzE2LCAgICAgMCwgICAgIDAsICAgICAwLCAgMTMyMCwgICAzNzcsICAxMzYwLCAgMTM3MywgICAgIDIsCisgICAgODAsICAgMjgxLCAgMTM3MywgIDEzMTYsICAgMTQ5LCAgIDUxNywgIDEyMDQsICAxMzIwLCAgICA4OCwgICAgNDQsCisgIDEzNzMsICAgNTIzLCAgICAyNCwgIDEyMTEsICAgIDI2LCAgICAyNywgICAzMzksICAgODE2LCAgIDE0OSwgICAgNTQsCisgIDEyMTgsICAgIDU2LCAgICA1NywgICA2NzQsICAxMzQ5LCAgMTAwOSwgIDEzNDEsICAxNDAyLCAgICAyNiwgICAgMjcsCisgIDE0MDUsICAxMzEyLCAgIDQ4MywgICAgMzEsICAxNDA1LCAgMTM2MCwgIDEzNDksICAxNDUyLCAgIDUzNywgIDE0MDIsCisgIDEyMDksICAgODA5LCAgMTQwNSwgICA2MTUsICAxMjA0LCAgIDU0NCwgICAgNTgsICAxMzYwLCAgMTM3MywgICAgMTEsCisgICAgNjIsICAgODA0LCAgMTI4NywgICAyMDgsICAxMDM5LCAgIDkxNywgICA4ODIsICAgNzg0LCAgIDY3NCwgICA3ODYsCisgIDEzNzMsICAgIDU5LCAgICA2MCwgIDEwNTgsICAgIDI2LCAgICAyNywgICAgNjQsICAgNTY1LCAgIDE3MSwgICAgMzEsCisgICAgIDEsICAgODAyLCAgICAgMywgICAgIDQsICAgICA1LCAgIDUyMCwgICAgIDcsICAxNDUyLCAgIDMwOSwgIDEyMTEsCisgIDE0MDUsICAxNDUyLCAgMTExNiwgICAgOTUsICAxMzY2LCAgICA0NywgIDE0MjUsICAxMjg3LCAgIDg2MywgIDE0NTIsCisgIDEzNjMsICAxNDI3LCAgMTQwNSwgIDEzMjgsICAxMzI5LCAgMTMzMCwgIDExMjUsICAgIDU5LCAgICA2MCwgICAgLTEsCisgICAgNjIsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzg3LCAgIDM4OCwgICAgLTEsCisgICAgNDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgIDM5NSwgICAgLTEsICAgICA4LCAgMTMxNiwgIDEzMTcsCisgICAgIDQsICAgICA1LCAgMTMyMCwgICAgNTQsICAgICA4LCAgICA1NiwgICAgNTcsICAxNDUyLCAgMTMyOCwgIDEzMjksCisgIDEzMzAsICAgIDkzLCAgICA5NCwgICA2MzIsICAgIC0xLCAgICA5NywgICAgLTEsICAgIC0xLCAgMTI4NywgIDE0NTIsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTM0MywgICAgLTEsICAgMTA5LCAgMTM0NiwgICAgLTEsCisgICAgNDEsICAxMzQ5LCAgICAtMSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgLTEsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgMTMsICAgIC0xLCAgMTM2MCwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgMTMyOCwgIDEzMjksCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgNDU0LCAgMTM3MywgICAgLTEsICAgIC0xLCAgICAzMSwgICAgNzAsCisgIDEzMjksICAxMzMwLCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDY4NCwgICAgNzAsICAgNjg2LCAgICAtMSwgICAgODAsCisgICAgIDQsICAgICA1LCAgICA0NSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgODAsICAgIDg4LCAgIDkyNSwgICAgLTEsCisgICA5MjcsICAgIC0xLCAgICA5MywgICA0ODMsICAxNDAyLCAgICAtMSwgICA0ODYsICAxNDA1LCAgICAtMSwgICA0ODksCisgICA0OTAsICAgIC0xLCAgIDQ5MiwgICA0OTMsICAgNDk0LCAgIDQ5NSwgICA0OTYsICAgNDk3LCAgIDQ5OCwgICA0OTksCisgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsICAgNTA0LCAgIDUwNSwgICA1MDYsICAgNTA3LCAgIDUwOCwgICA1MDksCisgICA1MTAsICAgIC0xLCAgICAtMSwgICAgNDcsICAgIC0xLCAgICAtMSwgICA1MTYsICAgIC0xLCAgIDUxOCwgICA1MTksCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA3NjIsICAgOTc4LCAgICAtMSwgICAgLTEsICAxNDUyLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgLTEsICAgNTQ0LCAgICAtMSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNTUxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTAsICAgIC0xLCAgICAtMSwgICAgOTMsCisgICAgOTQsICAgNzkzLCAgICA0MSwgICAgIDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNTY3LCAgIDU2OCwgICAgLTEsCisgICA3ODksICAgIC0xLCAgICAxMywgICAgLTEsICAgNzkzLCAgICAtMSwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsCisgICAgODYsICAgIDg3LCAgICAyMywgICAgMjQsICAgIDI1LCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NCwgICAgMzAsCisgICAgMzEsICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAtMSwgIDEwNDMsICAgODE2LCAgICAtMSwgICAgNDAsCisgIDEwNDcsICAgICAxLCAgIDgyMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgODgsCisgICAgNTEsICAgIC0xLCAgICA1MywgICAgMTMsICAgIC0xLCAgIDYxNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY4LCAgICAyOCwgICAgLTEsCisgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDg1NCwgICAgMzYsICAgIDc4LCAgICA3OSwgICAgLTEsCisgICAgLTEsICAgIDQxLCAgICAtMSwgICA4NzUsICAgIC0xLCAgICA0NSwgICAgODcsICAxMDk0LCAgICA0OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICA5OSwgICAgLTEsCisgICAgNjAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDg4NCwgICA2NjYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNzAsICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDg5NCwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsCisgICAgODAsICAgMTIyLCAgIDEyMywgICAxMjQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTI4LCAgICA4OCwgICAgLTEsCisgICAxMzEsICAgMTMyLCAgICAtMSwgICAgOTMsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIC0xLCAgIDY5OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgOTI2LCAgIDE0OSwgICA5MjgsCisgICAgLTEsICAgIC0xLCAgMTE1OSwgIDExNjAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA3MjAsICAgIC0xLCAgICAtMSwgICAxNjQsICAgMTY1LCAgIDE2NiwgICAgLTEsICAgIC0xLCAgMTE3NSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgLTEsCisgICAgNDEsICAgIC0xLCAgICAtMSwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDE5MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgNzU3LCAgIDc1OCwgICAgNjAsCisgICAgLTEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgNzcxLCAgICAtMSwgICA3NzMsICAgMjE1LCAgICA0NSwgIDEyMjMsICAxMjI0LCAgICAtMSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgMTAwMSwgICAyMjQsICAgIC0xLCAgICAtMSwgICAgOTcsICAgIDg4LCAgICAtMSwgICAgLTEsCisgIDEwMjIsICAgIC0xLCAgICA5MywgICAgLTEsICAgIC0xLCAgMTI0MiwgIDEyNDMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgODAxLCAgIDExMywgIDEwMjIsICAgIC0xLCAgICAtMSwgICAxMTcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgODExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMzAsCisgICAgLTEsICAgMjYyLCAgIDI2MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICA4MjksCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTMsICAgIC0xLCAgICAtMSwgICA4MzYsICAxMDY5LCAgMTA3MCwgIDEwNzEsCisgIDEwNzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTA4MCwgICAgLTEsCisgICAgLTEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgODU0LCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQxLCAgICAtMSwgICAxNzQsICAgMzA1LCAgICA0NSwgICAgLTEsICAgIDQ3LCAgIDMwOSwgICAgLTEsCisgICAzMTEsICAgMzEyLCAgIDMxMywgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMzIyLCAgIDMyMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyMDcsICAgODk3LCAgIDMzOSwgICAgLTEsCisgICAgODAsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzQ4LCAgICA4OCwgICAgLTEsCisgICAgOTAsICAgIC0xLCAgIDM1MywgICAgOTMsICAgIDk0LCAgICAtMSwgICAyMjcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA5MjAsICAgIC0xLCAgIDM2MywgICAgLTEsICAgIC0xLCAgIDM2NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAzNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzc1LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgOTQ0LCAgIDk0NSwgICAgLTEsICAgIC0xLCAgIDk0OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAzOTcsICAgIC0xLCAgIDM5OSwgICAgLTEsCisgICA0MDEsICAgNDAyLCAgIDQwMywgICAgLTEsICAgIC0xLCAgICAtMSwgICA0MDcsICAxMTk5LCAgICAtMSwgICAgIDQsCisgICAgIDUsICAgNDEyLCAgICAgNywgICAgIDgsICAgNDE1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNDI4LCAgIDQyOSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDM2LCAgIDM4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMTcsICAgIC0xLCAgICAtMSwgICAzOTUsCisgICAgNDUsICAxMDExLCAgICA0NywgIDEwMTMsICAgIC0xLCAgMTAxNSwgICAgLTEsICAgIC0xLCAgMTAxOCwgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICA0NjQsICAgNDY1LCAgIDQ2NiwgICA0NjcsICAxMDI3LCAgMTAyOCwgICAgLTEsCisgICAzNDEsICAgIC0xLCAgMTAzMiwgIDEwMzMsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAxMjczLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgLTEsICAgIC0xLCAgIDM1OSwgIDEwNDksCisgIDEwNTAsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICA5MCwgICAgIDgsICAgIC0xLCAgICA5MywgICAgOTQsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQ1NCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwNzMsICAgIC0xLCAgMTA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA1MjAsCisgICAgLTEsICAgNTIyLCAgICAtMSwgICAgLTEsICAxMzE2LCAgMTMxNywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsCisgICAgLTEsICAgNTMyLCAgICAtMSwgICA1MzQsICAgNTM1LCAgICA0NywgICA1MzcsICAgIC0xLCAgMTMzMCwgIDEwOTksCisgICAgLTEsICAgIC0xLCAgICA1NCwgICA1NDQsICAgIDU2LCAgICA1NywgICAgLTEsICAgNTQ4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAxMzQ2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAxMzQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgIDExMjksCisgICA1MTYsICAgIC0xLCAgIDUxOCwgICA1MTksICAgIC0xLCAgICAtMSwgICAgODgsICAgIC0xLCAgICA5MCwgICAgLTEsCisgICA0NTEsICAgIDkzLCAgICA5NCwgICAgLTEsICAgIC0xLCAgIDU4NiwgIDExNDYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA1OTEsICAgNTkyLCAgIDU5MywgICA1OTQsICAgNTk1LCAgIDU5NiwgICAgLTEsICAgIC0xLCAgIDU0NCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDU1MSwgICAgLTEsICAgIC0xLCAgMTQwMCwgIDExNjksCisgIDE0MDIsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgNjI4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNjMyLCAgMTQyNCwgICAgLTEsICAgIC0xLCAgMTE5NSwgICAgLTEsICAgIC0xLCAgIDYzOSwgICA2NDAsCisgICAgLTEsICAgNjQyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgIDE0MzgsICAgIC0xLCAgICAgNCwgICAgIDUsCisgICAgLTEsICAgICA3LCAgICAgOCwgICAgLTEsICAgIC0xLCAgIDY1NiwgICAgLTEsICAgIDEzLCAgICAgNCwgICAgIDUsCisgICA1MzEsICAgICA3LCAgICAgOCwgICA2NjQsICAgIC0xLCAgICAtMSwgICA2NjcsICAgIDEzLCAgMTIyOCwgIDEyMjksCisgICAgLTEsICAgIC0xLCAgIDY3MywgICA2NzQsICAgNjc1LCAgICAtMSwgICA1NDcsICAxMjM3LCAgICAtMSwgICAgLTEsCisgICAgMzYsICAgIC0xLCAgICAyOCwgICA2ODQsICAgIDMwLCAgIDY4NiwgICAgLTEsICAgIC0xLCAgMTI0OCwgICAgNDUsCisgICAgMzYsICAgIDQ3LCAgIDY5MywgICA2OTQsICAgNjk1LCAgIDMxMSwgICAzMTIsICAgMzEzLCAgICA1NCwgICAgNDUsCisgICAgNTYsICAgIDU3LCAgICAtMSwgICA3MDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICA1OCwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsCisgICAgLTEsICAgICA4LCAgICAtMSwgICAgLTEsICAgIDgwLCAgICAtMSwgICAgLTEsICAxMjg3LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDkwLCAgICAtMSwgICAgLTEsICAgIDkzLCAgICA5NCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDY5OCwgICA3NTQsICAgIDQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTMxOCwgICAgLTEsCisgICAgNDcsICAgIC0xLCAgICA4NCwgICAgLTEsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIC0xLCAgICAtMSwgICA3NzQsICAgIC0xLCAgIDc3NiwgICAgLTEsICAgIC0xLCAgIDEwMCwgICAxMDEsCisgICAgLTEsICAgIC0xLCAgIDc4MywgICAgNzAsICAgIC0xLCAgICAtMSwgICA3ODcsICAgIC0xLCAgIDc4OSwgICAgLTEsCisgICA3OTEsICAgNzkyLCAgIDc5MywgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNzk4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg4LCAgICAtMSwgICAgOTAsICAgMTI2LCAgICAtMSwgICAgOTMsICAgIDk0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDc1OCwgICAgLTEsICAgIC0xLCAgIDgxNiwgICAgLTEsICAgODE4LCAgIDgxOSwgICA4MjAsCisgICA4MjEsICAgICA0LCAgICAgMywgICAgIDQsICAgICA1LCAgIDc3MSwgICAgLTEsICAgNzczLCAgICAtMSwgICAgLTEsCisgICAgMTMsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCisgICAgMjMsICAgIDI0LCAgICAyNSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDMwLCAgICAzMSwgICAgIDgsCisgICAgMzMsICAgIC0xLCAgICAzNSwgICA4NTQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsCisgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDgxMSwgICAgLTEsICAgODY4LCAgICA1MSwgICAgLTEsCisgICAgNTMsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgODc4LCAgICAtMSwgICAgNjAsCisgIDE0NDAsICAgODgyLCAgICA0MSwgICA4ODQsICAgIC0xLCAgICA2OCwgICAgLTEsICAgIC0xLCAgICA0NywgICAgNzAsCisgICA4MzYsICAgIC0xLCAgICAtMSwgICA4OTQsICAgIC0xLCAgICA1NCwgICAgNzksICAgIDU2LCAgICA1NywgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg3LCAgICAtMSwgICA5MDcsICAgIDg4LCAgIDg1NCwgICAgLTEsCisgICAgLTEsICAgIDcwLCAgICA5MywgICAgLTEsICAgIC0xLCAgICAtMSwgICA5MTcsICAgIC0xLCAgIDUzNCwgICA1MzUsCisgICAgLTEsICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDkyNiwgICA3OTcsICAgOTI4LCAgIDc5OSwgICAgODgsCisgICAgLTEsICAgIDkwLCAgIDExNSwgICAgLTEsICAgIDkzLCAgICA5NCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMjIsCisgICAxMjMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMzIsCisgICAgLTEsICAgIC0xLCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDk1OSwgICA5NjAsCisgICAgLTEsICAgOTYyLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAxNDksICAgIC0xLCAgICAgOCwgICAgLTEsCisgICAyOTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDU5MSwgICAgLTEsICAgNTkzLCAgIDU5NCwgICAgLTEsCisgICA1OTYsICAgMTY0LCAgIDE2NSwgICAxNjYsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICA5OTcsICAgOTk4LCAgIDk5OSwgIDEwMDAsCisgIDEwMDEsICAgIDQxLCAgICAtMSwgICAgLTEsICAxMDA1LCAgICAtMSwgICA4NzcsICAgIDQ3LCAgICAtMSwgICAgLTEsCisgICAxOTMsICAgIC0xLCAgIDYyOCwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgIDEwMjAsCisgIDEwMjEsICAxMDIyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgLTEsCisgICAgNzAsICAgMzUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDkwNiwgICAgLTEsICAgIC0xLCAgMTAzOSwgICAgLTEsCisgICAgODAsICAgMjI0LCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgIC0xLCAgICA4OCwgICAgLTEsCisgICAgOTAsICAgIDEzLCAgMTA1MywgICAgOTMsICAgIDk0LCAgICAtMSwgICAgLTEsICAxMDU4LCAgICAtMSwgIDEwNjAsCisgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTAxMSwgICAgMjgsICAxMDEzLCAgICAzMCwgIDEwMTUsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDM2LCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAyNjIsCisgICAyNjMsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDcwNCwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsCisgICAgLTEsICAxMTAyLCAgMTEwMywgICAgLTEsICAxMTA1LCAgICAtMSwgICAgLTEsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA5MywgICA5ODQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDMwNSwgICAgLTEsICAxMTI1LCAgICAtMSwgICAzMDksICAgIC0xLCAgIDMxMSwgICAzMTIsCisgICAzMTMsICAgIDkzLCAgMTAwMywgICAgLTEsICAgNDU2LCAgIDMxOCwgICAgLTEsICAgNDU5LCAgICAtMSwgICAzMjIsCisgICAgLTEsICAgNDYzLCAgIDQ2NCwgICA0NjUsICAgNDY2LCAgIDQ2NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwOTksICAgNDc2LCAgICAtMSwgICAzMzksICAgIC0xLCAgIDc3NCwgICAgLTEsCisgICA3NzYsICAgNDgzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQ4NywgICAgLTEsICAxMDM4LCAgICAtMSwgICAgLTEsCisgICAzNTMsICAgNzg3LCAgICAgMywgICAgIDQsICAgICA1LCAgIDc5MSwgICA3OTIsICAgICA4LCAgICAtMSwgICAgLTEsCisgICAzNjMsICAgIC0xLCAgICAtMSwgICAzNjYsICAgIC0xLCAgMTA1NiwgICAgLTEsICAgIC0xLCAgIDM3MSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDM3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNTE5LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICA4MTksICAgODIwLCAgICAtMSwgICAgLTEsICAxMjA4LCAgMTIwOSwgIDEyMTAsCisgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzk3LCAgIDUzNywgICAzOTksICAgIC0xLCAgIDQwMSwgICA0MDIsCisgICA0MDMsICAgIC0xLCAgIDU0NCwgICAgNTQsICAgNDA3LCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICA0MTIsCisgICAgLTEsICAgIC0xLCAgIDQxNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQyOCwgICA0MjksICAgIC0xLCAgICAtMSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA5MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAgOCwgICAgLTEsCisgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAtMSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgMTMsCisgICAgLTEsICAgNDY0LCAgIDQ2NSwgICA0NjYsICAgNDY3LCAgICAtMSwgIDEyODcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQxLCAgICAzNiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA2MzIsICAgIDQ1LCAgICAtMSwgICAgNDcsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAxMzI4LCAgMTMyOSwgIDEzMzAsCisgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgNTIwLCAgICAtMSwgICA1MjIsCisgICAgODAsICAxMjg3LCAgMTM0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIC0xLCAgICA4OCwgICAgLTEsCisgICAgLTEsICAgNTM0LCAgIDUzNSwgICAgOTMsICAgNTM3LCAgICAtMSwgICAgOTAsICAxMzU4LCAgICAtMSwgICAgOTMsCisgICAgOTQsICAgNTQ0LCAgICAtMSwgICAgOTcsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgIDgsICAgIC0xLCAgICAtMSwgICA1NTYsICAgMTIzLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgOTk3LCAgIDk5OCwgICA5OTksICAxMDAwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwMDUsCisgICAgMjgsICAgIC0xLCAgICAzMCwgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICA1ODYsICAxMDIwLCAgMTAyMSwgICAgLTEsICAgIDQ1LCAgIDU5MSwgICA1OTIsCisgICA1OTMsICAgNTk0LCAgICAtMSwgICA1OTYsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgIC0xLCAgICAgNCwgICAgIDUsICAgICA2LCAgIDYwOCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgIDgsICAgMTgwLCAgIDc1NCwgICAgMTEsICAgIC0xLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAxODgsCisgICAxODksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDYyOCwgICAgLTEsICAgIC0xLCAgICAzMCwgICA2MzIsCisgICAgMjgsICAgIC0xLCAgICAzMCwgICAgMzEsICAgIC0xLCAgICAzNywgICA2MzksICAgNjQwLCAgICAzNiwgICA2NDIsCisgICAgLTEsICAgNzgzLCAgICAtMSwgICAgNDUsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDQ1LCAgIDIxNywgICAgIDgsCisgICAgLTEsICAgNzkzLCAgICA1NCwgICA2NTYsICAgIDU2LCAgICA1NywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgNjY0LCAgICAtMSwgICAgLTEsICAgNjY3LCAgICAtMSwgIDExMDIsICAxMTAzLCAgICAtMSwgIDExMDUsCisgICA2NzMsICAgNjc0LCAgIDY3NSwgICAgLTEsICAgODE2LCAgICAtMSwgICA4MTgsICAgIC0xLCAgICAtMSwgICA4MjEsCisgICAgLTEsICAgNjg0LCAgICA0MSwgICA2ODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA2OTMsICAgNjk0LCAgIDY5NSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsCisgICAgLTEsICAgNzA0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDcwLCAgIDg1NCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgIDgsICAgIDgwLCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMywgICA4NjgsICAgIC0xLCAgICAtMSwgICAgODgsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICA4NzUsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMjgsICAgIC0xLCAgICAzMCwgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgLTEsCisgICAgLTEsICAgNzU0LCAgICAtMSwgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDcsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgNzc0LCAgICAgNCwgICA3NzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA3ODMsICAgIC0xLCAgICA3MCwgICAgLTEsICAgNzg3LCAgICAtMSwgICA3ODksICAgIC0xLCAgIDc5MSwgICA3OTIsCisgICA3OTMsICAgIC0xLCAgICA4MCwgICAgMjUsICAgIC0xLCAgIDc5OCwgICAgLTEsICAgIC0xLCAgICAzMCwgICAgMzEsCisgICAgODgsICAgIDMzLCAgICA5MCwgICAgMzUsICAgIC0xLCAgICA5MywgICAgOTQsICAgIC0xLCAgICA0MCwgICAgOTcsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICA4MTYsICAgIC0xLCAgIDgxOCwgICA4MTksICAgODIwLCAgIDgyMSwgICAgNTEsCisgICAgLTEsICAgIDUzLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNDA2LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgNDEzLCAgIDQxNCwgICAgLTEsICAgIC0xLCAgIDQxNywgICAgLTEsCisgICAgLTEsICAgODU0LCAgIDQyMSwgICAgLTEsICAgIC0xLCAgICA4NywgICAxNjQsICAgMTY1LCAgIDE2NiwgIDEwMDEsCisgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDg2OCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICA4ODIsCisgIDEwMjIsICAgODg0LCAgICAtMSwgICAxMTUsICAgIC0xLCAgIDExNywgICAxMTgsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAxMjIsICAgODk0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMjgsICAgIC0xLCAgIDEzMCwgICAgODAsCisgICAxMzIsICAgIC0xLCAgICAtMSwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgNDEsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA5MywgICAgLTEsICAgOTE3LCAgICAtMSwgICAgLTEsICAgMTQ5LCAgICAtMSwgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICA5MjYsICAgIC0xLCAgIDkyOCwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDE2NCwgICAxNjUsICAgMTY2LCAgICA3MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDcsICAgICA4LCAgIDE3NCwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODgsICAgIC0xLCAgICAtMSwgICA5NTksICAgOTYwLCAgICA5MywgICA5NjIsCisgICAgLTEsICAgMTkzLCAgICAgNCwgICAgIDUsICAgIDMxLCAgICAtMSwgICAgIDgsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICAgNDcsICAgIC0xLCAgICAtMSwgIDExMjUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIC0xLCAgIDIyNCwgICAgLTEsICAgOTk3LCAgIDk5OCwgICA5OTksICAxMDAwLCAgMTAwMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgMTAwNSwgICAgNzAsICAgIC0xLCAgICA0NywgIDEwMDksICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgODAsICAgIDU2LCAgICA1NywgICAgLTEsICAxMDIwLCAgMTAyMSwgIDEwMjIsCisgICAgLTEsICAgIDg4LCAgICAtMSwgICA1OTIsICAgIC0xLCAgIDU5NCwgICAgOTMsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwMzksICAgIC0xLCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA5MCwgICAgLTEsCisgIDEwNTMsICAgIDkzLCAgICA5NCwgICAgLTEsICAgIC0xLCAgMTA1OCwgICAgLTEsICAxMDYwLCAgICAtMSwgICA2MjgsCisgICAyOTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAgOCwgICAgLTEsICAgMzA5LCAgICAtMSwgICAgLTEsCisgICA2NDksICAgIC0xLCAgICAtMSwgICA2NTIsICAgIC0xLCAgIDMxNywgICAgLTEsICAgIC0xLCAgICAtMSwgICAzOTcsCisgICAzMjIsICAgMzk5LCAgICAtMSwgICA0MDEsICAgNDAyLCAgIDQwMywgICAgLTEsICAgIC0xLCAgICAtMSwgIDExMDIsCisgIDExMDMsICAgIC0xLCAgMTEwNSwgICAgLTEsICAgNDEyLCAgIDY3NCwgICAgLTEsICAgMzM5LCAgICA0MSwgICAgLTEsCisgICAgLTEsICAgNjgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzNDgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDU0LCAgMTEyNSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMzYzLCAgICAtMSwgICAgLTEsICAgMzY2LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAzNzEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAzNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTMsCisgICAgOTMsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgIDM5NywgICAgIDgsICAgMzk5LCAgICAtMSwgICA0MDEsCisgICA0MDIsICAgNDAzLCAgICAtMSwgICAgLTEsICAgIDI4LCAgIDQwNywgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsCisgICA0MTIsICAgIC0xLCAgICAzNiwgICA0MTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgMTMzMCwgICAgLTEsCisgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNDI5LCAgICAtMSwgICAgNDEsCisgICAgNTQsICAxMzQzLCAgICA1NiwgICAgNTcsICAgIC0xLCAgMTIwOCwgIDEyMDksICAxMjEwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgNzAsICAgIC0xLCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgNDU2LCAgICAtMSwgICAgODAsICAgNDU5LCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg4LCAgICAtMSwgICAgOTAsICAgIC0xLCAgICA4MCwgICAgOTMsCisgICAgOTQsICAgIC0xLCAgIDQ3NCwgICA0NzUsICAgNDc2LCAgICAtMSwgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQ4NywgICAgIDQsICAgIDQxLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICA2MiwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAzMCwgICAgMzEsICAxMjg3LCAgICAzMywgICAgNzAsICAgIDM1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIC0xLCAgICAtMSwgICA1MzEsCisgICAgIDMsICAgICA0LCAgICAgNSwgICAgNTEsICAgIDg4LCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsCisgICAgLTEsICAgIC0xLCAgIDU0NCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDg4NywgICA4ODgsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTMyOCwgIDEzMjksICAxMzMwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNjM5LCAgIDY0MCwgICAgLTEsICAgNjQyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MSwgICAgODcsCisgIDEzNDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgOTE2LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgMTM1OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICA1OTEsCisgICA1OTIsICAgNTkzLCAgIDU5NCwgICAgLTEsICAgIC0xLCAgIDY3MywgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAgNCwgICAgIDUsICAgMTIyLCAgICAgNywgICAgIDgsICAgIDgwLCAgICAgNCwgICAgIDUsCisgICAxMjgsICAgIDEzLCAgICAgOCwgICAgLTEsICAgMTMyLCAgICA4OCwgICAgLTEsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgOTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2MjgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA2MzIsICAgMTQ5LCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgNjM5LCAgIDY0MCwgICAgLTEsCisgICA2NDIsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0NywgICAxNjQsICAgMTY1LCAgIDE2NiwgICAgLTEsCisgICAgLTEsICAgIDQ3LCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDY2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgNjczLCAgIDY3NCwgICA2NzUsICAgIDcwLCAgIDE5MywgICAgLTEsICAgIC0xLCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA5MCwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICA5NCwgICAgLTEsICAgIDkwLCAgICAtMSwgICA2OTgsICAgIDkzLCAgICA5NCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyMjQsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgMTA1MSwgIDEwNTIsICAgIC0xLCAgMTA1NCwgIDEwNTUsICAgIC0xLCAgMTA1NywgICAgNDEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDcsICAgICA4LCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjIsICAgODE5LCAgIDgyMCwgICA4MjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgMzYsCisgICAgMzcsICAgMzExLCAgIDMxMiwgICAzMTMsICAgIDQxLCAgICAtMSwgICAgODgsICAgIC0xLCAgICA0NSwgICAgNDYsCisgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA4NTQsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIC0xLCAgICAtMSwgICAgNjAsICAgIC0xLCAgICA2MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICA3OTEsCisgICA3OTIsICAgNzkzLCAgICAtMSwgICAgNzAsICAgIC0xLCAgIDc5NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAzMTgsICAxMTQwLCAgMTE0MSwgICAgODAsICAgMzIyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg4LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgOTMsICAgODE5LCAgIDgyMCwgICA4MjEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDUxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDM2MywgICAgLTEsICAgIC0xLCAgIDM2NiwgICAgLTEsCisgICAgLTEsICAgIDQxLCAgIDg1NCwgICAzNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzc1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsCisgIDEyMDksICAxMjEwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzOTcsCisgICAgNzAsICAgMzk5LCAgICAtMSwgICA0MDEsICAgNDAyLCAgIDQwMywgICAgLTEsICAgIC0xLCAgICAtMSwgICA0MDcsCisgICAgODAsICAxMjMwLCAgMTIzMSwgIDEyMzIsICAgNDEyLCAgIDEyMiwgICAgLTEsICAgNDE1LCAgICA4OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsICAgOTA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEzNSwgICAxMzYsCisgICAxMzcsICAgNDI5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDkxNywgICAgLTEsICAgIC0xLCAgICAtMSwgICA5OTcsCisgICA5OTgsICAgOTk5LCAgMTAwMCwgIDEwMDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAxMDA1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTY0LCAgIDE2NSwgICAxNjYsCisgICAgLTEsICAgIC0xLCAgMTAyMCwgIDEwMjEsICAxMDIyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgIDEyOTgsCisgIDEyOTksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxOTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDk4NCwgICAgLTEsICAgNTM0LCAgIDUzNSwgICAgLTEsICAgNTM3LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsICAgNTQ0LCAgIDk5NywgICA5OTgsICAgOTk5LCAgMTAwMCwgIDEwMDEsCisgICAgLTEsICAxMDAzLCAgICAtMSwgIDEwMDUsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNTMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTAyMCwgIDEwMjEsCisgIDEwMjIsICAgIC0xLCAgICA3MCwgICAgLTEsICAxMTAyLCAgMTEwMywgICAgLTEsICAxMTA1LCAgICAtMSwgICAgLTEsCisgICAgNzcsICAgIC0xLCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNjMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgODgsICAgNTkxLCAgICAtMSwgICA1OTMsICAgNTk0LCAgICA5MywgICA1OTYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAxMDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwNTgsICAgIC0xLCAgMTA2MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTQwNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICA1OTEsICAgNTkyLCAgIDU5MywgICA1OTQsICAgIC0xLCAgIDYyOCwgICAgLTEsCisgICAgLTEsICAgIDUxLCAgICAtMSwgICAgLTEsICAgMzExLCAgIDMxMiwgICAzMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA2MDgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMyMiwgICAxNDMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgIDExMDIsICAxMTAzLCAgICAtMSwgIDExMDUsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICA3OCwgICAgLTEsCisgICA2MjgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNjMyLCAgIDE2MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNjM5LCAgIDY0MCwgICAgLTEsICAgNjQyLCAgICAtMSwgICAgLTEsICAgIDk3LCAgIDE3NSwgICAgOTksCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDcsICAgICA4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTMsICAgIC0xLCAgICAtMSwgICA2NjcsCisgICAgLTEsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgNzA0LCAgIDY3MywgICA2NzQsICAgNjc1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAzOTcsICAgIC0xLCAgIDM5OSwgICAgLTEsICAgNDAxLCAgIDQwMiwgICA0MDMsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICA0MDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQxMiwgICAgLTEsICAgIDU0LCAgIDQxNSwgICAgNTYsCisgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTY0LCAgIDE2NSwgICAxNjYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTc0LCAgICAtMSwgIDEyMDgsICAxMjA5LCAgMTIxMCwgIDEyODcsCisgICAgLTEsICAgIC0xLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDEzLCAgICAtMSwgICAxOTMsICAgNzc0LCAgICAtMSwgICA3NzYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgNzg3LCAgICAzMCwgICAgLTEsCisgICAgLTEsICAgNzkxLCAgIDc5MiwgICA3OTMsICAgIDM2LCAgIDIxNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgIDEzMjgsICAxMzI5LCAgMTMzMCwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjI3LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICA4MTksCisgICA4MjAsICAgODIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA3OTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTI4NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgIC0xLCAgIDUyMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgODE5LCAgIDgyMCwgICA4MjEsICAgODU0LCAgICAtMSwgICAgLTEsICAgNTM0LCAgIDUzNSwgICAgLTEsCisgICA1MzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgLTEsICAgNTQ0LCAgICAtMSwgICAgMzAsCisgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM1LCAgICAtMSwgIDEzMjgsICAxMzI5LCAgMTMzMCwgICAgNDAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA4NTQsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzE3LCAgIDMxOCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDMyMiwgICAgLTEsICAgIC0xLCAgICAtMSwgIDEzNTgsICAgIC0xLCAgIDQwNSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICA0MTAsICAgNTkxLCAgICAtMSwgICA1OTMsICAgNTk0LCAgICAtMSwgICA1OTYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDQzNSwgICAgLTEsCisgICA0MzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA5MTcsCisgICAgLTEsICAgNjI4LCAgIDQ0OSwgICA0NTAsICAgIC0xLCAgIDQ1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDYzOSwgICA2NDAsICAgIC0xLCAgIDY0MiwgICAgLTEsICAgMTI4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMTMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzk3LCAgICAtMSwgICAzOTksCisgICAgLTEsICAgNDAxLCAgIDQwMiwgICA0MDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNDA3LCAgIDE0OSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDQxMiwgICAgLTEsICAgIC0xLCAgIDQxNSwgICA2NzMsICAgOTk3LCAgIDk5OCwgICA5OTksCisgIDEwMDAsICAxMDAxLCAgICAtMSwgICAxNjQsICAgMTY1LCAgMTAwNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2OTMsICAgNjk0LCAgIDY5NSwgICAgLTEsCisgIDEwMjAsICAxMDIxLCAgMTAyMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNzA0LCAgICAtMSwgICA5OTcsCisgICA5OTgsICAgOTk5LCAgMTAwMCwgIDEwMDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAxMDA1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAxMDA5LCAgICAtMSwgICA1NDAsICAgNTQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDU0NSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgMTAyMCwgIDEwMjEsICAxMDIyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAyMjQsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgICAxLCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgMTA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTMsCisgIDEwNTgsICAgIC0xLCAgMTA2MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNzc0LCAgICAtMSwgICA3NzYsCisgICAgLTEsICAgIC0xLCAgMTEwMiwgIDExMDMsICAgIDI4LCAgMTEwNSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICA3ODcsICAgIC0xLCAgICAzNiwgICAgMzcsICAgNzkxLCAgIDc5MiwgICA3OTMsICAgIDQxLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNTQ3LCAgIDU0OCwgICAgLTEsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAxMTAyLCAgMTEwMywgICAgNjAsICAxMTA1LCAgICA2MiwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDgxOSwgICA4MjAsICAgODIxLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgIDQsCisgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMywgICAgOTMsCisgICAgLTEsICAgNTkxLCAgICAtMSwgICA1OTMsICAgNTk0LCAgICAtMSwgICAgLTEsICAgODU0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAzMCwgICAxMTAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA2ODcsICAgIDM2LCAgIDY4OSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNDUsICAgIC0xLCAgIDM2MywgICAgLTEsICAgIC0xLCAgIDM2NiwgICAgLTEsICAgIC0xLCAgIDYyOCwgICAgNTQsCisgICAzNzEsICAgIDU2LCAgICA1NywgICAgLTEsICAgMzc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2MzksCisgICA2NDAsICAgIC0xLCAgIDY0MiwgICAgLTEsICAgIC0xLCAgICAgMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzOTcsICAgIDEzLCAgIDM5OSwgICAgLTEsCisgIDEyMDgsICAxMjA5LCAgMTIxMCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNDEyLCAgICAyOCwgICA2NzMsICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMzYsICAgIDM3LCAgICAtMSwgICA3NjAsICAgNzYxLCAgICA0MSwgICA3NjMsICAgIC0xLCAgIDQyOSwgICAgNDUsCisgICAgNDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgIDk1OSwgICA5NjAsICAgIDYwLCAgIDk2MiwgICAgNjIsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNzg4LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgLTEsICAgIDgwLCAgICAtMSwgICAgLTEsICAgIDEzLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDkzLCAgICAtMSwgIDEyODcsCisgICA5OTcsICAgOTk4LCAgIDk5OSwgIDEwMDAsICAxMDAxLCAgICAzMSwgICA4MjMsICAgIC0xLCAgMTAwNSwgICAgLTEsCisgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTEwLCAgICA0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIDQ3LCAgICAtMSwgIDEwMjAsICAxMDIxLCAgMTAyMiwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgIDEzMjgsICAxMzI5LCAgMTMzMCwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICAtMSwgIDEwNTMsICAgNzk3LCAgIDc5OCwgICA3OTksCisgICAgLTEsICAgIC0xLCAgICA4OCwgICAgLTEsICAgIDkwLCAgICAtMSwgICA4ODMsICAgIDkzLCAgICA5NCwgICAgLTEsCisgIDEzNTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA4OTMsICAgIC0xLCAgICAtMSwgICA4MTksCisgICA4MjAsICAgODIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTEwMiwgIDExMDMsICAgIC0xLCAgMTEwNSwgICAgLTEsCisgICAgLTEsICAgNTkyLCAgICAtMSwgICAgLTEsICAgODU0LCAgICAyOCwgICAgMTMsICAgIDMwLCAgICAzMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICA0MSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA0NSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIDYwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgNjMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA5NzMsICAgIDcwLCAgIDYzOSwgICA2NDAsCisgICAgLTEsICAgNjQyLCAgICAtMSwgICAgLTEsICAgIDYxLCAgICAtMSwgICA5MDYsICAgIDgwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgOTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2NjcsICAxMDA0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDY3MywgICA2NzQsICAgNjc1LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsCisgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCisgICAgLTEsICAxMjA4LCAgICAtMSwgIDEyMTAsICAgIC0xLCAgICAtMSwgICAxMTMsICAgMTE0LCAgIDExNSwgICAgLTEsCisgICAxMTcsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTI0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMTI4LCAgICAtMSwgICAxMzAsICAgMTMxLCAgIDEzMiwgICAgLTEsICAgIC0xLCAgIDEzNSwgICAxMzYsCisgICAxMzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgOTg0LCAgICAtMSwgIDEwNjMsICAxMDY0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgOTk3LCAgIDk5OCwgICA5OTksCisgIDEwMDAsICAxMDAxLCAgICAtMSwgIDEwMDMsICAgIC0xLCAgMTAwNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwOTYsCisgIDEwMjAsICAxMDIxLCAgMTAyMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgIDEyODcsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsCisgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgLTEsCisgICAyMDcsICAgIC0xLCAgICAtMSwgIDEwNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTEzNSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgMTEzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjI0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAxMzI4LCAgMTMyOSwgIDEzMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDgxOSwgICA4MjAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAxMTYxLCAgMTE2MiwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsCisgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCisgICAgLTEsICAxMzU4LCAgMTEwMiwgIDExMDMsICAgIC0xLCAgMTEwNSwgICAyNjMsICAgIC0xLCAgICAtMSwgICAgIDEsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgNDIsICAgIDQzLCAgIDMwOSwgICAgNDUsICAgMzExLCAgIDMxMiwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAzMjMsICAgIC0xLCAgICAtMSwgICAgNjEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICA5MTcsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDMzOSwgICAgLTEsICAgMzQxLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgMzQ4LCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgIDM1OSwgICAgLTEsICAgIC0xLCAgICA5NywgICAzNjMsICAgIC0xLCAgMTIwOCwgICAzNjYsCisgIDEyMTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzcxLCAgICAtMSwgICAgLTEsICAgMTA5LCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgIDgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMjgsICAgIC0xLCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICA5OTcsICAgOTk4LCAgICAzNiwgICAgMzcsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsICAxMDA1LCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgIC0xLCAgICA2MCwgICAgMTEsICAgIDYyLCAgICAtMSwgICAgLTEsICAxMjg3LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgNDUxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgODgsICAgIC0xLCAgMTA1MywgICAgLTEsICAgIC0xLCAgICA5MywgICAgLTEsICAxMDU4LCAgICAtMSwgIDEwNjAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgMTMyOCwgIDEzMjksCisgIDEzMzAsICAgIC0xLCAgIDExMCwgICAgLTEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsCisgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgIC0xLCAgMTM1OCwgICAgLTEsCisgICAgLTEsICAxMTAyLCAgMTEwMywgICAgLTEsICAxMTA1LCAgIDUyMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNTMxLCAgIDUzMiwgICAgLTEsICAgNTM0LCAgIDUzNSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDcsICAgICA4LCAgICAtMSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI0LCAgICAtMSwgICAgMjYsCisgICAgMjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICA1ODYsCisgICAgNDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDU5NSwgICAgNTYsCisgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIC0xLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsCisgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAgIDg0LCAgMTIwOSwgICAgODYsCisgICAgODcsICAgIDg4LCAgICAtMSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LCAgICA5NSwgICAgMzEsCisgICAgOTcsICAgIDk4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgIC0xLCAgIDExMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2NTYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgNjY0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCisgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgODIsICAgIDgzLCAgICA4NCwgICAgLTEsICAgIC0xLCAgICAtMSwgICA2OTMsICAgNjk0LCAgIDY5NSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsICAgNzA0LCAgICAgMywgICAgIDQsCisgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgLTEsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgNTgsICAgIC0xLCAgICA2MCwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgNzc0LCAgICAtMSwgICA3NzYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICA3ODcsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA5MywgICAgLTEsCisgICAgOTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExMCwgICAxMTEsICAgICAxLCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsCisgICAgMTQsICAgIC0xLCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAtMSwgICAgNjAsICAgIDYxLCAgICAtMSwgICAgLTEsCisgICA4NzcsICAgODc4LCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsCisgICA5MDcsICAgIDk1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsCisgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgMTExLCAgICA3NiwgICAgNzcsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgIC0xLCAgICAtMSwgICAgIDEsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDk1OSwgICA5NjAsICAgIC0xLCAgIDk2MiwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgNTgsICAgIC0xLCAgICAtMSwgICAgNjEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICA5MCwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICA5NCwgICAgLTEsICAgIC0xLCAgICA5NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAxMDM4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgIDEwNTYsCisgICAgIDEsICAxMDU4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgMzEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OSwgICAgNTAsCisgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAtMSwgICAgLTEsCisgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgOTAsCisgICAgLTEsICAgIC0xLCAgICA5MywgICAgOTQsICAgIC0xLCAgICAgMSwgICAgOTcsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsCisgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsCisgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICA1OCwgICAgLTEsICAgIDYwLCAgICA2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsICAgIDkzLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgNTgsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA5MywgICAgOTQsCisgICAgIDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgIDExMCwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgMjAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsCisgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAtMSwgICAgLTEsCisgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA5MywgICAgIDEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgIDcsCisgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTAsCisgICAxMTEsICAgIC0xLCAgICAyMCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsCisgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgNTgsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsCisgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsCisgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICA5MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDExMCwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIDU4LCAgICAtMSwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsCisgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsICAgIDk0LCAgICAgMSwgICAgLTEsCisgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsCisgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAtMSwgICAgMzIsCisgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCisgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsCisgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgLTEsICAgIC0xLCAgICA2MSwgICAgIDEsCisgICAgLTEsICAgIC0xLCAgICAgNCwgICAgIDUsICAgIDY3LCAgICAgNywgICAgIDgsICAgIDcwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgLTEsCisgICAgOTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAxMDIsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0NywgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIDU5LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCisgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgODIsICAgIDgzLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgOTEsCisgICAgLTEsICAgICAxLCAgICA5NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksCisgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksCisgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksCisgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgLTEsCisgICAgLTEsICAgIDYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsCisgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksCisgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAgMSwgICAgOTMsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsCisgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsCisgICAgMjksICAgIDMwLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsCisgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgLTEsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsCisgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsCisgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsICAgIDkzLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgIDcsCisgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsCisgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIDYyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsCisgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsCisgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICA5MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIDU4LCAgICAtMSwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsCisgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMSwgICAgOTMsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgLTEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsCisgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIDYwLCAgICA2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsICAgIDkzLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICA5MywgICAgIDMsCisgICAgIDQsICAgICA1LCAgICAtMSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA5LCAgICAtMSwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsCisgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMSwgICAgOTMsCisgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsCisgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAtMSwgICAgMzIsCisgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCisgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsCisgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2MSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsCisgICAgOTMsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsCisgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsCisgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIDkzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA5MywgICAgNjgsCisgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAxMTEsICAgMTEyLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgLTEsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgNTgsICAgIC0xLCAgICA2MCwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA5MywgICAgLTEsCisgICAgOTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExMCwgICAxMTEsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgLTEsCisgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsCisgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICA1OCwgICAgLTEsICAgIDYwLCAgICA2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDkzLCAgICAtMSwgICAgOTUsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIDE0LCAgIDExMSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksCisgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksCisgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgLTEsCisgICAgNjAsICAgIDYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsCisgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksCisgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsICAgIC0xLCAgICA5NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsCisgICAgMTQsICAgMTExLCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgNjAsICAgIDYxLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsCisgICAgLTEsICAgIDk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgMzEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OSwgICAgNTAsCisgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgOTAsCisgICAgLTEsICAgIC0xLCAgICA5MywgICAgOTQsICAgIC0xLCAgICAtMSwgICAgOTcsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsCisgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsCisgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsICAgIDkwLCAgICAtMSwgICAgLTEsICAgIDkzLCAgICA5NCwgICAgLTEsCisgICAgLTEsICAgIDk3LCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsCisgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICA5MywgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsCisgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgOTAsICAgIC0xLCAgICAtMSwgICAgOTMsCisgICAgOTQsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsCisgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsCisgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICA5MCwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICA5NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksCisgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksCisgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksCisgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsCisgICAgNjAsICAgIDYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsCisgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OCwgICAgNzksCisgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsCisgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsCisgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsCisgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsCisgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDkzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsCisgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsCisgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIDkzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICA5MywgICAgIDcsCisgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsCisgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgNTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsCisgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsCisgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICA5MywgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsCisgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA5MywgICAgOTQsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAgNywgICAgIDgsCisgICAgIDksICAgIDEwLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsCisgICAgMjksICAgIDMwLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsCisgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsCisgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsCisgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDkzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsCisgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgIDExMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsCisgICAgMzIsICAgIC0xLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgNDIsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgNTIsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgIDUsICAgIDkzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsCisgICAgMzUsICAgIDM2LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsCisgICAgNDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg2LCAgICA4NywgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICA5MywgICAgIDcsCisgICAgIDgsICAgICA5LCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMjgsICAgIDI5LCAgICAzMCwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsCisgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsCisgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNzgsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsCisgICAgODgsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICA5MywgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgLTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgNDEsICAgIDQyLCAgICA0MywgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsCisgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgIDMsCisgICAgIDQsICAgICA1LCAgICA5MywgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAxMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsCisgICAgMzQsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4NiwgICAgODcsICAgIDg4LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgOTMsCisgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgLTEsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNjcsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDc4LCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsCisgICAgODcsICAgIDg4LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgOTMsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgMTAsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyOCwgICAgMjksCisgICAgMzAsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIC0xLCAgICAzOCwgICAgMzksCisgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDksCisgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICAtMSwgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgIDEsCisgICAgNzAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgIC0xLCAgICA3OCwgICAgNzksCisgICAgODAsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgOTMsICAgIDI2LCAgICAyNywgICAgMjgsICAgIC0xLCAgICAzMCwgICAgMzEsCisgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsCisgICAgLTEsICAgMTExLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAtMSwgICAgNDgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICA2MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgIDEsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgIC0xLCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDk5LCAgICAzMCwgICAgMzEsCisgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsCisgICAgLTEsICAgIC0xLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAtMSwgICAgNDgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIC0xLCAgICA2MCwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgIDEsCisgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgIC0xLCAgICA4MCwgICAgLTEsCisgICAgLTEsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDk5LCAgICAzMCwgICAgMzEsCisgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDcsICAgICA4LCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgMTMsICAgIC0xLCAgICA2MCwgICAgLTEsCisgICAgNjIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgMzYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgODgsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgIC0xLCAgICAtMSwgICAgMTEsCisgICAgLTEsICAgIDEzLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgMzEsCisgICAgLTEsICAgIDg4LCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgOTMsICAgIC0xLCAgICAtMSwgICAgNDEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDcsICAgICA4LCAgICA1NCwgICAgLTEsICAgIDU2LCAgICA1NywgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgMzYsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgODgsICAgIC0xLCAgICA0NSwgICAgLTEsCisgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAtMSwgICAgNTYsCisgICAgNTcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2MiwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEzLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIDg4LCAgICAyOCwgICAgLTEsICAgIDMwLCAgICAzMSwgICAgOTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICAxMywgICAgLTEsICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsCisgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICAzNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgNDEsICAgIC0xLCAgICA4OCwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIDkzLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIC0xLCAgICA1NiwgICAgNTcsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgIDYsICAgICA3LCAgICAgOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEzLCAgICAtMSwgICAgNzAsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsCisgICAgLTEsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDMwLCAgICAzMSwgICAgLTEsICAgIDg4LCAgICAtMSwgICAgLTEsCisgICAgMzYsICAgIC0xLCAgICA5MywgICAgLTEsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgLTEsCisgICAgNTYsICAgIDU3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA4OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDkzLCAgICA2MywgICAgNjQsCisgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsCisgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCisgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsCisgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsCisgICAgODMsICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTEyLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgLTEsICAgIC0xLCAgICA1OSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsCisgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAgIDg0LCAgICA2MiwgICAgNjMsCisgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsCisgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsCisgICAgODQsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsCisgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsCisgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NAorfTsKKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisjbGluZSAzICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uLnNpbXBsZSIKKworLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyBjb3BpZWQgYnkgQmlzb24gaW50byBhCisgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICAgaW4gdmVyc2lvbiAxLjI0IG9mIEJpc29uLiAgKi8KKworI2lmbmRlZiBhbGxvY2EKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorI2Vsc2UgLyogbm90IEdOVSBDLiAgKi8KKyNpZiAoIWRlZmluZWQgKF9fU1REQ19fKSAmJiBkZWZpbmVkIChzcGFyYykpIHx8IGRlZmluZWQgKF9fc3BhcmNfXykgfHwgZGVmaW5lZCAoX19zcGFyYykgfHwgZGVmaW5lZCAoX19zZ2kpCisjaW5jbHVkZSA8YWxsb2NhLmg+CisjZWxzZSAvKiBub3Qgc3BhcmMgKi8KKyNpZiBkZWZpbmVkIChNU0RPUykgJiYgIWRlZmluZWQgKF9fVFVSQk9DX18pCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxzZSAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNpZiBkZWZpbmVkKF9BSVgpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisgI3ByYWdtYSBhbGxvY2EKKyNlbHNlIC8qIG5vdCBNU0RPUywgX19UVVJCT0NfXywgb3IgX0FJWCAqLworI2lmZGVmIF9faHB1eAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK3ZvaWQgKmFsbG9jYSAodW5zaWduZWQgaW50KTsKK307CisjZWxzZSAvKiBub3QgX19jcGx1c3BsdXMgKi8KK3ZvaWQgKmFsbG9jYSAoKTsKKyNlbmRpZiAvKiBub3QgX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX2hwdXggKi8KKyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2VuZGlmIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLworI2VuZGlmIC8qIG5vdCBzcGFyYy4gICovCisjZW5kaWYgLyogbm90IEdOVSBDLiAgKi8KKyNlbmRpZiAvKiBhbGxvY2Egbm90IGRlZmluZWQuICAqLworCisvKiBUaGlzIGlzIHRoZSBwYXJzZXIgY29kZSB0aGF0IGlzIHdyaXR0ZW4gaW50byBlYWNoIGJpc29uIHBhcnNlcgorICB3aGVuIHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIuCisgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorICB1c2VkIHdoZW4gJXNlbWFudGljX3BhcnNlciBpcyBzcGVjaWZpZWQuICAqLworCisvKiBOb3RlOiB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGRvbGxhciBzaWduIGluIHRoaXMgZmlsZS4KKyAgIEl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBsaXN0IG9mIGFjdGlvbnMsIGVhY2ggYWN0aW9uCisgICBhcyBvbmUgY2FzZSBvZiB0aGUgc3dpdGNoLiAgKi8KKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVmaW5lIFlZQUNDRVBUCXJldHVybigwKQorI2RlZmluZSBZWUFCT1JUIAlyZXR1cm4oMSkKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycmxhYjEKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLgorICAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkgdG8gZWFzZSB0aGUKKyAgIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisjZGVmaW5lIFlZQkFDS1VQKHRva2VuLCB2YWx1ZSkgXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7IHl5Y2hhciA9ICh0b2tlbiksIHl5bHZhbCA9ICh2YWx1ZSk7CQkJXAorICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsgeXllcnJvciAoInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTsgWVlFUlJPUjsgfQlcCit3aGlsZSAoMCkKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKworI2lmbmRlZiBZWVBVUkUKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCkKKyNlbmRpZgorCisjaWZkZWYgWVlQVVJFCisjaWZkZWYgWVlMU1BfTkVFREVECisjaWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MpCisjZW5kaWYKKyNlbHNlIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCkKKyNlbmRpZgorI2VuZGlmIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNlbmRpZgorCisvKiBJZiBub25yZWVudHJhbnQsIGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVyZSAqLworCisjaWZuZGVmIFlZUFVSRQorCitpbnQJeXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFkIHN5bWJvbAkJKi8KK1lZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAorWVlMVFlQRSB5eWxsb2M7CQkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisjZW5kaWYKKworaW50IHl5bmVycnM7CQkJLyogIG51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyICAgICAgICovCisjZW5kaWYgIC8qIG5vdCBZWVBVUkUgKi8KKworI2lmIFlZREVCVUcgIT0gMAoraW50IHl5ZGVidWc7CQkJLyogIG5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UJKi8KKy8qIFNpbmNlIHRoaXMgaXMgdW5pbml0aWFsaXplZCwgaXQgZG9lcyBub3Qgc3RvcCBtdWx0aXBsZSBwYXJzZXJzCisgICBmcm9tIGNvZXhpc3RpbmcuICAqLworI2VuZGlmCisKKy8qICBZWUlOSVRERVBUSCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzCSovCisKKyNpZm5kZWYJWVlJTklUREVQVEgKKyNkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogIFlZTUFYREVQVEggaXMgdGhlIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvCisgICAgKGVmZmVjdGl2ZSBvbmx5IGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLiAgKi8KKworI2lmIFlZTUFYREVQVEggPT0gMAorI3VuZGVmIFlZTUFYREVQVEgKKyNlbmRpZgorCisjaWZuZGVmIFlZTUFYREVQVEgKKyNkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKy8qIFByZXZlbnQgd2FybmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworaW50IHl5cGFyc2UgKHZvaWQpOworI2VuZGlmCisMCisjaWYgX19HTlVDX18gPiAxCQkvKiBHTlUgQyBhbmQgR05VIEMrKyBkZWZpbmUgdGhpcy4gICovCisjZGVmaW5lIF9feXlfbWVtY3B5KEZST00sVE8sQ09VTlQpCV9fYnVpbHRpbl9tZW1jcHkoVE8sRlJPTSxDT1VOVCkKKyNlbHNlCQkJCS8qIG5vdCBHTlUgQyBvciBDKysgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5X21lbWNweSAoZnJvbSwgdG8sIGNvdW50KQorICAgICBjaGFyICpmcm9tOworICAgICBjaGFyICp0bzsKKyAgICAgaW50IGNvdW50OworeworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBpbnQgaSA9IGNvdW50OworCisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZWxzZSAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChjaGFyICpmcm9tLCBjaGFyICp0bywgaW50IGNvdW50KQoreworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBpbnQgaSA9IGNvdW50OworCisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZW5kaWYKKyNlbmRpZgorDAorI2xpbmUgMTkyICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uLnNpbXBsZSIKKworLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorICAgaW50byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZlIHR5cGUgdm9pZCAqLgorICAgSXQgc2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4KKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisgICB0byB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZS4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BBUkFNOworI2Vsc2UKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKyNlbmRpZgorCitpbnQKK3l5cGFyc2UoWVlQQVJTRV9QQVJBTSkKKyAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCit7CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdpc3RlciBpbnQgeXluOworICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworICBpbnQgeXllcnJzdGF0dXM7CS8qICBudW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkICovCisgIGludCB5eWNoYXIxID0gMDsJCS8qICBsb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlciAqLworCisgIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBzdGF0ZSBzdGFjawkJCSovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHNlbWFudGljIHZhbHVlIHN0YWNrCQkqLworCisgIHNob3J0ICp5eXNzID0geXlzc2E7CQkvKiAgcmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzICovCisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsJLyogIHRvIGFsbG93IHl5b3ZlcmZsb3cgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZSAqLworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9uIHN0YWNrCQkJKi8KKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworICBZWUxUWVBFICp5eWxzcDsKKworI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0sIHl5bHNwLS0pCisjZWxzZQorI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBpbnQgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworI2lmZGVmIFlZUFVSRQorICBpbnQgeXljaGFyOworICBZWVNUWVBFIHl5bHZhbDsKKyAgaW50IHl5bmVycnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIFlZTFRZUEUgeXlsbG9jOworI2VuZGlmCisjZW5kaWYKKworICBZWVNUWVBFIHl5dmFsOwkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRvIHJldHVybgkJKi8KKwkJCQkvKiAgc2VtYW50aWMgdmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLworCQkJCS8qICByb3V0aW5lcwkJCQkqLworCisgIGludCB5eWxlbjsKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKTsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzIC0gMTsKKyAgeXl2c3AgPSB5eXZzOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCA9IHl5bHM7CisjZW5kaWYKKworLyogUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4gIHl5c3RhdGUgIC4gICovCisvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KK3l5bmV3c3RhdGU6CisKKyAgKisreXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorICAgIHsKKyAgICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjayAqLworICAgICAgLyogVXNlIGNvcGllcyBvZiB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvIG1lbW9yeS4gKi8KKyAgICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKKyAgICAgIHNob3J0ICp5eXNzMSA9IHl5c3M7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7CisjZW5kaWYKKworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBpbnQgc2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZgorCSB0aGUgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICAqLworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgLyogVGhpcyB1c2VkIHRvIGJlIGEgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLAorCSBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlsczEsIHNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAmeXlzdGFja3NpemUpOworI2Vsc2UKKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlzdGFja3NpemUpOworI2VuZGlmCisKKyAgICAgIHl5c3MgPSB5eXNzMTsgeXl2cyA9IHl5dnMxOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlscyA9IHl5bHMxOworI2VuZGlmCisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+PSBZWU1BWERFUFRIKQorCXsKKwkgIHl5ZXJyb3IoInBhcnNlciBzdGFjayBvdmVyZmxvdyIpOworCSAgcmV0dXJuIDI7CisJfQorICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworICAgICAgeXlzcyA9IChzaG9ydCAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlzc3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5c3MxLCAoY2hhciAqKXl5c3MsIHNpemUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgeXl2cyA9IChZWVNUWVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXZzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXl2czEsIChjaGFyICopeXl2cywgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzID0gKFlZTFRZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eWxzMSwgKGNoYXIgKil5eWxzLCBzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyNlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgc2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyBzaXplIC0gMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHNwID0geXlscyArIHNpemUgLSAxOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWRcbiIsIHl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOworICAgIH0KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKTsKKyNlbmRpZgorCisgIGdvdG8geXliYWNrdXA7CisgeXliYWNrdXA6CisKKy8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTogKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKTsKKyNlbmRpZgorICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRoICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisgICAgeworICAgICAgeXljaGFyMSA9IDA7CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIik7CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworCSAgLyogR2l2ZSB0aGUgaW5kaXZpZHVhbCBwYXJzZXIgYSB3YXkgdG8gcHJpbnQgdGhlIHByZWNpc2UgbWVhbmluZworCSAgICAgb2YgYSB0b2tlbiwgZm9yIGZ1cnRoZXIgZGVidWdnaW5nIGluZm8uICAqLworI2lmZGVmIFlZUFJJTlQKKwkgIFlZUFJJTlQgKHN0ZGVyciwgeXljaGFyLCB5eWx2YWwpOworI2VuZGlmCisJICBmcHJpbnRmIChzdGRlcnIsICIpXG4iKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgeXluICs9IHl5Y2hhcjE7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyMSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisKKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorICAgICBOZWdhdGl2ZSA9PiByZWR1Y2UsIC15eW4gaXMgcnVsZSBudW1iZXIuCisgICAgIFBvc2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3IHN0YXRlLgorICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisgICAgICAganVzdCByZXR1cm4gc3VjY2Vzcy4KKyAgICAgMCwgb3IgbW9zdCBuZWdhdGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLworCisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJWQgKCVzKSwgIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICAvKiBjb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykgeXllcnJzdGF0dXMtLTsKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKy8qIERvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICAqLworeXlkZWZhdWx0OgorCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworLyogRG8gYSByZWR1Y3Rpb24uICB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworeXlyZWR1Y2U6CisgIHl5bGVuID0geXlyMlt5eW5dOworICBpZiAoeXlsZW4gPiAwKQorICAgIHl5dmFsID0geXl2c3BbMS15eWxlbl07IC8qIGltcGxlbWVudCBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb24gKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBpbnQgaTsKKworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiUmVkdWNpbmcgdmlhIHJ1bGUgJWQgKGxpbmUgJWQpLCAiLAorCSAgICAgICB5eW4sIHl5cmxpbmVbeXluXSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworICAgICAgZm9yIChpID0geXlwcmhzW3l5bl07IHl5cmhzW2ldID4gMDsgaSsrKQorCWZwcmludGYgKHN0ZGVyciwgIiVzICIsIHl5dG5hbWVbeXlyaHNbaV1dKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAgICB9CisjZW5kaWYKKworCisgIHN3aXRjaCAoeXluKSB7CisKK2Nhc2UgMjoKKyNsaW5lIDMxMiAicGFyc2UueSIKK3sKKwkJICAvKiBJbiBjYXNlIHRoZXJlIHdlcmUgbWlzc2luZyBjbG9zZWJyYWNlcywKKwkJICAgICBnZXQgdXMgYmFjayB0byB0aGUgZ2xvYmFsIGJpbmRpbmcgbGV2ZWwuICAqLworCQkgIHdoaWxlICghIGdsb2JhbF9iaW5kaW5nc19wICgpKQorCQkgICAgcG9wbGV2ZWwgKDAsIDAsIDApOworCQkgIGZpbmlzaF9maWxlICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAzOgorI2xpbmUgMzI2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDoKKyNsaW5lIDMyOCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDU6CisjbGluZSAzMzAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA4OgorI2xpbmUgMzM5ICJwYXJzZS55IgoreyBoYXZlX2V4dGVybl9zcGVjID0gMTsKKwkJICB1c2VkX2V4dGVybl9zcGVjID0gMDsKKwkJICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgOToKKyNsaW5lIDM0NCAicGFyc2UueSIKK3sgaGF2ZV9leHRlcm5fc3BlYyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDEwOgorI2xpbmUgMzQ5ICJwYXJzZS55IgoreyB5eXZhbC5pdHlwZSA9IHBlZGFudGljOworCQkgIHBlZGFudGljID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM6CisjbGluZSAzNTkgInBhcnNlLnkiCit7IGlmIChwZW5kaW5nX2xhbmdfY2hhbmdlKSBkb19wZW5kaW5nX2xhbmdfY2hhbmdlKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE0OgorI2xpbmUgMzYxICJwYXJzZS55IgoreyBpZiAoISB0b3BsZXZlbF9iaW5kaW5nc19wICgpICYmICEgcHNldWRvX2dsb2JhbF9sZXZlbF9wKCkpCisJCSAgcG9wX2V2ZXJ5dGhpbmcgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE1OgorI2xpbmUgMzY3ICJwYXJzZS55IgoreyBpZiAocGVuZGluZ19pbmxpbmVzKSBkb19wZW5kaW5nX2lubGluZXMgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE2OgorI2xpbmUgMzY5ICJwYXJzZS55IgoreyBpZiAocGVuZGluZ19pbmxpbmVzKSBkb19wZW5kaW5nX2lubGluZXMgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3OgorI2xpbmUgMzcxICJwYXJzZS55IgoreyBpZiAocGVuZGluZ19pbmxpbmVzKSBkb19wZW5kaW5nX2lubGluZXMgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE4OgorI2xpbmUgMzczICJwYXJzZS55IgoreyBpZiAoVFJFRV9DSEFJTiAoeXl2c3BbLTJdLnR0eXBlKSkgeXl2c3BbLTJdLnR0eXBlID0gY29tYmluZV9zdHJpbmdzICh5eXZzcFstMl0udHR5cGUpOworCQkgIGFzc2VtYmxlX2FzbSAoeXl2c3BbLTJdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk6CisjbGluZSAzNzYgInBhcnNlLnkiCit7IHBvcF9sYW5nX2NvbnRleHQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIwOgorI2xpbmUgMzc4ICJwYXJzZS55IgoreyBpZiAocGVuZGluZ19pbmxpbmVzKSBkb19wZW5kaW5nX2lubGluZXMgKCk7CisJCSAgcG9wX2xhbmdfY29udGV4dCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjE6CisjbGluZSAzODEgInBhcnNlLnkiCit7IGlmIChwZW5kaW5nX2lubGluZXMpIGRvX3BlbmRpbmdfaW5saW5lcyAoKTsKKwkJICBwb3BfbGFuZ19jb250ZXh0ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjoKKyNsaW5lIDM4NCAicGFyc2UueSIKK3sgcHVzaF9uYW1lc3BhY2UgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIzOgorI2xpbmUgMzg2ICJwYXJzZS55IgoreyBwb3BfbmFtZXNwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDoKKyNsaW5lIDM4OCAicGFyc2UueSIKK3sgcHVzaF9uYW1lc3BhY2UgKE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1OgorI2xpbmUgMzkwICJwYXJzZS55IgoreyBwb3BfbmFtZXNwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNjoKKyNsaW5lIDM5MiAicGFyc2UueSIKK3sgZG9fbmFtZXNwYWNlX2FsaWFzICh5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3OgorI2xpbmUgMzk0ICJwYXJzZS55IgoreyBkb190b3BsZXZlbF91c2luZ19kZWNsICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODoKKyNsaW5lIDM5NiAicGFyc2UueSIKK3sKKwkJICBpZiAoVFJFRV9DT0RFICh5eXZzcFstMV0udHR5cGUpID09IElERU5USUZJRVJfTk9ERSkKKwkJICAgIHl5dnNwWy0xXS50dHlwZSA9IGxhc3RpZGRlY2w7CisJCSAgZG9fdXNpbmdfZGlyZWN0aXZlICh5eXZzcFstMV0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyOToKKyNsaW5lIDQwMiAicGFyc2UueSIKK3sgcGVkYW50aWMgPSB5eXZzcFstMV0uaXR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDMwOgorI2xpbmUgNDA3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMToKKyNsaW5lIDQwOSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI6CisjbGluZSA0MTEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDM1OgorI2xpbmUgNDE4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjoKKyNsaW5lIDQyMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzc6CisjbGluZSA0MjUgInBhcnNlLnkiCit7IHB1c2hfbGFuZ19jb250ZXh0ICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM4OgorI2xpbmUgNDI3ICJwYXJzZS55IgoreyBpZiAoY3VycmVudF9sYW5nX25hbWUgIT0geXl2c3BbMF0udHR5cGUpCisJCSAgICBjcF9lcnJvciAoInVzZSBvZiBsaW5rYWdlIHNwZWMgYCVEJyBpcyBkaWZmZXJlbnQgZnJvbSBwcmV2aW91cyBzcGVjIGAlRCciLCB5eXZzcFswXS50dHlwZSwgY3VycmVudF9sYW5nX25hbWUpOworCQkgIHBvcF9sYW5nX2NvbnRleHQgKCk7IHB1c2hfbGFuZ19jb250ZXh0ICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM5OgorI2xpbmUgNDM0ICJwYXJzZS55IgoreyBiZWdpbl90ZW1wbGF0ZV9wYXJtX2xpc3QgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDQwOgorI2xpbmUgNDM2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQxOgorI2xpbmUgNDM4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDI6CisjbGluZSA0NDMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcHJvY2Vzc190ZW1wbGF0ZV9wYXJtIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDM6CisjbGluZSA0NDUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcHJvY2Vzc190ZW1wbGF0ZV9wYXJtICh5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDQ6CisjbGluZSA0NTAgInBhcnNlLnkiCit7IAorCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsKKwkJIHR0cGE6CisJCSAgaWYgKFRSRUVfUFVSUE9TRSAoeXl2YWwudHR5cGUpID09IHNpZ25hdHVyZV90eXBlX25vZGUpCisJCSAgICBzb3JyeSAoInNpZ25hdHVyZSBhcyB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlciIpOworCQkgIGVsc2UgaWYgKFRSRUVfUFVSUE9TRSAoeXl2YWwudHR5cGUpICE9IGNsYXNzX3R5cGVfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgcGVkd2FybiAoInRlbXBsYXRlIHR5cGUgcGFyYW1ldGVycyBtdXN0IHVzZSB0aGUga2V5d29yZCBgY2xhc3MnIik7CisJCSAgICAgIFRSRUVfUFVSUE9TRSAoeXl2YWwudHR5cGUpID0gY2xhc3NfdHlwZV9ub2RlOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NToKKyNsaW5lIDQ2MiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyBnb3RvIHR0cGE7IDsKKyAgICBicmVhazt9CitjYXNlIDQ2OgorI2xpbmUgNDY0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoY2xhc3NfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NzoKKyNsaW5lIDQ2NiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGNsYXNzX3R5cGVfbm9kZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0ODoKKyNsaW5lIDQ3OCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0OToKKyNsaW5lIDQ4MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGdyb2t0eXBlbmFtZSAoeXl2c3BbMF0uZnR5cGUudCksIHl5dnNwWy0yXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDUwOgorI2xpbmUgNDgyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50KTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTE6CisjbGluZSA0ODQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLmZ0eXBlLnQpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MjoKKyNsaW5lIDQ5MCAicGFyc2UueSIKK3sgZW5kX3RlbXBsYXRlX2RlY2wgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDUzOgorI2xpbmUgNDkzICJwYXJzZS55IgoreyBlbmRfdGVtcGxhdGVfZGVjbCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQ6CisjbGluZSA0OTggInBhcnNlLnkiCit7OworICAgIGJyZWFrO30KK2Nhc2UgNTU6CisjbGluZSA1MDAgInBhcnNlLnkiCit7OworICAgIGJyZWFrO30KK2Nhc2UgNTY6CisjbGluZSA1MDIgInBhcnNlLnkiCit7CisJCSAgbm90ZV9saXN0X2dvdF9zZW1pY29sb24gKHl5dnNwWy0yXS5mdHlwZS50KTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTc6CisjbGluZSA1MDYgInBhcnNlLnkiCit7IHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1OToKKyNsaW5lIDUwOSAicGFyc2UueSIKK3sKKwkJICB0cmVlIHQsIGF0dHJzOworCQkgIHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstMV0uZnR5cGUudCwgJnQsICZhdHRycyk7CisJCSAgc2hhZG93X3RhZyAodCk7CisJCSAgbm90ZV9saXN0X2dvdF9zZW1pY29sb24gKHl5dnNwWy0xXS5mdHlwZS50KTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjM6CisjbGluZSA1MjIgInBhcnNlLnkiCit7IHl5dmFsLml0eXBlID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgNjQ6CisjbGluZSA1MjQgInBhcnNlLnkiCit7IHl5dmFsLml0eXBlID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzA6CisjbGluZSA1NDAgInBhcnNlLnkiCit7IGZpbmlzaF9mdW5jdGlvbiAobGluZW5vLCAoaW50KXl5dnNwWy0xXS5pdHlwZSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDcxOgorI2xpbmUgNTQyICJwYXJzZS55IgoreyA7CisgICAgYnJlYWs7fQorY2FzZSA3MjoKKyNsaW5lIDU0NCAicGFyc2UueSIKK3sgOworICAgIGJyZWFrO30KK2Nhc2UgNzM6CisjbGluZSA1NDkgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBpZiAoeXl2c3BbLTJdLnR0eXBlICE9IGN1cnJlbnRfY2xhc3NfdHlwZSkKKwkJICAgIHsKKwkJICAgICAgcHVzaF9uZXN0ZWRfY2xhc3MgKHl5dnNwWy0yXS50dHlwZSwgMyk7CisJCSAgICAgIFRSRUVfQ09NUExFWElUWSAoeXl2YWwudHR5cGUpID0gY3VycmVudF9jbGFzc19kZXB0aDsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNzQ6CisjbGluZSA1NTggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzU6CisjbGluZSA1NjAgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlKTsKKwkJICBpZiAoeXl2c3BbLTRdLnR0eXBlICE9IGN1cnJlbnRfY2xhc3NfdHlwZSkKKwkJICAgIHsKKwkJICAgICAgcHVzaF9uZXN0ZWRfY2xhc3MgKHl5dnNwWy00XS50dHlwZSwgMyk7CisJCSAgICAgIFRSRUVfQ09NUExFWElUWSAoeXl2YWwudHR5cGUpID0gY3VycmVudF9jbGFzc19kZXB0aDsKKwkJICAgIH0KKwkJICB5eXZhbC50dHlwZSA9IG1ha2VfY2FsbF9kZWNsYXJhdG9yICh5eXZhbC50dHlwZSwgZW1wdHlfcGFybXMgKCksIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3NjoKKyNsaW5lIDU3MCAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKFNDT1BFX1JFRiwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGlmICh5eXZzcFstMl0udHR5cGUgIT0gY3VycmVudF9jbGFzc190eXBlKQorCQkgICAgeworCQkgICAgICBwdXNoX25lc3RlZF9jbGFzcyAoeXl2c3BbLTJdLnR0eXBlLCAzKTsKKwkJICAgICAgVFJFRV9DT01QTEVYSVRZICh5eXZhbC50dHlwZSkgPSBjdXJyZW50X2NsYXNzX2RlcHRoOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA3NzoKKyNsaW5lIDU3OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODoKKyNsaW5lIDU4MSAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKFNDT1BFX1JFRiwgeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstM10udHR5cGUpOworCQkgIGlmICh5eXZzcFstNF0udHR5cGUgIT0gY3VycmVudF9jbGFzc190eXBlKQorCQkgICAgeworCQkgICAgICBwdXNoX25lc3RlZF9jbGFzcyAoeXl2c3BbLTRdLnR0eXBlLCAzKTsKKwkJICAgICAgVFJFRV9DT01QTEVYSVRZICh5eXZhbC50dHlwZSkgPSBjdXJyZW50X2NsYXNzX2RlcHRoOworCQkgICAgfQorCQkgIHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dmFsLnR0eXBlLCBlbXB0eV9wYXJtcyAoKSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDc5OgorI2xpbmUgNTkxICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoU0NPUEVfUkVGLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgaWYgKHl5dnNwWy0yXS50dHlwZSAhPSBjdXJyZW50X2NsYXNzX3R5cGUpCisJCSAgICB7CisJCSAgICAgIHB1c2hfbmVzdGVkX2NsYXNzICh5eXZzcFstMl0udHR5cGUsIDMpOworCQkgICAgICBUUkVFX0NPTVBMRVhJVFkgKHl5dmFsLnR0eXBlKSA9IGN1cnJlbnRfY2xhc3NfZGVwdGg7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDgwOgorI2xpbmUgNjAwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfY2FsbF9kZWNsYXJhdG9yICh5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDgxOgorI2xpbmUgNjAyICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoU0NPUEVfUkVGLCB5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0zXS50dHlwZSk7CisJCSAgaWYgKHl5dnNwWy00XS50dHlwZSAhPSBjdXJyZW50X2NsYXNzX3R5cGUpCisJCSAgICB7CisJCSAgICAgIHB1c2hfbmVzdGVkX2NsYXNzICh5eXZzcFstNF0udHR5cGUsIDMpOworCQkgICAgICBUUkVFX0NPTVBMRVhJVFkgKHl5dmFsLnR0eXBlKSA9IGN1cnJlbnRfY2xhc3NfZGVwdGg7CisJCSAgICB9CisJCSAgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoeXl2YWwudHR5cGUsIGVtcHR5X3Bhcm1zICgpLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgODI6CisjbGluZSA2MTIgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBpZiAoeXl2c3BbLTJdLnR0eXBlICE9IGN1cnJlbnRfY2xhc3NfdHlwZSkKKwkJICAgIHsKKwkJICAgICAgcHVzaF9uZXN0ZWRfY2xhc3MgKHl5dnNwWy0yXS50dHlwZSwgMyk7CisJCSAgICAgIFRSRUVfQ09NUExFWElUWSAoeXl2YWwudHR5cGUpID0gY3VycmVudF9jbGFzc19kZXB0aDsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgODM6CisjbGluZSA2MjEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgODQ6CisjbGluZSA2MjMgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlKTsKKwkJICBpZiAoeXl2c3BbLTRdLnR0eXBlICE9IGN1cnJlbnRfY2xhc3NfdHlwZSkKKwkJICAgIHsKKwkJICAgICAgcHVzaF9uZXN0ZWRfY2xhc3MgKHl5dnNwWy00XS50dHlwZSwgMyk7CisJCSAgICAgIFRSRUVfQ09NUExFWElUWSAoeXl2YWwudHR5cGUpID0gY3VycmVudF9jbGFzc19kZXB0aDsKKwkJICAgIH0KKwkJICB5eXZhbC50dHlwZSA9IG1ha2VfY2FsbF9kZWNsYXJhdG9yICh5eXZhbC50dHlwZSwgZW1wdHlfcGFybXMgKCksIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA4NToKKyNsaW5lIDYzNiAicGFyc2UueSIKK3sgdHJlZSBzcGVjcywgYXR0cnM7CisJCSAgc3BsaXRfc3BlY3NfYXR0cnMgKHl5dnNwWy0xXS5mdHlwZS50LCAmc3BlY3MsICZhdHRycyk7CisJCSAgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKHNwZWNzLCB5eXZzcFswXS50dHlwZSwgYXR0cnMsIDApKQorCQkgICAgWVlFUlJPUjE7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbiAoKTsKKwkJICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgODY6CisjbGluZSA2NDMgInBhcnNlLnkiCit7IHRyZWUgc3BlY3MsIGF0dHJzOworCQkgIHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstMV0udHR5cGUsICZzcGVjcywgJmF0dHJzKTsKKwkJICBpZiAoISBzdGFydF9mdW5jdGlvbiAoc3BlY3MsIHl5dnNwWzBdLnR0eXBlLCBhdHRycywgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOworCQkgIHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA4NzoKKyNsaW5lIDY1MCAicGFyc2UueSIKK3sgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKE5VTExfVFJFRSwgeXl2YWwudHR5cGUsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOworCQkgIHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA4ODoKKyNsaW5lIDY1NSAicGFyc2UueSIKK3sgdHJlZSBzcGVjcywgYXR0cnM7CisJCSAgc3BsaXRfc3BlY3NfYXR0cnMgKHl5dnNwWy0xXS50dHlwZSwgJnNwZWNzLCAmYXR0cnMpOworCQkgIGlmICghIHN0YXJ0X2Z1bmN0aW9uIChzcGVjcywgeXl2c3BbMF0udHR5cGUsIGF0dHJzLCAwKSkKKwkJICAgIFlZRVJST1IxOworCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDg5OgorI2xpbmUgNjYyICJwYXJzZS55IgoreyBpZiAoISBzdGFydF9mdW5jdGlvbiAoTlVMTF9UUkVFLCB5eXZhbC50dHlwZSwgTlVMTF9UUkVFLCAwKSkKKwkJICAgIFlZRVJST1IxOworCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDkwOgorI2xpbmUgNjcwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfY2FsbF9kZWNsYXJhdG9yICh5eXZzcFstNV0udHR5cGUsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDkxOgorI2xpbmUgNjcyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfY2FsbF9kZWNsYXJhdG9yICh5eXZzcFstM10udHR5cGUsIGVtcHR5X3Bhcm1zICgpLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTI6CisjbGluZSA2NzQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dnNwWy01XS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTM6CisjbGluZSA2NzYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dnNwWy0zXS50dHlwZSwgZW1wdHlfcGFybXMgKCksIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA5NDoKKyNsaW5lIDY4MyAicGFyc2UueSIKK3sgdHJlZSBzcGVjcyA9IHN0cmlwX2F0dHJzICh5eXZzcFstMV0udHR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0gc3RhcnRfbWV0aG9kIChzcGVjcywgeXl2c3BbMF0udHR5cGUpOworCQkgcmVzdF9vZl9tZGVmOgorCQkgIGlmICghIHl5dmFsLnR0eXBlKQorCQkgICAgWVlFUlJPUjE7CisJCSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorCQkgICAgeXljaGFyID0gWVlMRVg7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9tZXRob2QgKHl5Y2hhciwgeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA5NToKKyNsaW5lIDY5MiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBzdGFydF9tZXRob2QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyBnb3RvIHJlc3Rfb2ZfbWRlZjsgOworICAgIGJyZWFrO30KK2Nhc2UgOTY6CisjbGluZSA2OTQgInBhcnNlLnkiCit7IHRyZWUgc3BlY3MgPSBzdHJpcF9hdHRycyAoeXl2c3BbLTFdLmZ0eXBlLnQpOworCQkgIHl5dmFsLnR0eXBlID0gc3RhcnRfbWV0aG9kIChzcGVjcywgeXl2c3BbMF0udHR5cGUpOyBnb3RvIHJlc3Rfb2ZfbWRlZjsgOworICAgIGJyZWFrO30KK2Nhc2UgOTc6CisjbGluZSA2OTcgInBhcnNlLnkiCit7IHRyZWUgc3BlY3MgPSBzdHJpcF9hdHRycyAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X21ldGhvZCAoc3BlY3MsIHl5dnNwWzBdLnR0eXBlKTsgZ290byByZXN0X29mX21kZWY7IDsKKyAgICBicmVhazt9CitjYXNlIDk4OgorI2xpbmUgNzAwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHN0YXJ0X21ldGhvZCAoTlVMTF9UUkVFLCB5eXZhbC50dHlwZSk7IGdvdG8gcmVzdF9vZl9tZGVmOyA7CisgICAgYnJlYWs7fQorY2FzZSA5OToKKyNsaW5lIDcwMiAicGFyc2UueSIKK3sgdHJlZSBzcGVjcyA9IHN0cmlwX2F0dHJzICh5eXZzcFstMV0udHR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0gc3RhcnRfbWV0aG9kIChzcGVjcywgeXl2c3BbMF0udHR5cGUpOyBnb3RvIHJlc3Rfb2ZfbWRlZjsgOworICAgIGJyZWFrO30KK2Nhc2UgMTAwOgorI2xpbmUgNzA1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHN0YXJ0X21ldGhvZCAoTlVMTF9UUkVFLCB5eXZhbC50dHlwZSk7IGdvdG8gcmVzdF9vZl9tZGVmOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDE6CisjbGluZSA3MTAgInBhcnNlLnkiCit7CisJCSAgaWYgKCEgY3VycmVudF9mdW5jdGlvbl9wYXJtc19zdG9yZWQpCisJCSAgICBzdG9yZV9wYXJtX2RlY2xzICgpOworCQkgIHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDEwMjoKKyNsaW5lIDcxOSAicGFyc2UueSIKK3sgc3RvcmVfcmV0dXJuX2luaXQgKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEwMzoKKyNsaW5lIDcyMSAicGFyc2UueSIKK3sgc3RvcmVfcmV0dXJuX2luaXQgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDQ6CisjbGluZSA3MjMgInBhcnNlLnkiCit7IHN0b3JlX3JldHVybl9pbml0ICh5eXZhbC50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTA1OgorI2xpbmUgNzI4ICJwYXJzZS55IgoreworCQkgIGlmICh5eXZzcFswXS5pdHlwZSA9PSAwKQorCQkgICAgZXJyb3IgKCJubyBiYXNlIGluaXRpYWxpemVycyBnaXZlbiBmb2xsb3dpbmcgJzonIik7CisJCSAgc2V0dXBfdnRibF9wdHIgKCk7CisJCSAgLyogQWx3YXlzIGtlZXAgdGhlIEJMT0NLIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvdXRlcm1vc3QKKwkJICAgICBwYWlyIG9mIGN1cmxleSBicmFjZXMgb2YgYSBmdW5jdGlvbi4gIFRoZXNlIGFyZSBuZWVkZWQKKwkJICAgICBmb3IgY29ycmVjdCBvcGVyYXRpb24gb2YgZHdhcmZvdXQuYy4gICovCisJCSAga2VlcF9uZXh0X2xldmVsICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxMDY6CisjbGluZSA3NDEgInBhcnNlLnkiCit7CisJCSAgaWYgKCEgY3VycmVudF9mdW5jdGlvbl9wYXJtc19zdG9yZWQpCisJCSAgICBzdG9yZV9wYXJtX2RlY2xzICgpOworCisJCSAgaWYgKERFQ0xfQ09OU1RSVUNUT1JfUCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSkKKwkJICAgIHsKKwkJICAgICAgLyogTWFrZSBhIGNvbnRvdXIgZm9yIHRoZSBpbml0aWFsaXplciBsaXN0LiAgKi8KKwkJICAgICAgcHVzaGxldmVsICgwKTsKKwkJICAgICAgY2xlYXJfbGFzdF9leHByICgpOworCQkgICAgICBleHBhbmRfc3RhcnRfYmluZGluZ3MgKDApOworCQkgICAgfQorCQkgIGVsc2UgaWYgKGN1cnJlbnRfY2xhc3NfdHlwZSA9PSBOVUxMX1RSRUUpCisJCSAgICBlcnJvciAoImJhc2UgaW5pdGlhbGl6ZXJzIG5vdCBhbGxvd2VkIGZvciBub24tbWVtYmVyIGZ1bmN0aW9ucyIpOworCQkgIGVsc2UgaWYgKCEgREVDTF9DT05TVFJVQ1RPUl9QIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpKQorCQkgICAgZXJyb3IgKCJvbmx5IGNvbnN0cnVjdG9ycyB0YWtlIGJhc2UgaW5pdGlhbGl6ZXJzIik7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDEwNzoKKyNsaW5lIDc2MSAicGFyc2UueSIKK3sgeXl2YWwuaXR5cGUgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDg6CisjbGluZSA3NjMgInBhcnNlLnkiCit7IHl5dmFsLml0eXBlID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTExOgorI2xpbmUgNzcwICJwYXJzZS55IgoreworCQkgIGlmIChjdXJyZW50X2NsYXNzX25hbWUpCisJCSAgICBwZWR3YXJuICgiYW5hY2hyb25pc3RpYyBvbGQgc3R5bGUgYmFzZSBjbGFzcyBpbml0aWFsaXplciIpOworCQkgIGV4cGFuZF9tZW1iZXJfaW5pdCAoY3VycmVudF9jbGFzc19yZWYsIE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTEyOgorI2xpbmUgNzc2ICJwYXJzZS55IgoreworCQkgIGlmIChjdXJyZW50X2NsYXNzX25hbWUpCisJCSAgICBwZWR3YXJuICgiYW5hY2hyb25pc3RpYyBvbGQgc3R5bGUgYmFzZSBjbGFzcyBpbml0aWFsaXplciIpOworCQkgIGV4cGFuZF9tZW1iZXJfaW5pdCAoY3VycmVudF9jbGFzc19yZWYsIE5VTExfVFJFRSwgdm9pZF90eXBlX25vZGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxMTM6CisjbGluZSA3ODIgInBhcnNlLnkiCit7IGV4cGFuZF9tZW1iZXJfaW5pdCAoY3VycmVudF9jbGFzc19yZWYsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTE0OgorI2xpbmUgNzg0ICJwYXJzZS55IgoreyBleHBhbmRfbWVtYmVyX2luaXQgKGN1cnJlbnRfY2xhc3NfcmVmLCB5eXZzcFstMV0udHR5cGUsIHZvaWRfdHlwZV9ub2RlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTE1OgorI2xpbmUgNzg2ICJwYXJzZS55IgoreyBleHBhbmRfbWVtYmVyX2luaXQgKGN1cnJlbnRfY2xhc3NfcmVmLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDExNjoKKyNsaW5lIDc4OCAicGFyc2UueSIKK3sgZXhwYW5kX21lbWJlcl9pbml0IChjdXJyZW50X2NsYXNzX3JlZiwgeXl2c3BbLTFdLnR0eXBlLCB2b2lkX3R5cGVfbm9kZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDExNzoKKyNsaW5lIDc5MSAicGFyc2UueSIKK3sKKwkJICBkb19tZW1iZXJfaW5pdCAoT1AwICh5eXZzcFstM10udHR5cGUpLCBPUDEgKHl5dnNwWy0zXS50dHlwZSksIHl5dnNwWy0xXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDExODoKKyNsaW5lIDc5NSAicGFyc2UueSIKK3sKKwkJICBkb19tZW1iZXJfaW5pdCAoT1AwICh5eXZzcFstMV0udHR5cGUpLCBPUDEgKHl5dnNwWy0xXS50dHlwZSksIHZvaWRfdHlwZV9ub2RlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTMwOgorI2xpbmUgODIyICJwYXJzZS55IgoreyBkb190eXBlX2luc3RhbnRpYXRpb24gKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzE6CisjbGluZSA4MjQgInBhcnNlLnkiCit7IHRyZWUgc3BlY3MgPSBzdHJpcF9hdHRycyAoeXl2c3BbLTFdLmZ0eXBlLnQpOworCQkgIGRvX2RlY2xfaW5zdGFudGlhdGlvbiAoc3BlY3MsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzI6CisjbGluZSA4MjcgInBhcnNlLnkiCit7IGRvX2RlY2xfaW5zdGFudGlhdGlvbiAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTMzOgorI2xpbmUgODI5ICJwYXJzZS55IgoreyBkb19kZWNsX2luc3RhbnRpYXRpb24gKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzNDoKKyNsaW5lIDgzMSAicGFyc2UueSIKK3sgZG9fdHlwZV9pbnN0YW50aWF0aW9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM1OgorI2xpbmUgODMzICJwYXJzZS55IgoreyB0cmVlIHNwZWNzID0gc3RyaXBfYXR0cnMgKHl5dnNwWy0xXS5mdHlwZS50KTsKKwkJICBkb19kZWNsX2luc3RhbnRpYXRpb24gKHNwZWNzLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM2OgorI2xpbmUgODM2ICJwYXJzZS55IgoreyBkb19kZWNsX2luc3RhbnRpYXRpb24gKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzNzoKKyNsaW5lIDgzOCAicGFyc2UueSIKK3sgZG9fZGVjbF9pbnN0YW50aWF0aW9uIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzg6CisjbGluZSA4NDcgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBsb29rdXBfdGVtcGxhdGVfY2xhc3MgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUpOworCQkgIGlmICh5eXZhbC50dHlwZSAhPSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IFRZUEVfU1RVQl9ERUNMICh5eXZhbC50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDEzOToKKyNsaW5lIDg1MyAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyAoeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgaWYgKHl5dmFsLnR0eXBlICE9IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHl5dmFsLnR0eXBlID0gVFlQRV9TVFVCX0RFQ0wgKHl5dmFsLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTQwOgorI2xpbmUgODU5ICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gbG9va3VwX3RlbXBsYXRlX2NsYXNzICh5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgTlVMTF9UUkVFKTsKKwkJICBpZiAoeXl2YWwudHR5cGUgIT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeXl2YWwudHR5cGUgPSBUWVBFX1NUVUJfREVDTCAoeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxNDE6CisjbGluZSA4NjUgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBsb29rdXBfdGVtcGxhdGVfY2xhc3MgKHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCQkgIGlmICh5eXZhbC50dHlwZSAhPSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IFRZUEVfU1RVQl9ERUNMICh5eXZhbC50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDE0MzoKKyNsaW5lIDg3NSAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSk7CisJCSAgaWYgKHl5dmFsLnR0eXBlICE9IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHl5dmFsLnR0eXBlID0gVFlQRV9TVFVCX0RFQ0wgKHl5dmFsLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTQ0OgorI2xpbmUgODgxICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gbG9va3VwX3RlbXBsYXRlX2NsYXNzICh5eXZzcFstMl0udHR5cGUsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKwkJICBpZiAoeXl2YWwudHR5cGUgIT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeXl2YWwudHR5cGUgPSBUWVBFX1NUVUJfREVDTCAoeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxNDY6CisjbGluZSA4OTEgInBhcnNlLnkiCit7CisJCSAgLyogSGFuZGxlIGBDbGFzczxDbGFzczxUeXBlPj4nIHdpdGhvdXQgc3BhY2UgaW4gdGhlIGA+PicgKi8KKwkJICBwZWR3YXJuICgiYD4+JyBzaG91bGQgYmUgYD4gPicgaW4gdGVtcGxhdGUgY2xhc3MgbmFtZSIpOworCQkgIHl5dW5nZXRjICgnPicsIDEpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxNDc6CisjbGluZSA5MDAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQ4OgorI2xpbmUgOTAyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dmFsLnR0eXBlLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQ5OgorI2xpbmUgOTA3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2t0eXBlbmFtZSAoeXl2c3BbMF0uZnR5cGUudCk7IDsKKyAgICBicmVhazt9CitjYXNlIDE1MToKKyNsaW5lIDkxMyAicGFyc2UueSIKK3sgeXl2YWwuY29kZSA9IE5FR0FURV9FWFBSOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNTI6CisjbGluZSA5MTUgInBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBDT05WRVJUX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDE1MzoKKyNsaW5lIDkxNyAicGFyc2UueSIKK3sgeXl2YWwuY29kZSA9IFBSRUlOQ1JFTUVOVF9FWFBSOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNTQ6CisjbGluZSA5MTkgInBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBQUkVERUNSRU1FTlRfRVhQUjsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU1OgorI2xpbmUgOTIxICJwYXJzZS55IgoreyB5eXZhbC5jb2RlID0gVFJVVEhfTk9UX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDE1NjoKKyNsaW5lIDkyNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2NvbXBvdW5kX2V4cHIgKHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU4OgorI2xpbmUgOTMyICJwYXJzZS55IgoreyBlcnJvciAoIkFOU0kgQysrIGZvcmJpZHMgYW4gZW1wdHkgY29uZGl0aW9uIGZvciBgJXMnIiwKKwkJCSBjb25kX3N0bXRfa2V5d29yZCk7CisJCSAgeXl2YWwudHR5cGUgPSBpbnRlZ2VyX3plcm9fbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU5OgorI2xpbmUgOTM2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNvbmRpdGlvbl9jb252ZXJzaW9uICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjA6CisjbGluZSA5NDEgInBhcnNlLnkiCit7IGVycm9yICgiQU5TSSBDKysgZm9yYmlkcyBhbiBlbXB0eSBjb25kaXRpb24gZm9yIGAlcyciLAorCQkJIGNvbmRfc3RtdF9rZXl3b3JkKTsKKwkJICB5eXZhbC50dHlwZSA9IGludGVnZXJfemVyb19ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjE6CisjbGluZSA5NDUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY29uZGl0aW9uX2NvbnZlcnNpb24gKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE2MjoKKyNsaW5lIDk1MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDE2MzoKKyNsaW5lIDk1MiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjb25kaXRpb25fY29udmVyc2lvbiAoeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjQ6CisjbGluZSA5NTQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjU6CisjbGluZSA5NTkgInBhcnNlLnkiCit7IHsKKwkJICB0cmVlIGQ7CisJCSAgZm9yIChkID0gZ2V0ZGVjbHMgKCk7IGQ7IGQgPSBUUkVFX0NIQUlOIChkKSkKKwkJICAgIGlmIChUUkVFX0NPREUgKGQpID09IFRZUEVfREVDTCkgeworCQkgICAgICB0cmVlIHMgPSBUUkVFX1RZUEUgKGQpOworCQkgICAgICBpZiAoVFJFRV9DT0RFIChzKSA9PSBSRUNPUkRfVFlQRSkKKwkJCWNwX2Vycm9yICgiZGVmaW5pdGlvbiBvZiBjbGFzcyBgJVQnIGluIGNvbmRpdGlvbiIsIHMpOworCQkgICAgICBlbHNlIGlmIChUUkVFX0NPREUgKHMpID09IEVOVU1FUkFMX1RZUEUpCisJCQljcF9lcnJvciAoImRlZmluaXRpb24gb2YgZW51bSBgJVQnIGluIGNvbmRpdGlvbiIsIHMpOworCQkgICAgfQorCQkgIH0KKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IHl5dnNwWy00XS5mdHlwZS50OworCQkgIHl5dnNwWzBdLml0eXBlID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgeXl2YWwudHR5cGUgPSBzdGFydF9kZWNsICh5eXZzcFstM10udHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCAxKTsKKwkJICBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsCisJCQkJCSAvKnByZWZpeF9hdHRyaWJ1dGVzKi8gTlVMTF9UUkVFKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTY2OgorI2xpbmUgOTc3ICJwYXJzZS55IgoreyAKKwkJICBjcF9maW5pc2hfZGVjbCAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlLCAxLCBMT09LVVBfT05MWUNPTlZFUlRJTkcpOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IAorCQkgIGlmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpKSA9PSBBUlJBWV9UWVBFKQorCQkgICAgY3BfZXJyb3IgKCJkZWZpbml0aW9uIG9mIGFycmF5IGAlI0QnIGluIGNvbmRpdGlvbiIsIHl5dmFsLnR0eXBlKTsgCisJCTsKKyAgICBicmVhazt9CitjYXNlIDE3MjoKKyNsaW5lIDk5NiAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX21pbl9udCAoQ09NUE9VTkRfU1RNVCwgTlVMTF9UUkVFKTsKKwkJICAgICAgQ09NUE9VTkRfU1RNVF9OT19TQ09QRSAoeXl2YWwudHR5cGUpID0gMTsKKwkJICAgICAgYWRkX3RyZWUgKHl5dmFsLnR0eXBlKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTczOgorI2xpbmUgMTAwNSAicGFyc2UueSIKK3sgCisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstMV0udHR5cGUsIDApID0gVFJFRV9DSEFJTiAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICAgICAgVFJFRV9DSEFJTiAoeXl2c3BbLTFdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJICAgICAgbGFzdF90cmVlID0geXl2c3BbLTFdLnR0eXBlOworCQkgICAgfQorCQkgIGZpbmlzaF9zdG10ICgpOyAKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTc1OgorI2xpbmUgMTAyMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2YWwudHR5cGUsIAorCQkgICAgICAgICAgICAgICAgICBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc2OgorI2xpbmUgMTAyMyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2YWwudHR5cGUsIAorCQkgICAgICAgICAgICAgICAgICBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgZXJyb3JfbWFya19ub2RlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3NzoKKyNsaW5lIDEwMjYgInBhcnNlLnkiCit7IGNoYWlub24gKHl5dmFsLnR0eXBlLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc4OgorI2xpbmUgMTAyOCAicGFyc2UueSIKK3sgY2hhaW5vbiAoeXl2YWwudHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCBlcnJvcl9tYXJrX25vZGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc5OgorI2xpbmUgMTAzMyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODE6CisjbGluZSAxMDM5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODI6CisjbGluZSAxMDQyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQkgIHBlZGFudGljID0geXl2c3BbLTFdLml0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODM6CisjbGluZSAxMDQ1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfaW5kaXJlY3RfcmVmICh5eXZzcFswXS50dHlwZSwgInVuYXJ5ICoiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg0OgorI2xpbmUgMTA0NyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X3VuYXJ5X29wIChBRERSX0VYUFIsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg1OgorI2xpbmUgMTA0OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X3VuYXJ5X29wIChCSVRfTk9UX0VYUFIsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg2OgorI2xpbmUgMTA1MSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X3VuYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbMF0udHR5cGUpOworCQkgIGlmICh5eXZzcFstMV0uY29kZSA9PSBORUdBVEVfRVhQUiAmJiBUUkVFX0NPREUgKHl5dnNwWzBdLnR0eXBlKSA9PSBJTlRFR0VSX0NTVCkKKwkJICAgIFRSRUVfTkVHQVRFRF9JTlQgKHl5dmFsLnR0eXBlKSA9IDE7CisJCSAgb3ZlcmZsb3dfd2FybmluZyAoeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxODc6CisjbGluZSAxMDU4ICJwYXJzZS55IgoreyB0cmVlIGxhYmVsID0gbG9va3VwX2xhYmVsICh5eXZzcFswXS50dHlwZSk7CisJCSAgaWYgKGxhYmVsID09IE5VTExfVFJFRSkKKwkJICAgIHl5dmFsLnR0eXBlID0gbnVsbF9wb2ludGVyX25vZGU7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBUUkVFX1VTRUQgKGxhYmVsKSA9IDE7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGQxIChBRERSX0VYUFIsIHB0cl90eXBlX25vZGUsIGxhYmVsKTsKKwkJICAgICAgVFJFRV9DT05TVEFOVCAoeXl2YWwudHR5cGUpID0gMTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMTg4OgorI2xpbmUgMTA2OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBleHByX3NpemVvZiAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODk6CisjbGluZSAxMDcxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNfc2l6ZW9mIChncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS5mdHlwZS50KSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE5MDoKKyNsaW5lIDEwNzMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ3Jva19hbGlnbm9mICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE5MToKKyNsaW5lIDEwNzUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY19hbGlnbm9mIChncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS5mdHlwZS50KSk7IAorCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoImFsaWdub2YiLCB5eXZzcFstMV0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTI6CisjbGluZSAxMDgxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX25ldyAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50LCBOVUxMX1RSRUUsIHl5dnNwWy0xXS5pdHlwZSk7IAorCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoIm5ldyIsIHl5dnNwWzBdLmZ0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTkzOgorI2xpbmUgMTA4NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9uZXcgKE5VTExfVFJFRSwgeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMl0uaXR5cGUpOyAKKwkJICBjaGVja19mb3JfbmV3X3R5cGUgKCJuZXciLCB5eXZzcFstMV0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTQ6CisjbGluZSAxMDg3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX25ldyAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS5mdHlwZS50LCBOVUxMX1RSRUUsIHl5dnNwWy0yXS5pdHlwZSk7IAorCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoIm5ldyIsIHl5dnNwWzBdLmZ0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk1OgorI2xpbmUgMTA5MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9uZXcgKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstM10uaXR5cGUpOyAKKwkJICBjaGVja19mb3JfbmV3X3R5cGUgKCJuZXciLCB5eXZzcFstMV0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTY6CisjbGluZSAxMDkzICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX25ldyAoTlVMTF9UUkVFLCBncm9rdHlwZW5hbWUoeXl2c3BbLTFdLmZ0eXBlLnQpLAorCQkJCSAgTlVMTF9UUkVFLCB5eXZzcFstM10uaXR5cGUpOyAKKwkJICBjaGVja19mb3JfbmV3X3R5cGUgKCJuZXciLCB5eXZzcFstMV0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTc6CisjbGluZSAxMDk3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX25ldyAoTlVMTF9UUkVFLCBncm9rdHlwZW5hbWUoeXl2c3BbLTJdLmZ0eXBlLnQpLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTRdLml0eXBlKTsgCisJCSAgY2hlY2tfZm9yX25ld190eXBlICgibmV3IiwgeXl2c3BbLTJdLmZ0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk4OgorI2xpbmUgMTEwMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9uZXcgKHl5dnNwWy0zXS50dHlwZSwgZ3Jva3R5cGVuYW1lKHl5dnNwWy0xXS5mdHlwZS50KSwgTlVMTF9UUkVFLCB5eXZzcFstNF0uaXR5cGUpOyAKKwkJICBjaGVja19mb3JfbmV3X3R5cGUgKCJuZXciLCB5eXZzcFstMV0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTk6CisjbGluZSAxMTAzICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX25ldyAoeXl2c3BbLTRdLnR0eXBlLCBncm9rdHlwZW5hbWUoeXl2c3BbLTJdLmZ0eXBlLnQpLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTVdLml0eXBlKTsgCisJCSAgY2hlY2tfZm9yX25ld190eXBlICgibmV3IiwgeXl2c3BbLTJdLmZ0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjAwOgorI2xpbmUgMTEwNyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBkZWxldGVfc2FuaXR5ICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFLCAwLCB5eXZzcFstMV0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDE6CisjbGluZSAxMTA5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGRlbGV0ZV9zYW5pdHkgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIDEsIHl5dnNwWy0zXS5pdHlwZSk7CisJCSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorCQkgICAgeXljaGFyID0gWVlMRVg7IDsKKyAgICBicmVhazt9CitjYXNlIDIwMjoKKyNsaW5lIDExMTMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVsZXRlX3Nhbml0eSAoeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgMiwgeXl2c3BbLTRdLml0eXBlKTsKKwkJICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisJCSAgICB5eWNoYXIgPSBZWUxFWDsgOworICAgIGJyZWFrO30KK2Nhc2UgMjAzOgorI2xpbmUgMTExNyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X3VuYXJ5X29wIChSRUFMUEFSVF9FWFBSLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIwNDoKKyNsaW5lIDExMTkgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF91bmFyeV9vcCAoSU1BR1BBUlRfRVhQUiwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDU6CisjbGluZSAxMTI0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjA2OgorI2xpbmUgMTEyNiAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgCisJCSAgcGVkd2FybiAoIm9sZCBzdHlsZSBwbGFjZW1lbnQgc3ludGF4LCB1c2UgKCkgaW5zdGVhZCIpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyMDc6CisjbGluZSAxMTM0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjA4OgorI2xpbmUgMTEzNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDIwOToKKyNsaW5lIDExMzggInBhcnNlLnkiCit7CisJCSAgY3BfZXJyb3IgKCJgJVQnIGlzIG5vdCBhIHZhbGlkIGV4cHJlc3Npb24iLCB5eXZzcFstMV0uZnR5cGUudCk7CisJCSAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDIxMDoKKyNsaW5lIDExNDYgInBhcnNlLnkiCit7CisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQysrIGZvcmJpZHMgaW5pdGlhbGl6YXRpb24gb2YgbmV3IGV4cHJlc3Npb24gd2l0aCBgPSciKTsKKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyMTE6CisjbGluZSAxMTU2ICJwYXJzZS55IgoreyB5eXZzcFstMV0uZnR5cGUudCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFstMV0uZnR5cGUudCwgdm9pZF9saXN0X25vZGUpOworCQkgIFRSRUVfUEFSTUxJU1QgKHl5dnNwWy0xXS5mdHlwZS50KSA9IDE7CisJCSAgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoTlVMTF9UUkVFLCB5eXZzcFstMV0uZnR5cGUudCwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoImNhc3QiLCB5eXZzcFstMV0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMTI6CisjbGluZSAxMTYxICJwYXJzZS55IgoreyB5eXZzcFstMV0uZnR5cGUudCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFstMV0uZnR5cGUudCwgdm9pZF9saXN0X25vZGUpOworCQkgIFRSRUVfUEFSTUxJU1QgKHl5dnNwWy0xXS5mdHlwZS50KSA9IDE7CisJCSAgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoeXl2YWwudHR5cGUsIHl5dnNwWy0xXS5mdHlwZS50LCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgY2hlY2tfZm9yX25ld190eXBlICgiY2FzdCIsIHl5dnNwWy0xXS5mdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxNDoKKyNsaW5lIDExNzAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcmVwYXJzZV9hYnNkY2xfYXNfY2FzdHMgKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxNToKKyNsaW5lIDExNzIgInBhcnNlLnkiCit7IAorCQkgIHRyZWUgaW5pdCA9IGJ1aWxkX250IChDT05TVFJVQ1RPUiwgTlVMTF9UUkVFLAorCQkJCQlucmV2ZXJzZSAoeXl2c3BbLTJdLnR0eXBlKSk7IAorCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMrKyBmb3JiaWRzIGNvbnN0cnVjdG9yLWV4cHJlc3Npb25zIik7CisJCSAgLyogSW5kaWNhdGUgdGhhdCB0aGlzIHdhcyBhIEdOVSBDIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICAqLworCQkgIFRSRUVfSEFTX0NPTlNUUlVDVE9SIChpbml0KSA9IDE7CisKKwkJICB5eXZhbC50dHlwZSA9IHJlcGFyc2VfYWJzZGNsX2FzX2Nhc3RzICh5eXZhbC50dHlwZSwgaW5pdCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDIxNzoKKyNsaW5lIDExODggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKE1FTUJFUl9SRUYsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxODoKKyNsaW5lIDExOTAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbV9jb21wb25lbnRfcmVmICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMTk6CisjbGluZSAxMTkyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjIwOgorI2xpbmUgMTE5NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyMToKKyNsaW5lIDExOTYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjI6CisjbGluZSAxMTk4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjIzOgorI2xpbmUgMTIwMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyNDoKKyNsaW5lIDEyMDIgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjU6CisjbGluZSAxMjA0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjI2OgorI2xpbmUgMTIwNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyNzoKKyNsaW5lIDEyMDggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKExUX0VYUFIsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyODoKKyNsaW5lIDEyMTAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKEdUX0VYUFIsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyOToKKyNsaW5lIDEyMTIgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzA6CisjbGluZSAxMjE0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjMxOgorI2xpbmUgMTIxNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIzMjoKKyNsaW5lIDEyMTggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfeF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzM6CisjbGluZSAxMjIwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjM0OgorI2xpbmUgMTIyMiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2JpbmFyeV9vcCAoVFJVVEhfQU5ESUZfRVhQUiwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjM1OgorI2xpbmUgMTIyNCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X2JpbmFyeV9vcCAoVFJVVEhfT1JJRl9FWFBSLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzY6CisjbGluZSAxMjI2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfY29uZGl0aW9uYWxfZXhwciAoeXl2YWwudHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzc6CisjbGluZSAxMjI4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfbW9kaWZ5X2V4cHIgKHl5dmFsLnR0eXBlLCBOT1BfRVhQUiwgeXl2c3BbMF0udHR5cGUpOworCQkgIGlmICh5eXZhbC50dHlwZSAhPSBlcnJvcl9tYXJrX25vZGUpCisgICAgICAgICAgICAgICAgICAgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICh5eXZhbC50dHlwZSwgTU9ESUZZX0VYUFIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzg6CisjbGluZSAxMjMyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfbW9kaWZ5X2V4cHIgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0uY29kZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzk6CisjbGluZSAxMjM0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3Rocm93IChOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDA6CisjbGluZSAxMjM2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3Rocm93ICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0MToKKyNsaW5lIDEyNTQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQklUX05PVF9FWFBSLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1MDoKKyNsaW5lIDEyNzAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoSU5ESVJFQ1RfUkVGLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1MToKKyNsaW5lIDEyNzIgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQUREUl9FWFBSLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1MjoKKyNsaW5lIDEyNzQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNTU6CisjbGluZSAxMjgxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGZpbmlzaF9kZWNsX3BhcnNpbmcgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI1NjoKKyNsaW5lIDEyODYgInBhcnNlLnkiCit7CisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IEJJVF9OT1RfRVhQUikKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfeF91bmFyeV9vcCAoQklUX05PVF9FWFBSLCBUUkVFX09QRVJBTkQgKHl5dmFsLnR0eXBlLCAwKSk7CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBkb19pZGVudGlmaWVyICh5eXZhbC50dHlwZSwgMSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI1OToKKyNsaW5lIDEyOTUgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHB1c2hfb2JzdGFja3MgKCZwZXJtYW5lbnRfb2JzdGFjaywgJnBlcm1hbmVudF9vYnN0YWNrKTsKKwkJICB5eXZhbC50dHlwZSA9IGNvbWJpbmVfc3RyaW5ncyAoeXl2YWwudHR5cGUpOworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICBwb3Bfb2JzdGFja3MgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI2MDoKKyNsaW5lIDEzMDMgInBhcnNlLnkiCit7IGNoYXIgY2xhc3M7CisJCSAgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7CisJCSAgY2xhc3MgPSBUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpKTsKKwkJICBpZiAoY2xhc3MgPT0gJ2UnIHx8IGNsYXNzID09ICcxJworCQkgICAgICB8fCBjbGFzcyA9PSAnMicgfHwgY2xhc3MgPT0gJzwnKQorICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGluaGliaXRzIHdhcm5pbmdzIGluIHRydXRodmFsdWVfY29udmVyc2lvbi4gICovCisJCSAgICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoeXl2YWwudHR5cGUsIEVSUk9SX01BUkspOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNjE6CisjbGluZSAxMzExICJwYXJzZS55IgoreyBjaGFyIGNsYXNzOworCQkgIHl5dmFsLnR0eXBlID0gcmVwYXJzZV9kZWNsX2FzX2V4cHIgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBjbGFzcyA9IFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFICh5eXZhbC50dHlwZSkpOworCQkgIGlmIChjbGFzcyA9PSAnZScgfHwgY2xhc3MgPT0gJzEnCisJCSAgICAgIHx8IGNsYXNzID09ICcyJyB8fCBjbGFzcyA9PSAnPCcpCisgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaW5oaWJpdHMgd2FybmluZ3MgaW4gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uLiAgKi8KKwkJICAgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICh5eXZhbC50dHlwZSwgRVJST1JfTUFSSyk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MjoKKyNsaW5lIDEzMTkgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNjM6CisjbGluZSAxMzIxICJwYXJzZS55IgoreyBpZiAoY3VycmVudF9mdW5jdGlvbl9kZWNsID09IDApCisJCSAgICB7CisJCSAgICAgIGVycm9yICgiYnJhY2VkLWdyb3VwIHdpdGhpbiBleHByZXNzaW9uIGFsbG93ZWQgb25seSBpbnNpZGUgYSBmdW5jdGlvbiIpOworCQkgICAgICBZWUVSUk9SOworCQkgICAgfQorCQkgIGtlZXBfbmV4dF9sZXZlbCAoKTsKKwkJICB5eXZhbC50dHlwZSA9IGV4cGFuZF9zdGFydF9zdG10X2V4cHIgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2NDoKKyNsaW5lIDEzMjkgInBhcnNlLnkiCit7IHRyZWUgcnRsX2V4cDsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDKysgZm9yYmlkcyBicmFjZWQtZ3JvdXBzIHdpdGhpbiBleHByZXNzaW9ucyIpOworCQkgIHJ0bF9leHAgPSBleHBhbmRfZW5kX3N0bXRfZXhwciAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICAvKiBUaGUgc3RhdGVtZW50cyBoYXZlIHNpZGUgZWZmZWN0cywgc28gdGhlIGdyb3VwIGRvZXMuICAqLworCQkgIFRSRUVfU0lERV9FRkZFQ1RTIChydGxfZXhwKSA9IDE7CisKKwkJICBpZiAoVFJFRV9DT0RFICh5eXZzcFstMV0udHR5cGUpID09IEJMT0NLKQorCQkgICAgeworCQkgICAgICAvKiBNYWtlIGEgQklORF9FWFBSIGZvciB0aGUgQkxPQ0sgYWxyZWFkeSBtYWRlLiAgKi8KKwkJICAgICAgeXl2YWwudHR5cGUgPSBidWlsZCAoQklORF9FWFBSLCBUUkVFX1RZUEUgKHJ0bF9leHApLAorCQkJCSAgTlVMTF9UUkVFLCBydGxfZXhwLCB5eXZzcFstMV0udHR5cGUpOworCQkgICAgICAvKiBSZW1vdmUgdGhlIGJsb2NrIGZyb20gdGhlIHRyZWUgYXQgdGhpcyBwb2ludC4KKwkJCSBJdCBnZXRzIHB1dCBiYWNrIGF0IHRoZSBwcm9wZXIgcGxhY2UKKwkJCSB3aGVuIHRoZSBCSU5EX0VYUFIgaXMgZXhwYW5kZWQuICAqLworCQkgICAgICBkZWxldGVfYmxvY2sgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI2NToKKyNsaW5lIDEzNTAgInBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIGN1cnJlbnRfY2xhc3NfcmVmKTsgCisgICAgICAgICAgICAgICAgICBpZiAoVFJFRV9DT0RFICh5eXZhbC50dHlwZSkgPT0gQ0FMTF9FWFBSCisgICAgICAgICAgICAgICAgICAgICAgJiYgVFJFRV9UWVBFICh5eXZhbC50dHlwZSkgIT0gdm9pZF90eXBlX25vZGUpCisJICAgICAgICAgICAgeXl2YWwudHR5cGUgPSByZXF1aXJlX2NvbXBsZXRlX3R5cGUgKHl5dmFsLnR0eXBlKTsKKyAgICAgICAgICAgICAgICA7CisgICAgYnJlYWs7fQorY2FzZSAyNjY6CisjbGluZSAxMzU3ICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfeF9mdW5jdGlvbl9jYWxsICh5eXZhbC50dHlwZSwgTlVMTF9UUkVFLCBjdXJyZW50X2NsYXNzX3JlZik7CisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IENBTExfRVhQUgorCQkgICAgICAmJiBUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKSAhPSB2b2lkX3R5cGVfbm9kZSkKKwkJICAgIHl5dmFsLnR0eXBlID0gcmVxdWlyZV9jb21wbGV0ZV90eXBlICh5eXZhbC50dHlwZSk7CisgICAgICAgICAgICAgICAgOworICAgIGJyZWFrO30KK2Nhc2UgMjY3OgorI2xpbmUgMTM2NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rX2FycmF5X2RlY2wgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNjg6CisjbGluZSAxMzY2ICJwYXJzZS55IgoreyAvKiBJZiB3ZSBnZXQgYW4gT0ZGU0VUX1JFRiwgdHVybiBpdCBpbnRvIHdoYXQgaXQgcmVhbGx5CisJCSAgICAgbWVhbnMgKGUuZy4sIGEgQ09NUE9ORU5UX1JFRikuICBUaGlzIHdheSBpZiB3ZSd2ZSBnb3QsCisJCSAgICAgc2F5LCBhIHJlZmVyZW5jZSB0byBhIHN0YXRpYyBtZW1iZXIgdGhhdCdzIGJlaW5nIG9wZXJhdGVkCisJCSAgICAgb24sIHdlIGRvbid0IGVuZCB1cCB0cnlpbmcgdG8gZmluZCBhIG1lbWJlciBvcGVyYXRvciBmb3IKKwkJICAgICB0aGUgY2xhc3MgaXQncyBpbi4gICovCisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IE9GRlNFVF9SRUYpCisJCSAgICB5eXZhbC50dHlwZSA9IHJlc29sdmVfb2Zmc2V0X3JlZiAoeXl2YWwudHR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfeF91bmFyeV9vcCAoUE9TVElOQ1JFTUVOVF9FWFBSLCB5eXZhbC50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2OToKKyNsaW5lIDEzNzUgInBhcnNlLnkiCit7IGlmIChUUkVFX0NPREUgKHl5dmFsLnR0eXBlKSA9PSBPRkZTRVRfUkVGKQorCQkgICAgeXl2YWwudHR5cGUgPSByZXNvbHZlX29mZnNldF9yZWYgKHl5dmFsLnR0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfdW5hcnlfb3AgKFBPU1RERUNSRU1FTlRfRVhQUiwgeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzA6CisjbGluZSAxMzgwICJwYXJzZS55IgoreyBpZiAoY3VycmVudF9jbGFzc19wdHIpCisJCSAgICB7CisjaWZkZWYgV0FSTklOR19BQk9VVF9DQ0QKKwkJICAgICAgVFJFRV9VU0VEIChjdXJyZW50X2NsYXNzX3B0cikgPSAxOworI2VuZGlmCisJCSAgICAgIHl5dmFsLnR0eXBlID0gY3VycmVudF9jbGFzc19wdHI7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoY3VycmVudF9mdW5jdGlvbl9kZWNsCisJCQkgICAmJiBERUNMX1NUQVRJQ19GVU5DVElPTl9QIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpKQorCQkgICAgeworCQkgICAgICBlcnJvciAoImB0aGlzJyBpcyB1bmF2YWlsYWJsZSBmb3Igc3RhdGljIG1lbWJlciBmdW5jdGlvbnMiKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKQorCQkJZXJyb3IgKCJpbnZhbGlkIHVzZSBvZiBgdGhpcycgaW4gbm9uLW1lbWJlciBmdW5jdGlvbiIpOworCQkgICAgICBlbHNlCisJCQllcnJvciAoImludmFsaWQgdXNlIG9mIGB0aGlzJyBhdCB0b3AgbGV2ZWwiKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI3MToKKyNsaW5lIDE0MDMgInBhcnNlLnkiCit7CisJCSAgdHJlZSB0eXBlOworCQkgIHRyZWUgaWQgPSB5eXZhbC50dHlwZTsKKworCQkgIC8qIFRoaXMgaXMgYSBDIGNhc3QgaW4gQysrJ3MgYGZ1bmN0aW9uYWwnIG5vdGF0aW9uLiAgKi8KKwkJICBpZiAoeXl2c3BbLTFdLnR0eXBlID09IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorI2lmIDAKKwkJICBpZiAoeXl2c3BbLTFdLnR0eXBlID09IE5VTExfVFJFRSkKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJjYW5ub3QgY2FzdCBudWxsIGxpc3QgdG8gdHlwZSBgJXMnIiwKKwkJICAgICAgICAgICAgIElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9OQU1FIChpZCkpKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorI2VuZGlmCisjaWYgMAorCQkgIC8qIHR5cGUgaXMgbm90IHNldCEgKG1ycykgKi8KKwkJICBpZiAodHlwZSA9PSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJICBlbHNlCisjZW5kaWYKKwkJICAgIHsKKwkJICAgICAgaWYgKGlkID09IHJpZHBvaW50ZXJzWyhpbnQpIFJJRF9DT05TVF0pCisJCSAgICAgICAgdHlwZSA9IGJ1aWxkX3R5cGVfdmFyaWFudCAoaW50ZWdlcl90eXBlX25vZGUsIDEsIDApOworCQkgICAgICBlbHNlIGlmIChpZCA9PSByaWRwb2ludGVyc1soaW50KSBSSURfVk9MQVRJTEVdKQorCQkgICAgICAgIHR5cGUgPSBidWlsZF90eXBlX3ZhcmlhbnQgKGludGVnZXJfdHlwZV9ub2RlLCAwLCAxKTsKKyNpZiAwCisJCSAgICAgIC8qIHNob3VsZCBub3QgYmUgYWJsZSB0byBnZXQgaGVyZSAobXJzKSAqLworCQkgICAgICBlbHNlIGlmIChpZCA9PSByaWRwb2ludGVyc1soaW50KSBSSURfRlJJRU5EXSkKKwkJICAgICAgICB7CisJCSAgICAgICAgICBlcnJvciAoImNhbm5vdCBjYXN0IGV4cHJlc3Npb24gdG8gYGZyaWVuZCcgdHlwZSIpOworCQkgICAgICAgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICAgICAgICBicmVhazsKKwkJICAgICAgICB9CisjZW5kaWYKKwkJICAgICAgZWxzZSBteV9mcmllbmRseV9hYm9ydCAoNzkpOworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX2NfY2FzdCAodHlwZSwgYnVpbGRfY29tcG91bmRfZXhwciAoeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI3MzoKKyNsaW5lIDE0NDggInBhcnNlLnkiCit7IHRyZWUgdHlwZSA9IGdyb2t0eXBlbmFtZSAoeXl2c3BbLTRdLmZ0eXBlLnQpOworCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoImR5bmFtaWNfY2FzdCIsIHl5dnNwWy00XS5mdHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9keW5hbWljX2Nhc3QgKHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3NDoKKyNsaW5lIDE0NTIgInBhcnNlLnkiCit7IHRyZWUgdHlwZSA9IGdyb2t0eXBlbmFtZSAoeXl2c3BbLTRdLmZ0eXBlLnQpOworCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoInN0YXRpY19jYXN0IiwgeXl2c3BbLTRdLmZ0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3N0YXRpY19jYXN0ICh0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzU6CisjbGluZSAxNDU2ICJwYXJzZS55IgoreyB0cmVlIHR5cGUgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy00XS5mdHlwZS50KTsKKwkJICBjaGVja19mb3JfbmV3X3R5cGUgKCJyZWludGVycHJldF9jYXN0IiwgeXl2c3BbLTRdLmZ0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QgKHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3NjoKKyNsaW5lIDE0NjAgInBhcnNlLnkiCit7IHRyZWUgdHlwZSA9IGdyb2t0eXBlbmFtZSAoeXl2c3BbLTRdLmZ0eXBlLnQpOworCQkgIGNoZWNrX2Zvcl9uZXdfdHlwZSAoImNvbnN0X2Nhc3QiLCB5eXZzcFstNF0uZnR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfY29uc3RfY2FzdCAodHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc3OgorI2xpbmUgMTQ2NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF94X3R5cGVpZCAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc4OgorI2xpbmUgMTQ2NiAicGFyc2UueSIKK3sgdHJlZSB0eXBlID0gZ3Jva3R5cGVuYW1lICh5eXZzcFstMV0uZnR5cGUudCk7CisJCSAgY2hlY2tfZm9yX25ld190eXBlICgidHlwZWlkIiwgeXl2c3BbLTFdLmZ0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGdldF90eXBlaWQgKFRZUEVfTUFJTl9WQVJJQU5UICh0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3OToKKyNsaW5lIDE0NzAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZG9fc2NvcGVkX2lkICh5eXZzcFswXS50dHlwZSwgMSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI4MDoKKyNsaW5lIDE0NzIgInBhcnNlLnkiCit7CisJCSAgZ290X3Njb3BlID0gTlVMTF9UUkVFOworCQkgIGlmIChUUkVFX0NPREUgKHl5dnNwWzBdLnR0eXBlKSA9PSBJREVOVElGSUVSX05PREUpCisJCSAgICB5eXZhbC50dHlwZSA9IGRvX3Njb3BlZF9pZCAoeXl2c3BbMF0udHR5cGUsIDEpOworCQkgIGVsc2UKKwkJICAgIHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI4MToKKyNsaW5lIDE0ODAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfb2Zmc2V0X3JlZiAoT1AwICh5eXZhbC50dHlwZSksIE9QMSAoeXl2YWwudHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgyOgorI2xpbmUgMTQ4MiAicGFyc2UueSIKK3sgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWluX250IChDQUxMX0VYUFIsIGNvcHlfdG9fcGVybWFuZW50ICh5eXZzcFstM10udHR5cGUpLCB5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSk7CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBidWlsZF9tZW1iZXJfY2FsbCAoT1AwICh5eXZhbC50dHlwZSksIE9QMSAoeXl2YWwudHR5cGUpLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODM6CisjbGluZSAxNDg3ICJwYXJzZS55IgoreyBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeXl2YWwudHR5cGUgPSBidWlsZF9taW5fbnQgKENBTExfRVhQUiwgY29weV90b19wZXJtYW5lbnQgKHl5dnNwWy0xXS50dHlwZSksIAorCQkJCSAgICAgICBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBidWlsZF9tZW1iZXJfY2FsbCAoT1AwICh5eXZhbC50dHlwZSksIE9QMSAoeXl2YWwudHR5cGUpLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODQ6CisjbGluZSAxNDkzICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfY29tcG9uZW50X3JlZiAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIDEpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODU6CisjbGluZSAxNDk1ICJwYXJzZS55IgoreyBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeXl2YWwudHR5cGUgPSBidWlsZF9taW5fbnQgKENPTVBPTkVOVF9SRUYsIHl5dnNwWy0xXS50dHlwZSwgY29weV90b19wZXJtYW5lbnQgKHl5dnNwWzBdLnR0eXBlKSk7CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBidWlsZF9vYmplY3RfcmVmICh5eXZhbC50dHlwZSwgT1AwICh5eXZzcFswXS50dHlwZSksIE9QMSAoeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg2OgorI2xpbmUgMTUwMCAicGFyc2UueSIKK3sKKyNpZiAwCisJCSAgLyogVGhpcyBpcyBhIGZ1dHVyZSBkaXJlY3Rpb24gb2YgdGhpcyBjb2RlLCBidXQgYmVjYXVzZQorCQkgICAgIGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBjYW5ub3QgYWx3YXlzIHVuZG8gd2hhdCBpcyBkb25lCisJCSAgICAgaW4gYnVpbGRfY29tcG9uZW50X3JlZiBlbnRpcmVseSB5ZXQsIHdlIGNhbm5vdCBkbyB0aGlzLiAgKi8KKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCAoYnVpbGRfY29tcG9uZW50X3JlZiAoeXl2YWwudHR5cGUsIHl5dnNwWy0zXS50dHlwZSwgTlVMTF9UUkVFLCAxKSwgeXl2c3BbLTFdLnR0eXBlLCBjdXJyZW50X2NsYXNzX3JlZik7CisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IENBTExfRVhQUgorCQkgICAgICAmJiBUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKSAhPSB2b2lkX3R5cGVfbm9kZSkKKwkJICAgIHl5dmFsLnR0eXBlID0gcmVxdWlyZV9jb21wbGV0ZV90eXBlICh5eXZhbC50dHlwZSk7CisjZWxzZQorCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWV0aG9kX2NhbGwgKHl5dmFsLnR0eXBlLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgTlVMTF9UUkVFLAorCQkJCQkgIExPT0tVUF9OT1JNQUwpOworI2VuZGlmCisJCTsKKyAgICBicmVhazt9CitjYXNlIDI4NzoKKyNsaW5lIDE1MTUgInBhcnNlLnkiCit7CisjaWYgMAorCQkgIC8qIFRoaXMgaXMgYSBmdXR1cmUgZGlyZWN0aW9uIG9mIHRoaXMgY29kZSwgYnV0IGJlY2F1c2UKKwkJICAgICBidWlsZF94X2Z1bmN0aW9uX2NhbGwgY2Fubm90IGFsd2F5cyB1bmRvIHdoYXQgaXMgZG9uZQorCQkgICAgIGluIGJ1aWxkX2NvbXBvbmVudF9yZWYgZW50aXJlbHkgeWV0LCB3ZSBjYW5ub3QgZG8gdGhpcy4gICovCisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF94X2Z1bmN0aW9uX2NhbGwgKGJ1aWxkX2NvbXBvbmVudF9yZWYgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSwgMSksIE5VTExfVFJFRSwgY3VycmVudF9jbGFzc19yZWYpOworCQkgIGlmIChUUkVFX0NPREUgKHl5dmFsLnR0eXBlKSA9PSBDQUxMX0VYUFIKKwkJICAgICAgJiYgVFJFRV9UWVBFICh5eXZhbC50dHlwZSkgIT0gdm9pZF90eXBlX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IHJlcXVpcmVfY29tcGxldGVfdHlwZSAoeXl2YWwudHR5cGUpOworI2Vsc2UKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX21ldGhvZF9jYWxsICh5eXZhbC50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUsIE5VTExfVFJFRSwKKwkJCQkJICBMT09LVVBfTk9STUFMKTsKKyNlbmRpZgorCQk7CisgICAgYnJlYWs7fQorY2FzZSAyODg6CisjbGluZSAxNTMwICJwYXJzZS55IgoreworCQkgIGlmIChJU19TSUdOQVRVUkUgKE9QMCAoeXl2c3BbLTNdLnR0eXBlKSkpCisJCSAgICB7CisJCSAgICAgIHdhcm5pbmcgKCJzaWduYXR1cmUgbmFtZSBpbiBzY29wZSByZXNvbHV0aW9uIGlnbm9yZWQiKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBidWlsZF9tZXRob2RfY2FsbCAoeXl2YWwudHR5cGUsIE9QMSAoeXl2c3BbLTNdLnR0eXBlKSwgeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUsCisJCQkJCSAgICAgIExPT0tVUF9OT1JNQUwpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsICh5eXZhbC50dHlwZSwgT1AwICh5eXZzcFstM10udHR5cGUpLCBPUDEgKHl5dnNwWy0zXS50dHlwZSksIHl5dnNwWy0xXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI4OToKKyNsaW5lIDE1NDEgInBhcnNlLnkiCit7CisJCSAgaWYgKElTX1NJR05BVFVSRSAoT1AwICh5eXZzcFstMV0udHR5cGUpKSkKKwkJICAgIHsKKwkJICAgICAgd2FybmluZyAoInNpZ25hdHVyZSBuYW1lIGluIHNjb3BlIHJlc29sdXRpb24gaWdub3JlZCIpOworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX21ldGhvZF9jYWxsICh5eXZhbC50dHlwZSwgT1AxICh5eXZzcFstMV0udHR5cGUpLCBOVUxMX1RSRUUsIE5VTExfVFJFRSwKKwkJCQkJICAgICAgTE9PS1VQX05PUk1BTCk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwgKHl5dmFsLnR0eXBlLCBPUDAgKHl5dnNwWy0xXS50dHlwZSksIE9QMSAoeXl2c3BbLTFdLnR0eXBlKSwgTlVMTF9UUkVFKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMjkwOgorI2xpbmUgMTU1MyAicGFyc2UueSIKK3sKKwkJICBpZiAoSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgKHl5dnNwWy0xXS50dHlwZSkKKwkJICAgICAgJiYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFICh5eXZzcFstM10udHR5cGUpKSAKKwkJCSAgIT0gVFJFRV9DT0RFIChUUkVFX1RZUEUgKElERU5USUZJRVJfR0xPQkFMX1ZBTFVFICh5eXZzcFstMV0udHR5cGUpKSkpKQorCQkgICAgY3BfZXJyb3IgKCJgJUUnIGlzIG5vdCBvZiB0eXBlIGAlVCciLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBjcF9jb252ZXJ0ICh2b2lkX3R5cGVfbm9kZSwgeXl2c3BbLTNdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMjkxOgorI2xpbmUgMTU2MSAicGFyc2UueSIKK3sKKwkJICBpZiAoeXl2c3BbLTRdLnR0eXBlICE9IHl5dnNwWy0xXS50dHlwZSkKKwkJICAgIGNwX2Vycm9yICgiZGVzdHJ1Y3RvciBzcGVjaWZpZXIgYCVUOjp+JVQoKScgbXVzdCBoYXZlIG1hdGNoaW5nIG5hbWVzIiwgeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGlmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAoeXl2c3BbLTVdLnR0eXBlKSkKKwkJICAgICAgIT0gVFJFRV9DT0RFIChUUkVFX1RZUEUgKElERU5USUZJRVJfR0xPQkFMX1ZBTFVFICh5eXZzcFstNF0udHR5cGUpKSkpCisJCSAgICBjcF9lcnJvciAoImAlRScgaXMgbm90IG9mIHR5cGUgYCVUJyIsIHl5dnNwWy01XS50dHlwZSwgeXl2c3BbLTRdLnR0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGNwX2NvbnZlcnQgKHZvaWRfdHlwZV9ub2RlLCB5eXZzcFstNV0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyOTI6CisjbGluZSAxNTcwICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyOTM6CisjbGluZSAxNjE1ICJwYXJzZS55IgoreyB5eXZhbC5pdHlwZSA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDI5NDoKKyNsaW5lIDE2MTcgInBhcnNlLnkiCit7IGdvdF9zY29wZSA9IE5VTExfVFJFRTsgeXl2YWwuaXR5cGUgPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTU6CisjbGluZSAxNjIyICJwYXJzZS55IgoreyB5eXZhbC5pdHlwZSA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDI5NjoKKyNsaW5lIDE2MjQgInBhcnNlLnkiCit7IGdvdF9zY29wZSA9IE5VTExfVFJFRTsgeXl2YWwuaXR5cGUgPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTc6CisjbGluZSAxNjI5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJvb2xlYW5fdHJ1ZV9ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTg6CisjbGluZSAxNjMxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJvb2xlYW5fZmFsc2Vfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzAwOgorI2xpbmUgMTYzOCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMDE6CisjbGluZSAxNjQzICJwYXJzZS55IgoreworCQkgIGlmICghIGN1cnJlbnRfZnVuY3Rpb25fcGFybXNfc3RvcmVkKQorCQkgICAgc3RvcmVfcGFybV9kZWNscyAoKTsKKwkJICBzZXR1cF92dGJsX3B0ciAoKTsKKwkJICAvKiBBbHdheXMga2VlcCB0aGUgQkxPQ0sgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIG91dGVybW9zdAorCQkgICAgIHBhaXIgb2YgY3VybGV5IGJyYWNlcyBvZiBhIGZ1bmN0aW9uLiAgVGhlc2UgYXJlIG5lZWRlZAorCQkgICAgIGZvciBjb3JyZWN0IG9wZXJhdGlvbiBvZiBkd2FyZm91dC5jLiAgKi8KKwkJICBrZWVwX25leHRfbGV2ZWwgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDMwMjoKKyNsaW5lIDE2NTYgInBhcnNlLnkiCit7IGdvdF9vYmplY3QgPSBUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzAzOgorI2xpbmUgMTY1OCAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3hfYXJyb3cgKHl5dmFsLnR0eXBlKTsgCisJCSAgZ290X29iamVjdCA9IFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAzMDQ6CisjbGluZSAxNjY2ICJwYXJzZS55IgoreworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7CisJCSAgaWYgKHl5dnNwWy0yXS5mdHlwZS50ICYmIElTX0FHR1JfVFlQRV9DT0RFIChUUkVFX0NPREUgKHl5dnNwWy0yXS5mdHlwZS50KSkpCisJCSAgICBub3RlX2dvdF9zZW1pY29sb24gKHl5dnNwWy0yXS5mdHlwZS50KTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMzA1OgorI2xpbmUgMTY3MiAicGFyc2UueSIKK3sKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMV0uaXR5cGUpOworCQkgIG5vdGVfbGlzdF9nb3Rfc2VtaWNvbG9uICh5eXZzcFstMl0uZnR5cGUudCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDMwNjoKKyNsaW5lIDE2NzcgInBhcnNlLnkiCit7IHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMwNzoKKyNsaW5lIDE2NzkgInBhcnNlLnkiCit7CisJCSAgc2hhZG93X3RhZyAoeXl2c3BbLTFdLmZ0eXBlLnQpOworCQkgIG5vdGVfbGlzdF9nb3Rfc2VtaWNvbG9uICh5eXZzcFstMV0uZnR5cGUudCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDMwODoKKyNsaW5lIDE2ODQgInBhcnNlLnkiCit7IHdhcm5pbmcgKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMDk6CisjbGluZSAxNjg2ICJwYXJzZS55IgoreyBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzEyOgorI2xpbmUgMTcwMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoTlVMTF9UUkVFLCBlbXB0eV9wYXJtcyAoKSwKKwkJCQkJICAgICBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMxMzoKKyNsaW5lIDE3MDMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dmFsLnR0eXBlLCBlbXB0eV9wYXJtcyAoKSwgTlVMTF9UUkVFLAorCQkJCQkgICAgIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMxNDoKKyNsaW5lIDE3MTAgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBidWlsZF9kZWNsX2xpc3QgKHl5dnNwWy0xXS5mdHlwZS50LCB5eXZzcFswXS50dHlwZSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzE1OgorI2xpbmUgMTcxMyAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX2RlY2xfbGlzdCAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWy0xXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTY6CisjbGluZSAxNzE2ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0gYnVpbGRfZGVjbF9saXN0IChnZXRfZGVjbF9saXN0ICh5eXZzcFstMV0uZnR5cGUudCksIHl5dnNwWzBdLnR0eXBlKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWy0xXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTc6CisjbGluZSAxNzE5ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0gYnVpbGRfZGVjbF9saXN0ICh5eXZzcFswXS5mdHlwZS50LCBOVUxMX1RSRUUpOworCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFswXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyAgOworICAgIGJyZWFrO30KK2Nhc2UgMzE4OgorI2xpbmUgMTcyMiAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX2RlY2xfbGlzdCAoeXl2c3BbMF0uZnR5cGUudCwgTlVMTF9UUkVFKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWzBdLmZ0eXBlLm5ld190eXBlX2ZsYWc7IDsKKyAgICBicmVhazt9CitjYXNlIDMyMToKKyNsaW5lIDE3MzggInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBkZWNsX3RyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50LCB5eXZzcFstMV0udHR5cGUpOyAKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0geXl2c3BbMF0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzIyOgorI2xpbmUgMTc0MSAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS5mdHlwZS50LCB5eXZzcFswXS50dHlwZSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzIzOgorI2xpbmUgMTc0NCAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0yXS5mdHlwZS50LCBjaGFpbm9uICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMl0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI0OgorI2xpbmUgMTc0NyAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS5mdHlwZS50LCBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlKSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI1OgorI2xpbmUgMTc1MCAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS5mdHlwZS50LCBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlKSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI2OgorI2xpbmUgMTc1MyAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0yXS5mdHlwZS50LAorCQkJCQkgY2hhaW5vbiAoeXl2c3BbLTFdLnR0eXBlLCBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlKSkpOyAKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0geXl2c3BbLTJdLmZ0eXBlLm5ld190eXBlX2ZsYWc7IDsKKyAgICBicmVhazt9CitjYXNlIDMyNzoKKyNsaW5lIDE3NjAgInBhcnNlLnkiCit7IGlmIChleHRyYV93YXJuaW5ncykKKwkJICAgIHdhcm5pbmcgKCJgJXMnIGlzIG5vdCBhdCBiZWdpbm5pbmcgb2YgZGVjbGFyYXRpb24iLAorCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKHl5dmFsLnR0eXBlKSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9kZWNsX2xpc3QgKE5VTExfVFJFRSwgeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjg6CisjbGluZSAxNzY1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLmZ0eXBlLnQsIHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI5OgorI2xpbmUgMTc2NyAicGFyc2UueSIKK3sgaWYgKGV4dHJhX3dhcm5pbmdzKQorCQkgICAgd2FybmluZyAoImAlcycgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiIsCisJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsKKwkJICB5eXZhbC50dHlwZSA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZhbC50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMDoKKyNsaW5lIDE3NzIgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMToKKyNsaW5lIDE3NzQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMjoKKyNsaW5lIDE3ODQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0uZnR5cGUudDsgVFJFRV9TVEFUSUMgKHl5dmFsLnR0eXBlKSA9IDE7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMzoKKyNsaW5lIDE3ODYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gSURFTlRJRklFUl9BU19MSVNUICh5eXZhbC50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNDoKKyNsaW5lIDE3ODggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dmFsLnR0eXBlKTsKKwkJICBUUkVFX1NUQVRJQyAoeXl2YWwudHR5cGUpID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzM1OgorI2xpbmUgMTc5MSAicGFyc2UueSIKK3sgaWYgKGV4dHJhX3dhcm5pbmdzICYmIFRSRUVfU1RBVElDICh5eXZhbC50dHlwZSkpCisJCSAgICB3YXJuaW5nICgiYCVzJyBpcyBub3QgYXQgYmVnaW5uaW5nIG9mIGRlY2xhcmF0aW9uIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFswXS50dHlwZSkpOworCQkgIHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dmFsLnR0eXBlKTsKKwkJICBUUkVFX1NUQVRJQyAoeXl2YWwudHR5cGUpID0gVFJFRV9TVEFUSUMgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNjoKKyNsaW5lIDE3OTcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNzoKKyNsaW5lIDE3OTkgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzODoKKyNsaW5lIDE4MTAgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBnZXRfZGVjbF9saXN0ICh5eXZzcFswXS5mdHlwZS50KTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWzBdLmZ0eXBlLm5ld190eXBlX2ZsYWc7IDsKKyAgICBicmVhazt9CitjYXNlIDMzOToKKyNsaW5lIDE4MTMgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBkZWNsX3RyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50LCB5eXZzcFstMV0uZnR5cGUudCk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFswXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDA6CisjbGluZSAxODE2ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0gZGVjbF90cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWy0xXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDE6CisjbGluZSAxODE5ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0gZGVjbF90cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLmZ0eXBlLnQsIGNoYWlub24gKHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMl0uZnR5cGUudCkpOyAKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0geXl2c3BbLTJdLmZ0eXBlLm5ld190eXBlX2ZsYWc7IDsKKyAgICBicmVhazt9CitjYXNlIDM0MjoKKyNsaW5lIDE4MjUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZGVjbF9saXN0IChOVUxMX1RSRUUsIHl5dnNwWzBdLmZ0eXBlLnQpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDM6CisjbGluZSAxODI3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLmZ0eXBlLnQsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM0NToKKyNsaW5lIDE4MzcgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSB5eXZzcFswXS50dHlwZTsgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDM0NjoKKyNsaW5lIDE4MzkgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSB5eXZzcFswXS50dHlwZTsgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDM0NzoKKyNsaW5lIDE4NDEgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBUUkVFX1RZUEUgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDM0ODoKKyNsaW5lIDE4NDQgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS5mdHlwZS50KTsKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQ5OgorI2xpbmUgMTg0NyAicGFyc2UueSIKK3sgdHJlZSB0eXBlID0gVFJFRV9UWVBFICh5eXZzcFstMV0udHR5cGUpOworCisgICAgICAgICAgICAgICAgICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0gMDsKKwkJICBpZiAoSVNfQUdHUl9UWVBFICh0eXBlKSkKKwkJICAgIHsKKwkJICAgICAgc29ycnkgKCJzaWdvZiB0eXBlIHNwZWNpZmllciIpOworCQkgICAgICB5eXZhbC5mdHlwZS50ID0gdHlwZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVycm9yICgiYHNpZ29mJyBhcHBsaWVkIHRvIG5vbi1hZ2dyZWdhdGUgZXhwcmVzc2lvbiIpOworCQkgICAgICB5eXZhbC5mdHlwZS50ID0gZXJyb3JfbWFya19ub2RlOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSAzNTA6CisjbGluZSAxODYyICJwYXJzZS55IgoreyB0cmVlIHR5cGUgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS5mdHlwZS50KTsKKworICAgICAgICAgICAgICAgICAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDA7CisJCSAgaWYgKElTX0FHR1JfVFlQRSAodHlwZSkpCisJCSAgICB7CisJCSAgICAgIHNvcnJ5ICgic2lnb2YgdHlwZSBzcGVjaWZpZXIiKTsKKwkJICAgICAgeXl2YWwuZnR5cGUudCA9IHR5cGU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBlcnJvcigiYHNpZ29mJyBhcHBsaWVkIHRvIG5vbi1hZ2dyZWdhdGUgdHlwZSIpOworCQkgICAgICB5eXZhbC5mdHlwZS50ID0gZXJyb3JfbWFya19ub2RlOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSAzNTE6CisjbGluZSAxODgyICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0geXl2c3BbMF0udHR5cGU7IHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNTI6CisjbGluZSAxODg0ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0geXl2c3BbMF0udHR5cGU7IHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjA6CisjbGluZSAxOTA1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzYxOgorI2xpbmUgMTkwNyAicGFyc2UueSIKK3sgaWYgKFRSRUVfQ0hBSU4gKHl5dnNwWy0xXS50dHlwZSkpIHl5dnNwWy0xXS50dHlwZSA9IGNvbWJpbmVfc3RyaW5ncyAoeXl2c3BbLTFdLnR0eXBlKTsgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDM2MjoKKyNsaW5lIDE5MTIgInBhcnNlLnkiCit7IHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstNF0udHR5cGUsICZjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkgICAgICZwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgaWYgKGN1cnJlbnRfZGVjbHNwZWNzCisJCSAgICAgICYmIFRSRUVfQ09ERSAoY3VycmVudF9kZWNsc3BlY3MpICE9IFRSRUVfTElTVCkKKwkJICAgIGN1cnJlbnRfZGVjbHNwZWNzID0gZ2V0X2RlY2xfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MpOworCQkgIGlmIChoYXZlX2V4dGVybl9zcGVjICYmICF1c2VkX2V4dGVybl9zcGVjKQorCQkgICAgeworCQkgICAgICBjdXJyZW50X2RlY2xzcGVjcyA9IGRlY2xfdHJlZV9jb25zCisJCQkoTlVMTF9UUkVFLCBnZXRfaWRlbnRpZmllciAoImV4dGVybiIpLCAKKwkJCSBjdXJyZW50X2RlY2xzcGVjcyk7CisJCSAgICAgIHVzZWRfZXh0ZXJuX3NwZWMgPSAxOworCQkgICAgfQorCQkgIHl5dnNwWzBdLml0eXBlID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgeXl2YWwudHR5cGUgPSBzdGFydF9kZWNsICh5eXZzcFstM10udHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCAxKTsKKwkJICBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzYzOgorI2xpbmUgMTkyOSAicGFyc2UueSIKK3sgY3BfZmluaXNoX2RlY2wgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy00XS50dHlwZSwgMSwgTE9PS1VQX09OTFlDT05WRVJUSU5HKTsKKwkJICB5eXZhbC5pdHlwZSA9IHl5dnNwWy0yXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY0OgorI2xpbmUgMTkzMiAicGFyc2UueSIKK3sgdHJlZSBkOworCQkgIHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstM10udHR5cGUsICZjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkgICAgICZwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgaWYgKGN1cnJlbnRfZGVjbHNwZWNzCisJCSAgICAgICYmIFRSRUVfQ09ERSAoY3VycmVudF9kZWNsc3BlY3MpICE9IFRSRUVfTElTVCkKKwkJICAgIGN1cnJlbnRfZGVjbHNwZWNzID0gZ2V0X2RlY2xfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MpOworCQkgIGlmIChoYXZlX2V4dGVybl9zcGVjICYmICF1c2VkX2V4dGVybl9zcGVjKQorCQkgICAgeworCQkgICAgICBjdXJyZW50X2RlY2xzcGVjcyA9IGRlY2xfdHJlZV9jb25zCisJCQkoTlVMTF9UUkVFLCBnZXRfaWRlbnRpZmllciAoImV4dGVybiIpLCAKKwkJCSBjdXJyZW50X2RlY2xzcGVjcyk7CisJCSAgICAgIHVzZWRfZXh0ZXJuX3NwZWMgPSAxOworCQkgICAgfQorCQkgIHl5dmFsLml0eXBlID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgZCA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0yXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDApOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoZCwgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBjcF9maW5pc2hfZGVjbCAoZCwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUsIDEsIDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjU6CisjbGluZSAxOTUzICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0zXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDEpOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjY6CisjbGluZSAxOTU3ICJwYXJzZS55IgoreyBjcF9maW5pc2hfZGVjbCAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTRdLnR0eXBlLCAxLCBMT09LVVBfT05MWUNPTlZFUlRJTkcpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjc6CisjbGluZSAxOTU5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0yXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDApOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgY3BfZmluaXNoX2RlY2wgKHl5dmFsLnR0eXBlLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSwgMSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM2ODoKKyNsaW5lIDE5NjYgInBhcnNlLnkiCit7IHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstNF0udHR5cGUsICZjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkgICAgICZwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgeXl2c3BbMF0uaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0zXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDEpOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjk6CisjbGluZSAxOTczICJwYXJzZS55IgoreyBjcF9maW5pc2hfZGVjbCAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTRdLnR0eXBlLCAxLCBMT09LVVBfT05MWUNPTlZFUlRJTkcpOworCQkgIHl5dmFsLml0eXBlID0geXl2c3BbLTJdLml0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzA6CisjbGluZSAxOTc2ICJwYXJzZS55IgoreyB0cmVlIGQ7CisJCSAgc3BsaXRfc3BlY3NfYXR0cnMgKHl5dnNwWy0zXS50dHlwZSwgJmN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCSAgICAgJnByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICB5eXZhbC5pdHlwZSA9IHN1c3BlbmRfbW9tZW50YXJ5ICgpOworCQkgIGQgPSBzdGFydF9kZWNsICh5eXZzcFstMl0udHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCAwKTsKKwkJICBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgKGQsIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgY3BfZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlLCAxLCAwKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzcxOgorI2xpbmUgMTk4NyAicGFyc2UueSIKK3sgY3VycmVudF9kZWNsc3BlY3MgPSBOVUxMX1RSRUU7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBOVUxMX1RSRUU7CisJCSAgeXl2c3BbMF0uaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0zXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDEpOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzI6CisjbGluZSAxOTk0ICJwYXJzZS55IgoreyBjcF9maW5pc2hfZGVjbCAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTRdLnR0eXBlLCAxLCBMT09LVVBfT05MWUNPTlZFUlRJTkcpOworCQkgIHl5dmFsLml0eXBlID0geXl2c3BbLTJdLml0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzM6CisjbGluZSAxOTk3ICJwYXJzZS55IgoreyB0cmVlIGQ7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBOVUxMX1RSRUU7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBOVUxMX1RSRUU7CisJCSAgeXl2YWwuaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICBkID0gc3RhcnRfZGVjbCAoeXl2c3BbLTJdLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgMCk7CisJCSAgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzIChkLCB5eXZzcFswXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOworCQkgIGNwX2ZpbmlzaF9kZWNsIChkLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSwgMSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM3NDoKKyNsaW5lIDIwMTAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzU6CisjbGluZSAyMDEyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzY6CisjbGluZSAyMDE3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzc6CisjbGluZSAyMDE5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzg6CisjbGluZSAyMDI0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0yXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzc5OgorI2xpbmUgMjAyOSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzgwOgorI2xpbmUgMjAzMSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzgxOgorI2xpbmUgMjAzNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDM4MjoKKyNsaW5lIDIwMzggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzgzOgorI2xpbmUgMjA0MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0zXS50dHlwZSwgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzODQ6CisjbGluZSAyMDQyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTVdLnR0eXBlLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzg1OgorI2xpbmUgMjA0NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzkwOgorI2xpbmUgMjA2MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTE6CisjbGluZSAyMDYyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM5MjoKKyNsaW5lIDIwNjcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTM6CisjbGluZSAyMDY5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTU6CisjbGluZSAyMDc3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChDT05TVFJVQ1RPUiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCQkgIFRSRUVfSEFTX0NPTlNUUlVDVE9SICh5eXZhbC50dHlwZSkgPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTY6CisjbGluZSAyMDgwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChDT05TVFJVQ1RPUiwgTlVMTF9UUkVFLCBucmV2ZXJzZSAoeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgVFJFRV9IQVNfQ09OU1RSVUNUT1IgKHl5dmFsLnR0eXBlKSA9IDE7IDsKKyAgICBicmVhazt9CitjYXNlIDM5NzoKKyNsaW5lIDIwODMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKENPTlNUUlVDVE9SLCBOVUxMX1RSRUUsIG5yZXZlcnNlICh5eXZzcFstMl0udHR5cGUpKTsKKwkJICBUUkVFX0hBU19DT05TVFJVQ1RPUiAoeXl2YWwudHR5cGUpID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzk4OgorI2xpbmUgMjA4NiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDM5OToKKyNsaW5lIDIwOTMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDAwOgorI2xpbmUgMjA5NSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDAxOgorI2xpbmUgMjA5OCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MDI6CisjbGluZSAyMTAwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MDM6CisjbGluZSAyMTAyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDA0OgorI2xpbmUgMjEwNCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDA1OgorI2xpbmUgMjEwOSAicGFyc2UueSIKK3sgc3RhcnRfZnVuY3Rpb24gKE5VTExfVFJFRSwgVFJFRV9WQUxVRSAoeXl2c3BbMF0udHR5cGUpLAorCQkJCSAgTlVMTF9UUkVFLCAxKTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MDY6CisjbGluZSAyMTE1ICJwYXJzZS55IgoreworCQkgIGludCBuZXN0ZWQgPSAoaGFja19kZWNsX2Z1bmN0aW9uX2NvbnRleHQKKwkJCQkoY3VycmVudF9mdW5jdGlvbl9kZWNsKSAhPSBOVUxMX1RSRUUpOworCQkgIGZpbmlzaF9mdW5jdGlvbiAobGluZW5vLCAoaW50KXl5dnNwWy0xXS5pdHlwZSwgbmVzdGVkKTsKKwkJICBwcm9jZXNzX25leHRfaW5saW5lICh5eXZzcFstM10udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MDc6CisjbGluZSAyMTIyICJwYXJzZS55IgoreyBwcm9jZXNzX25leHRfaW5saW5lICh5eXZzcFstMl0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MDg6CisjbGluZSAyMTI0ICJwYXJzZS55IgoreyBwcm9jZXNzX25leHRfaW5saW5lICh5eXZzcFstMl0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MTE6CisjbGluZSAyMTM2ICJwYXJzZS55IgoreyByZXBsYWNlX2RlZmFyZyAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MTI6CisjbGluZSAyMTM4ICJwYXJzZS55IgoreyByZXBsYWNlX2RlZmFyZyAoeXl2c3BbLTJdLnR0eXBlLCBlcnJvcl9tYXJrX25vZGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MTQ6CisjbGluZSAyMTQzICJwYXJzZS55IgoreyBkb19wZW5kaW5nX2RlZmFyZ3MgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDQxNToKKyNsaW5lIDIxNDUgInBhcnNlLnkiCit7IGRvX3BlbmRpbmdfZGVmYXJncyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDE2OgorI2xpbmUgMjE1MCAicGFyc2UueSIKK3sgeXl2c3BbMF0uaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X2VudW0gKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQxNzoKKyNsaW5lIDIxNTMgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBmaW5pc2hfZW51bSAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUpOworCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSAxOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKChpbnQpIHl5dnNwWy00XS5pdHlwZSk7CisJCSAgY2hlY2tfZm9yX21pc3Npbmdfc2VtaWNvbG9uICh5eXZzcFstM10udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MTg6CisjbGluZSAyMTU4ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0gZmluaXNoX2VudW0gKHN0YXJ0X2VudW0gKHl5dnNwWy0yXS50dHlwZSksIE5VTExfVFJFRSk7CisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDE7CisJCSAgY2hlY2tfZm9yX21pc3Npbmdfc2VtaWNvbG9uICh5eXZhbC5mdHlwZS50KTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDE5OgorI2xpbmUgMjE2MiAicGFyc2UueSIKK3sgeXl2c3BbMF0uaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICB5eXZhbC50dHlwZSA9IHN0YXJ0X2VudW0gKG1ha2VfYW5vbl9uYW1lICgpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDIwOgorI2xpbmUgMjE2NSAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGZpbmlzaF9lbnVtICh5eXZzcFstM10udHR5cGUsIHl5dnNwWy0yXS50dHlwZSk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoKGludCkgeXl2c3BbLTVdLml0eXBlKTsKKwkJICBjaGVja19mb3JfbWlzc2luZ19zZW1pY29sb24gKHl5dnNwWy0zXS50dHlwZSk7CisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDE7IDsKKyAgICBicmVhazt9CitjYXNlIDQyMToKKyNsaW5lIDIxNzAgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBmaW5pc2hfZW51bSAoc3RhcnRfZW51bSAobWFrZV9hbm9uX25hbWUoKSksIE5VTExfVFJFRSk7CisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDE7CisJCSAgY2hlY2tfZm9yX21pc3Npbmdfc2VtaWNvbG9uICh5eXZhbC5mdHlwZS50KTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDIyOgorI2xpbmUgMjE3NCAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IHhyZWZfdGFnIChlbnVtX3R5cGVfbm9kZSwgeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSwgMSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MjM6CisjbGluZSAyMTc3ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0geHJlZl90YWcgKGVudW1fdHlwZV9ub2RlLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFLCAxKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDQyNDoKKyNsaW5lIDIxODAgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBtYWtlX3R5cGVuYW1lX3R5cGUgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyAKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgNDI1OgorI2xpbmUgMjE4MyAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IG1ha2VfdHlwZW5hbWVfdHlwZSAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MjY6CisjbGluZSAyMTg3ICJwYXJzZS55IgoreworCQkgIGludCBzZW1pOworCQkgIHRyZWUgaWQ7CisKKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWy00XS50dHlwZTsKKyNpZiAwCisJCSAgLyogTmVlZCB0byByZXdvcmsgY2xhc3MgbmVzdGluZyBpbiB0aGUKKwkJICAgICBwcmVzZW5jZSBvZiBuZXN0ZWQgY2xhc3NlcywgZXRjLiAgKi8KKwkJICBzaGFkb3dfdGFnIChDTEFTU1RZUEVfQVNfTElTVCAoeXl2c3BbLTRdLnR0eXBlKSk7ICovCisjZW5kaWYKKwkJICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisJCSAgICB5eWNoYXIgPSBZWUxFWDsKKwkJICBzZW1pID0geXljaGFyID09ICc7JzsKKwkJICAvKiBmaW5pc2hfc3RydWN0IG51a2VzIHRoaXMgYW55d2F5OyBpZgorCQkgICAgIGZpbmlzaF9leGNlcHRpb24gZG9lcyB0b28sIHRoZW4gaXQgY2FuIGdvLiAgKi8KKwkJICBpZiAoc2VtaSkKKwkJICAgIG5vdGVfZ290X3NlbWljb2xvbiAoeXl2c3BbLTRdLnR0eXBlKTsKKworCQkgIGlmIChUUkVFX0NPREUgKHl5dnNwWy00XS50dHlwZSkgPT0gRU5VTUVSQUxfVFlQRSkKKwkJICAgIDsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gZmluaXNoX3N0cnVjdCAoeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBzZW1pKTsKKwkJICAgICAgaWYgKHNlbWkpIG5vdGVfZ290X3NlbWljb2xvbiAoeXl2YWwudHR5cGUpOworCQkgICAgfQorCisJCSAgcG9wX29ic3RhY2tzICgpOworCisJCSAgaWYgKCEgc2VtaSkKKwkJICAgIGNoZWNrX2Zvcl9taXNzaW5nX3NlbWljb2xvbiAoeXl2c3BbLTRdLnR0eXBlKTsgCisJCSAgaWYgKGN1cnJlbnRfc2NvcGUgKCkgPT0gY3VycmVudF9mdW5jdGlvbl9kZWNsKQorCQkgICAgZG9fcGVuZGluZ19kZWZhcmdzICh5eXZzcFstNF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0Mjc6CisjbGluZSAyMjIxICJwYXJzZS55IgoreworCQkgIGlmIChwZW5kaW5nX2lubGluZXMgCisJCSAgICAgICYmIGN1cnJlbnRfc2NvcGUgKCkgPT0gY3VycmVudF9mdW5jdGlvbl9kZWNsKQorCQkgICAgZG9fcGVuZGluZ19pbmxpbmVzICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0Mjg6CisjbGluZSAyMjI3ICJwYXJzZS55IgoreyAKKwkJICB5eXZhbC5mdHlwZS50ID0geXl2c3BbLTNdLnR0eXBlOworCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSAxOyAKKwkJICBpZiAoY3VycmVudF9zY29wZSAoKSA9PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2wpCisJCSAgICBjbGVhcl9pbmxpbmVfdGV4dF9vYnN0YWNrICgpOyAKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDI5OgorI2xpbmUgMjIzNCAicGFyc2UueSIKK3sKKwkJICB5eXZhbC5mdHlwZS50ID0geXl2c3BbMF0udHR5cGU7CisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IDA7CisJCSAgLyogc3RydWN0IEI6IHB1YmxpYyBBOyBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIFdQIGdyYW1tYXIuICAqLworCQkgIGlmIChUWVBFX0JJTkZPX0JBU0VUWVBFUyAoeXl2YWwuZnR5cGUudCkgJiYgIVRZUEVfU0laRSAoeXl2YWwuZnR5cGUudCkKKwkJICAgICAgJiYgISBUWVBFX0JFSU5HX0RFRklORUQgKHl5dmFsLmZ0eXBlLnQpKQorCQkgICAgY3BfZXJyb3IgKCJiYXNlIGNsYXVzZSB3aXRob3V0IG1lbWJlciBzcGVjaWZpY2F0aW9uIGZvciBgJSNUJyIsCisJCQkgICAgICB5eXZhbC5mdHlwZS50KTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDMzOgorI2xpbmUgMjI1MyAicGFyc2UueSIKK3sgaWYgKHBlZGFudGljICYmICFpbl9zeXN0ZW1faGVhZGVyKQorCQkgICAgcGVkd2FybiAoImNvbW1hIGF0IGVuZCBvZiBlbnVtZXJhdG9yIGxpc3QiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDM1OgorI2xpbmUgMjI2MCAicGFyc2UueSIKK3sgZXJyb3IgKCJzdG9yYWdlIGNsYXNzIHNwZWNpZmllciBgJXMnIG5vdCBhbGxvd2VkIGFmdGVyIHN0cnVjdCBvciBjbGFzcyIsIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDM2OgorI2xpbmUgMjI2MiAicGFyc2UueSIKK3sgZXJyb3IgKCJ0eXBlIHNwZWNpZmllciBgJXMnIG5vdCBhbGxvd2VkIGFmdGVyIHN0cnVjdCBvciBjbGFzcyIsIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDM3OgorI2xpbmUgMjI2NCAicGFyc2UueSIKK3sgZXJyb3IgKCJ0eXBlIHF1YWxpZmllciBgJXMnIG5vdCBhbGxvd2VkIGFmdGVyIHN0cnVjdCBvciBjbGFzcyIsIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDM4OgorI2xpbmUgMjI2NiAicGFyc2UueSIKK3sgZXJyb3IgKCJubyBib2R5IG5vciAnOycgc2VwYXJhdGVzIHR3byBjbGFzcywgc3RydWN0IG9yIHVuaW9uIGRlY2xhcmF0aW9ucyIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0Mzk6CisjbGluZSAyMjcxICJwYXJzZS55IgoreyBjdXJyZW50X2FnZ3IgPSB5eXZhbC50dHlwZTsgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDQwOgorI2xpbmUgMjI3NiAicGFyc2UueSIKK3sgY3VycmVudF9hZ2dyID0geXl2YWwudHR5cGU7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDQ0MToKKyNsaW5lIDIyODEgInBhcnNlLnkiCit7CisJCSAgY3VycmVudF9hZ2dyID0geXl2c3BbLTJdLnR0eXBlOworCQkgIGlmIChUUkVFX0NPREUgKHl5dnNwWzBdLnR0eXBlKSA9PSBUWVBFX0RFQ0wpCisJCSAgICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgY3BfZXJyb3IgKCJgJVQnIGRvZXMgbm90IGhhdmUgYSBuZXN0ZWQgdHlwZSBuYW1lZCBgJUQnIiwKKwkJCQl5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSB4cmVmX3RhZworCQkJKGN1cnJlbnRfYWdnciwgbWFrZV9hbm9uX25hbWUgKCksIE5VTExfVFJFRSwgMSk7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gVFlQRV9NQUlOX0RFQ0wgKHl5dmFsLnR0eXBlKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDQyOgorI2xpbmUgMjI5NSAicGFyc2UueSIKK3sgY3VycmVudF9hZ2dyID0geXl2YWwudHR5cGU7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDQ0MzoKKyNsaW5lIDIyOTcgInBhcnNlLnkiCit7IGN1cnJlbnRfYWdnciA9IHl5dmFsLnR0eXBlOyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDQ6CisjbGluZSAyMzAyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHhyZWZfdGFnIChjdXJyZW50X2FnZ3IsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIDApOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDU6CisjbGluZSAyMzA3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHhyZWZfdGFnIChjdXJyZW50X2FnZ3IsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIDEpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDY6CisjbGluZSAyMzEwICJwYXJzZS55IgoreyAKKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsKKwkJICBpZiAoeXl2c3BbMF0udHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHhyZWZfYmFzZXR5cGVzIChjdXJyZW50X2FnZ3IsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IAorCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NDc6CisjbGluZSAyMzE2ICJwYXJzZS55IgoreyAKKwkJICB5eXZhbC50dHlwZSA9IFRSRUVfVFlQRSAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBpZiAoVFJFRV9JTlRfQ1NUX0xPVyAoY3VycmVudF9hZ2dyKSA9PSB1bmlvbl90eXBlIAorCQkgICAgICAmJiBUUkVFX0NPREUgKHl5dmFsLnR0eXBlKSAhPSBVTklPTl9UWVBFKQorCQkgICAgY3BfcGVkd2FybiAoImB1bmlvbicgdGFnIHVzZWQgaW4gZGVjbGFyaW5nIGAlI1QnIiwgeXl2YWwudHR5cGUpOworCQkgIGVsc2UgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IFVOSU9OX1RZUEUKKwkJCSAgICYmIFRSRUVfSU5UX0NTVF9MT1cgKGN1cnJlbnRfYWdncikgIT0gdW5pb25fdHlwZSkKKwkJICAgIGNwX3BlZHdhcm4gKCJub24tYHVuaW9uJyB0YWcgdXNlZCBpbiBkZWNsYXJpbmcgYCUjVCciLCB5eXZhbC50dHlwZSk7CisJCSAgaWYgKHl5dnNwWzBdLnR0eXBlKQorCQkgICAgeworCQkgICAgICBpZiAoSVNfQUdHUl9UWVBFICh5eXZhbC50dHlwZSkgJiYgQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAoeXl2YWwudHR5cGUpKQorCQkgICAgICAgIHsKKwkJICAgICAgICAgIGlmIChDTEFTU1RZUEVfSU1QTElDSVRfSU5TVEFOVElBVElPTiAoeXl2YWwudHR5cGUpCisJCQkgICAgICAmJiBUWVBFX1NJWkUgKHl5dmFsLnR0eXBlKSA9PSBOVUxMX1RSRUUpCisJCQkgICAgeworCQkJICAgICAgU0VUX0NMQVNTVFlQRV9URU1QTEFURV9TUEVDSUFMSVpBVElPTiAoeXl2YWwudHR5cGUpOworCQkJICAgICAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJCQlwdXNoX3RlbXBsYXRlX2RlY2wgKFRZUEVfTUFJTl9ERUNMICh5eXZhbC50dHlwZSkpOworCQkJICAgIH0KKwkJCSAgZWxzZSBpZiAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04gKHl5dmFsLnR0eXBlKSkKKwkJCSAgICBjcF9lcnJvciAoInNwZWNpYWxpemF0aW9uIGFmdGVyIGluc3RhbnRpYXRpb24gb2YgYCVUJyIsIHl5dmFsLnR0eXBlKTsKKwkJCX0KKwkJICAgICAgeHJlZl9iYXNldHlwZXMgKGN1cnJlbnRfYWdnciwgeXl2c3BbLTFdLnR0eXBlLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyAKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDQ4OgorI2xpbmUgMjM0NSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB4cmVmX3RhZyAoeXl2YWwudHR5cGUsIG1ha2VfYW5vbl9uYW1lICgpLCBOVUxMX1RSRUUsIDApOworCQkgIHl5dW5nZXRjICgneycsIDEpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NTE6CisjbGluZSAyMzU2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDUyOgorI2xpbmUgMjM1OCAicGFyc2UueSIKK3sgeXl1bmdldGMoJzonLCAxKTsgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDQ1MzoKKyNsaW5lIDIzNjAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDQ1NToKKyNsaW5lIDIzNjYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDU2OgorI2xpbmUgMjM3MSAicGFyc2UueSIKK3sKKwkJICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKHl5dnNwWzBdLnR0eXBlKTsKKwkJICBpZiAoISBpc19hZ2dyX3R5cGUgKHR5cGUsIDEpKQorCQkgICAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7CisJCSAgZWxzZSBpZiAoY3VycmVudF9hZ2dyID09IHNpZ25hdHVyZV90eXBlX25vZGUKKwkJCSAgICYmICghIHR5cGUpICYmICghIElTX1NJR05BVFVSRSAodHlwZSkpKQorCQkgICAgeworCQkgICAgICBlcnJvciAoImNsYXNzIG5hbWUgbm90IGFsbG93ZWQgYXMgYmFzZSBzaWduYXR1cmUiKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoY3VycmVudF9hZ2dyID09IHNpZ25hdHVyZV90eXBlX25vZGUpCisJCSAgICB7CisJCSAgICAgIHNvcnJ5ICgic2lnbmF0dXJlIGluaGVyaXRhbmNlLCBiYXNlIHR5cGUgYCVzJyBpZ25vcmVkIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICh5eXZhbC50dHlwZSkpOworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYWNjZXNzX3B1YmxpY19ub2RlLCB0eXBlKTsKKwkJICAgIH0KKwkJICBlbHNlIGlmICh0eXBlICYmIElTX1NJR05BVFVSRSAodHlwZSkpCisJCSAgICB7CisJCSAgICAgIGVycm9yICgic2lnbmF0dXJlIG5hbWUgbm90IGFsbG93ZWQgYXMgYmFzZSBjbGFzcyIpOworCQkgICAgICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYWNjZXNzX2RlZmF1bHRfbm9kZSwgdHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ1NzoKKyNsaW5lIDIzOTYgInBhcnNlLnkiCit7CisJCSAgdHJlZSB0eXBlID0gVFJFRV9UWVBFICh5eXZzcFswXS50dHlwZSk7CisJCSAgaWYgKGN1cnJlbnRfYWdnciA9PSBzaWduYXR1cmVfdHlwZV9ub2RlKQorCQkgICAgZXJyb3IgKCJhY2Nlc3MgYW5kIHNvdXJjZSBzcGVjaWZpZXJzIG5vdCBhbGxvd2VkIGluIHNpZ25hdHVyZSIpOworCQkgIGlmICghIElTX0FHR1JfVFlQRSAodHlwZSkpCisJCSAgICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsKKwkJICBlbHNlIGlmIChjdXJyZW50X2FnZ3IgPT0gc2lnbmF0dXJlX3R5cGVfbm9kZQorCQkJICAgJiYgKCEgdHlwZSkgJiYgKCEgSVNfU0lHTkFUVVJFICh0eXBlKSkpCisJCSAgICB7CisJCSAgICAgIGVycm9yICgiY2xhc3MgbmFtZSBub3QgYWxsb3dlZCBhcyBiYXNlIHNpZ25hdHVyZSIpOworCQkgICAgICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsKKwkJICAgIH0KKwkJICBlbHNlIGlmIChjdXJyZW50X2FnZ3IgPT0gc2lnbmF0dXJlX3R5cGVfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgc29ycnkgKCJzaWduYXR1cmUgaW5oZXJpdGFuY2UsIGJhc2UgdHlwZSBgJXMnIGlnbm9yZWQiLAorCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKHl5dmFsLnR0eXBlKSk7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChhY2Nlc3NfcHVibGljX25vZGUsIHR5cGUpOworCQkgICAgfQorCQkgIGVsc2UgaWYgKHR5cGUgJiYgSVNfU0lHTkFUVVJFICh0eXBlKSkKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJzaWduYXR1cmUgbmFtZSBub3QgYWxsb3dlZCBhcyBiYXNlIGNsYXNzIik7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZhbC50dHlwZSwgdHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ1OToKKyNsaW5lIDI0MjcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gVFlQRV9NQUlOX0RFQ0wgKG1ha2VfdHlwZW5hbWVfdHlwZSAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NjA6CisjbGluZSAyNDI5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IFRZUEVfTUFJTl9ERUNMIChtYWtlX3R5cGVuYW1lX3R5cGUgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDYxOgorI2xpbmUgMjQzMSAicGFyc2UueSIKK3sKKwkJICBpZiAoY3VycmVudF9hZ2dyID09IHNpZ25hdHVyZV90eXBlX25vZGUpCisJCSAgICB7CisJCSAgICAgIGlmIChJU19BR0dSX1RZUEUgKFRSRUVfVFlQRSAoeXl2c3BbLTFdLnR0eXBlKSkpCisJCQl7CisJCQkgIHNvcnJ5ICgiYHNpZ29mJyBhcyBiYXNlIHNpZ25hdHVyZSBzcGVjaWZpZXIiKTsKKwkJCSAgeXl2YWwudHR5cGUgPSBUUkVFX1RZUEUgKHl5dnNwWy0xXS50dHlwZSk7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgZXJyb3IgKCJgc2lnb2YnIGFwcGxpZWQgdG8gbm9uLWFnZ3JlZ2F0ZSBleHByZXNzaW9uIik7CisJCQkgIHl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOworCQkJfQorCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJgc2lnb2YnIGluIHN0cnVjdCBvciBjbGFzcyBkZWNsYXJhdGlvbiIpOworCQkgICAgICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDYyOgorI2xpbmUgMjQ1MiAicGFyc2UueSIKK3sKKwkJICBpZiAoY3VycmVudF9hZ2dyID09IHNpZ25hdHVyZV90eXBlX25vZGUpCisJCSAgICB7CisJCSAgICAgIGlmIChJU19BR0dSX1RZUEUgKGdyb2t0eXBlbmFtZSAoeXl2c3BbLTFdLmZ0eXBlLnQpKSkKKwkJCXsKKwkJCSAgc29ycnkgKCJgc2lnb2YnIGFzIGJhc2Ugc2lnbmF0dXJlIHNwZWNpZmllciIpOworCQkJICB5eXZhbC50dHlwZSA9IGdyb2t0eXBlbmFtZSAoeXl2c3BbLTFdLmZ0eXBlLnQpOworCQkJfQorCQkgICAgICBlbHNlCisJCQl7CisJCQkgIGVycm9yICgiYHNpZ29mJyBhcHBsaWVkIHRvIG5vbi1hZ2dyZWdhdGUgZXhwcmVzc2lvbiIpOworCQkJICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVycm9yICgiYHNpZ29mJyBpbiBzdHJ1Y3Qgb3IgY2xhc3MgZGVjbGFyYXRpb24iKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ2NDoKKyNsaW5lIDI0NzcgInBhcnNlLnkiCit7IGlmICh5eXZhbC50dHlwZSAhPSByaWRwb2ludGVyc1soaW50KVJJRF9WSVJUVUFMXSkKKwkJICAgIHNvcnJ5ICgibm9uLXZpcnR1YWwgYWNjZXNzIik7CisJCSAgeXl2YWwudHR5cGUgPSBhY2Nlc3NfZGVmYXVsdF92aXJ0dWFsX25vZGU7IDsKKyAgICBicmVhazt9CitjYXNlIDQ2NToKKyNsaW5lIDI0ODEgInBhcnNlLnkiCit7IGludCBlcnIgPSAwOworCQkgIGlmICh5eXZzcFstMV0udHR5cGUgPT0gYWNjZXNzX3Byb3RlY3RlZF9ub2RlKQorCQkgICAgeworCQkgICAgICB3YXJuaW5nICgiYHByb3RlY3RlZCcgYWNjZXNzIG5vdCBpbXBsZW1lbnRlZCIpOworCQkgICAgICB5eXZzcFstMV0udHR5cGUgPSBhY2Nlc3NfcHVibGljX25vZGU7CisJCSAgICAgIGVycisrOworCQkgICAgfQorCQkgIGVsc2UgaWYgKHl5dnNwWy0xXS50dHlwZSA9PSBhY2Nlc3NfcHVibGljX25vZGUpCisJCSAgICB7CisJCSAgICAgIGlmICh5eXZzcFstMl0udHR5cGUgPT0gYWNjZXNzX3ByaXZhdGVfbm9kZSkKKwkJCXsKKwkJCW1peGVkOgorCQkJICBlcnJvciAoImJhc2UgY2xhc3MgY2Fubm90IGJlIHB1YmxpYyBhbmQgcHJpdmF0ZSIpOworCQkJfQorCQkgICAgICBlbHNlIGlmICh5eXZzcFstMl0udHR5cGUgPT0gYWNjZXNzX2RlZmF1bHRfdmlydHVhbF9ub2RlKQorCQkJeXl2YWwudHR5cGUgPSBhY2Nlc3NfcHVibGljX3ZpcnR1YWxfbm9kZTsKKwkJICAgIH0KKwkJICBlbHNlIC8qICQyID09IGFjY2Vzc19wcml2YXRlX25vZGUgKi8KKwkJICAgIHsKKwkJICAgICAgaWYgKHl5dnNwWy0yXS50dHlwZSA9PSBhY2Nlc3NfcHVibGljX25vZGUpCisJCQlnb3RvIG1peGVkOworCQkgICAgICBlbHNlIGlmICh5eXZzcFstMl0udHR5cGUgPT0gYWNjZXNzX2RlZmF1bHRfdmlydHVhbF9ub2RlKQorCQkJeXl2YWwudHR5cGUgPSBhY2Nlc3NfcHJpdmF0ZV92aXJ0dWFsX25vZGU7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ2NjoKKyNsaW5lIDI1MDcgInBhcnNlLnkiCit7IGlmICh5eXZzcFstMV0udHR5cGUgIT0gcmlkcG9pbnRlcnNbKGludClSSURfVklSVFVBTF0pCisJCSAgICBzb3JyeSAoIm5vbi12aXJ0dWFsIGFjY2VzcyIpOworCQkgIGlmICh5eXZhbC50dHlwZSA9PSBhY2Nlc3NfcHVibGljX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IGFjY2Vzc19wdWJsaWNfdmlydHVhbF9ub2RlOworCQkgIGVsc2UgaWYgKHl5dmFsLnR0eXBlID09IGFjY2Vzc19wcml2YXRlX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IGFjY2Vzc19wcml2YXRlX3ZpcnR1YWxfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDY3OgorI2xpbmUgMjUxNyAicGFyc2UueSIKK3sgdHJlZSB0ID0geXl2c3BbLTFdLnR0eXBlOworCQkgIHB1c2hfb2JzdGFja3Nfbm9jaGFuZ2UgKCk7CisJCSAgZW5kX3RlbXBvcmFyeV9hbGxvY2F0aW9uICgpOworCisJCSAgaWYgKHQgPT0gZXJyb3JfbWFya19ub2RlCisJCSAgICAgIHx8ICEgSVNfQUdHUl9UWVBFICh0KSkKKwkJICAgIHsKKwkJICAgICAgdCA9IHl5dnNwWy0xXS50dHlwZSA9IG1ha2VfbGFuZ190eXBlIChSRUNPUkRfVFlQRSk7CisJCSAgICAgIHB1c2h0YWcgKG1ha2VfYW5vbl9uYW1lICgpLCB0LCAwKTsKKwkJICAgIH0KKwkJICBpZiAoVFlQRV9TSVpFICh0KSkKKwkJICAgIGR1cGxpY2F0ZV90YWdfZXJyb3IgKHQpOworICAgICAgICAgICAgICAgICAgaWYgKFRZUEVfU0laRSAodCkgfHwgVFlQRV9CRUlOR19ERUZJTkVEICh0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHQgPSBtYWtlX2xhbmdfdHlwZSAoVFJFRV9DT0RFICh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgcHVzaHRhZyAoVFlQRV9JREVOVElGSUVSICh5eXZzcFstMV0udHR5cGUpLCB0LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICB5eXZzcFstMV0udHR5cGUgPSB0OworICAgICAgICAgICAgICAgICAgICB9CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCAmJiBUWVBFX0NPTlRFWFQgKHQpCisJCSAgICAgICYmICEgY3VycmVudF9jbGFzc190eXBlKQorCQkgICAgcHVzaF90ZW1wbGF0ZV9kZWNsIChUWVBFX1NUVUJfREVDTCAodCkpOworCQkgIHB1c2hjbGFzcyAodCwgMCk7CisJCSAgVFlQRV9CRUlOR19ERUZJTkVEICh0KSA9IDE7CisJCSAgaWYgKElTX0FHR1JfVFlQRSAodCkgJiYgQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAodCkpCisJCSAgICB7CisJCSAgICAgIGlmIChDTEFTU1RZUEVfSU1QTElDSVRfSU5TVEFOVElBVElPTiAodCkKKwkJCSAgJiYgVFlQRV9TSVpFICh0KSA9PSBOVUxMX1RSRUUpCisJCQl7CisJCQkgIFNFVF9DTEFTU1RZUEVfVEVNUExBVEVfU1BFQ0lBTElaQVRJT04gKHQpOworCQkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkJICAgIHB1c2hfdGVtcGxhdGVfZGVjbCAoVFlQRV9NQUlOX0RFQ0wgKHQpKTsKKwkJCX0KKwkJICAgICAgZWxzZSBpZiAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04gKHQpKQorCQkJY3BfZXJyb3IgKCJzcGVjaWFsaXphdGlvbiBhZnRlciBpbnN0YW50aWF0aW9uIG9mIGAlVCciLCB0KTsKKwkJICAgIH0KKwkJICAvKiBSZXNldCB0aGUgaW50ZXJmYWNlIGRhdGEsIGF0IHRoZSBlYXJsaWVzdCBwb3NzaWJsZQorCQkgICAgIG1vbWVudCwgYXMgaXQgbWlnaHQgaGF2ZSBiZWVuIHNldCB2aWEgYSBjbGFzcyBmb287CisJCSAgICAgYmVmb3JlLiAgKi8KKwkJICAvKiBEb24ndCBjaGFuZ2Ugc2lnbmF0dXJlcy4gICovCisJCSAgaWYgKCEgSVNfU0lHTkFUVVJFICh0KSkKKwkJICAgIHsKKwkJICAgICAgZXh0ZXJuIHRyZWUgcGVuZGluZ192dGFibGVzOworCQkgICAgICBpbnQgbmVlZHNfd3JpdGluZzsKKwkJICAgICAgdHJlZSBuYW1lID0gVFlQRV9JREVOVElGSUVSICh0KTsKKworCQkgICAgICBpZiAoISBBTk9OX0FHR1JOQU1FX1AgKG5hbWUpKQorCQkJeworCQkJICBDTEFTU1RZUEVfSU5URVJGQUNFX09OTFkgKHQpID0gaW50ZXJmYWNlX29ubHk7CisJCQkgIFNFVF9DTEFTU1RZUEVfSU5URVJGQUNFX1VOS05PV05fWAorCQkJICAgICh0LCBpbnRlcmZhY2VfdW5rbm93bik7CisJCQl9CisKKwkJICAgICAgLyogUmVjb3JkIGhvdyB0byBzZXQgdGhlIGFjY2VzcyBvZiB0aGlzIGNsYXNzJ3MKKwkJCSB2aXJ0dWFsIGZ1bmN0aW9ucy4gIElmIHdyaXRlX3ZpcnR1YWxzID09IDIgb3IgMywgdGhlbgorCQkJIGlubGluZSB2aXJ0dWFscyBhcmUgYGBleHRlcm4gaW5saW5lJycuICAqLworCQkgICAgICBzd2l0Y2ggKHdyaXRlX3ZpcnR1YWxzKQorCQkJeworCQkJY2FzZSAwOgorCQkJY2FzZSAxOgorCQkJICBuZWVkc193cml0aW5nID0gMTsKKwkJCSAgYnJlYWs7CisJCQljYXNlIDI6CisJCQkgIG5lZWRzX3dyaXRpbmcgPSAhISB2YWx1ZV9tZW1iZXIgKG5hbWUsIHBlbmRpbmdfdnRhYmxlcyk7CisJCQkgIGJyZWFrOworCQkJY2FzZSAzOgorCQkJICBuZWVkc193cml0aW5nID0gISBDTEFTU1RZUEVfSU5URVJGQUNFX09OTFkgKHQpCisJCQkgICAgJiYgQ0xBU1NUWVBFX0lOVEVSRkFDRV9LTk9XTiAodCk7CisJCQkgIGJyZWFrOworCQkJZGVmYXVsdDoKKwkJCSAgbmVlZHNfd3JpdGluZyA9IDA7CisJCQl9CisJCSAgICAgIENMQVNTVFlQRV9WVEFCTEVfTkVFRFNfV1JJVElORyAodCkgPSBuZWVkc193cml0aW5nOworCQkgICAgfQorI2lmIDAKKwkJICB0ID0gVFlQRV9JREVOVElGSUVSICh5eXZzcFstMV0udHR5cGUpOworCQkgIGlmICh0ICYmIElERU5USUZJRVJfVEVNUExBVEUgKHQpKQorCQkgICAgb3ZlcmxvYWRfdGVtcGxhdGVfbmFtZSAodCwgMSk7CisjZW5kaWYKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDY4OgorI2xpbmUgMjYwMCAicGFyc2UueSIKK3sKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfc2VsZl9yZWZlcmVuY2UgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ2OToKKyNsaW5lIDI2MDcgInBhcnNlLnkiCit7IGlmICh5eXZhbC50dHlwZSkgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGFjY2Vzc19wdWJsaWNfbm9kZSwgeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NzA6CisjbGluZSAyNjA5ICJwYXJzZS55IgoreworCQkgIGlmIChjdXJyZW50X2FnZ3IgPT0gc2lnbmF0dXJlX3R5cGVfbm9kZSkKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChhY2Nlc3NfcHVibGljX25vZGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICBlbHNlCisJCSAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYWNjZXNzX2RlZmF1bHRfbm9kZSwgeXl2c3BbMF0udHR5cGUpOworCQkgIGlmICh5eXZzcFstMV0udHR5cGUpIHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChhY2Nlc3NfcHVibGljX25vZGUsIHl5dnNwWy0xXS50dHlwZSwgeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NzE6CisjbGluZSAyNjE3ICJwYXJzZS55IgoreworCQkgIHRyZWUgdmlzc3BlYyA9IHl5dnNwWy0yXS50dHlwZTsKKworCQkgIGlmIChjdXJyZW50X2FnZ3IgPT0gc2lnbmF0dXJlX3R5cGVfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJhY2Nlc3Mgc3BlY2lmaWVyIG5vdCBhbGxvd2VkIGluIHNpZ25hdHVyZSIpOworCQkgICAgICB2aXNzcGVjID0gYWNjZXNzX3B1YmxpY19ub2RlOworCQkgICAgfQorCQkgIHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2YWwudHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAodmlzc3BlYywgeXl2c3BbMF0udHR5cGUpKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDcyOgorI2xpbmUgMjYyOCAicGFyc2UueSIKK3sKKwkJICBpZiAoY3VycmVudF9hZ2dyID09IHNpZ25hdHVyZV90eXBlX25vZGUpCisJCSAgICBlcnJvciAoImFjY2VzcyBzcGVjaWZpZXIgbm90IGFsbG93ZWQgaW4gc2lnbmF0dXJlIik7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ3MzoKKyNsaW5lIDI2MzggInBhcnNlLnkiCit7IGlmICh5eXZhbC50dHlwZSA9PSB2b2lkX3R5cGVfbm9kZSkgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IAorCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NzQ6CisjbGluZSAyNjQxICJwYXJzZS55IgoreyAvKiBJbiBwdXNoZGVjbCwgd2UgY3JlYXRlZCBhIHJldmVyc2UgbGlzdCBvZiBuYW1lcworCQkgICAgIGluIHRoaXMgYmluZGluZyBsZXZlbC4gIE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFpbgorCQkgICAgIG9mIHdoYXQgd2UncmUgdHJ5aW5nIHRvIGFkZCBpc24ndCB0aGUgaXRlbSBpdHNlbGYKKwkJICAgICAod2hpY2ggY2FuIGhhcHBlbiB3aXRoIHdoYXQgcHVzaGRlY2wncyBkb2luZykuICAqLworCQkgIGlmICh5eXZzcFswXS50dHlwZSAhPSBOVUxMX1RSRUUgJiYgeXl2c3BbMF0udHR5cGUgIT0gdm9pZF90eXBlX25vZGUpCisJCSAgICB7CisJCSAgICAgIGlmIChUUkVFX0NIQUlOICh5eXZzcFswXS50dHlwZSkgIT0geXl2YWwudHR5cGUpCisJCQl5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgICAgIGVsc2UKKwkJCXl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ3NToKKyNsaW5lIDI2NTcgInBhcnNlLnkiCit7IDsKKyAgICBicmVhazt9CitjYXNlIDQ3NjoKKyNsaW5lIDI2NTkgInBhcnNlLnkiCit7IGVycm9yICgibWlzc2luZyAnOycgYmVmb3JlIHJpZ2h0IGJyYWNlIik7CisJCSAgeXl1bmdldGMgKCd9JywgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ3NzoKKyNsaW5lIDI2NjQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZmluaXNoX21ldGhvZCAoeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0Nzg6CisjbGluZSAyNjY2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGZpbmlzaF9tZXRob2QgKHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDc5OgorI2xpbmUgMjY2OCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBmaW5pc2hfbWV0aG9kICh5eXZhbC50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ4MDoKKyNsaW5lIDI2NzAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZmluaXNoX21ldGhvZCAoeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0ODE6CisjbGluZSAyNjcyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDgyOgorI2xpbmUgMjY3NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDgzOgorI2xpbmUgMjY4MyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rX3hfY29tcG9uZW50cyAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDg0OgorI2xpbmUgMjY4NSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rX3hfY29tcG9uZW50cyAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ4NToKKyNsaW5lIDI2ODcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ3Jva2ZpZWxkICh5eXZhbC50dHlwZSwgTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLAorCQkJCSAgYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0ODY6CisjbGluZSAyNjkwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2tmaWVsZCAoeXl2YWwudHR5cGUsIE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwKKwkJCQkgIGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDg3OgorI2xpbmUgMjY5MyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rYml0ZmllbGQgKE5VTExfVFJFRSwgTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ4ODoKKyNsaW5lIDI2OTUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA0ODk6CisjbGluZSAyNzA2ICJwYXJzZS55IgoreyB0cmVlIHNwZWNzLCBhdHRyczsKKwkJICBzcGxpdF9zcGVjc19hdHRycyAoeXl2c3BbLTRdLnR0eXBlLCAmc3BlY3MsICZhdHRycyk7CisJCSAgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dnNwWy0zXS50dHlwZSwgc3BlY3MsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsCisJCQkJICBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0xXS50dHlwZSwgYXR0cnMpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDkwOgorI2xpbmUgMjcxMSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dmFsLnR0eXBlLCBOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsCisJCQkJICBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0xXS50dHlwZSwgTlVMTF9UUkVFKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5MToKKyNsaW5lIDI3MTQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZG9fY2xhc3NfdXNpbmdfZGVjbCAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0OTI6CisjbGluZSAyNzIxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDk0OgorI2xpbmUgMjcyNCAicGFyc2UueSIKK3sKKwkJICAvKiBJbiB0aGlzIGNvbnRleHQsIHZvaWRfdHlwZV9ub2RlIGVuY29kZXMKKwkJICAgICBmcmllbmRzLiAgVGhleSBoYXZlIGJlZW4gcmVjb3JkZWQgZWxzZXdoZXJlLiAgKi8KKwkJICBpZiAoeXl2YWwudHR5cGUgPT0gdm9pZF90eXBlX25vZGUpCisJCSAgICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQkgIGVsc2UKKwkJICAgIHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDk1OgorI2xpbmUgMjczNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5NzoKKyNsaW5lIDI3MzkgInBhcnNlLnkiCit7CisJCSAgLyogSW4gdGhpcyBjb250ZXh0LCB2b2lkX3R5cGVfbm9kZSBlbmNvZGVzCisJCSAgICAgZnJpZW5kcy4gIFRoZXkgaGF2ZSBiZWVuIHJlY29yZGVkIGVsc2V3aGVyZS4gICovCisJCSAgaWYgKHl5dmFsLnR0eXBlID09IHZvaWRfdHlwZV9ub2RlKQorCQkgICAgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBlbHNlCisJCSAgICB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDUwMjoKKyNsaW5lIDI3NjEgInBhcnNlLnkiCit7IHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstNF0udHR5cGUsICZjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkgICAgICZwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgeXl2c3BbLTRdLnR0eXBlID0gY3VycmVudF9kZWNsc3BlY3M7CisJCSAgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dmFsLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwKKwkJCQkgIGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTFdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcykpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MDM6CisjbGluZSAyNzY3ICJwYXJzZS55IgoreyBzcGxpdF9zcGVjc19hdHRycyAoeXl2c3BbLTRdLnR0eXBlLCAmY3VycmVudF9kZWNsc3BlY3MsCisJCQkJICAgICAmcHJlZml4X2F0dHJpYnV0ZXMpOworCQkgIHl5dnNwWy00XS50dHlwZSA9IGN1cnJlbnRfZGVjbHNwZWNzOworCQkgIHl5dmFsLnR0eXBlID0gZ3Jva2JpdGZpZWxkICh5eXZhbC50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTA0OgorI2xpbmUgMjc3NiAicGFyc2UueSIKK3sgc3BsaXRfc3BlY3NfYXR0cnMgKHl5dnNwWy00XS50dHlwZSwgJmN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCSAgICAgJnByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICB5eXZzcFstNF0udHR5cGUgPSBjdXJyZW50X2RlY2xzcGVjczsKKwkJICB5eXZhbC50dHlwZSA9IGdyb2tmaWVsZCAoeXl2YWwudHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLAorCQkJCSAgYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstMV0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDUwNToKKyNsaW5lIDI3ODIgInBhcnNlLnkiCit7IHNwbGl0X3NwZWNzX2F0dHJzICh5eXZzcFstNF0udHR5cGUsICZjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkgICAgICZwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgeXl2c3BbLTRdLnR0eXBlID0gY3VycmVudF9kZWNsc3BlY3M7CisJCSAgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dmFsLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwKKwkJCQkgIGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTFdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcykpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MDY6CisjbGluZSAyNzg4ICJwYXJzZS55IgoreyBzcGxpdF9zcGVjc19hdHRycyAoeXl2c3BbLTRdLnR0eXBlLCAmY3VycmVudF9kZWNsc3BlY3MsCisJCQkJICAgICAmcHJlZml4X2F0dHJpYnV0ZXMpOworCQkgIHl5dnNwWy00XS50dHlwZSA9IGN1cnJlbnRfZGVjbHNwZWNzOworCQkgIHl5dmFsLnR0eXBlID0gZ3Jva2JpdGZpZWxkICh5eXZhbC50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTA3OgorI2xpbmUgMjc5NCAicGFyc2UueSIKK3sgc3BsaXRfc3BlY3NfYXR0cnMgKHl5dnNwWy0zXS50dHlwZSwgJmN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCSAgICAgJnByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICB5eXZzcFstM10udHR5cGUgPSBjdXJyZW50X2RlY2xzcGVjczsKKwkJICB5eXZhbC50dHlwZSA9IGdyb2tiaXRmaWVsZCAoTlVMTF9UUkVFLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MDg6CisjbGluZSAyODAzICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2tmaWVsZCAoeXl2YWwudHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLAorCQkJCSAgYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstMV0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDUwOToKKyNsaW5lIDI4MDYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ3Jva2JpdGZpZWxkICh5eXZhbC50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTEwOgorI2xpbmUgMjgxMiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dmFsLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwKKwkJCQkgIGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTFdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcykpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MTE6CisjbGluZSAyODE1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2tiaXRmaWVsZCAoeXl2YWwudHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7IDsKKyAgICBicmVhazt9CitjYXNlIDUxMjoKKyNsaW5lIDI4MTggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ3Jva2JpdGZpZWxkIChOVUxMX1RSRUUsIGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGNwbHVzX2RlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7IDsKKyAgICBicmVhazt9CitjYXNlIDUxNDoKKyNsaW5lIDI4MjkgInBhcnNlLnkiCit7IFRSRUVfQ0hBSU4gKHl5dnNwWzBdLnR0eXBlKSA9IHl5dmFsLnR0eXBlOyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MTU6CisjbGluZSAyODM0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2VudW1lcmF0b3IgKHl5dmFsLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MTY6CisjbGluZSAyODM2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2VudW1lcmF0b3IgKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDUxNzoKKyNsaW5lIDI4NDIgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBidWlsZF9kZWNsX2xpc3QgKHl5dnNwWy0xXS5mdHlwZS50LCB5eXZzcFswXS50dHlwZSk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgNTE4OgorI2xpbmUgMjg0NSAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX2RlY2xfbGlzdCAoeXl2c3BbMF0uZnR5cGUudCwgTlVMTF9UUkVFKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWzBdLmZ0eXBlLm5ld190eXBlX2ZsYWc7IDsKKyAgICBicmVhazt9CitjYXNlIDUxOToKKyNsaW5lIDI4NTAgInBhcnNlLnkiCit7CisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQysrIGZvcmJpZHMgYXJyYXkgZGltZW5zaW9ucyB3aXRoIHBhcmVudGhlc2l6ZWQgdHlwZSBpbiBuZXciKTsKKwkJICB5eXZhbC5mdHlwZS50ID0gYnVpbGRfcGFyc2Vfbm9kZSAoQVJSQVlfUkVGLCBUUkVFX1ZBTFVFICh5eXZzcFstNF0uZnR5cGUudCksIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX2RlY2xfbGlzdCAoVFJFRV9QVVJQT1NFICh5eXZzcFstNF0uZnR5cGUudCksIHl5dmFsLmZ0eXBlLnQpOworCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstNF0uZnR5cGUubmV3X3R5cGVfZmxhZzsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTIwOgorI2xpbmUgMjg2MSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDUyMToKKyNsaW5lIDI4NjMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZGVjbF90cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dmFsLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTIyOgorI2xpbmUgMjg2OCAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IElERU5USUZJRVJfQVNfTElTVCAoeXl2c3BbMF0udHR5cGUpOyAKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgNTIzOgorI2xpbmUgMjg3MSAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGRlY2xfdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0uZnR5cGUudCk7IAorCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgNTI0OgorI2xpbmUgMjg4MCAicGFyc2UueSIKK3sgeXl2YWwuaXR5cGUgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTI1OgorI2xpbmUgMjg4NSAicGFyc2UueSIKK3sgcmVzdW1lX21vbWVudGFyeSAoKGludCkgeXl2c3BbLTFdLml0eXBlKTsgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTI2OgorI2xpbmUgMjg5MSAicGFyc2UueSIKK3sgcmVzdW1lX21vbWVudGFyeSAoKGludCkgeXl2c3BbLTNdLml0eXBlKTsgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDUyNzoKKyNsaW5lIDI4OTMgInBhcnNlLnkiCit7IHJlc3VtZV9tb21lbnRhcnkgKChpbnQpIHl5dnNwWy0zXS5pdHlwZSk7IHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSA1Mjg6CisjbGluZSAyODk1ICJwYXJzZS55IgoreyByZXN1bWVfbW9tZW50YXJ5ICgoaW50KSB5eXZzcFstMV0uaXR5cGUpOyB5eXZhbC50dHlwZSA9IGVtcHR5X3Bhcm1zICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1Mjk6CisjbGluZSAyODk3ICJwYXJzZS55IgoreyByZXN1bWVfbW9tZW50YXJ5ICgoaW50KSB5eXZzcFstM10uaXR5cGUpOyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTMwOgorI2xpbmUgMjkwNCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTMxOgorI2xpbmUgMjkwNiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yICh5eXZzcFstMV0uZnR5cGUudCwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MzI6CisjbGluZSAyOTA4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTMzOgorI2xpbmUgMjkxMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTM0OgorI2xpbmUgMjkxMiAicGFyc2UueSIKK3sgdHJlZSBhcmcgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgYXJnKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTM2OgorI2xpbmUgMjkyMCAicGFyc2UueSIKK3sKKwkJICBpZiAoVFJFRV9DT0RFICh5eXZzcFswXS50dHlwZSkgPT0gSURFTlRJRklFUl9OT0RFKQorCQkgICAgeworCQkgICAgICBpZiAoY3VycmVudF9jbGFzc190eXBlCisJCQkgICYmIFRZUEVfQkVJTkdfREVGSU5FRCAoY3VycmVudF9jbGFzc190eXBlKQorCQkJICAmJiAhIElERU5USUZJRVJfQ0xBU1NfVkFMVUUgKHl5dnNwWzBdLnR0eXBlKSkKKwkJCXsKKwkJCSAgLyogQmUgc3VyZSB0byBnZXQgYW4gaW5oZXJpdGVkIHR5cGVkZWYuICAqLworCQkJICB5eXZhbC50dHlwZSA9IGxvb2t1cF9uYW1lICh5eXZzcFswXS50dHlwZSwgMSk7CisJCQkgIC8qIFJlbWVtYmVyIHRoYXQgdGhpcyBuYW1lIGhhcyBiZWVuIHVzZWQgaW4gdGhlIGNsYXNzCisJCQkgICAgIGRlZmluaXRpb24sIGFzIHBlciBbY2xhc3Muc2NvcGUwXSAqLworCQkJICBwdXNoZGVjbF9jbGFzc19sZXZlbCAoeXl2YWwudHR5cGUpOworCQkJfQorCQkgICAgICBlbHNlCisJCQl5eXZhbC50dHlwZSA9IGlkZW50aWZpZXJfdHlwZWRlY2xfdmFsdWUgKHl5dnNwWzBdLnR0eXBlKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1Mzc6CisjbGluZSAyOTQwICJwYXJzZS55IgoreworCQkgIGlmIChUUkVFX0NPREUgKHl5dnNwWzBdLnR0eXBlKSA9PSBJREVOVElGSUVSX05PREUpCisJCSAgICB5eXZhbC50dHlwZSA9IGlkZW50aWZpZXJfdHlwZWRlY2xfdmFsdWUgKHl5dnNwWzBdLnR0eXBlKTsKKwkJICBlbHNlCisJCSAgICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQkgIGdvdF9zY29wZSA9IE5VTExfVFJFRTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTM5OgorI2xpbmUgMjk0OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQwOgorI2xpbmUgMjk1NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfdHlwZV9kZWNsICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU0MToKKyNsaW5lIDI5NTkgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dmFsLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NDI6CisjbGluZSAyOTYxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKEFSUkFZX1JFRiwgeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU0MzoKKyNsaW5lIDI5NjMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQVJSQVlfUkVGLCB5eXZhbC50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQ0OgorI2xpbmUgMjk2NSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDU0NToKKyNsaW5lIDI5NjcgInBhcnNlLnkiCit7IHB1c2hfbmVzdGVkX2NsYXNzICh5eXZzcFstMV0udHR5cGUsIDMpOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoU0NPUEVfUkVGLCB5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQkgIFRSRUVfQ09NUExFWElUWSAoeXl2YWwudHR5cGUpID0gY3VycmVudF9jbGFzc19kZXB0aDsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQ3OgorI2xpbmUgMjk3OCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQ4OgorI2xpbmUgMjk4MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yICh5eXZzcFstMV0uZnR5cGUudCwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NDk6CisjbGluZSAyOTgyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTUwOgorI2xpbmUgMjk4NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTUxOgorI2xpbmUgMjk4NiAicGFyc2UueSIKK3sgdHJlZSBhcmcgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgYXJnKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTUzOgorI2xpbmUgMjk5NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTU0OgorI2xpbmUgMjk5NiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yICh5eXZzcFstMV0uZnR5cGUudCwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NTU6CisjbGluZSAyOTk4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTU2OgorI2xpbmUgMzAwMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTU3OgorI2xpbmUgMzAwMiAicGFyc2UueSIKK3sgdHJlZSBhcmcgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgYXJnKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTU5OgorI2xpbmUgMzAxMCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoeXl2YWwudHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU2MDoKKyNsaW5lIDMwMTIgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NjE6CisjbGluZSAzMDE0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKEFSUkFZX1JFRiwgeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU2MjoKKyNsaW5lIDMwMTYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQVJSQVlfUkVGLCB5eXZhbC50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTYzOgorI2xpbmUgMzAxOCAicGFyc2UueSIKK3sgaWYgKE9QMCAoeXl2YWwudHR5cGUpICE9IGN1cnJlbnRfY2xhc3NfdHlwZSkKKwkJICAgIHsKKwkJICAgICAgcHVzaF9uZXN0ZWRfY2xhc3MgKE9QMCAoeXl2YWwudHR5cGUpLCAzKTsKKwkJICAgICAgVFJFRV9DT01QTEVYSVRZICh5eXZhbC50dHlwZSkgPSBjdXJyZW50X2NsYXNzX2RlcHRoOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA1NjQ6CisjbGluZSAzMDI4ICJwYXJzZS55IgoreyBnb3Rfc2NvcGUgPSBOVUxMX1RSRUU7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU2NToKKyNsaW5lIDMwMzQgInBhcnNlLnkiCit7IGdvdF9zY29wZSA9IE5VTExfVFJFRTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKFNDT1BFX1JFRiwgeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTY3OgorI2xpbmUgMzA0MSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTY4OgorI2xpbmUgMzA0NiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9mdW5jdGlvbmFsX2Nhc3QgKHl5dnNwWy0zXS5mdHlwZS50LCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1Njk6CisjbGluZSAzMDQ4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHJlcGFyc2VfZGVjbF9hc19leHByICh5eXZzcFstM10uZnR5cGUudCwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTcwOgorI2xpbmUgMzA1MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSByZXBhcnNlX2Fic2RjbF9hc19leHByICh5eXZzcFstMV0uZnR5cGUudCwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NzU6CisjbGluZSAzMDYyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NzY6CisjbGluZSAzMDY5ICJwYXJzZS55IgoreworCQkgIGlmIChUUkVFX0NPREUgKHl5dnNwWy0xXS50dHlwZSkgPT0gSURFTlRJRklFUl9OT0RFKQorCQkgICAgeworCQkgICAgICB5eXZhbC50dHlwZSA9IGxhc3RpZGRlY2w7CisJCSAgICAgIC8qIFJlbWVtYmVyIHRoYXQgdGhpcyBuYW1lIGhhcyBiZWVuIHVzZWQgaW4gdGhlIGNsYXNzCisJCQkgZGVmaW5pdGlvbiwgYXMgcGVyIFtjbGFzcy5zY29wZTBdICovCisJCSAgICAgIGlmIChjdXJyZW50X2NsYXNzX3R5cGUKKwkJCSAgJiYgVFlQRV9CRUlOR19ERUZJTkVEIChjdXJyZW50X2NsYXNzX3R5cGUpCisJCQkgICYmICEgSURFTlRJRklFUl9DTEFTU19WQUxVRSAoeXl2c3BbLTFdLnR0eXBlKSkKKwkJCXB1c2hkZWNsX2NsYXNzX2xldmVsICh5eXZhbC50dHlwZSk7CisJCSAgICB9CisJCSAgZ290X3Njb3BlID0geXl2YWwudHR5cGUgPSBUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTc3OgorI2xpbmUgMzA4MyAicGFyc2UueSIKK3sKKwkJICBpZiAoVFJFRV9DT0RFICh5eXZzcFstMV0udHR5cGUpID09IElERU5USUZJRVJfTk9ERSkKKwkJICAgIHl5dmFsLnR0eXBlID0gbGFzdGlkZGVjbDsKKwkJICBnb3Rfc2NvcGUgPSB5eXZhbC50dHlwZSA9IFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1Nzg6CisjbGluZSAzMDg5ICJwYXJzZS55IgoreworCQkgIGlmIChUUkVFX0NPREUgKHl5dmFsLnR0eXBlKSA9PSBJREVOVElGSUVSX05PREUpCisJCSAgICB5eXZhbC50dHlwZSA9IGxhc3RpZGRlY2w7CisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IE5BTUVTUEFDRV9ERUNMCisJCSAgICAgICYmIERFQ0xfTkFNRSAoeXl2YWwudHR5cGUpID09IGdldF9pZGVudGlmaWVyICgic3RkIikpCisJCSAgICBnb3Rfc2NvcGUgPSB2b2lkX3R5cGVfbm9kZTsKKwkJICBlbHNlCisJCSAgICBnb3Rfc2NvcGUgPSB5eXZhbC50dHlwZTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTc5OgorI2xpbmUgMzA5OSAicGFyc2UueSIKK3sgZ290X3Njb3BlID0geXl2YWwudHR5cGUgPSBjb21wbGV0ZV90eXBlIChUUkVFX1RZUEUgKHl5dnNwWy0xXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1ODA6CisjbGluZSAzMTE0ICJwYXJzZS55IgoreworCQkgIGlmIChUUkVFX0NPREUgKHl5dnNwWzBdLnR0eXBlKSA9PSBJREVOVElGSUVSX05PREUpCisJCSAgICB5eXZhbC50dHlwZSA9IGlkZW50aWZpZXJfdHlwZWRlY2xfdmFsdWUgKHl5dnNwWzBdLnR0eXBlKTsKKwkJICBlbHNlCisJCSAgICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQkgIGdvdF9zY29wZSA9IE5VTExfVFJFRTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTgyOgorI2xpbmUgMzEyMyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTgzOgorI2xpbmUgMzEyOCAicGFyc2UueSIKK3sgZ290X3Njb3BlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA1ODQ6CisjbGluZSAzMTMwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgZ290X3Njb3BlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA1ODU6CisjbGluZSAzMTM3ICJwYXJzZS55IgoreyBnb3Rfc2NvcGUgPSB2b2lkX3R5cGVfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTg2OgorI2xpbmUgMzE0MyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU4NzoKKyNsaW5lIDMxNDUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1ODg6CisjbGluZSAzMTQ3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcmVmZXJlbmNlX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1ODk6CisjbGluZSAzMTQ5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcmVmZXJlbmNlX2RlY2xhcmF0b3IgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1OTA6CisjbGluZSAzMTUxICJwYXJzZS55IgoreyB0cmVlIGFyZyA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKFNDT1BFX1JFRiwgeXl2c3BbLTFdLnR0eXBlLCBhcmcpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1OTE6CisjbGluZSAzMTU1ICJwYXJzZS55IgoreyB0cmVlIGFyZyA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKFNDT1BFX1JFRiwgeXl2c3BbLTJdLnR0eXBlLCBhcmcpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1OTM6CisjbGluZSAzMTY0ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1OTQ6CisjbGluZSAzMTY2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKEFSUkFZX1JFRiwgeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU5NToKKyNsaW5lIDMxNzIgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS5mdHlwZS50LCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU5NjoKKyNsaW5lIDMxNzQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1OTc6CisjbGluZSAzMTc2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFswXS5mdHlwZS50LCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1OTg6CisjbGluZSAzMTc4ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDU5OToKKyNsaW5lIDMxODAgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9yZWZlcmVuY2VfZGVjbGFyYXRvciAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjAwOgorI2xpbmUgMzE4MiAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjAxOgorI2xpbmUgMzE4NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yICh5eXZzcFswXS5mdHlwZS50LCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2MDI6CisjbGluZSAzMTg2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcmVmZXJlbmNlX2RlY2xhcmF0b3IgKE5VTExfVFJFRSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjAzOgorI2xpbmUgMzE4OCAicGFyc2UueSIKK3sgdHJlZSBhcmcgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0xXS50dHlwZSwgYXJnKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjA0OgorI2xpbmUgMzE5MiAicGFyc2UueSIKK3sgdHJlZSBhcmcgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9wYXJzZV9ub2RlIChTQ09QRV9SRUYsIHl5dnNwWy0yXS50dHlwZSwgYXJnKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjA2OgorI2xpbmUgMzIwMSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDYwODoKKyNsaW5lIDMyMDUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9jYWxsX2RlY2xhcmF0b3IgKHl5dmFsLnR0eXBlLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2MDk6CisjbGluZSAzMjA3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfY2FsbF9kZWNsYXJhdG9yICh5eXZhbC50dHlwZSwgZW1wdHlfcGFybXMgKCksIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2MTA6CisjbGluZSAzMjA5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKEFSUkFZX1JFRiwgeXl2YWwudHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDYxMToKKyNsaW5lIDMyMTEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQVJSQVlfUkVGLCB5eXZhbC50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjEyOgorI2xpbmUgMzIxMyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBtYWtlX2NhbGxfZGVjbGFyYXRvciAoTlVMTF9UUkVFLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2MTM6CisjbGluZSAzMjE1ICJwYXJzZS55IgoreyBzZXRfcXVhbHNfYW5kX3NwZWMgKHl5dmFsLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjE0OgorI2xpbmUgMzIxNyAicGFyc2UueSIKK3sgc2V0X3F1YWxzX2FuZF9zcGVjICh5eXZhbC50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDYxNToKKyNsaW5lIDMyMTkgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQVJSQVlfUkVGLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDYxNjoKKyNsaW5lIDMyMjEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfcGFyc2Vfbm9kZSAoQVJSQVlfUkVGLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDYyMjoKKyNsaW5lIDMyNDUgInBhcnNlLnkiCit7IGRvX3B1c2hsZXZlbCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjIzOgorI2xpbmUgMzI1MCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBkb19wb3BsZXZlbCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjI1OgorI2xpbmUgMzI1OCAicGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQysrIGZvcmJpZHMgbGFiZWwgZGVjbGFyYXRpb25zIik7IDsKKyAgICBicmVhazt9CitjYXNlIDYyODoKKyNsaW5lIDMyNjkgInBhcnNlLnkiCit7IHRyZWUgbGluazsKKwkJICBmb3IgKGxpbmsgPSB5eXZzcFstMV0udHR5cGU7IGxpbms7IGxpbmsgPSBUUkVFX0NIQUlOIChsaW5rKSkKKwkJICAgIHsKKwkJICAgICAgdHJlZSBsYWJlbCA9IHNoYWRvd19sYWJlbCAoVFJFRV9WQUxVRSAobGluaykpOworCQkgICAgICBDX0RFQ0xBUkVEX0xBQkVMX0ZMQUcgKGxhYmVsKSA9IDE7CisJCSAgICAgIGRlY2xhcmVfbm9ubG9jYWxfbGFiZWwgKGxhYmVsKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjI5OgorI2xpbmUgMzI4MyAicGFyc2UueSIKK3s7CisgICAgYnJlYWs7fQorY2FzZSA2MzE6CisjbGluZSAzMjg5ICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWluX250IChDT01QT1VORF9TVE1ULCBOVUxMX1RSRUUpOworCQkgICAgICBhZGRfdHJlZSAoeXl2YWwudHR5cGUpOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA2MzI6CisjbGluZSAzMjk3ICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIFRSRUVfT1BFUkFORCAoeXl2c3BbLTNdLnR0eXBlLCAwKSA9IFRSRUVfQ0hBSU4gKHl5dnNwWy0zXS50dHlwZSk7CisJCSAgICAgIFRSRUVfQ0hBSU4gKHl5dnNwWy0zXS50dHlwZSkgPSBOVUxMX1RSRUU7CisJCSAgICAgIGxhc3RfdHJlZSA9IHl5dnNwWy0zXS50dHlwZTsKKwkJICAgIH0KKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2MzM6CisjbGluZSAzMzEwICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWluX250IChJRl9TVE1ULCBOVUxMX1RSRUUsIE5VTExfVFJFRSwKKwkJCQkJICAgICAgICBOVUxMX1RSRUUpOworCQkgICAgICBhZGRfdHJlZSAoeXl2YWwudHR5cGUpOworCQkgICAgfQorICAgICAgICAgICAgICAgICAgY29uZF9zdG10X2tleXdvcmQgPSAiaWYiOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2MzQ6CisjbGluZSAzMzIwICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIGlmIChsYXN0X3RyZWUgIT0geXl2c3BbLTJdLnR0eXBlKQorCQkgICAgICAgIHsKKwkJCSAgVFJFRV9PUEVSQU5EICh5eXZzcFstMl0udHR5cGUsIDApID0gbGFzdF90cmVlOworCQkJICBUUkVFX0NIQUlOICh5eXZzcFstMl0udHR5cGUpID0gTlVMTF9UUkVFOworCQkJICBsYXN0X3RyZWUgPSB5eXZzcFstMl0udHR5cGU7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJICAgICAgICBUUkVFX09QRVJBTkQgKHl5dnNwWy0yXS50dHlwZSwgMCkgPSB5eXZzcFswXS50dHlwZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICAgICAgZXhwYW5kX3N0YXJ0X2NvbmQgKHl5dnNwWzBdLnR0eXBlLCAwKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjM1OgorI2xpbmUgMzMzOSAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBUUkVFX09QRVJBTkQgKHl5dnNwWy00XS50dHlwZSwgMSkgPSBUUkVFX0NIQUlOICh5eXZzcFstNF0udHR5cGUpOworCQkgICAgICBUUkVFX0NIQUlOICh5eXZzcFstNF0udHR5cGUpID0gTlVMTF9UUkVFOworCQkgICAgICB5eXZhbC50dHlwZSA9IGxhc3RfdHJlZSA9IHl5dnNwWy00XS50dHlwZTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjM2OgorI2xpbmUgMzM1MSAicGFyc2UueSIKK3sgZmluaXNoX3N0bXQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDYzNzoKKyNsaW5lIDMzNTMgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBidWlsZF9taW5fbnQgKENPTVBPVU5EX1NUTVQsIE5VTExfVFJFRSk7CisJCSAgICAgIGFkZF90cmVlICh5eXZhbC50dHlwZSk7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDYzODoKKyNsaW5lIDMzNjEgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstMl0udHR5cGUsIDApID0gVFJFRV9DSEFJTiAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICAgICAgVFJFRV9DSEFJTiAoeXl2c3BbLTJdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJICAgICAgbGFzdF90cmVlID0geXl2c3BbLTJdLnR0eXBlOworCQkgICAgfQorCQkgIHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDYzOToKKyNsaW5lIDMzNzQgInBhcnNlLnkiCit7IGZpbmlzaF9zdG10ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NDE6CisjbGluZSAzMzgwICJwYXJzZS55IgoreyBmaW5pc2hfc3RtdCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjQyOgorI2xpbmUgMzM4MiAicGFyc2UueSIKK3sKKwkJICB0cmVlIGV4cHIgPSB5eXZzcFstMV0udHR5cGU7CisJCSAgaWYgKCEgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgICAgIC8qIERvIGRlZmF1bHQgY29udmVyc2lvbiBpZiBzYWZlIGFuZCBwb3NzaWJseSBpbXBvcnRhbnQsCisJCSAgICAgICAgIGluIGNhc2Ugd2l0aGluICh7Li4ufSkuICAqLworCQkgICAgICBpZiAoKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChleHByKSkgPT0gQVJSQVlfVFlQRQorCQkgICAgICAgICAgICYmIGx2YWx1ZV9wIChleHByKSkKKwkJICAgICAgICAgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFIChleHByKSkgPT0gRlVOQ1RJT05fVFlQRSkKKwkJICAgICAgICBleHByID0gZGVmYXVsdF9jb252ZXJzaW9uIChleHByKTsKKwkJICAgIH0KKwkJICBjcGx1c19leHBhbmRfZXhwcl9zdG10IChleHByKTsKKwkJICBjbGVhcl9tb21lbnRhcnkgKCk7CisJCSAgZmluaXNoX3N0bXQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDY0MzoKKyNsaW5lIDMzOTggInBhcnNlLnkiCit7IGlmICghIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkgZXhwYW5kX3N0YXJ0X2Vsc2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDY0NDoKKyNsaW5lIDM0MDAgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstM10udHR5cGUsIDIpID0gVFJFRV9DSEFJTiAoeXl2c3BbLTNdLnR0eXBlKTsKKwkJICAgICAgVFJFRV9DSEFJTiAoeXl2c3BbLTNdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJICAgICAgbGFzdF90cmVlID0geXl2c3BbLTNdLnR0eXBlOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIGV4cGFuZF9lbmRfY29uZCAoKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjQ1OgorI2xpbmUgMzQxMSAicGFyc2UueSIKK3sgZmluaXNoX3N0bXQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDY0NjoKKyNsaW5lIDM0MTMgInBhcnNlLnkiCit7IGlmICghIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkgZXhwYW5kX2VuZF9jb25kICgpOworCQkgIGRvX3BvcGxldmVsICgpOworCQkgIGZpbmlzaF9zdG10ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NDc6CisjbGluZSAzNDE3ICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWluX250IChXSElMRV9TVE1ULCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgICAgIGFkZF90cmVlICh5eXZhbC50dHlwZSk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBlbWl0X25vcCAoKTsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBleHBhbmRfc3RhcnRfbG9vcCAoMSk7IAorCQkgICAgfQorCQkgIGNvbmRfc3RtdF9rZXl3b3JkID0gIndoaWxlIjsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjQ4OgorI2xpbmUgMzQzMiAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBpZiAobGFzdF90cmVlICE9IHl5dnNwWy0yXS50dHlwZSkKKwkJICAgICAgICB7CisJCQkgIFRSRUVfT1BFUkFORCAoeXl2c3BbLTJdLnR0eXBlLCAwKSA9IGxhc3RfdHJlZTsKKwkJCSAgVFJFRV9DSEFJTiAoeXl2c3BbLTJdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJCSAgbGFzdF90cmVlID0geXl2c3BbLTJdLnR0eXBlOworCQkJfQorCQkgICAgICBlbHNlCisJCSAgICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstMl0udHR5cGUsIDApID0geXl2c3BbMF0udHR5cGU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgICAgIGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UgKDAsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjQ5OgorI2xpbmUgMzQ1MSAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBUUkVFX09QRVJBTkQgKHl5dnNwWy01XS50dHlwZSwgMSkgPSBUUkVFX0NIQUlOICh5eXZzcFstNV0udHR5cGUpOworCQkgICAgICBUUkVFX0NIQUlOICh5eXZzcFstNV0udHR5cGUpID0gTlVMTF9UUkVFOworCQkgICAgICBsYXN0X3RyZWUgPSB5eXZzcFstNV0udHR5cGU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgZXhwYW5kX2VuZF9sb29wICgpOworCQkgIGZpbmlzaF9zdG10ICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NTA6CisjbGluZSAzNDYzICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWluX250IChET19TVE1ULCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgICAgIGFkZF90cmVlICh5eXZhbC50dHlwZSk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBlbWl0X25vcCAoKTsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBleHBhbmRfc3RhcnRfbG9vcF9jb250aW51ZV9lbHNld2hlcmUgKDEpOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NTE6CisjbGluZSAzNDc3ICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIFRSRUVfT1BFUkFORCAoeXl2c3BbLTJdLnR0eXBlLCAwKSA9IFRSRUVfQ0hBSU4gKHl5dnNwWy0yXS50dHlwZSk7CisJCSAgICAgIFRSRUVfQ0hBSU4gKHl5dnNwWy0yXS50dHlwZSkgPSBOVUxMX1RSRUU7CisJCSAgICAgIGxhc3RfdHJlZSA9IHl5dnNwWy0yXS50dHlwZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGV4cGFuZF9sb29wX2NvbnRpbnVlX2hlcmUgKCk7CisJCSAgICAgIGNvbmRfc3RtdF9rZXl3b3JkID0gImRvIjsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjUyOgorI2xpbmUgMzQ5MSAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstNV0udHR5cGUsIDEpID0geXl2c3BbLTFdLnR0eXBlOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlICgwLCB5eXZzcFstMV0udHR5cGUpOworCQkgICAgICBleHBhbmRfZW5kX2xvb3AgKCk7CisJCSAgICB9CisJCSAgY2xlYXJfbW9tZW50YXJ5ICgpOworCQkgIGZpbmlzaF9zdG10ICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NTM6CisjbGluZSAzNTA0ICJwYXJzZS55IgoreyBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX21pbl9udCAoRk9SX1NUTVQsIE5VTExfVFJFRSwgTlVMTF9UUkVFLCAKKwkJCQkJICAgICAgICBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgICAgIGFkZF90cmVlICh5eXZhbC50dHlwZSk7CisJCSAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisJCSAgICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgaWYgKGZsYWdfbmV3X2Zvcl9zY29wZSA+IDApCisJCSAgICB7CisJCSAgICAgIC8qIENvbmRpdGlvbmFsaXplIC5wdXNobGV2ZWwgKi8KKwkJICAgICAgcHVzaGxldmVsICgwKTsKKwkJICAgICAgbm90ZV9sZXZlbF9mb3JfZm9yICgpOworCQkgICAgICBjbGVhcl9sYXN0X2V4cHIgKCk7CisJCSAgICAgIHB1c2hfbW9tZW50YXJ5ICgpOworCQkgICAgICBleHBhbmRfc3RhcnRfYmluZGluZ3MgKDApOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NTQ6CisjbGluZSAzNTIzICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIGlmIChsYXN0X3RyZWUgIT0geXl2c3BbLTJdLnR0eXBlKQorCQkJeworCQkJICBUUkVFX09QRVJBTkQgKHl5dnNwWy0yXS50dHlwZSwgMCkgPSBUUkVFX0NIQUlOICh5eXZzcFstMl0udHR5cGUpOworCQkJICBUUkVFX0NIQUlOICh5eXZzcFstMl0udHR5cGUpID0gTlVMTF9UUkVFOworCQkJICBsYXN0X3RyZWUgPSB5eXZzcFstMl0udHR5cGU7CisJCQl9CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBlbWl0X25vcCAoKTsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBleHBhbmRfc3RhcnRfbG9vcF9jb250aW51ZV9lbHNld2hlcmUgKDEpOyAKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjU1OgorI2xpbmUgMzU0MSAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBpZiAobGFzdF90cmVlICE9IHl5dnNwWy02XS50dHlwZSkKKwkJICAgICAgICB7CisJCQkgIFRSRUVfT1BFUkFORCAoeXl2c3BbLTZdLnR0eXBlLCAxKSA9IGxhc3RfdHJlZTsKKwkJCSAgVFJFRV9DSEFJTiAoeXl2c3BbLTZdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJCSAgbGFzdF90cmVlID0geXl2c3BbLTZdLnR0eXBlOworCQkJfQorCQkgICAgICBlbHNlCisJCSAgICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstNl0udHR5cGUsIDEpID0geXl2c3BbLTFdLnR0eXBlOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBpZiAoeXl2c3BbLTFdLnR0eXBlKSBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlICgwLCB5eXZzcFstMV0udHR5cGUpOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NTY6CisjbGluZSAzNTYyICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICBUUkVFX09QRVJBTkQgKHl5dnNwWy05XS50dHlwZSwgMikgPSB5eXZzcFstMV0udHR5cGU7CisJCSAgcHVzaF9tb21lbnRhcnkgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY1NzoKKyNsaW5lIDM1NjggInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstMTJdLnR0eXBlLCAzKSA9IFRSRUVfQ0hBSU4gKHl5dnNwWy0xMl0udHR5cGUpOworCQkgICAgICBUUkVFX0NIQUlOICh5eXZzcFstMTJdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJICAgICAgbGFzdF90cmVlID0geXl2c3BbLTEyXS50dHlwZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICAgICAgZXhwYW5kX2xvb3BfY29udGludWVfaGVyZSAoKTsKKwkJICAgICAgaWYgKHl5dnNwWy00XS50dHlwZSkgY3BsdXNfZXhwYW5kX2V4cHJfc3RtdCAoeXl2c3BbLTRdLnR0eXBlKTsKKwkJICAgICAgZXhwYW5kX2VuZF9sb29wICgpOworCQkgICAgfQorCQkgIHBvcF9tb21lbnRhcnkgKCk7CisJCSAgaWYgKGZsYWdfbmV3X2Zvcl9zY29wZSA+IDApCisJCSAgICB7CisJCSAgICAgIGRvX3BvcGxldmVsICgpOworCQkgICAgfQorCQkgIGZpbmlzaF9zdG10ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NTg6CisjbGluZSAzNTg5ICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWluX250IChTV0lUQ0hfU1RNVCwgeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUpOworCQkgICAgICBhZGRfdHJlZSAoeXl2YWwudHR5cGUpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBjX2V4cGFuZF9zdGFydF9jYXNlICh5eXZzcFstMV0udHR5cGUpOworCQkgICAgfQorCQkgIHB1c2hfc3dpdGNoICgpOworCQkgIC8qIERvbid0IGxldCB0aGUgdHJlZSBub2RlcyBmb3IgJDQgYmUgZGlzY2FyZGVkIGJ5CisJCSAgICAgY2xlYXJfbW9tZW50YXJ5IGR1cmluZyB0aGUgcGFyc2luZyBvZiB0aGUgbmV4dCBzdG10LiAgKi8KKwkJICBwdXNoX21vbWVudGFyeSAoKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjU5OgorI2xpbmUgMzYwNiAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBUUkVFX09QRVJBTkQgKHl5dnNwWy0xXS50dHlwZSwgMSkgPSBUUkVFX0NIQUlOICh5eXZzcFstMV0udHR5cGUpOworCQkgICAgICBUUkVFX0NIQUlOICh5eXZzcFstMV0udHR5cGUpID0gTlVMTF9UUkVFOworCQkgICAgICBsYXN0X3RyZWUgPSB5eXZzcFstMV0udHR5cGU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgZXhwYW5kX2VuZF9jYXNlICh5eXZzcFstM10udHR5cGUpOworCQkgIHBvcF9tb21lbnRhcnkgKCk7CisJCSAgcG9wX3N3aXRjaCAoKTsgCisJCTsKKyAgICBicmVhazt9CitjYXNlIDY2MDoKKyNsaW5lIDM2MTkgInBhcnNlLnkiCit7IGZpbmlzaF9zdG10ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NjE6CisjbGluZSAzNjIxICJwYXJzZS55IgoreyBkb19jYXNlICh5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDY2MzoKKyNsaW5lIDM2MjQgInBhcnNlLnkiCit7IGRvX2Nhc2UgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjY1OgorI2xpbmUgMzYyNyAicGFyc2UueSIKK3sgZG9fY2FzZSAoTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2Njc6CisjbGluZSAzNjMwICJwYXJzZS55IgoreyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIGFkZF90cmVlIChidWlsZF9taW5fbnQgKEJSRUFLX1NUTVQpKTsKKwkJICBlbHNlIGlmICggISBleHBhbmRfZXhpdF9zb21ldGhpbmcgKCkpCisJCSAgICBlcnJvciAoImJyZWFrIHN0YXRlbWVudCBub3Qgd2l0aGluIGxvb3Agb3Igc3dpdGNoIik7IDsKKyAgICBicmVhazt9CitjYXNlIDY2ODoKKyNsaW5lIDM2MzYgInBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgYWRkX3RyZWUgKGJ1aWxkX21pbl9udCAoQ09OVElOVUVfU1RNVCkpOworCQkgIGVsc2UgaWYgKCEgZXhwYW5kX2NvbnRpbnVlX2xvb3AgKDApKQorCQkgICAgZXJyb3IgKCJjb250aW51ZSBzdGF0ZW1lbnQgbm90IHdpdGhpbiBhIGxvb3AiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjY5OgorI2xpbmUgMzY0MiAicGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGNfZXhwYW5kX3JldHVybiAoTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjcwOgorI2xpbmUgMzY0NSAicGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGNfZXhwYW5kX3JldHVybiAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBmaW5pc2hfc3RtdCAoKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjcxOgorI2xpbmUgMzY1MCAicGFyc2UueSIKK3sgaWYgKFRSRUVfQ0hBSU4gKHl5dnNwWy0yXS50dHlwZSkpIHl5dnNwWy0yXS50dHlwZSA9IGNvbWJpbmVfc3RyaW5ncyAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2FzbSAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICBmaW5pc2hfc3RtdCAoKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjcyOgorI2xpbmUgMzY1NyAicGFyc2UueSIKK3sgaWYgKFRSRUVfQ0hBSU4gKHl5dnNwWy00XS50dHlwZSkpIHl5dnNwWy00XS50dHlwZSA9IGNvbWJpbmVfc3RyaW5ncyAoeXl2c3BbLTRdLnR0eXBlKTsKKwkJICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgY19leHBhbmRfYXNtX29wZXJhbmRzICh5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsCisJCQkJCSB5eXZzcFstNl0udHR5cGUgPT0gcmlkcG9pbnRlcnNbKGludClSSURfVk9MQVRJTEVdLAorCQkJCQkgaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZmluaXNoX3N0bXQgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY3MzoKKyNsaW5lIDM2NjYgInBhcnNlLnkiCit7IGlmIChUUkVFX0NIQUlOICh5eXZzcFstNl0udHR5cGUpKSB5eXZzcFstNl0udHR5cGUgPSBjb21iaW5lX3N0cmluZ3MgKHl5dnNwWy02XS50dHlwZSk7CisJCSAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoeXl2c3BbLTZdLnR0eXBlLCB5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFLAorCQkJCQkgeXl2c3BbLThdLnR0eXBlID09IHJpZHBvaW50ZXJzWyhpbnQpUklEX1ZPTEFUSUxFXSwKKwkJCQkJIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGZpbmlzaF9zdG10ICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NzQ6CisjbGluZSAzNjc2ICJwYXJzZS55IgoreyBpZiAoVFJFRV9DSEFJTiAoeXl2c3BbLThdLnR0eXBlKSkgeXl2c3BbLThdLnR0eXBlID0gY29tYmluZV9zdHJpbmdzICh5eXZzcFstOF0udHR5cGUpOworCQkgIGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBjX2V4cGFuZF9hc21fb3BlcmFuZHMgKHl5dnNwWy04XS50dHlwZSwgeXl2c3BbLTZdLnR0eXBlLCB5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwKKwkJCQkJIHl5dnNwWy0xMF0udHR5cGUgPT0gcmlkcG9pbnRlcnNbKGludClSSURfVk9MQVRJTEVdLAorCQkJCQkgaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZmluaXNoX3N0bXQgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY3NToKKyNsaW5lIDM2ODQgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIGFkZF90cmVlIChidWlsZF9taW5fbnQgKEdPVE9fU1RNVCwgeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgZWxzZQorCQkgICAgeyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgICAgIGV4cGFuZF9jb21wdXRlZF9nb3RvICh5eXZzcFstMV0udHR5cGUpOyB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY3NjoKKyNsaW5lIDM2OTIgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIGFkZF90cmVlIChidWlsZF9taW5fbnQgKEdPVE9fU1RNVCwgeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICB0cmVlIGRlY2w7CisJCSAgICAgIGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICAgICAgZGVjbCA9IGxvb2t1cF9sYWJlbCAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICAgICAgVFJFRV9VU0VEIChkZWNsKSA9IDE7CisJCSAgICAgIGV4cGFuZF9nb3RvIChkZWNsKTsgCisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY3NzoKKyNsaW5lIDM3MDUgInBhcnNlLnkiCit7IGZpbmlzaF9zdG10ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2Nzg6CisjbGluZSAzNzA3ICJwYXJzZS55IgoreyBlcnJvciAoImxhYmVsIG11c3QgYmUgZm9sbG93ZWQgYnkgc3RhdGVtZW50Iik7CisJCSAgeXl1bmdldGMgKCd9JywgMCk7CisJCSAgZmluaXNoX3N0bXQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDY3OToKKyNsaW5lIDM3MTEgInBhcnNlLnkiCit7IGZpbmlzaF9zdG10ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2ODE6CisjbGluZSAzNzE3ICJwYXJzZS55IgoreworCQkgIGlmICghIGN1cnJlbnRfZnVuY3Rpb25fcGFybXNfc3RvcmVkKQorCQkgICAgc3RvcmVfcGFybV9kZWNscyAoKTsKKwkJICBleHBhbmRfc3RhcnRfZWFybHlfdHJ5X3N0bXRzICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2ODI6CisjbGluZSAzNzIzICJwYXJzZS55IgoreyBleHBhbmRfc3RhcnRfYWxsX2NhdGNoICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2ODM6CisjbGluZSAzNzI1ICJwYXJzZS55IgoreworCQkgIGludCBuZXN0ZWQgPSAoaGFja19kZWNsX2Z1bmN0aW9uX2NvbnRleHQKKwkJCQkoY3VycmVudF9mdW5jdGlvbl9kZWNsKSAhPSBOVUxMX1RSRUUpOworCQkgIGV4cGFuZF9lbmRfYWxsX2NhdGNoICgpOworCQkgIGZpbmlzaF9mdW5jdGlvbiAobGluZW5vLCAoaW50KXl5dnNwWy0zXS5pdHlwZSwgbmVzdGVkKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjg0OgorI2xpbmUgMzczNSAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX21pbl9udCAoVFJZX0JMT0NLLCBOVUxMX1RSRUUsCisJCQkJCQlOVUxMX1RSRUUpOworCQkgICAgICBhZGRfdHJlZSAoeXl2YWwudHR5cGUpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICAgICBleHBhbmRfc3RhcnRfdHJ5X3N0bXRzICgpOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA2ODU6CisjbGluZSAzNzQ5ICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIFRSRUVfT1BFUkFORCAoeXl2c3BbLTFdLnR0eXBlLCAwKSA9IFRSRUVfQ0hBSU4gKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgICAgIFRSRUVfQ0hBSU4gKHl5dnNwWy0xXS50dHlwZSkgPSBOVUxMX1RSRUU7CisJCSAgICAgIGxhc3RfdHJlZSA9IHl5dnNwWy0xXS50dHlwZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBleHBhbmRfc3RhcnRfYWxsX2NhdGNoICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2ODY6CisjbGluZSAzNzYwICJwYXJzZS55IgoreworCQkgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpCisJCSAgICB7CisJCSAgICAgIFRSRUVfT1BFUkFORCAoeXl2c3BbLTNdLnR0eXBlLCAxKSA9IFRSRUVfQ0hBSU4gKHl5dnNwWy0zXS50dHlwZSk7CisJCSAgICAgIFRSRUVfQ0hBSU4gKHl5dnNwWy0zXS50dHlwZSkgPSBOVUxMX1RSRUU7CisJCSAgICAgIGxhc3RfdHJlZSA9IHl5dnNwWy0zXS50dHlwZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBleHBhbmRfZW5kX2FsbF9jYXRjaCAoKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjg5OgorI2xpbmUgMzc3OSAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX21pbl9udCAoSEFORExFUiwgTlVMTF9UUkVFLAorCQkJCQkJTlVMTF9UUkVFKTsKKwkJICAgICAgYWRkX3RyZWUgKHl5dmFsLnR0eXBlKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNjkwOgorI2xpbmUgMzc4OCAicGFyc2UueSIKK3sKKwkJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQorCQkgICAgeworCQkgICAgICBUUkVFX09QRVJBTkQgKHl5dnNwWy0yXS50dHlwZSwgMCkgPSBUUkVFX0NIQUlOICh5eXZzcFstMl0udHR5cGUpOworCQkgICAgICBUUkVFX0NIQUlOICh5eXZzcFstMl0udHR5cGUpID0gTlVMTF9UUkVFOworCQkgICAgICBsYXN0X3RyZWUgPSB5eXZzcFstMl0udHR5cGU7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY5MToKKyNsaW5lIDM3OTcgInBhcnNlLnkiCit7CisJCSAgaWYgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKKwkJICAgIHsKKwkJICAgICAgVFJFRV9PUEVSQU5EICh5eXZzcFstNF0udHR5cGUsIDEpID0gVFJFRV9DSEFJTiAoeXl2c3BbLTRdLnR0eXBlKTsKKwkJICAgICAgVFJFRV9DSEFJTiAoeXl2c3BbLTRdLnR0eXBlKSA9IE5VTExfVFJFRTsKKwkJICAgICAgbGFzdF90cmVlID0geXl2c3BbLTRdLnR0eXBlOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2sgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDY5NToKKyNsaW5lIDM4MTcgInBhcnNlLnkiCit7IGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayAoTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2OTY6CisjbGluZSAzODMzICJwYXJzZS55IgoreyBjaGVja19mb3JfbmV3X3R5cGUgKCJpbnNpZGUgZXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIsIHl5dnNwWy0xXS5mdHlwZSk7CisJCSAgZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrIChUUkVFX1BVUlBPU0UgKHl5dnNwWy0xXS5mdHlwZS50KSwKKwkJCQkJICAgIFRSRUVfVkFMVUUgKHl5dnNwWy0xXS5mdHlwZS50KSk7IDsKKyAgICBicmVhazt9CitjYXNlIDY5NzoKKyNsaW5lIDM4NDAgInBhcnNlLnkiCit7IHRyZWUgbGFiZWw7CisJCWRvX2xhYmVsOgorCQkgIGxhYmVsID0gZGVmaW5lX2xhYmVsIChpbnB1dF9maWxlbmFtZSwgbGluZW5vLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGlmIChsYWJlbCAmJiAhIG1pbmltYWxfcGFyc2VfbW9kZSkKKwkJICAgIGV4cGFuZF9sYWJlbCAobGFiZWwpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA2OTg6CisjbGluZSAzODQ3ICJwYXJzZS55IgoreyBnb3RvIGRvX2xhYmVsOyA7CisgICAgYnJlYWs7fQorY2FzZSA2OTk6CisjbGluZSAzODQ5ICJwYXJzZS55IgoreyBnb3RvIGRvX2xhYmVsOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MDA6CisjbGluZSAzODUxICJwYXJzZS55IgoreyBnb3RvIGRvX2xhYmVsOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MDE6CisjbGluZSAzODU2ICJwYXJzZS55IgoreyBpZiAoeXl2c3BbLTFdLnR0eXBlKSBjcGx1c19leHBhbmRfZXhwcl9zdG10ICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MDM6CisjbGluZSAzODU5ICJwYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDKysgZm9yYmlkcyBjb21wb3VuZCBzdGF0ZW1lbnRzIGluc2lkZSBmb3IgaW5pdGlhbGl6YXRpb25zIik7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDcwNDoKKyNsaW5lIDM4NjggInBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzA1OgorI2xpbmUgMzg3MSAicGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MDY6CisjbGluZSAzODc2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzA4OgorI2xpbmUgMzg3OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDcwOToKKyNsaW5lIDM4ODYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MTI6CisjbGluZSAzODkzICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDcxMzoKKyNsaW5lIDM4OTggInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZhbC50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzE0OgorI2xpbmUgMzkwMyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2YWwudHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDcxNToKKyNsaW5lIDM5MDUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZhbC50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDcxNjoKKyNsaW5lIDM5MTYgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBlbXB0eV9wYXJtcygpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3MTg6CisjbGluZSAzOTIxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50LCB2b2lkX2xpc3Rfbm9kZSk7CisJCSAgVFJFRV9QQVJNTElTVCAoeXl2YWwudHR5cGUpID0gMTsgCisJCSAgY2hlY2tfZm9yX25ld190eXBlICgiaW5zaWRlIHBhcmFtZXRlciBsaXN0IiwgeXl2c3BbMF0uZnR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MTk6CisjbGluZSAzOTMwICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2YWwudHR5cGUsIHZvaWRfbGlzdF9ub2RlKTsKKwkJICBUUkVFX1BBUk1MSVNUICh5eXZhbC50dHlwZSkgPSAxOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3MjA6CisjbGluZSAzOTM1ICJwYXJzZS55IgoreworCQkgIFRSRUVfUEFSTUxJU1QgKHl5dmFsLnR0eXBlKSA9IDE7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDcyMToKKyNsaW5lIDM5NDAgInBhcnNlLnkiCit7CisJCSAgVFJFRV9QQVJNTElTVCAoeXl2YWwudHR5cGUpID0gMTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNzIyOgorI2xpbmUgMzk0NCAicGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFstMV0uZnR5cGUudCk7IAorCQkgIFRSRUVfUEFSTUxJU1QgKHl5dmFsLnR0eXBlKSA9IDE7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDcyMzoKKyNsaW5lIDM5NDkgInBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDcyNDoKKyNsaW5lIDM5NTMgInBhcnNlLnkiCit7CisJCSAgVFJFRV9QQVJNTElTVCAoeXl2YWwudHR5cGUpID0gMTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNzI1OgorI2xpbmUgMzk1NyAicGFyc2UueSIKK3sKKwkJICBUUkVFX1BBUk1MSVNUICh5eXZhbC50dHlwZSkgPSAxOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3MjY6CisjbGluZSAzOTYxICJwYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWy0xXS5mdHlwZS50KTsKKwkJICBUUkVFX1BBUk1MSVNUICh5eXZhbC50dHlwZSkgPSAxOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3Mjc6CisjbGluZSAzOTY2ICJwYXJzZS55IgoreworCQkgIC8qIFRoaXMgaGVscHMgdXMgcmVjb3ZlciBmcm9tIHJlYWxseSBuYXN0eQorCQkgICAgIHBhcnNlIGVycm9ycywgZm9yIGV4YW1wbGUsIGEgbWlzc2luZyByaWdodAorCQkgICAgIHBhcmVudGhlc2lzLiAgKi8KKwkJICB5eWVycm9yICgicG9zc2libHkgbWlzc2luZyAnKSciKTsKKwkJICB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dmFsLnR0eXBlLCB2b2lkX2xpc3Rfbm9kZSk7CisJCSAgVFJFRV9QQVJNTElTVCAoeXl2YWwudHR5cGUpID0gMTsKKwkJICB5eXVuZ2V0YyAoJzonLCAwKTsKKwkJICB5eWNoYXIgPSAnKSc7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDcyODoKKyNsaW5lIDM5NzcgInBhcnNlLnkiCit7CisJCSAgLyogVGhpcyBoZWxwcyB1cyByZWNvdmVyIGZyb20gcmVhbGx5IG5hc3R5CisJCSAgICAgcGFyc2UgZXJyb3JzLCBmb3IgZXhhbXBsZSwgYSBtaXNzaW5nIHJpZ2h0CisJCSAgICAgcGFyZW50aGVzaXMuICAqLworCQkgIHl5ZXJyb3IgKCJwb3NzaWJseSBtaXNzaW5nICcpJyIpOworCQkgIHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS5mdHlwZS50LCB2b2lkX2xpc3Rfbm9kZSk7CisJCSAgVFJFRV9QQVJNTElTVCAoeXl2YWwudHR5cGUpID0gMTsKKwkJICB5eXVuZ2V0YyAoJzonLCAwKTsKKwkJICB5eWNoYXIgPSAnKSc7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDcyOToKKyNsaW5lIDM5OTIgInBhcnNlLnkiCit7IG1heWJlX3NuYXJmX2RlZmFyZyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzMwOgorI2xpbmUgMzk5NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzMzOgorI2xpbmUgNDAwNSAicGFyc2UueSIKK3sgY2hlY2tfZm9yX25ld190eXBlICgiaW4gYSBwYXJhbWV0ZXIgbGlzdCIsIHl5dnNwWzBdLmZ0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50KTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzM0OgorI2xpbmUgNDAwOCAicGFyc2UueSIKK3sgY2hlY2tfZm9yX25ld190eXBlICgiaW4gYSBwYXJhbWV0ZXIgbGlzdCIsIHl5dnNwWy0xXS5mdHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0uZnR5cGUudCk7IDsKKyAgICBicmVhazt9CitjYXNlIDczNToKKyNsaW5lIDQwMTEgInBhcnNlLnkiCit7IGNoZWNrX2Zvcl9uZXdfdHlwZSAoImluIGEgcGFyYW1ldGVyIGxpc3QiLCB5eXZzcFswXS5mdHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZhbC50dHlwZSwgeXl2c3BbMF0uZnR5cGUudCk7IDsKKyAgICBicmVhazt9CitjYXNlIDczNjoKKyNsaW5lIDQwMTQgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2YWwudHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3Mzc6CisjbGluZSA0MDE2ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dmFsLnR0eXBlLCBidWlsZF90cmVlX2xpc3QgKHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzM5OgorI2xpbmUgNDAyMiAicGFyc2UueSIKK3sgY2hlY2tfZm9yX25ld190eXBlICgiaW4gYSBwYXJhbWV0ZXIgbGlzdCIsIHl5dnNwWy0xXS5mdHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbLTFdLmZ0eXBlLnQpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NDA6CisjbGluZSA0MDMyICJwYXJzZS55IgoreyB0cmVlIHNwZWNzID0gc3RyaXBfYXR0cnMgKHl5dnNwWy0xXS5mdHlwZS50KTsKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0geXl2c3BbLTFdLmZ0eXBlLm5ld190eXBlX2ZsYWc7CisJCSAgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX3RyZWVfbGlzdCAoc3BlY3MsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzQxOgorI2xpbmUgNDAzNiAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTFdLmZ0eXBlLnQsIHl5dnNwWzBdLnR0eXBlKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWy0xXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NDI6CisjbGluZSA0MDM5ICJwYXJzZS55IgoreyB5eXZhbC5mdHlwZS50ID0gYnVpbGRfdHJlZV9saXN0IChnZXRfZGVjbF9saXN0ICh5eXZzcFstMV0uZnR5cGUudCksIHl5dnNwWzBdLnR0eXBlKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWy0xXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NDM6CisjbGluZSA0MDQyICJwYXJzZS55IgoreyB0cmVlIHNwZWNzID0gc3RyaXBfYXR0cnMgKHl5dnNwWy0xXS5mdHlwZS50KTsKKwkJICB5eXZhbC5mdHlwZS50ID0gYnVpbGRfdHJlZV9saXN0IChzcGVjcywgeXl2c3BbMF0udHR5cGUpOworCQkgIHl5dmFsLmZ0eXBlLm5ld190eXBlX2ZsYWcgPSB5eXZzcFstMV0uZnR5cGUubmV3X3R5cGVfZmxhZzsgOworICAgIGJyZWFrO30KK2Nhc2UgNzQ0OgorI2xpbmUgNDA0NiAicGFyc2UueSIKK3sgdHJlZSBzcGVjcyA9IHN0cmlwX2F0dHJzICh5eXZzcFswXS5mdHlwZS50KTsKKwkJICB5eXZhbC5mdHlwZS50ID0gYnVpbGRfdHJlZV9saXN0IChzcGVjcywgTlVMTF9UUkVFKTsgCisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWzBdLmZ0eXBlLm5ld190eXBlX2ZsYWc7IDsKKyAgICBicmVhazt9CitjYXNlIDc0NToKKyNsaW5lIDQwNTAgInBhcnNlLnkiCit7IHRyZWUgc3BlY3MgPSBzdHJpcF9hdHRycyAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICB5eXZhbC5mdHlwZS50ID0gYnVpbGRfdHJlZV9saXN0IChzcGVjcywgeXl2c3BbMF0udHR5cGUpOyAKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgNzQ2OgorI2xpbmUgNDA1NyAicGFyc2UueSIKK3sgeXl2YWwuZnR5cGUudCA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS5mdHlwZS50KTsKKwkJICB5eXZhbC5mdHlwZS5uZXdfdHlwZV9mbGFnID0geXl2c3BbMF0uZnR5cGUubmV3X3R5cGVfZmxhZzsgIDsKKyAgICBicmVhazt9CitjYXNlIDc0NzoKKyNsaW5lIDQwNjAgInBhcnNlLnkiCit7IHl5dmFsLmZ0eXBlLnQgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0uZnR5cGUudCk7CisJCSAgeXl2YWwuZnR5cGUubmV3X3R5cGVfZmxhZyA9IHl5dnNwWy0xXS5mdHlwZS5uZXdfdHlwZV9mbGFnOyAgOworICAgIGJyZWFrO30KK2Nhc2UgNzUwOgorI2xpbmUgNDA3MSAicGFyc2UueSIKK3sgc2VlX3R5cGVuYW1lICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NTE6CisjbGluZSA0MDc2ICJwYXJzZS55IgoreworCQkgIGVycm9yICgidHlwZSBzcGVjaWZpZXIgb21pdHRlZCBmb3IgcGFyYW1ldGVyIik7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGludGVnZXJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3NTI6CisjbGluZSA0MDgxICJwYXJzZS55IgoreworCQkgIGVycm9yICgidHlwZSBzcGVjaWZpZXIgb21pdHRlZCBmb3IgcGFyYW1ldGVyIik7CisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IFNDT1BFX1JFRgorCQkgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoeXl2YWwudHR5cGUsIDApKSA9PSBURU1QTEFURV9UWVBFX1BBUk0pCisJCSAgICBjcF9lcnJvciAoIiAgcGVyaGFwcyB5b3Ugd2FudCBgdHlwZW5hbWUgJUUnIHRvIG1ha2UgaXQgYSB0eXBlIiwgeXl2YWwudHR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChpbnRlZ2VyX3R5cGVfbm9kZSwgeXl2YWwudHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3NTM6CisjbGluZSA0MDkyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzU0OgorI2xpbmUgNDA5NCAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDc1NToKKyNsaW5lIDQwOTYgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZGVjbF9saXN0IChOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDc1NjoKKyNsaW5lIDQxMDEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZGVjbF9saXN0IChOVUxMX1RSRUUsIGdyb2t0eXBlbmFtZSh5eXZzcFswXS5mdHlwZS50KSk7IDsKKyAgICBicmVhazt9CitjYXNlIDc1ODoKKyNsaW5lIDQxMDcgInBhcnNlLnkiCit7CisJCSAgVFJFRV9DSEFJTiAoeXl2c3BbMF0udHR5cGUpID0geXl2YWwudHR5cGU7CisJCSAgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNzU5OgorI2xpbmUgNDExNSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDc2MDoKKyNsaW5lIDQxMTcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NjE6CisjbGluZSA0MTE5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcmVmZXJlbmNlX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NjI6CisjbGluZSA0MTIxICJwYXJzZS55IgoreyB0cmVlIGFyZyA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX3BhcnNlX25vZGUgKFNDT1BFX1JFRiwgeXl2c3BbLTJdLnR0eXBlLCBhcmcpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA3NjM6CisjbGluZSA0MTI4ICJwYXJzZS55IgoreyBnb3Rfc2NvcGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDc2NDoKKyNsaW5lIDQxMzMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbTVVMVF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzY1OgorI2xpbmUgNDEzNSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtUUlVOQ19ESVZfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc2NjoKKyNsaW5lIDQxMzcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbVFJVTkNfTU9EX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3Njc6CisjbGluZSA0MTM5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW1BMVVNfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc2ODoKKyNsaW5lIDQxNDEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbTUlOVVNfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc2OToKKyNsaW5lIDQxNDMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbQklUX0FORF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzcwOgorI2xpbmUgNDE0NSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtCSVRfSU9SX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NzE6CisjbGluZSA0MTQ3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW0JJVF9YT1JfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc3MjoKKyNsaW5lIDQxNDkgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbQklUX05PVF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzczOgorI2xpbmUgNDE1MSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtDT01QT1VORF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc0OgorI2xpbmUgNDE1MyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVt5eXZzcFswXS5jb2RlXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc1OgorI2xpbmUgNDE1NSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtMVF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc2OgorI2xpbmUgNDE1NyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtHVF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc3OgorI2xpbmUgNDE1OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVt5eXZzcFswXS5jb2RlXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc4OgorI2xpbmUgNDE2MSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX2Fzc29wbmFtZVt5eXZzcFswXS5jb2RlXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzc5OgorI2xpbmUgNDE2MyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZSBbTU9ESUZZX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODA6CisjbGluZSA0MTY1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW3l5dnNwWzBdLmNvZGVdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODE6CisjbGluZSA0MTY3ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW3l5dnNwWzBdLmNvZGVdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODI6CisjbGluZSA0MTY5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW1BPU1RJTkNSRU1FTlRfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc4MzoKKyNsaW5lIDQxNzEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbUFJFREVDUkVNRU5UX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODQ6CisjbGluZSA0MTczICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW1RSVVRIX0FORElGX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODU6CisjbGluZSA0MTc1ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW1RSVVRIX09SSUZfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc4NjoKKyNsaW5lIDQxNzcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbVFJVVEhfTk9UX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODc6CisjbGluZSA0MTc5ICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW0NPTkRfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc4ODoKKyNsaW5lIDQxODEgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbeXl2c3BbMF0uY29kZV07IDsKKyAgICBicmVhazt9CitjYXNlIDc4OToKKyNsaW5lIDQxODMgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbQ09NUE9ORU5UX1JFRl07IDsKKyAgICBicmVhazt9CitjYXNlIDc5MDoKKyNsaW5lIDQxODUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbTUVNQkVSX1JFRl07IDsKKyAgICBicmVhazt9CitjYXNlIDc5MToKKyNsaW5lIDQxODcgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbQ0FMTF9FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzkyOgorI2xpbmUgNDE4OSAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtBUlJBWV9SRUZdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3OTM6CisjbGluZSA0MTkxICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW05FV19FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzk0OgorI2xpbmUgNDE5MyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtERUxFVEVfRVhQUl07IDsKKyAgICBicmVhazt9CitjYXNlIDc5NToKKyNsaW5lIDQxOTUgInBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYW5zaV9vcG5hbWVbVkVDX05FV19FWFBSXTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzk2OgorI2xpbmUgNDE5NyAicGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBhbnNpX29wbmFtZVtWRUNfREVMRVRFX0VYUFJdOyA7CisgICAgYnJlYWs7fQorY2FzZSA3OTc6CisjbGluZSA0MjAwICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2tvcHR5cGVuYW1lICh5eXZzcFstMV0uZnR5cGUudCwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3OTg6CisjbGluZSA0MjAyICJwYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGFuc2lfb3BuYW1lW0VSUk9SX01BUktdOyA7CisgICAgYnJlYWs7fQorfQorICAgLyogdGhlIGFjdGlvbiBmaWxlIGdldHMgY29waWVkIGluIGluIHBsYWNlIG9mIHRoaXMgZG9sbGFyc2lnbiAqLworI2xpbmUgNDg3ICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uLnNpbXBsZSIKKwwKKyAgeXl2c3AgLT0geXlsZW47CisgIHl5c3NwIC09IHl5bGVuOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCAtPSB5eWxlbjsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwKys7CisgIGlmICh5eWxlbiA9PSAwKQorICAgIHsKKyAgICAgIHl5bHNwLT5maXJzdF9saW5lID0geXlsbG9jLmZpcnN0X2xpbmU7CisgICAgICB5eWxzcC0+Zmlyc3RfY29sdW1uID0geXlsbG9jLmZpcnN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AtMSktPmxhc3RfbGluZTsKKyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9jb2x1bW47CisgICAgICB5eWxzcC0+dGV4dCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2NvbHVtbjsKKyAgICB9CisjZW5kaWYKKworICAvKiBOb3cgInNoaWZ0IiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uCisgICAgIERldGVybWluZSB3aGF0IHN0YXRlIHRoYXQgZ29lcyB0bywKKyAgICAgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvCisgICAgIGFuZCB0aGUgcnVsZSBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRCQVNFXSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworeXllcnJsYWI6ICAgLyogaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgKi8KKworICBpZiAoISB5eWVycnN0YXR1cykKKyAgICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgICB7CisgICAgICArK3l5bmVycnM7CisKKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisJeworCSAgaW50IHNpemUgPSAwOworCSAgY2hhciAqbXNnOworCSAgaW50IHgsIGNvdW50OworCisJICBjb3VudCA9IDA7CisJICAvKiBTdGFydCBYIGF0IC15eW4gaWYgbmVjIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4geXljaGVjay4gICovCisJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKKwkgICAgICAgeCA8IChzaXplb2YoeXl0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7IHgrKykKKwkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkgICAgICBzaXplICs9IHN0cmxlbih5eXRuYW1lW3hdKSArIDE1LCBjb3VudCsrOworCSAgbXNnID0gKGNoYXIgKikgbWFsbG9jKHNpemUgKyAxNSk7CisJICBpZiAobXNnICE9IDApCisJICAgIHsKKwkgICAgICBzdHJjcHkobXNnLCAicGFyc2UgZXJyb3IiKTsKKworCSAgICAgIGlmIChjb3VudCA8IDUpCisJCXsKKwkJICBjb3VudCA9IDA7CisJCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJCSAgICAgICB4IDwgKHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCQkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkJICAgICAgeworCQkJc3RyY2F0KG1zZywgY291bnQgPT0gMCA/ICIsIGV4cGVjdGluZyBgIiA6ICIgb3IgYCIpOworCQkJc3RyY2F0KG1zZywgeXl0bmFtZVt4XSk7CisJCQlzdHJjYXQobXNnLCAiJyIpOworCQkJY291bnQrKzsKKwkJICAgICAgfQorCQl9CisJICAgICAgeXllcnJvcihtc2cpOworCSAgICAgIGZyZWUobXNnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB5eWVycm9yICgicGFyc2UgZXJyb3I7IGFsc28gdmlydHVhbCBtZW1vcnkgZXhjZWVkZWQiKTsKKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisJeXllcnJvcigicGFyc2UgZXJyb3IiKTsKKyAgICB9CisKKyAgZ290byB5eWVycmxhYjE7Cit5eWVycmxhYjE6ICAgLyogaGVyZSBvbiBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gKi8KKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBpZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQorCVlZQUJPUlQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiRGlzY2FyZGluZyB0b2tlbiAlZCAoJXMpLlxuIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgICAgICB5eWNoYXIgPSBZWUVNUFRZOworICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbgorICAgICBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uICAqLworCisgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworCisgIGdvdG8geXllcnJoYW5kbGU7CisKK3l5ZXJyZGVmYXVsdDogIC8qIGN1cnJlbnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgdGhlIGVycm9yIHRva2VuLiAqLworCisjaWYgMAorICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKyAgICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4qLworICBpZiAoeXluKSBnb3RvIHl5ZGVmYXVsdDsKKyNlbmRpZgorCit5eWVycnBvcDogICAvKiBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbiAqLworCisgIGlmICh5eXNzcCA9PSB5eXNzKSBZWUFCT1JUOworICB5eXZzcC0tOworICB5eXN0YXRlID0gKi0teXlzc3A7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwLS07CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCit5eWVycmhhbmRsZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biArPSBZWVRFUlJPUjsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSBZWVRFUlJPUikKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJwb3A7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJwb3A7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4sICIpOworI2VuZGlmCisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworfQorI2xpbmUgNDIwNSAicGFyc2UueSIKKworCisjaWZkZWYgU1BFV19ERUJVRworY29uc3QgY2hhciAqCitkZWJ1Z195eXRyYW5zbGF0ZSAodmFsdWUpCisgICAgaW50IHZhbHVlOworeworICByZXR1cm4geXl0bmFtZVtZWVRSQU5TTEFURSAodmFsdWUpXTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9nY2MvY3AvcGFyc2UuaCBiL2djYy9jcC9wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjc2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY3AvcGFyc2UuaApAQCAtMCwwICsxLDkxIEBACit0eXBlZGVmIHVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBjaGFyICpzdHJ0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOyBmbGFnZ2VkX3R5cGVfdHJlZSBmdHlwZTsgfSBZWVNUWVBFOworI2RlZmluZQlJREVOVElGSUVSCTI1OAorI2RlZmluZQlUWVBFTkFNRQkyNTkKKyNkZWZpbmUJU0VMRk5BTUUJMjYwCisjZGVmaW5lCVNDU1BFQwkyNjEKKyNkZWZpbmUJVFlQRVNQRUMJMjYyCisjZGVmaW5lCUNWX1FVQUxJRklFUgkyNjMKKyNkZWZpbmUJQ09OU1RBTlQJMjY0CisjZGVmaW5lCVNUUklORwkyNjUKKyNkZWZpbmUJRUxMSVBTSVMJMjY2CisjZGVmaW5lCVNJWkVPRgkyNjcKKyNkZWZpbmUJRU5VTQkyNjgKKyNkZWZpbmUJSUYJMjY5CisjZGVmaW5lCUVMU0UJMjcwCisjZGVmaW5lCVdISUxFCTI3MQorI2RlZmluZQlETwkyNzIKKyNkZWZpbmUJRk9SCTI3MworI2RlZmluZQlTV0lUQ0gJMjc0CisjZGVmaW5lCUNBU0UJMjc1CisjZGVmaW5lCURFRkFVTFQJMjc2CisjZGVmaW5lCUJSRUFLCTI3NworI2RlZmluZQlDT05USU5VRQkyNzgKKyNkZWZpbmUJUkVUVVJOCTI3OQorI2RlZmluZQlHT1RPCTI4MAorI2RlZmluZQlBU01fS0VZV09SRAkyODEKKyNkZWZpbmUJR0NDX0FTTV9LRVlXT1JECTI4MgorI2RlZmluZQlUWVBFT0YJMjgzCisjZGVmaW5lCUFMSUdOT0YJMjg0CisjZGVmaW5lCVNJR09GCTI4NQorI2RlZmluZQlBVFRSSUJVVEUJMjg2CisjZGVmaW5lCUVYVEVOU0lPTgkyODcKKyNkZWZpbmUJTEFCRUwJMjg4CisjZGVmaW5lCVJFQUxQQVJUCTI4OQorI2RlZmluZQlJTUFHUEFSVAkyOTAKKyNkZWZpbmUJQUdHUgkyOTEKKyNkZWZpbmUJVklTU1BFQwkyOTIKKyNkZWZpbmUJREVMRVRFCTI5MworI2RlZmluZQlORVcJMjk0CisjZGVmaW5lCVRISVMJMjk1CisjZGVmaW5lCU9QRVJBVE9SCTI5NgorI2RlZmluZQlDWFhfVFJVRQkyOTcKKyNkZWZpbmUJQ1hYX0ZBTFNFCTI5OAorI2RlZmluZQlOQU1FU1BBQ0UJMjk5CisjZGVmaW5lCVRZUEVOQU1FX0tFWVdPUkQJMzAwCisjZGVmaW5lCVVTSU5HCTMwMQorI2RlZmluZQlMRUZUX1JJR0hUCTMwMgorI2RlZmluZQlURU1QTEFURQkzMDMKKyNkZWZpbmUJVFlQRUlECTMwNAorI2RlZmluZQlEWU5BTUlDX0NBU1QJMzA1CisjZGVmaW5lCVNUQVRJQ19DQVNUCTMwNgorI2RlZmluZQlSRUlOVEVSUFJFVF9DQVNUCTMwNworI2RlZmluZQlDT05TVF9DQVNUCTMwOAorI2RlZmluZQlTQ09QRQkzMDkKKyNkZWZpbmUJRU1QVFkJMzEwCisjZGVmaW5lCVBUWVBFTkFNRQkzMTEKKyNkZWZpbmUJTlNOQU1FCTMxMgorI2RlZmluZQlUSFJPVwkzMTMKKyNkZWZpbmUJQVNTSUdOCTMxNAorI2RlZmluZQlPUk9SCTMxNQorI2RlZmluZQlBTkRBTkQJMzE2CisjZGVmaW5lCU1JTl9NQVgJMzE3CisjZGVmaW5lCUVRQ09NUEFSRQkzMTgKKyNkZWZpbmUJQVJJVEhDT01QQVJFCTMxOQorI2RlZmluZQlMU0hJRlQJMzIwCisjZGVmaW5lCVJTSElGVAkzMjEKKyNkZWZpbmUJUE9JTlRTQVRfU1RBUgkzMjIKKyNkZWZpbmUJRE9UX1NUQVIJMzIzCisjZGVmaW5lCVVOQVJZCTMyNAorI2RlZmluZQlQTFVTUExVUwkzMjUKKyNkZWZpbmUJTUlOVVNNSU5VUwkzMjYKKyNkZWZpbmUJSFlQRVJVTkFSWQkzMjcKKyNkZWZpbmUJUEFSRU5fU1RBUl9QQVJFTgkzMjgKKyNkZWZpbmUJUE9JTlRTQVQJMzI5CisjZGVmaW5lCVRSWQkzMzAKKyNkZWZpbmUJQ0FUQ0gJMzMxCisjZGVmaW5lCVRZUEVOQU1FX0VMTElQU0lTCTMzMgorI2RlZmluZQlQUkVfUEFSU0VEX0ZVTkNUSU9OX0RFQ0wJMzMzCisjZGVmaW5lCUVYVEVSTl9MQU5HX1NUUklORwkzMzQKKyNkZWZpbmUJQUxMCTMzNQorI2RlZmluZQlQUkVfUEFSU0VEX0NMQVNTX0RFQ0wJMzM2CisjZGVmaW5lCURFRkFSRwkzMzcKKyNkZWZpbmUJREVGQVJHX01BUktFUgkzMzgKKyNkZWZpbmUJVFlQRU5BTUVfREVGTgkzMzkKKyNkZWZpbmUJSURFTlRJRklFUl9ERUZOCTM0MAorI2RlZmluZQlQVFlQRU5BTUVfREVGTgkzNDEKKyNkZWZpbmUJRU5EX09GX0xJTkUJMzQyCisjZGVmaW5lCUVORF9PRl9TQVZFRF9JTlBVVAkzNDMKKworCitleHRlcm4gWVlTVFlQRSB5eWx2YWw7CisjZGVmaW5lIFlZRU1QVFkJCS0yCmRpZmYgLS1naXQgYS9nY2MvY3N0YW1wLWguaW4gYi9nY2MvY3N0YW1wLWguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4OGY3MAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9jc3RhbXAtaC5pbgpAQCAtMCwwICsxIEBACit0aW1lc3RhbXAKZGlmZiAtLWdpdCBhL2djYy9nY2MuMSBiL2djYy9nY2MuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDljOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2djYy4xCkBAIC0wLDAgKzEsNDE2NyBAQAorLlwiIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gICAgLSotVGV4dC0qLQorLlwiIFNlZSBzZWN0aW9uIENPUFlJTkcgZm9yIGNvbmRpdGlvbnMgZm9yIHJlZGlzdHJpYnV0aW9uCisuXCIKKy5cIiBTZXQgdXAgXCoobHEsIFwqKHJxIGlmIC1tYW4gaGFzbid0IGFscmVhZHkgc2V0IGl0IHVwLgorLmlmIEBAXCoobHFAIFx7XAorLglkcyBscSAiCisuCWlmIHQgLmRzIGxxIGBgCisuCWlmICFAQFwobHFAIC5kcyBscSAiXChscQorLlx9CisuaWYgQEBcKihycUAgXHtcCisuCWRzIHJxICIKKy4JaWYgdCAuZHMgcnEgJycKKy4JaWYgIUBAXChycUAgLmRzIHJxICJcKHJxCisuXH0KKy5kZSBJZAorLmRzIFJ2IFxcJDMKKy5kcyBEdCBcXCQ0CisuLgorLmRlIFNwCisuaWYgbiAuc3AKKy5pZiB0IC5zcCAwLjQKKy4uCisuSWQgJElkOiBnY2MuMSx2IDEuNCAxOTkzLzEwLzEzIDIzOjE5OjEyIHBlc2NoIEV4cCAkCisuVEggR0NDIDEgIlwqKER0IiAiR05VIFRvb2xzIiAiR05VIFRvb2xzIgorLlNIIE5BTUUKK2djYywgZysrIFwtIEdOVSBwcm9qZWN0IEMgYW5kIEMrKyBDb21waWxlciAodjIuNykKKy5TSCBTWU5PUFNJUworLkIgZ2NjCisuUkkgIlsgIiBvcHRpb24gIiB8ICIgZmlsZW5hbWUgIiBdLlx8Llx8LiIKKy5icgorLkIgZysrCisuUkkgIlsgIiBvcHRpb24gIiB8ICIgZmlsZW5hbWUgIiBdLlx8Llx8LiIKKy5TSCBXQVJOSU5HCitUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBtYW4gcGFnZSBpcyBhbiBleHRyYWN0IGZyb20gdGhlIGZ1bGwKK2RvY3VtZW50YXRpb24gb2YgdGhlIEdOVSBDIGNvbXBpbGVyLCBhbmQgaXMgbGltaXRlZCB0byB0aGUgbWVhbmluZyBvZgordGhlIG9wdGlvbnMuCisuUFAKK1RoaXMgbWFuIHBhZ2UgaXMgbm90IGtlcHQgdXAgdG8gZGF0ZSBleGNlcHQgd2hlbiB2b2x1bnRlZXJzIHdhbnQgdG8KK21haW50YWluIGl0LiAgSWYgeW91IGZpbmQgYSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBtYW4gcGFnZSBhbmQgdGhlCitzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBJbmZvIGZpbGUsIHdoaWNoIGlzIHRoZSBhdXRob3JpdGF0aXZlCitkb2N1bWVudGF0aW9uLgorLlBQCitJZiB3ZSBmaW5kIHRoYXQgdGhlIHRoaW5ncyBpbiB0aGlzIG1hbiBwYWdlIHRoYXQgYXJlIG91dCBvZiBkYXRlIGNhdXNlCitzaWduaWZpY2FudCBjb25mdXNpb24gb3IgY29tcGxhaW50cywgd2Ugd2lsbCBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgbWFuCitwYWdlLiAgVGhlIGFsdGVybmF0aXZlLCB1cGRhdGluZyB0aGUgbWFuIHBhZ2Ugd2hlbiB3ZSB1cGRhdGUgdGhlIEluZm8KK2ZpbGUsIGlzIGltcG9zc2libGUgYmVjYXVzZSB0aGUgcmVzdCBvZiB0aGUgd29yayBvZiBtYWludGFpbmluZyBHTlUgQ0MKK2xlYXZlcyB1cyBubyB0aW1lIGZvciB0aGF0LiAgVGhlIEdOVSBwcm9qZWN0IHJlZ2FyZHMgbWFuIHBhZ2VzIGFzCitvYnNvbGV0ZSBhbmQgc2hvdWxkIG5vdCBsZXQgdGhlbSB0YWtlIHRpbWUgYXdheSBmcm9tIG90aGVyIHRoaW5ncy4KKy5QUAorRm9yIGNvbXBsZXRlIGFuZCBjdXJyZW50IGRvY3VtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBJbmZvIGZpbGUgYFx8XGMKKy5CIGdjY1xjCitcJlx8JyBvciB0aGUgbWFudWFsCisuSQorVXNpbmcgYW5kIFBvcnRpbmcgR05VIENDIChmb3IgdmVyc2lvbiAyLjApXGMKK1wmLiAgQm90aCBhcmUgbWFkZSBmcm9tIHRoZSBUZXhpbmZvIHNvdXJjZSBmaWxlCisuQlIgZ2NjLnRleGluZm8gLgorLlNIIERFU0NSSVBUSU9OCitUaGUgQyBhbmQgQysrIGNvbXBpbGVycyBhcmUgaW50ZWdyYXRlZC4gIEJvdGggcHJvY2VzcyBpbnB1dCBmaWxlcwordGhyb3VnaCBvbmUgb3IgbW9yZSBvZiBmb3VyIHN0YWdlczogcHJlcHJvY2Vzc2luZywgY29tcGlsYXRpb24sCithc3NlbWJseSwgYW5kIGxpbmtpbmcuICBTb3VyY2UgZmlsZW5hbWUgc3VmZml4ZXMgaWRlbnRpZnkgdGhlIHNvdXJjZQorbGFuZ3VhZ2UsIGJ1dCB3aGljaCBuYW1lIHlvdSB1c2UgZm9yIHRoZSBjb21waWxlciBnb3Zlcm5zIGRlZmF1bHQKK2Fzc3VtcHRpb25zOgorLlRQCisuQiBnY2MKK2Fzc3VtZXMgcHJlcHJvY2Vzc2VkIChcYworLkIgLmlcYworXCYpIGZpbGVzIGFyZSBDIGFuZCBhc3N1bWVzIEMgc3R5bGUgbGlua2luZy4KKy5UUAorLkIgZysrCithc3N1bWVzIHByZXByb2Nlc3NlZCAoXGMKKy5CIC5pXGMKK1wmKSBmaWxlcyBhcmUgQysrIGFuZCBhc3N1bWVzIEMrKyBzdHlsZSBsaW5raW5nLgorLlBQCitTdWZmaXhlcyBvZiBzb3VyY2UgZmlsZSBuYW1lcyBpbmRpY2F0ZSB0aGUgbGFuZ3VhZ2UgYW5kIGtpbmQgb2YKK3Byb2Nlc3NpbmcgdG8gYmUgZG9uZToKKy5TcAorLm5mCisudGEgXHcnXGZCLmN4eFxmUCAgJ3UKK1wmXGZCLmNcZlAJQyBzb3VyY2U7IHByZXByb2Nlc3MsIGNvbXBpbGUsIGFzc2VtYmxlCitcJlxmQi5DXGZQCUMrKyBzb3VyY2U7IHByZXByb2Nlc3MsIGNvbXBpbGUsIGFzc2VtYmxlCitcJlxmQi5jY1xmUAlDKysgc291cmNlOyBwcmVwcm9jZXNzLCBjb21waWxlLCBhc3NlbWJsZQorXCZcZkIuY3h4XGZQCUMrKyBzb3VyY2U7IHByZXByb2Nlc3MsIGNvbXBpbGUsIGFzc2VtYmxlCitcJlxmQi5tXGZQCU9iamVjdGl2ZS1DIHNvdXJjZTsgcHJlcHJvY2VzcywgY29tcGlsZSwgYXNzZW1ibGUKK1wmXGZCLmlcZlAJcHJlcHJvY2Vzc2VkIEM7IGNvbXBpbGUsIGFzc2VtYmxlCitcJlxmQi5paVxmUAlwcmVwcm9jZXNzZWQgQysrOyBjb21waWxlLCBhc3NlbWJsZQorXCZcZkIuc1xmUAlBc3NlbWJsZXIgc291cmNlOyBhc3NlbWJsZQorXCZcZkIuU1xmUAlBc3NlbWJsZXIgc291cmNlOyBwcmVwcm9jZXNzLCBhc3NlbWJsZQorXCZcZkIuaFxmUAlQcmVwcm9jZXNzb3IgZmlsZTsgbm90IHVzdWFsbHkgbmFtZWQgb24gY29tbWFuZCBsaW5lCisuU3AKKy5maQorRmlsZXMgd2l0aCBvdGhlciBzdWZmaXhlcyBhcmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuICBDb21tb24gY2FzZXMgaW5jbHVkZToKKy5TcAorLm5mCitcJlxmQi5vXGZQCU9iamVjdCBmaWxlCitcJlxmQi5hXGZQCUFyY2hpdmUgZmlsZQorLmJyCisuZmkKKy5TcAorTGlua2luZyBpcyBhbHdheXMgdGhlIGxhc3Qgc3RhZ2UgdW5sZXNzIHlvdSB1c2Ugb25lIG9mIHRoZQorLkJSIFwtYyAsCisuQlIgXC1TICwKK29yCisuQiBcLUUKK29wdGlvbnMgdG8gYXZvaWQgaXQgKG9yIHVubGVzcyBjb21waWxhdGlvbiBlcnJvcnMgc3RvcCB0aGUgd2hvbGUKK3Byb2Nlc3MpLiAgRm9yIHRoZSBsaW5rIHN0YWdlLCBhbGwKKy5CIC5vCitmaWxlcyBjb3JyZXNwb25kaW5nIHRvIHNvdXJjZSBmaWxlcywKKy5CIFwtbAorbGlicmFyaWVzLCB1bnJlY29nbml6ZWQgZmlsZW5hbWVzIChpbmNsdWRpbmcgbmFtZWQKKy5CIC5vCitvYmplY3QgZmlsZXMgYW5kCisuQiAuYQorYXJjaGl2ZXMpCithcmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIgaW4gY29tbWFuZC1saW5lIG9yZGVyLgorLlNIIE9QVElPTlMKK09wdGlvbnMgbXVzdCBiZSBzZXBhcmF0ZTogYFx8XGMKKy5CIFwtZHJcYworXCZcfCcgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gYFx8XGMKKy5CIFwtZCBcLXIKK1wmXHwnLgorLlBQCitNb3N0IGBcfFxjCisuQiBcLWZcYworXCZcfCcgYW5kIGBcfFxjCisuQiBcLVdcYworXCZcfCcgb3B0aW9ucyBoYXZlIHR3byBjb250cmFyeSBmb3JtczoKKy5CSSBcLWYgbmFtZQorYW5kCisuQkkgXC1mbm9cLSBuYW1lXGMKK1wmIChvcgorLkJJIFwtVyBuYW1lCithbmQKKy5CSSBcLVdub1wtIG5hbWVcYworXCYpLiAgT25seSB0aGUgbm9uLWRlZmF1bHQgZm9ybXMgYXJlIHNob3duIGhlcmUuCisuUFAKK0hlcmUgaXMgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgb3B0aW9ucywgZ3JvdXBlZCBieSB0eXBlLiAgRXhwbGFuYXRpb25zIGFyZQoraW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKy5oeSAwCisubmEKKy5UUAorLkIgT3ZlcmFsbCBPcHRpb25zCisuYnIKK1wtYworXC1TCitcLUUKKy5SSSAiXC1vICIgZmlsZQorXC1waXBlCitcLXYKKy5SSSAiXC14ICIgbGFuZ3VhZ2UKKy5UUAorLkIgTGFuZ3VhZ2UgT3B0aW9ucworXC1hbnNpCitcLWZhbGxcLXZpcnR1YWwKK1wtZmNvbmRcLW1pc21hdGNoCitcLWZkb2xsYXJzXC1pblwtaWRlbnRpZmllcnMKK1wtZmVudW1cLWludFwtZXF1aXYKK1wtZmV4dGVybmFsXC10ZW1wbGF0ZXMKK1wtZm5vXC1hc20KK1wtZm5vXC1idWlsdGluCitcLWZob3N0ZWQKK1wtZm5vXC1ob3N0ZWQKK1wtZmZyZWVzdGFuZGluZworXC1mbm9cLWZyZWVzdGFuZGluZworXC1mbm9cLXN0cmljdFwtcHJvdG90eXBlCitcLWZzaWduZWRcLWJpdGZpZWxkcworXC1mc2lnbmVkXC1jaGFyCitcLWZ0aGlzXC1pc1wtdmFyaWFibGUKK1wtZnVuc2lnbmVkXC1iaXRmaWVsZHMKK1wtZnVuc2lnbmVkXC1jaGFyCitcLWZ3cml0YWJsZVwtc3RyaW5ncworXC10cmFkaXRpb25hbAorXC10cmFkaXRpb25hbFwtY3BwCitcLXRyaWdyYXBocworLlRQCisuQiBXYXJuaW5nIE9wdGlvbnMKK1wtZnN5bnRheFwtb25seQorXC1wZWRhbnRpYworXC1wZWRhbnRpY1wtZXJyb3JzCitcLXcKK1wtVworXC1XYWxsCitcLVdhZ2dyZWdhdGVcLXJldHVybgorXC1XY2FzdFwtYWxpZ24KK1wtV2Nhc3RcLXF1YWwKK1wtV2NoYXJcLXN1YnNjcmlwdAorXC1XY29tbWVudAorXC1XY29udmVyc2lvbgorXC1XZW51bVwtY2xhc2gKK1wtV2Vycm9yCitcLVdmb3JtYXQKKy5SSSBcLVdpZFwtY2xhc2hcLSBsZW4KK1wtV2ltcGxpY2l0CitcLVdpbmxpbmUKK1wtV21haW4KK1wtV21pc3NpbmdcLXByb3RvdHlwZXMKK1wtV21pc3NpbmdcLWRlY2xhcmF0aW9ucworXC1XbmVzdGVkXC1leHRlcm5zCitcLVdub1wtaW1wb3J0CitcLVdwYXJlbnRoZXNlcworXC1XcG9pbnRlclwtYXJpdGgKK1wtV3JlZHVuZGFudFwtZGVjbHMKK1wtV3JldHVyblwtdHlwZQorXC1Xc2hhZG93CitcLVdzdHJpY3RcLXByb3RvdHlwZXMKK1wtV3N3aXRjaAorXC1XdGVtcGxhdGVcLWRlYnVnZ2luZworXC1XdHJhZGl0aW9uYWwKK1wtV3RyaWdyYXBocworXC1XdW5pbml0aWFsaXplZAorXC1XdW51c2VkCitcLVd3cml0ZVwtc3RyaW5ncworLlRQCisuQiBEZWJ1Z2dpbmcgT3B0aW9ucworXC1hCisuUkkgXC1kIGxldHRlcnMKK1wtZnByZXRlbmRcLWZsb2F0CitcLWcKKy5SSSBcLWcgbGV2ZWwKK1wtZ2NvZmYKK1wtZ3hjb2ZmCitcLWd4Y29mZisKK1wtZ2R3YXJmCitcLWdkd2FyZisKK1wtZ3N0YWJzCitcLWdzdGFicysKK1wtZ2dkYgorXC1wCitcLXBnCitcLXNhdmVcLXRlbXBzCisuUkkgXC1wcmludFwtZmlsZVwtbmFtZT0gbGlicmFyeQorXC1wcmludFwtbGliZ2NjXC1maWxlXC1uYW1lCisuUkkgXC1wcmludFwtcHJvZ1wtbmFtZT0gcHJvZ3JhbQorLlRQCisuQiBPcHRpbWl6YXRpb24gT3B0aW9ucworXC1mY2FsbGVyXC1zYXZlcworXC1mY3NlXC1mb2xsb3dcLWp1bXBzCitcLWZjc2VcLXNraXBcLWJsb2NrcworXC1mZGVsYXllZFwtYnJhbmNoCitcLWZlbGlkZVwtY29uc3RydWN0b3JzCitcLWZleHBlbnNpdmVcLW9wdGltaXphdGlvbnMKK1wtZmZhc3RcLW1hdGgKK1wtZmZsb2F0XC1zdG9yZQorXC1mZm9yY2VcLWFkZHIKK1wtZmZvcmNlXC1tZW0KK1wtZmlubGluZVwtZnVuY3Rpb25zCitcLWZrZWVwXC1pbmxpbmVcLWZ1bmN0aW9ucworXC1mbWVtb2l6ZVwtbG9va3VwcworXC1mbm9cLWRlZmF1bHRcLWlubGluZQorXC1mbm9cLWRlZmVyXC1wb3AKK1wtZm5vXC1mdW5jdGlvblwtY3NlCitcLWZub1wtaW5saW5lCitcLWZub1wtcGVlcGhvbGUKK1wtZm9taXRcLWZyYW1lXC1wb2ludGVyCitcLWZyZXJ1blwtY3NlXC1hZnRlclwtbG9vcAorXC1mc2NoZWR1bGVcLWluc25zCitcLWZzY2hlZHVsZVwtaW5zbnMyCitcLWZzdHJlbmd0aFwtcmVkdWNlCitcLWZ0aHJlYWRcLWp1bXBzCitcLWZ1bnJvbGxcLWFsbFwtbG9vcHMKK1wtZnVucm9sbFwtbG9vcHMKK1wtTworXC1PMgorLlRQCisuQiBQcmVwcm9jZXNzb3IgT3B0aW9ucworLlJJIFwtQSBhc3NlcnRpb24KK1wtQworXC1kRAorXC1kTQorXC1kTgorLlJJIFwtRCBtYWNybyBbXHw9IGRlZm4gXHxdCitcLUUKK1wtSAorLlJJICJcLWlkaXJhZnRlciAiIGRpcgorLlJJICJcLWluY2x1ZGUgIiBmaWxlCisuUkkgIlwtaW1hY3JvcyAiIGZpbGUKKy5SSSAiXC1pcHJlZml4ICIgZmlsZQorLlJJICJcLWl3aXRocHJlZml4ICIgZGlyCitcLU0KK1wtTUQKK1wtTU0KK1wtTU1ECitcLW5vc3RkaW5jCitcLVAKKy5SSSBcLVUgbWFjcm8KK1wtdW5kZWYKKy5UUAorLkIgQXNzZW1ibGVyIE9wdGlvbgorLlJJIFwtV2EsIG9wdGlvbgorLlRQCisuQiBMaW5rZXIgT3B0aW9ucworLlJJIFwtbCBsaWJyYXJ5CitcLW5vc3RhcnRmaWxlcworXC1ub3N0ZGxpYgorXC1zdGF0aWMKK1wtc2hhcmVkCitcLXN5bWJvbGljCisuUkkgIlwtWGxpbmtlclwgIiBvcHRpb24KKy5SSSBcLVdsLCBvcHRpb24KKy5SSSAiXC11ICIgc3ltYm9sCisuVFAKKy5CIERpcmVjdG9yeSBPcHRpb25zCisuUkkgXC1CIHByZWZpeAorLlJJIFwtSSBkaXIKK1wtSVwtCisuUkkgXC1MIGRpcgorLlRQCisuQiBUYXJnZXQgT3B0aW9ucworLlJJICJcLWIgICIgbWFjaGluZQorLlJJICJcLVYgIiB2ZXJzaW9uCisuVFAKKy5CIENvbmZpZ3VyYXRpb24gRGVwZW5kZW50IE9wdGlvbnMKKy5JIE02ODB4MFwgT3B0aW9ucworLmJyCitcLW02ODAwMAorXC1tNjgwMjAKK1wtbTY4MDIwXC00MAorXC1tNjgwMzAKK1wtbTY4MDQwCitcLW02ODg4MQorXC1tYml0ZmllbGQKK1wtbWM2ODAwMAorXC1tYzY4MDIwCitcLW1mcGEKK1wtbW5vYml0ZmllbGQKK1wtbXJ0ZAorXC1tc2hvcnQKK1wtbXNvZnRcLWZsb2F0CisuU3AKKy5JIFZBWCBPcHRpb25zCisuYnIKK1wtbWcKK1wtbWdudQorXC1tdW5peAorLlNwCisuSSBTUEFSQyBPcHRpb25zCisuYnIKK1wtbWVwaWxvZ3VlCitcLW1mcHUKK1wtbWhhcmRcLWZsb2F0CitcLW1ub1wtZnB1CitcLW1ub1wtZXBpbG9ndWUKK1wtbXNvZnRcLWZsb2F0CitcLW1zcGFyY2xpdGUKK1wtbXY4CitcLW1zdXBlcnNwYXJjCitcLW1jeXByZXNzCisuU3AKKy5JIENvbnZleCBPcHRpb25zCisuYnIKK1wtbWFyZ2NvdW50CitcLW1jMQorXC1tYzIKK1wtbW5vYXJnY291bnQKKy5TcAorLkkgQU1EMjlLIE9wdGlvbnMKKy5icgorXC1tMjkwMDAKK1wtbTI5MDUwCitcLW1idworXC1tZHcKK1wtbWtlcm5lbFwtcmVnaXN0ZXJzCitcLW1sYXJnZQorXC1tbmJ3CitcLW1ub2R3CitcLW1zbWFsbAorXC1tc3RhY2tcLWNoZWNrCitcLW11c2VyXC1yZWdpc3RlcnMKKy5TcAorLkkgTTg4SyBPcHRpb25zCisuYnIKK1wtbTg4MDAwCitcLW04ODEwMAorXC1tODgxMTAKK1wtbWJpZ1wtcGljCitcLW1jaGVja1wtemVyb1wtZGl2aXNpb24KK1wtbWhhbmRsZVwtbGFyZ2VcLXNoaWZ0CitcLW1pZGVudGlmeVwtcmV2aXNpb24KK1wtbW5vXC1jaGVja1wtemVyb1wtZGl2aXNpb24KK1wtbW5vXC1vY3NcLWRlYnVnXC1pbmZvCitcLW1ub1wtb2NzXC1mcmFtZVwtcG9zaXRpb24KK1wtbW5vXC1vcHRpbWl6ZVwtYXJnXC1hcmVhCitcLW1ub1wtc2VyaWFsaXplXC12b2xhdGlsZQorXC1tbm9cLXVuZGVyc2NvcmVzCitcLW1vY3NcLWRlYnVnXC1pbmZvCitcLW1vY3NcLWZyYW1lXC1wb3NpdGlvbgorXC1tb3B0aW1pemVcLWFyZ1wtYXJlYQorXC1tc2VyaWFsaXplXC12b2xhdGlsZQorLlJJIFwtbXNob3J0XC1kYXRhXC0gbnVtCitcLW1zdnIzCitcLW1zdnI0CitcLW10cmFwXC1sYXJnZVwtc2hpZnQKK1wtbXVzZVwtZGl2XC1pbnN0cnVjdGlvbgorXC1tdmVyc2lvblwtMDMuMDAKK1wtbXdhcm5cLXBhc3NlZFwtc3RydWN0cworLlNwCisuSSBSUzYwMDAgT3B0aW9ucworLmJyCitcLW1mcFwtaW5cLXRvYworXC1tbm9cLWZvcFwtaW5cLXRvYworLlNwCisuSSBSVCBPcHRpb25zCisuYnIKK1wtbWNhbGxcLWxpYlwtbXVsCitcLW1mcFwtYXJnXC1pblwtZnByZWdzCitcLW1mcFwtYXJnXC1pblwtZ3JlZ3MKK1wtbWZ1bGxcLWZwXC1ibG9ja3MKK1wtbWhjXC1zdHJ1Y3RcLXJldHVybgorXC1taW5cLWxpbmVcLW11bAorXC1tbWluaW11bVwtZnBcLWJsb2NrcworXC1tbm9oY1wtc3RydWN0XC1yZXR1cm4KKy5TcAorLkkgTUlQUyBPcHRpb25zCisuYnIKK1wtbWNwdT1cZkljcHUgdHlwZVxmUAorXC1taXBzMgorXC1taXBzMworXC1taW50NjQKK1wtbWxvbmc2NAorXC1tbG9uZ2xvbmcxMjgKK1wtbW1pcHNcLWFzCitcLW1nYXMKK1wtbXJuYW1lcworXC1tbm9cLXJuYW1lcworXC1tZ3BvcHQKK1wtbW5vXC1ncG9wdAorXC1tc3RhdHMKK1wtbW5vXC1zdGF0cworXC1tbWVtY3B5CitcLW1ub1wtbWVtY3B5CitcLW1ub1wtbWlwc1wtdGZpbGUKK1wtbW1pcHNcLXRmaWxlCitcLW1zb2Z0XC1mbG9hdAorXC1taGFyZFwtZmxvYXQKK1wtbWFiaWNhbGxzCitcLW1ub1wtYWJpY2FsbHMKK1wtbWhhbGZcLXBpYworXC1tbm9cLWhhbGZcLXBpYworXC1HIFxmSW51bVxmUAorXC1ub2NwcAorLlNwCisuSSBpMzg2IE9wdGlvbnMKKy5icgorXC1tNDg2CitcLW1ub1wtNDg2CitcLW1zb2Z0XC1mbG9hdAorXC1tbm9cLWZwXC1yZXRcLWluXC0zODcKKy5TcAorLkkgSFBQQSBPcHRpb25zCisuYnIKK1wtbXBhXC1yaXNjXC0xXC0wCitcLW1wYVwtcmlzY1wtMVwtMQorXC1ta2VybmVsCitcLW1zaGFyZWRcLWxpYnMKK1wtbW5vXC1zaGFyZWRcLWxpYnMKK1wtbWxvbmdcLWNhbGxzCitcLW1kaXNhYmxlXC1mcHJlZ3MKK1wtbWRpc2FibGVcLWluZGV4aW5nCitcLW10cmFpbGluZ1wtY29sb24KKy5TcAorLkkgaTk2MCBPcHRpb25zCisuYnIKK1wtbVxmSWNwdS10eXBlXGZQCitcLW1udW1lcmljcworXC1tc29mdFwtZmxvYXQKK1wtbWxlYWZcLXByb2NlZHVyZXMKK1wtbW5vXC1sZWFmXC1wcm9jZWR1cmVzCitcLW10YWlsXC1jYWxsCitcLW1ub1wtdGFpbFwtY2FsbAorXC1tY29tcGxleFwtYWRkcgorXC1tbm9cLWNvbXBsZXhcLWFkZHIKK1wtbWNvZGVcLWFsaWduCitcLW1ub1wtY29kZVwtYWxpZ24KK1wtbWljXC1jb21wYXQKK1wtbWljMi4wXC1jb21wYXQKK1wtbWljMy4wXC1jb21wYXQKK1wtbWFzbVwtY29tcGF0CitcLW1pbnRlbFwtYXNtCitcLW1zdHJpY3RcLWFsaWduCitcLW1ub1wtc3RyaWN0XC1hbGlnbgorXC1tb2xkXC1hbGlnbgorXC1tbm9cLW9sZFwtYWxpZ24KKy5TcAorLkkgREVDIEFscGhhIE9wdGlvbnMKKy5icgorXC1tZnBcLXJlZ3MKK1wtbW5vXC1mcFwtcmVncworXC1tbm9cLXNvZnRcLWZsb2F0CitcLW1zb2Z0XC1mbG9hdAorLlNwCisuSSBTeXN0ZW0gViBPcHRpb25zCisuYnIKK1wtRworXC1ReQorXC1RbgorLlJJIFwtWVAsIHBhdGhzCisuUkkgXC1ZbSwgZGlyCisuVFAKKy5CIENvZGUgR2VuZXJhdGlvbiBPcHRpb25zCisuUkkgXC1mY2FsbFwtc2F2ZWRcLSByZWcKKy5SSSBcLWZjYWxsXC11c2VkXC0gcmVnCisuUkkgXC1mZml4ZWRcLSByZWcKK1wtZmluaGliaXRcLXNpemVcLWRpcmVjdGl2ZQorXC1mbm9ubnVsbFwtb2JqZWN0cworXC1mbm9cLWNvbW1vbgorXC1mbm9cLWlkZW50CitcLWZub1wtZ251XC1saW5rZXIKK1wtZnBjY1wtc3RydWN0XC1yZXR1cm4KK1wtZnBpYworXC1mUElDCitcLWZyZWdcLXN0cnVjdFwtcmV0dXJuCitcLWZzaGFyZWRcLWRhdGEKK1wtZnNob3J0XC1lbnVtcworXC1mc2hvcnRcLWRvdWJsZQorXC1mdm9sYXRpbGUKK1wtZnZvbGF0aWxlXC1nbG9iYWwKK1wtZnZlcmJvc2VcLWFzbQorLmFkIGIKKy5oeSAxCisuU0ggT1ZFUkFMTCBPUFRJT05TCisuVFAKKy5CSSAiXC14ICIgImxhbmd1YWdlIgorU3BlY2lmeSBleHBsaWNpdGx5IHRoZQorLkkgbGFuZ3VhZ2VcYworXCYgZm9yIHRoZSBmb2xsb3dpbmcgaW5wdXQgZmlsZXMgKHJhdGhlciB0aGFuIGNob29zaW5nIGEgZGVmYXVsdCBiYXNlZAorb24gdGhlIGZpbGUgbmFtZSBzdWZmaXgpIC4gIFRoaXMgb3B0aW9uIGFwcGxpZXMgdG8gYWxsIGZvbGxvd2luZyBpbnB1dAorZmlsZXMgdW50aWwgdGhlIG5leHQgYFx8XGMKKy5CIFwteFxjCitcJlx8JyBvcHRpb24uICBQb3NzaWJsZSB2YWx1ZXMgb2YgXGMKKy5JIGxhbmd1YWdlXGMKK1wmIGFyZQorYFx8XGMKKy5CIGNcYworXCZcfCcsIGBcfFxjCisuQiBvYmplY3RpdmVcLWNcYworXCZcfCcsIGBcfFxjCisuQiBjXC1oZWFkZXJcYworXCZcfCcsIGBcfFxjCisuQiBjKytcYworXCZcfCcsCitgXHxcYworLkIgY3BwXC1vdXRwdXRcYworXCZcfCcsIGBcfFxjCisuQiBhc3NlbWJsZXJcYworXCZcfCcsIGFuZCBgXHxcYworLkIgYXNzZW1ibGVyXC13aXRoXC1jcHBcYworXCZcfCcuCisuVFAKKy5CIFwteCBub25lCitUdXJuIG9mZiBhbnkgc3BlY2lmaWNhdGlvbiBvZiBhIGxhbmd1YWdlLCBzbyB0aGF0IHN1YnNlcXVlbnQgZmlsZXMgYXJlCitoYW5kbGVkIGFjY29yZGluZyB0byB0aGVpciBmaWxlIG5hbWUgc3VmZml4ZXMgKGFzIHRoZXkgYXJlIGlmIGBcfFxjCisuQiBcLXhcYworXCZcfCcKK2hhcyBub3QgYmVlbiB1c2VkIGF0IGFsbCkuCisuUFAKK0lmIHlvdSB3YW50IG9ubHkgc29tZSBvZiB0aGUgZm91ciBzdGFnZXMgKHByZXByb2Nlc3MsIGNvbXBpbGUsCithc3NlbWJsZSwgbGluayksIHlvdSBjYW4gdXNlCitgXHxcYworLkIgXC14XGMKK1wmXHwnIChvciBmaWxlbmFtZSBzdWZmaXhlcykgdG8gdGVsbCBcYworLkIgZ2NjXGMKK1wmIHdoZXJlIHRvIHN0YXJ0LCBhbmQKK29uZSBvZiB0aGUgb3B0aW9ucyBgXHxcYworLkIgXC1jXGMKK1wmXHwnLCBgXHxcYworLkIgXC1TXGMKK1wmXHwnLCBvciBgXHxcYworLkIgXC1FXGMKK1wmXHwnIHRvIHNheSB3aGVyZQorLkIgZ2NjXGMKK1wmIGlzIHRvIHN0b3AuICBOb3RlIHRoYXQgc29tZSBjb21iaW5hdGlvbnMgKGZvciBleGFtcGxlLAorYFx8XGMKKy5CIFwteCBjcHBcLW91dHB1dCBcLUVcYworXCZcfCcpIGluc3RydWN0IFxjCisuQiBnY2NcYworXCYgdG8gZG8gbm90aGluZyBhdCBhbGwuCisuVFAKKy5CIFwtYworQ29tcGlsZSBvciBhc3NlbWJsZSB0aGUgc291cmNlIGZpbGVzLCBidXQgZG8gbm90IGxpbmsuICBUaGUgY29tcGlsZXIKK291dHB1dCBpcyBhbiBvYmplY3QgZmlsZSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggc291cmNlIGZpbGUuCisuU3AKK0J5IGRlZmF1bHQsIEdDQyBtYWtlcyB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgYSBzb3VyY2UgZmlsZSBieSByZXBsYWNpbmcKK3RoZSBzdWZmaXggYFx8XGMKKy5CIC5jXGMKK1wmXHwnLCBgXHxcYworLkIgLmlcYworXCZcfCcsIGBcfFxjCisuQiAuc1xjCitcJlx8JywgZXRjLiwgd2l0aCBgXHxcYworLkIgLm9cYworXCZcfCcuICBVc2UKKy5CIFwtb1xjCitcJiB0byBzZWxlY3QgYW5vdGhlciBuYW1lLgorLlNwCitHQ0MgaWdub3JlcyBhbnkgdW5yZWNvZ25pemVkIGlucHV0IGZpbGVzICh0aG9zZSB0aGF0IGRvIG5vdCByZXF1aXJlCitjb21waWxhdGlvbiBvciBhc3NlbWJseSkgd2l0aCB0aGUKKy5CIFwtYworb3B0aW9uLgorLlRQCisuQiBcLVMKK1N0b3AgYWZ0ZXIgdGhlIHN0YWdlIG9mIGNvbXBpbGF0aW9uIHByb3BlcjsgZG8gbm90IGFzc2VtYmxlLiAgVGhlIG91dHB1dAoraXMgYW4gYXNzZW1ibGVyIGNvZGUgZmlsZSBmb3IgZWFjaCBub24tYXNzZW1ibGVyIGlucHV0CitmaWxlIHNwZWNpZmllZC4KKy5TcAorQnkgZGVmYXVsdCwgR0NDIG1ha2VzIHRoZSBhc3NlbWJsZXIgZmlsZSBuYW1lIGZvciBhIHNvdXJjZSBmaWxlIGJ5CityZXBsYWNpbmcgdGhlIHN1ZmZpeCBgXHxcYworLkIgLmNcYworXCZcfCcsIGBcfFxjCisuQiAuaVxjCitcJlx8JywgZXRjLiwgd2l0aCBgXHxcYworLkIgLnNcYworXCZcfCcuICBVc2UKKy5CIFwtb1xjCitcJiB0byBzZWxlY3QgYW5vdGhlciBuYW1lLgorLlNwCitHQ0MgaWdub3JlcyBhbnkgaW5wdXQgZmlsZXMgdGhhdCBkb24ndCByZXF1aXJlIGNvbXBpbGF0aW9uLgorLlRQCisuQiBcLUUKK1N0b3AgYWZ0ZXIgdGhlIHByZXByb2Nlc3Npbmcgc3RhZ2U7IGRvIG5vdCBydW4gdGhlIGNvbXBpbGVyIHByb3Blci4gIFRoZQorb3V0cHV0IGlzIHByZXByb2Nlc3NlZCBzb3VyY2UgY29kZSwgd2hpY2ggaXMgc2VudCB0byB0aGUKK3N0YW5kYXJkIG91dHB1dC4KKy5TcAorR0NDIGlnbm9yZXMgaW5wdXQgZmlsZXMgd2hpY2ggZG9uJ3QgcmVxdWlyZSBwcmVwcm9jZXNzaW5nLgorLlRQCisuQkkgIlwtbyAiIGZpbGUKK1BsYWNlIG91dHB1dCBpbiBmaWxlIFxjCisuSSBmaWxlXGMKK1wmLiAgVGhpcyBhcHBsaWVzIHJlZ2FyZGxlc3MgdG8gd2hhdGV2ZXIKK3NvcnQgb2Ygb3V0cHV0IEdDQyBpcyBwcm9kdWNpbmcsIHdoZXRoZXIgaXQgYmUgYW4gZXhlY3V0YWJsZSBmaWxlLAorYW4gb2JqZWN0IGZpbGUsIGFuIGFzc2VtYmxlciBmaWxlIG9yIHByZXByb2Nlc3NlZCBDIGNvZGUuCisuU3AKK1NpbmNlIG9ubHkgb25lIG91dHB1dCBmaWxlIGNhbiBiZSBzcGVjaWZpZWQsIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8KK3VzZSBgXHxcYworLkIgXC1vXGMKK1wmXHwnIHdoZW4gY29tcGlsaW5nIG1vcmUgdGhhbiBvbmUgaW5wdXQgZmlsZSwgdW5sZXNzIHlvdSBhcmUKK3Byb2R1Y2luZyBhbiBleGVjdXRhYmxlIGZpbGUgYXMgb3V0cHV0LgorLlNwCitJZiB5b3UgZG8gbm90IHNwZWNpZnkgYFx8XGMKKy5CIFwtb1xjCitcJlx8JywgdGhlIGRlZmF1bHQgaXMgdG8gcHV0IGFuIGV4ZWN1dGFibGUgZmlsZQoraW4gYFx8XGMKKy5CIGEub3V0XGMKK1wmXHwnLCB0aGUgb2JqZWN0IGZpbGUgZm9yIGBcfFxjCisuSSBzb3VyY2VcYworLkIgXCYuXGMKKy5JIHN1ZmZpeFxjCitcJlxjCitcJlx8JyBpbgorYFx8XGMKKy5JIHNvdXJjZVxjCisuQiBcJi5vXGMKK1wmXHwnLCBpdHMgYXNzZW1ibGVyIGZpbGUgaW4gYFx8XGMKKy5JIHNvdXJjZVxjCisuQiBcJi5zXGMKK1wmXHwnLCBhbmQKK2FsbCBwcmVwcm9jZXNzZWQgQyBzb3VyY2Ugb24gc3RhbmRhcmQgb3V0cHV0LgorLlRQCisuQiBcLXYKK1ByaW50IChvbiBzdGFuZGFyZCBlcnJvciBvdXRwdXQpIHRoZSBjb21tYW5kcyBleGVjdXRlZCB0byBydW4gdGhlIHN0YWdlcworb2YgY29tcGlsYXRpb24uICBBbHNvIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY29tcGlsZXIgZHJpdmVyCitwcm9ncmFtIGFuZCBvZiB0aGUgcHJlcHJvY2Vzc29yIGFuZCB0aGUgY29tcGlsZXIgcHJvcGVyLgorLlRQCisuQiBcLXBpcGUKK1VzZSBwaXBlcyByYXRoZXIgdGhhbiB0ZW1wb3JhcnkgZmlsZXMgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUKK3ZhcmlvdXMgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLiAgVGhpcyBmYWlscyB0byB3b3JrIG9uIHNvbWUgc3lzdGVtcyB3aGVyZQordGhlIGFzc2VtYmxlciBjYW5ub3QgcmVhZCBmcm9tIGEgcGlwZTsgYnV0IHRoZSBHTlUgYXNzZW1ibGVyIGhhcworbm8gdHJvdWJsZS4KKy5QUAorLlNIIExBTkdVQUdFIE9QVElPTlMKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIHRoZSBkaWFsZWN0IG9mIEMgdGhhdCB0aGUgY29tcGlsZXIKK2FjY2VwdHM6CisuVFAKKy5CIFwtYW5zaQorU3VwcG9ydCBhbGwgQU5TSSBzdGFuZGFyZCBDIHByb2dyYW1zLgorLlNwCitUaGlzIHR1cm5zIG9mZiBjZXJ0YWluIGZlYXR1cmVzIG9mIEdOVSBDIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoCitBTlNJIEMsIHN1Y2ggYXMgdGhlIFxjCisuQiBhc21cYworXCYsIFxjCisuQiBpbmxpbmVcYworXCYgYW5kIFxjCisuQiB0eXBlb2YKK2tleXdvcmRzLCBhbmQgcHJlZGVmaW5lZCBtYWNyb3Mgc3VjaCBhcyBcYworLkIgdW5peFxjCitcJiBhbmQgXGMKKy5CIHZheAordGhhdCBpZGVudGlmeSB0aGUgdHlwZSBvZiBzeXN0ZW0geW91IGFyZSB1c2luZy4gIEl0IGFsc28gZW5hYmxlcyB0aGUKK3VuZGVzaXJhYmxlIGFuZCByYXJlbHkgdXNlZCBBTlNJIHRyaWdyYXBoIGZlYXR1cmUsIGFuZCBkaXNhbGxvd3MgYFx8XGMKKy5CICRcYworXCZcfCcgYXMgcGFydCBvZiBpZGVudGlmaWVycy4KKy5TcAorVGhlIGFsdGVybmF0ZSBrZXl3b3JkcyBcYworLkIgX1x8X2FzbV9cfF9cYworXCYsIFxjCisuQiBfXHxfZXh0ZW5zaW9uX1x8X1xjCitcJiwKKy5CIF9cfF9pbmxpbmVfXHxfXGMKK1wmIGFuZCBcYworLkIgX1x8X3R5cGVvZl9cfF9cYworXCYgY29udGludWUgdG8gd29yayBkZXNwaXRlCitgXHxcYworLkIgXC1hbnNpXGMKK1wmXHwnLiAgWW91IHdvdWxkIG5vdCB3YW50IHRvIHVzZSB0aGVtIGluIGFuIEFOU0kgQyBwcm9ncmFtLCBvZgorY291cnNlLCBidXQgaXQgaXMgdXNlZnVsIHRvIHB1dCB0aGVtIGluIGhlYWRlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkCitpbiBjb21waWxhdGlvbnMgZG9uZSB3aXRoIGBcfFxjCisuQiBcLWFuc2lcYworXCZcfCcuICBBbHRlcm5hdGUgcHJlZGVmaW5lZCBtYWNyb3MKK3N1Y2ggYXMgXGMKKy5CIF9cfF91bml4X1x8X1xjCitcJiBhbmQgXGMKKy5CIF9cfF92YXhfXHxfXGMKK1wmIGFyZSBhbHNvIGF2YWlsYWJsZSwgd2l0aCBvcgord2l0aG91dCBgXHxcYworLkIgXC1hbnNpXGMKK1wmXHwnLgorLlNwCitUaGUgYFx8XGMKKy5CIFwtYW5zaVxjCitcJlx8JyBvcHRpb24gZG9lcyBub3QgY2F1c2Ugbm9uLUFOU0kgcHJvZ3JhbXMgdG8gYmUKK3JlamVjdGVkIGdyYXR1aXRvdXNseS4gIEZvciB0aGF0LCBgXHxcYworLkIgXC1wZWRhbnRpY1xjCitcJlx8JyBpcyByZXF1aXJlZCBpbgorYWRkaXRpb24gdG8gYFx8XGMKKy5CIFwtYW5zaVxjCitcJlx8Jy4KKy5TcAorVGhlIHByZXByb2Nlc3NvciBwcmVkZWZpbmVzIGEgbWFjcm8gXGMKKy5CIF9cfF9TVFJJQ1RfQU5TSV9cfF9cYworXCYgd2hlbiB5b3UgdXNlIHRoZSBgXHxcYworLkIgXC1hbnNpXGMKK1wmXHwnCitvcHRpb24uICBTb21lIGhlYWRlciBmaWxlcyBtYXkgbm90aWNlIHRoaXMgbWFjcm8gYW5kIHJlZnJhaW4KK2Zyb20gZGVjbGFyaW5nIGNlcnRhaW4gZnVuY3Rpb25zIG9yIGRlZmluaW5nIGNlcnRhaW4gbWFjcm9zIHRoYXQgdGhlCitBTlNJIHN0YW5kYXJkIGRvZXNuJ3QgY2FsbCBmb3I7IHRoaXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBhbnkKK3Byb2dyYW1zIHRoYXQgbWlnaHQgdXNlIHRoZXNlIG5hbWVzIGZvciBvdGhlciB0aGluZ3MuCisuVFAKKy5CIFwtZm5vXC1hc20KK0RvIG5vdCByZWNvZ25pemUgXGMKKy5CIGFzbVxjCitcJiwgXGMKKy5CIGlubGluZVxjCitcJiBvciBcYworLkIgdHlwZW9mXGMKK1wmIGFzIGEKK2tleXdvcmQuICBUaGVzZSB3b3JkcyBtYXkgdGhlbiBiZSB1c2VkIGFzIGlkZW50aWZpZXJzLiAgWW91IGNhbgordXNlIFxjCisuQiBfXHxfYXNtX1x8X1xjCitcJiwgXGMKKy5CIF9cfF9pbmxpbmVfXHxfXGMKK1wmIGFuZCBcYworLkIgX1x8X3R5cGVvZl9cfF9cYworXCYgaW5zdGVhZC4KK2BcfFxjCisuQiBcLWFuc2lcYworXCZcfCcgaW1wbGllcyBgXHxcYworLkIgXC1mbm9cLWFzbVxjCitcJlx8Jy4KKy5UUAorLkIgXC1mbm9cLWJ1aWx0aW4KK0Rvbid0IHJlY29nbml6ZSBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgYmVnaW4gd2l0aCB0d28gbGVhZGluZwordW5kZXJzY29yZXMuICBDdXJyZW50bHksIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaW5jbHVkZSBcYworLkIgX2V4aXRcYworXCYsCisuQiBhYm9ydFxjCitcJiwgXGMKKy5CIGFic1xjCitcJiwgXGMKKy5CIGFsbG9jYVxjCitcJiwgXGMKKy5CIGNvc1xjCitcJiwgXGMKKy5CIGV4aXRcYworXCYsCisuQiBmYWJzXGMKK1wmLCBcYworLkIgbGFic1xjCitcJiwgXGMKKy5CIG1lbWNtcFxjCitcJiwgXGMKKy5CIG1lbWNweVxjCitcJiwgXGMKKy5CIHNpblxjCitcJiwKKy5CIHNxcnRcYworXCYsIFxjCisuQiBzdHJjbXBcYworXCYsIFxjCisuQiBzdHJjcHlcYworXCYsIGFuZCBcYworLkIgc3RybGVuXGMKK1wmLgorLlNwCitUaGUgYFx8XGMKKy5CIFwtYW5zaVxjCitcJlx8JyBvcHRpb24gcHJldmVudHMgXGMKKy5CIGFsbG9jYVxjCitcJiBhbmQgXGMKKy5CIF9leGl0XGMKK1wmIGZyb20KK2JlaW5nIGJ1aWx0aW4gZnVuY3Rpb25zLgorLlRQCisuQiBcLWZob3N0ZWQKK0NvbXBpbGUgZm9yIGEgaG9zdGVkIGVudmlyb25tZW50OyB0aGlzIGltcGxpZXMgdGhlIGBcfFxjCisuQiBcLWZidWlsdGluXGMKK1wmXHwnIG9wdGlvbiwgYW5kIGltcGxpZXMgdGhhdCBzdXNwaWNpb3VzIGRlY2xhcmF0aW9ucyBvZgorLkIgbWFpblxjCitcJiBzaG91bGQgYmUgd2FybmVkIGFib3V0LgorLlRQCisuQiBcLWZmcmVlc3RhbmRpbmcKK0NvbXBpbGUgZm9yIGEgZnJlZXN0YW5kaW5nIGVudmlyb25tZW50OyB0aGlzIGltcGxpZXMgdGhlIGBcfFxjCisuQiBcLWZuby1idWlsdGluXGMKK1wmXHwnIG9wdGlvbiwgYW5kIGltcGxpZXMgdGhhdAorLkIgbWFpblxjCitcJiBoYXMgbm8gc3BlY2lhbCByZXF1aXJlbWVudHMuCisuVFAKKy5CIFwtZm5vXC1zdHJpY3RcLXByb3RvdHlwZQorVHJlYXQgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoIG5vIGFyZ3VtZW50cywgc3VjaCBhcyBgXHxcYworLkIgaW50IGZvbworKCk7XGMKK1wmXHwnLCBhcyBDIHdvdWxkIHRyZWF0IGl0XChlbVwmYXMgc2F5aW5nIG5vdGhpbmcgYWJvdXQgdGhlIG51bWJlciBvZgorYXJndW1lbnRzIG9yIHRoZWlyIHR5cGVzIChDKysgb25seSkuICBOb3JtYWxseSwgc3VjaCBhIGRlY2xhcmF0aW9uIGluCitDKysgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gXGMKKy5CIGZvb1xjCitcJiB0YWtlcyBubyBhcmd1bWVudHMuCisuVFAKKy5CIFwtdHJpZ3JhcGhzCitTdXBwb3J0IEFOU0kgQyB0cmlncmFwaHMuICBUaGUgYFx8XGMKKy5CIFwtYW5zaVxjCitcJlx8JyBvcHRpb24gaW1wbGllcyBgXHxcYworLkIgXC10cmlncmFwaHNcYworXCZcfCcuCisuVFAKKy5CIFwtdHJhZGl0aW9uYWwKK0F0dGVtcHQgdG8gc3VwcG9ydCBzb21lIGFzcGVjdHMgb2YgdHJhZGl0aW9uYWwgQyBjb21waWxlcnMuCitGb3IgZGV0YWlscywgc2VlIHRoZSBHTlUgQyBNYW51YWw7IHRoZSBkdXBsaWNhdGUgbGlzdCBoZXJlCitoYXMgYmVlbiBkZWxldGVkIHNvIHRoYXQgd2Ugd29uJ3QgZ2V0IGNvbXBsYWludHMgd2hlbiBpdAoraXMgb3V0IG9mIGRhdGUuCisuU3AKK0J1dCBvbmUgbm90ZSBhYm91dCBDKysgcHJvZ3JhbXMgb25seSAobm90IEMpLiAgYFx8XGMKKy5CIFwtdHJhZGl0aW9uYWxcYworXCZcfCcgaGFzIG9uZSBhZGRpdGlvbmFsIGVmZmVjdCBmb3IgQysrOiBhc3NpZ25tZW50IHRvCisuQiB0aGlzCitpcyBwZXJtaXR0ZWQuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2YgYFx8XGMKKy5CIFwtZnRoaXNcLWlzXC12YXJpYWJsZVxjCitcJlx8Jy4KKy5UUAorLkIgXC10cmFkaXRpb25hbFwtY3BwCitBdHRlbXB0IHRvIHN1cHBvcnQgc29tZSBhc3BlY3RzIG9mIHRyYWRpdGlvbmFsIEMgcHJlcHJvY2Vzc29ycy4KK1RoaXMgaW5jbHVkZXMgdGhlIGl0ZW1zIHRoYXQgc3BlY2lmaWNhbGx5IG1lbnRpb24gdGhlIHByZXByb2Nlc3NvciBhYm92ZSwKK2J1dCBub25lIG9mIHRoZSBvdGhlciBlZmZlY3RzIG9mIGBcfFxjCisuQiBcLXRyYWRpdGlvbmFsXGMKK1wmXHwnLgorLlRQCisuQiBcLWZkb2xsYXJzXC1pblwtaWRlbnRpZmllcnMKK1Blcm1pdCB0aGUgdXNlIG9mIGBcfFxjCisuQiAkXGMKK1wmXHwnIGluIGlkZW50aWZpZXJzIChDKysgb25seSkuICBZb3UgY2FuIGFsc28gdXNlCitgXHxcYworLkIgXC1mbm9cLWRvbGxhcnNcLWluXC1pZGVudGlmaWVyc1xjCitcJlx8JyB0byBleHBsaWNpdGx5IHByb2hpYml0IHVzZSBvZgorYFx8XGMKKy5CICRcYworXCZcfCcuICAoR05VIEMrKyBhbGxvd3MgYFx8XGMKKy5CICRcYworXCZcfCcgYnkgZGVmYXVsdCBvbiBzb21lIHRhcmdldCBzeXN0ZW1zCitidXQgbm90IG90aGVycy4pCisuVFAKKy5CIFwtZmVudW1cLWludFwtZXF1aXYKK1Blcm1pdCBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIFxjCisuQiBpbnRcYworXCYgdG8gZW51bWVyYXRpb24gdHlwZXMgKEMrKworb25seSkuICBOb3JtYWxseSBHTlUgQysrIGFsbG93cyBjb252ZXJzaW9uIG9mIFxjCisuQiBlbnVtXGMKK1wmIHRvIFxjCisuQiBpbnRcYworXCYsCitidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgorLlRQCisuQiBcLWZleHRlcm5hbFwtdGVtcGxhdGVzCitQcm9kdWNlIHNtYWxsZXIgY29kZSBmb3IgdGVtcGxhdGUgZGVjbGFyYXRpb25zLCBieSBnZW5lcmF0aW5nIG9ubHkgYQorc2luZ2xlIGNvcHkgb2YgZWFjaCB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGVyZSBpdCBpcyBkZWZpbmVkIChDKysgb25seSkuCitUbyB1c2UgdGhpcyBvcHRpb24gc3VjY2Vzc2Z1bGx5LCB5b3UgbXVzdCBhbHNvIG1hcmsgYWxsIGZpbGVzIHRoYXQKK3VzZSB0ZW1wbGF0ZXMgd2l0aCBlaXRoZXIgYFx8XGMKKy5CICNwcmFnbWEgaW1wbGVtZW50YXRpb25cYworXCZcfCcgKHRoZSBkZWZpbml0aW9uKSBvcgorYFx8XGMKKy5CICNwcmFnbWEgaW50ZXJmYWNlXGMKK1wmXHwnIChkZWNsYXJhdGlvbnMpLgorCitXaGVuIHlvdXIgY29kZSBpcyBjb21waWxlZCB3aXRoIGBcfFxjCisuQiBcLWZleHRlcm5hbFwtdGVtcGxhdGVzXGMKK1wmXHwnLCBhbGwKK3RlbXBsYXRlIGluc3RhbnRpYXRpb25zIGFyZSBleHRlcm5hbC4gIFlvdSBtdXN0IGFycmFuZ2UgZm9yIGFsbAorbmVjZXNzYXJ5IGluc3RhbnRpYXRpb25zIHRvIGFwcGVhciBpbiB0aGUgaW1wbGVtZW50YXRpb24gZmlsZTsgeW91IGNhbgorZG8gdGhpcyB3aXRoIGEgXGMKKy5CIHR5cGVkZWZcYworXCYgdGhhdCByZWZlcmVuY2VzIGVhY2ggaW5zdGFudGlhdGlvbiBuZWVkZWQuCitDb252ZXJzZWx5LCB3aGVuIHlvdSBjb21waWxlIHVzaW5nIHRoZSBkZWZhdWx0IG9wdGlvbgorYFx8XGMKKy5CIFwtZm5vXC1leHRlcm5hbFwtdGVtcGxhdGVzXGMKK1wmXHwnLCBhbGwgdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMgYXJlCitleHBsaWNpdGx5IGludGVybmFsLgorLlRQCisuQiBcLWZhbGxcLXZpcnR1YWwKK1RyZWF0IGFsbCBwb3NzaWJsZSBtZW1iZXIgZnVuY3Rpb25zIGFzIHZpcnR1YWwsIGltcGxpY2l0bHkuICBBbGwKK21lbWJlciBmdW5jdGlvbnMgKGV4Y2VwdCBmb3IgY29uc3RydWN0b3IgZnVuY3Rpb25zIGFuZAorLkIgbmV3CitvcgorLkIgZGVsZXRlCittZW1iZXIgb3BlcmF0b3JzKSBhcmUgdHJlYXRlZCBhcyB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgY2xhc3Mgd2hlcmUKK3RoZXkgYXBwZWFyLgorLlNwCitUaGlzIGRvZXMgbm90IG1lYW4gdGhhdCBhbGwgY2FsbHMgdG8gdGhlc2UgbWVtYmVyIGZ1bmN0aW9ucyB3aWxsIGJlCittYWRlIHRocm91Z2ggdGhlIGludGVybmFsIHRhYmxlIG9mIHZpcnR1YWwgZnVuY3Rpb25zLiAgVW5kZXIgc29tZQorY2lyY3Vtc3RhbmNlcywgdGhlIGNvbXBpbGVyIGNhbiBkZXRlcm1pbmUgdGhhdCBhIGNhbGwgdG8gYSBnaXZlbgordmlydHVhbCBmdW5jdGlvbiBjYW4gYmUgbWFkZSBkaXJlY3RseTsgaW4gdGhlc2UgY2FzZXMgdGhlIGNhbGxzIGFyZQorZGlyZWN0IGluIGFueSBjYXNlLgorLlRQCisuQiBcLWZjb25kXC1taXNtYXRjaAorQWxsb3cgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgd2l0aCBtaXNtYXRjaGVkIHR5cGVzIGluIHRoZSBzZWNvbmQgYW5kCit0aGlyZCBhcmd1bWVudHMuICBUaGUgdmFsdWUgb2Ygc3VjaCBhbiBleHByZXNzaW9uIGlzIHZvaWQuCisuVFAKKy5CIFwtZnRoaXNcLWlzXC12YXJpYWJsZQorUGVybWl0IGFzc2lnbm1lbnQgdG8gXGMKKy5CIHRoaXNcYworXCYgKEMrKyBvbmx5KS4gIFRoZSBpbmNvcnBvcmF0aW9uIG9mCit1c2VyLWRlZmluZWQgZnJlZSBzdG9yZSBtYW5hZ2VtZW50IGludG8gQysrIGhhcyBtYWRlIGFzc2lnbm1lbnQgdG8KK2BcfFxjCisuQiB0aGlzXGMKK1wmXHwnIGFuIGFuYWNocm9uaXNtLiAgVGhlcmVmb3JlLCBieSBkZWZhdWx0IGl0IGlzIGludmFsaWQgdG8KK2Fzc2lnbiB0byBcYworLkIgdGhpc1xjCitcJiB3aXRoaW4gYSBjbGFzcyBtZW1iZXIgZnVuY3Rpb24uICBIb3dldmVyLCBmb3IKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB5b3UgY2FuIG1ha2UgaXQgdmFsaWQgd2l0aAorYFx8XGMKKy5CIFwtZnRoaXMtaXMtdmFyaWFibGVcYworXCZcfCcuCisuVFAKKy5CIFwtZnVuc2lnbmVkXC1jaGFyCitMZXQgdGhlIHR5cGUgXGMKKy5CIGNoYXJcYworXCYgYmUgdW5zaWduZWQsIGxpa2UgXGMKKy5CIHVuc2lnbmVkIGNoYXJcYworXCYuCisuU3AKK0VhY2gga2luZCBvZiBtYWNoaW5lIGhhcyBhIGRlZmF1bHQgZm9yIHdoYXQgXGMKKy5CIGNoYXJcYworXCYgc2hvdWxkCitiZS4gIEl0IGlzIGVpdGhlciBsaWtlIFxjCisuQiB1bnNpZ25lZCBjaGFyXGMKK1wmIGJ5IGRlZmF1bHQgb3IgbGlrZQorLkIgc2lnbmVkIGNoYXJcYworXCYgYnkgZGVmYXVsdC4KKy5TcAorSWRlYWxseSwgYSBwb3J0YWJsZSBwcm9ncmFtIHNob3VsZCBhbHdheXMgdXNlIFxjCisuQiBzaWduZWQgY2hhclxjCitcJiBvcgorLkIgdW5zaWduZWQgY2hhclxjCitcJiB3aGVuIGl0IGRlcGVuZHMgb24gdGhlIHNpZ25lZG5lc3Mgb2YgYW4gb2JqZWN0LgorQnV0IG1hbnkgcHJvZ3JhbXMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdXNlIHBsYWluIFxjCisuQiBjaGFyXGMKK1wmIGFuZAorZXhwZWN0IGl0IHRvIGJlIHNpZ25lZCwgb3IgZXhwZWN0IGl0IHRvIGJlIHVuc2lnbmVkLCBkZXBlbmRpbmcgb24gdGhlCittYWNoaW5lcyB0aGV5IHdlcmUgd3JpdHRlbiBmb3IuICBUaGlzIG9wdGlvbiwgYW5kIGl0cyBpbnZlcnNlLCBsZXQgeW91CittYWtlIHN1Y2ggYSBwcm9ncmFtIHdvcmsgd2l0aCB0aGUgb3Bwb3NpdGUgZGVmYXVsdC4KKy5TcAorVGhlIHR5cGUgXGMKKy5CIGNoYXJcYworXCYgaXMgYWx3YXlzIGEgZGlzdGluY3QgdHlwZSBmcm9tIGVhY2ggb2YKKy5CIHNpZ25lZCBjaGFyXGMKK1wmIGFuZCBcYworLkIgdW5zaWduZWQgY2hhclxjCitcJiwgZXZlbiB0aG91Z2ggaXRzIGJlaGF2aW9yCitpcyBhbHdheXMganVzdCBsaWtlIG9uZSBvZiB0aG9zZSB0d28uCisuVFAKKy5CIFwtZnNpZ25lZFwtY2hhcgorTGV0IHRoZSB0eXBlIFxjCisuQiBjaGFyXGMKK1wmIGJlIHNpZ25lZCwgbGlrZSBcYworLkIgc2lnbmVkIGNoYXJcYworXCYuCisuU3AKK05vdGUgdGhhdCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYFx8XGMKKy5CIFwtZm5vXC11bnNpZ25lZFwtY2hhclxjCitcJlx8Jywgd2hpY2ggaXMKK3RoZSBuZWdhdGl2ZSBmb3JtIG9mIGBcfFxjCisuQiBcLWZ1bnNpZ25lZFwtY2hhclxjCitcJlx8Jy4gIExpa2V3aXNlLAorYFx8XGMKKy5CIFwtZm5vXC1zaWduZWRcLWNoYXJcYworXCZcfCcgaXMgZXF1aXZhbGVudCB0byBgXHxcYworLkIgXC1mdW5zaWduZWRcLWNoYXJcYworXCZcfCcuCisuVFAKKy5CIFwtZnNpZ25lZFwtYml0ZmllbGRzCisuVFAKKy5CIFwtZnVuc2lnbmVkXC1iaXRmaWVsZHMKKy5UUAorLkIgXC1mbm9cLXNpZ25lZFwtYml0ZmllbGRzCisuVFAKKy5CIFwtZm5vXC11bnNpZ25lZFwtYml0ZmllbGRzCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgd2hldGhlciBhIGJpdGZpZWxkIGlzCitzaWduZWQgb3IgdW5zaWduZWQsIHdoZW4gZGVjbGFyZWQgd2l0aCBubyBleHBsaWNpdCBgXHxcYworLkIgc2lnbmVkXGMKK1wmXHwnIG9yIGBcfFxjCisuQiB1bnNpZ25lZFxjCitcJlx8JyBxdWFsaWZpZXIuICBCeSBkZWZhdWx0LCBzdWNoIGEgYml0ZmllbGQgaXMKK3NpZ25lZCwgYmVjYXVzZSB0aGlzIGlzIGNvbnNpc3RlbnQ6IHRoZSBiYXNpYyBpbnRlZ2VyIHR5cGVzIHN1Y2ggYXMKKy5CIGludFxjCitcJiBhcmUgc2lnbmVkIHR5cGVzLgorLlNwCitIb3dldmVyLCB3aGVuIHlvdSBzcGVjaWZ5IGBcfFxjCisuQiBcLXRyYWRpdGlvbmFsXGMKK1wmXHwnLCBiaXRmaWVsZHMgYXJlIGFsbCB1bnNpZ25lZAorbm8gbWF0dGVyIHdoYXQuCisuVFAKKy5CIFwtZndyaXRhYmxlXC1zdHJpbmdzCitTdG9yZSBzdHJpbmcgY29uc3RhbnRzIGluIHRoZSB3cml0YWJsZSBkYXRhIHNlZ21lbnQgYW5kIGRvbid0IHVuaXF1aXplCit0aGVtLiAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBwcm9ncmFtcyB3aGljaCBhc3N1bWUgdGhleQorY2FuIHdyaXRlIGludG8gc3RyaW5nIGNvbnN0YW50cy4gIGBcfFxjCisuQiBcLXRyYWRpdGlvbmFsXGMKK1wmXHwnIGFsc28gaGFzIHRoaXMKK2VmZmVjdC4KKy5TcAorV3JpdGluZyBpbnRvIHN0cmluZyBjb25zdGFudHMgaXMgYSB2ZXJ5IGJhZCBpZGVhOyBcKihscWNvbnN0YW50c1wqKHJxIHNob3VsZAorYmUgY29uc3RhbnQuCisuU0ggUFJFUFJPQ0VTU09SIE9QVElPTlMKK1RoZXNlIG9wdGlvbnMgY29udHJvbCB0aGUgQyBwcmVwcm9jZXNzb3IsIHdoaWNoIGlzIHJ1biBvbiBlYWNoIEMgc291cmNlCitmaWxlIGJlZm9yZSBhY3R1YWwgY29tcGlsYXRpb24uCisuUFAKK0lmIHlvdSB1c2UgdGhlIGBcfFxjCisuQiBcLUVcYworXCZcfCcgb3B0aW9uLCBHQ0MgZG9lcyBub3RoaW5nIGV4Y2VwdCBwcmVwcm9jZXNzaW5nLgorU29tZSBvZiB0aGVzZSBvcHRpb25zIG1ha2Ugc2Vuc2Ugb25seSB0b2dldGhlciB3aXRoIGBcfFxjCisuQiBcLUVcYworXCZcfCcgYmVjYXVzZQordGhleSBjYXVzZSB0aGUgcHJlcHJvY2Vzc29yIG91dHB1dCB0byBiZSB1bnN1aXRhYmxlIGZvciBhY3R1YWwKK2NvbXBpbGF0aW9uLgorLlRQCisuQkkgIlwtaW5jbHVkZSAiICJmaWxlIgorUHJvY2VzcyBcYworLkkgZmlsZVxjCitcJiBhcyBpbnB1dCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcmVndWxhciBpbnB1dCBmaWxlLgorSW4gZWZmZWN0LCB0aGUgY29udGVudHMgb2YgXGMKKy5JIGZpbGVcYworXCYgYXJlIGNvbXBpbGVkIGZpcnN0LiAgQW55IGBcfFxjCisuQiBcLURcYworXCZcfCcKK2FuZCBgXHxcYworLkIgXC1VXGMKK1wmXHwnIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgYWx3YXlzIHByb2Nlc3NlZCBiZWZvcmUKK2BcfFxjCisuQiBcLWluY2x1ZGUgXGMKKy5JIGZpbGVcYworXCZcYworXCZcfCcsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlCit3cml0dGVuLiAgQWxsIHRoZSBgXHxcYworLkIgXC1pbmNsdWRlXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1pbWFjcm9zXGMKK1wmXHwnIG9wdGlvbnMgYXJlCitwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHdyaXR0ZW4uCisuVFAKKy5CSSAiXC1pbWFjcm9zICIgZmlsZQorUHJvY2VzcyBcYworLkkgZmlsZVxjCitcJiBhcyBpbnB1dCwgZGlzY2FyZGluZyB0aGUgcmVzdWx0aW5nIG91dHB1dCwgYmVmb3JlCitwcm9jZXNzaW5nIHRoZSByZWd1bGFyIGlucHV0IGZpbGUuICBCZWNhdXNlIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGZyb20KKy5JIGZpbGVcYworXCYgaXMgZGlzY2FyZGVkLCB0aGUgb25seSBlZmZlY3Qgb2YgYFx8XGMKKy5CIFwtaW1hY3JvcyBcYworLkkgZmlsZVxjCitcJlxjCitcJlx8JyBpcyB0bworbWFrZSB0aGUgbWFjcm9zIGRlZmluZWQgaW4gXGMKKy5JIGZpbGVcYworXCYgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIG1haW4KK2lucHV0LiAgVGhlIHByZXByb2Nlc3NvciBldmFsdWF0ZXMgYW55IGBcfFxjCisuQiBcLURcYworXCZcfCcgYW5kIGBcfFxjCisuQiBcLVVcYworXCZcfCcgb3B0aW9ucworb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUgcHJvY2Vzc2luZyBgXHxcYworLkIgXC1pbWFjcm9zXGMKKy5JIGZpbGVcYworXCZcfCcsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIGluCit3aGljaCB0aGV5IGFyZSB3cml0dGVuLiAgQWxsIHRoZSBgXHxcYworLkIgXC1pbmNsdWRlXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1pbWFjcm9zXGMKK1wmXHwnCitvcHRpb25zIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHdyaXR0ZW4uCisuVFAKKy5CSSAiXC1pZGlyYWZ0ZXIgIiAiZGlyIgorQWRkIHRoZSBkaXJlY3RvcnkgXGMKKy5JIGRpclxjCitcJiB0byB0aGUgc2Vjb25kIGluY2x1ZGUgcGF0aC4gIFRoZSBkaXJlY3Rvcmllcworb24gdGhlIHNlY29uZCBpbmNsdWRlIHBhdGggYXJlIHNlYXJjaGVkIHdoZW4gYSBoZWFkZXIgZmlsZSBpcyBub3QgZm91bmQKK2luIGFueSBvZiB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlIG1haW4gaW5jbHVkZSBwYXRoICh0aGUgb25lIHRoYXQKK2BcfFxjCisuQiBcLUlcYworXCZcfCcgYWRkcyB0bykuCisuVFAKKy5CSSAiXC1pcHJlZml4ICIgInByZWZpeCIKK1NwZWNpZnkgXGMKKy5JIHByZWZpeFxjCitcJiBhcyB0aGUgcHJlZml4IGZvciBzdWJzZXF1ZW50IGBcfFxjCisuQiBcLWl3aXRocHJlZml4XGMKK1wmXHwnCitvcHRpb25zLgorLlRQCisuQkkgIlwtaXdpdGhwcmVmaXggIiAiZGlyIgorQWRkIGEgZGlyZWN0b3J5IHRvIHRoZSBzZWNvbmQgaW5jbHVkZSBwYXRoLiAgVGhlIGRpcmVjdG9yeSdzIG5hbWUgaXMKK21hZGUgYnkgY29uY2F0ZW5hdGluZyBcYworLkkgcHJlZml4XGMKK1wmIGFuZCBcYworLkkgZGlyXGMKK1wmLCB3aGVyZSBcYworLkkgcHJlZml4Cit3YXMgc3BlY2lmaWVkIHByZXZpb3VzbHkgd2l0aCBgXHxcYworLkIgXC1pcHJlZml4XGMKK1wmXHwnLgorLlRQCisuQiBcLW5vc3RkaW5jCitEbyBub3Qgc2VhcmNoIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMgZm9yIGhlYWRlciBmaWxlcy4gIE9ubHkKK3RoZSBkaXJlY3RvcmllcyB5b3UgaGF2ZSBzcGVjaWZpZWQgd2l0aCBgXHxcYworLkIgXC1JXGMKK1wmXHwnIG9wdGlvbnMgKGFuZCB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LCBpZiBhcHByb3ByaWF0ZSkgYXJlIHNlYXJjaGVkLgorLlNwCitCeSB1c2luZyBib3RoIGBcfFxjCisuQiBcLW5vc3RkaW5jXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgXC1JXC1cYworXCZcfCcsIHlvdSBjYW4gbGltaXQgdGhlIGluY2x1ZGUtZmlsZSBzZWFyY2ggZmlsZSB0byBvbmx5IHRob3NlCitkaXJlY3RvcmllcyB5b3Ugc3BlY2lmeSBleHBsaWNpdGx5LgorLlRQCisuQiBcLW5vc3RkaW5jKysKK0RvIG5vdCBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcyBpbiB0aGUgQysrXC1zcGVjaWZpYyBzdGFuZGFyZCBkaXJlY3RvcmllcywKK2J1dCBkbyBzdGlsbCBzZWFyY2ggdGhlIG90aGVyIHN0YW5kYXJkIGRpcmVjdG9yaWVzLgorKFRoaXMgb3B0aW9uIGlzIHVzZWQgd2hlbiBidWlsZGluZyBgXHxcYworLkIgbGliZysrXGMKK1wmXHwnLikKKy5UUAorLkIgXC11bmRlZgorRG8gbm90IHByZWRlZmluZSBhbnkgbm9uc3RhbmRhcmQgbWFjcm9zLiAgKEluY2x1ZGluZyBhcmNoaXRlY3R1cmUgZmxhZ3MpLgorLlRQCisuQiBcLUUKK1J1biBvbmx5IHRoZSBDIHByZXByb2Nlc3Nvci4gIFByZXByb2Nlc3MgYWxsIHRoZSBDIHNvdXJjZSBmaWxlcworc3BlY2lmaWVkIGFuZCBvdXRwdXQgdGhlIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IG9yIHRvIHRoZQorc3BlY2lmaWVkIG91dHB1dCBmaWxlLgorLlRQCisuQiBcLUMKK1RlbGwgdGhlIHByZXByb2Nlc3NvciBub3QgdG8gZGlzY2FyZCBjb21tZW50cy4gIFVzZWQgd2l0aCB0aGUKK2BcfFxjCisuQiBcLUVcYworXCZcfCcgb3B0aW9uLgorLlRQCisuQiBcLVAKK1RlbGwgdGhlIHByZXByb2Nlc3NvciBub3QgdG8gZ2VuZXJhdGUgYFx8XGMKKy5CICNsaW5lXGMKK1wmXHwnIGNvbW1hbmRzLgorVXNlZCB3aXRoIHRoZSBgXHxcYworLkIgXC1FXGMKK1wmXHwnIG9wdGlvbi4KKy5UUAorLkIgXC1NXCAgWyBcLU1HIF0KK1RlbGwgdGhlIHByZXByb2Nlc3NvciB0byBvdXRwdXQgYSBydWxlIHN1aXRhYmxlIGZvciBcYworLkIgbWFrZQorZGVzY3JpYmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggb2JqZWN0IGZpbGUuICBGb3IgZWFjaCBzb3VyY2UgZmlsZSwKK3RoZSBwcmVwcm9jZXNzb3Igb3V0cHV0cyBvbmUgXGMKKy5CIG1ha2VcYworXCYtcnVsZSB3aG9zZSB0YXJnZXQgaXMgdGhlIG9iamVjdAorZmlsZSBuYW1lIGZvciB0aGF0IHNvdXJjZSBmaWxlIGFuZCB3aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGFsbCB0aGUgZmlsZXMKK2BcfFxjCisuQiAjaW5jbHVkZVxjCitcJlx8J2QgaW4gaXQuICBUaGlzIHJ1bGUgbWF5IGJlIGEgc2luZ2xlIGxpbmUgb3IgbWF5IGJlCitjb250aW51ZWQgd2l0aCBgXHxcYworLkIgXGVcYworXCZcfCctbmV3bGluZSBpZiBpdCBpcyBsb25nLiAgVGhlIGxpc3Qgb2YgcnVsZXMgaXMKK3ByaW50ZWQgb24gc3RhbmRhcmQgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHByZXByb2Nlc3NlZCBDIHByb2dyYW0uCisuU3AKK2BcfFxjCisuQiBcLU1cYworXCZcfCcgaW1wbGllcyBgXHxcYworLkIgXC1FXGMKK1wmXHwnLgorLlNwCitgXHxcYworLkIgXC1NR1xjCitcJlx8JyBzYXlzIHRvIHRyZWF0IG1pc3NpbmcgaGVhZGVyIGZpbGVzIGFzIGdlbmVyYXRlZCBmaWxlcyBhbmQgYXNzdW1lIFxjCit0aGV5IGxpdmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBzb3VyY2UgZmlsZS4gIEl0IG11c3QgYmUgc3BlY2lmaWVkIFxjCitpbiBhZGRpdGlvbiB0byBgXHxcYworLkIgXC1NXGMKK1wmXHwnLgorLlRQCisuQiBcLU1NXCAgWyBcLU1HIF0KK0xpa2UgYFx8XGMKKy5CIFwtTVxjCitcJlx8JyBidXQgdGhlIG91dHB1dCBtZW50aW9ucyBvbmx5IHRoZSB1c2VyIGhlYWRlciBmaWxlcworaW5jbHVkZWQgd2l0aCBgXHxcYworLkIgI2luY2x1ZGUgIlxjCisuSSBmaWxlXGMKK1wmIlxjCitcJlx8Jy4gIFN5c3RlbSBoZWFkZXIgZmlsZXMKK2luY2x1ZGVkIHdpdGggYFx8XGMKKy5CICNpbmNsdWRlIDxcYworLkkgZmlsZVxjCitcJj5cYworXCZcfCcgYXJlIG9taXR0ZWQuCisuVFAKKy5CIFwtTUQKK0xpa2UgYFx8XGMKKy5CIFwtTVxjCitcJlx8JyBidXQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gaXMgd3JpdHRlbiB0byBmaWxlcyB3aXRoCituYW1lcyBtYWRlIGJ5IHJlcGxhY2luZyBgXHxcYworLkIgLm9cYworXCZcfCcgd2l0aCBgXHxcYworLkIgLmRcYworXCZcfCcgYXQgdGhlIGVuZCBvZiB0aGUKK291dHB1dCBmaWxlIG5hbWVzLiAgVGhpcyBpcyBpbiBhZGRpdGlvbiB0byBjb21waWxpbmcgdGhlIGZpbGUgYXMKK3NwZWNpZmllZFwoZW1cJmBcfFxjCisuQiBcLU1EXGMKK1wmXHwnIGRvZXMgbm90IGluaGliaXQgb3JkaW5hcnkgY29tcGlsYXRpb24gdGhlIHdheQorYFx8XGMKKy5CIFwtTVxjCitcJlx8JyBkb2VzLgorLlNwCitUaGUgTWFjaCB1dGlsaXR5IGBcfFxjCisuQiBtZFxjCitcJlx8JyBjYW4gYmUgdXNlZCB0byBtZXJnZSB0aGUgYFx8XGMKKy5CIC5kXGMKK1wmXHwnIGZpbGVzCitpbnRvIGEgc2luZ2xlIGRlcGVuZGVuY3kgZmlsZSBzdWl0YWJsZSBmb3IgdXNpbmcgd2l0aCB0aGUgYFx8XGMKKy5CIG1ha2VcYworXCZcfCcKK2NvbW1hbmQuCisuVFAKKy5CIFwtTU1ECitMaWtlIGBcfFxjCisuQiBcLU1EXGMKK1wmXHwnIGV4Y2VwdCBtZW50aW9uIG9ubHkgdXNlciBoZWFkZXIgZmlsZXMsIG5vdCBzeXN0ZW0KK2hlYWRlciBmaWxlcy4KKy5UUAorLkIgXC1ICitQcmludCB0aGUgbmFtZSBvZiBlYWNoIGhlYWRlciBmaWxlIHVzZWQsIGluIGFkZGl0aW9uIHRvIG90aGVyIG5vcm1hbAorYWN0aXZpdGllcy4KKy5UUAorLkJJICJcLUEiICJxdWVzdGlvbiIgKCBhbnN3ZXIgKQorQXNzZXJ0IHRoZSBhbnN3ZXIKKy5JIGFuc3dlcgorZm9yCisuSSBxdWVzdGlvblxjCitcJiwgaW4gY2FzZSBpdCBpcyB0ZXN0ZWQKK3dpdGggYSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgc3VjaCBhcyBgXHxcYworLkJJICIjaWYgIyIgcXVlc3Rpb24gKCBhbnN3ZXIgKVxjCitcJlx8Jy4gIGBcfFxjCisuQiBcLUFcLVxjCitcJlx8JyBkaXNhYmxlcyB0aGUgc3RhbmRhcmQKK2Fzc2VydGlvbnMgdGhhdCBub3JtYWxseSBkZXNjcmliZSB0aGUgdGFyZ2V0IG1hY2hpbmUuCisuVFAKKy5CSSAiXC1BIiAicXVlc3Rpb24iXGMKK1wmKFxjCisuSSBhbnN3ZXJcYworXCYpCitBc3NlcnQgdGhlIGFuc3dlciBcYworLkkgYW5zd2VyXGMKK1wmIGZvciBcYworLkkgcXVlc3Rpb25cYworXCYsIGluIGNhc2UgaXQgaXMgdGVzdGVkCit3aXRoIGEgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsIHN1Y2ggYXMgYFx8XGMKKy5CICNpZgorI1xjCisuSSBxdWVzdGlvblxjCitcJihcYworLkkgYW5zd2VyXGMKK1wmKVxjCitcJlx8Jy4gIGBcfFxjCisuQiBcLUEtXGMKK1wmXHwnIGRpc2FibGVzIHRoZSBzdGFuZGFyZAorYXNzZXJ0aW9ucyB0aGF0IG5vcm1hbGx5IGRlc2NyaWJlIHRoZSB0YXJnZXQgbWFjaGluZS4KKy5UUAorLkJJIFwtRCBtYWNybworRGVmaW5lIG1hY3JvIFxjCisuSSBtYWNyb1xjCitcJiB3aXRoIHRoZSBzdHJpbmcgYFx8XGMKKy5CIDFcYworXCZcfCcgYXMgaXRzIGRlZmluaXRpb24uCisuVFAKKy5CSSBcLUQgbWFjcm8gPSBkZWZuCitEZWZpbmUgbWFjcm8gXGMKKy5JIG1hY3JvXGMKK1wmIGFzIFxjCisuSSBkZWZuXGMKK1wmLiAgICBBbGwgaW5zdGFuY2VzIG9mIGBcfFxjCisuQiBcLURcYworXCZcfCcgb24KK3RoZSBjb21tYW5kIGxpbmUgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IGBcfFxjCisuQiBcLVVcYworXCZcfCcgb3B0aW9ucy4KKy5UUAorLkJJIFwtVSBtYWNybworVW5kZWZpbmUgbWFjcm8gXGMKKy5JIG1hY3JvXGMKK1wmLiAgYFx8XGMKKy5CIFwtVVxjCitcJlx8JyBvcHRpb25zIGFyZSBldmFsdWF0ZWQgYWZ0ZXIgYWxsIGBcfFxjCisuQiBcLURcYworXCZcfCcgb3B0aW9ucywgYnV0IGJlZm9yZSBhbnkgYFx8XGMKKy5CIFwtaW5jbHVkZVxjCitcJlx8JyBhbmQgYFx8XGMKKy5CIFwtaW1hY3Jvc1xjCitcJlx8JyBvcHRpb25zLgorLlRQCisuQiBcLWRNCitUZWxsIHRoZSBwcmVwcm9jZXNzb3IgdG8gb3V0cHV0IG9ubHkgYSBsaXN0IG9mIHRoZSBtYWNybyBkZWZpbml0aW9ucwordGhhdCBhcmUgaW4gZWZmZWN0IGF0IHRoZSBlbmQgb2YgcHJlcHJvY2Vzc2luZy4gIFVzZWQgd2l0aCB0aGUgYFx8XGMKKy5CIFwtRVxjCitcJlx8Jworb3B0aW9uLgorLlRQCisuQiBcLWRECitUZWxsIHRoZSBwcmVwcm9jZXNzb3IgdG8gcGFzcyBhbGwgbWFjcm8gZGVmaW5pdGlvbnMgaW50byB0aGUgb3V0cHV0LCBpbgordGhlaXIgcHJvcGVyIHNlcXVlbmNlIGluIHRoZSByZXN0IG9mIHRoZSBvdXRwdXQuCisuVFAKKy5CIFwtZE4KK0xpa2UgYFx8XGMKKy5CIFwtZERcYworXCZcfCcgZXhjZXB0IHRoYXQgdGhlIG1hY3JvIGFyZ3VtZW50cyBhbmQgY29udGVudHMgYXJlIG9taXR0ZWQuCitPbmx5IGBcfFxjCisuQiAjZGVmaW5lIFxjCisuSSBuYW1lXGMKK1wmXGMKK1wmXHwnIGlzIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuCisuU0ggQVNTRU1CTEVSIE9QVElPTgorLlRQCisuQkkgIlwtV2EsIiAib3B0aW9uIgorUGFzcyBcYworLkkgb3B0aW9uXGMKK1wmIGFzIGFuIG9wdGlvbiB0byB0aGUgYXNzZW1ibGVyLiAgSWYgXGMKKy5JIG9wdGlvbgorY29udGFpbnMgY29tbWFzLCBpdCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIG9wdGlvbnMgYXQgdGhlIGNvbW1hcy4KKy5TSCBMSU5LRVIgT1BUSU9OUworVGhlc2Ugb3B0aW9ucyBjb21lIGludG8gcGxheSB3aGVuIHRoZSBjb21waWxlciBsaW5rcyBvYmplY3QgZmlsZXMgaW50bworYW4gZXhlY3V0YWJsZSBvdXRwdXQgZmlsZS4gIFRoZXkgYXJlIG1lYW5pbmdsZXNzIGlmIHRoZSBjb21waWxlciBpcworbm90IGRvaW5nIGEgbGluayBzdGVwLgorLlRQCisuSSBvYmplY3QtZmlsZS1uYW1lCitBIGZpbGUgbmFtZSB0aGF0IGRvZXMgbm90IGVuZCBpbiBhIHNwZWNpYWwgcmVjb2duaXplZCBzdWZmaXggaXMKK2NvbnNpZGVyZWQgdG8gbmFtZSBhbiBvYmplY3QgZmlsZSBvciBsaWJyYXJ5LiAgKE9iamVjdCBmaWxlcyBhcmUKK2Rpc3Rpbmd1aXNoZWQgZnJvbSBsaWJyYXJpZXMgYnkgdGhlIGxpbmtlciBhY2NvcmRpbmcgdG8gdGhlIGZpbGUKK2NvbnRlbnRzLikgIElmIEdDQyBkb2VzIGEgbGluayBzdGVwLCB0aGVzZSBvYmplY3QgZmlsZXMgYXJlIHVzZWQgYXMgaW5wdXQKK3RvIHRoZSBsaW5rZXIuCisuVFAKKy5CSSBcLWwgbGlicmFyeQorVXNlIHRoZSBsaWJyYXJ5IG5hbWVkIFxjCisuSSBsaWJyYXJ5XGMKK1wmIHdoZW4gbGlua2luZy4KKy5TcAorVGhlIGxpbmtlciBzZWFyY2hlcyBhIHN0YW5kYXJkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIHRoZSBsaWJyYXJ5LAord2hpY2ggaXMgYWN0dWFsbHkgYSBmaWxlIG5hbWVkIGBcfFxjCisuQiBsaWJcYworLkkgbGlicmFyeVxjCitcJi5hXGMKK1wmXHwnLiAgVGhlIGxpbmtlcgordGhlbiB1c2VzIHRoaXMgZmlsZSBhcyBpZiBpdCBoYWQgYmVlbiBzcGVjaWZpZWQgcHJlY2lzZWx5IGJ5IG5hbWUuCisuU3AKK1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBpbmNsdWRlIHNldmVyYWwgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitwbHVzIGFueSB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggYFx8XGMKKy5CIFwtTFxjCitcJlx8Jy4KKy5TcAorTm9ybWFsbHkgdGhlIGZpbGVzIGZvdW5kIHRoaXMgd2F5IGFyZSBsaWJyYXJ5IGZpbGVzXChlbVwmYXJjaGl2ZSBmaWxlcword2hvc2UgbWVtYmVycyBhcmUgb2JqZWN0IGZpbGVzLiAgVGhlIGxpbmtlciBoYW5kbGVzIGFuIGFyY2hpdmUgZmlsZSBieQorc2Nhbm5pbmcgdGhyb3VnaCBpdCBmb3IgbWVtYmVycyB3aGljaCBkZWZpbmUgc3ltYm9scyB0aGF0IGhhdmUgc28gZmFyCitiZWVuIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLiAgSG93ZXZlciwgaWYgdGhlIGxpbmtlciBmaW5kcyBhbgorb3JkaW5hcnkgb2JqZWN0IGZpbGUgcmF0aGVyIHRoYW4gYSBsaWJyYXJ5LCB0aGUgb2JqZWN0IGZpbGUgaXMgbGlua2VkCitpbiB0aGUgdXN1YWwgZmFzaGlvbi4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBhbiBgXHxcYworLkIgXC1sXGMKK1wmXHwnIG9wdGlvbiBhbmQgc3BlY2lmeWluZyBhIGZpbGUKK25hbWUgaXMgdGhhdCBgXHxcYworLkIgXC1sXGMKK1wmXHwnIHN1cnJvdW5kcworLkkgbGlicmFyeQord2l0aCBgXHxcYworLkIgbGliXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgLmFcYworXCZcfCcgYW5kIHNlYXJjaGVzIHNldmVyYWwgZGlyZWN0b3JpZXMuCisuVFAKKy5CIFwtbG9iamMKK1lvdSBuZWVkIHRoaXMgc3BlY2lhbCBjYXNlIG9mIHRoZQorLkIgXC1sCitvcHRpb24gaW4gb3JkZXIgdG8gbGluayBhbiBPYmplY3RpdmUgQyBwcm9ncmFtLgorLlRQCisuQiBcLW5vc3RhcnRmaWxlcworRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIHN0YXJ0dXAgZmlsZXMgd2hlbiBsaW5raW5nLgorVGhlIHN0YW5kYXJkIGxpYnJhcmllcyBhcmUgdXNlZCBub3JtYWxseS4KKy5UUAorLkIgXC1ub3N0ZGxpYgorRG9uJ3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gbGlicmFyaWVzIGFuZCBzdGFydHVwIGZpbGVzIHdoZW4gbGlua2luZy4KK09ubHkgdGhlIGZpbGVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisuVFAKKy5CIFwtc3RhdGljCitPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcsIHRoaXMgcHJldmVudHMgbGlua2luZyB3aXRoIHRoZSBzaGFyZWQKK2xpYnJhcmllcy4gIE9uIG90aGVyIHN5c3RlbXMsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisuVFAKKy5CIFwtc2hhcmVkCitQcm9kdWNlIGEgc2hhcmVkIG9iamVjdCB3aGljaCBjYW4gdGhlbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBvYmplY3RzIHRvCitmb3JtIGFuIGV4ZWN1dGFibGUuICBPbmx5IGEgZmV3IHN5c3RlbXMgc3VwcG9ydCB0aGlzIG9wdGlvbi4KKy5UUAorLkIgXC1zeW1ib2xpYworQmluZCByZWZlcmVuY2VzIHRvIGdsb2JhbCBzeW1ib2xzIHdoZW4gYnVpbGRpbmcgYSBzaGFyZWQgb2JqZWN0LiAgV2FybgorYWJvdXQgYW55IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyAodW5sZXNzIG92ZXJyaWRkZW4gYnkgdGhlIGxpbmsgZWRpdG9yCitvcHRpb24gYFx8XGMKKy5CCitcLVhsaW5rZXIgXC16IFwtWGxpbmtlciBkZWZzXGMKK1wmXHwnKS4gIE9ubHkgYSBmZXcgc3lzdGVtcyBzdXBwb3J0Cit0aGlzIG9wdGlvbi4KKy5UUAorLkJJICJcLVhsaW5rZXIgIiAib3B0aW9uIgorUGFzcyBcYworLkkgb3B0aW9uCithcyBhbiBvcHRpb24gdG8gdGhlIGxpbmtlci4gIFlvdSBjYW4gdXNlIHRoaXMgdG8KK3N1cHBseSBzeXN0ZW0tc3BlY2lmaWMgbGlua2VyIG9wdGlvbnMgd2hpY2ggR05VIENDIGRvZXMgbm90IGtub3cgaG93IHRvCityZWNvZ25pemUuCisuU3AKK0lmIHlvdSB3YW50IHRvIHBhc3MgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsIHlvdSBtdXN0IHVzZQorYFx8XGMKKy5CIFwtWGxpbmtlclxjCitcJlx8JyB0d2ljZSwgb25jZSBmb3IgdGhlIG9wdGlvbiBhbmQgb25jZSBmb3IgdGhlIGFyZ3VtZW50LgorRm9yIGV4YW1wbGUsIHRvIHBhc3MgYFx8XGMKKy5CCitcLWFzc2VydCBkZWZpbml0aW9uc1xjCitcJlx8JywgeW91IG11c3Qgd3JpdGUKK2BcfFxjCisuQgorXC1YbGlua2VyIFwtYXNzZXJ0IFwtWGxpbmtlciBkZWZpbml0aW9uc1xjCitcJlx8Jy4gIEl0IGRvZXMgbm90IHdvcmsgdG8gd3JpdGUKK2BcfFxjCisuQgorXC1YbGlua2VyICJcLWFzc2VydCBkZWZpbml0aW9ucyJcYworXCZcfCcsIGJlY2F1c2UgdGhpcyBwYXNzZXMgdGhlIGVudGlyZQorc3RyaW5nIGFzIGEgc2luZ2xlIGFyZ3VtZW50LCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgbGlua2VyIGV4cGVjdHMuCisuVFAKKy5CSSAiXC1XbCwiICJvcHRpb24iCitQYXNzIFxjCisuSSBvcHRpb25cYworXCYgYXMgYW4gb3B0aW9uIHRvIHRoZSBsaW5rZXIuICBJZiBcYworLkkgb3B0aW9uXGMKK1wmIGNvbnRhaW5zCitjb21tYXMsIGl0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgb3B0aW9ucyBhdCB0aGUgY29tbWFzLgorLlRQCisuQkkgIlwtdSAiICJzeW1ib2wiCitQcmV0ZW5kIHRoZSBzeW1ib2wKKy5JIHN5bWJvbAoraXMgdW5kZWZpbmVkLCB0byBmb3JjZSBsaW5raW5nIG9mCitsaWJyYXJ5IG1vZHVsZXMgdG8gZGVmaW5lIGl0LiAgWW91IGNhbiB1c2UgYFx8XGMKKy5CIFwtdVxjCitcJlx8JyBtdWx0aXBsZSB0aW1lcyB3aXRoCitkaWZmZXJlbnQgc3ltYm9scyB0byBmb3JjZSBsb2FkaW5nIG9mIGFkZGl0aW9uYWwgbGlicmFyeSBtb2R1bGVzLgorLlNIIERJUkVDVE9SWSBPUFRJT05TCitUaGVzZSBvcHRpb25zIHNwZWNpZnkgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBoZWFkZXIgZmlsZXMsIGZvcgorbGlicmFyaWVzIGFuZCBmb3IgcGFydHMgb2YgdGhlIGNvbXBpbGVyOgorLlRQCisuQkkgIlwtSSIgImRpciIKK0FwcGVuZCBkaXJlY3RvcnkgXGMKKy5JIGRpclxjCitcJiB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyBzZWFyY2hlZCBmb3IgaW5jbHVkZSBmaWxlcy4KKy5UUAorLkIgXC1JXC0KK0FueSBkaXJlY3RvcmllcyB5b3Ugc3BlY2lmeSB3aXRoIGBcfFxjCisuQiBcLUlcYworXCZcfCcgb3B0aW9ucyBiZWZvcmUgdGhlIGBcfFxjCisuQiBcLUlcLVxjCitcJlx8Jworb3B0aW9uIGFyZSBzZWFyY2hlZCBvbmx5IGZvciB0aGUgY2FzZSBvZiBgXHxcYworLkIKKyNpbmNsdWRlICJcYworLkkgZmlsZVxjCisuQgorXCYiXGMKK1wmXHwnOwordGhleSBhcmUgbm90IHNlYXJjaGVkIGZvciBgXHxcYworLkIgI2luY2x1ZGUgPFxjCisuSSBmaWxlXGMKK1wmPlxjCitcJlx8Jy4KKy5TcAorSWYgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBhcmUgc3BlY2lmaWVkIHdpdGggYFx8XGMKKy5CIFwtSVxjCitcJlx8JyBvcHRpb25zIGFmdGVyCit0aGUgYFx8XGMKKy5CIFwtSVwtXGMKK1wmXHwnLCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgZm9yIGFsbCBgXHxcYworLkIgI2luY2x1ZGVcYworXCZcfCcKK2RpcmVjdGl2ZXMuICAoT3JkaW5hcmlseSBcYworLkkgYWxsXGMKK1wmIGBcfFxjCisuQiBcLUlcYworXCZcfCcgZGlyZWN0b3JpZXMgYXJlIHVzZWQKK3RoaXMgd2F5LikKKy5TcAorSW4gYWRkaXRpb24sIHRoZSBgXHxcYworLkIgXC1JXC1cYworXCZcfCcgb3B0aW9uIGluaGliaXRzIHRoZSB1c2Ugb2YgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSAod2hlcmUgdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSBjYW1lIGZyb20pIGFzIHRoZSBmaXJzdCBzZWFyY2gKK2RpcmVjdG9yeSBmb3IgYFx8XGMKKy5CCisjaW5jbHVkZSAiXGMKKy5JIGZpbGVcYworLkIKK1wmIlxjCitcJlx8Jy4gIFRoZXJlIGlzIG5vIHdheSB0bworb3ZlcnJpZGUgdGhpcyBlZmZlY3Qgb2YgYFx8XGMKKy5CIFwtSVwtXGMKK1wmXHwnLiAgV2l0aCBgXHxcYworLkIgXC1JLlxjCitcJlx8JyB5b3UgY2FuIHNwZWNpZnkKK3NlYXJjaGluZyB0aGUgZGlyZWN0b3J5IHdoaWNoIHdhcyBjdXJyZW50IHdoZW4gdGhlIGNvbXBpbGVyIHdhcworaW52b2tlZC4gIFRoYXQgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCB0aGUgcHJlcHJvY2Vzc29yIGRvZXMKK2J5IGRlZmF1bHQsIGJ1dCBpdCBpcyBvZnRlbiBzYXRpc2ZhY3RvcnkuCisuU3AKK2BcfFxjCisuQiBcLUlcLVxjCitcJlx8JyBkb2VzIG5vdCBpbmhpYml0IHRoZSB1c2Ugb2YgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcworZm9yIGhlYWRlciBmaWxlcy4gIFRodXMsIGBcfFxjCisuQiBcLUlcLVxjCitcJlx8JyBhbmQgYFx8XGMKKy5CIFwtbm9zdGRpbmNcYworXCZcfCcgYXJlCitpbmRlcGVuZGVudC4KKy5UUAorLkJJICJcLUwiICJkaXIiCitBZGQgZGlyZWN0b3J5IFxjCisuSSBkaXJcYworXCYgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQKK2ZvciBgXHxcYworLkIgXC1sXGMKK1wmXHwnLgorLlRQCisuQkkgIlwtQiIgInByZWZpeCIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGVyZSB0byBmaW5kIHRoZSBleGVjdXRhYmxlcywgbGlicmFyaWVzIGFuZAorZGF0YSBmaWxlcyBvZiB0aGUgY29tcGlsZXIgaXRzZWxmLgorLlNwCitUaGUgY29tcGlsZXIgZHJpdmVyIHByb2dyYW0gcnVucyBvbmUgb3IgbW9yZSBvZiB0aGUgc3VicHJvZ3JhbXMKK2BcfFxjCisuQiBjcHBcYworXCZcfCcsIGBcfFxjCisuQiBjYzFcYworXCZcfCcgKG9yLCBmb3IgQysrLCBgXHxcYworLkIgY2MxcGx1c1xjCitcJlx8JyksIGBcfFxjCisuQiBhc1xjCitcJlx8JyBhbmQgYFx8XGMKKy5CIGxkXGMKK1wmXHwnLiAgSXQgdHJpZXMKKy5JIHByZWZpeFxjCitcJiBhcyBhIHByZWZpeCBmb3IgZWFjaCBwcm9ncmFtIGl0IHRyaWVzIHRvIHJ1biwgYm90aCB3aXRoIGFuZAord2l0aG91dCBgXHxcYworLkkgbWFjaGluZVxjCisuQiAvXGMKKy5JIHZlcnNpb25cYworLkIgL1xjCitcJlx8Jy4KKy5TcAorRm9yIGVhY2ggc3VicHJvZ3JhbSB0byBiZSBydW4sIHRoZSBjb21waWxlciBkcml2ZXIgZmlyc3QgdHJpZXMgdGhlCitgXHxcYworLkIgXC1CXGMKK1wmXHwnIHByZWZpeCwgaWYgYW55LiAgSWYgdGhhdCBuYW1lIGlzIG5vdCBmb3VuZCwgb3IgaWYgYFx8XGMKKy5CIFwtQlxjCitcJlx8Jword2FzIG5vdCBzcGVjaWZpZWQsIHRoZSBkcml2ZXIgdHJpZXMgdHdvIHN0YW5kYXJkIHByZWZpeGVzLCB3aGljaCBhcmUKK2BcfFxjCisuQiAvdXNyL2xpYi9nY2MvXGMKK1wmXHwnIGFuZCBgXHxcYworLkIgL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9cYworXCZcfCcuICBJZiBuZWl0aGVyIG9mCit0aG9zZSByZXN1bHRzIGluIGEgZmlsZSBuYW1lIHRoYXQgaXMgZm91bmQsIHRoZSBjb21waWxlciBkcml2ZXIKK3NlYXJjaGVzIGZvciB0aGUgdW5tb2RpZmllZCBwcm9ncmFtCituYW1lLCB1c2luZyB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHlvdXIKK2BcfFxjCisuQiBQQVRIXGMKK1wmXHwnIGVudmlyb25tZW50IHZhcmlhYmxlLgorLlNwCitUaGUgcnVuLXRpbWUgc3VwcG9ydCBmaWxlIGBcfFxjCisuQiBsaWJnY2MuYVxjCitcJlx8JyBpcyBhbHNvIHNlYXJjaGVkIGZvciB1c2luZyB0aGUKK2BcfFxjCisuQiBcLUJcYworXCZcfCcgcHJlZml4LCBpZiBuZWVkZWQuICBJZiBpdCBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSB0d28KK3N0YW5kYXJkIHByZWZpeGVzIGFib3ZlIGFyZSB0cmllZCwgYW5kIHRoYXQgaXMgYWxsLiAgVGhlIGZpbGUgaXMgbGVmdAorb3V0IG9mIHRoZSBsaW5rIGlmIGl0IGlzIG5vdCBmb3VuZCBieSB0aG9zZSBtZWFucy4gIE1vc3Qgb2YgdGhlIHRpbWUsCitvbiBtb3N0IG1hY2hpbmVzLCBgXHxcYworLkIgbGliZ2NjLmFcYworXCZcfCcgaXMgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeS4KKy5TcAorWW91IGNhbiBnZXQgYSBzaW1pbGFyIHJlc3VsdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorLkIgR0NDX0VYRUNfUFJFRklYXGMKK1wmOyBpZiBpdCBpcyBkZWZpbmVkLCBpdHMgdmFsdWUgaXMgdXNlZCBhcyBhIHByZWZpeAoraW4gdGhlIHNhbWUgd2F5LiAgSWYgYm90aCB0aGUgYFx8XGMKKy5CIFwtQlxjCitcJlx8JyBvcHRpb24gYW5kIHRoZQorLkIgR0NDX0VYRUNfUFJFRklYXGMKK1wmIHZhcmlhYmxlIGFyZSBwcmVzZW50LCB0aGUgYFx8XGMKKy5CIFwtQlxjCitcJlx8JyBvcHRpb24gaXMKK3VzZWQgZmlyc3QgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSBzZWNvbmQuCisuU0ggV0FSTklORyBPUFRJT05TCitXYXJuaW5ncyBhcmUgZGlhZ25vc3RpYyBtZXNzYWdlcyB0aGF0IHJlcG9ydCBjb25zdHJ1Y3Rpb25zIHdoaWNoCithcmUgbm90IGluaGVyZW50bHkgZXJyb25lb3VzIGJ1dCB3aGljaCBhcmUgcmlza3kgb3Igc3VnZ2VzdCB0aGVyZQorbWF5IGhhdmUgYmVlbiBhbiBlcnJvci4KKy5TcAorVGhlc2Ugb3B0aW9ucyBjb250cm9sIHRoZSBhbW91bnQgYW5kIGtpbmRzIG9mIHdhcm5pbmdzIHByb2R1Y2VkIGJ5IEdOVQorQ0M6CisuVFAKKy5CIFwtZnN5bnRheFwtb25seQorQ2hlY2sgdGhlIGNvZGUgZm9yIHN5bnRheCBlcnJvcnMsIGJ1dCBkb24ndCBlbWl0IGFueSBvdXRwdXQuCisuVFAKKy5CIFwtdworSW5oaWJpdCBhbGwgd2FybmluZyBtZXNzYWdlcy4KKy5UUAorLkIgXC1Xbm9cLWltcG9ydAorSW5oaWJpdCB3YXJuaW5nIG1lc3NhZ2VzIGFib3V0IHRoZSB1c2Ugb2YKKy5CUiAjaW1wb3J0IC4KKy5UUAorLkIgXC1wZWRhbnRpYworSXNzdWUgYWxsIHRoZSB3YXJuaW5ncyBkZW1hbmRlZCBieSBzdHJpY3QgQU5TSSBzdGFuZGFyZCBDOyByZWplY3QKK2FsbCBwcm9ncmFtcyB0aGF0IHVzZSBmb3JiaWRkZW4gZXh0ZW5zaW9ucy4KKy5TcAorVmFsaWQgQU5TSSBzdGFuZGFyZCBDIHByb2dyYW1zIHNob3VsZCBjb21waWxlIHByb3Blcmx5IHdpdGggb3Igd2l0aG91dAordGhpcyBvcHRpb24gKHRob3VnaCBhIHJhcmUgZmV3IHdpbGwgcmVxdWlyZSBgXHxcYworLkIgXC1hbnNpXGMKK1wmXHwnKS4gIEhvd2V2ZXIsCit3aXRob3V0IHRoaXMgb3B0aW9uLCBjZXJ0YWluIEdOVSBleHRlbnNpb25zIGFuZCB0cmFkaXRpb25hbCBDIGZlYXR1cmVzCithcmUgc3VwcG9ydGVkIGFzIHdlbGwuICBXaXRoIHRoaXMgb3B0aW9uLCB0aGV5IGFyZSByZWplY3RlZC4gIFRoZXJlIGlzCitubyByZWFzb24gdG8gXGMKKy5JIHVzZVxjCitcJiB0aGlzIG9wdGlvbjsgaXQgZXhpc3RzIG9ubHkgdG8gc2F0aXNmeSBwZWRhbnRzLgorLlNwCitgXHxcYworLkIgXC1wZWRhbnRpY1xjCitcJlx8JyBkb2VzIG5vdCBjYXVzZSB3YXJuaW5nIG1lc3NhZ2VzIGZvciB1c2Ugb2YgdGhlCithbHRlcm5hdGUga2V5d29yZHMgd2hvc2UgbmFtZXMgYmVnaW4gYW5kIGVuZCB3aXRoIGBcfFxjCisuQiBfXHxfXGMKK1wmXHwnLiAgUGVkYW50aWMKK3dhcm5pbmdzIGFyZSBhbHNvIGRpc2FibGVkIGluIHRoZSBleHByZXNzaW9uIHRoYXQgZm9sbG93cworLkIgX1x8X2V4dGVuc2lvbl9cfF9cYworXCYuICBIb3dldmVyLCBvbmx5IHN5c3RlbSBoZWFkZXIgZmlsZXMgc2hvdWxkIHVzZQordGhlc2UgZXNjYXBlIHJvdXRlczsgYXBwbGljYXRpb24gcHJvZ3JhbXMgc2hvdWxkIGF2b2lkIHRoZW0uCisuVFAKKy5CIFwtcGVkYW50aWNcLWVycm9ycworTGlrZSBgXHxcYworLkIgXC1wZWRhbnRpY1xjCitcJlx8JywgZXhjZXB0IHRoYXQgZXJyb3JzIGFyZSBwcm9kdWNlZCByYXRoZXIgdGhhbgord2FybmluZ3MuCisuVFAKKy5CIFwtVworUHJpbnQgZXh0cmEgd2FybmluZyBtZXNzYWdlcyBmb3IgdGhlc2UgZXZlbnRzOgorLlRQCitcIFwgXCBcKGJ1CitBIG5vbnZvbGF0aWxlIGF1dG9tYXRpYyB2YXJpYWJsZSBtaWdodCBiZSBjaGFuZ2VkIGJ5IGEgY2FsbCB0bworLkIgbG9uZ2ptcFxjCitcJi4gIFRoZXNlIHdhcm5pbmdzIGFyZSBwb3NzaWJsZSBvbmx5IGluCitvcHRpbWl6aW5nIGNvbXBpbGF0aW9uLgorLlNwCitUaGUgY29tcGlsZXIgc2VlcyBvbmx5IHRoZSBjYWxscyB0byBcYworLkIgc2V0am1wXGMKK1wmLiAgSXQgY2Fubm90IGtub3cKK3doZXJlIFxjCisuQiBsb25nam1wXGMKK1wmIHdpbGwgYmUgY2FsbGVkOyBpbiBmYWN0LCBhIHNpZ25hbCBoYW5kbGVyIGNvdWxkCitjYWxsIGl0IGF0IGFueSBwb2ludCBpbiB0aGUgY29kZS4gIEFzIGEgcmVzdWx0LCB5b3UgbWF5IGdldCBhIHdhcm5pbmcKK2V2ZW4gd2hlbiB0aGVyZSBpcyBpbiBmYWN0IG5vIHByb2JsZW0gYmVjYXVzZSBcYworLkIgbG9uZ2ptcFxjCitcJiBjYW5ub3QKK2luIGZhY3QgYmUgY2FsbGVkIGF0IHRoZSBwbGFjZSB3aGljaCB3b3VsZCBjYXVzZSBhIHByb2JsZW0uCisuVFAKK1wgXCBcIFwoYnUKK0EgZnVuY3Rpb24gY2FuIHJldHVybiBlaXRoZXIgd2l0aCBvciB3aXRob3V0IGEgdmFsdWUuICAoRmFsbGluZworb2ZmIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgY29uc2lkZXJlZCByZXR1cm5pbmcgd2l0aG91dAorYSB2YWx1ZS4pICBGb3IgZXhhbXBsZSwgdGhpcyBmdW5jdGlvbiB3b3VsZCBldm9rZSBzdWNoIGEKK3dhcm5pbmc6CisuU3AKKy5uZgorZm9vIChhKQoreworICBpZiAoYSA+IDApCisgICAgcmV0dXJuIGE7Cit9CisuU3AKKy5maQorU3B1cmlvdXMgd2FybmluZ3MgY2FuIG9jY3VyIGJlY2F1c2UgR05VIENDIGRvZXMgbm90IHJlYWxpemUgdGhhdAorY2VydGFpbiBmdW5jdGlvbnMgKGluY2x1ZGluZyBcYworLkIgYWJvcnRcYworXCYgYW5kIFxjCisuQiBsb25nam1wXGMKK1wmKQord2lsbCBuZXZlciByZXR1cm4uCisuVFAKK1wgXCBcIFwoYnUKK0FuIGV4cHJlc3Npb24tc3RhdGVtZW50IG9yIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhIGNvbW1hIGV4cHJlc3Npb24KK2NvbnRhaW5zIG5vIHNpZGUgZWZmZWN0cy4gCitUbyBzdXBwcmVzcyB0aGUgd2FybmluZywgY2FzdCB0aGUgdW51c2VkIGV4cHJlc3Npb24gdG8gdm9pZC4KK0ZvciBleGFtcGxlLCBhbiBleHByZXNzaW9uIHN1Y2ggYXMgYFx8XGMKKy5CIHhbaSxqXVxjCitcJlx8JyB3aWxsIGNhdXNlIGEgd2FybmluZywKK2J1dCBgXHxcYworLkIgeFsodm9pZClpLGpdXGMKK1wmXHwnIHdpbGwgbm90LgorLlRQCitcIFwgXCBcKGJ1CitBbiB1bnNpZ25lZCB2YWx1ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHplcm8gd2l0aCBgXHxcYworLkIgPlxjCitcJlx8JyBvciBgXHxcYworLkIgPD1cYworXCZcfCcuCisuUFAKKy5UUAorLkIgXC1XaW1wbGljaXQKK1dhcm4gd2hlbmV2ZXIgYSBmdW5jdGlvbiBvciBwYXJhbWV0ZXIgaXMgaW1wbGljaXRseSBkZWNsYXJlZC4KKy5UUAorLkIgXC1XbWFpbgorV2FybiBpZiB0aGUKKy5CIG1haW4KK2Z1bmN0aW9uIGlzIGRlY2xhcmVkIG9yIGRlZmluZWQgd2l0aCBhIHN1c3BpY2lvdXMgdHlwZS4KK1R5cGljYWxseSwgaXQgaXMgYSBmdW5jdGlvbiB3aXRoIGV4dGVybmFsIGxpbmthZ2UsIHJldHVybmluZworLkIgaW50XGMKK1wmLCBhbmQKK3Rha2luZyB6ZXJvIG9yIHR3byBhcmd1bWVudHMuCisKKy5UUAorLkIgXC1XcmV0dXJuXC10eXBlCitXYXJuIHdoZW5ldmVyIGEgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoIGEgcmV0dXJuLXR5cGUgdGhhdCBkZWZhdWx0cwordG8gXGMKKy5CIGludFxjCitcJi4gIEFsc28gd2FybiBhYm91dCBhbnkgXGMKKy5CIHJldHVyblxjCitcJiBzdGF0ZW1lbnQgd2l0aCBubworcmV0dXJuLXZhbHVlIGluIGEgZnVuY3Rpb24gd2hvc2UgcmV0dXJuLXR5cGUgaXMgbm90IFxjCisuQiB2b2lkXGMKK1wmLgorLlRQCisuQiBcLVd1bnVzZWQKK1dhcm4gd2hlbmV2ZXIgYSBsb2NhbCB2YXJpYWJsZSBpcyB1bnVzZWQgYXNpZGUgZnJvbSBpdHMgZGVjbGFyYXRpb24sCit3aGVuZXZlciBhIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHN0YXRpYyBidXQgbmV2ZXIgZGVmaW5lZCwgYW5kIHdoZW5ldmVyCithIHN0YXRlbWVudCBjb21wdXRlcyBhIHJlc3VsdCB0aGF0IGlzIGV4cGxpY2l0bHkgbm90IHVzZWQuCisuVFAKKy5CIFwtV3N3aXRjaAorV2FybiB3aGVuZXZlciBhIFxjCisuQiBzd2l0Y2hcYworXCYgc3RhdGVtZW50IGhhcyBhbiBpbmRleCBvZiBlbnVtZXJhbCB0eXBlCithbmQgbGFja3MgYSBcYworLkIgY2FzZVxjCitcJiBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIG5hbWVkIGNvZGVzIG9mIHRoYXQKK2VudW1lcmF0aW9uLiAgKFRoZSBwcmVzZW5jZSBvZiBhIFxjCisuQiBkZWZhdWx0XGMKK1wmIGxhYmVsIHByZXZlbnRzIHRoaXMKK3dhcm5pbmcuKSAgXGMKKy5CIGNhc2VcYworXCYgbGFiZWxzIG91dHNpZGUgdGhlIGVudW1lcmF0aW9uIHJhbmdlIGFsc28KK3Byb3Zva2Ugd2FybmluZ3Mgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLgorLlRQCisuQiBcLVdjb21tZW50CitXYXJuIHdoZW5ldmVyIGEgY29tbWVudC1zdGFydCBzZXF1ZW5jZSBgXHxcYworLkIgL1woKipcYworXCZcfCcgYXBwZWFycyBpbiBhIGNvbW1lbnQuCisuVFAKKy5CIFwtV3RyaWdyYXBocworV2FybiBpZiBhbnkgdHJpZ3JhcGhzIGFyZSBlbmNvdW50ZXJlZCAoYXNzdW1pbmcgdGhleSBhcmUgZW5hYmxlZCkuCisuVFAKKy5CIFwtV2Zvcm1hdAorQ2hlY2sgY2FsbHMgdG8gXGMKKy5CIHByaW50ZlxjCitcJiBhbmQgXGMKKy5CIHNjYW5mXGMKK1wmLCBldGMuLCB0byBtYWtlIHN1cmUgdGhhdAordGhlIGFyZ3VtZW50cyBzdXBwbGllZCBoYXZlIHR5cGVzIGFwcHJvcHJpYXRlIHRvIHRoZSBmb3JtYXQgc3RyaW5nCitzcGVjaWZpZWQuCisuVFAKKy5CIFwtV2NoYXJcLXN1YnNjcmlwdHMKK1dhcm4gaWYgYW4gYXJyYXkgc3Vic2NyaXB0IGhhcyB0eXBlCisuQlIgY2hhciAuCitUaGlzIGlzIGEgY29tbW9uIGNhdXNlIG9mIGVycm9yLCBhcyBwcm9ncmFtbWVycyBvZnRlbiBmb3JnZXQgdGhhdCB0aGlzCit0eXBlIGlzIHNpZ25lZCBvbiBzb21lIG1hY2hpbmVzLgorLlRQCisuQiBcLVd1bmluaXRpYWxpemVkCitBbiBhdXRvbWF0aWMgdmFyaWFibGUgaXMgdXNlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGluaXRpYWxpemVkLgorLlNwCitUaGVzZSB3YXJuaW5ncyBhcmUgcG9zc2libGUgb25seSBpbiBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uLAorYmVjYXVzZSB0aGV5IHJlcXVpcmUgZGF0YSBmbG93IGluZm9ybWF0aW9uIHRoYXQgaXMgY29tcHV0ZWQgb25seQord2hlbiBvcHRpbWl6aW5nLiAgSWYgeW91IGRvbid0IHNwZWNpZnkgYFx8XGMKKy5CIFwtT1xjCitcJlx8JywgeW91IHNpbXBseSB3b24ndAorZ2V0IHRoZXNlIHdhcm5pbmdzLgorLlNwCitUaGVzZSB3YXJuaW5ncyBvY2N1ciBvbmx5IGZvciB2YXJpYWJsZXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IKK3JlZ2lzdGVyIGFsbG9jYXRpb24uICBUaGVyZWZvcmUsIHRoZXkgZG8gbm90IG9jY3VyIGZvciBhIHZhcmlhYmxlIHRoYXQKK2lzIGRlY2xhcmVkIFxjCisuQiB2b2xhdGlsZVxjCitcJiwgb3Igd2hvc2UgYWRkcmVzcyBpcyB0YWtlbiwgb3Igd2hvc2Ugc2l6ZQoraXMgb3RoZXIgdGhhbiAxLCAyLCA0IG9yIDggYnl0ZXMuICBBbHNvLCB0aGV5IGRvIG5vdCBvY2N1ciBmb3IKK3N0cnVjdHVyZXMsIHVuaW9ucyBvciBhcnJheXMsIGV2ZW4gd2hlbiB0aGV5IGFyZSBpbiByZWdpc3RlcnMuCisuU3AKK05vdGUgdGhhdCB0aGVyZSBtYXkgYmUgbm8gd2FybmluZyBhYm91dCBhIHZhcmlhYmxlIHRoYXQgaXMgdXNlZCBvbmx5Cit0byBjb21wdXRlIGEgdmFsdWUgdGhhdCBpdHNlbGYgaXMgbmV2ZXIgdXNlZCwgYmVjYXVzZSBzdWNoCitjb21wdXRhdGlvbnMgbWF5IGJlIGRlbGV0ZWQgYnkgZGF0YSBmbG93IGFuYWx5c2lzIGJlZm9yZSB0aGUgd2FybmluZ3MKK2FyZSBwcmludGVkLgorLlNwCitUaGVzZSB3YXJuaW5ncyBhcmUgbWFkZSBvcHRpb25hbCBiZWNhdXNlIEdOVSBDQyBpcyBub3Qgc21hcnQKK2Vub3VnaCB0byBzZWUgYWxsIHRoZSByZWFzb25zIHdoeSB0aGUgY29kZSBtaWdodCBiZSBjb3JyZWN0CitkZXNwaXRlIGFwcGVhcmluZyB0byBoYXZlIGFuIGVycm9yLiAgSGVyZSBpcyBvbmUgZXhhbXBsZSBvZiBob3cKK3RoaXMgY2FuIGhhcHBlbjoKKy5TcAorLm5mCit7CisgIGludCB4OworICBzd2l0Y2ggKHkpCisgICAgeworICAgIGNhc2UgMTogeCA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6IHggPSA0OworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOiB4ID0gNTsKKyAgICB9CisgIGZvbyAoeCk7Cit9CisuU3AKKy5maQorSWYgdGhlIHZhbHVlIG9mIFxjCisuQiB5XGMKK1wmIGlzIGFsd2F5cyAxLCAyIG9yIDMsIHRoZW4gXGMKKy5CIHhcYworXCYgaXMKK2Fsd2F5cyBpbml0aWFsaXplZCwgYnV0IEdOVSBDQyBkb2Vzbid0IGtub3cgdGhpcy4gIEhlcmUgaXMKK2Fub3RoZXIgY29tbW9uIGNhc2U6CisuU3AKKy5uZgoreworICBpbnQgc2F2ZV95OworICBpZiAoY2hhbmdlX3kpIHNhdmVfeSA9IHksIHkgPSBuZXdfeTsKKyAgLlx8Llx8LgorICBpZiAoY2hhbmdlX3kpIHkgPSBzYXZlX3k7Cit9CisuU3AKKy5maQorVGhpcyBoYXMgbm8gYnVnIGJlY2F1c2UgXGMKKy5CIHNhdmVfeVxjCitcJiBpcyB1c2VkIG9ubHkgaWYgaXQgaXMgc2V0LgorLlNwCitTb21lIHNwdXJpb3VzIHdhcm5pbmdzIGNhbiBiZSBhdm9pZGVkIGlmIHlvdSBkZWNsYXJlIGFzCisuQiB2b2xhdGlsZVxjCitcJiBhbGwgdGhlIGZ1bmN0aW9ucyB5b3UgdXNlIHRoYXQgbmV2ZXIgcmV0dXJuLgorLlRQCisuQiBcLVdwYXJlbnRoZXNlcworV2FybiBpZiBwYXJlbnRoZXNlcyBhcmUgb21pdHRlZCBpbiBjZXJ0YWluIGNvbnRleHRzLgorLlRQCisuQiBcLVd0ZW1wbGF0ZVwtZGVidWdnaW5nCitXaGVuIHVzaW5nIHRlbXBsYXRlcyBpbiBhIEMrKyBwcm9ncmFtLCB3YXJuIGlmIGRlYnVnZ2luZyBpcyBub3QgeWV0CitmdWxseSBhdmFpbGFibGUgKEMrKyBvbmx5KS4KKy5UUAorLkIgXC1XYWxsCitBbGwgb2YgdGhlIGFib3ZlIGBcfFxjCisuQiBcLVdcYworXCZcfCcgb3B0aW9ucyBjb21iaW5lZC4gIFRoZXNlIGFyZSBhbGwgdGhlCitvcHRpb25zIHdoaWNoIHBlcnRhaW4gdG8gdXNhZ2UgdGhhdCB3ZSByZWNvbW1lbmQgYXZvaWRpbmcgYW5kIHRoYXQgd2UKK2JlbGlldmUgaXMgZWFzeSB0byBhdm9pZCwgZXZlbiBpbiBjb25qdW5jdGlvbiB3aXRoIG1hY3Jvcy4KKy5QUAorVGhlIHJlbWFpbmluZyBgXHxcYworLkIgXC1XLlx8Llx8LlxjCitcJlx8JyBvcHRpb25zIGFyZSBub3QgaW1wbGllZCBieSBgXHxcYworLkIgXC1XYWxsXGMKK1wmXHwnCitiZWNhdXNlIHRoZXkgd2FybiBhYm91dCBjb25zdHJ1Y3Rpb25zIHRoYXQgd2UgY29uc2lkZXIgcmVhc29uYWJsZSB0bwordXNlLCBvbiBvY2Nhc2lvbiwgaW4gY2xlYW4gcHJvZ3JhbXMuCisuVFAKKy5CIFwtV3RyYWRpdGlvbmFsCitXYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK0FOU0kgQy4KKy5UUAorXCBcIFwgXChidQorTWFjcm8gYXJndW1lbnRzIG9jY3VycmluZyB3aXRoaW4gc3RyaW5nIGNvbnN0YW50cyBpbiB0aGUgbWFjcm8gYm9keS4KK1RoZXNlIHdvdWxkIHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGluIHRyYWRpdGlvbmFsIEMsIGJ1dCBhcmUgcGFydCBvZgordGhlIGNvbnN0YW50IGluIEFOU0kgQy4KKy5UUAorXCBcIFwgXChidQorQSBmdW5jdGlvbiBkZWNsYXJlZCBleHRlcm5hbCBpbiBvbmUgYmxvY2sgYW5kIHRoZW4gdXNlZCBhZnRlciB0aGUgZW5kIG9mCit0aGUgYmxvY2suCisuVFAKK1wgXCBcIFwoYnUKK0EgXGMKKy5CIHN3aXRjaFxjCitcJiBzdGF0ZW1lbnQgaGFzIGFuIG9wZXJhbmQgb2YgdHlwZSBcYworLkIgbG9uZ1xjCitcJi4KKy5QUAorLlRQCisuQiBcLVdzaGFkb3cKK1dhcm4gd2hlbmV2ZXIgYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIgbG9jYWwgdmFyaWFibGUuCisuVFAKKy5CSSAiXC1XaWRcLWNsYXNoXC0iICJsZW4iCitXYXJuIHdoZW5ldmVyIHR3byBkaXN0aW5jdCBpZGVudGlmaWVycyBtYXRjaCBpbiB0aGUgZmlyc3QgXGMKKy5JIGxlbgorY2hhcmFjdGVycy4gIFRoaXMgbWF5IGhlbHAgeW91IHByZXBhcmUgYSBwcm9ncmFtIHRoYXQgd2lsbCBjb21waWxlCit3aXRoIGNlcnRhaW4gb2Jzb2xldGUsIGJyYWluLWRhbWFnZWQgY29tcGlsZXJzLgorLlRQCisuQiBcLVdwb2ludGVyXC1hcml0aAorV2FybiBhYm91dCBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gdGhlIFwqKGxxc2l6ZSBvZlwqKHJxIGEgZnVuY3Rpb24gdHlwZSBvcgorb2YgXGMKKy5CIHZvaWRcYworXCYuICBHTlUgQyBhc3NpZ25zIHRoZXNlIHR5cGVzIGEgc2l6ZSBvZiAxLCBmb3IKK2NvbnZlbmllbmNlIGluIGNhbGN1bGF0aW9ucyB3aXRoIFxjCisuQiB2b2lkIFwoKipcYworXCYgcG9pbnRlcnMgYW5kIHBvaW50ZXJzCit0byBmdW5jdGlvbnMuCisuVFAKKy5CIFwtV2Nhc3RcLXF1YWwKK1dhcm4gd2hlbmV2ZXIgYSBwb2ludGVyIGlzIGNhc3Qgc28gYXMgdG8gcmVtb3ZlIGEgdHlwZSBxdWFsaWZpZXIgZnJvbQordGhlIHRhcmdldCB0eXBlLiAgRm9yIGV4YW1wbGUsIHdhcm4gaWYgYSBcYworLkIgY29uc3QgY2hhciBcKCoqXGMKK1wmIGlzIGNhc3QKK3RvIGFuIG9yZGluYXJ5IFxjCisuQiBjaGFyIFwoKipcYworXCYuCisuVFAKKy5CIFwtV2Nhc3RcLWFsaWduCitXYXJuIHdoZW5ldmVyIGEgcG9pbnRlciBpcyBjYXN0IHN1Y2ggdGhhdCB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRoZQordGFyZ2V0IGlzIGluY3JlYXNlZC4gIEZvciBleGFtcGxlLCB3YXJuIGlmIGEgXGMKKy5CIGNoYXIgXCgqKlxjCitcJiBpcyBjYXN0IHRvCithbiBcYworLkIgaW50IFwoKipcYworXCYgb24gbWFjaGluZXMgd2hlcmUgaW50ZWdlcnMgY2FuIG9ubHkgYmUgYWNjZXNzZWQgYXQKK3R3by0gb3IgZm91ci1ieXRlIGJvdW5kYXJpZXMuCisuVFAKKy5CIFwtV3dyaXRlXC1zdHJpbmdzCitHaXZlIHN0cmluZyBjb25zdGFudHMgdGhlIHR5cGUgXGMKKy5CIGNvbnN0IGNoYXJbXGMKKy5JIGxlbmd0aFxjCisuQiBdXGMKK1wmIHNvIHRoYXQKK2NvcHlpbmcgdGhlIGFkZHJlc3Mgb2Ygb25lIGludG8gYSBub24tXGMKKy5CIGNvbnN0XGMKK1wmIFxjCisuQiBjaGFyIFwoKioKK3BvaW50ZXIgd2lsbCBnZXQgYSB3YXJuaW5nLiAgVGhlc2Ugd2FybmluZ3Mgd2lsbCBoZWxwIHlvdSBmaW5kIGF0Citjb21waWxlIHRpbWUgY29kZSB0aGF0IGNhbiB0cnkgdG8gd3JpdGUgaW50byBhIHN0cmluZyBjb25zdGFudCwgYnV0Citvbmx5IGlmIHlvdSBoYXZlIGJlZW4gdmVyeSBjYXJlZnVsIGFib3V0IHVzaW5nIFxjCisuQiBjb25zdFxjCitcJiBpbgorZGVjbGFyYXRpb25zIGFuZCBwcm90b3R5cGVzLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIGp1c3QgYmUgYSBudWlzYW5jZTsKK3RoaXMgaXMgd2h5IHdlIGRpZCBub3QgbWFrZSBgXHxcYworLkIgXC1XYWxsXGMKK1wmXHwnIHJlcXVlc3QgdGhlc2Ugd2FybmluZ3MuCisuVFAKKy5CIFwtV2NvbnZlcnNpb24KK1dhcm4gaWYgYSBwcm90b3R5cGUgY2F1c2VzIGEgdHlwZSBjb252ZXJzaW9uIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gd2hhdAord291bGQgaGFwcGVuIHRvIHRoZSBzYW1lIGFyZ3VtZW50IGluIHRoZSBhYnNlbmNlIG9mIGEgcHJvdG90eXBlLiAgVGhpcworaW5jbHVkZXMgY29udmVyc2lvbnMgb2YgZml4ZWQgcG9pbnQgdG8gZmxvYXRpbmcgYW5kIHZpY2UgdmVyc2EsIGFuZAorY29udmVyc2lvbnMgY2hhbmdpbmcgdGhlIHdpZHRoIG9yIHNpZ25lZG5lc3Mgb2YgYSBmaXhlZCBwb2ludCBhcmd1bWVudAorZXhjZXB0IHdoZW4gdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgcHJvbW90aW9uLgorLlRQCisuQiBcLVdhZ2dyZWdhdGVcLXJldHVybgorV2FybiBpZiBhbnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHN0cnVjdHVyZXMgb3IgdW5pb25zIGFyZSBkZWZpbmVkIG9yCitjYWxsZWQuICAoSW4gbGFuZ3VhZ2VzIHdoZXJlIHlvdSBjYW4gcmV0dXJuIGFuIGFycmF5LCB0aGlzIGFsc28gZWxpY2l0cworYSB3YXJuaW5nLikKKy5UUAorLkIgXC1Xc3RyaWN0XC1wcm90b3R5cGVzCitXYXJuIGlmIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQgb3IgZGVmaW5lZCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlCithcmd1bWVudCB0eXBlcy4gIChBbiBvbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBwZXJtaXR0ZWQgd2l0aG91dAorYSB3YXJuaW5nIGlmIHByZWNlZGVkIGJ5IGEgZGVjbGFyYXRpb24gd2hpY2ggc3BlY2lmaWVzIHRoZSBhcmd1bWVudAordHlwZXMuKQorLlRQCisuQiBcLVdtaXNzaW5nXC1wcm90b3R5cGVzCitXYXJuIGlmIGEgZ2xvYmFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aG91dCBhIHByZXZpb3VzIHByb3RvdHlwZQorZGVjbGFyYXRpb24uICBUaGlzIHdhcm5pbmcgaXMgaXNzdWVkIGV2ZW4gaWYgdGhlIGRlZmluaXRpb24gaXRzZWxmCitwcm92aWRlcyBhIHByb3RvdHlwZS4gIFRoZSBhaW0gaXMgdG8gZGV0ZWN0IGdsb2JhbCBmdW5jdGlvbnMgdGhhdCBmYWlsCit0byBiZSBkZWNsYXJlZCBpbiBoZWFkZXIgZmlsZXMuCisuVFAKKy5CIFwtV21pc3NpbmdcLWRlY2xhcmF0aW9ucworV2FybiBpZiBhIGdsb2JhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIHdpdGhvdXQgYSBwcmV2aW91cyBkZWNsYXJhdGlvbi4KK0RvIHNvIGV2ZW4gaWYgdGhlIGRlZmluaXRpb24gaXRzZWxmIHByb3ZpZGVzIGEgcHJvdG90eXBlLgorVXNlIHRoaXMgb3B0aW9uIHRvIGRldGVjdCBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBkZWNsYXJlZCBpbgoraGVhZGVyIGZpbGVzLgorLlRQCisuQiBcLVdyZWR1bmRhbnQtZGVjbHMKK1dhcm4gaWYgYW55dGhpbmcgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc2NvcGUsIGV2ZW4gaW4KK2Nhc2VzIHdoZXJlIG11bHRpcGxlIGRlY2xhcmF0aW9uIGlzIHZhbGlkIGFuZCBjaGFuZ2VzIG5vdGhpbmcuCisuVFAKKy5CIFwtV25lc3RlZC1leHRlcm5zCitXYXJuIGlmIGFuIFxjCisuQiBleHRlcm5cYworXCYgZGVjbGFyYXRpb24gaXMgZW5jb3VudGVyZWQgd2l0aGluIGFuIGZ1bmN0aW9uLgorLlRQCisuQiBcLVdlbnVtXC1jbGFzaAorV2FybiBhYm91dCBjb252ZXJzaW9uIGJldHdlZW4gZGlmZmVyZW50IGVudW1lcmF0aW9uIHR5cGVzIChDKysgb25seSkuCisuVFAKKy5CIFwtV292ZXJsb2FkZWRcLXZpcnR1YWwKKyhDKysgb25seS4pCitJbiBhIGRlcml2ZWQgY2xhc3MsIHRoZSBkZWZpbml0aW9ucyBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyBtdXN0IG1hdGNoCit0aGUgdHlwZSBzaWduYXR1cmUgb2YgYSB2aXJ0dWFsIGZ1bmN0aW9uIGRlY2xhcmVkIGluIHRoZSBiYXNlIGNsYXNzLgorVXNlIHRoaXMgb3B0aW9uIHRvIHJlcXVlc3Qgd2FybmluZ3Mgd2hlbiBhIGRlcml2ZWQgY2xhc3MgZGVjbGFyZXMgYQorZnVuY3Rpb24gdGhhdCBtYXkgYmUgYW4gZXJyb25lb3VzIGF0dGVtcHQgdG8gZGVmaW5lIGEgdmlydHVhbAorZnVuY3Rpb246IHRoYXQgaXMsIHdhcm4gd2hlbiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhCit2aXJ0dWFsIGZ1bmN0aW9uIGluIHRoZSBiYXNlIGNsYXNzLCBidXQgd2l0aCBhIHR5cGUgc2lnbmF0dXJlIHRoYXQKK2RvZXNuJ3QgbWF0Y2ggYW55IHZpcnR1YWwgZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgY2xhc3MuCisuVFAKKy5CIFwtV2lubGluZQorV2FybiBpZiBhIGZ1bmN0aW9uIGNhbiBub3QgYmUgaW5saW5lZCwgYW5kIGVpdGhlciBpdCB3YXMgZGVjbGFyZWQgYXMgaW5saW5lLAorb3IgZWxzZSB0aGUKKy5CIFwtZmlubGluZVwtZnVuY3Rpb25zCitvcHRpb24gd2FzIGdpdmVuLgorLlRQCisuQiBcLVdlcnJvcgorVHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzOyBhYm9ydCBjb21waWxhdGlvbiBhZnRlciBhbnkgd2FybmluZy4KKy5TSCBERUJVR0dJTkcgT1BUSU9OUworR05VIENDIGhhcyB2YXJpb3VzIHNwZWNpYWwgb3B0aW9ucyB0aGF0IGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcKK2VpdGhlciB5b3VyIHByb2dyYW0gb3IgR0NDOgorLlRQCisuQiBcLWcKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlIGZvcm1hdAorKHN0YWJzLCBDT0ZGLCBYQ09GRiwgb3IgRFdBUkYpLiAgR0RCIGNhbiB3b3JrIHdpdGggdGhpcyBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uLgorLlNwCitPbiBtb3N0IHN5c3RlbXMgdGhhdCB1c2Ugc3RhYnMgZm9ybWF0LCBgXHxcYworLkIgXC1nXGMKK1wmXHwnIGVuYWJsZXMgdXNlIG9mIGV4dHJhCitkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCBvbmx5IEdEQiBjYW4gdXNlOyB0aGlzIGV4dHJhIGluZm9ybWF0aW9uCittYWtlcyBkZWJ1Z2dpbmcgd29yayBiZXR0ZXIgaW4gR0RCIGJ1dCB3aWxsIHByb2JhYmx5IG1ha2Ugb3RoZXIgZGVidWdnZXJzCitjcmFzaCBvcgorcmVmdXNlIHRvIHJlYWQgdGhlIHByb2dyYW0uICBJZiB5b3Ugd2FudCB0byBjb250cm9sIGZvciBjZXJ0YWluIHdoZXRoZXIKK3RvIGdlbmVyYXRlIHRoZSBleHRyYSBpbmZvcm1hdGlvbiwgdXNlIGBcfFxjCisuQiBcLWdzdGFicytcYworXCZcfCcsIGBcfFxjCisuQiBcLWdzdGFic1xjCitcJlx8JywKK2BcfFxjCisuQiBcLWd4Y29mZitcYworXCZcfCcsIGBcfFxjCisuQiBcLWd4Y29mZlxjCitcJlx8JywgYFx8XGMKKy5CIFwtZ2R3YXJmK1xjCitcJlx8Jywgb3IgYFx8XGMKKy5CIFwtZ2R3YXJmXGMKK1wmXHwnCisoc2VlIGJlbG93KS4KKy5TcAorVW5saWtlIG1vc3Qgb3RoZXIgQyBjb21waWxlcnMsIEdOVSBDQyBhbGxvd3MgeW91IHRvIHVzZSBgXHxcYworLkIgXC1nXGMKK1wmXHwnIHdpdGgKK2BcfFxjCisuQiBcLU9cYworXCZcfCcuICBUaGUgc2hvcnRjdXRzIHRha2VuIGJ5IG9wdGltaXplZCBjb2RlIG1heSBvY2Nhc2lvbmFsbHkKK3Byb2R1Y2Ugc3VycHJpc2luZyByZXN1bHRzOiBzb21lIHZhcmlhYmxlcyB5b3UgZGVjbGFyZWQgbWF5IG5vdCBleGlzdAorYXQgYWxsOyBmbG93IG9mIGNvbnRyb2wgbWF5IGJyaWVmbHkgbW92ZSB3aGVyZSB5b3UgZGlkIG5vdCBleHBlY3QgaXQ7Citzb21lIHN0YXRlbWVudHMgbWF5IG5vdCBiZSBleGVjdXRlZCBiZWNhdXNlIHRoZXkgY29tcHV0ZSBjb25zdGFudAorcmVzdWx0cyBvciB0aGVpciB2YWx1ZXMgd2VyZSBhbHJlYWR5IGF0IGhhbmQ7IHNvbWUgc3RhdGVtZW50cyBtYXkKK2V4ZWN1dGUgaW4gZGlmZmVyZW50IHBsYWNlcyBiZWNhdXNlIHRoZXkgd2VyZSBtb3ZlZCBvdXQgb2YgbG9vcHMuCisuU3AKK05ldmVydGhlbGVzcyBpdCBwcm92ZXMgcG9zc2libGUgdG8gZGVidWcgb3B0aW1pemVkIG91dHB1dC4gIFRoaXMgbWFrZXMKK2l0IHJlYXNvbmFibGUgdG8gdXNlIHRoZSBvcHRpbWl6ZXIgZm9yIHByb2dyYW1zIHRoYXQgbWlnaHQgaGF2ZSBidWdzLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVzZWZ1bCB3aGVuIEdOVSBDQyBpcyBnZW5lcmF0ZWQgd2l0aCB0aGUKK2NhcGFiaWxpdHkgZm9yIG1vcmUgdGhhbiBvbmUgZGVidWdnaW5nIGZvcm1hdC4KKy5UUAorLkIgXC1nZ2RiCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgbmF0aXZlIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLAoraW5jbHVkaW5nIEdEQiBleHRlbnNpb25zIGlmIGF0IGFsbCBwb3NzaWJsZS4KKy5UUAorLkIgXC1nc3RhYnMKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHN0YWJzIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLAord2l0aG91dCBHREIgZXh0ZW5zaW9ucy4gIFRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IERCWCBvbiBtb3N0IEJTRAorc3lzdGVtcy4KKy5UUAorLkIgXC1nc3RhYnMrCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBzdGFicyBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKK3VzaW5nIEdOVSBleHRlbnNpb25zIHVuZGVyc3Rvb2Qgb25seSBieSB0aGUgR05VIGRlYnVnZ2VyIChHREIpLiAgVGhlCit1c2Ugb2YgdGhlc2UgZXh0ZW5zaW9ucyBpcyBsaWtlbHkgdG8gbWFrZSBvdGhlciBkZWJ1Z2dlcnMgY3Jhc2ggb3IKK3JlZnVzZSB0byByZWFkIHRoZSBwcm9ncmFtLgorLlRQCisuQiBcLWdjb2ZmCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBDT0ZGIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLgorVGhpcyBpcyB0aGUgZm9ybWF0IHVzZWQgYnkgU0RCIG9uIG1vc3QgU3lzdGVtIFYgc3lzdGVtcyBwcmlvciB0bworU3lzdGVtIFYgUmVsZWFzZSA0LgorLlRQCisuQiBcLWd4Y29mZgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gWENPRkYgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCkuCitUaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSB0aGUgREJYIGRlYnVnZ2VyIG9uIElCTSBSUy82MDAwIHN5c3RlbXMuCisuVFAKKy5CIFwtZ3hjb2ZmKworUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gWENPRkYgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCit1c2luZyBHTlUgZXh0ZW5zaW9ucyB1bmRlcnN0b29kIG9ubHkgYnkgdGhlIEdOVSBkZWJ1Z2dlciAoR0RCKS4gIFRoZQordXNlIG9mIHRoZXNlIGV4dGVuc2lvbnMgaXMgbGlrZWx5IHRvIG1ha2Ugb3RoZXIgZGVidWdnZXJzIGNyYXNoIG9yCityZWZ1c2UgdG8gcmVhZCB0aGUgcHJvZ3JhbS4KKy5UUAorLkIgXC1nZHdhcmYKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIERXQVJGIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLgorVGhpcyBpcyB0aGUgZm9ybWF0IHVzZWQgYnkgU0RCIG9uIG1vc3QgU3lzdGVtIFYgUmVsZWFzZSA0IHN5c3RlbXMuCisuVFAKKy5CIFwtZ2R3YXJmKworUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gRFdBUkYgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCit1c2luZyBHTlUgZXh0ZW5zaW9ucyB1bmRlcnN0b29kIG9ubHkgYnkgdGhlIEdOVSBkZWJ1Z2dlciAoR0RCKS4gIFRoZQordXNlIG9mIHRoZXNlIGV4dGVuc2lvbnMgaXMgbGlrZWx5IHRvIG1ha2Ugb3RoZXIgZGVidWdnZXJzIGNyYXNoIG9yCityZWZ1c2UgdG8gcmVhZCB0aGUgcHJvZ3JhbS4KKy5QUAorLkJJICJcLWciICJsZXZlbCIKKy5icgorLkJJICJcLWdnZGIiICJsZXZlbCIKKy5icgorLkJJICJcLWdzdGFicyIgImxldmVsIgorLmJyCisuQkkgIlwtZ2NvZmYiICJsZXZlbCIKKy5CSSAiXC1neGNvZmYiICJsZXZlbCIKKy5UUAorLkJJICJcLWdkd2FyZiIgImxldmVsIgorUmVxdWVzdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kIGFsc28gdXNlIFxjCisuSSBsZXZlbFxjCitcJiB0byBzcGVjaWZ5IGhvdworbXVjaCBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGxldmVsIGlzIDIuCisuU3AKK0xldmVsIDEgcHJvZHVjZXMgbWluaW1hbCBpbmZvcm1hdGlvbiwgZW5vdWdoIGZvciBtYWtpbmcgYmFja3RyYWNlcyBpbgorcGFydHMgb2YgdGhlIHByb2dyYW0gdGhhdCB5b3UgZG9uJ3QgcGxhbiB0byBkZWJ1Zy4gIFRoaXMgaW5jbHVkZXMKK2Rlc2NyaXB0aW9ucyBvZiBmdW5jdGlvbnMgYW5kIGV4dGVybmFsIHZhcmlhYmxlcywgYnV0IG5vIGluZm9ybWF0aW9uCithYm91dCBsb2NhbCB2YXJpYWJsZXMgYW5kIG5vIGxpbmUgbnVtYmVycy4KKy5TcAorTGV2ZWwgMyBpbmNsdWRlcyBleHRyYSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBhbGwgdGhlIG1hY3JvIGRlZmluaXRpb25zCitwcmVzZW50IGluIHRoZSBwcm9ncmFtLiAgU29tZSBkZWJ1Z2dlcnMgc3VwcG9ydCBtYWNybyBleHBhbnNpb24gd2hlbgoreW91IHVzZSBgXHxcYworLkIgXC1nM1xjCitcJlx8Jy4KKy5UUAorLkIgXC1wCitHZW5lcmF0ZSBleHRyYSBjb2RlIHRvIHdyaXRlIHByb2ZpbGUgaW5mb3JtYXRpb24gc3VpdGFibGUgZm9yIHRoZQorYW5hbHlzaXMgcHJvZ3JhbSBcYworLkIgcHJvZlxjCitcJi4KKy5UUAorLkIgXC1wZworR2VuZXJhdGUgZXh0cmEgY29kZSB0byB3cml0ZSBwcm9maWxlIGluZm9ybWF0aW9uIHN1aXRhYmxlIGZvciB0aGUKK2FuYWx5c2lzIHByb2dyYW0gXGMKKy5CIGdwcm9mXGMKK1wmLgorLlRQCisuQiBcLWEKK0dlbmVyYXRlIGV4dHJhIGNvZGUgdG8gd3JpdGUgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgYmFzaWMgYmxvY2tzLAord2hpY2ggd2lsbCByZWNvcmQgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIGJhc2ljIGJsb2NrIGlzIGV4ZWN1dGVkLgorVGhpcyBkYXRhIGNvdWxkIGJlIGFuYWx5emVkIGJ5IGEgcHJvZ3JhbSBsaWtlIFxjCisuQiB0Y292XGMKK1wmLiAgTm90ZSwKK2hvd2V2ZXIsIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBpcyBub3Qgd2hhdCBcYworLkIgdGNvdlxjCitcJiBleHBlY3RzLgorRXZlbnR1YWxseSBHTlUgXGMKKy5CIGdwcm9mXGMKK1wmIHNob3VsZCBiZSBleHRlbmRlZCB0byBwcm9jZXNzIHRoaXMgZGF0YS4KKy5UUAorLkIgXC1heAorR2VuZXJhdGUgZXh0cmEgY29kZSB0byByZWFkIGJhc2ljIGJsb2NrIHByb2ZpbGluZyBwYXJhbWV0ZXJzIGZyb20gCitmaWxlIGBiYi5pbicgYW5kIHdyaXRlIHByb2ZpbGluZyByZXN1bHRzIHRvIGZpbGUgYGJiLm91dCcuCitgYmIuaW4nIGNvbnRhaW5zIGEgbGlzdCBvZiBmdW5jdGlvbnMuIFdoZW5ldmVyIGEgZnVuY3Rpb24gb24gdGhlIGxpc3QKK2lzIGVudGVyZWQsIHByb2ZpbGluZyBpcyB0dXJuZWQgb24uIFdoZW4gdGhlIG91dG1vc3QgZnVuY3Rpb24gaXMgbGVmdCwKK3Byb2ZpbGluZyBpcyB0dXJuZWQgb2ZmLiBJZiBhIGZ1bmN0aW9uIG5hbWUgaXMgcHJlZml4ZWQgd2l0aCBgLScKK3RoZSBmdW5jdGlvbiBpcyBleGNsdWRlZCBmcm9tIHByb2ZpbGluZy4gSWYgYSBmdW5jdGlvbiBuYW1lIGlzIG5vdAordW5pcXVlIGl0IGNhbiBiZSBkaXNhbWJpZ3VhdGVkIGJ5IHdyaXRpbmcKK2AvcGF0aC9maWxlbmFtZS5kOmZ1bmN0aW9ubmFtZScuIGBiYi5vdXQnIHdpbGwgbGlzdCBzb21lIGF2YWlsYWJsZQorZmlsZW5hbWVzLgorRm91ciBmdW5jdGlvbiBuYW1lcyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nOgorYF9fYmJfanVtcHNfXycgd2lsbCBjYXVzZSBqdW1wIGZyZXF1ZW5jaWVzIHRvIGJlIHdyaXR0ZW4gdG8gYGJiLm91dCcuCitgX19iYl90cmFjZV9fJyB3aWxsIGNhdXNlIHRoZSBzZXF1ZW5jZSBvZiBiYXNpYyBibG9ja3MgdG8gYmUgcGlwZWQgCitpbnRvIGBnemlwJyBhbmQgd3JpdHRlbiB0byBmaWxlIGBiYnRyYWNlLmd6Jy4KK2BfX2JiX2hpZGVjYWxsX18nIHdpbGwgY2F1c2UgY2FsbCBpbnN0cnVjdGlvbnMgdG8gYmUgZXhjbHVkZWQgZnJvbQordGhlIHRyYWNlLgorYF9fYmJfc2hvd3JldF9fJyB3aWxsIGNhdXNlIHJldHVybiBpbnN0cnVjdGlvbnMgdG8gYmUgaW5jbHVkZWQgaW4KK3RoZSB0cmFjZS4KKy5UUAorLkJJICJcLWQiICJsZXR0ZXJzIgorU2F5cyB0byBtYWtlIGRlYnVnZ2luZyBkdW1wcyBkdXJpbmcgY29tcGlsYXRpb24gYXQgdGltZXMgc3BlY2lmaWVkIGJ5CisuSSBsZXR0ZXJzXGMKK1wmLiAgVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyLiAgVGhlIGZpbGUgbmFtZXMKK2ZvciBtb3N0IG9mIHRoZSBkdW1wcyBhcmUgbWFkZSBieSBhcHBlbmRpbmcgYSB3b3JkIHRvIHRoZSBzb3VyY2UgZmlsZQorbmFtZSAoZS5nLiAgYFx8XGMKKy5CIGZvby5jLnJ0bFxjCitcJlx8JyBvciBgXHxcYworLkIgZm9vLmMuanVtcFxjCitcJlx8JykuCisuVFAKKy5CIFwtZE0KK0R1bXAgYWxsIG1hY3JvIGRlZmluaXRpb25zLCBhdCB0aGUgZW5kIG9mIHByZXByb2Nlc3NpbmcsIGFuZCB3cml0ZSBubworb3V0cHV0LgorLlRQCisuQiBcLWROCitEdW1wIGFsbCBtYWNybyBuYW1lcywgYXQgdGhlIGVuZCBvZiBwcmVwcm9jZXNzaW5nLgorLlRQCisuQiBcLWRECitEdW1wIGFsbCBtYWNybyBkZWZpbml0aW9ucywgYXQgdGhlIGVuZCBvZiBwcmVwcm9jZXNzaW5nLCBpbiBhZGRpdGlvbiB0bworbm9ybWFsIG91dHB1dC4KKy5UUAorLkIgXC1keQorRHVtcCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZHVyaW5nIHBhcnNpbmcsIHRvIHN0YW5kYXJkIGVycm9yLgorLlRQCisuQiBcLWRyCitEdW1wIGFmdGVyIFJUTCBnZW5lcmF0aW9uLCB0byBgXHxcYworLkkgZmlsZVxjCisuQiBcJi5ydGxcYworXCZcfCcuCisuVFAKKy5CIFwtZHgKK0p1c3QgZ2VuZXJhdGUgUlRMIGZvciBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgY29tcGlsaW5nIGl0LiAgVXN1YWxseSB1c2VkCit3aXRoIGBcfFxjCisuQiByXGMKK1wmXHwnLgorLlRQCisuQiBcLWRqCitEdW1wIGFmdGVyIGZpcnN0IGp1bXAgb3B0aW1pemF0aW9uLCB0byBgXHxcYworLkkgZmlsZVxjCisuQiBcJi5qdW1wXGMKK1wmXHwnLgorLlRQCisuQiBcLWRzCitEdW1wIGFmdGVyIENTRSAoaW5jbHVkaW5nIHRoZSBqdW1wIG9wdGltaXphdGlvbiB0aGF0IHNvbWV0aW1lcworZm9sbG93cyBDU0UpLCB0byBgXHxcYworLkkgZmlsZVxjCisuQiBcJi5jc2VcYworXCZcfCcuCisuVFAKKy5CIFwtZEwKK0R1bXAgYWZ0ZXIgbG9vcCBvcHRpbWl6YXRpb24sIHRvIGBcfFxjCisuSSBmaWxlXGMKKy5CIFwmLmxvb3BcYworXCZcfCcuCisuVFAKKy5CIFwtZHQKK0R1bXAgYWZ0ZXIgdGhlIHNlY29uZCBDU0UgcGFzcyAoaW5jbHVkaW5nIHRoZSBqdW1wIG9wdGltaXphdGlvbiB0aGF0Citzb21ldGltZXMgZm9sbG93cyBDU0UpLCB0byBgXHxcYworLkkgZmlsZVxjCisuQiBcJi5jc2UyXGMKK1wmXHwnLgorLlRQCisuQiBcLWRmCitEdW1wIGFmdGVyIGZsb3cgYW5hbHlzaXMsIHRvIGBcfFxjCisuSSBmaWxlXGMKKy5CIFwmLmZsb3dcYworXCZcfCcuCisuVFAKKy5CIFwtZGMKK0R1bXAgYWZ0ZXIgaW5zdHJ1Y3Rpb24gY29tYmluYXRpb24sIHRvIGBcfFxjCisuSSBmaWxlXGMKKy5CIFwmLmNvbWJpbmVcYworXCZcfCcuCisuVFAKKy5CIFwtZFMKK0R1bXAgYWZ0ZXIgdGhlIGZpcnN0IGluc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFzcywgdG8KK2BcfFxjCisuSSBmaWxlXGMKKy5CIFwmLnNjaGVkXGMKK1wmXHwnLgorLlRQCisuQiBcLWRsCitEdW1wIGFmdGVyIGxvY2FsIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHRvIGBcfFxjCisuSSBmaWxlXGMKKy5CIFwmLmxyZWdcYworXCZcfCcuCisuVFAKKy5CIFwtZGcKK0R1bXAgYWZ0ZXIgZ2xvYmFsIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHRvIGBcfFxjCisuSSBmaWxlXGMKKy5CIFwmLmdyZWdcYworXCZcfCcuCisuVFAKKy5CIFwtZFIKK0R1bXAgYWZ0ZXIgdGhlIHNlY29uZCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhc3MsIHRvCitgXHxcYworLkkgZmlsZVxjCisuQiBcJi5zY2hlZDJcYworXCZcfCcuCisuVFAKKy5CIFwtZEoKK0R1bXAgYWZ0ZXIgbGFzdCBqdW1wIG9wdGltaXphdGlvbiwgdG8gYFx8XGMKKy5JIGZpbGVcYworLkIgXCYuanVtcDJcYworXCZcfCcuCisuVFAKKy5CIFwtZGQKK0R1bXAgYWZ0ZXIgZGVsYXllZCBicmFuY2ggc2NoZWR1bGluZywgdG8gYFx8XGMKKy5JIGZpbGVcYworLkIgXCYuZGJyXGMKK1wmXHwnLgorLlRQCisuQiBcLWRrCitEdW1wIGFmdGVyIGNvbnZlcnNpb24gZnJvbSByZWdpc3RlcnMgdG8gc3RhY2ssIHRvIGBcfFxjCisuSSBmaWxlXGMKKy5CIFwmLnN0YWNrXGMKK1wmXHwnLgorLlRQCisuQiBcLWRhCitQcm9kdWNlIGFsbCB0aGUgZHVtcHMgbGlzdGVkIGFib3ZlLgorLlRQCisuQiBcLWRtCitQcmludCBzdGF0aXN0aWNzIG9uIG1lbW9yeSB1c2FnZSwgYXQgdGhlIGVuZCBvZiB0aGUgcnVuLCB0bworc3RhbmRhcmQgZXJyb3IuCisuVFAKKy5CIFwtZHAKK0Fubm90YXRlIHRoZSBhc3NlbWJsZXIgb3V0cHV0IHdpdGggYSBjb21tZW50IGluZGljYXRpbmcgd2hpY2gKK3BhdHRlcm4gYW5kIGFsdGVybmF0aXZlIHdhcyB1c2VkLgorLlRQCisuQiBcLWZwcmV0ZW5kXC1mbG9hdAorV2hlbiBydW5uaW5nIGEgY3Jvc3MtY29tcGlsZXIsIHByZXRlbmQgdGhhdCB0aGUgdGFyZ2V0IG1hY2hpbmUgdXNlcyB0aGUKK3NhbWUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGFzIHRoZSBob3N0IG1hY2hpbmUuICBUaGlzIGNhdXNlcyBpbmNvcnJlY3QKK291dHB1dCBvZiB0aGUgYWN0dWFsIGZsb2F0aW5nIGNvbnN0YW50cywgYnV0IHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24KK3NlcXVlbmNlIHdpbGwgcHJvYmFibHkgYmUgdGhlIHNhbWUgYXMgR05VIENDIHdvdWxkIG1ha2Ugd2hlbiBydW5uaW5nIG9uCit0aGUgdGFyZ2V0IG1hY2hpbmUuCisuVFAKKy5CIFwtc2F2ZVwtdGVtcHMKK1N0b3JlIHRoZSB1c3VhbCBcKihscXRlbXBvcmFyeVwqKHJxIGludGVybWVkaWF0ZSBmaWxlcyBwZXJtYW5lbnRseTsgcGxhY2UgdGhlbQoraW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBuYW1lIHRoZW0gYmFzZWQgb24gdGhlIHNvdXJjZSBmaWxlLiAgVGh1cywKK2NvbXBpbGluZyBgXHxcYworLkIgZm9vLmNcYworXCZcfCcgd2l0aCBgXHxcYworLkIgXC1jIFwtc2F2ZVwtdGVtcHNcYworXCZcfCcgd291bGQgcHJvZHVjZSBmaWxlcworYFx8XGMKKy5CIGZvby5jcHBcYworXCZcfCcgYW5kIGBcfFxjCisuQiBmb28uc1xjCitcJlx8JywgYXMgd2VsbCBhcyBgXHxcYworLkIgZm9vLm9cYworXCZcfCcuCisuVFAKKy5CSSAiXC1wcmludFwtZmlsZVwtbmFtZT0iICJsaWJyYXJ5IgorUHJpbnQgdGhlIGZ1bGwgYWJzb2x1dGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmaWxlIFx8XGMKKy5uaAorLkkgbGlicmFyeQorLmh5CitcJlx8IHRoYXQKK3dvdWxkIGJlIHVzZWQgd2hlbiBsaW5raW5nXChlbVwmYW5kIGRvIG5vdCBkbyBhbnl0aGluZyBlbHNlLiAgV2l0aCB0aGlzCitvcHRpb24sIEdOVSBDQyBkb2VzIG5vdCBjb21waWxlIG9yIGxpbmsgYW55dGhpbmc7IGl0IGp1c3QgcHJpbnRzIHRoZQorZmlsZSBuYW1lLgorLlRQCisuQiBcLXByaW50XC1saWJnY2NcLWZpbGVcLW5hbWUKK1NhbWUgYXMgYFx8XGMKKy5CIFwtcHJpbnRcLWZpbGVcLW5hbWU9bGliZ2NjLmFcYworXCZcfCcuCisuVFAKKy5CSSAiXC1wcmludFwtcHJvZ1wtbmFtZT0iICJwcm9ncmFtIgorTGlrZSBgXHxcYworLkIgXC1wcmludFwtZmlsZVwtbmFtZVxjCitcJlx8JywgYnV0IHNlYXJjaGVzIGZvciBhIHByb2dyYW0gc3VjaCBhcyBgXHxcYworY3BwXGMKK1wmXHwnLgorLlNIIE9QVElNSVpBVElPTiBPUFRJT05TCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgdmFyaW91cyBzb3J0cyBvZiBvcHRpbWl6YXRpb25zOgorLlRQCisuQiBcLU8KKy5UUAorLkIgXC1PMQorT3B0aW1pemUuICBPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIHRha2VzIHNvbWV3aGF0IG1vcmUgdGltZSwgYW5kIGEgbG90Cittb3JlIG1lbW9yeSBmb3IgYSBsYXJnZSBmdW5jdGlvbi4KKy5TcAorV2l0aG91dCBgXHxcYworLkIgXC1PXGMKK1wmXHwnLCB0aGUgY29tcGlsZXIncyBnb2FsIGlzIHRvIHJlZHVjZSB0aGUgY29zdCBvZgorY29tcGlsYXRpb24gYW5kIHRvIG1ha2UgZGVidWdnaW5nIHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlc3VsdHMuCitTdGF0ZW1lbnRzIGFyZSBpbmRlcGVuZGVudDogaWYgeW91IHN0b3AgdGhlIHByb2dyYW0gd2l0aCBhIGJyZWFrcG9pbnQKK2JldHdlZW4gc3RhdGVtZW50cywgeW91IGNhbiB0aGVuIGFzc2lnbiBhIG5ldyB2YWx1ZSB0byBhbnkgdmFyaWFibGUgb3IKK2NoYW5nZSB0aGUgcHJvZ3JhbSBjb3VudGVyIHRvIGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uIGFuZAorZ2V0IGV4YWN0bHkgdGhlIHJlc3VsdHMgeW91IHdvdWxkIGV4cGVjdCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KKy5TcAorV2l0aG91dCBgXHxcYworLkIgXC1PXGMKK1wmXHwnLCBvbmx5IHZhcmlhYmxlcyBkZWNsYXJlZCBcYworLkIgcmVnaXN0ZXJcYworXCYgYXJlCithbGxvY2F0ZWQgaW4gcmVnaXN0ZXJzLiAgVGhlIHJlc3VsdGluZyBjb21waWxlZCBjb2RlIGlzIGEgbGl0dGxlIHdvcnNlCit0aGFuIHByb2R1Y2VkIGJ5IFBDQyB3aXRob3V0IGBcfFxjCisuQiBcLU9cYworXCZcfCcuCisuU3AKK1dpdGggYFx8XGMKKy5CIFwtT1xjCitcJlx8JywgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIHJlZHVjZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbgordGltZS4KKy5TcAorV2hlbiB5b3Ugc3BlY2lmeSBgXHxcYworLkIgXC1PXGMKK1wmXHwnLCB0aGUgdHdvIG9wdGlvbnMgYFx8XGMKKy5CIFwtZnRocmVhZFwtanVtcHNcYworXCZcfCcgYW5kIGBcfFxjCisuQiBcLWZkZWZlclwtcG9wXGMKK1wmXHwnIGFyZSB0dXJuZWQgb24uICBPbiBtYWNoaW5lcyB0aGF0IGhhdmUgZGVsYXkgc2xvdHMsIHRoZSBgXHxcYworLkIgXC1mZGVsYXllZFwtYnJhbmNoXGMKK1wmXHwnIG9wdGlvbiBpcyB0dXJuZWQgb24uICBGb3IgdGhvc2UgbWFjaGluZXMgdGhhdCBjYW4gc3VwcG9ydCBkZWJ1Z2dpbmcgZXZlbgord2l0aG91dCBhIGZyYW1lIHBvaW50ZXIsIHRoZSBgXHxcYworLkIgXC1mb21pdFwtZnJhbWVcLXBvaW50ZXJcYworXCZcfCcgb3B0aW9uIGlzIHR1cm5lZCBvbi4gIE9uIHNvbWUgbWFjaGluZXMgb3RoZXIgZmxhZ3MgbWF5IGFsc28gYmUgdHVybmVkIG9uLgorLlRQCisuQiBcLU8yCitPcHRpbWl6ZSBldmVuIG1vcmUuICBOZWFybHkgYWxsIHN1cHBvcnRlZCBvcHRpbWl6YXRpb25zIHRoYXQgZG8gbm90CitpbnZvbHZlIGEgc3BhY2Utc3BlZWQgdHJhZGVvZmYgYXJlIHBlcmZvcm1lZC4gIExvb3AgdW5yb2xsaW5nIGFuZCBmdW5jdGlvbgoraW5saW5pbmcgYXJlIG5vdCBkb25lLCBmb3IgZXhhbXBsZS4gIEFzIGNvbXBhcmVkIHRvCisuQiBcLU9cYworXCYsCit0aGlzIG9wdGlvbiBpbmNyZWFzZXMgYm90aCBjb21waWxhdGlvbiB0aW1lIGFuZCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlCitnZW5lcmF0ZWQgY29kZS4KKy5UUAorLkIgXC1PMworT3B0aW1pemUgeWV0IG1vcmUuIFRoaXMgdHVybnMgb24gZXZlcnl0aGluZworLkIgXC1PMgorZG9lcywgYWxvbmcgd2l0aCBhbHNvIHR1cm5pbmcgb24KKy5CIFwtZmlubGluZVwtZnVuY3Rpb25zLgorLlRQCisuQiBcLU8wCitEbyBub3Qgb3B0aW1pemUuCisuU3AKK0lmIHlvdSB1c2UgbXVsdGlwbGUKKy5CIFwtTworb3B0aW9ucywgd2l0aCBvciB3aXRob3V0IGxldmVsIG51bWJlcnMsIHRoZSBsYXN0IHN1Y2ggb3B0aW9uIGlzIHRoZQorb25lIHRoYXQgaXMgZWZmZWN0aXZlLgorLlBQCitPcHRpb25zIG9mIHRoZSBmb3JtIGBcfFxjCisuQiBcLWZcYworLkkgZmxhZ1xjCitcJlxjCitcJlx8JyBzcGVjaWZ5IG1hY2hpbmUtaW5kZXBlbmRlbnQKK2ZsYWdzLiAgTW9zdCBmbGFncyBoYXZlIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zOyB0aGUgbmVnYXRpdmUKK2Zvcm0gb2YgYFx8XGMKKy5CIFwtZmZvb1xjCitcJlx8JyB3b3VsZCBiZSBgXHxcYworLkIgXC1mbm9cLWZvb1xjCitcJlx8Jy4gIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cworb25seSBvbmUgZm9ybVwoZW1cJnRoZSBvbmUgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0LgorWW91IGNhbiBmaWd1cmUgb3V0IHRoZSBvdGhlciBmb3JtIGJ5IGVpdGhlciByZW1vdmluZyBgXHxcYworLkIgbm9cLVxjCitcJlx8JyBvcgorYWRkaW5nIGl0LgorLlRQCisuQiBcLWZmbG9hdFwtc3RvcmUKK0RvIG5vdCBzdG9yZSBmbG9hdGluZyBwb2ludCB2YXJpYWJsZXMgaW4gcmVnaXN0ZXJzLiAgVGhpcworcHJldmVudHMgdW5kZXNpcmFibGUgZXhjZXNzIHByZWNpc2lvbiBvbiBtYWNoaW5lcyBzdWNoIGFzIHRoZQorNjgwMDAgd2hlcmUgdGhlIGZsb2F0aW5nIHJlZ2lzdGVycyAob2YgdGhlIDY4ODgxKSBrZWVwIG1vcmUKK3ByZWNpc2lvbiB0aGFuIGEgXGMKKy5CIGRvdWJsZVxjCitcJiBpcyBzdXBwb3NlZCB0byBoYXZlLgorLlNwCitGb3IgbW9zdCBwcm9ncmFtcywgdGhlIGV4Y2VzcyBwcmVjaXNpb24gZG9lcyBvbmx5IGdvb2QsIGJ1dCBhIGZldworcHJvZ3JhbXMgcmVseSBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIElFRUUgZmxvYXRpbmcgcG9pbnQuCitVc2UgYFx8XGMKKy5CIFwtZmZsb2F0XC1zdG9yZVxjCitcJlx8JyBmb3Igc3VjaCBwcm9ncmFtcy4KKy5UUAorLkIgXC1mbWVtb2l6ZVwtbG9va3VwcworLlRQCisuQiBcLWZzYXZlXC1tZW1vaXplZAorVXNlIGhldXJpc3RpY3MgdG8gY29tcGlsZSBmYXN0ZXIgKEMrKyBvbmx5KS4gIFRoZXNlIGhldXJpc3RpY3MgYXJlIG5vdAorZW5hYmxlZCBieSBkZWZhdWx0LCBzaW5jZSB0aGV5IGFyZSBvbmx5IGVmZmVjdGl2ZSBmb3IgY2VydGFpbiBpbnB1dAorZmlsZXMuICBPdGhlciBpbnB1dCBmaWxlcyBjb21waWxlIG1vcmUgc2xvd2x5LgorLlNwCitUaGUgZmlyc3QgdGltZSB0aGUgY29tcGlsZXIgbXVzdCBidWlsZCBhIGNhbGwgdG8gYSBtZW1iZXIgZnVuY3Rpb24gKG9yCityZWZlcmVuY2UgdG8gYSBkYXRhIG1lbWJlciksIGl0IG11c3QgKDEpIGRldGVybWluZSB3aGV0aGVyIHRoZSBjbGFzcworaW1wbGVtZW50cyBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoYXQgbmFtZTsgKDIpIHJlc29sdmUgd2hpY2ggbWVtYmVyCitmdW5jdGlvbiB0byBjYWxsICh3aGljaCBpbnZvbHZlcyBmaWd1cmluZyBvdXQgd2hhdCBzb3J0cyBvZiB0eXBlCitjb252ZXJzaW9ucyBuZWVkIHRvIGJlIG1hZGUpOyBhbmQgKDMpIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBtZW1iZXIKK2Z1bmN0aW9uIHRvIHRoZSBjYWxsZXIuICBBbGwgb2YgdGhpcyBhZGRzIHVwIHRvIHNsb3dlciBjb21waWxhdGlvbi4KK05vcm1hbGx5LCB0aGUgc2Vjb25kIHRpbWUgYSBjYWxsIGlzIG1hZGUgdG8gdGhhdCBtZW1iZXIgZnVuY3Rpb24gKG9yCityZWZlcmVuY2UgdG8gdGhhdCBkYXRhIG1lbWJlciksIGl0IG11c3QgZ28gdGhyb3VnaCB0aGUgc2FtZSBsZW5ndGh5Citwcm9jZXNzIGFnYWluLiAgVGhpcyBtZWFucyB0aGF0IGNvZGUgbGlrZSB0aGlzCisuU3AKK1wmICBjb3V0IDw8ICJUaGlzICIgPDwgcCA8PCAiIGhhcyAiIDw8IG4gPDwgIiBsZWdzLlxlbiI7CisuU3AKK21ha2VzIHNpeCBwYXNzZXMgdGhyb3VnaCBhbGwgdGhyZWUgc3RlcHMuICBCeSB1c2luZyBhIHNvZnR3YXJlIGNhY2hlLAorYSBcKihscWhpdFwqKHJxIHNpZ25pZmljYW50bHkgcmVkdWNlcyB0aGlzIGNvc3QuICBVbmZvcnR1bmF0ZWx5LCB1c2luZyB0aGUKK2NhY2hlIGludHJvZHVjZXMgYW5vdGhlciBsYXllciBvZiBtZWNoYW5pc21zIHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQsCithbmQgc28gaW5jdXJzIGl0cyBvd24gb3ZlcmhlYWQuICBgXHxcYworLkIgXC1mbWVtb2l6ZVwtbG9va3Vwc1xjCitcJlx8JyBlbmFibGVzCit0aGUgc29mdHdhcmUgY2FjaGUuCisuU3AKK0JlY2F1c2UgYWNjZXNzIHByaXZpbGVnZXMgKHZpc2liaWxpdHkpIHRvIG1lbWJlcnMgYW5kIG1lbWJlciBmdW5jdGlvbnMKK21heSBkaWZmZXIgZnJvbSBvbmUgZnVuY3Rpb24gY29udGV4dCB0byB0aGUgbmV4dCwKKy5CIGcrKworbWF5IG5lZWQgdG8gZmx1c2ggdGhlIGNhY2hlLiAgV2l0aCB0aGUgYFx8XGMKKy5CIFwtZm1lbW9pemVcLWxvb2t1cHNcYworXCZcfCcgZmxhZywgdGhlIGNhY2hlIGlzIGZsdXNoZWQgYWZ0ZXIgZXZlcnkKK2Z1bmN0aW9uIHRoYXQgaXMgY29tcGlsZWQuICBUaGUgYFx8XGMKK1wtZnNhdmVcLW1lbW9pemVkXGMKK1wmXHwnIGZsYWcgZW5hYmxlcyB0aGUgc2FtZSBzb2Z0d2FyZSBjYWNoZSwgYnV0IHdoZW4gdGhlIGNvbXBpbGVyCitkZXRlcm1pbmVzIHRoYXQgdGhlIGNvbnRleHQgb2YgdGhlIGxhc3QgZnVuY3Rpb24gY29tcGlsZWQgd291bGQgeWllbGQKK3RoZSBzYW1lIGFjY2VzcyBwcml2aWxlZ2VzIG9mIHRoZSBuZXh0IGZ1bmN0aW9uIHRvIGNvbXBpbGUsIGl0CitwcmVzZXJ2ZXMgdGhlIGNhY2hlLgorVGhpcyBpcyBtb3N0IGhlbHBmdWwgd2hlbiBkZWZpbmluZyBtYW55IG1lbWJlciBmdW5jdGlvbnMgZm9yIHRoZSBzYW1lCitjbGFzczogd2l0aCB0aGUgZXhjZXB0aW9uIG9mIG1lbWJlciBmdW5jdGlvbnMgd2hpY2ggYXJlIGZyaWVuZHMgb2YKK290aGVyIGNsYXNzZXMsIGVhY2ggbWVtYmVyIGZ1bmN0aW9uIGhhcyBleGFjdGx5IHRoZSBzYW1lIGFjY2VzcworcHJpdmlsZWdlcyBhcyBldmVyeSBvdGhlciwgYW5kIHRoZSBjYWNoZSBuZWVkIG5vdCBiZSBmbHVzaGVkLgorLlRQCisuQiBcLWZub1wtZGVmYXVsdFwtaW5saW5lCitEb24ndCBtYWtlIG1lbWJlciBmdW5jdGlvbnMgaW5saW5lIGJ5IGRlZmF1bHQgbWVyZWx5IGJlY2F1c2UgdGhleSBhcmUKK2RlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzY29wZSAoQysrIG9ubHkpLgorLlRQCisuQiBcLWZub1wtZGVmZXJcLXBvcAorQWx3YXlzIHBvcCB0aGUgYXJndW1lbnRzIHRvIGVhY2ggZnVuY3Rpb24gY2FsbCBhcyBzb29uIGFzIHRoYXQKK2Z1bmN0aW9uIHJldHVybnMuICBGb3IgbWFjaGluZXMgd2hpY2ggbXVzdCBwb3AgYXJndW1lbnRzIGFmdGVyIGEKK2Z1bmN0aW9uIGNhbGwsIHRoZSBjb21waWxlciBub3JtYWxseSBsZXRzIGFyZ3VtZW50cyBhY2N1bXVsYXRlIG9uIHRoZQorc3RhY2sgZm9yIHNldmVyYWwgZnVuY3Rpb24gY2FsbHMgYW5kIHBvcHMgdGhlbSBhbGwgYXQgb25jZS4KKy5UUAorLkIgXC1mZm9yY2VcLW1lbQorRm9yY2UgbWVtb3J5IG9wZXJhbmRzIHRvIGJlIGNvcGllZCBpbnRvIHJlZ2lzdGVycyBiZWZvcmUgZG9pbmcKK2FyaXRobWV0aWMgb24gdGhlbS4gIFRoaXMgbWF5IHByb2R1Y2UgYmV0dGVyIGNvZGUgYnkgbWFraW5nIGFsbAorbWVtb3J5IHJlZmVyZW5jZXMgcG90ZW50aWFsIGNvbW1vbiBzdWJleHByZXNzaW9ucy4gIFdoZW4gdGhleSBhcmUKK25vdCBjb21tb24gc3ViZXhwcmVzc2lvbnMsIGluc3RydWN0aW9uIGNvbWJpbmF0aW9uIHNob3VsZAorZWxpbWluYXRlIHRoZSBzZXBhcmF0ZSByZWdpc3Rlci1sb2FkLiAgSSBhbSBpbnRlcmVzdGVkIGluIGhlYXJpbmcKK2Fib3V0IHRoZSBkaWZmZXJlbmNlIHRoaXMgbWFrZXMuCisuVFAKKy5CIFwtZmZvcmNlXC1hZGRyCitGb3JjZSBtZW1vcnkgYWRkcmVzcyBjb25zdGFudHMgdG8gYmUgY29waWVkIGludG8gcmVnaXN0ZXJzIGJlZm9yZQorZG9pbmcgYXJpdGhtZXRpYyBvbiB0aGVtLiAgVGhpcyBtYXkgcHJvZHVjZSBiZXR0ZXIgY29kZSBqdXN0IGFzCitgXHxcYworLkIgXC1mZm9yY2VcLW1lbVxjCitcJlx8JyBtYXkuICBJIGFtIGludGVyZXN0ZWQgaW4gaGVhcmluZyBhYm91dCB0aGUKK2RpZmZlcmVuY2UgdGhpcyBtYWtlcy4KKy5UUAorLkIgXC1mb21pdFwtZnJhbWVcLXBvaW50ZXIKK0Rvbid0IGtlZXAgdGhlIGZyYW1lIHBvaW50ZXIgaW4gYSByZWdpc3RlciBmb3IgZnVuY3Rpb25zIHRoYXQKK2Rvbid0IG5lZWQgb25lLiAgVGhpcyBhdm9pZHMgdGhlIGluc3RydWN0aW9ucyB0byBzYXZlLCBzZXQgdXAgYW5kCityZXN0b3JlIGZyYW1lIHBvaW50ZXJzOyBpdCBhbHNvIG1ha2VzIGFuIGV4dHJhIHJlZ2lzdGVyIGF2YWlsYWJsZQoraW4gbWFueSBmdW5jdGlvbnMuICBcYworLkkgSXQgYWxzbyBtYWtlcyBkZWJ1Z2dpbmcgaW1wb3NzaWJsZSBvbiBtb3N0IG1hY2hpbmVzXGMKK1wmLgorLlNwCitPbiBzb21lIG1hY2hpbmVzLCBzdWNoIGFzIHRoZSBWYXgsIHRoaXMgZmxhZyBoYXMgbm8gZWZmZWN0LCBiZWNhdXNlCit0aGUgc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGZyYW1lIHBvaW50ZXIKK2FuZCBub3RoaW5nIGlzIHNhdmVkIGJ5IHByZXRlbmRpbmcgaXQgZG9lc24ndCBleGlzdC4gIFRoZQorbWFjaGluZS1kZXNjcmlwdGlvbiBtYWNybyBcYworLkIgRlJBTUVfUE9JTlRFUl9SRVFVSVJFRFxjCitcJiBjb250cm9scword2hldGhlciBhIHRhcmdldCBtYWNoaW5lIHN1cHBvcnRzIHRoaXMgZmxhZy4KKy5UUAorLkIgXC1maW5saW5lXC1mdW5jdGlvbnMKK0ludGVncmF0ZSBhbGwgc2ltcGxlIGZ1bmN0aW9ucyBpbnRvIHRoZWlyIGNhbGxlcnMuICBUaGUgY29tcGlsZXIKK2hldXJpc3RpY2FsbHkgZGVjaWRlcyB3aGljaCBmdW5jdGlvbnMgYXJlIHNpbXBsZSBlbm91Z2ggdG8gYmUgd29ydGgKK2ludGVncmF0aW5nIGluIHRoaXMgd2F5LgorLlNwCitJZiBhbGwgY2FsbHMgdG8gYSBnaXZlbiBmdW5jdGlvbiBhcmUgaW50ZWdyYXRlZCwgYW5kIHRoZSBmdW5jdGlvbiBpcworZGVjbGFyZWQgXGMKKy5CIHN0YXRpY1xjCitcJiwgdGhlbiBHQ0Mgbm9ybWFsbHkgZG9lcyBub3Qgb3V0cHV0IHRoZSBmdW5jdGlvbiBhcworYXNzZW1ibGVyIGNvZGUgaW4gaXRzIG93biByaWdodC4KKy5UUAorLkIgXC1mY2FsbGVyXC1zYXZlcworRW5hYmxlIHZhbHVlcyB0byBiZSBhbGxvY2F0ZWQgaW4gcmVnaXN0ZXJzIHRoYXQgd2lsbCBiZSBjbG9iYmVyZWQgYnkKK2Z1bmN0aW9uIGNhbGxzLCBieSBlbWl0dGluZyBleHRyYSBpbnN0cnVjdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKK3JlZ2lzdGVycyBhcm91bmQgc3VjaCBjYWxscy4gIFN1Y2ggYWxsb2NhdGlvbiBpcyBkb25lIG9ubHkgd2hlbiBpdAorc2VlbXMgdG8gcmVzdWx0IGluIGJldHRlciBjb2RlIHRoYW4gd291bGQgb3RoZXJ3aXNlIGJlIHByb2R1Y2VkLgorLlNwCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gY2VydGFpbiBtYWNoaW5lcywgdXN1YWxseSB0aG9zZQord2hpY2ggaGF2ZSBubyBjYWxsLXByZXNlcnZlZCByZWdpc3RlcnMgdG8gdXNlIGluc3RlYWQuCisuVFAKKy5CIFwtZmtlZXBcLWlubGluZVwtZnVuY3Rpb25zCitFdmVuIGlmIGFsbCBjYWxscyB0byBhIGdpdmVuIGZ1bmN0aW9uIGFyZSBpbnRlZ3JhdGVkLCBhbmQgdGhlIGZ1bmN0aW9uCitpcyBkZWNsYXJlZCBcYworLkIgc3RhdGljXGMKK1wmLCBuZXZlcnRoZWxlc3Mgb3V0cHV0IGEgc2VwYXJhdGUgcnVuLXRpbWUKK2NhbGxhYmxlIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLgorLlRQCisuQiBcLWZub1wtZnVuY3Rpb25cLWNzZQorRG8gbm90IHB1dCBmdW5jdGlvbiBhZGRyZXNzZXMgaW4gcmVnaXN0ZXJzOyBtYWtlIGVhY2ggaW5zdHJ1Y3Rpb24gdGhhdAorY2FsbHMgYSBjb25zdGFudCBmdW5jdGlvbiBjb250YWluIHRoZSBmdW5jdGlvbidzIGFkZHJlc3MgZXhwbGljaXRseS4KKy5TcAorVGhpcyBvcHRpb24gcmVzdWx0cyBpbiBsZXNzIGVmZmljaWVudCBjb2RlLCBidXQgc29tZSBzdHJhbmdlIGhhY2tzCit0aGF0IGFsdGVyIHRoZSBhc3NlbWJsZXIgb3V0cHV0IG1heSBiZSBjb25mdXNlZCBieSB0aGUgb3B0aW1pemF0aW9ucworcGVyZm9ybWVkIHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuCisuVFAKKy5CIFwtZm5vXC1wZWVwaG9sZQorRGlzYWJsZSBhbnkgbWFjaGluZS1zcGVjaWZpYyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zLgorLlRQCisuQiBcLWZmYXN0LW1hdGgKK1RoaXMgb3B0aW9uIGFsbG93cyBHQ0MgdG8gdmlvbGF0ZSBzb21lIEFOU0kgb3IgSUVFRSBydWxlcy9zcGVjaWZpY2F0aW9ucworaW4gdGhlIGludGVyZXN0IG9mIG9wdGltaXppbmcgY29kZSBmb3Igc3BlZWQuICBGb3IgZXhhbXBsZSwgaXQgYWxsb3dzCit0aGUgY29tcGlsZXIgdG8gYXNzdW1lIGFyZ3VtZW50cyB0byB0aGUgXGMKKy5CIHNxcnRcYworXCYgZnVuY3Rpb24gYXJlCitub24tbmVnYXRpdmUgbnVtYmVycy4KKy5TcAorVGhpcyBvcHRpb24gc2hvdWxkIG5ldmVyIGJlIHR1cm5lZCBvbiBieSBhbnkgYFx8XGMKKy5CIFwtT1xjCitcJlx8JyBvcHRpb24gc2luY2UKK2l0IGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IG91dHB1dCBmb3IgcHJvZ3JhbXMgd2hpY2ggZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBJRUVFIG9yIEFOU0kgcnVsZXMvc3BlY2lmaWNhdGlvbnMgZm9yCittYXRoIGZ1bmN0aW9ucy4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGNvbnRyb2wgc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4gIFRoZSBgXHxcYworLkIgXC1PMlxjCitcJlx8Jworb3B0aW9uIHR1cm5zIG9uIGFsbCBvZiB0aGVzZSBvcHRpbWl6YXRpb25zIGV4Y2VwdCBgXHxcYworLkIgXC1mdW5yb2xsXC1sb29wc1xjCitcJlx8JworYW5kIGBcfFxjCisuQiBcLWZ1bnJvbGxcLWFsbFwtbG9vcHNcYworXCZcfCcuCisuUFAKK1RoZSBgXHxcYworLkIgXC1PXGMKK1wmXHwnIG9wdGlvbiB1c3VhbGx5IHR1cm5zIG9uCit0aGUgYFx8XGMKKy5CIFwtZnRocmVhZFwtanVtcHNcYworXCZcfCcgYW5kIGBcfFxjCisuQiBcLWZkZWxheWVkXC1icmFuY2hcYworXCZcfCcgb3B0aW9ucywgYnV0CitzcGVjaWZpYyBtYWNoaW5lcyBtYXkgY2hhbmdlIHRoZSBkZWZhdWx0IG9wdGltaXphdGlvbnMuCisuUFAKK1lvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZmxhZ3MgaW4gdGhlIHJhcmUgY2FzZXMgd2hlbiBcKihscWZpbmUtdHVuaW5nXCoocnEKK29mIG9wdGltaXphdGlvbnMgdG8gYmUgcGVyZm9ybWVkIGlzIGRlc2lyZWQuCisuVFAKKy5CIFwtZnN0cmVuZ3RoXC1yZWR1Y2UKK1BlcmZvcm0gdGhlIG9wdGltaXphdGlvbnMgb2YgbG9vcCBzdHJlbmd0aCByZWR1Y3Rpb24gYW5kCitlbGltaW5hdGlvbiBvZiBpdGVyYXRpb24gdmFyaWFibGVzLgorLlRQCisuQiBcLWZ0aHJlYWRcLWp1bXBzCitQZXJmb3JtIG9wdGltaXphdGlvbnMgd2hlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIGEganVtcCBicmFuY2hlcyB0byBhCitsb2NhdGlvbiB3aGVyZSBhbm90aGVyIGNvbXBhcmlzb24gc3Vic3VtZWQgYnkgdGhlIGZpcnN0IGlzIGZvdW5kLiAgSWYKK3NvLCB0aGUgZmlyc3QgYnJhbmNoIGlzIHJlZGlyZWN0ZWQgdG8gZWl0aGVyIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUKK3NlY29uZCBicmFuY2ggb3IgYSBwb2ludCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQsIGRlcGVuZGluZyBvbiB3aGV0aGVyCit0aGUgY29uZGl0aW9uIGlzIGtub3duIHRvIGJlIHRydWUgb3IgZmFsc2UuCisuVFAKKy5CIFwtZnVucm9sbFwtbG9vcHMKK1BlcmZvcm0gdGhlIG9wdGltaXphdGlvbiBvZiBsb29wIHVucm9sbGluZy4gIFRoaXMgaXMgb25seSBkb25lIGZvciBsb29wcword2hvc2UgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgY2FuIGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lIG9yIHJ1biB0aW1lLgorLlRQCisuQiBcLWZ1bnJvbGxcLWFsbFwtbG9vcHMKK1BlcmZvcm0gdGhlIG9wdGltaXphdGlvbiBvZiBsb29wIHVucm9sbGluZy4gIFRoaXMgaXMgZG9uZSBmb3IgYWxsIGxvb3BzLgorVGhpcyB1c3VhbGx5IG1ha2VzIHByb2dyYW1zIHJ1biBtb3JlIHNsb3dseS4KKy5UUAorLkIgXC1mY3NlXC1mb2xsb3dcLWp1bXBzCitJbiBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiwgc2NhbiB0aHJvdWdoIGp1bXAgaW5zdHJ1Y3Rpb25zCit3aGVuIHRoZSB0YXJnZXQgb2YgdGhlIGp1bXAgaXMgbm90IHJlYWNoZWQgYnkgYW55IG90aGVyIHBhdGguICBGb3IKK2V4YW1wbGUsIHdoZW4gQ1NFIGVuY291bnRlcnMgYW4gXGMKKy5CIGlmXGMKK1wmIHN0YXRlbWVudCB3aXRoIGFuCisuQiBlbHNlXGMKK1wmIGNsYXVzZSwgQ1NFIHdpbGwgZm9sbG93IHRoZSBqdW1wIHdoZW4gdGhlIGNvbmRpdGlvbgordGVzdGVkIGlzIGZhbHNlLgorLlRQCisuQiBcLWZjc2VcLXNraXBcLWJsb2NrcworVGhpcyBpcyBzaW1pbGFyIHRvIGBcfFxjCisuQiBcLWZjc2VcLWZvbGxvd1wtanVtcHNcYworXCZcfCcsIGJ1dCBjYXVzZXMgQ1NFIHRvCitmb2xsb3cganVtcHMgd2hpY2ggY29uZGl0aW9uYWxseSBza2lwIG92ZXIgYmxvY2tzLiAgV2hlbiBDU0UKK2VuY291bnRlcnMgYSBzaW1wbGUgXGMKKy5CIGlmXGMKK1wmIHN0YXRlbWVudCB3aXRoIG5vIGVsc2UgY2xhdXNlLAorYFx8XGMKKy5CIFwtZmNzZVwtc2tpcFwtYmxvY2tzXGMKK1wmXHwnIGNhdXNlcyBDU0UgdG8gZm9sbG93IHRoZSBqdW1wIGFyb3VuZCB0aGUKK2JvZHkgb2YgdGhlIFxjCisuQiBpZlxjCitcJi4KKy5UUAorLkIgXC1mcmVydW5cLWNzZVwtYWZ0ZXJcLWxvb3AKK1JlLXJ1biBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiBhZnRlciBsb29wIG9wdGltaXphdGlvbnMgaGFzIGJlZW4KK3BlcmZvcm1lZC4KKy5UUAorLkIgXC1mZWxpZGVcLWNvbnN0cnVjdG9ycworRWxpZGUgY29uc3RydWN0b3JzIHdoZW4gdGhpcyBzZWVtcyBwbGF1c2libGUgKEMrKyBvbmx5KS4gIFdpdGggdGhpcworZmxhZywgR05VIEMrKyBpbml0aWFsaXplcyBcYworLkIgeVxjCitcJiBkaXJlY3RseSBmcm9tIHRoZSBjYWxsIHRvIFxjCisuQiBmb28KK3dpdGhvdXQgZ29pbmcgdGhyb3VnaCBhIHRlbXBvcmFyeSBpbiB0aGUgZm9sbG93aW5nIGNvZGU6CisuU3AKK0EgZm9vICgpOworQSB5ID0gZm9vICgpOworLlNwCitXaXRob3V0IHRoaXMgb3B0aW9uLCBHTlUgQysrIGZpcnN0IGluaXRpYWxpemVzIFxjCisuQiB5XGMKK1wmIGJ5IGNhbGxpbmcgdGhlCithcHByb3ByaWF0ZSBjb25zdHJ1Y3RvciBmb3IgdHlwZSBcYworLkIgQVxjCitcJjsgdGhlbiBhc3NpZ25zIHRoZSByZXN1bHQgb2YKKy5CIGZvb1xjCitcJiB0byBhIHRlbXBvcmFyeTsgYW5kLCBmaW5hbGx5LCByZXBsYWNlcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZgorYFx8XGMKKy5CIHlcYworXCZcfCcgd2l0aCB0aGUgdGVtcG9yYXJ5LgorLlNwCitUaGUgZGVmYXVsdCBiZWhhdmlvciAoYFx8XGMKKy5CIFwtZm5vXC1lbGlkZVwtY29uc3RydWN0b3JzXGMKK1wmXHwnKSBpcyBzcGVjaWZpZWQgYnkKK3RoZSBkcmFmdCBBTlNJIEMrKyBzdGFuZGFyZC4gIElmIHlvdXIgcHJvZ3JhbSdzIGNvbnN0cnVjdG9ycyBoYXZlIHNpZGUKK2VmZmVjdHMsIHVzaW5nIGBcfFxjCisuQiBcLWZlbGlkZS1jb25zdHJ1Y3RvcnNcYworXCZcfCcgY2FuIG1ha2UgeW91ciBwcm9ncmFtIGFjdAorZGlmZmVyZW50bHksIHNpbmNlIHNvbWUgY29uc3RydWN0b3IgY2FsbHMgbWF5IGJlIG9taXR0ZWQuCisuVFAKKy5CIFwtZmV4cGVuc2l2ZVwtb3B0aW1pemF0aW9ucworUGVyZm9ybSBhIG51bWJlciBvZiBtaW5vciBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLgorLlRQCisuQiBcLWZkZWxheWVkXC1icmFuY2gKK0lmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBhdHRlbXB0IHRvIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zCit0byBleHBsb2l0IGluc3RydWN0aW9uIHNsb3RzIGF2YWlsYWJsZSBhZnRlciBkZWxheWVkIGJyYW5jaAoraW5zdHJ1Y3Rpb25zLgorLlRQCisuQiBcLWZzY2hlZHVsZVwtaW5zbnMKK0lmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBhdHRlbXB0IHRvIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zIHRvCitlbGltaW5hdGUgZXhlY3V0aW9uIHN0YWxscyBkdWUgdG8gcmVxdWlyZWQgZGF0YSBiZWluZyB1bmF2YWlsYWJsZS4gIFRoaXMKK2hlbHBzIG1hY2hpbmVzIHRoYXQgaGF2ZSBzbG93IGZsb2F0aW5nIHBvaW50IG9yIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucworYnkgYWxsb3dpbmcgb3RoZXIgaW5zdHJ1Y3Rpb25zIHRvIGJlIGlzc3VlZCB1bnRpbCB0aGUgcmVzdWx0IG9mIHRoZSBsb2FkCitvciBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbiBpcyByZXF1aXJlZC4KKy5UUAorLkIgXC1mc2NoZWR1bGVcLWluc25zMgorU2ltaWxhciB0byBgXHxcYworLkIgXC1mc2NoZWR1bGVcLWluc25zXGMKK1wmXHwnLCBidXQgcmVxdWVzdHMgYW4gYWRkaXRpb25hbCBwYXNzIG9mCitpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24gaGFzIGJlZW4gZG9uZS4gIFRoaXMgaXMKK2VzcGVjaWFsbHkgdXNlZnVsIG9uIG1hY2hpbmVzIHdpdGggYSByZWxhdGl2ZWx5IHNtYWxsIG51bWJlciBvZgorcmVnaXN0ZXJzIGFuZCB3aGVyZSBtZW1vcnkgbG9hZCBpbnN0cnVjdGlvbnMgdGFrZSBtb3JlIHRoYW4gb25lIGN5Y2xlLgorLlNIIFRBUkdFVCBPUFRJT05TCitCeSBkZWZhdWx0LCBHTlUgQ0MgY29tcGlsZXMgY29kZSBmb3IgdGhlIHNhbWUgdHlwZSBvZiBtYWNoaW5lIHRoYXQgeW91CithcmUgdXNpbmcuICBIb3dldmVyLCBpdCBjYW4gYWxzbyBiZSBpbnN0YWxsZWQgYXMgYSBjcm9zcy1jb21waWxlciwgdG8KK2NvbXBpbGUgZm9yIHNvbWUgb3RoZXIgdHlwZSBvZiBtYWNoaW5lLiAgSW4gZmFjdCwgc2V2ZXJhbCBkaWZmZXJlbnQKK2NvbmZpZ3VyYXRpb25zIG9mIEdOVSBDQywgZm9yIGRpZmZlcmVudCB0YXJnZXQgbWFjaGluZXMsIGNhbiBiZQoraW5zdGFsbGVkIHNpZGUgYnkgc2lkZS4gIFRoZW4geW91IHNwZWNpZnkgd2hpY2ggb25lIHRvIHVzZSB3aXRoIHRoZQorYFx8XGMKKy5CIFwtYlxjCitcJlx8JyBvcHRpb24uCisuUFAKK0luIGFkZGl0aW9uLCBvbGRlciBhbmQgbmV3ZXIgdmVyc2lvbnMgb2YgR05VIENDIGNhbiBiZSBpbnN0YWxsZWQgc2lkZQorYnkgc2lkZS4gIE9uZSBvZiB0aGVtIChwcm9iYWJseSB0aGUgbmV3ZXN0KSB3aWxsIGJlIHRoZSBkZWZhdWx0LCBidXQKK3lvdSBtYXkgc29tZXRpbWVzIHdpc2ggdG8gdXNlIGFub3RoZXIuCisuVFAKKy5CSSAiXC1iICIgIm1hY2hpbmUiCitUaGUgYXJndW1lbnQgXGMKKy5JIG1hY2hpbmVcYworXCYgc3BlY2lmaWVzIHRoZSB0YXJnZXQgbWFjaGluZSBmb3IgY29tcGlsYXRpb24uCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIGluc3RhbGxlZCBHTlUgQ0MgYXMgYSBjcm9zcy1jb21waWxlci4KKy5TcAorVGhlIHZhbHVlIHRvIHVzZSBmb3IgXGMKKy5JIG1hY2hpbmVcYworXCYgaXMgdGhlIHNhbWUgYXMgd2FzIHNwZWNpZmllZCBhcyB0aGUKK21hY2hpbmUgdHlwZSB3aGVuIGNvbmZpZ3VyaW5nIEdOVSBDQyBhcyBhIGNyb3NzLWNvbXBpbGVyLiAgRm9yCitleGFtcGxlLCBpZiBhIGNyb3NzLWNvbXBpbGVyIHdhcyBjb25maWd1cmVkIHdpdGggYFx8XGMKKy5CIGNvbmZpZ3VyZQoraTM4NnZcYworXCZcfCcsIG1lYW5pbmcgdG8gY29tcGlsZSBmb3IgYW4gODAzODYgcnVubmluZyBTeXN0ZW0gViwgdGhlbiB5b3UKK3dvdWxkIHNwZWNpZnkgYFx8XGMKKy5CIFwtYiBpMzg2dlxjCitcJlx8JyB0byBydW4gdGhhdCBjcm9zcyBjb21waWxlci4KKy5TcAorV2hlbiB5b3UgZG8gbm90IHNwZWNpZnkgYFx8XGMKKy5CIFwtYlxjCitcJlx8JywgaXQgbm9ybWFsbHkgbWVhbnMgdG8gY29tcGlsZSBmb3IKK3RoZSBzYW1lIHR5cGUgb2YgbWFjaGluZSB0aGF0IHlvdSBhcmUgdXNpbmcuCisuVFAKKy5CSSAiXC1WICIgInZlcnNpb24iCitUaGUgYXJndW1lbnQgXGMKKy5JIHZlcnNpb25cYworXCYgc3BlY2lmaWVzIHdoaWNoIHZlcnNpb24gb2YgR05VIENDIHRvIHJ1bi4KK1RoaXMgaXMgdXNlZnVsIHdoZW4gbXVsdGlwbGUgdmVyc2lvbnMgYXJlIGluc3RhbGxlZC4gIEZvciBleGFtcGxlLAorLkkgdmVyc2lvblxjCitcJiBtaWdodCBiZSBgXHxcYworLkIgMi4wXGMKK1wmXHwnLCBtZWFuaW5nIHRvIHJ1biBHTlUgQ0MgdmVyc2lvbiAyLjAuCisuU3AKK1RoZSBkZWZhdWx0IHZlcnNpb24sIHdoZW4geW91IGRvIG5vdCBzcGVjaWZ5IGBcfFxjCisuQiBcLVZcYworXCZcfCcsIGlzIGNvbnRyb2xsZWQKK2J5IHRoZSB3YXkgR05VIENDIGlzIGluc3RhbGxlZC4gIE5vcm1hbGx5LCBpdCB3aWxsIGJlIGEgdmVyc2lvbiB0aGF0CitpcyByZWNvbW1lbmRlZCBmb3IgZ2VuZXJhbCB1c2UuCisuU0ggTUFDSElORSBERVBFTkRFTlQgT1BUSU9OUworRWFjaCBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdHlwZXMgY2FuIGhhdmUgaXRzIG93biBzcGVjaWFsIG9wdGlvbnMsCitzdGFydGluZyB3aXRoIGBcfFxjCisuQiBcLW1cYworXCZcfCcsIHRvIGNob29zZSBhbW9uZyB2YXJpb3VzIGhhcmR3YXJlIG1vZGVscyBvcgorY29uZmlndXJhdGlvbnNcKGVtXCZmb3IgZXhhbXBsZSwgNjgwMTAgdnMgNjgwMjAsIGZsb2F0aW5nIGNvcHJvY2Vzc29yIG9yCitub25lLiAgQSBzaW5nbGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIGNvbXBpbGVyIGNhbiBjb21waWxlIGZvciBhbnkKK21vZGVsIG9yIGNvbmZpZ3VyYXRpb24sIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyBzcGVjaWZpZWQuCisuUFAKK1NvbWUgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBpbGVyIGFsc28gc3VwcG9ydCBhZGRpdGlvbmFsIHNwZWNpYWwKK29wdGlvbnMsIHVzdWFsbHkgZm9yIGNvbW1hbmQtbGluZSBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXJzIG9uCit0aGUgc2FtZSBwbGF0Zm9ybS4KKy5QUAorVGhlc2UgYXJlIHRoZSBgXHxcYworLkIgXC1tXGMKK1wmXHwnIG9wdGlvbnMgZGVmaW5lZCBmb3IgdGhlIDY4MDAwIHNlcmllczoKKy5UUAorLkIgXC1tNjgwMDAKKy5UUAorLkIgXC1tYzY4MDAwCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwMDAuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGNvbXBpbGVyIGlzCitjb25maWd1cmVkIGZvciA2ODAwMC1iYXNlZCBzeXN0ZW1zLgorLlRQCisuQiBcLW02ODAyMAorLlRQCisuQiBcLW1jNjgwMjAKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODAyMCAocmF0aGVyIHRoYW4gYSA2ODAwMCkuICBUaGlzIGlzIHRoZQorZGVmYXVsdCB3aGVuIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciA2ODAyMC1iYXNlZCBzeXN0ZW1zLgorLlRQCisuQiBcLW02ODg4MQorR2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgNjg4ODEgaW5zdHJ1Y3Rpb25zIGZvciBmbG9hdGluZyBwb2ludC4KK1RoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3QgNjgwMjAtYmFzZWQgc3lzdGVtcyB1bmxlc3MKKy5CIFwtbmZwCit3YXMgc3BlY2lmaWVkIHdoZW4gdGhlIGNvbXBpbGVyIHdhcyBjb25maWd1cmVkLgorLlRQCisuQiBcLW02ODAzMAorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDMwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBjb21waWxlciBpcworY29uZmlndXJlZCBmb3IgNjgwMzAtYmFzZWQgc3lzdGVtcy4KKy5UUAorLkIgXC1tNjgwNDAKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA0MC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIDY4MDQwLWJhc2VkIHN5c3RlbXMuCisuVFAKKy5CIFwtbTY4MDIwXC00MAorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDQwLCB3aXRob3V0IHVzaW5nIGFueSBvZiB0aGUgbmV3IGluc3RydWN0aW9ucy4KK1RoaXMgcmVzdWx0cyBpbiBjb2RlIHdoaWNoIGNhbiBydW4gcmVsYXRpdmVseSBlZmZpY2llbnRseSBvbiBlaXRoZXIgYQorNjgwMjAvNjg4ODEgb3IgYSA2ODAzMCBvciBhIDY4MDQwLgorLlRQCisuQiBcLW1mcGEKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIFN1biBGUEEgaW5zdHJ1Y3Rpb25zIGZvciBmbG9hdGluZyBwb2ludC4KKy5UUAorLkIgXC1tc29mdFwtZmxvYXQKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nIHBvaW50LgorLkkKK1dBUk5JTkc6Cit0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IHBhcnQgb2YgR05VIENDLiAgTm9ybWFsbHkgdGhlCitmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUgdXNlZCwgYnV0IHRoaXMgY2FuJ3QKK2JlIGRvbmUgZGlyZWN0bHkgaW4gY3Jvc3MtY29tcGlsYXRpb24uICBZb3UgbXVzdCBtYWtlIHlvdXIgb3duCithcnJhbmdlbWVudHMgdG8gcHJvdmlkZSBzdWl0YWJsZSBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgY3Jvc3MtY29tcGlsYXRpb24uCisuVFAKKy5CIFwtbXNob3J0CitDb25zaWRlciB0eXBlIFxjCisuQiBpbnRcYworXCYgdG8gYmUgMTYgYml0cyB3aWRlLCBsaWtlIFxjCisuQiBzaG9ydCBpbnRcYworXCYuCisuVFAKKy5CIFwtbW5vYml0ZmllbGQKK0RvIG5vdCB1c2UgdGhlIGJpdC1maWVsZCBpbnN0cnVjdGlvbnMuICBgXHxcYworLkIgXC1tNjgwMDBcYworXCZcfCcgaW1wbGllcworYFx8XGMKKy5CIFwtbW5vYml0ZmllbGRcYworXCZcfCcuCisuVFAKKy5CIFwtbWJpdGZpZWxkCitEbyB1c2UgdGhlIGJpdC1maWVsZCBpbnN0cnVjdGlvbnMuICBgXHxcYworLkIgXC1tNjgwMjBcYworXCZcfCcgaW1wbGllcworYFx8XGMKKy5CIFwtbWJpdGZpZWxkXGMKK1wmXHwnLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB5b3UgdXNlIHRoZSB1bm1vZGlmaWVkCitzb3VyY2VzLgorLlRQCisuQiBcLW1ydGQKK1VzZSBhIGRpZmZlcmVudCBmdW5jdGlvbi1jYWxsaW5nIGNvbnZlbnRpb24sIGluIHdoaWNoIGZ1bmN0aW9ucwordGhhdCB0YWtlIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyByZXR1cm4gd2l0aCB0aGUgXGMKKy5CIHJ0ZAoraW5zdHJ1Y3Rpb24sIHdoaWNoIHBvcHMgdGhlaXIgYXJndW1lbnRzIHdoaWxlIHJldHVybmluZy4gIFRoaXMKK3NhdmVzIG9uZSBpbnN0cnVjdGlvbiBpbiB0aGUgY2FsbGVyIHNpbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcG9wCit0aGUgYXJndW1lbnRzIHRoZXJlLgorLlNwCitUaGlzIGNhbGxpbmcgY29udmVudGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb25lIG5vcm1hbGx5Cit1c2VkIG9uIFVuaXgsIHNvIHlvdSBjYW5ub3QgdXNlIGl0IGlmIHlvdSBuZWVkIHRvIGNhbGwgbGlicmFyaWVzCitjb21waWxlZCB3aXRoIHRoZSBVbml4IGNvbXBpbGVyLgorLlNwCitBbHNvLCB5b3UgbXVzdCBwcm92aWRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFsbCBmdW5jdGlvbnMgdGhhdAordGFrZSB2YXJpYWJsZSBudW1iZXJzIG9mIGFyZ3VtZW50cyAoaW5jbHVkaW5nIFxjCisuQiBwcmludGZcYworXCYpOworb3RoZXJ3aXNlIGluY29ycmVjdCBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBjYWxscyB0byB0aG9zZQorZnVuY3Rpb25zLgorLlNwCitJbiBhZGRpdGlvbiwgc2VyaW91c2x5IGluY29ycmVjdCBjb2RlIHdpbGwgcmVzdWx0IGlmIHlvdSBjYWxsIGEKK2Z1bmN0aW9uIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzLiAgKE5vcm1hbGx5LCBleHRyYSBhcmd1bWVudHMgYXJlCitoYXJtbGVzc2x5IGlnbm9yZWQuKQorLlNwCitUaGUgXGMKKy5CIHJ0ZFxjCitcJiBpbnN0cnVjdGlvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIDY4MDEwIGFuZCA2ODAyMAorcHJvY2Vzc29ycywgYnV0IG5vdCBieSB0aGUgNjgwMDAuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIFZheDoKKy5UUAorLkIgXC1tdW5peAorRG8gbm90IG91dHB1dCBjZXJ0YWluIGp1bXAgaW5zdHJ1Y3Rpb25zIChcYworLkIgYW9ibGVxXGMKK1wmIGFuZCBzbyBvbikKK3RoYXQgdGhlIFVuaXggYXNzZW1ibGVyIGZvciB0aGUgVmF4IGNhbm5vdCBoYW5kbGUgYWNyb3NzIGxvbmcKK3Jhbmdlcy4KKy5UUAorLkIgXC1tZ251CitEbyBvdXRwdXQgdGhvc2UganVtcCBpbnN0cnVjdGlvbnMsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91Cit3aWxsIGFzc2VtYmxlIHdpdGggdGhlIEdOVSBhc3NlbWJsZXIuCisuVFAKKy5CIFwtbWcKK091dHB1dCBjb2RlIGZvciBnLWZvcm1hdCBmbG9hdGluZyBwb2ludCBudW1iZXJzIGluc3RlYWQgb2YgZC1mb3JtYXQuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgc3dpdGNoZXMgYXJlIHN1cHBvcnRlZCBvbiB0aGUgU1BBUkM6CisuUFAKKy5CIFwtbWZwdQorLlRQCisuQiBcLW1oYXJkXC1mbG9hdAorR2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuCisuUFAKKy5CIFwtbW5vXC1mcHUKKy5UUAorLkIgXC1tc29mdFwtZmxvYXQKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nIHBvaW50LgorLkkgV2FybmluZzoKK3RoZXJlIGlzIG5vIEdOVSBmbG9hdGluZy1wb2ludCBsaWJyYXJ5IGZvciBTUEFSQy4KK05vcm1hbGx5IHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUgdXNlZCwgYnV0Cit0aGlzIGNhbm5vdCBiZSBkb25lIGRpcmVjdGx5IGluIGNyb3NzLWNvbXBpbGF0aW9uLiAgWW91IG11c3QgbWFrZSB5b3VyCitvd24gYXJyYW5nZW1lbnRzIHRvIHByb3ZpZGUgc3VpdGFibGUgbGlicmFyeSBmdW5jdGlvbnMgZm9yCitjcm9zcy1jb21waWxhdGlvbi4KKy5TcAorLkIgXC1tc29mdFwtZmxvYXQKK2NoYW5nZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGUgb3V0cHV0IGZpbGU7Cit0aGVyZWZvcmUsIGl0IGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBjb21waWxlCisuSSBhbGwKK29mIGEgcHJvZ3JhbSB3aXRoIHRoaXMgb3B0aW9uLgorLlBQCisuQiBcLW1ub1wtZXBpbG9ndWUKKy5UUAorLkIgXC1tZXBpbG9ndWUKK1dpdGgKKy5CIFwtbWVwaWxvZ3VlCisodGhlIGRlZmF1bHQpLCB0aGUgY29tcGlsZXIgYWx3YXlzIGVtaXRzIGNvZGUgZm9yCitmdW5jdGlvbiBleGl0IGF0IHRoZSBlbmQgb2YgZWFjaCBmdW5jdGlvbi4gIEFueSBmdW5jdGlvbiBleGl0IGluCit0aGUgbWlkZGxlIG9mIHRoZSBmdW5jdGlvbiAoc3VjaCBhcyBhIHJldHVybiBzdGF0ZW1lbnQgaW4gQykgd2lsbAorZ2VuZXJhdGUgYSBqdW1wIHRvIHRoZSBleGl0IGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCisuU3AKK1dpdGgKKy5CUiBcLW1ub1wtZXBpbG9ndWUgLAordGhlIGNvbXBpbGVyIHRyaWVzIHRvIGVtaXQgZXhpdCBjb2RlIGlubGluZSBhdCBldmVyeSBmdW5jdGlvbiBleGl0LgorLlBQCisuQiBcLW1ub1wtdjgKKy5UUAorLkIgXC1tdjgKKy5UUAorLkIgXC1tc3BhcmNsaXRlCitUaGVzZSB0aHJlZSBvcHRpb25zIHNlbGVjdCB2YXJpYXRpb25zIG9uIHRoZSBTUEFSQyBhcmNoaXRlY3R1cmUuCisuU3AKK0J5IGRlZmF1bHQgKHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgdGhlIEZ1aml0c3UgU1BBUkNsaXRlKSwKK0dDQyBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIHY3IHZhcmlhbnQgb2YgdGhlIFNQQVJDIGFyY2hpdGVjdHVyZS4KKy5TcAorLkIgXC1tdjgKK3dpbGwgZ2l2ZSB5b3UgU1BBUkMgdjggY29kZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSB2NworY29kZSBpcyB0aGF0IHRoZSBjb21waWxlciBlbWl0cyB0aGUgaW50ZWdlciBtdWx0aXBseSBhbmQgaW50ZWdlcgorZGl2aWRlIGluc3RydWN0aW9ucyB3aGljaCBleGlzdCBpbiBTUEFSQyB2OCBidXQgbm90IGluIFNQQVJDIHY3LgorLlNwCisuQiBcLW1zcGFyY2xpdGUKK3dpbGwgZ2l2ZSB5b3UgU1BBUkNsaXRlIGNvZGUuICBUaGlzIGFkZHMgdGhlIGludGVnZXIKK211bHRpcGx5LCBpbnRlZ2VyIGRpdmlkZSBzdGVwIGFuZCBzY2FuIChmZnMpIGluc3RydWN0aW9ucyB3aGljaAorZXhpc3QgaW4gU1BBUkNsaXRlIGJ1dCBub3QgaW4gU1BBUkMgdjcuCisuUFAKKy5CIFwtbWN5cHJlc3MKKy5UUAorLkIgXC1tc3VwZXJzcGFyYworVGhlc2UgdHdvIG9wdGlvbnMgc2VsZWN0IHRoZSBwcm9jZXNzb3IgZm9yIHdoaWNoIHRoZSBjb2RlIGlzIG9wdGltaXNlZC4KKy5TcAorV2l0aAorLkIgXC1tY3lwcmVzcworKHRoZSBkZWZhdWx0KSwgdGhlIGNvbXBpbGVyIG9wdGltaXNlcyBjb2RlIGZvciB0aGUgQ3lwcmVzcyBDWTdDNjAyIGNoaXAsIGFzCit1c2VkIGluIHRoZSBTcGFyY1N0YXRpb24vU3BhcmNTZXJ2ZXIgM3h4IHNlcmllcy4gVGhpcyBpcyBhbHNvIGFwcHJvcHJpYXRlIGZvcgordGhlIG9sZGVyIFNwYXJjU3RhdGlvbiAxLCAyLCBJUFggZXRjLgorLlNwCitXaXRoCisuQiBcLW1zdXBlcnNwYXJjCit0aGUgY29tcGlsZXIgb3B0aW1pc2VzIGNvZGUgZm9yIHRoZSBTdXBlclNwYXJjIGNwdSwgYXMgdXNlZCBpbiB0aGUgU3BhcmNTdGF0aW9uCisxMCwgMTAwMCBhbmQgMjAwMCBzZXJpZXMuIFRoaXMgZmxhZyBhbHNvIGVuYWJsZXMgdXNlIG9mIHRoZSBmdWxsIFNQQVJDIHY4CitpbnN0cnVjdGlvbiBzZXQuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIENvbnZleDoKKy5UUAorLkIgXC1tYzEKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSBDMS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIGEgQzEuCisuVFAKKy5CIFwtbWMyCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgQzIuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGNvbXBpbGVyIGlzCitjb25maWd1cmVkIGZvciBhIEMyLgorLlRQCisuQiBcLW1hcmdjb3VudAorR2VuZXJhdGUgY29kZSB3aGljaCBwdXRzIGFuIGFyZ3VtZW50IGNvdW50IGluIHRoZSB3b3JkIHByZWNlZGluZyBlYWNoCithcmd1bWVudCBsaXN0LiAgU29tZSBub25wb3J0YWJsZSBDb252ZXggYW5kIFZheCBwcm9ncmFtcyBuZWVkIHRoaXMgd29yZC4KKyhEZWJ1Z2dlcnMgZG9uJ3QsIGV4Y2VwdCBmb3IgZnVuY3Rpb25zIHdpdGggdmFyaWFibGUtbGVuZ3RoIGFyZ3VtZW50CitsaXN0czsgdGhpcyBpbmZvIGlzIGluIHRoZSBzeW1ib2wgdGFibGUuKQorLlRQCisuQiBcLW1ub2FyZ2NvdW50CitPbWl0IHRoZSBhcmd1bWVudCBjb3VudCB3b3JkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB5b3UgdXNlIHRoZQordW5tb2RpZmllZCBzb3VyY2VzLgorLlBQCitUaGVzZSBgXHxcYworLkIgXC1tXGMKK1wmXHwnIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBBTUQgQW0yOTAwMDoKKy5UUAorLkIgXC1tZHcKK0dlbmVyYXRlIGNvZGUgdGhhdCBhc3N1bWVzIHRoZSBEVyBiaXQgaXMgc2V0LCBpLmUuLCB0aGF0IGJ5dGUgYW5kCitoYWxmd29yZCBvcGVyYXRpb25zIGFyZSBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuCisuVFAKKy5CIFwtbW5vZHcKK0dlbmVyYXRlIGNvZGUgdGhhdCBhc3N1bWVzIHRoZSBEVyBiaXQgaXMgbm90IHNldC4KKy5UUAorLkIgXC1tYncKK0dlbmVyYXRlIGNvZGUgdGhhdCBhc3N1bWVzIHRoZSBzeXN0ZW0gc3VwcG9ydHMgYnl0ZSBhbmQgaGFsZndvcmQgd3JpdGUKK29wZXJhdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLlRQCisuQiBcLW1uYncKK0dlbmVyYXRlIGNvZGUgdGhhdCBhc3N1bWVzIHRoZSBzeXN0ZW1zIGRvZXMgbm90IHN1cHBvcnQgYnl0ZSBhbmQKK2hhbGZ3b3JkIHdyaXRlIG9wZXJhdGlvbnMuICBUaGlzIGltcGxpZXMgYFx8XGMKKy5CIFwtbW5vZHdcYworXCZcfCcuCisuVFAKKy5CIFwtbXNtYWxsCitVc2UgYSBzbWFsbCBtZW1vcnkgbW9kZWwgdGhhdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9uIGFkZHJlc3NlcyBhcmUKK2VpdGhlciB3aXRoaW4gYSBzaW5nbGUgMjU2IEtCIHNlZ21lbnQgb3IgYXQgYW4gYWJzb2x1dGUgYWRkcmVzcyBvZiBsZXNzCit0aGFuIDI1NksuICBUaGlzIGFsbG93cyB0aGUgXGMKKy5CIGNhbGxcYworXCYgaW5zdHJ1Y3Rpb24gdG8gYmUgdXNlZCBpbnN0ZWFkCitvZiBhIFxjCisuQiBjb25zdFxjCitcJiwgXGMKKy5CIGNvbnN0aFxjCitcJiwgXGMKKy5CIGNhbGxpXGMKK1wmIHNlcXVlbmNlLgorLlRQCisuQiBcLW1sYXJnZQorRG8gbm90IGFzc3VtZSB0aGF0IHRoZSBcYworLkIgY2FsbFxjCitcJiBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZDsgdGhpcyBpcyB0aGUKK2RlZmF1bHQuCisuVFAKKy5CIFwtbTI5MDUwCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgQW0yOTA1MC4KKy5UUAorLkIgXC1tMjkwMDAKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBBbTI5MDAwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5UUAorLkIgXC1ta2VybmVsXC1yZWdpc3RlcnMKK0dlbmVyYXRlIHJlZmVyZW5jZXMgdG8gcmVnaXN0ZXJzIFxjCisuQiBncjY0LWdyOTVcYworXCYgaW5zdGVhZCBvZgorLkIgZ3I5Ni1ncjEyN1xjCitcJi4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlCit0aGF0IHdhbnRzIGEgc2V0IG9mIGdsb2JhbCByZWdpc3RlcnMgZGlzam9pbnQgZnJvbSB0aGF0IHVzZWQgYnkKK3VzZXItbW9kZSBjb2RlLgorLlNwCitOb3RlIHRoYXQgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCByZWdpc3RlciBuYW1lcyBpbiBgXHxcYworLkIgXC1mXGMKK1wmXHwnIGZsYWdzCittdXN0IHVzZSB0aGUgbm9ybWFsLCB1c2VyLW1vZGUsIG5hbWVzLgorLlRQCisuQiBcLW11c2VyXC1yZWdpc3RlcnMKK1VzZSB0aGUgbm9ybWFsIHNldCBvZiBnbG9iYWwgcmVnaXN0ZXJzLCBcYworLkIgZ3I5Ni1ncjEyN1xjCitcJi4gIFRoaXMgaXMgdGhlCitkZWZhdWx0LgorLlRQCisuQiBcLW1zdGFja1wtY2hlY2sKK0luc2VydCBhIGNhbGwgdG8gXGMKKy5CIF9cfF9tc3BfY2hlY2tcYworXCYgYWZ0ZXIgZWFjaCBzdGFjayBhZGp1c3RtZW50LiAgVGhpcworaXMgb2Z0ZW4gdXNlZCBmb3Iga2VybmVsIGNvZGUuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgTW90b3JvbGEgODhLIGFyY2hpdGVjdHVyZXM6CisuVFAKKy5CIFwtbTg4MDAwCitHZW5lcmF0ZSBjb2RlIHRoYXQgd29ya3Mgd2VsbCBvbiBib3RoIHRoZSBtODgxMDAgYW5kIHRoZQorbTg4MTEwLgorLlRQCisuQiBcLW04ODEwMAorR2VuZXJhdGUgY29kZSB0aGF0IHdvcmtzIGJlc3QgZm9yIHRoZSBtODgxMDAsIGJ1dCB0aGF0IGFsc28KK3J1bnMgb24gdGhlIG04ODExMC4KKy5UUAorLkIgXC1tODgxMTAKK0dlbmVyYXRlIGNvZGUgdGhhdCB3b3JrcyBiZXN0IGZvciB0aGUgbTg4MTEwLCBhbmQgbWF5IG5vdCBydW4KK29uIHRoZSBtODgxMDAuCisuVFAKKy5CIFwtbWlkZW50aWZ5XC1yZXZpc2lvbgorSW5jbHVkZSBhbiBcYworLkIgaWRlbnRcYworXCYgZGlyZWN0aXZlIGluIHRoZSBhc3NlbWJsZXIgb3V0cHV0IHJlY29yZGluZyB0aGUKK3NvdXJjZSBmaWxlIG5hbWUsIGNvbXBpbGVyIG5hbWUgYW5kIHZlcnNpb24sIHRpbWVzdGFtcCwgYW5kIGNvbXBpbGF0aW9uCitmbGFncyB1c2VkLgorLlRQCisuQiBcLW1ub1wtdW5kZXJzY29yZXMKK0luIGFzc2VtYmxlciBvdXRwdXQsIGVtaXQgc3ltYm9sIG5hbWVzIHdpdGhvdXQgYWRkaW5nIGFuIHVuZGVyc2NvcmUKK2NoYXJhY3RlciBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbmFtZS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBhbgordW5kZXJzY29yZSBhcyBwcmVmaXggb24gZWFjaCBuYW1lLgorLlRQCisuQiBcLW1ub1wtY2hlY2tcLXplcm9cLWRpdmlzaW9uCisuVFAKKy5CIFwtbWNoZWNrXC16ZXJvXC1kaXZpc2lvbgorRWFybHkgbW9kZWxzIG9mIHRoZSA4OEsgYXJjaGl0ZWN0dXJlIGhhZCBwcm9ibGVtcyB3aXRoIGRpdmlzaW9uIGJ5IHplcm87CitpbiBwYXJ0aWN1bGFyLCBtYW55IG9mIHRoZW0gZGlkbid0IHRyYXAuICBVc2UgdGhlc2Ugb3B0aW9ucyB0byBhdm9pZAoraW5jbHVkaW5nIChvciB0byBpbmNsdWRlIGV4cGxpY2l0bHkpIGFkZGl0aW9uYWwgY29kZSB0byBkZXRlY3QgZGl2aXNpb24KK2J5IHplcm8gYW5kIHNpZ25hbCBhbiBleGNlcHRpb24uICBBbGwgR0NDIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgODhLIHVzZQorYFx8XGMKKy5CIFwtbWNoZWNrXC16ZXJvXC1kaXZpc2lvblxjCitcJlx8JyBieSBkZWZhdWx0LgorLlRQCisuQiBcLW1vY3NcLWRlYnVnXC1pbmZvCisuVFAKKy5CIFwtbW5vXC1vY3NcLWRlYnVnXC1pbmZvCitJbmNsdWRlIChvciBvbWl0KSBhZGRpdGlvbmFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAoYWJvdXQKK3JlZ2lzdGVycyB1c2VkIGluIGVhY2ggc3RhY2sgZnJhbWUpIGFzIHNwZWNpZmllZCBpbiB0aGUgODhPcGVuIE9iamVjdAorQ29tcGF0aWJpbGl0eSBTdGFuZGFyZCwgXCoobHFPQ1NcKihycS4gIFRoaXMgZXh0cmEgaW5mb3JtYXRpb24gaXMgbm90IG5lZWRlZAorYnkgR0RCLiAgVGhlIGRlZmF1bHQgZm9yIERHL1VYLCBTVnI0LCBhbmQgRGVsdGEgODggU1ZyMy4yIGlzIHRvCitpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb247IG90aGVyIDg4ayBjb25maWd1cmF0aW9ucyBvbWl0IHRoaXMgaW5mb3JtYXRpb24KK2J5IGRlZmF1bHQuCisuVFAKKy5CIFwtbW9jc1wtZnJhbWVcLXBvc2l0aW9uCisuVFAKKy5CIFwtbW5vXC1vY3NcLWZyYW1lXC1wb3NpdGlvbgorRm9yY2UgKG9yIGRvIG5vdCByZXF1aXJlKSByZWdpc3RlciB2YWx1ZXMgdG8gYmUgc3RvcmVkIGluIGEgcGFydGljdWxhcgorcGxhY2UgaW4gc3RhY2sgZnJhbWVzLCBhcyBzcGVjaWZpZWQgaW4gT0NTLiAgVGhlIERHL1VYLCBEZWx0YTg4IFNWcjMuMiwKK2FuZCBCQ1MgY29uZmlndXJhdGlvbnMgdXNlIGBcfFxjCisuQiBcLW1vY3NcLWZyYW1lXC1wb3NpdGlvblxjCitcJlx8Jzsgb3RoZXIgODhrCitjb25maWd1cmF0aW9ucyBoYXZlIHRoZSBkZWZhdWx0IGBcfFxjCisuQiBcLW1ub1wtb2NzXC1mcmFtZVwtcG9zaXRpb25cYworXCZcfCcuCisuVFAKKy5CIFwtbW9wdGltaXplXC1hcmdcLWFyZWEKKy5UUAorLkIgXC1tbm9cLW9wdGltaXplXC1hcmdcLWFyZWEKK0NvbnRyb2wgaG93IHRvIHN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyBpbiBzdGFjayBmcmFtZXMuCitgXHxcYworLkIgXC1tb3B0aW1pemVcLWFyZ1wtYXJlYVxjCitcJlx8JyBzYXZlcyBzcGFjZSwgYnV0IG1heSBicmVhayBzb21lCitkZWJ1Z2dlcnMgKG5vdCBHREIpLiAgYFx8XGMKKy5CIFwtbW5vXC1vcHRpbWl6ZVwtYXJnXC1hcmVhXGMKK1wmXHwnIGNvbmZvcm1zIGJldHRlciB0bworc3RhbmRhcmRzLiAgIEJ5IGRlZmF1bHQgR0NDIGRvZXMgbm90IG9wdGltaXplIHRoZSBhcmd1bWVudCBhcmVhLgorLlRQCisuQkkgIlwtbXNob3J0XC1kYXRhXC0iICJudW0iCisuSSBudW0KK0dlbmVyYXRlIHNtYWxsZXIgZGF0YSByZWZlcmVuY2VzIGJ5IG1ha2luZyB0aGVtIHJlbGF0aXZlIHRvIFxjCisuQiByMFxjCitcJiwKK3doaWNoIGFsbG93cyBsb2FkaW5nIGEgdmFsdWUgdXNpbmcgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gKHJhdGhlciB0aGFuIHRoZQordXN1YWwgdHdvKS4gIFlvdSBjb250cm9sIHdoaWNoIGRhdGEgcmVmZXJlbmNlcyBhcmUgYWZmZWN0ZWQgYnkKK3NwZWNpZnlpbmcgXGMKKy5JIG51bVxjCitcJiB3aXRoIHRoaXMgb3B0aW9uLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5CitgXHxcYworLkIgXC1tc2hvcnRcLWRhdGFcLTUxMlxjCitcJlx8JywgdGhlbiB0aGUgZGF0YSByZWZlcmVuY2VzIGFmZmVjdGVkIGFyZSB0aG9zZQoraW52b2x2aW5nIGRpc3BsYWNlbWVudHMgb2YgbGVzcyB0aGFuIDUxMiBieXRlcy4KK2BcfFxjCisuQiBcLW1zaG9ydFwtZGF0YVwtXGMKKy5JIG51bVxjCitcJlxjCitcJlx8JyBpcyBub3QgZWZmZWN0aXZlIGZvciBcYworLkkgbnVtXGMKK1wmIGdyZWF0ZXIKK3RoYW4gNjRLLgorLlBQCisuQiBcLW1zZXJpYWxpemUtdm9sYXRpbGUKKy5UUAorLkIgXC1tbm8tc2VyaWFsaXplLXZvbGF0aWxlCitEbywgb3IgZG8gbm90LCBnZW5lcmF0ZSBjb2RlIHRvIGd1YXJhbnRlZSBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5IG9mCit2b2xhdGlsZSBtZW1vcnkgcmVmZXJlbmNlcy4KKy5TcAorR05VIENDIGFsd2F5cyBndWFyYW50ZWVzIGNvbnNpc3RlbmN5IGJ5IGRlZmF1bHQsIGZvciB0aGUgcHJlZmVycmVkCitwcm9jZXNzb3Igc3VibW9kZWwuICBIb3cgdGhpcyBpcyBkb25lIGRlcGVuZHMgb24gdGhlIHN1Ym1vZGVsLgorLlNwCitUaGUgbTg4MTAwIHByb2Nlc3NvciBkb2VzIG5vdCByZW9yZGVyIG1lbW9yeSByZWZlcmVuY2VzIGFuZCBzbyBhbHdheXMKK3Byb3ZpZGVzIHNlcXVlbnRpYWwgY29uc2lzdGVuY3kuICBJZiB5b3UgdXNlIGBcfFxjCisuQiBcLW04ODEwMFxjCitcJlx8JywgR05VIENDIGRvZXMKK25vdCBnZW5lcmF0ZSBhbnkgc3BlY2lhbCBpbnN0cnVjdGlvbnMgZm9yIHNlcXVlbnRpYWwgY29uc2lzdGVuY3kuCisuU3AKK1RoZSBvcmRlciBvZiBtZW1vcnkgcmVmZXJlbmNlcyBtYWRlIGJ5IHRoZSBtODgxMTAgcHJvY2Vzc29yIGRvZXMgbm90CithbHdheXMgbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSBpbnN0cnVjdGlvbnMgcmVxdWVzdGluZyB0aG9zZSByZWZlcmVuY2VzLgorSW4gcGFydGljdWxhciwgYSBsb2FkIGluc3RydWN0aW9uIG1heSBleGVjdXRlIGJlZm9yZSBhIHByZWNlZGluZyBzdG9yZQoraW5zdHJ1Y3Rpb24uICBTdWNoIHJlb3JkZXJpbmcgdmlvbGF0ZXMgc2VxdWVudGlhbCBjb25zaXN0ZW5jeSBvZgordm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMsIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHByb2Nlc3NvcnMuICBXaGVuCit5b3UgdXNlIGBcfFxjCisuQiBcLW04ODAwMFxjCitcJlx8JyBvciBgXHxcYworLkIgXC1tODgxMTBcYworXCZcfCcsIEdOVSBDQyBnZW5lcmF0ZXMgc3BlY2lhbAoraW5zdHJ1Y3Rpb25zIHdoZW4gYXBwcm9wcmlhdGUsIHRvIGZvcmNlIGV4ZWN1dGlvbiBpbiB0aGUgcHJvcGVyIG9yZGVyLgorLlNwCitUaGUgZXh0cmEgY29kZSBnZW5lcmF0ZWQgdG8gZ3VhcmFudGVlIGNvbnNpc3RlbmN5IG1heSBhZmZlY3QgdGhlCitwZXJmb3JtYW5jZSBvZiB5b3VyIGFwcGxpY2F0aW9uLiAgSWYgeW91IGtub3cgdGhhdCB5b3UgY2FuIHNhZmVseSBmb3JnbwordGhpcyBndWFyYW50ZWUsIHlvdSBtYXkgdXNlIHRoZSBvcHRpb24gYFx8XGMKKy5CIFwtbW5vLXNlcmlhbGl6ZS12b2xhdGlsZVxjCitcJlx8Jy4KKy5TcAorSWYgeW91IHVzZSB0aGUgYFx8XGMKKy5CIFwtbTg4MTAwXGMKK1wmXHwnIG9wdGlvbiBidXQgcmVxdWlyZSBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5Cit3aGVuIHJ1bm5pbmcgb24gdGhlIG04ODExMCBwcm9jZXNzb3IsIHlvdSBzaG91bGQgdXNlCitgXHxcYworLkIgXC1tc2VyaWFsaXplLXZvbGF0aWxlXGMKK1wmXHwnLgorLlBQCisuQiBcLW1zdnI0CisuVFAKKy5CIFwtbXN2cjMKK1R1cm4gb24gKGBcfFxjCisuQiBcLW1zdnI0XGMKK1wmXHwnKSBvciBvZmYgKGBcfFxjCisuQiBcLW1zdnIzXGMKK1wmXHwnKSBjb21waWxlciBleHRlbnNpb25zCityZWxhdGVkIHRvIFN5c3RlbSBWIHJlbGVhc2UgNCAoU1ZyNCkuICBUaGlzIGNvbnRyb2xzIHRoZSBmb2xsb3dpbmc6CisuVFAKK1wgXCBcIFwoYnUKK1doaWNoIHZhcmlhbnQgb2YgdGhlIGFzc2VtYmxlciBzeW50YXggdG8gZW1pdCAod2hpY2ggeW91IGNhbiBzZWxlY3QKK2luZGVwZW5kZW50bHkgdXNpbmcgYFx8XGMKKy5CIFwtbXZlcnNpb25cLTAzLjAwXGMKK1wmXHwnKS4KKy5UUAorXCBcIFwgXChidQorYFx8XGMKKy5CIFwtbXN2cjRcYworXCZcfCcgbWFrZXMgdGhlIEMgcHJlcHJvY2Vzc29yIHJlY29nbml6ZSBgXHxcYworLkIgI3ByYWdtYSB3ZWFrXGMKK1wmXHwnCisuVFAKK1wgXCBcIFwoYnUKK2BcfFxjCisuQiBcLW1zdnI0XGMKK1wmXHwnIG1ha2VzIEdDQyBpc3N1ZSBhZGRpdGlvbmFsIGRlY2xhcmF0aW9uIGRpcmVjdGl2ZXMgdXNlZCBpbgorU1ZyNC4KKy5QUAorYFx8XGMKKy5CIFwtbXN2cjNcYworXCZcfCcgaXMgdGhlIGRlZmF1bHQgZm9yIGFsbCBtODhLIGNvbmZpZ3VyYXRpb25zIGV4Y2VwdAordGhlIFNWcjQgY29uZmlndXJhdGlvbi4KKy5UUAorLkIgXC1tdHJhcFwtbGFyZ2VcLXNoaWZ0CisuVFAKKy5CIFwtbWhhbmRsZVwtbGFyZ2VcLXNoaWZ0CitJbmNsdWRlIGNvZGUgdG8gZGV0ZWN0IGJpdC1zaGlmdHMgb2YgbW9yZSB0aGFuIDMxIGJpdHM7IHJlc3BlY3RpdmVseSwKK3RyYXAgc3VjaCBzaGlmdHMgb3IgZW1pdCBjb2RlIHRvIGhhbmRsZSB0aGVtIHByb3Blcmx5LiAgQnkgZGVmYXVsdCBHQ0MKK21ha2VzIG5vIHNwZWNpYWwgcHJvdmlzaW9uIGZvciBsYXJnZSBiaXQgc2hpZnRzLgorLlRQCisuQiBcLW11c2VcLWRpdlwtaW5zdHJ1Y3Rpb24KK1ZlcnkgZWFybHkgbW9kZWxzIG9mIHRoZSA4OEsgYXJjaGl0ZWN0dXJlIGRpZG4ndCBoYXZlIGEgZGl2aWRlCitpbnN0cnVjdGlvbiwgc28gR0NDIGF2b2lkcyB0aGF0IGluc3RydWN0aW9uIGJ5IGRlZmF1bHQuICBVc2UgdGhpcyBvcHRpb24KK3RvIHNwZWNpZnkgdGhhdCBpdCdzIHNhZmUgdG8gdXNlIHRoZSBkaXZpZGUgaW5zdHJ1Y3Rpb24uCisuVFAKKy5CIFwtbXZlcnNpb25cLTAzLjAwCitJbiB0aGUgREcvVVggY29uZmlndXJhdGlvbiwgdGhlcmUgYXJlIHR3byBmbGF2b3JzIG9mIFNWcjQuICBUaGlzIG9wdGlvbgorbW9kaWZpZXMKKy5CIFwtbXN2cjQKK3RvIHNlbGVjdCB3aGV0aGVyIHRoZSBoeWJyaWQtQ09GRiBvciByZWFsLUVMRgorZmxhdm9yIGlzIHVzZWQuICBBbGwgb3RoZXIgY29uZmlndXJhdGlvbnMgaWdub3JlIHRoaXMgb3B0aW9uLgorLlRQCisuQiBcLW13YXJuXC1wYXNzZWRcLXN0cnVjdHMKK1dhcm4gd2hlbiBhIGZ1bmN0aW9uIHBhc3NlcyBhIHN0cnVjdCBhcyBhbiBhcmd1bWVudCBvciByZXN1bHQuCitTdHJ1Y3R1cmUtcGFzc2luZyBjb252ZW50aW9ucyBoYXZlIGNoYW5nZWQgZHVyaW5nIHRoZSBldm9sdXRpb24gb2YgdGhlIEMKK2xhbmd1YWdlLCBhbmQgYXJlIG9mdGVuIHRoZSBzb3VyY2Ugb2YgcG9ydGFiaWxpdHkgcHJvYmxlbXMuICBCeSBkZWZhdWx0LAorR0NDIGlzc3VlcyBubyBzdWNoIHdhcm5pbmcuCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBJQk0gUlM2MDAwOgorLlBQCisuQiBcLW1mcFwtaW5cLXRvYworLlRQCisuQiBcLW1ub1wtZnBcLWluXC10b2MKK0NvbnRyb2wgd2hldGhlciBvciBub3QgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGdvIGluIHRoZSBUYWJsZSBvZgorQ29udGVudHMgKFRPQyksIGEgdGFibGUgb2YgYWxsIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gYWRkcmVzc2VzLiAgQnkKK2RlZmF1bHQgR0NDIHB1dHMgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIHRoZXJlOyBpZiB0aGUgVE9DIG92ZXJmbG93cywKK2BcfFxjCisuQiBcLW1ub1wtZnBcLWluXC10b2NcYworXCZcfCcgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIFRPQywgd2hpY2ggbWF5IGF2b2lkCit0aGUgb3ZlcmZsb3cuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIElCTSBSVCBQQzoKKy5UUAorLkIgXC1taW5cLWxpbmVcLW11bAorVXNlIGFuIGluLWxpbmUgY29kZSBzZXF1ZW5jZSBmb3IgaW50ZWdlciBtdWx0aXBsaWVzLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuCisuVFAKKy5CIFwtbWNhbGxcLWxpYlwtbXVsCitDYWxsIFxjCisuQiBsbXVsJCRcYworXCYgZm9yIGludGVnZXIgbXVsdGlwbGVzLgorLlRQCisuQiBcLW1mdWxsXC1mcFwtYmxvY2tzCitHZW5lcmF0ZSBmdWxsLXNpemUgZmxvYXRpbmcgcG9pbnQgZGF0YSBibG9ja3MsIGluY2x1ZGluZyB0aGUgbWluaW11bQorYW1vdW50IG9mIHNjcmF0Y2ggc3BhY2UgcmVjb21tZW5kZWQgYnkgSUJNLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5UUAorLkIgXC1tbWluaW11bVwtZnBcLWJsb2NrcworRG8gbm90IGluY2x1ZGUgZXh0cmEgc2NyYXRjaCBzcGFjZSBpbiBmbG9hdGluZyBwb2ludCBkYXRhIGJsb2Nrcy4gIFRoaXMKK3Jlc3VsdHMgaW4gc21hbGxlciBjb2RlLCBidXQgc2xvd2VyIGV4ZWN1dGlvbiwgc2luY2Ugc2NyYXRjaCBzcGFjZSBtdXN0CitiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCisuVFAKKy5CIFwtbWZwXC1hcmdcLWluXC1mcHJlZ3MKK1VzZSBhIGNhbGxpbmcgc2VxdWVuY2UgaW5jb21wYXRpYmxlIHdpdGggdGhlIElCTSBjYWxsaW5nIGNvbnZlbnRpb24gaW4KK3doaWNoIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4KK05vdGUgdGhhdCBcYworLkIgdmFyYXJncy5oXGMKK1wmIGFuZCBcYworLkIgc3RkYXJncy5oXGMKK1wmIHdpbGwgbm90IHdvcmsgd2l0aAorZmxvYXRpbmcgcG9pbnQgb3BlcmFuZHMgaWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorLlRQCisuQiBcLW1mcFwtYXJnXC1pblwtZ3JlZ3MKK1VzZSB0aGUgbm9ybWFsIGNhbGxpbmcgY29udmVudGlvbiBmb3IgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzLiAgVGhpcyBpcwordGhlIGRlZmF1bHQuCisuVFAKKy5CIFwtbWhjXC1zdHJ1Y3RcLXJldHVybgorUmV0dXJuIHN0cnVjdHVyZXMgb2YgbW9yZSB0aGFuIG9uZSB3b3JkIGluIG1lbW9yeSwgcmF0aGVyIHRoYW4gaW4gYQorcmVnaXN0ZXIuICBUaGlzIHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTWV0YVdhcmUgSGlnaEMgKGhjKQorY29tcGlsZXIuICBVc2UgYFx8XGMKKy5CIFwtZnBjY1wtc3RydWN0XC1yZXR1cm5cYworXCZcfCcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKK1BvcnRhYmxlIEMgQ29tcGlsZXIgKHBjYykuCisuVFAKKy5CIFwtbW5vaGNcLXN0cnVjdFwtcmV0dXJuCitSZXR1cm4gc29tZSBzdHJ1Y3R1cmVzIG9mIG1vcmUgdGhhbiBvbmUgd29yZCBpbiByZWdpc3RlcnMsIHdoZW4KK2NvbnZlbmllbnQuICBUaGlzIGlzIHRoZSBkZWZhdWx0LiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKK0lCTS1zdXBwbGllZCBjb21waWxlcnMsIHVzZSBlaXRoZXIgYFx8XGMKKy5CIFwtZnBjY1wtc3RydWN0XC1yZXR1cm5cYworXCZcfCcgb3IKK2BcfFxjCisuQiBcLW1oY1wtc3RydWN0XC1yZXR1cm5cYworXCZcfCcuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIE1JUFMgZmFtaWx5IG9mIGNvbXB1dGVyczoKKy5UUAorLkJJICJcLW1jcHU9IiAiY3B1LXR5cGUiCitBc3N1bWUgdGhlIGRlZmF1bHRzIGZvciB0aGUgbWFjaGluZSB0eXBlCisuSSBjcHUtdHlwZQord2hlbgorc2NoZWR1bGluZyBpbnN0cnVjdGlvbnMuICBUaGUgZGVmYXVsdAorLkkgY3B1LXR5cGUKK2lzCisuQlIgZGVmYXVsdCAsCit3aGljaCBwaWNrcyB0aGUgbG9uZ2VzdCBjeWNsZXMgdGltZXMgZm9yIGFueSBvZiB0aGUgbWFjaGluZXMsIGluIG9yZGVyCit0aGF0IHRoZSBjb2RlIHJ1biBhdCByZWFzb25hYmxlIHJhdGVzIG9uIGFsbCBNSVBTIGNwdSdzLiAgT3RoZXIKK2Nob2ljZXMgZm9yCisuSSBjcHUtdHlwZQorYXJlCisuQlIgcjIwMDAgLAorLkJSIHIzMDAwICwKKy5CUiByNDAwMCAsCithbmQKKy5CUiByNjAwMCAuCitXaGlsZSBwaWNraW5nIGEgc3BlY2lmaWMKKy5JIGNwdS10eXBlCit3aWxsIHNjaGVkdWxlIHRoaW5ncyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IHBhcnRpY3VsYXIgY2hpcCwgdGhlCitjb21waWxlciB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgY29kZSB0aGF0IGRvZXMgbm90IG1lZXQgbGV2ZWwgMSBvZiB0aGUKK01JUFMgSVNBIChpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlKSB3aXRob3V0IHRoZQorLkIgXC1taXBzMgorb3IKKy5CIFwtbWlwczMKK3N3aXRjaGVzIGJlaW5nIHVzZWQuCisuVFAKKy5CIFwtbWlwczIKK0lzc3VlIGluc3RydWN0aW9ucyBmcm9tIGxldmVsIDIgb2YgdGhlIE1JUFMgSVNBIChicmFuY2ggbGlrZWx5LCBzcXVhcmUKK3Jvb3QgaW5zdHJ1Y3Rpb25zKS4gIFRoZQorLkIgXC1tY3B1PXI0MDAwCitvcgorLkIgXC1tY3B1PXI2MDAwCitzd2l0Y2ggbXVzdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKy5CUiBcLW1pcHMyIC4KKy5UUAorLkIgXC1taXBzMworSXNzdWUgaW5zdHJ1Y3Rpb25zIGZyb20gbGV2ZWwgMyBvZiB0aGUgTUlQUyBJU0EgKDY0IGJpdCBpbnN0cnVjdGlvbnMpLgorVGhlCisuQiBcLW1jcHU9cjQwMDAKK3N3aXRjaCBtdXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorLkJSIFwtbWlwczIgLgorLlRQCisuQiBcLW1pbnQ2NAorLlRQCisuQiBcLW1sb25nNjQKKy5UUAorLkIgXC1tbG9uZ2xvbmcxMjgKK1RoZXNlIG9wdGlvbnMgZG9uJ3Qgd29yayBhdCBwcmVzZW50LgorLlRQCisuQiBcLW1taXBzXC1hcworR2VuZXJhdGUgY29kZSBmb3IgdGhlIE1JUFMgYXNzZW1ibGVyLCBhbmQgaW52b2tlCisuQiBtaXBzXC10ZmlsZQordG8gYWRkIG5vcm1hbCBkZWJ1ZyBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIGFsbAorcGxhdGZvcm1zIGV4Y2VwdCBmb3IgdGhlIE9TRi8xIHJlZmVyZW5jZSBwbGF0Zm9ybSwgdXNpbmcgdGhlIE9TRi9yb3NlCitvYmplY3QgZm9ybWF0LiAgSWYgYW55IG9mIHRoZQorLkJSIFwtZ2dkYiAsCisuQlIgXC1nc3RhYnMgLAorb3IKKy5CIFwtZ3N0YWJzKworc3dpdGNoZXMgYXJlIHVzZWQsIHRoZQorLkIgbWlwc1wtdGZpbGUKK3Byb2dyYW0gd2lsbCBlbmNhcHN1bGF0ZSB0aGUgc3RhYnMgd2l0aGluIE1JUFMgRUNPRkYuCisuVFAKKy5CIFwtbWdhcworR2VuZXJhdGUgY29kZSBmb3IgdGhlIEdOVSBhc3NlbWJsZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIHRoZSBPU0YvMQorcmVmZXJlbmNlIHBsYXRmb3JtLCB1c2luZyB0aGUgT1NGL3Jvc2Ugb2JqZWN0IGZvcm1hdC4KKy5UUAorLkIgXC1tcm5hbWVzCisuVFAKKy5CIFwtbW5vXC1ybmFtZXMKK1RoZQorLkIgXC1tcm5hbWVzCitzd2l0Y2ggc2F5cyB0byBvdXRwdXQgY29kZSB1c2luZyB0aGUgTUlQUyBzb2Z0d2FyZSBuYW1lcyBmb3IgdGhlCityZWdpc3RlcnMsIGluc3RlYWQgb2YgdGhlIGhhcmR3YXJlIG5hbWVzIChpZSwKKy5CIGEwCitpbnN0ZWFkIG9mCisuQlIgJDQgKS4KK1RoZSBHTlUgYXNzZW1ibGVyIGRvZXMgbm90IHN1cHBvcnQgdGhlCisuQiBcLW1ybmFtZXMKK3N3aXRjaCwgYW5kIHRoZSBNSVBTIGFzc2VtYmxlciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gcnVuIHRoZSBNSVBTIEMKK3ByZXByb2Nlc3NvciBvdmVyIHRoZSBzb3VyY2UgZmlsZS4gIFRoZQorLkIgXC1tbm9cLXJuYW1lcworc3dpdGNoIGlzIGRlZmF1bHQuCisuVFAKKy5CIFwtbWdwb3B0CisuVFAKKy5CIFwtbW5vXC1ncG9wdAorVGhlCisuQiBcLW1ncG9wdAorc3dpdGNoIHNheXMgdG8gd3JpdGUgYWxsIG9mIHRoZSBkYXRhIGRlY2xhcmF0aW9ucyBiZWZvcmUgdGhlCitpbnN0cnVjdGlvbnMgaW4gdGhlIHRleHQgc2VjdGlvbiwgdG8gYWxsIHRoZSBNSVBTIGFzc2VtYmxlciB0bworZ2VuZXJhdGUgb25lIHdvcmQgbWVtb3J5IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiB1c2luZyB0d28gd29yZHMgZm9yCitzaG9ydCBnbG9iYWwgb3Igc3RhdGljIGRhdGEgaXRlbXMuICBUaGlzIGlzIG9uIGJ5IGRlZmF1bHQgaWYKK29wdGltaXphdGlvbiBpcyBzZWxlY3RlZC4KKy5UUAorLkIgXC1tc3RhdHMKKy5UUAorLkIgXC1tbm9cLXN0YXRzCitGb3IgZWFjaCBub24taW5saW5lIGZ1bmN0aW9uIHByb2Nlc3NlZCwgdGhlCisuQiBcLW1zdGF0cworc3dpdGNoIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZW1pdCBvbmUgbGluZSB0byB0aGUgc3RhbmRhcmQgZXJyb3IgZmlsZQordG8gcHJpbnQgc3RhdGlzdGljcyBhYm91dCB0aGUgcHJvZ3JhbSAobnVtYmVyIG9mIHJlZ2lzdGVycyBzYXZlZCwKK3N0YWNrIHNpemUsIGV0Yy4pLgorLlRQCisuQiBcLW1tZW1jcHkKKy5UUAorLkIgXC1tbm9cLW1lbWNweQorVGhlCisuQiBcLW1tZW1jcHkKK3N3aXRjaCBtYWtlcyBhbGwgYmxvY2sgbW92ZXMgY2FsbCB0aGUgYXBwcm9wcmlhdGUgc3RyaW5nIGZ1bmN0aW9uCisuUkIgKCBtZW1jcHkKK29yCisuQlIgYmNvcHkgKQoraW5zdGVhZCBvZiBwb3NzaWJseSBnZW5lcmF0aW5nIGlubGluZSBjb2RlLgorLlRQCisuQiBcLW1taXBzXC10ZmlsZQorLlRQCisuQiBcLW1ub1wtbWlwc1wtdGZpbGUKK1RoZQorLkIgXC1tbm9cLW1pcHNcLXRmaWxlCitzd2l0Y2ggY2F1c2VzIHRoZSBjb21waWxlciBub3QgcG9zdHByb2Nlc3MgdGhlIG9iamVjdCBmaWxlIHdpdGggdGhlCisuQiBtaXBzXC10ZmlsZQorcHJvZ3JhbSwgYWZ0ZXIgdGhlIE1JUFMgYXNzZW1ibGVyIGhhcyBnZW5lcmF0ZWQgaXQgdG8gYWRkIGRlYnVnCitzdXBwb3J0LiAgSWYKKy5CIG1pcHNcLXRmaWxlCitpcyBub3QgcnVuLCB0aGVuIG5vIGxvY2FsIHZhcmlhYmxlcyB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgZGVidWdnZXIuCitJbiBhZGRpdGlvbiwKKy5CIHN0YWdlMgorYW5kCisuQiBzdGFnZTMKK29iamVjdHMgd2lsbCBoYXZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcyBwYXNzZWQgdG8gdGhlIGFzc2VtYmxlcgorZW1iZWRkZWQgaW4gdGhlIG9iamVjdCBmaWxlLCB3aGljaCBtZWFucyB0aGUgb2JqZWN0cyB3aWxsIG5vdCBjb21wYXJlCit0aGUgc2FtZS4KKy5UUAorLkIgXC1tc29mdFwtZmxvYXQKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nIHBvaW50LgorLkkKK1dBUk5JTkc6Cit0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IHBhcnQgb2YgR05VIENDLiAgTm9ybWFsbHkgdGhlCitmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUgdXNlZCwgYnV0IHRoaXMgY2FuJ3QKK2JlIGRvbmUgZGlyZWN0bHkgaW4gY3Jvc3MtY29tcGlsYXRpb24uICBZb3UgbXVzdCBtYWtlIHlvdXIgb3duCithcnJhbmdlbWVudHMgdG8gcHJvdmlkZSBzdWl0YWJsZSBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgY3Jvc3MtY29tcGlsYXRpb24uCisuVFAKKy5CIFwtbWhhcmRcLWZsb2F0CitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBpZiB5b3UgdXNlIHRoZSB1bm1vZGlmaWVkIHNvdXJjZXMuCisuVFAKKy5CIFwtbWZwNjQKK0Fzc3VtZSB0aGF0IHRoZQorLkIgRlIKK2JpdCBpbiB0aGUgc3RhdHVzIHdvcmQgaXMgb24sIGFuZCB0aGF0IHRoZXJlIGFyZSAzMiA2NC1iaXQgZmxvYXRpbmcKK3BvaW50IHJlZ2lzdGVycywgaW5zdGVhZCBvZiAzMiAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAgWW91CittdXN0IGFsc28gc3BlY2lmeSB0aGUKKy5CIFwtbWNwdT1yNDAwMAorYW5kCisuQiBcLW1pcHMzCitzd2l0Y2hlcy4KKy5UUAorLkIgXC1tZnAzMgorQXNzdW1lIHRoYXQgdGhlcmUgYXJlIDMyIDMyLWJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdC4KKy5QUAorLkIgXC1tYWJpY2FsbHMKKy5UUAorLkIgXC1tbm9cLWFiaWNhbGxzCitFbWl0IChvciBkbyBub3QgZW1pdCkgdGhlCisuQlIgXCYuYWJpY2FsbHMgLAorLkJSIFwmLmNwbG9hZCAsCithbmQKKy5CIFwmLmNwcmVzdG9yZQorcHNldWRvIG9wZXJhdGlvbnMgdGhhdCBzb21lIFN5c3RlbSBWLjQgcG9ydHMgdXNlIGZvciBwb3NpdGlvbgoraW5kZXBlbmRlbnQgY29kZS4KKy5UUAorLkIgXC1taGFsZlwtcGljCisuVFAKKy5CIFwtbW5vXC1oYWxmXC1waWMKK1RoZQorLkIgXC1taGFsZlwtcGljCitzd2l0Y2ggc2F5cyB0byBwdXQgcG9pbnRlcnMgdG8gZXh0ZXJuIHJlZmVyZW5jZXMgaW50byB0aGUgZGF0YSBzZWN0aW9uCithbmQgbG9hZCB0aGVtIHVwLCByYXRoZXIgdGhhbiBwdXQgdGhlIHJlZmVyZW5jZXMgaW4gdGhlIHRleHQgc2VjdGlvbi4KK1RoaXMgb3B0aW9uIGRvZXMgbm90IHdvcmsgYXQgcHJlc2VudC4KKy5CCisuQkkgXC1HIG51bQorUHV0IGdsb2JhbCBhbmQgc3RhdGljIGl0ZW1zIGxlc3MgdGhhbiBvciBlcXVhbCB0bworLkkgbnVtCitieXRlcyBpbnRvIHRoZSBzbWFsbCBkYXRhIG9yIGJzcyBzZWN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgZGF0YQorb3IgYnNzIHNlY3Rpb24uICBUaGlzIGFsbG93cyB0aGUgYXNzZW1ibGVyIHRvIGVtaXQgb25lIHdvcmQgbWVtb3J5CityZWZlcmVuY2UgaW5zdHJ1Y3Rpb25zIGJhc2VkIG9uIHRoZSBnbG9iYWwgcG9pbnRlcgorLlJCICggZ3AKK29yCisuQlIgJDI4ICksCitpbnN0ZWFkIG9mIHRoZSBub3JtYWwgdHdvIHdvcmRzIHVzZWQuICBCeSBkZWZhdWx0LAorLkkgbnVtCitpcyA4IHdoZW4gdGhlIE1JUFMgYXNzZW1ibGVyIGlzIHVzZWQsIGFuZCAwIHdoZW4gdGhlIEdOVQorYXNzZW1ibGVyIGlzIHVzZWQuICBUaGUKKy5CSSBcLUcgbnVtCitzd2l0Y2ggaXMgYWxzbyBwYXNzZWQgdG8gdGhlIGFzc2VtYmxlciBhbmQgbGlua2VyLiAgQWxsIG1vZHVsZXMgc2hvdWxkCitiZSBjb21waWxlZCB3aXRoIHRoZSBzYW1lCisuQkkgXC1HIG51bQordmFsdWUuCisuVFAKKy5CIFwtbm9jcHAKK1RlbGwgdGhlIE1JUFMgYXNzZW1ibGVyIHRvIG5vdCBydW4gaXQncyBwcmVwcm9jZXNzb3Igb3ZlciB1c2VyCithc3NlbWJsZXIgZmlsZXMgKHdpdGggYSBgXHxcYworLkIgLnNcYworXCZcfCcgc3VmZml4KSB3aGVuIGFzc2VtYmxpbmcgdGhlbS4KKy5QUAorVGhlc2UgYFx8XGMKKy5CIFwtbVxjCitcJlx8JyBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgSW50ZWwgODAzODYgZmFtaWx5IG9mIGNvbXB1dGVyczoKKy5CIFwtbTQ4NgorLlRQCisuQiBcLW1ub1wtNDg2CitDb250cm9sIHdoZXRoZXIgb3Igbm90IGNvZGUgaXMgb3B0aW1pemVkIGZvciBhIDQ4NiBpbnN0ZWFkIG9mIGFuCiszODYuICBDb2RlIGdlbmVyYXRlZCBmb3IgYSA0ODYgd2lsbCBydW4gb24gYSAzODYgYW5kIHZpY2UgdmVyc2EuCisuVFAKKy5CIFwtbXNvZnRcLWZsb2F0CitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBsaWJyYXJ5IGNhbGxzIGZvciBmbG9hdGluZyBwb2ludC4KKy5JIFdhcm5pbmc6Cit0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IHBhcnQgb2YgR05VIENDLgorTm9ybWFsbHkgdGhlIGZhY2lsaXRpZXMgb2YgdGhlIG1hY2hpbmUncyB1c3VhbCBDIGNvbXBpbGVyIGFyZSB1c2VkLCBidXQKK3RoaXMgY2FuJ3QgYmUgZG9uZSBkaXJlY3RseSBpbiBjcm9zcy1jb21waWxhdGlvbi4gIFlvdSBtdXN0IG1ha2UgeW91cgorb3duIGFycmFuZ2VtZW50cyB0byBwcm92aWRlIHN1aXRhYmxlIGxpYnJhcnkgZnVuY3Rpb25zIGZvcgorY3Jvc3MtY29tcGlsYXRpb24uCisuU3AKK09uIG1hY2hpbmVzIHdoZXJlIGEgZnVuY3Rpb24gcmV0dXJucyBmbG9hdGluZyBwb2ludCByZXN1bHRzIGluIHRoZSA4MDM4NworcmVnaXN0ZXIgc3RhY2ssIHNvbWUgZmxvYXRpbmcgcG9pbnQgb3Bjb2RlcyBtYXkgYmUgZW1pdHRlZCBldmVuIGlmCitgXHxcYworLkIgXC1tc29mdC1mbG9hdFxjCitcJlx8JyBpcyB1c2VkLgorLlRQCisuQiBcLW1uby1mcC1yZXQtaW4tMzg3CitEbyBub3QgdXNlIHRoZSBGUFUgcmVnaXN0ZXJzIGZvciByZXR1cm4gdmFsdWVzIG9mIGZ1bmN0aW9ucy4KKy5TcAorVGhlIHVzdWFsIGNhbGxpbmcgY29udmVudGlvbiBoYXMgZnVuY3Rpb25zIHJldHVybiB2YWx1ZXMgb2YgdHlwZXMKKy5CIGZsb2F0XGMKK1wmIGFuZCBcYworLkIgZG91YmxlXGMKK1wmIGluIGFuIEZQVSByZWdpc3RlciwgZXZlbiBpZiB0aGVyZQoraXMgbm8gRlBVLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzaG91bGQgZW11bGF0ZQorYW4gRlBVLgorLlNwCitUaGUgb3B0aW9uIGBcfFxjCisuQiBcLW1uby1mcC1yZXQtaW4tMzg3XGMKK1wmXHwnIGNhdXNlcyBzdWNoIHZhbHVlcyB0byBiZSByZXR1cm5lZAoraW4gb3JkaW5hcnkgQ1BVIHJlZ2lzdGVycyBpbnN0ZWFkLgorLlBQCitUaGVzZSBgXHxcYworLkIgXC1tXGMKK1wmXHwnIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBIUFBBIGZhbWlseSBvZiBjb21wdXRlcnM6CisuVFAKKy5CIFwtbXBhLXJpc2MtMS0wCitHZW5lcmF0ZSBjb2RlIGZvciBhIFBBIDEuMCBwcm9jZXNzb3IuCisuVFAKKy5CIFwtbXBhLXJpc2MtMS0xCitHZW5lcmF0ZSBjb2RlIGZvciBhIFBBIDEuMSBwcm9jZXNzb3IuCisuVFAKKy5CIFwtbWtlcm5lbAorR2VuZXJhdGUgY29kZSB3aGljaCBpcyBzdWl0YWJsZSBmb3IgdXNlIGluIGtlcm5lbHMuICBTcGVjaWZpY2FsbHksIGF2b2lkCisuQiBhZGRcYworXCYgaW5zdHJ1Y3Rpb25zIGluIHdoaWNoIG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzIHRoZSBEUCByZWdpc3RlcjsKK2dlbmVyYXRlIFxjCisuQiBhZGRpbFxjCitcJiBpbnN0cnVjdGlvbnMgaW5zdGVhZC4gIFRoaXMgYXZvaWRzIGEgcmF0aGVyIHNlcmlvdXMKK2J1ZyBpbiB0aGUgSFAtVVggbGlua2VyLgorLlRQCisuQiBcLW1zaGFyZWQtbGlicworR2VuZXJhdGUgY29kZSB0aGF0IGNhbiBiZSBsaW5rZWQgYWdhaW5zdCBIUC1VWCBzaGFyZWQgbGlicmFyaWVzLiAgVGhpcyBvcHRpb24KK2lzIG5vdCBmdWxseSBmdW5jdGlvbiB5ZXQsIGFuZCBpcyBub3Qgb24gYnkgZGVmYXVsdCBmb3IgYW55IFBBIHRhcmdldC4gIFVzaW5nCit0aGlzIG9wdGlvbiBjYW4gY2F1c2UgaW5jb3JyZWN0IGNvZGUgdG8gYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4KKy5UUAorLkIgXC1tbm8tc2hhcmVkLWxpYnMKK0Rvbid0IGdlbmVyYXRlIGNvZGUgdGhhdCB3aWxsIGJlIGxpbmtlZCBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJpZXMuICBUaGlzIGlzCit0aGUgZGVmYXVsdCBmb3IgYWxsIFBBIHRhcmdldHMuCisuVFAKKy5CIFwtbWxvbmctY2FsbHMKK0dlbmVyYXRlIGNvZGUgd2hpY2ggYWxsb3dzIGNhbGxzIHRvIGZ1bmN0aW9ucyBncmVhdGVyIHRoYW4gMjU2SyBhd2F5IGZyb20KK3RoZSBjYWxsZXIgd2hlbiB0aGUgY2FsbGVyIGFuZCBjYWxsZWUgYXJlIGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiAgRG8KK25vdCB0dXJuIHRoaXMgb3B0aW9uIG9uIHVubGVzcyBjb2RlIHJlZnVzZXMgdG8gbGluayB3aXRoIFwqKGxxYnJhbmNoIG91dCBvZgorcmFuZ2UgZXJyb3JzXCooJycgZnJvbSB0aGUgbGlua2VyLgorLlRQCisuQiBcLW1kaXNhYmxlLWZwcmVncworUHJldmVudCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgZnJvbSBiZWluZyB1c2VkIGluIGFueSBtYW5uZXIuICBUaGlzIGlzCituZWNlc3NhcnkgZm9yIGNvbXBpbGluZyBrZXJuZWxzIHdoaWNoIHBlcmZvcm0gbGF6eSBjb250ZXh0IHN3aXRjaGluZyBvZgorZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAgSWYgeW91IHVzZSB0aGlzIG9wdGlvbiBhbmQgYXR0ZW1wdCB0byBwZXJmb3JtCitmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zLCB0aGUgY29tcGlsZXIgd2lsbCBhYm9ydC4KKy5UUAorLkIgXC1tZGlzYWJsZS1pbmRleGluZworUHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSB1c2luZyBpbmRleGluZyBhZGRyZXNzIG1vZGVzLiAgVGhpcyBhdm9pZHMgc29tZQorcmF0aGVyIG9ic2N1cmUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgTUlHIGdlbmVyYXRlZCBjb2RlIHVuZGVyIE1BQ0guCisuVFAKKy5CIFwtbXRyYWlsaW5nLWNvbG9uCitBZGQgYSBjb2xvbiB0byB0aGUgZW5kIG9mIGxhYmVsIGRlZmluaXRpb25zIChmb3IgRUxGIGFzc2VtYmxlcnMpLgorLlBQCitUaGVzZSBgXHxcYworLkIgXC1tXGMKK1wmXHwnIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBJbnRlbCA4MDk2MCBmYW1pbHkgb2YgY29tcHV0ZXJzOgorLlRQCisuQkkgIlwtbSIgImNwdS10eXBlIgorQXNzdW1lIHRoZSBkZWZhdWx0cyBmb3IgdGhlIG1hY2hpbmUgdHlwZQorLkkgY3B1LXR5cGUKK2ZvciBpbnN0cnVjdGlvbiBhbmQgYWRkcmVzc2luZy1tb2RlIGF2YWlsYWJpbGl0eSBhbmQgYWxpZ25tZW50LgorVGhlIGRlZmF1bHQKKy5JIGNwdS10eXBlCitpcworLkJSIGtiIDsKK290aGVyIGNob2ljZXMgYXJlCisuQlIga2EgLAorLkJSIG1jICwKKy5CUiBjYSAsCisuQlIgY2YgLAorLkJSIHNhICwKK2FuZAorLkJSIHNiIC4KKy5UUAorLkIgXC1tbnVtZXJpY3MKKy5UUAorLkIgXC1tc29mdFwtZmxvYXQKK1RoZQorLkIgXC1tbnVtZXJpY3MKK29wdGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGRvZXMgc3VwcG9ydAorZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgVGhlCisuQiBcLW1zb2Z0XC1mbG9hdAorb3B0aW9uIGluZGljYXRlcwordGhhdCBmbG9hdGluZy1wb2ludCBzdXBwb3J0IHNob3VsZCBub3QgYmUgYXNzdW1lZC4KKy5UUAorLkIgXC1tbGVhZlwtcHJvY2VkdXJlcworLlRQCisuQiBcLW1ub1wtbGVhZlwtcHJvY2VkdXJlcworRG8gKG9yIGRvIG5vdCkgYXR0ZW1wdCB0byBhbHRlciBsZWFmIHByb2NlZHVyZXMgdG8gYmUgY2FsbGFibGUgd2l0aCB0aGUKKy5JIGJhbAoraW5zdHJ1Y3Rpb24gYXMgd2VsbCBhcworLklSIGNhbGwgLgorVGhpcyB3aWxsIHJlc3VsdCBpbiBtb3JlCitlZmZpY2llbnQgY29kZSBmb3IgZXhwbGljaXQgY2FsbHMgd2hlbiB0aGUKKy5JIGJhbAoraW5zdHJ1Y3Rpb24gY2FuIGJlCitzdWJzdGl0dXRlZCBieSB0aGUgYXNzZW1ibGVyIG9yIGxpbmtlciwgYnV0IGxlc3MgZWZmaWNpZW50IGNvZGUgaW4gb3RoZXIKK2Nhc2VzLCBzdWNoIGFzIGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycywgb3IgdXNpbmcgYSBsaW5rZXIgdGhhdCBkb2Vzbid0CitzdXBwb3J0IHRoaXMgb3B0aW1pemF0aW9uLgorLlRQCisuQiBcLW10YWlsXC1jYWxsCisuVFAKKy5CIFwtbW5vXC10YWlsXC1jYWxsCitEbyAob3IgZG8gbm90KSBtYWtlIGFkZGl0aW9uYWwgYXR0ZW1wdHMgKGJleW9uZCB0aG9zZSBvZiB0aGUKK21hY2hpbmUtaW5kZXBlbmRlbnQgcG9ydGlvbnMgb2YgdGhlIGNvbXBpbGVyKSB0byBvcHRpbWl6ZSB0YWlsLXJlY3Vyc2l2ZQorY2FsbHMgaW50byBicmFuY2hlcy4gIFlvdSBtYXkgbm90IHdhbnQgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBkZXRlY3Rpb24gb2YKK2Nhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHZhbGlkIGlzIG5vdCB0b3RhbGx5IGNvbXBsZXRlLiAgVGhlIGRlZmF1bHQgaXMKKy5CUiBcLW1ub1wtdGFpbFwtY2FsbCAuCisuVFAKKy5CIFwtbWNvbXBsZXhcLWFkZHIKKy5UUAorLkIgXC1tbm9cLWNvbXBsZXhcLWFkZHIKK0Fzc3VtZSAob3IgZG8gbm90IGFzc3VtZSkgdGhhdCB0aGUgdXNlIG9mIGEgY29tcGxleCBhZGRyZXNzaW5nIG1vZGUgaXMgYQord2luIG9uIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIGk5NjAuICBDb21wbGV4IGFkZHJlc3NpbmcgbW9kZXMgbWF5IG5vdAorYmUgd29ydGh3aGlsZSBvbiB0aGUgSy1zZXJpZXMsIGJ1dCB0aGV5IGRlZmluaXRlbHkgYXJlIG9uIHRoZSBDLXNlcmllcy4KK1RoZSBkZWZhdWx0IGlzIGN1cnJlbnRseQorLkIgXC1tY29tcGxleFwtYWRkcgorZm9yIGFsbCBwcm9jZXNzb3JzIGV4Y2VwdAordGhlIENCIGFuZCBDQy4KKy5UUAorLkIgXC1tY29kZVwtYWxpZ24KKy5UUAorLkIgXC1tbm9cLWNvZGVcLWFsaWduCitBbGlnbiBjb2RlIHRvIDgtYnl0ZSBib3VuZGFyaWVzIGZvciBmYXN0ZXIgZmV0Y2hpbmcgKG9yIGRvbid0IGJvdGhlcikuCitDdXJyZW50bHkgdHVybmVkIG9uIGJ5IGRlZmF1bHQgZm9yIEMtc2VyaWVzIGltcGxlbWVudGF0aW9ucyBvbmx5LgorLlRQCisuQiBcLW1pY1wtY29tcGF0CisuVFAKKy5CIFwtbWljMi4wXC1jb21wYXQKKy5UUAorLkIgXC1taWMzLjBcLWNvbXBhdAorRW5hYmxlIGNvbXBhdGliaWxpdHkgd2l0aCBpQzk2MCB2Mi4wIG9yIHYzLjAuCisuVFAKKy5CIFwtbWFzbVwtY29tcGF0CisuVFAKKy5CIFwtbWludGVsXC1hc20KK0VuYWJsZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGlDOTYwIGFzc2VtYmxlci4KKy5UUAorLkIgXC1tc3RyaWN0XC1hbGlnbgorLlRQCisuQiBcLW1ub1wtc3RyaWN0XC1hbGlnbgorRG8gbm90IHBlcm1pdCAoZG8gcGVybWl0KSB1bmFsaWduZWQgYWNjZXNzZXMuCisuVFAKKy5CIFwtbW9sZFwtYWxpZ24KK0VuYWJsZSBzdHJ1Y3R1cmUtYWxpZ25tZW50IGNvbXBhdGliaWxpdHkgd2l0aCBJbnRlbCdzIGdjYyByZWxlYXNlIHZlcnNpb24KKzEuMyAoYmFzZWQgb24gZ2NjIDEuMzcpLiAgQ3VycmVudGx5IHRoaXMgaXMgYnVnZ3kgaW4gdGhhdAorLkIgI3ByYWdtYSBhbGlnbiAxCitpcyBhbHdheXMgYXNzdW1lZCBhcyB3ZWxsLCBhbmQgY2Fubm90IGJlIHR1cm5lZCBvZmYuCisuUFAKK1RoZXNlIGBcfFxjCisuQiBcLW1cYworXCZcfCcgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIERFQyBBbHBoYSBpbXBsZW1lbnRhdGlvbnM6CisuVFAKKy5CIFwtbW5vLXNvZnQtZmxvYXQKKy5UUAorLkIgXC1tc29mdC1mbG9hdAorVXNlIChkbyBub3QgdXNlKSB0aGUgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGZvcgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFdoZW4gXGMKKy5CIFwtbXNvZnQtZmxvYXRcYworXCYgaXMgc3BlY2lmaWVkLAorZnVuY3Rpb25zIGluIGBcfFxjCisuQiBsaWJnY2MxLmNcYworXCZcfCcgd2lsbCBiZSB1c2VkIHRvIHBlcmZvcm0gZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMuICBVbmxlc3MgdGhleSBhcmUgcmVwbGFjZWQgYnkgcm91dGluZXMgdGhhdCBlbXVsYXRlIHRoZQorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucywgb3IgY29tcGlsZWQgaW4gc3VjaCBhIHdheSBhcyB0byBjYWxsIHN1Y2gKK2VtdWxhdGlvbnMgcm91dGluZXMsIHRoZXNlIHJvdXRpbmVzIHdpbGwgaXNzdWUgZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMuICAgSWYgeW91IGFyZSBjb21waWxpbmcgZm9yIGFuIEFscGhhIHdpdGhvdXQgZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMsIHlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBsaWJyYXJ5IGlzIGJ1aWx0IHNvIGFzIG5vdCB0byBjYWxsCit0aGVtLgorLlNwCitOb3RlIHRoYXQgQWxwaGEgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhcmUKK3JlcXVpcmVkIHRvIGhhdmUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorLlRQCisuQiBcLW1mcC1yZWcKKy5UUAorLkIgXC1tbm8tZnAtcmVncworR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldC4KKy5CIFwtbW5vLWZwLXJlZ3NcYworXCYgaW1wbGllcyBcYworLkIgXC1tc29mdC1mbG9hdFxjCitcJi4gIElmIHRoZSBmbG9hdGluZy1wb2ludAorcmVnaXN0ZXIgc2V0IGlzIG5vdCB1c2VkLCBmbG9hdGluZyBwb2ludCBvcGVyYW5kcyBhcmUgcGFzc2VkIGluIGludGVnZXIKK3JlZ2lzdGVycyBhcyBpZiB0aGV5IHdlcmUgaW50ZWdlcnMgYW5kIGZsb2F0aW5nLXBvaW50IHJlc3VsdHMgYXJlIHBhc3NlZAoraW4gJDAgaW5zdGVhZCBvZiAkZjAuICBUaGlzIGlzIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UsIHNvIGFueQorZnVuY3Rpb24gd2l0aCBhIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50IG9yIHJldHVybiB2YWx1ZSBjYWxsZWQgYnkgY29kZQorY29tcGlsZWQgd2l0aCBcYworLkIgXC1tbm8tZnAtcmVnc1xjCitcJiBtdXN0IGFsc28gYmUgY29tcGlsZWQgd2l0aCB0aGF0CitvcHRpb24uCisuU3AKK0EgdHlwaWNhbCB1c2Ugb2YgdGhpcyBvcHRpb24gaXMgYnVpbGRpbmcgYSBrZXJuZWwgdGhhdCBkb2VzIG5vdCB1c2UsCithbmQgaGVuY2UgbmVlZCBub3Qgc2F2ZSBhbmQgcmVzdG9yZSwgYW55IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKy5QUAorVGhlc2UgYWRkaXRpb25hbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gU3lzdGVtIFYgUmVsZWFzZSA0IGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbXBpbGVycyBvbiB0aG9zZSBzeXN0ZW1zOgorLlRQCisuQiBcLUcKK09uIFNWcjQgc3lzdGVtcywgXGMKKy5CIGdjY1xjCitcJiBhY2NlcHRzIHRoZSBvcHRpb24gYFx8XGMKKy5CIFwtR1xjCitcJlx8JyAoYW5kIHBhc3NlcworaXQgdG8gdGhlIHN5c3RlbSBsaW5rZXIpLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbXBpbGVycy4KK0hvd2V2ZXIsIHdlIHN1Z2dlc3QgeW91IHVzZSBgXHxcYworLkIgXC1zeW1ib2xpY1xjCitcJlx8JyBvciBgXHxcYworLkIgXC1zaGFyZWRcYworXCZcfCcgYXMKK2FwcHJvcHJpYXRlLCBpbnN0ZWFkIG9mIHN1cHBseWluZyBsaW5rZXIgb3B0aW9ucyBvbiB0aGUgXGMKKy5CIGdjYworY29tbWFuZCBsaW5lLgorLlRQCisuQiBcLVF5CitJZGVudGlmeSB0aGUgdmVyc2lvbnMgb2YgZWFjaCB0b29sIHVzZWQgYnkgdGhlIGNvbXBpbGVyLCBpbiBhCisuQiAuaWRlbnRcYworXCYgYXNzZW1ibGVyIGRpcmVjdGl2ZSBpbiB0aGUgb3V0cHV0LgorLlRQCisuQiBcLVFuCitSZWZyYWluIGZyb20gYWRkaW5nIFxjCisuQiAuaWRlbnRcYworXCYgZGlyZWN0aXZlcyB0byB0aGUgb3V0cHV0IGZpbGUgKHRoaXMgaXMKK3RoZSBkZWZhdWx0KS4KKy5UUAorLkJJICJcLVlQLCIgImRpcnMiCitTZWFyY2ggdGhlIGRpcmVjdG9yaWVzIFxjCisuSSBkaXJzXGMKK1wmLCBhbmQgbm8gb3RoZXJzLCBmb3IgbGlicmFyaWVzCitzcGVjaWZpZWQgd2l0aCBgXHxcYworLkIgXC1sXGMKK1wmXHwnLiAgWW91IGNhbiBzZXBhcmF0ZSBkaXJlY3RvcnkgZW50cmllcyBpbgorLkkgZGlyc1xjCitcJiBmcm9tIG9uZSBhbm90aGVyIHdpdGggY29sb25zLgorLlRQCisuQkkgIlwtWW0sIiAiZGlyIgorTG9vayBpbiB0aGUgZGlyZWN0b3J5IFxjCisuSSBkaXJcYworXCYgdG8gZmluZCB0aGUgTTQgcHJlcHJvY2Vzc29yLgorVGhlIGFzc2VtYmxlciB1c2VzIHRoaXMgb3B0aW9uLgorLlNIIENPREUgR0VORVJBVElPTiBPUFRJT05TCitUaGVzZSBtYWNoaW5lLWluZGVwZW5kZW50IG9wdGlvbnMgY29udHJvbCB0aGUgaW50ZXJmYWNlIGNvbnZlbnRpb25zCit1c2VkIGluIGNvZGUgZ2VuZXJhdGlvbi4KKy5QUAorTW9zdCBvZiB0aGVtIGJlZ2luIHdpdGggYFx8XGMKK1wtZlxjCitcJlx8Jy4gIFRoZXNlIG9wdGlvbnMgaGF2ZSBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtczsgdGhlIG5lZ2F0aXZlIGZvcm0KK29mIGBcfFxjCisuQiBcLWZmb29cYworXCZcfCcgd291bGQgYmUgYFx8XGMKKy5CIFwtZm5vXC1mb29cYworXCZcfCcuICBJbiB0aGUgdGFibGUgYmVsb3csIG9ubHkKK29uZSBvZiB0aGUgZm9ybXMgaXMgbGlzdGVkXChlbVwmdGhlIG9uZSB3aGljaCBpcyBub3QgdGhlIGRlZmF1bHQuICBZb3UKK2NhbiBmaWd1cmUgb3V0IHRoZSBvdGhlciBmb3JtIGJ5IGVpdGhlciByZW1vdmluZyBgXHxcYworLkIgbm9cLVxjCitcJlx8JyBvciBhZGRpbmcKK2l0LgorLlRQCisuQiBcLWZub25udWxsXC1vYmplY3RzCitBc3N1bWUgdGhhdCBvYmplY3RzIHJlYWNoZWQgdGhyb3VnaCByZWZlcmVuY2VzIGFyZSBub3QgbnVsbAorKEMrKyBvbmx5KS4KKy5TcAorTm9ybWFsbHksIEdOVSBDKysgbWFrZXMgY29uc2VydmF0aXZlIGFzc3VtcHRpb25zIGFib3V0IG9iamVjdHMgcmVhY2hlZAordGhyb3VnaCByZWZlcmVuY2VzLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21waWxlciBtdXN0IGNoZWNrIHRoYXQgXGMKKy5CIGEKK2lzIG5vdCBudWxsIGluIGNvZGUgbGlrZSB0aGUgZm9sbG93aW5nOgorLlNwCitvYmogJmEgPSBnICgpOworYS5mICgyKTsKKy5TcAorQ2hlY2tpbmcgdGhhdCByZWZlcmVuY2VzIG9mIHRoaXMgc29ydCBoYXZlIG5vbi1udWxsIHZhbHVlcyByZXF1aXJlcworZXh0cmEgY29kZSwgaG93ZXZlciwgYW5kIGl0IGlzIHVubmVjZXNzYXJ5IGZvciBtYW55IHByb2dyYW1zLiAgWW91IGNhbgordXNlIGBcfFxjCisuQiBcLWZub25udWxsLW9iamVjdHNcYworXCZcfCcgdG8gb21pdCB0aGUgY2hlY2tzIGZvciBudWxsLCBpZiB5b3VyCitwcm9ncmFtIGRvZXNuJ3QgcmVxdWlyZSBjaGVja2luZy4KKy5UUAorLkIgXC1mcGNjXC1zdHJ1Y3RcLXJldHVybgorVXNlIHRoZSBzYW1lIGNvbnZlbnRpb24gZm9yIHJldHVybmluZyBcYworLkIgc3RydWN0XGMKK1wmIGFuZCBcYworLkIgdW5pb24KK3ZhbHVlcyB0aGF0IGlzIHVzZWQgYnkgdGhlIHVzdWFsIEMgY29tcGlsZXIgb24geW91ciBzeXN0ZW0uICBUaGlzCitjb252ZW50aW9uIGlzIGxlc3MgZWZmaWNpZW50IGZvciBzbWFsbCBzdHJ1Y3R1cmVzLCBhbmQgb24gbWFueQorbWFjaGluZXMgaXQgZmFpbHMgdG8gYmUgcmVlbnRyYW50OyBidXQgaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKK2FsbG93aW5nIGludGVyY2FsbGFiaWxpdHkgYmV0d2VlbiBHQ0MtY29tcGlsZWQgY29kZSBhbmQgUENDLWNvbXBpbGVkCitjb2RlLgorLlRQCisuQiBcLWZyZWdcLXN0cnVjdFwtcmV0dXJuCitVc2UgdGhlIGNvbnZlbnRpb24gdGhhdAorLkIgc3RydWN0CithbmQKKy5CIHVuaW9uCit2YWx1ZXMgYXJlIHJldHVybmVkIGluIHJlZ2lzdGVycyB3aGVuIHBvc3NpYmxlLiAgVGhpcyBpcyBtb3JlCitlZmZpY2llbnQgZm9yIHNtYWxsIHN0cnVjdHVyZXMgdGhhbgorLkJSIFwtZnBjY1wtc3RydWN0XC1yZXR1cm4gLgorLlNwCitJZiB5b3Ugc3BlY2lmeSBuZWl0aGVyCisuQiBcLWZwY2NcLXN0cnVjdFwtcmV0dXJuCitub3IKKy5CUiBcLWZyZWdcLXN0cnVjdFwtcmV0dXJuICwKK0dOVSBDQyBkZWZhdWx0cyB0byB3aGljaGV2ZXIgY29udmVudGlvbiBpcyBzdGFuZGFyZCBmb3IgdGhlIHRhcmdldC4KK0lmIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGNvbnZlbnRpb24sIEdOVSBDQyBkZWZhdWx0cyB0bworLkJSIFwtZnBjY1wtc3RydWN0XC1yZXR1cm4gLgorLlRQCisuQiBcLWZzaG9ydFwtZW51bXMKK0FsbG9jYXRlIHRvIGFuIFxjCisuQiBlbnVtXGMKK1wmIHR5cGUgb25seSBhcyBtYW55IGJ5dGVzIGFzIGl0IG5lZWRzIGZvciB0aGUKK2RlY2xhcmVkIHJhbmdlIG9mIHBvc3NpYmxlIHZhbHVlcy4gIFNwZWNpZmljYWxseSwgdGhlIFxjCisuQiBlbnVtXGMKK1wmIHR5cGUKK3dpbGwgYmUgZXF1aXZhbGVudCB0byB0aGUgc21hbGxlc3QgaW50ZWdlciB0eXBlIHdoaWNoIGhhcyBlbm91Z2ggcm9vbS4KKy5UUAorLkIgXC1mc2hvcnRcLWRvdWJsZQorVXNlIHRoZSBzYW1lIHNpemUgZm9yCisuQiBkb3VibGUKK2FzIGZvcgorLkIgZmxvYXQKK1wmLgorLlRQCisuQiBcLWZzaGFyZWRcLWRhdGEKK1JlcXVlc3RzIHRoYXQgdGhlIGRhdGEgYW5kIG5vbi1cYworLkIgY29uc3RcYworXCYgdmFyaWFibGVzIG9mIHRoaXMKK2NvbXBpbGF0aW9uIGJlIHNoYXJlZCBkYXRhIHJhdGhlciB0aGFuIHByaXZhdGUgZGF0YS4gIFRoZSBkaXN0aW5jdGlvbgorbWFrZXMgc2Vuc2Ugb25seSBvbiBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLCB3aGVyZSBzaGFyZWQgZGF0YSBpcworc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzIHJ1bm5pbmcgdGhlIHNhbWUgcHJvZ3JhbSwgd2hpbGUgcHJpdmF0ZSBkYXRhCitleGlzdHMgaW4gb25lIGNvcHkgcGVyIHByb2Nlc3MuCisuVFAKKy5CIFwtZm5vXC1jb21tb24KK0FsbG9jYXRlIGV2ZW4gdW5pbml0aWFsaXplZCBnbG9iYWwgdmFyaWFibGVzIGluIHRoZSBic3Mgc2VjdGlvbiBvZiB0aGUKK29iamVjdCBmaWxlLCByYXRoZXIgdGhhbiBnZW5lcmF0aW5nIHRoZW0gYXMgY29tbW9uIGJsb2Nrcy4gIFRoaXMgaGFzIHRoZQorZWZmZWN0IHRoYXQgaWYgdGhlIHNhbWUgdmFyaWFibGUgaXMgZGVjbGFyZWQgKHdpdGhvdXQgXGMKKy5CIGV4dGVyblxjCitcJikgaW4KK3R3byBkaWZmZXJlbnQgY29tcGlsYXRpb25zLCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3Igd2hlbiB5b3UgbGluayB0aGVtLgorVGhlIG9ubHkgcmVhc29uIHRoaXMgbWlnaHQgYmUgdXNlZnVsIGlzIGlmIHlvdSB3aXNoIHRvIHZlcmlmeSB0aGF0IHRoZQorcHJvZ3JhbSB3aWxsIHdvcmsgb24gb3RoZXIgc3lzdGVtcyB3aGljaCBhbHdheXMgd29yayB0aGlzIHdheS4KKy5UUAorLkIgXC1mbm9cLWlkZW50CitJZ25vcmUgdGhlIGBcfFxjCisuQiAjaWRlbnRcYworXCZcfCcgZGlyZWN0aXZlLgorLlRQCisuQiBcLWZub1wtZ251XC1saW5rZXIKK0RvIG5vdCBvdXRwdXQgZ2xvYmFsIGluaXRpYWxpemF0aW9ucyAoc3VjaCBhcyBDKysgY29uc3RydWN0b3JzIGFuZAorZGVzdHJ1Y3RvcnMpIGluIHRoZSBmb3JtIHVzZWQgYnkgdGhlIEdOVSBsaW5rZXIgKG9uIHN5c3RlbXMgd2hlcmUgdGhlIEdOVQorbGlua2VyIGlzIHRoZSBzdGFuZGFyZCBtZXRob2Qgb2YgaGFuZGxpbmcgdGhlbSkuICBVc2UgdGhpcyBvcHRpb24gd2hlbgoreW91IHdhbnQgdG8gdXNlIGEgbm9uLUdOVSBsaW5rZXIsIHdoaWNoIGFsc28gcmVxdWlyZXMgdXNpbmcgdGhlCisuQiBjb2xsZWN0MlxjCitcJiBwcm9ncmFtIHRvIG1ha2Ugc3VyZSB0aGUgc3lzdGVtIGxpbmtlciBpbmNsdWRlcworY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4gIChcYworLkIgY29sbGVjdDJcYworXCYgaXMgaW5jbHVkZWQgaW4gdGhlIEdOVSBDQworZGlzdHJpYnV0aW9uLikgIEZvciBzeXN0ZW1zIHdoaWNoIFxjCisuSSBtdXN0XGMKK1wmIHVzZSBcYworLkIgY29sbGVjdDJcYworXCYsIHRoZQorY29tcGlsZXIgZHJpdmVyIFxjCisuQiBnY2NcYworXCYgaXMgY29uZmlndXJlZCB0byBkbyB0aGlzIGF1dG9tYXRpY2FsbHkuCisuVFAKKy5CIFwtZmluaGliaXQtc2l6ZS1kaXJlY3RpdmUKK0Rvbid0IG91dHB1dCBhIFxjCisuQiAuc2l6ZVxjCitcJiBhc3NlbWJsZXIgZGlyZWN0aXZlLCBvciBhbnl0aGluZyBlbHNlIHRoYXQKK3dvdWxkIGNhdXNlIHRyb3VibGUgaWYgdGhlIGZ1bmN0aW9uIGlzIHNwbGl0IGluIHRoZSBtaWRkbGUsIGFuZCB0aGUKK3R3byBoYWx2ZXMgYXJlIHBsYWNlZCBhdCBsb2NhdGlvbnMgZmFyIGFwYXJ0IGluIG1lbW9yeS4gIFRoaXMgb3B0aW9uIGlzCit1c2VkIHdoZW4gY29tcGlsaW5nIGBcfFxjCisuQiBjcnRzdHVmZi5jXGMKK1wmXHwnOyB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIHVzZSBpdAorZm9yIGFueXRoaW5nIGVsc2UuCisuVFAKKy5CIFwtZnZlcmJvc2UtYXNtCitQdXQgZXh0cmEgY29tbWVudGFyeSBpbmZvcm1hdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgdG8KK21ha2UgaXQgbW9yZSByZWFkYWJsZS4gIFRoaXMgb3B0aW9uIGlzIGdlbmVyYWxseSBvbmx5IG9mIHVzZSB0byB0aG9zZQord2hvIGFjdHVhbGx5IG5lZWQgdG8gcmVhZCB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgKHBlcmhhcHMgd2hpbGUKK2RlYnVnZ2luZyB0aGUgY29tcGlsZXIgaXRzZWxmKS4KKy5UUAorLkIgXC1mdm9sYXRpbGUKK0NvbnNpZGVyIGFsbCBtZW1vcnkgcmVmZXJlbmNlcyB0aHJvdWdoIHBvaW50ZXJzIHRvIGJlIHZvbGF0aWxlLgorLlRQCisuQiBcLWZ2b2xhdGlsZVwtZ2xvYmFsCitDb25zaWRlciBhbGwgbWVtb3J5IHJlZmVyZW5jZXMgdG8gZXh0ZXJuIGFuZCBnbG9iYWwgZGF0YSBpdGVtcyB0bworYmUgdm9sYXRpbGUuCisuVFAKKy5CIFwtZnBpYworSWYgc3VwcG9ydGVkIGZvciB0aGUgdGFyZ2V0IG1hY2hpbmVzLCBnZW5lcmF0ZSBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLAorc3VpdGFibGUgZm9yIHVzZSBpbiBhIHNoYXJlZCBsaWJyYXJ5LgorLlRQCisuQiBcLWZQSUMKK0lmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBlbWl0IHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUsCitzdWl0YWJsZSBmb3IgZHluYW1pYyBsaW5raW5nLCBldmVuIGlmIGJyYW5jaGVzIG5lZWQgbGFyZ2UgZGlzcGxhY2VtZW50cy4KKy5UUAorLkJJICJcLWZmaXhlZFwtIiAicmVnIgorVHJlYXQgdGhlIHJlZ2lzdGVyIG5hbWVkIFxjCisuSSByZWdcYworXCYgYXMgYSBmaXhlZCByZWdpc3RlcjsgZ2VuZXJhdGVkIGNvZGUKK3Nob3VsZCBuZXZlciByZWZlciB0byBpdCAoZXhjZXB0IHBlcmhhcHMgYXMgYSBzdGFjayBwb2ludGVyLCBmcmFtZQorcG9pbnRlciBvciBpbiBzb21lIG90aGVyIGZpeGVkIHJvbGUpLgorLlNwCisuSSByZWdcYworXCYgbXVzdCBiZSB0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyLiAgVGhlIHJlZ2lzdGVyIG5hbWVzIGFjY2VwdGVkCithcmUgbWFjaGluZS1zcGVjaWZpYyBhbmQgYXJlIGRlZmluZWQgaW4gdGhlIFxjCisuQiBSRUdJU1RFUl9OQU1FUworbWFjcm8gaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gbWFjcm8gZmlsZS4KKy5TcAorVGhpcyBmbGFnIGRvZXMgbm90IGhhdmUgYSBuZWdhdGl2ZSBmb3JtLCBiZWNhdXNlIGl0IHNwZWNpZmllcyBhCit0aHJlZS13YXkgY2hvaWNlLgorLlRQCisuQkkgIlwtZmNhbGxcLXVzZWRcLSIgInJlZyIKK1RyZWF0IHRoZSByZWdpc3RlciBuYW1lZCBcYworLkkgcmVnXGMKK1wmIGFzIGFuIGFsbG9jYXRhYmxlIHJlZ2lzdGVyIHRoYXQgaXMKK2Nsb2JiZXJlZCBieSBmdW5jdGlvbiBjYWxscy4gIEl0IG1heSBiZSBhbGxvY2F0ZWQgZm9yIHRlbXBvcmFyaWVzIG9yCit2YXJpYWJsZXMgdGhhdCBkbyBub3QgbGl2ZSBhY3Jvc3MgYSBjYWxsLiAgRnVuY3Rpb25zIGNvbXBpbGVkIHRoaXMgd2F5Cit3aWxsIG5vdCBzYXZlIGFuZCByZXN0b3JlIHRoZSByZWdpc3RlciBcYworLkkgcmVnXGMKK1wmLgorLlNwCitVc2Ugb2YgdGhpcyBmbGFnIGZvciBhIHJlZ2lzdGVyIHRoYXQgaGFzIGEgZml4ZWQgcGVydmFzaXZlIHJvbGUgaW4gdGhlCittYWNoaW5lJ3MgZXhlY3V0aW9uIG1vZGVsLCBzdWNoIGFzIHRoZSBzdGFjayBwb2ludGVyIG9yIGZyYW1lIHBvaW50ZXIsCit3aWxsIHByb2R1Y2UgZGlzYXN0cm91cyByZXN1bHRzLgorLlNwCitUaGlzIGZsYWcgZG9lcyBub3QgaGF2ZSBhIG5lZ2F0aXZlIGZvcm0sIGJlY2F1c2UgaXQgc3BlY2lmaWVzIGEKK3RocmVlLXdheSBjaG9pY2UuCisuVFAKKy5CSSAiXC1mY2FsbFwtc2F2ZWRcLSIgInJlZyIKK1RyZWF0IHRoZSByZWdpc3RlciBuYW1lZCBcYworLkkgcmVnXGMKK1wmIGFzIGFuIGFsbG9jYXRhYmxlIHJlZ2lzdGVyIHNhdmVkIGJ5CitmdW5jdGlvbnMuICBJdCBtYXkgYmUgYWxsb2NhdGVkIGV2ZW4gZm9yIHRlbXBvcmFyaWVzIG9yIHZhcmlhYmxlcyB0aGF0CitsaXZlIGFjcm9zcyBhIGNhbGwuICBGdW5jdGlvbnMgY29tcGlsZWQgdGhpcyB3YXkgd2lsbCBzYXZlIGFuZCByZXN0b3JlCit0aGUgcmVnaXN0ZXIgXGMKKy5JIHJlZ1xjCitcJiBpZiB0aGV5IHVzZSBpdC4KKy5TcAorVXNlIG9mIHRoaXMgZmxhZyBmb3IgYSByZWdpc3RlciB0aGF0IGhhcyBhIGZpeGVkIHBlcnZhc2l2ZSByb2xlIGluIHRoZQorbWFjaGluZSdzIGV4ZWN1dGlvbiBtb2RlbCwgc3VjaCBhcyB0aGUgc3RhY2sgcG9pbnRlciBvciBmcmFtZSBwb2ludGVyLAord2lsbCBwcm9kdWNlIGRpc2FzdHJvdXMgcmVzdWx0cy4KKy5TcAorQSBkaWZmZXJlbnQgc29ydCBvZiBkaXNhc3RlciB3aWxsIHJlc3VsdCBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBmbGFnIGZvcgorYSByZWdpc3RlciBpbiB3aGljaCBmdW5jdGlvbiB2YWx1ZXMgbWF5IGJlIHJldHVybmVkLgorLlNwCitUaGlzIGZsYWcgZG9lcyBub3QgaGF2ZSBhIG5lZ2F0aXZlIGZvcm0sIGJlY2F1c2UgaXQgc3BlY2lmaWVzIGEKK3RocmVlLXdheSBjaG9pY2UuCisuU0ggUFJBR01BUworVHdvIGBcfFxjCisuQiAjcHJhZ21hXGMKK1wmXHwnIGRpcmVjdGl2ZXMgYXJlIHN1cHBvcnRlZCBmb3IgR05VIEMrKywgdG8gcGVybWl0IHVzaW5nIHRoZSBzYW1lCitoZWFkZXIgZmlsZSBmb3IgdHdvIHB1cnBvc2VzOiBhcyBhIGRlZmluaXRpb24gb2YgaW50ZXJmYWNlcyB0byBhIGdpdmVuCitvYmplY3QgY2xhc3MsIGFuZCBhcyB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGF0IG9iamVjdCBjbGFzcy4KKy5UUAorLkIgI3ByYWdtYSBpbnRlcmZhY2UKKyhDKysgb25seS4pCitVc2UgdGhpcyBkaXJlY3RpdmUgaW4gaGVhZGVyIGZpbGVzIHRoYXQgZGVmaW5lIG9iamVjdCBjbGFzc2VzLCB0byBzYXZlCitzcGFjZSBpbiBtb3N0IG9mIHRoZSBvYmplY3QgZmlsZXMgdGhhdCB1c2UgdGhvc2UgY2xhc3Nlcy4gIE5vcm1hbGx5LAorbG9jYWwgY29waWVzIG9mIGNlcnRhaW4gaW5mb3JtYXRpb24gKGJhY2t1cCBjb3BpZXMgb2YgaW5saW5lIG1lbWJlcgorZnVuY3Rpb25zLCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGUgaW50ZXJuYWwgdGFibGVzIHRoYXQKK2ltcGxlbWVudCB2aXJ0dWFsIGZ1bmN0aW9ucykgbXVzdCBiZSBrZXB0IGluIGVhY2ggb2JqZWN0IGZpbGUgdGhhdAoraW5jbHVkZXMgY2xhc3MgZGVmaW5pdGlvbnMuICBZb3UgY2FuIHVzZSB0aGlzIHByYWdtYSB0byBhdm9pZCBzdWNoCitkdXBsaWNhdGlvbi4gIFdoZW4gYSBoZWFkZXIgZmlsZSBjb250YWluaW5nIGBcfFxjCisuQiAjcHJhZ21hIGludGVyZmFjZVxjCitcJlx8JyBpcyBpbmNsdWRlZCBpbiBhIGNvbXBpbGF0aW9uLCB0aGlzIGF1eGlsaWFyeSBpbmZvcm1hdGlvbgord2lsbCBub3QgYmUgZ2VuZXJhdGVkICh1bmxlc3MgdGhlIG1haW4gaW5wdXQgc291cmNlIGZpbGUgaXRzZWxmIHVzZXMKK2BcfFxjCisuQiAjcHJhZ21hIGltcGxlbWVudGF0aW9uXGMKK1wmXHwnKS4gIEluc3RlYWQsIHRoZSBvYmplY3QgZmlsZXMgd2lsbCBjb250YWluIHJlZmVyZW5jZXMgdG8gYmUKK3Jlc29sdmVkIGF0IGxpbmsgdGltZS4KKy5UUAorLkIgI3ByYWdtYSBpbXBsZW1lbnRhdGlvbgorLlRQCitcZkIjcHJhZ21hIGltcGxlbWVudGF0aW9uICJcZlBcZklvYmplY3RzXGZQXGZCLmgiXGZQCisoQysrIG9ubHkuKQorVXNlIHRoaXMgcHJhZ21hIGluIGEgbWFpbiBpbnB1dCBmaWxlLCB3aGVuIHlvdSB3YW50IGZ1bGwgb3V0cHV0IGZyb20KK2luY2x1ZGVkIGhlYWRlciBmaWxlcyB0byBiZSBnZW5lcmF0ZWQgKGFuZCBtYWRlIGdsb2JhbGx5IHZpc2libGUpLgorVGhlIGluY2x1ZGVkIGhlYWRlciBmaWxlLCBpbiB0dXJuLCBzaG91bGQgdXNlIGBcfFxjCisuQiAjcHJhZ21hIGludGVyZmFjZVxjCitcJlx8Jy4KK0JhY2t1cCBjb3BpZXMgb2YgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgYW5kCit0aGUgaW50ZXJuYWwgdGFibGVzIHVzZWQgdG8gaW1wbGVtZW50IHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBhbGwKK2dlbmVyYXRlZCBpbiBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKy5TcAorSWYgeW91IHVzZSBgXHxcYworLkIgI3ByYWdtYSBpbXBsZW1lbnRhdGlvblxjCitcJlx8JyB3aXRoIG5vIGFyZ3VtZW50LCBpdCBhcHBsaWVzIHRvIGFuIGluY2x1ZGUgZmlsZSB3aXRoIHRoZSBzYW1lCitiYXNlbmFtZSBhcyB5b3VyIHNvdXJjZSBmaWxlOyBmb3IgZXhhbXBsZSwgaW4gYFx8XGMKKy5CIGFsbGNsYXNzLmNjXGMKK1wmXHwnLCBgXHxcYworLkIgI3ByYWdtYSBpbXBsZW1lbnRhdGlvblxjCitcJlx8JyBieSBpdHNlbGYgaXMgZXF1aXZhbGVudCB0byBgXHxcYworLkIKKyNwcmFnbWEgaW1wbGVtZW50YXRpb24gImFsbGNsYXNzLmgiXGMKK1wmXHwnLiAgVXNlIHRoZSBzdHJpbmcgYXJndW1lbnQgaWYgeW91IHdhbnQgYSBzaW5nbGUgaW1wbGVtZW50YXRpb24KK2ZpbGUgdG8gaW5jbHVkZSBjb2RlIGZyb20gbXVsdGlwbGUgaGVhZGVyIGZpbGVzLgorLlNwCitUaGVyZSBpcyBubyB3YXkgdG8gc3BsaXQgdXAgdGhlIGNvbnRlbnRzIG9mIGEgc2luZ2xlIGhlYWRlciBmaWxlIGludG8KK211bHRpcGxlIGltcGxlbWVudGF0aW9uIGZpbGVzLgorLlNIIEZJTEVTCisubmYKKy50YSBcdydMSUJESVIvZysrXC1pbmNsdWRlICd1CitmaWxlLmMJQyBzb3VyY2UgZmlsZQorZmlsZS5oCUMgaGVhZGVyIChwcmVwcm9jZXNzb3IpIGZpbGUKK2ZpbGUuaQlwcmVwcm9jZXNzZWQgQyBzb3VyY2UgZmlsZQorZmlsZS5DCUMrKyBzb3VyY2UgZmlsZQorZmlsZS5jYwlDKysgc291cmNlIGZpbGUKK2ZpbGUuY3h4CUMrKyBzb3VyY2UgZmlsZQorZmlsZS5tCU9iamVjdGl2ZS1DIHNvdXJjZSBmaWxlCitmaWxlLnMJYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZQorZmlsZS5vCW9iamVjdCBmaWxlCithLm91dAlsaW5rIGVkaXRlZCBvdXRwdXQKK1xmSVRNUERJUlxmUi9jY1woKioJdGVtcG9yYXJ5IGZpbGVzCitcZklMSUJESVJcZlIvY3BwCXByZXByb2Nlc3NvcgorXGZJTElCRElSXGZSL2NjMQljb21waWxlciBmb3IgQworXGZJTElCRElSXGZSL2NjMXBsdXMJY29tcGlsZXIgZm9yIEMrKworXGZJTElCRElSXGZSL2NvbGxlY3QJbGlua2VyIGZyb250IGVuZCBuZWVkZWQgb24gc29tZSBtYWNoaW5lcworXGZJTElCRElSXGZSL2xpYmdjYy5hCUdDQyBzdWJyb3V0aW5lIGxpYnJhcnkKKy9saWIvY3J0WzAxbl0ubwlzdGFydC11cCByb3V0aW5lCitcZklMSUJESVJcZlIvY2NydDAJYWRkaXRpb25hbCBzdGFydC11cCByb3V0aW5lIGZvciBDKysKKy9saWIvbGliYy5hCXN0YW5kYXJkIEMgbGlicmFyeSwgc2VlCisuSVIgaW50cm8gKDMpCisvdXNyL2luY2x1ZGUJc3RhbmRhcmQgZGlyZWN0b3J5IGZvciBcZkIjaW5jbHVkZVxmUCBmaWxlcworXGZJTElCRElSXGZSL2luY2x1ZGUJc3RhbmRhcmQgZ2NjIGRpcmVjdG9yeSBmb3IgXGZCI2luY2x1ZGVcZlAgZmlsZXMKK1xmSUxJQkRJUlxmUi9nKytcLWluY2x1ZGUJYWRkaXRpb25hbCBnKysgZGlyZWN0b3J5IGZvciBcZkIjaW5jbHVkZVxmUAorLlNwCisuZmkKKy5JIExJQkRJUgoraXMgdXN1YWxseQorLkIgL3Vzci9sb2NhbC9saWIvXGMKKy5JUiBtYWNoaW5lIC8gdmVyc2lvbiAuCisuYnIKKy5JIFRNUERJUgorY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKy5CIFRNUERJUgorKGRlZmF1bHQKKy5CIC91c3IvdG1wCitpZiBhdmFpbGFibGUsIGVsc2UKKy5CIC90bXBcYworXCYpLgorLlNIICJTRUUgQUxTTyIKK2NwcCgxKSwgYXMoMSksIGxkKDEpLCBnZGIoMSksIGFkYigxKSwgZGJ4KDEpLCBzZGIoMSkuCisuYnIKKy5SQiAiYFx8IiBnY2MgIlx8JywgYFx8IiBjcHAgXHwnLAorLlJCICJgXHwiIGFzICJcfCcsIGBcfCIgbGQgXHwnLAorYW5kCisuUkIgYFx8IGdkYiBcfCcKK2VudHJpZXMgaW4KKy5CIGluZm9cYworXCYuCisuYnIKKy5JCitVc2luZyBhbmQgUG9ydGluZyBHTlUgQ0MgKGZvciB2ZXJzaW9uIDIuMClcYworLCBSaWNoYXJkIE0uIFN0YWxsbWFuOworLkkKK1RoZSBDIFByZXByb2Nlc3NvclxjCissIFJpY2hhcmQgTS4gU3RhbGxtYW47CisuSQorRGVidWdnaW5nIHdpdGggR0RCOiB0aGUgR05VIFNvdXJjZS1MZXZlbCBEZWJ1Z2dlclxjCissIFJpY2hhcmQgTS4gU3RhbGxtYW4gYW5kIFJvbGFuZCBILiBQZXNjaDsKKy5JCitVc2luZyBhczogdGhlIEdOVSBBc3NlbWJsZXJcYworLCBEZWFuIEVsc25lciwgSmF5IEZlbmxhc29uICYgZnJpZW5kczsKKy5JCitsZDogdGhlIEdOVSBsaW5rZXJcYworLCBTdGV2ZSBDaGFtYmVybGFpbiBhbmQgUm9sYW5kIFBlc2NoLgorLlNIIEJVR1MKK0ZvciBpbnN0cnVjdGlvbnMgb24gcmVwb3J0aW5nIGJ1Z3MsIHNlZSB0aGUgR0NDIG1hbnVhbC4KKy5TSCBDT1BZSU5HCitDb3B5cmlnaHQKKy5pZiB0IFwoY28KKzE5OTEsIDE5OTIsIDE5OTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBtYWtlIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZgordGhpcyBtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKK2FyZSBwcmVzZXJ2ZWQgb24gYWxsIGNvcGllcy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciB2ZXJiYXRpbSBjb3B5aW5nLCBwcm92aWRlZCB0aGF0IHRoZQorZW50aXJlIHJlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEKK3Blcm1pc3Npb24gbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMKK21hbnVhbCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZAordmVyc2lvbnMsIGV4Y2VwdCB0aGF0IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgbWF5IGJlIGluY2x1ZGVkIGluCit0cmFuc2xhdGlvbnMgYXBwcm92ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbnN0ZWFkIG9mIGluCit0aGUgb3JpZ2luYWwgRW5nbGlzaC4KKy5TSCBBVVRIT1JTCitTZWUgdGhlIEdOVSBDQyBNYW51YWwgZm9yIHRoZSBjb250cmlidXRvcnMgdG8gR05VIENDLgpkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCmluZGV4IDk2ODA5NzcuLjIwMjdkMjggMTAwNjQ0Ci0tLSBhL2djYy9nY2MuYworKysgYi9nY2MvZ2NjLmMKQEAgLTQzMDIsNiArNDMwMiwxMSBAQAogICAgIHNpZ25hbCAoU0lHUElQRSwgZmF0YWxfZXJyb3IpOwogI2VuZGlmCiAKKyAgeyAvKiBXYXJuIHVzZXJzIHRoZXkgYXJlIHVzaW5nIGRldmVsb3BtZW50YWwgc29mdHdhcmUuICAqLworICAgIHN0YXRpYyB2b2lkIHNuYXBzaG90X3dhcm5pbmcgKCk7CisgICAgc25hcHNob3Rfd2FybmluZyAoKTsKKyAgfQorCiAgIGFyZ2J1Zl9sZW5ndGggPSAxMDsKICAgYXJnYnVmID0gKGNoYXIgKiopIHhtYWxsb2MgKGFyZ2J1Zl9sZW5ndGggKiBzaXplb2YgKGNoYXIgKikpOwogCkBAIC01NDQxLDMgKzU0NDYsNTggQEAKICAgICAgICsrcDsKICAgICB9CiB9CisMCisvKiBGb3Igc25hcHNob3RzIG9ubHkuCisgICBXYXJuIHRoZSB1c2VyIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIGdjYyBpcyBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcGluZyBvbmx5LgorICAgSWYgdGhpcyBpcyB1bml4LCB3ZSBjYW4gcmVzdHJpY3QgdGhlIHdhcm5pbmcgdG8gb25jZSBwZXIgZGF5LgorICAgT3RoZXJ3aXNlIGFsd2F5cyBpc3N1ZSBpdC4gICovCisKKyNkZWZpbmUgVElNRVNUQU1QX0ZJTEUgIi5nY2MtdGVzdC10aW1lIgorI2RlZmluZSBPTkVfREFZICgyNCo2MCo2MCkKKworc3RhdGljIHZvaWQKK3NuYXBzaG90X3dhcm5pbmcgKCkKK3sKKyAgY2hhciAqaG9tZTsKKyAgaW50IHByaW50X3AgPSAxOworCisjaWZkZWYgdW5peAorICBob21lID0gZ2V0ZW52ICgiSE9NRSIpOworICBpZiAoaG9tZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNoYXIgKmZpbGVfbmFtZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChob21lKSArIDEgKyBzaXplb2YgKFRJTUVTVEFNUF9GSUxFKSk7CisgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAgICAgdGltZV90IG5vdyA9IHRpbWUgKE5VTEwpOworICAgICAgaW50IHM7CisKKyAgICAgIHNwcmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgaG9tZSwgVElNRVNUQU1QX0ZJTEUpOworICAgICAgcyA9IHN0YXQgKGZpbGVfbmFtZSwgJnN0YXRidWYpOworICAgICAgaWYgKHMgPT0gMAorCSAgJiYgKHN0YXRidWYuc3RfbXRpbWUgKyBPTkVfREFZID4gbm93KSkKKwlwcmludF9wID0gMDsKKyAgICAgIGVsc2UKKwl7CisJICBGSUxFICpmOworCisJICBpZiAoKGYgPSBmb3BlbiAoZmlsZV9uYW1lLCAidyIpKSA9PSBOVUxMKQorCSAgICB7CisJICAgICAgLyogRW5zdXJlIHdlIGhhdmUgd3JpdGUgYWNjZXNzLiAgKi8KKwkgICAgICBjaG1vZCAoZmlsZV9uYW1lLCBzID09IDAgPyAoc3RhdGJ1Zi5zdF9tb2RlICsgMDIwMCkgOiAwNjQ0KTsKKwkgICAgICBmID0gZm9wZW4gKGZpbGVfbmFtZSwgInciKTsKKwkgICAgfQorCSAgaWYgKGYgIT0gTlVMTCkKKwkgICAgeworCSAgICAgIGZwdXRjICgnXG4nLCBmKTsKKwkgICAgICBmY2xvc2UgKGYpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgIGlmIChwcmludF9wKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIioqKiBUaGlzIGlzIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgR0NDLlxuIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIqKiogSXQgaXMgbm90IHJlbGlhYmxlIHJlbGVhc2UsIGFuZCB0aGUgR0NDIGRldmVsb3BlcnNcbiIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiKioqIHdhcm4geW91IG5vdCB0byB1c2UgaXQgZm9yIGFueXRoaW5nIGV4Y2VwdCB0byB0ZXN0IGl0LlxuIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL2djYy5obHAgYi9nY2MvZ2NjLmhscApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmExMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2djYy5obHAKQEAgLTAsMCArMSw0MDYgQEAKKzEgR0NDCisKKyBUaGUgR0NDIGNvbW1hbmQgaW52b2tlcyB0aGUgR05VIEMgY29tcGlsZXIuCisKKyAgICAgICBHQ0MgZmlsZS1zcGVjCisKKzIgUGFyYW1ldGVycworCisgZmlsZS1zcGVjCisKKyBBIEMgc291cmNlIGZpbGUuICBJZiBubyBpbnB1dCBmaWxlICBleHRlbnNpb24gIGlzICBzcGVjaWZpZWQsICBHTlUgIEMKKyBhc3N1bWVzICAuQyAgYXMgIHRoZSAgZGVmYXVsdCBleHRlbnNpb24gdW5sZXNzIHRoZSAvUExVUyBxdWFsaWZpZXIgaXMKKyBnaXZlbiwgaW4gd2hpY2ggY2FzZSAuQ0MgaXMgYXNzdW1lZCBhcyB0aGUgZGVmYXVsdCBleHRlbnNpb24uCisKKyBJZiBhbiBleHRlbnNpb24gb2YgLkNQUCBpcyBnaXZlbiwgdGhlbiB0aGUgc291cmNlIGZpbGUgaXMgYXNzdW1lZCAgdG8KKyBiZSAgdGhlICBvdXRwdXQgb2YgdGhlIHByZXByb2Nlc3NvciwgYW5kIHRodXMgdGhlIHByZXByb2Nlc3NvciBpcyBub3QKKyBleGVjdXRlZC4KKworIElmIGFuIGV4dGVuc2lvbiBvZiAuUyBpcyBnaXZlbiwgdGhlbiB0aGUgc291cmNlIGZpbGUgaXMgYXNzdW1lZCB0byBiZQorIHRoZSAgYXNzZW1ibHkgIGNvZGUgb3V0cHV0IG9mIHRoZSBjb21waWxlciwgYW5kIG9ubHkgdGhlIGFzc2VtYmxlciBpcworIGNhbGxlZCB0byBnZW5lcmF0ZSBhbiBvYmplY3QgZmlsZS4KKworMiBRdWFsaWZpZXJzCisKKyBHTlUgQyBjb21tYW5kIHF1YWxpZmllcnMgbW9kaWZ5IHRoZSAgd2F5ICB0aGUgIGNvbXBpbGVyICBoYW5kbGVzICB0aGUKKyBjb21waWxhdGlvbi4KKworIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHF1YWxpZmllcnMgZm9yIEdOVSBDOgorCisgICAgICAgL0NBU0VfSEFDSworICAgICAgIC9DQzFfT1BUSU9OUz0ob3B0aW9uIFssb3B0aW9uLi4uXV0pCisgICAgICAgL0RFQlVHCisgICAgICAgL0RFRklORT0oaWRlbnRpZmllcls9ZGVmaW5pdGlvbl1bLC4uLl0pCisgICAgICAgL0dfRkxPQVQKKyAgICAgICAvSU5DTFVERV9ESVJFQ1RPUlk9KHBhdGggWyxwYXRoLi4uXV0pCisgICAgICAgL0xJU1RbPWZpbGVuYW1lXQorICAgICAgIC9NQUNISU5FX0NPREUKKyAgICAgICAvT0JKRUNUWz1maWxlbmFtZV0KKyAgICAgICAvT1BUSU1JWkUKKyAgICAgICAvUExVUworICAgICAgIC9QUk9GSUxFWz1pZGVudGlmaWVyXQorICAgICAgIC9TQ0FOPShmaWxlWyxmaWxlLi4uXSkKKyAgICAgICAvU0hPV1s9b3B0aW9uXQorICAgICAgIC9VTkRFRklORT0oaWRlbnRpZmllclssaWRlbnRpZmllciwuLi5dKQorICAgICAgIC9WRVJCT1NFCisgICAgICAgL1ZFUlNJT04KKyAgICAgICAvV0FSTklORworCisyIExpbmtpbmcKKworIFdoZW4gbGlua2luZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIEdOVSBDLCB5b3Ugc2hvdWxkIGluY2x1ZGUgdGhlIEdOVQorIEMgbGlicmFyeSBiZWZvcmUgdGhlIFZBWCBDIGxpYnJhcnkuICBGb3IgZXhhbXBsZSwKKworICAgTElOSyBvYmplY3QtZmlsZSxHTlVfQ0M6WzAwMDAwMF1HQ0NMSUIvTElCLFNZUyRMSUJSQVJZOlZBWENSVEwvTElCCisKKyBZb3UgY2FuIGFsc28gbGluayB5b3VyIHByb2dyYW0gd2l0aCB0aGUgc2hhcmVkIFZBWCBDICBsaWJyYXJ5LiAgIFRoaXMKKyBjYW4gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSAuRVhFIGZpbGUsIGFzIHdlbGwgYXMgbWFrZSBpdCBzbWFsbGVyIHdoZW4KKyBpdCdzIHJ1bm5pbmcuICBGb3IgZXhhbXBsZSwKKworICAgJCBMSU5LIG9iamVjdC1maWxlLCBHTlVfQ0M6WzAwMDAwMF1HQ0NMSUIvTElCLFNZUyRJTlBVVC9PUFQKKyAgIFNZUyRTSEFSRTpWQVhDUlRML1NIQVJFCisKKyAoSWYgeW91IHVzZSB0aGUgc2Vjb25kIGV4YW1wbGUgYW5kIHR5cGUgaXQgaW4gYnkgIGhhbmQsICBiZSAgc3VyZSAgdG8KKyB0eXBlIF5aIGFmdGVyIHRoZSBsYXN0IGNhcnJpYWdlIHJldHVybikuICBBIHNpbXBsZXIgYWx0ZXJuYXRpdmUgd291bGQKKyBiZSB0byBwbGFjZSB0aGUgc2luZ2xlIGxpbmU6CisKKyAgIFNZUyRTSEFSRTpWQVhDUlRML1NIQVJFCisKKyBpbnRvIGEgZmlsZSBjYWxsZWQgVkFYQ1JUTC5PUFQsIGFuZCB0aGVuIHVzZSB0aGUgbGluayBjb21tYW5kOgorCisgICAkIExJTksgb2JqZWN0LWZpbGUsIEdOVV9DQzpbMDAwMDAwXUdDQ0xJQi9MSUIsVkFYQ1JUTC5PUFQvT1BUCisKKyBJZiBhIHByb2dyYW0gaGFzICBiZWVuICBjb21waWxlZCAgd2l0aCAgL0dfRkxPQVQsICB0aGVuICB0aGUgIGxpbmtpbmcKKyBpbnN0cnVjdGlvbnMgIGFyZSAgc2xpZ2h0bHkgIGRpZmZlcmVudC4gICBJZiB5b3UgYXJlIGxpbmtpbmcgd2l0aCB0aGUKKyBub24tc2hhcmVkIGxpYnJhcnksIHRoZW4gdGhlIGNvbW1hbmQgdGhhdCB5b3Ugc2hvdWxkIHVzZSB3b3VsZCBiZToKKworICAgTElOSyBvYmplY3QtZmlsZSxHTlVfQ0M6WzAwMDAwMF1HQ0NMSUIvTElCLFNZUyRMSUJSQVJZOlZBWENSVExHL0xJQiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxTWVMkTElCUkFSWTpWQVhDUlRML0xJQgorCisgTm90ZSB0aGF0IGJvdGggVkFYQ1JUTCBhbmQgVkFYQ1JUTEcgbXVzdCBiZSBsaW5rZWQgdG8uICAgSWYgIHlvdSAgYXJlCisgdXNpbmcgdGhlIHNoYXJlZCBWQVggQyBsaWJyYXJ5LCB0aGVuIHlvdSBzaG91bGQgdXNlIGEgY29tbWFuZCBsaWtlOgorCisgICAkIExJTksgb2JqZWN0LWZpbGUsIEdOVV9DQzpbMDAwMDAwXUdDQ0xJQi9MSUIsU1lTJElOUFVUOi9PUFRJT05TCisgICBTWVMkU0hBUkU6VkFYQ1JUTEcvU0hBUkUKKworIEluIHRoZSBjYXNlIG9mIHRoZSBzaGFyYWJsZSBsaWJyYXJ5LCBvbmx5IG9uZSAgbGlicmFyeSAgbmVlZHMgIHRvICBiZQorIGxpbmtlZCB0by4KKworIElmIHlvdSBuZWVkIHRvIGxpbmsgdG8gbGliZysrLCBpdCAgaXMgIGVhc2llc3QgIHRvICB1c2UgIHRoZSAgY29tbWFuZAorIHByb2NlZHVyZSBzdXBwbGllZCB3aXRoIGxpYmcrKyB0byBsaW5rIHlvdXIgcHJvZ3JhbS4KKworMiAvQ0FTRV9IQUNLCisKKyAgIC9bTk9dQ0FTRV9IQUNLICAgICAgRD0vQ0FTRV9IQUNLCisKKyBTaW5jZSB0aGUgVk1TIExpbmtlciAgYW5kICBMaWJyYXJpYW4gIGFyZSAgbm90ICBjYXNlICBzZW5zaXRpdmUgIHdpdGgKKyByZXNwZWN0ICB0byAgc3ltYm9sIG5hbWVzLCBhICJjYXNlLWhhY2siIGlzIGFwcGVuZGVkIHRvIGEgc3ltYm9sIG5hbWUKKyB3aGVuIHRoZSBzeW1ib2wgY29udGFpbnMgdXBwZXIgY2FzZSBjaGFyYWN0ZXJzLgorCisgVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgdW5kZXNpcmFibGUsIChtYWlubHkgd2hlbiB1c2luZyBjZXJ0YWluCisgYXBwbGljYXRpb25zICB3aGVyZSBtb2R1bGVzIGhhdmUgYmVlbiBwcmVjb21waWxlZCwgcGVyaGFwcyBpbiBhbm90aGVyCisgbGFuZ3VhZ2UpIGFuZCB3ZSB3YW50IHRvIGNvbXBpbGUgIHdpdGhvdXQgIGNhc2UgIGhhY2tpbmcuICAgSW4gIHRoZXNlCisgY2FzZXMgdGhlIC9OT0NBU0VfSEFDSyBzd2l0Y2ggZGlzYWJsZXMgY2FzZSBoYWNraW5nLgorCisyIC9DQzFfT1BUSU9OUworCisgVGhpcyBzcGVjaWZpZXMgYWRkaXRpb25hbCAgc3dpdGNoZXMgIHRvICB0aGUgIGNvbXBpbGVyICBpdHNlbGYgIHdoaWNoCisgY2Fubm90IGJlIHNldCBieSBtZWFucyBvZiB0aGUgY29tcGlsZXIgZHJpdmVyLgorCisyIC9ERUJVRworCisgL0RFQlVHIGluY2x1ZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIG9iamVjdCBmaWxlICBvdXRwdXQgIHNvCisgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgZGVidWdnZWQgd2l0aCB0aGUgVkFYIFN5bWJvbGljIERlYnVnZ2VyLgorCisgVG8gdXNlIHRoZSBkZWJ1Z2dlciBpdCBpcyBhbHNvIG5lY2Vzc2FyeSB0byBsaW5rIHRoZSBkZWJ1Z2dlciB0byB5b3VyCisgcHJvZ3JhbSwgd2hpY2ggaXMgZG9uZSBieSBzcGVjaWZ5aW5nIHRoZSAvREVCVUcgcXVhbGlmaWVyIHRvIHRoZSBsaW5rCisgY29tbWFuZC4gIFdpdGggdGhlICBkZWJ1Z2dlciAgaXQgIGlzICBwb3NzaWJsZSAgdG8gIHNldCAgYnJlYWtwb2ludHMsCisgZXhhbWluZSAgdmFyaWFibGVzLCAgYW5kICBzZXQgIHZhcmlhYmxlcyAgdG8gbmV3IHZhbHVlcy4gIFNlZSB0aGUgVkFYCisgU3ltYm9saWMgRGVidWdnZXIgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLCBvciAgdHlwZSAgIkhFTFAiICBmcm9tCisgdGhlIGRlYnVnZ2VyIHByb21wdC4KKworMiAvREVGSU5FCisKKyAvREVGSU5FPShpZGVudGlmaWVyWz1kZWZpbml0aW9uXVssLi4uXSkKKworIC9ERUZJTkUgZGVmaW5lcyBhIHN0cmluZyBvciBtYWNybyAoJ2RlZmluaXRpb24nKSAgdG8gIGJlICBzdWJzdGl0dXRlZAorIGZvciAgZXZlcnkgIG9jY3VycmVuY2Ugb2YgYSBnaXZlbiBzdHJpbmcgKCdpZGVudGlmaWVyJykgaW4gYSBwcm9ncmFtLgorIEl0IGlzIGVxdWl2YWxlbnQgdG8gdGhlICNkZWZpbmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KKworIEFsbCBkZWZpbml0aW9ucyBhbmQgaWRlbnRpZmllcnMgYXJlICBjb252ZXJ0ZWQgIHRvICB1cHBlcmNhc2UgIHVubGVzcworIHRoZXkgYXJlIGluIHF1b3RhdGlvbiBtYXJrcy4KKworIFRoZSBzaW1wbGUgZm9ybSBvZiB0aGUgL0RFRklORSBxdWFsaWZpZXI6CisKKyAgICAvREVGSU5FPXZtcworCisgcmVzdWx0cyBpbiBhIGRlZmluaXRpb24gZXF1aXZhbGVudCB0byB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZToKKworICAjZGVmaW5lIFZNUyAxCisKKyBZb3UgbXVzdCBlbmNsb3NlIG1hY3JvIGRlZmluaXRpb25zIGluIHF1b3RhdGlvbiAgbWFya3MsICBhcyAgaW4gIHRoaXMKKyBleGFtcGxlOgorCisgIC9ERUZJTkU9IkMoeCk9KCh4KSAmIDB4ZmYpIgorCisgVGhpcyBkZWZpbml0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbjoKKworICAjZGVmaW5lIEMoeCkgKCh4KSAmIDB4ZmYpCisKKyBJZiBtb3JlIHRoYW4gb25lIC9ERUZJTkUgaXMgcHJlc2VudCBvbiB0aGUgR0NDIGNvbW1hbmQgbGluZSwgb25seSB0aGUKKyBsYXN0IC9ERUZJTkUgaXMgdXNlZC4KKworIElmIGJvdGggL0RFRklORSBhbmQgL1VOREVGSU5FIGFyZSBwcmVzZW50IG9uIGEgY29tbWFuZCBsaW5lLCAgL0RFRklORQorIGlzIGV2YWx1YXRlZCBiZWZvcmUgL1VOREVGSU5FLgorCisyIC9HX0ZMT0FUCisKKyBJbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvIHVzZSAiRyIgZmxvYXRpbmcgcG9pbnQgIGFyaXRobWV0aWMgIGluc3RlYWQKKyBvZiAgIkQiLiAgIFRoZSAgZGlmZmVyZW5jZSAgaXMgIHRoYXQgIGRvdWJsZSBwcmVjaXNpb24gaGFzIGEgcmFuZ2Ugb2YKKyBhcHByb3hpbWF0ZWx5ICsvLTAuNTZlLTMwOCB0byArLy0wLjkgIGUrMzA4LCAgd2l0aCAgYXBwcm94aW1hdGVseSAgMTUKKyBkZWNpbWFsIGRpZ2l0cyBwcmVjaXNpb24uCisKKyAiRCIgZmxvYXRpbmcgcG9pbnQgaGFzIHRoZSBzYW1lIHJhbmdlIGFzICBzaW5nbGUgIHByZWNpc2lvbiAgZmxvYXRpbmcKKyBwb2ludCwgd2l0aCBhcHByb3hpbWF0ZWx5IDE3IGRlY2ltYWwgZGlnaXRzIHByZWNpc2lvbi4KKworIElmIHlvdSB1c2UgdGhlICAvR19GTE9BVCAgcXVhbGlmaWVyLCAgdGhlICBsaW5raW5nICBpbnN0cnVjdGlvbnMgIGFyZQorIGRpZmZlcmVudC4gIFNlZSAiTGlua2luZyIgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworMiAvTElTVAorCisgL0xJU1RbPWxpc3RfZmlsZV9uYW1lXQorCisgVGhpcyBkb2VzIG5vdCBnZW5lcmF0ZSBhIGxpc3RpbmcgZmlsZSBpbiB0aGUgdXN1YWwgc2Vuc2UsIGhvd2V2ZXIgIGl0CisgZG9lcyAgZGlyZWN0IHRoZSBjb21waWxlciB0byBzYXZlIHRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0LiAgSWYgYSBmaWxlCisgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGlzIG91dHB1dCBpcyB3cml0dGVuIGludG8gYSAgZmlsZSAgd2l0aCAgdGhlCisgc2FtZSBuYW1lIGFzIHRoZSBzb3VyY2UgZmlsZSBhbmQgYW4gZXh0ZW5zaW9uIG9mIC5DUFAuCisKKzIgL0lOQ0xVREVfRElSRUNUT1JZCisKKyAgL0lOQ0xVREVfRElSRUNUT1JZPShwYXRoIFsscGF0aC4uLl0pCisKKyBUaGUgL0lOQ0xVREVfRElSRUNUT1JZIHF1YWxpZmllciBwcm92aWRlcyBhZGRpdGlvbmFsICBkaXJlY3RvcmllcyAgdG8KKyBzZWFyY2ggIGZvciAgdXNlci1kZWZpbmVkICBpbmNsdWRlICBmaWxlcy4gICAncGF0aCcgIGNhbiAgYmUgZWl0aGVyIGEKKyBsb2dpY2FsIG5hbWUgb3IgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKworIFRoZXJlICBhcmUgIHR3byAgZm9ybXMgIGZvciAgc3BlY2lmeWluZyAgaW5jbHVkZSAgZmlsZXMgIC0gICAjaW5jbHVkZQorICJmaWxlLXNwZWMiICBhbmQgICNpbmNsdWRlIDxmaWxlLXNwZWM+LiAgRm9yIHRoZSAjaW5jbHVkZSAiZmlsZS1zcGVjIgorIGZvcm0sIHRoZSBzZWFyY2ggb3JkZXIgaXM6CisKKyAgMS4gIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGZpbGUuCisKKyAgMi4gIFRoZSBkaXJlY3RvcmllcyBpbiB0aGUgL0lOQ0xVREUgcXVhbGlmaWVyIChpZiBhbnkpLgorCisgIDMuICBUaGUgZGlyZWN0b3J5IChvciBkaXJlY3Rvcmllcykgc3BlY2lmaWVkIGluIHRoZSBsb2dpY2FsIG5hbWUKKyAgICAgIEdOVV9DQ19JTkNMVURFLgorCisgIDQuICBUaGUgZGlyZWN0b3J5IChvciBkaXJlY3Rvcmllcykgc3BlY2lmaWVkIGluIHRoZSBsb2dpY2FsIG5hbWUKKyAgICAgIFNZUyRMSUJSQVJZLgorCisgIEZvciB0aGUgI2luY2x1ZGUgPGZpbGUtc3BlYz4gZm9ybSwgdGhlIHNlYXJjaCBvcmRlciBpczoKKworICAxLiAgVGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUgL0lOQ0xVREUgcXVhbGlmaWVyIChpZiBhbnkpLgorCisgIDIuICBUaGUgZGlyZWN0b3J5IChvciBkaXJlY3Rvcmllcykgc3BlY2lmaWVkIGluIHRoZSBsb2dpY2FsIG5hbWUKKyAgICAgIEdOVV9DQ19JTkNMVURFLgorCisgIDMuICBUaGUgZGlyZWN0b3J5IChvciBkaXJlY3Rvcmllcykgc3BlY2lmaWVkIGluIHRoZSBsb2dpY2FsIG5hbWUKKyAgICAgIFNZUyRMSUJSQVJZLgorCisyIC9NQUNISU5FX0NPREUKKworIFRlbGxzIEdOVSBDIHRvIG91dHB1dCB0aGUgbWFjaGluZSBjb2RlICBnZW5lcmF0ZWQgIGJ5ICB0aGUgIGNvbXBpbGVyLgorIFRoZSAgbWFjaGluZSBjb2RlIGlzIG91dHB1dCB0byBhIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBpbnB1dAorIGZpbGUsIHdpdGggdGhlIGV4dGVuc2lvbiAuUy4gIEFuICBvYmplY3QgIGZpbGUgIGlzICBzdGlsbCAgZ2VuZXJhdGVkLAorIHVubGVzcyAvTk9PQkogaXMgYWxzbyBzcGVjaWZpZWQuCisKKzIgL09CSkVDVAorCisgICAvT0JKRUNUWz1maWxlbmFtZV0KKyAgIC9OT09CSkVDVAorCisgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBmaWxlICBpcyAgZ2VuZXJhdGVkICBieSAgdGhlCisgY29tcGlsZXIuCisKKzIgL09QVElNSVpFCisKKyAvW05PXU9QVElNSVpFCisKKyBDb250cm9scyB3aGV0aGVyIG9wdGltaXphdGlvbiAgaXMgIHBlcmZvcm1lZCAgYnkgIHRoZSAgY29tcGlsZXIuICAgQnkKKyBkZWZhdWx0LCBvcHRpbWl6YXRpb24gaXMgb24uICAvTk9PUFRJTUlaRSB0dXJucyBvcHRpbWl6YXRpb24gb2ZmLgorCisyIC9QTFVTCisKKyBJbnN0cnVjdHMgdGhlIGNvbXBpbGVyIGRyaXZlciB0byB1c2UgdGhlIEdOVS1DKysgY29tcGlsZXIgaW5zdGVhZCAgb2YKKyB0aGUgIEdOVS1DIGNvbXBpbGVyLiAgTm90ZSB0aGF0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBvZiBzb3VyY2UgZmlsZXMKKyBpcyAuQ0Mgd2hlbiB0aGlzIHF1YWxpZmllciBpcyBpbiBlZmZlY3QuCisKKzIgL1BST0ZJTEUKKworIC9QUk9GSUxFWz1pZGVudGlmaWVyXQorCisgSW5zdHJ1Y3RzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBmdW5jdGlvbiBwcm9maWxpbmcgY29kZS4gIFlvdSBtdXN0CisgbGluayAgeW91ciAgcHJvZ3JhbSAgdG8gIHRoZSBwcm9maWxlciB3aGVuIHlvdSB1c2UgdGhpcyBvcHRpb25zLiAgVGhlCisgcHJvZmlsZSBzdGF0aXN0aWNzIGFyZSBhdXRvbWF0aWNhbGx5ICBwcmludGVkICBvdXQgIG9uICB0aGUgIHRlcm1pbmFsCisgZHVyaW5nICBpbWFnZSAgZXhpdC4gIChpLmUuICBubyBtb2RpZmljYXRpb25zIHRvIHlvdXIgc291cmNlIGZpbGUgYXJlCisgcmVxdWlyZWQgaW4gb3JkZXIgdG8gdXNlIHRoZSBwcm9maWxlcikuCisKKyBUaGVyZSBhcmUgdGhyZWUgaWRlbnRpZmllcnMgIHRoYXQgIGNhbiAgYmUgIHVzZWQgIHdpdGggIHRoZSAgL1BST0ZJTEUKKyBzd2l0Y2guICAgVGhlc2UgIGFyZSAgQUxMLCBGVU5DVElPTiwgYW5kIEJMT0NLLiAgSWYgL1BST0ZJTEUgaXMgZ2l2ZW4KKyB3aXRob3V0IGFuIGlkZW50aWZpZXIsIHRoZW4gRlVOQ1RJT04gaXMgYXNzdW1lZC4KKworMyBCbG9ja19Qcm9maWxlcgorCisgVGhlIGJsb2NrIHByb2ZpbGVyIGNvdW50cyBob3cgIG1hbnkgIHRpbWVzICBjb250cm9sICBvZiAgdGhlICBwcm9ncmFtCisgcGFzc2VzIGNlcnRhaW4gcG9pbnRzIGluIHlvdXIgcHJvZ3JhbS4gIFRoaXMgaXMgdXNlZnVsIGluIGRldGVybWluaW5nCisgd2hpY2ggIHBvcnRpb25zICBvZiAgYSAgcHJvZ3JhbSAgd291bGQgIGJlbmVmaXQgIGZyb20gIHJlY29kaW5nICAgZm9yCisgb3B0aW1pemF0aW9uLgorCisgVGhlIHJlcG9ydCBmb3IgdGhlIGJsb2NrIHByb2ZpbGVyIGNvbnRhaW5zIHRoZSAgZnVuY3Rpb24gIG5hbWUsICBmaWxlCisgbmFtZSwgUEMsIGFuZCB0aGUgc291cmNlIGZpbGUgbGluZSBudW1iZXIgYXMgd2VsbCBhcyB0aGUgY291bnQgb2YgaG93CisgbWFueSB0aW1lcyBjb250cm9sIGhhcyBwYXNzZWQgdGhyb3VnaCB0aGUgc3BlY2lmaWVkIHNvdXJjZSBsaW5lLgorCiszIEZ1bmN0aW9uX1Byb2ZpbGVyCisKKyBUaGUgZnVuY3Rpb24gcHJvZmlsZXIgY291bnRzIGhvdyBtYW55IHRpbWVzIGVhY2ggZnVuY3Rpb24gaXMgZW50ZXJlZCwKKyBhbmQga2VlcHMgdHJhY2sgb2YgaG93IG11Y2ggQ1BVIHRpbWUgaXMgdXNlZCB3aXRoaW4gZWFjaCBmdW5jdGlvbi4KKworIFlvdSBzaG91bGQgYmUgY2FyZWZ1bCBhYm91dCAgaW50ZXJwcmV0aW5nICB0aGUgIHJlc3VsdHMgIG9mICBwcm9maWxlcworIHdoZXJlICB0aGVyZSAgYXJlICBpbmxpbmUgIGZ1bmN0aW9ucy4gIFdoZW4gYSBmdW5jdGlvbiBpcyBpbmNsdWRlZCBhcworIGlubGluZSwgdGhlbiB0aGVyZSBpcyBubyBjYWxsIHRvIHRoZSBpbnRlcm5hbCBkYXRhIGNvbGxlY3Rpb24gcm91dGluZQorIHVzZWQgIGJ5ICB0aGUgIHByb2ZpbGVyLCAgYW5kICB0aHVzICB0aGVyZSAgd2lsbCBiZSBubyByZWNvcmQgb2YgdGhpcworIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gIFRoZSBjb21waWxlciBkb2VzIGdlbmVyYXRlIGEgY2FsbGFibGUgdmVyc2lvbgorIG9mIGVhY2ggaW5saW5lIGZ1bmN0aW9uLCBhbmQgaWYgdGhpcyBjYWxsZWQgdmVyc2lvbiBpcyB1c2VkLCB0aGVuIHRoZQorIHByb2ZpbGVyJ3MgZGF0YSBjb2xsZWN0aW9uIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQuCisKKzIgL1NDQU4KKworIC9TQ0FOPShmaWxlWyxmaWxlLi4uXSkKKworIFRoaXMgcXVhbGlmaWVyIHN1cHBsaWVzIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHdpbGwgYmUgcmVhZCAgYXMgIGlucHV0LAorIGFuZCAgdGhlIG91dHB1dCB3aWxsIGJlIGRpc2NhcmRlZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcmVndWxhciBpbnB1dAorIGZpbGUuICBCZWNhdXNlIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbGVzIGlzIGRpc2NhcmRlZCwgIHRoZQorIG9ubHkgIGVmZmVjdCAgb2YgIHRoaXMgcXVhbGlmaWVyIGlzIHRvIG1ha2UgdGhlIG1hY3JvcyBkZWZpbmVkIGluIHRoZQorIGZpbGVzIGF2YWlsYWJsZSBmb3IgdXNlIGluIHRoZSBtYWluIGlucHV0LgorCisyIC9TSE9XCisKKyAvU0hPV1s9b3B0aW9uXQorCisgVGhpcyBjYXVzZXMgdGhlIHByZXByb2Nlc3NvciB0byBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBvdGhlciAgdGhhbiAgdGhlCisgcHJlcHJvY2Vzc2VkICBpbnB1dCAgZmlsZS4gICBXaGVuIHRoaXMgcXVhbGlmaWVyIGlzIHVzZWQsIG5vIGFzc2VtYmx5CisgY29kZSBhbmQgbm8gb2JqZWN0IGZpbGUgaXMgZ2VuZXJhdGVkLgorCisgVGhlIG91dHB1dCBvZiB0aGUgcHJlcHJvY2Vzc29yIGlzIHBsYWNlZCBpbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlCisgL0xJU1QgIHF1YWxpZmllciwgaWYgcHJlc2VudC4gIElmIHRoZSAvTElTVCBxdWFsaWZpZXIgaXMgbm90IHByZXNlbnQsCisgdGhlbiB0aGUgb3V0cHV0IGlzIHBsYWNlZCBpbiBhIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzICB0aGUgIGlucHV0CisgZmlsZSAgd2l0aCAgYW4gIGV4dGVuc2lvbiAgdGhhdCAgZGVwZW5kcyAgdXBvbiAgd2hpY2ggIG9wdGlvbiB0aGF0IGlzCisgc2VsZWN0ZWQuCisKKzMgREVGSU5JVElPTlMKKworIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgcHJlcHJvY2Vzc29yIHRvIGR1bXAgYSAgbGlzdCAgb2YgIGFsbCAgb2YgIHRoZQorIGRlZmluaXRpb25zICB0byAgdGhlICBvdXRwdXQgIGZpbGUuICAgVGhpcyAgaXMgIHVzZWZ1bCAgZm9yIGRlYnVnZ2luZworIHB1cnBvc2VzLCBzaW5jZSBpdCBsZXRzIHlvdSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgIGV2ZXJ5dGhpbmcgIGhhcworIGJlZW4gZGVmaW5lZCBwcm9wZXJseS4KKworIElmIHRoZSBkZWZhdWx0IGZpbGUgbmFtZSBpcyB1c2VkIGZvciB0aGUgb3V0cHV0LCB0aGUgIGV4dGVuc2lvbiAgd2lsbAorIGJlIC5ERUYuCisKKzMgUlVMRVMKKworIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgcHJlcHJvY2Vzc29yIHRvIG91dHB1dCAgYSAgcnVsZSAgc3VpdGFibGUgIGZvcgorIE1BS0UsICBkZXNjcmliaW5nICB0aGUgIGRlcGVuZGVuY2llcyAgb2YgIHRoZSAgbWFpbiBzb3VyY2UgZmlsZS4gIFRoZQorIHByZXByb2Nlc3NvciBvdXRwdXRzIG9uZSBNQUtFIHJ1bGUgY29udGFpbmluZyB0aGUgIG9iamVjdCAgZmlsZSAgbmFtZQorIGZvciAgdGhhdCAgc291cmNlICBmaWxlLCAgYSBjb2xvbiwgYW5kIHRoZSBuYW1lcyBvZiBhbGwgdGhlIGNvbmNsdWRlZAorIGZpbGVzLiAgSWYgdGhlcmUgYXJlIG1hbnkgaW5jbHVkZWQgZmlsZXMgdGhlbiB0aGUgcnVsZSBpcyBzcGxpdCAgaW50bworIHNldmVyYWwgbGluZXMgdXNpbmcgdGhlICdcJy1uZXdsaW5lLgorCisgV2hlbiB1c2luZyB0aGlzIG9wdGlvbiwgb25seSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoZSAiI2luY2x1ZGUgImZpbGUiCisgZGlyZWN0aXZlIGFyZSBtZW50aW9uZWQuCisKKyBJZiB0aGUgZGVmYXVsdCBmaWxlIG5hbWUgaXMgdXNlZCBmb3IgdGhlICBvdXRwdXQsICBhICBudWxsICBleHRlbnNpb24KKyB3aWxsIGJlIHVzZWQuCisKKzMgQUxMCisKKyBUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvIFJVTEVTLCBleGNlcHQgdGhhdCBpdCBhbHNvICBtZW50aW9ucyAgZmlsZXMKKyBpbmNsdWRlZCB3aXRoIHRoZSAiI2luY2x1ZGUgPGZpbGUuaD4iIGRpcmVjdGl2ZS4KKworIElmIHRoZSBkZWZhdWx0IGZpbGUgbmFtZSBpcyB1c2VkIGZvciB0aGUgIG91dHB1dCwgIGEgIG51bGwgIGV4dGVuc2lvbgorIHdpbGwgYmUgdXNlZC4KKworMiAvVU5ERUZJTkUKKworIC9VTkRFRklORSBjYW5jZWxzIGEgbWFjcm8gZGVmaW5pdGlvbi4gIFRodXMsIGl0IGlzIHRoZSAgc2FtZSAgYXMgIHRoZQorICN1bmRlZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLgorCisgSWYgbW9yZSB0aGFuIG9uZSAvVU5ERUZJTkUgaXMgcHJlc2VudCBvbiB0aGUgR0NDIGNvbW1hbmQgIGxpbmUsICBvbmx5CisgdGhlIGxhc3QgL1VOREVGSU5FIGlzIHVzZWQuCisKKyBJZiBib3RoIC9ERUZJTkUgYW5kIC9VTkRFRklORSBhcmUgcHJlc2VudCBvbiBhIGNvbW1hbmQgbGluZSwgIC9ERUZJTkUKKyBpcyBldmFsdWF0ZWQgYmVmb3JlIC9VTkRFRklORS4KKworMiAvVkVSQk9TRQorCisgQ29udHJvbHMgd2hldGhlciB0aGUgdXNlciBzZWVzIHRoZSBpbnZvY2F0aW9uIGNvbW1hbmQgc3RyaW5ncyBmb3IgdGhlCisgcHJlcHJvY2Vzc29yLCAgY29tcGlsZXIsICBhbmQgIGFzc2VtYmxlci4gICBUaGUgY29tcGlsZXIgYWxzbyBvdXRwdXRzCisgc29tZSBzdGF0aXN0aWNzIG9uIHRpbWUgc3BlbnQgaW4gaXRzIHZhcmlvdXMgcGhhc2VzLgorCisyIC9WRVJTSU9OCisKKyBDYXVzZXMgdGhlIHByZXByb2Nlc3NvciBhbmQgdGhlIGNvbXBpbGVyIHRvICBpZGVudGlmeSAgdGhlbXNlbHZlcyAgYnkKKyB0aGVpciAgdmVyc2lvbiAgbnVtYmVycywgYW5kIGluIHRoZSBjYXNlIG9mIHRoZSBjb21waWxlciwgdGhlIHZlcnNpb24KKyBudW1iZXIgb2YgdGhlIGNvbXBpbGVyIHRoYXQgYnVpbHQgaXQuCisKKzIgL1dBUk5JTkcKKworIFdoZW4gdGhpcyBxdWFsaWZpZXIgaXMgcHJlc2VudCwgd2FybmluZ3MgYWJvdXQgdXNhZ2UgdGhhdCAgc2hvdWxkICBiZQorIGF2b2lkZWQgIGFyZSBnaXZlbiBieSB0aGUgY29tcGlsZXIuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICJVc2luZworIGFuZCBQb3J0aW5nIEdOVSBDQyIsIGluIHRoZSBzZWN0aW9uIG9uIGNvbW1hbmQgIGxpbmUgIG9wdGlvbnMsICB1bmRlcgorICItV2FsbCIuCisKKyBXYXJuaW5ncyBhcmUgYWxzbyBnZW5lcmF0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciB3aGVuICB0aGlzICBxdWFsaWZpZXIKKyBpcyBnaXZlbi4KKworMiBLbm93bl9JbmNvbXBhdGliaWxpdGllc193aXRoX1ZBWC1DCisKKyBUaGVyZSBhcmUgc2V2ZXJhbCBrbm93biBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuICBHTlUtQyAgYW5kICBWQVgtQy4KKyBTb21lICBjb21tb24gIG9uZXMgIHdpbGwgIGJlICBicmllZmx5ICBkZXNjcmliZWQgIGhlcmUuICAgQSAgY29tcGxldGUKKyBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQgaW4gIlVzaW5nIGFuZCBQb3J0aW5nIEdOVSBDQyIgaW4gdGhlIGNoYXB0ZXIKKyBlbnRpdGxlZCAiVXNpbmcgR05VIENDIG9uIFZNUyIuCisKKyAgICAgR05VLUMgcHJvdmlkZXMgY2FzZSBoYWNraW5nIGFzIGEgbWVhbnMgb2YgZ2l2aW5nIGNhc2Ugc2Vuc2l0aXZpdHkKKyB0byAgc3ltYm9sICBuYW1lcy4gIFRoZSBjYXNlIGhhY2sgaXMgYSBoZXhhZGVjaW1hbCBudW1iZXIgYXBwZW5kZWQgdG8KKyB0aGUgc3ltYm9sIG5hbWUsIHdpdGggYSBiaXQgYmVpbmcgc2V0IGZvciAgZWFjaCAgdXBwZXIgIGNhc2UgIGxldHRlci4KKyBTeW1ib2xzIHdpdGggYWxsIGxvd2VyIGNhc2UsIG9yIHN5bWJvbHMgdGhhdCBoYXZlIGEgZG9sbGFyIHNpZ24gKCIkIikKKyBhcmUgbm90IGNhc2UgaGFja2VkLiAgVGhlcmUgIGFyZSAgdGltZXMgIHRoYXQgIHRoaXMgIGlzICB1bmRlc2lyYWJsZSwKKyBuYW1lbHkgIHdoZW4gIHlvdSAgd2lzaCAgdG8gIGxpbmsgIHlvdXIgcHJvZ3JhbSBhZ2FpbnN0IGEgcHJlY29tcGlsZWQKKyBsaWJyYXJ5IHdoaWNoIHdhcyBjb21waWxlZCB3aXRoIGEgbm9uLUdOVS1DIGNvbXBpbGVyLiAgWC13aW5kb3dzICAob3IKKyBERUNXaW5kb3dzKSAgIGlzICBhbiAgZXhhbXBsZSAgb2YgIHRoaXMuICAgSW4gIHRoZXNlICBpbnN0YW5jZXMsICB0aGUKKyAvTk9DQVNFX0hBQ0sgc3dpdGNoIHNob3VsZCBiZSB1c2VkLgorCisgSWYgeW91IHJlcXVpcmUgY2FzZSBoYWNraW5nIGluIHNvbWUgY2FzZXMsIGJ1dCBub3QgIGluICBvdGhlcnMgIChpLmUuCisgTGliZysrICB3aXRoICBERUNXaW5kb3dzKSwgIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZGV2ZWxvcCBhCisgaGVhZGVyIGZpbGUgd2hpY2ggd2lsbCBkZWZpbmUgYWxsIG1peGVkIGNhc2UgIGZ1bmN0aW9ucyAgdGhhdCAgc2hvdWxkCisgbm90IGhhdmUgYSBjYXNlIGhhY2sgYXMgdGhlIGxvd2VyIGNhc2UgZXF1aXZhbGVudHMuCisKKyAgICAgR05VLUMgZG9lcyBub3QgcHJvdmlkZSAgdGhlICBnbG9iYWxkZWYgIGFuZCAgZ2xvYmFscmVmICBtZWNoYW5pc20KKyB3aGljaCAgaXMgIHVzZWQgIGJ5IFZBWC1DIHRvIGNvZXJjZSB0aGUgVk1TIGxpbmtlciB0byBpbmNsdWRlIGNlcnRhaW4KKyBvYmplY3QgbW9kdWxlcyBmcm9tIGEgbGlicmFyeS4gIFRoZXJlIGFyZSBhc3NlbWJsZXIgaGFja3MsIHdoaWNoICBhcmUKKyBhdmFpbGFibGUgIHRvICB0aGUgIHVzZXIgIHRocm91Z2ggIHRoZSBtYWNyb3MgZGVmaW5lZCBpbiBnbnVfaGFja3MuaCwKKyB3aGljaCBlZmZlY3RpdmVseSBnaXZlIHlvdSB0aGUgYWJpbGl0eSB0byAgcGVyZm9ybSAgdGhlc2UgIGZ1bmN0aW9ucy4KKyBXaGlsZSAgbm90ICBzeW50YWN0aWNhbGx5ICBpZGVudGljYWwsICB0aGV5ICBkbyAgcHJvdmlkZSAgbW9zdCBvZiB0aGUKKyBmdW5jdGlvbmFsaXR5LgorCisgTm90ZSB0aGF0IGdsb2JhbGRlZnMgb2YgZW51bXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgd2F5IHRoYXQgaXQgIGlzCisgdW5kZXIgIFZBWC1DLiAgVGhpcyBjYW4gYmUgZWFzaWx5IHNpbXVsYXRlZCwgaG93ZXZlciwgYnkgZ2xvYmFsZGVmaW5nCisgYW4gaW50ZWdlciB2YXJpYWJsZSwgYW5kIHRoZW4gZ2xvYmFsdmFsdWluZyAgYWxsICBvZiAgdGhlICBlbnVtZXJhdGVkCisgc3RhdGVzLgorCisgRnVydGhlcm1vcmUsIHRoZSB3YXkgdGhhdCBnbG9iYWx2YWx1ZSBpcyBjdXJyZW50bHkgIGltcGxlbWVudGVkLCAgdGhlCisgZGF0YSB0eXBlIG9mIHRoZSBnbG9iYWx2YWx1ZSB2YXJpYWJsZSBpcyBzZWVuIHRvIHRoZSBjb21waWxlciB0byBiZSBhCisgcG9pbnRlciB0byB0aGUgZGF0YSB0eXBlIHRoYXQgeW91ICBzcGVjaWZ5LiAgIFRoaXMgIGlzICBuZWNlc3NhcnkgIGluCisgb3JkZXIgICB0byAgbWFrZSAgdGhlICBjb21waWxlciAgY29ycmVjdGx5ICBhZGRyZXNzICB0aGUgIGdsb2JhbHZhbHVlCisgdmFyaWFibGVzLgorCmRpZmYgLS1naXQgYS9nY2MvZ2NjLnRleGkgYi9nY2MvZ2NjLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4ZGNiYwotLS0gL2Rldi9udWxsCisrKyBiL2djYy9nY2MudGV4aQpAQCAtMCwwICsxLDQ3OTMgQEAKKz5caW5wdXQgdGV4aW5mbyAgQGMgLSotdGV4aW5mby0qLQorQGMgJSoqc3RhcnQgb2YgaGVhZGVyCitAc2V0ZmlsZW5hbWUgZ2NjLmluZm8KK0BjIEBzZXRmaWxlbmFtZSB1c2VnY2MuaW5mbworQGMgQHNldGZpbGVuYW1lIHBvcnRnY2MuaW5mbworQGMgVG8gcHJvZHVjZSB0aGUgZnVsbCBtYW51YWwsIHVzZSB0aGUgImdjYy5pbmZvIiBzZXRmaWxlbmFtZSwgYW5kCitAYyBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBkbyBOT1QgYmVnaW4gd2l0aCAnQGMnIChhbmQgdGhlIEBjbGVhciBsaW5lcyBETykKK0BzZXQgSU5URVJOQUxTCitAc2V0IFVTSU5HCitAYyBUbyBwcm9kdWNlIGEgdXNlci1vbmx5IG1hbnVhbCwgdXNlIHRoZSAidXNlZ2NjLmluZm8iIHNldGZpbGVuYW1lLCBhbmQKK0BjIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGRvZXMgTk9UIGJlZ2luIHdpdGggJ0BjJzoKK0BjIEBjbGVhciBJTlRFUk5BTFMKK0BjIFRvIHByb2R1Y2UgYSBwb3J0ZXItb25seSBtYW51YWwsIHVzZSB0aGUgInBvcnRnY2MuaW5mbyIgc2V0ZmlsZW5hbWUsCitAYyBhbmQgbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZG9lcyBOT1QgYmVnaW4gd2l0aCAnQGMnOgorQGMgQGNsZWFyIFVTSU5HCisKK0BjIChGb3IgRlNGIHByaW50aW5nLCB0dXJuIG9uIHNtYWxsYm9vaywgY29tbWVudCBvdXQgZmluYWxvdXQgYmVsb3c7CitAYyB0aGF0IGlzIGFsbCB0aGF0IGlzIG5lZWRlZC4pCisKK0BjIDYvMjcvOTYgRlNGIERPIHdhbnRzIHNtYWxsYm9vayBmbXQgZm9yIDFzdCBib3VuZCBlZGl0aW9uLgorQGMgQHNtYWxsYm9vaworCitAYyBpIGFsc28gY29tbWVudGVkIG91dCB0aGUgZmluYWxvdXQgY29tbWFuZCwgc28gaWYgdGhlcmUgKmFyZSogYW55CitAYyBvdmVyZnVsbHMsIHlvdSdsbCAoaG9wZWZ1bGx5KSBzZWUgdGhlIHJlY3RhbmdsZSBpbiB0aGUgcmlnaHQgaGFuZAorQGMgbWFyZ2luLiAtbWV3IDE1anVuZTkzCitAYyBAZmluYWxvdXQKKworQGMgTk9URTogY2hlY2tzL3RoaW5ncyB0byBkbzoKK0BjCitAYyAtaGF2ZSBib2IgZG8gYSBzZWFyY2ggaW4gYWxsIHNldmVuIGZpbGVzIGZvciAibWV3IiAoaWRlYWxseSAtLW1ldywKK0BjICBidXQgaSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdGhlIG9jY2FzaW9uYWwgIi0tIi4uKS4gIAorQGMgICAgIEp1c3QgY2hlY2tlZC4uLiBhbGwgaGF2ZSBgLS0nISAgQm9iIDIySnVsOTYKK0BjICAgICBVc2UgdGhpcyB0byBzZWFyY2g6ICAgZ3JlcCAtbiAnXC1cLW1ldycgKi50ZXhpCitAYyAtaXRlbS9pdGVteCwgdGV4dCBhZnRlciBhbGwgKHN1Yi9zdWIpc2VjdGlvbiB0aXRsZXMsIGV0Yy4uCitAYyAtY29uc2lkZXIgcHV0dGluZyB0aGUgbGlzdHMgb2Ygb3B0aW9ucyBvbiBwcCAxNy0tPiBldGMgaW4gY29sdW1ucyBvcgorQGMgIHNvbWUgc3VjaC4KK0BjIC1zcGVsbGNoZWNrCitAYyAtY29udGludWl0eSBvZiBwaHJhc2luZzsgaWUsIGJpdC1maWVsZCB2cyBiaXRmaWVsZCBpbiBydGwudGV4aQorQGMgLW92ZXJmdWxscy4gIGRvIGEgc2VhcmNoIGZvciAibWV3IiBpbiB0aGUgZmlsZXMsIGFuZCB5b3Ugd2lsbCBzZWUKK0BjICAgb3ZlcmZ1bGxzIHRoYXQgaSBub3RlZCBidXQgY291bGQgbm90IGRlYWwgd2l0aC4KK0BjIC1oYXZlIHRvIGFkZCB0ZXh0OiAgYmVnaW5uaW5nIG9mIGNoYXB0ZXIgOAorCitAYworQGMgYW55dGhpbmcgZWxzZT8gICAgICAgICAgICAgICAgICAgICAgIC0tbWV3IDEwZmViOTMKKworCisKK0BpZnNldCBJTlRFUk5BTFMKK0BpZnNldCBVU0lORworQHNldHRpdGxlIFVzaW5nIGFuZCBQb3J0aW5nIEdOVSBDQworQGVuZCBpZnNldAorQGVuZCBpZnNldAorQGMgc2VlbXMgcmVhc29uYWJsZSB0byBhc3N1bWUgYXQgbGVhc3Qgb25lIG9mIElOVEVSTkFMUyBvciBVU0lORyBpcyBzZXQuLi4KK0BpZmNsZWFyIElOVEVSTkFMUworQHNldHRpdGxlIFVzaW5nIEdOVSBDQworQGVuZCBpZmNsZWFyCitAaWZjbGVhciBVU0lORworQHNldHRpdGxlIFBvcnRpbmcgR05VIENDCitAZW5kIGlmY2xlYXIKKworQHN5bmNvZGVpbmRleCBmbiBjcAorQHN5bmNvZGVpbmRleCB2ciBjcAorQGMgJSoqZW5kIG9mIGhlYWRlcgorCitAYyBVc2Ugd2l0aCBAQHNtYWxsYm9vay4KKworQGMgQ2F1c2UgZXZlbiBudW1iZXJlZCBwYWdlcyB0byBiZSBwcmludGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZgorQGMgdGhlIHBhZ2UgYW5kIG9kZCBudW1iZXJlZCBwYWdlcyB0byBiZSBwcmludGVkIG9uIHRoZSByaWdodCBoYW5kCitAYyBzaWRlIG9mIHRoZSBwYWdlLiAgVXNpbmcgdGhpcywgeW91IGNhbiBwcmludCBvbiBib3RoIHNpZGVzIG9mIGEKK0BjIHNoZWV0IG9mIHBhcGVyIGFuZCBoYXZlIHRoZSB0ZXh0IG9uIHRoZSBzYW1lIHBhcnQgb2YgdGhlIHNoZWV0LgorCitAYyBUaGUgdGV4dCBvbiByaWdodCBoYW5kIHBhZ2VzIGlzIHB1c2hlZCB0b3dhcmRzIHRoZSByaWdodCBoYW5kCitAYyBtYXJnaW4gYW5kIHRoZSB0ZXh0IG9uIGxlZnQgaGFuZCBwYWdlcyBpcyBwdXNoZWQgdG93YXJkIHRoZSBsZWZ0CitAYyBoYW5kIG1hcmdpbi4KK0BjIChUbyBwcm92aWRlIHRoZSByZXZlcnNlIGVmZmVjdCwgc2V0IGJpbmRpbmdvZmZzZXQgdG8gLTAuNzVpbi4pCisKK0BjIEB0ZXgKK0BjIFxnbG9iYWxcYmluZGluZ29mZnNldD0wLjc1aW4KK0BjIFxnbG9iYWxcbm9ybWFsb2Zmc2V0ID0wLjc1aW4KK0BjIEBlbmQgdGV4CisKK0BpZmluZm8KK0BpZnNldCBJTlRFUk5BTFMKK0BpZnNldCBVU0lORworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdXNlIGFuZCB0aGUgaW50ZXJuYWxzIG9mIHRoZSBHTlUgY29tcGlsZXIuCitAZW5kIGlmc2V0CitAZW5kIGlmc2V0CitAaWZjbGVhciBVU0lORworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBHTlUgY29tcGlsZXIuCitAZW5kIGlmY2xlYXIKK0BpZmNsZWFyIElOVEVSTkFMUworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdXNlIG9mIHRoZSBHTlUgY29tcGlsZXIuCitAZW5kIGlmY2xlYXIKKworUHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKzU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMAorQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODksIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBtYWtlIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZgordGhpcyBtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKK2FyZSBwcmVzZXJ2ZWQgb24gYWxsIGNvcGllcy4KKworQGlnbm9yZQorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHByb2Nlc3MgdGhpcyBmaWxlIHRocm91Z2ggVGV4IGFuZCBwcmludCB0aGUKK3Jlc3VsdHMsIHByb3ZpZGVkIHRoZSBwcmludGVkIGRvY3VtZW50IGNhcnJpZXMgY29weWluZyBwZXJtaXNzaW9uCitub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMgb25lIGV4Y2VwdCBmb3IgdGhlIHJlbW92YWwgb2YgdGhpcyBwYXJhZ3JhcGgKKyh0aGlzIHBhcmFncmFwaCBub3QgYmVpbmcgcmVsZXZhbnQgdG8gdGhlIHByaW50ZWQgbWFudWFsKS4KKworQGVuZCBpZ25vcmUKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMKK21hbnVhbCB1bmRlciB0aGUgY29uZGl0aW9ucyBmb3IgdmVyYmF0aW0gY29weWluZywgcHJvdmlkZWQgYWxzbyB0aGF0IHRoZQorc2VjdGlvbnMgZW50aXRsZWQgYGBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwnJyBgYEZ1bmRpbmcgZm9yIEZyZWUKK1NvZnR3YXJlLCcnIGFuZCBgYFByb3RlY3QgWW91ciBGcmVlZG9tLS0tRmlnaHQgYExvb2sgQW5kIEZlZWwnQHd7fScnIGFyZQoraW5jbHVkZWQgZXhhY3RseSBhcyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUKK3Jlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgcGVybWlzc2lvbgorbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMgbWFudWFsCitpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZCB2ZXJzaW9ucywKK2V4Y2VwdCB0aGF0IHRoZSBzZWN0aW9ucyBlbnRpdGxlZCBgYEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCcnCitgYEZ1bmRpbmcgZm9yIEZyZWUgU29mdHdhcmUsJycgYW5kIGBgUHJvdGVjdCBZb3VyIEZyZWVkb20tLS1GaWdodCBgTG9vaworQW5kIEZlZWwnQHd7fScnLCBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSwgbWF5IGJlIGluY2x1ZGVkIGluCit0cmFuc2xhdGlvbnMgYXBwcm92ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbnN0ZWFkIG9mIGluIHRoZQorb3JpZ2luYWwgRW5nbGlzaC4KK0BlbmQgaWZpbmZvCisKK0BzZXRjaGFwdGVybmV3cGFnZSBvZGQKKworQHRpdGxlcGFnZQorQGlmc2V0IElOVEVSTkFMUworQGlmc2V0IFVTSU5HCitAY2VudGVyIEB0aXRsZWZvbnR7VXNpbmcgYW5kIFBvcnRpbmcgR05VIENDfQorCitAZW5kIGlmc2V0CitAZW5kIGlmc2V0CitAaWZjbGVhciBJTlRFUk5BTFMKK0B0aXRsZSBVc2luZyBHTlUgQ0MKK0BlbmQgaWZjbGVhcgorQGlmY2xlYXIgVVNJTkcKK0B0aXRsZSBQb3J0aW5nIEdOVSBDQworQGVuZCBpZmNsZWFyCitAc3AgMgorQGNlbnRlciBSaWNoYXJkIE0uIFN0YWxsbWFuCitAc3AgMworQGNlbnRlciBMYXN0IHVwZGF0ZWQgMjYgTm92ZW1iZXIgMTk5NQorQHNwIDEKK0BjIFRoZSB2ZXJzaW9uIG51bWJlciBhcHBlYXJzIHR3aWNlIG1vcmUgaW4gdGhpcyBmaWxlLgorCitAY2VudGVyIGZvciB2ZXJzaW9uIDIuNy4yCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAxOTg4LCA4OSwgOTIsIDkzLCA5NCwgOTUsIDk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQHNwIDIKK0ZvciBHQ0MgVmVyc2lvbiAyLjcuMkAqCitAc3AgMQorUHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQCoKKzU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMEAqCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQUAqCitMYXN0IHByaW50ZWQgTm92ZW1iZXIsIDE5OTUuQCoKK1ByaW50ZWQgY29waWVzIGFyZSBhdmFpbGFibGUgZm9yICQ1MCBlYWNoLkAqCitJU0JOIDEtODgyMTE0LTM2LTEKK0BzcCAxCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YKK3RoaXMgbWFudWFsIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCithcmUgcHJlc2VydmVkIG9uIGFsbCBjb3BpZXMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMKK21hbnVhbCB1bmRlciB0aGUgY29uZGl0aW9ucyBmb3IgdmVyYmF0aW0gY29weWluZywgcHJvdmlkZWQgYWxzbyB0aGF0IHRoZQorc2VjdGlvbnMgZW50aXRsZWQgYGBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwnJyBgYEZ1bmRpbmcgZm9yIEZyZWUKK1NvZnR3YXJlLCcnIGFuZCBgYFByb3RlY3QgWW91ciBGcmVlZG9tLS0tRmlnaHQgYExvb2sgQW5kIEZlZWwnQHd7fScnIGFyZQoraW5jbHVkZWQgZXhhY3RseSBhcyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUKK3Jlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgcGVybWlzc2lvbgorbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMgbWFudWFsCitpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZCB2ZXJzaW9ucywKK2V4Y2VwdCB0aGF0IHRoZSBzZWN0aW9ucyBlbnRpdGxlZCBgYEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCcnCitgYEZ1bmRpbmcgZm9yIEZyZWUgU29mdHdhcmUsJycgYW5kIGBgUHJvdGVjdCBZb3VyIEZyZWVkb20tLS1GaWdodCBgTG9vaworQW5kIEZlZWwnQHd7fScnLCBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSwgbWF5IGJlIGluY2x1ZGVkIGluCit0cmFuc2xhdGlvbnMgYXBwcm92ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbnN0ZWFkIG9mIGluIHRoZQorb3JpZ2luYWwgRW5nbGlzaC4KK0BlbmQgdGl0bGVwYWdlCitAcGFnZQorCitAaWZpbmZvCisKK0Bub2RlIFRvcCwgRysrIGFuZCBHQ0MsLCAoRElSKQorQHRvcCBJbnRyb2R1Y3Rpb24KK0BjaW5kZXggaW50cm9kdWN0aW9uCisKK0BpZnNldCBJTlRFUk5BTFMKK0BpZnNldCBVU0lORworVGhpcyBtYW51YWwgZG9jdW1lbnRzIGhvdyB0byBydW4sIGluc3RhbGwgYW5kIHBvcnQgdGhlIEdOVQorY29tcGlsZXIsIGFzIHdlbGwgYXMgaXRzIG5ldyBmZWF0dXJlcyBhbmQgaW5jb21wYXRpYmlsaXRpZXMsIGFuZCBob3cgdG8KK3JlcG9ydCBidWdzLiAgSXQgY29ycmVzcG9uZHMgdG8gR05VIENDIHZlcnNpb24gMi43LjIuCitAZW5kIGlmc2V0CitAZW5kIGlmc2V0CisKK0BpZmNsZWFyIElOVEVSTkFMUworVGhpcyBtYW51YWwgZG9jdW1lbnRzIGhvdyB0byBydW4gYW5kIGluc3RhbGwgdGhlIEdOVSBjb21waWxlciwKK2FzIHdlbGwgYXMgaXRzIG5ldyBmZWF0dXJlcyBhbmQgaW5jb21wYXRpYmlsaXRpZXMsIGFuZCBob3cgdG8gcmVwb3J0CitidWdzLiAgSXQgY29ycmVzcG9uZHMgdG8gR05VIENDIHZlcnNpb24gMi43LjIuCitAZW5kIGlmY2xlYXIKK0BpZmNsZWFyIFVTSU5HCitUaGlzIG1hbnVhbCBkb2N1bWVudHMgaG93IHRvIHBvcnQgdGhlIEdOVSBjb21waWxlciwKK2FzIHdlbGwgYXMgaXRzIG5ldyBmZWF0dXJlcyBhbmQgaW5jb21wYXRpYmlsaXRpZXMsIGFuZCBob3cgdG8gcmVwb3J0CitidWdzLiAgSXQgY29ycmVzcG9uZHMgdG8gR05VIENDIHZlcnNpb24gMi43LjEuCitAZW5kIGlmY2xlYXIKKworQGVuZCBpZmluZm8KK0BtZW51CitAaWZzZXQgVVNJTkcKKyogRysrIGFuZCBHQ0M6OiAgICAgWW91IGNhbiBjb21waWxlIEMgb3IgQysrIHByb2dyYW1zLgorKiBJbnZva2luZyBHQ0M6OiAgICBDb21tYW5kIG9wdGlvbnMgc3VwcG9ydGVkIGJ5IEBzYW1we2djY30uCisqIEluc3RhbGxhdGlvbjo6ICAgIEhvdyB0byBjb25maWd1cmUsIGNvbXBpbGUgYW5kIGluc3RhbGwgR05VIENDLgorKiBDIEV4dGVuc2lvbnM6OiAgICBHTlUgZXh0ZW5zaW9ucyB0byB0aGUgQyBsYW5ndWFnZSBmYW1pbHkuCisqIEMrKyBFeHRlbnNpb25zOjogIEdOVSBleHRlbnNpb25zIHRvIHRoZSBDKysgbGFuZ3VhZ2UuCisqIEdjb3Y6OgkgICAgZ2NvdjogYSBHTlUgQ0MgdGVzdCBjb3ZlcmFnZSBwcm9ncmFtLgorKiBUcm91YmxlOjogICAgICAgICBJZiB5b3UgaGF2ZSB0cm91YmxlIGluc3RhbGxpbmcgR05VIENDLgorKiBCdWdzOjogICAgICAgICAgICBIb3csIHdoeSBhbmQgd2hlcmUgdG8gcmVwb3J0IGJ1Z3MuCisqIFNlcnZpY2U6OiAgICAgICAgIEhvdyB0byBmaW5kIHN1cHBsaWVycyBvZiBzdXBwb3J0IGZvciBHTlUgQ0MuCisqIENvbnRyaWJ1dGluZzo6ICAgIEhvdyB0byBjb250cmlidXRlIHRvIHRlc3RpbmcgYW5kIGRldmVsb3BpbmcgR05VIENDLgorKiBWTVM6OiAgICAgICAgICAgICBVc2luZyBHTlUgQ0Mgb24gVk1TLgorQGVuZCBpZnNldAorQGlmc2V0IElOVEVSTkFMUworKiBQb3J0YWJpbGl0eTo6ICAgICBHb2FscyBvZiBHTlUgQ0MncyBwb3J0YWJpbGl0eSBmZWF0dXJlcy4KKyogSW50ZXJmYWNlOjogICAgICAgRnVuY3Rpb24tY2FsbCBpbnRlcmZhY2Ugb2YgR05VIENDIG91dHB1dC4KKyogUGFzc2VzOjogICAgICAgICAgT3JkZXIgb2YgcGFzc2VzLCB3aGF0IHRoZXkgZG8sIGFuZCB3aGF0IGVhY2ggZmlsZSBpcyBmb3IuCisqIFJUTDo6ICAgICAgICAgICAgIFRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdGhhdCBtb3N0IHBhc3NlcyB3b3JrIG9uLgorKiBNYWNoaW5lIERlc2M6OiAgICBIb3cgdG8gd3JpdGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpbnN0cnVjdGlvbiBwYXR0ZXJucy4KKyogVGFyZ2V0IE1hY3Jvczo6ICAgSG93IHRvIHdyaXRlIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIEMgbWFjcm9zLgorKiBDb25maWc6OiAgICAgICAgICBXcml0aW5nIHRoZSBAZmlsZXt4bS1AdmFye21hY2hpbmV9Lmh9IGZpbGUuCisqIEZyYWdtZW50czo6ICAgICAgIFdyaXRpbmcgdGhlIEBmaWxle3QtQHZhcnt0YXJnZXR9fSBhbmQgQGZpbGV7eC1AdmFye2hvc3R9fSBmaWxlcy4KK0BlbmQgaWZzZXQKKworKiBGdW5kaW5nOjogICAgICAgICBIb3cgdG8gaGVscCBhc3N1cmUgZnVuZGluZyBmb3IgZnJlZSBzb2Z0d2FyZS4KKyogTG9vayBhbmQgRmVlbDo6ICAgUHJvdGVjdCB5b3VyIGZyZWVkb20tLS1maWdodCBgYGxvb2sgYW5kIGZlZWwnJy4KKworKiBDb3B5aW5nOjogICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzYXlzCisgICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFuZCBzaGFyZSBHTlUgQ0MuCisqIENvbnRyaWJ1dG9yczo6ICAgIFBlb3BsZSB3aG8gaGF2ZSBjb250cmlidXRlZCB0byBHTlUgQ0MuCisKKyogSW5kZXg6OgkgICAgSW5kZXggb2YgY29uY2VwdHMgYW5kIHN5bWJvbCBuYW1lcy4KK0BlbmQgbWVudQorCitAaWZzZXQgVVNJTkcKK0Bub2RlIEcrKyBhbmQgR0NDCitAY2hhcHRlciBDb21waWxlIEMsIEMrKywgb3IgT2JqZWN0aXZlIEMKKworQGNpbmRleCBPYmplY3RpdmUgQworVGhlIEMsIEMrKywgYW5kIE9iamVjdGl2ZSBDIHZlcnNpb25zIG9mIHRoZSBjb21waWxlciBhcmUgaW50ZWdyYXRlZDsgdGhlCitHTlUgQyBjb21waWxlciBjYW4gY29tcGlsZSBwcm9ncmFtcyB3cml0dGVuIGluIEMsIEMrKywgb3IgT2JqZWN0aXZlIEMuCisKK0BjaW5kZXggR0NDCitgYEdDQycnIGlzIGEgY29tbW9uIHNob3J0aGFuZCB0ZXJtIGZvciB0aGUgR05VIEMgY29tcGlsZXIuICBUaGlzIGlzIGJvdGgKK3RoZSBtb3N0IGdlbmVyYWwgbmFtZSBmb3IgdGhlIGNvbXBpbGVyLCBhbmQgdGhlIG5hbWUgdXNlZCB3aGVuIHRoZQorZW1waGFzaXMgaXMgb24gY29tcGlsaW5nIEMgcHJvZ3JhbXMuCisKK0BjaW5kZXggQysrCitAY2luZGV4IEcrKworV2hlbiByZWZlcnJpbmcgdG8gQysrIGNvbXBpbGF0aW9uLCBpdCBpcyB1c3VhbCB0byBjYWxsIHRoZSBjb21waWxlcgorYGBHKysnJy4gIFNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIGNvbXBpbGVyLCBpdCBpcyBhbHNvIGFjY3VyYXRlIHRvIGNhbGwKK2l0IGBgR0NDJycgbm8gbWF0dGVyIHdoYXQgdGhlIGxhbmd1YWdlIGNvbnRleHQ7IGhvd2V2ZXIsIHRoZSB0ZXJtCitgYEcrKycnIGlzIG1vcmUgdXNlZnVsIHdoZW4gdGhlIGVtcGhhc2lzIGlzIG9uIGNvbXBpbGluZyBDKysgcHJvZ3JhbXMuCisKK1dlIHVzZSB0aGUgbmFtZSBgYEdOVSBDQycnIHRvIHJlZmVyIHRvIHRoZSBjb21waWxhdGlvbiBzeXN0ZW0gYXMgYQord2hvbGUsIGFuZCBtb3JlIHNwZWNpZmljYWxseSB0byB0aGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUKK2NvbXBpbGVyLiAgRm9yIGV4YW1wbGUsIHdlIHJlZmVyIHRvIHRoZSBvcHRpbWl6YXRpb24gb3B0aW9ucyBhcworYWZmZWN0aW5nIHRoZSBiZWhhdmlvciBvZiBgYEdOVSBDQycnIG9yIHNvbWV0aW1lcyBqdXN0IGBgdGhlIGNvbXBpbGVyJycuCisKK0Zyb250IGVuZHMgZm9yIG90aGVyIGxhbmd1YWdlcywgc3VjaCBhcyBBZGEgOVgsIEZvcnRyYW4sIE1vZHVsYS0zLCBhbmQKK1Bhc2NhbCwgYXJlIHVuZGVyIGRldmVsb3BtZW50LiAgVGhlc2UgZnJvbnQtZW5kcywgbGlrZSB0aGF0IGZvciBDKyssIGFyZQorYnVpbHQgaW4gc3ViZGlyZWN0b3JpZXMgb2YgR05VIENDIGFuZCBsaW5rIHRvIGl0LiAgVGhlIHJlc3VsdCBpcyBhbgoraW50ZWdyYXRlZCBjb21waWxlciB0aGF0IGNhbiBjb21waWxlIHByb2dyYW1zIHdyaXR0ZW4gaW4gQywgQysrLAorT2JqZWN0aXZlIEMsIG9yIGFueSBvZiB0aGUgbGFuZ3VhZ2VzIGZvciB3aGljaCB5b3UgaGF2ZSBpbnN0YWxsZWQgZnJvbnQKK2VuZHMuCisKK0luIHRoaXMgbWFudWFsLCB3ZSBvbmx5IGRpc2N1c3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBDLCBPYmplY3RpdmUtQywgYW5kCitDKysgY29tcGlsZXJzIGFuZCB0aG9zZSBvZiB0aGUgR05VIENDIGNvcmUuICBDb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uCitvZiB0aGUgb3RoZXIgZnJvbnQgZW5kcyBmb3IgdGhlIG9wdGlvbnMgdG8gdXNlIHdoZW4gY29tcGlsaW5nIHByb2dyYW1zCit3cml0dGVuIGluIG90aGVyIGxhbmd1YWdlcy4KKworQGNpbmRleCBjb21waWxlciBjb21wYXJlZCB0byBDKysgcHJlcHJvY2Vzc29yCitAY2luZGV4IGludGVybWVkaWF0ZSBDIHZlcnNpb24sIG5vbmV4aXN0ZW50CitAY2luZGV4IEMgaW50ZXJtZWRpYXRlIG91dHB1dCwgbm9uZXhpc3RlbnQKK0crKyBpcyBhIEBlbXBoe2NvbXBpbGVyfSwgbm90IG1lcmVseSBhIHByZXByb2Nlc3Nvci4gIEcrKyBidWlsZHMgb2JqZWN0Citjb2RlIGRpcmVjdGx5IGZyb20geW91ciBDKysgcHJvZ3JhbSBzb3VyY2UuICBUaGVyZSBpcyBubyBpbnRlcm1lZGlhdGUgQwordmVyc2lvbiBvZiB0aGUgcHJvZ3JhbS4gIChCeSBjb250cmFzdCwgZm9yIGV4YW1wbGUsIHNvbWUgb3RoZXIKK2ltcGxlbWVudGF0aW9ucyB1c2UgYSBwcm9ncmFtIHRoYXQgZ2VuZXJhdGVzIGEgQyBwcm9ncmFtIGZyb20geW91ciBDKysKK3NvdXJjZS4pICBBdm9pZGluZyBhbiBpbnRlcm1lZGlhdGUgQyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvZ3JhbSBtZWFucwordGhhdCB5b3UgZ2V0IGJldHRlciBvYmplY3QgY29kZSwgYW5kIGJldHRlciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBUaGUKK0dOVSBkZWJ1Z2dlciwgR0RCLCB3b3JrcyB3aXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIG9iamVjdCBjb2RlIHRvCitnaXZlIHlvdSBjb21wcmVoZW5zaXZlIEMrKyBzb3VyY2UtbGV2ZWwgZWRpdGluZyBjYXBhYmlsaXRpZXMKKyhAcHhyZWZ7QywsQyBhbmQgQysrLGdkYi5pbmZvLCBEZWJ1Z2dpbmcgd2l0aCBHREJ9KS4KKworQGMgRklYTUUhICBTb21lb25lIHdobyBrbm93cyBzb21ldGhpbmcgYWJvdXQgT2JqZWN0aXZlIEMgb3VnaHQgdG8gcHV0IGluCitAYyBhIHBhcmFncmFwaCBvciB0d28gYWJvdXQgaXQgaGVyZSwgYW5kIG1vdmUgdGhlIGluZGV4IGVudHJ5IGRvd24gd2hlbgorQGMgdGhlcmUgaXMgbW9yZSB0byBwb2ludCB0byB0aGFuIHRoZSBnZW5lcmFsIG1lbnRpb24gaW4gdGhlIDFzdCBwYXIuCisKK0BpbmNsdWRlIGludm9rZS50ZXhpCisKK0BpbmNsdWRlIGluc3RhbGwudGV4aQorCitAaW5jbHVkZSBleHRlbmQudGV4aQorCitAaW5jbHVkZSBnY292LnRleGkKKworQG5vZGUgVHJvdWJsZQorQGNoYXB0ZXIgS25vd24gQ2F1c2VzIG9mIFRyb3VibGUgd2l0aCBHTlUgQ0MKK0BjaW5kZXggYnVncywga25vd24KK0BjaW5kZXggaW5zdGFsbGF0aW9uIHRyb3VibGUKK0BjaW5kZXgga25vd24gY2F1c2VzIG9mIHRyb3VibGUKKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBrbm93biBwcm9ibGVtcyB0aGF0IGFmZmVjdCB1c2VycyBvZiBHTlUgQ0MuICBNb3N0CitvZiB0aGVzZSBhcmUgbm90IEdOVSBDQyBidWdzIHBlciBzZS0tLWlmIHRoZXkgd2VyZSwgd2Ugd291bGQgZml4IHRoZW0uCitCdXQgdGhlIHJlc3VsdCBmb3IgYSB1c2VyIG1heSBiZSBsaWtlIHRoZSByZXN1bHQgb2YgYSBidWcuCisKK1NvbWUgb2YgdGhlc2UgcHJvYmxlbXMgYXJlIGR1ZSB0byBidWdzIGluIG90aGVyIHNvZnR3YXJlLCBzb21lIGFyZQorbWlzc2luZyBmZWF0dXJlcyB0aGF0IGFyZSB0b28gbXVjaCB3b3JrIHRvIGFkZCwgYW5kIHNvbWUgYXJlIHBsYWNlcword2hlcmUgcGVvcGxlJ3Mgb3BpbmlvbnMgZGlmZmVyIGFzIHRvIHdoYXQgaXMgYmVzdC4KKworQG1lbnUKKyogQWN0dWFsIEJ1Z3M6OgkJICAgICAgQnVncyB3ZSB3aWxsIGZpeCBsYXRlci4KKyogSW5zdGFsbGF0aW9uIFByb2JsZW1zOjogICAgIFByb2JsZW1zIHRoYXQgbWFuaWZlc3Qgd2hlbiB5b3UgaW5zdGFsbCBHTlUgQ0MuCisqIENyb3NzLUNvbXBpbGVyIFByb2JsZW1zOjogICBDb21tb24gcHJvYmxlbXMgb2YgY3Jvc3MgY29tcGlsaW5nIHdpdGggR05VIENDLgorKiBJbnRlcm9wZXJhdGlvbjo6ICAgICAgUHJvYmxlbXMgdXNpbmcgR05VIENDIHdpdGggb3RoZXIgY29tcGlsZXJzLAorCQkJICAgYW5kIHdpdGggY2VydGFpbiBsaW5rZXJzLCBhc3NlbWJsZXJzIGFuZCBkZWJ1Z2dlcnMuCisqIEV4dGVybmFsIEJ1Z3M6OglQcm9ibGVtcyBjb21waWxpbmcgY2VydGFpbiBwcm9ncmFtcy4KKyogSW5jb21wYXRpYmlsaXRpZXM6OiAgIEdOVSBDQyBpcyBpbmNvbXBhdGlibGUgd2l0aCB0cmFkaXRpb25hbCBDLgorKiBGaXhlZCBIZWFkZXJzOjogICAgICAgR05VIEMgdXNlcyBjb3JyZWN0ZWQgdmVyc2lvbnMgb2Ygc3lzdGVtIGhlYWRlciBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5LCBidXQgZG9lc24ndCBhbHdheXMgd29yayBzbW9vdGhseS4KKyogU3RhbmRhcmQgTGlicmFyaWVzOjogIEdOVSBDIHVzZXMgdGhlIHN5c3RlbSBDIGxpYnJhcnksIHdoaWNoIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxpYW50IHdpdGggdGhlIElTTy9BTlNJIEMgc3RhbmRhcmQuCisqIERpc2FwcG9pbnRtZW50czo6ICAgICBSZWdyZXR0YWJsZSB0aGluZ3Mgd2UgY2FuJ3QgY2hhbmdlLCBidXQgbm90IHF1aXRlIGJ1Z3MuCisqIEMrKyBNaXN1bmRlcnN0YW5kaW5nczo6ICAgICBDb21tb24gbWlzdW5kZXJzdGFuZGluZ3Mgd2l0aCBHTlUgQysrLgorKiBQcm90b2l6ZSBDYXZlYXRzOjogICAgVGhpbmdzIHRvIHdhdGNoIG91dCBmb3Igd2hlbiB1c2luZyBAY29kZXtwcm90b2l6ZX0uCisqIE5vbi1idWdzOjoJCVRoaW5ncyB3ZSB0aGluayBhcmUgcmlnaHQsIGJ1dCBzb21lIG90aGVycyBkaXNhZ3JlZS4KKyogV2FybmluZ3MgYW5kIEVycm9yczo6IFdoaWNoIHByb2JsZW1zIGluIHlvdXIgY29kZSBnZXQgd2FybmluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdoaWNoIGdldCBlcnJvcnMuCitAZW5kIG1lbnUKKworQG5vZGUgQWN0dWFsIEJ1Z3MKK0BzZWN0aW9uIEFjdHVhbCBCdWdzIFdlIEhhdmVuJ3QgRml4ZWQgWWV0CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitUaGUgQGNvZGV7Zml4aW5jbHVkZXN9IHNjcmlwdCBpbnRlcmFjdHMgYmFkbHkgd2l0aCBhdXRvbW91bnRlcnM7IGlmIHRoZQorZGlyZWN0b3J5IG9mIHN5c3RlbSBoZWFkZXIgZmlsZXMgaXMgYXV0b21vdW50ZWQsIGl0IHRlbmRzIHRvIGJlCit1bm1vdW50ZWQgd2hpbGUgQGNvZGV7Zml4aW5jbHVkZXN9IGlzIHJ1bm5pbmcuICBUaGlzIHdvdWxkIHNlZW0gdG8gYmUgYQorYnVnIGluIHRoZSBhdXRvbW91bnRlci4gIFdlIGRvbid0IGtub3cgYW55IGdvb2Qgd2F5IHRvIHdvcmsgYXJvdW5kIGl0LgorCitAaXRlbQorVGhlIEBjb2Rle2ZpeHByb3RvfSBzY3JpcHQgd2lsbCBzb21ldGltZXMgYWRkIHByb3RvdHlwZXMgZm9yIHRoZQorQGNvZGV7c2lnc2V0am1wfSBhbmQgQGNvZGV7c2lnbG9uZ2ptcH0gZnVuY3Rpb25zIHRoYXQgcmVmZXJlbmNlIHRoZQorQGNvZGV7am1wX2J1Zn0gdHlwZSBiZWZvcmUgdGhhdCB0eXBlIGlzIGRlZmluZWQuICBUbyB3b3JrIGFyb3VuZCB0aGlzLAorZWRpdCB0aGUgb2ZmZW5kaW5nIGZpbGUgYW5kIHBsYWNlIHRoZSB0eXBlZGVmIGluIGZyb250IG9mIHRoZQorcHJvdG90eXBlcy4KKworQGl0ZW0KK1RoZXJlIGFyZSBzZXZlcmFsIG9ic2N1cmUgY2FzZSBvZiBtaXMtdXNpbmcgc3RydWN0LCB1bmlvbiwgYW5kCitlbnVtIHRhZ3MgdGhhdCBhcmUgbm90IGRldGVjdGVkIGFzIGVycm9ycyBieSB0aGUgY29tcGlsZXIuCisKK0BpdGVtCitXaGVuIEBzYW1wey1wZWRhbnRpYy1lcnJvcnN9IGlzIHNwZWNpZmllZCwgR05VIEMgd2lsbCBpbmNvcnJlY3RseSBnaXZlCithbiBlcnJvciBtZXNzYWdlIHdoZW4gYSBmdW5jdGlvbiBuYW1lIGlzIHNwZWNpZmllZCBpbiBhbiBleHByZXNzaW9uCitpbnZvbHZpbmcgdGhlIGNvbW1hIG9wZXJhdG9yLgorCitAaXRlbQorTG9vcCB1bnJvbGxpbmcgZG9lc24ndCB3b3JrIHByb3Blcmx5IGZvciBjZXJ0YWluIEMrKyBwcm9ncmFtcy4gIFRoaXMgaXMKK2EgYnVnIGluIHRoZSBDKysgZnJvbnQgZW5kLiAgSXQgc29tZXRpbWVzIGVtaXRzIGluY29ycmVjdCBkZWJ1ZyBpbmZvLCBhbmQKK3RoZSBsb29wIHVucm9sbGluZyBjb2RlIGlzIHVuYWJsZSB0byByZWNvdmVyIGZyb20gdGhpcyBlcnJvci4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBJbnN0YWxsYXRpb24gUHJvYmxlbXMKK0BzZWN0aW9uIEluc3RhbGxhdGlvbiBQcm9ibGVtcworCitUaGlzIGlzIGEgbGlzdCBvZiBwcm9ibGVtcyAoYW5kIHNvbWUgYXBwYXJlbnQgcHJvYmxlbXMgd2hpY2ggZG9uJ3QKK3JlYWxseSBtZWFuIGFueXRoaW5nIGlzIHdyb25nKSB0aGF0IHNob3cgdXAgZHVyaW5nIGluc3RhbGxhdGlvbiBvZiBHTlUKK0NDLgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorT24gY2VydGFpbiBzeXN0ZW1zLCBkZWZpbmluZyBjZXJ0YWluIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzCitAY29kZXtDQ30gY2FuIGludGVyZmVyZSB3aXRoIHRoZSBmdW5jdGlvbmluZyBvZiBAY29kZXttYWtlfS4KKworQGl0ZW0KK0lmIHlvdSBlbmNvdW50ZXIgc2VlbWluZ2x5IHN0cmFuZ2UgZXJyb3JzIHdoZW4gdHJ5aW5nIHRvIGJ1aWxkIHRoZQorY29tcGlsZXIgaW4gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgc291cmNlIGRpcmVjdG9yeSwgaXQgY291bGQgYmUKK2JlY2F1c2UgeW91IGhhdmUgcHJldmlvdXNseSBjb25maWd1cmVkIHRoZSBjb21waWxlciBpbiB0aGUgc291cmNlCitkaXJlY3RvcnkuICBNYWtlIHN1cmUgeW91IGhhdmUgZG9uZSBhbGwgdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMuCitAeHJlZntPdGhlciBEaXJ9LgorCitAaXRlbQorSWYgeW91IGJ1aWxkIEdOVSBDQyBvbiBhIEJTRCBzeXN0ZW0gdXNpbmcgYSBkaXJlY3Rvcnkgc3RvcmVkIGluIGEgU3lzdGVtCitWIGZpbGUgc3lzdGVtLCBwcm9ibGVtcyBtYXkgb2NjdXIgaW4gcnVubmluZyBAY29kZXtmaXhpbmNsdWRlc30gaWYgdGhlCitTeXN0ZW0gViBmaWxlIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgc3ltYm9saWMgbGlua3MuICBUaGVzZSBwcm9ibGVtcworcmVzdWx0IGluIGEgZmFpbHVyZSB0byBmaXggdGhlIGRlY2xhcmF0aW9uIG9mIEBjb2Rle3NpemVfdH0gaW4KK0BmaWxle3N5cy90eXBlcy5ofS4gIElmIHlvdSBmaW5kIHRoYXQgQGNvZGV7c2l6ZV90fSBpcyBhIHNpZ25lZCB0eXBlIGFuZAordGhhdCB0eXBlIG1pc21hdGNoZXMgb2NjdXIsIHRoaXMgY291bGQgYmUgdGhlIGNhdXNlLgorCitUaGUgc29sdXRpb24gaXMgbm90IHRvIHVzZSBzdWNoIGEgZGlyZWN0b3J5IGZvciBidWlsZGluZyBHTlUgQ0MuCisKK0BpdGVtCitJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBHTlUgQ0MsIHRoZSBAY29kZXtnY2N9IGRyaXZlciBwcm9ncmFtIGxvb2tlZCBmb3IKK0Bjb2Rle2FzfSBhbmQgQGNvZGV7bGR9IGluIHZhcmlvdXMgcGxhY2VzOyBmb3IgZXhhbXBsZSwgaW4gZmlsZXMKK2JlZ2lubmluZyB3aXRoIEBmaWxley91c3IvbG9jYWwvbGliL2djYy19LiAgR05VIENDIHZlcnNpb24gMiBsb29rcyBmb3IKK3RoZW0gaW4gdGhlIGRpcmVjdG9yeQorQGZpbGV7L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9AdmFye3RhcmdldH0vQHZhcnt2ZXJzaW9ufX0uCisKK1RodXMsIHRvIHVzZSBhIHZlcnNpb24gb2YgQGNvZGV7YXN9IG9yIEBjb2Rle2xkfSB0aGF0IGlzIG5vdCB0aGUgc3lzdGVtCitkZWZhdWx0LCBmb3IgZXhhbXBsZSBAY29kZXtnYXN9IG9yIEdOVSBAY29kZXtsZH0sIHlvdSBtdXN0IHB1dCB0aGVtIGluCit0aGF0IGRpcmVjdG9yeSAob3IgbWFrZSBsaW5rcyB0byB0aGVtIGZyb20gdGhhdCBkaXJlY3RvcnkpLgorCitAaXRlbQorU29tZSBjb21tYW5kcyBleGVjdXRlZCB3aGVuIG1ha2luZyB0aGUgY29tcGlsZXIgbWF5IGZhaWwgKHJldHVybiBhCitub24temVybyBzdGF0dXMpIGFuZCBiZSBpZ25vcmVkIGJ5IEBjb2Rle21ha2V9LiAgVGhlc2UgZmFpbHVyZXMsIHdoaWNoCithcmUgb2Z0ZW4gZHVlIHRvIGZpbGVzIHRoYXQgd2VyZSBub3QgZm91bmQsIGFyZSBleHBlY3RlZCwgYW5kIGNhbiBzYWZlbHkKK2JlIGlnbm9yZWQuCisKK0BpdGVtCitJdCBpcyBub3JtYWwgdG8gaGF2ZSB3YXJuaW5ncyBpbiBjb21waWxpbmcgY2VydGFpbiBmaWxlcyBhYm91dAordW5yZWFjaGFibGUgY29kZSBhbmQgYWJvdXQgZW51bWVyYXRpb24gdHlwZSBjbGFzaGVzLiAgVGhlc2UgZmlsZXMnIG5hbWVzCitiZWdpbiB3aXRoIEBzYW1we2luc24tfS4gIEFsc28sIEBmaWxle3JlYWwuY30gbWF5IGdldCBzb21lIHdhcm5pbmdzIHRoYXQKK3lvdSBjYW4gaWdub3JlLgorCitAaXRlbQorU29tZXRpbWVzIEBjb2Rle21ha2V9IHJlY29tcGlsZXMgcGFydHMgb2YgdGhlIGNvbXBpbGVyIHdoZW4gaW5zdGFsbGluZwordGhlIGNvbXBpbGVyLiAgSW4gb25lIGNhc2UsIHRoaXMgd2FzIHRyYWNlZCBkb3duIHRvIGEgYnVnIGluCitAY29kZXttYWtlfS4gIEVpdGhlciBpZ25vcmUgdGhlIHByb2JsZW0gb3Igc3dpdGNoIHRvIEdOVSBNYWtlLgorCitAaXRlbQorSWYgeW91IGhhdmUgaW5zdGFsbGVkIGEgcHJvZ3JhbSBrbm93biBhcyBwdXJpZnksIHlvdSBtYXkgZmluZCB0aGF0IGl0CitjYXVzZXMgZXJyb3JzIHdoaWxlIGxpbmtpbmcgQGNvZGV7ZW5xdWlyZX0sIHdoaWNoIGlzIHBhcnQgb2YgYnVpbGRpbmcKK0dOVSBDQy4gIFRoZSBmaXggaXMgdG8gZ2V0IHJpZCBvZiB0aGUgZmlsZSBAY29kZXtyZWFsLWxkfSB3aGljaCBwdXJpZnkKK2luc3RhbGxzLS0tc28gdGhhdCBHTlUgQ0Mgd29uJ3QgdHJ5IHRvIHVzZSBpdC4KKworQGl0ZW0KK09uIExpbnV4IFNMUyAxLjAxLCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBAZmlsZXtsaWJjLmF9OiBpdCBkb2VzIG5vdAorY29udGFpbiB0aGUgb2JzdGFjayBmdW5jdGlvbnMuICBIb3dldmVyLCBHTlUgQ0MgYXNzdW1lcyB0aGF0IHRoZSBvYnN0YWNrCitmdW5jdGlvbnMgYXJlIGluIEBmaWxle2xpYmMuYX0gd2hlbiBpdCBpcyB0aGUgR05VIEMgbGlicmFyeS4gIFRvIHdvcmsKK2Fyb3VuZCB0aGlzIHByb2JsZW0sIGNoYW5nZSB0aGUgQGNvZGV7X19HTlVfTElCUkFSWV9ffSBjb25kaXRpb25hbAorYXJvdW5kIGxpbmUgMzEgdG8gQHNhbXB7I2lmIDF9LgorCitAaXRlbQorT24gc29tZSAzODYgc3lzdGVtcywgYnVpbGRpbmcgdGhlIGNvbXBpbGVyIG5ldmVyIGZpbmlzaGVzIGJlY2F1c2UKK0Bjb2Rle2VucXVpcmV9IGhhbmdzIGR1ZSB0byBhIGhhcmR3YXJlIHByb2JsZW0gaW4gdGhlIG1vdGhlcmJvYXJkLS0taXQKK3JlcG9ydHMgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9ucyB0byB0aGUga2VybmVsIGluY29ycmVjdGx5LiAgWW91IGNhbgoraW5zdGFsbCBHTlUgQ0MgZXhjZXB0IGZvciBAZmlsZXtmbG9hdC5ofSBieSBwYXRjaGluZyBvdXQgdGhlIGNvbW1hbmQgdG8KK3J1biBAY29kZXtlbnF1aXJlfS4gIFlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGZpeCB0aGUgcHJvYmxlbSBmb3IgcmVhbCBieQorZ2V0dGluZyBhIHJlcGxhY2VtZW50IG1vdGhlcmJvYXJkLiAgVGhpcyBwcm9ibGVtIHdhcyBvYnNlcnZlZCBpbgorUmV2aXNpb24gRSBvZiB0aGUgTWljcm9uaWNzIG1vdGhlcmJvYXJkLCBhbmQgaXMgZml4ZWQgaW4gUmV2aXNpb24gRi4KK0l0IGhhcyBhbHNvIGJlZW4gb2JzZXJ2ZWQgaW4gdGhlIE1ZTEVYIE1YQS0zMyBtb3RoZXJib2FyZC4KKworSWYgeW91IGVuY291bnRlciB0aGlzIHByb2JsZW0sIHlvdSBtYXkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHJlbW92aW5nCit0aGUgRlBVIGZyb20gdGhlIHNvY2tldCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91CithcmUgcnVubmluZyBTQ08gVW5peCwgeW91IGNhbiByZWJvb3QgYW5kIGZvcmNlIHRoZSBGUFUgdG8gYmUgaWdub3JlZC4KK1RvIGRvIHRoaXMsIHR5cGUgQHNhbXB7aGQoNDApdW5peCBhdXRvIGlnbm9yZWZwdX0uCisKK0BpdGVtCitPbiBzb21lIDM4NiBzeXN0ZW1zLCBHTlUgQ0MgY3Jhc2hlcyB0cnlpbmcgdG8gY29tcGlsZSBAZmlsZXtlbnF1aXJlLmN9LgorVGhpcyBoYXBwZW5zIG9uIG1hY2hpbmVzIHRoYXQgZG9uJ3QgaGF2ZSBhIDM4NyBGUFUgY2hpcC4gIE9uIDM4NgorbWFjaGluZXMsIHRoZSBzeXN0ZW0ga2VybmVsIGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdGhlIDM4NyB3aGVuIHlvdQorZG9uJ3QgaGF2ZSBvbmUuICBUaGUgY3Jhc2ggaXMgZHVlIHRvIGEgYnVnIGluIHRoZSBlbXVsYXRvci4KKworT25lIG9mIHRoZXNlIHN5c3RlbXMgaXMgdGhlIFVuaXggZnJvbSBJbnRlcmFjdGl2ZSBTeXN0ZW1zOiAzODYvaXguCitPbiB0aGlzIHN5c3RlbSwgYW4gYWx0ZXJuYXRlIGVtdWxhdG9yIGlzIHByb3ZpZGVkLCBhbmQgaXQgZG9lcyB3b3JrLgorVG8gdXNlIGl0LCBleGVjdXRlIHRoaXMgY29tbWFuZCBhcyBzdXBlci11c2VyOgorCitAZXhhbXBsZQorbG4gL2V0Yy9lbXVsYXRvci5yZWwxIC9ldGMvZW11bGF0b3IKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK2FuZCB0aGVuIHJlYm9vdCB0aGUgc3lzdGVtLiAgKFRoZSBkZWZhdWx0IGVtdWxhdG9yIGZpbGUgcmVtYWlucyBwcmVzZW50Cit1bmRlciB0aGUgbmFtZSBAZmlsZXtlbXVsYXRvci5kZmx0fS4pCisKK1RyeSB1c2luZyBAZmlsZXsvZXRjL2VtdWxhdG9yLmF0dH0sIGlmIHlvdSBoYXZlIHN1Y2ggYSBwcm9ibGVtIG9uIHRoZQorU0NPIHN5c3RlbS4KKworQW5vdGhlciBzeXN0ZW0gd2hpY2ggaGFzIHRoaXMgcHJvYmxlbSBpcyBFc2l4LiAgV2UgZG9uJ3Qga25vdyB3aGV0aGVyIGl0CitoYXMgYW4gYWx0ZXJuYXRlIGVtdWxhdG9yIHRoYXQgd29ya3MuCisKK09uIE5ldEJTRCAwLjgsIGEgc2ltaWxhciBwcm9ibGVtIG1hbmlmZXN0cyBpdHNlbGYgYXMgdGhlc2UgZXJyb3IgbWVzc2FnZXM6CisKK0BleGFtcGxlCitlbnF1aXJlLmM6IEluIGZ1bmN0aW9uIGBmcHJvcCc6CitlbnF1aXJlLmM6MjMyODogZmxvYXRpbmcgb3ZlcmZsb3cKK0BlbmQgZXhhbXBsZQorCitAaXRlbQorT24gU0NPIHN5c3RlbXMsIHdoZW4gY29tcGlsaW5nIEdOVSBDQyB3aXRoIHRoZSBzeXN0ZW0ncyBjb21waWxlciwKK2RvIG5vdCB1c2UgQHNhbXB7LU99LiAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgc3lzdGVtJ3MgY29tcGlsZXIgbWlzY29tcGlsZQorR05VIENDIHdpdGggQHNhbXB7LU99LgorCitAY2luZGV4IEBjb2Rle2dlbmZsYWdzfSwgY3Jhc2ggb24gU3VuIDQKK0BpdGVtCitTb21ldGltZXMgb24gYSBTdW4gNCB5b3UgbWF5IG9ic2VydmUgYSBjcmFzaCBpbiB0aGUgcHJvZ3JhbQorQGNvZGV7Z2VuZmxhZ3N9IG9yIEBjb2Rle2dlbm91dHB1dH0gd2hpbGUgYnVpbGRpbmcgR05VIENDLiAgVGhpcyBpcyBzYWlkIHRvCitiZSBkdWUgdG8gYSBidWcgaW4gQGNvZGV7c2h9LiAgWW91IGNhbiBwcm9iYWJseSBnZXQgYXJvdW5kIGl0IGJ5IHJ1bm5pbmcKK0Bjb2Rle2dlbmZsYWdzfSBvciBAY29kZXtnZW5vdXRwdXR9IG1hbnVhbGx5IGFuZCB0aGVuIHJldHJ5aW5nIHRoZQorQGNvZGV7bWFrZX0uCisKK0BpdGVtCitPbiBTb2xhcmlzIDIsIGV4ZWN1dGFibGVzIG9mIEdOVSBDQyB2ZXJzaW9uIDIuMC4yIGFyZSBjb21tb25seQorYXZhaWxhYmxlLCBidXQgdGhleSBoYXZlIGEgYnVnIHRoYXQgc2hvd3MgdXAgd2hlbiBjb21waWxpbmcgY3VycmVudAordmVyc2lvbnMgb2YgR05VIENDOiB1bmRlZmluZWQgc3ltYm9sIGVycm9ycyBvY2N1ciBkdXJpbmcgYXNzZW1ibHkgaWYgeW91Cit1c2UgQHNhbXB7LWd9LgorCitUaGUgc29sdXRpb24gaXMgdG8gY29tcGlsZSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEdOVSBDQyB3aXRob3V0CitAc2FtcHstZ30uICBUaGF0IG1ha2VzIGEgd29ya2luZyBjb21waWxlciB3aGljaCB5b3UgY2FuIHVzZSB0byByZWNvbXBpbGUKK3dpdGggQHNhbXB7LWd9LgorCitAaXRlbQorU29sYXJpcyAyIGNvbWVzIHdpdGggYSBudW1iZXIgb2Ygb3B0aW9uYWwgT1MgcGFja2FnZXMuICBTb21lIG9mIHRoZXNlCitwYWNrYWdlcyBhcmUgbmVlZGVkIHRvIHVzZSBHTlUgQ0MgZnVsbHkuICBJZiB5b3UgZGlkIG5vdCBpbnN0YWxsIGFsbAorb3B0aW9uYWwgcGFja2FnZXMgd2hlbiBpbnN0YWxsaW5nIFNvbGFyaXMsIHlvdSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoYXQKK3RoZSBwYWNrYWdlcyB0aGF0IEdOVSBDQyBuZWVkcyBhcmUgaW5zdGFsbGVkLgorCitUbyBjaGVjayB3aGV0aGVyIGFuIG9wdGlvbmFsIHBhY2thZ2UgaXMgaW5zdGFsbGVkLCB1c2UKK3RoZSBAY29kZXtwa2dpbmZvfSBjb21tYW5kLiAgVG8gYWRkIGFuIG9wdGlvbmFsIHBhY2thZ2UsIHVzZSB0aGUKK0Bjb2Rle3BrZ2FkZH0gY29tbWFuZC4gIEZvciBmdXJ0aGVyIGRldGFpbHMsIHNlZSB0aGUgU29sYXJpcworZG9jdW1lbnRhdGlvbi4KKworRm9yIFNvbGFyaXMgMi4wIGFuZCAyLjEsIEdOVSBDQyBuZWVkcyBzaXggcGFja2FnZXM6IEBzYW1we1NVTldhcmN9LAorQHNhbXB7U1VOV2J0b29sfSwgQHNhbXB7U1VOV2VzdX0sIEBzYW1we1NVTldoZWF9LCBAc2FtcHtTVU5XbGlibX0sIGFuZAorQHNhbXB7U1VOV3Rvb30uCisKK0ZvciBTb2xhcmlzIDIuMiwgR05VIENDIG5lZWRzIGFuIGFkZGl0aW9uYWwgc2V2ZW50aCBwYWNrYWdlOiBAc2FtcHtTVU5Xc3Byb3R9LgorCitAaXRlbQorT24gU29sYXJpcyAyLCB0cnlpbmcgdG8gdXNlIHRoZSBsaW5rZXIgYW5kIG90aGVyIHRvb2xzIGluCitAZmlsZXsvdXNyL3VjYn0gdG8gaW5zdGFsbCBHTlUgQ0MgaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gY2F1c2UgdHJvdWJsZS4KK0ZvciBleGFtcGxlLCB0aGUgbGlua2VyIG1heSBoYW5nIGluZGVmaW5pdGVseS4gIFRoZSBmaXggaXMgdG8gcmVtb3ZlCitAZmlsZXsvdXNyL3VjYn0gZnJvbSB5b3VyIEBjb2Rle1BBVEh9LgorCitAaXRlbQorSWYgeW91IHVzZSB0aGUgMS4zMSB2ZXJzaW9uIG9mIHRoZSBNSVBTIGFzc2VtYmxlciAoc3VjaCBhcyB3YXMgc2hpcHBlZAord2l0aCBVbHRyaXggMy4xKSwgeW91IHdpbGwgbmVlZCB0byB1c2UgdGhlIC1mbm8tZGVsYXllZC1icmFuY2ggc3dpdGNoCit3aGVuIG9wdGltaXppbmcgZmxvYXRpbmcgcG9pbnQgY29kZS4gIE90aGVyd2lzZSwgdGhlIGFzc2VtYmxlciB3aWxsCitjb21wbGFpbiB3aGVuIHRoZSBHQ0MgY29tcGlsZXIgZmlsbHMgYSBicmFuY2ggZGVsYXkgc2xvdCB3aXRoIGEKK2Zsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uLCBzdWNoIGFzIEBjb2Rle2FkZC5kfS4KKworQGl0ZW0KK0lmIG9uIGEgTUlQUyBzeXN0ZW0geW91IGdldCBhbiBlcnJvciBtZXNzYWdlIHNheWluZyBgYGRvZXMgbm90IGhhdmUgZ3AKK3NlY3Rpb25zIGZvciBhbGwgaXQncyBbc2ljXSBzZWN0b25zIFtzaWNdJycsIGRvbid0IHdvcnJ5IGFib3V0IGl0LiAgVGhpcworaGFwcGVucyB3aGVuZXZlciB5b3UgdXNlIEdBUyB3aXRoIHRoZSBNSVBTIGxpbmtlciwgYnV0IHRoZXJlIGlzIG5vdAorcmVhbGx5IGFueXRoaW5nIHdyb25nLCBhbmQgaXQgaXMgb2theSB0byB1c2UgdGhlIG91dHB1dCBmaWxlLiAgWW91IGNhbgorc3RvcCBzdWNoIHdhcm5pbmdzIGJ5IGluc3RhbGxpbmcgdGhlIEdOVSBsaW5rZXIuCisKK0l0IHdvdWxkIGJlIG5pY2UgdG8gZXh0ZW5kIEdBUyB0byBwcm9kdWNlIHRoZSBncCB0YWJsZXMsIGJ1dCB0aGV5IGFyZQorb3B0aW9uYWwsIGFuZCB0aGVyZSBzaG91bGQgbm90IGJlIGEgd2FybmluZyBhYm91dCB0aGVpciBhYnNlbmNlLgorCitAaXRlbQorSW4gVWx0cml4IDQuMCBvbiB0aGUgTUlQUyBtYWNoaW5lLCBAZmlsZXtzdGRpby5ofSBkb2VzIG5vdCB3b3JrIHdpdGggR05VCitDQyBhdCBhbGwgdW5sZXNzIGl0IGhhcyBiZWVuIGZpeGVkIHdpdGggQGNvZGV7Zml4aW5jbHVkZXN9LiAgVGhpcyBjYXVzZXMKK3Byb2JsZW1zIGluIGJ1aWxkaW5nIEdOVSBDQy4gIE9uY2UgR05VIENDIGlzIGluc3RhbGxlZCwgdGhlIHByb2JsZW1zIGdvCithd2F5LgorCitUbyB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0sIHdoZW4gbWFraW5nIHRoZSBzdGFnZSAxIGNvbXBpbGVyLCBzcGVjaWZ5Cit0aGlzIG9wdGlvbiB0byBNYWtlOgorCitAZXhhbXBsZQorR0NDX0ZPUl9UQVJHRVQ9Ii4veGdjYyAtQi4vIC1JLi9pbmNsdWRlIgorQGVuZCBleGFtcGxlCisKK1doZW4gbWFraW5nIHN0YWdlIDIgYW5kIHN0YWdlIDMsIHNwZWNpZnkgdGhpcyBvcHRpb246CisKK0BleGFtcGxlCitDRkxBR1M9Ii1nIC1JLi9pbmNsdWRlIgorQGVuZCBleGFtcGxlCisKK0BpdGVtCitVc2VycyBoYXZlIHJlcG9ydGVkIHNvbWUgcHJvYmxlbXMgd2l0aCB2ZXJzaW9uIDIuMCBvZiB0aGUgTUlQUworY29tcGlsZXIgdG9vbHMgdGhhdCB3ZXJlIHNoaXBwZWQgd2l0aCBVbHRyaXggNC4xLiAgVmVyc2lvbiAyLjEwCit3aGljaCBjYW1lIHdpdGggVWx0cml4IDQuMiBzZWVtcyB0byB3b3JrIGZpbmUuCisKK1VzZXJzIGhhdmUgYWxzbyByZXBvcnRlZCBzb21lIHByb2JsZW1zIHdpdGggdmVyc2lvbiAyLjIwIG9mIHRoZQorTUlQUyBjb21waWxlciB0b29scyB0aGF0IHdlcmUgc2hpcHBlZCB3aXRoIFJJU0Mvb3MgNC54LiAgVGhlIGVhcmxpZXIKK3ZlcnNpb24gMi4xMSBzZWVtcyB0byB3b3JrIGZpbmUuCisKK0BpdGVtCitTb21lIHZlcnNpb25zIG9mIHRoZSBNSVBTIGxpbmtlciB3aWxsIGlzc3VlIGFuIGFzc2VydGlvbiBmYWlsdXJlCit3aGVuIGxpbmtpbmcgY29kZSB0aGF0IHVzZXMgQGNvZGV7YWxsb2NhfSBhZ2FpbnN0IHNoYXJlZAorbGlicmFyaWVzIG9uIFJJU0MtT1MgNS4wLCBhbmQgREVDJ3MgT1NGLzEgc3lzdGVtcy4gIFRoaXMgaXMgYSBidWcKK2luIHRoZSBsaW5rZXIsIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgZml4ZWQgaW4gZnV0dXJlIHJldmlzaW9ucy4KK1RvIHByb3RlY3QgYWdhaW5zdCB0aGlzLCBHTlUgQ0MgcGFzc2VzIEBzYW1wey1ub25fc2hhcmVkfSB0byB0aGUKK2xpbmtlciB1bmxlc3MgeW91IHBhc3MgYW4gZXhwbGljaXQgQHNhbXB7LXNoYXJlZH0gb3IKK0BzYW1wey1jYWxsX3NoYXJlZH0gc3dpdGNoLgorCitAaXRlbQorT24gU3lzdGVtIFYgcmVsZWFzZSAzLCB5b3UgbWF5IGdldCB0aGlzIGVycm9yIG1lc3NhZ2UKK3doaWxlIGxpbmtpbmc6CisKK0BzbWFsbGV4YW1wbGUKK2xkIGZhdGFsOiBmYWlsZWQgdG8gd3JpdGUgc3ltYm9sIG5hbWUgQHZhcntzb21ldGhpbmd9CisgaW4gc3RyaW5ncyB0YWJsZSBmb3IgZmlsZSBAdmFye3doYXRldmVyfQorQGVuZCBzbWFsbGV4YW1wbGUKKworVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGlzayBpcyBmdWxsIG9yIHlvdXIgVUxJTUlUIHdvbid0IGFsbG93Cit0aGUgZmlsZSB0byBiZSBhcyBsYXJnZSBhcyBpdCBuZWVkcyB0byBiZS4KKworVGhpcyBwcm9ibGVtIGNhbiBhbHNvIHJlc3VsdCBiZWNhdXNlIHRoZSBrZXJuZWwgcGFyYW1ldGVyIEBjb2Rle01BWFVNRU19CitpcyB0b28gc21hbGwuICBJZiBzbywgeW91IG11c3QgcmVnZW5lcmF0ZSB0aGUga2VybmVsIGFuZCBtYWtlIHRoZSB2YWx1ZQorbXVjaCBsYXJnZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyByZXBvcnRlZCB0byBiZSAxMDI0OyBhIHZhbHVlIG9mIDMyNzY4CitpcyBzYWlkIHRvIHdvcmsuICBTbWFsbGVyIHZhbHVlcyBtYXkgYWxzbyB3b3JrLgorCitAaXRlbQorT24gU3lzdGVtIFYsIGlmIHlvdSBnZXQgYW4gZXJyb3IgbGlrZSB0aGlzLAorCitAZXhhbXBsZQorL3Vzci9sb2NhbC9saWIvYmlzb24uc2ltcGxlOiBJbiBmdW5jdGlvbiBgeXlwYXJzZSc6CisvdXNyL2xvY2FsL2xpYi9iaXNvbi5zaW1wbGU6NjI1OiB2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3RoYXQgdG9vIGluZGljYXRlcyBhIHByb2JsZW0gd2l0aCBkaXNrIHNwYWNlLCBVTElNSVQsIG9yIEBjb2Rle01BWFVNRU19LgorCitAaXRlbQorQ3VycmVudCBHTlUgQ0MgdmVyc2lvbnMgcHJvYmFibHkgZG8gbm90IHdvcmsgb24gdmVyc2lvbiAyIG9mIHRoZSBOZVhUCitvcGVyYXRpbmcgc3lzdGVtLgorCitAaXRlbQorT24gTmVYVFN0ZXAgMy4wLCB0aGUgT2JqZWN0aXZlIEMgY29tcGlsZXIgZG9lcyBub3Qgd29yaywgZHVlLAorYXBwYXJlbnRseSwgdG8gYSBrZXJuZWwgYnVnIHRoYXQgaXQgaGFwcGVucyB0byB0cmlnZ2VyLiAgVGhpcyBwcm9ibGVtCitkb2VzIG5vdCBoYXBwZW4gb24gMy4xLgorCitAaXRlbQorT24gdGhlIFRvd2VyIG1vZGVscyA0QHZhcntufTAgYW5kIDZAdmFye259MCwgYnkgZGVmYXVsdCBhIHByb2Nlc3MgaXMgbm90CithbGxvd2VkIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBtZWdhYnl0ZSBvZiBtZW1vcnkuICBHTlUgQ0MgY2Fubm90IGNvbXBpbGUKK2l0c2VsZiAob3IgbWFueSBvdGhlciBwcm9ncmFtcykgd2l0aCBAc2FtcHstT30gaW4gdGhhdCBtdWNoIG1lbW9yeS4KKworVG8gc29sdmUgdGhpcyBwcm9ibGVtLCByZWNvbmZpZ3VyZSB0aGUga2VybmVsIGFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUKK3RvIHRoZSBjb25maWd1cmF0aW9uIGZpbGU6CisKK0BzbWFsbGV4YW1wbGUKK01BWFVNRU0gPSA0MDk2CitAZW5kIHNtYWxsZXhhbXBsZQorCitAaXRlbQorT24gSFAgOTAwMCBzZXJpZXMgMzAwIG9yIDQwMCBydW5uaW5nIEhQLVVYIHJlbGVhc2UgOC4wLCB0aGVyZSBpcyBhIGJ1ZworaW4gdGhlIGFzc2VtYmxlciB0aGF0IG11c3QgYmUgZml4ZWQgYmVmb3JlIEdOVSBDQyBjYW4gYmUgYnVpbHQuICBUaGlzCitidWcgbWFuaWZlc3RzIGl0c2VsZiBkdXJpbmcgdGhlIGZpcnN0IHN0YWdlIG9mIGNvbXBpbGF0aW9uLCB3aGlsZQorYnVpbGRpbmcgQGZpbGV7bGliZ2NjMi5hfToKKworQHNtYWxsZXhhbXBsZQorX2Zsb2F0ZGlzZgorY2MxOiB3YXJuaW5nOiBgLWcnIG9wdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBHQ0MKK2NjMTogd2FybmluZzogYC1nMScgb3B0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIEdDQworLi94Z2NjOiBJbnRlcm5hbCBjb21waWxlciBlcnJvcjogcHJvZ3JhbSBhcyBnb3QgZmF0YWwgc2lnbmFsIDExCitAZW5kIHNtYWxsZXhhbXBsZQorCitBIHBhdGNoZWQgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibGVyIGlzIGF2YWlsYWJsZSBieSBhbm9ueW1vdXMgZnRwIGZyb20KK0Bjb2Rle2FsdGRvcmYuYWkubWl0LmVkdX0gYXMgdGhlIGZpbGUKK0BmaWxle2FyY2hpdmUvY3BoL2hwdXgtOC4wLWFzc2VtYmxlcn0uICBJZiB5b3UgaGF2ZSBIUCBzb2Z0d2FyZSBzdXBwb3J0LAordGhlIHBhdGNoIGNhbiBhbHNvIGJlIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gSFAsIGFzIGRlc2NyaWJlZCBpbiB0aGUKK2ZvbGxvd2luZyBub3RlOgorCitAcXVvdGF0aW9uCitUaGlzIGlzIHRoZSBwYXRjaGVkIGFzc2VtYmxlciwgdG8gcGF0Y2ggU1IjMTY1My0wMTA0MzksIHdoZXJlIHRoZQorYXNzZW1ibGVyIGFib3J0cyBvbiBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKK1RoZSBidWcgaXMgbm90IHJlYWxseSBpbiB0aGUgYXNzZW1ibGVyLCBidXQgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5Cit2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBgYGN2dG51bSgzYyknJy4gIFRoZSBidWcgb24gYGBjdnRudW0oM2MpJycgaXMKK1NSIzQ3MDEtMDc4NDUxLiAgQW55d2F5LCB0aGUgYXR0YWNoZWQgYXNzZW1ibGVyIHVzZXMgdGhlIGFyY2hpdmUKK2xpYnJhcnkgdmVyc2lvbiBvZiBgYGN2dG51bSgzYyknJyBhbmQgdGh1cyBkb2VzIG5vdCBleGhpYml0IHRoZSBidWcuCitAZW5kIHF1b3RhdGlvbgorCitUaGlzIHBhdGNoIGlzIGFsc28ga25vd24gYXMgUEhDT180NDg0LgorCitAaXRlbQorT24gSFAtVVggdmVyc2lvbiA4LjA1LCBidXQgbm90IG9uIDguMDcgb3IgbW9yZSByZWNlbnQgdmVyc2lvbnMsCit0aGUgQGNvZGV7Zml4cHJvdG99IHNoZWxsIHNjcmlwdCB0cmlnZ2VycyBhIGJ1ZyBpbiB0aGUgc3lzdGVtIHNoZWxsLgorSWYgeW91IGVuY291bnRlciB0aGlzIHByb2JsZW0sIHVwZ3JhZGUgeW91ciBvcGVyYXRpbmcgc3lzdGVtIG9yCit1c2UgQkFTSCAodGhlIEdOVSBzaGVsbCkgdG8gcnVuIEBjb2Rle2ZpeHByb3RvfS4KKworQGl0ZW0KK1NvbWUgdmVyc2lvbnMgb2YgdGhlIFB5cmFtaWQgQyBjb21waWxlciBhcmUgcmVwb3J0ZWQgdG8gYmUgdW5hYmxlIHRvCitjb21waWxlIEdOVSBDQy4gIFlvdSBtdXN0IHVzZSBhbiBvbGRlciB2ZXJzaW9uIG9mIEdOVSBDQyBmb3IKK2Jvb3RzdHJhcHBpbmcuICBPbmUgaW5kaWNhdGlvbiBvZiB0aGlzIHByb2JsZW0gaXMgaWYgeW91IGdldCBhIGNyYXNoCit3aGVuIEdOVSBDQyBjb21waWxlcyB0aGUgZnVuY3Rpb24gQGNvZGV7bXVsZGkzfSBpbiBmaWxlIEBmaWxle2xpYmdjYzIuY30uCisKK1lvdSBtYXkgYmUgYWJsZSB0byBzdWNjZWVkIGJ5IGdldHRpbmcgR05VIENDIHZlcnNpb24gMSwgaW5zdGFsbGluZyBpdCwKK2FuZCB1c2luZyBpdCB0byBjb21waWxlIEdOVSBDQyB2ZXJzaW9uIDIuICBUaGUgYnVnIGluIHRoZSBQeXJhbWlkIEMKK2NvbXBpbGVyIGRvZXMgbm90IHNlZW0gdG8gYWZmZWN0IEdOVSBDQyB2ZXJzaW9uIDEuCisKK0BpdGVtCitUaGVyZSBtYXkgYmUgc2ltaWxhciBwcm9ibGVtcyBvbiBTeXN0ZW0gViBSZWxlYXNlIDMuMSBvbiAzODYgc3lzdGVtcy4KKworQGl0ZW0KK09uIHRoZSBJbnRlbCBQYXJhZ29uIChhbiBpODYwIG1hY2hpbmUpLCBpZiB5b3UgYXJlIHVzaW5nIG9wZXJhdGluZworc3lzdGVtIHZlcnNpb24gMS4wLCB5b3Ugd2lsbCBnZXQgd2FybmluZ3Mgb3IgZXJyb3JzIGFib3V0IHJlZGVmaW5pdGlvbgorb2YgQGNvZGV7dmFfYXJnfSB3aGVuIHlvdSBidWlsZCBHTlUgQ0MuCisKK0lmIHRoaXMgaGFwcGVucywgdGhlbiB5b3UgbmVlZCB0byBsaW5rIG1vc3QgcHJvZ3JhbXMgd2l0aCB0aGUgbGlicmFyeQorQGZpbGV7aWNsaWIuYX0uICBZb3UgbXVzdCBhbHNvIG1vZGlmeSBAZmlsZXtzdGRpby5ofSBhcyBmb2xsb3dzOiBiZWZvcmUKK3RoZSBsaW5lcworCitAZXhhbXBsZQorI2lmICAgICBkZWZpbmVkKF9faTg2MF9fKSAmJiAhZGVmaW5lZChfVkFfTElTVCkKKyNpbmNsdWRlIDx2YV9saXN0Lmg+CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitpbnNlcnQgdGhlIGxpbmUKKworQGV4YW1wbGUKKyNpZiBfX1BHQ19fCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CithbmQgYWZ0ZXIgdGhlIGxpbmVzCisKK0BleGFtcGxlCitleHRlcm4gaW50ICB2cHJpbnRmKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCApOworZXh0ZXJuIGludCAgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QgKTsKKyNlbmRpZgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAoraW5zZXJ0IHRoZSBsaW5lCisKK0BleGFtcGxlCisjZW5kaWYgLyogX19QR0NfXyAqLworQGVuZCBleGFtcGxlCisKK1RoZXNlIHByb2JsZW1zIGRvbid0IGV4aXN0IGluIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiAxLjEuCisKK0BpdGVtCitPbiB0aGUgQWx0b3MgMzA2OCwgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBHTlUgQ0Mgd29uJ3Qgd29yayB1bmxlc3MgeW91CitmaXggYSBrZXJuZWwgYnVnLiAgVGhpcyBoYXBwZW5zIHVzaW5nIHN5c3RlbSB2ZXJzaW9ucyBWLjIuMiAxLjBnVDEgYW5kCitWLjIuMiAxLjBlIGFuZCBwZXJoYXBzIGxhdGVyIHZlcnNpb25zIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUKK0BmaWxle1JFQURNRS5BTFRPU30uCisKK0BpdGVtCitZb3Ugd2lsbCBnZXQgc2V2ZXJhbCBzb3J0cyBvZiBjb21waWxhdGlvbiBhbmQgbGlua2luZyBlcnJvcnMgb24gdGhlCit3ZTMyayBpZiB5b3UgZG9uJ3QgZm9sbG93IHRoZSBzcGVjaWFsIGluc3RydWN0aW9ucy4gIEB4cmVme0NvbmZpZ3VyYXRpb25zfS4KKworQGl0ZW0KK0EgYnVnIGluIHRoZSBIUC1VWCA4LjA1IChhbmQgZWFybGllcikgc2hlbGwgd2lsbCBjYXVzZSB0aGUgZml4cHJvdG8KK3Byb2dyYW0gdG8gcmVwb3J0IGFuIGVycm9yIG9mIHRoZSBmb3JtOgorCitAZXhhbXBsZQorLi9maXhwcm90bzogc2ggaW50ZXJuYWwgMUsgYnVmZmVyIG92ZXJmbG93CitAZW5kIGV4YW1wbGUKKworVG8gZml4IHRoaXMsIGNoYW5nZSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZml4cHJvdG8gc2NyaXB0IHRvIGxvb2sgbGlrZToKKworQGV4YW1wbGUKKyMhL2Jpbi9rc2gKK0BlbmQgZXhhbXBsZQorQGVuZCBpdGVtaXplCisKK0Bub2RlIENyb3NzLUNvbXBpbGVyIFByb2JsZW1zCitAc2VjdGlvbiBDcm9zcy1Db21waWxlciBQcm9ibGVtcworCitZb3UgbWF5IHJ1biBpbnRvIHByb2JsZW1zIHdpdGggY3Jvc3MgY29tcGlsYXRpb24gb24gY2VydGFpbiBtYWNoaW5lcywKK2ZvciBzZXZlcmFsIHJlYXNvbnMuCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitDcm9zcyBjb21waWxhdGlvbiBjYW4gcnVuIGludG8gdHJvdWJsZSBmb3IgY2VydGFpbiBtYWNoaW5lcyBiZWNhdXNlCitzb21lIHRhcmdldCBtYWNoaW5lcycgYXNzZW1ibGVycyByZXF1aXJlIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgdG8gYmUKK3dyaXR0ZW4gYXMgQGVtcGh7aW50ZWdlcn0gY29uc3RhbnRzIGluIGNlcnRhaW4gY29udGV4dHMuCisKK1RoZSBjb21waWxlciB3cml0ZXMgdGhlc2UgaW50ZWdlciBjb25zdGFudHMgYnkgZXhhbWluaW5nIHRoZSBmbG9hdGluZworcG9pbnQgdmFsdWUgYXMgYW4gaW50ZWdlciBhbmQgcHJpbnRpbmcgdGhhdCBpbnRlZ2VyLCBiZWNhdXNlIHRoaXMgaXMKK3NpbXBsZSB0byB3cml0ZSBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlIGRldGFpbHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50CityZXByZXNlbnRhdGlvbi4gIEJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgaWYgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcgb24KK2EgZGlmZmVyZW50IG1hY2hpbmUgd2l0aCBhbiBpbmNvbXBhdGlibGUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0LCBvcgorZXZlbiBhIGRpZmZlcmVudCBieXRlLW9yZGVyaW5nLgorCitJbiBhZGRpdGlvbiwgY29ycmVjdCBjb25zdGFudCBmb2xkaW5nIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlcworcmVxdWlyZXMgcmVwcmVzZW50aW5nIHRoZW0gaW4gdGhlIHRhcmdldCBtYWNoaW5lJ3MgZm9ybWF0LgorKFRoZSBDIHN0YW5kYXJkIGRvZXMgbm90IHF1aXRlIHJlcXVpcmUgdGhpcywgYnV0IGluIHByYWN0aWNlCitpdCBpcyB0aGUgb25seSB3YXkgdG8gd2luLikKKworSXQgaXMgbm93IHBvc3NpYmxlIHRvIG92ZXJjb21lIHRoZXNlIHByb2JsZW1zIGJ5IGRlZmluaW5nIG1hY3JvcyBzdWNoCithcyBAY29kZXtSRUFMX1ZBTFVFX1RZUEV9LiAgQnV0IGRvaW5nIHNvIGlzIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mCit3b3JrIGZvciBlYWNoIHRhcmdldCBtYWNoaW5lLgorQGlmc2V0IElOVEVSTkFMUworQHhyZWZ7Q3Jvc3MtY29tcGlsYXRpb259LgorQGVuZCBpZnNldAorQGlmY2xlYXIgSU5URVJOQUxTCitAeHJlZntDcm9zcy1jb21waWxhdGlvbiwsQ3Jvc3MgQ29tcGlsYXRpb24gYW5kIEZsb2F0aW5nIFBvaW50IEZvcm1hdCwKK2djYy5pbmZvLCBVc2luZyBhbmQgUG9ydGluZyBHQ0N9LgorQGVuZCBpZmNsZWFyCisKK0BpdGVtCitBdCBwcmVzZW50LCB0aGUgcHJvZ3JhbSBAZmlsZXttaXBzLXRmaWxlfSB3aGljaCBhZGRzIGRlYnVnCitzdXBwb3J0IHRvIG9iamVjdCBmaWxlcyBvbiBNSVBTIHN5c3RlbXMgZG9lcyBub3Qgd29yayBpbiBhIGNyb3NzCitjb21waWxlIGVudmlyb25tZW50LgorQGVuZCBpdGVtaXplCisKK0Bub2RlIEludGVyb3BlcmF0aW9uCitAc2VjdGlvbiBJbnRlcm9wZXJhdGlvbgorCitUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaW91cyBkaWZmaWN1bHRpZXMgZW5jb3VudGVyZWQgaW4gdXNpbmcgR05VIEMgb3IKK0dOVSBDKysgdG9nZXRoZXIgd2l0aCBvdGhlciBjb21waWxlcnMgb3Igd2l0aCB0aGUgYXNzZW1ibGVycywgbGlua2VycywKK2xpYnJhcmllcyBhbmQgZGVidWdnZXJzIG9uIGNlcnRhaW4gc3lzdGVtcy4KKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK09iamVjdGl2ZSBDIGRvZXMgbm90IHdvcmsgb24gdGhlIFJTLzYwMDAuCisKK0BpdGVtCitHTlUgQysrIGRvZXMgbm90IGRvIG5hbWUgbWFuZ2xpbmcgaW4gdGhlIHNhbWUgd2F5IGFzIG90aGVyIEMrKworY29tcGlsZXJzLiAgVGhpcyBtZWFucyB0aGF0IG9iamVjdCBmaWxlcyBjb21waWxlZCB3aXRoIG9uZSBjb21waWxlcgorY2Fubm90IGJlIHVzZWQgd2l0aCBhbm90aGVyLgorCitUaGlzIGVmZmVjdCBpcyBpbnRlbnRpb25hbCwgdG8gcHJvdGVjdCB5b3UgZnJvbSBtb3JlIHN1YnRsZSBwcm9ibGVtcy4KK0NvbXBpbGVycyBkaWZmZXIgYXMgdG8gbWFueSBpbnRlcm5hbCBkZXRhaWxzIG9mIEMrKyBpbXBsZW1lbnRhdGlvbiwKK2luY2x1ZGluZzogaG93IGNsYXNzIGluc3RhbmNlcyBhcmUgbGFpZCBvdXQsIGhvdyBtdWx0aXBsZSBpbmhlcml0YW5jZSBpcworaW1wbGVtZW50ZWQsIGFuZCBob3cgdmlydHVhbCBmdW5jdGlvbiBjYWxscyBhcmUgaGFuZGxlZC4gIElmIHRoZSBuYW1lCitlbmNvZGluZyB3ZXJlIG1hZGUgdGhlIHNhbWUsIHlvdXIgcHJvZ3JhbXMgd291bGQgbGluayBhZ2FpbnN0IGxpYnJhcmllcworcHJvdmlkZWQgZnJvbSBvdGhlciBjb21waWxlcnMtLS1idXQgdGhlIHByb2dyYW1zIHdvdWxkIHRoZW4gY3Jhc2ggd2hlbgorcnVuLiAgSW5jb21wYXRpYmxlIGxpYnJhcmllcyBhcmUgdGhlbiBkZXRlY3RlZCBhdCBsaW5rIHRpbWUsIHJhdGhlciB0aGFuCithdCBydW4gdGltZS4KKworQGl0ZW0KK09sZGVyIEdEQiB2ZXJzaW9ucyBzb21ldGltZXMgZmFpbCB0byByZWFkIHRoZSBvdXRwdXQgb2YgR05VIENDIHZlcnNpb24KKzIuICBJZiB5b3UgaGF2ZSB0cm91YmxlLCBnZXQgR0RCIHZlcnNpb24gNC40IG9yIGxhdGVyLgorCitAaXRlbQorQGNpbmRleCBEQlgKK0RCWCByZWplY3RzIHNvbWUgZmlsZXMgcHJvZHVjZWQgYnkgR05VIENDLCB0aG91Z2ggaXQgYWNjZXB0cyBzaW1pbGFyCitjb25zdHJ1Y3RzIGluIG91dHB1dCBmcm9tIFBDQy4gIFVudGlsIHNvbWVvbmUgY2FuIHN1cHBseSBhIGNvaGVyZW50CitkZXNjcmlwdGlvbiBvZiB3aGF0IGlzIHZhbGlkIERCWCBpbnB1dCBhbmQgd2hhdCBpcyBub3QsIHRoZXJlIGlzCitub3RoaW5nIEkgY2FuIGRvIGFib3V0IHRoZXNlIHByb2JsZW1zLiAgWW91IGFyZSBvbiB5b3VyIG93bi4KKworQGl0ZW0KK1RoZSBHTlUgYXNzZW1ibGVyIChHQVMpIGRvZXMgbm90IHN1cHBvcnQgUElDLiAgVG8gZ2VuZXJhdGUgUElDIGNvZGUsIHlvdQorbXVzdCB1c2Ugc29tZSBvdGhlciBhc3NlbWJsZXIsIHN1Y2ggYXMgQGZpbGV7L2Jpbi9hc30uCisKK0BpdGVtCitPbiBzb21lIEJTRCBzeXN0ZW1zLCBpbmNsdWRpbmcgc29tZSB2ZXJzaW9ucyBvZiBVbHRyaXgsIHVzZSBvZiBwcm9maWxpbmcKK2NhdXNlcyBzdGF0aWMgdmFyaWFibGUgZGVzdHJ1Y3RvcnMgKGN1cnJlbnRseSB1c2VkIG9ubHkgaW4gQysrKSBub3QgdG8KK2JlIHJ1bi4KKworQGl0ZW0KK1VzZSBvZiBAc2FtcHstSS91c3IvaW5jbHVkZX0gbWF5IGNhdXNlIHRyb3VibGUuCisKK01hbnkgc3lzdGVtcyBjb21lIHdpdGggaGVhZGVyIGZpbGVzIHRoYXQgd29uJ3Qgd29yayB3aXRoIEdOVSBDQyB1bmxlc3MKK2NvcnJlY3RlZCBieSBAY29kZXtmaXhpbmNsdWRlc30uICBUaGUgY29ycmVjdGVkIGhlYWRlciBmaWxlcyBnbyBpbiBhIG5ldworZGlyZWN0b3J5OyBHTlUgQ0Mgc2VhcmNoZXMgdGhpcyBkaXJlY3RvcnkgYmVmb3JlIEBmaWxley91c3IvaW5jbHVkZX0uCitJZiB5b3UgdXNlIEBzYW1wey1JL3Vzci9pbmNsdWRlfSwgdGhpcyB0ZWxscyBHTlUgQ0MgdG8gc2VhcmNoCitAZmlsZXsvdXNyL2luY2x1ZGV9IGVhcmxpZXIgb24sIGJlZm9yZSB0aGUgY29ycmVjdGVkIGhlYWRlcnMuICBUaGUKK3Jlc3VsdCBpcyB0aGF0IHlvdSBnZXQgdGhlIHVuY29ycmVjdGVkIGhlYWRlciBmaWxlcy4KKworSW5zdGVhZCwgeW91IHNob3VsZCB1c2UgdGhlc2Ugb3B0aW9ucyAod2hlbiBjb21waWxpbmcgQyBwcm9ncmFtcyk6CisKK0BzbWFsbGV4YW1wbGUKKy1JL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9AdmFye3RhcmdldH0vQHZhcnt2ZXJzaW9ufS9pbmNsdWRlIC1JL3Vzci9pbmNsdWRlCitAZW5kIHNtYWxsZXhhbXBsZQorCitGb3IgQysrIHByb2dyYW1zLCBHTlUgQ0MgYWxzbyB1c2VzIGEgc3BlY2lhbCBkaXJlY3RvcnkgdGhhdCBkZWZpbmVzIEMrKworaW50ZXJmYWNlcyB0byBzdGFuZGFyZCBDIHN1YnJvdXRpbmVzLiAgVGhpcyBkaXJlY3RvcnkgaXMgbWVhbnQgdG8gYmUKK3NlYXJjaGVkIEBlbXBoe2JlZm9yZX0gb3RoZXIgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3Rvcmllcywgc28gdGhhdCBpdAordGFrZXMgcHJlY2VkZW5jZS4gIElmIHlvdSBhcmUgY29tcGlsaW5nIEMrKyBwcm9ncmFtcyBhbmQgc3BlY2lmeWluZworaW5jbHVkZSBkaXJlY3RvcmllcyBleHBsaWNpdGx5LCB1c2UgdGhpcyBvcHRpb24gZmlyc3QsIHRoZW4gdGhlIHR3bworb3B0aW9ucyBhYm92ZToKKworQGV4YW1wbGUKKy1JL3Vzci9sb2NhbC9saWIvZysrLWluY2x1ZGUKK0BlbmQgZXhhbXBsZQorCitAaWdub3JlCitAY2luZGV4IEBjb2Rle3Zmb3JrfSwgZm9yIHRoZSBTdW4tNAorQGl0ZW0KK1RoZXJlIGlzIGEgYnVnIGluIEBjb2Rle3Zmb3JrfSBvbiB0aGUgU3VuLTQgd2hpY2ggY2F1c2VzIHRoZSByZWdpc3RlcnMKK29mIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGNsb2JiZXIgdGhvc2Ugb2YgdGhlIHBhcmVudC4gIEJlY2F1c2Ugb2YgdGhpcywKK3Byb2dyYW1zIHRoYXQgY2FsbCBAY29kZXt2Zm9ya30gYXJlIGxpa2VseSB0byBsb3NlIHdoZW4gY29tcGlsZWQKK29wdGltaXplZCB3aXRoIEdOVSBDQyB3aGVuIHRoZSBjaGlsZCBjb2RlIGFsdGVycyByZWdpc3RlcnMgd2hpY2ggY29udGFpbgorQyB2YXJpYWJsZXMgaW4gdGhlIHBhcmVudC4gIFRoaXMgYWZmZWN0cyB2YXJpYWJsZXMgd2hpY2ggYXJlIGxpdmUgaW4gdGhlCitwYXJlbnQgYWNyb3NzIHRoZSBjYWxsIHRvIEBjb2Rle3Zmb3JrfS4KKworSWYgeW91IGVuY291bnRlciB0aGlzLCB5b3UgY2FuIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIGJ5IGRlY2xhcmluZwordmFyaWFibGVzIEBjb2Rle3ZvbGF0aWxlfSBpbiB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBAY29kZXt2Zm9ya30sIHVudGlsCit0aGUgcHJvYmxlbSBnb2VzIGF3YXksIG9yIGJ5IG5vdCBkZWNsYXJpbmcgdGhlbSBAY29kZXtyZWdpc3Rlcn0gYW5kIG5vdAordXNpbmcgQHNhbXB7LU99IGZvciB0aG9zZSBzb3VyY2UgZmlsZXMuCitAZW5kIGlnbm9yZQorCitAaXRlbQorT24gc29tZSBTR0kgc3lzdGVtcywgd2hlbiB5b3UgdXNlIEBzYW1wey1sZ2xfc30gYXMgYW4gb3B0aW9uLAoraXQgZ2V0cyB0cmFuc2xhdGVkIG1hZ2ljYWxseSB0byBAc2FtcHstbGdsX3MgLWxYMTFfcyAtbGNfc30uCitOYXR1cmFsbHksIHRoaXMgZG9lcyBub3QgaGFwcGVuIHdoZW4geW91IHVzZSBHTlUgQ0MuCitZb3UgbXVzdCBzcGVjaWZ5IGFsbCB0aHJlZSBvcHRpb25zIGV4cGxpY2l0bHkuCisKK0BpdGVtCitPbiBhIFNwYXJjLCBHTlUgQ0MgYWxpZ25zIGFsbCB2YWx1ZXMgb2YgdHlwZSBAY29kZXtkb3VibGV9IG9uIGFuIDgtYnl0ZQorYm91bmRhcnksIGFuZCBpdCBleHBlY3RzIGV2ZXJ5IEBjb2Rle2RvdWJsZX0gdG8gYmUgc28gYWxpZ25lZC4gIFRoZSBTdW4KK2NvbXBpbGVyIHVzdWFsbHkgZ2l2ZXMgQGNvZGV7ZG91YmxlfSB2YWx1ZXMgOC1ieXRlIGFsaWdubWVudCwgd2l0aCBvbmUKK2V4Y2VwdGlvbjogZnVuY3Rpb24gYXJndW1lbnRzIG9mIHR5cGUgQGNvZGV7ZG91YmxlfSBtYXkgbm90IGJlIGFsaWduZWQuCisKK0FzIGEgcmVzdWx0LCBpZiBhIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGggU3VuIENDIHRha2VzIHRoZSBhZGRyZXNzIG9mIGFuCithcmd1bWVudCBvZiB0eXBlIEBjb2Rle2RvdWJsZX0gYW5kIHBhc3NlcyB0aGlzIHBvaW50ZXIgb2YgdHlwZQorQGNvZGV7ZG91YmxlICp9IHRvIGEgZnVuY3Rpb24gY29tcGlsZWQgd2l0aCBHTlUgQ0MsIGRlcmVmZXJlbmNpbmcgdGhlCitwb2ludGVyIG1heSBjYXVzZSBhIGZhdGFsIHNpZ25hbC4KKworT25lIHdheSB0byBzb2x2ZSB0aGlzIHByb2JsZW0gaXMgdG8gY29tcGlsZSB5b3VyIGVudGlyZSBwcm9ncmFtIHdpdGggR05VCitDQy4gIEFub3RoZXIgc29sdXRpb24gaXMgdG8gbW9kaWZ5IHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNvbXBpbGVkIHdpdGgKK1N1biBDQyB0byBjb3B5IHRoZSBhcmd1bWVudCBpbnRvIGEgbG9jYWwgdmFyaWFibGU7IGxvY2FsIHZhcmlhYmxlcworYXJlIGFsd2F5cyBwcm9wZXJseSBhbGlnbmVkLiAgQSB0aGlyZCBzb2x1dGlvbiBpcyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uCit0aGF0IHVzZXMgdGhlIHBvaW50ZXIgdG8gZGVyZWZlcmVuY2UgaXQgdmlhIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24KK0Bjb2Rle2FjY2Vzc19kb3VibGV9IGluc3RlYWQgb2YgZGlyZWN0bHkgd2l0aCBAc2FtcHsqfToKKworQHNtYWxsZXhhbXBsZQoraW5saW5lIGRvdWJsZQorYWNjZXNzX2RvdWJsZSAoZG91YmxlICp1bmFsaWduZWRfcHRyKQorQHsKKyAgdW5pb24gZDJpIEB7IGRvdWJsZSBkOyBpbnQgaVsyXTsgQH07CisKKyAgdW5pb24gZDJpICpwID0gKHVuaW9uIGQyaSAqKSB1bmFsaWduZWRfcHRyOworICB1bmlvbiBkMmkgdTsKKworICB1LmlbMF0gPSBwLT5pWzBdOworICB1LmlbMV0gPSBwLT5pWzFdOworCisgIHJldHVybiB1LmQ7CitAfQorQGVuZCBzbWFsbGV4YW1wbGUKKworQG5vaW5kZW50CitTdG9yaW5nIGludG8gdGhlIHBvaW50ZXIgY2FuIGJlIGRvbmUgbGlrZXdpc2Ugd2l0aCB0aGUgc2FtZSB1bmlvbi4KKworQGl0ZW0KK09uIFNvbGFyaXMsIHRoZSBAY29kZXttYWxsb2N9IGZ1bmN0aW9uIGluIHRoZSBAZmlsZXtsaWJtYWxsb2MuYX0gbGlicmFyeQorbWF5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGlzIG9ubHkgNCBieXRlIGFsaWduZWQuICBTaW5jZSBHTlUgQ0Mgb24gdGhlCitTcGFyYyBhc3N1bWVzIHRoYXQgZG91YmxlcyBhcmUgOCBieXRlIGFsaWduZWQsIHRoaXMgbWF5IHJlc3VsdCBpbiBhCitmYXRhbCBzaWduYWwgaWYgZG91YmxlcyBhcmUgc3RvcmVkIGluIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlCitAZmlsZXtsaWJtYWxsb2MuYX0gbGlicmFyeS4KKworVGhlIHNvbHV0aW9uIGlzIHRvIG5vdCB1c2UgdGhlIEBmaWxle2xpYm1hbGxvYy5hfSBsaWJyYXJ5LiAgVXNlIGluc3RlYWQKK0Bjb2Rle21hbGxvY30gYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gQGZpbGV7bGliYy5hfTsgdGhleSBkbyBub3QgaGF2ZQordGhpcyBwcm9ibGVtLgorCitAaXRlbQorU3VuIGZvcmdvdCB0byBpbmNsdWRlIGEgc3RhdGljIHZlcnNpb24gb2YgQGZpbGV7bGliZGwuYX0gd2l0aCBzb21lCit2ZXJzaW9ucyBvZiBTdW5PUyAobWFpbmx5IDQuMSkuICBUaGlzIHJlc3VsdHMgaW4gdW5kZWZpbmVkIHN5bWJvbHMgd2hlbgorbGlua2luZyBzdGF0aWMgYmluYXJpZXMgKHRoYXQgaXMsIGlmIHlvdSB1c2UgQHNhbXB7LXN0YXRpY30pLiAgSWYgeW91CitzZWUgdW5kZWZpbmVkIHN5bWJvbHMgQGNvZGV7X2RsY2xvc2V9LCBAY29kZXtfZGxzeW19IG9yIEBjb2Rle19kbG9wZW59Cit3aGVuIGxpbmtpbmcsIGNvbXBpbGUgYW5kIGxpbmsgYWdhaW5zdCB0aGUgZmlsZQorQGZpbGV7bWl0L3V0aWwvbWlzYy9kbHN5bS5jfSBmcm9tIHRoZSBNSVQgdmVyc2lvbiBvZiBYIHdpbmRvd3MuCisKK0BpdGVtCitUaGUgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3JtYXQgdGhhdCB0aGUgU3BhcmMgcG9ydCBzdXBwb3J0cyBjdXJyZW50bHkKK3dvcmtzIGJ5IHVzaW5nIHRoZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBxdWFkLXdvcmQgZmxvYXRpbmcgcG9pbnQKK2luc3RydWN0aW9ucy4gIFNpbmNlIHRoZXJlIGlzIG5vIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgdGhlc2UKK2luc3RydWN0aW9ucyB0aGV5IG11c3QgYmUgZW11bGF0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBMb25nCitkb3VibGVzIGRvIG5vdCB3b3JrIGluIFN1biBPUyB2ZXJzaW9ucyA0LjAuMyBhbmQgZWFybGllciwgYmVjYXVzZSB0aGUKK2tlcm5lbCBlbXVsYXRvciB1c2VzIGFuIG9ic29sZXRlIGFuZCBpbmNvbXBhdGlibGUgZm9ybWF0LiAgTG9uZyBkb3VibGVzCitkbyBub3Qgd29yayBpbiBTdW4gT1MgdmVyc2lvbiA0LjEuMSBkdWUgdG8gYSBwcm9ibGVtIGluIGEgU3VuIGxpYnJhcnkuCitMb25nIGRvdWJsZXMgZG8gd29yayBvbiBTdW4gT1MgdmVyc2lvbnMgNC4xLjIgYW5kIGhpZ2hlciwgYnV0IEdOVSBDQworZG9lcyBub3QgZW5hYmxlIHRoZW0gYnkgZGVmYXVsdC4gIExvbmcgZG91YmxlcyBhcHBlYXIgdG8gd29yayBpbiBTdW4gT1MKKzUueCAoU29sYXJpcyAyLngpLgorCitAaXRlbQorT24gSFAtVVggdmVyc2lvbiA5LjAxIG9uIHRoZSBIUCBQQSwgdGhlIEhQIGNvbXBpbGVyIEBjb2Rle2NjfSBkb2VzIG5vdAorY29tcGlsZSBHTlUgQ0MgY29ycmVjdGx5LiAgV2UgZG8gbm90IHlldCBrbm93IHdoeS4gIEhvd2V2ZXIsIEdOVSBDQworY29tcGlsZWQgb24gZWFybGllciBIUC1VWCB2ZXJzaW9ucyB3b3JrcyBwcm9wZXJseSBvbiBIUC1VWCA5LjAxIGFuZCBjYW4KK2NvbXBpbGUgaXRzZWxmIHByb3Blcmx5IG9uIDkuMDEuCisKK0BpdGVtCitPbiB0aGUgSFAgUEEgbWFjaGluZSwgQURCIHNvbWV0aW1lcyBmYWlscyB0byB3b3JrIG9uIGZ1bmN0aW9ucyBjb21waWxlZAord2l0aCBHTlUgQ0MuICBTcGVjaWZpY2FsbHksIGl0IGZhaWxzIHRvIHdvcmsgb24gZnVuY3Rpb25zIHRoYXQgdXNlCitAY29kZXthbGxvY2F9IG9yIHZhcmlhYmxlLXNpemUgYXJyYXlzLiAgVGhpcyBpcyBiZWNhdXNlIEdOVSBDQyBkb2Vzbid0CitnZW5lcmF0ZSBIUC1VWCB1bndpbmQgZGVzY3JpcHRvcnMgZm9yIHN1Y2ggZnVuY3Rpb25zLiAgSXQgbWF5IGV2ZW4gYmUKK2ltcG9zc2libGUgdG8gZ2VuZXJhdGUgdGhlbS4KKworQGl0ZW0KK0RlYnVnZ2luZyAoQHNhbXB7LWd9KSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBIUCBQQSBtYWNoaW5lLCB1bmxlc3MgeW91IHVzZQordGhlIHByZWxpbWluYXJ5IEdOVSB0b29scyAoQHB4cmVme0luc3RhbGxhdGlvbn0pLgorCitAaXRlbQorVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgbGFiZWwgbWF5IGdlbmVyYXRlIGVycm9ycyBmcm9tIHRoZSBIUC1VWAorUEEgYXNzZW1ibGVyLiAgR0FTIGZvciB0aGUgUEEgZG9lcyBub3QgaGF2ZSB0aGlzIHByb2JsZW0uCisKK0BpdGVtCitVc2luZyBmbG9hdGluZyBwb2ludCBwYXJhbWV0ZXJzIGZvciBpbmRpcmVjdCBjYWxscyB0byBzdGF0aWMgZnVuY3Rpb25zCit3aWxsIG5vdCB3b3JrIHdoZW4gdXNpbmcgdGhlIEhQIGFzc2VtYmxlci4gIFRoZXJlIHNpbXBseSBpcyBubyB3YXkgZm9yIEdDQwordG8gc3BlY2lmeSB3aGF0IHJlZ2lzdGVycyBob2xkIGFyZ3VtZW50cyBmb3Igc3RhdGljIGZ1bmN0aW9ucyB3aGVuIHVzaW5nCit0aGUgSFAgYXNzZW1ibGVyLiAgR0FTIGZvciB0aGUgUEEgZG9lcyBub3QgaGF2ZSB0aGlzIHByb2JsZW0uCisKK0BpdGVtCitJbiBleHRyZW1lbHkgcmFyZSBjYXNlcyBpbnZvbHZpbmcgc29tZSB2ZXJ5IGxhcmdlIGZ1bmN0aW9ucyB5b3UgbWF5CityZWNlaXZlIGVycm9ycyBmcm9tIHRoZSBIUCBsaW5rZXIgY29tcGxhaW5pbmcgYWJvdXQgYW4gb3V0IG9mIGJvdW5kcwordW5jb25kaXRpb25hbCBicmFuY2ggb2Zmc2V0LiAgVGhpcyB1c2VkIHRvIG9jY3VyIG1vcmUgb2Z0ZW4gaW4gcHJldmlvdXMKK3ZlcnNpb25zIG9mIEdOVSBDQywgYnV0IGlzIG5vdyBleGNlcHRpb25hbGx5IHJhcmUuICBJZiB5b3Ugc2hvdWxkIHJ1bgoraW50byBpdCwgeW91IGNhbiB3b3JrIGFyb3VuZCBieSBtYWtpbmcgeW91ciBmdW5jdGlvbiBzbWFsbGVyLgorCitAaXRlbQorR05VIENDIGNvbXBpbGVkIGNvZGUgc29tZXRpbWVzIGVtaXRzIHdhcm5pbmdzIGZyb20gdGhlIEhQLVVYIGFzc2VtYmxlciBvZgordGhlIGZvcm06CisKK0BzbWFsbGV4YW1wbGUKKyh3YXJuaW5nKSBVc2Ugb2YgR1IzIHdoZW4KKyAgZnJhbWUgPj0gODE5MiBtYXkgY2F1c2UgY29uZmxpY3QuCitAZW5kIHNtYWxsZXhhbXBsZQorCitUaGVzZSB3YXJuaW5ncyBhcmUgaGFybWxlc3MgYW5kIGNhbiBiZSBzYWZlbHkgaWdub3JlZC4KKworQGl0ZW0KK1RoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGFzc2VtYmxlciAoQGZpbGV7L2Jpbi9hc30pIGZvciB0aGUgUlMvNjAwMAoraGFzIGNlcnRhaW4gcHJvYmxlbXMgdGhhdCBwcmV2ZW50IHRoZSBAc2FtcHstZ30gb3B0aW9uIGluIEdDQyBmcm9tCit3b3JraW5nLiAgTm90ZSB0aGF0IEBmaWxle01ha2VmaWxlLmlufSB1c2VzIEBzYW1wey1nfSBieSBkZWZhdWx0IHdoZW4KK2NvbXBpbGluZyBAZmlsZXtsaWJnY2MyLmN9LgorCitJQk0gaGFzIHByb2R1Y2VkIGEgZml4ZWQgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibGVyLiAgVGhlIHVwZ3JhZGVkCithc3NlbWJsZXIgdW5mb3J0dW5hdGVseSB3YXMgbm90IGluY2x1ZGVkIGluIGFueSBvZiB0aGUgQUlYIDMuMiB1cGRhdGUKK1BURiByZWxlYXNlcyAoMy4yLjIsIDMuMi4zLCBvciAzLjIuM2UpLiAgVXNlcnMgb2YgQUlYIDMuMSBzaG91bGQgcmVxdWVzdAorUFRGIFU0MDMwNDQgZnJvbSBJQk0gYW5kIHVzZXJzIG9mIEFJWCAzLjIgc2hvdWxkIHJlcXVlc3QgUFRGIFU0MTYyNzcuCitTZWUgdGhlIGZpbGUgQGZpbGV7UkVBRE1FLlJTNjAwMH0gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGVzZSB1cGRhdGVzLgorCitZb3UgY2FuIHRlc3QgZm9yIHRoZSBwcmVzZW5zZSBvZiBhIGZpeGVkIGFzc2VtYmxlciBieSB1c2luZyB0aGUKK2NvbW1hbmQKKworQHNtYWxsZXhhbXBsZQorYXMgLXUgPCAvZGV2L251bGwKK0BlbmQgc21hbGxleGFtcGxlCisKK0Bub2luZGVudAorSWYgdGhlIGNvbW1hbmQgZXhpdHMgbm9ybWFsbHksIHRoZSBhc3NlbWJsZXIgZml4IGFscmVhZHkgaXMgaW5zdGFsbGVkLgorSWYgdGhlIGFzc2VtYmxlciBjb21wbGFpbnMgdGhhdCAiLXUiIGlzIGFuIHVua25vd24gZmxhZywgeW91IG5lZWQgdG8KK29yZGVyIHRoZSBmaXguCisKK0BpdGVtCitPbiB0aGUgSUJNIFJTLzYwMDAsIGNvbXBpbGluZyBjb2RlIG9mIHRoZSBmb3JtCisKK0BzbWFsbGV4YW1wbGUKK2V4dGVybiBpbnQgZm9vOworCitAZG90c3t9IGZvbyBAZG90c3t9CisKK3N0YXRpYyBpbnQgZm9vOworQGVuZCBzbWFsbGV4YW1wbGUKKworQG5vaW5kZW50Cit3aWxsIGNhdXNlIHRoZSBsaW5rZXIgdG8gcmVwb3J0IGFuIHVuZGVmaW5lZCBzeW1ib2wgQGNvZGV7Zm9vfS4KK0FsdGhvdWdoIHRoaXMgYmVoYXZpb3IgZGlmZmVycyBmcm9tIG1vc3Qgb3RoZXIgc3lzdGVtcywgaXQgaXMgbm90IGEKK2J1ZyBiZWNhdXNlIHJlZGVmaW5pbmcgYW4gQGNvZGV7ZXh0ZXJufSB2YXJpYWJsZSBhcyBAY29kZXtzdGF0aWN9CitpcyB1bmRlZmluZWQgaW4gQU5TSSBDLgorCitAaXRlbQorQUlYIG9uIHRoZSBSUy82MDAwIHByb3ZpZGVzIHN1cHBvcnQgKE5MUykgZm9yIGVudmlyb25tZW50cyBvdXRzaWRlIG9mCit0aGUgVW5pdGVkIFN0YXRlcy4gIENvbXBpbGVycyBhbmQgYXNzZW1ibGVycyB1c2UgTkxTIHRvIHN1cHBvcnQKK2xvY2FsZS1zcGVjaWZpYyByZXByZXNlbnRhdGlvbnMgb2YgdmFyaW91cyBvYmplY3RzIGluY2x1ZGluZworZmxvYXRpbmctcG9pbnQgbnVtYmVycyAoIi4iIHZzICIsIiBmb3Igc2VwYXJhdGluZyBkZWNpbWFsIGZyYWN0aW9ucykuCitUaGVyZSBoYXZlIGJlZW4gcHJvYmxlbXMgcmVwb3J0ZWQgd2hlcmUgdGhlIGxpYnJhcnkgbGlua2VkIHdpdGggR0NDIGRvZXMKK25vdCBwcm9kdWNlIHRoZSBzYW1lIGZsb2F0aW5nLXBvaW50IGZvcm1hdHMgdGhhdCB0aGUgYXNzZW1ibGVyIGFjY2VwdHMuCitJZiB5b3UgaGF2ZSB0aGlzIHByb2JsZW0sIHNldCB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAiQyIgb3IKKyJFbl9VUyIuCisKK0BpdGVtCitFdmVuIGlmIHlvdSBzcGVjaWZ5IEBzYW1wey1mZG9sbGFycy1pbi1pZGVudGlmaWVyc30sCit5b3UgY2Fubm90IHN1Y2Nlc3NmdWxseSB1c2UgQHNhbXB7JH0gaW4gaWRlbnRpZmllcnMgb24gdGhlIFJTLzYwMDAgZHVlCit0byBhIHJlc3RyaWN0aW9uIGluIHRoZSBJQk0gYXNzZW1ibGVyLiAgR0FTIHN1cHBvcnRzIHRoZXNlCitpZGVudGlmaWVycy4KKworQGl0ZW0KK09uIHRoZSBSUy82MDAwLCBYTEMgdmVyc2lvbiAxLjMuMC4wIHdpbGwgbWlzY29tcGlsZSBAZmlsZXtqdW1wLmN9LiAgWExDCit2ZXJzaW9uIDEuMy4wLjEgb3IgbGF0ZXIgZml4ZXMgdGhpcyBwcm9ibGVtLiAgWW91IGNhbiBvYnRhaW4gWExDLTEuMy4wLjIKK2J5IHJlcXVlc3RpbmcgUFRGIDQyMTc0OSBmcm9tIElCTS4KKworQGl0ZW0KK1RoZXJlIGlzIGFuIGFzc2VtYmxlciBidWcgaW4gdmVyc2lvbnMgb2YgREcvVVggcHJpb3IgdG8gNS40LjIuMDEgdGhhdAorb2NjdXJzIHdoZW4gdGhlIEBzYW1we2ZsZGNyfSBpbnN0cnVjdGlvbiBpcyB1c2VkLiAgR05VIENDIHVzZXMKK0BzYW1we2ZsZGNyfSBvbiB0aGUgODgxMDAgdG8gc2VyaWFsaXplIHZvbGF0aWxlIG1lbW9yeSByZWZlcmVuY2VzLiAgVXNlCit0aGUgb3B0aW9uIEBzYW1wey1tbm8tc2VyaWFsaXplLXZvbGF0aWxlfSBpZiB5b3VyIHZlcnNpb24gb2YgdGhlCithc3NlbWJsZXIgaGFzIHRoaXMgYnVnLgorCitAaXRlbQorT24gVk1TLCBHQVMgdmVyc2lvbnMgMS4zOC4xIGFuZCBlYXJsaWVyIG1heSBjYXVzZSBzcHVyaW91cyB3YXJuaW5nCittZXNzYWdlcyBmcm9tIHRoZSBsaW5rZXIuICBUaGVzZSB3YXJuaW5nIG1lc3NhZ2VzIGNvbXBsYWluIG9mIG1pc21hdGNoZWQKK3BzZWN0IGF0dHJpYnV0ZXMuICBZb3UgY2FuIGlnbm9yZSB0aGVtLiAgQHhyZWZ7Vk1TIEluc3RhbGx9LgorCitAaXRlbQorT24gTmV3c09TIHZlcnNpb24gMywgaWYgeW91IGluY2x1ZGUgYm90aCBvZiB0aGUgZmlsZXMgQGZpbGV7c3RkZGVmLmh9CithbmQgQGZpbGV7c3lzL3R5cGVzLmh9LCB5b3UgZ2V0IGFuIGVycm9yIGJlY2F1c2UgdGhlcmUgYXJlIHR3byB0eXBlZGVmcworb2YgQGNvZGV7c2l6ZV90fS4gIFlvdSBzaG91bGQgY2hhbmdlIEBmaWxle3N5cy90eXBlcy5ofSBieSBhZGRpbmcgdGhlc2UKK2xpbmVzIGFyb3VuZCB0aGUgZGVmaW5pdGlvbiBvZiBAY29kZXtzaXplX3R9OgorCitAc21hbGxleGFtcGxlCisjaWZuZGVmIF9TSVpFX1QKKyNkZWZpbmUgX1NJWkVfVAorQHZhcnthY3R1YWwgdHlwZWRlZiBoZXJlfQorI2VuZGlmCitAZW5kIHNtYWxsZXhhbXBsZQorCitAY2luZGV4IEFsbGlhbnQKK0BpdGVtCitPbiB0aGUgQWxsaWFudCwgdGhlIHN5c3RlbSdzIG93biBjb252ZW50aW9uIGZvciByZXR1cm5pbmcgc3RydWN0dXJlcworYW5kIHVuaW9ucyBpcyB1bnVzdWFsLCBhbmQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBHTlUgQ0Mgbm8gbWF0dGVyCit3aGF0IG9wdGlvbnMgYXJlIHVzZWQuCisKK0BjaW5kZXggUlQgUEMKK0BjaW5kZXggSUJNIFJUIFBDCitAaXRlbQorT24gdGhlIElCTSBSVCBQQywgdGhlIE1ldGFXYXJlIEhpZ2hDIGNvbXBpbGVyIChoYykgdXNlcyBhIGRpZmZlcmVudAorY29udmVudGlvbiBmb3Igc3RydWN0dXJlIGFuZCB1bmlvbiByZXR1cm5pbmcuICBVc2UgdGhlIG9wdGlvbgorQHNhbXB7LW1oYy1zdHJ1Y3QtcmV0dXJufSB0byB0ZWxsIEdOVSBDQyB0byB1c2UgYSBjb252ZW50aW9uIGNvbXBhdGlibGUKK3dpdGggaXQuCisKK0BjaW5kZXggVmF4IGNhbGxpbmcgY29udmVudGlvbgorQGNpbmRleCBVbHRyaXggY2FsbGluZyBjb252ZW50aW9uCitAaXRlbQorT24gVWx0cml4LCB0aGUgRm9ydHJhbiBjb21waWxlciBleHBlY3RzIHJlZ2lzdGVycyAyIHRocm91Z2ggNSB0byBiZSBzYXZlZAorYnkgZnVuY3Rpb24gY2FsbHMuICBIb3dldmVyLCB0aGUgQyBjb21waWxlciB1c2VzIGNvbnZlbnRpb25zIGNvbXBhdGlibGUKK3dpdGggQlNEIFVuaXg6IHJlZ2lzdGVycyAyIHRocm91Z2ggNSBtYXkgYmUgY2xvYmJlcmVkIGJ5IGZ1bmN0aW9uIGNhbGxzLgorCitHTlUgQ0MgdXNlcyB0aGUgc2FtZSBjb252ZW50aW9uIGFzIHRoZSBVbHRyaXggQyBjb21waWxlci4gIFlvdSBjYW4gdXNlCit0aGVzZSBvcHRpb25zIHRvIHByb2R1Y2UgY29kZSBjb21wYXRpYmxlIHdpdGggdGhlIEZvcnRyYW4gY29tcGlsZXI6CisKK0BzbWFsbGV4YW1wbGUKKy1mY2FsbC1zYXZlZC1yMiAtZmNhbGwtc2F2ZWQtcjMgLWZjYWxsLXNhdmVkLXI0IC1mY2FsbC1zYXZlZC1yNQorQGVuZCBzbWFsbGV4YW1wbGUKKworQGl0ZW0KK09uIHRoZSBXRTMyaywgeW91IG1heSBmaW5kIHRoYXQgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBHTlUgQ0MgZG8gbm90Cit3b3JrIHdpdGggdGhlIHN0YW5kYXJkIHNoYXJlZCBDIGxpYnJhcnkuICBZb3UgbWF5IG5lZWQgdG8gbGluayB3aXRoCit0aGUgb3JkaW5hcnkgQyBjb21waWxlci4gIElmIHlvdSBkbyBzbywgeW91IG11c3Qgc3BlY2lmeSB0aGUgZm9sbG93aW5nCitvcHRpb25zOgorCitAc21hbGxleGFtcGxlCistTC91c3IvbG9jYWwvbGliL2djYy1saWIvd2UzMmstYXR0LXN5c3YvMi43LjEgLWxnY2MgLWxjX3MKK0BlbmQgc21hbGxleGFtcGxlCisKK1RoZSBmaXJzdCBzcGVjaWZpZXMgd2hlcmUgdG8gZmluZCB0aGUgbGlicmFyeSBAZmlsZXtsaWJnY2MuYX0KK3NwZWNpZmllZCB3aXRoIHRoZSBAc2FtcHstbGdjY30gb3B0aW9uLgorCitHTlUgQ0MgZG9lcyBsaW5raW5nIGJ5IGludm9raW5nIEBjb2Rle2xkfSwganVzdCBhcyBAY29kZXtjY30gZG9lcywgYW5kCit0aGVyZSBpcyBubyByZWFzb24gd2h5IGl0IEBlbXBoe3Nob3VsZH0gbWF0dGVyIHdoaWNoIGNvbXBpbGF0aW9uIHByb2dyYW0KK3lvdSB1c2UgdG8gaW52b2tlIEBjb2Rle2xkfS4gIElmIHNvbWVvbmUgdHJhY2tzIHRoaXMgcHJvYmxlbSBkb3duLAoraXQgY2FuIHByb2JhYmx5IGJlIGZpeGVkIGVhc2lseS4KKworQGl0ZW0KK09uIHRoZSBBbHBoYSwgeW91IG1heSBnZXQgYXNzZW1ibGVyIGVycm9ycyBhYm91dCBpbnZhbGlkIHN5bnRheCBhcyBhCityZXN1bHQgb2YgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzLiAgVGhpcyBpcyBkdWUgdG8gYSBidWcgaW4gdGhlIEMKK2xpYnJhcnkgZnVuY3Rpb25zIEBjb2Rle2VjdnR9LCBAY29kZXtmY3Z0fSBhbmQgQGNvZGV7Z2N2dH0uICBHaXZlbiB2YWxpZAorZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgdGhleSBzb21ldGltZXMgcHJpbnQgQHNhbXB7TmFOfS4KKworQGl0ZW0KK09uIElyaXggNC4wLjVGIChhbmQgcGVyaGFwcyBpbiBzb21lIG90aGVyIHZlcnNpb25zKSwgYW4gYXNzZW1ibGVyIGJ1Zworc29tZXRpbWVzIHJlb3JkZXJzIGluc3RydWN0aW9ucyBpbmNvcnJlY3RseSB3aGVuIG9wdGltaXphdGlvbiBpcyB0dXJuZWQKK29uLiAgSWYgeW91IHRoaW5rIHRoaXMgbWF5IGJlIGhhcHBlbmluZyB0byB5b3UsIHRyeSB1c2luZyB0aGUgR05VCithc3NlbWJsZXI7IEdBUyB2ZXJzaW9uIDIuMSBzdXBwb3J0cyBFQ09GRiBvbiBJcml4LgorCitPciB1c2UgdGhlIEBzYW1wey1ub2FzbW9wdH0gb3B0aW9uIHdoZW4geW91IGNvbXBpbGUgR05VIENDIHdpdGggaXRzZWxmLAorYW5kIHRoZW4gYWdhaW4gd2hlbiB5b3UgY29tcGlsZSB5b3VyIHByb2dyYW0uICAoVGhpcyBpcyBhIHRlbXBvcmFyeQora2x1ZGdlIHRvIHR1cm4gb2ZmIGFzc2VtYmxlciBvcHRpbWl6YXRpb24gb24gSXJpeC4pICBJZiB0aGlzIHByb3ZlcyB0bworYmUgd2hhdCB5b3UgbmVlZCwgZWRpdCB0aGUgYXNzZW1ibGVyIHNwZWMgaW4gdGhlIGZpbGUgQGZpbGV7c3BlY3N9IHNvCit0aGF0IGl0IHVuY29uZGl0aW9uYWxseSBwYXNzZXMgQHNhbXB7LU8wfSB0byB0aGUgYXNzZW1ibGVyLCBhbmQgbmV2ZXIKK3Bhc3NlcyBAc2FtcHstTzJ9IG9yIEBzYW1wey1PM30uCitAZW5kIGl0ZW1pemUKKworQG5vZGUgRXh0ZXJuYWwgQnVncworQHNlY3Rpb24gUHJvYmxlbXMgQ29tcGlsaW5nIENlcnRhaW4gUHJvZ3JhbXMKKworQGMgcHJldmVudCBiYWQgcGFnZSBicmVhayB3aXRoIHRoaXMgbGluZQorQ2VydGFpbiBwcm9ncmFtcyBoYXZlIHByb2JsZW1zIGNvbXBpbGluZy4KKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK1BhcnNlIGVycm9ycyBtYXkgb2NjdXIgY29tcGlsaW5nIFgxMSBvbiBhIERlY3N0YXRpb24gcnVubmluZyBVbHRyaXggNC4yCitiZWNhdXNlIG9mIHByb2JsZW1zIGluIERFQydzIHZlcnNpb25zIG9mIHRoZSBYMTEgaGVhZGVyIGZpbGVzCitAZmlsZXtYMTEvWGxpYi5ofSBhbmQgQGZpbGV7WDExL1h1dGlsLmh9LiAgUGVvcGxlIHJlY29tbWVuZCBhZGRpbmcKK0BzYW1wey1JL3Vzci9pbmNsdWRlL21pdH0gdG8gdXNlIHRoZSBNSVQgdmVyc2lvbnMgb2YgdGhlIGhlYWRlciBmaWxlcywKK3VzaW5nIHRoZSBAc2FtcHstdHJhZGl0aW9uYWx9IHN3aXRjaCB0byB0dXJuIG9mZiBBTlNJIEMsIG9yIGZpeGluZyB0aGUKK2hlYWRlciBmaWxlcyBieSBhZGRpbmcgdGhpczoKKworQGV4YW1wbGUKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzIDAKKyNlbmRpZgorQGVuZCBleGFtcGxlCisKK0BpdGVtCitJZiB5b3UgaGF2ZSB0cm91YmxlIGNvbXBpbGluZyBQZXJsIG9uIGEgU3VuT1MgNCBzeXN0ZW0sIGl0IG1heSBiZQorYmVjYXVzZSBQZXJsIHNwZWNpZmllcyBAc2FtcHstSS91c3IvdWNiaW5jbHVkZX0uICBUaGlzIGFjY2Vzc2VzIHRoZQordW5maXhlZCBoZWFkZXIgZmlsZXMuICBQZXJsIHNwZWNpZmllcyB0aGUgb3B0aW9ucworCitAZXhhbXBsZQorLXRyYWRpdGlvbmFsIC1Edm9sYXRpbGU9X192b2xhdGlsZV9fCistSS91c3IvaW5jbHVkZS9zdW4gLUkvdXNyL3VjYmluY2x1ZGUKKy1mcGNjLXN0cnVjdC1yZXR1cm4KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK21vc3Qgb2Ygd2hpY2ggYXJlIHVubmVjZXNzYXJ5IHdpdGggR0NDIDIuNC41IGFuZCBuZXdlciB2ZXJzaW9ucy4gIFlvdQorY2FuIG1ha2UgYSBwcm9wZXJseSB3b3JraW5nIFBlcmwgYnkgc2V0dGluZyBAY29kZXtjY2ZsYWdzfSB0bworQHNhbXB7LWZ3cml0YWJsZS1zdHJpbmdzfSAoaW1wbGllZCBieSB0aGUgQHNhbXB7LXRyYWRpdGlvbmFsfSBpbiB0aGUKK29yaWdpbmFsIG9wdGlvbnMpIGFuZCBAY29kZXtjcHBmbGFnc30gdG8gZW1wdHkgaW4gQGZpbGV7Y29uZmlnLnNofSwgdGhlbgordHlwaW5nIEBzYW1wey4vZG9TSDsgbWFrZSBkZXBlbmQ7IG1ha2V9LgorCitAaXRlbQorT24gdmFyaW91cyAzODYgVW5peCBzeXN0ZW1zIGRlcml2ZWQgZnJvbSBTeXN0ZW0gViwgaW5jbHVkaW5nIFNDTywgSVNDLAorYW5kIEVTSVgsIHlvdSBtYXkgZ2V0IGVycm9yIG1lc3NhZ2VzIGFib3V0IHJ1bm5pbmcgb3V0IG9mIHZpcnR1YWwgbWVtb3J5Cit3aGlsZSBjb21waWxpbmcgY2VydGFpbiBwcm9ncmFtcy4KKworWW91IGNhbiBwcmV2ZW50IHRoaXMgcHJvYmxlbSBieSBsaW5raW5nIEdOVSBDQyB3aXRoIHRoZSBHTlUgbWFsbG9jCisod2hpY2ggdGh1cyByZXBsYWNlcyB0aGUgbWFsbG9jIHRoYXQgY29tZXMgd2l0aCB0aGUgc3lzdGVtKS4gIEdOVSBtYWxsb2MKK2lzIGF2YWlsYWJsZSBhcyBhIHNlcGFyYXRlIHBhY2thZ2UsIGFuZCBhbHNvIGluIHRoZSBmaWxlCitAZmlsZXtzcmMvZ21hbGxvYy5jfSBpbiB0aGUgR05VIEVtYWNzIDE5IGRpc3RyaWJ1dGlvbi4KKworSWYgeW91IGhhdmUgaW5zdGFsbGVkIEdOVSBtYWxsb2MgYXMgYSBzZXBhcmF0ZSBsaWJyYXJ5IHBhY2thZ2UsIHVzZSB0aGlzCitvcHRpb24gd2hlbiB5b3UgcmVsaW5rIEdOVSBDQzoKKworQGV4YW1wbGUKK01BTExPQz0vdXNyL2xvY2FsL2xpYi9saWJnbWFsbG9jLmEKK0BlbmQgZXhhbXBsZQorCitBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgaGF2ZSBjb21waWxlZCBAZmlsZXtnbWFsbG9jLmN9IGZyb20gRW1hY3MgMTksIGNvcHkKK3RoZSBvYmplY3QgZmlsZSB0byBAZmlsZXtnbWFsbG9jLm99IGFuZCB1c2UgdGhpcyBvcHRpb24gd2hlbiB5b3UgcmVsaW5rCitHTlUgQ0M6CisKK0BleGFtcGxlCitNQUxMT0M9Z21hbGxvYy5vCitAZW5kIGV4YW1wbGUKK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBJbmNvbXBhdGliaWxpdGllcworQHNlY3Rpb24gSW5jb21wYXRpYmlsaXRpZXMgb2YgR05VIENDCitAY2luZGV4IGluY29tcGF0aWJpbGl0aWVzIG9mIEdOVSBDQworCitUaGVyZSBhcmUgc2V2ZXJhbCBub3Rld29ydGh5IGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gR05VIEMgYW5kIG1vc3QKK2V4aXN0aW5nIChub24tQU5TSSkgdmVyc2lvbnMgb2YgQy4gIFRoZSBAc2FtcHstdHJhZGl0aW9uYWx9IG9wdGlvbgorZWxpbWluYXRlcyBtYW55IG9mIHRoZXNlIGluY29tcGF0aWJpbGl0aWVzLCBAZW1waHtidXQgbm90IGFsbH0sIGJ5Cit0ZWxsaW5nIEdOVSBDIHRvIGJlaGF2ZSBsaWtlIHRoZSBvdGhlciBDIGNvbXBpbGVycy4KKworQGl0ZW1pemUgQGJ1bGxldAorQGNpbmRleCBzdHJpbmcgY29uc3RhbnRzCitAY2luZGV4IHJlYWQtb25seSBzdHJpbmdzCitAY2luZGV4IHNoYXJlZCBzdHJpbmdzCitAaXRlbQorR05VIENDIG5vcm1hbGx5IG1ha2VzIHN0cmluZyBjb25zdGFudHMgcmVhZC1vbmx5LiAgSWYgc2V2ZXJhbAoraWRlbnRpY2FsLWxvb2tpbmcgc3RyaW5nIGNvbnN0YW50cyBhcmUgdXNlZCwgR05VIENDIHN0b3JlcyBvbmx5IG9uZQorY29weSBvZiB0aGUgc3RyaW5nLgorCitAY2luZGV4IEBjb2Rle21rdGVtcH0sIGFuZCBjb25zdGFudCBzdHJpbmdzCitPbmUgY29uc2VxdWVuY2UgaXMgdGhhdCB5b3UgY2Fubm90IGNhbGwgQGNvZGV7bWt0ZW1wfSB3aXRoIGEgc3RyaW5nCitjb25zdGFudCBhcmd1bWVudC4gIFRoZSBmdW5jdGlvbiBAY29kZXtta3RlbXB9IGFsd2F5cyBhbHRlcnMgdGhlCitzdHJpbmcgaXRzIGFyZ3VtZW50IHBvaW50cyB0by4KKworQGNpbmRleCBAY29kZXtzc2NhbmZ9LCBhbmQgY29uc3RhbnQgc3RyaW5ncworQGNpbmRleCBAY29kZXtmc2NhbmZ9LCBhbmQgY29uc3RhbnQgc3RyaW5ncworQGNpbmRleCBAY29kZXtzY2FuZn0sIGFuZCBjb25zdGFudCBzdHJpbmdzCitBbm90aGVyIGNvbnNlcXVlbmNlIGlzIHRoYXQgQGNvZGV7c3NjYW5mfSBkb2VzIG5vdCB3b3JrIG9uIHNvbWUgc3lzdGVtcword2hlbiBwYXNzZWQgYSBzdHJpbmcgY29uc3RhbnQgYXMgaXRzIGZvcm1hdCBjb250cm9sIHN0cmluZyBvciBpbnB1dC4KK1RoaXMgaXMgYmVjYXVzZSBAY29kZXtzc2NhbmZ9IGluY29ycmVjdGx5IHRyaWVzIHRvIHdyaXRlIGludG8gdGhlIHN0cmluZworY29uc3RhbnQuICBMaWtld2lzZSBAY29kZXtmc2NhbmZ9IGFuZCBAY29kZXtzY2FuZn0uCisKK1RoZSBiZXN0IHNvbHV0aW9uIHRvIHRoZXNlIHByb2JsZW1zIGlzIHRvIGNoYW5nZSB0aGUgcHJvZ3JhbSB0byB1c2UKK0Bjb2Rle2NoYXJ9LWFycmF5IHZhcmlhYmxlcyB3aXRoIGluaXRpYWxpemF0aW9uIHN0cmluZ3MgZm9yIHRoZXNlCitwdXJwb3NlcyBpbnN0ZWFkIG9mIHN0cmluZyBjb25zdGFudHMuICBCdXQgaWYgdGhpcyBpcyBub3QgcG9zc2libGUsCit5b3UgY2FuIHVzZSB0aGUgQHNhbXB7LWZ3cml0YWJsZS1zdHJpbmdzfSBmbGFnLCB3aGljaCBkaXJlY3RzIEdOVSBDQwordG8gaGFuZGxlIHN0cmluZyBjb25zdGFudHMgdGhlIHNhbWUgd2F5IG1vc3QgQyBjb21waWxlcnMgZG8uCitAc2FtcHstdHJhZGl0aW9uYWx9IGFsc28gaGFzIHRoaXMgZWZmZWN0LCBhbW9uZyBvdGhlcnMuCisKK0BpdGVtCitAY29kZXstMjE0NzQ4MzY0OH0gaXMgcG9zaXRpdmUuCisKK1RoaXMgaXMgYmVjYXVzZSAyMTQ3NDgzNjQ4IGNhbm5vdCBmaXQgaW4gdGhlIHR5cGUgQGNvZGV7aW50fSwgc28KKyhmb2xsb3dpbmcgdGhlIEFOU0kgQyBydWxlcykgaXRzIGRhdGEgdHlwZSBpcyBAY29kZXt1bnNpZ25lZCBsb25nIGludH0uCitOZWdhdGluZyB0aGlzIHZhbHVlIHlpZWxkcyAyMTQ3NDgzNjQ4IGFnYWluLgorCitAaXRlbQorR05VIENDIGRvZXMgbm90IHN1YnN0aXR1dGUgbWFjcm8gYXJndW1lbnRzIHdoZW4gdGhleSBhcHBlYXIgaW5zaWRlIG9mCitzdHJpbmcgY29uc3RhbnRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbWFjcm8gaW4gR05VIENDCisKK0BleGFtcGxlCisjZGVmaW5lIGZvbyhhKSAiYSIKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK3dpbGwgcHJvZHVjZSBvdXRwdXQgQGNvZGV7ImEifSByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGFyZ3VtZW50IEB2YXJ7YX0gaXMuCisKK1RoZSBAc2FtcHstdHJhZGl0aW9uYWx9IG9wdGlvbiBkaXJlY3RzIEdOVSBDQyB0byBoYW5kbGUgc3VjaCBjYXNlcworKGFtb25nIG90aGVycykgaW4gdGhlIG9sZC1mYXNoaW9uZWQgKG5vbi1BTlNJKSBmYXNoaW9uLgorCitAY2luZGV4IEBjb2Rle3NldGptcH0gaW5jb21wYXRpYmlsaXRpZXMKK0BjaW5kZXggQGNvZGV7bG9uZ2ptcH0gaW5jb21wYXRpYmlsaXRpZXMKK0BpdGVtCitXaGVuIHlvdSB1c2UgQGNvZGV7c2V0am1wfSBhbmQgQGNvZGV7bG9uZ2ptcH0sIHRoZSBvbmx5IGF1dG9tYXRpYwordmFyaWFibGVzIGd1YXJhbnRlZWQgdG8gcmVtYWluIHZhbGlkIGFyZSB0aG9zZSBkZWNsYXJlZAorQGNvZGV7dm9sYXRpbGV9LiAgVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIGF1dG9tYXRpYyByZWdpc3RlcgorYWxsb2NhdGlvbi4gIENvbnNpZGVyIHRoaXMgZnVuY3Rpb246CisKK0BleGFtcGxlCitqbXBfYnVmIGo7CisKK2ZvbyAoKQorQHsKKyAgaW50IGEsIGI7CisKKyAgYSA9IGZ1bjEgKCk7CisgIGlmIChzZXRqbXAgKGopKQorICAgIHJldHVybiBhOworCisgIGEgPSBmdW4yICgpOworICAvKiBAcntAY29kZXtsb25nam1wIChqKX0gbWF5IG9jY3VyIGluIEBjb2Rle2Z1bjN9Ln0gKi8KKyAgcmV0dXJuIGEgKyBmdW4zICgpOworQH0KK0BlbmQgZXhhbXBsZQorCitIZXJlIEBjb2Rle2F9IG1heSBvciBtYXkgbm90IGJlIHJlc3RvcmVkIHRvIGl0cyBmaXJzdCB2YWx1ZSB3aGVuIHRoZQorQGNvZGV7bG9uZ2ptcH0gb2NjdXJzLiAgSWYgQGNvZGV7YX0gaXMgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIsIHRoZW4KK2l0cyBmaXJzdCB2YWx1ZSBpcyByZXN0b3JlZDsgb3RoZXJ3aXNlLCBpdCBrZWVwcyB0aGUgbGFzdCB2YWx1ZSBzdG9yZWQKK2luIGl0LgorCitJZiB5b3UgdXNlIHRoZSBAc2FtcHstV30gb3B0aW9uIHdpdGggdGhlIEBzYW1wey1PfSBvcHRpb24sIHlvdSB3aWxsCitnZXQgYSB3YXJuaW5nIHdoZW4gR05VIENDIHRoaW5rcyBzdWNoIGEgcHJvYmxlbSBtaWdodCBiZSBwb3NzaWJsZS4KKworVGhlIEBzYW1wey10cmFkaXRpb25hbH0gb3B0aW9uIGRpcmVjdHMgR05VIEMgdG8gcHV0IHZhcmlhYmxlcyBpbgordGhlIHN0YWNrIGJ5IGRlZmF1bHQsIHJhdGhlciB0aGFuIGluIHJlZ2lzdGVycywgaW4gZnVuY3Rpb25zIHRoYXQKK2NhbGwgQGNvZGV7c2V0am1wfS4gIFRoaXMgcmVzdWx0cyBpbiB0aGUgYmVoYXZpb3IgZm91bmQgaW4KK3RyYWRpdGlvbmFsIEMgY29tcGlsZXJzLgorCitAaXRlbQorUHJvZ3JhbXMgdGhhdCB1c2UgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzIGluIHRoZSBtaWRkbGUgb2YgbWFjcm8KK2FyZ3VtZW50cyBkbyBub3Qgd29yayB3aXRoIEdOVSBDQy4gIEZvciBleGFtcGxlLCBhIHByb2dyYW0gbGlrZSB0aGlzCit3aWxsIG5vdCB3b3JrOgorCitAZXhhbXBsZQorZm9vYmFyICgKKyNkZWZpbmUgbHVzZXIKKyAgICAgICAgaGFjaykKK0BlbmQgZXhhbXBsZQorCitBTlNJIEMgZG9lcyBub3QgcGVybWl0IHN1Y2ggYSBjb25zdHJ1Y3QuICBJdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHN1cHBvcnQKK2l0IHdoZW4gQHNhbXB7LXRyYWRpdGlvbmFsfSBpcyB1c2VkLCBidXQgaXQgaXMgdG9vIG11Y2ggd29yayB0bworaW1wbGVtZW50LgorCitAY2luZGV4IGV4dGVybmFsIGRlY2xhcmF0aW9uIHNjb3BlCitAY2luZGV4IHNjb3BlIG9mIGV4dGVybmFsIGRlY2xhcmF0aW9ucworQGNpbmRleCBkZWNsYXJhdGlvbiBzY29wZQorQGl0ZW0KK0RlY2xhcmF0aW9ucyBvZiBleHRlcm5hbCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB3aXRoaW4gYSBibG9jayBhcHBseQorb25seSB0byB0aGUgYmxvY2sgY29udGFpbmluZyB0aGUgZGVjbGFyYXRpb24uICBJbiBvdGhlciB3b3JkcywgdGhleQoraGF2ZSB0aGUgc2FtZSBzY29wZSBhcyBhbnkgb3RoZXIgZGVjbGFyYXRpb24gaW4gdGhlIHNhbWUgcGxhY2UuCisKK0luIHNvbWUgb3RoZXIgQyBjb21waWxlcnMsIGEgQGNvZGV7ZXh0ZXJufSBkZWNsYXJhdGlvbiBhZmZlY3RzIGFsbCB0aGUKK3Jlc3Qgb2YgdGhlIGZpbGUgZXZlbiBpZiBpdCBoYXBwZW5zIHdpdGhpbiBhIGJsb2NrLgorCitUaGUgQHNhbXB7LXRyYWRpdGlvbmFsfSBvcHRpb24gZGlyZWN0cyBHTlUgQyB0byB0cmVhdCBhbGwgQGNvZGV7ZXh0ZXJufQorZGVjbGFyYXRpb25zIGFzIGdsb2JhbCwgbGlrZSB0cmFkaXRpb25hbCBjb21waWxlcnMuCisKK0BpdGVtCitJbiB0cmFkaXRpb25hbCBDLCB5b3UgY2FuIGNvbWJpbmUgQGNvZGV7bG9uZ30sIGV0Yy4sIHdpdGggYSB0eXBlZGVmIG5hbWUsCithcyBzaG93biBoZXJlOgorCitAZXhhbXBsZQordHlwZWRlZiBpbnQgZm9vOwordHlwZWRlZiBsb25nIGZvbyBiYXI7CitAZW5kIGV4YW1wbGUKKworSW4gQU5TSSBDLCB0aGlzIGlzIG5vdCBhbGxvd2VkOiBAY29kZXtsb25nfSBhbmQgb3RoZXIgdHlwZSBtb2RpZmllcnMKK3JlcXVpcmUgYW4gZXhwbGljaXQgQGNvZGV7aW50fS4gIEJlY2F1c2UgdGhpcyBjcml0ZXJpb24gaXMgZXhwcmVzc2VkCitieSBCaXNvbiBncmFtbWFyIHJ1bGVzIHJhdGhlciB0aGFuIEMgY29kZSwgdGhlIEBzYW1wey10cmFkaXRpb25hbH0KK2ZsYWcgY2Fubm90IGFsdGVyIGl0LgorCitAY2luZGV4IHR5cGVkZWYgbmFtZXMgYXMgZnVuY3Rpb24gcGFyYW1ldGVycworQGl0ZW0KK1BDQyBhbGxvd3MgdHlwZWRlZiBuYW1lcyB0byBiZSB1c2VkIGFzIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICBUaGUKK2RpZmZpY3VsdHkgZGVzY3JpYmVkIGltbWVkaWF0ZWx5IGFib3ZlIGFwcGxpZXMgaGVyZSB0b28uCisKK0BjaW5kZXggd2hpdGVzcGFjZQorQGl0ZW0KK1BDQyBhbGxvd3Mgd2hpdGVzcGFjZSBpbiB0aGUgbWlkZGxlIG9mIGNvbXBvdW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzCitzdWNoIGFzIEBzYW1weys9fS4gIEdOVSBDQywgZm9sbG93aW5nIHRoZSBBTlNJIHN0YW5kYXJkLCBkb2VzIG5vdAorYWxsb3cgdGhpcy4gIFRoZSBkaWZmaWN1bHR5IGRlc2NyaWJlZCBpbW1lZGlhdGVseSBhYm92ZSBhcHBsaWVzIGhlcmUKK3Rvby4KKworQGNpbmRleCBhcG9zdHJvcGhlcworQGNpbmRleCAnCitAaXRlbQorR05VIENDIGNvbXBsYWlucyBhYm91dCB1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIGNvbnN0YW50cyBpbnNpZGUgb2YKK3ByZXByb2Nlc3NpbmcgY29uZGl0aW9uYWxzIHRoYXQgZmFpbC4gIFNvbWUgcHJvZ3JhbXMgaGF2ZSBFbmdsaXNoCitjb21tZW50cyBlbmNsb3NlZCBpbiBjb25kaXRpb25hbHMgdGhhdCBhcmUgZ3VhcmFudGVlZCB0byBmYWlsOyBpZiB0aGVzZQorY29tbWVudHMgY29udGFpbiBhcG9zdHJvcGhlcywgR05VIENDIHdpbGwgcHJvYmFibHkgcmVwb3J0IGFuIGVycm9yLiAgRm9yCitleGFtcGxlLCB0aGlzIGNvZGUgd291bGQgcHJvZHVjZSBhbiBlcnJvcjoKKworQGV4YW1wbGUKKyNpZiAwCitZb3UgY2FuJ3QgZXhwZWN0IHRoaXMgdG8gd29yay4KKyNlbmRpZgorQGVuZCBleGFtcGxlCisKK1RoZSBiZXN0IHNvbHV0aW9uIHRvIHN1Y2ggYSBwcm9ibGVtIGlzIHRvIHB1dCB0aGUgdGV4dCBpbnRvIGFuIGFjdHVhbAorQyBjb21tZW50IGRlbGltaXRlZCBieSBAc2FtcHsvKkBkb3Rze30qL30uICBIb3dldmVyLAorQHNhbXB7LXRyYWRpdGlvbmFsfSBzdXBwcmVzc2VzIHRoZXNlIGVycm9yIG1lc3NhZ2VzLgorCitAaXRlbQorTWFueSB1c2VyIHByb2dyYW1zIGNvbnRhaW4gdGhlIGRlY2xhcmF0aW9uIEBzYW1we2xvbmcgdGltZSAoKTt9LiAgSW4gdGhlCitwYXN0LCB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcyBvbiBtYW55IHN5c3RlbXMgZGlkIG5vdCBhY3R1YWxseSBkZWNsYXJlCitAY29kZXt0aW1lfSwgc28gaXQgZGlkIG5vdCBtYXR0ZXIgd2hhdCB0eXBlIHlvdXIgcHJvZ3JhbSBkZWNsYXJlZCBpdCB0bworcmV0dXJuLiAgQnV0IGluIHN5c3RlbXMgd2l0aCBBTlNJIEMgaGVhZGVycywgQGNvZGV7dGltZX0gaXMgZGVjbGFyZWQgdG8KK3JldHVybiBAY29kZXt0aW1lX3R9LCBhbmQgaWYgdGhhdCBpcyBub3QgdGhlIHNhbWUgYXMgQGNvZGV7bG9uZ30sIHRoZW4KK0BzYW1we2xvbmcgdGltZSAoKTt9IGlzIGVycm9uZW91cy4KKworVGhlIHNvbHV0aW9uIGlzIHRvIGNoYW5nZSB5b3VyIHByb2dyYW0gdG8gdXNlIEBjb2Rle3RpbWVfdH0gYXMgdGhlIHJldHVybgordHlwZSBvZiBAY29kZXt0aW1lfS4KKworQGNpbmRleCBAY29kZXtmbG9hdH0gYXMgZnVuY3Rpb24gdmFsdWUgdHlwZQorQGl0ZW0KK1doZW4gY29tcGlsaW5nIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBAY29kZXtmbG9hdH0sIFBDQyBjb252ZXJ0cyBpdCB0bworYSBkb3VibGUuICBHTlUgQ0MgYWN0dWFsbHkgcmV0dXJucyBhIEBjb2Rle2Zsb2F0fS4gIElmIHlvdSBhcmUgY29uY2VybmVkCit3aXRoIFBDQyBjb21wYXRpYmlsaXR5LCB5b3Ugc2hvdWxkIGRlY2xhcmUgeW91ciBmdW5jdGlvbnMgdG8gcmV0dXJuCitAY29kZXtkb3VibGV9OyB5b3UgbWlnaHQgYXMgd2VsbCBzYXkgd2hhdCB5b3UgbWVhbi4KKworQGNpbmRleCBzdHJ1Y3R1cmVzCitAY2luZGV4IHVuaW9ucworQGl0ZW0KK1doZW4gY29tcGlsaW5nIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBzdHJ1Y3R1cmVzIG9yIHVuaW9ucywgR05VIENDCitvdXRwdXQgY29kZSBub3JtYWxseSB1c2VzIGEgbWV0aG9kIGRpZmZlcmVudCBmcm9tIHRoYXQgdXNlZCBvbiBtb3N0Cit2ZXJzaW9ucyBvZiBVbml4LiAgQXMgYSByZXN1bHQsIGNvZGUgY29tcGlsZWQgd2l0aCBHTlUgQ0MgY2Fubm90IGNhbGwKK2Egc3RydWN0dXJlLXJldHVybmluZyBmdW5jdGlvbiBjb21waWxlZCB3aXRoIFBDQywgYW5kIHZpY2UgdmVyc2EuCisKK1RoZSBtZXRob2QgdXNlZCBieSBHTlUgQ0MgaXMgYXMgZm9sbG93czogYSBzdHJ1Y3R1cmUgb3IgdW5pb24gd2hpY2ggaXMKKzEsIDIsIDQgb3IgOCBieXRlcyBsb25nIGlzIHJldHVybmVkIGxpa2UgYSBzY2FsYXIuICBBIHN0cnVjdHVyZSBvciB1bmlvbgord2l0aCBhbnkgb3RoZXIgc2l6ZSBpcyBzdG9yZWQgaW50byBhbiBhZGRyZXNzIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIKKyh1c3VhbGx5IGluIGEgc3BlY2lhbCwgZml4ZWQgcmVnaXN0ZXIsIGJ1dCBvbiBzb21lIG1hY2hpbmVzIGl0IGlzIHBhc3NlZAorb24gdGhlIHN0YWNrKS4gIFRoZSBtYWNoaW5lLWRlc2NyaXB0aW9uIG1hY3JvcyBAY29kZXtTVFJVQ1RfVkFMVUV9IGFuZAorQGNvZGV7U1RSVUNUX0lOQ09NSU5HX1ZBTFVFfSB0ZWxsIEdOVSBDQyB3aGVyZSB0byBwYXNzIHRoaXMgYWRkcmVzcy4KKworQnkgY29udHJhc3QsIFBDQyBvbiBtb3N0IHRhcmdldCBtYWNoaW5lcyByZXR1cm5zIHN0cnVjdHVyZXMgYW5kIHVuaW9ucworb2YgYW55IHNpemUgYnkgY29weWluZyB0aGUgZGF0YSBpbnRvIGFuIGFyZWEgb2Ygc3RhdGljIHN0b3JhZ2UsIGFuZCB0aGVuCityZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzdG9yYWdlIGFzIGlmIGl0IHdlcmUgYSBwb2ludGVyIHZhbHVlLgorVGhlIGNhbGxlciBtdXN0IGNvcHkgdGhlIGRhdGEgZnJvbSB0aGF0IG1lbW9yeSBhcmVhIHRvIHRoZSBwbGFjZSB3aGVyZQordGhlIHZhbHVlIGlzIHdhbnRlZC4gIEdOVSBDQyBkb2VzIG5vdCB1c2UgdGhpcyBtZXRob2QgYmVjYXVzZSBpdCBpcworc2xvd2VyIGFuZCBub25yZWVudHJhbnQuCisKK09uIHNvbWUgbmV3ZXIgbWFjaGluZXMsIFBDQyB1c2VzIGEgcmVlbnRyYW50IGNvbnZlbnRpb24gZm9yIGFsbAorc3RydWN0dXJlIGFuZCB1bmlvbiByZXR1cm5pbmcuICBHTlUgQ0Mgb24gbW9zdCBvZiB0aGVzZSBtYWNoaW5lcyB1c2VzIGEKK2NvbXBhdGlibGUgY29udmVudGlvbiB3aGVuIHJldHVybmluZyBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgaW4gbWVtb3J5LAorYnV0IHN0aWxsIHJldHVybnMgc21hbGwgc3RydWN0dXJlcyBhbmQgdW5pb25zIGluIHJlZ2lzdGVycy4KKworWW91IGNhbiB0ZWxsIEdOVSBDQyB0byB1c2UgYSBjb21wYXRpYmxlIGNvbnZlbnRpb24gZm9yIGFsbCBzdHJ1Y3R1cmUgYW5kCit1bmlvbiByZXR1cm5pbmcgd2l0aCB0aGUgb3B0aW9uIEBzYW1wey1mcGNjLXN0cnVjdC1yZXR1cm59LgorCitAY2luZGV4IHByZXByb2Nlc3NpbmcgdG9rZW5zCitAY2luZGV4IHByZXByb2Nlc3NpbmcgbnVtYmVycworQGl0ZW0KK0dOVSBDIGNvbXBsYWlucyBhYm91dCBwcm9ncmFtIGZyYWdtZW50cyBzdWNoIGFzIEBzYW1wezB4NzRhZS0weDQwMDB9Cit3aGljaCBhcHBlYXIgdG8gYmUgdHdvIGhleGFkZWNpbWFsIGNvbnN0YW50cyBzZXBhcmF0ZWQgYnkgdGhlIG1pbnVzCitvcGVyYXRvci4gIEFjdHVhbGx5LCB0aGlzIHN0cmluZyBpcyBhIHNpbmdsZSBAZGZue3ByZXByb2Nlc3NpbmcgdG9rZW59LgorRWFjaCBzdWNoIHRva2VuIG11c3QgY29ycmVzcG9uZCB0byBvbmUgdG9rZW4gaW4gQy4gIFNpbmNlIHRoaXMgZG9lcyBub3QsCitHTlUgQyBwcmludHMgYW4gZXJyb3IgbWVzc2FnZS4gIEFsdGhvdWdoIGl0IG1heSBhcHBlYXIgb2J2aW91cyB0aGF0IHdoYXQKK2lzIG1lYW50IGlzIGFuIG9wZXJhdG9yIGFuZCB0d28gdmFsdWVzLCB0aGUgQU5TSSBDIHN0YW5kYXJkIHNwZWNpZmljYWxseQorcmVxdWlyZXMgdGhhdCB0aGlzIGJlIHRyZWF0ZWQgYXMgZXJyb25lb3VzLgorCitBIEBkZm57cHJlcHJvY2Vzc2luZyB0b2tlbn0gaXMgYSBAZGZue3ByZXByb2Nlc3NpbmcgbnVtYmVyfSBpZiBpdAorYmVnaW5zIHdpdGggYSBkaWdpdCBhbmQgaXMgZm9sbG93ZWQgYnkgbGV0dGVycywgdW5kZXJzY29yZXMsIGRpZ2l0cywKK3BlcmlvZHMgYW5kIEBzYW1we2UrfSwgQHNhbXB7ZS19LCBAc2FtcHtFK30sIG9yIEBzYW1we0UtfSBjaGFyYWN0ZXIKK3NlcXVlbmNlcy4KKworVG8gbWFrZSB0aGUgYWJvdmUgcHJvZ3JhbSBmcmFnbWVudCB2YWxpZCwgcGxhY2Ugd2hpdGVzcGFjZSBpbiBmcm9udCBvZgordGhlIG1pbnVzIHNpZ24uICBUaGlzIHdoaXRlc3BhY2Ugd2lsbCBlbmQgdGhlIHByZXByb2Nlc3NpbmcgbnVtYmVyLgorQGVuZCBpdGVtaXplCisKK0Bub2RlIEZpeGVkIEhlYWRlcnMKK0BzZWN0aW9uIEZpeGVkIEhlYWRlciBGaWxlcworCitHTlUgQ0MgbmVlZHMgdG8gaW5zdGFsbCBjb3JyZWN0ZWQgdmVyc2lvbnMgb2Ygc29tZSBzeXN0ZW0gaGVhZGVyIGZpbGVzLgorVGhpcyBpcyBiZWNhdXNlIG1vc3QgdGFyZ2V0IHN5c3RlbXMgaGF2ZSBzb21lIGhlYWRlciBmaWxlcyB0aGF0IHdvbid0Cit3b3JrIHdpdGggR05VIENDIHVubGVzcyB0aGV5IGFyZSBjaGFuZ2VkLiAgU29tZSBoYXZlIGJ1Z3MsIHNvbWUgYXJlCitpbmNvbXBhdGlibGUgd2l0aCBBTlNJIEMsIGFuZCBzb21lIGRlcGVuZCBvbiBzcGVjaWFsIGZlYXR1cmVzIG9mIG90aGVyCitjb21waWxlcnMuCisKK0luc3RhbGxpbmcgR05VIENDIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhbmQgaW5zdGFsbHMgdGhlIGZpeGVkIGhlYWRlcgorZmlsZXMsIGJ5IHJ1bm5pbmcgYSBwcm9ncmFtIGNhbGxlZCBAY29kZXtmaXhpbmNsdWRlc30gKG9yIGZvciBjZXJ0YWluCit0YXJnZXRzIGFuIGFsdGVybmF0aXZlIHN1Y2ggYXMgQGNvZGV7Zml4aW5jLnN2cjR9KS4gIE5vcm1hbGx5LCB5b3UKK2Rvbid0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGlzLiAgQnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBpdAorZG9lc24ndCBkbyB0aGUgcmlnaHQgdGhpbmcgYXV0b21hdGljYWxseS4KKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0lmIHlvdSB1cGRhdGUgdGhlIHN5c3RlbSdzIGhlYWRlciBmaWxlcywgc3VjaCBhcyBieSBpbnN0YWxsaW5nIGEgbmV3CitzeXN0ZW0gdmVyc2lvbiwgdGhlIGZpeGVkIGhlYWRlciBmaWxlcyBvZiBHTlUgQ0MgYXJlIG5vdCBhdXRvbWF0aWNhbGx5Cit1cGRhdGVkLiAgVGhlIGVhc2llc3Qgd2F5IHRvIHVwZGF0ZSB0aGVtIGlzIHRvIHJlaW5zdGFsbCBHTlUgQ0MuICAoSWYKK3lvdSB3YW50IHRvIGJlIGNsZXZlciwgbG9vayBpbiB0aGUgbWFrZWZpbGUgYW5kIHlvdSBjYW4gZmluZCBhCitzaG9ydGN1dC4pCisKK0BpdGVtCitPbiBzb21lIHN5c3RlbXMsIGluIHBhcnRpY3VsYXIgU3VuT1MgNCwgaGVhZGVyIGZpbGUgZGlyZWN0b3JpZXMgY29udGFpbgorbWFjaGluZS1zcGVjaWZpYyBzeW1ib2xpYyBsaW5rcyBpbiBjZXJ0YWluIHBsYWNlcy4gIFRoaXMgbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIHNoYXJlIG1vc3Qgb2YgdGhlIGhlYWRlciBmaWxlcyBhbW9uZyBob3N0cyBydW5uaW5nIHRoZQorc2FtZSB2ZXJzaW9uIG9mIFN1bk9TIDQgb24gZGlmZmVyZW50IG1hY2hpbmUgbW9kZWxzLgorCitUaGUgcHJvZ3JhbXMgdGhhdCBmaXggdGhlIGhlYWRlciBmaWxlcyBkbyBub3QgdW5kZXJzdGFuZCB0aGlzIHNwZWNpYWwKK3dheSBvZiB1c2luZyBzeW1ib2xpYyBsaW5rczsgdGhlcmVmb3JlLCB0aGUgZGlyZWN0b3J5IG9mIGZpeGVkIGhlYWRlcgorZmlsZXMgaXMgZ29vZCBvbmx5IGZvciB0aGUgbWFjaGluZSBtb2RlbCB1c2VkIHRvIGJ1aWxkIGl0LgorCitJbiBTdW5PUyA0LCBvbmx5IHByb2dyYW1zIHRoYXQgbG9vayBpbnNpZGUgdGhlIGtlcm5lbCB3aWxsIG5vdGljZSB0aGUKK2RpZmZlcmVuY2UgYmV0d2VlbiBtYWNoaW5lIG1vZGVscy4gIFRoZXJlZm9yZSwgZm9yIG1vc3QgcHVycG9zZXMsIHlvdQorbmVlZCBub3QgYmUgY29uY2VybmVkIGFib3V0IHRoaXMuCisKK0l0IGlzIHBvc3NpYmxlIHRvIG1ha2Ugc2VwYXJhdGUgc2V0cyBvZiBmaXhlZCBoZWFkZXIgZmlsZXMgZm9yIHRoZQorZGlmZmVyZW50IG1hY2hpbmUgbW9kZWxzLCBhbmQgYXJyYW5nZSBhIHN0cnVjdHVyZSBvZiBzeW1ib2xpYyBsaW5rcyBzbworYXMgdG8gdXNlIHRoZSBwcm9wZXIgc2V0LCBidXQgeW91J2xsIGhhdmUgdG8gZG8gdGhpcyBieSBoYW5kLgorCitAaXRlbQorT24gTHlueG9zLCBHTlUgQ0MgYnkgZGVmYXVsdCBkb2VzIG5vdCBmaXggdGhlIGhlYWRlciBmaWxlcy4gIFRoaXMgaXMKK2JlY2F1c2UgYnVncyBpbiB0aGUgc2hlbGwgY2F1c2UgdGhlIEBjb2Rle2ZpeGluY2x1ZGVzfSBzY3JpcHQgdG8gZmFpbC4KKworVGhpcyBtZWFucyB5b3Ugd2lsbCBlbmNvdW50ZXIgcHJvYmxlbXMgZHVlIHRvIGJ1Z3MgaW4gdGhlIHN5c3RlbSBoZWFkZXIKK2ZpbGVzLiAgSXQgbWF5IGJlIG5vIGNvbWZvcnQgdGhhdCB0aGV5IGFyZW4ndCBHTlUgQ0MncyBmYXVsdCwgYnV0IGl0Citkb2VzIG1lYW4gdGhhdCB0aGVyZSdzIG5vdGhpbmcgZm9yIHVzIHRvIGRvIGFib3V0IHRoZW0uCitAZW5kIGl0ZW1pemUKKworQG5vZGUgU3RhbmRhcmQgTGlicmFyaWVzCitAc2VjdGlvbiBTdGFuZGFyZCBMaWJyYXJpZXMKKworR05VIENDIGJ5IGl0c2VsZiBhdHRlbXB0cyB0byBiZSB3aGF0IHRoZSBJU08vQU5TSSBDIHN0YW5kYXJkIGNhbGxzIGEKK0BkZm57Y29uZm9ybWluZyBmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb259LiAgVGhpcyBtZWFucyBhbGwgQU5TSQorQyBsYW5ndWFnZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhcyB3ZWxsIGFzIHRoZSBjb250ZW50cyBvZgorQGZpbGV7ZmxvYXQuaH0sIEBmaWxle2xpbWl0cy5ofSwgQGZpbGV7c3RkYXJnLmh9LCBhbmQKK0BmaWxle3N0ZGRlZi5ofS4gIFRoZSByZXN0IG9mIHRoZSBDIGxpYnJhcnkgaXMgc3VwcGxpZWQgYnkgdGhlCit2ZW5kb3Igb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBJZiB0aGF0IEMgbGlicmFyeSBkb2Vzbid0IGNvbmZvcm0gdG8KK3RoZSBDIHN0YW5kYXJkcywgdGhlbiB5b3VyIHByb2dyYW1zIG1pZ2h0IGdldCB3YXJuaW5ncyAoZXNwZWNpYWxseSB3aGVuCit1c2luZyBAc2FtcHstV2FsbH0pIHRoYXQgeW91IGRvbid0IGV4cGVjdC4KKworRm9yIGV4YW1wbGUsIHRoZSBAY29kZXtzcHJpbnRmfSBmdW5jdGlvbiBvbiBTdW5PUyA0LjEuMyByZXR1cm5zCitAY29kZXtjaGFyICp9IHdoaWxlIHRoZSBDIHN0YW5kYXJkIHNheXMgdGhhdCBAY29kZXtzcHJpbnRmfSByZXR1cm5zIGFuCitAY29kZXtpbnR9LiAgVGhlIEBjb2Rle2ZpeGluY2x1ZGVzfSBwcm9ncmFtIGNvdWxkIG1ha2UgdGhlIHByb3RvdHlwZSBmb3IKK3RoaXMgZnVuY3Rpb24gbWF0Y2ggdGhlIFN0YW5kYXJkLCBidXQgdGhhdCB3b3VsZCBiZSB3cm9uZywgc2luY2UgdGhlCitmdW5jdGlvbiB3aWxsIHN0aWxsIHJldHVybiBAY29kZXtjaGFyICp9LgorCitJZiB5b3UgbmVlZCBhIFN0YW5kYXJkIGNvbXBsaWFudCBsaWJyYXJ5LCB0aGVuIHlvdSBuZWVkIHRvIGZpbmQgb25lLCBhcworR05VIENDIGRvZXMgbm90IHByb3ZpZGUgb25lLiAgVGhlIEdOVSBDIGxpYnJhcnkgKGNhbGxlZCBAY29kZXtnbGliY30pCitoYXMgYmVlbiBwb3J0ZWQgdG8gYSBudW1iZXIgb2Ygb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm92aWRlcyBBTlNJL0lTTywKK1BPU0lYLCBCU0QgYW5kIFN5c3RlbVYgY29tcGF0aWJpbGl0eS4gIFlvdSBjb3VsZCBhbHNvIGFzayB5b3VyIG9wZXJhdGluZworc3lzdGVtIHZlbmRvciBpZiBuZXdlciBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZS4KKworQG5vZGUgRGlzYXBwb2ludG1lbnRzCitAc2VjdGlvbiBEaXNhcHBvaW50bWVudHMgYW5kIE1pc3VuZGVyc3RhbmRpbmdzCisKK1RoZXNlIHByb2JsZW1zIGFyZSBwZXJoYXBzIHJlZ3JldHRhYmxlLCBidXQgd2UgZG9uJ3Qga25vdyBhbnkgcHJhY3RpY2FsCit3YXkgYXJvdW5kIHRoZW0uCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitDZXJ0YWluIGxvY2FsIHZhcmlhYmxlcyBhcmVuJ3QgcmVjb2duaXplZCBieSBkZWJ1Z2dlcnMgd2hlbiB5b3UgY29tcGlsZQord2l0aCBvcHRpbWl6YXRpb24uCisKK1RoaXMgb2NjdXJzIGJlY2F1c2Ugc29tZXRpbWVzIEdOVSBDQyBvcHRpbWl6ZXMgdGhlIHZhcmlhYmxlIG91dCBvZgorZXhpc3RlbmNlLiAgVGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgdGhlIGRlYnVnZ2VyIGhvdyB0byBjb21wdXRlIHRoZQordmFsdWUgc3VjaCBhIHZhcmlhYmxlIGBgd291bGQgaGF2ZSBoYWQnJywgYW5kIGl0IGlzIG5vdCBjbGVhciB0aGF0IHdvdWxkCitiZSBkZXNpcmFibGUgYW55d2F5LiAgU28gR05VIENDIHNpbXBseSBkb2VzIG5vdCBtZW50aW9uIHRoZSBlbGltaW5hdGVkCit2YXJpYWJsZSB3aGVuIGl0IHdyaXRlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisKK1lvdSBoYXZlIHRvIGV4cGVjdCBhIGNlcnRhaW4gYW1vdW50IG9mIGRpc2FncmVlbWVudCBiZXR3ZWVuIHRoZQorZXhlY3V0YWJsZSBhbmQgeW91ciBzb3VyY2UgY29kZSwgd2hlbiB5b3UgdXNlIG9wdGltaXphdGlvbi4KKworQGNpbmRleCBjb25mbGljdGluZyB0eXBlcworQGNpbmRleCBzY29wZSBvZiBkZWNsYXJhdGlvbgorQGl0ZW0KK1VzZXJzIG9mdGVuIHRoaW5rIGl0IGlzIGEgYnVnIHdoZW4gR05VIENDIHJlcG9ydHMgYW4gZXJyb3IgZm9yIGNvZGUKK2xpa2UgdGhpczoKKworQGV4YW1wbGUKK2ludCBmb28gKHN0cnVjdCBtdW1ibGUgKik7CisKK3N0cnVjdCBtdW1ibGUgQHsgQGRvdHN7fSBAfTsKKworaW50IGZvbyAoc3RydWN0IG11bWJsZSAqeCkKK0B7IEBkb3Rze30gQH0KK0BlbmQgZXhhbXBsZQorCitUaGlzIGNvZGUgcmVhbGx5IGlzIGVycm9uZW91cywgYmVjYXVzZSB0aGUgc2NvcGUgb2YgQGNvZGV7c3RydWN0CittdW1ibGV9IGluIHRoZSBwcm90b3R5cGUgaXMgbGltaXRlZCB0byB0aGUgYXJndW1lbnQgbGlzdCBjb250YWluaW5nIGl0LgorSXQgZG9lcyBub3QgcmVmZXIgdG8gdGhlIEBjb2Rle3N0cnVjdCBtdW1ibGV9IGRlZmluZWQgd2l0aCBmaWxlIHNjb3BlCitpbW1lZGlhdGVseSBiZWxvdy0tLXRoZXkgYXJlIHR3byB1bnJlbGF0ZWQgdHlwZXMgd2l0aCBzaW1pbGFyIG5hbWVzIGluCitkaWZmZXJlbnQgc2NvcGVzLgorCitCdXQgaW4gdGhlIGRlZmluaXRpb24gb2YgQGNvZGV7Zm9vfSwgdGhlIGZpbGUtc2NvcGUgdHlwZSBpcyB1c2VkCitiZWNhdXNlIHRoYXQgaXMgYXZhaWxhYmxlIHRvIGJlIGluaGVyaXRlZC4gIFRodXMsIHRoZSBkZWZpbml0aW9uIGFuZAordGhlIHByb3RvdHlwZSBkbyBub3QgbWF0Y2gsIGFuZCB5b3UgZ2V0IGFuIGVycm9yLgorCitUaGlzIGJlaGF2aW9yIG1heSBzZWVtIHNpbGx5LCBidXQgaXQncyB3aGF0IHRoZSBBTlNJIHN0YW5kYXJkIHNwZWNpZmllcy4KK0l0IGlzIGVhc3kgZW5vdWdoIGZvciB5b3UgdG8gbWFrZSB5b3VyIGNvZGUgd29yayBieSBtb3ZpbmcgdGhlCitkZWZpbml0aW9uIG9mIEBjb2Rle3N0cnVjdCBtdW1ibGV9IGFib3ZlIHRoZSBwcm90b3R5cGUuICBJdCdzIG5vdCB3b3J0aAorYmVpbmcgaW5jb21wYXRpYmxlIHdpdGggQU5TSSBDIGp1c3QgdG8gYXZvaWQgYW4gZXJyb3IgZm9yIHRoZSBleGFtcGxlCitzaG93biBhYm92ZS4KKworQGl0ZW0KK0FjY2Vzc2VzIHRvIGJpdGZpZWxkcyBldmVuIGluIHZvbGF0aWxlIG9iamVjdHMgd29ya3MgYnkgYWNjZXNzaW5nIGxhcmdlcgorb2JqZWN0cywgc3VjaCBhcyBhIGJ5dGUgb3IgYSB3b3JkLiAgWW91IGNhbm5vdCByZWx5IG9uIHdoYXQgc2l6ZSBvZgorb2JqZWN0IGlzIGFjY2Vzc2VkIGluIG9yZGVyIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGJpdGZpZWxkOyBpdCBtYXkgZXZlbgordmFyeSBmb3IgYSBnaXZlbiBiaXRmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIHByZWNpc2UgdXNhZ2UuCisKK0lmIHlvdSBjYXJlIGFib3V0IGNvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgaXMgYWNjZXNzZWQsIHVzZQordm9sYXRpbGUgYnV0IGRvIG5vdCB1c2UgYml0ZmllbGRzLgorCitAaXRlbQorR05VIENDIGNvbWVzIHdpdGggc2hlbGwgc2NyaXB0cyB0byBmaXggY2VydGFpbiBrbm93biBwcm9ibGVtcyBpbiBzeXN0ZW0KK2hlYWRlciBmaWxlcy4gIFRoZXkgaW5zdGFsbCBjb3JyZWN0ZWQgY29waWVzIG9mIHZhcmlvdXMgaGVhZGVyIGZpbGVzIGluCithIHNwZWNpYWwgZGlyZWN0b3J5IHdoZXJlIG9ubHkgR05VIENDIHdpbGwgbm9ybWFsbHkgbG9vayBmb3IgdGhlbS4gIFRoZQorc2NyaXB0cyBhZGFwdCB0byB2YXJpb3VzIHN5c3RlbXMgYnkgc2VhcmNoaW5nIGFsbCB0aGUgc3lzdGVtIGhlYWRlcgorZmlsZXMgZm9yIHRoZSBwcm9ibGVtIGNhc2VzIHRoYXQgd2Uga25vdyBhYm91dC4KKworSWYgbmV3IHN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIGluc3RhbGxlZCwgbm90aGluZyBhdXRvbWF0aWNhbGx5IGFycmFuZ2VzCit0byB1cGRhdGUgdGhlIGNvcnJlY3RlZCBoZWFkZXIgZmlsZXMuICBZb3Ugd2lsbCBoYXZlIHRvIHJlaW5zdGFsbCBHTlUgQ0MKK3RvIGZpeCB0aGUgbmV3IGhlYWRlciBmaWxlcy4gIE1vcmUgc3BlY2lmaWNhbGx5LCBnbyB0byB0aGUgYnVpbGQKK2RpcmVjdG9yeSBhbmQgZGVsZXRlIHRoZSBmaWxlcyBAZmlsZXtzdG1wLWZpeGluY30gYW5kCitAZmlsZXtzdG1wLWhlYWRlcnN9LCBhbmQgdGhlIHN1YmRpcmVjdG9yeSBAY29kZXtpbmNsdWRlfTsgdGhlbiBkbworQHNhbXB7bWFrZSBpbnN0YWxsfSBhZ2Fpbi4KKworQGl0ZW0KK0BjaW5kZXggZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uCitPbiA2ODAwMCBhbmQgeDg2IHN5c3RlbXMsIGZvciBpbnN0YW5jZSwgeW91IGNhbiBnZXQgcGFyYWRveGljYWwgcmVzdWx0cworaWYgeW91IHRlc3QgdGhlIHByZWNpc2UgdmFsdWVzIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBGb3IgZXhhbXBsZSwKK3lvdSBjYW4gZmluZCB0aGF0IGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgd2hpY2ggaXMgbm90IGEgTmFOIGlzIG5vdCBlcXVhbAordG8gaXRzZWxmLiAgVGhpcyByZXN1bHRzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCitob2xkIGEgZmV3IG1vcmUgYml0cyBvZiBwcmVjaXNpb24gdGhhbiBmaXQgaW4gYSBAY29kZXtkb3VibGV9IGluIG1lbW9yeS4KK0NvbXBpbGVkIGNvZGUgbW92ZXMgdmFsdWVzIGJldHdlZW4gbWVtb3J5IGFuZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMKK2F0IGl0cyBjb252ZW5pZW5jZSwgYW5kIG1vdmluZyB0aGVtIGludG8gbWVtb3J5IHRydW5jYXRlcyB0aGVtLgorCitZb3UgY2FuIHBhcnRpYWxseSBhdm9pZCB0aGlzIHByb2JsZW0gYnkgdXNpbmcgdGhlIEBzYW1wey1mZmxvYXQtc3RvcmV9CitvcHRpb24gKEBweHJlZntPcHRpbWl6ZSBPcHRpb25zfSkuCisKK0BpdGVtCitPbiB0aGUgTUlQUywgdmFyaWFibGUgYXJndW1lbnQgZnVuY3Rpb25zIHVzaW5nIEBmaWxle3ZhcmFyZ3MuaH0KK2Nhbm5vdCBoYXZlIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRoZQorcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaW4gdGhlIGFic2VuY2Ugb2YgYSBwcm90b3R5cGUgaW4gc2NvcGUsCitpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBmbG9hdGluZyBwb2ludCwgaXQgaXMgcGFzc2VkIGluIGEKK2Zsb2F0aW5nIHBvaW50IHJlZ2lzdGVyLCByYXRoZXIgdGhhbiBhbiBpbnRlZ2VyIHJlZ2lzdGVyLgorCitJZiB0aGUgY29kZSBpcyByZXdyaXR0ZW4gdG8gdXNlIHRoZSBBTlNJIHN0YW5kYXJkIEBmaWxle3N0ZGFyZy5ofQorbWV0aG9kIG9mIHZhcmlhYmxlIGFyZ3VtZW50cywgYW5kIHRoZSBwcm90b3R5cGUgaXMgaW4gc2NvcGUgYXQKK3RoZSB0aW1lIG9mIHRoZSBjYWxsLCBldmVyeXRoaW5nIHdpbGwgd29yayBmaW5lLgorCitAaXRlbQorT24gdGhlIEg4LzMwMCBhbmQgSDgvMzAwSCwgdmFyaWFibGUgYXJndW1lbnQgZnVuY3Rpb25zIG11c3QgYmUKK2ltcGxlbWVudGVkIHVzaW5nIHRoZSBBTlNJIHN0YW5kYXJkIEBmaWxle3N0ZGFyZy5ofSBtZXRob2Qgb2YKK3ZhcmlhYmxlIGFyZ3VtZW50cy4gIEZ1cnRoZXJtb3JlLCBjYWxscyB0byBmdW5jdGlvbnMgdXNpbmcgQGZpbGV7c3RkYXJnLmh9Cit2YXJpYWJsZSBhcmd1bWVudHMgbXVzdCBoYXZlIGEgcHJvdG90eXBlIGZvciB0aGUgY2FsbGVkIGZ1bmN0aW9uCitpbiBzY29wZSBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbC4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBDKysgTWlzdW5kZXJzdGFuZGluZ3MKK0BzZWN0aW9uIENvbW1vbiBNaXN1bmRlcnN0YW5kaW5ncyB3aXRoIEdOVSBDKysKKworQGNpbmRleCBtaXN1bmRlcnN0YW5kaW5ncyBpbiBDKysKK0BjaW5kZXggc3VycHJpc2VzIGluIEMrKworQGNpbmRleCBDKysgbWlzdW5kZXJzdGFuZGluZ3MKK0MrKyBpcyBhIGNvbXBsZXggbGFuZ3VhZ2UgYW5kIGFuIGV2b2x2aW5nIG9uZSwgYW5kIGl0cyBzdGFuZGFyZCBkZWZpbml0aW9uCisodGhlIEFOU0kgQysrIGRyYWZ0IHN0YW5kYXJkKSBpcyBhbHNvIGV2b2x2aW5nLiAgQXMgYSByZXN1bHQsCit5b3VyIEMrKyBjb21waWxlciBtYXkgb2NjYXNpb25hbGx5IHN1cnByaXNlIHlvdSwgZXZlbiB3aGVuIGl0cyBiZWhhdmlvciBpcworY29ycmVjdC4gIFRoaXMgc2VjdGlvbiBkaXNjdXNzZXMgc29tZSBhcmVhcyB0aGF0IGZyZXF1ZW50bHkgZ2l2ZSByaXNlIHRvCitxdWVzdGlvbnMgb2YgdGhpcyBzb3J0LgorCitAbWVudQorKiBTdGF0aWMgRGVmaW5pdGlvbnM6OiAgU3RhdGljIG1lbWJlciBkZWNsYXJhdGlvbnMgYXJlIG5vdCBkZWZpbml0aW9ucworKiBUZW1wb3Jhcmllczo6ICAgICAgICAgVGVtcG9yYXJpZXMgbWF5IHZhbmlzaCBiZWZvcmUgeW91IGV4cGVjdAorQGVuZCBtZW51CisKK0Bub2RlIFN0YXRpYyBEZWZpbml0aW9ucworQHN1YnNlY3Rpb24gRGVjbGFyZSBAZW1waHthbmR9IERlZmluZSBTdGF0aWMgTWVtYmVycworCitAY2luZGV4IEMrKyBzdGF0aWMgZGF0YSwgZGVjbGFyaW5nIGFuZCBkZWZpbmluZworQGNpbmRleCBzdGF0aWMgZGF0YSBpbiBDKyssIGRlY2xhcmluZyBhbmQgZGVmaW5pbmcKK0BjaW5kZXggZGVjbGFyaW5nIHN0YXRpYyBkYXRhIGluIEMrKworQGNpbmRleCBkZWZpbmluZyBzdGF0aWMgZGF0YSBpbiBDKysKK1doZW4gYSBjbGFzcyBoYXMgc3RhdGljIGRhdGEgbWVtYmVycywgaXQgaXMgbm90IGVub3VnaCB0byBAZW1waHtkZWNsYXJlfQordGhlIHN0YXRpYyBtZW1iZXI7IHlvdSBtdXN0IGFsc28gQGVtcGh7ZGVmaW5lfSBpdC4gIEZvciBleGFtcGxlOgorCitAZXhhbXBsZQorY2xhc3MgRm9vCitAeworICBAZG90c3t9CisgIHZvaWQgbWV0aG9kKCk7CisgIHN0YXRpYyBpbnQgYmFyOworQH07CitAZW5kIGV4YW1wbGUKKworVGhpcyBkZWNsYXJhdGlvbiBvbmx5IGVzdGFibGlzaGVzIHRoYXQgdGhlIGNsYXNzIEBjb2Rle0Zvb30gaGFzIGFuCitAY29kZXtpbnR9IG5hbWVkIEBjb2Rle0Zvbzo6YmFyfSwgYW5kIGEgbWVtYmVyIGZ1bmN0aW9uIG5hbWVkCitAY29kZXtGb286Om1ldGhvZH0uICBCdXQgeW91IHN0aWxsIG5lZWQgdG8gZGVmaW5lIEBlbXBoe2JvdGh9CitAY29kZXttZXRob2R9IGFuZCBAY29kZXtiYXJ9IGVsc2V3aGVyZS4gIEFjY29yZGluZyB0byB0aGUgZHJhZnQgQU5TSQorc3RhbmRhcmQsIHlvdSBtdXN0IHN1cHBseSBhbiBpbml0aWFsaXplciBpbiBvbmUgKGFuZCBvbmx5IG9uZSkgc291cmNlCitmaWxlLCBzdWNoIGFzOgorCitAZXhhbXBsZQoraW50IEZvbzo6YmFyID0gMDsKK0BlbmQgZXhhbXBsZQorCitPdGhlciBDKysgY29tcGlsZXJzIG1heSBub3QgY29ycmVjdGx5IGltcGxlbWVudCB0aGUgc3RhbmRhcmQgYmVoYXZpb3IuCitBcyBhIHJlc3VsdCwgd2hlbiB5b3Ugc3dpdGNoIHRvIEBjb2Rle2crK30gZnJvbSBvbmUgb2YgdGhlc2UgY29tcGlsZXJzLAoreW91IG1heSBkaXNjb3ZlciB0aGF0IGEgcHJvZ3JhbSB0aGF0IGFwcGVhcmVkIHRvIHdvcmsgY29ycmVjdGx5IGluIGZhY3QKK2RvZXMgbm90IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkOiBAY29kZXtnKyt9IHJlcG9ydHMgYXMgdW5kZWZpbmVkCitzeW1ib2xzIGFueSBzdGF0aWMgZGF0YSBtZW1iZXJzIHRoYXQgbGFjayBkZWZpbml0aW9ucy4KKworQG5vZGUgVGVtcG9yYXJpZXMKK0BzdWJzZWN0aW9uIFRlbXBvcmFyaWVzIE1heSBWYW5pc2ggQmVmb3JlIFlvdSBFeHBlY3QKKworQGNpbmRleCB0ZW1wb3JhcmllcywgbGlmZXRpbWUgb2YKK0BjaW5kZXggcG9ydGlvbnMgb2YgdGVtcG9yYXJ5IG9iamVjdHMsIHBvaW50ZXJzIHRvCitJdCBpcyBkYW5nZXJvdXMgdG8gdXNlIHBvaW50ZXJzIG9yIHJlZmVyZW5jZXMgdG8gQGVtcGh7cG9ydGlvbnN9IG9mIGEKK3RlbXBvcmFyeSBvYmplY3QuICBUaGUgY29tcGlsZXIgbWF5IHZlcnkgd2VsbCBkZWxldGUgdGhlIG9iamVjdCBiZWZvcmUKK3lvdSBleHBlY3QgaXQgdG8sIGxlYXZpbmcgYSBwb2ludGVyIHRvIGdhcmJhZ2UuICBUaGUgbW9zdCBjb21tb24gcGxhY2UKK3doZXJlIHRoaXMgcHJvYmxlbSBjcm9wcyB1cCBpcyBpbiBjbGFzc2VzIGxpa2UgdGhlIGxpYmcrKworQGNvZGV7U3RyaW5nfSBjbGFzcywgdGhhdCBkZWZpbmUgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIHRvIHR5cGUKK0Bjb2Rle2NoYXIgKn0gb3IgQGNvZGV7Y29uc3QgY2hhciAqfS4gIEhvd2V2ZXIsIGFueSBjbGFzcyB0aGF0IHJldHVybnMKK2EgcG9pbnRlciB0byBzb21lIGludGVybmFsIHN0cnVjdHVyZSBpcyBwb3RlbnRpYWxseSBzdWJqZWN0IHRvIHRoaXMKK3Byb2JsZW0uCisKK0ZvciBleGFtcGxlLCBhIHByb2dyYW0gbWF5IHVzZSBhIGZ1bmN0aW9uIEBjb2Rle3N0cmZ1bmN9IHRoYXQgcmV0dXJucworQGNvZGV7U3RyaW5nfSBvYmplY3RzLCBhbmQgYW5vdGhlciBmdW5jdGlvbiBAY29kZXtjaGFyZnVuY30gdGhhdAorb3BlcmF0ZXMgb24gcG9pbnRlcnMgdG8gQGNvZGV7Y2hhcn06CisKK0BleGFtcGxlCitTdHJpbmcgc3RyZnVuYyAoKTsKK3ZvaWQgY2hhcmZ1bmMgKGNvbnN0IGNoYXIgKik7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitJbiB0aGlzIHNpdHVhdGlvbiwgaXQgbWF5IHNlZW0gbmF0dXJhbCB0byB3cml0ZSBAd3tAc2FtcHtjaGFyZnVuYworKHN0cmZ1bmMgKCkpO319IGJhc2VkIG9uIHRoZSBrbm93bGVkZ2UgdGhhdCBjbGFzcyBAY29kZXtTdHJpbmd9IGhhcyBhbgorZXhwbGljaXQgY29udmVyc2lvbiB0byBAY29kZXtjaGFyfSBwb2ludGVycy4gIEhvd2V2ZXIsIHdoYXQgcmVhbGx5CitoYXBwZW5zIGlzIGFraW4gdG8gQHNhbXB7Y2hhcmZ1bmMgKEB3e3N0cmZ1bmMgKCl9LkB3e2NvbnZlcnQgKCl9KTt9LAord2hlcmUgdGhlIEBjb2Rle2NvbnZlcnR9IG1ldGhvZCBpcyBhIGZ1bmN0aW9uIHRvIGRvIHRoZSBzYW1lIGRhdGEKK2NvbnZlcnNpb24gbm9ybWFsbHkgcGVyZm9ybWVkIGJ5IGEgY2FzdC4gIFNpbmNlIHRoZSBsYXN0IHVzZSBvZiB0aGUKK3RlbXBvcmFyeSBAY29kZXtTdHJpbmd9IG9iamVjdCBpcyB0aGUgY2FsbCB0byB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiwKK3RoZSBjb21waWxlciBtYXkgZGVsZXRlIHRoYXQgb2JqZWN0IGJlZm9yZSBhY3R1YWxseSBjYWxsaW5nCitAY29kZXtjaGFyZnVuY30uICBUaGUgY29tcGlsZXIgaGFzIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgZGVsZXRpbmcgdGhlCitAY29kZXtTdHJpbmd9IG9iamVjdCB3aWxsIGludmFsaWRhdGUgdGhlIHBvaW50ZXIuICBUaGUgcG9pbnRlciB0aGVuCitwb2ludHMgdG8gZ2FyYmFnZSwgc28gdGhhdCBieSB0aGUgdGltZSBAY29kZXtjaGFyZnVuY30gaXMgY2FsbGVkLCBpdAorZ2V0cyBhbiBpbnZhbGlkIGFyZ3VtZW50LgorCitDb2RlIGxpa2UgdGhpcyBtYXkgcnVuIHN1Y2Nlc3NmdWxseSB1bmRlciBzb21lIG90aGVyIGNvbXBpbGVycywKK2VzcGVjaWFsbHkgdGhvc2UgdGhhdCBkZWxldGUgdGVtcG9yYXJpZXMgcmVsYXRpdmVseSBsYXRlLiAgSG93ZXZlciwgdGhlCitHTlUgQysrIGJlaGF2aW9yIGlzIGFsc28gc3RhbmRhcmQtY29uZm9ybWluZywgc28gaWYgeW91ciBwcm9ncmFtIGRlcGVuZHMKK29uIGxhdGUgZGVzdHJ1Y3Rpb24gb2YgdGVtcG9yYXJpZXMgaXQgaXMgbm90IHBvcnRhYmxlLgorCitJZiB5b3UgdGhpbmsgdGhpcyBpcyBzdXJwcmlzaW5nLCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhlIEFOU0kgQysrCitjb21taXR0ZWUgY29udGludWVzIHRvIGRlYmF0ZSB0aGUgbGlmZXRpbWUtb2YtdGVtcG9yYXJpZXMgcHJvYmxlbS4KKworRm9yIG5vdywgYXQgbGVhc3QsIHRoZSBzYWZlIHdheSB0byB3cml0ZSBzdWNoIGNvZGUgaXMgdG8gZ2l2ZSB0aGUKK3RlbXBvcmFyeSBhIG5hbWUsIHdoaWNoIGZvcmNlcyBpdCB0byByZW1haW4gdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NvcGUgb2YKK3RoZSBuYW1lLiAgRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCitTdHJpbmcmIHRtcCA9IHN0cmZ1bmMgKCk7CitjaGFyZnVuYyAodG1wKTsKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBQcm90b2l6ZSBDYXZlYXRzCitAc2VjdGlvbiBDYXZlYXRzIG9mIHVzaW5nIEBjb2Rle3Byb3RvaXplfQorCitUaGUgY29udmVyc2lvbiBwcm9ncmFtcyBAY29kZXtwcm90b2l6ZX0gYW5kIEBjb2Rle3VucHJvdG9pemV9IGNhbgorc29tZXRpbWVzIGNoYW5nZSBhIHNvdXJjZSBmaWxlIGluIGEgd2F5IHRoYXQgd29uJ3Qgd29yayB1bmxlc3MgeW91CityZWFycmFuZ2UgaXQuCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitAY29kZXtwcm90b2l6ZX0gY2FuIGluc2VydCByZWZlcmVuY2VzIHRvIGEgdHlwZSBuYW1lIG9yIHR5cGUgdGFnIGJlZm9yZQordGhlIGRlZmluaXRpb24sIG9yIGluIGEgZmlsZSB3aGVyZSB0aGV5IGFyZSBub3QgZGVmaW5lZC4KKworSWYgdGhpcyBoYXBwZW5zLCBjb21waWxlciBlcnJvciBtZXNzYWdlcyBzaG91bGQgc2hvdyB5b3Ugd2hlcmUgdGhlIG5ldworcmVmZXJlbmNlcyBhcmUsIHNvIGZpeGluZyB0aGUgZmlsZSBieSBoYW5kIGlzIHN0cmFpZ2h0Zm9yd2FyZC4KKworQGl0ZW0KK1RoZXJlIGFyZSBzb21lIEMgY29uc3RydWN0cyB3aGljaCBAY29kZXtwcm90b2l6ZX0gY2Fubm90IGZpZ3VyZSBvdXQuCitGb3IgZXhhbXBsZSwgaXQgY2FuJ3QgZGV0ZXJtaW5lIGFyZ3VtZW50IHR5cGVzIGZvciBkZWNsYXJpbmcgYQorcG9pbnRlci10by1mdW5jdGlvbiB2YXJpYWJsZTsgdGhpcyB5b3UgbXVzdCBkbyBieSBoYW5kLiAgQGNvZGV7cHJvdG9pemV9CitpbnNlcnRzIGEgY29tbWVudCBjb250YWluaW5nIEBzYW1wez8/P30gZWFjaCB0aW1lIGl0IGZpbmRzIHN1Y2ggYQordmFyaWFibGU7IHNvIHlvdSBjYW4gZmluZCBhbGwgc3VjaCB2YXJpYWJsZXMgYnkgc2VhcmNoaW5nIGZvciB0aGlzCitzdHJpbmcuICBBTlNJIEMgZG9lcyBub3QgcmVxdWlyZSBkZWNsYXJpbmcgdGhlIGFyZ3VtZW50IHR5cGVzIG9mCitwb2ludGVyLXRvLWZ1bmN0aW9uIHR5cGVzLgorCitAaXRlbQorVXNpbmcgQGNvZGV7dW5wcm90b2l6ZX0gY2FuIGVhc2lseSBpbnRyb2R1Y2UgYnVncy4gIElmIHRoZSBwcm9ncmFtCityZWxpZWQgb24gcHJvdG90eXBlcyB0byBicmluZyBhYm91dCBjb252ZXJzaW9uIG9mIGFyZ3VtZW50cywgdGhlc2UKK2NvbnZlcnNpb25zIHdpbGwgbm90IHRha2UgcGxhY2UgaW4gdGhlIHByb2dyYW0gd2l0aG91dCBwcm90b3R5cGVzLgorT25lIGNhc2UgaW4gd2hpY2ggeW91IGNhbiBiZSBzdXJlIEBjb2Rle3VucHJvdG9pemV9IGlzIHNhZmUgaXMgd2hlbgoreW91IGFyZSByZW1vdmluZyBwcm90b3R5cGVzIHRoYXQgd2VyZSBtYWRlIHdpdGggQGNvZGV7cHJvdG9pemV9OyBpZgordGhlIHByb2dyYW0gd29ya2VkIGJlZm9yZSB3aXRob3V0IGFueSBwcm90b3R5cGVzLCBpdCB3aWxsIHdvcmsgYWdhaW4KK3dpdGhvdXQgdGhlbS4KKworWW91IGNhbiBmaW5kIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgcHJvYmxlbSBtaWdodCBvY2N1ciBieSBjb21waWxpbmcKK3RoZSBwcm9ncmFtIHdpdGggdGhlIEBzYW1wey1XY29udmVyc2lvbn0gb3B0aW9uLiAgSXQgcHJpbnRzIGEgd2FybmluZword2hlbmV2ZXIgYW4gYXJndW1lbnQgaXMgY29udmVydGVkLgorCitAaXRlbQorQm90aCBjb252ZXJzaW9uIHByb2dyYW1zIGNhbiBiZSBjb25mdXNlZCBpZiB0aGVyZSBhcmUgbWFjcm8gY2FsbHMgaW4gYW5kCithcm91bmQgdGhlIHRleHQgdG8gYmUgY29udmVydGVkLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBzdGFuZGFyZCBzeW50YXgKK2ZvciBhIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24gbXVzdCBub3QgcmVzdWx0IGZyb20gZXhwYW5kaW5nIGEgbWFjcm8uCitUaGlzIHByb2JsZW0gaXMgaW5oZXJlbnQgaW4gdGhlIGRlc2lnbiBvZiBDIGFuZCBjYW5ub3QgYmUgZml4ZWQuICBJZgorb25seSBhIGZldyBmdW5jdGlvbnMgaGF2ZSBjb25mdXNpbmcgbWFjcm8gY2FsbHMsIHlvdSBjYW4gZWFzaWx5IGNvbnZlcnQKK3RoZW0gbWFudWFsbHkuCisKK0BpdGVtCitAY29kZXtwcm90b2l6ZX0gY2Fubm90IGdldCB0aGUgYXJndW1lbnQgdHlwZXMgZm9yIGEgZnVuY3Rpb24gd2hvc2UKK2RlZmluaXRpb24gd2FzIG5vdCBhY3R1YWxseSBjb21waWxlZCBkdWUgdG8gcHJlcHJvY2Vzc2luZyBjb25kaXRpb25hbHMuCitXaGVuIHRoaXMgaGFwcGVucywgQGNvZGV7cHJvdG9pemV9IGNoYW5nZXMgbm90aGluZyBpbiByZWdhcmQgdG8gc3VjaAorYSBmdW5jdGlvbi4gIEBjb2Rle3Byb3RvaXplfSB0cmllcyB0byBkZXRlY3Qgc3VjaCBpbnN0YW5jZXMgYW5kIHdhcm4KK2Fib3V0IHRoZW0uCisKK1lvdSBjYW4gZ2VuZXJhbGx5IHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSB1c2luZyBAY29kZXtwcm90b2l6ZX0gc3RlcAorYnkgc3RlcCwgZWFjaCB0aW1lIHNwZWNpZnlpbmcgYSBkaWZmZXJlbnQgc2V0IG9mIEBzYW1wey1EfSBvcHRpb25zIGZvcgorY29tcGlsYXRpb24sIHVudGlsIGFsbCBvZiB0aGUgZnVuY3Rpb25zIGhhdmUgYmVlbiBjb252ZXJ0ZWQuICBUaGVyZSBpcworbm8gYXV0b21hdGljIHdheSB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBnb3QgdGhlbSBhbGwsIGhvd2V2ZXIuCisKK0BpdGVtCitDb25mdXNpb24gbWF5IHJlc3VsdCBpZiB0aGVyZSBpcyBhbiBvY2Nhc2lvbiB0byBjb252ZXJ0IGEgZnVuY3Rpb24KK2RlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24gaW4gYSByZWdpb24gb2Ygc291cmNlIGNvZGUgd2hlcmUgdGhlcmUgaXMgbW9yZQordGhhbiBvbmUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IHByZXNlbnQuICBUaHVzLCBhdHRlbXB0cyB0byBjb252ZXJ0IGNvZGUKK2NvbnRhaW5pbmcgbXVsdGlwbGUgKGNvbmRpdGlvbmFsbHkgY29tcGlsZWQpIHZlcnNpb25zIG9mIGEgc2luZ2xlCitmdW5jdGlvbiBoZWFkZXIgKGluIHRoZSBzYW1lIHZpY2luaXR5KSBtYXkgbm90IHByb2R1Y2UgdGhlIGRlc2lyZWQgKG9yCitleHBlY3RlZCkgcmVzdWx0cy4KKworSWYgeW91IHBsYW4gb24gY29udmVydGluZyBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiBzdWNoIGNvZGUsIGl0IGlzCityZWNvbW1lbmRlZCB0aGF0IHlvdSBmaXJzdCBtYWtlIHN1cmUgdGhhdCBlYWNoIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQKK3JlZ2lvbiBvZiBzb3VyY2UgY29kZSB3aGljaCBjb250YWlucyBhbiBhbHRlcm5hdGl2ZSBmdW5jdGlvbiBoZWFkZXIgYWxzbworY29udGFpbnMgYXQgbGVhc3Qgb25lIGFkZGl0aW9uYWwgZm9sbG93ZXIgdG9rZW4gKHBhc3QgdGhlIGZpbmFsIHJpZ2h0CitwYXJlbnRoZXNpcyBvZiB0aGUgZnVuY3Rpb24gaGVhZGVyKS4gIFRoaXMgc2hvdWxkIGNpcmN1bXZlbnQgdGhlCitwcm9ibGVtLgorCitAaXRlbQorQGNvZGV7dW5wcm90b2l6ZX0gY2FuIGJlY29tZSBjb25mdXNlZCB3aGVuIHRyeWluZyB0byBjb252ZXJ0IGEgZnVuY3Rpb24KK2RlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gd2hpY2ggY29udGFpbnMgYSBkZWNsYXJhdGlvbiBmb3IgYQorcG9pbnRlci10by1mdW5jdGlvbiBmb3JtYWwgYXJndW1lbnQgd2hpY2ggaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlCitmdW5jdGlvbiBiZWluZyBkZWZpbmVkIG9yIGRlY2xhcmVkLiAgV2UgcmVjb21tYW5kIHlvdSBhdm9pZCBzdWNoIGNob2ljZXMKK29mIGZvcm1hbCBwYXJhbWV0ZXIgbmFtZXMuCisKK0BpdGVtCitZb3UgbWlnaHQgYWxzbyB3YW50IHRvIGNvcnJlY3Qgc29tZSBvZiB0aGUgaW5kZW50YXRpb24gYnkgaGFuZCBhbmQgYnJlYWsKK2xvbmcgbGluZXMuICAoVGhlIGNvbnZlcnNpb24gcHJvZ3JhbXMgZG9uJ3Qgd3JpdGUgbGluZXMgbG9uZ2VyIHRoYW4KK2VpZ2h0eSBjaGFyYWN0ZXJzIGluIGFueSBjYXNlLikKK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBOb24tYnVncworQHNlY3Rpb24gQ2VydGFpbiBDaGFuZ2VzIFdlIERvbid0IFdhbnQgdG8gTWFrZQorCitUaGlzIHNlY3Rpb24gbGlzdHMgY2hhbmdlcyB0aGF0IHBlb3BsZSBmcmVxdWVudGx5IHJlcXVlc3QsIGJ1dCB3aGljaAord2UgZG8gbm90IG1ha2UgYmVjYXVzZSB3ZSB0aGluayBHTlUgQ0MgaXMgYmV0dGVyIHdpdGhvdXQgdGhlbS4KKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0NoZWNraW5nIHRoZSBudW1iZXIgYW5kIHR5cGUgb2YgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24gd2hpY2ggaGFzIGFuCitvbGQtZmFzaGlvbmVkIGRlZmluaXRpb24gYW5kIG5vIHByb3RvdHlwZS4KKworU3VjaCBhIGZlYXR1cmUgd291bGQgd29yayBvbmx5IG9jY2FzaW9uYWxseS0tLW9ubHkgZm9yIGNhbGxzIHRoYXQgYXBwZWFyCitpbiB0aGUgc2FtZSBmaWxlIGFzIHRoZSBjYWxsZWQgZnVuY3Rpb24sIGZvbGxvd2luZyB0aGUgZGVmaW5pdGlvbi4gIFRoZQorb25seSB3YXkgdG8gY2hlY2sgYWxsIGNhbGxzIHJlbGlhYmx5IGlzIHRvIGFkZCBhIHByb3RvdHlwZSBmb3IgdGhlCitmdW5jdGlvbi4gIEJ1dCBhZGRpbmcgYSBwcm90b3R5cGUgZWxpbWluYXRlcyB0aGUgbW90aXZhdGlvbiBmb3IgdGhpcworZmVhdHVyZS4gIFNvIHRoZSBmZWF0dXJlIGlzIG5vdCB3b3J0aHdoaWxlLgorCitAaXRlbQorV2FybmluZyBhYm91dCB1c2luZyBhbiBleHByZXNzaW9uIHdob3NlIHR5cGUgaXMgc2lnbmVkIGFzIGEgc2hpZnQgY291bnQuCisKK1NoaWZ0IGNvdW50IG9wZXJhbmRzIGFyZSBwcm9iYWJseSBzaWduZWQgbW9yZSBvZnRlbiB0aGFuIHVuc2lnbmVkLgorV2FybmluZyBhYm91dCB0aGlzIHdvdWxkIGNhdXNlIGZhciBtb3JlIGFubm95YW5jZSB0aGFuIGdvb2QuCisKK0BpdGVtCitXYXJuaW5nIGFib3V0IGFzc2lnbmluZyBhIHNpZ25lZCB2YWx1ZSB0byBhbiB1bnNpZ25lZCB2YXJpYWJsZS4KKworU3VjaCBhc3NpZ25tZW50cyBtdXN0IGJlIHZlcnkgY29tbW9uOyB3YXJuaW5nIGFib3V0IHRoZW0gd291bGQgY2F1c2UKK21vcmUgYW5ub3lhbmNlIHRoYW4gZ29vZC4KKworQGl0ZW0KK1dhcm5pbmcgYWJvdXQgdW5yZWFjaGFibGUgY29kZS4KKworSXQncyB2ZXJ5IGNvbW1vbiB0byBoYXZlIHVucmVhY2hhYmxlIGNvZGUgaW4gbWFjaGluZS1nZW5lcmF0ZWQKK3Byb2dyYW1zLiAgRm9yIGV4YW1wbGUsIHRoaXMgaGFwcGVucyBub3JtYWxseSBpbiBzb21lIGZpbGVzIG9mIEdOVSBDCitpdHNlbGYuCisKK0BpdGVtCitXYXJuaW5nIHdoZW4gYSBub24tdm9pZCBmdW5jdGlvbiB2YWx1ZSBpcyBpZ25vcmVkLgorCitDb21pbmcgYXMgSSBkbyBmcm9tIGEgTGlzcCBiYWNrZ3JvdW5kLCBJIGJhbGsgYXQgdGhlIGlkZWEgdGhhdCB0aGVyZSBpcworc29tZXRoaW5nIGRhbmdlcm91cyBhYm91dCBkaXNjYXJkaW5nIGEgdmFsdWUuICBUaGVyZSBhcmUgZnVuY3Rpb25zIHRoYXQKK3JldHVybiB2YWx1ZXMgd2hpY2ggc29tZSBjYWxsZXJzIG1heSBmaW5kIHVzZWZ1bDsgaXQgbWFrZXMgbm8gc2Vuc2UgdG8KK2NsdXR0ZXIgdGhlIHByb2dyYW0gd2l0aCBhIGNhc3QgdG8gQGNvZGV7dm9pZH0gd2hlbmV2ZXIgdGhlIHZhbHVlIGlzbid0Cit1c2VmdWwuCisKK0BpdGVtCitBc3N1bWluZyAoZm9yIG9wdGltaXphdGlvbikgdGhhdCB0aGUgYWRkcmVzcyBvZiBhbiBleHRlcm5hbCBzeW1ib2wgaXMKK25ldmVyIHplcm8uCisKK1RoaXMgYXNzdW1wdGlvbiBpcyBmYWxzZSBvbiBjZXJ0YWluIHN5c3RlbXMgd2hlbiBAc2FtcHsjcHJhZ21hIHdlYWt9IGlzCit1c2VkLgorCitAaXRlbQorTWFraW5nIEBzYW1wey1mc2hvcnQtZW51bXN9IHRoZSBkZWZhdWx0LgorCitUaGlzIHdvdWxkIGNhdXNlIHN0b3JhZ2UgbGF5b3V0IHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIG1vc3Qgb3RoZXIgQworY29tcGlsZXJzLiAgQW5kIGl0IGRvZXNuJ3Qgc2VlbSB2ZXJ5IGltcG9ydGFudCwgZ2l2ZW4gdGhhdCB5b3UgY2FuIGdldAordGhlIHNhbWUgcmVzdWx0IGluIG90aGVyIHdheXMuICBUaGUgY2FzZSB3aGVyZSBpdCBtYXR0ZXJzIG1vc3QgaXMgd2hlbgordGhlIGVudW1lcmF0aW9uLXZhbHVlZCBvYmplY3QgaXMgaW5zaWRlIGEgc3RydWN0dXJlLCBhbmQgaW4gdGhhdCBjYXNlCit5b3UgY2FuIHNwZWNpZnkgYSBmaWVsZCB3aWR0aCBleHBsaWNpdGx5LgorCitAaXRlbQorTWFraW5nIGJpdGZpZWxkcyB1bnNpZ25lZCBieSBkZWZhdWx0IG9uIHBhcnRpY3VsYXIgbWFjaGluZXMgd2hlcmUgYGB0aGUKK0FCSSBzdGFuZGFyZCcnIHNheXMgdG8gZG8gc28uCisKK1RoZSBBTlNJIEMgc3RhbmRhcmQgbGVhdmVzIGl0IHVwIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB3aGV0aGVyIGEgYml0ZmllbGQKK2RlY2xhcmVkIHBsYWluIEBjb2Rle2ludH0gaXMgc2lnbmVkIG9yIG5vdC4gIFRoaXMgaW4gZWZmZWN0IGNyZWF0ZXMgdHdvCithbHRlcm5hdGl2ZSBkaWFsZWN0cyBvZiBDLgorCitUaGUgR05VIEMgY29tcGlsZXIgc3VwcG9ydHMgYm90aCBkaWFsZWN0czsgeW91IGNhbiBzcGVjaWZ5IHRoZSBzaWduZWQKK2RpYWxlY3Qgd2l0aCBAc2FtcHstZnNpZ25lZC1iaXRmaWVsZHN9IGFuZCB0aGUgdW5zaWduZWQgZGlhbGVjdCB3aXRoCitAc2FtcHstZnVuc2lnbmVkLWJpdGZpZWxkc30uICBIb3dldmVyLCB0aGlzIGxlYXZlcyBvcGVuIHRoZSBxdWVzdGlvbiBvZgord2hpY2ggZGlhbGVjdCB0byB1c2UgYnkgZGVmYXVsdC4KKworQ3VycmVudGx5LCB0aGUgcHJlZmVycmVkIGRpYWxlY3QgbWFrZXMgcGxhaW4gYml0ZmllbGRzIHNpZ25lZCwgYmVjYXVzZQordGhpcyBpcyBzaW1wbGVzdC4gIFNpbmNlIEBjb2Rle2ludH0gaXMgdGhlIHNhbWUgYXMgQGNvZGV7c2lnbmVkIGludH0gaW4KK2V2ZXJ5IG90aGVyIGNvbnRleHQsIGl0IGlzIGNsZWFuZXN0IGZvciB0aGVtIHRvIGJlIHRoZSBzYW1lIGluIGJpdGZpZWxkcworYXMgd2VsbC4KKworU29tZSBjb21wdXRlciBtYW51ZmFjdHVyZXJzIGhhdmUgcHVibGlzaGVkIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKK3N0YW5kYXJkcyB3aGljaCBzcGVjaWZ5IHRoYXQgcGxhaW4gYml0ZmllbGRzIHNob3VsZCBiZSB1bnNpZ25lZC4gIEl0IGlzCithIG1pc3Rha2UsIGhvd2V2ZXIsIHRvIHNheSBhbnl0aGluZyBhYm91dCB0aGlzIGlzc3VlIGluIGFuIEFCSS4gIFRoaXMgaXMKK2JlY2F1c2UgdGhlIGhhbmRsaW5nIG9mIHBsYWluIGJpdGZpZWxkcyBkaXN0aW5ndWlzaGVzIHR3byBkaWFsZWN0cyBvZiBDLgorQm90aCBkaWFsZWN0cyBhcmUgbWVhbmluZ2Z1bCBvbiBldmVyeSB0eXBlIG9mIG1hY2hpbmUuICBXaGV0aGVyIGEKK3BhcnRpY3VsYXIgb2JqZWN0IGZpbGUgd2FzIGNvbXBpbGVkIHVzaW5nIHNpZ25lZCBiaXRmaWVsZHMgb3IgdW5zaWduZWQKK2lzIG9mIG5vIGNvbmNlcm4gdG8gb3RoZXIgb2JqZWN0IGZpbGVzLCBldmVuIGlmIHRoZXkgYWNjZXNzIHRoZSBzYW1lCitiaXRmaWVsZHMgaW4gdGhlIHNhbWUgZGF0YSBzdHJ1Y3R1cmVzLgorCitBIGdpdmVuIHByb2dyYW0gaXMgd3JpdHRlbiBpbiBvbmUgb3IgdGhlIG90aGVyIG9mIHRoZXNlIHR3byBkaWFsZWN0cy4KK1RoZSBwcm9ncmFtIHN0YW5kcyBhIGNoYW5jZSB0byB3b3JrIG9uIG1vc3QgYW55IG1hY2hpbmUgaWYgaXQgaXMKK2NvbXBpbGVkIHdpdGggdGhlIHByb3BlciBkaWFsZWN0LiAgSXQgaXMgdW5saWtlbHkgdG8gd29yayBhdCBhbGwgaWYKK2NvbXBpbGVkIHdpdGggdGhlIHdyb25nIGRpYWxlY3QuCisKK01hbnkgdXNlcnMgYXBwcmVjaWF0ZSB0aGUgR05VIEMgY29tcGlsZXIgYmVjYXVzZSBpdCBwcm92aWRlcyBhbgorZW52aXJvbm1lbnQgdGhhdCBpcyB1bmlmb3JtIGFjcm9zcyBtYWNoaW5lcy4gIFRoZXNlIHVzZXJzIHdvdWxkIGJlCitpbmNvbnZlbmllbmNlZCBpZiB0aGUgY29tcGlsZXIgdHJlYXRlZCBwbGFpbiBiaXRmaWVsZHMgZGlmZmVyZW50bHkgb24KK2NlcnRhaW4gbWFjaGluZXMuCisKK09jY2FzaW9uYWxseSB1c2VycyB3cml0ZSBwcm9ncmFtcyBpbnRlbmRlZCBvbmx5IGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZQordHlwZS4gIE9uIHRoZXNlIG9jY2FzaW9ucywgdGhlIHVzZXJzIHdvdWxkIGJlbmVmaXQgaWYgdGhlIEdOVSBDIGNvbXBpbGVyCit3ZXJlIHRvIHN1cHBvcnQgYnkgZGVmYXVsdCB0aGUgc2FtZSBkaWFsZWN0IGFzIHRoZSBvdGhlciBjb21waWxlcnMgb24KK3RoYXQgbWFjaGluZS4gIEJ1dCBzdWNoIGFwcGxpY2F0aW9ucyBhcmUgcmFyZS4gIEFuZCB1c2VycyB3cml0aW5nIGEKK3Byb2dyYW0gdG8gcnVuIG9uIG1vcmUgdGhhbiBvbmUgdHlwZSBvZiBtYWNoaW5lIGNhbm5vdCBwb3NzaWJseSBiZW5lZml0Citmcm9tIHRoaXMga2luZCBvZiBjb21wYXRpYmlsaXR5LgorCitUaGlzIGlzIHdoeSBHTlUgQ0MgZG9lcyBhbmQgd2lsbCB0cmVhdCBwbGFpbiBiaXRmaWVsZHMgaW4gdGhlIHNhbWUKK2Zhc2hpb24gb24gYWxsIHR5cGVzIG9mIG1hY2hpbmVzIChieSBkZWZhdWx0KS4KKworVGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIGZvciBtYWtpbmcgYml0ZmllbGRzIHVuc2lnbmVkIGJ5IGRlZmF1bHQgb24gYWxsCittYWNoaW5lcy4gIElmLCBmb3IgZXhhbXBsZSwgdGhpcyBiZWNvbWVzIGEgdW5pdmVyc2FsIGRlIGZhY3RvIHN0YW5kYXJkLAoraXQgd291bGQgbWFrZSBzZW5zZSBmb3IgR05VIENDIHRvIGdvIGFsb25nIHdpdGggaXQuICBUaGlzIGlzIHNvbWV0aGluZwordG8gYmUgY29uc2lkZXJlZCBpbiB0aGUgZnV0dXJlLgorCisoT2YgY291cnNlLCB1c2VycyBzdHJvbmdseSBjb25jZXJuZWQgYWJvdXQgcG9ydGFiaWxpdHkgc2hvdWxkIGluZGljYXRlCitleHBsaWNpdGx5IGluIGVhY2ggYml0ZmllbGQgd2hldGhlciBpdCBpcyBzaWduZWQgb3Igbm90LiAgSW4gdGhpcyB3YXksCit0aGV5IHdyaXRlIHByb2dyYW1zIHdoaWNoIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBpbiBib3RoIEMgZGlhbGVjdHMuKQorCitAaXRlbQorVW5kZWZpbmluZyBAY29kZXtfX1NURENfX30gd2hlbiBAc2FtcHstYW5zaX0gaXMgbm90IHVzZWQuCisKK0N1cnJlbnRseSwgR05VIENDIGRlZmluZXMgQGNvZGV7X19TVERDX199IGFzIGxvbmcgYXMgeW91IGRvbid0IHVzZQorQHNhbXB7LXRyYWRpdGlvbmFsfS4gIFRoaXMgcHJvdmlkZXMgZ29vZCByZXN1bHRzIGluIHByYWN0aWNlLgorCitQcm9ncmFtbWVycyBub3JtYWxseSB1c2UgY29uZGl0aW9uYWxzIG9uIEBjb2Rle19fU1REQ19ffSB0byBhc2sgd2hldGhlcgoraXQgaXMgc2FmZSB0byB1c2UgY2VydGFpbiBmZWF0dXJlcyBvZiBBTlNJIEMsIHN1Y2ggYXMgZnVuY3Rpb24KK3Byb3RvdHlwZXMgb3IgQU5TSSB0b2tlbiBjb25jYXRlbmF0aW9uLiAgU2luY2UgcGxhaW4gQHNhbXB7Z2NjfSBzdXBwb3J0cworYWxsIHRoZSBmZWF0dXJlcyBvZiBBTlNJIEMsIHRoZSBjb3JyZWN0IGFuc3dlciB0byB0aGVzZSBxdWVzdGlvbnMgaXMKK2BgeWVzJycuCisKK1NvbWUgdXNlcnMgdHJ5IHRvIHVzZSBAY29kZXtfX1NURENfX30gdG8gY2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YKK2NlcnRhaW4gbGlicmFyeSBmYWNpbGl0aWVzLiAgVGhpcyBpcyBhY3R1YWxseSBpbmNvcnJlY3QgdXNhZ2UgaW4gYW4gQU5TSQorQyBwcm9ncmFtLCBiZWNhdXNlIHRoZSBBTlNJIEMgc3RhbmRhcmQgc2F5cyB0aGF0IGEgY29uZm9ybWluZworZnJlZXN0YW5kaW5nIGltcGxlbWVudGF0aW9uIHNob3VsZCBkZWZpbmUgQGNvZGV7X19TVERDX199IGV2ZW4gdGhvdWdoIGl0Citkb2VzIG5vdCBoYXZlIHRoZSBsaWJyYXJ5IGZhY2lsaXRpZXMuICBAc2FtcHtnY2MgLWFuc2kgLXBlZGFudGljfSBpcyBhCitjb25mb3JtaW5nIGZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0IGlzIHRoZXJlZm9yZSByZXF1aXJlZCB0bworZGVmaW5lIEBjb2Rle19fU1REQ19ffSwgZXZlbiB0aG91Z2ggaXQgZG9lcyBub3QgY29tZSB3aXRoIGFuIEFOU0kgQworbGlicmFyeS4KKworU29tZXRpbWVzIHBlb3BsZSBzYXkgdGhhdCBkZWZpbmluZyBAY29kZXtfX1NURENfX30gaW4gYSBjb21waWxlciB0aGF0Citkb2VzIG5vdCBjb21wbGV0ZWx5IGNvbmZvcm0gdG8gdGhlIEFOU0kgQyBzdGFuZGFyZCBzb21laG93IHZpb2xhdGVzIHRoZQorc3RhbmRhcmQuICBUaGlzIGlzIGlsbG9naWNhbC4gIFRoZSBzdGFuZGFyZCBpcyBhIHN0YW5kYXJkIGZvciBjb21waWxlcnMKK3RoYXQgY2xhaW0gdG8gc3VwcG9ydCBBTlNJIEMsIHN1Y2ggYXMgQHNhbXB7Z2NjIC1hbnNpfS0tLW5vdCBmb3Igb3RoZXIKK2NvbXBpbGVycyBzdWNoIGFzIHBsYWluIEBzYW1we2djY30uICBXaGF0ZXZlciB0aGUgQU5TSSBDIHN0YW5kYXJkIHNheXMKK2lzIHJlbGV2YW50IHRvIHRoZSBkZXNpZ24gb2YgcGxhaW4gQHNhbXB7Z2NjfSB3aXRob3V0IEBzYW1wey1hbnNpfSBvbmx5Citmb3IgcHJhZ21hdGljIHJlYXNvbnMsIG5vdCBhcyBhIHJlcXVpcmVtZW50LgorCitAaXRlbQorVW5kZWZpbmluZyBAY29kZXtfX1NURENfX30gaW4gQysrLgorCitQcm9ncmFtcyB3cml0dGVuIHRvIGNvbXBpbGUgd2l0aCBDKystdG8tQyB0cmFuc2xhdG9ycyBnZXQgdGhlCit2YWx1ZSBvZiBAY29kZXtfX1NURENfX30gdGhhdCBnb2VzIHdpdGggdGhlIEMgY29tcGlsZXIgdGhhdCBpcworc3Vic2VxdWVudGx5IHVzZWQuICBUaGVzZSBwcm9ncmFtcyBtdXN0IHRlc3QgQGNvZGV7X19TVERDX199Cit0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIEMgcHJlcHJvY2Vzc29yIHRoYXQgY29tcGlsZXIgdXNlczoKK3doZXRoZXIgdGhleSBzaG91bGQgY29uY2F0ZW5hdGUgdG9rZW5zIGluIHRoZSBBTlNJIEMgZmFzaGlvbgorb3IgaW4gdGhlIHRyYWRpdGlvbmFsIGZhc2hpb24uCisKK1RoZXNlIHByb2dyYW1zIHdvcmsgcHJvcGVybHkgd2l0aCBHTlUgQysrIGlmIEBjb2Rle19fU1REQ19ffSBpcyBkZWZpbmVkLgorVGhleSB3b3VsZCBub3Qgd29yayBvdGhlcndpc2UuCisKK0luIGFkZGl0aW9uLCBtYW55IGhlYWRlciBmaWxlcyBhcmUgd3JpdHRlbiB0byBwcm92aWRlIHByb3RvdHlwZXMgaW4gQU5TSQorQyBidXQgbm90IGluIHRyYWRpdGlvbmFsIEMuICBNYW55IG9mIHRoZXNlIGhlYWRlciBmaWxlcyBjYW4gd29yayB3aXRob3V0CitjaGFuZ2UgaW4gQysrIHByb3ZpZGVkIEBjb2Rle19fU1REQ19ffSBpcyBkZWZpbmVkLiAgSWYgQGNvZGV7X19TVERDX199CitpcyBub3QgZGVmaW5lZCwgdGhleSB3aWxsIGFsbCBmYWlsLCBhbmQgd2lsbCBhbGwgbmVlZCB0byBiZSBjaGFuZ2VkIHRvCit0ZXN0IGV4cGxpY2l0bHkgZm9yIEMrKyBhcyB3ZWxsLgorCitAaXRlbQorRGVsZXRpbmcgYGBlbXB0eScnIGxvb3BzLgorCitHTlUgQ0MgZG9lcyBub3QgZGVsZXRlIGBgZW1wdHknJyBsb29wcyBiZWNhdXNlIHRoZSBtb3N0IGxpa2VseSByZWFzb24KK3lvdSB3b3VsZCBwdXQgb25lIGluIGEgcHJvZ3JhbSBpcyB0byBoYXZlIGEgZGVsYXkuICBEZWxldGluZyB0aGVtIHdpbGwKK25vdCBtYWtlIHJlYWwgcHJvZ3JhbXMgcnVuIGFueSBmYXN0ZXIsIHNvIGl0IHdvdWxkIGJlIHBvaW50bGVzcy4KKworSXQgd291bGQgYmUgZGlmZmVyZW50IGlmIG9wdGltaXphdGlvbiBvZiBhIG5vbmVtcHR5IGxvb3AgY291bGQgcHJvZHVjZQorYW4gZW1wdHkgb25lLiAgQnV0IHRoaXMgZ2VuZXJhbGx5IGNhbid0IGhhcHBlbi4KKworQGl0ZW0KK01ha2luZyBzaWRlIGVmZmVjdHMgaGFwcGVuIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluIHNvbWUgb3RoZXIgY29tcGlsZXIuCisKK0BjaW5kZXggc2lkZSBlZmZlY3RzLCBvcmRlciBvZiBldmFsdWF0aW9uCitAY2luZGV4IG9yZGVyIG9mIGV2YWx1YXRpb24sIHNpZGUgZWZmZWN0cworSXQgaXMgbmV2ZXIgc2FmZSB0byBkZXBlbmQgb24gdGhlIG9yZGVyIG9mIGV2YWx1YXRpb24gb2Ygc2lkZSBlZmZlY3RzLgorRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gY2FsbCBsaWtlIHRoaXMgbWF5IHZlcnkgd2VsbCBiZWhhdmUgZGlmZmVyZW50bHkKK2Zyb20gb25lIGNvbXBpbGVyIHRvIGFub3RoZXI6CisKK0BleGFtcGxlCit2b2lkIGZ1bmMgKGludCwgaW50KTsKKworaW50IGkgPSAyOworZnVuYyAoaSsrLCBpKyspOworQGVuZCBleGFtcGxlCisKK1RoZXJlIGlzIG5vIGd1YXJhbnRlZSAoaW4gZWl0aGVyIHRoZSBDIG9yIHRoZSBDKysgc3RhbmRhcmQgbGFuZ3VhZ2UKK2RlZmluaXRpb25zKSB0aGF0IHRoZSBpbmNyZW1lbnRzIHdpbGwgYmUgZXZhbHVhdGVkIGluIGFueSBwYXJ0aWN1bGFyCitvcmRlci4gIEVpdGhlciBpbmNyZW1lbnQgbWlnaHQgaGFwcGVuIGZpcnN0LiAgQGNvZGV7ZnVuY30gbWlnaHQgZ2V0IHRoZQorYXJndW1lbnRzIEBzYW1wezIsIDN9LCBvciBpdCBtaWdodCBnZXQgQHNhbXB7MywgMn0sIG9yIGV2ZW4gQHNhbXB7MiwgMn0uCisKK0BpdGVtCitOb3QgYWxsb3dpbmcgc3RydWN0dXJlcyB3aXRoIHZvbGF0aWxlIGZpZWxkcyBpbiByZWdpc3RlcnMuCisKK1N0cmljdGx5IHNwZWFraW5nLCB0aGVyZSBpcyBubyBwcm9oaWJpdGlvbiBpbiB0aGUgQU5TSSBDIHN0YW5kYXJkCithZ2FpbnN0IGFsbG93aW5nIHN0cnVjdHVyZXMgd2l0aCB2b2xhdGlsZSBmaWVsZHMgaW4gcmVnaXN0ZXJzLCBidXQKK2l0IGRvZXMgbm90IHNlZW0gdG8gbWFrZSBhbnkgc2Vuc2UgYW5kIGlzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSB3YW50ZWQKK3RvIGRvLiAgU28gdGhlIGNvbXBpbGVyIHdpbGwgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGluIHRoaXMgY2FzZS4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBXYXJuaW5ncyBhbmQgRXJyb3JzCitAc2VjdGlvbiBXYXJuaW5nIE1lc3NhZ2VzIGFuZCBFcnJvciBNZXNzYWdlcworCitAY2luZGV4IGVycm9yIG1lc3NhZ2VzCitAY2luZGV4IHdhcm5pbmdzIHZzIGVycm9ycworQGNpbmRleCBtZXNzYWdlcywgd2FybmluZyBhbmQgZXJyb3IKK1RoZSBHTlUgY29tcGlsZXIgY2FuIHByb2R1Y2UgdHdvIGtpbmRzIG9mIGRpYWdub3N0aWNzOiBlcnJvcnMgYW5kCit3YXJuaW5ncy4gIEVhY2gga2luZCBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZToKKworQGl0ZW1pemUgQHd7fQorQGl0ZW0KK0BlbXBoe0Vycm9yc30gcmVwb3J0IHByb2JsZW1zIHRoYXQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGNvbXBpbGUgeW91cgorcHJvZ3JhbS4gIEdOVSBDQyByZXBvcnRzIGVycm9ycyB3aXRoIHRoZSBzb3VyY2UgZmlsZSBuYW1lIGFuZCBsaW5lCitudW1iZXIgd2hlcmUgdGhlIHByb2JsZW0gaXMgYXBwYXJlbnQuCisKK0BpdGVtCitAZW1waHtXYXJuaW5nc30gcmVwb3J0IG90aGVyIHVudXN1YWwgY29uZGl0aW9ucyBpbiB5b3VyIGNvZGUgdGhhdAorQGVtcGh7bWF5fSBpbmRpY2F0ZSBhIHByb2JsZW0sIGFsdGhvdWdoIGNvbXBpbGF0aW9uIGNhbiAoYW5kIGRvZXMpCitwcm9jZWVkLiAgV2FybmluZyBtZXNzYWdlcyBhbHNvIHJlcG9ydCB0aGUgc291cmNlIGZpbGUgbmFtZSBhbmQgbGluZQorbnVtYmVyLCBidXQgaW5jbHVkZSB0aGUgdGV4dCBAc2FtcHt3YXJuaW5nOn0gdG8gZGlzdGluZ3Vpc2ggdGhlbQorZnJvbSBlcnJvciBtZXNzYWdlcy4KK0BlbmQgaXRlbWl6ZQorCitXYXJuaW5ncyBtYXkgaW5kaWNhdGUgZGFuZ2VyIHBvaW50cyB3aGVyZSB5b3Ugc2hvdWxkIGNoZWNrIHRvIG1ha2Ugc3VyZQordGhhdCB5b3VyIHByb2dyYW0gcmVhbGx5IGRvZXMgd2hhdCB5b3UgaW50ZW5kOyBvciB0aGUgdXNlIG9mIG9ic29sZXRlCitmZWF0dXJlczsgb3IgdGhlIHVzZSBvZiBub25zdGFuZGFyZCBmZWF0dXJlcyBvZiBHTlUgQyBvciBDKysuICBNYW55Cit3YXJuaW5ncyBhcmUgaXNzdWVkIG9ubHkgaWYgeW91IGFzayBmb3IgdGhlbSwgd2l0aCBvbmUgb2YgdGhlIEBzYW1wey1XfQorb3B0aW9ucyAoZm9yIGluc3RhbmNlLCBAc2FtcHstV2FsbH0gcmVxdWVzdHMgYSB2YXJpZXR5IG9mIHVzZWZ1bAord2FybmluZ3MpLgorCitHTlUgQ0MgYWx3YXlzIHRyaWVzIHRvIGNvbXBpbGUgeW91ciBwcm9ncmFtIGlmIHBvc3NpYmxlOyBpdCBuZXZlcgorZ3JhdHVpdG91c2x5IHJlamVjdHMgYSBwcm9ncmFtIHdob3NlIG1lYW5pbmcgaXMgY2xlYXIgbWVyZWx5IGJlY2F1c2UKKyhmb3IgaW5zdGFuY2UpIGl0IGZhaWxzIHRvIGNvbmZvcm0gdG8gYSBzdGFuZGFyZC4gIEluIHNvbWUgY2FzZXMsCitob3dldmVyLCB0aGUgQyBhbmQgQysrIHN0YW5kYXJkcyBzcGVjaWZ5IHRoYXQgY2VydGFpbiBleHRlbnNpb25zIGFyZQorZm9yYmlkZGVuLCBhbmQgYSBkaWFnbm9zdGljIEBlbXBoe211c3R9IGJlIGlzc3VlZCBieSBhIGNvbmZvcm1pbmcKK2NvbXBpbGVyLiAgVGhlIEBzYW1wey1wZWRhbnRpY30gb3B0aW9uIHRlbGxzIEdOVSBDQyB0byBpc3N1ZSB3YXJuaW5ncyBpbgorc3VjaCBjYXNlczsgQHNhbXB7LXBlZGFudGljLWVycm9yc30gc2F5cyB0byBtYWtlIHRoZW0gZXJyb3JzIGluc3RlYWQuCitUaGlzIGRvZXMgbm90IG1lYW4gdGhhdCBAZW1waHthbGx9IG5vbi1BTlNJIGNvbnN0cnVjdHMgZ2V0IHdhcm5pbmdzCitvciBlcnJvcnMuCisKK0B4cmVme1dhcm5pbmcgT3B0aW9ucywsT3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIFdhcm5pbmdzfSwgZm9yCittb3JlIGRldGFpbCBvbiB0aGVzZSBhbmQgcmVsYXRlZCBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworQG5vZGUgQnVncworQGNoYXB0ZXIgUmVwb3J0aW5nIEJ1Z3MKK0BjaW5kZXggYnVncworQGNpbmRleCByZXBvcnRpbmcgYnVncworCitZb3VyIGJ1ZyByZXBvcnRzIHBsYXkgYW4gZXNzZW50aWFsIHJvbGUgaW4gbWFraW5nIEdOVSBDQyByZWxpYWJsZS4KKworV2hlbiB5b3UgZW5jb3VudGVyIGEgcHJvYmxlbSwgdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIHNlZSBpZiBpdCBpcworYWxyZWFkeSBrbm93bi4gIEB4cmVme1Ryb3VibGV9LiAgSWYgaXQgaXNuJ3Qga25vd24sIHRoZW4geW91IHNob3VsZAorcmVwb3J0IHRoZSBwcm9ibGVtLgorCitSZXBvcnRpbmcgYSBidWcgbWF5IGhlbHAgeW91IGJ5IGJyaW5naW5nIGEgc29sdXRpb24gdG8geW91ciBwcm9ibGVtLCBvcgoraXQgbWF5IG5vdC4gIChJZiBpdCBkb2VzIG5vdCwgbG9vayBpbiB0aGUgc2VydmljZSBkaXJlY3Rvcnk7IHNlZQorQHJlZntTZXJ2aWNlfS4pICBJbiBhbnkgY2FzZSwgdGhlIHByaW5jaXBhbCBmdW5jdGlvbiBvZiBhIGJ1ZyByZXBvcnQgaXMKK3RvIGhlbHAgdGhlIGVudGlyZSBjb21tdW5pdHkgYnkgbWFraW5nIHRoZSBuZXh0IHZlcnNpb24gb2YgR05VIENDIHdvcmsKK2JldHRlci4gIEJ1ZyByZXBvcnRzIGFyZSB5b3VyIGNvbnRyaWJ1dGlvbiB0byB0aGUgbWFpbnRlbmFuY2Ugb2YgR05VIENDLgorCitTaW5jZSB0aGUgbWFpbnRhaW5lcnMgYXJlIHZlcnkgb3ZlcmxvYWRlZCwgd2UgY2Fubm90IHJlc3BvbmQgdG8gZXZlcnkKK2J1ZyByZXBvcnQuICBIb3dldmVyLCBpZiB0aGUgYnVnIGhhcyBub3QgYmVlbiBmaXhlZCwgd2UgYXJlIGxpa2VseSB0bworc2VuZCB5b3UgYSBwYXRjaCBhbmQgYXNrIHlvdSB0byB0ZWxsIHVzIHdoZXRoZXIgaXQgd29ya3MuCisKK0luIG9yZGVyIGZvciBhIGJ1ZyByZXBvcnQgdG8gc2VydmUgaXRzIHB1cnBvc2UsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitpbmZvcm1hdGlvbiB0aGF0IG1ha2VzIGZvciBmaXhpbmcgdGhlIGJ1Zy4KKworQG1lbnUKKyogQ3JpdGVyaWE6ICBCdWcgQ3JpdGVyaWEuICAgSGF2ZSB5b3UgcmVhbGx5IGZvdW5kIGEgYnVnPworKiBXaGVyZTogQnVnIExpc3RzLgkgICAgIFdoZXJlIHRvIHNlbmQgeW91ciBidWcgcmVwb3J0LgorKiBSZXBvcnRpbmc6IEJ1ZyBSZXBvcnRpbmcuICBIb3cgdG8gcmVwb3J0IGEgYnVnIGVmZmVjdGl2ZWx5LgorKiBQYXRjaGVzOiBTZW5kaW5nIFBhdGNoZXMuICBIb3cgdG8gc2VuZCBhIHBhdGNoIGZvciBHTlUgQ0MuCisqIEtub3duOiBUcm91YmxlLiAgICAgICAgICAgIEtub3duIHByb2JsZW1zLgorKiBIZWxwOiBTZXJ2aWNlLiAgICAgICAgICAgICBXaGVyZSB0byBhc2sgZm9yIGhlbHAuCitAZW5kIG1lbnUKKworQG5vZGUgQnVnIENyaXRlcmlhCitAc2VjdGlvbiBIYXZlIFlvdSBGb3VuZCBhIEJ1Zz8KK0BjaW5kZXggYnVnIGNyaXRlcmlhCisKK0lmIHlvdSBhcmUgbm90IHN1cmUgd2hldGhlciB5b3UgaGF2ZSBmb3VuZCBhIGJ1ZywgaGVyZSBhcmUgc29tZSBndWlkZWxpbmVzOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAY2luZGV4IGZhdGFsIHNpZ25hbAorQGNpbmRleCBjb3JlIGR1bXAKK0BpdGVtCitJZiB0aGUgY29tcGlsZXIgZ2V0cyBhIGZhdGFsIHNpZ25hbCwgZm9yIGFueSBpbnB1dCB3aGF0ZXZlciwgdGhhdCBpcyBhCitjb21waWxlciBidWcuICBSZWxpYWJsZSBjb21waWxlcnMgbmV2ZXIgY3Jhc2guCisKK0BjaW5kZXggaW52YWxpZCBhc3NlbWJseSBjb2RlCitAY2luZGV4IGFzc2VtYmx5IGNvZGUsIGludmFsaWQKK0BpdGVtCitJZiB0aGUgY29tcGlsZXIgcHJvZHVjZXMgaW52YWxpZCBhc3NlbWJseSBjb2RlLCBmb3IgYW55IGlucHV0IHdoYXRldmVyCisoZXhjZXB0IGFuIEBjb2Rle2FzbX0gc3RhdGVtZW50KSwgdGhhdCBpcyBhIGNvbXBpbGVyIGJ1ZywgdW5sZXNzIHRoZQorY29tcGlsZXIgcmVwb3J0cyBlcnJvcnMgKG5vdCBqdXN0IHdhcm5pbmdzKSB3aGljaCB3b3VsZCBvcmRpbmFyaWx5CitwcmV2ZW50IHRoZSBhc3NlbWJsZXIgZnJvbSBiZWluZyBydW4uCisKK0BjaW5kZXggdW5kZWZpbmVkIGJlaGF2aW9yCitAY2luZGV4IHVuZGVmaW5lZCBmdW5jdGlvbiB2YWx1ZQorQGNpbmRleCBpbmNyZW1lbnQgb3BlcmF0b3JzCitAaXRlbQorSWYgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIHZhbGlkIGFzc2VtYmx5IGNvZGUgdGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkKK2V4ZWN1dGUgdGhlIGlucHV0IHNvdXJjZSBjb2RlLCB0aGF0IGlzIGEgY29tcGlsZXIgYnVnLgorCitIb3dldmVyLCB5b3UgbXVzdCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlLCBiZWNhdXNlIHlvdSBtYXkgaGF2ZSBydW4KK2ludG8gYW4gaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gR05VIEMgYW5kIHRyYWRpdGlvbmFsIEMKKyhAcHhyZWZ7SW5jb21wYXRpYmlsaXRpZXN9KS4gIFRoZXNlIGluY29tcGF0aWJpbGl0aWVzIG1pZ2h0IGJlIGNvbnNpZGVyZWQKK2J1Z3MsIGJ1dCB0aGV5IGFyZSBpbmVzY2FwYWJsZSBjb25zZXF1ZW5jZXMgb2YgdmFsdWFibGUgZmVhdHVyZXMuCisKK09yIHlvdSBtYXkgaGF2ZSBhIHByb2dyYW0gd2hvc2UgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLCB3aGljaCBoYXBwZW5lZAorYnkgY2hhbmNlIHRvIGdpdmUgdGhlIGRlc2lyZWQgcmVzdWx0cyB3aXRoIGFub3RoZXIgQyBvciBDKysgY29tcGlsZXIuCisKK0ZvciBleGFtcGxlLCBpbiBtYW55IG5vbm9wdGltaXppbmcgY29tcGlsZXJzLCB5b3UgY2FuIHdyaXRlIEBzYW1we3g7fQorYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgQHNhbXB7cmV0dXJuIHg7fSwgd2l0aCB0aGUgc2FtZQorcmVzdWx0cy4gIEJ1dCB0aGUgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGlzIHVuZGVmaW5lZCBpZiBAY29kZXtyZXR1cm59CitpcyBvbWl0dGVkOyBpdCBpcyBub3QgYSBidWcgd2hlbiBHTlUgQ0MgcHJvZHVjZXMgZGlmZmVyZW50IHJlc3VsdHMuCisKK1Byb2JsZW1zIG9mdGVuIHJlc3VsdCBmcm9tIGV4cHJlc3Npb25zIHdpdGggdHdvIGluY3JlbWVudCBvcGVyYXRvcnMsCithcyBpbiBAY29kZXtmICgqcCsrLCAqcCsrKX0uICBZb3VyIHByZXZpb3VzIGNvbXBpbGVyIG1pZ2h0IGhhdmUKK2ludGVycHJldGVkIHRoYXQgZXhwcmVzc2lvbiB0aGUgd2F5IHlvdSBpbnRlbmRlZDsgR05VIENDIG1pZ2h0CitpbnRlcnByZXQgaXQgYW5vdGhlciB3YXkuICBOZWl0aGVyIGNvbXBpbGVyIGlzIHdyb25nLiAgVGhlIGJ1ZyBpcworaW4geW91ciBjb2RlLgorCitBZnRlciB5b3UgaGF2ZSBsb2NhbGl6ZWQgdGhlIGVycm9yIHRvIGEgc2luZ2xlIHNvdXJjZSBsaW5lLCBpdCBzaG91bGQKK2JlIGVhc3kgdG8gY2hlY2sgZm9yIHRoZXNlIHRoaW5ncy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBjb3JyZWN0IGFuZAord2VsbCBkZWZpbmVkLCB5b3UgaGF2ZSBmb3VuZCBhIGNvbXBpbGVyIGJ1Zy4KKworQGl0ZW0KK0lmIHRoZSBjb21waWxlciBwcm9kdWNlcyBhbiBlcnJvciBtZXNzYWdlIGZvciB2YWxpZCBpbnB1dCwgdGhhdCBpcyBhCitjb21waWxlciBidWcuCisKK0BjaW5kZXggaW52YWxpZCBpbnB1dAorQGl0ZW0KK0lmIHRoZSBjb21waWxlciBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGludmFsaWQgaW5wdXQsCit0aGF0IGlzIGEgY29tcGlsZXIgYnVnLiAgSG93ZXZlciwgeW91IHNob3VsZCBub3RlIHRoYXQgeW91ciBpZGVhIG9mCitgYGludmFsaWQgaW5wdXQnJyBtaWdodCBiZSBteSBpZGVhIG9mIGBgYW4gZXh0ZW5zaW9uJycgb3IgYGBzdXBwb3J0Citmb3IgdHJhZGl0aW9uYWwgcHJhY3RpY2UnJy4KKworQGl0ZW0KK0lmIHlvdSBhcmUgYW4gZXhwZXJpZW5jZWQgdXNlciBvZiBDIG9yIEMrKyBjb21waWxlcnMsIHlvdXIgc3VnZ2VzdGlvbnMKK2ZvciBpbXByb3ZlbWVudCBvZiBHTlUgQ0Mgb3IgR05VIEMrKyBhcmUgd2VsY29tZSBpbiBhbnkgY2FzZS4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBCdWcgTGlzdHMKK0BzZWN0aW9uIFdoZXJlIHRvIFJlcG9ydCBCdWdzCitAY2luZGV4IGJ1ZyByZXBvcnQgbWFpbGluZyBsaXN0cworQGtpbmRleCBidWctZ2NjQEBwcmVwLmFpLm1pdC5lZHUKK1NlbmQgYnVnIHJlcG9ydHMgZm9yIEdOVSBDIHRvIEBzYW1we2J1Zy1nY2NAQHByZXAuYWkubWl0LmVkdX0uCisKK0BraW5kZXggYnVnLWcrK0BAcHJlcC5haS5taXQuZWR1CitAa2luZGV4IGJ1Zy1saWJnKytAQHByZXAuYWkubWl0LmVkdQorU2VuZCBidWcgcmVwb3J0cyBmb3IgR05VIEMrKyB0byBAc2FtcHtidWctZysrQEBwcmVwLmFpLm1pdC5lZHV9LiAgSWYKK3lvdXIgYnVnIGludm9sdmVzIHRoZSBDKysgY2xhc3MgbGlicmFyeSBsaWJnKyssIHNlbmQgbWFpbCBpbnN0ZWFkIHRvIHRoZQorYWRkcmVzcyBAc2FtcHtidWctbGliLWcrK0BAcHJlcC5haS5taXQuZWR1fS4gIElmIHlvdSdyZSBub3Qgc3VyZSwgeW91CitjYW4gc2VuZCB0aGUgYnVnIHJlcG9ydCB0byBib3RoIGxpc3RzLgorCitAc3Ryb25ne0RvIG5vdCBzZW5kIGJ1ZyByZXBvcnRzIHRvIEBzYW1we2hlbHAtZ2NjQEBwcmVwLmFpLm1pdC5lZHV9IG9yCit0byB0aGUgbmV3c2dyb3VwIEBzYW1we2dudS5nY2MuaGVscH0ufSBNb3N0IHVzZXJzIG9mIEdOVSBDQyBkbyBub3Qgd2FudAordG8gcmVjZWl2ZSBidWcgcmVwb3J0cy4gIFRob3NlIHRoYXQgZG8sIGhhdmUgYXNrZWQgdG8gYmUgb24KK0BzYW1we2J1Zy1nY2N9IGFuZC9vciBAc2FtcHtidWctZysrfS4KKworVGhlIG1haWxpbmcgbGlzdHMgQHNhbXB7YnVnLWdjY30gYW5kIEBzYW1we2J1Zy1nKyt9IGJvdGggaGF2ZSBuZXdzZ3JvdXBzCit3aGljaCBzZXJ2ZSBhcyByZXBlYXRlcnM6IEBzYW1we2dudS5nY2MuYnVnfSBhbmQgQHNhbXB7Z251LmcrKy5idWd9LgorRWFjaCBtYWlsaW5nIGxpc3QgYW5kIGl0cyBuZXdzZ3JvdXAgY2FycnkgZXhhY3RseSB0aGUgc2FtZSBtZXNzYWdlcy4KKworT2Z0ZW4gcGVvcGxlIHRoaW5rIG9mIHBvc3RpbmcgYnVnIHJlcG9ydHMgdG8gdGhlIG5ld3Nncm91cCBpbnN0ZWFkIG9mCittYWlsaW5nIHRoZW0uICBUaGlzIGFwcGVhcnMgdG8gd29yaywgYnV0IGl0IGhhcyBvbmUgcHJvYmxlbSB3aGljaCBjYW4gYmUKK2NydWNpYWw6IGEgbmV3c2dyb3VwIHBvc3RpbmcgZG9lcyBub3QgY29udGFpbiBhIG1haWwgcGF0aCBiYWNrIHRvIHRoZQorc2VuZGVyLiAgVGh1cywgaWYgbWFpbnRhaW5lcnMgbmVlZCBtb3JlIGluZm9ybWF0aW9uLCB0aGV5IG1heSBiZSB1bmFibGUKK3RvIHJlYWNoIHlvdS4gIEZvciB0aGlzIHJlYXNvbiwgeW91IHNob3VsZCBhbHdheXMgc2VuZCBidWcgcmVwb3J0cyBieQorbWFpbCB0byB0aGUgcHJvcGVyIG1haWxpbmcgbGlzdC4KKworQXMgYSBsYXN0IHJlc29ydCwgc2VuZCBidWcgcmVwb3J0cyBvbiBwYXBlciB0bzoKKworQGV4YW1wbGUKK0dOVSBDb21waWxlciBCdWdzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKzU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBCdWcgUmVwb3J0aW5nCitAc2VjdGlvbiBIb3cgdG8gUmVwb3J0IEJ1Z3MKK0BjaW5kZXggY29tcGlsZXIgYnVncywgcmVwb3J0aW5nCisKK1RoZSBmdW5kYW1lbnRhbCBwcmluY2lwbGUgb2YgcmVwb3J0aW5nIGJ1Z3MgdXNlZnVsbHkgaXMgdGhpczoKK0BzdHJvbmd7cmVwb3J0IGFsbCB0aGUgZmFjdHN9LiAgSWYgeW91IGFyZSBub3Qgc3VyZSB3aGV0aGVyIHRvIHN0YXRlIGEKK2ZhY3Qgb3IgbGVhdmUgaXQgb3V0LCBzdGF0ZSBpdCEKKworT2Z0ZW4gcGVvcGxlIG9taXQgZmFjdHMgYmVjYXVzZSB0aGV5IHRoaW5rIHRoZXkga25vdyB3aGF0IGNhdXNlcyB0aGUKK3Byb2JsZW0gYW5kIHRoZXkgY29uY2x1ZGUgdGhhdCBzb21lIGRldGFpbHMgZG9uJ3QgbWF0dGVyLiAgVGh1cywgeW91IG1pZ2h0Cithc3N1bWUgdGhhdCB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgeW91IHVzZSBpbiBhbiBleGFtcGxlIGRvZXMgbm90IG1hdHRlci4KK1dlbGwsIHByb2JhYmx5IGl0IGRvZXNuJ3QsIGJ1dCBvbmUgY2Fubm90IGJlIHN1cmUuICBQZXJoYXBzIHRoZSBidWcgaXMgYQorc3RyYXkgbWVtb3J5IHJlZmVyZW5jZSB3aGljaCBoYXBwZW5zIHRvIGZldGNoIGZyb20gdGhlIGxvY2F0aW9uIHdoZXJlIHRoYXQKK25hbWUgaXMgc3RvcmVkIGluIG1lbW9yeTsgcGVyaGFwcywgaWYgdGhlIG5hbWUgd2VyZSBkaWZmZXJlbnQsIHRoZSBjb250ZW50cworb2YgdGhhdCBsb2NhdGlvbiB3b3VsZCBmb29sIHRoZSBjb21waWxlciBpbnRvIGRvaW5nIHRoZSByaWdodCB0aGluZyBkZXNwaXRlCit0aGUgYnVnLiAgUGxheSBpdCBzYWZlIGFuZCBnaXZlIGEgc3BlY2lmaWMsIGNvbXBsZXRlIGV4YW1wbGUuICBUaGF0IGlzIHRoZQorZWFzaWVzdCB0aGluZyBmb3IgeW91IHRvIGRvLCBhbmQgdGhlIG1vc3QgaGVscGZ1bC4KKworS2VlcCBpbiBtaW5kIHRoYXQgdGhlIHB1cnBvc2Ugb2YgYSBidWcgcmVwb3J0IGlzIHRvIGVuYWJsZSBzb21lb25lIHRvCitmaXggdGhlIGJ1ZyBpZiBpdCBpcyBub3Qga25vd24uICBJdCBpc24ndCB2ZXJ5IGltcG9ydGFudCB3aGF0IGhhcHBlbnMgaWYKK3RoZSBidWcgaXMgYWxyZWFkeSBrbm93bi4gIFRoZXJlZm9yZSwgYWx3YXlzIHdyaXRlIHlvdXIgYnVnIHJlcG9ydHMgb24KK3RoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGJ1ZyBpcyBub3Qga25vd24uCisKK1NvbWV0aW1lcyBwZW9wbGUgZ2l2ZSBhIGZldyBza2V0Y2h5IGZhY3RzIGFuZCBhc2ssIGBgRG9lcyB0aGlzIHJpbmcgYQorYmVsbD8nJyAgVGhpcyBjYW5ub3QgaGVscCB1cyBmaXggYSBidWcsIHNvIGl0IGlzIGJhc2ljYWxseSB1c2VsZXNzLiAgV2UKK3Jlc3BvbmQgYnkgYXNraW5nIGZvciBlbm91Z2ggZGV0YWlscyB0byBlbmFibGUgdXMgdG8gaW52ZXN0aWdhdGUuCitZb3UgbWlnaHQgYXMgd2VsbCBleHBlZGl0ZSBtYXR0ZXJzIGJ5IHNlbmRpbmcgdGhlbSB0byBiZWdpbiB3aXRoLgorCitUcnkgdG8gbWFrZSB5b3VyIGJ1ZyByZXBvcnQgc2VsZi1jb250YWluZWQuICBJZiB3ZSBoYXZlIHRvIGFzayB5b3UgZm9yCittb3JlIGluZm9ybWF0aW9uLCBpdCBpcyBiZXN0IGlmIHlvdSBpbmNsdWRlIGFsbCB0aGUgcHJldmlvdXMgaW5mb3JtYXRpb24KK2luIHlvdXIgcmVzcG9uc2UsIGFzIHdlbGwgYXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgd2FzIG1pc3NpbmcuCisKK1BsZWFzZSByZXBvcnQgZWFjaCBidWcgaW4gYSBzZXBhcmF0ZSBtZXNzYWdlLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yCit1cyB0byB0cmFjayB3aGljaCBidWdzIGhhdmUgYmVlbiBmaXhlZCBhbmQgdG8gZm9yd2FyZCB5b3VyIGJ1Z3MgcmVwb3J0cwordG8gdGhlIGFwcHJvcHJpYXRlIG1haW50YWluZXIuCisKK0RvIG5vdCBjb21wcmVzcyBhbmQgZW5jb2RlIGFueSBwYXJ0IG9mIHlvdXIgYnVnIHJlcG9ydCB1c2luZyBwcm9ncmFtcworc3VjaCBhcyBAZmlsZXt1dWVuY29kZX0uICBJZiB5b3UgZG8gc28gaXQgd2lsbCBzbG93IGRvd24gdGhlIHByb2Nlc3NpbmcKK29mIHlvdXIgYnVnLiAgSWYgeW91IG11c3Qgc3VibWl0IG11bHRpcGxlIGxhcmdlIGZpbGVzLCB1c2UgQGZpbGV7c2hhcn0sCit3aGljaCBhbGxvd3MgdXMgdG8gcmVhZCB5b3VyIG1lc3NhZ2Ugd2l0aG91dCBoYXZpbmcgdG8gcnVuIGFueQorZGVjb21wcmVzc2lvbiBwcm9ncmFtcy4KKworVG8gZW5hYmxlIHNvbWVvbmUgdG8gaW52ZXN0aWdhdGUgdGhlIGJ1ZywgeW91IHNob3VsZCBpbmNsdWRlIGFsbCB0aGVzZQordGhpbmdzOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorVGhlIHZlcnNpb24gb2YgR05VIENDLiAgWW91IGNhbiBnZXQgdGhpcyBieSBydW5uaW5nIGl0IHdpdGggdGhlCitAc2FtcHstdn0gb3B0aW9uLgorCitXaXRob3V0IHRoaXMsIHdlIHdvbid0IGtub3cgd2hldGhlciB0aGVyZSBpcyBhbnkgcG9pbnQgaW4gbG9va2luZyBmb3IKK3RoZSBidWcgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBHTlUgQ0MuCisKK0BpdGVtCitBIGNvbXBsZXRlIGlucHV0IGZpbGUgdGhhdCB3aWxsIHJlcHJvZHVjZSB0aGUgYnVnLiAgSWYgdGhlIGJ1ZyBpcyBpbiB0aGUKK0MgcHJlcHJvY2Vzc29yLCBzZW5kIGEgc291cmNlIGZpbGUgYW5kIGFueSBoZWFkZXIgZmlsZXMgdGhhdCBpdAorcmVxdWlyZXMuICBJZiB0aGUgYnVnIGlzIGluIHRoZSBjb21waWxlciBwcm9wZXIgKEBmaWxle2NjMX0pLCBydW4geW91cgorc291cmNlIGZpbGUgdGhyb3VnaCB0aGUgQyBwcmVwcm9jZXNzb3IgYnkgZG9pbmcgQHNhbXB7Z2NjIC1FCitAdmFye3NvdXJjZWZpbGV9ID4gQHZhcntvdXRmaWxlfX0sIHRoZW4gaW5jbHVkZSB0aGUgY29udGVudHMgb2YKK0B2YXJ7b3V0ZmlsZX0gaW4gdGhlIGJ1ZyByZXBvcnQuICAoV2hlbiB5b3UgZG8gdGhpcywgdXNlIHRoZSBzYW1lCitAc2FtcHstSX0sIEBzYW1wey1EfSBvciBAc2FtcHstVX0gb3B0aW9ucyB0aGF0IHlvdSB1c2VkIGluIGFjdHVhbAorY29tcGlsYXRpb24uKQorCitBIHNpbmdsZSBzdGF0ZW1lbnQgaXMgbm90IGVub3VnaCBvZiBhbiBleGFtcGxlLiAgSW4gb3JkZXIgdG8gY29tcGlsZSBpdCwKK2l0IG11c3QgYmUgZW1iZWRkZWQgaW4gYSBjb21wbGV0ZSBmaWxlIG9mIGNvbXBpbGVyIGlucHV0OyBhbmQgdGhlIGJ1ZworbWlnaHQgZGVwZW5kIG9uIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGlzIGRvbmUuCisKK1dpdGhvdXQgYSByZWFsIGV4YW1wbGUgb25lIGNhbiBjb21waWxlLCBhbGwgYW55b25lIGNhbiBkbyBhYm91dCB5b3VyIGJ1ZworcmVwb3J0IGlzIHdpc2ggeW91IGx1Y2suICBJdCB3b3VsZCBiZSBmdXRpbGUgdG8gdHJ5IHRvIGd1ZXNzIGhvdyB0bworcHJvdm9rZSB0aGUgYnVnLiAgRm9yIGV4YW1wbGUsIGJ1Z3MgaW4gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgcmVsb2FkaW5nCitmcmVxdWVudGx5IGRlcGVuZCBvbiBldmVyeSBsaXR0bGUgZGV0YWlsIG9mIHRoZSBmdW5jdGlvbiB0aGV5IGhhcHBlbiBpbi4KKworRXZlbiBpZiB0aGUgaW5wdXQgZmlsZSB0aGF0IGZhaWxzIGNvbWVzIGZyb20gYSBHTlUgcHJvZ3JhbSwgeW91IHNob3VsZAorc3RpbGwgc2VuZCB0aGUgY29tcGxldGUgdGVzdCBjYXNlLiAgRG9uJ3QgYXNrIHRoZSBHTlUgQ0MgbWFpbnRhaW5lcnMgdG8KK2RvIHRoZSBleHRyYSB3b3JrIG9mIG9idGFpbmluZyB0aGUgcHJvZ3JhbSBpbiBxdWVzdGlvbi0tLXRoZXkgYXJlIGFsbAorb3ZlcndvcmtlZCBhcyBpdCBpcy4gIEFsc28sIHRoZSBwcm9ibGVtIG1heSBkZXBlbmQgb24gd2hhdCBpcyBpbiB0aGUKK2hlYWRlciBmaWxlcyBvbiB5b3VyIHN5c3RlbTsgaXQgaXMgdW5yZWxpYWJsZSBmb3IgdGhlIEdOVSBDQyBtYWludGFpbmVycwordG8gdHJ5IHRoZSBwcm9ibGVtIHdpdGggdGhlIGhlYWRlciBmaWxlcyBhdmFpbGFibGUgdG8gdGhlbS4gIEJ5IHNlbmRpbmcKK0NQUCBvdXRwdXQsIHlvdSBjYW4gZWxpbWluYXRlIHRoaXMgc291cmNlIG9mIHVuY2VydGFpbnR5IGFuZCBzYXZlIHVzCithIGNlcnRhaW4gcGVyY2VudGFnZSBvZiB3aWxkIGdvb3NlIGNoYXNlcy4KKworQGl0ZW0KK1RoZSBjb21tYW5kIGFyZ3VtZW50cyB5b3UgZ2F2ZSBHTlUgQ0Mgb3IgR05VIEMrKyB0byBjb21waWxlIHRoYXQgZXhhbXBsZQorYW5kIG9ic2VydmUgdGhlIGJ1Zy4gIEZvciBleGFtcGxlLCBkaWQgeW91IHVzZSBAc2FtcHstT30/ICBUbyBndWFyYW50ZWUKK3lvdSB3b24ndCBvbWl0IHNvbWV0aGluZyBpbXBvcnRhbnQsIGxpc3QgYWxsIHRoZSBvcHRpb25zLgorCitJZiB3ZSB3ZXJlIHRvIHRyeSB0byBndWVzcyB0aGUgYXJndW1lbnRzLCB3ZSB3b3VsZCBwcm9iYWJseSBndWVzcyB3cm9uZworYW5kIHRoZW4gd2Ugd291bGQgbm90IGVuY291bnRlciB0aGUgYnVnLgorCitAaXRlbQorVGhlIHR5cGUgb2YgbWFjaGluZSB5b3UgYXJlIHVzaW5nLCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSBhbmQKK3ZlcnNpb24gbnVtYmVyLgorCitAaXRlbQorVGhlIG9wZXJhbmRzIHlvdSBnYXZlIHRvIHRoZSBAY29kZXtjb25maWd1cmV9IGNvbW1hbmQgd2hlbiB5b3UgaW5zdGFsbGVkCit0aGUgY29tcGlsZXIuCisKK0BpdGVtCitBIGNvbXBsZXRlIGxpc3Qgb2YgYW55IG1vZGlmaWNhdGlvbnMgeW91IGhhdmUgbWFkZSB0byB0aGUgY29tcGlsZXIKK3NvdXJjZS4gIChXZSBkb24ndCBwcm9taXNlIHRvIGludmVzdGlnYXRlIHRoZSBidWcgdW5sZXNzIGl0IGhhcHBlbnMgaW4KK2FuIHVubW9kaWZpZWQgY29tcGlsZXIuICBCdXQgaWYgeW91J3ZlIG1hZGUgbW9kaWZpY2F0aW9ucyBhbmQgZG9uJ3QgdGVsbAordXMsIHRoZW4geW91IGFyZSBzZW5kaW5nIHVzIG9uIGEgd2lsZCBnb29zZSBjaGFzZS4pCisKK0JlIHByZWNpc2UgYWJvdXQgdGhlc2UgY2hhbmdlcy4gIEEgZGVzY3JpcHRpb24gaW4gRW5nbGlzaCBpcyBub3QKK2Vub3VnaC0tLXNlbmQgYSBjb250ZXh0IGRpZmYgZm9yIHRoZW0uCisKK0FkZGluZyBmaWxlcyBvZiB5b3VyIG93biAoc3VjaCBhcyBhIG1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIGEgbWFjaGluZSB3ZQorZG9uJ3Qgc3VwcG9ydCkgaXMgYSBtb2RpZmljYXRpb24gb2YgdGhlIGNvbXBpbGVyIHNvdXJjZS4KKworQGl0ZW0KK0RldGFpbHMgb2YgYW55IG90aGVyIGRldmlhdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBpbnN0YWxsaW5nCitHTlUgQ0MuCisKK0BpdGVtCitBIGRlc2NyaXB0aW9uIG9mIHdoYXQgYmVoYXZpb3IgeW91IG9ic2VydmUgdGhhdCB5b3UgYmVsaWV2ZSBpcworaW5jb3JyZWN0LiAgRm9yIGV4YW1wbGUsIGBgVGhlIGNvbXBpbGVyIGdldHMgYSBmYXRhbCBzaWduYWwsJycgb3IsCitgYFRoZSBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24gYXQgbGluZSAyMDggaW4gdGhlIG91dHB1dCBpcyBpbmNvcnJlY3QuJycKKworT2YgY291cnNlLCBpZiB0aGUgYnVnIGlzIHRoYXQgdGhlIGNvbXBpbGVyIGdldHMgYSBmYXRhbCBzaWduYWwsIHRoZW4gb25lCitjYW4ndCBtaXNzIGl0LiAgQnV0IGlmIHRoZSBidWcgaXMgaW5jb3JyZWN0IG91dHB1dCwgdGhlIG1haW50YWluZXIgbWlnaHQKK25vdCBub3RpY2UgdW5sZXNzIGl0IGlzIGdsYXJpbmdseSB3cm9uZy4gIE5vbmUgb2YgdXMgaGFzIHRpbWUgdG8gc3R1ZHkKK2FsbCB0aGUgYXNzZW1ibGVyIGNvZGUgZnJvbSBhIDUwLWxpbmUgQyBwcm9ncmFtIGp1c3Qgb24gdGhlIGNoYW5jZSB0aGF0CitvbmUgaW5zdHJ1Y3Rpb24gbWlnaHQgYmUgd3JvbmcuICBXZSBuZWVkIEBlbXBoe3lvdX0gdG8gZG8gdGhpcyBwYXJ0IQorCitFdmVuIGlmIHRoZSBwcm9ibGVtIHlvdSBleHBlcmllbmNlIGlzIGEgZmF0YWwgc2lnbmFsLCB5b3Ugc2hvdWxkIHN0aWxsCitzYXkgc28gZXhwbGljaXRseS4gIFN1cHBvc2Ugc29tZXRoaW5nIHN0cmFuZ2UgaXMgZ29pbmcgb24sIHN1Y2ggYXMsIHlvdXIKK2NvcHkgb2YgdGhlIGNvbXBpbGVyIGlzIG91dCBvZiBzeW5jaCwgb3IgeW91IGhhdmUgZW5jb3VudGVyZWQgYSBidWcgaW4KK3RoZSBDIGxpYnJhcnkgb24geW91ciBzeXN0ZW0uICAoVGhpcyBoYXMgaGFwcGVuZWQhKSAgWW91ciBjb3B5IG1pZ2h0CitjcmFzaCBhbmQgdGhlIGNvcHkgaGVyZSB3b3VsZCBub3QuICBJZiB5b3UgQGl7c2FpZH0gdG8gZXhwZWN0IGEgY3Jhc2gsCit0aGVuIHdoZW4gdGhlIGNvbXBpbGVyIGhlcmUgZmFpbHMgdG8gY3Jhc2gsIHdlIHdvdWxkIGtub3cgdGhhdCB0aGUgYnVnCit3YXMgbm90IGhhcHBlbmluZy4gIElmIHlvdSBkb24ndCBzYXkgdG8gZXhwZWN0IGEgY3Jhc2gsIHRoZW4gd2Ugd291bGQKK25vdCBrbm93IHdoZXRoZXIgdGhlIGJ1ZyB3YXMgaGFwcGVuaW5nLiAgV2Ugd291bGQgbm90IGJlIGFibGUgdG8gZHJhdworYW55IGNvbmNsdXNpb24gZnJvbSBvdXIgb2JzZXJ2YXRpb25zLgorCitJZiB0aGUgcHJvYmxlbSBpcyBhIGRpYWdub3N0aWMgd2hlbiBjb21waWxpbmcgR05VIENDIHdpdGggc29tZSBvdGhlcgorY29tcGlsZXIsIHNheSB3aGV0aGVyIGl0IGlzIGEgd2FybmluZyBvciBhbiBlcnJvci4KKworT2Z0ZW4gdGhlIG9ic2VydmVkIHN5bXB0b20gaXMgaW5jb3JyZWN0IG91dHB1dCB3aGVuIHlvdXIgcHJvZ3JhbSBpcyBydW4uCitTYWQgdG8gc2F5LCB0aGlzIGlzIG5vdCBlbm91Z2ggaW5mb3JtYXRpb24gdW5sZXNzIHRoZSBwcm9ncmFtIGlzIHNob3J0CithbmQgc2ltcGxlLiAgTm9uZSBvZiB1cyBoYXMgdGltZSB0byBzdHVkeSBhIGxhcmdlIHByb2dyYW0gdG8gZmlndXJlIG91dAoraG93IGl0IHdvdWxkIHdvcmsgaWYgY29tcGlsZWQgY29ycmVjdGx5LCBtdWNoIGxlc3Mgd2hpY2ggbGluZSBvZiBpdCB3YXMKK2NvbXBpbGVkIHdyb25nLiAgU28geW91IHdpbGwgaGF2ZSB0byBkbyB0aGF0LiAgVGVsbCB1cyB3aGljaCBzb3VyY2UgbGluZQoraXQgaXMsIGFuZCB3aGF0IGluY29ycmVjdCByZXN1bHQgaGFwcGVucyB3aGVuIHRoYXQgbGluZSBpcyBleGVjdXRlZC4gIEEKK3BlcnNvbiB3aG8gdW5kZXJzdGFuZHMgdGhlIHByb2dyYW0gY2FuIGZpbmQgdGhpcyBhcyBlYXNpbHkgYXMgZmluZGluZyBhCitidWcgaW4gdGhlIHByb2dyYW0gaXRzZWxmLgorCitAaXRlbQorSWYgeW91IHNlbmQgZXhhbXBsZXMgb2YgYXNzZW1ibGVyIGNvZGUgb3V0cHV0IGZyb20gR05VIENDIG9yIEdOVSBDKyssCitwbGVhc2UgdXNlIEBzYW1wey1nfSB3aGVuIHlvdSBtYWtlIHRoZW0uICBUaGUgZGVidWdnaW5nIGluZm9ybWF0aW9uCitpbmNsdWRlcyBzb3VyY2UgbGluZSBudW1iZXJzIHdoaWNoIGFyZSBlc3NlbnRpYWwgZm9yIGNvcnJlbGF0aW5nIHRoZQorb3V0cHV0IHdpdGggdGhlIGlucHV0LgorCitAaXRlbQorSWYgeW91IHdpc2ggdG8gbWVudGlvbiBzb21ldGhpbmcgaW4gdGhlIEdOVSBDQyBzb3VyY2UsIHJlZmVyIHRvIGl0IGJ5Citjb250ZXh0LCBub3QgYnkgbGluZSBudW1iZXIuCisKK1RoZSBsaW5lIG51bWJlcnMgaW4gdGhlIGRldmVsb3BtZW50IHNvdXJjZXMgZG9uJ3QgbWF0Y2ggdGhvc2UgaW4geW91cgorc291cmNlcy4gIFlvdXIgbGluZSBudW1iZXJzIHdvdWxkIGNvbnZleSBubyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlCittYWludGFpbmVycy4KKworQGl0ZW0KK0FkZGl0aW9uYWwgaW5mb3JtYXRpb24gZnJvbSBhIGRlYnVnZ2VyIG1pZ2h0IGVuYWJsZSBzb21lb25lIHRvIGZpbmQgYQorcHJvYmxlbSBvbiBhIG1hY2hpbmUgd2hpY2ggaGUgZG9lcyBub3QgaGF2ZSBhdmFpbGFibGUuICBIb3dldmVyLCB5b3UKK25lZWQgdG8gdGhpbmsgd2hlbiB5b3UgY29sbGVjdCB0aGlzIGluZm9ybWF0aW9uIGlmIHlvdSB3YW50IGl0IHRvIGhhdmUKK2FueSBjaGFuY2Ugb2YgYmVpbmcgdXNlZnVsLgorCitAY2luZGV4IGJhY2t0cmFjZSBmb3IgYnVnIHJlcG9ydHMKK0ZvciBleGFtcGxlLCBtYW55IHBlb3BsZSBzZW5kIGp1c3QgYSBiYWNrdHJhY2UsIGJ1dCB0aGF0IGlzIG5ldmVyCit1c2VmdWwgYnkgaXRzZWxmLiAgQSBzaW1wbGUgYmFja3RyYWNlIHdpdGggYXJndW1lbnRzIGNvbnZleXMgbGl0dGxlCithYm91dCBHTlUgQ0MgYmVjYXVzZSB0aGUgY29tcGlsZXIgaXMgbGFyZ2VseSBkYXRhLWRyaXZlbjsgdGhlIHNhbWUKK2Z1bmN0aW9ucyBhcmUgY2FsbGVkIG92ZXIgYW5kIG92ZXIgZm9yIGRpZmZlcmVudCBSVEwgaW5zbnMsIGRvaW5nCitkaWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiB0aGUgZGV0YWlscyBvZiB0aGUgaW5zbi4KKworTW9zdCBvZiB0aGUgYXJndW1lbnRzIGxpc3RlZCBpbiB0aGUgYmFja3RyYWNlIGFyZSB1c2VsZXNzIGJlY2F1c2UgdGhleQorYXJlIHBvaW50ZXJzIHRvIFJUTCBsaXN0IHN0cnVjdHVyZS4gIFRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGUKK3BvaW50ZXJzLCB3aGljaCB0aGUgZGVidWdnZXIgcHJpbnRzIGluIHRoZSBiYWNrdHJhY2UsIGhhdmUgbm8KK3NpZ25pZmljYW5jZSB3aGF0ZXZlcjsgYWxsIHRoYXQgbWF0dGVycyBpcyB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdHMKK3RoZXkgcG9pbnQgdG8gKGFuZCBtb3N0IG9mIHRoZSBjb250ZW50cyBhcmUgb3RoZXIgc3VjaCBwb2ludGVycykuCisKK0luIGFkZGl0aW9uLCBtb3N0IGNvbXBpbGVyIHBhc3NlcyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIGxvb3BzIHRoYXQKK3NjYW4gdGhlIFJUTCBpbnNuIHNlcXVlbmNlLiAgVGhlIG1vc3Qgdml0YWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYWJvdXQKK3N1Y2ggYSBsb29wLS0td2hpY2ggaW5zbiBpdCBoYXMgcmVhY2hlZC0tLWlzIHVzdWFsbHkgaW4gYSBsb2NhbCB2YXJpYWJsZSwKK25vdCBpbiBhbiBhcmd1bWVudC4KKworQGZpbmRleCBkZWJ1Z19ydHgKK1doYXQgeW91IG5lZWQgdG8gcHJvdmlkZSBpbiBhZGRpdGlvbiB0byBhIGJhY2t0cmFjZSBhcmUgdGhlIHZhbHVlcyBvZgordGhlIGxvY2FsIHZhcmlhYmxlcyBmb3Igc2V2ZXJhbCBzdGFjayBmcmFtZXMgdXAuICBXaGVuIGEgbG9jYWwKK3ZhcmlhYmxlIG9yIGFuIGFyZ3VtZW50IGlzIGFuIFJUWCwgZmlyc3QgcHJpbnQgaXRzIHZhbHVlIGFuZCB0aGVuIHVzZQordGhlIEdEQiBjb21tYW5kIEBjb2Rle3ByfSB0byBwcmludCB0aGUgUlRMIGV4cHJlc3Npb24gdGhhdCBpdCBwb2ludHMKK3RvLiAgKElmIEdEQiBkb2Vzbid0IHJ1biBvbiB5b3VyIG1hY2hpbmUsIHVzZSB5b3VyIGRlYnVnZ2VyIHRvIGNhbGwKK3RoZSBmdW5jdGlvbiBAY29kZXtkZWJ1Z19ydHh9IHdpdGggdGhlIFJUWCBhcyBhbiBhcmd1bWVudC4pICBJbgorZ2VuZXJhbCwgd2hlbmV2ZXIgYSB2YXJpYWJsZSBpcyBhIHBvaW50ZXIsIGl0cyB2YWx1ZSBpcyBubyB1c2UKK3dpdGhvdXQgdGhlIGRhdGEgaXQgcG9pbnRzIHRvLgorQGVuZCBpdGVtaXplCisKK0hlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgYXJlIG5vdCBuZWNlc3Nhcnk6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnZlbG9wZSBvZiB0aGUgYnVnLgorCitPZnRlbiBwZW9wbGUgd2hvIGVuY291bnRlciBhIGJ1ZyBzcGVuZCBhIGxvdCBvZiB0aW1lIGludmVzdGlnYXRpbmcKK3doaWNoIGNoYW5nZXMgdG8gdGhlIGlucHV0IGZpbGUgd2lsbCBtYWtlIHRoZSBidWcgZ28gYXdheSBhbmQgd2hpY2gKK2NoYW5nZXMgd2lsbCBub3QgYWZmZWN0IGl0LgorCitUaGlzIGlzIG9mdGVuIHRpbWUgY29uc3VtaW5nIGFuZCBub3QgdmVyeSB1c2VmdWwsIGJlY2F1c2UgdGhlIHdheSB3ZQord2lsbCBmaW5kIHRoZSBidWcgaXMgYnkgcnVubmluZyBhIHNpbmdsZSBleGFtcGxlIHVuZGVyIHRoZSBkZWJ1Z2dlciB3aXRoCiticmVha3BvaW50cywgbm90IGJ5IHB1cmUgZGVkdWN0aW9uIGZyb20gYSBzZXJpZXMgb2YgZXhhbXBsZXMuICBZb3UgbWlnaHQKK2FzIHdlbGwgc2F2ZSB5b3VyIHRpbWUgZm9yIHNvbWV0aGluZyBlbHNlLgorCitPZiBjb3Vyc2UsIGlmIHlvdSBjYW4gZmluZCBhIHNpbXBsZXIgZXhhbXBsZSB0byByZXBvcnQgQGVtcGh7aW5zdGVhZH0gb2YKK3RoZSBvcmlnaW5hbCBvbmUsIHRoYXQgaXMgYSBjb252ZW5pZW5jZS4gIEVycm9ycyBpbiB0aGUgb3V0cHV0IHdpbGwgYmUKK2Vhc2llciB0byBzcG90LCBydW5uaW5nIHVuZGVyIHRoZSBkZWJ1Z2dlciB3aWxsIHRha2UgbGVzcyB0aW1lLCBldGMuCitNb3N0IEdOVSBDQyBidWdzIGludm9sdmUganVzdCBvbmUgZnVuY3Rpb24sIHNvIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZAord2F5IHRvIHNpbXBsaWZ5IGFuIGV4YW1wbGUgaXMgdG8gZGVsZXRlIGFsbCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMKK2V4Y2VwdCB0aGUgb25lIHdoZXJlIHRoZSBidWcgb2NjdXJzLiAgVGhvc2UgZWFybGllciBpbiB0aGUgZmlsZSBtYXkgYmUKK3JlcGxhY2VkIGJ5IGV4dGVybmFsIGRlY2xhcmF0aW9ucyBpZiB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBkZXBlbmRzIG9uCit0aGVtLiAgKEV4Y2VwdGlvbjogaW5saW5lIGZ1bmN0aW9ucyBtYXkgYWZmZWN0IGNvbXBpbGF0aW9uIG9mIGZ1bmN0aW9ucworZGVmaW5lZCBsYXRlciBpbiB0aGUgZmlsZS4pCisKK0hvd2V2ZXIsIHNpbXBsaWZpY2F0aW9uIGlzIG5vdCB2aXRhbDsgaWYgeW91IGRvbid0IHdhbnQgdG8gZG8gdGhpcywKK3JlcG9ydCB0aGUgYnVnIGFueXdheSBhbmQgc2VuZCB0aGUgZW50aXJlIHRlc3QgY2FzZSB5b3UgdXNlZC4KKworQGl0ZW0KK0luIHBhcnRpY3VsYXIsIHNvbWUgcGVvcGxlIGluc2VydCBjb25kaXRpb25hbHMgQHNhbXB7I2lmZGVmIEJVR30gYXJvdW5kCithIHN0YXRlbWVudCB3aGljaCwgaWYgcmVtb3ZlZCwgbWFrZXMgdGhlIGJ1ZyBub3QgaGFwcGVuLiAgVGhlc2UgYXJlIGp1c3QKK2NsdXR0ZXI7IHdlIHdvbid0IHBheSBhbnkgYXR0ZW50aW9uIHRvIHRoZW0gYW55d2F5LiAgQmVzaWRlcywgeW91IHNob3VsZAorc2VuZCB1cyBjcHAgb3V0cHV0LCBhbmQgdGhhdCBjYW4ndCBoYXZlIGNvbmRpdGlvbmFscy4KKworQGl0ZW0KK0EgcGF0Y2ggZm9yIHRoZSBidWcuCisKK0EgcGF0Y2ggZm9yIHRoZSBidWcgaXMgdXNlZnVsIGlmIGl0IGlzIGEgZ29vZCBvbmUuICBCdXQgZG9uJ3Qgb21pdCB0aGUKK25lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdGVzdCBjYXNlLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGEKK3BhdGNoIGlzIGFsbCB3ZSBuZWVkLiAgV2UgbWlnaHQgc2VlIHByb2JsZW1zIHdpdGggeW91ciBwYXRjaCBhbmQgZGVjaWRlCit0byBmaXggdGhlIHByb2JsZW0gYW5vdGhlciB3YXksIG9yIHdlIG1pZ2h0IG5vdCB1bmRlcnN0YW5kIGl0IGF0IGFsbC4KKworU29tZXRpbWVzIHdpdGggYSBwcm9ncmFtIGFzIGNvbXBsaWNhdGVkIGFzIEdOVSBDQyBpdCBpcyB2ZXJ5IGhhcmQgdG8KK2NvbnN0cnVjdCBhbiBleGFtcGxlIHRoYXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGZvbGxvdyBhIGNlcnRhaW4gcGF0aAordGhyb3VnaCB0aGUgY29kZS4gIElmIHlvdSBkb24ndCBzZW5kIHRoZSBleGFtcGxlLCB3ZSB3b24ndCBiZSBhYmxlIHRvCitjb25zdHJ1Y3Qgb25lLCBzbyB3ZSB3b24ndCBiZSBhYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBidWcgaXMgZml4ZWQuCisKK0FuZCBpZiB3ZSBjYW4ndCB1bmRlcnN0YW5kIHdoYXQgYnVnIHlvdSBhcmUgdHJ5aW5nIHRvIGZpeCwgb3Igd2h5IHlvdXIKK3BhdGNoIHNob3VsZCBiZSBhbiBpbXByb3ZlbWVudCwgd2Ugd29uJ3QgaW5zdGFsbCBpdC4gIEEgdGVzdCBjYXNlIHdpbGwKK2hlbHAgdXMgdG8gdW5kZXJzdGFuZC4KKworQHhyZWZ7U2VuZGluZyBQYXRjaGVzfSwgZm9yIGd1aWRlbGluZXMgb24gaG93IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXMgdG8KK3VuZGVyc3RhbmQgYW5kIGluc3RhbGwgeW91ciBwYXRjaGVzLgorCitAaXRlbQorQSBndWVzcyBhYm91dCB3aGF0IHRoZSBidWcgaXMgb3Igd2hhdCBpdCBkZXBlbmRzIG9uLgorCitTdWNoIGd1ZXNzZXMgYXJlIHVzdWFsbHkgd3JvbmcuICBFdmVuIEkgY2FuJ3QgZ3Vlc3MgcmlnaHQgYWJvdXQgc3VjaAordGhpbmdzIHdpdGhvdXQgZmlyc3QgdXNpbmcgdGhlIGRlYnVnZ2VyIHRvIGZpbmQgdGhlIGZhY3RzLgorCitAaXRlbQorQSBjb3JlIGR1bXAgZmlsZS4KKworV2UgaGF2ZSBubyB3YXkgb2YgZXhhbWluaW5nIGEgY29yZSBkdW1wIGZvciB5b3VyIHR5cGUgb2YgbWFjaGluZQordW5sZXNzIHdlIGhhdmUgYW4gaWRlbnRpY2FsIHN5c3RlbS0tLWFuZCBpZiB3ZSBkbyBoYXZlIG9uZSwKK3dlIHNob3VsZCBiZSBhYmxlIHRvIHJlcHJvZHVjZSB0aGUgY3Jhc2ggb3Vyc2VsdmVzLgorQGVuZCBpdGVtaXplCisKK0Bub2RlIFNlbmRpbmcgUGF0Y2hlcywsIEJ1ZyBSZXBvcnRpbmcsIEJ1Z3MKK0BzZWN0aW9uIFNlbmRpbmcgUGF0Y2hlcyBmb3IgR05VIENDCisKK0lmIHlvdSB3b3VsZCBsaWtlIHRvIHdyaXRlIGJ1ZyBmaXhlcyBvciBpbXByb3ZlbWVudHMgZm9yIHRoZSBHTlUgQworY29tcGlsZXIsIHRoYXQgaXMgdmVyeSBoZWxwZnVsLiAgU2VuZCBzdWdnZXN0ZWQgZml4ZXMgdG8gdGhlIGJ1ZyByZXBvcnQKK21haWxpbmcgbGlzdCwgQGNvZGV7YnVnLWdjY0BAcHJlcC5haS5taXQuZWR1fS4KKworUGxlYXNlIGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzIHNvIHdlIGNhbiBzdHVkeSB5b3VyIHBhdGNoZXMgZWZmaWNpZW50bHkuCitJZiB5b3UgZG9uJ3QgZm9sbG93IHRoZXNlIGd1aWRlbGluZXMsIHlvdXIgaW5mb3JtYXRpb24gbWlnaHQgc3RpbGwgYmUKK3VzZWZ1bCwgYnV0IHVzaW5nIGl0IHdpbGwgdGFrZSBleHRyYSB3b3JrLiAgTWFpbnRhaW5pbmcgR05VIEMgaXMgYSBsb3QKK29mIHdvcmsgaW4gdGhlIGJlc3Qgb2YgY2lyY3Vtc3RhbmNlcywgYW5kIHdlIGNhbid0IGtlZXAgdXAgdW5sZXNzIHlvdSBkbworeW91ciBiZXN0IHRvIGhlbHAuCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitTZW5kIGFuIGV4cGxhbmF0aW9uIHdpdGggeW91ciBjaGFuZ2VzIG9mIHdoYXQgcHJvYmxlbSB0aGV5IGZpeCBvciB3aGF0CitpbXByb3ZlbWVudCB0aGV5IGJyaW5nIGFib3V0LiAgRm9yIGEgYnVnIGZpeCwganVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGUKK2J1ZyByZXBvcnQsIGFuZCBleHBsYWluIHdoeSB0aGUgY2hhbmdlIGZpeGVzIHRoZSBidWcuCisKKyhSZWZlcnJpbmcgdG8gYSBidWcgcmVwb3J0IGlzIG5vdCBhcyBnb29kIGFzIGluY2x1ZGluZyBpdCwgYmVjYXVzZSB0aGVuCit3ZSB3aWxsIGhhdmUgdG8gbG9vayBpdCB1cCwgYW5kIHdlIGhhdmUgcHJvYmFibHkgYWxyZWFkeSBkZWxldGVkIGl0IGlmCit3ZSd2ZSBhbHJlYWR5IGZpeGVkIHRoZSBidWcuKQorCitAaXRlbQorQWx3YXlzIGluY2x1ZGUgYSBwcm9wZXIgYnVnIHJlcG9ydCBmb3IgdGhlIHByb2JsZW0geW91IHRoaW5rIHlvdSBoYXZlCitmaXhlZC4gIFdlIG5lZWQgdG8gY29udmluY2Ugb3Vyc2VsdmVzIHRoYXQgdGhlIGNoYW5nZSBpcyByaWdodCBiZWZvcmUKK2luc3RhbGxpbmcgaXQuICBFdmVuIGlmIGl0IGlzIHJpZ2h0LCB3ZSBtaWdodCBoYXZlIHRyb3VibGUganVkZ2luZyBpdCBpZgord2UgZG9uJ3QgaGF2ZSBhIHdheSB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0uCisKK0BpdGVtCitJbmNsdWRlIGFsbCB0aGUgY29tbWVudHMgdGhhdCBhcmUgYXBwcm9wcmlhdGUgdG8gaGVscCBwZW9wbGUgcmVhZGluZyB0aGUKK3NvdXJjZSBpbiB0aGUgZnV0dXJlIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWVkZWQuCisKK0BpdGVtCitEb24ndCBtaXggdG9nZXRoZXIgY2hhbmdlcyBtYWRlIGZvciBkaWZmZXJlbnQgcmVhc29ucy4KK1NlbmQgdGhlbSBAZW1waHtpbmRpdmlkdWFsbHl9LgorCitJZiB5b3UgbWFrZSB0d28gY2hhbmdlcyBmb3Igc2VwYXJhdGUgcmVhc29ucywgdGhlbiB3ZSBtaWdodCBub3Qgd2FudCB0bworaW5zdGFsbCB0aGVtIGJvdGguICBXZSBtaWdodCB3YW50IHRvIGluc3RhbGwganVzdCBvbmUuICBJZiB5b3Ugc2VuZCB0aGVtCithbGwganVtYmxlZCB0b2dldGhlciBpbiBhIHNpbmdsZSBzZXQgb2YgZGlmZnMsIHdlIGhhdmUgdG8gZG8gZXh0cmEgd29yawordG8gZGlzZW50YW5nbGUgdGhlbS0tLXRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGNoYW5nZSBzZXJ2ZQord2hpY2ggcHVycG9zZS4gIElmIHdlIGRvbid0IGhhdmUgdGltZSBmb3IgdGhpcywgd2UgbWlnaHQgaGF2ZSB0byBpZ25vcmUKK3lvdXIgY2hhbmdlcyBlbnRpcmVseS4KKworSWYgeW91IHNlbmQgZWFjaCBjaGFuZ2UgYXMgc29vbiBhcyB5b3UgaGF2ZSB3cml0dGVuIGl0LCB3aXRoIGl0cyBvd24KK2V4cGxhbmF0aW9uLCB0aGVuIHRoZSB0d28gY2hhbmdlcyBuZXZlciBnZXQgdGFuZ2xlZCB1cCwgYW5kIHdlIGNhbgorY29uc2lkZXIgZWFjaCBvbmUgcHJvcGVybHkgd2l0aG91dCBhbnkgZXh0cmEgd29yayB0byBkaXNlbnRhbmdsZSB0aGVtLgorCitJZGVhbGx5LCBlYWNoIGNoYW5nZSB5b3Ugc2VuZCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBzdWJkaXZpZGUgaW50bworcGFydHMgdGhhdCB3ZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHNlcGFyYXRlbHksIGJlY2F1c2UgZWFjaCBvZiBpdHMKK3BhcnRzIGdldHMgaXRzIG1vdGl2YXRpb24gZnJvbSB0aGUgb3RoZXIgcGFydHMuCisKK0BpdGVtCitTZW5kIGVhY2ggY2hhbmdlIGFzIHNvb24gYXMgdGhhdCBjaGFuZ2UgaXMgZmluaXNoZWQuICBTb21ldGltZXMgcGVvcGxlCit0aGluayB0aGV5IGFyZSBoZWxwaW5nIHVzIGJ5IGFjY3VtdWxhdGluZyBtYW55IGNoYW5nZXMgdG8gc2VuZCB0aGVtIGFsbAordG9nZXRoZXIuICBBcyBleHBsYWluZWQgYWJvdmUsIHRoaXMgaXMgYWJzb2x1dGVseSB0aGUgd29yc3QgdGhpbmcgeW91Citjb3VsZCBkby4KKworU2luY2UgeW91IHNob3VsZCBzZW5kIGVhY2ggY2hhbmdlIHNlcGFyYXRlbHksIHlvdSBtaWdodCBhcyB3ZWxsIHNlbmQgaXQKK3JpZ2h0IGF3YXkuICBUaGF0IGdpdmVzIHVzIHRoZSBvcHRpb24gb2YgaW5zdGFsbGluZyBpdCBpbW1lZGlhdGVseSBpZiBpdAoraXMgaW1wb3J0YW50LgorCitAaXRlbQorVXNlIEBzYW1we2RpZmYgLWN9IHRvIG1ha2UgeW91ciBkaWZmcy4gIERpZmZzIHdpdGhvdXQgY29udGV4dCBhcmUgaGFyZAorZm9yIHVzIHRvIGluc3RhbGwgcmVsaWFibHkuICBNb3JlIHRoYW4gdGhhdCwgdGhleSBtYWtlIGl0IGhhcmQgZm9yIHVzIHRvCitzdHVkeSB0aGUgZGlmZnMgdG8gZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBpbnN0YWxsIHRoZW0uICBVbmlkaWZmCitmb3JtYXQgaXMgYmV0dGVyIHRoYW4gY29udGV4dGxlc3MgZGlmZnMsIGJ1dCBub3QgYXMgZWFzeSB0byByZWFkIGFzCitAc2FtcHstY30gZm9ybWF0LgorCitJZiB5b3UgaGF2ZSBHTlUgZGlmZiwgdXNlIEBzYW1we2RpZmYgLWNwfSwgd2hpY2ggc2hvd3MgdGhlIG5hbWUgb2YgdGhlCitmdW5jdGlvbiB0aGF0IGVhY2ggY2hhbmdlIG9jY3VycyBpbi4KKworQGl0ZW0KK1dyaXRlIHRoZSBjaGFuZ2UgbG9nIGVudHJpZXMgZm9yIHlvdXIgY2hhbmdlcy4gIFdlIGdldCBsb3RzIG9mIGNoYW5nZXMsCithbmQgd2UgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvIGFsbCB0aGUgY2hhbmdlIGxvZyB3cml0aW5nIG91cnNlbHZlcy4KKworUmVhZCB0aGUgQGZpbGV7Q2hhbmdlTG9nfSBmaWxlIHRvIHNlZSB3aGF0IHNvcnRzIG9mIGluZm9ybWF0aW9uIHRvIHB1dAoraW4sIGFuZCB0byBsZWFybiB0aGUgc3R5bGUgdGhhdCB3ZSB1c2UuICBUaGUgcHVycG9zZSBvZiB0aGUgY2hhbmdlIGxvZworaXMgdG8gc2hvdyBwZW9wbGUgd2hlcmUgdG8gZmluZCB3aGF0IHdhcyBjaGFuZ2VkLiAgU28geW91IG5lZWQgdG8gYmUKK3NwZWNpZmljIGFib3V0IHdoYXQgZnVuY3Rpb25zIHlvdSBjaGFuZ2VkOyBpbiBsYXJnZSBmdW5jdGlvbnMsIGl0J3MKK29mdGVuIGhlbHBmdWwgdG8gaW5kaWNhdGUgd2hlcmUgd2l0aGluIHRoZSBmdW5jdGlvbiB0aGUgY2hhbmdlIHdhcy4KKworT24gdGhlIG90aGVyIGhhbmQsIG9uY2UgeW91IGhhdmUgc2hvd24gcGVvcGxlIHdoZXJlIHRvIGZpbmQgdGhlIGNoYW5nZSwKK3lvdSBuZWVkIG5vdCBleHBsYWluIGl0cyBwdXJwb3NlLiAgVGh1cywgaWYgeW91IGFkZCBhIG5ldyBmdW5jdGlvbiwgYWxsCit5b3UgbmVlZCB0byBzYXkgYWJvdXQgaXQgaXMgdGhhdCBpdCBpcyBuZXcuICBJZiB5b3UgZmVlbCB0aGF0IHRoZQorcHVycG9zZSBuZWVkcyBleHBsYWluaW5nLCBpdCBwcm9iYWJseSBkb2VzLS0tYnV0IHRoZSBleHBsYW5hdGlvbiB3aWxsIGJlCittdWNoIG1vcmUgdXNlZnVsIGlmIHlvdSBwdXQgaXQgaW4gY29tbWVudHMgaW4gdGhlIGNvZGUuCisKK0lmIHlvdSB3b3VsZCBsaWtlIHlvdXIgbmFtZSB0byBhcHBlYXIgaW4gdGhlIGhlYWRlciBsaW5lIGZvciB3aG8gbWFkZQordGhlIGNoYW5nZSwgc2VuZCB1cyB0aGUgaGVhZGVyIGxpbmUuCisKK0BpdGVtCitXaGVuIHlvdSB3cml0ZSB0aGUgZml4LCBrZWVwIGluIG1pbmQgdGhhdCB3ZSBjYW4ndCBpbnN0YWxsIGEgY2hhbmdlIHRoYXQKK3dvdWxkIGJyZWFrIG90aGVyIHN5c3RlbXMuCisKK1Blb3BsZSBvZnRlbiBzdWdnZXN0IGZpeGluZyBhIHByb2JsZW0gYnkgY2hhbmdpbmcgbWFjaGluZS1pbmRlcGVuZGVudAorZmlsZXMgc3VjaCBhcyBAZmlsZXt0b3BsZXYuY30gdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgdGhhdCBhIHBhcnRpY3VsYXIKK3N5c3RlbSBuZWVkcy4gIFNvbWV0aW1lcyBpdCBpcyB0b3RhbGx5IG9idmlvdXMgdGhhdCBzdWNoIGNoYW5nZXMgd291bGQKK2JyZWFrIEdOVSBDQyBmb3IgYWxtb3N0IGFsbCB1c2Vycy4gIFdlIGNhbid0IHBvc3NpYmx5IG1ha2UgYSBjaGFuZ2UgbGlrZQordGhhdC4gIEF0IGJlc3QgaXQgbWlnaHQgdGVsbCB1cyBob3cgdG8gd3JpdGUgYW5vdGhlciBwYXRjaCB0aGF0IHdvdWxkCitzb2x2ZSB0aGUgcHJvYmxlbSBhY2NlcHRhYmx5LgorCitTb21ldGltZXMgcGVvcGxlIHNlbmQgZml4ZXMgdGhhdCBAZW1waHttaWdodH0gYmUgYW4gaW1wcm92ZW1lbnQgaW4KK2dlbmVyYWwtLS1idXQgaXQgaXMgaGFyZCB0byBiZSBzdXJlIG9mIHRoaXMuICBJdCdzIGhhcmQgdG8gaW5zdGFsbAorc3VjaCBjaGFuZ2VzIGJlY2F1c2Ugd2UgaGF2ZSB0byBzdHVkeSB0aGVtIHZlcnkgY2FyZWZ1bGx5LiAgT2YgY291cnNlLAorYSBnb29kIGV4cGxhbmF0aW9uIG9mIHRoZSByZWFzb25pbmcgYnkgd2hpY2ggeW91IGNvbmNsdWRlZCB0aGUgY2hhbmdlCit3YXMgY29ycmVjdCBjYW4gaGVscCBjb252aW5jZSB1cy4KKworVGhlIHNhZmVzdCBjaGFuZ2VzIGFyZSBjaGFuZ2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhCitwYXJ0aWN1bGFyIG1hY2hpbmUuICBUaGVzZSBhcmUgc2FmZSBiZWNhdXNlIHRoZXkgY2FuJ3QgY3JlYXRlIG5ldyBidWdzCitvbiBvdGhlciBtYWNoaW5lcy4KKworUGxlYXNlIGhlbHAgdXMga2VlcCB1cCB3aXRoIHRoZSB3b3JrbG9hZCBieSBkZXNpZ25pbmcgdGhlIHBhdGNoIGluIGEKK2Zvcm0gdGhhdCBpcyBnb29kIHRvIGluc3RhbGwuCitAZW5kIGl0ZW1pemUKKworQG5vZGUgU2VydmljZQorQGNoYXB0ZXIgSG93IFRvIEdldCBIZWxwIHdpdGggR05VIENDCisKK0lmIHlvdSBuZWVkIGhlbHAgaW5zdGFsbGluZywgdXNpbmcgb3IgY2hhbmdpbmcgR05VIENDLCB0aGVyZSBhcmUgdHdvCit3YXlzIHRvIGZpbmQgaXQ6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitTZW5kIGEgbWVzc2FnZSB0byBhIHN1aXRhYmxlIG5ldHdvcmsgbWFpbGluZyBsaXN0LiAgRmlyc3QgdHJ5CitAY29kZXtidWctZ2NjQEBwcmVwLmFpLm1pdC5lZHV9LCBhbmQgaWYgdGhhdCBicmluZ3Mgbm8gcmVzcG9uc2UsIHRyeQorQGNvZGV7aGVscC1nY2NAQHByZXAuYWkubWl0LmVkdX0uCisKK0BpdGVtCitMb29rIGluIHRoZSBzZXJ2aWNlIGRpcmVjdG9yeSBmb3Igc29tZW9uZSB3aG8gbWlnaHQgaGVscCB5b3UgZm9yIGEgZmVlLgorVGhlIHNlcnZpY2UgZGlyZWN0b3J5IGlzIGZvdW5kIGluIHRoZSBmaWxlIG5hbWVkIEBmaWxle1NFUlZJQ0V9IGluIHRoZQorR05VIENDIGRpc3RyaWJ1dGlvbi4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBDb250cmlidXRpbmcKK0BjaGFwdGVyIENvbnRyaWJ1dGluZyB0byBHTlUgQ0MgRGV2ZWxvcG1lbnQKKworSWYgeW91IHdvdWxkIGxpa2UgdG8gaGVscCBwcmV0ZXN0IEdOVSBDQyByZWxlYXNlcyB0byBhc3N1cmUgdGhleSB3b3JrCit3ZWxsLCBvciBpZiB5b3Ugd291bGQgbGlrZSB0byB3b3JrIG9uIGltcHJvdmluZyBHTlUgQ0MsIHBsZWFzZSBjb250YWN0Cit0aGUgbWFpbnRhaW5lcnMgYXQgQGNvZGV7YnVnLWdjY0BAZ251LmFpLm1pdC5lZHV9LiAgQSBwcmV0ZXN0ZXIgc2hvdWxkCitiZSB3aWxsaW5nIHRvIHRyeSB0byBpbnZlc3RpZ2F0ZSBidWdzIGFzIHdlbGwgYXMgcmVwb3J0IHRoZW0uCisKK0lmIHlvdSdkIGxpa2UgdG8gd29yayBvbiBpbXByb3ZlbWVudHMsIHBsZWFzZSBhc2sgZm9yIHN1Z2dlc3RlZCBwcm9qZWN0cworb3Igc3VnZ2VzdCB5b3VyIG93biBpZGVhcy4gIElmIHlvdSBoYXZlIGFscmVhZHkgd3JpdHRlbiBhbiBpbXByb3ZlbWVudCwKK3BsZWFzZSB0ZWxsIHVzIGFib3V0IGl0LiAgSWYgeW91IGhhdmUgbm90IHlldCBzdGFydGVkIHdvcmssIGl0IGlzIHVzZWZ1bAordG8gY29udGFjdCBAY29kZXtidWctZ2NjQEBwcmVwLmFpLm1pdC5lZHV9IGJlZm9yZSB5b3Ugc3RhcnQ7IHRoZQorbWFpbnRhaW5lcnMgbWF5IGJlIGFibGUgdG8gc3VnZ2VzdCB3YXlzIHRvIG1ha2UgeW91ciBleHRlbnNpb24gZml0IGluCitiZXR0ZXIgd2l0aCB0aGUgcmVzdCBvZiBHTlUgQ0MgYW5kIHdpdGggb3RoZXIgZGV2ZWxvcG1lbnQgcGxhbnMuCisKK0Bub2RlIFZNUworQGNoYXB0ZXIgVXNpbmcgR05VIENDIG9uIFZNUworCitAYyBwcmV2ZW50IGJhZCBwYWdlIGJyZWFrIHdpdGggdGhpcyBsaW5lCitIZXJlIGlzIGhvdyB0byB1c2UgR05VIENDIG9uIFZNUy4KKworQG1lbnUKKyogSW5jbHVkZSBGaWxlcyBhbmQgVk1TOjogIFdoZXJlIHRoZSBwcmVwcm9jZXNzb3IgbG9va3MgZm9yIHRoZSBpbmNsdWRlIGZpbGVzLgorKiBHbG9iYWwgRGVjbGFyYXRpb25zOjogICAgSG93IHRvIGRvIGdsb2JhbGRlZiwgZ2xvYmFscmVmIGFuZCBnbG9iYWx2YWx1ZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlUgQ0MuCisqIFZNUyBNaXNjOjoJCSAgIE1pc2MgaW5mb3JtYXRpb24uCitAZW5kIG1lbnUKKworQG5vZGUgSW5jbHVkZSBGaWxlcyBhbmQgVk1TCitAc2VjdGlvbiBJbmNsdWRlIEZpbGVzIGFuZCBWTVMKKworQGNpbmRleCBpbmNsdWRlIGZpbGVzIGFuZCBWTVMKK0BjaW5kZXggVk1TIGFuZCBpbmNsdWRlIGZpbGVzCitAY2luZGV4IGhlYWRlciBmaWxlcyBhbmQgVk1TCitEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZpbGVzeXN0ZW1zIG9mIFVuaXggYW5kIFZNUywgR05VIENDCithdHRlbXB0cyB0byB0cmFuc2xhdGUgZmlsZSBuYW1lcyBpbiBAc2FtcHsjaW5jbHVkZX0gaW50byBuYW1lcyB0aGF0IFZNUword2lsbCB1bmRlcnN0YW5kLiAgVGhlIGJhc2ljIHN0cmF0ZWd5IGlzIHRvIHByZXBlbmQgYSBwcmVmaXggdG8gdGhlCitzcGVjaWZpY2F0aW9uIG9mIHRoZSBpbmNsdWRlIGZpbGUsIGNvbnZlcnQgdGhlIHdob2xlIGZpbGVuYW1lIHRvIGEgVk1TCitmaWxlbmFtZSwgYW5kIHRoZW4gdHJ5IHRvIG9wZW4gdGhlIGZpbGUuICBHTlUgQ0MgdHJpZXMgdmFyaW91cyBwcmVmaXhlcworb25lIGJ5IG9uZSB1bnRpbCBvbmUgb2YgdGhlbSBzdWNjZWVkczoKKworQGVudW1lcmF0ZQorQGl0ZW0KK1RoZSBmaXJzdCBwcmVmaXggaXMgdGhlIEBzYW1we0dOVV9DQ19JTkNMVURFOn0gbG9naWNhbCBuYW1lOiB0aGlzIGlzCit3aGVyZSBHTlUgQyBoZWFkZXIgZmlsZXMgYXJlIHRyYWRpdGlvbmFsbHkgc3RvcmVkLiAgSWYgeW91IHdpc2ggdG8gc3RvcmUKK2hlYWRlciBmaWxlcyBpbiBub24tc3RhbmRhcmQgbG9jYXRpb25zLCB0aGVuIHlvdSBjYW4gYXNzaWduIHRoZSBsb2dpY2FsCitAc2FtcHtHTlVfQ0NfSU5DTFVERX0gdG8gYmUgYSBzZWFyY2ggbGlzdCwgd2hlcmUgZWFjaCBlbGVtZW50IG9mIHRoZQorbGlzdCBpcyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggYSByb290ZWQgbG9naWNhbC4KKworQGl0ZW0KK1RoZSBuZXh0IHByZWZpeCB0cmllZCBpcyBAc2FtcHtTWVMkU1lTUk9PVDpbU1lTTElCLl19LiAgVGhpcyBpcyB3aGVyZQorVkFYLUMgaGVhZGVyIGZpbGVzIGFyZSB0cmFkaXRpb25hbGx5IHN0b3JlZC4KKworQGl0ZW0KK0lmIHRoZSBpbmNsdWRlIGZpbGUgc3BlY2lmaWNhdGlvbiBieSBpdHNlbGYgaXMgYSB2YWxpZCBWTVMgZmlsZW5hbWUsIHRoZQorcHJlcHJvY2Vzc29yIHRoZW4gdXNlcyB0aGlzIG5hbWUgd2l0aCBubyBwcmVmaXggaW4gYW4gYXR0ZW1wdCB0byBvcGVuCit0aGUgaW5jbHVkZSBmaWxlLgorCitAaXRlbQorSWYgdGhlIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyBub3QgYSB2YWxpZCBWTVMgZmlsZW5hbWUgKGkuZS4gZG9lcyBub3QKK2NvbnRhaW4gYSBkZXZpY2Ugb3IgYSBkaXJlY3Rvcnkgc3BlY2lmaWVyLCBhbmQgY29udGFpbnMgYSBAc2FtcHsvfQorY2hhcmFjdGVyKSwgdGhlIHByZXByb2Nlc3NvciB0cmllcyB0byBjb252ZXJ0IGl0IGZyb20gVW5peCBzeW50YXggdG8KK1ZNUyBzeW50YXguCisKK0NvbnZlcnNpb24gd29ya3MgbGlrZSB0aGlzOiB0aGUgZmlyc3QgZGlyZWN0b3J5IG5hbWUgYmVjb21lcyBhIGRldmljZSwKK2FuZCB0aGUgcmVzdCBvZiB0aGUgZGlyZWN0b3JpZXMgYXJlIGNvbnZlcnRlZCBpbnRvIFZNUy1mb3JtYXQgZGlyZWN0b3J5CituYW1lcy4gIEZvciBleGFtcGxlLCB0aGUgbmFtZSBAZmlsZXtYMTEvZm9vYmFyLmh9IGlzCit0cmFuc2xhdGVkIHRvIEBmaWxle1gxMTpbMDAwMDAwXWZvb2Jhci5ofSBvciBAZmlsZXtYMTE6Zm9vYmFyLmh9LAord2hpY2hldmVyIG9uZSBjYW4gYmUgb3BlbmVkLiAgVGhpcyBzdHJhdGVneSBhbGxvd3MgeW91IHRvIGFzc2lnbiBhCitsb2dpY2FsIG5hbWUgdG8gcG9pbnQgdG8gdGhlIGFjdHVhbCBsb2NhdGlvbiBvZiB0aGUgaGVhZGVyIGZpbGVzLgorCitAaXRlbQorSWYgbm9uZSBvZiB0aGVzZSBzdHJhdGVnaWVzIHN1Y2NlZWRzLCB0aGUgQHNhbXB7I2luY2x1ZGV9IGZhaWxzLgorQGVuZCBlbnVtZXJhdGUKKworSW5jbHVkZSBkaXJlY3RpdmVzIG9mIHRoZSBmb3JtOgorCitAZXhhbXBsZQorI2luY2x1ZGUgZm9vYmFyCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CithcmUgYSBjb21tb24gc291cmNlIG9mIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIFZBWC1DIGFuZCBHTlUgQ0MuICBWQVgtQwordHJlYXRzIHRoaXMgbXVjaCBsaWtlIGEgc3RhbmRhcmQgQGNvZGV7I2luY2x1ZGUgPGZvb2Jhci5oPn0gZGlyZWN0aXZlLgorVGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQU5TSSBDIGJlaGF2aW9yIGltcGxlbWVudGVkIGJ5IEdOVSBDQzogdG8KK2V4cGFuZCB0aGUgbmFtZSBAY29kZXtmb29iYXJ9IGFzIGEgbWFjcm8uICBNYWNybyBleHBhbnNpb24gc2hvdWxkCitldmVudHVhbGx5IHlpZWxkIG9uZSBvZiB0aGUgdHdvIHN0YW5kYXJkIGZvcm1hdHMgZm9yIEBjb2RleyNpbmNsdWRlfToKKworQGV4YW1wbGUKKyNpbmNsdWRlICJAdmFye2ZpbGV9IgorI2luY2x1ZGUgPEB2YXJ7ZmlsZX0+CitAZW5kIGV4YW1wbGUKKworSWYgeW91IGhhdmUgdGhpcyBwcm9ibGVtLCB0aGUgYmVzdCBzb2x1dGlvbiBpcyB0byBtb2RpZnkgdGhlIHNvdXJjZSB0bworY29udmVydCB0aGUgQGNvZGV7I2luY2x1ZGV9IGRpcmVjdGl2ZXMgdG8gb25lIG9mIHRoZSB0d28gc3RhbmRhcmQgZm9ybXMuCitUaGF0IHdpbGwgd29yayB3aXRoIGVpdGhlciBjb21waWxlci4gIElmIHlvdSB3YW50IGEgcXVpY2sgYW5kIGRpcnR5IGZpeCwKK2RlZmluZSB0aGUgZmlsZSBuYW1lcyBhcyBtYWNyb3Mgd2l0aCB0aGUgcHJvcGVyIGV4cGFuc2lvbiwgbGlrZSB0aGlzOgorCitAZXhhbXBsZQorI2RlZmluZSBzdGRpbyA8c3RkaW8uaD4KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoaXMgd2lsbCB3b3JrLCBhcyBsb25nIGFzIHRoZSBuYW1lIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBhbnl0aGluZyBlbHNlCitpbiB0aGUgcHJvZ3JhbS4KKworQW5vdGhlciBzb3VyY2Ugb2YgaW5jb21wYXRpYmlsaXR5IGlzIHRoYXQgVkFYLUMgYXNzdW1lcyB0aGF0OgorCitAZXhhbXBsZQorI2luY2x1ZGUgImZvb2JhciIKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK2lzIGFjdHVhbGx5IGFza2luZyBmb3IgdGhlIGZpbGUgQGZpbGV7Zm9vYmFyLmh9LiAgR05VIENDIGRvZXMgbm90CittYWtlIHRoaXMgYXNzdW1wdGlvbiwgYW5kIGluc3RlYWQgdGFrZXMgd2hhdCB5b3UgYXNrIGZvciBsaXRlcmFsbHk7CitpdCB0cmllcyB0byByZWFkIHRoZSBmaWxlIEBmaWxle2Zvb2Jhcn0uICBUaGUgYmVzdCB3YXkgdG8gYXZvaWQgdGhpcworcHJvYmxlbSBpcyB0byBhbHdheXMgc3BlY2lmeSB0aGUgZGVzaXJlZCBmaWxlIGV4dGVuc2lvbiBpbiB5b3VyIGluY2x1ZGUKK2RpcmVjdGl2ZXMuCisKK0dOVSBDQyBmb3IgVk1TIGlzIGRpc3RyaWJ1dGVkIHdpdGggYSBzZXQgb2YgaW5jbHVkZSBmaWxlcyB0aGF0IGlzCitzdWZmaWNpZW50IHRvIGNvbXBpbGUgbW9zdCBnZW5lcmFsIHB1cnBvc2UgcHJvZ3JhbXMuICBFdmVuIHRob3VnaCB0aGUKK0dOVSBDQyBkaXN0cmlidXRpb24gZG9lcyBub3QgY29udGFpbiBoZWFkZXIgZmlsZXMgdG8gZGVmaW5lIGNvbnN0YW50cworYW5kIHN0cnVjdHVyZXMgZm9yIHNvbWUgVk1TIHN5c3RlbS1zcGVjaWZpYyBmdW5jdGlvbnMsIHRoZXJlIGlzIG5vCityZWFzb24gd2h5IHlvdSBjYW5ub3QgdXNlIEdOVSBDQyB3aXRoIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMuICBZb3UgZmlyc3QKK21heSBoYXZlIHRvIGdlbmVyYXRlIG9yIGNyZWF0ZSBoZWFkZXIgZmlsZXMsIGVpdGhlciBieSB1c2luZyB0aGUgcHVibGljCitkb21haW4gdXRpbGl0eSBAY29kZXtVTlNETH0gKHdoaWNoIGNhbiBiZSBmb3VuZCBvbiBhIERFQ1VTIHRhcGUpLCBvciBieQorZXh0cmFjdGluZyB0aGUgcmVsZXZhbnQgbW9kdWxlcyBmcm9tIG9uZSBvZiB0aGUgc3lzdGVtIG1hY3JvIGxpYnJhcmllcywKK2FuZCB1c2luZyBhbiBlZGl0b3IgdG8gY29uc3RydWN0IGEgQyBoZWFkZXIgZmlsZS4KKworQSBAY29kZXsjaW5jbHVkZX0gZmlsZSBuYW1lIGNhbm5vdCBjb250YWluIGEgREVDTkVUIG5vZGUgbmFtZS4gIFRoZQorcHJlcHJvY2Vzc29yIHJlcG9ydHMgYW4gSS9PIGVycm9yIGlmIHlvdSBhdHRlbXB0IHRvIHVzZSBhIG5vZGUgbmFtZSwKK3doZXRoZXIgZXhwbGljaXRseSwgb3IgaW1wbGljaXRseSB2aWEgYSBsb2dpY2FsIG5hbWUuCisKK0Bub2RlIEdsb2JhbCBEZWNsYXJhdGlvbnMKK0BzZWN0aW9uIEdsb2JhbCBEZWNsYXJhdGlvbnMgYW5kIFZNUworCitAZmluZGV4IEdMT0JBTFJFRgorQGZpbmRleCBHTE9CQUxERUYKK0BmaW5kZXggR0xPQkFMVkFMVUVERUYKK0BmaW5kZXggR0xPQkFMVkFMVUVSRUYKK0dOVSBDQyBkb2VzIG5vdCBwcm92aWRlIHRoZSBAY29kZXtnbG9iYWxyZWZ9LCBAY29kZXtnbG9iYWxkZWZ9IGFuZAorQGNvZGV7Z2xvYmFsdmFsdWV9IGtleXdvcmRzIG9mIFZBWC1DLiAgWW91IGNhbiBnZXQgdGhlIHNhbWUgZWZmZWN0IHdpdGgKK2FuIG9ic2N1cmUgZmVhdHVyZSBvZiBHQVMsIHRoZSBHTlUgYXNzZW1ibGVyLiAgKFRoaXMgcmVxdWlyZXMgR0FTCit2ZXJzaW9uIDEuMzkgb3IgbGF0ZXIuKSAgVGhlIGZvbGxvd2luZyBtYWNyb3MgYWxsb3cgeW91IHRvIHVzZSB0aGlzCitmZWF0dXJlIGluIGEgZmFpcmx5IG5hdHVyYWwgd2F5OgorCitAc21hbGxleGFtcGxlCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgR0xPQkFMUkVGKFRZUEUsTkFNRSkgICAgICAgICAgICAgICAgICAgICAgXAorICBUWVBFIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGFzbSAoIl8kJFBzZWN0QXR0cmlidXRlc19HTE9CQUxTWU1CT0wkJCIgI05BTUUpCisjZGVmaW5lIEdMT0JBTERFRihUWVBFLE5BTUUsVkFMVUUpICAgICAgICAgICAgICAgIFwKKyAgVFlQRSBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBhc20gKCJfJCRQc2VjdEF0dHJpYnV0ZXNfR0xPQkFMU1lNQk9MJCQiICNOQU1FKSBcCisgICAgPSBWQUxVRQorI2RlZmluZSBHTE9CQUxWQUxVRVJFRihUWVBFLE5BTUUpICAgICAgICAgICAgICAgICBcCisgIGNvbnN0IFRZUEUgTkFNRVsxXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYXNtICgiXyQkUHNlY3RBdHRyaWJ1dGVzX0dMT0JBTFZBTFVFJCQiICNOQU1FKQorI2RlZmluZSBHTE9CQUxWQUxVRURFRihUWVBFLE5BTUUsVkFMVUUpICAgICAgICAgICBcCisgIGNvbnN0IFRZUEUgTkFNRVsxXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYXNtICgiXyQkUHNlY3RBdHRyaWJ1dGVzX0dMT0JBTFZBTFVFJCQiICNOQU1FKSAgXAorICAgID0gQHtWQUxVRUB9CisjZWxzZQorI2RlZmluZSBHTE9CQUxSRUYoVFlQRSxOQU1FKSBcCisgIGdsb2JhbHJlZiBUWVBFIE5BTUUKKyNkZWZpbmUgR0xPQkFMREVGKFRZUEUsTkFNRSxWQUxVRSkgXAorICBnbG9iYWxkZWYgVFlQRSBOQU1FID0gVkFMVUUKKyNkZWZpbmUgR0xPQkFMVkFMVUVERUYoVFlQRSxOQU1FLFZBTFVFKSBcCisgIGdsb2JhbHZhbHVlIFRZUEUgTkFNRSA9IFZBTFVFCisjZGVmaW5lIEdMT0JBTFZBTFVFUkVGKFRZUEUsTkFNRSkgXAorICBnbG9iYWx2YWx1ZSBUWVBFIE5BTUUKKyNlbmRpZgorQGVuZCBzbWFsbGV4YW1wbGUKKworQG5vaW5kZW50CisoVGhlIEBjb2Rle18kJFBzZWN0QXR0cmlidXRlc19HTE9CQUxTWU1CT0x9IHByZWZpeCBhdCB0aGUgc3RhcnQgb2YgdGhlCituYW1lIGlzIHJlbW92ZWQgYnkgdGhlIGFzc2VtYmxlciwgYWZ0ZXIgaXQgaGFzIG1vZGlmaWVkIHRoZSBhdHRyaWJ1dGVzCitvZiB0aGUgc3ltYm9sKS4gIFRoZXNlIG1hY3JvcyBhcmUgcHJvdmlkZWQgaW4gdGhlIFZNUyBiaW5hcmllcworZGlzdHJpYnV0aW9uIGluIGEgaGVhZGVyIGZpbGUgQGZpbGV7R05VX0hBQ0tTLkh9LiAgQW4gZXhhbXBsZSBvZiB0aGUKK3VzYWdlIGlzOgorCitAZXhhbXBsZQorR0xPQkFMUkVGIChpbnQsIGlqayk7CitHTE9CQUxERUYgKGludCwgamtsLCAwKTsKK0BlbmQgZXhhbXBsZQorCitUaGUgbWFjcm9zIEBjb2Rle0dMT0JBTFJFRn0gYW5kIEBjb2Rle0dMT0JBTERFRn0gY2Fubm90IGJlIHVzZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGZvciBhcnJheXMsIHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBpbnNlcnQgdGhlIGFycmF5CitkaW1lbnNpb24gaW50byB0aGUgZGVjbGFyYXRpb24gYXQgdGhlIHJpZ2h0IHBsYWNlLiAgSG93ZXZlciwgeW91IGNhbgorZGVjbGFyZSBhbiBhcnJheSB3aXRoIHRoZXNlIG1hY3JvcyBpZiB5b3UgZmlyc3QgZGVmaW5lIGEgdHlwZWRlZiBmb3IgdGhlCithcnJheSB0eXBlLCBsaWtlIHRoaXM6CisKK0BleGFtcGxlCit0eXBlZGVmIGludCBpbnR2ZWN0b3JbMTBdOworR0xPQkFMUkVGIChpbnR2ZWN0b3IsIGZvbyk7CitAZW5kIGV4YW1wbGUKKworQXJyYXkgYW5kIHN0cnVjdHVyZSBpbml0aWFsaXplcnMgd2lsbCBhbHNvIGJyZWFrIHRoZSBtYWNyb3M7IHlvdSBjYW4KK2RlZmluZSB0aGUgaW5pdGlhbGl6ZXIgdG8gYmUgYSBtYWNybyBvZiBpdHMgb3duLCBvciB5b3UgY2FuIGV4cGFuZCB0aGUKK0Bjb2Rle0dMT0JBTERFRn0gbWFjcm8gYnkgaGFuZC4gIFlvdSBtYXkgZmluZCBhIGNhc2Ugd2hlcmUgeW91IHdpc2ggdG8KK3VzZSB0aGUgQGNvZGV7R0xPQkFMREVGfSBtYWNybyB3aXRoIGEgbGFyZ2UgYXJyYXksIGJ1dCB5b3UgYXJlIG5vdAoraW50ZXJlc3RlZCBpbiBleHBsaWNpdGx5IGluaXRpYWxpemluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5LiAgSW4KK3N1Y2ggY2FzZXMgeW91IGNhbiB1c2UgYW4gaW5pdGlhbGl6ZXIgbGlrZTogQGNvZGV7QHswLEB9fSwgd2hpY2ggd2lsbAoraW5pdGlhbGl6ZSB0aGUgZW50aXJlIGFycmF5IHRvIEBjb2RlezB9LgorCitBIHNob3J0Y29taW5nIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgdGhhdCBhIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGgKK0Bjb2Rle0dMT0JBTFZBTFVFUkVGfSBvciBAY29kZXtHTE9CQUxWQUxVRURFRn0gaXMgYWx3YXlzIGFuIGFycmF5LiAgRm9yCitleGFtcGxlLCB0aGUgZGVjbGFyYXRpb246CisKK0BleGFtcGxlCitHTE9CQUxWQUxVRVJFRihpbnQsIGlqayk7CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitkZWNsYXJlcyB0aGUgdmFyaWFibGUgQGNvZGV7aWprfSBhcyBhbiBhcnJheSBvZiB0eXBlIEBjb2Rle2ludCBbMV19LgorVGhpcyBpcyBkb25lIGJlY2F1c2UgYSBnbG9iYWx2YWx1ZSBpcyBhY3R1YWxseSBhIGNvbnN0YW50OyBpdHMgYGB2YWx1ZScnCitpcyB3aGF0IHRoZSBsaW5rZXIgd291bGQgbm9ybWFsbHkgY29uc2lkZXIgYW4gYWRkcmVzcy4gIFRoYXQgaXMgbm90IGhvdworYW4gaW50ZWdlciB2YWx1ZSB3b3JrcyBpbiBDLCBidXQgaXQgaXMgaG93IGFuIGFycmF5IHdvcmtzLiAgU28gdHJlYXRpbmcKK3RoZSBzeW1ib2wgYXMgYW4gYXJyYXkgbmFtZSBnaXZlcyBjb25zaXN0ZW50IHJlc3VsdHMtLS13aXRoIHRoZQorZXhjZXB0aW9uIHRoYXQgdGhlIHZhbHVlIHNlZW1zIHRvIGhhdmUgdGhlIHdyb25nIHR5cGUuICBAc3Ryb25ne0Rvbid0Cit0cnkgdG8gYWNjZXNzIGFuIGVsZW1lbnQgb2YgdGhlIGFycmF5Ln0gIEl0IGRvZXNuJ3QgaGF2ZSBhbnkgZWxlbWVudHMuCitUaGUgYXJyYXkgYGBhZGRyZXNzJycgbWF5IG5vdCBiZSB0aGUgYWRkcmVzcyBvZiBhY3R1YWwgc3RvcmFnZS4KKworVGhlIGZhY3QgdGhhdCB0aGUgc3ltYm9sIGlzIGFuIGFycmF5IG1heSBsZWFkIHRvIHdhcm5pbmdzIHdoZXJlIHRoZQordmFyaWFibGUgaXMgdXNlZC4gIEluc2VydCB0eXBlIGNhc3RzIHRvIGF2b2lkIHRoZSB3YXJuaW5ncy4gIEhlcmUgaXMgYW4KK2V4YW1wbGU7IGl0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgQU5TSSBDIGZlYXR1cmUgYWxsb3dpbmcgbWFjcm9zIHRoYXQKK2V4cGFuZCB0byB1c2UgdGhlIHNhbWUgbmFtZSBhcyB0aGUgbWFjcm8gaXRzZWxmLgorCitAZXhhbXBsZQorR0xPQkFMVkFMVUVSRUYgKGludCwgc3MkX25vcm1hbCk7CitHTE9CQUxWQUxVRURFRiAoaW50LCB4eXp6eSwxMjMpOworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIHNzJF9ub3JtYWwgKChpbnQpIHNzJF9ub3JtYWwpCisjZGVmaW5lIHh5enp5ICgoaW50KSB4eXp6eSkKKyNlbmRpZgorQGVuZCBleGFtcGxlCisKK0Rvbid0IHVzZSBAY29kZXtnbG9iYWxkZWZ9IG9yIEBjb2Rle2dsb2JhbHJlZn0gd2l0aCBhIHZhcmlhYmxlIHdob3NlCit0eXBlIGlzIGFuIGVudW1lcmF0aW9uIHR5cGU7IHRoaXMgaXMgbm90IGltcGxlbWVudGVkLiAgSW5zdGVhZCwgbWFrZSB0aGUKK3ZhcmlhYmxlIGFuIGludGVnZXIsIGFuZCB1c2UgYSBAY29kZXtnbG9iYWx2YWx1ZWRlZn0gZm9yIGVhY2ggb2YgdGhlCitlbnVtZXJhdGlvbiB2YWx1ZXMuICBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmU6CisKK0BleGFtcGxlCisjaWZkZWYgX19HTlVDX18KK0dMT0JBTERFRiAoaW50LCBjb2xvciwgMCk7CitHTE9CQUxWQUxVRURFRiAoaW50LCBSRUQsIDApOworR0xPQkFMVkFMVUVERUYgKGludCwgQkxVRSwgMSk7CitHTE9CQUxWQUxVRURFRiAoaW50LCBHUkVFTiwgMyk7CisjZWxzZQorZW51bSBnbG9iYWxkZWYgY29sb3IgQHtSRUQsIEJMVUUsIEdSRUVOID0gM0B9OworI2VuZGlmCitAZW5kIGV4YW1wbGUKKworQG5vZGUgVk1TIE1pc2MKK0BzZWN0aW9uIE90aGVyIFZNUyBJc3N1ZXMKKworQGNpbmRleCBleGl0IHN0YXR1cyBhbmQgVk1TCitAY2luZGV4IHJldHVybiB2YWx1ZSBvZiBAY29kZXttYWlufQorQGNpbmRleCBAY29kZXttYWlufSBhbmQgdGhlIGV4aXQgc3RhdHVzCitHTlUgQ0MgYXV0b21hdGljYWxseSBhcnJhbmdlcyBmb3IgQGNvZGV7bWFpbn0gdG8gcmV0dXJuIDEgYnkgZGVmYXVsdCBpZgoreW91IGZhaWwgdG8gc3BlY2lmeSBhbiBleHBsaWNpdCByZXR1cm4gdmFsdWUuICBUaGlzIHdpbGwgYmUgaW50ZXJwcmV0ZWQKK2J5IFZNUyBhcyBhIHN0YXR1cyBjb2RlIGluZGljYXRpbmcgYSBub3JtYWwgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorVmVyc2lvbiAxIG9mIEdOVSBDQyBkaWQgbm90IHByb3ZpZGUgdGhpcyBkZWZhdWx0LgorCitHTlUgQ0Mgb24gVk1TIHdvcmtzIG9ubHkgd2l0aCB0aGUgR05VIGFzc2VtYmxlciwgR0FTLiAgWW91IG5lZWQgdmVyc2lvbgorMS4zNyBvciBsYXRlciBvZiBHQVMgaW4gb3JkZXIgdG8gcHJvZHVjZSB2YWx1ZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yCit0aGUgVk1TIGRlYnVnZ2VyLiAgVXNlIHRoZSBvcmRpbmFyeSBWTVMgbGlua2VyIHdpdGggdGhlIG9iamVjdCBmaWxlcworcHJvZHVjZWQgYnkgR0FTLgorCitAY2luZGV4IHNoYXJlZCBWTVMgcnVuIHRpbWUgc3lzdGVtCitAY2luZGV4IEBmaWxle1ZBWENSVEx9CitVbmRlciBwcmV2aW91cyB2ZXJzaW9ucyBvZiBHTlUgQ0MsIHRoZSBnZW5lcmF0ZWQgY29kZSB3b3VsZCBvY2Nhc2lvbmFsbHkKK2dpdmUgc3RyYW5nZSByZXN1bHRzIHdoZW4gbGlua2VkIHRvIHRoZSBzaGFyYWJsZSBAZmlsZXtWQVhDUlRMfSBsaWJyYXJ5LgorTm93IHRoaXMgc2hvdWxkIHdvcmsuCisKK0EgY2F2ZWF0IGZvciB1c2Ugb2YgQGNvZGV7Y29uc3R9IGdsb2JhbCB2YXJpYWJsZXM6IHRoZSBAY29kZXtjb25zdH0KK21vZGlmaWVyIG11c3QgYmUgc3BlY2lmaWVkIGluIGV2ZXJ5IGV4dGVybmFsIGRlY2xhcmF0aW9uIG9mIHRoZSB2YXJpYWJsZQoraW4gYWxsIG9mIHRoZSBzb3VyY2UgZmlsZXMgdGhhdCB1c2UgdGhhdCB2YXJpYWJsZS4gIE90aGVyd2lzZSB0aGUgbGlua2VyCit3aWxsIGlzc3VlIHdhcm5pbmdzIGFib3V0IGNvbmZsaWN0aW5nIGF0dHJpYnV0ZXMgZm9yIHRoZSB2YXJpYWJsZS4gIFlvdXIKK3Byb2dyYW0gd2lsbCBzdGlsbCB3b3JrIGRlc3BpdGUgdGhlIHdhcm5pbmdzLCBidXQgdGhlIHZhcmlhYmxlIHdpbGwgYmUKK3BsYWNlZCBpbiB3cml0YWJsZSBzdG9yYWdlLgorCitAY2luZGV4IG5hbWUgYXVnbWVudGF0aW9uCitAY2luZGV4IGNhc2Ugc2Vuc2l0aXZpdHkgYW5kIFZNUworQGNpbmRleCBWTVMgYW5kIGNhc2Ugc2Vuc2l0aXZpdHkKK0FsdGhvdWdoIHRoZSBWTVMgbGlua2VyIGRvZXMgZGlzdGluZ3Vpc2ggYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgY2FzZQorbGV0dGVycyBpbiBnbG9iYWwgc3ltYm9scywgbW9zdCBWTVMgY29tcGlsZXJzIGNvbnZlcnQgYWxsIHN1Y2ggc3ltYm9scworaW50byB1cHBlciBjYXNlIGFuZCBtb3N0IHJ1bi10aW1lIGxpYnJhcnkgcm91dGluZXMgYWxzbyBoYXZlIHVwcGVyIGNhc2UKK25hbWVzLiAgVG8gYmUgYWJsZSB0byByZWxpYWJseSBjYWxsIHN1Y2ggcm91dGluZXMsIEdOVSBDQyAoYnkgbWVhbnMgb2YKK3RoZSBhc3NlbWJsZXIgR0FTKSBjb252ZXJ0cyBnbG9iYWwgc3ltYm9scyBpbnRvIHVwcGVyIGNhc2UgbGlrZSBvdGhlcgorVk1TIGNvbXBpbGVycy4gIEhvd2V2ZXIsIHNpbmNlIHRoZSB1c3VhbCBwcmFjdGljZSBpbiBDIGlzIHRvIGRpc3Rpbmd1aXNoCitjYXNlLCBHTlUgQ0MgKHZpYSBHQVMpIHRyaWVzIHRvIHByZXNlcnZlIHVzdWFsIEMgYmVoYXZpb3IgYnkgYXVnbWVudGluZworZWFjaCBuYW1lIHRoYXQgaXMgbm90IGFsbCBsb3dlciBjYXNlLiAgVGhpcyBtZWFucyB0cnVuY2F0aW5nIHRoZSBuYW1lCit0byBhdCBtb3N0IDIzIGNoYXJhY3RlcnMgYW5kIHRoZW4gYWRkaW5nIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgZW5kCit3aGljaCBlbmNvZGUgdGhlIGNhc2UgcGF0dGVybiBvZiB0aG9zZSAyMy4gICBOYW1lcyB3aGljaCBjb250YWluIGF0CitsZWFzdCBvbmUgZG9sbGFyIHNpZ24gYXJlIGFuIGV4Y2VwdGlvbjsgdGhleSBhcmUgY29udmVydGVkIGRpcmVjdGx5IGludG8KK3VwcGVyIGNhc2Ugd2l0aG91dCBhdWdtZW50YXRpb24uCisKK05hbWUgYXVnbWVudGF0aW9uIHlpZWxkcyBiYWQgcmVzdWx0cyBmb3IgcHJvZ3JhbXMgdGhhdCB1c2UgcHJlY29tcGlsZWQKK2xpYnJhcmllcyAoc3VjaCBhcyBYbGliKSB3aGljaCB3ZXJlIGdlbmVyYXRlZCBieSBhbm90aGVyIGNvbXBpbGVyLiAgWW91CitjYW4gdXNlIHRoZSBjb21waWxlciBvcHRpb24gQHNhbXB7L05PQ0FTRV9IQUNLfSB0byBpbmhpYml0IGF1Z21lbnRhdGlvbjsKK2l0IG1ha2VzIGV4dGVybmFsIEMgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY2FzZS1pbmRlcGVuZGVudCBhcyBpcyB1c3VhbAorb24gVk1TLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHdyaXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBmdW5jdGlvbnMKK2FuZCB2YXJpYWJsZXMgaW4gc3VjaCBsaWJyYXJpZXMgdXNpbmcgbG93ZXIgY2FzZTsgdGhpcyB3aWxsIHdvcmsgb24gVk1TLAorYnV0IGlzIG5vdCBwb3J0YWJsZSB0byBvdGhlciBzeXN0ZW1zLiAgVGhlIGNvbXBpbGVyIG9wdGlvbiBAc2FtcHsvTkFNRVN9CithbHNvIHByb3ZpZGVzIGNvbnRyb2wgb3ZlciBnbG9iYWwgbmFtZSBoYW5kbGluZy4KKworRnVuY3Rpb24gYW5kIHZhcmlhYmxlIG5hbWVzIGFyZSBoYW5kbGVkIHNvbWV3aGF0IGRpZmZlcmVudGx5IHdpdGggR05VCitDKysuICBUaGUgR05VIEMrKyBjb21waWxlciBwZXJmb3JtcyBAZGZue25hbWUgbWFuZ2xpbmd9IG9uIGZ1bmN0aW9uCituYW1lcywgd2hpY2ggbWVhbnMgdGhhdCBpdCBhZGRzIGluZm9ybWF0aW9uIHRvIHRoZSBmdW5jdGlvbiBuYW1lIHRvCitkZXNjcmliZSB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgdGhlIGZ1bmN0aW9uIHRha2VzLiAgT25lCityZXN1bHQgb2YgdGhpcyBpcyB0aGF0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gY2FuIGJlY29tZSB2ZXJ5IGxvbmcuCitTaW5jZSB0aGUgVk1TIGxpbmtlciBvbmx5IHJlY29nbml6ZXMgdGhlIGZpcnN0IDMxIGNoYXJhY3RlcnMgaW4gYSBuYW1lLAorc3BlY2lhbCBhY3Rpb24gaXMgdGFrZW4gdG8gZW5zdXJlIHRoYXQgZWFjaCBmdW5jdGlvbiBhbmQgdmFyaWFibGUgaGFzIGEKK3VuaXF1ZSBuYW1lIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGluIDMxIGNoYXJhY3RlcnMuCisKK0lmIHRoZSBuYW1lIChwbHVzIGEgbmFtZSBhdWdtZW50YXRpb24sIGlmIHJlcXVpcmVkKSBpcyBsZXNzIHRoYW4gMzIKK2NoYXJhY3RlcnMgaW4gbGVuZ3RoLCB0aGVuIG5vIHNwZWNpYWwgYWN0aW9uIGlzIHBlcmZvcm1lZC4gIElmIHRoZSBuYW1lCitpcyBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLCB0aGUgYXNzZW1ibGVyIChHQVMpIHdpbGwgZ2VuZXJhdGUgYQoraGFzaCBzdHJpbmcgYmFzZWQgdXBvbiB0aGUgZnVuY3Rpb24gbmFtZSwgdHJ1bmNhdGUgdGhlIGZ1bmN0aW9uIG5hbWUgdG8KKzIzIGNoYXJhY3RlcnMsIGFuZCBhcHBlbmQgdGhlIGhhc2ggc3RyaW5nIHRvIHRoZSB0cnVuY2F0ZWQgbmFtZS4gIElmIHRoZQorQHNhbXB7L1ZFUkJPU0V9IGNvbXBpbGVyIG9wdGlvbiBpcyB1c2VkLCB0aGUgYXNzZW1ibGVyIHdpbGwgcHJpbnQgYm90aAordGhlIGZ1bGwgYW5kIHRydW5jYXRlZCBuYW1lcyBvZiBlYWNoIHN5bWJvbCB0aGF0IGlzIHRydW5jYXRlZC4KKworVGhlIEBzYW1wey9OT0NBU0VfSEFDS30gY29tcGlsZXIgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIHlvdSBhcmUKK2NvbXBpbGluZyBwcm9ncmFtcyB0aGF0IHVzZSBsaWJnKysuICBsaWJnKysgaGFzIHNldmVyYWwgaW5zdGFuY2VzIG9mCitvYmplY3RzIChpLmUuICBAY29kZXtGaWxlYnVmfSBhbmQgQGNvZGV7ZmlsZWJ1Zn0pIHdoaWNoIGJlY29tZQoraW5kaXN0aW5ndWlzaGFibGUgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIGVudmlyb25tZW50LiAgVGhpcyBsZWFkcyB0bworY2FzZXMgd2hlcmUgeW91IG5lZWQgdG8gaW5oaWJpdCBhdWdtZW50YXRpb24gc2VsZWN0aXZlbHkgKGlmIHlvdSB3ZXJlCit1c2luZyBsaWJnKysgYW5kIFhsaWIgaW4gdGhlIHNhbWUgcHJvZ3JhbSwgZm9yIGV4YW1wbGUpLiAgVGhlcmUgaXMgbm8KK3NwZWNpYWwgZmVhdHVyZSBmb3IgZG9pbmcgdGhpcywgYnV0IHlvdSBjYW4gZ2V0IHRoZSByZXN1bHQgYnkgZGVmaW5pbmcgYQorbWFjcm8gZm9yIGVhY2ggbWl4ZWQgY2FzZSBzeW1ib2wgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIGluaGliaXQKK2F1Z21lbnRhdGlvbi4gIFRoZSBtYWNybyBzaG91bGQgZXhwYW5kIGludG8gdGhlIGxvd2VyIGNhc2UgZXF1aXZhbGVudCBvZgoraXRzZWxmLiAgRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCisjZGVmaW5lIFN0dURseUNhcFMgc3R1ZGx5Y2FwcworQGVuZCBleGFtcGxlCisKK1RoZXNlIG1hY3JvIGRlZmluaXRpb25zIGNhbiBiZSBwbGFjZWQgaW4gYSBoZWFkZXIgZmlsZSB0byBtaW5pbWl6ZSB0aGUKK251bWJlciBvZiBjaGFuZ2VzIHRvIHlvdXIgc291cmNlIGNvZGUuCitAZW5kIGlmc2V0CisKK0BpZnNldCBJTlRFUk5BTFMKK0Bub2RlIFBvcnRhYmlsaXR5CitAY2hhcHRlciBHTlUgQ0MgYW5kIFBvcnRhYmlsaXR5CitAY2luZGV4IHBvcnRhYmlsaXR5CitAY2luZGV4IEdOVSBDQyBhbmQgcG9ydGFiaWxpdHkKKworVGhlIG1haW4gZ29hbCBvZiBHTlUgQ0Mgd2FzIHRvIG1ha2UgYSBnb29kLCBmYXN0IGNvbXBpbGVyIGZvciBtYWNoaW5lcyBpbgordGhlIGNsYXNzIHRoYXQgdGhlIEdOVSBzeXN0ZW0gYWltcyB0byBydW4gb246IDMyLWJpdCBtYWNoaW5lcyB0aGF0IGFkZHJlc3MKKzgtYml0IGJ5dGVzIGFuZCBoYXZlIHNldmVyYWwgZ2VuZXJhbCByZWdpc3RlcnMuICBFbGVnYW5jZSwgdGhlb3JldGljYWwKK3Bvd2VyIGFuZCBzaW1wbGljaXR5IGFyZSBvbmx5IHNlY29uZGFyeS4KKworR05VIENDIGdldHMgbW9zdCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBtYWNoaW5lIGZyb20gYSBtYWNoaW5lCitkZXNjcmlwdGlvbiB3aGljaCBnaXZlcyBhbiBhbGdlYnJhaWMgZm9ybXVsYSBmb3IgZWFjaCBvZiB0aGUgbWFjaGluZSdzCitpbnN0cnVjdGlvbnMuICBUaGlzIGlzIGEgdmVyeSBjbGVhbiB3YXkgdG8gZGVzY3JpYmUgdGhlIHRhcmdldC4gIEJ1dCB3aGVuCit0aGUgY29tcGlsZXIgbmVlZHMgaW5mb3JtYXRpb24gdGhhdCBpcyBkaWZmaWN1bHQgdG8gZXhwcmVzcyBpbiB0aGlzCitmYXNoaW9uLCBJIGhhdmUgbm90IGhlc2l0YXRlZCB0byBkZWZpbmUgYW4gYWQtaG9jIHBhcmFtZXRlciB0byB0aGUgbWFjaGluZQorZGVzY3JpcHRpb24uICBUaGUgcHVycG9zZSBvZiBwb3J0YWJpbGl0eSBpcyB0byByZWR1Y2UgdGhlIHRvdGFsIHdvcmsgbmVlZGVkCitvbiB0aGUgY29tcGlsZXI7IGl0IHdhcyBub3Qgb2YgaW50ZXJlc3QgZm9yIGl0cyBvd24gc2FrZS4KKworQGNpbmRleCBlbmRpYW5uZXNzCitAY2luZGV4IGF1dG9pbmNyZW1lbnQgYWRkcmVzc2luZywgYXZhaWxhYmlsaXR5CitAZmluZGV4IGFib3J0CitHTlUgQ0MgZG9lcyBub3QgY29udGFpbiBtYWNoaW5lIGRlcGVuZGVudCBjb2RlLCBidXQgaXQgZG9lcyBjb250YWluIGNvZGUKK3RoYXQgZGVwZW5kcyBvbiBtYWNoaW5lIHBhcmFtZXRlcnMgc3VjaCBhcyBlbmRpYW5uZXNzICh3aGV0aGVyIHRoZSBtb3N0CitzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgaGlnaGVzdCBvciBsb3dlc3QgYWRkcmVzcyBvZiB0aGUgYnl0ZXMgaW4gYSB3b3JkKQorYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nLiAgSW4gdGhlIFJUTC1nZW5lcmF0aW9uCitwYXNzLCBpdCBpcyBvZnRlbiBuZWNlc3NhcnkgdG8gaGF2ZSBtdWx0aXBsZSBzdHJhdGVnaWVzIGZvciBnZW5lcmF0aW5nIGNvZGUKK2ZvciBhIHBhcnRpY3VsYXIga2luZCBvZiBzeW50YXggdHJlZSwgc3RyYXRlZ2llcyB0aGF0IGFyZSB1c2FibGUgZm9yIGRpZmZlcmVudAorY29tYmluYXRpb25zIG9mIHBhcmFtZXRlcnMuICBPZnRlbiBJIGhhdmUgbm90IHRyaWVkIHRvIGFkZHJlc3MgYWxsIHBvc3NpYmxlCitjYXNlcywgYnV0IG9ubHkgdGhlIGNvbW1vbiBvbmVzIG9yIG9ubHkgdGhlIG9uZXMgdGhhdCBJIGhhdmUgZW5jb3VudGVyZWQuCitBcyBhIHJlc3VsdCwgYSBuZXcgdGFyZ2V0IG1heSByZXF1aXJlIGFkZGl0aW9uYWwgc3RyYXRlZ2llcy4gIFlvdSB3aWxsIGtub3cKK2lmIHRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBjb21waWxlciB3aWxsIGNhbGwgQGNvZGV7YWJvcnR9LiAgRm9ydHVuYXRlbHksCit0aGUgbmV3IHN0cmF0ZWdpZXMgY2FuIGJlIGFkZGVkIGluIGEgbWFjaGluZS1pbmRlcGVuZGVudCBmYXNoaW9uLCBhbmQgd2lsbAorYWZmZWN0IG9ubHkgdGhlIHRhcmdldCBtYWNoaW5lcyB0aGF0IG5lZWQgdGhlbS4KK0BlbmQgaWZzZXQKKworQGlmc2V0IElOVEVSTkFMUworQG5vZGUgSW50ZXJmYWNlCitAY2hhcHRlciBJbnRlcmZhY2luZyB0byBHTlUgQ0MgT3V0cHV0CitAY2luZGV4IGludGVyZmFjaW5nIHRvIEdOVSBDQyBvdXRwdXQKK0BjaW5kZXggcnVuLXRpbWUgY29udmVudGlvbnMKK0BjaW5kZXggZnVuY3Rpb24gY2FsbCBjb252ZW50aW9ucworQGNpbmRleCBjb252ZW50aW9ucywgcnVuLXRpbWUKKworR05VIENDIGlzIG5vcm1hbGx5IGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIGNhbGxpbmcgY29udmVudGlvbgorbm9ybWFsbHkgaW4gdXNlIG9uIHRoZSB0YXJnZXQgc3lzdGVtLiAgVGhpcyBpcyBkb25lIHdpdGggdGhlCittYWNoaW5lLWRlc2NyaXB0aW9uIG1hY3JvcyBkZXNjcmliZWQgKEBweHJlZntUYXJnZXQgTWFjcm9zfSkuCisKK0BjaW5kZXggdW5pb25zLCByZXR1cm5pbmcKK0BjaW5kZXggc3RydWN0dXJlcywgcmV0dXJuaW5nCitAY2luZGV4IHJldHVybmluZyBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMKK0hvd2V2ZXIsIHJldHVybmluZyBvZiBzdHJ1Y3R1cmUgYW5kIHVuaW9uIHZhbHVlcyBpcyBkb25lIGRpZmZlcmVudGx5IG9uCitzb21lIHRhcmdldCBtYWNoaW5lcy4gIEFzIGEgcmVzdWx0LCBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aCBQQ0MKK3JldHVybmluZyBzdWNoIHR5cGVzIGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBjb2RlIGNvbXBpbGVkIHdpdGggR05VIENDLAorYW5kIHZpY2UgdmVyc2EuICBUaGlzIGRvZXMgbm90IGNhdXNlIHRyb3VibGUgb2Z0ZW4gYmVjYXVzZSBmZXcgVW5peAorbGlicmFyeSByb3V0aW5lcyByZXR1cm4gc3RydWN0dXJlcyBvciB1bmlvbnMuCisKK0dOVSBDQyBjb2RlIHJldHVybnMgc3RydWN0dXJlcyBhbmQgdW5pb25zIHRoYXQgYXJlIDEsIDIsIDQgb3IgOCBieXRlcworbG9uZyBpbiB0aGUgc2FtZSByZWdpc3RlcnMgdXNlZCBmb3IgQGNvZGV7aW50fSBvciBAY29kZXtkb3VibGV9IHJldHVybgordmFsdWVzLiAgKEdOVSBDQyB0eXBpY2FsbHkgYWxsb2NhdGVzIHZhcmlhYmxlcyBvZiBzdWNoIHR5cGVzIGluCityZWdpc3RlcnMgYWxzby4pICBTdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgb2Ygb3RoZXIgc2l6ZXMgYXJlIHJldHVybmVkIGJ5CitzdG9yaW5nIHRoZW0gaW50byBhbiBhZGRyZXNzIHBhc3NlZCBieSB0aGUgY2FsbGVyICh1c3VhbGx5IGluIGEKK3JlZ2lzdGVyKS4gIFRoZSBtYWNoaW5lLWRlc2NyaXB0aW9uIG1hY3JvcyBAY29kZXtTVFJVQ1RfVkFMVUV9IGFuZAorQGNvZGV7U1RSVUNUX0lOQ09NSU5HX1ZBTFVFfSB0ZWxsIEdOVSBDQyB3aGVyZSB0byBwYXNzIHRoaXMgYWRkcmVzcy4KKworQnkgY29udHJhc3QsIFBDQyBvbiBtb3N0IHRhcmdldCBtYWNoaW5lcyByZXR1cm5zIHN0cnVjdHVyZXMgYW5kIHVuaW9ucworb2YgYW55IHNpemUgYnkgY29weWluZyB0aGUgZGF0YSBpbnRvIGFuIGFyZWEgb2Ygc3RhdGljIHN0b3JhZ2UsIGFuZCB0aGVuCityZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzdG9yYWdlIGFzIGlmIGl0IHdlcmUgYSBwb2ludGVyIHZhbHVlLgorVGhlIGNhbGxlciBtdXN0IGNvcHkgdGhlIGRhdGEgZnJvbSB0aGF0IG1lbW9yeSBhcmVhIHRvIHRoZSBwbGFjZSB3aGVyZQordGhlIHZhbHVlIGlzIHdhbnRlZC4gIFRoaXMgaXMgc2xvd2VyIHRoYW4gdGhlIG1ldGhvZCB1c2VkIGJ5IEdOVSBDQywgYW5kCitmYWlscyB0byBiZSByZWVudHJhbnQuCisKK09uIHNvbWUgdGFyZ2V0IG1hY2hpbmVzLCBzdWNoIGFzIFJJU0MgbWFjaGluZXMgYW5kIHRoZSA4MDM4NiwgdGhlCitzdGFuZGFyZCBzeXN0ZW0gY29udmVudGlvbiBpcyB0byBwYXNzIHRvIHRoZSBzdWJyb3V0aW5lIHRoZSBhZGRyZXNzIG9mCit3aGVyZSB0byByZXR1cm4gdGhlIHZhbHVlLiAgT24gdGhlc2UgbWFjaGluZXMsIEdOVSBDQyBoYXMgYmVlbgorY29uZmlndXJlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIGNvbXBpbGVyLCB3aGVuIHRoaXMgbWV0aG9kCitpcyB1c2VkLiAgSXQgbWF5IG5vdCBiZSBjb21wYXRpYmxlIGZvciBzdHJ1Y3R1cmVzIG9mIDEsIDIsIDQgb3IgOCBieXRlcy4KKworQGNpbmRleCBhcmd1bWVudCBwYXNzaW5nCitAY2luZGV4IHBhc3NpbmcgYXJndW1lbnRzCitHTlUgQ0MgdXNlcyB0aGUgc3lzdGVtJ3Mgc3RhbmRhcmQgY29udmVudGlvbiBmb3IgcGFzc2luZyBhcmd1bWVudHMuICBPbgorc29tZSBtYWNoaW5lcywgdGhlIGZpcnN0IGZldyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnM7IGluCitvdGhlcnMsIGFsbCBhcmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gIEl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZQorcmVnaXN0ZXJzIGZvciBhcmd1bWVudCBwYXNzaW5nIG9uIGFueSBtYWNoaW5lLCBhbmQgdGhpcyB3b3VsZCBwcm9iYWJseQorcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgc3BlZWR1cC4gIEJ1dCB0aGUgcmVzdWx0IHdvdWxkIGJlIGNvbXBsZXRlCitpbmNvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHRoYXQgZm9sbG93cyB0aGUgc3RhbmRhcmQgY29udmVudGlvbi4gIFNvIHRoaXMKK2NoYW5nZSBpcyBwcmFjdGljYWwgb25seSBpZiB5b3UgYXJlIHN3aXRjaGluZyB0byBHTlUgQ0MgYXMgdGhlIHNvbGUgQworY29tcGlsZXIgZm9yIHRoZSBzeXN0ZW0uICBXZSBtYXkgaW1wbGVtZW50IHJlZ2lzdGVyIGFyZ3VtZW50IHBhc3Npbmcgb24KK2NlcnRhaW4gbWFjaGluZXMgb25jZSB3ZSBoYXZlIGEgY29tcGxldGUgR05VIHN5c3RlbSBzbyB0aGF0IHdlIGNhbgorY29tcGlsZSB0aGUgbGlicmFyaWVzIHdpdGggR05VIENDLgorCitPbiBzb21lIG1hY2hpbmVzIChwYXJ0aWN1bGFybHkgdGhlIFNwYXJjKSwgY2VydGFpbiB0eXBlcyBvZiBhcmd1bWVudHMKK2FyZSBwYXNzZWQgYGBieSBpbnZpc2libGUgcmVmZXJlbmNlJycuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzCitzdG9yZWQgaW4gbWVtb3J5LCBhbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBsb2NhdGlvbiBpcyBwYXNzZWQgdG8KK3RoZSBzdWJyb3V0aW5lLgorCitAY2luZGV4IEBjb2Rle2xvbmdqbXB9IGFuZCBhdXRvbWF0aWMgdmFyaWFibGVzCitJZiB5b3UgdXNlIEBjb2Rle2xvbmdqbXB9LCBiZXdhcmUgb2YgYXV0b21hdGljIHZhcmlhYmxlcy4gIEFOU0kgQyBzYXlzIHRoYXQKK2F1dG9tYXRpYyB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGRlY2xhcmVkIEBjb2Rle3ZvbGF0aWxlfSBoYXZlIHVuZGVmaW5lZAordmFsdWVzIGFmdGVyIGEgQGNvZGV7bG9uZ2ptcH0uICBBbmQgdGhpcyBpcyBhbGwgR05VIENDIHByb21pc2VzIHRvIGRvLAorYmVjYXVzZSBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byByZXN0b3JlIHJlZ2lzdGVyIHZhcmlhYmxlcyBjb3JyZWN0bHksIGFuZAorb25lIG9mIEdOVSBDQydzIGZlYXR1cmVzIGlzIHRoYXQgaXQgY2FuIHB1dCB2YXJpYWJsZXMgaW4gcmVnaXN0ZXJzIHdpdGhvdXQKK3lvdXIgYXNraW5nIGl0IHRvLgorCitJZiB5b3Ugd2FudCBhIHZhcmlhYmxlIHRvIGJlIHVuYWx0ZXJlZCBieSBAY29kZXtsb25nam1wfSwgYW5kIHlvdSBkb24ndAord2FudCB0byB3cml0ZSBAY29kZXt2b2xhdGlsZX0gYmVjYXVzZSBvbGQgQyBjb21waWxlcnMgZG9uJ3QgYWNjZXB0IGl0LAoranVzdCB0YWtlIHRoZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZS4gIElmIGEgdmFyaWFibGUncyBhZGRyZXNzIGlzIGV2ZXIKK3Rha2VuLCBldmVuIGlmIGp1c3QgdG8gY29tcHV0ZSBpdCBhbmQgaWdub3JlIGl0LCB0aGVuIHRoZSB2YXJpYWJsZSBjYW5ub3QKK2dvIGluIGEgcmVnaXN0ZXI6CisKK0BleGFtcGxlCitAeworICBpbnQgY2FyZWZ1bDsKKyAgJmNhcmVmdWw7CisgIEBkb3Rze30KK0B9CitAZW5kIGV4YW1wbGUKKworQGNpbmRleCBhcml0aG1ldGljIGxpYnJhcmllcworQGNpbmRleCBtYXRoIGxpYnJhcmllcworQ29kZSBjb21waWxlZCB3aXRoIEdOVSBDQyBtYXkgY2FsbCBjZXJ0YWluIGxpYnJhcnkgcm91dGluZXMuICBNb3N0IG9mCit0aGVtIGhhbmRsZSBhcml0aG1ldGljIGZvciB3aGljaCB0aGVyZSBhcmUgbm8gaW5zdHJ1Y3Rpb25zLiAgVGhpcworaW5jbHVkZXMgbXVsdGlwbHkgYW5kIGRpdmlkZSBvbiBzb21lIG1hY2hpbmVzLCBhbmQgZmxvYXRpbmcgcG9pbnQKK29wZXJhdGlvbnMgb24gYW55IG1hY2hpbmUgZm9yIHdoaWNoIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgaXMgZGlzYWJsZWQKK3dpdGggQHNhbXB7LW1zb2Z0LWZsb2F0fS4gIFNvbWUgc3RhbmRhcmQgcGFydHMgb2YgdGhlIEMgbGlicmFyeSwgc3VjaCBhcworQGNvZGV7YmNvcHl9IG9yIEBjb2Rle21lbWNweX0sIGFyZSBhbHNvIGNhbGxlZCBhdXRvbWF0aWNhbGx5LiAgVGhlIHVzdWFsCitmdW5jdGlvbiBjYWxsIGludGVyZmFjZSBpcyB1c2VkIGZvciBjYWxsaW5nIHRoZSBsaWJyYXJ5IHJvdXRpbmVzLgorCitUaGVzZSBsaWJyYXJ5IHJvdXRpbmVzIHNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSBsaWJyYXJ5IEBmaWxle2xpYmdjYy5hfSwKK3doaWNoIEdOVSBDQyBhdXRvbWF0aWNhbGx5IHNlYXJjaGVzIHdoZW5ldmVyIGl0IGxpbmtzIGEgcHJvZ3JhbS4gIE9uCittYWNoaW5lcyB0aGF0IGhhdmUgbXVsdGlwbHkgYW5kIGRpdmlkZSBpbnN0cnVjdGlvbnMsIGlmIGhhcmR3YXJlCitmbG9hdGluZyBwb2ludCBpcyBpbiB1c2UsIG5vcm1hbGx5IEBmaWxle2xpYmdjYy5hfSBpcyBub3QgbmVlZGVkLCBidXQgaXQKK2lzIHNlYXJjaGVkIGp1c3QgaW4gY2FzZS4KKworRWFjaCBhcml0aG1ldGljIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gQGZpbGV7bGliZ2NjMS5jfSB0byB1c2UgdGhlCitjb3JyZXNwb25kaW5nIEMgYXJpdGhtZXRpYyBvcGVyYXRvci4gIEFzIGxvbmcgYXMgdGhlIGZpbGUgaXMgY29tcGlsZWQKK3dpdGggYW5vdGhlciBDIGNvbXBpbGVyLCB3aGljaCBzdXBwb3J0cyBhbGwgdGhlIEMgYXJpdGhtZXRpYyBvcGVyYXRvcnMsCit0aGlzIGZpbGUgd2lsbCB3b3JrIHBvcnRhYmx5LiAgSG93ZXZlciwgQGZpbGV7bGliZ2NjMS5jfSBkb2VzIG5vdCB3b3JrIGlmCitjb21waWxlZCB3aXRoIEdOVSBDQywgYmVjYXVzZSBlYWNoIGFyaXRobWV0aWMgZnVuY3Rpb24gd291bGQgY29tcGlsZQoraW50byBhIGNhbGwgdG8gaXRzZWxmIQorQGVuZCBpZnNldAorCitAaWZzZXQgSU5URVJOQUxTCitAbm9kZSBQYXNzZXMKK0BjaGFwdGVyIFBhc3NlcyBhbmQgRmlsZXMgb2YgdGhlIENvbXBpbGVyCitAY2luZGV4IHBhc3NlcyBhbmQgZmlsZXMgb2YgdGhlIGNvbXBpbGVyCitAY2luZGV4IGZpbGVzIGFuZCBwYXNzZXMgb2YgdGhlIGNvbXBpbGVyCitAY2luZGV4IGNvbXBpbGVyIHBhc3NlcyBhbmQgZmlsZXMKKworQGNpbmRleCB0b3AgbGV2ZWwgb2YgY29tcGlsZXIKK1RoZSBvdmVyYWxsIGNvbnRyb2wgc3RydWN0dXJlIG9mIHRoZSBjb21waWxlciBpcyBpbiBAZmlsZXt0b3BsZXYuY30uICBUaGlzCitmaWxlIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiwgZGVjb2RpbmcgYXJndW1lbnRzLCBvcGVuaW5nIGFuZAorY2xvc2luZyBmaWxlcywgYW5kIHNlcXVlbmNpbmcgdGhlIHBhc3Nlcy4KKworQGNpbmRleCBwYXJzaW5nIHBhc3MKK1RoZSBwYXJzaW5nIHBhc3MgaXMgaW52b2tlZCBvbmx5IG9uY2UsIHRvIHBhcnNlIHRoZSBlbnRpcmUgaW5wdXQuICBUaGUgUlRMCitpbnRlcm1lZGlhdGUgY29kZSBmb3IgYSBmdW5jdGlvbiBpcyBnZW5lcmF0ZWQgYXMgdGhlIGZ1bmN0aW9uIGlzIHBhcnNlZCwgYQorc3RhdGVtZW50IGF0IGEgdGltZS4gIEVhY2ggc3RhdGVtZW50IGlzIHJlYWQgaW4gYXMgYSBzeW50YXggdHJlZSBhbmQgdGhlbgorY29udmVydGVkIHRvIFJUTDsgdGhlbiB0aGUgc3RvcmFnZSBmb3IgdGhlIHRyZWUgZm9yIHRoZSBzdGF0ZW1lbnQgaXMKK3JlY2xhaW1lZC4gIFN0b3JhZ2UgZm9yIHR5cGVzIChhbmQgdGhlIGV4cHJlc3Npb25zIGZvciB0aGVpciBzaXplcyksCitkZWNsYXJhdGlvbnMsIGFuZCBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiaW5kaW5nIGNvbnRvdXJzIGFuZCBob3cgdGhleSBuZXN0LAorcmVtYWluIHVudGlsIHRoZSBmdW5jdGlvbiBpcyBmaW5pc2hlZCBiZWluZyBjb21waWxlZDsgdGhlc2UgYXJlIGFsbCBuZWVkZWQKK3RvIG91dHB1dCB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorCitAZmluZGV4IHJlc3Rfb2ZfY29tcGlsYXRpb24KK0BmaW5kZXggcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uCitFYWNoIHRpbWUgdGhlIHBhcnNpbmcgcGFzcyByZWFkcyBhIGNvbXBsZXRlIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IKK3RvcC1sZXZlbCBkZWNsYXJhdGlvbiwgaXQgY2FsbHMgZWl0aGVyIHRoZSBmdW5jdGlvbgorQGNvZGV7cmVzdF9vZl9jb21waWxhdGlvbn0sIG9yIHRoZSBmdW5jdGlvbgorQGNvZGV7cmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9ufSBpbiBAZmlsZXt0b3BsZXYuY30sIHdoaWNoIGFyZQorcmVzcG9uc2libGUgZm9yIGFsbCBmdXJ0aGVyIHByb2Nlc3NpbmcgbmVjZXNzYXJ5LCBlbmRpbmcgd2l0aCBvdXRwdXQgb2YKK3RoZSBhc3NlbWJsZXIgbGFuZ3VhZ2UuICBBbGwgb3RoZXIgY29tcGlsZXIgcGFzc2VzIHJ1biwgaW4gc2VxdWVuY2UsCit3aXRoaW4gQGNvZGV7cmVzdF9vZl9jb21waWxhdGlvbn0uICBXaGVuIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBmcm9tCitjb21waWxpbmcgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCB0aGUgc3RvcmFnZSB1c2VkIGZvciB0aGF0IGZ1bmN0aW9uCitkZWZpbml0aW9uJ3MgY29tcGlsYXRpb24gaXMgZW50aXJlbHkgZnJlZWQsIHVubGVzcyBpdCBpcyBhbiBpbmxpbmUKK2Z1bmN0aW9uCitAaWZzZXQgVVNJTkcKKyhAcHhyZWZ7SW5saW5lLCxBbiBJbmxpbmUgRnVuY3Rpb24gaXMgQXMgRmFzdCBBcyBhIE1hY3JvfSkuCitAZW5kIGlmc2V0CitAaWZjbGVhciBVU0lORworKEBweHJlZntJbmxpbmUsLEFuIElubGluZSBGdW5jdGlvbiBpcyBBcyBGYXN0IEFzIGEgTWFjcm8sZ2NjLnRleGksVXNpbmcgR0NDfSkuCitAZW5kIGlmY2xlYXIKKworSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIHRoZSBwYXNzZXMgb2YgdGhlIGNvbXBpbGVyIGFuZCB0aGVpciBzb3VyY2UgZmlsZXMuCitBbHNvIGluY2x1ZGVkIGlzIGEgZGVzY3JpcHRpb24gb2Ygd2hlcmUgZGVidWdnaW5nIGR1bXBzIGNhbiBiZSByZXF1ZXN0ZWQKK3dpdGggQHNhbXB7LWR9IG9wdGlvbnMuCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitQYXJzaW5nLiAgVGhpcyBwYXNzIHJlYWRzIHRoZSBlbnRpcmUgdGV4dCBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sCitjb25zdHJ1Y3RpbmcgcGFydGlhbCBzeW50YXggdHJlZXMuICBUaGlzIGFuZCBSVEwgZ2VuZXJhdGlvbiBhcmUgbm8gbG9uZ2VyCit0cnVseSBzZXBhcmF0ZSBwYXNzZXMgKGZvcm1lcmx5IHRoZXkgd2VyZSksIGJ1dCBpdCBpcyBlYXNpZXIgdG8gdGhpbmsKK29mIHRoZW0gYXMgc2VwYXJhdGUuCisKK1RoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGVudGlyZWx5IGZvbGxvdyBDIHN5bnRheCwgYmVjYXVzZSBpdCBpcworaW50ZW5kZWQgdG8gc3VwcG9ydCBvdGhlciBsYW5ndWFnZXMgYXMgd2VsbC4KKworTGFuZ3VhZ2Utc3BlY2lmaWMgZGF0YSB0eXBlIGFuYWx5c2lzIGlzIGFsc28gZG9uZSBpbiB0aGlzIHBhc3MsIGFuZCBldmVyeQordHJlZSBub2RlIHRoYXQgcmVwcmVzZW50cyBhbiBleHByZXNzaW9uIGhhcyBhIGRhdGEgdHlwZSBhdHRhY2hlZC4KK1ZhcmlhYmxlcyBhcmUgcmVwcmVzZW50ZWQgYXMgZGVjbGFyYXRpb24gbm9kZXMuCisKK0BjaW5kZXggY29uc3RhbnQgZm9sZGluZworQGNpbmRleCBhcml0aG1ldGljIHNpbXBsaWZpY2F0aW9ucworQGNpbmRleCBzaW1wbGlmaWNhdGlvbnMsIGFyaXRobWV0aWMKK0NvbnN0YW50IGZvbGRpbmcgYW5kIHNvbWUgYXJpdGhtZXRpYyBzaW1wbGlmaWNhdGlvbnMgYXJlIGFsc28gZG9uZQorZHVyaW5nIHRoaXMgcGFzcy4KKworVGhlIGxhbmd1YWdlLWluZGVwZW5kZW50IHNvdXJjZSBmaWxlcyBmb3IgcGFyc2luZyBhcmUKK0BmaWxle3N0b3ItbGF5b3V0LmN9LCBAZmlsZXtmb2xkLWNvbnN0LmN9LCBhbmQgQGZpbGV7dHJlZS5jfS4KK1RoZXJlIGFyZSBhbHNvIGhlYWRlciBmaWxlcyBAZmlsZXt0cmVlLmh9IGFuZCBAZmlsZXt0cmVlLmRlZn0KK3doaWNoIGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uLkByZWZpbGwKKworQGMgQXZvaWRpbmcgb3ZlcmZ1bGwgaXMgdHJpY2t5IGhlcmUuCitUaGUgc291cmNlIGZpbGVzIHRvIHBhcnNlIEMgYXJlCitAZmlsZXtjLXBhcnNlLmlufSwKK0BmaWxle2MtZGVjbC5jfSwKK0BmaWxle2MtdHlwZWNrLmN9LAorQGZpbGV7Yy1hdXgtaW5mby5jfSwKK0BmaWxle2MtY29udmVydC5jfSwKK2FuZCBAZmlsZXtjLWxhbmcuY30KK2Fsb25nIHdpdGggaGVhZGVyIGZpbGVzCitAZmlsZXtjLWxleC5ofSwgYW5kCitAZmlsZXtjLXRyZWUuaH0uCisKK1RoZSBzb3VyY2UgZmlsZXMgZm9yIHBhcnNpbmcgQysrIGFyZSBAZmlsZXtjcC1wYXJzZS55fSwKK0BmaWxle2NwLWNsYXNzLmN9LEAqCitAZmlsZXtjcC1jdnQuY30sIEBmaWxle2NwLWRlY2wuY30sIEBmaWxle2NwLWRlY2wyLmN9LAorQGZpbGV7Y3AtZGVtLmN9LCBAZmlsZXtjcC1leGNlcHQuY30sQCoKK0BmaWxle2NwLWV4cHIuY30sIEBmaWxle2NwLWluaXQuY30sIEBmaWxle2NwLWxleC5jfSwKK0BmaWxle2NwLW1ldGhvZC5jfSwgQGZpbGV7Y3AtcHRyZWUuY30sQCoKK0BmaWxle2NwLXNlYXJjaC5jfSwgQGZpbGV7Y3AtdHJlZS5jfSwgQGZpbGV7Y3AtdHlwZTIuY30sIGFuZAorQGZpbGV7Y3AtdHlwZWNrLmN9LCBhbG9uZyB3aXRoIGhlYWRlciBmaWxlcyBAZmlsZXtjcC10cmVlLmRlZn0sCitAZmlsZXtjcC10cmVlLmh9LCBhbmQgQGZpbGV7Y3AtZGVjbC5ofS4KKworVGhlIHNwZWNpYWwgc291cmNlIGZpbGVzIGZvciBwYXJzaW5nIE9iamVjdGl2ZSBDIGFyZQorQGZpbGV7b2JqYy1wYXJzZS55fSwgQGZpbGV7b2JqYy1hY3Rpb25zLmN9LCBAZmlsZXtvYmpjLXRyZWUuZGVmfSwgYW5kCitAZmlsZXtvYmpjLWFjdGlvbnMuaH0uICBDZXJ0YWluIEMtc3BlY2lmaWMgZmlsZXMgYXJlIHVzZWQgZm9yIHRoaXMgYXMKK3dlbGwuCisKK1RoZSBmaWxlIEBmaWxle2MtY29tbW9uLmN9IGlzIGFsc28gdXNlZCBmb3IgYWxsIG9mIHRoZSBhYm92ZSBsYW5ndWFnZXMuCisKK0BjaW5kZXggUlRMIGdlbmVyYXRpb24KK0BpdGVtCitSVEwgZ2VuZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGNvbnZlcnNpb24gb2Ygc3ludGF4IHRyZWUgaW50byBSVEwgY29kZS4KK0l0IGlzIGFjdHVhbGx5IGRvbmUgc3RhdGVtZW50LWJ5LXN0YXRlbWVudCBkdXJpbmcgcGFyc2luZywgYnV0IGZvcgorbW9zdCBwdXJwb3NlcyBpdCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIHNlcGFyYXRlIHBhc3MuCisKK0BjaW5kZXggdGFyZ2V0LXBhcmFtZXRlci1kZXBlbmRlbnQgY29kZQorVGhpcyBpcyB3aGVyZSB0aGUgYnVsayBvZiB0YXJnZXQtcGFyYW1ldGVyLWRlcGVuZGVudCBjb2RlIGlzIGZvdW5kLAorc2luY2Ugb2Z0ZW4gaXQgaXMgbmVjZXNzYXJ5IGZvciBzdHJhdGVnaWVzIHRvIGFwcGx5IG9ubHkgd2hlbiBjZXJ0YWluCitzdGFuZGFyZCBraW5kcyBvZiBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS4gIFRoZSBwdXJwb3NlIG9mIG5hbWVkCitpbnN0cnVjdGlvbiBwYXR0ZXJucyBpcyB0byBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIFJUTAorZ2VuZXJhdGlvbiBwYXNzLgorCitAY2luZGV4IHRhaWwgcmVjdXJzaW9uIG9wdGltaXphdGlvbgorT3B0aW1pemF0aW9uIGlzIGRvbmUgaW4gdGhpcyBwYXNzIGZvciBAY29kZXtpZn0tY29uZGl0aW9ucyB0aGF0IGFyZQorY29tcGFyaXNvbnMsIGJvb2xlYW4gb3BlcmF0aW9ucyBvciBjb25kaXRpb25hbCBleHByZXNzaW9ucy4gIFRhaWwKK3JlY3Vyc2lvbiBpcyBkZXRlY3RlZCBhdCB0aGlzIHRpbWUgYWxzby4gIERlY2lzaW9ucyBhcmUgbWFkZSBhYm91dCBob3cKK2Jlc3QgdG8gYXJyYW5nZSBsb29wcyBhbmQgaG93IHRvIG91dHB1dCBAY29kZXtzd2l0Y2h9IHN0YXRlbWVudHMuCisKK0BjIEF2b2lkaW5nIG92ZXJmdWxsIGlzIHRyaWNreSBoZXJlLgorVGhlIHNvdXJjZSBmaWxlcyBmb3IgUlRMIGdlbmVyYXRpb24gaW5jbHVkZQorQGZpbGV7c3RtdC5jfSwKK0BmaWxle2NhbGxzLmN9LAorQGZpbGV7ZXhwci5jfSwKK0BmaWxle2V4cGxvdy5jfSwKK0BmaWxle2V4cG1lZC5jfSwKK0BmaWxle2Z1bmN0aW9uLmN9LAorQGZpbGV7b3B0YWJzLmN9CithbmQgQGZpbGV7ZW1pdC1ydGwuY30uCitBbHNvLCB0aGUgZmlsZQorQGZpbGV7aW5zbi1lbWl0LmN9LCBnZW5lcmF0ZWQgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBieSB0aGUKK3Byb2dyYW0gQGNvZGV7Z2VuZW1pdH0sIGlzIHVzZWQgaW4gdGhpcyBwYXNzLiAgVGhlIGhlYWRlciBmaWxlCitAZmlsZXtleHByLmh9IGlzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aGluIHRoaXMgcGFzcy5AcmVmaWxsCisKK0BmaW5kZXggZ2VuZmxhZ3MKK0BmaW5kZXggZ2VuY29kZXMKK1RoZSBoZWFkZXIgZmlsZXMgQGZpbGV7aW5zbi1mbGFncy5ofSBhbmQgQGZpbGV7aW5zbi1jb2Rlcy5ofSwKK2dlbmVyYXRlZCBmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGJ5IHRoZSBwcm9ncmFtcyBAY29kZXtnZW5mbGFnc30KK2FuZCBAY29kZXtnZW5jb2Rlc30sIHRlbGwgdGhpcyBwYXNzIHdoaWNoIHN0YW5kYXJkIG5hbWVzIGFyZSBhdmFpbGFibGUKK2ZvciB1c2UgYW5kIHdoaWNoIHBhdHRlcm5zIGNvcnJlc3BvbmQgdG8gdGhlbS5AcmVmaWxsCisKK0FzaWRlIGZyb20gZGVidWdnaW5nIGluZm9ybWF0aW9uIG91dHB1dCwgbm9uZSBvZiB0aGUgZm9sbG93aW5nIHBhc3NlcworcmVmZXJzIHRvIHRoZSB0cmVlIHN0cnVjdHVyZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZnVuY3Rpb24gKG9ubHkKK3BhcnQgb2Ygd2hpY2ggaXMgc2F2ZWQpLgorCitAY2luZGV4IGlubGluZSwgYXV0b21hdGljCitUaGUgZGVjaXNpb24gb2Ygd2hldGhlciB0aGUgZnVuY3Rpb24gY2FuIGFuZCBzaG91bGQgYmUgZXhwYW5kZWQgaW5saW5lCitpbiBpdHMgc3Vic2VxdWVudCBjYWxsZXJzIGlzIG1hZGUgYXQgdGhlIGVuZCBvZiBydGwgZ2VuZXJhdGlvbi4gIFRoZQorZnVuY3Rpb24gbXVzdCBtZWV0IGNlcnRhaW4gY3JpdGVyaWEsIGN1cnJlbnRseSByZWxhdGVkIHRvIHRoZSBzaXplIG9mCit0aGUgZnVuY3Rpb24gYW5kIHRoZSB0eXBlcyBhbmQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXQgaGFzLiAgTm90ZSB0aGF0Cit0aGlzIGZ1bmN0aW9uIG1heSBjb250YWluIGxvb3BzLCByZWN1cnNpdmUgY2FsbHMgdG8gaXRzZWxmCisodGFpbC1yZWN1cnNpdmUgZnVuY3Rpb25zIGNhbiBiZSBpbmxpbmVkISksIGdvdG9zLCBpbiBzaG9ydCwgYWxsCitjb25zdHJ1Y3RzIHN1cHBvcnRlZCBieSBHTlUgQ0MuICBUaGUgZmlsZSBAZmlsZXtpbnRlZ3JhdGUuY30gY29udGFpbnMKK3RoZSBjb2RlIHRvIHNhdmUgYSBmdW5jdGlvbidzIHJ0bCBmb3IgbGF0ZXIgaW5saW5pbmcgYW5kIHRvIGlubGluZSB0aGF0CitydGwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiAgVGhlIGhlYWRlciBmaWxlIEBmaWxle2ludGVncmF0ZS5ofQoraXMgYWxzbyB1c2VkIGZvciB0aGlzIHB1cnBvc2UuCisKK1RoZSBvcHRpb24gQHNhbXB7LWRyfSBjYXVzZXMgYSBkZWJ1Z2dpbmcgZHVtcCBvZiB0aGUgUlRMIGNvZGUgYWZ0ZXIKK3RoaXMgcGFzcy4gIFRoaXMgZHVtcCBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBAc2FtcHsucnRsfSB0bwordGhlIGlucHV0IGZpbGUgbmFtZS4KKworQGNpbmRleCBqdW1wIG9wdGltaXphdGlvbgorQGNpbmRleCB1bnJlYWNoYWJsZSBjb2RlCitAY2luZGV4IGRlYWQgY29kZQorQGl0ZW0KK0p1bXAgb3B0aW1pemF0aW9uLiAgVGhpcyBwYXNzIHNpbXBsaWZpZXMganVtcHMgdG8gdGhlIGZvbGxvd2luZworaW5zdHJ1Y3Rpb24sIGp1bXBzIGFjcm9zcyBqdW1wcywgYW5kIGp1bXBzIHRvIGp1bXBzLiAgSXQgZGVsZXRlcwordW5yZWZlcmVuY2VkIGxhYmVscyBhbmQgdW5yZWFjaGFibGUgY29kZSwgZXhjZXB0IHRoYXQgdW5yZWFjaGFibGUgY29kZQordGhhdCBjb250YWlucyBhIGxvb3AgaXMgbm90IHJlY29nbml6ZWQgYXMgdW5yZWFjaGFibGUgaW4gdGhpcyBwYXNzLgorKFN1Y2ggbG9vcHMgYXJlIGRlbGV0ZWQgbGF0ZXIgaW4gdGhlIGJhc2ljIGJsb2NrIGFuYWx5c2lzLikgIEl0IGFsc28KK2NvbnZlcnRzIHNvbWUgY29kZSBvcmlnaW5hbGx5IHdyaXR0ZW4gd2l0aCBqdW1wcyBpbnRvIHNlcXVlbmNlcyBvZgoraW5zdHJ1Y3Rpb25zIHRoYXQgZGlyZWN0bHkgc2V0IHZhbHVlcyBmcm9tIHRoZSByZXN1bHRzIG9mIGNvbXBhcmlzb25zLAoraWYgdGhlIG1hY2hpbmUgaGFzIHN1Y2ggaW5zdHJ1Y3Rpb25zLgorCitKdW1wIG9wdGltaXphdGlvbiBpcyBwZXJmb3JtZWQgdHdvIG9yIHRocmVlIHRpbWVzLiAgVGhlIGZpcnN0IHRpbWUgaXMKK2ltbWVkaWF0ZWx5IGZvbGxvd2luZyBSVEwgZ2VuZXJhdGlvbi4gIFRoZSBzZWNvbmQgdGltZSBpcyBhZnRlciBDU0UsCitidXQgb25seSBpZiBDU0Ugc2F5cyByZXBlYXRlZCBqdW1wIG9wdGltaXphdGlvbiBpcyBuZWVkZWQuICBUaGUKK2xhc3QgdGltZSBpcyByaWdodCBiZWZvcmUgdGhlIGZpbmFsIHBhc3MuICBUaGF0IHRpbWUsIGNyb3NzLWp1bXBpbmcKK2FuZCBkZWxldGlvbiBvZiBuby1vcCBtb3ZlIGluc3RydWN0aW9ucyBhcmUgZG9uZSB0b2dldGhlciB3aXRoIHRoZQorb3B0aW1pemF0aW9ucyBkZXNjcmliZWQgYWJvdmUuCisKK1RoZSBzb3VyY2UgZmlsZSBvZiB0aGlzIHBhc3MgaXMgQGZpbGV7anVtcC5jfS4KKworVGhlIG9wdGlvbiBAc2FtcHstZGp9IGNhdXNlcyBhIGRlYnVnZ2luZyBkdW1wIG9mIHRoZSBSVEwgY29kZSBhZnRlcgordGhpcyBwYXNzIGlzIHJ1biBmb3IgdGhlIGZpcnN0IHRpbWUuICBUaGlzIGR1bXAgZmlsZSdzIG5hbWUgaXMgbWFkZSBieQorYXBwZW5kaW5nIEBzYW1wey5qdW1wfSB0byB0aGUgaW5wdXQgZmlsZSBuYW1lLgorCitAY2luZGV4IHJlZ2lzdGVyIHVzZSBhbmFseXNpcworQGl0ZW0KK1JlZ2lzdGVyIHNjYW4uICBUaGlzIHBhc3MgZmluZHMgdGhlIGZpcnN0IGFuZCBsYXN0IHVzZSBvZiBlYWNoCityZWdpc3RlciwgYXMgYSBndWlkZSBmb3IgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uICBJdHMgc291cmNlCitpcyBpbiBAZmlsZXtyZWdjbGFzcy5jfS4KKworQGNpbmRleCBqdW1wIHRocmVhZGluZworQGl0ZW0KK0p1bXAgdGhyZWFkaW5nLiAgVGhpcyBwYXNzIGRldGVjdHMgYSBjb25kaXRpb24ganVtcCB0aGF0IGJyYW5jaGVzIHRvIGFuCitpZGVudGljYWwgb3IgaW52ZXJzZSB0ZXN0LiAgU3VjaCBqdW1wcyBjYW4gYmUgQHNhbXB7dGhyZWFkZWR9IHRocm91Z2gKK3RoZSBzZWNvbmQgY29uZGl0aW9uYWwgdGVzdC4gIFRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBwYXNzIGlzIGluCitAZmlsZXtqdW1wLmN9LiAgVGhpcyBvcHRpbWl6YXRpb24gaXMgb25seSBwZXJmb3JtZWQgaWYKK0BzYW1wey1mdGhyZWFkLWp1bXBzfSBpcyBlbmFibGVkLgorCitAY2luZGV4IGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uCitAY2luZGV4IGNvbnN0YW50IHByb3BhZ2F0aW9uCitAaXRlbQorQ29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uICBUaGlzIHBhc3MgYWxzbyBkb2VzIGNvbnN0YW50Citwcm9wYWdhdGlvbi4gIEl0cyBzb3VyY2UgZmlsZSBpcyBAZmlsZXtjc2UuY30uICBJZiBjb25zdGFudAorcHJvcGFnYXRpb24gY2F1c2VzIGNvbmRpdGlvbmFsIGp1bXBzIHRvIGJlY29tZSB1bmNvbmRpdGlvbmFsIG9yIHRvCitiZWNvbWUgbm8tb3BzLCBqdW1wIG9wdGltaXphdGlvbiBpcyBydW4gYWdhaW4gd2hlbiBDU0UgaXMgZmluaXNoZWQuCisKK1RoZSBvcHRpb24gQHNhbXB7LWRzfSBjYXVzZXMgYSBkZWJ1Z2dpbmcgZHVtcCBvZiB0aGUgUlRMIGNvZGUgYWZ0ZXIKK3RoaXMgcGFzcy4gIFRoaXMgZHVtcCBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBAc2FtcHsuY3NlfSB0bwordGhlIGlucHV0IGZpbGUgbmFtZS4KKworQGNpbmRleCBsb29wIG9wdGltaXphdGlvbgorQGNpbmRleCBjb2RlIG1vdGlvbgorQGNpbmRleCBzdHJlbmd0aC1yZWR1Y3Rpb24KK0BpdGVtCitMb29wIG9wdGltaXphdGlvbi4gIFRoaXMgcGFzcyBtb3ZlcyBjb25zdGFudCBleHByZXNzaW9ucyBvdXQgb2YgbG9vcHMsCithbmQgb3B0aW9uYWxseSBkb2VzIHN0cmVuZ3RoLXJlZHVjdGlvbiBhbmQgbG9vcCB1bnJvbGxpbmcgYXMgd2VsbC4KK0l0cyBzb3VyY2UgZmlsZXMgYXJlIEBmaWxle2xvb3AuY30gYW5kIEBmaWxle3Vucm9sbC5jfSwgcGx1cyB0aGUgaGVhZGVyCitAZmlsZXtsb29wLmh9IHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGVtLiAgTG9vcCB1bnJvbGxpbmcgdXNlcworc29tZSBmdW5jdGlvbnMgaW4gQGZpbGV7aW50ZWdyYXRlLmN9IGFuZCB0aGUgaGVhZGVyIEBmaWxle2ludGVncmF0ZS5ofS4KKworVGhlIG9wdGlvbiBAc2FtcHstZEx9IGNhdXNlcyBhIGRlYnVnZ2luZyBkdW1wIG9mIHRoZSBSVEwgY29kZSBhZnRlcgordGhpcyBwYXNzLiAgVGhpcyBkdW1wIGZpbGUncyBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIEBzYW1wey5sb29wfSB0bwordGhlIGlucHV0IGZpbGUgbmFtZS4KKworQGl0ZW0KK0lmIEBzYW1wey1mcmVydW4tY3NlLWFmdGVyLWxvb3B9IHdhcyBlbmFibGVkLCBhIHNlY29uZCBjb21tb24KK3N1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gcGFzcyBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGxvb3Agb3B0aW1pemF0aW9uCitwYXNzLiAgSnVtcCB0aHJlYWRpbmcgaXMgYWxzbyBkb25lIGFnYWluIGF0IHRoaXMgdGltZSBpZiBpdCB3YXMgc3BlY2lmaWVkLgorCitUaGUgb3B0aW9uIEBzYW1wey1kdH0gY2F1c2VzIGEgZGVidWdnaW5nIGR1bXAgb2YgdGhlIFJUTCBjb2RlIGFmdGVyCit0aGlzIHBhc3MuICBUaGlzIGR1bXAgZmlsZSdzIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgQHNhbXB7LmNzZTJ9IHRvCit0aGUgaW5wdXQgZmlsZSBuYW1lLgorCitAY2luZGV4IHJlZ2lzdGVyIGFsbG9jYXRpb24sIHN0dXBpZAorQGNpbmRleCBzdHVwaWQgcmVnaXN0ZXIgYWxsb2NhdGlvbgorQGl0ZW0KK1N0dXBpZCByZWdpc3RlciBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBhdCB0aGlzIHBvaW50IGluIGEKK25vbm9wdGltaXppbmcgY29tcGlsYXRpb24uICBJdCBkb2VzIGEgbGl0dGxlIGRhdGEgZmxvdyBhbmFseXNpcyBhcword2VsbC4gIFdoZW4gc3R1cGlkIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMgaW4gdXNlLCB0aGUgbmV4dCBwYXNzCitleGVjdXRlZCBpcyB0aGUgcmVsb2FkaW5nIHBhc3M7IHRoZSBvdGhlcnMgaW4gYmV0d2VlbiBhcmUgc2tpcHBlZC4KK1RoZSBzb3VyY2UgZmlsZSBpcyBAZmlsZXtzdHVwaWQuY30uCisKK0BjaW5kZXggZGF0YSBmbG93IGFuYWx5c2lzCitAY2luZGV4IGFuYWx5c2lzLCBkYXRhIGZsb3cKK0BjaW5kZXggYmFzaWMgYmxvY2tzCitAaXRlbQorRGF0YSBmbG93IGFuYWx5c2lzIChAZmlsZXtmbG93LmN9KS4gIFRoaXMgcGFzcyBkaXZpZGVzIHRoZSBwcm9ncmFtCitpbnRvIGJhc2ljIGJsb2NrcyAoYW5kIGluIHRoZSBwcm9jZXNzIGRlbGV0ZXMgdW5yZWFjaGFibGUgbG9vcHMpOyB0aGVuCitpdCBjb21wdXRlcyB3aGljaCBwc2V1ZG8tcmVnaXN0ZXJzIGFyZSBsaXZlIGF0IGVhY2ggcG9pbnQgaW4gdGhlCitwcm9ncmFtLCBhbmQgbWFrZXMgdGhlIGZpcnN0IGluc3RydWN0aW9uIHRoYXQgdXNlcyBhIHZhbHVlIHBvaW50IGF0Cit0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBjb21wdXRlZCB0aGUgdmFsdWUuCisKK0BjaW5kZXggYXV0b2luY3JlbWVudC9kZWNyZW1lbnQgYW5hbHlzaXMKK1RoaXMgcGFzcyBhbHNvIGRlbGV0ZXMgY29tcHV0YXRpb25zIHdob3NlIHJlc3VsdHMgYXJlIG5ldmVyIHVzZWQsIGFuZAorY29tYmluZXMgbWVtb3J5IHJlZmVyZW5jZXMgd2l0aCBhZGQgb3Igc3VidHJhY3QgaW5zdHJ1Y3Rpb25zIHRvIG1ha2UKK2F1dG9pbmNyZW1lbnQgb3IgYXV0b2RlY3JlbWVudCBhZGRyZXNzaW5nLgorCitUaGUgb3B0aW9uIEBzYW1wey1kZn0gY2F1c2VzIGEgZGVidWdnaW5nIGR1bXAgb2YgdGhlIFJUTCBjb2RlIGFmdGVyCit0aGlzIHBhc3MuICBUaGlzIGR1bXAgZmlsZSdzIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgQHNhbXB7LmZsb3d9IHRvCit0aGUgaW5wdXQgZmlsZSBuYW1lLiAgSWYgc3R1cGlkIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMgaW4gdXNlLCB0aGlzCitkdW1wIGZpbGUgcmVmbGVjdHMgdGhlIGZ1bGwgcmVzdWx0cyBvZiBzdWNoIGFsbG9jYXRpb24uCisKK0BjaW5kZXggaW5zdHJ1Y3Rpb24gY29tYmluYXRpb24KK0BpdGVtCitJbnN0cnVjdGlvbiBjb21iaW5hdGlvbiAoQGZpbGV7Y29tYmluZS5jfSkuICBUaGlzIHBhc3MgYXR0ZW1wdHMgdG8KK2NvbWJpbmUgZ3JvdXBzIG9mIHR3byBvciB0aHJlZSBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgcmVsYXRlZCBieSBkYXRhCitmbG93IGludG8gc2luZ2xlIGluc3RydWN0aW9ucy4gIEl0IGNvbWJpbmVzIHRoZSBSVEwgZXhwcmVzc2lvbnMgZm9yCit0aGUgaW5zdHJ1Y3Rpb25zIGJ5IHN1YnN0aXR1dGlvbiwgc2ltcGxpZmllcyB0aGUgcmVzdWx0IHVzaW5nIGFsZ2VicmEsCithbmQgdGhlbiBhdHRlbXB0cyB0byBtYXRjaCB0aGUgcmVzdWx0IGFnYWluc3QgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCisKK1RoZSBvcHRpb24gQHNhbXB7LWRjfSBjYXVzZXMgYSBkZWJ1Z2dpbmcgZHVtcCBvZiB0aGUgUlRMIGNvZGUgYWZ0ZXIKK3RoaXMgcGFzcy4gIFRoaXMgZHVtcCBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBAc2FtcHsuY29tYmluZX0KK3RvIHRoZSBpbnB1dCBmaWxlIG5hbWUuCisKK0BjaW5kZXggaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZworQGNpbmRleCBzY2hlZHVsaW5nLCBpbnN0cnVjdGlvbgorQGl0ZW0KK0luc3RydWN0aW9uIHNjaGVkdWxpbmcgKEBmaWxle3NjaGVkLmN9KS4gIFRoaXMgcGFzcyBsb29rcyBmb3IKK2luc3RydWN0aW9ucyB3aG9zZSBvdXRwdXQgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGJ5IHRoZSB0aW1lIHRoYXQgaXQgaXMKK3VzZWQgaW4gc3Vic2VxdWVudCBpbnN0cnVjdGlvbnMuICAoTWVtb3J5IGxvYWRzIGFuZCBmbG9hdGluZyBwb2ludAoraW5zdHJ1Y3Rpb25zIG9mdGVuIGhhdmUgdGhpcyBiZWhhdmlvciBvbiBSSVNDIG1hY2hpbmVzKS4gIEl0IHJlLW9yZGVycworaW5zdHJ1Y3Rpb25zIHdpdGhpbiBhIGJhc2ljIGJsb2NrIHRvIHRyeSB0byBzZXBhcmF0ZSB0aGUgZGVmaW5pdGlvbiBhbmQKK3VzZSBvZiBpdGVtcyB0aGF0IG90aGVyd2lzZSB3b3VsZCBjYXVzZSBwaXBlbGluZSBzdGFsbHMuCisKK0luc3RydWN0aW9uIHNjaGVkdWxpbmcgaXMgcGVyZm9ybWVkIHR3aWNlLiAgVGhlIGZpcnN0IHRpbWUgaXMgaW1tZWRpYXRlbHkKK2FmdGVyIGluc3RydWN0aW9uIGNvbWJpbmF0aW9uIGFuZCB0aGUgc2Vjb25kIGlzIGltbWVkaWF0ZWx5IGFmdGVyIHJlbG9hZC4KKworVGhlIG9wdGlvbiBAc2FtcHstZFN9IGNhdXNlcyBhIGRlYnVnZ2luZyBkdW1wIG9mIHRoZSBSVEwgY29kZSBhZnRlciB0aGlzCitwYXNzIGlzIHJ1biBmb3IgdGhlIGZpcnN0IHRpbWUuICBUaGUgZHVtcCBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5CithcHBlbmRpbmcgQHNhbXB7LnNjaGVkfSB0byB0aGUgaW5wdXQgZmlsZSBuYW1lLgorCitAY2luZGV4IHJlZ2lzdGVyIGNsYXNzIHByZWZlcmVuY2UgcGFzcworQGl0ZW0KK1JlZ2lzdGVyIGNsYXNzIHByZWZlcmVuY2luZy4gIFRoZSBSVEwgY29kZSBpcyBzY2FubmVkIHRvIGZpbmQgb3V0Cit3aGljaCByZWdpc3RlciBjbGFzcyBpcyBiZXN0IGZvciBlYWNoIHBzZXVkbyByZWdpc3Rlci4gIFRoZSBzb3VyY2UKK2ZpbGUgaXMgQGZpbGV7cmVnY2xhc3MuY30uCisKK0BjaW5kZXggcmVnaXN0ZXIgYWxsb2NhdGlvbgorQGNpbmRleCBsb2NhbCByZWdpc3RlciBhbGxvY2F0aW9uCitAaXRlbQorTG9jYWwgcmVnaXN0ZXIgYWxsb2NhdGlvbiAoQGZpbGV7bG9jYWwtYWxsb2MuY30pLiAgVGhpcyBwYXNzIGFsbG9jYXRlcworaGFyZCByZWdpc3RlcnMgdG8gcHNldWRvIHJlZ2lzdGVycyB0aGF0IGFyZSB1c2VkIG9ubHkgd2l0aGluIG9uZSBiYXNpYworYmxvY2suICBCZWNhdXNlIHRoZSBiYXNpYyBibG9jayBpcyBsaW5lYXIsIGl0IGNhbiB1c2UgZmFzdCBhbmQKK3Bvd2VyZnVsIHRlY2huaXF1ZXMgdG8gZG8gYSB2ZXJ5IGdvb2Qgam9iLgorCitUaGUgb3B0aW9uIEBzYW1wey1kbH0gY2F1c2VzIGEgZGVidWdnaW5nIGR1bXAgb2YgdGhlIFJUTCBjb2RlIGFmdGVyCit0aGlzIHBhc3MuICBUaGlzIGR1bXAgZmlsZSdzIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgQHNhbXB7LmxyZWd9IHRvCit0aGUgaW5wdXQgZmlsZSBuYW1lLgorCitAY2luZGV4IGdsb2JhbCByZWdpc3RlciBhbGxvY2F0aW9uCitAaXRlbQorR2xvYmFsIHJlZ2lzdGVyIGFsbG9jYXRpb24gKEBmaWxle2dsb2JhbC5jfSkuICBUaGlzIHBhc3MKK2FsbG9jYXRlcyBoYXJkIHJlZ2lzdGVycyBmb3IgdGhlIHJlbWFpbmluZyBwc2V1ZG8gcmVnaXN0ZXJzICh0aG9zZQord2hvc2UgbGlmZSBzcGFucyBhcmUgbm90IGNvbnRhaW5lZCBpbiBvbmUgYmFzaWMgYmxvY2spLgorCitAY2luZGV4IHJlbG9hZGluZworQGl0ZW0KK1JlbG9hZGluZy4gIFRoaXMgcGFzcyByZW51bWJlcnMgcHNldWRvIHJlZ2lzdGVycyB3aXRoIHRoZSBoYXJkd2FyZQorcmVnaXN0ZXJzIG51bWJlcnMgdGhleSB3ZXJlIGFsbG9jYXRlZC4gIFBzZXVkbyByZWdpc3RlcnMgdGhhdCBkaWQgbm90CitnZXQgaGFyZCByZWdpc3RlcnMgYXJlIHJlcGxhY2VkIHdpdGggc3RhY2sgc2xvdHMuICBUaGVuIGl0IGZpbmRzCitpbnN0cnVjdGlvbnMgdGhhdCBhcmUgaW52YWxpZCBiZWNhdXNlIGEgdmFsdWUgaGFzIGZhaWxlZCB0byBlbmQgdXAgaW4KK2EgcmVnaXN0ZXIsIG9yIGhhcyBlbmRlZCB1cCBpbiBhIHJlZ2lzdGVyIG9mIHRoZSB3cm9uZyBraW5kLiAgSXQgZml4ZXMKK3VwIHRoZXNlIGluc3RydWN0aW9ucyBieSByZWxvYWRpbmcgdGhlIHByb2JsZW1hdGljYWwgdmFsdWVzCit0ZW1wb3JhcmlseSBpbnRvIHJlZ2lzdGVycy4gIEFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgdG8KK2RvIHRoZSBjb3B5aW5nLgorCitUaGUgcmVsb2FkIHBhc3MgYWxzbyBvcHRpb25hbGx5IGVsaW1pbmF0ZXMgdGhlIGZyYW1lIHBvaW50ZXIgYW5kIGluc2VydHMKK2luc3RydWN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVycyBhcm91bmQgY2FsbHMuCisKK1NvdXJjZSBmaWxlcyBhcmUgQGZpbGV7cmVsb2FkLmN9IGFuZCBAZmlsZXtyZWxvYWQxLmN9LCBwbHVzIHRoZSBoZWFkZXIKK0BmaWxle3JlbG9hZC5ofSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlbS4KKworVGhlIG9wdGlvbiBAc2FtcHstZGd9IGNhdXNlcyBhIGRlYnVnZ2luZyBkdW1wIG9mIHRoZSBSVEwgY29kZSBhZnRlcgordGhpcyBwYXNzLiAgVGhpcyBkdW1wIGZpbGUncyBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIEBzYW1wey5ncmVnfSB0bwordGhlIGlucHV0IGZpbGUgbmFtZS4KKworQGNpbmRleCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nCitAY2luZGV4IHNjaGVkdWxpbmcsIGluc3RydWN0aW9uCitAaXRlbQorSW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBpcyByZXBlYXRlZCBoZXJlIHRvIHRyeSB0byBhdm9pZCBwaXBlbGluZSBzdGFsbHMKK2R1ZSB0byBtZW1vcnkgbG9hZHMgZ2VuZXJhdGVkIGZvciBzcGlsbGVkIHBzZXVkbyByZWdpc3RlcnMuCisKK1RoZSBvcHRpb24gQHNhbXB7LWRSfSBjYXVzZXMgYSBkZWJ1Z2dpbmcgZHVtcCBvZiB0aGUgUlRMIGNvZGUgYWZ0ZXIKK3RoaXMgcGFzcy4gIFRoaXMgZHVtcCBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBAc2FtcHsuc2NoZWQyfQordG8gdGhlIGlucHV0IGZpbGUgbmFtZS4KKworQGNpbmRleCBjcm9zcy1qdW1waW5nCitAY2luZGV4IG5vLW9wIG1vdmUgaW5zdHJ1Y3Rpb25zCitAaXRlbQorSnVtcCBvcHRpbWl6YXRpb24gaXMgcmVwZWF0ZWQsIHRoaXMgdGltZSBpbmNsdWRpbmcgY3Jvc3MtanVtcGluZworYW5kIGRlbGV0aW9uIG9mIG5vLW9wIG1vdmUgaW5zdHJ1Y3Rpb25zLgorCitUaGUgb3B0aW9uIEBzYW1wey1kSn0gY2F1c2VzIGEgZGVidWdnaW5nIGR1bXAgb2YgdGhlIFJUTCBjb2RlIGFmdGVyCit0aGlzIHBhc3MuICBUaGlzIGR1bXAgZmlsZSdzIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgQHNhbXB7Lmp1bXAyfQordG8gdGhlIGlucHV0IGZpbGUgbmFtZS4KKworQGNpbmRleCBkZWxheWVkIGJyYW5jaCBzY2hlZHVsaW5nCitAY2luZGV4IHNjaGVkdWxpbmcsIGRlbGF5ZWQgYnJhbmNoCitAaXRlbQorRGVsYXllZCBicmFuY2ggc2NoZWR1bGluZy4gIFRoaXMgb3B0aW9uYWwgcGFzcyBhdHRlbXB0cyB0byBmaW5kCitpbnN0cnVjdGlvbnMgdGhhdCBjYW4gZ28gaW50byB0aGUgZGVsYXkgc2xvdHMgb2Ygb3RoZXIgaW5zdHJ1Y3Rpb25zLAordXN1YWxseSBqdW1wcyBhbmQgY2FsbHMuICBUaGUgc291cmNlIGZpbGUgbmFtZSBpcyBAZmlsZXtyZW9yZy5jfS4KKworVGhlIG9wdGlvbiBAc2FtcHstZGR9IGNhdXNlcyBhIGRlYnVnZ2luZyBkdW1wIG9mIHRoZSBSVEwgY29kZSBhZnRlcgordGhpcyBwYXNzLiAgVGhpcyBkdW1wIGZpbGUncyBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIEBzYW1wey5kYnJ9Cit0byB0aGUgaW5wdXQgZmlsZSBuYW1lLgorCitAY2luZGV4IHJlZ2lzdGVyLXRvLXN0YWNrIGNvbnZlcnNpb24KK0BpdGVtCitDb252ZXJzaW9uIGZyb20gdXNhZ2Ugb2Ygc29tZSBoYXJkIHJlZ2lzdGVycyB0byB1c2FnZSBvZiBhIHJlZ2lzdGVyCitzdGFjayBtYXkgYmUgZG9uZSBhdCB0aGlzIHBvaW50LiAgQ3VycmVudGx5LCB0aGlzIGlzIHN1cHBvcnRlZCBvbmx5Citmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBvZiB0aGUgSW50ZWwgODAzODcgY29wcm9jZXNzb3IuICAgVGhlCitzb3VyY2UgZmlsZSBuYW1lIGlzIEBmaWxle3JlZy1zdGFjay5jfS4KKworVGhlIG9wdGlvbnMgQHNhbXB7LWRrfSBjYXVzZXMgYSBkZWJ1Z2dpbmcgZHVtcCBvZiB0aGUgUlRMIGNvZGUgYWZ0ZXIKK3RoaXMgcGFzcy4gIFRoaXMgZHVtcCBmaWxlJ3MgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBAc2FtcHsuc3RhY2t9Cit0byB0aGUgaW5wdXQgZmlsZSBuYW1lLgorCitAY2luZGV4IGZpbmFsIHBhc3MKK0BjaW5kZXggcGVlcGhvbGUgb3B0aW1pemF0aW9uCitAaXRlbQorRmluYWwuICBUaGlzIHBhc3Mgb3V0cHV0cyB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSBmdW5jdGlvbi4gIEl0IGlzCithbHNvIHJlc3BvbnNpYmxlIGZvciBpZGVudGlmeWluZyBzcHVyaW91cyB0ZXN0IGFuZCBjb21wYXJlCitpbnN0cnVjdGlvbnMuICBNYWNoaW5lLXNwZWNpZmljIHBlZXBob2xlIG9wdGltaXphdGlvbnMgYXJlIHBlcmZvcm1lZAorYXQgdGhlIHNhbWUgdGltZS4gIFRoZSBmdW5jdGlvbiBlbnRyeSBhbmQgZXhpdCBzZXF1ZW5jZXMgYXJlIGdlbmVyYXRlZAorZGlyZWN0bHkgYXMgYXNzZW1ibGVyIGNvZGUgaW4gdGhpcyBwYXNzOyB0aGV5IG5ldmVyIGV4aXN0IGFzIFJUTC4KKworVGhlIHNvdXJjZSBmaWxlcyBhcmUgQGZpbGV7ZmluYWwuY30gcGx1cyBAZmlsZXtpbnNuLW91dHB1dC5jfTsgdGhlCitsYXR0ZXIgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBieSB0aGUKK3Rvb2wgQGZpbGV7Z2Vub3V0cHV0fS4gIFRoZSBoZWFkZXIgZmlsZSBAZmlsZXtjb25kaXRpb25zLmh9IGlzIHVzZWQKK2ZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlc2UgZmlsZXMuCisKK0BjaW5kZXggZGVidWdnaW5nIGluZm9ybWF0aW9uIGdlbmVyYXRpb24KK0BpdGVtCitEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb3V0cHV0LiAgVGhpcyBpcyBydW4gYWZ0ZXIgZmluYWwgYmVjYXVzZSBpdCBtdXN0CitvdXRwdXQgdGhlIHN0YWNrIHNsb3Qgb2Zmc2V0cyBmb3IgcHNldWRvIHJlZ2lzdGVycyB0aGF0IGRpZCBub3QgZ2V0CitoYXJkIHJlZ2lzdGVycy4gIFNvdXJjZSBmaWxlcyBhcmUgQGZpbGV7ZGJ4b3V0LmN9IGZvciBEQlggc3ltYm9sIHRhYmxlCitmb3JtYXQsIEBmaWxle3NkYm91dC5jfSBmb3IgU0RCIHN5bWJvbCB0YWJsZSBmb3JtYXQsIGFuZAorQGZpbGV7ZHdhcmZvdXQuY30gZm9yIERXQVJGIHN5bWJvbCB0YWJsZSBmb3JtYXQuCitAZW5kIGl0ZW1pemUKKworU29tZSBhZGRpdGlvbmFsIGZpbGVzIGFyZSB1c2VkIGJ5IGFsbCBvciBtYW55IHBhc3NlczoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0V2ZXJ5IHBhc3MgdXNlcyBAZmlsZXttYWNobW9kZS5kZWZ9IGFuZCBAZmlsZXttYWNobW9kZS5ofSB3aGljaCBkZWZpbmUKK3RoZSBtYWNoaW5lIG1vZGVzLgorCitAaXRlbQorU2V2ZXJhbCBwYXNzZXMgdXNlIEBmaWxle3JlYWwuaH0sIHdoaWNoIGRlZmluZXMgdGhlIGRlZmF1bHQKK3JlcHJlc2VudGF0aW9uIG9mIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyBhbmQgaG93IHRvIG9wZXJhdGUgb24gdGhlbS4KKworQGl0ZW0KK0FsbCB0aGUgcGFzc2VzIHRoYXQgd29yayB3aXRoIFJUTCB1c2UgdGhlIGhlYWRlciBmaWxlcyBAZmlsZXtydGwuaH0KK2FuZCBAZmlsZXtydGwuZGVmfSwgYW5kIHN1YnJvdXRpbmVzIGluIGZpbGUgQGZpbGV7cnRsLmN9LiAgVGhlIHRvb2xzCitAY29kZXtnZW4qfSBhbHNvIHVzZSB0aGVzZSBmaWxlcyB0byByZWFkIGFuZCB3b3JrIHdpdGggdGhlIG1hY2hpbmUKK2Rlc2NyaXB0aW9uIFJUTC4KKworQGZpbmRleCBnZW5jb25maWcKK0BpdGVtCitTZXZlcmFsIHBhc3NlcyByZWZlciB0byB0aGUgaGVhZGVyIGZpbGUgQGZpbGV7aW5zbi1jb25maWcuaH0gd2hpY2gKK2NvbnRhaW5zIGEgZmV3IHBhcmFtZXRlcnMgKEMgbWFjcm8gZGVmaW5pdGlvbnMpIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIFJUTCBieSB0aGUgdG9vbAorQGNvZGV7Z2VuY29uZmlnfS4KKworQGNpbmRleCBpbnN0cnVjdGlvbiByZWNvZ25pemVyCitAaXRlbQorU2V2ZXJhbCBwYXNzZXMgdXNlIHRoZSBpbnN0cnVjdGlvbiByZWNvZ25pemVyLCB3aGljaCBjb25zaXN0cyBvZgorQGZpbGV7cmVjb2cuY30gYW5kIEBmaWxle3JlY29nLmh9LCBwbHVzIHRoZSBmaWxlcyBAZmlsZXtpbnNuLXJlY29nLmN9CithbmQgQGZpbGV7aW5zbi1leHRyYWN0LmN9IHRoYXQgYXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlCittYWNoaW5lIGRlc2NyaXB0aW9uIGJ5IHRoZSB0b29scyBAZmlsZXtnZW5yZWNvZ30gYW5kCitAZmlsZXtnZW5leHRyYWN0fS5AcmVmaWxsCisKK0BpdGVtCitTZXZlcmFsIHBhc3NlcyB1c2UgdGhlIGhlYWRlciBmaWxlcyBAZmlsZXtyZWdzLmh9IHdoaWNoIGRlZmluZXMgdGhlCitpbmZvcm1hdGlvbiByZWNvcmRlZCBhYm91dCBwc2V1ZG8gcmVnaXN0ZXIgdXNhZ2UsIGFuZCBAZmlsZXtiYXNpYy1ibG9jay5ofQord2hpY2ggZGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gcmVjb3JkZWQgYWJvdXQgYmFzaWMgYmxvY2tzLgorCitAaXRlbQorQGZpbGV7aGFyZC1yZWctc2V0Lmh9IGRlZmluZXMgdGhlIHR5cGUgQGNvZGV7SEFSRF9SRUdfU0VUfSwgYSBiaXQtdmVjdG9yCit3aXRoIGEgYml0IGZvciBlYWNoIGhhcmQgcmVnaXN0ZXIsIGFuZCBzb21lIG1hY3JvcyB0byBtYW5pcHVsYXRlIGl0LgorVGhpcyB0eXBlIGlzIGp1c3QgQGNvZGV7aW50fSBpZiB0aGUgbWFjaGluZSBoYXMgZmV3IGVub3VnaCBoYXJkIHJlZ2lzdGVyczsKK290aGVyd2lzZSBpdCBpcyBhbiBhcnJheSBvZiBAY29kZXtpbnR9IGFuZCBzb21lIG9mIHRoZSBtYWNyb3MgZXhwYW5kCitpbnRvIGxvb3BzLgorCitAaXRlbQorU2V2ZXJhbCBwYXNzZXMgdXNlIGluc3RydWN0aW9uIGF0dHJpYnV0ZXMuICBBIGRlZmluaXRpb24gb2YgdGhlCithdHRyaWJ1dGVzIGRlZmluZWQgZm9yIGEgcGFydGljdWxhciBtYWNoaW5lIGlzIGluIGZpbGUKK0BmaWxle2luc24tYXR0ci5ofSwgd2hpY2ggaXMgZ2VuZXJhdGVkIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gYnkKK3RoZSBwcm9ncmFtIEBmaWxle2dlbmF0dHJ9LiAgVGhlIGZpbGUgQGZpbGV7aW5zbi1hdHRydGFiLmN9IGNvbnRhaW5zCitzdWJyb3V0aW5lcyB0byBvYnRhaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIGluc25zLiAgSXQgaXMgZ2VuZXJhdGVkCitmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGJ5IHRoZSBwcm9ncmFtIEBmaWxle2dlbmF0dHJ0YWJ9LkByZWZpbGwKK0BlbmQgaXRlbWl6ZQorQGVuZCBpZnNldAorCitAaWZzZXQgSU5URVJOQUxTCitAaW5jbHVkZSBydGwudGV4aQorQGluY2x1ZGUgbWQudGV4aQorQGluY2x1ZGUgdG0udGV4aQorQGVuZCBpZnNldAorCitAaWZzZXQgSU5URVJOQUxTCitAbm9kZSBDb25maWcKK0BjaGFwdGVyIFRoZSBDb25maWd1cmF0aW9uIEZpbGUKK0BjaW5kZXggY29uZmlndXJhdGlvbiBmaWxlCitAY2luZGV4IEBmaWxle3htLUB2YXJ7bWFjaGluZX0uaH0KKworVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBAZmlsZXt4bS1AdmFye21hY2hpbmV9Lmh9IGNvbnRhaW5zIG1hY3JvCitkZWZpbml0aW9ucyB0aGF0IGRlc2NyaWJlIHRoZSBtYWNoaW5lIGFuZCBzeXN0ZW0gb24gd2hpY2ggdGhlIGNvbXBpbGVyCitpcyBydW5uaW5nLCB1bmxpa2UgdGhlIGRlZmluaXRpb25zIGluIEBmaWxle0B2YXJ7bWFjaGluZX0uaH0sIHdoaWNoCitkZXNjcmliZSB0aGUgbWFjaGluZSBmb3Igd2hpY2ggdGhlIGNvbXBpbGVyIGlzIHByb2R1Y2luZyBvdXRwdXQuICBNb3N0CitvZiB0aGUgdmFsdWVzIGluIEBmaWxle3htLUB2YXJ7bWFjaGluZX0uaH0gYXJlIGFjdHVhbGx5IHRoZSBzYW1lIG9uIGFsbAorbWFjaGluZXMgdGhhdCBHTlUgQ0MgcnVucyBvbiwgc28gbGFyZ2UgcGFydHMgb2YgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2FyZSBpZGVudGljYWwuICBCdXQgdGhlcmUgYXJlIHNvbWUgbWFjcm9zIHRoYXQgdmFyeToKKworQHRhYmxlIEBjb2RlCitAZmluZGV4IFVTRworQGl0ZW0gVVNHCitEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgaG9zdCBzeXN0ZW0gaXMgU3lzdGVtIFYuCisKK0BmaW5kZXggVk1TCitAaXRlbSBWTVMKK0RlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBob3N0IHN5c3RlbSBpcyBWTVMuCisKK0BmaW5kZXggRkFUQUxfRVhJVF9DT0RFCitAaXRlbSBGQVRBTF9FWElUX0NPREUKK0EgQyBleHByZXNzaW9uIGZvciB0aGUgc3RhdHVzIGNvZGUgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgY29tcGlsZXIKK2V4aXRzIGFmdGVyIHNlcmlvdXMgZXJyb3JzLgorCitAZmluZGV4IFNVQ0NFU1NfRVhJVF9DT0RFCitAaXRlbSBTVUNDRVNTX0VYSVRfQ09ERQorQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzdGF0dXMgY29kZSB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBjb21waWxlcgorZXhpdHMgd2l0aG91dCBzZXJpb3VzIGVycm9ycy4KKworQGZpbmRleCBIT1NUX1dPUkRTX0JJR19FTkRJQU4KK0BpdGVtIEhPU1RfV09SRFNfQklHX0VORElBTgorRGVmaW5lZCBpZiB0aGUgaG9zdCBtYWNoaW5lIHN0b3JlcyB3b3JkcyBvZiBtdWx0aS13b3JkIHZhbHVlcyBpbgorYmlnLWVuZGlhbiBvcmRlci4gIChHTlUgQ0MgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBob3N0IGJ5dGUgb3JkZXJpbmcKK3dpdGhpbiBhIHdvcmQuKQorCitAZmluZGV4IEhPU1RfRkxPQVRfV09SRFNfQklHX0VORElBTgorQGl0ZW0gSE9TVF9GTE9BVF9XT1JEU19CSUdfRU5ESUFOCitEZWZpbmUgdGhpcyBtYWNybyB0byBiZSAxIGlmIHRoZSBob3N0IG1hY2hpbmUgc3RvcmVzIEBjb2Rle0RGbW9kZX0sCitAY29kZXtYRm1vZGV9IG9yIEBjb2Rle1RGbW9kZX0gZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBpbiBtZW1vcnkgd2l0aCB0aGUKK3dvcmQgY29udGFpbmluZyB0aGUgc2lnbiBiaXQgYXQgdGhlIGxvd2VzdCBhZGRyZXNzOyBvdGhlcndpc2UsIGRlZmluZSBpdAordG8gYmUgemVyby4KKworVGhpcyBtYWNybyBuZWVkIG5vdCBiZSBkZWZpbmVkIGlmIHRoZSBvcmRlcmluZyBpcyB0aGUgc2FtZSBhcyBmb3IKK211bHRpLXdvcmQgaW50ZWdlcnMuCisKK0BmaW5kZXggSE9TVF9GTE9BVF9GT1JNQVQKK0BpdGVtIEhPU1RfRkxPQVRfRk9STUFUCitBIG51bWVyaWMgY29kZSBkaXN0aW5ndWlzaGluZyB0aGUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGZvciB0aGUgaG9zdAorbWFjaGluZS4gIFNlZSBAY29kZXtUQVJHRVRfRkxPQVRfRk9STUFUfSBpbiBAcmVme1N0b3JhZ2UgTGF5b3V0fSBmb3IgdGhlCithbHRlcm5hdGl2ZXMgYW5kIGRlZmF1bHQuCisKK0BmaW5kZXggSE9TVF9CSVRTX1BFUl9DSEFSCitAaXRlbSBIT1NUX0JJVFNfUEVSX0NIQVIKK0EgQyBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gQGNvZGV7Y2hhcn0gb24gdGhlIGhvc3QKK21hY2hpbmUuCisKK0BmaW5kZXggSE9TVF9CSVRTX1BFUl9TSE9SVAorQGl0ZW0gSE9TVF9CSVRTX1BFUl9TSE9SVAorQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBudW1iZXIgb2YgYml0cyBpbiBAY29kZXtzaG9ydH0gb24gdGhlIGhvc3QKK21hY2hpbmUuCisKK0BmaW5kZXggSE9TVF9CSVRTX1BFUl9JTlQKK0BpdGVtIEhPU1RfQklUU19QRVJfSU5UCitBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIG51bWJlciBvZiBiaXRzIGluIEBjb2Rle2ludH0gb24gdGhlIGhvc3QKK21hY2hpbmUuCisKK0BmaW5kZXggSE9TVF9CSVRTX1BFUl9MT05HCitAaXRlbSBIT1NUX0JJVFNfUEVSX0xPTkcKK0EgQyBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gQGNvZGV7bG9uZ30gb24gdGhlIGhvc3QKK21hY2hpbmUuCisKK0BmaW5kZXggT05MWV9JTlRfRklFTERTCitAaXRlbSBPTkxZX0lOVF9GSUVMRFMKK0RlZmluZSB0aGlzIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGhvc3QgY29tcGlsZXIgb25seSBzdXBwb3J0cworQGNvZGV7aW50fSBiaXQgZmllbGRzLCByYXRoZXIgdGhhbiBvdGhlciBpbnRlZ3JhbCB0eXBlcywgaW5jbHVkaW5nCitAY29kZXtlbnVtfSwgYXMgZG8gbW9zdCBDIGNvbXBpbGVycy4KKworQGZpbmRleCBPQlNUQUNLX0NIVU5LX1NJWkUKK0BpdGVtIE9CU1RBQ0tfQ0hVTktfU0laRQorQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIG9mIG9yZGluYXJ5IG9ic3RhY2sgY2h1bmtzLgorSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCBhIHVzdWFsbHktcmVhc29uYWJsZSBkZWZhdWx0IGlzIHVzZWQuCisKK0BmaW5kZXggT0JTVEFDS19DSFVOS19BTExPQworQGl0ZW0gT0JTVEFDS19DSFVOS19BTExPQworVGhlIGZ1bmN0aW9uIHVzZWQgdG8gYWxsb2NhdGUgb2JzdGFjayBjaHVua3MuCitJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIEBjb2Rle3htYWxsb2N9IGlzIHVzZWQuCisKK0BmaW5kZXggT0JTVEFDS19DSFVOS19GUkVFCitAaXRlbSBPQlNUQUNLX0NIVU5LX0ZSRUUKK1RoZSBmdW5jdGlvbiB1c2VkIHRvIGZyZWUgb2JzdGFjayBjaHVua3MuCitJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIEBjb2Rle2ZyZWV9IGlzIHVzZWQuCisKK0BmaW5kZXggVVNFX0NfQUxMT0NBCitAaXRlbSBVU0VfQ19BTExPQ0EKK0RlZmluZSB0aGlzIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcgd2l0aCB0aGUKK0Bjb2Rle2FsbG9jYX0gaW1wbGVtZW50ZWQgaW4gQy4gIFRoaXMgdmVyc2lvbiBvZiBAY29kZXthbGxvY2F9IGNhbiBiZQorZm91bmQgaW4gdGhlIGZpbGUgQGZpbGV7YWxsb2NhLmN9OyB0byB1c2UgaXQsIHlvdSBtdXN0IGFsc28gYWx0ZXIgdGhlCitAZmlsZXtNYWtlZmlsZX0gdmFyaWFibGUgQGNvZGV7QUxMT0NBfS4gIChUaGlzIGlzIGRvbmUgYXV0b21hdGljYWxseQorZm9yIHRoZSBzeXN0ZW1zIG9uIHdoaWNoIHdlIGtub3cgaXQgaXMgbmVlZGVkLikKKworSWYgeW91IGRvIGRlZmluZSB0aGlzIG1hY3JvLCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRvIGl0IGFzIGZvbGxvd3M6CisKK0BleGFtcGxlCisjaWZuZGVmIF9fR05VQ19fCisjZGVmaW5lIFVTRV9DX0FMTE9DQQorI2Vsc2UKKyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbmRpZgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorc28gdGhhdCB3aGVuIHRoZSBjb21waWxlciBpcyBjb21waWxlZCB3aXRoIEdOVSBDQyBpdCB1c2VzIHRoZSBtb3JlCitlZmZpY2llbnQgYnVpbHQtaW4gQGNvZGV7YWxsb2NhfSBmdW5jdGlvbi4KKworQGl0ZW0gRlVOQ1RJT05fQ09OVkVSU0lPTl9CVUcKK0BmaW5kZXggRlVOQ1RJT05fQ09OVkVSU0lPTl9CVUcKK0RlZmluZSB0aGlzIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGhvc3QgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKK2hhbmRsZSBjb252ZXJ0aW5nIGEgZnVuY3Rpb24gdmFsdWUgdG8gYSBwb2ludGVyLXRvLWZ1bmN0aW9uIHdoZW4gaXQgaXMKK3VzZWQgaW4gYW4gZXhwcmVzc2lvbi4KKworQGZpbmRleCBIQVZFX1ZQUklOVEYKK0BmaW5kZXggdnByaW50ZgorQGl0ZW0gSEFWRV9WUFJJTlRGCitEZWZpbmUgdGhpcyBpZiB0aGUgbGlicmFyeSBmdW5jdGlvbiBAY29kZXt2cHJpbnRmfSBpcyBhdmFpbGFibGUgb24geW91cgorc3lzdGVtLgorCitAZmluZGV4IE1VTFRJQllURV9DSEFSUworQGl0ZW0gTVVMVElCWVRFX0NIQVJTCitEZWZpbmUgdGhpcyBtYWNybyB0byBlbmFibGUgc3VwcG9ydCBmb3IgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gdGhlCitpbnB1dCB0byBHTlUgQ0MuICBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGhvc3Qgc3lzdGVtIHN1cHBvcnQgdGhlIEFOU0kgQworbGlicmFyeSBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMgdG8gd2lkZQorY2hhcmFjdGVycy4KKworQGZpbmRleCBIQVZFX1BVVEVOVgorQGZpbmRleCBwdXRlbnYKK0BpdGVtIEhBVkVfUFVURU5WCitEZWZpbmUgdGhpcyBpZiB0aGUgbGlicmFyeSBmdW5jdGlvbiBAY29kZXtwdXRlbnZ9IGlzIGF2YWlsYWJsZSBvbiB5b3VyCitzeXN0ZW0uCisKK0BmaW5kZXggUE9TSVgKK0BpdGVtIFBPU0lYCitEZWZpbmUgdGhpcyBpZiB5b3VyIHN5c3RlbSBpcyBQT1NJWC4xIGNvbXBsaWFudC4KKworQGZpbmRleCBIQVZFX1BPUEVOCitAZmluZGV4IHBvcGVuCitAaXRlbSBIQVZFX1BPUEVOCitEZWZpbmUgdGhpcyBpZiB0aGUgbGlicmFyeSBmdW5jdGlvbiBAY29kZXtwb3Blbn0gaXMgYXZhaWxhYmxlIG9uIHlvdXIKK3N5c3RlbS4KKworQGZpbmRleCBOT19TWVNfU0lHTElTVAorQGl0ZW0gTk9fU1lTX1NJR0xJU1QKK0RlZmluZSB0aGlzIGlmIHlvdXIgc3lzdGVtIEBlbXBoe2RvZXMgbm90fSBwcm92aWRlIHRoZSB2YXJpYWJsZQorQGNvZGV7c3lzX3NpZ2xpc3R9LgorCitAZmluZGV4IERPTlRfREVDTEFSRV9TWVNfU0lHTElTVAorQGl0ZW0gRE9OVF9ERUNMQVJFX1NZU19TSUdMSVNUCitEZWZpbmUgdGhpcyBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIHZhcmlhYmxlIEBjb2Rle3N5c19zaWdsaXN0fSwgYW5kCit0aGVyZSBpcyBhbHJlYWR5IGEgZGVjbGFyYXRpb24gb2YgaXQgaW4gdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCisKK0BmaW5kZXggVVNFX1BST1RPVFlQRVMKK0BpdGVtIFVTRV9QUk9UT1RZUEVTCitEZWZpbmUgdGhpcyB0byBiZSAxIGlmIHlvdSBrbm93IHRoYXQgdGhlIGhvc3QgY29tcGlsZXIgc3VwcG9ydHMKK3Byb3RvdHlwZXMsIGV2ZW4gaWYgaXQgZG9lc24ndCBkZWZpbmUgX19TVERDX18sIG9yIGRlZmluZQoraXQgdG8gYmUgMCBpZiB5b3UgZG8gbm90IHdhbnQgYW55IHByb3RvdHlwZXMgdXNlZCBpbiBjb21waWxpbmcKK0dOVSBDQy4gIElmIEBzYW1we1VTRV9QUk9UT1RZUEVTfSBpcyBub3QgZGVmaW5lZCwgaXQgd2lsbCBiZQorZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IHdoZXRoZXIgeW91ciBjb21waWxlciBzdXBwb3J0cworcHJvdG90eXBlcyBieSBjaGVja2luZyBpZiBAc2FtcHtfX1NURENfX30gaXMgZGVmaW5lZC4KKworQGZpbmRleCBOT19NRF9QUk9UT1RZUEVTCitAaXRlbSBOT19NRF9QUk9UT1RZUEVTCitEZWZpbmUgdGhpcyBpZiB5b3Ugd2lzaCBzdXBwcmVzc2lvbiBvZiBwcm90b3R5cGVzIGdlbmVyYXRlZCBmcm9tCit0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlLCBidXQgdG8gdXNlIG90aGVyIHByb3RvdHlwZXMgd2l0aGluCitHTlUgQ0MuICBJZiBAc2FtcHtVU0VfUFJPVE9UWVBFU30gaXMgZGVmaW5lZCB0byBiZSAwLCBvciB0aGUKK2hvc3QgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcm90b3R5cGVzLCB0aGlzIG1hY3JvIGhhcyBubworZWZmZWN0LgorCitAZmluZGV4IE1EX0NBTExfUFJPVE9UWVBFUworQGl0ZW0gTURfQ0FMTF9QUk9UT1RZUEVTCitEZWZpbmUgdGhpcyBpZiB5b3Ugd2lzaCB0byBnZW5lcmF0ZSBwcm90b3R5cGVzIGZvciB0aGUKK0Bjb2Rle2dlbl9jYWxsfSBvciBAY29kZXtnZW5fY2FsbF92YWx1ZX0gZnVuY3Rpb25zIGdlbmVyYXRlZCBmcm9tCit0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlLiAgSWYgQHNhbXB7VVNFX1BST1RPVFlQRVN9IGlzCitkZWZpbmVkIHRvIGJlIDAsIG9yIHRoZSBob3N0IGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQKK3Byb3RvdHlwZXMsIG9yIEBzYW1we05PX01EX1BST1RPVFlQRVN9IGlzIGRlZmluZWQsIHRoaXMgbWFjcm8gaGFzCitubyBlZmZlY3QuICBBcyBzb29uIGFzIGFsbCBvZiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbnMgYXJlCittb2RpZmllZCB0byBoYXZlIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGlzIG1hY3JvCit3aWxsIGJlIHJlbW92ZWQuCisKK0B2aW5kZXggc3lzX3NpZ2xpc3QKK1NvbWUgc3lzdGVtcyBkbyBwcm92aWRlIHRoaXMgdmFyaWFibGUsIGJ1dCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgc3VjaAorYXMgQGNvZGV7X3N5c19zaWdsaXN0fS4gIE9uIHRoZXNlIHN5c3RlbXMsIHlvdSBjYW4gZGVmaW5lCitAY29kZXtzeXNfc2lnbGlzdH0gYXMgYSBtYWNybyB3aGljaCBleHBhbmRzIGludG8gdGhlIG5hbWUgYWN0dWFsbHkKK3Byb3ZpZGVkLgorCitAZmluZGV4IE5PX1NUQUJfSAorQGl0ZW0gTk9fU1RBQl9ICitEZWZpbmUgdGhpcyBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZSBpbmNsdWRlIGZpbGUKK0BmaWxle3N0YWIuaH0uICBJZiBAc2FtcHtVU0d9IGlzIGRlZmluZWQsIEBzYW1we05PX1NUQUJfSH0gaXMKK2Fzc3VtZWQuCisKK0BmaW5kZXggUEFUSF9TRVBBUkFUT1IKK0BpdGVtIFBBVEhfU0VQQVJBVE9SCitEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBhIEMgY2hhcmFjdGVyIGNvbnN0YW50IHJlcHJlc2VudGluZyB0aGUKK2NoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGNvbXBvbmVudHMgaW4gcGF0aHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcy4KK3RoZSBjb2xvbiBjaGFyYWN0ZXIKKworQGZpbmRleCBESVJfU0VQQVJBVE9SCitAaXRlbSBESVJfU0VQQVJBVE9SCitJZiB5b3VyIHN5c3RlbSB1c2VzIHNvbWUgY2hhcmFjdGVyIG90aGVyIHRoYW4gc2xhc2ggdG8gc2VwYXJhdGUKK2RpcmVjdG9yeSBuYW1lcyB3aXRoaW4gYSBmaWxlIHNwZWNpZmljYXRpb24sIGRlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGEgQworY2hhcmFjdGVyIGNvbnN0YW50IHNwZWNpZnlpbmcgdGhhdCBjaGFyYWN0ZXIuICBXaGVuIEdOVSBDQyBkaXNwbGF5cyBmaWxlCituYW1lcywgdGhlIGNoYXJhY3RlciB5b3Ugc3BlY2lmeSB3aWxsIGJlIHVzZWQuICBHTlUgQ0Mgd2lsbCB0ZXN0IGZvcgorYm90aCBzbGFzaCBhbmQgdGhlIGNoYXJhY3RlciB5b3Ugc3BlY2lmeSB3aGVuIHBhcnNpbmcgZmlsZW5hbWVzLgorCitAZmluZGV4IE9CSkVDVF9TVUZGSVgKK0BpdGVtIE9CSkVDVF9TVUZGSVgKK0RlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGEgQyBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzdWZmaXggZm9yIG9iamVjdAorZmlsZXMgb24geW91ciBtYWNoaW5lLiAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgR05VIENDIHdpbGwgdXNlCitAc2FtcHsub30gYXMgdGhlIHN1ZmZpeCBmb3Igb2JqZWN0IGZpbGVzLgorCitAZmluZGV4IEVYRUNVVEFCTEVfU1VGRklYCitAaXRlbSBFWEVDVVRBQkxFX1NVRkZJWAorRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHN1ZmZpeCBmb3IgZXhlY3V0YWJsZQorZmlsZXMgb24geW91ciBtYWNoaW5lLiAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgR05VIENDIHdpbGwgdXNlCit0aGUgbnVsbCBzdHJpbmcgYXMgdGhlIHN1ZmZpeCBmb3Igb2JqZWN0IGZpbGVzLgorCitAZmluZGV4IENPTExFQ1RfRVhQT1JUX0xJU1QKK0BpdGVtIENPTExFQ1RfRVhQT1JUX0xJU1QKK0lmIGRlZmluZWQsIEBjb2Rle2NvbGxlY3QyfSB3aWxsIHNjYW4gdGhlIGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzCitzcGVjaWZpZWQgb24gaXRzIGNvbW1hbmQgbGluZSBhbmQgY3JlYXRlIGFuIGV4cG9ydCBsaXN0IGZvciB0aGUgbGlua2VyLgorRGVmaW5lIHRoaXMgbWFjcm8gZm9yIHN5c3RlbXMgbGlrZSBBSVgsIHdoZXJlIHRoZSBsaW5rZXIgZGlzY2FyZHMKK29iamVjdCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tIEBjb2Rle21haW59IGFuZCB1c2VzIGV4cG9ydAorbGlzdHMuCitAZW5kIHRhYmxlCisKK0BmaW5kZXggYnplcm8KK0BmaW5kZXggYmNtcAorSW4gYWRkaXRpb24sIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHN5c3RlbSBWIGRlZmluZSBAY29kZXtiY29weX0sCitAY29kZXtiemVyb30gYW5kIEBjb2Rle2JjbXB9IGFzIGFsaWFzZXMuICBTb21lIGZpbGVzIGRlZmluZSBAY29kZXthbGxvY2F9CithcyBhIG1hY3JvIHdoZW4gY29tcGlsZWQgd2l0aCBHTlUgQ0MsIGluIG9yZGVyIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZQorYmVuZWZpdCBvZiBHTlUgQ0MncyBidWlsdC1pbiBAY29kZXthbGxvY2F9LgorCitAbm9kZSBGcmFnbWVudHMKK0BjaGFwdGVyIE1ha2VmaWxlIEZyYWdtZW50cworQGNpbmRleCBtYWtlZmlsZSBmcmFnbWVudAorCitXaGVuIHlvdSBjb25maWd1cmUgR05VIENDIHVzaW5nIHRoZSBAZmlsZXtjb25maWd1cmV9IHNjcmlwdAorKEBweHJlZntJbnN0YWxsYXRpb259KSwgaXQgd2lsbCBjb25zdHJ1Y3QgdGhlIGZpbGUgQGZpbGV7TWFrZWZpbGV9IGZyb20KK3RoZSB0ZW1wbGF0ZSBmaWxlIEBmaWxle01ha2VmaWxlLmlufS4gIFdoZW4gaXQgZG9lcyB0aGlzLCBpdCB3aWxsCitpbmNvcnBvcmF0ZSBtYWtlZmlsZSBmcmFnbWVudCBmaWxlcyBmcm9tIHRoZSBAZmlsZXtjb25maWd9IGRpcmVjdG9yeSwKK25hbWVkIEBmaWxle3QtQHZhcnt0YXJnZXR9fSBhbmQgQGZpbGV7eC1AdmFye2hvc3R9fS4gIElmIHRoZXNlIGZpbGVzIGRvCitub3QgZXhpc3QsIGl0IG1lYW5zIG5vdGhpbmcgbmVlZHMgdG8gYmUgYWRkZWQgZm9yIGEgZ2l2ZW4gdGFyZ2V0IG9yCitob3N0LgorCitAbWVudQorKiBUYXJnZXQgRnJhZ21lbnQ6OiBXcml0aW5nIHRoZSBAZmlsZXt0LUB2YXJ7dGFyZ2V0fX0gZmlsZS4KKyogSG9zdCBGcmFnbWVudDo6ICAgV3JpdGluZyB0aGUgQGZpbGV7eC1AdmFye2hvc3R9fSBmaWxlLgorQGVuZCBtZW51CisKK0Bub2RlIFRhcmdldCBGcmFnbWVudAorQHNlY3Rpb24gVGhlIFRhcmdldCBNYWtlZmlsZSBGcmFnbWVudAorQGNpbmRleCB0YXJnZXQgbWFrZWZpbGUgZnJhZ21lbnQKK0BjaW5kZXggQGZpbGV7dC1AdmFye3RhcmdldH19CisKK1RoZSB0YXJnZXQgbWFrZWZpbGUgZnJhZ21lbnQsIEBmaWxle3QtQHZhcnt0YXJnZXR9fSwgZGVmaW5lcyBzcGVjaWFsCit0YXJnZXQgZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgdGFyZ2V0cyB1c2VkIGluIHRoZSBAZmlsZXtNYWtlZmlsZX06CisKK0B0YWJsZSBAY29kZQorQGZpbmRleCBMSUJHQ0MxCitAaXRlbSBMSUJHQ0MxCitUaGUgcnVsZSB0byB1c2UgdG8gYnVpbGQgQGZpbGV7bGliZ2NjMS5hfS4KK0lmIHlvdXIgdGFyZ2V0IGRvZXMgbm90IG5lZWQgdG8gdXNlIHRoZSBmdW5jdGlvbnMgaW4gQGZpbGV7bGliZ2NjMS5hfSwKK3NldCB0aGlzIHRvIGVtcHR5LgorQHhyZWZ7SW50ZXJmYWNlfS4KKworQGZpbmRleCBDUk9TU19MSUJHQ0MxCitAaXRlbSBDUk9TU19MSUJHQ0MxCitUaGUgcnVsZSB0byB1c2UgdG8gYnVpbGQgQGZpbGV7bGliZ2NjMS5hfSB3aGVuIGJ1aWxkaW5nIGEgY3Jvc3MKK2NvbXBpbGVyLiAgSWYgeW91ciB0YXJnZXQgZG9lcyBub3QgbmVlZCB0byB1c2UgdGhlIGZ1bmN0aW9ucyBpbgorQGZpbGV7bGliZ2NjMS5hfSwgc2V0IHRoaXMgdG8gZW1wdHkuICBAeHJlZntDcm9zcyBSdW50aW1lfS4KKworQGZpbmRleCBMSUJHQ0MyX0NGTEFHUworQGl0ZW0gTElCR0NDMl9DRkxBR1MKK0NvbXBpbGVyIGZsYWdzIHRvIHVzZSB3aGVuIGNvbXBpbGluZyBAZmlsZXtsaWJnY2MyLmN9LgorCitAZmluZGV4IExJQjJGVU5DU19FWFRSQQorQGl0ZW0gTElCMkZVTkNTX0VYVFJBCitBIGxpc3Qgb2Ygc291cmNlIGZpbGUgbmFtZXMgdG8gYmUgY29tcGlsZWQgb3IgYXNzZW1ibGVkIGFuZCBpbnNlcnRlZAoraW50byBAZmlsZXtsaWJnY2MuYX0uCisKK0BmaW5kZXggQ1JUU1RVRkZfVF9DRkxBR1MKK0BpdGVtIENSVFNUVUZGX1RfQ0ZMQUdTCitTcGVjaWFsIGZsYWdzIHVzZWQgd2hlbiBjb21waWxpbmcgQGZpbGV7Y3J0c3R1ZmYuY30uCitAeHJlZntJbml0aWFsaXphdGlvbn0uCisKK0BmaW5kZXggQ1JUU1RVRkZfVF9DRkxBR1NfUworQGl0ZW0gQ1JUU1RVRkZfVF9DRkxBR1NfUworU3BlY2lhbCBmbGFncyB1c2VkIHdoZW4gY29tcGlsaW5nIEBmaWxle2NydHN0dWZmLmN9IGZvciBzaGFyZWQKK2xpbmtpbmcuICBVc2VkIGlmIHlvdSB1c2UgQGZpbGV7Y3J0YmVnaW5TLm99IGFuZCBAZmlsZXtjcnRlbmRTLm99CitpbiBAY29kZXtFWFRSQS1QQVJUU30uCitAeHJlZntJbml0aWFsaXphdGlvbn0uCisKK0BmaW5kZXggTVVMVElMSUJfT1BUSU9OUworQGl0ZW0gTVVMVElMSUJfT1BUSU9OUworRm9yIHNvbWUgdGFyZ2V0cywgaW52b2tpbmcgR05VIENDIGluIGRpZmZlcmVudCB3YXlzIHByb2R1Y2VzIG9iamVjdHMKK3RoYXQgY2FuIG5vdCBiZSBsaW5rZWQgdG9nZXRoZXIuICBGb3IgZXhhbXBsZSwgZm9yIHNvbWUgdGFyZ2V0cyBHTlUgQ0MKK3Byb2R1Y2VzIGJvdGggYmlnIGFuZCBsaXR0bGUgZW5kaWFuIGNvZGUuICBGb3IgdGhlc2UgdGFyZ2V0cywgeW91IG11c3QKK2FycmFuZ2UgZm9yIG11bHRpcGxlIHZlcnNpb25zIG9mIEBmaWxle2xpYmdjYy5hfSB0byBiZSBjb21waWxlZCwgb25lIGZvcgorZWFjaCBzZXQgb2YgaW5jb21wYXRpYmxlIG9wdGlvbnMuICBXaGVuIEdOVSBDQyBpbnZva2VzIHRoZSBsaW5rZXIsIGl0CithcnJhbmdlcyB0byBsaW5rIGluIHRoZSByaWdodCB2ZXJzaW9uIG9mIEBmaWxle2xpYmdjYy5hfSwgYmFzZWQgb24KK3RoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB1c2VkLgorCitUaGUgQGNvZGV7TVVMVElMSUJfT1BUSU9OU30gbWFjcm8gbGlzdHMgdGhlIHNldCBvZiBvcHRpb25zIGZvciB3aGljaAorc3BlY2lhbCB2ZXJzaW9ucyBvZiBAZmlsZXtsaWJnY2MuYX0gbXVzdCBiZSBidWlsdC4gIFdyaXRlIG9wdGlvbnMgdGhhdAorYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSBzaWRlIGJ5IHNpZGUsIHNlcGFyYXRlZCBieSBhIHNsYXNoLiAgV3JpdGUKK29wdGlvbnMgdGhhdCBtYXkgYmUgdXNlZCB0b2dldGhlciBzZXBhcmF0ZWQgYnkgYSBzcGFjZS4gIFRoZSBidWlsZAorcHJvY2VkdXJlIHdpbGwgYnVpbGQgYWxsIGNvbWJpbmF0aW9ucyBvZiBjb21wYXRpYmxlIG9wdGlvbnMuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IEBjb2Rle01VTFRJTElCX09QVElPTlN9IHRvIEBzYW1we202ODAwMC9tNjgwMjAKK21zb2Z0LWZsb2F0fSwgQGZpbGV7TWFrZWZpbGV9IHdpbGwgYnVpbGQgc3BlY2lhbCB2ZXJzaW9ucyBvZgorQGZpbGV7bGliZ2NjLmF9IHVzaW5nIHRoZSBzZXRzIG9mIG9wdGlvbnMgQHNhbXB7LW02ODAwMH0sIEBzYW1wey1tNjgwMjB9LAorQHNhbXB7LW1zb2Z0LWZsb2F0fSwgQHNhbXB7LW02ODAwMCAtbXNvZnQtZmxvYXR9LCBhbmQgQHNhbXB7LW02ODAyMAorLW1zb2Z0LWZsb2F0fS4KKworQGZpbmRleCBNVUxUSUxJQl9ESVJOQU1FUworQGl0ZW0gTVVMVElMSUJfRElSTkFNRVMKK0lmIEBjb2Rle01VTFRJTElCX09QVElPTlN9IGlzIHVzZWQsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZQorZGlyZWN0b3J5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gaG9sZCB0aGUgdmFyaW91cyBsaWJyYXJpZXMuCitXcml0ZSBvbmUgZWxlbWVudCBpbiBAY29kZXtNVUxUSUxJQl9ESVJOQU1FU30gZm9yIGVhY2ggZWxlbWVudCBpbgorQGNvZGV7TVVMVElMSUJfT1BUSU9OU30uICBJZiBAY29kZXtNVUxUSUxJQl9ESVJOQU1FU30gaXMgbm90IHVzZWQsIHRoZQorZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIEBjb2Rle01VTFRJTElCX09QVElPTlN9LCB3aXRoIGFsbCBzbGFzaGVzIHRyZWF0ZWQKK2FzIHNwYWNlcy4KKworRm9yIGV4YW1wbGUsIGlmIEBjb2Rle01VTFRJTElCX09QVElPTlN9IGlzIHNwZWNpZmllZCBhcyBAc2FtcHttNjgwMDAvbTY4MDIwCittc29mdC1mbG9hdH0sIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgQGNvZGV7TVVMVElMSUJfRElSTkFNRVN9IGlzCitAc2FtcHttNjgwMDAgbTY4MDIwIG1zb2Z0LWZsb2F0fS4gIFlvdSBtYXkgc3BlY2lmeSBhIGRpZmZlcmVudCB2YWx1ZSBpZgoreW91IGRlc2lyZSBhIGRpZmZlcmVudCBzZXQgb2YgZGlyZWN0b3J5IG5hbWVzLgorCitAZmluZGV4IE1VTFRJTElCX01BVENIRVMKK0BpdGVtIE1VTFRJTElCX01BVENIRVMKK1NvbWV0aW1lcyB0aGUgc2FtZSBvcHRpb24gbWF5IGJlIHdyaXR0ZW4gaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgSWYgYW4KK29wdGlvbiBpcyBsaXN0ZWQgaW4gQGNvZGV7TVVMVElMSUJfT1BUSU9OU30sIEdOVSBDQyBuZWVkcyB0byBrbm93IGFib3V0Cithbnkgc3lub255bXMuICBJbiB0aGF0IGNhc2UsIHNldCBAY29kZXtNVUxUSUxJQl9NQVRDSEVTfSB0byBhIGxpc3Qgb2YKK2l0ZW1zIG9mIHRoZSBmb3JtIEBzYW1we29wdGlvbj1vcHRpb259IHRvIGRlc2NyaWJlIGFsbCByZWxldmFudAorc3lub255bXMuICBGb3IgZXhhbXBsZSwgQHNhbXB7bTY4MDAwPW1jNjgwMDAgbTY4MDIwPW1jNjgwMjB9LgorCitAZmluZGV4IE1VTFRJTElCX0VYQ0VQVElPTlMKK0BpdGVtIE1VTFRJTElCX0VYQ0VQVElPTlMKK1NvbWV0aW1lcyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBzZXRzIG9mIEBjb2Rle01VTFRJTElCX09QVElPTlN9IGJlaW5nCitzcGVjaWZpZWQsIHRoZXJlIGFyZSBjb21iaW5hdGlvbnMgdGhhdCBzaG91bGQgbm90IGJlIGJ1aWx0LiAgSW4gdGhhdAorY2FzZSwgc2V0IEBjb2Rle01VTFRJTElCX0VYQ0VQVElPTlN9IHRvIGJlIGFsbCBvZiB0aGUgc3dpdGNoIGV4Y2VwdGlvbnMKK2luIHNoZWxsIGNhc2Ugc3ludGF4IHRoYXQgc2hvdWxkIG5vdCBiZSBidWlsdC4KKworRm9yIGV4YW1wbGUsIGluIHRoZSBQb3dlclBDIGVtYmVkZGVkIEFCSSBzdXBwb3J0LCBpdCB3YXMgbm90IGRlc2lyYWJsZQordG8gYnVpbGQgbGlicmFyaWVzIHRoYXQgY29tcGlsZWQgd2l0aCB0aGUgQHNhbXB7LW1jYWxsLWFpeGRlc2N9IG9wdGlvbgorYW5kIGVpdGhlciBvZiB0aGUgQHNhbXB7LW1jYWxsLWFpeGRlc2N9IG9yIEBzYW1wey1tbGl0dGxlfSBvcHRpb25zIGF0Cit0aGUgc2FtZSB0aW1lLCBhbmQgdGhlcmVmb3JlIEBjb2Rle01VTFRJTElCX0VYQ0VQVElPTlN9IGlzIHNldCB0bworQGNvZGV7Km1yZWxvY2F0YWJsZS8qbWNhbGwtYWl4ZGVzYyogKm1saXR0bGUvKm1jYWxsLWFpeGRlc2MqfS4KKworQGZpbmRleCBNVUxUSUxJQl9FWFRSQV9PUFRTCitAaXRlbSBNVUxUSUxJQl9FWFRSQV9PUFRTCitTb21ldGltZXMgaXQgaXMgZGVzaXJhYmxlIHRoYXQgd2hlbiBidWlsZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZgorQGZpbGV7bGliZ2NjLmF9IGNlcnRhaW4gb3B0aW9ucyBzaG91bGQgYWx3YXlzIGJlIHBhc3NlZCBvbiB0byB0aGUKK2NvbXBpbGVyLiAgSW4gdGhhdCBjYXNlLCBzZXQgQGNvZGV7TVVMVElMSUJfRVhUUkFfT1BUU30gdG8gYmUgdGhlIGxpc3QKK29mIG9wdGlvbnMgdG8gYmUgdXNlZCBmb3IgYWxsIGJ1aWxkcy4KK0BlbmQgdGFibGUKKworQG5vZGUgSG9zdCBGcmFnbWVudAorQHNlY3Rpb24gVGhlIEhvc3QgTWFrZWZpbGUgRnJhZ21lbnQKK0BjaW5kZXggaG9zdCBtYWtlZmlsZSBmcmFnbWVudAorQGNpbmRleCBAZmlsZXt4LUB2YXJ7aG9zdH19CisKK1RoZSBob3N0IG1ha2VmaWxlIGZyYWdtZW50LCBAZmlsZXt4LUB2YXJ7aG9zdH19LCBkZWZpbmVzIHNwZWNpYWwgaG9zdAorZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgdGFyZ2V0cyB1c2VkIGluIHRoZSBAZmlsZXtNYWtlZmlsZX06CisKK0B0YWJsZSBAY29kZQorQGZpbmRleCBDQworQGl0ZW0gQ0MKK1RoZSBjb21waWxlciB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGUgZmlyc3Qgc3RhZ2UuCisKK0BmaW5kZXggQ0xJQgorQGl0ZW0gQ0xJQgorQWRkaXRpb25hbCBob3N0IGxpYnJhcmllcyB0byBsaW5rIHdpdGguCisKK0BmaW5kZXggT0xEQ0MKK0BpdGVtIE9MRENDCitUaGUgY29tcGlsZXIgdG8gdXNlIHdoZW4gYnVpbGRpbmcgQGZpbGV7bGliZ2NjMS5hfSBmb3IgYSBuYXRpdmUKK2NvbXBpbGF0aW9uLgorCitAZmluZGV4IE9MREFSCitAaXRlbSBPTERBUgorVGhlIHZlcnNpb24gb2YgQGNvZGV7YXJ9IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIEBmaWxle2xpYmdjYzEuYX0gZm9yIGEgbmF0aXZlCitjb21waWxhdGlvbi4KKworQGZpbmRleCBJTlNUQUxMCitAaXRlbSBJTlNUQUxMCitUaGUgaW5zdGFsbCBwcm9ncmFtIHRvIHVzZS4KK0BlbmQgdGFibGUKKworQG5vZGUgRnVuZGluZworQHVubnVtYmVyZWQgRnVuZGluZyBGcmVlIFNvZnR3YXJlCisKK0lmIHlvdSB3YW50IHRvIGhhdmUgbW9yZSBmcmVlIHNvZnR3YXJlIGEgZmV3IHllYXJzIGZyb20gbm93LCBpdCBtYWtlcworc2Vuc2UgZm9yIHlvdSB0byBoZWxwIGVuY291cmFnZSBwZW9wbGUgdG8gY29udHJpYnV0ZSBmdW5kcyBmb3IgaXRzCitkZXZlbG9wbWVudC4gIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBrbm93biBpcyB0byBlbmNvdXJhZ2UKK2NvbW1lcmNpYWwgcmVkaXN0cmlidXRvcnMgdG8gZG9uYXRlLgorCitVc2VycyBvZiBmcmVlIHNvZnR3YXJlIHN5c3RlbXMgY2FuIGJvb3N0IHRoZSBwYWNlIG9mIGRldmVsb3BtZW50IGJ5CitlbmNvdXJhZ2luZyBmb3ItYS1mZWUgZGlzdHJpYnV0b3JzIHRvIGRvbmF0ZSBwYXJ0IG9mIHRoZWlyIHNlbGxpbmcgcHJpY2UKK3RvIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycy0tLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZCBvdGhlcnMuCisKK1RoZSB3YXkgdG8gY29udmluY2UgZGlzdHJpYnV0b3JzIHRvIGRvIHRoaXMgaXMgdG8gZGVtYW5kIGl0IGFuZCBleHBlY3QKK2l0IGZyb20gdGhlbS4gIFNvIHdoZW4geW91IGNvbXBhcmUgZGlzdHJpYnV0b3JzLCBqdWRnZSB0aGVtIHBhcnRseSBieQoraG93IG11Y2ggdGhleSBnaXZlIHRvIGZyZWUgc29mdHdhcmUgZGV2ZWxvcG1lbnQuICBTaG93IGRpc3RyaWJ1dG9ycwordGhleSBtdXN0IGNvbXBldGUgdG8gYmUgdGhlIG9uZSB3aG8gZ2l2ZXMgdGhlIG1vc3QuCisKK1RvIG1ha2UgdGhpcyBhcHByb2FjaCB3b3JrLCB5b3UgbXVzdCBpbnNpc3Qgb24gbnVtYmVycyB0aGF0IHlvdSBjYW4KK2NvbXBhcmUsIHN1Y2ggYXMsIGBgV2Ugd2lsbCBkb25hdGUgdGVuIGRvbGxhcnMgdG8gdGhlIEZyb2JuaXR6IHByb2plY3QKK2ZvciBlYWNoIGRpc2sgc29sZC4nJyAgRG9uJ3QgYmUgc2F0aXNmaWVkIHdpdGggYSB2YWd1ZSBwcm9taXNlLCBzdWNoIGFzCitgYEEgcG9ydGlvbiBvZiB0aGUgcHJvZml0cyBhcmUgZG9uYXRlZCwnJyBzaW5jZSBpdCBkb2Vzbid0IGdpdmUgYSBiYXNpcworZm9yIGNvbXBhcmlzb24uCisKK0V2ZW4gYSBwcmVjaXNlIGZyYWN0aW9uIGBgb2YgdGhlIHByb2ZpdHMgZnJvbSB0aGlzIGRpc2snJyBpcyBub3QgdmVyeQorbWVhbmluZ2Z1bCwgc2luY2UgY3JlYXRpdmUgYWNjb3VudGluZyBhbmQgdW5yZWxhdGVkIGJ1c2luZXNzIGRlY2lzaW9ucworY2FuIGdyZWF0bHkgYWx0ZXIgd2hhdCBmcmFjdGlvbiBvZiB0aGUgc2FsZXMgcHJpY2UgY291bnRzIGFzIHByb2ZpdC4KK0lmIHRoZSBwcmljZSB5b3UgcGF5IGlzICQ1MCwgdGVuIHBlcmNlbnQgb2YgdGhlIHByb2ZpdCBpcyBwcm9iYWJseQorbGVzcyB0aGFuIGEgZG9sbGFyOyBpdCBtaWdodCBiZSBhIGZldyBjZW50cywgb3Igbm90aGluZyBhdCBhbGwuCisKK1NvbWUgcmVkaXN0cmlidXRvcnMgZG8gZGV2ZWxvcG1lbnQgd29yayB0aGVtc2VsdmVzLiAgVGhpcyBpcyB1c2VmdWwgdG9vOworYnV0IHRvIGtlZXAgZXZlcnlvbmUgaG9uZXN0LCB5b3UgbmVlZCB0byBpbnF1aXJlIGhvdyBtdWNoIHRoZXkgZG8sIGFuZAord2hhdCBraW5kLiAgU29tZSBraW5kcyBvZiBkZXZlbG9wbWVudCBtYWtlIG11Y2ggbW9yZSBsb25nLXRlcm0KK2RpZmZlcmVuY2UgdGhhbiBvdGhlcnMuICBGb3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBzZXBhcmF0ZSB2ZXJzaW9uIG9mCithIHByb2dyYW0gY29udHJpYnV0ZXMgdmVyeSBsaXR0bGU7IG1haW50YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIGEKK3Byb2dyYW0gZm9yIHRoZSB3aG9sZSBjb21tdW5pdHkgY29udHJpYnV0ZXMgbXVjaC4gIEVhc3kgbmV3IHBvcnRzCitjb250cmlidXRlIGxpdHRsZSwgc2luY2Ugc29tZW9uZSBlbHNlIHdvdWxkIHN1cmVseSBkbyB0aGVtOyBkaWZmaWN1bHQKK3BvcnRzIHN1Y2ggYXMgYWRkaW5nIGEgbmV3IENQVSB0byB0aGUgR05VIEMgY29tcGlsZXIgY29udHJpYnV0ZSBtb3JlOworbWFqb3IgbmV3IGZlYXR1cmVzIG9yIHBhY2thZ2VzIGNvbnRyaWJ1dGUgdGhlIG1vc3QuCisKK0J5IGVzdGFibGlzaGluZyB0aGUgaWRlYSB0aGF0IHN1cHBvcnRpbmcgZnVydGhlciBkZXZlbG9wbWVudCBpcyBgYHRoZQorcHJvcGVyIHRoaW5nIHRvIGRvJycgd2hlbiBkaXN0cmlidXRpbmcgZnJlZSBzb2Z0d2FyZSBmb3IgYSBmZWUsIHdlIGNhbgorYXNzdXJlIGEgc3RlYWR5IGZsb3cgb2YgcmVzb3VyY2VzIGludG8gbWFraW5nIG1vcmUgZnJlZSBzb2Z0d2FyZS4KKworQGRpc3BsYXkKK0NvcHlyaWdodCAoQykgMTk5NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1ZlcmJhdGltIGNvcHlpbmcgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBwZXJtaXR0ZWQKK3dpdGhvdXQgcm95YWx0eTsgYWx0ZXJhdGlvbiBpcyBub3QgcGVybWl0dGVkLgorQGVuZCBkaXNwbGF5CisKK0Bub2RlIExvb2sgYW5kIEZlZWwKK0B1bm51bWJlcmVkIFByb3RlY3QgWW91ciBGcmVlZG9tLS0tRmlnaHQgYGBMb29rIEFuZCBGZWVsJycKK0BjIHRoZSBhYm92ZSBjaGFwdGVyIGhlYWRpbmcgb3ZlcmZsb3dzIG9udG8gdGhlIG5leHQgbGluZS4gLS1tZXcgMS8yNi85MworCitAcXVvdGF0aW9uCitAaXtUaGlzIHNlY3Rpb24gaXMgYSBwb2xpdGljYWwgbWVzc2FnZSBmcm9tIHRoZSBMZWFndWUgZm9yIFByb2dyYW1taW5nCitGcmVlZG9tIHRvIHRoZSB1c2VycyBvZiBHTlUgQ0MuICBXZSBoYXZlIGluY2x1ZGVkIGl0IGhlcmUgYmVjYXVzZSB0aGUKK2lzc3VlIG9mIGludGVyZmFjZSBjb3B5cmlnaHQgaXMgaW1wb3J0YW50IHRvIHRoZSBHTlUgcHJvamVjdC59CitAZW5kIHF1b3RhdGlvbgorCitBcHBsZSwgTG90dXMsIGFuZCBub3cgQ0RDIGhhdmUgdHJpZWQgdG8gY3JlYXRlIGEgbmV3IGZvcm0gb2YgbGVnYWwKK21vbm9wb2x5OiBhIGNvcHlyaWdodCBvbiBhIHVzZXIgaW50ZXJmYWNlLgorCitBbiBpbnRlcmZhY2UgaXMgYSBraW5kIG9mIGxhbmd1YWdlLS0tYSBzZXQgb2YgY29udmVudGlvbnMgZm9yCitjb21tdW5pY2F0aW9uIGJldHdlZW4gdHdvIGVudGl0aWVzLCBodW1hbiBvciBtYWNoaW5lLiAgVW50aWwgYSBmZXcgeWVhcnMKK2FnbywgdGhlIGxhdyBzZWVtZWQgY2xlYXI6IGludGVyZmFjZXMgd2VyZSBvdXRzaWRlIHRoZSBkb21haW4gb2YKK2NvcHlyaWdodCwgc28gcHJvZ3JhbW1lcnMgY291bGQgcHJvZ3JhbSBmcmVlbHkgYW5kIGltcGxlbWVudCB3aGF0ZXZlcgoraW50ZXJmYWNlIHRoZSB1c2VycyBkZW1hbmRlZC4gIEltaXRhdGluZyBkZS1mYWN0byBzdGFuZGFyZCBpbnRlcmZhY2VzLAorc29tZXRpbWVzIHdpdGggaW1wcm92ZW1lbnRzLCB3YXMgc3RhbmRhcmQgcHJhY3RpY2UgaW4gdGhlIGNvbXB1dGVyCitmaWVsZC4gIFRoZXNlIGltcHJvdmVtZW50cywgaWYgYWNjZXB0ZWQgYnkgdGhlIHVzZXJzLCBjYXVnaHQgb24gYW5kCitiZWNhbWUgdGhlIG5vcm07IGluIHRoaXMgd2F5LCBtdWNoIHByb2dyZXNzIHRvb2sgcGxhY2UuCisKK0NvbXB1dGVyIHVzZXJzLCBhbmQgbW9zdCBzb2Z0d2FyZSBkZXZlbG9wZXJzLCB3ZXJlIGhhcHB5IHdpdGggdGhpcyBzdGF0ZQorb2YgYWZmYWlycy4gIEhvd2V2ZXIsIGxhcmdlIGNvbXBhbmllcyBzdWNoIGFzIEFwcGxlIGFuZCBMb3R1cyB3b3VsZAorcHJlZmVyIGEgZGlmZmVyZW50IHN5c3RlbS0tLW9uZSBpbiB3aGljaCB0aGV5IGNhbiBvd24gaW50ZXJmYWNlcyBhbmQKK3RoZXJlYnkgcmlkIHRoZW1zZWx2ZXMgb2YgYWxsIHNlcmlvdXMgY29tcGV0aXRvcnMuICBUaGV5IGhvcGUgdGhhdAoraW50ZXJmYWNlIGNvcHlyaWdodCB3aWxsIGdpdmUgdGhlbSwgaW4gZWZmZWN0LCBtb25vcG9saWVzIG9uIG1ham9yCitjbGFzc2VzIG9mIHNvZnR3YXJlLgorCitPdGhlciBsYXJnZSBjb21wYW5pZXMgc3VjaCBhcyBJQk0gYW5kIERpZ2l0YWwgYWxzbyBmYXZvciBpbnRlcmZhY2UKK21vbm9wb2xpZXMsIGZvciB0aGUgc2FtZSByZWFzb246IGlmIGxhbmd1YWdlcyBiZWNvbWUgcHJvcGVydHksIHRoZXkKK2V4cGVjdCB0byBvd24gbWFueSBkZS1mYWN0byBzdGFuZGFyZCBsYW5ndWFnZXMuICBCdXQgQXBwbGUgYW5kIExvdHVzIGFyZQordGhlIG9uZXMgd2hvIGhhdmUgYWN0dWFsbHkgc3VlZC4gIEFwcGxlJ3MgbGF3c3VpdCB3YXMgZGVmZWF0ZWQsIGZvcgorcmVhc29ucyBvbmx5IHBhcnRseSByZWxhdGVkIHRvIHRoZSBnZW5lcmFsIGlzc3VlIG9mIGludGVyZmFjZSBjb3B5cmlnaHQuCisKK0xvdHVzIHdvbiBsYXdzdWl0cyBhZ2FpbnN0IHR3byBzbWFsbCBjb21wYW5pZXMsIHdoaWNoIHdlcmUgdGh1cyBwdXQgb3V0CitvZiBidXNpbmVzcy4gIFRoZW4gTG90dXMgc3VlZCBCb3JsYW5kOyBMb3R1cyB3b24gaW4gdGhlIHRyaWFsIGNvdXJ0IChubworc3VycHJpc2UsIHNpbmNlIGl0IHdhcyB0aGUgc2FtZSBjb3VydCB0aGF0IGhhZCBydWxlZCBmb3IgTG90dXMgdHdpY2UKK2JlZm9yZSksIGJ1dCB0aGUgY291cnQgb2YgYXBwZWFscyBydWxlZCBpbiBmYXZvciBvZiBCb3JsYW5kLCB3aGljaCB3YXMKK2Fzc2lzdGVkIGJ5IGEgZnJpZW5kLW9mLXRoZS1jb3VydCBicmllZiBmcm9tIHRoZSBMZWFndWUgZm9yIFByb2dyYW1taW5nCitGcmVlZG9tLgorCitMb3R1cyBhcHBlYWxlZCB0aGUgY2FzZSB0byB0aGUgU3VwcmVtZSBDb3VydCwgd2hpY2ggaGVhcmQgdGhlIGNhc2UgYnV0Cit3YXMgdW5hYmxlIHRvIHJlYWNoIGEgZGVjaXNpb24uICBUaGlzIGZhaWx1cmUgbWVhbnMgdGhhdCB0aGUgYXBwZWFscworY291cnQgZGVjaXNpb24gc3RhbmRzLCBpbiBvbmUgcG9ydGlvbiBvZiB0aGUgVW5pdGVkIFN0YXRlcywgYW5kIG1heQoraW5mbHVlbmNlIHRoZSBvdGhlciBhcHBlYWxzIGNvdXJ0cywgYnV0IGl0IGRvZXMgbm90IHNldCBhIG5hdGlvbndpZGUKK3ByZWNlZGVudC4gIFRoZSBiYXR0bGUgaXMgbm90IG92ZXIsIGFuZCBpdCBpcyBub3QgbGltaXRlZCB0byB0aGUgVW5pdGVkCitTdGF0ZXMuCisKK1RoZSBiYXR0bGUgaXMgZXh0ZW5kaW5nIGludG8gb3RoZXIgYXJlYXMgb2Ygc29mdHdhcmUgYXMgd2VsbC4gIEluIDE5OTUgYQorY29tcGFueSB0aGF0IHByb2R1Y2VkIGEgc2ltdWxhdG9yIGZvciBhIENEQyBjb21wdXRlciB3YXMgc2h1dCBkb3duIGJ5IGEKK2NvcHlyaWdodCBsYXdzdWl0LCBpbiB3aGljaCBDREMgY2hhcmdlZCB0aGF0IHRoZSBzaW11bGF0b3IgaW5mcmluZ2VkIHRoZQorY29weXJpZ2h0IG9uIHRoZSBtYW51YWxzIGZvciB0aGUgY29tcHV0ZXIuCisKK0lmIHRoZSBtb25vcG9saXN0cyBnZXQgdGhlaXIgd2F5LCB0aGV5IHdpbGwgaG9iYmxlIHRoZSBzb2Z0d2FyZSBmaWVsZDoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0dyYXR1aXRvdXMgaW5jb21wYXRpYmlsaXRpZXMgd2lsbCBidXJkZW4gdXNlcnMuICBJbWFnaW5lIGlmIGVhY2ggY2FyCittYW51ZmFjdHVyZXIgaGFkIHRvIGRlc2lnbiBhIGRpZmZlcmVudCB3YXkgdG8gc3RhcnQsIHN0b3AsIGFuZCBzdGVlciBhCitjYXIuCisKK0BpdGVtCitVc2VycyB3aWxsIGJlIGBgbG9ja2VkIGluJycgdG8gd2hpY2hldmVyIGludGVyZmFjZSB0aGV5IGxlYXJuOyB0aGVuIHRoZXkKK3dpbGwgYmUgcHJpc29uZXJzIG9mIG9uZSBzdXBwbGllciwgd2hvIHdpbGwgY2hhcmdlIGEgbW9ub3BvbGlzdGljIHByaWNlLgorCitAaXRlbQorTGFyZ2UgY29tcGFuaWVzIGhhdmUgYW4gdW5mYWlyIGFkdmFudGFnZSB3aGVyZXZlciBsYXdzdWl0cyBiZWNvbWUKK2NvbW1vbnBsYWNlLiAgU2luY2UgdGhleSBjYW4gYWZmb3JkIHRvIHN1ZSwgdGhleSBjYW4gaW50aW1pZGF0ZSBzbWFsbGVyCitkZXZlbG9wZXJzIHdpdGggdGhyZWF0cyBldmVuIHdoZW4gdGhleSBkb24ndCByZWFsbHkgaGF2ZSBhIGNhc2UuCisKK0BpdGVtCitJbnRlcmZhY2UgaW1wcm92ZW1lbnRzIHdpbGwgY29tZSBzbG93ZXIsIHNpbmNlIGluY3JlbWVudGFsIGV2b2x1dGlvbgordGhyb3VnaCBjcmVhdGl2ZSBwYXJ0aWFsIGltaXRhdGlvbiB3aWxsIG5vIGxvbmdlciBvY2N1ci4KK0BlbmQgaXRlbWl6ZQorCitJZiBpbnRlcmZhY2UgbW9ub3BvbGllcyBhcmUgYWNjZXB0ZWQsIG90aGVyIGxhcmdlIGNvbXBhbmllcyBhcmUgd2FpdGluZwordG8gZ3JhYiB0aGVpcnM6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitBZG9iZSBpcyBleHBlY3RlZCB0byBjbGFpbSBhIG1vbm9wb2x5IG9uIHRoZSBpbnRlcmZhY2VzIG9mIHZhcmlvdXMKK3BvcHVsYXIgYXBwbGljYXRpb24gcHJvZ3JhbXMsIGlmIExvdHVzIHVsdGltYXRlbHkgd2lucyB0aGUgY2FzZSBhZ2FpbnN0CitCb3JsYW5kLgorCitAaXRlbQorT3BlbiBDb21wdXRpbmcgbWFnYXppbmUgcmVwb3J0ZWQgYSBNaWNyb3NvZnQgdmljZSBwcmVzaWRlbnQgYXMgdGhyZWF0ZW5pbmcKK3RvIHN1ZSBwZW9wbGUgd2hvIGltaXRhdGUgdGhlIGludGVyZmFjZSBvZiBXaW5kb3dzLgorQGVuZCBpdGVtaXplCisKK1VzZXJzIGludmVzdCBhIGdyZWF0IGRlYWwgb2YgdGltZSBhbmQgbW9uZXkgaW4gbGVhcm5pbmcgdG8gdXNlIGNvbXB1dGVyCitpbnRlcmZhY2VzLiAgRmFyIG1vcmUsIGluIGZhY3QsIHRoYW4gc29mdHdhcmUgZGV2ZWxvcGVycyBpbnZlc3QgaW4KK2RldmVsb3BpbmcgQGVtcGh7YW5kIGV2ZW4gaW1wbGVtZW50aW5nfSB0aGUgaW50ZXJmYWNlcy4gIFdob2V2ZXIgY2FuIG93bgorYW4gaW50ZXJmYWNlLCBoYXMgbWFkZSBpdHMgdXNlcnMgaW50byBjYXB0aXZlcywgYW5kIG1pc2FwcHJvcHJpYXRlZAordGhlaXIgaW52ZXN0bWVudC4KKworVG8gcHJvdGVjdCBvdXIgZnJlZWRvbSBmcm9tIG1vbm9wb2xpZXMgbGlrZSB0aGVzZSwgYSBncm91cCBvZgorcHJvZ3JhbW1lcnMgYW5kIHVzZXJzIGhhdmUgZm9ybWVkIGEgZ3Jhc3Mtcm9vdHMgcG9saXRpY2FsIG9yZ2FuaXphdGlvbiwKK3RoZSBMZWFndWUgZm9yIFByb2dyYW1taW5nIEZyZWVkb20uCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBMZWFndWUgaXMgdG8gb3Bwb3NlIG1vbm9wb2xpc3RpYyBwcmFjdGljZXMgc3VjaCBhcworaW50ZXJmYWNlIGNvcHlyaWdodCBhbmQgc29mdHdhcmUgcGF0ZW50cy4gIFRoZSBMZWFndWUgY2FsbHMgZm9yIGEgcmV0dXJuCit0byB0aGUgbGVnYWwgcG9saWNpZXMgb2YgdGhlIHJlY2VudCBwYXN0LCBpbiB3aGljaCBwcm9ncmFtbWVycyBjb3VsZAorcHJvZ3JhbSBmcmVlbHkuICBUaGUgTGVhZ3VlIGlzIG5vdCBjb25jZXJuZWQgd2l0aCBmcmVlIHNvZnR3YXJlIGFzIGFuCitpc3N1ZSwgYW5kIGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworVGhlIExlYWd1ZSdzIGFjdGl2aXRpZXMgaW5jbHVkZSBwdWJsaWNpemluZyB0aGUgaXNzdWVzLCBhcyBpcyBiZWluZyBkb25lCitoZXJlLCBhbmQgZmlsaW5nIGZyaWVuZC1vZi10aGUtY291cnQgYnJpZWZzIG9uIGJlaGFsZiBvZiBkZWZlbmRhbnRzIHN1ZWQKK2J5IG1vbm9wb2xpc3RzLgorCitUaGUgTGVhZ3VlJ3MgbWVtYmVyc2hpcCByb2xscyBpbmNsdWRlIERvbmFsZCBLbnV0aCwgdGhlIGZvcmVtb3N0CithdXRob3JpdHkgb24gYWxnb3JpdGhtcywgSm9obiBNY0NhcnRoeSwgaW52ZW50b3Igb2YgTGlzcCwgTWFydmluIE1pbnNreSwKK2ZvdW5kZXIgb2YgdGhlIE1JVCBBcnRpZmljaWFsIEludGVsbGlnZW5jZSBsYWIsIEd1eSBMLiBTdGVlbGUsIEpyLiwKK2F1dGhvciBvZiB3ZWxsLWtub3duIGJvb2tzIG9uIExpc3AgYW5kIEMsIGFzIHdlbGwgYXMgUmljaGFyZCBTdGFsbG1hbiwKK3RoZSBkZXZlbG9wZXIgb2YgR05VIENDLiAgUGxlYXNlIGpvaW4gYW5kIGFkZCB5b3VyIG5hbWUgdG8gdGhlIGxpc3QuCitNZW1iZXJzaGlwIGR1ZXMgaW4gdGhlIExlYWd1ZSBhcmUgJDQyIHBlciB5ZWFyIGZvciBwcm9ncmFtbWVycywgbWFuYWdlcnMKK2FuZCBwcm9mZXNzaW9uYWxzOyAkMTAuNTAgZm9yIHN0dWRlbnRzOyAkMjEgZm9yIG90aGVycy4KKworQWN0aXZpc3QgbWVtYmVycyBhcmUgZXNwZWNpYWxseSBpbXBvcnRhbnQsIGJ1dCBtZW1iZXJzIHdobyBoYXZlIG5vIHRpbWUKK3RvIGdpdmUgYXJlIGFsc28gaW1wb3J0YW50LiAgU3VydmV5cyBhdCBtYWpvciBBQ00gY29uZmVyZW5jZXMgaGF2ZQoraW5kaWNhdGVkIGEgdmFzdCBtYWpvcml0eSBvZiBhdHRlbmRlZXMgYWdyZWUgd2l0aCB0aGUgTGVhZ3VlIG9uIGJvdGgKK2lzc3VlcyAoaW50ZXJmYWNlIGNvcHlyaWdodHMgYW5kIHNvZnR3YXJlIHBhdGVudHMpLiAgSWYganVzdCB0ZW4gcGVyY2VudAorb2YgdGhlIHByb2dyYW1tZXJzIHdobyBhZ3JlZSB3aXRoIHRoZSBMZWFndWUgam9pbiB0aGUgTGVhZ3VlLCB3ZSB3aWxsCitwcm9iYWJseSB0cml1bXBoLgorCitUbyBqb2luLCBvciBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VuZCBlbGVjdHJvbmljIG1haWwgdG8KK3RoZSBhZGRyZXNzIEBjb2Rle2xwZkBAdXVuZXQudXUubmV0fSBvciB3cml0ZSB0bzoKKworQGRpc3BsYXkKK0xlYWd1ZSBmb3IgUHJvZ3JhbW1pbmcgRnJlZWRvbQorMSBLZW5kYWxsIFNxdWFyZSAjMTQzCitQLk8uIEJveCA5MTcxCitDYW1icmlkZ2UsIE1BIDAyMTM5CitAZW5kIGRpc3BsYXkKKworSW4gYWRkaXRpb24gdG8gam9pbmluZyB0aGUgTGVhZ3VlLCBoZXJlIGFyZSBzb21lIHN1Z2dlc3Rpb25zIGZyb20gdGhlCitMZWFndWUgZm9yIG90aGVyIHRoaW5ncyB5b3UgY2FuIGRvIHRvIHByb3RlY3QgeW91ciBmcmVlZG9tIHRvIHdyaXRlCitwcm9ncmFtczoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK1RlbGwgeW91ciBmcmllbmRzIGFuZCBjb2xsZWFndWVzIGFib3V0IHRoaXMgaXNzdWUgYW5kIGhvdyBpdCB0aHJlYXRlbnMKK3RvIHJ1aW4gdGhlIGNvbXB1dGVyIGluZHVzdHJ5LgorCitAaXRlbQorTWVudGlvbiB0aGF0IHlvdSBhcmUgYSBMZWFndWUgbWVtYmVyIGluIHlvdXIgQGZpbGV7LnNpZ25hdHVyZX0sIGFuZAorbWVudGlvbiB0aGUgTGVhZ3VlJ3MgZW1haWwgYWRkcmVzcyBmb3IgaW5xdWlyaWVzLgorCitAaXRlbQorQXNrIHRoZSBjb21wYW5pZXMgeW91IGNvbnNpZGVyIHdvcmtpbmcgZm9yIG9yIHdvcmtpbmcgd2l0aCB0byBtYWtlCitzdGF0ZW1lbnRzIGFnYWluc3Qgc29mdHdhcmUgbW9ub3BvbGllcywgYW5kIGdpdmUgcHJlZmVyZW5jZSB0byB0aG9zZQordGhhdCBkby4KKworQGl0ZW0KK1doZW4gZW1wbG95ZXJzIGFzayB5b3UgdG8gc2lnbiBjb250cmFjdHMgZ2l2aW5nIHRoZW0gY29weXJpZ2h0IG9uIHlvdXIKK3dvcmssIGluc2lzdCBvbiBhIGNsYXVzZSBzYXlpbmcgdGhleSB3aWxsIG5vdCBjbGFpbSB0aGUgY29weXJpZ2h0IGNvdmVycworaW1pdGF0aW5nIHRoZSBpbnRlcmZhY2UuCisKK0BpdGVtCitXaGVuIGVtcGxveWVycyBhc2sgeW91IHRvIHNpZ24gY29udHJhY3RzIGdpdmluZyB0aGVtIHBhdGVudCByaWdodHMsCitpbnNpc3Qgb24gY2xhdXNlcyBzYXlpbmcgdGhleSBjYW4gdXNlIHRoZXNlIHJpZ2h0cyBvbmx5IGRlZmVuc2l2ZWx5LgorRG9uJ3QgcmVseSBvbiBgYGNvbXBhbnkgcG9saWN5LCcnIHNpbmNlIHRoYXQgY2FuIGNoYW5nZSBhdCBhbnkgdGltZTsKK2Rvbid0IHJlbHkgb24gYW4gaW5kaXZpZHVhbCBleGVjdXRpdmUncyBwcml2YXRlIHdvcmQsIHNpbmNlIHRoYXQgcGVyc29uCittYXkgYmUgcmVwbGFjZWQuICBHZXQgYSBjb21taXRtZW50IGp1c3QgYXMgYmluZGluZyBhcyB0aGUgY29tbWl0bWVudAordGhleSBnZXQgZnJvbSB5b3UuCisKK0BpdGVtCitXcml0ZSB0byBDb25ncmVzcyB0byBleHBsYWluIHRoZSBpbXBvcnRhbmNlIG9mIHRoZXNlIGlzc3Vlcy4KKworQGRpc3BsYXkKK0hvdXNlIFN1YmNvbW1pdHRlZSBvbiBJbnRlbGxlY3R1YWwgUHJvcGVydHkKKzIxMzcgUmF5YnVybiBCbGRnCitXYXNoaW5ndG9uLCBEQyAyMDUxNQorCitTZW5hdGUgU3ViY29tbWl0dGVlIG9uIFBhdGVudHMsIFRyYWRlbWFya3MgYW5kIENvcHlyaWdodHMKK1VuaXRlZCBTdGF0ZXMgU2VuYXRlCitXYXNoaW5ndG9uLCBEQyAyMDUxMAorQGVuZCBkaXNwbGF5CisKKyhUaGVzZSBjb21taXR0ZWVzIGhhdmUgcmVjZWl2ZWQgbG90cyBvZiBtYWlsIGFscmVhZHk7IGxldCdzIGdpdmUgdGhlbQorZXZlbiBtb3JlLikKK0BlbmQgaXRlbWl6ZQorCitEZW1vY3JhY3kgbWVhbnMgbm90aGluZyBpZiB5b3UgZG9uJ3QgdXNlIGl0LiAgU3RhbmQgdXAgYW5kIGJlIGNvdW50ZWQhCisKKworQG5vZGUgQ29weWluZworQHVubnVtYmVyZWQgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKK0BjZW50ZXIgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworQGRpc3BsYXkKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK0BlbmQgZGlzcGxheQorCitAdW5udW1iZXJlZHNlYyBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworQGlmdGV4CitAdW5udW1iZXJlZHNlYyBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KK0BlbmQgaWZ0ZXgKK0BpZmluZm8KK0BjZW50ZXIgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCitAZW5kIGlmaW5mbworCitAZW51bWVyYXRlIDAKK0BpdGVtCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSBgYFByb2dyYW0nJywgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSBgYHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0nJworbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gYGBtb2RpZmljYXRpb24nJy4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyBgYHlvdScnLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworQGl0ZW0KK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK0BpdGVtCitZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKK0BlbnVtZXJhdGUgYQorQGl0ZW0KK1lvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworQGl0ZW0KK1lvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgord2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CitwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCitAaXRlbQorSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQord2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAoraW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCitub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKK2Egd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKK3RoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCitMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgordGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCitAZW5kIGVudW1lcmF0ZQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCitAaXRlbQorWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworQGVudW1lcmF0ZSBhCitAaXRlbQorQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworQGl0ZW0KK0FjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCit5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KK2N1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworQGl0ZW0KK0FjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCit0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKK3JlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKK2FuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorQGVuZCBlbnVtZXJhdGUKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworQGl0ZW0KK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworQGl0ZW0KK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKK0BpdGVtCitFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgYGBhbnkKK2xhdGVyIHZlcnNpb24nJywgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworQGl0ZW0KK0lmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworQGlmdGV4CitAaGVhZGluZyBOTyBXQVJSQU5UWQorQGVuZCBpZnRleAorQGlmaW5mbworQGNlbnRlciBOTyBXQVJSQU5UWQorQGVuZCBpZmluZm8KKworQGl0ZW0KK0JFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gYGBBUyBJUycnIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCitAaXRlbQorSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KK0BlbmQgZW51bWVyYXRlCisKK0BpZnRleAorQGhlYWRpbmcgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCitAZW5kIGlmdGV4CitAaWZpbmZvCitAY2VudGVyIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworQGVuZCBpZmluZm8KKworQHBhZ2UKK0B1bm51bWJlcmVkc2VjIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlIGBgY29weXJpZ2h0JycgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworQHNtYWxsZXhhbXBsZQorQHZhcntvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy59CitDb3B5cmlnaHQgKEMpIDE5QHZhcnt5eX0gIEB2YXJ7bmFtZSBvZiBhdXRob3J9CisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KK0BlbmQgc21hbGxleGFtcGxlCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCitAc21hbGxleGFtcGxlCitHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5QHZhcnt5eX0gQHZhcntuYW1lIG9mIGF1dGhvcn0KK0dub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMKK3R5cGUgYHNob3cgdycuCitUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0Cit1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCitAZW5kIHNtYWxsZXhhbXBsZQorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIEBzYW1we3Nob3cgd30gYW5kIEBzYW1we3Nob3cgY30gc2hvdWxkIHNob3cKK3RoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlCitjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gQHNhbXB7c2hvdyB3fSBhbmQKK0BzYW1we3Nob3cgY307IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0tLXdoYXRldmVyCitzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhIGBgY29weXJpZ2h0IGRpc2NsYWltZXInJyBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKK0BzbWFsbGV4YW1wbGUKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KK2BHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCitAdmFye3NpZ25hdHVyZSBvZiBUeSBDb29ufSwgMSBBcHJpbCAxOTg5CitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorQGVuZCBzbWFsbGV4YW1wbGUKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgorCitAbm9kZSBDb250cmlidXRvcnMKK0B1bm51bWJlcmVkIENvbnRyaWJ1dG9ycyB0byBHTlUgQ0MKK0BjaW5kZXggY29udHJpYnV0b3JzCisKK0luIGFkZGl0aW9uIHRvIFJpY2hhcmQgU3RhbGxtYW4sIHNldmVyYWwgcGVvcGxlIGhhdmUgd3JpdHRlbiBwYXJ0cworb2YgR05VIENDLgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorVGhlIGlkZWEgb2YgdXNpbmcgUlRMIGFuZCBzb21lIG9mIHRoZSBvcHRpbWl6YXRpb24gaWRlYXMgY2FtZSBmcm9tIHRoZQorcHJvZ3JhbSBQTyB3cml0dGVuIGF0IHRoZSBVbml2ZXJzaXR5IG9mIEFyaXpvbmEgYnkgSmFjayBEYXZpZHNvbiBhbmQKK0NocmlzdG9waGVyIEZyYXNlci4gIFNlZSBgYFJlZ2lzdGVyIEFsbG9jYXRpb24gYW5kIEV4aGF1c3RpdmUgUGVlcGhvbGUKK09wdGltaXphdGlvbicnLCBTb2Z0d2FyZSBQcmFjdGljZSBhbmQgRXhwZXJpZW5jZSAxNCAoOSksIFNlcHQuIDE5ODQsCis4NTctODY2LgorCitAaXRlbQorUGF1bCBSdWJpbiB3cm90ZSBtb3N0IG9mIHRoZSBwcmVwcm9jZXNzb3IuCisKK0BpdGVtCitMZW9uYXJkIFRvd2VyIHdyb3RlIHBhcnRzIG9mIHRoZSBwYXJzZXIsIFJUTCBnZW5lcmF0b3IsIGFuZCBSVEwKK2RlZmluaXRpb25zLCBhbmQgb2YgdGhlIFZheCBtYWNoaW5lIGRlc2NyaXB0aW9uLgorCitAaXRlbQorVGVkIExlbW9uIHdyb3RlIHBhcnRzIG9mIHRoZSBSVEwgcmVhZGVyIGFuZCBwcmludGVyLgorCitAaXRlbQorSmltIFdpbHNvbiBpbXBsZW1lbnRlZCBsb29wIHN0cmVuZ3RoIHJlZHVjdGlvbiBhbmQgc29tZSBvdGhlcgorbG9vcCBvcHRpbWl6YXRpb25zLgorCitAaXRlbQorTm9idXl1a2kgSGlraWNoaSBvZiBTb2Z0d2FyZSBSZXNlYXJjaCBBc3NvY2lhdGVzLCBUb2t5bywgY29udHJpYnV0ZWQKK3RoZSBzdXBwb3J0IGZvciB0aGUgU29ueSBORVdTIG1hY2hpbmUuCisKK0BpdGVtCitDaGFybGVzIExhQnJlYyBjb250cmlidXRlZCB0aGUgc3VwcG9ydCBmb3IgdGhlIEludGVncmF0ZWQgU29sdXRpb25zCis2ODAyMCBzeXN0ZW0uCisKK0BpdGVtCitNaWNoYWVsIFRpZW1hbm4gb2YgQ3lnbnVzIFN1cHBvcnQgd3JvdGUgdGhlIGZyb250IGVuZCBmb3IgQysrLCBhcyB3ZWxsCithcyB0aGUgc3VwcG9ydCBmb3IgaW5saW5lIGZ1bmN0aW9ucyBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4gIEFsc28KK3RoZSBkZXNjcmlwdGlvbnMgb2YgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgMzIwMDAgc2VyaWVzIGNwdSwgdGhlCitTUEFSQyBjcHUgYW5kIHBhcnQgb2YgdGhlIE1vdG9yb2xhIDg4MDAwIGNwdS4KKworQGl0ZW0KK0dlcmFsZCBCYXVtZ2FydG5lciBhZGRlZCB0aGUgc2lnbmF0dXJlIGV4dGVuc2lvbiB0byB0aGUgQysrIGZyb250LWVuZC4KKworQGl0ZW0KK0phbiBTdGVpbiBvZiB0aGUgQ2hhbG1lcnMgQ29tcHV0ZXIgU29jaWV0eSBwcm92aWRlZCBzdXBwb3J0IGZvcgorR2VuaXgsIGFzIHdlbGwgYXMgcGFydCBvZiB0aGUgMzIwMDAgbWFjaGluZSBkZXNjcmlwdGlvbi4KKworQGl0ZW0KK1JhbmR5IFNtaXRoIGZpbmlzaGVkIHRoZSBTdW4gRlBBIHN1cHBvcnQuCisKK0BpdGVtCitSb2JlcnQgQnJvd24gaW1wbGVtZW50ZWQgdGhlIHN1cHBvcnQgZm9yIEVuY29yZSAzMjAwMCBzeXN0ZW1zLgorCitAaXRlbQorRGF2aWQgS2FzaHRhbiBvZiBTUkkgYWRhcHRlZCBHTlUgQ0MgdG8gVk1TLgorCitAaXRlbQorQWxleCBDcmFpbiBwcm92aWRlZCBjaGFuZ2VzIGZvciB0aGUgM2IxLgorCitAaXRlbQorR3JlZyBTYXR6IGFuZCBDaHJpcyBIYW5zb24gYXNzaXN0ZWQgaW4gbWFraW5nIEdOVSBDQyB3b3JrIG9uIEhQLVVYIGZvcgordGhlIDkwMDAgc2VyaWVzIDMwMC4KKworQGl0ZW0KK1dpbGxpYW0gU2NoZWx0ZXIgZGlkIG1vc3Qgb2YgdGhlIHdvcmsgb24gdGhlIEludGVsIDgwMzg2IHN1cHBvcnQuCisKK0BpdGVtCitDaHJpc3RvcGhlciBTbWl0aCBkaWQgdGhlIHBvcnQgZm9yIENvbnZleCBtYWNoaW5lcy4KKworQGl0ZW0KK1BhdWwgUGV0ZXJzZW4gd3JvdGUgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIHRoZSBBbGxpYW50IEZYLzguCisKK0BpdGVtCitEYXJpbyBEYXJpb2wgY29udHJpYnV0ZWQgdGhlIGZvdXIgdmFyaWV0aWVzIG9mIHNhbXBsZSBwcm9ncmFtcwordGhhdCBwcmludCBhIGNvcHkgb2YgdGhlaXIgc291cmNlLgorCitAaXRlbQorQWxhaW4gTGljaG5ld3NreSBwb3J0ZWQgR05VIENDIHRvIHRoZSBNaXBzIGNwdS4KKworQGl0ZW0KK0Rldm9uIEJvd2VuLCBEYWxlIFdpbGVzIGFuZCBLZXZpbiBaYWNobWFubiBwb3J0ZWQgR05VIENDIHRvIHRoZSBUYWhvZS4KKworQGl0ZW0KK0pvbmF0aGFuIFN0b25lIHdyb3RlIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGZvciB0aGUgUHlyYW1pZCBjb21wdXRlci4KKworQGl0ZW0KK0dhcnkgTWlsbGVyIHBvcnRlZCBHTlUgQ0MgdG8gQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgbWFjaGluZXMuCisKK0BpdGVtCitSaWNoYXJkIEtlbm5lciBvZiB0aGUgTmV3IFlvcmsgVW5pdmVyc2l0eSBVbHRyYWNvbXB1dGVyIFJlc2VhcmNoCitMYWJvcmF0b3J5IHdyb3RlIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9ucyBmb3IgdGhlIEFNRCAyOTAwMCwgdGhlIERFQworQWxwaGEsIHRoZSBJQk0gUlQgUEMsIGFuZCB0aGUgSUJNIFJTLzYwMDAgYXMgd2VsbCBhcyB0aGUgc3VwcG9ydCBmb3IKK2luc3RydWN0aW9uIGF0dHJpYnV0ZXMuICBIZSBhbHNvIG1hZGUgY2hhbmdlcyB0byBiZXR0ZXIgc3VwcG9ydCBSSVNDCitwcm9jZXNzb3JzIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLAorc3RyZW5ndGggcmVkdWN0aW9uLCBmdW5jdGlvbiBjYWxsaW5nIHNlcXVlbmNlIGhhbmRsaW5nLCBhbmQgY29uZGl0aW9uCitjb2RlIHN1cHBvcnQsIGluIGFkZGl0aW9uIHRvIGdlbmVyYWxpemluZyB0aGUgY29kZSBmb3IgZnJhbWUgcG9pbnRlcgorZWxpbWluYXRpb24uCisKK0BpdGVtCitSaWNoYXJkIEtlbm5lciBhbmQgTWljaGFlbCBUaWVtYW5uIGpvaW50bHkgZGV2ZWxvcGVkIHJlb3JnLmMsIHRoZSBkZWxheQorc2xvdCBzY2hlZHVsZXIuCisKK0BpdGVtCitNaWtlIE1laXNzbmVyIGFuZCBUb20gV29vZCBvZiBEYXRhIEdlbmVyYWwgZmluaXNoZWQgdGhlIHBvcnQgdG8gdGhlCitNb3Rvcm9sYSA4ODAwMC4KKworQGl0ZW0KK01hc2Fub2J1IFl1aGFyYSBvZiBGdWppdHN1IExhYm9yYXRvcmllcyBpbXBsZW1lbnRlZCB0aGUgbWFjaGluZQorZGVzY3JpcHRpb24gZm9yIHRoZSBUcm9uIGFyY2hpdGVjdHVyZSAoc3BlY2lmaWNhbGx5LCB0aGUgR21pY3JvKS4KKworQGl0ZW0KK05lWFQsIEluYy5AOiBkb25hdGVkIHRoZSBmcm9udCBlbmQgdGhhdCBzdXBwb3J0cyB0aGUgT2JqZWN0aXZlIEMKK2xhbmd1YWdlLgorQGMgV2UgbmVlZCB0byBiZSBjYXJlZnVsIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCAiT2JqZWN0aXZlIEMiCitAYyBpcyB0aGUgbmFtZSBvZiBhIGxhbmd1YWdlLCBub3QgdGhhdCBvZiBhIHByb2dyYW0gb3IgcHJvZHVjdC4KKworQGl0ZW0KK0phbWVzIHZhbiBBcnRzZGFsZW4gd3JvdGUgdGhlIGNvZGUgdGhhdCBtYWtlcyBlZmZpY2llbnQgdXNlIG9mCit0aGUgSW50ZWwgODAzODcgcmVnaXN0ZXIgc3RhY2suCisKK0BpdGVtCitNaWtlIE1laXNzbmVyIGF0IHRoZSBPcGVuIFNvZnR3YXJlIEZvdW5kYXRpb24gZmluaXNoZWQgdGhlIHBvcnQgdG8gdGhlCitNSVBTIGNwdSwgaW5jbHVkaW5nIGFkZGluZyBFQ09GRiBkZWJ1ZyBzdXBwb3J0LCBhbmQgd29ya2VkIG9uIHRoZQorSW50ZWwgcG9ydCBmb3IgdGhlIEludGVsIDgwMzg2IGNwdS4gIExhdGVyIGF0IEN5Z251cyBTdXBwb3J0LCBoZSB3b3JrZWQKK29uIHRoZSByczYwMDAgYW5kIFBvd2VyUEMgcG9ydHMuCisKK0BpdGVtCitSb24gR3VpbG1ldHRlIGltcGxlbWVudGVkIHRoZSBAY29kZXtwcm90b2l6ZX0gYW5kIEBjb2Rle3VucHJvdG9pemV9Cit0b29scywgdGhlIHN1cHBvcnQgZm9yIER3YXJmIHN5bWJvbGljIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgYW5kIG11Y2ggb2YKK3RoZSBzdXBwb3J0IGZvciBTeXN0ZW0gViBSZWxlYXNlIDQuICBIZSBoYXMgYWxzbyB3b3JrZWQgaGVhdmlseSBvbiB0aGUKK0ludGVsIDM4NiBhbmQgODYwIHN1cHBvcnQuCisKK0BpdGVtCitUb3Jiam9ybiBHcmFubHVuZCBpbXBsZW1lbnRlZCBtdWx0aXBseS0gYW5kIGRpdmlkZS1ieS1jb25zdGFudAorb3B0aW1pemF0aW9uLCBpbXByb3ZlZCBsb25nIGxvbmcgc3VwcG9ydCwgYW5kIGltcHJvdmVkIGxlYWYgZnVuY3Rpb24KK3JlZ2lzdGVyIGFsbG9jYXRpb24uCisKK0BpdGVtCitNaWtlIFN0dW1wIGltcGxlbWVudGVkIHRoZSBzdXBwb3J0IGZvciBFbHhzaSA2NCBiaXQgQ1BVLgorCitAaXRlbQorSm9obiBXZWhsZSBhZGRlZCB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFdlc3Rlcm4gRWxlY3RyaWMgMzIwMDAKK3Byb2Nlc3NvciB1c2VkIGluIHNldmVyYWwgM2Igc2VyaWVzIG1hY2hpbmVzIChubyByZWxhdGlvbiB0byB0aGUKK05hdGlvbmFsIFNlbWljb25kdWN0b3IgMzIwMDAgcHJvY2Vzc29yKS4KKworQGlnbm9yZSBAYyBUaGVzZSBmZWF0dXJlcyBhcmVuJ3QgYWR2ZXJ0aXNlZCB5ZXQsIHNpbmNlIHRoZXkgZG9uJ3QgZnVsbHkgd29yay4KK0BpdGVtCitBbmFsb2cgRGV2aWNlcyBoZWxwZWQgaW1wbGVtZW50IHRoZSBzdXBwb3J0IGZvciBjb21wbGV4IGRhdGEgdHlwZXMKK2FuZCBpdGVyYXRvcnMuCitAZW5kIGlnbm9yZQorCitAaXRlbQorSG9sZ2VyIFRldXRzY2ggcHJvdmlkZWQgdGhlIHN1cHBvcnQgZm9yIHRoZSBDbGlwcGVyIGNwdS4KKworQGl0ZW0KK0tyZXN0ZW4gS3JhYiBUaG9ydXAgd3JvdGUgdGhlIHJ1biB0aW1lIHN1cHBvcnQgZm9yIHRoZSBPYmplY3RpdmUgQworbGFuZ3VhZ2UuCisKK0BpdGVtCitTdGVwaGVuIE1vc2hpZXIgY29udHJpYnV0ZWQgdGhlIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yIHRoYXQgYXNzaXN0cyBpbgorY3Jvc3MtY29tcGlsYXRpb24gYW5kIHBlcm1pdHMgc3VwcG9ydCBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB3aWRlcgordGhhbiA2NCBiaXRzLgorCitAaXRlbQorRGF2aWQgRWRlbHNvaG4gY29udHJpYnV0ZWQgdGhlIGNoYW5nZXMgdG8gUlMvNjAwMCBwb3J0IHRvIG1ha2UgaXQKK3N1cHBvcnQgdGhlIFBvd2VyUEMgYW5kIFBPV0VSMiBhcmNoaXRlY3R1cmVzLgorCitAaXRlbQorU3RldmUgQ2hhbWJlcmxhaW4gd3JvdGUgdGhlIHN1cHBvcnQgZm9yIHRoZSBIaXRhY2hpIFNIIHByb2Nlc3Nvci4KKworQGl0ZW0KK1BldGVyIFNjaGF1ZXIgd3JvdGUgdGhlIGNvZGUgdG8gYWxsb3cgZGVidWdnaW5nIHRvIHdvcmsgb24gdGhlIEFscGhhLgorCitAaXRlbQorT2xpdmVyIE0uIEtlbGxvZ2cgb2YgRGV1dHNjaGUgQWVyb3NwYWNlIGNvbnRyaWJ1dGVkIHRoZSBwb3J0IHRvIHRoZQorTUlMLVNURC0xNzUwQS4KKworQGl0ZW0KK01pY2hhZWwgSy4gR3NjaHdpbmQgY29udHJpYnV0ZWQgdGhlIHBvcnQgdG8gdGhlIFBEUC0xMS4KKworQGl0ZW0KK0RhdmlkIFJlZXNlIG9mIFN1biBNaWNyb3N5c3RlbXMgY29udHJpYnV0ZWQgdG8gdGhlIFNvbGFyaXMgb24gUG93ZXJQQworcG9ydC4KK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBJbmRleAorQHVubnVtYmVyZWQgSW5kZXgKK0BlbmQgaWZzZXQKKworQGlmY2xlYXIgSU5URVJOQUxTCitAbm9kZSBJbmRleAorQHVubnVtYmVyZWQgSW5kZXgKK0BlbmQgaWZjbGVhcgorCitAcHJpbnRpbmRleCBjcAorCitAc3VtbWFyeWNvbnRlbnRzCitAY29udGVudHMKK0BieWUKZGlmZiAtLWdpdCBhL2djYy9nZXRvcHQuYyBiL2djYy9nZXRvcHQuYwppbmRleCBmNjIyZmMzLi4zMDBmODZkIDEwMDY0NAotLS0gYS9nY2MvZ2V0b3B0LmMKKysrIGIvZ2NjL2dldG9wdC5jCkBAIC02LDIzICs2LDIzIEBACiAgICBDb3B5cmlnaHQgKEMpIDE5ODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3CiAgICAJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCi0gICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4KK0J1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BwcmVwLmFpLm1pdC5lZHUuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAgIGxhdGVyIHZlcnNpb24uCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSAgIFVTQS4gICovCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorVVNBLiAgKi8KIAwKIC8qIFRoaXMgdGVsbHMgQWxwaGEgT1NGLzEgbm90IHRvIGRlZmluZSBhIGdldG9wdCBwcm90b3R5cGUgaW4gPHN0ZGlvLmg+LgogICAgRGl0dG8gZm9yIEFJWCAzLjIgYW5kIDxzdGRsaWIuaD4uICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2dldG9wdC5oIGIvZ2NjL2dldG9wdC5oCmluZGV4IGZiMzA3MTlhLi42OTI1NmZkIDEwMDY0NAotLS0gYS9nY2MvZ2V0b3B0LmgKKysrIGIvZ2NjL2dldG9wdC5oCkBAIC0xLDIzICsxLDIzIEBACiAvKiBEZWNsYXJhdGlvbnMgZm9yIGdldG9wdC4KICAgIENvcHlyaWdodCAoQykgMTk4OSw5MCw5MSw5Miw5Myw5NCw5Niw5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4KLSAgIEJ1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BnbnUub3JnLgorTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4KK0J1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BwcmVwLmFpLm1pdC5lZHUuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAgIGxhdGVyIHZlcnNpb24uCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSAgIFVTQS4gICovCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorVVNBLiAgKi8KIAogI2lmbmRlZiBfR0VUT1BUX0gKICNkZWZpbmUgX0dFVE9QVF9IIDEKQEAgLTEzMCw0ICsxMzAsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBnZXRvcHQuaCAqLworI2VuZGlmIC8qIF9HRVRPUFRfSCAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2dldG9wdDEuYyBiL2djYy9nZXRvcHQxLmMKaW5kZXggYWY4ZTY4MS4uNjUwN2JhMSAxMDA2NDQKLS0tIGEvZ2NjL2dldG9wdDEuYworKysgYi9nY2MvZ2V0b3B0MS5jCkBAIC0xLDIzICsxLDIzIEBACiAvKiBnZXRvcHRfbG9uZyBhbmQgZ2V0b3B0X2xvbmdfb25seSBlbnRyeSBwb2ludHMgZm9yIEdOVSBnZXRvcHQuCiAgICBDb3B5cmlnaHQgKEMpIDE5ODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTYsOTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCi0gICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4KK0J1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BwcmVwLmFpLm1pdC5lZHUuCiAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAgIGxhdGVyIHZlcnNpb24uCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSAgIFVTQS4gICovCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorVVNBLiAgKi8KIAwKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSA8Y29uZmlnLmg+CmRpZmYgLS1naXQgYS9nY2MvZ3N0YWIuaCBiL2djYy9nc3RhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYmQ1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvZ3N0YWIuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fR05VX1NUQUJfXworCisvKiBJbmRpY2F0ZSB0aGUgR05VIHN0YWIuaCBpcyBpbiB1c2UuICAqLworCisjZGVmaW5lIF9fR05VX1NUQUJfXworCisjZGVmaW5lIF9fZGVmaW5lX3N0YWIoTkFNRSwgQ09ERSwgU1RSSU5HKSBOQU1FPUNPREUsCisKK2VudW0gX19zdGFiX2RlYnVnX2NvZGUKK3sKKyNpbmNsdWRlICJzdGFiLmRlZiIKK0xBU1RfVU5VU0VEX1NUQUJfQ09ERQorfTsKKworI3VuZGVmIF9fZGVmaW5lX3N0YWIKKworI2VuZGlmIC8qIF9fR05VX1NUQUJfICovCmRpZmYgLS1naXQgYS9nY2MvaW5zdGFsbC50ZXhpIGIvZ2NjL2luc3RhbGwudGV4aQppbmRleCBjNmJhNmY1Li45ZjAyMzg1IDEwMDY0NAotLS0gYS9nY2MvaW5zdGFsbC50ZXhpCisrKyBiL2djYy9pbnN0YWxsLnRleGkKQEAgLTE3OSwxMyArMTc5LDEzIEBACiBAY2luZGV4IE9iamVjdGl2ZSBDIHRocmVhZHMKIEBjaW5kZXggdGhyZWFkcywgT2JqZWN0aXZlIEMKIEBpdGVtIC0tZW5hYmxlLW9iamN0aHJlYWRzPUB2YXJ7dHlwZX0KLUNlcnRhaW4gc3lzdGVtcywgbm90YWJseSBMaW51eCwgY2FuJ3QgYmUgcmVsaWVkIG9uIHRvIHN1cHBseSBhIHRocmVhZHMKLWZhY2lsaXR5IGZvciB0aGUgT2JqZWN0aXZlIEMgcnVudGltZSBhbmQgc28gd2lsbCBkZWZhdWx0IHRvCi1zaW5nbGUtdGhyZWFkZWQgcnVudGltZS4gIFRoZXkgbWF5LCBob3dldmVyLCBoYXZlIGEgbGlicmFyeSB0aHJlYWRzCi1pbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2UgdGhyZWFkcyBjYW4gYmUgZW5hYmxlZCB3aXRoIHRoaXMKLW9wdGlvbiBieSBzdXBwbHlpbmcgYSBzdWl0YWJsZSBAdmFye3R5cGV9LCBwcm9iYWJseSBAc2FtcHtwb3NpeH0uCi1UaGUgcG9zc2liaWxpdGllcyBmb3IgQHZhcnt0eXBlfSBhcmUgQHNhbXB7c2luZ2xlfSwgQHNhbXB7cG9zaXh9LAotQHNhbXB7d2luMzJ9LCBAc2FtcHtzb2xhcmlzfSwgQHNhbXB7aXJpeH0gYW5kIEBzYW1we21hY2h9LgorQ2VydGFpbiBzeXN0ZW1zLCBub3RhYmx5IExpbnV4LWJhc2VkIEdOVSBzeXN0ZW1zLCBjYW4ndCBiZSByZWxpZWQgb24gdG8KK3N1cHBseSBhIHRocmVhZHMgZmFjaWxpdHkgZm9yIHRoZSBPYmplY3RpdmUgQyBydW50aW1lIGFuZCBzbyB3aWxsCitkZWZhdWx0IHRvIHNpbmdsZS10aHJlYWRlZCBydW50aW1lLiAgVGhleSBtYXksIGhvd2V2ZXIsIGhhdmUgYSBsaWJyYXJ5Cit0aHJlYWRzIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSB0aHJlYWRzIGNhbiBiZSBlbmFibGVkCit3aXRoIHRoaXMgb3B0aW9uIGJ5IHN1cHBseWluZyBhIHN1aXRhYmxlIEB2YXJ7dHlwZX0sIHByb2JhYmx5CitAc2FtcHtwb3NpeH0uICBUaGUgcG9zc2liaWxpdGllcyBmb3IgQHZhcnt0eXBlfSBhcmUgQHNhbXB7c2luZ2xlfSwKK0BzYW1we3Bvc2l4fSwgQHNhbXB7d2luMzJ9LCBAc2FtcHtzb2xhcmlzfSwgQHNhbXB7aXJpeH0gYW5kIEBzYW1we21hY2h9LgogQGVuZCB0YWJsZQogCiBUaGUgQGZpbGV7Y29uZmlndXJlfSBzY3JpcHQgc2VhcmNoZXMgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHNvdXJjZQpAQCAtNjEwLDcgKzYxMCw3IEBACiAKIEBxdW90YXRpb24KIDM4NmJzZCwgYWl4LCBhY2lzLCBhbWlnYWRvcywgYW9zLCBhb3V0LCBhdXgsIGJvc3gsIGJzZCwgY2xpeCwgY29mZiwgY3RpeCwgY3h1eCwKLWRndXgsIGR5bml4LCBlYm1vbiwgZWNvZmYsIGVsZiwgZXNpeCwgZnJlZWJzZCwgaG1zLCBnZW5peCwgZ251LCBnbnUvbGludXgsCitkZ3V4LCBkeW5peCwgZWJtb24sIGVjb2ZmLCBlbGYsIGVzaXgsIGZyZWVic2QsIGhtcywgZ2VuaXgsIGdudSwgbGludXgtZ251LAogaGl1eCwgaHB1eCwgaXJpcywgaXJpeCwgaXNjLCBsdW5hLCBseW54b3MsIG1hY2gsIG1pbml4LCBtc2RvcywgbXZzLAogbmV0YnNkLCBuZXdzb3MsIG5pbmR5LCBucywgb3NmLCBvc2Zyb3NlLCBwdHgsIHJpc2NpeCwgcmlzY29zLCBydHUsIHNjbywgc2ltLAogc29sYXJpcywgc3Vub3MsIHN5bSwgc3lzdiwgdWRpLCB1bHRyaXgsIHVuaWNvcywgdW5pcGx1cywgdW5vcywgdm1zLCB2c3RhLApAQCAtNzU5LDE1ICs3NTksMjIgQEAKIERCWC4gIERFQyBpcyBub3cgYXdhcmUgb2YgdGhpcyBwcm9ibGVtIHdpdGggdGhlIGFzc2VtYmxlciBhbmQgaG9wZXMgdG8KIHByb3ZpZGUgYSBmaXggc2hvcnRseS4KIAotQGl0ZW0gYXJtCitAaXRlbSBhcm0tKi1hb3V0CiBBZHZhbmNlZCBSSVNDIE1hY2hpbmVzIEFSTS1mYW1pbHkgcHJvY2Vzc29ycy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIGluCiBlbWJlZGRlZCBhcHBsaWNhdGlvbnMuICBUaGVyZSBhcmUgbm8gc3RhbmRhcmQgVW5peCBjb25maWd1cmF0aW9ucy4KIFRoaXMgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgYmFzaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIGFuZCB3aWxsCi1wcm9kdWNlIGEub3V0IGZvcm1hdCBvYmplY3QgbW9kdWxlcy4KK3Byb2R1Y2UgQGZpbGV7YS5vdXR9IGZvcm1hdCBvYmplY3QgbW9kdWxlcy4KIAogWW91IG1heSBuZWVkIHRvIG1ha2UgYSB2YXJpYW50IG9mIHRoZSBmaWxlIEBmaWxle2FybS5ofSBmb3IgeW91ciBwYXJ0aWN1bGFyCiBjb25maWd1cmF0aW9uLgogCitAaXRlbSBhcm0tKi1saW51eGFvdXQKK0FueSBvZiB0aGUgQVJNIGZhbWlseSBwcm9jZXNzb3JzIHJ1bm5pbmcgdGhlIExpbnV4LWJhc2VkIEdOVSBzeXN0ZW0gd2l0aAordGhlIEBmaWxle2Eub3V0fSBiaW5hcnkgZm9ybWF0IChFTEYgaXMgbm90IHlldCBzdXBwb3J0ZWQpLiAgWW91IG11c3QgdXNlCit2ZXJzaW9uIDIuOC4xLjAuNyBvciBsYXRlciBvZiB0aGUgTGludXggYmludXRpbHMsIHdoaWNoIHlvdSBjYW4gZG93bmxvYWQKK2Zyb20gQGZpbGV7c3Vuc2l0ZS51bmMuZWR1Oi9wdWIvTGludXgvR0NDfSBhbmQgb3RoZXIgbWlycm9yIHNpdGVzIGZvcgorTGludXgtYmFzZWQgR05VIHN5c3RlbXMuCisKIEBpdGVtIGFybS0qLXJpc2NpeAogVGhlIEFSTTIgb3IgQVJNMyBwcm9jZXNzb3IgcnVubmluZyBSSVNDIGlYLCBBY29ybidzIHBvcnQgb2YgQlNEIFVuaXguICBJZgogeW91IGFyZSBydW5uaW5nIGEgdmVyc2lvbiBvZiBSSVNDIGlYIHByaW9yIHRvIDEuMiB0aGVuIHlvdSBtdXN0IHNwZWNpZnkKQEAgLTg4MCwxOSArODg3LDE5IEBACiBUaGlzIHBvcnQgaXMgdmVyeSBwcmVsaW1pbmFyeSBhbmQgaGFzIG1hbnkga25vd24gYnVncy4gIFdlIGhvcGUgdG8KIGhhdmUgYSBoaWdoZXItcXVhbGl0eSBwb3J0IGZvciB0aGlzIG1hY2hpbmUgc29vbi4KIAotQGl0ZW0gaTM4Ni0qLWxpbnV4b2xkbGQKLVVzZSB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgYS5vdXQgYmluYXJpZXMgb24gTGludXggaWYgeW91IGRvIG5vdAotaGF2ZSBnYXMvYmludXRpbHMgdmVyc2lvbiAyLjUuMiBvciBsYXRlciBpbnN0YWxsZWQuIFRoaXMgaXMgYW4gb2Jzb2xldGUKLWNvbmZpZ3VyYXRpb24uCitAaXRlbSBpMzg2LSotbGludXgtZ251b2xkbGQKK1VzZSB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgQGZpbGV7YS5vdXR9IGJpbmFyaWVzIG9uIExpbnV4LWJhc2VkCitHTlUgc3lzdGVtcyBpZiB5b3UgZG8gbm90IGhhdmUgZ2FzL2JpbnV0aWxzIHZlcnNpb24gMi41LjIgb3IgbGF0ZXIKK2luc3RhbGxlZC4gVGhpcyBpcyBhbiBvYnNvbGV0ZSBjb25maWd1cmF0aW9uLgogCi1AaXRlbSBpMzg2LSotbGludXhhb3V0Ci1Vc2UgdGhpcyBjb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIGEub3V0IGJpbmFyaWVzIG9uIExpbnV4LiBUaGlzIGNvbmZpZ3VyYXRpb24KLWlzIGJlaW5nIHN1cGVyc2VkZWQuIFlvdSBtdXN0IHVzZSBnYXMvYmludXRpbHMgdmVyc2lvbiAyLjUuMiBvcgotbGF0ZXIuCitAaXRlbSBpMzg2LSotbGludXgtZ251YW91dAorVXNlIHRoaXMgY29uZmlndXJhdGlvbiB0byBnZW5lcmF0ZSBAZmlsZXthLm91dH0gYmluYXJpZXMgb24gTGludXgtYmFzZWQKK0dOVSBzeXN0ZW1zLiBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgc3VwZXJzZWRlZC4gWW91IG11c3QgdXNlCitnYXMvYmludXRpbHMgdmVyc2lvbiAyLjUuMiBvciBsYXRlci4KIAotQGl0ZW0gaTM4Ni0qLWxpbnV4Ci1Vc2UgdGhpcyBjb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIEVMRiBiaW5hcmllcyBvbiBMaW51eC4gIFlvdSBtdXN0Ci11c2UgZ2FzL2JpbnV0aWxzIHZlcnNpb24gMi41LjIgb3IgbGF0ZXIuCitAaXRlbSBpMzg2LSotbGludXgtZ251CitVc2UgdGhpcyBjb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIEVMRiBiaW5hcmllcyBvbiBMaW51eC1iYXNlZCBHTlUKK3N5c3RlbXMuICBZb3UgbXVzdCB1c2UgZ2FzL2JpbnV0aWxzIHZlcnNpb24gMi41LjIgb3IgbGF0ZXIuCiAKIEBpdGVtIGkzODYtKi1zY28KIENvbXBpbGF0aW9uIHdpdGggUkNDIGlzIHJlY29tbWVuZGVkLiAgQWxzbywgaXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvCkBAIC0xMDE3LDcgKzEwMjQsNyBAQAogWW91IGNhbiB0ZWxsIEdOVSBDQyB0byB1c2UgdGhlIEdOVSBhc3NlbWJsZXIgYW5kIGxpbmtlciwgYnkgc3BlY2lmeWluZwogQHNhbXB7LS13aXRoLWdudS1hcyAtLXdpdGgtZ251LWxkfSB3aGVuIGNvbmZpZ3VyaW5nLiAgVGhlc2Ugd2lsbCBwcm9kdWNlCiBDT0ZGIGZvcm1hdCBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzOyAgb3RoZXJ3aXNlIEdOVSBDQyB3aWxsIHVzZSB0aGUKLWluc3RhbGxlZCB0b29scywgd2hpY2ggcHJvZHVjZSBhLm91dCBmb3JtYXQgZXhlY3V0YWJsZXMuCitpbnN0YWxsZWQgdG9vbHMsIHdoaWNoIHByb2R1Y2UgQGZpbGV7YS5vdXR9IGZvcm1hdCBleGVjdXRhYmxlcy4KIAogQGl0ZW0gbTMyci0qLWVsZgogRW1iZWRkZWQgTTMyUiBzeXN0ZW0uCkBAIC0xMzc4LDggKzEzODUsOCBAQAogWW91IGNhbiBzcGVjaWZ5IGEgZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgQHNhbXB7LW1jcHU9fUB2YXJ7Y3B1X3R5cGV9CiBzd2l0Y2ggYnkgdXNpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb24gQHNhbXB7LS13aXRoLWNwdS19QHZhcntjcHVfdHlwZX0uCiAKLUBpdGVtIHBvd2VycGMtKi1saW51eAotUG93ZXJQQyBzeXN0ZW0gaW4gYmlnIGVuZGlhbiBtb2RlLCBydW5uaW5nIExpbnV4LgorQGl0ZW0gcG93ZXJwYy0qLWxpbnV4LWdudQorUG93ZXJQQyBzeXN0ZW0gaW4gYmlnIGVuZGlhbiBtb2RlLCBydW5uaW5nIHRoZSBMaW51eC1iYXNlZCBHTlUgc3lzdGVtLgogCiBZb3UgY2FuIHNwZWNpZnkgYSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBAc2FtcHstbWNwdT19QHZhcntjcHVfdHlwZX0KIHN3aXRjaCBieSB1c2luZyB0aGUgY29uZmlndXJlIG9wdGlvbiBAc2FtcHstLXdpdGgtY3B1LX1AdmFye2NwdV90eXBlfS4KZGlmZiAtLWdpdCBhL2djYy9pbnN0YWxsMS50ZXhpIGIvZ2NjL2luc3RhbGwxLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlZjliNgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9pbnN0YWxsMS50ZXhpCkBAIC0wLDAgKzEsMTUgQEAKK0BzZXRmaWxlbmFtZSBJTlNUQUxMCitAc2V0IElOU1RBTExPTkxZCisKK0BjIFRoaXMgZmlsZSBpdHNlbGYsIGluc3RhbGwxLnRleGksIGRvZXMgbm90IGFwZWFyIGluIHRoZSBHQ0MgZGlzdHJpYnV0aW9uLgorQGMgVGhlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBsaW5lcyBhcHBseSB0byB0aGUgSU5TVEFMTCBmaWxlCitAYyB3aGljaCBpcyBnZW5lcmF0ZWQgdXNpbmcgdGhpcyBmaWxlLgorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBHTlUgY29tcGlsZXIuCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODksIDE5OTIsIDE5OTQsIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitZb3UgbWF5IGNvcHksIGRpc3RyaWJ1dGUsIGFuZCBtb2RpZnkgaXQgZnJlZWx5IGFzIGxvbmcgYXMgeW91IHByZXNlcnZlCit0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIHBlcm1pc3Npb24gbm90aWNlLgorCitAbm9kZSBJbnN0YWxsYXRpb24sLCwgKGRpcikKK0BjaGFwdGVyIEluc3RhbGxpbmcgR05VIENDCitAaW5jbHVkZSBpbnN0YWxsLnRleGkKK0BieWUKZGlmZiAtLWdpdCBhL2djYy9pbnZva2UudGV4aSBiL2djYy9pbnZva2UudGV4aQppbmRleCBjOTc1YzM1Li43YTY0M2Q2IDEwMDY0NAotLS0gYS9nY2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2ludm9rZS50ZXhpCkBAIC0xLDQgKzEsNCBAQAotQGMgQ29weXJpZ2h0IChDKSAxOTg4LCA4OSwgOTIsIDkzLCA5NCwgMTk5NSwgMTk5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BjIENvcHlyaWdodCAoQykgMTk4OCw4OSw5Miw5Myw5NCw5NSw5NiwxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogQGMgVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLgogQGMgRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLgogCkBAIC05Myw4ICs5Myw4IEBACiBAaXRlbSBDIExhbmd1YWdlIE9wdGlvbnMKIEB4cmVme0MgRGlhbGVjdCBPcHRpb25zLCxPcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdH0uCiBAc21hbGxleGFtcGxlCi0tYW5zaSAgLWZhbGxvdy1zaW5nbGUtcHJlY2lzaW9uIC1mY29uZC1taXNtYXRjaCAgLWZuby1hc20KLS1mbm8tYnVpbHRpbiAgLWZzaWduZWQtYml0ZmllbGRzICAtZnNpZ25lZC1jaGFyCistYW5zaSAgLWZhbGxvdy1zaW5nbGUtcHJlY2lzaW9uICAtZmNvbmQtbWlzbWF0Y2ggIC1mbm8tYXNtCistZm5vLWJ1aWx0aW4gIC1mZnJlZXN0YW5kaW5nIC0gZmhvc3RlZCAgLWZzaWduZWQtYml0ZmllbGRzICAtZnNpZ25lZC1jaGFyCiAtZnVuc2lnbmVkLWJpdGZpZWxkcyAgLWZ1bnNpZ25lZC1jaGFyICAtZndyaXRhYmxlLXN0cmluZ3MKIC10cmFkaXRpb25hbCAgLXRyYWRpdGlvbmFsLWNwcCAgLXRyaWdyYXBocwogQGVuZCBzbWFsbGV4YW1wbGUKQEAgLTEwNSw4ICsxMDUsOCBAQAogLWZhbGwtdmlydHVhbCAgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzICAtZmVsaWRlLWNvbnN0cnVjdG9ycwogLWZlbnVtLWludC1lcXVpdiAtZmV4dGVybmFsLXRlbXBsYXRlcyAgLWZmb3Itc2NvcGUgLWZuby1mb3Itc2NvcGUKIC1maGFuZGxlLXNpZ25hdHVyZXMgLWZtZW1vaXplLWxvb2t1cHMgIC1mbm8tZGVmYXVsdC1pbmxpbmUgLWZuby1nbnUta2V5d29yZHMKLS1mbm9ubnVsbC1vYmplY3RzICAtZm9wZXJhdG9yLW5hbWVzICAtZnN0cmljdC1wcm90b3R5cGUKLS1mdGhpcy1pcy12YXJpYWJsZSAtbm9zdGRpbmMrKyAtdHJhZGl0aW9uYWwgICtlQHZhcntufQorLWZub25udWxsLW9iamVjdHMgIC1mb3BlcmF0b3ItbmFtZXMgIC1mc3RyaWN0LXByb3RvdHlwZSAtZnRoaXMtaXMtdmFyaWFibGUKKy1mdGVtcGxhdGUtZGVwdGgtQHZhcntufSAtbm9zdGRpbmMrKyAtdHJhZGl0aW9uYWwgICtlQHZhcntufQogQGVuZCBzbWFsbGV4YW1wbGUKIAogQGl0ZW0gV2FybmluZyBPcHRpb25zCkBAIC0xMTcsMjAgKzExNywyMSBAQAogLVdjYXN0LWFsaWduIC1XY2FzdC1xdWFsICAtV2NoYXItc3Vic2NyaXB0ICAtV2NvbW1lbnQKIC1XY29udmVyc2lvbiAgLVdlcnJvciAgLVdmb3JtYXQKIC1XaWQtY2xhc2gtQHZhcntsZW59ICAtV2ltcGxpY2l0ICAtV2ltcG9ydCAgLVdpbmxpbmUKLS1XbGFyZ2VyLXRoYW4tQHZhcntsZW59ICAtV21pc3NpbmctZGVjbGFyYXRpb25zCistV2xhcmdlci10aGFuLUB2YXJ7bGVufSAgLVdtYWluICAtV21pc3NpbmctZGVjbGFyYXRpb25zCiAtV21pc3NpbmctcHJvdG90eXBlcyAgLVduZXN0ZWQtZXh0ZXJucwogLVduby1pbXBvcnQgIC1Xb3ZlcmxvYWRlZC12aXJ0dWFsIC1XcGFyZW50aGVzZXMKIC1XcG9pbnRlci1hcml0aCAgLVdyZWR1bmRhbnQtZGVjbHMgLVdyZW9yZGVyIC1XcmV0dXJuLXR5cGUgLVdzaGFkb3cKIC1Xc2lnbi1jb21wYXJlIC1Xc3RyaWN0LXByb3RvdHlwZXMgIC1Xc3dpdGNoICAtV3N5bnRoCiAtV3RlbXBsYXRlLWRlYnVnZ2luZyAgLVd0cmFkaXRpb25hbCAgLVd0cmlncmFwaHMKLS1XdW5pbml0aWFsaXplZCAgLVd1bnVzZWQgIC1Xd3JpdGUtc3RyaW5ncworLVd1bmRlZiAtV3VuaW5pdGlhbGl6ZWQgIC1XdW51c2VkICAtV3dyaXRlLXN0cmluZ3MKIEBlbmQgc21hbGxleGFtcGxlCiAKIEBpdGVtIERlYnVnZ2luZyBPcHRpb25zCiBAeHJlZntEZWJ1Z2dpbmcgT3B0aW9ucywsT3B0aW9ucyBmb3IgRGVidWdnaW5nIFlvdXIgUHJvZ3JhbSBvciBHQ0N9LgogQHNtYWxsZXhhbXBsZQogLWEgIC1heCAgLWRAdmFye2xldHRlcnN9ICAtZnByZXRlbmQtZmxvYXQKLS1nICAtZ0B2YXJ7bGV2ZWx9IC1nY29mZiAgLWdkd2FyZiAgLWdkd2FyZisKKy1mcHJvZmlsZS1hcmNzICAtZnRlc3QtY292ZXJhZ2UKKy1nICAtZ0B2YXJ7bGV2ZWx9IC1nY29mZiAgLWdkd2FyZiAgLWdkd2FyZi0xICAtZ2R3YXJmLTErICAtZ2R3YXJmLTIKIC1nZ2RiICAtZ3N0YWJzICAtZ3N0YWJzKyAgLWd4Y29mZiAgLWd4Y29mZisKIC1wICAtcGcgIC1wcmludC1maWxlLW5hbWU9QHZhcntsaWJyYXJ5fSAgLXByaW50LWxpYmdjYy1maWxlLW5hbWUKIC1wcmludC1wcm9nLW5hbWU9QHZhcntwcm9ncmFtfSAgLXByaW50LXNlYXJjaC1kaXJzICAtc2F2ZS10ZW1wcwpAQCAtMTM5LDYgKzE0MCw3IEBACiBAaXRlbSBPcHRpbWl6YXRpb24gT3B0aW9ucwogQHhyZWZ7T3B0aW1pemUgT3B0aW9ucywsT3B0aW9ucyB0aGF0IENvbnRyb2wgT3B0aW1pemF0aW9ufS4KIEBzbWFsbGV4YW1wbGUKKy1mYnJhbmNoLXByb2JhYmlsaXRpZXMKIC1mY2FsbGVyLXNhdmVzICAtZmNzZS1mb2xsb3ctanVtcHMgIC1mY3NlLXNraXAtYmxvY2tzCiAtZmRlbGF5ZWQtYnJhbmNoICAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucwogLWZmYXN0LW1hdGggIC1mZmxvYXQtc3RvcmUgIC1mZm9yY2UtYWRkciAgLWZmb3JjZS1tZW0KQEAgLTE4NCw3ICsxODYsNyBAQAogQGl0ZW0gRGlyZWN0b3J5IE9wdGlvbnMKIEB4cmVme0RpcmVjdG9yeSBPcHRpb25zLCxPcHRpb25zIGZvciBEaXJlY3RvcnkgU2VhcmNofS4KIEBzbWFsbGV4YW1wbGUKLS1CQHZhcntwcmVmaXh9ICAtSUB2YXJ7ZGlyfSAgLUktICAtTEB2YXJ7ZGlyfQorLUJAdmFye3ByZWZpeH0gIC1JQHZhcntkaXJ9ICAtSS0gIC1MQHZhcntkaXJ9IC1zcGVjcz1AdmFye2ZpbGV9CiBAZW5kIHNtYWxsZXhhbXBsZQogCiBAaXRlbSBUYXJnZXQgT3B0aW9ucwpAQCAtMTk4LDkgKzIwMCw5IEBACiBAeHJlZntTdWJtb2RlbCBPcHRpb25zLCxIYXJkd2FyZSBNb2RlbHMgYW5kIENvbmZpZ3VyYXRpb25zfS4KIEBzbWFsbGV4YW1wbGUKIEBlbXBoe002ODB4MCBPcHRpb25zfQotLW02ODAwMCAgLW02ODAyMCAgLW02ODAyMC00MCAgLW02ODAzMCAgLW02ODA0MCAgLW02ODA2MAotLW01MjAwICAtbTY4ODgxIC1tYml0ZmllbGQgIC1tYzY4MDAwICAtbWM2ODAyMCAgLW1mcGEKLS1tbm9iaXRmaWVsZCAgLW1ydGQgIC1tc2hvcnQgIC1tc29mdC1mbG9hdAorLW02ODAwMCAgLW02ODAyMCAgLW02ODAyMC00MCAgLW02ODAyMC02MCAtbTY4MDMwICAtbTY4MDQwCistbTY4MDYwICAtbTUyMDAgIC1tNjg4ODEgLW1iaXRmaWVsZCAgLW1jNjgwMDAgIC1tYzY4MDIwICAtbWZwYQorLW1ub2JpdGZpZWxkICAtbXJ0ZCAgLW1zaG9ydCAgLW1zb2Z0LWZsb2F0ICAtbWFsaWduLWludAogCiBAZW1waHtWQVggT3B0aW9uc30KIC1tZyAgLW1nbnUgIC1tdW5peApAQCAtMjM5LDYgKzI0MSwxMCBAQAogLW1zb2Z0LWZsb2F0IC1taGFyZC1mbG9hdAogLW1ic2QgLW14b3BlbiAtbW5vLXN5bXJlbmFtZQogCitAZW1waHtNMzJSL0QgT3B0aW9uc30KKy1tY29kZS1tb2RlbD1AdmFye21vZGVsIHR5cGV9ICAtbXNkYXRhPUB2YXJ7c2RhdGEgdHlwZX0KKy1HIEB2YXJ7bnVtfQorCiBAZW1waHtNODhLIE9wdGlvbnN9CiAtbTg4MDAwICAtbTg4MTAwICAtbTg4MTEwICAtbWJpZy1waWMKIC1tY2hlY2stemVyby1kaXZpc2lvbiAgLW1oYW5kbGUtbGFyZ2Utc2hpZnQKQEAgLTI2MCw5ICsyNjYsMTAgQEAKIC1tcG93ZXJwYy1nZnhvcHQgIC1tbm8tcG93ZXJwYy1nZnhvcHQKIC1tbmV3LW1uZW1vbmljcyAgLW1uby1uZXctbW5lbW9uaWNzCiAtbWZ1bGwtdG9jICAgLW1taW5pbWFsLXRvYyAgLW1uby1mb3AtaW4tdG9jICAtbW5vLXN1bS1pbi10b2MKLS1teGwtY2FsbCAgLW1uby14bC1jYWxsCistbXhsLWNhbGwgIC1tbm8teGwtY2FsbCAgLW10aHJlYWRzICAtbXBlCiAtbXNvZnQtZmxvYXQgIC1taGFyZC1mbG9hdCAgLW1tdWx0aXBsZSAgLW1uby1tdWx0aXBsZQotLW1zdHJpbmcgIC1tbm8tc3RyaW5nICAtbWJpdC1hbGlnbiAgLW1uby1iaXQtYWxpZ24KKy1tc3RyaW5nICAtbW5vLXN0cmluZyAgLW11cGRhdGUgIC1tbm8tdXBkYXRlCistbWZ1c2VkLW1hZGQgIC1tbm8tZnVzZWQtbWFkZCAgLW1iaXQtYWxpZ24gIC1tbm8tYml0LWFsaWduCiAtbXN0cmljdC1hbGlnbiAgLW1uby1zdHJpY3QtYWxpZ24gIC1tcmVsb2NhdGFibGUKIC1tbm8tcmVsb2NhdGFibGUgIC1tcmVsb2NhdGFibGUtbGliICAtbW5vLXJlbG9jYXRhYmxlLWxpYgogLW10b2MgIC1tbm8tdG9jICAtbXRyYWNlYmFjayAgLW1uby10cmFjZWJhY2sKQEAgLTI5Nyw4ICszMDQsOCBAQAogLW1hbGlnbi1mdW5jdGlvbnM9QHZhcntudW19CiAKIEBlbXBoe0hQUEEgT3B0aW9uc30KLS1tZGlzYWJsZS1mcHJlZ3MgIC1tZGlzYWJsZS1pbmRleGluZyAtbWZhc3QtaW5kaXJlY3QtY2FsbHMKLS1tZ2FzICAtbWp1bXAtaW4tZGVsYXkgLW1sb25nLWxvYWQtc3RvcmUgLW1uby1kaXNhYmxlLWZwcmVncworLW1iaWctc3dpdGNoIC1tZGlzYWJsZS1mcHJlZ3MgIC1tZGlzYWJsZS1pbmRleGluZyAtbWZhc3QtaW5kaXJlY3QtY2FsbHMKKy1tZ2FzICAtbWp1bXAtaW4tZGVsYXkgLW1sb25nLWxvYWQtc3RvcmUgLW1uby1iaWctc3dpdGNoIC1tbm8tZGlzYWJsZS1mcHJlZ3MKIC1tbm8tZGlzYWJsZS1pbmRleGluZyAtbW5vLWZhc3QtaW5kaXJlY3QtY2FsbHMgLW1uby1nYXMKIC1tbm8tanVtcC1pbi1kZWxheQogLW1uby1sb25nLWxvYWQtc3RvcmUKQEAgLTM0MSwxMSArMzQ4LDEyIEBACiBAc21hbGxleGFtcGxlCiAtZmNhbGwtc2F2ZWQtQHZhcntyZWd9ICAtZmNhbGwtdXNlZC1AdmFye3JlZ30KIC1mZml4ZWQtQHZhcntyZWd9ICAtZmluaGliaXQtc2l6ZS1kaXJlY3RpdmUKKy1mY2hlY2stbWVtb3J5LXVzYWdlICAtZnByZWZpeC1mdW5jdGlvbi1uYW1lCiAtZm5vLWNvbW1vbiAgLWZuby1pZGVudCAgLWZuby1nbnUtbGlua2VyCiAtZnBjYy1zdHJ1Y3QtcmV0dXJuICAtZnBpYyAgLWZQSUMKIC1mcmVnLXN0cnVjdC1yZXR1cm4gIC1mc2hhcmVkLWRhdGEgIC1mc2hvcnQtZW51bXMKIC1mc2hvcnQtZG91YmxlICAtZnZvbGF0aWxlICAtZnZvbGF0aWxlLWdsb2JhbAotLWZ2ZXJib3NlLWFzbSAtZnBhY2stc3RydWN0ICArZTAgICtlMQorLWZ2ZXJib3NlLWFzbSAtZnBhY2stc3RydWN0ICAtZnN0YWNrLWNoZWNrICArZTAgICtlMQogQGVuZCBzbWFsbGV4YW1wbGUKIEBlbmQgdGFibGUKIApAQCAtNTU4LDggKzU2Niw4IEBACiBDLCBzdWNoIGFzIHRoZSBAY29kZXthc219LCBAY29kZXtpbmxpbmV9IGFuZCBAY29kZXt0eXBlb2Z9IGtleXdvcmRzLCBhbmQKIHByZWRlZmluZWQgbWFjcm9zIHN1Y2ggYXMgQGNvZGV7dW5peH0gYW5kIEBjb2Rle3ZheH0gdGhhdCBpZGVudGlmeSB0aGUKIHR5cGUgb2Ygc3lzdGVtIHlvdSBhcmUgdXNpbmcuICBJdCBhbHNvIGVuYWJsZXMgdGhlIHVuZGVzaXJhYmxlIGFuZAotcmFyZWx5IHVzZWQgQU5TSSB0cmlncmFwaCBmZWF0dXJlLCBkaXNhbGxvd3MgQHNhbXB7JH0gYXMgcGFydCBvZgotaWRlbnRpZmllcnMsIGFuZCBkaXNhYmxlcyByZWNvZ25pdGlvbiBvZiBDKysgc3R5bGUgQHNhbXB7Ly99IGNvbW1lbnRzLgorcmFyZWx5IHVzZWQgQU5TSSB0cmlncmFwaCBmZWF0dXJlLCBhbmQgaXQgZGlzYWJsZXMgcmVjb2duaXRpb24gb2YgQysrCitzdHlsZSBAc2FtcHsvL30gY29tbWVudHMuCiAKIFRoZSBhbHRlcm5hdGUga2V5d29yZHMgQGNvZGV7X19hc21fX30sIEBjb2Rle19fZXh0ZW5zaW9uX199LAogQGNvZGV7X19pbmxpbmVfX30gYW5kIEBjb2Rle19fdHlwZW9mX199IGNvbnRpbnVlIHRvIHdvcmsgZGVzcGl0ZQpAQCAtNjI4LDYgKzYzNiwyNCBAQAogYnVpbHRpbiBmdW5jdGlvbnMsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhbiBBTlNJIHN0YW5kYXJkCiBtZWFuaW5nLgogCitAaXRlbSAtZmhvc3RlZAorQGNpbmRleCBob3N0ZWQgZW52aXJvbm1lbnQKKworQXNzZXJ0IHRoYXQgY29tcGlsYXRpb24gdGFrZXMgcGxhY2UgaW4gYSBob3N0ZWQgZW52aXJvbm1lbnQuICBUaGlzIGltcGxpZXMKK0BzYW1wey1mYnVpbHRpbn0uICBBIGhvc3RlZCBlbnZpcm9ubWVudCBpcyBvbmUgaW4gd2hpY2ggdGhlCitlbnRpcmUgc3RhbmRhcmQgbGlicmFyeSBpcyBhdmFpbGFibGUsIGFuZCBpbiB3aGljaCBAY29kZXttYWlufSBoYXMgYSByZXR1cm4KK3R5cGUgb2YgQGNvZGV7aW50fS4gIEV4YW1wbGVzIGFyZSBuZWFybHkgZXZlcnl0aGluZyBleGNlcHQgYSBrZXJuZWwuCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gQHNhbXB7LWZuby1mcmVlc3RhbmRpbmd9LgorCitAaXRlbSAtZmZyZWVzdGFuZGluZworQGNpbmRleCBob3N0ZWQgZW52aXJvbm1lbnQKKworQXNzZXJ0IHRoYXQgY29tcGlsYXRpb24gdGFrZXMgcGxhY2UgaW4gYSBmcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQuICBUaGlzCitpbXBsaWVzIEBzYW1wey1mbm8tYnVpbHRpbn0uICBBIGZyZWVzdGFuZGluZyBlbnZpcm9ubWVudAoraXMgb25lIGluIHdoaWNoIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG1heSBub3QgZXhpc3QsIGFuZCBwcm9ncmFtIHN0YXJ0dXAgbWF5Citub3QgbmVjZXNzYXJpbHkgYmUgYXQgQGNvZGV7bWFpbn0uICBUaGUgbW9zdCBvYnZpb3VzIGV4YW1wbGUgaXMgYW4gT1Mga2VybmVsLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIEBzYW1wey1mbm8taG9zdGVkfS4KKwogQGl0ZW0gLXRyaWdyYXBocwogU3VwcG9ydCBBTlNJIEMgdHJpZ3JhcGhzLiAgWW91IGRvbid0IHdhbnQgdG8ga25vdyBhYm91dCB0aGlzCiBicmFpbi1kYW1hZ2UuICBUaGUgQHNhbXB7LWFuc2l9IG9wdGlvbiBpbXBsaWVzIEBzYW1wey10cmlncmFwaHN9LgpAQCAtMTAyOSw2ICsxMDU1LDEyIEBACiB3aWxsIGJlIGVtaXR0ZWQgaW4gdGhlIHRyYW5zbGF0aW9uIHVuaXQgY29udGFpbmluZyB0aGUgZmlyc3Qgb25lIG9mCiB0aG9zZS4KIAorQGl0ZW0gLWZ0ZW1wbGF0ZS1kZXB0aC1AdmFye259CitTZXQgdGhlIG1heGltdW0gaW5zdGFudGlhdGlvbiBkZXB0aCBmb3IgdGVtcGxhdGUgY2xhc3NlcyB0byBAdmFye259LgorQSBsaW1pdCBvbiB0aGUgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiBkZXB0aCBpcyBuZWVkZWQgdG8gZGV0ZWN0CitlbmRsZXNzIHJlY3Vyc2lvbnMgZHVyaW5nIHRlbXBsYXRlIGNsYXNzIGluc3RhbnRpYXRpb24uIEFOU0kvSVNPIEMrKworY29uZm9ybWluZyBwcm9ncmFtcyBtdXN0IG5vdCByZWx5IG9uIGEgbWF4aW11bSBkZXB0aCBncmVhdGVyIHRoYW4gMTcuCisKIEBpdGVtIC1ub3N0ZGluYysrCiBEbyBub3Qgc2VhcmNoIGZvciBoZWFkZXIgZmlsZXMgaW4gdGhlIHN0YW5kYXJkIGRpcmVjdG9yaWVzIHNwZWNpZmljIHRvCiBDKyssIGJ1dCBkbyBzdGlsbCBzZWFyY2ggdGhlIG90aGVyIHN0YW5kYXJkIGRpcmVjdG9yaWVzLiAgKFRoaXMgb3B0aW9uCkBAIC0xMDUzLDYgKzEwODUsOSBAQAogV2FybmluZ3MgdGhhdCBhcHBseSBvbmx5IHRvIEMrKyBwcm9ncmFtcy4gIEB4cmVme1dhcm5pbmcKIE9wdGlvbnMsLE9wdGlvbnMgdG8gUmVxdWVzdCBvciBTdXBwcmVzcyBXYXJuaW5nc30uCiAKK0BpdGVtIC1XZWZmYysrCitXYXJuIGFib3V0IHZpb2xhdGlvbiBvZiBzb21lIHN0eWxlIHJ1bGVzIGZyb20gRWZmZWN0aXZlIEMrKyBieSBTY290dCBNeWVycy4KKwogQGl0ZW0gK2VAdmFye259CiBDb250cm9sIGhvdyB2aXJ0dWFsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFyZSB1c2VkLCBpbiBhIGZhc2hpb24KIGNvbXBhdGlibGUgd2l0aCBAY29kZXtjZnJvbnR9IDEueC4gIEB4cmVme0NvZGUgR2VuIE9wdGlvbnMsLE9wdGlvbnMgZm9yCkBAIC0xMTQzLDggKzExNzgsMTQgQEAKIHNwZWNpZmllZC4KIAogQGl0ZW0gLVdpbXBsaWNpdAotV2FybiB3aGVuZXZlciBhIGZ1bmN0aW9uIG9yIHBhcmFtZXRlciBpcyBpbXBsaWNpdGx5IGRlY2xhcmVkLgorV2FybiB3aGVuZXZlciBhIGZ1bmN0aW9uIG9yIHBhcmFtZXRlciBpcyBpbXBsaWNpdGx5IGRlY2xhcmVkLAorb3Igd2hlbiBhIHR5cGUgaW1wbGljaXRseSBkZWZhdWx0cyB0byBAY29kZXtpbnR9LgogCitAaXRlbSAtV21haW4KK1dhcm4gaWYgdGhlIHR5cGUgb2YgQHNhbXB7bWFpbn0gaXMgc3VzcGljaW91cy4gIEBzYW1we21haW59IHNob3VsZCBiZSBhCitmdW5jdGlvbiB3aXRoIGV4dGVybmFsIGxpbmthZ2UsIHJldHVybmluZyBpbnQsIHRha2luZyBlaXRoZXIgemVybworYXJndW1lbnRzLCB0d28sIG9yIHRocmVlIGFyZ3VtZW50cyBvZiBhcHByb3ByaWF0ZSB0eXBlcy4KKyAgCiBAaXRlbSAtV3BhcmVudGhlc2VzCiBXYXJuIGlmIHBhcmVudGhlc2VzIGFyZSBvbWl0dGVkIGluIGNlcnRhaW4gY29udGV4dHMsIHN1Y2gKIGFzIHdoZW4gdGhlcmUgaXMgYW4gYXNzaWdubWVudCBpbiBhIGNvbnRleHQgd2hlcmUgYSB0cnV0aCB2YWx1ZQpAQCAtMTM2Niw2ICsxNDA3LDkgQEAKIEEgQGNvZGV7c3dpdGNofSBzdGF0ZW1lbnQgaGFzIGFuIG9wZXJhbmQgb2YgdHlwZSBAY29kZXtsb25nfS4KIEBlbmQgaXRlbWl6ZQogCitAaXRlbSAtV3VuZGVmCitXYXJuIGlmIGFuIHVuZGVmaW5lZCBpZGVudGlmaWVyIGlzIGV2YWx1YXRlZCBpbiBhbiBAc2FtcHsjaWZ9IGRpcmVjdGl2ZS4KKwogQGl0ZW0gLVdzaGFkb3cKIFdhcm4gd2hlbmV2ZXIgYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIgbG9jYWwgdmFyaWFibGUuCiAKQEAgLTE1MTAsNyArMTU1NCw3IEBACiBjcmFzaCBvcgogcmVmdXNlIHRvIHJlYWQgdGhlIHByb2dyYW0uICBJZiB5b3Ugd2FudCB0byBjb250cm9sIGZvciBjZXJ0YWluIHdoZXRoZXIKIHRvIGdlbmVyYXRlIHRoZSBleHRyYSBpbmZvcm1hdGlvbiwgdXNlIEBzYW1wey1nc3RhYnMrfSwgQHNhbXB7LWdzdGFic30sCi1Ac2FtcHstZ3hjb2ZmK30sIEBzYW1wey1neGNvZmZ9LCBAc2FtcHstZ2R3YXJmK30sIG9yIEBzYW1wey1nZHdhcmZ9CitAc2FtcHstZ3hjb2ZmK30sIEBzYW1wey1neGNvZmZ9LCBAc2FtcHstZ2R3YXJmLTErfSwgb3IgQHNhbXB7LWdkd2FyZi0xfQogKHNlZSBiZWxvdykuCiAKIFVubGlrZSBtb3N0IG90aGVyIEMgY29tcGlsZXJzLCBHTlUgQ0MgYWxsb3dzIHlvdSB0byB1c2UgQHNhbXB7LWd9IHdpdGgKQEAgLTE1MjgsOCArMTU3MiwxMCBAQAogY2FwYWJpbGl0eSBmb3IgbW9yZSB0aGFuIG9uZSBkZWJ1Z2dpbmcgZm9ybWF0LgogCiBAaXRlbSAtZ2dkYgotUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG5hdGl2ZSBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKLWluY2x1ZGluZyBHREIgZXh0ZW5zaW9ucyBpZiBhdCBhbGwgcG9zc2libGUuCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IEdEQi4gIFRoaXMgbWVhbnMgdG8gdXNlIHRoZQorbW9zdCBleHByZXNzaXZlIGZvcm1hdCBhdmFpbGFibGUgKERXQVJGIDIsIHN0YWJzLCBvciB0aGUgbmF0aXZlIGZvcm1hdAoraWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgc3VwcG9ydGVkKSwgaW5jbHVkaW5nIEdEQiBleHRlbnNpb25zIGlmIGF0IGFsbAorcG9zc2libGUuCiAKIEBpdGVtIC1nc3RhYnMKIFByb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHN0YWJzIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLApAQCAtMTU2MSwxNCArMTYwNywxOSBAQAogYXNzZW1ibGVyIChHQVMpIHRvIGZhaWwgd2l0aCBhbiBlcnJvci4KIAogQGl0ZW0gLWdkd2FyZgotUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gRFdBUkYgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCkuCi1UaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSBTREIgb24gbW9zdCBTeXN0ZW0gViBSZWxlYXNlIDQgc3lzdGVtcy4KK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIERXQVJGIHZlcnNpb24gMSBmb3JtYXQgKGlmIHRoYXQgaXMKK3N1cHBvcnRlZCkuICBUaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSBTREIgb24gbW9zdCBTeXN0ZW0gViBSZWxlYXNlIDQKK3N5c3RlbXMuCiAKIEBpdGVtIC1nZHdhcmYrCi1Qcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBEV0FSRiBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKLXVzaW5nIEdOVSBleHRlbnNpb25zIHVuZGVyc3Rvb2Qgb25seSBieSB0aGUgR05VIGRlYnVnZ2VyIChHREIpLiAgVGhlCi11c2Ugb2YgdGhlc2UgZXh0ZW5zaW9ucyBpcyBsaWtlbHkgdG8gbWFrZSBvdGhlciBkZWJ1Z2dlcnMgY3Jhc2ggb3IKLXJlZnVzZSB0byByZWFkIHRoZSBwcm9ncmFtLgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gRFdBUkYgdmVyc2lvbiAxIGZvcm1hdCAoaWYgdGhhdCBpcworc3VwcG9ydGVkKSwgdXNpbmcgR05VIGV4dGVuc2lvbnMgdW5kZXJzdG9vZCBvbmx5IGJ5IHRoZSBHTlUgZGVidWdnZXIKKyhHREIpLiAgVGhlIHVzZSBvZiB0aGVzZSBleHRlbnNpb25zIGlzIGxpa2VseSB0byBtYWtlIG90aGVyIGRlYnVnZ2VycworY3Jhc2ggb3IgcmVmdXNlIHRvIHJlYWQgdGhlIHByb2dyYW0uCisKK0BpdGVtIC1nZHdhcmYtMgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gRFdBUkYgdmVyc2lvbiAyIGZvcm1hdCAoaWYgdGhhdCBpcworc3VwcG9ydGVkKS4gIFRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IERCWCBvbiBJUklYIDYuCiAKIEBpdGVtIC1nQHZhcntsZXZlbH0KIEBpdGVteCAtZ2dkYkB2YXJ7bGV2ZWx9CkBAIC0xNTc2LDYgKzE2MjcsNyBAQAogQGl0ZW14IC1nY29mZkB2YXJ7bGV2ZWx9CiBAaXRlbXggLWd4Y29mZkB2YXJ7bGV2ZWx9CiBAaXRlbXggLWdkd2FyZkB2YXJ7bGV2ZWx9CitAaXRlbXggLWdkd2FyZi0yQHZhcntsZXZlbH0KIFJlcXVlc3QgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBhbHNvIHVzZSBAdmFye2xldmVsfSB0byBzcGVjaWZ5IGhvdwogbXVjaCBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGxldmVsIGlzIDIuCiAKQEAgLTE2ODgsNiArMTc0MCw1NCBAQAogd3JpdHRlbiB0byBAZmlsZXtiYnRyYWNlLmd6fS4gIEl0IGlzIHNvbGVseSB1c2VkIGZvciBjb3VudGluZyBqdW1wCiBmcmVxdWVuY2llcy4KIAorQGl0ZW0gLWZwcm9maWxlLWFyY3MKK0luc3RydW1lbnQgQGRmbnthcmNzfSBkdXJpbmcgY29tcGlsYXRpb24uICBGb3IgZWFjaCBmdW5jdGlvbiBvZiB5b3VyCitwcm9ncmFtLCBHTlUgQ0MgY3JlYXRlcyBhIHByb2dyYW0gZmxvdyBncmFwaCwgdGhlbiBmaW5kcyBhIHNwYW5uaW5nIHRyZWUKK2ZvciB0aGUgZ3JhcGguICBPbmx5IGFyY3MgdGhhdCBhcmUgbm90IG9uIHRoZSBzcGFubmluZyB0cmVlIGhhdmUgdG8gYmUKK2luc3RydW1lbnRlZDogdGhlIGNvbXBpbGVyIGFkZHMgY29kZSB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlc2UKK2FyY3MgYXJlIGV4ZWN1dGVkLiAgV2hlbiBhbiBhcmMgaXMgdGhlIG9ubHkgZXhpdCBvciBvbmx5IGVudHJhbmNlIHRvIGEKK2Jsb2NrLCB0aGUgaW5zdHJ1bWVudGF0aW9uIGNvZGUgY2FuIGJlIGFkZGVkIHRvIHRoZSBibG9jazsgb3RoZXJ3aXNlLCBhCituZXcgYmFzaWMgYmxvY2sgbXVzdCBiZSBjcmVhdGVkIHRvIGhvbGQgdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlLgorCitTaW5jZSBub3QgZXZlcnkgYXJjIGluIHRoZSBwcm9ncmFtIG11c3QgYmUgaW5zdHJ1bWVudGVkLCBwcm9ncmFtcworY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiBydW4gZmFzdGVyIHRoYW4gcHJvZ3JhbXMgY29tcGlsZWQgd2l0aAorQHNhbXB7LWF9LCB3aGljaCBhZGRzIGluc3RydW1lbnRhdGlvbiBjb2RlIHRvIGV2ZXJ5IGJhc2ljIGJsb2NrIGluIHRoZQorcHJvZ3JhbS4gIFRoZSB0cmFkZW9mZjogc2luY2UgQGNvZGV7Z2Nvdn0gZG9lcyBub3QgaGF2ZQorZXhlY3V0aW9uIGNvdW50cyBmb3IgYWxsIGJyYW5jaGVzLCBpdCBtdXN0IHN0YXJ0IHdpdGggdGhlIGV4ZWN1dGlvbgorY291bnRzIGZvciB0aGUgaW5zdHJ1bWVudGVkIGJyYW5jaGVzLCBhbmQgdGhlbiBpdGVyYXRlIG92ZXIgdGhlIHByb2dyYW0KK2Zsb3cgZ3JhcGggdW50aWwgdGhlIGVudGlyZSBncmFwaCBoYXMgYmVlbiBzb2x2ZWQuICBIZW5jZSwgQGNvZGV7Z2Nvdn0KK3J1bnMgYSBsaXR0bGUgbW9yZSBzbG93bHkgdGhhbiBhIHByb2dyYW0gd2hpY2ggdXNlcyBpbmZvcm1hdGlvbiBmcm9tCitAc2FtcHstYX0uCisKK0BzYW1wey1mcHJvZmlsZS1hcmNzfSBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGVzdGltYXRlIGJyYW5jaAorcHJvYmFiaWxpdGllcywgYW5kIHRvIGNhbGN1bGF0ZSBiYXNpYyBibG9jayBleGVjdXRpb24gY291bnRzLiAgSW4KK2dlbmVyYWwsIGJhc2ljIGJsb2NrIGV4ZWN1dGlvbiBjb3VudHMgZG8gbm90IGdpdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvCitlc3RpbWF0ZSBhbGwgYnJhbmNoIHByb2JhYmlsaXRpZXMuICBXaGVuIHRoZSBjb21waWxlZCBwcm9ncmFtIGV4aXRzLCBpdAorc2F2ZXMgdGhlIGFyYyBleGVjdXRpb24gY291bnRzIHRvIGEgZmlsZSBjYWxsZWQKK0BmaWxle0B2YXJ7c291cmNlbmFtZX0uZGF9LiAgVXNlIHRoZSBjb21waWxlciBvcHRpb24KK0BzYW1wey1mYnJhbmNoLXByb2JhYmlsaXRpZXN9IChAcHhyZWZ7T3B0aW1pemUgT3B0aW9ucywsT3B0aW9ucyB0aGF0CitDb250cm9sIE9wdGltaXphdGlvbn0pIHdoZW4gcmVjb21waWxpbmcsIHRvIG9wdGltaXplIHVzaW5nIGVzdGltYXRlZAorYnJhbmNoIHByb2JhYmlsaXRpZXMuCisKK0BuZWVkIDIwMDAKK0BpdGVtIC1mdGVzdC1jb3ZlcmFnZQorQ3JlYXRlIGRhdGEgZmlsZXMgZm9yIHRoZSBAY29kZXtnY292fSBjb2RlLWNvdmVyYWdlIHV0aWxpdHkKKyhAcHhyZWZ7R2NvdiwsIEBjb2Rle2djb3Z9OiBhIEdOVSBDQyBUZXN0IENvdmVyYWdlIFByb2dyYW19KS4KK1RoZSBkYXRhIGZpbGUgbmFtZXMgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiB5b3VyIHNvdXJjZSBmaWxlOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEB2YXJ7c291cmNlbmFtZX0uYmIKK0EgbWFwcGluZyBmcm9tIGJhc2ljIGJsb2NrcyB0byBsaW5lIG51bWJlcnMsIHdoaWNoIEBjb2Rle2djb3Z9IHVzZXMgdG8KK2Fzc29jaWF0ZSBiYXNpYyBibG9jayBleGVjdXRpb24gY291bnRzIHdpdGggbGluZSBudW1iZXJzLgorCitAaXRlbSBAdmFye3NvdXJjZW5hbWV9LmJiZworQSBsaXN0IG9mIGFsbCBhcmNzIGluIHRoZSBwcm9ncmFtIGZsb3cgZ3JhcGguICBUaGlzIGFsbG93cyBAY29kZXtnY292fQordG8gcmVjb25zdHJ1Y3QgdGhlIHByb2dyYW0gZmxvdyBncmFwaCwgc28gdGhhdCBpdCBjYW4gY29tcHV0ZSBhbGwgYmFzaWMKK2Jsb2NrIGFuZCBhcmMgZXhlY3V0aW9uIGNvdW50cyBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUKK0Bjb2Rle0B2YXJ7c291cmNlbmFtZX0uZGF9IGZpbGUgKHRoaXMgbGFzdCBmaWxlIGlzIHRoZSBvdXRwdXQgZnJvbQorQHNhbXB7LWZwcm9maWxlLWFyY3N9KS4KK0BlbmQgdGFibGUKKwogQGl0ZW0gLWRAdmFye2xldHRlcnN9CiBTYXlzIHRvIG1ha2UgZGVidWdnaW5nIGR1bXBzIGR1cmluZyBjb21waWxhdGlvbiBhdCB0aW1lcyBzcGVjaWZpZWQgYnkKIEB2YXJ7bGV0dGVyc30uICBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIuICBUaGUgZmlsZSBuYW1lcwpAQCAtMjA3OCw2ICsyMTc4LDIzIEBACiAKIEBpdGVtIC1mbm8tcGVlcGhvbGUKIERpc2FibGUgYW55IG1hY2hpbmUtc3BlY2lmaWMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucy4KKworQGl0ZW0gLWZicmFuY2gtcHJvYmFiaWxpdGllcworQWZ0ZXIgcnVubmluZyBhIHByb2dyYW0gY29tcGlsZWQgd2l0aCBAc2FtcHstZnByb2ZpbGUtYXJjc30KKyhAcHhyZWZ7RGVidWdnaW5nIE9wdGlvbnMsLCBPcHRpb25zIGZvciBEZWJ1Z2dpbmcgWW91ciBQcm9ncmFtIG9yCitAY29kZXtnY2N9fSksIHlvdSBjYW4gY29tcGlsZSBpdCBhIHNlY29uZCB0aW1lIHVzaW5nCitAc2FtcHstZmJyYW5jaC1wcm9iYWJpbGl0aWVzfSwgdG8gaW1wcm92ZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uCitndWVzc2luZyB0aGUgcGF0aCBhIGJyYW5jaCBtaWdodCB0YWtlLgorCitAaWZzZXQgSU5URVJOQUxTCitXaXRoIEBzYW1wey1mYnJhbmNoLXByb2JhYmlsaXRpZXN9LCBHTlUgQ0MgcHV0cyBhIEBzYW1we1JFR19FWEVDX0NPVU5UfQorbm90ZSBvbiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgZWFjaCBiYXNpYyBibG9jaywgYW5kIGEKK0BzYW1we1JFR19CUl9QUk9CfSBub3RlIG9uIGVhY2ggQHNhbXB7SlVNUF9JTlNOfSBhbmQgQHNhbXB7Q0FMTF9JTlNOfS4KK1RoZXNlIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgb3B0aW1pemF0aW9uLiAgQ3VycmVudGx5LCB0aGV5IGFyZSBvbmx5Cit1c2VkIGluIG9uZSBwbGFjZTogaW4gQGZpbGV7cmVvcmcuY30sIGluc3RlYWQgb2YgZ3Vlc3Npbmcgd2hpY2ggcGF0aCBhCiticmFuY2ggaXMgbW9zdGx5IHRvIHRha2UsIHRoZSBAc2FtcHtSRUdfQlJfUFJPQn0gdmFsdWVzIGFyZSB1c2VkIHRvCitleGFjdGx5IGRldGVybWluZSB3aGljaCBwYXRoIGlzIHRha2VuIG1vcmUgb2Z0ZW4uCitAZW5kIGlmc2V0CiBAZW5kIHRhYmxlCiAKIEBub2RlIFByZXByb2Nlc3NvciBPcHRpb25zCkBAIC0yNDEyLDkgKzI1MjksOSBAQAogCiBAdGFibGUgQGNvZGUKIEBpdGVtIC1JQHZhcntkaXJ9Ci1BZGQgdGhlIGRpcmVjdG9yeSBAdmFye2RpcmVjdG9yeX0gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMKLXRvIGJlIHNlYXJjaGVkIGZvciBoZWFkZXIgZmlsZXMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGEgc3lzdGVtCi1oZWFkZXIgZmlsZSwgc3Vic3RpdHV0aW5nIHlvdXIgb3duIHZlcnNpb24sIHNpbmNlIHRoZXNlIGRpcmVjdG9yaWVzIGFyZQorQWRkIHRoZSBkaXJlY3RvcnkgQHZhcntkaXJ9IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlCitzZWFyY2hlZCBmb3IgaGVhZGVyIGZpbGVzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhIHN5c3RlbSBoZWFkZXIKK2ZpbGUsIHN1YnN0aXR1dGluZyB5b3VyIG93biB2ZXJzaW9uLCBzaW5jZSB0aGVzZSBkaXJlY3RvcmllcyBhcmUKIHNlYXJjaGVkIGJlZm9yZSB0aGUgc3lzdGVtIGhlYWRlciBmaWxlIGRpcmVjdG9yaWVzLiAgSWYgeW91IHVzZSBtb3JlCiB0aGFuIG9uZSBAc2FtcHstSX0gb3B0aW9uLCB0aGUgZGlyZWN0b3JpZXMgYXJlIHNjYW5uZWQgaW4gbGVmdC10by1yaWdodAogb3JkZXI7IHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMgY29tZSBhZnRlci4KQEAgLTI0NzcsNiArMjU5NCwxNCBAQAogQW5vdGhlciB3YXkgdG8gc3BlY2lmeSBhIHByZWZpeCBtdWNoIGxpa2UgdGhlIEBzYW1wey1CfSBwcmVmaXggaXMgdG8gdXNlCiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQGNvZGV7R0NDX0VYRUNfUFJFRklYfS4gIEB4cmVme0Vudmlyb25tZW50CiBWYXJpYWJsZXN9LgorCitAaXRlbSAtc3BlY3M9QHZhcntmaWxlfQorUHJvY2VzcyBAdmFye2ZpbGV9IGFmdGVyIHRoZSBjb21waWxlciByZWFkcyBpbiB0aGUgc3RhbmRhcmQgQGZpbGV7c3BlY3N9CitmaWxlLCBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgdGhhdCB0aGUgQGZpbGV7Z2NjfSBkcml2ZXIKK3Byb2dyYW0gdXNlcyB3aGVuIGRldGVybWluaW5nIHdoYXQgc3dpdGNoZXMgdG8gcGFzcyB0byBAZmlsZXtjYzF9LAorQGZpbGV7Y2MxcGx1c30sIEBmaWxle2FzfSwgQGZpbGV7bGR9LCBldGMuICBNb3JlIHRoYW4gb25lCitAc2FtcHstc3BlY3M9fUB2YXJ7ZmlsZX0gY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhleQorYXJlIHByb2Nlc3NlZCBpbiBvcmRlciwgZnJvbSBsZWZ0IHRvIHJpZ2h0LgogQGVuZCB0YWJsZQogCiBAbm9kZSBUYXJnZXQgT3B0aW9ucwpAQCAtMjU5NCw2ICsyNzE5LDcgQEAKICogQ29udmV4IE9wdGlvbnM6OgogKiBBTUQyOUsgT3B0aW9uczo6CiAqIEFSTSBPcHRpb25zOjoKKyogTTMyUi9EIE9wdGlvbnM6OgogKiBNODhLIE9wdGlvbnM6OgogKiBSUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM6OgogKiBSVCBPcHRpb25zOjoKQEAgLTI2NjQsNiArMjc5MCwxMiBAQAogNjgwMjAvNjg4ODEgb3IgYSA2ODAzMCBvciBhIDY4MDQwLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgdXNlIHRoZQogNjg4ODEgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGVtdWxhdGVkIG9uIHRoZSA2ODA0MC4KIAorQGl0ZW0gLW02ODAyMC02MAorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDYwLCB3aXRob3V0IHVzaW5nIGFueSBvZiB0aGUgbmV3IGluc3RydWN0aW9ucy4KK1RoaXMgcmVzdWx0cyBpbiBjb2RlIHdoaWNoIGNhbiBydW4gcmVsYXRpdmVseSBlZmZpY2llbnRseSBvbiBlaXRoZXIgYQorNjgwMjAvNjg4ODEgb3IgYSA2ODAzMCBvciBhIDY4MDQwLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgdXNlIHRoZQorNjg4ODEgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGVtdWxhdGVkIG9uIHRoZSA2ODA2MC4KKwogQGl0ZW0gLW1mcGEKIEdlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIFN1biBGUEEgaW5zdHJ1Y3Rpb25zIGZvciBmbG9hdGluZyBwb2ludC4KIApAQCAtMjcxMCw2ICsyODQyLDE5IEBACiAKIFRoZSBAY29kZXtydGR9IGluc3RydWN0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgNjgwMTAsIDY4MDIwLCA2ODAzMCwKIDY4MDQwLCBhbmQgNjgwNjAgcHJvY2Vzc29ycywgYnV0IG5vdCBieSB0aGUgNjgwMDAgb3IgNTIwMC4KKworQGl0ZW0gLW1hbGlnbi1pbnQKK0BpdGVteCAtbW5vLWFsaWduLWludAorQ29udHJvbCB3aGV0aGVyIEdOVSBDQyBhbGlnbnMgQGNvZGV7aW50fSwgQGNvZGV7bG9uZ30sIEBjb2Rle2xvbmcgbG9uZ30sIAorQGNvZGV7ZmxvYXR9LCBAY29kZXtkb3VibGV9LCBhbmQgQGNvZGV7bG9uZyBkb3VibGV9IHZhcmlhYmxlcyBvbiBhIDMyLWJpdAorYm91bmRhcnkgKEBzYW1wey1tYWxpZ24taW50fSkgb3IgYSAxNi1iaXQgYm91bmRhcnkgKEBzYW1wey1tbm8tYWxpZ24taW50fSkuCitBbGlnbmluZyB2YXJpYWJsZXMgb24gMzItYml0IGJvdW5kYXJpZXMgcHJvZHVjZXMgY29kZSB0aGF0IHJ1bnMgc29tZXdoYXQKK2Zhc3RlciBvbiBwcm9jZXNzb3JzIHdpdGggMzItYml0IGJ1c3NlcyBhdCB0aGUgZXhwZW5zZSBvZiBtb3JlIG1lbW9yeS4KKworQHN0cm9uZ3tXYXJuaW5nOn0gaWYgeW91IHVzZSB0aGUgQHNhbXB7LW1hbGlnbi1pbnR9IHN3aXRjaCwgR05VIENDIHdpbGwKK2FsaWduIHN0cnVjdHVyZXMgY29udGFpbmluZyB0aGUgYWJvdmUgdHlwZXMgIGRpZmZlcmVudGx5IHRoYW4KK21vc3QgcHVibGlzaGVkIGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBtNjhrLgorCiBAZW5kIHRhYmxlCiAKIEBub2RlIFZBWCBPcHRpb25zCkBAIC0zMDkwLDYgKzMyMzUsMTIgQEAKIHJlZ2lzdGVycyBmb3IgY29weWluZyBvdXQgYXJndW1lbnRzLiAgVGhpcyBoZWxwcyBkZXRlY3QgY2FsbGluZyBhIGZ1bmN0aW9uCiB3aXRoIGZld2VyIGFyZ3VtZW50cyB0aGFuIGl0IHdhcyBkZWNsYXJlZCB3aXRoLgogCitAaXRlbSAtbW5vLWltcHVyZS10ZXh0CitAaXRlbXggLW1pbXB1cmUtdGV4dAorQGtpbmRleCAtbWltcHVyZS10ZXh0CitAc2FtcHstbWltcHVyZS10ZXh0fSwgdXNlZCBpbiBhZGRpdGlvbiB0byBAc2FtcHstc2hhcmVkfSwgdGVsbHMgdGhlIGNvbXBpbGVyIHRvCitub3QgcGFzcyBAc2FtcHstYXNzZXJ0IHB1cmUtdGV4dH0gdG8gdGhlIGxpbmtlciB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgb2JqZWN0LgorCiBAaXRlbSAtbXNvZnQtZmxvYXQKIEBraW5kZXggLW1zb2Z0LWZsb2F0CiBHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBsaWJyYXJ5IGNhbGxzIGZvciBmbG9hdGluZyBwb2ludC4KQEAgLTMxOTUsNiArMzM0Niw2NyBAQAogY29tcGlsZXIgaXMgYnVpbHQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLgogQGVuZCB0YWJsZQogCitAbm9kZSBNMzJSL0QgT3B0aW9ucworQHN1YnNlY3Rpb24gTTMyUi9EIE9wdGlvbnMKK0BjaW5kZXggTTMyUi9EIG9wdGlvbnMKKworVGhlc2UgQHNhbXB7LW19IG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIE1pdHN1YmlzaGkgTTMyUi9EIGFyY2hpdGVjdHVyZXM6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gLW1jb2RlLW1vZGVsPXNtYWxsCitBc3N1bWUgYWxsIG9iamVjdHMgbGl2ZSBpbiB0aGUgbG93ZXIgMTZNQiBvZiBtZW1vcnkgKHNvIHRoYXQgdGhlaXIgYWRkcmVzc2VzCitjYW4gYmUgbG9hZGVkIHdpdGggdGhlIEBjb2Rle2xkMjR9IGluc3RydWN0aW9uKSwgYW5kIGFzc3VtZSBhbGwgc3Vicm91dGluZXMKK2FyZSByZWFjaGFibGUgd2l0aCB0aGUgQGNvZGV7Ymx9IGluc3RydWN0aW9uLgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworVGhlIGFkZHJlc3NhYmlsaXR5IG9mIGEgcGFydGljdWxhciBvYmplY3QgY2FuIGJlIHNldCB3aXRoIHRoZQorQGNvZGV7bW9kZWx9IGF0dHJpYnV0ZS4KKworQGl0ZW0gLW1jb2RlLW1vZGVsPW1lZGl1bQorQXNzdW1lIG9iamVjdHMgbWF5IGJlIGFueXdoZXJlIGluIHRoZSAzMiBiaXQgYWRkcmVzcyBzcGFjZSAodGhlIGNvbXBpbGVyCit3aWxsIGdlbmVyYXRlIEBjb2Rle3NldGgvYWRkM30gaW5zdHJ1Y3Rpb25zIHRvIGxvYWQgdGhlaXIgYWRkcmVzc2VzKSwgYW5kCithc3N1bWUgYWxsIHN1YnJvdXRpbmVzIGFyZSByZWFjaGFibGUgd2l0aCB0aGUgQGNvZGV7Ymx9IGluc3RydWN0aW9uLgorCitAaXRlbSAtbWNvZGUtbW9kZWw9bGFyZ2UKK0Fzc3VtZSBvYmplY3RzIG1heSBiZSBhbnl3aGVyZSBpbiB0aGUgMzIgYml0IGFkZHJlc3Mgc3BhY2UgKHRoZSBjb21waWxlcgord2lsbCBnZW5lcmF0ZSBAY29kZXtzZXRoL2FkZDN9IGluc3RydWN0aW9ucyB0byBsb2FkIHRoZWlyIGFkZHJlc3NlcyksIGFuZAorYXNzdW1lIHN1YnJvdXRpbmVzIG1heSBub3QgYmUgcmVhY2hhYmxlIHdpdGggdGhlIEBjb2Rle2JsfSBpbnN0cnVjdGlvbgorKHRoZSBjb21waWxlciB3aWxsIGdlbmVyYXRlIHRoZSBtdWNoIHNsb3dlciBAY29kZXtzZXRoL2FkZDMvamx9CitpbnN0cnVjdGlvbiBzZXF1ZW5jZSkuCisKK0BpdGVtIC1tc2RhdGE9bm9uZQorRGlzYWJsZSB1c2Ugb2YgdGhlIHNtYWxsIGRhdGEgYXJlYS4gIFZhcmlhYmxlcyB3aWxsIGJlIHB1dCBpbnRvCitvbmUgb2YgQHNhbXB7LmRhdGF9LCBAc2FtcHtic3N9LCBvciBAc2FtcHsucm9kYXRhfSAodW5sZXNzIHRoZQorQGNvZGV7c2VjdGlvbn0gYXR0cmlidXRlIGhhcyBiZWVuIHNwZWNpZmllZCkuCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCitUaGUgc21hbGwgZGF0YSBhcmVhIGNvbnNpc3RzIG9mIHNlY3Rpb25zIEBzYW1wey5zZGF0YX0gYW5kIEBzYW1wey5zYnNzfS4KK09iamVjdHMgbWF5IGJlIGV4cGxpY2l0bHkgcHV0IGluIHRoZSBzbWFsbCBkYXRhIGFyZWEgd2l0aCB0aGUKK0Bjb2Rle3NlY3Rpb259IGF0dHJpYnV0ZSB1c2luZyBvbmUgb2YgdGhlc2Ugc2VjdGlvbnMuCisKK0BpdGVtIC1tc2RhdGE9c2RhdGEKK1B1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBzbWFsbCBkYXRhIGFyZWEsIGJ1dCBkbyBub3QKK2dlbmVyYXRlIHNwZWNpYWwgY29kZSB0byByZWZlcmVuY2UgdGhlbS4KKworQGl0ZW0gLW1zZGF0YT11c2UKK1B1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBzbWFsbCBkYXRhIGFyZWEsIGFuZCBnZW5lcmF0ZQorc3BlY2lhbCBpbnN0cnVjdGlvbnMgdG8gcmVmZXJlbmNlIHRoZW0uCisKK0BpdGVtIC1HIEB2YXJ7bnVtfQorQGNpbmRleCBzbWFsbGVyIGRhdGEgcmVmZXJlbmNlcworUHV0IGdsb2JhbCBhbmQgc3RhdGljIG9iamVjdHMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEB2YXJ7bnVtfSBieXRlcworaW50byB0aGUgc21hbGwgZGF0YSBvciBic3Mgc2VjdGlvbnMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGRhdGEgb3IgYnNzCitzZWN0aW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIEB2YXJ7bnVtfSBpcyA4LgorVGhlIEBzYW1wey1tc2RhdGF9IG9wdGlvbiBtdXN0IGJlIHNldCB0byBvbmUgb2YgQHNhbXB7c2RhdGF9IG9yIEBzYW1we3VzZX0KK2ZvciB0aGlzIG9wdGlvbiB0byBoYXZlIGFueSBlZmZlY3QuCisKK0FsbCBtb2R1bGVzIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIHRoZSBzYW1lIEBzYW1wey1HIEB2YXJ7bnVtfX0gdmFsdWUuCitDb21waWxpbmcgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIG9mIEB2YXJ7bnVtfSBtYXkgb3IgbWF5IG5vdCB3b3JrOyBpZiBpdAorZG9lc24ndCB0aGUgbGlua2VyIHdpbGwgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIC0gaW5jb3JyZWN0IGNvZGUgd2lsbCBub3QgYmUKK2dlbmVyYXRlZC4KKworQGVuZCB0YWJsZQorCiBAbm9kZSBNODhLIE9wdGlvbnMKIEBzdWJzZWN0aW9uIE04OEsgT3B0aW9ucwogQGNpbmRleCBNODhrIG9wdGlvbnMKQEAgLTM0NDgsOCArMzY2MCw3IEBACiBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBAc2FtcHtyaW9zfSBjaGlwIHNldCB1c2VkIGluIHRoZSBvcmlnaW5hbAogUlMvNjAwMCBzeXN0ZW1zIGFuZCB0aGUgQGRmbntQb3dlclBDfSBpbnN0cnVjdGlvbiBzZXQgaXMgdGhlCiBhcmNoaXRlY3R1cmUgb2YgdGhlIE1vdG9yb2xhIE1QQzV4eCwgTVBDNnh4LCBNUEM4eHggbWljcm9wcm9jZXNzb3JzLCBhbmQKLXRoZSBJQk0gNDB4IG1pY3JvcHJvY2Vzc29ycy4gIFRoZSBQb3dlclBDIGFyY2hpdGVjdHVyZSBkZWZpbmVzIDY0LWJpdAotaW5zdHJ1Y3Rpb25zLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSBhbnkgY3VycmVudCBwcm9jZXNzb3JzLgordGhlIElCTSA0eHggbWljcm9wcm9jZXNzb3JzLgogCiBOZWl0aGVyIGFyY2hpdGVjdHVyZSBpcyBhIHN1YnNldCBvZiB0aGUgb3RoZXIuICBIb3dldmVyIHRoZXJlIGlzIGEKIGxhcmdlIGNvbW1vbiBzdWJzZXQgb2YgaW5zdHJ1Y3Rpb25zIHN1cHBvcnRlZCBieSBib3RoLiAgQW4gTVEKQEAgLTM1MTIsMjUgKzM3MjMsMjggQEAKIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgbWFjaGluZSB0eXBlIEB2YXJ7Y3B1X3R5cGV9LgogU3VwcG9ydGVkIHZhbHVlcyBmb3IgQHZhcntjcHVfdHlwZX0gYXJlIEBzYW1we3JzNjAwMH0sIEBzYW1we3Jpb3MxfSwKIEBzYW1we3Jpb3MyfSwgQHNhbXB7cnNjfSwgQHNhbXB7NjAxfSwgQHNhbXB7NjAyfSwgQHNhbXB7NjAzfSwKLUBzYW1wezYwM2V9LCBAc2FtcHs2MDR9LCBAc2FtcHs2MjB9LCBAc2FtcHtwb3dlcn0sIEBzYW1we3Bvd2VyMn0sCi1Ac2FtcHtwb3dlcnBjfSwgQHNhbXB7NDAzfSwgQHNhbXB7NTA1fSwgQHNhbXB7ODIxfSwgYW5kIEBzYW1wezg2MH0gYW5kCi1Ac2FtcHtjb21tb259LiAgQHNhbXB7LW1jcHU9cG93ZXJ9LCBAc2FtcHstbWNwdT1wb3dlcjJ9LCBhbmQKLUBzYW1wey1tY3B1PXBvd2VycGN9IHNwZWNpZnkgZ2VuZXJpYyBQT1dFUiwgUE9XRVIyIGFuZCBwdXJlIFBvd2VyUEMKLShpLmUuLCBub3QgTVBDNjAxKSBhcmNoaXRlY3R1cmUgbWFjaGluZSB0eXBlcywgd2l0aCBhbiBhcHByb3ByaWF0ZSwKLWdlbmVyaWMgcHJvY2Vzc29yIG1vZGVsIGFzc3VtZWQgZm9yIHNjaGVkdWxpbmcgcHVycG9zZXMuQHJlZmlsbAorQHNhbXB7NjAzZX0sIEBzYW1wezYwNH0sIEBzYW1wezYwNGV9LCBAc2FtcHs2MjB9LCBAc2FtcHtwb3dlcn0sCitAc2FtcHtwb3dlcjJ9LCBAc2FtcHtwb3dlcnBjfSwgQHNhbXB7NDAzfSwgQHNhbXB7NTA1fSwgQHNhbXB7ODAxfSwKK0BzYW1wezgyMX0sIEBzYW1wezgyM30sIGFuZCBAc2FtcHs4NjB9IGFuZCBAc2FtcHtjb21tb259LgorQHNhbXB7LW1jcHU9cG93ZXJ9LCBAc2FtcHstbWNwdT1wb3dlcjJ9LCBhbmQgQHNhbXB7LW1jcHU9cG93ZXJwY30KK3NwZWNpZnkgZ2VuZXJpYyBQT1dFUiwgUE9XRVIyIGFuZCBwdXJlIFBvd2VyUEMgKGkuZS4sIG5vdCBNUEM2MDEpCithcmNoaXRlY3R1cmUgbWFjaGluZSB0eXBlcywgd2l0aCBhbiBhcHByb3ByaWF0ZSwgZ2VuZXJpYyBwcm9jZXNzb3IgbW9kZWwKK2Fzc3VtZWQgZm9yIHNjaGVkdWxpbmcgcHVycG9zZXMuQHJlZmlsbAogCiBAYyBvdmVyZnVsbCBoYm94IGhlcmUgLS1ib2IgMjIganVsOTYKIEBjIG9yaWdpbmFsIHRleHQgYmV0d2VlbiBpZ25vcmUgLi4uIGVuZCBpZ25vcmUKIEBpZ25vcmUKLVNwZWNpZnlpbmcgYW55IG9mIHRoZSBAc2FtcHstbWNwdT1yaW9zMX0sIEBzYW1wey1tY3B1PXJpb3MyfSwgQHNhbXB7LW1jcHU9cnNjfSwKLUBzYW1wey1tY3B1PXBvd2VyfSwgb3IgQHNhbXB7LW1jcHU9cG93ZXIyfSBvcHRpb25zIGVuYWJsZXMgdGhlIEBzYW1wey1tcG93ZXJ9Ci1vcHRpb24gYW5kIGRpc2FibGVzIHRoZSBAc2FtcHstbXBvd2VycGN9IG9wdGlvbjsgQHNhbXB7LW1jcHU9NjAxfQotZW5hYmxlcyBib3RoIHRoZSBAc2FtcHstbXBvd2VyfSBhbmQgQHNhbXB7LW1wb3dlcnBjfSBvcHRpb25zOwotYWxsIG9mIEBzYW1wey1tY3B1PTYwMn0sIEBzYW1wey1tY3B1PTYwM30sIEBzYW1wey1tY3B1PTYwM2V9LCBAc2FtcHstbWNwdT02MDR9LAotQHNhbXB7LW1jcHU9NjIwfSwgQHNhbXB7LW1jcHU9NDAzfSwgQHNhbXB7LW1jcHU9NTA1fSwgQHNhbXB7LW1jcHU9ODIxfSwKLUBzYW1wey1tY3B1PTg2MH0gYW5kIEBzYW1wey1tY3B1PXBvd2VycGN9IGVuYWJsZSB0aGUgQHNhbXB7LW1wb3dlcnBjfQotb3B0aW9uIGFuZCBkaXNhYmxlIHRoZSBAc2FtcHstbXBvd2VyfSBvcHRpb247IEBzYW1wey1tY3B1PWNvbW1vbn0KLWRpc2FibGVzIGJvdGggdGhlIEBzYW1wey1tcG93ZXJ9IGFuZCBAc2FtcHstbXBvd2VycGN9IG9wdGlvbnMuQHJlZmlsbAorU3BlY2lmeWluZyBhbnkgb2YgdGhlIEBzYW1wey1tY3B1PXJpb3MxfSwgQHNhbXB7LW1jcHU9cmlvczJ9LAorQHNhbXB7LW1jcHU9cnNjfSwgQHNhbXB7LW1jcHU9cG93ZXJ9LCBvciBAc2FtcHstbWNwdT1wb3dlcjJ9IG9wdGlvbnMKK2VuYWJsZXMgdGhlIEBzYW1wey1tcG93ZXJ9IG9wdGlvbiBhbmQgZGlzYWJsZXMgdGhlIEBzYW1wey1tcG93ZXJwY30KK29wdGlvbjsgQHNhbXB7LW1jcHU9NjAxfSBlbmFibGVzIGJvdGggdGhlIEBzYW1wey1tcG93ZXJ9IGFuZAorQHNhbXB7LW1wb3dlcnBjfSBvcHRpb25zOyBhbGwgb2YgQHNhbXB7LW1jcHU9NjAyfSwgQHNhbXB7LW1jcHU9NjAzfSwKK0BzYW1wey1tY3B1PTYwM2V9LCBAc2FtcHstbWNwdT02MDR9LCBAc2FtcHstbWNwdT02MDRlfSwKK0BzYW1wey1tY3B1PTYyMH0sIEBzYW1wey1tY3B1PTQwM30sIEBzYW1wey1tY3B1PTUwNX0sIEBzYW1wey1tY3B1PTgwMX0sCitAc2FtcHstbWNwdT04MjF9LCBAc2FtcHstbWNwdT04MjN9LCBAc2FtcHstbWNwdT04NjB9IGFuZAorQHNhbXB7LW1jcHU9cG93ZXJwY30gZW5hYmxlIHRoZSBAc2FtcHstbXBvd2VycGN9IG9wdGlvbiBhbmQgZGlzYWJsZSB0aGUKK0BzYW1wey1tcG93ZXJ9IG9wdGlvbjsgQHNhbXB7LW1jcHU9Y29tbW9ufSBkaXNhYmxlcyBib3RoIHRoZQorQHNhbXB7LW1wb3dlcn0gYW5kIEBzYW1wey1tcG93ZXJwY30gb3B0aW9ucy5AcmVmaWxsCiBAZW5kIGlnbm9yZQogQGMgICAgICAgICAgICBjaGFuZ2VkIHBhcmFncmFwaAogU3BlY2lmeWluZyBhbnkgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOiAKQEAgLTM2MTYsNiArMzgzMCwyMSBAQAogZGVmYXVsdCBhbmQgb25seSBpcyBuZWNlc3Nhcnkgd2hlbiBjYWxsaW5nIHN1YnJvdXRpbmVzIGNvbXBpbGVkIGJ5IEFJWAogWEwgY29tcGlsZXJzIHdpdGhvdXQgb3B0aW1pemF0aW9uLgogCitAaXRlbSAtbXRocmVhZHMKK1N1cHBvcnQgQGRmbntBSVggVGhyZWFkc30uICBMaW5rIGFuIGFwcGxpY2F0aW9uIHdyaXR0ZW4gdG8gdXNlCitAZGZue3B0aHJlYWRzfSB3aXRoIHNwZWNpYWwgbGlicmFyaWVzIGFuZCBzdGFydHVwIGNvZGUgdG8gZW5hYmxlIHRoZQorYXBwbGljYXRpb24gdG8gcnVuLgorCitAaXRlbSAtbXBlCitTdXBwb3J0IEBkZm57SUJNIFJTLzYwMDAgU1B9IEBkZm57UGFyYWxsZWwgRW52aXJvbm1lbnR9IChQRSkuICBMaW5rIGFuCithcHBsaWNhdGlvbiB3cml0dGVuIHRvIHVzZSBtZXNzYWdlIHBhc3Npbmcgd2l0aCBzcGVjaWFsIHN0YXJ0dXAgY29kZSB0bworZW5hYmxlIHRoZSBhcHBsaWNhdGlvbiB0byBydW4uICBUaGUgc3lzdGVtIG11c3QgaGF2ZSBQRSBpbnN0YWxsZWQgaW4gdGhlCitzdGFuZGFyZCBsb2NhdGlvbiAoQGZpbGV7L3Vzci9scHAvcHBlLnBvZS99KSwgb3IgdGhlIEBmaWxle3NwZWNzfSBmaWxlCittdXN0IGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgQHNhbXB7LXNwZWNzPX0gb3B0aW9uIHRvIHNwZWNpZnkgdGhlCithcHByb3ByaWF0ZSBkaXJlY3RvcnkgbG9jYXRpb24uICBUaGUgUGFyYWxsZWwgRW52aXJvbm1lbnQgZG9lcyBub3QKK3N1cHBvcnQgdGhyZWFkcywgc28gdGhlIEBzYW1wey1tcGV9IG9wdGlvbiBhbmQgdGhlIEBzYW1wey1tdGhyZWFkc30KK29wdGlvbiBhcmUgaW5jb21wYXRpYmxlLgorCiBAaXRlbSAtbXNvZnQtZmxvYXQKIEBpdGVteCAtbWhhcmQtZmxvYXQKIEdlbmVyYXRlIGNvZGUgdGhhdCBkb2VzIG5vdCB1c2UgKHVzZXMpIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQuCkBAIC0zNjM1LDExICszODY0LDI3IEBACiBAaXRlbXggLW1uby1zdHJpbmcKIEdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBsb2FkIHN0cmluZyBpbnN0cnVjdGlvbnMgYW5kIHRoZQogc3RvcmUgc3RyaW5nIHdvcmQgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUgbXVsdGlwbGUgcmVnaXN0ZXJzIGFuZCBkbyBzbWFsbCBibG9jawotbW92ZXMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IG9uIFBPV0VSIHN5c3RlbXMsIGFub2Qgbm90Cittb3Zlcy4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgb24gUE9XRVIgc3lzdGVtcywgYW5kIG5vdAogZ2VuZXJhdGVkIG9uIFBvd2VyUEMgc3lzdGVtcy4gIERvIG5vdCB1c2UgQHNhbXB7LW1zdHJpbmd9IG9uIGxpdHRsZSBlbmRpYW4KIFBvd2VyUEMgc3lzdGVtcywgc2luY2UgdGhvc2UgaW5zdHJ1Y3Rpb25zIGRvIG5vdCB3b3JrIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBpbgogbGl0dGxlIGVuZGlhbiBtb2RlLgogCitAaXRlbSAtbXVwZGF0ZQorQGl0ZW14IC1tbm8tdXBkYXRlCitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgbG9hZCBvciBzdG9yZSBpbnN0cnVjdGlvbnMKK3RoYXQgdXBkYXRlIHRoZSBiYXNlIHJlZ2lzdGVyIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWxjdWxhdGVkIG1lbW9yeQorbG9jYXRpb24uICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0LiAgSWYgeW91IHVzZQorQHNhbXB7LW1uby11cGRhdGV9LCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBiZXR3ZWVuIHRoZSB0aW1lIHRoYXQgdGhlCitzdGFjayBwb2ludGVyIGlzIHVwZGF0ZWQgYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBpcworc3RvcmVkLCB3aGljaCBtZWFucyBjb2RlIHRoYXQgd2Fsa3MgdGhlIHN0YWNrIGZyYW1lIGFjcm9zcyBpbnRlcnJ1cHRzIG9yCitzaWduYWxzIG1heSBnZXQgY29ycnVwdGVkIGRhdGEuCisKK0BpdGVtIC1tZnVzZWQtbWFkZAorQGl0ZW14IC1tbm8tZnVzZWQtbWFkZAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGZsb2F0aW5nIHBvaW50IG11bHRpcGx5IGFuZAorYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IGlmCitoYXJkd2FyZSBmbG9hdGluZyBpcyB1c2VkLgorCiBAaXRlbSAtbW5vLWJpdC1hbGlnbgogQGl0ZW14IC1tYml0LWFsaWduCiBPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgZG8gbm90IChkbykgZm9yY2Ugc3RydWN0dXJlcwpAQCAtMzcxOCw4ICszOTYzLDggQEAKIG9wZXJhdGluZyBzeXN0ZW0uCiAKIEBpdGVtIC1tY2FsbC1saW51eAotT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlIExpbnV4Ci1vcGVyYXRpbmcgc3lzdGVtLgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitMaW51eC1iYXNlZCBHTlUgc3lzdGVtLgogCiBAaXRlbSAtbXByb3RvdHlwZQogQGl0ZW0gLW1uby1wcm90b3R5cGUKQEAgLTM5MjcsNyArNDE3MiwxNiBAQAogCiBAaXRlbSAtbWdhcwogR2VuZXJhdGUgY29kZSBmb3IgdGhlIEdOVSBhc3NlbWJsZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIHRoZSBPU0YvMQotcmVmZXJlbmNlIHBsYXRmb3JtLCB1c2luZyB0aGUgT1NGL3Jvc2Ugb2JqZWN0IGZvcm1hdC4KK3JlZmVyZW5jZSBwbGF0Zm9ybSwgdXNpbmcgdGhlIE9TRi9yb3NlIG9iamVjdCBmb3JtYXQuICBBbHNvLCB0aGlzIGlzCit0aGUgZGVmYXVsdCBpZiB0aGUgY29uZmlndXJlIG9wdGlvbiBAc2FtcHstLXdpdGgtZ251LWFzfSBpcyB1c2VkLgorCitAaXRlbSAtbXNwbGl0LWFkZHJlc3NlcworQGl0ZW14IC1tbm8tc3BsaXQtYWRkcmVzc2VzCitHZW5lcmF0ZSBjb2RlIHRvIGxvYWQgdGhlIGhpZ2ggYW5kIGxvdyBwYXJ0cyBvZiBhZGRyZXNzIGNvbnN0YW50cyBzZXBhcmF0ZWx5LgorVGhpcyBhbGxvd3MgQGNvZGV7Z2NjfSB0byBvcHRpbWl6ZSBhd2F5IHJlZHVuZGFudCBsb2FkcyBvZiB0aGUgaGlnaCBvcmRlcgorYml0cyBvZiBhZGRyZXNzZXMuICBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyBHTlUgYXMgYW5kIEdOVSBsZC4KK1RoaXMgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3Igc29tZSBlbWJlZGRlZCB0YXJnZXRzIHdoZXJlCitHTlUgYXMgYW5kIEdOVSBsZCBhcmUgc3RhbmRhcmQuCiAKIEBpdGVtIC1tcm5hbWVzCiBAaXRlbXggLW1uby1ybmFtZXMKQEAgLTQyMDYsNiArNDQ2MCwxMSBAQAogQGl0ZW0gLW1wYS1yaXNjLTEtMQogR2VuZXJhdGUgY29kZSBmb3IgYSBQQSAxLjEgcHJvY2Vzc29yLgogCitAaXRlbSAtbWJpZy1zd2l0Y2gKK0dlbmVyYXRlIGNvZGUgc3VpdGFibGUgZm9yIGJpZyBzd2l0Y2ggdGFibGVzLiAgVXNlIHRoaXMgb3B0aW9uIG9ubHkgaWYKK3RoZSBhc3NlbWJsZXIvbGlua2VyIGNvbXBsYWluIGFib3V0IG91dCBvZiByYW5nZSBicmFuY2hlcyB3aXRoaW4gYSBzd2l0Y2gKK3RhYmxlLgorCiBAaXRlbSAtbWp1bXAtaW4tZGVsYXkKIEZpbGwgZGVsYXkgc2xvdHMgb2YgZnVuY3Rpb24gY2FsbHMgd2l0aCB1bmNvbmRpdGlvbmFsIGp1bXAgaW5zdHJ1Y3Rpb25zCiBieSBtb2RpZnlpbmcgdGhlIHJldHVybiBwb2ludGVyIGZvciB0aGUgZnVuY3Rpb24gY2FsbCB0byBiZSB0aGUgdGFyZ2V0CkBAIC00MzUzLDggKzQ2MTIsNyBAQAogCiBAaXRlbSAtbW9sZC1hbGlnbgogRW5hYmxlIHN0cnVjdHVyZS1hbGlnbm1lbnQgY29tcGF0aWJpbGl0eSB3aXRoIEludGVsJ3MgZ2NjIHJlbGVhc2UgdmVyc2lvbgotMS4zIChiYXNlZCBvbiBnY2MgMS4zNykuICBDdXJyZW50bHkgdGhpcyBpcyBidWdneSBpbiB0aGF0IEBzYW1weyNwcmFnbWEKLWFsaWduIDF9IGlzIGFsd2F5cyBhc3N1bWVkIGFzIHdlbGwsIGFuZCBjYW5ub3QgYmUgdHVybmVkIG9mZi4KKzEuMyAoYmFzZWQgb24gZ2NjIDEuMzcpLiAgVGhpcyBvcHRpb24gaW1wbGllcyBAc2FtcHstbXN0cmljdC1hbGlnbn0uCiBAZW5kIHRhYmxlCiAKIEBub2RlIERFQyBBbHBoYSBPcHRpb25zCkBAIC00NzMzLDIzICs0OTkxLDIwIEBACiBAY2luZGV4IFBJQwogR2VuZXJhdGUgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKSBzdWl0YWJsZSBmb3IgdXNlIGluIGEgc2hhcmVkCiBsaWJyYXJ5LCBpZiBzdXBwb3J0ZWQgZm9yIHRoZSB0YXJnZXQgbWFjaGluZS4gIFN1Y2ggY29kZSBhY2Nlc3NlcyBhbGwKLWNvbnN0YW50IGFkZHJlc3NlcyB0aHJvdWdoIGEgZ2xvYmFsIG9mZnNldCB0YWJsZSAoR09UKS4gIElmIHRoZSBHT1Qgc2l6ZQotZm9yIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBleGNlZWRzIGEgbWFjaGluZS1zcGVjaWZpYyBtYXhpbXVtIHNpemUsIHlvdQotZ2V0IGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgbGlua2VyIGluZGljYXRpbmcgdGhhdCBAc2FtcHstZnBpY30gZG9lcwotbm90IHdvcms7IGluIHRoYXQgY2FzZSwgcmVjb21waWxlIHdpdGggQHNhbXB7LWZQSUN9IGluc3RlYWQuICAoVGhlc2UKLW1heGltdW1zIGFyZSAxNmsgb24gdGhlIG04OGssIDhrIG9uIHRoZSBTcGFyYywgYW5kIDMyayBvbiB0aGUgbTY4ayBhbmQKLVJTLzYwMDAuICBUaGUgMzg2IGhhcyBubyBzdWNoIGxpbWl0LikKK2NvbnN0YW50IGFkZHJlc3NlcyB0aHJvdWdoIGEgZ2xvYmFsIG9mZnNldCB0YWJsZSAoR09UKS4gIFRoZSBkeW5hbWljCitsb2FkZXIgcmVzb2x2ZXMgdGhlIEdPVCBlbnRyaWVzIHdoZW4gdGhlIHByb2dyYW0gc3RhcnRzICh0aGUgZHluYW1pYworbG9hZGVyIGlzIG5vdCBwYXJ0IG9mIEdOVSBDQzsgaXQgaXMgcGFydCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuICBJZgordGhlIEdPVCBzaXplIGZvciB0aGUgbGlua2VkIGV4ZWN1dGFibGUgZXhjZWVkcyBhIG1hY2hpbmUtc3BlY2lmaWMKK21heGltdW0gc2l6ZSwgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGxpbmtlciBpbmRpY2F0aW5nIHRoYXQKK0BzYW1wey1mcGljfSBkb2VzIG5vdCB3b3JrOyBpbiB0aGF0IGNhc2UsIHJlY29tcGlsZSB3aXRoIEBzYW1wey1mUElDfQoraW5zdGVhZC4gIChUaGVzZSBtYXhpbXVtcyBhcmUgMTZrIG9uIHRoZSBtODhrLCA4ayBvbiB0aGUgU3BhcmMsIGFuZCAzMmsKK29uIHRoZSBtNjhrIGFuZCBSUy82MDAwLiAgVGhlIDM4NiBoYXMgbm8gc3VjaCBsaW1pdC4pCiAKIFBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgcmVxdWlyZXMgc3BlY2lhbCBzdXBwb3J0LCBhbmQgdGhlcmVmb3JlIHdvcmtzCiBvbmx5IG9uIGNlcnRhaW4gbWFjaGluZXMuICBGb3IgdGhlIDM4NiwgR05VIENDIHN1cHBvcnRzIFBJQyBmb3IgU3lzdGVtIFYKIGJ1dCBub3QgZm9yIHRoZSBTdW4gMzg2aS4gIENvZGUgZ2VuZXJhdGVkIGZvciB0aGUgSUJNIFJTLzYwMDAgaXMgYWx3YXlzCiBwb3NpdGlvbi1pbmRlcGVuZGVudC4KIAotVGhlIEdOVSBhc3NlbWJsZXIgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBQSUMuICBDdXJyZW50bHksIHlvdSBtdXN0IHVzZQotc29tZSBvdGhlciBhc3NlbWJsZXIgaW4gb3JkZXIgZm9yIFBJQyB0byB3b3JrLiAgV2Ugd291bGQgd2VsY29tZQotdm9sdW50ZWVycyB0byB1cGdyYWRlIEdBUyB0byBoYW5kbGUgdGhpczsgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGpvYiBpcwotdG8gZmlndXJlIG91dCB3aGF0IHRoZSBhc3NlbWJsZXIgbXVzdCBkbyBkaWZmZXJlbnRseS4KLQogQGl0ZW0gLWZQSUMKIElmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBlbWl0IHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUsCiBzdWl0YWJsZSBmb3IgZHluYW1pYyBsaW5raW5nIGFuZCBhdm9pZGluZyBhbnkgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlCkBAIC00ODA1LDYgKzUwNjAsNjEgQEAKIG5vdCB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbiwgc2luY2UgaXQgbWFrZXMgdGhlIGNvZGUgc3Vib3B0aW1hbCwgYW5kCiB0aGUgb2Zmc2V0cyBvZiBzdHJ1Y3R1cmUgbWVtYmVycyB3b24ndCBhZ3JlZSB3aXRoIHN5c3RlbSBsaWJyYXJpZXMuCiAKK0BpdGVtIC1mY2hlY2stbWVtb3J5LXVzYWdlCitHZW5lcmF0ZSBleHRyYSBjb2RlIHRvIGNoZWNrIGVhY2ggbWVtb3J5IGFjY2Vzcy4gIEdOVSBDQyB3aWxsIGdlbmVyYXRlCitjb2RlIHRoYXQgaXMgc3VpdGFibGUgZm9yIGEgZGV0ZWN0b3Igb2YgYmFkIG1lbW9yeSBhY2Nlc3NlcyBzdWNoIGFzCitAZmlsZXtDaGVja2VyfS4gIElmIHlvdSBzcGVjaWZ5IHRoaXMgb3B0aW9uLCB5b3UgY2FuIG5vdCB1c2UgdGhlCitAY29kZXthc219IG9yIEBjb2Rle19fYXNtX199IGtleXdvcmRzLgorCitZb3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhpcyBvcHRpb24gd2hlbiB5b3UgY29tcGlsZSBmdW5jdGlvbnMgeW91IGNhbGwgdGhhdAoraGF2ZSBzaWRlIGVmZmVjdHMuICBJZiB5b3UgZG8gbm90LCB5b3UgbWF5IGdldCBlcnJvbm91cyBtZXNzYWdlcyBmcm9tCit0aGUgZGV0ZWN0b3IuICBOb3JtYWxseSwgIHlvdSBzaG91bGQgY29tcGlsZSBhbGwgeW91ciBjb2RlIHdpdGggdGhpcyBvcHRpb24uCitJZiB5b3UgdXNlIGZ1bmN0aW9ucyBmcm9tIGEgbGlicmFyeSB0aGF0IGhhdmUgc2lkZS1lZmZlY3RzIChzdWNoIGFzCitAY29kZXtyZWFkfSksIHlvdSBtYXkgbm90IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBsaWJyYXJ5IGFuZAorc3BlY2lmeSB0aGlzIG9wdGlvbi4gIEluIHRoYXQgY2FzZSwgeW91IGNhbiBlbmFibGUgdGhlCitAc2FtcHstZnByZWZpeC1mdW5jdGlvbi1uYW1lfSBvcHRpb24sIHdoaWNoIHJlcXVlc3RzIEdOVSBDQyB0byBlbmNhcHN1bGF0ZQoreW91ciBjb2RlIGFuZCBtYWtlIG90aGVyIGZ1bmN0aW9ucyBsb29rIGFzIGlmIHRoZXkgd2VyZSBjb21waWxlZCB3aXRoCitAc2FtcHstZmNoZWNrLW1lbW9yeS11c2FnZX0uICBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyBgYHN0dWJzJycsCit3aGljaCBhcmUgcHJvdmlkZWQgYnkgdGhlIGRldGVjdG9yLiAgSWYgeW91IGNhbm5vdCBmaW5kIG9yIGJ1aWxkCitzdHVicyBmb3IgZXZlcnkgZnVuY3Rpb24geW91IGNhbGwsIHlvdSBtYXkgaGF2ZSB0byBzcGVjaWZ5CitAc2FtcHstZmNoZWNrLW1lbW9yeS11c2FnZX0gd2l0aG91dCBAc2FtcHstZnByZWZpeC1mdW5jdGlvbi1uYW1lfS4KKworQGl0ZW0gLWZwcmVmaXgtZnVuY3Rpb24tbmFtZQorUmVxdWVzdCBHTlUgQ0MgdG8gYWRkIGEgcHJlZml4IHRvIHRoZSBzeW1ib2xzIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb24gbmFtZXMuCitHTlUgQ0MgYWRkcyBhIHByZWZpeCB0byB0aGUgbmFtZXMgb2YgZnVuY3Rpb25zIGRlZmluZWQgYXMgd2VsbCBhcworZnVuY3Rpb25zIGNhbGxlZC4gIENvZGUgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiBhbmQgY29kZSBjb21waWxlZAord2l0aG91dCB0aGUgb3B0aW9uIGNhbid0IGJlIGxpbmtlZCB0b2dldGhlciwgdW5sZXNzIG9yIHN0dWJzIGFyZSB1c2VkLgorCitJZiB5b3UgY29tcGlsZSB0aGUgZm9sbG93aW5nIGNvZGUgd2l0aCBAc2FtcHstZnByZWZpeC1mdW5jdGlvbi1uYW1lfQorQGV4YW1wbGUKK2V4dGVybiB2b2lkIGJhciAoaW50KTsKK3ZvaWQKK2ZvbyAoaW50IGEpCitAeworICByZXR1cm4gYmFyIChhICsgNSk7CisKK0B9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitHTlUgQ0Mgd2lsbCBjb21waWxlIHRoZSBjb2RlIGFzIGlmIGl0IHdhcyB3cml0dGVuOgorQGV4YW1wbGUKK2V4dGVybiB2b2lkIHByZWZpeF9iYXIgKGludCk7Cit2b2lkCitwcmVmaXhfZm9vIChpbnQgYSkKK0B7CisgIHJldHVybiBwcmVmaXhfYmFyIChhICsgNSk7CitAfQorQGVuZCBleGFtcGxlCitUaGlzIG9wdGlvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggQHNhbXB7LWZjaGVjay1tZW1vcnktdXNhZ2V9LgorCitAaXRlbSAtZnN0YWNrLWNoZWNrCitHZW5lcmF0ZSBjb2RlIHRvIHZlcmlmeSB0aGF0IHlvdSBkbyBub3QgZ28gYmV5b25kIHRoZSBib3VuZGFyeSBvZiB0aGUKK3N0YWNrLiAgWW91IHNob3VsZCBzcGVjaWZ5IHRoaXMgZmxhZyBpZiB5b3UgYXJlIHJ1bm5pbmcgaW4gYW4KK2Vudmlyb25tZW50IHdpdGggbXVsdGlwbGUgdGhyZWFkcywgYnV0IG9ubHkgcmFyZWx5IG5lZWQgdG8gc3BlY2lmeSBpdCBpbgorYSBzaW5nbGUtdGhyZWFkZWQgZW52aXJvbm1lbnQgc2luY2Ugc3RhY2sgb3ZlcmZsb3cgaXMgYXV0b21hdGljYWxseQorZGV0ZWN0ZWQgb24gbmVhcmx5IGFsbCBzeXN0ZW1zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHN0YWNrLgorCiBAaXRlbSArZTAKIEBpdGVteCArZTEKIENvbnRyb2wgd2hldGhlciB2aXJ0dWFsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGNsYXNzZXMgYXJlIHVzZWQgdG8KZGlmZiAtLWdpdCBhL2djYy9qdXN0LWZpeGluYyBiL2djYy9qdXN0LWZpeGluYwppbmRleCBlNWNlYWVjLi4wNmNmOTk2IDEwMDc1NQotLS0gYS9nY2MvanVzdC1maXhpbmMKKysrIGIvZ2NjL2p1c3QtZml4aW5jCkBAIC0xLDUgKzEsNSBAQAogIyEvYmluL3NoCi0jICRJZCQKKyMgJElkOiBqdXN0LWZpeGluYyx2IDEuMSAxOTk3LzA4LzExIDE1OjU3OjExIGxhdyBFeHAgJAogIyBUaGlzIHNjcmlwdCBleGlzdHMgZm9yIHVzZSBhZnRlciBpbnN0YWxsaW5nCiAjIHRoZSBHQ0MgYmluYXJpZXMgZnJvbSBhIGRpc3RyaWJ1dGlvbiB0YXBlL0NELVJPTS4KICMgVXNlIGl0ICphZnRlciogY29weWluZyB0aGUgZGlyZWN0b3J5IG9mIGJpbmFyaWVzCmRpZmYgLS1naXQgYS9nY2MvbWQudGV4aSBiL2djYy9tZC50ZXhpCmluZGV4IDRmZTc1OWEuLjFkNWQ1M2QgMTAwNjQ0Ci0tLSBhL2djYy9tZC50ZXhpCisrKyBiL2djYy9tZC50ZXhpCkBAIC0yNDEwLDYgKzI0MTAsMTYgQEAKIAogTm8gb3BlcmFuZHMgYXJlIHByb3ZpZGVkLgogCitAY2luZGV4IEBjb2Rle2NoZWNrX3N0YWNrfSBpbnN0cnVjdGlvbiBwYXR0ZXJuCitAaXRlbSBAc2FtcHtjaGVja19zdGFja30KK0lmIHN0YWNrIGNoZWNraW5nIGNhbm5vdCBiZSBkb25lIG9uIHlvdXIgc3lzdGVtIGJ5IHByb2JpbmcgdGhlIHN0YWNrIHdpdGgKK2EgbG9hZCBvciBzdG9yZSBpbnN0cnVjdGlvbiAoQHB4cmVme1N0YWNrIENoZWNraW5nfSksIGRlZmluZSB0aGlzIHBhdHRlcm4KK3RvIHBlcmZvcm0gdGhlIG5lZWRlZCBjaGVjayBhbmQgc2lnbmFsaW5nIGFuIGVycm9yIGlmIHRoZSBzdGFjaworaGFzIG92ZXJmbG93ZWQuICBUaGUgc2luZ2xlIG9wZXJhbmQgaXMgdGhlIGxvY2F0aW9uIGluIHRoZSBzdGFjayBmdXJ0aGVzdAorZnJvbSB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIHRoYXQgeW91IG5lZWQgdG8gdmFsaWRhdGUuICBOb3JtYWxseSwKK29uIG1hY2hpbmVzIHdoZXJlIHRoaXMgcGF0dGVybiBpcyBuZWVkZWQsIHlvdSB3b3VsZCBvYnRhaW4gdGhlIHN0YWNrCitsaW1pdCBmcm9tIGEgZ2xvYmFsIG9yIHRocmVhZC1zcGVjaWZpYyB2YXJpYWJsZSBvciByZWdpc3Rlci4KKwogQGNpbmRleCBAY29kZXtub25sb2NhbF9nb3RvfSBpbnN0cnVjdGlvbiBwYXR0ZXJuCiBAaXRlbSBAc2FtcHtub25sb2NhbF9nb3RvfQogRW1pdCBjb2RlIHRvIGdlbmVyYXRlIGEgbm9uLWxvY2FsIGdvdG8sIGUuZy4sIGEganVtcCBmcm9tIG9uZSBmdW5jdGlvbgpAQCAtMjQzNiw2ICsyNDQ2LDE1IEBACiBuZWVkIHRoaXMgcGF0dGVybiBpcyBpZiBzb21lIHZhbHVlLCBzdWNoIGFzIGEgcG9pbnRlciB0byBhIGdsb2JhbCB0YWJsZSwKIG11c3QgYmUgcmVzdG9yZWQgd2hlbiB0aGUgZnJhbWUgcG9pbnRlciBpcyByZXN0b3JlZC4gIFRoZXJlIGFyZSBubwogYXJndW1lbnRzLgorCitAY2luZGV4IEBjb2Rle2V4Y2VwdGlvbl9yZWNlaXZlcn0gaW5zdHJ1Y3Rpb24gcGF0dGVybgorQGl0ZW0gQHNhbXB7ZXhjZXB0aW9uX3JlY2VpdmVyfQorVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBjb250YWlucyBjb2RlIG5lZWRlZCBhdCB0aGUgc2l0ZSBvZiBhbgorZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBpc24ndCBuZWVkZWQgYXQgdGhlIHNpdGUgb2YgYSBub25sb2NhbCBnb3RvLiAgWW91Cit3aWxsIG5vdCBub3JtYWxseSBuZWVkIHRvIGRlZmluZSB0aGlzIHBhdHRlcm4uICBBIHR5cGljYWwgcmVhc29uIHdoeSB5b3UKK21pZ2h0IG5lZWQgdGhpcyBwYXR0ZXJuIGlzIGlmIHNvbWUgdmFsdWUsIHN1Y2ggYXMgYSBwb2ludGVyIHRvIGEgZ2xvYmFsCit0YWJsZSwgbXVzdCBiZSByZXN0b3JlZCBhZnRlciBjb250cm9sIGZsb3cgaXMgYnJhbmNoZWQgdG8gdGhlIGhhbmRsZXIgb2YKK2FuIGV4Y2VwdGlvbi4gIFRoZXJlIGFyZSBubyBhcmd1bWVudHMuCiBAZW5kIHRhYmxlCiAKIEBub2RlIFBhdHRlcm4gT3JkZXJpbmcKZGlmZiAtLWdpdCBhL2djYy9tb3ZlLWlmLWNoYW5nZSBiL2djYy9tb3ZlLWlmLWNoYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmQ4YjhhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL21vdmUtaWYtY2hhbmdlCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorIyBMaWtlIG12ICQxICQyLCBidXQgaWYgdGhlIGZpbGVzIGFyZSB0aGUgc2FtZSwganVzdCBkZWxldGUgJDEuCisjIFN0YXR1cyBpcyAwIGlmICQyIGlzIGNoYW5nZWQsIDEgb3RoZXJ3aXNlLgoraWYKK3Rlc3QgLXIgJDIKK3RoZW4KK2lmCitjbXAgLXMgJDEgJDIKK3RoZW4KK2VjaG8gJDIgaXMgdW5jaGFuZ2VkCitybSAtZiAkMQorZWxzZQorbXYgLWYgJDEgJDIKK2ZpCitlbHNlCittdiAtZiAkMSAkMgorZmkKZGlmZiAtLWdpdCBhL2djYy9vYmpjL29iamMtcGFyc2UuYyBiL2djYy9vYmpjL29iamMtcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA0NjgyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL29iamMvb2JqYy1wYXJzZS5jCkBAIC0wLDAgKzEsNTEwMyBAQAorCisvKiAgQSBCaXNvbiBwYXJzZXIsIG1hZGUgZnJvbSBvYmpjLXBhcnNlLnkgd2l0aCBCaXNvbiB2ZXJzaW9uIEdOVSBCaXNvbiB2ZXJzaW9uIDEuMjQKKyAgKi8KKworI2RlZmluZSBZWUJJU09OIDEgIC8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisKKyNkZWZpbmUJSURFTlRJRklFUgkyNTgKKyNkZWZpbmUJVFlQRU5BTUUJMjU5CisjZGVmaW5lCVNDU1BFQwkyNjAKKyNkZWZpbmUJVFlQRVNQRUMJMjYxCisjZGVmaW5lCVRZUEVfUVVBTAkyNjIKKyNkZWZpbmUJQ09OU1RBTlQJMjYzCisjZGVmaW5lCVNUUklORwkyNjQKKyNkZWZpbmUJRUxMSVBTSVMJMjY1CisjZGVmaW5lCVNJWkVPRgkyNjYKKyNkZWZpbmUJRU5VTQkyNjcKKyNkZWZpbmUJU1RSVUNUCTI2OAorI2RlZmluZQlVTklPTgkyNjkKKyNkZWZpbmUJSUYJMjcwCisjZGVmaW5lCUVMU0UJMjcxCisjZGVmaW5lCVdISUxFCTI3MgorI2RlZmluZQlETwkyNzMKKyNkZWZpbmUJRk9SCTI3NAorI2RlZmluZQlTV0lUQ0gJMjc1CisjZGVmaW5lCUNBU0UJMjc2CisjZGVmaW5lCURFRkFVTFQJMjc3CisjZGVmaW5lCUJSRUFLCTI3OAorI2RlZmluZQlDT05USU5VRQkyNzkKKyNkZWZpbmUJUkVUVVJOCTI4MAorI2RlZmluZQlHT1RPCTI4MQorI2RlZmluZQlBU01fS0VZV09SRAkyODIKKyNkZWZpbmUJVFlQRU9GCTI4MworI2RlZmluZQlBTElHTk9GCTI4NAorI2RlZmluZQlBVFRSSUJVVEUJMjg1CisjZGVmaW5lCUVYVEVOU0lPTgkyODYKKyNkZWZpbmUJTEFCRUwJMjg3CisjZGVmaW5lCVJFQUxQQVJUCTI4OAorI2RlZmluZQlJTUFHUEFSVAkyODkKKyNkZWZpbmUJQVNTSUdOCTI5MAorI2RlZmluZQlPUk9SCTI5MQorI2RlZmluZQlBTkRBTkQJMjkyCisjZGVmaW5lCUVRQ09NUEFSRQkyOTMKKyNkZWZpbmUJQVJJVEhDT01QQVJFCTI5NAorI2RlZmluZQlMU0hJRlQJMjk1CisjZGVmaW5lCVJTSElGVAkyOTYKKyNkZWZpbmUJVU5BUlkJMjk3CisjZGVmaW5lCVBMVVNQTFVTCTI5OAorI2RlZmluZQlNSU5VU01JTlVTCTI5OQorI2RlZmluZQlIWVBFUlVOQVJZCTMwMAorI2RlZmluZQlQT0lOVFNBVAkzMDEKKyNkZWZpbmUJSU5URVJGQUNFCTMwMgorI2RlZmluZQlJTVBMRU1FTlRBVElPTgkzMDMKKyNkZWZpbmUJRU5ECTMwNAorI2RlZmluZQlTRUxFQ1RPUgkzMDUKKyNkZWZpbmUJREVGUwkzMDYKKyNkZWZpbmUJRU5DT0RFCTMwNworI2RlZmluZQlDTEFTU05BTUUJMzA4CisjZGVmaW5lCVBVQkxJQwkzMDkKKyNkZWZpbmUJUFJJVkFURQkzMTAKKyNkZWZpbmUJUFJPVEVDVEVECTMxMQorI2RlZmluZQlQUk9UT0NPTAkzMTIKKyNkZWZpbmUJT0JKRUNUTkFNRQkzMTMKKyNkZWZpbmUJQ0xBU1MJMzE0CisjZGVmaW5lCUFMSUFTCTMxNQorI2RlZmluZQlPQkpDX1NUUklORwkzMTYKKworI2xpbmUgMzMgIm9iamMtcGFyc2UueSIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJpbnB1dC5oIgorI2luY2x1ZGUgImMtbGV4LmgiCisjaW5jbHVkZSAiYy10cmVlLmgiCisjaW5jbHVkZSAiZmxhZ3MuaCIKKworI2lmZGVmIE1VTFRJQllURV9DSEFSUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJvYmpjLWFjdC5oIgorCisvKiBTaW5jZSBwYXJzZXJzIGFyZSBkaXN0aW5jdCBmb3IgZWFjaCBsYW5ndWFnZSwgcHV0IHRoZSBsYW5ndWFnZSBzdHJpbmcKKyAgIGRlZmluaXRpb24gaGVyZS4gICovCitjaGFyICpsYW5ndWFnZV9zdHJpbmcgPSAiR05VIE9iai1DIjsKKworI2lmbmRlZiBlcnJubworZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorCit2b2lkIHl5ZXJyb3IgKCk7CisKKy8qIExpa2UgWVlFUlJPUiBidXQgZG8gY2FsbCB5eWVycm9yLiAgKi8KKyNkZWZpbmUgWVlFUlJPUjEgeyB5eWVycm9yICgic3ludGF4IGVycm9yIik7IFlZRVJST1I7IH0KKworLyogQ2F1c2UgdGhlIGB5eWRlYnVnJyB2YXJpYWJsZSB0byBiZSBkZWZpbmVkLiAgKi8KKyNkZWZpbmUgWVlERUJVRyAxCisKKyNsaW5lIDcxICJvYmpjLXBhcnNlLnkiCit0eXBlZGVmIHVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOworCWNoYXIgKmZpbGVuYW1lOyBpbnQgbGluZW5vOyBpbnQgZW5kc19pbl9sYWJlbDsgfSBZWVNUWVBFOworI2xpbmUgMTk4ICJvYmpjLXBhcnNlLnkiCisKKy8qIE51bWJlciBvZiBzdGF0ZW1lbnRzIChsb29zZWx5IHNwZWFraW5nKSBzZWVuIHNvIGZhci4gICovCitzdGF0aWMgaW50IHN0bXRfY291bnQ7CisKKy8qIElucHV0IGZpbGUgYW5kIGxpbmUgbnVtYmVyIG9mIHRoZSBlbmQgb2YgdGhlIGJvZHkgb2YgbGFzdCBzaW1wbGVfaWY7CisgICB1c2VkIGJ5IHRoZSBzdG10LXJ1bGUgaW1tZWRpYXRlbHkgYWZ0ZXIgc2ltcGxlX2lmIHJldHVybnMuICAqLworc3RhdGljIGNoYXIgKmlmX3N0bXRfZmlsZTsKK3N0YXRpYyBpbnQgaWZfc3RtdF9saW5lOworCisvKiBMaXN0IG9mIHR5cGVzIGFuZCBzdHJ1Y3R1cmUgY2xhc3NlcyBvZiB0aGUgY3VycmVudCBkZWNsYXJhdGlvbi4gICovCitzdGF0aWMgdHJlZSBjdXJyZW50X2RlY2xzcGVjcyA9IE5VTExfVFJFRTsKK3N0YXRpYyB0cmVlIHByZWZpeF9hdHRyaWJ1dGVzID0gTlVMTF9UUkVFOworCisvKiBTdGFjayBvZiBzYXZlZCB2YWx1ZXMgb2YgY3VycmVudF9kZWNsc3BlY3MgYW5kIHByZWZpeF9hdHRyaWJ1dGVzLiAgKi8KK3N0YXRpYyB0cmVlIGRlY2xzcGVjX3N0YWNrOworCisvKiAxIGlmIHdlIGV4cGxhaW5lZCB1bmRlY2xhcmVkIHZhciBlcnJvcnMuICAqLworc3RhdGljIGludCB1bmRlY2xhcmVkX3ZhcmlhYmxlX25vdGljZTsKKworLyogT2JqZWN0aXZlLUMgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwordHJlZSBvYmpjX2ludGVyZmFjZV9jb250ZXh0OwordHJlZSBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQ7Cit0cmVlIG9iamNfbWV0aG9kX2NvbnRleHQ7Cit0cmVlIG9iamNfaXZhcl9jaGFpbjsKK3RyZWUgb2JqY19pdmFyX2NvbnRleHQ7CitlbnVtIHRyZWVfY29kZSBvYmpjX2luaGVyaXRfY29kZTsKK2ludCBvYmpjX3JlY2VpdmVyX2NvbnRleHQ7CitpbnQgb2JqY19wdWJsaWNfZmxhZzsKKworCisvKiBUZWxsIHl5cGFyc2UgaG93IHRvIHByaW50IGEgdG9rZW4ncyB2YWx1ZSwgaWYgeXlkZWJ1ZyBpcyBzZXQuICAqLworCisjZGVmaW5lIFlZUFJJTlQoRklMRSxZWUNIQVIsWVlMVkFMKSB5eXByaW50KEZJTEUsWVlDSEFSLFlZTFZBTCkKK2V4dGVybiB2b2lkIHl5cHJpbnQgKCk7CisKKyNpZm5kZWYgWVlMVFlQRQordHlwZWRlZgorICBzdHJ1Y3QgeXlsdHlwZQorICAgIHsKKyAgICAgIGludCB0aW1lc3RhbXA7CisgICAgICBpbnQgZmlyc3RfbGluZTsKKyAgICAgIGludCBmaXJzdF9jb2x1bW47CisgICAgICBpbnQgbGFzdF9saW5lOworICAgICAgaW50IGxhc3RfY29sdW1uOworICAgICAgY2hhciAqdGV4dDsKKyAgIH0KKyAgeXlsdHlwZTsKKworI2RlZmluZSBZWUxUWVBFIHl5bHR5cGUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZiBfX2NwbHVzcGx1cworI2lmbmRlZiBfX1NURENfXworI2RlZmluZSBjb25zdAorI2VuZGlmCisjZW5kaWYKKworCisKKyNkZWZpbmUJWVlGSU5BTAkJOTQwCisjZGVmaW5lCVlZRkxBRwkJLTMyNzY4CisjZGVmaW5lCVlZTlRCQVNFCTg0CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoeCkgKCh1bnNpZ25lZCkoeCkgPD0gMzE2ID8geXl0cmFuc2xhdGVbeF0gOiAzMDUpCisKK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPSB7ICAgICAwLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgODAsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDUyLCAgICA0MywgICAgIDIsICAgIDU5LAorICAgIDc2LCAgICA1MCwgICAgNDgsICAgIDgxLCAgICA0OSwgICAgNTgsICAgIDUxLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAzOCwgICAgNzcsICAgICAyLAorICAgIDM2LCAgICAgMiwgICAgMzcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgIDYwLCAgICAgMiwgICAgODMsICAgIDQyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgODIsICAgIDQxLCAgICA3OCwgICAgNzksICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgIDM5LCAgICA0MCwgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LAorICAgIDU3LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUKK307CisKKyNpZiBZWURFQlVHICE9IDAKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9IHsgICAgIDAsCisgICAgIDAsICAgICAxLCAgICAgMywgICAgIDQsICAgICA3LCAgICAgOCwgICAgMTIsICAgIDE0LCAgICAxNiwgICAgMTgsCisgICAgMjQsICAgIDI3LCAgICAzMSwgICAgMzYsICAgIDQxLCAgICA0NCwgICAgNDcsICAgIDUwLCAgICA1MywgICAgNTUsCisgICAgNTYsICAgIDU3LCAgICA2NSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgODAsICAgIDg1LCAgICA4NiwgICAgODcsCisgICAgOTQsICAgIDk4LCAgIDEwMCwgICAxMDIsICAgMTA0LCAgIDEwNiwgICAxMDgsICAgMTEwLCAgIDExMiwgICAxMTQsCisgICAxMTYsICAgMTE4LCAgIDEyMCwgICAxMjIsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTMxLCAgIDEzMywgICAxMzYsCisgICAxMzksICAgMTQyLCAgIDE0NSwgICAxNDgsICAgMTUzLCAgIDE1NiwgICAxNjEsICAgMTY0LCAgIDE2NywgICAxNjksCisgICAxNzEsICAgMTczLCAgIDE3OCwgICAxNzksICAgMTg3LCAgIDE4OSwgICAxOTMsICAgMTk3LCAgIDIwMSwgICAyMDUsCisgICAyMDksICAgMjEzLCAgIDIxNywgICAyMjEsICAgMjI1LCAgIDIyOSwgICAyMzMsICAgMjM3LCAgIDIzOCwgICAyNDMsCisgICAyNDQsICAgMjQ5LCAgIDI1MCwgICAyNTEsICAgMjU5LCAgIDI2MCwgICAyNjYsICAgMjcwLCAgIDI3NCwgICAyNzYsCisgICAyNzgsICAgMjgwLCAgIDI4NCwgICAyODgsICAgMjg5LCAgIDI5NCwgICAyOTksICAgMzA0LCAgIDMwOCwgICAzMTIsCisgICAzMTUsICAgMzE4LCAgIDMyMCwgICAzMjIsICAgMzI0LCAgIDMyNiwgICAzMjgsICAgMzMwLCAgIDMzMywgICAzMzUsCisgICAzMzgsICAgMzM5LCAgIDM0MSwgICAzNDQsICAgMzQ4LCAgIDM1MCwgICAzNTIsICAgMzU1LCAgIDM1OCwgICAzNjMsCisgICAzNjgsICAgMzcxLCAgIDM3NCwgICAzNzgsICAgMzgwLCAgIDM4MiwgICAzODUsICAgMzg4LCAgIDM4OSwgICAzOTAsCisgICAzOTUsICAgNDAwLCAgIDQwNCwgICA0MDgsICAgNDExLCAgIDQxNCwgICA0MTcsICAgNDIwLCAgIDQyNCwgICA0MjUsCisgICA0MjgsICAgNDMxLCAgIDQzNCwgICA0MzcsICAgNDQxLCAgIDQ0MiwgICA0NDUsICAgNDQ4LCAgIDQ1MCwgICA0NTIsCisgICA0NTUsICAgNDU4LCAgIDQ2MCwgICA0NjIsICAgNDY1LCAgIDQ2OCwgICA0NzEsICAgNDc1LCAgIDQ3NiwgICA0NzksCisgICA0ODEsICAgNDgzLCAgIDQ4NSwgICA0ODgsICAgNDkxLCAgIDQ5MywgICA0OTgsICAgNTAzLCAgIDUwNSwgICA1MDcsCisgICA1MDksICAgNTExLCAgIDUxNSwgICA1MTcsICAgNTIxLCAgIDUyMiwgICA1MjcsICAgNTI4LCAgIDUzNSwgICA1MzksCisgICA1NDAsICAgNTQ3LCAgIDU1MSwgICA1NTIsICAgNTU0LCAgIDU1NiwgICA1NTksICAgNTY2LCAgIDU2OCwgICA1NzIsCisgICA1NzMsICAgNTc1LCAgIDU4MCwgICA1ODcsICAgNTkyLCAgIDU5NCwgICA1OTYsICAgNTk4LCAgIDYwMCwgICA2MDIsCisgICA2MDMsICAgNjA4LCAgIDYxMCwgICA2MTEsICAgNjE0LCAgIDYxNiwgICA2MjAsICAgNjIyLCAgIDYyMywgICA2MjgsCisgICA2MzAsICAgNjMxLCAgIDYzNiwgICA2MzcsICAgNjQzLCAgIDY0NCwgICA2NDUsICAgNjUxLCAgIDY1MiwgICA2NTMsCisgICA2NTksICAgNjYxLCAgIDY2MywgICA2NjcsICAgNjcxLCAgIDY3NiwgICA2ODAsICAgNjg0LCAgIDY4OCwgICA2OTAsCisgICA2OTIsICAgNjk2LCAgIDcwMSwgICA3MDUsICAgNzA5LCAgIDcxMywgICA3MTUsICAgNzE5LCAgIDcyMywgICA3MjcsCisgICA3MzIsICAgNzM2LCAgIDc0MCwgICA3NDIsICAgNzQzLCAgIDc1MSwgICA3NTcsICAgNzYwLCAgIDc2MSwgICA3NjksCisgICA3NzUsICAgNzc4LCAgIDc3OSwgICA3ODgsICAgNzg5LCAgIDc5NywgICA4MDAsICAgODAxLCAgIDgwMywgICA4MDQsCisgICA4MDYsICAgODA4LCAgIDgxMSwgICA4MTIsICAgODE2LCAgIDgxOSwgICA4MjQsICAgODI4LCAgIDgzMCwgICA4MzQsCisgICA4MzYsICAgODM4LCAgIDg0MSwgICA4NDMsICAgODQ3LCAgIDg1MiwgICA4NTksICAgODY1LCAgIDg2NywgICA4NzEsCisgICA4NzMsICAgODc1LCAgIDg3OSwgICA4ODIsICAgODg1LCAgIDg4NiwgICA4ODgsICAgODkwLCAgIDg5MywgICA4OTQsCisgICA4OTcsICAgOTAxLCAgIDkwNSwgICA5MDgsICAgOTEyLCAgIDkxNywgICA5MjEsICAgOTI0LCAgIDkyOCwgICA5MzEsCisgICA5MzMsICAgOTM1LCAgIDkzOCwgICA5NDEsICAgOTQyLCAgIDk0NCwgICA5NDcsICAgOTQ4LCAgIDk0OSwgICA5NTEsCisgICA5NTMsICAgOTU2LCAgIDk2MCwgICA5NjIsICAgOTY1LCAgIDk2OCwgICA5NzUsICAgOTgxLCAgIDk4NywgICA5OTAsCisgICA5OTMsICAgOTk4LCAgIDk5OSwgIDEwMDQsICAxMDA1LCAgMTAwNiwgIDEwMTAsICAxMDE1LCAgMTAxOSwgIDEwMjEsCisgIDEwMjMsICAxMDI1LCAgMTAyNywgIDEwMzAsICAxMDMxLCAgMTAzNiwgIDEwMzgsICAxMDQyLCAgMTA0MywgIDEwNDQsCisgIDEwNTIsICAxMDU4LCAgMTA2MSwgIDEwNjIsICAxMDYzLCAgMTA2NCwgIDEwNzcsICAxMDc4LCAgMTA4NSwgIDEwODgsCisgIDEwOTEsICAxMDk0LCAgMTA5OCwgIDExMDUsICAxMTE0LCAgMTEyNSwgIDExMzgsICAxMTQyLCAgMTE0NywgIDExNDksCisgIDExNTEsICAxMTUyLCAgMTE1OSwgIDExNjMsICAxMTY5LCAgMTE3MiwgIDExNzUsICAxMTc2LCAgMTE3OCwgIDExNzksCisgIDExODEsICAxMTgyLCAgMTE4NCwgIDExODYsICAxMTkwLCAgMTE5NSwgIDExOTcsICAxMjAxLCAgMTIwMiwgIDEyMDUsCisgIDEyMDgsICAxMjA5LCAgMTIxNCwgIDEyMTcsICAxMjE4LCAgMTIyMCwgIDEyMjIsICAxMjI2LCAgMTIyOCwgIDEyMzIsCisgIDEyMzcsICAxMjQyLCAgMTI0NywgIDEyNTIsICAxMjU3LCAgMTI1OCwgIDEyNjEsICAxMjYzLCAgMTI2NiwgIDEyNjgsCisgIDEyNzIsICAxMjc0LCAgMTI3OCwgIDEyODAsICAxMjgyLCAgMTI4NCwgIDEyODYsICAxMjg4LCAgMTI5MCwgIDEyOTIsCisgIDEyOTQsICAxMjk4LCAgMTMwMiwgIDEzMDcsICAxMzA4LCAgMTMwOSwgIDEzMjAsICAxMzIxLCAgMTMyOCwgIDEzMjksCisgIDEzMzAsICAxMzQzLCAgMTM0NCwgIDEzNTMsICAxMzU0LCAgMTM2MSwgIDEzNjQsICAxMzY1LCAgMTM3NCwgIDEzNzksCisgIDEzODAsICAxMzkwLCAgMTM5NiwgIDEzOTcsICAxNDA0LCAgMTQwNSwgIDE0MDcsICAxNDExLCAgMTQxNSwgIDE0MTcsCisgIDE0MTksICAxNDIxLCAgMTQyMywgIDE0MjQsICAxNDI4LCAgMTQzMSwgIDE0MzUsICAxNDM5LCAgMTQ0MSwgIDE0NDIsCisgIDE0NDQsICAxNDQ4LCAgMTQ1MCwgIDE0NTQsICAxNDU3LCAgMTQ1OCwgIDE0NTksICAxNDYwLCAgMTQ2OCwgIDE0NjksCisgIDE0NzAsICAxNDcxLCAgMTQ3OSwgIDE0ODAsICAxNDgxLCAgMTQ4NCwgIDE0ODYsICAxNDg4LCAgMTQ5MSwgIDE0OTIsCisgIDE0OTYsICAxNDk4LCAgMTUwMCwgIDE1MDEsICAxNTAyLCAgMTUwOCwgIDE1MDksICAxNTEwLCAgMTUxNiwgIDE1MjEsCisgIDE1MjMsICAxNTI5LCAgMTUzMiwgIDE1MzMsICAxNTM2LCAgMTUzNywgIDE1MzksICAxNTQxLCAgMTU0MywgIDE1NDYsCisgIDE1NDksICAxNTU0LCAgMTU1NywgIDE1NjAsICAxNTYyLCAgMTU2NiwgIDE1NjksICAxNTcyLCAgMTU3NSwgIDE1NzYsCisgIDE1NzksICAxNTgwLCAgMTU4NCwgIDE1ODYsICAxNTg4LCAgMTU5MSwgIDE1OTMsICAxNTk1LCAgMTU5NywgIDE1OTksCisgIDE2MDEsICAxNjAzLCAgMTYwNSwgIDE2MDcsICAxNjA5LCAgMTYxMSwgIDE2MTMsICAxNjE1LCAgMTYxNywgIDE2MTksCisgIDE2MjEsICAxNjIzLCAgMTYyNSwgIDE2MjcsICAxNjI5LCAgMTYzMSwgIDE2MzMsICAxNjM1LCAgMTYzNywgIDE2MzksCisgIDE2NDEsICAxNjQ4LCAgMTY1MiwgIDE2NTgsICAxNjYxLCAgMTY2MywgIDE2NjUsICAxNjY3LCAgMTY3MCwgIDE2NzIsCisgIDE2NzYsICAxNjc5LCAgMTY4MSwgIDE2ODMsICAxNjg0LCAgMTY4NSwgIDE2OTIsICAxNjk0LCAgMTY5NiwgIDE2OTgsCisgIDE3MDEsICAxNzA0LCAgMTcwNiwgIDE3MTEsICAxNzE2Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyaHNbXSA9IHsgICAgLTEsCisgICAgODUsICAgICAwLCAgICAgMCwgICAgODYsICAgIDg4LCAgICAgMCwgICAgIDAsICAgIDg1LCAgICA4NywgICAgODgsCisgICAgIDAsICAgIDkwLCAgICAgMCwgICAgODksICAgICAwLCAgIDIzNiwgICAgIDAsICAgIDI3LCAgICA1OSwgICAgOTksCisgICAgNzYsICAgIDc3LCAgICAgMCwgICAyMzUsICAgIDg4LCAgICAgMCwgICAxMjMsICAgMTM3LCAgICA3NywgICAgIDAsCisgICAxMzAsICAgMTIzLCAgIDEzNywgICAgNzcsICAgICAwLCAgIDEyNiwgICAxMjMsICAgMTM2LCAgICA3NywgICAgIDAsCisgICAxMzAsICAgIDc3LCAgICAgMCwgICAxMjYsICAgIDc3LCAgICAgMCwgICAgIDEsICAgIDc3LCAgICAgMCwgICAgIDEsCisgICAgNzgsICAgICAwLCAgICA3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjYsICAgMTIzLCAgIDE2MywgICAgOTEsCisgICAxMTcsICAgIDkyLCAgIDE5NCwgICAgIDAsICAgMTI2LCAgIDEyMywgICAxNjMsICAgICAxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgMTMwLCAgIDEyMywgICAxNjYsICAgIDkzLCAgIDExNywgICAgOTQsICAgMTk0LCAgICAgMCwgICAxMzAsCisgICAxMjMsICAgMTY2LCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjMsICAgMTY2LCAgICA5NSwgICAxMTcsCisgICAgOTYsICAgMTk0LCAgICAgMCwgICAxMjMsICAgMTY2LCAgICAgMSwgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDQsCisgICAgIDAsICAgIDcyLCAgICAgMCwgICAgNjcsICAgICAwLCAgICA0MywgICAgIDAsICAgIDQ5LCAgICAgMCwgICAgNDgsCisgICAgIDAsICAgIDU0LCAgICAgMCwgICAgNTUsICAgICAwLCAgICA3OSwgICAgIDAsICAgIDgwLCAgICAgMCwgICAxMDEsCisgICAgIDAsICAgICAwLCAgIDEwMSwgICAgIDAsICAgMTA3LCAgICAgMCwgICAxMDEsICAgIDgxLCAgIDEwNywgICAgIDAsCisgICAxMTMsICAgICAwLCAgICA1MCwgICAxMDUsICAgICAwLCAgIDIzNSwgICAxMDUsICAgICAwLCAgICA5OCwgICAxMDUsCisgICAgIDAsICAgIDQwLCAgICA5NywgICAgIDAsICAgMTAzLCAgIDEwMiwgICAgIDAsICAgMTAzLCAgICA1OSwgICAxODEsCisgICAgNzYsICAgICAwLCAgIDEwNCwgICAxMDIsICAgICAwLCAgIDEwNCwgICAgNTksICAgMTgxLCAgICA3NiwgICAgIDAsCisgICAgMzMsICAgMTA1LCAgICAgMCwgICAgMzQsICAgMTA1LCAgICAgMCwgICAgMTEsICAgICAwLCAgICAyOSwgICAgIDAsCisgICAxMDIsICAgICAwLCAgICA1OSwgICAxODEsICAgIDc2LCAgIDEwNSwgICAgIDAsICAgICAwLCAgICA1OSwgICAxODEsCisgICAgNzYsICAgIDgyLCAgIDEwNiwgICAxNTEsICAgIDc4LCAgICAgMCwgICAxMDUsICAgICAwLCAgIDEwNywgICAgNDgsCisgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDksICAgMTA3LCAgICAgMCwgICAxMDcsICAgIDUwLCAgIDEwNywgICAgIDAsCisgICAxMDcsICAgIDUxLCAgIDEwNywgICAgIDAsICAgMTA3LCAgICA1MiwgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDYsCisgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDcsICAgMTA3LCAgICAgMCwgICAxMDcsICAgIDQ1LCAgIDEwNywgICAgIDAsCisgICAxMDcsICAgIDQ0LCAgIDEwNywgICAgIDAsICAgMTA3LCAgICA0MywgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDEsCisgICAxMDcsICAgICAwLCAgIDEwNywgICAgNDIsICAgMTA3LCAgICAgMCwgICAgIDAsICAgMTA3LCAgICA0MCwgICAxMDgsCisgICAxMDcsICAgICAwLCAgICAgMCwgICAxMDcsICAgIDM5LCAgIDEwOSwgICAxMDcsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAxMDcsICAgIDM3LCAgIDExMCwgICAgOTksICAgIDM4LCAgIDExMSwgICAxMDcsICAgICAwLCAgICAgMCwgICAxMDcsCisgICAgMzcsICAgMTEyLCAgICAzOCwgICAxMDcsICAgICAwLCAgIDEwNywgICAgMzYsICAgMTA3LCAgICAgMCwgICAxMDcsCisgICAgMzUsICAgMTA3LCAgICAgMCwgICAgIDMsICAgICAwLCAgICAgOCwgICAgIDAsICAgMTE1LCAgICAgMCwgICAgNTksCisgICAgOTksICAgIDc2LCAgICAgMCwgICAgNTksICAgICAxLCAgICA3NiwgICAgIDAsICAgICAwLCAgICA1OSwgICAxMTQsCisgICAxOTUsICAgIDc2LCAgICAgMCwgICAxMTMsICAgIDU5LCAgIDEwMCwgICAgNzYsICAgICAwLCAgIDExMywgICAgNjAsCisgICAgOTksICAgIDgzLCAgICAgMCwgICAxMTMsICAgIDU4LCAgICA5NywgICAgIDAsICAgMTEzLCAgICA1NywgICAgOTcsCisgICAgIDAsICAgMTEzLCAgICA1NCwgICAgIDAsICAgMTEzLCAgICA1NSwgICAgIDAsICAgMjk2LCAgICAgMCwgICAzMDIsCisgICAgIDAsICAgMzAzLCAgICAgMCwgICAzMDQsICAgICAwLCAgIDExNiwgICAgIDAsICAgICA5LCAgICAgMCwgICAxMTUsCisgICAgIDksICAgICAwLCAgICA3NSwgICAgIDAsICAgMTE2LCAgICA3NSwgICAgIDAsICAgICAwLCAgIDExOSwgICAgIDAsCisgICAxMTksICAgIDEwLCAgICAgMCwgICAyMDAsICAgMjAxLCAgIDEyMCwgICAgIDAsICAgMTE4LCAgICAgMCwgICAxODksCisgICAgIDAsICAgMTE5LCAgIDExOCwgICAgIDAsICAgMTE4LCAgIDE4OSwgICAgIDAsICAgMTI4LCAgIDEyMywgICAxMzYsCisgICAgNzcsICAgICAwLCAgIDEzMSwgICAxMjMsICAgMTM3LCAgICA3NywgICAgIDAsICAgMTI4LCAgICA3NywgICAgIDAsCisgICAxMzEsICAgIDc3LCAgICAgMCwgICAyMDAsICAgMjAxLCAgIDEyNSwgICAgIDAsICAgMTIxLCAgICAgMCwgICAxODksCisgICAgIDAsICAgMTIyLCAgIDEyMSwgICAgIDAsICAgMTIxLCAgIDE4OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjYsCisgICAxMjMsICAgMTM2LCAgICA3NywgICAgIDAsICAgMTMwLCAgIDEyMywgICAxMzcsICAgIDc3LCAgICAgMCwgICAxMjYsCisgICAxMjMsICAgMTU3LCAgICAgMCwgICAxMzAsICAgMTIzLCAgIDE2MCwgICAgIDAsICAgMTI2LCAgICA3NywgICAgIDAsCisgICAxMzAsICAgIDc3LCAgICAgMCwgICAyMzUsICAgMTI1LCAgICAgMCwgICAxMzQsICAgMTI3LCAgICAgMCwgICAxMzAsCisgICAxMzQsICAgMTI3LCAgICAgMCwgICAgIDAsICAgMTI3LCAgIDEzNSwgICAgIDAsICAgMTI3LCAgICAgNSwgICAgIDAsCisgICAxMjcsICAgMTQ0LCAgICAgMCwgICAxMzQsICAgMTI5LCAgICAgMCwgICAxMzEsICAgMTM0LCAgIDEyOSwgICAgIDAsCisgICAgIDAsICAgMTI5LCAgIDEzNSwgICAgIDAsICAgMTI5LCAgICAgNSwgICAgIDAsICAgMTMxLCAgICAgMCwgICAxNDQsCisgICAgIDAsICAgMTMwLCAgIDEzMSwgICAgIDAsICAgMTMwLCAgIDE0NCwgICAgIDAsICAgICA3LCAgICAgMCwgICAgIDUsCisgICAgIDAsICAgMTMxLCAgICAgNywgICAgIDAsICAgMTMxLCAgICAgNSwgICAgIDAsICAgMTM0LCAgIDEzMywgICAgIDAsCisgICAxODMsICAgMTM0LCAgIDEzMywgICAgIDAsICAgICAwLCAgIDEzMywgICAxMzUsICAgICAwLCAgICAgNiwgICAgIDAsCisgICAxNjcsICAgICAwLCAgICAgNCwgICAgIDAsICAgIDY3LCAgIDI1MiwgICAgIDAsICAgIDcyLCAgIDI1MiwgICAgIDAsCisgICAyNTMsICAgICAwLCAgICAyOCwgICAgNTksICAgIDk5LCAgICA3NiwgICAgIDAsICAgIDI4LCAgICA1OSwgICAxODEsCisgICAgNzYsICAgICAwLCAgICAgNiwgICAgIDAsICAgICA3LCAgICAgMCwgICAxNjcsICAgICAwLCAgIDEzOSwgICAgIDAsCisgICAxMzYsICAgIDgxLCAgIDEzOSwgICAgIDAsICAgMTQxLCAgICAgMCwgICAxMzcsICAgIDgxLCAgIDEzOSwgICAgIDAsCisgICAgIDAsICAgIDI3LCAgICA1OSwgICAxMTUsICAgIDc2LCAgICAgMCwgICAgIDAsICAgMTYzLCAgIDEzOCwgICAxNDMsCisgICAgMzYsICAgMTQwLCAgIDE0OSwgICAgIDAsICAgMTYzLCAgIDEzOCwgICAxNDMsICAgICAwLCAgICAgMCwgICAxNjYsCisgICAxMzgsICAgMTQzLCAgICAzNiwgICAxNDIsICAgMTQ5LCAgICAgMCwgICAxNjYsICAgMTM4LCAgIDE0MywgICAgIDAsCisgICAgIDAsICAgMTQ0LCAgICAgMCwgICAxNDUsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAzMCwgICAgNTksCisgICAgNTksICAgMTQ2LCAgICA3NiwgICAgNzYsICAgICAwLCAgIDE0NywgICAgIDAsICAgMTQ2LCAgICA4MSwgICAxNDcsCisgICAgIDAsICAgICAwLCAgIDE0OCwgICAgIDAsICAgMTQ4LCAgICA1OSwgICAgIDMsICAgIDc2LCAgICAgMCwgICAxNDgsCisgICAgNTksICAgICAzLCAgICA4MSwgICAxMDEsICAgIDc2LCAgICAgMCwgICAxNDgsICAgIDU5LCAgIDEwMCwgICAgNzYsCisgICAgIDAsICAgIDk3LCAgICAgMCwgICAgIDUsICAgICAwLCAgICAgNiwgICAgIDAsICAgICA3LCAgICAgMCwgICAxMDcsCisgICAgIDAsICAgICAwLCAgICA4MiwgICAxNTAsICAgMTUxLCAgICA3OCwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsCisgICAxNTIsICAgMTcyLCAgICAgMCwgICAxNTMsICAgICAwLCAgIDE1MiwgICAgODEsICAgMTUzLCAgICAgMCwgICAxMDcsCisgICAgIDAsICAgICAwLCAgICA4MiwgICAxNTQsICAgMTUxLCAgICA3OCwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsCisgICAgOTcsICAgIDM4LCAgIDE1NSwgICAxNTMsICAgICAwLCAgICAgMCwgICAgNTgsICAgIDk3LCAgICAzNiwgICAxNTYsCisgICAxNTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYzLCAgIDE1OCwgICAxMTcsICAgMTU5LCAgIDE5NSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgIDE2NiwgICAxNjEsICAgMTE3LCAgIDE2MiwgICAxOTUsICAgICAwLCAgIDE2NCwgICAgIDAsCisgICAxNjYsICAgICAwLCAgICA1OSwgICAxNjQsICAgIDc2LCAgICAgMCwgICAxNjQsICAgIDU5LCAgIDIzMCwgICAgIDAsCisgICAxNjQsICAgIDYwLCAgICA5OSwgICAgODMsICAgICAwLCAgIDE2NCwgICAgNjAsICAgIDgzLCAgICAgMCwgICAgNTAsCisgICAxODQsICAgMTY0LCAgICAgMCwgICAxNDQsICAgMTI0LCAgIDE2NCwgICAgIDAsICAgICA0LCAgICAgMCwgICAgNzIsCisgICAgIDAsICAgMTY1LCAgICA1OSwgICAyMzAsICAgICAwLCAgIDE2NSwgICAgNjAsICAgIDk5LCAgICA4MywgICAgIDAsCisgICAxNjUsICAgIDYwLCAgICA4MywgICAgIDAsICAgIDUwLCAgIDE4NCwgICAxNjUsICAgICAwLCAgIDE0NCwgICAxMjQsCisgICAxNjUsICAgICAwLCAgICAgNCwgICAgIDAsICAgMTY2LCAgICA1OSwgICAyMzAsICAgICAwLCAgICA1OSwgICAxNjYsCisgICAgNzYsICAgICAwLCAgICA1MCwgICAxODQsICAgMTY2LCAgICAgMCwgICAxNjYsICAgIDYwLCAgICA5OSwgICAgODMsCisgICAgIDAsICAgMTY2LCAgICA2MCwgICAgODMsICAgICAwLCAgIDE0NCwgICAxMjQsICAgMTY2LCAgICAgMCwgICAgIDMsCisgICAgIDAsICAgICAwLCAgICAxMywgICAgOTcsICAgIDgyLCAgIDE2OCwgICAxNzQsICAgIDc4LCAgIDE0MywgICAgIDAsCisgICAgMTMsICAgIDgyLCAgIDE3NCwgICAgNzgsICAgMTQzLCAgICAgMCwgICAgMTMsICAgIDk3LCAgICAgMCwgICAgIDAsCisgICAgMTQsICAgIDk3LCAgICA4MiwgICAxNjksICAgMTc0LCAgICA3OCwgICAxNDMsICAgICAwLCAgICAxNCwgICAgODIsCisgICAxNzQsICAgIDc4LCAgIDE0MywgICAgIDAsICAgIDE0LCAgICA5NywgICAgIDAsICAgICAwLCAgICAxMiwgICAgOTcsCisgICAgODIsICAgMTcwLCAgIDE3OSwgICAxNzMsICAgIDc4LCAgIDE0MywgICAgIDAsICAgICAwLCAgICAxMiwgICAgODIsCisgICAxNzEsICAgMTc5LCAgIDE3MywgICAgNzgsICAgMTQzLCAgICAgMCwgICAgMTIsICAgIDk3LCAgICAgMCwgICAgIDAsCisgICAgODEsICAgICAwLCAgICAgMCwgICAgODEsICAgICAwLCAgIDE3NSwgICAgIDAsICAgMTc1LCAgIDE3NiwgICAgIDAsCisgICAgIDAsICAgMTc1LCAgIDE3NiwgICAgNzcsICAgICAwLCAgIDE3NSwgICAgNzcsICAgICAwLCAgICA2NSwgICAgNTksCisgICAgNjcsICAgIDc2LCAgICAgMCwgICAxMzIsICAgMTIzLCAgIDE3NywgICAgIDAsICAgMTMyLCAgICAgMCwgICAxODMsCisgICAxMjMsICAgMTc3LCAgICAgMCwgICAxODMsICAgICAwLCAgICAgMSwgICAgIDAsICAgMjM1LCAgIDE3NiwgICAgIDAsCisgICAxNzgsICAgICAwLCAgIDE3NywgICAgODEsICAgMTc4LCAgICAgMCwgICAyMDAsICAgMjAxLCAgIDE2MywgICAxNDMsCisgICAgIDAsICAgMjAwLCAgIDIwMSwgICAxNjMsICAgIDM4LCAgIDEwNywgICAxNDMsICAgICAwLCAgIDIwMCwgICAyMDEsCisgICAgMzgsICAgMTA3LCAgIDE0MywgICAgIDAsICAgMTgwLCAgICAgMCwgICAxNzksICAgIDgxLCAgIDE4MCwgICAgIDAsCisgICAgIDEsICAgICAwLCAgICA5NywgICAgIDAsICAgIDk3LCAgICAzNiwgICAxMDcsICAgICAwLCAgIDEzMiwgICAxODIsCisgICAgIDAsICAgMTgzLCAgIDE4MiwgICAgIDAsICAgICAwLCAgIDE4NSwgICAgIDAsICAgICA3LCAgICAgMCwgICAxODMsCisgICAgIDcsICAgICAwLCAgICAgMCwgICAxODQsICAgICA3LCAgICAgMCwgICAgNTksICAgMTg1LCAgICA3NiwgICAgIDAsCisgICAgNTAsICAgMTg0LCAgIDE4NSwgICAgIDAsICAgIDUwLCAgIDE4NCwgICAgIDAsICAgMTg1LCAgICA1OSwgICAyMjMsCisgICAgIDAsICAgMTg1LCAgICA2MCwgICAgOTksICAgIDgzLCAgICAgMCwgICAxODUsICAgIDYwLCAgICA4MywgICAgIDAsCisgICAgNTksICAgMjIzLCAgICAgMCwgICAgNjAsICAgIDk5LCAgICA4MywgICAgIDAsICAgIDYwLCAgICA4MywgICAgIDAsCisgICAxODcsICAgICAwLCAgIDIwMywgICAgIDAsICAgMTg3LCAgIDIwMywgICAgIDAsICAgMTg3LCAgIDE4OSwgICAgIDAsCisgICAgIDAsICAgMTg2LCAgICAgMCwgICAgIDEsICAgIDc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAgIDAsCisgICAxOTMsICAgICAwLCAgIDE5MiwgICAxOTMsICAgICAwLCAgICAzMiwgICAyMzQsICAgIDc3LCAgICAgMCwgICAxOTUsCisgICAgIDAsICAgICAxLCAgIDE5NSwgICAgIDAsICAgIDgyLCAgICA3OCwgICAgIDAsICAgIDgyLCAgIDE5MCwgICAxOTEsCisgICAxMjIsICAgMTg4LCAgICA3OCwgICAgIDAsICAgIDgyLCAgIDE5MCwgICAxOTEsICAgICAxLCAgICA3OCwgICAgIDAsCisgICAgODIsICAgMTkwLCAgIDE5MSwgICAxODYsICAgIDc4LCAgICAgMCwgICAxOTcsICAgMjAyLCAgICAgMCwgICAxOTcsCisgICAgIDEsICAgICAwLCAgICAxNSwgICAgNTksICAgIDk5LCAgICA3NiwgICAgIDAsICAgICAwLCAgICAxOCwgICAxOTksCisgICAyMDIsICAgIDE3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIwMCwgICAyMDEsICAgMjA1LCAgICAgMCwgICAyMDAsCisgICAyMDEsICAgMjE2LCAgIDIwMiwgICAgIDAsICAgMjAwLCAgIDIwMSwgICAyMDQsICAgICAwLCAgIDIwNSwgICAgIDAsCisgICAyMTYsICAgICAwLCAgIDE5NSwgICAgIDAsICAgMjEzLCAgICAgMCwgICAgOTksICAgIDc3LCAgICAgMCwgICAgIDAsCisgICAxOTYsICAgIDE2LCAgIDIwNiwgICAyMDIsICAgICAwLCAgIDE5NiwgICAgIDAsICAgMTk2LCAgICAxNiwgICAgIDEsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTcsICAgMjA3LCAgICA1OSwgICAgOTksICAgIDc2LCAgIDIwOCwgICAyMDIsCisgICAgIDAsICAgMTk4LCAgICA1OSwgICAgOTksICAgIDc2LCAgICA3NywgICAgIDAsICAgMTk4LCAgICAgMSwgICAgIDAsCisgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTksICAgIDU5LCAgIDIxOCwgICAgNzcsICAgMjA5LCAgIDIxOCwgICAgNzcsCisgICAyMTAsICAgMjE4LCAgICA3NiwgICAyMTEsICAgMjAyLCAgICAgMCwgICAgIDAsICAgIDIwLCAgICA1OSwgICAgOTksCisgICAgNzYsICAgMjEyLCAgIDIwMiwgICAgIDAsICAgIDIzLCAgICA3NywgICAgIDAsICAgIDI0LCAgICA3NywgICAgIDAsCisgICAgMjUsICAgIDc3LCAgICAgMCwgICAgMjUsICAgIDk5LCAgICA3NywgICAgIDAsICAgIDI3LCAgIDIxNywgICAgNTksCisgICAgOTksICAgIDc2LCAgICA3NywgICAgIDAsICAgIDI3LCAgIDIxNywgICAgNTksICAgIDk5LCAgICAzOCwgICAyMTksCisgICAgNzYsICAgIDc3LCAgICAgMCwgICAgMjcsICAgMjE3LCAgICA1OSwgICAgOTksICAgIDM4LCAgIDIxOSwgICAgMzgsCisgICAyMTksICAgIDc2LCAgICA3NywgICAgIDAsICAgIDI3LCAgIDIxNywgICAgNTksICAgIDk5LCAgICAzOCwgICAyMTksCisgICAgMzgsICAgMjE5LCAgICAzOCwgICAyMjIsICAgIDc2LCAgICA3NywgICAgIDAsICAgIDI2LCAgICA5NywgICAgNzcsCisgICAgIDAsICAgIDI2LCAgICA1MCwgICAgOTksICAgIDc3LCAgICAgMCwgICAgNzcsICAgICAwLCAgIDIxNCwgICAgIDAsCisgICAgIDAsICAgIDE5LCAgICA1OSwgICAxMTMsICAgIDc2LCAgIDIxNSwgICAyMDIsICAgICAwLCAgICAyMSwgICAxMDcsCisgICAgMzgsICAgICAwLCAgICAyMSwgICAxMDcsICAgIDEwLCAgIDEwNywgICAgMzgsICAgICAwLCAgICAyMiwgICAgMzgsCisgICAgIDAsICAgIDk3LCAgICAzOCwgICAgIDAsICAgICAwLCAgICAgNywgICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAsCisgICAgIDAsICAgMjIwLCAgICAgMCwgICAyMjEsICAgICAwLCAgIDIyMCwgICAgODEsICAgMjIxLCAgICAgMCwgICAgIDksCisgICAgNTksICAgIDk5LCAgICA3NiwgICAgIDAsICAgMTE1LCAgICAgMCwgICAyMjIsICAgIDgxLCAgIDExNSwgICAgIDAsCisgICAgIDAsICAgMjI0LCAgIDIyNSwgICAgIDAsICAgMjI3LCAgICA3NiwgICAgIDAsICAgICAwLCAgIDIyOCwgICAgNzcsCisgICAyMjYsICAgMjI1LCAgICAgMCwgICAgIDEsICAgIDc2LCAgICAgMCwgICAgIDAsICAgIDEwLCAgICAgMCwgICAyMjgsCisgICAgIDAsICAgMjI4LCAgICA4MSwgICAgMTAsICAgICAwLCAgIDIyOSwgICAgIDAsICAgMjI4LCAgICA4MSwgICAyMjksCisgICAgIDAsICAgMTI2LCAgIDEyMywgICAxNjUsICAgMTQzLCAgICAgMCwgICAxMjYsICAgMTIzLCAgIDE2NiwgICAxNDMsCisgICAgIDAsICAgMTI2LCAgIDEyMywgICAxODIsICAgMTQzLCAgICAgMCwgICAxMzAsICAgMTIzLCAgIDE2NiwgICAxNDMsCisgICAgIDAsICAgMTMwLCAgIDEyMywgICAxODIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgMjMxLCAgIDIzMiwgICAgIDAsCisgICAyMjUsICAgICAwLCAgIDIzMywgICAgNzYsICAgICAwLCAgICAgMywgICAgIDAsICAgMjMzLCAgICA4MSwgICAgIDMsCisgICAgIDAsICAgIDk3LCAgICAgMCwgICAyMzQsICAgIDgxLCAgICA5NywgICAgIDAsICAgIDMxLCAgICAgMCwgICAyNDAsCisgICAgIDAsICAgMjM4LCAgICAgMCwgICAyMzksICAgICAwLCAgIDI1MCwgICAgIDAsICAgMjYwLCAgICAgMCwgICAgNjMsCisgICAgIDAsICAgIDk3LCAgICAgMCwgICAyMzcsICAgIDgxLCAgICA5NywgICAgIDAsICAgIDczLCAgIDIzNywgICAgNzcsCisgICAgIDAsICAgIDc0LCAgICA5NywgICAgOTcsICAgIDc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2MSwgICAgOTcsCisgICAyNTIsICAgIDgyLCAgIDI0MSwgICAyNTQsICAgIDc4LCAgIDI0MiwgICAyNjcsICAgIDYzLCAgICAgMCwgICAgIDAsCisgICAgNjEsICAgIDk3LCAgIDI1MiwgICAyNDMsICAgMjY3LCAgICA2MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjEsCisgICAgOTcsICAgIDM4LCAgICA5NywgICAyNTIsICAgIDgyLCAgIDI0NCwgICAyNTQsICAgIDc4LCAgIDI0NSwgICAyNjcsCisgICAgNjMsICAgICAwLCAgICAgMCwgICAgNjEsICAgIDk3LCAgICAzOCwgICAgOTcsICAgMjUyLCAgIDI0NiwgICAyNjcsCisgICAgNjMsICAgICAwLCAgICAgMCwgICAgNjIsICAgIDk3LCAgICA4MiwgICAyNDcsICAgMjU0LCAgICA3OCwgICAgIDAsCisgICAgNjIsICAgIDk3LCAgICAgMCwgICAgIDAsICAgIDYyLCAgICA5NywgICAgMzgsICAgIDk3LCAgICA4MiwgICAyNDgsCisgICAyNTQsICAgIDc4LCAgICAgMCwgICAgNjIsICAgIDk3LCAgICAzOCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgNjEsCisgICAgOTcsICAgIDU5LCAgICA5NywgICAgNzYsICAgMjUyLCAgIDI0OSwgICAyNjcsICAgIDYzLCAgICAgMCwgICAgNjIsCisgICAgOTcsICAgIDU5LCAgICA5NywgICAgNzYsICAgICAwLCAgICAgMCwgICAgNzEsICAgIDk3LCAgIDI1MiwgICAyNTEsCisgICAyNjcsICAgIDYzLCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAgMCwgICAgNDUsICAgMjM3LCAgICA0NSwgICAgIDAsCisgICAyNTQsICAgMjU1LCAgIDI1NiwgICAgIDAsICAgMjU2LCAgICAgMCwgICAgNjksICAgICAwLCAgICA3MCwgICAgIDAsCisgICAgNjgsICAgICAwLCAgICAgMCwgICAyNTYsICAgMjU3LCAgICA3NywgICAgIDAsICAgMjU2LCAgICA3NywgICAgIDAsCisgICAxMzIsICAgMTIzLCAgIDI1OCwgICAgIDAsICAgMTgzLCAgIDEyMywgICAyNTgsICAgICAwLCAgICAgMSwgICAgIDAsCisgICAgIDAsICAgMjU5LCAgICAgMCwgICAyNTgsICAgIDgxLCAgIDI1OSwgICAgIDAsICAgMTYzLCAgICAgMCwgICAxNjMsCisgICAgMzgsICAgMTA3LCAgICAgMCwgICAgMzgsICAgMTA3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDgsCisgICAyNjEsICAgMjc3LCAgIDI2MiwgICAyNzgsICAgMjYzLCAgIDE5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgNDksICAgMjY0LCAgIDI3NywgICAyNjUsICAgMjc4LCAgIDI2NiwgICAxOTQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAyNjgsICAgMjY5LCAgICAgMCwgICAyNzIsICAgICAwLCAgICA4OSwgICAgIDAsICAgMjY5LCAgIDI3MiwgICAgIDAsCisgICAgIDAsICAgMjY5LCAgIDI3MCwgICAgODksICAgICAwLCAgICA3NywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsCisgICAgIDAsICAgIDQ4LCAgIDI3MywgICAyNzcsICAgMjc0LCAgIDI3MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDksCisgICAyNzUsICAgMjc3LCAgIDI3NiwgICAyNzEsICAgICAwLCAgICA1OSwgICAxODEsICAgIDc2LCAgIDI4NiwgICAgIDAsCisgICAyODYsICAgICAwLCAgICA1OSwgICAxODEsICAgIDc2LCAgIDI4NywgICAyODQsICAgICAwLCAgIDI4NywgICAyODQsCisgICAgIDAsICAgICAwLCAgICA3NywgICAyNzksICAgICAwLCAgICAgMCwgICAyODAsICAgICAwLCAgIDI4MSwgICAgIDAsCisgICAxODksICAgICAwLCAgIDI4MCwgICAyODEsICAgICAwLCAgIDI4MSwgICAxODksICAgICAwLCAgIDEyNiwgICAxMjMsCisgICAyODIsICAgIDc3LCAgICAgMCwgICAxMjYsICAgIDc3LCAgICAgMCwgICAxMzAsICAgIDc3LCAgICAgMCwgICAyODMsCisgICAgIDAsICAgMjgyLCAgICA4MSwgICAyODMsICAgICAwLCAgIDE2NSwgICAxNDMsICAgICAwLCAgIDE2NiwgICAxNDMsCisgICAgIDAsICAgMTgyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICA4MSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgODEsCisgICAyODUsICAgMjI3LCAgICAgMCwgICAyODgsICAgICAwLCAgIDI5MCwgICAgIDAsICAgMjg3LCAgIDI5MCwgICAgIDAsCisgICAgIDMsICAgICAwLCAgICAgNCwgICAgIDAsICAgIDcyLCAgICAgMCwgICAyODksICAgICAwLCAgICAxMiwgICAgIDAsCisgICAgMTMsICAgICAwLCAgICAxNCwgICAgIDAsICAgIDE1LCAgICAgMCwgICAgMTYsICAgICAwLCAgICAxNywgICAgIDAsCisgICAgMTgsICAgICAwLCAgICAxOSwgICAgIDAsICAgIDIwLCAgICAgMCwgICAgMjEsICAgICAwLCAgICAyMiwgICAgIDAsCisgICAgMjMsICAgICAwLCAgICAyNCwgICAgIDAsICAgIDI1LCAgICAgMCwgICAgMjYsICAgICAwLCAgICAyNywgICAgIDAsCisgICAgMTEsICAgICAwLCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAgMCwgICAgIDYsICAgICAwLCAgICAgNywgICAgIDAsCisgICAyODgsICAgIDM4LCAgICA1OSwgICAxODEsICAgIDc2LCAgICA5NywgICAgIDAsICAgMjg4LCAgICAzOCwgICAgOTcsCisgICAgIDAsICAgIDM4LCAgICA1OSwgICAxODEsICAgIDc2LCAgICA5NywgICAgIDAsICAgIDM4LCAgICA5NywgICAgIDAsCisgICAyODgsICAgICAwLCAgIDI5MiwgICAgIDAsICAgMjk0LCAgICAgMCwgICAyOTIsICAgMjk0LCAgICAgMCwgICAxMDEsCisgICAgIDAsICAgMjg4LCAgICAzOCwgICAyOTMsICAgICAwLCAgICAzOCwgICAyOTMsICAgICAwLCAgICA5OSwgICAgIDAsCisgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDYwLCAgIDI5NywgICAyOTUsICAgMjk4LCAgIDI5MSwgICAgODMsCisgICAgIDAsICAgMjg4LCAgICAgMCwgICAzMDAsICAgICAwLCAgIDMwMSwgICAgIDAsICAgMzAwLCAgIDMwMSwgICAgIDAsCisgICAyODgsICAgIDM4LCAgICAgMCwgICAgMzgsICAgICAwLCAgICA2NCwgICAgNTksICAgMjk5LCAgICA3NiwgICAgIDAsCisgICAgNzEsICAgIDU5LCAgICA5NywgICAgNzYsICAgICAwLCAgICA2NiwgICAgNTksICAgMTgxLCAgICA3NiwgICAgIDAKK307CisKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlybGluZVtdID0geyAwLAorICAgMjM2LCAgIDI0MSwgICAyNTUsICAgMjU3LCAgIDI1NywgICAyNTgsICAgMjYwLCAgIDI2MiwgICAyNjMsICAgMjY0LAorICAgMjcyLCAgIDI3NiwgICAyODcsICAgMjkyLCAgIDI5NywgICAyOTksICAgMzAxLCAgIDMwMiwgICAzMDMsICAgMzA4LAorICAgMzE1LCAgIDMxNywgICAzMjIsICAgMzI3LCAgIDMzMywgICAzMzUsICAgMzQwLCAgIDM0NSwgICAzNTEsICAgMzUzLAorICAgMzU4LCAgIDM2NSwgICAzNjcsICAgMzY4LCAgIDM2OSwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLAorICAgMzgyLCAgIDM4NCwgICAzODgsICAgMzkyLCAgIDM5NSwgICAzOTgsICAgNDAxLCAgIDQwNSwgICA0MDcsICAgNDEwLAorICAgNDEzLCAgIDQxNywgICA0NDUsICAgNDUxLCAgIDQ1NCwgICA0NTcsICAgNDYwLCAgIDQ2MiwgICA0NjYsICAgNDcwLAorICAgNDc0LCAgIDQ3NiwgICA0NzksICAgNDgzLCAgIDUxMCwgICA1MTIsICAgNTE0LCAgIDUxNiwgICA1MTgsICAgNTIwLAorICAgNTIyLCAgIDUyNCwgICA1MjYsICAgNTI4LCAgIDUzMCwgICA1MzIsICAgNTM0LCAgIDUzNiwgICA1NDAsICAgNTQyLAorICAgNTQ2LCAgIDU0OCwgICA1NTEsICAgNTU1LCAgIDU1NywgICA1NjQsICAgNTY3LCAgIDU3MCwgICA1NzYsICAgNzM2LAorICAgNzM3LCAgIDczOSwgICA3NDUsICAgNzQ3LCAgIDc2MSwgICA3ODQsICAgNzg2LCAgIDc4OCwgICA4MDAsICAgODE0LAorICAgODE2LCAgIDgxOCwgICA4MjAsICAgODIyLCAgIDgyNCwgICA4MjYsICAgODMxLCAgIDgzMywgICA4MzksICAgODQxLAorICAgODQ1LCAgIDg0NywgICA4NDgsICAgODU4LCAgIDg2MywgICA4NjUsICAgODY2LCAgIDg2NywgICA4NzQsICAgODgwLAorICAgODg1LCAgIDg4OCwgICA4OTYsICAgOTAxLCAgIDkwMywgICA5MDQsICAgOTA1LCAgIDkxMiwgICA5MjMsICAgOTI3LAorICAgOTMzLCAgIDkzOCwgICA5NDMsICAgOTQ4LCAgIDk1MCwgICA5NTIsICAgOTYxLCAgIDk2NCwgICA5NjgsICAgOTcwLAorICAgOTcyLCAgIDk3NywgICA5ODEsICAgOTg0LCAgIDk4OCwgICA5OTEsICAgOTkzLCAgMTAwNSwgIDEwMDgsICAxMDEwLAorICAxMDEyLCAgMTAxNiwgIDEwMjAsICAxMDIyLCAgMTAyNSwgIDEwMzgsICAxMDQxLCAgMTA0NSwgIDEwNDcsICAxMDU1LAorICAxMDU2LCAgMTA1NywgIDEwNjEsICAxMDYzLCAgMTA2OCwgIDEwNzAsICAxMDcyLCAgMTA3OCwgIDEwNzksICAxMDgwLAorICAxMDgzLCAgMTA4NSwgIDEwODgsICAxMDkwLCAgMTA5MywgIDEwOTYsICAxMTAyLCAgMTEwOSwgIDExMTEsICAxMTE4LAorICAxMTI1LCAgMTEyOCwgIDExMzUsICAxMTM4LCAgMTE0MiwgIDExNDUsICAxMTQ5LCAgMTE1NCwgIDExNTcsICAxMTYxLAorICAxMTY0LCAgMTE2NiwgIDExNjgsICAxMTcwLCAgMTE3NywgIDExNzksICAxMTgwLCAgMTE4MSwgIDExODYsICAxMTg4LAorICAxMTkzLCAgMTIwMSwgIDEyMDYsICAxMjEwLCAgMTIxMywgIDEyMTUsICAxMjIwLCAgMTIyMywgIDEyMjUsICAxMjI3LAorICAxMjMxLCAgMTIzNCwgIDEyMzQsICAxMjM3LCAgMTIzOSwgIDEyNTAsICAxMjU4LCAgMTI2MiwgIDEyNzMsICAxMjgxLAorICAxMjg4LCAgMTI5MCwgIDEyOTUsICAxMjk4LCAgMTMwMywgIDEzMDUsICAxMzA3LCAgMTMxNCwgIDEzMTYsICAxMzE3LAorICAxMzI1LCAgMTMzMSwgIDEzMzMsICAxMzM1LCAgMTM0MiwgIDEzNDQsICAxMzUwLCAgMTM1NiwgIDEzNTgsICAxMzYwLAorICAxMzYyLCAgMTM2OSwgIDEzNzEsICAxMzc0LCAgMTM3OSwgIDEzODEsICAxMzg1LCAgMTM4NywgIDEzODksICAxMzkxLAorICAxMzk1LCAgMTM5NywgIDE0MDAsICAxNDAzLCAgMTQwNiwgIDE0MDksICAxNDEzLCAgMTQxNSwgIDE0MTgsICAxNDIwLAorICAxNDI0LCAgMTQyNywgIDE0MzIsICAxNDM0LCAgMTQzNiwgIDE0NDAsICAxNDY0LCAgMTQ3MSwgIDE0NzYsICAxNDgyLAorICAxNDg3LCAgMTQ4OSwgIDE0OTQsICAxNDk2LCAgMTUwMCwgIDE1MDQsICAxNTA4LCAgMTUxOCwgIDE1MjAsICAxNTI1LAorICAxNTMwLCAgMTUzMywgIDE1MzcsICAxNTQwLCAgMTU0NCwgIDE1NDcsICAxNTUwLCAgMTU1MywgIDE1NTcsICAxNTYwLAorICAxNTY0LCAgMTU2OCwgIDE1NzAsICAxNTcyLCAgMTU3NCwgIDE1NzYsICAxNTc4LCAgMTU4MCwgIDE1ODIsICAxNTkyLAorICAxNjAwLCAgMTYwMiwgIDE2MDQsICAxNjA4LCAgMTYxMCwgIDE2MTMsICAxNjE2LCAgMTYyOSwgIDE2MzEsICAxNjM2LAorICAxNjM4LCAgMTY0MSwgIDE2NTUsICAxNjU4LCAgMTY2MSwgIDE2NjMsICAxNjcxLCAgMTY3OSwgIDE2OTAsICAxNjk1LAorICAxNjk4LCAgMTcxMSwgIDE3MTksICAxNzIzLCAgMTcyNywgIDE3MzEsICAxNzM3LCAgMTc0MSwgIDE3NDYsICAxNzQ5LAorICAxNzU0LCAgMTc1NywgIDE3NTgsICAxNzc1LCAgMTc4MCwgIDE3ODMsICAxNzk1LCAgMTc5NywgIDE4MDcsICAxODE3LAorICAxODE4LCAgMTgyNiwgIDE4MjksICAxODQxLCAgMTg0NSwgIDE4NjIsICAxODcyLCAgMTg4MSwgIDE4ODYsICAxODkxLAorICAxODk2LCAgMTkwMCwgIDE5MDQsICAxOTE1LCAgMTkyMiwgIDE5MjksICAxOTM2LCAgMTk0NywgIDE5NTMsICAxOTU2LAorICAxOTYxLCAgMTk4NCwgIDIwMTgsICAyMDQzLCAgMjA3NCwgIDIwODksICAyMTAwLCAgMjEwNCwgIDIxMDgsICAyMTExLAorICAyMTE2LCAgMjExOCwgIDIxMjEsICAyMTIzLCAgMjEyNywgIDIxMzIsICAyMTM1LCAgMjE0MSwgIDIxNDYsICAyMTUxLAorICAyMTUzLCAgMjE2MiwgIDIxNjMsICAyMTY5LCAgMjE3MSwgIDIxODEsICAyMTgzLCAgMjE4NywgIDIxOTAsICAyMTk2LAorICAyMjA2LCAgMjIxNSwgIDIyMjQsICAyMjM0LCAgMjI0OCwgIDIyNTMsICAyMjU4LCAgMjI2MCwgIDIyNjksICAyMjcyLAorICAyMjc3LCAgMjI4MCwgIDIyODQsICAyMjkyLCAgMjI5NCwgIDIyOTUsICAyMjk2LCAgMjI5NywgIDIyOTgsICAyMzEyLAorICAyMzE1LCAgMjMxOSwgIDIzMjUsICAyMzMxLCAgMjMzOCwgIDIzNDMsICAyMzQ5LCAgMjM1NiwgIDIzNjIsICAyMzY4LAorICAyMzczLCAgMjM3OSwgIDIzODYsICAyMzkyLCAgMjM5OCwgIDI0MDQsICAyNDEyLCAgMjQxOCwgIDI0MjQsICAyNDMyLAorICAyNDM5LCAgMjQ0NSwgIDI0NTQsICAyNDYxLCAgMjQ2OSwgIDI0NzQsICAyNDc3LCAgMjQ4NywgIDI0ODksICAyNDkyLAorICAyNDk0LCAgMjQ5NSwgIDI0OTgsICAyNTAzLCAgMjUwNCwgIDI1MjEsICAyNTI4LCAgMjUzNCwgIDI1MzgsICAyNTQxLAorICAyNTQyLCAgMjU0NSwgIDI1NTMsICAyNTU5LCAgMjU2OCwgIDI1NzgsICAyNTg1LCAgMjU4OSwgIDI1OTQsICAyNjAzLAorICAyNjEwLCAgMjYxNCwgIDI2MjQsICAyNjI2LCAgMjYyNywgIDI2MjksICAyNjMxLCAgMjYzMiwgIDI2MzMsICAyNjM0LAorICAyNjM2LCAgMjYzOCwgIDI2NDEsICAyNjQ3LCAgMjY1MiwgIDI2NTIsICAyNjU3LCAgMjY2MSwgIDI2NjMsICAyNjY5LAorICAyNjc0LCAgMjY3OSwgIDI2ODgsICAyNjkwLCAgMjY5NiwgIDI2OTgsICAyNzAxLCAgMjcwMywgIDI3MDQsICAyNzA1LAorICAyNzA4LCAgMjcxNCwgIDI3MTYsICAyNzIwLCAgMjcyMywgIDI3MzAsICAyNzM2LCAgMjc0MSwgIDI3NDgsICAyNzUzLAorICAyNzU4LCAgMjc2MywgIDI3NzAsICAyNzc0LCAgMjc3NywgIDI3ODMsICAyNzg1LCAgMjc4NiwgIDI3ODcsICAyNzkwLAorICAyNzkyLCAgMjc5MywgIDI3OTQsICAyNzk1LCAgMjc5NiwgIDI3OTcsICAyNzk4LCAgMjc5OSwgIDI4MDAsICAyODAxLAorICAyODAyLCAgMjgwMywgIDI4MDQsICAyODA1LCAgMjgwNiwgIDI4MDcsICAyODA4LCAgMjgwOSwgIDI4MTAsICAyODEwLAorICAyODEzLCAgMjgxOSwgIDI4MjQsICAyODI5LCAgMjgzNSwgIDI4MzcsICAyODQwLCAgMjg0MiwgIDI4NDksICAyODYxLAorICAyODY2LCAgMjg3MiwgIDI4NzQsICAyODgwLCAgMjg4NCwgIDI4ODUsICAyODkxLCAgMjg5MywgIDI4OTYsICAyODk4LAorICAyOTA0LCAgMjkwOSwgIDI5MTUsICAyOTIyLCAgMjkzMQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB5eXRuYW1lW10gPSB7ICAgIiQiLCJlcnJvciIsIiR1bmRlZmluZWQuIiwiSURFTlRJRklFUiIsCisiVFlQRU5BTUUiLCJTQ1NQRUMiLCJUWVBFU1BFQyIsIlRZUEVfUVVBTCIsIkNPTlNUQU5UIiwiU1RSSU5HIiwiRUxMSVBTSVMiLCJTSVpFT0YiLAorIkVOVU0iLCJTVFJVQ1QiLCJVTklPTiIsIklGIiwiRUxTRSIsIldISUxFIiwiRE8iLCJGT1IiLCJTV0lUQ0giLCJDQVNFIiwiREVGQVVMVCIsCisiQlJFQUsiLCJDT05USU5VRSIsIlJFVFVSTiIsIkdPVE8iLCJBU01fS0VZV09SRCIsIlRZUEVPRiIsIkFMSUdOT0YiLCJBVFRSSUJVVEUiLAorIkVYVEVOU0lPTiIsIkxBQkVMIiwiUkVBTFBBUlQiLCJJTUFHUEFSVCIsIkFTU0lHTiIsIic9JyIsIic/JyIsIic6JyIsIk9ST1IiLAorIkFOREFORCIsIid8JyIsIideJyIsIicmJyIsIkVRQ09NUEFSRSIsIkFSSVRIQ09NUEFSRSIsIkxTSElGVCIsIlJTSElGVCIsIicrJyIsCisiJy0nIiwiJyonIiwiJy8nIiwiJyUnIiwiVU5BUlkiLCJQTFVTUExVUyIsIk1JTlVTTUlOVVMiLCJIWVBFUlVOQVJZIiwiUE9JTlRTQVQiLAorIicuJyIsIicoJyIsIidbJyIsIklOVEVSRkFDRSIsIklNUExFTUVOVEFUSU9OIiwiRU5EIiwiU0VMRUNUT1IiLCJERUZTIiwiRU5DT0RFIiwKKyJDTEFTU05BTUUiLCJQVUJMSUMiLCJQUklWQVRFIiwiUFJPVEVDVEVEIiwiUFJPVE9DT0wiLCJPQkpFQ1ROQU1FIiwiQ0xBU1MiLCJBTElBUyIsCisiT0JKQ19TVFJJTkciLCInKSciLCInOyciLCInfSciLCInficiLCInISciLCInLCciLCIneyciLCInXSciLCJwcm9ncmFtIiwiZXh0ZGVmcyIsCisiQDEiLCJAMiIsImV4dGRlZiIsImRhdGFkZWYiLCJmbmRlZiIsIkAzIiwiQDQiLCJANSIsIkA2IiwiQDciLCJAOCIsImlkZW50aWZpZXIiLAorInVub3AiLCJleHByIiwiZXhwcmxpc3QiLCJub25udWxsX2V4cHJsaXN0IiwidW5hcnlfZXhwciIsInNpemVvZiIsImFsaWdub2YiLAorImNhc3RfZXhwciIsIkA5IiwiZXhwcl9ub19jb21tYXMiLCJAMTAiLCJAMTEiLCJAMTIiLCJAMTMiLCJAMTQiLCJwcmltYXJ5IiwiQDE1IiwKKyJzdHJpbmciLCJvYmpjX3N0cmluZyIsIm9sZF9zdHlsZV9wYXJtX2RlY2xzIiwibGluZW5vX2RhdGFkZWNsIiwiZGF0YWRlY2xzIiwKKyJkYXRhZGVjbCIsImxpbmVub19kZWNsIiwiZGVjbHMiLCJzZXRzcGVjcyIsInNldGF0dHJzIiwiZGVjbCIsInR5cGVkX2RlY2xzcGVjcyIsCisicmVzZXJ2ZWRfZGVjbHNwZWNzIiwidHlwZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyIiwicmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyIiwKKyJkZWNsbW9kcyIsImRlY2xtb2RzX25vX3ByZWZpeF9hdHRyIiwidHlwZWRfdHlwZXNwZWNzIiwicmVzZXJ2ZWRfdHlwZXNwZWNxdWFscyIsCisidHlwZXNwZWMiLCJ0eXBlc3BlY3F1YWxfcmVzZXJ2ZWQiLCJpbml0ZGVjbHMiLCJub3R5cGVfaW5pdGRlY2xzIiwibWF5YmVhc20iLAorImluaXRkY2wiLCJAMTYiLCJub3R5cGVfaW5pdGRjbCIsIkAxNyIsIm1heWJlX2F0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGUiLAorImF0dHJpYnV0ZV9saXN0IiwiYXR0cmliIiwiYW55X3dvcmQiLCJpbml0IiwiQDE4IiwiaW5pdGxpc3RfbWF5YmVfY29tbWEiLCJpbml0bGlzdDEiLAorImluaXRlbHQiLCJAMTkiLCJAMjAiLCJAMjEiLCJuZXN0ZWRfZnVuY3Rpb24iLCJAMjIiLCJAMjMiLCJub3R5cGVfbmVzdGVkX2Z1bmN0aW9uIiwKKyJAMjQiLCJAMjUiLCJkZWNsYXJhdG9yIiwiYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yIiwicGFybV9kZWNsYXJhdG9yIiwibm90eXBlX2RlY2xhcmF0b3IiLAorInN0cnVjdHNwIiwiQDI2IiwiQDI3IiwiQDI4IiwiQDI5IiwibWF5YmVjb21tYSIsIm1heWJlY29tbWFfd2FybiIsImNvbXBvbmVudF9kZWNsX2xpc3QiLAorImNvbXBvbmVudF9kZWNsX2xpc3QyIiwiY29tcG9uZW50X2RlY2wiLCJjb21wb25lbnRzIiwiY29tcG9uZW50X2RlY2xhcmF0b3IiLAorImVudW1saXN0IiwiZW51bWVyYXRvciIsInR5cGVuYW1lIiwiYWJzZGNsIiwibm9uZW1wdHlfdHlwZV9xdWFscyIsInR5cGVfcXVhbHMiLAorImFic2RjbDEiLCJzdG10cyIsImxpbmVub19zdG10X29yX2xhYmVscyIsInhzdG10cyIsImVycnN0bXQiLCJwdXNobGV2ZWwiLCJtYXliZV9sYWJlbF9kZWNscyIsCisibGFiZWxfZGVjbHMiLCJsYWJlbF9kZWNsIiwiY29tcHN0bXRfb3JfZXJyb3IiLCJjb21wc3RtdCIsInNpbXBsZV9pZiIsImlmX3ByZWZpeCIsCisiZG9fc3RtdF9zdGFydCIsIkAzMCIsInNhdmVfZmlsZW5hbWUiLCJzYXZlX2xpbmVubyIsImxpbmVub19sYWJlbGVkX3N0bXQiLCJsaW5lbm9fc3RtdF9vcl9sYWJlbCIsCisic3RtdF9vcl9sYWJlbCIsInN0bXQiLCJAMzEiLCJAMzIiLCJAMzMiLCJAMzQiLCJAMzUiLCJAMzYiLCJAMzciLCJhbGxfaXRlcl9zdG10IiwKKyJhbGxfaXRlcl9zdG10X3NpbXBsZSIsIkAzOCIsImxhYmVsIiwibWF5YmVfdHlwZV9xdWFsIiwieGV4cHIiLCJhc21fb3BlcmFuZHMiLAorIm5vbm51bGxfYXNtX29wZXJhbmRzIiwiYXNtX29wZXJhbmQiLCJhc21fY2xvYmJlcnMiLCJwYXJtbGlzdCIsIkAzOSIsInBhcm1saXN0XzEiLAorIkA0MCIsInBhcm1saXN0XzIiLCJwYXJtcyIsInBhcm0iLCJwYXJtbGlzdF9vcl9pZGVudGlmaWVycyIsIkA0MSIsInBhcm1saXN0X29yX2lkZW50aWZpZXJzXzEiLAorImlkZW50aWZpZXJzIiwiaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzIiwiZXh0ZW5zaW9uIiwib2JqY2RlZiIsImlkZW50aWZpZXJfbGlzdCIsCisiY2xhc3NkZWNsIiwiYWxpYXNkZWNsIiwiY2xhc3NkZWYiLCJANDIiLCJANDMiLCJANDQiLCJANDUiLCJANDYiLCJANDciLCJANDgiLAorIkA0OSIsIkA1MCIsInByb3RvY29sZGVmIiwiQDUxIiwicHJvdG9jb2xyZWZzIiwibm9uX2VtcHR5X3Byb3RvY29scmVmcyIsIml2YXJfZGVjbF9saXN0IiwKKyJ2aXNpYmlsaXR5X3NwZWMiLCJpdmFyX2RlY2xzIiwiaXZhcl9kZWNsIiwiaXZhcnMiLCJpdmFyX2RlY2xhcmF0b3IiLCJtZXRob2RkZWYiLAorIkA1MiIsIkA1MyIsIkA1NCIsIkA1NSIsIkA1NiIsIkA1NyIsIm1ldGhvZHByb3RvbGlzdCIsIkA1OCIsIm1ldGhvZHByb3RvbGlzdDIiLAorIkA1OSIsInNlbWlfb3JfZXJyb3IiLCJtZXRob2Rwcm90byIsIkA2MCIsIkA2MSIsIkA2MiIsIkA2MyIsIm1ldGhvZGRlY2wiLCJvcHRhcmdsaXN0IiwKKyJteXhkZWNscyIsIm15ZGVjbHMiLCJteWRlY2wiLCJteXBhcm1zIiwibXlwYXJtIiwib3B0cGFybWxpc3QiLCJANjQiLCJ1bmFyeXNlbGVjdG9yIiwKKyJrZXl3b3Jkc2VsZWN0b3IiLCJzZWxlY3RvciIsInJlc2VydmVkd29yZHMiLCJrZXl3b3JkZGVjbCIsIm1lc3NhZ2VhcmdzIiwia2V5d29yZGFyZ2xpc3QiLAorImtleXdvcmRleHByIiwia2V5d29yZGFyZyIsInJlY2VpdmVyIiwib2JqY21lc3NhZ2VleHByIiwiQDY1IiwiQDY2Iiwic2VsZWN0b3JhcmciLAorImtleXdvcmRuYW1lbGlzdCIsImtleXdvcmRuYW1lIiwib2JqY3NlbGVjdG9yZXhwciIsIm9iamNwcm90b2NvbGV4cHIiLCJvYmpjZW5jb2RlZXhwciIsCisiIgorfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyMVtdID0geyAgICAgMCwKKyAgICA4NCwgICAgODQsICAgIDg2LCAgICA4NSwgICAgODcsICAgIDg1LCAgICA4OCwgICAgODgsICAgIDg4LCAgICA4OCwKKyAgICA4OCwgICAgODksICAgIDg5LCAgICA4OSwgICAgODksICAgIDg5LCAgICA4OSwgICAgODksICAgIDg5LCAgICA5MSwKKyAgICA5MiwgICAgOTAsICAgIDkwLCAgICA5MywgICAgOTQsICAgIDkwLCAgICA5MCwgICAgOTUsICAgIDk2LCAgICA5MCwKKyAgICA5MCwgICAgOTcsICAgIDk3LCAgICA5NywgICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKKyAgICA5OCwgICAgOTgsICAgIDk5LCAgIDEwMCwgICAxMDAsICAgMTAxLCAgIDEwMSwgICAxMDIsICAgMTAyLCAgIDEwMiwKKyAgIDEwMiwgICAxMDIsICAgMTAyLCAgIDEwMiwgICAxMDIsICAgMTAyLCAgIDEwMiwgICAxMDIsICAgMTAzLCAgIDEwNCwKKyAgIDEwNSwgICAxMDUsICAgMTA2LCAgIDEwNSwgICAxMDcsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwNywKKyAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwNywgICAxMDgsICAgMTA3LCAgIDEwOSwKKyAgIDEwNywgICAxMTAsICAgMTExLCAgIDEwNywgICAxMTIsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTEzLCAgIDExMywKKyAgIDExMywgICAxMTMsICAgMTEzLCAgIDExNCwgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywKKyAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExNSwgICAxMTUsICAgMTE2LCAgIDExNiwKKyAgIDExNywgICAxMTcsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDExOSwgICAxMTksICAgMTIwLCAgIDEyMCwKKyAgIDEyMCwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTI0LCAgIDEyNSwKKyAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNiwgICAxMjYsICAgMTI3LCAgIDEyNywKKyAgIDEyNywgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LCAgIDEyOSwgICAxMzAsICAgMTMwLCAgIDEzMCwKKyAgIDEzMCwgICAxMzEsICAgMTMxLCAgIDEzMSwgICAxMzEsICAgMTMyLCAgIDEzMiwgICAxMzMsICAgMTMzLCAgIDEzNCwKKyAgIDEzNCwgICAxMzQsICAgMTM0LCAgIDEzNCwgICAxMzQsICAgMTM0LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNSwKKyAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDE0MCwgICAxMzksICAgMTM5LCAgIDE0MiwKKyAgIDE0MSwgICAxNDEsICAgMTQzLCAgIDE0MywgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NywKKyAgIDE0NywgICAxNDcsICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OCwgICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgIDE0OSwgICAxNDksICAgMTUxLCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTUzLCAgIDE1MywKKyAgIDE1NSwgICAxNTMsICAgMTU2LCAgIDE1MywgICAxNTgsICAgMTU5LCAgIDE1NywgICAxNjEsICAgMTYyLCAgIDE2MCwKKyAgIDE2MywgICAxNjMsICAgMTY0LCAgIDE2NCwgICAxNjQsICAgMTY0LCAgIDE2NCwgICAxNjQsICAgMTY0LCAgIDE2NCwKKyAgIDE2NSwgICAxNjUsICAgMTY1LCAgIDE2NSwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsICAgMTY2LCAgIDE2NiwKKyAgIDE2NiwgICAxNjYsICAgMTY2LCAgIDE2OCwgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjksICAgMTY3LCAgIDE2NywKKyAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNjcsICAgMTY3LCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3MywKKyAgIDE3NCwgICAxNzQsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsICAgMTc2LCAgIDE3NiwKKyAgIDE3NiwgICAxNzYsICAgMTc3LCAgIDE3NywgICAxNzgsICAgMTc4LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE3OSwKKyAgIDE4MCwgICAxODAsICAgMTgxLCAgIDE4MSwgICAxODIsICAgMTgyLCAgIDE4MywgICAxODMsICAgMTg0LCAgIDE4NCwKKyAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NSwgICAxODUsICAgMTg1LCAgIDE4NiwKKyAgIDE4NywgICAxODcsICAgMTg3LCAgIDE4OCwgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkxLCAgIDE5MiwKKyAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NCwgICAxOTUsICAgMTk1LCAgIDE5NSwgICAxOTUsICAgMTk2LCAgIDE5NiwKKyAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAyMDEsICAgMjAyLCAgIDIwMiwgICAyMDMsICAgMjA0LCAgIDIwNCwKKyAgIDIwNSwgICAyMDUsICAgMjA1LCAgIDIwNiwgICAyMDUsICAgMjA1LCAgIDIwNSwgICAyMDcsICAgMjA4LCAgIDIwNSwKKyAgIDIwNSwgICAyMDUsICAgMjA5LCAgIDIxMCwgICAyMTEsICAgMjA1LCAgIDIxMiwgICAyMDUsICAgMjA1LCAgIDIwNSwKKyAgIDIwNSwgICAyMDUsICAgMjA1LCAgIDIwNSwgICAyMDUsICAgMjA1LCAgIDIwNSwgICAyMDUsICAgMjA1LCAgIDIxMywKKyAgIDIxNSwgICAyMTQsICAgMjE2LCAgIDIxNiwgICAyMTYsICAgMjE2LCAgIDIxNywgICAyMTcsICAgMjE4LCAgIDIxOCwKKyAgIDIxOSwgICAyMTksICAgMjIwLCAgIDIyMCwgICAyMjEsICAgMjIyLCAgIDIyMiwgICAyMjQsICAgMjIzLCAgIDIyNSwKKyAgIDIyNiwgICAyMjUsICAgMjI1LCAgIDIyNywgICAyMjcsICAgMjI3LCAgIDIyNywgICAyMjgsICAgMjI4LCAgIDIyOSwKKyAgIDIyOSwgICAyMjksICAgMjI5LCAgIDIyOSwgICAyMzEsICAgMjMwLCAgIDIzMiwgICAyMzIsICAgMjMzLCAgIDIzMywKKyAgIDIzNCwgICAyMzQsICAgMjM1LCAgIDIzNiwgICAyMzYsICAgMjM2LCAgIDIzNiwgICAyMzYsICAgMjM2LCAgIDIzNywKKyAgIDIzNywgICAyMzgsICAgMjM5LCAgIDI0MSwgICAyNDIsICAgMjQwLCAgIDI0MywgICAyNDAsICAgMjQ0LCAgIDI0NSwKKyAgIDI0MCwgICAyNDYsICAgMjQwLCAgIDI0NywgICAyNDAsICAgMjQwLCAgIDI0OCwgICAyNDAsICAgMjQwLCAgIDI0OSwKKyAgIDI0MCwgICAyNDAsICAgMjUxLCAgIDI1MCwgICAyNTIsICAgMjUyLCAgIDI1MywgICAyNTQsICAgMjU0LCAgIDI1NSwKKyAgIDI1NSwgICAyNTUsICAgMjU2LCAgIDI1NiwgICAyNTYsICAgMjU3LCAgIDI1NywgICAyNTcsICAgMjU4LCAgIDI1OCwKKyAgIDI1OCwgICAyNTksICAgMjU5LCAgIDI1OSwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjAsICAgMjY0LCAgIDI2NSwKKyAgIDI2NiwgICAyNjAsICAgMjY3LCAgIDI2OCwgICAyNjcsICAgMjY5LCAgIDI2OSwgICAyNjksICAgMjcwLCAgIDI2OSwKKyAgIDI3MSwgICAyNzEsICAgMjczLCAgIDI3NCwgICAyNzIsICAgMjc1LCAgIDI3NiwgICAyNzIsICAgMjc3LCAgIDI3NywKKyAgIDI3NywgICAyNzcsICAgMjc4LCAgIDI3OCwgICAyNzksICAgMjc5LCAgIDI4MCwgICAyODAsICAgMjgwLCAgIDI4MCwKKyAgIDI4MSwgICAyODEsICAgMjgxLCAgIDI4MiwgICAyODIsICAgMjgzLCAgIDI4MywgICAyODMsICAgMjg0LCAgIDI4NCwKKyAgIDI4NSwgICAyODQsICAgMjg2LCAgIDI4NywgICAyODcsICAgMjg4LCAgIDI4OCwgICAyODgsICAgMjg4LCAgIDI4OSwKKyAgIDI4OSwgICAyODksICAgMjg5LCAgIDI4OSwgICAyODksICAgMjg5LCAgIDI4OSwgICAyODksICAgMjg5LCAgIDI4OSwKKyAgIDI4OSwgICAyODksICAgMjg5LCAgIDI4OSwgICAyODksICAgMjg5LCAgIDI4OSwgICAyODksICAgMjg5LCAgIDI4OSwKKyAgIDI5MCwgICAyOTAsICAgMjkwLCAgIDI5MCwgICAyOTEsICAgMjkxLCAgIDI5MiwgICAyOTIsICAgMjkzLCAgIDI5NCwKKyAgIDI5NCwgICAyOTUsICAgMjk1LCAgIDI5NywgICAyOTgsICAgMjk2LCAgIDI5OSwgICAyOTksICAgMzAwLCAgIDMwMCwKKyAgIDMwMSwgICAzMDEsICAgMzAyLCAgIDMwMywgICAzMDQKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIyW10gPSB7ICAgICAwLAorICAgICAwLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA1LAorICAgICAyLCAgICAgMywgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAwLAorICAgICAwLCAgICAgNywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDcsICAgICA0LCAgICAgMCwgICAgIDAsICAgICA2LAorICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgNCwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMCwgICAgIDQsICAgICAwLAorICAgICA0LCAgICAgMCwgICAgIDAsICAgICA3LCAgICAgMCwgICAgIDUsICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMywgICAgIDMsICAgICAwLCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgMywgICAgIDMsICAgICAyLAorICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLAorICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICA0LAorICAgICAyLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICA0LCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDAsICAgICAyLAorICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAxLAorICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDQsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDQsICAgICAwLCAgICAgNiwgICAgIDMsICAgICAwLAorICAgICA2LCAgICAgMywgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDIsICAgICA2LCAgICAgMSwgICAgIDMsICAgICAwLAorICAgICAxLCAgICAgNCwgICAgIDYsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAorICAgICA0LCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMCwgICAgIDQsICAgICAxLAorICAgICAwLCAgICAgNCwgICAgIDAsICAgICA1LCAgICAgMCwgICAgIDAsICAgICA1LCAgICAgMCwgICAgIDAsICAgICA1LAorICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgNCwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLAorICAgICAzLCAgICAgNCwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICA0LAorICAgICAzLCAgICAgMywgICAgIDEsICAgICAwLCAgICAgNywgICAgIDUsICAgICAyLCAgICAgMCwgICAgIDcsICAgICA1LAorICAgICAyLCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAxLAorICAgICAxLCAgICAgMiwgICAgIDAsICAgICAzLCAgICAgMiwgICAgIDQsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAorICAgICAxLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAxLAorICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAyLAorICAgICAzLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLAorICAgICAxLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAxLAorICAgICAyLCAgICAgMywgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDYsICAgICA1LCAgICAgNSwgICAgIDIsICAgICAyLAorICAgICA0LCAgICAgMCwgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgMywgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDAsICAgICA3LAorICAgICA1LCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgICAwLCAgICAgNiwgICAgIDIsICAgICAyLAorICAgICAyLCAgICAgMywgICAgIDYsICAgICA4LCAgICAxMCwgICAgMTIsICAgICAzLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAwLCAgICAgNiwgICAgIDMsICAgICA1LCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAxLAorICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLAorICAgICAwLCAgICAgNCwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICA0LAorICAgICA0LCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAzLAorICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAzLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgMTAsICAgICAwLCAgICAgNiwgICAgIDAsICAgICAwLAorICAgIDEyLCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNiwgICAgIDIsICAgICAwLCAgICAgOCwgICAgIDQsICAgICAwLAorICAgICA5LCAgICAgNSwgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMSwgICAgIDAsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDAsICAgICAxLAorICAgICAzLCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNywgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgNywgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAzLAorICAgICAxLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDQsICAgICAxLAorICAgICA1LCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLAorICAgICA0LCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAyLAorICAgICAwLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICA2LCAgICAgMywgICAgIDUsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAzLAorICAgICAyLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDYsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAyLCAgICAgMSwgICAgIDQsICAgICA0LCAgICAgNAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmYWN0W10gPSB7ICAgICAzLAorICAgICA1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MiwgICAxNTMsICAgMTYwLCAgIDE1MiwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDQwMywgICAgIDAsICAgNDU1LCAgIDQ1OSwgICAgIDAsICAgICAwLAorICAgNDA5LCAgIDQzNSwgICAgIDAsICAgNDM1LCAgICAgMCwgICAgIDAsICAgIDE5LCAgICAgNCwgICAgIDgsICAgICA3LAorICAgICAwLCAgIDEyOCwgICAxMjgsICAgMTQ4LCAgIDEzOSwgICAxNDksICAgMTg1LCAgIDE2MSwgICAgIDAsICAgICA5LAorICAgNDA1LCAgIDQwNiwgICA0MDQsICAgNDA3LCAgIDE2NSwgICA0MDgsICAgICA2LCAgICAxNywgICAgMTgsICAgIDMyLAorICAgIDMzLCAgICAzNSwgICAgMzQsICAgMjU0LCAgIDI1NiwgICAyNjMsICAgMjQ3LCAgIDI2MywgICAyNTEsICAgICAwLAorICAgICAwLCAgICAgMCwgICA0MTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDM1LCAgIDQyNiwgICAxNjMsICAgNDM2LAorICAgNDM1LCAgIDE2NCwgICAgIDAsICAgICAwLCAgIDI0MywgICAyODksICAgICAwLCAgICAgMCwgICAxNzMsICAgMTI5LAorICAgICAwLCAgICAxNiwgICAgIDAsICAgIDE1LCAgICAgMCwgICAxNTAsICAgMTM5LCAgIDE1MSwgICAxNTUsICAgMTU0LAorICAgMTM3LCAgIDE4NiwgICAgMTEsICAgICAwLCAgIDI1MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNDQsICAgICAwLAorICAgMjQ4LCAgICA4OSwgICAgOTAsICAgMTA3LCAgICA1OSwgICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LAorICAgIDM4LCAgICAzNywgICAgIDAsICAgIDM5LCAgICA0MCwgICAgIDAsICAgNTQ0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTA5LCAgICA0MSwgICAgNDIsICAgICAwLCAgICAgMCwgICAgNDMsICAgIDYxLCAgICAgMCwgICAgIDAsICAgIDY1LAorICAgIDQ2LCAgICA0OCwgICAgOTEsICAgMTA2LCAgICAgMCwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMjg3LAorICAgICAwLCAgIDI4NSwgICAxNTgsICAgICAwLCAgIDI4NSwgICAxOTAsICAgNDM3LCAgICAgMCwgICA1MDYsICAgNTA3LAorICAgNTI5LCAgIDUzMCwgICA1MjYsICAgNTEwLCAgIDUxMSwgICA1MTIsICAgNTEzLCAgIDUxNCwgICA1MTUsICAgNTE2LAorICAgNTE3LCAgIDUxOCwgICA1MTksICAgNTIwLCAgIDUyMSwgICA1MjIsICAgNTIzLCAgIDUyNCwgICA1MjUsICAgNTI3LAorICAgNTI4LCAgICAgMCwgICAgIDAsICAgNTA4LCAgIDQ1NiwgICA0ODAsICAgNDk5LCAgIDUwMywgICA1MDksICAgNTA0LAorICAgNDYwLCAgICAgMCwgICAgIDAsICAgNDE3LCAgICAgMCwgICAgIDAsICAgNDI0LCAgIDQzMywgICA0MTIsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMTIsICAgICAwLCAgICAgMCwgICAgMzEsICAgICAwLCAgIDM5NSwgICAgIDAsICAgICAwLAorICAgMTgzLCAgIDIyOSwgICAyODksICAgICAwLCAgIDIzMCwgICAgIDAsICAgMTcxLCAgIDEyOSwgICAgIDAsICAgMjIxLAorICAgMjIyLCAgICAgMCwgICAgIDAsICAgMTM4LCAgIDE0MSwgICAxNjgsICAgMTY5LCAgIDE0MCwgICAxNDIsICAgMTcwLAorICAgMjgwLCAgIDI4MSwgICAyNTksICAgMjc4LCAgICAgMCwgICAgIDAsICAgMTgzLCAgIDI3MSwgICAyNjUsICAgMTI4LAorICAgMjYyLCAgIDEyOCwgICAgIDAsICAgMjYzLCAgIDE4MywgICAyNjMsICAgIDU3LCAgICA1OCwgICAgNTIsICAgIDQ5LAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNTEsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgNTMsICAgICAwLCAgICA1NSwgICAgIDAsICAgICAwLCAgICA4MiwgICAgODAsICAgIDc4LAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDAsICAgMTAxLCAgICAgMCwgICAgIDAsICAgIDQ0LCAgICAgMCwgICAxMDgsICAgMTEwLAorICAgIDUwLCAgIDE2NiwgICAyODksICAgMzc4LCAgICAgMCwgICAyODMsICAgMjg2LCAgIDE1NiwgICAxNjcsICAgMjg4LAorICAgMTU4LCAgIDI4NCwgICAxOTYsICAgMTk3LCAgIDE5OCwgICAxOTUsICAgICAwLCAgIDE4OCwgICAxOTEsICAgNDExLAorICAgICAwLCAgIDUzNCwgICAgIDAsICAgNDgzLCAgIDUwMSwgICA0ODIsICAgICAwLCAgIDUwNSwgICAgIDAsICAgNDgzLAorICAgNDM1LCAgICAgMCwgICA0MTQsICAgNDY0LCAgIDQyOSwgICAgIDAsICAgNDQzLCAgIDQ2NCwgICA0MTMsICAgMjkwLAorICAgMjM5LCAgIDIzOCwgICAxNzQsICAgMTc1LCAgIDI0MiwgICAgIDAsICAgMjM3LCAgICAgMCwgICAyNDEsICAgICAwLAorICAgICAwLCAgICAyOSwgICAgIDAsICAgMzI0LCAgIDExNiwgICAzMjUsICAgMTgyLCAgIDE4NCwgICAgIDAsICAgICAwLAorICAgIDE0LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAxODMsICAgMzk1LCAgICAgMCwgICAgMTMsICAgIDI3LAorICAgICAwLCAgICAgMCwgICAyNjAsICAgICAwLCAgIDI1OSwgICAgIDAsICAgMjQ2LCAgIDMyNCwgICAyNjQsICAgMzI0LAorICAgMjcyLCAgICAgMCwgICAyNTAsICAgICAwLCAgICA5MywgICAgOTIsICAgMzA3LCAgICAgMCwgICAgIDAsICAgNTQzLAorICAgNTQyLCAgIDU0NSwgICA1NTIsICAgNTQ3LCAgICAgMCwgICA1NDgsICAgNTQ5LCAgICAgMCwgICAgIDAsICAgIDEwLAorICAgIDQ3LCAgICAgMCwgICAgIDAsICAgIDg4LCAgICA4NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc2LAorICAgIDc3LCAgICA3NSwgICAgNzQsICAgIDczLCAgICA3MSwgICAgNzIsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgIDcwLCAgICA5OSwgICAgOTgsICAgICAwLCAgICA0NSwgICAgIDAsICAgMjkzLCAgICAgMCwgICAyOTcsICAgICAwLAorICAgMjk5LCAgICAgMCwgICAzNzgsICAgICAwLCAgIDE1OSwgICAxNTcsICAgICAwLCAgIDE5MCwgICAgNDQsICAgICAwLAorICAgICAwLCAgICAgMCwgICA0NTcsICAgNTAwLCAgIDM4NCwgICAgIDAsICAgNTMyLCAgIDQ2MSwgICA0MjIsICAgNDM1LAorICAgNDQzLCAgICAgMCwgICAgIDAsICAgNDI3LCAgIDQzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMzk5LCAgIDM4NSwgICAxMjgsICAgMTI4LCAgIDM5NywgICAgIDAsICAgMzg2LCAgIDM4OCwgICAzOTYsICAgICAwLAorICAgMjQwLCAgIDMwNiwgICAgIDAsICAgMTE4LCAgIDExMywgICAxMTcsICAgICAwLCAgIDE4MCwgICAyMjcsICAgMjIzLAorICAgMTcyLCAgIDIyOCwgICAgMjEsICAgMTc5LCAgIDIyNCwgICAyMjYsICAgICAwLCAgICAyNSwgICAyODIsICAgMjc5LAorICAgMTgzLCAgICAgMCwgICAyNjYsICAgMjY3LCAgIDI3MywgICAzMjUsICAgMjY5LCAgIDE4MywgICAxODMsICAgMzE1LAorICAgMzA4LCAgICA5NSwgICAgNjMsICAgIDYyLCAgICAgMCwgICA1NTEsICAgNTUzLCAgICAgMCwgICA1NTAsICAgNTU1LAorICAgNTU0LCAgICA1NCwgICAgNTYsICAgICAwLCAgICAgMCwgICAgODEsICAgIDc5LCAgICA5NiwgICAgOTcsICAgMjkyLAorICAgMjkxLCAgIDM3OSwgICAyOTgsICAgMjk0LCAgIDI5NiwgICAgIDAsICAgMTg3LCAgIDE4OSwgICAgODksICAgICAwLAorICAgICAwLCAgIDQ3OSwgICA0OTksICAgMTI4LCAgICAgMCwgICA0ODgsICAgNDg0LCAgIDQ4NiwgICAgIDAsICAgICAwLAorICAgNTAyLCAgIDM4NiwgICAgIDAsICAgICAwLCAgIDQxOSwgICA0NjQsICAgNDMwLCAgICAgMCwgICA0MTgsICAgNDczLAorICAgNDc2LCAgIDQ2NywgICAgIDAsICAgMTI4LCAgIDEyOCwgICA0NjksICAgNDY2LCAgIDQ0MywgICA0NDIsICAgNDQwLAorICAgNDQxLCAgIDQyNSwgICA0NDMsICAgNDQ4LCAgIDQ0NSwgICAxMjgsICAgMTI4LCAgICAgMCwgICA0MzQsICAgMTc2LAorICAgMzgzLCAgIDI4NSwgICAyODUsICAgMzgwLCAgIDM4MSwgICAgIDAsICAgMzk4LCAgICAgMCwgICAgIDAsICAgIDMwLAorICAgMzEzLCAgIDExNCwgICAxMjgsICAgMTI4LCAgIDE0NSwgICAgIDAsICAgICAwLCAgIDE3NywgICAyMjUsICAgICAwLAorICAgMjU1LCAgIDE4MywgICAzMjQsICAgICAwLCAgIDI0NSwgICAyNDksICAgICAwLCAgICAgMCwgICAzMDksICAgMzEwLAorICAgICAwLCAgICAgMCwgICA1MzUsICAgICAwLCAgIDUzNiwgICA1MzcsICAgIDgzLCAgICA4NiwgICAyOTUsICAgMTkyLAorICAgICAwLCAgIDE5NCwgICA1MzMsICAgNDgxLCAgIDQ5MiwgICAyODUsICAgNDkzLCAgIDQ4OSwgICA0OTAsICAgNDU4LAorICAgICAwLCAgIDQ2MiwgICA0NDMsICAgICAwLCAgIDQ2NCwgICA0MTUsICAgICAwLCAgICAgMCwgICAxNzUsICAgICAwLAorICAgICAwLCAgICAgMCwgICA0NjgsICAgICAwLCAgICAgMCwgICA0NDksICAgNDQ5LCAgIDQ0NCwgICAyMzYsICAgMjg5LAorICAgMzc4LCAgIDEyOSwgICAxODMsICAgMTgzLCAgIDE4MywgICAyODksICAgMTgzLCAgIDE4MywgICAgIDAsICAgMzg3LAorICAgMzg5LCAgIDQwMCwgICAzMTQsICAgMTIxLCAgICAgMCwgICAxMjIsICAgICAwLCAgIDE0NSwgICAxNDMsICAgMjAyLAorICAgMjAwLCAgIDE5OSwgICAxODEsICAgIDIyLCAgICAgMCwgICAgMjYsICAgMjUzLCAgIDI3NCwgICAgIDAsICAgMTgzLAorICAgNDAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDMyNCwgICAgIDAsICAgICAwLCAgIDEyNSwgICAzMjUsICAgMzAxLAorICAgMzExLCAgIDIxMCwgICAgODksICAgICAwLCAgIDIwOCwgICAgIDAsICAgMjA3LCAgICAgMCwgICAyNTcsICAgMjA1LAorICAgNTM5LCAgIDU0MSwgICAgIDAsICAgNTQ2LCAgICAgMCwgICA1MzgsICAgICAwLCAgICAgMCwgICAxODMsICAgMTgzLAorICAgMTgzLCAgICAgMCwgICA0OTQsICAgNTMxLCAgICAgMCwgICA0MjMsICAgICAwLCAgIDQ2NCwgICA0NzQsICAgNDc3LAorICAgNDcwLCAgIDQyOCwgICAgIDAsICAgNDUyLCAgIDQ0NiwgICA0NTAsICAgNDQ3LCAgIDI5MywgICAgIDAsICAgMzk1LAorICAgICAwLCAgIDM5MCwgICAzOTEsICAgMzkyLCAgIDI5MywgICAzOTMsICAgMzk0LCAgIDM4MiwgICAgIDAsICAgICAwLAorICAgMTQ0LCAgIDE0NywgICAxNDYsICAgICAwLCAgIDE3OCwgICAxODMsICAgICAwLCAgIDI3NSwgICAzMTIsICAgICAwLAorICAgMzE3LCAgIDEyNywgICAxMjYsICAgMzA1LCAgICAgMCwgICAzMTgsICAgMzAzLCAgIDMyNSwgICAzMDIsICAgICAwLAorICAgICAwLCAgICAgMCwgICAyMTEsICAgIDY0LCAgICAgMCwgICAyMDQsICAgNTQwLCAgICA4NCwgICAxOTMsICAgNDk2LAorICAgNDk3LCAgIDQ5OCwgICA0OTEsICAgMjg1LCAgIDQyMCwgICA0MzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgNDU0LAorICAgICAwLCAgICAgMCwgICAyMzQsICAgMjg5LCAgIDIzNSwgICAyMzEsICAgMjMzLCAgICAgMCwgICAxMTksICAgMTIwLAorICAgICAwLCAgIDI3NywgICAxODMsICAgNDAyLCAgIDMxNiwgICAgIDAsICAgMTYyLCAgICAgMCwgICAzMzgsICAgMzIyLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAzNjcsICAgNDM1LAorICAgNDM1LCAgIDM1OSwgICAgIDAsICAgICAwLCAgIDEyMywgICAxMjgsICAgMTI4LCAgIDMzMSwgICAzMzYsICAgICAwLAorICAgICAwLCAgIDMyOCwgICAzMjksICAgMzMyLCAgIDM2MCwgICAzMzAsICAgICAwLCAgIDIxMywgICAgIDAsICAgICAwLAorICAgMjA2LCAgIDQ5NSwgICA0NjQsICAgNDE2LCAgIDQ3MiwgICA0NzEsICAgNDc1LCAgIDQ3OCwgICA0NTMsICAgNDUxLAorICAgICAwLCAgIDIzMiwgICAyMDEsICAgMjc2LCAgICAgMCwgICAgIDAsICAgMzI0LCAgIDM2OSwgICAgIDAsICAgICAwLAorICAgMzY1LCAgIDM0OSwgICAzNTAsICAgMzUxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDM2OCwgICAgIDAsICAgMzY2LAorICAgMzMzLCAgIDEzNCwgICAgIDAsICAgMTM1LCAgICAgMCwgICAgIDAsICAgMzIwLCAgIDMyNSwgICAzMTksICAgMzQyLAorICAgICAwLCAgIDEzNiwgICAgIDAsICAgMjA5LCAgIDIxMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMzcwLAorICAgIDQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDM2MywgICAzNTIsICAgICAwLCAgIDM1NywgICAgIDAsICAgICAwLAorICAgMTMyLCAgIDIxNSwgICAgIDAsICAgMTMzLCAgIDIxOCwgICAzMzcsICAgMzI0LCAgICAgMCwgICAgIDAsICAgMjE0LAorICAgNDIxLCAgIDMyMSwgICAgIDAsICAgMzIzLCAgIDM2MSwgICAzNDMsICAgMzQ3LCAgICAgMCwgICAzNTgsICAgICAwLAorICAgMTMwLCAgICAgMCwgICAxMzEsICAgICAwLCAgIDMzNSwgICAzMjYsICAgMzI0LCAgICAgMCwgICAzMzksICAgMzI0LAorICAgMzY5LCAgIDMyNCwgICAzNjQsICAgMzcxLCAgICAgMCwgICAyMTYsICAgMjE5LCAgIDMyNywgICAzNDEsICAgMzI0LAorICAgMzYyLCAgICAgMCwgICAzNDgsICAgICAwLCAgICAgMCwgICAzNzIsICAgMzczLCAgIDM1MywgICAgIDAsICAgICAwLAorICAgMzQwLCAgIDM0NCwgICAgIDAsICAgMzcxLCAgICAgMCwgICAgIDAsICAgMjE3LCAgIDIyMCwgICAzNjksICAgICAwLAorICAgICAwLCAgIDM1NCwgICAzNzQsICAgICAwLCAgIDM3NSwgICAgIDAsICAgICAwLCAgIDM0NSwgICAzNzYsICAgICAwLAorICAgMzU1LCAgIDMyNCwgICAgIDAsICAgICAwLCAgIDM0NiwgICAzNTYsICAgMzc3LCAgICAgMCwgICAgIDAsICAgICAwCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZnb3RvW10gPSB7ICAgOTM4LAorICAgICAxLCAgICAgMiwgICAgIDMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgMzQ1LCAgIDU2NywgICAzNTEsICAgNTcwLAorICAgMjAwLCAgIDQ1MywgICA2NjYsICAgMTI0LCAgIDI0MiwgICA0MDQsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LAorICAgMTMwLCAgIDU4MSwgICAxMzEsICAgMzg5LCAgIDM4OCwgICAzODYsICAgNjc3LCAgIDM4NywgICAxMzIsICAgMjQzLAorICAgMTMzLCAgIDEzNCwgICAzMzIsICAgMzMzLCAgIDMzNCwgICA1NjIsICAgNjU0LCAgIDY1NSwgICAgMzEsICAgMTk1LAorICAgNzg1LCAgIDQ0MywgICAgOTEsICAgNTYzLCAgIDYzOSwgICA0NDQsICAgIDM0LCAgIDE0MiwgICAyODgsICAgIDM1LAorICAgMjE4LCAgIDIwNiwgICAgNzgsICAgMjAxLCAgIDIwNywgICA2NDUsICAgIDc5LCAgIDU2NiwgICAzMzcsICAgMzM4LAorICAgIDM3LCAgIDI5NywgICAyOTgsICAgMjk5LCAgIDY0MywgICA3MTQsICAgNjY4LCAgIDY2OSwgICA2NzAsICAgNzMyLAorICAgODAwLCAgIDg0MywgICA4NjEsICAgODgyLCAgIDkwOSwgICA4NjQsICAgODg0LCAgIDkxMCwgICAzMjQsICAgMjEwLAorICAgNjc5LCAgIDIxMSwgICAgMzgsICAgMjM0LCAgIDIzNiwgICAyMjUsICAgIDk0LCAgIDczNiwgICAzNTQsICAgIDk3LAorICAgIDk4LCAgIDIzMSwgICA0NzQsICAgNDc1LCAgIDIyMywgICAyMjQsICAgMTQ0LCAgIDY4MSwgICAxNDUsICAgMTkxLAorICAgMjg3LCAgIDY1NiwgICA2NTcsICAgNzI1LCAgIDMzNSwgICA0ODEsICAgNTc4LCAgIDU3OSwgICA1ODAsICAgNTYwLAorICAgNTYxLCAgIDc4OSwgICA3OTAsICAgNzkxLCAgIDgxNywgICA4MzgsICAgNDU3LCAgIDgzOSwgICA2NjAsICAgNzkyLAorICAgNzkzLCAgIDg2NywgICA4MTYsICAgOTAwLCAgIDg5MSwgICA5MTksICAgOTMyLCAgIDg5MiwgICA3OTQsICAgNzk1LAorICAgODkwLCAgIDc5NiwgICA4MjksICAgODUyLCAgIDkwNSwgICA5MDYsICAgOTA3LCAgIDkzMCwgICA0MDksICAgNDEwLAorICAgNDQ1LCAgIDYyOSwgICA0NDYsICAgNDQ3LCAgIDQ0OCwgICAzMjcsICAgMzI4LCAgIDQ0OSwgICA0NTAsICAgNjUyLAorICAgMTM1LCAgICA0MCwgICAgNjQsICAgIDQxLCAgICA0MiwgICAgNDMsICAgNDMxLCAgIDY4OCwgICAzMTQsICAgNjAzLAorICAgODAzLCAgIDUyNiwgICAzMTcsICAgNTM4LCAgIDYwNSwgICAgNDQsICAgMzE4LCAgICA2OSwgICAgNDUsICAgNDM2LAorICAgNTQzLCAgIDQzNywgICA1NDgsICAgNjk1LCAgIDY5NiwgICAgNDYsICAgIDY1LCAgIDMwNCwgICA1MjAsICAgIDY2LAorICAgMzEwLCAgIDUyNCwgICA0MzIsICAgNDMzLCAgIDUzNiwgICA2MTIsICAgODA3LCAgIDUzNywgICA2MDcsICAgNzQ4LAorICAgNjA4LCAgIDc0OSwgICAxNzUsICAgNDIzLCAgIDUxNywgICA1MTgsICAgNTE5LCAgIDY4MiwgICA2ODMsICAgMzA2LAorICAgNDI1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAxODAsICAgNTg0LCAgIDU4NSwgICA2NzIsICAgNTg2LAorICAgMzcyLCAgIDEzNiwgICAyNDUsICAgNDg1LCAgIDM3NSwgICAzNzYsICAgMzc3LCAgIDEzNywgICAxMzgsICAgMTM5Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwYWN0W10gPSB7ICAgMTI4LAorICAgMTMyLCAgMjkzNiwgIDI5MzYsICAgMTA4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAxMzksICAgMjUzLAorICAgMjY2LCAgICA4NiwgICAxMDMsICAgMTExLC0zMjc2OCwgICAgOTksLTMyNzY4LC0zMjc2OCwgICAgOTksICAgIDk5LAorLTMyNzY4LCAgIDE1OCwgICAgOTksICAgMTU4LCAgICA5OSwgICAgOTksLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgMTY5LCAgIDEzNywgIDI0MTYsICAgMTE1LC0zMjc2OCwgICAxOTcsLTMyNzY4LC0zMjc2OCwgIDI5MzYsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDE1NSwgICAyMTQsICAgMjEwLCAgIDIxNCwgICAyMTIsICAyNjQ1LAorICAyNDgzLCAgIDI1MiwtMzI3NjgsICAgIDUwLCAgMzIxMCwgIDMyMTAsICAgMTUxLCAgICA1MSwtMzI3NjgsLTMyNzY4LAorICAgMTU4LC0zMjc2OCwgICAyMDksICAgIDk5LC0zMjc2OCwtMzI3NjgsICAgMTY5LCAgIDI4NiwtMzI3NjgsICAgMTk3LAorICAxNjYxLC0zMjc2OCwgICAzMTksLTMyNzY4LCAgIDE2OSwgICAxMTUsLTMyNzY4LCAgIDE5NywtMzI3NjgsLTMyNzY4LAorICAgNzI5LC0zMjc2OCwtMzI3NjgsICAgMTIwLC0zMjc2OCwgICAyNTUsICAgMjc3LCAgMTU5MiwtMzI3NjgsICAgMjgzLAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAyNjQ1LCAgMjY0NSwgICAgOTksLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgIDI2NDUsLTMyNzY4LC0zMjc2OCwgICA5MzIsLTMyNzY4LCAgIDI4OCwgICAzMTIsICAgMzE0LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAyNjQ1LCAgIDMwNSwgICAzMTEsLTMyNzY4LCAgMjY5OSwgIDI3NTMsLTMyNzY4LAorICAzNTgxLCAgIDYyMiwgICAzOTYsICAgMzQ2LCAgMjY0NSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgMzU2LCAgIDI2NywtMzI3NjgsICAgMzU5LCAgMzM2NCwgICAyNjksLTMyNzY4LCAgICA5OSwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDM5OCwgIDM0ODcsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAyMzc3LCAgIDQxNSwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgICA5OSwgICAgOTksICAgMzc3LCAgICA5OSwgICAgOTksLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMzk3LAorICAgMTA1LCAgIDExOSwtMzI3NjgsICAgMzE5LCAgIDE2OSwtMzI3NjgsICAgNDIwLC0zMjc2OCwgIDE4NDYsICAxODA2LAorICAgMTk3LC0zMjc2OCwtMzI3NjgsICAgMzE5LC0zMjc2OCwgICAzMjcsLTMyNzY4LCAgIDE5NywgIDE3NTksICAgNDM0LAorICAgNDg0LCAgIDM2NCwgIDE2ODAsICAgNzI5LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAxOTcsLTMyNzY4LAorLTMyNzY4LCAgIDQ3MywgICA0MzksLTMyNzY4LCAgIDEyMCwgICA0NDgsICAgMTk3LC0zMjc2OCwtMzI3NjgsICAgNTM0LAorICAgNDQ1LCAgIDM1MiwgIDMxNzUsICAgMjE0LCAgIDE5NywgICAyMTQsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgNDU0LCAgIDQ1NiwgICA0NzIsICAgNDgxLCAgMjUzNywgIDMyNzIsICAzNDg3LCAgICA5OSwtMzI3NjgsICAgNDg1LAorICAyNjQ1LCAgIDkzMiwtMzI3NjgsICAgOTMyLC0zMjc2OCwgIDI2NDUsICAyNjQ1LCAgIDU1NywtMzI3NjgsLTMyNzY4LAorICAyNjQ1LCAgMjY0NSwgIDI2NDUsICAyNjQ1LCAgMjY0NSwgIDI2NDUsICAyNjQ1LCAgMjY0NSwgIDI2NDUsICAyNjQ1LAorICAyNjQ1LCAgMjY0NSwtMzI3NjgsLTMyNzY4LCAgICA5OSwgICAgOTksICAyNjQ1LCAgMjY0NSwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMjY3LCAgMTkwNSwtMzI3NjgsICAgNTYyLCAgIDc2NiwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMjI1LC0zMjc2OCwgICA1NDcsLTMyNzY4LAorICAzNDg3LC0zMjc2OCwgICA1NDIsICAgNTUwLCAgIDYyNCwtMzI3NjgsICAgNDE1LC0zMjc2OCwgICA0MDgsICAgNTUwLAorICAgMTU4LCAgIDU2MCwtMzI3NjgsICAgNTgxLCAgIDU2NiwgICA1NzgsLTMyNzY4LCAgIDU4MSwtMzI3NjgsLTMyNzY4LAorICAgNDg0LC0zMjc2OCwtMzI3NjgsICAgNjQxLCAgIDQ4NCwgICA2NjAsLTMyNzY4LCAgMzA4OSwtMzI3NjgsICAgNjAyLAorICAgNjE0LC0zMjc2OCwgICA2ODIsICAgIDgzLC0zMjc2OCwtMzI3NjgsICAgNjM0LCAgIDE5NywgICAxMTAsICAgMjQzLAorLTMyNzY4LCAgIDMxOSwgICAzMTksLTMyNzY4LCAgMTgwNiwgICAxOTcsLTMyNzY4LCAgMTk2NCwtMzI3NjgsLTMyNzY4LAorICAxODA2LCAgMjY0NSwgICAgOTksICAgNjE5LCAgIDQzOSwgICA2MjcsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDYyMCwtMzI3NjgsICAgNjI4LC0zMjc2OCwtMzI3NjgsICAgNjI5LCAgIDYzMywgIDIyOTcsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNjYyLCAgIDY0MCwgIDMyNzIsLTMyNzY4LCAgIDY0MiwgICA2NDQsLTMyNzY4LAorICAzNTgxLCAgIDY0OCwgICA2NTAsICAzNTgxLCAgMzU4MSwgIDI2NDUsICAgNjc5LCAgMjY0NSwgIDI2NDUsICAyNDU2LAorICAgNzgzLCAgIDg3OSwgIDE2NTMsICAxNzUwLCAgIDc2MCwgICA3NjAsICAgNTM3LCAgIDUzNywtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNjUyLCAgIDMxMSwgICA2NjcsICAgMzM2LCAgIDI0NSwtMzI3NjgsICAzMTA4LAorLTMyNzY4LCAgIDY3MywtMzI3NjgsICAyMDIzLC0zMjc2OCwgICA3NjYsICAgNjY5LCAgIDI2OSwgIDI4MDcsICAgNjk1LAorICAzMzAwLCAgIDg1MCwtMzI3NjgsLTMyNzY4LCAgMzM3NSwgIDM0ODcsLTMyNzY4LC0zMjc2OCwgICA2OTMsICAgMTU4LAorLTMyNzY4LCAgIDcxOCwgIDMwMTEsLTMyNzY4LC0zMjc2OCwgICAxODQsICAyODg0LCAgIDcxOSwgICAgNzgsICAgNzA3LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAzNDUwLC0zMjc2OCwgICA3MTEsICAgNDMwLC0zMjc2OCwtMzI3NjgsICAgMjk4LAorLTMyNzY4LC0zMjc2OCwgICAgNzYsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAzNDY5LC0zMjc2OCwgICA0MzQsLTMyNzY4LAorLTMyNzY4LCAgIDQzNCwtMzI3NjgsICAgNzUyLC0zMjc2OCwtMzI3NjgsICAgNzA4LC0zMjc2OCwgIDM1ODEsLTMyNzY4LAorICAgMTk3LCAgIDcxNSwtMzI3NjgsICAgNzEzLC0zMjc2OCwtMzI3NjgsICAgNzEzLCAgIDE5NywgICAxOTcsLTMyNzY4LAorICAgNzYzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMzMzNiwtMzI3NjgsLTMyNzY4LCAgIDY2MiwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNzYxLCAgMjY0NSwgIDE0NzMsICAxODIwLC0zMjc2OCwtMzI3NjgsICAgNTYyLAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA3MjIsLTMyNzY4LC0zMjc2OCwgICAzMzksICAgNzMwLAorICAgIDk5LC0zMjc2OCwgIDIzNzcsICAgNzQwLCAgMzExOSwtMzI3NjgsLTMyNzY4LCAgMzQ1MCwgIDE3NzgsICAgIDc2LAorLTMyNzY4LCAgIDc0MSwgICA3NjUsICAgIDc2LC0zMjc2OCwgICA1ODEsLTMyNzY4LCAgIDM0OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICAxNjksICAgMTM3LCAgMjQxNiwgICAzMzUsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAzNTA2LCAgIDc2NywtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDU5MywgICAyMzgsLTMyNzY4LC0zMjc2OCwgIDM0MzksLTMyNzY4LCAgIDgzNCwgICA0NzIsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICA3NjgsICAgNzI1LC0zMjc2OCwgICA4MzksICAgIDc2LC0zMjc2OCwtMzI3NjgsICAgIDc2LAorLTMyNzY4LCAgIDE5NywtMzI3NjgsICAgMjU3LC0zMjc2OCwtMzI3NjgsICAgIDk5LCAgMTEwMSwgICA3NjMsLTMyNzY4LAorICAxNDIxLCAgMjY0NSwgICA4MDUsICAgNzY5LCAgMzMzNiwtMzI3NjgsLTMyNzY4LCAgMTM5NCwtMzI3NjgsLTMyNzY4LAorICAyNjQ1LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA1OTMsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgIDk5LC0zMjc2OCwtMzI3NjgsICAgNzkwLCAgIDU4MSwtMzI3NjgsICAzMjEwLCAgMzIxMCwgICAgNzAsICAgMzE5LAorICAgMTY5LCAgMzAzOSwtMzI3NjgsICAgNDU5LCAgMjkwMiwgICAyODAsICAgMjgwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAgMjM4LCAgIDE5NywgICAzNDAsICAgMzQ3LCAgIDE5NywtMzI3NjgsICAgMzQ3LCAgIDE5NywgIDMxMDgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDMxOSwtMzI3NjgsICAgMTY5LC0zMjc2OCwgICA2NTksLTMyNzY4LAorLTMyNzY4LCAgMzU4MSwtMzI3NjgsLTMyNzY4LCAgIDgzOSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDI2NDUsICAgIDgxLAorLTMyNzY4LCAgIDQzNSwgICA1NjQsICAxMDIxLCAgIDc4MCwgICA3ODIsICAxMTgxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICA4MjgsICAgIDk5LC0zMjc2OCwgICA4MzMsICAzNTgxLCAgIDc5NiwgICA4MDAsLTMyNzY4LAorICAgMzExLC0zMjc2OCwgIDI2NDUsLTMyNzY4LCAgIDgwNSwtMzI3NjgsICAyNjQ1LCAgIDQyNywgICAzNDAsICAgMzQ3LAorICAgMTk3LCAgIDQ2NCwtMzI3NjgsLTMyNzY4LCAgIDUxNSwtMzI3NjgsICAgODIwLCAgIDU4MSwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgIDI2NDUsICAgODQ2LCAgIDgwNCwtMzI3NjgsICAgODA0LCAgIDU4NywgICA1MTAsLTMyNzY4LAorICAyMDgyLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDYwMCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICA1MDEsICAgNTIxLAorICAgNjU5LC0zMjc2OCwtMzI3NjgsICAxNDIxLC0zMjc2OCwgIDMyMTQsICAyNjQ1LC0zMjc2OCwtMzI3NjgsICAgIDk5LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDgwOCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAyMTYzLAorICAgODU0LCAgMTQyMSwtMzI3NjgsLTMyNzY4LCAgMTUwMSwtMzI3NjgsLTMyNzY4LCAgMTM5NCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNTkzLC0zMjc2OCwtMzI3NjgsICAgODI5LCAgICA4MCwgICAgODAsICAzNTgxLAorICAyNjQ1LCAgIDI4MCwgICA1OTgsLTMyNzY4LCAgIDU5OCwtMzI3NjgsLTMyNzY4LCAgIDgxMywtMzI3NjgsLTMyNzY4LAorICAgODIyLC0zMjc2OCwgIDMyMTQsLTMyNzY4LC0zMjc2OCwgIDIyNDMsICAgODUzLCAgIDg0MiwtMzI3NjgsLTMyNzY4LAorICAgODQzLCAgIDg0NSwgIDI2NDUsICAgODY4LCAgIDgzMCwgICA4MzEsICAyNTkxLCAgIDM3MiwgICA5MDIsICAgMTg3LAorICAgMjI2LC0zMjc2OCwgICA4NzMsICAgODM4LC0zMjc2OCwgICA4NjUsICAzMTM4LC0zMjc2OCwgICA5MDAsICAxMjYxLAorICAgIDkxLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAyNDA1LC0zMjc2OCwgICA4NjksICAxNTgxLAorLTMyNzY4LC0zMjc2OCwgICA1ODEsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgIDM1ODEsLTMyNzY4LAorICAgMjc4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMjY0NSwgICA4NjEsLTMyNzY4LCAgMjY0NSwgIDI2NDUsICAzNTQ1LAorLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDg3MSwgIDI2NDUsICAgODcyLC0zMjc2OCwgICA4OTEsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICAzMTksLTMyNzY4LCAgIDE2OSwgIDEzNDEsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorICAyNjQ1LC0zMjc2OCwgIDE1ODEsLTMyNzY4LC0zMjc2OCwgICA4ODgsICAgODc3LCAgMjY0NSwgICA5MzcsLTMyNzY4LAorICAgNDQxLCAgIDg4MCwgICA4ODIsICAyNjQ1LC0zMjc2OCwtMzI3NjgsICAgODg1LC0zMjc2OCwgIDI2NDUsICAgNTIzLAorLTMyNzY4LCAgIDQ0MiwgICA1MjQsLTMyNzY4LCAgIDY2MywtMzI3NjgsLTMyNzY4LCAgMjI0MywgICA4OTIsLTMyNzY4LAorLTMyNzY4LC0zMjc2OCwgICA4OTMsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgMzU2MywtMzI3NjgsICAgIDU4LAorLTMyNzY4LCAgMTgwNiwtMzI3NjgsICAxODA2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDg4NywtMzI3NjgsLTMyNzY4LAorICAyNjQ1LC0zMjc2OCwtMzI3NjgsICAgOTQ3LCAgIDg5MCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LAorLTMyNzY4LCAgIDg5NiwtMzI3NjgsICAgOTExLCAgICA2MCwgICA4OTUsLTMyNzY4LC0zMjc2OCwgICA0NzIsICAgNDcyLAorLTMyNzY4LC0zMjc2OCwgIDI2NDUsICAgOTQ3LCAgIDg5NywgICA5NDcsLTMyNzY4LC0zMjc2OCwgIDI2NDUsICAgOTAzLAorICAgIDY4LC0zMjc2OCwtMzI3NjgsICAgOTA3LC0zMjc2OCwgICA2NjAsICAgOTAxLC0zMjc2OCwgICAzOTYsICAgNDI5LAorLTMyNzY4LC0zMjc2OCwgICA5MDgsICAgNjYwLC0zMjc2OCwtMzI3NjgsICAgMzk2LCAgIDk4NCwgICA5ODgsLTMyNzY4Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0gey0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDEwMiwgIC0zNjcsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgIC05LC0zMjc2OCwgICAtNTIsICAgNTcwLCAgLTIzMSwgICA1MzMsLTMyNzY4LC0zMjc2OCwKKyAgIC00NSwtMzI3NjgsICAgMjIwLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMTcyLC0zMjc2OCwKKyAgLTI5NSwtMzI3NjgsICAtMzA4LCAgIDY2MSwtMzI3NjgsLTMyNzY4LCAgIDM0MiwtMzI3NjgsICAgIDE3LCAgLTE5NSwKKyAgIDIwMywgICAgMTYsICAgOTE0LC0zMjc2OCwgICAzNjcsICAgIDIxLCAgIC0xMSwgICAtNjUsICAgNzAzLCAgICAxMSwKKyAgLTI0OSwgIC01NzQsICAgLTU4LCAgLTIwNiwgIC0xMjcsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgMTk2LCAgICAgMywKKyAgICAtNiwtMzI3NjgsICAgNTg0LC0zMjc2OCwgICAzNjEsLTMyNzY4LCAgLTYwNywtMzI3NjgsICAtNjYyLC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgLTY4LCAgLTEzNSwKKyAgLTQ5OCwgICAgMTQsICAgLTY2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNjUzLCAgICAxMiwKKy0zMjc2OCwgICA3NzYsICAgNjU1LCAgIDQzNywgICA3ODgsICAgNjY0LCAgIC0xMiwgICAtODksICAgLTUwLCAgLTE2OCwKKyAgLTIzMiwgICAzNjMsLTMyNzY4LC0zMjc2OCwgIC0yNjksLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAgNDQwLCAgLTI5MCwKKyAgLTIwNSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsICAtMTIyLCAgLTQzNSwgIC03NDEsICAgMzY2LC0zMjc2OCwKKyAgIDE0OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwgICAxNTMsLTMyNzY4LCAgLTczOSwgICAxMTcsLTMyNzY4LCAgIDEyMSwtMzI3NjgsICAgNjQzLC0zMjc2OCwKKyAgLTM1MSwtMzI3NjgsICAgNjMyLCAgIDYzNSwgICA0OTcsICAtMzA3LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKyAgICAxOCwtMzI3NjgsICAxMDMzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAtMjAsICAgICA0LCAgLTM0OCwKKy0zMjc2OCwgICA1MTYsLTMyNzY4LCAgIDQ1MCwgICAzMTAsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAtMzA2LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDMxNiwgICA1MzIsLTMyNzY4LC0zMjc2OCwKKy0zMjc2OCwtMzI3NjgsICAgLTM3LCAgIDc2MiwtMzI3NjgsLTMyNzY4LCAgIDU1NSwtMzI3NjgsICAgMzMzLCAgIDU2NSwKKy0zMjc2OCwgICA2NTgsICAgNjY1LCAgLTE0NSwtMzI3NjgsICAtMTE5LC0zMjc2OCwtMzI3NjgsICAgNDA5LCAgIDQ5OCwKKy0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDcxNCwtMzI3NjgsLTMyNzY4LC0zMjc2OAorfTsKKworCisjZGVmaW5lCVlZTEFTVAkJMzYzMworCisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXRhYmxlW10gPSB7ICAgIDU1LAorICAgIDU3LCAgICA1OSwgICAzNDYsICAgIDcyLCAgICAzNiwgICAgMzYsICAgIDYzLCAgIDEyNSwgICAxNDEsICAgIDY3LAorICAgIDY4LCAgIDQzOCwgICAzNDMsICAgIDcxLCAgIDIwOSwgICAgNjMsICAgIDc0LCAgICAzMiwgICAgMzIsICAgIDM5LAorICAgIDM5LCAgICA4NiwgICAgMzMsICAgIDMzLCAgIDIyMCwgICAgNzAsICAgMjEyLCAgICA3MCwgICAxODEsICAgIDkyLAorICAgNDM5LCAgIDMwNywgICAyMzAsICAgIDgwLCAgIDMzOSwgICAgODgsICAgNDYzLCAgIDM2OCwgICA0MTUsICAgNDY1LAorICAgNTc0LCAgICAzNiwgICA0NjgsICAgIDg3LCAgICA4MSwgICA0MDUsICAgMTg0LCAgIDIzMiwgICAgODMsICAgIDg1LAorICAgMTg4LCAgIDQwOCwgICAyODYsICAgNjIzLCAgICAzMiwgICAyOTIsICAgIDM5LCAgIDMwOCwgICA1MDIsICAgIDMzLAorICAgNzA5LCAgIDIzNywgICAyMzgsICAgNDU0LCAgIDE5MCwgICA1MzIsICAgMzIzLCAgIDI0MCwgICAzNDAsICAgMTAwLAorICAgIDcwLCAgIDE0MywgICA4MDEsICAgIDkyLCAgICA3MCwgICA4NDksICAgNTU5LCAgIDMzNiwgICAyNDksICAgIDgwLAorICAgODA1LCAgICA5MiwgICA1MjgsICAtMTEyLCAgIDIyMiwgICAyMDgsICAgMjc5LCAgICA4MCwgICAxODUsICAgMjgxLAorICAgMTkyLCAgIDg0MCwgICA0NTUsICAgMjE5LCAgIDE0NywgICA4OTQsICAgMTk3LCAgIDkxNCwgICAyMTMsICAgMjM5LAorICAgMzc0LCAgICA1MCwgICAgNTEsICAgMjQ0LCAgICA0NywgICA5MjYsICAgNzYxLCAgICA3NSwgICAxNDMsICAgMTg2LAorICAgIDE0LCAgIDMyMCwgICAgNzUsICAgMjAyLCAgIDQwNywgICAyMzMsICAgMzIwLCAgIDM0NiwgICA3MTcsICAgIDg5LAorICAgMjIxLCAgICA5MCwgICAgNTAsICAgIDUxLCAgIDc5OSwgICA4ODUsICAgMTQzLCAgICAtMSwgICAxOTgsICAgMTk5LAorICAgMTQ4LCAgICAtMiwgICAxODcsICAgODk1LCAgICAxNCwgICA5MTUsICAgMjk2LCAgIDg0NSwgICAzMDAsICAgIDE0LAorICAgIDkzLCAgICA1MCwgICAgNTEsICAgOTI3LCAgICA2MCwgICA4OTgsICAgMzMwLCAgIDIyMCwgICA5MDEsICAgODQxLAorICAgOTAzLCAgIDkwMiwgICA1MTYsICAgNTUwLCAgICA3NiwgICAyOTEsICAgODA2LCAgIDM2NywgICA5MTEsICAgMjAzLAorICAgMzAzLCAgICA2MSwgICAzMDIsICAgIDc3LCAgLTExMiwgICAgNTIsICAgNDE1LCAgIDIzMCwgICAyMDQsICAgIDYyLAorICAgIDUzLCAgICA3NSwgICAzMTEsICAgMzEyLCAgIDUwMCwgICAzMTUsICAgMzE2LCAgIDE5OCwgICAxOTksICAgOTI0LAorICAgODcwLCAgIDIwNSwgICAyMzIsICAgMTQzLCAgICA0OCwgICAgNDksICAgIDUyLCAgIDQwNSwgICAxODIsICAgNjE0LAorICAgOTM1LCAgICA1MywgICAzNzEsICAgIDgwLCAgIDMyMiwgICAgMTYsICAgMjA4LCAgICA4MCwgICAgMTQsICAgNzUzLAorICAgNzU1LCAgICA5MiwgICAgMTYsICAgNDU5LCAgIDMyMSwgICAgNTIsICAgMjA4LCAgIDQ2MiwgICAzMjUsICAgMTgzLAorICAgIDUzLCAgIDMzNiwgICAgOTIsICAgIDgyLCAgIDQ2MSwgICAyMjIsICAgMjE5LCAgIDE5MiwgICAgNzYsICAgNjA0LAorICAgIDU0LCAgIDIyMCwgICAzMzYsICAgNzMwLCAgIC0zNSwgICA0MDYsICAgIDE0LCAgICA3NywgICAzMzYsICAgNjAwLAorICAgNDg4LCAgICAxNiwgICA0MTIsICAgNjAyLCAgIDM3OCwgICA0NzYsICAgIDk1LCAgIDQ3NiwgICAzNzksICAgMzgyLAorICAgIDc1LCAgIDM4MywgICAyOTEsICAgMTQzLCAgIDY5MSwgICAzNjIsICAgMzU4LCAgIDM2NCwgICAzNjAsICAgNTk5LAorICAgMjMzLCAgIDUzOSwgICA1NDAsICAgNTQxLCAgIDY4NSwgICAgNTAsICAgIDUxLCAgIDE0MywgICA4NjAsICAgIDc1LAorICAgMjAyLCAgIDU0MiwgICAxNDMsICAgLTM0LCAgIDE0MywgICA0MDIsICAgNDAzLCAgICAxNCwgICAgNTAsICAgIDUxLAorICAgIDE2LCAgICA1MCwgICAgNTEsICAgMjkzLCAgIDI5NCwgICAyOTUsICAgNjQ0LCAgIDcwOCwgICAgOTYsICAgNjQ2LAorICAgIDc1LCAgIDYxOSwgICAgNzUsICAgMjAyLCAgIDMyMCwgICAxODksICAgIDE0LCAgIDYyNiwgICA0MjAsICAgMTQ4LAorICAgNDI5LCAgICA5OSwgICA3NjYsICAgMTAxLCAgIDY0OSwgICA0NjcsICAgNjIxLCAgIDI4NSwgICA2ODcsICAgNDI3LAorICAgNDE3LCAgIDM0NywgICAzNDgsICAgNDEzLCAgIDQxNCwgICA0MTgsICAgMjAzLCAgICAxNCwgICA2NTgsICAgIDE0LAorICAgMTQ2LCAgIDE0MywgICA3NTMsICAgMjI2LCAgICA3MCwgICAyMDQsICAgMjgzLCAgIDY5MywgICA0NjAsICAgIDUyLAorICAgNTAxLCAgICA3NSwgICAyMDIsICAgNDg0LCAgICA1MywgICAyODQsICAgMjg1LCAgIDc1NCwgICAyMDUsICAgMjAzLAorICAgIDM2LCAgICA5MiwgICAgNTIsICAgNDk0LCAgICA1NiwgICAgNTIsICAgIDc3LCAgICA1MywgICAyMDQsICAgNTgzLAorICAgIDUzLCAgIDIwOCwgICAzMjAsICAgMjIyLCAgIDIwOCwgICAyMDgsICAgMjQ2LCAgICA1OCwgICAgMTQsICAgMjIwLAorICAgNjcxLCAgIDIwNSwgICAzMjEsICAgNjMzLCAgIDIyNywgICAgIDUsICAgMzI1LCAgICAgNywgICAyOTAsICAgNjc4LAorICAgMjM1LCAgIDUwNiwgICAxOTMsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTk0LCAgIDMwNywgICAyMDMsICAgIDE0LAorICAgMjQ3LCAgIDU0NiwgICAyNDgsICAgNTU3LCAgICA1MCwgICAgNTEsICAgIDE0LCAgIDIwNCwgICA1NTgsICAgIDEzLAorICAgMjUwLCAgIDc0NywgICA1MzAsICAgNTMxLCAgIDcyMiwgICAyODMsICAgNTQ3LCAgIDcyNywgICA0MDgsICAgNzEzLAorICAgMjA1LCAgIDI1MSwgICA3NTYsICAgMzA4LCAgIDI4NCwgICAyODUsICAgIDE2LCAgLTQ2NSwgICA3MDAsICAgNzAxLAorICAgIDUwLCAgICA1MSwgICA4NjgsICAgMzQxLCAgIDI3OSwgICAxOTgsICAgMTk5LCAgIDM0MiwgICAyOTYsICAgNTI3LAorICAgIDUwLCAgICA1MSwgICAgMzYsICAgNTIzLCAgIDU5MCwgICA1MzksICAgNTQwLCAgIDU0MSwgICAgMjIsICAgNTkxLAorICAgMjgwLCAgIDgyNiwgICAzNTcsICAgIDI0LCAgICAzNiwgICA2MDYsICAgNjk5LCAgICAzNiwgIC0yNzAsICAtMjcwLAorICAgMzYzLCAgIDI4MiwgICAgODYsICAgIDcwLCAgIDI4OSwgICAgMzYsICAgMTQzLCAgIDUxNCwgICAgNTIsICAgNjc1LAorICAgMzQ5LCAgIDY3MSwgICA1MTUsICAgIDUzLCAgIDE5NCwgICA1NjQsICAgIDg4LCAgIDE0MywgICA1MzQsICAgNTMzLAorICAgNDc2LCAgIDY5OCwgICAzMDksICAgNTM1LCAgICA4NywgICA2NTksICAgMzAxLCAgIDcwNSwgICAzMTMsICAgNTUyLAorICAgNTUzLCAgIDcxMywgICA2MjUsICAgNjI4LCAgICA1MiwgICA1MDAsICAgNDI2LCAgIDU2NSwgICAxOTcsICAgIDUzLAorICAgMzgxLCAgLTE3NSwgICA1MDAsICAgMzE5LCAgICA1MiwgICAzODQsICAgMzg1LCAgLTE3NSwgICAzMjYsICAgIDUzLAorICAgMzkwLCAgIDM5MSwgICAzOTIsICAgMzkzLCAgIDM5NCwgICAzOTUsICAgMzk2LCAgIDM5NywgICAzOTgsICAgMzk5LAorICAgNDAwLCAgIDQwMSwgICAzNDcsICAgMzQ4LCAgIDI3MywgICAyNzQsICAgODQ2LCAgIDI3NSwgICAyNzYsICAgMjc3LAorICAgMjc4LCAgIDU5MywgICA3MzksICAgIDg2LCAgIDkzMywgICA2NTAsICAgNTU1LCAgIDI1MSwgICAzNTIsICAgOTM0LAorICAgNTU2LCAgIDcxOSwgICAgNzUsICAgNjE5LCAgIDM1NiwgICA3MjAsICAgODc1LCAgICA4OCwgIC0xNzUsICAgMzUzLAorICAgIDM2LCAgIDM1OSwgIC0xNzUsICAgIDg2LCAgIDc4OCwgICAgODcsICAgNTM5LCAgIDU0MCwgICA1NDEsICAgMzY1LAorICAgNTk2LCAgIDM2NiwgICA2NTksICAgNTE0LCAgIDcyOCwgICAgODAsICAgNjkyLCAgICA4OCwgICA1MTUsICAgIDE0LAorICAgNzQzLCAgIDQ2NCwgICAxOTgsICAgMTk5LCAgIDc0NCwgICAgODcsICAgNjA5LCAgIDY5NCwgICA2OTQsICAgNTQ2LAorICAgNjEwLCAgIDYxMSwgICAyMTIsICAgMzY3LCAgIDYyMiwgICAgODAsICAgMzY5LCAgIDI5MSwgICAgMzYsICAgNzU0LAorICAgNzg4LCAgIDM4MCwgICA2MTYsICAgNjE3LCAgIDU0NywgICA2MjQsICAgNjI3LCAgIDY1MSwgICAgNzcsICAgNjg5LAorICAgNjkwLCAgIDQ2OSwgICAyMjAsICAgODk2LCAgIDYzOCwgICA4OTcsICAgMjA4LCAgIDc1OSwgICA3MTAsICAgNjM1LAorICAgNjM3LCAgIDM0MiwgICA1MzksICAgNTQwLCAgIDU0MSwgICA4MTEsICAgMjcwLCAgIDI3MSwgICAyNzIsICAgIDc1LAorICAgNjE5LCAgIDY4NCwgICA3NDUsICAgMzIwLCAgIC04NSwgICAgNzUsICAgNjE5LCAgIDc2MCwgICA2MjIsICAgODgxLAorICAgODgzLCAgIDE5NCwgICAgNzUsICAgMzQyLCAgIDE5NCwgICA0MTksICAgMzIwLCAgIDQ5NiwgICA0OTcsICAgNjgwLAorICAtMjY4LCAgLTI2OCwgICAyMDgsICAgIDgwLCAgICAzNiwgICAgOTIsICAgIDE0LCAgIDQyMSwgICAyMDgsICAgMjA4LAorICAgNDEzLCAgIDQxNCwgICAgMTQsICAgIDgwLCAgIDYwOSwgICAxNDMsICAgNDIyLCAgIDUzNCwgICA1MzMsICAgIDE0LAorICAgOTI5LCAgICAzNiwgICA1MzUsICAgNDI0LCAgIDE5MiwgICA0MzAsICAgNjIwLCAgIDIwOCwgICA5MzcsICAgIDgwLAorICAgNDUyLCAgIDcyMSwgICA2MjAsICAtNDYzLCAgIDIyMCwgICA2MjEsICAgMjg1LCAgIDQzNCwgICA3NTgsICAgNjI2LAorICAgNjA5LCAgIDYyMSwgICAyODUsICAgNDM1LCAgIDczMSwgICAzNDYsICAgNzAwLCAgIDcwMSwgICA2MjEsICAgMjg1LAorICAgMjUzLCAgIDI1NSwgICA3ODgsICAgNzEyLCAgIDIxNiwgICAyMTcsICAgNTcxLCAgIDE5NywgICAxMDQsICAgNDU4LAorICAgICA5LCAgICAxMCwgICAgMTEsICAgNTc1LCAgIDU3NiwgICAyNzMsICAgMjc0LCAgIDc4NCwgICAyNzUsICAgMjc2LAorICAgMjc3LCAgIDI3OCwgICAzMzEsICAgNjk0LCAgIDQ1MSwgIC0xMTUsICAtMTE1LCAgLTExNSwgIC0xMTUsICAgMTk3LAorICAgNDUyLCAgLTExNSwgIC0xNzUsICAtMTE1LCAgLTExNSwgIC0xMTUsICAgNDcxLCAgIDQ3OCwgIC0xNzUsICAgNDg2LAorICAgNjIyLCAgIDYyMiwgICA0NzMsICAgOTE3LCAgIDkxOCwgICA0NzksICAgNDgwLCAgICA4MCwgICA0ODIsICAtMTE1LAorICAgNzY0LCAgIDMyMSwgICAzMjUsICAgNzg0LCAgIDU4OCwgICA0ODcsICAgNDk1LCAgIDQ5MCwgICAzMjEsICAgNDkxLAorICAgNzgzLCAgIDE5OCwgICAxOTksICAgNDkyLCAgIDgyNSwgICA0OTMsICAtMTE1LCAgIDQ5OCwgICAgIDUsICAgIDg5LAorICAgICA3LCAgICA5MCwgICAgMzYsICAgMjE1LCAgIDIxNiwgICAyMTcsICAgICA5LCAgICAxMCwgICAgMTEsICAtMTc1LAorICAgICA5LCAgICAxMCwgICAgMTEsICAtMTc1LCAgIDUwNywgICA3ODYsICAgNjIyLCAgIDc5NywgIC0xMTUsICAgNDk5LAorICAgNzg3LCAgIDI4MSwgICAgMTMsICAtMTE1LCAgIDIwOCwgICA1MDMsICAgNzgzLCAgIDY4MCwgICAgMTQsICAgMzM2LAorICAgIDcyLCAgIDMzNiwgICA4NDcsICAtMTE1LCAgIDg2MiwgICA4NTAsICAgODUzLCAgIDY0NywgICA4MjcsICAgIDE2LAorICAgNTExLCAgIDIxNiwgICAyMTcsICAgODU3LCAgIDUyNSwgICAgODYsICAgODYzLCAgICAgOSwgICAgMTAsICAgIDExLAorICAgNTI5LCAgIDU0OSwgICA1NTEsICAgIDcwLCAgICA3MCwgICA2NDIsICAgNTU0LCAgIDU2OCwgICA4NjksICAgIDg4LAorICAgNTY5LCAgICAyMiwgICA1NzIsICAgNTczLCAgIDU3NywgICA4NzMsICAgIDI0LCAgICA4NywgICA1ODcsICAgIDM2LAorICAgNjY3LCAgIDYzNiwgICA4MzMsICAgODM1LCAgIDU4OSwgICA1OTIsICAgODgwLCAgIDI2OCwgICAyNjksICAgMjcwLAorICAgMjcxLCAgIDI3MiwgICA3ODYsICAgNjIyLCAgIDc5NywgICA3ODQsICAgNTk1LCAgIDc4NywgICA3MDIsICAgNzAzLAorICAgNzA0LCAgIDU1NiwgICA3MDYsICAgNzA3LCAgIDMyMSwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgMjY3LAorICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyMDgsICAgNjMyLCAgICA4MCwgICA4NTAsICAgNjQwLAorICAgNjAxLCAgIDEwMiwgICA2NzMsICAgNjE4LCAgIDYzNCwgICA3MTgsICAgMTAzLCAgIDEwNCwgICA4NjUsICAgMTA1LAorICAgMzMxLCAgIDY3NCwgICA2ODYsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgLTMwNCwgICA3ODMsICAgNzI2LAorICAgOTIwLCAgICAgOSwgICAgMTAsICAgIDExLCAgIDY0MiwgICAtMzIsICAgODUwLCAgIDEwNiwgICA3MTYsICAgIDE1LAorICAgNzMzLCAgIDEwNywgICAxMDgsICAgNzM0LCAgIDc0MCwgICA3NDEsICAgNzQyLCAgICAxMywgICAxMDksICAgIDE0LAorICAgNzM1LCAgIDExMCwgICA3NDYsICAgNzUxLCAgIDc1MiwgICA3NjUsICAgMTExLCAgIDExMiwgICAxMTMsICAgNzk4LAorICAgLTMzLCAgIDgwNCwgICAxMTQsICAgMTE1LCAgICAxNiwgICA4MTIsICAgNzM4LCAgIDExNiwgICAxMTcsICAgODEzLAorICAgODE1LCAgIDgxOCwgICAxMTgsICAgODE5LCAgIDExOSwgICA4MjEsICAgODIyLCAgIDgyMywgICA4MjgsICAgMTIwLAorICAgODMwLCAgIDc2MiwgICA3NTAsICAgMTIxLCAgIDgzMSwgICA4MzYsICAgIDIyLCAgIDEyMiwgICAxMjMsICAgODQ4LAorICAgNjQxLCAgICAyNCwgICAyNjQsICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLAorICAgMjcyLCAgLTQ4NSwgICAyNDEsICAgNjY3LCAgIDEwMiwgICAgIDUsICAgNzYzLCAgICAgNywgICAxNDAsICAgMTAzLAorICAgMTA0LCAgIDgzMiwgICAxMDUsICAgICA5LCAgICAxMCwgICAgMTEsICAgODQ0LCAgIDg1NiwgICA4NTgsICAgODU5LAorICAgODcxLCAgIDY2NywgICA4NzIsICAgODc0LCAgIDY2NywgICA5MDQsICAgODc2LCAgIDg3NywgICA4MTQsICAgIDEzLAorICAgMTA2LCAgIDg3OSwgICAgMTUsICAgODk5LCAgIDEwNywgICAxMDgsICAgOTA4LCAgIDg4OCwgICA4ODksICAgOTEzLAorICAgODA5LCAgIDEwOSwgICA5MTIsICAgOTIyLCAgIDExMCwgICA5MTYsICAgIDE2LCAgIDkzMSwgICA5MjUsICAgMTExLAorICAgMTEyLCAgIDExMywgICA5MjgsICAgOTM5LCAgIDkzNiwgICAxMTQsICAgMTE1LCAgIDk0MCwgICA1MTAsICAgODUxLAorICAgMTE2LCAgIDExNywgICA4MjAsICAgNDE2LCAgIDQ1NiwgICAxMTgsICAgNzIzLCAgIDExOSwgICAgMjIsICAgODQyLAorICAgMjE0LCAgIDUwOCwgICAxMjAsICAgIDI0LCAgIDcxMSwgICA3MTUsICAgMTIxLCAgIDQ3MiwgICAzNjEsICAgNjQ4LAorICAgMTIyLCAgIDEyMywgICAzNTUsICAgLTk0LCAgIDQ3NywgICA4ODYsICAgNDcwLCAgIDcyNCwgICA2NjEsICAgNjY3LAorICAgODg3LCAgIDMzMSwgICA3MjksICAtMTI0LCAgLTEyNCwgIC0xMjQsICAtMTI0LCAgLTEyNCwgIC0xMjQsICAtMTI0LAorICAgOTIxLCAgLTEyNCwgIC0xMjQsICAtMTI0LCAgLTEyNCwgIC0xMjQsICAgOTIzLCAgLTEyNCwgIC0xMjQsICAtMTI0LAorICAtMTI0LCAgLTEyNCwgIC0xMjQsICAtMTI0LCAgLTEyNCwgIC0xMjQsICAtMTI0LCAgLTEyNCwgIC0xMjQsICAtMTI0LAorICAtMTI0LCAgLTEyNCwgICA2MzEsICAtMTI0LCAgLTEyNCwgICA1MDQsICAgNTIxLCAgICA3MywgICA2MTUsICAgNTIyLAorICAtMTI0LCAgIDgxMCwgICA2NjcsICAtMTI0LCAgIDgwOCwgIC0xMjQsICAgNjk3LCAgIDYxMywgIC0xMjQsICAtMTI0LAorICAtMTI0LCAgIDQyOCwgICA1OTgsICAgODc4LCAgLTEyNCwgIC0xMjQsICAgODAyLCAgIDU5NCwgICA1MTIsICAtMTI0LAorICAtMTI0LCAgIDczNywgICA2NzYsICAgICAwLCAgLTEyNCwgICA1MTMsICAtMTI0LCAgLTEyNCwgICAgIDAsICAgNDg5LAorICAgICAwLCAgLTEyNCwgIC0xMjQsICAgICAwLCAgICAgMCwgIC0xMjQsICAgICAwLCAgLTEyNCwgIC0xMjQsICAtMTI0LAorICAtMTI0LCAgIDY1MywgIC0xMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LAorICAgICAwLCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAgICAwLCAgLTMyNCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgLTMyNCwgICAgIDAsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAtMzI0LCAgICAgMCwgICAgIDAsICAtMzI0LCAgICAgMCwgIC0zMjQsICAgICAwLCAgICAgMCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzI0LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLAorICAgICAwLCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgIC0zMjQsICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LAorICAtMzI0LCAgIDMzMSwgIC0zMjQsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjQsICAtMzI0LAorICAgICAwLCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjQsICAgICAwLCAgLTMyNCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgICAgIDAsICAtMzI0LAorICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAtMzI0LCAgICAgMCwgICAgIDAsICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzI0LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLAorICAgICAwLCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgIC0zMjQsICAgICAwLCAgLTMyNCwgIC0zMDAsICAtMzI0LAorICAtMzI0LCAgIDgzNywgIC0zMjQsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjQsICAtMzI0LAorICAgICAwLCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjQsICAgICAwLCAgLTMyNCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgIC0zMjQsICAtMzI0LCAgLTMyNCwgICAgIDAsICAtMzI0LAorICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAtMzI0LCAgICAgMCwgICAgIDAsICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMjQsICAtMzI0LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzI0LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LCAgLTMyNCwgICAgIDAsICAgICAwLAorICAgICAwLCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgIC0zMjQsICAgICAwLCAgLTMyNCwgICAgIDAsICAtMzI0LAorICAtMzI0LCAgIDg2NiwgIC0zMjQsICAtMzM0LCAgLTMzNCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMzQsICAtMzM0LAorICAgICAwLCAgLTMzNCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMzQsICAgICAwLCAgLTMzNCwgIC0zMzQsICAtMzM0LAorICAtMzM0LCAgLTMzNCwgIC0zMzQsICAtMzM0LCAgLTMzNCwgIC0zMzQsICAtMzM0LCAgLTMzNCwgICAgIDAsICAtMzM0LAorICAgICAwLCAgLTMzNCwgICAgIDAsICAtMzM0LCAgLTMzNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAtMzM0LCAgICAgMCwgICAgIDAsICAtMzM0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0zMzQsICAtMzM0LAorICAtMzM0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMzNCwgIC0zMzQsICAgICAwLCAgICAgMCwgICAgIDAsICAtMzM0LAorICAtMzM0LCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMzNCwgICAgIDAsICAtMzM0LCAgLTMzNCwgICAgIDAsICAgICAwLAorICAgICAwLCAgLTMzNCwgIC0zMzQsICAgICAwLCAgICAgMCwgIC0zMzQsICAgICAwLCAgLTMzNCwgICAgIDAsICAtMzM0LAorICAtMzM0LCAgIDY2MiwgIC0zMzQsICAgNjYzLCAgICA1MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDMsICAgMTA0LAorICAgMjU4LCAgIDEwNSwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LAorICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA2LAorICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LCAgIDEwOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLAorICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNCwgICAxMTUsICAgICAwLCAgICAgMCwgICA2NjQsICAgMTE2LAorICAgMTE3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExOCwgICAgIDAsICAgMTE5LCAgICA1MiwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMCwgICAgNTMsICAgICAwLCAgICAgMCwgICAxMjEsICAgICAwLCAgICAgMCwgIC0yMDMsICAgMTIyLAorICAgMTIzLCAgIDY2MiwgICA2NjUsICAgNjYzLCAgICA1MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDMsICAgMTA0LAorICAgICAwLCAgIDEwNSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgMjY3LAorICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA2LAorICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LCAgIDEwOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLAorICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNCwgICAxMTUsICAgICAwLCAgICAgMCwgICA2NjQsICAgMTE2LAorICAgMTE3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExOCwgICAgIDAsICAgMTE5LCAgICA1MiwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMCwgICAgNTMsICAgICAwLCAgICAgMCwgICAxMjEsICAgICAwLCAgICAgMCwgIC0yNTgsICAgMTIyLAorICAgMTIzLCAgIDY2MiwgICA2NjUsICAgNjYzLCAgICA1MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDMsICAgMTA0LAorICAgICAwLCAgIDEwNSwgICAyMjgsICAgICAwLCAgICAgMCwgICAgIDUsICAgICAwLCAgICAgNywgICAxNDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA2LAorICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LCAgIDEwOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLAorICAgMTA5LCAgICAgMCwgICAgMTUsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLAorICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNCwgICAxMTUsICAgIDE2LCAgICAgMCwgICA2NjQsICAgMTE2LAorICAgMTE3LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExOCwgICAgIDAsICAgMTE5LCAgICA1MiwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMCwgICAgNTMsICAgICAwLCAgICAgMCwgICAxMjEsICAgICAwLCAgICAgMCwgICAgMjIsICAgMTIyLAorICAgMTIzLCAgIDE5NiwgICA2NjUsICAgIDI0LCAgIC0yOCwgICAtMjgsICAgLTI4LCAgIC0yOCwgICAyMjksICAtMjYxLAorICAgICAwLCAgICAgMCwgICAtMjgsICAgLTI4LCAgIC0yOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMzUwLCAgICAgMCwgICAgIDAsICAgLTI0LCAgIC0yNCwgICAtMjQsICAgLTI0LCAgIDE5NywgICAtMjgsICAgICAwLAorICAtMTc1LCAgIC0yNCwgICAtMjQsICAgLTI0LCAgICAgMCwgICAgIDAsICAtMTc1LCAgIDI2NSwgICAyNjYsICAgMjY3LAorICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAtMjgsICAgMTk3LCAgIC0yNCwgICAgIDAsICAtMTc1LAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgIC0xNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk4LAorICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgIC0yNCwgICAgIDAsICAgICAwLCAgIC0yOCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAtMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgLTE3NSwgICAxOTgsICAgMTk5LAorICAgICAwLCAgLTE3NSwgICAtMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgLTI0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIC0yNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAtMTc1LCAgICAgMCwgICAgIDAsICAgMzQ0LAorICAtMTc1LCAgIC0yNCwgICAtMjAsICAgLTIwLCAgIC0yMCwgICAtMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgLTIwLCAgIC0yMCwgICAtMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAzMzEsICAgICAwLAorICAgICAwLCAgLTQ4NywgIC00ODcsICAtNDg3LCAgLTQ4NywgICAxOTcsICAgLTIwLCAgICAgMCwgIC0xNzUsICAtNDg3LAorICAtNDg3LCAgLTQ4NywgICAgIDAsICAgICAwLCAgLTE3NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLAorICAgMjcxLCAgIDI3MiwgICAgIDAsICAgLTIwLCAgICAgMCwgIC00ODcsICAgMzMxLCAgLTQ4NywgICAgIDAsICAtMzI0LAorICAtMzI0LCAgLTMyNCwgIC0zMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgLTMyNCwgIC0zMjQsICAtMzI0LAorICAgICAwLCAgICAgMCwgIC00ODcsICAgICAwLCAgICAgMCwgICAtMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgLTIwLCAgICAgMCwgICAgIDAsICAtMzI0LCAgICAgMCwgIC0xNzUsICAgICAwLCAgICAgMCwgICAgIDAsICAtMTc1LAorICAgLTIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgLTQ4NywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDIsICAtNDg3LAorICAtMzI0LCAgICAgMCwgICAgIDAsICAgMTAzLCAgIDEwNCwgICAgIDAsICAgMTA1LCAgICAgMCwgICAgIDAsICAtNDg3LAorICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLAorICAgMjcxLCAgIDI3MiwgIC0zMjQsICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDE1LCAgLTMyNCwgICAxMDcsICAgMTA4LAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLCAgLTExMSwgICAxMTAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE0LAorICAgMTE1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNiwgICAxMTcsICAgICAwLCAgIDEwMiwgICAgIDAsICAgMTE4LAorICAgICAwLCAgIDExOSwgICAxMDMsICAgMTA0LCAgICAgMCwgICAxMDUsICAgMTIwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLCAgICAgMCwgICAzMjksICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA2LCAgICAgMCwgICAgMTUsICAgICAwLCAgIDEwNywgICAxMDgsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEwOSwgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTQsICAgMTE1LAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDExNywgICAgIDAsICAgMTAyLCAgICAgMCwgICAxMTgsICAgICAwLAorICAgMTE5LCAgIDEwMywgICAxMDQsICAgICAwLCAgIDEwNSwgICAxMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIxLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIyLCAgIDEyMywgICAgIDAsICAgICAwLCAgIDQxMSwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDYsICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LCAgIDEwOCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNCwgICAxMTUsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMTYsICAgMTE3LCAgICAgMCwgICAxMDIsICAgICAwLCAgIDExOCwgICAgIDAsICAgMTE5LAorICAgMTAzLCAgIDEwNCwgICAgIDAsICAgMTA1LCAgIDEyMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjEsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMjIsICAgMTIzLCAgICAgMCwgICAgIDAsICAgNDY2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDE1LCAgICAgMCwgICAxMDcsICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgIDExNSwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDExNiwgICAxMTcsICAgICAwLCAgIDEwMiwgICAgIDAsICAgMTE4LCAgICAgMCwgICAxMTksICAgMTAzLAorICAgMTA0LCAgICAgMCwgICAxMDUsICAgMTIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMSwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLCAgICAgMCwgICA1MDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTA2LCAgICAgMCwgICAgMTUsICAgICAwLCAgIDEwNywgICAxMDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEwOSwgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTExLAorICAgMTEyLCAgIDExMywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTQsICAgMTE1LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTE2LCAgIDExNywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTgsICAgICAwLCAgIDExOSwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIxLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTIyLCAgIDEyMywgICAgIDAsICAgICAwLCAgIDc1NywgICA2NjMsICAgNzY3LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgMTAzLCAgIDEwNCwgICAgIDAsICAgMTA1LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDc2OCwgICAgIDAsICAgNzY5LAorICAgNzcwLCAgIDc3MSwgICA3NzIsICAgNzczLCAgIDc3NCwgICA3NzUsICAgNzc2LCAgIDc3NywgICA3NzgsICAgNzc5LAorICAgIDEzLCAgIDEwNiwgICAgMTQsICAgIDE1LCAgICAgMCwgICAxMDcsICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAxNiwgICAgIDAsICAgICAwLAorICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgIDExNSwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDExNiwgICAxMTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE4LCAgICAgMCwgICAxMTksICAgNzgwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIwLCAgIDc4MSwgICAgIDAsICAgICAwLCAgIDEyMSwgICAgIDAsICAgNzgyLAorICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLCAgIDM2NywgICA2NjMsICAgIDUxLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTAzLCAgIDEwNCwgICAgIDAsICAgMTA1LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDc2OCwgICAgIDAsICAgNzY5LAorICAgNzcwLCAgIDc3MSwgICA3NzIsICAgNzczLCAgIDc3NCwgICA3NzUsICAgNzc2LCAgIDc3NywgICA3NzgsICAgNzc5LAorICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDE1LCAgICAgMCwgICAxMDcsICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgIDExNSwgICAgIDAsICAgMTAyLAorICAgICAwLCAgIDExNiwgICAxMTcsICAgICAwLCAgIDEwMywgICAxMDQsICAgMTE4LCAgIDEwNSwgICAxMTksICAgIDUyLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIwLCAgICA1MywgICAgIDAsICAgICAwLCAgIDEyMSwgICAgIDAsICAgNzgyLAorICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLCAgIDM2NywgICAxMDYsICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LAorICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTE0LCAgIDExNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTYsICAgMTE3LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTE4LCAgICAgMCwgICAxMTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjIsICAgMTIzLCAgICAgMCwgICA0ODMsICAgMTQ5LAorICAgMTUwLCAgICAgMCwgICAxNTEsICAgMTUyLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1MywgICAxNTQsICAgMTU1LAorICAgMTU2LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY1LAorICAgMTY2LCAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgICAwLCAgIDEwMiwgICAgIDUsICAgICA2LAorICAgICA3LCAgICAgOCwgICAxMDMsICAgMTA0LCAgIDE3MiwgICAxMDUsICAgICA5LCAgICAxMCwgICAgMTEsICAgICA1LAorICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAwLCAgICAgMCwgICAgMTMsICAgMTA2LCAgICAxNCwgICAgMTUsICAgICAwLCAgIDEwNywgICAxMDgsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLCAgIDEwOSwgICAgMTQsICAgICAwLCAgIDExMCwgICAxNzQsICAgIDE2LAorICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAgIDAsICAgICAwLCAgIDMwNSwgICAxMTQsICAgMTE1LAorICAgIDE2LCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDExNywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTgsICAgICAwLAorICAgMTE5LCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjAsICAgIDI0LCAgICAgMCwgICAgIDAsICAgMTIxLAorICAgICAwLCAgICAgMCwgICAgMjIsICAgMTIyLCAgIDEyMywgICAxMDIsICAgICA1LCAgICAyNCwgICAgIDcsICAgMTQwLAorICAgMTAzLCAgIDEwNCwgICAgODQsICAgMTA1LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDI2MiwgICAyNjMsICAgMjY0LAorICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAgIDAsICAgICAwLAorICAgIDEzLCAgIDEwNiwgICAgIDAsICAgIDE1LCAgICAgMCwgICAxMDcsICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAxNiwgICAgIDAsICAgICAwLAorICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgIDExNSwgICAgIDAsICAgMTAyLAorICAgICAwLCAgIDExNiwgICAxMTcsICAgICAwLCAgIDEwMywgICAxMDQsICAgMTE4LCAgIDEwNSwgICAxMTksICAgIDIyLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIwLCAgICAyNCwgICAgIDAsICAgICAwLCAgIDEyMSwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLCAgICAgMCwgICAxMDYsICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LAorICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTE0LCAgIDExNSwgICAgIDAsICAgMTAyLCAgICAgMCwgICAxMTYsICAgMTE3LCAgICAgMCwgICAxMDMsICAgMTA0LAorICAgMTE4LCAgIDEwNSwgICAxMTksICAgMzcwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjIsICAgMTIzLCAgICAgMCwgICAgIDAsICAgMTA2LAorICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LCAgIDEwOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLAorICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNCwgICAxMTUsICAgICAwLCAgIDEwMiwgICAgIDAsICAgMTE2LAorICAgMTE3LCAgICAgMCwgICAxMDMsICAgMTA0LCAgIDExOCwgICAxMDUsICAgMTE5LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjEsICAgICAwLCAgIDgyNCwgICAgIDAsICAgMTIyLAorICAgMTIzLCAgICAgMCwgICAgIDAsICAgMTA2LCAgICAgMCwgICAgMTUsICAgICAwLCAgIDEwNywgICAxMDgsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEwOSwgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTQsICAgMTE1LAorICAgICAwLCAgIDEwMiwgICAgIDAsICAgMTE2LCAgIDExNywgICAgIDAsICAgMTAzLCAgIDEwNCwgICAxMTgsICAgMTA1LAorICAgMTE5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIxLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIyLCAgIDEyMywgICAgIDAsICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDE1LAorICAgICAwLCAgIDEwNywgICAxMDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLAorICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMTQsICAgMTE1LCAgICAgMCwgICAxMDIsICAgICAwLCAgIDI1MiwgICAxMTcsICAgICAwLAorICAgMTAzLCAgIDEwNCwgICAxMTgsICAgMTA1LCAgIDExOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLAorICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDE1LCAgICAgMCwgICAxMDcsICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAxMDksICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTExLCAgIDExMiwgICAxMTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgIDExNSwgICAgIDAsICAgNTA5LAorICAgICAwLCAgIDI1NCwgICAxMTcsICAgICAwLCAgIDEwMywgICAxMDQsICAgMTE4LCAgIDEwNSwgICAxMTksICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMSwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMiwgICAxMjMsICAgICAwLCAgICAgMCwgICAxMDYsICAgICAwLCAgICAxNSwgICAgIDAsICAgMTA3LAorICAgMTA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICAgMCwgICAgIDAsICAgMTEwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTE0LCAgIDExNSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTYsICAgMTE3LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgMTE4LCAgICAgMCwgICAxMTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgIDEyMSwgICAgIDAsICAgICAwLCAgIDU0NCwgICAxMjIsICAgMTIzLCAgICAgNSwgICAgIDAsICAgICA3LAorICAgMTQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICA1NDQsICAgICAwLCAgICAgMCwgICAgIDUsICAgICAwLCAgICAgNywgICAxNDAsICAgICAwLAorICAgICAwLCAgICAxMywgICAgIDAsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTYsICAgIDEzLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LCAgICAgMCwgIC0xMjgsICAgICA1LAorICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgIDIyLCAgLTQzOSwgIC00MzksICAtNDM5LCAgICAgMCwgICAgMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgNTQ1LCAgLTQzOSwgICAgMTIsICAgIDEzLCAgICAgMCwgICAgMTQsICAgIDE1LCAgICAgMCwgICAgMjIsICAtNDM4LAorICAtNDM4LCAgLTQzOCwgICAgIDAsICAgIDI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA1NDUsICAtNDM4LAorICAgIDE2LCAgICAgMCwgICAgIDAsICAgIDE3LCAgICAxOCwgIC0xMjgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgLTEyOCwgICAgIDAsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAwLCAgICAgNCwgICAgMjcsICAtMTI4LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTMsICAgICA0LAorICAgIDE0LCAgLTEyOCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgMTYsICAgICAwLCAgICAgMCwgICA1MzAsICAgNTMxLAorICAtMTI4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTQsICAtMTI4LAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMiwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMjQsICAgIDE2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNywgIC0xMjgsICAgNDQwLAorICAgICAwLCAgIDQ0MSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgLTEyOCwgICA0NDIsICAgICAwLAorICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgMjIsICAgICAwLCAgICAgMCwgICA0NDAsICAgICAwLAorICAgIDI0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgMjcsICAgIDEzLCAgIDQ0MiwgICAgMTQsICAgICA5LAorICAgIDEwLCAgICAxMSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICA5LCAgICAxMCwgICAgMTEsICAgIDE2LCAgICAgMCwgICAgMTMsICAgICAwLCAgICAxNCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTQsICAgICA5LAorICAgIDEwLCAgICAxMSwgICAgMTYsICAgICAwLCAgICAgMCwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgIDI0LCAgICAgMCwgICAgIDAsICAgIDE2LCAgLTM4NCwgICAgMTMsICAgICAwLCAgICAxNCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMiwgICAyMjgsICAgICAwLCAgICAgMCwgICAgIDUsICAgIDI0LAorICAgICA3LCAgIDE0MCwgICAgMTYsICAtMzg0LCAgICAgMCwgICAgMjIsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLAorICAgIDI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICA1OTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMTMsICAgICAwLCAgICAyMiwgICAgMTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI0LAorICAgICAwLCAgICAgMCwgICAxNDksICAgMTUwLCAgIDgzNCwgICAxNTEsICAgMTUyLCAgICAgMCwgICAgIDAsICAgIDE2LAorICAgMTUzLCAgIDE1NCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxNjEsICAgMTYyLAorICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LCAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgICAwLAorICAgICAwLCAgICAyMiwgICAgIDAsICAgIDE0LCAgICAgMCwgICAgIDAsICAgIDI0LCAgIDE3MiwgICAyNTYsICAgMjU3LAorICAgMjU4LCAgICAgMCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LAorICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgICAwLCAgICAgMCwgICAxNzMsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0OSwgICAxNTAsICAgICAwLCAgIDE1MSwgICAxNTIsICAgICAwLAorICAgICAwLCAgIDE3NCwgICAxNTMsICAgMTU0LCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1OCwgICAxNTksICAgMTYwLAorICAgMTYxLCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjYsICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTcwLAorICAgMTcxLCAgICAgMCwgICAxNDksICAgMTUwLCAgICAgMCwgICAxNTEsICAgMTUyLCAgICAgMCwgICAgIDAsICAgMzczLAorICAgMTUzLCAgIDE1NCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxNjEsICAgMTYyLAorICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LCAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE3MiwgICAxNDksICAgMTUwLAorICAgICAwLCAgIDE1MSwgICAxNTIsICAgMTc0LCAgICAgMCwgICAgIDAsICAgMTUzLCAgIDE1NCwgICAxNTUsICAgMTU2LAorICAgMTU3LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LAorICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTcwLCAgIDE3MSwgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDAsICAgICA3LAorICAgMjkwLCAgIDE3NCwgICAgIDAsICAgNTgyLCAgICAgMCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDUsICAgICA2LAorICAgICA3LCAgICAgOCwgICAgIDAsICAgICAwLCAgIDQ0MiwgICAgIDAsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLAorICAgICAwLCAgICAxMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMTMsICAgICAwLCAgICAxNCwgICAgIDAsICAgICAwLCAgIDE3NCwgICAgMTYsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgMjgzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LAorICAgICAwLCAgICAgMCwgICAyODQsICAgMjg1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAyMiwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgIDI0LCAgICAgMCwgICA2MzAsICAgICAwLAorICAgICA5LCAgICAxMCwgICAgMTEsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTQsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgICAxMywgICAgIDAsICAgIDE0LAorICAgICA5LCAgICAxMCwgICAgMTEsICAgIDE2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICA1LCAgICAgMCwgICAgIDcsICAgMTQwLCAgICAxNiwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDksICAgIDEwLAorICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA1LAorICAgIDI0LCAgICAgNywgICAyOTAsICAgIDE2LCAgICAxMywgICAgIDAsICAgIDIyLCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAwLCAgICAyNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAxNiwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgIDI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgIDE2LCAgICAgMCwgICAgIDAsICAgIDIyLCAgIDg1NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjQsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAwLCAgICAgMCwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNCwgICAgIDAsICAgMjU2LAorICAgMjU3LCAgIDI1OCwgICA4NTUsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsICAgMjY1LAorICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI1NiwgICAyNTcsICAgMjU4LAorICAgODkzLCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgMjY3LAorICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAgIDAsICAgMjU5LAorICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LAorICAgMjcwLCAgIDI3MSwgICAyNzIKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPSB7ICAgICA5LAorICAgIDEwLCAgICAxMSwgICAyMDksICAgIDI0LCAgICAgMiwgICAgIDMsICAgIDE2LCAgICA2MCwgICAgNjEsICAgIDE5LAorICAgIDIwLCAgIDMxOCwgICAyMDgsICAgIDIzLCAgICA4MywgICAgMjUsICAgIDI2LCAgICAgMiwgICAgIDMsICAgICAyLAorICAgICAzLCAgICAzMywgICAgIDIsICAgICAzLCAgICA5MSwgICAgMjIsICAgIDg1LCAgICAyNCwgICAgNjYsICAgIDM2LAorICAgMzI2LCAgIDE3NywgICAgOTgsICAgIDMxLCAgIDIwMywgICAgMzMsICAgMzQ1LCAgIDI0MywgICAyODgsICAgMzQ3LAorICAgNDc2LCAgICAzOSwgICAzNTEsICAgIDMzLCAgICAzMSwgICAyNzcsICAgIDY3LCAgICA5OCwgICAgMzIsICAgIDMzLAorICAgIDcxLCAgIDI4NCwgICAxNDIsICAgNTUyLCAgICAzOSwgICAxNDUsICAgIDM5LCAgIDE3NywgICA0MTAsICAgIDM5LAorICAgNjM1LCAgIDEwNywgICAxMDgsICAgMzMzLCAgICA3NCwgICA0MzMsICAgMTk0LCAgIDExMywgICAyMDQsICAgIDU4LAorICAgIDY3LCAgICA2MSwgICA3MzUsICAgIDgwLCAgICA3MSwgICA4MTcsICAgICAxLCAgIDIwMCwgICAxMjQsICAgIDc3LAorICAgICAxLCAgICA4OCwgICA0MzEsICAgICAxLCAgICA5NCwgICAgODMsICAgICA5LCAgICA4NSwgICAgMzgsICAgMTM1LAorICAgIDc3LCAgICAgMSwgICAgMTAsICAgIDkxLCAgICA0NSwgICAgMzgsICAgIDI3LCAgICAzOCwgICAgODUsICAgMTA5LAorICAgMjQ2LCAgICAgMywgICAgIDQsICAgMTE2LCAgICAgMywgICAgMzgsICAgNzE0LCAgICAgMywgICAgOTgsICAgIDU5LAorICAgIDMwLCAgICAgNywgICAgIDMsICAgICA0LCAgIDI4MywgICAgOTgsICAgICA3LCAgIDMyNCwgICAgMzgsICAgICA1LAorICAgICAxLCAgICAgNywgICAgIDMsICAgICA0LCAgIDczMiwgICA4NjcsICAgMTE2LCAgICAgMCwgICAgNTksICAgIDYwLAorICAgIDgxLCAgICAgMCwgICAgODIsICAgIDc2LCAgICAzMCwgICAgNzYsICAgMTQ2LCAgIDgwMCwgICAxNDgsICAgIDMwLAorICAgIDM5LCAgICAgMywgICAgIDQsICAgIDc2LCAgICA1OSwgICA4ODcsICAgMTk5LCAgIDIxNCwgICA4OTAsICAgIDU5LAorICAgODkyLCAgIDg5MSwgICA0MjIsICAgIDc2LCAgICA1MCwgICAxNDUsICAgIDc3LCAgICA4MiwgICA5MDAsICAgIDUwLAorICAgMTczLCAgICA1OSwgICAxNzIsICAgIDU5LCAgICA4MiwgICAgNjcsICAgNDE2LCAgIDIzMywgICAgNTksICAgIDU5LAorICAgIDcyLCAgICAgMywgICAxODIsICAgMTgzLCAgIDQwNywgICAxODUsICAgMTg2LCAgICA1OSwgICAgNjAsICAgOTE5LAorICAgODQzLCAgICA3MiwgICAyMzMsICAgMTczLCAgICA3NywgICAgNzgsICAgIDY3LCAgIDQxOSwgICAgMzgsICAgNTM4LAorICAgOTMyLCAgICA3MiwgICAyNDUsICAgMTkxLCAgICA3NiwgICAgNDUsICAgMTk0LCAgIDE5NSwgICAgMzAsICAgNjk4LAorICAgNjk5LCAgIDIwOCwgICAgNDUsICAgMzM5LCAgIDE5MSwgICAgNjcsICAgMjA0LCAgIDM0MywgICAxOTUsICAgIDU5LAorICAgIDcyLCAgIDMzNCwgICAyMTksICAgIDc3LCAgIDM0MiwgICAyMjUsICAgMjE0LCAgIDIwNCwgICAgNTAsICAgNTI2LAorICAgIDgyLCAgIDI4OCwgICAzNDUsICAgNjU5LCAgICAzOCwgICAyNzgsICAgIDMwLCAgICA1OSwgICAzNTEsICAgNTIwLAorICAgMzc2LCAgICA0NSwgICAyODUsICAgNTI0LCAgIDI0NywgICAzNTgsICAgIDgyLCAgIDM2MCwgICAyNDgsICAgMjUyLAorICAgICAzLCAgIDI1NCwgICAyMzIsICAgMjMzLCAgIDYxMiwgICAyMzQsICAgMjMwLCAgIDIzNiwgICAyMzIsICAgNTE5LAorICAgMjMzLCAgICA2OCwgICAgNjksICAgIDcwLCAgIDYwMywgICAgIDMsICAgICA0LCAgIDI0NywgICA4MzMsICAgICAzLAorICAgICA0LCAgICA3OCwgICAyNTIsICAgIDM4LCAgIDI1NCwgICAyNzUsICAgMjc2LCAgICAzMCwgICAgIDMsICAgICA0LAorICAgIDQ1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgNTY3LCAgIDYyOSwgICAgNjUsICAgNTcwLAorICAgICAzLCAgICAgNCwgICAgIDMsICAgICA0LCAgICAgNywgICAgNzcsICAgIDMwLCAgICA1MCwgICAzMDEsICAgIDgxLAorICAgMzExLCAgICA4MiwgICA3MjgsICAgIDgyLCAgICAzOCwgICAzNDgsICAgIDU5LCAgICA2MCwgICA2MDUsICAgMzA5LAorICAgIDc2LCAgICA1OSwgICAgNjAsICAgIDU5LCAgICA2MCwgICAgODEsICAgIDUwLCAgICAzMCwgICA1NzgsICAgIDMwLAorICAgIDU5LCAgIDMwMSwgICA4MTEsICAgIDU5LCAgIDMxMSwgICAgNTksICAgIDUwLCAgICAzOCwgICAgNzYsICAgIDY3LAorICAgIDc2LCAgICAgMywgICAgIDQsICAgMzY5LCAgICA3MiwgICAgNTksICAgIDYwLCAgICA1MCwgICAgNzIsICAgIDUwLAorICAgMzI4LCAgIDMzOCwgICAgNjcsICAgMzg2LCAgICA4MiwgICAgNjcsICAgIDU5LCAgICA3MiwgICAgNTksICAgNDg1LAorICAgIDcyLCAgIDMzOSwgICAgIDcsICAgMzUzLCAgIDM0MiwgICAzNDMsICAgIDU5LCAgICA4MiwgICAgMzAsICAgNDE2LAorICAgNTgyLCAgICA3MiwgICAzMzksICAgNTU5LCAgICA3OCwgICAgIDQsICAgMzQzLCAgICAgNiwgICAgIDcsICAgNTkxLAorICAgIDc4LCAgIDQxNCwgICAgNzcsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDgxLCAgIDUxMywgICAgNTAsICAgIDMwLAorICAgIDU5LCAgIDQzNywgICAgNTksICAgIDc2LCAgICAgMywgICAgIDQsICAgIDMwLCAgICA1OSwgICAgODEsICAgIDI4LAorICAgIDc2LCAgIDY4OCwgICAgNDgsICAgIDQ5LCAgIDY1NCwgICAgNTAsICAgNDM3LCAgIDY1NywgICA2MjEsICAgNjM5LAorICAgIDcyLCAgICA4MSwgICA3MDAsICAgNTEzLCAgICA1OSwgICAgNjAsICAgIDQ1LCAgICA2MywgICAgNTksICAgIDYwLAorICAgICAzLCAgICAgNCwgICA4MzgsICAgIDc3LCAgICAgOSwgICAgNTksICAgIDYwLCAgICA4MSwgICA0MTgsICAgNDMwLAorICAgICAzLCAgICAgNCwgICA0MTAsICAgNDI2LCAgICA3NiwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNjcsICAgIDgxLAorICAgIDc1LCAgICA1MCwgICAyMjcsICAgIDcyLCAgIDQyMiwgICAgNzgsICAgNjIyLCAgIDQyNSwgICAgNzcsICAgIDc4LAorICAgMjM1LCAgICA3NiwgICA0NDQsICAgNDMwLCAgICA3NiwgICA0MzMsICAgNDI2LCAgIDQyMiwgICAgNjcsICAgNTg1LAorICAgIDc3LCAgIDY3MywgICA0MjIsICAgIDcyLCAgICA4MSwgICA0NTcsICAgNDQ0LCAgIDQzNywgICA0MzMsICAgNDMzLAorICAgNTczLCAgIDYyMCwgICAgMzgsICAgNDMzLCAgIDQ0NCwgICA1NzgsICAgIDU5LCAgIDYyNiwgICAgODIsICAgNDQzLAorICAgNDQ0LCAgIDcxMSwgICA1NTIsICAgNTUzLCAgICA2NywgICA2OTgsICAgIDU5LCAgIDQ1NywgICAgMjcsICAgIDcyLAorICAgMjUxLCAgICAzMCwgICA3MDUsICAgIDc3LCAgICA2NywgICAyNTYsICAgMjU3LCAgICAzNiwgICAgNTksICAgIDcyLAorICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLAorICAgMjcxLCAgIDI3MiwgICAgNTksICAgIDYwLCAgICA1NCwgICAgNTUsICAgODAzLCAgICA1NywgICAgNTgsICAgIDU5LAorICAgIDYwLCAgIDUxMSwgICAgNzYsICAgNTE1LCAgICA3NiwgICA1NzQsICAgIDc3LCAgICA4MSwgICAgMzYsICAgIDgxLAorICAgIDgxLCAgICA3NywgICAgIDMsICAgICA0LCAgICA2NywgICAgODEsICAgIDc2LCAgIDUxNSwgICAgNzcsICAgIDgxLAorICAgNTE4LCAgICA3NywgICAgODEsICAgNTM1LCAgIDczMCwgICA1MTUsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDc2LAorICAgNTE0LCAgICA3NiwgICA2NTUsICAgNTE4LCAgIDY1NywgICA1MzMsICAgIDc4LCAgIDUzNSwgICA1MTgsICAgIDMwLAorICAgIDc3LCAgIDM0NiwgICAgNTksICAgIDYwLCAgICA4MSwgICA1MzUsICAgNTMzLCAgIDYxNiwgICA2MTcsICAgNjE1LAorICAgNTM0LCAgIDUzNSwgICA2MTEsICAgIDgyLCAgIDU1MiwgICA1NTMsICAgIDc2LCAgIDU0NywgICA1NTYsICAgIDUwLAorICAgNzY2LCAgICA3NywgICA1NDYsICAgNTQ3LCAgIDYxNSwgICA1NTIsICAgNTUzLCAgIDU3NywgICAgNTksICAgNjA3LAorICAgNjA4LCAgIDM1MiwgICA2MzksICAgODgyLCAgIDU2NCwgICA4ODQsICAgNTc0LCAgICA3NywgICA2MzcsICAgNTYzLAorICAgNTY0LCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwgICA3NTQsICAgIDUwLCAgICA1MSwgICAgNTIsICAgICAzLAorICAgICA0LCAgIDYwMSwgICAgNzgsICAgICA3LCAgICAzOCwgICAgIDMsICAgICA0LCAgICA3NywgICA1OTYsICAgIDc3LAorICAgIDc3LCAgICA4MSwgICAgIDMsICAgIDgxLCAgICA4MSwgICAgNTksICAgICA3LCAgIDM4OCwgICAzODksICAgNTk2LAorICAgIDc3LCAgICA3OCwgICA2MTAsICAgNjExLCAgIDYxMiwgICA2MjIsICAgIDMwLCAgICA3NiwgICA2MTYsICAgNjE3LAorICAgIDU5LCAgICA2MCwgICAgMzAsICAgNjIxLCAgIDYxMSwgICA2MTUsICAgIDc3LCAgIDYxMiwgICA2MTIsICAgIDMwLAorICAgOTI2LCAgIDYyOSwgICA2MTIsICAgIDEwLCAgIDYyMSwgICAgNzYsICAgIDUwLCAgIDYzNSwgICA5MzQsICAgNjM3LAorICAgIDc3LCAgICA3OCwgICAgNTAsICAgIDYzLCAgIDcxMSwgICAgNTksICAgIDYwLCAgICA4MiwgICA3MDEsICAgIDUwLAorICAgNjM3LCAgICA1OSwgICAgNjAsICAgIDc2LCAgIDY2NCwgICA4NjIsICAgIDU5LCAgICA2MCwgICAgNTksICAgIDYwLAorICAgMTI4LCAgIDEyOSwgICA4NjgsICAgICA1LCAgICAgNiwgICAgIDcsICAgNDcxLCAgICAyNywgICAgIDksICAgIDM2LAorICAgIDEyLCAgICAxMywgICAgMTQsICAgNDc4LCAgIDQ3OSwgICAgNTQsICAgIDU1LCAgIDczMCwgICAgNTcsICAgIDU4LAorICAgIDU5LCAgICA2MCwgICAgIDEsICAgNzUyLCAgICA4MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIDI3LAorICAgIDc3LCAgICAxMCwgICAgMzAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDc4LCAgICA3OCwgICAgMzYsICAgIDM4LAorICAgNjk4LCAgIDY5OSwgICAgNzYsICAgOTA5LCAgIDkxMCwgICAgNzgsICAgIDc4LCAgIDcwNSwgICAgNzYsICAgIDI4LAorICAgNzIwLCAgIDY5OCwgICA2OTksICAgNzY2LCAgIDQ5NSwgICAgNzYsICAgIDM4LCAgICA3NiwgICA3MDUsICAgIDc2LAorICAgNzMwLCAgICA1OSwgICAgNjAsICAgIDc2LCAgIDc3NywgICAgNzYsICAgIDQ1LCAgICA3NiwgICAgIDQsICAgICA1LAorICAgICA2LCAgICAgNywgICA3MzAsICAgICA1LCAgICAgNiwgICAgIDcsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDc3LAorICAgIDEyLCAgICAxMywgICAgMTQsICAgIDgxLCAgICA3NiwgICA3MzAsICAgNzQ0LCAgIDczMCwgICAgNjcsICAgIDgzLAorICAgNzMwLCAgIDc5NywgICAgMjgsICAgIDcyLCAgIDc1MiwgICAgODMsICAgNzY2LCAgIDc0NCwgICAgMzAsICAgODgyLAorICAgNzgxLCAgIDg4NCwgICA4MTUsICAgIDgyLCAgIDgzMywgICA4MTgsICAgODE5LCAgIDU3MiwgICA3NzgsICAgIDQ1LAorICAgIDc2LCAgICAgNiwgICAgIDcsICAgODI2LCAgICA4MiwgICA3ODcsICAgODM1LCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgIDYzLCAgICA2MywgICAgNzYsICAgNzgwLCAgIDc4MSwgICA1NjYsICAgIDc2LCAgICAzNiwgICA4NDEsICAgNzg3LAorICAgIDgzLCAgICA2NywgICAgNzgsICAgIDgxLCAgICAzMiwgICA4NDgsICAgIDcyLCAgIDc4NywgICAgMzgsICAgNzk3LAorICAgNTgxLCAgICA3NywgICA3ODYsICAgNzg3LCAgICA4MywgICAgNzYsICAgODU5LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgIDUxLCAgICA1MiwgICA3OTcsICAgODExLCAgIDc5NywgICA4NjgsICAgIDc3LCAgIDc5NywgICA2MjMsICAgNjI0LAorICAgNjI1LCAgICA4MSwgICA2MjcsICAgNjI4LCAgIDgxMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICA4MzMsICAgICAzLCAgIDgzNSwgICA4OTEsICAgICAxLAorICAgIDc2LCAgICAgMywgICAgMzgsICAgIDc3LCAgICA3NywgICA2NTAsICAgICA4LCAgICAgOSwgICA4MzUsICAgIDExLAorICAgICAxLCAgICA4MywgICAgNjMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICA3OCwgICA4NjgsICAgIDc4LAorICAgOTEzLCAgICAxMiwgICAgMTMsICAgIDE0LCAgIDY0NSwgICAgMzgsICAgOTE5LCAgICAyOSwgICA2NDksICAgIDMxLAorICAgIDM4LCAgICAzMywgICAgMzQsICAgIDc4LCAgIDY3OSwgICA2ODAsICAgNjgxLCAgICAyOCwgICAgNDAsICAgIDMwLAorICAgIDgxLCAgICA0MywgICAgNjMsICAgIDM4LCAgICA4MSwgICAgNzgsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDM2LAorICAgIDM4LCAgICA2MywgICAgNTQsICAgIDU1LCAgICA0NSwgICAgODMsICAgNjc3LCAgICA1OSwgICAgNjAsICAgIDc4LAorICAgIDU5LCAgICA1OSwgICAgNjQsICAgIDU5LCAgICA2NiwgICAgMzgsICAgIDc3LCAgICA3NywgICAgIDcsICAgIDcxLAorICAgIDM4LCAgIDcxNiwgICA2OTMsICAgIDc1LCAgICA3NywgICAgMTYsICAgIDY3LCAgICA3OSwgICAgODAsICAgIDU5LAorICAgIDgyLCAgICA3MiwgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgIDUyLCAgICA4MiwgICAgIDEsICAgNzE0LCAgICAgMywgICAgIDQsICAgNzE3LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICA5LCAgICA3NywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDc4LCAgICA3NywgICAgNzcsICAgIDU5LAorICAgIDYzLCAgIDczMiwgICAgNzYsICAgIDE3LCAgIDczNSwgICAgIDksICAgIDc3LCAgICA3NiwgICA3NjMsICAgIDI4LAorICAgIDI5LCAgICA3NywgICAgMzEsICAgIDc3LCAgICAzMywgICAgMzQsICAgIDc3LCAgICA3NiwgICAgNzYsICAgIDU5LAorICAgNzUxLCAgICA0MCwgICAgNzcsICAgIDc3LCAgICA0MywgICAgODEsICAgIDQ1LCAgICA3NywgICAgNzYsICAgIDQ4LAorICAgIDQ5LCAgICA1MCwgICAgNzYsICAgICAwLCAgICA3NywgICAgNTQsICAgIDU1LCAgICAgMCwgICA0MTksICAgODE4LAorICAgIDU5LCAgICA2MCwgICA3NzMsICAgMjkxLCAgIDMzNCwgICAgNjQsICAgNjU1LCAgICA2NiwgICAgNjcsICAgNzk3LAorICAgIDg3LCAgIDQxOCwgICAgNzEsICAgIDcyLCAgIDYzOCwgICA2NDUsICAgIDc1LCAgIDM1NSwgICAyMzMsICAgNTczLAorICAgIDc5LCAgICA4MCwgICAyMjUsICAgIDgyLCAgIDM2MCwgICA4NjgsICAgMzUzLCAgIDY1NSwgICA1NzksICAgODAwLAorICAgODY4LCAgICAgMSwgICA2NTcsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgOTE0LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgOTE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgIDMwLCAgICAzMSwgICA1NTYsICAgIDMzLCAgICAzNCwgICA0MTMsICAgNDI1LCAgICAyNSwgICA1NDMsICAgNDI1LAorICAgIDQwLCAgIDc1MiwgICA4NDMsICAgIDQzLCAgIDc0OSwgICAgNDUsICAgNjE3LCAgIDUzNiwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgIDMxMCwgICA1MTgsICAgODU0LCAgICA1NCwgICAgNTUsICAgNzQ0LCAgIDUxMywgICA0MjEsICAgIDU5LAorICAgIDYwLCAgIDY3MywgICA1ODUsICAgIC0xLCAgICA2NCwgICA0MjEsICAgIDY2LCAgICA2NywgICAgLTEsICAgMzc2LAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NywgICAgNzgsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgIC0xLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgIDMwLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIC0xLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NywgICAgNzgsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIC0xLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIC0xLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIDM3LCAgICAxMSwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgNTgsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIC0xLCAgICAxMSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgNTgsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgICAzLCAgICAgNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIC0xLCAgICAxMSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgIC0xLCAgICAgNiwgICAgIDcsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LAorICAgIDQwLCAgICAtMSwgICAgMzEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIDQ1LCAgICAtMSwgICAgNTgsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIDc5LAorICAgIDgwLCAgICAgMSwgICAgODIsICAgIDcyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgNzcsICAgIDc4LAorICAgIC0xLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxLCAgICAtMSwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAyNywgICAgMjgsICAgIC0xLAorICAgIDMwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgLTEsICAgIDM2LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNDUsICAgIDI3LCAgICAyOCwgICAgLTEsICAgIDMwLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NywgICAgNTksICAgIDYwLAorICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc3LCAgICAtMSwgICAgLTEsICAgICAxLAorICAgIDgxLCAgICA4MiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDEsICAgIC0xLAorICAgIC0xLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgMjcsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDEyLAorICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgIDUxLCAgICA1MiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjgsICAgICAxLCAgICAzMCwgICAgLTEsICAgICA0LAorICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgIC0xLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDcyLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLAorICAgIDgyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgIDcyLAorICAgIDQ1LCAgICAtMSwgICAgLTEsICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgLTEsICAgIDgyLAorICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgIDUxLCAgICA1MiwgICAgNjcsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMxLCAgICA3MiwgICAgMzMsICAgIDM0LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICA4MiwgICAgNDMsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LAorICAgIDU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLCAgICAgMywgICAgLTEsICAgIDY0LAorICAgIC0xLCAgICA2NiwgICAgIDgsICAgICA5LCAgICAtMSwgICAgMTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgODMsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU5LCAgICA2MCwgICAgLTEsICAgICAzLCAgICAtMSwgICAgNjQsICAgIC0xLAorICAgIDY2LCAgICAgOCwgICAgIDksICAgIC0xLCAgICAxMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICA4MywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNTksICAgIDYwLCAgICAtMSwgICAgIDMsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDY2LAorICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIDgzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLCAgICAgMywgICAgLTEsICAgIDY0LCAgICAtMSwgICAgNjYsICAgICA4LAorICAgICA5LCAgICAtMSwgICAgMTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgODMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LAorICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDU5LCAgICA2MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjQsICAgIC0xLCAgICA2NiwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICA4MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAorICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY0LCAgICAtMSwgICAgNjYsICAgIDY3LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICA3MiwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIDc3LAorICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICA4MiwgICAgIDMsICAgICA0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICA4LCAgICAgOSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxNSwgICAgLTEsICAgIDE3LAorICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgICAzLAorICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLCAgICAgOCwgICAgIDksICAgIDY0LCAgICAxMSwgICAgNjYsICAgIDY3LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICA3MiwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIDc3LAorICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICA4MiwgICAgMjksICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLAorICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDU0LCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTksICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDY0LCAgICAtMSwgICAgNjYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzksICAgIDgwLCAgICAtMSwgICAgODIsICAgICAzLAorICAgICA0LCAgICAtMSwgICAgIDYsICAgICA3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAzOCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgICA0LAorICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgIC0xLCAgICAtMSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICA0MCwgICAgMzAsICAgIC0xLCAgICA0MywgICAgNzIsICAgIDQ1LAorICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgNTQsICAgIDU1LAorICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIDU5LCAgICA2MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjQsICAgIC0xLAorICAgIDY2LCAgICA2NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIDcyLCAgICAtMSwgICAgLTEsICAgIDc1LAorICAgIC0xLCAgICAtMSwgICAgNjcsICAgIDc5LCAgICA4MCwgICAgIDMsICAgICA0LCAgICA3MiwgICAgIDYsICAgICA3LAorICAgICA4LCAgICAgOSwgICAgNzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLAorICAgIDI4LCAgICAyOSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIC0xLAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgICAzLAorICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLCAgICAgOCwgICAgIDksICAgIDY0LCAgICAxMSwgICAgNjYsICAgIDY3LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICA3MiwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLAorICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDU0LCAgICA1NSwgICAgLTEsICAgICAzLCAgICAtMSwgICAgNTksICAgIDYwLCAgICAtMSwgICAgIDgsICAgICA5LAorICAgIDY0LCAgICAxMSwgICAgNjYsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzksICAgIDgwLCAgICAtMSwgICAgLTEsICAgIDI5LAorICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAgMywgICAgLTEsICAgIDU5LAorICAgIDYwLCAgICAtMSwgICAgIDgsICAgICA5LCAgICA2NCwgICAgMTEsICAgIDY2LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIDc5LAorICAgIDgwLCAgICAtMSwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LAorICAgIC0xLCAgICAgMywgICAgLTEsICAgIDU5LCAgICA2MCwgICAgLTEsICAgICA4LCAgICAgOSwgICAgNjQsICAgIDExLAorICAgIDY2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc5LCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMxLAorICAgIC0xLCAgICAzMywgICAgMzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLAorICAgIC0xLCAgICA0MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLAorICAgICA4LCAgICAgOSwgICAgNjQsICAgIDExLCAgICA2NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLAorICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgICAzLAorICAgIC0xLCAgICA1OSwgICAgNjAsICAgIC0xLCAgICAgOCwgICAgIDksICAgIDY0LCAgICAxMSwgICAgNjYsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3OSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMzLAorICAgIDM0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDU0LCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTksICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDY0LCAgICAtMSwgICAgNjYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAgMSwgICAgNzksICAgIDgwLCAgICAgNCwgICAgLTEsICAgICA2LAorICAgICA3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgIC0xLCAgICAgNiwgICAgIDcsICAgIC0xLAorICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDI4LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgIDMsICAgICA0LAorICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDc3LCAgICA3OCwgICAgMjcsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgNjcsICAgIDY4LAorICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzcsICAgIDc4LAorICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1OSwgICAgLTEsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAorICAgIC0xLCAgICAgMSwgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjgsICAgICAxLAorICAgIDMwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDU5LAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNzIsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NywgICAgNTAsICAgICAxLAorICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICA1OSwgICAgMTAsICAgIC0xLAorICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgIDEsICAgIC0xLAorICAgIDcyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgNzcsICAgIDI4LCAgICAxMCwgICAgMzAsICAgIDEyLAorICAgIDEzLCAgICAxNCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDEyLCAgICAxMywgICAgMTQsICAgIDQ1LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIDEyLAorICAgIDEzLCAgICAxNCwgICAgNDUsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDcyLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA3NiwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2NywgICAgIDEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgIDcyLAorICAgICA2LCAgICAgNywgICAgNDUsICAgIDc2LCAgICAtMSwgICAgNjcsICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLAorICAgIDcyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgMjgsICAgIC0xLCAgICA2NywgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcyLAorICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICA3NywgICAgIDYsICAgICA3LCAgICAtMSwgICAgLTEsICAgIDQ1LAorICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIC0xLAorICAgIC0xLCAgICA2NywgICAgLTEsICAgIDMwLCAgICAtMSwgICAgLTEsICAgIDcyLCAgICAzOCwgICAgMzUsICAgIDM2LAorICAgIDM3LCAgICAtMSwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgNTksICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgIC0xLCAgICAgNiwgICAgIDcsICAgIC0xLAorICAgIC0xLCAgICA3MiwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgIDI5LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAtMSwgICAgIDYsICAgICA3LCAgICAtMSwgICAgLTEsICAgIDM4LAorICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgIDMsICAgICA0LAorICAgIC0xLCAgICAgNiwgICAgIDcsICAgIDcyLCAgICAtMSwgICAgLTEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgLTEsICAgIC0xLCAgICAgNCwgICAgLTEsICAgICA2LAorICAgICA3LCAgICA3MiwgICAgLTEsICAgIDM4LCAgICAtMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDQsICAgICA1LAorICAgICA2LCAgICAgNywgICAgLTEsICAgIC0xLCAgICAxMCwgICAgLTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIC0xLAorICAgIC0xLCAgICAyOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIC0xLCAgICA3MiwgICAgNDUsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LAorICAgIC0xLCAgICAtMSwgICAgNTksICAgIDYwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDY3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA2NywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIDcyLCAgICAtMSwgICAgMTAsICAgIC0xLAorICAgIDEyLCAgICAxMywgICAgMTQsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAtMSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMzAsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDMwLAorICAgIDEyLCAgICAxMywgICAgMTQsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICA0LCAgICAtMSwgICAgIDYsICAgICA3LCAgICA0NSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMTIsICAgIDEzLAorICAgIDE0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA0LAorICAgIDcyLCAgICAgNiwgICAgIDcsICAgIDQ1LCAgICAyOCwgICAgLTEsICAgIDY3LCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgIC0xLCAgICA3MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDcyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIDY3LCAgICAxMCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzIsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgIC0xLCAgICAtMSwgICAgNjcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MiwgICAgLTEsICAgIDM1LAorICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgMzUsICAgIDM2LCAgICAzNywgICAgLTEsICAgIDM5LAorICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgIDUwLCAgICA1MSwgICAgNTIKK307CisvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLworI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi5zaW1wbGUiCisKKy8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQorICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCisKKyNpZm5kZWYgYWxsb2NhCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlIC8qIG5vdCBHTlUgQy4gICovCisjaWYgKCFkZWZpbmVkIChfX1NURENfXykgJiYgZGVmaW5lZCAoc3BhcmMpKSB8fCBkZWZpbmVkIChfX3NwYXJjX18pIHx8IGRlZmluZWQgKF9fc3BhcmMpIHx8IGRlZmluZWQgKF9fc2dpKQorI2luY2x1ZGUgPGFsbG9jYS5oPgorI2Vsc2UgLyogbm90IHNwYXJjICovCisjaWYgZGVmaW5lZCAoTVNET1MpICYmICFkZWZpbmVkIChfX1RVUkJPQ19fKQorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2Vsc2UgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjaWYgZGVmaW5lZChfQUlYKQorI2luY2x1ZGUgPG1hbGxvYy5oPgorICNwcmFnbWEgYWxsb2NhCisjZWxzZSAvKiBub3QgTVNET1MsIF9fVFVSQk9DX18sIG9yIF9BSVggKi8KKyNpZmRlZiBfX2hwdXgKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cit2b2lkICphbGxvY2EgKHVuc2lnbmVkIGludCk7Cit9OworI2Vsc2UgLyogbm90IF9fY3BsdXNwbHVzICovCit2b2lkICphbGxvY2EgKCk7CisjZW5kaWYgLyogbm90IF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19ocHV4ICovCisjZW5kaWYgLyogbm90IF9BSVggKi8KKyNlbmRpZiAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNlbmRpZiAvKiBub3Qgc3BhcmMuICAqLworI2VuZGlmIC8qIG5vdCBHTlUgQy4gICovCisjZW5kaWYgLyogYWxsb2NhIG5vdCBkZWZpbmVkLiAgKi8KKworLyogVGhpcyBpcyB0aGUgcGFyc2VyIGNvZGUgdGhhdCBpcyB3cml0dGVuIGludG8gZWFjaCBiaXNvbiBwYXJzZXIKKyAgd2hlbiB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorICBJdCB3YXMgd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBoYWlyeSBwYXJzZXIKKyAgdXNlZCB3aGVuICVzZW1hbnRpY19wYXJzZXIgaXMgc3BlY2lmaWVkLiAgKi8KKworLyogTm90ZTogdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBkb2xsYXIgc2lnbiBpbiB0aGlzIGZpbGUuCisgICBJdCBpcyByZXBsYWNlZCBieSB0aGUgbGlzdCBvZiBhY3Rpb25zLCBlYWNoIGFjdGlvbgorICAgYXMgb25lIGNhc2Ugb2YgdGhlIHN3aXRjaC4gICovCisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQktMgorI2RlZmluZSBZWUVPRgkJMAorI2RlZmluZSBZWUFDQ0VQVAlyZXR1cm4oMCkKKyNkZWZpbmUgWVlBQk9SVCAJcmV0dXJuKDEpCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4KKyAgIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5IHRvIGVhc2UgdGhlCisgICB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorI2RlZmluZSBZWUJBQ0tVUCh0b2tlbiwgdmFsdWUpIFwKK2RvCQkJCQkJCQlcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgeyB5eWNoYXIgPSAodG9rZW4pLCB5eWx2YWwgPSAodmFsdWUpOwkJCVwKKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgICAgWVlQT1BTVEFDSzsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7IHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7IFlZRVJST1I7IH0JXAord2hpbGUgKDApCisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKyNpZm5kZWYgWVlQVVJFCisjZGVmaW5lIFlZTEVYCQl5eWxleCgpCisjZW5kaWYKKworI2lmZGVmIFlZUFVSRQorI2lmZGVmIFlZTFNQX05FRURFRAorI2lmZGVmIFlZTEVYX1BBUkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCAmeXlsbG9jKQorI2VuZGlmCisjZWxzZSAvKiBub3QgWVlMU1BfTkVFREVEICovCisjaWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwpCisjZW5kaWYKKyNlbmRpZiAvKiBub3QgWVlMU1BfTkVFREVEICovCisjZW5kaWYKKworLyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUgKi8KKworI2lmbmRlZiBZWVBVUkUKKworaW50CXl5Y2hhcjsJCQkvKiAgdGhlIGxvb2thaGVhZCBzeW1ib2wJCSovCitZWVNUWVBFCXl5bHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZQkJKi8KKwkJCQkvKiAgbG9va2FoZWFkIHN5bWJvbAkJCSovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKK1lZTFRZUEUgeXlsbG9jOwkJCS8qICBsb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkCSovCisJCQkJLyogIHN5bWJvbAkJCQkqLworI2VuZGlmCisKK2ludCB5eW5lcnJzOwkJCS8qICBudW1iZXIgb2YgcGFyc2UgZXJyb3JzIHNvIGZhciAgICAgICAqLworI2VuZGlmICAvKiBub3QgWVlQVVJFICovCisKKyNpZiBZWURFQlVHICE9IDAKK2ludCB5eWRlYnVnOwkJCS8qICBub256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlCSovCisvKiBTaW5jZSB0aGlzIGlzIHVuaW5pdGlhbGl6ZWQsIGl0IGRvZXMgbm90IHN0b3AgbXVsdGlwbGUgcGFyc2VycworICAgZnJvbSBjb2V4aXN0aW5nLiAgKi8KKyNlbmRpZgorCisvKiAgWVlJTklUREVQVEggaW5kaWNhdGVzIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcwkqLworCisjaWZuZGVmCVlZSU5JVERFUFRICisjZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8qICBZWU1BWERFUFRIIGlzIHRoZSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0bworICAgIChlZmZlY3RpdmUgb25seSBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4gICovCisKKyNpZiBZWU1BWERFUFRIID09IDAKKyN1bmRlZiBZWU1BWERFUFRICisjZW5kaWYKKworI2lmbmRlZiBZWU1BWERFUFRICisjZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisjaWZkZWYgX19HTlVDX18KK2ludCB5eXBhcnNlICh2b2lkKTsKKyNlbmRpZgorDAorI2lmIF9fR05VQ19fID4gMQkJLyogR05VIEMgYW5kIEdOVSBDKysgZGVmaW5lIHRoaXMuICAqLworI2RlZmluZSBfX3l5X21lbWNweShGUk9NLFRPLENPVU5UKQlfX2J1aWx0aW5fbWVtY3B5KFRPLEZST00sQ09VTlQpCisjZWxzZQkJCQkvKiBub3QgR05VIEMgb3IgQysrICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitzdGF0aWMgdm9pZAorX195eV9tZW1jcHkgKGZyb20sIHRvLCBjb3VudCkKKyAgICAgY2hhciAqZnJvbTsKKyAgICAgY2hhciAqdG87CisgICAgIGludCBjb3VudDsKK3sKKyAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKKyAgcmVnaXN0ZXIgaW50IGkgPSBjb3VudDsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICAqdCsrID0gKmYrKzsKK30KKworI2Vsc2UgLyogX19jcGx1c3BsdXMgKi8KKworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5X21lbWNweSAoY2hhciAqZnJvbSwgY2hhciAqdG8sIGludCBjb3VudCkKK3sKKyAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKKyAgcmVnaXN0ZXIgaW50IGkgPSBjb3VudDsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICAqdCsrID0gKmYrKzsKK30KKworI2VuZGlmCisjZW5kaWYKKwwKKyNsaW5lIDE5MiAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi5zaW1wbGUiCisKKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgWVlQQVJTRV9QQVJBTSBhcyB0aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBiZSBwYXNzZWQKKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKyAgIEl0IHNob3VsZCBhY3R1YWxseSBwb2ludCB0byBhbiBvYmplY3QuCisgICBHcmFtbWFyIGFjdGlvbnMgY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUgYnkgY2FzdGluZyBpdAorICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAqLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbHNlCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0KKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisjZW5kaWYKKworaW50Cit5eXBhcnNlKFlZUEFSU0VfUEFSQU0pCisgICAgIFlZUEFSU0VfUEFSQU1fREVDTAoreworICByZWdpc3RlciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworICByZWdpc3RlciBZWVNUWVBFICp5eXZzcDsKKyAgaW50IHl5ZXJyc3RhdHVzOwkvKiAgbnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZCAqLworICBpbnQgeXljaGFyMSA9IDA7CQkvKiAgbG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIgKi8KKworICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgc3RhdGUgc3RhY2sJCQkqLworICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjawkJKi8KKworICBzaG9ydCAqeXlzcyA9IHl5c3NhOwkJLyogIHJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycyAqLworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CS8qICB0byBhbGxvdyB5eW92ZXJmbG93IHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUgKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAorICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSovCisgIFlZTFRZUEUgKnl5bHMgPSB5eWxzYTsKKyAgWVlMVFlQRSAqeXlsc3A7CisKKyNkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tLCB5eWxzcC0tKQorI2Vsc2UKKyNkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tKQorI2VuZGlmCisKKyAgaW50IHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyNpZmRlZiBZWVBVUkUKKyAgaW50IHl5Y2hhcjsKKyAgWVlTVFlQRSB5eWx2YWw7CisgIGludCB5eW5lcnJzOworI2lmZGVmIFlZTFNQX05FRURFRAorICBZWUxUWVBFIHl5bGxvYzsKKyNlbmRpZgorI2VuZGlmCisKKyAgWVlTVFlQRSB5eXZhbDsJCS8qICB0aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCisJCQkJLyogIHNlbWFudGljIHZhbHVlcyBmcm9tIHRoZSBhY3Rpb24JKi8KKwkJCQkvKiAgcm91dGluZXMJCQkJKi8KKworICBpbnQgeXlsZW47CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIik7CisjZW5kaWYKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5c3NwID0geXlzcyAtIDE7CisgIHl5dnNwID0geXl2czsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgPSB5eWxzOworI2VuZGlmCisKKy8qIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluICB5eXN0YXRlICAuICAqLworLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gc28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCit5eW5ld3N0YXRlOgorCisgICorK3l5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKyAgICB7CisgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2sgKi8KKyAgICAgIC8qIFVzZSBjb3BpZXMgb2YgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50byBtZW1vcnkuICovCisgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisgICAgICBzaG9ydCAqeXlzczEgPSB5eXNzOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOworI2VuZGlmCisKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgaW50IHNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YKKwkgdGhlIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgKi8KKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIC8qIFRoaXMgdXNlZCB0byBiZSBhIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywKKwkgYnV0IHRoYXQgbWlnaHQgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisgICAgICB5eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5c3MxLCBzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgJnl5bHMxLCBzaXplICogc2l6ZW9mICgqeXlsc3ApLAorCQkgJnl5c3RhY2tzaXplKTsKKyNlbHNlCisgICAgICB5eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5c3MxLCBzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgJnl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICB5eXNzID0geXlzczE7IHl5dnMgPSB5eXZzMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSB5eWxzMTsKKyNlbmRpZgorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoeXlzdGFja3NpemUgPj0gWVlNQVhERVBUSCkKKwl7CisJICB5eWVycm9yKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKwkgIHJldHVybiAyOworCX0KKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKyAgICAgIHl5c3MgPSAoc2hvcnQgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eXNzMSwgKGNoYXIgKil5eXNzLCBzaXplICogc2l6ZW9mICgqeXlzc3ApKTsKKyAgICAgIHl5dnMgPSAoWVlTVFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXl2c3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5dnMxLCAoY2hhciAqKXl5dnMsIHNpemUgKiBzaXplb2YgKCp5eXZzcCkpOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlscyA9IChZWUxUWVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eWxzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlsczEsIChjaGFyICopeXlscywgc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisjZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgc2l6ZSAtIDE7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzcCA9IHl5bHMgKyBzaXplIC0gMTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVkXG4iLCB5eXN0YWNrc2l6ZSk7CisjZW5kaWYKKworICAgICAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisJWVlBQk9SVDsKKyAgICB9CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSk7CisjZW5kaWYKKworICBnb3RvIHl5YmFja3VwOworIHl5YmFja3VwOgorCisvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKy8qIFJlYWQgYSBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworLyogeXlyZXN1bWU6ICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisKKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorICAgICBvciBhIHZhbGlkIHRva2VuIGluIGV4dGVybmFsIGZvcm0uICAqLworCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIik7CisjZW5kaWYKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworCisgIGlmICh5eWNoYXIgPD0gMCkJCS8qIFRoaXMgbWVhbnMgZW5kIG9mIGlucHV0LiAqLworICAgIHsKKyAgICAgIHl5Y2hhcjEgPSAwOworICAgICAgeXljaGFyID0gWVlFT0Y7CQkvKiBEb24ndCBjYWxsIFlZTEVYIGFueSBtb3JlICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIk5leHQgdG9rZW4gaXMgJWQgKCVzIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlIG1lYW5pbmcKKwkgICAgIG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyNpZmRlZiBZWVBSSU5UCisJICBZWVBSSU5UIChzdGRlcnIsIHl5Y2hhciwgeXlsdmFsKTsKKyNlbmRpZgorCSAgZnByaW50ZiAoc3RkZXJyLCAiKVxuIik7CisJfQorI2VuZGlmCisgICAgfQorCisgIHl5biArPSB5eWNoYXIxOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworCisgIC8qIHl5biBpcyB3aGF0IHRvIGRvIGZvciB0aGlzIHRva2VuIHR5cGUgaW4gdGhpcyBzdGF0ZS4KKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorICAgICBQb3NpdGl2ZSA9PiBzaGlmdCwgeXluIGlzIG5ldyBzdGF0ZS4KKyAgICAgICBOZXcgc3RhdGUgaXMgZmluYWwgc3RhdGUgPT4gZG9uJ3QgYm90aGVyIHRvIHNoaWZ0LAorICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisgICAgIDAsIG9yIG1vc3QgbmVnYXRpdmUgbnVtYmVyID0+IGVycm9yLiAgKi8KKworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisjZW5kaWYKKworICAvKiBEaXNjYXJkIHRoZSB0b2tlbiBiZWluZyBzaGlmdGVkIHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAoeXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgLyogY291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvciBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpIHl5ZXJyc3RhdHVzLS07CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisvKiBEbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KK3l5ZGVmYXVsdDoKKworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKy8qIERvIGEgcmVkdWN0aW9uLiAgeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KK3l5cmVkdWNlOgorICB5eWxlbiA9IHl5cjJbeXluXTsKKyAgaWYgKHl5bGVuID4gMCkKKyAgICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOyAvKiBpbXBsZW1lbnQgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJlZHVjaW5nIHZpYSBydWxlICVkIChsaW5lICVkKSwgIiwKKwkgICAgICAgeXluLCB5eXJsaW5lW3l5bl0pOworCisgICAgICAvKiBQcmludCB0aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0LiAgKi8KKyAgICAgIGZvciAoaSA9IHl5cHJoc1t5eW5dOyB5eXJoc1tpXSA+IDA7IGkrKykKKwlmcHJpbnRmIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW2ldXSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgLT4gJXNcbiIsIHl5dG5hbWVbeXlyMVt5eW5dXSk7CisgICAgfQorI2VuZGlmCisKKworICBzd2l0Y2ggKHl5bikgeworCitjYXNlIDE6CisjbGluZSAyMzcgIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGFuIGVtcHR5IHNvdXJjZSBmaWxlIik7CisJCSAgZmluaXNoX2ZpbGUgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI6CisjbGluZSAyNDIgIm9iamMtcGFyc2UueSIKK3sKKwkJICAvKiBJbiBjYXNlIHRoZXJlIHdlcmUgbWlzc2luZyBjbG9zZWJyYWNlcywKKwkJICAgICBnZXQgdXMgYmFjayB0byB0aGUgZ2xvYmFsIGJpbmRpbmcgbGV2ZWwuICAqLworCQkgIHdoaWxlICghIGdsb2JhbF9iaW5kaW5nc19wICgpKQorCQkgICAgcG9wbGV2ZWwgKDAsIDAsIDApOworCQkgIGZpbmlzaF9maWxlICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAzOgorI2xpbmUgMjU2ICJvYmpjLXBhcnNlLnkiCit7eXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDU6CisjbGluZSAyNTcgIm9iamMtcGFyc2UueSIKK3t5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTA6CisjbGluZSAyNjUgIm9iamMtcGFyc2UueSIKK3sgU1RSSVBfTk9QUyAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICBpZiAoKFRSRUVfQ09ERSAoeXl2c3BbLTJdLnR0eXBlKSA9PSBBRERSX0VYUFIKKwkJICAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICh5eXZzcFstMl0udHR5cGUsIDApKSA9PSBTVFJJTkdfQ1NUKQorCQkgICAgICB8fCBUUkVFX0NPREUgKHl5dnNwWy0yXS50dHlwZSkgPT0gU1RSSU5HX0NTVCkKKwkJICAgIGFzc2VtYmxlX2FzbSAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICBlbHNlCisJCSAgICBlcnJvciAoImFyZ3VtZW50IG9mIGBhc20nIGlzIG5vdCBhIGNvbnN0YW50IHN0cmluZyIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMToKKyNsaW5lIDI3MyAib2JqYy1wYXJzZS55IgoreyBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTI6CisjbGluZSAyNzggIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgZXJyb3IgKCJBTlNJIEMgZm9yYmlkcyBkYXRhIGRlZmluaXRpb24gd2l0aCBubyB0eXBlIG9yIHN0b3JhZ2UgY2xhc3MiKTsKKwkJICBlbHNlIGlmICghZmxhZ190cmFkaXRpb25hbCkKKwkJICAgIHdhcm5pbmcgKCJkYXRhIGRlZmluaXRpb24gaGFzIG5vIHR5cGUgb3Igc3RvcmFnZSBjbGFzcyIpOyAKKworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM6CisjbGluZSAyODggIm9iamMtcGFyc2UueSIKK3sgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMl0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDoKKyNsaW5lIDI5MyAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7ICA7CisgICAgYnJlYWs7fQorY2FzZSAxNToKKyNsaW5lIDI5OCAib2JqYy1wYXJzZS55IgoreyBwZWR3YXJuICgiZW1wdHkgZGVjbGFyYXRpb24iKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTY6CisjbGluZSAzMDAgIm9iamMtcGFyc2UueSIKK3sgc2hhZG93X3RhZyAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk6CisjbGluZSAzMDQgIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBkb2VzIG5vdCBhbGxvdyBleHRyYSBgOycgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIik7IDsKKyAgICBicmVhazt9CitjYXNlIDIwOgorI2xpbmUgMzEwICJvYmpjLXBhcnNlLnkiCit7IGlmICghIHN0YXJ0X2Z1bmN0aW9uIChjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDApKQorCQkgICAgWVlFUlJPUjE7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbiAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjE6CisjbGluZSAzMTUgIm9iamMtcGFyc2UueSIKK3sgc3RvcmVfcGFybV9kZWNscyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjI6CisjbGluZSAzMTcgIm9iamMtcGFyc2UueSIKK3sgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstNV0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzoKKyNsaW5lIDMyMyAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0OgorI2xpbmUgMzI4ICJvYmpjLXBhcnNlLnkiCit7IGlmICghIHN0YXJ0X2Z1bmN0aW9uIChjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDApKQorCQkgICAgWVlFUlJPUjE7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbiAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjU6CisjbGluZSAzMzMgIm9iamMtcGFyc2UueSIKK3sgc3RvcmVfcGFybV9kZWNscyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjY6CisjbGluZSAzMzUgIm9iamMtcGFyc2UueSIKK3sgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstNV0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzoKKyNsaW5lIDM0MSAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI4OgorI2xpbmUgMzQ2ICJvYmpjLXBhcnNlLnkiCit7IGlmICghIHN0YXJ0X2Z1bmN0aW9uIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLAorCQkJCQlwcmVmaXhfYXR0cmlidXRlcywgTlVMTF9UUkVFLCAwKSkKKwkJICAgIFlZRVJST1IxOworCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDI5OgorI2xpbmUgMzUxICJvYmpjLXBhcnNlLnkiCit7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMwOgorI2xpbmUgMzUzICJvYmpjLXBhcnNlLnkiCit7IGZpbmlzaF9mdW5jdGlvbiAoMCk7IAorCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTVdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzE6CisjbGluZSAzNTkgIm9iamMtcGFyc2UueSIKK3sgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMl0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjoKKyNsaW5lIDM3MyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5jb2RlID0gQUREUl9FWFBSOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzoKKyNsaW5lIDM3NSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5jb2RlID0gTkVHQVRFX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDM4OgorI2xpbmUgMzc3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBDT05WRVJUX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDM5OgorI2xpbmUgMzc5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLmNvZGUgPSBQUkVJTkNSRU1FTlRfRVhQUjsgOworICAgIGJyZWFrO30KK2Nhc2UgNDA6CisjbGluZSAzODEgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwuY29kZSA9IFBSRURFQ1JFTUVOVF9FWFBSOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MToKKyNsaW5lIDM4MyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5jb2RlID0gQklUX05PVF9FWFBSOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MjoKKyNsaW5lIDM4NSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5jb2RlID0gVFJVVEhfTk9UX0VYUFI7IDsKKyAgICBicmVhazt9CitjYXNlIDQzOgorI2xpbmUgMzg5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfY29tcG91bmRfZXhwciAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDoKKyNsaW5lIDM5NCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDY6CisjbGluZSA0MDAgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NzoKKyNsaW5lIDQwMiAib2JqYy1wYXJzZS55IgoreyBjaGFpbm9uICh5eXZzcFstMl0udHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0OToKKyNsaW5lIDQwOCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2luZGlyZWN0X3JlZiAoeXl2c3BbMF0udHR5cGUsICJ1bmFyeSAqIik7IDsKKyAgICBicmVhazt9CitjYXNlIDUwOgorI2xpbmUgNDExICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgcGVkYW50aWMgPSB5eXZzcFstMV0uaXR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDUxOgorI2xpbmUgNDE0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFswXS50dHlwZSwgMCk7CisJCSAgb3ZlcmZsb3dfd2FybmluZyAoeXl2YWwudHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MjoKKyNsaW5lIDQxOCAib2JqYy1wYXJzZS55IgoreyB0cmVlIGxhYmVsID0gbG9va3VwX2xhYmVsICh5eXZzcFswXS50dHlwZSk7CisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGAmJiciKTsKKwkJICBpZiAobGFiZWwgPT0gMCkKKwkJICAgIHl5dmFsLnR0eXBlID0gbnVsbF9wb2ludGVyX25vZGU7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBUUkVFX1VTRUQgKGxhYmVsKSA9IDE7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gYnVpbGQxIChBRERSX0VYUFIsIHB0cl90eXBlX25vZGUsIGxhYmVsKTsKKwkJICAgICAgVFJFRV9DT05TVEFOVCAoeXl2YWwudHR5cGUpID0gMTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTM6CisjbGluZSA0NDYgIm9iamMtcGFyc2UueSIKK3sgc2tpcF9ldmFsdWF0aW9uLS07CisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2c3BbMF0udHR5cGUpID09IENPTVBPTkVOVF9SRUYKKwkJICAgICAgJiYgREVDTF9CSVRfRklFTEQgKFRSRUVfT1BFUkFORCAoeXl2c3BbMF0udHR5cGUsIDEpKSkKKwkJICAgIGVycm9yICgiYHNpemVvZicgYXBwbGllZCB0byBhIGJpdC1maWVsZCIpOworCQkgIHl5dmFsLnR0eXBlID0gY19zaXplb2YgKFRSRUVfVFlQRSAoeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQ6CisjbGluZSA0NTIgIm9iamMtcGFyc2UueSIKK3sgc2tpcF9ldmFsdWF0aW9uLS07CisJCSAgeXl2YWwudHR5cGUgPSBjX3NpemVvZiAoZ3Jva3R5cGVuYW1lICh5eXZzcFstMV0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTU6CisjbGluZSA0NTUgIm9iamMtcGFyc2UueSIKK3sgc2tpcF9ldmFsdWF0aW9uLS07CisJCSAgeXl2YWwudHR5cGUgPSBjX2FsaWdub2ZfZXhwciAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1NjoKKyNsaW5lIDQ1OCAib2JqYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICB5eXZhbC50dHlwZSA9IGNfYWxpZ25vZiAoZ3Jva3R5cGVuYW1lICh5eXZzcFstMV0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTc6CisjbGluZSA0NjEgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF91bmFyeV9vcCAoUkVBTFBBUlRfRVhQUiwgeXl2c3BbMF0udHR5cGUsIDApOyA7CisgICAgYnJlYWs7fQorY2FzZSA1ODoKKyNsaW5lIDQ2MyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3VuYXJ5X29wIChJTUFHUEFSVF9FWFBSLCB5eXZzcFswXS50dHlwZSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDU5OgorI2xpbmUgNDY3ICJvYmpjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbisrOyA7CisgICAgYnJlYWs7fQorY2FzZSA2MDoKKyNsaW5lIDQ3MSAib2JqYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24rKzsgOworICAgIGJyZWFrO30KK2Nhc2UgNjI6CisjbGluZSA0NzcgIm9iamMtcGFyc2UueSIKK3sgdHJlZSB0eXBlID0gZ3Jva3R5cGVuYW1lICh5eXZzcFstMl0udHR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfY19jYXN0ICh0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDYzOgorI2xpbmUgNDgwICJvYmpjLXBhcnNlLnkiCit7IHN0YXJ0X2luaXQgKE5VTExfVFJFRSwgTlVMTCwgMCk7CisJCSAgeXl2c3BbLTJdLnR0eXBlID0gZ3Jva3R5cGVuYW1lICh5eXZzcFstMl0udHR5cGUpOworCQkgIHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0ICh5eXZzcFstMl0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2NDoKKyNsaW5lIDQ4NCAib2JqYy1wYXJzZS55IgoreyBjaGFyICpuYW1lOworCQkgIHRyZWUgcmVzdWx0ID0gcG9wX2luaXRfbGV2ZWwgKDApOworCQkgIHRyZWUgdHlwZSA9IHl5dnNwWy01XS50dHlwZTsKKwkJICBmaW5pc2hfaW5pdCAoKTsKKworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBjb25zdHJ1Y3RvciBleHByZXNzaW9ucyIpOworCQkgIGlmIChUWVBFX05BTUUgKHR5cGUpICE9IDApCisJCSAgICB7CisJCSAgICAgIGlmIChUUkVFX0NPREUgKFRZUEVfTkFNRSAodHlwZSkpID09IElERU5USUZJRVJfTk9ERSkKKwkJCW5hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKFRZUEVfTkFNRSAodHlwZSkpOworCQkgICAgICBlbHNlCisJCQluYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKFRZUEVfTkFNRSAodHlwZSkpKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBuYW1lID0gIiI7CisJCSAgeXl2YWwudHR5cGUgPSByZXN1bHQ7CisJCSAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gQVJSQVlfVFlQRSAmJiBUWVBFX1NJWkUgKHR5cGUpID09IDApCisJCSAgICB7CisJCSAgICAgIGludCBmYWlsdXJlID0gY29tcGxldGVfYXJyYXlfdHlwZSAodHlwZSwgeXl2YWwudHR5cGUsIDEpOworCQkgICAgICBpZiAoZmFpbHVyZSkKKwkJCWFib3J0ICgpOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSA2NjoKKyNsaW5lIDUxMyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNjc6CisjbGluZSA1MTUgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDY4OgorI2xpbmUgNTE3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA2OToKKyNsaW5lIDUxOSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzA6CisjbGluZSA1MjEgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDcxOgorI2xpbmUgNTIzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3MjoKKyNsaW5lIDUyNSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzM6CisjbGluZSA1MjcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDc0OgorI2xpbmUgNTI5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3NToKKyNsaW5lIDUzMSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKHl5dnNwWy0xXS5jb2RlLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNzY6CisjbGluZSA1MzMgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wICh5eXZzcFstMV0uY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDc3OgorI2xpbmUgNTM1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoeXl2c3BbLTFdLmNvZGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA3ODoKKyNsaW5lIDUzNyAib2JqYy1wYXJzZS55IgoreyB5eXZzcFstMV0udHR5cGUgPSB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKGRlZmF1bHRfY29udmVyc2lvbiAoeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgc2tpcF9ldmFsdWF0aW9uICs9IHl5dnNwWy0xXS50dHlwZSA9PSBib29sZWFuX2ZhbHNlX25vZGU7IDsKKyAgICBicmVhazt9CitjYXNlIDc5OgorI2xpbmUgNTQwICJvYmpjLXBhcnNlLnkiCit7IHNraXBfZXZhbHVhdGlvbiAtPSB5eXZzcFstM10udHR5cGUgPT0gYm9vbGVhbl9mYWxzZV9ub2RlOworCQkgIHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoVFJVVEhfQU5ESUZfRVhQUiwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDgwOgorI2xpbmUgNTQzICJvYmpjLXBhcnNlLnkiCit7IHl5dnNwWy0xXS50dHlwZSA9IHRydXRodmFsdWVfY29udmVyc2lvbiAoZGVmYXVsdF9jb252ZXJzaW9uICh5eXZzcFstMV0udHR5cGUpKTsKKwkJICBza2lwX2V2YWx1YXRpb24gKz0geXl2c3BbLTFdLnR0eXBlID09IGJvb2xlYW5fdHJ1ZV9ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSA4MToKKyNsaW5lIDU0NiAib2JqYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24gLT0geXl2c3BbLTNdLnR0eXBlID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgIHl5dmFsLnR0eXBlID0gcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAoVFJVVEhfT1JJRl9FWFBSLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgODI6CisjbGluZSA1NDkgIm9iamMtcGFyc2UueSIKK3sgeXl2c3BbLTFdLnR0eXBlID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKHl5dnNwWy0xXS50dHlwZSkpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSB5eXZzcFstMV0udHR5cGUgPT0gYm9vbGVhbl9mYWxzZV9ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSA4MzoKKyNsaW5lIDU1MiAib2JqYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24gKz0gKCh5eXZzcFstNF0udHR5cGUgPT0gYm9vbGVhbl90cnVlX25vZGUpCisJCQkJICAgICAgLSAoeXl2c3BbLTRdLnR0eXBlID09IGJvb2xlYW5fZmFsc2Vfbm9kZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA4NDoKKyNsaW5lIDU1NSAib2JqYy1wYXJzZS55IgoreyBza2lwX2V2YWx1YXRpb24gLT0geXl2c3BbLTZdLnR0eXBlID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwciAoeXl2c3BbLTZdLnR0eXBlLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgODU6CisjbGluZSA1NTggIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG9taXR0aW5nIHRoZSBtaWRkbGUgdGVybSBvZiBhID86IGV4cHJlc3Npb24iKTsKKwkJICAvKiBNYWtlIHN1cmUgZmlyc3Qgb3BlcmFuZCBpcyBjYWxjdWxhdGVkIG9ubHkgb25jZS4gICovCisJCSAgeXl2c3BbMF0udHR5cGUgPSBzYXZlX2V4cHIgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgeXl2c3BbLTFdLnR0eXBlID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKHl5dnNwWzBdLnR0eXBlKSk7CisJCSAgc2tpcF9ldmFsdWF0aW9uICs9IHl5dnNwWy0xXS50dHlwZSA9PSBib29sZWFuX3RydWVfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgODY6CisjbGluZSA1NjUgIm9iamMtcGFyc2UueSIKK3sgc2tpcF9ldmFsdWF0aW9uIC09IHl5dnNwWy00XS50dHlwZSA9PSBib29sZWFuX3RydWVfbm9kZTsKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIgKHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDg3OgorI2xpbmUgNTY4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbW9kaWZ5X2V4cHIgKHl5dnNwWy0yXS50dHlwZSwgTk9QX0VYUFIsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoeXl2YWwudHR5cGUsIE1PRElGWV9FWFBSKTsgOworICAgIGJyZWFrO30KK2Nhc2UgODg6CisjbGluZSA1NzEgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9tb2RpZnlfZXhwciAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFstMV0uY29kZSwgeXl2c3BbMF0udHR5cGUpOworCQkgIC8qIFRoaXMgaW5oaWJpdHMgd2FybmluZ3MgaW4gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uLiAgKi8KKwkJICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoeXl2YWwudHR5cGUsIEVSUk9SX01BUkspOyA7CisgICAgYnJlYWs7fQorY2FzZSA4OToKKyNsaW5lIDU3OCAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gbGFzdGlkZGVjbDsKKwkJICBpZiAoIXl5dmFsLnR0eXBlIHx8IHl5dmFsLnR0eXBlID09IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorCQkJeXljaGFyID0gWVlMRVg7CisJCSAgICAgIGlmICh5eWNoYXIgPT0gJygnKQorCQkJeworCQkJICB0cmVlIGRlY2w7CisKKwkJCSAgaWYgKG9iamNfcmVjZWl2ZXJfY29udGV4dAorCQkJICAgICAgJiYgISAob2JqY19yZWNlaXZlcl9jb250ZXh0CisJCQkJICAgICYmIHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFswXS50dHlwZSksICJzdXBlciIpKSkKKwkJCSAgICAvKiB3ZSBoYXZlIGEgbWVzc2FnZSB0byBzdXBlciAqLworCQkJICAgIHl5dmFsLnR0eXBlID0gZ2V0X3N1cGVyX3JlY2VpdmVyICgpOworCQkJICBlbHNlIGlmIChvYmpjX21ldGhvZF9jb250ZXh0CisJCQkJICAgJiYgKGRlY2wgPSBpc19pdmFyIChvYmpjX2l2YXJfY2hhaW4sIHl5dnNwWzBdLnR0eXBlKSkpCisJCQkgICAgeworCQkJICAgICAgaWYgKGlzX3ByaXZhdGUgKGRlY2wpKQorCQkJCXl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgZWxzZQorCQkJCXl5dmFsLnR0eXBlID0gYnVpbGRfaXZhcl9yZWZlcmVuY2UgKHl5dnNwWzBdLnR0eXBlKTsKKwkJCSAgICB9CisJCQkgIGVsc2UKKwkJCSAgICB7CisJCQkgICAgICAvKiBPcmRpbmFyeSBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gICovCisJCQkgICAgICB5eXZhbC50dHlwZSA9IGltcGxpY2l0bHlfZGVjbGFyZSAoeXl2c3BbMF0udHR5cGUpOworCQkJICAgICAgYXNzZW1ibGVfZXh0ZXJuYWwgKHl5dmFsLnR0eXBlKTsKKwkJCSAgICAgIFRSRUVfVVNFRCAoeXl2YWwudHR5cGUpID0gMTsKKwkJCSAgICB9CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9PSAwKQorCQkJeworCQkJICBlcnJvciAoImAlcycgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikiLAorCQkJCSBJREVOVElGSUVSX1BPSU5URVIgKHl5dnNwWzBdLnR0eXBlKSk7CisJCQkgIHl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOworCQkJfQorCQkgICAgICBlbHNlCisJCQl7CisJCQkgIHRyZWUgZGVjbDsKKworCQkgICAgICAgICAgaWYgKG9iamNfcmVjZWl2ZXJfY29udGV4dAorCQkJICAgICAgJiYgISBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpLCAic3VwZXIiKSkKKwkJCSAgICAvKiB3ZSBoYXZlIGEgbWVzc2FnZSB0byBzdXBlciAqLworCQkJICAgIHl5dmFsLnR0eXBlID0gZ2V0X3N1cGVyX3JlY2VpdmVyICgpOworCQkJICBlbHNlIGlmIChvYmpjX21ldGhvZF9jb250ZXh0CisJCQkJICAgJiYgKGRlY2wgPSBpc19pdmFyIChvYmpjX2l2YXJfY2hhaW4sIHl5dnNwWzBdLnR0eXBlKSkpCisJCQkgICAgeworCQkJICAgICAgaWYgKGlzX3ByaXZhdGUgKGRlY2wpKQorCQkJCXl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgZWxzZQorCQkJCXl5dmFsLnR0eXBlID0gYnVpbGRfaXZhcl9yZWZlcmVuY2UgKHl5dnNwWzBdLnR0eXBlKTsKKwkJCSAgICB9CisJCQkgIGVsc2UKKwkJCSAgICB7CisJCQkgICAgICBpZiAoSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgKHl5dnNwWzBdLnR0eXBlKSAhPSBlcnJvcl9tYXJrX25vZGUKKwkJCQkgIHx8IElERU5USUZJRVJfRVJST1JfTE9DVVMgKHl5dnNwWzBdLnR0eXBlKSAhPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2wpCisJCQkJeworCQkJCSAgZXJyb3IgKCJgJXMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSB0aGlzIGZ1bmN0aW9uKSIsCisJCQkJCSBJREVOVElGSUVSX1BPSU5URVIgKHl5dnNwWzBdLnR0eXBlKSk7CisKKwkJCQkgIGlmICghIHVuZGVjbGFyZWRfdmFyaWFibGVfbm90aWNlKQorCQkJCSAgICB7CisJCQkJICAgICAgZXJyb3IgKCIoRWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlIik7CisJCQkJICAgICAgZXJyb3IgKCJmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLikiKTsKKwkJCQkgICAgICB1bmRlY2xhcmVkX3ZhcmlhYmxlX25vdGljZSA9IDE7CisJCQkJICAgIH0KKwkJCQl9CisJCQkgICAgICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJCSAgICAgIC8qIFByZXZlbnQgcmVwZWF0ZWQgZXJyb3IgbWVzc2FnZXMuICAqLworCQkJICAgICAgSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgKHl5dnNwWzBdLnR0eXBlKSA9IGVycm9yX21hcmtfbm9kZTsKKwkJCSAgICAgIElERU5USUZJRVJfRVJST1JfTE9DVVMgKHl5dnNwWzBdLnR0eXBlKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCSAgZWxzZSBpZiAoVFJFRV9UWVBFICh5eXZhbC50dHlwZSkgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeXl2YWwudHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgZWxzZSBpZiAoQ19ERUNMX0FOVElDSVBBVEVEICh5eXZhbC50dHlwZSkpCisJCSAgICB7CisJCSAgICAgIC8qIFRoZSBmaXJzdCB0aW1lIHdlIHNlZSBhIGJ1aWxkLWluIGZ1bmN0aW9uIHVzZWQsCisJCQkgaWYgaXQgaGFzIG5vdCBiZWVuIGRlY2xhcmVkLiAgKi8KKwkJICAgICAgQ19ERUNMX0FOVElDSVBBVEVEICh5eXZhbC50dHlwZSkgPSAwOworCQkgICAgICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisJCQl5eWNoYXIgPSBZWUxFWDsKKwkJICAgICAgaWYgKHl5Y2hhciA9PSAnKCcpCisJCQl7CisJCQkgIC8qIE9taXQgdGhlIGltcGxpY2l0IGRlY2xhcmF0aW9uIHdlCisJCQkgICAgIHdvdWxkIG9yZGluYXJpbHkgZG8sIHNvIHdlIGRvbid0IGxvc2UKKwkJCSAgICAgdGhlIGFjdHVhbCBidWlsdCBpbiB0eXBlLgorCQkJICAgICBCdXQgcHJpbnQgYSBkaWFnbm9zdGljIGZvciB0aGUgbWlzbWF0Y2guICAqLworCQkJICBpZiAob2JqY19tZXRob2RfY29udGV4dAorCQkJICAgICAgJiYgaXNfaXZhciAob2JqY19pdmFyX2NoYWluLCB5eXZzcFswXS50dHlwZSkpCisJCQkgICAgZXJyb3IgKCJJbnN0YW5jZSB2YXJpYWJsZSBgJXMnIGltcGxpY2l0bHkgZGVjbGFyZWQgYXMgZnVuY3Rpb24iLAorCQkJCSAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICh5eXZhbC50dHlwZSkpKTsKKwkJCSAgZWxzZQorCQkJICAgIGlmIChUUkVFX0NPREUgKHl5dmFsLnR0eXBlKSAhPSBGVU5DVElPTl9ERUNMKQorCQkJICAgICAgZXJyb3IgKCJgJXMnIGltcGxpY2l0bHkgZGVjbGFyZWQgYXMgZnVuY3Rpb24iLAorCQkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKHl5dmFsLnR0eXBlKSkpOworCQkJICBlbHNlIGlmICgoVFlQRV9NT0RFIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpKSkKKwkJCQkgICAgIT0gVFlQRV9NT0RFIChpbnRlZ2VyX3R5cGVfbm9kZSkpCisJCQkJICAgJiYgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICh5eXZhbC50dHlwZSkpCisJCQkJICAgICAgICE9IHZvaWRfdHlwZV9ub2RlKSkKKwkJCSAgICBwZWR3YXJuICgidHlwZSBtaXNtYXRjaCBpbiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBmb3IgYnVpbHQtaW4gZnVuY3Rpb24gYCVzJyIsCisJCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoeXl2YWwudHR5cGUpKSk7CisJCQkgIC8qIElmIGl0IHJlYWxseSByZXR1cm5zIHZvaWQsIGNoYW5nZSB0aGF0IHRvIGludC4gICovCisJCQkgIGlmIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpKSA9PSB2b2lkX3R5cGVfbm9kZSkKKwkJCSAgICBUUkVFX1RZUEUgKHl5dmFsLnR0eXBlKQorCQkJICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJCSAgICAgVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpKSk7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXBlZHdhcm4gKCJidWlsdC1pbiBmdW5jdGlvbiBgJXMnIHVzZWQgd2l0aG91dCBkZWNsYXJhdGlvbiIsCisJCQkJIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICh5eXZhbC50dHlwZSkpKTsKKworCQkgICAgICAvKiBEbyB3aGF0IHdlIHdvdWxkIG9yZGluYXJpbHkgZG8gd2hlbiBhIGZuIGlzIHVzZWQuICAqLworCQkgICAgICBhc3NlbWJsZV9leHRlcm5hbCAoeXl2YWwudHR5cGUpOworCQkgICAgICBUUkVFX1VTRUQgKHl5dmFsLnR0eXBlKSA9IDE7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBhc3NlbWJsZV9leHRlcm5hbCAoeXl2YWwudHR5cGUpOworCQkgICAgICBUUkVFX1VTRUQgKHl5dmFsLnR0eXBlKSA9IDE7CisJCSAgICAgIC8qIHdlIGhhdmUgYSBkZWZpbml0aW9uIC0gc3RpbGwgY2hlY2sgaWYgaVZhcmlhYmxlICovCisKKwkJICAgICAgaWYgKCFvYmpjX3JlY2VpdmVyX2NvbnRleHQKKwkJCSAgfHwgKG9iamNfcmVjZWl2ZXJfY29udGV4dAorCQkJICAgICAgJiYgc3RyY21wIChJREVOVElGSUVSX1BPSU5URVIgKHl5dnNwWzBdLnR0eXBlKSwgInN1cGVyIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworCQkJICB0cmVlIGRlY2w7CisKKwkJCSAgaWYgKG9iamNfbWV0aG9kX2NvbnRleHQKKwkJCSAgICAgICYmIChkZWNsID0gaXNfaXZhciAob2JqY19pdmFyX2NoYWluLCB5eXZzcFswXS50dHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJREVOVElGSUVSX0xPQ0FMX1ZBTFVFICh5eXZzcFswXS50dHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgKCJsb2NhbCBkZWNsYXJhdGlvbiBvZiBgJXMnIGhpZGVzIGluc3RhbmNlIHZhcmlhYmxlIiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJREVOVElGSUVSX1BPSU5URVIgKHl5dnNwWzBdLnR0eXBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgCQkJCXsKKyAJCQkJICBpZiAoaXNfcHJpdmF0ZSAoZGVjbCkpCisgCQkJCSAgICB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKyAJCQkJICBlbHNlCisgCQkJCSAgICB5eXZhbC50dHlwZSA9IGJ1aWxkX2l2YXJfcmVmZXJlbmNlICh5eXZzcFswXS50dHlwZSk7CisgCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQl9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvKiB3ZSBoYXZlIGEgbWVzc2FnZSB0byBzdXBlciAqLworCQkgICAgICAgIHl5dmFsLnR0eXBlID0gZ2V0X3N1cGVyX3JlY2VpdmVyICgpOworCQkgICAgfQorCisJCSAgaWYgKFRSRUVfQ09ERSAoeXl2YWwudHR5cGUpID09IENPTlNUX0RFQ0wpCisJCSAgICB7CisJCSAgICAgIHl5dmFsLnR0eXBlID0gREVDTF9JTklUSUFMICh5eXZhbC50dHlwZSk7CisJCSAgICAgIC8qIFRoaXMgaXMgdG8gcHJldmVudCBhbiBlbnVtIHdob3NlIHZhbHVlIGlzIDAKKwkJCSBmcm9tIGJlaW5nIGNvbnNpZGVyZWQgYSBudWxsIHBvaW50ZXIgY29uc3RhbnQuICAqLworCQkgICAgICB5eXZhbC50dHlwZSA9IGJ1aWxkMSAoTk9QX0VYUFIsIFRSRUVfVFlQRSAoeXl2YWwudHR5cGUpLCB5eXZhbC50dHlwZSk7CisJCSAgICAgIFRSRUVfQ09OU1RBTlQgKHl5dmFsLnR0eXBlKSA9IDE7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDkxOgorI2xpbmUgNzM4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY29tYmluZV9zdHJpbmdzICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDkyOgorI2xpbmUgNzQwICJvYmpjLXBhcnNlLnkiCit7IGNoYXIgY2xhc3MgPSBUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoeXl2c3BbLTFdLnR0eXBlKSk7CisJCSAgaWYgKGNsYXNzID09ICdlJyB8fCBjbGFzcyA9PSAnMScKKwkJICAgICAgfHwgY2xhc3MgPT0gJzInIHx8IGNsYXNzID09ICc8JykKKwkJICAgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICh5eXZzcFstMV0udHR5cGUsIEVSUk9SX01BUkspOworCQkgIHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSA5MzoKKyNsaW5lIDc0NiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgOTQ6CisjbGluZSA3NDggIm9iamMtcGFyc2UueSIKK3sgaWYgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9PSAwKQorCQkgICAgeworCQkgICAgICBlcnJvciAoImJyYWNlZC1ncm91cCB3aXRoaW4gZXhwcmVzc2lvbiBhbGxvd2VkIG9ubHkgaW5zaWRlIGEgZnVuY3Rpb24iKTsKKwkJICAgICAgWVlFUlJPUjsKKwkJICAgIH0KKwkJICAvKiBXZSBtdXN0IGZvcmNlIGEgQkxPQ0sgZm9yIHRoaXMgbGV2ZWwKKwkJICAgICBzbyB0aGF0LCBpZiBpdCBpcyBub3QgZXhwYW5kZWQgbGF0ZXIsCisJCSAgICAgdGhlcmUgaXMgYSB3YXkgdG8gdHVybiBvZmYgdGhlIGVudGlyZSBzdWJ0cmVlIG9mIGJsb2NrcworCQkgICAgIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiBpdC4gICovCisJCSAga2VlcF9uZXh0X2xldmVsICgpOworCQkgIHB1c2hfaXRlcmF0b3Jfc3RhY2sgKCk7CisJCSAgcHVzaF9sYWJlbF9sZXZlbCAoKTsKKwkJICB5eXZhbC50dHlwZSA9IGV4cGFuZF9zdGFydF9zdG10X2V4cHIgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDk1OgorI2xpbmUgNzYyICJvYmpjLXBhcnNlLnkiCit7IHRyZWUgcnRsX2V4cDsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYnJhY2VkLWdyb3VwcyB3aXRoaW4gZXhwcmVzc2lvbnMiKTsKKwkJICBwb3BfaXRlcmF0b3Jfc3RhY2sgKCk7CisJCSAgcG9wX2xhYmVsX2xldmVsICgpOworCQkgIHJ0bF9leHAgPSBleHBhbmRfZW5kX3N0bXRfZXhwciAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICAvKiBUaGUgc3RhdGVtZW50cyBoYXZlIHNpZGUgZWZmZWN0cywgc28gdGhlIGdyb3VwIGRvZXMuICAqLworCQkgIFRSRUVfU0lERV9FRkZFQ1RTIChydGxfZXhwKSA9IDE7CisKKwkJICBpZiAoVFJFRV9DT0RFICh5eXZzcFstMV0udHR5cGUpID09IEJMT0NLKQorCQkgICAgeworCQkgICAgICAvKiBNYWtlIGEgQklORF9FWFBSIGZvciB0aGUgQkxPQ0sgYWxyZWFkeSBtYWRlLiAgKi8KKwkJICAgICAgeXl2YWwudHR5cGUgPSBidWlsZCAoQklORF9FWFBSLCBUUkVFX1RZUEUgKHJ0bF9leHApLAorCQkJCSAgTlVMTF9UUkVFLCBydGxfZXhwLCB5eXZzcFstMV0udHR5cGUpOworCQkgICAgICAvKiBSZW1vdmUgdGhlIGJsb2NrIGZyb20gdGhlIHRyZWUgYXQgdGhpcyBwb2ludC4KKwkJCSBJdCBnZXRzIHB1dCBiYWNrIGF0IHRoZSBwcm9wZXIgcGxhY2UKKwkJCSB3aGVuIHRoZSBCSU5EX0VYUFIgaXMgZXhwYW5kZWQuICAqLworCQkgICAgICBkZWxldGVfYmxvY2sgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDk2OgorI2xpbmUgNzg1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZnVuY3Rpb25fY2FsbCAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA5NzoKKyNsaW5lIDc4NyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2FycmF5X3JlZiAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA5ODoKKyNsaW5lIDc4OSAib2JqYy1wYXJzZS55IgoreworICAgICAgICAgICAgICAgICAgaWYgKGRvaW5nX29iamNfdGhhbmcpCisgICAgICAgICAgICAgICAgICAgIHsKKwkJICAgICAgaWYgKGlzX3B1YmxpYyAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSkpCisJCQl5eXZhbC50dHlwZSA9IGJ1aWxkX2NvbXBvbmVudF9yZWYgKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQkgICAgICBlbHNlCisJCQl5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgIHl5dmFsLnR0eXBlID0gYnVpbGRfY29tcG9uZW50X3JlZiAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDk5OgorI2xpbmUgODAxICJvYmpjLXBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICB0cmVlIGV4cHIgPSBidWlsZF9pbmRpcmVjdF9yZWYgKHl5dnNwWy0yXS50dHlwZSwgIi0+Iik7CisKKyAgICAgICAgICAgICAgICAgIGlmIChkb2luZ19vYmpjX3RoYW5nKQorICAgICAgICAgICAgICAgICAgICB7CisJCSAgICAgIGlmIChpc19wdWJsaWMgKGV4cHIsIHl5dnNwWzBdLnR0eXBlKSkKKwkJCXl5dmFsLnR0eXBlID0gYnVpbGRfY29tcG9uZW50X3JlZiAoZXhwciwgeXl2c3BbMF0udHR5cGUpOworCQkgICAgICBlbHNlCisJCQl5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeXl2YWwudHR5cGUgPSBidWlsZF9jb21wb25lbnRfcmVmIChleHByLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDEwMDoKKyNsaW5lIDgxNSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3VuYXJ5X29wIChQT1NUSU5DUkVNRU5UX0VYUFIsIHl5dnNwWy0xXS50dHlwZSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDEwMToKKyNsaW5lIDgxNyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3VuYXJ5X29wIChQT1NUREVDUkVNRU5UX0VYUFIsIHl5dnNwWy0xXS50dHlwZSwgMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDEwMjoKKyNsaW5lIDgxOSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX21lc3NhZ2VfZXhwciAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMDM6CisjbGluZSA4MjEgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9zZWxlY3Rvcl9leHByICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEwNDoKKyNsaW5lIDgyMyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3Byb3RvY29sX2V4cHIgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTA1OgorI2xpbmUgODI1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZW5jb2RlX2V4cHIgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTA2OgorI2xpbmUgODI3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfb2JqY19zdHJpbmdfb2JqZWN0ICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEwODoKKyNsaW5lIDgzNCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMTA6CisjbGluZSA4NDIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTEzOgorI2xpbmUgODUwICJvYmpjLXBhcnNlLnkiCit7IGNfbWFya192YXJhcmdzICgpOworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZG9lcyBub3QgcGVybWl0IHVzZSBvZiBgdmFyYXJncy5oJyIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMTQ6CisjbGluZSA4NjAgIm9iamMtcGFyc2UueSIKK3sgOworICAgIGJyZWFrO30KK2Nhc2UgMTE5OgorI2xpbmUgODc2ICJvYmpjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTIwOgorI2xpbmUgODgxICJvYmpjLXBhcnNlLnkiCit7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOwkKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyMToKKyNsaW5lIDg4NiAib2JqYy1wYXJzZS55IgoreyBzaGFkb3dfdGFnX3dhcm5lZCAoeXl2c3BbLTFdLnR0eXBlLCAxKTsKKwkJICBwZWR3YXJuICgiZW1wdHkgZGVjbGFyYXRpb24iKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTIyOgorI2xpbmUgODg5ICJvYmpjLXBhcnNlLnkiCit7IHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMjM6CisjbGluZSA4OTggIm9iamMtcGFyc2UueSIKK3sgOworICAgIGJyZWFrO30KK2Nhc2UgMTI4OgorI2xpbmUgOTEzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLml0eXBlID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgcGVuZGluZ194cmVmX2Vycm9yICgpOworCQkgIGRlY2xzcGVjX3N0YWNrID0gdHJlZV9jb25zIChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJICAgICAgY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCSAgICAgIGRlY2xzcGVjX3N0YWNrKTsKKwkJICBzcGxpdF9zcGVjc19hdHRycyAoeXl2c3BbMF0udHR5cGUsCisJCQkJICAgICAmY3VycmVudF9kZWNsc3BlY3MsICZwcmVmaXhfYXR0cmlidXRlcyk7IDsKKyAgICBicmVhazt9CitjYXNlIDEyOToKKyNsaW5lIDkyNCAib2JqYy1wYXJzZS55IgoreyBwcmVmaXhfYXR0cmlidXRlcyA9IGNoYWlub24gKHByZWZpeF9hdHRyaWJ1dGVzLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzMDoKKyNsaW5lIDkyOSAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzMToKKyNsaW5lIDkzNCAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzMjoKKyNsaW5lIDkzOSAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzMzoKKyNsaW5lIDk0NCAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzNDoKKyNsaW5lIDk0OSAib2JqYy1wYXJzZS55IgoreyBzaGFkb3dfdGFnICh5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzU6CisjbGluZSA5NTEgIm9iamMtcGFyc2UueSIKK3sgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IDsKKyAgICBicmVhazt9CitjYXNlIDEzNjoKKyNsaW5lIDk1MyAib2JqYy1wYXJzZS55IgoreyBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTM3OgorI2xpbmUgOTYzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxMzg6CisjbGluZSA5NjUgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDEzOToKKyNsaW5lIDk2OSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQwOgorI2xpbmUgOTcxICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDE6CisjbGluZSA5NzMgIm9iamMtcGFyc2UueSIKK3sgaWYgKGV4dHJhX3dhcm5pbmdzKQorCQkgICAgd2FybmluZyAoImAlcycgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiIsCisJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoeXl2c3BbMF0udHR5cGUpKTsKKwkJICB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQyOgorI2xpbmUgOTc4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDM6CisjbGluZSA5ODMgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE0NDoKKyNsaW5lIDk4NSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWzBdLnR0eXBlLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTQ1OgorI2xpbmUgOTkwICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDY6CisjbGluZSA5OTIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE0NzoKKyNsaW5lIDk5NCAib2JqYy1wYXJzZS55IgoreyBpZiAoZXh0cmFfd2FybmluZ3MpCisJCSAgICB3YXJuaW5nICgiYCVzJyBpcyBub3QgYXQgYmVnaW5uaW5nIG9mIGRlY2xhcmF0aW9uIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFswXS50dHlwZSkpOworCQkgIHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNDg6CisjbGluZSAxMDA3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDE0OToKKyNsaW5lIDEwMDkgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE1MDoKKyNsaW5lIDEwMTEgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTUxOgorI2xpbmUgMTAxMyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTUyOgorI2xpbmUgMTAxOCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsKKwkJICBUUkVFX1NUQVRJQyAoeXl2YWwudHR5cGUpID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTUzOgorI2xpbmUgMTAyMSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU0OgorI2xpbmUgMTAyMyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBUUkVFX1NUQVRJQyAoeXl2YWwudHR5cGUpID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU1OgorI2xpbmUgMTAyNiAib2JqYy1wYXJzZS55IgoreyBpZiAoZXh0cmFfd2FybmluZ3MgJiYgVFJFRV9TVEFUSUMgKHl5dnNwWy0xXS50dHlwZSkpCisJCSAgICB3YXJuaW5nICgiYCVzJyBpcyBub3QgYXQgYmVnaW5uaW5nIG9mIGRlY2xhcmF0aW9uIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFswXS50dHlwZSkpOworCQkgIHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOworCQkgIFRSRUVfU1RBVElDICh5eXZhbC50dHlwZSkgPSBUUkVFX1NUQVRJQyAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU2OgorI2xpbmUgMTA0MCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU3OgorI2xpbmUgMTA0MiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWzBdLnR0eXBlLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU4OgorI2xpbmUgMTA0NiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTU5OgorI2xpbmUgMTA0OCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTYyOgorI2xpbmUgMTA1OCAib2JqYy1wYXJzZS55IgoreyAvKiBGb3IgYSB0eXBlZGVmIG5hbWUsIHJlY29yZCB0aGUgbWVhbmluZywgbm90IHRoZSBuYW1lLgorCQkgICAgIEluIGNhc2Ugb2YgYGZvbyBmb28sIGJhcjsnLiAgKi8KKwkJICB5eXZhbC50dHlwZSA9IGxvb2t1cF9uYW1lICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE2MzoKKyNsaW5lIDEwNjIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfc3RhdGljX3JlZmVyZW5jZSAoeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE2NDoKKyNsaW5lIDEwNjQgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfb2JqZWN0X3JlZmVyZW5jZSAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxNjU6CisjbGluZSAxMDY5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X29iamVjdF9yZWZlcmVuY2UgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTY2OgorI2xpbmUgMTA3MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IFRSRUVfVFlQRSAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTY3OgorI2xpbmUgMTA3MyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2t0eXBlbmFtZSAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc1OgorI2xpbmUgMTA5NSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTc2OgorI2xpbmUgMTA5NyAib2JqYy1wYXJzZS55IgoreyBpZiAoVFJFRV9DSEFJTiAoeXl2c3BbLTFdLnR0eXBlKSkgeXl2c3BbLTFdLnR0eXBlID0gY29tYmluZV9zdHJpbmdzICh5eXZzcFstMV0udHR5cGUpOworCQkgIHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAxNzc6CisjbGluZSAxMTA0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gc3RhcnRfZGVjbCAoeXl2c3BbLTNdLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgMSwKKwkJCQkJICB5eXZzcFstMV0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBzdGFydF9pbml0ICh5eXZhbC50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLCBnbG9iYWxfYmluZGluZ3NfcCAoKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3ODoKKyNsaW5lIDExMDkgIm9iamMtcGFyc2UueSIKK3sgZmluaXNoX2luaXQgKCk7CisJCSAgZmluaXNoX2RlY2wgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHl5dnNwWy00XS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE3OToKKyNsaW5lIDExMTIgIm9iamMtcGFyc2UueSIKK3sgdHJlZSBkID0gc3RhcnRfZGVjbCAoeXl2c3BbLTJdLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgMCwKKwkJCQkgICAgICAgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBmaW5pc2hfZGVjbCAoZCwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyAKKyAgICAgICAgICAgICAgICA7CisgICAgYnJlYWs7fQorY2FzZSAxODA6CisjbGluZSAxMTIwICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gc3RhcnRfZGVjbCAoeXl2c3BbLTNdLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgMSwKKwkJCQkJICB5eXZzcFstMV0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBzdGFydF9pbml0ICh5eXZhbC50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLCBnbG9iYWxfYmluZGluZ3NfcCAoKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE4MToKKyNsaW5lIDExMjUgIm9iamMtcGFyc2UueSIKK3sgZmluaXNoX2luaXQgKCk7CisJCSAgZGVjbF9hdHRyaWJ1dGVzICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWy0zXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOworCQkgIGZpbmlzaF9kZWNsICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCB5eXZzcFstNF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODI6CisjbGluZSAxMTI5ICJvYmpjLXBhcnNlLnkiCit7IHRyZWUgZCA9IHN0YXJ0X2RlY2wgKHl5dnNwWy0yXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIDAsCisJCQkJICAgICAgIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTgzOgorI2xpbmUgMTEzNyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg0OgorI2xpbmUgMTEzOSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODU6CisjbGluZSAxMTQ0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDE4NjoKKyNsaW5lIDExNDYgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg3OgorI2xpbmUgMTE1MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0yXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTg4OgorI2xpbmUgMTE1NiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWzBdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAxODk6CisjbGluZSAxMTU4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDE5MDoKKyNsaW5lIDExNjMgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDE5MToKKyNsaW5lIDExNjUgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAxOTI6CisjbGluZSAxMTY3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstM10udHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTkzOgorI2xpbmUgMTE2OSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTVdLnR0eXBlLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMTk0OgorI2xpbmUgMTE3MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDA6CisjbGluZSAxMTg5ICJvYmpjLXBhcnNlLnkiCit7IHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0IChOVUxMX1RSRUUpOworCQkgIC8qIE5vdGUgdGhhdCB0aGUgY2FsbCB0byBjbGVhcl9tb21lbnRhcnkKKwkJICAgICBpcyBpbiBwcm9jZXNzX2luaXRfZWxlbWVudC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIwMToKKyNsaW5lIDExOTQgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBwb3BfaW5pdF9sZXZlbCAoMCk7CisJCSAgaWYgKHl5dmFsLnR0eXBlID09IGVycm9yX21hcmtfbm9kZQorCQkgICAgICAmJiAhICh5eWNoYXIgPT0gU1RSSU5HIHx8IHl5Y2hhciA9PSBDT05TVEFOVCkpCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDI6CisjbGluZSAxMjAyICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZXJyb3JfbWFya19ub2RlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDM6CisjbGluZSAxMjA4ICJvYmpjLXBhcnNlLnkiCit7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBlbXB0eSBpbml0aWFsaXplciBicmFjZXMiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjA3OgorI2xpbmUgMTIyMiAib2JqYy1wYXJzZS55IgoreyBwcm9jZXNzX2luaXRfZWxlbWVudCAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMDg6CisjbGluZSAxMjI0ICJvYmpjLXBhcnNlLnkiCit7IHB1c2hfaW5pdF9sZXZlbCAoMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIwOToKKyNsaW5lIDEyMjYgIm9iamMtcGFyc2UueSIKK3sgcHJvY2Vzc19pbml0X2VsZW1lbnQgKHBvcF9pbml0X2xldmVsICgwKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxMToKKyNsaW5lIDEyMzIgIm9iamMtcGFyc2UueSIKK3sgc2V0X2luaXRfbGFiZWwgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxMzoKKyNsaW5lIDEyMzUgIm9iamMtcGFyc2UueSIKK3sgc2V0X2luaXRfbGFiZWwgKHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxNToKKyNsaW5lIDEyNDEgIm9iamMtcGFyc2UueSIKK3sgcHVzaF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFswXS50dHlwZSwKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMSkpCisJCSAgICB7CisJCSAgICAgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgICAgIFlZRVJST1IxOworCQkgICAgfQorCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxNjoKKyNsaW5lIDEyNTAgIm9iamMtcGFyc2UueSIKK3sgc3RvcmVfcGFybV9kZWNscyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjE3OgorI2xpbmUgMTI1OCAib2JqYy1wYXJzZS55IgoreyBmaW5pc2hfZnVuY3Rpb24gKDEpOworCQkgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxODoKKyNsaW5lIDEyNjQgIm9iamMtcGFyc2UueSIKK3sgcHVzaF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFswXS50dHlwZSwKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMSkpCisJCSAgICB7CisJCSAgICAgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgICAgIFlZRVJST1IxOworCQkgICAgfQorCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIxOToKKyNsaW5lIDEyNzMgIm9iamMtcGFyc2UueSIKK3sgc3RvcmVfcGFybV9kZWNscyAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjIwOgorI2xpbmUgMTI4MSAib2JqYy1wYXJzZS55IgoreyBmaW5pc2hfZnVuY3Rpb24gKDEpOworCQkgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDIyMzoKKyNsaW5lIDEyOTcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFstMV0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDIyNDoKKyNsaW5lIDEyOTkgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjU6CisjbGluZSAxMzA0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjY6CisjbGluZSAxMzA2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjc6CisjbGluZSAxMzA4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMjg6CisjbGluZSAxMzE1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDIzMToKKyNsaW5lIDEzMjcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzI6CisjbGluZSAxMzMyICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzM6CisjbGluZSAxMzM0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzQ6CisjbGluZSAxMzM2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzU6CisjbGluZSAxMzQzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDIzNzoKKyNsaW5lIDEzNTIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzg6CisjbGluZSAxMzU3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOyA7CisgICAgYnJlYWs7fQorY2FzZSAyMzk6CisjbGluZSAxMzU5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDA6CisjbGluZSAxMzYxICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDE6CisjbGluZSAxMzYzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNDI6CisjbGluZSAxMzcwICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDI0NDoKKyNsaW5lIDEzNzYgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBzdGFydF9zdHJ1Y3QgKFJFQ09SRF9UWVBFLCB5eXZzcFstMV0udHR5cGUpOworCQkgIC8qIFN0YXJ0IHNjb3BlIG9mIHRhZyBiZWZvcmUgcGFyc2luZyBjb21wb25lbnRzLiAgKi8KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMjQ1OgorI2xpbmUgMTM4MCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGZpbmlzaF9zdHJ1Y3QgKHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0NjoKKyNsaW5lIDEzODIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBmaW5pc2hfc3RydWN0IChzdGFydF9zdHJ1Y3QgKFJFQ09SRF9UWVBFLCBOVUxMX1RSRUUpLAorCQkJCSAgICAgIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyNDc6CisjbGluZSAxMzg2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geHJlZl90YWcgKFJFQ09SRF9UWVBFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0ODoKKyNsaW5lIDEzODggIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBzdGFydF9zdHJ1Y3QgKFVOSU9OX1RZUEUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI0OToKKyNsaW5lIDEzOTAgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBmaW5pc2hfc3RydWN0ICh5eXZzcFstM10udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNTA6CisjbGluZSAxMzkyICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZmluaXNoX3N0cnVjdCAoc3RhcnRfc3RydWN0IChVTklPTl9UWVBFLCBOVUxMX1RSRUUpLAorCQkJCSAgICAgIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAyNTE6CisjbGluZSAxMzk2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geHJlZl90YWcgKFVOSU9OX1RZUEUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjUyOgorI2xpbmUgMTM5OCAib2JqYy1wYXJzZS55IgoreyB5eXZzcFswXS5pdHlwZSA9IHN1c3BlbmRfbW9tZW50YXJ5ICgpOworCQkgIHl5dmFsLnR0eXBlID0gc3RhcnRfZW51bSAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjUzOgorI2xpbmUgMTQwMSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGZpbmlzaF9lbnVtICh5eXZzcFstNF0udHR5cGUsIG5yZXZlcnNlICh5eXZzcFstM10udHR5cGUpLCB5eXZzcFswXS50dHlwZSk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTVdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjU0OgorI2xpbmUgMTQwNCAib2JqYy1wYXJzZS55IgoreyB5eXZzcFswXS5pdHlwZSA9IHN1c3BlbmRfbW9tZW50YXJ5ICgpOworCQkgIHl5dmFsLnR0eXBlID0gc3RhcnRfZW51bSAoTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjU1OgorI2xpbmUgMTQwNyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGZpbmlzaF9lbnVtICh5eXZzcFstNF0udHR5cGUsIG5yZXZlcnNlICh5eXZzcFstM10udHR5cGUpLCB5eXZzcFswXS50dHlwZSk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTVdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjU2OgorI2xpbmUgMTQxMCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHhyZWZfdGFnIChFTlVNRVJBTF9UWVBFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MDoKKyNsaW5lIDE0MjEgIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKSBwZWR3YXJuICgiY29tbWEgYXQgZW5kIG9mIGVudW1lcmF0b3IgbGlzdCIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNjE6CisjbGluZSAxNDI2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDI2MjoKKyNsaW5lIDE0MjggIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICBwZWR3YXJuICgibm8gc2VtaWNvbG9uIGF0IGVuZCBvZiBzdHJ1Y3Qgb3IgdW5pb24iKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjYzOgorI2xpbmUgMTQzMyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjY0OgorI2xpbmUgMTQzNSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjY1OgorI2xpbmUgMTQzNyAib2JqYy1wYXJzZS55IgoreyBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiZXh0cmEgc2VtaWNvbG9uIGluIHN0cnVjdCBvciB1bmlvbiBzcGVjaWZpZWQiKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjY2OgorI2xpbmUgMTQ0MSAib2JqYy1wYXJzZS55IgoreworCQkgIHRyZWUgaW50ZXJmYWNlID0gbG9va3VwX2ludGVyZmFjZSAoeXl2c3BbLTFdLnR0eXBlKTsKKworCQkgIGlmIChpbnRlcmZhY2UpCisJCSAgICB5eXZhbC50dHlwZSA9IGdldF9jbGFzc19pdmFycyAoaW50ZXJmYWNlKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVycm9yICgiQ2Fubm90IGZpbmQgaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGZvciBgJXMnIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICh5eXZzcFstMV0udHR5cGUpKTsKKwkJICAgICAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7CisJCSAgICB9CisJCTsKKyAgICBicmVhazt9CitjYXNlIDI2NzoKKyNsaW5lIDE0NjYgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI2ODoKKyNsaW5lIDE0NzIgIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG1lbWJlciBkZWNsYXJhdGlvbnMgd2l0aCBubyBtZW1iZXJzIik7CisJCSAgc2hhZG93X3RhZyh5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI2OToKKyNsaW5lIDE0NzcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0xXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3MDoKKyNsaW5lIDE0ODMgIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG1lbWJlciBkZWNsYXJhdGlvbnMgd2l0aCBubyBtZW1iZXJzIik7CisJCSAgc2hhZG93X3RhZyh5eXZzcFswXS50dHlwZSk7CisJCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI3MToKKyNsaW5lIDE0ODggIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDI3MjoKKyNsaW5lIDE0OTAgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBwZWRhbnRpYyA9IHl5dnNwWy0xXS5pdHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc0OgorI2xpbmUgMTQ5NyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzU6CisjbGluZSAxNTAyICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ3Jva2ZpZWxkICh5eXZzcFstM10uZmlsZW5hbWUsIHl5dnNwWy0yXS5saW5lbm8sIHl5dnNwWy0xXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsIE5VTExfVFJFRSk7CisJCSAgZGVjbF9hdHRyaWJ1dGVzICh5eXZhbC50dHlwZSwgeXl2c3BbMF0udHR5cGUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjc2OgorI2xpbmUgMTUwNiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdyb2tmaWVsZCAoeXl2c3BbLTVdLmZpbGVuYW1lLCB5eXZzcFstNF0ubGluZW5vLCB5eXZzcFstM10udHR5cGUsIGN1cnJlbnRfZGVjbHNwZWNzLCB5eXZzcFstMV0udHR5cGUpOworCQkgIGRlY2xfYXR0cmlidXRlcyAoeXl2YWwudHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBwcmVmaXhfYXR0cmlidXRlcyk7IDsKKyAgICBicmVhazt9CitjYXNlIDI3NzoKKyNsaW5lIDE1MDkgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBncm9rZmllbGQgKHl5dnNwWy00XS5maWxlbmFtZSwgeXl2c3BbLTNdLmxpbmVubywgTlVMTF9UUkVFLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKHl5dmFsLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgcHJlZml4X2F0dHJpYnV0ZXMpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyNzk6CisjbGluZSAxNTIxICJvYmpjLXBhcnNlLnkiCit7IGlmICh5eXZzcFstMl0udHR5cGUgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeXl2YWwudHR5cGUgPSB5eXZzcFstMl0udHR5cGU7CisJCSAgZWxzZQorCQkgICAgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFswXS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgwOgorI2xpbmUgMTUyNiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGVycm9yX21hcmtfbm9kZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjgxOgorI2xpbmUgMTUzMiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX2VudW1lcmF0b3IgKHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODI6CisjbGluZSAxNTM0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfZW51bWVyYXRvciAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI4MzoKKyNsaW5lIDE1MzkgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyODQ6CisjbGluZSAxNTQxICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg1OgorI2xpbmUgMTU0NiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg3OgorI2xpbmUgMTU1MiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg4OgorI2xpbmUgMTU1NCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjg5OgorI2xpbmUgMTU1OSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjkwOgorI2xpbmUgMTU2MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjkxOgorI2xpbmUgMTU2NiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjkyOgorI2xpbmUgMTU2OSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjkzOgorI2xpbmUgMTU3MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICh5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMjk0OgorI2xpbmUgMTU3MyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX250IChDQUxMX0VYUFIsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI5NToKKyNsaW5lIDE1NzUgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQVJSQVlfUkVGLCB5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI5NjoKKyNsaW5lIDE1NzcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQVJSQVlfUkVGLCB5eXZzcFstMl0udHR5cGUsIE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDI5NzoKKyNsaW5lIDE1NzkgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCBOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTg6CisjbGluZSAxNTgxICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAyOTk6CisjbGluZSAxNTgzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMDA6CisjbGluZSAxNTk0ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgaWYgKHBlZGFudGljICYmIHl5dnNwWzBdLmVuZHNfaW5fbGFiZWwpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSAzMDI6CisjbGluZSAxNjAzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLmVuZHNfaW5fbGFiZWwgPSB5eXZzcFswXS5lbmRzX2luX2xhYmVsOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMDM6CisjbGluZSAxNjA1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLmVuZHNfaW5fbGFiZWwgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMDc6CisjbGluZSAxNjE3ICJvYmpjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBwdXNobGV2ZWwgKDApOworCQkgIGNsZWFyX2xhc3RfZXhwciAoKTsKKwkJICBwdXNoX21vbWVudGFyeSAoKTsKKwkJICBleHBhbmRfc3RhcnRfYmluZGluZ3MgKDApOworCQkgIGlmIChvYmpjX21ldGhvZF9jb250ZXh0KQorCQkgICAgYWRkX29iamNfZGVjbHMgKCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDMwOToKKyNsaW5lIDE2MzIgIm9iamMtcGFyc2UueSIKK3sgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGxhYmVsIGRlY2xhcmF0aW9ucyIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTI6CisjbGluZSAxNjQzICJvYmpjLXBhcnNlLnkiCit7IHRyZWUgbGluazsKKwkJICBmb3IgKGxpbmsgPSB5eXZzcFstMV0udHR5cGU7IGxpbms7IGxpbmsgPSBUUkVFX0NIQUlOIChsaW5rKSkKKwkJICAgIHsKKwkJICAgICAgdHJlZSBsYWJlbCA9IHNoYWRvd19sYWJlbCAoVFJFRV9WQUxVRSAobGluaykpOworCQkgICAgICBDX0RFQ0xBUkVEX0xBQkVMX0ZMQUcgKGxhYmVsKSA9IDE7CisJCSAgICAgIGRlY2xhcmVfbm9ubG9jYWxfbGFiZWwgKGxhYmVsKTsKKwkJICAgIH0KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMzEzOgorI2xpbmUgMTY1NyAib2JqYy1wYXJzZS55IgorezsKKyAgICBicmVhazt9CitjYXNlIDMxNToKKyNsaW5lIDE2NjIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjb252ZXJ0ICh2b2lkX3R5cGVfbm9kZSwgaW50ZWdlcl96ZXJvX25vZGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTY6CisjbGluZSAxNjY0ICJvYmpjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZW5kX2JpbmRpbmdzIChnZXRkZWNscyAoKSwgMSwgMCk7CisJCSAgeXl2YWwudHR5cGUgPSBwb3BsZXZlbCAoMSwgMSwgMCk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzE3OgorI2xpbmUgMTY3MiAib2JqYy1wYXJzZS55IgoreyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2VuZF9iaW5kaW5ncyAoZ2V0ZGVjbHMgKCksIGtlcHRfbGV2ZWxfcCAoKSwgMCk7CisJCSAgeXl2YWwudHR5cGUgPSBwb3BsZXZlbCAoa2VwdF9sZXZlbF9wICgpLCAwLCAwKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMTg6CisjbGluZSAxNjgwICJvYmpjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZW5kX2JpbmRpbmdzIChnZXRkZWNscyAoKSwga2VwdF9sZXZlbF9wICgpLCAwKTsKKwkJICB5eXZhbC50dHlwZSA9IHBvcGxldmVsIChrZXB0X2xldmVsX3AgKCksIDAsIDApOworCQkgIGlmICh5eWNoYXIgPT0gQ09OU1RBTlQgfHwgeXljaGFyID09IFNUUklORykKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnkgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMyMToKKyNsaW5lIDE3MDAgIm9iamMtcGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKHl5dnNwWy01XS5maWxlbmFtZSwgeXl2c3BbLTRdLmxpbmVubyk7CisJCSAgZXhwYW5kX3N0YXJ0X2NvbmQgKHRydXRodmFsdWVfY29udmVyc2lvbiAoeXl2c3BbLTFdLnR0eXBlKSwgMCk7CisJCSAgeXl2YWwuaXR5cGUgPSBzdG10X2NvdW50OworCQkgIGlmX3N0bXRfZmlsZSA9IHl5dnNwWy01XS5maWxlbmFtZTsKKwkJICBpZl9zdG10X2xpbmUgPSB5eXZzcFstNF0ubGluZW5vOworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjI6CisjbGluZSAxNzEzICJvYmpjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTJdLmZpbGVuYW1lLCB5eXZzcFstMV0ubGluZW5vKTsKKwkJICAvKiBTZWUgY29tbWVudCBpbiBgd2hpbGUnIGFsdGVybmF0aXZlLCBhYm92ZS4gICovCisJCSAgZW1pdF9ub3AgKCk7CisJCSAgZXhwYW5kX3N0YXJ0X2xvb3BfY29udGludWVfZWxzZXdoZXJlICgxKTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzIzOgorI2xpbmUgMTcyMCAib2JqYy1wYXJzZS55IgoreyBleHBhbmRfbG9vcF9jb250aW51ZV9oZXJlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjQ6CisjbGluZSAxNzI0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLmZpbGVuYW1lID0gaW5wdXRfZmlsZW5hbWU7IDsKKyAgICBicmVhazt9CitjYXNlIDMyNToKKyNsaW5lIDE3MjggIm9iamMtcGFyc2UueSIKK3sgeXl2YWwubGluZW5vID0gbGluZW5vOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMjY6CisjbGluZSAxNzMzICJvYmpjLXBhcnNlLnkiCit7IDsKKyAgICBicmVhazt9CitjYXNlIDMyNzoKKyNsaW5lIDE3MzggIm9iamMtcGFyc2UueSIKK3sgOworICAgIGJyZWFrO30KK2Nhc2UgMzI4OgorI2xpbmUgMTc0MyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5lbmRzX2luX2xhYmVsID0geXl2c3BbMF0uZW5kc19pbl9sYWJlbDsgOworICAgIGJyZWFrO30KK2Nhc2UgMzI5OgorI2xpbmUgMTc0OCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5lbmRzX2luX2xhYmVsID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgMzMwOgorI2xpbmUgMTc1MCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC5lbmRzX2luX2xhYmVsID0gMTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzMxOgorI2xpbmUgMTc1NiAib2JqYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7IDsKKyAgICBicmVhazt9CitjYXNlIDMzMzoKKyNsaW5lIDE3NTkgIm9iamMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstM10uZmlsZW5hbWUsIHl5dnNwWy0yXS5saW5lbm8pOworLyogSXQgYXBwZWFycyB0aGF0IHRoaXMgc2hvdWxkIG5vdCBiZSBkb25lLS10aGF0IGEgbm9uLWx2YWx1ZSBhcnJheQorICAgc2hvdWxkbid0IGdldCBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXNuJ3QgdXNlZC4KKyAgIFNlY3Rpb24gMy4yLjIuMSBzYXlzIHRoYXQgYW4gYXJyYXkgbHZhbHVlIGdldHMgY29udmVydGVkIHRvIGEgcG9pbnRlcgorICAgaWYgaXQgYXBwZWFycyBhcyBhIHRvcC1sZXZlbCBleHByZXNzaW9uLAorICAgYnV0IHNheXMgbm90aGluZyBhYm91dCBub24tbHZhbHVlIGFycmF5cy4gICovCisjaWYgMAorCQkgIC8qIENhbGwgZGVmYXVsdF9jb252ZXJzaW9uIHRvIGdldCBhbiBlcnJvcgorCQkgICAgIG9uIHJlZmVycmluZyB0byBhIHJlZ2lzdGVyIGFycmF5IGlmIHBlZGFudGljLiAgKi8KKwkJICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHl5dnNwWy0xXS50dHlwZSkpID09IEFSUkFZX1RZUEUKKwkJICAgICAgfHwgVFJFRV9DT0RFIChUUkVFX1RZUEUgKHl5dnNwWy0xXS50dHlwZSkpID09IEZVTkNUSU9OX1RZUEUpCisJCSAgICB5eXZzcFstMV0udHR5cGUgPSBkZWZhdWx0X2NvbnZlcnNpb24gKHl5dnNwWy0xXS50dHlwZSk7CisjZW5kaWYKKwkJICBpdGVyYXRvcl9leHBhbmQgKHl5dnNwWy0xXS50dHlwZSk7CisJCSAgY2xlYXJfbW9tZW50YXJ5ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMzQ6CisjbGluZSAxNzc2ICJvYmpjLXBhcnNlLnkiCit7IGV4cGFuZF9zdGFydF9lbHNlICgpOworCQkgIHl5dnNwWy0xXS5pdHlwZSA9IHN0bXRfY291bnQ7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNToKKyNsaW5lIDE3ODAgIm9iamMtcGFyc2UueSIKK3sgZXhwYW5kX2VuZF9jb25kICgpOworCQkgIGlmIChleHRyYV93YXJuaW5ncyAmJiBzdG10X2NvdW50ID09IHl5dnNwWy0zXS5pdHlwZSkKKwkJICAgIHdhcm5pbmcgKCJlbXB0eSBib2R5IGluIGFuIGVsc2Utc3RhdGVtZW50Iik7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNjoKKyNsaW5lIDE3ODQgIm9iamMtcGFyc2UueSIKK3sgZXhwYW5kX2VuZF9jb25kICgpOworCQkgIC8qIFRoaXMgd2FybmluZyBpcyBoZXJlIGluc3RlYWQgb2YgaW4gc2ltcGxlX2lmLCBiZWNhdXNlIHdlCisJCSAgICAgZG8gbm90IHdhbnQgYSB3YXJuaW5nIGlmIGFuIGVtcHR5IGlmIGlzIGZvbGxvd2VkIGJ5IGFuCisJCSAgICAgZWxzZSBzdGF0ZW1lbnQuICBJbmNyZW1lbnQgc3RtdF9jb3VudCBzbyB3ZSBkb24ndAorCQkgICAgIGdpdmUgYSBzZWNvbmQgZXJyb3IgaWYgdGhpcyBpcyBhIG5lc3RlZCBgaWYnLiAgKi8KKwkJICBpZiAoZXh0cmFfd2FybmluZ3MgJiYgc3RtdF9jb3VudCsrID09IHl5dnNwWzBdLml0eXBlKQorCQkgICAgd2FybmluZ193aXRoX2ZpbGVfYW5kX2xpbmUgKGlmX3N0bXRfZmlsZSwgaWZfc3RtdF9saW5lLAorCQkJCQkJImVtcHR5IGJvZHkgaW4gYW4gaWYtc3RhdGVtZW50Iik7IDsKKyAgICBicmVhazt9CitjYXNlIDMzNzoKKyNsaW5lIDE3OTYgIm9iamMtcGFyc2UueSIKK3sgZXhwYW5kX2VuZF9jb25kICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzMzg6CisjbGluZSAxNzk4ICJvYmpjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTJdLmZpbGVuYW1lLCB5eXZzcFstMV0ubGluZW5vKTsKKwkJICAvKiBUaGUgZW1pdF9ub3AgdXNlZCB0byBjb21lIGJlZm9yZSBlbWl0X2xpbmVfbm90ZSwKKwkJICAgICBidXQgdGhhdCBtYWRlIHRoZSBub3Agc2VlbSBsaWtlIHBhcnQgb2YgdGhlIHByZWNlZGluZyBsaW5lLgorCQkgICAgIEFuZCB0aGF0IHdhcyBjb25mdXNpbmcgd2hlbiB0aGUgcHJlY2VkaW5nIGxpbmUgd2FzCisJCSAgICAgaW5zaWRlIG9mIGFuIGlmIHN0YXRlbWVudCBhbmQgd2FzIG5vdCByZWFsbHkgZXhlY3V0ZWQuCisJCSAgICAgSSB0aGluayBpdCBvdWdodCB0byB3b3JrIHRvIHB1dCB0aGUgbm9wIGFmdGVyIHRoZSBsaW5lIG51bWJlci4KKwkJICAgICBXZSB3aWxsIHNlZS4gIC0tcm1zLCBKdWx5IDE1LCAxOTkxLiAgKi8KKwkJICBlbWl0X25vcCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzM5OgorI2xpbmUgMTgwOCAib2JqYy1wYXJzZS55IgoreyAvKiBEb24ndCBzdGFydCB0aGUgbG9vcCB0aWxsIHdlIGhhdmUgc3VjY2VlZGVkCisJCSAgICAgaW4gcGFyc2luZyB0aGUgZW5kIHRlc3QuICBUaGlzIGlzIHRvIG1ha2Ugc3VyZQorCQkgICAgIHRoYXQgd2UgZW5kIGV2ZXJ5IGxvb3Agd2Ugc3RhcnQuICAqLworCQkgIGV4cGFuZF9zdGFydF9sb29wICgxKTsKKwkJICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZSAoTlVMTF9QVFIsCisJCQkJCSAgICAgdHJ1dGh2YWx1ZV9jb252ZXJzaW9uICh5eXZzcFstMV0udHR5cGUpKTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQwOgorI2xpbmUgMTgxNyAib2JqYy1wYXJzZS55IgoreyBleHBhbmRfZW5kX2xvb3AgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM0MToKKyNsaW5lIDE4MjAgIm9iamMtcGFyc2UueSIKK3sgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UgKE5VTExfUFRSLAorCQkJCQkgICAgIHRydXRodmFsdWVfY29udmVyc2lvbiAoeXl2c3BbLTJdLnR0eXBlKSk7CisJCSAgZXhwYW5kX2VuZF9sb29wICgpOworCQkgIGNsZWFyX21vbWVudGFyeSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQyOgorI2xpbmUgMTgyNyAib2JqYy1wYXJzZS55IgoreyBleHBhbmRfZW5kX2xvb3AgKCk7CisJCSAgY2xlYXJfbW9tZW50YXJ5ICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDM6CisjbGluZSAxODMxICJvYmpjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTVdLmZpbGVuYW1lLCB5eXZzcFstNF0ubGluZW5vKTsKKwkJICAvKiBTZWUgY29tbWVudCBpbiBgd2hpbGUnIGFsdGVybmF0aXZlLCBhYm92ZS4gICovCisJCSAgZW1pdF9ub3AgKCk7CisJCSAgaWYgKHl5dnNwWy0xXS50dHlwZSkgY19leHBhbmRfZXhwcl9zdG10ICh5eXZzcFstMV0udHR5cGUpOworCQkgIC8qIE5leHQgc3RlcCBpcyB0byBjYWxsIGV4cGFuZF9zdGFydF9sb29wX2NvbnRpbnVlX2Vsc2V3aGVyZSwKKwkJICAgICBidXQgd2FpdCB0aWxsIGFmdGVyIHdlIHBhcnNlIHRoZSBlbnRpcmUgZm9yICguLi4pLgorCQkgICAgIE90aGVyd2lzZSwgaW52YWxpZCBpbnB1dCBtaWdodCBjYXVzZSB1cyB0byBjYWxsIHRoYXQKKwkJICAgICBmbiB3aXRob3V0IGNhbGxpbmcgZXhwYW5kX2VuZF9sb29wLiAgKi8KKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMzQ0OgorI2xpbmUgMTg0MyAib2JqYy1wYXJzZS55IgoreyB5eXZzcFswXS5saW5lbm8gPSBsaW5lbm87CisJCSAgeXl2YWwuZmlsZW5hbWUgPSBpbnB1dF9maWxlbmFtZTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQ1OgorI2xpbmUgMTg0NiAib2JqYy1wYXJzZS55IgoreyAKKwkJICAvKiBTdGFydCB0aGUgbG9vcC4gIERvaW5nIHRoaXMgYWZ0ZXIgcGFyc2luZworCQkgICAgIGFsbCB0aGUgZXhwcmVzc2lvbnMgZW5zdXJlcyB3ZSB3aWxsIGVuZCB0aGUgbG9vcC4gICovCisJCSAgZXhwYW5kX3N0YXJ0X2xvb3BfY29udGludWVfZWxzZXdoZXJlICgxKTsKKwkJICAvKiBFbWl0IHRoZSBlbmQtdGVzdCwgd2l0aCBhIGxpbmUgbnVtYmVyLiAgKi8KKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTJdLmZpbGVuYW1lLCB5eXZzcFstM10ubGluZW5vKTsKKwkJICBpZiAoeXl2c3BbLTRdLnR0eXBlKQorCQkgICAgZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZSAoTlVMTF9QVFIsCisJCQkJCSAgICAgICB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKHl5dnNwWy00XS50dHlwZSkpOworCQkgIC8qIERvbid0IGxldCB0aGUgdHJlZSBub2RlcyBmb3IgJDkgYmUgZGlzY2FyZGVkIGJ5CisJCSAgICAgY2xlYXJfbW9tZW50YXJ5IGR1cmluZyB0aGUgcGFyc2luZyBvZiB0aGUgbmV4dCBzdG10LiAgKi8KKwkJICBwdXNoX21vbWVudGFyeSAoKTsKKwkJICB5eXZzcFstM10ubGluZW5vID0gbGluZW5vOworCQkgIHl5dnNwWy0yXS5maWxlbmFtZSA9IGlucHV0X2ZpbGVuYW1lOworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNDY6CisjbGluZSAxODYyICJvYmpjLXBhcnNlLnkiCit7IC8qIEVtaXQgdGhlIGluY3JlbWVudCBleHByZXNzaW9uLCB3aXRoIGEgbGluZSBudW1iZXIuICAqLworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstNF0uZmlsZW5hbWUsIHl5dnNwWy01XS5saW5lbm8pOworCQkgIGV4cGFuZF9sb29wX2NvbnRpbnVlX2hlcmUgKCk7CisJCSAgaWYgKHl5dnNwWy0zXS50dHlwZSkKKwkJICAgIGNfZXhwYW5kX2V4cHJfc3RtdCAoeXl2c3BbLTNdLnR0eXBlKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOworCQkgIGV4cGFuZF9lbmRfbG9vcCAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzQ3OgorI2xpbmUgMTg3MyAib2JqYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy01XS5maWxlbmFtZSwgeXl2c3BbLTRdLmxpbmVubyk7CisJCSAgY19leHBhbmRfc3RhcnRfY2FzZSAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICAvKiBEb24ndCBsZXQgdGhlIHRyZWUgbm9kZXMgZm9yICQzIGJlIGRpc2NhcmRlZCBieQorCQkgICAgIGNsZWFyX21vbWVudGFyeSBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgdGhlIG5leHQgc3RtdC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM0ODoKKyNsaW5lIDE4ODEgIm9iamMtcGFyc2UueSIKK3sgZXhwYW5kX2VuZF9jYXNlICh5eXZzcFstM10udHR5cGUpOworCQkgIGlmICh5eWNoYXIgPT0gQ09OU1RBTlQgfHwgeXljaGFyID09IFNUUklORykKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnkgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM0OToKKyNsaW5lIDE4ODcgIm9iamMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstM10uZmlsZW5hbWUsIHl5dnNwWy0yXS5saW5lbm8pOworCQkgIGlmICggISBleHBhbmRfZXhpdF9zb21ldGhpbmcgKCkpCisJCSAgICBlcnJvciAoImJyZWFrIHN0YXRlbWVudCBub3Qgd2l0aGluIGxvb3Agb3Igc3dpdGNoIik7IDsKKyAgICBicmVhazt9CitjYXNlIDM1MDoKKyNsaW5lIDE4OTIgIm9iamMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstM10uZmlsZW5hbWUsIHl5dnNwWy0yXS5saW5lbm8pOworCQkgIGlmICghIGV4cGFuZF9jb250aW51ZV9sb29wIChOVUxMX1BUUikpCisJCSAgICBlcnJvciAoImNvbnRpbnVlIHN0YXRlbWVudCBub3Qgd2l0aGluIGEgbG9vcCIpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNTE6CisjbGluZSAxODk3ICJvYmpjLXBhcnNlLnkiCit7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoeXl2c3BbLTNdLmZpbGVuYW1lLCB5eXZzcFstMl0ubGluZW5vKTsKKwkJICBjX2V4cGFuZF9yZXR1cm4gKE5VTExfVFJFRSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM1MjoKKyNsaW5lIDE5MDEgIm9iamMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstNF0uZmlsZW5hbWUsIHl5dnNwWy0zXS5saW5lbm8pOworCQkgIGNfZXhwYW5kX3JldHVybiAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzUzOgorI2xpbmUgMTkwNSAib2JqYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy03XS5maWxlbmFtZSwgeXl2c3BbLTZdLmxpbmVubyk7CisJCSAgU1RSSVBfTk9QUyAoeXl2c3BbLTJdLnR0eXBlKTsKKwkJICBpZiAoKFRSRUVfQ09ERSAoeXl2c3BbLTJdLnR0eXBlKSA9PSBBRERSX0VYUFIKKwkJICAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICh5eXZzcFstMl0udHR5cGUsIDApKSA9PSBTVFJJTkdfQ1NUKQorCQkgICAgICB8fCBUUkVFX0NPREUgKHl5dnNwWy0yXS50dHlwZSkgPT0gU1RSSU5HX0NTVCkKKwkJICAgIGV4cGFuZF9hc20gKHl5dnNwWy0yXS50dHlwZSk7CisJCSAgZWxzZQorCQkgICAgZXJyb3IgKCJhcmd1bWVudCBvZiBgYXNtJyBpcyBub3QgYSBjb25zdGFudCBzdHJpbmciKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzU0OgorI2xpbmUgMTkxNiAib2JqYy1wYXJzZS55IgoreyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy05XS5maWxlbmFtZSwgeXl2c3BbLThdLmxpbmVubyk7CisJCSAgY19leHBhbmRfYXNtX29wZXJhbmRzICh5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsCisJCQkJCSB5eXZzcFstNl0udHR5cGUgPT0gcmlkcG9pbnRlcnNbKGludClSSURfVk9MQVRJTEVdLAorCQkJCQkgaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7IDsKKyAgICBicmVhazt9CitjYXNlIDM1NToKKyNsaW5lIDE5MjMgIm9iamMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstMTFdLmZpbGVuYW1lLCB5eXZzcFstMTBdLmxpbmVubyk7CisJCSAgY19leHBhbmRfYXNtX29wZXJhbmRzICh5eXZzcFstNl0udHR5cGUsIHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUsCisJCQkJCSB5eXZzcFstOF0udHR5cGUgPT0gcmlkcG9pbnRlcnNbKGludClSSURfVk9MQVRJTEVdLAorCQkJCQkgaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7IDsKKyAgICBicmVhazt9CitjYXNlIDM1NjoKKyNsaW5lIDE5MzEgIm9iamMtcGFyc2UueSIKK3sgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstMTNdLmZpbGVuYW1lLCB5eXZzcFstMTJdLmxpbmVubyk7CisJCSAgY19leHBhbmRfYXNtX29wZXJhbmRzICh5eXZzcFstOF0udHR5cGUsIHl5dnNwWy02XS50dHlwZSwgeXl2c3BbLTRdLnR0eXBlLCB5eXZzcFstMl0udHR5cGUsCisJCQkJCSB5eXZzcFstMTBdLnR0eXBlID09IHJpZHBvaW50ZXJzWyhpbnQpUklEX1ZPTEFUSUxFXSwKKwkJCQkJIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNTc6CisjbGluZSAxOTM3ICJvYmpjLXBhcnNlLnkiCit7IHRyZWUgZGVjbDsKKwkJICBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKHl5dnNwWy00XS5maWxlbmFtZSwgeXl2c3BbLTNdLmxpbmVubyk7CisJCSAgZGVjbCA9IGxvb2t1cF9sYWJlbCAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJICBpZiAoZGVjbCAhPSAwKQorCQkgICAgeworCQkgICAgICBUUkVFX1VTRUQgKGRlY2wpID0gMTsKKwkJICAgICAgZXhwYW5kX2dvdG8gKGRlY2wpOworCQkgICAgfQorCQk7CisgICAgYnJlYWs7fQorY2FzZSAzNTg6CisjbGluZSAxOTQ4ICJvYmpjLXBhcnNlLnkiCit7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBgZ290byAqZXhwcjsnIik7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICh5eXZzcFstNV0uZmlsZW5hbWUsIHl5dnNwWy00XS5saW5lbm8pOworCQkgIGV4cGFuZF9jb21wdXRlZF9nb3RvIChjb252ZXJ0IChwdHJfdHlwZV9ub2RlLCB5eXZzcFstMV0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzYxOgorI2xpbmUgMTk2MyAib2JqYy1wYXJzZS55IgoreworCSAgICAvKiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBhY3Rpb24gaXMgICovCisJICAgIC8qICAgICAgMSBpZiBldmVyeXRoaW5nIGlzIE9LICovIAorCSAgICAvKiAgICAgIDAgaW4gY2FzZSBvZiBlcnJvciBvciBhbHJlYWR5IGJvdW5kIGl0ZXJhdG9yICovCisKKwkgICAgeXl2YWwuaXR5cGUgPSAwOworCSAgICBpZiAoVFJFRV9DT0RFICh5eXZzcFstMV0udHR5cGUpICE9IFZBUl9ERUNMKQorCSAgICAgIGVycm9yICgiaW52YWxpZCBgZm9yIChJVEVSQVRPUiknIHN5bnRheCIpOworCSAgICBlbHNlIGlmICghIElURVJBVE9SX1AgKHl5dnNwWy0xXS50dHlwZSkpCisJICAgICAgZXJyb3IgKCJgJXMnIGlzIG5vdCBhbiBpdGVyYXRvciIsCisJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKHl5dnNwWy0xXS50dHlwZSkpKTsKKwkgICAgZWxzZSBpZiAoSVRFUkFUT1JfQk9VTkRfUCAoeXl2c3BbLTFdLnR0eXBlKSkKKwkgICAgICBlcnJvciAoImBmb3IgKCVzKScgaW5zaWRlIGV4cGFuc2lvbiBvZiBzYW1lIGl0ZXJhdG9yIiwKKwkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoeXl2c3BbLTFdLnR0eXBlKSkpOworCSAgICBlbHNlCisJICAgICAgeworCQl5eXZhbC5pdHlwZSA9IDE7CisJCWl0ZXJhdG9yX2Zvcl9sb29wX3N0YXJ0ICh5eXZzcFstMV0udHR5cGUpOworCSAgICAgIH0KKwkgIDsKKyAgICBicmVhazt9CitjYXNlIDM2MjoKKyNsaW5lIDE5ODQgIm9iamMtcGFyc2UueSIKK3sKKwkgICAgaWYgKHl5dnNwWy0xXS5pdHlwZSkKKwkgICAgICBpdGVyYXRvcl9mb3JfbG9vcF9lbmQgKHl5dnNwWy0zXS50dHlwZSk7CisJICA7CisgICAgYnJlYWs7fQorY2FzZSAzNjM6CisjbGluZSAyMDE5ICJvYmpjLXBhcnNlLnkiCit7IHJlZ2lzdGVyIHRyZWUgdmFsdWUgPSBjaGVja19jYXNlX3ZhbHVlICh5eXZzcFstMV0udHR5cGUpOworCQkgIHJlZ2lzdGVyIHRyZWUgbGFiZWwKKwkJICAgID0gYnVpbGRfZGVjbCAoTEFCRUxfREVDTCwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCisJCSAgc3RtdF9jb3VudCsrOworCisJCSAgaWYgKHZhbHVlICE9IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgdHJlZSBkdXBsaWNhdGU7CisJCSAgICAgIGludCBzdWNjZXNzID0gcHVzaGNhc2UgKHZhbHVlLCBjb252ZXJ0X2FuZF9jaGVjaywKKwkJCQkJICAgICAgbGFiZWwsICZkdXBsaWNhdGUpOworCQkgICAgICBpZiAoc3VjY2VzcyA9PSAxKQorCQkJZXJyb3IgKCJjYXNlIGxhYmVsIG5vdCB3aXRoaW4gYSBzd2l0Y2ggc3RhdGVtZW50Iik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMikKKwkJCXsKKwkJCSAgZXJyb3IgKCJkdXBsaWNhdGUgY2FzZSB2YWx1ZSIpOworCQkJICBlcnJvcl93aXRoX2RlY2wgKGR1cGxpY2F0ZSwgInRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IGZvciB0aGF0IHZhbHVlIik7CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMykKKwkJCXdhcm5pbmcgKCJjYXNlIHZhbHVlIG91dCBvZiByYW5nZSIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDUpCisJCQllcnJvciAoImNhc2UgbGFiZWwgd2l0aGluIHNjb3BlIG9mIGNsZWFudXAgb3IgdmFyaWFibGUgYXJyYXkiKTsKKwkJICAgIH0KKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY0OgorI2xpbmUgMjA0NCAib2JqYy1wYXJzZS55IgoreyByZWdpc3RlciB0cmVlIHZhbHVlMSA9IGNoZWNrX2Nhc2VfdmFsdWUgKHl5dnNwWy0zXS50dHlwZSk7CisJCSAgcmVnaXN0ZXIgdHJlZSB2YWx1ZTIgPSBjaGVja19jYXNlX3ZhbHVlICh5eXZzcFstMV0udHR5cGUpOworCQkgIHJlZ2lzdGVyIHRyZWUgbGFiZWwKKwkJICAgID0gYnVpbGRfZGVjbCAoTEFCRUxfREVDTCwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGNhc2UgcmFuZ2VzIik7CisJCSAgc3RtdF9jb3VudCsrOworCisJCSAgaWYgKHZhbHVlMSAhPSBlcnJvcl9tYXJrX25vZGUgJiYgdmFsdWUyICE9IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgdHJlZSBkdXBsaWNhdGU7CisJCSAgICAgIGludCBzdWNjZXNzID0gcHVzaGNhc2VfcmFuZ2UgKHZhbHVlMSwgdmFsdWUyLAorCQkJCQkJICAgIGNvbnZlcnRfYW5kX2NoZWNrLCBsYWJlbCwKKwkJCQkJCSAgICAmZHVwbGljYXRlKTsKKwkJICAgICAgaWYgKHN1Y2Nlc3MgPT0gMSkKKwkJCWVycm9yICgiY2FzZSBsYWJlbCBub3Qgd2l0aGluIGEgc3dpdGNoIHN0YXRlbWVudCIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDIpCisJCQl7CisJCQkgIGVycm9yICgiZHVwbGljYXRlIGNhc2UgdmFsdWUiKTsKKwkJCSAgZXJyb3Jfd2l0aF9kZWNsIChkdXBsaWNhdGUsICJ0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSBmb3IgdGhhdCB2YWx1ZSIpOworCQkJfQorCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDMpCisJCQl3YXJuaW5nICgiY2FzZSB2YWx1ZSBvdXQgb2YgcmFuZ2UiKTsKKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSA0KQorCQkJd2FybmluZyAoImVtcHR5IGNhc2UgcmFuZ2UiKTsKKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSA1KQorCQkJZXJyb3IgKCJjYXNlIGxhYmVsIHdpdGhpbiBzY29wZSBvZiBjbGVhbnVwIG9yIHZhcmlhYmxlIGFycmF5Iik7CisJCSAgICB9CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM2NToKKyNsaW5lIDIwNzUgIm9iamMtcGFyc2UueSIKK3sKKwkJICB0cmVlIGR1cGxpY2F0ZTsKKwkJICByZWdpc3RlciB0cmVlIGxhYmVsCisJCSAgICA9IGJ1aWxkX2RlY2wgKExBQkVMX0RFQ0wsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKwkJICBpbnQgc3VjY2VzcyA9IHB1c2hjYXNlIChOVUxMX1RSRUUsIDAsIGxhYmVsLCAmZHVwbGljYXRlKTsKKwkJICBzdG10X2NvdW50Kys7CisJCSAgaWYgKHN1Y2Nlc3MgPT0gMSkKKwkJICAgIGVycm9yICgiZGVmYXVsdCBsYWJlbCBub3Qgd2l0aGluIGEgc3dpdGNoIHN0YXRlbWVudCIpOworCQkgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMikKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJtdWx0aXBsZSBkZWZhdWx0IGxhYmVscyBpbiBvbmUgc3dpdGNoIik7CisJCSAgICAgIGVycm9yX3dpdGhfZGVjbCAoZHVwbGljYXRlLCAidGhpcyBpcyB0aGUgZmlyc3QgZGVmYXVsdCBsYWJlbCIpOworCQkgICAgfQorCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjY6CisjbGluZSAyMDkwICJvYmpjLXBhcnNlLnkiCit7IHRyZWUgbGFiZWwgPSBkZWZpbmVfbGFiZWwgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8sIHl5dnNwWy0xXS50dHlwZSk7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbm9wICgpOworCQkgIGlmIChsYWJlbCkKKwkJICAgIGV4cGFuZF9sYWJlbCAobGFiZWwpOworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNjc6CisjbGluZSAyMTAyICJvYmpjLXBhcnNlLnkiCit7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzY4OgorI2xpbmUgMjEwNSAib2JqYy1wYXJzZS55IgoreyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7IDsKKyAgICBicmVhazt9CitjYXNlIDM2OToKKyNsaW5lIDIxMTAgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDM3MToKKyNsaW5lIDIxMTcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7IDsKKyAgICBicmVhazt9CitjYXNlIDM3NDoKKyNsaW5lIDIxMjQgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzc1OgorI2xpbmUgMjEyOSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzY6CisjbGluZSAyMTM0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGNvbWJpbmVfc3RyaW5ncyAoeXl2c3BbMF0udHR5cGUpLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzc6CisjbGluZSAyMTM2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGNvbWJpbmVfc3RyaW5ncyAoeXl2c3BbMF0udHR5cGUpLCB5eXZzcFstMl0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzg6CisjbGluZSAyMTQyICJvYmpjLXBhcnNlLnkiCit7IHB1c2hsZXZlbCAoMCk7CisJCSAgY2xlYXJfcGFybV9vcmRlciAoKTsKKwkJICBkZWNsYXJlX3Bhcm1fbGV2ZWwgKDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAzNzk6CisjbGluZSAyMTQ2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgcGFybWxpc3RfdGFnc193YXJuaW5nICgpOworCQkgIHBvcGxldmVsICgwLCAwLCAwKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzgxOgorI2xpbmUgMjE1NCAib2JqYy1wYXJzZS55IgoreyB0cmVlIHBhcm07CisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGZvcndhcmQgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucyIpOworCQkgIC8qIE1hcmsgdGhlIGZvcndhcmQgZGVjbHMgYXMgc3VjaC4gICovCisJCSAgZm9yIChwYXJtID0gZ2V0ZGVjbHMgKCk7IHBhcm07IHBhcm0gPSBUUkVFX0NIQUlOIChwYXJtKSkKKwkJICAgIFRSRUVfQVNNX1dSSVRURU4gKHBhcm0pID0gMTsKKwkJICBjbGVhcl9wYXJtX29yZGVyICgpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzODI6CisjbGluZSAyMTYyICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7IDsKKyAgICBicmVhazt9CitjYXNlIDM4MzoKKyNsaW5lIDIxNjQgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzODQ6CisjbGluZSAyMTcwICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X3Bhcm1faW5mbyAoMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM4NToKKyNsaW5lIDIxNzIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfcGFybV9pbmZvICgwKTsKKwkJICAvKiBHY2MgdXNlZCB0byBhbGxvdyB0aGlzIGFzIGFuIGV4dGVuc2lvbi4gIEhvd2V2ZXIsIGl0IGRvZXMKKwkJICAgICBub3Qgd29yayBmb3IgYWxsIHRhcmdldHMsIGFuZCB0aHVzIGhhcyBiZWVuIGRpc2FibGVkLgorCQkgICAgIEFsc28sIHNpbmNlIGZ1bmMgKC4uLikgYW5kIGZ1bmMgKCkgYXJlIGluZGlzdGluZ3Vpc2hhYmxlLAorCQkgICAgIGl0IGNhdXNlZCBwcm9ibGVtcyB3aXRoIHRoZSBjb2RlIGluIGV4cGFuZF9idWlsdGluIHdoaWNoCisJCSAgICAgdHJpZXMgdG8gdmVyaWZ5IHRoYXQgQlVJTFRfSU5fTkVYVF9BUkcgaXMgYmVpbmcgdXNlZAorCQkgICAgIGNvcnJlY3RseS4gICovCisJCSAgZXJyb3IgKCJBTlNJIEMgcmVxdWlyZXMgYSBuYW1lZCBhcmd1bWVudCBiZWZvcmUgYC4uLiciKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgMzg2OgorI2xpbmUgMjE4MiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9wYXJtX2luZm8gKDEpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzODc6CisjbGluZSAyMTg0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X3Bhcm1faW5mbyAoMCk7IDsKKyAgICBicmVhazt9CitjYXNlIDM4ODoKKyNsaW5lIDIxODkgIm9iamMtcGFyc2UueSIKK3sgcHVzaF9wYXJtX2RlY2wgKHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzg5OgorI2xpbmUgMjE5MSAib2JqYy1wYXJzZS55IgoreyBwdXNoX3Bhcm1fZGVjbCAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTA6CisjbGluZSAyMTk4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSB5eXZzcFstMV0udHR5cGUpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSB5eXZzcFswXS50dHlwZSkpOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzkxOgorI2xpbmUgMjIwNyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgeXl2c3BbLTFdLnR0eXBlKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgeXl2c3BbMF0udHR5cGUpKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMl0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTI6CisjbGluZSAyMjE2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSB5eXZzcFstMV0udHR5cGUpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSB5eXZzcFswXS50dHlwZSkpOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzkzOgorI2xpbmUgMjIyNSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgeXl2c3BbLTFdLnR0eXBlKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgeXl2c3BbMF0udHR5cGUpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7ICA7CisgICAgYnJlYWs7fQorY2FzZSAzOTQ6CisjbGluZSAyMjM1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSB5eXZzcFstMV0udHR5cGUpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSB5eXZzcFswXS50dHlwZSkpOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoeXl2c3BbLTJdLml0eXBlKTsgIDsKKyAgICBicmVhazt9CitjYXNlIDM5NToKKyNsaW5lIDIyNDkgIm9iamMtcGFyc2UueSIKK3sgcHVzaGxldmVsICgwKTsKKwkJICBjbGVhcl9wYXJtX29yZGVyICgpOworCQkgIGRlY2xhcmVfcGFybV9sZXZlbCAoMSk7IDsKKyAgICBicmVhazt9CitjYXNlIDM5NjoKKyNsaW5lIDIyNTMgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJICBwYXJtbGlzdF90YWdzX3dhcm5pbmcgKCk7CisJCSAgcG9wbGV2ZWwgKDAsIDAsIDApOyA7CisgICAgYnJlYWs7fQorY2FzZSAzOTg6CisjbGluZSAyMjYxICJvYmpjLXBhcnNlLnkiCit7IHRyZWUgdDsKKwkJICBmb3IgKHQgPSB5eXZzcFstMV0udHR5cGU7IHQ7IHQgPSBUUkVFX0NIQUlOICh0KSkKKwkJICAgIGlmIChUUkVFX1ZBTFVFICh0KSA9PSBOVUxMX1RSRUUpCisJCSAgICAgIGVycm9yICgiYC4uLicgaW4gb2xkLXN0eWxlIGlkZW50aWZpZXIgbGlzdCIpOworCQkgIHl5dmFsLnR0eXBlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIE5VTExfVFJFRSwgeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgMzk5OgorI2xpbmUgMjI3MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQwMDoKKyNsaW5lIDIyNzMgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMl0udHR5cGUsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSkpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MDE6CisjbGluZSAyMjc5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDAyOgorI2xpbmUgMjI4MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0yXS50dHlwZSwgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQwMzoKKyNsaW5lIDIyODYgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwuaXR5cGUgPSBwZWRhbnRpYzsKKwkJICBwZWRhbnRpYyA9IDA7IDsKKyAgICBicmVhazt9CitjYXNlIDQwOToKKyNsaW5lIDIyOTkgIm9iamMtcGFyc2UueSIKK3sKKwkJICBpZiAob2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0KQorICAgICAgICAgICAgICAgICAgICB7CisJCSAgICAgIGZpbmlzaF9jbGFzcyAob2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0KTsKKwkJICAgICAgb2JqY19pdmFyX2NoYWluID0gTlVMTF9UUkVFOworCQkgICAgICBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgd2FybmluZyAoImBAZW5kJyBtdXN0IGFwcGVhciBpbiBhbiBpbXBsZW1lbnRhdGlvbiBjb250ZXh0Iik7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQxMDoKKyNsaW5lIDIzMTQgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0MTE6CisjbGluZSAyMzE2ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gY2hhaW5vbiAoeXl2c3BbLTJdLnR0eXBlLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgeXl2c3BbMF0udHR5cGUpKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDEyOgorI2xpbmUgMjMyMSAib2JqYy1wYXJzZS55IgoreworCQkgIG9iamNfZGVjbGFyZV9jbGFzcyAoeXl2c3BbLTFdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDEzOgorI2xpbmUgMjMyNyAib2JqYy1wYXJzZS55IgoreworCQkgIG9iamNfZGVjbGFyZV9hbGlhcyAoeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MTQ6CisjbGluZSAyMzMzICJvYmpjLXBhcnNlLnkiCit7CisJCSAgb2JqY19pbnRlcmZhY2VfY29udGV4dCA9IG9iamNfaXZhcl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTlRFUkZBQ0VfVFlQRSwgeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUsIHl5dnNwWy0xXS50dHlwZSk7CisgICAgICAgICAgICAgICAgICBvYmpjX3B1YmxpY19mbGFnID0gMDsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDE1OgorI2xpbmUgMjMzOSAib2JqYy1wYXJzZS55IgoreworICAgICAgICAgICAgICAgICAgY29udGludWVfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MTY6CisjbGluZSAyMzQ0ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgZmluaXNoX2NsYXNzIChvYmpjX2ludGVyZmFjZV9jb250ZXh0KTsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0ID0gTlVMTF9UUkVFOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MTc6CisjbGluZSAyMzUwICJvYmpjLXBhcnNlLnkiCit7CisJCSAgb2JqY19pbnRlcmZhY2VfY29udGV4dAorCQkgICAgPSBzdGFydF9jbGFzcyAoQ0xBU1NfSU5URVJGQUNFX1RZUEUsIHl5dnNwWy0xXS50dHlwZSwgTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSk7CisgICAgICAgICAgICAgICAgICBjb250aW51ZV9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQxODoKKyNsaW5lIDIzNTcgIm9iamMtcGFyc2UueSIKK3sKKwkJICBmaW5pc2hfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQxOToKKyNsaW5lIDIzNjMgIm9iamMtcGFyc2UueSIKK3sKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0ID0gb2JqY19pdmFyX2NvbnRleHQKKwkJICAgID0gc3RhcnRfY2xhc3MgKENMQVNTX0lOVEVSRkFDRV9UWVBFLCB5eXZzcFstNF0udHR5cGUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlKTsKKyAgICAgICAgICAgICAgICAgIG9iamNfcHVibGljX2ZsYWcgPSAwOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MjA6CisjbGluZSAyMzY5ICJvYmpjLXBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICBjb250aW51ZV9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQyMToKKyNsaW5lIDIzNzQgIm9iamMtcGFyc2UueSIKK3sKKwkJICBmaW5pc2hfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQyMjoKKyNsaW5lIDIzODAgIm9iamMtcGFyc2UueSIKK3sKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTlRFUkZBQ0VfVFlQRSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlX2NsYXNzIChvYmpjX2ludGVyZmFjZV9jb250ZXh0KTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDIzOgorI2xpbmUgMjM4NyAib2JqYy1wYXJzZS55IgoreworCQkgIGZpbmlzaF9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCSAgb2JqY19pbnRlcmZhY2VfY29udGV4dCA9IE5VTExfVFJFRTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDI0OgorI2xpbmUgMjM5MyAib2JqYy1wYXJzZS55IgoreworCQkgIG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCA9IG9iamNfaXZhcl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFLCB5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAgICAgICAgICAgICAgICAgIG9iamNfcHVibGljX2ZsYWcgPSAwOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MjU6CisjbGluZSAyMzk5ICJvYmpjLXBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICBvYmpjX2l2YXJfY2hhaW4KKwkJICAgID0gY29udGludWVfY2xhc3MgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQyNjoKKyNsaW5lIDI0MDUgIm9iamMtcGFyc2UueSIKK3sKKwkJICBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQKKwkJICAgID0gc3RhcnRfY2xhc3MgKENMQVNTX0lNUExFTUVOVEFUSU9OX1RZUEUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisgICAgICAgICAgICAgICAgICBvYmpjX2l2YXJfY2hhaW4KKwkJICAgID0gY29udGludWVfY2xhc3MgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQyNzoKKyNsaW5lIDI0MTMgIm9iamMtcGFyc2UueSIKK3sKKwkJICBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQgPSBvYmpjX2l2YXJfY29udGV4dAorCQkgICAgPSBzdGFydF9jbGFzcyAoQ0xBU1NfSU1QTEVNRU5UQVRJT05fVFlQRSwgeXl2c3BbLTNdLnR0eXBlLCB5eXZzcFstMV0udHR5cGUsIE5VTExfVFJFRSk7CisgICAgICAgICAgICAgICAgICBvYmpjX3B1YmxpY19mbGFnID0gMDsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDI4OgorI2xpbmUgMjQxOSAib2JqYy1wYXJzZS55IgoreworICAgICAgICAgICAgICAgICAgb2JqY19pdmFyX2NoYWluCisJCSAgICA9IGNvbnRpbnVlX2NsYXNzIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0Mjk6CisjbGluZSAyNDI1ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgb2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFLCB5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOworICAgICAgICAgICAgICAgICAgb2JqY19pdmFyX2NoYWluCisJCSAgICA9IGNvbnRpbnVlX2NsYXNzIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MzA6CisjbGluZSAyNDMzICJvYmpjLXBhcnNlLnkiCit7CisJCSAgb2JqY19pbnRlcmZhY2VfY29udGV4dAorCQkgICAgPSBzdGFydF9jbGFzcyAoQ0FURUdPUllfSU5URVJGQUNFX1RZUEUsIHl5dnNwWy00XS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisgICAgICAgICAgICAgICAgICBjb250aW51ZV9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQzMToKKyNsaW5lIDI0NDAgIm9iamMtcGFyc2UueSIKK3sKKwkJICBmaW5pc2hfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQzMjoKKyNsaW5lIDI0NDYgIm9iamMtcGFyc2UueSIKK3sKKwkJICBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQKKwkJICAgID0gc3RhcnRfY2xhc3MgKENBVEVHT1JZX0lNUExFTUVOVEFUSU9OX1RZUEUsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCBOVUxMX1RSRUUpOworICAgICAgICAgICAgICAgICAgb2JqY19pdmFyX2NoYWluCisJCSAgICA9IGNvbnRpbnVlX2NsYXNzIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0MzM6CisjbGluZSAyNDU2ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgcmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyAoKTsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0CisJCSAgICA9IHN0YXJ0X3Byb3RvY29sKFBST1RPQ09MX0lOVEVSRkFDRV9UWVBFLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDM0OgorI2xpbmUgMjQ2MiAib2JqYy1wYXJzZS55IgoreworCQkgIGZvcmdldF9wcm90b2NvbF9xdWFsaWZpZXJzKCk7CisJCSAgZmluaXNoX3Byb3RvY29sKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQzNToKKyNsaW5lIDI0NzEgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDM3OgorI2xpbmUgMjQ3OSAib2JqYy1wYXJzZS55IgoreworCQkgIGlmICh5eXZzcFstMl0uY29kZSA9PSBMVF9FWFBSICYmIHl5dnNwWzBdLmNvZGUgPT0gR1RfRVhQUikKKwkJICAgIHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOworCQkgIGVsc2UKKwkJICAgIFlZRVJST1IxOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NDA6CisjbGluZSAyNDkzICJvYmpjLXBhcnNlLnkiCit7IG9iamNfcHVibGljX2ZsYWcgPSAyOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDE6CisjbGluZSAyNDk0ICJvYmpjLXBhcnNlLnkiCit7IG9iamNfcHVibGljX2ZsYWcgPSAwOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDI6CisjbGluZSAyNDk1ICJvYmpjLXBhcnNlLnkiCit7IG9iamNfcHVibGljX2ZsYWcgPSAxOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDM6CisjbGluZSAyNTAwICJvYmpjLXBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICB5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsKKyAgICAgICAgICAgICAgICA7CisgICAgYnJlYWs7fQorY2FzZSA0NDU6CisjbGluZSAyNTA1ICJvYmpjLXBhcnNlLnkiCit7CisgICAgICAgICAgICAgICAgICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiZXh0cmEgc2VtaWNvbG9uIGluIHN0cnVjdCBvciB1bmlvbiBzcGVjaWZpZWQiKTsKKyAgICAgICAgICAgICAgICA7CisgICAgYnJlYWs7fQorY2FzZSA0NDY6CisjbGluZSAyNTIzICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMV0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDc6CisjbGluZSAyNTI5ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICh5eXZzcFstMV0uaXR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDg6CisjbGluZSAyNTM1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NDk6CisjbGluZSAyNTQwICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NTI6CisjbGluZSAyNTQ3ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBhZGRfaW5zdGFuY2VfdmFyaWFibGUgKG9iamNfaXZhcl9jb250ZXh0LAorCQkJCQkgICAgICBvYmpjX3B1YmxpY19mbGFnLAorCQkJCQkgICAgICB5eXZzcFswXS50dHlwZSwgY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCSAgICAgIE5VTExfVFJFRSk7CisgICAgICAgICAgICAgICAgOworICAgIGJyZWFrO30KK2Nhc2UgNDUzOgorI2xpbmUgMjU1NCAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYWRkX2luc3RhbmNlX3ZhcmlhYmxlIChvYmpjX2l2YXJfY29udGV4dCwKKwkJCQkJICAgICAgb2JqY19wdWJsaWNfZmxhZywKKwkJCQkJICAgICAgeXl2c3BbLTJdLnR0eXBlLCBjdXJyZW50X2RlY2xzcGVjcywgeXl2c3BbMF0udHR5cGUpOworICAgICAgICAgICAgICAgIDsKKyAgICBicmVhazt9CitjYXNlIDQ1NDoKKyNsaW5lIDI1NjAgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGFkZF9pbnN0YW5jZV92YXJpYWJsZSAob2JqY19pdmFyX2NvbnRleHQsCisJCQkJCSAgICAgIG9iamNfcHVibGljX2ZsYWcsCisJCQkJCSAgICAgIE5VTExfVFJFRSwKKwkJCQkJICAgICAgY3VycmVudF9kZWNsc3BlY3MsIHl5dnNwWzBdLnR0eXBlKTsKKyAgICAgICAgICAgICAgICA7CisgICAgYnJlYWs7fQorY2FzZSA0NTU6CisjbGluZSAyNTcwICJvYmpjLXBhcnNlLnkiCit7CisJCSAgcmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyAoKTsKKwkJICBpZiAob2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0KQorCQkgICAgb2JqY19pbmhlcml0X2NvZGUgPSBDTEFTU19NRVRIT0RfREVDTDsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgIGZhdGFsICgibWV0aG9kIGRlZmluaXRpb24gbm90IGluIGNsYXNzIGNvbnRleHQiKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDU2OgorI2xpbmUgMjU3OCAib2JqYy1wYXJzZS55IgoreworCQkgIGZvcmdldF9wcm90b2NvbF9xdWFsaWZpZXJzICgpOworCQkgIGFkZF9jbGFzc19tZXRob2QgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCwgeXl2c3BbMF0udHR5cGUpOworCQkgIHN0YXJ0X21ldGhvZF9kZWYgKHl5dnNwWzBdLnR0eXBlKTsKKwkJICBvYmpjX21ldGhvZF9jb250ZXh0ID0geXl2c3BbMF0udHR5cGU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ1NzoKKyNsaW5lIDI1ODUgIm9iamMtcGFyc2UueSIKK3sKKwkJICBjb250aW51ZV9tZXRob2RfZGVmICgpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NTg6CisjbGluZSAyNTg5ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgZmluaXNoX21ldGhvZF9kZWYgKCk7CisJCSAgb2JqY19tZXRob2RfY29udGV4dCA9IE5VTExfVFJFRTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDU5OgorI2xpbmUgMjU5NSAib2JqYy1wYXJzZS55IgoreworCQkgIHJlbWVtYmVyX3Byb3RvY29sX3F1YWxpZmllcnMgKCk7CisJCSAgaWYgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCkKKwkJICAgIG9iamNfaW5oZXJpdF9jb2RlID0gSU5TVEFOQ0VfTUVUSE9EX0RFQ0w7CisgICAgICAgICAgICAgICAgICBlbHNlCisJCSAgICBmYXRhbCAoIm1ldGhvZCBkZWZpbml0aW9uIG5vdCBpbiBjbGFzcyBjb250ZXh0Iik7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ2MDoKKyNsaW5lIDI2MDMgIm9iamMtcGFyc2UueSIKK3sKKwkJICBmb3JnZXRfcHJvdG9jb2xfcXVhbGlmaWVycyAoKTsKKwkJICBhZGRfaW5zdGFuY2VfbWV0aG9kIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQsIHl5dnNwWzBdLnR0eXBlKTsKKwkJICBzdGFydF9tZXRob2RfZGVmICh5eXZzcFswXS50dHlwZSk7CisJCSAgb2JqY19tZXRob2RfY29udGV4dCA9IHl5dnNwWzBdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0NjE6CisjbGluZSAyNjEwICJvYmpjLXBhcnNlLnkiCit7CisJCSAgY29udGludWVfbWV0aG9kX2RlZiAoKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDYyOgorI2xpbmUgMjYxNCAib2JqYy1wYXJzZS55IgoreworCQkgIGZpbmlzaF9tZXRob2RfZGVmICgpOworCQkgIG9iamNfbWV0aG9kX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ2NDoKKyNsaW5lIDI2MjYgIm9iamMtcGFyc2UueSIKK3t5eXZhbC50dHlwZSA9IE5VTExfVFJFRTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDY5OgorI2xpbmUgMjYzMyAib2JqYy1wYXJzZS55Igore3l5dmFsLnR0eXBlID0gTlVMTF9UUkVFOyA7CisgICAgYnJlYWs7fQorY2FzZSA0NzM6CisjbGluZSAyNjQzICJvYmpjLXBhcnNlLnkiCit7CisJCSAgb2JqY19pbmhlcml0X2NvZGUgPSBDTEFTU19NRVRIT0RfREVDTDsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDc0OgorI2xpbmUgMjY0NyAib2JqYy1wYXJzZS55IgoreworCQkgIGFkZF9jbGFzc19tZXRob2QgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDc2OgorI2xpbmUgMjY1MyAib2JqYy1wYXJzZS55IgoreworCQkgIG9iamNfaW5oZXJpdF9jb2RlID0gSU5TVEFOQ0VfTUVUSE9EX0RFQ0w7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ3NzoKKyNsaW5lIDI2NTcgIm9iamMtcGFyc2UueSIKK3sKKwkJICBhZGRfaW5zdGFuY2VfbWV0aG9kIChvYmpjX2ludGVyZmFjZV9jb250ZXh0LCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ3OToKKyNsaW5lIDI2NjUgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX21ldGhvZF9kZWNsIChvYmpjX2luaGVyaXRfY29kZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSwgTlVMTF9UUkVFKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDgwOgorI2xpbmUgMjY3MCAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfbWV0aG9kX2RlY2wgKG9iamNfaW5oZXJpdF9jb2RlLCBOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlLCBOVUxMX1RSRUUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA0ODE6CisjbGluZSAyNjc1ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9tZXRob2RfZGVjbCAob2JqY19pbmhlcml0X2NvZGUsIHl5dnNwWy0zXS50dHlwZSwgeXl2c3BbLTFdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDQ4MjoKKyNsaW5lIDI2ODAgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX21ldGhvZF9kZWNsIChvYmpjX2luaGVyaXRfY29kZSwgTlVMTF9UUkVFLCB5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNDkxOgorI2xpbmUgMjcxMCAib2JqYy1wYXJzZS55IgoreyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKHl5dnNwWy0yXS5pdHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5MjoKKyNsaW5lIDI3MTUgIm9iamMtcGFyc2UueSIKK3sgc2hhZG93X3RhZyAoeXl2c3BbLTFdLnR0eXBlKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDkzOgorI2xpbmUgMjcxNyAib2JqYy1wYXJzZS55IgoreyBwZWR3YXJuICgiZW1wdHkgZGVjbGFyYXRpb24iKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNDk0OgorI2xpbmUgMjcyMiAib2JqYy1wYXJzZS55IgoreyBwdXNoX3Bhcm1fZGVjbCAoeXl2c3BbMF0udHR5cGUpOyA7CisgICAgYnJlYWs7fQorY2FzZSA0OTU6CisjbGluZSAyNzI0ICJvYmpjLXBhcnNlLnkiCit7IHB1c2hfcGFybV9kZWNsICh5eXZzcFswXS50dHlwZSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5NjoKKyNsaW5lIDI3MzIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJIHl5dnNwWy0xXS50dHlwZSksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJIHl5dnNwWzBdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5NzoKKyNsaW5lIDI3MzcgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJIHl5dnNwWy0xXS50dHlwZSksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJIHl5dnNwWzBdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5ODoKKyNsaW5lIDI3NDIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJIHl5dnNwWy0xXS50dHlwZSksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJIHl5dnNwWzBdLnR0eXBlKSk7IDsKKyAgICBicmVhazt9CitjYXNlIDQ5OToKKyNsaW5lIDI3NTAgIm9iamMtcGFyc2UueSIKK3sKKwkgICAgCSAgeXl2YWwudHR5cGUgPSBOVUxMX1RSRUU7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDUwMDoKKyNsaW5lIDI3NTQgIm9iamMtcGFyc2UueSIKK3sKKwkJICAvKiBvaCB3aGF0IGEga2x1ZGdlISAqLworCQkgIHl5dmFsLnR0eXBlID0gKHRyZWUpMTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTAxOgorI2xpbmUgMjc1OSAib2JqYy1wYXJzZS55IgoreworCQkgIHB1c2hsZXZlbCAoMCk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDUwMjoKKyNsaW5lIDI3NjMgIm9iamMtcGFyc2UueSIKK3sKKwkgIAkgIC8qIHJldHVybnMgYSB0cmVlIGxpc3Qgbm9kZSBnZW5lcmF0ZWQgYnkgZ2V0X3Bhcm1faW5mbyAqLworCQkgIHl5dmFsLnR0eXBlID0geXl2c3BbMF0udHR5cGU7CisJCSAgcG9wbGV2ZWwgKDAsIDAsIDApOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1MDU6CisjbGluZSAyNzc4ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBjaGFpbm9uICh5eXZzcFstMV0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTEwOgorI2xpbmUgMjc5MSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MTE6CisjbGluZSAyNzkyICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IDsKKyAgICBicmVhazt9CitjYXNlIDUxMjoKKyNsaW5lIDI3OTMgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTEzOgorI2xpbmUgMjc5NCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MTQ6CisjbGluZSAyNzk1ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IDsKKyAgICBicmVhazt9CitjYXNlIDUxNToKKyNsaW5lIDI3OTYgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTE2OgorI2xpbmUgMjc5NyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MTc6CisjbGluZSAyNzk4ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IDsKKyAgICBicmVhazt9CitjYXNlIDUxODoKKyNsaW5lIDI3OTkgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTE5OgorI2xpbmUgMjgwMCAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MjA6CisjbGluZSAyODAxICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IDsKKyAgICBicmVhazt9CitjYXNlIDUyMToKKyNsaW5lIDI4MDIgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTIyOgorI2xpbmUgMjgwMyAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MjM6CisjbGluZSAyODA0ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IDsKKyAgICBicmVhazt9CitjYXNlIDUyNDoKKyNsaW5lIDI4MDUgIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTI1OgorI2xpbmUgMjgwNiAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MjY6CisjbGluZSAyODA3ICJvYmpjLXBhcnNlLnkiCit7IHl5dmFsLnR0eXBlID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IDsKKyAgICBicmVhazt9CitjYXNlIDUyNzoKKyNsaW5lIDI4MDggIm9iamMtcGFyc2UueSIKK3sgeXl2YWwudHR5cGUgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgOworICAgIGJyZWFrO30KK2Nhc2UgNTI4OgorI2xpbmUgMjgwOSAib2JqYy1wYXJzZS55IgoreyB5eXZhbC50dHlwZSA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyA7CisgICAgYnJlYWs7fQorY2FzZSA1MzE6CisjbGluZSAyODE1ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9rZXl3b3JkX2RlY2wgKHl5dnNwWy01XS50dHlwZSwgeXl2c3BbLTJdLnR0eXBlLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDUzMjoKKyNsaW5lIDI4MjAgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGJ1aWxkX2tleXdvcmRfZGVjbCAoeXl2c3BbLTJdLnR0eXBlLCBOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTMzOgorI2xpbmUgMjgyNSAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfa2V5d29yZF9kZWNsIChOVUxMX1RSRUUsIHl5dnNwWy0yXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1MzQ6CisjbGluZSAyODMwICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF9rZXl3b3JkX2RlY2wgKE5VTExfVFJFRSwgTlVMTF9UUkVFLCB5eXZzcFswXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDUzODoKKyNsaW5lIDI4NDMgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1Mzk6CisjbGluZSAyODUxICJvYmpjLXBhcnNlLnkiCit7CisJCSAgaWYgKFRSRUVfQ0hBSU4gKHl5dnNwWzBdLnR0eXBlKSA9PSBOVUxMX1RSRUUpCisJCSAgICAvKiBqdXN0IHJldHVybiB0aGUgZXhwci4sIHJlbW92ZSBhIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisJCSAgICB5eXZhbC50dHlwZSA9IFRSRUVfVkFMVUUgKHl5dnNwWzBdLnR0eXBlKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgIC8qIHdlIGhhdmUgYSBjb21tYSBleHByLiwgd2Ugd2lsbCBjb2xsYXBzZSBsYXRlciAqLworCQkgICAgeXl2YWwudHR5cGUgPSB5eXZzcFswXS50dHlwZTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTQwOgorI2xpbmUgMjg2MyAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstMl0udHR5cGUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTQxOgorI2xpbmUgMjg2NyAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHl5dnNwWzBdLnR0eXBlKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTQzOgorI2xpbmUgMjg3NSAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gZ2V0X2NsYXNzX3JlZmVyZW5jZSAoeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1NDQ6CisjbGluZSAyODgyICJvYmpjLXBhcnNlLnkiCit7IG9iamNfcmVjZWl2ZXJfY29udGV4dCA9IDE7IDsKKyAgICBicmVhazt9CitjYXNlIDU0NToKKyNsaW5lIDI4ODQgIm9iamMtcGFyc2UueSIKK3sgb2JqY19yZWNlaXZlcl9jb250ZXh0ID0gMDsgOworICAgIGJyZWFrO30KK2Nhc2UgNTQ2OgorI2xpbmUgMjg4NiAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0ICh5eXZzcFstM10udHR5cGUsIHl5dnNwWy0xXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDU1MDoKKyNsaW5lIDI4OTkgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IGNoYWlub24gKHl5dnNwWy0xXS50dHlwZSwgeXl2c3BbMF0udHR5cGUpOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1NTE6CisjbGluZSAyOTA2ICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBidWlsZF90cmVlX2xpc3QgKHl5dnNwWy0xXS50dHlwZSwgTlVMTF9UUkVFKTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTUyOgorI2xpbmUgMjkxMCAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCTsKKyAgICBicmVhazt9CitjYXNlIDU1MzoKKyNsaW5lIDI5MTcgIm9iamMtcGFyc2UueSIKK3sKKwkJICB5eXZhbC50dHlwZSA9IHl5dnNwWy0xXS50dHlwZTsKKwkJOworICAgIGJyZWFrO30KK2Nhc2UgNTU0OgorI2xpbmUgMjkyNCAib2JqYy1wYXJzZS55IgoreworCQkgIHl5dmFsLnR0eXBlID0geXl2c3BbLTFdLnR0eXBlOworCQk7CisgICAgYnJlYWs7fQorY2FzZSA1NTU6CisjbGluZSAyOTMzICJvYmpjLXBhcnNlLnkiCit7CisJCSAgeXl2YWwudHR5cGUgPSBncm9rdHlwZW5hbWUgKHl5dnNwWy0xXS50dHlwZSk7CisJCTsKKyAgICBicmVhazt9Cit9CisgICAvKiB0aGUgYWN0aW9uIGZpbGUgZ2V0cyBjb3BpZWQgaW4gaW4gcGxhY2Ugb2YgdGhpcyBkb2xsYXJzaWduICovCisjbGluZSA0ODcgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24uc2ltcGxlIgorDAorICB5eXZzcCAtPSB5eWxlbjsKKyAgeXlzc3AgLT0geXlsZW47CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwIC09IHl5bGVuOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7CisKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3ArKzsKKyAgaWYgKHl5bGVuID09IDApCisgICAgeworICAgICAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eWxsb2MuZmlyc3RfbGluZTsKKyAgICAgIHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5eWxsb2MuZmlyc3RfY29sdW1uOworICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwLTEpLT5sYXN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT50ZXh0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2xpbmU7CisgICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfY29sdW1uOworICAgIH0KKyNlbmRpZgorCisgIC8qIE5vdyAic2hpZnQiIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4KKyAgICAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUgdGhhdCBnb2VzIHRvLAorICAgICBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8KKyAgICAgYW5kIHRoZSBydWxlIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBpZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWVycmxhYjogICAvKiBoZXJlIG9uIGRldGVjdGluZyBlcnJvciAqLworCisgIGlmICghIHl5ZXJyc3RhdHVzKQorICAgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAgICBpZiAoeXluID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKwl7CisJICBpbnQgc2l6ZSA9IDA7CisJICBjaGFyICptc2c7CisJICBpbnQgeCwgY291bnQ7CisKKwkgIGNvdW50ID0gMDsKKwkgIC8qIFN0YXJ0IFggYXQgLXl5biBpZiBuZWMgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbiB5eWNoZWNrLiAgKi8KKwkgIGZvciAoeCA9ICh5eW4gPCAwID8gLXl5biA6IDApOworCSAgICAgICB4IDwgKHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCSAgICAgIHNpemUgKz0gc3RybGVuKHl5dG5hbWVbeF0pICsgMTUsIGNvdW50Kys7CisJICBtc2cgPSAoY2hhciAqKSBtYWxsb2Moc2l6ZSArIDE1KTsKKwkgIGlmIChtc2cgIT0gMCkKKwkgICAgeworCSAgICAgIHN0cmNweShtc2csICJwYXJzZSBlcnJvciIpOworCisJICAgICAgaWYgKGNvdW50IDwgNSkKKwkJeworCQkgIGNvdW50ID0gMDsKKwkJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKKwkJICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCisJCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCQkgICAgICB7CisJCQlzdHJjYXQobXNnLCBjb3VudCA9PSAwID8gIiwgZXhwZWN0aW5nIGAiIDogIiBvciBgIik7CisJCQlzdHJjYXQobXNnLCB5eXRuYW1lW3hdKTsKKwkJCXN0cmNhdChtc2csICInIik7CisJCQljb3VudCsrOworCQkgICAgICB9CisJCX0KKwkgICAgICB5eWVycm9yKG1zZyk7CisJICAgICAgZnJlZShtc2cpOworCSAgICB9CisJICBlbHNlCisJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGNlZWRlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwl5eWVycm9yKCJwYXJzZSBlcnJvciIpOworICAgIH0KKworICBnb3RvIHl5ZXJybGFiMTsKK3l5ZXJybGFiMTogICAvKiBoZXJlIG9uIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlvbiAqLworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIGlmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4gZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJWVlBQk9SVDsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworI2VuZGlmCisKKyAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuCisgICAgIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvciB0b2tlbi4gICovCisKKyAgeXllcnJzdGF0dXMgPSAzOwkJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzICovCisKKyAgZ290byB5eWVycmhhbmRsZTsKKworeXllcnJkZWZhdWx0OiAgLyogY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgZXJyb3IgdG9rZW4uICovCisKKyNpZiAwCisgIC8qIFRoaXMgaXMgd3Jvbmc7IG9ubHkgc3RhdGVzIHRoYXQgZXhwbGljaXRseSB3YW50IGVycm9yIHRva2VucworICAgICBzaG91bGQgc2hpZnQgdGhlbS4gICovCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOyAgLyogSWYgaXRzIGRlZmF1bHQgaXMgdG8gYWNjZXB0IGFueSB0b2tlbiwgb2suICBPdGhlcndpc2UgcG9wIGl0LiovCisgIGlmICh5eW4pIGdvdG8geXlkZWZhdWx0OworI2VuZGlmCisKK3l5ZXJycG9wOiAgIC8qIHBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuICovCisKKyAgaWYgKHl5c3NwID09IHl5c3MpIFlZQUJPUlQ7CisgIHl5dnNwLS07CisgIHl5c3RhdGUgPSAqLS15eXNzcDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AtLTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjogc3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkKKwlmcHJpbnRmIChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKK3l5ZXJyaGFuZGxlOgorCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluICs9IFlZVEVSUk9SOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IFlZVEVSUk9SKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycnBvcDsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycnBvcDsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIik7CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7Cit9CisjbGluZSAyOTM4ICJvYmpjLXBhcnNlLnkiCisKZGlmZiAtLWdpdCBhL2djYy9vYmpjL29iamMtcGFyc2UueSBiL2djYy9vYmpjL29iamMtcGFyc2UueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDYzNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL29iamMvb2JqYy1wYXJzZS55CkBAIC0wLDAgKzEsMjkzOCBAQAorLypXQVJOSU5HOiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQhKi8KKy8qIFlBQ0MgcGFyc2VyIGZvciBDIHN5bnRheCBhbmQgZm9yIE9iamVjdGl2ZSBDLiAgLSotYy0qLQorICAgQ29weXJpZ2h0IChDKSAxOTg3LCA4OCwgODksIDkyLTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGdyYW1tYXIgb2YgQyBhbmQgdGhhdCBvZiBPYmplY3RpdmUgQy4KKyAgIGlmb2JqYyAuLi4gZW5kIGlmb2JqYyAgY29uZGl0aW9uYWxzIGNvbnRhaW4gY29kZSBmb3IgT2JqZWN0aXZlIEMgb25seS4KKyAgIGlmYyAuLi4gZW5kIGlmYyAgY29uZGl0aW9uYWxzIGNvbnRhaW4gY29kZSBmb3IgQyBvbmx5LgorICAgU2VkIGNvbW1hbmRzIGluIE1ha2VmaWxlLmluIGFyZSB1c2VkIHRvIGNvbnZlcnQgdGhpcyBmaWxlIGludG8KKyAgIGMtcGFyc2UueSBhbmQgaW50byBvYmpjLXBhcnNlLnkuICAqLworCisvKiBUbyB3aG9tZXZlciBpdCBtYXkgY29uY2VybjogSSBoYXZlIGhlYXJkIHRoYXQgc3VjaCBhIHRoaW5nIHdhcyBvbmNlCisgICB3cml0dGVuIGJ5IEFUJlQsIGJ1dCBJIGhhdmUgbmV2ZXIgc2VlbiBpdC4gICovCisKKyVleHBlY3QgNjYKKworJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiaW5wdXQuaCIKKyNpbmNsdWRlICJjLWxleC5oIgorI2luY2x1ZGUgImMtdHJlZS5oIgorI2luY2x1ZGUgImZsYWdzLmgiCisKKyNpZmRlZiBNVUxUSUJZVEVfQ0hBUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAib2JqYy1hY3QuaCIKKworLyogU2luY2UgcGFyc2VycyBhcmUgZGlzdGluY3QgZm9yIGVhY2ggbGFuZ3VhZ2UsIHB1dCB0aGUgbGFuZ3VhZ2Ugc3RyaW5nCisgICBkZWZpbml0aW9uIGhlcmUuICAqLworY2hhciAqbGFuZ3VhZ2Vfc3RyaW5nID0gIkdOVSBPYmotQyI7CisKKyNpZm5kZWYgZXJybm8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKwordm9pZCB5eWVycm9yICgpOworCisvKiBMaWtlIFlZRVJST1IgYnV0IGRvIGNhbGwgeXllcnJvci4gICovCisjZGVmaW5lIFlZRVJST1IxIHsgeXllcnJvciAoInN5bnRheCBlcnJvciIpOyBZWUVSUk9SOyB9CisKKy8qIENhdXNlIHRoZSBgeXlkZWJ1ZycgdmFyaWFibGUgdG8gYmUgZGVmaW5lZC4gICovCisjZGVmaW5lIFlZREVCVUcgMQorJX0KKworJXN0YXJ0IHByb2dyYW0KKworJXVuaW9uIHtsb25nIGl0eXBlOyB0cmVlIHR0eXBlOyBlbnVtIHRyZWVfY29kZSBjb2RlOworCWNoYXIgKmZpbGVuYW1lOyBpbnQgbGluZW5vOyBpbnQgZW5kc19pbl9sYWJlbDsgfQorCisvKiBBbGwgaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlc2VydmVkIHdvcmRzCisgICBhbmQgYXJlIG5vdCBkZWNsYXJlZCB0eXBlZGVmcyBpbiB0aGUgY3VycmVudCBibG9jayAqLworJXRva2VuIElERU5USUZJRVIKKworLyogQWxsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGRlY2xhcmVkIHR5cGVkZWZzIGluIHRoZSBjdXJyZW50IGJsb2NrLgorICAgSW4gc29tZSBjb250ZXh0cywgdGhleSBhcmUgdHJlYXRlZCBqdXN0IGxpa2UgSURFTlRJRklFUiwKKyAgIGJ1dCB0aGV5IGNhbiBhbHNvIHNlcnZlIGFzIHR5cGVzcGVjcyBpbiBkZWNsYXJhdGlvbnMuICAqLworJXRva2VuIFRZUEVOQU1FCisKKy8qIFJlc2VydmVkIHdvcmRzIHRoYXQgc3BlY2lmeSBzdG9yYWdlIGNsYXNzLgorICAgeXlsdmFsIGNvbnRhaW5zIGFuIElERU5USUZJRVJfTk9ERSB3aGljaCBpbmRpY2F0ZXMgd2hpY2ggb25lLiAgKi8KKyV0b2tlbiBTQ1NQRUMKKworLyogUmVzZXJ2ZWQgd29yZHMgdGhhdCBzcGVjaWZ5IHR5cGUuCisgICB5eWx2YWwgY29udGFpbnMgYW4gSURFTlRJRklFUl9OT0RFIHdoaWNoIGluZGljYXRlcyB3aGljaCBvbmUuICAqLworJXRva2VuIFRZUEVTUEVDCisKKy8qIFJlc2VydmVkIHdvcmRzIHRoYXQgcXVhbGlmeSB0eXBlOiAiY29uc3QiIG9yICJ2b2xhdGlsZSIuCisgICB5eWx2YWwgY29udGFpbnMgYW4gSURFTlRJRklFUl9OT0RFIHdoaWNoIGluZGljYXRlcyB3aGljaCBvbmUuICAqLworJXRva2VuIFRZUEVfUVVBTAorCisvKiBDaGFyYWN0ZXIgb3IgbnVtZXJpYyBjb25zdGFudHMuCisgICB5eWx2YWwgaXMgdGhlIG5vZGUgZm9yIHRoZSBjb25zdGFudC4gICovCisldG9rZW4gQ09OU1RBTlQKKworLyogU3RyaW5nIGNvbnN0YW50cyBpbiByYXcgZm9ybS4KKyAgIHl5bHZhbCBpcyBhIFNUUklOR19DU1Qgbm9kZS4gICovCisldG9rZW4gU1RSSU5HCisKKy8qICIuLi4iLCB1c2VkIGZvciBmdW5jdGlvbnMgd2l0aCB2YXJpYWJsZSBhcmdsaXN0cy4gICovCisldG9rZW4gRUxMSVBTSVMKKworLyogdGhlIHJlc2VydmVkIHdvcmRzICovCisvKiBTQ08gaW5jbHVkZSBmaWxlcyB0ZXN0ICJBU00iLCBzbyB1c2Ugc29tZXRoaW5nIGVsc2UuICovCisldG9rZW4gU0laRU9GIEVOVU0gU1RSVUNUIFVOSU9OIElGIEVMU0UgV0hJTEUgRE8gRk9SIFNXSVRDSCBDQVNFIERFRkFVTFQKKyV0b2tlbiBCUkVBSyBDT05USU5VRSBSRVRVUk4gR09UTyBBU01fS0VZV09SRCBUWVBFT0YgQUxJR05PRgorJXRva2VuIEFUVFJJQlVURSBFWFRFTlNJT04gTEFCRUwKKyV0b2tlbiBSRUFMUEFSVCBJTUFHUEFSVAorCisvKiBBZGQgcHJlY2VkZW5jZSBydWxlcyB0byBzb2x2ZSBkYW5nbGluZyBlbHNlIHMvciBjb25mbGljdCAqLworJW5vbmFzc29jIElGCislbm9uYXNzb2MgRUxTRQorCisvKiBEZWZpbmUgdGhlIG9wZXJhdG9yIHRva2VucyBhbmQgdGhlaXIgcHJlY2VkZW5jZXMuCisgICBUaGUgdmFsdWUgaXMgYW4gaW50ZWdlciBiZWNhdXNlLCBpZiB1c2VkLCBpdCBpcyB0aGUgdHJlZSBjb2RlCisgICB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24gbWFkZSBmcm9tIHRoZSBvcGVyYXRvci4gICovCisKKyVyaWdodCA8Y29kZT4gQVNTSUdOICc9JworJXJpZ2h0IDxjb2RlPiAnPycgJzonCislbGVmdCA8Y29kZT4gT1JPUgorJWxlZnQgPGNvZGU+IEFOREFORAorJWxlZnQgPGNvZGU+ICd8JworJWxlZnQgPGNvZGU+ICdeJworJWxlZnQgPGNvZGU+ICcmJworJWxlZnQgPGNvZGU+IEVRQ09NUEFSRQorJWxlZnQgPGNvZGU+IEFSSVRIQ09NUEFSRQorJWxlZnQgPGNvZGU+IExTSElGVCBSU0hJRlQKKyVsZWZ0IDxjb2RlPiAnKycgJy0nCislbGVmdCA8Y29kZT4gJyonICcvJyAnJScKKyVyaWdodCA8Y29kZT4gVU5BUlkgUExVU1BMVVMgTUlOVVNNSU5VUworJWxlZnQgSFlQRVJVTkFSWQorJWxlZnQgPGNvZGU+IFBPSU5UU0FUICcuJyAnKCcgJ1snCisKKy8qIFRoZSBPYmplY3RpdmUtQyBrZXl3b3Jkcy4gIFRoZXNlIGFyZSBpbmNsdWRlZCBpbiBDIGFuZCBpbgorICAgT2JqZWN0aXZlIEMsIHNvIHRoYXQgdGhlIHRva2VuIGNvZGVzIGFyZSB0aGUgc2FtZSBpbiBib3RoLiAgKi8KKyV0b2tlbiBJTlRFUkZBQ0UgSU1QTEVNRU5UQVRJT04gRU5EIFNFTEVDVE9SIERFRlMgRU5DT0RFCisldG9rZW4gQ0xBU1NOQU1FIFBVQkxJQyBQUklWQVRFIFBST1RFQ1RFRCBQUk9UT0NPTCBPQkpFQ1ROQU1FIENMQVNTIEFMSUFTCisKKy8qIE9iamVjdGl2ZS1DIHN0cmluZyBjb25zdGFudHMgaW4gcmF3IGZvcm0uCisgICB5eWx2YWwgaXMgYW4gT0JKQ19TVFJJTkdfQ1NUIG5vZGUuICAqLworJXRva2VuIE9CSkNfU1RSSU5HCisKKworJXR5cGUgPGNvZGU+IHVub3AKKworJXR5cGUgPHR0eXBlPiBpZGVudGlmaWVyIElERU5USUZJRVIgVFlQRU5BTUUgQ09OU1RBTlQgZXhwciBub25udWxsX2V4cHJsaXN0IGV4cHJsaXN0CisldHlwZSA8dHR5cGU+IGV4cHJfbm9fY29tbWFzIGNhc3RfZXhwciB1bmFyeV9leHByIHByaW1hcnkgc3RyaW5nIFNUUklORworJXR5cGUgPHR0eXBlPiB0eXBlZF9kZWNsc3BlY3MgcmVzZXJ2ZWRfZGVjbHNwZWNzCisldHlwZSA8dHR5cGU+IHR5cGVkX3R5cGVzcGVjcyByZXNlcnZlZF90eXBlc3BlY3F1YWxzCisldHlwZSA8dHR5cGU+IGRlY2xtb2RzIHR5cGVzcGVjIHR5cGVzcGVjcXVhbF9yZXNlcnZlZAorJXR5cGUgPHR0eXBlPiB0eXBlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIgcmVzZXJ2ZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyCisldHlwZSA8dHR5cGU+IGRlY2xtb2RzX25vX3ByZWZpeF9hdHRyCisldHlwZSA8dHR5cGU+IFNDU1BFQyBUWVBFU1BFQyBUWVBFX1FVQUwgbm9uZW1wdHlfdHlwZV9xdWFscyBtYXliZV90eXBlX3F1YWwKKyV0eXBlIDx0dHlwZT4gaW5pdGRlY2xzIG5vdHlwZV9pbml0ZGVjbHMgaW5pdGRjbCBub3R5cGVfaW5pdGRjbAorJXR5cGUgPHR0eXBlPiBpbml0IG1heWJlYXNtCisldHlwZSA8dHR5cGU+IGFzbV9vcGVyYW5kcyBub25udWxsX2FzbV9vcGVyYW5kcyBhc21fb3BlcmFuZCBhc21fY2xvYmJlcnMKKyV0eXBlIDx0dHlwZT4gbWF5YmVfYXR0cmlidXRlIGF0dHJpYnV0ZXMgYXR0cmlidXRlIGF0dHJpYnV0ZV9saXN0IGF0dHJpYgorJXR5cGUgPHR0eXBlPiBhbnlfd29yZAorCisldHlwZSA8dHR5cGU+IGNvbXBzdG10CisKKyV0eXBlIDx0dHlwZT4gZGVjbGFyYXRvcgorJXR5cGUgPHR0eXBlPiBub3R5cGVfZGVjbGFyYXRvciBhZnRlcl90eXBlX2RlY2xhcmF0b3IKKyV0eXBlIDx0dHlwZT4gcGFybV9kZWNsYXJhdG9yCisKKyV0eXBlIDx0dHlwZT4gc3RydWN0c3AgY29tcG9uZW50X2RlY2xfbGlzdCBjb21wb25lbnRfZGVjbF9saXN0MgorJXR5cGUgPHR0eXBlPiBjb21wb25lbnRfZGVjbCBjb21wb25lbnRzIGNvbXBvbmVudF9kZWNsYXJhdG9yCisldHlwZSA8dHR5cGU+IGVudW1saXN0IGVudW1lcmF0b3IKKyV0eXBlIDx0dHlwZT4gdHlwZW5hbWUgYWJzZGNsIGFic2RjbDEgdHlwZV9xdWFscworJXR5cGUgPHR0eXBlPiB4ZXhwciBwYXJtcyBwYXJtIGlkZW50aWZpZXJzCisKKyV0eXBlIDx0dHlwZT4gcGFybWxpc3QgcGFybWxpc3RfMSBwYXJtbGlzdF8yCisldHlwZSA8dHR5cGU+IHBhcm1saXN0X29yX2lkZW50aWZpZXJzIHBhcm1saXN0X29yX2lkZW50aWZpZXJzXzEKKyV0eXBlIDx0dHlwZT4gaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzCisKKyV0eXBlIDxpdHlwZT4gc2V0c3BlY3MKKworJXR5cGUgPGVuZHNfaW5fbGFiZWw+IGxpbmVub19zdG10X29yX2xhYmVsIGxpbmVub19zdG10X29yX2xhYmVscyBzdG10X29yX2xhYmVsCisKKyV0eXBlIDxmaWxlbmFtZT4gc2F2ZV9maWxlbmFtZQorJXR5cGUgPGxpbmVubz4gc2F2ZV9saW5lbm8KKwwKKy8qIHRoZSBPYmplY3RpdmUtQyBub250ZXJtaW5hbHMgKi8KKworJXR5cGUgPHR0eXBlPiBpdmFyX2RlY2xfbGlzdCBpdmFyX2RlY2xzIGl2YXJfZGVjbCBpdmFycyBpdmFyX2RlY2xhcmF0b3IKKyV0eXBlIDx0dHlwZT4gbWV0aG9kZGVjbCB1bmFyeXNlbGVjdG9yIGtleXdvcmRzZWxlY3RvciBzZWxlY3RvcgorJXR5cGUgPHR0eXBlPiBrZXl3b3JkZGVjbCByZWNlaXZlciBvYmpjbWVzc2FnZWV4cHIgbWVzc2FnZWFyZ3MKKyV0eXBlIDx0dHlwZT4ga2V5d29yZGV4cHIga2V5d29yZGFyZ2xpc3Qga2V5d29yZGFyZworJXR5cGUgPHR0eXBlPiBteXBhcm1zIG15cGFybSBvcHRwYXJtbGlzdCByZXNlcnZlZHdvcmRzIG9iamNzZWxlY3RvcmV4cHIKKyV0eXBlIDx0dHlwZT4gc2VsZWN0b3Jhcmcga2V5d29yZG5hbWVsaXN0IGtleXdvcmRuYW1lIG9iamNlbmNvZGVleHByCisldHlwZSA8dHR5cGU+IG9iamNfc3RyaW5nIG5vbl9lbXB0eV9wcm90b2NvbHJlZnMgcHJvdG9jb2xyZWZzIGlkZW50aWZpZXJfbGlzdCBvYmpjcHJvdG9jb2xleHByCisKKyV0eXBlIDx0dHlwZT4gQ0xBU1NOQU1FIE9CSkNfU1RSSU5HIE9CSkVDVE5BTUUKKwwKKyV7CisvKiBOdW1iZXIgb2Ygc3RhdGVtZW50cyAobG9vc2VseSBzcGVha2luZykgc2VlbiBzbyBmYXIuICAqLworc3RhdGljIGludCBzdG10X2NvdW50OworCisvKiBJbnB1dCBmaWxlIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgZW5kIG9mIHRoZSBib2R5IG9mIGxhc3Qgc2ltcGxlX2lmOworICAgdXNlZCBieSB0aGUgc3RtdC1ydWxlIGltbWVkaWF0ZWx5IGFmdGVyIHNpbXBsZV9pZiByZXR1cm5zLiAgKi8KK3N0YXRpYyBjaGFyICppZl9zdG10X2ZpbGU7CitzdGF0aWMgaW50IGlmX3N0bXRfbGluZTsKKworLyogTGlzdCBvZiB0eXBlcyBhbmQgc3RydWN0dXJlIGNsYXNzZXMgb2YgdGhlIGN1cnJlbnQgZGVjbGFyYXRpb24uICAqLworc3RhdGljIHRyZWUgY3VycmVudF9kZWNsc3BlY3MgPSBOVUxMX1RSRUU7CitzdGF0aWMgdHJlZSBwcmVmaXhfYXR0cmlidXRlcyA9IE5VTExfVFJFRTsKKworLyogU3RhY2sgb2Ygc2F2ZWQgdmFsdWVzIG9mIGN1cnJlbnRfZGVjbHNwZWNzIGFuZCBwcmVmaXhfYXR0cmlidXRlcy4gICovCitzdGF0aWMgdHJlZSBkZWNsc3BlY19zdGFjazsKKworLyogMSBpZiB3ZSBleHBsYWluZWQgdW5kZWNsYXJlZCB2YXIgZXJyb3JzLiAgKi8KK3N0YXRpYyBpbnQgdW5kZWNsYXJlZF92YXJpYWJsZV9ub3RpY2U7CisKKy8qIE9iamVjdGl2ZS1DIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisKK3RyZWUgb2JqY19pbnRlcmZhY2VfY29udGV4dDsKK3RyZWUgb2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0OwordHJlZSBvYmpjX21ldGhvZF9jb250ZXh0OwordHJlZSBvYmpjX2l2YXJfY2hhaW47Cit0cmVlIG9iamNfaXZhcl9jb250ZXh0OworZW51bSB0cmVlX2NvZGUgb2JqY19pbmhlcml0X2NvZGU7CitpbnQgb2JqY19yZWNlaXZlcl9jb250ZXh0OworaW50IG9iamNfcHVibGljX2ZsYWc7CisKKworLyogVGVsbCB5eXBhcnNlIGhvdyB0byBwcmludCBhIHRva2VuJ3MgdmFsdWUsIGlmIHl5ZGVidWcgaXMgc2V0LiAgKi8KKworI2RlZmluZSBZWVBSSU5UKEZJTEUsWVlDSEFSLFlZTFZBTCkgeXlwcmludChGSUxFLFlZQ0hBUixZWUxWQUwpCitleHRlcm4gdm9pZCB5eXByaW50ICgpOworJX0KKwwKKyUlCitwcm9ncmFtOiAvKiBlbXB0eSAqLworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBhbiBlbXB0eSBzb3VyY2UgZmlsZSIpOworCQkgIGZpbmlzaF9maWxlICgpOworCQl9CisJfCBleHRkZWZzCisJCXsKKwkJICAvKiBJbiBjYXNlIHRoZXJlIHdlcmUgbWlzc2luZyBjbG9zZWJyYWNlcywKKwkJICAgICBnZXQgdXMgYmFjayB0byB0aGUgZ2xvYmFsIGJpbmRpbmcgbGV2ZWwuICAqLworCQkgIHdoaWxlICghIGdsb2JhbF9iaW5kaW5nc19wICgpKQorCQkgICAgcG9wbGV2ZWwgKDAsIDAsIDApOworCQkgIGZpbmlzaF9maWxlICgpOworCQl9CisJOworCisvKiB0aGUgcmVhc29uIGZvciB0aGUgc3RyYW5nZSBhY3Rpb25zIGluIHRoaXMgcnVsZQorIGlzIHNvIHRoYXQgbm90eXBlX2luaXRkZWNscyB3aGVuIHJlYWNoZWQgdmlhIGRhdGFkZWYKKyBjYW4gZmluZCBhIHZhbGlkIGxpc3Qgb2YgdHlwZSBhbmQgc2Mgc3BlY3MgaW4gJDAuICovCisKK2V4dGRlZnM6CisJeyQ8dHR5cGU+JCA9IE5VTExfVFJFRTsgfSBleHRkZWYKKwl8IGV4dGRlZnMgeyQ8dHR5cGU+JCA9IE5VTExfVFJFRTsgfSBleHRkZWYKKwk7CisKK2V4dGRlZjoKKwlmbmRlZgorCXwgZGF0YWRlZgorCXwgb2JqY2RlZgorCXwgQVNNX0tFWVdPUkQgJygnIGV4cHIgJyknICc7JworCQl7IFNUUklQX05PUFMgKCQzKTsKKwkJICBpZiAoKFRSRUVfQ09ERSAoJDMpID09IEFERFJfRVhQUgorCQkgICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKCQzLCAwKSkgPT0gU1RSSU5HX0NTVCkKKwkJICAgICAgfHwgVFJFRV9DT0RFICgkMykgPT0gU1RSSU5HX0NTVCkKKwkJICAgIGFzc2VtYmxlX2FzbSAoJDMpOworCQkgIGVsc2UKKwkJICAgIGVycm9yICgiYXJndW1lbnQgb2YgYGFzbScgaXMgbm90IGEgY29uc3RhbnQgc3RyaW5nIik7IH0KKwl8IGV4dGVuc2lvbiBleHRkZWYKKwkJeyBwZWRhbnRpYyA9ICQ8aXR5cGU+MTsgfQorCTsKKworZGF0YWRlZjoKKwkgIHNldHNwZWNzIG5vdHlwZV9pbml0ZGVjbHMgJzsnCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgZXJyb3IgKCJBTlNJIEMgZm9yYmlkcyBkYXRhIGRlZmluaXRpb24gd2l0aCBubyB0eXBlIG9yIHN0b3JhZ2UgY2xhc3MiKTsKKwkJICBlbHNlIGlmICghZmxhZ190cmFkaXRpb25hbCkKKwkJICAgIHdhcm5pbmcgKCJkYXRhIGRlZmluaXRpb24gaGFzIG5vIHR5cGUgb3Igc3RvcmFnZSBjbGFzcyIpOyAKKworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDEpOyB9CisgICAgICAgIHwgZGVjbG1vZHMgc2V0c3BlY3Mgbm90eXBlX2luaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgdHlwZWRfZGVjbHNwZWNzIHNldHNwZWNzIGluaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgIH0KKyAgICAgICAgfCBkZWNsbW9kcyAnOycKKwkgIHsgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjcyAnOycKKwkgIHsgc2hhZG93X3RhZyAoJDEpOyB9CisJfCBlcnJvciAnOycKKwl8IGVycm9yICd9JworCXwgJzsnCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBkb2VzIG5vdCBhbGxvdyBleHRyYSBgOycgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIik7IH0KKwk7CisMCitmbmRlZjoKKwkgIHR5cGVkX2RlY2xzcGVjcyBzZXRzcGVjcyBkZWNsYXJhdG9yCisJCXsgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCAkMywKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyB9CisJICBvbGRfc3R5bGVfcGFybV9kZWNscworCQl7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IH0KKwkgIGNvbXBzdG10X29yX2Vycm9yCisJCXsgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjcyBzZXRzcGVjcyBkZWNsYXJhdG9yIGVycm9yCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzIHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yCisJCXsgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCAkMywKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMCkpCisJCSAgICBZWUVSUk9SMTsKKwkJICByZWluaXRfcGFyc2VfZm9yX2Z1bmN0aW9uICgpOyB9CisJICBvbGRfc3R5bGVfcGFybV9kZWNscworCQl7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IH0KKwkgIGNvbXBzdG10X29yX2Vycm9yCisJCXsgZmluaXNoX2Z1bmN0aW9uICgwKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzIHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yIGVycm9yCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHNldHNwZWNzIG5vdHlwZV9kZWNsYXJhdG9yCisJCXsgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKE5VTExfVFJFRSwgJDIsCisJCQkJCXByZWZpeF9hdHRyaWJ1dGVzLCBOVUxMX1RSRUUsIDApKQorCQkgICAgWVlFUlJPUjE7CisJCSAgcmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbiAoKTsgfQorCSAgb2xkX3N0eWxlX3Bhcm1fZGVjbHMKKwkJeyBzdG9yZV9wYXJtX2RlY2xzICgpOyB9CisJICBjb21wc3RtdF9vcl9lcnJvcgorCQl7IGZpbmlzaF9mdW5jdGlvbiAoMCk7IAorCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDEpOyB9CisJfCBzZXRzcGVjcyBub3R5cGVfZGVjbGFyYXRvciBlcnJvcgorCQl7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDEpOyB9CisJOworCitpZGVudGlmaWVyOgorCUlERU5USUZJRVIKKwl8IFRZUEVOQU1FCisJfCBPQkpFQ1ROQU1FCisgICAgICAgIHwgQ0xBU1NOQU1FCisJOworCit1bm9wOiAgICAgJyYnCisJCXsgJCQgPSBBRERSX0VYUFI7IH0KKwl8ICctJworCQl7ICQkID0gTkVHQVRFX0VYUFI7IH0KKwl8ICcrJworCQl7ICQkID0gQ09OVkVSVF9FWFBSOyB9CisJfCBQTFVTUExVUworCQl7ICQkID0gUFJFSU5DUkVNRU5UX0VYUFI7IH0KKwl8IE1JTlVTTUlOVVMKKwkJeyAkJCA9IFBSRURFQ1JFTUVOVF9FWFBSOyB9CisJfCAnficKKwkJeyAkJCA9IEJJVF9OT1RfRVhQUjsgfQorCXwgJyEnCisJCXsgJCQgPSBUUlVUSF9OT1RfRVhQUjsgfQorCTsKKworZXhwcjoJbm9ubnVsbF9leHBybGlzdAorCQl7ICQkID0gYnVpbGRfY29tcG91bmRfZXhwciAoJDEpOyB9CisJOworCitleHBybGlzdDoKKwkgIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IG5vbm51bGxfZXhwcmxpc3QKKwk7CisKK25vbm51bGxfZXhwcmxpc3Q6CisJZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMSk7IH0KKwl8IG5vbm51bGxfZXhwcmxpc3QgJywnIGV4cHJfbm9fY29tbWFzCisJCXsgY2hhaW5vbiAoJDEsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMykpOyB9CisJOworCit1bmFyeV9leHByOgorCXByaW1hcnkKKwl8ICcqJyBjYXN0X2V4cHIgICAlcHJlYyBVTkFSWQorCQl7ICQkID0gYnVpbGRfaW5kaXJlY3RfcmVmICgkMiwgInVuYXJ5ICoiKTsgfQorCS8qIF9fZXh0ZW5zaW9uX18gdHVybnMgb2ZmIC1wZWRhbnRpYyBmb3IgZm9sbG93aW5nIHByaW1hcnkuICAqLworCXwgZXh0ZW5zaW9uIGNhc3RfZXhwcgkgICVwcmVjIFVOQVJZCisJCXsgJCQgPSAkMjsKKwkJICBwZWRhbnRpYyA9ICQ8aXR5cGU+MTsgfQorCXwgdW5vcCBjYXN0X2V4cHIgICVwcmVjIFVOQVJZCisJCXsgJCQgPSBidWlsZF91bmFyeV9vcCAoJDEsICQyLCAwKTsKKwkJICBvdmVyZmxvd193YXJuaW5nICgkJCk7IH0KKwkvKiBSZWZlciB0byB0aGUgYWRkcmVzcyBvZiBhIGxhYmVsIGFzIGEgcG9pbnRlci4gICovCisJfCBBTkRBTkQgaWRlbnRpZmllcgorCQl7IHRyZWUgbGFiZWwgPSBsb29rdXBfbGFiZWwgKCQyKTsKKwkJICBpZiAocGVkYW50aWMpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYCYmJyIpOworCQkgIGlmIChsYWJlbCA9PSAwKQorCQkgICAgJCQgPSBudWxsX3BvaW50ZXJfbm9kZTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIFRSRUVfVVNFRCAobGFiZWwpID0gMTsKKwkJICAgICAgJCQgPSBidWlsZDEgKEFERFJfRVhQUiwgcHRyX3R5cGVfbm9kZSwgbGFiZWwpOworCQkgICAgICBUUkVFX0NPTlNUQU5UICgkJCkgPSAxOworCQkgICAgfQorCQl9CisvKiBUaGlzIHNlZW1zIHRvIGJlIGltcG9zc2libGUgb24gc29tZSBtYWNoaW5lcywgc28gbGV0J3MgdHVybiBpdCBvZmYuCisgICBZb3UgY2FuIHVzZSBfX2J1aWx0aW5fbmV4dF9hcmcgdG8gZmluZCB0aGUgYW5vbnltb3VzIHN0YWNrIGFyZ3MuCisJfCAnJicgRUxMSVBTSVMKKwkJeyB0cmVlIHR5cGVzID0gVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSk7CisJCSAgJCQgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgaWYgKFRSRUVfVkFMVUUgKHRyZWVfbGFzdCAodHlwZXMpKSA9PSB2b2lkX3R5cGVfbm9kZSkKKwkJICAgIGVycm9yICgiYCYuLi4nIHVzZWQgaW4gZnVuY3Rpb24gd2l0aCBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAocGVkYW50aWMpCisJCQlwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgYCYuLi4nIik7CisJCSAgICAgICQkID0gdHJlZV9sYXN0IChERUNMX0FSR1VNRU5UUyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSk7CisJCSAgICAgICQkID0gYnVpbGRfdW5hcnlfb3AgKEFERFJfRVhQUiwgJCQsIDApOworCQkgICAgfSB9CisqLworCXwgc2l6ZW9mIHVuYXJ5X2V4cHIgICVwcmVjIFVOQVJZCisJCXsgc2tpcF9ldmFsdWF0aW9uLS07CisJCSAgaWYgKFRSRUVfQ09ERSAoJDIpID09IENPTVBPTkVOVF9SRUYKKwkJICAgICAgJiYgREVDTF9CSVRfRklFTEQgKFRSRUVfT1BFUkFORCAoJDIsIDEpKSkKKwkJICAgIGVycm9yICgiYHNpemVvZicgYXBwbGllZCB0byBhIGJpdC1maWVsZCIpOworCQkgICQkID0gY19zaXplb2YgKFRSRUVfVFlQRSAoJDIpKTsgfQorCXwgc2l6ZW9mICcoJyB0eXBlbmFtZSAnKScgICVwcmVjIEhZUEVSVU5BUlkKKwkJeyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICAkJCA9IGNfc2l6ZW9mIChncm9rdHlwZW5hbWUgKCQzKSk7IH0KKwl8IGFsaWdub2YgdW5hcnlfZXhwciAgJXByZWMgVU5BUlkKKwkJeyBza2lwX2V2YWx1YXRpb24tLTsKKwkJICAkJCA9IGNfYWxpZ25vZl9leHByICgkMik7IH0KKwl8IGFsaWdub2YgJygnIHR5cGVuYW1lICcpJyAgJXByZWMgSFlQRVJVTkFSWQorCQl7IHNraXBfZXZhbHVhdGlvbi0tOworCQkgICQkID0gY19hbGlnbm9mIChncm9rdHlwZW5hbWUgKCQzKSk7IH0KKwl8IFJFQUxQQVJUIGNhc3RfZXhwciAlcHJlYyBVTkFSWQorCQl7ICQkID0gYnVpbGRfdW5hcnlfb3AgKFJFQUxQQVJUX0VYUFIsICQyLCAwKTsgfQorCXwgSU1BR1BBUlQgY2FzdF9leHByICVwcmVjIFVOQVJZCisJCXsgJCQgPSBidWlsZF91bmFyeV9vcCAoSU1BR1BBUlRfRVhQUiwgJDIsIDApOyB9CisJOworCitzaXplb2Y6CisJU0laRU9GIHsgc2tpcF9ldmFsdWF0aW9uKys7IH0KKwk7CisKK2FsaWdub2Y6CisJQUxJR05PRiB7IHNraXBfZXZhbHVhdGlvbisrOyB9CisJOworCitjYXN0X2V4cHI6CisJdW5hcnlfZXhwcgorCXwgJygnIHR5cGVuYW1lICcpJyBjYXN0X2V4cHIgICVwcmVjIFVOQVJZCisJCXsgdHJlZSB0eXBlID0gZ3Jva3R5cGVuYW1lICgkMik7CisJCSAgJCQgPSBidWlsZF9jX2Nhc3QgKHR5cGUsICQ0KTsgfQorCXwgJygnIHR5cGVuYW1lICcpJyAneycgCisJCXsgc3RhcnRfaW5pdCAoTlVMTF9UUkVFLCBOVUxMLCAwKTsKKwkJICAkMiA9IGdyb2t0eXBlbmFtZSAoJDIpOworCQkgIHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0ICgkMik7IH0KKwkgIGluaXRsaXN0X21heWJlX2NvbW1hICd9JyAgJXByZWMgVU5BUlkKKwkJeyBjaGFyICpuYW1lOworCQkgIHRyZWUgcmVzdWx0ID0gcG9wX2luaXRfbGV2ZWwgKDApOworCQkgIHRyZWUgdHlwZSA9ICQyOworCQkgIGZpbmlzaF9pbml0ICgpOworCisJCSAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb25zIik7CisJCSAgaWYgKFRZUEVfTkFNRSAodHlwZSkgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgaWYgKFRSRUVfQ09ERSAoVFlQRV9OQU1FICh0eXBlKSkgPT0gSURFTlRJRklFUl9OT0RFKQorCQkJbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9OQU1FICh0eXBlKSk7CisJCSAgICAgIGVsc2UKKwkJCW5hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoVFlQRV9OQU1FICh0eXBlKSkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIG5hbWUgPSAiIjsKKwkJICAkJCA9IHJlc3VsdDsKKwkJICBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFICYmIFRZUEVfU0laRSAodHlwZSkgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgaW50IGZhaWx1cmUgPSBjb21wbGV0ZV9hcnJheV90eXBlICh0eXBlLCAkJCwgMSk7CisJCSAgICAgIGlmIChmYWlsdXJlKQorCQkJYWJvcnQgKCk7CisJCSAgICB9CisJCX0KKwk7CisKK2V4cHJfbm9fY29tbWFzOgorCSAgY2FzdF9leHByCisJfCBleHByX25vX2NvbW1hcyAnKycgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnLScgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnKicgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnLycgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnJScgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBMU0hJRlQgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBSU0hJRlQgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBBUklUSENPTVBBUkUgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBFUUNPTVBBUkUgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnJicgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnfCcgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyAnXicgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKCQyLCAkMSwgJDMpOyB9CisJfCBleHByX25vX2NvbW1hcyBBTkRBTkQKKwkJeyAkMSA9IHRydXRodmFsdWVfY29udmVyc2lvbiAoZGVmYXVsdF9jb252ZXJzaW9uICgkMSkpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSAkMSA9PSBib29sZWFuX2ZhbHNlX25vZGU7IH0KKwkgIGV4cHJfbm9fY29tbWFzCisJCXsgc2tpcF9ldmFsdWF0aW9uIC09ICQxID09IGJvb2xlYW5fZmFsc2Vfbm9kZTsKKwkJICAkJCA9IHBhcnNlcl9idWlsZF9iaW5hcnlfb3AgKFRSVVRIX0FORElGX0VYUFIsICQxLCAkNCk7IH0KKwl8IGV4cHJfbm9fY29tbWFzIE9ST1IKKwkJeyAkMSA9IHRydXRodmFsdWVfY29udmVyc2lvbiAoZGVmYXVsdF9jb252ZXJzaW9uICgkMSkpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSAkMSA9PSBib29sZWFuX3RydWVfbm9kZTsgfQorCSAgZXhwcl9ub19jb21tYXMKKwkJeyBza2lwX2V2YWx1YXRpb24gLT0gJDEgPT0gYm9vbGVhbl90cnVlX25vZGU7CisJCSAgJCQgPSBwYXJzZXJfYnVpbGRfYmluYXJ5X29wIChUUlVUSF9PUklGX0VYUFIsICQxLCAkNCk7IH0KKwl8IGV4cHJfbm9fY29tbWFzICc/JworCQl7ICQxID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKCQxKSk7CisJCSAgc2tpcF9ldmFsdWF0aW9uICs9ICQxID09IGJvb2xlYW5fZmFsc2Vfbm9kZTsgfQorICAgICAgICAgIGV4cHIgJzonCisJCXsgc2tpcF9ldmFsdWF0aW9uICs9ICgoJDEgPT0gYm9vbGVhbl90cnVlX25vZGUpCisJCQkJICAgICAgLSAoJDEgPT0gYm9vbGVhbl9mYWxzZV9ub2RlKSk7IH0KKwkgIGV4cHJfbm9fY29tbWFzCisJCXsgc2tpcF9ldmFsdWF0aW9uIC09ICQxID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgICQkID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwciAoJDEsICQ0LCAkNyk7IH0KKwl8IGV4cHJfbm9fY29tbWFzICc/JworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBvbWl0dGluZyB0aGUgbWlkZGxlIHRlcm0gb2YgYSA/OiBleHByZXNzaW9uIik7CisJCSAgLyogTWFrZSBzdXJlIGZpcnN0IG9wZXJhbmQgaXMgY2FsY3VsYXRlZCBvbmx5IG9uY2UuICAqLworCQkgICQ8dHR5cGU+MiA9IHNhdmVfZXhwciAoJDEpOworCQkgICQxID0gdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChkZWZhdWx0X2NvbnZlcnNpb24gKCQ8dHR5cGU+MikpOworCQkgIHNraXBfZXZhbHVhdGlvbiArPSAkMSA9PSBib29sZWFuX3RydWVfbm9kZTsgfQorCSAgJzonIGV4cHJfbm9fY29tbWFzCisJCXsgc2tpcF9ldmFsdWF0aW9uIC09ICQxID09IGJvb2xlYW5fdHJ1ZV9ub2RlOworCQkgICQkID0gYnVpbGRfY29uZGl0aW9uYWxfZXhwciAoJDEsICQ8dHR5cGU+MiwgJDUpOyB9CisJfCBleHByX25vX2NvbW1hcyAnPScgZXhwcl9ub19jb21tYXMKKwkJeyAkJCA9IGJ1aWxkX21vZGlmeV9leHByICgkMSwgTk9QX0VYUFIsICQzKTsKKwkJICBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSAoJCQsIE1PRElGWV9FWFBSKTsgfQorCXwgZXhwcl9ub19jb21tYXMgQVNTSUdOIGV4cHJfbm9fY29tbWFzCisJCXsgJCQgPSBidWlsZF9tb2RpZnlfZXhwciAoJDEsICQyLCAkMyk7CisJCSAgLyogVGhpcyBpbmhpYml0cyB3YXJuaW5ncyBpbiB0cnV0aHZhbHVlX2NvbnZlcnNpb24uICAqLworCQkgIENfU0VUX0VYUF9PUklHSU5BTF9DT0RFICgkJCwgRVJST1JfTUFSSyk7IH0KKwk7CisKK3ByaW1hcnk6CisJSURFTlRJRklFUgorCQl7CisJCSAgJCQgPSBsYXN0aWRkZWNsOworCQkgIGlmICghJCQgfHwgJCQgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgeworCQkgICAgICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisJCQl5eWNoYXIgPSBZWUxFWDsKKwkJICAgICAgaWYgKHl5Y2hhciA9PSAnKCcpCisJCQl7CisJCQkgIHRyZWUgZGVjbDsKKworCQkJICBpZiAob2JqY19yZWNlaXZlcl9jb250ZXh0CisJCQkgICAgICAmJiAhIChvYmpjX3JlY2VpdmVyX2NvbnRleHQKKwkJCQkgICAgJiYgc3RyY21wIChJREVOVElGSUVSX1BPSU5URVIgKCQxKSwgInN1cGVyIikpKQorCQkJICAgIC8qIHdlIGhhdmUgYSBtZXNzYWdlIHRvIHN1cGVyICovCisJCQkgICAgJCQgPSBnZXRfc3VwZXJfcmVjZWl2ZXIgKCk7CisJCQkgIGVsc2UgaWYgKG9iamNfbWV0aG9kX2NvbnRleHQKKwkJCQkgICAmJiAoZGVjbCA9IGlzX2l2YXIgKG9iamNfaXZhcl9jaGFpbiwgJDEpKSkKKwkJCSAgICB7CisJCQkgICAgICBpZiAoaXNfcHJpdmF0ZSAoZGVjbCkpCisJCQkJJCQgPSBlcnJvcl9tYXJrX25vZGU7CisJCQkgICAgICBlbHNlCisJCQkJJCQgPSBidWlsZF9pdmFyX3JlZmVyZW5jZSAoJDEpOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIHsKKwkJCSAgICAgIC8qIE9yZGluYXJ5IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAgKi8KKwkJCSAgICAgICQkID0gaW1wbGljaXRseV9kZWNsYXJlICgkMSk7CisJCQkgICAgICBhc3NlbWJsZV9leHRlcm5hbCAoJCQpOworCQkJICAgICAgVFJFRV9VU0VEICgkJCkgPSAxOworCQkJICAgIH0KKwkJCX0KKwkJICAgICAgZWxzZSBpZiAoY3VycmVudF9mdW5jdGlvbl9kZWNsID09IDApCisJCQl7CisJCQkgIGVycm9yICgiYCVzJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKSIsCisJCQkJIElERU5USUZJRVJfUE9JTlRFUiAoJDEpKTsKKwkJCSAgJCQgPSBlcnJvcl9tYXJrX25vZGU7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgdHJlZSBkZWNsOworCisJCSAgICAgICAgICBpZiAob2JqY19yZWNlaXZlcl9jb250ZXh0CisJCQkgICAgICAmJiAhIHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSICgkMSksICJzdXBlciIpKQorCQkJICAgIC8qIHdlIGhhdmUgYSBtZXNzYWdlIHRvIHN1cGVyICovCisJCQkgICAgJCQgPSBnZXRfc3VwZXJfcmVjZWl2ZXIgKCk7CisJCQkgIGVsc2UgaWYgKG9iamNfbWV0aG9kX2NvbnRleHQKKwkJCQkgICAmJiAoZGVjbCA9IGlzX2l2YXIgKG9iamNfaXZhcl9jaGFpbiwgJDEpKSkKKwkJCSAgICB7CisJCQkgICAgICBpZiAoaXNfcHJpdmF0ZSAoZGVjbCkpCisJCQkJJCQgPSBlcnJvcl9tYXJrX25vZGU7CisJCQkgICAgICBlbHNlCisJCQkJJCQgPSBidWlsZF9pdmFyX3JlZmVyZW5jZSAoJDEpOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIHsKKwkJCSAgICAgIGlmIChJREVOVElGSUVSX0dMT0JBTF9WQUxVRSAoJDEpICE9IGVycm9yX21hcmtfbm9kZQorCQkJCSAgfHwgSURFTlRJRklFUl9FUlJPUl9MT0NVUyAoJDEpICE9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkKKwkJCQl7CisJCQkJICBlcnJvciAoImAlcycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIHRoaXMgZnVuY3Rpb24pIiwKKwkJCQkJIElERU5USUZJRVJfUE9JTlRFUiAoJDEpKTsKKworCQkJCSAgaWYgKCEgdW5kZWNsYXJlZF92YXJpYWJsZV9ub3RpY2UpCisJCQkJICAgIHsKKwkJCQkgICAgICBlcnJvciAoIihFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UiKTsKKwkJCQkgICAgICBlcnJvciAoImZvciBlYWNoIGZ1bmN0aW9uIGl0IGFwcGVhcnMgaW4uKSIpOworCQkJCSAgICAgIHVuZGVjbGFyZWRfdmFyaWFibGVfbm90aWNlID0gMTsKKwkJCQkgICAgfQorCQkJCX0KKwkJCSAgICAgICQkID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgLyogUHJldmVudCByZXBlYXRlZCBlcnJvciBtZXNzYWdlcy4gICovCisJCQkgICAgICBJREVOVElGSUVSX0dMT0JBTF9WQUxVRSAoJDEpID0gZXJyb3JfbWFya19ub2RlOworCQkJICAgICAgSURFTlRJRklFUl9FUlJPUl9MT0NVUyAoJDEpID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlIGlmIChUUkVFX1RZUEUgKCQkKSA9PSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICAkJCA9IGVycm9yX21hcmtfbm9kZTsKKwkJICBlbHNlIGlmIChDX0RFQ0xfQU5USUNJUEFURUQgKCQkKSkKKwkJICAgIHsKKwkJICAgICAgLyogVGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGEgYnVpbGQtaW4gZnVuY3Rpb24gdXNlZCwKKwkJCSBpZiBpdCBoYXMgbm90IGJlZW4gZGVjbGFyZWQuICAqLworCQkgICAgICBDX0RFQ0xfQU5USUNJUEFURUQgKCQkKSA9IDA7CisJCSAgICAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKwkJCXl5Y2hhciA9IFlZTEVYOworCQkgICAgICBpZiAoeXljaGFyID09ICcoJykKKwkJCXsKKwkJCSAgLyogT21pdCB0aGUgaW1wbGljaXQgZGVjbGFyYXRpb24gd2UKKwkJCSAgICAgd291bGQgb3JkaW5hcmlseSBkbywgc28gd2UgZG9uJ3QgbG9zZQorCQkJICAgICB0aGUgYWN0dWFsIGJ1aWx0IGluIHR5cGUuCisJCQkgICAgIEJ1dCBwcmludCBhIGRpYWdub3N0aWMgZm9yIHRoZSBtaXNtYXRjaC4gICovCisJCQkgIGlmIChvYmpjX21ldGhvZF9jb250ZXh0CisJCQkgICAgICAmJiBpc19pdmFyIChvYmpjX2l2YXJfY2hhaW4sICQxKSkKKwkJCSAgICBlcnJvciAoIkluc3RhbmNlIHZhcmlhYmxlIGAlcycgaW1wbGljaXRseSBkZWNsYXJlZCBhcyBmdW5jdGlvbiIsCisJCQkJICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKCQkKSkpOworCQkJICBlbHNlCisJCQkgICAgaWYgKFRSRUVfQ09ERSAoJCQpICE9IEZVTkNUSU9OX0RFQ0wpCisJCQkgICAgICBlcnJvciAoImAlcycgaW1wbGljaXRseSBkZWNsYXJlZCBhcyBmdW5jdGlvbiIsCisJCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoJCQpKSk7CisJCQkgIGVsc2UgaWYgKChUWVBFX01PREUgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICgkJCkpKQorCQkJCSAgICAhPSBUWVBFX01PREUgKGludGVnZXJfdHlwZV9ub2RlKSkKKwkJCQkgICAmJiAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKCQkKSkKKwkJCQkgICAgICAgIT0gdm9pZF90eXBlX25vZGUpKQorCQkJICAgIHBlZHdhcm4gKCJ0eXBlIG1pc21hdGNoIGluIGltcGxpY2l0IGRlY2xhcmF0aW9uIGZvciBidWlsdC1pbiBmdW5jdGlvbiBgJXMnIiwKKwkJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FICgkJCkpKTsKKwkJCSAgLyogSWYgaXQgcmVhbGx5IHJldHVybnMgdm9pZCwgY2hhbmdlIHRoYXQgdG8gaW50LiAgKi8KKwkJCSAgaWYgKFRSRUVfVFlQRSAoVFJFRV9UWVBFICgkJCkpID09IHZvaWRfdHlwZV9ub2RlKQorCQkJICAgIFRSRUVfVFlQRSAoJCQpCisJCQkgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkJICAgICBUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFICgkJCkpKTsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJcGVkd2FybiAoImJ1aWx0LWluIGZ1bmN0aW9uIGAlcycgdXNlZCB3aXRob3V0IGRlY2xhcmF0aW9uIiwKKwkJCQkgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKCQkKSkpOworCisJCSAgICAgIC8qIERvIHdoYXQgd2Ugd291bGQgb3JkaW5hcmlseSBkbyB3aGVuIGEgZm4gaXMgdXNlZC4gICovCisJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICgkJCk7CisJCSAgICAgIFRSRUVfVVNFRCAoJCQpID0gMTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGFzc2VtYmxlX2V4dGVybmFsICgkJCk7CisJCSAgICAgIFRSRUVfVVNFRCAoJCQpID0gMTsKKwkJICAgICAgLyogd2UgaGF2ZSBhIGRlZmluaXRpb24gLSBzdGlsbCBjaGVjayBpZiBpVmFyaWFibGUgKi8KKworCQkgICAgICBpZiAoIW9iamNfcmVjZWl2ZXJfY29udGV4dAorCQkJICB8fCAob2JqY19yZWNlaXZlcl9jb250ZXh0CisJCQkgICAgICAmJiBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoJDEpLCAic3VwZXIiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisJCQkgIHRyZWUgZGVjbDsKKworCQkJICBpZiAob2JqY19tZXRob2RfY29udGV4dAorCQkJICAgICAgJiYgKGRlY2wgPSBpc19pdmFyIChvYmpjX2l2YXJfY2hhaW4sICQxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElERU5USUZJRVJfTE9DQUxfVkFMVUUgKCQxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyAoImxvY2FsIGRlY2xhcmF0aW9uIG9mIGAlcycgaGlkZXMgaW5zdGFuY2UgdmFyaWFibGUiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElERU5USUZJRVJfUE9JTlRFUiAoJDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAJCQkJeworIAkJCQkgIGlmIChpc19wcml2YXRlIChkZWNsKSkKKyAJCQkJICAgICQkID0gZXJyb3JfbWFya19ub2RlOworIAkJCQkgIGVsc2UKKyAJCQkJICAgICQkID0gYnVpbGRfaXZhcl9yZWZlcmVuY2UgKCQxKTsKKyAJCQkJfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCX0KKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIC8qIHdlIGhhdmUgYSBtZXNzYWdlIHRvIHN1cGVyICovCisJCSAgICAgICAgJCQgPSBnZXRfc3VwZXJfcmVjZWl2ZXIgKCk7CisJCSAgICB9CisKKwkJICBpZiAoVFJFRV9DT0RFICgkJCkgPT0gQ09OU1RfREVDTCkKKwkJICAgIHsKKwkJICAgICAgJCQgPSBERUNMX0lOSVRJQUwgKCQkKTsKKwkJICAgICAgLyogVGhpcyBpcyB0byBwcmV2ZW50IGFuIGVudW0gd2hvc2UgdmFsdWUgaXMgMAorCQkJIGZyb20gYmVpbmcgY29uc2lkZXJlZCBhIG51bGwgcG9pbnRlciBjb25zdGFudC4gICovCisJCSAgICAgICQkID0gYnVpbGQxIChOT1BfRVhQUiwgVFJFRV9UWVBFICgkJCksICQkKTsKKwkJICAgICAgVFJFRV9DT05TVEFOVCAoJCQpID0gMTsKKwkJICAgIH0KKwkJfQorCXwgQ09OU1RBTlQKKwl8IHN0cmluZworCQl7ICQkID0gY29tYmluZV9zdHJpbmdzICgkMSk7IH0KKwl8ICcoJyBleHByICcpJworCQl7IGNoYXIgY2xhc3MgPSBUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoJDIpKTsKKwkJICBpZiAoY2xhc3MgPT0gJ2UnIHx8IGNsYXNzID09ICcxJworCQkgICAgICB8fCBjbGFzcyA9PSAnMicgfHwgY2xhc3MgPT0gJzwnKQorCQkgICAgQ19TRVRfRVhQX09SSUdJTkFMX0NPREUgKCQyLCBFUlJPUl9NQVJLKTsKKwkJICAkJCA9ICQyOyB9CisJfCAnKCcgZXJyb3IgJyknCisJCXsgJCQgPSBlcnJvcl9tYXJrX25vZGU7IH0KKwl8ICcoJworCQl7IGlmIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgZXJyb3IgKCJicmFjZWQtZ3JvdXAgd2l0aGluIGV4cHJlc3Npb24gYWxsb3dlZCBvbmx5IGluc2lkZSBhIGZ1bmN0aW9uIik7CisJCSAgICAgIFlZRVJST1I7CisJCSAgICB9CisJCSAgLyogV2UgbXVzdCBmb3JjZSBhIEJMT0NLIGZvciB0aGlzIGxldmVsCisJCSAgICAgc28gdGhhdCwgaWYgaXQgaXMgbm90IGV4cGFuZGVkIGxhdGVyLAorCQkgICAgIHRoZXJlIGlzIGEgd2F5IHRvIHR1cm4gb2ZmIHRoZSBlbnRpcmUgc3VidHJlZSBvZiBibG9ja3MKKwkJICAgICB0aGF0IGFyZSBjb250YWluZWQgaW4gaXQuICAqLworCQkgIGtlZXBfbmV4dF9sZXZlbCAoKTsKKwkJICBwdXNoX2l0ZXJhdG9yX3N0YWNrICgpOworCQkgIHB1c2hfbGFiZWxfbGV2ZWwgKCk7CisJCSAgJDx0dHlwZT4kID0gZXhwYW5kX3N0YXJ0X3N0bXRfZXhwciAoKTsgfQorCSAgY29tcHN0bXQgJyknCisJCXsgdHJlZSBydGxfZXhwOworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBicmFjZWQtZ3JvdXBzIHdpdGhpbiBleHByZXNzaW9ucyIpOworCQkgIHBvcF9pdGVyYXRvcl9zdGFjayAoKTsKKwkJICBwb3BfbGFiZWxfbGV2ZWwgKCk7CisJCSAgcnRsX2V4cCA9IGV4cGFuZF9lbmRfc3RtdF9leHByICgkPHR0eXBlPjIpOworCQkgIC8qIFRoZSBzdGF0ZW1lbnRzIGhhdmUgc2lkZSBlZmZlY3RzLCBzbyB0aGUgZ3JvdXAgZG9lcy4gICovCisJCSAgVFJFRV9TSURFX0VGRkVDVFMgKHJ0bF9leHApID0gMTsKKworCQkgIGlmIChUUkVFX0NPREUgKCQzKSA9PSBCTE9DSykKKwkJICAgIHsKKwkJICAgICAgLyogTWFrZSBhIEJJTkRfRVhQUiBmb3IgdGhlIEJMT0NLIGFscmVhZHkgbWFkZS4gICovCisJCSAgICAgICQkID0gYnVpbGQgKEJJTkRfRVhQUiwgVFJFRV9UWVBFIChydGxfZXhwKSwKKwkJCQkgIE5VTExfVFJFRSwgcnRsX2V4cCwgJDMpOworCQkgICAgICAvKiBSZW1vdmUgdGhlIGJsb2NrIGZyb20gdGhlIHRyZWUgYXQgdGhpcyBwb2ludC4KKwkJCSBJdCBnZXRzIHB1dCBiYWNrIGF0IHRoZSBwcm9wZXIgcGxhY2UKKwkJCSB3aGVuIHRoZSBCSU5EX0VYUFIgaXMgZXhwYW5kZWQuICAqLworCQkgICAgICBkZWxldGVfYmxvY2sgKCQzKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICAkJCA9ICQzOworCQl9CisJfCBwcmltYXJ5ICcoJyBleHBybGlzdCAnKScgICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX2Z1bmN0aW9uX2NhbGwgKCQxLCAkMyk7IH0KKwl8IHByaW1hcnkgJ1snIGV4cHIgJ10nICAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9hcnJheV9yZWYgKCQxLCAkMyk7IH0KKwl8IHByaW1hcnkgJy4nIGlkZW50aWZpZXIKKwkJeworICAgICAgICAgICAgICAgICAgaWYgKGRvaW5nX29iamNfdGhhbmcpCisgICAgICAgICAgICAgICAgICAgIHsKKwkJICAgICAgaWYgKGlzX3B1YmxpYyAoJDEsICQzKSkKKwkJCSQkID0gYnVpbGRfY29tcG9uZW50X3JlZiAoJDEsICQzKTsKKwkJICAgICAgZWxzZQorCQkJJCQgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisJCSAgICAkJCA9IGJ1aWxkX2NvbXBvbmVudF9yZWYgKCQxLCAkMyk7CisJCX0KKwl8IHByaW1hcnkgUE9JTlRTQVQgaWRlbnRpZmllcgorCQl7CisgICAgICAgICAgICAgICAgICB0cmVlIGV4cHIgPSBidWlsZF9pbmRpcmVjdF9yZWYgKCQxLCAiLT4iKTsKKworICAgICAgICAgICAgICAgICAgaWYgKGRvaW5nX29iamNfdGhhbmcpCisgICAgICAgICAgICAgICAgICAgIHsKKwkJICAgICAgaWYgKGlzX3B1YmxpYyAoZXhwciwgJDMpKQorCQkJJCQgPSBidWlsZF9jb21wb25lbnRfcmVmIChleHByLCAkMyk7CisJCSAgICAgIGVsc2UKKwkJCSQkID0gZXJyb3JfbWFya19ub2RlOworCQkgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAkJCA9IGJ1aWxkX2NvbXBvbmVudF9yZWYgKGV4cHIsICQzKTsKKwkJfQorCXwgcHJpbWFyeSBQTFVTUExVUworCQl7ICQkID0gYnVpbGRfdW5hcnlfb3AgKFBPU1RJTkNSRU1FTlRfRVhQUiwgJDEsIDApOyB9CisJfCBwcmltYXJ5IE1JTlVTTUlOVVMKKwkJeyAkJCA9IGJ1aWxkX3VuYXJ5X29wIChQT1NUREVDUkVNRU5UX0VYUFIsICQxLCAwKTsgfQorCXwgb2JqY21lc3NhZ2VleHByCisJCXsgJCQgPSBidWlsZF9tZXNzYWdlX2V4cHIgKCQxKTsgfQorCXwgb2JqY3NlbGVjdG9yZXhwcgorCQl7ICQkID0gYnVpbGRfc2VsZWN0b3JfZXhwciAoJDEpOyB9CisJfCBvYmpjcHJvdG9jb2xleHByCisJCXsgJCQgPSBidWlsZF9wcm90b2NvbF9leHByICgkMSk7IH0KKwl8IG9iamNlbmNvZGVleHByCisJCXsgJCQgPSBidWlsZF9lbmNvZGVfZXhwciAoJDEpOyB9CisJfCBvYmpjX3N0cmluZworCQl7ICQkID0gYnVpbGRfb2JqY19zdHJpbmdfb2JqZWN0ICgkMSk7IH0KKwk7CisKKy8qIFByb2R1Y2VzIGEgU1RSSU5HX0NTVCB3aXRoIHBlcmhhcHMgbW9yZSBTVFJJTkdfQ1NUcyBjaGFpbmVkIG9udG8gaXQuICAqLworc3RyaW5nOgorCSAgU1RSSU5HCisJfCBzdHJpbmcgU1RSSU5HCisJCXsgJCQgPSBjaGFpbm9uICgkMSwgJDIpOyB9CisJOworCisvKiBQcm9kdWNlcyBhbiBPQkpDX1NUUklOR19DU1Qgd2l0aCBwZXJoYXBzIG1vcmUgT0JKQ19TVFJJTkdfQ1NUcyBjaGFpbmVkCisgICBvbnRvIGl0LiAgKi8KK29iamNfc3RyaW5nOgorCSAgT0JKQ19TVFJJTkcKKwl8IG9iamNfc3RyaW5nIE9CSkNfU1RSSU5HCisJCXsgJCQgPSBjaGFpbm9uICgkMSwgJDIpOyB9CisJOworCitvbGRfc3R5bGVfcGFybV9kZWNsczoKKwkvKiBlbXB0eSAqLworCXwgZGF0YWRlY2xzCisJfCBkYXRhZGVjbHMgRUxMSVBTSVMKKwkJLyogLi4uIGlzIHVzZWQgaGVyZSB0byBpbmRpY2F0ZSBhIHZhcmFyZ3MgZnVuY3Rpb24uICAqLworCQl7IGNfbWFya192YXJhcmdzICgpOworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZG9lcyBub3QgcGVybWl0IHVzZSBvZiBgdmFyYXJncy5oJyIpOyB9CisJOworCisvKiBUaGUgZm9sbG93aW5nIGFyZSBhbmFsb2dvdXMgdG8gbGluZW5vX2RlY2wsIGRlY2xzIGFuZCBkZWNsCisgICBleGNlcHQgdGhhdCB0aGV5IGRvIG5vdCBhbGxvdyBuZXN0ZWQgZnVuY3Rpb25zLgorICAgVGhleSBhcmUgdXNlZCBmb3Igb2xkLXN0eWxlIHBhcm0gZGVjbHMuICAqLworbGluZW5vX2RhdGFkZWNsOgorCSAgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBkYXRhZGVjbAorCQl7IH0KKwk7CisKK2RhdGFkZWNsczoKKwlsaW5lbm9fZGF0YWRlY2wKKwl8IGVycnN0bXQKKwl8IGRhdGFkZWNscyBsaW5lbm9fZGF0YWRlY2wKKwl8IGxpbmVub19kYXRhZGVjbCBlcnJzdG10CisJOworCisvKiBXZSBkb24ndCBhbGxvdyBwcmVmaXggYXR0cmlidXRlcyBoZXJlIGJlY2F1c2UgdGhleSBjYXVzZSByZWR1Y2UvcmVkdWNlCisgICBjb25mbGljdHM6IHdlIGNhbid0IGtub3cgd2hldGhlciB3ZSdyZSBwYXJzaW5nIGEgZnVuY3Rpb24gZGVjbCB3aXRoCisgICBhdHRyaWJ1dGUgc3VmZml4LCBvciBmdW5jdGlvbiBkZWZuIHdpdGggYXR0cmlidXRlIHByZWZpeCBvbiBmaXJzdCBvbGQKKyAgIHN0eWxlIHBhcm0uICAqLworZGF0YWRlY2w6CisJdHlwZWRfZGVjbHNwZWNzX25vX3ByZWZpeF9hdHRyIHNldHNwZWNzIGluaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIgc2V0c3BlY3Mgbm90eXBlX2luaXRkZWNscyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsJCisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjc19ub19wcmVmaXhfYXR0ciAnOycKKwkJeyBzaGFkb3dfdGFnX3dhcm5lZCAoJDEsIDEpOworCQkgIHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOyB9CisJfCBkZWNsbW9kc19ub19wcmVmaXhfYXR0ciAnOycKKwkJeyBwZWR3YXJuICgiZW1wdHkgZGVjbGFyYXRpb24iKTsgfQorCTsKKworLyogVGhpcyBjb21iaW5hdGlvbiB3aGljaCBzYXZlcyBhIGxpbmVubyBiZWZvcmUgYSBkZWNsCisgICBpcyB0aGUgbm9ybWFsIHRoaW5nIHRvIHVzZSwgcmF0aGVyIHRoYW4gZGVjbCBpdHNlbGYuCisgICBUaGlzIGlzIHRvIGF2b2lkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMgaW4gY29udGV4dHMKKyAgIHdoZXJlIHN0YXRlbWVudCBsYWJlbHMgYXJlIGFsbG93ZWQuICAqLworbGluZW5vX2RlY2w6CisJICBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vIGRlY2wKKwkJeyB9CisJOworCitkZWNsczoKKwlsaW5lbm9fZGVjbAorCXwgZXJyc3RtdAorCXwgZGVjbHMgbGluZW5vX2RlY2wKKwl8IGxpbmVub19kZWNsIGVycnN0bXQKKwk7CisKKy8qIHJlY29yZHMgdGhlIHR5cGUgYW5kIHN0b3JhZ2UgY2xhc3Mgc3BlY3MgdG8gdXNlIGZvciBwcm9jZXNzaW5nCisgICB0aGUgZGVjbGFyYXRvcnMgdGhhdCBmb2xsb3cuCisgICBNYWludGFpbnMgYSBzdGFjayBvZiBvdXRlci1sZXZlbCB2YWx1ZXMgb2YgY3VycmVudF9kZWNsc3BlY3MsCisgICBmb3IgdGhlIHNha2Ugb2YgcGFybSBkZWNsYXJhdGlvbnMgbmVzdGVkIGluIGZ1bmN0aW9uIGRlY2xhcmF0b3JzLiAgKi8KK3NldHNwZWNzOiAvKiBlbXB0eSAqLworCQl7ICQkID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgcGVuZGluZ194cmVmX2Vycm9yICgpOworCQkgIGRlY2xzcGVjX3N0YWNrID0gdHJlZV9jb25zIChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJICAgICAgY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCSAgICAgIGRlY2xzcGVjX3N0YWNrKTsKKwkJICBzcGxpdF9zcGVjc19hdHRycyAoJDx0dHlwZT4wLAorCQkJCSAgICAgJmN1cnJlbnRfZGVjbHNwZWNzLCAmcHJlZml4X2F0dHJpYnV0ZXMpOyB9CisJOworCisvKiA/Pz8gWXVjay4gIFNlZSBhZnRlcl90eXBlX2RlY2xhcmF0b3IuICAqLworc2V0YXR0cnM6IC8qIGVtcHR5ICovCisJCXsgcHJlZml4X2F0dHJpYnV0ZXMgPSBjaGFpbm9uIChwcmVmaXhfYXR0cmlidXRlcywgJDx0dHlwZT4wKTsgfQorCTsKKworZGVjbDoKKwl0eXBlZF9kZWNsc3BlY3Mgc2V0c3BlY3MgaW5pdGRlY2xzICc7JworCQl7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCBkZWNsbW9kcyBzZXRzcGVjcyBub3R5cGVfaW5pdGRlY2xzICc7JworCQl7IGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCB0eXBlZF9kZWNsc3BlY3Mgc2V0c3BlY3MgbmVzdGVkX2Z1bmN0aW9uCisJCXsgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IGRlY2xtb2RzIHNldHNwZWNzIG5vdHlwZV9uZXN0ZWRfZnVuY3Rpb24KKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgdHlwZWRfZGVjbHNwZWNzICc7JworCQl7IHNoYWRvd190YWcgKCQxKTsgfQorCXwgZGVjbG1vZHMgJzsnCisJCXsgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IH0KKwl8IGV4dGVuc2lvbiBkZWNsCisJCXsgcGVkYW50aWMgPSAkPGl0eXBlPjE7IH0KKwk7CisKKy8qIERlY2xzcGVjcyB3aGljaCBjb250YWluIGF0IGxlYXN0IG9uZSB0eXBlIHNwZWNpZmllciBvciB0eXBlZGVmIG5hbWUuCisgICAoSnVzdCBgY29uc3QnIG9yIGB2b2xhdGlsZScgaXMgbm90IGVub3VnaC4pCisgICBBIHR5cGVkZWYnZCBuYW1lIGZvbGxvd2luZyB0aGVzZSBpcyB0YWtlbiBhcyBhIG5hbWUgdG8gYmUgZGVjbGFyZWQuCisgICBEZWNsc3BlY3MgaGF2ZSBhIG5vbi1OVUxMIFRSRUVfVkFMVUUsIGF0dHJpYnV0ZXMgZG8gbm90LiAgKi8KKwordHlwZWRfZGVjbHNwZWNzOgorCSAgdHlwZXNwZWMgcmVzZXJ2ZWRfZGVjbHNwZWNzCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDEsICQyKTsgfQorCXwgZGVjbG1vZHMgdHlwZXNwZWMgcmVzZXJ2ZWRfZGVjbHNwZWNzCisJCXsgJCQgPSBjaGFpbm9uICgkMywgdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSkpOyB9CisJOworCityZXNlcnZlZF9kZWNsc3BlY3M6ICAvKiBlbXB0eSAqLworCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJfCByZXNlcnZlZF9kZWNsc3BlY3MgdHlwZXNwZWNxdWFsX3Jlc2VydmVkCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKTsgfQorCXwgcmVzZXJ2ZWRfZGVjbHNwZWNzIFNDU1BFQworCQl7IGlmIChleHRyYV93YXJuaW5ncykKKwkJICAgIHdhcm5pbmcgKCJgJXMnIGlzIG5vdCBhdCBiZWdpbm5pbmcgb2YgZGVjbGFyYXRpb24iLAorCQkJICAgICBJREVOVElGSUVSX1BPSU5URVIgKCQyKSk7CisJCSAgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKTsgfQorCXwgcmVzZXJ2ZWRfZGVjbHNwZWNzIGF0dHJpYnV0ZXMKKwkJeyAkJCA9IHRyZWVfY29ucyAoJDIsIE5VTExfVFJFRSwgJDEpOyB9CisJOworCit0eXBlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHI6CisJICB0eXBlc3BlYyByZXNlcnZlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMSwgJDIpOyB9CisJfCBkZWNsbW9kc19ub19wcmVmaXhfYXR0ciB0eXBlc3BlYyByZXNlcnZlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIKKwkJeyAkJCA9IGNoYWlub24gKCQzLCB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKSk7IH0KKwk7CisKK3Jlc2VydmVkX2RlY2xzcGVjc19ub19wcmVmaXhfYXR0cjoKKwkgIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IHJlc2VydmVkX2RlY2xzcGVjc19ub19wcmVmaXhfYXR0ciB0eXBlc3BlY3F1YWxfcmVzZXJ2ZWQKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOyB9CisJfCByZXNlcnZlZF9kZWNsc3BlY3Nfbm9fcHJlZml4X2F0dHIgU0NTUEVDCisJCXsgaWYgKGV4dHJhX3dhcm5pbmdzKQorCQkgICAgd2FybmluZyAoImAlcycgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiIsCisJCQkgICAgIElERU5USUZJRVJfUE9JTlRFUiAoJDIpKTsKKwkJICAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOyB9CisJOworCisvKiBMaXN0IG9mIGp1c3Qgc3RvcmFnZSBjbGFzc2VzLCB0eXBlIG1vZGlmaWVycywgYW5kIHByZWZpeCBhdHRyaWJ1dGVzLgorICAgQSBkZWNsYXJhdGlvbiBjYW4gc3RhcnQgd2l0aCBqdXN0IHRoaXMsIGJ1dCB0aGVuIGl0IGNhbm5vdCBiZSB1c2VkCisgICB0byByZWRlY2xhcmUgYSB0eXBlZGVmLW5hbWUuCisgICBEZWNsc3BlY3MgaGF2ZSBhIG5vbi1OVUxMIFRSRUVfVkFMVUUsIGF0dHJpYnV0ZXMgZG8gbm90LiAgKi8KKworZGVjbG1vZHM6CisJICBkZWNsbW9kc19ub19wcmVmaXhfYXR0cgorCQl7ICQkID0gJDE7IH0KKwl8IGF0dHJpYnV0ZXMKKwkJeyAkJCA9IHRyZWVfY29ucyAoJDEsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsgfQorCXwgZGVjbG1vZHMgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIKKwkJeyAkJCA9IGNoYWlub24gKCQyLCAkMSk7IH0KKwl8IGRlY2xtb2RzIGF0dHJpYnV0ZXMKKwkJeyAkJCA9IHRyZWVfY29ucyAoJDIsIE5VTExfVFJFRSwgJDEpOyB9CisJOworCitkZWNsbW9kc19ub19wcmVmaXhfYXR0cjoKKwkgIFRZUEVfUVVBTAorCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQxLCBOVUxMX1RSRUUpOworCQkgIFRSRUVfU1RBVElDICgkJCkgPSAxOyB9CisJfCBTQ1NQRUMKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMSwgTlVMTF9UUkVFKTsgfQorCXwgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIgVFlQRV9RVUFMCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKTsKKwkJICBUUkVFX1NUQVRJQyAoJCQpID0gMTsgfQorCXwgZGVjbG1vZHNfbm9fcHJlZml4X2F0dHIgU0NTUEVDCisJCXsgaWYgKGV4dHJhX3dhcm5pbmdzICYmIFRSRUVfU1RBVElDICgkMSkpCisJCSAgICB3YXJuaW5nICgiYCVzJyBpcyBub3QgYXQgYmVnaW5uaW5nIG9mIGRlY2xhcmF0aW9uIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICgkMikpOworCQkgICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQyLCAkMSk7CisJCSAgVFJFRV9TVEFUSUMgKCQkKSA9IFRSRUVfU1RBVElDICgkMSk7IH0KKwk7CisKKworLyogVXNlZCBpbnN0ZWFkIG9mIGRlY2xzcGVjcyB3aGVyZSBzdG9yYWdlIGNsYXNzZXMgYXJlIG5vdCBhbGxvd2VkCisgICAodGhhdCBpcywgZm9yIHR5cGVuYW1lcyBhbmQgc3RydWN0dXJlIGNvbXBvbmVudHMpLgorICAgRG9uJ3QgYWNjZXB0IGEgdHlwZWRlZi1uYW1lIGlmIGFueXRoaW5nIGJ1dCBhIG1vZGlmaWVyIHByZWNlZGVzIGl0LiAgKi8KKwordHlwZWRfdHlwZXNwZWNzOgorCSAgdHlwZXNwZWMgcmVzZXJ2ZWRfdHlwZXNwZWNxdWFscworCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsICQxLCAkMik7IH0KKwl8IG5vbmVtcHR5X3R5cGVfcXVhbHMgdHlwZXNwZWMgcmVzZXJ2ZWRfdHlwZXNwZWNxdWFscworCQl7ICQkID0gY2hhaW5vbiAoJDMsIHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpKTsgfQorCTsKKworcmVzZXJ2ZWRfdHlwZXNwZWNxdWFsczogIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IHJlc2VydmVkX3R5cGVzcGVjcXVhbHMgdHlwZXNwZWNxdWFsX3Jlc2VydmVkCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgJDIsICQxKTsgfQorCTsKKworLyogQSB0eXBlc3BlYyAoYnV0IG5vdCBhIHR5cGUgcXVhbGlmaWVyKS4KKyAgIE9uY2Ugd2UgaGF2ZSBzZWVuIG9uZSBvZiB0aGVzZSBpbiBhIGRlY2xhcmF0aW9uLAorICAgaWYgYSB0eXBlZGVmIG5hbWUgYXBwZWFycyB0aGVuIGl0IGlzIGJlaW5nIHJlZGVjbGFyZWQuICAqLworCit0eXBlc3BlYzogVFlQRVNQRUMKKwl8IHN0cnVjdHNwCisJfCBUWVBFTkFNRQorCQl7IC8qIEZvciBhIHR5cGVkZWYgbmFtZSwgcmVjb3JkIHRoZSBtZWFuaW5nLCBub3QgdGhlIG5hbWUuCisJCSAgICAgSW4gY2FzZSBvZiBgZm9vIGZvbywgYmFyOycuICAqLworCQkgICQkID0gbG9va3VwX25hbWUgKCQxKTsgfQorCXwgQ0xBU1NOQU1FIHByb3RvY29scmVmcworCQl7ICQkID0gZ2V0X3N0YXRpY19yZWZlcmVuY2UgKCQxLCAkMik7IH0KKwl8IE9CSkVDVE5BTUUgcHJvdG9jb2xyZWZzCisJCXsgJCQgPSBnZXRfb2JqZWN0X3JlZmVyZW5jZSAoJDIpOyB9CisKKy8qIE1ha2UgIjxTb21lUHJvdG9jb2w+IiBlcXVpdmFsZW50IHRvICJpZCA8U29tZVByb3RvY29sPiIKKyAgIC0gbmlzc2VAbHlzYXRvci5saXUuc2UgKi8KKyAgICAgICAgfCBub25fZW1wdHlfcHJvdG9jb2xyZWZzCisgICAgICAgICAgICAgICAgeyAkJCA9IGdldF9vYmplY3RfcmVmZXJlbmNlICgkMSk7IH0KKwl8IFRZUEVPRiAnKCcgZXhwciAnKScKKwkJeyAkJCA9IFRSRUVfVFlQRSAoJDMpOyB9CisJfCBUWVBFT0YgJygnIHR5cGVuYW1lICcpJworCQl7ICQkID0gZ3Jva3R5cGVuYW1lICgkMyk7IH0KKwk7CisKKy8qIEEgdHlwZXNwZWMgdGhhdCBpcyBhIHJlc2VydmVkIHdvcmQsIG9yIGEgdHlwZSBxdWFsaWZpZXIuICAqLworCit0eXBlc3BlY3F1YWxfcmVzZXJ2ZWQ6IFRZUEVTUEVDCisJfCBUWVBFX1FVQUwKKwl8IHN0cnVjdHNwCisJOworCitpbml0ZGVjbHM6CisJaW5pdGRjbAorCXwgaW5pdGRlY2xzICcsJyBpbml0ZGNsCisJOworCitub3R5cGVfaW5pdGRlY2xzOgorCW5vdHlwZV9pbml0ZGNsCisJfCBub3R5cGVfaW5pdGRlY2xzICcsJyBpbml0ZGNsCisJOworCittYXliZWFzbToKKwkgIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IEFTTV9LRVlXT1JEICcoJyBzdHJpbmcgJyknCisJCXsgaWYgKFRSRUVfQ0hBSU4gKCQzKSkgJDMgPSBjb21iaW5lX3N0cmluZ3MgKCQzKTsKKwkJICAkJCA9ICQzOworCQl9CisJOworCitpbml0ZGNsOgorCSAgZGVjbGFyYXRvciBtYXliZWFzbSBtYXliZV9hdHRyaWJ1dGUgJz0nCisJCXsgJDx0dHlwZT4kID0gc3RhcnRfZGVjbCAoJDEsIGN1cnJlbnRfZGVjbHNwZWNzLCAxLAorCQkJCQkgICQzLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgc3RhcnRfaW5pdCAoJDx0dHlwZT4kLCAkMiwgZ2xvYmFsX2JpbmRpbmdzX3AgKCkpOyB9CisJICBpbml0CisvKiBOb3RlIGhvdyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlIGlzIGluIGVmZmVjdCB3aGlsZSBpdHMgaW5pdCBpcyBwYXJzZWQhICovCisJCXsgZmluaXNoX2luaXQgKCk7CisJCSAgZmluaXNoX2RlY2wgKCQ8dHR5cGU+NSwgJDYsICQyKTsgfQorCXwgZGVjbGFyYXRvciBtYXliZWFzbSBtYXliZV9hdHRyaWJ1dGUKKwkJeyB0cmVlIGQgPSBzdGFydF9kZWNsICgkMSwgY3VycmVudF9kZWNsc3BlY3MsIDAsCisJCQkJICAgICAgICQzLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgJDIpOyAKKyAgICAgICAgICAgICAgICB9CisJOworCitub3R5cGVfaW5pdGRjbDoKKwkgIG5vdHlwZV9kZWNsYXJhdG9yIG1heWJlYXNtIG1heWJlX2F0dHJpYnV0ZSAnPScKKwkJeyAkPHR0eXBlPiQgPSBzdGFydF9kZWNsICgkMSwgY3VycmVudF9kZWNsc3BlY3MsIDEsCisJCQkJCSAgJDMsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBzdGFydF9pbml0ICgkPHR0eXBlPiQsICQyLCBnbG9iYWxfYmluZGluZ3NfcCAoKSk7IH0KKwkgIGluaXQKKy8qIE5vdGUgaG93IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUgaXMgaW4gZWZmZWN0IHdoaWxlIGl0cyBpbml0IGlzIHBhcnNlZCEgKi8KKwkJeyBmaW5pc2hfaW5pdCAoKTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKCQ8dHR5cGU+NSwgJDMsIHByZWZpeF9hdHRyaWJ1dGVzKTsKKwkJICBmaW5pc2hfZGVjbCAoJDx0dHlwZT41LCAkNiwgJDIpOyB9CisJfCBub3R5cGVfZGVjbGFyYXRvciBtYXliZWFzbSBtYXliZV9hdHRyaWJ1dGUKKwkJeyB0cmVlIGQgPSBzdGFydF9kZWNsICgkMSwgY3VycmVudF9kZWNsc3BlY3MsIDAsCisJCQkJICAgICAgICQzLCBwcmVmaXhfYXR0cmlidXRlcyk7CisJCSAgZmluaXNoX2RlY2wgKGQsIE5VTExfVFJFRSwgJDIpOyB9CisJOworLyogdGhlICogcnVsZXMgYXJlIGR1bW1pZXMgdG8gYWNjZXB0IHRoZSBBcG9sbG8gZXh0ZW5kZWQgc3ludGF4CisgICBzbyB0aGF0IHRoZSBoZWFkZXIgZmlsZXMgY29tcGlsZS4gKi8KK21heWJlX2F0dHJpYnV0ZToKKyAgICAgIC8qIGVtcHR5ICovCisgIAkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgYXR0cmlidXRlcworCQl7ICQkID0gJDE7IH0KKwk7CisgCithdHRyaWJ1dGVzOgorICAgICAgYXR0cmlidXRlCisJCXsgJCQgPSAkMTsgfQorCXwgYXR0cmlidXRlcyBhdHRyaWJ1dGUKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMik7IH0KKwk7CisKK2F0dHJpYnV0ZToKKyAgICAgIEFUVFJJQlVURSAnKCcgJygnIGF0dHJpYnV0ZV9saXN0ICcpJyAnKScKKwkJeyAkJCA9ICQ0OyB9CisJOworCithdHRyaWJ1dGVfbGlzdDoKKyAgICAgIGF0dHJpYgorCQl7ICQkID0gJDE7IH0KKwl8IGF0dHJpYnV0ZV9saXN0ICcsJyBhdHRyaWIKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMyk7IH0KKwk7CisgCithdHRyaWI6CisgICAgLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgYW55X3dvcmQKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoJDEsIE5VTExfVFJFRSk7IH0KKwl8IGFueV93b3JkICcoJyBJREVOVElGSUVSICcpJworCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsICQzKSk7IH0KKwl8IGFueV93b3JkICcoJyBJREVOVElGSUVSICcsJyBub25udWxsX2V4cHJsaXN0ICcpJworCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgdHJlZV9jb25zIChOVUxMX1RSRUUsICQzLCAkNSkpOyB9CisJfCBhbnlfd29yZCAnKCcgZXhwcmxpc3QgJyknCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKCQxLCAkMyk7IH0KKwk7CisKKy8qIFRoaXMgc3RpbGwgbGVhdmVzIG91dCBtb3N0IHJlc2VydmVkIGtleXdvcmRzLAorICAgc2hvdWxkbid0IHdlIGluY2x1ZGUgdGhlbT8gICovCisKK2FueV93b3JkOgorCSAgaWRlbnRpZmllcgorCXwgU0NTUEVDCisJfCBUWVBFU1BFQworCXwgVFlQRV9RVUFMCisJOworDAorLyogSW5pdGlhbGl6ZXJzLiAgYGluaXQnIGlzIHRoZSBlbnRyeSBwb2ludC4gICovCisKK2luaXQ6CisJZXhwcl9ub19jb21tYXMKKwl8ICd7JworCQl7IHJlYWxseV9zdGFydF9pbmNyZW1lbnRhbF9pbml0IChOVUxMX1RSRUUpOworCQkgIC8qIE5vdGUgdGhhdCB0aGUgY2FsbCB0byBjbGVhcl9tb21lbnRhcnkKKwkJICAgICBpcyBpbiBwcm9jZXNzX2luaXRfZWxlbWVudC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7IH0KKwkgIGluaXRsaXN0X21heWJlX2NvbW1hICd9JworCQl7ICQkID0gcG9wX2luaXRfbGV2ZWwgKDApOworCQkgIGlmICgkJCA9PSBlcnJvcl9tYXJrX25vZGUKKwkJICAgICAgJiYgISAoeXljaGFyID09IFNUUklORyB8fCB5eWNoYXIgPT0gQ09OU1RBTlQpKQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsgfQorCisJfCBlcnJvcgorCQl7ICQkID0gZXJyb3JfbWFya19ub2RlOyB9CisJOworCisvKiBgaW5pdGxpc3RfbWF5YmVfY29tbWEnIGlzIHRoZSBndXRzIG9mIGFuIGluaXRpYWxpemVyIGluIGJyYWNlcy4gICovCitpbml0bGlzdF9tYXliZV9jb21tYToKKwkgIC8qIGVtcHR5ICovCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGVtcHR5IGluaXRpYWxpemVyIGJyYWNlcyIpOyB9CisJfCBpbml0bGlzdDEgbWF5YmVjb21tYQorCTsKKworaW5pdGxpc3QxOgorCSAgaW5pdGVsdAorCXwgaW5pdGxpc3QxICcsJyBpbml0ZWx0CisJOworCisvKiBgaW5pdGVsdCcgaXMgYSBzaW5nbGUgZWxlbWVudCBvZiBhbiBpbml0aWFsaXplci4KKyAgIEl0IG1heSB1c2UgYnJhY2VzLiAgKi8KK2luaXRlbHQ6CisJZXhwcl9ub19jb21tYXMKKwkJeyBwcm9jZXNzX2luaXRfZWxlbWVudCAoJDEpOyB9CisJfCAneycgCisJCXsgcHVzaF9pbml0X2xldmVsICgwKTsgfQorCSAgaW5pdGxpc3RfbWF5YmVfY29tbWEgJ30nCisJCXsgcHJvY2Vzc19pbml0X2VsZW1lbnQgKHBvcF9pbml0X2xldmVsICgwKSk7IH0KKwl8IGVycm9yCisJLyogVGhlc2UgYXJlIGZvciBsYWJlbGVkIGVsZW1lbnRzLiAgVGhlIHN5bnRheCBmb3IgYW4gYXJyYXkgZWxlbWVudAorCSAgIGluaXRpYWxpemVyIGNvbmZsaWN0cyB3aXRoIHRoZSBzeW50YXggZm9yIGFuIE9iamVjdGl2ZS1DIG1lc3NhZ2UsCisJICAgc28gZG9uJ3QgaW5jbHVkZSB0aGVzZSBwcm9kdWN0aW9ucyBpbiB0aGUgT2JqZWN0aXZlLUMgZ3JhbW1hci4gICovCisJfCBpZGVudGlmaWVyICc6JworCQl7IHNldF9pbml0X2xhYmVsICgkMSk7IH0KKwkgIGluaXRlbHQKKwl8ICcuJyBpZGVudGlmaWVyICc9JworCQl7IHNldF9pbml0X2xhYmVsICgkMik7IH0KKwkgIGluaXRlbHQKKwk7CisMCituZXN0ZWRfZnVuY3Rpb246CisJICBkZWNsYXJhdG9yCisJCXsgcHVzaF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCAkMSwKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMSkpCisJCSAgICB7CisJCSAgICAgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgICAgIFlZRVJST1IxOworCQkgICAgfQorCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7IH0KKwkgICBvbGRfc3R5bGVfcGFybV9kZWNscworCQl7IHN0b3JlX3Bhcm1fZGVjbHMgKCk7IH0KKy8qIFRoaXMgdXNlZCB0byB1c2UgY29tcHN0bXRfb3JfZXJyb3IuCisgICBUaGF0IGNhdXNlZCBhIGJ1ZyB3aXRoIGlucHV0IGBmKGcpIGludCBnIHt9JywKKyAgIHdoZXJlIHRoZSB1c2Ugb2YgWVlFUlJPUjEgYWJvdmUgY2F1c2VkIGFuIGVycm9yCisgICB3aGljaCB0aGVuIHdhcyBoYW5kbGVkIGJ5IGNvbXBzdG10X29yX2Vycm9yLgorICAgVGhlcmUgZm9sbG93ZWQgYSByZXBlYXRlZCBleGVjdXRpb24gb2YgdGhhdCBzYW1lIHJ1bGUsCisgICB3aGljaCBjYWxsZWQgWVlFUlJPUjEgYWdhaW4sIGFuZCBzbyBvbi4gICovCisJICBjb21wc3RtdAorCQl7IGZpbmlzaF9mdW5jdGlvbiAoMSk7CisJCSAgcG9wX2NfZnVuY3Rpb25fY29udGV4dCAoKTsgfQorCTsKKworbm90eXBlX25lc3RlZF9mdW5jdGlvbjoKKwkgIG5vdHlwZV9kZWNsYXJhdG9yCisJCXsgcHVzaF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgaWYgKCEgc3RhcnRfZnVuY3Rpb24gKGN1cnJlbnRfZGVjbHNwZWNzLCAkMSwKKwkJCQkJcHJlZml4X2F0dHJpYnV0ZXMsIE5VTExfVFJFRSwgMSkpCisJCSAgICB7CisJCSAgICAgIHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisJCSAgICAgIFlZRVJST1IxOworCQkgICAgfQorCQkgIHJlaW5pdF9wYXJzZV9mb3JfZnVuY3Rpb24gKCk7IH0KKwkgIG9sZF9zdHlsZV9wYXJtX2RlY2xzCisJCXsgc3RvcmVfcGFybV9kZWNscyAoKTsgfQorLyogVGhpcyB1c2VkIHRvIHVzZSBjb21wc3RtdF9vcl9lcnJvci4KKyAgIFRoYXQgY2F1c2VkIGEgYnVnIHdpdGggaW5wdXQgYGYoZykgaW50IGcge30nLAorICAgd2hlcmUgdGhlIHVzZSBvZiBZWUVSUk9SMSBhYm92ZSBjYXVzZWQgYW4gZXJyb3IKKyAgIHdoaWNoIHRoZW4gd2FzIGhhbmRsZWQgYnkgY29tcHN0bXRfb3JfZXJyb3IuCisgICBUaGVyZSBmb2xsb3dlZCBhIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiB0aGF0IHNhbWUgcnVsZSwKKyAgIHdoaWNoIGNhbGxlZCBZWUVSUk9SMSBhZ2FpbiwgYW5kIHNvIG9uLiAgKi8KKwkgIGNvbXBzdG10CisJCXsgZmluaXNoX2Z1bmN0aW9uICgxKTsKKwkJICBwb3BfY19mdW5jdGlvbl9jb250ZXh0ICgpOyB9CisJOworCisvKiBBbnkga2luZCBvZiBkZWNsYXJhdG9yICh0aHVzLCBhbGwgZGVjbGFyYXRvcnMgYWxsb3dlZAorICAgYWZ0ZXIgYW4gZXhwbGljaXQgdHlwZXNwZWMpLiAgKi8KKworZGVjbGFyYXRvcjoKKwkgIGFmdGVyX3R5cGVfZGVjbGFyYXRvcgorCXwgbm90eXBlX2RlY2xhcmF0b3IKKwk7CisKKy8qIEEgZGVjbGFyYXRvciB0aGF0IGlzIGFsbG93ZWQgb25seSBhZnRlciBhbiBleHBsaWNpdCB0eXBlc3BlYy4gICovCisKK2FmdGVyX3R5cGVfZGVjbGFyYXRvcjoKKwkgICcoJyBhZnRlcl90eXBlX2RlY2xhcmF0b3IgJyknCisJCXsgJCQgPSAkMjsgfQorCXwgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yICcoJyBwYXJtbGlzdF9vcl9pZGVudGlmaWVycyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCAkMSwgJDMsIE5VTExfVFJFRSk7IH0KKy8qCXwgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yICcoJyBlcnJvciAnKScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7IH0gICovCisJfCBhZnRlcl90eXBlX2RlY2xhcmF0b3IgJ1snIGV4cHIgJ10nICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChBUlJBWV9SRUYsICQxLCAkMyk7IH0KKwl8IGFmdGVyX3R5cGVfZGVjbGFyYXRvciAnWycgJ10nICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChBUlJBWV9SRUYsICQxLCBOVUxMX1RSRUUpOyB9CisJfCAnKicgdHlwZV9xdWFscyBhZnRlcl90eXBlX2RlY2xhcmF0b3IgICVwcmVjIFVOQVJZCisJCXsgJCQgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoJDIsICQzKTsgfQorCS8qID8/PyBZdWNrLiAgc2V0YXR0cnMgaXMgYSBxdWljayBoYWNrLiAgV2UgY2FuJ3QgdXNlCisJICAgcHJlZml4X2F0dHJpYnV0ZXMgYmVjYXVzZSAkMSBvbmx5IGFwcGxpZXMgdG8gdGhpcworCSAgIGRlY2xhcmF0b3IuICBXZSBhc3N1bWUgc2V0c3BlY3MgaGFzIGFscmVhZHkgYmVlbiBkb25lLgorCSAgIHNldGF0dHJzIGFsc28gYXZvaWRzIDUgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMgKG90aGVyd2lzZSBtdWx0aXBsZQorCSAgIGF0dHJpYnV0ZXMgY291bGQgYmUgcmVjb2duaXplZCBoZXJlIG9yIGluIGBhdHRyaWJ1dGVzJykuICAqLworCXwgYXR0cmlidXRlcyBzZXRhdHRycyBhZnRlcl90eXBlX2RlY2xhcmF0b3IKKwkJeyAkJCA9ICQzOyB9CisJfCBUWVBFTkFNRQorCXwgT0JKRUNUTkFNRQorCTsKKworLyogS2luZHMgb2YgZGVjbGFyYXRvciB0aGF0IGNhbiBhcHBlYXIgaW4gYSBwYXJhbWV0ZXIgbGlzdAorICAgaW4gYWRkaXRpb24gdG8gbm90eXBlX2RlY2xhcmF0b3IuICBUaGlzIGlzIGxpa2UgYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yCisgICBidXQgZG9lcyBub3QgYWxsb3cgYSB0eXBlZGVmIG5hbWUgaW4gcGFyZW50aGVzZXMgYXMgYW4gaWRlbnRpZmllcgorICAgKGJlY2F1c2UgaXQgd291bGQgY29uZmxpY3Qgd2l0aCBhIGZ1bmN0aW9uIHdpdGggdGhhdCB0eXBlZGVmIGFzIGFyZykuICAqLworCitwYXJtX2RlY2xhcmF0b3I6CisJICBwYXJtX2RlY2xhcmF0b3IgJygnIHBhcm1saXN0X29yX2lkZW50aWZpZXJzICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChDQUxMX0VYUFIsICQxLCAkMywgTlVMTF9UUkVFKTsgfQorLyoJfCBwYXJtX2RlY2xhcmF0b3IgJygnIGVycm9yICcpJyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCAkMSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCQkgIHBvcGxldmVsICgwLCAwLCAwKTsgfSAgKi8KKwl8IHBhcm1fZGVjbGFyYXRvciAnWycgZXhwciAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgJDEsICQzKTsgfQorCXwgcGFybV9kZWNsYXJhdG9yICdbJyAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgJDEsIE5VTExfVFJFRSk7IH0KKwl8ICcqJyB0eXBlX3F1YWxzIHBhcm1fZGVjbGFyYXRvciAgJXByZWMgVU5BUlkKKwkJeyAkJCA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICgkMiwgJDMpOyB9CisJLyogPz8/IFl1Y2suICBzZXRhdHRycyBpcyBhIHF1aWNrIGhhY2suICBXZSBjYW4ndCB1c2UKKwkgICBwcmVmaXhfYXR0cmlidXRlcyBiZWNhdXNlICQxIG9ubHkgYXBwbGllcyB0byB0aGlzCisJICAgZGVjbGFyYXRvci4gIFdlIGFzc3VtZSBzZXRzcGVjcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuCisJICAgc2V0YXR0cnMgYWxzbyBhdm9pZHMgNSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyAob3RoZXJ3aXNlIG11bHRpcGxlCisJICAgYXR0cmlidXRlcyBjb3VsZCBiZSByZWNvZ25pemVkIGhlcmUgb3IgaW4gYGF0dHJpYnV0ZXMnKS4gICovCisJfCBhdHRyaWJ1dGVzIHNldGF0dHJzIHBhcm1fZGVjbGFyYXRvcgorCQl7ICQkID0gJDM7IH0KKwl8IFRZUEVOQU1FCisJOworCisvKiBBIGRlY2xhcmF0b3IgYWxsb3dlZCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBoYXMgYmVlbgorICAgYW4gZXhwbGljaXQgdHlwZXNwZWMuICBUaGVzZSBjYW5ub3QgcmVkZWNsYXJlIGEgdHlwZWRlZi1uYW1lLiAgKi8KKworbm90eXBlX2RlY2xhcmF0b3I6CisJICBub3R5cGVfZGVjbGFyYXRvciAnKCcgcGFybWxpc3Rfb3JfaWRlbnRpZmllcnMgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsICQzLCBOVUxMX1RSRUUpOyB9CisvKgl8IG5vdHlwZV9kZWNsYXJhdG9yICcoJyBlcnJvciAnKScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7IH0gICovCisJfCAnKCcgbm90eXBlX2RlY2xhcmF0b3IgJyknCisJCXsgJCQgPSAkMjsgfQorCXwgJyonIHR5cGVfcXVhbHMgbm90eXBlX2RlY2xhcmF0b3IgICVwcmVjIFVOQVJZCisJCXsgJCQgPSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoJDIsICQzKTsgfQorCXwgbm90eXBlX2RlY2xhcmF0b3IgJ1snIGV4cHIgJ10nICAlcHJlYyAnLicKKwkJeyAkJCA9IGJ1aWxkX250IChBUlJBWV9SRUYsICQxLCAkMyk7IH0KKwl8IG5vdHlwZV9kZWNsYXJhdG9yICdbJyAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgJDEsIE5VTExfVFJFRSk7IH0KKwkvKiA/Pz8gWXVjay4gIHNldGF0dHJzIGlzIGEgcXVpY2sgaGFjay4gIFdlIGNhbid0IHVzZQorCSAgIHByZWZpeF9hdHRyaWJ1dGVzIGJlY2F1c2UgJDEgb25seSBhcHBsaWVzIHRvIHRoaXMKKwkgICBkZWNsYXJhdG9yLiAgV2UgYXNzdW1lIHNldHNwZWNzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4KKwkgICBzZXRhdHRycyBhbHNvIGF2b2lkcyA1IHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIChvdGhlcndpc2UgbXVsdGlwbGUKKwkgICBhdHRyaWJ1dGVzIGNvdWxkIGJlIHJlY29nbml6ZWQgaGVyZSBvciBpbiBgYXR0cmlidXRlcycpLiAgKi8KKwl8IGF0dHJpYnV0ZXMgc2V0YXR0cnMgbm90eXBlX2RlY2xhcmF0b3IKKwkJeyAkJCA9ICQzOyB9CisJfCBJREVOVElGSUVSCisJOworCitzdHJ1Y3RzcDoKKwkgIFNUUlVDVCBpZGVudGlmaWVyICd7JworCQl7ICQkID0gc3RhcnRfc3RydWN0IChSRUNPUkRfVFlQRSwgJDIpOworCQkgIC8qIFN0YXJ0IHNjb3BlIG9mIHRhZyBiZWZvcmUgcGFyc2luZyBjb21wb25lbnRzLiAgKi8KKwkJfQorCSAgY29tcG9uZW50X2RlY2xfbGlzdCAnfScgbWF5YmVfYXR0cmlidXRlIAorCQl7ICQkID0gZmluaXNoX3N0cnVjdCAoJDx0dHlwZT40LCAkNSwgJDcpOyB9CisJfCBTVFJVQ1QgJ3snIGNvbXBvbmVudF9kZWNsX2xpc3QgJ30nIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gZmluaXNoX3N0cnVjdCAoc3RhcnRfc3RydWN0IChSRUNPUkRfVFlQRSwgTlVMTF9UUkVFKSwKKwkJCQkgICAgICAkMywgJDUpOworCQl9CisJfCBTVFJVQ1QgaWRlbnRpZmllcgorCQl7ICQkID0geHJlZl90YWcgKFJFQ09SRF9UWVBFLCAkMik7IH0KKwl8IFVOSU9OIGlkZW50aWZpZXIgJ3snCisJCXsgJCQgPSBzdGFydF9zdHJ1Y3QgKFVOSU9OX1RZUEUsICQyKTsgfQorCSAgY29tcG9uZW50X2RlY2xfbGlzdCAnfScgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBmaW5pc2hfc3RydWN0ICgkPHR0eXBlPjQsICQ1LCAkNyk7IH0KKwl8IFVOSU9OICd7JyBjb21wb25lbnRfZGVjbF9saXN0ICd9JyBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGZpbmlzaF9zdHJ1Y3QgKHN0YXJ0X3N0cnVjdCAoVU5JT05fVFlQRSwgTlVMTF9UUkVFKSwKKwkJCQkgICAgICAkMywgJDUpOworCQl9CisJfCBVTklPTiBpZGVudGlmaWVyCisJCXsgJCQgPSB4cmVmX3RhZyAoVU5JT05fVFlQRSwgJDIpOyB9CisJfCBFTlVNIGlkZW50aWZpZXIgJ3snCisJCXsgJDxpdHlwZT4zID0gc3VzcGVuZF9tb21lbnRhcnkgKCk7CisJCSAgJCQgPSBzdGFydF9lbnVtICgkMik7IH0KKwkgIGVudW1saXN0IG1heWJlY29tbWFfd2FybiAnfScgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBmaW5pc2hfZW51bSAoJDx0dHlwZT40LCBucmV2ZXJzZSAoJDUpLCAkOCk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDxpdHlwZT4zKTsgfQorCXwgRU5VTSAneycKKwkJeyAkPGl0eXBlPjIgPSBzdXNwZW5kX21vbWVudGFyeSAoKTsKKwkJICAkJCA9IHN0YXJ0X2VudW0gKE5VTExfVFJFRSk7IH0KKwkgIGVudW1saXN0IG1heWJlY29tbWFfd2FybiAnfScgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBmaW5pc2hfZW51bSAoJDx0dHlwZT4zLCBucmV2ZXJzZSAoJDQpLCAkNyk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDxpdHlwZT4yKTsgfQorCXwgRU5VTSBpZGVudGlmaWVyCisJCXsgJCQgPSB4cmVmX3RhZyAoRU5VTUVSQUxfVFlQRSwgJDIpOyB9CisJOworCittYXliZWNvbW1hOgorCSAgLyogZW1wdHkgKi8KKwl8ICcsJworCTsKKworbWF5YmVjb21tYV93YXJuOgorCSAgLyogZW1wdHkgKi8KKwl8ICcsJworCQl7IGlmIChwZWRhbnRpYykgcGVkd2FybiAoImNvbW1hIGF0IGVuZCBvZiBlbnVtZXJhdG9yIGxpc3QiKTsgfQorCTsKKworY29tcG9uZW50X2RlY2xfbGlzdDoKKwkgIGNvbXBvbmVudF9kZWNsX2xpc3QyCisJCXsgJCQgPSAkMTsgfQorCXwgY29tcG9uZW50X2RlY2xfbGlzdDIgY29tcG9uZW50X2RlY2wKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMik7CisJCSAgcGVkd2FybiAoIm5vIHNlbWljb2xvbiBhdCBlbmQgb2Ygc3RydWN0IG9yIHVuaW9uIik7IH0KKwk7CisKK2NvbXBvbmVudF9kZWNsX2xpc3QyOgkvKiBlbXB0eSAqLworCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJfCBjb21wb25lbnRfZGVjbF9saXN0MiBjb21wb25lbnRfZGVjbCAnOycKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMik7IH0KKwl8IGNvbXBvbmVudF9kZWNsX2xpc3QyICc7JworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJleHRyYSBzZW1pY29sb24gaW4gc3RydWN0IG9yIHVuaW9uIHNwZWNpZmllZCIpOyB9CisJLyogZm9vKHNpemVvZihzdHJ1Y3R7IEBkZWZzKENsYXNzTmFtZSl9KSk7ICovCisJfCBERUZTICcoJyBDTEFTU05BTUUgJyknCisJCXsKKwkJICB0cmVlIGludGVyZmFjZSA9IGxvb2t1cF9pbnRlcmZhY2UgKCQzKTsKKworCQkgIGlmIChpbnRlcmZhY2UpCisJCSAgICAkJCA9IGdldF9jbGFzc19pdmFycyAoaW50ZXJmYWNlKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVycm9yICgiQ2Fubm90IGZpbmQgaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGZvciBgJXMnIiwKKwkJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSICgkMykpOworCQkgICAgICAkJCA9IE5VTExfVFJFRTsKKwkJICAgIH0KKwkJfQorCTsKKworLyogVGhlcmUgaXMgYSBzaGlmdC1yZWR1Y2UgY29uZmxpY3QgaGVyZSwgYmVjYXVzZSBgY29tcG9uZW50cycgbWF5CisgICBzdGFydCB3aXRoIGEgYHR5cGVuYW1lJy4gIEl0IGhhcHBlbnMgdGhhdCBzaGlmdGluZyAodGhlIGRlZmF1bHQgcmVzb2x1dGlvbikKKyAgIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLCBiZWNhdXNlIGl0IHRyZWF0cyB0aGUgYHR5cGVuYW1lJyBhcyBwYXJ0IG9mCisgICBhIGB0eXBlZF90eXBlc3BlY3MnLgorCisgICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgc2FtZSB0ZWNobmlxdWUgd291bGQgYWxsb3cgdGhlIGRpc3RpbmN0aW9uCisgICBiZXR3ZWVuIGBub3R5cGVfaW5pdGRlY2xzJyBhbmQgYGluaXRkZWNscycgdG8gYmUgZWxpbWluYXRlZC4KKyAgIEJ1dCBJIGFtIGJlaW5nIGNhdXRpb3VzIGFuZCBub3QgdHJ5aW5nIGl0LiAgKi8KKworY29tcG9uZW50X2RlY2w6CisJICB0eXBlZF90eXBlc3BlY3Mgc2V0c3BlY3MgY29tcG9uZW50cworCQl7ICQkID0gJDM7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX3R5cGVzcGVjcworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBtZW1iZXIgZGVjbGFyYXRpb25zIHdpdGggbm8gbWVtYmVycyIpOworCQkgIHNoYWRvd190YWcoJDEpOworCQkgICQkID0gTlVMTF9UUkVFOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzIHNldHNwZWNzIGNvbXBvbmVudHMKKwkJeyAkJCA9ICQzOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIG1lbWJlciBkZWNsYXJhdGlvbnMgd2l0aCBubyBtZW1iZXJzIik7CisJCSAgc2hhZG93X3RhZygkMSk7CisJCSAgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGVycm9yCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGV4dGVuc2lvbiBjb21wb25lbnRfZGVjbAorCQl7ICQkID0gJDI7CisJCSAgcGVkYW50aWMgPSAkPGl0eXBlPjE7IH0KKwk7CisKK2NvbXBvbmVudHM6CisJICBjb21wb25lbnRfZGVjbGFyYXRvcgorCXwgY29tcG9uZW50cyAnLCcgY29tcG9uZW50X2RlY2xhcmF0b3IKKwkJeyAkJCA9IGNoYWlub24gKCQxLCAkMyk7IH0KKwk7CisKK2NvbXBvbmVudF9kZWNsYXJhdG9yOgorCSAgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBkZWNsYXJhdG9yIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gZ3Jva2ZpZWxkICgkMSwgJDIsICQzLCBjdXJyZW50X2RlY2xzcGVjcywgTlVMTF9UUkVFKTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKCQkLCAkNCwgcHJlZml4X2F0dHJpYnV0ZXMpOyB9CisJfCBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vCisJICBkZWNsYXJhdG9yICc6JyBleHByX25vX2NvbW1hcyBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGdyb2tmaWVsZCAoJDEsICQyLCAkMywgY3VycmVudF9kZWNsc3BlY3MsICQ1KTsKKwkJICBkZWNsX2F0dHJpYnV0ZXMgKCQkLCAkNiwgcHJlZml4X2F0dHJpYnV0ZXMpOyB9CisJfCBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vICc6JyBleHByX25vX2NvbW1hcyBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGdyb2tmaWVsZCAoJDEsICQyLCBOVUxMX1RSRUUsIGN1cnJlbnRfZGVjbHNwZWNzLCAkNCk7CisJCSAgZGVjbF9hdHRyaWJ1dGVzICgkJCwgJDUsIHByZWZpeF9hdHRyaWJ1dGVzKTsgfQorCTsKKworLyogV2UgY2hhaW4gdGhlIGVudW1lcmF0b3JzIGluIHJldmVyc2Ugb3JkZXIuCisgICBUaGV5IGFyZSBwdXQgaW4gZm9yd2FyZCBvcmRlciB3aGVyZSBlbnVtbGlzdCBpcyB1c2VkLgorICAgKFRoZSBvcmRlciB1c2VkIHRvIGJlIHNpZ25pZmljYW50LCBidXQgbm8gbG9uZ2VyIGlzIHNvLgorICAgSG93ZXZlciwgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlIG9yZGVyLCBqdXN0IHRvIGJlIGNsZWFuLikgICovCisKK2VudW1saXN0OgorCSAgZW51bWVyYXRvcgorCXwgZW51bWxpc3QgJywnIGVudW1lcmF0b3IKKwkJeyBpZiAoJDEgPT0gZXJyb3JfbWFya19ub2RlKQorCQkgICAgJCQgPSAkMTsKKwkJICBlbHNlCisJCSAgICAkJCA9IGNoYWlub24gKCQzLCAkMSk7IH0KKwl8IGVycm9yCisJCXsgJCQgPSBlcnJvcl9tYXJrX25vZGU7IH0KKwk7CisKKworZW51bWVyYXRvcjoKKwkgIGlkZW50aWZpZXIKKwkJeyAkJCA9IGJ1aWxkX2VudW1lcmF0b3IgKCQxLCBOVUxMX1RSRUUpOyB9CisJfCBpZGVudGlmaWVyICc9JyBleHByX25vX2NvbW1hcworCQl7ICQkID0gYnVpbGRfZW51bWVyYXRvciAoJDEsICQzKTsgfQorCTsKKwordHlwZW5hbWU6CisJdHlwZWRfdHlwZXNwZWNzIGFic2RjbAorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgJDIpOyB9CisJfCBub25lbXB0eV90eXBlX3F1YWxzIGFic2RjbAorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0ICgkMSwgJDIpOyB9CisJOworCithYnNkY2w6ICAgLyogYW4gYWJzb2x1dGUgZGVjbGFyYXRvciAqLworCS8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGFic2RjbDEKKwk7CisKK25vbmVtcHR5X3R5cGVfcXVhbHM6CisJICBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMSwgTlVMTF9UUkVFKTsgfQorCXwgbm9uZW1wdHlfdHlwZV9xdWFscyBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOyB9CisJOworCit0eXBlX3F1YWxzOgorCSAgLyogZW1wdHkgKi8KKwkJeyAkJCA9IE5VTExfVFJFRTsgfQorCXwgdHlwZV9xdWFscyBUWVBFX1FVQUwKKwkJeyAkJCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCAkMiwgJDEpOyB9CisJOworCithYnNkY2wxOiAgLyogYSBub25lbXB0eSBhYnNvbHV0ZSBkZWNsYXJhdG9yICovCisJICAnKCcgYWJzZGNsMSAnKScKKwkJeyAkJCA9ICQyOyB9CisJICAvKiBgKHR5cGVkZWYpMScgaXMgYGludCcuICAqLworCXwgJyonIHR5cGVfcXVhbHMgYWJzZGNsMSAgJXByZWMgVU5BUlkKKwkJeyAkJCA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICgkMiwgJDMpOyB9CisJfCAnKicgdHlwZV9xdWFscyAgJXByZWMgVU5BUlkKKwkJeyAkJCA9IG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yICgkMiwgTlVMTF9UUkVFKTsgfQorCXwgYWJzZGNsMSAnKCcgcGFybWxpc3QgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKENBTExfRVhQUiwgJDEsICQzLCBOVUxMX1RSRUUpOyB9CisJfCBhYnNkY2wxICdbJyBleHByICddJyAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQVJSQVlfUkVGLCAkMSwgJDMpOyB9CisJfCBhYnNkY2wxICdbJyAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgJDEsIE5VTExfVFJFRSk7IH0KKwl8ICcoJyBwYXJtbGlzdCAgJXByZWMgJy4nCisJCXsgJCQgPSBidWlsZF9udCAoQ0FMTF9FWFBSLCBOVUxMX1RSRUUsICQyLCBOVUxMX1RSRUUpOyB9CisJfCAnWycgZXhwciAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCAkMik7IH0KKwl8ICdbJyAnXScgICVwcmVjICcuJworCQl7ICQkID0gYnVpbGRfbnQgKEFSUkFZX1JFRiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOyB9CisJLyogPz8/IEl0IGFwcGVhcnMgd2UgaGF2ZSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgaGVyZSwgaG93ZXZlcgorCSAgIHVzaW5nIHByZWZpeF9hdHRyaWJ1dGVzIGlzIHdyb25nLiAgKi8KKwk7CisKKy8qIGF0IGxlYXN0IG9uZSBzdGF0ZW1lbnQsIHRoZSBmaXJzdCBvZiB3aGljaCBwYXJzZXMgd2l0aG91dCBlcnJvci4gICovCisvKiBzdG10cyBpcyB1c2VkIG9ubHkgYWZ0ZXIgZGVjbHMsIHNvIGFuIGludmFsaWQgZmlyc3Qgc3RhdGVtZW50CisgICBpcyBhY3R1YWxseSByZWdhcmRlZCBhcyBhbiBpbnZhbGlkIGRlY2wgYW5kIHBhcnQgb2YgdGhlIGRlY2xzLiAgKi8KKworc3RtdHM6CisJbGluZW5vX3N0bXRfb3JfbGFiZWxzCisJCXsKKwkJICBpZiAocGVkYW50aWMgJiYgJDEpCisJCSAgICBwZWR3YXJuICgiQU5TSSBDIGZvcmJpZHMgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIpOworCQl9CisJOworCitsaW5lbm9fc3RtdF9vcl9sYWJlbHM6CisJICBsaW5lbm9fc3RtdF9vcl9sYWJlbAorCXwgbGluZW5vX3N0bXRfb3JfbGFiZWxzIGxpbmVub19zdG10X29yX2xhYmVsCisJCXsgJCQgPSAkMjsgfQorCXwgbGluZW5vX3N0bXRfb3JfbGFiZWxzIGVycnN0bXQKKwkJeyAkJCA9IDA7IH0KKwk7CisKK3hzdG10czoKKwkvKiBlbXB0eSAqLworCXwgc3RtdHMKKwk7CisKK2VycnN0bXQ6ICBlcnJvciAnOycKKwk7CisKK3B1c2hsZXZlbDogIC8qIGVtcHR5ICovCisJCXsgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIHB1c2hsZXZlbCAoMCk7CisJCSAgY2xlYXJfbGFzdF9leHByICgpOworCQkgIHB1c2hfbW9tZW50YXJ5ICgpOworCQkgIGV4cGFuZF9zdGFydF9iaW5kaW5ncyAoMCk7CisJCSAgaWYgKG9iamNfbWV0aG9kX2NvbnRleHQpCisJCSAgICBhZGRfb2JqY19kZWNscyAoKTsKKwkJfQorCTsKKworLyogUmVhZCB6ZXJvIG9yIG1vcmUgZm9yd2FyZC1kZWNsYXJhdGlvbnMgZm9yIGxhYmVscworICAgdGhhdCBuZXN0ZWQgZnVuY3Rpb25zIGNhbiBqdW1wIHRvLiAgKi8KK21heWJlX2xhYmVsX2RlY2xzOgorCSAgLyogZW1wdHkgKi8KKwl8IGxhYmVsX2RlY2xzCisJCXsgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoIkFOU0kgQyBmb3JiaWRzIGxhYmVsIGRlY2xhcmF0aW9ucyIpOyB9CisJOworCitsYWJlbF9kZWNsczoKKwkgIGxhYmVsX2RlY2wKKwl8IGxhYmVsX2RlY2xzIGxhYmVsX2RlY2wKKwk7CisKK2xhYmVsX2RlY2w6CisJICBMQUJFTCBpZGVudGlmaWVyc19vcl90eXBlbmFtZXMgJzsnCisJCXsgdHJlZSBsaW5rOworCQkgIGZvciAobGluayA9ICQyOyBsaW5rOyBsaW5rID0gVFJFRV9DSEFJTiAobGluaykpCisJCSAgICB7CisJCSAgICAgIHRyZWUgbGFiZWwgPSBzaGFkb3dfbGFiZWwgKFRSRUVfVkFMVUUgKGxpbmspKTsKKwkJICAgICAgQ19ERUNMQVJFRF9MQUJFTF9GTEFHIChsYWJlbCkgPSAxOworCQkgICAgICBkZWNsYXJlX25vbmxvY2FsX2xhYmVsIChsYWJlbCk7CisJCSAgICB9CisJCX0KKwk7CisKKy8qIFRoaXMgaXMgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uLgorICAgSXQgY2F1c2VzIHN5bnRheCBlcnJvcnMgdG8gaWdub3JlIHRvIHRoZSBuZXh0IG9wZW5icmFjZS4gICovCitjb21wc3RtdF9vcl9lcnJvcjoKKwkgIGNvbXBzdG10CisJCXt9CisJfCBlcnJvciBjb21wc3RtdAorCTsKKworY29tcHN0bXQ6ICd7JyAnfScKKwkJeyAkJCA9IGNvbnZlcnQgKHZvaWRfdHlwZV9ub2RlLCBpbnRlZ2VyX3plcm9fbm9kZSk7IH0KKwl8ICd7JyBwdXNobGV2ZWwgbWF5YmVfbGFiZWxfZGVjbHMgZGVjbHMgeHN0bXRzICd9JworCQl7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZW5kX2JpbmRpbmdzIChnZXRkZWNscyAoKSwgMSwgMCk7CisJCSAgJCQgPSBwb3BsZXZlbCAoMSwgMSwgMCk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsgfQorCXwgJ3snIHB1c2hsZXZlbCBtYXliZV9sYWJlbF9kZWNscyBlcnJvciAnfScKKwkJeyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJCSAgZXhwYW5kX2VuZF9iaW5kaW5ncyAoZ2V0ZGVjbHMgKCksIGtlcHRfbGV2ZWxfcCAoKSwgMCk7CisJCSAgJCQgPSBwb3BsZXZlbCAoa2VwdF9sZXZlbF9wICgpLCAwLCAwKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOyB9CisJfCAneycgcHVzaGxldmVsIG1heWJlX2xhYmVsX2RlY2xzIHN0bXRzICd9JworCQl7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZW5kX2JpbmRpbmdzIChnZXRkZWNscyAoKSwga2VwdF9sZXZlbF9wICgpLCAwKTsKKwkJICAkJCA9IHBvcGxldmVsIChrZXB0X2xldmVsX3AgKCksIDAsIDApOworCQkgIGlmICh5eWNoYXIgPT0gQ09OU1RBTlQgfHwgeXljaGFyID09IFNUUklORykKKwkJICAgIHBvcF9tb21lbnRhcnlfbm9mcmVlICgpOworCQkgIGVsc2UKKwkJICAgIHBvcF9tb21lbnRhcnkgKCk7IH0KKwk7CisKKy8qIFZhbHVlIGlzIG51bWJlciBvZiBzdGF0ZW1lbnRzIGNvdW50ZWQgYXMgb2YgdGhlIGNsb3NlcGFyZW4uICAqLworc2ltcGxlX2lmOgorCSAgaWZfcHJlZml4IGxpbmVub19sYWJlbGVkX3N0bXQKKy8qIE1ha2Ugc3VyZSBleHBhbmRfZW5kX2NvbmQgaXMgcnVuIG9uY2UKKyAgIGZvciBlYWNoIGNhbGwgdG8gZXhwYW5kX3N0YXJ0X2NvbmQuCisgICBPdGhlcndpc2UgYSBjcmFzaCBpcyBsaWtlbHkuICAqLworCXwgaWZfcHJlZml4IGVycm9yCisJOworCitpZl9wcmVmaXg6CisJICBJRiAnKCcgZXhwciAnKScKKwkJeyBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgZXhwYW5kX3N0YXJ0X2NvbmQgKHRydXRodmFsdWVfY29udmVyc2lvbiAoJDMpLCAwKTsKKwkJICAkPGl0eXBlPiQgPSBzdG10X2NvdW50OworCQkgIGlmX3N0bXRfZmlsZSA9ICQ8ZmlsZW5hbWU+LTE7CisJCSAgaWZfc3RtdF9saW5lID0gJDxsaW5lbm8+MDsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCTsKKworLyogVGhpcyBpcyBhIHN1YnJvdXRpbmUgb2Ygc3RtdC4KKyAgIEl0IGlzIHVzZWQgdHdpY2UsIG9uY2UgZm9yIHZhbGlkIERPIHN0YXRlbWVudHMKKyAgIGFuZCBvbmNlIGZvciBjYXRjaGluZyBlcnJvcnMgaW4gcGFyc2luZyB0aGUgZW5kIHRlc3QuICAqLworZG9fc3RtdF9zdGFydDoKKwkgIERPCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICAvKiBTZWUgY29tbWVudCBpbiBgd2hpbGUnIGFsdGVybmF0aXZlLCBhYm92ZS4gICovCisJCSAgZW1pdF9ub3AgKCk7CisJCSAgZXhwYW5kX3N0YXJ0X2xvb3BfY29udGludWVfZWxzZXdoZXJlICgxKTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCSAgbGluZW5vX2xhYmVsZWRfc3RtdCBXSElMRQorCQl7IGV4cGFuZF9sb29wX2NvbnRpbnVlX2hlcmUgKCk7IH0KKwk7CisKK3NhdmVfZmlsZW5hbWU6CisJCXsgJCQgPSBpbnB1dF9maWxlbmFtZTsgfQorCTsKKworc2F2ZV9saW5lbm86CisJCXsgJCQgPSBsaW5lbm87IH0KKwk7CisKK2xpbmVub19sYWJlbGVkX3N0bXQ6CisJICBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vIHN0bXQKKwkJeyB9CisvKgl8IHNhdmVfZmlsZW5hbWUgc2F2ZV9saW5lbm8gZXJyb3IKKwkJeyB9CisqLworCXwgc2F2ZV9maWxlbmFtZSBzYXZlX2xpbmVubyBsYWJlbCBsaW5lbm9fbGFiZWxlZF9zdG10CisJCXsgfQorCTsKKworbGluZW5vX3N0bXRfb3JfbGFiZWw6CisJICBzYXZlX2ZpbGVuYW1lIHNhdmVfbGluZW5vIHN0bXRfb3JfbGFiZWwKKwkJeyAkJCA9ICQzOyB9CisJOworCitzdG10X29yX2xhYmVsOgorCSAgc3RtdAorCQl7ICQkID0gMDsgfQorCXwgbGFiZWwKKwkJeyAkJCA9IDE7IH0KKwk7CisKKy8qIFBhcnNlIGEgc2luZ2xlIHJlYWwgc3RhdGVtZW50LCBub3QgaW5jbHVkaW5nIGFueSBsYWJlbHMuICAqLworc3RtdDoKKwkgIGNvbXBzdG10CisJCXsgc3RtdF9jb3VudCsrOyB9CisgICAgICAgIHwgYWxsX2l0ZXJfc3RtdCAKKwl8IGV4cHIgJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKy8qIEl0IGFwcGVhcnMgdGhhdCB0aGlzIHNob3VsZCBub3QgYmUgZG9uZS0tdGhhdCBhIG5vbi1sdmFsdWUgYXJyYXkKKyAgIHNob3VsZG4ndCBnZXQgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIGlzbid0IHVzZWQuCisgICBTZWN0aW9uIDMuMi4yLjEgc2F5cyB0aGF0IGFuIGFycmF5IGx2YWx1ZSBnZXRzIGNvbnZlcnRlZCB0byBhIHBvaW50ZXIKKyAgIGlmIGl0IGFwcGVhcnMgYXMgYSB0b3AtbGV2ZWwgZXhwcmVzc2lvbiwKKyAgIGJ1dCBzYXlzIG5vdGhpbmcgYWJvdXQgbm9uLWx2YWx1ZSBhcnJheXMuICAqLworI2lmIDAKKwkJICAvKiBDYWxsIGRlZmF1bHRfY29udmVyc2lvbiB0byBnZXQgYW4gZXJyb3IKKwkJICAgICBvbiByZWZlcnJpbmcgdG8gYSByZWdpc3RlciBhcnJheSBpZiBwZWRhbnRpYy4gICovCisJCSAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFICgkMSkpID09IEFSUkFZX1RZUEUKKwkJICAgICAgfHwgVFJFRV9DT0RFIChUUkVFX1RZUEUgKCQxKSkgPT0gRlVOQ1RJT05fVFlQRSkKKwkJICAgICQxID0gZGVmYXVsdF9jb252ZXJzaW9uICgkMSk7CisjZW5kaWYKKwkJICBpdGVyYXRvcl9leHBhbmQgKCQxKTsKKwkJICBjbGVhcl9tb21lbnRhcnkgKCk7IH0KKwl8IHNpbXBsZV9pZiBFTFNFCisJCXsgZXhwYW5kX3N0YXJ0X2Vsc2UgKCk7CisJCSAgJDxpdHlwZT4xID0gc3RtdF9jb3VudDsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCSAgbGluZW5vX2xhYmVsZWRfc3RtdAorCQl7IGV4cGFuZF9lbmRfY29uZCAoKTsKKwkJICBpZiAoZXh0cmFfd2FybmluZ3MgJiYgc3RtdF9jb3VudCA9PSAkPGl0eXBlPjEpCisJCSAgICB3YXJuaW5nICgiZW1wdHkgYm9keSBpbiBhbiBlbHNlLXN0YXRlbWVudCIpOyB9CisJfCBzaW1wbGVfaWYgJXByZWMgSUYKKwkJeyBleHBhbmRfZW5kX2NvbmQgKCk7CisJCSAgLyogVGhpcyB3YXJuaW5nIGlzIGhlcmUgaW5zdGVhZCBvZiBpbiBzaW1wbGVfaWYsIGJlY2F1c2Ugd2UKKwkJICAgICBkbyBub3Qgd2FudCBhIHdhcm5pbmcgaWYgYW4gZW1wdHkgaWYgaXMgZm9sbG93ZWQgYnkgYW4KKwkJICAgICBlbHNlIHN0YXRlbWVudC4gIEluY3JlbWVudCBzdG10X2NvdW50IHNvIHdlIGRvbid0CisJCSAgICAgZ2l2ZSBhIHNlY29uZCBlcnJvciBpZiB0aGlzIGlzIGEgbmVzdGVkIGBpZicuICAqLworCQkgIGlmIChleHRyYV93YXJuaW5ncyAmJiBzdG10X2NvdW50KysgPT0gJDxpdHlwZT4xKQorCQkgICAgd2FybmluZ193aXRoX2ZpbGVfYW5kX2xpbmUgKGlmX3N0bXRfZmlsZSwgaWZfc3RtdF9saW5lLAorCQkJCQkJImVtcHR5IGJvZHkgaW4gYW4gaWYtc3RhdGVtZW50Iik7IH0KKy8qIE1ha2Ugc3VyZSBleHBhbmRfZW5kX2NvbmQgaXMgcnVuIG9uY2UKKyAgIGZvciBlYWNoIGNhbGwgdG8gZXhwYW5kX3N0YXJ0X2NvbmQuCisgICBPdGhlcndpc2UgYSBjcmFzaCBpcyBsaWtlbHkuICAqLworCXwgc2ltcGxlX2lmIEVMU0UgZXJyb3IKKwkJeyBleHBhbmRfZW5kX2NvbmQgKCk7IH0KKwl8IFdISUxFCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICAvKiBUaGUgZW1pdF9ub3AgdXNlZCB0byBjb21lIGJlZm9yZSBlbWl0X2xpbmVfbm90ZSwKKwkJICAgICBidXQgdGhhdCBtYWRlIHRoZSBub3Agc2VlbSBsaWtlIHBhcnQgb2YgdGhlIHByZWNlZGluZyBsaW5lLgorCQkgICAgIEFuZCB0aGF0IHdhcyBjb25mdXNpbmcgd2hlbiB0aGUgcHJlY2VkaW5nIGxpbmUgd2FzCisJCSAgICAgaW5zaWRlIG9mIGFuIGlmIHN0YXRlbWVudCBhbmQgd2FzIG5vdCByZWFsbHkgZXhlY3V0ZWQuCisJCSAgICAgSSB0aGluayBpdCBvdWdodCB0byB3b3JrIHRvIHB1dCB0aGUgbm9wIGFmdGVyIHRoZSBsaW5lIG51bWJlci4KKwkJICAgICBXZSB3aWxsIHNlZS4gIC0tcm1zLCBKdWx5IDE1LCAxOTkxLiAgKi8KKwkJICBlbWl0X25vcCAoKTsgfQorCSAgJygnIGV4cHIgJyknCisJCXsgLyogRG9uJ3Qgc3RhcnQgdGhlIGxvb3AgdGlsbCB3ZSBoYXZlIHN1Y2NlZWRlZAorCQkgICAgIGluIHBhcnNpbmcgdGhlIGVuZCB0ZXN0LiAgVGhpcyBpcyB0byBtYWtlIHN1cmUKKwkJICAgICB0aGF0IHdlIGVuZCBldmVyeSBsb29wIHdlIHN0YXJ0LiAgKi8KKwkJICBleHBhbmRfc3RhcnRfbG9vcCAoMSk7CisJCSAgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgIGV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UgKE5VTExfUFRSLAorCQkJCQkgICAgIHRydXRodmFsdWVfY29udmVyc2lvbiAoJDQpKTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCSAgbGluZW5vX2xhYmVsZWRfc3RtdAorCQl7IGV4cGFuZF9lbmRfbG9vcCAoKTsgfQorCXwgZG9fc3RtdF9zdGFydAorCSAgJygnIGV4cHIgJyknICc7JworCQl7IGVtaXRfbGluZV9ub3RlIChpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsKKwkJICBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlIChOVUxMX1BUUiwKKwkJCQkJICAgICB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKCQzKSk7CisJCSAgZXhwYW5kX2VuZF9sb29wICgpOworCQkgIGNsZWFyX21vbWVudGFyeSAoKTsgfQorLyogVGhpcyBydWxlIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgd2UgZW5kIGV2ZXJ5IGxvb3Agd2Ugc3RhcnQuICAqLworCXwgZG9fc3RtdF9zdGFydCBlcnJvcgorCQl7IGV4cGFuZF9lbmRfbG9vcCAoKTsKKwkJICBjbGVhcl9tb21lbnRhcnkgKCk7IH0KKwl8IEZPUgorCSAgJygnIHhleHByICc7JworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgLyogU2VlIGNvbW1lbnQgaW4gYHdoaWxlJyBhbHRlcm5hdGl2ZSwgYWJvdmUuICAqLworCQkgIGVtaXRfbm9wICgpOworCQkgIGlmICgkMykgY19leHBhbmRfZXhwcl9zdG10ICgkMyk7CisJCSAgLyogTmV4dCBzdGVwIGlzIHRvIGNhbGwgZXhwYW5kX3N0YXJ0X2xvb3BfY29udGludWVfZWxzZXdoZXJlLAorCQkgICAgIGJ1dCB3YWl0IHRpbGwgYWZ0ZXIgd2UgcGFyc2UgdGhlIGVudGlyZSBmb3IgKC4uLikuCisJCSAgICAgT3RoZXJ3aXNlLCBpbnZhbGlkIGlucHV0IG1pZ2h0IGNhdXNlIHVzIHRvIGNhbGwgdGhhdAorCQkgICAgIGZuIHdpdGhvdXQgY2FsbGluZyBleHBhbmRfZW5kX2xvb3AuICAqLworCQl9CisJICB4ZXhwciAnOycKKwkJLyogQ2FuJ3QgZW1pdCBub3c7IHdhaXQgdGlsbCBhZnRlciBleHBhbmRfc3RhcnRfbG9vcC4uLiAgKi8KKwkJeyAkPGxpbmVubz43ID0gbGluZW5vOworCQkgICQ8ZmlsZW5hbWU+JCA9IGlucHV0X2ZpbGVuYW1lOyB9CisJICB4ZXhwciAnKScKKwkJeyAKKwkJICAvKiBTdGFydCB0aGUgbG9vcC4gIERvaW5nIHRoaXMgYWZ0ZXIgcGFyc2luZworCQkgICAgIGFsbCB0aGUgZXhwcmVzc2lvbnMgZW5zdXJlcyB3ZSB3aWxsIGVuZCB0aGUgbG9vcC4gICovCisJCSAgZXhwYW5kX3N0YXJ0X2xvb3BfY29udGludWVfZWxzZXdoZXJlICgxKTsKKwkJICAvKiBFbWl0IHRoZSBlbmQtdGVzdCwgd2l0aCBhIGxpbmUgbnVtYmVyLiAgKi8KKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT44LCAkPGxpbmVubz43KTsKKwkJICBpZiAoJDYpCisJCSAgICBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlIChOVUxMX1BUUiwKKwkJCQkJICAgICAgIHRydXRodmFsdWVfY29udmVyc2lvbiAoJDYpKTsKKwkJICAvKiBEb24ndCBsZXQgdGhlIHRyZWUgbm9kZXMgZm9yICQ5IGJlIGRpc2NhcmRlZCBieQorCQkgICAgIGNsZWFyX21vbWVudGFyeSBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgdGhlIG5leHQgc3RtdC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7CisJCSAgJDxsaW5lbm8+NyA9IGxpbmVubzsKKwkJICAkPGZpbGVuYW1lPjggPSBpbnB1dF9maWxlbmFtZTsKKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCSAgbGluZW5vX2xhYmVsZWRfc3RtdAorCQl7IC8qIEVtaXQgdGhlIGluY3JlbWVudCBleHByZXNzaW9uLCB3aXRoIGEgbGluZSBudW1iZXIuICAqLworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPjgsICQ8bGluZW5vPjcpOworCQkgIGV4cGFuZF9sb29wX2NvbnRpbnVlX2hlcmUgKCk7CisJCSAgaWYgKCQ5KQorCQkgICAgY19leHBhbmRfZXhwcl9zdG10ICgkOSk7CisJCSAgaWYgKHl5Y2hhciA9PSBDT05TVEFOVCB8fCB5eWNoYXIgPT0gU1RSSU5HKQorCQkgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJCSAgZWxzZQorCQkgICAgcG9wX21vbWVudGFyeSAoKTsKKwkJICBleHBhbmRfZW5kX2xvb3AgKCk7IH0KKwl8IFNXSVRDSCAnKCcgZXhwciAnKScKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGNfZXhwYW5kX3N0YXJ0X2Nhc2UgKCQzKTsKKwkJICAvKiBEb24ndCBsZXQgdGhlIHRyZWUgbm9kZXMgZm9yICQzIGJlIGRpc2NhcmRlZCBieQorCQkgICAgIGNsZWFyX21vbWVudGFyeSBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgdGhlIG5leHQgc3RtdC4gICovCisJCSAgcHVzaF9tb21lbnRhcnkgKCk7CisJCSAgcG9zaXRpb25fYWZ0ZXJfd2hpdGVfc3BhY2UgKCk7IH0KKwkgIGxpbmVub19sYWJlbGVkX3N0bXQKKwkJeyBleHBhbmRfZW5kX2Nhc2UgKCQzKTsKKwkJICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJCSAgICBwb3BfbW9tZW50YXJ5X25vZnJlZSAoKTsKKwkJICBlbHNlCisJCSAgICBwb3BfbW9tZW50YXJ5ICgpOyB9CisJfCBCUkVBSyAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGlmICggISBleHBhbmRfZXhpdF9zb21ldGhpbmcgKCkpCisJCSAgICBlcnJvciAoImJyZWFrIHN0YXRlbWVudCBub3Qgd2l0aGluIGxvb3Agb3Igc3dpdGNoIik7IH0KKwl8IENPTlRJTlVFICc7JworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgaWYgKCEgZXhwYW5kX2NvbnRpbnVlX2xvb3AgKE5VTExfUFRSKSkKKwkJICAgIGVycm9yICgiY29udGludWUgc3RhdGVtZW50IG5vdCB3aXRoaW4gYSBsb29wIik7IH0KKwl8IFJFVFVSTiAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGNfZXhwYW5kX3JldHVybiAoTlVMTF9UUkVFKTsgfQorCXwgUkVUVVJOIGV4cHIgJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBjX2V4cGFuZF9yZXR1cm4gKCQyKTsgfQorCXwgQVNNX0tFWVdPUkQgbWF5YmVfdHlwZV9xdWFsICcoJyBleHByICcpJyAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIFNUUklQX05PUFMgKCQ0KTsKKwkJICBpZiAoKFRSRUVfQ09ERSAoJDQpID09IEFERFJfRVhQUgorCQkgICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKCQ0LCAwKSkgPT0gU1RSSU5HX0NTVCkKKwkJICAgICAgfHwgVFJFRV9DT0RFICgkNCkgPT0gU1RSSU5HX0NTVCkKKwkJICAgIGV4cGFuZF9hc20gKCQ0KTsKKwkJICBlbHNlCisJCSAgICBlcnJvciAoImFyZ3VtZW50IG9mIGBhc20nIGlzIG5vdCBhIGNvbnN0YW50IHN0cmluZyIpOyB9CisJLyogVGhpcyBpcyB0aGUgY2FzZSB3aXRoIGp1c3Qgb3V0cHV0IG9wZXJhbmRzLiAgKi8KKwl8IEFTTV9LRVlXT1JEIG1heWJlX3R5cGVfcXVhbCAnKCcgZXhwciAnOicgYXNtX29wZXJhbmRzICcpJyAnOycKKwkJeyBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoJDQsICQ2LCBOVUxMX1RSRUUsIE5VTExfVFJFRSwKKwkJCQkJICQyID09IHJpZHBvaW50ZXJzWyhpbnQpUklEX1ZPTEFUSUxFXSwKKwkJCQkJIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyB9CisJLyogVGhpcyBpcyB0aGUgY2FzZSB3aXRoIGlucHV0IG9wZXJhbmRzIGFzIHdlbGwuICAqLworCXwgQVNNX0tFWVdPUkQgbWF5YmVfdHlwZV9xdWFsICcoJyBleHByICc6JyBhc21fb3BlcmFuZHMgJzonIGFzbV9vcGVyYW5kcyAnKScgJzsnCisJCXsgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBjX2V4cGFuZF9hc21fb3BlcmFuZHMgKCQ0LCAkNiwgJDgsIE5VTExfVFJFRSwKKwkJCQkJICQyID09IHJpZHBvaW50ZXJzWyhpbnQpUklEX1ZPTEFUSUxFXSwKKwkJCQkJIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOyB9CisJLyogVGhpcyBpcyB0aGUgY2FzZSB3aXRoIGNsb2JiZXJlZCByZWdpc3RlcnMgYXMgd2VsbC4gICovCisJfCBBU01fS0VZV09SRCBtYXliZV90eXBlX3F1YWwgJygnIGV4cHIgJzonIGFzbV9vcGVyYW5kcyAnOicKKyAgCSAgYXNtX29wZXJhbmRzICc6JyBhc21fY2xvYmJlcnMgJyknICc7JworCQl7IHN0bXRfY291bnQrKzsKKwkJICBlbWl0X2xpbmVfbm90ZSAoJDxmaWxlbmFtZT4tMSwgJDxsaW5lbm8+MCk7CisJCSAgY19leHBhbmRfYXNtX29wZXJhbmRzICgkNCwgJDYsICQ4LCAkMTAsCisJCQkJCSAkMiA9PSByaWRwb2ludGVyc1soaW50KVJJRF9WT0xBVElMRV0sCisJCQkJCSBpbnB1dF9maWxlbmFtZSwgbGluZW5vKTsgfQorCXwgR09UTyBpZGVudGlmaWVyICc7JworCQl7IHRyZWUgZGVjbDsKKwkJICBzdG10X2NvdW50Kys7CisJCSAgZW1pdF9saW5lX25vdGUgKCQ8ZmlsZW5hbWU+LTEsICQ8bGluZW5vPjApOworCQkgIGRlY2wgPSBsb29rdXBfbGFiZWwgKCQyKTsKKwkJICBpZiAoZGVjbCAhPSAwKQorCQkgICAgeworCQkgICAgICBUUkVFX1VTRUQgKGRlY2wpID0gMTsKKwkJICAgICAgZXhwYW5kX2dvdG8gKGRlY2wpOworCQkgICAgfQorCQl9CisJfCBHT1RPICcqJyBleHByICc7JworCQl7IGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBgZ290byAqZXhwcjsnIik7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbGluZV9ub3RlICgkPGZpbGVuYW1lPi0xLCAkPGxpbmVubz4wKTsKKwkJICBleHBhbmRfY29tcHV0ZWRfZ290byAoY29udmVydCAocHRyX3R5cGVfbm9kZSwgJDMpKTsgfQorCXwgJzsnCisJOworCithbGxfaXRlcl9zdG10OgorCSAgYWxsX2l0ZXJfc3RtdF9zaW1wbGUKKy8qCXwgYWxsX2l0ZXJfc3RtdF93aXRoX2RlY2wgKi8KKwk7CisKK2FsbF9pdGVyX3N0bXRfc2ltcGxlOgorCSAgRk9SICcoJyBwcmltYXJ5ICcpJyAKKwkgIHsKKwkgICAgLyogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgYWN0aW9uIGlzICAqLworCSAgICAvKiAgICAgIDEgaWYgZXZlcnl0aGluZyBpcyBPSyAqLyAKKwkgICAgLyogICAgICAwIGluIGNhc2Ugb2YgZXJyb3Igb3IgYWxyZWFkeSBib3VuZCBpdGVyYXRvciAqLworCisJICAgICQ8aXR5cGU+JCA9IDA7CisJICAgIGlmIChUUkVFX0NPREUgKCQzKSAhPSBWQVJfREVDTCkKKwkgICAgICBlcnJvciAoImludmFsaWQgYGZvciAoSVRFUkFUT1IpJyBzeW50YXgiKTsKKwkgICAgZWxzZSBpZiAoISBJVEVSQVRPUl9QICgkMykpCisJICAgICAgZXJyb3IgKCJgJXMnIGlzIG5vdCBhbiBpdGVyYXRvciIsCisJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKCQzKSkpOworCSAgICBlbHNlIGlmIChJVEVSQVRPUl9CT1VORF9QICgkMykpCisJICAgICAgZXJyb3IgKCJgZm9yICglcyknIGluc2lkZSBleHBhbnNpb24gb2Ygc2FtZSBpdGVyYXRvciIsCisJCSAgICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKCQzKSkpOworCSAgICBlbHNlCisJICAgICAgeworCQkkPGl0eXBlPiQgPSAxOworCQlpdGVyYXRvcl9mb3JfbG9vcF9zdGFydCAoJDMpOworCSAgICAgIH0KKwkgIH0KKwkgIGxpbmVub19sYWJlbGVkX3N0bXQKKwkgIHsKKwkgICAgaWYgKCQ8aXR5cGU+NSkKKwkgICAgICBpdGVyYXRvcl9mb3JfbG9vcF9lbmQgKCQzKTsKKwkgIH0KKworLyogIFRoaXMgcmVhbGx5IHNob3VsZCBhbGxvdyBhbnkga2luZCBvZiBkZWNsYXJhdGlvbiwKKyAgICBmb3IgZ2VuZXJhbGl0eS4gIEZpeCBpdCBiZWZvcmUgdHVybmluZyBpdCBiYWNrIG9uLgorCithbGxfaXRlcl9zdG10X3dpdGhfZGVjbDoKKwkgIEZPUiAnKCcgSVRFUkFUT1IgcHVzaGxldmVsIHNldHNwZWNzIGl0ZXJhdG9yX3NwZWMgJyknIAorCSAgeworKi8JICAgIC8qIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGFjdGlvbiBpcyAgKi8KKwkgICAgLyogICAgICAxIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgKi8gCisJICAgIC8qICAgICAgMCBpbiBjYXNlIG9mIGVycm9yIG9yIGFscmVhZHkgYm91bmQgaXRlcmF0b3IgKi8KKy8qCisJICAgIGl0ZXJhdG9yX2Zvcl9sb29wX3N0YXJ0ICgkNik7CisJICB9CisJICBsaW5lbm9fbGFiZWxlZF9zdG10CisJICB7CisJICAgIGl0ZXJhdG9yX2Zvcl9sb29wX2VuZCAoJDYpOworCSAgICBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7CisJICAgIGV4cGFuZF9lbmRfYmluZGluZ3MgKGdldGRlY2xzICgpLCAxLCAwKTsKKwkgICAgJDx0dHlwZT4kID0gcG9wbGV2ZWwgKDEsIDEsIDApOworCSAgICBpZiAoeXljaGFyID09IENPTlNUQU5UIHx8IHl5Y2hhciA9PSBTVFJJTkcpCisJICAgICAgcG9wX21vbWVudGFyeV9ub2ZyZWUgKCk7CisJICAgIGVsc2UKKwkgICAgICBwb3BfbW9tZW50YXJ5ICgpOwkgICAgCisJICB9CisqLworCisvKiBBbnkga2luZCBvZiBsYWJlbCwgaW5jbHVkaW5nIGp1bXAgbGFiZWxzIGFuZCBjYXNlIGxhYmVscy4KKyAgIEFOU0kgQyBhY2NlcHRzIGxhYmVscyBvbmx5IGJlZm9yZSBzdGF0ZW1lbnRzLCBidXQgd2UgYWxsb3cgdGhlbQorICAgYWxzbyBhdCB0aGUgZW5kIG9mIGEgY29tcG91bmQgc3RhdGVtZW50LiAgKi8KKworbGFiZWw6CSAgQ0FTRSBleHByX25vX2NvbW1hcyAnOicKKwkJeyByZWdpc3RlciB0cmVlIHZhbHVlID0gY2hlY2tfY2FzZV92YWx1ZSAoJDIpOworCQkgIHJlZ2lzdGVyIHRyZWUgbGFiZWwKKwkJICAgID0gYnVpbGRfZGVjbCAoTEFCRUxfREVDTCwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworCisJCSAgc3RtdF9jb3VudCsrOworCisJCSAgaWYgKHZhbHVlICE9IGVycm9yX21hcmtfbm9kZSkKKwkJICAgIHsKKwkJICAgICAgdHJlZSBkdXBsaWNhdGU7CisJCSAgICAgIGludCBzdWNjZXNzID0gcHVzaGNhc2UgKHZhbHVlLCBjb252ZXJ0X2FuZF9jaGVjaywKKwkJCQkJICAgICAgbGFiZWwsICZkdXBsaWNhdGUpOworCQkgICAgICBpZiAoc3VjY2VzcyA9PSAxKQorCQkJZXJyb3IgKCJjYXNlIGxhYmVsIG5vdCB3aXRoaW4gYSBzd2l0Y2ggc3RhdGVtZW50Iik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMikKKwkJCXsKKwkJCSAgZXJyb3IgKCJkdXBsaWNhdGUgY2FzZSB2YWx1ZSIpOworCQkJICBlcnJvcl93aXRoX2RlY2wgKGR1cGxpY2F0ZSwgInRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IGZvciB0aGF0IHZhbHVlIik7CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMykKKwkJCXdhcm5pbmcgKCJjYXNlIHZhbHVlIG91dCBvZiByYW5nZSIpOworCQkgICAgICBlbHNlIGlmIChzdWNjZXNzID09IDUpCisJCQllcnJvciAoImNhc2UgbGFiZWwgd2l0aGluIHNjb3BlIG9mIGNsZWFudXAgb3IgdmFyaWFibGUgYXJyYXkiKTsKKwkJICAgIH0KKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCXwgQ0FTRSBleHByX25vX2NvbW1hcyBFTExJUFNJUyBleHByX25vX2NvbW1hcyAnOicKKwkJeyByZWdpc3RlciB0cmVlIHZhbHVlMSA9IGNoZWNrX2Nhc2VfdmFsdWUgKCQyKTsKKwkJICByZWdpc3RlciB0cmVlIHZhbHVlMiA9IGNoZWNrX2Nhc2VfdmFsdWUgKCQ0KTsKKwkJICByZWdpc3RlciB0cmVlIGxhYmVsCisJCSAgICA9IGJ1aWxkX2RlY2wgKExBQkVMX0RFQ0wsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBjYXNlIHJhbmdlcyIpOworCQkgIHN0bXRfY291bnQrKzsKKworCQkgIGlmICh2YWx1ZTEgIT0gZXJyb3JfbWFya19ub2RlICYmIHZhbHVlMiAhPSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICB7CisJCSAgICAgIHRyZWUgZHVwbGljYXRlOworCQkgICAgICBpbnQgc3VjY2VzcyA9IHB1c2hjYXNlX3JhbmdlICh2YWx1ZTEsIHZhbHVlMiwKKwkJCQkJCSAgICBjb252ZXJ0X2FuZF9jaGVjaywgbGFiZWwsCisJCQkJCQkgICAgJmR1cGxpY2F0ZSk7CisJCSAgICAgIGlmIChzdWNjZXNzID09IDEpCisJCQllcnJvciAoImNhc2UgbGFiZWwgbm90IHdpdGhpbiBhIHN3aXRjaCBzdGF0ZW1lbnQiKTsKKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSAyKQorCQkJeworCQkJICBlcnJvciAoImR1cGxpY2F0ZSBjYXNlIHZhbHVlIik7CisJCQkgIGVycm9yX3dpdGhfZGVjbCAoZHVwbGljYXRlLCAidGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgZm9yIHRoYXQgdmFsdWUiKTsKKwkJCX0KKwkJICAgICAgZWxzZSBpZiAoc3VjY2VzcyA9PSAzKQorCQkJd2FybmluZyAoImNhc2UgdmFsdWUgb3V0IG9mIHJhbmdlIik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gNCkKKwkJCXdhcm5pbmcgKCJlbXB0eSBjYXNlIHJhbmdlIik7CisJCSAgICAgIGVsc2UgaWYgKHN1Y2Nlc3MgPT0gNSkKKwkJCWVycm9yICgiY2FzZSBsYWJlbCB3aXRoaW4gc2NvcGUgb2YgY2xlYW51cCBvciB2YXJpYWJsZSBhcnJheSIpOworCQkgICAgfQorCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyB9CisJfCBERUZBVUxUICc6JworCQl7CisJCSAgdHJlZSBkdXBsaWNhdGU7CisJCSAgcmVnaXN0ZXIgdHJlZSBsYWJlbAorCQkgICAgPSBidWlsZF9kZWNsIChMQUJFTF9ERUNMLCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCSAgaW50IHN1Y2Nlc3MgPSBwdXNoY2FzZSAoTlVMTF9UUkVFLCAwLCBsYWJlbCwgJmR1cGxpY2F0ZSk7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGlmIChzdWNjZXNzID09IDEpCisJCSAgICBlcnJvciAoImRlZmF1bHQgbGFiZWwgbm90IHdpdGhpbiBhIHN3aXRjaCBzdGF0ZW1lbnQiKTsKKwkJICBlbHNlIGlmIChzdWNjZXNzID09IDIpCisJCSAgICB7CisJCSAgICAgIGVycm9yICgibXVsdGlwbGUgZGVmYXVsdCBsYWJlbHMgaW4gb25lIHN3aXRjaCIpOworCQkgICAgICBlcnJvcl93aXRoX2RlY2wgKGR1cGxpY2F0ZSwgInRoaXMgaXMgdGhlIGZpcnN0IGRlZmF1bHQgbGFiZWwiKTsKKwkJICAgIH0KKwkJICBwb3NpdGlvbl9hZnRlcl93aGl0ZV9zcGFjZSAoKTsgfQorCXwgaWRlbnRpZmllciAnOicKKwkJeyB0cmVlIGxhYmVsID0gZGVmaW5lX2xhYmVsIChpbnB1dF9maWxlbmFtZSwgbGluZW5vLCAkMSk7CisJCSAgc3RtdF9jb3VudCsrOworCQkgIGVtaXRfbm9wICgpOworCQkgIGlmIChsYWJlbCkKKwkJICAgIGV4cGFuZF9sYWJlbCAobGFiZWwpOworCQkgIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICgpOyB9CisJOworCisvKiBFaXRoZXIgYSB0eXBlLXF1YWxpZmllciBvciBub3RoaW5nLiAgRmlyc3QgdGhpbmcgaW4gYW4gYGFzbScgc3RhdGVtZW50LiAgKi8KKworbWF5YmVfdHlwZV9xdWFsOgorCS8qIGVtcHR5ICovCisJCXsgZW1pdF9saW5lX25vdGUgKGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOworCQkgICQkID0gTlVMTF9UUkVFOyB9CisJfCBUWVBFX1FVQUwKKwkJeyBlbWl0X2xpbmVfbm90ZSAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubyk7IH0KKwk7CisKK3hleHByOgorCS8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGV4cHIKKwk7CisKKy8qIFRoZXNlIGFyZSB0aGUgb3BlcmFuZHMgb3RoZXIgdGhhbiB0aGUgZmlyc3Qgc3RyaW5nIGFuZCBjb2xvbgorICAgaW4gIGFzbSAoImFkZGV4dGVuZCAlMiwlMSI6ICI9ZG0iICh4KSwgIjAiICh5KSwgImciICgqeCkpICAqLworYXNtX29wZXJhbmRzOiAvKiBlbXB0eSAqLworCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJfCBub25udWxsX2FzbV9vcGVyYW5kcworCTsKKworbm9ubnVsbF9hc21fb3BlcmFuZHM6CisJICBhc21fb3BlcmFuZAorCXwgbm9ubnVsbF9hc21fb3BlcmFuZHMgJywnIGFzbV9vcGVyYW5kCisJCXsgJCQgPSBjaGFpbm9uICgkMSwgJDMpOyB9CisJOworCithc21fb3BlcmFuZDoKKwkgIFNUUklORyAnKCcgZXhwciAnKScKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoJDEsICQzKTsgfQorCTsKKworYXNtX2Nsb2JiZXJzOgorCSAgc3RyaW5nCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgY29tYmluZV9zdHJpbmdzICgkMSksIE5VTExfVFJFRSk7IH0KKwl8IGFzbV9jbG9iYmVycyAnLCcgc3RyaW5nCisJCXsgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgY29tYmluZV9zdHJpbmdzICgkMyksICQxKTsgfQorCTsKKwwKKy8qIFRoaXMgaXMgd2hhdCBhcHBlYXJzIGluc2lkZSB0aGUgcGFyZW5zIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRvci4KKyAgIEl0cyB2YWx1ZSBpcyBhIGxpc3Qgb2YgLi4uX1RZUEUgbm9kZXMuICAqLworcGFybWxpc3Q6CisJCXsgcHVzaGxldmVsICgwKTsKKwkJICBjbGVhcl9wYXJtX29yZGVyICgpOworCQkgIGRlY2xhcmVfcGFybV9sZXZlbCAoMCk7IH0KKwkgIHBhcm1saXN0XzEKKwkJeyAkJCA9ICQyOworCQkgIHBhcm1saXN0X3RhZ3Nfd2FybmluZyAoKTsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7IH0KKwk7CisKK3Bhcm1saXN0XzE6CisJICBwYXJtbGlzdF8yICcpJworCXwgcGFybXMgJzsnCisJCXsgdHJlZSBwYXJtOworCQkgIGlmIChwZWRhbnRpYykKKwkJICAgIHBlZHdhcm4gKCJBTlNJIEMgZm9yYmlkcyBmb3J3YXJkIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMiKTsKKwkJICAvKiBNYXJrIHRoZSBmb3J3YXJkIGRlY2xzIGFzIHN1Y2guICAqLworCQkgIGZvciAocGFybSA9IGdldGRlY2xzICgpOyBwYXJtOyBwYXJtID0gVFJFRV9DSEFJTiAocGFybSkpCisJCSAgICBUUkVFX0FTTV9XUklUVEVOIChwYXJtKSA9IDE7CisJCSAgY2xlYXJfcGFybV9vcmRlciAoKTsgfQorCSAgcGFybWxpc3RfMQorCQl7ICQkID0gJDQ7IH0KKwl8IGVycm9yICcpJworCQl7ICQkID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsgfQorCTsKKworLyogVGhpcyBpcyB3aGF0IGFwcGVhcnMgaW5zaWRlIHRoZSBwYXJlbnMgaW4gYSBmdW5jdGlvbiBkZWNsYXJhdG9yLgorICAgSXMgdmFsdWUgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIGZvcm1hdCB0aGF0IGdyb2tkZWNsYXJhdG9yIGV4cGVjdHMuICAqLworcGFybWxpc3RfMjogIC8qIGVtcHR5ICovCisJCXsgJCQgPSBnZXRfcGFybV9pbmZvICgwKTsgfQorCXwgRUxMSVBTSVMKKwkJeyAkJCA9IGdldF9wYXJtX2luZm8gKDApOworCQkgIC8qIEdjYyB1c2VkIHRvIGFsbG93IHRoaXMgYXMgYW4gZXh0ZW5zaW9uLiAgSG93ZXZlciwgaXQgZG9lcworCQkgICAgIG5vdCB3b3JrIGZvciBhbGwgdGFyZ2V0cywgYW5kIHRodXMgaGFzIGJlZW4gZGlzYWJsZWQuCisJCSAgICAgQWxzbywgc2luY2UgZnVuYyAoLi4uKSBhbmQgZnVuYyAoKSBhcmUgaW5kaXN0aW5ndWlzaGFibGUsCisJCSAgICAgaXQgY2F1c2VkIHByb2JsZW1zIHdpdGggdGhlIGNvZGUgaW4gZXhwYW5kX2J1aWx0aW4gd2hpY2gKKwkJICAgICB0cmllcyB0byB2ZXJpZnkgdGhhdCBCVUlMVF9JTl9ORVhUX0FSRyBpcyBiZWluZyB1c2VkCisJCSAgICAgY29ycmVjdGx5LiAgKi8KKwkJICBlcnJvciAoIkFOU0kgQyByZXF1aXJlcyBhIG5hbWVkIGFyZ3VtZW50IGJlZm9yZSBgLi4uJyIpOworCQl9CisJfCBwYXJtcworCQl7ICQkID0gZ2V0X3Bhcm1faW5mbyAoMSk7IH0KKwl8IHBhcm1zICcsJyBFTExJUFNJUworCQl7ICQkID0gZ2V0X3Bhcm1faW5mbyAoMCk7IH0KKwk7CisKK3Bhcm1zOgorCXBhcm0KKwkJeyBwdXNoX3Bhcm1fZGVjbCAoJDEpOyB9CisJfCBwYXJtcyAnLCcgcGFybQorCQl7IHB1c2hfcGFybV9kZWNsICgkMyk7IH0KKwk7CisKKy8qIEEgc2luZ2xlIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBvciBwYXJhbWV0ZXIgdHlwZSBuYW1lLAorICAgYXMgZm91bmQgaW4gYSBwYXJtbGlzdC4gICovCitwYXJtOgorCSAgdHlwZWRfZGVjbHNwZWNzIHNldHNwZWNzIHBhcm1fZGVjbGFyYXRvciBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgJDMpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSAkNCkpOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCB0eXBlZF9kZWNsc3BlY3Mgc2V0c3BlY3Mgbm90eXBlX2RlY2xhcmF0b3IgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJICQzKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgJDQpKTsgCisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IHR5cGVkX2RlY2xzcGVjcyBzZXRzcGVjcyBhYnNkY2wgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJICQzKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgJDQpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgZGVjbG1vZHMgc2V0c3BlY3Mgbm90eXBlX2RlY2xhcmF0b3IgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJICQzKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgJDQpKTsKKwkJICBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgIH0KKworCXwgZGVjbG1vZHMgc2V0c3BlY3MgYWJzZGNsIG1heWJlX2F0dHJpYnV0ZQorCQl7ICQkID0gYnVpbGRfdHJlZV9saXN0IChidWlsZF90cmVlX2xpc3QgKGN1cnJlbnRfZGVjbHNwZWNzLAorCQkJCQkJCSAkMyksCisJCQkJCWJ1aWxkX3RyZWVfbGlzdCAocHJlZml4X2F0dHJpYnV0ZXMsCisJCQkJCQkJICQ0KSk7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7ICB9CisJOworCisvKiBUaGlzIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uCisgICB3aGVyZSBlaXRoZXIgYSBwYXJtbGlzdCBvciBhbiBpZGVudGlmaWVyIGxpc3QgaXMgb2suCisgICBJdHMgdmFsdWUgaXMgYSBsaXN0IG9mIC4uLl9UWVBFIG5vZGVzIG9yIGEgbGlzdCBvZiBpZGVudGlmaWVycy4gICovCitwYXJtbGlzdF9vcl9pZGVudGlmaWVyczoKKwkJeyBwdXNobGV2ZWwgKDApOworCQkgIGNsZWFyX3Bhcm1fb3JkZXIgKCk7CisJCSAgZGVjbGFyZV9wYXJtX2xldmVsICgxKTsgfQorCSAgcGFybWxpc3Rfb3JfaWRlbnRpZmllcnNfMQorCQl7ICQkID0gJDI7CisJCSAgcGFybWxpc3RfdGFnc193YXJuaW5nICgpOworCQkgIHBvcGxldmVsICgwLCAwLCAwKTsgfQorCTsKKworcGFybWxpc3Rfb3JfaWRlbnRpZmllcnNfMToKKwkgIHBhcm1saXN0XzEKKwl8IGlkZW50aWZpZXJzICcpJworCQl7IHRyZWUgdDsKKwkJICBmb3IgKHQgPSAkMTsgdDsgdCA9IFRSRUVfQ0hBSU4gKHQpKQorCQkgICAgaWYgKFRSRUVfVkFMVUUgKHQpID09IE5VTExfVFJFRSkKKwkJICAgICAgZXJyb3IgKCJgLi4uJyBpbiBvbGQtc3R5bGUgaWRlbnRpZmllciBsaXN0Iik7CisJCSAgJCQgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgTlVMTF9UUkVFLCAkMSk7IH0KKwk7CisKKy8qIEEgbm9uZW1wdHkgbGlzdCBvZiBpZGVudGlmaWVycy4gICovCitpZGVudGlmaWVyczoKKwlJREVOVElGSUVSCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDEpOyB9CisJfCBpZGVudGlmaWVycyAnLCcgSURFTlRJRklFUgorCQl7ICQkID0gY2hhaW5vbiAoJDEsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMykpOyB9CisJOworCisvKiBBIG5vbmVtcHR5IGxpc3Qgb2YgaWRlbnRpZmllcnMsIGluY2x1ZGluZyB0eXBlbmFtZXMuICAqLworaWRlbnRpZmllcnNfb3JfdHlwZW5hbWVzOgorCWlkZW50aWZpZXIKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMSk7IH0KKwl8IGlkZW50aWZpZXJzX29yX3R5cGVuYW1lcyAnLCcgaWRlbnRpZmllcgorCQl7ICQkID0gY2hhaW5vbiAoJDEsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCAkMykpOyB9CisJOworCitleHRlbnNpb246CisJRVhURU5TSU9OCisJCXsgJDxpdHlwZT4kID0gcGVkYW50aWM7CisJCSAgcGVkYW50aWMgPSAwOyB9CisJOworDAorLyogT2JqZWN0aXZlLUMgcHJvZHVjdGlvbnMuICAqLworCitvYmpjZGVmOgorCSAgY2xhc3NkZWYKKwl8IGNsYXNzZGVjbAorCXwgYWxpYXNkZWNsCisJfCBwcm90b2NvbGRlZgorCXwgbWV0aG9kZGVmCisJfCBFTkQKKwkJeworCQkgIGlmIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIHsKKwkJICAgICAgZmluaXNoX2NsYXNzIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQpOworCQkgICAgICBvYmpjX2l2YXJfY2hhaW4gPSBOVUxMX1RSRUU7CisJCSAgICAgIG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCA9IE5VTExfVFJFRTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB3YXJuaW5nICgiYEBlbmQnIG11c3QgYXBwZWFyIGluIGFuIGltcGxlbWVudGF0aW9uIGNvbnRleHQiKTsKKwkJfQorCTsKKworLyogQSBub25lbXB0eSBsaXN0IG9mIGlkZW50aWZpZXJzLiAgKi8KK2lkZW50aWZpZXJfbGlzdDoKKwlpZGVudGlmaWVyCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDEpOyB9CisJfCBpZGVudGlmaWVyX2xpc3QgJywnIGlkZW50aWZpZXIKKwkJeyAkJCA9IGNoYWlub24gKCQxLCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDMpKTsgfQorCTsKKworY2xhc3NkZWNsOgorCSAgQ0xBU1MgaWRlbnRpZmllcl9saXN0ICc7JworCQl7CisJCSAgb2JqY19kZWNsYXJlX2NsYXNzICgkMik7CisJCX0KKworYWxpYXNkZWNsOgorCSAgQUxJQVMgaWRlbnRpZmllciBpZGVudGlmaWVyICc7JworCQl7CisJCSAgb2JqY19kZWNsYXJlX2FsaWFzICgkMiwgJDMpOworCQl9CisKK2NsYXNzZGVmOgorCSAgSU5URVJGQUNFIGlkZW50aWZpZXIgcHJvdG9jb2xyZWZzICd7JworCQl7CisJCSAgb2JqY19pbnRlcmZhY2VfY29udGV4dCA9IG9iamNfaXZhcl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTlRFUkZBQ0VfVFlQRSwgJDIsIE5VTExfVFJFRSwgJDMpOworICAgICAgICAgICAgICAgICAgb2JqY19wdWJsaWNfZmxhZyA9IDA7CisJCX0KKwkgIGl2YXJfZGVjbF9saXN0ICd9JworCQl7CisgICAgICAgICAgICAgICAgICBjb250aW51ZV9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCX0KKwkgIG1ldGhvZHByb3RvbGlzdAorCSAgRU5ECisJCXsKKwkJICBmaW5pc2hfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCX0KKworCXwgSU5URVJGQUNFIGlkZW50aWZpZXIgcHJvdG9jb2xyZWZzCisJCXsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTlRFUkZBQ0VfVFlQRSwgJDIsIE5VTExfVFJFRSwgJDMpOworICAgICAgICAgICAgICAgICAgY29udGludWVfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQl9CisJICBtZXRob2Rwcm90b2xpc3QKKwkgIEVORAorCQl7CisJCSAgZmluaXNoX2NsYXNzIChvYmpjX2ludGVyZmFjZV9jb250ZXh0KTsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0ID0gTlVMTF9UUkVFOworCQl9CisKKwl8IElOVEVSRkFDRSBpZGVudGlmaWVyICc6JyBpZGVudGlmaWVyIHByb3RvY29scmVmcyAneycKKwkJeworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBvYmpjX2l2YXJfY29udGV4dAorCQkgICAgPSBzdGFydF9jbGFzcyAoQ0xBU1NfSU5URVJGQUNFX1RZUEUsICQyLCAkNCwgJDUpOworICAgICAgICAgICAgICAgICAgb2JqY19wdWJsaWNfZmxhZyA9IDA7CisJCX0KKwkgIGl2YXJfZGVjbF9saXN0ICd9JworCQl7CisgICAgICAgICAgICAgICAgICBjb250aW51ZV9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCX0KKwkgIG1ldGhvZHByb3RvbGlzdAorCSAgRU5ECisJCXsKKwkJICBmaW5pc2hfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCX0KKworCXwgSU5URVJGQUNFIGlkZW50aWZpZXIgJzonIGlkZW50aWZpZXIgcHJvdG9jb2xyZWZzCisJCXsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTlRFUkZBQ0VfVFlQRSwgJDIsICQ0LCAkNSk7CisgICAgICAgICAgICAgICAgICBjb250aW51ZV9jbGFzcyAob2JqY19pbnRlcmZhY2VfY29udGV4dCk7CisJCX0KKwkgIG1ldGhvZHByb3RvbGlzdAorCSAgRU5ECisJCXsKKwkJICBmaW5pc2hfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQkgIG9iamNfaW50ZXJmYWNlX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCX0KKworCXwgSU1QTEVNRU5UQVRJT04gaWRlbnRpZmllciAneycKKwkJeworCQkgIG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCA9IG9iamNfaXZhcl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFLCAkMiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICAgICAgICAgICAgICAgICAgb2JqY19wdWJsaWNfZmxhZyA9IDA7CisJCX0KKwkgIGl2YXJfZGVjbF9saXN0ICd9JworCQl7CisgICAgICAgICAgICAgICAgICBvYmpjX2l2YXJfY2hhaW4KKwkJICAgID0gY29udGludWVfY2xhc3MgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCk7CisJCX0KKworCXwgSU1QTEVNRU5UQVRJT04gaWRlbnRpZmllcgorCQl7CisJCSAgb2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFLCAkMiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICAgICAgICAgICAgICAgICAgb2JqY19pdmFyX2NoYWluCisJCSAgICA9IGNvbnRpbnVlX2NsYXNzIChvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQpOworCQl9CisKKwl8IElNUExFTUVOVEFUSU9OIGlkZW50aWZpZXIgJzonIGlkZW50aWZpZXIgJ3snCisJCXsKKwkJICBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQgPSBvYmpjX2l2YXJfY29udGV4dAorCQkgICAgPSBzdGFydF9jbGFzcyAoQ0xBU1NfSU1QTEVNRU5UQVRJT05fVFlQRSwgJDIsICQ0LCBOVUxMX1RSRUUpOworICAgICAgICAgICAgICAgICAgb2JqY19wdWJsaWNfZmxhZyA9IDA7CisJCX0KKwkgIGl2YXJfZGVjbF9saXN0ICd9JworCQl7CisgICAgICAgICAgICAgICAgICBvYmpjX2l2YXJfY2hhaW4KKwkJICAgID0gY29udGludWVfY2xhc3MgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCk7CisJCX0KKworCXwgSU1QTEVNRU5UQVRJT04gaWRlbnRpZmllciAnOicgaWRlbnRpZmllcgorCQl7CisJCSAgb2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0CisJCSAgICA9IHN0YXJ0X2NsYXNzIChDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFLCAkMiwgJDQsIE5VTExfVFJFRSk7CisgICAgICAgICAgICAgICAgICBvYmpjX2l2YXJfY2hhaW4KKwkJICAgID0gY29udGludWVfY2xhc3MgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCk7CisJCX0KKworCXwgSU5URVJGQUNFIGlkZW50aWZpZXIgJygnIGlkZW50aWZpZXIgJyknIHByb3RvY29scmVmcworCQl7CisJCSAgb2JqY19pbnRlcmZhY2VfY29udGV4dAorCQkgICAgPSBzdGFydF9jbGFzcyAoQ0FURUdPUllfSU5URVJGQUNFX1RZUEUsICQyLCAkNCwgJDYpOworICAgICAgICAgICAgICAgICAgY29udGludWVfY2xhc3MgKG9iamNfaW50ZXJmYWNlX2NvbnRleHQpOworCQl9CisJICBtZXRob2Rwcm90b2xpc3QKKwkgIEVORAorCQl7CisJCSAgZmluaXNoX2NsYXNzIChvYmpjX2ludGVyZmFjZV9jb250ZXh0KTsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0ID0gTlVMTF9UUkVFOworCQl9CisKKwl8IElNUExFTUVOVEFUSU9OIGlkZW50aWZpZXIgJygnIGlkZW50aWZpZXIgJyknCisJCXsKKwkJICBvYmpjX2ltcGxlbWVudGF0aW9uX2NvbnRleHQKKwkJICAgID0gc3RhcnRfY2xhc3MgKENBVEVHT1JZX0lNUExFTUVOVEFUSU9OX1RZUEUsICQyLCAkNCwgTlVMTF9UUkVFKTsKKyAgICAgICAgICAgICAgICAgIG9iamNfaXZhcl9jaGFpbgorCQkgICAgPSBjb250aW51ZV9jbGFzcyAob2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0KTsKKwkJfQorCTsKKworcHJvdG9jb2xkZWY6CisJICBQUk9UT0NPTCBpZGVudGlmaWVyIHByb3RvY29scmVmcworCQl7CisJCSAgcmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyAoKTsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0CisJCSAgICA9IHN0YXJ0X3Byb3RvY29sKFBST1RPQ09MX0lOVEVSRkFDRV9UWVBFLCAkMiwgJDMpOworCQl9CisJICBtZXRob2Rwcm90b2xpc3QgRU5ECisJCXsKKwkJICBmb3JnZXRfcHJvdG9jb2xfcXVhbGlmaWVycygpOworCQkgIGZpbmlzaF9wcm90b2NvbChvYmpjX2ludGVyZmFjZV9jb250ZXh0KTsKKwkJICBvYmpjX2ludGVyZmFjZV9jb250ZXh0ID0gTlVMTF9UUkVFOworCQl9CisJOworCitwcm90b2NvbHJlZnM6CisJICAvKiBlbXB0eSAqLworCQl7CisJCSAgJCQgPSBOVUxMX1RSRUU7CisJCX0KKwl8IG5vbl9lbXB0eV9wcm90b2NvbHJlZnMKKwk7CisKK25vbl9lbXB0eV9wcm90b2NvbHJlZnM6CisJICBBUklUSENPTVBBUkUgaWRlbnRpZmllcl9saXN0IEFSSVRIQ09NUEFSRQorCQl7CisJCSAgaWYgKCQxID09IExUX0VYUFIgJiYgJDMgPT0gR1RfRVhQUikKKwkJICAgICQkID0gJDI7CisJCSAgZWxzZQorCQkgICAgWVlFUlJPUjE7CisJCX0KKwk7CisKK2l2YXJfZGVjbF9saXN0OgorICAgICAgICAgIGl2YXJfZGVjbF9saXN0IHZpc2liaWxpdHlfc3BlYyBpdmFyX2RlY2xzCisgICAgICAgIHwgaXZhcl9kZWNscworICAgICAgICA7CisKK3Zpc2liaWxpdHlfc3BlYzoKKwkgIFBSSVZBVEUgeyBvYmpjX3B1YmxpY19mbGFnID0gMjsgfQorCXwgUFJPVEVDVEVEIHsgb2JqY19wdWJsaWNfZmxhZyA9IDA7IH0KKwl8IFBVQkxJQyB7IG9iamNfcHVibGljX2ZsYWcgPSAxOyB9CisJOworCitpdmFyX2RlY2xzOgorICAgICAgICAgIC8qIGVtcHR5ICovCisJCXsKKyAgICAgICAgICAgICAgICAgICQkID0gTlVMTF9UUkVFOworICAgICAgICAgICAgICAgIH0KKwl8IGl2YXJfZGVjbHMgaXZhcl9kZWNsICc7JworCXwgaXZhcl9kZWNscyAnOycKKwkJeworICAgICAgICAgICAgICAgICAgaWYgKHBlZGFudGljKQorCQkgICAgcGVkd2FybiAoImV4dHJhIHNlbWljb2xvbiBpbiBzdHJ1Y3Qgb3IgdW5pb24gc3BlY2lmaWVkIik7CisgICAgICAgICAgICAgICAgfQorCTsKKworCisvKiBUaGVyZSBpcyBhIHNoaWZ0LXJlZHVjZSBjb25mbGljdCBoZXJlLCBiZWNhdXNlIGBjb21wb25lbnRzJyBtYXkKKyAgIHN0YXJ0IHdpdGggYSBgdHlwZW5hbWUnLiAgSXQgaGFwcGVucyB0aGF0IHNoaWZ0aW5nICh0aGUgZGVmYXVsdCByZXNvbHV0aW9uKQorICAgZG9lcyB0aGUgcmlnaHQgdGhpbmcsIGJlY2F1c2UgaXQgdHJlYXRzIHRoZSBgdHlwZW5hbWUnIGFzIHBhcnQgb2YKKyAgIGEgYHR5cGVkX3R5cGVzcGVjcycuCisKKyAgIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBzYW1lIHRlY2huaXF1ZSB3b3VsZCBhbGxvdyB0aGUgZGlzdGluY3Rpb24KKyAgIGJldHdlZW4gYG5vdHlwZV9pbml0ZGVjbHMnIGFuZCBgaW5pdGRlY2xzJyB0byBiZSBlbGltaW5hdGVkLgorICAgQnV0IEkgYW0gYmVpbmcgY2F1dGlvdXMgYW5kIG5vdCB0cnlpbmcgaXQuICAqLworCitpdmFyX2RlY2w6CisJdHlwZWRfdHlwZXNwZWNzIHNldHNwZWNzIGl2YXJzCisJICAgICAgICB7ICQkID0gJDM7CisJCSAgY3VycmVudF9kZWNsc3BlY3MgPSBUUkVFX1ZBTFVFIChkZWNsc3BlY19zdGFjayk7CisJCSAgcHJlZml4X2F0dHJpYnV0ZXMgPSBUUkVFX1BVUlBPU0UgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBkZWNsc3BlY19zdGFjayA9IFRSRUVfQ0hBSU4gKGRlY2xzcGVjX3N0YWNrKTsKKwkJICByZXN1bWVfbW9tZW50YXJ5ICgkMik7IH0KKwl8IG5vbmVtcHR5X3R5cGVfcXVhbHMgc2V0c3BlY3MgaXZhcnMKKwkJeyAkJCA9ICQzOworCQkgIGN1cnJlbnRfZGVjbHNwZWNzID0gVFJFRV9WQUxVRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIHByZWZpeF9hdHRyaWJ1dGVzID0gVFJFRV9QVVJQT1NFIChkZWNsc3BlY19zdGFjayk7CisJCSAgZGVjbHNwZWNfc3RhY2sgPSBUUkVFX0NIQUlOIChkZWNsc3BlY19zdGFjayk7CisJCSAgcmVzdW1lX21vbWVudGFyeSAoJDIpOyB9CisJfCBlcnJvcgorCQl7ICQkID0gTlVMTF9UUkVFOyB9CisJOworCitpdmFyczoKKwkgIC8qIGVtcHR5ICovCisJCXsgJCQgPSBOVUxMX1RSRUU7IH0KKwl8IGl2YXJfZGVjbGFyYXRvcgorCXwgaXZhcnMgJywnIGl2YXJfZGVjbGFyYXRvcgorCTsKKworaXZhcl9kZWNsYXJhdG9yOgorCSAgZGVjbGFyYXRvcgorCQl7CisJCSAgJCQgPSBhZGRfaW5zdGFuY2VfdmFyaWFibGUgKG9iamNfaXZhcl9jb250ZXh0LAorCQkJCQkgICAgICBvYmpjX3B1YmxpY19mbGFnLAorCQkJCQkgICAgICAkMSwgY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCSAgICAgIE5VTExfVFJFRSk7CisgICAgICAgICAgICAgICAgfQorCXwgZGVjbGFyYXRvciAnOicgZXhwcl9ub19jb21tYXMKKwkJeworCQkgICQkID0gYWRkX2luc3RhbmNlX3ZhcmlhYmxlIChvYmpjX2l2YXJfY29udGV4dCwKKwkJCQkJICAgICAgb2JqY19wdWJsaWNfZmxhZywKKwkJCQkJICAgICAgJDEsIGN1cnJlbnRfZGVjbHNwZWNzLCAkMyk7CisgICAgICAgICAgICAgICAgfQorCXwgJzonIGV4cHJfbm9fY29tbWFzCisJCXsKKwkJICAkJCA9IGFkZF9pbnN0YW5jZV92YXJpYWJsZSAob2JqY19pdmFyX2NvbnRleHQsCisJCQkJCSAgICAgIG9iamNfcHVibGljX2ZsYWcsCisJCQkJCSAgICAgIE5VTExfVFJFRSwKKwkJCQkJICAgICAgY3VycmVudF9kZWNsc3BlY3MsICQyKTsKKyAgICAgICAgICAgICAgICB9CisJOworCittZXRob2RkZWY6CisJICAnKycKKwkJeworCQkgIHJlbWVtYmVyX3Byb3RvY29sX3F1YWxpZmllcnMgKCk7CisJCSAgaWYgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCkKKwkJICAgIG9iamNfaW5oZXJpdF9jb2RlID0gQ0xBU1NfTUVUSE9EX0RFQ0w7CisgICAgICAgICAgICAgICAgICBlbHNlCisJCSAgICBmYXRhbCAoIm1ldGhvZCBkZWZpbml0aW9uIG5vdCBpbiBjbGFzcyBjb250ZXh0Iik7CisJCX0KKwkgIG1ldGhvZGRlY2wKKwkJeworCQkgIGZvcmdldF9wcm90b2NvbF9xdWFsaWZpZXJzICgpOworCQkgIGFkZF9jbGFzc19tZXRob2QgKG9iamNfaW1wbGVtZW50YXRpb25fY29udGV4dCwgJDMpOworCQkgIHN0YXJ0X21ldGhvZF9kZWYgKCQzKTsKKwkJICBvYmpjX21ldGhvZF9jb250ZXh0ID0gJDM7CisJCX0KKwkgIG9wdGFyZ2xpc3QKKwkJeworCQkgIGNvbnRpbnVlX21ldGhvZF9kZWYgKCk7CisJCX0KKwkgIGNvbXBzdG10X29yX2Vycm9yCisJCXsKKwkJICBmaW5pc2hfbWV0aG9kX2RlZiAoKTsKKwkJICBvYmpjX21ldGhvZF9jb250ZXh0ID0gTlVMTF9UUkVFOworCQl9CisKKwl8ICctJworCQl7CisJCSAgcmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyAoKTsKKwkJICBpZiAob2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0KQorCQkgICAgb2JqY19pbmhlcml0X2NvZGUgPSBJTlNUQU5DRV9NRVRIT0RfREVDTDsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgIGZhdGFsICgibWV0aG9kIGRlZmluaXRpb24gbm90IGluIGNsYXNzIGNvbnRleHQiKTsKKwkJfQorCSAgbWV0aG9kZGVjbAorCQl7CisJCSAgZm9yZ2V0X3Byb3RvY29sX3F1YWxpZmllcnMgKCk7CisJCSAgYWRkX2luc3RhbmNlX21ldGhvZCAob2JqY19pbXBsZW1lbnRhdGlvbl9jb250ZXh0LCAkMyk7CisJCSAgc3RhcnRfbWV0aG9kX2RlZiAoJDMpOworCQkgIG9iamNfbWV0aG9kX2NvbnRleHQgPSAkMzsKKwkJfQorCSAgb3B0YXJnbGlzdAorCQl7CisJCSAgY29udGludWVfbWV0aG9kX2RlZiAoKTsKKwkJfQorCSAgY29tcHN0bXRfb3JfZXJyb3IKKwkJeworCQkgIGZpbmlzaF9tZXRob2RfZGVmICgpOworCQkgIG9iamNfbWV0aG9kX2NvbnRleHQgPSBOVUxMX1RSRUU7CisJCX0KKwk7CisKKy8qIHRoZSByZWFzb24gZm9yIHRoZSBzdHJhbmdlIGFjdGlvbnMgaW4gdGhpcyBydWxlCisgaXMgc28gdGhhdCBub3R5cGVfaW5pdGRlY2xzIHdoZW4gcmVhY2hlZCB2aWEgZGF0YWRlZgorIGNhbiBmaW5kIGEgdmFsaWQgbGlzdCBvZiB0eXBlIGFuZCBzYyBzcGVjcyBpbiAkMC4gKi8KKworbWV0aG9kcHJvdG9saXN0OgorCSAgLyogZW1wdHkgICovCisJfCB7JDx0dHlwZT4kID0gTlVMTF9UUkVFOyB9IG1ldGhvZHByb3RvbGlzdDIKKwk7CisKK21ldGhvZHByb3RvbGlzdDI6CQkgLyogZWxpbWluYXRlcyBhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCAqLworCSAgIG1ldGhvZHByb3RvCisJfCAgZGF0YWRlZgorCXwgbWV0aG9kcHJvdG9saXN0MiBtZXRob2Rwcm90bworCXwgbWV0aG9kcHJvdG9saXN0MiB7JDx0dHlwZT4kID0gTlVMTF9UUkVFOyB9IGRhdGFkZWYKKwk7CisKK3NlbWlfb3JfZXJyb3I6CisJICAnOycKKwl8IGVycm9yCisJOworCittZXRob2Rwcm90bzoKKwkgICcrJworCQl7CisJCSAgb2JqY19pbmhlcml0X2NvZGUgPSBDTEFTU19NRVRIT0RfREVDTDsKKwkJfQorCSAgbWV0aG9kZGVjbAorCQl7CisJCSAgYWRkX2NsYXNzX21ldGhvZCAob2JqY19pbnRlcmZhY2VfY29udGV4dCwgJDMpOworCQl9CisJICBzZW1pX29yX2Vycm9yCisKKwl8ICctJworCQl7CisJCSAgb2JqY19pbmhlcml0X2NvZGUgPSBJTlNUQU5DRV9NRVRIT0RfREVDTDsKKwkJfQorCSAgbWV0aG9kZGVjbAorCQl7CisJCSAgYWRkX2luc3RhbmNlX21ldGhvZCAob2JqY19pbnRlcmZhY2VfY29udGV4dCwgJDMpOworCQl9CisJICBzZW1pX29yX2Vycm9yCisJOworCittZXRob2RkZWNsOgorCSAgJygnIHR5cGVuYW1lICcpJyB1bmFyeXNlbGVjdG9yCisJCXsKKwkJICAkJCA9IGJ1aWxkX21ldGhvZF9kZWNsIChvYmpjX2luaGVyaXRfY29kZSwgJDIsICQ0LCBOVUxMX1RSRUUpOworCQl9CisKKwl8IHVuYXJ5c2VsZWN0b3IKKwkJeworCQkgICQkID0gYnVpbGRfbWV0aG9kX2RlY2wgKG9iamNfaW5oZXJpdF9jb2RlLCBOVUxMX1RSRUUsICQxLCBOVUxMX1RSRUUpOworCQl9CisKKwl8ICcoJyB0eXBlbmFtZSAnKScga2V5d29yZHNlbGVjdG9yIG9wdHBhcm1saXN0CisJCXsKKwkJICAkJCA9IGJ1aWxkX21ldGhvZF9kZWNsIChvYmpjX2luaGVyaXRfY29kZSwgJDIsICQ0LCAkNSk7CisJCX0KKworCXwga2V5d29yZHNlbGVjdG9yIG9wdHBhcm1saXN0CisJCXsKKwkJICAkJCA9IGJ1aWxkX21ldGhvZF9kZWNsIChvYmpjX2luaGVyaXRfY29kZSwgTlVMTF9UUkVFLCAkMSwgJDIpOworCQl9CisJOworCisvKiAib3B0YXJnbGlzdCIgYXNzdW1lcyB0aGF0IHN0YXJ0X21ldGhvZF9kZWYgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuLi4KKyAgIGlmIGl0IGlzIG5vdCwgdGhlICJ4ZGVjbHMiIHdpbGwgbm90IGJlIHBsYWNlZCBpbiB0aGUgcHJvcGVyIHNjb3BlICovCisKK29wdGFyZ2xpc3Q6CisJICAvKiBlbXB0eSAqLworCXwgJzsnIG15eGRlY2xzCisJOworCisvKiB0byBnZXQgYXJvdW5kIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOiAiaW50IGZvbyAoaW50IGEpIGludCBiOyB7fSIgdGhhdAorICAgaXMgc3ludGhlc2l6ZWQgd2hlbiBwYXJzaW5nICItIGE6YSBiOmI7IGlkIGM7IGlkIGQ7IHsgLi4uIH0iICovCisKK215eGRlY2xzOgorCSAgLyogZW1wdHkgKi8KKwl8IG15ZGVjbHMKKwk7CisKK215ZGVjbHM6CisJbXlkZWNsCisJfCBlcnJzdG10CisJfCBteWRlY2xzIG15ZGVjbAorCXwgbXlkZWNsIGVycnN0bXQKKwk7CisKK215ZGVjbDoKKwl0eXBlZF9kZWNsc3BlY3Mgc2V0c3BlY3MgbXlwYXJtcyAnOycKKwkJeyBjdXJyZW50X2RlY2xzcGVjcyA9IFRSRUVfVkFMVUUgKGRlY2xzcGVjX3N0YWNrKTsKKwkJICBwcmVmaXhfYXR0cmlidXRlcyA9IFRSRUVfUFVSUE9TRSAoZGVjbHNwZWNfc3RhY2spOworCQkgIGRlY2xzcGVjX3N0YWNrID0gVFJFRV9DSEFJTiAoZGVjbHNwZWNfc3RhY2spOworCQkgIHJlc3VtZV9tb21lbnRhcnkgKCQyKTsgfQorCXwgdHlwZWRfZGVjbHNwZWNzICc7JworCQl7IHNoYWRvd190YWcgKCQxKTsgfQorCXwgZGVjbG1vZHMgJzsnCisJCXsgcGVkd2FybiAoImVtcHR5IGRlY2xhcmF0aW9uIik7IH0KKwk7CisKK215cGFybXM6CisJbXlwYXJtCisJCXsgcHVzaF9wYXJtX2RlY2wgKCQxKTsgfQorCXwgbXlwYXJtcyAnLCcgbXlwYXJtCisJCXsgcHVzaF9wYXJtX2RlY2wgKCQzKTsgfQorCTsKKworLyogQSBzaW5nbGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIG9yIHBhcmFtZXRlciB0eXBlIG5hbWUsCisgICBhcyBmb3VuZCBpbiBhIHBhcm1saXN0LiBET0VTIE5PVCBBTExPVyBBTiBJTklUSUFMSVpFUiBPUiBBU01TUEVDICovCisKK215cGFybToKKwkgIHBhcm1fZGVjbGFyYXRvciBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgJDEpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSAkMikpOyB9CisJfCBub3R5cGVfZGVjbGFyYXRvciBtYXliZV9hdHRyaWJ1dGUKKwkJeyAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoYnVpbGRfdHJlZV9saXN0IChjdXJyZW50X2RlY2xzcGVjcywKKwkJCQkJCQkgJDEpLAorCQkJCQlidWlsZF90cmVlX2xpc3QgKHByZWZpeF9hdHRyaWJ1dGVzLAorCQkJCQkJCSAkMikpOyB9CisJfCBhYnNkY2wgbWF5YmVfYXR0cmlidXRlCisJCXsgJCQgPSBidWlsZF90cmVlX2xpc3QgKGJ1aWxkX3RyZWVfbGlzdCAoY3VycmVudF9kZWNsc3BlY3MsCisJCQkJCQkJICQxKSwKKwkJCQkJYnVpbGRfdHJlZV9saXN0IChwcmVmaXhfYXR0cmlidXRlcywKKwkJCQkJCQkgJDIpKTsgfQorCTsKKworb3B0cGFybWxpc3Q6CisJICAvKiBlbXB0eSAqLworCQl7CisJICAgIAkgICQkID0gTlVMTF9UUkVFOworCQl9CisJfCAnLCcgRUxMSVBTSVMKKwkJeworCQkgIC8qIG9oIHdoYXQgYSBrbHVkZ2UhICovCisJCSAgJCQgPSAodHJlZSkxOworCQl9CisJfCAnLCcKKwkJeworCQkgIHB1c2hsZXZlbCAoMCk7CisJCX0KKwkgIHBhcm1saXN0XzIKKwkJeworCSAgCSAgLyogcmV0dXJucyBhIHRyZWUgbGlzdCBub2RlIGdlbmVyYXRlZCBieSBnZXRfcGFybV9pbmZvICovCisJCSAgJCQgPSAkMzsKKwkJICBwb3BsZXZlbCAoMCwgMCwgMCk7CisJCX0KKwk7CisKK3VuYXJ5c2VsZWN0b3I6CisJICBzZWxlY3RvcgorCTsKKwora2V5d29yZHNlbGVjdG9yOgorCSAga2V5d29yZGRlY2wKKworCXwga2V5d29yZHNlbGVjdG9yIGtleXdvcmRkZWNsCisJCXsKKwkJICAkJCA9IGNoYWlub24gKCQxLCAkMik7CisJCX0KKwk7CisKK3NlbGVjdG9yOgorCSAgSURFTlRJRklFUgorICAgICAgICB8IFRZUEVOQU1FCisgIAl8IE9CSkVDVE5BTUUKKwl8IHJlc2VydmVkd29yZHMKKwk7CisKK3Jlc2VydmVkd29yZHM6CisJICBFTlVNIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgU1RSVUNUIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgVU5JT04geyAkJCA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyB9CisJfCBJRiB7ICQkID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IH0KKwl8IEVMU0UgeyAkJCA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyB9CisJfCBXSElMRSB7ICQkID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IH0KKwl8IERPIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgRk9SIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgU1dJVENIIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgQ0FTRSB7ICQkID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IH0KKwl8IERFRkFVTFQgeyAkJCA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyB9CisJfCBCUkVBSyB7ICQkID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IH0KKwl8IENPTlRJTlVFIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgUkVUVVJOICB7ICQkID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IH0KKwl8IEdPVE8geyAkJCA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyB9CisJfCBBU01fS0VZV09SRCB7ICQkID0gZ2V0X2lkZW50aWZpZXIgKHRva2VuX2J1ZmZlcik7IH0KKyAgICAgICAgfCBTSVpFT0YgeyAkJCA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyB9CisJfCBUWVBFT0YgeyAkJCA9IGdldF9pZGVudGlmaWVyICh0b2tlbl9idWZmZXIpOyB9CisJfCBBTElHTk9GIHsgJCQgPSBnZXRfaWRlbnRpZmllciAodG9rZW5fYnVmZmVyKTsgfQorCXwgVFlQRVNQRUMgfCBUWVBFX1FVQUwKKwk7CisKK2tleXdvcmRkZWNsOgorCSAgc2VsZWN0b3IgJzonICcoJyB0eXBlbmFtZSAnKScgaWRlbnRpZmllcgorCQl7CisJCSAgJCQgPSBidWlsZF9rZXl3b3JkX2RlY2wgKCQxLCAkNCwgJDYpOworCQl9CisKKwl8IHNlbGVjdG9yICc6JyBpZGVudGlmaWVyCisJCXsKKwkJICAkJCA9IGJ1aWxkX2tleXdvcmRfZGVjbCAoJDEsIE5VTExfVFJFRSwgJDMpOworCQl9CisKKwl8ICc6JyAnKCcgdHlwZW5hbWUgJyknIGlkZW50aWZpZXIKKwkJeworCQkgICQkID0gYnVpbGRfa2V5d29yZF9kZWNsIChOVUxMX1RSRUUsICQzLCAkNSk7CisJCX0KKworCXwgJzonIGlkZW50aWZpZXIKKwkJeworCQkgICQkID0gYnVpbGRfa2V5d29yZF9kZWNsIChOVUxMX1RSRUUsIE5VTExfVFJFRSwgJDIpOworCQl9CisJOworCittZXNzYWdlYXJnczoKKwkgIHNlbGVjdG9yCisgICAgICAgIHwga2V5d29yZGFyZ2xpc3QKKwk7CisKK2tleXdvcmRhcmdsaXN0OgorCSAga2V5d29yZGFyZworCXwga2V5d29yZGFyZ2xpc3Qga2V5d29yZGFyZworCQl7CisJCSAgJCQgPSBjaGFpbm9uICgkMSwgJDIpOworCQl9CisJOworCisKK2tleXdvcmRleHByOgorCSAgbm9ubnVsbF9leHBybGlzdAorCQl7CisJCSAgaWYgKFRSRUVfQ0hBSU4gKCQxKSA9PSBOVUxMX1RSRUUpCisJCSAgICAvKiBqdXN0IHJldHVybiB0aGUgZXhwci4sIHJlbW92ZSBhIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisJCSAgICAkJCA9IFRSRUVfVkFMVUUgKCQxKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgIC8qIHdlIGhhdmUgYSBjb21tYSBleHByLiwgd2Ugd2lsbCBjb2xsYXBzZSBsYXRlciAqLworCQkgICAgJCQgPSAkMTsKKwkJfQorCTsKKwora2V5d29yZGFyZzoKKwkgIHNlbGVjdG9yICc6JyBrZXl3b3JkZXhwcgorCQl7CisJCSAgJCQgPSBidWlsZF90cmVlX2xpc3QgKCQxLCAkMyk7CisJCX0KKwl8ICc6JyBrZXl3b3JkZXhwcgorCQl7CisJCSAgJCQgPSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgJDIpOworCQl9CisJOworCityZWNlaXZlcjoKKwkgIGV4cHIKKwl8IENMQVNTTkFNRQorCQl7CisJCSAgJCQgPSBnZXRfY2xhc3NfcmVmZXJlbmNlICgkMSk7CisJCX0KKwk7CisKK29iamNtZXNzYWdlZXhwcjoKKwkgICdbJworCQl7IG9iamNfcmVjZWl2ZXJfY29udGV4dCA9IDE7IH0KKwkgIHJlY2VpdmVyCisJCXsgb2JqY19yZWNlaXZlcl9jb250ZXh0ID0gMDsgfQorCSAgbWVzc2FnZWFyZ3MgJ10nCisJCXsKKwkJICAkJCA9IGJ1aWxkX3RyZWVfbGlzdCAoJDMsICQ1KTsKKwkJfQorCTsKKworc2VsZWN0b3Jhcmc6CisJICBzZWxlY3RvcgorICAgICAgICB8IGtleXdvcmRuYW1lbGlzdAorCTsKKwora2V5d29yZG5hbWVsaXN0OgorCSAga2V5d29yZG5hbWUKKwl8IGtleXdvcmRuYW1lbGlzdCBrZXl3b3JkbmFtZQorCQl7CisJCSAgJCQgPSBjaGFpbm9uICgkMSwgJDIpOworCQl9CisJOworCitrZXl3b3JkbmFtZToKKwkgIHNlbGVjdG9yICc6JworCQl7CisJCSAgJCQgPSBidWlsZF90cmVlX2xpc3QgKCQxLCBOVUxMX1RSRUUpOworCQl9CisJfCAnOicKKwkJeworCQkgICQkID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisJCX0KKwk7CisKK29iamNzZWxlY3RvcmV4cHI6CisJICBTRUxFQ1RPUiAnKCcgc2VsZWN0b3JhcmcgJyknCisJCXsKKwkJICAkJCA9ICQzOworCQl9CisJOworCitvYmpjcHJvdG9jb2xleHByOgorCSAgUFJPVE9DT0wgJygnIGlkZW50aWZpZXIgJyknCisJCXsKKwkJICAkJCA9ICQzOworCQl9CisJOworCisvKiBleHRlbnNpb24gdG8gc3VwcG9ydCBDLXN0cnVjdHVyZXMgaW4gdGhlIGFyY2hpdmVyICovCisKK29iamNlbmNvZGVleHByOgorCSAgRU5DT0RFICcoJyB0eXBlbmFtZSAnKScKKwkJeworCQkgICQkID0gZ3Jva3R5cGVuYW1lICgkMyk7CisJCX0KKwk7CisKKyUlCmRpZmYgLS1naXQgYS9nY2Mvb2JzdGFjay5jIGIvZ2NjL29ic3RhY2suYwppbmRleCA0ZjlhMTg0Li41OWIyZWVlIDEwMDY0NAotLS0gYS9nY2Mvb2JzdGFjay5jCisrKyBiL2djYy9vYnN0YWNrLmMKQEAgLTEsMjkgKzEsMTkgQEAKIC8qIG9ic3RhY2suYyAtIHN1YnJvdXRpbmVzIHVzZWQgaW1wbGljaXRseSBieSBvYmplY3Qgc3RhY2sgbWFjcm9zCi0gICBDb3B5cmlnaHQgKEMpIDE5ODgsODksOTAsOTEsOTIsOTMsOTQsOTYsOTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSAgIHRoZSBDIGxpYnJhcnksIGhvd2V2ZXIuICBUaGUgbWFzdGVyIHNvdXJjZSBsaXZlcyBpbiAvZ2QvZ251L2xpYi4KK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uCiAKLSAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCi0gICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICAgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSAgIFVTQS4gICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLwogCiAjaW5jbHVkZSAib2JzdGFjay5oIgogCkBAIC03NywyOCArNjcsNiBAQAogI2RlZmluZSBDT1BZSU5HX1VOSVQgaW50CiAjZW5kaWYKIAotCi0vKiBUaGUgZnVuY3Rpb25zIGFsbG9jYXRpbmcgbW9yZSByb29tIGJ5IGNhbGxpbmcgYG9ic3RhY2tfY2h1bmtfYWxsb2MnCi0gICBqdW1wIHRvIHRoZSBoYW5kbGVyIHBvaW50ZWQgdG8gYnkgYG9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXInLgotICAgVGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0IHBvaW50cyB0byB0aGUgaW50ZXJuYWwgZnVuY3Rpb24KLSAgIGBwcmludF9hbmRfYWJvcnQnLiAgKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLXN0YXRpYyB2b2lkIHByaW50X2FuZF9hYm9ydCAodm9pZCk7Ci12b2lkICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKHZvaWQpID0gcHJpbnRfYW5kX2Fib3J0OwotI2Vsc2UKLXN0YXRpYyB2b2lkIHByaW50X2FuZF9hYm9ydCAoKTsKLXZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKSA9IHByaW50X2FuZF9hYm9ydDsKLSNlbmRpZgotCi0vKiBFeGl0IHZhbHVlIHVzZWQgd2hlbiBgcHJpbnRfYW5kX2Fib3J0JyBpcyB1c2VkLiAgKi8KLSNpZiBkZWZpbmVkIF9fR05VX0xJQlJBUllfXyB8fCBkZWZpbmVkIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmbmRlZiBFWElUX0ZBSUxVUkUKLSNkZWZpbmUgRVhJVF9GQUlMVVJFIDEKLSNlbmRpZgotaW50IG9ic3RhY2tfZXhpdF9mYWlsdXJlID0gRVhJVF9GQUlMVVJFOwotCiAvKiBUaGUgbm9uLUdOVS1DIG1hY3JvcyBjb3B5IHRoZSBvYnN0YWNrIGludG8gdGhpcyBnbG9iYWwgdmFyaWFibGUKICAgIHRvIGF2b2lkIG11bHRpcGxlIGV2YWx1YXRpb24uICAqLwogCkBAIC0xMTAsMjAgKzc4LDYgQEAKICAgIEZvciBmcmVlLCBkbyBub3QgdXNlID86LCBzaW5jZSBzb21lIGNvbXBpbGVycywgbGlrZSB0aGUgTUlQUyBjb21waWxlcnMsCiAgICBkbyBub3QgYWxsb3cgKGV4cHIpID8gdm9pZCA6IHZvaWQuICAqLwogCi0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jZGVmaW5lIENBTExfQ0hVTktGVU4oaCwgc2l6ZSkgXAotICAoKChoKSAtPiB1c2VfZXh0cmFfYXJnKSBcCi0gICA/ICgqKGgpLT5jaHVua2Z1bikgKChoKS0+ZXh0cmFfYXJnLCAoc2l6ZSkpIFwKLSAgIDogKCooc3RydWN0IF9vYnN0YWNrX2NodW5rICooKikgKGxvbmcpKSAoaCktPmNodW5rZnVuKSAoKHNpemUpKSkKLQotI2RlZmluZSBDQUxMX0ZSRUVGVU4oaCwgb2xkX2NodW5rKSBcCi0gIGRvIHsgXAotICAgIGlmICgoaCkgLT4gdXNlX2V4dHJhX2FyZykgXAotICAgICAgKCooaCktPmZyZWVmdW4pICgoaCktPmV4dHJhX2FyZywgKG9sZF9jaHVuaykpOyBcCi0gICAgZWxzZSBcCi0gICAgICAoKih2b2lkICgqKSAodm9pZCAqKSkgKGgpLT5mcmVlZnVuKSAoKG9sZF9jaHVuaykpOyBcCi0gIH0gd2hpbGUgKDApCi0jZWxzZQogI2RlZmluZSBDQUxMX0NIVU5LRlVOKGgsIHNpemUpIFwKICAgKCgoaCkgLT4gdXNlX2V4dHJhX2FyZykgXAogICAgPyAoKihoKS0+Y2h1bmtmdW4pICgoaCktPmV4dHJhX2FyZywgKHNpemUpKSBcCkBAIC0xMzYsNyArOTAsNiBAQAogICAgIGVsc2UgXAogICAgICAgKCoodm9pZCAoKikgKCkpIChoKS0+ZnJlZWZ1bikgKChvbGRfY2h1bmspKTsgXAogICB9IHdoaWxlICgwKQotI2VuZGlmCiAKIAwKIC8qIEluaXRpYWxpemUgYW4gb2JzdGFjayBIIGZvciB1c2UuICBTcGVjaWZ5IGNodW5rIHNpemUgU0laRSAoMCBtZWFucyBkZWZhdWx0KS4KQEAgLTE1MywxMyArMTA2LDggQEAKICAgICAgc3RydWN0IG9ic3RhY2sgKmg7CiAgICAgIGludCBzaXplOwogICAgICBpbnQgYWxpZ25tZW50OwotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotICAgICBQT0lOVEVSICgqY2h1bmtmdW4pIChsb25nKTsKLSAgICAgdm9pZCAoKmZyZWVmdW4pICh2b2lkICopOwotI2Vsc2UKICAgICAgUE9JTlRFUiAoKmNodW5rZnVuKSAoKTsKICAgICAgdm9pZCAoKmZyZWVmdW4pICgpOwotI2VuZGlmCiB7CiAgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KIApAQCAtMTgyLDI3ICsxMzAsMjUgQEAKICAgICAgIHNpemUgPSA0MDk2IC0gZXh0cmE7CiAgICAgfQogCi0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0gIGgtPmNodW5rZnVuID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqICgqKSh2b2lkICosIGxvbmcpKSBjaHVua2Z1bjsKLSAgaC0+ZnJlZWZ1biA9ICh2b2lkICgqKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKikpIGZyZWVmdW47Ci0jZWxzZQogICBoLT5jaHVua2Z1biA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKiAoKikoKSkgY2h1bmtmdW47CiAgIGgtPmZyZWVmdW4gPSBmcmVlZnVuOwotI2VuZGlmCiAgIGgtPmNodW5rX3NpemUgPSBzaXplOwogICBoLT5hbGlnbm1lbnRfbWFzayA9IGFsaWdubWVudCAtIDE7CiAgIGgtPnVzZV9leHRyYV9hcmcgPSAwOwogCiAgIGNodW5rID0gaC0+Y2h1bmsgPSBDQUxMX0NIVU5LRlVOIChoLCBoIC0+IGNodW5rX3NpemUpOwogICBpZiAoIWNodW5rKQotICAgICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKCk7CisgICAgeworICAgICAgaC0+YWxsb2NfZmFpbGVkID0gMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgaC0+YWxsb2NfZmFpbGVkID0gMDsKICAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBjaHVuay0+Y29udGVudHM7CiAgIGgtPmNodW5rX2xpbWl0ID0gY2h1bmstPmxpbWl0CiAgICAgPSAoY2hhciAqKSBjaHVuayArIGgtPmNodW5rX3NpemU7CiAgIGNodW5rLT5wcmV2ID0gMDsKICAgLyogVGhlIGluaXRpYWwgY2h1bmsgbm93IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdC4gICovCiAgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7Ci0gIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CiAgIHJldHVybiAxOwogfQogCkBAIC0yMTEsMTMgKzE1Nyw4IEBACiAgICAgIHN0cnVjdCBvYnN0YWNrICpoOwogICAgICBpbnQgc2l6ZTsKICAgICAgaW50IGFsaWdubWVudDsKLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSAgICAgUE9JTlRFUiAoKmNodW5rZnVuKSAoUE9JTlRFUiwgbG9uZyk7Ci0gICAgIHZvaWQgKCpmcmVlZnVuKSAoUE9JTlRFUiwgUE9JTlRFUik7Ci0jZWxzZQogICAgICBQT0lOVEVSICgqY2h1bmtmdW4pICgpOwogICAgICB2b2lkICgqZnJlZWZ1bikgKCk7Ci0jZW5kaWYKICAgICAgUE9JTlRFUiBhcmc7CiB7CiAgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KQEAgLTI0MSwxMyArMTgyLDggQEAKICAgICAgIHNpemUgPSA0MDk2IC0gZXh0cmE7CiAgICAgfQogCi0jaWYgZGVmaW5lZChfX1NURENfXykgJiYgX19TVERDX18KLSAgaC0+Y2h1bmtmdW4gPSAoc3RydWN0IF9vYnN0YWNrX2NodW5rICogKCopKHZvaWQgKixsb25nKSkgY2h1bmtmdW47Ci0gIGgtPmZyZWVmdW4gPSAodm9pZCAoKikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSBmcmVlZnVuOwotI2Vsc2UKICAgaC0+Y2h1bmtmdW4gPSAoc3RydWN0IF9vYnN0YWNrX2NodW5rICogKCopKCkpIGNodW5rZnVuOwogICBoLT5mcmVlZnVuID0gZnJlZWZ1bjsKLSNlbmRpZgogICBoLT5jaHVua19zaXplID0gc2l6ZTsKICAgaC0+YWxpZ25tZW50X21hc2sgPSBhbGlnbm1lbnQgLSAxOwogICBoLT5leHRyYV9hcmcgPSBhcmc7CkBAIC0yNTUsMTQgKzE5MSwxNyBAQAogCiAgIGNodW5rID0gaC0+Y2h1bmsgPSBDQUxMX0NIVU5LRlVOIChoLCBoIC0+IGNodW5rX3NpemUpOwogICBpZiAoIWNodW5rKQotICAgICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKCk7CisgICAgeworICAgICAgaC0+YWxsb2NfZmFpbGVkID0gMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgaC0+YWxsb2NfZmFpbGVkID0gMDsKICAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBjaHVuay0+Y29udGVudHM7CiAgIGgtPmNodW5rX2xpbWl0ID0gY2h1bmstPmxpbWl0CiAgICAgPSAoY2hhciAqKSBjaHVuayArIGgtPmNodW5rX3NpemU7CiAgIGNodW5rLT5wcmV2ID0gMDsKICAgLyogVGhlIGluaXRpYWwgY2h1bmsgbm93IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdC4gICovCiAgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7Ci0gIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CiAgIHJldHVybiAxOwogfQogCkBAIC0yOTIsNyArMjMxLDExIEBACiAgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBuZXcgY2h1bmsuICAqLwogICBuZXdfY2h1bmsgPSBDQUxMX0NIVU5LRlVOIChoLCBuZXdfc2l6ZSk7CiAgIGlmICghbmV3X2NodW5rKQotICAgICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKCk7CisgICAgeworICAgICAgaC0+YWxsb2NfZmFpbGVkID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CiAgIGgtPmNodW5rID0gbmV3X2NodW5rOwogICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bms7CiAgIG5ld19jaHVuay0+bGltaXQgPSBoLT5jaHVua19saW1pdCA9IChjaGFyICopIG5ld19jaHVuayArIG5ld19zaXplOwpAQCAtNDM2LDM5ICszNzksNiBAQAogICAgIGFib3J0ICgpOwogfQogDAotaW50Ci1fb2JzdGFja19tZW1vcnlfdXNlZCAoaCkKLSAgICAgc3RydWN0IG9ic3RhY2sgKmg7Ci17Ci0gIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayogbHA7Ci0gIHJlZ2lzdGVyIGludCBuYnl0ZXMgPSAwOwotCi0gIGZvciAobHAgPSBoLT5jaHVuazsgbHAgIT0gMDsgbHAgPSBscC0+cHJldikKLSAgICB7Ci0gICAgICBuYnl0ZXMgKz0gbHAtPmxpbWl0IC0gKGNoYXIgKikgbHA7Ci0gICAgfQotICByZXR1cm4gbmJ5dGVzOwotfQotDAotLyogRGVmaW5lIHRoZSBlcnJvciBoYW5kbGVyLiAgKi8KLSNpZm5kZWYgXwotIyBpZmRlZiBIQVZFX0xJQklOVExfSAotIyAgaW5jbHVkZSA8bGliaW50bC5oPgotIyAgaWZuZGVmIF8KLSMgICBkZWZpbmUgXyhTdHIpIGdldHRleHQgKFN0cikKLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBfKFN0cikgKFN0cikKLSMgZW5kaWYKLSNlbmRpZgotCi1zdGF0aWMgdm9pZAotcHJpbnRfYW5kX2Fib3J0ICgpCi17Ci0gIGZwdXRzIChfKCJtZW1vcnkgZXhoYXVzdGVkXG4iKSwgc3RkZXJyKTsKLSAgZXhpdCAob2JzdGFja19leGl0X2ZhaWx1cmUpOwotfQotDAogI2lmIDAKIC8qIFRoZXNlIGFyZSBub3cgdHVybmVkIG9mZiBiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSBpdAogICAgYW5kIGl0IHVzZXMgYmNvcHkgdmlhIG9ic3RhY2tfZ3Jvdywgd2hpY2ggY2F1c2VzIHRyb3VibGUgb24gc3lzVi4gICovCkBAIC01MDcsMTMgKzQxNyw2IEBACiAgIHJldHVybiBvYnN0YWNrX3Jvb20gKG9ic3RhY2spOwogfQogCi1pbnQgKG9ic3RhY2tfbWFrZV9yb29tKSAob2JzdGFjaywgbGVuZ3RoKQotICAgICBzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjazsKLSAgICAgaW50IGxlbmd0aDsKLXsKLSAgcmV0dXJuIG9ic3RhY2tfbWFrZV9yb29tIChvYnN0YWNrLCBsZW5ndGgpOwotfQotCiB2b2lkIChvYnN0YWNrX2dyb3cpIChvYnN0YWNrLCBwb2ludGVyLCBsZW5ndGgpCiAgICAgIHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrOwogICAgICBQT0lOVEVSIHBvaW50ZXI7CmRpZmYgLS1naXQgYS9nY2Mvb2JzdGFjay5oIGIvZ2NjL29ic3RhY2suaAppbmRleCBhNmEyZTIzLi5kZDhlODYxIDEwMDY0NAotLS0gYS9nY2Mvb2JzdGFjay5oCisrKyBiL2djYy9vYnN0YWNrLmgKQEAgLTEsMjUgKzEsMTkgQEAKIC8qIG9ic3RhY2suaCAtIG9iamVjdCBzdGFjayBtYWNyb3MKLSAgIENvcHlyaWdodCAoQykgMTk4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Niw5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMTk4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgdGhlIEMgbGlicmFyeSwgaG93ZXZlci4gIFRoZSBtYXN0ZXIgc291cmNlIGxpdmVzIGluIC9nZC9nbnUvbGliLgorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorbGF0ZXIgdmVyc2lvbi4KIAotICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4KLSAgIEJ1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BwcmVwLmFpLm1pdC5lZHUuCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gICBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotICAgVVNBLiAgKi8KK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLwogCiAvKiBTdW1tYXJ5OgogCkBAIC0xMDYsMTIgKzEwMCw4IEBACiAKIC8qIERvbid0IGRvIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbW9yZSB0aGFuIG9uY2UuICAqLwogCi0jaWZuZGVmIF9PQlNUQUNLX0gKLSNkZWZpbmUgX09CU1RBQ0tfSCAxCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKKyNpZm5kZWYgX19PQlNUQUNLX0hfXworI2RlZmluZSBfX09CU1RBQ0tfSF9fCiAMCiAvKiBXZSB1c2Ugc3VidHJhY3Rpb24gb2YgKGNoYXIgKikgMCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gaW50CiAgICBiZWNhdXNlIG9uIHdvcmQtYWRkcmVzc2FibGUgbWFjaGluZXMgYSBzaW1wbGUgY2FzdCB0byBpbnQKQEAgLTE0OCwxNyArMTM4LDYgQEAKICNkZWZpbmUgUFRSX0lOVF9UWVBFIGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoX0xJQkMpIHx8IGRlZmluZWQgKEhBVkVfU1RSSU5HX0gpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgbWVtY3B5ICgoVG8pLCAoRnJvbSksIChOKSkKLSNlbHNlCi0jaWZkZWYgbWVtY3B5Ci0jZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgbWVtY3B5ICgoVG8pLCAoRnJvbSksIChOKSkKLSNlbHNlCi0jZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgYmNvcHkgKChGcm9tKSwgKFRvKSwgKE4pKQotI2VuZGlmCi0jZW5kaWYKLQogc3RydWN0IF9vYnN0YWNrX2NodW5rCQkvKiBMaXZlcyBhdCBmcm9udCBvZiBlYWNoIGNodW5rLiAqLwogewogICBjaGFyICAqbGltaXQ7CQkJLyogMSBwYXN0IGVuZCBvZiB0aGlzIGNodW5rICovCkBAIC0xOTIsOSArMTcxLDcgQEAKIAkJCQkgICBjaHVuayBjb250YWlucyBhIHplcm8tbGVuZ3RoIG9iamVjdC4gIFRoaXMKIAkJCQkgICBwcmV2ZW50cyBmcmVlaW5nIHRoZSBjaHVuayBpZiB3ZSBhbGxvY2F0ZQogCQkJCSAgIGEgYmlnZ2VyIGNodW5rIHRvIHJlcGxhY2UgaXQuICovCi0gIHVuc2lnbmVkIGFsbG9jX2ZhaWxlZDoxOwkvKiBObyBsb25nZXIgdXNlZCwgYXMgd2Ugbm93IGNhbGwgdGhlIGZhaWxlZAotCQkJCSAgIGhhbmRsZXIgb24gZXJyb3IsIGJ1dCByZXRhaW5lZCBmb3IgYmluYXJ5Ci0JCQkJICAgY29tcGF0aWJpbGl0eS4gICovCisgIHVuc2lnbmVkIGFsbG9jX2ZhaWxlZDoxOwkvKiBjaHVuayBhbGxvYyBmdW5jIHJldHVybmVkIDAgKi8KIH07CiAKIC8qIERlY2xhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB3ZSB1c2U7IHRoZXkgYXJlIGluIG9ic3RhY2suYy4gICovCkBAIC0yMDcsMTMgKzE4NCwxMSBAQAogZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbl8xIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKIAkJCSAgICAgdm9pZCAqKCopICh2b2lkICosIGxvbmcpLAogCQkJICAgICB2b2lkICgqKSAodm9pZCAqLCB2b2lkICopLCB2b2lkICopOwotZXh0ZXJuIGludCBfb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKik7CiAjZWxzZQogZXh0ZXJuIHZvaWQgX29ic3RhY2tfbmV3Y2h1bmsgKCk7CiBleHRlcm4gdm9pZCBfb2JzdGFja19mcmVlICgpOwogZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbiAoKTsKIGV4dGVybiBpbnQgX29ic3RhY2tfYmVnaW5fMSAoKTsKLWV4dGVybiBpbnQgX29ic3RhY2tfbWVtb3J5X3VzZWQgKCk7CiAjZW5kaWYKIAwKICNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KQEAgLTI0NCw3ICsyMTksNiBAQAogaW50IG9ic3RhY2tfb2JqZWN0X3NpemUgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrKTsKIAogaW50IG9ic3RhY2tfcm9vbSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwotdm9pZCBvYnN0YWNrX21ha2Vfcm9vbSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBzaXplKTsKIHZvaWQgb2JzdGFja18xZ3Jvd19mYXN0IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgaW50IGRhdGFfY2hhcik7CiB2b2lkIG9ic3RhY2tfcHRyX2dyb3dfZmFzdCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHZvaWQgKmRhdGEpOwogdm9pZCBvYnN0YWNrX2ludF9ncm93X2Zhc3QgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgZGF0YSk7CkBAIC0yNTQsMzAgKzIyOCwxNyBAQAogdm9pZCAqIG9ic3RhY2tfbmV4dF9mcmVlIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CiBpbnQgb2JzdGFja19hbGlnbm1lbnRfbWFzayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwogaW50IG9ic3RhY2tfY2h1bmtfc2l6ZSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOwotaW50IG9ic3RhY2tfbWVtb3J5X3VzZWQgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrKTsKIAogI2VuZGlmIC8qIF9fU1REQ19fICovCiAKIC8qIE5vbi1BTlNJIEMgY2Fubm90IHJlYWxseSBzdXBwb3J0IGFsdGVybmF0aXZlIGZ1bmN0aW9ucyBmb3IgdGhlc2UgbWFjcm9zLAogICAgc28gd2UgZG8gbm90IGRlY2xhcmUgdGhlbS4gICovCi0KLS8qIEVycm9yIGhhbmRsZXIgY2FsbGVkIHdoZW4gYG9ic3RhY2tfY2h1bmtfYWxsb2MnIGZhaWxlZCB0byBhbGxvY2F0ZQotICAgbW9yZSBtZW1vcnkuICBUaGlzIGNhbiBiZSBzZXQgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24uICBUaGUKLSAgIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHByaW50IGEgbWVzc2FnZSBhbmQgYWJvcnQuICAqLwotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotZXh0ZXJuIHZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAodm9pZCk7Ci0jZWxzZQotZXh0ZXJuIHZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKLSNlbmRpZgotCi0vKiBFeGl0IHZhbHVlIHVzZWQgd2hlbiBgcHJpbnRfYW5kX2Fib3J0JyBpcyB1c2VkLiAgKi8KLWV4dGVybiBpbnQgb2JzdGFja19leGl0X2ZhaWx1cmU7CiAMCiAvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBvYmplY3QgYmVpbmcgYWxsb2NhdGVkIG9yIHRvIGJlIGFsbG9jYXRlZCBuZXh0LgogICAgTm90ZSB0aGF0IHRoaXMgbWlnaHQgbm90IGJlIHRoZSBmaW5hbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QKICAgIGJlY2F1c2UgYSBuZXcgY2h1bmsgbWlnaHQgYmUgbmVlZGVkIHRvIGhvbGQgdGhlIGZpbmFsIHNpemUuICAqLwogCi0jZGVmaW5lIG9ic3RhY2tfYmFzZShoKSAoKGgpLT5vYmplY3RfYmFzZSkKKyNkZWZpbmUgb2JzdGFja19iYXNlKGgpICgoaCktPmFsbG9jX2ZhaWxlZCA/IDAgOiAoaCktPm9iamVjdF9iYXNlKQogCiAvKiBTaXplIGZvciBhbGxvY2F0aW5nIG9yZGluYXJ5IGNodW5rcy4gICovCiAKQEAgLTI4NSw3ICsyNDYsNyBAQAogCiAvKiBQb2ludGVyIHRvIG5leHQgYnl0ZSBub3QgeWV0IGFsbG9jYXRlZCBpbiBjdXJyZW50IGNodW5rLiAgKi8KIAotI2RlZmluZSBvYnN0YWNrX25leHRfZnJlZShoKQkoKGgpLT5uZXh0X2ZyZWUpCisjZGVmaW5lIG9ic3RhY2tfbmV4dF9mcmVlKGgpCSgoaCktPmFsbG9jX2ZhaWxlZCA/IDAgOiAoaCktPm5leHRfZnJlZSkKIAogLyogTWFzayBzcGVjaWZ5aW5nIGxvdyBiaXRzIHRoYXQgc2hvdWxkIGJlIGNsZWFyIGluIGFkZHJlc3Mgb2YgYW4gb2JqZWN0LiAgKi8KIApAQCAtMzA5LDE0ICsyNzAsMTMgQEAKIAogI2RlZmluZSBvYnN0YWNrX3NwZWNpZnlfYWxsb2NhdGlvbl93aXRoX2FyZyhoLCBzaXplLCBhbGlnbm1lbnQsIGNodW5rZnVuLCBmcmVlZnVuLCBhcmcpIFwKICAgX29ic3RhY2tfYmVnaW5fMSAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLCBcCi0JCSAgICAodm9pZCAqKCopICh2b2lkICosIGxvbmcpKSAoY2h1bmtmdW4pLCBcCi0JCSAgICAodm9pZCAoKikgKHZvaWQgKiwgdm9pZCAqKSkgKGZyZWVmdW4pLCAoYXJnKSkKKwkJICAgICh2b2lkICooKikgKGxvbmcpKSAoY2h1bmtmdW4pLCAodm9pZCAoKikgKHZvaWQgKikpIChmcmVlZnVuKSwgKGFyZykpCiAKICNkZWZpbmUgb2JzdGFja19jaHVua2Z1bihoLCBuZXdjaHVua2Z1bikgXAotICAoKGgpIC0+IGNodW5rZnVuID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopKHZvaWQgKiwgbG9uZykpIChuZXdjaHVua2Z1bikpCisgICgoaCkgLT4gY2h1bmtmdW4gPSAoc3RydWN0IF9vYnN0YWNrX2NodW5rICooKikobG9uZykpIChuZXdjaHVua2Z1bikpCiAKICNkZWZpbmUgb2JzdGFja19mcmVlZnVuKGgsIG5ld2ZyZWVmdW4pIFwKLSAgKChoKSAtPiBmcmVlZnVuID0gKHZvaWQgKCopKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSAobmV3ZnJlZWZ1bikpCisgICgoaCkgLT4gZnJlZWZ1biA9ICh2b2lkICgqKSh2b2lkICopKSAobmV3ZnJlZWZ1bikpCiAKICNlbHNlCiAKQEAgLTM0Nyw4ICszMDcsNiBAQAogI2RlZmluZSBvYnN0YWNrXzFncm93X2Zhc3QoaCxhY2hhcikgKCooKGgpLT5uZXh0X2ZyZWUpKysgPSBhY2hhcikKIAogI2RlZmluZSBvYnN0YWNrX2JsYW5rX2Zhc3QoaCxuKSAoKGgpLT5uZXh0X2ZyZWUgKz0gKG4pKQotCi0jZGVmaW5lIG9ic3RhY2tfbWVtb3J5X3VzZWQoaCkgX29ic3RhY2tfbWVtb3J5X3VzZWQgKGgpCiAMCiAjaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwogLyogTmV4dFN0ZXAgMi4wIGNjIGlzIHJlYWxseSBnY2MgMS45MyBidXQgaXQgZGVmaW5lcyBfX0dOVUNfXyA9IDIgYW5kCkBAIC0zNjYsNiArMzI0LDcgQEAKICNkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShPQlNUQUNLKQkJCQkJXAogICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCiAgICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICAgIF9fby0+YWxsb2NfZmFpbGVkID8gMCA6CQkJCQkJXAogICAgICAodW5zaWduZWQpIChfX28tPm5leHRfZnJlZSAtIF9fby0+b2JqZWN0X2Jhc2UpOyB9KQogCiAjZGVmaW5lIG9ic3RhY2tfcm9vbShPQlNUQUNLKQkJCQkJCVwKQEAgLTM3MywyMiArMzMyLDE3IEBACiAgICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCiAgICAgICh1bnNpZ25lZCkgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSk7IH0pCiAKLSNkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oT0JTVEFDSyxsZW5ndGgpCQkJCVwKLV9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKLSh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCi0gICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCi0gICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAotICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCi0gICAodm9pZCkgMDsgfSkKLQogI2RlZmluZSBvYnN0YWNrX2dyb3coT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCiAgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCiAgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBfX2xlbiA+IF9fby0+Y2h1bmtfbGltaXQpCQkJXAogICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCi0gICBfb2JzdGFja19tZW1jcHkgKF9fby0+bmV4dF9mcmVlLCAoY2hhciAqKSAod2hlcmUpLCBfX2xlbik7CQlcCi0gICBfX28tPm5leHRfZnJlZSArPSBfX2xlbjsJCQkJCQlcCisgICBpZiAoIV9fby0+YWxsb2NfZmFpbGVkKQkJCQkJCVwKKyAgICAgewkJCQkJCQkJCVwKKyAgICAgICAgYmNvcHkgKChjaGFyICopICh3aGVyZSksIF9fby0+bmV4dF9mcmVlLCBfX2xlbik7CQlcCisJX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQlcCisgICAgIH0JCQkJCQkJCQlcCiAgICAodm9pZCkgMDsgfSkKIAogI2RlZmluZSBvYnN0YWNrX2dyb3cwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCkBAIC0zOTcsOSArMzUxLDEyIEBACiAgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCiAgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBfX2xlbiArIDEgPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKICAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4gKyAxKTsJCQkJXAotICAgX29ic3RhY2tfbWVtY3B5IChfX28tPm5leHRfZnJlZSwgKGNoYXIgKikgKHdoZXJlKSwgX19sZW4pOwkJXAotICAgX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQkJXAotICAgKihfX28tPm5leHRfZnJlZSkrKyA9IDA7CQkJCQkJXAorICAgaWYgKCFfX28tPmFsbG9jX2ZhaWxlZCkJCQkJCQlcCisgICAgIHsJCQkJCQkJCQlcCisgICAgICAgYmNvcHkgKChjaGFyICopICh3aGVyZSksIF9fby0+bmV4dF9mcmVlLCBfX2xlbik7CQkJXAorICAgICAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICAgICAqKF9fby0+bmV4dF9mcmVlKSsrID0gMDsJCQkJCQlcCisgICAgIH0JCQkJCQkJCQlcCiAgICAodm9pZCkgMDsgfSkKIAogI2RlZmluZSBvYnN0YWNrXzFncm93KE9CU1RBQ0ssZGF0dW0pCQkJCQlcCkBAIC00MDcsNyArMzY0LDggQEAKICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCiAgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyAxID4gX19vLT5jaHVua19saW1pdCkJCQkJXAogICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCAxKTsJCQkJCVwKLSAgICooX19vLT5uZXh0X2ZyZWUpKysgPSAoZGF0dW0pOwkJCQkJXAorICAgaWYgKCFfX28tPmFsbG9jX2ZhaWxlZCkJCQkJCQlcCisgICAgICooX19vLT5uZXh0X2ZyZWUpKysgPSAoZGF0dW0pOwkJCQkJXAogICAgKHZvaWQpIDA7IH0pCiAKIC8qIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBvYnN0YWNrIGFsaWdubWVudCBpcyBnb29kIGVub3VnaCBmb3IgcG9pbnRlcnMgb3IgaW50cywKQEAgLTQxOSw3ICszNzcsOCBAQAogKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKICAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAodm9pZCAqKSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCiAgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAodm9pZCAqKSk7CQkJCVwKLSAgICooKHZvaWQgKiopX19vLT5uZXh0X2ZyZWUpKysgPSAoKHZvaWQgKilkYXR1bSk7CQkJXAorICAgaWYgKCFfX28tPmFsbG9jX2ZhaWxlZCkJCQkJCQlcCisgICAgICooKHZvaWQgKiopX19vLT5uZXh0X2ZyZWUpKysgPSAoKHZvaWQgKilkYXR1bSk7CQkJXAogICAgKHZvaWQpIDA7IH0pCiAKICNkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQkJXApAQCAtNDI3LDcgKzM4Niw4IEBACiAoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAogICAgaWYgKF9fby0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gX19vLT5jaHVua19saW1pdCkJCVwKICAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgc2l6ZW9mIChpbnQpKTsJCQkJXAotICAgKigoaW50ICopX19vLT5uZXh0X2ZyZWUpKysgPSAoKGludClkYXR1bSk7CQkJCVwKKyAgIGlmICghX19vLT5hbGxvY19mYWlsZWQpCQkJCQkJXAorICAgICAqKChpbnQgKilfX28tPm5leHRfZnJlZSkrKyA9ICgoaW50KWRhdHVtKTsJCQkJXAogICAgKHZvaWQpIDA7IH0pCiAKICNkZWZpbmUgb2JzdGFja19wdHJfZ3Jvd19mYXN0KGgsYXB0cikgKCooKHZvaWQgKiopIChoKS0+bmV4dF9mcmVlKSsrID0gKHZvaWQgKilhcHRyKQpAQCAtNDM5LDcgKzM5OSw4IEBACiAgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCiAgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAogICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCi0gICBfX28tPm5leHRfZnJlZSArPSBfX2xlbjsJCQkJCQlcCisgICBpZiAoIV9fby0+YWxsb2NfZmFpbGVkKQkJCQkJCVwKKyAgICAgX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQkJXAogICAgKHZvaWQpIDA7IH0pCiAKICNkZWZpbmUgb2JzdGFja19hbGxvYyhPQlNUQUNLLGxlbmd0aCkJCQkJCVwKQEAgLTQ2NiwxNiArNDI3LDIxIEBACiBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCiAoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKICAgIHZvaWQgKnZhbHVlOwkJCQkJCQkJXAotICAgdmFsdWUgPSAodm9pZCAqKSBfX28xLT5vYmplY3RfYmFzZTsJCQkJCVwKLSAgIGlmIChfX28xLT5uZXh0X2ZyZWUgPT0gdmFsdWUpCQkJCQlcCi0gICAgIF9fbzEtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CQkJCQlcCi0gICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAotICAgICA9IF9fSU5UX1RPX1BUUiAoKF9fUFRSX1RPX0lOVCAoX19vMS0+bmV4dF9mcmVlKStfX28xLT5hbGlnbm1lbnRfbWFzaylcCi0JCSAgICAgJiB+IChfX28xLT5hbGlnbm1lbnRfbWFzaykpOwkJCVwKLSAgIGlmIChfX28xLT5uZXh0X2ZyZWUgLSAoY2hhciAqKV9fbzEtPmNodW5rCQkJCVwKLSAgICAgICA+IF9fbzEtPmNodW5rX2xpbWl0IC0gKGNoYXIgKilfX28xLT5jaHVuaykJCQlcCi0gICAgIF9fbzEtPm5leHRfZnJlZSA9IF9fbzEtPmNodW5rX2xpbWl0OwkJCQlcCi0gICBfX28xLT5vYmplY3RfYmFzZSA9IF9fbzEtPm5leHRfZnJlZTsJCQkJCVwKKyAgIGlmIChfX28xLT5hbGxvY19mYWlsZWQpCQkJCQkJXAorICAgICB2YWx1ZSA9IDA7CQkJCQkJCQlcCisgICBlbHNlCQkJCQkJCQkJXAorICAgICB7CQkJCQkJCQkJXAorICAgICAgIHZhbHVlID0gKHZvaWQgKikgX19vMS0+b2JqZWN0X2Jhc2U7CQkJCVwKKyAgICAgICBpZiAoX19vMS0+bmV4dF9mcmVlID09IHZhbHVlKQkJCQkJXAorICAgICAgICAgX19vMS0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMTsJCQkJCVwKKyAgICAgICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAorCSA9IF9fSU5UX1RPX1BUUiAoKF9fUFRSX1RPX0lOVCAoX19vMS0+bmV4dF9mcmVlKStfX28xLT5hbGlnbm1lbnRfbWFzaylcCisJCQkgJiB+IChfX28xLT5hbGlnbm1lbnRfbWFzaykpOwkJCVwKKyAgICAgICBpZiAoX19vMS0+bmV4dF9mcmVlIC0gKGNoYXIgKilfX28xLT5jaHVuawkJCVwKKwkgICA+IF9fbzEtPmNodW5rX2xpbWl0IC0gKGNoYXIgKilfX28xLT5jaHVuaykJCQlcCisJIF9fbzEtPm5leHRfZnJlZSA9IF9fbzEtPmNodW5rX2xpbWl0OwkJCQlcCisgICAgICAgX19vMS0+b2JqZWN0X2Jhc2UgPSBfX28xLT5uZXh0X2ZyZWU7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCiAgICB2YWx1ZTsgfSkKIAogI2RlZmluZSBvYnN0YWNrX2ZyZWUoT0JTVEFDSywgT0JKKQkJCQkJXApAQCAtNDg5LDcgKzQ1NSw3IEBACiAjZWxzZSAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCiAKICNkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShoKSBcCi0gKHVuc2lnbmVkKSAoKGgpLT5uZXh0X2ZyZWUgLSAoaCktPm9iamVjdF9iYXNlKQorICh1bnNpZ25lZCkgKChoKS0+YWxsb2NfZmFpbGVkID8gMCA6IChoKS0+bmV4dF9mcmVlIC0gKGgpLT5vYmplY3RfYmFzZSkKIAogI2RlZmluZSBvYnN0YWNrX3Jvb20oaCkJCVwKICAodW5zaWduZWQpICgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUpCkBAIC01MDAsNDAgKzQ2Niw0MCBAQAogICAgQ2FzdGluZyB0aGUgdGhpcmQgb3BlcmFuZCB0byB2b2lkIHdhcyB0cmllZCBiZWZvcmUsCiAgICBidXQgc29tZSBjb21waWxlcnMgd29uJ3QgYWNjZXB0IGl0LiAgKi8KIAotI2RlZmluZSBvYnN0YWNrX21ha2Vfcm9vbShoLGxlbmd0aCkJCQkJCVwKLSggKGgpLT50ZW1wID0gKGxlbmd0aCksCQkJCQkJCVwKLSAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcCA+IChoKS0+Y2h1bmtfbGltaXQpCQkJXAotICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wKSwgMCkgOiAwKSkKLQogI2RlZmluZSBvYnN0YWNrX2dyb3coaCx3aGVyZSxsZW5ndGgpCQkJCQlcCiAoIChoKS0+dGVtcCA9IChsZW5ndGgpLAkJCQkJCQlcCiAgICgoKGgpLT5uZXh0X2ZyZWUgKyAoaCktPnRlbXAgPiAoaCktPmNodW5rX2xpbWl0KQkJCVwKICAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcCksIDApIDogMCksCQkJXAotICBfb2JzdGFja19tZW1jcHkgKChoKS0+bmV4dF9mcmVlLCAoY2hhciAqKSAod2hlcmUpLCAoaCktPnRlbXApLAlcCi0gIChoKS0+bmV4dF9mcmVlICs9IChoKS0+dGVtcCkKKyAgKChoKS0+YWxsb2NfZmFpbGVkID8gMCA6CQkJCQkJXAorICAoYmNvcHkgKChjaGFyICopICh3aGVyZSksIChoKS0+bmV4dF9mcmVlLCAoaCktPnRlbXApLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wKSkpCiAKICNkZWZpbmUgb2JzdGFja19ncm93MChoLHdoZXJlLGxlbmd0aCkJCQkJCVwKICggKGgpLT50ZW1wID0gKGxlbmd0aCksCQkJCQkJCVwKICAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcCArIDEgPiAoaCktPmNodW5rX2xpbWl0KQkJCVwKICAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcCArIDEpLCAwKSA6IDApLAkJCVwKLSAgX29ic3RhY2tfbWVtY3B5ICgoaCktPm5leHRfZnJlZSwgKGNoYXIgKikgKHdoZXJlKSwgKGgpLT50ZW1wKSwJXAorICAoKGgpLT5hbGxvY19mYWlsZWQgPyAwIDoJCQkJCQlcCisgIChiY29weSAoKGNoYXIgKikgKHdoZXJlKSwgKGgpLT5uZXh0X2ZyZWUsIChoKS0+dGVtcCksCQkJXAogICAoaCktPm5leHRfZnJlZSArPSAoaCktPnRlbXAsCQkJCQkJXAotICAqKChoKS0+bmV4dF9mcmVlKSsrID0gMCkKKyAgKigoaCktPm5leHRfZnJlZSkrKyA9IDApKSkKIAogI2RlZmluZSBvYnN0YWNrXzFncm93KGgsZGF0dW0pCQkJCQkJXAogKCAoKChoKS0+bmV4dF9mcmVlICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJCVwKICAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIDEpLCAwKSA6IDApLAkJCQlcCi0gICgqKChoKS0+bmV4dF9mcmVlKSsrID0gKGRhdHVtKSkpCisgKChoKS0+YWxsb2NfZmFpbGVkID8gMCA6CQkJCQkJXAorICAoKigoaCktPm5leHRfZnJlZSkrKyA9IChkYXR1bSkpKSkKIAogI2RlZmluZSBvYnN0YWNrX3B0cl9ncm93KGgsZGF0dW0pCQkJCQlcCiAoICgoKGgpLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGNoYXIgKikgPiAoaCktPmNodW5rX2xpbWl0KQkJXAogICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChjaGFyICopKSwgMCkgOiAwKSwJCVwKLSAgKCooKGNoYXIgKiopICgoKGgpLT5uZXh0X2ZyZWUrPXNpemVvZihjaGFyICopKS1zaXplb2YoY2hhciAqKSkpID0gKChjaGFyICopIGRhdHVtKSkpCisgICgoaCktPmFsbG9jX2ZhaWxlZCA/IDAgOgkJCQkJCVwKKyAgKCooKGNoYXIgKiopICgoKGgpLT5uZXh0X2ZyZWUrPXNpemVvZihjaGFyICopKS1zaXplb2YoY2hhciAqKSkpID0gKChjaGFyICopIGRhdHVtKSkpKQogCiAjZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coaCxkYXR1bSkJCQkJCVwKICggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJXAogICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChpbnQpKSwgMCkgOiAwKSwJCQlcCi0gICgqKChpbnQgKikgKCgoaCktPm5leHRfZnJlZSs9c2l6ZW9mKGludCkpLXNpemVvZihpbnQpKSkgPSAoKGludCkgZGF0dW0pKSkKKyAgKChoKS0+YWxsb2NfZmFpbGVkID8gMCA6CQkJCQkJXAorICAoKigoaW50ICopICgoKGgpLT5uZXh0X2ZyZWUrPXNpemVvZihpbnQpKS1zaXplb2YoaW50KSkpID0gKChpbnQpIGRhdHVtKSkpKQogCiAjZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChoLGFwdHIpICgqKChjaGFyICoqKSAoaCktPm5leHRfZnJlZSkrKyA9IChjaGFyICopIGFwdHIpCiAjZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChoLGFpbnQpICgqKChpbnQgKikgKGgpLT5uZXh0X2ZyZWUpKysgPSAoaW50KSBhaW50KQpAQCAtNTQyLDcgKzUwOCw4IEBACiAoIChoKS0+dGVtcCA9IChsZW5ndGgpLAkJCQkJCQlcCiAgICgoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlIDwgKGgpLT50ZW1wKQkJCVwKICAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcCksIDApIDogMCksCQkJXAotICAoKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wKSkKKyAgKChoKS0+YWxsb2NfZmFpbGVkID8gMCA6CQkJCQkJXAorICAoKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wKSkpCiAKICNkZWZpbmUgb2JzdGFja19hbGxvYyhoLGxlbmd0aCkJCQkJCQlcCiAgKG9ic3RhY2tfYmxhbmsgKChoKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKQEAgLTU1NCwxOCArNTIxLDE5IEBACiAgKG9ic3RhY2tfZ3JvdzAgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKIAogI2RlZmluZSBvYnN0YWNrX2ZpbmlzaChoKSAgCQkJCQkJXAotKCAoKGgpLT5uZXh0X2ZyZWUgPT0gKGgpLT5vYmplY3RfYmFzZQkJCQkJXAorKCAoaCktPmFsbG9jX2ZhaWxlZCA/IDAgOgkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSA9PSAoaCktPm9iamVjdF9iYXNlCQkJCQlcCiAgICA/ICgoKGgpLT5tYXliZV9lbXB0eV9vYmplY3QgPSAxKSwgMCkJCQkJCVwKICAgIDogMCksCQkJCQkJCQlcCiAgIChoKS0+dGVtcCA9IF9fUFRSX1RPX0lOVCAoKGgpLT5vYmplY3RfYmFzZSksCQkJCVwKICAgKGgpLT5uZXh0X2ZyZWUJCQkJCQkJXAogICAgID0gX19JTlRfVE9fUFRSICgoX19QVFJfVE9fSU5UICgoaCktPm5leHRfZnJlZSkrKGgpLT5hbGlnbm1lbnRfbWFzaykJXAogCQkgICAgJiB+ICgoaCktPmFsaWdubWVudF9tYXNrKSksCQkJCVwKLSAgKCgoaCktPm5leHRfZnJlZSAtIChjaGFyICopIChoKS0+Y2h1bmsJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlIC0gKGNoYXIgKikgKGgpLT5jaHVuawkJCQkJXAogICAgID4gKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspCQkJCVwKICAgID8gKChoKS0+bmV4dF9mcmVlID0gKGgpLT5jaHVua19saW1pdCkgOiAwKSwJCQkJXAogICAoaCktPm9iamVjdF9iYXNlID0gKGgpLT5uZXh0X2ZyZWUsCQkJCQlcCi0gIF9fSU5UX1RPX1BUUiAoKGgpLT50ZW1wKSkKKyAgX19JTlRfVE9fUFRSICgoaCktPnRlbXApKSkKIAogI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwogI2RlZmluZSBvYnN0YWNrX2ZyZWUoaCxvYmopCQkJCQkJXApAQCAtNTg1LDggKzU1Myw0IEBACiAKICNlbmRpZiAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQkvKiBDKysgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogb2JzdGFjay5oICovCisjZW5kaWYgLyogbm90IF9fT0JTVEFDS19IX18gKi8KZGlmZiAtLWdpdCBhL2djYy9wc2VsZi5jIGIvZ2NjL3BzZWxmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0NzFkYQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9wc2VsZi5jCkBAIC0wLDAgKzEgQEAKK21haW4oKXtjaGFyKnA9Im1haW4oKXtjaGFyKnA9JWMlcyVjOyh2b2lkKXByaW50ZihwLDM0LHAsMzQsMTApO30lYyI7KHZvaWQpcHJpbnRmKHAsMzQscCwzNCwxMCk7fQpkaWZmIC0tZ2l0IGEvZ2NjL3BzZWxmMS5jIGIvZ2NjL3BzZWxmMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZGZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvcHNlbGYxLmMKQEAgLTAsMCArMSBAQAorbWFpbihhKXthPSJtYWluKGEpe2E9JWMlcyVjO3ByaW50ZihhLDM0LGEsMzQpO30iO3ByaW50ZihhLDM0LGEsMzQpO30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nY2MvcHNlbGYyLmMgYi9nY2MvcHNlbGYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4YThjMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9wc2VsZjIuYwpAQCAtMCwwICsxIEBACittYWluKCl7Y2hhciphPSJtYWluKCl7Y2hhciphPSVjJXMlYztpbnQgYj0nJWMnO3ByaW50ZihhLGIsYSxiLGIpO30iO2ludCBiPSciJztwcmludGYoYSxiLGEsYixiKTt9CmRpZmYgLS1naXQgYS9nY2MvcHNlbGYzLmMgYi9nY2MvcHNlbGYzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkZWFjNgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9wc2VsZjMuYwpAQCAtMCwwICsxIEBACittYWluKGEpe3ByaW50ZihhLDM0LGE9Im1haW4oYSl7cHJpbnRmKGEsMzQsYT0lYyVzJWMsMzQpO30iLDM0KTt9CmRpZmYgLS1naXQgYS9nY2Mvc3RhYi5kZWYgYi9nY2Mvc3RhYi5kZWYKaW5kZXggNDhlYTIzMS4uZGQ0ZmJmMCAxMDA2NDQKLS0tIGEvZ2NjL3N0YWIuZGVmCisrKyBiL2djYy9zdGFiLmRlZgpAQCAtMSwyMSArMSwxOSBAQAogLyogVGFibGUgb2YgREJYIHN5bWJvbCBjb2RlcyBmb3IgdGhlIEdOVSBzeXN0ZW0uCi0gICBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMTk4OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDEsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgogCi0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAotICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICovCiAKIC8qIFRoaXMgY29udGFpbnMgY29udHJpYnV0aW9uIGZyb20gQ3lnbnVzIFN1cHBvcnQuICAqLwogDApkaWZmIC0tZ2l0IGEvZ2NjL3RleGluZm8udGV4IGIvZ2NjL3RleGluZm8udGV4CmluZGV4IDFkMWU1NzAuLmI4NTVhOTYgMTAwNjQ0Ci0tLSBhL2djYy90ZXhpbmZvLnRleAorKysgYi9nY2MvdGV4aW5mby50ZXgKQEAgLTEsNSArMSw1IEBACiAlJSBUZVggbWFjcm9zIHRvIGhhbmRsZSBUZXhpbmZvIGZpbGVzLgotJSUgJElkOiB0ZXhpbmZvLnRleCx2IDIuMjE3IDE5OTcvMDcvMTQgMTc6NDM6NDEga2FybCBFeHAga2FybCAkCislJSAkSWQ6IHRleGluZm8udGV4LHYgMS4xIDE5OTcvMDgvMTEgMTU6NTc6MTQgbGF3IEV4cCAkCiAKICUgIENvcHlyaWdodCAoQykgMTk4NSwgODYsIDg4LCA5MCwgOTEsIDkyLCA5MywKICUgICAgICAgICAgICAgICAgOTQsIDk1LCA5NiwgOTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0zNiw3ICszNiw3IEBACiAKICUgVGhpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHZlcnNpb24gbnVtYmVyIGJhc2VkIG9uIFJDUy4KIFxkZWZcZGVmdGV4aW5mb3ZlcnNpb24kIzE6ICMyICR7XGRlZlx0ZXhpbmZvdmVyc2lvbnsjMn19Ci1cZGVmdGV4aW5mb3ZlcnNpb24kUmV2aXNpb246IDIuMjE3ICQKK1xkZWZ0ZXhpbmZvdmVyc2lvbiRSZXZpc2lvbjogMS4xICQKIFxtZXNzYWdle0xvYWRpbmcgdGV4aW5mbyBwYWNrYWdlIFtWZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl06fQogCiAlIElmIGluIGEgLmZtdCBmaWxlLCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIKZGlmZiAtLWdpdCBhL2djYy90bS50ZXhpIGIvZ2NjL3RtLnRleGkKaW5kZXggODNkNTFiYi4uN2Y2NjQ4NyAxMDA2NDQKLS0tIGEvZ2NjL3RtLnRleGkKKysrIGIvZ2NjL3RtLnRleGkKQEAgLTEsNCArMSw0IEBACi1AYyBDb3B5cmlnaHQgKEMpIDE5ODgsODksOTIsOTMsOTQsOTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAYyBDb3B5cmlnaHQgKEMpIDE5ODgsODksOTIsOTMsOTQsOTYsMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIEBjIFRoaXMgaXMgcGFydCBvZiB0aGUgR0NDIG1hbnVhbC4KIEBjIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4KIApAQCAtNzY0LDYgKzc2NCwxMyBAQAogQGl0ZW0gQklHR0VTVF9BTElHTk1FTlQKIEJpZ2dlc3QgYWxpZ25tZW50IHRoYXQgYW55IGRhdGEgdHlwZSBjYW4gcmVxdWlyZSBvbiB0aGlzIG1hY2hpbmUsIGluIGJpdHMuCiAKK0BmaW5kZXggTUlOSU1VTV9BVE9NSUNfQUxJR05NRU5UCitAaXRlbSBNSU5JTVVNX0FUT01JQ19BTElHTk1FTlQKK0lmIGRlZmluZWQsIHRoZSBzbWFsbGVzdCBhbGlnbm1lbnQsIGluIGJpdHMsIHRoYXQgY2FuIGJlIGdpdmVuIHRvIGFuCitvYmplY3QgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBvbmUgb3BlcmF0aW9uLCB3aXRob3V0IGRpc3R1cmJpbmcgYW55CituZWFyYnkgb2JqZWN0LiAgTm9ybWFsbHksIHRoaXMgaXMgQGNvZGV7QklUU19QRVJfVU5JVH0sIGJ1dCBtYXkgYmUgbGFyZ2VyCitvbiBtYWNoaW5lcyB0aGF0IGRvbid0IGhhdmUgYnl0ZSBvciBoYWxmLXdvcmQgc3RvcmUgb3BlcmF0aW9ucy4KKwogQGZpbmRleCBCSUdHRVNUX0ZJRUxEX0FMSUdOTUVOVAogQGl0ZW0gQklHR0VTVF9GSUVMRF9BTElHTk1FTlQKIEJpZ2dlc3QgYWxpZ25tZW50IHRoYXQgYW55IHN0cnVjdHVyZSBmaWVsZCBjYW4gcmVxdWlyZSBvbiB0aGlzIG1hY2hpbmUsCkBAIC0xNzIwLDYgKzE3MjcsMTUgQEAKIGVpdGhlciBhIHN1aXRhYmxlIGhhcmQgcmVnaXN0ZXIgb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbgogYWxsb2NhdGVkIHN1Y2ggYSBoYXJkIHJlZ2lzdGVyLgogCitAZmluZGV4IFJFR05PX01PREVfT0tfRk9SX0JBU0VfUAorQGl0ZW0gUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9QIChAdmFye251bX0sIEB2YXJ7bW9kZX0pCitBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIGp1c3QgbGlrZSBAY29kZXtSRUdOT19PS19GT1JfQkFTRV9QfSwgZXhjZXB0IHRoYXQKK3RoYXQgZXhwcmVzc2lvbiBtYXkgZXhhbWluZSB0aGUgbW9kZSBvZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBpbgorQHZhcnttb2RlfS4gIFlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIG1vZGUgb2YgdGhlIG1lbW9yeQorcmVmZXJlbmNlIGFmZmVjdHMgd2hldGhlciBhIHJlZ2lzdGVyIG1heSBiZSB1c2VkIGFzIGEgYmFzZSByZWdpc3Rlci4gIElmCit5b3UgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBjb21waWxlciB3aWxsIHVzZSBpdCBpbnN0ZWFkIG9mCitAY29kZXtSRUdOT19PS19GT1JfQkFTRV9QfS4KKwogQGZpbmRleCBSRUdOT19PS19GT1JfSU5ERVhfUAogQGl0ZW0gUkVHTk9fT0tfRk9SX0lOREVYX1AgKEB2YXJ7bnVtfSkKIEEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgcmVnaXN0ZXIgbnVtYmVyIEB2YXJ7bnVtfSBpcwpAQCAtMTkwMCwxNiArMTkxNiwxNyBAQAogd291bGQgbm90IGJlIGVub3VnaCByZWdpc3RlcnMgdG8gdXNlIGFzIHNwaWxsIHJlZ2lzdGVycyBpZiB0aGlzIHdlcmUKIGRvbmUuCiAKLURlZmluZSBAY29kZXtTTUFMTF9SRUdJU1RFUl9DTEFTU0VTfSBvbiB0aGVzZSBtYWNoaW5lcy4gIFdoZW4gaXQgaXMKLWRlZmluZWQsIHRoZSBjb21waWxlciBhbGxvd3MgcmVnaXN0ZXJzIGV4cGxpY2l0bHkgdXNlZCBpbiB0aGUgcnRsIHRvIGJlCi11c2VkIGFzIHNwaWxsIHJlZ2lzdGVycyBidXQgYXZvaWRzIGV4dGVuZGluZyB0aGUgbGlmZXRpbWUgb2YgdGhlc2UKLXJlZ2lzdGVycy4KK0RlZmluZSBAY29kZXtTTUFMTF9SRUdJU1RFUl9DTEFTU0VTfSB0byBiZSBhbiBleHByZXNzaW9uIHdpdGggYSBub24temVybwordmFsdWUgb24gdGhlc2UgbWFjaGluZXMuICBXaGVuIHRoaXMgbWFjcm8gaGFzIGEgbm9uLXplcm8gdmFsdWUsIHRoZQorY29tcGlsZXIgYWxsb3dzIHJlZ2lzdGVycyBleHBsaWNpdGx5IHVzZWQgaW4gdGhlIHJ0bCB0byBiZSB1c2VkIGFzIHNwaWxsCityZWdpc3RlcnMgYnV0IGF2b2lkcyBleHRlbmRpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZXNlIHJlZ2lzdGVycy4KIAotSXQgaXMgYWx3YXlzIHNhZmUgdG8gZGVmaW5lIHRoaXMgbWFjcm8sIGJ1dCBpZiB5b3UgdW5uZWNlc3NhcmlseSBkZWZpbmUKLWl0LCB5b3Ugd2lsbCByZWR1Y2UgdGhlIGFtb3VudCBvZiBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBpbgotc29tZSBjYXNlcy4gIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gd2hlbiBpdCBpcyByZXF1aXJlZCwgdGhlCi1jb21waWxlciB3aWxsIHJ1biBvdXQgb2Ygc3BpbGwgcmVnaXN0ZXJzIGFuZCBwcmludCBhIGZhdGFsIGVycm9yCi1tZXNzYWdlLiAgRm9yIG1vc3QgbWFjaGluZXMsIHlvdSBzaG91bGQgbm90IGRlZmluZSB0aGlzIG1hY3JvLgorSXQgaXMgYWx3YXlzIHNhZmUgdG8gZGVmaW5lIHRoaXMgbWFjcm8gd2l0aCBhIG5vbi16ZXJvIHZhbHVlLCBidXQgaWYgeW91Cit1bm5lY2Vzc2FyaWx5IGRlZmluZSBpdCwgeW91IHdpbGwgcmVkdWNlIHRoZSBhbW91bnQgb2Ygb3B0aW1pemF0aW9ucwordGhhdCBjYW4gYmUgcGVyZm9ybWVkIGluIHNvbWUgY2FzZXMuICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvCit3aXRoIGEgbm9uLXplcm8gdmFsdWUgd2hlbiBpdCBpcyByZXF1aXJlZCwgdGhlIGNvbXBpbGVyIHdpbGwgcnVuIG91dCBvZgorc3BpbGwgcmVnaXN0ZXJzIGFuZCBwcmludCBhIGZhdGFsIGVycm9yIG1lc3NhZ2UuICBGb3IgbW9zdCBtYWNoaW5lcywgeW91CitzaG91bGQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGF0IGFsbC4KIAogQGZpbmRleCBDTEFTU19MSUtFTFlfU1BJTExFRF9QCiBAaXRlbSBDTEFTU19MSUtFTFlfU1BJTExFRF9QIChAdmFye2NsYXNzfSkKQEAgLTIwMTEsNiArMjAyOCw3IEBACiAKIEBtZW51CiAqIEZyYW1lIExheW91dDo6CisqIFN0YWNrIENoZWNraW5nOjoKICogRnJhbWUgUmVnaXN0ZXJzOjoKICogRWxpbWluYXRpb246OgogKiBTdGFjayBBcmd1bWVudHM6OgpAQCAtMjExMCwxNSArMjEyOCwxMTkgQEAKIEBmaW5kZXggUkVUVVJOX0FERFJfUlRYCiBAaXRlbSBSRVRVUk5fQUREUl9SVFggKEB2YXJ7Y291bnR9LCBAdmFye2ZyYW1lYWRkcn0pCiBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGUgcmV0dXJuCi1hZGRyZXNzIGZvciB0aGUgZnJhbWUgQHZhcntjb3VudH0gc3RlcHMgdXAgZnJvbSB0aGUgY3VycmVudCBmcmFtZS4KLUB2YXJ7ZnJhbWVhZGRyfSBpcyB0aGUgZnJhbWUgcG9pbnRlciBvZiB0aGUgQHZhcntjb3VudH0gZnJhbWUsIG9yCi10aGUgZnJhbWUgcG9pbnRlciBvZiB0aGUgQHZhcntjb3VudH0gQG1pbnVze30gMSBmcmFtZSBpZgorYWRkcmVzcyBmb3IgdGhlIGZyYW1lIEB2YXJ7Y291bnR9IHN0ZXBzIHVwIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUsIGFmdGVyCit0aGUgcHJvbG9ndWUuICBAdmFye2ZyYW1lYWRkcn0gaXMgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIEB2YXJ7Y291bnR9CitmcmFtZSwgb3IgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIEB2YXJ7Y291bnR9IEBtaW51c3t9IDEgZnJhbWUgaWYKIEBjb2Rle1JFVFVSTl9BRERSX0lOX1BSRVZJT1VTX0ZSQU1FfSBpcyBkZWZpbmVkLgogCiBAZmluZGV4IFJFVFVSTl9BRERSX0lOX1BSRVZJT1VTX0ZSQU1FCiBAaXRlbSBSRVRVUk5fQUREUl9JTl9QUkVWSU9VU19GUkFNRQogRGVmaW5lIHRoaXMgaWYgdGhlIHJldHVybiBhZGRyZXNzIG9mIGEgcGFydGljdWxhciBzdGFjayBmcmFtZSBpcyBhY2Nlc3NlZAogZnJvbSB0aGUgZnJhbWUgcG9pbnRlciBvZiB0aGUgcHJldmlvdXMgc3RhY2sgZnJhbWUuCisKK0BmaW5kZXggSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYCitAaXRlbSBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgKK0EgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXByZXNlbnRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZQoraW5jb21pbmcgcmV0dXJuIGFkZHJlc3MgYXQgdGhlIGJlZ2lubmluZyBvZiBhbnkgZnVuY3Rpb24sIGJlZm9yZSB0aGUKK3Byb2xvZ3VlLiAgVGhpcyBSVEwgaXMgZWl0aGVyIGEgQGNvZGV7UkVHfSwgaW5kaWNhdGluZyB0aGF0IHRoZSByZXR1cm4KK3ZhbHVlIGlzIHNhdmVkIGluIEBzYW1we1JFR30sIG9yIGEgQGNvZGV7TUVNfSByZXByZXNlbnRpbmcgYSBsb2NhdGlvbiBpbgordGhlIHN0YWNrLgorCitZb3Ugb25seSBuZWVkIHRvIGRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY2FsbCBmcmFtZQorZGVidWdnaW5nIGluZm9ybWF0aW9uIGxpa2UgdGhhdCBwcm92aWRlZCBieSBEV0FSRiAyLgorCitAZmluZGV4IElOQ09NSU5HX0ZSQU1FX1NQX09GRlNFVAorQGl0ZW0gSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUCitBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyIGdpdmluZyB0aGUgb2Zmc2V0LCBpbiBieXRlcywKK2Zyb20gdGhlIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVyIHJlZ2lzdGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrCitmcmFtZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueSBmdW5jdGlvbiwgYmVmb3JlIHRoZSBwcm9sb2d1ZS4gIFRoZSB0b3Agb2YKK3RoZSBmcmFtZSBpcyBkZWZpbmVkIHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUgc3RhY2sgcG9pbnRlciBpbiB0aGUKK3ByZXZpb3VzIGZyYW1lLCBqdXN0IGJlZm9yZSB0aGUgY2FsbCBpbnN0cnVjdGlvbi4KKworWW91IG9ubHkgbmVlZCB0byBkZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IGNhbGwgZnJhbWUKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBsaWtlIHRoYXQgcHJvdmlkZWQgYnkgRFdBUkYgMi4KK0BlbmQgdGFibGUKKworQG5vZGUgU3RhY2sgQ2hlY2tpbmcKK0BzdWJzZWN0aW9uIFNwZWNpZnlpbmcgSG93IFN0YWNrIENoZWNraW5nIGlzIERvbmUKKworR05VIENDIHdpbGwgY2hlY2sgdGhhdCBzdGFjayByZWZlcmVuY2VzIGFyZSB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YKK3RoZSBzdGFjaywgaWYgdGhlIEBzYW1wey1mc3RhY2stY2hlY2t9IGlzIHNwZWNpZmllZCwgaW4gb25lIG9mIHRocmVlIHdheXM6CisKK0BlbnVtZXJhdGUKK0BpdGVtCitJZiB0aGUgdmFsdWUgb2YgdGhlIEBjb2Rle1NUQUNLX0NIRUNLX0JVSUxUSU59IG1hY3JvIGlzIG5vbnplcm8sIEdOVSBDQword2lsbCBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBhcnJhbmdlZCBmb3Igc3RhY2sgY2hlY2tpbmcgdG8gYmUgZG9uZSBhdAorYXBwcm9wcmlhdGUgcGxhY2VzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBlLmcuLCBpbgorQGNvZGV7RlVOQ1RJT05fUFJPTE9HVUV9LiAgR05VIENDIHdpbGwgZG8gbm90IG90aGVyIHNwZWNpYWwgcHJvY2Vzc2luZy4KKworQGl0ZW0KK0lmIEBjb2Rle1NUQUNLX0NIRUNLX0JVSUxUSU59IGlzIHplcm8gYW5kIHlvdSBkZWZpbmVkIGEgbmFtZWQgcGF0dGVybgorY2FsbGVkIEBjb2Rle2NoZWNrX3N0YWNrfSBpbiB5b3VyIEBmaWxle21kfSBmaWxlLCBHTlUgQ0Mgd2lsbCBjYWxsIHRoYXQKK3BhdHRlcm4gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggaXMgdGhlIGFkZHJlc3MgdG8gY29tcGFyZSB0aGUgc3RhY2sKK3ZhbHVlIGFnYWluc3QuICBZb3UgbXVzdCBhcnJhbmdlIGZvciB0aGlzIHBhdHRlcm4gdG8gcmVwb3J0IGFuIGVycm9yIGlmCit0aGUgc3RhY2sgcG9pbnRlciBpcyBvdXQgb2YgcmFuZ2UuCisKK0BpdGVtCitJZiBuZWl0aGVyIG9mIHRoZSBhYm92ZSBhcmUgdHJ1ZSwgR05VIENDIHdpbGwgZ2VuZXJhdGUgY29kZSB0byBwZXJpb2RpY2FsbHkKK2BgcHJvYmUnJyB0aGUgc3RhY2sgcG9pbnRlciB1c2luZyB0aGUgdmFsdWVzIG9mIHRoZSBtYWNyb3MgZGVmaW5lZCBiZWxvdy4KK0BlbmQgZW51bWVyYXRlCisKK05vcm1hbGx5LCB5b3Ugd2lsbCB1c2UgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZXNlIG1hY3Jvcywgc28gR05VIENDCit3aWxsIHVzZSB0aGUgdGhpcmQgYXBwcm9hY2guCisKK0B0YWJsZSBAY29kZQorQGZpbmRleCBTVEFDS19DSEVDS19CVUlMVElOCitAaXRlbSBTVEFDS19DSEVDS19CVUlMVElOCitBIG5vbnplcm8gdmFsdWUgaWYgc3RhY2sgY2hlY2tpbmcgaXMgZG9uZSBieSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBhCittYWNoaW5lLWRlcGVuZGVudCBtYW5uZXIuICBZb3Ugc2hvdWxkIGRlZmluZSB0aGlzIG1hY3JvIGlmIHN0YWNrIGNoZWNraW5nIAoraXMgcmVxdWlyZSBieSB0aGUgQUJJIG9mIHlvdXIgbWFjaGluZSBvciBpZiB5b3Ugd291bGQgbGlrZSB0byBoYXZlIHRvIHN0YWNrIAorY2hlY2tpbmcgaW4gc29tZSBtb3JlIGVmZmljaWVudCB3YXkgdGhhbiBHTlUgQ0MncyBwb3J0YWJsZSBhcHByb2FjaC4KK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgbWFjcm8gaXMgemVyby4KKworQGZpbmRleCBTVEFDS19DSEVDS19QUk9CRV9JTlRFUlZBTAorQGl0ZW0gU1RBQ0tfQ0hFQ0tfUFJPQkVfSU5URVJWQUwKK0FuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnZhbCBhdCB3aGljaCBHTlUgQ0MgbXVzdCBnZW5lcmF0ZSBzdGFjaworcHJvYmUgaW5zdHJ1Y3Rpb25zLiAgWW91IHdpbGwgbm9ybWFsbHkgZGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgbm8gbGFyZ2VyCit0aGFuIHRoZSBzaXplIG9mIHRoZSBgYGd1YXJkIHBhZ2VzJycgYXQgdGhlIGVuZCBvZiBhIHN0YWNrIGFyZWEuICBUaGUKK2RlZmF1bHQgdmFsdWUgb2YgNDA5NiBpcyBzdWl0YWJsZSBmb3IgbW9zdCBzeXN0ZW1zLgorCitAZmluZGV4IFNUQUNLX0NIRUNLX1BST0JFX0xPQUQKK0BpdGVtIFNUQUNLX0NIRUNLX1BST0JFX0xPQUQKK0EgaW50ZWdlciB3aGljaCBpcyBub256ZXJvIGlmIEdOVSBDQyBzaG91bGQgcGVyZm9ybSB0aGUgc3RhY2sgcHJvYmUgCithcyBhIGxvYWQgaW5zdHJ1Y3Rpb24gYW5kIHplcm8gaWYgR05VIENDIHNob3VsZCB1c2UgYSBzdG9yZSBpbnN0cnVjdGlvbi4KK1RoZSBkZWZhdWx0IGlzIHplcm8sIHdoaWNoIGlzIHRoZSBtb3N0IGVmZmljaWVudCBjaG9pY2Ugb24gbW9zdCBzeXN0ZW1zLgorCitAZmluZGV4IFNUQUNLX0NIRUNLX1BST1RFQ1QKK0BpdGVtIFNUQUNLX0NIRUNLX1BST1RFQ1QKK1RoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3RhY2sgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSBhIHN0YWNrIG92ZXJmbG93LAorZm9yIGxhbmd1YWdlcyB3aGVyZSBzdWNoIGEgcmVjb3ZlcnkgaXMgc3VwcG9ydGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YKKzc1IHdvcmRzIHNob3VsZCBiZSBhZGVxdWF0ZSBmb3IgbW9zdCBtYWNoaW5lcy4KKworQGZpbmRleCBTVEFDS19DSEVDS19NQVhfRlJBTUVfU0laRQorQGl0ZW0gU1RBQ0tfQ0hFQ0tfTUFYX0ZSQU1FX1NJWkUKK1RoZSBtYXhpbXVtIHNpemUgb2YgYSBzdGFjayBmcmFtZSwgaW4gYnl0ZXMuICBHTlUgQ0Mgd2lsbCBnZW5lcmF0ZSBwcm9iZQoraW5zdHJ1Y3Rpb25zIGluIG5vbi1sZWFmIGZ1bmN0aW9ucyB0byBlbnN1cmUgYXQgbGVhc3QgdGhpcyBtYW55IGJ5dGVzIG9mCitzdGFjayBhcmUgYXZhaWxhYmxlLiAgSWYgYSBzdGFjayBmcmFtZSBpcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUsIHN0YWNrCitjaGVja2luZyB3aWxsIG5vdCBiZSByZWxpYWJsZSBhbmQgR05VIENDIHdpbGwgaXNzdWUgYSB3YXJuaW5nLiAgVGhlCitkZWZhdWx0IGlzIGNob3NlbiBzbyB0aGF0IEdOVSBDQyBvbmx5IGdlbmVyYXRlcyBvbmUgaW5zdHJ1Y3Rpb24gb24gbW9zdAorc3lzdGVtcy4gIFlvdSBzaG91bGQgbm9ybWFsbHkgbm90IGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG1hY3JvLgorCitAZmluZGV4IFNUQUNLX0NIRUNLX0ZJWEVEX0ZSQU1FX1NJWkUKK0BpdGVtIFNUQUNLX0NIRUNLX0ZJWEVEX0ZSQU1FX1NJWkUKK0dOVSBDQyB1c2VzIHRoaXMgdmFsdWUgdG8gZ2VuZXJhdGUgdGhlIGFib3ZlIHdhcm5pbmcgbWVzc2FnZS4gIEl0CityZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZml4ZWQgZnJhbWUgdXNlZCBieSBhIGZ1bmN0aW9uLCBub3QgaW5jbHVkaW5nCitzcGFjZSBmb3IgYW55IGNhbGxlZS1zYXZlZCByZWdpc3RlcnMsIHRlbXBvcmFyaWVzIGFuZCB1c2VyIHZhcmlhYmxlcy4KK1lvdSBuZWVkIG9ubHkgc3BlY2lmeSBhbiB1cHBlciBib3VuZCBmb3IgdGhpcyBhbW91bnQgYW5kIHdpbGwgbm9ybWFsbHkKK3VzZSB0aGUgZGVmYXVsdCBvZiBmb3VyIHdvcmRzLgorCitAZmluZGV4IFNUQUNLX0NIRUNLX01BWF9WQVJfU0laRQorQGl0ZW0gU1RBQ0tfQ0hFQ0tfTUFYX1ZBUl9TSVpFCitUaGUgbWF4aW11bSBzaXplLCBpbiBieXRlcywgb2YgYW4gb2JqZWN0IHRoYXQgR05VIENDIHdpbGwgcGxhY2UgaW4gdGhlCitmaXhlZCBhcmVhIG9mIHRoZSBzdGFjayBmcmFtZSB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcworQHNhbXB7LWZzdGFjay1jaGVja30uCitHTlUgQ0MgY29tcHV0ZWQgdGhlIGRlZmF1bHQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBhYm92ZSBtYWNyb3MgYW5kIHlvdSB3aWxsCitub3JtYWxseSBub3QgbmVlZCB0byBvdmVycmlkZSB0aGF0IGRlZmF1bHQuCiBAZW5kIHRhYmxlCiAKIEBuZWVkIDIwMDAKQEAgLTI0NTUsNyArMjU3Nyw3IEBACiBGcm9tIHRoaXMgaXQgaXMgcG9zc2libGUgdG8gb2J0YWluIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSB2YWx1ZSBhbmQKIGFyZ3VtZW50cyAoaWYga25vd24pLgogCi1XaGVuIGEgY2FsbCB0byBhIGxpYnJhcnkgZnVuY3Rpb24gaXMgYmVpbmcgY29uc2lkZXJlZCwgQHZhcntmdW50eXBlfQorV2hlbiBhIGNhbGwgdG8gYSBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGJlaW5nIGNvbnNpZGVyZWQsIEB2YXJ7ZnVuZGVjbH0KIHdpbGwgY29udGFpbiBhbiBpZGVudGlmaWVyIG5vZGUgZm9yIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uLiAgVGh1cywgaWYKIHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGFtb25nIHZhcmlvdXMgbGlicmFyeSBmdW5jdGlvbnMsIHlvdSBjYW4gZG8gc28KIGJ5IHRoZWlyIG5hbWVzLiAgTm90ZSB0aGF0IGBgbGlicmFyeSBmdW5jdGlvbicnIGluIHRoaXMgY29udGV4dCBtZWFucwpAQCAtMzEzMCwxMiArMzI1MiwxMCBAQAogaGF2ZSBhbHJlYWR5IGJlZW4gZXh0cmFjdGVkIGZyb20gaXQuKSAgSXQgbWlnaHQgcG9zc2libHkgYmUgdXNlZnVsIG9uCiBzb21lIHRhcmdldHMsIGJ1dCBwcm9iYWJseSBub3QuCiAKLUZvciBtYW55IHRhcmdldHMsIHRoZSB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZSBpbiB0aGUgQysrIGZyb250ZW5kIHdpbGwKLWJlIHN1ZmZpY2llbnQgYW5kIHlvdSBjYW4gbGVhdmUgdGhpcyBtYWNybyB1bmRlZmluZWQuICBZb3UgbmVlZCB0bwotZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgd291bGQgY2xvYmJlciBhbnkgb2YKLXRoZSBpbmNvbWluZyBhcmd1bWVudHM7IHRoaXMgaXMgb25seSBsaWtlbHkgaWYgcGFyYW1ldGVycyBjYW4gYmUgcGFzc2VkCi1pbiByZWdpc3RlcnMuICBZb3Ugc2hvdWxkIGFsc28gZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIGRlZmF1bHQgY29kZSBpcwotc3ViLW9wdGltYWwuCitJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgdGFyZ2V0LWluZGVwZW5kZW50IGNvZGUgaW4gdGhlIEMrKworZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhIGxlc3MgZWZmaWNpZW50IGhlYXZ5d2VpZ2h0IHRodW5rIHRoYXQgY2FsbHMKK0B2YXJ7ZnVuY3Rpb259IGluc3RlYWQgb2YganVtcGluZyB0byBpdC4gIFRoZSBnZW5lcmljIGFwcHJvYWNoIGRvZXMKK25vdCBzdXBwb3J0IHZhcmFyZ3MuCiBAZW5kIHRhYmxlCiAKIEBub2RlIFByb2ZpbGluZwpAQCAtMzk4NSw2ICs0MTA1LDE1IEBACiByZXF1aXJlcyB0d28gdmFyaWFudCBkZWZpbml0aW9ucywgb2Ygd2hpY2ggQGNvZGV7UkVHX09LX1NUUklDVH0KIGNvbnRyb2xzIHRoZSBvbmUgYWN0dWFsbHkgdXNlZC4KIAorQGZpbmRleCBSRUdfTU9ERV9PS19GT1JfQkFTRV9QCitAaXRlbSBSRUdfTU9ERV9PS19GT1JfQkFTRV9QIChAdmFye3h9LCBAdmFye21vZGV9KQorQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBqdXN0IGxpa2UgQGNvZGV7UkVHX09LX0ZPUl9CQVNFX1B9LCBleGNlcHQgdGhhdAordGhhdCBleHByZXNzaW9uIG1heSBleGFtaW5lIHRoZSBtb2RlIG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGluCitAdmFye21vZGV9LiAgWW91IHNob3VsZCBkZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgbW9kZSBvZiB0aGUgbWVtb3J5CityZWZlcmVuY2UgYWZmZWN0cyB3aGV0aGVyIGEgcmVnaXN0ZXIgbWF5IGJlIHVzZWQgYXMgYSBiYXNlIHJlZ2lzdGVyLiAgSWYKK3lvdSBkZWZpbmUgdGhpcyBtYWNybywgdGhlIGNvbXBpbGVyIHdpbGwgdXNlIGl0IGluc3RlYWQgb2YKK0Bjb2Rle1JFR19PS19GT1JfQkFTRV9QfS4KKwogQGZpbmRleCBSRUdfT0tfRk9SX0lOREVYX1AKIEBpdGVtIFJFR19PS19GT1JfSU5ERVhfUCAoQHZhcnt4fSkKIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiBAdmFye3h9IChhc3N1bWVkIHRvIGJlIGEgQGNvZGV7cmVnfQpAQCAtNDU0OSwxMyArNDY3OCwyMSBAQAogdGhlIGNoYXJhY3RlcnMgdGhhdCBlbmNvZGUgc2VjdGlvbiBpbmZvLiAgRGVmaW5lIHRoaXMgbWFjcm8gaWYKIEBjb2Rle0VOQ09ERV9TRUNUSU9OX0lORk99IGFsdGVycyB0aGUgc3ltYm9sJ3MgbmFtZSBzdHJpbmcuCiAKK0BmaW5kZXggVU5JUVVFX1NFQ1RJT05fUCAoQHZhcntkZWNsfSkKK0BpdGVtIFVOSVFVRV9TRUNUSU9OX1AgKEB2YXJ7ZGVjbH0pCitBIEMgZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBAdmFye2RlY2x9IHNob3VsZCBiZSBwbGFjZWQKK2ludG8gYSB1bmlxdWUgc2VjdGlvbiBmb3Igc29tZSB0YXJnZXQtc3BlY2lmaWMgcmVhc29uLiAgSWYgeW91IGRvIG5vdAorZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzIEBzYW1wezB9LiAgTm90ZSB0aGF0IHRoZSBmbGFnCitAc2FtcHstZmZ1bmN0aW9uLXNlY3Rpb25zfSB3aWxsIGFsc28gY2F1c2UgZnVuY3Rpb25zIHRvIGJlIHBsYWNlZCBpbnRvCit1bmlxdWUgc2VjdGlvbnMuCisKIEBmaW5kZXggVU5JUVVFX1NFQ1RJT04KLUBpdGVtIFVOSVFVRV9TRUNUSU9OIChAdmFye2RlY2x9KQotRm9yIG9iamVjdHMgZ29pbmcgaW50byB0aGVpciBvd24gc2VjdGlvbnMsIGEgQyBleHByZXNzaW9uIG9mIHRoZSBuYW1lIG9mIHRoZQotc2VjdGlvbiwgZXhwcmVzc2VkIGFzIGEgU1RSSU5HX0NTVCBub2RlLCB0byBwdXQgQHZhcntkZWNsfSBpbnRvLiAgVGhlCi1TVFJJTkdfQ1NUIG5vZGUgbXVzdCBiZSBhbGxvY2F0ZWQgaW4gdGhlIHNhdmVhYmxlIG9ic3RhY2suICBGdW5jdGlvbgotQGNvZGV7YnVpbGRfc3RyaW5nfSBjYW4gYmUgdXNlZCB0byBkbyB0aGlzLiAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywKLUdOVSBDQyB3aWxsIHVzZSB0aGUgc3ltYm9sIG5hbWUgYXMgdGhlIHNlY3Rpb24gbmFtZS4KK0BpdGVtIFVOSVFVRV9TRUNUSU9OIChAdmFye2RlY2x9LCBAdmFye3JlbG9jfSkKK0EgQyBzdGF0ZW1lbnQgdG8gYnVpbGQgdXAgYSB1bmlxdWUgc2VjdGlvbiBuYW1lLCBleHByZXNzZWQgYXMgYQorU1RSSU5HX0NTVCBub2RlLCBhbmQgYXNzaWduIGl0IHRvIEBzYW1we0RFQ0xfU0VDVElPTl9OQU1FIChAdmFye2RlY2x9KX0uCitAdmFye3JlbG9jfSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBAdmFye2V4cH0gcmVxdWlyZXMKK2xpbmstdGltZSByZWxvY2F0aW9ucy4gIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8sIEdOVSBDQyB3aWxsIHVzZQordGhlIHN5bWJvbCBuYW1lIHByZWZpeGVkIGJ5IEBzYW1wey59IGFzIHRoZSBzZWN0aW9uIG5hbWUuCiBAZW5kIHRhYmxlCiAKIEBub2RlIFBJQwpAQCAtNDczNywxMCArNDg3NCwxMiBAQAogbWFjcm8gaXMgbm90IGRlZmluZWQsIG5vdGhpbmcgaXMgb3V0cHV0IGZvciBhIEBzYW1weyNpZGVudH0gZGlyZWN0aXZlLgogCiBAZmluZGV4IEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FCi1AaXRlbSBBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSAoQHZhcntzdHJlYW19LCBAdmFye2RlY2x9LCBAdmFye25hbWV9KQorQGl0ZW0gQVNNX09VVFBVVF9TRUNUSU9OX05BTUUgKEB2YXJ7c3RyZWFtfSwgQHZhcntkZWNsfSwgQHZhcntuYW1lfSwgQHZhcntyZWxvY30pCiBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCBzb21ldGhpbmcgdG8gdGhlIGFzc2VtYmxlciBmaWxlIHRvIHN3aXRjaCB0byBzZWN0aW9uCiBAdmFye25hbWV9IGZvciBvYmplY3QgQHZhcntkZWNsfSB3aGljaCBpcyBlaXRoZXIgYSBAY29kZXtGVU5DVElPTl9ERUNMfSwgYQotQGNvZGV7VkFSX0RFQ0x9IG9yIEBjb2Rle05VTExfVFJFRX0uICBTb21lIHRhcmdldCBmb3JtYXRzIGRvIG5vdCBzdXBwb3J0CitAY29kZXtWQVJfREVDTH0gb3IgQGNvZGV7TlVMTF9UUkVFfS4gIEB2YXJ7cmVsb2N9CitpbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBAdmFye2V4cH0gcmVxdWlyZXMgbGluay10aW1lCityZWxvY2F0aW9ucy4gIFNvbWUgdGFyZ2V0IGZvcm1hdHMgZG8gbm90IHN1cHBvcnQKIGFyYml0cmFyeSBzZWN0aW9ucy4gIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpbiBzdWNoIGNhc2VzLgogCiBBdCBwcmVzZW50IHRoaXMgbWFjcm8gaXMgb25seSB1c2VkIHRvIHN1cHBvcnQgc2VjdGlvbiBhdHRyaWJ1dGVzLgpAQCAtNDgyMyw2ICs0OTYyLDE1IEBACiBCZXJrZWxleSBVbml4IGFzc2VtYmxlciwgZG8gbm90IGRlZmluZSB0aGUgbWFjcm8KIEBjb2Rle0FTTV9PVVRQVVRfQVNDSUl9LgogCitAZmluZGV4IENPTlNUQU5UX1BPT0xfQkVGT1JFX0ZVTkNUSU9OCitAaXRlbSBDT05TVEFOVF9QT09MX0JFRk9SRV9GVU5DVElPTgorWW91IG1heSBkZWZpbmUgdGhpcyBtYWNybyBhcyBhIEMgZXhwcmVzc2lvbi4gIFlvdSBzaG91bGQgZGVmaW5lIHRoZQorZXhwcmVzc2lvbiB0byBoYXZlIGEgbm9uLXplcm8gdmFsdWUgaWYgR05VIENDIHNob3VsZCBvdXRwdXQgdGhlIGNvbnN0YW50Citwb29sIGZvciBhIGZ1bmN0aW9uIGJlZm9yZSB0aGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uLCBvciBhIHplcm8gdmFsdWUgaWYKK0dOVSBDQyBzaG91bGQgb3V0cHV0IHRoZSBjb25zdGFudCBwb29sIGFmdGVyIHRoZSBmdW5jdGlvbi4gIElmIHlvdSBkbworbm90IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgdXN1YWwgY2FzZSwgR05VIENDIHdpbGwgb3V0cHV0IHRoZSBjb25zdGFudAorcG9vbCBiZWZvcmUgdGhlIGZ1bmN0aW9uLgorCiBAZmluZGV4IEFTTV9PVVRQVVRfUE9PTF9QUk9MT0dVRQogQGl0ZW0gQVNNX09VVFBVVF9QT09MX1BST0xPR1VFIChAdmFye2ZpbGV9IEB2YXJ7ZnVubmFtZX0gQHZhcntmdW5kZWNsfSBAdmFye3NpemV9KQogQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgYXNzZW1ibGVyIGNvbW1hbmRzIHRvIGRlZmluZSB0aGUgc3RhcnQgb2YgdGhlCkBAIC00ODYzLDYgKzUwMTEsMjQgQEAKIAogWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIGRvIG5vdGhpbmcuCiAKK0BmaW5kZXggQ09OU1RBTlRfQUZURVJfRlVOQ1RJT05fUAorQGl0ZW0gQ09OU1RBTlRfQUZURVJfRlVOQ1RJT05fUCAoQHZhcntleHB9KQorRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24gd2hpY2ggaXMgbm9uemVybyBpZiB0aGUgY29uc3RhbnQKK0B2YXJ7ZXhwfSwgb2YgdHlwZSBAY29kZXt0cmVlfSwgc2hvdWxkIGJlIG91dHB1dCBhZnRlciB0aGUgY29kZSBmb3IgYQorZnVuY3Rpb24uICBUaGUgY29tcGlsZXIgd2lsbCBub3JtYWxseSBvdXRwdXQgYWxsIGNvbnN0YW50cyBiZWZvcmUgdGhlCitmdW5jdGlvbjsgeW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIHRoaXMgaXMgT0suCisKK0BmaW5kZXggQVNNX09VVFBVVF9QT09MX0VQSUxPR1VFCitAaXRlbSBBU01fT1VUUFVUX1BPT0xfRVBJTE9HVUUgKEB2YXJ7ZmlsZX0gQHZhcntmdW5uYW1lfSBAdmFye2Z1bmRlY2x9IEB2YXJ7c2l6ZX0pCitBIEMgc3RhdGVtZW50IHRvIG91dHB1dCBhc3NlbWJsZXIgY29tbWFuZHMgdG8gYXQgdGhlIGVuZCBvZiB0aGUgY29uc3RhbnQKK3Bvb2wgZm9yIGEgZnVuY3Rpb24uICBAdmFye2Z1bm5hbWV9IGlzIGEgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUKK2Z1bmN0aW9uLiAgU2hvdWxkIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gYmUgcmVxdWlyZWQsIHlvdSBjYW4KK29idGFpbiBpdCB2aWEgQHZhcntmdW5kZWNsfS4gIEB2YXJ7c2l6ZX0gaXMgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUKK2NvbnN0YW50IHBvb2wgdGhhdCBHTlUgQ0Mgd3JvdGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY2FsbC4KKworSWYgbm8gY29uc3RhbnQtcG9vbCBlcGlsb2d1ZSBpcyByZXF1aXJlZCwgdGhlIHVzdWFsIGNhc2UsIHlvdSBuZWVkIG5vdAorZGVmaW5lIHRoaXMgbWFjcm8uCisKIEBmaW5kZXggSVNfQVNNX0xPR0lDQUxfTElORV9TRVBBUkFUT1IKIEBpdGVtIElTX0FTTV9MT0dJQ0FMX0xJTkVfU0VQQVJBVE9SIChAdmFye0N9KQogRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24gd2hpY2ggaXMgbm9uemVybyBpZiBAdmFye0N9IGlzCkBAIC02Mjc0LDYgKzY0NDAsMTIgQEAKIERlZmluZSB0aGlzIG1hY3JvIGlmIEdOVSBDQyBzaG91bGQgcHJvZHVjZSBkd2FyZiB2ZXJzaW9uIDIgZm9ybWF0CiBkZWJ1Z2dpbmcgb3V0cHV0IGluIHJlc3BvbnNlIHRvIHRoZSBAc2FtcHstZ30gb3B0aW9uLgogCitUbyBzdXBwb3J0IG9wdGlvbmFsIGNhbGwgZnJhbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uLCB5b3UgbXVzdCBhbHNvCitkZWZpbmUgQGNvZGV7SU5DT01JTkdfUkVUVVJOX0FERFJfUlRYfSBhbmQgZWl0aGVyIHNldAorQGNvZGV7UlRYX0ZSQU1FX1JFTEFURURfUH0gb24gdGhlIHByb2xvZ3VlIGluc25zIGlmIHlvdSB1c2UgUlRMIGZvciB0aGUKK3Byb2xvZ3VlLCBvciBjYWxsIEBjb2Rle2R3YXJmMm91dF9kZWZfY2ZhfSBhbmQgQGNvZGV7ZHdhcmYyb3V0X3JlZ19zYXZlfQorYXMgYXBwcm9wcmlhdGUgZnJvbSBAY29kZXtGVU5DVElPTl9QUk9MT0dVRX0gaWYgeW91IGRvbid0LgorCiBAZmluZGV4IFBVVF9TREJfQGRvdHN7fQogQGl0ZW0gUFVUX1NEQl9AZG90c3t9CiBEZWZpbmUgdGhlc2UgbWFjcm9zIHRvIG92ZXJyaWRlIHRoZSBhc3NlbWJsZXIgc3ludGF4IGZvciB0aGUgc3BlY2lhbApAQCAtNjkwNiw2ICs3MDc4LDEzIEBACiBkZWxheWVkIGJyYW5jaCBzY2hlZHVsaW5nLiAgT24gdGhvc2UgbWFjaGluZXMsIGRlZmluZSB0aGlzIG1hY3JvIGFzIGEgQwogc3RhdGVtZW50IHRvIGFjdCBvbiB0aGUgY29kZSBzdGFydGluZyBhdCBAdmFye2luc259LgogCitAZmluZGV4IE1VTFRJUExFX1NZTUJPTF9TUEFDRVMKK0BpdGVtIE1VTFRJUExFX1NZTUJPTF9TUEFDRVMKK0RlZmluZSB0aGlzIG1hY3JvIGlmIGluIHNvbWUgY2FzZXMgZ2xvYmFsIHN5bWJvbHMgZnJvbSBvbmUgdHJhbnNsYXRpb24KK3VuaXQgbWF5IG5vdCBiZSBib3VuZCB0byB1bmRlZmluZWQgc3ltYm9scyBpbiBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQKK3dpdGhvdXQgdXNlciBpbnRlcnZlbnRpb24uICBGb3IgaW5zdGFuY2UsIHVuZGVyIE1pY3Jvc29mdCBXaW5kb3dzCitzeW1ib2xzIG11c3QgYmUgZXhwbGljaXRseSBpbXBvcnRlZCBmcm9tIHNoYXJlZCBsaWJyYXJpZXMgKERMTHMpLgorCiBAZmluZGV4IEdJVl9TT1JUX0NSSVRFUklPTgogQGl0ZW0gR0lWX1NPUlRfQ1JJVEVSSU9OIChAdmFye2dpdjF9LCBAdmFye2dpdjJ9KQogSW4gc29tZSBjYXNlcywgdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiBvcHRpbWl6YXRpb24gcGFzcyBjYW4gcHJvZHVjZSBiZXR0ZXIKZGlmZiAtLWdpdCBhL2djYy92ZXJzaW9uLmMgYi9nY2MvdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODI5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdmVyc2lvbi5jCkBAIC0wLDAgKzEgQEAKK2NoYXIgKnZlcnNpb25fc3RyaW5nID0gInRlc3RnY2MtMi43LjkwIDk3MDgwMiBleHBlcmltZW50YWwiOwo=